Hugo Bonacci is the indie developer and designer of App of the Week winner, Kung-Fu Clash. His passion for gaming began at a young each and Hugo is still a big fan of NES and SNES games (he even plays them with his kids!) and is inspired by games such as Final Fantasy, Zelda, Secret of Mana, and Chrono Trigger.
During the day, Hugo works as a UX Consultant for a company in Dallas, Texas, but his real passion lies in game development. Check out Hugo’s software development blog and design portfolio at hugoware.net.
Making games can be a lot fun, but it can also be a tremendous amount of work. Many people try to create games on their own but far fewer actually succeed — myself included.
With Kung-Fu Clash I decided to try things differently than on previous projects. This post discusses some of the approaches that helped me to successfully publish my first game.
Don’t be in a hurry to start writing code for your game. Take your time and plan what your game is about, how it works, and get a general idea of what needs to be done. It’s much quicker to find flaws on paper than to spend hours writing code only to discover an idea won’t work.
Try to come up with an idea that makes your game distinct from others. Sometimes it’s as simple as taking a common gaming category (for example, a first person shooter) and giving it a unique twist (e.g. adding orange and blue portals!).
You don’t need to have a detailed outline of every single screen and behavior in your game. I’ve found that simple sketches and notes are more than enough to get ideas out of your head.
Planning shouldn’t be limited to only the start of a project. Any time you want to add a feature or modify the way something works, take some time to jot your ideas down before you begin.
Keep Things Simple
As with any project, the number of tasks required for completion can quickly spiral out of control. Each time you think you’ve identified everything that needs to be done you end up noticing an entirely new set of tasks you’ve missed.
Start by creating a list of the core requirements for your game, this means removing non-essential game elements like power-ups, high-scores, etc. Next, include each of the sprites, animations, backgrounds, music and other creative assets you’ll need to create. Lastly, don’t forget to include tasks that are generally overlooked until they’re needed, such as managing user settings, handling transitions between scenes, game menus, resource management, etc.
It doesn’t take long before your “simple” game becomes a daunting list work that will take several weeks to finish. Don’t let this intimidate you. Having an overview of tasks to complete will help you set goals and track progress along the way.
Lastly, if you want to add something to your game then go through this process again. Ask yourself what you will need to code and design to make it happen. Once you’ve figured out what needs to be done, decide if you really need the feature or if it can wait.
Keeping things simple sometimes means telling yourself “no” about adding features to your game.
It’s easy to get discouraged when you’re the only person working on a project, especially when progress is slow or you’ve been working for several months, but fortunately there are a couple ways to stay motivated.
First, start by sharing your progress with friends, family, and social networks. Let people see what you’re working on and share in your excitement. Put your game on a device and let people to try it. It’s exciting, and highly motivating, to see your game in action.
Don’t be discouraged if it doesn’t work correctly — it’s just a demo. Additionally, don’t act on user feedback immediately. Unless it’s a critical flaw, simply take note of their suggestions and then review it later. Trying to implement new ideas, even good ones, will slow down progress.
Second, If you find yourself feeling unmotivated, overwhelmed, or simply confused on what you should be doing, then it’s probably a sign you need to get organized. Take some time to examine your project and write a list of remaining tasks. Simply knowing what needs to be done can go a long way in keeping a project on track.
When you sit down to work, review your list and set yourself a goal of at least one task (or more) to finish and then mark them off as you go.
Use Time Wisely
Try and find ways to preview your ideas before you attempt to write code. For example, I use Flash for character design and animation, but it also works well for visualizing how a character looks moving across a background or to quickly experiment with different kinds of special effects.
Creating art for a game is a very time consuming process so be sure to plan for high resolution displays early by using vector art, 3D, or very large PSDs. Don’t try and create your own sprite sheets by hand, but instead use applications like TexturePacker or Zwoptex to streamline the process.
Consider using stock resources for assets you’re not able to create for yourself. For example, I’m not a musician and I’ve wasted weeks of development time in the past trying to create music only to end up with sub-par results. For this project I decided to purchase royalty-free music instead. Not only did the music sound far superior to anything I would have created on my own, it saved a lot of time as a result.
Avoid writing code if an open-source library is available that does the same thing. Even if it’s not an exact match, it’s much quicker to modify an existing library than write one from scratch. As interesting as writing “framework code” can be, your time is better spent focused on code specific to your game.
Don’t be afraid to spend time on writing scripts that automate repetitive tasks. If you find yourself doing the same process a couple times then it’s a perfect candidate for automation. When you’re the only person working on a project, the time spent on tedious activities is time taken away from meaningful accomplishments.
Lastly, avoid over-engineering your code. This isn’t a call for haphazard programming, but instead a reminder that the most perfectly abstracted code base that never ships is still a failure. Try to reuse code whenever possible (DRY), write helpful comments, and use meaningful function and variable names, but your primary focus should be on creating a flawless user experience.
Look carefully at every detail in your game and never accept “good enough.” If you aren’t happy with something, or it doesn’t ‘feel’ right, then there’s a good chance that your audience won’t like it either. Polish every detail until you feel it’s perfect. Treat your game as if it were a masterpiece — it deserves no less!
It’s difficult being the only person working on a project, but it also means you’re the only one who decides what goes into the final product. Take advantage of having complete control and only accept your best work!
Hugo Bonacci, Creator of King-Fu Clash