Die Castle
Overview
Die Castle is a small Pico-8 title programmed in lua that I created in a single week.
For this project I wanted to make a spin off a small but classic core game mechanic, in the same lane as other recent indie games such as "Shotgun Chess", "Tetris 99" & "Peglin". The game I wanted to spin off is Club Penguins "Thin Ice" minigame and it's gameplay centered around moving on and off tles that slowly decrease in health.
Design
The "Thin Ice" minigame has the player walking on tiles that slowly destroy, forcing the player to think strategically to follow the correct path to reach the goal while walking on every tile. I wanted to take this core mechanic and turn the core gameplay loop from a handmade puzzle game into a endless, procedurally generated experience.
Every mechanic in the game is tied towards the central tile health mechanic:
Players can only survive if they ensure they have access to safe tiles to move to
Players can only slay enemies by destroying tiles and leading enemies into them
Enemies remove the amount of safe tiles the player can access on the map, while also damaging tiles every turn by moving
Slaying enemies rewards the player with consumable dice items that modify tile health across the entire level
This leads the player to focus on a single mechanic, with the other mechanics flowing with it rather than contrasting against it while also ensuring as a developer the games intent and focus is exclusively on this core gameplay mechanic, with no unnecessary filler content and ideas that may not build towards the experience I'm looking for.
Enemy AI was reduced as much as possible to ensure consistant mechanic behavior while also reducing the production time of the mechanic.
Enemies will always spawn on the edge of the level, and never in the same row and column as the player.
Enemies will always move to a tile that makes them closer to the player's tile
When their are two tiles of equal value to the enemy, the choice is decided by their enemy type. Zombies prefer to move up and down, Slimes prefer to move left and right.
Broken tiles respawn after a certain amount of turns. Tile respawning and enemy respawning are based on counters that slowly decrease based on turn count, ramping up difficulty the more the game progresses. This is to start the game off slow and dynamically ramp up it's difficulty. Through two variables i'm able to tweak the difficulty equation to adjust the rate that this ramps up by. Tile background and tile edge colours also shift after a certain amount of turns to visually represent a change in game progression, Music tempo is something I also want to adjust based on turn count but was shelved due time restraints.
The 1 Page Game Design Document, Created on the first day of development.
Programming
For this project I aimed to keep my codebase clean while trying to follow the concept of object oriented programming as much as I could, such asutalising tables for data containers and arrays, and having a variety of functions to minimize code reuse and flexibility. But I also made very rough but functional versions of new features to ensure it played well and didn't require major adjustments to it's concept before cleaner implementation to increase productivity.
At this time there almost all core variables used to decide game logic are not hardcoded and can be easily modified in the constructor, this helps keep the code clean and flexible but also as a game designer this is crucial to allow the fly adjustments during rapid prototyping so I am able to fine tweak every aspect of the game.
Overall I'm incredibly happy with my programming on this project, while there are aspects that I'm eager to refactor for fun in small updates in the future I believe the codebase is clean, readable and very adjustable if I ever wanted to work ontop of it in a future update. Learning another programming language was an extremely rewarding experience and doing so in Pico-8 really made me really consider the features that more traditional engines like Unity have that I take for granted. Doing all drawing to the screen myself, exclusively accessing data containers via arrays, less built in libraries and more were great challenges for me to overcome while adjusting to the new languages formatting and quirks.
Tile randomisation & lerping position & scale as an art effect.
Showcase of multiple gameplay features working, including player movement, enemy AI, UI, tile updating, item spawning and various lerps
Post Mortem
Overall I'm extremely happy with how the project turned out and with what I learned while doing so. To have a released title under my belt where I was the primary developer in all aspects is an incredible feeling and helped create a deeper, fundamental understanding of the core concepts of each development discipline. While I may update the title in the future, I consider the game finished with a very solid gameplay loop that playtesters found fun. Learning a new programming language in such a constricting engine taught me a lot and makes me feel more confident in my programming abilities.
Credits
Primary Contributors
Jackson Adenan - Design
Jackson Adenan - Programming
Jackson Adenan - Art
Jackson Adenan - SFX
And A Special Thanks To;
Marrisa Tuangthong, Harley Bekker, Daniel Hadzajlic & Jessica Stanjo for general advice, assistance and playtesting.
NeoRame for the cover art template
Lexaloffle for the creation of Pico-8