@maka/maka-cli 5.6.0 → 5.8.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 (243) hide show
  1. package/bundle/typescript/package.json +2 -2
  2. package/bundle/typescript/src/commands/_index.d.ts +4 -0
  3. package/bundle/typescript/src/commands/_index.js +4 -0
  4. package/bundle/typescript/src/commands/_index.js.map +1 -1
  5. package/bundle/typescript/src/commands/debug.js +1 -7
  6. package/bundle/typescript/src/commands/debug.js.map +1 -1
  7. package/bundle/typescript/src/commands/deploy/ubuntu.sub.cmd.js +33 -32
  8. package/bundle/typescript/src/commands/deploy/ubuntu.sub.cmd.js.map +1 -1
  9. package/bundle/typescript/src/commands/env/_index.d.ts +3 -0
  10. package/bundle/typescript/src/commands/env/_index.js +4 -0
  11. package/bundle/typescript/src/commands/env/_index.js.map +1 -0
  12. package/bundle/typescript/src/commands/env/env.command.d.ts +3 -0
  13. package/bundle/typescript/src/commands/env/env.command.js +22 -0
  14. package/bundle/typescript/src/commands/env/env.command.js.map +1 -0
  15. package/bundle/typescript/src/commands/env/get.sub.cmd.d.ts +1 -0
  16. package/bundle/typescript/src/commands/env/get.sub.cmd.js +46 -0
  17. package/bundle/typescript/src/commands/env/get.sub.cmd.js.map +1 -0
  18. package/bundle/typescript/src/commands/env/prompt-for-env.d.ts +10 -0
  19. package/bundle/typescript/src/commands/env/prompt-for-env.js +27 -0
  20. package/bundle/typescript/src/commands/env/prompt-for-env.js.map +1 -0
  21. package/bundle/typescript/src/commands/env/set.sub.cmd.d.ts +1 -0
  22. package/bundle/typescript/src/commands/env/set.sub.cmd.js +59 -0
  23. package/bundle/typescript/src/commands/env/set.sub.cmd.js.map +1 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/archetypes.d.ts +16 -0
  25. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +81 -2
  26. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +31 -0
  28. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +125 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -0
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.d.ts +17 -7
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js +113 -15
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js.map +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.d.ts +37 -0
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +197 -0
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -0
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js +3 -0
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js +21 -11
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.d.ts +3 -2
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +13 -5
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.js +7 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.js.map +1 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.d.ts +16 -0
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +97 -0
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -0
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.d.ts +21 -10
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +41 -27
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +6 -7
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +54 -20
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.d.ts +35 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +306 -55
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.d.ts +33 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +137 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -0
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.d.ts +13 -0
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js +37 -0
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js.map +1 -0
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/drink.d.ts +14 -0
  64. package/bundle/typescript/src/commands/game/sideQuest/commands/drink.js +15 -0
  65. package/bundle/typescript/src/commands/game/sideQuest/commands/drink.js.map +1 -0
  66. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js +1 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js.map +1 -1
  68. package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js +7 -0
  69. package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js.map +1 -1
  70. package/bundle/typescript/src/commands/game/sideQuest/commands/eat.d.ts +14 -0
  71. package/bundle/typescript/src/commands/game/sideQuest/commands/eat.js +15 -0
  72. package/bundle/typescript/src/commands/game/sideQuest/commands/eat.js.map +1 -0
  73. package/bundle/typescript/src/commands/game/sideQuest/commands/edge.js +10 -0
  74. package/bundle/typescript/src/commands/game/sideQuest/commands/edge.js.map +1 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js +3 -0
  76. package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/commands/give.js +101 -1
  78. package/bundle/typescript/src/commands/game/sideQuest/commands/give.js.map +1 -1
  79. package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +6 -1
  80. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +67 -22
  81. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  82. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +15 -7
  83. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  84. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +58 -2
  85. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  86. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.d.ts +26 -0
  87. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +125 -0
  88. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -0
  89. package/bundle/typescript/src/commands/game/sideQuest/commands/install.d.ts +21 -0
  90. package/bundle/typescript/src/commands/game/sideQuest/commands/install.js +125 -0
  91. package/bundle/typescript/src/commands/game/sideQuest/commands/install.js.map +1 -0
  92. package/bundle/typescript/src/commands/game/sideQuest/commands/jump.d.ts +16 -0
  93. package/bundle/typescript/src/commands/game/sideQuest/commands/jump.js +83 -0
  94. package/bundle/typescript/src/commands/game/sideQuest/commands/jump.js.map +1 -0
  95. package/bundle/typescript/src/commands/game/sideQuest/commands/lifestyle.d.ts +16 -0
  96. package/bundle/typescript/src/commands/game/sideQuest/commands/lifestyle.js +76 -0
  97. package/bundle/typescript/src/commands/game/sideQuest/commands/lifestyle.js.map +1 -0
  98. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js +4 -0
  99. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js.map +1 -1
  100. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +7 -6
  101. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  102. package/bundle/typescript/src/commands/game/sideQuest/commands/order.d.ts +19 -0
  103. package/bundle/typescript/src/commands/game/sideQuest/commands/order.js +151 -0
  104. package/bundle/typescript/src/commands/game/sideQuest/commands/order.js.map +1 -0
  105. package/bundle/typescript/src/commands/game/sideQuest/commands/pay.d.ts +13 -0
  106. package/bundle/typescript/src/commands/game/sideQuest/commands/pay.js +39 -0
  107. package/bundle/typescript/src/commands/game/sideQuest/commands/pay.js.map +1 -0
  108. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +5 -1
  109. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -1
  110. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +6 -3
  111. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -1
  112. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.d.ts +21 -0
  113. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js +121 -0
  114. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js.map +1 -0
  115. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +60 -12
  116. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
  117. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +27 -10
  118. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
  119. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +15 -4
  120. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  121. package/bundle/typescript/src/commands/game/sideQuest/commands/sell.d.ts +17 -0
  122. package/bundle/typescript/src/commands/game/sideQuest/commands/sell.js +125 -0
  123. package/bundle/typescript/src/commands/game/sideQuest/commands/sell.js.map +1 -0
  124. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +36 -3
  125. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  126. package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.js +9 -1
  127. package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.js.map +1 -1
  128. package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js +27 -4
  129. package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js.map +1 -1
  130. package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js +1 -1
  131. package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js.map +1 -1
  132. package/bundle/typescript/src/commands/game/sideQuest/commands/summon.d.ts +19 -0
  133. package/bundle/typescript/src/commands/game/sideQuest/commands/summon.js +112 -0
  134. package/bundle/typescript/src/commands/game/sideQuest/commands/summon.js.map +1 -0
  135. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +8 -0
  136. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
  137. package/bundle/typescript/src/commands/game/sideQuest/commands/treat.d.ts +14 -0
  138. package/bundle/typescript/src/commands/game/sideQuest/commands/treat.js +67 -0
  139. package/bundle/typescript/src/commands/game/sideQuest/commands/treat.js.map +1 -0
  140. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +7 -0
  141. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
  142. package/bundle/typescript/src/commands/game/sideQuest/commands/use.d.ts +29 -0
  143. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +118 -11
  144. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  145. package/bundle/typescript/src/commands/game/sideQuest/commands/work.d.ts +15 -0
  146. package/bundle/typescript/src/commands/game/sideQuest/commands/work.js +68 -0
  147. package/bundle/typescript/src/commands/game/sideQuest/commands/work.js.map +1 -0
  148. package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js +2 -1
  149. package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js.map +1 -1
  150. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +1 -1
  151. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +132 -5
  152. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  153. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.d.ts +6 -2
  154. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js +10 -6
  155. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js.map +1 -1
  156. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +196 -0
  157. package/bundle/typescript/src/commands/game/sideQuest/game.js +828 -31
  158. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  159. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +28 -0
  160. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +111 -0
  161. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  162. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +33 -1
  163. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +232 -10
  164. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  165. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +111 -5
  166. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +432 -41
  167. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  168. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +6 -6
  169. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +38 -14
  170. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +1 -1
  171. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +1 -0
  172. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +6 -0
  173. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  174. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +9 -0
  175. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +48 -8
  176. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  177. package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +44 -0
  178. package/bundle/typescript/src/commands/game/sideQuest/qualities.js +155 -0
  179. package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -0
  180. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +274 -5
  181. package/bundle/typescript/src/commands/game/sideQuest/types/seed/item-seed.d.ts +1 -0
  182. package/bundle/typescript/src/commands/game/sideQuest/types/seed/scene-seed.d.ts +17 -0
  183. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.d.ts +2 -0
  184. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js +4 -0
  185. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js.map +1 -1
  186. package/bundle/typescript/src/commands/game/sideQuest/ui.js +82 -8
  187. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  188. package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.d.ts +13 -6
  189. package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.js +28 -15
  190. package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.js.map +1 -1
  191. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +15 -3
  192. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +207 -34
  193. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  194. package/bundle/typescript/src/commands/game/sideQuest/utilities/commerce.d.ts +56 -0
  195. package/bundle/typescript/src/commands/game/sideQuest/utilities/commerce.js +144 -0
  196. package/bundle/typescript/src/commands/game/sideQuest/utilities/commerce.js.map +1 -0
  197. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.d.ts +7 -4
  198. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js +8 -5
  199. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js.map +1 -1
  200. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.d.ts +14 -0
  201. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js +15 -0
  202. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js.map +1 -0
  203. package/bundle/typescript/src/commands/game/sideQuest/utilities/logger.d.ts +16 -0
  204. package/bundle/typescript/src/commands/game/sideQuest/utilities/logger.js +49 -4
  205. package/bundle/typescript/src/commands/game/sideQuest/utilities/logger.js.map +1 -1
  206. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.d.ts +10 -0
  207. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.js +16 -0
  208. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.js.map +1 -0
  209. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +21 -0
  210. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +107 -0
  211. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
  212. package/bundle/typescript/src/commands/game/sideQuest/utilities/terminal-reset.d.ts +17 -0
  213. package/bundle/typescript/src/commands/game/sideQuest/utilities/terminal-reset.js +23 -0
  214. package/bundle/typescript/src/commands/game/sideQuest/utilities/terminal-reset.js.map +1 -0
  215. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +51 -15
  216. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  217. package/bundle/typescript/src/commands/remote/reconfig.sub.cmd.js +27 -1
  218. package/bundle/typescript/src/commands/remote/reconfig.sub.cmd.js.map +1 -1
  219. package/bundle/typescript/src/commands/run/run.command.js +1 -7
  220. package/bundle/typescript/src/commands/run/run.command.js.map +1 -1
  221. package/bundle/typescript/src/commands/ssl.js +10 -15
  222. package/bundle/typescript/src/commands/ssl.js.map +1 -1
  223. package/bundle/typescript/src/commands/testCmd/mocha.sub.cmd.js +1 -6
  224. package/bundle/typescript/src/commands/testCmd/mocha.sub.cmd.js.map +1 -1
  225. package/bundle/typescript/src/generators/config.js +11 -10
  226. package/bundle/typescript/src/generators/config.js.map +1 -1
  227. package/bundle/typescript/src/templates/meteor/config/pm2.config.js +3 -3
  228. package/bundle/typescript/src/templates/meteor/project/gitignore +2 -1
  229. package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.tsx +3 -4
  230. package/bundle/typescript/src/tool.d.ts +2 -0
  231. package/bundle/typescript/src/tool.js +3 -0
  232. package/bundle/typescript/src/tool.js.map +1 -1
  233. package/bundle/typescript/src/tools/aws/aws.class.js +6 -4
  234. package/bundle/typescript/src/tools/aws/aws.class.js.map +1 -1
  235. package/bundle/typescript/src/tools/dotenvx/dotenvx.class.d.ts +24 -0
  236. package/bundle/typescript/src/tools/dotenvx/dotenvx.class.js +66 -0
  237. package/bundle/typescript/src/tools/dotenvx/dotenvx.class.js.map +1 -0
  238. package/bundle/typescript/src/tools/ssh/ssh.class.js +1 -1
  239. package/bundle/typescript/src/tools/ssh/ssh.class.js.map +1 -1
  240. package/bundle/typescript/src/tools/ssl/ssl.class.d.ts +8 -0
  241. package/bundle/typescript/src/tools/ssl/ssl.class.js +53 -0
  242. package/bundle/typescript/src/tools/ssl/ssl.class.js.map +1 -1
  243. package/package.json +2 -2
