This article aims to document the save file format of GTA LCS.
Data Blocks
- A save file consists of 5 blocks
- The first 4 bytes of the block contain a string describing the block ("SIMP", "SCRT", "GRGE", "PLYR" and "STAT")
- The next 4 bytes contain the size of the block
- Byte order is little endian. For example, the number 3452 (0x0D7C) is represented as 0x7C 0x0D in little endian.
Block 0: SIMP (Simple Variables)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
+0 |
+0 |
+0 |
char[4] |
block magic number ("SIMP")
|
| +4 |
+4 |
+4 |
+0 |
uint32 |
block size
|
| +8 |
+8 |
+8 |
+0 |
- |
start of block, data below
|
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +12 |
|
|
|
char[120] |
last mission passed name
|
| +132 |
|
|
|
uint32 |
current level
|
| +136 |
|
|
|
uint32 |
current area
|
| +140 |
|
|
|
uint32 |
language
|
| +144 |
|
|
|
uint32 |
milliseconds per game minute
|
| +148 |
|
|
|
uint32 |
last clock tick
|
| +152 |
|
|
|
uint8 |
game clock hours
|
| +153 |
|
|
|
uint8 |
game clock minutes
|
| +154 |
|
|
|
uint16 |
game clock seconds
|
| +156 |
|
|
|
uint32 |
total time played in milliseconds
|
| +160 |
|
|
|
float |
time scale
|
| +164 |
|
|
|
float |
time step
|
| +168 |
|
|
|
float |
time step non clipped
|
| +172 |
|
|
|
float |
frames per update
|
| +176 |
|
|
|
uint32 |
frame counter
|
| +180 |
|
|
|
uint16 |
old weather type
|
| +182 |
|
|
|
uint16 |
new weather type
|
| +184 |
|
|
|
uint16 |
forced weather type
|
| +188 |
|
|
|
uint32 |
weather type in list
|
| +192 |
|
|
|
uint32 |
interpolation value
|
| +196 |
|
|
|
uint32 |
(unknown)
|
| +200 |
|
|
|
uint32 |
(unknown)
|
| +204 |
|
|
|
uint32 |
(unknown)
|
| +208 |
|
|
|
uint32 |
(unknown)
|
| +212 |
|
|
|
uint32 |
(unknown)
|
| +216 |
|
|
|
uint32 |
(unknown)
|
| +220 |
|
|
|
uint32 |
(unknown)
|
| +224 |
|
|
|
uint32 |
(unknown)
|
| +228 |
|
|
|
uint32 |
brightness
|
| +232 |
|
|
|
uint8 |
display hud
|
| +233 |
|
|
|
uint8 |
show subtitles
|
| +236 |
|
|
|
uint32 |
radar mode
|
| +240 |
|
|
|
uint8 |
blur on
|
| +244 |
|
|
|
uint32 |
music volume
|
| +248 |
|
|
|
uint32 |
sfx volume
|
| +252 |
|
|
|
uint8 |
radio station
|
| +253 |
|
|
|
uint8 |
output
|
| +254 |
|
|
|
uint8 |
(unknown) (always 0)
|
| +300 |
|
|
|
uint16 |
pad status
|
| +302 |
|
|
|
uint8 |
invert look
|
| +303 |
|
|
|
uint8 |
swap stick and d-pad
|
| +304 |
|
|
|
uint8 |
has player cheated
|
| +305 |
|
|
|
uint8 |
do all taxis have nitro (unused)
|
| +306 |
|
|
|
uint8 |
target is on (unused)
|
| +308 |
|
|
|
float |
target pos (unused)
|
| +312 |
|
|
|
uint32 |
(unknown)
|
Block 1: SCRT (Scripts)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
+0 |
+0 |
+0 |
char[4] |
block magic number ("SCRT")
|
| +4 |
+4 |
+4 |
+0 |
uint32 |
block size
|
| +8 |
+8 |
+8 |
+0 |
- |
start of block, data below
|
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
|
|
|
char[4] |
"SCR\0"
|
| +4 |
|
|
|
uint32 |
size of block following this variable
|
| +8 |
|
|
|
uint32 |
total size of script space (n)
|
| +12 |
|
|
|
uint32[n/4] |
script space content (global variables)
|
| +12+n |
|
|
|
- |
the content in the following table is offset by 12+n
|
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
|
|
|
uint32 |
(unknown) (constant 1720)
|
| +4 |
|
|
|
uint32 |
on mission flag location
|
| +8 |
|
|
|
uint32 |
last mission passed time
|
| +12 |
|
|
|
uint32[64] |
Collective array
|
| +268 |
|
|
|
uint32 |
next free collective index
|
| +272 |
|
|
|
BuildingSwap[?] |
BuildingSwap array (unknown structure as of now)
|
| +1552 |
|
|
|
InvisibilitySettings[52] |
invisible objects array
|
| +1968 |
|
|
|
uint8 |
is using a multiple script file
|
| +1969 |
|
|
|
uint8 |
has player met Debbie Harry
|
| +1970 |
|
|
|
uint16 |
(unknown) (constant 0)
|
| +1972 |
|
|
|
uint32 |
main script size
|
| +1976 |
|
|
|
uint32 |
largest mission script size
|
| +1980 |
|
|
|
uint16 |
number of mission scripts
|
| +1982 |
|
|
|
uint16 |
number of exclusive mission scripts
|
| +1984 |
|
|
|
uint32 |
number of active scripts
|
| +1988 |
|
|
|
RunningScript[ ] |
threads
|
InvisibilitySettings (8 bytes)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
|
|
|
uint32 |
type
|
| +4 |
|
|
|
uint32 |
handle
|
CRunningScript (540 bytes)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
|
|
|
uint32 |
next script
|
| +4 |
|
|
|
uint32 |
previous script
|
| +8 |
|
|
|
uint32 |
id
|
| +12 |
|
|
|
uint32 |
(unknown)
|
| +16 |
|
|
|
char* |
script name
|
| +24 |
|
|
|
uint32 |
instruction pointer
|
| +28 |
|
|
|
uint32[16] |
stack
|
| +92 |
|
|
|
uint16 |
number of stack pointers
|
| +94 |
|
|
|
uint16 |
(unknown)
|
| +96 |
|
|
|
uint32[104] |
local variables
|
| +512 |
|
|
|
uint32[2] |
timers
|
| +520 |
|
|
|
uint8[5] |
unknown
|
| +525 |
|
|
|
uint8 |
condition result
|
| +526 |
|
|
|
uint8 |
use mission cleanup
|
| +527 |
|
|
|
uint8 |
is active
|
| +528 |
|
|
|
uint32 |
wake time
|
| +532 |
|
|
|
uint16 |
logical operation
|
| +534 |
|
|
|
uint8 |
not flag
|
| +535 |
|
|
|
uint8 |
wasted or busted check enabled
|
| +536 |
|
|
|
uint8 |
wasted or busted check result
|
| +537 |
|
|
|
uint8 |
is a mission
|
| +538 |
|
|
|
uint8[2] |
(unknown) (pad?)
|
Block 2: GRGE (Garages)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
+0 |
+0 |
+0 |
char[4] |
block magic number ("GRGE")
|
| +4 |
+4 |
+4 |
+0 |
uint32 |
block size
|
| +8 |
+8 |
+8 |
+0 |
- |
start of block, data below
|
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
|
|
|
uint32 |
garage count
|
| +4 |
|
|
|
uint32 |
are bombs free
|
| +8 |
|
|
|
uint32 |
are resprays free
|
| +12 |
|
|
|
uint32 |
cars collected (unused)
|
| +16 |
|
|
|
uint32 |
bank vans collected (unused)
|
| +20 |
|
|
|
uint32 |
police cars collected (unused)
|
| +24 |
|
|
|
uint32 |
love media cars collected
|
| +28 |
|
|
|
uint32 |
unused I/E cars collected
|
| +32 |
|
|
|
uint32 |
unused I/E cars collected
|
| +36 |
|
|
|
uint32 |
unused I/E cars collected
|
| +40 |
|
|
|
uint32 |
help message last displayed (timestamp)
|
| +44 |
|
|
|
StoredCar[48] |
cars stored in garages
|
| +2156 |
|
|
|
Garage[32] |
defined garages
|
Stored Car (44 bytes)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
uint32 |
model id
|
| +4 |
float[3] |
position
|
| +16 |
float[3] |
rotation
|
| +28 |
uint32 |
handling multiplier
|
| +32 |
uint32 |
immunities
|
| +36 |
uint8 |
primary colour
|
| +37 |
uint8 |
secondary colour
|
| +38 |
uint8 |
radio station
|
| +39 |
uint8 |
extra 1
|
| +40 |
uint8 |
extra 2
|
| +41 |
uint8[3] |
(unknown)
|
Garage (224 bytes)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
uint8[144] |
(unknown)
|
| +144 |
float[6] |
position (x1,x2, y1,y2, z1,z2)
|
| +168 |
uint8[32] |
(unknown)
|
| +200 |
uint8 |
garage type
|
| +201 |
uint8 |
garage state
|
| +202 |
uint8[22] |
(unknown)
|
Love Media Cars - Bitfield
- 0b000000000000001 = Hearse
- 0b000000000000010 = Faggio
- 0b000000000000100 = Freeway
- 0b000000000001000 = Deimos SP
- 0b000000000010000 = Manana
- 0b000000000100000 = Hellenbach GT
- 0b000000001000000 = Phobos Vt
- 0b000000010000000 = V8 Ghost
- 0b000000100000000 = Thunder-Rodd
- 0b000001000000000 = PCJ-600
- 0b000010000000000 = Infernus
- 0b000100000000000 = Banshee
- 0b001000000000000 = Patriot
- 0b010000000000000 = Injection
- 0b100000000000000 = Landstalker
Immunities - Bitfield
- 0b000001 = Bullet proof
- 0b000010 = Fire proof
- 0b000100 = Explosion proof
- 0b001000 = Collision proof
- 0b010000 = Melee proof
- 0b100000 = Hellenbach GT
Radio Stations
- 0 = Head Radio
- 1 = Double Cleff FM
- 2 = K-Jah
- 3 = Rise FM
- 4 = Lips 106
- 5 = Radio Del Mundo
- 6 = MSX 98
- 7 = Flashback FM
- 8 = The Liberty Jam
- 9 = LCFR
- 10 = Mix Tape
Block 3: PLYR (Player)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
+0 |
+0 |
+0 |
char[4] |
block magic number ("PLYR")
|
| +4 |
+4 |
+4 |
+0 |
uint32 |
block size
|
| +8 |
+8 |
+8 |
+0 |
- |
start of block, data below
|
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
|
|
|
char[128] |
blank
|
| +128 |
|
|
|
uint32 |
player money
|
| +132 |
|
|
|
uint32 |
(unknown)
|
| +136 |
|
|
|
uint32 |
(player money on display)
|
| +140 |
|
|
|
uint32 |
(unknown)
|
| +144 |
|
|
|
uint32 |
total packages
|
| +148 |
|
|
|
uint32 |
(unknown)
|
| +152 |
|
|
|
uint16 |
(unknown)
|
| +154 |
|
|
|
uint16 |
(unknown)
|
| +156 |
|
|
|
uint8 |
max health
|
| +157 |
|
|
|
uint8 |
max armour
|
| +158 |
|
|
|
uint8 |
(unknown)
|
| +159 |
|
|
|
uint8 |
(unknown)
|
| +160 |
|
|
|
uint8 |
never tired
|
| +161 |
|
|
|
uint8 |
fast reload
|
| +162 |
|
|
|
uint8 |
fireproof
|
| +163 |
|
|
|
uint8 |
get out of jail free
|
| +164 |
|
|
|
uint8 |
can do drive by
|
| +165 |
|
|
|
char[3] |
blank
|
Block 4: STAT (Statistics)
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
+0 |
+0 |
+0 |
char[4] |
block magic number ("STAT")
|
| +4 |
+4 |
+4 |
+0 |
uint32 |
block size
|
| +8 |
+8 |
+8 |
+0 |
- |
start of block, data below
|
| APK
|
IOS
|
PSP
|
PS2
|
TYPE
|
DESCRIPTION
|
| +0 |
|
|
|
uint32 |
people killed by player
|
| +4 |
|
|
|
uint32 |
people killed by others
|
| +8 |
|
|
|
uint32 |
cars exploded
|
| +12 |
|
|
|
uint32 |
boats exploded
|
| +16 |
|
|
|
uint32 |
tyres popped
|
| +20 |
|
|
|
uint32 |
rounds fired by player
|
| +24 |
|
|
|
uint32[14] |
peds killed of type
|
| +116 |
|
|
|
uint32 |
helis destroyed
|
| +120 |
|
|
|
float |
progress made
|
| +124 |
|
|
|
uint32 |
total progress in game
|
| +128 |
|
|
|
float |
kgs of explosives used
|
| +132 |
|
|
|
uint32 |
bullets that hit
|
| +136 |
|
|
|
uint32 |
cars crushed
|
| +140 |
|
|
|
uint32 |
heads popped
|
| +144 |
|
|
|
uint32 |
wanted stars attained
|
| +148 |
|
|
|
uint32 |
wanted stars evaded
|
| +152 |
|
|
|
uint32 |
times arrested
|
| +156 |
|
|
|
uint32 |
times died
|
| +160 |
|
|
|
uint32 |
days passed
|
| +164 |
|
|
|
uint32 |
safe house visits
|
| +168 |
|
|
|
uint32 |
sprayings
|
| +172 |
|
|
|
float |
maximum jump distance
|
| +176 |
|
|
|
float |
maximum jump height
|
| +180 |
|
|
|
uint32 |
maximum jump flips
|
| +184 |
|
|
|
uint32 |
maximum jump spins
|
| +188 |
|
|
|
uint32 |
best stunt jump
|
| +192 |
|
|
|
uint32 |
number of unique jumps found
|
| +196 |
|
|
|
uint32 |
total number of unique jumps
|
| +200 |
|
|
|
uint32 |
missions given
|
| +204 |
|
|
|
uint32 |
passengers dropped off with taxi
|
| +208 |
|
|
|
uint32 |
money made with taxi
|
| +212 |
|
|
|
uint32 |
industrial passed (portland)
|
| +216 |
|
|
|
uint32 |
commercial passed (staunton)
|
| +220 |
|
|
|
uint32 |
suburban passed (shoreside vale)
|
| +224 |
|
|
|
uint32 |
pamphlet mission passed (VC leftover)
|
| +228 |
|
|
|
uint32 |
no more hurricanes
|
| +232 |
|
|
|
float |
distance travelled on foot
|
| +236 |
|
|
|
float |
distance travelled by car
|
| +240 |
|
|
|
float |
distance travelled by bike
|
| +244 |
|
|
|
float |
distance travelled by boat
|
| +248 |
|
|
|
float |
distance travelled by plane
|
| +252 |
|
|
|
uint32 |
lives saved with ambulance
|
| +256 |
|
|
|
uint32 |
criminals caught
|
| +260 |
|
|
|
uint32 |
fires extinguished
|
| +264 |
|
|
|
uint32 |
highest level vigilante mission
|
| +268 |
|
|
|
uint32 |
highest level ambulance mission
|
| +272 |
|
|
|
uint32 |
highest level fire mission
|
| +276 |
|
|
|
uint32 |
photos taken
|
| +280 |
|
|
|
uint32 |
number kill frenzies passed
|
| +284 |
|
|
|
uint32 |
max seconds on karmageddon left
|
| +288 |
|
|
|
uint32 |
max kills on rc triad
|
| +292 |
|
|
|
uint32 |
total number kill frenzies
|
| +296 |
|
|
|
uint32 |
total number missions
|
| +300 |
|
|
|
uint32 |
times drowned
|
| +304 |
|
|
|
uint32 |
seagulls killed
|
| +308 |
|
|
|
uint32 |
weapon budget
|
| +312 |
|
|
|
uint32 |
loan sharks (unused)
|
| +316 |
|
|
|
uint32 |
movie stunts (unused)
|
| +320 |
|
|
|
uint32 |
pizzas delivered
|
| +324 |
|
|
|
uint32 |
noodles delivered
|
| +328 |
|
|
|
uint32 |
money made from tourist
|
| +332 |
|
|
|
uint32 |
tourists taken to spots
|
| +336 |
|
|
|
uint32 |
garbage pickups
|
| +340 |
|
|
|
uint32 |
ice cream sold
|
| +344 |
|
|
|
uint32 |
top shooting range score
|
| +348 |
|
|
|
uint32 |
shooting rank
|
| +352 |
|
|
|
uint32 |
top scrapyard challenge score
|
| +356 |
|
|
|
uint32 |
top 9mm mayhem score
|
| +360 |
|
|
|
uint32 |
top scooter shooter score
|
| +364 |
|
|
|
uint32 |
top wichita wipeout score
|
| +368 |
|
|
|
uint32 |
longest wheelie
|
| +372 |
|
|
|
uint32 |
longest stoppie
|
| +376 |
|
|
|
uint32 |
longest 2 wheel
|
| +380 |
|
|
|
float |
longest wheelie distance
|
| +384 |
|
|
|
float |
longest stoppie distance
|
| +388 |
|
|
|
float |
longest 2 wheel distance
|
| +392 |
|
|
|
float |
longest face plant distance
|
| +396 |
|
|
|
uint32 |
auto painting budget
|
| +400 |
|
|
|
uint32 |
property destroyed
|
| +404 |
|
|
|
uint32 |
num property owned
|
| +408 |
|
|
|
uint16 |
unlocked costumes
|
| +410 |
|
|
|
uint32 |
blood ring kills
|
| +414 |
|
|
|
uint32 |
blood ring time
|
| +418 |
|
|
|
uint8[14] |
properties owned (unused)
|
| +433 |
|
|
|
uint32 |
highest chase value
|
| +437 |
|
|
|
uint32[23] |
fastest times
|
| +529 |
|
|
|
uint32[5] |
highest scores
|
| +561 |
|
|
|
char[8] |
last mission passed name
|
| +569 |
|
|
|
uint32 |
cheated count
|
| +573 |
|
|
|
uint32 |
cars sold
|
| +577 |
|
|
|
uint32 |
money made with car sales
|
| +581 |
|
|
|
uint32 |
bikes sold
|
| +585 |
|
|
|
uint32 |
money made with bike sales
|
| +589 |
|
|
|
uint32 |
number of exported cars
|
| +593 |
|
|
|
uint32 |
total number of car export
|
| +597 |
|
|
|
uint32 |
highest level slash tv
|
| +601 |
|
|
|
uint32 |
money made with slash tv
|
| +605 |
|
|
|
uint32 |
total kills on slash tv
|
| +609 |
|
|
|
uint32 |
packages smuggled
|
| +613 |
|
|
|
uint32 |
smugglers wasted
|
| +617 |
|
|
|
uint32 |
fastest smuggling time
|
| +621 |
|
|
|
uint32 |
money made in coach
|
| +625 |
|
|
|
uint32 |
money made collecting trash
|
| +629 |
|
|
|
uint32 |
hitmen killed
|
| +633 |
|
|
|
uint32 |
highest avenging angel justice dished
|
| +637 |
|
|
|
uint32 |
avenging angel missions passed
|
| +641 |
|
|
|
uint32 |
avenging angel highest level portland
|
| +645 |
|
|
|
uint32 |
avenging angel highest level staunton
|
| +649 |
|
|
|
uint32 |
avenging angel highest level shoreside vale
|
| +653 |
|
|
|
uint32 |
most time left train race
|
| +657 |
|
|
|
uint32 |
best time go go faggio
|
| +661 |
|
|
|
uint32 |
highest train cash earned
|
| +665 |
|
|
|
uint32 |
dirt bike most air
|
| +669 |
|
|
|
uint32 |
fastest heli race time
|
| +673 |
|
|
|
uint32 |
best heli race position
|
| +677 |
|
|
|
uint32 |
number outfit changes
|
| +681 |
|
|
|
uint32[3] |
fastest rc bandit lap times
|
| +693 |
|
|
|
uint32[3] |
best rc bandit positions
|
| +705 |
|
|
|
uint32[6] |
best street race positions
|
| +753 |
|
|
|
uint32[6] |
fastest street race times
|
| +777 |
|
|
|
uint32[10] |
fastest dirt bike lap times
|
| +817 |
|
|
|
uint32[10] |
fastest dirt bike times
|
| +857 |
|
|
|
uint32[11] |
radio station listen times
|
Tools