• Software: Unity, Unreal Engine
  • Languages: C#, C++, Python, PyQt

Personal: Channel Packer Tool

Written in Python PyQt

Created to aid in the process of creating channel-packed mask textures for various purposes, such as PBR textures or VFX source textures.

SPOOKULELE: Frame Data Editor & Visualizer

Written in C#, extension of Unity Editor

SPOOKULELE is an Action-Adventure game set in New Orleans. You play as two Reapers, Spooky and Haru, who use their musical abilities to fight ghosts haunting the city.

Created to visualize the frame data of attacks in SPOOKULELE. This helped designers and animators tune frame data to fit animations, helping sell the responsive feel of the game.

The frame data editor could modify the following values:

  • damaging frames
  • cancellable frames (can cancel into another action)
  • sticky frames (nudge the player towards nearest enemy)
  • invincibility frames
  • multi-hit frames (for attacks meant to hit several times during a single animation)

Here, the user modifies the knockback and screenshake of the first basic attackā€™s on-hit effects. This change is responsively represented in the game right away with no recompilation needed, aiding prototype speed.

The tool can also be used to profile enemies and visualize hitboxes. A frame-stepping feature is built-in.

Grandma Green: Audio Tool

Written in C#, extension of Unity Editor

Grandma Green is a student-led, free-to-play virtual pet and gardening simulation game.

Video Demo

Gif Preview

Created to help the audio team iterate on their sound assets right in Unity engine. Based on the WWise audio software.

Grandma Green: Dialogue Tool

Written in Python PyQt

Created to help the narrative team quickly and painlessly convert their shared Google Sheet workspace to game-compatible Yarn files.

Left on Read: Dialogue Tool

Written in C# (Unity)

Left on Read is an choice-driven narrative platformer about the harsh realities of modern age communication.

Credit: Crank Gameplays

On Left on Read, I needed to provide my development partner, the writer of the story, with an easy solution to write texting conversations that felt natural. The protagonist needed to pause, delete words, rewrite sentences, and have a certain cadence to the way they wrote. It was imperative that we established their personality using these little texting quirks.

I wrote a text parsing solution that used <alligator> tags to define texting behaviors. With tags like <delete>, <pause>, or even opening up to custom events using a <custom> tag, I allowed my development partner full control to make whatever kind of text-based narrative he desired.