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 | (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 | +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 | Saves (GTA 3) • Saves (GTA VC) • Saves (GTA SA) • Saves (GTA LCS) • Saves (GTA 4) |
Tools | GTASnP - Save File Sharing • GTAForums: GTASum Gamesave Checksum Calculator |
Resources | GTAForums: GTA III Save File Documentation • GTAForums: Vice City Save File Format • Savegames Formats Description |
Grand Theft Auto: Liberty City Stories | |
---|---|
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 |