Below is a list of the games and technologies I've worked on. Each is accompanied by a short summary of what my responsibilities were.
This was the first title I worked on at Vicarious Visions. I was responsible for developing a graphical tool for editing a graph of rooms used to determine the flow between levels in the game. Each node in the graph would have a pre-determined set of possible connection points for edges to other nodes in the graph. The user was able to visually edit the connections of these nodes in the graph (each representing a screen of gameplay in the game).
I was also involved in the development of the build pipeline (in Jam) used to control how assets were built in order to improve the correctness of the build and reduce build times for users across the projects.
Bee Movie Game
For this project I worked with a game engineer to develop a system for synchronizing the data between the in-house data editing tool and the game at runtime to allow real-time visualization and editing of game assets.
Guitar Hero: On Tour
For this project I primarily worked on plugins for the data-editing tool used for all projects, and assisted in the design of a tool used to streamline the generate of note-tracking data for the songs in the game.
DJ Hero DS (unreleased)
I worked on a UI editing system that could be used to edit visuals both on target (live) and on the PC, as well as an object placement tool that used the same underlying components for level building.
The work done included designing and implementing a flexible, data-agnostic, level editing system - and then adapting it for use in a UI layout tool.
The basic work done here is still being built on today, and forms the basis of the current level-building and UI-building tools available at the company.
Transformers 2: Revenge of the Fallen
Marvel Ultimate Alliance 2
Over the life of the project, I was responsible for a large variety of different tools.
Initially I worked with the audio engineers to create tools for processing, managing and building the sound data for the game.
Afterwards, I assisted the writers in developing a system for generating and updating placeholder audio and text for lines of dialog used in the in-game cutscenes and mission briefings.
After that I began work on a cross-title level editing tool that would eventually be used in multiple titles at the studio. After my initial work I was joined by other tools-team members to continue work on the level editor and expand its functionality to also allow for UI editing.
I was also involved in the evaluation of UI middleware for the project, primarily focusing on determining the scope of the engineering work involved in integrating the products into our game-engine and evaluating the appropriateness of the toolset for our asset creators.
Unreleased Guitar Hero Project
On this project, I continued work on the UI editing tool, primarily focusing on easing the creation, editing, and orginization of scenes. The work included working with game engineers to overcome some of the shortcomings in the original animation system, as well as designing and implementing graphical tools to visualize and edit the UI and animation flow.
Unnanounced Console Title
Nintendo DS Build Systems
One of the first tasks I had at Vicarious Visions was to assist in the overhaul of the build pipeline used for Nintendo DS projects. The existing build system (written in Jam) was showing its age and had been ill suited for the large amount of data-driven builds on the projects. A re-write of the asset (non-code) portion of the pipeline was performed with the goals of 1) increasing correctness (reducing the amount of unecessary clean builds), 2) increasing speed, 3) providing flexibility and allowing more data-driven engine features, and 4) reducing the size of processed assets to efficiently manage the resources available on the platform.
The work involved writing Jam scrips, generating code that would be compiled across multiple phases, and automated analysis of the data to determine the minimum set of assets required for inclusion in the various stages of the game.
This build system was deployed on the Bee Movie and Kung-Fu panda titles, and served as the basis for the build system used in all future DS titles at the company.
Custom C# Build System
Along with one other engineer at Vicarious Visions, in our spare time, I helped to develop a custom build system designed to overcome some of the shortcomings of other publicly available build scripts. I assisted in the design and implementation of a system where build scripts were written in C#, defining the set of tasks that would be performed and the outputs generated. The goals of the system were to provide a readable, easy to debug, performant and flexible build system that could be used to process large number of assets and provide reporting.
The user defines scripts in stand-alone C# source files that examine the data in the game and generate a set of tasks that need to be performed and outputs that need to be generated. The source file is then consumed by the build system that manages the file dependencies and ensures the stages are executed in the correct order.
Some features included:
- Support for both file system and metadata dependencies
- Phased building to guarantee order of tasks
- Customizable number of worker threads and thread managment
- Automatic file-hashing and input set dependencies
- Dynamic task generation based on customizable file-scanners
- Useful error messages and stat-tracking
The build system developed was used for a portion of the asset build system in Marvel Ultimate Alliance 2 and is currently being used in a number of projects at the company.
Data Editing Framework
The framework is written in C# and primarily deals with loading large sets of data from many file-formats so that they can be edited and presented in a consistent way by the designers and artists.
The front-end is highly customizable, and I have developed a large number of User-Interfaces to simplify interaction with the data in both Windows Forms and WPF.
I have also been involved in working on the low-level systems of the framework, as well as on the cross-platform real-time data synchronization system built in.
Automated Error Checking and Correction
A common problem that non-technical users have when working with complicated data for game engines is that there are many unwritten 'rules' about how the data should be structured. There may be particular rules and best practices about how data can be structured that are known only to a few experts in each particular system. This is a problem that we struggle with constantly on the tools team, where users are often working with data for systems they have only limited experience with.
To combat the problem, I came up with a system focused on writing simple blocks of code to automatically check for obscure data errors. The goal of the system is to encode this expert knowledge and provide a simple, friendly way for non-experts to fix any issues that arise.
When a problem is detected the user is informed in an un-obtrusive manner so they can continue with their immediate task. Afterwards, they can examine the list of known issues and initiate automated fixes to resolve them.
The system is designed to be easy to extend, and has met with positive feedback from both engineers and asset creators alike.
Build Status Monitoring
On projects with large numbers of people working together, checkin policies and automated speed can become an issue. The whole team can be effected if someone checks into a code or asset change that breaks the build, but is unaware that they were responsible.
At Vicarious Visions I've been the primary developer and owner of a product designed to monitor the state of the users check-ins, and general build health. The program runs as a tray-icon and informs the user when they have submissions that have not passed the build, who is fixing the build (if it is broken) and a number of quick-reference links to commonly used pages.
The program uses XML-RPC to interact with a custom server that manages retrieving updates from Perforce (our source-control system) and Pulse (our automated build system). This allows the program to scale to large numbers of users, and is currently a required piece of software on all developers machines at Vicarious Visions.