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) forgame/dlc/c02/c2v1, a normal game load reads this file. Structurally valid; the edits underc2v1are not yet seen in-game.
How built
- Retail text from entry 873 of the source bundle; its raw bytes are byte-identical to
dlc/dlc_2/base/chunk_22.resources(verified). - Edits from
re_probes/entitypipe/manifest.jsonre-applied with functions fromtools/build_custom_map.py(only imported):retypefor 4 enemies + 10 pickups,swap_placementfor the 2 player starts,light_color(color from manifest,LIGHT_MIN_INTENSITY) for 33 lights, in the order ofauthor(). tnccrypt.compfile_wrap, thenidcl.Archive.rebuild+idclwrite.finalize(=idclwrite.write, called separately to allow the state beforefinalizeto 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.