@@ -30,24 +30,41 @@ export class SayCommand extends Command {
30
30
  const prefix = inCall ? `${CALL_ICON} ` : '';
31
31
  this.logger.logWithColor(`${prefix}${message}`, inCall ? CALL_COLOR : 'yellow');
32
32
  }
33
- // Only the current actor says something in their room
34
- currentPlayer.currentLocation.say(currentPlayer, message);
35
33
  // "say" and "call" are deliberately similar -- once a call connects
36
34
  // (see call.ts), the two ends keep talking with the same "say" command
37
35
  // they already know, but it also reaches whoever they're on the line
38
- // with, regardless of room. Guarded against double delivery for the
39
- // (unusual) case where the call partner is actually in the same room.
40
- // Deliberately NOT awaited (same as call.ts): the partner's reply is
41
- // an AI round trip that announces itself when it arrives -- awaiting
42
- // it here held the whole command (and the input box's clear) hostage
43
- // for seconds, found via a real session where typed text visibly
44
- // lingered while on a call.
36
+ // with, regardless of room.
37
+ //
38
+ // ON A CALL, the room's bystanders get a different delivery: they can
39
+ // hear ONE SIDE of your call (that's how phones work on a street
40
+ // corner), but they're not being spoken to -- and without saying so,
41
+ // their AI treated your side of the call as conversation and butted
42
+ // in (a real session: Skitter answered the player's "I could use it
43
+ // -- sure" that was meant for Mr. Johnson). The tag keeps the
44
+ // eavesdrop -- Wu's rumor network SHOULD notice you taking work --
45
+ // while telling them it's not their conversation.
46
+ //
47
+ // Partner delivery is deliberately NOT awaited (same as call.ts): the
48
+ // reply is an AI round trip that announces itself when it arrives --
49
+ // awaiting it held the input box hostage for seconds in a real session.
45
50
  const partner = currentPlayer.activeCallPartner;
