The game was made within a small team made up of three other people. My role within the team was programmer, where I was assigned to create most of the game mechanics present within the game. The other members of my team were made up by 2 concept artists and a technical artist/game designer. The games main gameplay loop consists of running away from the curtain that is chasing the player, and to try and get as far as you can before the curtain overtakes the players. The prompt symmetry was integrated by having the main player be mirrored onto the opposing side of the map, having the player control two characters through different obstacles in order to escape the curtain. This has been further built upon by introducing the concept of rotational symmetry by having the the map rotate around and change forcing the perspective of the player to alternate between horizontal and vertical gameplay, while still keeping a line of symmetry through the centre of the map, having the characters mirror each others actions. The map itself is procedurally generates and build upon itself as the player progresses, while also triggering different transitions to alternate the map between horizontal and vertical gameplay.
For this game I developed many different mechanics to try and create a fun game experience.
I created a simple player controller, with multi-character integration so both characters within the scene can use the same player controller, while still maintaining the movement across opposite sides of the board. This include integrating methods to flip the players gravity and movement controls so they are able to properly alternate between the vertical and horizontal portions of the game
I also created the procedural map generation system, present within the game where different pre-made level blocks are generated in front of the player, to build an infinite map. This generation system has some built in decision handling for deciding what level blocks to spawn in for different segments of the game, from handling transitions to different map states, as well as generating level blocks fitting for the players orientation. The level has four main cases to consider for spawning in level blocks to create a smooth experience, one for the base horizontal orientation of the game, another for the base vertical orientation and two more unique cases for when the players have swapped sides with there own horizontal and vertical blocks to make up for that, as well as making it so each state can be easily moved between from each orientation for a smooth game play loop.
I made sure to create base and alternate level blocks for the map generation system so the game can be engaging while also introducing some systems to prevent the player from soft-locking themselves, such as by falling back into the horizontal portion of the level once they have moved over to a vertical segment. This also included creating different transition blocks that could be spawned in to handle moving between varying gameplay orientations, for example, horizontal to vertical, horizontal to the flipped horizontal area, and from flipped horizontal to a flipped vertical map. I handled creating most of the level blocks with some help from someone on my team to create the vertical portions.
I created the curtain enemy that chases the player inside the game, where the curtain will slowly increase their movement speed over time based off of the distance the player has travelled ramping up to a maximum speed cap to keep the game fair and engaging. To ensure the enemy remains a threat, the enemies speed will increase so that it can maintain a close distance to the player.
To help make the game engaging I created a leaderboard system for the game, that displays the distance travelled for the players tracking the furthest distances they have reached. I also incorporated a saving system so the information can be retained across multiple game instances.