Wolfenstein Modloader Buy me a coffeeKaffee spendieren

Wiki / The New ColossusThe New Colossus

TNC: Verified Results from 23.09.2026

Partly solvedTeilweise gelöst Original page in the GitHub wikiOriginalseite im GitHub-Wiki

In plain wordsIn einfachen Worten

UpdateAktualisierung Newer than this page: the wiki's start page now records custom maps as working and measured in The New Colossus – a dlc_0 folder takes over map c2v1, confirmed in game with a relit light layout and a normal mission start. The text below still shows the earlier state.Neuer als diese Seite: Die Startseite des Wikis führt eigene Karten in The New Colossus jetzt als funktionierend und gemessen – ein dlc_0-Ordner übernimmt die Karte c2v1, im Spiel bestätigt mit neu beleuchtetem Licht-Layout und normalem Missionsstart. Der Text unten zeigt noch den früheren Stand.

A summary of verified results on custom maps for Wolfenstein II (TNC) as of 23 September 2026. It explains two errors in earlier custom save files, shows that the map and devmap commands exist in the game but are hidden from the console, and solves the second archive header hash, which needs no secret. A playable custom map has not been shown yet.

  • Save detail files use a CRC32 over sorted keys; checked against 26 original files from both games.
  • The game has 234 commands, but only 34 are reachable from outside; map and devmap are hidden.
  • Both archive header hashes match on 27 of 27 archives.
  • A map alias bundle keeps all 6,985 original entries and adds 143 alias entries.
  • Loading, movement and visible changes still have to be confirmed in the game.

Eine Zusammenfassung geprüfter Ergebnisse zu eigenen Karten für Wolfenstein II (TNC), Stand 23. September 2026. Sie erklärt zwei Fehler in früheren selbstgebauten Spielständen, zeigt, dass die Befehle map und devmap im Spiel vorhanden, aber vor der Konsole versteckt sind, und löst den zweiten Header-Hash der Archive, der kein Geheimnis braucht. Eine spielbare eigene Karte ist noch nicht gezeigt.

  • Spielstand-Detaildateien nutzen eine CRC32 über sortierte Schlüssel; geprüft an 26 Originaldateien beider Spiele.
  • Das Spiel hat 234 Befehle, aber nur 34 sind von außen erreichbar; map und devmap sind versteckt.
  • Beide Header-Hashes stimmen bei 27 von 27 Archiven.
  • Ein Karten-Alias-Paket behält alle 6.985 Originaleinträge und ergänzt 143 Alias-Einträge.
  • Laden, Bewegung und sichtbare Änderungen müssen im Spiel noch bestätigt werden.

Technical detailsTechnische Details

Der technische Teil ist auf Englisch – so, wie er im Wiki steht. Unterstrichene Begriffe haben eine Erklärung auf Deutsch.

Status: Offline-save repair and a more complete map alias have been built and specifically tested. A playable custom map has not yet been demonstrated. The following results replace contradictory speculations in earlier reports. Live gameplay, original saves, and Steam files were only read during this investigation.

1. Two Concrete Errors in Previous Save Candidates

game.details contains a dictionary CRC32, not a hash over the unchanged text file. Algorithm: Omit checksum entry, sort remaining keys, concatenate key bytes immediately with value bytes, compute CRC32 over the entirety. Write as signed 32-bit decimal. This matches id Software, idDict::Checksum.

Independent Proof: 26 existing original files, of which 21 have different contents, from TNC and TNO constitute the test. A changed map name with an unchanged checksum falls as expected. The old v2 candidate has exactly this error.

Additionally, checkpoint_mapstart.dat contains three LE-u32-length-prefixed map names and three layer names. The previous exchange of only text bytes extended the strings without adjusting their six length fields. Even with a valid DAT header, this candidate remains structurally incorrect.

Repaired:

  • tools/probe_details_checksum.py: Dictionary verification and targeted recalculation.
  • tools/build_custom_save_candidate.py: Length-aware exchange in both DATs, new MD5-fold DAT headers, new dictionary CRC, output exclusively as a new folder under re_probes/custom_save_candidates.
  • tools/verify_custom_save_candidate.py: Identical identity transformation, longer/shorter paths byte-exactly backwards, false lengths despite correct DAT hash recognized; old v2 errors reproduced.

Candidate: re_probes/custom_save_candidates/FC2-WOLF0-c2v1_custom_v3. Source is the secured manual DLC2 savegame from UI Progression Slot 1, i.e., SLOT0/FC2-WOLF0. .verify was copied unchanged. Its runtime effect will be investigated separately from Claude's Save Verifier. From previous File Corrupt attempts, due to the proven other errors, no insurmountable cryptographic lock can be derived.

2. map and devmap are Present

Process 87400 was opened exclusively for reading with OpenProcess(0x410). Snapshot: re_probes/runtime_87400/module.bin, virtual RVA layout, no runnable or patched EXE. Captured .text, .rdata, .data, .pdata. EXE-SHA256: 68e6c21a97c2a0824ff75961a771605dacbd73f17e33e8e7265741535a3818c3. The addresses apply only to this build; ASLR base is determined per process.

