@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.
Files changed (532) hide show
  1. package/README.md +120 -78
  2. package/app/css/style.css +761 -377
  3. package/app/public/vendor/fonts/playwrite-cu.woff2 +0 -0
  4. package/app/public/vendor/fonts/playwrite-es-deco.woff2 +0 -0
  5. package/app/public/vendor/fonts/playwrite-es.woff2 +0 -0
  6. package/app/public/vendor/fonts/playwrite-gb-j.woff2 +0 -0
  7. package/app/public/vendor/fonts/playwrite-gb-s.woff2 +0 -0
  8. package/app/public/vendor/fonts/playwrite-pe.woff2 +0 -0
  9. package/app/public/vendor/fonts/playwrite-pt.woff2 +0 -0
  10. package/app/public/vendor/fonts-licences/NOTICE.txt +166 -0
  11. package/app/public/vendor/fonts-licences/OFL-1.1.txt +86 -0
  12. package/app/public/vendor/fonts.css +36 -84
  13. package/dist-pkg/boot/create-game.d.ts +499 -219
  14. package/dist-pkg/boot/create-game.js +3944 -562
  15. package/dist-pkg/core/a11y-sr.d.ts +25 -3
  16. package/dist-pkg/core/a11y-sr.js +38 -19
  17. package/dist-pkg/core/accessible-label.d.ts +17 -0
  18. package/dist-pkg/core/accessible-label.js +37 -0
  19. package/dist-pkg/core/accommodation-subjects.d.ts +26 -0
  20. package/dist-pkg/core/accommodation-subjects.js +32 -0
  21. package/dist-pkg/core/accommodations.d.ts +125 -0
  22. package/dist-pkg/core/accommodations.js +195 -0
  23. package/dist-pkg/core/actions.d.ts +108 -55
  24. package/dist-pkg/core/actions.js +122 -71
  25. package/dist-pkg/core/calm-mode.d.ts +31 -0
  26. package/dist-pkg/core/calm-mode.js +47 -0
  27. package/dist-pkg/core/camera-cycle.d.ts +15 -0
  28. package/dist-pkg/core/camera-cycle.js +7 -0
  29. package/dist-pkg/core/caption-duration.d.ts +15 -0
  30. package/dist-pkg/core/caption-duration.js +19 -0
  31. package/dist-pkg/core/cartridge-problems.d.ts +34 -0
  32. package/dist-pkg/core/cartridge-problems.js +53 -0
  33. package/dist-pkg/core/constants.d.ts +0 -54
  34. package/dist-pkg/core/constants.js +9 -76
  35. package/dist-pkg/core/contract.d.ts +142 -164
  36. package/dist-pkg/core/contract.js +222 -208
  37. package/dist-pkg/core/dom-query.d.ts +4 -4
  38. package/dist-pkg/core/dom-query.js +12 -20
  39. package/dist-pkg/core/entity.d.ts +62 -77
  40. package/dist-pkg/core/entity.js +18 -32
  41. package/dist-pkg/core/escape-html.d.ts +9 -10
  42. package/dist-pkg/core/escape-html.js +16 -20
  43. package/dist-pkg/core/flash-threshold.d.ts +17 -0
  44. package/dist-pkg/core/flash-threshold.js +113 -0
  45. package/dist-pkg/core/game-speed.d.ts +11 -0
  46. package/dist-pkg/core/game-speed.js +16 -0
  47. package/dist-pkg/core/genres.d.ts +20 -0
  48. package/dist-pkg/core/genres.js +44 -0
  49. package/dist-pkg/core/i18n.d.ts +71 -60
  50. package/dist-pkg/core/i18n.js +186 -200
  51. package/dist-pkg/core/loop.d.ts +17 -6
  52. package/dist-pkg/core/loop.js +26 -26
  53. package/dist-pkg/core/pause-icon-catalogue.d.ts +15 -0
  54. package/dist-pkg/core/pause-icon-catalogue.js +54 -0
  55. package/dist-pkg/core/ring.d.ts +17 -0
  56. package/dist-pkg/core/ring.js +29 -0
  57. package/dist-pkg/core/rng.d.ts +7 -12
  58. package/dist-pkg/core/rng.js +23 -53
  59. package/dist-pkg/core/route.d.ts +26 -26
  60. package/dist-pkg/core/route.js +126 -121
  61. package/dist-pkg/core/scenes.d.ts +37 -40
  62. package/dist-pkg/core/scenes.js +41 -43
  63. package/dist-pkg/core/screens.d.ts +4 -4
  64. package/dist-pkg/core/screens.js +11 -16
  65. package/dist-pkg/core/session-clock.d.ts +23 -0
  66. package/dist-pkg/core/session-clock.js +37 -0
  67. package/dist-pkg/core/setting-defaults.d.ts +61 -0
  68. package/dist-pkg/core/setting-defaults.js +66 -0
  69. package/dist-pkg/core/speech-rate.d.ts +29 -0
  70. package/dist-pkg/core/speech-rate.js +47 -0
  71. package/dist-pkg/core/state.d.ts +118 -118
  72. package/dist-pkg/core/state.js +322 -297
  73. package/dist-pkg/core/visual-cycles.d.ts +30 -0
  74. package/dist-pkg/core/visual-cycles.js +52 -0
  75. package/dist-pkg/core/visual-state.d.ts +13 -0
  76. package/dist-pkg/core/visual-state.js +6 -0
  77. package/dist-pkg/educational/activities-registry.d.ts +1 -1
  78. package/dist-pkg/educational/activities-registry.js +9 -8
  79. package/dist-pkg/educational/adaptive-engine.d.ts +11 -11
  80. package/dist-pkg/educational/adaptive-engine.js +17 -17
  81. package/dist-pkg/educational/segment-bar.d.ts +12 -12
  82. package/dist-pkg/educational/segment-bar.js +9 -9
  83. package/dist-pkg/i18n/en.js +324 -223
  84. package/dist-pkg/i18n/es.js +323 -223
  85. package/dist-pkg/i18n/pt.js +348 -226
  86. package/dist-pkg/input/default-bindings.d.ts +37 -38
  87. package/dist-pkg/input/default-bindings.js +127 -144
  88. package/dist-pkg/input/devices.d.ts +7 -7
  89. package/dist-pkg/input/devices.js +17 -16
  90. package/dist-pkg/input/edges.d.ts +23 -32
  91. package/dist-pkg/input/edges.js +23 -28
  92. package/dist-pkg/input/empathy-filter.d.ts +22 -0
  93. package/dist-pkg/input/empathy-filter.js +34 -0
  94. package/dist-pkg/input/face-map.d.ts +96 -0
  95. package/dist-pkg/input/face-map.js +255 -0
  96. package/dist-pkg/input/face-signals.d.ts +40 -0
  97. package/dist-pkg/input/face-signals.js +48 -0
  98. package/dist-pkg/input/gamepad.d.ts +195 -145
  99. package/dist-pkg/input/gamepad.js +383 -556
  100. package/dist-pkg/input/gaze-cycle.d.ts +64 -0
  101. package/dist-pkg/input/gaze-cycle.js +133 -0
  102. package/dist-pkg/input/gaze-relative.d.ts +68 -0
  103. package/dist-pkg/input/gaze-relative.js +142 -0
  104. package/dist-pkg/input/hand-map.d.ts +28 -0
  105. package/dist-pkg/input/hand-map.js +142 -0
  106. package/dist-pkg/input/input-cooldown.d.ts +17 -0
  107. package/dist-pkg/input/input-cooldown.js +39 -0
  108. package/dist-pkg/input/key-default.d.ts +30 -0
  109. package/dist-pkg/input/key-default.js +60 -0
  110. package/dist-pkg/input/keyboard-runtime.d.ts +15 -21
  111. package/dist-pkg/input/keyboard-runtime.js +23 -27
  112. package/dist-pkg/input/keyboard.d.ts +68 -63
  113. package/dist-pkg/input/keyboard.js +83 -105
  114. package/dist-pkg/input/keydown.d.ts +123 -137
  115. package/dist-pkg/input/keydown.js +284 -289
  116. package/dist-pkg/input/latch-edge.d.ts +33 -21
  117. package/dist-pkg/input/latch-edge.js +34 -35
  118. package/dist-pkg/input/latch-scope.d.ts +51 -50
  119. package/dist-pkg/input/latch-scope.js +61 -82
  120. package/dist-pkg/input/latch-store.d.ts +26 -30
  121. package/dist-pkg/input/latch-store.js +42 -50
  122. package/dist-pkg/input/latch-sync.d.ts +29 -29
  123. package/dist-pkg/input/latch-sync.js +25 -25
  124. package/dist-pkg/input/latch.d.ts +14 -17
  125. package/dist-pkg/input/latch.js +29 -37
  126. package/dist-pkg/input/pad-defaults.d.ts +13 -16
  127. package/dist-pkg/input/pad-defaults.js +21 -28
  128. package/dist-pkg/input/pad-reading.d.ts +76 -0
  129. package/dist-pkg/input/pad-reading.js +169 -0
  130. package/dist-pkg/input/pad-wizard.d.ts +99 -0
  131. package/dist-pkg/input/pad-wizard.js +256 -0
  132. package/dist-pkg/input/pointer-space.d.ts +19 -20
  133. package/dist-pkg/input/pointer-space.js +27 -32
  134. package/dist-pkg/input/pointer.d.ts +39 -40
  135. package/dist-pkg/input/pointer.js +42 -45
  136. package/dist-pkg/input/state.d.ts +101 -89
  137. package/dist-pkg/input/state.js +54 -134
  138. package/dist-pkg/input/switch-scan.d.ts +59 -0
  139. package/dist-pkg/input/switch-scan.js +67 -0
  140. package/dist-pkg/input/synthetic-source.d.ts +42 -0
  141. package/dist-pkg/input/synthetic-source.js +57 -0
  142. package/dist-pkg/input/touch-bindings.d.ts +127 -116
  143. package/dist-pkg/input/touch-bindings.js +158 -173
  144. package/dist-pkg/input/touch.d.ts +147 -72
  145. package/dist-pkg/input/touch.js +362 -126
  146. package/dist-pkg/input/transport-in-use.d.ts +107 -0
  147. package/dist-pkg/input/transport-in-use.js +130 -0
  148. package/dist-pkg/input/transports.d.ts +90 -117
  149. package/dist-pkg/input/transports.js +104 -106
  150. package/dist-pkg/input/virtual-controller.d.ts +82 -0
  151. package/dist-pkg/input/virtual-controller.js +69 -0
  152. package/dist-pkg/input/vocabulary-migration.d.ts +50 -49
  153. package/dist-pkg/input/vocabulary-migration.js +80 -79
  154. package/dist-pkg/input/voice-map.d.ts +59 -0
  155. package/dist-pkg/input/voice-map.js +123 -0
  156. package/dist-pkg/platform/audio-ambient.d.ts +13 -2
  157. package/dist-pkg/platform/audio-ambient.js +14 -14
  158. package/dist-pkg/platform/audio-earcons.d.ts +20 -19
  159. package/dist-pkg/platform/audio-earcons.js +51 -42
  160. package/dist-pkg/platform/audio-jingles.js +9 -10
  161. package/dist-pkg/platform/audio-mixer.d.ts +14 -2
  162. package/dist-pkg/platform/audio-mixer.js +31 -39
  163. package/dist-pkg/platform/audio-sonar.d.ts +49 -152
  164. package/dist-pkg/platform/audio-sonar.js +124 -302
  165. package/dist-pkg/platform/audio.d.ts +62 -19
  166. package/dist-pkg/platform/audio.js +193 -168
  167. package/dist-pkg/platform/choose-by-voice.d.ts +70 -0
  168. package/dist-pkg/platform/choose-by-voice.js +157 -0
  169. package/dist-pkg/platform/flash-sampler.d.ts +19 -0
  170. package/dist-pkg/platform/flash-sampler.js +79 -0
  171. package/dist-pkg/platform/font-library.d.ts +77 -0
  172. package/dist-pkg/platform/font-library.js +98 -0
  173. package/dist-pkg/platform/font-library.json +721 -0
  174. package/dist-pkg/platform/heavy-catalogue.d.ts +77 -0
  175. package/dist-pkg/platform/heavy-catalogue.js +256 -0
  176. package/dist-pkg/platform/heavy-mirror.d.ts +20 -0
  177. package/dist-pkg/platform/heavy-mirror.js +73 -0
  178. package/dist-pkg/platform/heavy.d.ts +136 -0
  179. package/dist-pkg/platform/heavy.js +324 -0
  180. package/dist-pkg/platform/interruptible-speech.d.ts +23 -16
  181. package/dist-pkg/platform/interruptible-speech.js +77 -54
  182. package/dist-pkg/platform/kokoro-port.d.ts +27 -0
  183. package/dist-pkg/platform/kokoro-port.js +50 -0
  184. package/dist-pkg/platform/kokoro-runtime.d.ts +20 -0
  185. package/dist-pkg/platform/kokoro-runtime.js +52 -0
  186. package/dist-pkg/platform/kokoro.d.ts +70 -0
  187. package/dist-pkg/platform/kokoro.js +133 -0
  188. package/dist-pkg/platform/listener-scope.d.ts +12 -0
  189. package/dist-pkg/platform/listener-scope.js +90 -0
  190. package/dist-pkg/platform/locale-host.d.ts +14 -0
  191. package/dist-pkg/platform/locale-host.js +45 -0
  192. package/dist-pkg/platform/microphone.d.ts +51 -0
  193. package/dist-pkg/platform/microphone.js +118 -0
  194. package/dist-pkg/platform/onnx-runtime.d.ts +34 -0
  195. package/dist-pkg/platform/onnx-runtime.js +42 -0
  196. package/dist-pkg/platform/reading-in-worker.d.ts +64 -0
  197. package/dist-pkg/platform/reading-in-worker.js +125 -0
  198. package/dist-pkg/platform/reading-model.d.ts +94 -0
  199. package/dist-pkg/platform/reading-model.js +272 -0
  200. package/dist-pkg/platform/reading-runtime.d.ts +24 -0
  201. package/dist-pkg/platform/reading-runtime.js +164 -0
  202. package/dist-pkg/platform/reading-worker.d.ts +41 -0
  203. package/dist-pkg/platform/reading-worker.js +58 -0
  204. package/dist-pkg/platform/reading.d.ts +80 -0
  205. package/dist-pkg/platform/reading.js +136 -0
  206. package/dist-pkg/platform/speech-recognition.d.ts +60 -0
  207. package/dist-pkg/platform/speech-recognition.js +104 -0
  208. package/dist-pkg/platform/speech.d.ts +23 -1
  209. package/dist-pkg/platform/speech.js +29 -18
  210. package/dist-pkg/platform/storage-keys.d.ts +96 -0
  211. package/dist-pkg/platform/storage-keys.js +106 -0
  212. package/dist-pkg/platform/storage.d.ts +46 -111
  213. package/dist-pkg/platform/storage.js +104 -169
  214. package/dist-pkg/platform/tts.d.ts +85 -39
  215. package/dist-pkg/platform/tts.js +447 -127
  216. package/dist-pkg/platform/vision-loop.d.ts +23 -0
  217. package/dist-pkg/platform/vision-loop.js +56 -0
  218. package/dist-pkg/platform/vision.d.ts +132 -0
  219. package/dist-pkg/platform/vision.js +117 -0
  220. package/dist-pkg/platform/voice-listener.d.ts +40 -0
  221. package/dist-pkg/platform/voice-listener.js +88 -0
  222. package/dist-pkg/platform/voice-plan.d.ts +15 -98
  223. package/dist-pkg/platform/voice-plan.js +56 -143
  224. package/dist-pkg/platform/vosk-runtime.d.ts +96 -0
  225. package/dist-pkg/platform/vosk-runtime.js +151 -0
  226. package/dist-pkg/platform/vosk-vocabulary.d.ts +6 -0
  227. package/dist-pkg/platform/vosk-vocabulary.js +178 -0
  228. package/dist-pkg/render/canvas.d.ts +13 -7
  229. package/dist-pkg/render/canvas.js +13 -13
  230. package/dist-pkg/render/crt.d.ts +48 -12
  231. package/dist-pkg/render/crt.js +78 -80
  232. package/dist-pkg/render/cvd-matrices.d.ts +22 -18
  233. package/dist-pkg/render/cvd-matrices.js +37 -38
  234. package/dist-pkg/render/hc-role-data.d.ts +7 -7
  235. package/dist-pkg/render/hc-role-data.js +14 -14
  236. package/dist-pkg/render/high-contrast.d.ts +67 -56
  237. package/dist-pkg/render/high-contrast.js +226 -217
  238. package/dist-pkg/render/low-vision-drawing.d.ts +5 -0
  239. package/dist-pkg/render/low-vision-drawing.js +46 -0
  240. package/dist-pkg/render/lq-filter.d.ts +32 -20
  241. package/dist-pkg/render/lq-filter.js +59 -65
  242. package/dist-pkg/render/port.d.ts +86 -88
  243. package/dist-pkg/render/port.js +17 -23
  244. package/dist-pkg/render/screen-pipeline.d.ts +42 -42
  245. package/dist-pkg/render/screen-pipeline.js +80 -87
  246. package/dist-pkg/render/sprite-fx.d.ts +2 -1
  247. package/dist-pkg/render/sprite-fx.js +16 -14
  248. package/dist-pkg/render/viewports.d.ts +20 -15
  249. package/dist-pkg/render/viewports.js +83 -114
  250. package/dist-pkg/render/viz-axes-labels.d.ts +47 -0
  251. package/dist-pkg/render/viz-axes-labels.js +88 -0
  252. package/dist-pkg/render/viz-axes.d.ts +89 -86
  253. package/dist-pkg/render/viz-axes.js +128 -116
  254. package/dist-pkg/render/viz-modes.d.ts +28 -29
  255. package/dist-pkg/render/viz-modes.js +40 -45
  256. package/dist-pkg/render/viz-refusal.d.ts +32 -0
  257. package/dist-pkg/render/viz-refusal.js +57 -0
  258. package/dist-pkg/render/viz-setters.d.ts +104 -66
  259. package/dist-pkg/render/viz-setters.js +182 -191
  260. package/dist-pkg/ui/aac-sets.d.ts +45 -0
  261. package/dist-pkg/ui/aac-sets.js +41 -0
  262. package/dist-pkg/ui/audio-choices.d.ts +68 -0
  263. package/dist-pkg/ui/audio-choices.js +98 -0
  264. package/dist-pkg/ui/audio-rows-that-apply.d.ts +12 -0
  265. package/dist-pkg/ui/audio-rows-that-apply.js +43 -0
  266. package/dist-pkg/ui/camera-control.d.ts +53 -0
  267. package/dist-pkg/ui/camera-control.js +48 -0
  268. package/dist-pkg/ui/changed-mark.d.ts +9 -8
  269. package/dist-pkg/ui/changed-mark.js +22 -53
  270. package/dist-pkg/ui/control-choices.d.ts +37 -0
  271. package/dist-pkg/ui/control-choices.js +84 -0
  272. package/dist-pkg/ui/debug-panel.d.ts +59 -43
  273. package/dist-pkg/ui/debug-panel.js +68 -69
  274. package/dist-pkg/ui/declared-words.d.ts +21 -0
  275. package/dist-pkg/ui/declared-words.js +66 -0
  276. package/dist-pkg/ui/dom.d.ts +10 -14
  277. package/dist-pkg/ui/dom.js +10 -47
  278. package/dist-pkg/ui/drawing-problems.d.ts +25 -0
  279. package/dist-pkg/ui/drawing-problems.js +94 -0
  280. package/dist-pkg/ui/eye-control.d.ts +36 -0
  281. package/dist-pkg/ui/eye-control.js +178 -0
  282. package/dist-pkg/ui/face-control.d.ts +25 -0
  283. package/dist-pkg/ui/face-control.js +183 -0
  284. package/dist-pkg/ui/focus-trap.d.ts +39 -49
  285. package/dist-pkg/ui/focus-trap.js +56 -65
  286. package/dist-pkg/ui/fonts.d.ts +157 -68
  287. package/dist-pkg/ui/fonts.js +305 -115
  288. package/dist-pkg/ui/footer-scroll-driver.d.ts +14 -0
  289. package/dist-pkg/ui/footer-scroll-driver.js +201 -0
  290. package/dist-pkg/ui/footer-scroll.d.ts +38 -0
  291. package/dist-pkg/ui/footer-scroll.js +55 -0
  292. package/dist-pkg/ui/game-options.d.ts +47 -0
  293. package/dist-pkg/ui/game-options.js +158 -0
  294. package/dist-pkg/ui/gaze-overlay.d.ts +64 -0
  295. package/dist-pkg/ui/gaze-overlay.js +165 -0
  296. package/dist-pkg/ui/hand-control.d.ts +25 -0
  297. package/dist-pkg/ui/hand-control.js +143 -0
  298. package/dist-pkg/ui/help-panel.d.ts +87 -0
  299. package/dist-pkg/ui/help-panel.js +242 -0
  300. package/dist-pkg/ui/hud-bands.d.ts +62 -0
  301. package/dist-pkg/ui/hud-bands.js +146 -0
  302. package/dist-pkg/ui/hud-row.d.ts +34 -0
  303. package/dist-pkg/ui/hud-row.js +80 -0
  304. package/dist-pkg/ui/hud.d.ts +73 -73
  305. package/dist-pkg/ui/hud.js +94 -98
  306. package/dist-pkg/ui/item-announcement.d.ts +13 -12
  307. package/dist-pkg/ui/item-announcement.js +25 -26
  308. package/dist-pkg/ui/layout.d.ts +103 -28
  309. package/dist-pkg/ui/layout.js +117 -99
  310. package/dist-pkg/ui/libras-avatar-clip.d.ts +30 -0
  311. package/dist-pkg/ui/libras-avatar-clip.js +86 -0
  312. package/dist-pkg/ui/libras-avatar-load.d.ts +52 -0
  313. package/dist-pkg/ui/libras-avatar-load.js +134 -0
  314. package/dist-pkg/ui/libras-avatar-plan.d.ts +102 -0
  315. package/dist-pkg/ui/libras-avatar-plan.js +211 -0
  316. package/dist-pkg/ui/libras-avatar-player.d.ts +28 -0
  317. package/dist-pkg/ui/libras-avatar-player.js +226 -0
  318. package/dist-pkg/ui/libras-avatar-stage.d.ts +37 -0
  319. package/dist-pkg/ui/libras-avatar-stage.js +208 -0
  320. package/dist-pkg/ui/libras-glosses.d.ts +28 -0
  321. package/dist-pkg/ui/libras-glosses.js +161 -0
  322. package/dist-pkg/ui/locale-flags.d.ts +16 -0
  323. package/dist-pkg/ui/locale-flags.js +30 -0
  324. package/dist-pkg/ui/loop-crash.d.ts +17 -17
  325. package/dist-pkg/ui/loop-crash.js +33 -62
  326. package/dist-pkg/ui/menu-intent.d.ts +61 -0
  327. package/dist-pkg/ui/menu-intent.js +88 -0
  328. package/dist-pkg/ui/menu-items.d.ts +20 -0
  329. package/dist-pkg/ui/menu-items.js +51 -0
  330. package/dist-pkg/ui/menu-nav.d.ts +98 -92
  331. package/dist-pkg/ui/menu-nav.js +398 -286
  332. package/dist-pkg/ui/mobility-choices.d.ts +26 -0
  333. package/dist-pkg/ui/mobility-choices.js +41 -0
  334. package/dist-pkg/ui/motion-choices.d.ts +31 -0
  335. package/dist-pkg/ui/motion-choices.js +68 -0
  336. package/dist-pkg/ui/motion-scene.d.ts +24 -19
  337. package/dist-pkg/ui/motion-scene.js +29 -61
  338. package/dist-pkg/ui/mount-panel.d.ts +81 -0
  339. package/dist-pkg/ui/mount-panel.js +61 -0
  340. package/dist-pkg/ui/panel-shell.d.ts +65 -31
  341. package/dist-pkg/ui/panel-shell.js +92 -66
  342. package/dist-pkg/ui/panel-widgets.d.ts +150 -0
  343. package/dist-pkg/ui/panel-widgets.js +294 -0
  344. package/dist-pkg/ui/pause-buttons.d.ts +35 -0
  345. package/dist-pkg/ui/pause-buttons.js +66 -0
  346. package/dist-pkg/ui/pause-icons.d.ts +261 -347
  347. package/dist-pkg/ui/pause-icons.js +671 -601
  348. package/dist-pkg/ui/pause-markup.d.ts +86 -0
  349. package/dist-pkg/ui/pause-markup.js +125 -0
  350. package/dist-pkg/ui/reach-notice.d.ts +22 -23
  351. package/dist-pkg/ui/reach-notice.js +55 -58
  352. package/dist-pkg/ui/scan-overlay.d.ts +23 -0
  353. package/dist-pkg/ui/scan-overlay.js +50 -0
  354. package/dist-pkg/ui/screen-text.d.ts +25 -0
  355. package/dist-pkg/ui/screen-text.js +152 -0
  356. package/dist-pkg/ui/session-clock.d.ts +32 -0
  357. package/dist-pkg/ui/session-clock.js +67 -0
  358. package/dist-pkg/ui/settings-aac.d.ts +70 -0
  359. package/dist-pkg/ui/settings-aac.js +208 -0
  360. package/dist-pkg/ui/settings-audio.d.ts +97 -114
  361. package/dist-pkg/ui/settings-audio.js +493 -425
  362. package/dist-pkg/ui/settings-controls.d.ts +53 -96
  363. package/dist-pkg/ui/settings-controls.js +143 -215
  364. package/dist-pkg/ui/settings-empathy.d.ts +39 -30
  365. package/dist-pkg/ui/settings-empathy.js +53 -60
  366. package/dist-pkg/ui/settings-mobility.d.ts +192 -0
  367. package/dist-pkg/ui/settings-mobility.js +332 -0
  368. package/dist-pkg/ui/settings-motion.d.ts +91 -70
  369. package/dist-pkg/ui/settings-motion.js +287 -198
  370. package/dist-pkg/ui/settings-panel.d.ts +58 -45
  371. package/dist-pkg/ui/settings-panel.js +189 -94
  372. package/dist-pkg/ui/settings-typo.d.ts +29 -78
  373. package/dist-pkg/ui/settings-typo.js +158 -129
  374. package/dist-pkg/ui/settings-visual.d.ts +29 -87
  375. package/dist-pkg/ui/settings-visual.js +240 -193
  376. package/dist-pkg/ui/shell.d.ts +112 -135
  377. package/dist-pkg/ui/shell.js +148 -217
  378. package/dist-pkg/ui/simulation-list.d.ts +27 -0
  379. package/dist-pkg/ui/simulation-list.js +76 -0
  380. package/dist-pkg/ui/simulation-over-the-world.d.ts +23 -0
  381. package/dist-pkg/ui/simulation-over-the-world.js +131 -0
  382. package/dist-pkg/ui/simulation-refusal.d.ts +5 -31
  383. package/dist-pkg/ui/simulation-refusal.js +8 -56
  384. package/dist-pkg/ui/switchable-control.d.ts +11 -0
  385. package/dist-pkg/ui/switchable-control.js +19 -0
  386. package/dist-pkg/ui/title.d.ts +3 -12
  387. package/dist-pkg/ui/title.js +49 -18
  388. package/dist-pkg/ui/top-band.d.ts +26 -0
  389. package/dist-pkg/ui/top-band.js +96 -0
  390. package/dist-pkg/ui/typo-choices.d.ts +71 -0
  391. package/dist-pkg/ui/typo-choices.js +85 -0
  392. package/dist-pkg/ui/visual-axes-panel.d.ts +11 -47
  393. package/dist-pkg/ui/visual-axes-panel.js +12 -94
  394. package/dist-pkg/ui/visual-choices.d.ts +77 -0
  395. package/dist-pkg/ui/visual-choices.js +107 -0
  396. package/dist-pkg/ui/vlibras.d.ts +77 -10
  397. package/dist-pkg/ui/vlibras.js +130 -81
  398. package/dist-pkg/ui/voice-control.d.ts +68 -0
  399. package/dist-pkg/ui/voice-control.js +276 -0
  400. package/dist-pkg/ui/voice-settings.d.ts +95 -0
  401. package/dist-pkg/ui/voice-settings.js +352 -0
  402. package/dist-pkg/ui/where-the-child-is.d.ts +31 -0
  403. package/dist-pkg/ui/where-the-child-is.js +70 -0
  404. package/docs/CREDITS.md +300 -44
  405. package/docs/LICENSES.md +189 -145
  406. package/package.json +51 -27
  407. package/scripts/check-cartridge.mjs +78 -0
  408. package/scripts/game-build.d.mts +25 -0
  409. package/scripts/game-build.mjs +144 -0
  410. package/scripts/heavy-into-the-delivery.mjs +388 -0
  411. package/scripts/libras-avatar.json +680 -0
  412. package/scripts/libras-avatar.mjs +246 -0
  413. package/scripts/libras-glosses/gloss.py +95 -0
  414. package/scripts/libras-glosses/pyproject.toml +32 -0
  415. package/scripts/libras-glosses/uv.lock +781 -0
  416. package/scripts/libras-glosses.mjs +351 -0
  417. package/scripts/licences/Apache-2.0.txt +176 -0
  418. package/scripts/licences/GPL-3.0.txt +674 -0
  419. package/scripts/licences/MIT.txt +17 -0
  420. package/scripts/licences/OFL-1.1.txt +86 -0
  421. package/scripts/licences/UFL-1.0.txt +96 -0
  422. package/scripts/licences/fonts.mjs +389 -0
  423. package/scripts/licences/third-party.mjs +301 -0
  424. package/scripts/licences/vosk-browser.NOTICE.txt +268 -0
  425. package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
  426. package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
  427. package/app/public/vendor/fonts/fondamento-400-ext.woff2 +0 -0
  428. package/app/public/vendor/fonts/fondamento-400.woff2 +0 -0
  429. package/app/public/vendor/fonts/inter-400.woff2 +0 -0
  430. package/app/public/vendor/fonts/inter-700.woff2 +0 -0
  431. package/app/public/vendor/fonts/lato-400.woff2 +0 -0
  432. package/app/public/vendor/fonts/lato-700.woff2 +0 -0
  433. package/app/public/vendor/fonts/literata-400.woff2 +0 -0
  434. package/app/public/vendor/fonts/literata-700.woff2 +0 -0
  435. package/app/public/vendor/fonts/newsreader-400.woff2 +0 -0
  436. package/app/public/vendor/fonts/newsreader-700.woff2 +0 -0
  437. package/app/public/vendor/fonts/opendyslexic-400.woff2 +0 -0
  438. package/app/public/vendor/fonts/opensans-400.woff2 +0 -0
  439. package/app/public/vendor/fonts/opensans-700.woff2 +0 -0
  440. package/app/public/vendor/fonts/pinyon-400.woff2 +0 -0
  441. package/app/public/vendor/fonts/pressstart-400.woff2 +0 -0
  442. package/app/public/vendor/fonts/quattro-400.woff2 +0 -0
  443. package/app/public/vendor/fonts/quattro-700.woff2 +0 -0
  444. package/app/public/vendor/fonts/sourcesans-400.woff2 +0 -0
  445. package/app/public/vendor/fonts/sourcesans-700.woff2 +0 -0
  446. package/app/public/vendor/fonts/sourceserif-400.woff2 +0 -0
  447. package/app/public/vendor/fonts/sourceserif-700.woff2 +0 -0
  448. package/app/public/vendor/fonts/ufmag-400.woff2 +0 -0
  449. package/dist-pkg/core/anel.d.ts +0 -17
  450. package/dist-pkg/core/anel.js +0 -31
  451. package/dist-pkg/core/collision.d.ts +0 -21
  452. package/dist-pkg/core/collision.js +0 -62
  453. package/dist-pkg/core/layers.d.ts +0 -63
  454. package/dist-pkg/core/layers.js +0 -95
  455. package/dist-pkg/core/letter-grid.d.ts +0 -55
  456. package/dist-pkg/core/letter-grid.js +0 -116
  457. package/dist-pkg/core/password.d.ts +0 -34
  458. package/dist-pkg/core/password.js +0 -205
  459. package/dist-pkg/core/rotulo-acessivel.d.ts +0 -17
  460. package/dist-pkg/core/rotulo-acessivel.js +0 -41
  461. package/dist-pkg/core/run-state.d.ts +0 -115
  462. package/dist-pkg/core/run-state.js +0 -40
  463. package/dist-pkg/core/tiles.d.ts +0 -12
  464. package/dist-pkg/core/tiles.js +0 -61
  465. package/dist-pkg/core/world.d.ts +0 -4
  466. package/dist-pkg/core/world.js +0 -58
  467. package/dist-pkg/input/origem-sintetica.d.ts +0 -44
  468. package/dist-pkg/input/origem-sintetica.js +0 -60
  469. package/dist-pkg/input/transporte-em-uso.d.ts +0 -101
  470. package/dist-pkg/input/transporte-em-uso.js +0 -130
  471. package/dist-pkg/platform/audio-nav.d.ts +0 -51
  472. package/dist-pkg/platform/audio-nav.js +0 -99
  473. package/dist-pkg/platform/guide-intensity.d.ts +0 -40
  474. package/dist-pkg/platform/guide-intensity.js +0 -73
  475. package/dist-pkg/platform/pesados-catalogo.d.ts +0 -14
  476. package/dist-pkg/platform/pesados-catalogo.js +0 -177
  477. package/dist-pkg/platform/pesados.d.ts +0 -31
  478. package/dist-pkg/platform/pesados.js +0 -75
  479. package/dist-pkg/platform/vozes-prontas.d.ts +0 -28
  480. package/dist-pkg/platform/vozes-prontas.js +0 -61
  481. package/dist-pkg/render/camera.d.ts +0 -58
  482. package/dist-pkg/render/camera.js +0 -105
  483. package/dist-pkg/render/cenario-data.d.ts +0 -127
  484. package/dist-pkg/render/cenario-data.js +0 -145
  485. package/dist-pkg/render/city-tex.d.ts +0 -63
  486. package/dist-pkg/render/city-tex.js +0 -228
  487. package/dist-pkg/render/city-tiles.d.ts +0 -11
  488. package/dist-pkg/render/city-tiles.js +0 -140
  489. package/dist-pkg/render/draw.d.ts +0 -149
  490. package/dist-pkg/render/draw.js +0 -231
  491. package/dist-pkg/render/fx.d.ts +0 -63
  492. package/dist-pkg/render/fx.js +0 -123
  493. package/dist-pkg/render/minimap.d.ts +0 -11
  494. package/dist-pkg/render/minimap.js +0 -94
  495. package/dist-pkg/render/parallax.d.ts +0 -85
  496. package/dist-pkg/render/parallax.js +0 -158
  497. package/dist-pkg/render/player-anim.d.ts +0 -71
  498. package/dist-pkg/render/player-anim.js +0 -152
  499. package/dist-pkg/render/recycling-tex.d.ts +0 -48
  500. package/dist-pkg/render/recycling-tex.js +0 -164
  501. package/dist-pkg/render/scene-city.d.ts +0 -77
  502. package/dist-pkg/render/scene-city.js +0 -181
  503. package/dist-pkg/render/scene-parallax.d.ts +0 -72
  504. package/dist-pkg/render/scene-parallax.js +0 -426
  505. package/dist-pkg/render/scene-sky.d.ts +0 -126
  506. package/dist-pkg/render/scene-sky.js +0 -295
  507. package/dist-pkg/render/set-cenario.d.ts +0 -54
  508. package/dist-pkg/render/set-cenario.js +0 -103
  509. package/dist-pkg/render/textures.d.ts +0 -75
  510. package/dist-pkg/render/textures.js +0 -240
  511. package/dist-pkg/render/title-scene.d.ts +0 -46
  512. package/dist-pkg/render/title-scene.js +0 -75
  513. package/dist-pkg/render/weather.d.ts +0 -96
  514. package/dist-pkg/render/weather.js +0 -171
  515. package/dist-pkg/render/wheelchair-sprites.d.ts +0 -32
  516. package/dist-pkg/render/wheelchair-sprites.js +0 -69
  517. package/dist-pkg/render/world-tex.d.ts +0 -18
  518. package/dist-pkg/render/world-tex.js +0 -87
  519. package/dist-pkg/ui/activities-menu.d.ts +0 -258
  520. package/dist-pkg/ui/activities-menu.js +0 -648
  521. package/dist-pkg/ui/caa-sets.d.ts +0 -39
  522. package/dist-pkg/ui/caa-sets.js +0 -65
  523. package/dist-pkg/ui/latch-refusal.d.ts +0 -32
  524. package/dist-pkg/ui/latch-refusal.js +0 -60
  525. package/dist-pkg/ui/map-hub.d.ts +0 -56
  526. package/dist-pkg/ui/map-hub.js +0 -138
  527. package/dist-pkg/ui/settings-caa.d.ts +0 -45
  528. package/dist-pkg/ui/settings-caa.js +0 -137
  529. package/dist-pkg/ui/settings-motor.d.ts +0 -175
  530. package/dist-pkg/ui/settings-motor.js +0 -342
  531. package/dist-pkg/ui/webcam.d.ts +0 -7
  532. package/dist-pkg/ui/webcam.js +0 -93
