Files
nxnative-easy/dm/games/settings.tsv
T
seeddsandv0lumehi c13ddcf531 Add opt-in MetalFX spatial upscaling and a single-screen launcher (#215)
Scale the valid presented image with MetalFX's spatial scaler on the shared
Metal 4 path, preserving crop, letterboxing, origin and gamma-encoded colours.
Keep Standard as the default and fall back when scaling is unsupported.

Use the same path for asynchronous whole-window captures and diagnostic
screenshots, retaining resources until GPU completion. Bound scaler recreation
during resizing and report presentation GPU time separately by scaling mode.

Put all launcher settings on one screen with Game, Controls and Performance
sections, inline menus and sliders, and a reset to tested defaults. Extract the
settings model for native persistence tests, validate saved ranges, share HUD
setup, and document the measured costs without claiming an iPhone baseline.

Validated with Metal presentation, NVN and snapshot regressions; tool and iOS
tests; the Mac host; and an unsigned iOS smoke build. No new device gameplay run.

Co-authored-by: v0lumehi <aljic.zijad@gmail.com>
2026-10-26 09:38:05 +08:00

2.8 KiB

1# Player-facing settings: the iOS launcher (dm/ios/Sources/Launcher.swift) shows them before the game starts. dm/games/settings.py writes one game's list into its app (dm/launcher.json,
2# build_ipa.sh): the rows whose condition holds for that game, with its defaults. Each sets an environment variable the host reads when the game starts; one an env file sets
3# (Documents/env.txt, the bundle's dm/env.txt) is shown but kept. Diagnostic switches stay environment-only, so they are not listed here. The player's page is docs/settings.md.
4# Columns, separated by tabs:
5# variable the environment variable the setting sets
6# kind choice: values value=label,... (languages: the game's own, from its control data); range: values low:high:step, shown as a percentage;
7# toggle: values - (on sets 1, off 0) or <on>/<off>, the two values the variable takes (on/off)
8# default a value (a toggle's: 1 on, 0 off); DM_GAME_<NAME>: the host's own default from the game profile (game_profile.h, game.py); build:<VAR>: the IPA build's setting (build_ipa.sh)
9# shown always; DM_GAME_<NAME>!=<value> or ==<value>; fixups:<KEY>: main's rewriter table has that key (a stub in the game's build, patch_nso.py); languages>1; gfxapi:<API>: the packer's GFXAPI
10# section Game, Controls or Performance: a heading on the single settings screen. Rows appear in table order within each section
11# Reset to tested defaults clears all launcher choices; values fixed by an env file stay
12# label, note the setting's name and the line under it (may be empty; only for a setting with a cost: latency, memory, heat)
13DM_FPS_TARGETchoice30=30 fps,60=60 fpsDM_GAME_FPS_TARGETDM_GAME_FPS_TARGET!=0GameFrame rate
14DM_RENDER_SCALErange0.5:1.0:0.051.0fixups:RENDER_SCALEGameRender scale
15DM_OPMODEchoice1=Docked,0=HandheldDM_GAME_OPMODEalwaysGameConsole mode
16DM_PRESENT_UPSCALEchoiceoff=Standard,metalfx=MetalFXoffalwaysGameUpscalingUses more GPU time and can increase heat.
17DM_LANGchoicelanguagesbuild:DM_LANGlanguages>1GameGame language
18DM_SHOW_FPStoggle-build:DM_SHOW_FPSalwaysGameFrame-rate counter
19DM_TOUCH_HAPTICStoggle-1alwaysControlsTouch feedback
20DM_RUMBLEtoggle-1alwaysControlsGame rumble
21DM_RUMBLE_GAINrange0:3:0.11.0alwaysControlsRumble strength
22DM_PRESENT_SNAPtoggle-DM_GAME_PRESENT_SNAPgfxapi:nvnPerformanceFrame bufferingUp to one frame more display latency.
23DM_PSO_MTL4toggle-DM_GAME_PSO_MTL4gfxapi:nvnPerformanceMetal 4 pipelinesKeeps a pipeline archive; uses more memory.
24DM_PSO_PREBUILDtoggle-1gfxapi:nvnPerformancePipeline prebuildThe first start waits a few minutes for it, once.
25DM_NVN_ENC_THREADtoggle-1gfxapi:nvnPerformanceEncode thread
26DM_FPS_HOLDtoggleon/offDM_GAME_FPS_HOLDDM_GAME_FPS_TARGET!=0PerformanceHold frames when late
27DM_METAL_HUDtoggle-0alwaysPerformancePerformance HUD