Skip to content

Research Report Tnc Custom Maps

LopeKinz edited this page Sep 26, 2026 · 1 revision

TNC: Custom Map Registration and Load Path (Read-Only Finding)

Date: 2026-09-22. This investigation has neither modified the live installation nor altered game saves.

Executive Summary

A new TNC map is not merely a .entities file from a data perspective. For game/wolf/c02/c02p0, there are at least 235 named assets in Retail: compfile (Entities/Proc/Prockd), file (World-Tome/Ambient), hknavmesh, cm Collision/Trigger, models, PVS, Shadow Geometry, Lightprobe images, Material Decls, and devmapinfo.json. The current tnc_custom_map_probe therefore correctly tests only the Entity portion; it cannot generate new geometry, collision, or navigation.

The most plausible unchanged extension path is TNC's own dlc/dlc_<n>/ format: dlcinfo.json, base/packagemapspec.json, and a Chunk pair. This is documented by DLCs 1–3, but has not yet been positively proven in-game for a new Map-ID. A separate same-named DLC entry with a Canary is the next good single test; refchunks alone is not an override.

Documented Data Structure

base/packagemapspec.json describes Name, primary chunkid, basechunkid, layer, and optionally refchunks. Retail-Base includes game/wolf/c02/c02p0 -> chunkid 1; DLC Specs utilize layer: -1 and their own chunks (DLC 1: 20, DLC 2: 22, DLC 3: 24). The existing DLCs are:

dlc/dlc_1/dlcinfo.json                    { "dlcid": 1 }
dlc/dlc_1/base/packagemapspec.json        maps + chunk_20
dlc/dlc_2/...                              maps + chunk_22
dlc/dlc_3/...                              maps + chunk_24

A Map prefix is not self-sustaining. Counts from Retail Archives for c02p0:

Type Count Example
compfile 3 c02p0.entities, _combo/c02p0.proc, c02p0.prockd
file 3 _world.tome, Tome-Metadata, c02p0.ambientsh
hknavmesh 2 c02p0.hknavmesh, Combat-Nav-Section
cm 178 World-Shape, Trigger and Combat-Volumes
model 9 _combo/_world.bmodel, Sky, dynamic models
image 34 Lightprobes
others 6 json, material, pvs, staticShadowGeom

This count comes from the TNC Archive Index; it is intentionally a negative control against the overly strong assumption "Entities = Map".

What Has Been Disproved or Is Open

  • +map, +exec, and +loadGame are not executed as visible Map/Save load processes during direct Retail startup before the Menu. The reliable path is Load Game -> SLOT2 -> GAME-AUTOSAVE0; only then do LaunchLoadScreen and LoadMap appear in the Log.
  • refchunks loads additional dependencies. A refchunks: [26] entry does not prove that Chunk 26 wins on a name conflict.
  • layer and basechunkid are not proven priority rules.
  • A simple new packagemapspec without a complete Chunk/Index/Texdb set is not a positive Map result. An incorrect Container Header is rejected beforehand with corrupt header.
  • There is no documented fs_mod/fs_game/modDir path in TNC-EXE and no proven free Loose-Asset Maploader. resource_dlcDbgSearchPath is, however, the documented candidate for relocating the DLC search path.

Minimal, Discriminating Test (Not Yet Executed)

  1. Use an external search path, e.g., C:\\wolfdlc_probe, to keep the Steam installation untouched.

  2. Create only dlc_4/dlcinfo.json with { "dlcid": 4 } and a minimal base/packagemapspec.json inspired by DLC 3. First use an existing map name (e.g., c02p0) to verify registration and Canary selection separately from "new Map-ID".

  3. Provide a valid Chunk 26 with identical header/index/texdb structure and exactly one clearly identifiable asset Canary. Do not use a refchunks test as a substitute.

  4. Start with +logFile 1 +logFilePersistent 1 and the DLC search path. First check: SearchDLC: found 4 dlcs, no Could not load mapspec-/corrupt header message.

  5. Load the c02p0 game state via the normal UI. Evaluate:

    • Canary visible: same-named DLC primary chunk was selected.
    • Map loads, Canary missing: Mount was successful, Base won, or the tested asset is not in the actually loaded layer.
    • Mapspec-/Header errors: Integrity-/registration issue, no priority judgment.

For a truly new Map-ID, it must additionally be checked whether the engine offers it in the menu/saves at all or only reacts to an explicit internal map command. Only if the existing-name test is positive does it make sense to use a new name with complete _world, .proc/.prockd, Collision-, Navmesh-, PVS-, Shadow-, and Entity assets.

Recommendation for the Loader

The mod definition should distinguish three stages:

  1. map-content: replaces existing Entities/Decls; currently stable.
  2. map-override: same-named map via a separately mounted DLC chunk; still experimental and only enabled with Canary logic.
  3. new-map: new Map-ID with complete asset bundle; do not claim or automatically activate yet.

This keeps the loader startable even without Mapspec/Chunk header and clearly reports "Entity Probe successful" instead of falsely "Custom Map supported".

Clone this wiki locally