@datamoc/mw_games 0.3.1 → 0.4.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 (478) hide show
  1. package/README.md +401 -395
  2. package/dist/actors/Affix.d.ts +26 -0
  3. package/dist/actors/Affix.d.ts.map +1 -1
  4. package/dist/actors/Affix.js +32 -1
  5. package/dist/actors/Affix.js.map +1 -1
  6. package/dist/actors/Barrier.d.ts +47 -0
  7. package/dist/actors/Barrier.d.ts.map +1 -0
  8. package/dist/actors/Barrier.js +70 -0
  9. package/dist/actors/Barrier.js.map +1 -0
  10. package/dist/actors/Charges.d.ts +22 -0
  11. package/dist/actors/Charges.d.ts.map +1 -1
  12. package/dist/actors/Charges.js +26 -0
  13. package/dist/actors/Charges.js.map +1 -1
  14. package/dist/actors/Equipment.d.ts +30 -0
  15. package/dist/actors/Equipment.d.ts.map +1 -1
  16. package/dist/actors/Equipment.js +33 -1
  17. package/dist/actors/Equipment.js.map +1 -1
  18. package/dist/actors/Inventory.d.ts +58 -3
  19. package/dist/actors/Inventory.d.ts.map +1 -1
  20. package/dist/actors/Inventory.js +97 -5
  21. package/dist/actors/Inventory.js.map +1 -1
  22. package/dist/actors/ItemState.d.ts +11 -2
  23. package/dist/actors/ItemState.d.ts.map +1 -1
  24. package/dist/actors/ItemState.js +18 -2
  25. package/dist/actors/ItemState.js.map +1 -1
  26. package/dist/actors/Loot.js +1 -1
  27. package/dist/actors/Loot.js.map +1 -1
  28. package/dist/actors/Progression.d.ts +9 -0
  29. package/dist/actors/Progression.d.ts.map +1 -1
  30. package/dist/actors/Progression.js +7 -0
  31. package/dist/actors/Progression.js.map +1 -1
  32. package/dist/actors/Resource.d.ts +16 -0
  33. package/dist/actors/Resource.d.ts.map +1 -1
  34. package/dist/actors/Resource.js +22 -0
  35. package/dist/actors/Resource.js.map +1 -1
  36. package/dist/actors/SkillPoints.d.ts +14 -0
  37. package/dist/actors/SkillPoints.d.ts.map +1 -1
  38. package/dist/actors/SkillPoints.js +16 -0
  39. package/dist/actors/SkillPoints.js.map +1 -1
  40. package/dist/actors/StatBlock.d.ts +16 -0
  41. package/dist/actors/StatBlock.d.ts.map +1 -1
  42. package/dist/actors/StatBlock.js +21 -0
  43. package/dist/actors/StatBlock.js.map +1 -1
  44. package/dist/actors/Support.d.ts +2 -2
  45. package/dist/actors/Support.d.ts.map +1 -1
  46. package/dist/actors/Support.js +2 -2
  47. package/dist/actors/Support.js.map +1 -1
  48. package/dist/actors/index.d.ts +8 -5
  49. package/dist/actors/index.d.ts.map +1 -1
  50. package/dist/actors/index.js +3 -2
  51. package/dist/actors/index.js.map +1 -1
  52. package/dist/assets/ByteProgress.d.ts +27 -0
  53. package/dist/assets/ByteProgress.d.ts.map +1 -0
  54. package/dist/assets/ByteProgress.js +44 -0
  55. package/dist/assets/ByteProgress.js.map +1 -0
  56. package/dist/assets/Streaming.d.ts +1 -1
  57. package/dist/assets/Streaming.js +1 -1
  58. package/dist/assets/Streaming.js.map +1 -1
  59. package/dist/assets/index.d.ts +11 -52
  60. package/dist/assets/index.d.ts.map +1 -1
  61. package/dist/assets/index.js +9 -80
  62. package/dist/assets/index.js.map +1 -1
  63. package/dist/assets/loader.d.ts +34 -0
  64. package/dist/assets/loader.d.ts.map +1 -0
  65. package/dist/assets/loader.js +61 -0
  66. package/dist/assets/loader.js.map +1 -0
  67. package/dist/assets/paths.d.ts +40 -0
  68. package/dist/assets/paths.d.ts.map +1 -0
  69. package/dist/assets/paths.js +49 -0
  70. package/dist/assets/paths.js.map +1 -0
  71. package/dist/audio/Playable.js +1 -1
  72. package/dist/battle/Field.d.ts +2 -2
  73. package/dist/battle/Field.d.ts.map +1 -1
  74. package/dist/battle/Field.js +3 -3
  75. package/dist/battle/Field.js.map +1 -1
  76. package/dist/battle/Hooks.d.ts +7 -13
  77. package/dist/battle/Hooks.d.ts.map +1 -1
  78. package/dist/battle/Hooks.js +20 -18
  79. package/dist/battle/Hooks.js.map +1 -1
  80. package/dist/core/Hooks.d.ts +34 -0
  81. package/dist/core/Hooks.d.ts.map +1 -0
  82. package/dist/core/Hooks.js +33 -0
  83. package/dist/core/Hooks.js.map +1 -0
  84. package/dist/core/Input.d.ts +41 -0
  85. package/dist/core/Input.d.ts.map +1 -1
  86. package/dist/core/Input.js +126 -21
  87. package/dist/core/Input.js.map +1 -1
  88. package/dist/core/PlayerInput.d.ts +5 -0
  89. package/dist/core/PlayerInput.d.ts.map +1 -1
  90. package/dist/core/PlayerInput.js +11 -0
  91. package/dist/core/PlayerInput.js.map +1 -1
  92. package/dist/core/Random.d.ts +14 -5
  93. package/dist/core/Random.d.ts.map +1 -1
  94. package/dist/core/Random.js +14 -5
  95. package/dist/core/Random.js.map +1 -1
  96. package/dist/core/Scene.d.ts +16 -6
  97. package/dist/core/Scene.d.ts.map +1 -1
  98. package/dist/core/Scene.js +18 -6
  99. package/dist/core/Scene.js.map +1 -1
  100. package/dist/core/SceneStack.d.ts +8 -4
  101. package/dist/core/SceneStack.d.ts.map +1 -1
  102. package/dist/core/SceneStack.js +4 -0
  103. package/dist/core/SceneStack.js.map +1 -1
  104. package/dist/core/index.d.ts +3 -2
  105. package/dist/core/index.d.ts.map +1 -1
  106. package/dist/core/index.js +1 -1
  107. package/dist/core/index.js.map +1 -1
  108. package/dist/index.d.ts +4 -5
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +4 -5
  111. package/dist/index.js.map +1 -1
  112. package/dist/mw_games.global.js +88 -88
  113. package/dist/roguelike/Boss.d.ts +4 -4
  114. package/dist/roguelike/Boss.d.ts.map +1 -1
  115. package/dist/roguelike/Boss.js +6 -6
  116. package/dist/roguelike/Boss.js.map +1 -1
  117. package/dist/roguelike/Combat.d.ts +10 -11
  118. package/dist/roguelike/Combat.d.ts.map +1 -1
  119. package/dist/roguelike/Combat.js +9 -16
  120. package/dist/roguelike/Combat.js.map +1 -1
  121. package/dist/roguelike/ContentRoll.d.ts +43 -0
  122. package/dist/roguelike/ContentRoll.d.ts.map +1 -0
  123. package/dist/roguelike/ContentRoll.js +38 -0
  124. package/dist/roguelike/ContentRoll.js.map +1 -0
  125. package/dist/roguelike/DungeonParity.d.ts +42 -0
  126. package/dist/roguelike/DungeonParity.d.ts.map +1 -0
  127. package/dist/roguelike/DungeonParity.js +63 -0
  128. package/dist/roguelike/DungeonParity.js.map +1 -0
  129. package/dist/roguelike/Features.d.ts +42 -0
  130. package/dist/roguelike/Features.d.ts.map +1 -0
  131. package/dist/roguelike/Features.js +59 -0
  132. package/dist/roguelike/Features.js.map +1 -0
  133. package/dist/roguelike/MonsterAI.js +1 -1
  134. package/dist/roguelike/MonsterAI.js.map +1 -1
  135. package/dist/roguelike/MultiStageAbility.d.ts +43 -0
  136. package/dist/roguelike/MultiStageAbility.d.ts.map +1 -0
  137. package/dist/roguelike/MultiStageAbility.js +60 -0
  138. package/dist/roguelike/MultiStageAbility.js.map +1 -0
  139. package/dist/roguelike/RoomBuilders.d.ts +43 -0
  140. package/dist/roguelike/RoomBuilders.d.ts.map +1 -0
  141. package/dist/roguelike/RoomBuilders.js +40 -0
  142. package/dist/roguelike/RoomBuilders.js.map +1 -0
  143. package/dist/roguelike/Targeting.d.ts +22 -0
  144. package/dist/roguelike/Targeting.d.ts.map +1 -1
  145. package/dist/roguelike/Targeting.js +20 -0
  146. package/dist/roguelike/Targeting.js.map +1 -1
  147. package/dist/roguelike/TriggerTracker.d.ts +36 -0
  148. package/dist/roguelike/TriggerTracker.d.ts.map +1 -0
  149. package/dist/roguelike/TriggerTracker.js +49 -0
  150. package/dist/roguelike/TriggerTracker.js.map +1 -0
  151. package/dist/roguelike/generate.d.ts +49 -0
  152. package/dist/roguelike/generate.d.ts.map +1 -1
  153. package/dist/roguelike/generate.js +38 -10
  154. package/dist/roguelike/generate.js.map +1 -1
  155. package/dist/roguelike/index.d.ts +16 -4
  156. package/dist/roguelike/index.d.ts.map +1 -1
  157. package/dist/roguelike/index.js +8 -2
  158. package/dist/roguelike/index.js.map +1 -1
  159. package/dist/rpg/EventRunner.d.ts +30 -8
  160. package/dist/rpg/EventRunner.d.ts.map +1 -1
  161. package/dist/rpg/EventRunner.js +1 -13
  162. package/dist/rpg/EventRunner.js.map +1 -1
  163. package/dist/rpg/FreeMover.d.ts +2 -2
  164. package/dist/rpg/FreeMover.d.ts.map +1 -1
  165. package/dist/rpg/FreeMover.js +5 -5
  166. package/dist/rpg/FreeMover.js.map +1 -1
  167. package/dist/rpg/GridMover.d.ts +2 -2
  168. package/dist/rpg/GridMover.d.ts.map +1 -1
  169. package/dist/rpg/GridMover.js +5 -5
  170. package/dist/rpg/GridMover.js.map +1 -1
  171. package/dist/rpg/MovableSprite.d.ts +25 -0
  172. package/dist/rpg/MovableSprite.d.ts.map +1 -0
  173. package/dist/rpg/MovableSprite.js +2 -0
  174. package/dist/rpg/MovableSprite.js.map +1 -0
  175. package/dist/rpg/Quest.d.ts +6 -1
  176. package/dist/rpg/Quest.d.ts.map +1 -1
  177. package/dist/rpg/Quest.js +6 -1
  178. package/dist/rpg/Quest.js.map +1 -1
  179. package/dist/rpg/automap.d.ts +24 -2
  180. package/dist/rpg/automap.d.ts.map +1 -1
  181. package/dist/rpg/automap.js +9 -1
  182. package/dist/rpg/automap.js.map +1 -1
  183. package/dist/rpg/index.d.ts +4 -4
  184. package/dist/rpg/index.d.ts.map +1 -1
  185. package/dist/rpg/index.js +1 -1
  186. package/dist/rpg/index.js.map +1 -1
  187. package/dist/three-d/Character3D.d.ts +26 -1
  188. package/dist/three-d/Character3D.d.ts.map +1 -1
  189. package/dist/three-d/Character3D.js +31 -14
  190. package/dist/three-d/Character3D.js.map +1 -1
  191. package/dist/three-d/Collision3D.d.ts +63 -0
  192. package/dist/three-d/Collision3D.d.ts.map +1 -0
  193. package/dist/three-d/Collision3D.js +75 -0
  194. package/dist/three-d/Collision3D.js.map +1 -0
  195. package/dist/three-d/Models.js +1 -1
  196. package/dist/three-d/index.d.ts +3 -1
  197. package/dist/three-d/index.d.ts.map +1 -1
  198. package/dist/three-d/index.js +1 -0
  199. package/dist/three-d/index.js.map +1 -1
  200. package/dist/{core → two-d}/Game.d.ts +7 -6
  201. package/dist/two-d/Game.d.ts.map +1 -0
  202. package/dist/{core → two-d}/Game.js +3 -3
  203. package/dist/two-d/Game.js.map +1 -0
  204. package/dist/two-d/Scene2D.d.ts +19 -0
  205. package/dist/two-d/Scene2D.d.ts.map +1 -0
  206. package/dist/two-d/Scene2D.js +23 -0
  207. package/dist/two-d/Scene2D.js.map +1 -0
  208. package/dist/two-d/index.d.ts +20 -0
  209. package/dist/two-d/index.d.ts.map +1 -0
  210. package/dist/two-d/index.js +18 -0
  211. package/dist/two-d/index.js.map +1 -0
  212. package/dist/two-d/render/ActorAnimator.d.ts.map +1 -0
  213. package/dist/two-d/render/ActorAnimator.js.map +1 -0
  214. package/dist/two-d/render/AnimatedSprite.d.ts.map +1 -0
  215. package/dist/two-d/render/AnimatedSprite.js.map +1 -0
  216. package/dist/two-d/render/Autotile.d.ts.map +1 -0
  217. package/dist/two-d/render/Autotile.js.map +1 -0
  218. package/dist/two-d/render/Camera.d.ts.map +1 -0
  219. package/dist/{render → two-d/render}/Camera.js +2 -2
  220. package/dist/two-d/render/Camera.js.map +1 -0
  221. package/dist/two-d/render/Capabilities.d.ts.map +1 -0
  222. package/dist/two-d/render/Capabilities.js.map +1 -0
  223. package/dist/two-d/render/ColorBlindness.d.ts.map +1 -0
  224. package/dist/two-d/render/ColorBlindness.js.map +1 -0
  225. package/dist/two-d/render/ColorTransformBatcher.d.ts.map +1 -0
  226. package/dist/{render → two-d/render}/ColorTransformBatcher.js +3 -2
  227. package/dist/two-d/render/ColorTransformBatcher.js.map +1 -0
  228. package/dist/two-d/render/LayeredSprite.d.ts.map +1 -0
  229. package/dist/two-d/render/LayeredSprite.js.map +1 -0
  230. package/dist/two-d/render/Minimap.d.ts.map +1 -0
  231. package/dist/{render → two-d/render}/Minimap.js +1 -1
  232. package/dist/two-d/render/Minimap.js.map +1 -0
  233. package/dist/two-d/render/Particles.d.ts +109 -0
  234. package/dist/two-d/render/Particles.d.ts.map +1 -0
  235. package/dist/two-d/render/Particles.js +178 -0
  236. package/dist/two-d/render/Particles.js.map +1 -0
  237. package/dist/two-d/render/Projectile.d.ts.map +1 -0
  238. package/dist/two-d/render/Projectile.js.map +1 -0
  239. package/dist/two-d/render/ScreenEffects.d.ts +71 -0
  240. package/dist/two-d/render/ScreenEffects.d.ts.map +1 -0
  241. package/dist/two-d/render/ScreenEffects.js +133 -0
  242. package/dist/two-d/render/ScreenEffects.js.map +1 -0
  243. package/dist/two-d/render/SpriteSheet.d.ts.map +1 -0
  244. package/dist/{render → two-d/render}/SpriteSheet.js +1 -1
  245. package/dist/two-d/render/SpriteSheet.js.map +1 -0
  246. package/dist/two-d/render/StatusVisuals.d.ts.map +1 -0
  247. package/dist/two-d/render/StatusVisuals.js.map +1 -0
  248. package/dist/two-d/render/TileMap.d.ts.map +1 -0
  249. package/dist/{render → two-d/render}/TileMap.js +1 -1
  250. package/dist/two-d/render/TileMap.js.map +1 -0
  251. package/dist/{rpg → two-d/render}/TiledMap.d.ts +2 -2
  252. package/dist/two-d/render/TiledMap.d.ts.map +1 -0
  253. package/dist/{rpg → two-d/render}/TiledMap.js +2 -2
  254. package/dist/two-d/render/TiledMap.js.map +1 -0
  255. package/dist/two-d/render/TintedSprite.d.ts.map +1 -0
  256. package/dist/two-d/render/TintedSprite.js.map +1 -0
  257. package/dist/two-d/render/Viewport.d.ts.map +1 -0
  258. package/dist/two-d/render/Viewport.js.map +1 -0
  259. package/dist/{render → two-d/render}/index.d.ts +6 -0
  260. package/dist/two-d/render/index.d.ts.map +1 -0
  261. package/dist/{render → two-d/render}/index.js +3 -0
  262. package/dist/two-d/render/index.js.map +1 -0
  263. package/dist/two-d/stage/DialogueStage.d.ts.map +1 -0
  264. package/dist/{stage → two-d/stage}/DialogueStage.js +1 -1
  265. package/dist/two-d/stage/DialogueStage.js.map +1 -0
  266. package/dist/two-d/stage/index.d.ts.map +1 -0
  267. package/dist/two-d/stage/index.js.map +1 -0
  268. package/dist/two-d/stage/script.d.ts.map +1 -0
  269. package/dist/{stage → two-d/stage}/script.js +0 -0
  270. package/dist/two-d/stage/script.js.map +1 -0
  271. package/dist/two-d/stage/twee.d.ts.map +1 -0
  272. package/dist/two-d/stage/twee.js.map +1 -0
  273. package/dist/two-d/ui/Bar.d.ts.map +1 -0
  274. package/dist/two-d/ui/Bar.js.map +1 -0
  275. package/dist/two-d/ui/BitmapLabel.d.ts.map +1 -0
  276. package/dist/two-d/ui/BitmapLabel.js.map +1 -0
  277. package/dist/{ui → two-d/ui}/Button.d.ts +7 -1
  278. package/dist/two-d/ui/Button.d.ts.map +1 -0
  279. package/dist/{ui → two-d/ui}/Button.js +20 -4
  280. package/dist/two-d/ui/Button.js.map +1 -0
  281. package/dist/two-d/ui/EventDialogue.d.ts +23 -0
  282. package/dist/two-d/ui/EventDialogue.d.ts.map +1 -0
  283. package/dist/two-d/ui/EventDialogue.js +27 -0
  284. package/dist/two-d/ui/EventDialogue.js.map +1 -0
  285. package/dist/two-d/ui/FloatingText.d.ts.map +1 -0
  286. package/dist/two-d/ui/FloatingText.js.map +1 -0
  287. package/dist/{ui → two-d/ui}/HelpScreen.d.ts +1 -1
  288. package/dist/two-d/ui/HelpScreen.d.ts.map +1 -0
  289. package/dist/two-d/ui/HelpScreen.js.map +1 -0
  290. package/dist/{ui → two-d/ui}/IconGrid.d.ts +1 -1
  291. package/dist/two-d/ui/IconGrid.d.ts.map +1 -0
  292. package/dist/two-d/ui/IconGrid.js.map +1 -0
  293. package/dist/two-d/ui/Label.d.ts.map +1 -0
  294. package/dist/two-d/ui/Label.js.map +1 -0
  295. package/dist/{ui → two-d/ui}/ListView.d.ts +1 -1
  296. package/dist/two-d/ui/ListView.d.ts.map +1 -0
  297. package/dist/two-d/ui/ListView.js.map +1 -0
  298. package/dist/{ui → two-d/ui}/LoadingScreen.d.ts +1 -1
  299. package/dist/two-d/ui/LoadingScreen.d.ts.map +1 -0
  300. package/dist/two-d/ui/LoadingScreen.js.map +1 -0
  301. package/dist/{ui → two-d/ui}/MessageBox.d.ts +1 -1
  302. package/dist/two-d/ui/MessageBox.d.ts.map +1 -0
  303. package/dist/two-d/ui/MessageBox.js.map +1 -0
  304. package/dist/two-d/ui/NinePatch.d.ts.map +1 -0
  305. package/dist/two-d/ui/NinePatch.js.map +1 -0
  306. package/dist/{ui → two-d/ui}/RebindScreen.d.ts +1 -1
  307. package/dist/two-d/ui/RebindScreen.d.ts.map +1 -0
  308. package/dist/{ui → two-d/ui}/RebindScreen.js +1 -1
  309. package/dist/two-d/ui/RebindScreen.js.map +1 -0
  310. package/dist/two-d/ui/StatsScreen.d.ts.map +1 -0
  311. package/dist/two-d/ui/StatsScreen.js.map +1 -0
  312. package/dist/two-d/ui/Toast.d.ts.map +1 -0
  313. package/dist/{ui → two-d/ui}/Toast.js +1 -1
  314. package/dist/two-d/ui/Toast.js.map +1 -0
  315. package/dist/two-d/ui/Tooltip.d.ts +94 -0
  316. package/dist/two-d/ui/Tooltip.d.ts.map +1 -0
  317. package/dist/two-d/ui/Tooltip.js +149 -0
  318. package/dist/two-d/ui/Tooltip.js.map +1 -0
  319. package/dist/two-d/ui/VerticalLabel.d.ts.map +1 -0
  320. package/dist/two-d/ui/VerticalLabel.js.map +1 -0
  321. package/dist/{ui → two-d/ui}/Window.d.ts +2 -2
  322. package/dist/two-d/ui/Window.d.ts.map +1 -0
  323. package/dist/{ui → two-d/ui}/Window.js +1 -1
  324. package/dist/two-d/ui/Window.js.map +1 -0
  325. package/dist/two-d/ui/WindowStack.d.ts.map +1 -0
  326. package/dist/{ui → two-d/ui}/WindowStack.js +1 -1
  327. package/dist/two-d/ui/WindowStack.js.map +1 -0
  328. package/dist/{ui → two-d/ui}/index.d.ts +4 -0
  329. package/dist/two-d/ui/index.d.ts.map +1 -0
  330. package/dist/{ui → two-d/ui}/index.js +2 -0
  331. package/dist/two-d/ui/index.js.map +1 -0
  332. package/dist/{ui → two-d/ui}/theme.d.ts +2 -2
  333. package/dist/two-d/ui/theme.d.ts.map +1 -0
  334. package/dist/{ui → two-d/ui}/theme.js +1 -1
  335. package/dist/two-d/ui/theme.js.map +1 -0
  336. package/dist/version.d.ts +1 -1
  337. package/dist/version.js +1 -1
  338. package/dist/world/Encounters.js +1 -1
  339. package/dist/world/Encounters.js.map +1 -1
  340. package/dist/world/Environment.d.ts +12 -3
  341. package/dist/world/Environment.d.ts.map +1 -1
  342. package/dist/world/Environment.js +18 -9
  343. package/dist/world/Environment.js.map +1 -1
  344. package/package.json +227 -147
  345. package/dist/core/Game.d.ts.map +0 -1
  346. package/dist/core/Game.js.map +0 -1
  347. package/dist/render/ActorAnimator.d.ts.map +0 -1
  348. package/dist/render/ActorAnimator.js.map +0 -1
  349. package/dist/render/AnimatedSprite.d.ts.map +0 -1
  350. package/dist/render/AnimatedSprite.js.map +0 -1
  351. package/dist/render/Autotile.d.ts.map +0 -1
  352. package/dist/render/Autotile.js.map +0 -1
  353. package/dist/render/Camera.d.ts.map +0 -1
  354. package/dist/render/Camera.js.map +0 -1
  355. package/dist/render/Capabilities.d.ts.map +0 -1
  356. package/dist/render/Capabilities.js.map +0 -1
  357. package/dist/render/ColorBlindness.d.ts.map +0 -1
  358. package/dist/render/ColorBlindness.js.map +0 -1
  359. package/dist/render/ColorTransformBatcher.d.ts.map +0 -1
  360. package/dist/render/ColorTransformBatcher.js.map +0 -1
  361. package/dist/render/LayeredSprite.d.ts.map +0 -1
  362. package/dist/render/LayeredSprite.js.map +0 -1
  363. package/dist/render/Minimap.d.ts.map +0 -1
  364. package/dist/render/Minimap.js.map +0 -1
  365. package/dist/render/Projectile.d.ts.map +0 -1
  366. package/dist/render/Projectile.js.map +0 -1
  367. package/dist/render/SpriteSheet.d.ts.map +0 -1
  368. package/dist/render/SpriteSheet.js.map +0 -1
  369. package/dist/render/StatusVisuals.d.ts.map +0 -1
  370. package/dist/render/StatusVisuals.js.map +0 -1
  371. package/dist/render/TileMap.d.ts.map +0 -1
  372. package/dist/render/TileMap.js.map +0 -1
  373. package/dist/render/TintedSprite.d.ts.map +0 -1
  374. package/dist/render/TintedSprite.js.map +0 -1
  375. package/dist/render/Viewport.d.ts.map +0 -1
  376. package/dist/render/Viewport.js.map +0 -1
  377. package/dist/render/index.d.ts.map +0 -1
  378. package/dist/render/index.js.map +0 -1
  379. package/dist/rpg/TiledMap.d.ts.map +0 -1
  380. package/dist/rpg/TiledMap.js.map +0 -1
  381. package/dist/stage/DialogueStage.d.ts.map +0 -1
  382. package/dist/stage/DialogueStage.js.map +0 -1
  383. package/dist/stage/index.d.ts.map +0 -1
  384. package/dist/stage/index.js.map +0 -1
  385. package/dist/stage/script.d.ts.map +0 -1
  386. package/dist/stage/script.js.map +0 -1
  387. package/dist/stage/twee.d.ts.map +0 -1
  388. package/dist/stage/twee.js.map +0 -1
  389. package/dist/ui/Bar.d.ts.map +0 -1
  390. package/dist/ui/Bar.js.map +0 -1
  391. package/dist/ui/BitmapLabel.d.ts.map +0 -1
  392. package/dist/ui/BitmapLabel.js.map +0 -1
  393. package/dist/ui/Button.d.ts.map +0 -1
  394. package/dist/ui/Button.js.map +0 -1
  395. package/dist/ui/FloatingText.d.ts.map +0 -1
  396. package/dist/ui/FloatingText.js.map +0 -1
  397. package/dist/ui/HelpScreen.d.ts.map +0 -1
  398. package/dist/ui/HelpScreen.js.map +0 -1
  399. package/dist/ui/IconGrid.d.ts.map +0 -1
  400. package/dist/ui/IconGrid.js.map +0 -1
  401. package/dist/ui/Label.d.ts.map +0 -1
  402. package/dist/ui/Label.js.map +0 -1
  403. package/dist/ui/ListView.d.ts.map +0 -1
  404. package/dist/ui/ListView.js.map +0 -1
  405. package/dist/ui/LoadingScreen.d.ts.map +0 -1
  406. package/dist/ui/LoadingScreen.js.map +0 -1
  407. package/dist/ui/MessageBox.d.ts.map +0 -1
  408. package/dist/ui/MessageBox.js.map +0 -1
  409. package/dist/ui/NinePatch.d.ts.map +0 -1
  410. package/dist/ui/NinePatch.js.map +0 -1
  411. package/dist/ui/RebindScreen.d.ts.map +0 -1
  412. package/dist/ui/RebindScreen.js.map +0 -1
  413. package/dist/ui/StatsScreen.d.ts.map +0 -1
  414. package/dist/ui/StatsScreen.js.map +0 -1
  415. package/dist/ui/Toast.d.ts.map +0 -1
  416. package/dist/ui/Toast.js.map +0 -1
  417. package/dist/ui/VerticalLabel.d.ts.map +0 -1
  418. package/dist/ui/VerticalLabel.js.map +0 -1
  419. package/dist/ui/Window.d.ts.map +0 -1
  420. package/dist/ui/Window.js.map +0 -1
  421. package/dist/ui/WindowStack.d.ts.map +0 -1
  422. package/dist/ui/WindowStack.js.map +0 -1
  423. package/dist/ui/index.d.ts.map +0 -1
  424. package/dist/ui/index.js.map +0 -1
  425. package/dist/ui/theme.d.ts.map +0 -1
  426. package/dist/ui/theme.js.map +0 -1
  427. /package/dist/{render → two-d/render}/ActorAnimator.d.ts +0 -0
  428. /package/dist/{render → two-d/render}/ActorAnimator.js +0 -0
  429. /package/dist/{render → two-d/render}/AnimatedSprite.d.ts +0 -0
  430. /package/dist/{render → two-d/render}/AnimatedSprite.js +0 -0
  431. /package/dist/{render → two-d/render}/Autotile.d.ts +0 -0
  432. /package/dist/{render → two-d/render}/Autotile.js +0 -0
  433. /package/dist/{render → two-d/render}/Camera.d.ts +0 -0
  434. /package/dist/{render → two-d/render}/Capabilities.d.ts +0 -0
  435. /package/dist/{render → two-d/render}/Capabilities.js +0 -0
  436. /package/dist/{render → two-d/render}/ColorBlindness.d.ts +0 -0
  437. /package/dist/{render → two-d/render}/ColorBlindness.js +0 -0
  438. /package/dist/{render → two-d/render}/ColorTransformBatcher.d.ts +0 -0
  439. /package/dist/{render → two-d/render}/LayeredSprite.d.ts +0 -0
  440. /package/dist/{render → two-d/render}/LayeredSprite.js +0 -0
  441. /package/dist/{render → two-d/render}/Minimap.d.ts +0 -0
  442. /package/dist/{render → two-d/render}/Projectile.d.ts +0 -0
  443. /package/dist/{render → two-d/render}/Projectile.js +0 -0
  444. /package/dist/{render → two-d/render}/SpriteSheet.d.ts +0 -0
  445. /package/dist/{render → two-d/render}/StatusVisuals.d.ts +0 -0
  446. /package/dist/{render → two-d/render}/StatusVisuals.js +0 -0
  447. /package/dist/{render → two-d/render}/TileMap.d.ts +0 -0
  448. /package/dist/{render → two-d/render}/TintedSprite.d.ts +0 -0
  449. /package/dist/{render → two-d/render}/TintedSprite.js +0 -0
  450. /package/dist/{render → two-d/render}/Viewport.d.ts +0 -0
  451. /package/dist/{render → two-d/render}/Viewport.js +0 -0
  452. /package/dist/{stage → two-d/stage}/DialogueStage.d.ts +0 -0
  453. /package/dist/{stage → two-d/stage}/index.d.ts +0 -0
  454. /package/dist/{stage → two-d/stage}/index.js +0 -0
  455. /package/dist/{stage → two-d/stage}/script.d.ts +0 -0
  456. /package/dist/{stage → two-d/stage}/twee.d.ts +0 -0
  457. /package/dist/{stage → two-d/stage}/twee.js +0 -0
  458. /package/dist/{ui → two-d/ui}/Bar.d.ts +0 -0
  459. /package/dist/{ui → two-d/ui}/Bar.js +0 -0
  460. /package/dist/{ui → two-d/ui}/BitmapLabel.d.ts +0 -0
  461. /package/dist/{ui → two-d/ui}/BitmapLabel.js +0 -0
  462. /package/dist/{ui → two-d/ui}/FloatingText.d.ts +0 -0
  463. /package/dist/{ui → two-d/ui}/FloatingText.js +0 -0
  464. /package/dist/{ui → two-d/ui}/HelpScreen.js +0 -0
  465. /package/dist/{ui → two-d/ui}/IconGrid.js +0 -0
  466. /package/dist/{ui → two-d/ui}/Label.d.ts +0 -0
  467. /package/dist/{ui → two-d/ui}/Label.js +0 -0
  468. /package/dist/{ui → two-d/ui}/ListView.js +0 -0
  469. /package/dist/{ui → two-d/ui}/LoadingScreen.js +0 -0
  470. /package/dist/{ui → two-d/ui}/MessageBox.js +0 -0
  471. /package/dist/{ui → two-d/ui}/NinePatch.d.ts +0 -0
  472. /package/dist/{ui → two-d/ui}/NinePatch.js +0 -0
  473. /package/dist/{ui → two-d/ui}/StatsScreen.d.ts +0 -0
  474. /package/dist/{ui → two-d/ui}/StatsScreen.js +0 -0
  475. /package/dist/{ui → two-d/ui}/Toast.d.ts +0 -0
  476. /package/dist/{ui → two-d/ui}/VerticalLabel.d.ts +0 -0
  477. /package/dist/{ui → two-d/ui}/VerticalLabel.js +0 -0
  478. /package/dist/{ui → two-d/ui}/WindowStack.d.ts +0 -0
