Wolfenstein Modloader Buy me a coffeeKaffee spendieren

Wiki / The New ColossusThe New Colossus

TNC Console Unlock — the Retail Restriction Level, Proven in Game

SolvedGelöst Original page in the GitHub wikiOriginalseite im GitHub-Wiki

In plain wordsIn einfachen Worten

The retail console of Wolfenstein II: The New Colossus only lets you use 34 of 234 commands and 304 of 3,256 settings. Research found that this lock is a single number in the engine, and that the built-in command resourceExec turns the lock off while it runs a file. The mod loader puts cheat lines into an unused, encrypted config file and runs it with resourceExec; in the running game God mode and infinite ammo worked and Notarget ran. Developer menu lines are a second route past the lock, also confirmed in game, while bound keys run restricted.

  • Typing 'resourceExec snapdemo.cfg -s' in the normal console runs the file's lines without the restriction; proven in game on 2026-10-01.
  • God mode and infinite ammo were confirmed by play; Notarget ran but did not stop enemies already in a fight.
  • Cheats given as startup arguments are rejected as 'Unknown command' (confirmed in game); give, spawn, noclip, lowercase god and SpawnAI do not exist at all.
  • Bound keys run at the restricted level (read from code), so the loader sets no F-key binds for The New Colossus; a key bound to resourceExec works, as Sandbox Tools (F6, F7) and Photo Mode (F8) use.
  • Confirmed in game on 2026-10-02: developer menu lines also run unrestricted, so devmap loads maps from the menu.
  • Not yet confirmed in game: the Photo Mode mod, the loader's cvar lines in default.cfg and the presets; still open: the DevGUI window, killMonsters and the map-script route.

Die Konsole der Verkaufsversion von Wolfenstein II: The New Colossus lässt nur 34 von 234 Befehlen und 304 von 3.256 Einstellungen zu. Die Forschung hat gezeigt, dass diese Sperre eine einzige Zahl in der Engine ist und dass der eingebaute Befehl resourceExec die Sperre aufhebt, solange er eine Datei ausführt. Der Mod-Loader legt Cheat-Zeilen in eine ungenutzte, verschlüsselte Konfigurationsdatei und startet sie mit resourceExec; im laufenden Spiel wirkten Gott-Modus und unendliche Munition, und Notarget lief. Zeilen aus dem Entwicklermenü sind ein zweiter Weg an der Sperre vorbei, ebenfalls im Spiel bestätigt, während belegte Tasten gesperrt laufen.

  • „resourceExec snapdemo.cfg -s“ in der normalen Konsole führt die Zeilen der Datei ohne Sperre aus; im Spiel bewiesen am 01.10.2026.
  • Gott-Modus und unendliche Munition wurden im Spiel bestätigt; Notarget lief, stoppte aber Gegner nicht, die schon kämpften.
  • Cheats als Startargumente werden als „Unknown command“ abgelehnt (im Spiel bestätigt); give, spawn, noclip, kleingeschriebenes god und SpawnAI gibt es überhaupt nicht.
  • Belegte Tasten laufen auf der gesperrten Stufe (aus dem Code gelesen), darum setzt der Loader für The New Colossus keine F-Tasten; eine Taste mit resourceExec funktioniert, so wie Sandbox Tools (F6, F7) und Photo Mode (F8) sie nutzen.
  • Im Spiel bestätigt am 02.10.2026: Zeilen aus dem Entwicklermenü laufen ebenfalls ohne Sperre, devmap lädt also Karten aus dem Menü.
  • Im Spiel noch nicht bestätigt: die Mod Photo Mode, die Cvar-Zeilen des Loaders in default.cfg und die Presets; weiter offen: das DevGUI-Fenster, killMonsters und der Weg über Kartenskripte.

Technical detailsTechnische Details

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

