@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,127 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
/** Grama e flores de um tema `v3` (render/scene-sky.drawV3Grass). Cores em '#rrggbb'. */
|
|
3
|
-
export interface Flora {
|
|
4
|
-
base: string;
|
|
5
|
-
top: string;
|
|
6
|
-
bLt: string;
|
|
7
|
-
bDk: string;
|
|
8
|
-
center: string;
|
|
9
|
-
petals: string[];
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Um cenário.
|
|
13
|
-
*
|
|
14
|
-
* O CAMPO `v3` FOI SEPARADO EM DOIS (2026-08-25), e o motivo é um pedido que ele não conseguia atender.
|
|
15
|
-
* Ele significava três coisas ao mesmo tempo — "meu fundo é gerado das cores", "tenho céu vivo compartilhado"
|
|
16
|
-
* e "tenho flora" — e isso funcionava enquanto só existiam dois tipos de tema: a Cidade (PNG, cena própria,
|
|
17
|
-
* sem flora) e os quatro gerados (cores, céu vivo, flora).
|
|
18
|
-
*
|
|
19
|
-
* O Dev pediu FUNDO RASTER PARA A FLORESTA, mantendo a floresta como floresta. Isso é uma combinação nova —
|
|
20
|
-
* PNG **com** flora e céu vivo — e ela não cabia num booleano só: virar `v3` para false teria tirado a grama,
|
|
21
|
-
* as flores e as borboletas dela junto com o fundo gerado.
|
|
22
|
-
*
|
|
23
|
-
* Agora são duas perguntas independentes, e cada leitor faz a sua:
|
|
24
|
-
* · `fundo` — de onde vêm as três camadas de parallax. Lido por render/parallax.
|
|
25
|
-
* · `decor` — que decoração viva o céu recebe. Lido por render/scene-sky, pela PRESENÇA, não por rótulo.
|
|
26
|
-
* A flora segue a mesma regra: quem tem entrada em THEME_FLORA tem flora, e ponto.
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* UMA FAIXA DE PRÉDIOS de uma camada de parallax — o skyline da Cidade, como DADO (ADR-0042).
|
|
30
|
-
*
|
|
31
|
-
* TODO NÚMERO AQUI FOI MEDIDO nos três PNG que esta faixa substitui, não escolhido. O ADR-0042 registra por
|
|
32
|
-
* que eles não podiam ser reproduzidos: os fundos precisam de 11.382 retângulos de cor uniforme (2.065 +
|
|
33
|
-
* 2.899 + 6.418, cobertura gulosa 2D), duas a três ordens de grandeza acima do que a pipeline estimava,
|
|
34
|
-
* porque 400×180 com 171 cores é arte desenhada à mão e não geometria.
|
|
35
|
-
*
|
|
36
|
-
* O que se salva medindo, então, não é o pixel — é a REGRA: onde a faixa fica sólida, quanto os topos
|
|
37
|
-
* variam, quais são os dois tons do corpo e os dois da janela. Isso a torna RECOLORÍVEL, que é o que o
|
|
38
|
-
* pilar 1 existe para comprar: o alto contraste repinta um dado e não repinta um PNG. E a Cidade é a maior
|
|
39
|
-
* superfície da tela — sob PNG, era a única coisa que o modo de alto contraste jamais alcançava.
|
|
40
|
-
*/
|
|
41
|
-
export interface FaixaDePredios {
|
|
42
|
-
/** y a partir do qual a faixa é SÓLIDA: abaixo desta linha é tudo prédio, sem buraco. */
|
|
43
|
-
base: number;
|
|
44
|
-
/**
|
|
45
|
-
* Os DOIS TONS DE PROFUNDIDADE, `[fundo, frente]`, desenhados nessa ordem.
|
|
46
|
-
*
|
|
47
|
-
* Cada camada de parallax tem duas fileiras no original, não uma — é o que dá o ar de cidade. A primeira
|
|
48
|
-
* versão deste gerador tinha só uma, e por isso a Cidade saiu chapada.
|
|
49
|
-
*/
|
|
50
|
-
corpo: readonly [string, string];
|
|
51
|
-
/** Topos possíveis da fileira da FRENTE, `[mais alto, mais baixo]` — em y, o primeiro é o MENOR. */
|
|
52
|
-
topo: readonly [number, number];
|
|
53
|
-
/** Idem para a fileira do FUNDO, que é mais alta e mais simples. */
|
|
54
|
-
topoFundo: readonly [number, number];
|
|
55
|
-
/** As larguras possíveis de um prédio, em px. */
|
|
56
|
-
largura: readonly [number, number];
|
|
57
|
-
/**
|
|
58
|
-
* As cores da LUZ — janela ACESA, e só ela.
|
|
59
|
-
*
|
|
60
|
-
* ⚠️ NÃO EXISTE COR DE JANELA APAGADA, e essa foi a lição mais cara desta arte: a apagada é a parede. A
|
|
61
|
-
* primeira versão declarava um par "acesa/apagada" com dois tons quase idênticos, pintava TODA célula, e
|
|
62
|
-
* o resultado foi um quadriculado cinza. Pior: os dois tons que ela chamava de janela eram, na verdade, o
|
|
63
|
-
* segundo tom de MASSA — os prédios de trás.
|
|
64
|
-
*
|
|
65
|
-
* As luzes são QUENTES (R > B). Ausente = distante demais para acender.
|
|
66
|
-
*/
|
|
67
|
-
luz?: readonly string[];
|
|
68
|
-
/** Fração média de janelas acesas. Varia por prédio em torno dela — uns quase escuros, outros cheios. */
|
|
69
|
-
aceso?: number;
|
|
70
|
-
}
|
|
71
|
-
/** O que todo tema tem, independentemente de como o fundo dele nasce. */
|
|
72
|
-
interface TemaBase {
|
|
73
|
-
/** CHAVE i18n do nome exibido. Chave e não texto: tabela de módulo resolvida no import congelaria o idioma
|
|
74
|
-
* no boot (ver a nota em input/devices). Quem exibe resolve com `t()`. */
|
|
75
|
-
nome: string;
|
|
76
|
-
/** Paradas do gradiente vertical do céu, do TOPO ao rodapé, distribuídas por igual. DUAS ou MAIS: com N
|
|
77
|
-
* paradas, a de índice i cai em y = 180·i/(N-1) — é assim que se escolhe a ALTURA de uma cor. */
|
|
78
|
-
sky: readonly string[];
|
|
79
|
-
cloud?: [string, string];
|
|
80
|
-
/** Sol baixo com leque de raios, assado na textura do céu. Ausente = céu de puro gradiente. */
|
|
81
|
-
sol?: {
|
|
82
|
-
cor: string;
|
|
83
|
-
x: number;
|
|
84
|
-
y: number;
|
|
85
|
-
};
|
|
86
|
-
/** Este tema tem CHUVA (ciclo do clima em render/weather). Ausente = sempre seco. */
|
|
87
|
-
chuva?: true;
|
|
88
|
-
/** Quantos cúmulos na MANTA de tela, que fecha e abre com a chuva. Múltiplo de 3 (são 3 fileiras), e só a
|
|
89
|
-
* de cima aparece no tempo bom. Ausente = as 3 lajes fixas da v3. */
|
|
90
|
-
nuvens?: number;
|
|
91
|
-
decor?: string[];
|
|
92
|
-
}
|
|
93
|
-
/** Fundo de MORROS: céu em gradiente + duas bandas de morro. Os quatro temas da v3. */
|
|
94
|
-
export interface TemaMorros extends TemaBase {
|
|
95
|
-
fundo: 'morros';
|
|
96
|
-
/** As duas bandas de morro: `[fundo, frente]`. */
|
|
97
|
-
hills: readonly [string, string];
|
|
98
|
-
}
|
|
99
|
-
/** Fundo de PRÉDIOS: céu em gradiente + três faixas de skyline. A Cidade, e só ela por enquanto. */
|
|
100
|
-
export interface TemaPredios extends TemaBase {
|
|
101
|
-
fundo: 'predios';
|
|
102
|
-
/** Uma faixa por camada de parallax, do mais distante ao mais próximo. */
|
|
103
|
-
predios: readonly [FaixaDePredios, FaixaDePredios, FaixaDePredios];
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* O tema, e ele é uma UNIÃO DISCRIMINADA de propósito.
|
|
107
|
-
*
|
|
108
|
-
* Antes eram `fundo: 'gerado' | 'png'` com `sky?` e `hills?` opcionais, e o invariante de verdade — *quem é
|
|
109
|
-
* gerado TEM céu e morros* — não morava em lugar nenhum: era uma frase num comentário e um `if` em
|
|
110
|
-
* `render/parallax`. Quem lesse o tipo via quatro campos que podiam faltar; quem lesse o código via que
|
|
111
|
-
* nunca faltavam. Agora o compilador cobra, e `render/scene-parallax` deixou de precisar redescrever isto
|
|
112
|
-
* como `ParallaxTheme` — o que era o defeito do ADR-0039 outra vez, numa terceira vítima.
|
|
113
|
-
*/
|
|
114
|
-
export type CenarioTema = TemaMorros | TemaPredios;
|
|
115
|
-
/** O tema para o qual todo valor desconhecido cai. */
|
|
116
|
-
export declare const CENARIO_PADRAO = "cidade";
|
|
117
|
-
export declare const CENARIOS: Record<string, CenarioTema>;
|
|
118
|
-
/** v3 exato — grama/flores por tema. SÓ dos temas `v3`: a Cidade não tem flora (por isso o `| undefined`). */
|
|
119
|
-
export declare const THEME_FLORA: Record<string, Flora | undefined>;
|
|
120
|
-
/** '#rrggbb' → 0xrrggbb, para o `beginFill` do PIXI. Verbatim do `hexN` do game.js. */
|
|
121
|
-
export declare const hexN: (s: string) => number;
|
|
122
|
-
/**
|
|
123
|
-
* A validação de `setCenario`, sem o efeito: tema conhecido passa, o resto vira 'cidade'.
|
|
124
|
-
* ⚠️ Cópia FIEL do monólito, herança do `Object.prototype` inclusive — ver o cabeçalho.
|
|
125
|
-
*/
|
|
126
|
-
export declare function normalizarCenario(theme: string): string;
|
|
127
|
-
export {};
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/cenario-data — O CATÁLOGO DE CENÁRIOS: os quatro temas do jogo como DADO, e nada além disso.
|
|
3
|
-
//
|
|
4
|
-
// Este é o módulo-FOLHA da etapa D2-b: zero imports, zero PIXI, zero DOM, zero I/O. Ele responde a uma única
|
|
5
|
-
// pergunta — "quais são os cenários, e de que cor é cada um?" — e é justamente por não responder a mais
|
|
6
|
-
// nenhuma que ele pode ser lido, importado e testado por qualquer um dos seus consumidores sem arrastar meio
|
|
7
|
-
// motor junto.
|
|
8
|
-
//
|
|
9
|
-
// ======================= POR QUE A FRONTEIRA CAIU AQUI =======================
|
|
10
|
-
// `CENARIOS` e `THEME_FLORA` são as duas tabelas mais LIDAS e menos PROTEGIDAS do monólito. Antes desta
|
|
11
|
-
// extração elas eram `const` no meio do `game.js` e chegavam aos módulos por INJEÇÃO — `render/scene-sky.ts`
|
|
12
|
-
// as recebe inteiras no `SceneSkyCtx` (`CENARIOS`, `THEME_FLORA`), `game/attract.ts` recebe `CENARIOS` para
|
|
13
|
-
// sortear o tema da demo, o splash recebe a lista reduzida a `{id,nome}`, e `setCenario` as consulta para
|
|
14
|
-
// validar e para pintar. Cinco leitores, nenhum teste, e nenhum lugar onde a FORMA de um tema estivesse
|
|
15
|
-
// escrita: cada leitor descobria por acidente que `T.cloud` só existe quando `T.v3` é verdadeiro, e que
|
|
16
|
-
// `THEME_FLORA` não tem entrada para 'cidade'.
|
|
17
|
-
//
|
|
18
|
-
// Separar o dado da máquina que o consome é o corte mais barato e mais duradouro desta região: um tema novo
|
|
19
|
-
// (uma estação, um bioma) passa a ser uma linha AQUI, e as invariantes que os leitores presumem viram
|
|
20
|
-
// asserção em `tests/cenario-data.node.test.js` — em particular a mais silenciosa de todas, "todo tema `v3`
|
|
21
|
-
// tem `sky`, `cloud`, `hills`, `decor` E uma entrada em `THEME_FLORA`". Quebrar essa correspondência não
|
|
22
|
-
// derruba nada: `scene-sky` faz `const fl = THEME_FLORA[cenario]` e simplesmente não desenha grama. O tema
|
|
23
|
-
// novo nasceria careca, e ninguém saberia dizer por quê.
|
|
24
|
-
//
|
|
25
|
-
// ======================= O QUE ESTÁ AQUI, E POR QUÊ ESTÁ JUNTO =======================
|
|
26
|
-
// · `CENARIOS` — os quatro temas + a Cidade. `v3:false` (Cidade) significa "meu fundo vem de PNG e eu
|
|
27
|
-
// tenho o céu/tráfego próprios de render/scene-city"; `v3:true` significa "meu fundo é
|
|
28
|
-
// GERADO pelas fórmulas da v3.1.100 (render/scene-parallax) a partir destas cores".
|
|
29
|
-
// Nenhum tema tem chuva — chuva é da Cidade, e é decisão de render/weather.
|
|
30
|
-
// · `THEME_FLORA` — grama e flores por tema. Tabela IRMÃ da de cima e SÓ dos temas `v3`: a Cidade não tem
|
|
31
|
-
// flora. Fica no mesmo arquivo porque as duas descrevem O MESMO tema por chaves iguais e
|
|
32
|
-
// precisam ser editadas no mesmo gesto; separá-las convidaria exatamente a divergência
|
|
33
|
-
// que o teste de correspondência existe para pegar.
|
|
34
|
-
// · `hexN` — '#rrggbb' → número, o tradutor entre o dado (string, legível na tabela acima) e o PIXI
|
|
35
|
-
// (`beginFill` quer inteiro). Ele vivia solto no meio do bloco de parallax do game.js e
|
|
36
|
-
// tinha UM chamador: o `SceneSkyCtx`. É função da TABELA, não do parallax — todas as
|
|
37
|
-
// cores que ele converte estão neste arquivo — e por isso veio para cá, e não para
|
|
38
|
-
// render/parallax.
|
|
39
|
-
// · `normalizarCenario` — a validação de `setCenario` ("tema desconhecido → 'cidade'"), isolada do efeito.
|
|
40
|
-
//
|
|
41
|
-
// ======================= O QUE NÃO VEIO =======================
|
|
42
|
-
// · As FÓRMULAS que transformam estas cores em pixel (`themeSkyTexture`, `themeHillsTexture`,
|
|
43
|
-
// `parallaxPlaceholder`, `hillHeight`) já moram em render/scene-parallax.ts desde o Estágio 4. Este
|
|
44
|
-
// arquivo é a entrada delas, não a implementação.
|
|
45
|
-
// · O desenho da flora (`drawV3Grass`) e da decoração viva é de render/scene-sky.ts. Aqui só a paleta.
|
|
46
|
-
// · Os FATORES de profundidade das 3 camadas (`PARALLAX`) NÃO estão aqui, apesar de também serem dado: eles
|
|
47
|
-
// não variam por tema — descrevem a GEOMETRIA do fundo, e vivem ao lado da conta que os usa, em
|
|
48
|
-
// render/parallax.ts. Uma tabela de tema aqui, uma tabela de câmera lá.
|
|
49
|
-
//
|
|
50
|
-
// ======================= ⚠️ COMPORTAMENTO PRESERVADO: `normalizarCenario` ACEITA CHAVE HERDADA =======================
|
|
51
|
-
// O monólito valida com `if(!CENARIOS[theme])theme='cidade'`. `CENARIOS` é um objeto literal, logo herda de
|
|
52
|
-
// `Object.prototype`: `CENARIOS['toString']` é uma FUNÇÃO, e portanto truthy, e portanto 'toString' passa na
|
|
53
|
-
// validação como se fosse um tema. O `setCenario` então persiste 'toString' em `incl_cenario`, tenta baixar
|
|
54
|
-
// `assets/cenarios/toString/c4.png` e o jogo fica sem fundo. Só é alcançável por um valor forjado (chave de
|
|
55
|
-
// localStorage adulterada; `window.__incl.setCenario('constructor')`), nunca pela UI — que monta o seletor a
|
|
56
|
-
// partir de `Object.keys(CENARIOS)`.
|
|
57
|
-
// ISTO É O COMPORTAMENTO ATUAL E FOI COPIADO TAL E QUAL, de propósito: esta etapa é uma EXTRAÇÃO, e trocar a
|
|
58
|
-
// checagem por `hasOwnProperty` aqui seria consertar às escondidas, dentro de um movimento cuja garantia é
|
|
59
|
-
// justamente "nada mudou". O teste PREGA a falha (`normalizarCenario('toString') === 'toString'`), para que o
|
|
60
|
-
// conserto — quando vier — seja uma mudança visível de asserção e não uma surpresa.
|
|
61
|
-
//
|
|
62
|
-
// SEM I/O NO IMPORT: o corpo do módulo só declara literais. Não há `init`, não há factory, não há efeito —
|
|
63
|
-
// e por isso não há armadilha de ordem de boot: importar este arquivo é sempre seguro, em qualquer ponto.
|
|
64
|
-
// Ver docs/5-Refactoring/plano-modularizacao-mapa.md (D2-b).
|
|
65
|
-
/** O tema para o qual todo valor desconhecido cai. */
|
|
66
|
-
export const CENARIO_PADRAO = 'cidade';
|
|
67
|
-
/* L6 (REFEITO — fiel à v3.1.100): os 4 temas usam EXATAMENTE o céu, as nuvens, as montanhas, a grama
|
|
68
|
-
e a decoração viva de lá (fórmulas copiadas). BLOCOS = Clarity SEM recolor (a v3 não recoloria tiles
|
|
69
|
-
por tema). A CHUVA deixou de ser privilégio da Cidade: é o campo `chuva` abaixo que a concede, e a
|
|
70
|
-
Floresta também a tem (decisão do Dev, 2026-08-25). */
|
|
71
|
-
// ⚠️ TRÊS IDS MENTEM, e o rótulo é que está certo. `cemiterio` é "Amanhecer no Campo" e `espaco` é "Noite no
|
|
72
|
-
// Campo" (ver `cen.*` nos dicionários): os temas mudaram, os ids ficaram. Com `campo` = "Dia no Campo", os três
|
|
73
|
-
// são o MESMO lugar em três horas do dia, e é por isso que compartilham a silhueta em render/scene-parallax.
|
|
74
|
-
// Renomear os ids é migração de dado persistido (`incl_cenario` e as gravações de demonstração os guardam),
|
|
75
|
-
// então fica para uma rodada própria — e este aviso é a rede até lá. Quem ler só o id planta a arte errada;
|
|
76
|
-
// foi o que quase aconteceu.
|
|
77
|
-
//
|
|
78
|
-
// SE UM DIA HOUVER TEMA DE ESPAÇO OU DE HALLOWEEN (decisão do Dev, 2026-08-25): no de espaço, os BLOCOS do
|
|
79
|
-
// nível viram partes de estação espacial — não é só trocar o céu. E o de Halloween é uma FESTA de Halloween,
|
|
80
|
-
// não um cemitério: abóboras, fantasias e doces, não túmulos.
|
|
81
|
-
export const CENARIOS = {
|
|
82
|
-
// `chuva` estava ESCRITA NO CÓDIGO do clima, como `cenario === 'cidade'`. Era verdade e virou mentira no dia
|
|
83
|
-
// em que o Dev pediu chuva na Floresta — e o pior de uma condição dessas é que ela não avisa: quem lê
|
|
84
|
-
// `render/weather` não tem como saber que existe uma lista de temas, porque não existe lista, existe um `if`.
|
|
85
|
-
// Aqui a capacidade é DADO, e um tema novo declara a sua ao nascer.
|
|
86
|
-
// A CIDADE (ADR-0042), medida nos três PNG que ela substitui — e MEDIDA DE NOVO depois que a primeira
|
|
87
|
-
// versão saiu chapada na tela. O que a segunda medição corrigiu:
|
|
88
|
-
//
|
|
89
|
-
// · as cores que eu tinha listado como "janela acesa/apagada" eram o SEGUNDO TOM DE MASSA (os prédios
|
|
90
|
-
// de trás). Separando por temperatura, a luz é o que tem R > B — e ela é rara: 5,4% da área na
|
|
91
|
-
// camada próxima, 0,28% na média, 0,04% na distante;
|
|
92
|
-
// · cada camada tem DUAS fileiras de profundidade, não uma;
|
|
93
|
-
// · as janelas são 2 px de largura por 3 a 5 de altura (263 na camada próxima), não pontos 2x2.
|
|
94
|
-
cidade: {
|
|
95
|
-
nome: 'cen.cidade', fundo: 'predios', chuva: true,
|
|
96
|
-
sky: ['#5d6f8e', '#5d6f8e', '#5d6f8e', '#374866'],
|
|
97
|
-
predios: [
|
|
98
|
-
// Camada 0 — a bruma. Duas profundidades quase iguais ao céu, e quase nenhuma luz.
|
|
99
|
-
{ base: 144, topo: [96, 128], topoFundo: [71, 108], largura: [16, 40],
|
|
100
|
-
corpo: ['#4a5c7c', '#374866'], luz: ['#a5ac93', '#adb599'], aceso: 0.006 },
|
|
101
|
-
// Camada 1 — o meio. Os de trás são visivelmente mais claros (#6b7e98).
|
|
102
|
-
{ base: 139, topo: [64, 122], topoFundo: [44, 100], largura: [14, 38],
|
|
103
|
-
corpo: ['#6b7e98', '#465164'], luz: ['#c2c0be', '#baada6', '#bfbdb9'], aceso: 0.022 },
|
|
104
|
-
// Camada 2 — a de perto, e a que carrega a cidade acesa. `base` 158 é a linha em que o original fica
|
|
105
|
-
// 100% sólido; acima dela a fileira da frente cobre ~70% das colunas e o resto é vão e fileira de trás.
|
|
106
|
-
{ base: 158, topo: [88, 134], topoFundo: [66, 108], largura: [18, 44],
|
|
107
|
-
corpo: ['#637980', '#2b3e49'], luz: ['#c8c3b7', '#bdac8e', '#ccc4b5', '#d0ccc9'], aceso: 0.85 },
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
campo: { nome: 'cen.campo', fundo: 'morros', sky: ['#86c5e8', '#cfeecb'], cloud: ['#ffffff', '#d4e6f5'], hills: ['#9fd47e', '#6fb84e'], decor: ['nuvens', 'passaros', 'borboletas'] },
|
|
111
|
-
cemiterio: { nome: 'cen.cemiterio', fundo: 'morros', sky: ['#2b2540', '#5a4f6b'], cloud: ['#d9c4dd', '#a98fb6'], hills: ['#4a5f55', '#33473d'], decor: ['nuvens', 'passaros', 'sparkles', 'minhocas', 'nevoa'] },
|
|
112
|
-
espaco: { nome: 'cen.espaco', fundo: 'morros', sky: ['#05030f', '#161033'], cloud: ['#3a3550', '#262238'], hills: ['#1e3030', '#142024'], decor: ['nuvens', 'sparkles', 'vagalumes'] },
|
|
113
|
-
// A FLORESTA É UM PÔR DO SOL, e antes era um céu VERDE (`#3f6b50`→`#8fbf73`) com nuvens verdes por cima.
|
|
114
|
-
// Verde no céu não é só feio: com os morros em `#2f5e35`, a silhueta das coníferas ficava a um passo da cor
|
|
115
|
-
// do fundo e sumia — plantei árvores que ninguém via, e só depois de ver na tela é que a causa apareceu.
|
|
116
|
-
//
|
|
117
|
-
// As sete paradas caem de 30 em 30 px (y = 180·i/6), e é por isso que são sete: é o que põe o AMARELO em
|
|
118
|
-
// y=60 e o VERMELHO em y=90, que é a linha do horizonte. O laranja entre eles não é declarado — ele nasce da
|
|
119
|
-
// interpolação, como o violeta nasce entre o índigo do topo e o rosa. As três últimas paradas ficam ATRÁS
|
|
120
|
-
// dos morros; existem para o degradê não terminar num corte seco na beira da tela.
|
|
121
|
-
floresta: { nome: 'cen.floresta', fundo: 'morros',
|
|
122
|
-
sky: ['#231a52', '#a34a6e', '#ffd166', '#e0392c', '#8e2320', '#5a1a1c', '#3a1418'],
|
|
123
|
-
sol: { cor: '#ffe9a8', x: 0.30, y: 0.46 },
|
|
124
|
-
cloud: ['#ffffff', '#e9a06a'], // corpo branco, sombra alaranjada: é a luz baixa batendo por baixo
|
|
125
|
-
chuva: true, nuvens: 27, // 3 fileiras de 9: a de cima sempre, as outras duas ao fechar o tempo
|
|
126
|
-
hills: ['#2f5e35', '#1f4226'], decor: ['nuvens', 'passaros', 'borboletas'] },
|
|
127
|
-
};
|
|
128
|
-
/** v3 exato — grama/flores por tema. SÓ dos temas `v3`: a Cidade não tem flora (por isso o `| undefined`). */
|
|
129
|
-
export const THEME_FLORA = {
|
|
130
|
-
campo: { base: '#52933c', top: '#7cc35a', bLt: '#8fd968', bDk: '#46822f', center: '#ffe14d', petals: ['#ffe14d', '#ff7eb6', '#ffffff', '#ff6b6b'] },
|
|
131
|
-
cemiterio: { base: '#46624f', top: '#5e7d68', bLt: '#6f9079', bDk: '#3a5244', center: '#f0e6d0', petals: ['#c9b6e8', '#e7c9dd', '#b6c9e8'] },
|
|
132
|
-
espaco: { base: '#2d4650', top: '#40606a', bLt: '#557f88', bDk: '#26404a', center: '#fff6c0', petals: ['#d6ecff', '#ffffff', '#cfffe8'] },
|
|
133
|
-
floresta: { base: '#3a7a34', top: '#5fa84a', bLt: '#6fc255', bDk: '#2f6329', center: '#ffe14d', petals: ['#c98ce0', '#ffffff', '#ffd166', '#ff7eb6'] },
|
|
134
|
-
};
|
|
135
|
-
/** '#rrggbb' → 0xrrggbb, para o `beginFill` do PIXI. Verbatim do `hexN` do game.js. */
|
|
136
|
-
export const hexN = (s) => parseInt(String(s).slice(1), 16);
|
|
137
|
-
/**
|
|
138
|
-
* A validação de `setCenario`, sem o efeito: tema conhecido passa, o resto vira 'cidade'.
|
|
139
|
-
* ⚠️ Cópia FIEL do monólito, herança do `Object.prototype` inclusive — ver o cabeçalho.
|
|
140
|
-
*/
|
|
141
|
-
export function normalizarCenario(theme) {
|
|
142
|
-
if (!CENARIOS[theme])
|
|
143
|
-
return CENARIO_PADRAO;
|
|
144
|
-
return theme;
|
|
145
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import { tex, type PixelPainter } from './canvas.js';
|
|
3
|
-
type Tex = ReturnType<typeof tex>;
|
|
4
|
-
/** O par de quadros do ciclo de 2 tempos que TODA figura da rua usa. */
|
|
5
|
-
export type TexPair = [Tex, Tex];
|
|
6
|
-
/** Índice do quadro: 0 e 1, os dois tempos do ciclo. */
|
|
7
|
-
export type Frame = 0 | 1;
|
|
8
|
-
/** Pombo no chão 7×6 — corpo cinza, bico laranja, pés. f alterna cabeça alta ↔ bicando. */
|
|
9
|
-
export declare const paintPombo: (f: Frame) => PixelPainter;
|
|
10
|
-
/** Pombo em revoada 8×7 — mesmo corpo, asa batendo. */
|
|
11
|
-
export declare const paintPomboFly: (f: Frame) => PixelPainter;
|
|
12
|
-
/** Gato 12×8 — corpo/cabeça/orelhas/rabo escuros, olho verde; f alterna as patas. */
|
|
13
|
-
export declare const paintGato: (f: Frame) => PixelPainter;
|
|
14
|
-
/** Cão 13×9 — corpo marrom, focinho escuro, orelha; f alterna as patas. */
|
|
15
|
-
export declare const paintCao: (f: Frame) => PixelPainter;
|
|
16
|
-
/** Catálogo dos bichos: tamanho do canvas + painter por quadro. Fonte única que `createCityTextures` percorre
|
|
17
|
-
* e que o teste de regressão de arte itera — as chaves são as MESMAS que `game/life` lê em `LifeTexAtlas`. */
|
|
18
|
-
export declare const CREATURE_ART: {
|
|
19
|
-
readonly pombo: {
|
|
20
|
-
readonly w: 7;
|
|
21
|
-
readonly h: 6;
|
|
22
|
-
readonly paint: (f: Frame) => PixelPainter;
|
|
23
|
-
};
|
|
24
|
-
readonly pomboFly: {
|
|
25
|
-
readonly w: 8;
|
|
26
|
-
readonly h: 7;
|
|
27
|
-
readonly paint: (f: Frame) => PixelPainter;
|
|
28
|
-
};
|
|
29
|
-
readonly gato: {
|
|
30
|
-
readonly w: 12;
|
|
31
|
-
readonly h: 8;
|
|
32
|
-
readonly paint: (f: Frame) => PixelPainter;
|
|
33
|
-
};
|
|
34
|
-
readonly cao: {
|
|
35
|
-
readonly w: 13;
|
|
36
|
-
readonly h: 9;
|
|
37
|
-
readonly paint: (f: Frame) => PixelPainter;
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
export type CreatureKey = keyof typeof CREATURE_ART;
|
|
41
|
-
/** Tamanho da silhueta — casado com o do personagem jogável (render/sprites). */
|
|
42
|
-
export declare const ADULT_W = 16, ADULT_H = 32;
|
|
43
|
-
/** Cor única de toda silhueta (era o `const col` fora do `mk` no main.js). */
|
|
44
|
-
export declare const ADULT_COL = "#262b38";
|
|
45
|
-
/** As 6 silhuetas — 3 masculinas + 3 femininas, todas 16×32. A ordem é a do original (M1, M2, M3, F1, F2, F3);
|
|
46
|
-
* `game/life` sorteia por índice, então reordenar troca qual silhueta cada sorteio produz. */
|
|
47
|
-
export declare const ADULT_SHAPES: ((f: Frame) => PixelPainter)[];
|
|
48
|
-
/** Tamanho do carro — 3× NATIVO (detalhado, sem upscale); `game/traffic` conta com os 78px de largura. */
|
|
49
|
-
export declare const CAR_W = 78, CAR_H = 36;
|
|
50
|
-
/** As 4 pinturas de fábrica: `[lataria, sombra, teto]`. */
|
|
51
|
-
export declare const CAR_PALETTES: readonly (readonly [string, string, string])[];
|
|
52
|
-
/** Um carro 78×36 na paleta dada. Vidros, brilhos, farol e lanterna são fixos (não seguem a lataria). */
|
|
53
|
-
export declare const paintCar: (body: string, dark: string, top: string) => PixelPainter;
|
|
54
|
-
/** O que o main.js injeta em `game/life` e `game/traffic` — nomes iguais aos campos dos respectivos `Ctx`. */
|
|
55
|
-
export interface CityTextures {
|
|
56
|
-
lifeTex: Record<CreatureKey, TexPair>;
|
|
57
|
-
adultTex: TexPair[];
|
|
58
|
-
carTex: Tex[];
|
|
59
|
-
}
|
|
60
|
-
/** Assa TODA a arte da rua de uma vez. TOCA `document` — chame só no boot do navegador, nunca no import.
|
|
61
|
-
* Não memoiza de propósito: é chamada uma vez pelo main.js; um cache aqui só esconderia uma segunda chamada. */
|
|
62
|
-
export declare function createCityTextures(): CityTextures;
|
|
63
|
-
export {};
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/city-tex — a ARTE PROCEDURAL DA RUA: os bichos, os pedestres e os carros do cenário Cidade.
|
|
3
|
-
//
|
|
4
|
-
// Três blocos que viviam soltos no main.js (`LIFE_TEX`, `ADULT_TEX`, `CAR_TEX`) e que são a MESMA coisa vista
|
|
5
|
-
// de três ângulos: retângulos coloridos carimbados num canvas offscreen que vira PIXI.Texture. Por isso caem
|
|
6
|
-
// juntos aqui, e não em três módulos: o que os une não é o assunto (bicho ≠ carro), é a TÉCNICA e o CONSUMIDOR
|
|
7
|
-
// — quem os pede é a Cidade, e só ela. `render/props` (moeda, árvore) e `render/world-tex` (o nível inteiro)
|
|
8
|
-
// ficam onde estão: props é decoração de QUALQUER cenário, world-tex é o mapa, não a rua.
|
|
9
|
-
//
|
|
10
|
-
// A DUPLICAÇÃO QUE ESTA EXTRAÇÃO CUROU: cada um dos três blocos declarava o SEU `mk` e o SEU `px`, com
|
|
11
|
-
// assinaturas que não conversavam — `mk(w,h,paint)` com `px(x,y,w,h,cor)`; `mk(paint)` de 16×32 fixo com
|
|
12
|
-
// `px(x,y,w,h)` e a cor presa numa `const` de fora; `mk(body,dark,top)` de 78×36 fixo com `px(x,y,w,h,cl)`.
|
|
13
|
-
// Três grafias para "pinte um retângulo". Agora existe uma só, `pixelCanvas`/`pixelTexture` em render/canvas.
|
|
14
|
-
// EFEITO COLATERAL ACEITO: as silhuetas de adulto passaram a receber a cor em CADA chamada (`ADULT_COL`) em vez
|
|
15
|
-
// de um `fillStyle` único antes do laço. O bitmap resultante é idêntico ao byte — só o número de atribuições de
|
|
16
|
-
// `fillStyle` muda —, e em troca some a última assinatura divergente.
|
|
17
|
-
//
|
|
18
|
-
// SEM I/O NO IMPORT — este é o ponto mais importante do arquivo. As texturas de origem nasciam em IIFE no corpo
|
|
19
|
-
// do main.js, o que funciona lá porque o main.js só roda no navegador; um módulo em `render/` é importado pelo
|
|
20
|
-
// project `node` do Vitest, onde `makeCanvas` toca `document` e explode. Por isso NÃO há constante pronta aqui:
|
|
21
|
-
// há `createCityTextures()`, chamada uma vez pelo main.js no boot. Mesmo precedente de `render/textures`
|
|
22
|
-
// (caches preenchidos por `initTextures`) e `render/viewports` (`initViewports`).
|
|
23
|
-
//
|
|
24
|
-
// A FRONTEIRA COM O JOGO NÃO SE MEXE: `game/life` e `game/traffic` continuam recebendo as texturas por INJEÇÃO
|
|
25
|
-
// (`initLife({ lifeTex, adultTex, … })`, `initTraffic({ CAR_TEX, … })`) — eles nunca importaram este módulo e
|
|
26
|
-
// continuam sem importar, para seguirem testáveis em `node` com texturas de mentira. O main.js é que passou a
|
|
27
|
-
// buscar aqui o que antes fabricava em casa. Quem cria as CAMADAS (`lifeLayer`, `carLayer`) e solda o z-order
|
|
28
|
-
// segue sendo o main.js: z-order é composição de cena, não arte.
|
|
29
|
-
//
|
|
30
|
-
// ARMADILHAS AO MEXER NA ARTE:
|
|
31
|
-
// · Os comentários de arte (`// cabeça alta / bicando`, `// M2: magro, de boné`, `// coluna B + retrovisor`)
|
|
32
|
-
// são a ÚNICA documentação de qual retângulo é qual parte da figura. Não os apague ao editar coordenadas.
|
|
33
|
-
// · A silhueta F2 NÃO chama `arms` — é verbatim do original, não esquecimento: os dois retângulos altos do
|
|
34
|
-
// cabelo longo (`2,4,3,13` e `11,4,3,13`) ocupam exatamente onde os braços iriam. Se um dia isso for
|
|
35
|
-
// "consertado", a F2 muda de forma no jogo.
|
|
36
|
-
// · Os carros são 3× NATIVOS (78×36 desenhados, sem upscale) porque a rua fica na camada da frente, perto da
|
|
37
|
-
// câmera; os bichos são 1× (7×6 … 13×9). Não normalize as escalas: `game/traffic` conta com os 78px.
|
|
38
|
-
// · Dois quadros por figura, sempre na ordem `[f0, f1]`: `game/life` alterna por índice (`f = f ? 0 : 1`).
|
|
39
|
-
// Inverter o par não quebra nenhum tipo — quebra a animação, em silêncio.
|
|
40
|
-
import { pixelTexture } from './canvas.js';
|
|
41
|
-
/* ===================== bichos: pombo, pombo voando, gato, cão ===================== */
|
|
42
|
-
/** Pombo no chão 7×6 — corpo cinza, bico laranja, pés. f alterna cabeça alta ↔ bicando. */
|
|
43
|
-
export const paintPombo = (f) => (px) => {
|
|
44
|
-
px(1, 2, 4, 2, '#9aa3b2');
|
|
45
|
-
px(0, 3, 2, 1, '#7d8695');
|
|
46
|
-
if (f === 0) {
|
|
47
|
-
px(4, 1, 2, 2, '#b9c2d0');
|
|
48
|
-
px(6, 2, 1, 1, '#e0a23c');
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
px(4, 3, 2, 2, '#b9c2d0');
|
|
52
|
-
px(6, 4, 1, 1, '#e0a23c');
|
|
53
|
-
} // cabeça alta / bicando
|
|
54
|
-
px(2, 5, 1, 1, '#c96a2e');
|
|
55
|
-
px(4, 5, 1, 1, '#c96a2e');
|
|
56
|
-
};
|
|
57
|
-
/** Pombo em revoada 8×7 — mesmo corpo, asa batendo. */
|
|
58
|
-
export const paintPomboFly = (f) => (px) => {
|
|
59
|
-
px(2, 3, 4, 2, '#9aa3b2');
|
|
60
|
-
px(6, 2, 2, 2, '#b9c2d0');
|
|
61
|
-
px(7, 3, 1, 1, '#e0a23c');
|
|
62
|
-
if (f === 0)
|
|
63
|
-
px(1, 0, 4, 2, '#c8d0dc');
|
|
64
|
-
else
|
|
65
|
-
px(1, 5, 4, 2, '#c8d0dc'); // asa cima/baixo
|
|
66
|
-
};
|
|
67
|
-
/** Gato 12×8 — corpo/cabeça/orelhas/rabo escuros, olho verde; f alterna as patas. */
|
|
68
|
-
export const paintGato = (f) => (px) => {
|
|
69
|
-
px(1, 3, 8, 3, '#454b58');
|
|
70
|
-
px(8, 1, 3, 3, '#454b58');
|
|
71
|
-
px(8, 0, 1, 1, '#454b58');
|
|
72
|
-
px(10, 0, 1, 1, '#454b58');
|
|
73
|
-
px(0, 2, 1, 3, '#454b58');
|
|
74
|
-
px(9, 2, 1, 1, '#9fe07a');
|
|
75
|
-
if (f === 0) {
|
|
76
|
-
px(2, 6, 1, 2, '#454b58');
|
|
77
|
-
px(7, 6, 1, 2, '#454b58');
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
px(3, 6, 1, 2, '#454b58');
|
|
81
|
-
px(6, 6, 1, 2, '#454b58');
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
/** Cão 13×9 — corpo marrom, focinho escuro, orelha; f alterna as patas. */
|
|
85
|
-
export const paintCao = (f) => (px) => {
|
|
86
|
-
px(1, 3, 9, 4, '#8a6a44');
|
|
87
|
-
px(9, 1, 4, 4, '#8a6a44');
|
|
88
|
-
px(12, 2, 1, 2, '#3a2d1c');
|
|
89
|
-
px(9, 0, 2, 2, '#6d5334');
|
|
90
|
-
px(0, 2, 1, 3, '#8a6a44');
|
|
91
|
-
if (f === 0) {
|
|
92
|
-
px(2, 7, 1, 2, '#6d5334');
|
|
93
|
-
px(8, 7, 1, 2, '#6d5334');
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
px(3, 7, 1, 2, '#6d5334');
|
|
97
|
-
px(7, 7, 1, 2, '#6d5334');
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
/** Catálogo dos bichos: tamanho do canvas + painter por quadro. Fonte única que `createCityTextures` percorre
|
|
101
|
-
* e que o teste de regressão de arte itera — as chaves são as MESMAS que `game/life` lê em `LifeTexAtlas`. */
|
|
102
|
-
export const CREATURE_ART = {
|
|
103
|
-
pombo: { w: 7, h: 6, paint: paintPombo },
|
|
104
|
-
pomboFly: { w: 8, h: 7, paint: paintPomboFly },
|
|
105
|
-
gato: { w: 12, h: 8, paint: paintGato },
|
|
106
|
-
cao: { w: 13, h: 9, paint: paintCao },
|
|
107
|
-
};
|
|
108
|
-
/* ===================== adultos: 6 silhuetas 16×32 ===================== */
|
|
109
|
-
// Adultos = SILHUETAS 16×32 (mesma proporção/tamanho do personagem), formatos distintos M/F (pedido do José)
|
|
110
|
-
/** Tamanho da silhueta — casado com o do personagem jogável (render/sprites). */
|
|
111
|
-
export const ADULT_W = 16, ADULT_H = 32;
|
|
112
|
-
/** Cor única de toda silhueta (era o `const col` fora do `mk` no main.js). */
|
|
113
|
-
export const ADULT_COL = '#262b38';
|
|
114
|
-
/** Pernas: calça (duas colunas alternando o passo) ou saia + pernas curtas. */
|
|
115
|
-
const legs = (px, f, skirt) => {
|
|
116
|
-
if (skirt) {
|
|
117
|
-
px(4, 20, 8, 6, ADULT_COL);
|
|
118
|
-
if (f === 0) {
|
|
119
|
-
px(5, 26, 2, 6, ADULT_COL);
|
|
120
|
-
px(9, 26, 2, 6, ADULT_COL);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
px(4, 26, 2, 6, ADULT_COL);
|
|
124
|
-
px(10, 26, 2, 6, ADULT_COL);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
if (f === 0) {
|
|
129
|
-
px(5, 20, 3, 12, ADULT_COL);
|
|
130
|
-
px(9, 20, 3, 11, ADULT_COL);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
px(4, 20, 3, 11, ADULT_COL);
|
|
134
|
-
px(10, 20, 3, 12, ADULT_COL);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
/** Braços pendentes, defasados entre os quadros (dá o balanço da caminhada). */
|
|
139
|
-
const arms = (px, f) => {
|
|
140
|
-
if (f === 0) {
|
|
141
|
-
px(2, 10, 2, 8, ADULT_COL);
|
|
142
|
-
px(12, 10, 2, 8, ADULT_COL);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
px(2, 11, 2, 7, ADULT_COL);
|
|
146
|
-
px(12, 9, 2, 8, ADULT_COL);
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
/** As 6 silhuetas — 3 masculinas + 3 femininas, todas 16×32. A ordem é a do original (M1, M2, M3, F1, F2, F3);
|
|
150
|
-
* `game/life` sorteia por índice, então reordenar troca qual silhueta cada sorteio produz. */
|
|
151
|
-
export const ADULT_SHAPES = [
|
|
152
|
-
(f) => (px) => { px(4, 0, 8, 6, ADULT_COL); px(3, 6, 10, 14, ADULT_COL); arms(px, f); legs(px, f, false); }, // M1: ombros largos
|
|
153
|
-
(f) => (px) => { px(5, 0, 6, 5, ADULT_COL); px(3, 1, 10, 2, ADULT_COL); px(5, 5, 6, 15, ADULT_COL); arms(px, f); legs(px, f, false); }, // M2: magro, de boné
|
|
154
|
-
(f) => (px) => { px(4, 1, 8, 5, ADULT_COL); px(2, 6, 12, 14, ADULT_COL); arms(px, f); legs(px, f, false); }, // M3: troncudo
|
|
155
|
-
(f) => (px) => { px(4, 0, 8, 6, ADULT_COL); px(11, 3, 3, 10, ADULT_COL); px(4, 6, 8, 10, ADULT_COL); px(3, 16, 10, 5, ADULT_COL); arms(px, f); legs(px, f, true); }, // F1: rabo de cavalo + saia
|
|
156
|
-
(f) => (px) => { px(3, 0, 10, 6, ADULT_COL); px(2, 4, 3, 13, ADULT_COL); px(11, 4, 3, 13, ADULT_COL); px(5, 6, 6, 10, ADULT_COL); px(4, 16, 8, 5, ADULT_COL); legs(px, f, true); }, // F2: cabelo longo + vestido (sem `arms` — ver o cabeçalho)
|
|
157
|
-
(f) => (px) => { px(3, 0, 10, 7, ADULT_COL); px(4, 7, 8, 9, ADULT_COL); px(3, 16, 10, 5, ADULT_COL); arms(px, f); legs(px, f, true); }, // F3: chanel + saia
|
|
158
|
-
];
|
|
159
|
-
/* ===================== carros: 4 cores, 78×36 (3× nativo) ===================== */
|
|
160
|
-
/** Tamanho do carro — 3× NATIVO (detalhado, sem upscale); `game/traffic` conta com os 78px de largura. */
|
|
161
|
-
export const CAR_W = 78, CAR_H = 36;
|
|
162
|
-
/** As 4 pinturas de fábrica: `[lataria, sombra, teto]`. */
|
|
163
|
-
export const CAR_PALETTES = [
|
|
164
|
-
['#c8452e', '#7d2717', '#a03a24'], // vermelho
|
|
165
|
-
['#2e6fc8', '#193f7d', '#2757a0'], // azul
|
|
166
|
-
['#3aa15b', '#1f6336', '#2f8a4c'], // verde
|
|
167
|
-
['#c8a12e', '#7d641a', '#a8862a'], // amarelo
|
|
168
|
-
];
|
|
169
|
-
/* ===================== A RODA É REDONDA, E ISSO PRECISOU SER DITO =====================
|
|
170
|
-
* A primeira versão do carro (portada verbatim do monólito) fazia o pneu com UM retângulo de 14×11. Numa
|
|
171
|
-
* arte de retângulos carimbados, a roda é o único elemento que o olho sabe de cor que é redondo — e é o
|
|
172
|
-
* primeiro que denuncia o desenho inteiro. O Dev, olhando a rua: "melhore os carros, estão muito feios com
|
|
173
|
-
* as rodas quadradas."
|
|
174
|
-
*
|
|
175
|
-
* O jeito de ter círculo aqui é o de sempre em pixel art: uma TABELA de linhas, cada uma com o recuo e a
|
|
176
|
-
* largura daquela altura. Não é aproximação de matemática em tempo de execução — é o desenho, escrito. */
|
|
177
|
-
/** Pneu Ø14: `[recuo, largura]` por linha, de cima para baixo. */
|
|
178
|
-
const PNEU = [
|
|
179
|
-
[5, 4], [3, 8], [2, 10], [1, 12], [1, 12], [0, 14], [0, 14],
|
|
180
|
-
[0, 14], [0, 14], [1, 12], [1, 12], [2, 10], [3, 8], [5, 4],
|
|
181
|
-
];
|
|
182
|
-
/** Aro Ø8, no mesmo formato — desenhado dentro do pneu. */
|
|
183
|
-
const ARO = [
|
|
184
|
-
[2, 4], [1, 6], [0, 8], [0, 8], [0, 8], [0, 8], [1, 6], [2, 4],
|
|
185
|
-
];
|
|
186
|
-
/** Um carro 78×36 na paleta dada. Vidros, brilhos, farol e lanterna são fixos (não seguem a lataria). */
|
|
187
|
-
export const paintCar = (body, dark, top) => (px) => {
|
|
188
|
-
px(3, 14, 72, 13, body);
|
|
189
|
-
px(3, 25, 72, 2, dark); // corpo + saia escura
|
|
190
|
-
px(1, 16, 2, 8, dark);
|
|
191
|
-
px(75, 16, 2, 8, dark); // para-choques
|
|
192
|
-
// Cabine com o teto AFUNILADO: eram 40px de bloco reto, e teto reto num carro de perfil lê como caixa.
|
|
193
|
-
px(17, 4, 36, 2, top);
|
|
194
|
-
px(15, 6, 40, 9, top);
|
|
195
|
-
px(17, 6, 36, 9, body);
|
|
196
|
-
px(19, 7, 14, 7, '#bcd6ee');
|
|
197
|
-
px(37, 7, 14, 7, '#bcd6ee'); // vidros
|
|
198
|
-
px(20, 8, 4, 2, '#eef6ff');
|
|
199
|
-
px(38, 8, 4, 2, '#eef6ff'); // brilho dos vidros
|
|
200
|
-
px(34, 7, 3, 7, top);
|
|
201
|
-
px(53, 10, 4, 4, dark); // coluna B + retrovisor
|
|
202
|
-
px(3, 14, 72, 1, 'rgba(255,255,255,.28)'); // realce superior da lataria
|
|
203
|
-
px(35, 15, 1, 10, dark); // frisa entre as duas portas
|
|
204
|
-
px(0, 17, 3, 5, '#ffd9a0');
|
|
205
|
-
px(75, 17, 3, 5, '#ff6a5a'); // farol / lanterna
|
|
206
|
-
const wheel = (wx) => {
|
|
207
|
-
px(wx + 1, 20, 12, 2, dark);
|
|
208
|
-
px(wx - 1, 21, 16, 1, dark); // caixa de roda, em arco
|
|
209
|
-
PNEU.forEach(([dx, w], i) => px(wx + dx, 22 + i, w, 1, '#10131a')); // pneu
|
|
210
|
-
ARO.forEach(([dx, w], i) => px(wx + 3 + dx, 25 + i, w, 1, '#2b3140')); // aro
|
|
211
|
-
px(wx + 6, 28, 2, 2, '#8a93a8'); // cubo
|
|
212
|
-
};
|
|
213
|
-
wheel(11);
|
|
214
|
-
wheel(53);
|
|
215
|
-
};
|
|
216
|
-
/** Assa TODA a arte da rua de uma vez. TOCA `document` — chame só no boot do navegador, nunca no import.
|
|
217
|
-
* Não memoiza de propósito: é chamada uma vez pelo main.js; um cache aqui só esconderia uma segunda chamada. */
|
|
218
|
-
export function createCityTextures() {
|
|
219
|
-
const pair = (w, h, paint) => [pixelTexture(w, h, paint(0)), pixelTexture(w, h, paint(1))]; // ordem [f0, f1] — game/life alterna por índice
|
|
220
|
-
const lifeTex = {};
|
|
221
|
-
for (const k of Object.keys(CREATURE_ART)) {
|
|
222
|
-
const a = CREATURE_ART[k];
|
|
223
|
-
lifeTex[k] = pair(a.w, a.h, a.paint);
|
|
224
|
-
}
|
|
225
|
-
const adultTex = ADULT_SHAPES.map((v) => pair(ADULT_W, ADULT_H, v));
|
|
226
|
-
const carTex = CAR_PALETTES.map(([body, dark, top]) => pixelTexture(CAR_W, CAR_H, paintCar(body, dark, top)));
|
|
227
|
-
return { lifeTex, adultTex, carTex };
|
|
228
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import { type PixelPainter } from './canvas.js';
|
|
3
|
-
/** O TILE do miolo da parede: alvenaria em fiada alternada. 51 retângulos, 9 cores, fiel ao pixel. */
|
|
4
|
-
export declare const paintTileFill: PixelPainter;
|
|
5
|
-
/** O TILE do TOPO da plataforma: mesma alvenaria com a borda superior iluminada. 62 retângulos, 23 cores. */
|
|
6
|
-
export declare const paintTileSurface: PixelPainter;
|
|
7
|
-
/** Os dois tiles como canvas 16×16 — a forma que `worldCanvas` consumia das imagens carregadas. */
|
|
8
|
-
export declare function cityTiles(): {
|
|
9
|
-
fill: HTMLCanvasElement;
|
|
10
|
-
surface: HTMLCanvasElement;
|
|
11
|
-
};
|