Well, its getting off-topic, but here's how my save/load system worked:
Every object in the game had a type (not an ID!, a type) and based on that type the game knew what it does and how...

With that information, I run through all the existing objects and write to a file in the form "model name, object type, position, orientation, 5 general purpose parameters(which depend on the object type)"

When I want to load, I run a function that reads in term the model, type, pos, etc. and ent_creates it and sets the parameters...

Guess what? laugh Level with 200 objects becomes kbytes... I think it was around 15kb.
Loads fast enough, saves fast enough and it can be modified by hand in Notepad, because it looks good (its not encoded or anything).

Downside - its specific to my game's level system and not very backwards-compatable. If I modify a future version, ex. add a parameter, the old versions wont work with it.
But even if I add a new object in the game, it will work for any model and type... If the type is not found, a static general object is assumed...

I needed a lot of time to develop this system, but simply because I was young and inexperienced. If I had to do it now, I'd make it more generalized, using function pointers and other things, to make it reusable. Also, save/load the number of parameters and achieve backwards compatibility...


Extensive Multiplayer tutorial:
http://mesetts.com/index.php?page=201