The retail console of Wolfenstein II only shows 34 of 234 commands and 304 of 3,256 Cvars. That block is not a build-type flag and not an encryption — it is one process-wide integer, and the mod loader already has a proven, no-patch way through it. This page is the practical write-up: what the mechanism is (static, from disassembly), what the loader actually does with it (runtime-proven, tester's own test on 2026-10-01), and what still doesn't exist no matter which door you try.

Grading follows the project convention (see Home): Measured/RUNTIME beats Inferred/CVAR beats Speculated/STRING. Everything under "What was measured in game" below is the first grade; everything under "The mechanism" is a disassembly reading of the running process image, not a game launch.


TL;DR

Route Works without a patch? Evidence
resourceExec <loader-replaced cfile> -s from the normal, restricted console yes, proven in game tester's test, 2026-10-01 (§2)
+args on the game's own startup line (+com_allowConsole, +g_infiniteAmmo, …) no — rejected, "Unknown command" same test (§3)
A Kiscule Command node firing in a map script yes, by code path — not yet seen in game Research-Report-R5-Kiscule-Command (§4)
give, give all, spawn, noclip, god (lowercase), SpawnAI no route exists — these commands are not compiled into retail at all §5

1. The mechanism: one integer gates both commands and Cvars

Static finding, from a read-only snapshot of the running NewColossus_x64vk.exe (full writeup: Research-Report-R4-Console-Commands).

The engine keeps two lists per system — all 234 commands / all 3,256 Cvars, and a second, "exposed" list of only 34 commands / 304 Cvars — plus a single restriction-level integer shared, bit for bit, between idCmdSystemLocal and idCVarSystemLocal:

  • level 0 → the dispatcher searches the full list. Every registered command and every Cvar is reachable.
  • level 1 (the only other value ever written anywhere in the image) → the dispatcher searches only the 34/304 exposed entries. This is what the live console, the game's own startup +args, and a .cfg loaded by the normal exec command all run at.

Six call sites set the level to 1 and restore the previous value before returning — the interactive console (both key handlers), +-prefixed startup arguments, the startup-config exec, and the exec command itself. Because every one of them restores what it found, and the constructor default is 0, the level sits at 0 — fully unrestricted — for essentially the whole session, except for the few instructions it takes to process one keystroke, one +arg, or one exec'd line. (Update 2026-10-04: a later full scan found one more bracket, the key-bind dispatcher; bound keys run restricted, see section 7.)

One already-exposed command breaks this pattern on purpose: resourceExec <name> -s sets the level to 0 for the entire duration of the file it loads, then restores it. Since resourceExec is itself one of the 34 commands anyone can type from the plain console, this is a complete, no-patch route to the other 200 commands and ~3,000 Cvars — you just have to get your lines into a file the engine will resourceExec.

A second, better-scaling route exists once the console is open: the compiled-in ImGui DevGUI debug menu calls the dispatcher directly, with no save/restore bracket of its own, so it runs at whatever the level happens to be — 0, essentially always. Setting the non-exposed Cvar devgui 4 once (itself needing one resourceExec call) makes at least 41 confirmed-live, non-exposed debug buttons (toggle g_infiniteAmmo, ai_drawBounds, killAI, disconnect, …) clickable for the rest of the session with no further resourceExec per click.


2. What was measured in game — the tester's test, 2026-10-01

A loader mod (mods/sandbox_tools) replaces two unused SnapMap configs already present in retail, cfile:snapdemo.cfg and cfile:snapedit.cfg, with the loader's own cfile payloads — reusing the same dlc_0-precedence patch route already proven for custom maps, decl edits, and weapon skins, now combined with the solved cfile encryption (AES-128-CBC + HMAC-SHA256, key derived in Research-Report-Cfilekey2; the loader's own encoder lives in wolfsdk/tnccrypt.py). cfile was listed as "definitively not possible" in TNC Modding Surface §6 — that verdict is now superseded for exactly this use: the loader builds valid, game-accepted cfile payloads under names the archive already indexes.

Typed from the live, restricted console in the running game:

resourceExec snapdemo.cfg -s

Result, confirmed across two sessions:

  • A main-menu run printed both marker lines from the file and no Unknown command for devgui 4, God, Notarget, g_infiniteAmmo 1, or snapEdit_devMode 1 — all five are non-exposed.
  • In an actual save game, the same call printed godmode ON for player 0 and notarget ON for player 0 — non-exposed commands genuinely executing, not just failing to error. g_infiniteAmmo 1 was confirmed by play (ammo no longer depleted).
  • devgui 4 was accepted (no error), but no ImGui window became visible on screen in that run — open, see §6.
  • Notarget printed ON, but enemies that were already engaged in combat kept attacking — the command ran, but did not retroactively drop existing aggro. Treat Notarget as "stops new detection", not "stops an ongoing fight", until re-tested.

mods/sandbox_tools packages this as two hotkeys, bound once and persisted by the engine's own bind command:

bind F6 "resourceExec snapdemo.cfg -s"   # toggles God, Notarget, infinite ammo
bind F7 "resourceExec snapedit.cfg -s"   # killMonsters — not yet confirmed in game

