Skip to content
This repository was archived by the owner on Jun 22, 2026. It is now read-only.

Bvisi0n/GravityBender

Repository files navigation

Gravity Bender

This is an education project I created as a student for the 1st year course Gameplay Prototyping in the Game Development major at Digital Arts & Entertainment.

Build Status Build Status

The Emscripten workflow generates a web version of the project and publishes it here as a github page.

In the commit history you may find commits dedicated to the course Programming 4 which focuses on the book Game Programming Patterns by Robert Nystrom. I took this 2nd year course in the same semester to fill some gaps in my schedule and to learn a bit ahead of time. Passing it was never the intention and my schedule didn't allow it either.

Minigin

This repository uses Minigin as it's starting template, a very small project using SDL3 and glm for 2D C++ game projects. It is in no way a game engine, only a barebone start project where everything SDL3 related has been set up. It contains glm for vector math, to aleviate the need to write custom vector and matrix classes. Note that the link to Minigin points to the commit I used for this project, it has since gotten more updates.

Gameplay Prototyping

The course covered several lenses of the book The Art of Game Design: A Book of Lenses by Jesse Schell. Students were also tasked to create a game prototype using the iterative design process and playtests, first in small groups with physical assets like paper, cardboard, dice, pawns, etc. and then individually with a digital prototype. This repository contains my digital prototype.

Game Overview

Short Description

You’re an entity trapped on a toroidal plane, infinitely looping in all directions. Strange wormholes randomly appear and spawn projectiles who seek to collide and destroy you. They can only be eliminated by entering the event horizon of your temporary blackhole ability.

Screenshot

Screenshot of the game

Target Experience

The game is about a struggle for control, as more waves of projectiles enter the playfield the simulation becomes more and more chaotic, the player experiences pressure due to loss of control and must use the blackhole ability to regain it by eleminating projectiles.

Humans naturally seek control and order, think about OCD where people feel the need to perform certain rituals to regain a sense of control. Dementia is also a loss of control, in extreme cases the person is in a complete state of panic as they don't understand what is happening to them and can't do anything about it. There are many more examples but I think you get the point, control is a very basic human need and when it's taken away from us we feel stressed and anxious. This game tries to evoke those feelings by putting the player in a situation where they have to constantly fight for control against an overwhelming force.

Game Mechanics

Goal

The goal is to survive as long as possible against the waves of projectiles. There is no score, timer or defined win condition. The design approach was bottom up, mechanic first, using a philosophy that's about perfecting the core interaction, the primary "verb" before adding more content.

In it's current state one could claim that the absence of timers and scoreboards strips away distraction, forcing the player into a state of pure flow, focused entirely on the intrinsic joy of survival but that's just a side effect of the design approach.

Core Mechanics

The player is represented by a yellow circle with a tiny cyan circle inside it. Player movement uses physics based velocity and a drag resistance to give it weight.

A spawner object represented by red outline square appears at a random location and enters a 3 second anticipation state during which it indicates a direction using a small orange circle. When these 3 seconds have passed it will shoot 10 projectiles represented by a small red square into that direction at a specific velocity.

When all projectiles are spawned the spawner object enters a cooldown state of 15 seconds, this cooldown state is reduced by 10% every time it is triggered. When these projectiles collide with the player, the game ends.

The velocity of the projectiles can be influenced by gravitational forces which includes acceleration and deceleration, although the maximum speed is limited to a set amount. One such force is projected by the player itself which will pull the projectiles towards it.

The player can also spawn a black hole at it's current location; the event horizon is represented by a cyan circle with another cyan outline representing the range of its gravitational pull. When projectiles collide with the event horizon they are removed from the simulation.

A blackhole has a lifetime of 6 seconds and a cooldown of 2 seconds ensuring there can only be 3 present at the same time. The size of its event horizon is slightly smaller than the size of the player, this is to ensure that the player can not hide inside it.

Player Input

Players can move using WASD and spawn blackholes using the spacebar.

The iterations

About

Bottom-up gameplay prototype exploring trajectory-influence mechanics. Features a custom C++/SDL engine and 3 design iterations based on playtester feedback.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Generated from avadae/minigin