Files
questshock/CONFIG.md
T
ml c0619a55ab
build / build (push) Successful in 2m22s
Add a language option to the VR menu, and fix a crash switching to it
- New "Language" row on the Main Menu tab (English/French/German),
  backed by a new "general" group in questshock.config.json
- Fixes a device-reproduced crash: switching language used to call
  language_dealfunc(), whose render_run()/opanel_redraw() repaint
  assumes the game's own in-game options panel is on screen - crashes
  (SIGSEGV) when triggered from our independent VR overlay instead.
  Now calls language_change() directly, which is all that's actually
  needed to reload resources and refresh the inventory/MFD/side-icon UI
- Fixes a second crash: this data set ships frnstrng.res/gerstrng.res
  but not mfdfrn.res/mfdger.res, and language_change() closes the
  current resource files before discovering the new ones don't exist -
  leaving no valid resource file open and crashing on the next lookup.
  Now checks both files exist before ever switching, refusing the
  change (with an in-headset popup) instead of corrupting resource state
- extract_assets.sh can now also pull mfdfrn.res/mfdger.res out of a
  System Shock: Classic installer (which includes them, unlike Enhanced
  Edition) if one is present in res/assets/ - entirely optional
- Documented all of the above in README.md/CONFIG.md
2026-09-05 08:09:12 +02:00

3.9 KiB

Persistent configuration (questshock.config.json)

QuestShock can load a persistent, human-editable configuration file at startup, in addition to (and independent of) the engine's own prefs.txt.

  • Location: /sdcard/questshock/questshock.config.json - the same folder you already copy res/data/res/sound into (see README.md section 5.1).

  • Format: plain JSON, grouped by concern. Each top-level key is a group; each key inside a group is one option.

  • Loading: read automatically at app startup, before the splash screen, if the file exists. If it doesn't exist, nothing changes - the engine behaves exactly as it did before this file existed (driven by prefs.txt as usual).

  • Saving: never automatic. In-headset, open the menu (controller menu button) and press Save Configuration to write the file from your current live settings, overwriting it if present. Press Load Configuration to re-read the file and apply it without restarting the app.

  • Live vs. restart-required: every option below is tagged as either live-appliable (applying it while already playing takes effect immediately) or restart-required. Pressing Load Configuration applies every live-appliable change straight away; if the file also changes something restart-required, a dialog lists exactly which option(s) need it and offers:

    • Dismiss - keep playing with the live-appliable changes already applied; the restart-required option(s) stay as they were.
    • Restart Now - relaunches the app, which re-runs this same startup load and so applies every group in the file, including the restart-required ones.

    (Every option currently documented below is live-appliable, so this dialog won't actually appear yet - it's built in for options added in a future version that do need a restart.)

  • Unrecognized groups/keys are ignored (harmless if you're editing the file in advance for a future version). An invalid value for a specific option (see each option's possible values below) is logged and that one option is skipped - every other valid option in the file still applies. A file that isn't valid JSON at all is ignored entirely, with nothing applied.

  • questshock.config.json and prefs.txt are fully independent - loading or saving one never reads or writes the other.

Example

{
  "video_options": {
    "renderer": "opengl",
    "resolution": "1024x768"
  },
  "general": {
    "language": "english"
  }
}

Video Options (video_options)

renderer

Which renderer the game uses to draw the 3D view.

  • Type: enum
  • Possible values: "software", "opengl"
  • Restart required?: No (live-appliable)

resolution

The game's internal rendering resolution.

  • Type: enum
  • Possible values: "320x200", "320x400", "640x400", "640x480", "1024x768"
  • Restart required?: No (live-appliable)

General (general)

language

The game's UI/text language - both the game's own resource strings and this project's own menu/keyboard chrome text (title bar, buttons, etc.).

  • Type: enum
  • Possible values: "english", "french", "german"
  • Restart required?: No (live-appliable) - applies the same way the game's own in-game options menu applies a language change (reloads the language-specific resource files and refreshes the inventory/MFD/side-icon UI immediately).
  • Note: French and German both need their own full resource pack (frnstrng.res/mfdfrn.res, gerstrng.res/mfdger.res under res/data/) - if any of those files aren't present, the switch is refused (logged, questshock.config.json and the current language are left unchanged) rather than leaving the game with no valid resource file open. See README.md section 3 ("Game assets") for where mfdfrn.res/ mfdger.res come from - the GOG Enhanced Edition installer alone doesn't include them.