The command system lies at RVA 0x4104420:

Field Live Finding
+0x08 Pointer, +0x10 Count Complete table, 234 commands
+0x28 Pointer, +0x30 Count Exposed table, 34 commands, capacity 64
map Present, Flags 0, Callback RVA 0xA7E2C0, not exposed
devmap Present, Flags 0, Callback RVA 0xA7E0D0, not exposed
fastmap Present, Flags 0, Callback RVA 0xA7DEE0, not exposed
exec, loadGame, saveGame Flags 6, in both tables

Registration 0xA6F3C0: the map callbacks are indeed passed to AddCommand. AddCommand 0x1264840: Flag 2 pulls Flag 4; only entries with Flag 4 additionally enter the exposed table.

Dispatcher 0x1265150, specifically 0x12651A7..0x12651BC, selects between the two tables depending on context system+0x200B8. This explains the observed Unknown-command messages. exec sets the restricted context 1 explicitly at 0x1264170; a CFG detour does not automatically lift this. After successful lookup, another Developer check exists. Its devMode_enable value at RVA 0x2FE3790 was read live as 1.

Tools: tools/tnc_runtime_read.py, tools/tnc_runtime_code.py, tools/tnc_runtime_commands.py. Complete tables: re_probes/runtime_87400/commands_live.json.

No runtime patch was applied. A targeted exposure of existing map callbacks is technically investigable; broadly claiming it was "removed" or "impossible" was incorrect. The second master Claude synchronized the runtime branch via the shared agent cache; until its feedback, Astra remains in isolated construction and read-only analysis.

3. The Second IDCL Header Hash is Solved

When loading, idResourceStorage::OpenContainer at RVA 0xACB780 checks the hash at header offset +0x08. The critical section 0xACBA62..0xACBAB7 shows:

h = farmhash64(header[0x10:0x78])
K = 0x9ddfea08eb382d69
M = (1 << 64) - 1
d = ((version ^ h) * K) & M
d ^= d >> 47
d ^= h
d = (d * K) & M
d ^= d >> 44
d = (d * K) & M
d ^= d >> 41
hash08 = (d * K) & M

version=12. First, the metadata hash at +0x20 is calculated, then +0x08, because +0x20 is part of the hashed header region. The previous metadata hash remains FarmHash64 over the entry table up to and including the final IDCL marker. Both hashes are publicly computable; no secret seed is required.

Proof with tools/tnc_container_hash.py: 27/27 Base/DLC archives, both hashes match. Changed header counters or modified metadata hashes are detected; changes to one's own +0x08 slot affect its calculation as expected. Claude's independent worker w-idclhash-a1 confirmed the same algorithm on 28 archive paths.

Concrete counter-test: bundle_casefold carries the incorrect old header hash cda7783767c0c98f; c729da551d3803c1 is required. bundle_headerfixed contains the newly calculated value and passes both checks. The old package is thus recognized as an invalid test candidate, not as proof against Custom Maps.

4. The Built Alias

Currently in use: re_probes/map_alias_v3/bundle_headerfixed.

  • Resources: base/chunk_22.resources, 151,702,019 bytes.
  • SHA256: 95236c3ebcaffb73a0f367bedbec71b720537677c3ab2aa3d87bd8cafd5fe2c2.
  • 6,985 retail entries fully received with byte-identical payload data.
  • 143 aliases added, including two genuine layer declarations from gameresources.resources. The previous alias lacked these layers.
  • .mapresources fully parsed: MRL Version 1, two layers, 114 type names, 20,832 resource lines, 24 opaque bytes per line, and final map list. 140 resource references were specifically modified, sizes re-serialized.
  • Text references in Entities/Kiscule account for case variants. Image names and texture keys remain intact. For a mount, the original DLC2 chunk_22.texdb is additionally required; it was intentionally not copied again into the workspace. Its source path stands in the manifest.
  • Test feature: previously dark lobby light at (8.72,-192.97,1.32) with cyan-colored light, intensity 18, radius (5,5,4). Visibility untested.

tools/verify_tnc_map_alias_v3.py verifies receipt of all retail payload data, metadata/header hash, index/dependency inventory, orientation, new references, MRL roundtrips, modified lighting data, and specifically defective MRL data.

Limitations: Geometry, collision, PVS, and navigation remain the original data from Gestapo Office. The package is a correctly constructed alias candidate with its own entity changes, not a fully proven new small world. Entry data_hash, hash_0x60, and dependency hashes are still maintained; their runtime effect for alias entries remains open. Loading, movement, collision, and visible differences must be confirmed together in-game.

5. Next Coordinated Test

Claude and Astra must not simultaneously modify Save/Install/Process. A Master exclusively handles the runtime test; the other checks only in read mode. The original Save and currently installed DLC4 are backed up with a rollback before proceeding. First, mount the package and verify valid save listings, then load the new ID game/dlc/c02/c2v1_custom with unique log/runtime evidence and visible changes. A running process or menu alone does not constitute success. No further guessed console commands are required.