An experimental top-down multiplayer prototype, running in the browser, written in JavaScript and Python. Developed in a little over two months by myself and Axel Stewart, another RPI student. It was our final project for Experimental Game Design, and was also displayed at the 2019 GameFest expo in Albany.

View on GitHub Video of Gameplay

The concept was Axel's brainchild, although the name was mine. You control a small critter made of text, in a world also made of text. You can consume the text around you, adding the letters and symbols to your inner store of text, and then regurgitate them to speak to other players or build things. In particular, player chat is pulled from your gut, meaning you can't actually type a phrase until you've gathered the necessary letters. We were interested in the ways player communication, expression, and society might develop in a game where language itself was the primary resource.

As a browser game, the client is written in JavaScript. The server is written in Python, and communicates with the client using WebSockets. Both were written from scratch, to provide maximum control over the internals of the engine and as a learning experience. In addition to world state and player positions, the engine synchronizes each individual letter as it enters or exits the player's gut, and smooths motion as appropriate. This was much more complex than it sounds, but the full animation from world to gut and from gut to chat bubble was essential in communicating the core mechanic to players.

Acacia Bay

A 2D submarine game built in two weeks using Unity and C# for RPI's Experimental Game Design course. I worked with two other students, with me doing the programming and level design.

View on GitHub

In the game you captain a small privately-owned submarine named the Acacia Bay, which has been hired to explore a strange sinkhole in Maine and document the species found within. You can either kill the creatures from a distance with your laser cannon or attempt to capture them alive with your short-range sonic blast. Who knows what waits at the bottom of the pit?

I'm pretty proud of the way the sub controls. It feels like a heavy object in water but isn't unpleasantly floaty, and it reacts nicely with the surface. For a two week, three person project I think the game has good atmosphere and decent gameplay.

Jefferson Project Data Viewer

The Jefferson Project at Lake George is a non-profit environmental partnership between Rensselaer Polytechnic Institute, IBM Research, and The Fund for Lake George. Part of the project involves monitoring the lake with a number of sensors, which generate a lot of data every day. This project aims to display that data in an intuitive and immersive way, projecting the weather and water readings into a virtual recreation of Lake George and allowing you to watch them play out over time. Built using the Unity engine and C#, plus some rendering and compute shader programming.

Info About the Jefferson Project

Development of the viewer was started by Michael Henderson, an IBM researcher. I was brought on by him to optimize and further develop the project.

My notable contributions
  • Greatly optimized the terrain system, which was one of the main performance bottlenecks. The terrain system uses high-resolution draped terrain images pulled from a remote server, rather than the texture splatting more commonly seen in games. This made balancing looks, network speeds, memory usage, and GPU bandwidth a challenge. By improving chunk sizing and resizing, caching, data structures, and mesh creation, I was able to make it run at a consistent framerate on target systems.
  • Greatly optimized the system used for drawing wind and water currents. The updated system makes heavy use of the GPU for updating and rendering particles, leading to an extreme improvement in performance.
  • Optimized and improved the system that placed points of interest in the world, such as sensor platforms. PoI are now created dynamically based on data from the remote server instead of placed by hand, meaning that new sensors will be automatically integrated.
  • Added completely new holographic displays to all sensor platforms, allowing users to easily bring up a graph of any value the sensor tracks. The graph can display the progression of a value over time, or compare two different values.
  • Added the ability for the automatic progression of time to halt and wait for necessary resources to load.
  • Redesigned a large part of the UI for better looks, user experience, and performance. This includes redesigning the date/time selector and the mini map, and creating the compass rose at the bottom and the "Waiting for" display at the top.
  • Integrated a day-night cycle and weather plugin with the existing date and time system.
  • Began work on displaying the cloud density data. The current system uses horizontal slices, but I was looking into a raytraced rendering system.

Unfortunately, the data viewer is not publicly available, and is only used internally by the research team. Please enjoy some screenshots of it instead.

World of Plankton

World of Plankton was created by the outreach arm of the Jefferson Project at Lake George, a non-profit environmental partnership between Rensselaer Polytechnic Institute, IBM Research, and The Fund for Lake George. It is a museum installation centering around a virtual touch pool, in which a number of users can view and interact with the fish and plankton found in Lake George. The touch pool was built using the Unity engine and C#.

Project Website Video of the Touch Pool

The version of the game that is available for download on the project website above is a desktop game that was developed before I joined the team. I was brought on to port the game from desktops and controller input to a touch-driven museum experience. We explored a number of options for converting the first-person exploration game into something which would attract the attention of patrons, be usable by multiple people at a time, and provide a full experience in only a few minutes. Eventually I introduced the concept of a total conversion into a top-down virtual touch pool, where players could watch different creatures swimming by and “grab” individuals for closer examination.

At time of writing, The World of Plankton is installed at the ECHO, Leahy Center for Lake Champlain.


My entry to Global Game Jam 2018. A two-man project for which I provided the programming and level design, and Steve Carcamo did the art and character design. Built using the Unity engine and C#.

