Lift-Off Laetus

Turn-based Strategy Game
Screenshot from the game, showing some astronauts and a "engine core fragment"
  • Platform: Windows
  • Tools: Unreal Engine 4, C++, Git
  • Duration: April-May 2021
  • Team Size: 7
  • Role: Systems programmer

Contributions

  • Implemented powerup system for turn-based combat
  • Designed maintainable game architecture with other programmers
  • Worked closely with artists to integrate assets

Gameplay

  • Turn-based strategy game for 2 players - fix your ship and leave Laetus!
  • Spend points to move, attack opponents, and push engine parts to your ship
  • Harvest resources from the environment to add extra effects to weapons

Overview

I worked on Lift-Off Laetus with a team of 3 other programmers and 3 artists, as part of the 7-week Technical Game Development II course at WPI. Using Unreal Engine was a requirement for the project, and we primarily used C++ (instead of Blueprints) so that we could easily merge code files with Git.
-
Most of my work on this project revolved around a weapon powerup system. While the weapons that each astronaut carries (a rifle for shooting single targets in cardinal directions, and grenades for striking 9 nearby spaces at once) can deal damage by default, players can harvest resources from the surrounding environment to add different effects to their next attack.
-
Below are examples of the three resources in the game (slime sap, energized ore, and shrub fruit) applied to grenades:

Grenades with slime sap applied make grid spaces sticky, which costs players one extra energy point to leave them (see bar on top).
Grenades with energized ore applied burn grid spaces, so they deal damage to characters walking over them later.
Grenades with shrub fruit applied make grid spaces slippery, which costs players one less energy point to leave them (notice the top bar does not deplete).

Since each effect shared common traits with the others (getting applied when stepping onto/off of a space, referencing an expense or damage modifier, etc.), I was able to generalize them and simplify the ways they were applied.
-
I also made use of Unreal's Data Asset datatype (a struct that can be saved to the Content Browser, and modified in-editor) to store references to C++ classes, VFX files, player portraits, and other assets related to a particular powerup. That way, game logic relating to each powerup could fetch any necessary asset references using a single Data Asset.