FF7/Savemap
The Savemap
The following is the general save format for the game. This data excludes the header data that differs between the PSX and PC version.
Note: For the preview descriptions below, changing these values does not change any in-game values. These are only used so a player can preview the data within the save file when viewing the Save menu.
Offset | Length | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 4 bytes | Checksum (how to generate) | ||||||||||
0x0004 | 1 byte | Preview: Lead character's level | ||||||||||
0x0005 | 1 byte | Preview: Lead character's portrait | ||||||||||
0x00: Cloud 0x01: Barret 0x02: Tifa 0x03: Aeris 0x04: Red XIII 0x05: Yuffie 0x06: Cait Sith |
0x07: Vincent 0x08: Cid 0x09: Young Cloud 0x0A: Sephiroth 0x0B: Chocobo 0xFF: None | |||||||||||
0x0006 | 1 byte | Preview: 2nd character's portrait | ||||||||||
0x0007 | 1 byte | Preview: 3rd character's portrait | ||||||||||
0x0008 | 16 bytes | Preview: Lead character's name, terminated with 0xFF | ||||||||||
0x0018 | 2 bytes | Preview: Lead character's current HP | ||||||||||
0x001A | 2 bytes | Preview: Lead character's max HP | ||||||||||
0x001C | 2 bytes | Preview: Lead character's current MP | ||||||||||
0x001E | 2 bytes | Preview: Lead character's max MP | ||||||||||
0x0020 | 4 bytes | Preview: Amount of Gil | ||||||||||
0x0024 | 4 bytes | Preview: Total number of seconds played | ||||||||||
0x0028 | 32 bytes | Preview: Save location, FF Text format, terminated with 0xFF | ||||||||||
0x0048 | 3 bytes | RGB value for upper left corner of window | ||||||||||
0x004B | 3 bytes | RGB value for upper right corner of window | ||||||||||
0x004E | 3 bytes | RGB value for lower left corner of window | ||||||||||
0x0051 | 3 bytes | RGB value for lower right corner of window | ||||||||||
0x0054 | 132 bytes | Character record: Cloud [see below for Character record format] | ||||||||||
0x00D8 | 132 bytes | Character record: Barret | ||||||||||
0x015C | 132 bytes | Character record: Tifa | ||||||||||
0x01E0 | 132 bytes | Character record: Aeris | ||||||||||
0x0264 | 132 bytes | Character record: Red XIII | ||||||||||
0x02E8 | 132 bytes | Character record: Yuffie | ||||||||||
0x036C | 132 bytes | Character record: Cait Sith (or Young Cloud) | ||||||||||
0x03F0 | 132 bytes | Character record: Vincent (or Sephiroth) | ||||||||||
0x0474 | 132 bytes | Character record: Cid | ||||||||||
0x04F8 | 1 byte | Party member in slot 1 [uses same format as character portrait above] | ||||||||||
0x04F9 | 1 byte | Party member in slot 2 | ||||||||||
0x04FA | 1 byte | Party member in slot 3 | ||||||||||
0x04FB | 1 byte | 0xFF | ||||||||||
0x04FC | 640 bytes | Party Item stock, 2 bytes per item, 320 item slots max [See save item list below] | ||||||||||
0x077C | 800 bytes | Party Materia stock, 4 bytes per materia, 200 materia max [See save materia list ] | ||||||||||
0x0A9C | 192 bytes | Materia stolen by Yuffie, 4 bytes per materia, 48 materia max [See save materia list ] | ||||||||||
0x0B5C | 32 bytes | Unknown | ||||||||||
0x0B7C | 4 bytes | Party's Gil amount | ||||||||||
0x0B80 | 4 bytes | Total number of seconds played | ||||||||||
0x0B84 | 16 bytes | Unknown | ||||||||||
0x0B94 | 2 bytes | Current map | ||||||||||
0x0B96 | 2 bytes | Current location | ||||||||||
0x0B98 | 2 bytes | Unknown | ||||||||||
0x0B9A | 2 bytes | X location on world map | ||||||||||
0x0B9C | 2 bytes | Y location on world map | ||||||||||
0x0B9E | 2 bytes | Z location on world map | ||||||||||
0x0BA0 | 4 bytes | Unknown | ||||||||||
0x0BA4 | 2 bytes | [BEGINNING OF SCRIPT MEMORY BANK 1/2] | ||||||||||
0x0CA4 | [BEGINNING OF FIELD BANK 3/4] | |||||||||||
0x0DA4 | [BEGINNING OF FIELD BANK B/C] | |||||||||||
0x0EA4 | 1 byte | [BEGINNING OF FIELD BANK D/E] | ||||||||||
0x0FA4 | [BEGINNING OF FIELD BANK 7/F] | |||||||||||
0x10A3 | [END OF FIELD SCRIPT MEMORY BANKS] | |||||||||||
0x10A3 | 0x10AE | Unknown | ||||||||||
0x10AD | 2 bytes | PHS Locking Mask (1: Locked) | ||||||||||
| ||||||||||||
0x10AF | 2 bytes | PHS Visibility Mask (does not turn off party characters) | ||||||||||
| ||||||||||||
0x10B0 | 0x10D7 | Unknown | ||||||||||
0x10D8 | 1 byte | Battle Speed (0x00: fastest, 0xFF: slowest) | ||||||||||
0x10D9 | 1 byte | Battle Message Speed | ||||||||||
0x10DA | 1 byte | General configuration | ||||||||||
Sound: mono (0x00); stereo (0x01) | ||||||||||||
Controller: normal (0x00); customize (0x04) | ||||||||||||
Cursor: initial (0x00); memory (0x10) | ||||||||||||
ATB: Active (0x00); Recommended (0x40); Wait (0x80) | ||||||||||||
0x10DB | 1 byte | General configuration (continued) | ||||||||||
Camera angle: Auto (0x00); Fix (0x01) | ||||||||||||
Magic order: (game crashes if flag set to 0x18 or 0x1C) "1. restore attack indirect" (0x00) "2. restore indirect attack" (0x04) "3. attack indirect restore" (0x08) "4. attack restore indirect" (0x0C) "5. indirect restore attack" (0x10) "6. indirect attack restore" (0x14) | ||||||||||||
Extra battle window displaying information: Inactive (0x00); Active (0x40) | ||||||||||||
0x10DC | 16 bytes | Unknown | ||||||||||
0x10EC | 1 byte | Message Speed | ||||||||||
0x10ED | 7 bytes | Unknown |
Offset | Length | Description |
---|---|---|
0x00 | 1 byte | Character ID |
0x01 | 1 byte | Level (0-99) |
0x02 | 1 byte | Strength (0-255) |
0x03 | 1 byte | Vitality (0-255) |
0x04 | 1 byte | Magic (0-255) |
0x05 | 1 byte | Spirit (0-255) |
0x06 | 1 byte | Dexterity (0-255) |
0x07 | 1 byte | Luck (0-255) |
0x08 | 1 byte | Strength Bonus (Power Sources used) |
0x09 | 1 byte | Vitality Bonus (Guard Sources used) |
0x0A | 1 byte | Magic Bonus (Magic Sources used) |
0x0B | 1 byte | Spirit Bonus (Mind Sources used) |
0x0C | 1 byte | Dexterity Bonus (Speed Sources used) |
0x0D | 1 byte | Luck Bonus (Luck Sources used) |
0x0E | 1 byte | Current limit level (1-4) |
0x0F | 1 byte | Current limit bar (0xFF = limit break) |
0x10 | 12 bytes | Name (FF Text format) |
0x1C | 1 byte | Equipped weapon |
0x1D | 1 byte | Equipped armor |
0x1E | 1 byte | Equipped accessory |
0x1F | 1 byte | Character flags - 0x10-Sadness, 0x20-Fury |
0x20 | 1 byte | Char order - 0xFF-Normal, 0xFE-Back row |
0x21 | 1 byte | Level progress bar |
0x22 | 2 bytes | Learned limit skills |
0x24 | 2 bytes | Number of kills |
0x26 | 2 bytes | Times limit 1-1 has been used |
0x28 | 2 bytes | Times limit 2-1 has been used |
0x2A | 2 bytes | Times limit 3-1 has been used |
0x2C | 2 bytes | Current HP |
0x2E | 2 bytes | Base HP (before materia alterations) |
0x30 | 2 bytes | Current MP |
0x32 | 2 bytes | Base MP (before materia alterations) |
0x34 | 4 bytes | Unknown |
0x38 | 2 bytes | Maximum HP (after materia alterations) |
0x3A | 2 bytes | Maximum MP (after materia alterations) |
0x3C | 4 bytes | Current EXP |
0x40 | 4 bytes | Weapon materia slot number 1 |
0x44 | 4 bytes | Weapon materia slot number 2 |
0x48 | 4 bytes | Weapon materia slot number 3 |
0x4C | 4 bytes | Weapon materia slot number 4 |
0x50 | 4 bytes | Weapon materia slot number 5 |
0x54 | 4 bytes | Weapon materia slot number 6 |
0x58 | 4 bytes | Weapon materia slot number 7 |
0x5C | 4 bytes | Weapon materia slot number 8 |
0x60 | 4 bytes | Armor materia slot number 1 |
0x64 | 4 bytes | Armor materia slot number 2 |
0x68 | 4 bytes | Armor materia slot number 3 |
0x6C | 4 bytes | Armor materia slot number 4 |
0x70 | 4 bytes | Armor materia slot number 5 |
0x74 | 4 bytes | Armor materia slot number 6 |
0x78 | 4 bytes | Armor materia slot number 7 |
0x7C | 4 bytes | Armor materia slot number 8 |
0x80 | 4 bytes | EXP to next level |
Offset | Length | Description |
---|---|---|
0x0 | 2 bytes | Sprint Speed |
0x2 | 2 bytes | Max Sprint Speed |
0x4 | 2 bytes | Speed |
0x6 | 2 bytes | Max Speed |
0x8 | 1 byte | Acceleration |
0x9 | 1 byte | Cooperation |
0xA | 1 byte | Intelligence |
0xB | 1 byte | Personality |
0xC | 1 byte | Pcount (?) |
0xD | 1 byte | Number of races won |
0xE | 1 byte | 1: female) |
0xF | 1 byte | Type (Yellow, Green, Blue, Black, Gold) |
Save Item List
Items are loaded sequentially into data determined by the order they are placed in the KERNEL.BIN file. They are stored using 9 bits for an index and 7 bits for quantity:
In Binary: XXXXXXXX QQQQQQQX
Where X is the index and Q is the quantity. There are 128 Items (including the blank ones) and 128 Weapons. These are indexes 0-255. The Armors and Accessories are then loaded sequentially (32 Armors then 32 Accessories) and indexed 256-319. If the index of the stored item is over 255 then the final bit there is 1. Quantity is limited to 99 (1100011 in binary).
Save Materia List
Materia is stored as an index followed by the amount of AP on that instance of Materia.
KERNEL.BIN Section 4 Entry
During game initialization, section 4 from KERNEL.BIN is decompressed and copied into RAM. This is all the initial values and structure for most of the Save, excluding the header data and the tail of the last bank (0x0054 to 0x0FE7).