Wolfenstein Modloader Buy me a coffeeKaffee spendieren

Wiki / Latest research roundsNeueste Forschungsrunden

TNO Custom Maps: How Maps Load, and Why There Is No dlc_0-Style Route

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

In plain wordsIn einfachen Worten

This report decoded how Wolfenstein: The New Order loads its maps and checked whether it has a folder-override route like the one that works for custom maps in Wolfenstein II. It does not: the game has no such mechanism, confirmed by reading the files directly. The only working route is editing a map inside its own chunk in place, and a small test mod that swaps one enemy type passed all 12 offline checks but has not been tried in the running game.

  • A map is chosen through 18 chapter decls; there is no separate DLC or menu decl type among TNO's 105 types.
  • 12 of 37 mapInfo entries have no map file at all: they are cut content, not a hidden way to add maps.
  • Only 10 of 25 maps have enough real room for a same-length edit without rebuilding the chunk.
  • Test mod supersoldaten_c15 swaps 6 firetroopers for supersoldiers on map c05_07_09; 12/12 offline checks pass.
  • Adding a 15th archive pair or using TNO's dlc/info.txt route remains unproven and blocked.

Dieser Bericht hat entschlüsselt, wie Wolfenstein: The New Order seine Karten lädt, und geprüft, ob es einen Ordner-Override-Weg wie den gibt, der in Wolfenstein II für eigene Karten funktioniert. Den gibt es nicht; das wurde durch direktes Lesen der Dateien bestätigt. Der einzige funktionierende Weg ist, eine Karte direkt in ihrem eigenen Chunk zu bearbeiten; eine kleine Test-Mod, die einen Gegnertyp tauscht, bestand alle 12 Offline-Prüfungen, wurde aber noch nicht im laufenden Spiel ausprobiert.

  • Karten werden über 18 chapter-Decls gewählt; unter den 105 Decl-Typen von TNO gibt es keinen eigenen DLC- oder Menü-Typ.
  • 12 von 37 mapInfo-Einträgen haben gar keine Kartendatei: Das sind gestrichene Inhalte, kein versteckter Weg für neue Karten.
  • Nur 10 von 25 Karten haben genug echten Platz für eine längengleiche Änderung ohne Chunk-Neubau.
  • Die Test-Mod supersoldaten_c15 tauscht auf Karte c05_07_09 6 Feuersoldaten gegen Supersoldaten; 12/12 Offline-Prüfungen bestanden.
  • Ein 15. Archivpaar oder der dlc/info.txt-Weg von TNO bleiben unbewiesen und blockiert.

Technical detailsTechnische Details

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

Research pass asking whether The New Order has anything like The New Colossus's dlc_0 folder-precedence route for custom maps, how TNO's map system is actually built, and what the smallest feasible custom-map edit is. Map loading itself is fully decoded by direct, read-only inspection of the retail install and is not in question. A dlc_0-style precedence route does not exist for TNO — confirmed by direct read, not inferred. The smallest proven-feasible map edit (mods/supersoldaten_c15, a length-neutral enemy-type swap) has been built and verified against the real archive write path (12 checks including 4 negative controls, all passing) — this is a static/offline write-path proof only; it has not been tried in a running game.

How TNO loads a map

  • One base/master.index names exactly 14 chunkN.index/chunkN.resources pairs. No DLC indirection at this layer at all.
  • A map is a file:maps/<id>.entities text decl. The mapInfo:<id> decl (lives in chunk0) names the one chunk that physically holds that map via vmtrChunkNumber — confirmed live, e.g. c01p1→chunk1, c02p0→chunk3.
  • chapter decls (18 total, in chunk0) carry the map list directly — each chapter's variations.item[].parts.item[].map field names the .entities id that variation plays. No separate chaptervariation/devmenuoption/dlc decl type exists anywhere among TNO's 105 distinct decl types (0 instances found in a full type census) — chapter is the entire mechanism, there is no separate family to open.
  • Collision is a separate cm asset per map; a writer for it round-trips exactly (8,661/8,661 byte-identical).
  • virtualtextures/<id>.pages (megatexture ground) is a confirmed, non-decodable dependency.
  • All 25 maps' .entities parse error-free, 69,951 blocks total.

12 of TNO's 37 mapInfo decls have no matching .entities anywhere — cut 2013-demo maps, a cut chapter-17 sibling trio (xa01/xa02/xa03), 2 cut campaign-map parts (c02p2, c10p2), a named-but-unshippable mini-level (lkw), and 3 non-map placeholders. None of the 12 is referenced by any of the 18 chapter decls' map= lists either — genuinely cut content at both levels, not a missed append point.

Why there is no folder-precedence route

  • (type, name) is never duplicated across TNO's 14 chunks for file:*.entities, mapInfo, or chapter (0 of 76,364 unique keys) — there is nothing for a second folder to win a collision against.
  • mapspec (TNC's own per-DLC map-claiming mechanism) is a 0-hit string in WolfNewOrder_x64.exe.
  • TNO's EXE does carry a distinct dlc\<name>\info.txt mount path — real, isolated, Steam-ownership-gated — but its dialect is unsolved, and even solved there is nothing like packagemapspec for it to claim a map name with. The project's only working decompiler indexes TNC's own runtime image, not TNO's — confirmed directly (a query for TNO's own field name dlcID returns 0 hits against it) rather than assumed from a README — so this path remains genuinely blocked, not merely unexplored.
  • A self-built 15th master.index chunk pair is accepted trivially by this project's own reader; whether the real engine's reader would accept it is unmeasured and unmeasurable without a TNO runtime capture, which does not exist in this project.

The only working route: edit an existing map's own chunk in place

Decompress the map's .entities payload from its own chunk, edit the decl text, recompress with the game's exact deflate dialect, and write back in place — but only when the real slot-fit check actually succeeds, not just a naive "compressed length ≤ csize" estimate. The naive check overstates what fits: deflate's padding mechanism can only extend a stream by ~500 bytes of measured reach, regardless of how much raw headroom the naive upper bound shows.

Re-measured against the real reach bound, only 10 of 25 maps are genuinely rebuild-free for a length-neutral swap — not the larger number a purely naive cost estimate suggests:

genuinely fits:  c01p3, c04p1, c05_07_09, c06p1, c06p2, c08p1_2, c10p1, c11p1, c14p1, c16p2
looks free but doesn't reach: c01p2, c02p1, c03p2, c04p2_3, c16p1

Where the real budget is exceeded, the fallback is a full chunk rewrite (73–466 MB depending on chunk) — new entities blow every measured budget by 1–2 orders of magnitude, so this route is for retyping/retuning existing content, not adding geometry.

Smallest proven-feasible experiment: mods/supersoldaten_c15 — on map c05_07_09, ai/tungsten/c15/part_01/firetrooper → ai/tungsten/c15/part_01/supersoldat, 6 occurrences, both names 47 characters (length-neutral), both enemy types already present on the same map so the swap can't reach for missing assets. Run against the real write path: slot fit confirmed exactly (csize hit, with padding comment), structural diff shows exactly the 6 intended swaps and nothing else, manifest check confirms the loader reads the right bytes — 12/12 checks pass, including 4 negative controls (an over-stuffed payload, a dropped brace, a shifted coordinate, a flipped byte — each independently caught).

Failed hypotheses

  • "TNO has a packagemapspec-style per-DLC map-claiming table like TNC." False.
  • "c02p1's apparent headroom (711 B) is usable in-place." False — unreachable by the real padding search (gap 706 B vs. reach 511 B). It was the original flagship pick for this experiment; c05_07_09 replaces it (gap 385 B inside a 519 B reach, 126 B real margin).
  • "The newly-available project decompiler would unblock the info.txt/DLC-enumeration questions." False — it indexes the wrong game's binary entirely.

Open questions

  • Whether TNO's real engine accepts a 15th master.index chunk pair — blocked on encrypted .text with no TNO-side decompiler available.
  • The exact info.txt dialect and DLC-enumeration mechanism — same block.
  • Whether TNO's DLC folder name comes from Steamworks enumeration or a raw folder scan.
  • Whether a DLC-mounted archive's (type, name) entry would win or lose against the base chunk's copy — no retail precedent exists to check against.

In-game test (not yet run)

Enable mods/supersoldaten_c15, start/restart the game, and advance to map c05_07_09. If the 6 enemies at those positions appear as the larger, tougher type instead of the original, the real engine accepted the in-place write — this project's first real TNO in-game map-edit confirmation. No other change is expected; the swap touches neither geometry, collision, nor paths.

Related: TNO Modding Surface, TNO Maps, Asset Loading Paths, TNC Custom-Map Status (the equivalent, working route for Part 2).