@@ -11,9 +11,22 @@ import type { InventoryItem } from './Inventory.ts';
11
11
  * itself when that trigger fires, the same way `Move.effects` is data `mwg` never reads.
12
12
  */
13
13
  export type AffixTrigger = 'strike' | 'defend' | 'passive';
14
+ /** the kind of action a `strike`/`defend` trigger fired from - melee, thrown, a bow, an ability */
15
+ export type AttackKind = 'melee' | 'thrown' | 'bow' | 'ability' | string;
16
+ /** what actually happened, for `matchesContext` to check an affix against */
17
+ export interface AffixContext {
18
+ trigger: AffixTrigger;
19
+ kind?: AttackKind;
20
+ }
14
21
  export interface AffixDef {
15
22
  id: string;
16
23
  trigger: AffixTrigger;
24
+ /**
25
+ * restricts this affix to specific attack kinds within its trigger (a "bow only" affix on
26
+ * a `strike` trigger); omitted, the affix fires for any kind, the same as before this
27
+ * existed
28
+ */
29
+ kinds?: readonly AttackKind[];
17
30
  /** relative likelihood within its own table; 0 never rolls */
18
31
  weight: number;
19
32
  /** a curse locks the item (see `EquipmentSlots`' lock option) once identified */
@@ -41,4 +54,17 @@ export declare function affixOf(item: InventoryItem): string | undefined;
41
54
  export declare function applyAffix(item: InventoryItem, affix: AffixDef): void;
42
55
  /** removes an item's affix (and its curse mark, if the affix was a curse) */
43
56
  export declare function removeAffix(item: InventoryItem): void;
57
+ /**
58
+ * Copies `from`'s affix (and curse mark) onto `to`, replacing whatever `to` already had -
59
+ * "transfer" an enchantment or rune between item instances. Clears `to`'s affix when `from`
60
+ * carries none. A true transfer (move rather than copy) is this plus `removeAffix(from)`,
61
+ * left to the caller rather than a second near-identical function.
62
+ */
63
+ export declare function copyAffix(from: InventoryItem, to: InventoryItem): void;
64
+ /**
65
+ * Whether `affix` should fire for `context`: the trigger must match, and when the affix
66
+ * restricts itself to specific attack `kinds`, `context.kind` must be one of them. An affix
67
+ * with no `kinds` fires for any attack kind, unchanged from before this existed.
68
+ */
69
+ export declare function matchesContext(affix: AffixDef, context: AffixContext): boolean;
44
70
  //# sourceMappingURL=Affix.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Affix.d.ts","sourceRoot":"","sources":["../../src/actors/Affix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IAEX,OAAO,EAAE,YAAY,CAAC;IAEtB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAK5D;AAED,yFAAyF;AACzF,wBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAGrE;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAGrD"}
1
+ {"version":3,"file":"Affix.d.ts","sourceRoot":"","sources":["../../src/actors/Affix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3D,mGAAmG;AACnG,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzE,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IAEX,OAAO,EAAE,YAAY,CAAC;IAEtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAE9B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAK5D;AAED,yFAAyF;AACzF,wBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAOrE;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAGrD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,GAAG,IAAI,CAOtE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAI9E"}
@@ -10,7 +10,7 @@ export function rollAffix(table) {
10
10
  if (live.length === 0)
11
11
  return null;
12
12
  const index = Random.weighted(live.map((entry) => entry.weight));
13
- return index === -1 ? null : live[index];
13
+ return index === null ? null : live[index];
14
14
  }
15
15
  /** the affix an item carries, if any - stored on the item next to its upgrade `level` */
16
16
  export function affixOf(item) {
@@ -22,9 +22,14 @@ export function affixOf(item) {
22
22
  * wiring them separately.
23
23
  */
24
24
  export function applyAffix(item, affix) {
25
+ const hadAffix = item.affix !== undefined;
25
26
  item.affix = affix.id;
27
+ // The curse bit belongs to the affix currently installed. Replacing a cursed
28
+ // affix with a benign one must not leave the item permanently cursed.
26
29
  if (affix.curse)
27
30
  item.cursed = true;
31
+ else if (hadAffix)
32
+ item.cursed = false;
28
33
  }
29
34
  /** removes an item's affix (and its curse mark, if the affix was a curse) */
30
35
  export function removeAffix(item) {
@@ -32,4 +37,30 @@ export function removeAffix(item) {
32
37
  item.cursed = false;
33
38
  delete item.affix;
34
39
  }
40
+ /**
41
+ * Copies `from`'s affix (and curse mark) onto `to`, replacing whatever `to` already had -
42
+ * "transfer" an enchantment or rune between item instances. Clears `to`'s affix when `from`
43
+ * carries none. A true transfer (move rather than copy) is this plus `removeAffix(from)`,
44
+ * left to the caller rather than a second near-identical function.
45
+ */
46
+ export function copyAffix(from, to) {
47
+ if (from.affix === undefined) {
48
+ removeAffix(to);
49
+ return;
50
+ }
51
+ to.affix = from.affix;
52
+ to.cursed = from.cursed ?? false;
53
+ }
54
+ /**
55
+ * Whether `affix` should fire for `context`: the trigger must match, and when the affix
56
+ * restricts itself to specific attack `kinds`, `context.kind` must be one of them. An affix
57
+ * with no `kinds` fires for any attack kind, unchanged from before this existed.
58
+ */
59
+ export function matchesContext(affix, context) {
60
+ if (affix.trigger !== context.trigger)
61
+ return false;
62
+ if (affix.kinds && (context.kind === undefined || !affix.kinds.includes(context.kind)))
63
+ return false;
64
+ return true;
65
+ }
35
66
  //# sourceMappingURL=Affix.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Affix.js","sourceRoot":"","sources":["../../src/actors/Affix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAmC5C;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiB;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,OAAO,CAAC,IAAmB;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAmB,EAAE,KAAe;IAC9D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;IACtB,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"Affix.js","sourceRoot":"","sources":["../../src/actors/Affix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAmD5C;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiB;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,OAAO,CAAC,IAAmB;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAmB,EAAE,KAAe;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;IAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;IACtB,8EAA8E;IAC9E,sEAAsE;IACtE,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SAC/B,IAAI,QAAQ;QAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACxC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAmB,EAAE,EAAiB;IAC/D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,WAAW,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACR,CAAC;IACD,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACtB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,OAAqB;IACpE,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrG,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * A shield/barrier pool absorbed before HP, decaying on its own each tick unlike a plain
3
+ * `StatBlock` stat, which only ever changes when something explicitly touches it. Several
4
+ * layers can be held at once - a fresh cast over an older one, a ward stacked on a shield -
5
+ * absorption always drains the most recently added layer first, so a ward cast on top of a
6
+ * standing shield breaks before the shield underneath it does, matching how a layered proc
7
+ * family (barrier-then-shield, shield-then-barrier) is meant to read regardless of order cast.
8
+ */
9
+ export interface BarrierLayer {
10
+ amount: number;
11
+ /** how much this layer's `amount` drops per turn advanced; 0 (the default) never decays on its own */
12
+ decayPerTick?: number;
13
+ }
14
+ export declare class Barrier {
15
+ private layers;
16
+ /** adds a new outermost layer; a non-positive amount is a no-op rather than an empty layer */
17
+ add(amount: number, decayPerTick?: number): void;
18
+ /** total absorption currently held, across every layer */
19
+ get total(): number;
20
+ /** how many independent layers are currently held */
21
+ get layerCount(): number;
22
+ /**
23
+ * Absorbs up to `amount` of incoming damage, draining the outermost layer first and
24
+ * spilling into the next one once a layer empties.
25
+ *
26
+ * @returns the amount actually absorbed - never more than `amount`, never more than
27
+ * `total` was before the call - so the caller applies `amount - absorbed` to HP
28
+ */
29
+ absorb(amount: number): number;
30
+ /**
31
+ * Decays every layer by its own `decayPerTick`, removing any that reach zero or below.
32
+ *
33
+ * Named `advance(turns)` like every other turn-scale ticker here (`TurnClock`, `Charges`,
34
+ * `Field`, `AbilityCycle`) rather than `decay`, so one word means one thing across the
35
+ * framework: `advance` takes whole turns, `update` takes `dt` seconds.
36
+ */
37
+ advance(turns?: number): void;
38
+ /** drops every layer at once - a dispel, a fresh encounter starting clean */
39
+ clear(): void;
40
+ toJSON(): {
41
+ layers: BarrierLayer[];
42
+ };
43
+ static fromJSON(data: {
44
+ layers: BarrierLayer[];
45
+ }): Barrier;
46
+ }
47
+ //# sourceMappingURL=Barrier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Barrier.d.ts","sourceRoot":"","sources":["../../src/actors/Barrier.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IAEf,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,OAAO;IACnB,OAAO,CAAC,MAAM,CAAsB;IAEpC,8FAA8F;IAC9F,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,IAAI,CAG1C;IAED,0DAA0D;IAC1D,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,qDAAqD;IACrD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY7B;IAED;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,SAAI,GAAG,IAAI,CAOvB;IAED,6EAA6E;IAC7E,KAAK,IAAI,IAAI,CAEZ;IAED,MAAM,IAAI;QAAE,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAEnC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,GAAG,OAAO,CAIzD;CACD"}
@@ -0,0 +1,70 @@
1
+ export class Barrier {
2
+ constructor() {
3
+ this.layers = [];
4
+ }
5
+ /** adds a new outermost layer; a non-positive amount is a no-op rather than an empty layer */
6
+ add(amount, decayPerTick = 0) {
7
+ if (amount <= 0)
8
+ return;
9
+ this.layers.push({ amount, decayPerTick });
10
+ }
11
+ /** total absorption currently held, across every layer */
12
+ get total() {
13
+ return this.layers.reduce((sum, layer) => sum + layer.amount, 0);
14
+ }
15
+ /** how many independent layers are currently held */
16
+ get layerCount() {
17
+ return this.layers.length;
18
+ }
19
+ /**
20
+ * Absorbs up to `amount` of incoming damage, draining the outermost layer first and
21
+ * spilling into the next one once a layer empties.
22
+ *
23
+ * @returns the amount actually absorbed - never more than `amount`, never more than
24
+ * `total` was before the call - so the caller applies `amount - absorbed` to HP
25
+ */
26
+ absorb(amount) {
27
+ let remaining = amount;
28
+ let absorbed = 0;
29
+ while (remaining > 0 && this.layers.length > 0) {
30
+ const layer = this.layers[this.layers.length - 1];
31
+ const take = Math.min(layer.amount, remaining);
32
+ layer.amount -= take;
33
+ remaining -= take;
34
+ absorbed += take;
35
+ if (layer.amount <= 0)
36
+ this.layers.pop();
37
+ }
38
+ return absorbed;
39
+ }
40
+ /**
41
+ * Decays every layer by its own `decayPerTick`, removing any that reach zero or below.
42
+ *
43
+ * Named `advance(turns)` like every other turn-scale ticker here (`TurnClock`, `Charges`,
44
+ * `Field`, `AbilityCycle`) rather than `decay`, so one word means one thing across the
45
+ * framework: `advance` takes whole turns, `update` takes `dt` seconds.
46
+ */
47
+ advance(turns = 1) {
48
+ for (let i = this.layers.length - 1; i >= 0; i--) {
49
+ const layer = this.layers[i];
50
+ if (!layer.decayPerTick)
51
+ continue;
52
+ layer.amount -= layer.decayPerTick * turns;
53
+ if (layer.amount <= 0)
54
+ this.layers.splice(i, 1);
55
+ }
56
+ }
57
+ /** drops every layer at once - a dispel, a fresh encounter starting clean */
58
+ clear() {
59
+ this.layers = [];
60
+ }
61
+ toJSON() {
62
+ return { layers: this.layers.map((layer) => ({ ...layer })) };
63
+ }
64
+ static fromJSON(data) {
65
+ const barrier = new Barrier();
66
+ barrier.layers = data.layers.map((layer) => ({ ...layer }));
67
+ return barrier;
68
+ }
69
+ }
70
+ //# sourceMappingURL=Barrier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Barrier.js","sourceRoot":"","sources":["../../src/actors/Barrier.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,OAAO;IAApB;QACS,WAAM,GAAmB,EAAE,CAAC;IAqErC,CAAC;IAnEA,8FAA8F;IAC9F,GAAG,CAAC,MAAc,EAAE,YAAY,GAAG,CAAC;QACnC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,0DAA0D;IAC1D,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,qDAAqD;IACrD,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAc;QACpB,IAAI,SAAS,GAAG,MAAM,CAAC;QACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,OAAO,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC/C,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;YACrB,SAAS,IAAI,IAAI,CAAC;YAClB,QAAQ,IAAI,IAAI,CAAC;YACjB,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,GAAG,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,YAAY;gBAAE,SAAS;YAClC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;YAC3C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAED,6EAA6E;IAC7E,KAAK;QACJ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,MAAM;QACL,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAgC;QAC/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC;IAChB,CAAC;CACD"}
@@ -25,7 +25,29 @@ export declare class Charges {
25
25
  canAfford(cost: number): boolean;
26
26
  /** @returns false, spending nothing, if `cost` is not affordable right now */
27
27
  spend(cost: number): boolean;
28
+ /**
29
+ * Restores charges directly, outside the normal regen path - a killing blow or a crit
30
+ * refunding one on the spot. Capped at `max`.
31
+ *
32
+ * @returns how many were actually added, which is less than `amount` once `max` is hit
33
+ */
34
+ refund(amount?: number): number;
28
35
  /** banks `turns` of regeneration time, converting whole `regenRate`-sized chunks into charges */
29
36
  advance(turns?: number): void;
37
+ /**
38
+ * Charges held, and progress banked towards the next one.
39
+ *
40
+ * The banked progress matters as much as the count: without it, saving and loading part
41
+ * way to a recharge would silently reset that wait, so a player could refresh a wand a
42
+ * little faster by reloading. `max` and `regenRate` are definitions, supplied fresh.
43
+ */
44
+ toJSON(): {
45
+ current: number;
46
+ progress: number;
47
+ };
48
+ static fromJSON(options: ChargesOptions, data: {
49
+ current: number;
50
+ progress: number;
51
+ }): Charges;
30
52
  }
31
53
  //# sourceMappingURL=Charges.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Charges.d.ts","sourceRoot":"","sources":["../../src/actors/Charges.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC9B,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IAEZ,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,OAAO;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAK;IAErB,YAAY,OAAO,EAAE,cAAc,EAIlC;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/B;IAED,8EAA8E;IAC9E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3B;IAED,iGAAiG;IACjG,OAAO,CAAC,KAAK,SAAI,GAAG,IAAI,CAWvB;CACD"}
1
+ {"version":3,"file":"Charges.d.ts","sourceRoot":"","sources":["../../src/actors/Charges.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC9B,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IAEZ,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,OAAO;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAK;IAErB,YAAY,OAAO,EAAE,cAAc,EAIlC;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/B;IAED,8EAA8E;IAC9E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3B;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,SAAI,GAAG,MAAM,CAIzB;IAED,iGAAiG;IACjG,OAAO,CAAC,KAAK,SAAI,GAAG,IAAI,CAWvB;IAED;;;;;;OAMG;IACH,MAAM,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAE9C;IAED,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAI7F;CACD"}
@@ -18,6 +18,17 @@ export class Charges {
18
18
  this.value -= cost;
19
19
  return true;
20
20
  }
21
+ /**
22
+ * Restores charges directly, outside the normal regen path - a killing blow or a crit
23
+ * refunding one on the spot. Capped at `max`.
24
+ *
25
+ * @returns how many were actually added, which is less than `amount` once `max` is hit
26
+ */
27
+ refund(amount = 1) {
28
+ const added = Math.min(amount, this.max - this.value);
29
+ this.value += added;
30
+ return added;
31
+ }
21
32
  /** banks `turns` of regeneration time, converting whole `regenRate`-sized chunks into charges */
22
33
  advance(turns = 1) {
23
34
  if (this.value >= this.max)
@@ -31,5 +42,20 @@ export class Charges {
31
42
  if (this.value >= this.max)
32
43
  this.progress = 0;
33
44
  }
45
+ /**
46
+ * Charges held, and progress banked towards the next one.
47
+ *
48
+ * The banked progress matters as much as the count: without it, saving and loading part
49
+ * way to a recharge would silently reset that wait, so a player could refresh a wand a
50
+ * little faster by reloading. `max` and `regenRate` are definitions, supplied fresh.
51
+ */
52
+ toJSON() {
53
+ return { current: this.value, progress: this.progress };
54
+ }
55
+ static fromJSON(options, data) {
56
+ const charges = new Charges({ ...options, current: data.current });
57
+ charges.progress = data.progress;
58
+ return charges;
59
+ }
34
60
  }
35
61
  //# sourceMappingURL=Charges.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Charges.js","sourceRoot":"","sources":["../../src/actors/Charges.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,OAAO;IAMnB,YAAY,OAAuB;QAF3B,aAAQ,GAAG,CAAC,CAAC;QAGpB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;IAC3B,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,IAAY;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,iGAAiG;IACjG,OAAO,CAAC,KAAK,GAAG,CAAC;QAChB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO;QAEnC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;QACvB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;QAED,qFAAqF;QACrF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC/C,CAAC;CACD"}
1
+ {"version":3,"file":"Charges.js","sourceRoot":"","sources":["../../src/actors/Charges.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,OAAO;IAMnB,YAAY,OAAuB;QAF3B,aAAQ,GAAG,CAAC,CAAC;QAGpB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;IAC3B,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,IAAY;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,GAAG,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,iGAAiG;IACjG,OAAO,CAAC,KAAK,GAAG,CAAC;QAChB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO;QAEnC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;QACvB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;QAED,qFAAqF;QACrF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;OAMG;IACH,MAAM;QACL,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,OAAuB,EAAE,IAA2C;QACnF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,OAAO,OAAO,CAAC;IAChB,CAAC;CACD"}
@@ -32,9 +32,39 @@ export declare class EquipmentSlots<Slot extends string, Item extends Equippable
32
32
  * changing anything when the slot is locked
33
33
  */
34
34
  equip(slot: Slot, item: Item): Item | undefined;
35
+ /** puts an item on and applies its modifiers, with no lock check - the shared half of `equip` and `fromJSON` */
36
+ private wear;
35
37
  /** @returns the removed item, or undefined for an empty slot - or a locked one, which stays put */
36
38
  unequip(slot: Slot): Item | undefined;
37
39
  get slots(): readonly Slot[];
38
40
  private assertSlot;
41
+ /**
42
+ * Which slot holds which item, by whatever id `identify` gives each one.
43
+ *
44
+ * An item is a game's own object here (`Item` is a type parameter, and `EquippableItem`
45
+ * requires only `modifiers`), so this framework has no idea what identifies one. The
46
+ * caller says, usually with the same id its item table is keyed by.
47
+ */
48
+ toJSON(identify: (item: Item) => string): SavedEquipment<Slot>;
49
+ /**
50
+ * Rebuilds the slots and re-equips everything, so each item's modifiers land back on the
51
+ * `StatBlock` exactly as they were.
52
+ *
53
+ * That reapplication is the point: `StatBlock.toJSON` deliberately saves no modifiers,
54
+ * precisely because whatever applied them puts them back on load. A locked item is
55
+ * restored rather than refused - a cursed ring the character was already wearing is still
56
+ * on their finger after a reload, and `equip`'s refusal is about *putting one on*, which
57
+ * is not what this is doing.
58
+ */
59
+ static fromJSON<Slot extends string, Item extends EquippableItem>(defs: {
60
+ slots: readonly Slot[];
61
+ /** turns a saved id back into the game's own item object */
62
+ resolve: (id: string) => Item;
63
+ stats?: StatBlock | null;
64
+ locked?: (slot: Slot, item: Item) => boolean;
65
+ }, data: SavedEquipment<Slot>): EquipmentSlots<Slot, Item>;
66
+ }
67
+ export interface SavedEquipment<Slot extends string> {
68
+ worn: [Slot, string][];
39
69
  }
40
70
  //# sourceMappingURL=Equipment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Equipment.d.ts","sourceRoot":"","sources":["../../src/actors/Equipment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC9B,oFAAoF;IACpF,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,SAAS,cAAc;IACjF;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,qBAAa,cAAc,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,SAAS,cAAc;IAC3E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,YAAY,CAAsC;IAE1D,YAAY,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,KAAK,GAAE,SAAS,GAAG,IAAW,EAAE,OAAO,GAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAM,EAI7G;IAED,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAEhC;IAED,4JAA4J;IAC5J,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAG5B;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAU9C;IAED,mGAAmG;IACnG,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAQpC;IAED,IAAI,KAAK,IAAI,SAAS,IAAI,EAAE,CAE3B;IAED,OAAO,CAAC,UAAU;CAGlB"}
1
+ {"version":3,"file":"Equipment.d.ts","sourceRoot":"","sources":["../../src/actors/Equipment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC9B,oFAAoF;IACpF,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,SAAS,cAAc;IACjF;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,qBAAa,cAAc,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,SAAS,cAAc;IAC3E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,YAAY,CAAsC;IAE1D,YAAY,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,KAAK,GAAE,SAAS,GAAG,IAAW,EAAE,OAAO,GAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAM,EAI7G;IAED,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAEhC;IAED,4JAA4J;IAC5J,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAG5B;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAO9C;IAED,gHAAgH;IAChH,OAAO,CAAC,IAAI;IAOZ,mGAAmG;IACnG,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAQpC;IAED,IAAI,KAAK,IAAI,SAAS,IAAI,EAAE,CAE3B;IAED,OAAO,CAAC,UAAU;IAIlB;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAE7D;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,SAAS,cAAc,EAC/D,IAAI,EAAE;QACL,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;QACvB,4DAA4D;QAC5D,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;QAC9B,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;KAC7C,EACD,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,GACxB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAQ5B;CACD;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,MAAM;IAClD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;CACvB"}
@@ -29,11 +29,15 @@ export class EquipmentSlots {
29
29
  if (this.isLocked(slot))
30
30
  return undefined;
31
31
  const previous = this.unequip(slot);
32
+ this.wear(slot, item);
33
+ return previous;
34
+ }
35
+ /** puts an item on and applies its modifiers, with no lock check - the shared half of `equip` and `fromJSON` */
36
+ wear(slot, item) {
32
37
  this.worn.set(slot, item);
33
38
  for (const modifier of item.modifiers ?? []) {
34
39
  this.stats?.addModifier({ ...modifier, source: item });
35
40
  }
36
- return previous;
37
41
  }
38
42
  /** @returns the removed item, or undefined for an empty slot - or a locked one, which stays put */
39
43
  unequip(slot) {
@@ -53,5 +57,33 @@ export class EquipmentSlots {
53
57
  if (!this.names.has(slot))
54
58
  throw new Error(`no such equipment slot: "${slot}"`);
55
59
  }
60
+ /**
61
+ * Which slot holds which item, by whatever id `identify` gives each one.
62
+ *
63
+ * An item is a game's own object here (`Item` is a type parameter, and `EquippableItem`
64
+ * requires only `modifiers`), so this framework has no idea what identifies one. The
65
+ * caller says, usually with the same id its item table is keyed by.
66
+ */
67
+ toJSON(identify) {
68
+ return { worn: [...this.worn].map(([slot, item]) => [slot, identify(item)]) };
69
+ }
70
+ /**
71
+ * Rebuilds the slots and re-equips everything, so each item's modifiers land back on the
72
+ * `StatBlock` exactly as they were.
73
+ *
74
+ * That reapplication is the point: `StatBlock.toJSON` deliberately saves no modifiers,
75
+ * precisely because whatever applied them puts them back on load. A locked item is
76
+ * restored rather than refused - a cursed ring the character was already wearing is still
77
+ * on their finger after a reload, and `equip`'s refusal is about *putting one on*, which
78
+ * is not what this is doing.
79
+ */
80
+ static fromJSON(defs, data) {
81
+ const equipment = new EquipmentSlots(defs.slots, defs.stats ?? null, { locked: defs.locked });
82
+ for (const [slot, id] of data.worn) {
83
+ equipment.assertSlot(slot);
84
+ equipment.wear(slot, defs.resolve(id));
85
+ }
86
+ return equipment;
87
+ }
56
88
  }
57
89
  //# sourceMappingURL=Equipment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Equipment.js","sourceRoot":"","sources":["../../src/actors/Equipment.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAM1B,YAAY,KAAsB,EAAE,KAAK,GAAqB,IAAI,EAAE,OAAO,GAAiC,EAAE;QAJtG,SAAI,GAAG,IAAI,GAAG,EAAc,CAAC;QAKpC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,GAAG,CAAC,IAAU;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,4JAA4J;IAC5J,QAAQ,CAAC,IAAU;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAU,EAAE,IAAU;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,mGAAmG;IACnG,OAAO,CAAC,IAAU;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAEpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,KAAK;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEO,UAAU,CAAC,IAAU;QAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,GAAG,CAAC,CAAC;IACjF,CAAC;CACD"}
1
+ {"version":3,"file":"Equipment.js","sourceRoot":"","sources":["../../src/actors/Equipment.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAM1B,YAAY,KAAsB,EAAE,KAAK,GAAqB,IAAI,EAAE,OAAO,GAAiC,EAAE;QAJtG,SAAI,GAAG,IAAI,GAAG,EAAc,CAAC;QAKpC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,GAAG,CAAC,IAAU;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,4JAA4J;IAC5J,QAAQ,CAAC,IAAU;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAU,EAAE,IAAU;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,gHAAgH;IACxG,IAAI,CAAC,IAAU,EAAE,IAAU;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACF,CAAC;IAED,mGAAmG;IACnG,OAAO,CAAC,IAAU;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAEpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,KAAK;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEO,UAAU,CAAC,IAAU;QAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,GAAG,CAAC,CAAC;IACjF,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,QAAgC;QACtC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,QAAQ,CACd,IAMC,EACD,IAA0B;QAE1B,MAAM,SAAS,GAAG,IAAI,cAAc,CAAa,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAE1G,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACpC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;CACD"}
@@ -7,11 +7,19 @@
7
7
  * capacity, and every check trivially passes.
8
8
  */
9
9
  export interface InventoryItem {
10
- /** identifies the kind of item; two stackable entries with the same id merge */
10
+ /** identifies the kind of item; two stackable entries with the same id (and `instanceId`) merge */
11
11
  id: string;
12
12
  quantity: number;
13
13
  stackable?: boolean;
14
14
  weight?: number;
15
+ /**
16
+ * Distinguishes otherwise-identical instances of the same item id - two `"sword"`s, one
17
+ * enchanted and one not, or two enchanted differently - so they never silently merge into
18
+ * one stack the way plain quantity stacking assumes every unit of an id is interchangeable.
19
+ * Omitted (the default, and the only behaviour before this existed), every stackable item
20
+ * of an id still merges into a single stack.
21
+ */
22
+ instanceId?: string;
15
23
  /** an unidentified potion, a cursed ring the player does not yet know is cursed */
16
24
  identified?: boolean;
17
25
  cursed?: boolean;
@@ -37,7 +45,8 @@ export declare class Inventory {
37
45
  get items(): readonly InventoryItem[];
38
46
  get totalWeight(): number;
39
47
  private weightOf;
40
- find(id: string): InventoryItem | undefined;
48
+ /** Finds the first item of a kind, or the matching instance when `instanceId` is supplied. */
49
+ find(id: string, instanceId?: string): InventoryItem | undefined;
41
50
  /**
42
51
  * Adds an item, merging into an existing stack when both are stackable.
43
52
  *
@@ -45,6 +54,52 @@ export declare class Inventory {
45
54
  */
46
55
  add(item: InventoryItem): boolean;
47
56
  /** removes up to `quantity` (default: the whole stack); the slot disappears once empty */
48
- remove(id: string, quantity?: number): void;
57
+ remove(id: string, quantity?: number, instanceId?: string): void;
58
+ /**
59
+ * Takes up to `quantity` from one stack and returns an item snapshot suitable for adding to
60
+ * another inventory. All instance state travels with it; only the quantity is split.
61
+ */
62
+ take(id: string, quantity?: number, instanceId?: string): InventoryItem | undefined;
63
+ /**
64
+ * What a save has to remember about one slot: its id, how many, and every field that can
65
+ * diverge between two items sharing that id.
66
+ *
67
+ * The split is the whole design question here. `stackable` and `weight` describe the *kind*
68
+ * of item and live in a game's own item table, so they are supplied fresh on load like
69
+ * every other definition in this framework, and a game that rebalances an item's weight
70
+ * sees the new value on an old save rather than the stale one baked into it. Everything
71
+ * else - an enchantment level, wear, a rolled affix, whether it has been identified, the
72
+ * `instanceId` keeping two otherwise-identical swords apart - belongs to the individual
73
+ * item and is exactly what would be lost if a save recorded only "3 x potion".
74
+ */
75
+ toJSON(): SavedInventory;
76
+ /**
77
+ * Rebuilds an inventory, taking each item's kind-level fields from `defs`.
78
+ *
79
+ * Throws on an id `defs` does not know, rather than restoring a weightless unstackable
80
+ * ghost of it: a save naming an item the game no longer has is a real problem, and finding
81
+ * out at load is far cheaper than finding out when a carry-weight check silently disagrees.
82
+ */
83
+ static fromJSON(defs: ReadonlyMap<string, ItemDefinition>, data: SavedInventory): Inventory;
84
+ }
85
+ /** the kind-level fields a game's own item table supplies, rather than the save file */
86
+ export type ItemDefinition = Pick<InventoryItem, 'stackable' | 'weight'>;
87
+ /** one slot as saved: instance state only, no kind-level fields */
88
+ export interface SavedInventoryItem {
89
+ id: string;
90
+ quantity: number;
91
+ instanceId?: string;
92
+ identified?: boolean;
93
+ cursed?: boolean;
94
+ blessed?: boolean;
95
+ level?: number;
96
+ affix?: string;
97
+ durability?: number;
98
+ maxDurability?: number;
99
+ contents?: SavedInventory;
100
+ }
101
+ export interface SavedInventory {
102
+ capacity?: number;
103
+ slots: SavedInventoryItem[];
49
104
  }
50
105
  //# sourceMappingURL=Inventory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Inventory.d.ts","sourceRoot":"","sources":["../../src/actors/Inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,aAAa;IAC7B,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mFAAmF;IACnF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAS;IACrB,OAAO,CAAC,KAAK,CAAuB;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,YAAY,OAAO,GAAE,gBAAqB,EAEzC;IAED,IAAI,KAAK,IAAI,SAAS,aAAa,EAAE,CAEpC;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,OAAO,CAAC,QAAQ;IAIhB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE1C;IAED;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAehC;IAED,0FAA0F;IAC1F,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAO1C;CACD"}
1
+ {"version":3,"file":"Inventory.d.ts","sourceRoot":"","sources":["../../src/actors/Inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,aAAa;IAC7B,mGAAmG;IACnG,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mFAAmF;IACnF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAS;IACrB,OAAO,CAAC,KAAK,CAAuB;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,YAAY,OAAO,GAAE,gBAAqB,EAEzC;IAED,IAAI,KAAK,IAAI,SAAS,aAAa,EAAE,CAEpC;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,OAAO,CAAC,QAAQ;IAIhB,8FAA8F;IAC9F,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE/D;IAED;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAiBhC;IAED,0FAA0F;IAC1F,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ/D;IAED;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAY7E;IAED;;;;;;;;;;;OAWG;IACH,MAAM,IAAI,cAAc,CAiBvB;IAED;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,SAAS,CAiB1F;CACD;AAED,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC;AAEzE,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC5B"}