The Shifting Castle of Antiok is a procedurally generated 2.5D platformer made in one month by me and Tudor Gogan.
We started this project since we wanted to make something together and to challenge ourselves in both scripting and level design.
The player’s main goal in this game is to navigate through the mysterious castle of Antiok in order to find three keys. Those three keys can be used to unlock the castle gate and escape. The player must be careful not to fall prey to the deadly traps and enemies of the castle, since the layout of the castle will shift every time the player dies, making memorization of one’s escape route impossible.
- Created together with Tudor Gogan.
- Finished in four weeks – halftime.
- The game procedurally generates a new map every time the player dies.
- Created with assets from the Unity Asset Store.
- Unity 5.6.0
- Autodesk Maya
Tudor and I began planning and talking ideas several months before we got the time to start the project. We had a little earlier in our education had an assignment where we made an endless runner in unreal. We got inspired and wanted to make our own game with procedurally generated layout.
We wanted a lot with this project but finally settled with the core features we needed: A modular building set, a player character and level obstacles.
The next thing we did was talk about what areas we should be responsible for. Tudor with more experience in Unity took more responsibility for the scripting tasks while I focused on creating a modular building set and levels.
- Created a modular building set
- Level Design (Built seven out of our 10 levels)
- Made and updated a room template along the project
- Added custom Physics materials
- Created custom colliders for all modules and prefabs
- Balanced damage and timers of hazards
- Game Design
- Audio Design
- Outro screen
- Procedural generation
- Platforms that can be jumped through
- Lasers toggling with a timer
- Moving platforms
- Tracking Laser Hazard
CREATING THE FRAME
Before we could start experimenting with generating a layout we needed to make the actual rooms. We had ideas of having rooms with varying sizes and connections but – since we were scoping for a 4 week half time project- settled on having square rooms. This was probably for the better since it allowed us to focus more on how to generate the rooms instead of how they would connect. These rooms with openings in four directions could be stacked in any direction without any trouble. After generating a map, there would be openings in the room that lead nowhere. To deal with that we placed doors to the sides, a grating at the top and bricks in the bottom that we used to close off the openings that does not have a room connected to it.
THE PROCEDURAL SYSTEM
We started off talking about what we could generate; enemy locations, player stats and abilities, have the difficulty increase further through the level and generating the map during play were all in our sights at some point. Though we ultimately did the smart thing and tightened the scope to have more time to make the gameplay itself fun.
We came up with a system that randomly spawn rooms from a pool of availible rooms and then moves them to an availible spot next to the previously spawned room. Here’s what the procedure looks like:
And here it is in action!
We could now generate a level of rooms placed in a random order. But to make the gameplay fun we needed some solid mechanics. We wanted to have simple features that we could combine to make them more interesting.
For example: We could create a gameobject, put a rotate component on it and then add a projectile shooter. You now have an object shooting projectiles all around it.
Here’s a few examples of what you can do with these components. In the top left you see a platform moving from side to side while shooting projectiles beneath it (movement component + platform + projectile shooter). The lower left picture shows an object that spins with two lasers attached to it (rotation component + laser).In the lower right there’s a sphere that spins while shooting projectiles in four directions at the same time as its moving up and down (movement component + rotation component + 4 projectile shooters + lava surface).
Procedural generation has been interesting to say the least. Getting it to work by itself and then with everthing else in the game proved to be quite tricky at times. However, I am glad we challenged ourself. We have learnt a lot during this project.
If we were to continue the project we would have wanted to use time to really make the game into a roguelike. The player would be more randomized but be able to gather currency and upgrade stats and/or abilities when they died. We also had a lot of ideas for the procedural elements that could be implemented such as randomly placing enemies at waypoints in each room, making rooms more difficult the further you go and to have each rooms layout procedurally generate using smaller pieces.
Even though there is much that can be done, I am really proud of the outcome. I am glad that we challenged ourselves and made it through.