Difference between revisions of "Saves (GTA 3)"
Thehambone (talk | contribs) (Block 1: Player peds; block 3: Vehicles) |
|||
Line 297: | Line 297: | ||
|0x0000 ||dword ||block size | |0x0000 ||dword ||block size | ||
|- | |- | ||
− | |0x0004 || | + | |0x0004 ||- ||start of block, data below |
|} | |} | ||
+ | <div style="margin-left: 3em;"> | ||
{|class="wikitable" | {|class="wikitable" | ||
|+PlayerPeds | |+PlayerPeds | ||
Line 313: | Line 314: | ||
|} | |} | ||
+ | <div style="margin-left: 3em;"> | ||
{|class="wikitable" | {|class="wikitable" | ||
|+PlayerPed | |+PlayerPed | ||
Line 325: | Line 327: | ||
|0x0006 ||dword ||(unknown) ped reference | |0x0006 ||dword ||(unknown) ped reference | ||
|- | |- | ||
− | |0x000A ||CPed ||CPed dump ( | + | |0x000A ||CPed ||CPed dump (0x05F0 bytes) |
+ | |} | ||
+ | |||
+ | <div style="margin-left: 3em;"> | ||
+ | {|class="wikitable" | ||
+ | |+CPed | ||
+ | !OFFSET | ||
+ | !TYPE | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 ||byte[52] ||unknown | ||
+ | |- | ||
+ | |0x0034 ||float[3] ||position (X, Y, Z) | ||
+ | |- | ||
+ | |0x0040 ||byte[1456] ||unknown | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |0x05FA ||dword ||max wanted level | ||
|- | |- | ||
− | | | + | |0x05FE ||dword ||max chaos level |
|- | |- | ||
− | | | + | |0x0602 ||char[24] ||model name |
|- | |- | ||
− | | | + | |0x061A ||byte[2] ||(align) |
|} | |} | ||
+ | </div> | ||
+ | </div> | ||
====Block 2: Garages==== | ====Block 2: Garages==== | ||
Line 362: | Line 385: | ||
!DESCRIPTION | !DESCRIPTION | ||
|- | |- | ||
− | |0x0000 ||dword ||garages count | + | |0x0000 ||dword ||garages count (n) |
|- | |- | ||
|0x0004 ||dword ||free bombs (opcode [[021D]]) | |0x0004 ||dword ||free bombs (opcode [[021D]]) | ||
Line 384: | Line 407: | ||
|0x0028 ||StoredCar[18] ||40 bytes each, stored cars | |0x0028 ||StoredCar[18] ||40 bytes each, stored cars | ||
|} | |} | ||
+ | |||
<div style="margin-left: 3em;"> | <div style="margin-left: 3em;"> | ||
{|class="wikitable" | {|class="wikitable" | ||
Line 413: | Line 437: | ||
|0x0026 ||byte[2] ||(align) | |0x0026 ||byte[2] ||(align) | ||
|} | |} | ||
+ | |||
</div> | </div> | ||
{|class="wikitable" | {|class="wikitable" | ||
− | |0x02F8 ||Garage[ | + | |0x02F8 ||Garage[n] ||140 bytes each, garages |
|} | |} | ||
+ | |||
<div style="margin-left: 3em;"> | <div style="margin-left: 3em;"> | ||
{|class="wikitable" | {|class="wikitable" | ||
Line 521: | Line 547: | ||
</div> | </div> | ||
</div> | </div> | ||
+ | |||
Vehicle immunities: | Vehicle immunities: | ||
*0b0000000'''1''' = bulletproof | *0b0000000'''1''' = bulletproof | ||
Line 549: | Line 576: | ||
====Block 3: Vehicles==== | ====Block 3: Vehicles==== | ||
+ | {|class="wikitable" | ||
+ | !TYPE | ||
+ | !OFFSET | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 ||dword ||block size | ||
+ | |- | ||
+ | |0x0004 ||- ||start of block, data below | ||
+ | |} | ||
+ | |||
+ | <div style="margin-left: 3em;"> | ||
+ | {|class="wikitable" | ||
+ | |+Vehicles | ||
+ | !TYPE | ||
+ | !OFFSET | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 ||dword ||number of vehicles (n) | ||
+ | |- | ||
+ | |0x0004 ||dword ||number of boats (n2) | ||
+ | |- | ||
+ | |0x0008 ||Vehicle[n] ||1458 bytes each, vehicles array | ||
+ | |} | ||
+ | |||
+ | <div style="margin-left: 3em;"> | ||
+ | {|class="wikitable" | ||
+ | |+Vehicle | ||
+ | !TYPE | ||
+ | !OFFSET | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 ||dword ||unknown | ||
+ | |- | ||
+ | |0x0004 ||word ||model ID | ||
+ | |- | ||
+ | |0x0006 ||dword ||unknown | ||
+ | |- | ||
+ | |0x000A ||CVehicle ||CVehicle dump | ||
+ | |} | ||
+ | |||
+ | <div style="margin-left: 3em;"> | ||
+ | {|class="wikitable" | ||
+ | |+CVehicle | ||
+ | !OFFSET | ||
+ | !TYPE | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 ||byte[52] ||unknown | ||
+ | |- | ||
+ | |0x0034 ||float[3] ||position (X, Y, Z) | ||
+ | |- | ||
+ | |0x0040 ||byte[1384] ||unknown | ||
+ | |} | ||
+ | </div> | ||
+ | </div> | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |0x0000 + (1458 * n) ||Boat[n2] ||1166(?) bytes each, boats array | ||
+ | |} | ||
+ | |||
+ | <div style="margin-left: 3em;"> | ||
+ | {|class="wikitable" | ||
+ | |+Boat | ||
+ | !TYPE | ||
+ | !OFFSET | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 ||dword ||unknown | ||
+ | |- | ||
+ | |0x0004 ||word ||model ID | ||
+ | |- | ||
+ | |0x0006 ||dword ||unknown | ||
+ | |- | ||
+ | |0x000A ||CBoat ||CBoat dump | ||
+ | |} | ||
+ | |||
+ | <div style="margin-left: 3em;"> | ||
+ | {|class="wikitable" | ||
+ | |+CBoat | ||
+ | !OFFSET | ||
+ | !TYPE | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 ||byte[52] ||unknown | ||
+ | |- | ||
+ | |0x0034 ||float[3] ||position (X, Y, Z) | ||
+ | |- | ||
+ | |0x0040 ||byte[1092] ||unknown | ||
+ | |} | ||
+ | </div> | ||
+ | </div> | ||
+ | |||
====Block 4: Objects==== | ====Block 4: Objects==== | ||
====Block 5: Path find==== | ====Block 5: Path find==== | ||
Line 633: | Line 752: | ||
|0x0004 ||- ||start of block data | |0x0004 ||- ||start of block data | ||
|} | |} | ||
+ | |||
<div style="margin-left: 3em;"> | <div style="margin-left: 3em;"> | ||
{|class="wikitable" | {|class="wikitable" | ||
Line 644: | Line 764: | ||
|0x0004 ||- ||start of CarGeneratorData | |0x0004 ||- ||start of CarGeneratorData | ||
|} | |} | ||
+ | |||
<div style="margin-left: 3em;"> | <div style="margin-left: 3em;"> | ||
{|class="wikitable" | {|class="wikitable" | ||
Line 655: | Line 776: | ||
|0x0004 ||- ||start of header | |0x0004 ||- ||start of header | ||
|} | |} | ||
+ | |||
<div style="margin-left: 3em;"> | <div style="margin-left: 3em;"> | ||
{|class="wikitable" | {|class="wikitable" | ||
Line 678: | Line 800: | ||
|0x0014 ||CarGenerator[n] ||72 bytes each, car generator structs | |0x0014 ||CarGenerator[n] ||72 bytes each, car generator structs | ||
|} | |} | ||
+ | |||
<div style="margin-left: 3em;"> | <div style="margin-left: 3em;"> | ||
{|class="wikitable" | {|class="wikitable" |
Revision as of 18:59, 31 January 2015
This article deals with the format of a save game file for the PC version of GTA 3.
Location
By default, the game places its save game files into the folder "GTA3 User Files" which is located in the current user's Documents folder. The location of this folder varies depending upon the version of Windows installed.
The save files themselves are named in the format GTA3sfX.b where X represents the in-game slot number. There are 8 slots available in the game (1-8).
Format Details
- Save files are ALWAYS 0x3145C (201820) bytes long.
- Byte order is little endian. For example, the number 3452 (0x0D7C) is represented as as 0x7C 0x0D.
- File is divided into 20 blocks, followed by padding and then ending with a 4-byte checksum
Data Blocks
There is a DWORD value preceding any block of data which is equal to the size of the block.
Block 0: Miscellaneous
Game "meta-information" giving the overall state of things. Also includes 'TheScripts' sub-block.
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | wchar_t[24] | save name (long names are truncated on the save/load screen) |
0x0034 | word | SYSTEMTIME wYear |
0x0036 | word | SYSTEMTIME wMonth |
0x0038 | word | SYSTEMTIME wDayOfWeek |
0x003A | word | SYSTEMTIME wDay |
0x003C | word | SYSTEMTIME wHour |
0x003E | word | SYSTEMTIME wMinute |
0x0040 | word | SYSTEMTIME wSecond |
0x0042 | word | SYSTEMTIME wMilliseconds |
0x0044 | dword | unknown |
0x0048 | enum | current island (1=Portland; 2=Staunton; 3=Shoreside Vale) |
0x004C | float[3] | camera coordinates (x,y,z) |
0x0058 | dword | length (ms) of in-game minute |
0x005C | dword | last clock tick (weather timer) |
0x0060 | byte | game hour |
0x0061 | byte[3] | (align) |
0x0064 | byte | game minute |
0x0065 | byte[3] | (align) |
0x0068 | word | current pad mode |
0x006A | byte[2] | (align) |
0x006C | dword | time in milliseconds (global timer) |
0x0070 | float | time scale (opcode 051D) |
0x0074 | float | time step (frame delta time) |
0x0078 | float | time step (not clipped) |
0x007C | dword | number of the frames processed from the beginning of the game |
0x0080 | float | time step #2 (constant 1.0, unused) |
0x0084 | float | frames per update (constant 1.0, unused) |
0x0088 | float | time scale (constant 1.0, unused) |
0x008C | word | old weather type |
0x008E | byte[2] | (align) |
0x0090 | word | new weather type |
0x0092 | byte[2] | (align) |
0x0094 | word | forced weather type |
0x0096 | byte[2] | (align) |
0x0098 | float | weather interpolation value |
0x009C | byte[24] | compilation date and time (unused, always 0) |
0x00B4 | dword | weather type in list |
0x00B8 | float | (unknown, camera related) |
0x00BC | float | (unknown, camera related) |
0x00C0 | TheScripts | various scripts information |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | char[4] | 'SCR\0' signature |
0x0008 | dword | size of ScriptData structure |
0x000C | ScriptData | data dumped from the main.scm |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | script global variable space size (n) |
0x0004 | dword[n/4] | script global variables dump |
0x0004 + n | dword | size of ScriptInfo structure (always 0x03C8) |
0x0008 + n | ScriptInfo | various info from scripts |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | $onmission offset in global variable space |
0x0004 | ContactInfo[16] | 8 bytes each, contact info |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | mission flag (opcode 0181) |
0x0004 | dword | base brief (opcode 0182) |
0x0084 | Unknown[4] | (unknown) |
0x0184 | dword | last mission passed time |
0x0188 | BuildingSwap[25] | 16 bytes each, building model replacements |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | type |
0x0004 | dword | building handle |
0x0008 | dword | new model |
0x000C | dword | old model |
0x0318 | InvisibliltySetting[20] | 8 bytes each, invisible objects |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | type |
0x0004 | dword | handle |
0x03B8 | byte | already running a mission script flag (0 = false, 1 = true) |
0x03B9 | byte[3] | (align) |
0x03C0 | dword | size of the MAIN section in the main.scm |
0x03C4 | dword | size of largest mission |
0x03C8 | word | number of exclusive mission scripts |
0x03CA | byte[2] | (align) |
0x03D0 + n | dword | number of active scripts (n2) |
0x03D4 + n | CRunningScript[n2] | 136 bytes each, active scripts |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | CRunningScript * | next script pointer |
0x0004 | CRunningScript * | previous script pointer |
0x0008 | char[8] | name |
0x0010 | dword | current ip |
0x0014 | dword[4] | return stack |
0x0024 | dword | (unknown) |
0x0028 | dword | (unknown) |
0x002C | word | stack counter |
0x002E | word | (unknown) |
0x0030 | dword[16] | local variables |
0x0070 | dword | timerA |
0x0074 | dword | timerB |
0x0078 | byte | if result |
0x0079 | byte | (unknown) |
0x007A | byte | (unknown) |
0x007B | byte | (align) |
0x007C | dword | wake time |
0x0080 | word | if number |
0x0082 | byte | (unknown) |
0x0083 | byte | (unknown) |
0x0084 | byte | (unknown) |
0x0085 | byte | (unknown) |
0x0086 | byte | (unknown) |
0x0087 | byte | (unknown) |
Block 1: Player peds
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | - | start of block, data below |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | dword | players count (n) |
0x0008 | PlayerPed[n] | player peds array |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | unknown |
0x0004 | word | unknown |
0x0006 | dword | (unknown) ped reference |
0x000A | CPed | CPed dump (0x05F0 bytes) |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | byte[52] | unknown |
0x0034 | float[3] | position (X, Y, Z) |
0x0040 | byte[1456] | unknown |
0x05FA | dword | max wanted level |
0x05FE | dword | max chaos level |
0x0602 | char[24] | model name |
0x061A | byte[2] | (align) |
Block 2: Garages
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | - | start of block, data below |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | GarageData size (4 bytes less than above) |
0x0004 | - | start of GarageData |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | garages count (n) |
0x0004 | dword | free bombs (opcode 021D) |
0x0008 | dword | free resprays (opcode 0335) |
0x000C | dword | (unknown) |
0x0010 | dword | (unknwon) |
0x0014 | dword | (unknown) |
0x0018 | dword | Portland IE status (bitstring) (opcode 03D4) |
0x001C | dword | Shoreside IE status |
0x0020 | dword | unused IE status |
0x0024 | dword | time when 'GA_21' was last shown |
0x0028 | StoredCar[18] | 40 bytes each, stored cars |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | model ID |
0x0004 | float[3] | position (X, Y, Z) |
0x0010 | float[3] | vector rotation |
0x001C | dword | immunities (bitstring) (see below) |
0x0020 | byte | primary color ID |
0x0021 | byte | secondary color ID |
0x0022 | byte | radio station ID (see below) |
0x0023 | byte | model variation A |
0x0024 | byte | model variation B |
0x0025 | byte | bomb type ID (see below) |
0x0026 | byte[2] | (align) |
0x02F8 | Garage[n] | 140 bytes each, garages |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | byte | garage type ID (see Garage) |
0x0001 | byte | (unknown) |
0x0002 | byte | (unknown) |
0x0003 | byte | (unknown) |
0x0004 | byte | (unknown) |
0x0005 | byte | (unknown) |
0x0006 | byte[2] | (align) |
0x0008 | dword | (unknown) |
0x000C | dword | (unknown) pointer |
0x0010 | dword | (unknown) pointer |
0x0014 | byte | (unknown) |
0x0015 | byte | (unknown) |
0x0016 | byte | (unknown) |
0x0017 | byte | (unknown) |
0x0018 | byte | (unknown) |
0x0019 | byte | (unknown) |
0x001A | byte | (unknown) |
0x001B | byte | (align) |
0x001C | float[6] | position (x1, x2, y1, y2, z1, z2) |
0x0034 | float | door open start (z coord) (how far door is open when garage is loaded into view) |
0x0038 | float | door open (z coord) (how far door can open) |
0x003C | float | (unknown) x coord |
0x0040 | float | (unknown) y coord |
0x0044 | float | (unknown) x coord |
0x0048 | float | (unknown) y coord |
0x004C | float | door A position (z coord) |
0x0050 | float | door B position (z coord) |
0x0054 | dword | (unknown) |
0x0058 | byte | (unknown) |
0x0059 | byte[3] | (align) |
0x005C | dword | (unknown) |
0x0060 | dword | (unknown) |
0x0064 | dword | (unknown) |
0x0068 | float | (unknown) |
0x006C | float | (unknown) |
0x0070 | float | (unknown) |
0x0074 | float | (unknown) |
0x0078 | float | (unknown) |
0x007C | float | (unknown) |
0x0080 | dword | (unknown) |
0x0084 | byte | (unknown) |
0x0085 | byte | (unknown) |
0x0086 | byte | (unknown) |
0x0087 | byte | (unknown) |
0x0088 | byte | (unknown) |
0x0089 | byte | (unknown) |
0x008A | byte[2] | (align) |
Vehicle immunities:
- 0b00000001 = bulletproof
- 0b00000010 = fireproof
- 0b00000100 = explosion-proof
- 0b00001000 = collision-proof
- 0b00010000 = ?
Radio stations:
- 0 = Head Radio
- 1 = Double Clef FM
- 2 = Jah Radio
- 3 = Rise FM
- 4 = Lips 106
- 5 = Game FM
- 6 = MSX FM
- 7 = Flashback 95.6
- 8 = Chatterbox 109
- 9 = User track player (if user tracks loaded, random station otherwise)
- 10 = Police radio
- 11 = Radio off
Bomb types:
- 0 = no bomb
- 1 = timer bomb
- 2 = ignition bomb
- 3 = remote bomb
- 4 = timer bomb (armed)
- 5 = ignition bomb (armed)
Block 3: Vehicles
TYPE | OFFSET | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | - | start of block, data below |
TYPE | OFFSET | DESCRIPTION |
---|---|---|
0x0000 | dword | number of vehicles (n) |
0x0004 | dword | number of boats (n2) |
0x0008 | Vehicle[n] | 1458 bytes each, vehicles array |
TYPE | OFFSET | DESCRIPTION |
---|---|---|
0x0000 | dword | unknown |
0x0004 | word | model ID |
0x0006 | dword | unknown |
0x000A | CVehicle | CVehicle dump |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | byte[52] | unknown |
0x0034 | float[3] | position (X, Y, Z) |
0x0040 | byte[1384] | unknown |
0x0000 + (1458 * n) | Boat[n2] | 1166(?) bytes each, boats array |
TYPE | OFFSET | DESCRIPTION |
---|---|---|
0x0000 | dword | unknown |
0x0004 | word | model ID |
0x0006 | dword | unknown |
0x000A | CBoat | CBoat dump |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | byte[52] | unknown |
0x0034 | float[3] | position (X, Y, Z) |
0x0040 | byte[1092] | unknown |
Block 4: Objects
Block 5: Path find
Block 6: Cranes
Block 7: Pickups
Block 8: Phone info
Block 9: Restarts
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size (constant 0x128) |
0x0004 | RestartBlock | restart block |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size (constant 0x124) |
0x0004 | char[4] | 'RST\0' signature |
0x0008 | RestartData | restart data |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | RestartPoint[8] | restart point after wasted |
0x0084 | RestartPoint[8] | restart point after busted |
0x0104 | word | wasted restart points count |
0x0106 | word | busted restart points count |
0x0108 | byte | override next restart flag (opcodes 016E, 0255) |
0x0109 | byte[3] | (align) |
0x010C | RestartPoint | overriden restart point (opcodes 016E, 0255) |
0x011C | byte | fade in after next death flag (opcode 040F) |
0x011D | byte | fade in after next arrest flag (opcode 040E) |
0x011E | byte | override hospital level flag (opcode 041F) |
0x011F | byte | override police level flag (opcode 0420) |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | float[3] | x,y,z coordinates |
0x000C | float | z_angle |
Block 10: Radar
Block 11: Zones
Block 12: Gangs
Block 13: Car Generators
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | - | start of block data |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | char[4] | 'CGN\0' signature |
0x0004 | - | start of CarGeneratorData |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | size of header (always 0x0C) |
0x0004 | - | start of header |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | car generators count (n) |
0x0004 | dword | active car generators count |
0x0008 | byte | process counter |
0x0009 | byte | generate even if player is close counter |
0x000A | byte[2] | (align) |
0x0010 | dword | size of car generator structs |
0x0014 | CarGenerator[n] | 72 bytes each, car generator structs |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | model ID |
0x0004 | float[3] | position (X, Y, Z) |
0x0010 | float | z angle |
0x0014 | word | primary color ID |
0x0016 | word | secondary color ID |
0x0018 | byte | force spawn |
0x0019 | byte | alarm (percentage) |
0x001A | byte | locked (percentage) |
0x001B | byte | (align) |
0x001C | word | min delay |
0x001E | word | max delay |
0x0020 | dword | timestamp (time last stolen?) |
0x0024 | dword | (unknown) |
0x0028 | dword | (unknown) |
0x002C | float | (unknown) |
0x0030 | float | (unknown) |
0x0034 | float | (unknown) |
0x0038 | float | (unknown) |
0x003C | float | (unknown) |
0x0040 | float | (unknown) |
0x0044 | dword | (unknown) |
Block 14: Particles
Block 15: Audio script objects
Block 16: Player info
Block 17: Stats
Block 18: Streaming
Block 19: Ped types
Padding
Following the last data block is a variable amount of padding. Since every save file is exactly 0x3145C bytes in length this padding is necessary to fill the space between the data blocks which start the file and the checksum value which ends it. There could be up to 4 padding blocks, each one is up to 55,000 bytes in length.
Checksum
The final four bytes of a save file are an unsigned integer checksum value. This checksum is simply the sum of all the preceding 0x3145C bytes. If the checksum value does not match the calculated sum of those bytes, the game will consider the save file to be "corrupted" and refuse to load it. Thus, any time you make any changes to a save file you must remember to update the checksum when you are finished.