Hive Mind
DESCRIPTION
A 2D puzzle game where you must group every colour together on the board to clear each level.
Features 240 levels across 4 different packs, with each level awarding you a bonus star for completing it in a given number of moves.
MY ROLES
Game Design
Programming
WORK TYPE
Personal/Hobbyist
ENGINE
Unity
GENRE
Puzzle

Core Concept
For this project, I had two major sources of inspiration. The first of these is the Rubik's cube. The second source is the classic puzzle game Lights Out.
I had envisioned the idea of a 2D puzzle game where the player must arrange a board in such a way that for every colour, all tiles of that colour are grouped together. The win condition is similar to the Rubik's cube, however it would be more complex in a way due to the 2D layout, meaning there may be multiple ways to solve the puzzle.
Around this time, I had also taken an interest in hexagon patterns. Eventually, I decided to integrate the hexagon idea into the project's core concept.
Mechanics
Unable to decide on a single core mechanic for manipulating tiles, I chose to split the gameplay into multiple different packs which each follow a different ruleset in terms of what kinds of move the player can make:
-
Shift pack - the player selects a line of tiles spanning the whole board, shifting each of them along the line. Any tiles sent off one end of the line are shifted to the other end.
-
Flip pack - the player selects a line of tiles, flipping all tiles to their 'opposite' position in the line.
-
Spin pack - the player selects a 'triangle' of tiles which are all 'spun' around the triangle in the direction specified by the player.
-
Blink pack - the player selects a 'triangle' of tiles which are all flipped to the next colour in the cycle.
The Blink pack is easily the most unique of the packs, due to the fundamental way that making moves in this pack works. Unlike other packs, where the tiles on each board can only be rearranged, in the Blink pack the player changes the colours present on the board. The colours follow a cycle in terms of which colour each will change to when flipped. The win objective also differs in this pack, requiring the player to turn all tiles on the board into the same colour, making it work very similarly to Lights Out, though more complex due to the colour cycle system.
Tiling System
For this project, I programmed my own hexagonal tiling system. Each tile is assigned 3 coordinates, with each coordinate representing a 'dimension' along which all aligned tiles share the same value for that coordinate. This means no two tiles have more than one coordinate in common. Using this system helped me to write code for detecting when certain tiles are 'aligned', as they will have one coordinate in common. A chart which visualises this tiling system is shown directly below.
.png)
Post-Mortem
I believe I did well with the presentation of this game, and it resembles a mobile game in some ways. Having to group every colour together is also an original concept, and I was able to experiment heavily with the player mechanics across the 4 packs. Moreover, I consider the filing system to be well designed and can easily be reused for other projects.
However, despite having these strengths, I found the outcome of this project to be fundamentally flawed in a way that affects the whole player experience. The actual puzzle solving of this game is quite obtuse compared to its sources of inspiration, as it is often difficult to properly visualise a path to the solution. The flip pack is by far the easiest to complete, with the rest becoming extremely difficult after the first few levels. In hindsight, I believe I would have been better off testing this game concept with a more standard square tile-based system which would have required much less effort to program. That way, I would have been able to put more focus on the puzzle design.
Moreover, my programming experience was evidently very limited at the time. While I would have strongly benefitted from using coroutines for multiple mechanics such as tile movement and the scene transitions, I was unfamiliar with this technique and chose a clever but convoluted alternative which involved using dynamic countdown variables and handling these in the Update() method. I also used PlayerPrefs to store player settings and even the player's progress in each pack, which means the WebGL build only stores this data for as long as the game is running. It is clear that I have come a long way since developing this game.
Overall, I was able to take the result of this project as a learning experience to help me in future gaming projects.