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 (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 |
| 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 | (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 |
| 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 | 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
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 |