Dev Diaries: Making a game for the first time
Or how my love/hate relationship with Unity blossomed
During the months of April and May this year, I decided to take the first step into the game industry. I signed up for a short course on Unity at a local uni and off to the races I went.
Well, more like off to my V60 pour-over I went… for 5 weeks.
To graduate, I had to create a short 5-10 minute game prototype applying what I learned from the course. These included basic player and enemy movement, scene creation and collider/trigger functions. While fairly basic, I ended up challenging myself and adding more narrative and gameplay mechanics to beef up the rudimentary requirements.
This is a dev log of Voltrunner’s development process, the first 2D platformer game I created in 1 week.
It starts with an idea…
During the course, I was playing a lot of Cyberpunk:2077 Phantom Liberty. So naturally, being on my second completionist playthrough, my head burst with the cyberpunk aesthetic. Because of the 1 week time limit, I decided to leverage the many free 2D assets available, and create a simple 2D platformer that reflected this aesthetic.
Requirements
At a high level, there were essential mechanics that I wanted to include in this prototype. The player character had to have basic WASD and jump controls, and could explore a few levels.
Next was figuring out the player objectives and story. Granted, I knew the story would be thin to fit within the prototype constraints, but I had the opportunity to demonstrate what I learnt from the course.
Thinking through the verbs that the player has access to, it would include basic movement controls, jumping and shooting enemies. The player wouldn’t be able to negotiate with enemies, but could hide from their attack range depending on the scene.
Loosely inspired by Phantom Liberty’s introduction, I decided that it would centre around a pilot (player) stuck in a cyberpunk city after their ship crashes. Without power to get their ship flying again, they have to navigate levels and collect enough power gems to get their ship running to be able to fly off.
To add realism, I wanted the player character to have a name, which I co-opted both from 2077’s "V” and my own gamer handle. Thus, Volt the plucky pilot was born.
Story and dialog
Story done, I began writing the dialog. I kept it to fit within the gameplay span of 5-10 minutes. The dialog is kept straightforward with hints of personality to show Volt really wanted to leave the city.
In the beginning scene, Volt’s first sentence is: “Oh no, My ship's out of power…”, as they stand in-front of the crashed ship. Not long after, another dialog box prompts Volt to say “Where am I?”
As the player progresses through the levels, Volt continues to remark about collecting gems and defeating enemies by shooting at them. These dialog strings also serve as in-game tutorials.
When the player finishes the game, Volt describes how the ship has enough power to run again and Volt is all too happy to leave. I reused the sunset backdrop where the final enemy is, indicating a continuation of time. I kept the sprite’s “bouncing” to show how happy Volt is.
Level mechanics
Being a 2D platformer loosely inspired by Metroidvania games, I wanted to add varied enemies and a couple collectibles so the game was playable.
Being a platformer, it had to have… platforms! I wanted to add platforms of various heights to fit the (janky) jump systems, and exits at different levels.
Ideally, the enemies would be a blend of stationery, patrolling, and aggressive types using ranged attacks. The collectibles would be hearts for life and gems.
Sounds pretty simple right? Well, I thought so too, until I started programming!
Scripting
What I wanted to do was more advanced compared to what I learned, which meant relying on third-party tutorials and Unity’s docs.
And so, what did I do? Create a white-box level for another platformer to figure out what I was able to do. I did this the week before, and spent about 4 days learning and getting through most of it.
Turns out… I still wasn’t ready. Me and programming have historically not got along, so my confidence soon became a very, very long week.
Enemy AI proved to be the most difficult to script, even with my extra efforts. Yes, this was extra credit outside of the project’s requirements, but I really wanted to get the basics right. Some of the issues I had most trouble with were getting the enemy to attack when it saw the player, and triggering the correct sprites at that moment.
As you can tell from the final result, I paired down the enemies to simple sprites and no attacks besides a basic collision because I could not figure it out. I might, in the future!
Level Design
Since I was using free assets, my choice of sprites and backgrounds was limited. I decided to lean into this and kept a yellow-purple colour scheme throughout the levels, which matched well with the intended aesthetic.
All interactable objects and platforms were green, for contrast between the darker environment.
The game would start with a brief introduction and story setting before moving on to enemy/collectible levels. On each level, the player would reset with 10 health, which removed the need to collect health along the way. If they died, they would restart on the same level.
In the level before the final enemy, there would be a level to break up the enemy-gem pattern. This was further inspired by the common practice of a save/prepare level before the player meets a difficult enemy or point of no return.
Music and audio
My original intention was to include audio for all interactions:
Player jumping, shooting, and receiving damage (getting hurt)
Enemy robot movement, receiving damage
Final “boss” enemy’s movement, receiving damage and melee attack
However, nearing the deadline, I cut down the music and audio to just the essentials:
Theme music
Level transition music
Completion music
Player’s gun shooting sound
Since the enemies had a hurt and defeat animation, there was already visual indication to the player when the enemies were hurt and defeated.
I was looking for a relatively 100 BPM background piece that would play on menu start, and proceed until the break level before the final enemy. The theme music, (created by [name here]) fit the bill by being several minutes long and at 130 BPM, had the energy to motivate the player to progress.
At the break level before the final enemy, the theme’s fast synths grind to a halt to a slow, thumping bass to indicate a change of pace. The player gets a short break and can still collect gems for the last time before moving on.
The ending music remains relatively fast at 115 BPM, but slows down slightly and is more uplifting to give the player a sense of accomplishment for completing the game.
Closing thoughts
Even though this game is a “quick and dirty” prototype, I employed a standard narrative-influenced gameplay structure that expressed a clear Player vs Environment gameplay.
On my next revisit, I’d include:
Missing audio effects
Variations on enemies and sprite animations
More collectibles like health and weapons
Longer story describing Volt’s accidental landing and ending follow-up
Try it on Itch.io! Note: Like all first tries, have no expectations :)
Thanks to the following creators: