I began prototyping Observatorium in May of 2014. Previously I’d been learning to code in C# using the Unity 3D toolset whilst building various prototypes - ranging from first person puzzle to third person action - so I already knew the basics. For Observatorium, I was keen to dive into the 2D workflow as I’d never tried it before and an orthographic camera was perfect for the type of gameplay I wanted to push.
After watching the tutorial videos on the official Unity site here - Goo.gl - and reading up on the basic Unity 2D workflow I dived into the first demo:
So this is Observatorium 0.0 with my [awesome] coder/designer art. The goal of the demo was to move the boat around and collect all of the little pickups scattered throughout the level. Seems pretty basic but I learned some important Unity 2D concepts including importing 2D images and turning them into game objects with associated sprite renderer components, managing overlapping sprites via sorting layers, triggering 2D events and managing 2D physics. The core movement controls (initially assigned to WASD keys) were very simple to implement: just a positive/negative force applied to the boat to make it move forwards/backwards and a torque for the rotation. I attached the camera to the boat so it would pan with the player and locked rotation via script to avoid sea-sickness. The next step was to work on the constellation gameplay or ‘star sketching’ as I call it:
As I mentioned in my last post - #mce_temp_url# - the Observatorium idea stemmed from an earlier first person, free-floating puzzle game I was making called 'Astronaut':
The astronaut demo - although functionally similar - was set in 3D space and depth of the placeable mirrors played a large role so I decided not to use that code here. Instead, I used 2D raycasting to detect which objects were beneath the cursor (whenever a mouse button was being held) and used tags to signify which objects should be interactive.
I drew lines in 3D space in front of the 2D assets and based their start/end points on the positions of the star objects. I added code to check when a loop was detected and, to enhance playability, I froze the game when mouse was held to make sketching much easier. I tried to make the system as dynamic as possible so crazier shapes could be attained simply by adding new star objects:
And that’s pretty much it for Observatorium 0.0: constructed to test the basic movement and sketching gameplay. The next step was to take this idea and move it into a proper puzzle progression. I pushed on by making a series of levels containing numerous constellations the player had to sketch in order to proceed. Completing one constellation would spawn new stars or constellations and so on:
At this very early stage I was still using pickups – such as stardust and starfish - as a large part of the gameplay to lead the player through the game world and to enable certain puzzle behaviour. Some problems with this approach: (1) puzzles were too arbitrary – not enough feedback on why you would draw a line or shape in certain cases (2) puzzles were too repetitive – just lines and shapes with no real method - not very engaging (3) using tiny pickups to lead players through the world meant my playtesters were spending too long focusing on getting their boat on a perfect path and paying less attention to the puzzles.
The solution: (1) make the star sketching interface more dynamic so the player can experiment more (2) remove pickups (for now) to make players focus more on the puzzles and (3) use fish to give the puzzles more meaning and give the player a clue about what constellations to draw.
In summary: give the player more freedom and make them think before they draw.
Adding Depth to the Core Mechanics
The next step was to rework the star sketch code to be more dynamic. Rather than treating each individual puzzle as a series of moves that you had to complete in a specific order, I loosened up the interface so the game world itself became this huge open world puzzle. The player could interact with any stars they wanted and create and destroy individual stars as desired. This meant the basic sketching became much deeper. Additionally, I added special regions where the player could create their own stars and added the possibility to mix and match them with the pre-placed ones to create as many lines/shapes as they desired. Now, the player was way more empowered which helped to open up a larger number of gameplay opportunities:
After that, I added more variety to the game world in the form of fish. Fish gave the player a reason to draw certain lines and shapes and this tied in nicely with my overall theme of space-meets-nature. Now the player was essentially trying to 'catch' fish using their telescope. To implement this gameplay was a little trickier: I used the stars and lines to create special objects to which I assigned specific properties:
The above example shows a simple puzzle where you have to activate all of the starfish. The bright starfish are in an 'active' state and the darker starfish are 'inactive'. Notice how the starfish have moved from being collectable objects to being part of the overall tapestry of the puzzle mechanics. The final step was to add some sort of start and finish state so I could prototype puzzles much quicker. I added a spawn point/circle and a whirlpool that would transport you to the next level when the desired puzzle state had been attained:
Some of the puzzles in this post – although not very taxing just yet – ended up in my final prototype as part of the tutorial flow:
So that’s really it for the basic interface for Observatorium: rowing and sketching. One of my high level goals for the game was to keep the core mechanics simple and easy-to-learn so that I could add all depth and difficulty via the game world. Another goal was to make the game more than just a simple puzzle experience - hence why the player has full control over their avatar: to give them a sense that they're on an epic journey (more on that later). There are additional mechanics in the game beyond rowing and sketching but they are closely tied to the story which I'll be revealing sometime in the future.
In the next post, I will discuss how I extended the puzzle gameplay even further.
If you have any comments/suggestions please post below and I will try and respond.
Thanks for reading!
The Man Who Flew Away