@maka/maka-cli 5.63.1 → 5.65.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 (205) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js +29 -8
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.d.ts +42 -0
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +86 -3
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.d.ts +29 -2
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +151 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.d.ts +40 -13
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +107 -25
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.d.ts +11 -15
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js +13 -16
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js.map +1 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.d.ts +8 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +30 -2
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.d.ts +40 -49
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +121 -160
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +29 -5
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.d.ts +7 -8
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +13 -13
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js +22 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/cover.d.ts +30 -0
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/cover.js +65 -0
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/cover.js.map +1 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/dispel.d.ts +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/dispel.js +2 -2
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/dispel.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +25 -3
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +2 -3
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +2 -2
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/jobs.js +18 -10
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/jobs.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/journal.d.ts +44 -0
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/journal.js +136 -0
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/journal.js.map +1 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/look.d.ts +20 -0
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +157 -5
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +18 -4
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.d.ts +2 -3
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +2 -2
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/players.js +8 -2
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/players.js.map +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/posture.d.ts +45 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/posture.js +115 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/posture.js.map +1 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +46 -12
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +30 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js +11 -1
  64. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js.map +1 -1
  65. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +12 -0
  66. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.d.ts +47 -0
  68. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js +91 -5
  69. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js.map +1 -1
  70. package/bundle/typescript/src/commands/game/sideQuest/commands/time.d.ts +20 -0
  71. package/bundle/typescript/src/commands/game/sideQuest/commands/time.js +61 -0
  72. package/bundle/typescript/src/commands/game/sideQuest/commands/time.js.map +1 -0
  73. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +1 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/commands/use.d.ts +17 -0
  76. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +136 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  78. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  79. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +15 -1
  80. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  81. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +128 -44
  82. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +551 -254
  83. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  84. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +82 -84
  85. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  86. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.d.ts +23 -4
  87. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js +95 -79
  88. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js.map +1 -1
  89. package/bundle/typescript/src/commands/game/sideQuest/factories/seed-migration.d.ts +30 -0
  90. package/bundle/typescript/src/commands/game/sideQuest/factories/seed-migration.js +176 -0
  91. package/bundle/typescript/src/commands/game/sideQuest/factories/seed-migration.js.map +1 -0
  92. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +104 -0
  93. package/bundle/typescript/src/commands/game/sideQuest/game.js +268 -16
  94. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  95. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.d.ts +78 -0
  96. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +188 -0
  97. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -0
  98. package/bundle/typescript/src/commands/game/sideQuest/headless.d.ts +5 -0
  99. package/bundle/typescript/src/commands/game/sideQuest/headless.js +78 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
  101. package/bundle/typescript/src/commands/game/sideQuest/models/_index.d.ts +0 -1
  102. package/bundle/typescript/src/commands/game/sideQuest/models/_index.js +0 -1
  103. package/bundle/typescript/src/commands/game/sideQuest/models/_index.js.map +1 -1
  104. package/bundle/typescript/src/commands/game/sideQuest/models/device.d.ts +121 -0
  105. package/bundle/typescript/src/commands/game/sideQuest/models/device.js +145 -0
  106. package/bundle/typescript/src/commands/game/sideQuest/models/device.js.map +1 -0
  107. package/bundle/typescript/src/commands/game/sideQuest/models/door.d.ts +27 -8
  108. package/bundle/typescript/src/commands/game/sideQuest/models/door.js +15 -10
  109. package/bundle/typescript/src/commands/game/sideQuest/models/door.js.map +1 -1
  110. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +143 -0
  111. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +253 -30
  112. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  113. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +68 -0
  114. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +102 -0
  115. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  116. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +80 -34
  117. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +126 -54
  118. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  119. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +1 -4
  120. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +0 -22
  121. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  122. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +78 -109
  123. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +4 -101
  124. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +24 -0
  125. package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.d.ts +52 -0
  126. package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.js +2 -0
  127. package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.js.map +1 -0
  128. package/bundle/typescript/src/commands/game/sideQuest/types/seed/legacy-puzzle-seed.d.ts +63 -0
  129. package/bundle/typescript/src/commands/game/sideQuest/types/seed/legacy-puzzle-seed.js +2 -0
  130. package/bundle/typescript/src/commands/game/sideQuest/types/seed/legacy-puzzle-seed.js.map +1 -0
  131. package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +6 -0
  132. package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +4 -0
  133. package/bundle/typescript/src/commands/game/sideQuest/types/seed/scene-seed.d.ts +3 -2
  134. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.d.ts +2 -28
  135. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js +1 -14
  136. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js.map +1 -1
  137. package/bundle/typescript/src/commands/game/sideQuest/ui.js +24 -0
  138. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  139. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.d.ts +55 -0
  140. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.js +36 -0
  141. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.js.map +1 -0
  142. package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.d.ts +22 -0
  143. package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js +26 -0
  144. package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js.map +1 -1
  145. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js +6 -0
  146. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js.map +1 -1
  147. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.d.ts +45 -0
  148. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.js +116 -0
  149. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.js.map +1 -0
  150. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +73 -1
  151. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js +56 -1
  152. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
  153. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +37 -4
  154. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  155. package/bundle/typescript/src/commands/game/sideQuest/utilities/credentials.d.ts +26 -0
  156. package/bundle/typescript/src/commands/game/sideQuest/utilities/credentials.js +48 -0
  157. package/bundle/typescript/src/commands/game/sideQuest/utilities/credentials.js.map +1 -0
  158. package/bundle/typescript/src/commands/game/sideQuest/utilities/devices.d.ts +23 -0
  159. package/bundle/typescript/src/commands/game/sideQuest/utilities/devices.js +55 -0
  160. package/bundle/typescript/src/commands/game/sideQuest/utilities/devices.js.map +1 -0
  161. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.d.ts +57 -2
  162. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js +46 -3
  163. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js.map +1 -1
  164. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.d.ts +38 -0
  165. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js +42 -0
  166. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js.map +1 -1
  167. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +72 -17
  168. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  169. package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.d.ts +50 -0
  170. package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.js +43 -0
  171. package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.js.map +1 -0
  172. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +14 -3
  173. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +45 -31
  174. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
  175. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js +66 -8
  176. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js.map +1 -1
  177. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +81 -15
  178. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +142 -33
  179. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  180. package/bundle/typescript/src/commands/game/sideQuest/utilities/use-target.d.ts +88 -0
  181. package/bundle/typescript/src/commands/game/sideQuest/utilities/use-target.js +113 -0
  182. package/bundle/typescript/src/commands/game/sideQuest/utilities/use-target.js.map +1 -0
  183. package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.d.ts +83 -0
  184. package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.js +106 -0
  185. package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.js.map +1 -0
  186. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +54 -5
  187. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  188. package/bundle/typescript/src/maka.js +1 -1
  189. package/bundle/typescript/src/maka.js.map +1 -1
  190. package/bundle/typescript/src/tools/sdk-loader/relocate.d.ts +19 -2
  191. package/bundle/typescript/src/tools/sdk-loader/relocate.js +22 -2
  192. package/bundle/typescript/src/tools/sdk-loader/relocate.js.map +1 -1
  193. package/package.json +1 -1
  194. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.d.ts +0 -6
  195. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js +0 -72
  196. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js.map +0 -1
  197. package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.d.ts +0 -6
  198. package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js +0 -26
  199. package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js.map +0 -1
  200. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +0 -143
  201. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +0 -366
  202. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +0 -1
  203. package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.d.ts +0 -28
  204. package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.js +0 -2
  205. package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.js.map +0 -1
