Ash is a high-performance entity system framework for game development.

An entity system is a way to organise the code for a game that is efficient for both code execution and code management. It uses composition rather than inheritance for sharing features between game objects and uses a data-oriented approach to separate the game state from the game logic. This makes it much easier to manage the code and to manage the game state.

Ash is a small library that provides the core classes that you need to create your game with this more productive and performant architecture. Ash is designed specifically for games, focusing on the features of games that make them hard to manage and simplifying them. The entity system architecture used in Ash is explained in these articles.

Ash is prescriptive of the architecture for your code, but of nothing else. Your game may be 2d or 3d, using any render pipeline, physics engine etc. and compiled for any platform.


SOURCE CODE

Ash is written in Actionscript 3 but the principles behind its architecture may be applied in many other programming languages. Developers have already started porting it to C#, Javascript, Haxe and Objective-C.

The source code for Ash is available on Github and is released under the MIT license. That means that you can do what you wish with the code, but you must retain the original license, including the copyright notice, when distributing the source code as code or as a precompiled library. There is no requirement to mention Ash in your game but some developers do choose to credit Ash in their finished game, which is nice.

Visit the Github repository.


DEPENDENCIES

No libraries are required for using Ash. But Ash includes extensions for optional integration with


JOINING IN

We have a Google group for discussing Ash where we discuss the project, how to develop it further and how best to use it.

The Google group is the best place to ask questions and raise feature requests. If you have found a bug then please either raise it in the group or create an issue in Github's issue tracker.

If you want to know when we add features to Ash, please watch the project on Github, join the Google group or follow me on Twitter.

If you want to contribute to Ash, please join us in the group and discuss what needs doing, and fork the project and start contributing. I'm happy to receive pull requests for small improvements and bug-fixes. For larger changes and additions it's best to start a conversation in the group before you spend too long on your idea so we can coordinate.

The following ports of Ash have been or are being developed. These ports are not certified to be complete ports of Ash or to be production ready, they are here for information and to encourage involvement by others who would like to see Ash ported to their own favourite language/environment.


ARTICLES & TUTORIALS

What is an entity system framework for game development? by Richard Lord
I explain the architecture of Ash and why it is beneficial to game development.
Why use an entity system framework for game development? by Richard Lord
I describe some of the specific benefits of the architecture of Ash.
Finite state machines with Ash entity system framework by Richard Lord
I explain how to create and use finite state machines in Ash.
Games And Entity Systems by Shaun Smith
Shaun, the creator of Robotlegs, describes his experience using Ash.
An experiment with Ash framework by Ilham Abiyasa Suhardi
Abiyasa goes in search of a game engine and finds Ash, then modifies the Asteroids example to allow switching between different render mechanisms.
Entity Systems are the future of MMOG development by Adam Martin
Adam discusses entity system architecture from the point of view of massively multi-player online games.
Samphire by Tom Davies
Tom demonstrates why he thinks entity systems are the future, with a simple game and level editor developed with Ember.
Tinkering with Ash by Mike Cann
Mike's first impressions from working with Ash.
Entity component system : Component tips by James Wrightson
In which James gives some useful tips on choosing and designing the components for your game.

The class documentation for Ash is available here.


EXAMPLES

All these examples have full source code.

Asteroids
Created to demonstrate how Ash works.
Ashteroids
Based on the previous example, lets you chose between different render systems at run-time.
Invawayders
Created by AwayMedia, this game uses Ash with Away3d. The finished game is available on iOS and Android.
They were 11 Clones
A game prototype, developed with Ash, Away3D and Starling.
Haxe Dungeons
Created with the Haxe port mentioned above.
Mike's 3 game challenge
Mike Cann made three game prototypes in one month, all with Ash and Starling.

Ash is built by Richard Lord
and is developed using FDT.

Supported by FDT