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>
2.8 KiB
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) | |||||||
| 13 | DM_FPS_TARGET | choice | 30=30 fps,60=60 fps | DM_GAME_FPS_TARGET | DM_GAME_FPS_TARGET!=0 | Game | Frame rate | |
| 14 | DM_RENDER_SCALE | range | 0.5:1.0:0.05 | 1.0 | fixups:RENDER_SCALE | Game | Render scale | |
| 15 | DM_OPMODE | choice | 1=Docked,0=Handheld | DM_GAME_OPMODE | always | Game | Console mode | |
| 16 | DM_PRESENT_UPSCALE | choice | off=Standard,metalfx=MetalFX | off | always | Game | Upscaling | Uses more GPU time and can increase heat. |
| 17 | DM_LANG | choice | languages | build:DM_LANG | languages>1 | Game | Game language | |
| 18 | DM_SHOW_FPS | toggle | - | build:DM_SHOW_FPS | always | Game | Frame-rate counter | |
| 19 | DM_TOUCH_HAPTICS | toggle | - | 1 | always | Controls | Touch feedback | |
| 20 | DM_RUMBLE | toggle | - | 1 | always | Controls | Game rumble | |
| 21 | DM_RUMBLE_GAIN | range | 0:3:0.1 | 1.0 | always | Controls | Rumble strength | |
| 22 | DM_PRESENT_SNAP | toggle | - | DM_GAME_PRESENT_SNAP | gfxapi:nvn | Performance | Frame buffering | Up to one frame more display latency. |
| 23 | DM_PSO_MTL4 | toggle | - | DM_GAME_PSO_MTL4 | gfxapi:nvn | Performance | Metal 4 pipelines | Keeps a pipeline archive; uses more memory. |
| 24 | DM_PSO_PREBUILD | toggle | - | 1 | gfxapi:nvn | Performance | Pipeline prebuild | The first start waits a few minutes for it, once. |
| 25 | DM_NVN_ENC_THREAD | toggle | - | 1 | gfxapi:nvn | Performance | Encode thread | |
| 26 | DM_FPS_HOLD | toggle | on/off | DM_GAME_FPS_HOLD | DM_GAME_FPS_TARGET!=0 | Performance | Hold frames when late | |
| 27 | DM_METAL_HUD | toggle | - | 0 | always | Performance | Performance HUD |