Ich hab mir das Map Format mal angeschaut. Ist noch ein wenig "unschön" gelöst, wie man es auch an der Dateigröße merkt. Damit meine ich vorallem die 500er Map.. die knapp 1MB groß ist. 100 Maps == 100MB? Ich weiß das wäre eher der worst-case, aber schau dir als gutes Beispiel mal das Tiled .tmx (eigentlich .xml) Format an. Tiled Map Editor. Dort wird zlib Kompression + base64-encoding verwendet. Anstatt also:
Zitat Zitat
<Layer>
<MapTiles Tiles="4:1,4:1,5:1, ....
im klartext zu speichern könntest du folgendes machen
Zitat Zitat
<layer encoding="base64" compression="zlib" width="500" height="500">
eJzt2kEKAjEMheGizkXUk6gw97+R2QiZUgjUFDLJv/gW7eLRt3C.. <-- die codierten Tile IDs
</layer>
Um die Map zu erhalten dann sowas wie:
Zitat Zitat
byte[] decoded = Base64.decode(layer.value);

int[] tileIDs = new int[layer.width * layer.height];
Zlib.inflate(tileIDs, decoded);

int tile = tileIDs[x + y * layer.width];
Zip die Map mal, dann siehst du wieviel du in etwa verschwendest. 994kb werden auf ca. 6kb komprimiert.

Falls du aus irgendeinen Grund nicht darauf verzichten willst, würde ich trotzdem einige Dinge überdenken. Sowas wie:
Zitat Zitat
<MapTiles Tiles="4:1,4:1,5:1,1:0,3:1,4:1,4:1,4:1,4
<MapTiles Tiles="4:1,4:1,5:1,1:0,3:1,4:1,4:1,4:1,4
<MapTiles Tiles="4:1,4:1,5:1,1:0,3:1,4:1,4:1,4:1,4
Jeder char im xml Bezeichner ist mal fünfhundert = 500 Byte Verschwendung. Auch das Attributte "Tiles" ist unnötig. Den Tile IDs String kann man auch als value speichern. Also eher sowas wie
Zitat Zitat
<tid> 4:1,4:1,5:1,1:0,3:1,4:1,4:1,4:1,4 ... </tid>
<tid> 4:1,4:1,5:1,1:0,3:1,4:1,4:1,4:1,4 ... </tid>
<tid> 4:1,4:1,5:1,1:0,3:1,4:1,4:1,4:1,4 ... </tid>
Bei AnimationDatabase.xml ist es ähnlich.
Zitat Zitat
<Frame time_msec="50">
<Sprite spriteID="11" posX="0" posY="0" scale="100" rotation="0" opacity="100"/>
</Frame>
<Frame time_msec="50">
<Sprite spriteID="12" posX="0" posY="0" scale="100" rotation="0" opacity="100"/>
</Frame>
<Frame time_msec="50">
<Sprite spriteID="13" posX="0" posY="0" scale="100" rotation="0" opacity="100"/>
<Sprite spriteID="3" posX="-96" posY="-96" scale="100" rotation="0" opacity="100"/>
</Frame>
Anstatt jedesmal ein neuen Tag für die Framezeit zu beginnen könntest du ein int array mit [index] = frametime Wertepaaren verwenden. Außerdem könntest du default-werte einführen. Werte wie posX="0" posY="0" scale="100" rotation="0" opacity="100" braucht man nicht zu speichern, wenn es sie als default gibt. Daraus wird dann sowas wie:
Zitat Zitat
<frame_times> 50 50 50 <frame_times>
<sprites>
<sprite id="11" t="0" />
<sprite id="12" t="1" />
<sprite id="13" t="2"/>
<sprite id="3" t="2" posX="-96" posY="-96" />
</sprites>
Die Frame zeiten werden dann mit frame_times[sprite.t] ausgelesen.

Na ja, das viel mir so auf. Hab mir aber auch nicht alles angeschaut.