SL2 Analyzer
Read a FromSoftware .sl2 save and report what is in it
Loading...
Searching...
No Matches
er.py File Reference

Go to the source code of this file.

Namespaces

namespace  sl2
 
namespace  sl2.er
 

Functions

 sl2.er.er_roster (menu)
 Read the ER character roster (active flag, name, level per slot).
 
 sl2.er.er_gaitems (buf)
 Walk the ER GaItem array and yield every owned item id.
 
 sl2.er.er_find_stats (buf, level)
 Locate the ER stat block by content, or None if none validates.
 
 sl2.er.er_parse (buf, iddb, name, level)
 Parse one ER slot into the unified dict (full where stats validate).
 
 sl2.er.load_er_db (db_dir)
 Load the ER id tables, category-scoped: {category: {id: name}}.
 
 sl2.er.er_resolve (iid, db)
 Resolve an ER item id to (name, category), type-scoped by its nibble.
 

Variables

int sl2.er.ER_GAITEM_START = 0x30
 Offset of the GaItem array inside an ER slot: past the 16-byte checksum, the version and map-id words, and the 16 bytes after them.
 
int sl2.er.ER_GAITEM_COUNT = 0x1400
 Number of GaItem entries in the array.
 
 sl2.er.ER_MENU_LEN_OFF
 In the menu (header) entry: offset of the variable-length menu-system block's length field, the byte after which its data begins, the number of character slots, the size of one profile summary, and the profile field offsets for name and level.
 
 sl2.er.ER_MENU_DATA_OFF
 In the menu (header) entry: offset of the variable-length menu-system block's length field, the byte after which its data begins, the number of character slots, the size of one profile summary, and the profile field offsets for name and level.
 
 sl2.er.ER_SLOT_COUNT
 
 sl2.er.ER_PROFILE_STRIDE
 
 sl2.er.ER_PROFILE_NAME_LEN
 
 sl2.er.ER_PROFILE_LEVEL_OFF
 
 sl2.er.ER_STAT_D
 ER stat block as signed distances from the Vigor field (the anchor).
 
 sl2.er.ER_HP_D
 ER max HP, stamina, rune level and runes held, same anchor-relative scheme.
 
 sl2.er.ER_STAM_D
 ER max HP, stamina, rune level and runes held, same anchor-relative scheme.
 
 sl2.er.ER_LEVEL_D
 ER max HP, stamina, rune level and runes held, same anchor-relative scheme.
 
 sl2.er.ER_RUNES_D
 ER max HP, stamina, rune level and runes held, same anchor-relative scheme.
 
int sl2.er.ER_LEVEL_BASE = 79
 ER's rune-level identity: level == (sum of the eight attributes) - 79.
 
int sl2.er.ER_LEVEL_MAX = 8 * 99 - ER_LEVEL_BASE
 The highest rune level the identity can produce: eight attributes at 99 sum to 792, minus ER_LEVEL_BASE.
 
 sl2.er.ER_EMPTY_SLOT_IDS
 The ids that mean "this slot is empty", not "the character owns this".
 
dict sl2.er.ER_CAT = {0x0: "weapons", 0x1: "armors", 0x2: "talismans", 0x4: "goods", 0x8: "ashes"}
 ER item category by id top nibble (the ItemGib type code), and the render category each maps to.
 
 sl2.er.ER_DB_FILES = tuple(ER_CAT.values())
 ER db category files (one per type), each {8-hex-id: name}.
 
int sl2.er.ER_WEAPON_BASE_STEP = 10000
 Weapon ids bake affinity+reinforcement into the low digits: the id is base + affinity*100 + level, base spaced by ER_WEAPON_BASE_STEP.
 
int sl2.er.ER_WEAPON_AFFINITY_STEP = 100
 
int sl2.er.ER_MAX_REINFORCE = 25
 Highest reinforcement ER allows (+25 on the standard path; somber stops at +10).