Projects

Drolta: A Logic Programming-Inspired Query Language for SQLite in Python

Drolta from Castlevania: Nocturne

Drolta: A Logic Programming-Inspired Query Language for SQLite in Python

Drolta is a story-sifting language I created for working with SQLite data in Python. It mimics logic programming to make queries easier to write than using raw SQL. The social simulation data I work with (usually generated by Minerva) contains information about characters, their traits, their relationships, and their life events. Looking for narrative patterns across all these tables resulted in long SQL queries that were hard to understand. Drolta handles all the SQL complexities, allowing users to write more concise queries, and even create reusable query rules. Additionally, Drolta is data agnostic. So, it works with any data stored within a SQLite database.


Minerva: An Agent-Based Dynasty Simulation

A screen shot of the minerva pygame visualization.

Minerva: An Agent-Based Dynasty Simulation

Minerva is a non-interactive dynasty simulator that models procedurally generated characters and families vying for influence and power over a shared map. It is designed for emergent narrative research and data analysis. I've found it to be an excellent project for learning how to write SQL queries. Minerva's core architecture is based on Neighborly, and its systems and mechanics were inspired by Game of Thrones, the Shōgun board game, WorldBox, Crusader Kings III, and the Japanese Clan system. I started this project as a fork of Neighborly because I felt that Neighborly tried to do too many things. Neighborly provides an expandable platform, but creating emergent stories requires a lot of authoring work. Additionally, Neighborly's stories felt like mundane slice-of-life stories about people raising families, working jobs, and moving in and out of romantic relationships. Minerva addresses this dullness by providing a more interesting narrative framing about families fighting for power.


Anansi: Social Simulation-Driven Visual Novels in Unity

screenshot of Anansi sample game.

Anansi: Social Simulation-Driven Visual Novels in Unity

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.


TDRS: A Trait-Driven Relationship System for Unity

TDRS marketing image

TDRS: A Trait-Driven Relationship System for Unity

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.


Neighborly: An Agent-Based Settlement Simulation

screenshot of isometric city builder

Neighborly: An Agent-Based Settlement Simulation

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.


Centrifuge: A Visual Programming Editor for Story-Sifting Simulated Story Worlds

screenshot of custom editor

Centrifuge: A Visual Programming Editor for Story-Sifting Simulated Story Worlds

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.


Jyackl: An Online Catalog of Black-Owned Food Businesses in the DMV Area

Screenshot of Jyackl.com

Jyackl: An Online Catalog of Black-Owned Food Businesses in the DMV Area

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.

Links


Infiniforge: Procedurally Generated 3D Swords

spinning sword 3D model generated with Infiniforge.

Infiniforge: Procedurally Generated 3D Swords

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.


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?


Boxing Reinforcement Learning Agents in Unity

Animation of characters boxing in a ring

Boxing Reinforcement Learning Agents in Unity

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 in Unity

Screenshot of VR experimentation environment

Auditory Brain-Computer Interfaces for VR in Unity

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.