Skip to content

Instantly share code, notes, and snippets.

@bsmt
Last active August 23, 2021 04:55
Show Gist options
  • Save bsmt/3cc58e2498931b953809947f3849414e to your computer and use it in GitHub Desktop.
Save bsmt/3cc58e2498931b953809947f3849414e to your computer and use it in GitHub Desktop.
meta:
id: sly4_save
title: Sly Cooper - Thieves In Time save file
file-extension: bin
endian: be
doc: |
Incomplete definition for Sly 4 save files.
Most of the basic cheating things are defined.
You can get:
- All thiefnet items
- Unlimited coins
- All bottles
- All masks
- All treasure
For RPCS3, save files are in dev_hdd0\home\00000001\savedata
instances:
coins:
pos: 0x20
type: s4
doc: |
Max the game will allow is 999999.
# no bottles for world1 (paris)
bottle_bitmap_world2: # bottles for japan level. max is 30
pos: 0x38
type: bottle_bitmap
bottle_bitmap_world3: # bottles for world3 (TODO). max is 30
pos: 0x3c
type: bottle_bitmap
bottle_bitmap_world4: # bottles for world4 (TODO)
pos: 0x40
type: bottle_bitmap
bottle_bitmap_world5: # bottles for world5 (TODO)
pos: 0x44
type: bottle_bitmap
mask_bitmap_world1: # mask(s) for paris level. max is 1
pos: 0x64
type: mask_bitmap
mask_bitmap_world2: # masks for japan level. max is 11
pos: 0x66
type: mask_bitmap
mask_bitmap_world3: # masks for old west level. max is 11
pos: 0x68
type: mask_bitmap
mask_bitmap_world4: # masks for world4 (TODO)
pos: 0x6a
type: mask_bitmap
mask_bitmap_world5: # masks for world5 (TODO)
pos: 0x6c
type: mask_bitmap
treasure_bitmap_world2: # treasures for japan level. max is 12
pos: 0x7e
type: treasure_bitmap
treasure_bitmap_world3: # treasures for old west level. max is 12
pos: 0x80
type: treasure_bitmap
treasure_bitmap_world4: # treasures for world4 (TODO)
pos: 0x82
type: treasure_bitmap
treasure_bitmap_world5: # treasures for world5 (TODO)
pos: 0x84
type: treasure_bitmap
save_counter_maybe: # TODO
pos: 0x143
type: u1
safe_item_related: # TODO
pos: 0x1a5
type: u1
doc: |
went from 0xa8 to 0xab when unlocking first safe item in japan - coopergiwa's gold magnet
safe_item_related2:
pos: 0x1a8
type: u1
doc: |
went from 88 to 8b when unlocking second safe item in old west
thiefnet_items_sly:
pos: 0xf6c
type: sly_items
thiefnet_items_murray:
pos: 0xf7c
type: murray_items
thiefnet_items_bentley:
pos: 0xf90
type: bentley_items
thiefnet_items_carmelita: # TODO: is this carmelita?
pos: 0xfa2
type: carmelita_items
types:
sly_items:
seq:
- id: item_paraglider
type: u1
enum: thiefnet_item_state
- id: item_cane_swat_combo
type: u1
enum: thiefnet_item_state
- id: item_mega_charge_attack
type: u1
enum: thiefnet_item_state
- id: item_silent_obliteration
type: u1
enum: thiefnet_item_state
- id: item_rail_sprint
type: u1
enum: thiefnet_item_state
- id: item_steerable_cane_spin
type: u1
enum: thiefnet_item_state
- id: item_smoke_bomb
type: u1
enum: thiefnet_item_state
- id: item_meter_recharger
type: u1
enum: thiefnet_item_state
- id: item_run_while_charging
type: u1
enum: thiefnet_item_state
- id: item_flash_bomb
type: u1
enum: thiefnet_item_state
- id: item_moving_pickpocket
type: u1
enum: thiefnet_item_state
- id: item_sprint_while_charging
type: u1
enum: thiefnet_item_state
- id: item_cane_push
type: u1
enum: thiefnet_item_state
- id: item_paraglider_dive_attack
type: u1
enum: thiefnet_item_state
- id: item_silent_sprint
type: u1
enum: thiefnet_item_state
- id: item_air_smash
type: u1
enum: thiefnet_item_state
murray_items:
seq:
- id: item_elbow_el_dropo_combo
type: u1
enum: thiefnet_item_state
- id: item_mega_charge_attack
type: u1
enum: thiefnet_item_state
- id: item_el_dropo
type: u1
enum: thiefnet_item_state
- id: item_looty_shake
type: u1
enum: thiefnet_item_state
- id: item_steerable_fist_spin
type: u1
enum: thiefnet_item_state
- id: clothesline
type: u1
enum: thiefnet_item_state
- id: item_juggernaut_throw
type: u1
enum: thiefnet_item_state
- id: item_fists_of_flame
type: u1
enum: thiefnet_item_state
- id: item_run_while_charging
type: u1
enum: thiefnet_item_state
- id: item_raging_inferno_flop
type: u1
enum: thiefnet_item_state
- id: item_light_as_a_feather
type: u1
enum: thiefnet_item_state
- id: item_dukes_of_dynamite
type: u1
enum: thiefnet_item_state
- id: item_sprint_while_charging
type: u1
enum: thiefnet_item_state
- id: item_clothesline_a_lo_macho
type: u1
enum: thiefnet_item_state
- id: item_diablo_fire_slam
type: u1
enum: thiefnet_item_state
- id: item_licks_of_lightning
type: u1
enum: thiefnet_item_state
- id: item_cuffs_of_confusion
type: u1
enum: thiefnet_item_state
- id: item_meter_recharger
type: u1
enum: thiefnet_item_state
- id: item_mega_stomp
type: u1
enum: thiefnet_item_state
- id: item_el_dropo_a_lo_macho
type: u1
enum: thiefnet_item_state
bentley_items:
seq:
- id: item_sleep_ammo
type: u1
enum: thiefnet_item_state
- id: item_adrenaline_burst
type: u1
enum: thiefnet_item_state
- id: item_bomb_kick
type: u1
enum: thiefnet_item_state
- id: item_shock_ammo
type: u1
enum: thiefnet_item_state
- id: item_trigger_bomb
type: u1
enum: thiefnet_item_state
- id: item_heat_seeking
type: u1
enum: thiefnet_item_state
- id: item_confusion_ammo
type: u1
enum: thiefnet_item_state
- id: item_multi_bomb
type: u1
enum: thiefnet_item_state
- id: item_throwing_shield
type: u1
enum: thiefnet_item_state
- id: item_bomb_blast_20
type: u1
enum: thiefnet_item_state
- id: item_shrink_ammo
type: u1
enum: thiefnet_item_state
- id: item_scorching_hover_pack
type: u1
enum: thiefnet_item_state
- id: item_bomb_drop_20
type: u1
enum: thiefnet_item_state
- id: item_bend_it_like_bentley
type: u1
enum: thiefnet_item_state
- id: item_homing_darts
type: u1
enum: thiefnet_item_state
- id: item_meter_recharger
type: u1
enum: thiefnet_item_state
- id: item_adrenaline_burst_plus
type: u1
enum: thiefnet_item_state
- id: item_moving_pickpocket
type: u1
enum: thiefnet_item_state
carmelita_items:
seq:
- id: item_auto_fire
type: u1
enum: thiefnet_item_state
- id: item_charge_shot
type: u1
enum: thiefnet_item_state
- id: item_stun_shot
type: u1
enum: thiefnet_item_state
- id: item_triple_shot
type: u1
enum: thiefnet_item_state
- id: item_super_jump
type: u1
enum: thiefnet_item_state
bottle_bitmap:
seq:
- id: bitmap
type: b32
doc: |
Bottle state is stored as a bitmap per-level,
where each unique bottle in a level
has a single 1 or 0 to denote its captured state.
0 = Not captured
1 = captured
So, to capture all bottles, set the bitmap to all 1s (0xFFFFFFFF).
mask_bitmap:
seq:
- id: bitmap
type: b16
doc: |
Mask state is identical to bitmaps, except less space is needed.
treasure_bitmap:
seq:
- id: bitmap
type: b16
doc: |
Treasure state is identical to mask bitmaps.
enums:
thiefnet_item_state:
0:
id: not_available
2:
id: unknown_not_available
1:
id: available_not_purchased
3:
id: available_and_purchased
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment