# 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. (Both options currently documented below are 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" } } ``` ## 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)