Mote

WPI Major Qualifying Project – September, 2009 to June, 2010

iPod Touch, iPhone, iPad

Mote

Official Dev Blog

Summary

Mote is a musical adventure game for the iPhone.  It was created as a Major Qualifying Project for WPI over the span of one academic year by a team of three programmers and two artists.  The player explores a musical dream world as an anthropomorphic whole note named Mote.  Mote influences the emotions and actions of the inhabitants of the dream world through music to solve in-game puzzles and problems.  must navigate through a dream world using music to influence it’s inhabitants.  The game features full voice acting, music, custom animations, and original scenery, as well as a custom game engine complete with level scripting, physics, multi-channel stereo sound, a robust 2D graphics engine, and a complete level editor.

Game Engine Motivation, Design, Implementation and Optimization

Mote was the first Major Qualifying Project from WPI that created and entire game engine from scratch.  As this project was the culmination of the team’s education in game development, we decided to make it as challenging and rewarding as possible.  An academic exercise, no Apple graphics libraries (e.g. CoreGraphics) were used.  Instead we created everything in Objective C and C using the OpenGLES 1.1 and OpenAL libraries in addition to the LUA scripting framework.

The graphics engine was designed with 3 2d planes of sprites called “render layers.”  Each render layer represented one aspect of creating a full game scene.  The background render layer creates the backdrop for the scene, holding environmental assets like grass and dirt textures.  The animation render layer is composed of all character avatars (NPC, Mote, etc…) and is rendered directly in front of the background render layer. Finally, the foreground render layer provides additional environmental art that creates an illusion of depth.  The foreground render layer is rendered on top of the background and avatar render layers, and consists of tree foliage, tall grass, and other assets the player should be able to walk behind.

Engine Features

  • General
    • Object-oriented, state-machine-based game structure
    • LUA level scripting with customizable hooks
    • Asset pre-loading
  • Graphics Engine
    • 2D sprite-based
    • Completely written in OpenGLES 1.1 for both performance and accessibility
    • Fully animated sprites, with customizable animation sequences (define tweens, etc…)
    • Texture instancing (prevents a texture from being in GPU memory twice)
    • Occlusion culling
    • Robust sprite-based particle system.
    • Bitmap-based, paginated dialog system
  • Sound Engine
    • Support for up to 32 concurrent sound effects
    • Hardware-accelerated decoding and playback
  • Level Editor
    • Custom-made standalone application
    • Visual drag-and-drop interface (designer and artist friendly! :D )
    • Edit sprite pallet, render layers, and collision walls
    • Exports directly to the game
  • Physics
    • Customizable grid-based collision
    • 6 unique collision wall types
    • Soft collisions between avatars
  • Scripting
    • Level triggers, actions and dialog fully scripted in LUA
    • Customizable triggers, callback functions, and game hooks
    • Multiple script support (one per level)

My Role and Lessons Learned

I played a significant role in the game engine design and implementation.  The aspects that are exclusively my work include the graphics engine (design, implementation, performance benchmarking and optimization), musical gameplay mechanic design and implementation, and overall engine engine architecture design.  I also played a significant role in LUA scripting integration, and sound engine design.  Additionally, I composed, performed, and recorded the music assets used in the game.  This project was monumentally educational for me.  This project forced me to rapidly learn a complex, industry-standard software library (OpenGLES 1.1) with little prior experience.  The scope of this project tested both my project management and team management skills.  Weekly milestones along with other Agile development practices helped keep the team on track and coordinated.  Finally, scientifically analyzing the performance of the graphics engine helped me better understand how to evaluate my work, and how to create a highly-optimized graphics pipeline.

  1. No comments yet.

  1. No trackbacks yet.

Powered by WP Hashcash