Loading...

Learnings of a Solo Game Developer — Wacky Drivers video game

Jose Ciccio

ex-Senior Engineering Manager at SchoolMint

Loading...

So, I decided that I wanted to create a video game from scratch — something that had been on my mind for a really long time. I particularly chose to start with a racing game.

Having previously worked in a video game company and taught video game creation at a local university, I believed I already possessed the development skills needed to bring the idea to life.

This entry serves to share some highlights of my journey, the ups and downs, and hopefully provide you with some insights if you’re interested in learning how ‘Wacky Drivers’, was created for both Android and iOS.

Simultaneously, I believe this entry will also be helpful for anyone involved in development projects in general, as I think most of the lessons I’ve learned apply to solo developers.

Idea, platforms and tools

I had the idea of creating an arcade top-down racing video game, even with the name ‘Wacky Drivers,’ since I was a teenager. It all began when I was a kid eager to learn programming and create video games. I started with Visual Basic 6.0 a long time ago, and that’s when I began crafting games.

In fact, I went on to create three versions of my game. I remember significantly enhancing it over time, incorporating new ideas, and upgrading the graphics. The first version was almost entirely crafted using Paint and lines :) Unfortunately, I lost all the code and two versions along the way, but I did manage to find the very first thing I ever developed.

So, the next step was to choose the tools. I was already familiar with Unity and felt comfortable using it (back when it wasn’t perceived as such an ‘evil’ company), so I thought it would help speed up the project. I had worked on several projects with Unity and was also using it in my teaching.

GDD

The GDD (Game Design Document) proved crucial for staying on track. However, despite having a solid plan, there were many times when I felt tempted to explore new routes and features. In fact, I not only felt tempted but ended up succumbing to scope creep, adding different elements that weren’t part of the original estimate, either to enhance the fun factor or to explore monetization strategies.

Creating a GDD doesn’t necessarily require fancy tools; I simply used Google Drive. I decided to design some of the tracks by hand, using them as inspiration for the stages I wanted to create for the game.

I’m a fan of to-do lists; they help you stay on target and offload your mind so you don’t need to remember every single thing. They also give you a sense of progress. I usually use a notebook where I jot down tasks and cross them off, but if you are more about digital tools, Todoist is another interesting option, or you can achieve a similar result with a simple Google Spreadsheet.

Another important decision I made early on was to include power-ups and power-downs in the game. This way, the player could have a turbo boost for a limited time and also gain or reduce speed throughout the entire stage they were playing.

Development

The development journey has been both enjoyable and filled with valuable lessons. As a full-stack developer/web developer, some individuals tend to overlook certain optimization aspects. While in web development, a slight delay in page rendering might be acceptable, the same cannot be said for a video game. Even a minor sluggishness or lack of responsiveness can significantly impact the player’s experience.

From the outset, the primary goal was to approach development as efficiently and modularly as possible. This meant prioritizing responsiveness and avoiding any potential performance issues. The aim was to ensure that the game felt smooth and responsive right from the beginning. To achieve this, I focused on implementing efficient and modular coding practices, embracing principles like DRY (Don’t Repeat Yourself) and KISS (Keep It Simple, Stupid).

Creating reusable components became a cornerstone of the development process. By designing components in a generic manner, I aimed to maximize code reuse across different parts of the game and potentially in other game projects as well.

Here I will elaborate on some examples:

Audio Manager

Created as a singleton and use the don’t destroy object property so I could reuse it across scenes in an easy and optimized way. The audio Manager has a list of audios and SFX, where you can select on game load. This list is transformed into Audio Sources that are ready to be used across the entire game at any moment.

Shop Manager & Ads Manager

These two are useful if you want to have your own currency or display ads into different scenes of your project. At the very beginning (first scene) I decided to get everything ready and again, everything gets initialized, is self contained and can be used on different scenes. For instance if you want to buy a car you can do it from the Garage, or if you want to buy a Stage, that can be done from the Stage selector or the Shop. I just reuse the same logic making it easy to get called and done.

The same can be said for the Ads Manager, where you initialize the SDK and get everything up and running and the functionality can be called potentially from any single scene in the game.

I didn’t have prior experience creating Ads or a Shop, and to be honest this consumed a lot of my time. I had to do a lot of tests, used many approaches that didn’t work, so I will create a tutorial in the future sharing my learnings and thoughts (and suffering) on how I made this thing to work and things that didn’t work, just to see if that helps anybody or if anyone has any feedback on what to improve for the next time.

Stage Builder

So, creating Stages was a blast, but It was taking me a lot of time to put every single track in place, and sometimes I was missing out by a pixel which ended up making me to redo a lot of the track parts. Imagine start adding a straight part, then turn left, then another one and repeat that 30 times just to check at some point that the 3rd one you added was not perfectly aligned :/

It was taking one day or more to create the track, then I had to create the terrain, props add everything, start balancing out, etc.

I decided to invest some time learning the Editor Tools, and created a small but neat tool that helped me to create new tracks, so I could start playing around with different track designs and make them in no time to check if they were fun to play. So I went from 1+ days of creation to 10 minutes, which was incredible (this not taking into account terrains and props, just the stage creation).

