I could easily create a god class where everything is read kinda sequentially, but that kinda defeats most of the beauty of a well designed C++ API.
Maybe a Strategy pattern? What would be best?
I was initially thinking of having a main class that represents the loaded game data. I'd have a base GameBlockBase from which the different game object block types would derive like GameMissionBlock, GameLevelBlock and so forth. Then, something like a GameDataObjectBase where GameDataVertex and GameDataAudioSound would derive.
The main class would just hold vectors of GameBlock* and maintain the current file offset. It might create a GameBlock* and call GameBlock->Load(fileData, &offset) and append that block to the appropriate vector.
Internally, in GameBlock->Load(..), each particular derived GameBlock would know how to consecutively create GameDataVertex and call ->Load(..) on that until EOF.
This is clearly not well fleshed out, but it's because I'd love to get your opinions before I go any farther.
have you considered the kiss design pattern instead?
Half kidding, but don't over think or over cook the thing.
make your OOP tools and all for the actual data represented.
do a simple file to memory read once and then each section can read the same byte dump and parse out what it needs, in parallel, to populate the OOP objects you made.
You said it was old, so assuming the whole file fits into one block of memory without any stress, eg no bigger than 4 gb or so?