Game Engineering Portfolio

Freight Hopper

Husky Game Studio - Software Engineer

Freight Hopper

  • Physics-based, fast-paced, first-person platformer game

  • A short 10-level game to relax or compete for better times

Release July 29th, 2022, on Steam for Windows, Mac, and Linux, for free! Developed by Husky Game Studio. Husky Game Studio is made up of volunteers who all decided to release this game for free. All information and data presented here were authorized by my peers to be demonstrated on my portfolio.

Download on Steam

Don't have Steam? Download Here

  • Developed a Finite State Machine (FSM) API by:

    • researching existing solutions

    • receiving feedback from my engineering peers

    • iterating on it until it was easy to use

  • The player character, trains, and turrets utilize this API to control behaviors

  • Written for Unity 2020.2.1f1 in C#

  • The FSM regulates events and user inputs to trigger appropriate behavior

    • Reducing code complexity and improving readability

  • Created for my Applied Computing Capstone at the University of Washington Bothell

Learn about my custom Trains and Lasergrid building tools below.

B.A. Applied Computing Capstone Poster

Presented to my classmates and UW Bothell peers, this poster shows my capstone experience. From being onboarded onto Husky Game Studio, conceptualizing the FSM, graphically representing the FSM API, to the cycle of its development. For a better view of the image's graphics, click here.

FSM API Organization:

  • A state machine must inherit the abstract class FiniteStateMachineCenter

  • States must inherit the abstract class BasicState

  • Sub-state machines must inherit from the abstract class SubStateMachineCenter, and must have a valid parent state

I wrote a tutorial for anyone to use my API and create their own FSMs. Check it out here!

Freight Hopper Gameplay Trailer
Player FSM Demonstration
Turret FSM Demonstration
Player FSM Demonstration
Custom Train Builder Tool
Custom Lasergrid Builder Tool

Train Builder. Check out the Train Builder GitHub.

  • Enums to identify carts and cargo types

  • Repeat actions functionality to quickly create long and tall trains

  • Automatically links trains carts together with Unity Joints

  • Can increment per cart and make mid-train edits

Lasergrid Builder. Check out the Lasergrid Builder GitHub.

  • Set custom dimensions, like the number of laser layers in the grid, lasergrid width, and laser thickness

  • Customize which lasers in the grid are active

  • Minimized number of collisions to improve performance

    • Only one collision box per laser group. If there are gaps in the lasergrid, each group separated by a gap gets their own collision box

  • The lasergrid can be translated and rotated by the developer and the builder will generate lasergrid correctly using 3D mathematics

Click Here to Learn More About My Work on Freight Hopper

Raycasting Hierarchical Bounding Volume API

University of Washington Bothell - Game Engine Development

  • Studied technical fundamentals of game engines such as:

    • Software architecture, input, resource management, textures, animation, coordinate systems, object behaviors and interactions, camera manipulations, illumination and special effects, physics, and scene management

  • My work was based on the 2D game engine developed by Dr. Kelvin Sung, using Javascript.

  • Created a Hierarchical Bounding Volume (HBV) API

    • Improves ray cast collision performance from a time complexity of O(n) to O(log(n))

    • Collaborated with two classmates in its development. My work included the HBV's construction, storing of game objects, and traversal for collisions

Play the Two Games that Use the HBV API Here

(Must Run on Chromium Browser)

Shooter Level: Red ray cast sent from player-character towards the right that intercepts the HBV head node but none of the blue boxes. The grey boxes are HBV nodes. The darker the grey boxes are, the more layered they are.
Turret Level: Red ray cast sent from turret game object towards the player, intercepting various HBV nodes and one of the blue boxes. When a blue box is intercepted, it turns red.
  • The ray cast (the red line), checks if it collides with the head node of the HBV

  • If it does, then it continuously recurses down the tree's children until it reaches a leaf node with game objects (the blue boxes)

  • Then it will check if it collided with the game objects

Rapid Game Prototyping

University of Washington Bothell - Independent Study

  • Made three game mechanic prototypes, advised by Professor Mark Chen

  • My goal was to learn a reliable process to quickly prototype game mechanics and to challenge myself in learning different aspects of game development

  • I wrote an outline so that others may use my process to begin prototyping their own projects. All of the projects were made in Unity 2020.2.1f1 in C#

Prototypes' Code

Prototype 1 - One Juicy Mechanic

  • Prototype Target: make a simple mechanic, flipping a lever, feel as good as possible

  • The features in this lever include light levels dimming/brightening, the color of the lever handle and side lights changing, and randomly determined spark visual effects for extra flair

  • I learned how to manage event triggers and integrate audio/visual effects. In the future, I would like to explore other systems I could add to increase its juiciness

Prototype 2 - Fighting Game Controller Interpreter

  • Prototype Target: make a fighting game controller interpreter that can be used to perform complex fighting game mechanics like “motion inputs”

  • I wanted to learn this subject to understand controller input management

  • I learned how to build a flexible pipeline of input reading and input interpretation that can be used to trigger character behaviors

  • In the future, I would like to expand this further so it can interpret other kinds of complex inputs like charging inputs, fresh and stale inputs, and more

  • In the Input Moves Interpretation Demo, the player is making inputs on an XBOX gamepad:

    • Input Move 1 (Quarter-Circle): down, down-forward, forward + Punch button => Fireball

    • Input Move 2 (Half-Circle): back, down-back, down, down-forward, forward + Punch button => Red Fireball

  • Each joystick direction is associated with a value (Joystick Directions to Values). So when the player successfully performs a Quarter-Circle or Half-Circle with the joystick and presses the Punch button, they will perform the associated ability

Interpreter Organization:

  1. Read Unity's input system for joystick coordinates and button presses

  2. Convert joystick coordinates into direction values and package an array of the frame's input

  3. Track inputs for duplicates and determine if its a new input or a repeated input

  4. Record last 15 frames of inputs

  5. Track for button presses. If a button is pressed, compare if the last 15 frames contain a stored input move in the dictionary. If there is a legal match, perform the ability.

Input Moves Interpretation Demo
Joystick Directions to Values

Prototype 3 - Simple Dialogue System

  • Prototype Target: Make a dialogue system so the player could make branching decisions and repeat previous dialogue

  • I learned how to make a simple dialogue system suitable for linear visual novels and how to manage coroutines for asymmetric processing

Other Engineering-Related Projects