AI racers navigate by targetting waypoints that are generated from track spline data. The waypoint generator is robust enough to handle branching tracks, gaps, and surface regions (regeneration zones, dirt patches, etc.). The player can face off against multiple AI racers at various difficulty levels to earn medals and unlock new tracks.
The multiplayer system allows players to gather together in Steam matchmaking lobbies or by connecting to a dedicated server on the server browser. The Steamworks networking API is used to send data across the internet. Player motion is smoothed using techniques similar to Source engine's snapshot interpolation. Input prediction is used to minimize input lag and keep the client and server in sync. Network packets are also compressed using delta compression to save on network bandwidth.
The rankings system uses a PHP/MySQL back-end. When a player completes a track, their time and replay is automatically uploaded to a database. Other players can watch or directly compete with replay ghosts from the database. The rankings UI is designed to support mouse, keyboard and controller input. The UI also supports record filtering and infinite scrolling.
The level editor uses a custom UI system that automatically generates fields for selected objects using C# Reflection. This system scans property attributes and then generates an appropriate field for the property's type. Property changes happen in real time and can be undone/redone.
Turbo Force gives track creators the option to import assets from 3D modelling software by using the glTF file format. This tool supports animations, collision data, and DDS texture importing. Imported assets are reference counted in order to re-use resources and save memory.
BSP Convert is a C# library that completely automates the conversion of Quake 3 Arena maps into Momentum Mod (Source engine). In order to make this tool, I had to understand the BSP file formats used in Quake 3 and Source engine by creating a BSP Debugger/Visualizer. This tool makes it possible to play the enormous collection of 18,000+ Quake 3 Defrag maps instantly in the Source engine.
These tools were made for converting charts from StepMania to Rhythm Horizon and for randomly generating charts for Rhythm Horizon. While StepMania files are open source and easy to parse, the Rhythm Horizon file formats had to be reverse engineered by analysing the game's binary files.
These tools were written with test driven development and SOLID principles in mind. The project structure decouples UI from file parsing and converting, allowing for multiple front end implementations. I plan on implementing a front end once Rhythm Horizon leaves open beta and has a full release.
A track/collisions editor was made for F-Zero GX using Unity. Game files had to be extracted, decompressed, and reverse engineered using various techniques to analyse the binary data. The editor parses the binary information and allows modders to edit values and save them back into the game's binary format.
The cooperative game mode allows players to play Half-Life 2 based maps cooperatively in Garry's Mod. The server has hundreds of maps, many of which had to be modified in order to be compatible with Garry's Mod.
This is a SourceMod plugin which attempts to mimic the air strafe physics of Quake 3 Arena.
This editor uses a 3D path deformation algorithm to reshape an arbitrary mesh along a path, such as a Bézier curve. OpenGL is used for 3D rendering and Assimp is used for importing meshes from external modeling tools. This tool can be used to quickly and easily create complex 3D objects such as roller coasters and race tracks.
For this project, I coded a Java service that allows short answer questions to be graded nearly instantly. This was done using Apache Hadoop Distributed File System (HDFS) to share grader files among nodes in a server cluster and Apache Zookeeper to route and load balance requests. Additionally, sockets were used to communicate between a master node and worker nodes in a hierarchical fashion. The master node handles all incoming requests from a web app and then routes the requests to be graded on a worker node with the lowest traffic.