@maka/maka-cli 5.3.17 → 5.5.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 (245) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.d.ts +62 -0
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +196 -0
  4. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -0
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.d.ts +16 -0
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js +65 -0
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js.map +1 -0
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/assense.d.ts +16 -0
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js +122 -0
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js.map +1 -0
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.d.ts +42 -0
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js +243 -0
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js.map +1 -0
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.d.ts +16 -0
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +39 -0
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.d.ts +21 -0
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.js +82 -0
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.js.map +1 -0
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.d.ts +28 -0
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +101 -0
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -0
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +19 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +219 -0
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -0
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.d.ts +58 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +397 -0
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.d.ts +11 -1
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.js +8 -3
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.js.map +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/command.d.ts +6 -0
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/command.js +4 -0
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/command.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.d.ts +15 -0
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js +72 -0
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js.map +1 -0
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js +3 -0
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/edge.d.ts +13 -0
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/edge.js +31 -0
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/edge.js.map +1 -0
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.d.ts +6 -0
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.js +27 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.js.map +1 -0
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/equip.d.ts +4 -0
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js +59 -2
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js.map +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.d.ts +13 -0
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +50 -0
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -0
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/give.js +7 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/give.js.map +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +13 -0
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +147 -4
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +25 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +199 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -0
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.d.ts +15 -0
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +75 -0
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -0
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/inv.d.ts +12 -0
  64. package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js +43 -0
  65. package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js.map +1 -0
  66. package/bundle/typescript/src/commands/game/sideQuest/commands/jack.d.ts +17 -0
  67. package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js +64 -0
  68. package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js.map +1 -0
  69. package/bundle/typescript/src/commands/game/sideQuest/commands/kill.d.ts +10 -3
  70. package/bundle/typescript/src/commands/game/sideQuest/commands/kill.js +11 -33
  71. package/bundle/typescript/src/commands/game/sideQuest/commands/kill.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +47 -4
  73. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/commands/map.d.ts +12 -0
  75. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +46 -0
  76. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -0
  77. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.d.ts +12 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js +55 -0
  79. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js.map +1 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.d.ts +18 -0
  81. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +100 -0
  82. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.d.ts +10 -0
  84. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +33 -0
  85. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -0
  86. package/bundle/typescript/src/commands/game/sideQuest/commands/project.d.ts +19 -0
  87. package/bundle/typescript/src/commands/game/sideQuest/commands/project.js +54 -0
  88. package/bundle/typescript/src/commands/game/sideQuest/commands/project.js.map +1 -0
  89. package/bundle/typescript/src/commands/game/sideQuest/commands/read.js +6 -5
  90. package/bundle/typescript/src/commands/game/sideQuest/commands/read.js.map +1 -1
  91. package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.d.ts +12 -0
  92. package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.js +52 -0
  93. package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.js.map +1 -0
  94. package/bundle/typescript/src/commands/game/sideQuest/commands/reload.d.ts +14 -0
  95. package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js +40 -0
  96. package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js.map +1 -0
  97. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.d.ts +15 -0
  98. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +59 -0
  99. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +31 -2
  101. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
  102. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +71 -7
  103. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  104. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.d.ts +12 -0
  105. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +58 -0
  106. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -0
  107. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.d.ts +13 -0
  108. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js +50 -0
  109. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js.map +1 -0
  110. package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.d.ts +15 -0
  111. package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.js +35 -0
  112. package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.js.map +1 -0
  113. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js +32 -11
  114. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js.map +1 -1
  115. package/bundle/typescript/src/commands/game/sideQuest/commands/spells.d.ts +14 -0
  116. package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js +86 -0
  117. package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js.map +1 -0
  118. package/bundle/typescript/src/commands/game/sideQuest/commands/stance.d.ts +12 -0
  119. package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js +41 -0
  120. package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js.map +1 -0
  121. package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.d.ts +21 -0
  122. package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.js +43 -0
  123. package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.js.map +1 -0
  124. package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.d.ts +20 -0
  125. package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.js +45 -0
  126. package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.js.map +1 -0
  127. package/bundle/typescript/src/commands/game/sideQuest/commands/take.d.ts +8 -0
  128. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +138 -2
  129. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
  130. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js +8 -0
  131. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js.map +1 -1
  132. package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js +6 -3
  133. package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js.map +1 -1
  134. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +1 -0
  135. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
  136. package/bundle/typescript/src/commands/game/sideQuest/commands/use.d.ts +24 -0
  137. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +102 -1
  138. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  139. package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js +2 -1
  140. package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js.map +1 -1
  141. package/bundle/typescript/src/commands/game/sideQuest/factories/npc-factory.js +7 -2
  142. package/bundle/typescript/src/commands/game/sideQuest/factories/npc-factory.js.map +1 -1
  143. package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js +2 -1
  144. package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js.map +1 -1
  145. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js +3 -0
  146. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js.map +1 -1
  147. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +175 -0
  148. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +673 -0
  149. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -0
  150. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.d.ts +8 -1
  151. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +139 -21
  152. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  153. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.d.ts +174 -0
  154. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js +647 -0
  155. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js.map +1 -0
  156. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +138 -9
  157. package/bundle/typescript/src/commands/game/sideQuest/game.js +757 -197
  158. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  159. package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.d.ts +16 -0
  160. package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.js +101 -0
  161. package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.js.map +1 -0
  162. package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.d.ts +15 -0
  163. package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.js +95 -0
  164. package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.js.map +1 -0
  165. package/bundle/typescript/src/commands/game/sideQuest/models/door.d.ts +10 -0
  166. package/bundle/typescript/src/commands/game/sideQuest/models/door.js +15 -2
  167. package/bundle/typescript/src/commands/game/sideQuest/models/door.js.map +1 -1
  168. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.d.ts +10 -0
  169. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js +54 -4
  170. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js.map +1 -1
  171. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +41 -0
  172. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +106 -3
  173. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  174. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +27 -0
  175. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +312 -50
  176. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  177. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +278 -0
  178. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +661 -9
  179. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  180. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +75 -1
  181. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +199 -6
  182. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +1 -1
  183. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +24 -0
  184. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +53 -18
  185. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  186. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +73 -0
  187. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +208 -3
  188. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  189. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +319 -70
  190. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +661 -227
  191. package/bundle/typescript/src/commands/game/sideQuest/types/player-equipment.d.ts +1 -0
  192. package/bundle/typescript/src/commands/game/sideQuest/types/seed/exit-seed.d.ts +1 -0
  193. package/bundle/typescript/src/commands/game/sideQuest/types/seed/item-seed.d.ts +1 -0
  194. package/bundle/typescript/src/commands/game/sideQuest/types/seed/npc-seed.d.ts +1 -0
  195. package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +42 -0
  196. package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.d.ts +15 -1
  197. package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +4 -0
  198. package/bundle/typescript/src/commands/game/sideQuest/types/seed/scene-seed.d.ts +8 -0
  199. package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.d.ts +15 -0
  200. package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.js +2 -0
  201. package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.js.map +1 -0
  202. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.d.ts +1 -0
  203. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js +5 -0
  204. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js.map +1 -1
  205. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.d.ts +1 -0
  206. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js +1 -0
  207. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js.map +1 -1
  208. package/bundle/typescript/src/commands/game/sideQuest/ui.d.ts +3 -0
  209. package/bundle/typescript/src/commands/game/sideQuest/ui.js +95 -6
  210. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  211. package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.d.ts +60 -0
  212. package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.js +138 -0
  213. package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.js.map +1 -0
  214. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +145 -0
  215. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +354 -0
  216. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -0
  217. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.d.ts +2 -0
  218. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js +12 -0
  219. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js.map +1 -0
  220. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.d.ts +22 -0
  221. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js +34 -0
  222. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js.map +1 -0
  223. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.d.ts +36 -0
  224. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js +92 -0
  225. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js.map +1 -0
  226. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +77 -0
  227. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +265 -0
  228. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -0
  229. package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.d.ts +16 -0
  230. package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.js +36 -0
  231. package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.js.map +1 -0
  232. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +78 -7
  233. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  234. package/bundle/typescript/src/commands/set/global.sub.cmd.js +59 -5
  235. package/bundle/typescript/src/commands/set/global.sub.cmd.js.map +1 -1
  236. package/bundle/typescript/src/tools/ai/ai.class.d.ts +42 -0
  237. package/bundle/typescript/src/tools/ai/ai.class.js +117 -0
  238. package/bundle/typescript/src/tools/ai/ai.class.js.map +1 -0
  239. package/bundle/typescript/src/tools/fsi/fsi.interfaces.d.ts +1 -0
  240. package/bundle/typescript/src/tools/fsi/fsi.interfaces.js.map +1 -1
  241. package/bundle/typescript/src/tools/https/https.class.d.ts +3 -2
  242. package/bundle/typescript/src/tools/https/https.class.js +51 -2
  243. package/bundle/typescript/src/tools/https/https.class.js.map +1 -1
  244. package/bundle/typescript/src/tools/https/https.interface.d.ts +10 -0
  245. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"drop.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/drop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AAEjD,MAAM,OAAO,WAAY,SAAQ,OAAO;IAC5B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,WAAW,GAAG,mCAAmC,CAAC;IAEnE,KAAK,CAAC,OAAO,CAAC,IAAc;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,4CAA4C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClG,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAc;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAE,4CAA4C;QAE5F,qDAAqD;QACrD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,kBAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,qCAAqC,CAAC,CAAC;YAC3G,OAAO,kBAAkB,QAAQ,qBAAqB,CAAC;QACzD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1D,oDAAoD;QACpD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,wBAAwB,IAAI,CAAC,KAAK,CAAC,IAAI,qCAAqC,CAAC,CAAC;YACjH,OAAO,kBAAkB,QAAQ,qBAAqB,CAAC;QACzD,CAAC;QAED,qFAAqF;QACrF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,uBAAuB,QAAQ,sBAAsB,CAAC,CAAC;YAC3F,OAAO,mBAAmB,QAAQ,EAAE,CAAC;QAEvC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,8BAA8B,QAAQ,uBAAuB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAE3J,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,OAAO,eAAe,QAAQ,GAAG,CAAC;IACpC,CAAC"}
