[][src]Struct fable_format::Save

pub struct Save {}

Save format.

Format Description

Temporary comments from fabletlcmod.com.

Game Save Specification
Header

12byte File ID (Always= FableSave!..)
4 Bytes - Offset to CRC (File is CRC'd from 0x0 until offset (Custom 32bit 1s Complement)
4 Bytes - Chunk 1 Decompressed size
4 Bytes - Chunk 2 Decompressed size
Chunk 1

4 Bytes - Chunk 1 Compressed Size
Zlib compression of Chunk 1 (78 DA) (Best Compression Option)
Header

7 Bytes = HEADER (NULL Terminated)
4 Bytes = Chunk Size (minus 7 byte header)

From here on out everything is passed by CRC values of Strings (see above). Xbox is only 1 byte while PC contains 4 (PC // below!)
Control Bytes

  CRC            Bytes        Value
224FDEA8        (String)      World Name (Usually FinalAlbion) (Null Terminated)
A0CA0F5B          4           World Frame
A7E624D3          1           Boolean (Teleporting Enabled)
20627570          1           Boolean (Saving Enabled)
D2AB286A          1           Boolean (Expirience Spending Enabled)
50596E3F          1           Boolean (Creature Generators Enabled)
7A109958          4           Creature Generation on Disabled Groups
B2DD2D45          1           Boolean (Hero Sleeping Enabled)
A4E20924          1           Boolean (Map Table Show Quest Cards)
B695FB1B          1           Boolean (Mini Map Enabled)
481D7C4C          1           Boolean (Mini Map active before Disabled)
500F26AD          1           Boolean (Guild Master Messages Enabled)
2C8B8182          1           Boolean (Summoner Death Effects Hero)
0FA53138          4           Int32   (Most Recent Save Type)
BD12926C          4           Int32   (Most Recent Save Type Before Manual Save)
DBA8729A        (String)      String  (Most Recent Manual Save Name) (Null Terminated, Unicode ends with 00 00)
04649280          4           Float   (Save game marker position X) (view FinalAlbion.wld for all coordinates)
                  4           Float   (Save game marker position Y)
                  4           Float   (Save game marker position Z)
F295DFAE          4           Float   (Save Game Marker Angle X/Y)
373CB734          4           Float   (Guild Seal Recall Position X)
                  4           Float   (Guild Seal Recall Position Y)
                  4           Float   (Guild Seal Recall Position Z)
C71A110A          4           Float   (Guild Seal Recall Marker Angle X/Y)
0DF39CFD        (String)      String  (Current Region Name) (Null Terminated)
50506DEB        (String)      String  (Current Mini Map Name) (Null Terminated)
40242445          4           Int32   (Total Time Played)

Chunk 2

4 Bytes - Chunk 2 Compressed Size
Decompressed Header

  CRC          Bytes           Value
67E8E2EE         4             Time (Float, Normalized Time of Day. 0-1.)
AD9E35E8         4             TimeStep (Float)
344B012E         4             DayCount (Integer)

**ENTITIES Header**
[9] Bytes - ENTITIES (Null terminated)
[4] Bytes - Size of ENTITIES Chunk
[4] Byte  - NULL     (1 Byte Null on XBOX!)
[4] Bytes - Always (02 00 00 00)
[4] Bytes - NULL     (1 Byte Null on XBOX!)
[4] Bytes - Last Generated ID? (Integer)
[4] Bytes - NULL

**SAVED_ENTITIES Header**
[15] Bytes - SAVED_ENTITIES (Null terminated)
[4] Bytes - Offset to  SAVED_ENTITIES
[4] Bytes - NULL  (1 Byte Null on XBOX!)
[4] Bytes - Last Map ID Read (Integer)
[4] Bytes - NULL (1 Byte Null on XBOX!)

SAVED_ENTITIES Compressed

The saved entities for each map are compressed using a weaker form of zlib And are preceded by 8 bytes NULL (5 for Xbox)//  for each map, if the map doesn't have anything saved then the header isn't present either (it will still pass Null // Bytes per map until the next is found) (Blank Tngs create entries but there is no data present). The maps go in order // based on the FinalAlbion.wld

4 Bytes - Total Block Size
4 Bytes - Null  (1 Byte Null on XBOX!)
4 Bytes - MapUid (From FinalAlbion.wld)
4 Bytes - Null  (1 Byte Null on XBOX!)
4 Bytes - Compressed Size
4 Bytes - Null  (1 Byte Null on XBOX!)
4 Bytes - Decompressed Size
Zlib Begins

After all maps are cycled a Table Begins.
4 Bytes - Number of Entries Each Entry is 20 bytes Long (PC) and 14 bytes on (Xbox)

4 Bytes - Null  (1 Byte Null on XBOX!)
4 Bytes - Last Generated ID in file?
4 Bytes - Null  (1 Byte Null on XBOX!)
4 Bytes - Map UID (From FinalAlbion.wld)
4 Bytes - Null  (1 Byte Null on XBOX!)
4 Bytes - CRC String of what Quest Section it relates to

SAVED_ENTITIES Decompressed

Header

[4] bytes - Number Quest Sections
[char]    - Quest Section String (Null terminated)
[4] bytes - Quest Section Size

Entities

[4] bytes - Entity Size
[char]    - Entity Type String (Null Terminated)
[1] bytes - NULL
[4] bytes - Entity Type
[1] bytes - NULL
[4] bytes - Entity UID
[1] bytes - NULL
[char]    - Entity Enum string (Null Terminated)
[4] bytes - Header Size (Base Properties)
~Base Properties of the Entity
~ Everything is passed by CRC String Values (Relative to Object, Creature similar to Bin Files)
~Followed by Default CTC commands (Unless overridden in level script)

Misc Notes

Saved Npc's section (Not Compressed)
16 Bytes - SAVED_NPC_NAMES (Null Terminated)
4 Byte - Block Size

Then Begins NPC names:

8 bytes (64 bit) - NPC UID
4 bytes - Always 0A000000? seems byte size of "UNATTACHED"
10 Bytes - "UNATTACHED"?
~Unicode text string. Null Terminated Unicode (00 00)

Then Player information begins:
7 Bytes - "PLAYER" (Null Terminated)
4 Bytes - Size of PLAYER
4 Bytes - 27C8AD96  (CRC String = PlayerCharacterUID)
8 Bytes - Player UID (Quad)
~Current Map String (Null Terminated)

Quest Section Begins (lzo1x_999 compressed, view as txt)
7 Bytes - "QUESTS" (NULL terminated)
4 Bytes - Block Size
4 Bytes - Decompressed Size
2 Byte - Compressed size
~lzo compression

Next is REGIONS (Not Compressed)
8 Bytes - "REGIONS" (NULL Terminated)
4 Bytes - Block Size
4 Bytes - Null
4 Bytes - Number of sections (or regions)
~ Regions begin Ascii text followed by a couple 00 01 patterns

Next is FACTIONS (lzo1x_999 compressed)
9 Bytes - "FACTIONS" (NULL Terminated)
4 Bytes - Compressed Block Size
4 Bytes - C3450E4F (CRC String = NumberOfFactions)
4 Bytes - Number of Files
4 Bytes - D1F50398  (CRC String Unknown)

Each file is individually lzo'd compressed
4 Bytes - decompressed size
2 Bytes - compressed size

Auto Trait Implementations

impl RefUnwindSafe for Save

impl Send for Save

impl Sync for Save

impl Unpin for Save

impl UnwindSafe for Save

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.