Repository navigation
Research Report R6 Render Plus
Round-6 research pass on TNC graphics settings beyond the Ultra preset: which registered cvars control render quality and streaming, what range each accepts, and whether each is exposed or cheat-flagged. The report curates the relevant cvars out of the render/streaming-prefixed names, proves from decompiled code that one shared function clamps every cvar to its declared range, and builds two presets ("Ultra+" and "Clean image") for the cfile/resourceExec -s delivery route; TNO gets a names-only catalog. Static only; two open risks (a stock preset cfg that may re-run at every start, and a possible cheat reset) are what the in-game test at the end checks, and it has not been run.
Track renderplus. Scope: TNC is the primary catalog (full decompiled
clamp/exposed/cheat evidence). TNO gets a names-only catalog this pass
(§1b) — it has no runtime image, so no ranges/clamps/exposed-flags are
possible for it, but it does have real render cvar names worth recording,
which pass 1 wrongly claimed it didn't (see "Pass 1 errors" below).
Read-only on both game installs and on everything outside
re_probes/renderplus/ (nothing was written there — this round only read
the runtime image, the existing cvar table, the existing cvar-delivery code,
and the stock initial_video_*.cfg files) and this report. No game launch,
no process attach.
The verifier refuted 4 of pass 1's claims and found 6 missed items. All are fixed/investigated below; nothing was walked back for being merely inconvenient. Short version:
-
TL;DR headline number was wrong by ~3×. "336 render/streaming cvars"
→ the correct count for that exact prefix set is 1020 (1033 with
fb_), re-verified directly against the cited JSON. Fixed in the TL;DR and §1; the curated §3 catalog (67 rows, keyword-filtered to the brief's actual categories) was always the real deliverable, now stated honestly as a filtered subset, not mislabeled as "the" count. -
§2's
0x123932ccaller claim was simply wrong — that address isn't even a valid function start (tools/decomp.py 0x123932c→ "no function contains this address"). Removed. Independently re-ran--callerson the clamp function (0x1238730): 3261UNCONDITIONAL_CALLsites, 0x1239034 confirmed as the one cvar-system-internal caller outside the per-cvar init thunks. New this pass: chased0x1239140itself (the address pass 1 guessed was the console Set path and admitted it couldn't unwind) — it decompiles as a near-content-free trampoline with 205 callers scattered across completely unrelated code (physics-, UI- and audio-looking addresses, one shared tail-call target). That's evidence it is a generic compiler-emitted thunk, not a cvar-specific function — which weakens, not strengthens, pass 1's "proven by elimination" claim that the runtime console Set path also clamps. Downgraded to genuinely open in §5/§6. -
The TNO scope-out was factually wrong and self-cited a section that
never mentions TNO. Ran the project's own existing, zero-new-code
re_probes/enginelimits/tno_strings.pyagainst TNO's.rdata/.data: ~1020 render-cvar-like names turned up, several byte-identical in name and description text to TNC's own catalog (image_anisotropy,rs_minimumResolutionScale,vt_maxPPF,r_foliageStartFadeDist,r_foliageBigFadeDistMax). Added as §1b — a names-only list, same honesty level the project's ownwolfsdk/cvars.pyalready uses for TNO. TNO genuinely has no runtime image (re-confirmed), so no ranges/clamps/ exposed-flags are possible for it — that narrower claim was correct and stays. -
The stock
initial_video_ultra.cfgoverwrite risk was never checked, and the primary data table's ownsession_valuefield (which pass 1 had available and partially used) was never cross-referenced against the stock preset files. Both are fixed now: §3's "needs cfile" vs "direct" columns are unaffected, but a new §3.10/§3.11/§9 entry shows (a) 5 of the 19 "Ultra+" lines collide with valuesinitial_video_ultra.cfgsets on disk and would be silently re-applied if that file execs every launch (genuinely unresolved — flagged, not asserted either way), and (b) the whole primary JSON table'ssession_valuecolumn matchesinitial_video_**uber**.cfgon every single discriminating field checked (6/6) — the capture session this entire catalog is built from was already running at the Uber tier, not stock Ultra. This doesn't change any default/min/max/exposed value in §3 (those come from the binary's compiled-in default string, a separate field, independently spot-checked), but it does mean the one place pass 1 quoted a "session-observed" value from an older doc (image_anisotropy"4.0") was already stale against the live JSON's own session snapshot (16.0) — pass 1 flagged the mismatch but didn't say which side was right or why. -
§5's "same file" was an overstatement pass 1 had already half-hedged.
The actual runtime-proven test used
cfile:snapdemo.cfg/snapedit.cfgfired by a manually bound F6/F7 hotkey (mods/sandbox_tools/mod.json), notcfile:default.cfg's own unattended startup exec. Fixed wording in §5. The mechanism claim ("same gate") is actually stronger than pass 1 argued, now backed byr4_consolecmds.md's proof thatresourceExecdrops the restriction level to 0 generically, for any file argument — not something specific tosnapdemo.cfg. -
The
CVAR_CHEATreset-mechanism risk was missing entirely, despite bearing on ~40% of both presets' non-exposed lines and despite the sibling round report (r6_enginelimits.md) already hedging it as open. Added to §9, plus a new finding this pass: TNC's own binary contains the verbatim"Resetting cheat cvar: %s"string and its printer function (RVA0x123a320) — but that function has zero static callers anywhere in the decompiled image, unlike TNO where the same mechanism isLAUFZEIT-proven to fire on every launch (docs/limits.md). Evidence the TNO-style reset is dead/unwired in TNC's retail build, not proof (an indirect/vtable call wouldn't show up in a static caller scan). - §3's promised "cheat" column that never appeared in any table — added
below where it matters (§3.6 "needs cfile" rows, all confirmed
CVAR_CHEAT).
TNC ships 3256 registered cvars, 304 "exposed" (console/+arg-reachable),
2952 not (re_probes/cvartable/cvars_tnc_v2.json, independently
cross-checked against the engine's own listCvars dump — see
re_probes/agent_reports/cvartable.md, already in the repo, not redone
here). Of those, 1020 names start with r_, rs_, vt_, image_,
sm_, aa_ or vulkan_ (1033 with fb_) — the render/streaming/
allocator surface (corrected this pass — pass 1 said 336, a ~3× error, see
"Pass 1 errors"). Most of that 1020 is aim-assist tuning, SnapMap-portal
math and Vulkan-allocator knobs, not graphics quality; §3 below is the
curated subset — 67 cvars — that actually match the brief's categories
(LOD, shadows, VT streaming, anisotropy, SSR/AO/volumetrics, foliage/decal/
particle, post-FX, FOV, resolution scale, plus image-streaming budgets
added this pass in §3.10): exact name, binary default, declared min/max,
exposed flag, cheat flag — no guessing, no mining EXE strings.
Three load-bearing facts, all proven from the decompiled runtime, not inferred:
-
A single shared function clamps every cvar's value to its declared
[valueMin, valueMax]whenever a value is parsed from a string (registration, reset, and the runtimename valueconsole path all funnel through it) — found, decompiled and read at RVA0x1238730(thousands of call sites, confirmed with--callers). 131 of the 3256 cvars carry a real declared range; for those, no out-of-range value can ever reach the renderer — the engine silently clips it back and printsidCvar: Init value clamped. For the other ~3125 (everything without a declared range, which is most of the interesting render knobs), there is no cvar-layer clamp at all — whatever downstream code does with the value is the only limit, and that code was not individually traced for every cvar (see §6, "what wasn't done"). -
exposed=falsedoes not mean "unreachable." The loader already has a proven, working delivery route for exactly this problem (wolfsdk/mod.py: with_tnc_tweaks()+wolfsdk/cvars.py: split_tnc(), landed 2026-10-01, seeTODO.md): cvars the console/+arggate rejects get appended as plainname valuelines to the retailcfile:default.cfg, which the engine itself runs via its ownresourceExec default.cfg -sat every startup (docs/ladepfade.md:240-253, confirmed againstNewColossus_x64vk.exestrings, not guessed) — no manual console typing, no+args. The mechanism (resourceExecdrops the restriction level to 0 for any file it runs) is runtime-proven generically (re_probes/agent_reports/r4_consolecmds.md) and for cheat cvars specifically (God,g_infiniteAmmo) — but that proof used two other files (cfile:snapdemo.cfg/snapedit.cfg) fired by a bound hotkey, notdefault.cfg's own unattended startup exec (corrected this pass — pass 1 said "same file", see "Pass 1 errors" #5). Two risks found this pass that bear directly on whether adefault.cfgline actually survives to the rendered frame: the same startup init block also unconditionally execsinitial_video_<tier>.cfgfrom disk (§9), and every non-exposed cvar in both presets isCVAR_CHEAT-flagged (§9). Someone should watchqconsole.logonce either way (see §10). - Most "quality" tier cvars (
r_SSRQuality,r_SSDOQuality,r_motionBlurQuality, …) already default to their own highest declared tier in the binary — the Ultra preset is very likely just "don't touch the compiled defaults." The real headroom beyond Ultra is in three different places: (a) numeric knobs the Ultra preset doesn't touch at all (VT page locking, shadow query budgets, foliage/decal fade distances, DOF/vignette/grain/CA), (b) a few enums that go one step past the tier named "Ultra" in their own description text (r_decalFilteringQuality: 0 Low … 3 Ultra … 4 Nightmare), and (c) forcing off the one quality-reducing default the binary ships on:r_shadingRateQualityOverridedefaults to5(adaptive variable shading rate), not4(full 1x1 every pixel).
- Source of truth:
re_probes/cvartable/cvars_tnc_v2.json(3256 cvars, built and triple cross-validated by an earlier round —re_probes/agent_reports/cvartable.md— from the liveidCVarSystemLocalregistrar walk inre_probes/runtime_87400/module.bin, matched 304/304 against the engine's ownlistCvarsoutput). I did not re-derive this table; I queried it (python3 -c "..."against the JSON, no new probe script, nothing written to disk outside the scratchpad). - Grouped by prefix (
r_836,vt_115,rs_17,image_16,sm_12,aa_10,vulkan_14 —aa_/sm_/vulkan_/fb_turned out to be aim-assist, SnapMap-portal and Vulkan-allocator tuning, not graphics quality, and are excluded below) and then by keyword regex per the brief's categories (lod, shadow/cascade, stream, aniso/filter, ssr/ao/volumetric/fog, foliage/decal/particle, motion blur/dof/chromatic/ grain/vignette/bloom/sharpen, fov, resolution-scale). - For the one claim that needed code, not just the table (the clamp
mechanism), I used
tools/decomp.pyon the shared value-parser (0x1238730) and the consolename valuecommand path (0x1239f20→0x1239140, a tail-call the decompiler couldn't unwind further without more budget — see §6) andtools/tnc_runtime_code.py --xrefas a negative control (a cvar's own.datarecord has zero static references outside its own registration constructor — usage code holds a separately-cached pointer that nothing in this round's budget located, so I did not trace individual usage sites beyond the shared clamp function; see §6). - TNO: pass 1 wrongly claimed its strings "carry no render cvars worth a
catalog entry" — fixed this pass, see §1b.
docs/limits.md(TNO) does document a different, already-measured restriction model (com_allowConsole/cheat-reset gate, not an exposed-cvar gate) — that part was right. TNO genuinely has no runtime image (D:/wolf-decompis TNC-only, re-confirmed this pass), so no code-level claim (clamps,exposed, declared ranges) is possible for it — but its.rdata/.datastrings do carry hundreds of real render cvar names, mined this pass with the project's own pre-existingtno_strings.py(zero new code, zero game launches).
Ran python re_probes/enginelimits/tno_strings.py (already in the repo,
unmodified) against WolfNewOrder_x64.exe's .rdata/.data, filtered to
the same prefixes as §1. Result: ~1020 unique cvar-like names starting
r_/rs_/vt_/image_, spanning every category the brief asked about.
Highlights — names (and in one case description text) identical to
TNC's own catalog, i.e. the same id-Tech-lineage renderer carried these
cvars forward:
| TNO string (RVA) | Matches TNC's | Note |
|---|---|---|
image_anisotropy — "set the maximum texture anisotropy if available"
|
image_anisotropy (§3.1) |
name and description byte-identical |
rs_minimumResolutionScale |
rs_minimumResolutionScale (§3.9) |
same resolution-scale-floor concept |
vt_maxPPF |
vt_maxPPF (§3.4) |
same VT streaming budget concept |
r_foliageStartFadeDist, r_foliageBigFadeDistMax
|
§3.6 | same foliage fade system |
No default/min/max/exposed/cheat can be read for any of these — that needs
a decompiled .text, which TNO doesn't have (SteamStub-encrypted, no
runtime snapshot exists in this project, confirmed by re-reading
tools/ghidra_runtime_import_tno.py's own docstring this pass). This is a
names-only catalog, same honesty level wolfsdk/cvars.py already uses
for its existing TNO cvar list ("mined out of the retail
WolfNewOrder_x64.exe string pool, so the names are real"). Treat as a
lead for a future TNO-focused round, not a deliverable preset — there is no
way to know from strings alone whether any of these are clamped, exposed,
or even still read by live code.
FUN_7ff62d448730 (RVA 0x1238730), decompiled in full. Signature
(idCvar *this, bool warnIfClamped). For the INTEGER and FLOAT branches
(bit 0x2/0x4 of the flags field at +0x60):
fVar2 = *(float *)(param_1 + 0x64); // valueMin
fVar3 = *(float *)(param_1 + 0x68); // valueMax
if (fVar2 < fVar3) { // only when a real range is declared
// clip the parsed value into [fVar2, fVar3]
if (param_2 != '\0')
FUN_7ff62d4486b0(s_idCvar__Init_value_clamped___i__m_..., clipped, (int)fVar2, (int)fVar3, name);
}valueMin=1.0, valueMax=-1.0 is the catalog's own documented sentinel for
"no range" (cvartable.md §1) — exactly the fVar2 < fVar3 guard above,
read independently from the decompiled branch condition, not copied from
that doc. --callers on 0x1238730 returns 3261 UNCONDITIONAL_CALL
sites (re-counted exactly this pass), essentially every one of the
~3258 per-cvar init thunks (0x2e8d09, 0x2e8eb0, 0x2e9050, …) plus
0x1239034 (confirmed, called from 0x1238fa0, a plausible Reset-to-
default wrapper) — i.e. the clamp fires at registration and at reset.
Correction (pass 1 error): pass 1 additionally claimed 0x123932c as a
caller. That address is not a valid function start in the analyzed
image (tools/decomp.py 0x123932c → "no function contains this address")
and does not appear in the --callers output — removed, not replaced.
Console name value runtime path — downgraded to open, not inferred.
Pass 1 guessed the path 0x1239f20→0x1239140 and, unable to unwind
0x1239140, argued "console Set also clamps" by elimination (it being "the
only value-parser in the bounded cvar range"). This pass decompiled
0x1239140 directly: it is a near-empty trampoline (void FUN(void) — the
decompiler couldn't even recover a parameter list) whose only visible body
is one tail call to a single shared target, called from 205 sites
scattered across addresses that look like physics, UI and audio code —
nothing cvar-specific about it. That's real evidence it's a generic
compiler-emitted thunk (likely an RTTI/cast or exception-unwind helper),
not evidence it's "the only value-parser in range" — the elimination
argument pass 1 built on top of it doesn't hold. Whether the runtime
console name value Set path clamps is genuinely open, not proven and
not disproven, moved out of §5/INFERRED into §6/open questions.
Consequence for the preset below: every cvar in §4/§5 that carries a
declared min/max cannot be pushed out of that range by any cfg
line, console command, or +arg — the engine itself refuses and logs a
warning instead of corrupting anything. That is the safety net the whole
"Ultra+" preset leans on for the numeric pushes.
Format: name | default (binary reset-string) | [min,max] (declared, enforced per §2) | exposed | cheat.
"needs cfile" = exposed=False → not reachable as a plain +arg or typed
console command (gated the same way g_infiniteAmmo was —
cvartable.md §3), deliverable only through the cfile:default.cfg route
(§8). "direct" = exposed=True → already reachable as +arg/console and
also goes through the same cfile route without any extra plumbing.
| cvar | default | range | exposed |
|---|---|---|---|
image_anisotropy |
1 (session-observed shipped cfg: 4.0, docs/cvars-tnc.md:572) |
none declared | direct |
vt_maxAniso |
4 | [1,16] | direct |
r_imageAtlasMaxAniso |
4 | [1,16] | direct |
r_decalFilteringQuality |
2 (High, aniso 4x) | none declared; documented 0–4 | direct |
r_decalFilteringQuality's own description text names its own ceiling:
"0 - Low (trilinear). 1 - Medium (aniso 2x). 2 - High (aniso 4x). 3 - Ultra
(aniso 8x). 4 - Nightmare (aniso 16x)." — a tier past "Ultra" that
exists in the registered cvar and is reachable directly, no cfile needed.
| cvar | default | range | exposed |
|---|---|---|---|
r_lodScaleDeviation |
0.5 | none declared | direct |
r_lodScaleDeviationNeo / ...Scorpio
|
1.0 / 1.0 | none declared | direct — Xbox One X / Scorpio leftovers, no effect on PC, skip |
r_forceLod |
-1 | [-1,2] | needs cfile |
r_renderLods |
1 | none declared | needs cfile |
r_LODAutoGenerateThreshold |
0 | none declared | needs cfile |
Direction of r_lodScaleDeviation (does lower = sharper/more-detail-at-
distance, or the reverse?) was not resolved from code this round — the
usage site wasn't located (§6). Treat as INFERRED/untested; don't ship a
blind push in the committed preset.
| cvar | default | range | exposed |
|---|---|---|---|
r_shadowAtlasWidth / Height
|
8192 / 8192 | none declared | direct |
r_shadowAtlasTileSize |
2048 | none declared | direct |
r_shadowHardLimitPixels |
262144 | none declared | direct |
r_shadowSoftLimitPixels |
262144 | none declared | direct |
r_shadowHardLimitTriangles |
65536 | none declared | direct |
r_shadowSoftLimitTriangles |
6144 | none declared | direct |
r_shadowsDistanceFadeMultiplier |
1.0 | none declared | direct |
r_shadowLODAdjustThreshold |
0.2 | [0,4] | needs cfile |
r_shadowFadeRangeScale |
1.0 | [0,1000000] | needs cfile |
r_umbraMaxShadowQueriesVisible |
6 | [0,512] | needs cfile |
r_umbraMaxShadowQueriesInvisible |
1 | [0,512] | needs cfile |
r_useStaticShadows, r_staticShadowsIncludeSun
|
1 / 1 | none declared | needs cfile |
r_shadowAtlasWidth/Height at 8192² is already 64 MP; doubling to 16384²
is 4× the atlas memory with no declared ceiling to stop a mistyped
value — flagged risky in §7, not in the safe baseline.
r_umbraMaxShadowQueriesVisible/Invisible defaulting to 6 and 1
(out of a hard-clamped ceiling of 512) looks like the biggest single
headroom find in this whole table — but whether raising it buys visual
correctness or just burns CPU on occlusion jobs wasn't traced into the
Umbra occlusion code; recommend a modest raise, not the clamp ceiling (§8).
| cvar | default | range | exposed |
|---|---|---|---|
vt_maxLockedPagesPercent |
20 | [0,50] | direct |
vt_minLockedVmtrLOD |
6 | [0,10] | direct |
vt_maxPPF (pages transcoded/frame) |
32 | [0,64] | direct |
vt_lodBias |
0 | none declared | needs cfile |
vt_minLod / vt_maxLod
|
0 / 12 | none declared | needs cfile |
vt_pageImageSizeVmtr / ...Unique
|
8192 / 128 | none declared — "vt_restart after changing" | direct |
vt_packPageFiles |
0 | none declared | direct |
vt_restart (command, not cvar) |
— | — | exposed command, re_probes/cmdtable/commands.json
|
vt_minLockedVmtrLOD is the real "stop the textures from streaming in
blurry" lever: its description reads "Lock from coarsest LOD down to this
LOD level in the vmtr physical page pool" — 6 means only the top few
mips stay resident; 0 locks every mip from coarsest to finest. Hard-
clamped to [0,10] by §2's mechanism, so a bad value can't corrupt
anything, but 0 is a real VRAM commitment (see §7).
docs/virtualtextures.md:397 states vt_pageImageSizeVmtr's default as
4096, not the 8192 this round's binary-registrar read gives —
flagged, not resolved (§6); I trust the fresher, cross-validated
cvars_tnc_v2.json read over the older doc, but didn't re-derive it
myself, so this is a noted discrepancy, not an overridden one.
| cvar | default | range | exposed |
|---|---|---|---|
r_SSR (toggle) |
1 | none declared | direct |
r_SSRQuality |
2 (High — already max of 0/1/2) | none declared | direct |
r_SSDOQuality |
1 (Medium of 0/1/2) — not maxed | none declared | direct |
r_SSRMinSmoothness |
0.3 | none declared | needs cfile |
r_lightScattering (volumetric fog toggle) |
1 | none declared | needs cfile |
r_lightScatteringQuality |
1 of 0–3 (3 = highest, reserved-for-cinematics tier exists: r_lightScatteringQualityCinematic) |
none declared | direct (Quality) / needs cfile (Cinematic) |
r_waterReflections |
1 | none declared | direct |
r_waterQualityFFT |
0 (256×256 sim) | none declared, documented 0/1 | needs cfile — 1 = 512×512 |
r_SSDOQuality defaulting to 1, not 2, while r_SSRQuality
already sits at its own max (2) is the one SSR/AO cvar in this table
that genuinely has headroom under the brief's own "beyond Ultra" framing —
everything else in this group is already at its ceiling by default.
Pass 1 promised a cheat column in §3's format line (never delivered,
flagged by the verifier) — added here since this is the subsection where
it actually matters (every "needs cfile" row below is CVAR_CHEAT,
re-confirmed against the live JSON this pass; see §9's cheat-reset risk).
| cvar | default | range | exposed | cheat |
|---|---|---|---|---|
r_decalDistanceFadeMultiplier |
1.0 | none declared | direct | no |
r_decalLifetimeMultiplier |
1.0 | none declared | direct | no |
r_decalDistanceFadeStart |
60 | none declared | needs cfile | yes |
r_decalDistanceExtendedFadeStart |
10 | none declared | needs cfile | yes |
r_foliageStartFadeDist |
3000 | none declared | needs cfile | yes |
r_foliageSmallFadeDistMax |
5000 | none declared | needs cfile | yes |
r_foliageBigFadeDistMax |
7000 | none declared | needs cfile | yes |
r_gpuParticle{Large,Medium,Small}EmitterParticleCount |
32768 / 4096 / 512 | none declared — registered as type=string, not int, in the live table
|
needs cfile |
yes (CHEAT,INIT) |
r_imageAtlasDecalWidth/Height
|
8 / 8 (×1k) | [1,16] | direct | no |
The GPU-particle counts being registered as string-typed cvars (not int/float) in the live registrar is an engine quirk worth flagging as-is — untested whether writing a bare number to a string cvar round-trips cleanly through the config parser; not assumed either way (§6/§9).
| cvar | default | range | exposed |
|---|---|---|---|
r_dof (master DOF toggle: 0/1/2) |
1 | none declared | direct |
r_motionblur |
1 | none declared | direct |
r_motionBlurQuality |
2 (already max of 0–2) | none declared | direct |
r_chromaticAberration |
1 | none declared | direct |
r_filmGrainRatio |
1.0 | none declared | direct |
r_vignette |
1 | none declared | needs cfile |
r_sharpening |
2.0 | none declared | direct |
r_antialiasing |
6 (TSSAA 8TX) | none declared, documented enum 0–12 | direct |
com_overrideDOF, com_override_dof* (near/far/intensity override) |
0 / 1 / … | none declared | needs cfile |
r_dof, r_motionblur, r_chromaticAberration and r_filmGrainRatio all
being exposed means the three most-requested "clean image" toggles
(DOF, motion blur, chromatic aberration, plus grain via a ratio) need
no console unlock at all — a plain +r_dof 0 on the command line
already works by the gate's own rules, the cfile route is only strictly
needed for r_vignette (not exposed) and the com_override_dof* fallback.
r_antialiasing's own enum documents three raw-MSAA tiers past the
TSSAA/FXAA/SMAA set (10/11/12 = MSAA 2x/4x/8x) — not recommended,
see §7: id Tech 6/TNC is built around the TSSAA/deferred pipeline and
nothing in this round confirms MSAA is functional rather than a leftover
enum value.
| cvar | default | range | exposed | archived |
|---|---|---|---|---|
g_fov |
90 | [10,120] | direct | yes (CVAR_ARCHIVE, survives restarts) |
Hard-clamped by §2's mechanism to 10–120. The options-menu slider's own
range was not independently re-measured this round (no game launch
permitted) — but 120 is far past what any vanilla FOV slider in this game
offers, and the clamp guarantees g_fov 150 degrades gracefully to 120
instead of doing anything worse. This is the single cleanest "beyond the
menu" win in the whole table: one cvar, hard-clamped, already
CVAR_ARCHIVE so it persists like a normal setting.
| cvar | default | range | exposed |
|---|---|---|---|
rs_enable |
0 (off) | none declared, documented 0–3 | direct |
rs_minimumResolutionScale |
0.7 | none declared | needs cfile |
rs_forceFractionX / rs_forceFractionY
|
0 / 0 | none declared, documented "0.0 to 1.0" | direct |
r_initialModeWidth/Height
|
1920/1080 | none declared — only used when r_mode=-2 on first-ever start
|
direct |
r_windowWidth/Height
|
0 / 0 | none declared | direct |
Dead end, stated honestly: this is a downscale-for-performance
system (rs_minimumResolutionScale default 0.7, i.e. "never render
below 70%"), not a supersampling system. rs_forceFractionX/Y's own
description caps itself at "0.0 to 1.0" in the binary's own text, and no
cvar in the whole table exposes an internal render-resolution multiplier
above 1.0 — I looked specifically (§3.9's full rs_/r_mode/r_window*
sweep is exhaustive, not partial). Forcing rs_forceFractionX 1.5 is
untested and not recommended (§7, failed hypothesis).
Missed in pass 1 (its prefix sweep used r_/rs_/vt_/image_/sm_/
aa_/vulkan_, never is_ — a verifier-flagged gap). 28 is_ cvars exist
("Image Streaming" system, distinct from image_); the brief's own
"texture streaming budgets and pool sizes" category is a direct textbook
match:
| cvar | default | range | exposed | cheat |
|---|---|---|---|---|
is_poolSize |
1024 (MiB) | none declared | direct | no |
is_materialAniso |
4 | [1,16] | direct | no — a third, separate anisotropy cvar, on top of image_anisotropy/vt_maxAniso in §3.1 |
is_maxTextureSize |
32768 (KB) | none declared | needs cfile | yes |
is_mipBias |
0 | none declared | needs cfile | yes |
is_cacheGreedily |
1 | none declared | needs cfile | yes |
is_maxAllocationsPerFrame |
32 | none declared | needs cfile | yes |
is_defragLimitMB |
32 | none declared | needs cfile | yes |
is_poolSize's own description says "...is_restart after changing" —
same pattern as vt_restart, a separate command, not re-verified this
pass. is_materialAniso is engine-clamped [1,16] exactly like
vt_maxAniso/r_imageAtlasMaxAniso (§3.1/§2) — raising it to 16 is a
third, independent anisotropy push, not a duplicate of the two already in
§8.1. Not added to the committed presets this pass (would need a fresh
risk pass of its own); flagged here as the clearest concrete follow-up.
Reading the stock initial_video_*.cfg files this pass (§9) surfaced
several exposed, non-cheat render cvars the brief's categories cover
that pass 1's regex never matched (none contain "lod", "shadow", "stream",
"aniso", "ssr/ao/volumetric", "foliage/decal/particle", or a post-FX
keyword in their own name):
| cvar | default | exposed |
|---|---|---|
r_lightDistanceFadeMultiplier |
1.0 | direct |
r_lightClassThreshold |
2 | direct |
r_decalFadeCulling |
2 | direct |
r_particlesLightAtlasQuality |
1 | direct |
r_particlesLightAtlasWidth/Height
|
4096/2048 | direct |
r_particleFadeQualityMultiplier |
1.0 | direct |
r_waterCaustics, r_waterHitsSim, r_waterPostProcess
|
1/1/1 | direct |
r_waterGridResolution |
256 | direct |
r_waterLodViewDistance |
16.0 | direct |
r_waterInterleaveUpdates |
1 | direct |
r_shadowMaxStaleFrames |
"0,0,1,2,2" (string-typed) |
direct |
Not added to §8's committed presets this pass (no time left to individually risk-assess 11 more lines) — listed here as confirmed real and directly settable, for a follow-up round.
- 3256 registered / 304 exposed cvars, independently re-confirmed by
re-querying the already-cross-validated
cvars_tnc_v2.json(not re-derived, but spot-checked:g_fov,r_dof,vt_maxAniso,r_decalFilteringQualityall match their declared min/max and exposed state against direct field inspection of the JSON). - The shared clamp function
0x1238730exists, decompiles cleanly, and its branch condition (valueMin < valueMax) matches the catalog's own documented sentinel independently. -
0x1238730has call sites from essentially every per-cvar init thunk plus the cvar system's own Set/Reset internals (--callers, RVA list too long to be anything but "called everywhere"). -
r_dof,r_motionblur,r_chromaticAberration,r_filmGrainRatio,g_fov,vt_maxAniso,r_imageAtlasMaxAniso,r_decalFilteringQuality,vt_maxLockedPagesPercent,vt_minLockedVmtrLOD,vt_maxPPFare allexposed=Truein the live registrar — directly settable, no unlock route needed. -
r_vignette,com_overrideDOF/com_override_dof*,r_umbraMaxShadowQueries{Visible,Invisible},r_shadowLODAdjustThreshold,r_foliage*FadeDist,r_decalDistanceFadeStart,r_gpuParticle*EmitterParticleCountare allexposed=False— need the cfile route. - The engine's own startup sequence runs
resourceExec default.cfg -sunconditionally (docs/ladepfade.md:240-253, TNC-confirmed viacommand_queue.md's cross-reference toNewColossus_x64vk.exe), and the loader already has working code (wolfsdk/mod.py,wolfsdk/cvars.py) that appends arbitraryname valuelines to that exact file, journaled/reverted like any other mod asset (tools/verify_tnc_tweaks.py, 17/17 at the copy level perTODO.md). -
resourceExec <file> -sdrops the engine's restriction level to 0 for the duration of that file's own lines, generically, for any filename — proven at the code level (r4_consolecmds.md,0xa7a040/0xa7a74b), and runtime-confirmed in-game for two other files via that same callback (cfile:snapdemo.cfg/snapedit.cfg,mods/sandbox_tools) — not yet fordefault.cfg's own startup exec specifically (precision fix this pass, see "Pass 1 errors" #5). - (NEW this pass)
initial_video_ultra.cfg's own on-disk content: read in full, cross-referenced line-by-line against both §8 presets (§9) — 5 direct numeric collisions found.initial_video_uber.cfg/_meinleben.cfgalso read in full (§9, §3.11). - (NEW this pass) The primary JSON's
session_valuecolumn matchesinitial_video_uber.cfgon 6/6 independently checked discriminating fields (r_decalFilteringQuality=4,is_materialAniso/image_anisotropy=16.0,r_shadowAtlasWidth=8192 [not 16384, rules outmeinleben],r_particlesLightAtlasQuality=2 [not 3, rules outmeinleben],r_particlesLightAtlasWidth=4096 [not 8192, rules outmeinleben]) — the capture session was running Uber, not stock Ultra. - (NEW this pass) TNC's binary contains the string
"Resetting cheat cvar: %s"and its printer function at RVA0x123a320(decompiled in full);--callerson that RVA returns zero hits anywhere in the analyzed image.
-
r_decalFilteringQuality 4("Nightmare") actually looks different on-screen from3("Ultra") — the enum and its own aniso-tier text are real, the pixel result wasn't seen (no game launch). - The cfile-delivery gate (restriction level 0 inside any
resourceExec'd file) applies to render cvars exactly like cheat cvars — same code path, proven generically (§4). Whetherdefault.cfgspecifically survives to the rendered frame unmolested is not inferred from this — moved to open questions (§6) given the two new risks found this pass (initial_video re-exec, cheat-flag reset). -
vt_minLockedVmtrLOD 0/vt_maxLockedPagesPercent 50will visibly reduce VT streaming pop-in — consistent with their own description text, not confirmed on-screen. - Direction/sign of
r_lodScaleDeviation,r_shadowAtlasTileSize's packing constraints, and whetherr_gpuParticle*EmitterParticleCount(string-typed) round-trips a plain integer through the cfg parser are each flagged inline above as untraced. - (NEW this pass)
0x123a320having zero static callers suggests TNC's retail build doesn't wire up the TNO-style cheat-reset — inference from a negative control, not proof; an indirect/vtable call site wouldn't show up in a plainUNCONDITIONAL_CALLscan (§6).
-
Per-cvar usage sites were not traced. A cvar's own
.datarecord has no static xrefs outside its registration constructor (tnc_runtime_code.py --xref 0x2f35050onrs_forceFractionX's record → zero refs, confirmed) — code that reads a cvar's value holds a separately-cachedidCvar*pointer initialized once at registration, and locating that second pointer's own address (to then xref it) is a per-cvar reverse-engineering task, not a one-shot tool call. This round did it for none of the ~330 render cvars; the min/max clamp (§2) is a cvar-system proof, not per-cvar usage proof. Anything whose on-screen effect isn't independently obvious from its own description text is marked INFERRED or left as an open question, not asserted. - No game launch happened (forbidden by the brief) — nothing in this report was seen rendered.
-
Whether the runtime console
name valueSet path also clamps is now genuinely open (downgraded from pass 1's "inferred by elimination" — the elimination argument's own premise didn't hold, §2). Would need either locating the real Set-path value-parser or a liveg_fov 999-via-console test withqconsole.logopen. -
Whether
initial_video_<tier>.cfgexecs on every launch or only on first-ever run is unresolved by any doc in this project and was not resolved this pass either —docs/ladepfade.md's own evidence tier for its ordering isSTRING(binary layout, i.e. the order these filenames' exec-strings sit in one init block), notLAUFZEIT(an actual observed sequence). That the file's own content exactly matches the session snapshot'ssession_values (previous bullet) is suggestive that some session had it active, but doesn't resolve "every launch" vs "once". -
Whether a TNC cheat-reset silently wipes
cfile:default.cfg-setCVAR_CHEATcvars before the frame renders is unresolved. The printer-function-has-no-callers finding (§4/§5) is new evidence toward "no", butg_infiniteAmmo's existing proof doesn't close this: that test fired after full load via a hotkey-boundresourceExec, well past any startup-only reset window, whiledefault.cfgitself runs during startup — the one place a startup-only reset would actually matter. - TNO's render surface now has a names-only catalog (§1b) — ranges, clamps and exposed-flags remain out of reach without a TNO runtime image, which this project does not have.
-
True supersampling (render resolution above native) via
rs_*: no cvar does this. The resolution-scale system is a downscale-for-perf feature with its own floor at 0.7 and a self-documented 0.0–1.0 range on the force-fraction cvars. Not included in the preset. -
Raw MSAA (
r_antialiasing10/11/12) as a quality upgrade over TSSAA: not recommended. The enum exists and is reachable, but nothing in this round confirms id Tech 6's pipeline actually supports MSAA correctly (most modern deferred-leaning renderers of this era don't, without dedicated code paths that weren't traced) — flagged as a risk, not shipped in the committed preset. -
Doubling
r_shadowAtlasWidth/Heightto 16384: technically legal (unclamped), but 4× the atlas memory of the 8192² default with zero declared ceiling — flagged risky, not in the baseline preset, offered only as an optional advanced line. -
DevGUI/render-debug-overlay route:
docs/ui-assets.md§5 already establishesdevguisets without a lock warning but does nothing in the retail build (F8/F10 draw nothing) — re-confirmed by reading that section, not re-tested; not a path to any of this report's cvars.
Both blocks are plain name value lines — exactly the format
wolfsdk/cvars.py: build_cfg() already emits and wolfsdk/mod.py: with_tnc_tweaks() already appends to cfile:default.cfg. Every line below
works through that one mechanism regardless of exposed state (§4); lines
marked [direct] would also work as a bare +name value launch
argument if ever needed standalone. Ranked by impact (engine-clamped
numeric pushes and already-exposed toggles first — safest, least guessy;
unclamped distance/budget pushes last — real but untested visual size).
// *** NEW this pass: lines marked [OVERLAP] are also set by the stock
// initial_video_ultra.cfg, which execs from disk in the same startup init
// block AFTER default.cfg per docs/ladepfade.md's string-order listing
// (STRING-tier evidence, not LAUFZEIT — open question, see §6/§9). If that
// file re-execs on every launch, these 5 lines may get silently pulled back
// toward (or below) the values shown here. Nothing else in this preset
// overlaps.
// --- Ultra+: rank 1-4, hard-clamped by the engine, cannot overshoot ---
r_decalFilteringQuality 4 // [direct][OVERLAP: stock ultra.cfg sets "3"] Nightmare tier (16x decal aniso) — past "3 Ultra" in the cvar's own text
image_anisotropy 16 // [direct][OVERLAP: stock ultra.cfg sets "8.0"] world/char texture aniso, unclamped by engine but hardware-capped at 16x anyway
vt_maxAniso 16 // [direct][OVERLAP: stock ultra.cfg sets "4.0"] engine-clamped [1,16], was 4
r_imageAtlasMaxAniso 16 // [direct] engine-clamped [1,16], was 4 — NOT in initial_video_ultra.cfg, no overlap
vt_maxLockedPagesPercent 50 // [direct] engine-clamped [0,50], was 20 — more VT pages always resident
vt_minLockedVmtrLOD 0 // [direct] engine-clamped [0,10], was 6 — locks ALL mips resident, big VRAM cost (see risks)
vt_maxPPF 64 // [direct] engine-clamped [0,64], was 32 — faster streaming convergence after fast camera moves
r_imageAtlasDecalWidth 16 // [direct] engine-clamped [1,16], was 8
r_imageAtlasDecalHeight 16 // [direct] engine-clamped [1,16], was 8
// --- rank 5-6, exposed, unclamped multipliers (moderate pushes, not extreme) ---
r_decalDistanceFadeMultiplier 2.5 // [direct][OVERLAP: stock ultra.cfg sets "2"] decals visible further out, was 1.0
r_decalLifetimeMultiplier 2.5 // [direct][OVERLAP: stock ultra.cfg sets "1.3"] decals persist longer, was 1.0
r_shadowsDistanceFadeMultiplier 1.5 // [direct] shadows stay in longer with distance, was 1.0 — stock ultra.cfg ALSO sets "1.5", no conflict
// --- rank 7-9, needs cfile (not exposed), moderate pushes off low defaults ---
r_umbraMaxShadowQueriesVisible 32 // engine-clamped [0,512], was 6 — more lights get real shadow-occlusion tests/frame
r_umbraMaxShadowQueriesInvisible 8 // engine-clamped [0,512], was 1
r_waterQualityFFT 1 // documented 0/1, was 0 — 512x512 water sim instead of 256x256
r_decalDistanceFadeStart 120 // unclamped, was 60
r_foliageStartFadeDist 6000 // unclamped, was 3000
r_foliageSmallFadeDistMax 10000 // unclamped, was 5000
r_foliageBigFadeDistMax 14000 // unclamped, was 7000
// --- rank 10, gameplay-adjacent but explicitly asked for: FOV beyond the menu ---
g_fov 120 // [direct] engine-clamped [10,120], CVAR_ARCHIVE (persists), was 90
// --- rank 1-4: the four exposed post-fx master toggles, no unlock needed ---
r_dof 0 // [direct] master depth-of-field OFF (0=off,1=on,2=on+near-field)
r_motionblur 0 // [direct] motion blur OFF
r_chromaticAberration 0 // [direct] chromatic aberration OFF
r_filmGrainRatio 0 // [direct] film grain ratio to 0 (art-authored grain fully suppressed)
// --- rank 5: needs cfile, the one post-fx toggle NOT exposed ---
r_vignette 0 // vignette OFF
// --- rank 6: forces off the one quality-REDUCING default the binary ships on ---
r_shadingRateQualityOverride 4 // [direct] engine-clamped [0,5]; was 5 = adaptive VRS. 4 = always full 1x1 shading rate everywhere
// --- rank 7-8: sharper temporal resolve, modest, avoid overshooting (see risks) ---
r_antialiasing 9 // [direct] TSSAA (8X_8TX) — highest *temporal* tier, was 6 (TSSAA 8TX). Do NOT use 10/11/12 (raw MSAA, unverified, see FAILED HYPOTHESES)
r_sharpening 2.5 // [direct] was 2.0 — modest nudge, watch for edge halos above ~3.0
// --- rank 9: shared with 8.1, texture clarity is part of "clean" too ---
image_anisotropy 16
vt_maxAniso 16
r_imageAtlasMaxAniso 16
// --- rank 10: belt-and-braces DOF kill via the override system, optional, only if r_dof 0 alone ever proves insufficient ---
com_overrideDOF 1
com_override_dof 0
// --- make sure nothing silently drops internal render resolution under "clean" ---
rs_enable 0 // [direct] dynamic resolution scaling OFF (already the default — explicit belt-and-braces)
Both blocks can be merged into one cfile (duplicate cvar names between them
don't collide — none overlap except the shared anisotropy/rs_enable
lines, listed once). Hand the merged text to
wolfsdk/mod.py: with_tnc_tweaks() the same way the existing Cheats & QoL
settings already go through it, or append it to the TNC tweak catalog in
wolfsdk/cvars.py (_TNC_GROUPS already buckets r_/vt_/rs_/image_
into "Renderer"/"Textures"/"Virtual Textures" categories, so these just
need Tweak(...) entries with the ranges proven in §3 — no new plumbing).
| Line(s) | Risk | Mitigation |
|---|---|---|
vt_minLockedVmtrLOD 0, vt_maxLockedPagesPercent 50
|
Real VRAM commitment — "lock every mip resident" is not free on <8 GB cards | Engine-clamped so it can't go further than documented; drop to vt_minLockedVmtrLOD 2-3 / vt_maxLockedPagesPercent 30 on lower-VRAM GPUs |
r_umbraMaxShadowQueriesVisible/Invisible raised |
Untraced into the Umbra occlusion job scheduler — could be pure CPU cost for little/no visual gain | Shipped as a modest raise (32/8), not the 512 ceiling; watch frame time |
r_decalDistanceFadeMultiplier/Lifetime 2.5, foliage fade distances |
Unclamped — no engine-side ceiling at all; a much larger decal/foliage draw count could cost real GPU time | Values chosen as moderate multiples, not maxed; r_showDecalsByExpense/r_showFoliageSubTreeBounds exist for in-game diagnosis if it stutters |
r_shadowAtlasWidth/Height 16384 (offered in §7, not in the committed preset) |
4× atlas VRAM, unclamped | Deliberately left out of §8; only mention if asked for explicitly |
r_antialiasing 10/11/12 (MSAA) |
Unverified on this renderer — explicitly excluded from §8.2 | Use 9 (TSSAA) instead |
| Cfile route for render cvars | Proven generically (any resourceExec'd file), not yet independently fired for default.cfg specifically or for a render cvar |
§10's in-game test closes this |
r_gpuParticle*EmitterParticleCount (not in §8, mentioned in §3.6 only) |
Registered as type=string in the live table — round-trip through the cfg text parser untested |
Left out of the committed preset; flagged as a follow-up, not shipped blind |
docs/virtualtextures.md says vt_pageImageSizeVmtr default 4096, live registrar says 8192 |
Discrepancy not resolved | Noted in §3.4; the preset doesn't touch this cvar at all, so it doesn't block delivery |
(NEW) initial_video_ultra.cfg re-exec |
Read in full this pass: it sets r_decalFilteringQuality "3", image_anisotropy "8.0", vt_maxAniso "4.0", r_decalDistanceFadeMultiplier "2", r_decalLifetimeMultiplier "1.3" — all 5 conflict with §8.1's pushed values (marked [OVERLAP] inline). docs/ladepfade.md places its exec in the same startup init block as default.cfg, string-order after it. If it fires every launch, these 5 lines lose to the stock file on every start. Unresolved — no doc in this project settles "every launch" vs "first-run-only" (§6) |
§10's test now checks one overlap line (r_decalFilteringQuality) directly after launch |
(NEW) CVAR_CHEAT on every non-exposed line in both presets |
All 10 "needs cfile" cvars across §8.1/§8.2 are CVAR_CHEAT (independently re-checked this pass). TNO has a proven, LAUFZEIT-confirmed startup mechanism that silently resets every CVAR_CHEAT cvar (docs/limits.md); r6_enginelimits.md already hedged TNC's equivalent as unresolved. New this pass: TNC's binary has the identical "Resetting cheat cvar: %s" printer function (0x123a320), but it has zero static callers — evidence (not proof) it's unwired in TNC. g_infiniteAmmo's existing proof doesn't settle this either way: it fired post-load via a hotkey, after any startup-only reset window would already be closed, while default.cfg runs during startup |
§10's test checks one CHEAT-flagged cfile line (r_vignette 0) explicitly for this reason |
(Translated from German.)
- Merge the two blocks from §8.1 and §8.2 into one
.cfgfile (or enter them directly as newTweakentries inwolfsdk/cvars.pyunder_TNC_GROUPS/"Renderer"). - Apply in the loader — the existing
with_tnc_tweaks()route appends the lines automatically tocfile:default.cfg(the same mechanism that, according toTODO.md, already brought God mode/infinite ammo into the game). - Start the game, and before the first click check
qconsole.log(setlogFile 1/logFilePersistent 1beforehand if the log is missing —docs/ladepfade.mdsection "Kein Log ohne Zutun" ("no log without doing something") applies, according to its own text, to part 2 as well) forCANNOT be setorUnknown commandon exactly these lines — either would contradict the gate model proven in §4. - Then just look:
g_fov 120should immediately show a visibly wider field of view (clearest single test, sinceCVAR_ARCHIVE+ hard-clamped);r_dof 0+r_motionblur 0should be noticeable immediately in the next cutscene/when looking around quickly (no more blur/softening effect);r_decalFilteringQuality 4is seen most clearly on a flat bullet hole from a steep viewing angle (sharp instead of washed out). -
New this round, two concrete checks for the two open risks from
§9: type
r_decalFilteringQualityin the console (~) (without a value, it shows the current state). If it says4→ our line has survived,initial_video_ultra.cfgdoes not overwrite the tweaks at every start. If it says3→ the stock file wins, and the preset needs either a different delivery route or must drop the 5 lines marked[OVERLAP]from §8.1. The same forr_vignette(should show0, not1) — if it is back at1, a cheat reset has wiped the cfile line, and the whole "needs cfile" part of both presets is affected, not just this one line. - If both checks from step 5 are green, the cfile route for
render cvars is upgraded to PROVEN, and
vt_minLockedVmtrLOD 0can be checked on a fast camera turn for texture pop-in/blur (should occur much more rarely/not at all compared with the original state).
-
re_probes/cvartable/cvars_tnc_v2.json,re_probes/agent_reports/cvartable.md(3256/304 cvar catalog, incl.session_valuefield, not redone, queried) -
tools/decomp.py 0x1238730 --callers,0x1239140 --callers,0x123932c,0x123a320 --callers,0x123a320 --xrefs,0x1238530,0x1238fa0(clamp mechanism + cheat-reset investigation, this round and this pass) -
tools/tnc_runtime_code.py --xref 0x2f35050,--xref 0x123a320(negative controls on per-cvar usage tracing, this round/this pass) -
wolfsdk/mod.py(with_tnc_tweaks,TNC_DEFAULT_CFG),wolfsdk/cvars.py(split_tnc,build_cfg,_tnc_exposed) — existing delivery mechanism, read not written -
mods/sandbox_tools/mod.json— the actual file (snapdemo.cfg/snapedit.cfg) the runtime-proven cfile test used, read this pass to fix the "same file" overstatement -
docs/ladepfade.md:240-289,re_probes/agent_reports/command_queue.md,re_probes/agent_reports/r4_consolecmds.md—resourceExec default.cfg -sat TNC startup and the generic restriction-level-0 proof -
docs/cvars-tnc.md,docs/cvars-tnc-vergleich.md,docs/virtualtextures.md,docs/ui-assets.md,docs/limits.md(TNO cheat-reset precedent) — cross-referenced, not re-derived -
re_probes/agent_reports/r6_enginelimits.md— sibling round report, cited this pass for its CVAR_CHEAT-reset hedge (missed in pass 1) -
re_probes/enginelimits/tno_strings.py(existing, unmodified) run against TNO's.rdata/.datathis pass — §1b -
<Steam library>/.../Wolfenstein.II.The.New.Colossus/base/initial_video_{ultra,uber,meinleben}.cfg— read-only, this pass, §3.11/§9 -
tools/ghidra_runtime_import_tno.py(docstring re-read this pass, confirms no TNO runtime image exists) -
TODO.md(2026-10-01 entry on the cfile tweak delivery mechanism)
Related: Research Report: R4 Console Commands, Research Report: R6 Engine Limits, Research Report: Cvartable, Research Report: Command Queue, Modding Limits, Asset Loading Paths, TNC CVar Catalog, TNO Virtual Textures, UI Assets, TNC CVar Validation, TNC CVar Catalog Rendering, TNC Console Unlock.
English Wiki generated from the measured research notes in docs/. Evidence grades and uncertainty are preserved intentionally.
- WolfSDK Loader · DE
- WolfSDK Studio · DE
- FAQ · DE
- Mod format · DE
- Modding Guide
- Modding Surface
- CVar Catalog
- CVar Validation (old scrape)
- Texture Database
- Developer Mode
- Dev Menu
- Custom-Map Status