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.cfgloaded by the normalexeccommand 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 commandfordevgui 4,God,Notarget,g_infiniteAmmo 1, orsnapEdit_devMode 1— all five are non-exposed. - In an actual save game, the same call printed
godmode ON for player 0andnotarget ON for player 0— non-exposed commands genuinely executing, not just failing to error.g_infiniteAmmo 1was confirmed by play (ammo no longer depleted). devgui 4was accepted (no error), but no ImGui window became visible on screen in that run — open, see §6.NotargetprintedON, but enemies that were already engaged in combat kept attacking — the command ran, but did not retroactively drop existing aggro. TreatNotargetas "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 stringgive ammo, which also fails.spawn— DevGUI's ownspawn %sbutton references the same non-existent name.noclip,god(lowercase;God, capitalized, is the real, flagged0x200000command).SpawnAI— DevGUI's debug menu referencesSpawnAI 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 listedSpawnAIas 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 ofSpawnAIhas 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 4accepted 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.killMonstersis shipped inmods/sandbox_toolsbut not yet confirmed to do anything in game.- Whether
default.cfg— which the engine alreadyresourceExecs at startup — can carry these lines so the tweaks apply automatically without the player typingresourceExecat 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
.cfgline.
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
+argson the start line; - every other cvar becomes a line in
cfile:default.cfg, which the engine itself runs withresourceExec default.cfg -sat 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ü
Related pages
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)