I just received my Master's Degree at the University of Utah Entertainment Arts & Engineering program, where I'm focused on gameplay design and programming. I've taken courses in rapid prototyping, paper prototyping, level design, and engineering. I've even made on my own little engine in my engineering courses.
Now, you can usually find me either coding away at my computer on some independent project or possibly just playing a game. Some of the projects I'll work on will just be small little things. Since I'm so interested in gameplay, I love to create small little mechanical prototypes, just to test out new gameplay and challenge myself with new tasks, but not all of them remain small. Tess, for instance, was a 5 month long endeavor culminating in a 15 minute long prototype that featured not only gameplay but even some level design and world building.
I'm a gameplay programmer. I make things move.
Skyreach is a driving game where the player must build their track and drive it simultaneously. The project was created in Unity with a team of 15 and is currently on Steam, free to download. This project was a student project, serving as our team's thesis game for our master's degree.
I acted as our lead engineer, helping a team of 4 other engineers. Like most leads, I had to meet with our designers to make sure everything they wanted was possible, as well as our lead producer to make sure everything fell into an acceptable timeline. I also got to run around like a chicken with my head cut off trying to help my engineers with any problems they encountered. Ok, it wasn't that chaotic.
Of course, being the lead didn't just mean I had to communicate with my engineers. I was able to get some actual engineering in as well. I created a track system for our camera to follow. I created a trigger system so that any number of conditions could trigger events scattered throughout the level (I heard you like dominoes). I also helped refine the camera system that our car engineer worked on so that it would more smoothly follow the car. I even got to work on the track system itself, helping our track engineer with the dynamic laying and connecting of track pieces at run time. For this project, I definitely did have my own systems, but there were many times when I felt like I was a helper, creating tools for our designers or just helping our engineers with whatever problems they encountered.
I also acted as our team's technical designer. With my focus on gameplay programming and my keen sense of gameplay design, I was able to work with our level designers to come up with new game mechanics that would affect our player's experience with the level. I implemented a simple yet powerful trigger system that would trigger all kinds of events, such as pillars falling down or boulders rolling off a cliff to crush you. The system even allowed for a domino effect, creating a fun environment full of obstacles for the player to avoid while driving.
The joy of being on a small team is that you get to wear many hats. I wasn't just our lead engineer or technical designer. I also acted as an animator, having scripted our car's animations and when to play them, as well as one of our level designers, fixing and rebalancing our levels so that they would be fun and challenging while keeping the general idea of the level the same.
To find out more, you can go to rainbowgoats.com.
Tess is a four dimensional action-adventure game where the player faces not only three dimensional problems, but four. The player must venture across a 4 dimensional terrain, fighting enemies she can't see, and escaping a world like no other.
Tess acted as a side project of mine. It originally started out as a simple thought experiment, similar to that of the book Flat World. In Flat World, a two dimensional object learns about the third dimension. As a two dimensional object, the protagonist would never have known of such a dimension, only knowing about the parts of the three dimensional world that intersected with his own. What if I made a game with a similar concept but instead of dealing with two dimensional cross-sections of a three dimensional world, what if we went up a dimension? Tess allows the player to traverse a seemingly 3D world, but as she explores, the world will change. She will have to travel across four dimensions, changing not only what she sees, but what she can interact with.
When I was working on Tess, I had to overcome a multitude of problems, both for programming and design. I was able to create a system where objects could undergo transformations. Where in the transformation an object was depended on where the player was in the fourth dimension. At one point, an object could look like a large cube, but if the player moves through 4D, that cube might shrink down to a point and then disappear. It'd be like travelling through a pyramid, where one end is a square but it shrinks down to nothing on the other end. Now imagine that this isn't just one object transforming but all objects. Entire rooms can change shape, opening new paths. Designing these rooms was quite a challenge but an insanely fun one at that. One method was to create two separate rooms and then just place one ontop of the other. Even better, because we were in four dimensions, I could have two entirely separate rooms ontop of one another in 3D, but in game, they're separate rooms entirely.
The game features many different mechanics, each interacting with one another. The central idea is to allow the player to be both three dimensional and four dimensional at once. I created a visor that allows the player to look through 4D, looking at the same 3D area, but changing where in 4D they were looking. This visor became my core mechanic, as all other player mechanics worked off of it. With the visor, the player can shoot objects not there in the normal three dimensions but might exist somewhere else in 4D. The player can control where the grapple beam moves her. With it off, it functions like a normal 3D grapple beam, but with it on, she can propel herself through four dimensions, taking her to new locations, allowing her to solve new puzzles. This visor quickly became what my game focused on. With it off, you interact with the normal 3D world, but with it on, you can literally enter a new dimension.
If you want to download a build of the game, you can do so at tess4d.com.
Flopter is a game where the player must tap the space bar to maintain a helicopter's height while also moving around the screen to avoid oncoming mines. The game was made in C++ using a custom engine built in C++ as the final project for my game engineering course.
The course was designed to teach us about game engine architecture and how to build for multiple platforms. To accomplish this, we looked at the rendering pipeline, making builds throughout the semester for both Direct3D and OpenGL. Each week, we expanded on the rendering system, further enhancing what was allowed. Throughout the semester, we created our own custom formats for meshes, effects, and materials. We built tools that would take human-readable files and create binary files for our engine to load. We then created systems for our engine to load these binary files. We even created a plug-in for Maya that would export a mesh into our custom mesh format.
The game I ended up created was a simple game that took user input to move a helicopter around. I even created a custom shader for the water so that it would have wave-like motion. Currently, I'm still working on my engine in another engineering course. The game is no longer the same, but the engine is now much more powerful, with spatial partitioning, increased collision functionality, and increased game logic.
To find out more about my engine and the game, Flopter, you can go to the game's site.
Avatar IVR is a medical mobile application created in Unity designed to provide cancer treatment patients with a personalized character to guide them throughout their recovery process. It monitors the patient and any symptoms or side effects they may be suffereng, as well as alert the patient's clinician in the event that the patient's symptoms were too severe and must be treated. It will also coach the patient on ways they can improve their quality of life. This application was build at the Gapp Lab in collaboration with the University of Utah Hospital.
As the sole engineer on this project, I had to accomplish many things to get the game up and running. The game has two parts: avatar creation and a choose-your-own-adventure-styled question/answer section. For the avatar creation, I eventually settled on a simple system where the artist gave us sets of avatars. We would deconstruct them and then allow the player to piece them together to form an avatar. The dialogue system was a much more complicated endeavor. Our partners came to us with a large script filled with pseudocode that they had used for a phone system. We were tasked with modernizing it as an application for mobile phones. In order to make the process easier on ourselves and on them, I created a backend tool, Betwined, that would allow users to create questions and answers in a flow chart, as well as basic logic, arithmetic, and variable usage. My task for Avatar IVR was to create a parser for the Betwined scripting language. I'll talk more about Betwined below.
Betwined is a backend data creator for the Avatar IVR project. Like Avatar IVR, it's created in Unity using C#. It allows the user to create various nodes and connect them in order to create a choose-your-own-adventure-styled game. Betwined will then export this data into an XML that can be read into a game and parsed, allowing the game to be entirely data driven. While I did not need to create Betwined for the Avatar IVR project, I felt that it would speed development and allow for quick iterations and updates on the script, as well as allow our producer to create the script in Betwined while I would work on other tasks.
Betwined was a large undertaking to say the least. It allows for the user to create simple question-answer dialogue choices or more advanced logic. If a player is given 3 choices, which answer they choose can lead them to different questions and scenarios. The user of Betwined needed to be able to see this graphically on the screen. This wasn't too complicated as everything can be kept in a list and every question can maintain their own list. Where Betwined gets complicated but powerful is with the logic-support. Betwined also features Code Nodes that follow every answer. The Code Nodes contain logic to help run the game. It can be as simple as saying which question an answer should connect to or to exit the application when an answer is selected, but it can be much more complicated, supporting predicate logic and basic arithmetic, as well as creating and maintaining variables. In an application like Avatar IVR that runs using a Betwined script, these variables are stored in a C# dictionary and the logic is parsed and then handled through C#. One of the more interesting features of Betwined would be the Actions. Actions are user-defined methods that are defined from within the application that a Betwined script can call. For instance, if you wanted an NPC to jump, you would create an action called Jump that would cause an NPC to jump. You could then call the action Jump from within the Betwined script. This functionality really allows the user to do anything they wanted, not just what's predefined in Betwined.
Titan: Dawn is a game I am currently working on for the studio Viewpoint Games as a programmer and designer. It is a nostalgic blend of classic RPG gameplay and exciting, fast paced action, creating a player experience like those found in our favorite games of old. Presented in a 3D isometric world, the game draws on essential elements from some of the greatest games of the past and enforces the importance of quality storytelling and engaging participation.
My work on Titan: Dawn has been exhilarating and enlightening. I was brought on as an extra programmer but my design skills later proved useful. I've been able to bring my math skills to the table by creating various easing functions for their camera work, while also streamlining their cutscene system so that creating a new cutscene takes only half the time use to. I've improved the gameplay and added excitement with my work on their enemy AI, creating a new behavior system that would drive an enemy's movement choice and attack choice. I've also helped create the AI for some of the game's bosses, while also redesigning parts of the fights so that any player will have fun going about the boss in different ways. I've thoroughly enjoyed working on Titan: Dawn and can't wait to see the game released.