Projects

Unity-TDRS

screenshot of Calypso sample game.

TDRS

TDRS (Trait-Driven Relationship System) is a toolkit for modeling dynamic character relationships for life sims, dating sims, visual novels, and adventure games in Unity. It enables game developers to track relationships between social entities (NPCs, players, factions, etc.), apply various traits that modify how characters feel about each other, and dispatch various social event that change relationships and build interpersonal histories. Game designers can leverage this package for NPC decision-making, customizing dialogue, and content gating. TDRS is currently used as the relationship system for Anansi.


Anansi

screenshot of Calypso sample game.

Anansi

Anansi is a framework for creating social simulation-driven visual novel experiences in Unity. It combines the Ink narrative scripting language, a storylet architecture, and a social simulation that manages non-player character (NPC) schedules, emotions, personality traits, and relationships. Interactions with NPCs affect their feelings toward the player and other NPCs. Additionally, NPCs can reason about their relationship with the player and respond to events that happen to other characters in their social circle.


Neighborly

screenshot of isometric city builder

Neighborly

Neighborly is a story-generation-focused agent-based modeling framework. It enables users to simulate the lives and histories of characters living within a single settlement. The fun of neighborly comes from exploring the generated history and seeing how the behaviors of the various agents led to intriguing and humorous emergent stories.

Neighborly combines game-inspired elements from Roguelike games, such as Dwarf Fortress and Caves of Qud, with the authorability and data science focus od agent-based modeling frameworks like Mesa.


Jyackl.com

Screenshot of Jyackl.com

Jyackl.com

Jyackl (pronounced like Jackal) was an online directory of Black-owned businesses in Washington DC, Maryland, and Virginia. This was the other side of my social media work as a part of The Blacklist DMV. We wanted to make a living artifact that cataloged all the Black-owned businesses as services in the DMV area. I did all the design and coding for the web app. You can still try it out.


Infiniforge

spinning sword 3D model generated with Infiniforge.

Infiniforge

I started designing this project in 2016. At the time, I was heavily interested in both blacksmithing and procedural generation. I didn't know anything about computer graphics or PCG when I started. So, this project served as my introduction to both of those. Over the past three years, this project has helped me to grow more as a programmer. I continue to add to Infiniforge, even though it was to be submitted for the August 2016 /procedural_generation subreddit challenge. Infiniforge is a NodeJS module that generates and exports 3D meshes (using ThreeJs) as glTF JSON. You can import the models into Unity or other software that supports the format.


Centrifuge

screenshot of custom editor

Centrifuge

Node-based story-sifting tool for character-driven world simulations. This was my first project as a grad student at UCSC. I intended to build a graphical tool that helped people search for characters that met certain preconditions, such as experiencing a specific series of events, knowing a particular character, or any other interesting pattern. The other tools for story-sifting up to this point were all text-based domain-specific languages. Centrifuge is a cross-platform desktop app built with electron.


Magpie

Magpie promotional art

Magpie

This was the final project for my Fall 2018 15-466: Computer Game Programming course. I worked on a team with three other students where my primary role was to write the code which imported our 3D assets, built the level, and instanced characters/animations. In the game, you play a Magpie bird stealing items from a museum. How many things can you steal before you're caught by security?


Teaching Machine Learning Agents to Box

Animation of characters boxing in a ring

Teaching Machine Learning Agents to Box

I threw this project together over the course of a week as an entry in Unity's first challenge for their new 'Ml-Agents' machine learning workflow. I had tossed around the idea of using machine learning to train AI agents in fighting games, but I had never gotten around to it until then. The agents learn via Reinforcement Learning and are given a simple policy that positively rewards landed punches on the opponent and negatively awards taking damage. Other behaviors, such as successful blocking and advancing on the opponent, are also rewarded.


Auditory Brain-Computer Interfaces for VR

Screenshot of VR experimentation environment

Auditory Brain-Computer Interfaces for VR

This project was my master's research project. The goal was to explore the use of an auditory P300 BCI paradigm for enabling users to select objects in virtual reality. I ended with an EEG-hardware agnostic Unity project that could run different P300 paradigms in virtual reality. While running the unity scene, EEG data is streamed from the headset and written out to files to be processed. For example, one can take recorded EEG data using a machine learning classifier to predict what object the user wants to select. Pictured is the virtual apartment environment with three objects used during testing.