I started this project as a stepping stone to learn what it takes to make a video game. From ideation to execution I want to learn what it takes and show to the world that can do it. In this post I will break down how I made “Plants vs Bubbles” and share some lessons I learned along the way. I won’t go in-depth about everything but I hope this gives some insights on the huge amount of effort it takes to make a video game. Even for a “simple” one.
1. Keep it Simple 🙂
As I’m just learning how to use the Unity game engine, I aimed to have the gameplay for this game be as simple to create as possible. I was playing a game of Bloons TD 6 with some friends which is a simple game about buying monkeys that throw darts at Bloons (”balloons”) that follow a path. If too many Bloons make it to the end of the path, the player loses the game. This is a sub-genre of video games called “Tower Defense”.
Whenever I played this game with my friends, this thought kept creeping into my head “this game is so simple. I could make this game”.
I don’t think it would be fun to just make a 1 to 1 recreation of Bloons TD 6 and I have an gripe with the game too. It’s too mindless. I wish I felt more urgency rather than sitting back and watching the monkeys do everything for me.
Bloons meets Plants vs Zombies
To make the player feel more engaged, I aimed to add two mechanics that Plants vs Zombies have in their game.
- Towers can be destroyed in some way. Just like how Plants can be eaten by the Zombies.
- The player should have control over the economy. Sunflowers can generate “sun” over a period of time.
By adding these systems, I want to add a layers of decision making for where the players spend their time. Whether it be buying Towers, upgrading Towers, defending Towers, or getting “money”, I didn’t want the player to sit back and relax.
Though in retrospect, I think I actually made the game a bit too stressful and too challenging for some people. I will talk about that a bit more later.
2. Plan Before Development 📃
Notion
Now that I had the idea for the game, it was time to start preparing the to-do list. I used Notion and made a straightforward Scrum board to keep track of all the tasks.
Source Control
I used GitHub as my source control and it definitely was extremely helpful for this blog. I was able to go back in time to older versions and take screenshots/videos of what it looked like years ago. Makes me proud to see this chart too of all the days I spent on this game.
After filling out the to-do list, I created this concept art to show what I wanted the game to look like once it’s complete.
3. Game Design 👾
Let me tell you a bit about “The Door Problem” from Liz England. She is a systems designer in the game industry and in her blog post, she describes how game designers have to make many decisions, even for something seemingly simple as adding a door to a game. This resonated with me a lot as I started development for the Plants and Bubbles.
Turret Design
Plants, monkeys, whatever you call them they are just turrets in the end. As game designer/developers, we need to give the turret so many systems.
- Which turret to purchase?
- How to cancel a purchase?
- Where to place the turret?
- Where can the turret be placed and where can it not be placed?
- What kind of projectiles does it shoot?
- Does it even shoot any projectiles?
- What do the projectiles sound like?
- What upgrades are available?
- How do we spawn a lot of projectiles without causing performance issues?
- How does the turret determine where to aim at?
As I’m a developer, designing these systems excited me but I also found that this blinded me from the reality of how much work the rest of this game would be.
Enemy Design
Alright, now do the same game design exercise we did for the turrets but for the enemies.. great 🫠
- What types of enemies will we have?
- How much health do they have?
- How many of them will spawn every round?
- Where will they spawn?
- How fast are the enemies?
- Which turrets can hit which enemies?
- How much damage do the enemies do?
- How can I balance the enemy to be fun to fight against?
I spoke about how I want the player to feel urgency for the plants they bought and feel like they want to protect their plants they worked so hard to grow. I played around with different systems for how to get the plants out of the “bubbled” state. The plants could even be destroyed forever! I decided that it was too punishing to the player to have them destroyed and wanted to give them a chance to free them.
Visual Design
Since I had practice making pixel art I thought creating the artwork would be easy. Sadly part of the problem with a “simple” turret is that I had to decide how they look in 8 cardinal directions in order to give them a smooth rotation. I also needed to create an idle and shooting animation for each direction AND a profile photo to display in the upgrade screen. This was not as fun as I thought it would be and where I felt scope creep kick in. Scope creep is when game designers have so many features they would like to add to their game but it eventually becomes an impossible task to do. At this point I knew that I needed to reduce the number of plants I would add to the game in order to calm my sanity.
I definitely was one of the people who thought making pixel art would be easy. It is, but making good pixel art definitely takes a lot of thought and time.
Level Design
Sidenote, I didn’t want the game to be themed so closely to Plants vs Zombies and Bloons for obvious reason.. (please don’t sue me Electronic Arts or NinjaKiwi 🙈). For a long time it was going to be “Penguins vs Bubbles” as a cheeky nod to my initial idea “Plants vs Bloons”. I ultimately changed it to hopefully avoid any legal disputes.
Learning to work with tilemaps is a whole other world. I needed to iterate on them a lot as they don’t look pleasing if they aren’t flush when they are placed next to each other. Thank goodness my software Aseprite has a very useful tilemap/tileset creation system.
For a while, I didn’t have it so enemies can come from multiple spawn locations. I’m glad I updated this logic and had the spawner randomly choose where to spawn the next bubble. This made it so I could have more interesting designs for the levels.
I often feel like I have split personalities when game developing. A part of me says “let’s add this feature, it’ll be so much fun”, then another groans and asks all the questions on what this “feature” will require and how much effort will it take. Sounds familiar to what I do at my job too… I may be a workaholic.
Progression
What if this game was a roguelike where your plants are retained each level and you choose between three upgrades that improve your plants in some way. Your plants then stay until they all get destroyed. What if bubbles could spawn infinitely and your goal is just to survive!
There are so many “what ifs” I had when deciding the progression because it changes the game so much.
- How would plants get unlocked?
- What types of upgrades can show up?
- How do we decide what enemies show up when?
- Are there any permanent upgrades?
- How do we move the plants we purchased from one level to another?
Linear Levels
After mulling over how I want the progression of the game to be, I ultimately ended up making it a typical linear level clear game where the objective is to clear each self contained level before moving onto the next. As I spent a lot of time already on the development and art, I didn’t want to spend another year (or longer!) to make this a roguelike.
This was my first draft of the level select screen and I was so close to making this the final copy but it’s just not good.. The point of any game is to make the player FEEL emotion and this just seems too simple.
I changed the level select to be and actual world map! I loosely based how it works on the one you find in Super Mario World on the SNES and I’m so glad I got it working. I think it makes you feel way more immersed into this world.
Game Balance
Now that we have the level select system, what will the levels be? How many levels will this game have?
I based this decision on how the player will play this game. Since this game is a browser based game, I don’t want the player to spend 40+ hours on this game. I also want the game to gradually ease the player into the mechanics and not dump everything at the player all at once. This is also where I learned that I made too many complicated mechanics and I have no way of teaching the player about them.
In order to help with game balance, I got the statistics on each round for the Bubble spawner system by putting the data into a SQLite database. This allows me to see how long each round will take so I don’t have to playtest the levels myself and manually record how long it takes. This also helps me figure out if there’s a round that is too difficult so I can make adjustments.
Intuitive Tutorial
I appreciate when video games give a very minimal tutorial. Instead of spelling out each mechanic to the player like a prompt that says “press A to jump”. Games that let the player explore and discover how to play themselves give a way more immersive feel. Nintendo does a great job of this and I want to carry over this design to my games.
Example #1:
Example #2:
As I was showing my friends the game, I loved when they would get that “Aha!” moment when something finally clicked for them like discovering that cherry bombs are a one-time use plant or that plants that are in the “bubbled” state can be clicked on to be freed.
I did get feedback that some things weren’t clear like how players didn’t know plants could be upgraded but I was aware of that and felt very burnt out on this project so I opted not to fix it. For my next game I’ll definitely write cleaner code so it’ll be easier to create a tutorial that walks through each mechanic even better.
Please take this as a warning: if you aim to create your own game, for each new mechanic you add, before implementing it ask yourself, “How will I introduce this to the player?”
Music and Sound Effects
My experience with music is very limited. I learned how to play guitar in high school and I taught myself to play a couple of songs on the piano. To make my own music for this game I had a couple of objectives.
Learning to use a Digital Audio Workstation (DAW)
I chose to use MPC Beats as it’s a free software that is easily integrated to the midi keyboard I purchased but what I’ve heard is that any DAW has their pros and cons so I wouldn’t recommend MPC Beats for everyone. It’s now just the one I’m most comfortable with. There were a lot of challenges I faced with this software like assigning a note to the pads can be a pain but I eventually got grips on the basics.
Learning to Compose Music
As a truly beginner composer, I took a couple courses on SkillShare and Youtube that showed the basics on how to play the piano and how to compose my own music.
Next I was having a bit of fun and wanted to gather some video game music that would give me some inspiration. I love the original Spyro the Dragon (PS1) soundtrack composed by Stewart Copeland. I linked a video of him below and it’s my dream to have the same enthusiasm towards music as he does.
I can’t have a game about Plants vs Zombies without mentioning Laura Shigihara. The soundtrack for the game is so unique and perfectly matches the game’s charming yet spooky vibes.
For my game, I went on a quest to find the instruments that would fit the look and feel for it. Since my game was pixel art based on the SNES and Gameboy era of video games, I did a lot of research and I stumbled upon this video where I learned about VSTs and soundfonts. This is when I decided I would use the Pokemon Ruby/Sapphire soundfont.
After diving deeper into the music composing rabbit hole I had to face my fear of actually doing it myself. I think I spent 2 or 3 weekends writing music, making mistakes, and finally getting it all done.
Learning to Make Adaptive Audio (FMOD Studio)
Adaptive audio is a dynamic soundtrack system that responds to the player's actions and the game's state in real time. Without a system like this, games become a lot less immersive and can be straight up annoying at times.
I used FMOD Studio which has easy to use integrations with Unity for a couple of cases:
- Clicking on the “Suns” uses different pitches to create variety.
- Cutscene uses parameters to determine when to fade into the next music or sound effect cue. For example, the “Woosh” sound effect as the camera pans and the “DEFEND. THE. PLANTS” text.
- When navigating the level select and going to “Night” levels, the music gets a bit darker as I shifted the pitch and changed the EQ to make these levels feel more tense.
There are a lot of links in this section but I hope you’re staying with me. We’re almost at the end!
Closing Thoughts
Just thinking about everything I went through makes me tired, but I’m glad I went through it. Taking on all these different roles gives me a lot of respect for everyone involved in video game creation and I can’t wait to create my next game! Though I can’t celebrate just yet…
4. Releasing the Game 🥂
After fixing a ton of bugs and adding the ability to play on mobile, I finally released the game on “itch.io”. I sent it to some friends to test the game but now I need to start marketing the game so it can reach a wider audience.
Play Plants vs Bubbles in your desktop/mobile browser here!
Marketing
Time to put my business hat on and market not only the game but also let people know who I am!
Creating a Gameplay Trailer
I made a quick gameplay trailer using Vegas to give people an idea on what to expect when they play the game. It didn’t take me long to make it as I just recorded myself playing it without any fancy or new animations. In the future I would love to learn from Derek Lieu as he’s known to be a professional in making way more eye-catching game trailers.
Posting on Reddit
Since this is a game that combines Plants vs Zombies and Bloons, why not post this on their subreddits! This was such a joy to do as I got so many people in those communities trying out the game and having fun. I got a lot of “PEAK” and “ABSOLUTE CINEMA” messages in the comment section so it sounds like they’re having a good time.
Promoting Myself
After putting this game out into the world I feel so much relief. I hope this post was able to illustrate the blood, sweat, and tears I put into the game but I mostly hope it inspires you to work on whatever you’re passionate about too. This is just the beginning of my indie game developer journey so if you want to see more from me, please follow me on Youtube for videos and my Instagram where I’ll be posting my artwork. Thanks for reading!
