The aim of the project is to create a general purpose C++ game engine that I will use in the future for some games. Its name for now is Tato Engine (codename TatoProject) but may probably change.
The design I am implementing is to create a kind of middleware between more low-level libraries (such as Irrlicht) and game-specific code.
The game-specific code uses high-level API provided by the engine. These API abstract the high-level features requested safely. They will do checks and sanitizations, so that the C++ critical code will be generalized and *always* working, while in the upper implementation I can focus on the creative part of developing without get too much pain if I do a mistake. The engine will not assume anything, and there is no game content 'hard-coded' in the middle engine.
The game specific code is written in two ways:
- Entities, scenes and things are written in a fast declarative language I written for this engine. I called it TatoScript (thought is not a scripting language, but is more like json or XML). Below you can see for example an implementation of a simple box in TatoScript:
Code: Select all
# simple_box.tob
# Lines starting with '#' are commented
DESCRIPTION: a simple box
# The various models associated with the object
MODEL(
# values valid for all the models
default(
TYPE: MODEL3D
FILE: box.obj
DINAMIC LIGHTING: true
)
# the model used as default
DEFAULT MODEL: red model
# all the models
red model(
TEXTURE: red texture.bmp
)
blue model(
TEXTURE: blue texture.bmp
)
)
# Physic engine context
PHYSIC(
MASS: 40
BOX(
SIZE[
3
5
2
]
)
)
# Triggers for the event based interface with other objects
TRIGGERS(
hit by entity: on_hit.lua
temperatue rise: explode.lua
)
As external libraries I use:
- Irrlicht for the graphic part
- Open Dynamic Engine for the collision and physical part
- LuaBridge for the C++/Lua binding (all the game specific code is written in TatoScript and Lua)
- IrrKlang/OpenAL/SDL2 (still to be decided and implemented) for the Audio part
This game engine is still is his early days, I'll keep you updated!
EDIT: I'll put some screenshot tomorrow maybe.