Gemetary

Project Tech/Algorithms

  • C#
  • Unity
  • Procedural Generation
  • Depth-First-Search
  • A-Star Pathfinding
  • Game Object Pooling and Re-use

Extended Details

Gemetary is an infinite 3D Maze game inspired by Pacman. I made this game using Unity, for a 10-week duration course at Neumont. All of the art and sound assets were obtained either: 1. For free on the Unity Asset Store, or 2. Randomly scattered about the internet, only from places where the assets were marked Public Domain (Creative Commons Zero). All of the C# scripts that make the game run were written solely by me.

Fun fact about the maze: it is a near-infinite 3D Maze. Yes, you heard that right, there is an end to the maze. Of course, the maze end is so far away that it would take the player over 60 minutes of running in a straight line with infinite invulnerability and wall destruction cheat codes enabled. Yes, I did the math. The maze is procedurally generated using the depth-first search algorithm. You will get a different maze every time you play!

My favorite thing to talk about regarding Gemetary is that all of the geometry, and all of the enemies, all of the powerups and every gem are pooled and reused. All of the objects are created when the game is played, as it loads, before the player even enters the world. These objects are actually, using an algorithm I specified, reused as the player moves away from them, teleported from 'offscreen behind the player' to 'offscreen in front of the player' so that they can keep going on and on. Of course, they are placed differently to avoid repeating maze patterns and add enemy and powerup variety.

Another fun fact is that each of the three enemies use a different AI, and can be out-thought with a bit of knowledge and careful watching, giving the game strategy. The brown spider goes back and forth along a set path between its 'home' and the spawn point of the lantern. It will never deviate from this path, so you are always safe from him off of his path. Of course, to make him still a threat, he has a higher movement speed than the other enemies.

The black spider goes to every 'node' in the maze once in random order, before returning home and repeating this action over and over, ensuring there are no safe spots to hide. He does not track the player, and if you remember where he has already gone, you can temporarily be safe from him, until he completes his return trip home. He will become aware of destroyed walls and use those to his advantage to achieve his goal.

The skeleton uses AStar pathfinding to follow the shortest path to the player. This means that when there are loops in the maze, the player can trick him by 'faking him out' and spontaneously going the other way, to get around him. He will also become aware of changes in the environment and use them to achieve his goals.

All of the enemies have the basic Pacman ghost mechanic where they will run away when the player has achieved powered-up status, and this takes precedence over their normal 'goals'. This can be taken advantage of to further manipulate the enemies. All enemies can be blown up with tombstones, and no enemy will ever leave it's 'home section.'

Try to clear a whole section, and enjoy that power-up - it is my most complimented feature from random play testers provided during the course. Players really liked being able to alter the environment, and having the game remember the changes they have made even after the section altered is un-loaded and re-loaded.

The game is intended for desktop play, and runs significantly better in .exe build than in a web browser. That being said, I did really want to have it playable on my site. Because of this, it is strongly recommended that you make use of the 'disable shadows' option provided when playing in the browser.

For fun, feel free to try the two 'cheat codes' I provide for players. If you enter 'IThinkICheated' as your name, you will have infinite powerup. Your high score will not be saved. If you enter '2Ez4Me' as your name, difficulty scaling will be doubled, and score bonuses will be given.

Project Credits

© Justin Furtado 2018 - LinkedIn - justin.l.furtado@gmail.com