Wolfenstein Modloader Buy me a coffeeKaffee spendieren

In plain wordsIn einfachen Worten

This is the assignment for a research task on Wolfenstein II: The New Colossus, not a result. It asks a worker to build a minimal DLC package holding one encrypted config file, so the 'resourceExec' console command can be tested in the game within about a minute. It lists what is already solved, strict rules (exact file name, no padding, no installing or launching the game) and the checks the result must pass. The outcome is described on the matching research report page.

  • Goal: a separate DLC that contains exactly one encrypted cfile named 'wolfsdk_test.cfg'.
  • The file name is part of the encryption key, so any other name or case breaks it.
  • The package must pass the content hash and header hash checkers, and the file must decrypt back out of the built archive.
  • The installer must install and uninstall with one command each and never overwrite an existing folder.
  • The worker must not install anything into the game or start it; mounting may not be claimed without a game test.

Dies ist der Auftrag für eine Forschungsaufgabe zu Wolfenstein II: The New Colossus, kein Ergebnis. Er verlangt ein minimales DLC-Paket mit einer verschlüsselten Config-Datei, damit sich der Konsolenbefehl „resourceExec“ im Spiel in etwa einer Minute testen lässt. Er nennt, was schon gelöst ist, strenge Regeln (exakter Dateiname, kein Auffüllen, nichts installieren oder das Spiel starten) und die Prüfungen, die das Ergebnis bestehen muss. Das Ergebnis steht auf der zugehörigen Berichtsseite.

  • Ziel: ein eigenes DLC, das genau eine verschlüsselte cfile namens „wolfsdk_test.cfg“ enthält.
  • Der Dateiname ist Teil des Verschlüsselungs-Schlüssels, jeder andere Name oder andere Groß-/Kleinschreibung macht sie ungültig.
  • Das Paket muss die Prüfer für Inhalts- und Header-Hash bestehen, und die Datei muss sich aus dem gebauten Archiv wieder entschlüsseln lassen.
  • Das Installationsskript muss mit je einem Befehl installieren und deinstallieren und darf nie einen vorhandenen Ordner überschreiben.
  • Der Bearbeiter darf nichts ins Spiel installieren und es nicht starten; ein erfolgreiches Einbinden darf ohne Spieltest nicht behauptet werden.

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-execcarrier-a1; task execcarrier; implement. Read .agent-cache/WORKER.md. Bus: python "%USERPROFILE%/.claude/skills/agent-cache-orchestrator/scripts/acbus.py" Parallel: w-savestructure-a1.

Objective

Assemble the smallest mountable DLC that carries one cfile resource, so the resourceExec route can finally be tested in the running game - and make that test cost the user about 60 seconds of clicking, because their time at the PC comes in five-minute windows.

Everything needed is solved and independently re-verified by the master today:

  • wolfsdk/idclwrite.py - container writer. Round-trips BYTE-IDENTICAL on three retail archives (401 KB / 27.8 MB / 97.4 MB), 6/6 negative controls. Recomputes entry +0x50, +0x60, header +0x20 then +0x08, in that order.
  • tools/probe_cfilekey.py - cfile encryptor. 67/67 byte-identical round-trip, 7/7 negative controls. encrypt(plain, name, salt12, iv16, declen).
  • re_probes/cfilekey/wolfsdk_test.cfg.cfile - 96 bytes, plaintext map game/dlc/c02/c2v1_custom\n, resource name wolfsdk_test.cfg, declen=0xFFFFFFFF.

Measured at runtime today, this is what the carrier has to satisfy: resourceExec wolfsdk_test.cfg resolved its argument as cfile:wolfsdk_test.cfg and refused only because it would have had to generate it in a production build. Present it as a real cfile resource in a mounted container and that objection disappears.