1
+ {"version":3,"file":"drop.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/drop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AAEjD,MAAM,OAAO,WAAY,SAAQ,OAAO;IAC5B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,WAAW,GAAG,mCAAmC,CAAC;IAEnE,KAAK,CAAC,OAAO,CAAC,IAAc;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,4CAA4C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClG,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAc;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAE,4CAA4C;QAE5F,qDAAqD;QACrD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,kBAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,qCAAqC,CAAC,CAAC;YAC3G,OAAO,kBAAkB,QAAQ,qBAAqB,CAAC;QACzD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1D,oDAAoD;QACpD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,wBAAwB,IAAI,CAAC,KAAK,CAAC,IAAI,qCAAqC,CAAC,CAAC;YACjH,OAAO,kBAAkB,QAAQ,qBAAqB,CAAC;QACzD,CAAC;QAED,qFAAqF;QACrF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,uBAAuB,QAAQ,sBAAsB,CAAC,CAAC;YAC3F,OAAO,mBAAmB,QAAQ,EAAE,CAAC;QAEvC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,8BAA8B,QAAQ,uBAAuB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAE3J,qEAAqE;QACrE,8BAA8B;QAC9B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAE9E,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,OAAO,eAAe,QAAQ,GAAG,CAAC;IACpC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * Burning Edge -- Shadowrun's luck stat as a spendable resource. Each
4
+ * point spent arms a one-shot boost: your NEXT initiated strike (attack,
5
+ * subdue, or manabolt) rolls +Edge extra dice. The pool refreshes at the
6
+ * start of every job (see Game.continueToNextScene), so hoarding across
7
+ * a run buys nothing -- spend it when the moment matters.
8
+ */
9
+ export declare class EdgeCommand extends Command implements ICommand {
10
+ protected static verb: string;
11
+ protected static description: string;
12
+ execute(_args?: string[]): Promise<string>;
13
+ }
@@ -0,0 +1,31 @@
1
+ import { Command } from './command.js';
2
+ /**
3
+ * Burning Edge -- Shadowrun's luck stat as a spendable resource. Each
4
+ * point spent arms a one-shot boost: your NEXT initiated strike (attack,
5
+ * subdue, or manabolt) rolls +Edge extra dice. The pool refreshes at the
6
+ * start of every job (see Game.continueToNextScene), so hoarding across
7
+ * a run buys nothing -- spend it when the moment matters.
8
+ */
9
+ export class EdgeCommand extends Command {
10
+ static verb = 'edge';
11
+ static description = 'Burn a point of Edge: your next attack, subdue, or manabolt rolls +Edge extra dice. Refreshes each job.';
12
+ async execute(_args = []) {
13
+ const actor = this.actor;
14
+ if (actor.isIncapacitated()) {
15
+ return `Luck has left the building, and so have you.`;
16
+ }
17
+ if (actor.edgeBoostArmed) {
18
+ return `Your edge is already burning -- land the strike. (${actor.edgeRemaining}/${actor.edge} left after this.)`;
19
+ }
20
+ if (actor.edgeRemaining <= 0) {
21
+ return `You're out of luck -- literally. Edge refreshes when the next job starts.`;
22
+ }
23
+ actor.edgeRemaining -= 1;
24
+ actor.edgeBoostArmed = true;
25
+ this.logger.write(`${actor.name} burned an edge point (${actor.edgeRemaining}/${actor.edge} left).`);
26
+ this.actor.performAction('pushes the limit', '');
27
+ this.scene.updateStatus();
28
+ return `You reach for the luck that got you this far. The next strike you throw rolls +${actor.edge} dice. (${actor.edgeRemaining}/${actor.edge} edge left this job.)`;
29
+ }
30
+ }
31
+ //# sourceMappingURL=edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/edge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,OAAO,WAAY,SAAQ,OAAO;IAC5B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,WAAW,GAAG,yGAAyG,CAAC;IAEzI,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,OAAO,8CAA8C,CAAC;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO,qDAAqD,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,oBAAoB,CAAC;QACpH,CAAC;QACD,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,2EAA2E,CAAC;QACrF,CAAC;QAED,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;QACzB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,0BAA0B,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC;QACrG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAE1B,OAAO,kFAAkF,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,uBAAuB,CAAC;IACzK,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command, ICommand } from './command.js';
2
+ export declare class EndCallCommand extends Command implements ICommand {
3
+ protected static verb: string;
4
+ protected static description: string;
5
+ execute(): Promise<string>;
6
+ }
@@ -0,0 +1,27 @@
1
+ import { Command } from './command.js';
2
+ import { NPC } from '../models/npc.js';
3
+ import { CALL_ICON, CALL_COLOR } from '../utilities/comm-style.js';
4
+ export class EndCallCommand extends Command {
5
+ static verb = 'end-call';
6
+ static description = 'Hang up your current commlink call.';
7
+ async execute() {
8
+ const partner = this.actor.activeCallPartner;
9
+ if (!partner) {
10
+ return `You're not on a call.`;
11
+ }
12
+ this.actor.activeCallPartner = undefined;
13
+ partner.activeCallPartner = undefined;
14
+ this.actor.performAction('ends call', partner.name);
15
+ this.logger.write(`${this.actor.name} ends the call with ${partner.name}.`);
16
+ // Only a player-typed command's own return value reaches the screen
17
+ // through ui.ts's normal response pipeline -- an NPC ending the call on
18
+ // its own initiative (via recursiveReflect) would otherwise leave the
19
+ // player watching a call that quietly went nowhere, with no way to
20
+ // tell it was actually over. Announce it directly in that case.
21
+ if (this.actor instanceof NPC && partner === this.scene.getPlayer()) {
22
+ this.logger.logWithColor(`${CALL_ICON} ${this.actor.name} ends the call.`, CALL_COLOR);
23
+ }
24
+ return `{${CALL_COLOR}-fg}${CALL_ICON} You end the call with ${partner.name}.{/${CALL_COLOR}-fg}`;
25
+ }
26
+ }
27
+ //# sourceMappingURL=end-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end-call.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/end-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,OAAO,cAAe,SAAQ,OAAO;IAC/B,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,MAAM,CAAC,WAAW,GAAG,qCAAqC,CAAC;IAErE,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,uBAAuB,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACzC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;QAEtC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,uBAAuB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QAE5E,oEAAoE;QACpE,wEAAwE;QACxE,sEAAsE;QACtE,mEAAmE;QACnE,gEAAgE;QAChE,IAAI,IAAI,CAAC,KAAK,YAAY,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,IAAI,UAAU,OAAO,SAAS,0BAA0B,OAAO,CAAC,IAAI,MAAM,UAAU,MAAM,CAAC;IACpG,CAAC"}
@@ -4,4 +4,8 @@ export declare class EquipCommand extends Command implements ICommand {
4
4
  protected static description: string;
5
5
  execute(args: string[]): Promise<string>;
6
6
  private equip;
7
+ /** The no-slot explanation for kit devices, or null for wearable gear. */
8
+ private static kitDeviceNote;
9
+ /** Resolves "equip deck"/"cyberdeck"/"drone" to the carried kit device's note. */
10
+ private resolveKitDevice;
7
11
  }
@@ -1,5 +1,6 @@
1
1
  import { Command } from './command.js';
2
2
  import { Category } from '../types/shared/item-enum.js';
3
+ import { Player } from '../models/player.js';
3
4
  export class EquipCommand extends Command {
4
5
  static verb = 'equip';
5
6
  static description = 'Equip an item or everything in your inventory.';
@@ -20,15 +21,40 @@ export class EquipCommand extends Command {
20
21
  }
21
22
  const results = [];
22
23
  for (const item of items) {
24
+ // Kit devices are never worn -- they work straight from the bag.
25
+ // Answer with HOW they work instead of a slot error (a real
26
+ // session's "equip all" told the player their new cyberdeck
27
+ // "could not be equipped", which read as broken).
28
+ const kitNote = EquipCommand.kitDeviceNote(item.category, item.name);
29
+ if (kitNote) {
30
+ results.push(kitNote);
31
+ continue;
32
+ }
23
33
  if (this.actor.canEquip(item)) {
24
34
  const slotInfo = this.actor.determineEquipmentSlot(item.category);
25
35
  if (slotInfo) {
26
36
  const { group, slot } = slotInfo;
27
37
  const groupRef = this.actor.equipment[group];
38
+ // An OCCUPIED slot gets named, not "unavailable or unknown" --
39
+ // an Adept's auto-equipped katana made the spare pistol's
40
+ // failure read like a bug instead of a full hand.
41
+ const occupant = groupRef?.[slot];
42
+ if (groupRef !== null && occupant) {
43
+ results.push(`Left ${item.name} in the bag -- ${occupant.name} already has that slot ("unequip ${occupant.name}" to swap).`);
44
+ continue;
45
+ }
28
46
  if (groupRef !== null && !groupRef[slot]) {
29
47
  groupRef[slot] = item;
30
48
  this.actor.inventory.removeItem(item.name);
31
- results.push(`Equipped ${item.name} in ${group}.${slot}`);
49
+ // Weapons ride holstered until brandished -- same convention
50
+ // as the single-item path (see Player.equip / weaponDrawn).
51
+ if (Player.isWeaponSlot(group, slot)) {
52
+ this.actor.weaponDrawn = false;
53
+ results.push(`Holstered ${item.name} -- "brandish" to draw it`);
54
+ }
55
+ else {
56
+ results.push(`Equipped ${item.name} in ${group}.${slot}`);
57
+ }
32
58
  if (item.category === Category.Weapon) {
33
59
  this.actor.performAction('equipped weapon', item.name);
34
60
  }
@@ -45,6 +71,12 @@ export class EquipCommand extends Command {
45
71
  }
46
72
  // EQUIP ONE
47
73
  const itemName = input;
74
+ // "equip deck" / "equip cyberdeck" / "equip drone": these are kit
75
+ // devices with no slot -- resolve by category keyword and explain how
76
+ // they actually work rather than failing the name lookup.
77
+ const kitKeyword = this.resolveKitDevice(itemName);
78
+ if (kitKeyword)
79
+ return kitKeyword;
48
80
  let itemToEquip = this.actor.inventory.getItem(itemName);
49
81
  // If not in inventory, try to grab from the room (single-item only)
50
82
  if (!itemToEquip) {
@@ -60,10 +92,35 @@ export class EquipCommand extends Command {
60
92
  return `You don't have "${itemName}" and it's not in the room either.`;
61
93
  }
62
94
  }
63
- this.actor.performAction('equip', itemToEquip.name);
95
+ // Named the kit device outright ("equip Novatech Navigator")? Same
96
+ // helpful answer as the keyword path.
97
+ const kitNote = EquipCommand.kitDeviceNote(itemToEquip.category, itemToEquip.name);
98
+ if (kitNote)
99
+ return kitNote;
100
+ this.actor.performAction('equips', itemToEquip.name);
64
101
  const equipResponse = this.actor.equip(itemToEquip);
65
102
  this.logger.write(`EquipCommand: ${equipResponse}`);
66
103
  return equipResponse;
67
104
  }
105
+ /** The no-slot explanation for kit devices, or null for wearable gear. */
106
+ static kitDeviceNote(category, name) {
107
+ if (category === Category.Cyberdeck) {
108
+ return `The ${name} doesn't wear -- it works from your kit. "jack in" when you're ready to ride it, "pan" to see your network.`;
109
+ }
110
+ if (category === Category.Drone) {
111
+ return `The ${name} doesn't wear -- it launches from your kit. "drone" to send it scouting.`;
112
+ }
113
+ return null;
114
+ }
115
+ /** Resolves "equip deck"/"cyberdeck"/"drone" to the carried kit device's note. */
116
+ resolveKitDevice(input) {
117
+ const wants = (cat, keywords) => {
118
+ if (!keywords.includes(input))
119
+ return null;
120
+ const item = this.actor.inventory.getAllItems().find(i => i.category === cat);
121
+ return item ? EquipCommand.kitDeviceNote(item.category, item.name) : null;
122
+ };
123
+ return wants(Category.Cyberdeck, ['deck', 'cyberdeck']) ?? wants(Category.Drone, ['drone']);
124
+ }
68
125
  }
69
126
  //# sourceMappingURL=equip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"equip.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/equip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"equip.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/equip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * On-demand equipment panel, replacing the always-on blessed sidebar box.
4
+ * Beyond the raw slot listing the old box showed, this also surfaces the
5
+ * combat numbers the gear actually derives to (weapon damage/dice, armor
6
+ * soak) -- the panel should answer "how ready for a fight am I", not just
7
+ * "what am I wearing". Registered as both "equipment" and "eq".
8
+ */
9
+ export declare class EquipmentCommand extends Command implements ICommand {
10
+ protected static verb: string;
11
+ protected static description: string;
12
+ execute(_args?: string[]): Promise<string>;
13
+ }
@@ -0,0 +1,50 @@
1
+ import { Command } from './command.js';
2
+ /**
3
+ * On-demand equipment panel, replacing the always-on blessed sidebar box.
4
+ * Beyond the raw slot listing the old box showed, this also surfaces the
5
+ * combat numbers the gear actually derives to (weapon damage/dice, armor
6
+ * soak) -- the panel should answer "how ready for a fight am I", not just
7
+ * "what am I wearing". Registered as both "equipment" and "eq".
8
+ */
9
+ export class EquipmentCommand extends Command {
10
+ static verb = 'equipment';
11
+ static description = "What you're wearing and wielding, with the combat numbers it adds up to.";
12
+ async execute(_args = []) {
13
+ const actor = this.actor;
14
+ const equipment = actor.equipment;
15
+ const lines = ['=== EQUIPMENT ==='];
16
+ // The derived numbers first -- they're what the player is usually
17
+ // actually asking.
18
+ const weapon = actor.getWeaponProfile();
19
+ const weaponItem = actor.getCarriedWeapon();
20
+ const ammoNote = weaponItem?.isFirearm() ? ` -- ${weaponItem.ammo}/${10} rounds${weaponItem.ammo === 0 ? ' (DRY -- "reload")' : ''}` : '';
21
+ // Holstered means the PROFILE says bare fists -- lead with the carried
22
+ // weapon and how to get it out, or the numbers lie about readiness.
23
+ if (actor.plane === 'meat' && weaponItem && !actor.weaponDrawn) {
24
+ lines.push(`Weapon: ${weaponItem.name} (HOLSTERED -- "brandish" to draw)${ammoNote}`);
25
+ }
26
+ else {
27
+ lines.push(`Weapon: ${weapon.name} -- damage ${weapon.damage}${weapon.poolBonus > 0 ? `, +${weapon.poolBonus} attack dice` : ''}${ammoNote}`);
28
+ }
29
+ const armor = actor.getArmorValue();
30
+ lines.push(`Armor: +${armor} soak dice${actor.sustainedArmor > 0 ? ` (+${actor.sustainedArmor} more from the sustained armor spell)` : ''}`);
31
+ lines.push('');
32
+ let anythingEquipped = false;
33
+ for (const [groupName, group] of Object.entries(equipment)) {
34
+ if (!group)
35
+ continue;
36
+ const equipped = Object.entries(group)
37
+ .filter(([, item]) => item !== null)
38
+ .map(([slot, item]) => ` ${groupName}.${slot}: ${item.name}`);
39
+ if (equipped.length > 0) {
40
+ anythingEquipped = true;
41
+ lines.push(...equipped);
42
+ }
43
+ }
44
+ if (!anythingEquipped) {
45
+ lines.push(`Nothing equipped -- bare fists and street clothes. "equip <item>" to fix that.`);
46
+ }
47
+ return lines.join('\n');
48
+ }
49
+ }
50
+ //# sourceMappingURL=equipment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equipment.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/equipment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AAGjD;;;;;;GAMG;AACH,MAAM,OAAO,gBAAiB,SAAQ,OAAO;IACjC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,MAAM,CAAC,WAAW,GAAG,0EAA0E,CAAC;IAE1G,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,CAAC;QAE9C,kEAAkE;QAClE,mBAAmB;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,IAAI,EAAE,UAAU,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1I,uEAAuE;QACvE,oEAAoE;QACpE,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,IAAI,qCAAqC,QAAQ,EAAE,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAChJ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,aAAa,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,cAAc,uCAAuC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9I,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAoC,CAAC;iBAClE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;iBACnC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,SAAS,IAAI,IAAI,KAAK,IAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,gBAAgB,GAAG,IAAI,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC"}
@@ -49,9 +49,15 @@ export class GiveCommand extends Command {
49
49
  this.actor.performAction('did not give', `item cannot be given`);
50
50
  return `You cannot give that item away`;
51
51
  }
52
- this.scene.updateInventory(recipient.inventory);
52
+ this.scene.updateInventory(this.scene.getPlayer().inventory);
53
53
  this.actor.performAction('give', `${item.name} to ${recipient.name}`);
54
54
  this.logger.write(`${this.actor.name} gave item "${item.name}" to ${recipient.name}`);
55
+ // Possession-based, not actor-based: whether the player handed it over
56
+ // or an NPC grabbed it on their own initiative (via take.ts), the
57
+ // target NPC ending up with it is what completes the job. The
58
+ // completion banner announces itself directly to the screen, since the
59
+ // trigger here might not even be the player's own action.
60
+ this.scene.checkWinCondition(item.name, recipient.name);
55
61
  return `You gave ${item.name} to ${recipient.name}.`;
56
62
  }
57
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"give.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/give.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"give.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/give.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AAEjD,MAAM,OAAO,WAAY,SAAQ,OAAO;IAC5B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,WAAW,GAAG,mCAAmC,CAAC;IAEnE,KAAK,CAAC,OAAO,CAAC,IAAc;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,IAAI,CAAC,IAAc;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAElD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;YACrE,OAAO,sCAAsC,CAAC;QAChD,CAAC;QAED,MAAM,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,CAC1D,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,aAAa,uBAAuB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACjF,OAAO,+BAA+B,aAAa,SAAS,CAAC;QAC/D,CAAC;QAED,+BAA+B;QAC/B,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClE,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,UAAU,CAAC;YAE7D,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,kBAAkB,MAAM,IAAI,YAAY,mBAAmB,CAAC,CAAC;gBACjG,OAAO,kBAAkB,MAAM,IAAI,YAAY,GAAG,CAAC;YACrD,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;YACnC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,MAAM,IAAI,YAAY,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,IAAI,YAAY,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAE5F,OAAO,YAAY,MAAM,IAAI,YAAY,OAAO,SAAS,CAAC,IAAI,GAAG,CAAC;QACpE,CAAC;QAED,8BAA8B;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,wBAAwB,YAAY,yBAAyB,CAAC,CAAC;YACnG,OAAO,mBAAmB,YAAY,IAAI,CAAC;QAC7C,CAAC;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAExF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,wBAAwB,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;YACjE,OAAO,gCAAgC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,eAAe,IAAI,CAAC,IAAI,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtF,uEAAuE;QACvE,kEAAkE;QAClE,8DAA8D;QAC9D,uEAAuE;QACvE,0DAA0D;QAC1D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAExD,OAAO,YAAY,IAAI,CAAC,IAAI,OAAO,SAAS,CAAC,IAAI,GAAG,CAAC;IACvD,CAAC"}
@@ -3,5 +3,18 @@ export declare class GoCommand extends Command implements ICommand {
3
3
  protected static verb: string;
4
4
  protected static description: string;
5
5
  execute(args: string[]): Promise<string>;
6
+ /**
7
+ * Walking out on a live, recent combat opponent who's still in the room
8
+ * hands them one unanswered strike at your back. Survive it and the
9
+ * fight is considered broken (both sides' opponent link clears -- no
10
+ * second toll without a fresh exchange); drop, and you never make the
11
+ * door. Applies to fleeing NPCs just the same. Returns the terminal
12
+ * result when movement is cancelled (the fleer went down), else null.
13
+ */
14
+ private resolvePartingShot;
6
15
  private go;
16
+ /** The direction that undoes a move -- feeds the HUD breadcrumb. */
17
+ private static opposite;
18
+ /** Wards block astral forms and nothing else. Returns the refusal, or null. */
19
+ private checkWard;
7
20
  }
@@ -1,19 +1,124 @@
1
1
  import { Door } from '../models/door.js';
2
+ import { CombatExchange } from '../utilities/combat-exchange.js';
3
+ import { rollPool, formatRoll } from '../utilities/dice.js';
2
4
  import { Command } from './command.js';
3
5
  export class GoCommand extends Command {
4
6
  static verb = 'go';
5
- static description = 'Move in the specified direction.';
7
+ static description = 'Move in the specified direction. Fleeing someone you just fought hands them one free parting shot.';
6
8
  async execute(args) {
7
9
  if (!args)
8
10
  return '';
9
11
  this.logger.write(`${this.actor.name} is attempting 'Go' command with direction: ${args?.join(' ')}`);
10
12
  return this.go(args);
11
13
  }
12
- go(args) {
14
+ /**
15
+ * Walking out on a live, recent combat opponent who's still in the room
16
+ * hands them one unanswered strike at your back. Survive it and the
17
+ * fight is considered broken (both sides' opponent link clears -- no
18
+ * second toll without a fresh exchange); drop, and you never make the
19
+ * door. Applies to fleeing NPCs just the same. Returns the terminal
20
+ * result when movement is cancelled (the fleer went down), else null.
21
+ */
22
+ async resolvePartingShot() {
23
+ const fleer = this.actor;
24
+ const opponent = fleer.combatOpponent;
25
+ if (!opponent)
26
+ return null;
27
+ const RECENT_MS = 60_000;
28
+ const engaged = Date.now() - fleer.lastExchangeAt < RECENT_MS &&
29
+ !opponent.isIncapacitated() &&
30
+ opponent.currentLocation === fleer.currentLocation;
31
+ // Either way, walking is what breaks the engagement.
32
+ fleer.combatOpponent = undefined;
33
+ opponent.combatOpponent = undefined;
34
+ if (!engaged)
35
+ return null;
36
+ const exchange = new CombatExchange(this.scene, this.logger, opponent);
37
+ // ATHLETICS buys the clean break: Agility + athletics (unskilled
38
+ // Agility - 1), two hits and you're through the door before the
39
+ // muzzle comes up -- no shot at all. Anything less eats the strike as
40
+ // before. Applies to fleeing NPCs just the same.
41
+ const athletics = fleer.skillRating('athletics');
42
+ const sprint = rollPool(Math.max(1, fleer.agility + (athletics > 0 ? athletics : -1) + fleer.woundModifier - fleer.sustainingPenalty));
43
+ if (sprint.hits >= 2) {
44
+ const clean = [
45
+ `${fleer.name} breaks for the exit -- Athletics: ${formatRoll(sprint)}`,
46
+ ` Too fast. ${opponent.name} never gets the shot off.`,
47
+ ];
48
+ await exchange.announce(clean);
49
+ this.scene.addWorldEvent(`${fleer.name} broke clean away from ${opponent.name} in ${fleer.currentLocation.name}.`);
50
+ return null;
51
+ }
52
+ const lines = [
53
+ `${fleer.name} breaks for the exit -- Athletics: ${formatRoll(sprint)} -- not fast enough. ${opponent.name} takes a parting shot!`,
54
+ ...exchange.resolveStrike(opponent, fleer),
55
+ ];
56
+ await exchange.announce(lines);
57
+ this.scene.addWorldEvent(`${opponent.name} fired on ${fleer.name} as they fled ${fleer.currentLocation.name}.`);
58
+ this.scene.updateStatus();
59
+ if (fleer.isDown()) {
60
+ const death = await exchange.resolveDeath(fleer, opponent, {
61
+ fallLine: fleer === this.scene.getPlayer()
62
+ ? `The shot catches you square in the back. The door was two steps away.`
63
+ : `${fleer.name} drops mid-stride, two steps from the door. Their gear scatters across ${fleer.currentLocation.name}.`,
64
+ });
65
+ return exchange.finishExchange([...lines, ...death]);
66
+ }
67
+ return null;
68
+ }
69
+ async go(args) {
13
70
  if (args.length === 0) {
14
71
  this.logger.write(`${this.actor.name}'s 'Go' command failed: No direction specified.`);
15
72
  return 'Please specify a direction to go.';
16
73
  }
74
+ // No walking out from between the narration beats of a combat exchange
75
+ // you're part of (see CombatExchange.beginExchange) -- found via a real
76
+ // session where the player slipped rooms mid-exchange. The pause
77
+ // BETWEEN exchanges is the window to run.
78
+ // Applies to every combatant, NPCs included -- an NPC's AI loop firing
79
+ // "go" while its own exchange still resolves is how a fleeing target
80
+ // once got shot mid-exchange by interleaved resolutions.
81
+ if (this.actor.inExchange || (this.actor === this.scene.getPlayer() && this.scene.isPlayerExchangeActive())) {
82
+ // The player is refused (they can retype in the lull). An NPC's flee
83
+ // attempt instead WAITS for the lull and then goes -- its AI decides
84
+ // to run exactly once, mid-exchange, and discarding that meant a
85
+ // wounded NPC trying to disengage just stood there forever while the
86
+ // player wondered why the fight had stalled (see
87
+ // CombatExchange.waitForLull). The parting-shot toll below still
88
+ // applies when they finally make their break.
89
+ if (this.actor === this.scene.getPlayer()) {
90
+ this.logger.write(`GoCommand: ${this.actor.name} tried to move mid-exchange -- blocked.`);
91
+ return `Lead is flying -- you can't disengage until the exchange resolves. (The lull after it is your chance to run.)`;
92
+ }
93
+ if (this.actor.waitingForLull) {
94
+ return `You're already waiting for an opening -- one move at a time.`;
95
+ }
96
+ this.actor.waitingForLull = true;
97
+ try {
98
+ const settled = await CombatExchange.waitForLull([this.actor]);
99
+ if (!settled) {
100
+ this.logger.write(`GoCommand: ${this.actor.name} tried to move mid-exchange -- blocked (wait timed out).`);
101
+ return `Lead is flying -- you can't disengage until the exchange resolves. (The lull after it is your chance to run.)`;
102
+ }
103
+ if (this.actor.isIncapacitated()) {
104
+ return `You're down. You aren't going anywhere.`;
105
+ }
106
+ this.logger.write(`GoCommand: ${this.actor.name} waited out an exchange and now makes their move.`);
107
+ return await this.go(args);
108
+ }
109
+ finally {
110
+ this.actor.waitingForLull = false;
111
+ }
112
+ }
113
+ // Disengaging isn't free: walking out on a live, recent opponent who's
114
+ // still in the room hands them one unanswered PARTING SHOT at your
115
+ // back. Survive it and you're gone (the fight is considered broken --
116
+ // no second toll if you come back and flee again without a new
117
+ // exchange); drop, and you never make the door. Applies to fleeing
118
+ // NPCs just the same.
119
+ const partingShot = await this.resolvePartingShot();
120
+ if (partingShot)
121
+ return partingShot;
17
122
  const direction = args[0].toLowerCase();
18
123
  if (!this.isValidDirection(direction)) {
19
124
  this.logger.write(`${this.actor.name} attempted to go ${direction} which is not valid.`);
@@ -31,7 +136,11 @@ export class GoCommand extends Command {
31
136
  }
32
137
  // If it's a Door, determine the target room
33
138
  if (exit instanceof Door) {
34
- if (exit.checkIfLocked()) {
139
+ // Locks are a MEAT problem: an astral form drifts through the
140
+ // physical door, a Matrix persona rides the grid past it. Wards are
141
+ // the astral's locks (checked below); nodes gate nothing for
142
+ // movement -- the grid overlays everything.
143
+ if (exit.checkIfLocked() && this.actor.plane === 'meat') {
35
144
  this.actor.performAction('is prevented by locked door', currentRoom.name);
36
145
  return `The door in the direction "${direction}" is locked.`;
37
146
  }
@@ -41,7 +150,11 @@ export class GoCommand extends Command {
41
150
  this.logger.error(`${this.actor.name} 'Go' command failed: Unable to determine the other side of the door.`);
42
151
  return 'There seems to be an error with the door you\'re trying to go through.';
43
152
  }
153
+ const wardBlock = this.checkWard(targetRoom);
154
+ if (wardBlock)
155
+ return wardBlock;
44
156
  this.actor.performAction('exits', `${this.actor.currentLocation.name} to ${targetRoom.name}`);
157
+ this.actor.cameFrom = { room: this.actor.currentLocation.name, back: GoCommand.opposite(direction) };
45
158
  this.actor.currentLocation = targetRoom; // Update player's location
46
159
  this.actor.performAction('enters', targetRoom.name);
47
160
  }
@@ -52,12 +165,42 @@ export class GoCommand extends Command {
52
165
  this.logger.error(`${this.actor.name} 'Go' command failed: Room "${exit}" not found.`);
53
166
  return 'There seems to be an error with the room you\'re trying to go to.';
54
167
  }
168
+ const wardBlock = this.checkWard(nextRoom);
169
+ if (wardBlock)
170
+ return wardBlock;
171
+ this.actor.cameFrom = { room: this.actor.currentLocation.name, back: GoCommand.opposite(direction) };
55
172
  this.actor.currentLocation = nextRoom;
56
173
  this.actor.performAction('enters', nextRoom.name);
57
174
  }
58
- this.logger.write(`${this.actor.name} moved to room: ${this.actor.currentLocation.name || 'Unnamed room'}.`);
175
+ // Astral movement accrues the snap-back debt (see planes.ts).
176
+ if (this.actor.plane === 'astral') {
177
+ this.actor.astralTicks += 1;
178
+ }
179
+ // HUB sessions: walking into your hideout with the job WRAPPED is
180
+ // going home -- the door opens back onto the hub (see
181
+ // Game.returnToHub). This replaced the retired "continue" command:
182
+ // finishing a run ends in fiction, not in a system verb.
183
+ if (this.game?.hasHub && !this.scene.isHub && this.scene.isCompleted()
184
+ && this.actor === this.scene.getPlayer()
185
+ && this.actor.currentLocation === this.game.homeRoom) {
186
+ return await this.game.continueToNextScene();
187
+ }
188
+ this.logger.write(`${this.actor.name} moved to room: ${this.actor.currentLocation.name || 'Unnamed room'} (${this.actor.plane}).`);
59
189
  // Use the LookCommand to get the description of the new room
60
190
  return this.actor.currentLocation.description;
61
191
  }
192
+ /** The direction that undoes a move -- feeds the HUD breadcrumb. */
193
+ static opposite(direction) {
194
+ const map = { north: 'south', south: 'north', east: 'west', west: 'east', up: 'down', down: 'up' };
195
+ return map[direction] ?? direction;
196
+ }
197
+ /** Wards block astral forms and nothing else. Returns the refusal, or null. */
198
+ checkWard(target) {
199
+ if (this.actor.plane === 'astral' && target.warded) {
200
+ this.actor.performAction('is repelled by a ward', target.name);
201
+ return `A ward seals ${target.name} -- the barrier flares at your touch and holds. No astral form passes without tearing it down.`;
202
+ }
203
+ return null;
204
+ }
62
205
  }
63
206
  //# sourceMappingURL=go.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/go.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/go.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { BypassCommand } from './bypass-command.js';
2
+ import { PuzzleBypassType } from '../types/seed/puzzle-seed.js';
3
+ export declare class HackCommand extends BypassCommand {
4
+ protected static verb: string;
5
+ protected static description: string;
6
+ protected bypassType: PuzzleBypassType;
7
+ protected noPuzzleMessage: string;
8
+ execute(args?: string[]): Promise<string>;
9
+ /**
10
+ * The PAN duel: opposed roll, attacker's Logic + deck quality (a
11
+ * technomancer uses half resonance instead of a deck) vs the target's
12
+ * Logic + master-device firewall -- slaving, simplified -- with +2 to
13
+ * the defense while running silent (a hidden PAN must be FOUND).
14
+ *
15
+ * Effects, in priority order on a LOUD target: jam the equipped smart
16
+ * firearm; else cut the AR overlay (initiative bonus gone, calls
17
+ * dropped). Against a SILENT target, a win only forces the PAN loud --
18
+ * the follow-up crack is its own attempt. "reboot" clears everything.
19
+ *
20
+ * Returns null when the args don't name a hackable actor here, so
21
+ * barrier names and directions fall through to the puzzle path.
22
+ */
23
+ private tryPanHack;
24
+ protected determineOutcome(): Promise<boolean>;
25
+ }