@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,43 +1,42 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
2
|
import type { Action } from './actions.js';
|
|
3
|
-
/**
|
|
3
|
+
/** The name's grammatical gender. `n` = neuter/unknown (Portuguese uses the masculine as the default then). */
|
|
4
4
|
export type Gender = 'm' | 'f' | 'n';
|
|
5
|
-
/**
|
|
5
|
+
/** A name that can be SPOKEN (screen reader) and SIGNED (Libras, which translates the same text). */
|
|
6
6
|
export interface Speakable {
|
|
7
|
-
/**
|
|
7
|
+
/** The name, in the interface's language. Curriculum content is NOT translated — see pillar 3 of ADR-0010. */
|
|
8
8
|
readonly text: string;
|
|
9
9
|
readonly gender: Gender;
|
|
10
10
|
readonly plural: boolean;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* HOW A STEP IS COUNTED — and that is what decides the metric, which is not the same on every board.
|
|
14
14
|
*
|
|
15
|
-
* ⚠️
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* não é imprecisão, é mandar a criança para o lado errado com confiança.
|
|
15
|
+
* ⚠️ The grid had ONE fixed metric (Chebyshev), on the reasoning that on a grid a diagonal costs one step. True where the
|
|
16
|
+
* diagonal is legal. **False in a sliding puzzle**, where nothing moves diagonally: a piece two right and two down is 2
|
|
17
|
+
* away by Chebyshev and FOUR moves away. The sonar under-reported up to 2× — and under-reporting distance to someone who
|
|
18
|
+
* cannot see the screen is not imprecision, it is sending the child the wrong way with confidence.
|
|
20
19
|
*
|
|
21
|
-
* `grid`
|
|
20
|
+
* `grid` was never ONE thing. Whoever declares a grid declares how one walks on it.
|
|
22
21
|
*/
|
|
23
22
|
export type MoveRule = 'orthogonal' | 'diagonal' | 'free';
|
|
24
23
|
/**
|
|
25
|
-
*
|
|
24
|
+
* IN WHAT WORDS A DIRECTION IS SAID. Not the listener's preference: a property of the game's SPACE.
|
|
26
25
|
*
|
|
27
|
-
* `compass`
|
|
28
|
-
* `clock`
|
|
26
|
+
* `compass` north · south · east · west (+ zenith and nadir) — board, top-down, map, 3D
|
|
27
|
+
* `clock` "at 2 o'clock", "at 10 o'clock" — a 2D PLATFORMER, side view
|
|
29
28
|
*
|
|
30
|
-
* ⚠️
|
|
31
|
-
*
|
|
29
|
+
* ⚠️ In a platformer north and south mean nothing: the child is not looking at a map, they are looking from the side.
|
|
30
|
+
* The clock is the frame that view already uses, and gives 12 positions where the rose gives 8.
|
|
32
31
|
*
|
|
33
|
-
* ⚠️
|
|
34
|
-
*
|
|
32
|
+
* ⚠️ AND THE CLOCK ASSUMES READING AN ANALOGUE CLOCK, for an audience that includes early literacy. Not a reason to
|
|
33
|
+
* refuse it — a reason for the SPOKEN label to be tested with children (issue #7) before it is declared good.
|
|
35
34
|
*/
|
|
36
35
|
export type Frame = 'compass' | 'clock';
|
|
37
36
|
export type Topology =
|
|
38
37
|
/**
|
|
39
|
-
*
|
|
40
|
-
* `size`
|
|
38
|
+
* A discrete grid. Distance is in CELLS, and the metric comes from `move`.
|
|
39
|
+
* `size` is `[columns, rows]` or `[columns, rows, layers]`.
|
|
41
40
|
*/
|
|
42
41
|
{
|
|
43
42
|
readonly kind: 'grid';
|
|
@@ -46,8 +45,8 @@ export type Topology =
|
|
|
46
45
|
readonly frame: Frame;
|
|
47
46
|
}
|
|
48
47
|
/**
|
|
49
|
-
*
|
|
50
|
-
* `size`
|
|
48
|
+
* Continuous space. Distance is in world UNITS; `unit` says what a "step" is worth to the narrator.
|
|
49
|
+
* `size` is `[width, height]` or `[width, height, depth]`.
|
|
51
50
|
*/
|
|
52
51
|
| {
|
|
53
52
|
readonly kind: 'continuous';
|
|
@@ -56,43 +55,41 @@ export type Topology =
|
|
|
56
55
|
readonly move: MoveRule;
|
|
57
56
|
readonly frame: Frame;
|
|
58
57
|
}
|
|
59
|
-
/**
|
|
58
|
+
/** No space: an ORDERED list of targets. Distance is the difference of index, and there is no direction. */
|
|
60
59
|
| {
|
|
61
60
|
readonly kind: 'hotspots';
|
|
62
61
|
readonly order: readonly string[];
|
|
63
62
|
};
|
|
64
63
|
/**
|
|
65
|
-
*
|
|
64
|
+
* A position, in the declared topology's metric. In `hotspots`, `x` is the index and `y` is ignored.
|
|
66
65
|
*
|
|
67
|
-
* ⚠️
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
66
|
+
* ⚠️ A DELIBERATE ASYMMETRY WITH `size`. The EXTENT is a vector because the dimension varies and `size.length` is the
|
|
67
|
+
* one place it lives — otherwise "does it have depth?" would become `depth !== undefined` in every consumer. The POINT
|
|
68
|
+
* has named axes because code reads it all the time: `target.at.x` says what it is, `target.at[0]` makes you remember.
|
|
69
|
+
* The dimension is 2 or 3 and conformance refuses the rest, which closes the asymmetry: there is no `size` `Spot`
|
|
70
|
+
* cannot represent.
|
|
72
71
|
*/
|
|
73
72
|
export interface Spot {
|
|
74
73
|
readonly x: number;
|
|
75
74
|
readonly y: number;
|
|
76
75
|
readonly z?: number;
|
|
77
76
|
}
|
|
78
|
-
/** A dimensão que a topologia declara. `hotspots` não tem espaço, logo não tem dimensão. */
|
|
79
|
-
export declare function dimension(t: Topology): number;
|
|
80
77
|
export type Role = 'hazard' | 'climb' | 'water' | 'goal' | 'gate' | 'key' | 'structure' | 'free';
|
|
81
78
|
/**
|
|
82
|
-
* ⚠️ `zenith`
|
|
83
|
-
* `
|
|
84
|
-
*
|
|
85
|
-
*
|
|
79
|
+
* ⚠️ `zenith` AND `nadir` EXIST BECAUSE `up`/`down` ALREADY MEAN TWO THINGS. `ACTIONS` (core/actions) has `up` and
|
|
80
|
+
* `down` as CONTROL ACTIONS — what the child presses — and the vertical axis of SPACE is something else entirely. On a
|
|
81
|
+
* flat world the ambiguity cost nothing; in three dimensions it would cost the worst kind of defect, one that reads right
|
|
82
|
+
* and does something else. Words of their own, before 3D arrives.
|
|
86
83
|
*/
|
|
87
84
|
export type Heading = 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw' | 'zenith' | 'nadir' | 'none';
|
|
88
85
|
/**
|
|
89
|
-
*
|
|
86
|
+
* WHERE A POINT LIES AS SEEN FROM ANOTHER, already in the frame the topology declares.
|
|
90
87
|
*
|
|
91
|
-
* ⚠️
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
88
|
+
* ⚠️ NOT THE FOCUS'S `heading`, and the difference is the defect this fixes. `Focus.heading` is where the child is
|
|
89
|
+
* FACING; this is where the TARGET is. The sonar needs the second and used to compute it by hand from a raw `x`, saying
|
|
90
|
+
* `left`/`right`/`ahead` — three words where the contract has eight, and MIXING FRAMES: left/right is relative to the
|
|
91
|
+
* screen, ahead is relative to the body. A blind child hearing both in one sentence cannot know which origin each one
|
|
92
|
+
* speaks from.
|
|
96
93
|
*/
|
|
97
94
|
export type Bearing = {
|
|
98
95
|
readonly kind: 'compass';
|
|
@@ -104,13 +101,13 @@ export type Bearing = {
|
|
|
104
101
|
readonly kind: 'none';
|
|
105
102
|
};
|
|
106
103
|
export interface Focus {
|
|
107
|
-
/**
|
|
104
|
+
/** Who has the focus. A game id — the engine does not interpret it, only carries it. */
|
|
108
105
|
readonly id: string;
|
|
109
106
|
readonly at: Spot;
|
|
110
107
|
readonly heading: Heading;
|
|
111
108
|
}
|
|
112
109
|
export interface Objective {
|
|
113
|
-
/**
|
|
110
|
+
/** What is being gathered/solved: "coins", "words", "sums". */
|
|
114
111
|
readonly name: Speakable;
|
|
115
112
|
readonly have: number;
|
|
116
113
|
readonly need: number;
|
|
@@ -125,202 +122,183 @@ export type Announcement = {
|
|
|
125
122
|
readonly urgent: boolean;
|
|
126
123
|
};
|
|
127
124
|
/**
|
|
128
|
-
*
|
|
125
|
+
* What the child sees as being the game.
|
|
129
126
|
*
|
|
130
|
-
* ⚠️ `none`
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
127
|
+
* ⚠️ `none` IS NOT A DEFAULT, IT IS A WRITTEN CHOICE. It exists for an activity without space — free painting,
|
|
128
|
+
* authoring, a form — where there is no world to simulate over and no target for a sonar. The Dev named the case:
|
|
129
|
+
* «atividades como paint não são exatamente jogos, mas podem ser feitas com a engine e sonar não vai funcionar muito
|
|
130
|
+
* bem».
|
|
134
131
|
*
|
|
135
|
-
* ⚠️
|
|
136
|
-
*
|
|
137
|
-
*
|
|
132
|
+
* ⚠️ AND WHAT IT CANNOT BE IS WHAT HAPPENS WHEN SOMEONE FORGETS. A pure-DOM game is not a game where empathy makes no
|
|
133
|
+
* sense: blindfold chess is the empirical proof that it does. `none` is for whoever DECLARES they have no space, and the
|
|
134
|
+
* field's absence is refused — otherwise both would produce the same silence.
|
|
138
135
|
*/
|
|
139
136
|
export type WorldScope =
|
|
140
|
-
/**
|
|
137
|
+
/** The selector of the element that is the world. The engine applies what belongs to the world there, and only there. */
|
|
141
138
|
{
|
|
142
139
|
readonly kind: 'element';
|
|
143
140
|
readonly selector: string;
|
|
144
141
|
}
|
|
145
|
-
/**
|
|
142
|
+
/** No space. Empathy and sonar are NOT offered — and the selection screen says so before the child starts. */
|
|
146
143
|
| {
|
|
147
144
|
readonly kind: 'none';
|
|
148
145
|
};
|
|
149
146
|
/**
|
|
150
|
-
*
|
|
151
|
-
*
|
|
147
|
+
* What a game hands the engine. `tick` is data; EVERYTHING ELSE is a function, because the answer changes with the
|
|
148
|
+
* position, the player and the instant.
|
|
152
149
|
*
|
|
153
|
-
* ⚠️
|
|
154
|
-
*
|
|
150
|
+
* ⚠️ DO NOT IMPORT THIS WHOLE into a consuming module. Use `Pick<GameDeclaration, 'roleAt'>` and the like — the rule of
|
|
151
|
+
* `core/entity`, which keeps test fixtures small.
|
|
155
152
|
*/
|
|
156
153
|
export interface GameDeclaration {
|
|
157
154
|
/**
|
|
158
|
-
*
|
|
155
|
+
* The shape of the space NOW.
|
|
159
156
|
*
|
|
160
|
-
* ⚠️
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
* em silêncio. Remendo que aparece duas vezes é o contrato a pedir para mudar. ADR-0084.
|
|
157
|
+
* ⚠️ It was a value, and the asymmetry had been patched in two places before anyone named it: the sonar's port always
|
|
158
|
+
* asked for a function, and the root bridged it with a function returning a constant. A sliding puzzle whose board
|
|
159
|
+
* size changes needed a getter to fit the type — and a getter that satisfies an interface is a TypeScript
|
|
160
|
+
* COINCIDENCE, not a contract: nothing told the next author it was expected, and conformance read it once, so whoever
|
|
161
|
+
* memorised the topology went stale in silence. A patch that shows up twice is the contract asking to change.
|
|
162
|
+
* ADR-0084.
|
|
167
163
|
*/
|
|
168
164
|
topology(): Topology;
|
|
169
165
|
/**
|
|
170
|
-
*
|
|
166
|
+
* WHICH ELEMENT IS THE WORLD. See block 8 above for the defect this field fixes.
|
|
171
167
|
*
|
|
172
|
-
* ⚠️
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
* o esquecimento passar como se fosse escolha.
|
|
168
|
+
* ⚠️ REQUIRED, and requiring it is the decision. The original proposal was an optional field with a default; the Dev
|
|
169
|
+
* refused, and the reason is BLINDFOLD CHESS: it exists, so a pure-DOM game is not one where empathy makes no sense —
|
|
170
|
+
* it is one where it asks more of whoever programs it. A default would let forgetting pass as a choice.
|
|
176
171
|
*/
|
|
177
172
|
world(): WorldScope;
|
|
178
173
|
/**
|
|
179
|
-
*
|
|
180
|
-
* UM. (ADR-0104 §A.)
|
|
174
|
+
* HOW MANY POSITIONS THIS GAME NEEDS HELD AT THE SAME TIME. Run + walk + jump is THREE; a quiz is ONE. (ADR-0104 §A.)
|
|
181
175
|
*
|
|
182
|
-
* ⚠️
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* lado nenhum a dizer porquê. Alcançar uma ação e segurá-la junto com outra são perguntas distintas.
|
|
176
|
+
* ⚠️ A DIFFERENT AXIS FROM "HOW MANY ACTIONS", and because they are not the same there was a blind spot where the
|
|
177
|
+
* warning never fired: a game declaring nine actions on a pad with nine places reached them all, so the reach notice
|
|
178
|
+
* never appeared — but running, walking and jumping at once is three fingers, and on a two-finger phone the child
|
|
179
|
+
* simply cannot, with nothing anywhere saying why. Reaching an action and holding it with another are two questions.
|
|
187
180
|
*
|
|
188
|
-
* ⚠️
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
* jogos a responder deliberadamente é o custo; acessibilidade por sorte é a alternativa.
|
|
181
|
+
* ⚠️ REQUIRED, and requiring it IS the decision, in the Dev's words: «os 300 jogos precisam declarar sim! Não declarar
|
|
182
|
+
* é ter a acessibilidade programada no controle pro sorte». An optional field is answered by SILENCE, and here the
|
|
183
|
+
* silence decides for the child — decided by whoever did not think about it.
|
|
192
184
|
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
* em silêncio, que é o defeito que o ADR-0084 nomeou.
|
|
185
|
+
* A FUNCTION and not a value, like `topology`: a game with stages changes its demand between them — on foot it asks
|
|
186
|
+
* for three, in a vehicle perhaps one. A memorised value would go stale in silence, the defect ADR-0084 named.
|
|
196
187
|
*/
|
|
197
188
|
holdsAtOnce(): number;
|
|
198
189
|
/**
|
|
199
|
-
*
|
|
190
|
+
* DOES THIS GAME HOLD ANY KEY? — and the answer cannot be derived from anything else. (ADR-0115.)
|
|
200
191
|
*
|
|
201
|
-
* 🔴
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
* partido. É o botão morto que o ADR-0106 §5 proíbe.
|
|
192
|
+
* 🔴 THE TOGGLE EXISTS FOR A CONCRETE CHILD: whoever cannot KEEP a key pressed taps once to walk and again to stop. In
|
|
193
|
+
* a game where nothing is held — a quiz, a board, a tile puzzle — there is nothing to latch, and the setting becomes
|
|
194
|
+
* an option that **does nothing**. The child opens the accessibility menu, turns on the setting they depend on, and
|
|
195
|
+
* nothing happens: they learn the setting is broken. It is the dead button ADR-0106 §5 forbids.
|
|
206
196
|
*
|
|
207
|
-
* ⚠️
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
197
|
+
* ⚠️ AND `holdsAtOnce` ABOVE DOES NOT ANSWER THIS, which is the finding that forced this field: it counts SIMULTANEOUS
|
|
198
|
+
* positions and refuses zero, because zero would pass the reach arithmetic vacuously. The demo quiz declares **1
|
|
199
|
+
* while holding nothing at all**. "One at a time" and "one HELD" are the same number, and every decision downstream
|
|
200
|
+
* was reading a number that answers another question.
|
|
211
201
|
*
|
|
212
|
-
* ⚠️
|
|
213
|
-
*
|
|
214
|
-
* que ESQUECE a linha perder a alternância em silêncio, e quem paga é a criança com dificuldade motora.
|
|
202
|
+
* ⚠️ REQUIRED, and requiring it IS the decision — the same as `holdsAtOnce`, by the same words of the Dev. An optional
|
|
203
|
+
* field would let a game that FORGETS the line lose the toggle in silence, and the child with a motor difficulty pays.
|
|
215
204
|
*
|
|
216
|
-
* 📌
|
|
217
|
-
*
|
|
205
|
+
* 📌 A FUNCTION and not a value, by ADR-0084: a game changes its demand between stages. On foot one holds a direction;
|
|
206
|
+
* the same game in a vehicle may hold nothing.
|
|
218
207
|
*/
|
|
219
|
-
|
|
208
|
+
holdsKeys(): boolean;
|
|
220
209
|
/**
|
|
221
|
-
*
|
|
210
|
+
* DOES THIS GAME NEED A POINTER — a continuous position? (ADR-0112.)
|
|
222
211
|
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
212
|
+
* A drawing game does; a quiz does not. Declaring it makes a device without a pointer REFUSE before the child starts,
|
|
213
|
+
* instead of them finding out halfway through the first stroke.
|
|
225
214
|
*
|
|
226
|
-
* ⚠️
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
* escreve, porque ele também precisaria do ponteiro para o experimentar.
|
|
215
|
+
* ⚠️ OPTIONAL, AND THE DIFFERENCE FROM `holdsAtOnce` JUST ABOVE IS DELIBERATE — copying its requirement would apply a
|
|
216
|
+
* rule whose premise does not hold here. `holdsAtOnce` is required because it has no safe default AND fails INVISIBLY to
|
|
217
|
+
* whoever writes the game: they have a full keyboard, the game runs, and the child on a two-finger phone is who finds
|
|
218
|
+
* the defect. This one has a safe default (`false`) and fails VISIBLY — a drawing game that forgets to declare it is
|
|
219
|
+
* unusable on its own author's device, because they would need the pointer to try it.
|
|
232
220
|
*
|
|
233
|
-
*
|
|
234
|
-
* motivo dele.
|
|
235
|
-
*
|
|
236
|
-
* FUNÇÃO e não valor, pela mesma razão das outras: uma actividade pode desenhar numa fase e não noutra.
|
|
221
|
+
* A FUNCTION and not a value, like the others: an activity may draw in one stage and not in another.
|
|
237
222
|
*/
|
|
238
223
|
needsPointer?(): boolean;
|
|
239
224
|
/**
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
* A precedência é a que o registo pede, e ela cabe entre duas linhas que já existiam no `input/keyboard`:
|
|
243
|
-
* **fábrica da engine → padrão do JOGO → remapeamento da CRIANÇA.** Devolver `null` (ou não declarar) deixa
|
|
244
|
-
* a fábrica da engine intacta, que é o comportamento de sempre.
|
|
225
|
+
* THE KEYBOARD MAPPING THIS GAME WANTS — by number of players and by seat (ADR-0115).
|
|
245
226
|
*
|
|
246
|
-
*
|
|
247
|
-
* `
|
|
248
|
-
* segunda forma de fundir.
|
|
227
|
+
* The precedence is the one the record asks for: **the engine's factory → the GAME's default → the CHILD's remap.**
|
|
228
|
+
* Returning `null` (or not declaring it) leaves the engine's factory untouched, which is the behaviour it always had.
|
|
249
229
|
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
230
|
+
* PARTIAL on purpose: a game that only wants to change `action1` changes `action1`. The merge already exists — the
|
|
231
|
+
* `Object.assign` that lays the stored data on top — so this is one more layer in the same place, not a second way to
|
|
232
|
+
* merge.
|
|
252
233
|
*
|
|
253
|
-
* ⚠️
|
|
254
|
-
*
|
|
255
|
-
* o índice dentro desse arranjo.
|
|
234
|
+
* ⚠️ OPTIONAL, and here, unlike `holdsKeys`, silence has a safe side: with no declaration the game keeps the engine's
|
|
235
|
+
* factory, which is playable and is what it has today.
|
|
256
236
|
*
|
|
257
|
-
*
|
|
258
|
-
*
|
|
237
|
+
* ⚠️ AND IT TAKES THE SEAT because a two-player keyboard is not a one-player one: the arrows change owner, and a
|
|
238
|
+
* default that did not know the seat would give two children the same keys. `players` is 1, 2, 3 or 4; `seat` is the
|
|
239
|
+
* index within that arrangement.
|
|
259
240
|
*/
|
|
260
|
-
|
|
241
|
+
keyboardMapping?(players: number, seat: number): Partial<Record<Action, readonly string[] | null>> | null;
|
|
261
242
|
/**
|
|
262
|
-
*
|
|
243
|
+
* THE BUTTON MAPPING THIS GAME WANTS ON A PAD — the same question, another device (ADR-0115).
|
|
263
244
|
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
245
|
+
* Button indices of the "standard" Gamepad API, partial: `{ action1: 3 }` changes just that one. `null` on a button
|
|
246
|
+
* says "this position does not exist in this game", which differs from leaving it at the factory.
|
|
266
247
|
*
|
|
267
|
-
* ⚠️
|
|
268
|
-
*
|
|
269
|
-
*
|
|
248
|
+
* ⚠️ THE PRECEDENCE SITS IN A DIFFERENT PLACE, worth knowing: on the keyboard, the child's remap is a layer ON TOP of
|
|
249
|
+
* this; on a pad, the map they recorded in the wizard is a whole BRANCH — if it exists, this default is not consulted.
|
|
250
|
+
* Either way the child wins, which is what matters.
|
|
270
251
|
*
|
|
271
|
-
* 📌
|
|
272
|
-
*
|
|
273
|
-
* fazem o mesmo).
|
|
252
|
+
* 📌 It takes the seat for the keyboard's reason, by another path: two pads are two devices, but the GAME may want
|
|
253
|
+
* different arrangements per seat (a goalkeeper and a striker do not do the same thing).
|
|
274
254
|
*/
|
|
275
|
-
|
|
255
|
+
padMapping?(players: number, seat: number): Partial<Record<Action, number | null>> | null;
|
|
276
256
|
readonly tick: TickOwner;
|
|
277
|
-
/**
|
|
257
|
+
/** The role of what is at `at`. Field 2, and what replaces a table of tile numbers. */
|
|
278
258
|
roleAt(at: Spot): Role;
|
|
279
|
-
/**
|
|
259
|
+
/** What the thing at `at` is called. Without it there is no screen reader and no Libras. */
|
|
280
260
|
nameAt(at: Spot): Speakable | null;
|
|
281
|
-
/**
|
|
261
|
+
/** Who has the focus now, and where it points. `null` = nobody (menu closed, round not started). */
|
|
282
262
|
focusOf(playerIndex: number): Focus | null;
|
|
283
|
-
/**
|
|
263
|
+
/** What the round asks of this player. */
|
|
284
264
|
objectiveOf(playerIndex: number): Objective;
|
|
285
265
|
/**
|
|
286
|
-
*
|
|
266
|
+
* WHERE this player's still-valid targets are — the second half of field 5.
|
|
287
267
|
*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
* lugar. A engine só compara distâncias, e é por isso que o sonar passa a servir a qualquer gênero.
|
|
268
|
+
* Instead of the engine sweeping an array of coins and filtering by owner and taken, the game returns the spots that
|
|
269
|
+
* still count for THIS player. A quiz returns the open question's index; a platformer, the coins not taken; a
|
|
270
|
+
* Sokoban, the boxes out of place. The engine only compares distances, which is why the sonar serves any genre.
|
|
292
271
|
*
|
|
293
|
-
*
|
|
272
|
+
* Empty is a legitimate answer and means "there is nowhere to point" — not an error.
|
|
294
273
|
*/
|
|
295
274
|
targetsOf(playerIndex: number): readonly Spot[];
|
|
296
275
|
}
|
|
297
276
|
/**
|
|
298
|
-
*
|
|
277
|
+
* Is a declaration well formed? Returns the list of problems — EMPTY means conformant.
|
|
299
278
|
*
|
|
300
|
-
*
|
|
301
|
-
*
|
|
279
|
+
* It exists because a preset is a promise, and a promise without a check is a comment. ADR-0030 says a genre package
|
|
280
|
+
* "either satisfies the seven fields or does not"; this is the "does not".
|
|
302
281
|
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
* preset, não deste módulo.
|
|
282
|
+
* It checks SHAPE, not truth: that the topology has a positive measure, that the functions exist. It cannot check
|
|
283
|
+
* whether `roleAt` returns the RIGHT role — that is the preset's own test, not this module's.
|
|
306
284
|
*/
|
|
307
285
|
export declare function conformanceProblems(d: Partial<GameDeclaration> | null | undefined): string[];
|
|
308
|
-
/**
|
|
286
|
+
/** Is a speakable name well formed? Empty text is the silent defect: the screen reader simply goes quiet. */
|
|
309
287
|
export declare function speakableProblems(s: Speakable | null | undefined): string[];
|
|
310
288
|
/**
|
|
311
|
-
*
|
|
312
|
-
*
|
|
289
|
+
* The distance between two spots IN THE DECLARED METRIC — the one the game declared in `move`, over as many dimensions
|
|
290
|
+
* as it declared in `size`. It is what the sonar needs and used to compute in pixels.
|
|
313
291
|
*
|
|
314
|
-
* ⚠️
|
|
315
|
-
*
|
|
292
|
+
* ⚠️ THE GRID WAS ALWAYS CHEBYSHEV, which cost up to 2× error in a sliding puzzle. The three rules are not taste: they
|
|
293
|
+
* are what "one step" means in each game, and the sonar speaks in steps.
|
|
316
294
|
*/
|
|
317
295
|
export declare function distance(t: Topology, a: Spot, b: Spot): number;
|
|
318
296
|
/**
|
|
319
|
-
*
|
|
297
|
+
* WHERE `to` LIES AS SEEN FROM `from`, already in the words the topology declared.
|
|
320
298
|
*
|
|
321
|
-
* ⚠️
|
|
322
|
-
*
|
|
323
|
-
*
|
|
324
|
-
*
|
|
299
|
+
* ⚠️ TWO AXES WITH DIFFERENT CONVENTIONS, and silence about it would be the defect. `y` GROWS DOWNWARD — the screen's
|
|
300
|
+
* coordinate, inherited from the canvas and all existing code, not a choice of this function. `z` GROWS UPWARD, and
|
|
301
|
+
* that is a choice: nothing forces it, and in three dimensions "zenith" can only mean the side the child would look at
|
|
302
|
+
* by raising their head. A 3D game has to know both.
|
|
325
303
|
*/
|
|
326
304
|
export declare function bearing(t: Topology, from: Spot, to: Spot): Bearing;
|