3D Time Controlling Top Down Shooter


A top-down shooter where you play as Justine Time and wield the power to control time within desired areas. Combo that with a wall of bullets and you get wonderful results!

Project Details

  • 10 weeks, half time
  • 12 people (4 programmers, 4 artists, 2 technical artists, 2 level designers)
  • Created with our own engine
  • C++
  • 3rd Party Libraries: DirectX 11, FMOD, RapidJSON, Lua C API

My Contributions

Lua Scripting Implementation

  • Implemented the Lua C API into our C++ Engine.
  • Worked a lot on streamlining function exposing to Lua. I made a solution with macros that replaced a lot of duplicated code. That also enabled me to implement automatic documentation of the function names, parameters and return types.
  • Error handling and printing.
  • Exposed around 30 functions requested by the level designers.
  • I worked close to the level designers to get feedback and teach them Lua.
  • Implemented a ScriptComponent that handles game events like OnTriggerEnter and Update.
  • Implemented the ability to connect objects in Unity and then using them as variables in the Lua Scripts

Navigation Mesh (1 of 2 Programmers)

  • Created a nav mesh class that hold all the triangles, edges, vertices and how they are connected.
  • Loading from an FBX file and determining edges and connections from the vertices and indices in the file.

Threaded A* Pathfinding

  • Implemented pathfinding on the navigation mesh using the A* algorithm. 
  • Smoothed the found triangle path by checking line of sight between waypoints and removing unnecessary points between them.
  • Created a threaded pathfinder class that objects can request paths from.
  • Tickets are given to objects requesting paths.
  • The objects can ask if a path is finished calculating on their ticket and receives the path if it is.
  • The Pathfinder has a thread that uses a thread-safe queue to always calculates paths or waits for one.

Player Movement

  • Moving the character along the path to the target.
  • Smoothly slowing down speed to reach the destination.
  • Watch the videos above for reference.


  • Always rotating the player towards the mouse position.
  • Spawn projectiles that move in the player’s current direction.
  • Watch the videos above for reference.

Camera Movement

  • Worked on making the camera smoothly follow the player while still being fast enough to show where they’re going.
  • Watch the videos above for reference.

Reworked Level Exporter

  • Before we exported objects as types with a list for each type of object, like for example colliders. That limited us to either have colliders as separate objects or to have the collider data in all objects, even if they didn’t need one. 
  • We reworked our entity/component system so I updated our Level Exporter in Unity to match the engine’s design.
  • I changed the exporter to export objects as the general data all object have like transform and tag. Then the objects are defined by components, like for example ColliderComponent and ScriptComponent. Components were exported in lists with an ID to the object they belonged to.
  • This enabled us to faster create new types of objects without having to duplicate code.

Level and Object Loading

  • Updated the level loader to use the new object structure and entity/component system.
  • Loaded objects and then linking components to their object.

Updated the UI system to our updated component system

  • Rewrote the old components to work with the new system.
  • All logic and structure remained the same.

Threaded Rendering (1 of 2 Programmers)

  • Created a generic TrippleBuffering class that can is used in multiple places of our engine.
  • This was disabled in the release of the game due to a bug that we didn’t have time to solve.

Debug Tools

  • In game console with Lua commands.
  • Debug Arrows.


Below is a list of links to the students with whom I developed all the projects in the second grade with. They are amazing to work with and I recommend them all!

Click Here to Go to My Group's Facebook Page


Download From IndieDB Here