@auraindustry/aurajs 0.0.7 → 0.1.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 (334) hide show
  1. package/README.md +98 -2
  2. package/benchmarks/perf-thresholds.json +54 -0
  3. package/package.json +4 -7
  4. package/src/asset-pack.mjs +5 -1
  5. package/src/authored-project.mjs +1449 -0
  6. package/src/authored-runtime.mjs +2016 -0
  7. package/src/authoring/avatar-animation-graph.mjs +648 -0
  8. package/src/bin-integrity.mjs +272 -0
  9. package/src/build-contract/assets.mjs +130 -0
  10. package/src/build-contract/capabilities.mjs +116 -0
  11. package/src/build-contract/constants.mjs +6 -0
  12. package/src/build-contract/helpers.mjs +44 -0
  13. package/src/build-contract/web-templates.mjs +5993 -0
  14. package/src/build-contract.mjs +27 -2910
  15. package/src/bundler.mjs +188 -55
  16. package/src/cli.mjs +4825 -1512
  17. package/src/commands/project-authoring.mjs +434 -0
  18. package/src/config.mjs +27 -0
  19. package/src/conformance/cases/app-and-ui-runtime-cases.mjs +3309 -0
  20. package/src/conformance/cases/core-runtime-cases.mjs +1431 -0
  21. package/src/conformance/cases/index.mjs +11 -0
  22. package/src/conformance/cases/scene3d-and-media-cases.mjs +2094 -0
  23. package/src/conformance/cases/systems-and-gameplay-cases.mjs +1776 -0
  24. package/src/conformance/shared.mjs +27 -0
  25. package/src/conformance-runner.mjs +25 -13
  26. package/src/conformance.mjs +619 -4020
  27. package/src/cutscene.mjs +362 -5
  28. package/src/dev-cli-action.mjs +249 -0
  29. package/src/dev-cli-inspect.mjs +92 -0
  30. package/src/dev-cli-state.mjs +80 -0
  31. package/src/external-asset-cache.mjs +587 -0
  32. package/src/external-asset-policy.mjs +217 -0
  33. package/src/external-package-surface.mjs +206 -0
  34. package/src/game-action-runtime.mjs +869 -0
  35. package/src/game-state-runtime.mjs +206 -6
  36. package/src/headless-action.mjs +186 -0
  37. package/src/headless-test/runtime-animation.mjs +1173 -0
  38. package/src/headless-test/runtime-coordinator.mjs +1514 -0
  39. package/src/headless-test/runtime-primitives.mjs +320 -0
  40. package/src/headless-test/runtime-world.mjs +2253 -0
  41. package/src/headless-test.mjs +392 -4298
  42. package/src/host-binary.mjs +342 -14
  43. package/src/icon-discovery.mjs +64 -0
  44. package/src/make-catalog.mjs +109 -0
  45. package/src/make.mjs +197 -0
  46. package/src/package-integrity.mjs +586 -0
  47. package/src/perf-benchmark.mjs +353 -0
  48. package/src/postinstall.mjs +5 -5
  49. package/src/prefabs/index.mjs +34 -0
  50. package/src/prefabs/scene-serialization.mjs +184 -0
  51. package/src/project-importer.mjs +620 -0
  52. package/src/project-registry.mjs +24 -0
  53. package/src/publish-command.mjs +195 -0
  54. package/src/publish-env-example.mjs +83 -0
  55. package/src/publish-validation.mjs +708 -0
  56. package/src/retro/assets/compile.mjs +232 -0
  57. package/src/retro/backend-gba/authoring.mjs +1029 -0
  58. package/src/retro/backend-gba/rom.mjs +363 -0
  59. package/src/retro/backend-gbc/rom.mjs +85 -0
  60. package/src/retro/build.mjs +278 -0
  61. package/src/retro/cli/commands.mjs +292 -0
  62. package/src/retro/cli/templates.mjs +84 -0
  63. package/src/retro/diagnostics/catalog.mjs +110 -0
  64. package/src/retro/diagnostics/emit.mjs +72 -0
  65. package/src/retro/emulator/case-overlay.mjs +64 -0
  66. package/src/retro/emulator/discovery.mjs +158 -0
  67. package/src/retro/emulator/macos-case-overlay.swift +220 -0
  68. package/src/retro/emulator/profiles.mjs +146 -0
  69. package/src/retro/emulator/runner.mjs +289 -0
  70. package/src/retro/frontend/load-project.mjs +98 -0
  71. package/src/retro/index.mjs +30 -0
  72. package/src/retro/ir/build-ir.mjs +108 -0
  73. package/src/retro/runtime-gba/contract.mjs +151 -0
  74. package/src/retro/runtime-gbc/contract.mjs +117 -0
  75. package/src/retro/shared/span.mjs +26 -0
  76. package/src/retro/shared/targets.mjs +64 -0
  77. package/src/retro/validator/check-project.mjs +114 -0
  78. package/src/runtime-hotspot-audit.mjs +707 -0
  79. package/src/scaffold/config.mjs +1000 -0
  80. package/src/scaffold/fs.mjs +56 -0
  81. package/src/scaffold/layout.mjs +318 -0
  82. package/src/scaffold/project-docs.mjs +438 -0
  83. package/src/scaffold.mjs +93 -596
  84. package/src/scene-composition/index.mjs +326 -0
  85. package/src/scene-composition/runtime.mjs +751 -0
  86. package/src/self-hosted-assets.mjs +604 -0
  87. package/src/session-client.mjs +750 -0
  88. package/src/session-native-launcher.mjs +74 -0
  89. package/src/session-protocol.mjs +75 -0
  90. package/src/session-runtime.mjs +321 -0
  91. package/src/session-server.mjs +360 -0
  92. package/src/shader-kits/index.mjs +773 -0
  93. package/src/starter-content-registry.mjs +292 -0
  94. package/src/state-artifacts.mjs +662 -24
  95. package/src/state-dev-reload.mjs +99 -2
  96. package/src/terminal-ui.mjs +245 -0
  97. package/src/web-conformance.mjs +219 -0
  98. package/templates/create/2d/config/gameplay/shooter.config.js +26 -0
  99. package/templates/create/2d/content/gameplay/waves.json +26 -0
  100. package/templates/create/2d/content/registries/.gitkeep +1 -0
  101. package/templates/create/2d/docs/design/.gitkeep +1 -0
  102. package/templates/create/2d/docs/design/loop.md +5 -0
  103. package/templates/create/2d/prefabs/enemies.prefab.js +90 -0
  104. package/templates/create/2d/prefabs/enemy-basic.prefab.js +18 -0
  105. package/templates/create/2d/prefabs/player.prefab.js +36 -0
  106. package/templates/create/2d/prefabs/projectiles.prefab.js +35 -0
  107. package/templates/create/2d/scenes/boot.scene.js +12 -0
  108. package/templates/create/2d/scenes/gameplay.scene.js +230 -0
  109. package/templates/create/2d/scenes/menu.scene.js +9 -0
  110. package/templates/create/2d/src/main.js +6 -185
  111. package/templates/create/2d/src/runtime/app.js +49 -0
  112. package/templates/create/2d/src/runtime/capabilities.js +35 -0
  113. package/templates/create/2d/ui/hud.screen.js +40 -0
  114. package/templates/create/2d/ui/pause.screen.js +149 -0
  115. package/templates/create/2d/ui/settings.screen.js +347 -0
  116. package/templates/create/2d/ui/title.screen.js +13 -0
  117. package/templates/create/2d-adventure/aura.config.json +28 -0
  118. package/templates/create/2d-adventure/config/gameplay/adventure.config.js +14 -0
  119. package/templates/create/2d-adventure/content/gameplay/world.js +46 -0
  120. package/templates/create/2d-adventure/content/registries/.gitkeep +1 -0
  121. package/templates/create/2d-adventure/docs/design/loop.md +5 -0
  122. package/templates/create/2d-adventure/prefabs/player.prefab.js +54 -0
  123. package/templates/create/2d-adventure/prefabs/relic.prefab.js +38 -0
  124. package/templates/create/2d-adventure/prefabs/world.prefab.js +125 -0
  125. package/templates/create/2d-adventure/scenes/gameplay.scene.js +256 -0
  126. package/templates/create/2d-adventure/src/runtime/capabilities.js +34 -0
  127. package/templates/create/2d-adventure/ui/hud.screen.js +60 -0
  128. package/templates/create/2d-survivor/config/gameplay/survivor.config.js +33 -0
  129. package/templates/create/2d-survivor/content/gameplay/spawn-zones.json +29 -0
  130. package/templates/create/2d-survivor/content/registries/.gitkeep +1 -0
  131. package/templates/create/2d-survivor/docs/design/.gitkeep +1 -0
  132. package/templates/create/2d-survivor/docs/design/loop.md +5 -0
  133. package/templates/create/2d-survivor/prefabs/enemies.prefab.js +178 -0
  134. package/templates/create/2d-survivor/prefabs/enemy-swarm.prefab.js +18 -0
  135. package/templates/create/2d-survivor/prefabs/player.prefab.js +42 -0
  136. package/templates/create/2d-survivor/prefabs/projectiles.prefab.js +56 -0
  137. package/templates/create/2d-survivor/scenes/boot.scene.js +12 -0
  138. package/templates/create/2d-survivor/scenes/gameplay.scene.js +314 -0
  139. package/templates/create/2d-survivor/scenes/menu.scene.js +9 -0
  140. package/templates/create/2d-survivor/src/main.js +5 -332
  141. package/templates/create/2d-survivor/src/runtime/app.js +49 -0
  142. package/templates/create/2d-survivor/src/runtime/capabilities.js +35 -0
  143. package/templates/create/2d-survivor/ui/hud.screen.js +45 -0
  144. package/templates/create/2d-survivor/ui/title.screen.js +13 -0
  145. package/templates/create/3d/assets/models/starter-avatar.gltf +184 -0
  146. package/templates/create/3d/config/gameplay/.gitkeep +1 -0
  147. package/templates/create/3d/content/gameplay/checkpoints.json +33 -0
  148. package/templates/create/3d/content/gameplay/course.js +40 -0
  149. package/templates/create/3d/content/registries/.gitkeep +1 -0
  150. package/templates/create/3d/docs/design/.gitkeep +1 -0
  151. package/templates/create/3d/docs/design/loop.md +5 -0
  152. package/templates/create/3d/prefabs/checkpoint.prefab.js +15 -0
  153. package/templates/create/3d/prefabs/player.prefab.js +204 -0
  154. package/templates/create/3d/prefabs/world.prefab.js +112 -0
  155. package/templates/create/3d/scenes/boot.scene.js +12 -0
  156. package/templates/create/3d/scenes/checkpoint.scene.js +9 -0
  157. package/templates/create/3d/scenes/gameplay.scene.js +292 -0
  158. package/templates/create/3d/src/main.js +6 -295
  159. package/templates/create/3d/src/runtime/app.js +49 -0
  160. package/templates/create/3d/src/runtime/capabilities.js +53 -0
  161. package/templates/create/3d/src/runtime/materials.js +34 -0
  162. package/templates/create/3d/src/runtime/state.js +39 -0
  163. package/templates/create/3d/ui/hud.screen.js +75 -0
  164. package/templates/create/3d/ui/pause.screen.js +166 -0
  165. package/templates/create/3d/ui/settings.screen.js +387 -0
  166. package/templates/create/3d-adventure/assets/models/starter-avatar.gltf +184 -0
  167. package/templates/create/3d-adventure/aura.config.json +28 -0
  168. package/templates/create/3d-adventure/config/gameplay/adventure.config.js +9 -0
  169. package/templates/create/3d-adventure/content/gameplay/course.js +62 -0
  170. package/templates/create/3d-adventure/content/registries/.gitkeep +1 -0
  171. package/templates/create/3d-adventure/docs/design/loop.md +5 -0
  172. package/templates/create/3d-adventure/prefabs/player.prefab.js +168 -0
  173. package/templates/create/3d-adventure/prefabs/relic.prefab.js +35 -0
  174. package/templates/create/3d-adventure/prefabs/world.prefab.js +119 -0
  175. package/templates/create/3d-adventure/scenes/gameplay.scene.js +358 -0
  176. package/templates/create/3d-adventure/src/runtime/capabilities.js +56 -0
  177. package/templates/create/3d-adventure/src/runtime/materials.js +39 -0
  178. package/templates/create/3d-adventure/src/runtime/state.js +31 -0
  179. package/templates/create/3d-adventure/ui/hud.screen.js +70 -0
  180. package/templates/create/3d-adventure/ui/pause.screen.js +437 -0
  181. package/templates/create/3d-collectathon/assets/models/starter-avatar.gltf +184 -0
  182. package/templates/create/3d-collectathon/config/gameplay/.gitkeep +1 -0
  183. package/templates/create/3d-collectathon/content/gameplay/collectibles.json +26 -0
  184. package/templates/create/3d-collectathon/content/gameplay/course.js +46 -0
  185. package/templates/create/3d-collectathon/content/registries/.gitkeep +1 -0
  186. package/templates/create/3d-collectathon/docs/design/.gitkeep +1 -0
  187. package/templates/create/3d-collectathon/docs/design/loop.md +5 -0
  188. package/templates/create/3d-collectathon/prefabs/collectible.prefab.js +15 -0
  189. package/templates/create/3d-collectathon/prefabs/player.prefab.js +207 -0
  190. package/templates/create/3d-collectathon/prefabs/world.prefab.js +112 -0
  191. package/templates/create/3d-collectathon/scenes/boot.scene.js +12 -0
  192. package/templates/create/3d-collectathon/scenes/checkpoint.scene.js +9 -0
  193. package/templates/create/3d-collectathon/scenes/gameplay.scene.js +200 -0
  194. package/templates/create/3d-collectathon/src/main.js +5 -355
  195. package/templates/create/3d-collectathon/src/runtime/app.js +49 -0
  196. package/templates/create/3d-collectathon/src/runtime/capabilities.js +53 -0
  197. package/templates/create/3d-collectathon/src/runtime/materials.js +34 -0
  198. package/templates/create/3d-collectathon/src/runtime/state.js +27 -0
  199. package/templates/create/3d-collectathon/ui/hud.screen.js +66 -0
  200. package/templates/create/3d-collectathon/ui/pause.screen.js +13 -0
  201. package/templates/create/blank/config/gameplay/.gitkeep +1 -0
  202. package/templates/create/blank/content/gameplay/.gitkeep +1 -0
  203. package/templates/create/blank/content/registries/.gitkeep +1 -0
  204. package/templates/create/blank/docs/design/.gitkeep +1 -0
  205. package/templates/create/blank/docs/design/loop.md +5 -0
  206. package/templates/create/blank/prefabs/.gitkeep +1 -0
  207. package/templates/create/blank/scenes/.gitkeep +1 -0
  208. package/templates/create/blank/src/runtime/.gitkeep +1 -0
  209. package/templates/create/blank/ui/.gitkeep +1 -0
  210. package/templates/create/deckbuilder-2d/assets/audio/.gitkeep +1 -0
  211. package/templates/create/deckbuilder-2d/assets/fonts/.gitkeep +1 -0
  212. package/templates/create/deckbuilder-2d/assets/sprites/.gitkeep +1 -0
  213. package/templates/create/deckbuilder-2d/assets/starter/README.md +11 -0
  214. package/templates/create/deckbuilder-2d/assets/ui/.gitkeep +1 -0
  215. package/templates/create/deckbuilder-2d/aura.config.json +28 -0
  216. package/templates/create/deckbuilder-2d/config/gameplay/deckbuilder.config.js +26 -0
  217. package/templates/create/deckbuilder-2d/content/cards/guard.card.js +19 -0
  218. package/templates/create/deckbuilder-2d/content/cards/spark.card.js +20 -0
  219. package/templates/create/deckbuilder-2d/content/cards/starter.deck.js +69 -0
  220. package/templates/create/deckbuilder-2d/content/cards/strike.card.js +19 -0
  221. package/templates/create/deckbuilder-2d/content/cards/survey.card.js +20 -0
  222. package/templates/create/deckbuilder-2d/content/encounters/training-battle.encounter.js +14 -0
  223. package/templates/create/deckbuilder-2d/content/encounters/training-battle.js +65 -0
  224. package/templates/create/deckbuilder-2d/content/enemies/training-automaton.enemy.js +48 -0
  225. package/templates/create/deckbuilder-2d/content/gameplay/.gitkeep +1 -0
  226. package/templates/create/deckbuilder-2d/content/registries/cards.registry.js +26 -0
  227. package/templates/create/deckbuilder-2d/content/registries/encounters.registry.js +20 -0
  228. package/templates/create/deckbuilder-2d/content/registries/enemies.registry.js +20 -0
  229. package/templates/create/deckbuilder-2d/content/registries/relics.registry.js +20 -0
  230. package/templates/create/deckbuilder-2d/content/relics/ember-charm.relic.js +18 -0
  231. package/templates/create/deckbuilder-2d/docs/design/loop.md +12 -0
  232. package/templates/create/deckbuilder-2d/prefabs/.gitkeep +1 -0
  233. package/templates/create/deckbuilder-2d/scenes/boot.scene.js +84 -0
  234. package/templates/create/deckbuilder-2d/scenes/gameplay.scene.js +641 -0
  235. package/templates/create/deckbuilder-2d/src/components/.gitkeep +1 -0
  236. package/templates/create/deckbuilder-2d/src/main.js +17 -0
  237. package/templates/create/deckbuilder-2d/src/runtime/capabilities.js +22 -0
  238. package/templates/create/deckbuilder-2d/src/shared/.gitkeep +1 -0
  239. package/templates/create/deckbuilder-2d/src/systems/.gitkeep +1 -0
  240. package/templates/create/deckbuilder-2d/tests/smoke/.gitkeep +1 -0
  241. package/templates/create/deckbuilder-2d/ui/hud.screen.js +80 -0
  242. package/templates/create/deckbuilder-2d/ui/pause.screen.js +146 -0
  243. package/templates/create/deckbuilder-2d/ui/settings.screen.js +342 -0
  244. package/templates/create/local-multiplayer/aura.config.json +40 -0
  245. package/templates/create/local-multiplayer/config/gameplay/local-multiplayer.config.js +26 -0
  246. package/templates/create/local-multiplayer/content/gameplay/room-layout.js +13 -0
  247. package/templates/create/local-multiplayer/content/registries/.gitkeep +1 -0
  248. package/templates/create/local-multiplayer/docs/design/loop.md +14 -0
  249. package/templates/create/local-multiplayer/prefabs/player.prefab.js +99 -0
  250. package/templates/create/local-multiplayer/scenes/boot.scene.js +12 -0
  251. package/templates/create/local-multiplayer/scenes/gameplay.scene.js +443 -0
  252. package/templates/create/local-multiplayer/src/main.js +17 -0
  253. package/templates/create/local-multiplayer/src/runtime/capabilities.js +28 -0
  254. package/templates/create/local-multiplayer/ui/hud.screen.js +60 -0
  255. package/templates/create/shared/src/runtime/project-inspector.js +105 -0
  256. package/templates/create/shared/src/runtime/scene-flow.js +290 -0
  257. package/templates/create/shared/src/runtime/screen-shell.js +222 -0
  258. package/templates/create/shared/src/runtime/ui-forms.js +209 -0
  259. package/templates/create/shared/src/runtime/ui-settings.js +237 -0
  260. package/templates/create/shared/src/runtime/ui-theme.js +352 -0
  261. package/templates/create/shared/src/starter-utils/adventure-objectives.js +102 -0
  262. package/templates/create/shared/src/starter-utils/animation-2d.js +337 -0
  263. package/templates/create/shared/src/starter-utils/avatar-3d.js +404 -0
  264. package/templates/create/shared/src/starter-utils/combat-feedback-2d.js +320 -0
  265. package/templates/create/shared/src/starter-utils/core.js +39 -3
  266. package/templates/create/shared/src/starter-utils/index.js +8 -2
  267. package/templates/create/shared/src/starter-utils/platformer-3d.js +34 -3
  268. package/templates/create/shared/src/starter-utils/triggers.js +662 -0
  269. package/templates/create/shared/src/starter-utils/tween-2d.js +615 -0
  270. package/templates/create/video-cutscene/assets/video/.gitkeep +0 -0
  271. package/templates/create/video-cutscene/aura.config.json +28 -0
  272. package/templates/create/video-cutscene/config/gameplay/.gitkeep +0 -0
  273. package/templates/create/video-cutscene/content/gameplay/.gitkeep +0 -0
  274. package/templates/create/video-cutscene/content/registries/.gitkeep +0 -0
  275. package/templates/create/video-cutscene/docs/design/loop.md +22 -0
  276. package/templates/create/video-cutscene/prefabs/.gitkeep +0 -0
  277. package/templates/create/video-cutscene/scenes/boot.scene.js +11 -0
  278. package/templates/create/video-cutscene/scenes/cutscene.scene.js +113 -0
  279. package/templates/create/video-cutscene/scenes/gameplay.scene.js +50 -0
  280. package/templates/create/video-cutscene/src/main.js +17 -0
  281. package/templates/create/video-cutscene/src/runtime/app.js +52 -0
  282. package/templates/create/video-cutscene/src/runtime/capabilities.js +35 -0
  283. package/templates/create/video-cutscene/src/runtime/state.js +13 -0
  284. package/templates/create/video-cutscene/ui/.gitkeep +0 -0
  285. package/templates/create-bin/play.js +1187 -0
  286. package/templates/make/README.md +46 -0
  287. package/templates/make/catalog.json +51 -0
  288. package/templates/make/component/files/{{MAKE_NAME}}.component.js +20 -0
  289. package/templates/make/component/manifest.json +9 -0
  290. package/templates/make/data/files/{{MAKE_NAME}}.json +14 -0
  291. package/templates/make/data/manifest.json +9 -0
  292. package/templates/make/material/files/{{MAKE_NAME}}.material.json +17 -0
  293. package/templates/make/material/manifest.json +9 -0
  294. package/templates/make/prefab/files/{{MAKE_NAME}}.prefab.js +20 -0
  295. package/templates/make/prefab/manifest.json +9 -0
  296. package/templates/make/scene/files/{{MAKE_NAME}}.scene.js +31 -0
  297. package/templates/make/scene/manifest.json +9 -0
  298. package/templates/make/shader/files/{{MAKE_NAME}}.shader.js +23 -0
  299. package/templates/make/shader/manifest.json +9 -0
  300. package/templates/make/system/files/{{MAKE_NAME}}.system.js +15 -0
  301. package/templates/make/system/manifest.json +9 -0
  302. package/templates/make/ui-screen/files/{{MAKE_NAME}}.screen.js +16 -0
  303. package/templates/make/ui-screen/files/{{MAKE_NAME}}.screen.json +23 -0
  304. package/templates/make/ui-screen/manifest.json +10 -0
  305. package/templates/make-starters/deckbuilder-2d/card/files/{{MAKE_NAME}}.card.js +22 -0
  306. package/templates/make-starters/deckbuilder-2d/card/manifest.json +9 -0
  307. package/templates/make-starters/deckbuilder-2d/catalog.json +34 -0
  308. package/templates/make-starters/deckbuilder-2d/encounter/files/{{MAKE_NAME}}.encounter.js +18 -0
  309. package/templates/make-starters/deckbuilder-2d/encounter/manifest.json +9 -0
  310. package/templates/make-starters/deckbuilder-2d/enemy/files/{{MAKE_NAME}}.enemy.js +28 -0
  311. package/templates/make-starters/deckbuilder-2d/enemy/manifest.json +9 -0
  312. package/templates/make-starters/deckbuilder-2d/relic/files/{{MAKE_NAME}}.relic.js +23 -0
  313. package/templates/make-starters/deckbuilder-2d/relic/manifest.json +9 -0
  314. package/templates/retro/platformer/README.md +10 -0
  315. package/templates/retro/platformer/assets/retro/assets.json +91 -0
  316. package/templates/retro/platformer/aura.config.json +7 -0
  317. package/templates/retro/platformer/package.json +5 -0
  318. package/templates/retro/platformer/src/main.js +40 -0
  319. package/templates/retro/puzzle-grid/README.md +10 -0
  320. package/templates/retro/puzzle-grid/assets/retro/assets.json +90 -0
  321. package/templates/retro/puzzle-grid/aura.config.json +7 -0
  322. package/templates/retro/puzzle-grid/package.json +5 -0
  323. package/templates/retro/puzzle-grid/src/main.js +29 -0
  324. package/templates/retro/tactics-grid/README.md +10 -0
  325. package/templates/retro/tactics-grid/assets/retro/assets.json +90 -0
  326. package/templates/retro/tactics-grid/aura.config.json +7 -0
  327. package/templates/retro/tactics-grid/package.json +5 -0
  328. package/templates/retro/tactics-grid/src/main.js +35 -0
  329. package/templates/retro/topdown-adventure/README.md +10 -0
  330. package/templates/retro/topdown-adventure/assets/retro/assets.json +95 -0
  331. package/templates/retro/topdown-adventure/aura.config.json +7 -0
  332. package/templates/retro/topdown-adventure/package.json +5 -0
  333. package/templates/retro/topdown-adventure/src/main.js +29 -0
  334. package/templates/skills/aurajs/SKILL.md +61 -5
