This game was made for a month long solo jam project. Here is a brief overview of the build a the end of the month. Below is a more detailed look at my design process and ideas.
Provided Theme: Everything Falls Apart
Gateway Diver will challenge player's to manage switching between two characters to reach the end of the level. While the player can only control one character at a time the rest of the world is always active. In the world of the Mental Plane the player will use both weapons and spells to down foes while working to the end. In the physical world the player will have to utilize speed and cunning to sneak through packs of enemies while minimizing damage. At the end of the both worlds lies a temple, getting both characters to the temples will end in the game in the player's victory. Having either character die will result in a lose.
Mechanically, Gateway Diver forces the player to pay attention to and act on two fronts but can only ever be active on one side at a time. When the player makes mistakes or takes damage on either side, game play will become more difficult leading to more potential mistakes. This positive feedback loop of negative consequences creates a spiral that will punish poor play.
From a level design perspective I went with a direct approach and made the Physical World filled with debris and collapses to be navigated around. Enemies will continuously spawn in the Physical World making reaching the end more difficult as time goes on. At the end of the Mental Plane there lies a boss for the player to fight. The longer it takes for the player to reach the boss, the more health the boss will have. Both of these time sensitive elements help convey a sense of building chaos as the player continues through the game.
Gateway Diver will require the player’s full attention and concentration as a simple mistake could lead to everything spiraling out of control.
The default moving state.
For a short distance the character will move at an accelerated speed. Sprinting will cost the character Energy overtime.
Leap a small distance into the air. This can be done while sprinting to jump a further distance.
Switch Active Character
Activated with a key press the player will switch between the two characters. Only one character can be controlled at a time.
Physical World character only. Certain areas will allow the player to hide from enemies. While hidden Monsters will continue to spawn but will be unable to find the player. Hiding enables the character to Meditate.
Physical World character only. Only useable while hidden. Sit still and begin focusing the mind. Restore Serenity (health) to the Mental Plane character, damage or movement will interrupt this effect.
Attack - Sword
Mental Plane only. Slash with the sword to deal damage to enemies on contact. Costs a set amount of energy. Very low cooldown.
Attack - Flare Spell
Both character possess this attack. The character casts a flare, dealing light damage and stun enemies for a short period of time. Costs a set amount of energy. Has a moderate cooldown.
Damaging Terrain Traps
Mental Plane only. If triggered a circle will appear beneath the player and after 2 seconds a spike will emerge from the ground, dealing massive damage if it strikes the player. These damaging spikes and their circle indicators are used by the boss at the end of the level.
If either character is lowered to 40% health then their half of the screen becomes filled with static. This helps feed the feedback loop of punishing mistakes.
As either character begins to lose Health or Serenity the display for that character will take on static making the visibility and gameplay more difficult.
The diagram above shows the growth of the static effect as the player becomes more damaged. In the middle the characters are moderately damaged. The picture on the right is a display of the characters under heavy damage.
In-game look: Right side damaged past 40%.
Physical World character's Health and Energy Bars
Mental Plane character's Health and Energy Bars
Boss's growing health bar
Enemy Health Bar
Health – There will be two health bars on the display for the Physical World, one for the active character and one for the body of the character in the Mental Plane. As health decreases the display in the Physical World will become clouded. If either reaches zero the character dies and the player loses.
Energy – Represented as a bar this resource allows the player to do certain actions for an amount of the energy. Energy will slowly regenerate over time.
Serenity (health) – The health bar equivalent for the Mental Plane, Serenity represents the characters mental state. Ranged attacks will cost serenity to use. As Serenity lowers the display will become filled with static making actions more difficult. If serenity reaches zero then the character’s mind is lost and the player loses.
Energy – Same as above, the energy bar will be used to take certain actions and regenerate slowly over time.
It will be very important for the player to manage their time in each world effectively. Tunnel visioning in one world too long will severely limit their capabilities in the other. As monsters continuously spawn over time in the physical world. In the Mental Plane the boss's health will start low and increase overtime as long as the final witch is alive. The player will be pressed to make progress in both worlds before getting overwhelmed.
Deranged Citizen – A citizen of the world put under a spell. It is slow moving but will constantly hunt the player.
Deranged Citizen – As the manifestation of the mind's of the civilians, these act the same as the Deranged Citizen's however they are bound to the witch's platform.
Nightmare Witch (Special) – A walker of the Mental Plane, these beings are responsible for the False Manifestations in the Physical World. Nightmare Witches attacks hit hard and are indicated by a visible windup. Each Nightmare Witch will stay within its territory and must be defeated in order to progress.
Embodiment of Grief (Boss) – The great horror that is responsible for this whole mess of a world. This nightmare has three different abilities: a strong hitting melee attack, a flame cone that sweeps across the platform, and an area damaging attack indicated by a circle on the ground.
In this build the basic player movement and attack controls were implemented. Unfortunately there was an issue when changing control between the two characters. The camera that the character's would use as perspective when moving would only move and readjust for the character on the left. As a result the game was exceptionally hard to play. It was an overall frustrating experience for testers. This did give me a clear priority fix: establish a functional and fluid controller for the player to use.
Basic AI were added in this build that would follow the player around their platforms.
The initial level designs were started and the right side, mental plane was mostly complete. In the physical world the basis for my design was laid out but some areas were still empty and needed filling.
For the second build the largest change was switching to a custom made first person controller. Rather than trying to rely on an asset from the store that I didn't fully understand, building my own controller gave me the freedom to make changes as I saw fit. Going from third-person to first-person cut down on a large amount of work that would have had to be put into animating various attacks. While the controller from the store did have some animations included, each animation would still have to be customized slightly and lined up to feel smooth. With limited time to work on this project, I chose to focus more on core gameplay mechanics that I could get some feedback on.
Basic attacks were added to both AIs giving the player something to avoid while progressing through the level. To add more agency to the left side enemies would spawn at a constant rate, eventually growing to a number that would overwhelm the player. There was a flaw with this as the number was not capped, eventually causing an explosion of enemies that many testers found unfair to play against.
Level designs were further iterated on. A major addition to this version was the large building for the left side player to navigate through. After that the rest of the area still had to be fleshed out to further reduce empty space.
Combat in this build felt slow and overall more tedious than fun. Both attacks felt powerful, but were slow and had too high an energy cost. The slow rate of replenishing energy furthered this problem.
The camera static effect felt appropriately stifling to play against, however some testers felt there was little counter-play offered, especially with uncapped enemies on the left-side.
What went well:
One of the largest design challenges from this project was the development of the player controller. Starting with the 3rd-person controller from the asset store seemed like a good way to save time and resources for other parts of the project; however, getting that controller to work with all the functions I wanted it too proved to be difficult. While I did figure out how to code additional abilities into the controller, the fact that the camera would have to be completely redone to work with that controller, was too much of a deal breaker.
Scrapping the third-person controller in the middle of week two in order to build a first-person controller was stressful, but ultimately lead to a very fluid and easy to build upon controller for the player to use. Despite being alone on this project I was happy with the number of features I was able to include in the short amount of time provided. The resource system steadily became more advanced. Thanks to all the play-testers and instructor feedback I was able to evolve the ideas of the game at a consistent rate.
What could have gone better:
There was a handful of features and ideas I initially wanted for the project but ultimately had to cut due to time constraints and transforming the idea to be an overall better experience. There are however a few features I’d like to point out that I’d add first, if I were to go forward with this project in the future.
In addition to the static overlay on the camera when severely damaged, I had another camera mechanic I had started on but couldn’t finish in time: Camera Domination. The longer the player would control a single character the more that character’s camera would take up on the UI. When switching back to the other character the player’s vision would be hampered. Due to coding failures and initial tests proving the mechanic not very impactful it was dropped.
To help add more player option in combat, I had intended to add a dodge mechanic. However, given that the player rarely seemed to need it due to the sub-par AI, it was cut to focus more on fleshing out the game’s core mechanics.
While the character in the physical world could use the stun attack I had originally planned to give it a push back instead. However, when implemented, this either didn’t work properly or messed with the AI’s navigation and caused errors.
The boss in the mental plane still needs more testing. While all three of its abilities work they do not work consistently. Additionally, some of its abilities provide little to no window for counter-play. At times the boss’ health bar would not properly display the right amount of health, leading to confusion among testers.
Combat in general could be improved to help add more player urgency. Even though its been iterated on a few times already, there are windows where the player is waiting to act rather than being proactive. A faster recharge time on stamina would help with this. If the dodge and push back feature were added that’d give the player more power. To compensate for that the AI would need to be heavily updated to be threatening. Lastly hiding ended up being too powerful of a mechanic for the player. Going forward I’d likely remove the ability to meditate and instead give a flat serenity and health restoration over 1 to 2 seconds, and then destroy the hiding place. This would loosen up on the downtime as well as ensure that the character in the physical world is in constant need of attention.
What I learned:
I learned many things over the course of this month but the blunt of what I learned were improvements to my coding. Reading through the third-person controller code and developing my own first-person controller gave me a much greater understanding of how to handle moving the player around and providing abilities. In general reading through the third-person controller code gave me a greater understanding of inheritance, syncing code and animations, and how the camera can maneuver in respect to the player’s actions. Putting what I learned to use in the latter weeks of the project gave me some practical experience and a lot of learning through failure. Strangely, the interactions between the third-person controller and camera, when split between multiple entities created a new idea for a puzzle game.
Before this project I only knew the basics of AI navigation. Now, I feel reasonably confident in my ability to create more aggressive AI. Figuring the ends and outs of having scripts talk to each other properly was a fun puzzle. Learning how to sync abilities and animations, for both the player and the AI, will be a powerful tool to use in future projects. Lastly learning how to control the camera and add in some small effects helped add depth to this project.
Improving on the many facets of coding and design I learned during this project will take some time, but will ultimately help me become a useful piece on future teams.