Other Projects

Goostory (Action Arcade Game)

I made this game in high school. It was a relatively big project, but I, like many other students, had plenty of free time in our final months of high school to do whatever. So I did this. I eventually got some friends to help with the art and finished it over the summer.

A video of me playing through the game. The game has 5 stages, each with different enemy and boss encounters.

Since this was made so long ago, I don't remember much about how it was made or what interesting problems arose. But, the one thing I can say, playing through it now, is that I am quite impressed with the amount of content I had developed. Past me seems quite creative with the way he spun a few goose sprites into a variety of combat scenarios. I am also seeing how games like Touhou and Starcraft 2 influenced the design of this game. Those were games that I watched or played a lot back then.

With that said, past me also made certain boss phases where the boss would just fly around and never came down to interact with you, which was cringe 😠.

Shooter-Platformer Minigame + AI

For my university capstone project, my project group decided to prototype some tools to help Unity game developers integrate and take advantage of reinforcement learning, a branch of AI that likes to use games as a sandbox or training environment. Our tools were built on top of Unity's ML-Agents. For the purpose of testing out our tools and investigating the usefulness of reinforcement learning, I made this simple minigame where the player has to setup a beacon and then protect it from incoming enemies with a gun.

A video of me playing through the game. The game has simple platforming controls and uses the mouse to shoot.

Using the tools we developed, I trained an AI that to play this game and try to achieve the highest scores. Here is the AI after about 24 hours of training on my Ryzen 3700x:

A video of the AI playing through the game.

I added an aim assist feature for the AI to use, so it did not need to learn how to aim. Learning to aim would have been possible, but time consuming (we didn't have the time). So instead, I gave the AI heavy aim assist to allow it to focus more on other factors like movement, positioning, and target selection.

Here is a few more clips of the AI playing:

A video of the AI playing in an underground area, in a corner.
A video of the AI playing in a cove-like area.

It's clear that the AI doesn't play as well as a human, but we found that it can still provide value. When we invited other people to come try the game and then watch the AI play, they said that the AI taught them new ideas and gave them "alternative perspectives" about how the game works. For example, after watching the AI play, some players:

  • discovered that shooting backwards helps get around faster than just walking.
  • realized that jumping can be used to bait or misdirect enemies to shoot into the air, which reduces the density of incoming fire and makes it easier to survive.
  • reconsidered their dislike of the aim assist feature and started appreciating how it focuses the game towards moving, dodging, and other types of decisions.
  • commented that the AI had developed a strategy that is pretty good but unrealistically difficult for a human player. And, it was a strategy they would discourage if they were the developers.

Our tools also had the ability to generate heatmaps from the AI training sessions, which helped players find areas that were easy to exploit.

A zoomed out screenshot of the whole game arena with a heatmap showing the
Go to the red spots for free points?

Overall, it was a fun project. I'll be curious to see how well reinforcement learning can be integrated into the game development process as the technology develops.

Custom Uno Cards

I made a custom deck of Uno cards for playing Uno with my friends on Tabletop Simulator.

Screenshot of custom cards layed out in Tabletop Simulator, with a mix of classic Uno cards and new custom cards. Each card contains an unique artwork.
A screenshot of some of the cards in Tabletop Simulator.

This originally happened because we found someone else's "anime waifu" themed uno deck, and I thought I could improve on the visual aesthetics of the cards, but halfway through, I started adding and trying out some new cards of my own, some of which were well-liked by my friends and stayed in until the end.

A custom Uno card with the title "Explosion" and an effect that reads "Shuffle the discard pile. If a player is making you draw cards, you may play this card to prevent that."
The "Explosion" card, for example, was a fan favorite, with its wacky and chaotic effect. It's also a card that can be played on any color, is generally useful, and has a name that is very fun to say. (artwork from KonoSuba v.17, colored by Xarlasar)

Sorting Algorithm Visualizations

Behold, Quicksort!

This is an old highschool assignment where we had to implement several sorting algorithms we learned in class. The assignment was meant to be done with a purely command line interface. But, having extra time, I decided to make something a little more animated and fancy using Unity.

Custom MTG Life Counter

Magic: The Gathering (MTG) is a card game. Its Standard format features a 1v1 battle where each player starts with 20 life points. There are several ways players track their current life total as the game progresses, like with pen and paper, some 20-sided die, or a phone app. I made a custom phone app when for tracking life points when I used to play frequently at an old office.

Screenshot of a MTG life counter app
I made a custom MTG life counter app so I can add artworks of the various MTG characters, funny nicknames, and glowing particles in the background.

This Website

I built this website with Next.js.

I designed this website by combining the best parts I've seen of other people's websites with some personal elements and aesthetic choices.