SCHOOL JAMS

Red Tide

Roles: Technical and Systems Designer

The professors wanted us to stay pretty strict to the theme of environmental sustainability so I went down a rabbit hole of learning about red tides and crustacean walkouts.

I designed and implemented the fishing, looting, and inventory systems in Unreal Engine 5.

I wanted to be able to catch certain fish only in certain bodies of water and be able to add new fish to those pools.

I created an actor component that I added to whatever actor I wanted to be fishable. This actor component contained a list of fish that I could add to at run time and a function that returned whatever item or fish you caught.

Fishable items have weights or rarities so I can adjust how often you get certain types.

Fishing Loot Tables

I based the fishing mechanic off of Dead By Daylight’s skill check mechanic. A random range will pop up someway ahead of your cursor and you have to click when your cursor is inside the blue skill check zone.

The whole UI is made programmatically using a radial material so I can change the size of the skill check range at runtime and scale the UI without having to worry about resolution.

Reeling Mechanic


Demon Hunter

Roles: Gameplay and Systems Designer

A top-down, hack-and-slash game where you play as a retired yokai venturing into hell to save his daughter’s soul.

I worked on the enemy ai and prototyped some of the combat abilities like the ping-pong-dash attack in Unreal Engine 5.

Flocking

I knew there were going to be many enemies chasing the player at any given time so I wanted them to not get stuck in the trailing situation you’ll often experience when kiting enemies.

First of all, they avoid the player using Unreal’s built-in crowd-avoidance systems. Then they pick a random point around the player using the EQS system to move to and switch it up every once in a while to avoid the trailing problem. This also staggers them so they don’t just stand in a perfect circle around the player when idle.

Combat

I didn’t want them all attacking the player at once either because that would be unfair, unfun, and look terrible. So I implemented a ticketing system where we could give the player a number of tickets and that’s how many enemies could attack at once. Then enemies within a certain radius of the player could ask for a ticket periodically and if one was available they would move toward the player and make an attack, then return the ticket when they were done.

This made iterating easier too because we could adjust if only 1 could attack or 2 or 3 and how big the attack radius was without changing the code.

Enemy AI


Valente

Roles: Technical Designer

Valente is a 2D top-down narrative adventure game where who and what you interact with and how determines how Valente’s nightmares play out.

I was the technical lead managing the Perforce repo in AWS and figuring out an efficient workflow for building a 2D game in Unreal Engine 5.

Unreal Engine has some built in tools for working with 2D assets but most of them are designed to be used from a side view perspective.

I needed collision for the environment but didn’t want to model anything by hand or manually place a bunch of blocking volumes. I wanted something I could just draw basically.

I ended up repurposing Unreal’s built in sprite collision which has a polygon draw tool. I drew polygons that wrapped around the environment to contain the player. But because you can only set the depth of all the collision on a sprite I had to do this on a duplicate of the background sprite then get rid of the ground collision and turn off rendering of the duplicate.

Top-down 2D Collision