Skip to content

Research Report Dlc4 Override

LopeKinz edited this page Oct 1, 2026 · 2 revisions

Override-Chunk: Custom edits under the Retail card name c2v1

Task dlc4_override, 2026-09-24 (New build; the output of the aborted run was discarded and not used). Files: tools/build_dlc4_override.py, re_probes/dlc4_override/ (chunk_22.resources, manifest.json), this report.

Result

re_probes/dlc4_override/chunk_22.resources is the installed Custom Bundle (re_probes/entitypipe/base/chunk_22.resources, 7128 entries, sha256 a8da9e4e... = today dlc/dlc_0/base/chunk_22.resources) with exactly one modified entry: compfile:maps/game/dlc/c02/c2v1.entities (Index 873) which carries the 49 Manifest edits on the Retail text, without any alias names. All Gates green, all negative controls caught.

  • sha256 cadfbfce256d1a99ec1b4b151d801457b08cdb02724bc004c157d2eed06ab2f5, 151 702 019 bytes (same size as the source: +248 bytes payload disappear in alignment padding).
  • Reproducible: the new build is sha256-identical to the output of the aborted run.
  • Install as dlc/dlc_0/base/chunk_22.resources. Since dlc_0 wins according to runtime test (18:44) for game/dlc/c02/c2v1, a normal game load reads this file. Structurally valid; the edits under c2v1 are not yet seen in-game.

How built

  1. Retail text from entry 873 of the source bundle; its raw bytes are byte-identical to dlc/dlc_2/base/chunk_22.resources (verified).
  2. Edits from re_probes/entitypipe/manifest.json re-applied with functions from tools/build_custom_map.py (only imported): retype for 4 enemies + 10 pickups, swap_placement for the 2 player starts, light_color (color from manifest, LIGHT_MIN_INTENSITY) for 33 lights, in the order of author().
  3. tnccrypt.compfile_wrap, then idcl.Archive.rebuild + idclwrite.finalize (= idclwrite.write, called separately to allow the state before finalize to be probed as a negative control).

The alias text was not used as source: it deviates from Retail in 186 entities only by alias names, 19 of them with lowercase Kiscule-decl paths (c2v1_geo_Office -> c2v1_custom_geo_office), plus codex' cyan light c2v1_geo_lobby_detail_light_point_9_563923954 (no manifest edit). A replace("c2v1_custom", "c2v1") on the alias text would cause 20 entities to be incorrect -- the script measures this at every run.

Tests (this run, each can fail)

Test Result
Source Entry = dlc_2-Retail (Rawbytes) identical
Retail Text Round-Trip byte-exact
Change Log of Reapplication == changes in Manifest (Donor, inherit old/new, kept, Intensity, Colors, Spawn before/after) identical; 4/10/33/2
c2v1_custom in new text (case-insensitive) 0
Entity Diff against Retail-c2v1 49 changed = 49 claimed, names identical; 0 alias-only entities; no non-entity lines changed; order identical
build_custom_map.check including inherit against 996 entityDefs empty
new quoted names against Retail-c2v1 0
Cross-check against installed c2v1_custom.entities every Entity identical except alias names, sole exception is the Cyan Light
Negative: Edit omitted (..._pretzel_1_1) caught: claimed but unchanged
Negative: Alias renaming reverted (c2v1_geo_lobby_func_collision_only_2_1509497262, actual line from alias text) caught: carries 'c2v1_custom', alias rename only, unclaimed change
Negative: Container before finalize probe_idclhash BAD; probe_datahash exactly 1 BAD = our entry
probe_datahash (final) 7127/7127 (1 entry Mode 4, unchanged)
probe_idclhash (final) +0x08 1/1, +0x20 1/1
Table Diff Source -> Output (Payload + all fields except Offset+0x38) only Index 873, there +0x40/+0x48/+0x50; Header/Dependency-/String tables identical except +0x08/+0x20
finalize() 1 data hash new, hash_0x60 0, deps 0
Payload read back compfile_unwrap == new text, parses byte-exact

Image entries unchanged, so chunk_22.texdb from dlc_2 (identical to dlc_0 via cmp) fits. The alias entry c2v1_custom.entities (7079) remains in the chunk; map game/dlc/c02/c2v1_custom works as before.

Beifiles for a DLC folder serving c2v1

Paths relative to dlc/dlc_2/; Status read from dlc/dlc_0, nothing written.

File Bytes in dlc_0
base/sound/soundbanks/pc/sound.pack 26 003 310 yes
base/sound/soundbanks/pc/english(us).pack 27 082 593 yes
base/sound/soundbanks/pc/french(france).pack 25 505 509 yes
base/sound/soundbanks/pc/italian.pack 26 389 212 yes
base/sound/soundbanks/pc/portuguese(brazil).pack 25 664 560 yes
base/sound/soundbanks/pc/russian.pack 27 795 150 yes
base/sound/soundbanks/pc/spanish(mexico).pack 27 877 094 yes
base/sound/soundbanks/pc/spanish(spain).pack 28 487 489 yes
base/sound/soundbanks/pc/prodspec.json 15 078 yes
base/sound/soundbanks/pc/wwise_project.bin 4 470 035 yes
virtualtextures/maps/game/dlc/c02/c2v1.pages 166 318 272 yes
base/bink/chronicles/sd/one/c2v1_intro_row.bk2 90 664 632 yes
base/maps/game/dlc/c02/c2v1/textures.cache 67 216 392 no

Plus base/chunk_22.texdb (existing), base/packagemapspec.json, and dlcinfo.json. textures.cache is located in dlc_2 under the map path and is missing in dlc_0; the test at 18:44 ran without error messages, so whether the file is used remains open -- link for parity. Soundbanks are DLC-wide, MountDlc mounts dlc_N/base. Machine-readable in re_probes/dlc4_override/manifest.json (side_files_from_dlc_2, in_dlc_0).

Install (Master)

Delete first, then copy -- never write via a hardlink in dlc_2:

$G="<Steam library>\steamapps\common\Wolfenstein.II.The.New.Colossus"
Remove-Item "$G\dlc\dlc_0\base\chunk_22.resources"
Copy-Item re_probes\dlc4_override\chunk_22.resources "$G\dlc\dlc_0\base\"

Backtrack: the same two steps with re_probes\entitypipe\base\chunk_22.resources.

Worked, if the Gestapo Office Save loads with MountDlc: mounting ../dlc//dlc_0/base and you see the edits: red Lobby / green office, MP instead of Pretzel at (-3, -176), Elite soldiers in the first Lobby wave.

Open

  • Game State. A save file carries the entity state of your own entities; whether spawned enemies/pickups come from the save or from .entities (in which case Retypes only trigger on new spawns) is unspecified. Lights should be visible immediately; a fresh chapter start is the cleaner test.
  • The cyan light from the Alias bundle is intentionally not included.

Reproduction

python tools/build_dlc4_override.py     # ~2 min, each Gate printed, exit != 0 on FAIL

If a FAIL occurs after writing, the output will be cleared.

Clone this wiki locally