Wolfenstein Modloader Buy me a coffeeKaffee spendieren

In plain wordsIn einfachen Worten

This page is a task description for Wolfenstein II: The New Colossus. Collision data ('cm') decides what the player can walk on or bump into; without it, new geometry would be visible but you could walk through it. The worker was asked to find out the binary layout, rebuild at least 500 real collision files byte for byte, and, if possible, write a simple box-shaped collision hull. If the data turned out to be an opaque precomputed structure, the honest answer would be that collision must be reused from the original game.

  • 'cm' is the largest asset group in a map: 2,795 entries in one archive alone.
  • Required: parse at least 500 real collision files from 3 archives with every byte accounted for.
  • Load-bearing check: rebuilt files must match the originals byte for byte.
  • Negative controls: flipped count, cut-off tail or wrong element size must make the parser fail.
  • A new box hull is allowed, but must be marked as untested in the game.

Diese Seite ist eine Aufgabenbeschreibung für Wolfenstein II: The New Colossus. Kollisionsdaten ('cm') bestimmen, worauf man laufen oder wogegen man stoßen kann; ohne sie wäre neue Geometrie zwar sichtbar, aber man könnte hindurchgehen. Der Worker sollte den binären Aufbau ermitteln, mindestens 500 echte Kollisionsdateien byte-genau nachbauen und, wenn möglich, eine einfache Box als Kollisionshülle schreiben. Falls sich die Daten als undurchsichtige vorberechnete Struktur erweisen, wäre die ehrliche Antwort, dass Kollision aus dem Originalspiel wiederverwendet werden muss.

  • 'cm' ist die größte Asset-Gruppe einer Karte: allein 2.795 Einträge in einem Archiv.
  • Gefordert: mindestens 500 echte Kollisionsdateien aus 3 Archiven lesen, jedes Byte erklärt.
  • Tragende Prüfung: Nachgebaute Dateien müssen byte-genau den Originalen entsprechen.
  • Gegenproben: falsche Anzahl, abgeschnittenes Ende oder falsche Elementgröße müssen den Parser scheitern lassen.
  • Eine neue Box-Hülle ist erlaubt, muss aber als im Spiel ungetestet markiert sein.

Technical detailsTechnische Details

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

Worker w-cmfmt-a1; task cmfmt; research/implement. Read .agent-cache/WORKER.md. Bus: python "%USERPROFILE%/.claude/skills/agent-cache-orchestrator/scripts/acbus.py" Parallel: w-meshfmt-a1 (geometry), w-entitypipe-a1 (placement), w-matpipe-a1 (surfaces), w-mapmanifest-a1 (streaming). You own collision.

Objective

Make collision writable. Geometry you can see but walk through is not a level. cm is the single largest asset group in a TNC map - 2795 entries in dlc_2/base/chunk_22.resources alone - so the corpus for differential reading is enormous and the format is almost certainly regular.

Answer with evidence:

  1. The binary layout of a cm payload: what primitives (brushes, hulls, triangle soup, BVH?), what index/BVH structure, what surface/material flags.
  2. Round-trip: can a retail cm be re-serialized byte-exactly?
  3. Can a NEW collision hull be authored - a box is enough - that the loader accepts, and what binds it to a model or to the world?

What is already solved - do not redo it

The container layer is finished and independently re-verified today: wolfsdk/idclwrite.py round-trips retail archives BYTE-IDENTICALLY (3/3, 6/6 negative controls) and finalize() recomputes every hash. Your problem is only the payload bytes. re_probes/runtime_87400/module.bin is a read-only capture of the RUNNING, SteamStub-unpacked executable (virtual RVA layout, file offset == RVA, sections in manifest.json, .pdata for function bounds). Five formats fell to code-driven RE from it today and zero fell to blind sweeps - find the loader, read the field offsets out of it.

Sources / starting points

  • 2795 samples in chunk_22, thousands more in the base chunks. Sort by size: the smallest cm payloads are the easiest to fully account for, and a format proven on the small ones then generalizes.
  • Loader via .rdata error strings and their xrefs - the method is written up in re_probes/agent_reports/{idclhash,datahash,texdbkey}.md; read one first.
  • Names matter: cm entries usually mirror a model name. Cross-reference the two lists; a cm that pairs with a model tells you what it must describe.
  • Havok is present in this engine (hknavmesh is a separate type) - do not assume cm is Havok, but check for its signatures before inventing a theory.
  • capstone 5.0.7 vendored: PYTHONPATH=re_probes/python_deps
  • Game data READ ONLY: /steamapps/common/Wolfenstein.II.The.New.Colossus

Ownership

tools/probe_cmfmt.py (new), re_probes/cmfmt/ (new dir), re_probes/agent_reports/cmfmt.md (new). wolfsdk/* and other workers' tools/probe_*.py: READ-ONLY, import them.

Forbidden / do not touch

No game launch, no process attach, no writes under the Steam install or "%USERPROFILE%/Saved Games". Do not touch other workers' files or dirs (probe_meshfmt.py, probe_entitypipe.py, probe_matpipe.py, probe_mapmanifest.py, re_probes/{meshfmt,entitypipe,matpipe,mapmanifest,execcarrier,cfilekey, idclwriter,save_structure,map_alias_v3}/), docs/*, config.json. No pip install.

Hard constraints

Python 3.11, stdlib plus vendored capstone. Reuse wolfsdk/oodle.py. Reproducible from the command line, no running game.

Acceptance criteria

  • Parser: n/n over at least 500 real cm payloads across 3 archives, where "parsed" means every byte accounted for and declared counts landing exactly on the payload end. Report partials as partials, with the count.
  • Round-trip: re-serialize and reproduce retail bytes exactly, n/n on the same sample. This is the load-bearing control.
  • Negative controls: flipped count, truncated tail, wrong primitive stride - each must make the parser fail rather than silently accept.
  • If you get that far: author a minimal box hull and say plainly it is runtime-untested.

Failure honesty

If the structure is an opaque precomputed acceleration structure you cannot regenerate, say so with the offsets you established and stop. Knowing that collision must be reused from retail rather than authored is a load-bearing finding for the whole program, not a defeat.

Coordination / deliverable

Checkpoint at milestones. Publish a bus fact on the round-trip result - w-meshfmt-a1 needs to know whether authored geometry can be made solid. Concise German report in re_probes/agent_reports/cmfmt.md. Finish the bus task.