46
- if (partner && partner.currentLocation !== currentPlayer.currentLocation) {
51
+ if (partner) {
52
+ const overheard = `${message} [System note: ${currentPlayer.name} is speaking into their commlink -- you're overhearing ONE SIDE of someone else's call, not being addressed. It's not your conversation: stay silent unless what you overheard genuinely concerns you.]`;
53
+ for (const bystander of currentPlayer.currentLocation.getActors()) {
54
+ if (bystander === currentPlayer || bystander === partner)
55
+ continue;
56
+ void Promise.resolve(bystander.hear(currentPlayer, overheard)).catch(err => {
57
+ this.logger.error(`${bystander.name} failed to overhear the call: ${err}`);
58
+ });
59
+ }
47
60
  void Promise.resolve(partner.hear(currentPlayer, message)).catch(err => {
48
61
  this.logger.error(`${partner.name} failed to hear ${currentPlayer.name} over the call: ${err}`);
49
62
  });
50
63
  }
64
+ else {
65
+ // Not on a call: ordinary room speech, addressed to the room.
66
+ currentPlayer.currentLocation.say(currentPlayer, message);
67
+ }
51
68
  // An astral voice never reaches meat ears (hear() drops it silently on
52
69
  // their end -- see Player.canPerceive), so without this note a
53
70
  // projecting player gets no hint their words went nowhere.
@@ -1 +1 @@
1
- {"version":3,"file":"say.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/say.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,OAAO,UAAW,SAAQ,OAAO;IAC3B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;IACpB,MAAM,CAAC,WAAW,GAAG,sDAAsD,CAAC;IAC5E,OAAO,CAAsB;IAEvC,YAAY,OAA4B;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAc;QAC1B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,0BAA0B,CAAC;QACpC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEjC,iDAAiD;QACjD,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAClD,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC;YACjC,oEAAoE;YACpE,qEAAqE;YACrE,qEAAqE;YACrE,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClF,CAAC;QAED,sDAAsD;QACtD,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAE1D,oEAAoE;QACpE,uEAAuE;QACvE,qEAAqE;QACrE,oEAAoE;QACpE,sEAAsE;QACtE,qEAAqE;QACrE,qEAAqE;QACrE,qEAAqE;QACrE,iEAAiE;QACjE,4BAA4B;QAC5B,MAAM,OAAO,GAAG,aAAa,CAAC,iBAAiB,CAAC;QAChD,IAAI,OAAO,IAAI,OAAO,CAAC,eAAe,KAAK,aAAa,CAAC,eAAe,EAAE,CAAC;YACzE,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACrE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,mBAAmB,aAAa,CAAC,IAAI,mBAAmB,GAAG,EAAE,CAAC,CAAC;YAClG,CAAC,CAAC,CAAC;QACL,CAAC;QAED,uEAAuE;QACvE,+DAA+D;QAC/D,2DAA2D;QAC3D,IAAI,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC;YACrE,OAAO,kGAAkG,CAAC;QAC5G,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC"}
1
+ {"version":3,"file":"say.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/say.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,17 @@ export class SearchCommand extends Command {
13
13
  // in plain sight and show regardless -- you can't fail to notice the
14
14
  // maglock you're staring at.
15
15
  const perception = this.actor.skillRating('perception');
16
- const pool = Math.max(1, this.actor.intuition + (perception > 0 ? perception : -1) + this.actor.woundModifier - this.actor.sustainingPenalty);
16
+ const pool = Math.max(1, this.actor.intuition + (perception > 0 ? perception : -1) + this.actor.augBonus('perception') + this.actor.woundModifier - this.actor.sustainingPenalty);
17
17
  const roll = rollPool(pool);
18
+ // Roll anatomy to the Mechanics ticker for the player; an NPC's
19
+ // return string is its AI history, so IT keeps the roll inline
20
+ // (readability pass).
21
+ const isPlayer = this.actor === this.scene.getPlayer();
22
+ if (isPlayer)
23
+ this.logger.meta(`Perception: ${formatRoll(roll)}`);
24
+ const rollPrefix = isPlayer ? '' : `Perception: ${formatRoll(roll)}\n`;
18
25
  if (roll.hits === 0) {
19
- let missed = `Perception: ${formatRoll(roll)}\nYou sweep the room and come up empty... you think.`;
26
+ let missed = `${rollPrefix}You sweep the room and come up empty... you think.`;
20
27
  for (const target of room.getPuzzleTargets()) {
21
28
  const directionNote = target.direction ? ` (blocking the way ${target.direction})` : '';
22
29
  missed += `\n\n${target.puzzle.riddle}${directionNote}`;
@@ -32,9 +39,13 @@ export class SearchCommand extends Command {
32
39
  // persona that rode in remotely doesn't even see them (canReachHost).
33
40
  const hostReachable = canReachHost(this.actor, room);
34
41
  const found = room.inventory.getAllItems()
35
- .filter(i => i.plane === this.actor.plane || (this.actor.plane === 'astral' && i.plane === 'meat'))
42
+ .filter(i => i.plane === this.actor.plane
43
+ || (this.actor.plane === 'astral' && i.plane === 'meat')
44
+ // Drone sensors sweep the PHYSICAL room -- meat items show
45
+ // (looking is free; taking still needs hands, see take.ts).
46
+ || (this.actor.plane === 'drone' && i.plane === 'meat'))
36
47
  .filter(i => !(i.plane === 'matrix' && room.hasNode && !hostReachable));
37
- let description = `Perception: ${formatRoll(roll)}\n`;
48
+ let description = rollPrefix;
38
49
  if (found.length === 0) {
39
50
  description += "You search the area thoroughly, but don't find any items.";
40
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * Fencing loot: "sell <item>" in front of a fence (Whisper's pawnshop, or
4
+ * any generated NPC/room in the trade -- see commerce.isFence) quotes 40%
5
+ * of street value, no questions. Repeat the sell to close at the standing
6
+ * offer, or "haggle" first to push the rate (once per piece, opposed
7
+ * negotiation -- see haggle.ts's pending-sale branch). The quote lives on
8
+ * Game.pendingSale and dies if you walk or quote something else.
9
+ */
10
+ export declare class SellCommand extends Command implements ICommand {
11
+ protected static verb: string;
12
+ protected static description: string;
13
+ execute(args?: string[]): Promise<string>;
14
+ /** Completes the standing quote: goods across the counter, cred back. */
15
+ private close;
16
+ private listSellables;
17
+ }
@@ -0,0 +1,125 @@
1
+ import { Command } from './command.js';
2
+ import { priceOf, fenceValueOf, isSellable, isFence } from '../utilities/commerce.js';
3
+ /**
4
+ * Fencing loot: "sell <item>" in front of a fence (Whisper's pawnshop, or
5
+ * any generated NPC/room in the trade -- see commerce.isFence) quotes 40%
6
+ * of street value, no questions. Repeat the sell to close at the standing
7
+ * offer, or "haggle" first to push the rate (once per piece, opposed
8
+ * negotiation -- see haggle.ts's pending-sale branch). The quote lives on
9
+ * Game.pendingSale and dies if you walk or quote something else.
10
+ */
11
+ export class SellCommand extends Command {
12
+ static verb = 'sell';
13
+ static description = 'Fence loot at a pawnshop: "sell <item>" quotes 25% of street value (first of a category: +50%), "haggle" pushes the rate, sell again to close. Fences ask no questions.';
14
+ async execute(args = []) {
15
+ const actor = this.actor;
16
+ if (actor.plane !== 'meat') {
17
+ return `The fence deals in things a hand can pass over a counter. Come back to your body.`;
18
+ }
19
+ if (actor.inExchange) {
20
+ return `Mid-firefight is a seller's market for exactly nothing.`;
21
+ }
22
+ const fence = this.scene.getActorsInRoom(actor.currentLocation)
23
+ .find(a => a !== actor && a.plane === 'meat' && !a.isIncapacitated() && isFence(a, actor.currentLocation));
24
+ if (!fence) {
25
+ return `Nobody here buys the kind of thing you're selling. Fences work out of pawnshops -- there's one on the Underside.`;
26
+ }
27
+ const wanted = (args ?? []).join(' ').trim();
28
+ const pending = this.game?.pendingSale;
29
+ // Bare "sell": close the standing quote, or show what's fenceable.
30
+ if (!wanted) {
31
+ if (pending && pending.fence === fence.name && actor.inventory.hasItem(pending.itemName)) {
32
+ return this.close(fence);
33
+ }
34
+ return this.listSellables(fence);
35
+ }
36
+ const item = actor.inventory.getItem(wanted);
37
+ if (!item) {
38
+ return `You're not carrying any "${wanted}" to sell.`;
39
+ }
40
+ if (!isSellable(item)) {
41
+ return `${fence.name} taps the counter: "That's money, chummer. I sell things FOR money. Circular deals bore me."`;
42
+ }
43
+ // The job's objective is nobody's merchandise.
44
+ const wc = this.scene.getWinCondition();
45
+ if (wc && !this.scene.isCompleted() && wc.item?.toLowerCase() === item.name.toLowerCase()) {
46
+ return `${fence.name} slides it straight back. "That one's radioactive right now. Finish whatever it's tangled in, THEN we talk."`;
47
+ }
48
+ // Same item as the standing quote: that's acceptance.
49
+ if (pending && pending.fence === fence.name && pending.itemName.toLowerCase() === item.name.toLowerCase()) {
50
+ return this.close(fence);
51
+ }
52
+ // New quote (replaces any previous one). FIRST-OF-ITS-KIND bounty:
53
+ // the fence pays a 50% premium on the first item of each category to
54
+ // cross her counter -- variety in your looting is worth real cred,
55
+ // once per category per session.
56
+ const novel = this.game ? !this.game.fencedCategories.has(item.category) : false;
57
+ const offer = novel
58
+ ? Math.max(5, Math.round(fenceValueOf(item) * 1.5 / 5) * 5)
59
+ : fenceValueOf(item);
60
+ if (this.game) {
61
+ this.game.pendingSale = { itemName: item.name, price: offer, fence: fence.name, haggled: false };
62
+ }
63
+ actor.performAction('offers to sell', `${item.name} to ${fence.name}`);
64
+ this.logger.write(`SellCommand: ${actor.name} quoted ${item.name} at ${offer} by ${fence.name} (street ${priceOf(item)}${novel ? ', first-of-kind premium' : ''}).`);
65
+ return [
66
+ `${fence.name} turns the ${item.name} over once. "Quarter of street. No questions is the service you're paying for."`,
67
+ ...(novel ? [` A pause. "...First ${item.category} anyone's brought me in a while. I'll go half again on it."`] : []),
68
+ ` ${item.name}: ${priceOf(item)} street -> ${offer} nuyen offered.`,
69
+ ` "sell ${item.name.toLowerCase()}" again to take it -- or "haggle" to push the rate.`,
70
+ ].join('\n');
71
+ }
72
+ /** Completes the standing quote: goods across the counter, cred back. */
73
+ close(fence) {
74
+ const actor = this.actor;
75
+ const sale = this.game.pendingSale;
76
+ const item = actor.inventory.getItem(sale.itemName);
77
+ if (!item) {
78
+ this.game.pendingSale = undefined;
79
+ return `The ${sale.itemName} isn't on you anymore -- the deal evaporates.`;
80
+ }
81
+ actor.inventory.removeItem(item.name);
82
+ item.owner = fence.name;
83
+ try {
84
+ fence.addInventory(item);
85
+ }
86
+ catch {
87
+ actor.currentLocation.inventory.addItem(item);
88
+ }
89
+ actor.adjustCurrency(sale.price);
90
+ this.game.pendingSale = undefined;
91
+ // The first-of-its-kind premium (see the quote path) is spent now.
92
+ this.game.fencedCategories.add(item.category);
93
+ actor.performAction('sells', `${item.name} to ${fence.name}`);
94
+ this.logger.write(`SellCommand: ${actor.name} sold ${item.name} to ${fence.name} for ${sale.price} (${actor.currency} carried).`);
95
+ this.scene.addWorldEvent(`${actor.name} fenced ${item.name} at ${actor.currentLocation.name}.`);
96
+ this.scene.updateInventory(this.scene.getPlayer().inventory);
97
+ this.scene.updateStatus();
98
+ void Promise.resolve(fence.hear(actor, `Done -- it's yours. [System note: the sale closed at ${sale.price} nuyen for the ${item.name}; it's in your stock now. React briefly, in character.]`)).catch(err => {
99
+ this.logger.error(`${fence.name} failed to hear the sale: ${err}`);
100
+ });
101
+ // Moving goods both ways builds the relationship -- the fence's
102
+ // ledger counts value THROUGH the counter, not just spent at it.
103
+ const bond = this.game?.touchContact(fence.name, 'trade', sale.price);
104
+ return [
105
+ `The ${item.name} disappears under the counter; ${sale.price} nuyen appears over it.`,
106
+ ` (You're carrying ${actor.currency} nuyen.)`,
107
+ ...(bond ? [bond] : []),
108
+ ].join('\n');
109
+ }
110
+ listSellables(fence) {
111
+ const goods = this.actor.inventory.getAllItems().filter(isSellable);
112
+ if (goods.length === 0) {
113
+ return `${fence.name} glances at your empty hands. "Come back when you're carrying something interesting."`;
114
+ }
115
+ const lines = [`${fence.name} waits. What you could put on the counter:`];
116
+ for (const item of goods) {
117
+ const dots = '.'.repeat(Math.max(2, 28 - item.name.length));
118
+ lines.push(` ${item.name} ${dots} ~${fenceValueOf(item)} nuyen`);
119
+ }
120
+ lines.push('');
121
+ lines.push(`"sell <item>" for a firm quote. (Worn gear must be unequipped first.)`);
122
+ return lines.join('\n');
123
+ }
124
+ }
125
+ //# sourceMappingURL=sell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sell.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sell.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import { Command } from './command.js';
2
2
  import { SKILL_NAMES } from '../models/player.js';
3
+ import { AUGMENTATIONS } from '../augmentations.js';
4
+ import { QUALITIES } from '../qualities.js';
5
+ import { METAMAGICS } from './initiate.js';
3
6
  /**
4
7
  * The character sheet: every attribute and the derived numbers they feed,
5
8
  * in the same on-demand panel style as spells/inv/equipment. What each
@@ -24,12 +27,31 @@ export class SheetCommand extends Command {
24
27
  attr('Logic', a.logic, 'first aid, hacking'),
25
28
  attr('Intuition', a.intuition, 'defense (half), perception'),
26
29
  attr('Charisma', a.charisma, 'presence -- the talking stats are coming'),
27
- attr('Magic', a.magic, a.adept
30
+ attr('Magic', a.magic, (a.adept
28
31
  ? 'ADEPT -- body-magic: half rides every meat attack/defense; no spells, no projection'
29
- : a.isAwakened() ? 'AWAKENED -- innate casting (see "spells")' : 'mundane'),
30
- ...(a.isTechnomancer() ? [attr('Resonance', a.resonance, 'TECHNOMANCER -- the Matrix without a deck; all Matrix damage is REAL stun')] : []),
32
+ : a.isAwakened() ? 'AWAKENED -- innate casting (see "spells")' : a.baseMagic > 0 ? 'burned out' : 'mundane')
33
+ + (a.baseMagic > a.magic ? ` (was ${a.baseMagic} -- essence loss)` : '')),
34
+ ...(a.baseResonance > 0 ? [attr('Resonance', a.resonance, 'TECHNOMANCER -- the Matrix without a deck; all Matrix damage is REAL stun'
35
+ + (a.baseResonance > a.resonance ? ` (was ${a.baseResonance} -- essence loss)` : ''))] : []),
31
36
  attr('Edge', a.edge, `luck -- ${a.edgeRemaining}/${a.edge} left this job${a.edgeBoostArmed ? ', a boost is BURNING now' : ''} ("edge" to burn one)`),
37
+ ` ${'Essence'.padEnd(10)} ${a.essence.toFixed(1).padStart(3)} -- what chrome hasn't claimed ("install" at a clinic to trade more away)`,
38
+ ...(this.game?.hasHub ? [` ${'Lifestyle'.padEnd(10)} ${this.game.lifestyleTier.padStart(3)} -- ${this.game.lifestyle.upkeep}/job upkeep${this.game.rentDebt > 0 ? `, ${this.game.rentDebt} OWED ("pay")` : ''} ("lifestyle" to move)`] : []),
32
39
  '',
40
+ // The chrome itself, when any is in: name, essence toll, and what it
41
+ // actually does to the dice.
42
+ ...(a.augmentations.size > 0 ? [
43
+ `'Ware installed:`,
44
+ ...AUGMENTATIONS.filter(w => a.hasAug(w.key)).map(w => ` ${w.name.padEnd(18)} -${w.essence.toFixed(1)} ess ${w.effect}`),
45
+ '',
46
+ ] : []),
47
+ // The traits that make the spread a person (SR5e p.71-85): positive
48
+ // qualities cost creation karma, negative ones refunded it -- the
49
+ // ledger is why different archetypes start with different karma.
50
+ ...(a.qualities.size > 0 ? [
51
+ `Qualities (creation karma paid for the good, the bad paid you back):`,
52
+ ...QUALITIES.filter(q => a.hasQuality(q.key)).map(q => ` ${(q.kind === 'positive' ? '+ ' : '- ') + q.name.padEnd(24)} ${q.effect} (${q.kind === 'positive' ? `${q.karma} karma, ` : `+${q.karma} karma, `}${q.page})`),
53
+ '',
54
+ ] : []),
33
55
  // Rated skills only -- fifteen zero lines is noise; "advance" shows
34
56
  // the full trainable list. The old generic Skill attribute is gone
35
57
  // from the sheet: pools now roll the SPECIFIC skill (firearms /
@@ -49,6 +71,17 @@ export class SheetCommand extends Command {
49
71
  ` Physical: ${a.conditionSummary()}`,
50
72
  ` Stun: ${a.stunSummary()}`,
51
73
  ...(a.getAnyCyberdeck() ? [` Deck: ${a.getAnyCyberdeck().name} ${a.matrixSummary()}${a.getAnyCyberdeck().isBricked ? ' -- BRICKED (rest to repair)' : ''}`] : []),
74
+ // Carried airframes with their hull tracks ("jump" to ride one).
75
+ ...a.inventory.getAllItems().filter(i => i.isDrone()).map(d => ` Drone: ${d.name} ${d.droneSummary()}${d.isWrecked ? ' -- WRECKED (rest to repair)' : a.riggedDrone === d ? ' -- JUMPED IN' : ''}`),
76
+ ` Needs: ${a.ateThisCycle ? 'fed' : `HUNGRY${a.hungerStreak > 0 ? ` (${a.hungerStreak} job${a.hungerStreak === 1 ? '' : 's'} running)` : ''} -- eat something`}, ${a.sleptThisCycle ? 'slept' : `SHORT ON SLEEP${a.sleepStreak > 0 ? ` (${a.sleepStreak} job${a.sleepStreak === 1 ? '' : 's'})` : ''} -- rest in a real bed`}${a.ateThisCycle && a.sleptThisCycle ? ' (edge refills at the next job)' : ' (edge will NOT refill)'}`,
77
+ // Reputation (SR5e p.367-368): cred from career karma, notoriety
78
+ // from qualities + incidents, awareness from both. The numbers are
79
+ // live pool modifiers, so the sheet says exactly where they bite.
80
+ ` Rep: Street Cred ${a.streetCred} (career karma ${a.careerKarma}) / Notoriety ${a.notoriety} / Awareness ${a.publicAwareness}${a.socialRep > 0 ? ` -- +${a.socialRep} dice on haggle/persuade` : ''}${a.notoriety > 0 ? `; threats +${Math.min(3, a.notoriety)}` : ''}${a.publicAwareness > 0 ? `; cons -${Math.min(2, a.publicAwareness)}` : ''}`,
81
+ ...(a.notorietyReasons.length > 0 ? [` Stains: ${a.notorietyReasons.join('; ')}`] : []),
82
+ // Initiation/submersion (p.324-326/p.257-258): grade + the picks.
83
+ ...(a.initiationGrade > 0 ? [` ${a.isTechnomancer() ? 'Submersion' : 'Initiation'}: grade ${a.initiationGrade} -- ${METAMAGICS.filter(m => a.hasMetamagic(m.key)).map(m => m.name).join(', ')} (talent ceiling ${6 + a.initiationGrade})`] : []),
84
+ ...(a.lockedFatigue > 0 ? [` Fatigue: ${a.lockedFatigue} stun LOCKED -- it will not heal until the need behind it is met`] : []),
52
85
  ...(a.woundModifier < 0 ? [` Wounds: ${a.woundModifier} dice on everything`] : []),
53
86
  ...(a.sustainedArmor > 0 ? [` Sustained: armor +${a.sustainedArmor} soak (-2 dice)`] : []),
54
87
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sheet.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,15 @@ export class SneakCommand extends Command {
29
29
  actor.sneaking = true;
30
30
  this.logger.write(`${actor.name} starts sneaking.`);
31
31
  this.scene.updateStatus();
32
- return `You drop into a ghost's walk -- low, quiet, out of the light. Each room you enter is an opposed test against whoever's inside; anything loud gives you away.`;
32
+ // Set expectations honestly: the opposed test happens at each DOOR, so
33
+ // anyone in THIS room already has you -- a real session read "sneak
34
+ // isn't working" when the goons standing right there kept reacting.
35
+ const watchers = this.scene.getActorsInRoom(actor.currentLocation)
36
+ .filter(a => a !== actor && a.plane === actor.plane && !a.isIncapacitated());
37
+ const watcherNote = watchers.length > 0
38
+ ? ` (${watchers.map(a => a.name).join(', ')} watched you do it -- the ghost's walk only beats eyes that haven't found you yet.)`
39
+ : '';
40
+ return `You drop into a ghost's walk -- low, quiet, out of the light. Each room you ENTER is an opposed Sneaking-vs-Perception roll per witness; anything loud gives you away.${watcherNote}`;
33
41
  }
34
42
  }
35
43
  //# sourceMappingURL=sneak.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sneak.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sneak.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAa,SAAQ,OAAO;IAC7B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,MAAM,CAAC,WAAW,GAAG,8IAA8I,CAAC;IAE9K,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAC7B,CAAC,CAAC,4FAA4F;gBAC9F,CAAC,CAAC,+CAA+C,CAAC;QACtD,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,+DAA+D,CAAC;QACzE,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC1B,OAAO,kDAAkD,CAAC;QAC5D,CAAC;QAED,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,8JAA8J,CAAC;IACxK,CAAC"}
1
+ {"version":3,"file":"sneak.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sneak.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAa,SAAQ,OAAO;IAC7B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,MAAM,CAAC,WAAW,GAAG,8IAA8I,CAAC;IAE9K,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAC7B,CAAC,CAAC,4FAA4F;gBAC9F,CAAC,CAAC,+CAA+C,CAAC;QACtD,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,+DAA+D,CAAC;QACzE,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC1B,OAAO,kDAAkD,CAAC;QAC5D,CAAC;QAED,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,uEAAuE;QACvE,oEAAoE;QACpE,oEAAoE;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC;aAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qFAAqF;YAChI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,yKAAyK,WAAW,EAAE,CAAC;IAChM,CAAC"}
@@ -61,25 +61,48 @@ export class SpellsCommand extends Command {
61
61
  if (actor.sustainedArmor > 0) {
62
62
  lines.push(`Sustained: armor spell, +${actor.sustainedArmor} soak (-2 dice to everything else). Cast armor again to release.`);
63
63
  }
64
+ if (actor.sustainedInvisibility) {
65
+ lines.push(`Sustained: invisibility, +3 on sneak contests (-2 dice to everything else). Cast invisibility again to release.`);
66
+ }
67
+ if (actor.sustainedReflexes) {
68
+ lines.push(`Sustained: increase reflexes, +2 initiative (-2 dice to everything else). Cast it again to release.`);
69
+ }
64
70
  // The spells themselves -- only what this actor actually knows.
71
+ // Grouped RAW-style (p.283-293): combat's direct/indirect split is
72
+ // the tactical decision, so the book spells it out.
65
73
  lines.push('');
66
74
  lines.push('Spells you know:');
67
75
  const known = [];
68
76
  if (actor.knowsSpell('manabolt')) {
69
- known.push(` manabolt -- hurl raw mana; resisted by Body, armor is useless against it. Drain 3. (cast manabolt at <target>)`);
77
+ known.push(` manabolt -- direct mana: resisted by WILLPOWER alone; armor and muscle mean nothing. Damage F-2, drain F-3. (cast manabolt [force] at <target>)`);
78
+ }
79
+ if (actor.knowsSpell('stunbolt')) {
80
+ known.push(` stunbolt -- direct mana, merciful: same reach as manabolt but the damage is STUN. Damage F-2, drain F-3. (cast stunbolt at <target>)`);
81
+ }
82
+ if (actor.knowsSpell('powerbolt')) {
83
+ known.push(` powerbolt -- direct physical: resisted by BODY alone; armor still means nothing. Damage F-2, drain F-3. (cast powerbolt at <target>)`);
84
+ }
85
+ if (actor.knowsSpell('fireball')) {
86
+ known.push(` fireball -- indirect elemental: soaked like a gunshot (Body + armor, AP F/3) but it hits at FULL Force. Drain F-2. (cast fireball at <target>)`);
70
87
  }
71
88
  if (actor.knowsSpell('heal')) {
72
- known.push(` heal -- knit physical wounds closed, yours or an ally's (touch range). Drain 2. (cast heal [on <ally>])`);
89
+ known.push(` heal -- knit physical wounds closed, yours or an ally's (touch range); Force caps the boxes. Drain F-4. (cast heal [on <ally>])`);
73
90
  }
74
91
  if (actor.knowsSpell('armor')) {
75
- known.push(` armor -- a sustained protective weave on you or an ally, +soak at -2 dice for its bearer. Drain 2. (cast armor [on <ally>])`);
92
+ known.push(` armor -- sustained weave, +ceil(F/3)+focus soak at -2 dice for its bearer. Drain F-4. (cast armor [on <ally>])`);
93
+ }
94
+ if (actor.knowsSpell('invisibility')) {
95
+ known.push(` invisibility -- sustained: light slides around the bearer, +3 on sneak contests at -2 dice. Drain F-4. (cast invisibility [on <ally>])`);
96
+ }
97
+ if (actor.knowsSpell('reflexes')) {
98
+ known.push(` increase reflexes -- sustained: +2 initiative for the bearer at -2 dice. Drain F-3. (cast increase reflexes [on <ally>])`);
76
99
  }
77
100
  if (known.length === 0) {
78
101
  known.push(` (none -- a focus channels power, but the spells themselves take a formula, a grimoire, or the Awakened gift)`);
79
102
  }
80
103
  lines.push(...known);
81
104
  lines.push('');
82
- lines.push(`Drain is the cost of every cast: resisted with Body, and what gets through fills your STUN track (${actor.stunSummary()}). Fill it and you're out cold; overflow spills into your body.`);
105
+ lines.push(`FORCE is the dial (SR5e p.281): "cast <spell> <force> ...". Leave it off and the spell casts at its drain-neutral Force (F3 for an F-3 spell -- costs nothing); every point higher buys power and bills drain, resisted with Willpower onto your STUN track (${actor.stunSummary()}). Cast PAST your talent${actor.isAwakened() ? ` (${actor.magic})` : ' (4, book-taught)'} and the drain turns PHYSICAL -- overcasting is how legends and corpses are made. Twice your talent is the hard ceiling.`);
83
106
  return lines.join('\n');
84
107
  }
85
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spells.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/spells.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,OAAO,aAAc,SAAQ,OAAO;IAC9B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,WAAW,GAAG,wFAAwF,CAAC;IAExH,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,kEAAkE;QAClE,qEAAqE;QACrE,qEAAqE;QACrE,oEAAoE;QACpE,uEAAuE;QACvE,iDAAiD;QACjD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACzC,OAAO;gBACL,gEAAgE;gBAChE,2BAA2B,KAAK,CAAC,KAAK,iDAAiD,IAAI,kHAAkH;gBAC7M,gHAAgH;aACjH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtB,OAAO,oMAAoM,CAAC;QAC9M,CAAC;QAED,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,CAAC;QAE9C,qEAAqE;QACrE,sEAAsE;QACtE,qEAAqE;QACrE,qBAAqB;QACrB,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,iJAAiJ,CAAC,CAAC;QAChK,CAAC;QAED,+BAA+B;QAC/B,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,KAAK,kEAAkE,CAAC,CAAC;QACvH,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9F,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,YAAY,CAAC,CAAC;YACjG,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,wCAAwC,OAAO,IAAI,iCAAiC,GAAG,CAAC,CAAC;QACtG,CAAC;QAED,yDAAyD;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QACnC,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACnG,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAClE,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,YAAY,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5E,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,cAAc,kEAAkE,CAAC,CAAC;QACjI,CAAC;QAED,gEAAgE;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,kHAAkH,CAAC,CAAC;QACjI,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;QAC1H,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,+HAA+H,CAAC,CAAC;QAC9I,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,gHAAgH,CAAC,CAAC;QAC/H,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAErB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qGAAqG,KAAK,CAAC,WAAW,EAAE,iEAAiE,CAAC,CAAC;QAEtM,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC"}
1
+ {"version":3,"file":"spells.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/spells.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { fuzzyPickName } from '../utilities/fuzzy-match.js';
10
10
  */
11
11
  export class StanceCommand extends Command {
12
12
  static verb = 'stance';
13
- static description = 'Set your fight autopilot: manual, guarded (subdues, honors surrender), or aggressive (to the death). Tab also cycles it.';
13
+ static description = 'Set your fight autopilot. You ALWAYS counter when struck; the stance decides who presses: manual (you type it), guarded (auto, subdues, honors surrender), aggressive (auto, to the death). Tab cycles.';
14
14
  async execute(args = []) {
15
15
  const actor = this.actor;
16
16
  if (!args || args.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"stance.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/stance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,OAAO,aAAc,SAAQ,OAAO;IAC9B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,WAAW,GAAG,0HAA0H,CAAC;IAE1J,KAAK,CAAC,OAAO,CAAC,OAAiB,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG;gBACZ,WAAW,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG;gBACvF,EAAE;gBACF,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,EAAE;gBACF,sGAAsG;aACvG,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,gCAAgC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACpE,CAAC;QAED,MAAM,MAAM,GAAG,MAAqB,CAAC;QACrC,IAAI,MAAM,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,WAAW,MAAM,CAAC,WAAW,EAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,kBAAkB,MAAM,GAAG,CAAC,CAAC;QAC5D,OAAO,WAAW,MAAM,CAAC,WAAW,EAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7E,CAAC"}
1
+ {"version":3,"file":"stance.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/stance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,OAAO,aAAc,SAAQ,OAAO;IAC9B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,WAAW,GAAG,yMAAyM,CAAC;IAEzO,KAAK,CAAC,OAAO,CAAC,OAAiB,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG;gBACZ,WAAW,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG;gBACvF,EAAE;gBACF,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,EAAE;gBACF,sGAAsG;aACvG,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,gCAAgC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACpE,CAAC;QAED,MAAM,MAAM,GAAG,MAAqB,CAAC;QACrC,IAAI,MAAM,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,WAAW,MAAM,CAAC,WAAW,EAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,kBAAkB,MAAM,GAAG,CAAC,CAAC;QAC5D,OAAO,WAAW,MAAM,CAAC,WAAW,EAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7E,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * Conjuring (SR5e p.300-303): "summon <force>" calls a spirit -- an
4
+ * opposed Magic + conjuring test against the spirit's Force dice. NET
5
+ * hits become SERVICES (zero and the astral doesn't answer); the spirit
6
+ * materializes beside you as a companion shell (see Game.companions):
7
+ * it follows, it fights (one service per fight, ticked in
8
+ * combat-exchange), it obeys "order", and it departs when the bargain
9
+ * is spent, when dismissed ("summon" again), or when you travel (RAW:
10
+ * the summons doesn't outlast the ride). Drain is the summoner's toll:
11
+ * 2 x the spirit's hits, minimum 2 -- PHYSICAL when Force exceeds your
12
+ * Magic, same overcast law as spellcasting. Force past twice your Magic
13
+ * is refused: some bargains end the summoner.
14
+ */
15
+ export declare class SummonCommand extends Command implements ICommand {
16
+ protected static verb: string;
17
+ protected static description: string;
18
+ execute(args?: string[]): Promise<string>;
19
+ }