@@ -1,366 +0,0 @@
1
- import { Logger } from '../utilities/logger.js';
2
- import { hint } from '../utilities/hints.js';
3
- import { AI } from '../../../../tools/ai/ai.class.js';
4
- import { AbstractPuzzle } from '../types/shared/abstracts.js';
5
- /**
6
- * `resists` is the WRONG-VERB voice, and it is keyed on what the barrier
7
- * IS, never on what the player typed (blocker 2026-08-27, "the barrier
8
- * isn't allowing me to hack/pick/breach it"): a player who reaches for
9
- * the wrong route is not making an error to be reported, they are asking
10
- * what this thing is. So the line says what it is, why the attempted
11
- * route finds no purchase on it, and which verb DOES bite -- the same
12
- * job spots.ts:terrainRefusal() does for a blocked crossing. Never a
13
- * bare denial: a denial in front of an obvious door is what made a real
14
- * session conclude the barrier was broken.
15
- */
16
- const BYPASS_FLAVOR = {
17
- lockpick: {
18
- verb: 'pick',
19
- resists: `It's a mechanism, not a system -- no console to intrude on, no weave to unpick, nobody to talk round. It gives to HANDS: "pick" it quietly, or "breach" it with your shoulder.`,
20
- failureMessage: `Your pick snaps in the mechanism -- and the lock's alarm isn't silent anymore.`,
21
- hint: `This looks forceable -- "pick" works it quietly (Agility + locksmith); "breach" forces it with raw muscle (Strength + Body, LOUD even when it works). Fail either way and the mechanism seizes for good -- and the noise carries.`,
22
- burnedMessage: `The mechanism is seized solid around your snapped pick -- no tool opens it now. Only the real code will.`,
23
- },
24
- hack: {
25
- verb: 'hack',
26
- resists: `No keyway, no seam, no tumblers to feel for -- it's a sealed SYSTEM, and it only argues with a deck. "hack" it.`,
27
- failureMessage: `Your intrusion trips a countermeasure -- the system logs the attempt and pings whoever's watching.`,
28
- hint: `This looks hackable -- try "hack" to skip finding the code (Logic + hacking). Fail, and the system locks you out for good -- and pings whoever's watching.`,
29
- burnedMessage: `The system remembers your intrusion -- hard lockout, your signature blacklisted. Only the real code opens it now.`,
30
- },
31
- spell: {
32
- verb: 'cast',
33
- resists: `Your hands find nothing to work and your tools find nothing to bite -- the barrier isn't matter. It answers to the Art: "cast" at it, or "dispel" it.`,
34
- failureMessage: `The weave slips through your fingers -- backlash crackles outward, and something out there felt it.`,
35
- hint: `This could be unwoven magically -- try "dispel" (Magic + counterspelling) or "cast" (the casting pool) to skip finding the code. Fail, and the backlash BITES -- and the barrier seals against you for good.`,
36
- burnedMessage: `The barrier has sealed itself against your signature -- no working of yours touches it again. Only the real answer opens it now.`,
37
- },
38
- // The Face's route: a barrier that's really a PERSON or a voice-gate --
39
- // a doorman, an intercom challenge, a receptionist with a checklist.
40
- // Born from a real generated scene that emitted bypassType "con" for a
41
- // keypad "used by trusted business partners" before the type existed
42
- // (and crashed search doing it) -- the model wanted social engineering,
43
- // so now it's real. See commands/bluff.ts.
44
- con: {
45
- verb: 'bluff',
46
- resists: `There's no lock here at all. There's a PERSON -- and people don't open to tools, they open to a story. "bluff" your way past.`,
47
- failureMessage: `The story comes apart mid-sentence -- and now they KNOW someone's running a game on them.`,
48
- hint: `This could be TALKED past -- try "bluff" to fast-talk through without the code (Charisma + con). Blow the story, and they'll never buy another word from you.`,
49
- burnedMessage: `They've made you -- no story you tell holds water here anymore. Only the real credential works now.`,
50
- },
51
- };
52
- export class Puzzle extends AbstractPuzzle {
53
- logger = Logger.getInstance();
54
- solved = false;
55
- hasAIRiddle = false;
56
- name;
57
- requiredItem;
58
- requiredPhrase;
59
- riddle;
60
- // Optional: a room-anchored puzzle typically grants one, but a door-
61
- // guarding puzzle (see Door.puzzle) usually doesn't need one -- opening
62
- // the door already IS the reward.
63
- rewardItem;
64
- // See IPuzzleConstructorConfig.atSpot.
65
- atSpot;
66
- successMessage;
67
- failureMessage;
68
- hobbyTags;
69
- // Points only at this puzzle's immediate predecessor -- chains of any
70
- // length fall out of that naturally, since a puzzle can't become solved
71
- // until its own prerequisite is, which cascades transitively up the
72
- // chain with no special traversal needed at solve() time.
73
- requiresPuzzle;
74
- lockedMessage;
75
- // The riddle/requiredPhrase path above is the "first layer" -- a lock,
76
- // code, or passphrase that exists to be found and always works once
77
- // known. bypassType is a SEPARATE, optional route past that same barrier
78
- // that never requires knowing the answer, matching the barrier's actual
79
- // in-fiction nature (a lock, a terminal, a ward) -- rolled on the
80
- // matching skill by the bypass command, and failure isn't quiet: it
81
- // BURNS the route (see bypassBurned) and raises the world. See
82
- // resolveBypass().
83
- bypassType;
84
- static BYPASS_SUCCESS_CHANCE = 0.5;
85
- // One shot at the shortcut: a failed bypass seizes the mechanism /
86
- // blacklists the intruder / seals the ward / burns the cover story.
87
- // The safe solve() route (the findable answer) is deliberately never
88
- // touched by this -- "no second chances" applies to the trick, not to
89
- // the barrier.
90
- bypassBurned = false;
91
- constructor(config) {
92
- super();
93
- this.name = config.name;
94
- this.requiredItem = config.requiredItem;
95
- this.requiredPhrase = config.requiredPhrase;
96
- this.riddle = config.riddle;
97
- this.successMessage = config.successMessage || 'You solved the puzzle!';
98
- this.failureMessage = config.failureMessage || `You don't have the necessary item or the correct phrase to solve the puzzle.`;
99
- this.hobbyTags = config.hobbyTags ?? [];
100
- this.lockedMessage = `Something else needs to happen first.`;
101
- this.bypassType = config.bypassType;
102
- this.atSpot = config.atSpot;
103
- this.rewardItem = config.rewardItem;
104
- }
105
- /**
106
- * Player-facing hint that a risky bypass exists, without which nothing
107
- * in the game ever tells the player "pick"/"hack"/"cast" is even an
108
- * option here -- found via a real session where a player had no idea
109
- * what they were supposed to "pick".
110
- */
111
- /** Just the bypass verb ("pick"/"hack"/"cast"/"bluff"), for refusal
112
- * one-liners that need to NAME the mechanism without the full
113
- * coaching text getBypassHint() carries. */
114
- getBypassVerb() {
115
- return this.bypassType ? BYPASS_FLAVOR[this.bypassType]?.verb : undefined;
116
- }
117
- getBypassHint() {
118
- if (!this.bypassType)
119
- return undefined;
120
- // DEFENSIVE lookup: bypassType ultimately comes from generated JSON,
121
- // and an unknown value here used to crash every "search" in the room
122
- // (real session: five straight TypeErrors on an unvalidated type).
123
- // Generation now validates the value too, but static seeds and old
124
- // saved scenes don't re-validate -- unknown types read as "no bypass".
125
- const flavor = BYPASS_FLAVOR[this.bypassType];
126
- if (!flavor)
127
- return undefined;
128
- // A burned route stops advertising itself -- the hint becomes the
129
- // reminder of what the failed attempt cost.
130
- if (this.bypassBurned) {
131
- return `${flavor.burnedMessage}`;
132
- }
133
- // The clue reminder is a real promise -- generation validates that
134
- // every puzzle's answer IS discoverable somewhere else (see
135
- // scene-seed-generator.validateClueItems). A real session took the
136
- // risky gamble first and only found the written-down code afterward.
137
- // The whole block is COACHING (the barrier itself still shows) --
138
- // behind the hints toggle since a real session's "hints off" left
139
- // this printing anyway.
140
- const text = hint(`${flavor.hint}\n(The safe route: the answer is recorded somewhere out in the world -- case the other rooms before you gamble.)`);
141
- return text.length > 0 ? text : undefined;
142
- }
143
- /**
144
- * Wired in after all puzzles in a scene exist (scene-factory.ts), since
145
- * a prerequisite may not have been constructed yet at this puzzle's own
146
- * construction time.
147
- */
148
- setRequiresPuzzle(prerequisite, lockedMessage) {
149
- this.requiresPuzzle = prerequisite;
150
- if (lockedMessage) {
151
- this.lockedMessage = lockedMessage;
152
- }
153
- }
154
- /**
155
- * Persistence-only (utilities/persistence.ts): flags in, nothing out --
156
- * no reward items, no success message, no door side effects (door lock
157
- * state is restored independently, so a solved-then-relocked door stays
158
- * relocked on load).
159
- */
160
- restoreState(state) {
161
- this.solved = state.solved;
162
- this.bypassBurned = state.bypassBurned;
163
- }
164
- isSolved() {
165
- return this.solved;
166
- }
167
- /**
168
- * Rewrites the riddle's presentation once per scene load, while keeping
169
- * `requiredPhrase` (the exact-match answer key used by `solve()`) fixed --
170
- * so the correctness gate never drifts from what the player was actually
171
- * asked.
172
- */
173
- async ensureAIRiddle(sceneContext, roomName, kind = 'device') {
174
- if (this.hasAIRiddle)
175
- return;
176
- if (!AI.isConfigured())
177
- return;
178
- if (!this.riddle || !this.requiredPhrase)
179
- return;
180
- // TERRAIN framing (spatial wave 2026-08-25, closing a real-session
181
- // complaint: a barrier's prose read "way too insightful on how
182
- // Doc Halloran is feeling" and exposed history no BARRIER should
183
- // know -- "it's a BARRIER, not a book"): a terrain-kind puzzle
184
- // seals a PASSAGE, not a device, so the rewrite must say what
185
- // physically blocks the way and how it might yield, never lean on
186
- // scene lore for color.
187
- const framing = kind === 'terrain'
188
- ? `This barrier is IMPASSABLE TERRAIN blocking a passage -- rubble, a collapsed structure, a security shutter -- NOT a device with a credential. State WHAT physically blocks the way and HOW it looks like it might yield (cut apart, hauled aside, powered down, dispelled). Never a book, riddle, or poem, and never lean on the scene's story or any character's feelings/history for color -- describe the physical obstacle only.`
189
- : `You are a game narrator rewriting what a player sees when they search a room and find a
190
- barrier (a lock, scanner, terminal, or ward) -- NOT a riddle or poem.`;
191
- const prompt = `
192
- ${framing}
193
-
194
- Scene context: ${sceneContext}
195
- ${roomName ? `This puzzle is found in: ${roomName}` : ''}
196
- ${this.bypassType ? `This barrier is physically a: ${this.bypassType === 'lockpick' ? 'mechanical lock or maglock' : this.bypassType === 'hack' ? 'electronic terminal, console, or scanner' : this.bypassType === 'con' ? 'person or voice-gate that must be talked past (a doorman, an intercom challenge, a checkpoint)' : 'magical ward or sigil'}` : ''}
197
-
198
- The exact credential that opens it MUST remain: "${this.requiredPhrase}"
199
- The existing description is: "${this.riddle}"
200
-
201
- Write a NEW version, evocative but PLAIN. Start with "You see", "You find", or similar,
202
- and name the barrier concretely -- e.g. "You see a maglock safe." or "You see a biometric
203
- scanner beside the door." -- then say what it demands (a code, a passphrase, a name, a
204
- fingerprint), the way an NPC would actually describe it. Describe the OBSTACLE only --
205
- never write people, guards, or dialogue into it, and never state a character's feelings
206
- or private history; anyone standing watch does their own talking in play. Do not phrase
207
- it as a riddle, wordplay, or puzzle to decode, and do not state the credential itself
208
- outright. No more than 3 sentences. Respond with ONLY the description text.`;
209
- try {
210
- const reply = await AI.ask(prompt);
211
- this.riddle = reply;
212
- this.hasAIRiddle = true;
213
- this.logger.write(`Generated AI riddle for puzzle "${this.name}"`);
214
- }
215
- catch (err) {
216
- this.logger.write(`AI fallback for riddle (${this.name}): ${err}`);
217
- }
218
- }
219
- hasRequiredItem(playerInventory) {
220
- if (this.requiredItem) {
221
- return playerInventory.hasItem(this.requiredItem.name);
222
- }
223
- return false;
224
- }
225
- /**
226
- * Clue items are only required to CONTAIN the answer somewhere in their
227
- * text (e.g. "kill the power to bypass security" for a required phrase
228
- * of "kill the power"), so a player who reasonably quotes the clue back
229
- * verbatim types more words than the exact answer. Strict equality
230
- * rejected that. Normalizing punctuation/whitespace and accepting the
231
- * required phrase as a substring of the input (not just an exact match)
232
- * fixes it without loosening things enough for a wrong guess to pass.
233
- */
234
- matchesRequiredPhrase(inputPhrase) {
235
- if (!this.requiredPhrase)
236
- return false;
237
- // Punctuation is normalized BOTH ways, because the two readings
238
- // disagree and players use both. Deleting it is right for a code
239
- // ("44-71" is the same code as "4471"); treating it as a separator is
240
- // right for words (a player typing the hyphenated "gate-7-alpha" for
241
- // an answer of "gate 7 alpha" has the right answer and was being told
242
- // otherwise -- which reads to them exactly like being handed a wrong
243
- // code, this bug's own symptom arriving by a second road). Accepting
244
- // a match under EITHER reading covers both without loosening
245
- // anything: every variant still has to contain the whole answer.
246
- const variants = (s) => {
247
- const lower = s.toLowerCase();
248
- const stripped = lower.replace(/[^\w\s]/g, '').replace(/\s+/g, ' ').trim();
249
- const separated = lower.replace(/[^\w\s]/g, ' ').replace(/\s+/g, ' ').trim();
250
- return stripped === separated ? [stripped] : [stripped, separated];
251
- };
252
- const required = variants(this.requiredPhrase).filter(r => r.length > 0);
253
- const input = variants(inputPhrase);
254
- return required.some(r => input.some(i => i.includes(r)));
255
- }
256
- solve(providedAnswer, playerInventory) {
257
- if (this.solved) {
258
- this.logger.write('Puzzle: Attempted to solve an already solved puzzle.');
259
- return {
260
- success: false,
261
- message: 'You have already solved this puzzle.',
262
- };
263
- }
264
- if (this.requiresPuzzle && !this.requiresPuzzle.isSolved()) {
265
- this.logger.write(`Puzzle: Attempted "${this.name}" before prerequisite "${this.requiresPuzzle.name}" was solved.`);
266
- return {
267
- success: false,
268
- message: this.lockedMessage,
269
- };
270
- }
271
- if (this.hasRequiredItem(playerInventory) || this.matchesRequiredPhrase(providedAnswer)) {
272
- this.solved = true;
273
- this.logger.write('Puzzle: Correct solution provided.');
274
- return {
275
- success: true,
276
- message: this.successMessage,
277
- };
278
- }
279
- else {
280
- this.logger.write('Puzzle: Necessary item or correct phrase not provided.');
281
- return {
282
- success: false,
283
- message: this.failureMessage,
284
- };
285
- }
286
- }
287
- /**
288
- * The risky alternate route never requires knowing requiredPhrase. Split
289
- * into a gate check (run first, before any outcome is determined -- an
290
- * already-solved, blocked, or type-mismatched puzzle should never make
291
- * the player sit through an interactive minigame they were never going
292
- * to be allowed to attempt) and applying an already-determined outcome.
293
- * A failed attempt BURNS the route (see bypassBurned) -- the gate
294
- * refuses retries with the burned flavor -- but never touches the safe
295
- * solve() path: finding the actual answer remains deterministic. Further
296
- * consequences (the alarm world event, spell backlash) belong to the
297
- * calling command (see commands/bypass-command.ts).
298
- */
299
- checkBypassGate(type) {
300
- if (this.solved) {
301
- this.logger.write('Puzzle: Attempted to bypass an already solved puzzle.');
302
- return { allowed: false, reason: 'solved', message: 'You have already solved this puzzle.' };
303
- }
304
- if (this.requiresPuzzle && !this.requiresPuzzle.isSolved()) {
305
- this.logger.write(`Puzzle: Attempted to bypass "${this.name}" before prerequisite "${this.requiresPuzzle.name}" was solved.`);
306
- return { allowed: false, reason: 'locked', message: this.lockedMessage };
307
- }
308
- if (this.bypassType !== type) {
309
- return { allowed: false, reason: 'mismatch', message: this.wrongRouteMessage() };
310
- }
311
- if (this.bypassBurned) {
312
- this.logger.write(`Puzzle: Attempted a burned ${type} bypass on "${this.name}".`);
313
- return { allowed: false, reason: 'burned', message: BYPASS_FLAVOR[type]?.burnedMessage ?? `That route is burned -- only the real answer works now.` };
314
- }
315
- return { allowed: true };
316
- }
317
- /**
318
- * The wrong-verb answer, spoken in the barrier's OWN fiction. Keyed on
319
- * this.bypassType (what the thing IS), never on the verb attempted --
320
- * see the note on BYPASS_FLAVOR.resists. Always names a route that
321
- * works, so a player never gets a dead end in front of a visible
322
- * barrier; a barrier with no shortcut at all says so plainly instead
323
- * of pretending not to exist, which is what a solve-only puzzle used
324
- * to do (it was filtered out before this gate ever ran).
325
- */
326
- wrongRouteMessage() {
327
- const safeRoute = `(The answer itself always works, if you turn it up: "solve <the answer>".)`;
328
- const flavor = this.bypassType ? BYPASS_FLAVOR[this.bypassType] : undefined;
329
- if (!flavor) {
330
- return `That finds no purchase -- this one has no shortcut in it. No mechanism to trip, no system to crack, nothing to unweave or talk round. Only the real answer opens it.\n${safeRoute}`;
331
- }
332
- return `That finds no purchase here. ${flavor.resists}\n${safeRoute}`;
333
- }
334
- /**
335
- * Applies an outcome already determined elsewhere (a coin flip, or a live
336
- * minigame's win/loss) to this puzzle. Assumes checkBypassGate() already
337
- * passed -- doesn't re-check it.
338
- */
339
- resolveBypass(type, succeeded) {
340
- if (succeeded) {
341
- this.solved = true;
342
- this.logger.write(`Puzzle: Successful ${type} bypass.`);
343
- return { success: true, message: this.successMessage, alarmed: false };
344
- }
345
- // The trick is spent: mechanism seized, signature blacklisted, ward
346
- // sealed, cover blown. The findable answer still works -- solve() never
347
- // consults this flag.
348
- this.bypassBurned = true;
349
- this.logger.write(`Puzzle: Failed ${type} bypass -- alarmed, route burned.`);
350
- return { success: false, message: BYPASS_FLAVOR[type]?.failureMessage ?? this.failureMessage, alarmed: true };
351
- }
352
- /**
353
- * Convenience wrapper: gate check + a flat coin-flip outcome. Used for
354
- * any bypass type without its own interactive minigame yet -- see
355
- * BypassCommand.determineOutcome(), which lockpicking overrides to run a
356
- * real player-skill challenge instead of this coin flip.
357
- */
358
- attemptBypass(type) {
359
- const gate = this.checkBypassGate(type);
360
- if (!gate.allowed) {
361
- return { success: false, message: gate.message ?? 'You can\'t do that here.', alarmed: false };
362
- }
363
- return this.resolveBypass(type, Math.random() < Puzzle.BYPASS_SUCCESS_CHANCE);
364
- }
365
- }
366
- //# sourceMappingURL=puzzle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"puzzle.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/models/puzzle.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- export type PuzzleBypassType = 'lockpick' | 'hack' | 'spell' | 'con';
2
- export interface IPuzzleSeedJson {
3
- name: string;
4
- room?: string;
5
- riddle: string;
6
- requiredPhrase?: string;
7
- requiredItem?: string;
8
- rewardItem?: string;
9
- successMessage?: string;
10
- failureMessage?: string;
11
- hobbyTags?: string[];
12
- /** Name of another puzzle in this same scene that must be solved first. */
13
- requiresPuzzle?: string;
14
- /** Shown when attempting to solve this puzzle before requiresPuzzle is met. */
15
- lockedMessage?: string;
16
- /**
17
- * Optional risky alternate route to the same reward, matching this
18
- * barrier's in-fiction nature (a lock -> "pick", a terminal -> "hack", a
19
- * ward -> "cast") -- a coin-flip chance to bypass without ever knowing
20
- * requiredPhrase, but a failed attempt is loud (see Puzzle.attemptBypass).
21
- * Leave unset for a puzzle with no such physical/technical/magical route
22
- * (e.g. a purely social one, solvable only by knowing the actual answer).
23
- */
24
- bypassType?: PuzzleBypassType;
25
- atSpot?: string;
26
- guardsExit?: string;
27
- footprint?: 'small' | 'medium' | 'large';
28
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=puzzle-seed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"puzzle-seed.js","sourceRoot":"","sources":["../../../../../../../../src/commands/game/sideQuest/types/seed/puzzle-seed.ts"],"names":[],"mappings":""}