Skip to content

Latest commit

 

History

History
638 lines (605 loc) · 43.3 KB

datasheet.rst

File metadata and controls

638 lines (605 loc) · 43.3 KB

Datasheet

Base File Index equals to :ref:`start-block` 0x2c0 (BFI)

Headers format and structures

Note

Information about data type you can access with official python documentation

Offset (from the begging) Size/Type Explain Value
  File General Header
0x00 4 bytes c_char_p Probably file format container BND4
0x04 4 bytes c_uint32 could be a separator x00x00x00x00
0x08 4 bytes c_uint32 Unknown data  
0x0c 4 bytes c_uint32 Could be real block data stored in whole file hex: 0xB dec: 11
0x10 4 bytes c_uint32 Unknown data  
0x14 4 bytes c_uint32 could be a separator x00x00x00x00
0x18 8 bytes c_char_p
It seems a version of
document or application
string: 00000001
0x20 4 bytes c_uint32 Unknown data hex: 0x20 dec: 32
0x24 4 bytes c_uint32 could be a separator x00x00x00x00
0x28 4 bytes c_uint32 First data block offset from the of the file :ref:`start-block` hex: 0x2c0 dec: 704
0x2c 4 bytes c_uint32 could be a separator x00x00x00x00
0x30 4 bytes c_uint32 Unknown data (0x0120->8193)  
0x34, 0x38, 0x3c 4 bytes * 3 c_uint32 Unknown block of data: x00x00x00x00 3 times
  Start containers header metadata (11 blocks) (datasheet below represents only 1 of 11th data blocks)
0x40 4 bytes c_uint32 Container Header separator High hex: 0x50 dec: 80
0x44 4 bytes c_uint32 Container Header separator Low hex: 0xFFFF
  End of container header metadata
Containers data 1 block example represented
0x48 8 bytes c_ulong Block data size (in bytes)  
0x50 4 bytes c_uint32 data block start offset from the file beginning  
0x54 4 bytes c_uint32 Unknown data, could be an some sort of offsets  
0x58 4 bytes c_uint32 Skip the amount of bytes when end of slot block has reached (4h->4)

hex: 0x04

dec: 04

0x5c 4 bytes c_uint32 could be a separator useless block or just 8 byte for 0x58 block x00x00x00x00
  End of Containers header data
  End of Containers
  0x1A0 => 0x2Bf USER_DATA xxx representation in following format
0x1A0 26 bytes c_char_p string sequence USER_DATA 000x00
0x1BA 26 bytes c_char_p string sequence USER_DATA 001x00
  And so on until USER_DATA 010\x00 sequence  
0x2bc 4 bytes c_uint32 separator x00x00x00x00
  End of File General Header

File save slot block

Note

Slot block data contains very useful information, stats, items, deaths count and so on. Char data offset means offsets from character start block. 0x2c0 + offset for 1 slot character and so on.