God mode and infinite ammo are confirmed; killMonsters is shipped but not yet verified at runtime.


3. What was rejected: +args on the startup line

The same test session ran the loader's usual startup tweaks as +-prefixed command-line arguments — +com_skipIntroVideo, +pm_autoSprint, +g_EnableGore, +g_goreBloodyMess, +com_allowConsole — and every one of them came back Unknown command.

This matches §1 exactly: the +args parser is one of the six bracketed sites that forces the level to 1 for the duration of parsing the command line, then restores it. None of those five names are among the 34 exposed commands/Cvars, so at level 1 they are invisible — not locked by content, just not in the list the dispatcher is searching at that moment.

Practical rule for the loader: never ship a cheat or debug toggle as a startup +arg. Ship it as a line inside a loader-patched cfile and fire it with resourceExec <file> -s (console, a bound key, or — untested — the engine's own default.cfg, which it already resourceExecs at startup per Static Research: Retail Command Queue (TNC)).


4. The Kiscule Command-node route — proven by code path, not yet in game

A map's own script can reach the exact same unrestricted window, with no resourceExec call and no DevGUI, purely from gameplay events. Static finding, full disassembly in Research-Report-R5-Kiscule-Command (builds on Research-Report-R4-Console-Commands and the node catalogue in Kiscule Node Reference):

idKisculeNodeCommand's Exec handler does not call the dispatcher directly. It reads the command parameter, appends a newline, and calls idCmdSystemLocal::AppendCommandText — which queues the text into whichever of the engine's two command buffers the restriction level currently selects. Since the level rests at 0 for almost the entire session (§1), a Command node firing during ordinary play — a trigger volume, a timer, a dialogue callback — lands in the same unrestricted buffer resourceExec feeds.

That buffer is drained twice every engine frame, inside the main loop (idCommonLocal::Frame()), against the full 234-command/3,256-Cvar catalog — the same drain mechanism the engine uses once at startup for default.cfg/package.cfg, just reused generically.

Caveat, reported honestly: none of the 7 retail idKisculeNodeCommand instances actually needs this path — 6 use already-exposed names (r_dof, print), and the 7th (triggernextmap) is not a registered command at all and fails identically at any level. The yes/no verdict rests entirely on the disassembled code path, not on an observed retail example, and no custom map has exercised it in game yet. The report's own smallest test: a Trigger_Volume → Command node with command = "God 1" in a custom map, verifying no damage is taken on the next hit without ever opening the console.


5. What doesn't exist at all

Confirmed absent from the 234-entry command table under any name or capitalization, independently re-checked a second way (the DevGUI's own compiled-in buttons reference the identical strings and are themselves dead):

  • give, give all — DevGUI's "Give Ammo"/"Give Grenades" buttons build and dispatch the literal string give ammo, which also fails.
  • spawn — DevGUI's own spawn %s button references the same non-existent name.
  • noclip, god (lowercase; God, capitalized, is the real, flagged 0x200000 command).
  • SpawnAI — DevGUI's debug menu references SpawnAI ai/testing/test_elite/test_commander, but the name is not in the 234-entry command table. An earlier pass of the Round-4 static command-table scan misread the table and listed SpawnAI as registered; a static re-check of the same table found that wrong and corrected it (see Research-Report-R4-Console-Commands and Known Contradictions W21). No in-game test of SpawnAI has been logged — the correction is a data fix to the command-table reading, not a runtime result.

These are not console-restricted — they were never compiled into this retail build as callable commands, under either the restricted or unrestricted list. No Cvar, cfile, or decl can reach code that was never registered; only a binary patch could add them, which is out of scope for this project.


6. Open questions

  • devgui 4 accepted no error, but no window appeared in the save-game run (§2) — unclear whether DevGUI needs a key bind to toggle visibility that the main-menu session happened to have set and the save-game session did not, or whether something else gates the draw call. Not resolved.
  • killMonsters is shipped in mods/sandbox_tools but not yet confirmed to do anything in game.
  • Whether default.cfg — which the engine already resourceExecs at startup — can carry these lines so the tweaks apply automatically without the player typing resourceExec at all. Plausible from the command-queue mechanism, not yet runtime-tested. (Update: the loader now writes its non-exposed tweaks there, section 9; still not confirmed in game.)
  • Whether a Kiscule Command node's non-exposed call (§4) actually executes once loaded in a real custom map — code-path proof only.
  • Case sensitivity of command lookup — unresolved per the static report; relevant to any future hand-written .cfg line.

7. TNC Key Binds Run at the Restricted Level

Inferred (static code reading, report r8). The key-bind dispatcher (function 0xaa8780, write at 0xaa87fb) sets the restriction level to 1, appends the bound command plus a newline to the restricted command buffer, and restores the level. It only buffers; the line later runs at level 1.

So a bound key reaches only the 34 exposed commands: a bind to toggle g_permaGodMode 0 1 or noclip cannot work in The New Colossus (toggle is not exposed, noclip does not exist). resourceExec is exposed, so a key bound to resourceExec <cfile> -s works: the file then runs at level 0. Sandbox Tools (F6, F7) and Photo Mode (F8) use exactly this.

The loader therefore gives The New Colossus no default F-key binds. The New Order keeps its F1–F4 binds.

Keywords: bind, key bind, hotkey, F1 F2 F3 F4, toggle does not work, bind restricted, Tastenbelegung, Taste geht nicht

8. Photo Mode Mod: One Key Freezes the Game for Screenshots

mods/tnc_photo_mode (built by tools/build_photo_mode.py) replaces default_snap.cfg, an unused SnapMap config, with an encrypted cfile. Bind it once in the console (binds are saved):

bind F8 "resourceExec default_snap.cfg -s"

The file runs at level 0 and toggles four non-exposed cvars:

toggle g_freezeTime 0 1
toggle g_showHud 1 0
toggle g_showGuis 1 0
toggle g_showCrosshair 1 0

Press F8 again to return. According to the builder's research, g_freezeTime 1 stops all game time and switches to the free camera. A bind to these lines directly would fail: binds run at the restricted level (section 7).

Not yet confirmed in game.

Keywords: photo mode, screenshot, freeze time, free camera, hide HUD, F8, Fotomodus, Screenshot, Zeit anhalten

9. How the WolfSDK Loader Delivers TNC Cvar Tweaks: +args and default.cfg

The loader's Cheats & QoL page for The New Colossus lists the engine's 3,116 settable cvars. Since +args run at the restricted level (section 3), the loader splits a tweak set:

  • cvars the retail console exposes go out as +args on the start line;
  • every other cvar becomes a line in cfile:default.cfg, which the engine itself runs with resourceExec default.cfg -s at startup, at level 0.

Revert removes those lines again. Mods can carry cvars the same way ("cvars" in mod.json, used by Hidden Menu Options).

Not yet confirmed in game: that the default.cfg lines take effect. A simple test: switch on a gore tweak, start the game.

Keywords: tweaks, cheats, QoL, default.cfg, launch arguments, +args, cvar delivery, Startparameter, Einstellungen

10. TNC Presets: Ultra+, Clean Image and Photo Mode

One-click cvar groups on the loader's Cheats & QoL page. They only fill in tweak values; section 9 decides how each one is delivered. tools/verify_presets.py checks every name, type and declared range against the engine registry.

  • Ultra+ (17 cvars): higher anisotropy (16), decal, shadow and foliage fade distances, virtual texture streaming (vt_maxPPF 64), FFT water.
  • Clean Image (11): off for depth of field, motion blur, chromatic aberration, film grain and vignette; r_sharpening 2.5, anisotropy 16, rs_enable 0.
  • Photo Mode (3): screenshot quality only: com_captureSamples 4, com_captureTGA 1, image_screenshotQuality 100. Freezing time must toggle mid-game, which needs the Photo Mode mod (section 8).

Not yet confirmed in game.

Keywords: presets, Ultra+, Clean Image, graphics settings, sharpening, motion blur off, screenshot quality, Grafik, Voreinstellungen

11. Developer Menu Lines Also Run at Level 0

A second route to the full command list, proven in game: the developer menu of The New Colossus runs an entry's devMenuCommandStrings lines at level 0. Confirmed in game (2026-10-02): the non-exposed devmap runs from the menu and loads the map. The mod Dev Menu Map Loading uses this to make the menu's map entries work again; its entry "WolfSDK: console test" sets the non-exposed g_debugLayerChanges as a quick check.

Details, addresses and status: TNC Dev Menu.

Keywords: dev menu, developer menu, devmap, unrestricted, devMenuCommandStrings, Dev-Menü, Entwicklermenü


TNC Dev Menu · TNC Modding Surface · Kiscule Node Reference · Known Contradictions · Developer Mode (pre-runtime, string-level analysis this page supersedes for the restriction mechanism) · Research-Report-R4-Console-Commands · Research-Report-R5-Kiscule-Command · Static Research: Retail Command Queue (TNC)