View on GGJ Website View on GitHub

The game is a 2D sidescroller, in which a hamster-like alien crash-lands on Earth. Using his mental mastery over technology, he must take control of the Earthlings' appliances to get his ship back and return home. Possessing a machine leaves your body comatose and defenseless. I love the animation Steve did of the little guy twitching on the ground.


My entry to Gynvael's Winter GameDev Challenge 2017/18. Contestants were given four weeks to create a turn-based tactical game from scratch, with strict space limitations. All JavaScript, image files, and other resources had to be packed into a single HTML file, which was 20 KB or smaller. Among other tactics, I ended up using a Python script to compile all my sources together and compress them into a self-extracting PNG file.

View on GitHub Contest Website Play Online (Chrome only)

According to the rules of the contest, the game only had to run on the latest version of Chrome. It is not guaranteed to run on any other browser. The contest website contains a YouTube video showing gameplay.

The game features two competing teams of frogs, as well as a computer-controlled team of bugs that can be eaten to regain health. It is played using the left mouse button to drag the camera and to select units, and the right mouse button to direct them.

Unfortunately, due to a mix-up on my part regarding the deadline's time zone my submission could not be considered for the final ranking. I'm still pretty happy with the end product.

HTML5 Video Keyboard Shortcuts

A Chrome plugin that adds keyboard controls and shortcuts to Chrome's built-in video player. At time of writing the plugin has over 7,000 users and an average 4 star rating. Built using JavaScript, with a little HTML and CSS for the options menu.

View on GitHub View on Chrome Webstore

In March 2016, I finally got fed up with Chrome's built in HTML5 video player. While basically functional, it had no keyboard controls at all, which made things like skipping ahead or back tedious at best, and challenging at worst.

I decided to write a simple Chrome plugin that added the shortcuts I wanted, mostly drawn from Google's own YouTube player. After I'd finished that, it seemed (at the time) like it would be simple enough to polish it up and release it publicly. It certainly wasn't as simple as I'd initially planned, but I've found the process rewarding.

Cursed Words Translator

A website I made to automate translations to and from the fictional language spoken by dark spirits in the webcomic Paranatural by Zack Morrison.

View on GitHub Use the Translator

The language looks like a series of stylized skulls. Dedicated fans discovered that each pair of skulls corresponds to a spoken word from the webcomic itself, but parsing each skull pair and then finding the correct word on the correct page was time-consuming work. The translator can instantly translate in both directions, and even renders the skulls as you type.

Initial development happened in 2016, and was one of my first JavaScript projects. As such, the code was a bit of a mess. In Spring 2018 I returned to the project and rewrote it from the ground up, leaving the code much easier to read and extend.


A web tool I built to help myself and others with the development of Minecraft commands. Minecraft commands can access and edit the NBT (Named Binary Tags) data format used in Minecraft's save games, using a JSON-like text format known as SNBT (Stringified NBT).

This web tool takes an unformatted SNBT tag, checks it for syntax errors, prettifies the tag with line breaks and indentation, and outputs the result. It makes it much easier to spot mistakes in the tag, and can tell you if the tag contains an error without needing to boot up Minecraft.

View on GitHub Use the Linter

The linter has a bunch of options to accomodate different formatting preferences. The central functionality is also available as a library for use on the web or with Node.js, although to the best of my knowledge this has never been used by anybody.


A side-scrolling raft game built using the Phaser JavaScript engine for RPI's Game Development I course. A team project by me and four other students.

View on GitHub Play Online

For this game, our team was given the prompt Some dudebros pull a prank that goes horribly wrong. The game stars six college fraternity brothers who pour soap into a fountain, accidentally flooding their entire campus. They must escape the flood of suds on a floating mattress, collecting party supplies along the way.

My notable contributions:

  • Procedurally generated scrolling background.
  • A system for randomly spawning obstacles and/or collectibles ahead of the player. This system formed the backbone of the game's level design.
  • An unconventional health display, in the form of the number of people on the raft. Taking damage causes bros to fall off. Certain non-essential animations will only play if enough bros are present.
  • Robust player tinting/flashing system.
  • All voice acting (for my sins).

Dark Gods of My Basement

A top-down dungeon crawler that I made in Game Maker for RPI's Level Design course.

Download the Windows Executable

A no-nonsense businessman comes home to discover that the Nightmare Realms have begun leaking into his basement. Mildy annoyed, he picks up a newspaper and heads downstairs to deal with the infestation.

The game is played with mouse and keyboard. WASD to walk, mouse to turn, and click to swing the newspaper. Shift skips to the next level (or at least to a level; this was purely intended as a debug tool). The game should take half an hour or less to complete.

While I initially intended to limit the player character's rate of attack, the newspaper became used as a method of defense as well as a weapon. Swinging it covers a good 180° arc, blocking all incoming projectiles from the front and sides. This means that the only way to play most of the game is by mashing left click like a lunatic. I apologize in advance for any damage to your mouse.

Named Prismarine

I named the block "Prismarine" in the game Minecraft. Still pretty proud of that one.