Char data offset Size/Type Explain Value
0x6c 4 Bytes c_uint32 Health bar current Depends on stats 600
0x70 4 Bytes c_uint32 Health bar Depends on stats 600
0x74 4 Bytes c_uint32 Health bar Depends on stats 600
0x78 4 Bytes c_uint32 Unknown data 0x7d
0x7c 4 Bytes c_uint32 Unknown data 0x7d
0x80 4 Bytes c_uint32 Unknown data 0x7d
0x84 4 Bytes c_uint32 Unknown data 0x00000000
0x8c 4 Bytes c_uint32 Stamina 2 Depends on stats max: 160
0x90 8 Bytes c_long Stamina 3 Depends on stats max: 160
0x98 8 Bytes c_long Vitality Depends on level and so on (30)
0xa0 8 Bytes c_ulong Attunement Depends on level and so on (10)
0xa8 8 Bytes c_ulong Endurance Depends on level and so on (50)
0xb0 8 Bytes c_ulong Strength Depends on level and so on (50)
0xb8 8 Bytes c_ulong Dextirity Depends on level and so on (20)
0xc0 8 Bytes c_ulong Intelligence Depends on level and so on (10)
0xc8 8 Bytes c_ulong Faith Depends on level and so on (10)
0xd0 8 Bytes c_ulong Unknown data  
0xd8 8 Bytes c_ulong Humanity Depends on level and so on (00)
0xe0 8 Bytes c_long Resistance Depends on level and so on (11)
0xe8 4 Bytes c_uint32 Level Depends on level and so on (11)
0xec 4 Bytes c_uint32 Souls Depends on level and so on (9312)
0xf0 8 Bytes c_ulong Earned souls Depends on level and so on (9991)
0xf8 4 Bytes c_uint32 Unknown data Could be separator 0x00000000
0xfc 4 Bytes c_uint32 Soul statement: hollow, human (could be other state statuses) 0x00000000 - human 0x00000008 - hollow
0x100 28 Bytes c_char_p Character's name Depends on your imagination (Nick)
skipped data (0x10e->0x121)
0x122 1 Bytes c_bool Male Depends on your choice (1)
0x126 1 Bytes c_uint8 Class Depends on your choice (6)
0x127 1 Bytes c_uint8 Body Depends on your choice (0)
0x128 1 Bytes c_uint8 Gift Depends on your choice (1)
0x129 1 Bytes c_uint8 Unknown data  
0x12a 1 Bytes c_uint8 Unknown data  
0x12b 1 Bytes c_uint8 Unknown data  
0x12c 4 Bytes c_uint32 Unknown data 0x00000000
0x130 4 Bytes c_uint32 Unknown data 0x00000000
0x134 4 Bytes c_uint32 Unknown data 0x00000000
0x138 4 Bytes c_uint32 Unknown data 0x00000000
0x13с 4 Bytes c_uint32 Unknown data 0x00000000
0x140 4 Bytes c_uint32 Unknown data 0x00000000
0x144 4 Bytes c_uint32 Unknown data 0x00000000
0x148 4 Bytes c_uint32 Unknown data 0x00000000
0x14с 4 Bytes c_uint32 Unknown data 0x00000000
0x150 4 Bytes c_uint32 Unknown data 0x00000000
0x154 4 Bytes c_uint32 Unknown data 0x00000000
0x158 1 Bytes c_uint8 Poison resistance Depends on your items and armour
0x15c 1 Bytes c_uint8 Bleeding resistance Depends on your items and armour
0x160 1 Bytes c_uint8 Poison resistance (could be repeated or something) Depends on your items and armour
0x164 1 Bytes c_uint8 Damnation resistance Depends on your items and armour
0x168 1 Bytes c_uint8 Face Depends on your choice (6)
0x16c 1 Bytes c_uint8 Face Depends on your choice (6)
0x16d 1 Bytes c_uint8 Hairs Depends on your choice (6)
0x16e 1 Bytes c_uint8 Color Depends on your choice (6)
skip
0x228 4 Bytes c_uint32 Left arrows slot Unknown data type
0x22c 4 Bytes c_uint32 Left bolts slot Unknown data type
0x230 4 Bytes c_uint32 Right arrows slot Unknown data type
0x234 4 Bytes c_uint32 Right bolts slot Unknown data type
0x238 4 Bytes c_uint32 Unknown item slot? Unknown data type
0x23c 4 Bytes c_uint32 Unknown item slot? Unknown data type
0x240 4 Bytes c_uint32 Unknown item slot? Unknown data type
0x244 4 Bytes c_uint32 Unknown item slot? Unknown data type
0x248 4 Bytes c_uint32 Unknown item slot? Unknown data type
0x24c 4 Bytes c_uint32 Left ring slot Unknown data type
0x250 4 Bytes c_uint32 Right ring slot Unknown data type
0x254 4 Bytes c_uint32 First quick slot item type Unknown data
0x258 4 Bytes c_uint32 Second quick slot item type Unknown data
0x25c 4 Bytes c_uint32 Third quick slot item type Unknown data
0x260 4 Bytes c_uint32 Fourth quick slot item type Unknown data
0x264 4 Bytes c_uint32 Fifth quick slot item type Unknown data
0x268 4 Bytes c_uint32 One hand/Double hand switcher weapon use 0x00000001 - 1 hand 0x00000003 - doubled
0x26c 4 Bytes c_uint32 Left hand weapon/shield flag 0x00000001 or 0x00000000
0x270 4 Bytes c_uint32 Right hand weapon/shield flag 0x00000001 or 0x00000000
0x274 4 Bytes c_uint32 Unknown flag, could possible switch something 0x00000001 or 0x00000000
0x278 4 Bytes c_uint32 Unknown flag, could possible switch something 0x00000001 or 0x00000000
0x27c 4 Bytes c_uint32 Unknown flag, could possible switch something 0x00000001 or 0x00000000
0x280 4 Bytes c_uint32 Unknown flag, could possible switch something 0x00000001 or 0x00000000
0x284 4 Bytes c_uint32 Left hand weapon/shield first slot Weapon/Armour type knife: 100015
0x288 4 Bytes c_uint32 Left hand weapon/shield second slot Weapon/Armour type knife: 100015
0x28c 4 Bytes c_uint32 Right hand weapon/shield first slot Weapon/Armour type knife: 100015
0x290 4 Bytes c_uint32 Right hand weapon/shield second slot Weapon/Armour type knife: 100015
0x294 4 Bytes c_uint32 Left arrows slot Item type or 0xffffffff
0x298 4 Bytes c_uint32 Left bolts slot Item type or 0xffffffff
0x29с 4 Bytes c_uint32 Right arrows slot Item type or 0xffffffff
0x2a0 4 Bytes c_uint32 Right bolts slot Item type or 0xffffffff
0x2a4 4 Bytes c_uint32 Head wearing slot Head (armour type)
0x2a8 4 Bytes c_uint32 Body wearing slot Body (armour type)
0x2ac 4 Bytes c_uint32 Hands wearing slot Hands (armour type)
0x2b0 4 Bytes c_uint32 Legs wearing slot Legs (armour type)
0x2b4 4 Bytes c_uint32 Something that points on some item in the inventory Rings (item type)
0x2b8 4 Bytes c_uint32 Left ring slot Rings (item type)
0x2bc 4 Bytes c_uint32 Right ring slot Rings (item type)
0x2c0 4 Bytes c_uint32 First quick slot item type Any accessible item type (203 for ex.)
0x2c4 4 Bytes c_uint32 Second quick slot item type Any accessible item type (203 for ex.)
0x2c8 4 Bytes c_uint32 Third quick slot item type Any accessible item type (203 for ex.)
0x2cc 4 Bytes c_uint32 Fourth quick slot item type Any accessible item type (203 for ex.)
0x2d0 4 Bytes c_uint32 Fifth quick slot item type Any accessible item type (203 for ex.)
0x2d4 4 Bytes c_uint32 Backpack items amount Depends 34
0x2d8 4 Bytes c_uint32 Unknown data  
0x2dc 4 Bytes c_uint32 Unknown data  
  End of stats block
