Naja, ich würde versuchen, das ganze modular aufzubauen. Wenn sämtliche Loader (Texturen, Modelle, Sounds) nicht nur Dateinamen sondern auch Speicherbereiche entgegennehmen, ist es ein leichter, nachträglich noch eine Kompressions- oder sogar Verschlüsselungsschicht einzubauen.
Möglich ist dann sogar sowas wie ein virtuelles Dateisystem aus mehreren Archivdateien zusammen zu bauen. Nehmen wir an, alle Modelle sind im "Models/" Unterordner, alle Texturen im "Textures/" usw. Du hast jetzt 20 Zip-Dateien, die jeweils auch diese Unterordner enthalten und deren Inhaltsverzeichnis beim Spielstart eingelesen wird. Willst du jetzt "Textures/bark.jpg" laden, weiß dein Manager, in welcher Zip-Datei er suchen muss.
Das coole so ist halt, dass du Standardmodelle in der einen Datei haben kannst, aber dann die 3-4 Spezialmodelle, die du nur in einem Level brauchst einfach in der Leveldatei speicherst. So kannst du das Level sehr leicht installieren oder löschen, du musst nur eine Datei kopieren/löschen.
Für das Dateiformat ist natürlich XML dann gut, wenn es robust sein soll. Du kannst zur Not auch im Texteditor Änderungen vornehmen, und eine Menge Probleme die mit Binärdateien auftreten können, sind bei XML schon mehr oder weniger auch Prinzip unmöglich. Aber es ist natürlich größer und langsamer zu verarbeiten (Text/Binär Umwandlungen (und umgekehrt)).
Ich habe mal eine Zeitlang boost::serialization benutzt, da kann man sogar entscheiden, ob man Text- Binär- oder XML-Dateien (zumindest sowas ähnliches) haben möchte. Mittlerweile benutze ich aber ein eigenes, binäres Speichersystem.