@@ -0,0 +1,34 @@
1
+ export function createCollectathonMaterials() {
2
+ return {
3
+ floor: aura.material.create({
4
+ color: { r: 0.16, g: 0.25, b: 0.2, a: 1.0 },
5
+ metallic: 0.06,
6
+ roughness: 0.92,
7
+ }),
8
+ platform: aura.material.create({
9
+ color: { r: 0.42, g: 0.54, b: 0.74, a: 1.0 },
10
+ metallic: 0.1,
11
+ roughness: 0.6,
12
+ }),
13
+ player: aura.material.create({
14
+ color: { r: 0.98, g: 0.55, b: 0.26, a: 1.0 },
15
+ metallic: 0.28,
16
+ roughness: 0.32,
17
+ }),
18
+ collectible: aura.material.create({
19
+ color: { r: 0.98, g: 0.92, b: 0.38, a: 1.0 },
20
+ metallic: 0.7,
21
+ roughness: 0.25,
22
+ }),
23
+ checkpoint: aura.material.create({
24
+ color: { r: 0.34, g: 0.9, b: 1.0, a: 1.0 },
25
+ metallic: 0.45,
26
+ roughness: 0.3,
27
+ }),
28
+ goal: aura.material.create({
29
+ color: { r: 0.54, g: 1.0, b: 0.7, a: 1.0 },
30
+ metallic: 0.38,
31
+ roughness: 0.32,
32
+ }),
33
+ };
34
+ }
@@ -0,0 +1,27 @@
1
+ import { createCheckpointSystem, createMovingPlatform3D } from '../starter-utils/index.js';
2
+ import { CHECKPOINTS, COLLECTIBLE_SPAWNS, MOVING_PLATFORM, PLAYER_SPAWN, START_TIMER_SECONDS } from '../../content/gameplay/course.js';
3
+ import { createPlayerAvatar, resetPlayerAvatar } from '../../prefabs/player.prefab.js';
4
+
5
+ function buildCollectibles() {
6
+ return COLLECTIBLE_SPAWNS.map((entry, index) => ({
7
+ id: `c-${index + 1}`,
8
+ x: entry.x,
9
+ y: entry.y,
10
+ z: entry.z,
11
+ collected: false,
12
+ }));
13
+ }
14
+
15
+ export function createCollectathonRunState(existingPlayer = null) {
16
+ return {
17
+ player: existingPlayer ? resetPlayerAvatar(existingPlayer, PLAYER_SPAWN) : createPlayerAvatar(PLAYER_SPAWN),
18
+ collectibles: buildCollectibles(),
19
+ score: 0,
20
+ elapsed: 0,
21
+ timerRemaining: START_TIMER_SECONDS,
22
+ runFailed: false,
23
+ runComplete: false,
24
+ checkpointSystem: createCheckpointSystem({ checkpoints: CHECKPOINTS }),
25
+ movingPlatform: createMovingPlatform3D(MOVING_PLATFORM),
26
+ };
27
+ }
@@ -0,0 +1,66 @@
1
+ import { TARGET_COLLECTIBLES } from '../content/gameplay/course.js';
2
+
3
+ const hudScreen = {
4
+ id: 'hud',
5
+ kind: 'ui-screen',
6
+ notes: ['HUD draw helpers still live beside the authored screen descriptor in this template.'],
7
+ };
8
+
9
+ export function drawCollectathonHud({ score, timerRemaining, runFailed, runComplete, showControlsHint = true }) {
10
+ let nextY = 12;
11
+ if (showControlsHint) {
12
+ aura.draw2d.text('Move: Arrows/WASD Jump: Space', 12, nextY, {
13
+ color: aura.Color.WHITE,
14
+ size: 14,
15
+ align: 'left',
16
+ });
17
+ nextY += 22;
18
+ }
19
+ aura.draw2d.text(`Collectibles ${score}/${TARGET_COLLECTIBLES}`, 12, nextY, {
20
+ color: aura.Color.WHITE,
21
+ size: 14,
22
+ align: 'left',
23
+ });
24
+ nextY += 22;
25
+ aura.draw2d.text(`Timer ${timerRemaining.toFixed(1)}s`, 12, nextY, {
26
+ color: aura.Color.WHITE,
27
+ size: 14,
28
+ align: 'left',
29
+ });
30
+ nextY += 22;
31
+ aura.draw2d.text('Reach checkpoints, collect orbs, then hit the goal.', 12, nextY, {
32
+ color: aura.Color.WHITE,
33
+ size: 13,
34
+ align: 'left',
35
+ });
36
+ nextY += 30;
37
+
38
+ if (runComplete) {
39
+ aura.draw2d.text('COURSE CLEARED', 12, nextY, {
40
+ color: aura.rgb(0.54, 1.0, 0.7),
41
+ size: 24,
42
+ align: 'left',
43
+ });
44
+ aura.draw2d.text('Press Enter to restart', 12, nextY + 28, {
45
+ color: aura.Color.WHITE,
46
+ size: 16,
47
+ align: 'left',
48
+ });
49
+ return;
50
+ }
51
+
52
+ if (!runFailed) return;
53
+
54
+ aura.draw2d.text('TIME UP', 12, nextY, {
55
+ color: aura.rgb(1.0, 0.46, 0.46),
56
+ size: 24,
57
+ align: 'left',
58
+ });
59
+ aura.draw2d.text('Press Enter to retry', 12, nextY + 28, {
60
+ color: aura.Color.WHITE,
61
+ size: 16,
62
+ align: 'left',
63
+ });
64
+ }
65
+
66
+ export default hudScreen;
@@ -0,0 +1,13 @@
1
+ const screen = {
2
+ id: "pause",
3
+ kind: 'ui-screen',
4
+ notes: [
5
+ "Use this for timer state, collected progress, and restart affordances."
6
+ ],
7
+ };
8
+
9
+ export function createPauseScreen() {
10
+ return screen;
11
+ }
12
+
13
+ export default screen;
@@ -0,0 +1,5 @@
1
+ # Blank Starter Notes
2
+
3
+ 1. Treat this template as the minimal authored AuraJS scaffold rather than a second project shape.
4
+ 1. Keep defaults in `config/`, authored nouns in `content/`, gameplay flow in `scenes/`, reusable pieces in `prefabs/`, and runtime wiring in `src/runtime/`.
5
+ 1. Use `aura make`, `aura explain`, and `aura check` instead of inventing an alternate folder model.
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,11 @@
1
+ # Deckbuilder 2D Starter Assets
2
+
3
+ Use this folder for the first authored native-first pass:
4
+
5
+ - card frame sprites
6
+ - combat arena backdrops
7
+ - icon sheets for deck, discard, energy, and intents
8
+
9
+ The starter loop is playable without art. Add content in `content/registries/`,
10
+ `content/cards/`, `content/enemies/`, `content/relics/`, and `content/encounters/` first,
11
+ then replace the placeholder rectangles here.
@@ -0,0 +1,28 @@
1
+ {
2
+ "identity": {
3
+ "name": "{{PROJECT_TITLE}}",
4
+ "version": "{{PROJECT_VERSION}}",
5
+ "executable": "{{PROJECT_BIN_NAME}}",
6
+ "icon": null
7
+ },
8
+ "window": {
9
+ "title": "{{PROJECT_TITLE}}",
10
+ "width": 1280,
11
+ "height": 720,
12
+ "resizable": true,
13
+ "fullscreen": false,
14
+ "vsync": true,
15
+ "hidpi": true
16
+ },
17
+ "build": {
18
+ "entry": "src/main.js",
19
+ "outDir": "build",
20
+ "assetDir": "assets",
21
+ "assetMode": "embed"
22
+ },
23
+ "modules": {
24
+ "physics": false,
25
+ "network": false,
26
+ "steam": false
27
+ }
28
+ }
@@ -0,0 +1,26 @@
1
+ export const DECKBUILDER_CONFIG = {
2
+ handSize: 5,
3
+ energyPerTurn: 3,
4
+ playerMaxHp: 36,
5
+ hudHeight: 122,
6
+ cardWidth: 158,
7
+ cardHeight: 104,
8
+ boardPadding: 24,
9
+ };
10
+
11
+ export const DECKBUILDER_TEXT = {
12
+ bootTitle: '{{PROJECT_TITLE}}',
13
+ bootSubtitle: 'AuraJS deckbuilder-2d starter',
14
+ bootPrompt: 'Press SPACE or ENTER to load the starter battle.',
15
+ battleHint: 'Keys 1-5 play cards. ENTER ends turn. R restarts. ESC returns to boot. Grow content with `aura make` before adding more systems.',
16
+ nativeFirstNote: 'Native-first starter. Add content in content/ before growing engine surface.',
17
+ contentTargets: [
18
+ 'content/registries/cards.registry.js',
19
+ 'content/registries/enemies.registry.js',
20
+ 'content/registries/relics.registry.js',
21
+ 'content/registries/encounters.registry.js',
22
+ 'content/cards/starter.deck.js',
23
+ 'content/encounters/training-battle.encounter.js',
24
+ 'ui/hud.screen.js',
25
+ ],
26
+ };
@@ -0,0 +1,19 @@
1
+ const guardCard = {
2
+ id: 'guard',
3
+ kind: 'card',
4
+ title: 'Guard',
5
+ cost: 1,
6
+ rarity: 'starter',
7
+ tone: 'guard',
8
+ target: 'self',
9
+ text: 'Gain 5 block.',
10
+ effects: [
11
+ {
12
+ type: 'gain-block',
13
+ amount: 5,
14
+ target: 'player',
15
+ },
16
+ ],
17
+ };
18
+
19
+ export default guardCard;
@@ -0,0 +1,20 @@
1
+ const card = {
2
+ id: 'spark',
3
+ kind: 'card',
4
+ title: 'Spark',
5
+ cost: 2,
6
+ rarity: 'common',
7
+ target: 'enemy',
8
+ text: 'Deal 9 damage. Draw 1 card.',
9
+ tone: 'skill',
10
+ damage: 9,
11
+ block: 0,
12
+ draw: 1,
13
+ summary: 'Deal 9 damage. Draw 1 card.',
14
+ effects: [
15
+ { type: 'damage', amount: 9, target: 'enemy' },
16
+ { type: 'draw', amount: 1, target: 'self' },
17
+ ],
18
+ };
19
+
20
+ export default card;
@@ -0,0 +1,69 @@
1
+ import guardCard from './guard.card.js';
2
+ import strikeCard from './strike.card.js';
3
+
4
+ const CARD_TONES = {
5
+ attack: { r: 0.78, g: 0.28, b: 0.24 },
6
+ guard: { r: 0.24, g: 0.54, b: 0.82 },
7
+ skill: { r: 0.44, g: 0.38, b: 0.82 },
8
+ };
9
+
10
+ export const STARTER_CARD_LIBRARY = {
11
+ [strikeCard.id]: strikeCard,
12
+ [guardCard.id]: guardCard,
13
+ };
14
+
15
+ export const STARTER_DECK = [
16
+ 'strike',
17
+ 'strike',
18
+ 'strike',
19
+ 'strike',
20
+ 'guard',
21
+ 'guard',
22
+ 'guard',
23
+ 'guard',
24
+ ];
25
+
26
+ function summarizeCard(card) {
27
+ return card?.text || card?.summary || 'Custom card effect.';
28
+ }
29
+
30
+ export function resolveCardTotals(card) {
31
+ const totals = {
32
+ damage: 0,
33
+ block: 0,
34
+ draw: 0,
35
+ };
36
+
37
+ for (const effect of Array.isArray(card?.effects) ? card.effects : []) {
38
+ const amount = Number(effect?.amount || 0);
39
+ if (!Number.isFinite(amount)) continue;
40
+ if (effect.type === 'damage') totals.damage += amount;
41
+ if (effect.type === 'gain-block') totals.block += amount;
42
+ if (effect.type === 'draw-cards') totals.draw += amount;
43
+ }
44
+
45
+ return totals;
46
+ }
47
+
48
+ export function createStarterDeck(cardLibrary = STARTER_CARD_LIBRARY) {
49
+ return STARTER_DECK.map((cardId, index) => {
50
+ const source = cardLibrary[cardId] || STARTER_CARD_LIBRARY.strike;
51
+ const totals = resolveCardTotals(source);
52
+ return {
53
+ ...source,
54
+ ...totals,
55
+ name: source.title || source.name || source.id,
56
+ summary: summarizeCard(source),
57
+ instanceId: `${source.id}-${index + 1}`,
58
+ };
59
+ });
60
+ }
61
+
62
+ export function resolveCardTone(card) {
63
+ const tone = CARD_TONES[card?.tone] || CARD_TONES.skill;
64
+ return {
65
+ r: tone.r,
66
+ g: tone.g,
67
+ b: tone.b,
68
+ };
69
+ }
@@ -0,0 +1,19 @@
1
+ const strikeCard = {
2
+ id: 'strike',
3
+ kind: 'card',
4
+ title: 'Strike',
5
+ cost: 1,
6
+ rarity: 'starter',
7
+ tone: 'attack',
8
+ target: 'enemy',
9
+ text: 'Deal 6 damage.',
10
+ effects: [
11
+ {
12
+ type: 'damage',
13
+ amount: 6,
14
+ target: 'enemy',
15
+ },
16
+ ],
17
+ };
18
+
19
+ export default strikeCard;
@@ -0,0 +1,20 @@
1
+ const card = {
2
+ id: 'survey',
3
+ kind: 'card',
4
+ title: 'Survey',
5
+ cost: 0,
6
+ rarity: 'common',
7
+ target: 'self',
8
+ text: 'Gain 3 block. Draw 1 card.',
9
+ tone: 'skill',
10
+ damage: 0,
11
+ block: 3,
12
+ draw: 1,
13
+ summary: 'Gain 3 block. Draw 1 card.',
14
+ effects: [
15
+ { type: 'block', amount: 3, target: 'self' },
16
+ { type: 'draw', amount: 1, target: 'self' },
17
+ ],
18
+ };
19
+
20
+ export default card;
@@ -0,0 +1,14 @@
1
+ const trainingBattleEncounter = {
2
+ id: 'training-battle',
3
+ kind: 'encounter',
4
+ title: 'Training Battle',
5
+ intro: 'Starter battle loaded. Keep the first proof loop small and content-first.',
6
+ room: 'starter-hall',
7
+ enemies: ['training-automaton'],
8
+ rewards: {
9
+ gold: 12,
10
+ relicIds: ['ember-charm'],
11
+ },
12
+ };
13
+
14
+ export default trainingBattleEncounter;
@@ -0,0 +1,65 @@
1
+ import trainingBattleEncounter from './training-battle.encounter.js';
2
+ import trainingAutomatonEnemy from '../enemies/training-automaton.enemy.js';
3
+ import emberCharmRelic from '../relics/ember-charm.relic.js';
4
+
5
+ const STARTER_ENEMY_LIBRARY = {
6
+ [trainingAutomatonEnemy.id]: trainingAutomatonEnemy,
7
+ };
8
+
9
+ const STARTER_RELIC_LIBRARY = {
10
+ [emberCharmRelic.id]: emberCharmRelic,
11
+ };
12
+
13
+ function summarizeMove(move, damage, block) {
14
+ if (typeof move?.text === 'string' && move.text.trim().length > 0) {
15
+ return move.text.trim();
16
+ }
17
+ if (damage > 0 && block > 0) return `Deal ${damage} damage and gain ${block} block.`;
18
+ if (damage > 0) return `Deal ${damage} damage.`;
19
+ if (block > 0) return `Gain ${block} block.`;
20
+ return 'Custom move effect.';
21
+ }
22
+
23
+ function materializeMove(move) {
24
+ let damage = 0;
25
+ let block = 0;
26
+ for (const effect of Array.isArray(move?.effects) ? move.effects : []) {
27
+ const amount = Number(effect?.amount || 0);
28
+ if (!Number.isFinite(amount)) continue;
29
+ if (effect.type === 'damage') damage += amount;
30
+ if (effect.type === 'gain-block') block += amount;
31
+ }
32
+
33
+ return {
34
+ id: move.id,
35
+ name: move.title || move.name || move.id,
36
+ damage,
37
+ block,
38
+ summary: summarizeMove(move, damage, block),
39
+ };
40
+ }
41
+
42
+ export function createTrainingBattle(encounter = trainingBattleEncounter, enemyLibrary = STARTER_ENEMY_LIBRARY) {
43
+ const enemyId = Array.isArray(encounter?.enemies) && encounter.enemies.length > 0
44
+ ? encounter.enemies[0]
45
+ : trainingAutomatonEnemy.id;
46
+ const enemy = enemyLibrary[enemyId] || trainingAutomatonEnemy;
47
+ const relicRewards = Array.isArray(encounter?.rewards?.relicIds)
48
+ ? encounter.rewards.relicIds.map((relicId) => STARTER_RELIC_LIBRARY[relicId]).filter(Boolean)
49
+ : [];
50
+
51
+ return {
52
+ id: encounter.id,
53
+ label: encounter.title,
54
+ enemyId,
55
+ enemyName: enemy.title,
56
+ enemyMaxHp: Number(enemy.hp || 0),
57
+ intro: encounter.intro || 'Starter battle loaded. Keep the first proof loop small and data-driven.',
58
+ rewardNote: relicRewards.length > 0
59
+ ? `Reward seed: ${relicRewards.map((relic) => relic.title).join(', ')}`
60
+ : 'Next expansion point: card rewards, relics, and multi-encounter runs.',
61
+ moves: (Array.isArray(enemy.moves) ? enemy.moves : []).map((move) => materializeMove(move)),
62
+ enemyHp: Number(enemy.hp || 0),
63
+ enemyBlock: Number(enemy.block || 0),
64
+ };
65
+ }
@@ -0,0 +1,48 @@
1
+ const trainingAutomatonEnemy = {
2
+ id: 'training-automaton',
3
+ kind: 'enemy',
4
+ title: 'Training Automaton',
5
+ hp: 34,
6
+ block: 0,
7
+ intent: 'attack',
8
+ moves: [
9
+ {
10
+ id: 'probe',
11
+ title: 'Probe Beam',
12
+ text: 'Deal 4 damage.',
13
+ effects: [
14
+ {
15
+ type: 'damage',
16
+ amount: 4,
17
+ target: 'player',
18
+ },
19
+ ],
20
+ },
21
+ {
22
+ id: 'brace',
23
+ title: 'Brace',
24
+ text: 'Gain 4 block.',
25
+ effects: [
26
+ {
27
+ type: 'gain-block',
28
+ amount: 4,
29
+ target: 'self',
30
+ },
31
+ ],
32
+ },
33
+ {
34
+ id: 'slam',
35
+ title: 'Heavy Slam',
36
+ text: 'Deal 7 damage.',
37
+ effects: [
38
+ {
39
+ type: 'damage',
40
+ amount: 7,
41
+ target: 'player',
42
+ },
43
+ ],
44
+ },
45
+ ],
46
+ };
47
+
48
+ export default trainingAutomatonEnemy;
@@ -0,0 +1,26 @@
1
+ const starterContentRegistry = {
2
+ schema: 'aurajs.starter-content-registry.v1',
3
+ template: 'deckbuilder-2d',
4
+ family: 'cards',
5
+ title: 'Starter cards',
6
+ entries: [
7
+ {
8
+ id: 'guard',
9
+ kind: 'card',
10
+ path: 'content/cards/guard.card.js',
11
+ exportName: 'default',
12
+ },
13
+ {
14
+ id: 'strike',
15
+ kind: 'card',
16
+ path: 'content/cards/strike.card.js',
17
+ exportName: 'default',
18
+ },
19
+ ],
20
+ };
21
+
22
+ export function createStarterContentRegistry() {
23
+ return starterContentRegistry;
24
+ }
25
+
26
+ export default starterContentRegistry;
@@ -0,0 +1,20 @@
1
+ const starterContentRegistry = {
2
+ schema: 'aurajs.starter-content-registry.v1',
3
+ template: 'deckbuilder-2d',
4
+ family: 'encounters',
5
+ title: 'Starter encounters',
6
+ entries: [
7
+ {
8
+ id: 'training-battle',
9
+ kind: 'encounter',
10
+ path: 'content/encounters/training-battle.encounter.js',
11
+ exportName: 'default',
12
+ },
13
+ ],
14
+ };
15
+
16
+ export function createStarterContentRegistry() {
17
+ return starterContentRegistry;
18
+ }
19
+
20
+ export default starterContentRegistry;
@@ -0,0 +1,20 @@
1
+ const starterContentRegistry = {
2
+ schema: 'aurajs.starter-content-registry.v1',
3
+ template: 'deckbuilder-2d',
4
+ family: 'enemies',
5
+ title: 'Starter enemies',
6
+ entries: [
7
+ {
8
+ id: 'training-automaton',
9
+ kind: 'enemy',
10
+ path: 'content/enemies/training-automaton.enemy.js',
11
+ exportName: 'default',
12
+ },
13
+ ],
14
+ };
15
+
16
+ export function createStarterContentRegistry() {
17
+ return starterContentRegistry;
18
+ }
19
+
20
+ export default starterContentRegistry;
@@ -0,0 +1,20 @@
1
+ const starterContentRegistry = {
2
+ schema: 'aurajs.starter-content-registry.v1',
3
+ template: 'deckbuilder-2d',
4
+ family: 'relics',
5
+ title: 'Starter relics',
6
+ entries: [
7
+ {
8
+ id: 'ember-charm',
9
+ kind: 'relic',
10
+ path: 'content/relics/ember-charm.relic.js',
11
+ exportName: 'default',
12
+ },
13
+ ],
14
+ };
15
+
16
+ export function createStarterContentRegistry() {
17
+ return starterContentRegistry;
18
+ }
19
+
20
+ export default starterContentRegistry;
@@ -0,0 +1,18 @@
1
+ const emberCharmRelic = {
2
+ id: 'ember-charm',
3
+ kind: 'relic',
4
+ title: 'Ember Charm',
5
+ tier: 'starter',
6
+ text: 'Start combat with 1 block.',
7
+ hooks: {
8
+ onCombatStart: [
9
+ {
10
+ type: 'gain-block',
11
+ amount: 1,
12
+ target: 'player',
13
+ },
14
+ ],
15
+ },
16
+ };
17
+
18
+ export default emberCharmRelic;
@@ -0,0 +1,12 @@
1
+ # Deckbuilder 2D Starter Loop
2
+
3
+ This starter keeps the first gameplay proof intentionally small:
4
+
5
+ 1. Boot scene
6
+ 2. Single authored training battle
7
+ 3. Hand of cards with energy, damage, block, and draw
8
+ 4. HUD with turn state, intent, draw/discard counts, and last action
9
+
10
+ Grow content through `content/registries/`, `content/cards/`, `content/enemies/`,
11
+ `content/relics/`, and `content/encounters/` before adding map flow, rewards, or
12
+ meta-progression.