0x2e0 Start block for your backpack
  skip (each storage item allocates 4 * 7 bytes of space) see item storage block description below
0xe2e0 End block of your backpack last item storage points on 0xe2c4
skip
0xe344 4 Bytes c_uint32 Active spell slot Depends on your sorcery slots amount and spells bind
0xe35c 4 Bytes c_uint32 Active slot of something Unknown type of data
skip
0x1f128 4 Bytes c_uint32 Deaths Depends on your skill :D (155)
0x1f138 4 Bytes c_uint32 Phantom encounters (PVP/Co-op/the likes) (may be)  

Start block

Note

0x2c starts with first character data. Character data is under heavily process of reverse engineering, so there is only some simple bunch of data represented withing different blocks/structures such like as :ref:`stats`, :ref:`items`.

Stats

Note

All character statistics depending on items/primary stats (vitality->resistance) are dynamicly-calculated type of data. So there's no reason to store it or modify it via runtime. Therefore only two of this type of data present in the table below. it's Capacity and Physical defence.

Note

General stats such like as Vitality, Attunement, Strength and so on stored in RAM with given offsets listed in 3rd table column. But their real address slightly different from save file one, be warned. For example if Vitality has 0x7C563C00 address then Attunement is certainly with 0x08 offset further and stored into 0x7C563C08

