Nature is Healing is a game I developed independently in 2022 using Raylib and C#. It was originally created as an entry for Ludum Dare 50 and was developed entirely in 72 hours. I was the sole developer responsible, for programming, art, animation, and design.
The big technical challenge of this project was developing a real-time cellular automata to simulate a massive mold creature and its interaction with flame particles, the level layout, and the player themself. Maintaining a stable framerate with the automata lead to two methods for optimization.
The first was storing the cellular automata as a quad-tree, which allowed a major speed-up on collision detection between flames and the mold. It also meant that areas that are completely filled with mold require fewer steps to simulate as they will be consolidated into a single larger cell that is simulated in one pass.
The second method was separating the mold simulation into a separate thread from the rendering. This allowed for the rendering to target one update frequency while keeping the cellular automata to deviate slightly from the target framerate without making the game feel like it is lagging to the player. This method required that the player's actions (such as spawning new flames) be queued up and then applied to the cellular automata between simulation steps. With this compromise, the simulation feels snappy regardless of how long the simulation takes to run.
Flowers For Dan Dan is a short-form piece of interactive fiction developed for academic research in Unreal Engine 4. I was the primary programmer on the project, which meant I had a wide range of responsibilities to integrate the work of our writer, artist, and level designer into the game itself.
One of the primary goals for this game was to integrate voice recognition, allowing the player to speak aloud the line of dialogue they wanted to say from a list presented to them in the game. To accomplish this, I worked with the Sphinx-UE4 speech recognition plugin and developed an integration between that and an out of the box dialogue plugin. My naive approach to this was simply to allow the player to speak the entire line of dialogue, and once a long enough pause was detected I would compare the spoken line to the different text options and select the one closest to what was said. Unfortunately, this lead to a different option than the one the player being selected frequently as it was simply looking for similarity across a full sentence. To improve this experience, we switched to a method which used a key word or set of key words within a sentence to represent the full statement. As the user spoke, we would check if the each word matched any of these keywords and add any matches to a running tally. We would both use this tally to show a "progress bar" for each sentence, giving the player an indication of what we thought they were saying. But, with this keyword method we could exclude words that were shared between different options or ones that the voice recognition software had a hard time recognizing, leading to a more stable result.
Another goal of this game was to give the characters clear emotional expression during dialogue. My role in this was to develop a system through which we could read markup cues in the dialogue added by our writer and change the animation state of the character as a result. I utilized an event system within the dialogue plugin we were using, updating variables on the character representing their emotions, which were read from the animation blueprint to determine which face to use at any moment.
Along with these two systems, I was responsible for the level scripting for the game and developed a tooltip system to indicate possible interactions to the player. My work on the game was done in both Blueprint and C++.
The game itself is not available to play, but a video demonstrating gameplay can be viewed here:
FIVESPIN is a game I developed in ThreeJS using JavaScript and JQuery. My goal for the project was to develop a 3D Computerized version of the existing board game Pentago. I was the sole developer, and my work on the project involved programming, 3D modelling, and texturing. My main goals for the project were to learn 3d development in ThreeJS and to understand the process of creating 3d models, textures, and materials. To this end I modelled and textured the board, pieces, table, and the 3D UI elements for the game in Blender.
To make the 3d visuals the focus of the game, the player is able to rotate the camera freely around the board. One difficulty this introduced is that all interaction with the game itself had to be done in 3D space. This required ray casting from the screen to the world to determine where the player was attempting to click. For the pieces themselves, they are placed invisibly in each slot on the board at the start of the game to use as a collision box for piece placement. When a piece is selected by the player, its material is swapped out to either the black or white stone material, thus making in visible.
One other interesting element to Pentago, which is part of why I chose to recreate that game, is the fact that different parts of the board rotate independently. Because of this, I needed to implement animations for the rotation of each part of the board and ensure that the stones in the board move appropriately with it, recalculating the position of all the stones in the board after the rotation for the purposes of scoring the game.
Silent Night is an interactive 3D scene I developed to further explore 3D modelling, texturing, and materials after FIVESPIN. It takes place in first person and simply allows you to walk around an abandoned church with magic candles floating all around.
While this project did involve implementing a simple first person character controller in ThreeJS, the majority of the time was spent on modelling and art done in Blender. I modelled the entire church environment including the walls, floor, ceiling, windows, candles, stage, pews, and podium. For those models I created materials including albedo, normal, and specularity maps using Blender's material node system.
Bouncy Hunter is a 2D infinite runner, developed in Construct 2 and released both in the browser and on Android phones in 2014 (though it has since been removed from the play store).
I was the sole programmer and artist on the project, working with a friend who was the writer and designer. As the programmer I was responsible for implementing the character controller, a system for managing parallax scrolling of background layers, a menu system for an in-game store allowing players to purchase new outfits for the main character (using in-game currency), and systems to track the player's high score and number of coins.
One Speck is a 2D interactive experience developed in Unity which can be played in around 5 minutes and explores the theme of isolation. I developed this project as part of Ludum Dare 28 in 2013, and did all development within 48 hours.
The project was someone inspired by Katamari Damacy, specifically with the idea of gathering up objects to form a much larger whole. As such, the primary gameplay involves attaching spheres together and making them move as one large blob. This was all implemented using built-in Unity physics, and the main challenge was performance with that large number of physics objects. To make this functionas, I used a single large sphere for collision that changed size depending on the number of items attached to the player.