@the-inclusionist/engine 9.0.0 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -78
- package/app/css/style.css +761 -377
- package/app/public/vendor/fonts/playwrite-cu.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es-deco.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-j.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-s.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pe.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pt.woff2 +0 -0
- package/app/public/vendor/fonts-licences/NOTICE.txt +166 -0
- package/app/public/vendor/fonts-licences/OFL-1.1.txt +86 -0
- package/app/public/vendor/fonts.css +36 -84
- package/dist-pkg/boot/create-game.d.ts +499 -219
- package/dist-pkg/boot/create-game.js +3944 -562
- package/dist-pkg/core/a11y-sr.d.ts +25 -3
- package/dist-pkg/core/a11y-sr.js +38 -19
- package/dist-pkg/core/accessible-label.d.ts +17 -0
- package/dist-pkg/core/accessible-label.js +37 -0
- package/dist-pkg/core/accommodation-subjects.d.ts +26 -0
- package/dist-pkg/core/accommodation-subjects.js +32 -0
- package/dist-pkg/core/accommodations.d.ts +125 -0
- package/dist-pkg/core/accommodations.js +195 -0
- package/dist-pkg/core/actions.d.ts +108 -55
- package/dist-pkg/core/actions.js +122 -71
- package/dist-pkg/core/calm-mode.d.ts +31 -0
- package/dist-pkg/core/calm-mode.js +47 -0
- package/dist-pkg/core/camera-cycle.d.ts +15 -0
- package/dist-pkg/core/camera-cycle.js +7 -0
- package/dist-pkg/core/caption-duration.d.ts +15 -0
- package/dist-pkg/core/caption-duration.js +19 -0
- package/dist-pkg/core/cartridge-problems.d.ts +34 -0
- package/dist-pkg/core/cartridge-problems.js +53 -0
- package/dist-pkg/core/constants.d.ts +0 -54
- package/dist-pkg/core/constants.js +9 -76
- package/dist-pkg/core/contract.d.ts +142 -164
- package/dist-pkg/core/contract.js +222 -208
- package/dist-pkg/core/dom-query.d.ts +4 -4
- package/dist-pkg/core/dom-query.js +12 -20
- package/dist-pkg/core/entity.d.ts +62 -77
- package/dist-pkg/core/entity.js +18 -32
- package/dist-pkg/core/escape-html.d.ts +9 -10
- package/dist-pkg/core/escape-html.js +16 -20
- package/dist-pkg/core/flash-threshold.d.ts +17 -0
- package/dist-pkg/core/flash-threshold.js +113 -0
- package/dist-pkg/core/game-speed.d.ts +11 -0
- package/dist-pkg/core/game-speed.js +16 -0
- package/dist-pkg/core/genres.d.ts +20 -0
- package/dist-pkg/core/genres.js +44 -0
- package/dist-pkg/core/i18n.d.ts +71 -60
- package/dist-pkg/core/i18n.js +186 -200
- package/dist-pkg/core/loop.d.ts +17 -6
- package/dist-pkg/core/loop.js +26 -26
- package/dist-pkg/core/pause-icon-catalogue.d.ts +15 -0
- package/dist-pkg/core/pause-icon-catalogue.js +54 -0
- package/dist-pkg/core/ring.d.ts +17 -0
- package/dist-pkg/core/ring.js +29 -0
- package/dist-pkg/core/rng.d.ts +7 -12
- package/dist-pkg/core/rng.js +23 -53
- package/dist-pkg/core/route.d.ts +26 -26
- package/dist-pkg/core/route.js +126 -121
- package/dist-pkg/core/scenes.d.ts +37 -40
- package/dist-pkg/core/scenes.js +41 -43
- package/dist-pkg/core/screens.d.ts +4 -4
- package/dist-pkg/core/screens.js +11 -16
- package/dist-pkg/core/session-clock.d.ts +23 -0
- package/dist-pkg/core/session-clock.js +37 -0
- package/dist-pkg/core/setting-defaults.d.ts +61 -0
- package/dist-pkg/core/setting-defaults.js +66 -0
- package/dist-pkg/core/speech-rate.d.ts +29 -0
- package/dist-pkg/core/speech-rate.js +47 -0
- package/dist-pkg/core/state.d.ts +118 -118
- package/dist-pkg/core/state.js +322 -297
- package/dist-pkg/core/visual-cycles.d.ts +30 -0
- package/dist-pkg/core/visual-cycles.js +52 -0
- package/dist-pkg/core/visual-state.d.ts +13 -0
- package/dist-pkg/core/visual-state.js +6 -0
- package/dist-pkg/educational/activities-registry.d.ts +1 -1
- package/dist-pkg/educational/activities-registry.js +9 -8
- package/dist-pkg/educational/adaptive-engine.d.ts +11 -11
- package/dist-pkg/educational/adaptive-engine.js +17 -17
- package/dist-pkg/educational/segment-bar.d.ts +12 -12
- package/dist-pkg/educational/segment-bar.js +9 -9
- package/dist-pkg/i18n/en.js +324 -223
- package/dist-pkg/i18n/es.js +323 -223
- package/dist-pkg/i18n/pt.js +348 -226
- package/dist-pkg/input/default-bindings.d.ts +37 -38
- package/dist-pkg/input/default-bindings.js +127 -144
- package/dist-pkg/input/devices.d.ts +7 -7
- package/dist-pkg/input/devices.js +17 -16
- package/dist-pkg/input/edges.d.ts +23 -32
- package/dist-pkg/input/edges.js +23 -28
- package/dist-pkg/input/empathy-filter.d.ts +22 -0
- package/dist-pkg/input/empathy-filter.js +34 -0
- package/dist-pkg/input/face-map.d.ts +96 -0
- package/dist-pkg/input/face-map.js +255 -0
- package/dist-pkg/input/face-signals.d.ts +40 -0
- package/dist-pkg/input/face-signals.js +48 -0
- package/dist-pkg/input/gamepad.d.ts +195 -145
- package/dist-pkg/input/gamepad.js +383 -556
- package/dist-pkg/input/gaze-cycle.d.ts +64 -0
- package/dist-pkg/input/gaze-cycle.js +133 -0
- package/dist-pkg/input/gaze-relative.d.ts +68 -0
- package/dist-pkg/input/gaze-relative.js +142 -0
- package/dist-pkg/input/hand-map.d.ts +28 -0
- package/dist-pkg/input/hand-map.js +142 -0
- package/dist-pkg/input/input-cooldown.d.ts +17 -0
- package/dist-pkg/input/input-cooldown.js +39 -0
- package/dist-pkg/input/key-default.d.ts +30 -0
- package/dist-pkg/input/key-default.js +60 -0
- package/dist-pkg/input/keyboard-runtime.d.ts +15 -21
- package/dist-pkg/input/keyboard-runtime.js +23 -27
- package/dist-pkg/input/keyboard.d.ts +68 -63
- package/dist-pkg/input/keyboard.js +83 -105
- package/dist-pkg/input/keydown.d.ts +123 -137
- package/dist-pkg/input/keydown.js +284 -289
- package/dist-pkg/input/latch-edge.d.ts +33 -21
- package/dist-pkg/input/latch-edge.js +34 -35
- package/dist-pkg/input/latch-scope.d.ts +51 -50
- package/dist-pkg/input/latch-scope.js +61 -82
- package/dist-pkg/input/latch-store.d.ts +26 -30
- package/dist-pkg/input/latch-store.js +42 -50
- package/dist-pkg/input/latch-sync.d.ts +29 -29
- package/dist-pkg/input/latch-sync.js +25 -25
- package/dist-pkg/input/latch.d.ts +14 -17
- package/dist-pkg/input/latch.js +29 -37
- package/dist-pkg/input/pad-defaults.d.ts +13 -16
- package/dist-pkg/input/pad-defaults.js +21 -28
- package/dist-pkg/input/pad-reading.d.ts +76 -0
- package/dist-pkg/input/pad-reading.js +169 -0
- package/dist-pkg/input/pad-wizard.d.ts +99 -0
- package/dist-pkg/input/pad-wizard.js +256 -0
- package/dist-pkg/input/pointer-space.d.ts +19 -20
- package/dist-pkg/input/pointer-space.js +27 -32
- package/dist-pkg/input/pointer.d.ts +39 -40
- package/dist-pkg/input/pointer.js +42 -45
- package/dist-pkg/input/state.d.ts +101 -89
- package/dist-pkg/input/state.js +54 -134
- package/dist-pkg/input/switch-scan.d.ts +59 -0
- package/dist-pkg/input/switch-scan.js +67 -0
- package/dist-pkg/input/synthetic-source.d.ts +42 -0
- package/dist-pkg/input/synthetic-source.js +57 -0
- package/dist-pkg/input/touch-bindings.d.ts +127 -116
- package/dist-pkg/input/touch-bindings.js +158 -173
- package/dist-pkg/input/touch.d.ts +147 -72
- package/dist-pkg/input/touch.js +362 -126
- package/dist-pkg/input/transport-in-use.d.ts +107 -0
- package/dist-pkg/input/transport-in-use.js +130 -0
- package/dist-pkg/input/transports.d.ts +90 -117
- package/dist-pkg/input/transports.js +104 -106
- package/dist-pkg/input/virtual-controller.d.ts +82 -0
- package/dist-pkg/input/virtual-controller.js +69 -0
- package/dist-pkg/input/vocabulary-migration.d.ts +50 -49
- package/dist-pkg/input/vocabulary-migration.js +80 -79
- package/dist-pkg/input/voice-map.d.ts +59 -0
- package/dist-pkg/input/voice-map.js +123 -0
- package/dist-pkg/platform/audio-ambient.d.ts +13 -2
- package/dist-pkg/platform/audio-ambient.js +14 -14
- package/dist-pkg/platform/audio-earcons.d.ts +20 -19
- package/dist-pkg/platform/audio-earcons.js +51 -42
- package/dist-pkg/platform/audio-jingles.js +9 -10
- package/dist-pkg/platform/audio-mixer.d.ts +14 -2
- package/dist-pkg/platform/audio-mixer.js +31 -39
- package/dist-pkg/platform/audio-sonar.d.ts +49 -152
- package/dist-pkg/platform/audio-sonar.js +124 -302
- package/dist-pkg/platform/audio.d.ts +62 -19
- package/dist-pkg/platform/audio.js +193 -168
- package/dist-pkg/platform/choose-by-voice.d.ts +70 -0
- package/dist-pkg/platform/choose-by-voice.js +157 -0
- package/dist-pkg/platform/flash-sampler.d.ts +19 -0
- package/dist-pkg/platform/flash-sampler.js +79 -0
- package/dist-pkg/platform/font-library.d.ts +77 -0
- package/dist-pkg/platform/font-library.js +98 -0
- package/dist-pkg/platform/font-library.json +721 -0
- package/dist-pkg/platform/heavy-catalogue.d.ts +77 -0
- package/dist-pkg/platform/heavy-catalogue.js +256 -0
- package/dist-pkg/platform/heavy-mirror.d.ts +20 -0
- package/dist-pkg/platform/heavy-mirror.js +73 -0
- package/dist-pkg/platform/heavy.d.ts +136 -0
- package/dist-pkg/platform/heavy.js +324 -0
- package/dist-pkg/platform/interruptible-speech.d.ts +23 -16
- package/dist-pkg/platform/interruptible-speech.js +77 -54
- package/dist-pkg/platform/kokoro-port.d.ts +27 -0
- package/dist-pkg/platform/kokoro-port.js +50 -0
- package/dist-pkg/platform/kokoro-runtime.d.ts +20 -0
- package/dist-pkg/platform/kokoro-runtime.js +52 -0
- package/dist-pkg/platform/kokoro.d.ts +70 -0
- package/dist-pkg/platform/kokoro.js +133 -0
- package/dist-pkg/platform/listener-scope.d.ts +12 -0
- package/dist-pkg/platform/listener-scope.js +90 -0
- package/dist-pkg/platform/locale-host.d.ts +14 -0
- package/dist-pkg/platform/locale-host.js +45 -0
- package/dist-pkg/platform/microphone.d.ts +51 -0
- package/dist-pkg/platform/microphone.js +118 -0
- package/dist-pkg/platform/onnx-runtime.d.ts +34 -0
- package/dist-pkg/platform/onnx-runtime.js +42 -0
- package/dist-pkg/platform/reading-in-worker.d.ts +64 -0
- package/dist-pkg/platform/reading-in-worker.js +125 -0
- package/dist-pkg/platform/reading-model.d.ts +94 -0
- package/dist-pkg/platform/reading-model.js +272 -0
- package/dist-pkg/platform/reading-runtime.d.ts +24 -0
- package/dist-pkg/platform/reading-runtime.js +164 -0
- package/dist-pkg/platform/reading-worker.d.ts +41 -0
- package/dist-pkg/platform/reading-worker.js +58 -0
- package/dist-pkg/platform/reading.d.ts +80 -0
- package/dist-pkg/platform/reading.js +136 -0
- package/dist-pkg/platform/speech-recognition.d.ts +60 -0
- package/dist-pkg/platform/speech-recognition.js +104 -0
- package/dist-pkg/platform/speech.d.ts +23 -1
- package/dist-pkg/platform/speech.js +29 -18
- package/dist-pkg/platform/storage-keys.d.ts +96 -0
- package/dist-pkg/platform/storage-keys.js +106 -0
- package/dist-pkg/platform/storage.d.ts +46 -111
- package/dist-pkg/platform/storage.js +104 -169
- package/dist-pkg/platform/tts.d.ts +85 -39
- package/dist-pkg/platform/tts.js +447 -127
- package/dist-pkg/platform/vision-loop.d.ts +23 -0
- package/dist-pkg/platform/vision-loop.js +56 -0
- package/dist-pkg/platform/vision.d.ts +132 -0
- package/dist-pkg/platform/vision.js +117 -0
- package/dist-pkg/platform/voice-listener.d.ts +40 -0
- package/dist-pkg/platform/voice-listener.js +88 -0
- package/dist-pkg/platform/voice-plan.d.ts +15 -98
- package/dist-pkg/platform/voice-plan.js +56 -143
- package/dist-pkg/platform/vosk-runtime.d.ts +96 -0
- package/dist-pkg/platform/vosk-runtime.js +151 -0
- package/dist-pkg/platform/vosk-vocabulary.d.ts +6 -0
- package/dist-pkg/platform/vosk-vocabulary.js +178 -0
- package/dist-pkg/render/canvas.d.ts +13 -7
- package/dist-pkg/render/canvas.js +13 -13
- package/dist-pkg/render/crt.d.ts +48 -12
- package/dist-pkg/render/crt.js +78 -80
- package/dist-pkg/render/cvd-matrices.d.ts +22 -18
- package/dist-pkg/render/cvd-matrices.js +37 -38
- package/dist-pkg/render/hc-role-data.d.ts +7 -7
- package/dist-pkg/render/hc-role-data.js +14 -14
- package/dist-pkg/render/high-contrast.d.ts +67 -56
- package/dist-pkg/render/high-contrast.js +226 -217
- package/dist-pkg/render/low-vision-drawing.d.ts +5 -0
- package/dist-pkg/render/low-vision-drawing.js +46 -0
- package/dist-pkg/render/lq-filter.d.ts +32 -20
- package/dist-pkg/render/lq-filter.js +59 -65
- package/dist-pkg/render/port.d.ts +86 -88
- package/dist-pkg/render/port.js +17 -23
- package/dist-pkg/render/screen-pipeline.d.ts +42 -42
- package/dist-pkg/render/screen-pipeline.js +80 -87
- package/dist-pkg/render/sprite-fx.d.ts +2 -1
- package/dist-pkg/render/sprite-fx.js +16 -14
- package/dist-pkg/render/viewports.d.ts +20 -15
- package/dist-pkg/render/viewports.js +83 -114
- package/dist-pkg/render/viz-axes-labels.d.ts +47 -0
- package/dist-pkg/render/viz-axes-labels.js +88 -0
- package/dist-pkg/render/viz-axes.d.ts +89 -86
- package/dist-pkg/render/viz-axes.js +128 -116
- package/dist-pkg/render/viz-modes.d.ts +28 -29
- package/dist-pkg/render/viz-modes.js +40 -45
- package/dist-pkg/render/viz-refusal.d.ts +32 -0
- package/dist-pkg/render/viz-refusal.js +57 -0
- package/dist-pkg/render/viz-setters.d.ts +104 -66
- package/dist-pkg/render/viz-setters.js +182 -191
- package/dist-pkg/ui/aac-sets.d.ts +45 -0
- package/dist-pkg/ui/aac-sets.js +41 -0
- package/dist-pkg/ui/audio-choices.d.ts +68 -0
- package/dist-pkg/ui/audio-choices.js +98 -0
- package/dist-pkg/ui/audio-rows-that-apply.d.ts +12 -0
- package/dist-pkg/ui/audio-rows-that-apply.js +43 -0
- package/dist-pkg/ui/camera-control.d.ts +53 -0
- package/dist-pkg/ui/camera-control.js +48 -0
- package/dist-pkg/ui/changed-mark.d.ts +9 -8
- package/dist-pkg/ui/changed-mark.js +22 -53
- package/dist-pkg/ui/control-choices.d.ts +37 -0
- package/dist-pkg/ui/control-choices.js +84 -0
- package/dist-pkg/ui/debug-panel.d.ts +59 -43
- package/dist-pkg/ui/debug-panel.js +68 -69
- package/dist-pkg/ui/declared-words.d.ts +21 -0
- package/dist-pkg/ui/declared-words.js +66 -0
- package/dist-pkg/ui/dom.d.ts +10 -14
- package/dist-pkg/ui/dom.js +10 -47
- package/dist-pkg/ui/drawing-problems.d.ts +25 -0
- package/dist-pkg/ui/drawing-problems.js +94 -0
- package/dist-pkg/ui/eye-control.d.ts +36 -0
- package/dist-pkg/ui/eye-control.js +178 -0
- package/dist-pkg/ui/face-control.d.ts +25 -0
- package/dist-pkg/ui/face-control.js +183 -0
- package/dist-pkg/ui/focus-trap.d.ts +39 -49
- package/dist-pkg/ui/focus-trap.js +56 -65
- package/dist-pkg/ui/fonts.d.ts +157 -68
- package/dist-pkg/ui/fonts.js +305 -115
- package/dist-pkg/ui/footer-scroll-driver.d.ts +14 -0
- package/dist-pkg/ui/footer-scroll-driver.js +201 -0
- package/dist-pkg/ui/footer-scroll.d.ts +38 -0
- package/dist-pkg/ui/footer-scroll.js +55 -0
- package/dist-pkg/ui/game-options.d.ts +47 -0
- package/dist-pkg/ui/game-options.js +158 -0
- package/dist-pkg/ui/gaze-overlay.d.ts +64 -0
- package/dist-pkg/ui/gaze-overlay.js +165 -0
- package/dist-pkg/ui/hand-control.d.ts +25 -0
- package/dist-pkg/ui/hand-control.js +143 -0
- package/dist-pkg/ui/help-panel.d.ts +87 -0
- package/dist-pkg/ui/help-panel.js +242 -0
- package/dist-pkg/ui/hud-bands.d.ts +62 -0
- package/dist-pkg/ui/hud-bands.js +146 -0
- package/dist-pkg/ui/hud-row.d.ts +34 -0
- package/dist-pkg/ui/hud-row.js +80 -0
- package/dist-pkg/ui/hud.d.ts +73 -73
- package/dist-pkg/ui/hud.js +94 -98
- package/dist-pkg/ui/item-announcement.d.ts +13 -12
- package/dist-pkg/ui/item-announcement.js +25 -26
- package/dist-pkg/ui/layout.d.ts +103 -28
- package/dist-pkg/ui/layout.js +117 -99
- package/dist-pkg/ui/libras-avatar-clip.d.ts +30 -0
- package/dist-pkg/ui/libras-avatar-clip.js +86 -0
- package/dist-pkg/ui/libras-avatar-load.d.ts +52 -0
- package/dist-pkg/ui/libras-avatar-load.js +134 -0
- package/dist-pkg/ui/libras-avatar-plan.d.ts +102 -0
- package/dist-pkg/ui/libras-avatar-plan.js +211 -0
- package/dist-pkg/ui/libras-avatar-player.d.ts +28 -0
- package/dist-pkg/ui/libras-avatar-player.js +226 -0
- package/dist-pkg/ui/libras-avatar-stage.d.ts +37 -0
- package/dist-pkg/ui/libras-avatar-stage.js +208 -0
- package/dist-pkg/ui/libras-glosses.d.ts +28 -0
- package/dist-pkg/ui/libras-glosses.js +161 -0
- package/dist-pkg/ui/locale-flags.d.ts +16 -0
- package/dist-pkg/ui/locale-flags.js +30 -0
- package/dist-pkg/ui/loop-crash.d.ts +17 -17
- package/dist-pkg/ui/loop-crash.js +33 -62
- package/dist-pkg/ui/menu-intent.d.ts +61 -0
- package/dist-pkg/ui/menu-intent.js +88 -0
- package/dist-pkg/ui/menu-items.d.ts +20 -0
- package/dist-pkg/ui/menu-items.js +51 -0
- package/dist-pkg/ui/menu-nav.d.ts +98 -92
- package/dist-pkg/ui/menu-nav.js +398 -286
- package/dist-pkg/ui/mobility-choices.d.ts +26 -0
- package/dist-pkg/ui/mobility-choices.js +41 -0
- package/dist-pkg/ui/motion-choices.d.ts +31 -0
- package/dist-pkg/ui/motion-choices.js +68 -0
- package/dist-pkg/ui/motion-scene.d.ts +24 -19
- package/dist-pkg/ui/motion-scene.js +29 -61
- package/dist-pkg/ui/mount-panel.d.ts +81 -0
- package/dist-pkg/ui/mount-panel.js +61 -0
- package/dist-pkg/ui/panel-shell.d.ts +65 -31
- package/dist-pkg/ui/panel-shell.js +92 -66
- package/dist-pkg/ui/panel-widgets.d.ts +150 -0
- package/dist-pkg/ui/panel-widgets.js +294 -0
- package/dist-pkg/ui/pause-buttons.d.ts +35 -0
- package/dist-pkg/ui/pause-buttons.js +66 -0
- package/dist-pkg/ui/pause-icons.d.ts +261 -347
- package/dist-pkg/ui/pause-icons.js +671 -601
- package/dist-pkg/ui/pause-markup.d.ts +86 -0
- package/dist-pkg/ui/pause-markup.js +125 -0
- package/dist-pkg/ui/reach-notice.d.ts +22 -23
- package/dist-pkg/ui/reach-notice.js +55 -58
- package/dist-pkg/ui/scan-overlay.d.ts +23 -0
- package/dist-pkg/ui/scan-overlay.js +50 -0
- package/dist-pkg/ui/screen-text.d.ts +25 -0
- package/dist-pkg/ui/screen-text.js +152 -0
- package/dist-pkg/ui/session-clock.d.ts +32 -0
- package/dist-pkg/ui/session-clock.js +67 -0
- package/dist-pkg/ui/settings-aac.d.ts +70 -0
- package/dist-pkg/ui/settings-aac.js +208 -0
- package/dist-pkg/ui/settings-audio.d.ts +97 -114
- package/dist-pkg/ui/settings-audio.js +493 -425
- package/dist-pkg/ui/settings-controls.d.ts +53 -96
- package/dist-pkg/ui/settings-controls.js +143 -215
- package/dist-pkg/ui/settings-empathy.d.ts +39 -30
- package/dist-pkg/ui/settings-empathy.js +53 -60
- package/dist-pkg/ui/settings-mobility.d.ts +192 -0
- package/dist-pkg/ui/settings-mobility.js +332 -0
- package/dist-pkg/ui/settings-motion.d.ts +91 -70
- package/dist-pkg/ui/settings-motion.js +287 -198
- package/dist-pkg/ui/settings-panel.d.ts +58 -45
- package/dist-pkg/ui/settings-panel.js +189 -94
- package/dist-pkg/ui/settings-typo.d.ts +29 -78
- package/dist-pkg/ui/settings-typo.js +158 -129
- package/dist-pkg/ui/settings-visual.d.ts +29 -87
- package/dist-pkg/ui/settings-visual.js +240 -193
- package/dist-pkg/ui/shell.d.ts +112 -135
- package/dist-pkg/ui/shell.js +148 -217
- package/dist-pkg/ui/simulation-list.d.ts +27 -0
- package/dist-pkg/ui/simulation-list.js +76 -0
- package/dist-pkg/ui/simulation-over-the-world.d.ts +23 -0
- package/dist-pkg/ui/simulation-over-the-world.js +131 -0
- package/dist-pkg/ui/simulation-refusal.d.ts +5 -31
- package/dist-pkg/ui/simulation-refusal.js +8 -56
- package/dist-pkg/ui/switchable-control.d.ts +11 -0
- package/dist-pkg/ui/switchable-control.js +19 -0
- package/dist-pkg/ui/title.d.ts +3 -12
- package/dist-pkg/ui/title.js +49 -18
- package/dist-pkg/ui/top-band.d.ts +26 -0
- package/dist-pkg/ui/top-band.js +96 -0
- package/dist-pkg/ui/typo-choices.d.ts +71 -0
- package/dist-pkg/ui/typo-choices.js +85 -0
- package/dist-pkg/ui/visual-axes-panel.d.ts +11 -47
- package/dist-pkg/ui/visual-axes-panel.js +12 -94
- package/dist-pkg/ui/visual-choices.d.ts +77 -0
- package/dist-pkg/ui/visual-choices.js +107 -0
- package/dist-pkg/ui/vlibras.d.ts +77 -10
- package/dist-pkg/ui/vlibras.js +130 -81
- package/dist-pkg/ui/voice-control.d.ts +68 -0
- package/dist-pkg/ui/voice-control.js +276 -0
- package/dist-pkg/ui/voice-settings.d.ts +95 -0
- package/dist-pkg/ui/voice-settings.js +352 -0
- package/dist-pkg/ui/where-the-child-is.d.ts +31 -0
- package/dist-pkg/ui/where-the-child-is.js +70 -0
- package/docs/CREDITS.md +300 -44
- package/docs/LICENSES.md +189 -145
- package/package.json +51 -27
- package/scripts/check-cartridge.mjs +78 -0
- package/scripts/game-build.d.mts +25 -0
- package/scripts/game-build.mjs +144 -0
- package/scripts/heavy-into-the-delivery.mjs +388 -0
- package/scripts/libras-avatar.json +680 -0
- package/scripts/libras-avatar.mjs +246 -0
- package/scripts/libras-glosses/gloss.py +95 -0
- package/scripts/libras-glosses/pyproject.toml +32 -0
- package/scripts/libras-glosses/uv.lock +781 -0
- package/scripts/libras-glosses.mjs +351 -0
- package/scripts/licences/Apache-2.0.txt +176 -0
- package/scripts/licences/GPL-3.0.txt +674 -0
- package/scripts/licences/MIT.txt +17 -0
- package/scripts/licences/OFL-1.1.txt +86 -0
- package/scripts/licences/UFL-1.0.txt +96 -0
- package/scripts/licences/fonts.mjs +389 -0
- package/scripts/licences/third-party.mjs +301 -0
- package/scripts/licences/vosk-browser.NOTICE.txt +268 -0
- package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
- package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
- package/app/public/vendor/fonts/fondamento-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fondamento-400.woff2 +0 -0
- package/app/public/vendor/fonts/inter-400.woff2 +0 -0
- package/app/public/vendor/fonts/inter-700.woff2 +0 -0
- package/app/public/vendor/fonts/lato-400.woff2 +0 -0
- package/app/public/vendor/fonts/lato-700.woff2 +0 -0
- package/app/public/vendor/fonts/literata-400.woff2 +0 -0
- package/app/public/vendor/fonts/literata-700.woff2 +0 -0
- package/app/public/vendor/fonts/newsreader-400.woff2 +0 -0
- package/app/public/vendor/fonts/newsreader-700.woff2 +0 -0
- package/app/public/vendor/fonts/opendyslexic-400.woff2 +0 -0
- package/app/public/vendor/fonts/opensans-400.woff2 +0 -0
- package/app/public/vendor/fonts/opensans-700.woff2 +0 -0
- package/app/public/vendor/fonts/pinyon-400.woff2 +0 -0
- package/app/public/vendor/fonts/pressstart-400.woff2 +0 -0
- package/app/public/vendor/fonts/quattro-400.woff2 +0 -0
- package/app/public/vendor/fonts/quattro-700.woff2 +0 -0
- package/app/public/vendor/fonts/sourcesans-400.woff2 +0 -0
- package/app/public/vendor/fonts/sourcesans-700.woff2 +0 -0
- package/app/public/vendor/fonts/sourceserif-400.woff2 +0 -0
- package/app/public/vendor/fonts/sourceserif-700.woff2 +0 -0
- package/app/public/vendor/fonts/ufmag-400.woff2 +0 -0
- package/dist-pkg/core/anel.d.ts +0 -17
- package/dist-pkg/core/anel.js +0 -31
- package/dist-pkg/core/collision.d.ts +0 -21
- package/dist-pkg/core/collision.js +0 -62
- package/dist-pkg/core/layers.d.ts +0 -63
- package/dist-pkg/core/layers.js +0 -95
- package/dist-pkg/core/letter-grid.d.ts +0 -55
- package/dist-pkg/core/letter-grid.js +0 -116
- package/dist-pkg/core/password.d.ts +0 -34
- package/dist-pkg/core/password.js +0 -205
- package/dist-pkg/core/rotulo-acessivel.d.ts +0 -17
- package/dist-pkg/core/rotulo-acessivel.js +0 -41
- package/dist-pkg/core/run-state.d.ts +0 -115
- package/dist-pkg/core/run-state.js +0 -40
- package/dist-pkg/core/tiles.d.ts +0 -12
- package/dist-pkg/core/tiles.js +0 -61
- package/dist-pkg/core/world.d.ts +0 -4
- package/dist-pkg/core/world.js +0 -58
- package/dist-pkg/input/origem-sintetica.d.ts +0 -44
- package/dist-pkg/input/origem-sintetica.js +0 -60
- package/dist-pkg/input/transporte-em-uso.d.ts +0 -101
- package/dist-pkg/input/transporte-em-uso.js +0 -130
- package/dist-pkg/platform/audio-nav.d.ts +0 -51
- package/dist-pkg/platform/audio-nav.js +0 -99
- package/dist-pkg/platform/guide-intensity.d.ts +0 -40
- package/dist-pkg/platform/guide-intensity.js +0 -73
- package/dist-pkg/platform/pesados-catalogo.d.ts +0 -14
- package/dist-pkg/platform/pesados-catalogo.js +0 -177
- package/dist-pkg/platform/pesados.d.ts +0 -31
- package/dist-pkg/platform/pesados.js +0 -75
- package/dist-pkg/platform/vozes-prontas.d.ts +0 -28
- package/dist-pkg/platform/vozes-prontas.js +0 -61
- package/dist-pkg/render/camera.d.ts +0 -58
- package/dist-pkg/render/camera.js +0 -105
- package/dist-pkg/render/cenario-data.d.ts +0 -127
- package/dist-pkg/render/cenario-data.js +0 -145
- package/dist-pkg/render/city-tex.d.ts +0 -63
- package/dist-pkg/render/city-tex.js +0 -228
- package/dist-pkg/render/city-tiles.d.ts +0 -11
- package/dist-pkg/render/city-tiles.js +0 -140
- package/dist-pkg/render/draw.d.ts +0 -149
- package/dist-pkg/render/draw.js +0 -231
- package/dist-pkg/render/fx.d.ts +0 -63
- package/dist-pkg/render/fx.js +0 -123
- package/dist-pkg/render/minimap.d.ts +0 -11
- package/dist-pkg/render/minimap.js +0 -94
- package/dist-pkg/render/parallax.d.ts +0 -85
- package/dist-pkg/render/parallax.js +0 -158
- package/dist-pkg/render/player-anim.d.ts +0 -71
- package/dist-pkg/render/player-anim.js +0 -152
- package/dist-pkg/render/recycling-tex.d.ts +0 -48
- package/dist-pkg/render/recycling-tex.js +0 -164
- package/dist-pkg/render/scene-city.d.ts +0 -77
- package/dist-pkg/render/scene-city.js +0 -181
- package/dist-pkg/render/scene-parallax.d.ts +0 -72
- package/dist-pkg/render/scene-parallax.js +0 -426
- package/dist-pkg/render/scene-sky.d.ts +0 -126
- package/dist-pkg/render/scene-sky.js +0 -295
- package/dist-pkg/render/set-cenario.d.ts +0 -54
- package/dist-pkg/render/set-cenario.js +0 -103
- package/dist-pkg/render/textures.d.ts +0 -75
- package/dist-pkg/render/textures.js +0 -240
- package/dist-pkg/render/title-scene.d.ts +0 -46
- package/dist-pkg/render/title-scene.js +0 -75
- package/dist-pkg/render/weather.d.ts +0 -96
- package/dist-pkg/render/weather.js +0 -171
- package/dist-pkg/render/wheelchair-sprites.d.ts +0 -32
- package/dist-pkg/render/wheelchair-sprites.js +0 -69
- package/dist-pkg/render/world-tex.d.ts +0 -18
- package/dist-pkg/render/world-tex.js +0 -87
- package/dist-pkg/ui/activities-menu.d.ts +0 -258
- package/dist-pkg/ui/activities-menu.js +0 -648
- package/dist-pkg/ui/caa-sets.d.ts +0 -39
- package/dist-pkg/ui/caa-sets.js +0 -65
- package/dist-pkg/ui/latch-refusal.d.ts +0 -32
- package/dist-pkg/ui/latch-refusal.js +0 -60
- package/dist-pkg/ui/map-hub.d.ts +0 -56
- package/dist-pkg/ui/map-hub.js +0 -138
- package/dist-pkg/ui/settings-caa.d.ts +0 -45
- package/dist-pkg/ui/settings-caa.js +0 -137
- package/dist-pkg/ui/settings-motor.d.ts +0 -175
- package/dist-pkg/ui/settings-motor.js +0 -342
- package/dist-pkg/ui/webcam.d.ts +0 -7
- package/dist-pkg/ui/webcam.js +0 -93
|
@@ -1,64 +1,63 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
2
|
import { type Action } from '../core/actions.js';
|
|
3
|
-
/** `null` =
|
|
3
|
+
/** `null` = this transport does NOT reach this action by default. A declared absence, never an oversight. */
|
|
4
4
|
export type Binding<T> = T | null;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Keyboard, SOLO scheme. `KeyboardEvent.code` codes — physical, not the printed letter, which changes with the
|
|
7
|
+
* ABNT2/US layout and is the reason `key` is never used here.
|
|
8
8
|
*/
|
|
9
9
|
export declare const KEYBOARD_SOLO: Readonly<Record<Action, Binding<readonly string[]>>>;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Keyboard, TWO-PLAYER scheme — the fourteen positions for each (ADR-0096).
|
|
12
12
|
*
|
|
13
|
-
* ⚠️
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* `
|
|
13
|
+
* ⚠️ PLAYER 1 HERE IS NOT `KEYBOARD_SOLO`, and the difference is ONE and mandatory: the ARROWS leave it. In solo
|
|
14
|
+
* they are a second path for the d-pad; in duo they are the OTHER player's d-pad. Leaving them in both would make
|
|
15
|
+
* the two characters walk together — a defect that raises no error anywhere and only shows when playing as two.
|
|
16
|
+
* `conflictsBetweenTables` exists because of this line.
|
|
17
17
|
*
|
|
18
|
-
* ⚠️
|
|
19
|
-
*
|
|
18
|
+
* ⚠️ AND PLAYER 2'S GEOMETRY IS PLAYER 1'S, MOVED TO THE NUMERIC KEYPAD — which is what carries muscle memory from
|
|
19
|
+
* one side of the table to the other:
|
|
20
20
|
*
|
|
21
|
-
* 7 8 / *
|
|
22
|
-
* Y U I O 7 8 9 +
|
|
21
|
+
* 7 8 / * shoulders on the TOP row
|
|
22
|
+
* Y U I O 7 8 9 + triggers at the ENDS of the action row
|
|
23
23
|
* J K 5 6
|
|
24
24
|
*
|
|
25
|
-
* action1 U ↔ Numpad8 (
|
|
26
|
-
* action2 J ↔ Numpad5 (
|
|
25
|
+
* action1 U ↔ Numpad8 (top-left) action4 I ↔ Numpad9 (top-right)
|
|
26
|
+
* action2 J ↔ Numpad5 (bottom-left) action3 K ↔ Numpad6 (bottom-right)
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
* The `U I / J K` block and the `8 9 / 5 6` block have the SAME shape, so the 45° rotation this file's header
|
|
29
|
+
* describes for the Xbox holds for player 2 as well. It is not a keyboard coincidence: it is what makes the default
|
|
30
|
+
* teachable once.
|
|
31
31
|
*
|
|
32
|
-
* ⚠️ `Digit7`/`Digit8` (
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* `code`.
|
|
32
|
+
* ⚠️ `Digit7`/`Digit8` (player 1) and `Numpad7` (player 2) ARE DIFFERENT KEYS, which is why the Dev's specification
|
|
33
|
+
* says «alphanumeric» and «numeric» in so many words. `KeyboardEvent.code` always tells them apart; `key` does not —
|
|
34
|
+
* with Num Lock off the keypad arrives as `ArrowUp`/`Home`, and a scheme read by `key` would merge player 2's d-pad
|
|
35
|
+
* with their actions. One more reason this file only speaks `code`.
|
|
37
36
|
*/
|
|
38
37
|
export declare const KEYBOARD_DUO: readonly Readonly<Record<Action, Binding<readonly string[]>>>[];
|
|
39
38
|
/**
|
|
40
|
-
* Gamepad,
|
|
41
|
-
*
|
|
39
|
+
* Gamepad, the Gamepad API's STANDARD map (`mapping: "standard"`), which is what an Xbox controller reports.
|
|
40
|
+
* The number is the index into `gamepad.buttons`.
|
|
42
41
|
*/
|
|
43
42
|
export declare const GAMEPAD_STANDARD: Readonly<Record<Action, Binding<number>>>;
|
|
44
43
|
/**
|
|
45
|
-
*
|
|
44
|
+
* Every problem in a binding table. EMPTY means conformant.
|
|
46
45
|
*
|
|
47
|
-
* ⚠️
|
|
48
|
-
*
|
|
49
|
-
*
|
|
46
|
+
* ⚠️ WHAT THIS EXISTS TO CATCH IS THE DOUBLE, and it has already happened: the specification arrived with `I` on two
|
|
47
|
+
* actions. A duplicated binding raises no error anywhere — the two actions fire together, and the child sees an
|
|
48
|
+
* intermittent double action nobody can reproduce on purpose.
|
|
50
49
|
*/
|
|
51
|
-
export declare function bindingProblems<T>(
|
|
50
|
+
export declare function bindingProblems<T>(table: Readonly<Record<Action, Binding<T | readonly T[]>>>): string[];
|
|
52
51
|
/**
|
|
53
|
-
*
|
|
52
|
+
* The keys TWO OR MORE tables claim. EMPTY means the players do not trample each other.
|
|
54
53
|
*
|
|
55
|
-
* ⚠️
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
54
|
+
* ⚠️ THIS IS A DIFFERENT PROBLEM FROM `bindingProblems`, WHICH IS WHY IT NEEDED ITS OWN FUNCTION: that one looks at
|
|
55
|
+
* ONE table and catches the same key on two actions; this one looks at TWO tables and catches the same key on two
|
|
56
|
+
* PLAYERS. Each `KEYBOARD_DUO` scheme passes the first on its own — and the arrows, if they stayed in both, would make
|
|
57
|
+
* the two characters walk together with nothing failing.
|
|
59
58
|
*
|
|
60
|
-
*
|
|
59
|
+
* The message names both owners, because "repeated key" sends someone looking for what the function already knows.
|
|
61
60
|
*/
|
|
62
|
-
export declare function
|
|
63
|
-
/**
|
|
64
|
-
export declare function unreachable<T>(
|
|
61
|
+
export declare function conflictsBetweenTables<T>(tables: readonly Readonly<Record<Action, Binding<T | readonly T[]>>>[]): string[];
|
|
62
|
+
/** The actions this transport does NOT reach. It is what a selection screen has to say BEFORE the child starts. */
|
|
63
|
+
export declare function unreachable<T>(table: Readonly<Record<Action, Binding<T | readonly T[]>>>): Action[];
|
|
@@ -1,66 +1,50 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// input/default-bindings —
|
|
2
|
+
// input/default-bindings — WHAT EACH TRANSPORT OFFERS, BY DEFAULT, FOR EACH OF THE FOURTEEN ACTIONS.
|
|
3
3
|
//
|
|
4
|
-
// =========================
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
4
|
+
// ========================= WHAT THIS IS, AND WHY IT LIVES WHERE IT DOES =========================
|
|
5
|
+
// ADR-0085 decided the fourteen POSITIONS (`core/actions.ts`) and said, in so many words, that the physical
|
|
6
|
+
// names — L1, R2, X, A — are BINDINGS and live in the transport, not in the vocabulary. This is the file where
|
|
7
|
+
// they live. A new transport (speech, gaze, touch) brings its own table and does not touch `core/actions`.
|
|
8
8
|
//
|
|
9
|
-
// ✅
|
|
10
|
-
// escrita e deixou de ser sem ninguém a corrigir. A primeira dizia «NADA AQUI ESTÁ LIGADO AINDA» (morreu com a
|
|
11
|
-
// issue #103, 06/09); a segunda dizia que só o gamepad estava, e morreu com a issue #118, que uniu as duas
|
|
12
|
-
// tabelas de teclado. 📏 Medido em 2026-09-09:
|
|
9
|
+
// ✅ ALL THREE ARE WIRED:
|
|
13
10
|
//
|
|
14
|
-
// · `GAMEPAD_STANDARD` — `input/
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
// · `KEYBOARD_SOLO` / `KEYBOARD_DUO` — `input/keyboard
|
|
18
|
-
//
|
|
19
|
-
//
|
|
11
|
+
// · `GAMEPAD_STANDARD` — `input/pad-reading` reads this table's indices instead of literals (and
|
|
12
|
+
// `input/pad-defaults` lays the game's mapping over it). Wiring it caught a real disagreement: `action1` ran
|
|
13
|
+
// on X, R1 and R2 while the table declared R1 and R2 as shoulder and trigger.
|
|
14
|
+
// · `KEYBOARD_SOLO` / `KEYBOARD_DUO` — `input/keyboard` builds `KB_DEFAULTS` from them (`mutableCopy`). They
|
|
15
|
+
// stopped being two parallel lists: they are the SAME decision, derived, so the old divergence cannot come
|
|
16
|
+
// back by forgetting.
|
|
20
17
|
//
|
|
21
|
-
// ⚠️
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
// que lhe escrevesse dentro alterava o padrão de fábrica desta tabela para toda a gente.
|
|
18
|
+
// ⚠️ AND THE DERIVATION IS BY DEEP COPY (`mutableCopy` is a JSON round-trip), in TWO layers. `input/keyboard`
|
|
19
|
+
// copies these tables into `KB_DEFAULTS`, and copies AGAIN into the mutable `kb`. The child's remapping mutates
|
|
20
|
+
// `kb` ("remapping one key MUTATES the object", says `setKB`), so it would not reach this even without the first
|
|
21
|
+
// copy. What the first layer buys is the rest: `KB_DEFAULTS` is exported, and without it any consumer writing
|
|
22
|
+
// into it would change this table's factory default for everyone.
|
|
27
23
|
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
// comparar em vez de acreditar.
|
|
24
|
+
// ========================= THE KEYBOARD'S SYMMETRY, WHICH IS NOT DECORATION =========================
|
|
25
|
+
// The default the Dev specified rests on a block of the QWERTY:
|
|
31
26
|
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
// 7 8 ← L1 sobre U, R1 sobre I
|
|
36
|
-
// Y U I O ← L2 à esquerda de U, R2 à direita de I
|
|
27
|
+
// 7 8 ← L1 over U, R1 over I
|
|
28
|
+
// Y U I O ← L2 left of U, R2 right of I
|
|
37
29
|
// H J K L
|
|
38
30
|
//
|
|
39
|
-
// ⚠️
|
|
40
|
-
// Y(
|
|
41
|
-
//
|
|
42
|
-
//
|
|
31
|
+
// ⚠️ AND THE KEYBOARD↔XBOX MAPPING IS A 45° ROTATION, consistent across all four: X(west)→U(northwest),
|
|
32
|
+
// Y(north)→I(northeast), B(east)→K(southeast), A(south)→J(southwest). The pad's diamond lands on the `U I / J K`
|
|
33
|
+
// square by turning an eighth. That is why the table sits well under the finger: what muscle memory keeps is the
|
|
34
|
+
// RELATIVE POSITION, not the letter.
|
|
43
35
|
//
|
|
44
|
-
// ⚠️
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
36
|
+
// ⚠️ AND IT WAS THAT SYMMETRY THAT EXPOSED AN ERROR IN THE SPECIFICATION. It arrived with `I` assigned TWICE —
|
|
37
|
+
// to `action4` and to R2 —, and the symmetric pair of `Y` (left of U) is `O` (right of I). `O` was adopted. This
|
|
38
|
+
// file's gate fails a repeated key, so the error would not have passed anyway; what the symmetry gave was the
|
|
39
|
+
// RIGHT key instead of only the news that one was wrong.
|
|
48
40
|
import { ACTIONS } from '../core/actions.js';
|
|
49
|
-
// ⚠️
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
// pulo desde sempre, a especificação do padrão não a mencionava, e pô-la em `action2` por conta própria
|
|
54
|
-
// seria decidir que o pulo mora ali. Se o preset da plataforma puser o pulo noutra posição, a barra segue o
|
|
55
|
-
// verbo errado — pior do que ela não existir.
|
|
56
|
-
//
|
|
57
|
-
// O Dev decidiu (ADR-0086 §2) que o pulo mora em `action2`, e a barra voltou. O texto acima continuou a
|
|
58
|
-
// dizer «fica de fora» durante todo esse tempo, ao lado de duas linhas que a declaram. Corrigido em
|
|
59
|
-
// 2026-09-07, na mesma passagem da issue #118 — que trata exactamente desta classe de erro: um comentário
|
|
60
|
-
// que descreve um estado que já passou.
|
|
41
|
+
// ⚠️ `Space` IS ON `action2` because ADR-0086 §2 put jump there. It was left out of the first version of this
|
|
42
|
+
// table, and for a sound reason at the time: the bar has been jump's second shortcut forever, the specification
|
|
43
|
+
// did not mention it, and putting it on `action2` unasked would have decided where jump lives. Once the Dev
|
|
44
|
+
// decided that (ADR-0086 §2), the bar came back.
|
|
61
45
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
46
|
+
* Keyboard, SOLO scheme. `KeyboardEvent.code` codes — physical, not the printed letter, which changes with the
|
|
47
|
+
* ABNT2/US layout and is the reason `key` is never used here.
|
|
64
48
|
*/
|
|
65
49
|
export const KEYBOARD_SOLO = {
|
|
66
50
|
up: ['KeyW', 'ArrowUp'],
|
|
@@ -74,46 +58,45 @@ export const KEYBOARD_SOLO = {
|
|
|
74
58
|
leftShoulder: ['Digit7'], // L1
|
|
75
59
|
leftTrigger: ['KeyY'], // L2
|
|
76
60
|
rightShoulder: ['Digit8'], // R1
|
|
77
|
-
rightTrigger: ['KeyO'], // R2 —
|
|
78
|
-
// ⚠️
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
// `Enter`
|
|
82
|
-
//
|
|
61
|
+
rightTrigger: ['KeyO'], // R2 — see the symmetry note above
|
|
62
|
+
// ⚠️ AND THESE TWO CLOSE A DEBT ADR-0074 §1 RECORDED: `start` existed in two transports of nine and was missing
|
|
63
|
+
// from the keyboard. It is no longer missing. The symmetry is one of HANDS: `F` sits by the thumb of the hand that
|
|
64
|
+
// moves (the WASD block), `H` by the hand that acts (the UIJK block).
|
|
65
|
+
// `Enter` goes with `H` because it ALREADY paused — `input/keydown` has `PAUSE_KEYS = {Escape, Enter}` —, so
|
|
66
|
+
// declaring it here describes what the key has long done instead of giving it a new job.
|
|
83
67
|
start: ['KeyH', 'Enter'],
|
|
84
68
|
select: ['KeyF'],
|
|
85
69
|
};
|
|
86
70
|
/**
|
|
87
|
-
*
|
|
71
|
+
* Keyboard, TWO-PLAYER scheme — the fourteen positions for each (ADR-0096).
|
|
88
72
|
*
|
|
89
|
-
* ⚠️
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* `
|
|
73
|
+
* ⚠️ PLAYER 1 HERE IS NOT `KEYBOARD_SOLO`, and the difference is ONE and mandatory: the ARROWS leave it. In solo
|
|
74
|
+
* they are a second path for the d-pad; in duo they are the OTHER player's d-pad. Leaving them in both would make
|
|
75
|
+
* the two characters walk together — a defect that raises no error anywhere and only shows when playing as two.
|
|
76
|
+
* `conflictsBetweenTables` exists because of this line.
|
|
93
77
|
*
|
|
94
|
-
* ⚠️
|
|
95
|
-
*
|
|
78
|
+
* ⚠️ AND PLAYER 2'S GEOMETRY IS PLAYER 1'S, MOVED TO THE NUMERIC KEYPAD — which is what carries muscle memory from
|
|
79
|
+
* one side of the table to the other:
|
|
96
80
|
*
|
|
97
|
-
* 7 8 / *
|
|
98
|
-
* Y U I O 7 8 9 +
|
|
81
|
+
* 7 8 / * shoulders on the TOP row
|
|
82
|
+
* Y U I O 7 8 9 + triggers at the ENDS of the action row
|
|
99
83
|
* J K 5 6
|
|
100
84
|
*
|
|
101
|
-
* action1 U ↔ Numpad8 (
|
|
102
|
-
* action2 J ↔ Numpad5 (
|
|
85
|
+
* action1 U ↔ Numpad8 (top-left) action4 I ↔ Numpad9 (top-right)
|
|
86
|
+
* action2 J ↔ Numpad5 (bottom-left) action3 K ↔ Numpad6 (bottom-right)
|
|
103
87
|
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
88
|
+
* The `U I / J K` block and the `8 9 / 5 6` block have the SAME shape, so the 45° rotation this file's header
|
|
89
|
+
* describes for the Xbox holds for player 2 as well. It is not a keyboard coincidence: it is what makes the default
|
|
90
|
+
* teachable once.
|
|
107
91
|
*
|
|
108
|
-
* ⚠️ `Digit7`/`Digit8` (
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* `code`.
|
|
92
|
+
* ⚠️ `Digit7`/`Digit8` (player 1) and `Numpad7` (player 2) ARE DIFFERENT KEYS, which is why the Dev's specification
|
|
93
|
+
* says «alphanumeric» and «numeric» in so many words. `KeyboardEvent.code` always tells them apart; `key` does not —
|
|
94
|
+
* with Num Lock off the keypad arrives as `ArrowUp`/`Home`, and a scheme read by `key` would merge player 2's d-pad
|
|
95
|
+
* with their actions. One more reason this file only speaks `code`.
|
|
113
96
|
*/
|
|
114
97
|
export const KEYBOARD_DUO = Object.freeze([
|
|
115
98
|
{
|
|
116
|
-
//
|
|
99
|
+
// PLAYER 1 — the left hand moves (WASD), the right acts (UIJK). No arrows: they are player 2's.
|
|
117
100
|
up: ['KeyW'],
|
|
118
101
|
down: ['KeyS'],
|
|
119
102
|
left: ['KeyA'],
|
|
@@ -130,9 +113,9 @@ export const KEYBOARD_DUO = Object.freeze([
|
|
|
130
113
|
select: ['KeyF'],
|
|
131
114
|
},
|
|
132
115
|
{
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
//
|
|
116
|
+
// PLAYER 2 — the arrows move, the numeric keypad acts. `Enter` stays with player 1; `NumpadEnter` is left out on
|
|
117
|
+
// purpose, because `ui/menu-intent` already uses it as CONFIRM in every menu (KEY_YES) and `input/keydown`
|
|
118
|
+
// records that it does NOT pause. Giving it a third job would overlap.
|
|
136
119
|
up: ['ArrowUp'],
|
|
137
120
|
down: ['ArrowDown'],
|
|
138
121
|
left: ['ArrowLeft'],
|
|
@@ -141,41 +124,41 @@ export const KEYBOARD_DUO = Object.freeze([
|
|
|
141
124
|
action2: ['Numpad5'],
|
|
142
125
|
action3: ['Numpad6'],
|
|
143
126
|
action4: ['Numpad9'],
|
|
144
|
-
leftShoulder: ['NumpadDivide'], //
|
|
127
|
+
leftShoulder: ['NumpadDivide'], // the keypad's `/` key
|
|
145
128
|
leftTrigger: ['Numpad7'],
|
|
146
|
-
rightShoulder: ['NumpadMultiply'], //
|
|
147
|
-
rightTrigger: ['NumpadAdd'], //
|
|
129
|
+
rightShoulder: ['NumpadMultiply'], // the `*` key
|
|
130
|
+
rightTrigger: ['NumpadAdd'], // the `+` key
|
|
148
131
|
/**
|
|
149
|
-
* ⚠️ `ShiftRight`
|
|
132
|
+
* ⚠️ `ShiftRight` IS THE WAY OUT, AND IT WAS MISSING (#122).
|
|
150
133
|
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
134
|
+
* A Chromebook has no numeric keypad, and a Chromebook is the hardware pillar 1 names. Of this seat's fourteen
|
|
135
|
+
* positions, **TEN are reachable only through the keypad** — the eight actions plus `start` and `select`. The
|
|
136
|
+
* child in the second chair moves with the arrows, acts on nothing, and **cannot open the menu to fix it**,
|
|
137
|
+
* because the key that opens the menu is in the same missing block.
|
|
155
138
|
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
139
|
+
* That is what the audit called «um padrão do qual a criança não escapa», and the fix it asks for is literal:
|
|
140
|
+
* *«tornar o próprio padrão remapeável, e não trocar as teclas que ele escolheu».* The keys stay — the keypad
|
|
141
|
+
* layout is better where it exists, it is one physical block under one hand, and it takes nothing from the first
|
|
142
|
+
* player. What enters is ONE door every keyboard has, so the remapping is reachable.
|
|
160
143
|
*
|
|
161
|
-
* ⚠️
|
|
162
|
-
*
|
|
163
|
-
*
|
|
144
|
+
* ⚠️ AND ONLY ON `start`, on purpose: from the pause the remapping screen is reachable, and from there ALL the
|
|
145
|
+
* other thirteen positions. One door is enough to escape; each extra default is a key taken from the common pool,
|
|
146
|
+
* and this keyboard is already shared by two children.
|
|
164
147
|
*
|
|
165
|
-
* `ShiftRight`
|
|
166
|
-
*
|
|
148
|
+
* `ShiftRight` because every keyboard has it, it sits beside the arrow block (the same hand that already uses
|
|
149
|
+
* them), it is not a text key — and it is FREE in all four tables, which was measured and not assumed.
|
|
167
150
|
*/
|
|
168
151
|
start: ['Numpad1', 'ShiftRight'],
|
|
169
152
|
select: ['Numpad0'],
|
|
170
153
|
},
|
|
171
154
|
]);
|
|
172
155
|
/**
|
|
173
|
-
* Gamepad,
|
|
174
|
-
*
|
|
156
|
+
* Gamepad, the Gamepad API's STANDARD map (`mapping: "standard"`), which is what an Xbox controller reports.
|
|
157
|
+
* The number is the index into `gamepad.buttons`.
|
|
175
158
|
*/
|
|
176
159
|
export const GAMEPAD_STANDARD = {
|
|
177
|
-
//
|
|
178
|
-
//
|
|
160
|
+
// The directions do not come from buttons: they come from stick 0/1 and the D-pad 12–15, in `stdDirs`. Declaring
|
|
161
|
+
// `null` here would say "does not reach", which is false — that is why the D-pad indices are named.
|
|
179
162
|
up: 12,
|
|
180
163
|
down: 13,
|
|
181
164
|
left: 14,
|
|
@@ -185,80 +168,80 @@ export const GAMEPAD_STANDARD = {
|
|
|
185
168
|
action3: 1, // B
|
|
186
169
|
action4: 3, // Y
|
|
187
170
|
leftShoulder: 4, // L1
|
|
188
|
-
leftTrigger: 6, // L2 — ⚠️
|
|
189
|
-
//
|
|
190
|
-
// `pressed`,
|
|
171
|
+
leftTrigger: 6, // L2 — ⚠️ ANALOGUE trigger: the API exposes it as a button with `.value`, and on some
|
|
172
|
+
// controllers also as an axis. `bindActive` already handles both; `padActions` only reads
|
|
173
|
+
// `pressed`, which works but throws away the trigger's travel.
|
|
191
174
|
rightShoulder: 5, // R1
|
|
192
|
-
rightTrigger: 7, // R2 —
|
|
175
|
+
rightTrigger: 7, // R2 — same analogue caveat
|
|
193
176
|
start: 9, // Start / Menu
|
|
194
177
|
select: 8, // Select / Back / View
|
|
195
178
|
};
|
|
196
179
|
/**
|
|
197
|
-
*
|
|
180
|
+
* Every problem in a binding table. EMPTY means conformant.
|
|
198
181
|
*
|
|
199
|
-
* ⚠️
|
|
200
|
-
*
|
|
201
|
-
*
|
|
182
|
+
* ⚠️ WHAT THIS EXISTS TO CATCH IS THE DOUBLE, and it has already happened: the specification arrived with `I` on two
|
|
183
|
+
* actions. A duplicated binding raises no error anywhere — the two actions fire together, and the child sees an
|
|
184
|
+
* intermittent double action nobody can reproduce on purpose.
|
|
202
185
|
*/
|
|
203
|
-
export function bindingProblems(
|
|
186
|
+
export function bindingProblems(table) {
|
|
204
187
|
const p = [];
|
|
205
|
-
const
|
|
206
|
-
for (const
|
|
207
|
-
if (!(
|
|
208
|
-
p.push(`binding: ${
|
|
188
|
+
const actionOfKey = new Map();
|
|
189
|
+
for (const action of ACTIONS) {
|
|
190
|
+
if (!(action in table)) {
|
|
191
|
+
p.push(`binding: ${action} is not declared - write null if the transport cannot reach it`);
|
|
209
192
|
continue;
|
|
210
193
|
}
|
|
211
|
-
const v =
|
|
194
|
+
const v = table[action];
|
|
212
195
|
if (v === null)
|
|
213
196
|
continue;
|
|
214
|
-
const
|
|
215
|
-
if (
|
|
216
|
-
p.push(`binding: ${
|
|
197
|
+
const keyList = Array.isArray(v) ? v : [v];
|
|
198
|
+
if (keyList.length === 0) {
|
|
199
|
+
p.push(`binding: ${action} has an empty list - write null instead`);
|
|
217
200
|
continue;
|
|
218
201
|
}
|
|
219
|
-
for (const item of
|
|
220
|
-
const
|
|
221
|
-
const
|
|
222
|
-
if (
|
|
223
|
-
p.push(`binding: ${
|
|
202
|
+
for (const item of keyList) {
|
|
203
|
+
const key = String(item);
|
|
204
|
+
const previous = actionOfKey.get(key);
|
|
205
|
+
if (previous)
|
|
206
|
+
p.push(`binding: ${key} is bound to both ${previous} and ${action}`);
|
|
224
207
|
else
|
|
225
|
-
|
|
208
|
+
actionOfKey.set(key, action);
|
|
226
209
|
}
|
|
227
210
|
}
|
|
228
211
|
return p;
|
|
229
212
|
}
|
|
230
213
|
/**
|
|
231
|
-
*
|
|
214
|
+
* The keys TWO OR MORE tables claim. EMPTY means the players do not trample each other.
|
|
232
215
|
*
|
|
233
|
-
* ⚠️
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
216
|
+
* ⚠️ THIS IS A DIFFERENT PROBLEM FROM `bindingProblems`, WHICH IS WHY IT NEEDED ITS OWN FUNCTION: that one looks at
|
|
217
|
+
* ONE table and catches the same key on two actions; this one looks at TWO tables and catches the same key on two
|
|
218
|
+
* PLAYERS. Each `KEYBOARD_DUO` scheme passes the first on its own — and the arrows, if they stayed in both, would make
|
|
219
|
+
* the two characters walk together with nothing failing.
|
|
237
220
|
*
|
|
238
|
-
*
|
|
221
|
+
* The message names both owners, because "repeated key" sends someone looking for what the function already knows.
|
|
239
222
|
*/
|
|
240
|
-
export function
|
|
223
|
+
export function conflictsBetweenTables(tables) {
|
|
241
224
|
const p = [];
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
for (const
|
|
245
|
-
const v =
|
|
225
|
+
const actionOfKey = new Map();
|
|
226
|
+
tables.forEach((table, i) => {
|
|
227
|
+
for (const action of ACTIONS) {
|
|
228
|
+
const v = table[action];
|
|
246
229
|
if (v === null || v === undefined)
|
|
247
230
|
continue;
|
|
248
231
|
for (const item of (Array.isArray(v) ? v : [v])) {
|
|
249
|
-
const
|
|
250
|
-
const
|
|
251
|
-
const
|
|
252
|
-
if (
|
|
253
|
-
p.push(`cross: ${
|
|
232
|
+
const key = String(item);
|
|
233
|
+
const here = `p${i + 1}.${action}`;
|
|
234
|
+
const previous = actionOfKey.get(key);
|
|
235
|
+
if (previous)
|
|
236
|
+
p.push(`cross: ${key} is claimed by both ${previous} and ${here}`);
|
|
254
237
|
else
|
|
255
|
-
|
|
238
|
+
actionOfKey.set(key, here);
|
|
256
239
|
}
|
|
257
240
|
}
|
|
258
241
|
});
|
|
259
242
|
return p;
|
|
260
243
|
}
|
|
261
|
-
/**
|
|
262
|
-
export function unreachable(
|
|
263
|
-
return ACTIONS.filter((a) =>
|
|
244
|
+
/** The actions this transport does NOT reach. It is what a selection screen has to say BEFORE the child starts. */
|
|
245
|
+
export function unreachable(table) {
|
|
246
|
+
return ACTIONS.filter((a) => table[a] === null || table[a] === undefined);
|
|
264
247
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
2
|
export declare const PAD_DESIGNS: Record<string, Record<string, string[]>>;
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Pad glyphs that CANNOT BE READ ALOUD — the i18n key of each one's spoken name (ADR-0044, item 4).
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* A screen reader reads `✕` as "multiplication sign", or reads nothing, and `△` usually comes out mute. That is why the
|
|
7
|
+
* pause legend carried `aria-hidden="true"`: the noise AND the information were hidden together. Here is the half that
|
|
8
|
+
* was missing to take the attribute off — the glyph stays on screen for whoever recognises it, and the WORD exists for
|
|
9
|
+
* whoever hears it.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Only the four PlayStation ones are here. `A`, `B`, `X`, `Y` and `0`–`3` already read, and translating them to "letter
|
|
12
|
+
* A" would add noise in accessibility's name — the defect this item fixes, inside out.
|
|
13
13
|
*/
|
|
14
14
|
export declare const PAD_GLYPH_SPOKEN: Record<string, string>;
|
|
15
15
|
export declare const TOUCH_DEFAULT: Record<string, string>;
|