In my previous article, I touched on the philosophical concept of game development being different than other kinds of software development. Today, I’m going to go into a bit more detail on how to take advantage of the uniqueness of games and player interaction, and how the things that really matter are the things most hobbyists overlook.
From a software standpoint, I find games incredibly interesting to code. The interactions between game logic, visuals, and user input are really unique – but effectively tying these things together in a way that “feels” good can be a challenge. Having never made a game before, I went right to online tutorials and sample code rather than starting from an empty project. Ray Wenderlich offers an abundant amount of free guides and source code for just about any introductory iOS topic you’re looking for. Following a tutorial, maybe even adding your own personal touches to the code, will quickly get you to your first prototype. And eventually, you will make something that could technically be considered a game, but does not feel like one.
A game’s “feel” is something I really struggle with and I think it’s something difficult to grasp for many non-game developers. Code in and of itself is quite utilitarian – everything revolves around infallible logic and calculations. However games, like people, need to be more forgiving. They need to allow for tolerances and imperfections. And I think most importantly, they need to make you feel like you’re doing more than just toggling some mechanical bits.
Unfortunately, this concept of a game’s “feel” is pretty abstract and because of that, it is difficult to find advice specific to your particular game. You’ll find countless articles from seasoned developers saying things like, “We made a prototype in 2 days and then spent half a year polishing it”. But rarely do you see specifics as to what this mysterious polish entails, or why they did them, or at what point did they know when to stop. The funny thing is that’s the stuff that really matters to an indie developer.
I’m not going to claim that I’ve figured it all out, or give you a checklist of things you should be adding to your game to make it perfectly “polished” or “feel” incredible. But I can give you a little insight into some tips/tricks I’ve discovered that certainly don’t hurt.
- Treat UI with respect.
Menus, buttons, pop-ups, etc should all be given the same treatment as the rest of your game. The majority of the time, the main menu is the very first interaction players have with your game, so it needs to be welcoming and intuitive.
How? Give it character. When presenting a pop-up, for example, don’t just show a stylized box with text and buttons. Maybe make it appear in interesting ways – fade it in, bounce it in, slide it in from the top of the screen. Mess with the menu’s opacity levels or add a black layer behind the menu with half its alpha value to gray out the rest of the game.
Buttons can also animate – both on touch or even when idle. A really easy button animation is to increase its scale 20% when touched (and return back to normal scale when released). If you want to encourage a player to tap a button without explicitly telling them in text to do so, animating it has a huge effect. Have it glow in and out, or make it slightly rotate left and right.
- Explosions. Use them.
I would argue that it doesn’t matter what kind of game you’re making, explosions will make it better. Explosions don’t need to be from weapons or guns – they just need to show the player they did something you want to encourage. Use explosions as a celebration – like fireworks for games. Just made a move in your match-3 game with a high-score? Explosion. Finished a level in your puzzle platformer? Explosion. Expanded your farm in your simulation game? You get the picture.
However, some explosions are better than others. First and foremost, particle effects are your friend. It will require a bit of testing finding the sweet spot between visuals and performance, but having a burst of particles come from your explosion really improves the player’s experience.
Second, screenshake. There’s a fantastic presentation on Youtube from Jan Willem Nijman of Vlambeer explaining the “art of the screenshake”. To summarize, more is better. If you aren’t familiar with the concept, it’s incredibly simple to implement – just animate the layer/sprite/whatever by moving it in small bursts in random directions, typically only by a few pixels. The result is the sensation of grandeur. It gives the illusion that the explosion was so incredible, it literally shook the device.
Third – screen flash. This is another trick that is really easy to implement. At the start of the explosion, quickly fade in and then out a full-screen white layer. A modification of this is to also scale the layer, starting it small, and then scale to full-screen at the same rate of the fading.
- Cartoon “squishiness”.
There is probably a better name for this, but I just call it squishiness. And unless your game is super-realistic, it won’t hurt to add it. What I mean by squishiness is – bring your game objects to life by animating them in a more lifelike, though overly exaggerated manner.
Using a platformer as an example, the basics of your player movement could be to run and jump – falling down, hitting walls, etc. Maybe you just create a run and jump animation and be done with it, but it still wouldn’t “feel” as good as it could. This is where the squishiness comes in.
To add the feeling of squishiness, have the player scale a little bit when hitting the ground after a big fall. Start by increasing scaling on the x-axis, and decrease scaling on the y, which will make the player short and fat. Then quickly flip the scale to tall and skinny. Repeat the actions a few times to make it squishier, and then finish with resetting the player x/y scales to normal. This should all happen in under a second, but again, tweak as you see fit.
The same could go for things like firing a weapon or moving a tile. Have the player recoil back a little bit when firing to give the action some weight. Have a tile bounce back when moving it from one place to another, rather than just stopping when reaching the destination. What you should be trying to do is give the world life by making things like gravity have a real, visual impact.
- Animate the details.
When making my own platformer, there was a single thing I added that made me happy every time I saw it. It only took a few lines of code and about 10 minutes to tweak to my liking. What was it? I call it the “ground poof”.
Simply put, every time my player hit the ground after previously not being on the ground, (either from a jump or a ladder, whatever) I added a little burst of opaque particles below his feet that faded away after a second. This gave the environment life – someone should sweep these dusty floors! Tweak it as necessary – change the particle color/texture when on different types of tiles, change the speed of the particles based on the player speed/height.
Maybe give your hero an idle animation when the player hasn’t interacted with the game in a while. Add bullet casings to the ground when the player fires a weapon. Animate background objects instead of just using static images. The animations don’t need to be elaborate or detailed – they just need to give your game world life.
That’s it for now, I’ve already written far more than I set out to. I guess to summarize: little details in your game give it character. The player might not point them out or even openly appreciate them, but they create an overall better experience and improve a game’s “feel”. As a game developer, I really think these are the things you should be obsessing over, and this is where the majority of your time should be spent.