Polishing Hell
One of the most important things to attend to when developing a game is “polish”. This word describes all the efforts that are thrown towards making the game feel juicy and amazing. It’s what makes or breaks a game, and gives it a finished professional look that will place it over the vast amount of broken amateur games. It’s also one the biggest time sinks (if not THE biggest) in a game project. I’m mostly referring to visual and gameplay polish, but it can act at other levels (the code can be polished too! Fix the indentation, make clearer variable names, introduce some haiku poems as comments…).
I’m at a stage in Sky Diver where I’m starting to look at polishing some of the features I’ve had in the game for quite a long time, but never got around to properly doing them. One of them is the Ragdoll Deaths, and as it was expected, it was a long process to get them right. Welcome to the Polishing Hell.
In game terms, a ragdoll usually refers to a character that is moved by the physics engine instead of animations. It’s essentially a conjunction of colliders and joints left to be pushed by forces (mainly gravity), which is what gives them that characteristic ‘ragdoll’ feel. In many games it’s what happens to a ‘dead’ character, though these days in the big franchises they have much more advanced systems to try to overcome the goofiness of a realistic looking character being pushed around like a… well, a ragdoll.
I implemented the ragdolls quite at the early stages of the project. You can see them in action in the currently released mobile version when the character is bitten by the shark or killed by deadly discs. The main character is disabled to be replaced by a freshly-spawned split-in-half-ragdoll. But I never got around to polish them properly. Until now.
The thing that was bugging me (literally) is that they wouldn’t move along with the islands. I had tried to fix it in the past but I gave up, as it was a big sink of time and I had better things to attend to. So now that I got hands on, it took me a few google searches, and toying around with the game a lot to find the issues and fix them. Apart from some code improvements required, the structure and configuration of the islands’ physics, and the ragdolls themselves, were incorrect. Fixing the ragdoll was easy, as it’s only done once. But to fix the islands I had to tediously go one by one, and manually redo a bunch of things on each one of them (they are around 70).
Now, let me take a small detour to explain why some nasty bugs happen in AAA games and why they may be very difficult to detect. The level system I built (as explained here) is meant to reuse islands. These islands are referenced by a world structure that keeps an arbitrary list of them. Those two systems are separated on purpose to give me flexibility to change things as I see fit: If I don’t like a particular island in a world, I can just drag and drop another one, and all works fine! But that means I won’t know what islands are being used at a given time unless I inspect the game, as I will be changing them, adding new worlds and levels, and so on. So what happens now is that, when I have to go through all of them to fix the physics, doing a tedious repetitive task, I’ll make a mistake. It’s just going to happen. I won’t know which island is broken, and that island may not be used now, but it could be used in the future! In fact, at some point it may be a random algorithm that picks the island instead of me. To make things harder, a broken island in this case doesn’t necessarily mean the game stops and crashes, that would be easy to detect. It means the ragdoll doesn’t move with the island, and not all levels have deaths that spawn ragdolls. Imagine something like this but in a much bigger game, with much more people working on it and much bigger data structures, that iterate much faster. That’s why you need people constantly playing the game fishing for things like this. The fix may be easy, but detecting it won’t. And once they have logged ten thousand bugs like that, who has the time to fix them?
So I have managed to go through all the islands, fix the physics, playtest the game, find a couple islands that weren’t correctly fixed, and fixed them properly. Now I have ragdolls moving along with the islands. But it’s missing something: the character gets split in two, but (apologies to the queasy readers) there wasn’t enough blood. So I decide to add a particle system to both of the ragdoll halves that will spawn. This works great, now each side falls, throwing in a blood squirt as they fall.
What now? Oh yes! I do have a toggle option in the settings that it’s supposed to remove the blood and gore from the game, for those queasy readers. But, of course, my ragdolls don’t know anything about it. To fix it I need to alter the code to instead of the split ragdoll (that won’t look good without blood, and arguably is still gory) I’ll spawn a full ragdoll, without blood. Ok, that wasn’t too bad. Done. Right?
Nope, turns out that the blood squirt doesn’t look right when the split ragdoll falls into the water, because (as I previously decided in an older polish round), the blood in the water should have a different more washed out colour. And to top it off, the blood particles don’t know that they are in the water, so they keep falling with normal gravity. Weird. So how do I fix that? I can code in that when the ragdoll detects the water, it will stop the squirt, and instead spawn another particle system with water blood color. And voila! The ragdoll falls, spitting blood, and when it gets to the water it shows a nice watered down blood effect and the squirt is stopped. Much better.
Except, I’m using the same system when the character is cut by a laser, and if we are going to be picky (and we are), the ultra high temperature of the laser should cauterize the wound as it’s happening, so no blood should be spilled in that case. So… Easy, let’s create another ragdoll without the blood squirt… But without the blood it doesn’t look that great, as it was at the beginning (now I’m full circle in). So it’s missing something, but it can’t be blood… How about if I spawn a puff of smoke instead of the blood when the character is cut by the laser? Alright. Let ‘s do that. A bit of code here and there, create and iterate over yet another new particle system and now is finally, completely, absolutely done. Is it?
Yes. All good now. I mean, there is that new nasty bug that appeared after I changed the physics where the non-ragdoll character is pushed by the island instead of grabbing onto it… But I haven’t fixed that yet. That’s for Future me.
Conclusion
When you are developing your game solo it is crucial to be able to balance the time you’ll spend polishing your game. I always tried to use the rule of thumb that if you can do something in one day, it will take you one week to polish it right. This makes it an important consideration when you start your project. How long did it take you to prototype the main core feature? A week? It may take you 2 months to properly finish it. If you add more features to the game, consider the time it will take you to polish them.
But one of the main issues to estimate the polishing step is that, as you can see, you don’t know where it is going to take you. That’s part of the fun! But it can feel like a never ending task. And sometimes it is. There is this common phrase in the games industry that says “games are never finished, they are released” which illustrates this problem well.
Want to know more about any other game development topics or issues? Leave me a comment or contact me in social media and I’ll be happy to write about it!
Want to try Sky Diver Classic? Here is the link: https://play.google.com/store/apps/details?id=com.StrawberryTreeGames.SkyDiverClassic
Leave a Reply