A downloadable game for Windows

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 generally 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 code for generating and linking the nodes easily in the Unity editor.
  • Finite State Machines - With Tetra/Agon I used a hierarchical FSM structure for enemy behaviour as a suitable match for relatively low enemy complexity. Enemies have Idle, Explore, Hunt, Approach and Engage states.
  • Quaternions - To understand Quaternions better I avoided using Euler angles as much as possible in Tetra/Agon, instead making use of 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 reference 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.

Future features

  • 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 the skins used are minimal. Visuals could be improved here fairly substantially.
  • 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.
  • Improved enemy AI. The AI does have some flaws at the moment. The biggest one is that it sometimes chooses poor positions to attack from where projectiles will hit obstacles.
  • 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, attacking while moving, 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 pacing.
  • A deeper story. I have a lot of ideas for narrative, cutscenes, main character depth, and other immersive elements that are out of scope for this basic demo.

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

Download

Download
TetraAgon0.1.zip 90 MB

Install instructions

Extract contents of the zip file to your preferred directory and run "Tetra-Agon.exe".

Development log

Comments

Log in with itch.io to leave a comment.

I really tried my best but I didnt get these puzzles for a while and I have no idea how to take care of all of the robots that start spawning. I like the movement of the game so far.

Thanks for the feedback.


I didn't put a time limit on the first puzzle so there's no pressure at the start to work out the symbology.


Regarding the enemies - can you be more specific about what trouble you have with them? Are they too deadly? Or too hard to hit? Too fast moving? Any specifics would be really handy for thinking about future versions.

(+1)

So the timer for the riddles is a bit too tight for me and the  drones arent too deadly they are just like annoying to fight. It might be cooler if the gun could load itself up for a short boost or if the drones fall to the ground at some point.  I dont know thanks for your answer!