Twitter  YouTube  E-Mail  RSS
The One Man MMO Project
The story of a lone developer's quest to build an online world :: MMO programming, design, and industry commentary
Data Driven Systems Coming Together at Last
By Robert Basler on 2011-12-07 15:05:05
Homepage: email:one at onemanmmo dot com

I'm just finishing up Dragon Age Origins Awakening. Playing that game so much during the last year has definitely influenced the design for my game. RPG's often feature stuff you can collect: swords, armor, potions, runes. With those items you can usually add enhancements to improve their stats. Sometimes you can combine several items to make completely new items (crafting.) The meat an potatoes of a lot of RPG's is a zillion items and enhancements that can be combined in myriad ways to give the player the choice of how to gain advantage in-game.

I'm not saying I'm making an RPG. But I have been building a data-driven system to support both item enhancements and building new items from components the last 3 weeks. There's still a lot to do yet, but as of today, much of it is working and new entities are appearing in the game. So cool.

The simulation within my game is based on an Entity System much like the one described on T=Machine and myriad other sites. Each Entity within the simulation is made up of Simulation Components such as PositionComponent which stores where the entity is in the world, and ModelComponent which specifies the entity model to load among other rendering details. There are a bunch of other Simulation Component types, read the linked articles for some ideas.

Up until now, Entities and the Simulation Components that make them up, have been created in the database with a giant, hand-made SQL script. Maintaining that has been a huge pain as Simulation Component data fields have changed over time.

The new system I've finally got working today allows me to add entities which are built from Designs. A Design is a set of components - not Simulation Components, but Design Components.

Each Design Component has a 3D Model, a bunch of Statistics and an Assemblage.

The different 3D models in the design components are combined at runtime so each design has a unique look.

Statistics are things like a points value for full health, line of sight range, etc. Statistics can either be simple values, or modifiers, so you could get a Design Component that adds +20% health, or +2000 health. Those statistics can be boolean, (to add an Indestructable attribute,) numbers, or a variety of other types. Statistics are combined with a whole range of mathematical and logical functions which are all processed in a multi-pass calculation with order of operations.

An Assemblage determines which Simulation Components get created when an Entity is created, and the Statistics are used to populate those Simulation Components.

It sounds kind of complicated. And it is. One of my challenges building this game is that it has become too large for me to keep all the nuances of the whole program in my head at one time. This system alone has so many moving pieces it is difficult to keep them all straight all the time.

So now that I have it, what can it do?

Players will be able to collect Design Components in-game (or purchase them) and will manage them through an Inventory System.

Players will be able to make their own Designs from the Design Components in their Inventory.

So wow, that sounds fun, right?

The really helpful part for me however, is that now all that is needed to give the player all-new toys to play with, is to put Design Components and Assemblies into a couple of database tables. I'll probably build a GUI tool to simplify Design Component creation in the future.

One of the challenges of this type of system however, is balancing it. If you are not careful, players could end up with a super-powered entity that messes everyone up. A lot of game companies have guys who spend all day balancing by hand. I don't think I can put in that much time. But I've got some ideas about automated balancing with a sort of robotic fight-to-the-death/game of life type of thing.

New Comment

Cookie Warning

We were unable to retrieve our cookie from your web browser. If pressing F5 once to reload this page does not get rid of this message, please read this to learn more.

You will not be able to post until you resolve this problem.

Comment (You can use HTML, but please double-check web link URLs and HTML tags!)
Your Name
Homepage (optional, don't include http://)
Email (optional, but automatically spam protected so please do)
What color is a lime? (What's this?)

  Admin Log In

[Home] [Blog] [Video] [Shop] [Press Kit] [About]
Terms Of Use & Privacy Policy