c0619a55ab
build / build (push) Successful in 2m22s
- 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
97 lines
3.9 KiB
Markdown
97 lines
3.9 KiB
Markdown
# 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
|
|
|
|
```json
|
|
{
|
|
"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.
|