Heroes of Dragon Age is a mobile, 3D squad-based battle and collecting free-to-play game. It features a realistic graphical style, single and multiplayer modes, and dozens of collectable characters. The battle scenes are automatic, so the strategy comes from who you put in your squad and where they are positioned.
After Dungeon Keeper was canceled, we began work on our second 3D game using the Unity engine. Instead of relying on Unity's state management systems, we built our own using a finite state machine (FSM) model. We also dealt with the huge GUI complexities by utilizing a formal Model View View Model (MVVM) approach. In the end, it proved a bit limiting, so I scaled some of that back. The 2D GUI was built with iGUI. I wrote several supporting classes to give us important adaptive control over the GUI layout. With these we could make the size of buttons and other screen items sized relative to actual human finger size, rather than a specific pixel or percentage measurement. I also implemented simple Flexbox and Grid layouts.
Because of limited C# reflection implementations on iOS, some fairly repetative code had to be written and maintained as separate code. To help mitigate this issue, I constructed three tools that would generate code for us. Our Domain Objects, View Models (when we had them), and Remote Proceedure Call (RPC) support classes were all auto-generated, with provisions made to allow for extension.
I mostly worked on cross-cutting code because of my position building the GUIs and maintaining the game state FSM. As a result, I also made it one of my goals to oversee the overall code quality and architecture, trying to make sure we were building maintainable code.
I left Electronic Arts to join Ciere Consulting while the game was reaching the final production and polish stages of development. At the time of writing, Heroes of Dragon Age has soft-launched in Canada and a full world-wide release should occur before the end of 2013.
- Maintained and improved overarching finite state machine for dealing with game modes (screens)
- Built most of the 2D GUI
- Built custom GUI elements and supporting code
- Wrote interface code to simplify the interaction of GUI and game code
- Wrote tool for generating Domain Objects
- Wrote tool for generating Remote Proceedure Call wrappers
- Wrote tool for generating View Model classes
- Supported the build process and code management
- Implemented the health indicator circles at the feet of each character
- Other odds and ends