@datamoc/mw_games 0.1.1 → 0.2.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 (360) hide show
  1. package/README.md +57 -32
  2. package/dist/actors/Appearances.js +1 -1
  3. package/dist/actors/Aura.d.ts +29 -0
  4. package/dist/actors/Aura.d.ts.map +1 -0
  5. package/dist/actors/Aura.js +69 -0
  6. package/dist/actors/Aura.js.map +1 -0
  7. package/dist/actors/ItemStatusEffect.d.ts +27 -0
  8. package/dist/actors/ItemStatusEffect.d.ts.map +1 -0
  9. package/dist/actors/ItemStatusEffect.js +35 -0
  10. package/dist/actors/ItemStatusEffect.js.map +1 -0
  11. package/dist/actors/Resource.d.ts.map +1 -1
  12. package/dist/actors/Resource.js +13 -5
  13. package/dist/actors/Resource.js.map +1 -1
  14. package/dist/actors/Support.d.ts +32 -0
  15. package/dist/actors/Support.d.ts.map +1 -0
  16. package/dist/actors/Support.js +60 -0
  17. package/dist/actors/Support.js.map +1 -0
  18. package/dist/actors/Traits.d.ts +29 -0
  19. package/dist/actors/Traits.d.ts.map +1 -0
  20. package/dist/actors/Traits.js +21 -0
  21. package/dist/actors/Traits.js.map +1 -0
  22. package/dist/actors/craft.d.ts.map +1 -1
  23. package/dist/actors/craft.js +6 -2
  24. package/dist/actors/craft.js.map +1 -1
  25. package/dist/actors/index.d.ts +8 -0
  26. package/dist/actors/index.d.ts.map +1 -1
  27. package/dist/actors/index.js +4 -0
  28. package/dist/actors/index.js.map +1 -1
  29. package/dist/assets/Streaming.d.ts +40 -0
  30. package/dist/assets/Streaming.d.ts.map +1 -0
  31. package/dist/assets/Streaming.js +79 -0
  32. package/dist/assets/Streaming.js.map +1 -0
  33. package/dist/assets/index.d.ts +14 -1
  34. package/dist/assets/index.d.ts.map +1 -1
  35. package/dist/assets/index.js +19 -0
  36. package/dist/assets/index.js.map +1 -1
  37. package/dist/audio/Captions.d.ts +15 -0
  38. package/dist/audio/Captions.d.ts.map +1 -0
  39. package/dist/audio/Captions.js +4 -0
  40. package/dist/audio/Captions.js.map +1 -0
  41. package/dist/audio/Midi.d.ts +75 -0
  42. package/dist/audio/Midi.d.ts.map +1 -0
  43. package/dist/audio/Midi.js +186 -0
  44. package/dist/audio/Midi.js.map +1 -0
  45. package/dist/audio/Orchestrator.d.ts +40 -0
  46. package/dist/audio/Orchestrator.d.ts.map +1 -0
  47. package/dist/audio/Orchestrator.js +48 -0
  48. package/dist/audio/Orchestrator.js.map +1 -0
  49. package/dist/audio/Sound.d.ts +3 -0
  50. package/dist/audio/Sound.d.ts.map +1 -1
  51. package/dist/audio/Sound.js +4 -0
  52. package/dist/audio/Sound.js.map +1 -1
  53. package/dist/audio/Synth.d.ts +35 -0
  54. package/dist/audio/Synth.d.ts.map +1 -0
  55. package/dist/audio/Synth.js +96 -0
  56. package/dist/audio/Synth.js.map +1 -0
  57. package/dist/audio/index.d.ts +8 -0
  58. package/dist/audio/index.d.ts.map +1 -1
  59. package/dist/audio/index.js +4 -0
  60. package/dist/audio/index.js.map +1 -1
  61. package/dist/battle/Party.d.ts.map +1 -1
  62. package/dist/battle/Party.js +2 -0
  63. package/dist/battle/Party.js.map +1 -1
  64. package/dist/board/Army.d.ts +17 -0
  65. package/dist/board/Army.d.ts.map +1 -0
  66. package/dist/board/Army.js +48 -0
  67. package/dist/board/Army.js.map +1 -0
  68. package/dist/board/Classics.d.ts.map +1 -1
  69. package/dist/board/Classics.js +14 -6
  70. package/dist/board/Classics.js.map +1 -1
  71. package/dist/board/FogOfWar.d.ts +23 -0
  72. package/dist/board/FogOfWar.d.ts.map +1 -0
  73. package/dist/board/FogOfWar.js +40 -0
  74. package/dist/board/FogOfWar.js.map +1 -0
  75. package/dist/board/Tactics.d.ts +2 -0
  76. package/dist/board/Tactics.d.ts.map +1 -1
  77. package/dist/board/Tactics.js +36 -8
  78. package/dist/board/Tactics.js.map +1 -1
  79. package/dist/board/index.d.ts +5 -1
  80. package/dist/board/index.d.ts.map +1 -1
  81. package/dist/board/index.js +3 -1
  82. package/dist/board/index.js.map +1 -1
  83. package/dist/core/Feedback.d.ts +23 -0
  84. package/dist/core/Feedback.d.ts.map +1 -0
  85. package/dist/core/Feedback.js +35 -0
  86. package/dist/core/Feedback.js.map +1 -0
  87. package/dist/core/Game.d.ts +27 -1
  88. package/dist/core/Game.d.ts.map +1 -1
  89. package/dist/core/Game.js +61 -5
  90. package/dist/core/Game.js.map +1 -1
  91. package/dist/core/Input.d.ts +59 -1
  92. package/dist/core/Input.d.ts.map +1 -1
  93. package/dist/core/Input.js +135 -0
  94. package/dist/core/Input.js.map +1 -1
  95. package/dist/core/Loading.d.ts +48 -0
  96. package/dist/core/Loading.d.ts.map +1 -0
  97. package/dist/core/Loading.js +102 -0
  98. package/dist/core/Loading.js.map +1 -0
  99. package/dist/core/News.d.ts +46 -0
  100. package/dist/core/News.d.ts.map +1 -0
  101. package/dist/core/News.js +79 -0
  102. package/dist/core/News.js.map +1 -0
  103. package/dist/core/PlayerInput.d.ts +38 -0
  104. package/dist/core/PlayerInput.d.ts.map +1 -0
  105. package/dist/core/PlayerInput.js +57 -0
  106. package/dist/core/PlayerInput.js.map +1 -0
  107. package/dist/core/Random.d.ts +2 -2
  108. package/dist/core/Random.js +2 -2
  109. package/dist/core/RunHistory.d.ts +43 -0
  110. package/dist/core/RunHistory.d.ts.map +1 -0
  111. package/dist/core/RunHistory.js +41 -0
  112. package/dist/core/RunHistory.js.map +1 -0
  113. package/dist/core/Sanitize.d.ts +56 -0
  114. package/dist/core/Sanitize.d.ts.map +1 -0
  115. package/dist/core/Sanitize.js +87 -0
  116. package/dist/core/Sanitize.js.map +1 -0
  117. package/dist/core/Save.d.ts +31 -7
  118. package/dist/core/Save.d.ts.map +1 -1
  119. package/dist/core/Save.js +56 -0
  120. package/dist/core/Save.js.map +1 -1
  121. package/dist/core/SaveSync.d.ts +26 -0
  122. package/dist/core/SaveSync.d.ts.map +1 -0
  123. package/dist/core/SaveSync.js +52 -0
  124. package/dist/core/SaveSync.js.map +1 -0
  125. package/dist/core/Scramble.d.ts +13 -0
  126. package/dist/core/Scramble.d.ts.map +1 -0
  127. package/dist/core/Scramble.js +44 -0
  128. package/dist/core/Scramble.js.map +1 -0
  129. package/dist/core/Session.d.ts +21 -0
  130. package/dist/core/Session.d.ts.map +1 -0
  131. package/dist/core/Session.js +11 -0
  132. package/dist/core/Session.js.map +1 -0
  133. package/dist/core/Spawner.d.ts +48 -0
  134. package/dist/core/Spawner.d.ts.map +1 -0
  135. package/dist/core/Spawner.js +65 -0
  136. package/dist/core/Spawner.js.map +1 -0
  137. package/dist/core/Tween.d.ts +25 -0
  138. package/dist/core/Tween.d.ts.map +1 -0
  139. package/dist/core/Tween.js +60 -0
  140. package/dist/core/Tween.js.map +1 -0
  141. package/dist/core/UndoHistory.d.ts +37 -0
  142. package/dist/core/UndoHistory.d.ts.map +1 -0
  143. package/dist/core/UndoHistory.js +49 -0
  144. package/dist/core/UndoHistory.js.map +1 -0
  145. package/dist/core/index.d.ts +22 -0
  146. package/dist/core/index.d.ts.map +1 -1
  147. package/dist/core/index.js +12 -0
  148. package/dist/core/index.js.map +1 -1
  149. package/dist/i18n/Fluent.d.ts +7 -0
  150. package/dist/i18n/Fluent.d.ts.map +1 -0
  151. package/dist/i18n/Fluent.js +86 -0
  152. package/dist/i18n/Fluent.js.map +1 -0
  153. package/dist/i18n/index.d.ts +15 -1
  154. package/dist/i18n/index.d.ts.map +1 -1
  155. package/dist/i18n/index.js +17 -2
  156. package/dist/i18n/index.js.map +1 -1
  157. package/dist/index.d.ts +1 -0
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +1 -0
  160. package/dist/index.js.map +1 -1
  161. package/dist/mw_games.global.js +351 -79
  162. package/dist/render/Camera.d.ts +32 -4
  163. package/dist/render/Camera.d.ts.map +1 -1
  164. package/dist/render/Camera.js +58 -23
  165. package/dist/render/Camera.js.map +1 -1
  166. package/dist/render/Capabilities.d.ts +51 -0
  167. package/dist/render/Capabilities.d.ts.map +1 -0
  168. package/dist/render/Capabilities.js +56 -0
  169. package/dist/render/Capabilities.js.map +1 -0
  170. package/dist/render/ColorBlindness.d.ts +16 -0
  171. package/dist/render/ColorBlindness.d.ts.map +1 -0
  172. package/dist/render/ColorBlindness.js +41 -0
  173. package/dist/render/ColorBlindness.js.map +1 -0
  174. package/dist/render/ColorTransformBatcher.d.ts +9 -0
  175. package/dist/render/ColorTransformBatcher.d.ts.map +1 -1
  176. package/dist/render/ColorTransformBatcher.js +131 -19
  177. package/dist/render/ColorTransformBatcher.js.map +1 -1
  178. package/dist/render/Minimap.d.ts +52 -0
  179. package/dist/render/Minimap.d.ts.map +1 -0
  180. package/dist/render/Minimap.js +95 -0
  181. package/dist/render/Minimap.js.map +1 -0
  182. package/dist/render/TileMap.d.ts +2 -2
  183. package/dist/render/TileMap.d.ts.map +1 -1
  184. package/dist/render/TileMap.js +12 -12
  185. package/dist/render/TileMap.js.map +1 -1
  186. package/dist/render/TintedSprite.d.ts +1 -8
  187. package/dist/render/TintedSprite.d.ts.map +1 -1
  188. package/dist/render/TintedSprite.js +3 -111
  189. package/dist/render/TintedSprite.js.map +1 -1
  190. package/dist/render/Viewport.d.ts +46 -0
  191. package/dist/render/Viewport.d.ts.map +1 -0
  192. package/dist/render/Viewport.js +52 -0
  193. package/dist/render/Viewport.js.map +1 -0
  194. package/dist/render/index.d.ts +9 -1
  195. package/dist/render/index.d.ts.map +1 -1
  196. package/dist/render/index.js +5 -1
  197. package/dist/render/index.js.map +1 -1
  198. package/dist/roguelike/FieldOfView.d.ts +1 -1
  199. package/dist/roguelike/Level.d.ts +2 -2
  200. package/dist/roguelike/Level.d.ts.map +1 -1
  201. package/dist/roguelike/Level.js +1 -1
  202. package/dist/roguelike/Level.js.map +1 -1
  203. package/dist/roguelike/Pathfinder.d.ts +3 -3
  204. package/dist/roguelike/Pathfinder.js +2 -2
  205. package/dist/roguelike/Scheduler.d.ts +1 -1
  206. package/dist/roguelike/Scheduler.js +1 -1
  207. package/dist/roguelike/Stealth.d.ts +34 -0
  208. package/dist/roguelike/Stealth.d.ts.map +1 -0
  209. package/dist/roguelike/Stealth.js +35 -0
  210. package/dist/roguelike/Stealth.js.map +1 -0
  211. package/dist/roguelike/generate.d.ts +3 -3
  212. package/dist/roguelike/generate.js +1 -1
  213. package/dist/roguelike/generate.js.map +1 -1
  214. package/dist/roguelike/index.d.ts +2 -0
  215. package/dist/roguelike/index.d.ts.map +1 -1
  216. package/dist/roguelike/index.js +1 -0
  217. package/dist/roguelike/index.js.map +1 -1
  218. package/dist/rpg/Collision.d.ts +42 -0
  219. package/dist/rpg/Collision.d.ts.map +1 -0
  220. package/dist/rpg/Collision.js +77 -0
  221. package/dist/rpg/Collision.js.map +1 -0
  222. package/dist/rpg/FreeMover.d.ts +45 -0
  223. package/dist/rpg/FreeMover.d.ts.map +1 -0
  224. package/dist/rpg/FreeMover.js +68 -0
  225. package/dist/rpg/FreeMover.js.map +1 -0
  226. package/dist/rpg/Marshal.d.ts +65 -0
  227. package/dist/rpg/Marshal.d.ts.map +1 -0
  228. package/dist/rpg/Marshal.js +393 -0
  229. package/dist/rpg/Marshal.js.map +1 -0
  230. package/dist/rpg/Quest.d.ts +41 -0
  231. package/dist/rpg/Quest.d.ts.map +1 -1
  232. package/dist/rpg/Quest.js +39 -6
  233. package/dist/rpg/Quest.js.map +1 -1
  234. package/dist/rpg/index.d.ts +7 -1
  235. package/dist/rpg/index.d.ts.map +1 -1
  236. package/dist/rpg/index.js +3 -0
  237. package/dist/rpg/index.js.map +1 -1
  238. package/dist/stage/DialogueStage.d.ts +2 -3
  239. package/dist/stage/DialogueStage.d.ts.map +1 -1
  240. package/dist/stage/DialogueStage.js +21 -30
  241. package/dist/stage/DialogueStage.js.map +1 -1
  242. package/dist/stage/index.d.ts +1 -1
  243. package/dist/stage/index.d.ts.map +1 -1
  244. package/dist/stage/script.d.ts +32 -3
  245. package/dist/stage/script.d.ts.map +1 -1
  246. package/dist/stage/script.js +0 -0
  247. package/dist/stage/script.js.map +1 -1
  248. package/dist/three-d/Character3D.d.ts +48 -0
  249. package/dist/three-d/Character3D.d.ts.map +1 -0
  250. package/dist/three-d/Character3D.js +96 -0
  251. package/dist/three-d/Character3D.js.map +1 -0
  252. package/dist/three-d/Engine3D.d.ts +23 -0
  253. package/dist/three-d/Engine3D.d.ts.map +1 -0
  254. package/dist/three-d/Engine3D.js +45 -0
  255. package/dist/three-d/Engine3D.js.map +1 -0
  256. package/dist/three-d/Grid.d.ts +14 -0
  257. package/dist/three-d/Grid.d.ts.map +1 -0
  258. package/dist/three-d/Grid.js +13 -0
  259. package/dist/three-d/Grid.js.map +1 -0
  260. package/dist/three-d/Heightmap.d.ts +35 -0
  261. package/dist/three-d/Heightmap.d.ts.map +1 -0
  262. package/dist/three-d/Heightmap.js +29 -0
  263. package/dist/three-d/Heightmap.js.map +1 -0
  264. package/dist/three-d/Models.d.ts +12 -0
  265. package/dist/three-d/Models.d.ts.map +1 -0
  266. package/dist/three-d/Models.js +14 -0
  267. package/dist/three-d/Models.js.map +1 -0
  268. package/dist/three-d/TileGrid3D.d.ts +21 -0
  269. package/dist/three-d/TileGrid3D.d.ts.map +1 -0
  270. package/dist/three-d/TileGrid3D.js +65 -0
  271. package/dist/three-d/TileGrid3D.js.map +1 -0
  272. package/dist/three-d/Vox.d.ts +24 -0
  273. package/dist/three-d/Vox.d.ts.map +1 -0
  274. package/dist/three-d/Vox.js +93 -0
  275. package/dist/three-d/Vox.js.map +1 -0
  276. package/dist/three-d/index.d.ts +13 -0
  277. package/dist/three-d/index.d.ts.map +1 -0
  278. package/dist/three-d/index.js +7 -0
  279. package/dist/three-d/index.js.map +1 -0
  280. package/dist/ui/Bar.d.ts +49 -0
  281. package/dist/ui/Bar.d.ts.map +1 -0
  282. package/dist/ui/Bar.js +70 -0
  283. package/dist/ui/Bar.js.map +1 -0
  284. package/dist/ui/BitmapLabel.d.ts +42 -0
  285. package/dist/ui/BitmapLabel.d.ts.map +1 -0
  286. package/dist/ui/BitmapLabel.js +59 -0
  287. package/dist/ui/BitmapLabel.js.map +1 -0
  288. package/dist/ui/Button.d.ts +52 -0
  289. package/dist/ui/Button.d.ts.map +1 -0
  290. package/dist/ui/Button.js +147 -0
  291. package/dist/ui/Button.js.map +1 -0
  292. package/dist/ui/FloatingText.d.ts +28 -0
  293. package/dist/ui/FloatingText.d.ts.map +1 -0
  294. package/dist/ui/FloatingText.js +39 -0
  295. package/dist/ui/FloatingText.js.map +1 -0
  296. package/dist/ui/HelpScreen.d.ts +29 -0
  297. package/dist/ui/HelpScreen.d.ts.map +1 -0
  298. package/dist/ui/HelpScreen.js +39 -0
  299. package/dist/ui/HelpScreen.js.map +1 -0
  300. package/dist/ui/IconGrid.d.ts +8 -0
  301. package/dist/ui/IconGrid.d.ts.map +1 -1
  302. package/dist/ui/IconGrid.js +27 -1
  303. package/dist/ui/IconGrid.js.map +1 -1
  304. package/dist/ui/Label.d.ts +10 -1
  305. package/dist/ui/Label.d.ts.map +1 -1
  306. package/dist/ui/Label.js +25 -2
  307. package/dist/ui/Label.js.map +1 -1
  308. package/dist/ui/ListView.d.ts +12 -1
  309. package/dist/ui/ListView.d.ts.map +1 -1
  310. package/dist/ui/ListView.js +56 -2
  311. package/dist/ui/ListView.js.map +1 -1
  312. package/dist/ui/LoadingScreen.d.ts +31 -0
  313. package/dist/ui/LoadingScreen.d.ts.map +1 -0
  314. package/dist/ui/LoadingScreen.js +60 -0
  315. package/dist/ui/LoadingScreen.js.map +1 -0
  316. package/dist/ui/MessageBox.d.ts +27 -1
  317. package/dist/ui/MessageBox.d.ts.map +1 -1
  318. package/dist/ui/MessageBox.js +63 -14
  319. package/dist/ui/MessageBox.js.map +1 -1
  320. package/dist/ui/RebindScreen.d.ts +55 -0
  321. package/dist/ui/RebindScreen.d.ts.map +1 -0
  322. package/dist/ui/RebindScreen.js +114 -0
  323. package/dist/ui/RebindScreen.js.map +1 -0
  324. package/dist/ui/Toast.d.ts +44 -0
  325. package/dist/ui/Toast.d.ts.map +1 -0
  326. package/dist/ui/Toast.js +89 -0
  327. package/dist/ui/Toast.js.map +1 -0
  328. package/dist/ui/VerticalLabel.d.ts +5 -0
  329. package/dist/ui/VerticalLabel.d.ts.map +1 -1
  330. package/dist/ui/VerticalLabel.js +18 -7
  331. package/dist/ui/VerticalLabel.js.map +1 -1
  332. package/dist/ui/Window.d.ts +6 -0
  333. package/dist/ui/Window.d.ts.map +1 -1
  334. package/dist/ui/Window.js +16 -1
  335. package/dist/ui/Window.js.map +1 -1
  336. package/dist/ui/WindowStack.d.ts +1 -0
  337. package/dist/ui/WindowStack.d.ts.map +1 -1
  338. package/dist/ui/WindowStack.js +4 -1
  339. package/dist/ui/WindowStack.js.map +1 -1
  340. package/dist/ui/index.d.ts +17 -1
  341. package/dist/ui/index.d.ts.map +1 -1
  342. package/dist/ui/index.js +9 -1
  343. package/dist/ui/index.js.map +1 -1
  344. package/dist/ui/theme.d.ts +21 -0
  345. package/dist/ui/theme.d.ts.map +1 -1
  346. package/dist/ui/theme.js +42 -0
  347. package/dist/ui/theme.js.map +1 -1
  348. package/dist/version.d.ts +13 -0
  349. package/dist/version.d.ts.map +1 -0
  350. package/dist/version.js +13 -0
  351. package/dist/version.js.map +1 -0
  352. package/dist/world/Environment.d.ts +35 -0
  353. package/dist/world/Environment.d.ts.map +1 -0
  354. package/dist/world/Environment.js +55 -0
  355. package/dist/world/Environment.js.map +1 -0
  356. package/dist/world/index.d.ts +2 -0
  357. package/dist/world/index.d.ts.map +1 -1
  358. package/dist/world/index.js +1 -0
  359. package/dist/world/index.js.map +1 -1
  360. package/package.json +40 -4
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Ruby's `Marshal` binary serialisation format (version 4.8, unchanged since Ruby 1.8) -
3
+ * the container `Game.rxdata` and every other RPG Maker XP/VX save are written in. This is
4
+ * format engineering, not RPG Maker's own code or content: the byte layout below is Ruby's
5
+ * own standard-library format, learned the ordinary way any undocumented format is, by
6
+ * reading real files in it. Nothing here knows what an RPG Maker save's own classes
7
+ * (`Game_Party`, `Game_Actor`) mean; it only turns the container's bytes into a faithful,
8
+ * generic JS shape a game can then interpret however it needs to. See CLAUDE.md's licence
9
+ * convention and ROADMAP.md item 100 for where this line sits.
10
+ *
11
+ * What decodes: nil, true, false, Fixnum, Bignum, Float, String, Symbol, Array, Hash
12
+ * (including one with a default value, read separately via `hashDefaultOf` rather than as a
13
+ * fake entry - a real Hash key equal to any string sentinel would otherwise collide with
14
+ * it), and Object (`o`, a class name plus its instance variables) - everything a plain-data
15
+ * save file actually needs. `_dump`/`_load` values
16
+ * (`u`) decode to their class name plus the opaque bytes their own `_load` would need,
17
+ * since that per-class binary layout is a second, undocumented format nested inside this
18
+ * one and out of scope the same way a container format never explains the media it holds.
19
+ * `marshal_dump`/`marshal_load` values (`U`) decode fully, since their payload is an
20
+ * ordinary Marshal value. Backreferences (`@`, `;`) resolve against the same link tables a
21
+ * real Ruby `Marshal.load` keeps, so a value referenced twice decodes to the same object
22
+ * twice rather than being duplicated.
23
+ */
24
+ /**
25
+ * Marks a JS string as a Ruby Symbol rather than a String when encoding - `decodeMarshal`
26
+ * maps both to a plain JS string (the distinction rarely matters for reading a save back),
27
+ * but writing needs to know which one to produce. `RubyObject.ivars`' keys are always
28
+ * written as symbols regardless, since that half of the format has no other option.
29
+ */
30
+ export class RubySymbol {
31
+ constructor(name) {
32
+ this.name = name;
33
+ }
34
+ }
35
+ const MARSHAL_MAJOR = 4;
36
+ const MARSHAL_MINOR = 8;
37
+ //a Hash.new(default)'s default value, keyed by the decoded Map itself rather than a fake
38
+ //entry - a real Hash key equal to any string sentinel would otherwise be overwritten
39
+ const hashDefaults = new WeakMap();
40
+ /** the default value of a Hash decoded from `Hash.new(default)` (Marshal's `}` tag), if any */
41
+ export function hashDefaultOf(hash) {
42
+ return hashDefaults.get(hash);
43
+ }
44
+ /** marks a Map for `encodeMarshal` to write back out as a `Hash.new(default)`, tag `}` */
45
+ export function withHashDefault(hash, defaultValue) {
46
+ hashDefaults.set(hash, defaultValue);
47
+ return hash;
48
+ }
49
+ class Reader {
50
+ constructor(bytes) {
51
+ this.pos = 0;
52
+ this.symbols = [];
53
+ this.objects = [];
54
+ this.bytes = bytes;
55
+ }
56
+ byte() {
57
+ if (this.pos >= this.bytes.length)
58
+ throw new Error('Marshal: unexpected end of input');
59
+ return this.bytes[this.pos++];
60
+ }
61
+ take(count) {
62
+ //a negative count (a corrupt length-prefixed field) would otherwise pass the length
63
+ //check below silently, since subarray(pos, pos + count) with count < 0 clamps to an
64
+ //empty slice rather than throwing, and rewind pos backward instead of erroring
65
+ if (count < 0)
66
+ throw new Error('Marshal: negative length');
67
+ const slice = this.bytes.subarray(this.pos, this.pos + count);
68
+ if (slice.length < count)
69
+ throw new Error('Marshal: unexpected end of input');
70
+ this.pos += count;
71
+ return slice;
72
+ }
73
+ /** Ruby's variable-length integer encoding - see the module doc for the byte layout */
74
+ readFixnum() {
75
+ const c = this.byte() << 24 >> 24; // reinterpret as signed 8-bit
76
+ if (c === 0)
77
+ return 0;
78
+ if (c >= 5 && c <= 127)
79
+ return c - 5;
80
+ if (c <= -5 && c >= -128)
81
+ return c + 5;
82
+ if (c > 0) {
83
+ let value = 0;
84
+ for (let i = 0; i < c; i++)
85
+ value |= this.byte() << (8 * i);
86
+ return value >>> 0;
87
+ }
88
+ const n = -c;
89
+ let value = 0;
90
+ for (let i = 0; i < n; i++)
91
+ value |= this.byte() << (8 * i);
92
+ return (value >>> 0) - 2 ** (8 * n);
93
+ }
94
+ readBytes() {
95
+ return this.take(this.readFixnum());
96
+ }
97
+ readSymbol() {
98
+ const name = new TextDecoder().decode(this.readBytes());
99
+ this.symbols.push(name);
100
+ return name;
101
+ }
102
+ readSymbolLink() {
103
+ const index = this.readFixnum();
104
+ const name = this.symbols[index];
105
+ if (name === undefined)
106
+ throw new Error(`Marshal: symbol link ${index} out of range`);
107
+ return name;
108
+ }
109
+ /** reads whichever of `:` (a new symbol) or `;` (a link to one already seen) comes next */
110
+ readSymbolValue() {
111
+ const tag = String.fromCharCode(this.byte());
112
+ if (tag === ':')
113
+ return this.readSymbol();
114
+ if (tag === ';')
115
+ return this.readSymbolLink();
116
+ throw new Error(`Marshal: expected a symbol, got tag "${tag}"`);
117
+ }
118
+ link(value) {
119
+ this.objects.push(value);
120
+ return value;
121
+ }
122
+ /**
123
+ * A Bignum decodes to a plain JS `number`, not a `bigint` - correct up to
124
+ * `Number.MAX_SAFE_INTEGER` (2^53), silently imprecise past it, the same rounding a plain
125
+ * `JSON.parse` of a huge integer already has. RPG Maker save data has no legitimate use
126
+ * for an integer that large (`Game_Party`'s gold, item counts, switch/variable ids are
127
+ * all ordinary Fixnum range), so this stays a `number` for a uniform return type rather
128
+ * than `number | bigint` for a case no real `.rxdata` file exercises.
129
+ */
130
+ readBignum() {
131
+ const sign = String.fromCharCode(this.byte()) === '-' ? -1 : 1;
132
+ const words = this.readFixnum();
133
+ let value = 0;
134
+ let multiplier = 1;
135
+ for (let i = 0; i < words; i++) {
136
+ value += (this.byte() | (this.byte() << 8)) * multiplier;
137
+ multiplier *= 65536;
138
+ }
139
+ return sign * value;
140
+ }
141
+ readFloat() {
142
+ const text = new TextDecoder().decode(this.readBytes());
143
+ if (text === 'inf')
144
+ return Infinity;
145
+ if (text === '-inf')
146
+ return -Infinity;
147
+ if (text === 'nan')
148
+ return NaN;
149
+ return Number(text);
150
+ }
151
+ readArray() {
152
+ const array = [];
153
+ this.link(array);
154
+ const length = this.readFixnum();
155
+ for (let i = 0; i < length; i++)
156
+ array.push(this.readValue());
157
+ return array;
158
+ }
159
+ readHash(withDefault) {
160
+ const map = new Map();
161
+ this.link(map);
162
+ const length = this.readFixnum();
163
+ for (let i = 0; i < length; i++)
164
+ map.set(this.readValue(), this.readValue());
165
+ //a Hash.new(default)'s default lives out of band, in hashDefaults - never as a fake
166
+ //entry, which a real key equal to that sentinel would silently collide with
167
+ if (withDefault)
168
+ hashDefaults.set(map, this.readValue());
169
+ return map;
170
+ }
171
+ readIvars(count) {
172
+ const ivars = {};
173
+ for (let i = 0; i < count; i++)
174
+ ivars[this.readSymbolValue()] = this.readValue();
175
+ return ivars;
176
+ }
177
+ readObject() {
178
+ const object = { class: '', ivars: {} };
179
+ this.link(object);
180
+ object.class = this.readSymbolValue();
181
+ object.ivars = this.readIvars(this.readFixnum());
182
+ return object;
183
+ }
184
+ /** a string, possibly wrapped in `I` (instance-variable) metadata such as its encoding */
185
+ readIvarWrapped() {
186
+ const value = this.readValue();
187
+ this.readIvars(this.readFixnum()); // encoding/other ivars are metadata this reader does not expose
188
+ return value;
189
+ }
190
+ readUserDefined() {
191
+ const value = { class: '', raw: new Uint8Array() };
192
+ this.link(value);
193
+ value.class = this.readSymbolValue();
194
+ value.raw = this.readBytes().slice();
195
+ return value;
196
+ }
197
+ readUserMarshal() {
198
+ const wrapper = { class: '', value: null };
199
+ this.link(wrapper);
200
+ wrapper.class = this.readSymbolValue();
201
+ wrapper.value = this.readValue();
202
+ return wrapper;
203
+ }
204
+ readValue() {
205
+ const tag = String.fromCharCode(this.byte());
206
+ switch (tag) {
207
+ case '0':
208
+ return null;
209
+ case 'T':
210
+ return true;
211
+ case 'F':
212
+ return false;
213
+ case 'i':
214
+ return this.readFixnum();
215
+ case 'l':
216
+ return this.link(this.readBignum());
217
+ case 'f':
218
+ return this.link(this.readFloat());
219
+ case ':':
220
+ return this.readSymbol();
221
+ case ';':
222
+ return this.readSymbolLink();
223
+ case '"':
224
+ return this.link(new TextDecoder().decode(this.readBytes()));
225
+ case '[':
226
+ return this.readArray();
227
+ case '{':
228
+ return this.readHash(false);
229
+ case '}':
230
+ return this.readHash(true);
231
+ case 'o':
232
+ return this.readObject();
233
+ case 'I':
234
+ return this.readIvarWrapped();
235
+ case 'u':
236
+ return this.readUserDefined();
237
+ case 'U':
238
+ return this.readUserMarshal();
239
+ case '@': {
240
+ const index = this.readFixnum();
241
+ const value = this.objects[index];
242
+ if (value === undefined)
243
+ throw new Error(`Marshal: object link ${index} out of range`);
244
+ return value;
245
+ }
246
+ default:
247
+ throw new Error(`Marshal: unsupported tag "${tag}" (0x${tag.charCodeAt(0).toString(16)})`);
248
+ }
249
+ }
250
+ readDocument() {
251
+ const major = this.byte();
252
+ const minor = this.byte();
253
+ if (major !== MARSHAL_MAJOR || minor > MARSHAL_MINOR) {
254
+ throw new Error(`Marshal: unsupported version ${major}.${minor} (expected ${MARSHAL_MAJOR}.${MARSHAL_MINOR} or lower)`);
255
+ }
256
+ return this.readValue();
257
+ }
258
+ }
259
+ /** decodes one Marshal document (a whole `.rxdata` file, or any other Marshal dump) */
260
+ export function decodeMarshal(bytes) {
261
+ return new Reader(bytes).readDocument();
262
+ }
263
+ function isRubyObject(value) {
264
+ return typeof value === 'object' && value !== null && 'class' in value && 'ivars' in value;
265
+ }
266
+ /**
267
+ * Encodes one Marshal document from the same shapes `decodeMarshal` produces: `null`,
268
+ * `boolean`, `number` (written as a Fixnum when it is a safe integer, a Float otherwise),
269
+ * `string` (a Marshal String, unless wrapped in `RubySymbol`), `Array`, `Map` (a Hash, key
270
+ * order preserved), and `RubyObject`.
271
+ *
272
+ * Every value is written fresh rather than reusing Ruby's own backreference scheme for a
273
+ * repeated string, symbol or object - valid Marshal either way, since backreferences are an
274
+ * optional size optimisation, not something a reader is required to produce. A save written
275
+ * this way is larger than Ruby's own `Marshal.dump` would make it, never incorrect.
276
+ * `RubyUserDefined` (a `_dump`/`_load` value) cannot be re-encoded at all, for the same
277
+ * reason `decodeMarshal` cannot interpret its bytes: that per-class binary layout is a
278
+ * second format this module was never taught.
279
+ */
280
+ export function encodeMarshal(value) {
281
+ const chunks = [MARSHAL_MAJOR, MARSHAL_MINOR];
282
+ writeValue(chunks, value);
283
+ return new Uint8Array(chunks);
284
+ }
285
+ function writeValue(out, value) {
286
+ if (value === null || value === undefined) {
287
+ out.push(char('0'));
288
+ }
289
+ else if (value === true) {
290
+ out.push(char('T'));
291
+ }
292
+ else if (value === false) {
293
+ out.push(char('F'));
294
+ }
295
+ else if (value instanceof RubySymbol) {
296
+ out.push(char(':'));
297
+ writeByteString(out, value.name);
298
+ }
299
+ else if (typeof value === 'number') {
300
+ if (Number.isInteger(value) && Math.abs(value) < 2 ** 30) {
301
+ out.push(char('i'));
302
+ writeFixnum(out, value);
303
+ }
304
+ else {
305
+ out.push(char('f'));
306
+ writeByteString(out, Number.isFinite(value) ? String(value) : value > 0 ? 'inf' : value < 0 ? '-inf' : 'nan');
307
+ }
308
+ }
309
+ else if (typeof value === 'string') {
310
+ out.push(char('"'));
311
+ writeByteString(out, value);
312
+ }
313
+ else if (Array.isArray(value)) {
314
+ out.push(char('['));
315
+ writeFixnum(out, value.length);
316
+ for (const item of value)
317
+ writeValue(out, item);
318
+ }
319
+ else if (value instanceof Map) {
320
+ const hasDefault = hashDefaults.has(value);
321
+ out.push(char(hasDefault ? '}' : '{'));
322
+ writeFixnum(out, value.size);
323
+ for (const [key, entry] of value) {
324
+ writeValue(out, key);
325
+ writeValue(out, entry);
326
+ }
327
+ if (hasDefault)
328
+ writeValue(out, hashDefaults.get(value));
329
+ }
330
+ else if (isRubyObject(value)) {
331
+ out.push(char('o'));
332
+ out.push(char(':'));
333
+ writeByteString(out, value.class);
334
+ const entries = Object.entries(value.ivars);
335
+ writeFixnum(out, entries.length);
336
+ for (const [name, ivarValue] of entries) {
337
+ out.push(char(':'));
338
+ writeByteString(out, name);
339
+ writeValue(out, ivarValue);
340
+ }
341
+ }
342
+ else {
343
+ throw new Error(`Marshal: cannot encode a value of type ${typeof value}`);
344
+ }
345
+ }
346
+ function char(c) {
347
+ return c.charCodeAt(0);
348
+ }
349
+ function writeByteString(out, text) {
350
+ const bytes = new TextEncoder().encode(text);
351
+ writeFixnum(out, bytes.length);
352
+ for (const byte of bytes)
353
+ out.push(byte);
354
+ }
355
+ /** the inverse of `Reader`'s `readFixnum` - see the module doc for the encoding this mirrors */
356
+ function writeFixnum(out, value) {
357
+ if (value === 0) {
358
+ out.push(0);
359
+ return;
360
+ }
361
+ if (value > 0 && value <= 122) {
362
+ out.push(value + 5);
363
+ return;
364
+ }
365
+ if (value < 0 && value >= -123) {
366
+ out.push((value - 5) & 0xff);
367
+ return;
368
+ }
369
+ //falls back to the smallest byte count (1-4) that round-trips through readFixnum
370
+ if (value > 0) {
371
+ for (let n = 1; n <= 4; n++) {
372
+ if (value < 2 ** (8 * n)) {
373
+ out.push(n);
374
+ for (let i = 0; i < n; i++)
375
+ out.push((value >>> (8 * i)) & 0xff);
376
+ return;
377
+ }
378
+ }
379
+ }
380
+ else {
381
+ for (let n = 1; n <= 4; n++) {
382
+ if (value >= -(2 ** (8 * n))) {
383
+ out.push((-n) & 0xff);
384
+ const unsigned = value + 2 ** (8 * n);
385
+ for (let i = 0; i < n; i++)
386
+ out.push((unsigned >>> (8 * i)) & 0xff);
387
+ return;
388
+ }
389
+ }
390
+ }
391
+ throw new Error(`Marshal: integer ${value} is out of range for a Fixnum`);
392
+ }
393
+ //# sourceMappingURL=Marshal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Marshal.js","sourceRoot":"","sources":["../../src/rpg/Marshal.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,17 @@ export interface QuestStage {
15
15
  };