Refinement

Oh boy! and a lot of things needed refinement… So I’m going to highlight the ones that I feel are the most important:

Controllers: My first idea about controllers was to use the accelerometer and gyros, but it turned out that people were confused and was not a fun experience at all for many individuals. That’s where I decided to pivot to a virtual joystick and make it the only way to control your car. That’s it. No buttons, the acceleration of your car will be defined by how much you move the virtual joystick from the deadspot.

Game balancing: making sure that the game is fair, when you start playing your own game, you get better and better regardless of issues it may have. So you can potentially start making decisions based on how easy you see the game and meta information you already have, like how AI works. For instance, I got better and better so the AI was not such a big challenge for some stages. Then when I handed the game to other people I realised that even the easy mode was hard for them. So it is important to make sure you’re getting feedback and listening to what your gamers are saying.

Settings: speaking of feedback, something else that I added, was the ability to change the virtual controller position, which was greatly received by the gamers as part of the feedback received. Also, have an option to change the controller size which also proved to be helpful for many people.

Particles

Something important for me, was to try to make the game to look alive, more appealing. Have nice graphics and add effects to make it more enjoyable. This is were particles came to the rescue. I noticed at first that people didn’t know how to pick the power ups, I created some items to make them more eye-catching.

Then I continued with the fallen leaves on the trees, to make the stages look better and then some climate conditions like rain, snow and fireflies on other stages.

Those small things and adding post effects like blur, setting the lights properly, checking shadows, changing the coloring temperature, ended up making big changes on how the game looks.

Have a product out and iterate over it

Maybe this one is one of the most important advices, and should have started there, but without an MVP (Minimum Viable Product) there will be nothing and you will continue to have just a dream.

You don’t want to release something that is unplayable, but once you have the base game, all the core mechanics, AI elements, menus, etc. You can start thinking on have that product to be check by other people (beta testers).

If you have something that is solid, you can even think on releasing it and have plans to start adding content. In my case the content means to add more cars and stages.

Do not spend years making a game that you don’t even know if it is even entertaining, try to get feedback from the very beginning so you can decide if it makes sense to continue working on it, or if you have to pivot.

How to market it

This has been an interesting part. I’m not a designer or animator, so I had to start learning how to create graphics or videos to try to market it.

I ended up creating a trailer by capturing game footage and used a mix of programs. For the audio I used Audacity (an open source application) and for video editing I used a mix of OpenShot Video Editor (open source) and Pinnacle Studio.

The final result was not that bad, you can see the result here. https://www.youtube.com/watch?v=TkGAQTb6IfI&ab_channel=JoseCiccio

Next

As I was mentioning, the plan is to continue expanding the game by adding more content, such as additional tracks, to enhance the overall enjoyment. I also have plans to explore the feasibility of porting it to PC on Steam. Currently, I’m working on adapting the controls for keyboard and joystick.

Implementing controls for joysticks is relatively straightforward, utilizing triggers for acceleration and deceleration. However, keyboard controls pose a more challenging task. I’m experimenting to ensure if it provides a good user experience.

This transition will involve a substantial amount of work. The menus will need to be redesigned, and depending on the new control scheme, there may be a need for rebalancing. I’m exploring whether this is a viable and enjoyable experience to pursue.

For the PC version, I’ll be removing elements like ads and in-app purchases. Instead, I’m considering selling the game and incorporating unlockable items or a store using in-game earned coins. I’ll keep you updated on the progress of this endeavor.

Where to download it?

If you want to check the game and have an Android based phone or tablet or and iOS device, you can download the game here:

iOS Version: https://apps.apple.com/us/app/wacky-drivers/id1625610738

Android Version: https://play.google.com/store/apps/details?id=net.jciccio.wackyracers

Conclusions

Like any project, consistency is key. While motivation is crucial, it’s not the sole factor to rely on for a side project. Creating a solo video game and navigating through all stages, from the initial idea to releasing it on a chosen platform, is indeed a feasible endeavor.

I’m genuinely pleased with the results so far and anticipate continuing my work on this project, as well as exploring other ideas for video game development.

I’d love to hear about your experiences and thoughts. Have you delved into video game development? How was your journey, and was it similar?

If you have the time, I hope you’ll consider downloading the game, have some fun, and share any feedback you might have. I’m actively seeking ways to improve and add new features :)

I hope you find this blog useful or at least to be a small guide or at least give you some pointers in the right direction.


Be notified about next articles from Jose Ciccio

Jose Ciccio

ex-Senior Engineering Manager at SchoolMint


Leadership DevelopmentCommunicationTechnical SkillsProgrammingSoftware DevelopmentEmerging TechnologiesCareer GrowthCareer ProgressionSkill DevelopmentTraining & Mentorship

Connect and Learn with the Best Eng Leaders

We will send you a weekly newsletter with new mentors, circles, peer groups, content, webinars,bounties and free events.


Product

HomeCircles1-on-1 MentorshipBounties

© 2024 Plato. All rights reserved

LoginSign up