
Platforms: iOS, Android, Windows
Links: None
For the last two years Tag has been working on it’s own C++ game engine called MoFlow. Although the engine is still quite young is is now quite an impressive piece of tech. Built with modularity, extensibility and cross platform development in mind, the engine is perfect for mobile development. The engine has impressive, optimised support for both 2D and 3D game development and has already been used to develop several titles.
For the last year most of my time at Tag has been spent working on MoFlow. I’ve now contributed quite a lot to the engine, working on features such as android support, animation and many smaller features. I’ve also developed a variety of tools for use along side the engine.
Android Support
Probably the biggest feature I’ve added to MoFlow is support for the Android platform. Android applications are primarily written in Java so this was no trivial task. Fortunately Google have provided the Native Development Kit(The NDK) for building android native libraries. These can then be called from java using the Java Native Interface(JNI).
The biggest problems encountered while working on this were to do with the NDKs shortcomings and bugs, and debugging. The NDK is now quite stable and feature complete however when I was first adding Android support this was not the case. The lack of full C++ , RTTI, exceptions and wide string support caused quite a few problems early on until we found the Crystax NDK. Although we now use the official NDK, we relied on Crystax until NDK r7 came out. We also had a lot of trouble getting useful debugging working but we now have building and debugging working integrated into Eclipse.
Models and Animation
Another major contribution to MoFlow I’ve made is the design and implementation of the model and skinned animation systems. I designed the model format, called MoModel, for fast model loading and extensibility. To insure model loading is as fast as possible, the vertex and index data is laid out prepared to be loaded straight into MoFlow Mesh Buffer with no parsing. The format also contains a feature and vertex format header to describe what the model contains. More vertex information and features can therefore be added to the format without breaking older models.
I have designed the full skinned animation system however only the basics have been implemented: models can have a single animation applied to it. Animations are performed on the GPU for performance and again animation data is loaded with as little data parsing as possible. We plan on adding support for animation blending, fading and other features soon.
Tools
For use alongside the engine, I’ve also developed a handful of tool. These include converters from Collada to MoModel and MoAnim, A converter for turning MoModels into Bullet collision meshes and a PNG alpha pre-multiplier. These are all written in Java and work cross-platform.
