There's two things I wanted to talk about today. First, we've never really given you a high level list of everything the engine does for us. Allow me to enlighten you...
* A fully integrated level editor - Includes tools for placing, rotating, and scaling objects as well as placing world geometry, physics joints, and more
* Component based objects system - Objects comprised of Gibs (as in "instagib", where a guy explodes into a bunch of little pieces or "gibs")
* Physics based gameplay - Currently using Box2d
* Custom scripted objects and levels using Lua
* N levels of parallax support
* Cross platform - Runs on Windows and Linux. OSX is currently under development
* 2d Animation system
* Internal Event system within the engine - Instances of C++ objects can subscribe/unsubscribe for event callbacks
* Custom 2d Lighting system
* Positional sound support - Currently uses the OpenAL
* ...and more...
Secondly, I've had a lot of questions about our Game Objects and Gibs. Let me describe to you a little bit more about how we create objects for the game...
We use a component based object system, and we call our components "Gibs". I won't go into detail about the pros and cons of a component based object system right now, but instead I'll describe what we love about ours.
The engine has a few built in gibs which support adding animations, sprites, physics, or scripts to a game object. New game-specific gibs can be created outside of the engine code and registered with the engine before the main loop starts. This allows game programmers to create new C++ gibs which add their game specific functionality. For Snapshot, we take advantage of this to create specific types of objects and to set up our player specific code to the object representing the player. When an object is first constructed, it traverses through the data for the object, which typically is pulled from a GO file or level file. In addition to adding gibs during creation time, the engine supports adding and removing gibs to an object at runtime. Multiple gibs of the same type can also be added to a single game object. For example, a game object can have N number of sprites or physics components added to it, allowing it to interact with the world in a new an interesting way.
Finally, through the use of the script gib, the engine allows Lua scripts to be tied to any object. Objects with a Lua script receive callbacks when the object is updating, being created or destroyed, when physics gibs attached to the same object receive contact callbacks, and at many other times.
We're going to continue publishing videos showing off what decisions we've made with our tech along the way. If you have any questions about how any of our tech was written, feel free to jump into our Live Chat!