The game
Players explore base, city and wildlife environments, encounter enemies and collect resources. The game brings together projectile combat, inventory, crafting and buildings, with save slots for retaining world and inventory data. Developed by a team of four in 2017 using the supplied computer graphics framework.
My contribution
My work spanned shared object infrastructure and gameplay systems. I introduced common object IDs, developed item and enemy databases and factory interfaces, and connected object metadata to model loading. I also worked on enemy behaviours, projectile movement and collision detection, world and inventory persistence, and the generation and population of city and wildlife environments.
Establishing shared foundations
The project needed a consistent way to identify, create and represent different objects. I introduced a shared GameObject identity convention and used inheritance to organise categories such as items and enemies. Central databases and factory interfaces provided common entry points for accessing definitions and creating objects. Adding model-source metadata to objects also allowed enemy meshes to be loaded through the database rather than assigned individually in scene code. These were early attempts at giving the team a common structure for adding content and connecting systems.
Enemy behaviour and collision
I implemented state-based behaviours for enemies including molerats and lizards. Their logic covered movement, attacks and reactions to nearby objects or the player. Lizards could grow over time, requiring their collision bounds to resize alongside their visual scale. Projectile handling connected movement, hit detection, damage and removal, bringing several systems together within the update loop.
Saving and restoring the world
The save/load system used text files to record buildings and enemies by ID, position and facing direction. Loading reconstructed those objects through the factory interfaces. Inventory contents were stored separately as item IDs and quantities. This connected the shared object conventions to a practical requirement: preserving a playable world between sessions.
Save / restore sandbox
Edit the scene and inspect its save data. Hover an object or a record to see how they connect.
Open playground ↗What I learned
Working on the architecture interested me more than the move into 3D itself. I enjoyed deciding how objects should be represented, how systems should communicate and how shared structures could support the rest of the team. Looking back, the design leaned heavily on inheritance, singleton access and a separate class for many content types. Some abstractions added complexity without providing enough benefit. It was an early exploration of object-oriented programming, and an important step toward thinking more critically about when an abstraction helps. The lasting lesson was an interest in architecture: understanding how the pieces fit together, alongside making each feature work.