zoss/Engine

Zen :: Engine

Zen Engine is a game engine framework.

With it you can create your own custom game engine using custom components have it fully integrated with off-the-shelf libraries and game engine middleware.

Zen Engine is organized in such a way as to allow you to use as much of it or as little of it as you need in order to create your custom game engine. We've made no assumptions about game genre, single player vs multiplayer, etc.

The only assumption we've made is that you want an extremely flexible game engine that stays out of your way and gives you the freedom to innovate.

Usage Patterns - Your Choices

When using Zen Engine, you have a lot of choices on how you can use it.

Full Example Engine

For this usage pattern, take one of the example games and start modifying it to suit your needs. This is most useful if you're doing rapid prototyping or if you don't have any skilled programmers working with you and you simply want to put together a MOD.

If your desired game closely matches the example game, quite likely this is a viable approach, but just remember that the further you deviate, the more likely you're going to run into difficulties.

Personally, I don't like this approach. I think using the example games as examples is good, but I firmly believe it's better to use them as references but start your own game from scratch.

Pros: Quickly get to the point where you can rapidly prototype. Less programming required.

Cons: Harder to deviate from the original intention of the example game.

Base Starter Kit + Genre Starter Kit

If you're making a game of a well-defined genre (RPG, RTS, FPS, etc) and there's a starter kit available for it, this may be your best option.

No starter kits are complete other than Base, so this is currently not a real option. The Zen Worlds MMO RPG Starter Kit is the closest to completion, but quite likely even that will not be complete until the end of 2009.

Base Starter Kit

Using the Base Starter Kit without using any of the Genre kits allows you to be a lot more innovative and not be cramped in a pre-defined "genre" box.

Reference

Another way for you to use Zen Engine is to use it as a reference so you can see yet another implementation of a game engine and take ideas from it and write your own engine from scratch.

While Zen Engine is a good example of a framework, if I were writing a game engine specifically for a game there are many things I would do differently. Instead of going through abstract classes, quite likely I would directly utilize the libraries that I chose for my game.

Pros: Most flexible approach.

Cons: Most time consuming. Cannot contribute back to the community.

Frameworks

Zen Engine is divided into 13 basic components. Zen Core is a useful set of libraries that is used with Zen Engine.

  • Core
    • Event? - Events, futures, etc
    • Math? - 2d and 3d Math library
    • Memory? - Memory manager, garbage collection, referenced counted pointers, etc
    • Plugins - Plugin system
    • Scripting - Scripting framework for integrating script languages.
    • Threading? - Cross platform threading library
    • Utility? - Utility library
  • Engine
    • Cinematics? - Used for creating cinematics and other choreographed situations.
    • Client? (Game Client) - Basic Game Client framework.
    • Core? (Game Common) - Basic Game framework, used by both a game client and server.
    • Input? - Input framework for keyboard, mouse, joystick, etc. user input.
    • Move? (Move Manager) - (For networked game clients to request an object move)
    • Navigation? - A* and other styles of automated navigation.
    • Physics? - Physics framework
    • Rendering? - Rendering framework
    • Resources? - Resource framework for loading objects from files, streams, zip archives, etc.
    • Rules? - Finite state machine for use in game rules.
    • Server? - Game Server framework
    • Sound? - Audio framework
    • Widgets? - GUI Widgets framework

Extensions, Components, Plugins

By itself, the primary library of Zen Engine is not a game engine because it doesn't implement any of the components of a game engine.

The components are implemented in plugins.

These plugins allow you to choose the underlying libraries to implement the components. If a plugin has not been written for the particular library you want to use, or if you want to write the component yourself, you are free to do so. Plugins are relatively easy to implement and we have a large number of examples.

Getting Started

The best way to get started is to download Zen Engine and start playing with it.