Skip to content

Latest commit

 

History

History
57 lines (42 loc) · 6.25 KB

File metadata and controls

57 lines (42 loc) · 6.25 KB

data/

Bundled inputs that travel with the repo so the iteminfo export pipeline runs out of the box on any machine that has a Crimson Desert install.

File What it is Source Size
keys.txt Current-version Crimson Desert itemKey list (one decimal key per line, in in-game order). Tracks the latest game patch — currently 1.12 with 6,483 keys (1.12 added 150 net items vs 1.11). Dumped from CrimsonDesert.exe process memory via Cheat Engine (see Generation below) ~55 KB
keys-1.12.txt Snapshot dumped against the live 1.12 install. Byte-identical to keys.txt — kept so a future patch that does reorder keys can still be diffed back against the 1.12 baseline. Frozen from the live 1.12 dump ~55 KB
keys-1.11.txt Snapshot dumped against the live 1.11 install. +8 items vs 1.10; the frozen 1.11 baseline (was byte-identical to keys.txt through the 1.11 series, now superseded by the 1.12 refresh). Frozen from the live 1.11 dump ~54 KB
keys-1.10.txt Snapshot dumped against the live 1.10 install. +11 items vs 1.09; the frozen 1.10 baseline (was byte-identical to keys.txt through the 1.10 series, now superseded by the 1.11 refresh). Frozen from the live 1.10 dump ~54 KB
keys-1.09.txt Snapshot of the 1.09 keys file. Byte-identical to keys-1.08.txt (1.09 was a content-only patch, no item add/remove). Frozen from the live 1.09 dump ~54 KB
keys-1.08.txt Snapshot dumped against the live 1.08 install. +61 items vs 1.07. Frozen from the live 1.08 dump ~54 KB
keys-1.07.txt Snapshot of the 1.07 keys file. Byte-identical to keys-1.06.txt (1.07 didn't reorder the key list). Frozen from the live 1.07 dump ~53 KB
keys-1.06.txt Snapshot of the 1.06 keys file kept for cross-version reference / saved-CE-table compatibility. Frozen alongside the 1.07 snapshot ~53 KB
keys-1.05.01.txt Snapshot of the 1.05 keys file kept for cross-version reference / saved-CE-table compatibility. Do not regenerate. Frozen from keys.txt before the 1.06 refresh ~53 KB
gamedata-keys-1.08/gamedata-keys-1.12/ Per-table key snapshots for the 30 non-iteminfo gamedata tables the c_abi bridges read (skill, mission, quest, stage, gimmick, character, faction triple, store, mercenary, dye triple, niche bridges, etc.). One decimal uint32 per line, in PABGH appearance order. Plays the same cross-version-diff role as keys.txt does for iteminfo — diff the directory trees (diff -r data\gamedata-keys-1.10 data\gamedata-keys-1.11) to see exactly which keys were added/removed per table. Generated by ../scripts/dump_gamedata_keys.py ~750 KB each

How keys.txt is used

scripts/export_for_ce.py reads keys.txt and uses each key as an anchor in the live iteminfo.pabgb binary — it scans for the u32 key + valid string_key prefix, locates every item exactly, then parses each item chunk independently. This decouples the user-facing pipeline (items.jsonl + CE dropdown) from parser completeness, so the output is 100% covering even when the Rust parser doesn't yet understand the full layout.

Order matters: the index of a key in keys.txt is the in-game item index used by the Cheat Engine dropdown. The output.txt line 123:Some Name/1004899 means index 123 = key 1004899 = "Some Name".

How to regenerate after a game patch

The game ships an updated iteminfo.pabgb with each patch and may add/remove/reorder itemKeys. When that happens:

  1. Launch the game (any save / main menu is fine).
  2. Open Cheat Engine and attach to CrimsonDesert.exe.
  3. Load the Dump Item Keys entry from the CE table at D:\Github\Mydev-Cheat-Engine-Tables\Crimson Desert\ (source: dump_item_keys.CEA).
  4. Toggle [ENABLE] — the script AOBScans for the loaded itemKey array, then walks it slot-by-slot. The in-game array is [u32 itemKey][u32 offset] where the second field is the byte offset of the item inside iteminfo.pabgb. The Lua auto-terminates on the first slot whose offset is non-monotonic (= one past the real array end), so what lands in keys.txt is exactly the live array — no manual trimming required. It also stops on key == 0xFFFFFFFF / key == 0 / page fault as defensive backstops.
  5. Replace this file with that fresh keys.txt (or pass --keys path\to\new\keys.txt to the exporter without copying). Before overwriting, consider snapshotting the outgoing version as keys-<previous-patch>.txt next to the new one (the bundled keys-1.05.01.txt is an example of this pattern).

The format is plain text, one decimal uint32 per line. A clean dump has exactly N lines for N in-game items (e.g. 6,253 in 1.06 and 1.07). If the file contains trailing 4294967295 sentinels or other garbage past the real array end, export_for_ce.py's anchor scanner will emit no_anchor fallback records for those — visible in the parser-status line — but the pipeline still produces aligned output. Cleaner is better; if you see no_anchor > 0, re-run the Lua or hand-trim.

Why this is committed (the only piece of game-derived data that is)

keys.txt is a list of integer ids, not asset data — it carries no copyrighted strings, art, or text content. It's also the smallest, most stable input the pipeline needs (~54 KB and rarely changes). The same applies to the per-table dumps under gamedata-keys-1.08/: each file is one decimal uint32 per line, nothing more.

By contrast everything in out/ (iteminfo.pabgb, items.jsonl, paloc_*.json, output*.txt) IS extracted Pearl Abyss content and is gitignored — out/ is generated each run.

Regenerating the non-iteminfo per-table snapshots after a patch

python scripts\dump_gamedata_keys.py --version 1.09

Writes data\gamedata-keys-1.09\<table>.txt for each of the 30 PABGH-indexed tables (auto-detects four PABGH shapes: u32cnt+(u32,u32)*, u16cnt+(u32,u32)*, u16cnt+(u16,u32)*, u16cnt+(u8,u32)*). For most patches this is a near-no-op — diff the new directory against the previous one (diff -r data\gamedata-keys-1.08 data\gamedata-keys-1.09) to see exactly which keys Pearl Abyss added or removed per table. Useful for spotting "the patch notes said X new factions" without spinning up the bridges or reading binary.