Re: [Algorithms] In-place loaded data structures.
Brought to you by:
vexxed72
From: Tom P. <ga...@fa...> - 2005-11-29 05:41:22
|
> As someone else poined out, I think you're really asking about > "relocatable data structures". FWIW, on the Syphon Filter games on the first PlayStation, we actually stored the starting image of each level of our game data as a memory dump, and kept the loading code in the executable but disabled by a global boolean switch (so the code wouldn't change size and invalidate where we were loading the data). In short, we wrote out everything from the end of the executable to the end of the used heap to disk once the load was complete, and the "final" build just loaded stuff this whole file into the same place, bypassing all of the other loading and fixup code, loading the startup image into memory. We took this process to "the next level" by writing out the frontend state also and then linked that into the executable itself so that the initial frontend load happened as a part of the executable itself loading. After the initial load, all of our streamed data actually had inter-object references "baked" into the data, since we always knew where everything was loading as the levels (of 10-15M a piece) streamed into place. As one might imagine, this required a considerable push on the tools to create this data for us, but it also allowed us to guarantee that we'd never run out of memory because by definition we couldn't fragment. That discussion could go on forever, though. ;) Needless to say, I'm a big fan of deterministic data loading. Many if not most games could do something like this, but it isn't exactly glamorous work and most don't even think it's a problem that needs to be solved. For us, we did it just because we wanted to get load times down since we thought gamers would appreciate it. :) The grand irony of all of this is that while we had deterministic data loads, we had relocatable code modules. However, those too always loaded up in the same place every time you loaded a given level, they'd only move around level-to-level. (These modules were included in the "first load" dataset for a level.) -tom! |