@maka/maka-cli 5.68.0 → 5.70.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 (116) hide show
  1. package/bundle/typescript/package.json +13 -2
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.d.ts +30 -0
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.js +54 -0
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.js.map +1 -0
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +5 -1
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +12 -4
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +29 -0
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +109 -2
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +6 -0
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.d.ts +48 -0
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.js +107 -0
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.js.map +1 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +7 -3
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js +1 -1
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +2 -2
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js +12 -2
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +22 -18
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +68 -30
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js +17 -4
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js.map +1 -1
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +12 -2
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +12 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +8 -6
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/move.d.ts +11 -0
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +107 -14
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/overwatch.js +5 -4
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/overwatch.js.map +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js +14 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js.map +1 -1
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +33 -2
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.d.ts +40 -0
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.js +91 -0
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.js.map +1 -0
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js +10 -11
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js.map +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +4 -2
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +12 -5
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +41 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js +5 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js.map +1 -1
  58. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +6 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +112 -8
  60. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +6 -0
  62. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +85 -0
  64. package/bundle/typescript/src/commands/game/sideQuest/game.js +214 -3
  65. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  66. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +52 -0
  67. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +101 -0
  68. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  69. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +67 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +167 -66
  71. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +161 -5
  73. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +245 -24
  74. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +97 -0
  76. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +134 -5
  77. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  78. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +1 -0
  79. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +2 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +42 -0
  81. package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +12 -0
  82. package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +6 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +7 -0
  84. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +19 -1
  85. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  86. package/bundle/typescript/src/commands/game/sideQuest/utilities/crash-evidence.d.ts +53 -0
  87. package/bundle/typescript/src/commands/game/sideQuest/utilities/crash-evidence.js +106 -0
  88. package/bundle/typescript/src/commands/game/sideQuest/utilities/crash-evidence.js.map +1 -0
  89. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.d.ts +41 -1
  90. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js +52 -4
  91. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js.map +1 -1
  92. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.d.ts +1 -1
  93. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +45 -7
  94. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
  95. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.d.ts +26 -1
  96. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.js +45 -1
  97. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.js.map +1 -1
  98. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +9 -1
  99. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
  100. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +46 -0
  101. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +90 -5
  102. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
  103. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +70 -0
  104. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +168 -22
  105. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  106. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.d.ts +33 -0
  107. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +46 -6
  108. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  109. package/bundle/typescript/src/tools/ai/ai.class.d.ts +53 -0
  110. package/bundle/typescript/src/tools/ai/ai.class.js +152 -7
  111. package/bundle/typescript/src/tools/ai/ai.class.js.map +1 -1
  112. package/bundle/typescript/src/tools/https/https.class.d.ts +1 -1
  113. package/bundle/typescript/src/tools/https/https.class.js +29 -4
  114. package/bundle/typescript/src/tools/https/https.class.js.map +1 -1
  115. package/bundle/typescript/src/tools/https/https.interface.d.ts +8 -0
  116. package/package.json +13 -2