@@ -1,140 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // render/city-tiles.ts — OS DOIS TILES DA CIDADE, como DADOS e não como PNG (pilar "arte = dados", ADR-0010).
3
- //
4
- // `tile_fill` e `tile_surface` eram dois PNG de 16×16 baixados por `carregarTilesDoTema`. Aqui eles voltam como
5
- // `PixelPainter` — a mesma forma que `render/city-tex` já usa para os pombos, os gatos e as silhuetas: uma
6
- // lista de retângulos `px(x, y, w, h, cor)`.
7
- //
8
- // POR QUE RETÂNGULOS E NÃO UMA REGRA DE ALVENARIA. A primeira tentativa foi inferir a regra (tijolo 7×6, junta
9
- // de 1 px, fiada alternada, bisel) e gerá-la. Deu 66% de acerto exato: a arte tem variação FEITA À MÃO — o
10
- // bisel muda de tijolo para tijolo, e nenhuma regra curta a alcança. A decomposição em retângulos custa 51 e
11
- // 62 chamadas e acerta 100%. Entre uma regra elegante que erra um quinto dos pixels e uma lista que acerta
12
- // todos, num tile de 16×16 desenhado à mão, a lista é a resposta honesta.
13
- //
14
- // O QUE ISSO COMPRA, além de tirar dois PNG do pacote: o desenho passa a ser recolorível (o alto contraste e
15
- // as paletas seguras para daltonismo mexem em cores, não em bitmaps), some o carregamento assíncrono — e com
16
- // ele a guarda de corrida de `set-cenario` e os 404 de boot dos temas que não têm arte própria.
17
- import { pixelCanvas } from './canvas.js';
18
- /** O TILE do miolo da parede: alvenaria em fiada alternada. 51 retângulos, 9 cores, fiel ao pixel. */
19
- export const paintTileFill = (px) => {
20
- px(0, 0, 1, 1, '#403b48');
21
- px(1, 0, 3, 1, '#b8b6c1');
22
- px(4, 0, 2, 1, '#bcbdc9');
23
- px(6, 0, 2, 1, '#828291');
24
- px(8, 0, 1, 1, '#403b48');
25
- px(9, 0, 1, 1, '#b1b0bc');
26
- px(10, 0, 4, 1, '#b8b6c1');
27
- px(14, 0, 2, 1, '#403b48');
28
- px(0, 1, 1, 1, '#b1b0bc');
29
- px(1, 1, 6, 5, '#828291');
30
- px(7, 1, 1, 4, '#403b48');
31
- px(8, 1, 1, 5, '#b8b6c1');
32
- px(9, 1, 6, 5, '#828291');
33
- px(15, 1, 1, 5, '#393543');
34
- px(0, 2, 1, 3, '#b8b6c1');
35
- px(0, 5, 1, 1, '#b1b0bc');
36
- px(7, 5, 1, 1, '#3e2e3f');
37
- px(0, 6, 1, 3, '#403b48');
38
- px(1, 6, 1, 1, '#777485');
39
- px(2, 6, 4, 1, '#828291');
40
- px(6, 6, 3, 3, '#403b48');
41
- px(9, 6, 5, 1, '#828291');
42
- px(14, 6, 2, 2, '#403b48');
43
- px(1, 7, 5, 1, '#403b48');
44
- px(9, 7, 5, 1, '#403b48');
45
- px(1, 8, 1, 1, '#b1b0bc');
46
- px(2, 8, 2, 1, '#b8b6c1');
47
- px(4, 8, 1, 1, '#bcbdc9');
48
- px(5, 8, 1, 1, '#b1b0bc');
49
- px(9, 8, 1, 1, '#b1b0bc');
50
- px(10, 8, 2, 1, '#b8b6c1');
51
- px(12, 8, 1, 1, '#bcbdc9');
52
- px(13, 8, 1, 1, '#b1b0bc');
53
- px(14, 8, 1, 1, '#403b48');
54
- px(15, 8, 1, 1, '#393543');
55
- px(0, 9, 1, 5, '#b1b0bc');
56
- px(1, 9, 6, 5, '#828291');
57
- px(7, 9, 1, 3, '#403b48');
58
- px(8, 9, 1, 5, '#b8b6c1');
59
- px(9, 9, 6, 5, '#828291');
60
- px(15, 9, 1, 2, '#403b48');
61
- px(15, 11, 1, 3, '#393543');
62
- px(7, 12, 1, 2, '#393543');
63
- px(0, 14, 1, 2, '#403b48');
64
- px(1, 14, 5, 1, '#828291');
65
- px(6, 14, 3, 2, '#403b48');
66
- px(9, 14, 5, 1, '#828291');
67
- px(14, 14, 2, 2, '#403b48');
68
- px(1, 15, 1, 1, '#444653');
69
- px(2, 15, 4, 1, '#403b48');
70
- px(9, 15, 5, 1, '#403b48');
71
- };
72
- /** O TILE do TOPO da plataforma: mesma alvenaria com a borda superior iluminada. 62 retângulos, 23 cores. */
73
- export const paintTileSurface = (px) => {
74
- px(0, 0, 1, 1, '#8b8994');
75
- px(1, 0, 3, 1, '#bbbac5');
76
- px(4, 0, 2, 1, '#bdbdc8');
77
- px(6, 0, 2, 1, '#a6a5b2');
78
- px(8, 0, 1, 1, '#8b8994');
79
- px(9, 0, 1, 1, '#b8b7c3');
80
- px(10, 0, 4, 1, '#bbbac5');
81
- px(14, 0, 2, 1, '#8b8994');
82
- px(0, 1, 1, 1, '#b6b5c1');
83
- px(1, 1, 6, 1, '#9b9aa8');
84
- px(7, 1, 1, 1, '#74717d');
85
- px(8, 1, 1, 1, '#bab8c3');
86
- px(9, 1, 6, 1, '#9b9aa8');
87
- px(15, 1, 1, 1, '#706e7a');
88
- px(0, 2, 1, 1, '#b9b7c2');
89
- px(1, 2, 6, 1, '#90909e');
90
- px(7, 2, 1, 1, '#5e5a66');
91
- px(8, 2, 1, 1, '#b9b7c2');
92
- px(9, 2, 6, 1, '#90909e');
93
- px(15, 2, 1, 1, '#585562');
94
- px(0, 3, 1, 2, '#b8b6c1');
95
- px(1, 3, 6, 3, '#828291');
96
- px(7, 3, 1, 2, '#403b48');
97
- px(8, 3, 1, 3, '#b8b6c1');
98
- px(9, 3, 6, 3, '#828291');
99
- px(15, 3, 1, 3, '#393543');
100
- px(0, 5, 1, 1, '#b1b0bc');
101
- px(7, 5, 1, 1, '#3e2e3f');
102
- px(0, 6, 1, 3, '#403b48');
103
- px(1, 6, 1, 1, '#777485');
104
- px(2, 6, 4, 1, '#828291');
105
- px(6, 6, 3, 3, '#403b48');
106
- px(9, 6, 5, 1, '#828291');
107
- px(14, 6, 2, 2, '#403b48');
108
- px(1, 7, 5, 1, '#403b48');
109
- px(9, 7, 5, 1, '#403b48');
110
- px(1, 8, 1, 1, '#b1b0bc');
111
- px(2, 8, 2, 1, '#b8b6c1');
112
- px(4, 8, 1, 1, '#bcbdc9');
113
- px(5, 8, 1, 1, '#b1b0bc');
114
- px(9, 8, 1, 1, '#b1b0bc');
115
- px(10, 8, 2, 1, '#b8b6c1');
116
- px(12, 8, 1, 1, '#bcbdc9');
117
- px(13, 8, 1, 1, '#b1b0bc');
118
- px(14, 8, 1, 1, '#403b48');
119
- px(15, 8, 1, 1, '#393543');
120
- px(0, 9, 1, 5, '#b1b0bc');
121
- px(1, 9, 6, 5, '#828291');
122
- px(7, 9, 1, 3, '#403b48');
123
- px(8, 9, 1, 5, '#b8b6c1');
124
- px(9, 9, 6, 5, '#828291');
125
- px(15, 9, 1, 2, '#403b48');
126
- px(15, 11, 1, 3, '#393543');
127
- px(7, 12, 1, 2, '#393543');
128
- px(0, 14, 1, 2, '#403b48');
129
- px(1, 14, 5, 1, '#828291');
130
- px(6, 14, 3, 2, '#403b48');
131
- px(9, 14, 5, 1, '#828291');
132
- px(14, 14, 2, 2, '#403b48');
133
- px(1, 15, 1, 1, '#444653');
134
- px(2, 15, 4, 1, '#403b48');
135
- px(9, 15, 5, 1, '#403b48');
136
- };
137
- /** Os dois tiles como canvas 16×16 — a forma que `worldCanvas` consumia das imagens carregadas. */
138
- export function cityTiles() {
139
- return { fill: pixelCanvas(16, 16, paintTileFill), surface: pixelCanvas(16, 16, paintTileSurface) };
140
- }
@@ -1,149 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- import type { PlayerView } from '../core/entity.js';
3
- import { type AnimPlayer, type Frame, type PlayerTextures } from './player-anim.js';
4
- import type { RenderizarEm } from './port.js';
5
- /** O que este módulo toca de um `PIXI.Graphics`. Superconjunto do `DrawGraphics` de wheelchair-sprites. */
6
- export interface GraphicsLike {
7
- clear(): unknown;
8
- lineStyle(width: number, color?: number, alpha?: number): unknown;
9
- beginFill(color: number, alpha?: number): unknown;
10
- endFill(): unknown;
11
- drawRect(x: number, y: number, w: number, h: number): unknown;
12
- moveTo(x: number, y: number): unknown;
13
- lineTo(x: number, y: number): unknown;
14
- drawCircle(x: number, y: number, r: number): unknown;
15
- }
16
- /** O sprite do personagem — só posição, escala, alpha, visibilidade e textura. */
17
- export interface PlayerSprite {
18
- x: number;
19
- y: number;
20
- alpha: number;
21
- visible: boolean;
22
- scale: {
23
- set(x: number, y: number): void;
24
- };
25
- texture: unknown;
26
- }
27
- /** `camera` (PIXI.Container): daqui só a posição importa; ela é passada opaca ao renderer. */
28
- export interface CameraLike {
29
- x: number;
30
- y: number;
31
- }
32
- /** `app.renderer` — só a passada em render-texture do caminho multi-tela. */
33
- /** O sprite de um item declarado: o mínimo que o desenho toca. */
34
- export interface ItemSprite {
35
- visible: boolean;
36
- alpha: number;
37
- }
38
- /**
39
- * Um power-up, do ponto de vista do DESENHO: um sprite, e nada mais.
40
- *
41
- * Era `extends Powerup`, importado de `game/powerups` — e esse `import type` era a ÚLTIMA aresta deste módulo
42
- * para o jogo. Tipo apagado em tempo de compilação não entra no pacote, é verdade; mas ele obriga o arquivo a
43
- * existir para o `tsc`, e obriga QUALQUER jogo a ter um power-up com aquela forma. O desenho toca `sprite` e
44
- * mais nada — declarar só isso é a fatia mínima, a mesma regra de `core/entity`.
45
- */
46
- interface PowerupWithSprite {
47
- sprite?: {
48
- visible: boolean;
49
- } | null;
50
- /**
51
- * ⚠️ `kind` NÃO é lido aqui — e entrou mesmo assim, em 2026-08-26. O desenho ENTREGA o power-up ao
52
- * `powerupVisibleTo` injetado, e é ele que lê o `kind` (a chave do portão é global; o resto é por
53
- * jogador). Uma fatia mínima descreve o que o módulo CONSOME; em posição de parâmetro ela precisa
54
- * descrever também o que ele ENTREGA, senão o callback real não cabe no ctx.
55
- *
56
- * É a quinta vez que esta forma aparece na árvore — `held` em audio-nav, `setSquash` na física, o
57
- * menu de pausa no gamepad, o `navPause` — e a lição é a mesma: repassar é uma exigência, não uma
58
- * leitura. A fatia continua mínima: dois campos, e nenhum tipo de `game/` importado.
59
- */
60
- kind: string;
61
- }
62
- /** O jogador, do ponto de vista do DESENHO (a animação usa `AnimPlayer`, do qual este é superconjunto). */
63
- /**
64
- * O jogador visto pelo DESENHO: tudo o que a animação lê, mais posição, dano e apresentação.
65
- * `sq`/`sqT` são o squash&stretch (amplitude e relógio, escritos por render/fx.setSquash); `easy` desenha a
66
- * hitbox de coleta tolerante translúcida; `viz` é o modo de visão, que recolore por viewport.
67
- */
68
- export type DrawPlayer = AnimPlayer & PlayerView<'i' | 'x' | 'y' | 'facing' | 'hurtTimer' | 'sq' | 'sqT' | 'easy' | 'visual' | 'sprite'>;
69
- /** Flags de Movimento Reduzido que o DESENHO consulta (o objeto `rm` do game.js tem mais chaves). */
70
- export interface ReducedMotion {
71
- items?: boolean;
72
- }
73
- export interface DrawCtx {
74
- /** Quantos jogadores/telas. Estado de RODADA (ADR-0038): vem da instância que a raiz possui.
75
- * Era `numPlayers`, um `let` de `core/state` importado como binding vivo — e um `let` de módulo
76
- * é compartilhado por qualquer segundo jogo que a mesma página carregue (D13 do `demos`). */
77
- getNumPlayers: () => number;
78
- /** Os jogadores. Estado de RODADA, pelo mesmo motivo. `readonly unknown[]` porque cada consumidor
79
- * estreita para a SUA fatia — o tipo real é do jogo, não da engine (ADR-0033). */
80
- getPlayers: () => readonly unknown[];
81
- camera: CameraLike;
82
- renderizarEm: RenderizarEm;
83
- caneLayer: GraphicsLike;
84
- chairLayer: GraphicsLike;
85
- /**
86
- * CAIXA DE COLISÃO do jogador (largura × altura, em px). ENTRA em vez de ser importada de `game/player`, e
87
- * isso não é política nova: `render/scene-city`, `render/scene-sky` e `platform/audio-nav` já a recebem
88
- * assim — este módulo é que tinha ficado para trás, sozinho na camada de render importando do jogo.
89
- *
90
- * Ela aparece em três lugares e sempre pela mesma razão: `pl.y` é o PÉ do jogador, e meia caixa acima é o
91
- * meio do corpo. É conhecimento de gênero — um top-down não ancora no pé, um quiz não tem corpo — e por
92
- * isso pertence a quem tem corpo, não a quem desenha.
93
- */
94
- BOX: {
95
- w: number;
96
- h: number;
97
- };
98
- easyHitbox: GraphicsLike;
99
- getVpTex(): unknown[];
100
- isWheelchair(): boolean;
101
- getFxClock(): number;
102
- getPowerups(): readonly PowerupWithSprite[];
103
- /**
104
- * Os sprites dos ITENS declarados, na ordem em que o jogo os declara. Era `getCoinSprites()`, importado de
105
- * `game/coin-spawning` — o desenho sabia que os itens são moedas.
106
- */
107
- getItemSprites(): readonly (ItemSprite | null | undefined)[];
108
- /** O item `j` aparece para o jogador `i`? Era `!cn.taken` — a regra "coletado some" é do jogo. */
109
- itemVisibleTo(j: number, playerIndex: number): boolean;
110
- /**
111
- * O item `j` é DESTE jogador? Era `cn.owner === i`, e o que o desenho faz com a resposta é esmaecer o item
112
- * alheio (lote C). A ideia de POSSE é do jogo: um cooperativo responde `true` sempre e ninguém esmaece nada.
113
- */
114
- itemOwnedBy(j: number, playerIndex: number): boolean;
115
- /**
116
- * O power-up `pu` aparece para o jogador `i`? Era `!puTaken(pu, i)`, que trazia a regra "chave é global,
117
- * o resto é por jogador" — uma frase sobre ESTE jogo, dentro do desenho.
118
- */
119
- powerupVisibleTo(pu: PowerupWithSprite, playerIndex: number): boolean;
120
- rm: ReducedMotion;
121
- WORLD_PX_W(): number;
122
- WORLD_PX_H(): number;
123
- caneOn(pl: DrawPlayer): boolean;
124
- updateParallax(camX: number, camY: number): void;
125
- drawElevators(): void;
126
- markSeen(camX: number, camY: number): void;
127
- redrawMinimapIfDirty(): void;
128
- drawMinimapPlayer(worldX: number, worldY: number): void;
129
- applySharedTextures(viz: string): void;
130
- renderVpOverlay(i: number, viz: string): void;
131
- playerVizTex(base: Frame, viz: string): unknown;
132
- updateGameHud(): void;
133
- playerTextures(): PlayerTextures;
134
- held(pl: AnimPlayer, act: string): boolean;
135
- }
136
- export interface DrawApi {
137
- /** Enquadra `pl`, aplica clamp+tremor+arredondamento e reposiciona o parallax.
138
- * `i` é o índice do jogador, e existe porque CADA JOGADOR TEM A SUA CÂMERA (ver `camDe`). */
139
- placeCam(pl: DrawPlayer, i?: number): {
140
- camX: number;
141
- camY: number;
142
- };
143
- /** Desenha o quadro inteiro (era `draw()` no game.js). */
144
- drawFrame(): void;
145
- /** Escolhe o quadro de animação de `pl` e o aplica no sprite (era a cauda do `stepPlayer`). */
146
- animatePlayer(pl: DrawPlayer, dt: number, dir: number): Frame;
147
- }
148
- export declare function initDraw(ctx: DrawCtx): DrawApi;
149
- export {};
@@ -1,231 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // render/draw.ts — O QUADRO. Onde a câmera para e o que é carimbado nela, uma vez por tick, depois que
3
- // `update()` já simulou o mundo. Extraído verbatim do game.js (`placeCam` + `draw`), mais a aplicação da
4
- // textura escolhida no sprite do jogador (a última linha do antigo `stepPlayer`).
5
- //
6
- // O QUE ENTROU
7
- // · `placeCam(pl)` — a câmera: enquadra o jogador, CLAMPA nas bordas do mundo, aplica o tremor de tela
8
- // (render/fx.shakeAmp) RE-CLAMPANDO (senão o tremor mostraria o vazio fora do mapa),
9
- // arredonda para pixel inteiro (o jogo é 320×180: meio pixel é tremulação) e
10
- // reposiciona o parallax. Devolve `{camX,camY}` PRÉ-arredondamento, que é o que o
11
- // minimapa usa para marcar o que já foi visto.
12
- // · `drawFrame()` — o quadro inteiro: transform dos sprites de jogador (squash&stretch com easing,
13
- // ancorado nos pés + piscada de dano), elevadores, partículas, bengala, cadeira de
14
- // rodas, hitbox tolerante do modo Fácil, e ENTÃO um dos DOIS caminhos de câmera
15
- // (tela única direta vs. multi-tela com uma render-texture por viewport), clima e HUD.
16
- // · `animatePlayer()` — chama a decisão de quadro (render/player-anim) e a aplica no sprite, passando pelo
17
- // recolor do modo de visão (`playerVizTex`).
18
- //
19
- // POR QUE A FRONTEIRA CAIU AQUI
20
- // `placeCam` e `draw` são inseparáveis: os DOIS caminhos de câmera do `draw` chamam `placeCam`, e o de
21
- // multi-tela depende do efeito colateral dela (mover `camera` antes de cada `renderer.render`). Separá-los
22
- // só produziria dois módulos que se importam. Já `animatePlayer` veio junto por outro motivo: a escolha do
23
- // quadro é pura e mora em render/player-anim.ts, mas APLICÁ-LA toca um `PIXI.Sprite` e o cache de recolor de
24
- // render/viewports — exatamente o tipo de coisa que este módulo já faz. Deixá-la no game.js manteria lá uma
25
- // linha órfã de render dentro de uma função de lógica de jogo.
26
- //
27
- // O QUE FICOU DE FORA, E POR QUÊ
28
- // · `configureRender()` — a MONTAGEM do multi-tela (criar/destruir as render-textures, os sprites de
29
- // viewport, as molduras e as bolinhas). É ciclo de vida do render-graph, não desenho de quadro; e vive
30
- // colada ao `app.renderer.resize` e ao HUD. Fica no game.js para uma rodada própria.
31
- // · `updateParallax()` — mexe nos `TilingSprite` criados no game.js e na decor de tela da v3; entra
32
- // injetada.
33
- // · `applySharedTextures()` (render/viz-setters) e `renderVpOverlay()` (render/viewports) — já são módulos;
34
- // entram injetados porque suas instâncias são criadas no game.js.
35
- // · A coleta de moedas, os power-ups e o portão que precediam a animação no `stepPlayer`: são LÓGICA DE
36
- // JOGO (dependem de `coins`, `powerups`, `gate`, quiz e HUD) e continuam no game.js.
37
- //
38
- // INJEÇÃO — a regra e as EXCEÇÕES conscientes
39
- // Vale a regra da casa: o que o game.js REATRIBUI entra por getter; o que é estável entra por valor. Daí
40
- // `getVpTex` (o `let vpTex` que `configureRender` troca a cada mudança de nº de telas), `isWheelchair`
41
- // (`let wheelchair`), `getFxClock` (`let fxClock`, o relógio do cintilar) e `getPowerups` (`let powerups`)
42
- // serem GETTERS. `rm` (o objeto de Movimento Reduzido) é `const` e mutado IN PLACE → entra por valor.
43
- //
44
- // EXCEÇÃO (desvio consciente da instrução de recorte, que pedia getters também para `numPlayers`, `coins` e
45
- // `players`): esses três são `export let` de core/state.ts, ou seja, BINDINGS VIVOS de ES Modules. Importá-los
46
- // aqui já entrega o valor atual a cada leitura — `setNumPlayersValue`/`setCoins` são vistos na hora, sem
47
- // getter. Getter aqui não acrescentaria correção, só uma indireção a mais e um ctx maior; e o precedente do
48
- // repositório é este (game/coin-spawning.ts importa `coins`+`setCoins` direto; game/physics.ts importa
49
- // `players`). A regra do getter vale para o que mora no ESCOPO PRIVADO do game.js, que módulo nenhum enxerga.
50
- //
51
- // PIXI POR INTERFACE ESTRUTURAL, não por `import * as PIXI` — mesmo precedente de render/viewports.ts e
52
- // render/scene-sky.ts. `camera`, `renderer`, as camadas de `Graphics` e os sprites entram como interfaces com
53
- // só os membros que este módulo toca, para o arquivo carregar no project `node` do Vitest.
54
- // Pelo mesmo motivo, os colaboradores que importam PIXI (game/level-geometry.drawElevators,
55
- // render/minimap.*) entram por closure em vez de import: o game.js já tem as camadas deles em mão.
56
- // São importados direto só os módulos-folha node-safe: constantes, RNG, render/fx, render/wheelchair-sprites,
57
- // render/viz-modes, game/powerups, game/coin-spawning e core/state.
58
- //
59
- // ORDEM DE BOOT: `initDraw` não faz I/O nem toca o render-graph — só fecha closures. Pode ser chamada em
60
- // qualquer ponto do game.js posterior às camadas de `Graphics`, à `camera` e ao `app`; o resto do ctx é
61
- // função e resolve tarde. Ver docs/5-Refactoring/plano-modularizacao-mapa.md (C1).
62
- import { LOGICAL_W, LOGICAL_H, EASY } from '../core/constants.js';
63
- // A corrente da DECORACAO, nao a do jogo: uma particula sorteada aqui nao pode mover o sorteio
64
- // das moedas. Ver o cabecalho de core/rng.ts (issue #107).
65
- import { rngDecoracao } from '../core/rng.js';
66
- const rnd = rngDecoracao.rnd;
67
- import { JUICE, easeOut3, shakeAmp, drawFx } from './fx.js';
68
- import { criarCamera } from './camera.js';
69
- import { drawCane, drawRunCane, drawChair } from './wheelchair-sprites.js';
70
- import { chaveDeTextura, ehBaixaVisao } from './viz-axes.js';
71
- // (`game/powerups` e `game/coin-spawning` SAÍRAM daqui no item 19 — ver o bloco "ITENS DECLARADOS" abaixo.)
72
- import { drawWeather } from './weather.js';
73
- import { choosePlayerFrame } from './player-anim.js';
74
- export function initDraw(ctx) {
75
- /* ===================== câmera ===================== */
76
- // A CONTA saiu para `render/camera` (item 22: M1 extraiu as fórmulas, M2 as embrulhou num OBJETO). Aqui
77
- // ficou o CARIMBO dela no render-graph: o sorteio do tremor, a escrita no container e o aviso ao parallax.
78
- //
79
- // ========================= UMA CÂMERA POR JOGADOR, E POR QUÊ AGORA =========================
80
- // O caminho multi-tela chama `placeCam(PLS[i])` para CADA jogador dentro do MESMO quadro. Com uma câmera
81
- // só, a posição do jogador i entraria como ponto de partida da do jogador i+1. Hoje isso não daria em
82
- // nada — com zona-morta 0×0 a câmera é sem memória e `seguir` equivale a `enquadrar`, letra por letra
83
- // (`tests/camera.node.test.js` prende essa igualdade). No dia em que a zona deixar de ser zero, daria: as
84
- // câmeras dos jogadores se puxariam. É mais barato separar antes de o defeito existir do que depois, e
85
- // separar agora não muda um pixel do que a criança vê.
86
- //
87
- // ⚠️ `pular()` AINDA NÃO TEM CHAMADOR. Ele é para nascer/renascer/trocar de fase, e enquanto a zona é zero
88
- // não faz falta nenhuma — `seguir` já centra. Quando o Dev escolher uma zona, o nascimento sem `pular`
89
- // aparece como um deslize da câmera até o jogador no primeiro quadro da fase. Fica anotado aqui, e não
90
- // fingido de resolvido.
91
- const cams = new Map();
92
- const camDe = (i) => {
93
- let c = cams.get(i);
94
- if (!c) {
95
- c = criarCamera({ w: ctx.WORLD_PX_W(), h: ctx.WORLD_PX_H() }, { w: LOGICAL_W, h: LOGICAL_H });
96
- cams.set(i, c);
97
- }
98
- // O mundo muda de tamanho ao trocar de fase, e a câmera não é avisada por ninguém — reprender todo quadro
99
- // custa duas contas e dispensa um evento que hoje não existe.
100
- else
101
- c.redimensionar({ w: ctx.WORLD_PX_W(), h: ctx.WORLD_PX_H() }, { w: LOGICAL_W, h: LOGICAL_H });
102
- return c;
103
- };
104
- function placeCam(pl, i = 0) {
105
- const c = camDe(i);
106
- // `pl.y` é o PÉ do jogador; o meio do corpo fica meia caixa acima. Esta conversão é a única coisa de
107
- // PLATAFORMA que havia no enquadramento, e agora ela mora aqui, onde o corpo existe — e não na câmera.
108
- c.seguir(pl.x, pl.y - ctx.BOX.h / 2);
109
- const k = shakeAmp(); // JUICE: tremor decai linearmente (render/fx)
110
- // Os dois sorteios ficam DENTRO do `if`, como no original: com `k === 0` ele não chamava `rnd()`, e
111
- // chamá-lo duas vezes por quadro deslocaria o fluxo do gerador COMPARTILHADO — mesma semente, outro jogo.
112
- const cam = k > 0 ? c.quadro(k, rnd() * 2 - 1, rnd() * 2 - 1) : c.base;
113
- ctx.camera.x = -Math.round(cam.camX);
114
- ctx.camera.y = -Math.round(cam.camY);
115
- ctx.updateParallax(cam.camX, cam.camY);
116
- return cam;
117
- }
118
- /* ===================== animação do personagem ===================== */
119
- function animatePlayer(pl, dt, dir) {
120
- const tx = choosePlayerFrame(pl, {
121
- dt, dir, wheelchair: ctx.isWheelchair(), held: ctx.held, rnd, tex: ctx.playerTextures(),
122
- });
123
- // solo/default; no MP o drawFrame troca a textura por viewport (applySharedTextures)
124
- // ⚠️ `chaveDeTextura` E NÃO A ASSINATURA DE `playerVizTex`. Medido na etapa 0 da #104: aquela função só
125
- // age quando existe `DIRECT_CFG[mode]`, e devolve a textura como veio para todo o resto. Então o que
126
- // muda é o CHAMADOR — a metade do estado que interessa à textura — e a porta fica onde estava.
127
- if (pl.sprite)
128
- pl.sprite.texture = ctx.playerVizTex(tx, chaveDeTextura(pl.visual));
129
- return tx;
130
- }
131
- /* ===================== o quadro ===================== */
132
- function drawFrame() {
133
- const PLS = ctx.getPlayers();
134
- for (const pl of PLS) {
135
- if (!pl.sprite)
136
- continue;
137
- pl.sprite.x = pl.x;
138
- pl.sprite.y = pl.y + 1;
139
- // JUICE: squash&stretch com easing, ancorado nos pés
140
- const q = (JUICE.squash && !pl.rmWalk && (pl.sqT || 0) > 0) ? (pl.sq || 0) * easeOut3((pl.sqT || 0) / 8) : 0;
141
- // sem escala procedural de respiração (parecia mastigar) — respiração é por FRAMES
142
- pl.sprite.scale.set((pl.facing < 0 ? -1 : 1) * (1 - q * 0.7), 1 + q);
143
- pl.sprite.alpha = pl.hurtTimer > 0 ? (Math.floor(pl.hurtTimer / 4) % 2 ? 0.4 : 1) : 1;
144
- }
145
- ctx.drawElevators(); // cadeirante: plataforma do elevador sob os pés (largo/fino)
146
- drawFx(); // JUICE: partículas (poeira/brilhos) na camada acima dos players
147
- const shimOn = JUICE.shimmer && !ctx.rm.items; // JUICE: cintilar dos itens (respeita Movimento Reduzido)
148
- const fxClock = ctx.getFxClock();
149
- // modo cego: bengala SÓ andando (corrida = bengala de roda); nada parado/nadando/voando/escada
150
- ctx.caneLayer.clear();
151
- for (const pl of PLS) {
152
- if (!ctx.caneOn(pl) || !pl.sprite || !pl.sprite.visible)
153
- continue;
154
- if (pl.running)
155
- drawRunCane(ctx.caneLayer, pl);
156
- else if (pl.walking)
157
- drawCane(ctx.caneLayer, pl);
158
- }
159
- // cadeirante: desenha a cadeira nos jogadores (exceto nadando/voando)
160
- ctx.chairLayer.clear();
161
- if (ctx.isWheelchair()) {
162
- for (const pl of PLS) {
163
- if (pl.sprite && pl.sprite.visible && !pl.inWater && !pl.flying)
164
- drawChair(ctx.chairLayer, pl);
165
- }
166
- }
167
- // Fácil: hitbox de coleta tolerante (retângulo translúcido) — só para os jogadores em Fácil
168
- ctx.easyHitbox.clear();
169
- const pad = EASY.pad;
170
- for (const pl of PLS) {
171
- if (!pl.easy)
172
- continue;
173
- ctx.easyHitbox.lineStyle(1, 0xffffff, 0.45);
174
- ctx.easyHitbox.beginFill(0xffffff, 0.10);
175
- ctx.easyHitbox.drawRect(pl.x - ctx.BOX.w / 2 - pad, pl.y - ctx.BOX.h - pad, ctx.BOX.w + 2 * pad, ctx.BOX.h + 2 * pad);
176
- ctx.easyHitbox.endFill();
177
- }
178
- if (ctx.getNumPlayers() <= 1) {
179
- // O CINTILAR fica: é juice da engine (render/fx), e vale para moeda, estrela ou peça de tabuleiro.
180
- const itens = ctx.getItemSprites();
181
- for (let j = 0; j < itens.length; j++) {
182
- const s = itens[j];
183
- if (s)
184
- s.alpha = shimOn ? 0.8 + 0.2 * Math.sin(fxClock * 0.12 + j * 1.7) : 1;
185
- }
186
- const { camX, camY } = placeCam(PLS[0]);
187
- ctx.markSeen(camX, camY);
188
- ctx.redrawMinimapIfDirty();
189
- ctx.drawMinimapPlayer(PLS[0].x, PLS[0].y - ctx.BOX.h / 2);
190
- }
191
- else {
192
- // Otimização: se TODOS estão no mesmo modo (caso comum), troca as texturas UMA vez; senão, por viewport.
193
- // ⚠️ A COMPARAÇÃO PASSOU A SER PELA CHAVE DE TEXTURA, e isso é output-preservador e mais barato ao
194
- // mesmo tempo. `applySharedTextures` só usa o modo para escolher TEXTURA (`worldTexFor`,
195
- // `parallaxTexFor`, `treeTexFor`, `spriteTexFor`, `pupTexFor`), e todas devolvem a base para o que não
196
- // está em `DIRECT_CFG` — conferido em `high-contrast.worldTexFor`. Antes, dois jogadores em `normal` e
197
- // `fix-deuter` contavam como modos DIFERENTES e disparavam uma re-aplicação de texturas que produzia
198
- // exactamente as mesmas texturas. Agora contam como iguais, porque para a textura eles são.
199
- const v0 = chaveDeTextura(PLS[0].visual);
200
- const allSame = PLS.every((p) => chaveDeTextura(p.visual) === v0);
201
- const anyOverlay = PLS.some((p) => ehBaixaVisao(p.visual));
202
- if (allSame)
203
- ctx.applySharedTextures(v0);
204
- for (let i = 0, n = ctx.getNumPlayers(); i < n; i++) {
205
- const viz = chaveDeTextura(PLS[i].visual);
206
- if (!allSame)
207
- ctx.applySharedTextures(viz); // só troca por viewport quando os modos diferem
208
- const itens2 = ctx.getItemSprites();
209
- for (let j = 0; j < itens2.length; j++) {
210
- const s = itens2[j];
211
- if (!s)
212
- continue;
213
- s.visible = ctx.itemVisibleTo(j, i);
214
- // Lote C: item alheio esmaecido — quem é "alheio" é o jogo que diz; JUICE: cintilar multiplicativo
215
- s.alpha = (ctx.itemOwnedBy(j, i) ? 1 : 0.4) * (shimOn ? 0.8 + 0.2 * Math.sin(fxClock * 0.12 + j * 1.7) : 1);
216
- }
217
- for (const pu of ctx.getPowerups()) {
218
- if (pu.sprite)
219
- pu.sprite.visible = ctx.powerupVisibleTo(pu, i);
220
- }
221
- placeCam(PLS[i], i);
222
- ctx.renderizarEm(ctx.camera, ctx.getVpTex()[i], true); // LIMPA: cada quadro é um quadro, não um acúmulo
223
- if (anyOverlay)
224
- ctx.renderVpOverlay(i, viz); // passada extra só se algum jogador está em baixa visão
225
- }
226
- }
227
- drawWeather(); // chuva/clarão em tela-espaço, sobre tudo
228
- ctx.updateGameHud(); // HUD por jogador (moedas + poder) em DOM sobreposto (alta definição)
229
- }
230
- return { placeCam, drawFrame, animatePlayer };
231
- }
@@ -1,63 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- export interface Particle {
3
- x: number;
4
- y: number;
5
- vx: number;
6
- vy: number;
7
- life: number;
8
- max: number;
9
- color: number;
10
- size: number;
11
- g: number;
12
- }
13
- export interface JuiceFlags {
14
- dust: boolean;
15
- sparkle: boolean;
16
- squash: boolean;
17
- hitstop: boolean;
18
- shake: boolean;
19
- shimmer: boolean;
20
- }
21
- /** Juice toggles (persisted in localStorage; edited in the ?debug panel + Sensibilidade → Movimento). */
22
- export declare const JUICE: JuiceFlags;
23
- export declare function saveJuice(): void;
24
- /** Standard easing (squash recovery, particle fade). Shared → exported (game.js render reads it too). */
25
- export declare const easeOut3: (t: number) => number;
26
- /** Minimal PIXI.Graphics surface drawFx needs (kept structural so the module stays PIXI-free for node tests). */
27
- interface FxGraphics {
28
- clear(): void;
29
- beginFill(color: number, alpha?: number): unknown;
30
- drawRect(x: number, y: number, w: number, h: number): unknown;
31
- endFill(): unknown;
32
- }
33
- interface ReducedMotion {
34
- particles?: boolean;
35
- parallax?: boolean;
36
- }
37
- interface Squashable {
38
- rmWalk?: boolean;
39
- sq?: number;
40
- sqT?: number;
41
- }
42
- export declare function initFx(deps: {
43
- fxG: FxGraphics;
44
- rm: ReducedMotion;
45
- getPlayers: () => readonly unknown[];
46
- }): void;
47
- export declare function spawnParticle(x: number, y: number, vx: number, vy: number, life: number, color: number, size: number, grav?: number): void;
48
- export declare function puffDust(x: number, y: number, n: number): void;
49
- export declare function burstSparkle(x: number, y: number, color?: number, n?: number): void;
50
- export declare function addShake(mag: number, dur: number): void;
51
- export declare function addHitstop(t: number): void;
52
- export declare function setSquash(pl: Squashable, amt: number): void;
53
- /** Advance particles + decay shake/squash. (fxClock is stepped by game.js — see header.) */
54
- export declare function stepFx(dt: number): void;
55
- export declare function drawFx(): void;
56
- /** Decrement hit-stop and report whether the world is still frozen (game.js early-returns on true). */
57
- export declare function tickHitstop(dt: number): boolean;
58
- /** Current screen-shake amplitude (0 = none); the camera applies the random jitter. */
59
- export declare function shakeAmp(): number;
60
- export declare const getParticles: () => Particle[];
61
- export declare const getHitstopT: () => number;
62
- export declare const getShakeT: () => number;
63
- export {};