Parameter Amount of memory entries (ingame) Amount of store entries (save file)
Stamina 3 slots, 4 byte BFI + 0x88 (and 0x8c, 0x90)
Vitality 1 slot, 4 byte BFI + 0x98
Attunement 1 slot, 4 byte BFI + 0xa0
Endurance 1 slot, 4 byte BFI + 0xa8
Strength 1 slot, 4 byte BFI + 0xb0
Dexterity 1 slot, 4 byte BFI + 0xb8
Intel. 1 slot, 4 byte BFI + 0xc0
Faith 1 slot, 4 byte BFI + 0xc8
Unknown 1 slot, 4 byte (unsigned) BFI + 0xd0
Humanity 1 slot, 4 byte BFI + 0xd8
Resistance 1 slot, 4 byte BFI + 0xe0
Level 1 slot, 4 byte BFI + 0xe8
Souls 1 slot, 4 byte BFI + 0xec
Collected Souls 1 slot, 4 byte BFI + 0xf0
Name 1 slot, 28 byte 13*2 = name, 1 = 0x00 BFI + 0x100
Gender (male) 1 slot, 1 byte 0 - female, 1 - male BFI + 0x122
Class 1 slot, 1 byte BFI + 0x126
Body 1 slot, 1 byte BFI + 0x127
Gift 1 slot, 1 byte BFI + 0x128
Face 1 slot, 1 byte BFI + 0x16c
Haris 1 slot, 1 byte BFI + 0x16d
Color 1 slot, 1 byte BFI + 0x16e
Deaths 1 slot, 1 byte BFI + 0x1f128
Dynamicly-calculated data
Capacity 2 slots 4 byte float (evaluateable) Offsets don't concure with memory ones
Physical defence 6 slots 4 byte (evaluateable) Offsets do not concure with memory offsets

Items

General items and weapons/armour structure

from ctypes import
weapon_proto_structure = {
    'stored': c_uint32,           # see table below
    'type': c_uint32,             # item type
    'amount', c_uint32,           # have amount
    'position': c_uint32,         # position?
    'have': c_uint32,             # have
    'durability': c_uint32,       # item durability
    'durability_hits': c_uint32,  # 0->9
}
Field Possible values Explanation
stored
  • 0xFFFFFFFF
  • 0x10000000
  • 0x20000000
  • 0x30000000
  • 0x40000000
  • clean slot
  • weapons stored
  • armour stored
  • unknown data
  • items/bolts stored
type see :ref:`items-type` and so on item/weapon/armour type
amount 0x00000000 to 0xFFFFFFFF probably how much do you have it?
position some big numbers (didn't parsed for till moment) could be some pointer or address for backpack navigation
have 0x00000001 or 0x00000000 yes or no do you have it?
durability Depends on weapon or armour Depends on item if it has dur. statement
durability_hits 0x00000000 to 0x00000009 Stack counter from 0 to 9 each circle weapon or armour losts its durability point

Items type

Weapons and armour type

Multiplayer data

60 bytes each account entry

from ctypes import
weapon_proto_structure = {
    'marker1': c_uint32,      # (0x100) flag
    'marker2': c_uint32,      # (0x3400) flag
    'byte_1': c_byte,         # probably flag
    'name': c_char_p(16),     # char's name 14 + \x00 * 2
    'byte_2': c_byte,         # probably flag
    'byte_3': c_byte,         # probably flag
    'byte_4': c_byte,         # probably flag
    'statement_1': c_uint32,  # player's data
    'statement_2': c_uint32,  # player's data
    'statement_3': c_uint32,  # player's data
    'statement_4': c_uint32,  # player's data
    'statement_5': c_uint32,  # player's data
    'statement_6': c_uint32,  # player's data
    'statement_7': c_uint32,  # player's data
    'statement_8': c_uint32,  # player's data
}