@@ -74,6 +74,42 @@ export declare class Item extends AbstractItem {
74
74
  get rangedBase(): number;
75
75
  /** Base melee DV before STR/quality (RAW: knife STR+2, sword/katana/club STR+3). */
76
76
  get meleeBase(): number;
77
+ /**
78
+ * ACCURACY -- the LIMIT on an attack made with this weapon (p.46-47,
79
+ * p.168: "Each weapon has an Accuracy rating that serves as its limit
80
+ * for attacks made with that weapon"). A gear limit REPLACES the
81
+ * inherent one, higher or lower (p.46-47), so this is not a floor or a
82
+ * cap on the Physical limit -- it is the limit.
83
+ *
84
+ * NOT COMPRESSED, unlike the DV values above. Damage was squeezed to
85
+ * engine scale because it is measured against soak dice this engine
86
+ * also scales; a limit is measured against HITS, which are the book's
87
+ * own units, and the Matrix brackets next door already spend the raw
88
+ * attribute ("whole, never halved"). Compressing here would make a
89
+ * sniper rifle and a holdout cap at the same place.
90
+ *
91
+ * The numbers are the book's tables (p.421-431), read through the same
92
+ * duck-typing school as rangedBase/armorPen so generated gear works
93
+ * unmodified. Class-based rather than per-weapon ON PURPOSE: the RAG
94
+ * could not produce standard-table rows for every gun this game ships
95
+ * (the shotgun table did not come back, and the one AK-97 figure it
96
+ * did return was off a Run Faster character sheet -- a MODIFIED
97
+ * weapon, not the table), so a per-weapon list would have meant
98
+ * inventing the gaps. Every value below is one the book gave up.
99
+ *
100
+ * THE PARENTHETICAL IS NOT MODELLED, deliberately. Tables write
101
+ * "Acc 5 (7)" for the value with a built-in smartgun or laser sight
102
+ * (p.429 Enfield: "4 (5) with the built-in laser sight"; p.433: a
103
+ * smartgun system is +2 Accuracy WITH a smartlink). This engine has no
104
+ * model for whether a character owns a smartlink, so the prerequisite
105
+ * for the bonus cannot be asked. Filed rather than guessed.
106
+ *
107
+ * Note the wireless smartgun bonus is a DICE POOL bonus (+1/+2,
108
+ * p.433), NOT an Accuracy bonus -- getAttackPool already spends it as
109
+ * dice. Keeping those apart is the same discipline as the Matrix
110
+ * brackets: a limit is never a die, and a die is never a limit.
111
+ */
112
+ get accuracy(): number;
77
113
  /**
78
114
  * Armor penetration (<= 0): how much of the defender's ARMOR the hit
79
115
  * ignores (RAW AP, compressed ~2:3 -- knife/katana -3 -> -2, heavy
@@ -121,6 +157,22 @@ export declare class Item extends AbstractItem {
121
157
  * Player.getAttackPool / getPanDefensePool.
122
158
  */
123
159
  matrixEdge(kind: 'attack' | 'sleaze' | 'dataProcessing' | 'firewall'): number;
160
+ /**
161
+ * THE MATRIX ATTRIBUTE ITSELF -- whole, for use as a LIMIT rather
162
+ * than as dice (SR5 p.226, p.222, p.234; RAG-checked 2026-08-28).
163
+ *
164
+ * A CYBERDECK carries the configurable array and answers all four.
165
+ * ANY OTHER DEVICE -- a commlink -- has only Data Processing and
166
+ * Firewall, and both equal its Device Rating (p.222, p.234). It has
167
+ * NO Attack and NO Sleaze: those belong to decks and hosts (p.226).
168
+ * Asking for one returns 0, which callers must read as "this device
169
+ * cannot take that action", never as "an unlimited one".
170
+ *
171
+ * matrixEdge above is the OLD half-the-attribute-as-dice
172
+ * substitution and is on its way out; it survives only where a pool
173
+ * genuinely wants a gear bonus rather than a cap.
174
+ */
175
+ matrixAttribute(kind: 'attack' | 'sleaze' | 'dataProcessing' | 'firewall'): number;
124
176
  /** Deck-side Matrix damage bonus: Attack attribute + a loaded Hammer. */
125
177
  get matrixDamageBonus(): number;
126
178
  /** One-line stat readout: "A5 S4 D4 F2, DR2, 1/2 programs". */
@@ -178,6 +178,85 @@ export class Item extends AbstractItem {
178
178
  return 3;
179
179
  return 2;
180
180
  }
181
+ /**
182
+ * ACCURACY -- the LIMIT on an attack made with this weapon (p.46-47,
183
+ * p.168: "Each weapon has an Accuracy rating that serves as its limit
184
+ * for attacks made with that weapon"). A gear limit REPLACES the
185
+ * inherent one, higher or lower (p.46-47), so this is not a floor or a
186
+ * cap on the Physical limit -- it is the limit.
187
+ *
188
+ * NOT COMPRESSED, unlike the DV values above. Damage was squeezed to
189
+ * engine scale because it is measured against soak dice this engine
190
+ * also scales; a limit is measured against HITS, which are the book's
191
+ * own units, and the Matrix brackets next door already spend the raw
192
+ * attribute ("whole, never halved"). Compressing here would make a
193
+ * sniper rifle and a holdout cap at the same place.
194
+ *
195
+ * The numbers are the book's tables (p.421-431), read through the same
196
+ * duck-typing school as rangedBase/armorPen so generated gear works
197
+ * unmodified. Class-based rather than per-weapon ON PURPOSE: the RAG
198
+ * could not produce standard-table rows for every gun this game ships
199
+ * (the shotgun table did not come back, and the one AK-97 figure it
200
+ * did return was off a Run Faster character sheet -- a MODIFIED
201
+ * weapon, not the table), so a per-weapon list would have meant
202
+ * inventing the gaps. Every value below is one the book gave up.
203
+ *
204
+ * THE PARENTHETICAL IS NOT MODELLED, deliberately. Tables write
205
+ * "Acc 5 (7)" for the value with a built-in smartgun or laser sight
206
+ * (p.429 Enfield: "4 (5) with the built-in laser sight"; p.433: a
207
+ * smartgun system is +2 Accuracy WITH a smartlink). This engine has no
208
+ * model for whether a character owns a smartlink, so the prerequisite
209
+ * for the bonus cannot be asked. Filed rather than guessed.
210
+ *
211
+ * Note the wireless smartgun bonus is a DICE POOL bonus (+1/+2,
212
+ * p.433), NOT an Accuracy bonus -- getAttackPool already spends it as
213
+ * dice. Keeping those apart is the same discipline as the Matrix
214
+ * brackets: a limit is never a die, and a die is never a limit.
215
+ */
216
+ get accuracy() {
217
+ const hay = this.weaponHay;
218
+ if (this.category === Category.MeleeWeapon) {
219
+ if (/katana/.test(hay))
220
+ return 7; // p.423
221
+ if (/knife|dagger|stiletto|shiv|razor/.test(hay))
222
+ return 6; // combat knife 6
223
+ if (/sword|axe|machete|claymore|blade/.test(hay))
224
+ return 6;
225
+ if (/pole\s?arm|halberd|spear|naginata/.test(hay))
226
+ return 5;
227
+ if (/sap|whip|garrote/.test(hay))
228
+ return 5;
229
+ if (/club|bat\b|baton|staff|pipe|crowbar|hammer|maul|mace|cudgel/.test(hay))
230
+ return 4;
231
+ return 5;
232
+ }
233
+ if (this.category === Category.RangedWeapon || this.category === Category.Weapon) {
234
+ if (/ranger arms|sm-?5/.test(hay))
235
+ return 8; // p.428
236
+ if (/sniper|longarm|barret|desert strike/.test(hay))
237
+ return 7;
238
+ if (/light\s?fire|colt america|light pistol/.test(hay))
239
+ return 7; // p.426
240
+ if (/crossbow/.test(hay))
241
+ return 6; // p.424
242
+ if (/hold-?out|derringer|palm pistol/.test(hay))
243
+ return 4; // p.426
244
+ if (/shotgun|roomsweeper|defiance|scattergun|enfield/.test(hay))
245
+ return 4;
246
+ if (/smg|submachine|uzi|ingram/.test(hay))
247
+ return 4;
248
+ if (/taser|machine pistol|revolver|warhawk|omni/.test(hay))
249
+ return 5;
250
+ if (/assault|ak-?\d|alpha|\brifle\b|carbine|machine gun|stoner/.test(hay))
251
+ return 5;
252
+ // Heavy pistols (Predator, Ultra-Power) and unrecognized iron.
253
+ return 5;
254
+ }
255
+ // Not a weapon: no Accuracy of its own. Callers fall back to the
256
+ // Physical limit, which is what an improvised or bare-handed
257
+ // attack uses (p.168).
258
+ return 0;
259
+ }
181
260
  /**
182
261
  * Armor penetration (<= 0): how much of the defender's ARMOR the hit
183
262
  * ignores (RAW AP, compressed ~2:3 -- knife/katana -3 -> -2, heavy
@@ -308,6 +387,28 @@ export class Item extends AbstractItem {
308
387
  return this.qualityBonus;
309
388
  return Math.floor(this[kind] / 2);
310
389
  }
390
+ /**
391
+ * THE MATRIX ATTRIBUTE ITSELF -- whole, for use as a LIMIT rather
392
+ * than as dice (SR5 p.226, p.222, p.234; RAG-checked 2026-08-28).
393
+ *
394
+ * A CYBERDECK carries the configurable array and answers all four.
395
+ * ANY OTHER DEVICE -- a commlink -- has only Data Processing and
396
+ * Firewall, and both equal its Device Rating (p.222, p.234). It has
397
+ * NO Attack and NO Sleaze: those belong to decks and hosts (p.226).
398
+ * Asking for one returns 0, which callers must read as "this device
399
+ * cannot take that action", never as "an unlimited one".
400
+ *
401
+ * matrixEdge above is the OLD half-the-attribute-as-dice
402
+ * substitution and is on its way out; it survives only where a pool
403
+ * genuinely wants a gear bonus rather than a cap.
404
+ */
405
+ matrixAttribute(kind) {
406
+ if (this.isCyberdeck())
407
+ return this[kind];
408
+ if (kind === 'attack' || kind === 'sleaze')
409
+ return 0;
410
+ return this.deviceRating;
411
+ }
311
412
  /** Deck-side Matrix damage bonus: Attack attribute + a loaded Hammer. */
312
413
  get matrixDamageBonus() {
313
414
  if (!this.isCyberdeck())
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/models/item.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/models/item.ts"],"names":[],"mappings":"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"}
@@ -98,6 +98,35 @@ export interface IBarrierPost {
98
98
  * silently. Nothing throws when a guard starts waving people through.
99
99
  */
100
100
  export declare function picketDutyNote(guarding: boolean, direction?: string): string;
101
+ /**
102
+ * OPPOSITION (JjQdy4A4tzcQdPHno: "none of the NPCs ever seem to get
103
+ * hostile"). See Player.hostile for why a flag was the missing piece
104
+ * and the wake-up was not.
105
+ *
106
+ * CANON SHAPES THIS, and it is narrower than "be aggressive". Asked
107
+ * fresh: hostility follows DETECTION and cause, never ambience. A host
108
+ * "informs its owner and launches IC" when it SPOTS you (p.247); Patrol
109
+ * IC escalates only when it has cause and is "mostly harmless to the
110
+ * innocent" (Data Trails p.86); guards round a corner, SEE the team,
111
+ * and shooting starts (p.374-377). Detection then feeds a Surprise Test
112
+ * (p.192), which is the engine's own opposed perception contest already
113
+ * sitting on arrival.
114
+ *
115
+ * So this note gives a REASON, never an order. It deliberately does NOT
116
+ * say attack: challenging a stranger, raising the alarm, or calling for
117
+ * backup are all better opening moves, and canon's own examples are
118
+ * mostly alerts rather than gunfire. A brief that said "attack on
119
+ * sight" would replace a game where nobody fights with a game where
120
+ * everybody does, and the second is worse -- a missed beat costs a
121
+ * moment, a room that shoots on sight costs the scene.
122
+ *
123
+ * THE LINE ABOUT NOT KNOWING WHO THEY ARE is load-bearing. Without it
124
+ * the AI tends to narrate certainty it has no source for -- naming the
125
+ * runner as a known infiltrator, or inventing what they are here to
126
+ * steal. Opposition means "you are not supposed to be here", not
127
+ * "I have read your file".
128
+ */
129
+ export declare function hostileStanceNote(hostile: boolean, intruderName?: string): string;
101
130
  export declare function barrierPostNote(barriers: IBarrierPost[]): string;
102
131
  /**
103
132
  * How many real credentials this NPC was actually handed -- the number
@@ -249,8 +278,46 @@ export declare class NPC extends Player {
249
278
  private readonly _maxHistory;
250
279
  private commandRegistry;
251
280
  private lastNpcHeardTime;
281
+ /**
282
+ * How long an NPC ignores ANOTHER NPC's speech after hearing one.
283
+ *
284
+ * 2.5 SECONDS, BY RULING. The value was 500 with a comment reading
285
+ * "10 seconds" -- twenty times itself. Which of the two was intended
286
+ * was not recoverable from the code, so it went to the board rather
287
+ * than being "fixed" in either direction: silently making NPC
288
+ * cross-chatter twenty times rarer would have been a behaviour change
289
+ * wearing a typo's clothes. The answer came back neither -- 2-3
290
+ * seconds -- so the comment was not describing a lost intent and the
291
+ * number was not right either.
292
+ *
293
+ * MUST NOT SHIP IN THE SAME RELEASE AS THE CROWD NOTE (room.ts
294
+ * crowdNote, hiRLexr3xJjQM2jP4). This throttles exactly the cross-talk
295
+ * that clause addresses. If both move at once a playtest cannot tell
296
+ * which one quieted the room, or which one deadened it -- the clause
297
+ * ships and gets played first.
298
+ */
252
299
  private static npcHearCooldownMs;
253
300
  private lastNpcSeenTime;
301
+ /**
302
+ * The same throttle for ACTIONS an NPC watches another NPC take.
303
+ *
304
+ * 2.5 SECONDS, MATCHING THE HEAR COOLDOWN, BY RULING. This was the
305
+ * second instance of the same lying comment -- "// 10 seconds"
306
+ * against a value of 500 -- and it was left at 500 on purpose when
307
+ * the hear one was raised, because applying that answer here would
308
+ * have extended a ruling past what was asked.
309
+ *
310
+ * The answer came back "both": hearing and seeing are the same kind
311
+ * of reaction and were plainly meant as a pair, so reacting five
312
+ * times faster to sight than to sound is not a design, it is a typo
313
+ * that survived. Which is what the matched-pair reading suggested --
314
+ * but a correct guess is still a guess, and the next one might not
315
+ * land.
316
+ *
317
+ * Same release coupling as its twin: neither of these ships beside
318
+ * the crowd-note clause (room.ts crowdNote), or a playtest cannot
319
+ * tell which one quieted the room.
320
+ */
254
321
  private static npcSeeCooldownMs;
255
322
  private _maxRecursion;
256
323
  private waitingForPlayer;
@@ -63,6 +63,49 @@ export function picketDutyNote(guarding, direction) {
63
63
  + ` You can be talked round by a genuinely good story or a real reason, and you can be`
64
64
  + ` put down by force. Short of one of those, the answer is no.`;
65
65
  }
66
+ /**
67
+ * OPPOSITION (JjQdy4A4tzcQdPHno: "none of the NPCs ever seem to get
68
+ * hostile"). See Player.hostile for why a flag was the missing piece
69
+ * and the wake-up was not.
70
+ *
71
+ * CANON SHAPES THIS, and it is narrower than "be aggressive". Asked
72
+ * fresh: hostility follows DETECTION and cause, never ambience. A host
73
+ * "informs its owner and launches IC" when it SPOTS you (p.247); Patrol
74
+ * IC escalates only when it has cause and is "mostly harmless to the
75
+ * innocent" (Data Trails p.86); guards round a corner, SEE the team,
76
+ * and shooting starts (p.374-377). Detection then feeds a Surprise Test
77
+ * (p.192), which is the engine's own opposed perception contest already
78
+ * sitting on arrival.
79
+ *
80
+ * So this note gives a REASON, never an order. It deliberately does NOT
81
+ * say attack: challenging a stranger, raising the alarm, or calling for
82
+ * backup are all better opening moves, and canon's own examples are
83
+ * mostly alerts rather than gunfire. A brief that said "attack on
84
+ * sight" would replace a game where nobody fights with a game where
85
+ * everybody does, and the second is worse -- a missed beat costs a
86
+ * moment, a room that shoots on sight costs the scene.
87
+ *
88
+ * THE LINE ABOUT NOT KNOWING WHO THEY ARE is load-bearing. Without it
89
+ * the AI tends to narrate certainty it has no source for -- naming the
90
+ * runner as a known infiltrator, or inventing what they are here to
91
+ * steal. Opposition means "you are not supposed to be here", not
92
+ * "I have read your file".
93
+ */
94
+ export function hostileStanceNote(hostile, intruderName) {
95
+ if (!hostile)
96
+ return '';
97
+ const who = intruderName ? `${intruderName} is` : 'They are';
98
+ return `\nYOU ARE OPPOSITION HERE, and this is not your friend.`
99
+ + ` ${who} not supposed to be in this place, and you know it the moment you register them.`
100
+ + ` You do not owe them help, directions, or the benefit of the doubt.`
101
+ + ` Challenge them, demand what they are doing here, raise the alarm, call for backup,`
102
+ + ` move to cut them off, or put hands on them -- whatever someone in your position`
103
+ + ` would really do. Attacking is available ("attack <name>") and is sometimes right,`
104
+ + ` but it is rarely the FIRST thing: a challenge or an alarm usually comes before a gun.`
105
+ + ` You do NOT know their name, their employer, or what they came for unless you were`
106
+ + ` told it or they tell you -- act on what you can see, not on a file you never read.`
107
+ + ` If they talk their way round you, or beat you, that settles it.`;
108
+ }
66
109
  export function barrierPostNote(barriers) {
67
110
  return barriers.map(b => {
68
111
  const dirNote = b.sealingDirection ? ` sealing the way ${b.sealingDirection}` : '';
@@ -432,9 +475,47 @@ export class NPC extends Player {
432
475
  _maxHistory = 200;
433
476
  commandRegistry;
434
477
  lastNpcHeardTime = 0;
435
- static npcHearCooldownMs = 500; // 10 seconds. Adjust as you like!
478
+ /**
479
+ * How long an NPC ignores ANOTHER NPC's speech after hearing one.
480
+ *
481
+ * 2.5 SECONDS, BY RULING. The value was 500 with a comment reading
482
+ * "10 seconds" -- twenty times itself. Which of the two was intended
483
+ * was not recoverable from the code, so it went to the board rather
484
+ * than being "fixed" in either direction: silently making NPC
485
+ * cross-chatter twenty times rarer would have been a behaviour change
486
+ * wearing a typo's clothes. The answer came back neither -- 2-3
487
+ * seconds -- so the comment was not describing a lost intent and the
488
+ * number was not right either.
489
+ *
490
+ * MUST NOT SHIP IN THE SAME RELEASE AS THE CROWD NOTE (room.ts
491
+ * crowdNote, hiRLexr3xJjQM2jP4). This throttles exactly the cross-talk
492
+ * that clause addresses. If both move at once a playtest cannot tell
493
+ * which one quieted the room, or which one deadened it -- the clause
494
+ * ships and gets played first.
495
+ */
496
+ static npcHearCooldownMs = 2500;
436
497
  lastNpcSeenTime = 0;
437
- static npcSeeCooldownMs = 500; // 10 seconds (tune as you like)
498
+ /**
499
+ * The same throttle for ACTIONS an NPC watches another NPC take.
500
+ *
501
+ * 2.5 SECONDS, MATCHING THE HEAR COOLDOWN, BY RULING. This was the
502
+ * second instance of the same lying comment -- "// 10 seconds"
503
+ * against a value of 500 -- and it was left at 500 on purpose when
504
+ * the hear one was raised, because applying that answer here would
505
+ * have extended a ruling past what was asked.
506
+ *
507
+ * The answer came back "both": hearing and seeing are the same kind
508
+ * of reaction and were plainly meant as a pair, so reacting five
509
+ * times faster to sight than to sound is not a design, it is a typo
510
+ * that survived. Which is what the matched-pair reading suggested --
511
+ * but a correct guess is still a guess, and the next one might not
512
+ * land.
513
+ *
514
+ * Same release coupling as its twin: neither of these ships beside
515
+ * the crowd-note clause (room.ts crowdNote), or a playtest cannot
516
+ * tell which one quieted the room.
517
+ */
518
+ static npcSeeCooldownMs = 2500;
438
519
  _maxRecursion = 5;
439
520
  waitingForPlayer = false;
440
521
  // One speech act per stimulus: set when this NPC speaks while handling a
@@ -628,7 +709,8 @@ Available in-game commands (use with [COMMAND] prefix):
628
709
  - unequip <item name> — remove an equipped item
629
710
  - unlock <door name> — unlock a door (if you have the key or solution)
630
711
  - lock <door name> — lock a door
631
- - solve <answer> — attempt to solve the puzzle in this room by stating the actual answer (safe, always works if correct)
712
+ - use <panel name> <the code> — enter a code you actually know into a keypad or panel.
713
+ Only a PANEL takes a code; you cannot talk at a mechanical lock
632
714
  - pick — attempt to pick the lock on the puzzle in this room without knowing the answer (50/50, a failure sets off an alarm)
633
715
  - hack — attempt to hack the terminal/system in this room without knowing the answer (50/50, a failure trips a countermeasure)
634
716
  - cast <spell> [at <target>] — cast a spell you know. Requires being Awakened
@@ -740,71 +822,85 @@ description text.`;
740
822
  }
741
823
  }
742
824
  async hear(actor, message, opts) {
743
- if (actor === this || actor.name === this.name)
744
- return;
745
- // The gone don't listen (see act()): no stimulus may restart a
746
- // removed shell's AI.
747
- if (this.deathClaimed)
748
- return;
749
- // NEITHER DO THE UNCONSCIOUS. A knocked-out actor now STAYS in the
750
- // scene so they can be brought round (player ruling 2026-08-25) --
751
- // which means every AI entry point has to check, or the body on the
752
- // floor keeps holding conversations.
753
- if (this.isIncapacitated())
754
- return;
755
- // Cross-plane silence (see Player.canPerceive): a meat guard never
756
- // hears a Matrix persona or an astral form, so its AI never reacts to
757
- // things its character couldn't possibly know about. EXCEPT over a
758
- // LINK, where plane is irrelevant: an order to a companion rides the
759
- // deck / rigger / summoning bond (order.ts), and an active CALL is
760
- // Matrix traffic end to end -- a jacked-in decker calling a meat-side
761
- // contact is the most natural call there is (a real session's
762
- // "call ratchet" from VR connected and then fell into this gate).
763
- const overLink = opts?.viaLink || this.activeCallPartner === actor;
764
- if (!overLink && !this.canPerceive(actor))
765
- return;
766
- // AT HEEL, NOT AT THE TABLE (player ruling: companions don't jockey
767
- // for their master). Broadcast room-speech -- ANYONE's, the master's
768
- // included -- never wakes a companion shell's AI: the sentry mouthing
769
- // off at the runner gets answered by the RUNNER, with the bound
770
- // spirit standing silent at their shoulder (a real session had the
771
- // spirit negotiating the door). It still LISTENS (history feeds
772
- // later orders), and it still speaks when addressed directly
773
- // ("talk"/"order"/viaLink -- those channels never set broadcast) or
774
- // while running a standing directive (order.ts setObjective:
775
- // autonomy was explicitly granted).
776
- if (opts?.broadcast && this.companionKind && !this.objective) {
777
- this._addToHistory(`${actor.name} says: "${message}"`);
778
- this.logger.write(`${this.name} (companion, at heel) overheard ${actor.name} -- staying silent.`);
779
- return;
780
- }
781
- // Player wakes us up
782
- if (!(actor instanceof NPC)) {
783
- if (this.waitingForPlayer)
784
- this.logger.write(`[DEBUG] ${this.name} received player input, waking up.`);
785
- this.waitingForPlayer = false;
786
- }
787
- // If another NPC tries to trigger us and we are waiting for a player, ignore
788
- if (this.waitingForPlayer && actor instanceof NPC) {
789
- this.logger.write(`[DEBUG] ${this.name} is waiting for player input, ignoring NPC.`);
790
- return;
791
- }
792
- // If another NPC tries to trigger us and we are on cooldown, ignore
793
- if (actor instanceof NPC) {
794
- const now = Date.now();
795
- if (now - this.lastNpcHeardTime < NPC.npcHearCooldownMs) {
796
- this.logger.write(`[DEBUG] ${this.name} is on NPC hear cooldown.`);
825
+ // NEVER RETHROW, for the same reason see() does not (below): hear()
826
+ // is fired-and-forgotten from Room.say and from every social
827
+ // command, so a rejection here lands as an unhandledRejection and
828
+ // ui.ts fatal handler kills the whole session. see() learned this
829
+ // from a provider running out of credits mid-session; the lesson
830
+ // was never swept across to hear(), and on 2026-08-29 the SAME
831
+ // shape came back through the other door -- a 502 HTML page from
832
+ // the relay, parsed as JSON, dying inside respondTo. An NPC that
833
+ // cannot react just... does not.
834
+ try {
835
+ if (actor === this || actor.name === this.name)
836
+ return;
837
+ // The gone don't listen (see act()): no stimulus may restart a
838
+ // removed shell's AI.
839
+ if (this.deathClaimed)
840
+ return;
841
+ // NEITHER DO THE UNCONSCIOUS. A knocked-out actor now STAYS in the
842
+ // scene so they can be brought round (player ruling 2026-08-25) --
843
+ // which means every AI entry point has to check, or the body on the
844
+ // floor keeps holding conversations.
845
+ if (this.isIncapacitated())
846
+ return;
847
+ // Cross-plane silence (see Player.canPerceive): a meat guard never
848
+ // hears a Matrix persona or an astral form, so its AI never reacts to
849
+ // things its character couldn't possibly know about. EXCEPT over a
850
+ // LINK, where plane is irrelevant: an order to a companion rides the
851
+ // deck / rigger / summoning bond (order.ts), and an active CALL is
852
+ // Matrix traffic end to end -- a jacked-in decker calling a meat-side
853
+ // contact is the most natural call there is (a real session's
854
+ // "call ratchet" from VR connected and then fell into this gate).
855
+ const overLink = opts?.viaLink || this.activeCallPartner === actor;
856
+ if (!overLink && !this.canPerceive(actor))
857
+ return;
858
+ // AT HEEL, NOT AT THE TABLE (player ruling: companions don't jockey
859
+ // for their master). Broadcast room-speech -- ANYONE's, the master's
860
+ // included -- never wakes a companion shell's AI: the sentry mouthing
861
+ // off at the runner gets answered by the RUNNER, with the bound
862
+ // spirit standing silent at their shoulder (a real session had the
863
+ // spirit negotiating the door). It still LISTENS (history feeds
864
+ // later orders), and it still speaks when addressed directly
865
+ // ("talk"/"order"/viaLink -- those channels never set broadcast) or
866
+ // while running a standing directive (order.ts setObjective:
867
+ // autonomy was explicitly granted).
868
+ if (opts?.broadcast && this.companionKind && !this.objective) {
869
+ this._addToHistory(`${actor.name} says: "${message}"`);
870
+ this.logger.write(`${this.name} (companion, at heel) overheard ${actor.name} -- staying silent.`);
871
+ return;
872
+ }
873
+ // Player wakes us up
874
+ if (!(actor instanceof NPC)) {
875
+ if (this.waitingForPlayer)
876
+ this.logger.write(`[DEBUG] ${this.name} received player input, waking up.`);
877
+ this.waitingForPlayer = false;
878
+ }
879
+ // If another NPC tries to trigger us and we are waiting for a player, ignore
880
+ if (this.waitingForPlayer && actor instanceof NPC) {
881
+ this.logger.write(`[DEBUG] ${this.name} is waiting for player input, ignoring NPC.`);
797
882
  return;
798
883
  }
799
- this.lastNpcHeardTime = now;
800
- this.waitingForPlayer = true;
801
- this.logger.write(`[DEBUG] ${this.name} heard NPC, entering waiting state.`);
884
+ // If another NPC tries to trigger us and we are on cooldown, ignore
885
+ if (actor instanceof NPC) {
886
+ const now = Date.now();
887
+ if (now - this.lastNpcHeardTime < NPC.npcHearCooldownMs) {
888
+ this.logger.write(`[DEBUG] ${this.name} is on NPC hear cooldown.`);
889
+ return;
890
+ }
891
+ this.lastNpcHeardTime = now;
892
+ this.waitingForPlayer = true;
893
+ this.logger.write(`[DEBUG] ${this.name} heard NPC, entering waiting state.`);
894
+ }
895
+ // Process input
896
+ const entry = `${actor.name} says: "${message}"`;
897
+ this._addToHistory(entry);
898
+ this.logger.write(`${this.name} heard from ${actor.name}`);
899
+ await this.respondTo(actor, message);
900
+ }
901
+ catch (error) {
902
+ this.logger.error(`Error in hear (reaction dropped): ${error}`);
802
903
  }
803
- // Process input
804
- const entry = `${actor.name} says: "${message}"`;
805
- this._addToHistory(entry);
806
- this.logger.write(`${this.name} heard from ${actor.name}`);
807
- await this.respondTo(actor, message);
808
904
  }
809
905
  /**
810
906
  * ETIQUETTE (RAW p.138/141): "a social version of Sneak" -- the
@@ -1596,6 +1692,11 @@ An ORDER is the only way these goods change hands -- never a dialogue sale, neve
1596
1692
  }
1597
1693
  }
1598
1694
  const picketBlock = picketDutyNote(this.guarding === true, guardedDirection);
1695
+ // OPPOSITION (see Player.hostile / hostileStanceNote). Named to the
1696
+ // actor who is actually here, so the note is about the person in
1697
+ // front of them rather than a standing grudge -- and never applied
1698
+ // to an ally shell, which serves the runner by construction.
1699
+ const hostileBlock = hostileStanceNote(this.hostile === true && !this.allyOf, actor?.name);
1599
1700
  // CREDENTIALS YOU DO NOT HOLD (a real session: "the code Oren gave me
1600
1701
  // is wrong"). The block above is the ONLY place an NPC is ever handed
1601
1702
  // a real requiredPhrase, and it is keyed to the room they stand in --
@@ -1758,7 +1859,7 @@ Your objective is to drive the story line.
1758
1859
  ${formattedExitsStr}
1759
1860
  ${roomInventoryDesc}
1760
1861
  ${waresDesc}
1761
- ${swagNote}${clientNote}${picketBlock}${barrierBlock}${credentialHonesty}${localKnowledge}
1862
+ ${swagNote}${clientNote}${hostileBlock}${picketBlock}${barrierBlock}${credentialHonesty}${localKnowledge}
1762
1863
  ${familiarity}
1763
1864
  ${droneNote}
1764
1865
  ${companionNote}${tableNote}