Hard requirements from the two reports - do not rediscover these

  • Entry type cfile, compression == 0 (the payload is already encrypted).
  • The resource name is an input to the encryption key. The entry must be named exactly wolfsdk_test.cfg. A different name, different case, or a base/ prefix each fail the HMAC tag - the cfile worker checked all three. If you need another name, re-encrypt with probe_cfilekey.encrypt.
  • The reader takes the ciphertext length as Length() - 32 - Tell(), so any trailing padding inside the resource payload breaks the tag.
  • A new chunk_N.resources gets chunk_N.texdb mounted automatically from the container name (re_probes/agent_reports/texdbkey.md), and MountDatabase checks only the magic. A minimal/empty texdb should therefore be enough for a container that holds no images - verify that claim against the texdb header format rather than assuming it.

Sources

  • re_probes/agent_reports/{idclwriter,cfilekey2,texdbkey,cmdtable}.md
  • The live retail DLCs as the structural model, READ ONLY: /steamapps/common/Wolfenstein.II.The.New.Colossus/dlc/dlc_1..3 (dlcinfo.json, base/packagemapspec.json, base/chunk_NN.resources)
  • dlc/dlc_4 is already installed and has mounted successfully before; it carries the game/dlc/c02/c2v1_custom alias the script will call. Your carrier should be a SEPARATE dlc so the two concerns stay separable - read dlc_4, do not modify it.
  • tools/dlcinfo.py, tools/dlcmod.py (read-only) for the dlcinfo/mapspec format.

Ownership

tools/build_exec_carrier.py (new - builds and verifies the carrier), tools/install_exec_carrier.py (new - installs AND uninstalls, see below), re_probes/execcarrier/ (new dir, the built carrier), and re_probes/agent_reports/execcarrier.md.

wolfsdk/idclwrite.py, tools/probe_cfilekey.py, tools/probe_datahash.py, tools/probe_idclhash.py are READ-ONLY for you: import them, do not edit.

Forbidden / do not touch

Do not install anything into the game folder yourself, and do not launch the game. The installer script you write must not run as a side effect of building - installing is the user's call, in their window, with their hands. No writes to "%USERPROFILE%/Saved Games". Do not modify dlc_4, re_probes/map_alias_v3/, re_probes/idclwriter/, re_probes/custom_save_candidates/, re_probes/cfilekey/, docs/*, config.json, or another worker's tools. No pip install.

Hard constraints

Python 3.11, stdlib only. Reproducible from the command line.

Acceptance criteria

  1. A built carrier under re_probes/execcarrier/ with the full DLC directory shape, containing cfile:wolfsdk_test.cfg byte-identical to re_probes/cfilekey/wolfsdk_test.cfg.cfile.
  2. It passes, run by you and quoted in the report:
    • python tools/probe_datahash.py <carrier chunk> -> n/n
    • python tools/probe_idclhash.py <carrier chunk> -> +0x08 and +0x20 OK
    • python tools/probe_cfilekey.py decrypting the entry straight back OUT of the built container and getting map game/dlc/c02/c2v1_custom\n. That is the end-to-end check that matters: it proves the archive round-trip did not disturb the payload the encryption depends on.
  3. tools/install_exec_carrier.py installs with one command and uninstalls with one command, refuses to overwrite an existing dlc directory, prints exactly what it will touch before touching it, and is a no-op on failure. The uninstall path must be tested by you against a temporary copy - never against the real game folder.
  4. A chunk id and dlc id that provably collide with nothing: enumerate the ids the installed DLCs already use and say which you picked and why.

Verification expectations

Every important assurance needs a check that fails if it is false. In particular, do not assert that the container mounts - nothing offline can show that. Say "structurally valid by these checks, mount unconfirmed". If a minimal texdb turns out NOT to be sufficient, that is a finding, not a setback - report it with the header evidence.

Failure honesty

If the mapspec/dlcinfo format needs a map entry and a pure resource-carrier DLC is not expressible, say so and propose the smallest alternative (e.g. adding the cfile entry to a copy of an existing carrier). Do not ship a bundle you cannot justify.

Deliverable - and the part that matters most

End the report with a five-line runbook the user can follow without reading anything else: the install command, what to click, the one console line to type, what a success looks like, and the uninstall command. Their window is five minutes; every sentence they have to read in it is a sentence too many.

Checkpoint at milestones. Publish a bus fact when the carrier verifies. Concise German report in re_probes/agent_reports/execcarrier.md. Finish the task.