A browser-based multiplayer Reddit-integrated RPG engine. The engine was built from scratch using a WebGL graphics library (PIXI.js) and Node.js. The project includes an asset compiler that generates spritesheets from 3D voxel models, random map generation using perlin noise, a server backend using websockets for communication, an in-game map editor, a dynamically updating pathfinding system for NPC movement, account data storage using Amazon S3, and Reddit account integration.
Data visualization of the Erowid Experience Vaults, a site with over 23,000 drug experience reports. Project included writing a scraper that programmatically performed searches of the Erowid database to amass the data I needed. The visualization shows correlations between the various categories reports are filed under in order to reveal relationships between drugs, types of experiences, contexts in which they're used, intensity of the experiences, and the gender of the user.
A Room Too Far is a 4-player cooperative dungeon crawler on an arcade machine, where players work together to defeat user-generated dungeons created via a level editor on our website. It's my senior project in the Computer Science: Computer Game Design major, being developed by a 9-person programming team and a slew of artists and other contributors. My main role has been the design and implementation of the front-end side of the level editor. My other tasks include the UI functionality across much the game, and a few chunks of the gameplay side, including the loot system, camera system, and some game feel features.
3D lunar lander-type game, in which the player controls a spacecraft designed for landing on alien planets. The game contains 6 levels, each one with its own theme and unique task. Levels include boss fights using wrecking balls, rock-transporting mining tasks, and flying through a series of beacons. Experimented with rope simulation (via a joint system), breakaway parts, events, and navigation systems.
Two-player deathmatch style game, using a voxel map as the playspace. Players have destruction and construction weapons, which are used to alternately destroy and construct terrain in various patterns, as well as to hurt the other player. The voxel framework was coded using this online tutorial. Gained experienced with animation timing, minimap functionality, and, of course, voxel systems. Using what I learned about them, I later created my own rhombic dodecahedral voxel system, which can be seen in the Other Projects section.
Created mainly as a joke to make my friends laugh, this is Sonic the Hedgehog-themed, nostalgia-inducing multiplayer experience. Using a networking framework called Photon and a large amount of assets ripped from classic console games, I implemented a pseudo-MMO (pseudo because there's no server storing player data). Despite being a joke project, I ended up learning a lot about multiplayer networking from it, and the fundamental differences between coding for a single-player game, and coding for a multiplayer online game. Programming challenges included creating a chat system, syncing each player's game world via RPCs, and storing player data (in this case, in the host's client).
First game ever created. Written in an introductory game design course. Hard-coded in JavaScript. Might want to turn down volume before playing.
Experiment with a size-changing mechanic, where you play as an Alice in Wonderland type character that can adjust her scale to explore the environment. Messed around with the concept of traversing gamespace through changes in scale rather than through changes in position. Experimented with cel-shading, shadows, and performance optimizations.
A project done in a class called Game AI. It's an implementation of decision tree-based AI for StarCraft: Brood War. The project uses an injection program called BWAPI, which allows custom scripts to modify unit behavior in-game. Our code causes 3 Terran Vultures to disable a large Zerg base using kiting tactics. The vultures perform checks around themselves and either attack or flee, depending on the density of zerglings nearby, and the availability of escape routes.
Created a system that can generate fractals using an L-system at runtime. The algorithm uses a depth-first strategy to generate the fractal in chunks and then render the chunks in sequence, avoiding the problem of generating large fractals all at once, which can take up to several minutes. The initial intent was to make a game where the environments are fractal in nature, as seen in videos like this. The next step in this project will either be adding a 3rd dimension in order to create a 3D fractal world, or attempting to turn this into a 2D infinite runner where an ever-generating fractal is the ground.
Implementation of a limb movement system for a humanoid ragdoll, which causes it to "dance" around. Certain body parts move in response to changes in the position of certain other body parts, while joints flex to generate a dancing-type motion. Inspired by evolutionary algorithms that generate bipedal locomotion.
A modeling of planetary orbit. Uses an addForce function, in conjunction with an initial velocity, in order to generate orbit. Many variables are modifiable via the user interface on the sides of the game screen. Began as an attempt to see how orbital paths gradually change in response the gravitational pull of other orbiting bodies. See n-body problem.
First attempt at procedural generation. The bees all follow a leader bee, which is invisible. If a follower collides with another, it does a speed check, changing its leader to who it collided with if it's moving slower than it. This eventually creates a serpent-like shape in the swarm. Different combinations of checks and behaviors lead to various other interesting swarm shapes. Created during a period when I was obsessed with crowd simulations like the one seen here.
Project made in an Android programming class. It's a workout assistant for gym-goers. My major contribution was a script that uses the inbuilt accelerometer to detect reptitions of an exercise, so the user can strap the phone to one of their limbs, press start, and let the app count reps for them.
Created a voxel system that tesselates rhombic dodecahedrons instead of cubes, creating a rhombic dodecahedral honeycomb. Each solid is manually generated with verts and tris. Faces inside the terrain are deleted so that the entire plot is a single airtight mesh. I chose rhombic dodecahedrons as the shape just to give myself to a tough problem to solve. In retrospect, it's about the worst shape for a voxel system. Walking on them looks painful.
Playing with cameras, culling, and filters. Attempt at simulating lateralization of brain function in a sort of artistic manner, by having each side of the screen correspond to an eye, and using filtering to make them see the world in different ways.
Pitch for a VR/trampoline hybrid game. Nothing could go wrong here.