I've been reading up on a lot of articles which covers the subject of Data Driven Design (DDD) when making games.
It seems to come down to:
- No Hard Coding
- No Game Specific Code in Engine
- Scripting (ai, cut scenes, etc.)
- Generalizing Code for Max Reusability
- Component Design
- Modularity
- Low Coupling
- Editors (Data, Map, Scripting)
- External Data Retrieval
- Constants kept in Text Files (INI or otherwise)
- Expose Data through Editors for Scripting/Manipulation for Designers
Now, my first question is of course: Is this understanding correct? (From an Objective Point of View if possible)
One of the editors I looked at was Warcraft 3's Map Editor (WC3 ME) since I've had the most experience with it over my years of obsessive gaming. For those who don't know, the WC3 ME is the tool used to make custom maps in WC3. You had the power to pretty much alter anything within the engines limitations be it Units/Abilities/Items (Raw Data Editing like in a Database), Maps (Level Editor) or Triggers (Event Based Scripting Editor). You could also write in Blizzards custom language called JASS to gain absolute control of the language the the Trigger Editor tried to cover in as much detail as possible. The WC3 ME was often considered the "Engine" of the game.
My dream is to make an engine for my games which can be as extensible, modable and easy to configure engine as the WC3 Engine. Other examples from more recent games would be Starcraft 2 and Skyrim both also following DDD. Popular DDD engines are UnrealEngine (UDK) and UnityEngine (Unity). Some would argue Torque, but from what I understand it violates some of the core principles of DDD. Especially with it's heavy realiance on the scripting system that kind of developed into it's own programming language which is not part of DDD.
The problem I seem to have though, is where to start. I can't wrap my mind around how to execute this methodology in code. The engine needs to be very abstract so that I can make many different games with little to no edits in the engine itself. My goal is to first make a simple (at least in theory) 2D tile engine to follow styles such as that from Pokemon or A Link to the Past. Moreso the latter because it uses a tile system but got free movement in all 8 directions.
My second question is: Do you have any points on where to start?
I would use an already existing framework to make the engine and not make my own OpenGL bindings and such. Something like Tao or SFML.
So that is that. I hope we can have some good discussions in this thread and perhaps get together to get resources on these subjects as they are very sparse...from what I have tried to find any way!