Game Programmer

Sacred Cellar

Genre Action
Year 2017
Platform Android
Tools used Unity, Tiled
Development time 3 months
Team size 2 people
Role Creator

Sacred cellar is an isometric action game with strong emphasis on movement for mobile platforms. Using three different kind of movement actions and an attack set for each of it, players must defeat waves of enemies to proceed further into the depths of the sacred cellar.



Open-Source code

The Sacred Cellar's code is open-source under MIT license. Check the Github repository for more.

Level creation

Levels are created using the map creation tool Tiled.

A custom parser is run during Unity edit-mode to generate levels from tile files, generating the environment, enemies, player and initial potential fields.

Mechanism system

A mechanism system was implemented with integration with Tiled, used for different logic purposes, like opening a gate once a key was picked up or once all enemies in a room were eliminated.

Dungeon-like levels, and so the mechanism system, were dropped out of the project once it was seen they were out of the projects scope.

Player control

Player moves in a square grid through three different type of movements: walking, dodging and sliding.

  • Walking is a standard, slow but responsive movement.
  • Dodging is fast, short rage but with recovery time movement.
  • Sliding is somewhat fast, long range movement.

Different movement types are achieved making gestures on the movement control panel in-game.

Movement and attack UI are customizable in the options menu for different user preferences.

Combat

Each move type has a different attack set, and each attack set has a different attack depending on the attack and movement directions.

Enemy AI

A state-machine was implemented for enemy AI using the Unity animation system.

Enemy pathfinding

By design enemies needed to move only through adjacent grid squares, so a potential field solution was implemented, using three different potential fields for optimization:

  • Static field, for unmovable objects, initialized during level creation.
  • Semi-static field, for occasionally updated objects, such as destructible environment and gates.
  • Dynamic field, for constantly updated objects, such as player and enemies.

Object pooling

Damage numbers, enemies and other objects are created through object pools for less memory waste.

Sound management

As with object pooling, sound and music is management centralized for easier usage, limiting the number of sound effects playing and possible global volume control.

Code available on GitHub: Unity-AudioManager