Making a trivial ES … is almost trivially easy, once you know how. But usually it’s too trivial to be used in anything except small indie projects, and nothing too real-time.
Making a production-quality one, including all the associated tools, suitable for a AAA game project … is a massive undertaking.
Somewhere in-between, I hope there’s a low-cost middle ground where some of you reading this blog would like to collaborate to make + publish complete, working, documented, OPEN SOURCE, Entity Systems.
Yes?
First questions (there will be more blog posts later):
- Do you have a fully working ES?
- Is it live in a game or app? (i.e. launched)
- Can you / will you / have you open-sourced it?
EDIT: there’s now a bunch of source examples here: http://entity-systems.wikidot.com/es-approaches
6 replies on “Have you made a Data/Entity System? Will you share source?”
I’m actually doing one as my final assigment in Computer Science. In fact, I read your blog because of ES. I’m willing to publish it open-source (I already have a svn at googlecode, but it’s empty).
As soon as I feel it is working, I’ll post it somewhere. I have a draft game, based on Eufloria, I use to design the ES (and I THINK I’m starting to understand them).
Yo… My ears have perked up again.. ;)
1. Yes, a fully featured entity system is a big part and shining star of TyphonRT; Java based middleware for J2SE and Android. I’ve spent a good deal of time tuning it for performance and FPS / real time game dev situations. Most of the tuning was done on Android with 1st / 2nd gen devices, so I got a lot of kinks worked out.
2. No, but soon; plan on providing a series of tutorials with simple 2D examples to a full Q3 class engine, Auriga3D. Am trying to get to semi-public beta ASAP; Q1 ’11 launch is generally planned right now.
3. Yes, GPL v3 w/ commercial licenses available. Hopefully when other premium components sell I’d like to switch to Apache or BSD for the TyphonRT core which includes the entity system. I plan to give free commercial licenses to all organizations w/ less than $100k revenue.
The entity system in TyphonRT is component oriented and similar to the Java/Android ES articles you posted. In addition TyphonRT itself is an OOP / COP blend. I plan to release a large part of the core as open core and host on GitHub in a novel fashion. In short TyphonRT at the platform level is split into ~450 components across the desktop and Android with a common shared area of roughly 75% of the code / components. Each platform component will get it’s own GitHub repo and I’ll be creating a GUI configuration tool using Gradle under the hood to present to the dev / user a catalog of components and standard presets (say creating a 3D game for Android only). Selecting any given component or set of components will also select all dependencies. The dev / user then selects IDE (Eclipse & Idea supported at 1st) and whether just jar files, read only source, or fork one or more components (requires your own GitHub login). The TyphonRT config tool will the chug along and pull down all the components in the format specified from GitHub and create all the IDE project files and relationships.
I definitely plan to have more static semi-public beta releases prior to all of the above. I do have a very demanding day job client right now and plan to get back to all of the above full time in Feb at the earliest. I’m very close to getting the semi-public betas ready though.
Looks like you’ll be making GDC ’11.. We should grab a beer as it’d be great to chat on and on about this stuff..
I have an entity system and it is already open source.
It is model driven system, where individual entities are built from models (called memes), which in turn are built on meta-models (called meta-memes). Both the memes and metamemes are written in XML, with the metamemes acting as sort of a second schema when creating the models. The name of the design language is Memotica and the sourceforge page is at http://sourceforge.net/projects/rulesetmodeling/
At runtime, it functions as a standalone stack and interacts with external systems (directly with front end clients, or against servers) in a RESTful manner, using two specialized types of entities for control and reporting. Actions (the first type) are invoked by the external system and Stimuli (the second type) are used for reporting the state, or state changes of the system as a whole. It allows for object assemblies, inheritance of metamemes from other metamemes and very precise control over when/where/who can perform what actions, as well as when/where/who can receive stimuli reports (e.g. one player perceiving an NPC as a demon, while the player next to him sees a little girl).
The runtime interpreter is a separate project, called Angela, and its sourceforge project is at http://sourceforge.net/projects/projectangela/
2)
Not yet ready for prime time. I’m still working on the test cases for the corner cases in the action and stimulus handling subsystems. I’m hoping to have my test suite green-lighted on stimulus handling before Christmas and likewise with actions sometime next month. Both dates may be optimistic.
After my test cases are all clean, I’ll release it with an example chat application built from it and the next thing I’ll be building with it is an example (multi-language) NPC conversation/quest system.
As for performance, the first version is written in Python, so there is still much room for performance optimization. Also, being too liberal with the entity assemblies can put a hurting into performance in a hurry.
3)
It is currently GPL, though I’m planning a switch to MIT as soon as I’m comfortable with the action and stimulus handling.
Having previously worked for a middleware vendor that foundered trying to implement an entity system, and currently working for one of their clients who need to ship on it, I haven’t written anything myself – but I am keeping a very close eye on your articles & using vacations to prototype bits and pieces.
I’ve setup a wiki to gather volunteers and organize efforts here:
http://entity-systems.wikidot.com/
Hi
I’ve co-developed an Entity System framework in Java, based on your ideas and some others as well. Doesn’t seem to be any way of contacting you but to leave a reply here, so here it goes:
Demo game and all relevant code is here:
http://gamadu.com/games/starwarrior/
Hoping for some positive response :)