Difference between revisions of "Saves (GTA 3)"
Jump to navigation
Jump to search
(→Block 1: Miscellaneous) |
(→Block 1: Miscellaneous) |
||
Line 115: | Line 115: | ||
|} | |} | ||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
+ | |+TheScripts | ||
!OFFSET | !OFFSET | ||
!TYPE | !TYPE | ||
Line 128: | Line 128: | ||
|} | |} | ||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
+ | |+ScriptData | ||
!OFFSET | !OFFSET | ||
!TYPE | !TYPE | ||
Line 147: | Line 147: | ||
|} | |} | ||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
+ | |+ScriptInfo | ||
!OFFSET | !OFFSET | ||
!TYPE | !TYPE | ||
Line 157: | Line 157: | ||
|0x0004 ||dword ||[[0180|$onmission]] var offset | |0x0004 ||dword ||[[0180|$onmission]] var offset | ||
|- | |- | ||
− | |0x0008 ||ContactInfo[16] ||contacts info | + | |0x0008 ||ContactInfo[16] ||contacts info |
|- | |- | ||
|0x0088 ||Unknown[4] ||(unknown) | |0x0088 ||Unknown[4] ||(unknown) | ||
Line 180: | Line 180: | ||
|} | |} | ||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
+ | |+ContactInfo | ||
+ | !OFFSET | ||
+ | !TYPE | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 || dword || mission_flag (opcode [[0181]]) | ||
+ | |- | ||
+ | |0x0004 || dword || base_brief (opcode [[0182]]) | ||
+ | |} | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |+StaticReplacement | ||
!OFFSET | !OFFSET | ||
!TYPE | !TYPE | ||
Line 195: | Line 206: | ||
|} | |} | ||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
+ | |+InvisibleObject | ||
!OFFSET | !OFFSET | ||
!TYPE | !TYPE | ||
Line 204: | Line 215: | ||
|- | |- | ||
|0x0004 || dword || handle | |0x0004 || dword || handle | ||
+ | |} | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |+CRunningScript | ||
+ | !OFFSET | ||
+ | !TYPE | ||
+ | !DESCRIPTION | ||
+ | |- | ||
+ | |0x0000 || CRunningScript * || next script | ||
+ | |- | ||
+ | |0x0004 || CRunningScript * || prev script | ||
+ | |- | ||
+ | |0x0008 || char[8] || name | ||
+ | |- | ||
+ | |0x0010 || dword || current_ip | ||
+ | |- | ||
+ | |0x0014 || dword[4] || return_stack | ||
+ | |- | ||
+ | |0x0024 || dword || | ||
+ | |- | ||
+ | |0x0028 || dword || | ||
+ | |- | ||
+ | |0x002C || word || stack_counter | ||
+ | |- | ||
+ | |0x002E || word || | ||
+ | |- | ||
+ | |0x0030 || dword[16] || locals | ||
+ | |- | ||
+ | |0x0070 || dword || timerA | ||
+ | |- | ||
+ | |0x0074 || dword || timerB | ||
+ | |- | ||
+ | |0x0078 || byte || | ||
+ | |- | ||
+ | |0x0079 || byte || | ||
+ | |- | ||
+ | |0x007A || byte || | ||
+ | |- | ||
+ | |0x007B || byte || | ||
+ | |- | ||
+ | |0x007C || dword || wake time | ||
+ | |- | ||
+ | |0x0080 || word || | ||
+ | |- | ||
+ | |0x0082 || byte || | ||
+ | |- | ||
+ | |0x0083 || byte || | ||
+ | |- | ||
+ | |0x0084 || byte || | ||
+ | |- | ||
+ | |0x0085 || byte || | ||
+ | |- | ||
+ | |0x0086 || byte || | ||
+ | |- | ||
+ | |0x0087 || byte || | ||
|} | |} | ||
Revision as of 23:32, 6 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 is represented as as 0x7C 0x0D.
- File is divided into 22 blocks, followed by a 4-byte checksum (more info on the checksum below).
Data Blocks
There is a DWORD value preceding any block of data which is equal to the size of the block.
Block 1: 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 | weather timer |
0x0060 | byte | game hour |
0x0061 | byte[3] | (align) |
0x0064 | byte | game minute |
0x0065 | byte[3] | (align) |
0x0068 | word | (unknown) current pad |
0x006A | byte[2] | (align) |
0x006C | dword | global timer |
0x0070 | float | game speed |
0x0074 | float | (unknown) frame delta time |
0x0078 | float | (unknown) tick time (time of an iteration of the major game loop) |
0x007C | dword | number of the frames processed from the beginning of the game |
0x0080 | float | (unknown) |
0x0084 | float | (unknown) |
0x0088 | float | (unknown) |
0x008C | word | (unknown) |
0x008E | byte[2] | (align) |
0x0090 | word | (unknown) |
0x0092 | byte[2] | (align) |
0x0094 | word | (unknown) |
0x0096 | byte[2] | (align) |
0x0098 | float | (unknown) |
0x009C | dword | (unknown) |
0x00A0 | dword | (unknown) |
0x00A4 | dword | (unknown) |
0x00A8 | dword | (unknown) |
0x00AC | dword | (unknown) |
0x00B0 | dword | (unknown) |
0x00B4 | dword | (unknown) |
0x00B8 | float | (unknown) |
0x00BC | float | (unknown) |
0x00C0 | TheScripts | various scripts information |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | char[4] | 'SCR\0' signature |
0x0008 | ScriptData | data dumped from the main.scm |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size |
0x0004 | dword | script global variables amount (n) |
0x0008 | dword[n] | script global variables dump |
0x0000 | ScriptInfo | various info from scripts |
0x03CC | dword | threads amount (n2) |
0x03D0 | CRunningScript[n2] | script threads dump |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | block size (always 0x3C8) |
0x0004 | dword | $onmission var offset |
0x0008 | ContactInfo[16] | contacts info |
0x0088 | Unknown[4] | (unknown) |
0x0188 | dword | (unknown) |
0x018C | StaticReplacement[25] | static replacements |
0x031C | InvisibleObject[20] | invisible objects |
0x03BC | byte | (unknown) unused, always 1 |
0x03BD | byte[3] | (align) |
0x03C0 | dword | size of the MAIN section in the main.scm |
0x03C4 | dword | biggest mission size |
0x03C8 | word | missions count |
0x03CA | byte[2] | (align) |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | mission_flag (opcode 0181) |
0x0004 | dword | base_brief (opcode 0182) |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | type |
0x0004 | dword | building handle |
0x0008 | dword | new model |
0x000C | dword | old model |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | dword | type |
0x0004 | dword | handle |
OFFSET | TYPE | DESCRIPTION |
---|---|---|
0x0000 | CRunningScript * | next script |
0x0004 | CRunningScript * | prev script |
0x0008 | char[8] | name |
0x0010 | dword | current_ip |
0x0014 | dword[4] | return_stack |
0x0024 | dword | |
0x0028 | dword | |
0x002C | word | stack_counter |
0x002E | word | |
0x0030 | dword[16] | locals |
0x0070 | dword | timerA |
0x0074 | dword | timerB |
0x0078 | byte | |
0x0079 | byte | |
0x007A | byte | |
0x007B | byte | |
0x007C | dword | wake time |
0x0080 | word | |
0x0082 | byte | |
0x0083 | byte | |
0x0084 | byte | |
0x0085 | byte | |
0x0086 | byte | |
0x0087 | byte |