From c24b7f15cb106122d151901db0d76a3848cdb296 Mon Sep 17 00:00:00 2001 From: ml Date: Sun, 20 Sep 2026 06:08:50 +0200 Subject: [PATCH] Add remappable controller controls with a Controller Options tab Add a player_controls config group that maps game actions to controller inputs, and a Controller Options menu tab to rebind them in-headset. - 45 actions: movement, click/double-click, jump, fire, and the engine's own keyboard hotkeys (posture, save/load, weapon/MFD select, etc.), sent to the engine as synthetic key events. Cheat and dead hotkeys are not exposed. - Press-to-capture rebinding with per-input exclusivity, Reset to Defaults (built-in defaults, then questshock.config.default.json), and new defaults: left stick moves/strafes, right stick turns. - Controller profiles for Touch, Vive and generic OpenXR (res/controller_profiles/), matched to the active interaction profile at runtime, with a fatal dialog if a profile's bindings are rejected at startup. - The menu's thumbstick locomotion is disabled while the Controller Options tab is open or a capture is active. A scrollable list with a tap-to-jump scroll bar handles the long action list. - Opening the menu pauses a running game and resumes it on close. - Reset Position now keeps the player's facing instead of turning the screen to the current gaze. - Play the intro video in the game's language (engine patch 23), falling back to English. - Watchdog and shared-key handling for stuck movement keys, plus key-edge logging. --- CONFIG.md | 223 ++- android/app/build.gradle | 1 + android/app/src/main/cpp/qs_config.c | 232 ++- android/app/src/main/cpp/qs_config.h | 59 +- android/app/src/main/cpp/questshock_native.c | 37 + android/app/src/main/cpp/xr_input.c | 1299 ++++++++++++++--- android/app/src/main/cpp/xr_input.h | 87 +- .../de/ladkau/questshock/MenuOverlay.java | 596 +++++++- .../de/ladkau/questshock/OverlayPanel.java | 11 +- .../ladkau/questshock/QuestShockActivity.java | 18 +- .../java/de/ladkau/questshock/Strings.java | 100 ++ .../23-android-intro-language.patch | 42 + build-image/prepare-android-project.sh | 1 + res/controller_profiles/generic.json | 9 + res/controller_profiles/generic.png | Bin 0 -> 27379 bytes res/controller_profiles/touch.json | 19 + res/controller_profiles/touch.png | Bin 0 -> 63449 bytes res/controller_profiles/vive.json | 15 + res/controller_profiles/vive.png | Bin 0 -> 78593 bytes res/screenshots/gallery_016.jpg | Bin 0 -> 289424 bytes res/sketch_main_menu.svg | 132 -- 21 files changed, 2489 insertions(+), 392 deletions(-) create mode 100644 android/engine-patches/23-android-intro-language.patch create mode 100644 res/controller_profiles/generic.json create mode 100644 res/controller_profiles/generic.png create mode 100644 res/controller_profiles/touch.json create mode 100644 res/controller_profiles/touch.png create mode 100644 res/controller_profiles/vive.json create mode 100644 res/controller_profiles/vive.png create mode 100644 res/screenshots/gallery_016.jpg delete mode 100644 res/sketch_main_menu.svg diff --git a/CONFIG.md b/CONFIG.md index aa839ca..faab213 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -66,6 +66,21 @@ startup, in addition to (and independent of) the engine's own `prefs.txt`. "x": 0.0, "z": 0.0, "yaw_degrees": 0.0 + }, + "player_controls": { + "move_forward": "left_thumbstick_up", + "move_back": "left_thumbstick_down", + "strafe_left": "left_thumbstick_left", + "strafe_right": "left_thumbstick_right", + "turn_left": "right_thumbstick_left", + "turn_right": "right_thumbstick_right", + "jump": "left_thumbstick_click", + "mouse_click": "right_a", + "mouse_double_click": "right_b", + "stand": "right_thumbstick_up", + "prone": "right_thumbstick_down", + "toggle_freelook": "right_thumbstick_click", + "fire_weapon": "right_trigger" } } ``` @@ -177,13 +192,14 @@ to an automatic recenter instead (see **Reset Position** below), using your real head pose at that moment. A complete saved position is applied as-is, with no such recenter. -**Reset Position** (Main Menu tab) is a separate, live-only action, not a -config value: it recenters using your *current* real head pose, so the -game quad ends up directly ahead of wherever you're actually standing/ -facing right now - not a plain "go back to `(0, 0, 0)`" (which would only -undo thumbstick movement, not any physical drift/rotation since the -session started). It's unrelated to `questshock.config.json` - it never -reads or writes this file. +**Reset Position** (Main Menu tab) is a live-only action, not a config +value: it moves you to the centre in front of the game quad, based on where +your head actually is right now. It resets only your *position*, not which +way you're facing, so the screen does not rotate to follow your gaze - press +it while looking off to one side and the screen stays off to the other side. +The automatic recenter at startup (when there's no saved position) does +face the screen towards where you're looking. Reset Position never reads or +writes `questshock.config.json`. ### `x`, `z` @@ -198,3 +214,196 @@ Which way the player is virtually facing, in degrees. - **Type**: number - **Restart required?**: No (live-appliable) + +## Player Controls (`player_controls`) + +Maps each of 45 in-game actions to a physical controller input: 9 +movement/click actions plus 36 for the engine's own keyboard hotkeys and +firing (posture, save/load, weapon select, MFD panels, etc. - see the hotkey +table below). Some actions are bound by default (see the default-input +columns); the rest are unbound and can be bound on demand. Assign them in the +**Controller Options** menu tab: tap an action's binding button, then press +the button or stick direction to use ("Press a button…"); tap it again, or +wait 8 seconds, to cancel without changing it. + +- **Type**: one enum-string field per action (below) +- **Restart required?**: No (live-appliable) - a rebind takes effect + immediately, and persists across restarts once saved (**Save + Configuration**, same as every other group here). +- **Not included here**: opening/closing the VR menu itself is a fixed, + non-remappable button (see "Menu button" below) - there's no + `menu_toggle` field, and the Controller Options tab never lets you + reassign it. This guarantees you can always reach this tab and press + **Reset to Defaults** to recover from any bad rebind, no matter what else + you've reassigned. +- **Reset to Defaults**: restores the "Default input" column below for + every action not overridden by a `player_controls` group in + `questshock.config.default.json` - if that file defines one (it doesn't, + out of the box), the values it specifies are applied on top of the table + below instead, so you can customize what "reset" means without a rebuild. + This is independent of your own `questshock.config.json` - resetting + doesn't read or write that file, just the live bindings (**Save + Configuration** afterward to persist them). + +### Actions + +| Action key | Default input | Effect | +|---|---|---| +| `move_forward` | `left_thumbstick_up` | Walk forward | +| `move_back` | `left_thumbstick_down` | Walk backward | +| `strafe_left` | `left_thumbstick_left` | Step sideways, left | +| `strafe_right` | `left_thumbstick_right` | Step sideways, right | +| `turn_left` | `right_thumbstick_left` | Turn left | +| `turn_right` | `right_thumbstick_right` | Turn right | +| `jump` | `left_thumbstick_click` | Jump | +| `mouse_click` | `right_a` | Click - operates the keyboard/game quad's cursor, whichever the pointing hand's ray is over | +| `mouse_double_click` | `right_b` | Double-click - game quad only (e.g. using an inventory item); has no effect over the menu or keyboard | + +Movement actions bound to a thumbstick direction are suppressed while the +VR menu is open, since the same physical stick already snap-turns/smooth- +moves the player in that state (see `player_position` above) - this is the +one case where a binding's effect depends on whether the menu is open, and +it only ever affects the 8 thumbstick-direction inputs below. + +`mouse_click` additionally behaves differently depending on the menu: +while the VR menu is open, its "click" is always whichever hand's trigger +is used to interact with the menu (so you can never lock yourself out of +this settings screen by rebinding `mouse_click` elsewhere); once the menu +is closed, both the on-screen keyboard (if it's still open) and the game +quad use your actual `mouse_click` binding. The default (`right_a`) is a +specific button on the right controller, so only the right hand's ray clicks; +bind the `trigger` identifier (see below) for either hand to click. + +### Hotkey actions + +The engine's own keyboard hotkeys (`HotKeyLookup[]` in `Prefs.c`) plus +firing, as 36 bindable actions. `stand` (`right_thumbstick_up`), `prone` +(`right_thumbstick_down`), `toggle_freelook` (`right_thumbstick_click`) and +`fire_weapon` (`right_trigger`) are bound by default; the rest are unbound +(`none`). Each fires once per press, like pressing the key on a real +keyboard (there is no hold behavior). + +| Action key | Keyboard equivalent | Effect | +|---|---|---| +| `stand` | `t` | Stand up | +| `crouch` | `g` | Crouch | +| `prone` | `b` | Go prone | +| `toggle_freelook` | `f` | Toggle mouse-look | +| `pause` | `p` | Pause the game | +| `full_view` | Ctrl+F | Switch to the fullscreen view loop | +| `normal_view` | Ctrl+D | Switch to the normal gameplay view | +| `map_view` | Ctrl+A | Switch to the automap view | +| `save_game` | Ctrl+S | Save the game | +| `load_game` | Ctrl+L | Load the game | +| `select_grenade` | Ctrl+' | Select the next grenade type | +| `arm_grenade` | Alt+' | Arm the selected grenade | +| `select_drug` | Ctrl+; | Select the next drug/patch | +| `use_drug` | Alt+; | Use the selected drug/patch | +| `toggle_online_help` | Ctrl+H | Toggle the online help overlay | +| `show_help` | Alt+O | Show the help screen | +| `toggle_music` | Ctrl+M | Toggle music | +| `quit` | Ctrl+Q | Quit the game - opt-in only; nothing binds this by default | +| `cycle_weapon_next` | Tab | Ready the next weapon | +| `cycle_weapon_prev` | Shift+Tab | Ready the previous weapon | +| `cycle_detail` | Ctrl+1 | Cycle the graphics detail level | +| `reload_weapon_primary` | Ctrl+Backspace | Reload the current weapon's primary ammo | +| `reload_weapon_secondary` | Alt+Backspace | Reload the current weapon's secondary ammo | +| `hud_color` | Alt+H | Cycle the HUD color scheme | +| `clear_fullscreen` | Backspace | Close a fullscreen view (e.g. a datapad or email) | +| `mfd_left_1`-`mfd_left_5` | F1-F5 | Set the left MFD panel to Weapon/Item/Map/Target/Info | +| `mfd_right_1`-`mfd_right_5` | F6-F10 | Set the right MFD panel to Weapon/Item/Map/Target/Info | +| `fire_weapon` | Enter | Fire the readied weapon at the cursor (the engine's default fire key). Clicking in the 3D view with `mouse_click` also fires; this is a separate button for it | + +**Not exposed** (other `HotKeyLookup[]` entries): +- `keypad 0`-`keypad 9`: a controller button per digit is not useful; use the + on-screen keyboard. +- The 4 `cheat_*` entries: debug cheats. +- `mac_help` (disabled) and `audiolog_cancel` (its build flag is not + defined): they are not real hotkeys in this build. +- `toggle_opengl` (Ctrl+G): the Video Options tab's Renderer buttons already + toggle the same setting. +- The 10 numeric hardware-item hotkeys (bio scan, fullscreen, 360 view, + lantern, shield, infrared, nav unit, data reader, booster, jumpjets): their + registered keys never match a real keypress in the engine. + +### Raw input identifiers + +Every raw physical input available to bind an action to, with its generic +OpenXR interaction-profile component name and its Meta Quest Touch control +name. Two symmetric identifiers (`trigger`, `squeeze`) are also accepted, but +only for `mouse_click`/`mouse_double_click`: they mean "either hand's own +trigger/grip, whichever hand is pointing". Every other identifier below +refers to one specific control. + +| Identifier | OpenXR component (Touch) | Meta Quest control | +|---|---|---| +| `left_trigger` | `/user/hand/left/input/trigger/value` | Left Trigger | +| `right_trigger` | `/user/hand/right/input/trigger/value` | Right Trigger | +| `left_squeeze` | `/user/hand/left/input/squeeze/value` | Left Grip | +| `right_squeeze` | `/user/hand/right/input/squeeze/value` | Right Grip | +| `left_x` | `/user/hand/left/input/x/click` | X Button | +| `left_y` | `/user/hand/left/input/y/click` | Y Button | +| `right_a` | `/user/hand/right/input/a/click` | A Button | +| `right_b` | `/user/hand/right/input/b/click` | B Button | +| `left_thumbstick_click` | `/user/hand/left/input/thumbstick/click` | Left Thumbstick Click | +| `right_thumbstick_click` | `/user/hand/right/input/thumbstick/click` | Right Thumbstick Click | +| `left_thumbstick_up/down/left/right` | `/user/hand/left/input/thumbstick` (digitized) | Left Thumbstick, tilted | +| `right_thumbstick_up/down/left/right` | `/user/hand/right/input/thumbstick` (digitized) | Right Thumbstick, tilted | +| `trigger` | either hand's trigger | Either Trigger (`mouse_click`/`mouse_double_click` only) | +| `squeeze` | either hand's grip | Either Grip (`mouse_click`/`mouse_double_click` only) | +| `none` | - | Unbound - the action never fires | + +**Menu button** (left controller, Touch/Vive/generic alike) is not in this +list - it always opens/closes the VR menu and can never be reassigned. + +**Other supported controllers**: HTC Vive wands have no A/B/X/Y and no +analog grip - `left_x`/`left_y`/`right_a`/`right_b` simply never fire on +that profile, and `left/right_squeeze` are a plain click rather than +analog. Their trackpad stands in for the thumbstick identifiers above +(same digitization, just a trackpad instead of a stick). A bare-minimum +OpenXR controller (`khr/simple_controller`, used as a fallback when +neither Touch nor Vive bindings are suggested) only has `left_trigger`/ +`right_trigger` (via its `select/click` component) and the menu button - +every other identifier above simply never fires on it, which is why the +Controller Options tab shows a note and hides irrelevant rows when this +profile is active. + +### Controller profile files (`controller_profiles/`) + +The Controller Options tab shows a labeled illustration of whichever +controller is actually active, driven by `res/controller_profiles/*.json` +(bundled with the app, copied to `/sdcard/questshock/controller_profiles/` +on every launch, refreshing the known bundled files without touching any +extra ones you add there yourself). Each file: + +```json +{ + "name": "Meta Quest Touch", + "interaction_profile": "/interaction_profiles/oculus/touch_controller", + "image": "touch.png", + "controls": [ + {"id": "right_b", "label": "B", "anchor_x": 0.76, "anchor_y": 0.22} + ] +} +``` + +- `interaction_profile` - the OpenXR interaction profile path this file + describes; matched against whichever one is actually bound at runtime. + Falls back to `generic.json` if nothing matches. +- `image` - filename (same folder) of the controller illustration. +- `controls` - one entry per labeled point on that illustration: `id` is a + raw input identifier from the table above (thumbstick directions share + one `left_thumbstick`/`right_thumbstick` entry, since they're the same + physical stick); `anchor_x`/`anchor_y` are 0-1 fractions of the image for + positioning that label's pointer line. + +This is presentation data only - adding real support for a new controller +still needs matching bindings in the app itself; a profile file with no +corresponding code-level support just never gets matched. + +### Fatal startup error + +If the OpenXR runtime rejects any of the three supported controller +profiles' bindings at launch (an app bug, not something you did), a +non-cancelable dialog explains this and exits - this should never happen +in a normal build. diff --git a/android/app/build.gradle b/android/app/build.gradle index 38aab1c..08b1802 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -106,6 +106,7 @@ def stageEngineTask = tasks.register("stageEngine", Exec) { inputs.file("${repoRoot}/build-image/Dockerfile") // Staged into assets/ by prepare-android-project.sh. inputs.file("${repoRoot}/res/questshock.config.default.json") + inputs.dir("${repoRoot}/res/controller_profiles") outputs.dir("${repoRoot}/build/android-engine") outputs.dir("${repoRoot}/build/android-gl4es") outputs.dir("${repoRoot}/build/android-prebuilt") diff --git a/android/app/src/main/cpp/qs_config.c b/android/app/src/main/cpp/qs_config.c index cbf5cb5..1519657 100644 --- a/android/app/src/main/cpp/qs_config.c +++ b/android/app/src/main/cpp/qs_config.c @@ -369,6 +369,14 @@ typedef struct { bool has_x, has_z, has_yaw_degrees; } QsParsedPlayerPosition; +// One string slot per remappable action, indexed by +// xr_input_action_index_from_name(). This file does not list the actions +// itself; xr_input.c owns them. Sized above the current action count. +#define QS_MAX_PLAYER_CONTROL_ACTIONS 96 +typedef struct { + char bindings[QS_MAX_PLAYER_CONTROL_ACTIONS][24]; // "" = not present in the file +} QsParsedPlayerControls; + typedef struct { QsParsedVideoOptions video_options; bool has_video_options; @@ -376,6 +384,8 @@ typedef struct { bool has_general; QsParsedPlayerPosition player_position; bool has_player_position; + QsParsedPlayerControls player_controls; + bool has_player_controls; } QsParsedConfig; static void qs_parse_video_options_field(const char *key, QsJsonParser *p, void *ctx) { @@ -428,6 +438,17 @@ static void qs_parse_player_position_field(const char *key, QsJsonParser *p, voi qs_json_skip_value(p); } +// Looks up `key` in xr_input.c's action-name list instead of a fixed strcmp +// chain. +static void qs_parse_player_controls_field(const char *key, QsJsonParser *p, void *ctx) { + QsParsedPlayerControls *out = (QsParsedPlayerControls *)ctx; + int index; + if (xr_input_action_index_from_name(key, &index) && index < QS_MAX_PLAYER_CONTROL_ACTIONS) + qs_json_take_string_field(p, out->bindings[index], sizeof(out->bindings[index])); + else + qs_json_skip_value(p); +} + static void qs_parse_top_level_field(const char *key, QsJsonParser *p, void *ctx) { QsParsedConfig *out = (QsParsedConfig *)ctx; if (strcmp(key, "video_options") == 0 && !p->error && p->p < p->end && *p->p == '{') @@ -437,6 +458,9 @@ static void qs_parse_top_level_field(const char *key, QsJsonParser *p, void *ctx else if (strcmp(key, "player_position") == 0 && !p->error && p->p < p->end && *p->p == '{') out->has_player_position = qs_json_parse_object(p, qs_parse_player_position_field, &out->player_position); + else if (strcmp(key, "player_controls") == 0 && !p->error && p->p < p->end && *p->p == '{') + out->has_player_controls = + qs_json_parse_object(p, qs_parse_player_controls_field, &out->player_controls); else qs_json_skip_value(p); } @@ -874,6 +898,38 @@ static bool qs_apply_player_position(const QsParsedPlayerPosition *parsed) { return changed; } +// =========================================================================== +// General: player controls +// =========================================================================== + +// Live-appliable: xr_input_set_action_binding() (xr_input.c) just writes +// into the per-frame lookup table xr_input_sync_and_draw() already reads +// every frame - no restart distinction needed, same as player_position. +#define QS_PLAYER_CONTROLS_REQUIRES_RESTART false + +// Applies only the actions present in *parsed and leaves the rest untouched. +// Invalid raw-input names (a typo, or a symmetric form on the wrong action - +// see xr_input_set_action_binding()) are WARN+skipped per action. +static bool qs_apply_player_controls(const QsParsedPlayerControls *parsed) { + bool changed = false; + int count = xr_input_action_count(); + if (count > QS_MAX_PLAYER_CONTROL_ACTIONS) + count = QS_MAX_PLAYER_CONTROL_ACTIONS; + for (int i = 0; i < count; i++) { + if (parsed->bindings[i][0] == '\0') + continue; + int before = xr_input_get_action_binding(i); + if (!xr_input_set_action_binding(i, parsed->bindings[i])) { + WARN("%s: player_controls.%s=\"%s\" is invalid - ignoring", QS_CONFIG_FILENAME, + xr_input_action_name(i), parsed->bindings[i]); + continue; + } + if (xr_input_get_action_binding(i) != before) + changed = true; + } + return changed; +} + // =========================================================================== // Read-only queries for the Video Options tab (see qs_config.h) // =========================================================================== @@ -1013,6 +1069,11 @@ static void qs_config_apply_parsed(const QsParsedConfig *parsed, bool live, char if (changed && QS_PLAYER_POSITION_REQUIRES_RESTART) qs_append_restart_reason(restart_needed, restart_needed_size, "player_position"); } + if (parsed->has_player_controls) { + bool changed = qs_apply_player_controls(&parsed->player_controls); + if (changed && QS_PLAYER_CONTROLS_REQUIRES_RESTART) + qs_append_restart_reason(restart_needed, restart_needed_size, "player_controls"); + } } static bool qs_config_write_file(void) { @@ -1037,6 +1098,14 @@ static bool qs_config_write_file(void) { fprintf(f, " \"general\": {\n"); fprintf(f, " \"language\": \"%s\"\n", qs_current_language_name()); fprintf(f, " },\n"); + { + int count = xr_input_action_count(); + fprintf(f, " \"player_controls\": {\n"); + for (int i = 0; i < count; i++) + fprintf(f, " \"%s\": \"%s\"%s\n", xr_input_action_name(i), + xr_input_get_action_binding_name(i), i + 1 < count ? "," : ""); + fprintf(f, " },\n"); + } { float x, z, yaw_degrees; xr_session_get_player_transform(&x, &z, &yaw_degrees); @@ -1117,6 +1186,52 @@ static void qs_show_restart_dialog(const char *restart_needed) { // only qs_apply_language()'s missing-resource-files warning above. static void qs_show_message_dialog(const char *message) { qs_call_dialog_method("showMessageDialog", message); } +// Non-cancelable, single-"Exit"-button dialog (MenuOverlay.java's +// showFatalControllerBindingError()) - see qs_config_report_fatal_input_error()'s +// own comment (qs_config.h) on when/why this fires. +void qs_config_report_fatal_input_error(const char *profile_display_name) { + char message[256]; + snprintf(message, sizeof(message), + "Controller support failed to initialize: the OpenXR runtime rejected the \"%s\" " + "interaction profile's bindings. This is an app bug, not something you can fix.", + profile_display_name); + qs_call_dialog_method("showFatalControllerBindingError", message); +} + +// Shared by qs_config_notify_control_capture_result() below - resolves +// MenuOverlay.onControlCaptureResult(int, String), called once per changed +// row (up to twice per capture - see this function's own header comment). +static void qs_call_control_capture_result(int action_index, const char *raw_name) { + JNIEnv *env = (JNIEnv *)SDL_AndroidGetJNIEnv(); + jobject activity = (jobject)SDL_AndroidGetActivity(); + if (!env || !activity) + return; + + jclass menuOverlayClass = qs_find_class(env, activity, "de.ladkau.questshock.MenuOverlay"); + if (!menuOverlayClass) + return; + + jmethodID method = (*env)->GetStaticMethodID(env, menuOverlayClass, "onControlCaptureResult", + "(ILjava/lang/String;)V"); + if (!method) { + (*env)->ExceptionClear(env); + return; + } + + jstring rawNameStr = raw_name ? (*env)->NewStringUTF(env, raw_name) : NULL; + (*env)->CallStaticVoidMethod(env, menuOverlayClass, method, (jint)action_index, rawNameStr); + if ((*env)->ExceptionCheck(env)) + (*env)->ExceptionClear(env); +} + +void qs_config_notify_control_capture_result(int action_index, const char *raw_name, + int displaced_action_index, + const char *displaced_raw_name) { + qs_call_control_capture_result(action_index, raw_name); + if (displaced_action_index >= 0) + qs_call_control_capture_result(displaced_action_index, displaced_raw_name); +} + // =========================================================================== // Public API (see qs_config.h) // =========================================================================== @@ -1131,16 +1246,21 @@ static Uint32 s_set_initial_screen_width_event_type; static Uint32 s_set_initial_screen_distance_event_type; static Uint32 s_set_game_screen_width_event_type; static Uint32 s_set_game_screen_distance_event_type; +static Uint32 s_begin_control_capture_event_type; +static Uint32 s_cancel_control_capture_event_type; +static Uint32 s_reset_player_controls_event_type; +static Uint32 s_menu_visibility_event_type; void qs_config_load_startup(void) { // Registers the custom SDL event types qs_config_request_save()/_load()/ // _set_renderer()/_set_resolution()/_set_language()/_reset_position()/ - // the four _set_*_screen_*() screen-profile setters enqueue - done - // here, once, on the engine's own thread and before the menu/its - // buttons could possibly exist yet, rather than lazily from those - // functions themselves (which run on Android's UI thread and could - // otherwise race each other doing this lazily). - Uint32 base = SDL_RegisterEvents(10); + // the four _set_*_screen_*() screen-profile setters/the three + // control-capture/reset requests enqueue - done here, once, on the + // engine's own thread and before the menu/its buttons could possibly + // exist yet, rather than lazily from those functions themselves (which + // run on Android's UI thread and could otherwise race each other doing + // this lazily). + Uint32 base = SDL_RegisterEvents(14); s_save_event_type = base; s_load_event_type = base + 1; s_set_renderer_event_type = base + 2; @@ -1151,6 +1271,10 @@ void qs_config_load_startup(void) { s_set_game_screen_width_event_type = base + 7; s_set_initial_screen_distance_event_type = base + 8; s_set_game_screen_distance_event_type = base + 9; + s_begin_control_capture_event_type = base + 10; + s_cancel_control_capture_event_type = base + 11; + s_reset_player_controls_event_type = base + 12; + s_menu_visibility_event_type = base + 13; QsParsedConfig parsed; bool haveConfig = qs_config_read_file(&parsed); @@ -1266,6 +1390,65 @@ void qs_config_request_set_game_screen_distance(int preset_index) { SDL_PushEvent(&event); } +// Controller Options tab (see qs_config.h) - same enqueue-only reasoning as +// every button above. +void qs_config_request_begin_control_capture(int action_index) { + SDL_Event event; + SDL_zero(event); + event.type = s_begin_control_capture_event_type; + event.user.code = action_index; + SDL_PushEvent(&event); +} + +void qs_config_request_cancel_control_capture(void) { + SDL_Event event; + SDL_zero(event); + event.type = s_cancel_control_capture_event_type; + SDL_PushEvent(&event); +} + +void qs_config_notify_menu_visibility(bool visible) { + SDL_Event event; + SDL_zero(event); + event.type = s_menu_visibility_event_type; + event.user.code = visible ? 1 : 0; + SDL_PushEvent(&event); +} + +void qs_config_request_reset_player_controls(void) { + SDL_Event event; + SDL_zero(event); + event.type = s_reset_player_controls_event_type; + SDL_PushEvent(&event); +} + +// hkeyfunc.c - the same toggle the game's own "pause" hotkey ('p') calls, +// which also handles the mouse capture/cursor/sound side of pausing. +extern uchar game_paused; +extern uchar pause_game_func(ushort keycode, uint32_t context, intptr_t data); + +// True only while a pause this file caused is (as far as it knows) still in +// effect - see qs_config_notify_menu_visibility(). +static bool s_menu_paused_game = false; + +// s_screen_profile_is_game is "a game is running" (anything but the setup/ +// main-menu and cutscene loops, see qs_screen_profile_notify_loop_mode()). +static void qs_apply_menu_pause(bool menu_visible) { + if (menu_visible) { + if (s_screen_profile_is_game && !game_paused) { + pause_game_func(0, 0, 0); + s_menu_paused_game = true; + } + } else if (s_menu_paused_game) { + s_menu_paused_game = false; + // Only toggle back if it's still paused - the game may have + // unpaused itself (or the player did) while the menu was open, and + // toggling then would pause it instead. + if (game_paused) + pause_game_func(0, 0, 0); + } +} + bool qs_config_handle_event(const SDL_Event *event) { if (event->type == s_save_event_type) { if (qs_config_write_file()) @@ -1305,15 +1488,10 @@ bool qs_config_handle_event(const SDL_Event *event) { return true; } if (event->type == s_reset_position_event_type) { - // Deliberately not xr_session_set_player_transform(0,0,0) - see - // xr_input_recenter_player_to_screen()'s own comment: a "return to - // (0,0,0)" reset only undoes thumbstick locomotion, not any real, - // physical drift/rotation since the session started, which is what - // actually made this feel "slightly off" - recentering onto the - // player's current real head pose fixes both at once, and is - // unrelated to questshock.config.json (this event doesn't read or - // write the config file at all, just like this one never has). - xr_input_recenter_player_to_screen(); + // Re-anchors the position onto the player's current real head position + // and keeps their facing (see xr_input_reset_player_position()). Does + // not read or write questshock.config.json. + xr_input_reset_player_position(); message_info("Recentered"); return true; } @@ -1345,5 +1523,29 @@ bool qs_config_handle_event(const SDL_Event *event) { qs_preset_value(s_screen_distance_offset_m, s_screen_distance_step_m, index)); return true; } + if (event->type == s_begin_control_capture_event_type) { + xr_input_capture_begin(event->user.code); + return true; + } + if (event->type == s_cancel_control_capture_event_type) { + xr_input_capture_cancel(); + return true; + } + if (event->type == s_menu_visibility_event_type) { + qs_apply_menu_pause(event->user.code != 0); + return true; + } + if (event->type == s_reset_player_controls_event_type) { + // Built-in defaults first (they cover every action), then + // questshock.config.default.json's player_controls group, if it has + // one, overrides the actions it specifies. + xr_input_reset_player_controls(); + QsParsedConfig defaultParsed; + if (qs_config_read_file_named(QS_CONFIG_DEFAULT_FILENAME, &defaultParsed) && + defaultParsed.has_player_controls) + qs_apply_player_controls(&defaultParsed.player_controls); + message_info("Controller bindings reset to defaults"); + return true; + } return false; } diff --git a/android/app/src/main/cpp/qs_config.h b/android/app/src/main/cpp/qs_config.h index 8179466..194791e 100644 --- a/android/app/src/main/cpp/qs_config.h +++ b/android/app/src/main/cpp/qs_config.h @@ -56,14 +56,10 @@ void qs_config_request_set_resolution(int resolution_index); // menu applies a language change (see qs_config.c's qs_apply_language()). void qs_config_request_set_language(int language_index); -// Same cross-thread-dispatch reasoning as the three above - called from the -// Main Menu tab's "Reset Position" button. A pure, live "return to a sane -// view of the game quad" action (see xr_input.h's own -// xr_input_recenter_player_to_screen(), which this dispatches to) - -// unrelated to questshock.config.json despite living in this file for the -// cross-thread dispatch machinery: it never reads or writes the config -// file, and isn't a "reset to (0,0,0)" - it recenters based on the -// player's current real head pose instead. +// Same cross-thread dispatch as the three above - called from the Main Menu +// tab's "Reset Position" button. Re-anchors the player's position in front of +// the game quad (see xr_input_reset_player_position()); never reads or writes +// the config file. void qs_config_request_reset_position(void); // Same cross-thread-dispatch reasoning as the four above - called from the @@ -81,14 +77,45 @@ void qs_config_request_set_initial_screen_distance(int preset_index); void qs_config_request_set_game_screen_width(int preset_index); void qs_config_request_set_game_screen_distance(int preset_index); -// Returns true and handles the event if it's one of the ten custom events -// qs_config_request_save()/_load()/_set_renderer()/_set_resolution()/ -// _set_language()/_reset_position()/the four _set_*_screen_*() setters -// enqueue - called from pump_events() (sdl_events.c, see -// android/engine-patches/21-android-config.patch) on the engine's own -// thread, once per polled event, before its normal switch on well-known -// SDL_* event types. Returns false (no-op) for any other event type, -// including before the ten custom types have even been registered. +// Cross-thread requests from the Controller Options tab (MenuOverlay.java), +// enqueued like every request_*() above. action_index indexes +// xr_input_action_name()'s list. Begin/cancel start and stop rebind capture; +// reset restores all bindings (the built-in defaults, then +// questshock.config.default.json's player_controls group if it has one). +void qs_config_request_begin_control_capture(int action_index); +void qs_config_request_cancel_control_capture(void); +void qs_config_request_reset_player_controls(void); + +// Called from xr_input.c's xr_input_process_capture() on the engine's own +// thread, so no cross-thread dispatch is needed (as with +// qs_screen_profile_notify_loop_mode() below). Resolves +// MenuOverlay.onControlCaptureResult(int, String) for action_index (raw_name +// NULL on timeout or cancel), and again for displaced_action_index if the new +// binding took the input from another action (-1/NULL when none), so both +// rows can be updated together. +void qs_config_notify_control_capture_result(int action_index, const char *raw_name, + int displaced_action_index, + const char *displaced_raw_name); + +// Called from xr_input.c whenever the VR menu's visibility changes. Showing +// the menu pauses a running game (not the main menu, intro or cutscenes) that +// is not already paused; hiding it unpauses only if the menu did the pausing. +// Enqueued like the request_*() functions above; the pause itself runs on the +// engine's thread at pump_events() time. +void qs_config_notify_menu_visibility(bool visible); + +// Called from xr_input.c's xr_input_suggest_bindings() when the OpenXR runtime +// rejects a supported interaction profile's suggested bindings at startup. +// That is an app bug, not a config problem, so it shows +// MenuOverlay.showFatalControllerBindingError()'s non-cancelable "Exit" dialog; +// xr_input_init() aborts right after. +void qs_config_report_fatal_input_error(const char *profile_display_name); + +// Returns true and handles the event if it is one of the custom events the +// request_*()/notify functions above enqueue. Called from pump_events() +// (sdl_events.c, see android/engine-patches/21-android-config.patch) on the +// engine's thread, once per polled event. Returns false for any other event +// type, including before the custom types are registered. bool qs_config_handle_event(const SDL_Event *event); // Called directly (no event-queue dispatch - see diff --git a/android/app/src/main/cpp/questshock_native.c b/android/app/src/main/cpp/questshock_native.c index 7b79921..f7afcc3 100644 --- a/android/app/src/main/cpp/questshock_native.c +++ b/android/app/src/main/cpp/questshock_native.c @@ -11,6 +11,7 @@ #include #include "qs_config.h" +#include "xr_input.h" #include "xr_overlay.h" #include "xr_session.h" @@ -233,3 +234,39 @@ JNIEXPORT jfloat JNICALL Java_de_ladkau_questshock_MenuOverlay_nativeGetGpuUtilization(JNIEnv *env, jclass clazz) { return xr_session_get_gpu_utilization(); } + +// Controller Options tab: actionIndex follows xr_input.c's action order +// (MenuOverlay.java and Strings.java hold the matching labels). +JNIEXPORT void JNICALL +Java_de_ladkau_questshock_MenuOverlay_nativeRequestBeginControlCapture(JNIEnv *env, jclass clazz, + jint actionIndex) { + qs_config_request_begin_control_capture(actionIndex); +} + +JNIEXPORT void JNICALL +Java_de_ladkau_questshock_MenuOverlay_nativeRequestCancelControlCapture(JNIEnv *env, jclass clazz) { + qs_config_request_cancel_control_capture(); +} + +JNIEXPORT void JNICALL +Java_de_ladkau_questshock_MenuOverlay_nativeRequestResetPlayerControls(JNIEnv *env, jclass clazz) { + qs_config_request_reset_player_controls(); +} + +JNIEXPORT jstring JNICALL +Java_de_ladkau_questshock_MenuOverlay_nativeGetControlBindingKey(JNIEnv *env, jclass clazz, + jint actionIndex) { + return (*env)->NewStringUTF(env, xr_input_get_action_binding_name(actionIndex)); +} + +JNIEXPORT jstring JNICALL +Java_de_ladkau_questshock_MenuOverlay_nativeGetActiveInteractionProfilePath(JNIEnv *env, + jclass clazz) { + return (*env)->NewStringUTF(env, xr_input_get_active_interaction_profile_path()); +} + +JNIEXPORT void JNICALL +Java_de_ladkau_questshock_MenuOverlay_nativeSetControllerOptionsTabOpen(JNIEnv *env, jclass clazz, + jboolean open) { + xr_input_set_controller_options_tab_open(open == JNI_TRUE); +} diff --git a/android/app/src/main/cpp/xr_input.c b/android/app/src/main/cpp/xr_input.c index 32ffcd2..b953864 100644 --- a/android/app/src/main/cpp/xr_input.c +++ b/android/app/src/main/cpp/xr_input.c @@ -8,6 +8,7 @@ #include #include +#include "qs_config.h" #include "xr_mouse.h" #include "xr_overlay.h" #include "xr_session.h" @@ -51,27 +52,315 @@ static const float kHandColor[2][4] = { #define MENU_TITLE_BAR_V_FRACTION (56.0f / 800.0f) #define MENU_DRAG_HANDLE_U_FRACTION 1.0f +// Every physical control a supported controller profile can bind, named +// independently of OpenXR objects. The first QS_RAW_CONCRETE_COUNT entries +// are real per-frame-readable inputs (g_raw_down[]/g_raw_prev[] cover exactly +// that range). QS_RAW_TRIGGER_SYMMETRIC/QS_RAW_SQUEEZE_SYMMETRIC mean "this +// hand's own trigger/squeeze" (see xr_input_raw_state_for_hand()) and are only +// valid for mouse_click/mouse_double_click; QS_RAW_NONE is unbound. +typedef enum { + QS_RAW_LEFT_TRIGGER, + QS_RAW_RIGHT_TRIGGER, + QS_RAW_LEFT_SQUEEZE, + QS_RAW_RIGHT_SQUEEZE, + QS_RAW_LEFT_X, + QS_RAW_LEFT_Y, + QS_RAW_RIGHT_A, + QS_RAW_RIGHT_B, + QS_RAW_LEFT_THUMBSTICK_CLICK, + QS_RAW_RIGHT_THUMBSTICK_CLICK, + QS_RAW_LEFT_THUMBSTICK_UP, + QS_RAW_LEFT_THUMBSTICK_DOWN, + QS_RAW_LEFT_THUMBSTICK_LEFT, + QS_RAW_LEFT_THUMBSTICK_RIGHT, + QS_RAW_RIGHT_THUMBSTICK_UP, + QS_RAW_RIGHT_THUMBSTICK_DOWN, + QS_RAW_RIGHT_THUMBSTICK_LEFT, + QS_RAW_RIGHT_THUMBSTICK_RIGHT, + QS_RAW_CONCRETE_COUNT, + QS_RAW_TRIGGER_SYMMETRIC = QS_RAW_CONCRETE_COUNT, + QS_RAW_SQUEEZE_SYMMETRIC, + QS_RAW_NONE, + QS_RAW_COUNT +} QsRawInput; + +// Index-aligned with QsRawInput: the strings used in questshock.config.json +// and reported by capture (which only ever observes the concrete inputs). +static const char *kRawInputNames[QS_RAW_COUNT] = { + "left_trigger", "right_trigger", "left_squeeze", "right_squeeze", "left_x", "left_y", + "right_a", "right_b", "left_thumbstick_click", "right_thumbstick_click", + "left_thumbstick_up", "left_thumbstick_down", "left_thumbstick_left", "left_thumbstick_right", + "right_thumbstick_up", "right_thumbstick_down", "right_thumbstick_left", + "right_thumbstick_right", "trigger", "squeeze", "none", +}; + +// Remappable game actions: movement, click and jump, the engine's own +// keyboard hotkeys (Prefs.c's HotKeyLookup[]), and fire. The hotkey actions +// default to QS_RAW_NONE (unbound). menu_toggle is not an action; it is fixed +// (see xr_input_sync_and_draw()). +// +// HotKeyLookup[] entries not exposed: +// - cheat_*: debug cheats. +// - mac_help (disabled) and audiolog_cancel (AUDIOLOGS is not defined). +// - toggle_opengl: the same toggle as the Video Options renderer buttons. +// - the 10 numeric hw_hotkey_callback entries: they are registered as bare +// ASCII literals without KB_FLAG_DOWN, but kb_cook() always ORs that flag +// into a real keydown, so a keypress never matches them. +// - keypad 0-9: a controller button per digit is not useful; the on-screen +// keyboard covers keypad entry. +typedef enum { + QS_ACTION_MOVE_FORWARD, + QS_ACTION_MOVE_BACK, + QS_ACTION_STRAFE_LEFT, + QS_ACTION_STRAFE_RIGHT, + QS_ACTION_TURN_LEFT, + QS_ACTION_TURN_RIGHT, + QS_ACTION_JUMP, + QS_ACTION_MOUSE_CLICK, + QS_ACTION_MOUSE_DOUBLE_CLICK, + QS_ACTION_STAND, + QS_ACTION_CROUCH, + QS_ACTION_PRONE, + QS_ACTION_TOGGLE_FREELOOK, + QS_ACTION_PAUSE, + QS_ACTION_FULL_VIEW, + QS_ACTION_NORMAL_VIEW, + QS_ACTION_MAP_VIEW, + QS_ACTION_SAVE_GAME, + QS_ACTION_LOAD_GAME, + QS_ACTION_SELECT_GRENADE, + QS_ACTION_ARM_GRENADE, + QS_ACTION_SELECT_DRUG, + QS_ACTION_USE_DRUG, + QS_ACTION_TOGGLE_ONLINE_HELP, + QS_ACTION_SHOW_HELP, + QS_ACTION_TOGGLE_MUSIC, + QS_ACTION_QUIT, + QS_ACTION_CYCLE_WEAPON_NEXT, + QS_ACTION_CYCLE_WEAPON_PREV, + QS_ACTION_CYCLE_DETAIL, + QS_ACTION_RELOAD_WEAPON_PRIMARY, + QS_ACTION_RELOAD_WEAPON_SECONDARY, + QS_ACTION_HUD_COLOR, + QS_ACTION_CLEAR_FULLSCREEN, + QS_ACTION_MFD_LEFT_1, + QS_ACTION_MFD_LEFT_2, + QS_ACTION_MFD_LEFT_3, + QS_ACTION_MFD_LEFT_4, + QS_ACTION_MFD_LEFT_5, + QS_ACTION_MFD_RIGHT_1, + QS_ACTION_MFD_RIGHT_2, + QS_ACTION_MFD_RIGHT_3, + QS_ACTION_MFD_RIGHT_4, + QS_ACTION_MFD_RIGHT_5, + QS_ACTION_FIRE_WEAPON, + QS_ACTION_COUNT +} QsControlAction; + +static const char *kActionNames[QS_ACTION_COUNT] = { + "move_forward", + "move_back", + "strafe_left", + "strafe_right", + "turn_left", + "turn_right", + "jump", + "mouse_click", + "mouse_double_click", + "stand", + "crouch", + "prone", + "toggle_freelook", + "pause", + "full_view", + "normal_view", + "map_view", + "save_game", + "load_game", + "select_grenade", + "arm_grenade", + "select_drug", + "use_drug", + "toggle_online_help", + "show_help", + "toggle_music", + "quit", + "cycle_weapon_next", + "cycle_weapon_prev", + "cycle_detail", + "reload_weapon_primary", + "reload_weapon_secondary", + "hud_color", + "clear_fullscreen", + "mfd_left_1", + "mfd_left_2", + "mfd_left_3", + "mfd_left_4", + "mfd_left_5", + "mfd_right_1", + "mfd_right_2", + "mfd_right_3", + "mfd_right_4", + "mfd_right_5", + "fire_weapon", +}; + +// Current bindings; xr_input.c owns them (qs_config.c applies parsed config via +// xr_input_set_action_binding() and reads them back for Save). Defaults: left +// stick moves (up/down) and strafes (left/right), its click jumps; right stick +// turns (left/right) and stands/goes prone (up/down), its click toggles free +// look; right A/B click/double-click; right trigger fires. Everything else is +// QS_RAW_NONE. +static QsRawInput s_binding[QS_ACTION_COUNT] = { + QS_RAW_LEFT_THUMBSTICK_UP, // move_forward + QS_RAW_LEFT_THUMBSTICK_DOWN, // move_back + QS_RAW_LEFT_THUMBSTICK_LEFT, // strafe_left + QS_RAW_LEFT_THUMBSTICK_RIGHT, // strafe_right + QS_RAW_RIGHT_THUMBSTICK_LEFT, // turn_left + QS_RAW_RIGHT_THUMBSTICK_RIGHT, // turn_right + QS_RAW_LEFT_THUMBSTICK_CLICK, // jump + QS_RAW_RIGHT_A, // mouse_click + QS_RAW_RIGHT_B, // mouse_double_click + QS_RAW_RIGHT_THUMBSTICK_UP, // stand + QS_RAW_NONE, // crouch + QS_RAW_RIGHT_THUMBSTICK_DOWN, // prone + QS_RAW_RIGHT_THUMBSTICK_CLICK, // toggle_freelook + QS_RAW_NONE, // pause + QS_RAW_NONE, // full_view + QS_RAW_NONE, // normal_view + QS_RAW_NONE, // map_view + QS_RAW_NONE, // save_game + QS_RAW_NONE, // load_game + QS_RAW_NONE, // select_grenade + QS_RAW_NONE, // arm_grenade + QS_RAW_NONE, // select_drug + QS_RAW_NONE, // use_drug + QS_RAW_NONE, // toggle_online_help + QS_RAW_NONE, // show_help + QS_RAW_NONE, // toggle_music + QS_RAW_NONE, // quit + QS_RAW_NONE, // cycle_weapon_next + QS_RAW_NONE, // cycle_weapon_prev + QS_RAW_NONE, // cycle_detail + QS_RAW_NONE, // reload_weapon_primary + QS_RAW_NONE, // reload_weapon_secondary + QS_RAW_NONE, // hud_color + QS_RAW_NONE, // clear_fullscreen + QS_RAW_NONE, // mfd_left_1 + QS_RAW_NONE, // mfd_left_2 + QS_RAW_NONE, // mfd_left_3 + QS_RAW_NONE, // mfd_left_4 + QS_RAW_NONE, // mfd_left_5 + QS_RAW_NONE, // mfd_right_1 + QS_RAW_NONE, // mfd_right_2 + QS_RAW_NONE, // mfd_right_3 + QS_RAW_NONE, // mfd_right_4 + QS_RAW_NONE, // mfd_right_5 + QS_RAW_RIGHT_TRIGGER, // fire_weapon +}; + +// One entry per key-injecting action. A plain, unmodified, printable key +// (needsTextInput, textChar) is sent as SDL_TEXTINPUT plus SDL_KEYDOWN/UP: +// sdl_events.c only registers such a key from its TEXTINPUT event. Every other +// entry (modifier held, or a control-range/F-key) is plain SDL_KEYDOWN/UP, with +// mod carrying the KMOD_ALT/CTRL/SHIFT the hotkey needs (see Prefs.c's +// HotKeyLookup[] DOWN()/SHIFT()/CTRL()/ALT() macros). +typedef struct { + QsControlAction action; + SDL_Scancode scancode; + SDL_Keycode keycode; + Uint16 mod; + bool needsTextInput; + char textChar; // only meaningful when needsTextInput is true +} QsKeyAction; + +static const QsKeyAction kKeyActions[] = { + {QS_ACTION_MOVE_FORWARD, SDL_SCANCODE_UP, SDLK_UP, KMOD_NONE, false, 0}, + {QS_ACTION_MOVE_BACK, SDL_SCANCODE_DOWN, SDLK_DOWN, KMOD_NONE, false, 0}, + {QS_ACTION_STRAFE_LEFT, SDL_SCANCODE_LEFT, SDLK_LEFT, KMOD_ALT, false, 0}, + {QS_ACTION_STRAFE_RIGHT, SDL_SCANCODE_RIGHT, SDLK_RIGHT, KMOD_ALT, false, 0}, + {QS_ACTION_TURN_LEFT, SDL_SCANCODE_LEFT, SDLK_LEFT, KMOD_NONE, false, 0}, + {QS_ACTION_TURN_RIGHT, SDL_SCANCODE_RIGHT, SDLK_RIGHT, KMOD_NONE, false, 0}, + {QS_ACTION_JUMP, SDL_SCANCODE_SPACE, SDLK_SPACE, KMOD_NONE, true, ' '}, + // "stand"/"crouch"/"prone"/"toggle_freelook"/"pause" - DOWN('t'/'g'/'b'/'f'/'p'). + {QS_ACTION_STAND, SDL_SCANCODE_T, SDLK_t, KMOD_NONE, true, 't'}, + {QS_ACTION_CROUCH, SDL_SCANCODE_G, SDLK_g, KMOD_NONE, true, 'g'}, + {QS_ACTION_PRONE, SDL_SCANCODE_B, SDLK_b, KMOD_NONE, true, 'b'}, + {QS_ACTION_TOGGLE_FREELOOK, SDL_SCANCODE_F, SDLK_f, KMOD_NONE, true, 'f'}, + {QS_ACTION_PAUSE, SDL_SCANCODE_P, SDLK_p, KMOD_NONE, true, 'p'}, + // "full_view"/"normal_view"/"map_view" - CTRL('f'/'d'/'a') - jump + // straight to the fullscreen/game/automap loop mode. + {QS_ACTION_FULL_VIEW, SDL_SCANCODE_F, SDLK_f, KMOD_CTRL, false, 0}, + {QS_ACTION_NORMAL_VIEW, SDL_SCANCODE_D, SDLK_d, KMOD_CTRL, false, 0}, + {QS_ACTION_MAP_VIEW, SDL_SCANCODE_A, SDLK_a, KMOD_CTRL, false, 0}, + // "save_game"/"load_game" - CTRL('s'/'l'). + {QS_ACTION_SAVE_GAME, SDL_SCANCODE_S, SDLK_s, KMOD_CTRL, false, 0}, + {QS_ACTION_LOAD_GAME, SDL_SCANCODE_L, SDLK_l, KMOD_CTRL, false, 0}, + // "select_grenade"/"select_drug" - CTRL('\'' / ';'). + {QS_ACTION_SELECT_GRENADE, SDL_SCANCODE_APOSTROPHE, SDLK_QUOTE, KMOD_CTRL, false, 0}, + // "arm_grenade"/"use_drug" - ALT('\'' / ';'). + {QS_ACTION_ARM_GRENADE, SDL_SCANCODE_APOSTROPHE, SDLK_QUOTE, KMOD_ALT, false, 0}, + {QS_ACTION_SELECT_DRUG, SDL_SCANCODE_SEMICOLON, SDLK_SEMICOLON, KMOD_CTRL, false, 0}, + {QS_ACTION_USE_DRUG, SDL_SCANCODE_SEMICOLON, SDLK_SEMICOLON, KMOD_ALT, false, 0}, + // "toggle_olh"/"showhelp" - CTRL('h') / ALT('o'). + {QS_ACTION_TOGGLE_ONLINE_HELP, SDL_SCANCODE_H, SDLK_h, KMOD_CTRL, false, 0}, + {QS_ACTION_SHOW_HELP, SDL_SCANCODE_O, SDLK_o, KMOD_ALT, false, 0}, + // "toggle_music"/"quit" - CTRL('m'/'q'). + {QS_ACTION_TOGGLE_MUSIC, SDL_SCANCODE_M, SDLK_m, KMOD_CTRL, false, 0}, + {QS_ACTION_QUIT, SDL_SCANCODE_Q, SDLK_q, KMOD_CTRL, false, 0}, + // "cycle_weapons 1"/"cycle_weapons -1" - Tab / Shift+Tab. + {QS_ACTION_CYCLE_WEAPON_NEXT, SDL_SCANCODE_TAB, SDLK_TAB, KMOD_NONE, false, 0}, + {QS_ACTION_CYCLE_WEAPON_PREV, SDL_SCANCODE_TAB, SDLK_TAB, KMOD_SHIFT, false, 0}, + // "cycle_detail" - CTRL('1'). + {QS_ACTION_CYCLE_DETAIL, SDL_SCANCODE_1, SDLK_1, KMOD_CTRL, false, 0}, + // "reload_weapon 1"/"reload_weapon 0" - CTRL(Backspace) / ALT(Backspace). + {QS_ACTION_RELOAD_WEAPON_PRIMARY, SDL_SCANCODE_BACKSPACE, SDLK_BACKSPACE, KMOD_CTRL, false, 0}, + {QS_ACTION_RELOAD_WEAPON_SECONDARY, SDL_SCANCODE_BACKSPACE, SDLK_BACKSPACE, KMOD_ALT, false, 0}, + // "hud_color" - ALT('h'). + {QS_ACTION_HUD_COLOR, SDL_SCANCODE_H, SDLK_h, KMOD_ALT, false, 0}, + // "clear_fullscreen" - DOWN(Backspace), no modifier. + {QS_ACTION_CLEAR_FULLSCREEN, SDL_SCANCODE_BACKSPACE, SDLK_BACKSPACE, KMOD_NONE, false, 0}, + // "mfd left/right N" - F1-F5 / F6-F10. + {QS_ACTION_MFD_LEFT_1, SDL_SCANCODE_F1, SDLK_F1, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_LEFT_2, SDL_SCANCODE_F2, SDLK_F2, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_LEFT_3, SDL_SCANCODE_F3, SDLK_F3, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_LEFT_4, SDL_SCANCODE_F4, SDLK_F4, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_LEFT_5, SDL_SCANCODE_F5, SDLK_F5, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_RIGHT_1, SDL_SCANCODE_F6, SDLK_F6, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_RIGHT_2, SDL_SCANCODE_F7, SDLK_F7, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_RIGHT_3, SDL_SCANCODE_F8, SDLK_F8, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_RIGHT_4, SDL_SCANCODE_F9, SDLK_F9, KMOD_NONE, false, 0}, + {QS_ACTION_MFD_RIGHT_5, SDL_SCANCODE_F10, SDLK_F10, KMOD_NONE, false, 0}, + // "fire_weapon" - the engine's FireKeys default (Prefs.c; input.c's + // view3d_key_handler()): Enter fires the readied weapon at the cursor and + // re-arms on release. Clicking in the 3D view (mouse_click) also fires. + {QS_ACTION_FIRE_WEAPON, SDL_SCANCODE_RETURN, SDLK_RETURN, KMOD_NONE, false, 0}, +}; +#define QS_NUM_KEY_ACTIONS (sizeof(kKeyActions) / sizeof(kKeyActions[0])) + static XrInstance g_instance = XR_NULL_HANDLE; static XrSession g_session = XR_NULL_HANDLE; static XrActionSet g_action_set = XR_NULL_HANDLE; static XrAction g_aim_pose_action = XR_NULL_HANDLE; +// Fixed for menu/keyboard-overlay clicks (see xr_input_sync_and_draw()); also +// backs QS_RAW_{LEFT,RIGHT}_TRIGGER's per-frame state. static XrAction g_select_click_action = XR_NULL_HANDLE; static XrAction g_menu_toggle_action = XR_NULL_HANDLE; -// WORKAROUND - the on-screen keyboard overlay is currently unusable, -// which blocks dismissing the "press Space to continue" tutorial screen -// shown right after starting a new game. This lets the right controller's -// A button send Space straight into the engine, bypassing the broken -// keyboard entirely. Remove once the keyboard overlay works. -static XrAction g_space_key_action = XR_NULL_HANDLE; -// Right controller's B button -> forward movement (Up arrow, one of the -// engine's default M_FORWARD keybinds per MacSrc/Prefs.c). Unlike Space, -// Up arrow is non-printable so a plain SDL_KEYDOWN/KEYUP is enough - no -// SDL_TEXTINPUT needed (see the space_key injection below for why that -// matters). -static XrAction g_forward_key_action = XR_NULL_HANDLE; +// Right controller's A button / left's X (Vive has neither); see +// QS_RAW_RIGHT_A/QS_RAW_LEFT_X. +static XrAction g_a_click_action = XR_NULL_HANDLE; +static XrAction g_b_click_action = XR_NULL_HANDLE; +static XrAction g_x_click_action = XR_NULL_HANDLE; +static XrAction g_y_click_action = XR_NULL_HANDLE; +static XrAction g_squeeze_action = XR_NULL_HANDLE; +static XrAction g_thumbstick_click_action = XR_NULL_HANDLE; // Player locomotion while the menu is open (see xr_session.h's // xr_session_set_player_transform()) - left stick snap-turns, right stick // smooth-moves, both read from the same Vector2f action via subactionPath. +// Also the backing action for QS_RAW_*_THUMBSTICK_{UP,DOWN,LEFT,RIGHT}'s +// digitization (see g_stick_digital below) - bound to the Vive profile's +// trackpad component instead of a thumbstick, since it's the same "2D +// directional input" shape either way. static XrAction g_thumbstick_action = XR_NULL_HANDLE; static XrPath g_hand_path[2]; static XrSpace g_aim_space[2] = {XR_NULL_HANDLE, XR_NULL_HANDLE}; @@ -82,9 +371,55 @@ static XrSpace g_aim_space[2] = {XR_NULL_HANDLE, XR_NULL_HANDLE}; // frame" independently, since the menu and keyboard overlays can now both // be visible at once. static bool g_prev_select[2] = {false, false}; +static bool g_prev_double_click[2] = {false, false}; static bool g_prev_menu = false; -static bool g_prev_space_key = false; -static bool g_prev_forward_key = false; +// One prior-down flag per kKeyActions[] entry. +static bool g_key_action_prev[QS_NUM_KEY_ACTIONS]; + +// Per-frame state for every raw input QS_RAW_CONCRETE_COUNT covers - +// computed once per frame (xr_input_update_raw_states(), unconditionally, +// regardless of menuVisible) and consumed by capture mode, the key-action +// dispatch loop, and mouse_click/mouse_double_click's resolution. Indices +// QS_RAW_TRIGGER_SYMMETRIC/QS_RAW_SQUEEZE_SYMMETRIC/QS_RAW_NONE are never +// written here - see xr_input_raw_state_for_hand() for how those resolve +// instead. +static bool g_raw_down[QS_RAW_COUNT]; +static bool g_raw_prev[QS_RAW_COUNT]; + +// Per-hand thumbstick digitization hysteresis (see xr_input_digitize_stick()), +// independent per direction so a diagonal deflection can hold two directions; +// separate from g_turn_ready below, which belongs to the menu's snap turn. +typedef struct { + bool up, down, left, right; +} XrStickDigital; +static XrStickDigital g_stick_digital[2]; + +// Rebind capture state (see xr_input_capture_begin()/qs_config.c's own +// comment on the cross-thread request that calls it) - g_capture_action is +// only meaningful while g_capture_active is true. +static bool g_capture_active = false; +// Last menuVisible value reported to qs_config_notify_menu_visibility() - +// that's how a change (however the menu got shown/hidden) is noticed. +static bool g_menu_was_visible = false; +// Set from MenuOverlay.java's UI thread (a single-byte flag - no need for +// the cross-thread event dispatch the multi-step requests use) whenever the +// Controller Options tab becomes/stops being the menu's current tab. While +// it's true, the menu's own thumbstick locomotion (snap turn/smooth move, +// see xr_input_sync_and_draw()) is disabled: pressing sticks there to test +// or rebind a control shouldn't also shift the player away from the +// virtual screen. +static volatile bool g_controller_options_tab_open = false; +static QsControlAction g_capture_action; +static Uint32 g_capture_start_ticks = 0; +#define QS_CAPTURE_TIMEOUT_MS 8000 + +// Refreshed once per frame (see xr_input_sync_and_draw()) via +// xrGetCurrentInteractionProfile()/xrPathToString() - which controller +// profile (Touch/Vive/generic) is actually bound right now, read by +// MenuOverlay.java's Controller Options tab to pick a matching profile +// file from controller_profiles/ (see CONFIG.md). Empty string until the +// first successful query. +static char g_active_profile_path[256] = ""; // Snap-turn hysteresis - true when the left stick has returned near center // since the last turn it triggered, i.e. it's "armed" to trigger another // one; false from the moment a turn triggers until the stick re-centers, @@ -240,6 +575,377 @@ static void mat3_to_quat(const float x[3], const float y[3], const float z[3], X } } +// =========================================================================== +// Remappable controls: raw-input naming, per-frame state, capture mode +// =========================================================================== + +// Bounds-checked - always returns a valid string ("none" for an +// out-of-range value, which shouldn't happen but is cheap to guard). +static const char *xr_input_raw_input_name(QsRawInput raw) { + if (raw < 0 || raw >= QS_RAW_COUNT) + return kRawInputNames[QS_RAW_NONE]; + return kRawInputNames[raw]; +} + +// Returns false (leaves *out untouched) if `name` isn't one of +// kRawInputNames[]'s exact strings - the caller (qs_config.c's +// qs_apply_player_controls()) treats that as an invalid config value, same +// WARN+skip handling as an invalid renderer/resolution string. +static bool xr_input_raw_input_from_name(const char *name, QsRawInput *out) { + for (int i = 0; i < QS_RAW_COUNT; i++) { + if (strcmp(name, kRawInputNames[i]) == 0) { + *out = (QsRawInput)i; + return true; + } + } + return false; +} + +// LEFT/RIGHT for any of the first QS_RAW_CONCRETE_COUNT values (every one +// of those names is already hand-qualified) - never called for the +// symmetric/none pseudo-values, which have no single hand. +static int xr_input_raw_input_hand(QsRawInput raw) { + switch (raw) { + case QS_RAW_LEFT_TRIGGER: + case QS_RAW_LEFT_SQUEEZE: + case QS_RAW_LEFT_X: + case QS_RAW_LEFT_Y: + case QS_RAW_LEFT_THUMBSTICK_CLICK: + case QS_RAW_LEFT_THUMBSTICK_UP: + case QS_RAW_LEFT_THUMBSTICK_DOWN: + case QS_RAW_LEFT_THUMBSTICK_LEFT: + case QS_RAW_LEFT_THUMBSTICK_RIGHT: + return LEFT; + default: + return RIGHT; + } +} + +// Resolves what a bound raw input means for one specific hand's ray this +// frame - the one place symmetric bindings ("trigger"/"squeeze") and +// per-hand exclusivity (a concrete binding only ever fires for its own +// hand) both get handled, shared by mouse_click/mouse_double_click's +// resolution in the per-hand loop below. +static bool xr_input_raw_state_for_hand(QsRawInput raw, int hand) { + if (raw == QS_RAW_NONE) + return false; + if (raw == QS_RAW_TRIGGER_SYMMETRIC) + return g_raw_down[hand == LEFT ? QS_RAW_LEFT_TRIGGER : QS_RAW_RIGHT_TRIGGER]; + if (raw == QS_RAW_SQUEEZE_SYMMETRIC) + return g_raw_down[hand == LEFT ? QS_RAW_LEFT_SQUEEZE : QS_RAW_RIGHT_SQUEEZE]; + if (xr_input_raw_input_hand(raw) != hand) + return false; + return g_raw_down[raw]; +} + +// True while `action` shouldn't fire its own effect this frame because +// it's the very action currently being captured (see xr_input_capture_begin()) +// - e.g. capturing "jump" shouldn't also make the avatar jump. +static bool xr_input_action_suppressed_by_capture(QsControlAction action) { + return g_capture_active && g_capture_action == action; +} + +static bool xr_input_bool_state(XrAction action, int hand) { + if (action == XR_NULL_HANDLE) + return false; + XrActionStateGetInfo info = {XR_TYPE_ACTION_STATE_GET_INFO}; + info.action = action; + info.subactionPath = g_hand_path[hand]; + XrActionStateBoolean state = {XR_TYPE_ACTION_STATE_BOOLEAN}; + xrGetActionStateBoolean(g_session, &info, &state); + return state.isActive && state.currentState; +} + +// Digitizes one hand's thumbstick/trackpad Vector2f into 4 independent +// directions with hysteresis (engage past kEngage, release back below +// kRelease) - same engage/release reasoning as the existing menu-only +// snap-turn's own hysteresis latch (g_turn_ready), just applied +// per-direction here so a diagonal deflection can hold two directions at +// once. y>0 is "away from the player" (forward), matching the existing +// smooth-move code's own convention for the same Vector2f action. +static void xr_input_digitize_stick(XrStickDigital *state, bool active, float x, float y) { + const float kEngage = 0.5f; + const float kRelease = 0.3f; + if (!active) { + state->up = state->down = state->left = state->right = false; + return; + } + if (state->up) { + if (y < kRelease) + state->up = false; + } else if (y > kEngage) { + state->up = true; + } + if (state->down) { + if (-y < kRelease) + state->down = false; + } else if (-y > kEngage) { + state->down = true; + } + if (state->left) { + if (-x < kRelease) + state->left = false; + } else if (-x > kEngage) { + state->left = true; + } + if (state->right) { + if (x < kRelease) + state->right = false; + } else if (x > kEngage) { + state->right = true; + } +} + +// Fills g_raw_down[] for every one of the first QS_RAW_CONCRETE_COUNT raw +// inputs - called once per frame, unconditionally (regardless of +// menuVisible), before capture mode's scan and the key-action dispatch +// loop both read it. g_select_click_action doubles as the source for +// QS_RAW_*_TRIGGER (see its own declaration comment) - already synced by +// xrSyncActions() before this runs, same as every other action here. +static void xr_input_update_raw_states(void) { + g_raw_down[QS_RAW_LEFT_TRIGGER] = xr_input_bool_state(g_select_click_action, LEFT); + g_raw_down[QS_RAW_RIGHT_TRIGGER] = xr_input_bool_state(g_select_click_action, RIGHT); + g_raw_down[QS_RAW_LEFT_SQUEEZE] = xr_input_bool_state(g_squeeze_action, LEFT); + g_raw_down[QS_RAW_RIGHT_SQUEEZE] = xr_input_bool_state(g_squeeze_action, RIGHT); + g_raw_down[QS_RAW_LEFT_X] = xr_input_bool_state(g_x_click_action, LEFT); + g_raw_down[QS_RAW_LEFT_Y] = xr_input_bool_state(g_y_click_action, LEFT); + g_raw_down[QS_RAW_RIGHT_A] = xr_input_bool_state(g_a_click_action, RIGHT); + g_raw_down[QS_RAW_RIGHT_B] = xr_input_bool_state(g_b_click_action, RIGHT); + g_raw_down[QS_RAW_LEFT_THUMBSTICK_CLICK] = xr_input_bool_state(g_thumbstick_click_action, LEFT); + g_raw_down[QS_RAW_RIGHT_THUMBSTICK_CLICK] = + xr_input_bool_state(g_thumbstick_click_action, RIGHT); + + for (int hand = 0; hand < 2; hand++) { + XrActionStateGetInfo info = {XR_TYPE_ACTION_STATE_GET_INFO}; + info.action = g_thumbstick_action; + info.subactionPath = g_hand_path[hand]; + XrActionStateVector2f state = {XR_TYPE_ACTION_STATE_VECTOR2F}; + xrGetActionStateVector2f(g_session, &info, &state); + xr_input_digitize_stick(&g_stick_digital[hand], state.isActive, state.currentState.x, + state.currentState.y); + } + g_raw_down[QS_RAW_LEFT_THUMBSTICK_UP] = g_stick_digital[LEFT].up; + g_raw_down[QS_RAW_LEFT_THUMBSTICK_DOWN] = g_stick_digital[LEFT].down; + g_raw_down[QS_RAW_LEFT_THUMBSTICK_LEFT] = g_stick_digital[LEFT].left; + g_raw_down[QS_RAW_LEFT_THUMBSTICK_RIGHT] = g_stick_digital[LEFT].right; + g_raw_down[QS_RAW_RIGHT_THUMBSTICK_UP] = g_stick_digital[RIGHT].up; + g_raw_down[QS_RAW_RIGHT_THUMBSTICK_DOWN] = g_stick_digital[RIGHT].down; + g_raw_down[QS_RAW_RIGHT_THUMBSTICK_LEFT] = g_stick_digital[RIGHT].left; + g_raw_down[QS_RAW_RIGHT_THUMBSTICK_RIGHT] = g_stick_digital[RIGHT].right; +} + +// True for the 8 thumbstick-direction identifiers specifically - see +// xr_input_sync_and_draw()'s own comment on why a movement action bound to +// one of these is suppressed while the menu is open (the same physical +// stick already drives VR-position calibration in that state). +static bool xr_input_raw_is_thumbstick_direction(QsRawInput raw) { + return raw >= QS_RAW_LEFT_THUMBSTICK_UP && raw <= QS_RAW_RIGHT_THUMBSTICK_RIGHT; +} + +void xr_input_capture_begin(int action_index) { + if (action_index < 0 || action_index >= QS_ACTION_COUNT) + return; + g_capture_active = true; + g_capture_action = (QsControlAction)action_index; + g_capture_start_ticks = SDL_GetTicks(); +} + +void xr_input_capture_cancel(void) { g_capture_active = false; } + +void xr_input_reset_player_controls(void) { + // Mirrors s_binding[]'s own static initializer exactly (see its own + // comment) - the hotkey actions all default to unbound. + static const QsRawInput kDefaults[QS_ACTION_COUNT] = { + QS_RAW_LEFT_THUMBSTICK_UP, // move_forward + QS_RAW_LEFT_THUMBSTICK_DOWN, // move_back + QS_RAW_LEFT_THUMBSTICK_LEFT, // strafe_left + QS_RAW_LEFT_THUMBSTICK_RIGHT, // strafe_right + QS_RAW_RIGHT_THUMBSTICK_LEFT, // turn_left + QS_RAW_RIGHT_THUMBSTICK_RIGHT, // turn_right + QS_RAW_LEFT_THUMBSTICK_CLICK, // jump + QS_RAW_RIGHT_A, // mouse_click + QS_RAW_RIGHT_B, // mouse_double_click + QS_RAW_RIGHT_THUMBSTICK_UP, // stand + QS_RAW_NONE, // crouch + QS_RAW_RIGHT_THUMBSTICK_DOWN, // prone + QS_RAW_RIGHT_THUMBSTICK_CLICK, // toggle_freelook + QS_RAW_NONE, // pause + QS_RAW_NONE, // full_view + QS_RAW_NONE, // normal_view + QS_RAW_NONE, // map_view + QS_RAW_NONE, // save_game + QS_RAW_NONE, // load_game + QS_RAW_NONE, // select_grenade + QS_RAW_NONE, // arm_grenade + QS_RAW_NONE, // select_drug + QS_RAW_NONE, // use_drug + QS_RAW_NONE, // toggle_online_help + QS_RAW_NONE, // show_help + QS_RAW_NONE, // toggle_music + QS_RAW_NONE, // quit + QS_RAW_NONE, // cycle_weapon_next + QS_RAW_NONE, // cycle_weapon_prev + QS_RAW_NONE, // cycle_detail + QS_RAW_NONE, // reload_weapon_primary + QS_RAW_NONE, // reload_weapon_secondary + QS_RAW_NONE, // hud_color + QS_RAW_NONE, // clear_fullscreen + QS_RAW_NONE, // mfd_left_1 + QS_RAW_NONE, // mfd_left_2 + QS_RAW_NONE, // mfd_left_3 + QS_RAW_NONE, // mfd_left_4 + QS_RAW_NONE, // mfd_left_5 + QS_RAW_NONE, // mfd_right_1 + QS_RAW_NONE, // mfd_right_2 + QS_RAW_NONE, // mfd_right_3 + QS_RAW_NONE, // mfd_right_4 + QS_RAW_NONE, // mfd_right_5 + QS_RAW_RIGHT_TRIGGER, // fire_weapon + }; + memcpy(s_binding, kDefaults, sizeof(s_binding)); + g_capture_active = false; +} + +int xr_input_get_action_binding(int action_index) { + if (action_index < 0 || action_index >= QS_ACTION_COUNT) + return QS_RAW_NONE; + return (int)s_binding[action_index]; +} + +bool xr_input_set_action_binding(int action_index, const char *raw_name) { + if (action_index < 0 || action_index >= QS_ACTION_COUNT) + return false; + QsRawInput raw; + if (!xr_input_raw_input_from_name(raw_name, &raw)) + return false; + // Only mouse_click/mouse_double_click may use the symmetric forms - + // see QsRawInput's own comment. + if ((raw == QS_RAW_TRIGGER_SYMMETRIC || raw == QS_RAW_SQUEEZE_SYMMETRIC) && + action_index != QS_ACTION_MOUSE_CLICK && action_index != QS_ACTION_MOUSE_DOUBLE_CLICK) + return false; + s_binding[action_index] = raw; + return true; +} + +const char *xr_input_get_action_binding_name(int action_index) { + return xr_input_raw_input_name((QsRawInput)xr_input_get_action_binding(action_index)); +} + +// True if an action holding `binding` would still fire from a press of +// `matched`: the same concrete input, or a symmetric "trigger"/"squeeze" +// binding when `matched` is that hand's trigger/squeeze. +static bool xr_input_binding_conflicts(QsRawInput binding, QsRawInput matched) { + if (binding == matched) + return true; + if (binding == QS_RAW_TRIGGER_SYMMETRIC) + return matched == QS_RAW_LEFT_TRIGGER || matched == QS_RAW_RIGHT_TRIGGER; + if (binding == QS_RAW_SQUEEZE_SYMMETRIC) + return matched == QS_RAW_LEFT_SQUEEZE || matched == QS_RAW_RIGHT_SQUEEZE; + return false; +} + +// Scans for a fresh down-edge among the QS_RAW_CONCRETE_COUNT raw inputs +// while a capture is active - called once per frame, right after +// xr_input_update_raw_states() and before the key-action dispatch loop, so +// a same-frame press isn't also consumed as this action's normal effect +// (see xr_input_action_suppressed_by_capture() for the other half of that +// guarantee). On a match, enforces exclusivity (at most one action may +// respond to a given raw input - see xr_input_binding_conflicts() above) +// by clearing any other action that would otherwise still fire from it, +// then reports both results in one call. +static void xr_input_process_capture(void) { + if (!g_capture_active) + return; + if (SDL_GetTicks() - g_capture_start_ticks > QS_CAPTURE_TIMEOUT_MS) { + g_capture_active = false; + qs_config_notify_control_capture_result((int)g_capture_action, NULL, -1, NULL); + return; + } + for (int i = 0; i < QS_RAW_CONCRETE_COUNT; i++) { + if (!(g_raw_down[i] && !g_raw_prev[i])) + continue; + QsRawInput matched = (QsRawInput)i; + int displacedAction = -1; + for (int a = 0; a < QS_ACTION_COUNT; a++) { + if (a != (int)g_capture_action && xr_input_binding_conflicts(s_binding[a], matched)) { + s_binding[a] = QS_RAW_NONE; + displacedAction = a; + break; // exclusivity guarantees at most one prior holder + } + } + s_binding[g_capture_action] = matched; + g_capture_active = false; + qs_config_notify_control_capture_result( + (int)g_capture_action, xr_input_raw_input_name(matched), displacedAction, + displacedAction >= 0 ? xr_input_raw_input_name(QS_RAW_NONE) : NULL); + return; + } +} + +int xr_input_action_count(void) { return QS_ACTION_COUNT; } + +// Bounds-checked, same convention as xr_input_raw_input_name() - "" for an +// out-of-range index. +const char *xr_input_action_name(int action_index) { + if (action_index < 0 || action_index >= QS_ACTION_COUNT) + return ""; + return kActionNames[action_index]; +} + +bool xr_input_action_index_from_name(const char *name, int *out_index) { + for (int i = 0; i < QS_ACTION_COUNT; i++) { + if (strcmp(name, kActionNames[i]) == 0) { + *out_index = i; + return true; + } + } + return false; +} + +const char *xr_input_get_active_interaction_profile_path(void) { return g_active_profile_path; } + +void xr_input_set_controller_options_tab_open(bool open) { g_controller_options_tab_open = open; } + +// Shared boilerplate for every boolean action below - aim_pose (Pose) and +// thumbstick (Vector2f) stay special-cased since they're a different +// XrActionType. +static bool xr_input_create_bool_action(const char *name, const char *localized, + uint32_t subaction_count, const XrPath *subaction_paths, + XrAction *out) { + XrActionCreateInfo info = {XR_TYPE_ACTION_CREATE_INFO}; + strncpy(info.actionName, name, XR_MAX_ACTION_NAME_SIZE - 1); + strncpy(info.localizedActionName, localized, XR_MAX_LOCALIZED_ACTION_NAME_SIZE - 1); + info.actionType = XR_ACTION_TYPE_BOOLEAN_INPUT; + info.countSubactionPaths = subaction_count; + info.subactionPaths = subaction_paths; + char what[64]; + snprintf(what, sizeof(what), "xrCreateAction(%s)", name); + return xr_check(xrCreateAction(g_action_set, &info, out), what); +} + +// Suggests one interaction profile's bindings and, on failure, reports the +// fatal-startup error (see qs_config_report_fatal_input_error()'s own +// comment) - a wrong/nonexistent path anywhere in `bindings` fails this +// entire call, not just that one entry, so this is the one place that +// matters for every profile. +static bool xr_input_suggest_bindings(XrInstance instance, const char *profile_path, + const char *profile_display_name, + const XrActionSuggestedBinding *bindings, uint32_t count) { + XrPath profilePath; + xrStringToPath(instance, profile_path, &profilePath); + XrInteractionProfileSuggestedBinding suggested = {XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING}; + suggested.interactionProfile = profilePath; + suggested.countSuggestedBindings = count; + suggested.suggestedBindings = bindings; + char what[96]; + snprintf(what, sizeof(what), "xrSuggestInteractionProfileBindings(%s)", profile_display_name); + if (!xr_check(xrSuggestInteractionProfileBindings(instance, &suggested), what)) { + qs_config_report_fatal_input_error(profile_display_name); + return false; + } + return true; +} + bool xr_input_init(XrInstance instance, XrSession session, int64_t swapchain_format) { g_instance = instance; g_session = session; @@ -264,51 +970,33 @@ bool xr_input_init(XrInstance instance, XrSession session, int64_t swapchain_for "xrCreateAction(aim_pose)")) return false; - XrActionCreateInfo selectInfo = {XR_TYPE_ACTION_CREATE_INFO}; - strncpy(selectInfo.actionName, "select_click", XR_MAX_ACTION_NAME_SIZE - 1); - strncpy(selectInfo.localizedActionName, "Select", XR_MAX_LOCALIZED_ACTION_NAME_SIZE - 1); - selectInfo.actionType = XR_ACTION_TYPE_BOOLEAN_INPUT; - selectInfo.countSubactionPaths = 2; - selectInfo.subactionPaths = g_hand_path; - if (!xr_check(xrCreateAction(g_action_set, &selectInfo, &g_select_click_action), - "xrCreateAction(select_click)")) + if (!xr_input_create_bool_action("select_click", "Select", 2, g_hand_path, + &g_select_click_action)) return false; - - // The touch_controller profile's "menu" component (the three-line - // hamburger icon) only exists on the left controller - there's no - // right-hand equivalent. - XrActionCreateInfo menuInfo = {XR_TYPE_ACTION_CREATE_INFO}; - strncpy(menuInfo.actionName, "menu_toggle", XR_MAX_ACTION_NAME_SIZE - 1); - strncpy(menuInfo.localizedActionName, "Menu Toggle", XR_MAX_LOCALIZED_ACTION_NAME_SIZE - 1); - menuInfo.actionType = XR_ACTION_TYPE_BOOLEAN_INPUT; - menuInfo.countSubactionPaths = 1; - menuInfo.subactionPaths = &g_hand_path[LEFT]; - if (!xr_check(xrCreateAction(g_action_set, &menuInfo, &g_menu_toggle_action), - "xrCreateAction(menu_toggle)")) + // The touch_controller/vive_controller/simple_controller profiles' + // "menu" component only exists on the left controller (by hardware, on + // Touch) or is only ever suggested there anyway (Vive, simple - see + // this function's own per-profile binding arrays below) - there's no + // right-hand equivalent suggested for any of them. + if (!xr_input_create_bool_action("menu_toggle", "Menu Toggle", 1, &g_hand_path[LEFT], + &g_menu_toggle_action)) return false; - - // WORKAROUND - right controller's A button, see comment on - // g_space_key_action's declaration above. - XrActionCreateInfo spaceKeyInfo = {XR_TYPE_ACTION_CREATE_INFO}; - strncpy(spaceKeyInfo.actionName, "space_key", XR_MAX_ACTION_NAME_SIZE - 1); - strncpy(spaceKeyInfo.localizedActionName, "Space Key", XR_MAX_LOCALIZED_ACTION_NAME_SIZE - 1); - spaceKeyInfo.actionType = XR_ACTION_TYPE_BOOLEAN_INPUT; - spaceKeyInfo.countSubactionPaths = 1; - spaceKeyInfo.subactionPaths = &g_hand_path[RIGHT]; - if (!xr_check(xrCreateAction(g_action_set, &spaceKeyInfo, &g_space_key_action), - "xrCreateAction(space_key)")) + if (!xr_input_create_bool_action("a_click", "A Button", 1, &g_hand_path[RIGHT], + &g_a_click_action)) return false; - - // Right controller's B button, see comment on g_forward_key_action's - // declaration above. - XrActionCreateInfo forwardKeyInfo = {XR_TYPE_ACTION_CREATE_INFO}; - strncpy(forwardKeyInfo.actionName, "forward_key", XR_MAX_ACTION_NAME_SIZE - 1); - strncpy(forwardKeyInfo.localizedActionName, "Forward Key", XR_MAX_LOCALIZED_ACTION_NAME_SIZE - 1); - forwardKeyInfo.actionType = XR_ACTION_TYPE_BOOLEAN_INPUT; - forwardKeyInfo.countSubactionPaths = 1; - forwardKeyInfo.subactionPaths = &g_hand_path[RIGHT]; - if (!xr_check(xrCreateAction(g_action_set, &forwardKeyInfo, &g_forward_key_action), - "xrCreateAction(forward_key)")) + if (!xr_input_create_bool_action("b_click", "B Button", 1, &g_hand_path[RIGHT], + &g_b_click_action)) + return false; + if (!xr_input_create_bool_action("x_click", "X Button", 1, &g_hand_path[LEFT], + &g_x_click_action)) + return false; + if (!xr_input_create_bool_action("y_click", "Y Button", 1, &g_hand_path[LEFT], + &g_y_click_action)) + return false; + if (!xr_input_create_bool_action("squeeze", "Squeeze", 2, g_hand_path, &g_squeeze_action)) + return false; + if (!xr_input_create_bool_action("thumbstick_click", "Thumbstick Click", 2, g_hand_path, + &g_thumbstick_click_action)) return false; // Player locomotion, see g_thumbstick_action's own declaration comment. @@ -322,43 +1010,109 @@ bool xr_input_init(XrInstance instance, XrSession session, int64_t swapchain_for "xrCreateAction(thumbstick)")) return false; - XrPath profilePath; - xrStringToPath(instance, "/interaction_profiles/oculus/touch_controller", &profilePath); + // Every path the three suggested-bindings arrays below reference. One + // wrong or nonexistent path fails that profile's whole + // xrSuggestInteractionProfileBindings call (see + // xr_input_suggest_bindings()). + XrPath aimPoseLeft, aimPoseRight, menuClick; + xrStringToPath(instance, "/user/hand/left/input/aim/pose", &aimPoseLeft); + xrStringToPath(instance, "/user/hand/right/input/aim/pose", &aimPoseRight); + xrStringToPath(instance, "/user/hand/left/input/menu/click", &menuClick); // touch_controller has no .../trigger/click component, only the float // .../trigger/value - binding this boolean action straight to it // relies on OpenXR's standard action-type equivalence (runtimes // auto-convert float inputs to boolean via an internal threshold), the // same pattern Khronos' own hello_xr sample uses for its "select" - // action. Suggesting a binding to a component the profile doesn't - // have at all (like a nonexistent .../trigger/click) fails the entire - // xrSuggestInteractionProfileBindings call, not just that one entry. - XrPath aimPoseLeftPath, aimPoseRightPath, triggerLeftPath, triggerRightPath, menuClickPath, - aClickPath, bClickPath, thumbstickLeftPath, thumbstickRightPath; - xrStringToPath(instance, "/user/hand/left/input/aim/pose", &aimPoseLeftPath); - xrStringToPath(instance, "/user/hand/right/input/aim/pose", &aimPoseRightPath); - xrStringToPath(instance, "/user/hand/left/input/trigger/value", &triggerLeftPath); - xrStringToPath(instance, "/user/hand/right/input/trigger/value", &triggerRightPath); - xrStringToPath(instance, "/user/hand/left/input/menu/click", &menuClickPath); - xrStringToPath(instance, "/user/hand/right/input/a/click", &aClickPath); - xrStringToPath(instance, "/user/hand/right/input/b/click", &bClickPath); - xrStringToPath(instance, "/user/hand/left/input/thumbstick", &thumbstickLeftPath); - xrStringToPath(instance, "/user/hand/right/input/thumbstick", &thumbstickRightPath); - - XrActionSuggestedBinding bindings[] = { - {g_aim_pose_action, aimPoseLeftPath}, {g_aim_pose_action, aimPoseRightPath}, - {g_select_click_action, triggerLeftPath}, {g_select_click_action, triggerRightPath}, - {g_menu_toggle_action, menuClickPath}, - {g_space_key_action, aClickPath}, - {g_forward_key_action, bClickPath}, - {g_thumbstick_action, thumbstickLeftPath}, {g_thumbstick_action, thumbstickRightPath}, + // action. + XrPath touchTriggerLeft, touchTriggerRight, touchAClick, touchBClick, touchXClick, touchYClick, + touchSqueezeLeft, touchSqueezeRight, touchStickLeft, touchStickRight, touchStickClickLeft, + touchStickClickRight; + xrStringToPath(instance, "/user/hand/left/input/trigger/value", &touchTriggerLeft); + xrStringToPath(instance, "/user/hand/right/input/trigger/value", &touchTriggerRight); + xrStringToPath(instance, "/user/hand/right/input/a/click", &touchAClick); + xrStringToPath(instance, "/user/hand/right/input/b/click", &touchBClick); + xrStringToPath(instance, "/user/hand/left/input/x/click", &touchXClick); + xrStringToPath(instance, "/user/hand/left/input/y/click", &touchYClick); + xrStringToPath(instance, "/user/hand/left/input/squeeze/value", &touchSqueezeLeft); + xrStringToPath(instance, "/user/hand/right/input/squeeze/value", &touchSqueezeRight); + xrStringToPath(instance, "/user/hand/left/input/thumbstick", &touchStickLeft); + xrStringToPath(instance, "/user/hand/right/input/thumbstick", &touchStickRight); + xrStringToPath(instance, "/user/hand/left/input/thumbstick/click", &touchStickClickLeft); + xrStringToPath(instance, "/user/hand/right/input/thumbstick/click", &touchStickClickRight); + const XrActionSuggestedBinding touchBindings[] = { + {g_aim_pose_action, aimPoseLeft}, + {g_aim_pose_action, aimPoseRight}, + {g_select_click_action, touchTriggerLeft}, + {g_select_click_action, touchTriggerRight}, + {g_menu_toggle_action, menuClick}, + {g_a_click_action, touchAClick}, + {g_b_click_action, touchBClick}, + {g_x_click_action, touchXClick}, + {g_y_click_action, touchYClick}, + {g_squeeze_action, touchSqueezeLeft}, + {g_squeeze_action, touchSqueezeRight}, + {g_thumbstick_action, touchStickLeft}, + {g_thumbstick_action, touchStickRight}, + {g_thumbstick_click_action, touchStickClickLeft}, + {g_thumbstick_click_action, touchStickClickRight}, }; - XrInteractionProfileSuggestedBinding suggested = {XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING}; - suggested.interactionProfile = profilePath; - suggested.countSuggestedBindings = sizeof(bindings) / sizeof(bindings[0]); - suggested.suggestedBindings = bindings; - if (!xr_check(xrSuggestInteractionProfileBindings(instance, &suggested), - "xrSuggestInteractionProfileBindings")) + if (!xr_input_suggest_bindings(instance, "/interaction_profiles/oculus/touch_controller", + "Meta Quest Touch", touchBindings, + sizeof(touchBindings) / sizeof(touchBindings[0]))) + return false; + + // HTC Vive wand: trigger and squeeze are native booleans (squeeze has no + // analog value); the trackpad takes the thumbstick/thumbstick_click + // actions' place, so xr_input_update_raw_states()'s digitization applies + // unchanged. There is no A/B/X/Y, so those four actions are never bound + // under this profile. + XrPath viveTriggerLeft, viveTriggerRight, viveSqueezeLeft, viveSqueezeRight, viveTrackpadLeft, + viveTrackpadRight, viveTrackpadClickLeft, viveTrackpadClickRight; + xrStringToPath(instance, "/user/hand/left/input/trigger/click", &viveTriggerLeft); + xrStringToPath(instance, "/user/hand/right/input/trigger/click", &viveTriggerRight); + xrStringToPath(instance, "/user/hand/left/input/squeeze/click", &viveSqueezeLeft); + xrStringToPath(instance, "/user/hand/right/input/squeeze/click", &viveSqueezeRight); + xrStringToPath(instance, "/user/hand/left/input/trackpad", &viveTrackpadLeft); + xrStringToPath(instance, "/user/hand/right/input/trackpad", &viveTrackpadRight); + xrStringToPath(instance, "/user/hand/left/input/trackpad/click", &viveTrackpadClickLeft); + xrStringToPath(instance, "/user/hand/right/input/trackpad/click", &viveTrackpadClickRight); + const XrActionSuggestedBinding viveBindings[] = { + {g_aim_pose_action, aimPoseLeft}, + {g_aim_pose_action, aimPoseRight}, + {g_select_click_action, viveTriggerLeft}, + {g_select_click_action, viveTriggerRight}, + {g_menu_toggle_action, menuClick}, + {g_squeeze_action, viveSqueezeLeft}, + {g_squeeze_action, viveSqueezeRight}, + {g_thumbstick_action, viveTrackpadLeft}, + {g_thumbstick_action, viveTrackpadRight}, + {g_thumbstick_click_action, viveTrackpadClickLeft}, + {g_thumbstick_click_action, viveTrackpadClickRight}, + }; + if (!xr_input_suggest_bindings(instance, "/interaction_profiles/htc/vive_controller", + "HTC Vive", viveBindings, + sizeof(viveBindings) / sizeof(viveBindings[0]))) + return false; + + // khr/simple_controller - OpenXR's own minimal baseline profile, not a + // specific device: select+menu only, deliberately so (see CONFIG.md). + // No squeeze/thumbstick/A-B-X-Y bindings exist for it - every action + // other than select_click/menu_toggle/aim_pose is permanently inactive + // under this profile. + XrPath simpleSelectLeft, simpleSelectRight; + xrStringToPath(instance, "/user/hand/left/input/select/click", &simpleSelectLeft); + xrStringToPath(instance, "/user/hand/right/input/select/click", &simpleSelectRight); + const XrActionSuggestedBinding simpleBindings[] = { + {g_aim_pose_action, aimPoseLeft}, + {g_aim_pose_action, aimPoseRight}, + {g_select_click_action, simpleSelectLeft}, + {g_select_click_action, simpleSelectRight}, + {g_menu_toggle_action, menuClick}, + }; + if (!xr_input_suggest_bindings(instance, "/interaction_profiles/khr/simple_controller", + "Generic OpenXR Controller", simpleBindings, + sizeof(simpleBindings) / sizeof(simpleBindings[0]))) return false; for (int hand = 0; hand < 2; hand++) { @@ -392,7 +1146,9 @@ bool xr_input_init(XrInstance instance, XrSession session, int64_t swapchain_for } } - LOGI("XR: input action set ready (aim pose + trigger + menu-toggle + A=space + B=forward)"); + LOGI("XR: input action set ready (Touch/Vive/generic bindings suggested, %d remappable " + "actions)", + (int)QS_ACTION_COUNT); return true; } @@ -829,7 +1585,11 @@ static void xr_input_recenter_menu(XrOverlay *menuOverlay, XrSpace baseSpace, Xr // player standing at the real origin facing the real default -Z (i.e. one // who has never moved) yields (0, 0, 0), the same as this feature's // original naive reset-to-identity behavior. -bool xr_input_recenter_player_to_screen(void) { +// +// keepFacing=true (Reset Position) re-anchors only the position: the +// transform's yaw is kept, so the game quad does not rotate to follow the +// gaze. Same formulas, with theta taken from the current yaw instead. +static bool xr_input_recenter(bool keepFacing) { XrSpace localSpace = xr_session_get_local_space(); if (localSpace == XR_NULL_HANDLE || g_view_space == XR_NULL_HANDLE) return false; @@ -843,18 +1603,25 @@ bool xr_input_recenter_player_to_screen(void) { (headLoc.locationFlags & needed) != needed) return false; - float fx, fy, fz; - quat_rotate_vec(&headLoc.pose.orientation, 0.0f, 0.0f, -1.0f, &fx, &fy, &fz); - float len = sqrtf(fx * fx + fz * fz); - if (len < 1e-4f) - return false; // looking almost straight up/down - nothing sane to recenter onto - fx /= len; - fz /= len; + float theta; + if (keepFacing) { + float curX, curZ, curYawDeg; + xr_session_get_player_transform(&curX, &curZ, &curYawDeg); + theta = curYawDeg * QS_DEG_TO_RAD; + } else { + float fx, fy, fz; + quat_rotate_vec(&headLoc.pose.orientation, 0.0f, 0.0f, -1.0f, &fx, &fy, &fz); + float len = sqrtf(fx * fx + fz * fz); + if (len < 1e-4f) + return false; // looking almost straight up/down - nothing sane to recenter onto + fx /= len; + fz /= len; - // angle(0,-1) - angle(fx,fz), using the same atan2f(x, z) "angle" - // convention as xr_overlay_render_and_build_layer()'s own rotation - // comment (not the more usual atan2f(y, x)). - float theta = atan2f(0.0f, -1.0f) - atan2f(fx, fz); + // angle(0,-1) - angle(fx,fz), using the same atan2f(x, z) "angle" + // convention as xr_overlay_render_and_build_layer()'s own rotation + // comment (not the more usual atan2f(y, x)). + theta = atan2f(0.0f, -1.0f) - atan2f(fx, fz); + } float cosTheta = cosf(theta), sinTheta = sinf(theta); float hx = headLoc.pose.position.x, hz = headLoc.pose.position.z; float newX = -(hx * cosTheta + hz * sinTheta); @@ -865,8 +1632,45 @@ bool xr_input_recenter_player_to_screen(void) { return true; } +bool xr_input_recenter_player_to_screen(void) { return xr_input_recenter(false); } + +bool xr_input_reset_player_position(void) { return xr_input_recenter(true); } + void xr_input_skip_startup_recenter(void) { g_pending_startup_recenter = false; } +// sdl_events.c - the engine's own held-key table, indexed by its "SystemShock/Mac +// keycode" (see xr_input_sync_and_draw()'s watchdog). +extern unsigned char sshockKeyStates[256]; + +// See kKeyActions' own comment on why plain printable keys need +// SDL_TEXTINPUT in addition to SDL_KEYDOWN/UP (only jump needs Space +// specifically; every other plain-key action supplies its own character). +// Returns true only if SDL accepted the event. +static bool xr_input_push_text(char ch) { + SDL_Event textEvent; + SDL_zero(textEvent); + textEvent.type = SDL_TEXTINPUT; + textEvent.text.timestamp = SDL_GetTicks(); + textEvent.text.windowID = 0; + textEvent.text.text[0] = ch; + textEvent.text.text[1] = '\0'; + return SDL_PushEvent(&textEvent) == 1; +} + +static bool xr_input_push_key(const QsKeyAction *keyAction, bool down) { + SDL_Event event; + SDL_zero(event); + event.type = down ? SDL_KEYDOWN : SDL_KEYUP; + event.key.timestamp = SDL_GetTicks(); + event.key.windowID = 0; + event.key.state = down ? SDL_PRESSED : SDL_RELEASED; + event.key.repeat = 0; + event.key.keysym.scancode = keyAction->scancode; + event.key.keysym.sym = keyAction->keycode; + event.key.keysym.mod = keyAction->mod; + return SDL_PushEvent(&event) == 1; +} + void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { if (g_action_set == XR_NULL_HANDLE) return; @@ -877,6 +1681,20 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { syncInfo.activeActionSets = &activeSet; xr_check(xrSyncActions(g_session, &syncInfo), "xrSyncActions"); + // Cheap (no query on the runtime side, just a cached path lookup) - + // refreshed every frame so MenuOverlay's Controller Options tab always + // reflects whichever controller is actually connected right now. + XrInteractionProfileState profileState = {XR_TYPE_INTERACTION_PROFILE_STATE}; + if (xr_check(xrGetCurrentInteractionProfile(g_session, g_hand_path[LEFT], &profileState), + "xrGetCurrentInteractionProfile") && + profileState.interactionProfile != XR_NULL_PATH) { + uint32_t len = 0; + xrPathToString(g_instance, profileState.interactionProfile, + sizeof(g_active_profile_path), &len, g_active_profile_path); + } else { + g_active_profile_path[0] = '\0'; + } + // See g_pending_startup_recenter's own comment - retried every frame // (cheap: one xrLocateSpace call) until head tracking actually has a // valid pose to recenter onto, typically the very first frame. @@ -887,6 +1705,108 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { XrOverlay *keyboardOverlay = xr_session_get_keyboard_overlay(); bool menuVisible = xr_overlay_is_visible(menuOverlay); bool keyboardVisible = xr_overlay_is_visible(keyboardOverlay); + if (menuVisible != g_menu_was_visible) { + g_menu_was_visible = menuVisible; + qs_config_notify_menu_visibility(menuVisible); + } + + // Remappable controls: refresh every raw input's state, let an active + // capture consume a fresh press first, then dispatch the key-injecting + // actions. An action bound to a thumbstick direction is suppressed while + // the menu is open, since that stick drives the menu's snap-turn/smooth- + // move. mouse_click/mouse_double_click are resolved per hand inside the + // ray-dispatch loop below. + xr_input_update_raw_states(); + xr_input_process_capture(); + bool wantDown[QS_NUM_KEY_ACTIONS]; + for (size_t i = 0; i < QS_NUM_KEY_ACTIONS; i++) { + const QsKeyAction *keyAction = &kKeyActions[i]; + QsRawInput raw = s_binding[keyAction->action]; + wantDown[i] = raw != QS_RAW_NONE && !xr_input_action_suppressed_by_capture(keyAction->action) && + !(xr_input_raw_is_thumbstick_direction(raw) && menuVisible) && g_raw_down[raw]; + } + for (size_t i = 0; i < QS_NUM_KEY_ACTIONS; i++) { + const QsKeyAction *keyAction = &kKeyActions[i]; + bool down = wantDown[i]; + if (down == g_key_action_prev[i]) + continue; + // g_key_action_prev[i] is only advanced once every event this edge + // needs was actually accepted by SDL - a rejected push is retried + // next frame rather than leaving this action believing it already + // sent a press/release the engine never saw. + if (down) { + if (keyAction->needsTextInput && !xr_input_push_text(keyAction->textChar)) + continue; + if (!xr_input_push_key(keyAction, true)) + continue; + } else { + // The engine tracks held keys per key (sdl_events.c's + // sshockKeyStates[]), not per action - e.g. turn_left and + // strafe_left are both the Left arrow, differing only in + // modifier. A release for one must not clear the key while + // another action sharing it is still held. + int sibling = -1; + for (size_t j = 0; j < QS_NUM_KEY_ACTIONS; j++) { + if (j != i && wantDown[j] && kKeyActions[j].keycode == keyAction->keycode) { + sibling = (int)j; + break; + } + } + if (sibling >= 0) { + // Restores the still-held sibling's own modifiers if it + // was already down (a sibling only pressed this frame + // sends its own KEYDOWN when the loop reaches it). + if (g_key_action_prev[sibling] && !xr_input_push_key(&kKeyActions[sibling], true)) + continue; + } else if (!xr_input_push_key(keyAction, false)) { + continue; + } + } + LOGI("XR: key action %s %s", kActionNames[keyAction->action], down ? "DOWN" : "UP"); + g_key_action_prev[i] = down; + } + + // Watchdog for the continuously-polled movement keys: if the engine + // still has one held (sshockKeyStates[], sdl_events.c) while none of our + // actions is holding it, its release never took effect - the character + // would keep walking/turning until that key is next pressed and + // released. The grace period covers the normal 1-2 frame lag between + // pushing a release and the engine's next pump_events(). Skipped while + // the on-screen keyboard is up, since its own arrow/space keys (real + // SDL key events, held for as long as the trigger is) legitimately + // hold these too. + static const struct { + SDL_Keycode keycode; + Uint8 engineCode; // sdlKeyCodeToSSHOCKkeyCode()'s result (movekeys.h's CODE_*) + } kWatchedKeys[] = { + {SDLK_UP, 0x7E}, {SDLK_DOWN, 0x7D}, {SDLK_LEFT, 0x7B}, {SDLK_RIGHT, 0x7C}, {SDLK_SPACE, 0x31}, + {SDLK_RETURN, 0x24}, + }; + static Uint32 s_stuck_since[sizeof(kWatchedKeys) / sizeof(kWatchedKeys[0])]; + for (size_t w = 0; w < sizeof(kWatchedKeys) / sizeof(kWatchedKeys[0]); w++) { + const QsKeyAction *releaseWith = NULL; + bool heldByUs = false; + for (size_t i = 0; i < QS_NUM_KEY_ACTIONS; i++) { + if (kKeyActions[i].keycode != kWatchedKeys[w].keycode) + continue; + if (!releaseWith) + releaseWith = &kKeyActions[i]; + if (g_key_action_prev[i]) + heldByUs = true; + } + if (!releaseWith || heldByUs || keyboardVisible || sshockKeyStates[kWatchedKeys[w].engineCode] == 0) { + s_stuck_since[w] = 0; + continue; + } + Uint32 now = SDL_GetTicks(); + if (s_stuck_since[w] == 0) { + s_stuck_since[w] = now; + } else if (now - s_stuck_since[w] > 200) { + LOGI("XR: key watchdog releasing stuck engine key 0x%02x", kWatchedKeys[w].engineCode); + xr_input_push_key(releaseWith, false); + s_stuck_since[w] = now; + } + } // A drag can't get stuck active across a hide/reopen - e.g. Close // being hit on one hand mid-drag on the other, or the session ending. @@ -930,19 +1850,44 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { float keyboardCursorU = 0.0f, keyboardCursorV = 0.0f; for (int hand = 0; hand < 2; hand++) { - XrActionStateGetInfo selectInfo = {XR_TYPE_ACTION_STATE_GET_INFO}; - selectInfo.action = g_select_click_action; - selectInfo.subactionPath = g_hand_path[hand]; - XrActionStateBoolean selectState = {XR_TYPE_ACTION_STATE_BOOLEAN}; - xrGetActionStateBoolean(g_session, &selectInfo, &selectState); - bool selectDown = selectState.isActive && selectState.currentState; + // The click signal shared by keyboard, menu and game-quad dispatch, + // resolved once per hand: while the menu is open it is the trigger + // (fixed, so the menu is always operable whatever mouse_click is + // bound to); otherwise it is mouse_click's binding, so an on-screen + // keyboard press uses the same click as the game. + bool selectDown; + if (menuVisible) { + XrActionStateGetInfo selectInfo = {XR_TYPE_ACTION_STATE_GET_INFO}; + selectInfo.action = g_select_click_action; + selectInfo.subactionPath = g_hand_path[hand]; + XrActionStateBoolean selectState = {XR_TYPE_ACTION_STATE_BOOLEAN}; + xrGetActionStateBoolean(g_session, &selectInfo, &selectState); + selectDown = selectState.isActive && selectState.currentState; + } else { + selectDown = !xr_input_action_suppressed_by_capture(QS_ACTION_MOUSE_CLICK) && + xr_input_raw_state_for_hand(s_binding[QS_ACTION_MOUSE_CLICK], hand); + } bool selectDownEdge = selectDown && !g_prev_select[hand]; bool selectUpEdge = !selectDown && g_prev_select[hand]; if (selectDown != g_prev_select[hand]) { - LOGI("XR: %s trigger %s", kHandName[hand], selectDown ? "DOWN" : "UP"); + LOGI("XR: %s select %s", kHandName[hand], selectDown ? "DOWN" : "UP"); g_prev_select[hand] = selectDown; } + // mouse_double_click - game-quad-only (see its own dispatch further + // down) and only while the menu is closed, matching the reasoning + // above (double-click is a gameplay interaction primitive, not a + // menu one - keyboard keys have no double-click semantic either). + bool doubleClickEdge = false; + if (!menuVisible && !xr_input_action_suppressed_by_capture(QS_ACTION_MOUSE_DOUBLE_CLICK)) { + bool doubleClickDown = + xr_input_raw_state_for_hand(s_binding[QS_ACTION_MOUSE_DOUBLE_CLICK], hand); + doubleClickEdge = doubleClickDown && !g_prev_double_click[hand]; + g_prev_double_click[hand] = doubleClickDown; + } else { + g_prev_double_click[hand] = false; + } + if (hand == LEFT) { XrActionStateGetInfo menuInfo = {XR_TYPE_ACTION_STATE_GET_INFO}; menuInfo.action = g_menu_toggle_action; @@ -960,8 +1905,16 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { xr_overlay_toggle_visible(menuOverlay); g_menu_prev_hit[LEFT] = g_menu_prev_hit[RIGHT] = false; g_menu_touch_active[LEFT] = g_menu_touch_active[RIGHT] = false; - if (wasHidden && xr_overlay_is_visible(menuOverlay)) + if (wasHidden && xr_overlay_is_visible(menuOverlay)) { xr_input_recenter_menu(menuOverlay, baseSpace, time); + } else if (!wasHidden && !xr_overlay_is_visible(menuOverlay) && g_capture_active) { + // The menu closed with a capture pending: cancel it and + // notify MenuOverlay, whose capturingActionIndex would + // otherwise stay set. + int cancelledAction = (int)g_capture_action; + g_capture_active = false; + qs_config_notify_control_capture_result(cancelledAction, NULL, -1, NULL); + } } } else if (!menuDown && g_prev_menu) { LOGI("XR: menu-toggle button UP"); @@ -974,8 +1927,10 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { // scheme). g_turn_ready is a hysteresis latch (see its own // declaration comment) so holding the stick past the threshold // turns exactly once, not once per frame - it only re-arms once - // the stick has come back near center. - if (menuVisible) { + // the stick has come back near center. Also suppressed during a + // Controller Options capture, so a stick pressed then doesn't + // also snap-turn the view. + if (menuVisible && !g_capture_active && !g_controller_options_tab_open) { XrActionStateGetInfo turnInfo = {XR_TYPE_ACTION_STATE_GET_INFO}; turnInfo.action = g_thumbstick_action; turnInfo.subactionPath = g_hand_path[LEFT]; @@ -1002,90 +1957,15 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { } if (hand == RIGHT) { - XrActionStateGetInfo spaceKeyInfo = {XR_TYPE_ACTION_STATE_GET_INFO}; - spaceKeyInfo.action = g_space_key_action; - spaceKeyInfo.subactionPath = g_hand_path[RIGHT]; - XrActionStateBoolean spaceKeyState = {XR_TYPE_ACTION_STATE_BOOLEAN}; - xrGetActionStateBoolean(g_session, &spaceKeyInfo, &spaceKeyState); - bool spaceKeyDown = spaceKeyState.isActive && spaceKeyState.currentState; - if (spaceKeyDown != g_prev_space_key) { - LOGI("XR: A button (space key) %s", spaceKeyDown ? "DOWN" : "UP"); - if (spaceKeyDown) { - // The engine's pump_events() (sdl_events.c) only queues a - // KEYDOWN here for non-printable keys (ascii < 32) - - // printable keys like Space are expected to arrive via - // SDL_TEXTINPUT instead (that's the branch that actually - // queues the KBS_DOWN event the tutorial-dismiss handler - // checks for), so send that too, matching what real - // keyboard input generates for a Space press. - // - // sdl_events.c's SDL_TEXTINPUT handling also sets - // sshockKeyStates[Space] = pressed - the same array - // Space's own keybind (M_JUMP, see MacSrc/Prefs.c's - // default keybinds.txt) polls every physics tick via - // ui_poll_keyboard(). It's only ever cleared again by a - // matching SDL_KEYUP, sent below once this button's real - // physical up-edge fires (spaceKeyDown false) - not - // synthesized here alongside the press, since pushing - // both in the same batch would set and clear it within - // one pump_events() call, before the poll (which runs - // once per frame, before pump_events) ever sees the - // press. - SDL_Event textEvent; - SDL_zero(textEvent); - textEvent.type = SDL_TEXTINPUT; - textEvent.text.timestamp = SDL_GetTicks(); - textEvent.text.windowID = 0; - textEvent.text.text[0] = ' '; - textEvent.text.text[1] = '\0'; - SDL_PushEvent(&textEvent); - } - SDL_Event event; - SDL_zero(event); - event.type = spaceKeyDown ? SDL_KEYDOWN : SDL_KEYUP; - event.key.timestamp = SDL_GetTicks(); - event.key.windowID = 0; - event.key.state = spaceKeyDown ? SDL_PRESSED : SDL_RELEASED; - event.key.repeat = 0; - event.key.keysym.scancode = SDL_SCANCODE_SPACE; - event.key.keysym.sym = SDLK_SPACE; - event.key.keysym.mod = KMOD_NONE; - SDL_PushEvent(&event); - g_prev_space_key = spaceKeyDown; - } - - XrActionStateGetInfo forwardKeyInfo = {XR_TYPE_ACTION_STATE_GET_INFO}; - forwardKeyInfo.action = g_forward_key_action; - forwardKeyInfo.subactionPath = g_hand_path[RIGHT]; - XrActionStateBoolean forwardKeyState = {XR_TYPE_ACTION_STATE_BOOLEAN}; - xrGetActionStateBoolean(g_session, &forwardKeyInfo, &forwardKeyState); - bool forwardKeyDown = forwardKeyState.isActive && forwardKeyState.currentState; - if (forwardKeyDown != g_prev_forward_key) { - LOGI("XR: B button (forward key) %s", forwardKeyDown ? "DOWN" : "UP"); - SDL_Event event; - SDL_zero(event); - event.type = forwardKeyDown ? SDL_KEYDOWN : SDL_KEYUP; - event.key.timestamp = SDL_GetTicks(); - event.key.windowID = 0; - event.key.state = forwardKeyDown ? SDL_PRESSED : SDL_RELEASED; - event.key.repeat = 0; - event.key.keysym.scancode = SDL_SCANCODE_UP; - event.key.keysym.sym = SDLK_UP; - event.key.keysym.mod = KMOD_NONE; - SDL_PushEvent(&event); - g_prev_forward_key = forwardKeyDown; - } - - // Smooth move - only while the menu is open, same reasoning as - // the left stick's snap turn above. g_last_move_ticks is - // refreshed every frame regardless of menuVisible (not just - // while actively moving) so dt is always "time since the - // previous frame" and never goes stale/huge across a stretch - // with the menu closed. + // Smooth move - only while the menu is open, with the same + // suppression as the snap turn above. g_last_move_ticks is + // refreshed every frame so dt is always the time since the + // previous frame. Uint32 nowTicks = SDL_GetTicks(); Uint32 lastMoveTicks = g_last_move_ticks; g_last_move_ticks = nowTicks; - if (menuVisible && lastMoveTicks != 0) { + if (menuVisible && !g_capture_active && !g_controller_options_tab_open && + lastMoveTicks != 0) { XrActionStateGetInfo moveInfo = {XR_TYPE_ACTION_STATE_GET_INFO}; moveInfo.action = g_thumbstick_action; moveInfo.subactionPath = g_hand_path[RIGHT]; @@ -1225,6 +2105,16 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { xr_mouse_click(false); g_game_touch_active[hand] = false; } + if (doubleClickEdge && gameHit) { + // Two complete click-down/up pairs, same frame - the engine's + // own double-click detection (input.c) compares two MOUSE_LUP + // events' timing/position, so this is indistinguishable from a + // fast real double-click, no engine change needed. + xr_mouse_click(true); + xr_mouse_click(false); + xr_mouse_click(true); + xr_mouse_click(false); + } // gameHit implies gamePlaneHit (both only ever set together above), // kept as a separate out-param for symmetry with // xr_input_try_overlay()'s outPlaneHit/outPlaneDistance pair. @@ -1238,6 +2128,12 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw) { if (keyboardVisible) xr_overlay_update_cursor(keyboardOverlay, keyboardCursorU, keyboardCursorV, keyboardCursorHit); + + // Snapshot for next frame's edge detection - after everything above + // (capture-mode scan, key-action dispatch, mouse_click/double_click + // resolution) has finished comparing this frame's g_raw_down against + // the previous frame's values. + memcpy(g_raw_prev, g_raw_down, sizeof(g_raw_down)); } bool xr_input_get_beam_layer(int hand, XrCompositionLayerQuad *out_quad) { @@ -1248,6 +2144,13 @@ bool xr_input_get_beam_layer(int hand, XrCompositionLayerQuad *out_quad) { } void xr_input_shutdown(void) { + // Clearing g_key_action_prev below without releasing what it says is + // held would leave the engine's own held-key state stuck on (nothing + // else ever sends that key's release). + for (size_t i = 0; i < QS_NUM_KEY_ACTIONS; i++) { + if (g_key_action_prev[i]) + xr_input_push_key(&kKeyActions[i], false); + } for (int hand = 0; hand < 2; hand++) { if (g_aim_space[hand] != XR_NULL_HANDLE) xrDestroySpace(g_aim_space[hand]); @@ -1263,13 +2166,23 @@ void xr_input_shutdown(void) { g_aim_pose_action = XR_NULL_HANDLE; g_select_click_action = XR_NULL_HANDLE; g_menu_toggle_action = XR_NULL_HANDLE; - g_space_key_action = XR_NULL_HANDLE; - g_forward_key_action = XR_NULL_HANDLE; + g_a_click_action = XR_NULL_HANDLE; + g_b_click_action = XR_NULL_HANDLE; + g_x_click_action = XR_NULL_HANDLE; + g_y_click_action = XR_NULL_HANDLE; + g_squeeze_action = XR_NULL_HANDLE; + g_thumbstick_click_action = XR_NULL_HANDLE; g_thumbstick_action = XR_NULL_HANDLE; g_instance = XR_NULL_HANDLE; g_session = XR_NULL_HANDLE; memset(g_prev_select, 0, sizeof(g_prev_select)); + memset(g_prev_double_click, 0, sizeof(g_prev_double_click)); + memset(g_key_action_prev, 0, sizeof(g_key_action_prev)); + memset(g_raw_down, 0, sizeof(g_raw_down)); + memset(g_raw_prev, 0, sizeof(g_raw_prev)); + memset(g_stick_digital, 0, sizeof(g_stick_digital)); + g_capture_active = false; memset(g_game_prev_hit, 0, sizeof(g_game_prev_hit)); memset(g_game_touch_active, 0, sizeof(g_game_touch_active)); memset(g_menu_prev_hit, 0, sizeof(g_menu_prev_hit)); @@ -1278,8 +2191,6 @@ void xr_input_shutdown(void) { memset(g_keyboard_touch_active, 0, sizeof(g_keyboard_touch_active)); g_beam_quad_valid[LEFT] = g_beam_quad_valid[RIGHT] = false; g_prev_menu = false; - g_prev_space_key = false; - g_prev_forward_key = false; g_keyboard_drag.dragging = false; g_keyboard_drag.hand = -1; g_menu_drag.dragging = false; diff --git a/android/app/src/main/cpp/xr_input.h b/android/app/src/main/cpp/xr_input.h index 6c56ee4..0e49202 100644 --- a/android/app/src/main/cpp/xr_input.h +++ b/android/app/src/main/cpp/xr_input.h @@ -67,27 +67,22 @@ void xr_input_sync_and_draw(XrSpace baseSpace, XrTime time, bool draw); bool xr_input_get_beam_layer(int hand, XrCompositionLayerQuad *out_quad); // Recenters the player so the game quad ("virtual screen") appears directly -// ahead of wherever they're currently really standing/facing - a pure, -// live "return to a sane view of the screen" action, unrelated to any -// stored/config value (unlike xr_session_set_player_transform()'s other -// callers, this never reads or writes questshock.config.json - it's driven -// entirely by the player's current real head pose, the same way -// xr_input_sync_and_draw()'s own menu re-center is). Called from the Main -// Menu tab's "Reset Position" button (via qs_config.c's cross-thread -// dispatch - see qs_config_request_reset_position()), but doesn't touch -// anything else qs_config.c owns; also called once automatically, from -// inside xr_input_sync_and_draw() itself, on whichever frame first has a -// valid head pose after startup (see g_pending_startup_recenter's own -// comment) - but only as a *fallback* default for when there's no -// complete saved player_position to fall back on instead (see -// xr_input_skip_startup_recenter() below), since a config-loaded value -// describes a transform relative to a *previous* session's real-space -// origin, which is only meaningful if that previous position was actually -// captured (LOCAL space's own origin isn't a stable point across -// launches). Returns false (no-op otherwise) if no valid head pose was -// available to recenter onto yet. +// ahead of wherever they are standing and facing, from their current real head +// pose. Never reads or writes questshock.config.json. Called automatically +// once, from xr_input_sync_and_draw(), on the first frame with a valid head +// pose after startup, unless a complete saved player_position was loaded (see +// xr_input_skip_startup_recenter()): a saved position is relative to a +// previous session's real-space origin, which is not stable across launches. +// Returns false (no-op) if no valid head pose is available yet. bool xr_input_recenter_player_to_screen(void); +// The Main Menu tab's "Reset Position" button (via qs_config.c). Like +// xr_input_recenter_player_to_screen(), but re-anchors only the player's +// position to the centre in front of the game quad; the current facing (yaw) +// is kept, so the screen does not rotate to follow the gaze. Returns false +// (no-op) if no valid head pose is available yet. +bool xr_input_reset_player_position(void); + // Called once, from qs_config_load_startup() (qs_config.c), when a // complete saved player_position was actually loaded from // questshock.config.json - cancels the pending automatic startup recenter @@ -96,6 +91,60 @@ bool xr_input_recenter_player_to_screen(void); // yet (this only touches the plain file-local flag, no XR calls). void xr_input_skip_startup_recenter(void); +// =========================================================================== +// Remappable controls ("player_controls" config group; see qs_config.c and +// CONFIG.md). menu_toggle is not among them and has no getter/setter: it is +// fixed (see xr_input_sync_and_draw()). +// =========================================================================== + +// Number of remappable actions and each one's index<->name mapping, which +// qs_config.c uses to parse/write the player_controls group without its own +// copy of the list. The names are the keys used in questshock.config.json; +// index_from_name() returns false for an unrecognized name. +int xr_input_action_count(void); +const char *xr_input_action_name(int action_index); +bool xr_input_action_index_from_name(const char *name, int *out_index); + +// Current binding for one action, as an opaque int and as its string form +// (e.g. "right_b", "trigger", "none" for unbound), the same strings used in +// questshock.config.json and reported by capture. +int xr_input_get_action_binding(int action_index); +const char *xr_input_get_action_binding_name(int action_index); + +// Sets one action's binding from a config-file string. Returns false (binding +// unchanged) for an unrecognized name, or for the symmetric "trigger"/ +// "squeeze" on an action other than mouse_click/mouse_double_click. Does not +// enforce one-action-per-input the way capture does: a hand-edited file that +// binds two actions to one input is accepted as-is. +bool xr_input_set_action_binding(int action_index, const char *raw_name); + +// Restores every action to its built-in default (the table xr_input_init() +// starts from). qs_config.c calls this first for "Reset to Defaults", then +// applies questshock.config.default.json's player_controls group on top if it +// has one. +void xr_input_reset_player_controls(void); + +// Begins/cancels rebind capture for one action (an index into +// xr_input_action_name()'s list): the next fresh button or thumbstick-direction +// edge on any hand becomes that action's binding and is reported via +// qs_config_notify_control_capture_result(); with no press, capture cancels +// after 8 seconds. Called via qs_config.c's cross-thread request functions. +// The menu button is never captured. +void xr_input_capture_begin(int action_index); +void xr_input_capture_cancel(void); + +// The OpenXR interaction profile currently bound (e.g. +// "/interaction_profiles/oculus/touch_controller"), refreshed once per frame. +// MenuOverlay.java's Controller Options tab uses it to pick a file from +// controller_profiles/ (see CONFIG.md). Empty until the first successful +// query. +const char *xr_input_get_active_interaction_profile_path(void); + +// Set by MenuOverlay.java when the Controller Options tab becomes or stops +// being the menu's current tab. While it is open, the menu's thumbstick +// locomotion (snap turn/smooth move) is disabled. +void xr_input_set_controller_options_tab_open(bool open); + void xr_input_shutdown(void); #ifdef __cplusplus diff --git a/android/app/src/main/java/de/ladkau/questshock/MenuOverlay.java b/android/app/src/main/java/de/ladkau/questshock/MenuOverlay.java index 8a1980a..807303d 100644 --- a/android/app/src/main/java/de/ladkau/questshock/MenuOverlay.java +++ b/android/app/src/main/java/de/ladkau/questshock/MenuOverlay.java @@ -2,22 +2,43 @@ package de.ladkau.questshock; import android.app.Activity; import android.app.ActivityManager; +import android.app.AlertDialog; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Paint; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; import android.os.Handler; import android.os.Looper; +import android.util.Log; import android.util.TypedValue; import android.view.Gravity; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.ScrollView; import android.widget.TextView; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.HashSet; import java.util.Locale; +import java.util.Objects; +import java.util.Set; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; /** * The main menu launcher quad (see OverlayPanel for the shared off-screen- @@ -73,6 +94,33 @@ public class MenuOverlay extends OverlayPanel { // this same language's own Strings.java translation is filed under. private static final String[] LANGUAGE_KEYS = {"english", "french", "german"}; + // Controller Options tab actions. Order must match xr_input.c's + // QsControlAction enum/kActionNames[]: the indices go straight to + // nativeRequestBeginControlCapture()/nativeGetControlBindingKey(). Row + // labels are Strings.get("action_" + ACTION_KEYS[i], ...). The hotkey + // actions are unbound by default; xr_input.c lists the HotKeyLookup[] + // entries that are not exposed. + private static final String[] ACTION_KEYS = { + "move_forward", "move_back", "strafe_left", "strafe_right", + "turn_left", "turn_right", "jump", "mouse_click", "mouse_double_click", + "stand", "crouch", "prone", "toggle_freelook", "pause", + "full_view", "normal_view", "map_view", "save_game", "load_game", + "select_grenade", "arm_grenade", "select_drug", "use_drug", + "toggle_online_help", "show_help", "toggle_music", "quit", + "cycle_weapon_next", "cycle_weapon_prev", "cycle_detail", + "reload_weapon_primary", "reload_weapon_secondary", "hud_color", + "clear_fullscreen", + "mfd_left_1", "mfd_left_2", "mfd_left_3", "mfd_left_4", "mfd_left_5", + "mfd_right_1", "mfd_right_2", "mfd_right_3", "mfd_right_4", "mfd_right_5", + "fire_weapon", + }; + private static final String CONTROLLER_PROFILES_DIR = QuestShockActivity.GAME_DIR + "/controller_profiles"; + // Shown (with its own explanatory note - see Strings.java's + // "generic_profile_note") whenever no bundled profile's + // interaction_profile matches the runtime's active one, same fallback + // reasoning as qs_config.c's own generic khr/simple_controller binding. + private static final String GENERIC_PROFILE_FILENAME = "generic.json"; + private static MenuOverlay instance; // Kept so relayoutAndRedraw() (see its own comment) can re-measure/ @@ -87,13 +135,15 @@ public class MenuOverlay extends OverlayPanel { private TextView titleView; private TextView statsView; - // Content area (tabs) - only one of mainMenuTab/videoOptionsTab is - // VISIBLE at a time; currentTab tracks which. + // Content area (tabs) - only one of mainMenuTab/videoOptionsTab/ + // controllerOptionsTab is VISIBLE at a time; currentTab tracks which. private View mainMenuTab; private View videoOptionsTab; + private View controllerOptionsTab; private View currentTab; private Button mainMenuTabButton; private Button videoOptionsTabButton; + private Button controllerOptionsTabButton; // Main Menu tab's own two states (only one VISIBLE at a time, within // mainMenuTab) - mainMenuContent is the normal state (button row + @@ -134,6 +184,32 @@ public class MenuOverlay extends OverlayPanel { private Button[] gameScreenWidthButtons; private Button[] gameScreenDistanceButtons; + // Controller Options tab controls - one row per ACTION_KEYS entry + // (controlRows[i] toggles VISIBLE/GONE per refreshControllerOptionsSelection()'s + // active-profile filtering; controlActionLabels/controlBindingButtons + // stay 1:1 with ACTION_KEYS regardless of visibility). + private ImageView controllerImageView; + private TextView controllerProfileLabel; + private TextView controllerGenericNoteView; + private ScrollView controllerScrollView; + private ScrollBarView controllerScrollBar; + private LinearLayout[] controlRows; + private TextView[] controlActionLabels; + private Button[] controlBindingButtons; + private Button controlResetButton; + // -1 = no row currently listening for a press; otherwise an index into + // ACTION_KEYS - the one row whose text refreshControllerOptionsSelection() + // leaves alone (showing the "Press a button…" placeholder) rather than + // overwriting with its actual current binding. + private int capturingActionIndex = -1; + // Cheap memoization keyed on the active interaction profile path string + // (xr_input.c only recomputes that once per frame anyway) - avoids + // re-reading/re-parsing every *.json file in CONTROLLER_PROFILES_DIR on + // every refreshControllerOptionsSelection() call (periodic, every + // STATS_REFRESH_MS while this tab is visible). + private String cachedProfilePath; + private ControllerProfile cachedProfile; + private int currentLanguage = Strings.ENGLISH; private final Handler handler = new Handler(Looper.getMainLooper()); @@ -167,11 +243,15 @@ public class MenuOverlay extends OverlayPanel { FrameLayout content = new FrameLayout(activity); mainMenuTab = buildMainMenuTab(); videoOptionsTab = buildVideoOptionsTab(); + controllerOptionsTab = buildControllerOptionsTab(); content.addView(mainMenuTab, new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); content.addView(videoOptionsTab, new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); + content.addView(controllerOptionsTab, new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); videoOptionsTab.setVisibility(View.GONE); + controllerOptionsTab.setVisibility(View.GONE); currentTab = mainMenuTab; panel.addView(content, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)); @@ -435,6 +515,398 @@ public class MenuOverlay extends OverlayPanel { return tab; } + // Horizontal scroll bar for the Controller Options tab - a track with a + // round thumb at `fraction` (0..1) along it. See + // buildControllerOptionsTab() for why this isn't a SeekBar. + private static final class ScrollBarView extends View { + private static final float PAD = 20f; + private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + private float fraction; + + ScrollBarView(Context context) { + super(context); + paint.setStrokeCap(Paint.Cap.ROUND); + } + + void setFraction(float value) { + fraction = Math.max(0f, Math.min(1f, value)); + invalidate(); + } + + float fractionForX(float x) { + float usable = getWidth() - 2 * PAD; + return usable > 0 ? Math.max(0f, Math.min(1f, (x - PAD) / usable)) : 0f; + } + + @Override + protected void onDraw(Canvas canvas) { + float cy = getHeight() / 2f; + float left = PAD; + float right = getWidth() - PAD; + paint.setColor(0xFF606060); + paint.setStrokeWidth(8f); + canvas.drawLine(left, cy, right, cy, paint); + paint.setColor(0xFFE0E0E0); + canvas.drawCircle(left + fraction * (right - left), cy, 16f, paint); + } + } + + // Controller Options tab (see CONFIG.md's "Player Controls"): an optional + // controller illustration and profile name at the top (from a matching + // res/controller_profiles/*.json and image, see + // refreshControllerOptionsSelection()), one row per ACTION_KEYS entry + // (label plus a button showing/capturing its binding), and a Reset to + // Defaults button. All rows are built once; + // refreshControllerOptionsSelection() shows or hides each to match the + // active controller profile. + // + // The rows don't fit the panel's fixed height, so they sit in a + // ScrollView. OverlayPanel.handleTouch() only delivers ACTION_DOWN and + // ACTION_UP (never ACTION_MOVE), so drag-to-scroll cannot work; a scroll + // bar below the list is tapped to jump to a position instead. A stock + // SeekBar cannot serve as that bar: it defers a press until an + // ACTION_MOVE past the touch slop (View.shouldDelayChildPressedState() + // defaults to true for every ViewGroup), so a tap does nothing. + // ScrollBarView computes the tapped position from its own touch + // listener, like each button's CLICK_ON_TOUCH_UP. + private View buildControllerOptionsTab() { + LinearLayout tab = new LinearLayout(activity); + tab.setOrientation(LinearLayout.VERTICAL); + + LinearLayout scrollContent = new LinearLayout(activity); + scrollContent.setOrientation(LinearLayout.VERTICAL); + scrollContent.setPadding(24, 16, 24, 8); + + controllerImageView = new ImageView(activity); + controllerImageView.setVisibility(View.GONE); + scrollContent.addView(controllerImageView, + new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 140)); + + controllerProfileLabel = new TextView(activity); + controllerProfileLabel.setTextColor(0xFFFFFFFF); + controllerProfileLabel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); + controllerProfileLabel.setGravity(Gravity.CENTER); + scrollContent.addView(controllerProfileLabel); + + controllerGenericNoteView = new TextView(activity); + controllerGenericNoteView.setTextColor(0xFFFFD060); + controllerGenericNoteView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13); + controllerGenericNoteView.setGravity(Gravity.CENTER); + controllerGenericNoteView.setPadding(0, 4, 0, 4); + controllerGenericNoteView.setVisibility(View.GONE); + scrollContent.addView(controllerGenericNoteView); + + controlRows = new LinearLayout[ACTION_KEYS.length]; + controlActionLabels = new TextView[ACTION_KEYS.length]; + controlBindingButtons = new Button[ACTION_KEYS.length]; + // Rows are created in display order (Fire Weapon first, then the + // rest in ACTION_KEYS order); every array below stays indexed by + // the real action index, which must keep matching xr_input.c. + int fireIndex = Arrays.asList(ACTION_KEYS).indexOf("fire_weapon"); + for (int d = 0; d < ACTION_KEYS.length; d++) { + final int i = d == 0 ? fireIndex : (d - 1 < fireIndex ? d - 1 : d); + final int actionIndex = i; + LinearLayout row = new LinearLayout(activity); + row.setOrientation(LinearLayout.HORIZONTAL); + row.setGravity(Gravity.CENTER_VERTICAL); + + TextView label = new TextView(activity); + label.setTextColor(0xFFFFFFFF); + label.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15); + label.setText(Strings.get("action_" + ACTION_KEYS[i], currentLanguage)); + row.addView(label, + new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f)); + + Button bindingButton = new Button(activity); + bindingButton.setOnClickListener(v -> onControlBindingButtonTapped(actionIndex)); + bindingButton.setOnTouchListener(CLICK_ON_TOUCH_UP); + bindingButton.setBackground(selectableButtonBackground()); + bindingButton.setTextColor(buttonTextColors()); + registerHoverable(bindingButton); + LinearLayout.LayoutParams bindingParams = new LinearLayout.LayoutParams(0, 64, 1f); + bindingParams.setMargins(4, 4, 4, 4); + row.addView(bindingButton, bindingParams); + + scrollContent.addView(row, new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); + controlRows[i] = row; + controlActionLabels[i] = label; + controlBindingButtons[i] = bindingButton; + } + + controllerScrollView = new ScrollView(activity); + controllerScrollView.addView(scrollContent, new ScrollView.LayoutParams( + ScrollView.LayoutParams.MATCH_PARENT, ScrollView.LayoutParams.WRAP_CONTENT)); + tab.addView(controllerScrollView, new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)); + + // The scroll bar (see this method's comment above). Not a SeekBar: + // ProgressBar records its constructing thread (the native render + // thread here) and, when set from the UI thread, defers the visual + // update through View.post(), which never runs on this unattached + // tree. ScrollBarView draws from a plain field instead. It is a + // sibling of controllerScrollView, so it stays fixed below the + // scrolling rows, and it is always shown (a tap is a no-op when + // nothing overflows). + controllerScrollBar = new ScrollBarView(activity); + controllerScrollBar.setOnTouchListener((v, event) -> { + if (event.getAction() != MotionEvent.ACTION_DOWN) { + return true; + } + float fraction = controllerScrollBar.fractionForX(event.getX()); + int range = scrollContent.getHeight() - controllerScrollView.getHeight(); + if (range > 0) { + controllerScrollView.scrollTo(0, Math.round(range * fraction)); + } + controllerScrollBar.setFraction(fraction); + return true; + }); + // Keeps the thumb tracking the actual scroll position however it + // changed, not just from a tap on the bar itself. + controllerScrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldX, oldY) -> { + int range = scrollContent.getHeight() - controllerScrollView.getHeight(); + controllerScrollBar.setFraction(range > 0 ? (float) scrollY / range : 0f); + }); + LinearLayout.LayoutParams scrollBarParams = + new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 48); + scrollBarParams.setMargins(24, 0, 24, 0); + tab.addView(controllerScrollBar, scrollBarParams); + + LinearLayout resetRow = new LinearLayout(activity); + resetRow.setOrientation(LinearLayout.HORIZONTAL); + resetRow.setGravity(Gravity.CENTER); + resetRow.setPadding(0, 4, 0, 8); + controlResetButton = new Button(activity); + controlResetButton.setText(Strings.get("reset_to_defaults", currentLanguage)); + controlResetButton.setOnClickListener(v -> onResetControlsClicked()); + controlResetButton.setOnTouchListener(CLICK_ON_TOUCH_UP); + controlResetButton.setBackground(buttonBackground()); + controlResetButton.setTextColor(buttonTextColors()); + registerHoverable(controlResetButton); + LinearLayout.LayoutParams resetParams = + new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 56); + resetParams.setMargins(8, 8, 8, 8); + resetRow.addView(controlResetButton, resetParams); + tab.addView(resetRow); + + return tab; + } + + // Tapping a binding button starts capture for that row (or cancels it, + // if that row is the one already listening) - see xr_input.h's own + // capture_begin()/capture_cancel() comment. The row's own text is set + // to the localized placeholder immediately for instant feedback, rather + // than waiting for onControlCaptureResult() - which never arrives at + // all on cancel. + private void onControlBindingButtonTapped(int actionIndex) { + if (capturingActionIndex == actionIndex) { + nativeRequestCancelControlCapture(); + capturingActionIndex = -1; + refreshControllerOptionsSelection(); + return; + } + capturingActionIndex = actionIndex; + nativeRequestBeginControlCapture(actionIndex); + controlBindingButtons[actionIndex].setText(Strings.get("capture_prompt", currentLanguage)); + controlBindingButtons[actionIndex].setSelected(true); + relayoutAndRedraw(); + } + + private void onResetControlsClicked() { + if (capturingActionIndex != -1) { + nativeRequestCancelControlCapture(); + capturingActionIndex = -1; + } + nativeRequestResetPlayerControls(); + refreshControllerOptionsSelection(); + } + + // Reflects the currently-active controller profile + bindings onto the + // tab - called when the tab is shown (switchTab()) and, while it's the + // visible tab, on the same periodic timer as the header stats + // (refreshStats()). Mirrors refreshVideoOptionsSelection()'s "query + // fresh, stays correct even if changed some other way" reasoning, + // except for whichever single row is mid-capture (see + // capturingActionIndex's own comment) - that one is left untouched so + // its placeholder isn't clobbered by this same periodic refresh. + private void refreshControllerOptionsSelection() { + String activeProfilePath = nativeGetActiveInteractionProfilePath(); + ControllerProfile profile = loadControllerProfile(activeProfilePath); + + boolean isGeneric = profile == null || GENERIC_PROFILE_FILENAME.equals(profile.sourceFileName); + controllerGenericNoteView.setVisibility(isGeneric ? View.VISIBLE : View.GONE); + if (isGeneric) { + controllerGenericNoteView.setText(Strings.get("generic_profile_note", currentLanguage)); + } + + Bitmap image = profile != null ? loadProfileImage(profile) : null; + if (image != null) { + controllerImageView.setImageBitmap(image); + controllerImageView.setVisibility(View.VISIBLE); + } else { + controllerImageView.setVisibility(View.GONE); + } + controllerProfileLabel.setText(profile != null ? profile.name : ""); + + for (int i = 0; i < ACTION_KEYS.length; i++) { + boolean relevant = profile == null || isActionRelevantForProfile(profile, nativeGetControlBindingKey(i)); + controlRows[i].setVisibility(relevant ? View.VISIBLE : View.GONE); + if (i == capturingActionIndex) { + continue; + } + controlBindingButtons[i].setText(rawInputDisplayName(nativeGetControlBindingKey(i))); + controlBindingButtons[i].setSelected(false); + } + relayoutAndRedraw(); + } + + private String rawInputDisplayName(String rawKey) { + return Strings.get("raw_" + rawKey, currentLanguage); + } + + // "trigger"/"squeeze" are the two symmetric default bindings (see + // xr_input.h's own comment) - relevant to a profile if it has *either* + // hand's concrete equivalent; "none" (unbound) always shows, so a + // player can see - and rebind - an action this profile happens not to + // default anything useful to. Every other key is a concrete raw input, + // checked against the profile's own controls list at that list's own + // granularity - see baseControlId()'s own comment. + private static boolean isActionRelevantForProfile(ControllerProfile profile, String rawKey) { + if ("none".equals(rawKey)) { + return true; + } + if ("trigger".equals(rawKey)) { + return profile.controlIds.contains("left_trigger") || profile.controlIds.contains("right_trigger"); + } + if ("squeeze".equals(rawKey)) { + return profile.controlIds.contains("left_squeeze") || profile.controlIds.contains("right_squeeze"); + } + return profile.controlIds.contains(baseControlId(rawKey)); + } + + // The 8 digitized thumbstick-direction raw inputs (see xr_input.h's own + // comment on QsRawInput) all point at the same physical stick, so + // res/controller_profiles/*.json lists just one "left_thumbstick"/ + // "right_thumbstick" control id per hand (one diagram anchor point, + // one row-visibility check) rather than 4 - this maps any of the 4 + // direction-specific names back to that shared id. Every other raw + // input (including the *_thumbstick_click ones, which are listed as + // their own separate control id - see CONFIG.md) already matches a + // profile's controls list directly, unchanged. + private static String baseControlId(String rawKey) { + switch (rawKey) { + case "left_thumbstick_up": + case "left_thumbstick_down": + case "left_thumbstick_left": + case "left_thumbstick_right": + return "left_thumbstick"; + case "right_thumbstick_up": + case "right_thumbstick_down": + case "right_thumbstick_left": + case "right_thumbstick_right": + return "right_thumbstick"; + default: + return rawKey; + } + } + + // Parsed res/controller_profiles/*.json content (see CONFIG.md) - name/ + // interaction_profile/image/controls straight from the file, plus the + // lazily-decoded image Bitmap itself (decoded at most once per profile + // object, not on every refresh - see loadProfileImage()). + private static final class ControllerProfile { + String sourceFileName; + String name; + String interactionProfile; + String imageFileName; + final Set controlIds = new HashSet<>(); + Bitmap image; + boolean imageLoadFailed; + } + + // Scans CONTROLLER_PROFILES_DIR for the *.json file whose + // interaction_profile matches activeProfilePath, falling back to + // GENERIC_PROFILE_FILENAME if none match (e.g. the folder is missing, + // or a future runtime reports a profile this build doesn't ship a file + // for) - same fallback reasoning as xr_input.c's own + // khr/simple_controller binding. Result is memoized per active-profile- + // path string (see cachedProfilePath's own comment); returns null only + // if even the generic fallback file can't be found/parsed. + private ControllerProfile loadControllerProfile(String activeProfilePath) { + if (cachedProfile != null && Objects.equals(cachedProfilePath, activeProfilePath)) { + return cachedProfile; + } + File dir = new File(CONTROLLER_PROFILES_DIR); + File[] files = dir.listFiles((d, name) -> name.endsWith(".json")); + ControllerProfile matched = null; + ControllerProfile generic = null; + if (files != null) { + for (File file : files) { + ControllerProfile parsed = parseControllerProfileFile(file); + if (parsed == null) { + continue; + } + if (activeProfilePath != null && activeProfilePath.equals(parsed.interactionProfile)) { + matched = parsed; + } + if (GENERIC_PROFILE_FILENAME.equals(file.getName())) { + generic = parsed; + } + } + } + ControllerProfile result = matched != null ? matched : generic; + cachedProfile = result; + cachedProfilePath = activeProfilePath; + return result; + } + + private static ControllerProfile parseControllerProfileFile(File file) { + try (InputStream in = new FileInputStream(file)) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buf = new byte[4096]; + int n; + while ((n = in.read(buf)) > 0) { + out.write(buf, 0, n); + } + JSONObject json = new JSONObject(out.toString("UTF-8")); + ControllerProfile profile = new ControllerProfile(); + profile.sourceFileName = file.getName(); + profile.name = json.optString("name", file.getName()); + profile.interactionProfile = json.isNull("interaction_profile") ? null + : json.optString("interaction_profile", null); + profile.imageFileName = json.isNull("image") ? null : json.optString("image", null); + JSONArray controls = json.optJSONArray("controls"); + if (controls != null) { + for (int i = 0; i < controls.length(); i++) { + String id = controls.getJSONObject(i).optString("id", null); + if (id != null) { + profile.controlIds.add(id); + } + } + } + return profile; + } catch (IOException | JSONException e) { + Log.e("QuestShock", "Could not parse controller profile " + file, e); + return null; + } + } + + // Decoded at most once per ControllerProfile instance (cached alongside + // it, see loadControllerProfile()'s own memoization) - a missing/ + // corrupt image file (e.g. the illustration hasn't been added to + // res/controller_profiles/ yet - see CONFIG.md) just means the tab + // shows no image, not a crash; imageLoadFailed avoids retrying the + // decode on every subsequent refresh. + private static Bitmap loadProfileImage(ControllerProfile profile) { + if (profile.imageFileName == null || profile.imageLoadFailed) { + return profile.image; + } + File file = new File(CONTROLLER_PROFILES_DIR, profile.imageFileName); + profile.image = BitmapFactory.decodeFile(file.getAbsolutePath()); + profile.imageLoadFailed = profile.image == null; + return profile.image; + } + private View buildTabBar() { LinearLayout tabBar = new LinearLayout(activity); tabBar.setOrientation(LinearLayout.HORIZONTAL); @@ -469,6 +941,20 @@ public class MenuOverlay extends OverlayPanel { tabBar.addView(videoOptionsTabButton, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f)); + View separator2 = new View(activity); + separator2.setBackgroundColor(0xFFFFFFFF); + tabBar.addView(separator2, new LinearLayout.LayoutParams(2, ViewGroup.LayoutParams.MATCH_PARENT)); + + controllerOptionsTabButton = new Button(activity); + controllerOptionsTabButton.setText(Strings.get("controller_options", currentLanguage)); + controllerOptionsTabButton.setBackground(selectableButtonBackground()); + controllerOptionsTabButton.setTextColor(buttonTextColors()); + controllerOptionsTabButton.setOnClickListener(v -> switchTab(controllerOptionsTab)); + controllerOptionsTabButton.setOnTouchListener(CLICK_ON_TOUCH_UP); + registerHoverable(controllerOptionsTabButton); + tabBar.addView(controllerOptionsTabButton, + new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f)); + return tabBar; } @@ -476,16 +962,35 @@ public class MenuOverlay extends OverlayPanel { if (tab == currentTab) { return; } + // Defensive, per the Controller Options tab's own design - leaving + // this tab (however it happens) always cancels a pending capture, + // so it can never be silently left listening for a press that will + // now land on a row the player can't even see. + if (currentTab == controllerOptionsTab && capturingActionIndex != -1) { + nativeRequestCancelControlCapture(); + capturingActionIndex = -1; + } currentTab.setVisibility(View.GONE); tab.setVisibility(View.VISIBLE); currentTab = tab; mainMenuTabButton.setSelected(tab == mainMenuTab); videoOptionsTabButton.setSelected(tab == videoOptionsTab); + controllerOptionsTabButton.setSelected(tab == controllerOptionsTab); + nativeSetControllerOptionsTabOpen(tab == controllerOptionsTab); resetHover(); if (tab == videoOptionsTab) { refreshVideoOptionsSelection(); } else if (tab == mainMenuTab) { refreshLanguageSelection(); + } else if (tab == controllerOptionsTab) { + // Reset to the top only on actually switching into this tab - + // refreshControllerOptionsSelection() also runs on every + // periodic stats tick while it's the visible tab (see + // refreshStats()), which must never yank a mid-scroll view back + // to the top. + controllerScrollView.scrollTo(0, 0); + controllerScrollBar.setFraction(0f); + refreshControllerOptionsSelection(); } relayoutAndRedraw(); } @@ -649,6 +1154,8 @@ public class MenuOverlay extends OverlayPanel { refreshVideoOptionsSelection(); } else if (currentTab == mainMenuTab) { refreshLanguageSelection(); + } else if (currentTab == controllerOptionsTab) { + refreshControllerOptionsSelection(); } // The stats text's width changes every tick (digit count, "ms" @@ -702,6 +1209,20 @@ public class MenuOverlay extends OverlayPanel { gameScreenTitleView.setText(Strings.get("game_screen", currentLanguage)); gameScreenWidthLabel.setText(Strings.get("width", currentLanguage)); gameScreenDistanceLabel.setText(Strings.get("distance", currentLanguage)); + + controllerOptionsTabButton.setText(Strings.get("controller_options", currentLanguage)); + controllerGenericNoteView.setText(Strings.get("generic_profile_note", currentLanguage)); + controlResetButton.setText(Strings.get("reset_to_defaults", currentLanguage)); + for (int i = 0; i < ACTION_KEYS.length; i++) { + controlActionLabels[i].setText(Strings.get("action_" + ACTION_KEYS[i], currentLanguage)); + // The listening row's placeholder also needs re-translating on + // a language change mid-capture; every other row's actual + // binding text is refreshed by the very next periodic + // refreshControllerOptionsSelection() call regardless. + if (i == capturingActionIndex) { + controlBindingButtons[i].setText(Strings.get("capture_prompt", currentLanguage)); + } + } } // "Dismiss" on the restart dialog - the live-appliable subset was @@ -793,6 +1314,27 @@ public class MenuOverlay extends OverlayPanel { private static native float nativeGetCpuUtilization(); private static native float nativeGetGpuUtilization(); + // Controller Options tab - same enqueue-only reasoning as every other + // request_*() above. actionIndex indexes ACTION_KEYS (must match + // xr_input.c's own action ordering - see that array's own comment). + private static native void nativeRequestBeginControlCapture(int actionIndex); + private static native void nativeRequestCancelControlCapture(); + private static native void nativeRequestResetPlayerControls(); + // Read-only queries, safe to call directly - same reasoning as + // nativeGetRendererIsOpenGl() etc. above. nativeGetControlBindingKey() + // returns one of xr_input.c's kRawInputNames strings (e.g. "right_b", + // "trigger", "none") - rawInputDisplayName() maps it to a localized + // label. nativeGetActiveInteractionProfilePath() returns the OpenXR + // interaction profile path string (e.g. + // "/interaction_profiles/oculus/touch_controller"), or "" before the + // first successful in-engine query. + private static native String nativeGetControlBindingKey(int actionIndex); + private static native String nativeGetActiveInteractionProfilePath(); + // Tells xr_input.c when Controller Options is the visible tab, so the + // menu's thumbstick locomotion is off while bindings are being tested + // or reassigned - see switchTab(). + private static native void nativeSetControllerOptionsTabOpen(boolean open); + // Called from xr_overlay.c's xr_overlay_init_jni(), on the render // thread, right after it resolves this class via the activity's own // ClassLoader (plain FindClass() can't see app classes from a thread @@ -841,6 +1383,56 @@ public class MenuOverlay extends OverlayPanel { }); } + // Called from xr_input.c's xr_input_process_capture() (via + // qs_config_notify_control_capture_result(), qs_config.c) on the + // engine's own SDL thread, once a capture resolves - either a + // successful press (actionIndex is the row that was capturing) or a + // second call reporting a *different* row that got displaced by + // exclusivity (see xr_input.h's own comment), or a timeout/cancel + // (rawName null). Rather than applying rawName itself, this just clears + // capturingActionIndex (if it matches) and re-reads every row fresh + // from native truth - correct for either call shape with no need to + // special-case which one this is. + public static void onControlCaptureResult(final int actionIndex, final String rawName) { + if (instance == null) { + return; + } + instance.activity.runOnUiThread(() -> { + if (actionIndex == instance.capturingActionIndex) { + instance.capturingActionIndex = -1; + } + instance.refreshControllerOptionsSelection(); + }); + } + + // Called from qs_config.c's qs_config_report_fatal_input_error(), from + // inside xr_input_init() - which runs before this class's own + // nativeInit() (see xr_session.c: xr_input_init() happens before the + // menu/keyboard overlays' xr_overlay_create() calls), so `instance` is + // guaranteed still null here and can't be used to reach the Activity + // the way showRestartDialog()/showMessageDialog() do. SDLActivity's own + // getContext() is set from onCreate(), long before any of this native + // XR startup runs, so it's used instead - the one deliberate exception + // to this class's usual "everything hangs off `instance`" convention. + // Non-cancelable, single "Exit" button, same hard-kill pattern as + // restartApp() (Runtime.getRuntime().exit(0), not finish() - by the + // time this fires, native startup is already partway through, so only + // killing the whole process is guaranteed to actually stop it). + public static void showFatalControllerBindingError(final String message) { + Context context = org.libsdl.app.SDLActivity.getContext(); + if (!(context instanceof Activity)) { + return; + } + final Activity fatalActivity = (Activity) context; + fatalActivity.runOnUiThread(() -> new AlertDialog.Builder(fatalActivity) + .setTitle("Controller setup failed") + .setMessage(message) + .setCancelable(false) + .setPositiveButton("Exit", (dialog, which) -> Runtime.getRuntime().exit(0)) + .create() + .show()); + } + public static byte[] nativeTakePixelsIfDirty() { return instance == null ? null : instance.takePixelsIfDirty(); } diff --git a/android/app/src/main/java/de/ladkau/questshock/OverlayPanel.java b/android/app/src/main/java/de/ladkau/questshock/OverlayPanel.java index 6733d7b..d621f9e 100644 --- a/android/app/src/main/java/de/ladkau/questshock/OverlayPanel.java +++ b/android/app/src/main/java/de/ladkau/questshock/OverlayPanel.java @@ -271,7 +271,11 @@ abstract class OverlayPanel { // Absolute bounds of view within this panel's own coordinate space // (i.e. relative to root, which is always laid out at (0,0,width, // height) - see the constructor) - View's own getLeft()/getTop() are - // parent-relative, so this walks up the parent chain summing them. + // parent-relative, so this walks up the parent chain summing them, + // additionally subtracting each ancestor's own getScrollX()/getScrollY() + // (0 for a plain ViewGroup, non-zero for e.g. a ScrollView - see + // MenuOverlay's Controller Options tab) so a view inside a scrolled + // container reports its actual on-screen position, not its laid-out one. // Assumes view is actually part of this panel's tree (every registered // view always is, since registerHoverable() is only ever called from // buildContent()). @@ -285,7 +289,10 @@ abstract class OverlayPanel { if (current == root || !(current.getParent() instanceof View)) { break; } - current = (View) current.getParent(); + View parent = (View) current.getParent(); + left -= parent.getScrollX(); + top -= parent.getScrollY(); + current = parent; } return new Rect(left, top, left + view.getWidth(), top + view.getHeight()); } diff --git a/android/app/src/main/java/de/ladkau/questshock/QuestShockActivity.java b/android/app/src/main/java/de/ladkau/questshock/QuestShockActivity.java index 054bb17..6c41201 100644 --- a/android/app/src/main/java/de/ladkau/questshock/QuestShockActivity.java +++ b/android/app/src/main/java/de/ladkau/questshock/QuestShockActivity.java @@ -23,7 +23,7 @@ import org.libsdl.app.SDLSurface; * SDL_RWops, so Android's asset-manager fallback for SDL_RWFromFile * doesn't apply here) expects to find it - see android/engine-patches/ for * why this is done from Java instead of patching engine/ itself, which is - * never modified.q + * never modified. * * super.onCreate() (SDLActivity's) must always run first and unconditionally * - Android throws SuperNotCalledException otherwise, checked right after @@ -39,7 +39,8 @@ import org.libsdl.app.SDLSurface; public class QuestShockActivity extends SDLActivity { private static final String TAG = "QuestShock"; private static final int PERMISSION_REQUEST_STORAGE = 1; - private static final String GAME_DIR = "/sdcard/questshock"; + // Package-visible: MenuOverlay reads controller_profiles/ from here. + static final String GAME_DIR = "/sdcard/questshock"; // Loaded here (rather than waiting for SDLActivity's own // getLibraries()/loadLibraries(), which only runs from super.onCreate()) @@ -143,7 +144,7 @@ public class QuestShockActivity extends SDLActivity { // is already there, assume a previous run already extracted everything. File marker = new File(gameDir, "GET_ASSETS_QUEST.txt"); if (!marker.exists()) { - copyAssetDir("shaders", new File(gameDir, "shaders")); + copyAssetDir("shaders", new File(gameDir, "shaders"), false); copyAssetFile("res/soundfont.sf2", new File(gameDir, "res/soundfont.sf2"), false); copyAssetFile("GET_ASSETS_QUEST.txt", marker, false); } @@ -155,6 +156,13 @@ public class QuestShockActivity extends SDLActivity { copyAssetFile("questshock.config.default.json", new File(gameDir, "questshock.config.default.json"), true); + // Refreshed on every launch. MenuOverlay's Controller Options tab + // matches the active OpenXR interaction profile against these files' + // "interaction_profile" and shows the paired image (see CONFIG.md). + // Only the bundled filenames are overwritten, so profiles a user adds + // to this folder are kept. + copyAssetDir("controller_profiles", new File(gameDir, "controller_profiles"), true); + // Shockolate's engine/ is never patched to check this itself (see the // class doc above) - it just does plain fopen("res/data/...", ...) // and, on a fresh install with no game data copied in yet, that @@ -239,7 +247,7 @@ public class QuestShockActivity extends SDLActivity { } } - private void copyAssetDir(String assetDir, File destDir) { + private void copyAssetDir(String assetDir, File destDir, boolean overwrite) { AssetManager assets = getAssets(); String[] entries; try { @@ -253,7 +261,7 @@ public class QuestShockActivity extends SDLActivity { } destDir.mkdirs(); for (String entry : entries) { - copyAssetFile(assetDir + "/" + entry, new File(destDir, entry), false); + copyAssetFile(assetDir + "/" + entry, new File(destDir, entry), overwrite); } } } diff --git a/android/app/src/main/java/de/ladkau/questshock/Strings.java b/android/app/src/main/java/de/ladkau/questshock/Strings.java index 4b79040..fa29c2a 100644 --- a/android/app/src/main/java/de/ladkau/questshock/Strings.java +++ b/android/app/src/main/java/de/ladkau/questshock/Strings.java @@ -61,6 +61,106 @@ final class Strings { "Clavier - faites glisser ici pour dĂ©placer", "Tastatur - hier ziehen zum Verschieben"); put("close", "Close", "Fermer", "SchlieĂźen"); + + // Controller Options tab: action row labels, keyed by xr_input.c's + // action names (see MenuOverlay.ACTION_KEYS). + put("controller_options", "Controller Options", "Options de manette", "Controller-Optionen"); + put("action_move_forward", "Move Forward", "Avancer", "Vorwärts gehen"); + put("action_move_back", "Move Back", "Reculer", "RĂĽckwärts gehen"); + put("action_strafe_left", "Strafe Left", "Pas latĂ©ral gauche", "Seitwärts links"); + put("action_strafe_right", "Strafe Right", "Pas latĂ©ral droit", "Seitwärts rechts"); + put("action_turn_left", "Turn Left", "Tourner Ă  gauche", "Nach links drehen"); + put("action_turn_right", "Turn Right", "Tourner Ă  droite", "Nach rechts drehen"); + put("action_jump", "Jump", "Sauter", "Springen"); + put("action_mouse_click", "Click", "Cliquer", "Klicken"); + put("action_mouse_double_click", "Double-Click", "Double-clic", "Doppelklick"); + + // Hotkey actions (see xr_input.c); all unbound by default. + put("action_stand", "Stand", "Debout", "Stehen"); + put("action_crouch", "Crouch", "Accroupi", "Ducken"); + put("action_prone", "Prone", "CouchĂ©", "Liegen"); + put("action_toggle_freelook", "Toggle Free Look", "Basculer la vue libre", + "Freies Umsehen umschalten"); + put("action_pause", "Pause Game", "Mettre en pause", "Spiel pausieren"); + put("action_full_view", "Fullscreen View", "Vue plein Ă©cran", "Vollbildansicht"); + put("action_normal_view", "Normal View", "Vue normale", "Normale Ansicht"); + put("action_map_view", "Automap View", "Vue de la carte", "Automap-Ansicht"); + put("action_save_game", "Save Game", "Sauvegarder", "Spiel speichern"); + put("action_load_game", "Load Game", "Charger", "Spiel laden"); + put("action_select_grenade", "Select Grenade", "SĂ©lectionner une grenade", + "Granate auswählen"); + put("action_arm_grenade", "Arm Grenade", "Armer la grenade", "Granate scharfmachen"); + put("action_select_drug", "Select Drug", "SĂ©lectionner une drogue", "Droge auswählen"); + put("action_use_drug", "Use Drug", "Utiliser la drogue", "Droge benutzen"); + put("action_toggle_online_help", "Toggle Online Help", "Basculer l'aide en ligne", + "Online-Hilfe umschalten"); + put("action_show_help", "Show Help", "Afficher l'aide", "Hilfe anzeigen"); + put("action_toggle_music", "Toggle Music", "Basculer la musique", "Musik umschalten"); + put("action_quit", "Quit Game", "Quitter le jeu", "Spiel beenden"); + put("action_cycle_weapon_next", "Next Weapon", "Arme suivante", "Nächste Waffe"); + put("action_cycle_weapon_prev", "Previous Weapon", "Arme prĂ©cĂ©dente", "Vorherige Waffe"); + put("action_cycle_detail", "Cycle Detail Level", "Changer le niveau de dĂ©tail", + "Detailgrad wechseln"); + put("action_reload_weapon_primary", "Reload Weapon (Primary)", + "Recharger l'arme (principal)", "Waffe nachladen (primär)"); + put("action_reload_weapon_secondary", "Reload Weapon (Secondary)", + "Recharger l'arme (secondaire)", "Waffe nachladen (sekundär)"); + put("action_hud_color", "Cycle HUD Color", "Changer la couleur de l'interface", + "HUD-Farbe wechseln"); + put("action_clear_fullscreen", "Clear Fullscreen View", "Quitter la vue plein Ă©cran", + "Vollbildansicht schlieĂźen"); + put("action_mfd_left_1", "Left MFD: Weapon", "MFD gauche : arme", "Linkes MFD: Waffe"); + put("action_mfd_left_2", "Left MFD: Item", "MFD gauche : objet", "Linkes MFD: Gegenstand"); + put("action_mfd_left_3", "Left MFD: Map", "MFD gauche : carte", "Linkes MFD: Karte"); + put("action_mfd_left_4", "Left MFD: Target", "MFD gauche : cible", "Linkes MFD: Ziel"); + put("action_mfd_left_5", "Left MFD: Info", "MFD gauche : info", "Linkes MFD: Info"); + put("action_mfd_right_1", "Right MFD: Weapon", "MFD droit : arme", "Rechtes MFD: Waffe"); + put("action_mfd_right_2", "Right MFD: Item", "MFD droit : objet", + "Rechtes MFD: Gegenstand"); + put("action_mfd_right_3", "Right MFD: Map", "MFD droit : carte", "Rechtes MFD: Karte"); + put("action_mfd_right_4", "Right MFD: Target", "MFD droit : cible", "Rechtes MFD: Ziel"); + put("action_mfd_right_5", "Right MFD: Info", "MFD droit : info", "Rechtes MFD: Info"); + put("action_fire_weapon", "Fire Weapon", "Tirer", "Waffe abfeuern"); + put("capture_prompt", "Press a button…", "Appuyez sur un bouton…", "Taste drĂĽcken…"); + put("reset_to_defaults", "Reset to Defaults", "RĂ©initialiser", "Auf Standard zurĂĽcksetzen"); + put("generic_profile_note", + "This controller only exposes a trigger and a menu button - most actions above have " + + "nothing to bind to.", + "Cette manette n'expose qu'une gâchette et un bouton menu - la plupart des actions " + + "ci-dessus n'ont rien Ă  quoi ĂŞtre assignĂ©es.", + "Dieser Controller bietet nur einen Trigger und eine MenĂĽtaste - die meisten " + + "Aktionen oben haben nichts, woran sie gebunden werden können."); + + // Raw physical-input display names (xr_input.c's kRawInputNames); + // "none" is the unbound sentinel. + put("raw_left_trigger", "Left Trigger", "Gâchette gauche", "Linker Trigger"); + put("raw_right_trigger", "Right Trigger", "Gâchette droite", "Rechter Trigger"); + put("raw_left_squeeze", "Left Grip", "PrĂ©hension gauche", "Linker Griff"); + put("raw_right_squeeze", "Right Grip", "PrĂ©hension droite", "Rechter Griff"); + put("raw_left_x", "X Button", "Bouton X", "X-Taste"); + put("raw_left_y", "Y Button", "Bouton Y", "Y-Taste"); + put("raw_right_a", "A Button", "Bouton A", "A-Taste"); + put("raw_right_b", "B Button", "Bouton B", "B-Taste"); + put("raw_left_thumbstick_click", "Left Stick Click", "Clic du stick gauche", + "Linker Stick-Klick"); + put("raw_right_thumbstick_click", "Right Stick Click", "Clic du stick droit", + "Rechter Stick-Klick"); + put("raw_left_thumbstick_up", "Left Stick Up", "Stick gauche haut", "Linker Stick hoch"); + put("raw_left_thumbstick_down", "Left Stick Down", "Stick gauche bas", "Linker Stick runter"); + put("raw_left_thumbstick_left", "Left Stick Left", "Stick gauche Ă  gauche", + "Linker Stick links"); + put("raw_left_thumbstick_right", "Left Stick Right", "Stick gauche Ă  droite", + "Linker Stick rechts"); + put("raw_right_thumbstick_up", "Right Stick Up", "Stick droit haut", "Rechter Stick hoch"); + put("raw_right_thumbstick_down", "Right Stick Down", "Stick droit bas", + "Rechter Stick runter"); + put("raw_right_thumbstick_left", "Right Stick Left", "Stick droit Ă  gauche", + "Rechter Stick links"); + put("raw_right_thumbstick_right", "Right Stick Right", "Stick droit Ă  droite", + "Rechter Stick rechts"); + put("raw_trigger", "Either Trigger", "L'une ou l'autre gâchette", "Beliebiger Trigger"); + put("raw_squeeze", "Either Grip", "L'une ou l'autre prĂ©hension", "Beliebiger Griff"); + put("raw_none", "(unbound)", "(non assignĂ©)", "(nicht zugewiesen)"); } private Strings() {} diff --git a/android/engine-patches/23-android-intro-language.patch b/android/engine-patches/23-android-intro-language.patch new file mode 100644 index 0000000..a42b078 --- /dev/null +++ b/android/engine-patches/23-android-intro-language.patch @@ -0,0 +1,42 @@ +--- a/src/GameSrc/cutsloop.c ++++ b/src/GameSrc/cutsloop.c +@@ -292,11 +292,38 @@ + + + ++#ifdef __ANDROID__ ++// The intro (cutscene 0) ships in one file per language - localized ++// voice-over - each holding the same resource id (cutscene_anims[0]), so ++// opening the current language's file instead is all it takes. The death ++// and ending cutscenes only have one version. ++static char *intro_files_by_language[3] = ++{ ++ "res/data/svgaintr.res", // English ++ "res/data/svfrintr.res", // French ++ "res/data/svgeintr.res" // German ++}; ++ ++static int open_cutscene_file(int id) ++{ ++ if (id == 0 && which_lang > 0 && which_lang < 3) ++ { ++ int handle = ResOpenFile(intro_files_by_language[(int)which_lang]); ++ if (handle > 0) ++ return handle; ++ // Not installed for this language - fall back to English below. ++ } ++ return ResOpenFile(cutscene_files[id]); ++} ++#else ++#define open_cutscene_file(id) ResOpenFile(cutscene_files[id]) ++#endif ++ + short play_cutscene(int id, bool show_credits) + { + MacTuneKillCurrentTheme(); + +- cutscene_filehandle = ResOpenFile(cutscene_files[id]); ++ cutscene_filehandle = open_cutscene_file(id); + if (cutscene_filehandle <= 0) { + // If we failed to play the cutscene, go to setup / credits. + _new_mode = SETUP_LOOP; diff --git a/build-image/prepare-android-project.sh b/build-image/prepare-android-project.sh index 1b01ce7..8ae235c 100755 --- a/build-image/prepare-android-project.sh +++ b/build-image/prepare-android-project.sh @@ -92,6 +92,7 @@ cp -a "$ANDROID_DIR/gles-shaders/." "$ASSETS_DIR/shaders/" cp "/opt/prebuilt/soundfont/default.sf2" "$ASSETS_DIR/res/soundfont.sf2" cp "$REPO_ROOT/res/assets/GET_ASSETS_QUEST.txt" "$ASSETS_DIR/GET_ASSETS_QUEST.txt" cp "$REPO_ROOT/res/questshock.config.default.json" "$ASSETS_DIR/questshock.config.default.json" +cp -a "$REPO_ROOT/res/controller_profiles" "$ASSETS_DIR/controller_profiles" echo "== Staging prebuilt Android SDL2/SDL2_mixer/fluidsynth-lite/openxr .so's into jniLibs ==" # gl4es is deliberately absent here - it's no longer prebuilt, it's compiled diff --git a/res/controller_profiles/generic.json b/res/controller_profiles/generic.json new file mode 100644 index 0000000..49a4bc1 --- /dev/null +++ b/res/controller_profiles/generic.json @@ -0,0 +1,9 @@ +{ + "name": "Generic OpenXR Controller", + "interaction_profile": "/interaction_profiles/khr/simple_controller", + "image": "generic.png", + "controls": [ + {"id": "left_trigger", "label": "Select (Left)", "anchor_x": 0.30, "anchor_y": 0.60}, + {"id": "right_trigger", "label": "Select (Right)", "anchor_x": 0.30, "anchor_y": 0.60} + ] +} diff --git a/res/controller_profiles/generic.png b/res/controller_profiles/generic.png new file mode 100644 index 0000000000000000000000000000000000000000..1493fc56b8a80a698d2126889da5f8711c532f04 GIT binary patch literal 27379 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 |@-Ssac>G+kP7j;;3lVkXSX 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 literal 0 HcmV?d00001 diff --git a/res/controller_profiles/vive.json b/res/controller_profiles/vive.json new file mode 100644 index 0000000..6319407 --- /dev/null +++ b/res/controller_profiles/vive.json @@ -0,0 +1,15 @@ +{ + "name": "HTC Vive Wand", + "interaction_profile": "/interaction_profiles/htc/vive_controller", + "image": "vive.png", + "controls": [ + {"id": "left_trigger", "label": "Trigger", "anchor_x": 0.13, "anchor_y": 0.62}, + {"id": "right_trigger", "label": "Trigger", "anchor_x": 0.78, "anchor_y": 0.62}, + {"id": "left_squeeze", "label": "Grip", "anchor_x": 0.08, "anchor_y": 0.68}, + {"id": "right_squeeze", "label": "Grip", "anchor_x": 0.85, "anchor_y": 0.68}, + {"id": "left_thumbstick", "label": "Trackpad", "anchor_x": 0.20, "anchor_y": 0.42}, + {"id": "right_thumbstick", "label": "Trackpad", "anchor_x": 0.72, "anchor_y": 0.42}, + {"id": "left_thumbstick_click", "label": "Trackpad Click", "anchor_x": 0.20, "anchor_y": 0.42}, + {"id": "right_thumbstick_click", "label": "Trackpad Click", "anchor_x": 0.72, "anchor_y": 0.42} + ] +} diff --git a/res/controller_profiles/vive.png b/res/controller_profiles/vive.png new file mode 100644 index 0000000000000000000000000000000000000000..6ddb8213e011338362224df5edcc1968058b23f9 GIT binary patch literal 78593 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ªT)DZYEbv^VRspC9!uEH;`Id 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 A_W%F@ literal 0 HcmV?d00001 diff --git a/res/screenshots/gallery_016.jpg b/res/screenshots/gallery_016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92b25a3897be07a27602083fcfe49eff46601856 GIT binary patch literal 289424 zcmeFZ2T)YaoBul`K_rNh(;%QAQIa5OKqO1fIVw5lI0^zv6cA8Aaz;SHkb~qTAUS6w zhan6MFwETX{q63%wYB%|?|<*z+S;l)R9nqCZJ+Zz{TZgePd|N7GpH57T_rh1IRF+G z0Dy)50iad^3bMX-uK@rR6#xeS03bkLBLQHeYY)+d7F_^pGCD7Hw9KTnwKWx=>u4*g zshTOi5PkCR4sLFAPit5+iZU{0>Y8eDiZ5mVaf?1jD<==^y8wWbv!}bJ{BtIK14AbK zH2@BP9B>;z0${MP@^DqrlGFZk9}f#34=Yc1$3OMIkMpTN&j|pGbK6=tTYrrQNJzc; zE+OT~^)@4)Iri^%|7q>E^(zl6^c5(&&|A5>d!o%ILf46WJYE0PsnKs){8 zHvgzg{i$32qyFdF$lbLyWzcPG(RFj1e^?{h9$0D#B|0Du$s_c_aC0HE#z06;zW_c>N{JJK)!ptj4( z%ia4Q{rxq9fdDvGI<^;1C~p5PRf2nj)I^pfXJjMf=hXJ}JWMjI-yYlZ1Pkmvs|HQU z>8U)`_BN)nW^fGm(hZJz&z0~ry|gg8YQFW$K=1Uc4WHvn6bdyDkOAP~;Ns%q;GzG) z!^69UPeg!^K1lD}xlKeydhZ??DH+*)N_wjM#iKR(eJt zmc-X04^Ecy$5{Kx9)3L;4{0C^S_PH zCSZA9*-oK33S||rbPu^rNJ&LaL;LU%8~bApL7}I@BF{u+UdYPHD<~>yY3u0fp$Egt z`qgV2TRVFXPcLsDUqAoQcVXcX?>|H)Bz{UtPWk*LH77SOzo4+FxTLDO22xvB-_Y36 z+11_C+t)uZHa;;qH9a#sx4O2z@q2S?duR9f3LwK zfMEc`0EPh!0~iJ{3}6_*Fo0nI!vKZ>3LwKfMEc`0EPh!0~iJ{3}6_*Fo0nI!vKZ>3LwKfMEc`0EPh!0~iJ{3}6_*Fo0nI z!vKZ>3LwKfMEc` z0EPh!0~iJ{3}6_*Fo0nI!vKZ>3Nu(8L+d>Jef!0+&Daic)ns(u6@QGH;w{S znCY}@FI11RlvGOpIbubjlw4Pb zznMbTZZrxOi2^(*?sptO0W2Ws&dlJ)C;+Y6_c;_`gcspEnaat#|FRDGb`=G9BaetU zU|UQwQmbXbG6?F_0#%zM5t*M+0Kz6&3rYHcfC18%tM1u+z5p9#T3fW_4@7@9f^J=E1&@Fb$BD>Gp%z&S z5D7Hq8e*N&j{4M#XQ_EIgnL?zg znG+gCIlsc)=I^5b3E=b2tF8E94HE{T^_U(8iirB57l>!6riaW&h^HvP{AXm{hR1|1 z3hnN+u!4zd(DeXLjl$^Z~Qk=04m~ z$~u&eRR*?}6UdU@Zt@GvMs@i_KhmZ6d1TW~8t7sjF#^~4*NQH1x5o+nF<=EbsWmA5 zY2da8+|sxS-$VL=*EFLpQk73;ii-J6=T!2K}R1N0r|r z>$XisFdVn7FL;b$)G+c(nKSuH2m13ca*}r~{>Qg!*BjH~RS08~d?m#z&=JsPqU!%uP|*#Ve>@xlLQ2Fjf1kP=2W zr-(4?si|Z@)pLAJMa15LFJW4SL-44}iCOVbWbo?i7ONGTP8GIpQQgXQQmS2kyCup| z*E&+*a`JPm83_@VQ;H4PnOdg_|CZ@Z9Ks;S7aTNIBJ{2$V@crj^N;Ae_~4}52!}Jo z1(_(d?TKn#WQ*_bApf}GmWy-QQ5fkR-l#ykwL6c`hWN){ z+9LMy_`$;aqnplHbU;S;CD{(NqcffA2|Ytd3Hk+_@2?&Qvy zmL*2GKeRD_M`3JUPVbRvc#RjR?6U^GYp>}m&_(N=Ysc_57L2od{%A}=!7Oca{-b;W z>7KFdbS%OoFSt*!s5j_bd9_$F^B$yGWn(@sLp=)biEC+{w?MC<#@fqQrV2gj+UYCb z=G$6=Xx-XW#vCA>Gu>X2$`#U3P^V&`8g!&j(_h;)l)VGpWP{8q zwnf3+;D}5jSd5I^cukCv;dD&cL^2t{WY#>(J^XSO#`^xEeVAGJ1&GdU^Fm9I9v zNLJ*JU#XMMh?Gp>d*mvm(I;42@pCN~x=`UaND^N*tz(|LEF*aN`MPfEh-zI63ZNaI zdzb&&21y|bFli$EqYmy;j!+*LI>MflFR<66C7wPHPa^1$YR_$FXiV1?X?=vA{1h9J zsv4J^C)G6SO`4vc9*T@!Bsjv+eO0HZP8`-;hlD#AWY7@Om;bgTAuW)VcW{xI{OLV4 zDn72%&hmohHCq;T%kp|#D1r{U+<8#AJLlQh77MEj=yVMbH^LT6 ztTwatysGthGk1+{drJT8&ZEW`uli02#MD+~{eknY$l(kj*;%LYF9(H*{tlKBXDc40V%Dt)cGpxg@mkg}Ui{9r|^N9ek zCZ-{C+oF11ZSRnR$NL>V$4Oy34Gk{OJ_~ZW174oZpOApUYpo!^khq4vVy3k0lL&`m zeetn*lb6_Yep!yM=v1lQ+dh0-{VLKqQ-7+b(lf_8XS{e8(}=`5_g~IloofpZRLq?( z8?IQrF;WYQrBp6`#;h5HWsYY(Ju~+^GfvPf#O!W)F!yfl)lcE6Yr!IOFvRbE`hod? zq%3ZQv6WNcI+RML=9sOAlz6-D_=8h94+`KLk&7o62wsO61be}vCG5wQCXT+DjMup2 zkIh@Ceoa*_?j9uib#Q8#AkoR$pwI`SUD@%?(^as67DuKP>Sl8O zj-LE_m=AtvQ&4KAp-RZH^F>f^5=bh^w&TCt#enl8lLT?wKI7iW6y3YlD%}Q)5L5YA zuW>Rq(i2C7R@)c^Z|*C@>((Sdol&$qu8Rk6t)A&zYJX>JuOsbM zsD0J~F##sGX0x-Ff9V=EQ$!A?>a`z{IT(6}`mH()S#|N+aCdK9jJ+P?4*eLvMda_r z*gOrqehL?mI&O>e3X(UeUCh~edScdZ+l)^mroR6DtSBQuDYNeUV}f>q^ZC?4zLP&> zs#7}+lCc%5VJ81Dvl9hCYnnUaCdIargf-CN>eUIVCs6{(T7j?GO&%efTP=qbO~^ zwKBwRe^ln8a=Xun#pbQ=wBl24)(*Ub2wGRB;cXUJEp58ipSSzWFZb>WdmjrSph{DI z%hij;P`uRVXHDz$bdkHFnErZE#S5rSr){~oPSN&~_%svLcHBy@Ubyu1sVYF#Rc({Q zWsYtY83*0!PBo3svDZtDfo#SRU#qy6d^42)=n9~wmKAv>o?#nn7oPmUBIoE)d5w4N z^+EMEeeAUORODi4dn<4KI7u;nn9!^v_Mxz1;lL=?UNa9Ld|D40x@x^7JPu<3Yfm|O zk`miR-`i8KXQAuEw~RBs3nqixnE@lRRVLCWQ$|duOakBK%vXsoMQ$URb{K(U;yOHO zt0rEMYdq~)Pv*xheZQrSLVIMbmUbFr67ZYH4-b+WX)LVqPbnZA&|-pqyC9u2u*Zao zez9yoY}B>Hh){SmT2#fHIpG*gS>Btq(<3m{)4Gs;MlCs0?t-3E<034|eA|qm8yzDm zK}7LjFRw>TQPH7I^-LiW?<*vqZDK2_=$IZ}9|V}#l{eZ2DW7ZY`z2BA&Q-JzW)dyi z`loz=EI!@qp#9pLFt-#1nq!UvdDd!MrF(?%WjK6-SFE7LMg&r@5qfYIVjfvFKb-qJ zgYq|h5csoD3(?4(_o-ozO={*Y#XzaMb$ZWT6ZC8z%aZH)VabxK|Ci|zD;T{n;yP|2Vu)u$Zf+rj=e+EzL(anL6@ax+R9;7 zA2>zt9Gey0w5V?SoSWSUqX502tFwQR;2vlRZYYQrR?f<3VFf<11E0uTb*pZ={3X)X zk(VgI-ZoC9v(1#ZZN($Hokk7XNZpr`*e-hi zlBy$BPYmZ)Rf+h6@1#opEzmvMNT79NHLV+Dnje=w@hf{>$^P# zbv>ZFp{57knK|H+KLR~H2d&LX;SoR>TF?D0&KdEuihka`rx?z!cFkN>ygH-<)l-{# zdZRzZ?InjtkzLyLp7}9t(UzE;1gB&x%hN%dWXr9vw5AvcOc7bA^6a$tGkZ?tsWLiv z`UX=lKKLJFV1695-UI5rOzkSWR^_%t0bIcx*C+t#<7Ecjplp|xij!wpFqyHEkLHBs)$z?u^0 zTQ6heHeTS_dz>Yy_6Y?zz?vXw+Y)-4g$Rac=fItb2}g{>vLQOkcAM3aimTFb@g@6At4dof1o6QtSaWKU)!wF0 zEI#!7Rf}KDch@+;&A-ExxW=@!sv@ z3iTSOUT6(5r<}5KCXv~lz9ZT#->)J3ceQNiKW@QeyekoIa3|9D*2l26&cV;k4y@KR z#7lc#AIrsmw6?;B0)NY@m;!%HTyvXV)TA~#A4qtqoY9uD28@Ka^1{u!mPneQDcxyw zdugvHSX&{@RU*EFm6kEf#Ud=V63-@~DLrlB8TXETo1jM_hi8kD;|d8Kb8B-1F^fNA zwZA;F9E?BVdB&D#CNgR;vHFw#GNn0}w<=AeX)%A3uqMuGT9Vxt+_Owz37wARhEN?p z{iHYsQDD&{slQH0_z``!Ef2V|yx8~pHs8MPWYuwTulM#b$(M(arY5V4-P^JVX_r2| z2<<6hJxbw^ONK9@#!_nvc{1U0_)L*gwaRk(O7(_@j~6f5TB9Ja?@97M^F~bJ_-jtW ztA$+$E;7fRDo)u;MrwujZZ%w8{Fxt<)K%RH)~`3Fq8Y{E;B{~eBm1NzbH|qK#F~Qy z#|q2$O4&qD;^w!KM2K9I*dD{!lvgcHnj~N&QN(z5|RLLM1V2Y+Jlb@ z4c)u6orNA!P_CW(+t)11R#+!R9MFzB20frGTmgk=;)@%teg&;jv_&0xZPU{EIx$(t z5)a07-IJ2oi-%4lm@^4mIeqE6bTb}BnbxqgP0-?^Be_ny>c{)kwW7zSVzL~59FeI> zx;Ock=f=~CEFfsB9OiCRin>{%GMe z>@~v86t5J{SKcg<=UeMSzO88tkI;J3lBy~`sJW5I+P0|ff2D^nOD&#LPHT*uZ7|@h zX{BBoJo0fVQp!n@+27;E9a$NP0L_@)5o)`mQnpKGr9Ndd$wGof|IPe$vl)^S)CGJO z;)3-Zy0|rKkmqN(=p03J+dXjj_Vwhtpf0s3P~Ba>n4?7X@OZK{_9B2Y@7psSqzP#j z$goeb-^Jq%0?=21+8@O06jP# zG^*GCD8_T9>`;iZwx;@feZ1OS?K8G)5a%tHZDJs{B$Ka9H;`If%n849gcz>7wxpOJ zzWZ}E-{VeBZy&=l2ugc7ZgNc7RDKDbr)@caM_b^YQrAb^(Tlt=azqi3({Jh2RDD~So+&QIlAVIHszF4U&RoOa78hS_icq#r^ zW{szGEsEQaPK&rx@PcsdaX*iCw)m4CzSvOgf(g=yl=A?%FV7j6+FqA=n9XYSiuFAOAh?x0yvr=c@pwti7)E{Z>^DMd-3inI1SEDz(m)~M*~Gn(71-Ti zM{lFY$tG3efp>pD$7;fL*~;MTtQnaDuEm7MP^Jn67$t|{x-KplbEhw`J5->J4GLvI4)P2Syaa(+Pczo4ZMMQRhLzPF=!;ZCLj$Rni3H@0B^RF7Sk`a9NXN9;PQ=a!Etr`-8fXSW$q zFpG2ve4w*OxzO;-6t(9l{&@iLyp9^{P3Lq5>94>&-d-?6|1sf6k6ZwsL^`(@F*7o-ed9vTv(WQvnT^-soXXsRnQRWEx%a@Lcq(}OgO~7u#A<+p)&mqkZoKP(81H9y`3*1! zj5k`v1sE#HXFP{{Uy+s1n0!}l_7^>px`KEVWSiFKcsA>`jJIt#RhQTC;QQq3=Z|8f zexMhb3@Z_2$8FkUup_bs-$dn5voVCiHH_{Vo$X>YcHzyhTM}W$RmL6ad0#;*d3B~Y z1sPv!Oq_~Z@_1kibE9l7aLX85GfHbS@;qIO`rgCQ_hzQbnZt?a;c5q@p>4N?E(g+j z$E<6TW;PY?@#pZXX}zI4wlAyjEdfVW*@B1yNmrx5q_&iGD(>I8(mq%c*coShCR*^A zKB>6Ygr_M@KyIiy49Q20?T}PePlE$(I8N#PKA+>suV*TqJ*g?V@lO%-v)&SoaT%my z)CsWj69d65t*1FJS$ei}BClEg%<=*MohA1hTA?+9+io~HAdpP>h1vxQko_$cAs-9g zaN$)z%IAk8snM%VC-_ntvg80v!T8`mV?g_3H|tMbp?(}82G3T!w-1wdHe&Sg)cGYL zo~t7~8r>!{gH^v^Mq?dQqxtjGMEIwImw}*fFMc!jNOczVfu>q+P2AB`sVB23AB`Ss z5~zI5nm93S?CQTeM8OuMCgMb=&ES}iD0w8x54w*ue&vi?HhqtFt`2Uu+WXwunU`s+ zq+SFVU+yQ}J^L}yCT7&M!2>$j8O3yW_u^+u|6>%OYkYduB_a)UEYWC8!havZ@xl*} zVwV@%tIAIiWtd3Qqx86_ypv>zG{G_4thGQrjkMi)};^#ybsUIWoy5%*%6dS0c>)9a*b|% z((~bMKl%_K-4+TX?X*D3RSN+lGDOCEoDtk5a(tOEytZW9?*{2D6b&c<0XPc0tvf9N z-T?BV0QYsu#U(1{tqy1z3rYO_l4IL`YLb1CHF09m)kq#Yl7gYF)G@G3V4LM~q4R&z zo^|U#!}`xTy?Wc$JELi`mBQZ6b)eUA!(Brc=P`>UqFedCK|!KX5DIyV$lZ?hN|9&J zEH>AcZ7g3=aE}gw-qzgOA>TVgi&n$8t-$TP1Rmb$8HF~4ir0i*KI6k7D~MmvMgVP4 ztT;k)EWl)$6n+l{I2P=I2Na+H#ITvG1JGELD5p-hA9^y9a&&06!Pt>$6`r`dSP5*J z*wjK!NTC248o&s)+Dde2Y569}XF_*$o&Gm?@CcC%+Tbl6-}gI)d$BngkWP^z2R<*8 z9JWPhy}Pkuxth+=Ff4yMOoeDRgA;-K%ybK9P8B7A_F2folm3Wn*@!d2&J|)?@L)GO zhp#pUjoWmghGB1P^{b|+%R9R@BRrDW)A;h$AVpHRw#$l>pTE5GvZ6e!LMI1e9F)pE z0YvAjd~Pkp>6>qFWxN?MY9xD=(X~mQ;Kk^=lM0(0NZfnh;hJ3Zn$zdjV#cix3{?6I zo@wZeBj+O|`FP%LZuu8~$?w8&y}D5&UNQ$*R_g`w`Bl!LuY=vi-o-a(y}kS3FlknI zIX70vh|zG)CEGHqHNn;?APRt9;5v}m&9HepYI>%lrh^YH_-x@^DHmMAsk0_1x{3mv zxF9FYv`@tuBQNBus=#e_&dd7kMI=$ViHUhL_X2Ldf;wvB-q#1$0GGmG@(aftoO7{Z zIhmL5X3+UnVdx|$D_^9RFe-Ejw3l|@}U(G8`Mtx50HEO zC;*Fk<}J7f^6dtA-VX#XnUj3*s=`<8FzzoWsWpnnM#6Ge+DI~zRV5Qa@Nv3!TC5%1 z!Lv_OrEyhtV`lCs0AG-<%_j}hY_>O^a?cDZv}Uc%b|EzIpgixUR&>B}90mALX4Pw; zyrgM%zTH};ek#g27T38b06AE>LZ^EXen2uBWHuBHOBNB^*Uz&BOgJDHQ_urHDaPm} z>(jeBBJKdZ`*u ze~*L^wUK%;fxLojdvD4*uV|;lbv`NE@1ck9K>*>`Sk-}(!yd5Yz;1w@s~p^#eMUk~ z_PHW!f+Ab7&{Sr`)ieU354^TT0T3#JaC{?%hgBd&y1xwR@>BNFS-*&ynb>#t)Kg!= zo0gZYb;)bHu@6zZ<@-SuFS4!iXXeDz=txz+)B6Y{Zre}OfuLCb$R$bAV`?-^b|^p_ z+J6g6&e11DYH&9EIUVwTWJa|8imCpS&ZcpMPSJ=YN|oO;X;BQ{HbC?T;I)pF2cQ zr+ErG25nhgO{-FvX6J+6&*emNjtT!ig`c_X#tC>?KE9C>-&kv+-ZW}@#V)z$ST}*M*n0fX*2GZt8zKIj{3{`o)p{M)i1nM)otm9@=asqE{jm}p zzq=d1;rL$943n0*i7aadTNOt=AtXbW+xDo@zHVJD>_PMw(GVzCtbqfyc4!xPH9|iB~HR=>(DJnr~o3GX(#|<$dO6W34UJHK|Zzh$N z%PW>u+QbVlbiixOo9CyZFR*X4Z!{cYQQ$^eAv90`SgAzW>ww(bG2e~fxT&Uf-fR4V zJMc)4TtJ)bscc#^xODav-1o7>pj`ch_mN25PyhX>@BZ$NhB+_q{8wphm>e|XK+ z;TLt6{1(0Uk;%>1g)yUEmP)a3SE-7hr#w_WmX$gjr*r4Eh0Ckefy}woy=K39j;X>C zT!NRZ4Zl2Vr6(X&R+oAizI8HCK~dI(d0()+ff)6g)N;PROHAUy6?yG<;xaa%u+qtV z#Vs?XCq39$m%;9!{2(^Ml}c)H*5c{OQ_!!=C6-b-h;O4y;jSw>v5dj0CkDVc!1-+~ z5V&%kMnG#qi(ZUpy+?ZbEk;YW>3eg4pLk1WW>OWOVR9qMw`9eQUK&e}i@hD)h~blE zz3lI8cM$jpQh2xgOO9gy5y_YFNHTbzrFn} zu905Ep=S1PX@&gK3Kkb{o)r#lXoj@@4!XZu7g9046}ivn=q8}M(1sgG!`|g1`ib?z zKpJU2ZdEzSWR81ZZqc<6I8ZiJv|F40)0w%~ee>P*$913VbV+QuaRR6oVgchr&%J~q z$`CZ8T;=QG+^-Q4y*$N8iYd1DLL>zBX&ISMJ=7N$cYWMH%pZ`(H7eO$Y3Vw;7Hk}N zV71=bVeZ-7hllKQk$oW`d&~+@#b?RjEY6S9ouH+xvl32Wnz@vYW+Z-iPnSGv4Mxab zDynU1qB+LQ&**6!q_3Uud{ilv`+gCOLzcfa@mT6O!FOt0Wn5hNl~)$^szGYNi^p}q zXA41ie&-DQ$DCU4FPb`hG?;bp zuF_xJ88b69ZGIWK8z!x*>HdzAW-oGJTKo=0U3i-5sJOI4xsj}E?f82O+n>%0M9$Yg z(uuBr;iHAkNN6iHoeRZw<(_Ey$7xefz56@-48vA^4;922MI(PSKxNOX%k~;$Y8qe1 z=XDm1kb9U6Fue;t{vP#qz5uZHM#PY_9s)O7Yl?Y&s;p3kTl+EZ;6Wx?Kb;LxSu|Pu zSy5RlEj)59ASu%1$^4Hs0dMCCsY5yMTrgP{34i1s7m~rZ_DFj|u+Ou@+4CgBKLr3l z0leOdll6G)7@t=cEbh?eT{)d_82^~J)^YtoZ&S1a%Od=wAqyb?|D(LanZQw&6`Y&7 zMV%vIB?HsYfaK=}?dj9)Q5SEQQTSKRsU12ocGxA<_c12%-ne?N*M{>yl;g9 z1XCe6gRE?Mw8aQxX)QZw!2_J-#x6p2TwfnZ!=Z$l6yg41s^XKmnj^NXv8eeGjLV zOwx?xlZvs|MGv8r;b;dPv7i9n(l^rO<&jh3@~OR!FIu7JPxjsMSI^_-c2NN2wHor# z=U|{+Pz5jkLHSCQR_D8Q=eqO4=HY?oI~>p5=;&sIcj zN-^)!czN#>C3-d+sjOVoV_o|Nv=kkAVaTZukI^b;0I!%q@nEtGP*KjMKKwGlUYgy= z;2el4OKGsmY@e=sUt$-w&aCN@fw4QM(C;z7UH2veh!Y z#vSxbJ7oP*n;5;Lg@liFCktqo4&I;q7WjOyaXfPoh*U7s&h+TBtuT@#f}+)23O4AV z8l6cb)O>$+eQZkl>`Pk@#2B2^Rt;(Zqg^l1UsR!$_#^c`=_eDmYxI7D_eE-*2Xqkh zTFlLPCPKxDQEb5UP zps#+D{$3#j`&rRoBJ<#+*-*n;2W5AE_ME1nkiT}qats(MO!Wi}kYl^rDJhA4sDZq) zXV3ZE@gKLzR%|Em8&|z~qW7psGq;L9mqIdYVpx3CR#T;nWLjauB6ht$SymH^t<1rm z_G^~)lLfBNoD0(wxFt+6NrAJ}7Vmc@A@0q7rX)R{S%uz9g{F-yHSb%kN8b=URCarr zrc>we(b9HQUcKy%Lt;+Kvz*TSiM>Oi01L{MNMn-haNFuhmZnz*(!;KIo~$(xvTxn* zTWx36Msy_qqnche!-p}H<^FqwVLpBAKO<(hvJnGkl&?$Ny%0YLjzchLzQGETj zm*VqF+(U%DGxHOU(&~P`Rob0WkfphkDDd(QH+p+EBXHj&TD$K zNip9PazoywXAai{+LiHq{GRAUe?9!9m->b?Ev1KY$PVH;lk2X=u`Yq$>_FL|`qJLL ztP&#m)uPx;Vk2=)9*2Y6Tnl1%>kDCDZ9ntlAALOzBc5f!=bQznjP6-+YkNbU{v(n5 zM~=zBDkTDm8QSSD^oY31(tvXnhnEU@3YH>7a#-EE<25saOgxBq(OV$qM*bhYpd^-v0yxetC~ksn6h2Fk znsV}LHP=kRsK(7}67cEtn=^fIAo{eu5mOudQDM*hE>*1HnMU6sx3-jD3kaC|MY=_+ z&(WL2_#y+_ zn*yzJ@H@;FR{1vnb87x=e6Aes*Vc5sv{5NWn4MLw@^Q#=Z^haTp5T|v5!vKpU6Uo# z#W1y({;6st4j&zYZy6DDaNjyoubXgwm@%&Tk;%)4tNa~o<$**g7Q-se{)Sa>-}^vA4u zySM-78FWIF=oB-$1P`&;Aaq*6oJ5noffCQ@!VwiKft?CQQ zn#B*~fuB!U_I-F{j{y48TSNmgX&>TR#sR)v#;({@m>uV2!8&@ha6jEV(r^4>@4bf( z8r}BC9xgI3@>*G#cB;?W!L%;tUcJ}Aua2o9Cmt>&(Ck>ZP*stVDsR~`t0BvGqJgdU zmsyTSp}L2Y7T-OMSBMBJZi<#qyTHpjRvL>BGbj|fq<@qYAJDHKh$Y^so!8|nD*XHk zc+!v7ABl$EPei(hXMR|#$8TFUZuci$UN_aTObt+vlU_f0;^kkQ_AnBEcu}0GTb9A~zv1|*! z75zMR=;mF49V6nC?^^9FOu9U&(a!5mg|-rI-7Z{mdb;Z%Puf$r4<5F!3vx9V`?kwK z`#rrRGuz>BxC_h!(%r)NbN63Fy*nd3cQ21e^ge;cxrzuM; z$w|X0#aB#WOh6f3dXe3CSCdHr`Ic#_LlcCN1@$uZPR}JnN}KRRmaX`>=U1$Ms5ZI5eE|QV;unOZ!5TezujGyf5SIJZPoWF}UTMJpD|}i0!1ps)89F zn1)a$tx80cPM4;ZZ{@#>$r%xYSF#-)SY2g~)hq1>b4VUoQXqGMJH}pir0+V)tI?|< zIv?f5mHC|<*DEMexSNmNwby4hYuU{Sn9jttRC}}v3M`JmM|E2Y!~0Ku_U_ulhT>TI z=zaQ2aLqpk=ooK&qW7U^{YZ41I#_Vk4V@#9TyZ(!sm@vL(0Ol&r=a9SfFt+mZ3L*y z%WJ?FgnaG}p1zOHvf=jfB>0osbKyj~auj}4!!3ETd8!k;7NEcJNuC35Y2fw`cHjO| zQmA~V{Nb*D{Z+FK3SeEKIJSP`IjHaN7)EuX&M^e=lR=RF8d;d~B7rr>OA*%vNnmY}_wOoVd|I0VUKnz*BK z_7w#v(ff6#jz6ph_32R_$~c|eLwhK4>(b8LR%ewU<7*I^I^JkI$|3ODOWnUQb8qu(JWk&dExY> z?PJ9^+bq)f`Hoh0vzFDCSHZRX;A5ft@BlNlw(MO8SdH5a=iVGU&U%C3S6vV+_0=x8 z1qc0ol^J0w|TSg*6L2_?baJx_|;eUeO>wVVy`&z|wq$J5;7S4dqu~hh7qfA?~bP z?5z%o1U{<50t2zZr!8pY*n$V>QwhP)Wlr<3b zg73X@gUhK1&Md{&`rsgEQv;6=^&p|w3L%l7<`zk6$4TK>1)pCrSh~Tq)V`1xQdQH) z;*w2}$@2e0ETi9t@*j2a|Kab1w95$p!W&OuA9@e1otP0dQ>^{wcL7__5{29#qc!+Q zvrbE4LU-fxt9Lpng&-nT8Twd6{>W&k0HaBub- zj+n&SUK%$G&)Z9Sq53|fO02f?&UikikDIyTdKl=E=$dPS9im2Sx?sTrdkG5Zj;|)mXouNf`7Bh2GXQp! zE*>Z?l4!%to;M5_!|mHqfTdck%&}ZXJm{x4=+$%X0wS;O67<_qeD>^GF1T2OZzU)? zn!C{%)^qux1Gm$v>zh6^E1*>zsO|zNTo7^fzEWcdy8L78`Ea0^V?FXv{zPcI+RjZW z>qnY=6KzmyYUNy`f~50|J=Wa3y>D#=w6~qCYpfuN`DuW$V%(sYr6P2z<3(Vt2YT(k z{0J$u+sgD-yjFKuL@0$Mjp$eShxE#WRO+!fZNIKe;y|9!ukpsE;AtzJICMe{Nq_u# z+IHME59ukzPO)=xEUib)tt}x>{W*Iw%DPW3^sAI_AKsRT117HOz9$_lHd|jPL}wLg zJ0ofBG(Iv<@_fF)(~BExsUjx2O%UHtjeJ;odv*R%+Ey$*<8RTimtWjDbGOdnZjQ4j zFhwwRdoGf~&zumQ&T{?)e2$JGY@^e*G*&|s_aY&}Vc#A?xQR44Df%A7P(8?7iWt#A z@Yj1YIoyr*?*R8CwNjaZNy_Y(q1c?W+=0CA(*f4LsURtZb&%5be7i25GQmvHL&4Ff z@`e^XCO?CfDtJ3@yv6L;cwcLXu4!fdHj`cSHSBt^r0_{`p0`^st{rSQ zW)pzk=uN-xHulC%(x(pks70L7)4@?M^U`7Dq@e9>^Ya$&9GASD7RcG}ai@nhnm@^g z$7cG0VK$Q;kH4yC-@`<7)4kUw}5LcyG?y)=hsJNVhX-Gz7^? zz91#Vn>f~mw!Nn+Pjb7&QCG}%;JZ2CIfA~={B8O><1xisz}P3v7pm_p%fGC$DNW*= zJcWYiZ=oa3F6Yj<=|LfTAXs->N6Th@t$7_mZG!QwROe090RG`b0NFRD%z;5vKUHg0?+fQ zbPQ~$kq*)=Kn*z;Vx#hu+M36?>GtkT3m@N+A3G2i;yP~(s^Kp!9HBQS8|E;qOfR0} zFd5;?iF`~G_CKTvF|Wz`@6qfG_?_E<%j8Cxmz(IX)0bdFSmdc$*!Ps_M`<;#@t5&P ziXGo#+nrpIqNbL2XaE>)FPh+KOyN*}WM|vl=Ya8W> z$ncl=OoWBGl|zQ1g-vv_+On>+arF>(4{JaE*k2TY9vWSP(2LGEb?Eu4=?V)_bblqI; zY=uv9Z^A~(Ohd`~3co)qDRGrPD~woJ$-t8^n)qF)D}H!m@XOGow9nZ5M4;R0ajb7& zOalu&;p%!*0%uo@m1RW2k7L90)Z*Az=5)?}SdC*&UV`af-a<}P{plZu$>7>b z3qWhI#yq(i*dF?E;1aODr(-@TfF07y0RVCHaeIrY5!a}Bk-IO%E~#-4d;A^fZ;0pblsznxjDP1b!LHOt?NuIGICy9CSSqw{ zoF>kdgI^m8g%12&eIv2wd||+6a8nY*L&{aYaxl)=!kOOKFi~OI*jP87|MXOjbi@Bi&Jk^ryf1c?f{-za8D( z6-~czRV1x&^id^CaM+$d$d~rPr?@#-ls{$N%i@u+FCyKbdN9WPnxhV7Y zVZR;r6WVe&>7|d3uK4JN{uYEai}@e91i6W3l+^&CB{-ePyBUu-i;N#{)u9tP8?|*l z7U~)g_omx=la_=%!3s@0rFZ4%Da{?U)~|Yly%j#>WYSXpp;XYDbgP5p$4D=(bp~f{ zCHkEyuiKq@U_x&f+&|+3znU=%oF_DFUO7ciPv0h2Zt}1yb8LHe)QkB3>4wHZMz3ZZ zAyIDB|0?v~If0#XBF92|W*@A=tgO|mVCy?FaTbpo zcmu44g&0JQKwM8Ohuvz*N$i!s(w^MW5R>I05jh$0hkXVAprYdMbxnEt?uGKry8hK> zzN2IEtdFxCq3?PmmyK0C6p||~J|?n}g~LLPjza9|Nvj)C1dVZ$xbkJl2@HdPzb4MY zIL)Mrxh(}2y0QN+_TD-uuD|>9B!NIekPzHSa0u=WN$}vVL4$PA#x+2IV2wj?cN%y1 z#-(w0cPB_^?sv9!YN~eU_tez>bI$wyI@i%%*gYFLP&Rbf zu3Ls&*u!l_`ObzPrQr`GBqzL@|NILg*=#TB;@Pdf*wx5l$}D`9 zV9}yG0!Tw9k;HhPw}H+&M(fe)PM=U_oZExhq>MumC{L7IE>kL!ZuC9>El6?~rx#A1 z1-?5tIr0~=i_YLjjF~*Vr&^^QU-z$i<&USQ-z3g%l09ew_O2$^TZONzU=zW2nj?5m ztx7wLrVg)VRnU@R2Xq+Y~s5fbdids&S$^Tq%Eyc>M^mywkpEqr5%*2R$fC7+bqRd4~pkEt@QeKLQCj#xg7mttFb{?P! z@S{A-&%m;#M!03%0gZLtW^~3Um!hu=cadxjo7lnE@8H~G(s$Rh;q)OR@)7wT!vsTcG2Q!x$T zMeT8UY2{mwzH1cjk{+*h7Wh_be>|DukGi$3yrikSFov*nR#%FTDap+wu&BpGKvH?F zNUrgDNcB4b>0#+Lx(ATReiBpBVds$52v!D}Y5=}g!bh<*qrq+JZ^%(xlH*Kju{$B~ zMg8{q@$*yuZt2W63RUq_Kuzio?Q={?%Ec|j3Hqy*))mcjVRsrI2D%$kp~UK zy~BuGX^W>kFc`^{$O|0NSAF6Px{d2l*-#lTN$#zT)erp~rDMQN-cL_dREsG&k2NGK zydEC7-FhI`+!`U|ttw;d{}c;~+(e7jbrq#<#(6LJ<;N9mLmAzwdgFuYpPNLcj%)K? z>*a%wJM%bDR#C$TxBQT}^uC(p_?{yFnAF=|iJU_v8}R%1sArvP&V?U%8jQkU!Brg~ z1XZ@qo({rQ(kD1_?z!zH7-WywfrtcCl zTrP>T^-_fLbn@b(HifZubA|yve(b%gy15g;}5#OCQ&&x~z zk%YWALtA!CRio{#w%^XmFeKAo%@wt#X6&uiO(B`?`{(TTYg$Q5O79OOg}bZWHtU#k z13%DJ;xuK^mygWEx^g-OXv*x{IqxQ~4SheVtmsGbXS#i)y*G0>N?y@4BU?{=1O>?- z3cXCG(_Dz~t50W6ow5DCm6ZRJe`#sUQw3CM(&lCm1NXP^rpox`|e8d9No z5CDRzJduei!$aWO_pw4aV=yBhG($-8J?P*@NOKEi$$olhenEFt&z6u03ypu2zf`C{ zoKN!0pGZr75s`fnbi+%&Yeu7nhDJ+sot!ZY0dnT&P%9c1Xm>DHU{%9$ud4g=x|ck; zB=Txyv9~XG|03z!siEmc-!u^-ZK=uO8^DNoSU}(plA@M%_0N04DdOUi3RsucBlu|C z+eS-bnoJg-F0YFA{Rp_4>2f6+<2;hp7aI?{6owQ+3>kks^Xnu&RH@?pp>0GFpJmU9 zy84@{ljox}Tlf|E3w^!lW?86=!A+_u_m)xjDm*9S6kWy#P!D}tx}27MaK#Fk?@BeP z5T$+>+ePShq|#1@-^jQ6$jsa)-`>Ty34iNLEerizz^EQ4NZq@a9U4HD{coD(|DR}{ z$gOws$lnl~WL_bUBd*1-_L$@ED3Vrp9!&`+ye<-&SIjbv z@OAMyFM3}QLo|)!CJX^(Rm-p%&6B)2KCrHcm{gUSizs&JWhP=2NlLEM5}MZKMVgA< z*W#jn9>aiE>s;L>+D@N`bgCg(Q`bVqMd4>T+7V^pUa=|gykbmrOUzc}^8e^NVF%mP0P z1StluZw~McJA>BP5&cAL7 zg$*`kc?xk}{rWD2Y=XZ9-}fQ#JN>EJlN$_Mp>itp0%w29lR89^fo=!P3dc%i5f;td zG3yA%2lP?@`rxVM7?A$L2`OFxC3HvhwQkV(PJ)^0$h%{M-jP(#SCRsq`}+9VPdOHm zNoGW)>TQ*><%$KQMQ%HzV=BqhSBJ8~`3u?&D2Vu?T)+a?eIeK86Jg;mKmo+tK!+xn z|4G@kP*^nC?y#eqd8v(ESE8UzfTGFox;4}zU%Ar=xQI6WV0q)7563xW5L?ZxJPZ25 z>mXsdKv~N8PsZhY%6mAAzTYxxemsk{2O!>;tFPylt-pQNUjFIjRRV`v>pI;y;=AQ4 zV+rUhZ{6~So3a*ouP=Y<(&GKHFdB19NCAqb^I-K+nXR=6TYVlTg|mOlQTD2X{t+~K z1=R6YmKUV$L)ftzi9&uAjI7JwDaTAA3Auk~Q1#SSkZk>ngj^krz`xq~1jal&?zB5E zUWiM_sH&%y0p-#KMe9yG9-dGmNst2{wxbxfk^ z_>kf6&Cc{B8xPIYyzMRo6vPyJD)(Q3G~sp#6%ij`VAr|#xEi9%c`rBeM+$bYj5g); zFO}OG*VIl;-b32OJmVoPKA8#gX(1dQdQ$?GY zhw!~UYW_j#hq8+tt+91Zkw*4rfIc0{y|Zj`G2lQ&%p`v5Cr-+(`8|0hgS^9UMSLE8 zWV^1%bV8@{hj)b4ztkO|k)9XbcyY{N7x#z>L}`t-;S}fC9c@FfZ5Bick1aVRqRYxE zTl0NjaatD(Z7&PXivNq$D!u!MD-}pT=0$5tihW@}GlDPie@aPHzpr;zx;u|OLzq;| z{m6@y7$Im>E@2R&%`(B8e{O_S!2i6-Q>x8I@P*dX=yb=J$9Cy&g}1*)*Oc(#3sH4Z zS&lD}so}{Jtox$;mUaSO@Lh4rHeQI?ym|&KotFH7KQ^h9U^*vy%hv{g6b`4Ht z#s=1ir8w7Hxq+zW~>@zB>PnAYpm zF}!sQNW$sXQ-pSuCn>hq>kXN>N?@c0ciES?b6WCQ_z%ojYnS>@SABY=YZw-px6l!^ zr!W5g>!i#$hou0D70tfQPoT&dA%}$wRd_2zZV$VjohrJ) z482(-^{ws(d}ecO%;$HpRwH4l_&`5D)JF7TTSs>CB+j-|2=FSGq}njItFkZ+_C6zN zam68rp*%+w()jvD*K+UmTAI`4`!f8CNF9&BdcdGU#qWAQe9QILZeE3T7W0RCB6}ed~b8_ymva(b{)ZwpCn~B zh>H&158dB9MC5;n$!szF4VP?XUb$)J1dByYO#)#9L>bGm79)T&^Q|zHqSITh3#&vV zHAe8jxix}0nz{9#V^Z67tz!zPp|p6n!h^M9Zri9RTU#@(p}#XQteF>&P9IC8iVkIW z_HLuoUBx%AxQY85Rhuk+O-SOSDgTdL`u~3Xe@igQGoUnvX~Jhj1(rX{Om zh#fh2)|Z-V^aow$K6I8j5RGcL*0x5v=!IogEg1~S2u>)JkseRVVVj?=rpXRvloKvO zy}9O2;xXJg;3r}Z5+GhvJKmKYud+beOdjcT+3`d%R?6a$$7K^2C@h+ILrPb4|m5G^&A$>aHtwJ-8d&>4C8Xg zMl{|jF>19#vv47}%PY4T^>`}wSv?OG$`#5K*n6z6OmTsH?pNO%E0%t1?J2xHuH-P( zg20&NO$K3Exe!H)#mt6zwCDv zJJLxfnMIxyplmh@6Sd$zd-oB8^XjVF-8go4ZM0ZQhj4V{lJp07TS!bE~Q` zl!I*nO{^PYJslr0J#5N}t(2TRm!!MXbPzf|KrFD>A=EV0ty-TvGHdcD)0os=2$azR zFF)RNZ-`cmffnl#0K|D}u87V_#Ply|l^#XWkfhDn_NIWR~h_M_F}r%C5yibEB@ z_wnk5-yfl&qrrM490u=NDoj;6RTV{RyCX@hRo{f!Zj~EzX-bafc=P7ZR`s&VZCaT) z+`+%AD4awpq@P@P%bMvqQ5ANQse3Hn&V3)5K5o%_hOVm^-zmLOQdqFmWhCCmcU4#m zOi3}YUhtha!;SkubRvL;H(8;5y^6dHObj6X{gyT&lH%(pJ*}T%I&!;0ip(i@1~0?9 zG&?ZNC3>AmO53C|xC`#olQ&XY#ynzb@%QW(=x>I#a9c;Fr~1FqYWS^tGaGKW(S?~m zqa z$@J2U!{@G^m^G^FE9F77PBL*!{#<_g)4RVO#qV?b70Tzj)7t4rAkz_Rc6glydWx*c zNP3o}mvfrSyWutPRF;&t;Mu=OP{rF%4&I76veTxBQ3)>YeHB44>vI%EiS|dGg6Nzl&gB=YSAoeZp74ORv(UNZF5Z`S|JQ$z>*ad%;9iP@Vm!xPX^UEJ= zh#mbXIP0e?RDX-V?DaBu&?zYIIiy1d-Jd-1eUt|S2RvS@;q*Imd6I@kgo z!lZR`^U~%H%#XP40W`xDV^`&`&Rib@zaknkc9_Ye&vG42+n0Cuod0PgS@iw4M$-SC z>caBQS2j_*)$Oh28iXO)YA5ytMsjU>IOTAvGd=FcdNRYv!~DAWXI-Rn705ZM?LbsQ z)w`j@Us0Azmm@qsu8w+ISnzD&lV`p`S&_|$Agb}c&H%qu{6l!v$p<@|w6`0h8w9Z@ zXyHY6`5v=bcU(uwl6@IDWmz_^u3+z7fxufDxx%^Ksp&LkmFmguy5O%hr}jtaJ$>ZuE`_`FK)-V@w(H|5i5L1MVDJKXP4lwc z({~$_;T{4Z$at|}jFN<5JV6PDU|vSLjcM{r)=-(*At9pzr1~$o{lp_$@N53ls}f{y zPh4xl1TEe!D>B<98KzgqsjBMK-aQrEf1o2zRtO7H=XD!7!djeG=&-BWOX`GIp9+5a z{!H(yJjse#*wJ$rfBSix2wT}6G{J4dL@qcf%clvSTZzzoF*oZu<7MIGCy0$`bzET` zzxEW7xqr z=rv3Lkl`I>7F-%8NDV`MWh(<%GW=`_bBpaadYo-~ZMB!JG5Un=(EGSib@c_w&|lae z!TW}-Yk!e2tP)p9>k@W|3_rHYzp<`07w{~G{aUo<3r`}b$HAS0WaNpQT9^xErncYK z&DL8Rz8zOU(D_oa^h48k*Qbw^h4ZMp!p{L* zm~N3HbUsYBZc>1`)#SvpxA8+>V!@CO38aMC+V2GYcmeyhUi+LY>fuqRuRDx1*rT1& zuQtiQYMxM27FqL%aSwRX^lrQ6w8FOc5Al zq`l;A*}mc-t@t35ukOlf;v`%ik7FW!ngIXc-hOHh(ZkMXkQX_4XOmiZ zrj`*eUc*|TRl`3eOe<_$eI@pZWnshaJ)ciUkcwfyViD4NxQiJ=NBiwSJ znYzoeKqiko>RMGIf10fGf6-v_Z^qF7ml#9%7II2lYBk}PZDwCb0+DJ(MmvQ|UQ#2U z^yN?nYWGt)guef>jz)y{EH-pcME&DX_Zv*FDwD0j0WF7+aIuwd>tOX2repMLgJW- zs~}foA}0M{@0Jh8HzA`A%D@oRcM-cluENB_>nAc)Inv%;ujcBrD!*%mq!o3O@|{c>X1@hF1u? ztYMlJT!|{ypMSrXdP#1vN?OD%3v7!M5V5NH32=|_*~r^S>NB8;FvbX|^5?&LNzSBy zHNIUG{?j0uR~kx8kzGQez!Wk3g0OMydY0Z+wNDy~PZWkGFd~D5w^3T^qP)9Z6CdW` z-A(;7>O2bdg|i@7SI7dp0evgAZy-(~S9M`|2uIW`7cy6xI(=lU852?JbUSm=BX493 zkrpYDLL%wqy#S>~>Y|ENbMXp#H5N|lIEj4-N6Tld3&(R7WaiwG#VAH`qj&Yt$*Qvv z)U(tlKnJb_u=?3IF){4u(lqZzv=FlwWy{(2Dx+A^)~@3$&;QyncD}Jv*nexB_CH#$>9^ZeL`ESYr;P z$$ak*zT)29A1b!X>p9qQ$_UstJXv$YKR8q0G@f)gep=TzrBD8#>OJ3gmm*u=l3Ew` z^5>tQ861(zuuVM@k@~>(s!(!qec}nEsI2bjdXQ%|RiFotLTeCtxi zb*MP=4MO^5=uNzAr`q@|>ZQocAIsJLGZAK~_E=Sap$6dw;=WrHGW1hu3s3fEfJbM^ z!Rfq|v;D+usy0;vV%BU<`4VY;`6GuXNZ4T=sEsNZDOHpm6R*|X(euIQ@UK5ME!D6&RH)VM@O38J3vthsVOsfHWCg|{|S&k=riwBFSVvmzC*)l zI))3tQT&gL$)|xQS0#1+#uQq_3x5u^NZ`A&vjzq3HkpYII($a4&5-zoIZIvJEMJ<) zqW+H`3%b zDIJF_o~{mjZ*(t;Z`kHzgqIJ2e9wiS@RALI_v{!*KK^s4JOADLxQ`uUJor%hJsr-$ z_F(r~zuee;dj{12&9TxY{?T8gngELr!Kskxj&C1lw{vS<`=WWrcl!(LBIa6ra#sL4clI z=3_M%StZQ_a7O>NFQ##o1aN)TiXHP^m4!B*0)G_N{Y7$bk9RWm4TT)lKOIoce)C%qu1mZ<0Mnj}tiq<4-glbMD zYNaS#==Hk`kFsOS*(N$0-zd{Jx^11HIsmt8N-7J!@Z+&r>U&M^v0xrjXI8lQAgUtp zH47xLEa`2986Nm3^vhdZn$Vbs2q3pwNw`~%qk7Bq!3vi^i8dh|ewRDQ5J8QMBZH3{ z$TW<^iY;wS(!*i8v-1O1o73`FM9VsYto5{`xhx6;e$S{ld@#Qq@_MAwW?9CPIg(Tu z)i)(*(3u*uo` zfnP+XSCAUaF#KG{Uf|^`*!D+rN8)t4Nw&C_dLI=d?TFx3i@mYJT-N6w)l)B3-TZ8m zWLEaHgaRz!4T0%5biPcoQ@C@mZyph*L*-Do_~m|GXG)eic{_T0{sF=< zr#oNjF#VVB{q**&VBXbGN>~vMI@cxHWT}^A(Wh4rn3JrN9UX|8#-M%e>j*m?yQ&if zo(=o%cS`(^#XG?zy`t&ap0D&DW}`E3L6eHq32OtyWR-x@4}Gfg+!kt1q`mzGTOAMl zb~-+3#Zd3g{G@HdHHR^Z*HID6SFrZQN+g-Fab*%UG7^^Cv`hB$Ch@<>$`KTDvxf^^Gz8%2piZ#!( zd!sC@rNw%{+ib1?IzYVl{}>YIRw`|c~3_e{M=SG7q2BQt#R2hAFm<=je8n5EfL zTshI)*@&#m0Uz@|SLD>RM=7(M9*E6AC$lMT5(d23IZNB-yk%z!ofj~c$H-@y)8EOViFzg?sH$24%vBm_xp1St&R5_&85{b-gDhYipt=za zp~pGOu`Q*s8A-OmE9C4@uZG#B)!iEXWHy^R_=FJ(`HarVB?A#hN43^%%dgo!+8%m8 ztV*;92@a6|5coslR$49s43WabuTMIn$!MW6Qhc_P7AuP(;0RW8r+-+@V>PSCXLTv( zDZ&&o^>vzjjD1>Hqm1X2ex5g0S!^)aNh;<9?@!?v1*^Ib?OBl#+iTTB30hRbk8cKEonKHqh>o3M}^$)e>e$!An&M(hsTO zWa}SXY@(yiJg&AqQ1BsqY zjWC(IsP7`pWdD#D=zAf}pxWI1!u)ZBrq<`1GlKlr=43gY!3M$O%Y0d5#~<5dBzxR? zHQLl#s<3t*#}kxf&huk3my&I1wAvU8revE@=5ee=fv2B zUnX&)>g9C7IG#GTj$tq0WWTC)=D=~_ zk8(CGw<95fcslQQ`+@{AiaF3BSFyZ5GKLHNuE4_50-}py7=te$BCkM^=wo= z&ggfMDs{_YLav$uG>~iA_vBk+LT%&ahD!qiA$b}HM3MVCF3Ir^?DfC;v^+p zlXWhSjU#gP$*|%Fb?&~+ENmGtSI42O74{O4e&5ub)aOXR=@8#~oR$-jx@OG@>GB^& zL%HQSBAC^ju)+=butrm26i>W=Rn8JClW^Ii@+BpP#%zrZ4UH}~l!@0O*Xma5%|cfR zkrAG2p_g;v2wQNH&8$-g1n+XDH2Ww*i>RZRWG2frf5Cm$#m*_bIs1Pu}IJ8`JqSdHf6ygrlr;d(Vs)`$JP5dlIKMErr_jdY#QKn@m?EwtY{k)A4fTK z$`q7I9&#~-Y3^!@VS-+i^Smje4>8_iPE6|O zQ-h8)U;CI`e_f4WnY%fa>^3$~*@Qof9TO>G5oWYE`gN4z4sI~AXPAOBWoQ(kg$hg3 zl^WB={jsRR(G{c*Q;0L8WEK+NR&XMb4&s(^>QVTl7PPV+<`q-CTTX8MI`Z|t%D!&k zux?A2_>r z6v`SDV!TGfdv@cDe?Dlf8}93f*!PKL2WoMkrUma2Qm#C7uaSr7;PVmDw-+)YTSC?eQoRhCE@ty#s8B7^KydiCtM@m?R$ zmsU-coX>pSIP0R!+oyb>Me;Pj-{g374$oL|Gmi7E_Re^U()f9|T|n8MX;2P#78_Sa zD_1d8&LHFFy1lab>`jb)U8J??8U&0tlAjKqpcZ=&LGp;l-(ftj?)telcgTEV9QhXs zqVXHS=_b&2dlTy0YAcqbjFvs2|J=*qOwGBu=_|C_S1!rtgB#KHwE0(PDZn&Da^=>- zYsVLU>ANEk3C&%7l+=#gQ1YjFXrub!+e#MpIP*hrfjLQu(v9cdEwsn`E9Ge3S5h~L zCSdN)qpiBHF4CT5DbKlYAZbBJja}ajkZ4%8$gdChP9NR_sZFyxF{0)fR8mFZtE_Kh z(L5ipV>9{ki+m6D_Iz-0%jdm#y)nEGWzZ|``~OQr?P7HSSV+C(Mr}?08IQrV?%4jp z_X>ao-N;w)x_m*SeIs#_aOPI*4j8rO&gUO|Y8&~$`~=Ftf26bD`Fb*mXi5{oQ!!+` z_)je$>H`ExvCWxPV0?W^W+^s_FD#Yv8Zg%|?RER&lQ+6P42zWovjC9w8gD<$Q{M8c zV*3G_-$NJt#K&4}zzfy(a%Vm`+OAy}YtE-}(`6@HSY&?je?=`Y;&IwN+X&Q_9ocB| z`FO$CJR73Ks-{tqx>u*Kq+OiM*!{)7?aiIa-N(gP_aAsk&{afNXZ|QeE}zMUzi)4@ zWD}&5rQYUAr16O5oe3HB1*`~%Q(0_ls+nH`<|`HN<8tyhPgy?XG%X4T($f2d11*MR zV_|lDe@b>Ajad5;n&4qabMk=!e9V#2+$dbK*zr!pgsEWtnY7}idDbb$AMBisC6#XF%CZ7_jzT~TnSGcrTu3LF`R)-od)V7hL$sL;tLX!`ll^R77KR{;^V0{Eu;}o6xtTzE#V6F^yiv^{g*=%DUrpEwcI%1VIzY@*BH(Le>k5RQ9MTi{d@EY$&TMQ%{Khn*A`g}KR?sUNr#U`&La~=s7%}yi zVZVgAIM{WU^ld~q!?7<)1X0TiUUeB54B(NicL*HzV)a;0pJ?0#tlKbuZhVmZ=}7%2 zyuc|ih`&q+aqT3^-UPR$aWF2DbzHyDsP1?yN&7YcJgti5G-cYLB7@1o^UYz9EBC0U zmjUI9I6Lo$y#fzD*jhEs-BET=y0&^8{>C#v)2iyJTcbZluz0<+F?QbPGd{N*5?bpg zP23Z}M393)d!W7(JEzOET%WkT^HChRRyGA_JF_TlE2Z6t*x-C3+X?lG#MOUO%C4aB z`?LFpMl$7H6H}1>StOzK_Fand7t`A#Ur`WKy_XlBTer$$IPtU1rwMJ1=pCgEW1z7i z^KTK_zf=SKZ!tkk3v?Fq=6-tkX)~BI=^tw@zG3j051F*D!-0m_hm1oF@)1ks5eh#^ z;;m3AqnBeIb5~?BS|$_9&2=&(qMR=eWKWfMO_NMEb_b*G*%`7+_m|j3UJy~lsmOBo zG@6zD_~8+1&2R_-D;E6}p!CSfO`As#1@BNxB&tC2%YMD*JYL`kwban=K<~IumJ3mQ zAaw*ee32(2B1?AcIZEl{_(Ie_>Y#?g)Mk=exQjAX?@-dKyJfe1Y|yy8QZmNX^lOy2 zXd|DVo(Hol99iSFzKx|c$;o$;icmZwb@q7d1b(8c5;4~C!9R~o#ri6i%6H-U6Js9M z{)$L6lfpfS>(~5JgS(=&WTj9XYTL1q)Q3q!*N<46v8M`F-F1qxqSIvaChP?l`8j3T zdrIW{#4E&A{5$D#HB`lGkhW`ikgpR$!x3NKe3URxAh+)A3C=ObYkx_t#_*DaO|)n& zR`d$hU@8aYFIjEMJ(0S<2ZueQCG3sY(nZq_Kf*NJ-p$Ef)1S-;pFhG-Qq@r^_y@8T zhu57_YP>TyIykwi2@y|TAqzDI zr|0$ByEqEl4hN$V72hTtQoZYwaumo?SXHH0U?JE$64u&ib~|#J%L=JyASEM1FVAxO z&C_<6AM+(^E!xoeeVk)KA%AXhTRrFEr*Y@lt0xe5<`Kpi@k3!3s zK6!68>4iJ2FD2=HV>N`4m@D=o)#V@Cu?XKOMHwTlY?al{MCmTQ<`G@(wOK`T+l zCcbd`P<%})}pDg4v3ve1tTfTe6{X>kcVn~z^XZ66dp@x-jfeZv+ixX18P znCm6|`64q-w#?9X%o@`_&(o9+?I}pgoy;IFzi*g48k6l3Qv&4V8y=6|*Y z2JqG2%_hQ1tvL!c8u-bc)u=}wF2u;t;4&IHa{8Afp$6xzN`P{f$fdnh14&)-pFyEQ zI<<*1Ab5&>o__*yIg7XA$^Ep?_@Jw!eM6QVowjgv{WlJHL5iA&#DGD1#tq)gy58A& zp-Kn1|FNigU+*fcC@!BmB68)5xLmk)#`gI5@h8slJy?^4C#+Fj=d6U* zH-~7QzGJ_&M!qu=J3~fruW#r9q|t3#-!;IpLl8Q2aMd2Sa}S~XgVP|a;J)$_dz|vT zAQE@Uwe}Z~ghd#s$RA8KzrA?mdO-UqtU~X}4NR8$i*!G=z7ep}@4LE+s0GKV-a}ct z5W@gYgMI_Rx$jGd61GND%KHAZ)i2Kl8L_pGjiHR*s);6sT7ihKy=gM%BITY|?Hq~} zbXBJ>U|V8+jdH-Wy+jk=D*NSjTqp%?h1kX5ns0~n-6ZVS)h57`44xLdzlKf7AE<}8 zOHq!U3ccIF1U}13g1A+b-##^Vc z$PM)+xh!V%mhk0Zqxm{^=i4bl_QvCl6=-Dt6Z>9|Hzr%5ujd*411>N^J@^rKVy|2X zcUVw?>Yk(Eb#oSc#~64Y?zT)|I)D;Q;w1ttOU2NOtz24u2v|8bnEcj!n|a5ur$_F# zEY_{RNG3{uqE{#MiKd-#;1_niMcvu}RIRmr3;6Wj6Ku34k3;7|#mvDZD*zJUxcw9` zwxHY3I;#M?qXT&RK?uCI9JMC;2ZDCzJ3zR%sG_fZj+!qx7<}NLE-YCHIj6h><|L|L z&~Dv94uJz2f#3gst|nXrcTNvL{0{zA+|Lc@H>qmYWdxAZ!0NpZ-Gjb{6V}Y?o(nY zuu6QB;4|1j<~4|YzyE~!Sy;LC=(jgeB>)05SPQ65$s`bjmz)d;9P27~PX&Hn5M+15 zkYqZK%gMgt1f-hRN_p=AF;ApU`;y(ZHqKc`dVISppg#n{=l73goNa2i7fxF-eU z)U>3F558CQnGxJ|jN$7JuCqetYO8T4MLK@cgh<$wI%A zsp_W83OdTWw#t3ht9CAN(CMl8y`}JHjGAZg>*^Aj%;1T`RPC#>gEzVf^Y-c#;?~g@ z?vdx%^H8>*bbQbHq?lUMij!gvIAAKV>gBaV&3nsHgIFAp{3_~cTcfxjT;^SWNlpP% zFg!~peVWGW^mJcmcGiVmAK#T~vuTDRqs&@VMl(aiBeVD(QnOC1Lf>3d50A1}UFOUW7}gk<@3z77Faj^fX!vbfE* zlbT9Fyw*%T|D6H*UIN$K1suND4z z_U%tY;gN!jt^~hR5iHlKuGCqFO&ganwN*Sq z1ZayF{?j2c&wZxyFA}BcQ>WhgI`QbRe!Wa1Y8F|{&p9oTfs!BooC0OGP-$=bU-)us z7#N{@MS%!$C!?9-)2W3ef!#a-GbVnXAN7ug$U&>>K{+Sm8F zIxEFs&u)ZI4rA(&iI`2u04u~CWEVI7!jxkOV~6;$UG>C4pI)( zOc`LE_JxoY+&|N#jp3JsTUZ@8#RVU29u`QOV$)~8Iy92^uuw5G;ie<;&?Mr#QEv)3 zkp#;OL&z0h?pc|+0Nrq!Yp7_6Mb7w0pI1xE0vTJRmR)E$(VI{4#*w#@#+tL?vm~1j z*~z_SjIaa+qFM`JW(U(}y#KDH|L@=b^JNnMPaRYIgRif$IPQF`lpbqSqwkQIhd^^a zWL?H*@rAZ!KrH06UT>TTGW;|7PK6YC3UKo3(zsT1T;)7ZhQHu1T64qj6^sE(PDIuO z9@Uzut5*}rP-s)#j!3G}ER56T@$Uiq@g|aqoPnR^V>*pJJLdZw_I~1AssMiujT|0Y zP>9aQ7$R}0qW=Hr%OqjuIYulU+#_=yV5`Ys`HhYptrJZ`9cbEA>H z)df`p25bwRt5+NzXu|H6`yhoA@5rT7*b1Zj#pudTgkd%D&NO|#D8HUzXcBFu)={gH zmx-xDfF(IuCiHzJ_0F-E{j`V3C6djwPXO|Y?(@G5L z(LowrH>DPuY&ksJ-UD(dv7mdG+z-N;t(VC%W2c0!U#9B6gll~hLsxOtBAu9v!1?_a zO|ceZR2{>$s6w1nJ7!tDFi+ubm#8G7ywF;+@Ed&=Q3+FE3OSRvfDK|Y<@e7}yfcvO zd`^0C)y|Q*iUHe=b7_D_M=^99tjSgb6){>SZ<~SXCy#Wd{zcLb8Bl%utdj~?Z^+aL zm4bJ96~j7WCk@2i44tl~L}pn@q-LCv{}@_n7>sWmC1@Pv29QCkPK47Qq?JxJ7DYr7 zG1;jC`Y>q;28w8#_@Cq$Hk@CwD}qPV%i2}WdbfN0*8R0$`Z(%zXRVL?mn=K_SNjUY za>Ao~yN9KBS^z==J*}Kxf3x$;ipb)rOe-uN3c>4l-INzMIh}TC>Sekh>%&FK_~$H zN$ihTqSJ7)D! zKCRhzFo?-IxSy$ac<6^`3+@V7ZnYPj{(7h7!w3|_Aqv<>4u2;4=&V{gw|`;rqjNzkA*q4 zaw z`L-zk5aZJJc{6d{`X07H2QAcIT0jPcw!K(TAxje2)60Mw84MLIJaWv~33FQz)*HTy`#NNo!DB+az$t*t{|L~@_3wGh zQS-SQorZebL|7gZF0qN%9b$WFN27}ub@Gl!lRPm?HopU!tcdjAChVX+u~)P`|AoD` z3~Re>*F8g_P`p5a;$Ga{DHJGBpjdEsm*5tl1xj#tD6T<@TXA=SySqzqp2_pR?^?&+ z$DXz3%gpS(XVyo^5t97>cewBCy3X_bRjwx~*PyxeHoP$;qYKWUc~M{N`e?ofLY5YP0epRz$M>i?t5X!)ZB#e6>xa@CIB_)WEO z5VJ*87-W!`zq}$_l(G?<_&#IZS%c0#^1zxTy1seFNO=8MiyI0prO0fT?JqfmD|>o5 z!L9~1#i@d6l>}+0pQM)5B}e0KNEc)J3hb1D2cu}m`8N}0zo`>x-;Nr4=S>&B#@rPA z!j`4j*M;T(5pL9z^770vH)H!q`hjUT)4AmP5^k5NC}>Wg$e6!yN0`+`;7zhwY3kr> z!Qwjcw>kzR7#51%L_?-UycU-ar$Za$Ryp@=zXXce>QdSA^>jZ5_DPgjY5p#b^i_0d z(g3HEnqyk&+VX)qDtS_9LBYIi=};!$%EHA4gEGbD>5aG(ZPz1zp`VBpL&c;TClmeC z1vP1=bgjKjeVh>c{9P_ty{H?$8b5pPdpS$Y)(oe{@yk+%bvc+oiLL79aryAbp^>12 zhbFJ@U89rk&NvY-l;t}-81+hvKR8S{o!*U~nc91PV0I`}^7EmsW9Kcgq$JXxiGf}Y zrHygkks}VhmY^xdXymYUVnaLDan5wX+z#GBx@e@mo<*m=4w0?cTf*`HXwjpRY!H zDWe~-+K&(V`uHhnqrDy|-M>6=^Dw=@UlM13tQXVq3tX;7wMBNstW9z72E0%Z)wOO2 z9X@m(2|(D{g0j`U{NjEYzkxb6Yw)+Y-@w_5s(wuDB5<9~Hf7)PpJLM=^{591->}>KoM#sfR2s==-aM;2*Yfet2+dXEotRCX&|X`bWTks5Xf>|5j`)fKucKweA3df z@#Me>#rD*^PwT1(@3)PVA-D;Dm=iWobhC-r&F+E!newpzD{<_9J)Rrzzr{7U#YX#N ze7>5EhrtmDy6N={DzQMzqs>4tcs3?jvZ7X*eCMB-k5$fg5|2;yQ4~{}&s}|rQ$Wx3 zU2LD3eJPjCgN^G9B!L*Nka_O>RK?YV6ksDA))mDBOwaI?$NRoyWe?YZ!HM=Qa`1|{ z*`^{|vfFw;IJ&5ft4Qu00}4<6qRuN?jm5kuCdTPKx6ckACBC1FmWWK>JTudcWDYf( zd*ef{dG1p<-}92$)#=1nsl`IF7;9Br2Y2;*QsVNnZr&OCs`qEr0uTmX71X)90EcLw`Gfip~Tyeuk>Oyd#+LZlL>(*34j$hQOErFJa=#0iT3kY_Re??34`j@bp z)pyp$i+WC|U3WTJ}97*g} z+i>A`lLw^<3fvU>l>{B5cl<*;MBp-|}TrEM=R;x|#K_ zQbvItB)vM8i9){d)hc#FWv{Tjfj&RAwUtR{{>(rZ?E?D+5rS3Iw6Y{So#UlX8H)TA zMXB+VC|K6xlnreD0?Y#ie)VvoG?uTBU%t_Dz-&h{112N;{%0)$kd4ZR0{@|{KNJ9#?-a4@8d&TSneYO)z zs}T@1#j@Y^IHNKFZ%vi+_Iu8KOjgG|{;I%ncz2*5*{YB!`W z>iD!@_#@3wc1PN=dA&3OoWShO*zAzi49v&-N<~M(2-r5eGAO2m8GfJL5V^o35nWc+gqmTd@J2F($Ycc?f6wK~9UANwGmuxg zmQtFK5cK~9!$WGK)(s0e#3W{b_QZyGyPh}ijo$21((VZ>>ma5#L9Hzwe9ENB;=HO$gZg*|h(s@dZsQn3xO5G*=ECr#qbzARZAsOox;S(4!Rb#Yf`n`GL*ywy6la$<{7iF4s7CGMj9dWpqO5kH5 zQgrF;%x+@2VfkD&tqftjNEJ$!G_YavMwB7GM4Fh$#dL9DU`u=|zo@=E3%*4J`e2(=``iv{sLG}prlE$RMp?*doH~nsz#3E_uR&nIgY}TV(dh2 zqxy~RS?k&~rF$R@hv?$t`I1}&?7Qwh=uy0U2oU)rR~V+~P)fV=O`X&4%!V7MJ&A zShTT+#oWY{;`pk6L$k6~ZBt=Ci@D85EsbB9b+RJcmOY24lR{_7F?dzj0B#N^+>+Mqn>WAb&zcrE*^rPr2X_ z)Nw^R{4Hj0`rB+}d-pgoyCJsz3yJb2FGd#fMUdP1ZoYpE-c#`_8u$PPH`D5fUbB&Z zmzywSo|fwHCr$uUK~h_pwwB@ik^ztVLqPA8z1ptFp^WSXr0NCdLMMX)(^mWrk?JLp z#M81T{I*rJ3>%t}y&*xw0}S66+VndiR565>MIU_qom^712CF1If1aZWjT#ouhKAXm~9TvNw=1LM7h_b*|;Mb8BywZ zhZ8$nU-X(`ux(;Ft?*cL5+PJG+2aB+!q0Z5Rx{OgccH=Bbnd{ww4eu0R~maHd2b9` zZ5c?@s3zAky>cbGF3&$5OH(=;S%GcNvdzpcP}-4V_EX5$u?UUkntp8v{PE>GRmdOcpqz-nj)&>@dMnNg+| zhx1^uskkmu=>to$%Pa5ef_QZ}w)B?p^|A-0dSTo%z5wJo8Y!j1WnIXJ%oQX)3$25Vp7Po0WbhAgpeQU%P=3Rm8RJ_q#66!? zS6yJk=bjYT$(s}J&k5Pw$=pd1j&sivI7vHl4RZ}`uxOQ2;0g)`z3?<8JfI!Ql;5WL z7onm%s0|}M^;JuDOeQZ%T#piDn_jJ*kUX_-^c&QXSBs@OnDU){zydWA3)=M$#ZA28T*rXs#)U_ zE_WCu2+fC>#33Y#tiy9uDi)PVOHXjV62@z59H?0L?K2KtG^z?N=0B*y%;EQ7O@8uN zn=lL9%xGcPSDLxsKY%Xf{~~4N29O3$ zr6?g=D%M*Z5$G=XezSm#F`ks6AO9^pJ%f4vYQ@o*p3r^x-B*TEQ9vQ5(LH(= z<26u&P%Rlp>E&i%SWIrwTNTxb6G97W4Dc*uNl}QIoibensf0Q=)V|gH_s*QVkCcTlEaN7v4pVvo9I?hBGK{7IwQD1Kq z-Nl$aHpV%!@0Xhb^ZkdbpG~g5eiPehXGQg&qG<|!AURfut6p3(r4SDXn#ww)wLFm} zHAQ*umtc8@~arPLrD`Tn2y1B>H1 zhqzTjzDS`=a+Fsp(hiQ%-qPeo4ZLlxbh@wu$$oA!quS zP}hd6qAa62{squ5vJ!jy_%5#PctX$NG2MlOIp>4dqRt*UukgGve73-#ajcmZ2UDG< z3bj)SQB|-s7PT#&d7`14x=*5h=K@LsO*NBYcRlzLtE2khSa+F7#*yNk$d70qd+q(1 zEvo(YhUi+7(f(#d5(Dn5f9z^$d8EMXGN8i?Q{O7-RW9=M_|npVi@;AGo&B!-R5%0U zEMZ$P~L~`Fs%qbX4_r^^yav8MPtNPD-P5c@9Adx(B8z~ zN9&UeCUOG2pGmB(Ku&jYmjWUM){@)gbi6GEHgiJ1MB-~=$?-h|9V@R3?{bG`?{c-o z(}u_1VksM|+_?;$_I338I81yQ)3tT$w*eCD!{8XDH!VM<_l_2Q1;$g|h+php`-K|P zdg9XXN7f2-jJdtxzP=*ly=nW8P1v)a99tp&xp1wOzTWJp|FiSvN*brfSVTXTQ;7{J+k;G?F%E#!p=-qBe=>D zUwtI&$G?W%DR+&ztP)R#-SEL{>kHni>@J=wF@5FZqJDBI< zlHwj()1lMwb3EP?=G6G|TqVjZKJQV&SCq)Xb2h}6%AQ~BkF)T^v*XPi$3Vp=F$R<) zM-~Ok1&n|csU06l7P2J(u-LfpwPty{Q1!q6nau43i(6B^<>D$dp9zo z(AHnr&qX?hHB7sYdf?AF6sh3zO2?nrS-R^D;j#))y5I5be*th*_&Y1#V?`D=Ou=KE zG%9oVe`2SvZJ%VgB(i(pmHB?cNpkNV)7fqG_Rx}}Hz5Ykhl+jX*C_78XgRtSMSr1>0%YOmNE@;bMZhneC3KWy9tAVj02oLk7 zaG(5Fl!!_F(4KZg@u1aCLsi|iy0ACY6zmQwzxM=J9)MV}`Gdthm$U=vB=2dUUv__1 z(g@WV%ZtF=W$f{reL3A0H}URa${~&|ig1~u;tPKAtTmW(tOkSo(W)o6UOD6j`)n!u z4hOD;liC>l1RlrxM?%?=+Cwk5D$e%LB!h@{-z%`EBA&DaF|DYs*Q^ zsMr$hd)N5u!c2A*ipxFz=PTt!sb)qKM)BI;mznrx2e(@!@ZeQtsd&BUC^5#H?nR>~0lqSFZTqzE3#8FfN>G>R7V7BC` zE7OF%Y_-TdA`V=A?ayaLKl@OF&s^OEvioHbX)idhWXxXlVX6R z!)E82zT9ETA>zQroL>}$ltVk;m1M1OKW|ev3)Ja<{S}-=bEBfLN#tgm5*C|7V~vPN zR%}mHG_k`bM*jYUSR-pus)5GgaOe11@WZs~h{Q0>wFMHZ$09*a>C#EP3M!h{0Q7p= z&AgAY-gGJYrR_C;MQGBI7+yPU-hsoEXk+{i=vNW!=PutvBl>Z8tH2v2!l6#PyRJ81 z?$S*SPDw2Xqv`7}=`+)%4e^t1KR^_j^+s)3$JoxgYX;rxRT-|hJFrBVwkfdAc49fv z6V1myg&QQ69{S{h*wT>{quZlo544CaDqVS1X*AsiJFuLmz6a^ljPqt=h^2el7hS0Y zlHy{koG68NJcQ(-rLYzzzIRZ4l>xaKK2cM)x?Q`o5l#gVd3=?7>eZd_Rm@Aew7?*&#<<-A3>Rl9GFiAW~Ah_hx*PZy_qY3fM)qDK|AVJqF zf4g0QV>8xQn=DtRTjM|{vDkw_+%rw7>-Fb@bAt%Xm#Da(R#ldUsihGCr0X60YY^Re zjJt)5*+#=J<78r#AEmHC@Q@+5joT^rzh~Vbrv6VuK=JeC(Q|L{lRz%Xhux8p5 z!w`;H1Ek>y5tD&%()?txv%^PdqTU=eK`2!#ku(Ev)YSIjGYI zRll9D-|g=$E-YpD{d^Sx5zJOAb+Zxnp$92i;<}>;9(^UW%TAf*6beRc6Ov($(8!N# z7D{w20lDMPv(u*;Cz$3GFYkmErlrcw?}SjzWTyYZ&&Vp`VI)FMmlv956i!sbB*;kG zshCzpR_magnw?DMoI$-RtS=*Cmf6AHW>hWdHOkVrG!sM!lK(16rPj3kLCh>9!dzBL5 z+2+uez`!!C2Fr^`O{-DSm715P)a6MjYftr;f)q;JrerJmO!$Xc!HV#o4=unNm3I5mx+jN*xli!j zK!zhhnElz7wBA6ePvi{ew25&yrC3W@MoV3D(m@1nDU|>KqEcX!iF846bzQ1zcSZL; z6RWJWlRoKA8esp}ou){m8N#S_Y9MQgKeRk=gDVgu6ISKI;b+6h6F#pkhqG7Qt>Q7w zK56GI+Sh>o6F}a+icew#tooT56XP8qqv+yvaO)6$SwagM{p?z{@fU!l|M{B1{tqK8 z^a}5;K|AdY?(SrS@mdZb!=w$RBW_qcgw---XIr8_!o89&TRsUs?t}b36;S2w^)3ow zeHqTt{TN~Qm074AVeUI*&z_jy2RWVX>4bTV`8%xqNzh6;d9PxZ#YJwnd5u8f4;Xz_ zA;aW@;1j0rjjb1$IUi@-X>7EQR*>g>vf0ja$35DpJzY9#C5tG3K-CLnsxe&oZ9(ru zWPwB~X@F1KU{ZIF>MKdZW19EfINB!#he?+etZWHcpdEhvws_qvUz29;=`%K-BVGJB z;i-|g8F>3l?ZG!Beg=$UFmKjB!5zR;|GK@Y-pYY=vqxh+Q)C+0Whuce95u&?F(s9i z=V&;VVd|H{Kwo`uOHKikURnV=%J-&Z7K8{wbw5K-j@A3iqOed#;ag-SlkKxx@?Pe= z51hz4TTDB9^GTVm5DD>lQZjfoLeQ~b95_)2@}K%-(Sfl=ca=eEQRAxy;@dLEpX1{C zNqLTXW&kcYT#PK74bEEx&48w1m2S*SVc)lNoE8px6(;B1KOfXWh5ig3Af=_rk92&C zFsY~aTHX985+s=q=!OCQ0;n0-^Od;IG1C0F?S~;kPFe+pSF9$KDG{>Wonav~4=N0` z6{h6;GK1Od%0Ei?KDIj>NeBu>*m*vafAQz*d>0+lzkvU&U>!N|D-g9 zEPxCY|ITixtU0;{$XmN0UTNRUY=y!z47MKTrg;9->5*pi3yeLIUpo2`CchR}c{f+3 z8SW2@91n$wU!8-mH2@Sf#80b~jvpPwukC#lJ#UYPQeZbt;%zL<_sH(&u#{ti#uqUQB;Go-w$I=xUTUu~$Nc=DY%L!)J_w#^JO+N)7f=9MzgQGM~DJ-ZC^lsW&Wb0ftMzr+0>AI-}SlVO@KBU(1pVp`;)yJAy zFfC)tUn{>Z-;_lqjoT3qmg|?_sy)aNGg?ON==F~7@-kIu>cm)x7H1brw8p|LTnQUq z4(Y6Iq&P?Xd_?0kdkKH(4=rWGby3ulW#7Kd*knbQ)D0Rt&x6rmJNly#NA`p z@5xYmfk`t|NI0Fh72O&zo|dLr-LS&2fR4_kEdNBXQdHlYKQb>y9Yn@yiH*zGB3&jB zf4$9`Gbr&kOXER53jSd;^og&-t~TgP25Er>3$gz3rk4YCK!un@9&-9GLeU3uY0fMn z4%GFBX%CN@A<%9kz}?i~#LaPIfogHk$lpLtdb9B_0KW3ZC@YN_jHMDWOY-&m{7EK- z>TTE|;oC-3mejLQ>YRA(>8Ba9mS%wWm$fZ}*dp;@w??ytyaipMi=?I1yxMd8m{x_* z_Nq91yIR9licD<%ANJ%vpt3_vr2FIsB%BB$)KVyPZGoAGAMaKBip@2c%qi&-X{hZm>N=eClCHB{rq zL`gTQkK+gWJN-dZt6)Cqh$V*Q4Ku-hZ@;YA_3&K+d$PTZJqLb{ceFz;!0HijmuBgp z{cqhQC(Z0wZ*?L5aCX)kP8PP0{#d5SEuxwmEh09qp3w_K7+&$9v$@4u5$^LNrKtDu zDz-l|L77q5-~yhM{5dI1U(-?~uCs8WGcpT9Q+7HUMMbBqR={N35u_aEm}TJ_-R zNKecJd!4^=V_Io?aKqkaR1gYM1oNfx*YCyK_|vs#yS0WP&p5nM#l9-sfBDc1)3jOY zX6O^Md)RFrC%SvrZ@XvJXS)e~Vh|*+i_f`3d${=6j+h!qp5-!d!D2#2<@qgT(aaLYArI^j=d*k$$ag-1A9W#my3M3{62{YaHzNz9BLVJ|Rlf zOspi3F>`Y}ETTCw$jLkWU`vbU$6dgAylyRn=6 z;yu!T+3}J%GimAbz3k)1zQxF&s+$q2I~L>ka%IRifUB1FB$`ENV8-+oRLUl*x_%=_ zD|@z-RlAIMDFDeJ(pQEJ@-d#CZ*((4b!S&3su ziz5cM3#soI`n-2@rqtpTA;BKUXP1l${tc>dtLU&hQNF&q^;D3lcDQq0`up2bny-;; z?-?Wmm9R@n_f$=1k$9(f-j$nvfG6Y|8r)B@%_Eh1#}42NG@|#XA&@n=mOl6w5XorM zgmHN8L1o=Qj(cpl{HtCf&YyIuV7xrT)tFB%Vcg>a4xcM_$5cdr$&3H6B&rlJ{1viX zNa-iTTz2laD4t4W^r-%tq()8K8sx1ZNHo=Z^|^F80=C179`hYwT}^)`;voWtA$5{2nxe_Gf(HYJR-Bt=cXM+RtFB49O|`_ z{9`3czyKr3i3=O*%>W+tiL7;|ogH552I}#H*Z7|Ka>x-FlILv4Sk^<(>)e zfN0cA=QQdr0WX(CkEU8do-D4MG_C^_nO?tZHmP2RCErZWJgOubxAQGAi{M)ocULslwOX9}@!dPIma~=V5!A>|dDUwl?#E}kD~!vz zN@>+ROF4N$z$}-)=)pHbB4d-7SE(YYIlp|#+i35e{s!`}?d@k9H7g>#iJpsQZTFS$ zq%%48erA-p7q)C6Sd{72@w!I;olg7d5B?E>^|v;f%{Qz*h3?@VwD6F-JY|U7lxV@{ z`^F<}K7I>W4{X@kn8Ygr?A{$1t;B3HJ^=T%oY;C04}QBc+DjX{5P(oOd{rd*qP1OV z;5}ub&_YrP?YS*Co){+h+ClC9RHi2Lqq9(o6fe{e=IX298j>NTp>I?WB9d!9~k{=oEBrAnVMYv zTN+@Gr>SCh`pm9&Me+=%GsJe=ewa~&s|+B&B`RhpZ@+S~n@)F8*Oqk2K#6w3xlG{F z0l?lGcmRIeU;G9g+0#TXR(KO6IJ<_98>Ech5uUX)6 zsCYvaW=-Nj1IyL{DAySrcx)1VNP8xp7#VVIxdTL)cllamI~VIJLGfOE~-+i%KWA z3^IR^(z<{^CtTJwP2Tn1eZHG6f0(r~qJBz(GGt(!@@6+LU3%Jr%LZ4p@=x@ls^=EQ z>Q}TDcY;1Iq>QbS0|~JR+A_F9Z|F|vX7tEoe}XStWeeT`l5+V8=>I2HlV&(hr2 zID_!Q^d}bKA2-ESvBdT!V=A~)B?heXK;4S+#||#H;6-h3GSa+?74K?$_@`VPTD;P0 zYBPr$YV-y{MS&aF2|%G!qrt12V{Kz@wc|Pfc5EepwHW8H3Gq7Bh{0jHm?W9*5|gd6)HC#7ZOFe`f@%DoTqir{x#@&=*KTvmQScOvF^Y2 z3Up#;c`V)0O1b2YnIopz)?3qF9{LP<^F4E_<7i@8hPW@Y4h09Vk@Kq`-DZ;=-v{Xi zT~<$b#vtP&j(CdJJebY~@aN9C4!Yh|PHk~~={2QN(u@8$eO*GL1p|%=*EcIO$uOiK zB^gh@CXMgh!tcKW?o{W%JNG0czWNMT@9i<0+~GNI2-VkR#Gk_d0-%x=Y`v`qDS~%| zoeCQIYom)bX{Id#gh_-`*jZ;c7d4XTAIsqhW7Q($QVRx(6b~hir^MXzl__52J=?P@ z|Gbl%;C>c)#!~^4{@OYGs9l+I9leO$f z!7V4-`bF`RA)CD=>RGc;NaYPNy+_%)~Id{y^&% zi?};>$=S)xPpmA+E<3v$iazj#B#&5YgeHnC&o%%-@L}(|aJa;VOV{AATJJk#)|t4o z>h0kh%=kHx2^2MHUaTF=LvE#iHidtST~MuTvdXnN?1L9I?_9d&0nrQll- zG2rplw8<>het>@>D<9{NX>WvoJr5$ES9nPMB8Ne6`J5`Jky%9`iG?*eM>H-rjo=R% z@^hJVE8*!Pas5h^AAhHgwPtW#FEmZa-H+GJ+nz}jN04CjIgf}2R(y0ML7bp!W=TZG zt<7;4{w0a|KvfRIUCj%t6V!IM;XD@~UCe_}DQ)qg$;5sqaip3@31`cds+;^9*%i?B z@yKTzgkaaVL@T4mm0^kG_vRKN5Mh z#hCvB#PDRFv0p)LhAuRp0^y23FK`Of3N9NKD^kLK-Xt&Hf_Fx4m21&yRlVN)-NWfA6&YP;+3Z!LUSsLmytjVK&ITpt zZaMZ!_K%Ixr0T1?!wNOUev;40wzc1VpwiYJAgiAK#Bn{STQa6ySR!j$o@Fs>5AAS7x|tEEPn5zSZzS(CS@+}T(etV@mTF$53OBAYWe*_!&VM@YC=5%~Dy z2J?$HAlfWf_ZFejz>u6nWgf@sF&lE8CatH+U%FXuL~YY%ebq!ti|wccQ8LnQ6hU$m ziV@)EYWAwgB~9AR#^F(6*-%V6XziMWK>lQUX1=qKSo16{r;x8p2u(>J=N)jknwZQkr1NH(gfV{5 zN1jT*KDviL4-Acmxk#^!Ynx9-Jk#>vH`5gBibZpEv!GqjPczetqQflmV0aQ4!NE(- z-d?3mThaat(eKb<5U4F`6&~rUy!tt5eMv5j-#}`0hN@g`Pmgq_A&V|9{t5NuSoKa8+=|~tyJCS`=Pxl1xCs78O92bD zmb|R6S9ejXqO`0P1&qn>I}O1FYIPT`{*DW0yw0e7PMUwG#gyLxb@dsB&FGpE zm2tjr&+*!CV9KgDUOBMt{<6at&ZRGqcVG6&R6MQDUDg#MbNR3=0`Row7N@uhL}+LLYf{zG}q+pl#Ouc=EP zv0O5M@cZNZY>cK3M~$?{xnf7H5j$b%I46ZN)L84wEPu4k>9Geq*pc~X`-MUE>zoBz zde$*h{C)+IxaIVazRRU36rwyWIlbi5nik@WEQ6JB7!h&_H-R8rm6sMYnwSG5`;0UR znzWsaFnx0+O>!TvqJHUTt?A>poF-ZsqgT7;`plHFy;=Bqe$Uyw1eYUkZZ$nT^P39- zUOWt+$N6=qsI;84x^+GQn(3!<7f_lXz9N0&h$DVS`#dOdOa}Gxtlo|o}+U8&aFhGf{TQgKw6F@Bltw=;D#-c5bRHDW|H8oehlgV5X}lw zlqwaXm#kB2kOEweDGL^PmF-*8A2Tu0#(8j-c)NKq#(R~WDPf_-&uiFCHcp;k6_3Ad z_*6-MYr_KJmQ!PlJvP_WX@OYBeU7czv(KANOjS2e!G?aFF3@I~41DYt7!`6|kz+o# zMwLX5>FXC;anX#*U#P#$Mm`c0U1uAk%O=|v9ITpU!Z3gaNmsclNlPAWkP zs)fZK4g!1Kl zDVn;Lr=2u76nAkcXRj>HhQm+pcFew&xfJ8d!TDtk?mnpSy4sVy@r zu{9AfF+vCxLzT}QzTQ?J*DxiHQxt#>DQ^sZ=0g9D5GAqbS(uGEM(D9<`V{Fp%+!j8 zx~$NDyFQX`DBC6t0roa`#$StJxQLGkswNk~c#^`~Q`Bg2RbU@X73^Q_DNp>`w zkV&)84ldnHIU$&?FlkF4!8pqxS$f)Pq}}qhWrL-z5aA>ZwaY+VK{(h>k zwYy1`pp7_(GE7Y?VQo<|d)?jzWkE@|0*9X?E)=I(Zqnbao_W-=$uUUaFDgP0m1$(m zRr!s4b4w2in=6Vup0k}M-_w32Mfi3<4O)q8nBQVKtwT|x&*WxvK1qYsS54QUgSl_Z z1FMJd^n;^A)*-NgC@vhWhP5-z&6zV-X0z(LC>jz@(^j*qyGdS;ocP3rF1GBFQ>KbF z_D7T_=8|A{$*|`c#A~RPubhYD?g(XI7?B_;&|JD)y#am-4N^9EPR$!Dfhs=FQyY$^ zz;(2@Oc#|4ak!Lo71%OXZ~YMl;c(cb|J<2;8NH}+v60Cper7=M52>klo9EdHFB?m( zfOtFY_&pNEBQLG_1=5Bfs@nb(PMS_pfUF3y_q3!rAe}eP}i7OAnuukCIk1DbSX%{Q9ub zmhdeD`3$np@Dl?)5_uzQ6WwQiv%1OYO2&llk~0RHh0t+`N&A2gBRVl|4r5`X$NOA> zbumEqag5`0MGyoa!2uw9&H681p&`kt|E+2|ML#z@KyRQj^0Rd7u`(r!t_fDl5Cd~V3;f7w6QzMn#G!!05s;JAX-q@g?O1rkhpfMa6y>XO1 z)`koLtebdF$+kX%Z1`f<;~yq zWk$;Yqk+>;WW3uP{tt{qlQd}G!$=S*0*a$5>H5N*%WZ%$YkFEXGQw`I=m8(Q&IJLN zD0R+TI@5%Y!gi1%B_!RL)`)5cKQG?G7tU#n^Uw9(-YnciPX*tPy|6Dh#y>P`m_K{d zz@pf&Zr%R^geaWb?CzGB`cxFg=C8eps-bCxamgSwG*G^!AbZI0L-DTJ6s7KZvLYz6 z1r_NIl1@nOvXFIFrC*AN6Fu3+PPZy}c+n`6L7|Z_zP+Y8E?VdzDjWQJhX6FXD6ERr z&My>>x2T}94zFJBKg&*k9ctr0g>{QvKH(s*v%2`8Re!Fqabm%W)+em+xZqyC>Em=5 zM?QR_Yj2rnV6)i!sCy9Go8OIrzFVT;kr?(GE_jM@LNQ=YGQ`&>Q^i!(Rq$dr3FzG; z-3fb-1zvnry6-(ut-Ititm0+uOE?};tty{Uh6w)x?a8S_-1omYzl(2BcwV%=J9T?t z3o=dD@Tz^L_UW1!M2HWU!pkaFMidR)Z4xJ0)LHOMJ6#<60HHO$d@G?A<(##eSU?}X z(IR(zgUM(HTQSl48D$drHp19xUhoj4l|?gSs69h`lcOaw^C?ovy)*(L>$+4Pi!V$7 zlAzC~(H&rO9WUH5JJO+}vnYbtmz!s|PyYx$+*gqw@yC&RU;n%B1_YW?R8( zlxsr>NZVkhQ(r{am}73tqa6&h>&+ZyJR+M@AJ84tG8$(|a!m%_Yy!H~H`m7#eF)}w za+$B-Tl@MJ*K1L(57SW!oUgA-y{yAsMKtE~;-=YDZf_r{sN6%nNq1?&Y4p6~9n#;+ zA(@i)Az=&Y41avo&kRbdOZwp~0jn#$hzyWS=&U3Ii_E`y+W*u5EqCRAVTPGUu+Qf^ z_;BzJ+mO>m33khpP8K;ikMqh~ySDgDZr_)^r3J+~FXmkEypSagq76Hdl6#78$oI5q z94qrjUWfNt8KD0(xlwuHP50VVM3QZqT?aj{y|jVS-1_1v{jM4rxWv?6@Z%cX32*VF z+?;nPO;i%x^5gd{GV~{52QM@e8*NA;ov0KYezuJb7vdqGzc%0nfe+Hb!Jhq)^4g>K z#s2O?pCFlgLMFdv}6^f z&~~tPiDaPQk@qaQwS>laOSE(*DzRkLdvd9C&mDU_%2|H+tELZm9(36TlY429=Sxu* zpj^#|E#riel5_ncZL^Z+*=Ecyp4p|ta%5aBaJ78dDy`*UR~=ΜsaRlhgCnUYw@+ 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
  • J?0mu-q5jaxziElyc4s`f+g6VIZ* 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 ZVBi7+7Z|v}zy$^_F!0|A1H`{Z{|6GUFcAO% literal 0 HcmV?d00001 diff --git a/res/sketch_main_menu.svg b/res/sketch_main_menu.svg deleted file mode 100644 index bf3ff44..0000000 --- a/res/sketch_main_menu.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - Menu content here - Questshock (v3.0.2) - [FPS: 70] - - Main Menu - Video Options - - - -