What is it:
Pyromaniac is a top down 2D Adventure game. In this game you play as a character who wields fire to solve puzzles and defeat enemies. Can you catch the chicken that stole your underwear? Will you make new friends, or burn all who stand in your path? The choice is yours.
What I Did:
I worked on this game in a 4 person cross disciplinary team. I was the only programmer in my team, so I created every mechanic, system and event using C#. I worked on Player Movement, the Combat System, Actor AI, the Dialogue System and more.
Challenges and Solutions:
Since I was the only programmer on the team, I needed to create complex systems while making them as organized as possible to allow further iteration and isolate bugs as I continued development.
I decided early on for the player controller, to utilize animation blending alongside a state machine to encapsulate behavior. Instead of having a separate state for each walking direction, I had a Movement and an Attack State. The Movement state would read Controller Inputs as a 2D vector while keeping track of the previous input (for idle and attacking directions) and would blend animations depending on the direction and magnitude of the input where a magnitude of zero would lead to playing an Idle animation. The attack state would handle attacking, and would retain momentum, but disable new movement until the attack animation would stop playing and would support multiple attacks.
As the player progressed, they would unlock new attacks to use that would correspond to different buttons. Each attack would have a specified speed and damage. There were two main types of attacks, melee and projectile. A melee attack would have an area of effect, while a projectile attack would emit a projectile. Projectiles would have their own data for animations, behavior, damage triggers, and would be able to be fired in the proper rotation relative to the player's previous input.
When creating Actor AI, I used a similar approach to create a simple state machine for Enemy AI. I created a simple patrolling system which would navigate along a preset path determined by points. I noticed that it was hard to create these paths, so I drew lines in the editor to help designers. I also added a simple field of view which when the player would enter would lead the enemy to start chasing the player with a delay for attacking. To account for a player who would run from enemies, I made enemies teleport back to their patrol path once the player had become sufficiently out of range and the enemies were no longer visible.
I also wanted to add other features such as having dialogue that we could write in .txt files. To accomplish this I had a Dialogue Trigger and Dialogue Manager class that would parse data from a text file. I wanted to be able to store the names of who was talking as well, so I created my own markdown system where a designer could specify [NAME=Michael] to change the name display in the dialogue box to Michael. I also utilized one main scene for our game world to reduce loading and created portals paired with a fade effect to facilitate doors and multiple locations.
To add variety to the game, we added puzzles to the game such as needing to light torches or hit switches to progress and navigating an ice cube through a group of enemies where the player would have to try not to melt it with their attacks. We also implemented a rage (blue flame) state for the player where the player would deal more damage, but could hurt friendly NPCs. We used this system to allow for multiple forms of progression where a player could complete a challenge, or burn the gatekeeper to a crisp.
What's Missing / Lessons Learned:
I had some issues getting everything to work properly, as we only had 10 weeks of active production time. I thought that our game would feel better with unrestricted movement, yet collisions were rectangular and were handled with Unity's default physics system e.g. walking into walls would feel too bouncy. We also never really decided how burning objects should, the discussion kept getting pushed back and as such we never had time to implement it.
Despite these hurdles, we were pretty organized. Several unexpected personal events happened throughout development, yet we were always able to communicate with each-other and reduce scope when necessary. We were able to produce a fun game which allowed us to improve our skills and stay true to our vision of having deep systems, original art, and multiple ways of progression.
Leave a comment
Log in with itch.io to leave a comment.