SL2 Analyzer
Read a FromSoftware .sl2 save and report what is in it
Loading...
Searching...
No Matches
__init__.py
Go to the documentation of this file.
1"""Read a FromSoftware `.sl2` save and report what is in it.
2
3The package is layered, and the layers only point one way:
4
5 reader / keys bounds-checked reads, the AES keys
6 bnd4 / crypto / detect the container, per-game decryption, which game
7 itemdb / progress / roster item tables, the shared progress floor, names
8 ds1 / ds2 / ds3 / er one module per game family
9 totals the "of N" denominators (needs every game)
10 render / jsonout the two writers
11 convert the driver: parse_save, then either writer
12 cli argument parsing and main()
13
14`parse_save` does all the reading and `render_markdown` / `build_json` do all the
15writing, so the two output formats cannot drift apart — they are the same data.
16
17Everything below is imported for its side effect of being re-exported: the CLI, the
18parity harnesses and the scratch tools all reach in through this one name.
19"""
20
21from .convert import (
22 GAMES,
23 REPO_URL,
24 SaveData,
25 convert,
26 parse_save,
27 render_markdown,
28 footer_for,
29 disclaimer_for,
30 save_format_version,
31 er_game_patch,
32)
33from .jsonout import SCHEMA_URL, SCHEMA_VERSION, build_json, parse_meta
34from .render import md_for_character
35from .bnd4 import parse_bnd4, checksum_ok, Bnd4Entry
36from .detect import detect_game
37from .reader import read_uint, u8, u16, u32, u64, read_utf16, is_valid_name
38
39__all__ = [
40 "GAMES",
41 "REPO_URL",
42 "SaveData",
43 "convert",
44 "parse_save",
45 "render_markdown",
46 "footer_for",
47 "disclaimer_for",
48 "save_format_version",
49 "er_game_patch",
50 "SCHEMA_URL",
51 "SCHEMA_VERSION",
52 "build_json",
53 "parse_meta",
54 "md_for_character",
55 "parse_bnd4",
56 "checksum_ok",
57 "Bnd4Entry",
58 "detect_game",
59 "read_uint",
60 "u8",
61 "u16",
62 "u32",
63 "u64",
64 "read_utf16",
65 "is_valid_name",
66]