Tetra/Agon
About
Introduction
You find yourself alone in an industrial district. A strange metallic box floats nearby. You're posed with a puzzle in a strange script, and a choice on what happens next.
You're being tested. What for? Who is testing you? Will you ever find out?
Tetra/Agon is a puzzle/action FPS game. In it's current v0.1 form it's a single-level demonstration of enemy AI, weapon handling and puzzle gameplay.
Instructions
WASD or arrow keys - Movement
Space - Jump
1-4 - Select weapon
Left mouse - Shoot/press button
Right mouse - Interact
Hint: Some weapons are better choices against different enemies. If you get stuck, remember that the checkpoint is saved before you pick your new weapon upgrade so you can go back and try a different weapon.
Why Tetra/Agon?
Tetra/Agon is the first 3D project that I've added to my profile here on Itch. There were a number of specific elements I had in mind at conception:
- First person shooter: As a massive FPS gamer, I've been looking forward to getting stuck in to building a FPS game myself. A major consideration for me here is having a selection of weapons which are all useful but varied in meaningful ways.
- 3D dynamic path finding: I wanted enemies that have full 3D dynamic path finding, which I don't think I've seen in any major FPS game. In other games I've encountered flying enemies they're either "fake" flying (i.e. hovering at a set height using 2D navmesh path finding), following preset paths, navigating in spaces without obstacles, or relying on "sliding" along obstacles to get to targets.
- Puzzle box: I wanted a "puzzle box" feature, a type of non-repeating puzzle that could be included easily multiple times. I wanted this to be under time pressure (after the first "learner" box) to bring the challenge of switching between the kind of thinking required for fast FPS action and for logic puzzles under time pressure.
- Pattern of four: I had a vision of the patterns of four throughout the game - four core challenges (solve, shoot, survive and strengthen), numbers in base four, four parts to each puzzle, four puzzles to each puzzle box, four weapons, four enemies. It was an interesting challenge to hold within this pattern within reason, and this sort of deep equilibrium can be useful in communicating implicitly with the player.
Learning points
- Deterministic gameplay - Deviating from my highly stochastic shoot-em-up games, as a challenge and experiment I decided to make this game without any random elements. Gameplay in Tetra/Agon follows strict deterministic rules and there are no random elements used to determine gameplay.
- Object libraries - I invested fully in using object libraries for Tetra/Agon: all enemies, projectiles, particles, etc are stored in object libraries so there are no objects instantiated at run time.
- A Star algorithm - I've experimented with this previously in a very early prototype 2D project, however Tetra/Agon takes it much further by implementing it in a 3D space with higher quantities of nodes. Path finding data is pre-generated and stored in the game files, so it does not need to be calculated at run time.
- 3D node map - To enable enemies that can move in three dimensions, I built a 3D node map for the A Star algorithm to navigate and a system for generating and linking the nodes easily.
- Finite State Machines - With Tetra/Agon I used a hierarchical FSM structure for enemy behaviour as a suitable match for relatively low enemy complexity.
- Quaternions - I avoided using Euler angles as much as possible in Tetra/Agon, instead making use of more Quaternion-specific methods to solve problems.
- Explicit referencing - I have used singletons a lot in my previous games, but as they can sometimes cause problems I avoided using them at all in TetraAgon as an exercise. Every connection between classes is explicitly defined.
- Music Manager - It was interesting to create a dynamic music manager, which transitions smoothly between a selection of music tracks depending on the game state.
- Additional scenes. I used just one (pre-generated) scene for v0.1 as my primary focus was building the AI and gameplay. I could expand Tetra/Agon to have multiple scenes and with events triggered as the player moves through the scenes as well as adding more depth to the story behind them.
- Models and skins. Currently the models used for weapons are combinations of simple primitives, and all skins used are quite minimal. Visuals could be improved here fairly significantly.
- Additional puzzle types. I'd like to add some additional types of puzzle between waves, such as puzzles with pattern matching, moveable puzzle pieces, or that require rotating and inspecting the puzzle.
- Additional enemy strategies. Though the enemies have a decent amount of variety in behaviour, there are some more advanced tactics (e.g. hit and run, hiding, attacking from behind, coordinating with other enemies) that I'm interested in implementing in their behaviour.
- Boss-type enemies. Occasional enemies with combinations of weapons, multiple damage stages and advanced attack patterns would bring an interesting change in gameplay.
Credits
Game design, development and coding
Joseph Norris/CoSeph Games
Level design
Gameplay scene - demo scene from RPG/FPS Game Assets for PC/Mobile (Industrial Set v2.0) - Dmitrii Kutsenko
https://assetstore.unity.com/packages/3d/environments/industrial/rpg-fps-game-as...
Code samples and tutorials
Outline script - Chris Nolet
https://github.com/chrisnolet/QuickOutline
Stair climbing - Cobertos
https://cobertos.com/blog/post/how-to-climb-stairs-unity3d
Finite state machine - Mina Pêcheux
https://medium.com/c-sharp-progarmming/make-a-basic-fsm-in-unity-c-f7d9db965134
Fonts
Graalen - Pixel Sagas - Neale Davidson
https://www.1001freefonts.com/graalen.font
Alien Ravager - Darrell Flood
https://www.fontspace.com/alien-ravager-font-f78813
Models
Low poly space craft assets - Trockk
https://trockk.itch.io/collection-of-low-poly-space-craft-assets
Textures
Free PBR Metal Plates - Yughues
https://assetstore.unity.com/packages/2d/textures-materials/metals/yughues-free-...
Sounds
Running sound - Albert Balbastre
https://freesound.org/people/bulbastre/sounds/103965/
Landing/jumping sound - Sean Porio
https://freesound.org/people/SeanPorio/sounds/519262/
Various effect sounds - FreeSFX pack from Kronbits
https://kronbits.itch.io/freesfx
Various sound effects - Prunus Productions Scifi Sound Pack
https://prunusproductions.itch.io/scifi-sound-pack
Music
Space Music Pack - Goose Ninja
https://gooseninja.itch.io/space-music-pack