Riot of rainbow colour
Kitty Rainbow is a bonkers platform game that was a welcome "Welcome to the land of Oz" intense colour experience after the monotone Kitty Maestro. I grinned during the production despite lockdown due to COVID-19.
Kitty Rainbow is my fourth game dual developed for PC/Mac and Nintendo Switch (kind of, see later). My inspiration was Rainbow Islands with its strong colours and seven theming and shooting rainbows to walk on and break.
Development started in February 2020 and took a mild randomised layout approach to levels along with very distinct enemies that behave and look differently.
I had four aims for Kitty Rainbow:
- use cats/cat theme/rainbow theme, dialled up to 11.
- you got a big permanent reward at the end of every level (in contrast to Rainbow Islands - at the end of boss fights).
- moment to moment gameplay was to be intense, fast and spam rainbows.
- raise the quality of my games (with plugins, no it's not cheating - shut up!).
Timeline milestones (simplified)
- February 2020 - core code, level generation, initial art concepts
- March - AI code, UI, final art
- April/May - playtesting (with controller), adjustments to everything
- June - final tweaks and submission to LotCheck
- July - rejection from LotCheck for the last time
- August (Early) - released on PC/Mac
- August (Late) - released on Steam
- Unity (C#)
What went well
- Cats - tick.
- End of level perma-reward (a choice for the rest of the game) - tick.
- Fluid and fast gameplay with rainbows spamming at player will - tick. I'm very pleased with how Kitty Rainbow feels with a controller and the pseudo-Zen vibe that kicks in after a few levels.
On the plug-in side Cinemachine kept everything within proportion and not flying around all over the place, with a good camera shake called when required. It should be part of base-Unity. TextMeshPro should also be part of base-Unity by now, although it did have a bug if you attempted to re-import a font (solution: import ONCE). A* Pathfinding Project literally took me less than an hour to figure out how to get it to work in code. I cheated a little with some web code that gave me the basic structure of an enemy follow-code that I adapted to be super-efficient and easily turn on/offable.
I limited the number of enemies deliberately to focus on how they behave and how much of a threat they are. This was sensible as it meant I could (and did) plan something akin to a tutorial mode with a suitable difficulty curve without frustrating spikes or tedious plateaus. I then upset that order with true random modes and harder modes for sadists. There is also an easy mode too if you just want to kill bumble bees.
I also worked hard on making sure enemies' behaviour was unique so you knew what to expect after encountering them and could easily determine their intentions (following feedback from Kitty Maestro). Part of this was a clear feedback given when an enemy got trapped when they touched a rainbow or took a hit from a fired/broken rainbow. I stole shamelessly from many other platform games the juddering up/down when trapped feedback and flashing red when hit (the only bit of shader code I went near). Also all enemies drop some reward because I didn't want to make a stingy platformer.
My favourite enemy was the camp - a large green tent that spits sausages in upwards directions! It is tougher than regular enemies and I had to move its appearance away from the earlier levels.
49 levels, sectioned into groups of 7, rainbow colours all over the screen, rainbow screen wipe, rainbow bombs, rainbow stars, gems of rainbow colour that grant extra life when you collect 7 of each… nothing was left un-rainbowed! It took some work to get the visuals clean enough and I think the combination of the crisp vector base with some photoshop "glitter" on top worked.
I kept the platforms to a minimum, especially as the levels progress because I wanted the player to enjoy using rainbows as platforms. Overall I'm happy with the patterned tile approach (in contrast to on obvious platformer theme, such as castles or sweets etc).
Every 7 levels there is a strange level (in game they are called ??? levels). These exist in order to break up the pacing of the game and to allow me to explore some truly bonkers platforming ideas. These included bouncing on top hats, an art gallery… the absolute most fun I've ever had designing, testing and playing levels in my life. During the development of these levels I felt freer than I ever had and I wish to experience that again in level design.
What went ok
Continuing the plan to make a demo version of Kitty Rainbow was followed through (from the decision on Kitty Maestro to always make a demo version available). Not only is a demo pro-consumer but I found it to be pro-developer as it helped to restrict scope in the early stages to focus on the moment-to-moment gameplay and push back fiddling with the tinsel until the end of the process.
Although with Kitty Rainbow there were the issues with Unity's new input system but mostly a lot uncertainty what to include in the demo, i.e. how many levels? what's the cut off point? what game modes? I think the demo is just right, but I'm not sure and I wasted time changing the parameters and stupidly trying to playtest from a fresh perspective.
In order to get the gameplay crisp I locked the Update and FixedUpdate in Unity to 60fps. This produced a great experience on desktop (and prevented one or two Cinemachine bugs that occur if you don't throttle Update). This experience even held in 2550 x 1440 when action got mental mid-game with the largest levels that have a lot of enemies on screen and the player spams rainbows EVERYWHERE. (FYI I playtested Kitty Rainbow in 1920 x 1080 for most of the time).
I optimised Kitty Rainbow very well I thought:
- object pools for everything;
- keeping colliders off until I really needed them;
- sorting and spacing objects off-screen to prevent stacking and that dreadful Unity fuck-over of deactivated colliders interacting with each other;
- enemy AI throttle/deactivated until absolutely needed (as well as using the A* Pathfinding Project super-efficiently);
- enemy idle paths kept simple and throttled;
- limiting AudioSources;
- reducing background effects to be bare minimum but not jarring;
- keeping particle effects to minimum;
- plus a few more I've forgotten including caching, pre-computing values where possible.
And still the Switch version said no, on the first level with just one screen and three enemies. It said no. I turned down the fps in Update and FixedUpdate and it still said no. Flat, blunt, no.
Sometime after I saw a YouTube video where one of the speakers described the Switch as "an old smartphone with a controller glued onto the sides". The penny dropped. The core gameplay of rapidly shooting rainbows, without limit, was the issue. Fewer rainbows, or a limited number of rainbows, or slower rainbows, or rainbows that have reduced functionality would have meant a different experience, one that I was not happy with on desktop early on. The long-term consequence of this meant no Switch release, ever.
As of writing I'm looking into getting the game onto XBox and PlayStation as I think they have the processing chops to handle a 2D platformer locked at 60fps spamming rainbows. At least I hope so.
Unity New Input System
If you want a great example of why technical persons should not be in charge of anything I suggest you use Unity's old input system and then transition to the new one. Here's an accurately simplified comparison of the two input systems:
Old System: check for button down; do function; check for button up; stop function.
New System: define Controls; enable Controls; map Controls to methods; check using started, performed or cancelled; poll for Vector2 in Update if needed; change Button style to Pass Through to prevent double input error (yes, that really happens); stroke cat to calm down; re-read dumb-ass cock-eyed cum-fest technical notes yet again; question self-sanity; deactivate Auto-Save (unless you want your computer to literally freeze for three seconds EVERY time you change something); deactivate Controls properly unless you love memory issues; wipe tears from eyes; stroke cat again; curse until words lose meaning; cry so hard that you start to imagine that inputting hexadecimal values directly into a text editor is easier…
However, the new input system does have two benefits over the (simpler) old input system: first, once input actions are setup (say keyboard direction controls) it is unbelievably easy to add, say, controller direction controls for the same input actions; second, input actions are independent of what you do with data they provide, so the same input actions can be mapped to different parts of the game (UI, Player, Map, etc). But it's still a pain to get it going.
FYI: Unity's own input code has the comment:
"////REVIEW: really wish we had a single callback".
Dear Unity: fix your code and fire your technical writers (not necessarily in that order).
What went badly
The key challenge when making something creative isn't the technical aspects, nor finding inspiration, but getting "clear-time" to work on the project: being interrupted by life is on the irritation/distraction spectrum, amplified when development is going well. Lockdown was advantageous for me because I managed to achieve a lot in terms of game development and pretty much everything else I set my mind too.
The trade off from the sudden gluttonous amount of "clear-time" was that all the major events where I was desperate to show Kitty Rainbow got cancelled. I was looking forward to EGX Rezzed, in particular, after missing it the previous year. I was eager to show Kitty Rainbow, but it was not to be.
So I was faced with the prospect of waiting, never endingly, for the day when COVID-19 had passed and real-world video game events returned, and I could show and then release Kitty Rainbow. Instead, following the Switch problems, I decided to release it on desktop and move on. Business-wise that was an apparently short-sighted and rash decision. I could have sat on it for a year, or longer. But that's not me. Creative-wise it was the correct choice and as I approach the end of the next game (as I write) with the next-after-that game already underway, I feel happy with my choices.
I could still attend EGX another year and show Kitty Rainbow then, nothing wrong with that. 2020 is in many ways the year where everything paused until the following year…(optimism!). I hate virtual events as their shortcomings just feel like they make 2020 seem worse, from a developer and customer perspective.
My curiosity got the better of me and I decided to release Kitty Rainbow on Steam to see what would happen (despite vowing never to release anything on Steam and roughly 4 years after not buying any more games from Steam). How bad could it be?
Pandora's septic tank was blown asunder and I needed several baths in holy water to even begin not to feel defiled. I literally got spammed for keys, not all were from Russians, though most wanted multiple keys too. Now! And I got some spam from key-resellers cum game listings sites that wanted to list my game, provided I supplied several keys. I also received several emails from key giveaway sites that put me off food for a bit.
I also got "invited" to join several social media cum public relations sites to "help" me find the right influencer for Kitty Rainbow because "streamers are potentially waiting" to "evangelise" my game. To that end I was asked for some personal information that even dating sites would be embarrased to ask for. And of course I had to provide several Steam keys immediately, whole spreadsheets of them in fact. *shudder*
The grey key market… I sensed exploitation and I hated feeling like I was about to be a victim. I ignored most offers and bluntly rejected the few that got strangely upset that I didn't respond immediately. I'll keep Kitty Rainbow on Steam, for the moment, but I am seriously thinking of removing it as it felt like a mistake. For future games I will never do it again and feel entirely justified for not releasing on Steam for all those years. The most chilling aspect is that my experience was on the gentler end of being cast into the dark pit of fetid shit that is Steam and that I was spared the worst horrors.
Currently Steam is all about the wishlisting and listing early so you can wishlist early because it's all about the wishlisting while you're in early access to gain wishlists for chart listings that (social) media latch onto because the lists for the recently released are old while algorithm generated chart lists are shit and the wishlists are where to start and list early for early wishlists because you need those wishlists early on to build your wishlist for the wishlist listings that lead to a solid base of listings of wishlistings onto which an algorithm applied…
And yet it brings a sense of order to my universe to know that Steam remains an algorithm-choked first-order cluster-fuck. Steam is to video games what Hitler was to humanity (yes, I've invoked HIM so you can dismiss my thoughts now, guilt-free). The 30% developer cut feels like I'm having slices of my kidneys taken every time someone buys my game on Steam… what exactly is Valve doing to earn 30%? At least Nintendo, Microsoft and Sony have briliant support, decent curation, good to great tools and many human beings ready and waiting to help. Valve has algorithms and a lot of fucking nerve.
For desktop games there's got to be a better way than Valve's open sewer policy, Epic's bullying come hoarding policy and G.O.G.'s not-telling policy. It is a truly warped situation when developing for consoles fits better than desktop when, many years ago and as a solo developer, desktop would have been the more natural fit for me. WTF? Make a game, sell a game… if only the latter was easier than the former, or at least as easy to figure out as the former.
Onwards to the next game (it's got a cat but no rainbows this time).
And the next game: I'm getting off this ball of dirt and going back into the depths of space.
Get Kitty Rainbow
Leave a comment
Log in with itch.io to leave a comment.