Difference between revisions of "FF8/GameSaveFormat"
Jump to navigation
Jump to search
Qhimm>Myst6re |
Qhimm>Myst6re |
||
Line 1: | Line 1: | ||
== The save format == | == The save format == | ||
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;" | {| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;" | ||
Line 8: | Line 6: | ||
! style="background:rgb(204,204,204)" | Data | ! style="background:rgb(204,204,204)" | Data | ||
|- | |- | ||
| | | 0x0000 | ||
| 2 bytes | | 2 bytes | ||
| Checksum | | Checksum | ||
|- | |- | ||
| | | 0x0002 | ||
| 2 bytes | | 2 bytes | ||
| Always 0x08FF | | Always 0x08FF | ||
|- | |- | ||
| | | 0x0004 | ||
| 2 bytes | | 2 bytes | ||
| '''Preview:''' Location ID | | '''Preview:''' Location ID | ||
|- | |- | ||
| | | 0x0006 | ||
| 2 bytes | | 2 bytes | ||
| '''Preview:''' Lead character's current HP | | '''Preview:''' Lead character's current HP | ||
|- | |- | ||
| | | 0x0008 | ||
| 2 bytes | | 2 bytes | ||
| '''Preview:''' Lead character's max HP | | '''Preview:''' Lead character's max HP | ||
|- | |- | ||
| | | 0x000A | ||
| 2 bytes | | 2 bytes | ||
| '''Preview:''' save count | | '''Preview:''' save count | ||
|- | |- | ||
| | | 0x000C | ||
| 4 bytes | | 4 bytes | ||
| '''Preview:''' Amount of Gil | | '''Preview:''' Amount of Gil | ||
|- | |- | ||
| | | 0x0020 | ||
| 4 bytes | | 4 bytes | ||
| '''Preview:''' Total number of seconds played | | '''Preview:''' Total number of seconds played | ||
|- | |- | ||
| | | 0x0024 | ||
| 1 byte | | 1 byte | ||
| '''Preview:''' Lead character's level | | '''Preview:''' Lead character's level | ||
|- | |- | ||
| | | 0x0025 | ||
| 1 byte | | 1 byte | ||
| '''Preview:''' 1st character's portrait | | '''Preview:''' 1st character's portrait | ||
|- | |- | ||
| | | 0x0026 | ||
| 1 byte | | 1 byte | ||
| '''Preview:''' 2nd character's portrait | | '''Preview:''' 2nd character's portrait | ||
|- | |- | ||
| | | 0x0027 | ||
| 1 byte | | 1 byte | ||
| '''Preview:''' 3rd character's portrait | | '''Preview:''' 3rd character's portrait | ||
|- | |- | ||
| | | 0x0028 | ||
| 12 bytes | | 12 bytes | ||
| '''Preview:''' Squall's name (0x00 terminated) | | '''Preview:''' Squall's name (0x00 terminated) | ||
|- | |- | ||
| | | 0x0034 | ||
| 12 bytes | | 12 bytes | ||
| '''Preview:''' Rinoa's name (0x00 terminated) | | '''Preview:''' Rinoa's name (0x00 terminated) | ||
|- | |- | ||
| | | 0x0040 | ||
| 12 bytes | | 12 bytes | ||
| '''Preview:''' Angelo's name (0x00 terminated) | | '''Preview:''' Angelo's name (0x00 terminated) | ||
|- | |- | ||
| | | 0x004C | ||
| 12 bytes | | 12 bytes | ||
| '''Preview:''' Boko's name (0x00 terminated) | | '''Preview:''' Boko's name (0x00 terminated) | ||
|- | |- | ||
| | | 0x0058 | ||
| 4 bytes | | 4 bytes | ||
| '''Preview:''' Current Disk (0 based) | | '''Preview:''' Current Disk (0 based) | ||
|- | |- | ||
| | | 0x005C | ||
| 4 bytes | | 4 bytes | ||
| '''Preview:''' Current save (last saved game) | | '''Preview:''' Current save (last saved game) | ||
|- | |||
| 0x0060 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Quetzalcoatl | |||
|- | |||
| 0x00A4 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Shiva | |||
|- | |||
| 0x00E8 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Ifrit | |||
|- | |||
| 0x012C | |||
| 68 bytes | |||
| '''Guardian Forces:''' Siren | |||
|- | |||
| 0x0170 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Brothers | |||
|- | |||
| 0x01B4 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Diablos | |||
|- | |||
| 0x01F8 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Carbuncle | |||
|- | |||
| 0x023C | |||
| 68 bytes | |||
| '''Guardian Forces:''' Leviathan | |||
|- | |||
| 0x0280 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Pandemonia | |||
|- | |||
| 0x02C4 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Cerberus | |||
|- | |||
| 0x0308 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Alexander | |||
|- | |||
| 0x034C | |||
| 68 bytes | |||
| '''Guardian Forces:''' Doomtrain | |||
|- | |||
| 0x0390 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Bahamut | |||
|- | |||
| 0x03D4 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Cactuar | |||
|- | |||
| 0x0418 | |||
| 68 bytes | |||
| '''Guardian Forces:''' Tonberry | |||
|- | |||
| 0x045C | |||
| 68 bytes | |||
| '''Guardian Forces:''' Eden | |||
|- | |||
| 0x04A0 | |||
| 152 bytes | |||
| '''Characters:''' Squall | |||
|- | |||
| 0x0538 | |||
| 152 bytes | |||
| '''Characters:''' Zell | |||
|- | |||
| 0x05D0 | |||
| 152 bytes | |||
| '''Characters:''' Irvine | |||
|- | |||
| 0x0668 | |||
| 152 bytes | |||
| '''Characters:''' Quistis | |||
|- | |||
| 0x0700 | |||
| 152 bytes | |||
| '''Characters:''' Rinoa | |||
|- | |||
| 0x0798 | |||
| 152 bytes | |||
| '''Characters:''' Selphie | |||
|- | |||
| 0x0830 | |||
| 152 bytes | |||
| '''Characters:''' Seifer | |||
|- | |||
| 0x08C8 | |||
| 152 bytes | |||
| '''Characters:''' Edea | |||
|- | |||
| 0x0960 | |||
| bytes | |||
| TODO | |||
|} | |} | ||
Line 85: | Line 183: | ||
The checksum calculation starts here. | The checksum calculation starts here. | ||
There are 16 G-F: Quetzalcoatl, Shiva, Ifrit, Siren, Brothers, Diablos, Carbuncle, Leviathan, Pandemonia, Cerberus, Alexander, Doomtrain, Bahamut, Cactuar, Tonberry, Eden.<br/> | |||
For each G-F: | |||
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;" | |||
! style="background:rgb(204,204,204)" | Offset | |||
! style="background:rgb(204,204,204)" | Size | |||
! style="background:rgb(204,204,204)" | Data | |||
|- | |||
| 0x00 | |||
| 12 bytes | |||
| Name (0x00 terminated) | |||
|- | |||
| 0x0C | |||
| 4 bytes | |||
| Experience | |||
|- | |||
| style="background:rgb(255,255,204)" | 0x10 | |||
| style="background:rgb(255,255,204)" | 1 byte | |||
| style="background:rgb(255,255,204)" | Unknown | |||
|- | |||
| 0x11 | |||
| 1 byte | |||
| Exists | |||
|- | |||
| 0x12 | |||
| 2 bytes | |||
| HP | |||
|- | |||
| 0x14 | |||
| 16 bytes | |||
| Complete abilities (1 bit = 1 ability completed, 9 bits unused) | |||
|- | |||
| 0x24 | |||
| 24 bytes | |||
| APs (1 byte = 1 ability of the GF, 2 bytes unused) | |||
|- | |||
| 0x3C | |||
| 2 bytes | |||
| Number of kills | |||
|- | |||
| 0x3E | |||
| 2 bytes | |||
| Number of KOs | |||
|- | |||
| 0x41 | |||
| 1 byte | |||
| Learning ability | |||
|- | |||
| 0x42 | |||
| 3 bytes | |||
| Forgotten abilities (1 bit = 1 ability of the GF forgotten, 2 bits unused) | |||
|} | |||
=== Characters === | |||
Squall, Zell, Irvine, Quistis, Rinoa, Selphie, Seifer, Edea. | |||
For each character: | |||
{| border="1" cellspacing="1" cellpadding="3" align="center" style="border: 1px solid black; border-collapse: collapse;" | |||
! style="background:rgb(204,204,204)" | Offset | |||
! style="background:rgb(204,204,204)" | Size | |||
! style="background:rgb(204,204,204)" | Data | |||
|- | |||
| 0x00 | |||
| 2 bytes | |||
| Current HPs | |||
|- | |||
| 0x02 | |||
| 2 bytes | |||
| Max HPs | |||
|- | |||
| 0x04 | |||
| 4 bytes | |||
| Experience | |||
|- | |||
| 0x08 | |||
| 1 byte | |||
| Model ID | |||
|- | |||
| 0x09 | |||
| 1 byte | |||
| Weapon ID | |||
|- | |||
| 0x0A | |||
| 1 byte | |||
| STR | |||
|- | |||
| 0x0B | |||
| 1 byte | |||
| VIT | |||
|- | |||
| 0x0C | |||
| 1 byte | |||
| MAG | |||
|- | |||
| 0x0D | |||
| 1 byte | |||
| SPR | |||
|- | |||
| 0x0E | |||
| 1 byte | |||
| SPD | |||
|- | |||
| 0x0F | |||
| 1 byte | |||
| LCK | |||
|- | |||
| 0x10 | |||
| 2*32 bytes | |||
| Magics | |||
|- | |||
| 0x50 | |||
| 3 bytes | |||
| Commands | |||
|- | |||
| 0x53 | |||
| 1 byte | |||
| ''Padding or unused command'' | |||
|- | |||
| 0x54 | |||
| 4 bytes | |||
| Abilities | |||
|- | |||
| 0x58 | |||
| 2 bytes | |||
| Junctionned GFs | |||
|- | |||
| style="background:rgb(255,255,204)" | 0x5A | |||
| style="background:rgb(255,255,204)" | 1 byte | |||
| style="background:rgb(255,255,204)" | Unknown | |||
|- | |||
| 0x5B | |||
| 1 byte | |||
| Alternative model (Normal, SeeD, Soldier...) | |||
|- | |||
| 0x5C | |||
| 1 byte | |||
| Junction HP | |||
|- | |||
| 0x5D | |||
| 1 byte | |||
| Junction STR | |||
|- | |||
| 0x5E | |||
| 1 byte | |||
| Junction VIT | |||
|- | |||
| 0x5F | |||
| 1 byte | |||
| Junction MAG | |||
|- | |||
| 0x60 | |||
| 1 byte | |||
| Junction SPR | |||
|- | |||
| 0x61 | |||
| 1 byte | |||
| Junction SPD | |||
|- | |||
| 0x62 | |||
| 1 byte | |||
| Junction EVA | |||
|- | |||
| 0x63 | |||
| 1 byte | |||
| Junction HIT | |||
|- | |||
| 0x64 | |||
| 1 byte | |||
| Junction LCK | |||
|- | |||
| 0x65 | |||
| 1 byte | |||
| Junction elemental attack | |||
|- | |||
| 0x66 | |||
| 1 byte | |||
| Junction mental attack | |||
|- | |||
| 0x67 | |||
| 4 bytes | |||
| Junction elemental defense | |||
|- | |||
| 0x6B | |||
| 4 bytes | |||
| Junction mental defense | |||
|- | |||
| style="background:rgb(255,255,204)" | 0x6F | |||
| style="background:rgb(255,255,204)" | 1 byte | |||
| style="background:rgb(255,255,204)" | Unknown (padding?) | |||
|- | |||
| 0x70 | |||
| 16 * 2 bytes | |||
| Compatibility with GFs | |||
|- | |||
| 0x90 | |||
| 2 bytes | |||
| Number of kills | |||
|- | |||
| 0x92 | |||
| 2 bytes | |||
| Number of KOs | |||
|- | |||
| 0x94 | |||
| 1 byte | |||
| Exists | |||
|- | |||
| style="background:rgb(255,255,204)" | 0x95 | |||
| style="background:rgb(255,255,204)" | 1 byte | |||
| style="background:rgb(255,255,204)" | Unknown | |||
|- | |||
| 0x96 | |||
| 1 byte | |||
| Mental Status | |||
|- | |||
| style="background:rgb(255,255,204)" | 0x97 | |||
| style="background:rgb(255,255,204)" | 1 byte | |||
| style="background:rgb(255,255,204)" | Unknown | |||
|- | |||
|} |
Revision as of 14:50, 12 August 2012
The save format
Offset | Size | Data |
---|---|---|
0x0000 | 2 bytes | Checksum |
0x0002 | 2 bytes | Always 0x08FF |
0x0004 | 2 bytes | Preview: Location ID |
0x0006 | 2 bytes | Preview: Lead character's current HP |
0x0008 | 2 bytes | Preview: Lead character's max HP |
0x000A | 2 bytes | Preview: save count |
0x000C | 4 bytes | Preview: Amount of Gil |
0x0020 | 4 bytes | Preview: Total number of seconds played |
0x0024 | 1 byte | Preview: Lead character's level |
0x0025 | 1 byte | Preview: 1st character's portrait |
0x0026 | 1 byte | Preview: 2nd character's portrait |
0x0027 | 1 byte | Preview: 3rd character's portrait |
0x0028 | 12 bytes | Preview: Squall's name (0x00 terminated) |
0x0034 | 12 bytes | Preview: Rinoa's name (0x00 terminated) |
0x0040 | 12 bytes | Preview: Angelo's name (0x00 terminated) |
0x004C | 12 bytes | Preview: Boko's name (0x00 terminated) |
0x0058 | 4 bytes | Preview: Current Disk (0 based) |
0x005C | 4 bytes | Preview: Current save (last saved game) |
0x0060 | 68 bytes | Guardian Forces: Quetzalcoatl |
0x00A4 | 68 bytes | Guardian Forces: Shiva |
0x00E8 | 68 bytes | Guardian Forces: Ifrit |
0x012C | 68 bytes | Guardian Forces: Siren |
0x0170 | 68 bytes | Guardian Forces: Brothers |
0x01B4 | 68 bytes | Guardian Forces: Diablos |
0x01F8 | 68 bytes | Guardian Forces: Carbuncle |
0x023C | 68 bytes | Guardian Forces: Leviathan |
0x0280 | 68 bytes | Guardian Forces: Pandemonia |
0x02C4 | 68 bytes | Guardian Forces: Cerberus |
0x0308 | 68 bytes | Guardian Forces: Alexander |
0x034C | 68 bytes | Guardian Forces: Doomtrain |
0x0390 | 68 bytes | Guardian Forces: Bahamut |
0x03D4 | 68 bytes | Guardian Forces: Cactuar |
0x0418 | 68 bytes | Guardian Forces: Tonberry |
0x045C | 68 bytes | Guardian Forces: Eden |
0x04A0 | 152 bytes | Characters: Squall |
0x0538 | 152 bytes | Characters: Zell |
0x05D0 | 152 bytes | Characters: Irvine |
0x0668 | 152 bytes | Characters: Quistis |
0x0700 | 152 bytes | Characters: Rinoa |
0x0798 | 152 bytes | Characters: Selphie |
0x0830 | 152 bytes | Characters: Seifer |
0x08C8 | 152 bytes | Characters: Edea |
0x0960 | bytes | TODO |
Guardian Forces
The checksum calculation starts here.
There are 16 G-F: Quetzalcoatl, Shiva, Ifrit, Siren, Brothers, Diablos, Carbuncle, Leviathan, Pandemonia, Cerberus, Alexander, Doomtrain, Bahamut, Cactuar, Tonberry, Eden.
For each G-F:
Offset | Size | Data |
---|---|---|
0x00 | 12 bytes | Name (0x00 terminated) |
0x0C | 4 bytes | Experience |
0x10 | 1 byte | Unknown |
0x11 | 1 byte | Exists |
0x12 | 2 bytes | HP |
0x14 | 16 bytes | Complete abilities (1 bit = 1 ability completed, 9 bits unused) |
0x24 | 24 bytes | APs (1 byte = 1 ability of the GF, 2 bytes unused) |
0x3C | 2 bytes | Number of kills |
0x3E | 2 bytes | Number of KOs |
0x41 | 1 byte | Learning ability |
0x42 | 3 bytes | Forgotten abilities (1 bit = 1 ability of the GF forgotten, 2 bits unused) |
Characters
Squall, Zell, Irvine, Quistis, Rinoa, Selphie, Seifer, Edea. For each character:
Offset | Size | Data |
---|---|---|
0x00 | 2 bytes | Current HPs |
0x02 | 2 bytes | Max HPs |
0x04 | 4 bytes | Experience |
0x08 | 1 byte | Model ID |
0x09 | 1 byte | Weapon ID |
0x0A | 1 byte | STR |
0x0B | 1 byte | VIT |
0x0C | 1 byte | MAG |
0x0D | 1 byte | SPR |
0x0E | 1 byte | SPD |
0x0F | 1 byte | LCK |
0x10 | 2*32 bytes | Magics |
0x50 | 3 bytes | Commands |
0x53 | 1 byte | Padding or unused command |
0x54 | 4 bytes | Abilities |
0x58 | 2 bytes | Junctionned GFs |
0x5A | 1 byte | Unknown |
0x5B | 1 byte | Alternative model (Normal, SeeD, Soldier...) |
0x5C | 1 byte | Junction HP |
0x5D | 1 byte | Junction STR |
0x5E | 1 byte | Junction VIT |
0x5F | 1 byte | Junction MAG |
0x60 | 1 byte | Junction SPR |
0x61 | 1 byte | Junction SPD |
0x62 | 1 byte | Junction EVA |
0x63 | 1 byte | Junction HIT |
0x64 | 1 byte | Junction LCK |
0x65 | 1 byte | Junction elemental attack |
0x66 | 1 byte | Junction mental attack |
0x67 | 4 bytes | Junction elemental defense |
0x6B | 4 bytes | Junction mental defense |
0x6F | 1 byte | Unknown (padding?) |
0x70 | 16 * 2 bytes | Compatibility with GFs |
0x90 | 2 bytes | Number of kills |
0x92 | 2 bytes | Number of KOs |
0x94 | 1 byte | Exists |
0x95 | 1 byte | Unknown |
0x96 | 1 byte | Mental Status |
0x97 | 1 byte | Unknown |