After having nothing better to do, I spent more time on this and re-discovered much of what I'd already gotten, and then quite a bit more:
Code:
byte {8?} @0000 - Header ("TZFBG\x0\x0\x0")
uint32 {4} @0008 - Unknown (always 0x09 0x04 0x00 0x00?)
uint32 {4} @000C - Map width
uint32 {4} @0010 - Map height
uint32 {4} @0014 - Unknown (always 0x0B 0x00 0x00 0x00?)
uint32 {4} @0018 - Unknown (always 0x2A 0x00 0x00 0x00?)
uint32 {4} @001C - Number of exhibits
uint32 {4} @0020 - Unknown (always 0x01 0x00 0x00 0x00?)
// for each exhibit (77 + x bytes per exhibit (?) )
uint32 {4} - Unknown
uint32 {4} - Length of exhibit name field
byte {x} - Exhibit name
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
byte {25} - Unknown (always null?)
uint32 {4} - Unknown
uint32 {4} - In-game date exhibit was constructed (bitshifted)
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown (always null?)
uint32 {4} @0024 - Unknown
// for each tile (10 bytes per tile)
uint32 {4} - Elevation
uint8 {1} - Slope type (North = top, East = right, South = bottom, West = left)
0x00 - None (TL:0, TR:0, BL:0, BR:0)
0x01 - Southwest floor down (TL:0, TR:-1, BL:-1, BR:-1)
0x02 - buggy/crashes
0x03 - buggy/crashes
0x04 - Southeast corner up (TL:0, TR:0, BL:1, BR:0)
0x05 - East side down (TL:0, TR:-1, BL:0, BR:-1)
0x06 - buggy/crashes
0x07 - buggy/crashes
0x08 - buggy/crashes
0x09 - buggy/crashes
0x0A - buggy/crashes
0x0B - buggy/crashes
0x0C - buggy/crashes
0x0D - buggy/crashes
0x0E - buggy/crashes
0x0F - buggy/crashes
0x10 - Southeast corner up (TL:0, TR:0, BL:0, BR:1)
0x11 - Northeast to Southwest center down (TL:0, TR:-1, BL:-1, BR:0)
0x12 - buggy/crashes
0x13 - buggy/crashes
0x14 - South side up (TL:0, TR:0, BL:1, BR:1)
0x15 - Northeast corner down (TL:0, TR:-1, BL:0, BR:0)
0x16 - buggy/crashes
0x17 - buggy/crashes
0x18 - buggy/crashes
0x19 - Southwest corner up to Northeast corner down (TL:0, TR:-1, BL:1, BR:0)
0x1A - buggy/crashes
0x1B - buggy/crashes
0x1C - buggy/crashes
0x1D - buggy/crashes
0x1E - buggy/crashes
0x1F - buggy/crashes
uint8 {1} - Terrain type (0x00 - Grass, 0x01 - Savannah Grass, 0x02 - Sand, 0x03 - Dirt, 0x04 - Rainforest Floor, 0x05 - Brown Stone, 0x06 - Gray Stone, 0x07 - Gravel, 0x08 - Snow, 0x09 - Fresh Water, 0x0A - Salt Water, 0x0B - Deciduous Floor, 0x0C - Waterfall, 0x0D - Coniferous Floor, 0x0E - Concrete, 0x0F - Asphalt, 0x10 - Trampled Terrain; all other values are treated as Grass (tested up to 0x4F))
uint32 {4} - Tile sides
uint32 {4} - Number of objects?
// for each object (12 + x + x + x + x + ? ... bytes per object?)
uint32 {4} - Length of object identifier 1 field
byte {x} - Object identifier 1
uint32 {4} - Length of object identifier 2 field
byte {x} - Object identifier 2
uint32 {4} - Length of object identifier 3 field
byte {x} - Object identifier 3
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Unknown
uint32 {4} - Length of object name field
byte {x} - Object name
...
Obviously, there's still a lot of the format left to deduce, including an absolutely massive chunk following the objects/entities block that I have no idea at all what it's used for. For now, though, I'm more interested in just learning enough about the format to be able to add or remove rows and columns to the map (thus allowing me to resize them); this will require, at the very least, figuring out how the locations of exhibits and objects/entities is stored.
_________________
Welcome to Xentax!Rules |
Requests |
WikiIf you run across a post that breaks the rules, please
PM Craptain, Mr.Mouse, or myself - we will handle it from there.