Saves (GTA LCS)
Jump to navigation
Jump to search
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/jump | |||
| +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 |
| APK | IOS | PSP | PS2 | TYPE | DESCRIPTION |
|---|---|---|---|---|---|
| +0 | uint32 | type | |||
| +4 | uint32 | handle |
| 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 | (align) | |||
| +96 | uint32[104] | local variables | |||
| +512 | uint32[2] | timers | |||
| +520 | uint32 | locals base index | |||
| +524 | uint8 | unknown | |||
| +525 | uint8 | condition result | |||
| +526 | uint8 | use mission cleanup | |||
| +527 | uint8 | is active | |||
| +528 | uint32 | wake time | |||
| +532 | uint16 | if number | |||
| +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] | (align) |
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 |
| 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) | |||
| 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
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 | +0 | uint32 | people killed by player | ||
| +4 | +4 | uint32 | people killed by others | ||
| +8 | +8 | uint32 | cars exploded | ||
| +12 | +12 | uint32 | boats exploded | ||
| +16 | +16 | uint32 | tyres popped | ||
| +20 | +20 | uint32 | rounds fired by player | ||
| +24 | +24 | uint32[14] | peds killed of type | ||
| +116 | +116 | uint32 | helis destroyed | ||
| +120 | +120 | float | progress made | ||
| +124 | +124 | uint32 | total progress in game | ||
| +128 | +128 | float | kgs of explosives used | ||
| +132 | +132 | uint32 | bullets that hit | ||
| +136 | +136 | uint32 | cars crushed | ||
| +140 | +140 | uint32 | heads popped | ||
| +144 | +144 | uint32 | wanted stars attained | ||
| +148 | +148 | uint32 | wanted stars evaded | ||
| +152 | +152 | uint32 | times arrested | ||
| +156 | +156 | uint32 | times died | ||
| +160 | +160 | uint32 | days passed | ||
| +164 | +164 | uint32 | safe house visits | ||
| +168 | +168 | uint32 | sprayings | ||
| +172 | +172 | float | maximum jump distance | ||
| +176 | +176 | float | maximum jump height | ||
| +180 | +180 | uint32 | maximum jump flips | ||
| +184 | +184 | uint32 | maximum jump spins | ||
| +188 | +188 | uint32 | best stunt jump | ||
| +192 | +192 | uint32 | number of unique jumps found | ||
| +196 | +196 | uint32 | total number of unique jumps | ||
| +200 | +200 | uint32 | missions given | ||
| +204 | +204 | uint32 | passengers dropped off with taxi | ||
| +208 | +208 | uint32 | money made with taxi | ||
| +212 | +212 | uint32 | industrial passed (portland) | ||
| +216 | +216 | uint32 | commercial passed (staunton) | ||
| +220 | +220 | uint32 | suburban passed (shoreside vale) | ||
| +224 | +224 | uint32 | pamphlet mission passed (VC leftover) | ||
| +228 | +228 | uint32 | no more hurricanes | ||
| +232 | +232 | float | distance travelled on foot | ||
| +236 | +236 | float | distance travelled by car | ||
| +240 | +240 | float | distance travelled by bike | ||
| +244 | +244 | float | distance travelled by boat | ||
| +248 | +248 | float | distance travelled by plane | ||
| +252 | +252 | uint32 | lives saved with ambulance | ||
| +256 | +256 | uint32 | criminals caught | ||
| +260 | +260 | uint32 | fires extinguished | ||
| +264 | +264 | uint32 | highest level vigilante mission | ||
| +268 | +268 | uint32 | highest level ambulance mission | ||
| +272 | +272 | uint32 | highest level fire mission | ||
| +276 | +276 | uint32 | photos taken | ||
| +280 | +280 | uint32 | number kill frenzies passed | ||
| +284 | +284 | uint32 | max seconds on karmageddon left | ||
| +288 | +288 | uint32 | max kills on rc triad | ||
| +292 | +292 | uint32 | total number kill frenzies | ||
| +296 | +296 | uint32 | total number missions | ||
| +300 | +300 | uint32 | times drowned | ||
| +304 | +304 | uint32 | seagulls killed | ||
| +308 | +308 | uint32 | weapon budget | ||
| +312 | +312 | uint32 | loan sharks (unused) | ||
| +316 | +316 | uint32 | movie stunts (unused) | ||
| +320 | +320 | uint32 | pizzas delivered | ||
| +324 | +324 | uint32 | noodles delivered | ||
| +328 | +328 | uint32 | money made from tourist | ||
| +332 | +332 | uint32 | tourists taken to spots | ||
| +336 | +336 | uint32 | garbage pickups | ||
| +340 | +340 | uint32 | ice cream sold | ||
| +344 | +344 | uint32 | top shooting range score | ||
| +348 | +348 | uint32 | shooting rank | ||
| +352 | +352 | uint32 | top scrapyard challenge score | ||
| +356 | +356 | uint32 | top 9mm mayhem score | ||
| +360 | +360 | uint32 | top scooter shooter score | ||
| +364 | +364 | uint32 | top wichita wipeout score | ||
| +368 | +368 | uint32 | longest wheelie | ||
| +372 | +372 | uint32 | longest stoppie | ||
| +376 | +376 | uint32 | longest 2 wheel | ||
| +380 | +380 | float | longest wheelie distance | ||
| +384 | +384 | float | longest stoppie distance | ||
| +388 | +388 | float | longest 2 wheel distance | ||
| +392 | +392 | float | longest face plant distance | ||
| +396 | +396 | uint32 | auto painting budget | ||
| +400 | +400 | uint32 | property destroyed | ||
| +404 | +404 | uint32 | num property owned | ||
| +408 | +408 | uint16 | unlocked costumes | ||
| +410 | +410 | uint32 | blood ring kills | ||
| +414 | +414 | uint32 | blood ring time | ||
| +418 | +418 | uint8[14] | properties owned (unused) | ||
| +433 | +433 | uint32 | highest chase value | ||
| +437 | +437 | uint32[23] | fastest times | ||
| +529 | +529 | uint32[5] | highest scores | ||
| +561 | +561 | char[8] | last mission passed name | ||
| +569 | +569 | uint32 | cheated count | ||
| +573 | +573 | uint32 | cars sold | ||
| +577 | +577 | uint32 | money made with car sales | ||
| +581 | +581 | uint32 | bikes sold | ||
| +585 | +585 | uint32 | money made with bike sales | ||
| +589 | +589 | uint32 | number of exported cars | ||
| +593 | +593 | uint32 | total number of car export | ||
| +597 | +597 | uint32 | highest level slash tv | ||
| +601 | +601 | uint32 | money made with slash tv | ||
| +605 | +605 | uint32 | total kills on slash tv | ||
| +609 | +609 | uint32 | packages smuggled | ||
| +613 | +613 | uint32 | smugglers wasted | ||
| +617 | +617 | uint32 | fastest smuggling time | ||
| +621 | +621 | uint32 | money made in coach | ||
| +625 | +625 | uint32 | money made collecting trash | ||
| +629 | +629 | uint32 | hitmen killed | ||
| +633 | +633 | uint32 | highest avenging angel justice dished | ||
| +637 | +637 | uint32 | avenging angel missions passed | ||
| +641 | +641 | uint32 | avenging angel highest level portland | ||
| +645 | +645 | uint32 | avenging angel highest level staunton | ||
| +649 | +649 | uint32 | avenging angel highest level shoreside vale | ||
| +653 | +653 | uint32 | most time left train race | ||
| +657 | +657 | uint32 | best time go go faggio | ||
| +661 | +661 | uint32 | highest train cash earned | ||
| +665 | +665 | uint32 | dirt bike most air | ||
| +669 | +669 | uint32 | fastest heli race time | ||
| +673 | +673 | uint32 | best heli race position | ||
| +677 | +677 | uint32 | number outfit changes | ||
| +681 | +681 | uint32[3] | fastest rc bandit lap times | ||
| +693 | +693 | uint32[3] | best rc bandit positions | ||
| +705 | +705 | uint32[6] | best street race positions | ||
| +753 | +753 | uint32[6] | fastest street race times | ||
| +777 | +777 | uint32[10] | fastest dirt bike lap times | ||
| +817 | +817 | uint32[10] | fastest dirt bike times | ||
| +857 | +857 | uint32[10] | radio station listen times | ||
| +897 | X | uint32 | mix tape radio listem time |
Tools
GTAForums: GTA LCS Save File Editor – by thehambone
| Savegame | |
|---|---|
| Formats | |
| Tools | GTASnP - Save File Sharing • |
| Resources | |
| File Formats | .cfg • .chk • .dat • .dtz • .gxt • .ide • .img • .ipl • .mdl • .pss • .scm • .vb |
| Documentation | Leeds Engine • Opcodes • Radio Stations • Saves • Scrollbar • Vehicles |
| Tools | Sanny Builder |
| Useful Links | Community Portal • Discussion Forum • Modding Topic • Mobile Modding |