Data driven game framework with a dedicated game editor - Zaria and Zone Editor

Hi!

For the a bit over a year I’ve been working on a data driven game framework built on top of jMonkey Engine 3 and a accompanying game editor. I think I’m ready to share with the community what I have managed to build so far.

From experience I know that a proper data driven work flow can significantly speed up game development process. Also I really, really wanted to rip-off the BioWare made Aurora Engine, so I figured I’ll just get to it. The result is the Zaria Framework, it’s not much of a copy of the BioWare tools anymore, but the inspiration is still there :slight_smile:

Current features of Zaria Framework:

  • All game object data is stored and loaded using a JSON derived text format - ZONE.
  • Component based Entity system.
  • Streaming Map system.
  • Embedded JavaScript based scripting.
  • In-game console.
  • Dedicated debug console, with extensive exception logging.
  • Various smaller helpers and utilities.

The main paradigm behind the framework is to have a Object - ObjectDefinition relation.

ObjectDefinitions are constant and serialized from disk. They are used to create appropriate objects (EntityDefinition creates an Entity). Multiple Objects can use the same ObjectDefinitions.

I wrapped most of jME3 classes that way (materials, post process filters, audio environment, etc.) That plus usage of a single text format for all ObjectDefinitions, significantly decreases iteration time and helps organizing data.

After making some smaller games using the framework I realized that although it helped me a lot, the lack of appropriate tools was still a cause of lost time and effort. I desperately needed a game editor. I looked for some ready 3rd party solutions but nothing fit the bill. Everything I encountered was closely tied to the engine it was built for. The best solution I could find was GtkRadiant, which although powerful and flexible can hardly be used outside id Tech. In the end it meant that none could be made to work with the jMonkeyEngine without heavy modifications.

I also looked into creating plugins for the NetBeans platform, but results were… unsatisfactory… and let’s leave it at that :slight_smile:

So I decided to build a editor myself. The result is the Zone Editor. It is a separate application, written using Swing and can be used to create game data files for any project built with the Zaria Framework. The path to the jar with the game has to be given and the editor will load all necessary data - no recompilation required.

Current features of the Zone Editor:

Text Editing for the ZONE format, with validation.

The editor will check and highlight any problems with the game data while editing - both syntax and custom conditions that can be defined per game object class.

Visual Editing for the Zone format.

All of the data that is not possible to visualize is editable using a property view.

Both the text and visual editor have a palette on the right with all available game objects. So anything the game supports needs just to be dragged into the editing area.

Script Editing, with validation.

The scripting language is basically JavaScript with some minor additions (like imports). Also the editor will try to validate the script as much as possible during editing. Additional checking is available when packaging the scripts.

Map Editing, with lightmap generation.

The map editor currently supports most important features like placing and modifying geometry, area triggers, markers, lights and entities. It also uses the Sunflow Global Illumination Rendering System for baking lightmaps for all geometry and some entities. (I guess a lot of people here already know about Sunflow :slight_smile: )

The map can be previewed using the integrated Map Viewer.

The latest thing I added is Entity Instance Editing, which enables editing of Entity data per instance from inside the Map Editor.

Everything is licensed under EUPL v1.1.

Project blog: Zaria Dev Blog
Project repository: Zaria Project

15 Likes

Impressive, looks really cool.

Lol nice, quite the industrious fellow you are.

Hi,

It seems very intersting, but the lake of doc (blog, video, samples,…) make it un usable/un accessible (at least for me). It’s a pity, there are so many works done.

Hi yezu,

David is quite right about the general usability for non coders I guess. I was hoping to find there at least some rudimentary documentation comming with the code but couldn’t find anything. So will you publish some docs in the near future?

So I wanted to give the editor a try and checked out the svn stuff but it failed in the TestApp with some errors showing up about a corrupt repository entry E160004 Malformed representation header at /svn/p/zaria/code/db/revs/0/29:90938484 . The sourceforge download also fails hard to create the zip.

Is the TestApp needed at all? Otherwise I would try out to get the editor running and figure out what I can from there.

Anyway, looks very nice. Thumbs up!

Thanks a lot for checking this out!

Documentation (or at least some basic how to) is something I want to do very soon. It’s always the dilemma: “Do I implement one of the features that are on my list, or do I finally sit down and write the doc” :slight_smile:

I’m not really sure what is the problem with the TestApp, but most probably some of old tests is out of sync with my local changes and lingers in SVN. It’s been some time since I checked how the editor runs stand alone. Something I will also look into.

I think I should also create an actual distribution package, so that if somebody wants to check this out, there’s no need to download the whole repo.

I will post an update as soon as I do any of this :slight_smile:

It’s not much of an reinvention - the framework and the editor have features the SDK is missing. And the ones that they inherit from the SDK are (at least slightly) improved and in most cases simple to implement. Moreover the SDK is very coder centric, the editor is meant to be a tool for designers.

Apart from that, I did start by creating NetBeans plugins. However after a month of fighting I decided to against that. The NetBeans platform is unimaginably broken and in my personal opinion seriously over engineered. I was more working around its issues than using its features. My recent experiments show that not much have changed over the last year. Ultimately I decided to using Swing directly, which although is also not perfect, is much more stable and with the abundance of 3rd party solutions, just as capable.

Another reason why the editor is stand-alone is that it can be distributed as mod kit along with your game.

1 Like

I can agree with yezu on Netbeans. I like Netbeans as a user, but trying to create plugins for it is really orthogonal to the way I like to work.

1 Like

Thanks for the feedback. Makes sense.

Its probably generally the reason why theres so few synergy with such things. Say if this was the default jME editor others would come around and say they have issues wrapping their mind around how its supposed to be extended and instead build their own, using their programming style. Kind of a vicious cycle of implementation styles :wink:

1 Like

It seems that’s what i want! JavaScript+Entities+LightMaps. Cool!
I need to check this out.
Do you have Layers? Layers are very useful in level design.

You can take aany things from my editor too. https://code.google.com/p/simple-world-editor/
My editor has good manipulation and selection tools.

I think your editor can be Unity killer. I hope so! Do you need any help in development?
Especially interesting thing about SunFlow.

@normen said: Its probably generally the reason why theres so few synergy with such things. Say if this was the default jME editor others would come around and say they have issues wrapping their mind around how its supposed to be extended and instead build their own, using their programming style. Kind of a vicious cycle of implementation styles ;)

I totally agree! and this some time lead to a lot of low quality software , instead of one solid software. Said that , this project looks promising! great work :slight_smile:

Do you have Layers? Layers are very useful in level design.

I don’t have layers yet, but they are a thing I’d like to implement. The framework can handle really, really large maps. However the editor is beginns to struggle once the map gets 4096x4096 or larger, as it loads everything in one go. Layers would be one way of solving that problem.

I'd be interested in helping too. Could you migrate this project to github so people can contribute?

Frankly I did not expect people to be interested in contributing, but help is of course welcome :slight_smile:
I’ll try to set something up so that collaboration is possible. I’ll update this thread :slight_smile:

Way to highjack a thread guys! :facepalm:

Anyways. I think a stand alone world/asset creation tool would benifit the whole JME community and perhaps entice more people to choose JMonkey over the ‘bigger’ engines. Overlap of functionality is a given with this kind of thing, but the more choises and ways of doing things developers have the better results they can produce.

Kudos to the @yezu. keep up the good work. I’ll be watching out for docs and a distro so I can start using this.

Right, I split the topic to here: http://hub.jmonkeyengine.org/forum/topic/split-from-zaria-editor-netbeans-platform-for-sdk/ :wink: