Game Object Structure: Bringing it all Together Roundtable (Saturday)
Object Editting Tools
- Standalone like Halo (a few), Plug in (very few), Level editor (several), Excel (a few)
- Re: object stats in Excel: see GDC talk about how to turn data from Excel into code
- Suprising number were using script code directly to place objects (in one case after abandoning a level editor that never became functional)
- Hard point / effect point placement done in 3DS Max
- Data validation in export! Very handy.
- If verification takes a long time, can use a net farm to export to a temporary location.
Serialization/Persistance
- Can choose between using a single function or many functions for network vs. save/load vs. config vs. ...
- Nice to have both an all text and binary format. Can read text version, and check it into version control.
- Versioning! Important feature for file formats.
- For network: can only send changes; using the same code, the save game only has delta from defaults. May need to customize for action/twitch games where every position changes every frame : action/twitch games benefit from separate net serialize / save games.
- "Serialize" that both saves & loads has problems with complex data: end up with lots of ugly "if (loading)" or "if (saving)"
- "Gigabase" is an open source object database that someone plans to use (since ObjectStore changed their license).
Object ID/indexing
- One person used 16-bit IDs (space efficient!) with a 4,000 entry table of references to objects. Found to be useful for validation since have a list of all valid pointers. Also can do validation every time you get a pointer from an id.
- Used text strings to refer to objects in scripts. Text strings were replaced with numeric ids as part of compiling/linking.
- One person used an URL like path/file system for organizing objects
- Look at "The Nebula Device" -- an open source engine with a creative design
- One person found relation database features useful: ex. Ask for guys that are alive and spawned and visible...
- One person used the hash of asset name (checked for uniqueness) to track assets (eg. through art pipeline)
Misc
- C++ RTTI used (in PC debug build only) to catch errors
- dynamic_cast was slow on PC if used a lot with about 6 deep heirarchy (Dungeon Keeper); shallow hierarchy (2 deep) on Soldier of Fortune 2 was fast
- Moderator notes to be posted on www.gamearchitect.net