Saves (GTA LCS)

From GTAMods Wiki
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
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 (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
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

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