RPG World Editor

Hello everyone,
for the past few months I’ve been working on my bachelors thesis, which is simply speaking an MMORPG world editor.
I’ve integrated many libraries including JME, Hibernate, jGraphs, jops and many others.

The editor is currently in a beta version, feturing he following main modes:

-scene composer, basically editing the scenes, where main scene currently uses about 200kmx200km heightmap, which is created from satellite data for Glacier National Park in Montana
scene can contain the following primitives:
>static models
>portals (links between scenes)
>particle systems
>npcs
>resources
>dropped items
>scripts

-particle system editor
is just a gui version for jops library, which I managed to to integrate with JME, based on old plugin for JME2

-AI Editor
The AI architecture works in the following way:
Top level are finite state machines, where each tranistion is a script
Each state represents one logical behavior, which is implemented by a behavior tree. Now there’s a support for all the types of nodes, like sequence, parallel, etc
Then the acutal leafs of the tree again contain executable groovy scripts. Note that all scripts are provided a common base class at runtime to simplify some calls
There’s even a source code editor, with some limited capabilities. (RSyntaxTextArea)

-Script editor
There isn’t much to say, scripts are simple groovy snippets of code, which return a value depending on the script type.
There’s a support for predefined script types: Video, Audio, Chat, Conditon, Dialog, and the General type which handles all the remaining cases.

-Template editors
The editor utilities sql database to store item, npc and resource templates, which are used to instance individual entities.
The templates include names, icons, models and other fields. Of course there’s a possiblity to add script to each template, for example a script set to an item means the default action to execute when the item is “used” - drink a potion, equip something
The tricky part was to create a dynamic scheme, as each game might require different set of stats for it’s entities. There’s one special table, which is updated on the fly by editor, where columns represents all the user defined stats. So there’s also a stat editor, which allows you to define custom stats, provide a minimum and maximum values, and also the generated column name, etc.

There may be a slower version ( probably with a commentary too) uploaded later, for now, consider this video a trailer:
[video]http://www.youtube.com/watch?v=-rLJgFhnK_0&feature=related&hd=1[/video]

Also please note, that this has been all designed for online RPG worlds, aka MMMORPGs,
I’m currently finishing an implementation of a server and very basic client utlitising the world exported from this edtior.

8 Likes

Really cool! Is that a themed swing in the video or a different ui library?

Cool. Given all that functionality you certainly had to pave a few things for the MMO scenario, how do games done with this work?

i want it now !!! :smiley:

С

@vlad2611 said:

Also please note, that this has been all designed for online RPG worlds, aka MMMORPGs,
I’m currently finishing an implementation of a server and very basic client utlitising the world exported from this edtior.

Cool! You can take my manipulators and selection tools from here:
http://hub.jmonkeyengine.org/forum/topic/simple-world-editor/

1 Like

I like that LookAndFeel

yeh, awezome :slight_smile:

Thanks everyone :slight_smile:

<cite>@normen said:</cite> Cool. Given all that functionality you certainly had to pave a few things for the MMO scenario, how do games done with this work?

-Considering the overall security I decided for the server to have absolute authority, so the client is mostly a dumb request forwarder with a gui, apart from caches etc., so all the stuff happens asynchronously (they just trade packets back and forth)

-The data layer is split between database tables(just stuff needed by server like ids, stats, positions), server xmls (basically the “defaults” for tables, used on first initialisation or complete reset of npcs and resources) and client data (assets and rendering attributes for the models).

-All the enitiy atribute changes are done via a single interface, then collected in the update loop and filtered to players which should receive them. The filter most often takes the
zone where the event happend and then a call to quad tree is made. I’m currently rewriting the network layer (reducing packets length and plugging AES there), I’ve tried to implement both TCP and UDP, but time is running short, so I might just stay with tcp for now as the reliability makes stuff so much easier

-Scripts have a binded variable called self which is the enity that triggered the script, so it can be controlled wheter only a player / group of players or all players should be affected.

-One of the problems I’m facing is how to determinate the height for players/npcs spred all across the game world, as the heightmap size is several GBs. For the editor, it can be streamed, but I just can’t fit it in RAM at once. My current idea is to work with just “estimeted” values, which will be periodically updated by some slave servers, responsible purely for resolving heightmap queries. In the end the exact height value might only be needed only for rendering, as this is not a FPS, and the estimated value will do for all the common cases.

<cite>@8Keep123 said:</cite> Really cool! Is that a themed swing in the video or a different ui library?

It’s indeed swing, the look & feel is HiFi from JTattoo, they have GPL licence for open source projects, and I absolutely love mixing it with MigLayout. Finally found a layout manager for practical use :smiley:

<cite>@mifth said:</cite> С

Cool! You can take my manipulators and selection tools from here:
http://hub.jmonkeyengine.org/forum/topic/simple-world-editor/


Thanks, I’ll check it out :slight_smile: