Orx is an open source, portable, lightweight, plugin-based, data-driven and extremely easy to use 2D-oriented game engine.
It has been created to allow fast creation of games and prototypes. It's licensed under the zlib license. It's a very permissive (and short) license that allows one to use orx (and modify it at will) for free for any kind of projects, freeware or commercial, without any compensation.
Orx provides a complete framework for game development and currently runs on windows (mingw and native using visual studio), linux (x86/x86_64), MacOS X (ppc/x86), iPhone/iPod Touch/iPad and Android.
Orx is a full featured and powerful "2.5D" game engine. All objects and cameras are created in a 3D space, but only a 2D rendering plugin is currently available (however hooks are provided for those who need to roll out their own 3D rendering).
Here is a list of its main "common" features:
- extremely easy to use: all objects have simple accessors that allow you to change all properties in one line of code (graphic, animation, sound, physics, visual FX, and much more)
- powerful config system that makes orx data-driven and provides an easy to use load/save system
- 3D accelerated rendering using OpenGL on computers and OpenGL ES 1.1 / OpenGL ES 2.0 on mobile platforms
- automatic sprite rendering allowing: translations, anisotropic scale, rotation, transparency (alpha blending), coloring, tiling and mirroring
- camera/viewport system allowing multiple views on one screen with camera translation, zoom and rotation
- support of realtime rendering to texture and texture manipulation
- sound and music handling where you can tweak volume and pitch
- collision handling and rigid body physics with joint support
- generic input system that abstracts keyboard, joystick and mouse inputs
- powerful localization module
- easy to use animation system
- text support (objects can use texture or text as graphic data)
- easy screenshot capture system (saves to png, jpg, tga, bmp or dds)
- event management
- being data-driven means you only need to write one line of code to create a full featured object, as all of its properties can be defined through config files and changed without any need to recompile. For example, you can add graphics, collision and physics on an object without having to write a single line of code for it!
- powerful configuration system, featuring inheritance, direct random control and history reload, allowing you to tweak almost everything without having to change a single line of your code
And also more unusual and powerful features:
- clock system allowing you to keep time consistency everywhere and, more important, giving you the ability of doing local or global time stretching. Slowing down (or speeding up) time for a bunch of monsters or your background music has never been easier!
- animation chaining graph: you define in the config files all possible transitions for your characters, and you simply have to ask the animation you want to play without having to bother with the current running animation and all the chaining. For example, if you want to run, in your code you simply need to ask for the run animation and the engine will take car of all transitions for you, using the graph you defined in the config files. Your character was walking? Then he'll go directly to the run animation. Was it lying down? It'll first get up, then start running without having you to write all the code needed.
- custom animation events: allows easy synchronization with parts of animations
- all of your game objects have 3D hierarchical positions, meaning that you can easily make groups of objects and move, rotate and/or scale all of them at once
- visual FX: you define, as usual in config files, curves based on sine, sawtooth or linear shape and you can combine them into complex effects that can be applied on object color, alpha, position, translation or rotation. This is very handy for all the hit, fade in, fade out or even more complex eye-candy visual effects.
- Differential scrolling upon request with an unlimited number of planes. Having objects scroll with different speed matching their depth from the camera is more than simple: you merely need to add one property in your config file telling that the object will use differential scrolling or even that it should scale relatively to its depth for a full 2.D rendering!
- Unified fragment (pixel) shader support
- On-the-fly sound recording/processing
- Custom truetype font exporter
- Real time CPU profiler
Its architecture is plugin based, which means that you can easily port it to new platforms and extend/customize it easily with your own plugins.
It can't be stressed enough: orx's main purpose is to allow fast and easy development and prototyping. Tasks such as creating a full differential scrolling sky filled with random sized and colored stars or clouds requires only 2 lines of code in itself and less than 10 lines of config (.ini file).
For more information about these features and a lot of others please have a look at the wiki (including the tutorials) or even at its doxygen documentation.
Orx is mostly written in C (with some plugins in C++/Obj-C) but allows you to develop with it with any language that can interface to C (like C++ or Objective-C for example).
For any information or question, feel free to use the forum.