Wolfenstein Modloader Buy me a coffeeKaffee spendieren

Wiki / Research reportsForschungsberichte

TNC Small Custom Map Prototype

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.

This early report for Wolfenstein II: The New Colossus creates a custom map project, c3v1_custom, as an alias of a DLC 3 map with its own DLC ID and chunk ID. It lists the 360 assets of the original map and builds a 33.3 MB candidate archive that the project's own parser reads back. The prototype is deliberately not runnable, because several pieces were still unsolved at the time.

  • The inventory has 360 name-based assets, 220 of them map-critical (models, collision, scripts, images and more).
  • The candidate archive keeps the original compression, offsets and hashes and only renames the string table.
  • The header value +0x08 was copied from the original because its calculation was still unknown; +0x20 is computed correctly.
  • Internal references in entities, collision, navmesh, visibility and shadows were not rewritten, and the texture database is empty.
  • Conclusion: a new map spec or entity file alone does not create a new map.

Dieser frühe Bericht zu Wolfenstein II: The New Colossus legt ein eigenes Kartenprojekt c3v1_custom als Alias einer DLC-3-Karte mit eigener DLC-ID und Chunk-ID an. Er listet die 360 Assets der Originalkarte auf und baut ein 33,3 MB großes Kandidaten-Archiv, das der projekteigene Parser wieder einliest. Der Prototyp ist absichtlich nicht lauffähig, weil damals noch mehrere Teile ungelöst waren.

  • Das Inventar umfasst 360 namensbasierte Assets, davon 220 kartenkritisch (Modelle, Kollision, Skripte, Bilder und mehr).
  • Das Kandidatenarchiv behält Originalkompression, Offsets und Hashes und benennt nur die String-Tabelle um.
  • Der Header-Wert +0x08 wurde vom Original übernommen, weil seine Berechnung noch unbekannt war; +0x20 wird korrekt berechnet.
  • Interne Verweise in Entities, Kollision, Navmesh, Sichtbarkeit und Schatten wurden nicht umgeschrieben, und die Texturdatenbank ist leer.
  • Fazit: Eine neue Map-Spec oder Entity-Datei allein erzeugt noch keine neue Karte.

Technical detailsTechnische Details

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

Status: 2026-09-22. The builder reads exclusively the installed DLC-3 index and writes only to re_probes/tnc_custom_map_c3v1_custom. The running Steam installation was not modified.

Result

An alias project game/dlc/c03/c3v1_custom with its own dlcid: 4 and chunkid: 26 in base/packagemapspec.json was generated. The inventory from the real chunk_24.resources comprises 360 name-based assets, of which 220 are map-critical assets:

cm 90, compfile 3, extkisclule 90, file 4, hknavmesh 1,
image 85, json 1, material 3, model 30, modelAsset 25,
modelstream 25, pvs 1, staticShadowGeom 1, staticStreamTree 1

The full mapping c3v1 -> c3v1_custom is located in asset_inventory.json. The builder is reproducible: tools/build_tnc_custom_map_prototype.py.

Negative Checks / Blockers

The prototype is intentionally not runnable. chunk_26.resources and chunk_26.texdb are missing on purpose; furthermore, internal references in Entities, Proc/Prockd, World-Tome, Collision, Navmesh, PVS, and Shadow were not rewritten. There is also no new Save-/Menu-registration. A start would therefore not constitute a valid Custom Map test.

bundle_status.json documents these checks. This specifically refutes the claim that a new Mapspec or a .entities file alone generates a new Map. The next real technical step is an isolated Chunk-/Texdb-rebuild with consistent Asset-Index and rewritten Cross-References; until then, the alias remains an Inventory-/Format prototype.

IDCL Analysis and Candidate Rebuild

The builder additionally generates base/chunk_26.resources.candidate (33.3 MB) as an isolated IDCL-v12 candidate. It contains all 360 selected c3v1 entries, preserves the original compressions (98× stored, 261× Kraken, 1× Kraken-Blocks), Offsets, Resource-Hashes, and Version fields, and writes only the string table to c3v1_custom. Its own parser reads the candidate with 360 entries again; there are no Dependencies in this DLC part.

This is a structural rebuild, not a claimed runtime success. The candidate header adopts +0x08 from Retail because its calculation is still unknown; +0x20 is correctly calculated as a FarmHash via the metadata. Furthermore, binary/internal path and asset references in Proc, World Tome, Collision, Navmesh, PVS, Shadow, and Entities remain unchanged. The 32-Byte Texdb file and Loader-/Save-registration are also not yet validated. Therefore, the candidate is neither mounted nor copied into the Steam installation.

The implementation lies in tools/build_tnc_custom_map_prototype.py. It has a hard output limit outside the game path and generates no file in the TNC directory. A successful parser roundtrip is thus documented; a runnable c3v1_custom remains open until the solution of +0x08, Texdb, and the Cross-References.