Prompt
Design inspiration can come from anywhere. For Duality, it was when my foot bumped against the bed in a dark room, and a strange thought popped up:
“What if the bed isn’t there when I can’t see it?”
Concept
It began with a simple mechanic of obstacles hiding in the dark. However, a player could keep the lights turned off and sprint through the level. That’s no fun! Enter “reverse-obstacles” that hide in the light and show up in the dark. This formed the basis of a dual-colour mechanic that hides obstacles of that colour. I was excited; a simple yet engaging concept. Think of all the puzzles you could make!
I was in for a rude awakening.
Core Loop
To keep prototyping easy, each level was a grid-based platform, with obstacle “boxes” and collectible “stars” strewn along the path, with a goal tile at the end. The objective was to go from the start-tile to the goal-tile after collecting all the stars.
Design and Development
With the concept and loop ready, I dived into development. Since this was to be a light game, I picked Android as the platform. Another benefit of Android was being able to quickly pass on the prototype to my friends for playtesting.
I started with Unreal Engine’s top down template as it came with touch-based movement. The core mechanic came first: show and hide obstacles on pressing a button. I created a blueprint for the obstacles with a colour property and show/hide functionality (and also toggle collisions accordingly.)
Next up, I cooked up a tile-generator blueprint to create the levels. This is a designer-friendly tool (me-friendly in this case) to quickly test out level layouts. It takes the overall size of level, indices to place tiles on, indices to spawn obstacles and stars, and more. Each tile is given a random colour for decoration.
Last piece: Movement. Since it was a mobile game, I tied player movement to tapping on the corresponding tile. The game figures out a path from the current position to the tapped position by A* pathfinding, which I implemented in blueprints.
At this juncture, a game design wrinkle came up: There was a secondary goal of finishing a level in the fewest taps on the tiles and the fewest colour-switches. The idea was to have players really plan their movement and colour-switches to get a higher score. However, automatic pathfinding isn’t really a reliable partner for this. Yes, it always finds the shortest path, but if two paths exist of the same length, it may choose either one. If these paths consist of different number/type of obstacles, your plan is screwed.
There were a couple ways to tackle this problem:
A smarter pathfinding approach, one that accounted for obstacles as well.
Disregard the number of colour-switches.
In the interest of time (and due to lack of sleep by this point), I opted for option 2. After generating a bunch of levels and throwing in level transitions, the game was looking pretty good.
I was feeling really confident of having made something very special. This was during my early days of gamedev, so of course I was wrong.
Do Your Research (aka Special Takes Work)
Eager to start sharing the game and shout from the rooftops, I headed online to double-check if this product of pure awesomeness had any competition. As you probably guessed from the title, Hue had arrived on the scene two years back. It is a side-scrolling platformer and has the same mechanic of hiding obstacles, but with more colours.
I went numb; for a concept that I had spent the past month perfecting and polishing, another game had already done exactly that, and much better. It was a massively humbling moment; my idea was not as special as I thought. If this one is already taken, what about my other ninety-nine design ideas? Should I abandon my path and seek out somewhere I can truly stand out? Or should I continue wasting my time here?
The world is full of talented and creative individuals, most of them way above what I’m currently capable of. In such a place, carving out your own space, being special, takes a lot of time and work. It can be a daunting idea, yet there’s a way to see it as an opportunity. Competition is healthy when you learn from the competition. Standing on the shoulders of giants, learning what they have experienced, I can leap off of what they have built. After all, I made this game in Unreal Engine, a piece of software built and maintained by hundreds and thousands of extremely talented people!
I had just discovered a way to be smarter about my designs; a way to test their worth in the world before I get started. Patience was key, and only by churning out the naive and crude ideas could I eventually advance towards the truly original and fresh ones. I absorbed this lesson and adopted a mature approach in all my designs going forward.
Still, I bet there’s something to coming up with the mechanic of an already successful game on your own, isn’t it? 😉 Anyway, thank you for your time, and please, leave a comment!
If you’d like to play the super incomplete prototype I made 5 years ago, get it here:
If you’d like to dig more, grab the project on Github.