Blood in the Summertime
I spent the early months of 2012 writing my first play, a dark homage to the farces of Wodehouse by way of a murder mystery and the Lovecraftian occult. The roaring twenties are approaching their twilight years, and wide-eyed socialite Montgomery Chippentater is drawn to the country by a summons from an old friend, sexual conquistador turned village priest Smitty Smithson. But even the simplest week's drunk retreat can turn sour when mixed with an alcoholic baroness, a plot to win a lady's love, a bloody midnight sacrifice, and several ounces of gunpowder. If that grabs your interest, consider taking a look at the full script, available online for free (as in beer).
Blood in the Summertime was performed three times over the weekend of June 3, 2012 as part of UC Santa Cruz's yearly Chautauqua festival of student film and theater. The show was directed by David Murakami (who also took the photo on the right), stage managed by Andie Prahbu, and starred in by, from left to right, Cheska Bacaltos, Lily Sorenson, Mekkin Roff, Jacob Vanderville, Brandon Barnes, and Anthony Aguilar.
This 3D game engine was written using the OpenGL Utility Toolkit (GLUT) to create simple games based around physics objects bound to arbitrary 3D planes. The initial spec required an engine capable of supporting a minigolf game, but like all good game engines, the RACE! engine allows many types of games to be built using it, such as the time trial racing demo on the right.
The RACE! engine supports various static and physics-based objects bound to a graph of connected 3D planes. Multiple game states can be loaded and updated at different times, allowing for easy development of menu systems, pause screens, or multiple levels spread across separate game states. Levels and other data can be loaded from text files -- game developers can link keywords in these files to data processing functions in their game initialization code, allowing them to write application-specific data handling without having to touch the engine codebase.
If I have one regret about the RACE! engine, it's that we decided to go with a quick and dirty inheritance model for game object classes rather than a component-based system. Even with the limited scope of this project, the inheritance system was already showing its inflexibility as we encountered the varying functionality sets that different types of game objects would have to contain.
I co-wrote the RACE! engine with my frequent collaborator Rob Giusti. I focused on coding a lot of the 3D vector math that underpins the physics and camera systems (the latter of which I also wrote). I also built a library of graphical and UI helper functions, including a system for building complicated GUI widgets by parenting together multiple simple components.
OldFort Unreal Map
My first real attempt at map design for a 3D game, OldFort is an Unreal Tournament 2008 map designed for free-for-all and team deatchmatch play. Built entirely out of the default assets that ship with the public Unreal Development Kit drop, OldFort is based around a semi-symmetrical level design that features a focus of vertical gameplay, multiple navigation routes, hidden areas and power-ups, Kismet-scripted interactivity, and destructible environmental objects.
Interior Mapping Shader
I spent some time last year studying OpenGL and GLSL shader techniques for a class on computer graphics. During this course I came across the technique known as "interior mapping", described by Joost van Dongen (creator of the gorgeous independent racing game Proun) in this paper.
The technique describes how one can use a fragment shader to approximate the position of evenly-spaced internal planes cast perpendicular to each other throughout a 3D model. By using very simple math, you can estimate which plane is closest to the camera and use it to draw what the "interior" of the model would look like. While this is of little to no use for organic shapes, it can be used as a component of a structure shader to create a pretty convincing estimation of a building's interior for only a constant cost per pixel, perfect for flight simulators and other real-time rendering projects that require an efficient way to add depth to a large cityscape.