16
16
  /** shown in a quest log's progress readout; `mwg` never reads this itself */
17
17
  description?: string;
18
+ /**
19
+ * Where this stage is satisfied, if anywhere in particular - "kill 5 rats" can
20
+ * optionally also say where the rats are. `mwg` only carries this data; turning it into
21
+ * a route or a compass arrow is `roguelike.Pathfinder`'s job (already has everything
22
+ * needed: `find`/`step`/`distanceMap`) plus the game's own presentation.
23
+ */
24
+ location?: {
25
+ map?: string;
26
+ x: number;
27
+ y: number;
28
+ };
18
29
  }
19
30
  export interface QuestDefinition {
20
31
  id: string;
@@ -23,6 +34,15 @@ export interface QuestDefinition {
23
34
  requires?: string[];
24
35
  }
25
36
  export type QuestStatus = 'unavailable' | 'available' | 'active' | 'complete';
37
+ /**
38
+ * What an NPC (or anything else tied to a quest) currently has to offer the player, derived
39
+ * the same way `Achievements`' unlocking already is rather than stored separately:
40
+ * `'offer'` if any tied quest could be started, `'turnIn'` if any is active and its current
41
+ * stage is already satisfied (ready to close out, whether or not the player has actually
42
+ * walked up and done so), `'none'` otherwise. The actual `!`, its colour, and where it
43
+ * floats above a sprite stay the game's own art and UI - this is only the derived bit.
44
+ */
45
+ export type QuestMarker = 'offer' | 'turnIn' | 'none';
26
46
  /**
27
47
  * Tracks which stage every known quest is on, against `GameState`'s existing switches and
28
48
  * variables - not a storage mechanism of its own. A quest's *definition* (its stages, its
@@ -33,7 +53,24 @@ export declare class QuestLog {
33
53
  private definitions;
34
54
  /** the stage index a started quest is on; absent means not yet started */
35
55
  private stageIndex;
56
+ /** the one active quest a game currently points the player towards, if any */
57
+ private tracked;
36
58
  define(quest: QuestDefinition): void;
59
+ /** marks `id` as the quest a game currently guides the player towards; `null` to clear it */
60
+ track(id: string | null): void;
61
+ /** the currently tracked quest id, or `null` if none is tracked or it is no longer active */
62
+ trackedQuest(): string | null;
63
+ /** where the tracked quest's current stage is satisfied, if it says anywhere at all */
64
+ trackedLocation(): {
65
+ map?: string;
66
+ x: number;
67
+ y: number;
68
+ } | null;
69
+ /**
70
+ * Derives what an NPC tied to `ids` currently has to offer - see `QuestMarker`. Checking
71
+ * several ids at once covers an NPC that gives one quest and takes in another.
72
+ */
73
+ markerFor(ids: readonly string[], state: GameState): QuestMarker;
37
74
  /** whether every prerequisite is already complete, so the quest could be started */
38
75
  canStart(id: string): boolean;
39
76
  /** begins a quest; throws if a prerequisite is not yet complete */
@@ -55,13 +92,17 @@ export declare class QuestLog {
55
92
  * @returns true if a stage (or the whole quest) completed this call
56
93
  */
57
94
  advance(id: string, state: GameState): boolean;
95
+ /** whether the current stage's condition or counter already holds, without advancing it */
96
+ private stageSatisfied;
58
97
  private require;
59
98
  toJSON(): {
60
99
  stageIndex: [string, number][];
100
+ tracked: string | null;
61
101
  };
62
102
  /** rebuilds a log from save data - `definitions` are supplied fresh, the same as `ITEMS` */
63
103
  static fromJSON(definitions: QuestDefinition[], data: {
64
104
  stageIndex: [string, number][];
105
+ tracked?: string | null;
65
106
  }): QuestLog;
66
107
  }
67
108
  //# sourceMappingURL=Quest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Quest.d.ts","sourceRoot":"","sources":["../../src/rpg/Quest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IAC1B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAE/C,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,EAAE,CAAC;IAErB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9E;;;;;GAKG;AACH,qBAAa,QAAQ;IACpB,OAAO,CAAC,WAAW,CAAsC;IAEzD,0EAA0E;IAC1E,OAAO,CAAC,UAAU,CAA6B;IAE/C,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEnC;IAED,oFAAoF;IACpF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAG5B;IAED,mEAAmE;IACnE,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGtB;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,CAK9B;IAED,uFAAuF;IACvF,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAG1C;IAED,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAIpD;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAa7C;IAED,OAAO,CAAC,OAAO;IAMf,MAAM,IAAI;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;KAAE,CAE3C;IAED,4FAA4F;IAC5F,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;KAAE,GAAG,QAAQ,CAKlG;CACD"}
1
+ {"version":3,"file":"Quest.d.ts","sourceRoot":"","sources":["../../src/rpg/Quest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IAC1B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAE/C,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,EAAE,CAAC;IAErB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtD;;;;;GAKG;AACH,qBAAa,QAAQ;IACpB,OAAO,CAAC,WAAW,CAAsC;IAEzD,0EAA0E;IAC1E,OAAO,CAAC,UAAU,CAA6B;IAE/C,8EAA8E;IAC9E,OAAO,CAAC,OAAO,CAAuB;IAEtC,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEnC;IAED,6FAA6F;IAC7F,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAG7B;IAED,6FAA6F;IAC7F,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5B;IAED,uFAAuF;IACvF,eAAe,IAAI;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAG/D;IAED;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,CAI/D;IAED,oFAAoF;IACpF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAG5B;IAED,mEAAmE;IACnE,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGtB;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,CAK9B;IAED,uFAAuF;IACvF,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAG1C;IAED,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAIpD;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAK7C;IAED,2FAA2F;IAC3F,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,OAAO;IAMf,MAAM,IAAI;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAEnE;IAED,4FAA4F;IAC5F,MAAM,CAAC,QAAQ,CACd,WAAW,EAAE,eAAe,EAAE,EAC9B,IAAI,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAC/D,QAAQ,CAMV;CACD"}
package/dist/rpg/Quest.js CHANGED
@@ -10,10 +10,38 @@ export class QuestLog {
10
10
  this.definitions = new Map();
11
11
  /** the stage index a started quest is on; absent means not yet started */
12
12
  this.stageIndex = new Map();
13
+ /** the one active quest a game currently points the player towards, if any */
14
+ this.tracked = null;
13
15
  }
14
16
  define(quest) {
15
17
  this.definitions.set(quest.id, quest);
16
18
  }
19
+ /** marks `id` as the quest a game currently guides the player towards; `null` to clear it */
20
+ track(id) {
21
+ if (id !== null)
22
+ this.require(id);
23
+ this.tracked = id;
24
+ }
25
+ /** the currently tracked quest id, or `null` if none is tracked or it is no longer active */
26
+ trackedQuest() {
27
+ return this.tracked !== null && this.status(this.tracked) === 'active' ? this.tracked : null;
28
+ }
29
+ /** where the tracked quest's current stage is satisfied, if it says anywhere at all */
30
+ trackedLocation() {
31
+ const id = this.trackedQuest();
32
+ return id ? (this.currentStage(id)?.location ?? null) : null;
33
+ }
34
+ /**
35
+ * Derives what an NPC tied to `ids` currently has to offer - see `QuestMarker`. Checking
36
+ * several ids at once covers an NPC that gives one quest and takes in another.
37
+ */
38
+ markerFor(ids, state) {
39
+ if (ids.some((id) => this.status(id) === 'active' && this.stageSatisfied(id, state)))
40
+ return 'turnIn';
41
+ if (ids.some((id) => this.status(id) === 'available'))
42
+ return 'offer';
43
+ return 'none';
44
+ }
17
45
  /** whether every prerequisite is already complete, so the quest could be started */
18
46
  canStart(id) {
19
47
  const quest = this.require(id);
@@ -57,18 +85,21 @@ export class QuestLog {
57
85
  * @returns true if a stage (or the whole quest) completed this call
58
86
  */
59
87
  advance(id, state) {
88
+ if (!this.stageSatisfied(id, state))
89
+ return false;
90
+ this.stageIndex.set(id, this.stageIndex.get(id) + 1);
91
+ return true;
92
+ }
93
+ /** whether the current stage's condition or counter already holds, without advancing it */
94
+ stageSatisfied(id, state) {
60
95
  const stage = this.currentStage(id);
61
96
  if (!stage)
62
97
  return false;
63
- const done = stage.condition
98
+ return stage.condition
64
99
  ? conditionHolds(stage.condition, state)
65
100
  : stage.counter
66
101
  ? state.variable(stage.counter.variable) >= stage.counter.target
67
102
  : true;
68
- if (!done)
69
- return false;
70
- this.stageIndex.set(id, this.stageIndex.get(id) + 1);
71
- return true;
72
103
  }
73
104
  require(id) {
74
105
  const quest = this.definitions.get(id);
@@ -77,7 +108,7 @@ export class QuestLog {
77
108
  return quest;
78
109
  }
79
110
  toJSON() {
80
- return { stageIndex: [...this.stageIndex] };
111
+ return { stageIndex: [...this.stageIndex], tracked: this.tracked };
81
112
  }
82
113
  /** rebuilds a log from save data - `definitions` are supplied fresh, the same as `ITEMS` */
83
114
  static fromJSON(definitions, data) {
@@ -86,6 +117,8 @@ export class QuestLog {
86
117
  log.define(quest);
87
118
  for (const [id, index] of data.stageIndex)
88
119
  log.stageIndex.set(id, index);
120
+ if (data.tracked)
121
+ log.tracked = data.tracked;
89
122
  return log;
90
123
  }
91
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Quest.js","sourceRoot":"","sources":["../../src/rpg/Quest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Quest.js","sourceRoot":"","sources":["../../src/rpg/Quest.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,12 @@ export { EventRunner } from './EventRunner.ts';
9
9
  export type { EventCommand, EventRunnerState, EventRunnerOptions, MoveStep } from './EventRunner.ts';
10
10
  export { GridMover } from './GridMover.ts';
11
11
  export type { GridMoverOptions, Direction4 } from './GridMover.ts';
12
+ export { FreeMover } from './FreeMover.ts';
13
+ export type { FreeMoverOptions } from './FreeMover.ts';
14
+ export { aabbOverlap, circleOverlap, circleAabbOverlap, resolveAabbAgainstTiles } from './Collision.ts';
15
+ export type { AABB, Circle, SolidTile, ResolveTileMoveOptions } from './Collision.ts';
12
16
  export { QuestLog } from './Quest.ts';
13
- export type { QuestStage, QuestDefinition, QuestStatus } from './Quest.ts';
17
+ export type { QuestStage, QuestDefinition, QuestStatus, QuestMarker } from './Quest.ts';
18
+ export { decodeMarshal, encodeMarshal, RubySymbol, hashDefaultOf, withHashDefault } from './Marshal.ts';
19
+ export type { RubyObject, RubyUserDefined } from './Marshal.ts';
14
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3H,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3H,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACxG,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACxG,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
package/dist/rpg/index.js CHANGED
@@ -4,5 +4,8 @@ export { GameState } from './GameState.js';
4
4
  export { activePage, conditionHolds } from './Event.js';
5
5
  export { EventRunner } from './EventRunner.js';
6
6
  export { GridMover } from './GridMover.js';
7
+ export { FreeMover } from './FreeMover.js';
8
+ export { aabbOverlap, circleOverlap, circleAabbOverlap, resolveAabbAgainstTiles } from './Collision.js';
7
9
  export { QuestLog } from './Quest.js';
10
+ export { decodeMarshal, encodeMarshal, RubySymbol, hashDefaultOf, withHashDefault } from './Marshal.js';
8
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rpg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rpg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAExG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}