@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
@@ -33,6 +33,9 @@ export interface IRoomConstructorConfig {
33
33
  description: string;
34
34
  details?: string;
35
35
  roomType: string;
36
+ /** Open to the sky (seed `outdoors`). Undefined = not declared, and
37
+ * utilities/outdoors.ts falls back to guessing from the name. */
38
+ outdoors?: boolean;
36
39
  exits?: Map<Direction, Door | string>;
37
40
  inventory?: Inventory;
38
41
  isStartRoom?: boolean;
@@ -42,6 +45,7 @@ export interface IRoomConstructorConfig {
42
45
  levels?: IGridSynthesisLevel[];
43
46
  hasNode?: boolean;
44
47
  nodeAccess?: 'wireless' | 'wired';
48
+ hostRating?: number;
45
49
  warded?: boolean;
46
50
  watched?: boolean;
47
51
  supportedLifestyles?: {
@@ -60,6 +64,10 @@ export declare class Room extends AbstractRoom {
60
64
  details?: string;
61
65
  exits: Map<Direction, Door | string>;
62
66
  roomType: string;
67
+ /** See IRoomConstructorConfig.outdoors -- the ONE consumer is
68
+ * utilities/outdoors.ts (the taxi curb and the generator's
69
+ * start-room guarantee both go through it). */
70
+ outdoors?: boolean;
63
71
  isStartRoom: boolean;
64
72
  inventory: Inventory;
65
73
  supportedLifestyles?: {
@@ -183,6 +191,59 @@ export declare class Room extends AbstractRoom {
183
191
  clearTerrainFor(deviceName: string): string | undefined;
184
192
  hasNode: boolean;
185
193
  nodeAccess: 'wireless' | 'wired';
194
+ /**
195
+ * HOST RATING (SR5 p.247 HOST ATTRIBUTES, RAG-checked 2026-08-28) --
196
+ * 1 to 12, and the one number a host is described BY. The book's
197
+ * sample table: 1-2 personal sites and pirate archives, 3-4 low-end
198
+ * commercial and private business, 5-6 social media and local police,
199
+ * 7-8 local corporate hosts and low-level government, 9-10 regional
200
+ * corporate and secure sites, 11-12 megacorporate HQ, military
201
+ * command, clandestine head office.
202
+ *
203
+ * Reported by Deditri (BTyfgybBnD2hjDmoN): the grid map named every
204
+ * place "host node" or "thin grid" and never said how hard it was, so
205
+ * a pawnshop and an arcology read identically from the outside.
206
+ *
207
+ * DEFAULT_HOST_RATING is a DEFAULT, not a rule -- the book rates
208
+ * hosts, it does not say what an unrated one is. 3 puts an unspecified
209
+ * host in the "low-end commercial, private business" band, which is
210
+ * what most run locations are; a seed that cares should say so.
211
+ */
212
+ static readonly DEFAULT_HOST_RATING = 3;
213
+ static readonly MIN_HOST_RATING = 1;
214
+ static readonly MAX_HOST_RATING = 12;
215
+ hostRating: number;
216
+ /** A seeded rating held to the book's 1-12 band; anything absent,
217
+ * fractional or out of range falls back to the default rather than
218
+ * producing a host the rules have no shape for. */
219
+ static clampHostRating(rating: number | undefined): number;
220
+ /**
221
+ * THE HOST'S MATRIX ATTRIBUTES, derived from its rating (SR5 p.247):
222
+ * "usually (Host Rating), (Host Rating + 1), (Host Rating + 2), and
223
+ * (Host Rating + 3), in any order."
224
+ *
225
+ * The book leaves the ORDER to the gamemaster and gives one worked
226
+ * example -- a Rating 4 host with Attack 5, Sleaze 4, Data Processing
227
+ * 7, Firewall 6. That ordering is used here rather than one of my own
228
+ * invention, so the default is the book's own illustration. A seed
229
+ * that wants a differently-shaped host should say so explicitly when
230
+ * that field exists; "any order" means no ordering is more canon than
231
+ * another, which is exactly why this one is not presented as a rule.
232
+ *
233
+ * WHAT THESE DO NOT DO YET, so the next reader does not go hunting:
234
+ * nothing. The only mechanical use SR5 gives a Host Rating is IC
235
+ * rolling Host Rating x 2 (p.247-248), and this engine has no IC --
236
+ * `hostAlert` is a flag and "ice hunting" is prose; nothing rolls on
237
+ * the host's side anywhere. Host intrusion is a threshold frame with
238
+ * no opposed roll to put these into. Filed as its own item; see the
239
+ * note on hostRating above.
240
+ */
241
+ hostAttributes(): {
242
+ attack: number;
243
+ sleaze: number;
244
+ dataProcessing: number;
245
+ firewall: number;
246
+ };
186
247
  hostCracked: boolean;
187
248
  hostMarksBy: Map<string, number>;
188
249
  hostAlert: boolean;
@@ -195,6 +256,42 @@ export declare class Room extends AbstractRoom {
195
256
  addActor(actor: Player): void;
196
257
  removeActor(actor: Player): void;
197
258
  getActors(): (Player | NPC)[];
259
+ /**
260
+ * WHEN A ROOM ANSWERS AS A CROWD (hiRLexr3xJjQM2jP4: "that was funny,
261
+ * but a little silly... Brick and Marla were standing next to
262
+ * eachother").
263
+ *
264
+ * Brick walked to the bar, Marla was already there, and both
265
+ * acknowledged the same handoff. The adjacency the report names is
266
+ * not the fault -- two people at a bar ARE adjacent. The silliness is
267
+ * one event narrated twice.
268
+ *
269
+ * WHY IT HAPPENS, AND WHY THE BRIEF'S OWN RULE CANNOT STOP IT. Room
270
+ * speech fans out in PARALLEL and un-awaited (see say() below): every
271
+ * listener's hear() is launched at once and each NPC calls the AI on
272
+ * its own. The brief already says "Do NOT repeat, rephrase, or re-ask
273
+ * anything you have already said" -- but at the moment each NPC is
274
+ * asked, the other's reply DOES NOT EXIST YET. Cross-NPC duplication
275
+ * is structurally invisible to both of them.
276
+ *
277
+ * SO THE FIX IS TO TELL THEM THEY ARE NOT ALONE, and nothing more.
278
+ * The fan-out stays un-awaited: serialising the calls would buy
279
+ * coordination with latency and a duller room, and a responder
280
+ * throttle would silence people who have something to say.
281
+ *
282
+ * IT DISCOURAGES RESTATING, NOT SPEAKING, and that distinction is the
283
+ * whole risk. say.ts's overheard-CALL note tells a bystander to stay
284
+ * silent unless it concerns them, which is right THERE -- you are
285
+ * hearing half of a private conversation. A bar handoff is the
286
+ * opposite situation, and borrowing that instruction would trade a
287
+ * mild silliness for a dead room. The reporter laughed; a room that
288
+ * stopped talking would not be an improvement on a laugh.
289
+ *
290
+ * NPC recipients only: Player.hear PRINTS what it is given, so a
291
+ * system note appended for a human would land verbatim in their
292
+ * transcript.
293
+ */
294
+ private crowdNote;
198
295
  say(actor: Player, message: string): void;
199
296
  addExit(direction: Direction, targetRoom: Room, keyItemOrSolution?: string): void;
200
297
  attemptUnlockExit(direction: Direction, itemOrSolution: string): string;
@@ -17,6 +17,10 @@ export class Room extends AbstractRoom {
17
17
  details;
18
18
  exits = new Map();
19
19
  roomType;
20
+ /** See IRoomConstructorConfig.outdoors -- the ONE consumer is
21
+ * utilities/outdoors.ts (the taxi curb and the generator's
22
+ * start-room guarantee both go through it). */
23
+ outdoors;
20
24
  isStartRoom;
21
25
  inventory = new Inventory();
22
26
  supportedLifestyles;
@@ -291,6 +295,64 @@ export class Room extends AbstractRoom {
291
295
  hasNode = false;
292
296
  // See IRoomConstructorConfig.nodeAccess: 'wired' = air-gapped host.
293
297
  nodeAccess = 'wireless';
298
+ /**
299
+ * HOST RATING (SR5 p.247 HOST ATTRIBUTES, RAG-checked 2026-08-28) --
300
+ * 1 to 12, and the one number a host is described BY. The book's
301
+ * sample table: 1-2 personal sites and pirate archives, 3-4 low-end
302
+ * commercial and private business, 5-6 social media and local police,
303
+ * 7-8 local corporate hosts and low-level government, 9-10 regional
304
+ * corporate and secure sites, 11-12 megacorporate HQ, military
305
+ * command, clandestine head office.
306
+ *
307
+ * Reported by Deditri (BTyfgybBnD2hjDmoN): the grid map named every
308
+ * place "host node" or "thin grid" and never said how hard it was, so
309
+ * a pawnshop and an arcology read identically from the outside.
310
+ *
311
+ * DEFAULT_HOST_RATING is a DEFAULT, not a rule -- the book rates
312
+ * hosts, it does not say what an unrated one is. 3 puts an unspecified
313
+ * host in the "low-end commercial, private business" band, which is
314
+ * what most run locations are; a seed that cares should say so.
315
+ */
316
+ // Declared BEFORE hostRating: an instance field initializer runs
317
+ // against statics that already exist, so ordering them the other way
318
+ // round is a TS2729 at build time.
319
+ static DEFAULT_HOST_RATING = 3;
320
+ static MIN_HOST_RATING = 1;
321
+ static MAX_HOST_RATING = 12;
322
+ hostRating = Room.DEFAULT_HOST_RATING;
323
+ /** A seeded rating held to the book's 1-12 band; anything absent,
324
+ * fractional or out of range falls back to the default rather than
325
+ * producing a host the rules have no shape for. */
326
+ static clampHostRating(rating) {
327
+ if (typeof rating !== 'number' || !Number.isFinite(rating))
328
+ return Room.DEFAULT_HOST_RATING;
329
+ return Math.min(Room.MAX_HOST_RATING, Math.max(Room.MIN_HOST_RATING, Math.round(rating)));
330
+ }
331
+ /**
332
+ * THE HOST'S MATRIX ATTRIBUTES, derived from its rating (SR5 p.247):
333
+ * "usually (Host Rating), (Host Rating + 1), (Host Rating + 2), and
334
+ * (Host Rating + 3), in any order."
335
+ *
336
+ * The book leaves the ORDER to the gamemaster and gives one worked
337
+ * example -- a Rating 4 host with Attack 5, Sleaze 4, Data Processing
338
+ * 7, Firewall 6. That ordering is used here rather than one of my own
339
+ * invention, so the default is the book's own illustration. A seed
340
+ * that wants a differently-shaped host should say so explicitly when
341
+ * that field exists; "any order" means no ordering is more canon than
342
+ * another, which is exactly why this one is not presented as a rule.
343
+ *
344
+ * WHAT THESE DO NOT DO YET, so the next reader does not go hunting:
345
+ * nothing. The only mechanical use SR5 gives a Host Rating is IC
346
+ * rolling Host Rating x 2 (p.247-248), and this engine has no IC --
347
+ * `hostAlert` is a flag and "ice hunting" is prose; nothing rolls on
348
+ * the host's side anywhere. Host intrusion is a threshold frame with
349
+ * no opposed roll to put these into. Filed as its own item; see the
350
+ * note on hostRating above.
351
+ */
352
+ hostAttributes() {
353
+ const hr = this.hostRating;
354
+ return { attack: hr + 1, sleaze: hr, dataProcessing: hr + 3, firewall: hr + 2 };
355
+ }
294
356
  // Runtime: set once someone hacks this room's host (see hack.ts). Until
295
357
  // then, the host's data vault holds its matrix items sealed (take.ts).
296
358
  // Fresh Rooms per scene means it naturally resets between jobs.
@@ -314,8 +376,10 @@ export class Room extends AbstractRoom {
314
376
  this.name = config.name;
315
377
  this.description = config.description;
316
378
  this.roomType = config.roomType;
379
+ this.outdoors = config.outdoors;
317
380
  this.hasNode = config.hasNode ?? false;
318
381
  this.nodeAccess = config.nodeAccess ?? 'wireless';
382
+ this.hostRating = Room.clampHostRating(config.hostRating);
319
383
  this.warded = config.warded ?? false;
320
384
  this.watched = config.watched ?? false;
321
385
  this.exits = config.exits || new Map();
@@ -390,6 +454,48 @@ Keep it concise and dramatic.`;
390
454
  getActors() {
391
455
  return Array.from(this.actors);
392
456
  }
457
+ /**
458
+ * WHEN A ROOM ANSWERS AS A CROWD (hiRLexr3xJjQM2jP4: "that was funny,
459
+ * but a little silly... Brick and Marla were standing next to
460
+ * eachother").
461
+ *
462
+ * Brick walked to the bar, Marla was already there, and both
463
+ * acknowledged the same handoff. The adjacency the report names is
464
+ * not the fault -- two people at a bar ARE adjacent. The silliness is
465
+ * one event narrated twice.
466
+ *
467
+ * WHY IT HAPPENS, AND WHY THE BRIEF'S OWN RULE CANNOT STOP IT. Room
468
+ * speech fans out in PARALLEL and un-awaited (see say() below): every
469
+ * listener's hear() is launched at once and each NPC calls the AI on
470
+ * its own. The brief already says "Do NOT repeat, rephrase, or re-ask
471
+ * anything you have already said" -- but at the moment each NPC is
472
+ * asked, the other's reply DOES NOT EXIST YET. Cross-NPC duplication
473
+ * is structurally invisible to both of them.
474
+ *
475
+ * SO THE FIX IS TO TELL THEM THEY ARE NOT ALONE, and nothing more.
476
+ * The fan-out stays un-awaited: serialising the calls would buy
477
+ * coordination with latency and a duller room, and a responder
478
+ * throttle would silence people who have something to say.
479
+ *
480
+ * IT DISCOURAGES RESTATING, NOT SPEAKING, and that distinction is the
481
+ * whole risk. say.ts's overheard-CALL note tells a bystander to stay
482
+ * silent unless it concerns them, which is right THERE -- you are
483
+ * hearing half of a private conversation. A bar handoff is the
484
+ * opposite situation, and borrowing that instruction would trade a
485
+ * mild silliness for a dead room. The reporter laughed; a room that
486
+ * stopped talking would not be an improvement on a laugh.
487
+ *
488
+ * NPC recipients only: Player.hear PRINTS what it is given, so a
489
+ * system note appended for a human would land verbatim in their
490
+ * transcript.
491
+ */
492
+ crowdNote(recipients) {
493
+ const mouths = recipients.filter(r => r instanceof NPC).length;
494
+ if (mouths < 2)
495
+ return '';
496
+ const others = mouths - 1;
497
+ return ` [System note: ${others} other ${others === 1 ? 'person' : 'people'} in earshot heard this too, and each is answering in the same moment as you -- none of you can see what the others are about to say. Say YOUR piece, in your own voice, but not the same piece: if the obvious reply is one anyone here would give, make yours specific to you instead. Two people reporting one event reads as a joke.]`;
498
+ }
393
499
  say(actor, message) {
394
500
  // "At" spots: speech is LOCAL (player decision: speech local, sight
395
501
  // room-wide -- walking into the bar had every NPC in the room
@@ -405,8 +511,21 @@ Keep it concise and dramatic.`;
405
511
  // companion shell at heel uses that distinction to stay quiet (see
406
512
  // NPC.hear); targeted channels (talk/order/ask...) never set it.
407
513
  if (speakerSpot === undefined) {
408
- for (const recipient of listeners)
409
- void recipient.hear(actor, message, { broadcast: true });
514
+ const crowd = this.crowdNote(listeners);
515
+ // CAUGHT, like every other hear() fan-out in the game (say.ts,
516
+ // planes.ts, game.ts heartbeat). These three were the only bare
517
+ // ones left: a bare `void` on a rejecting promise is an
518
+ // unhandledRejection, and ui.ts fatal handler kills the session
519
+ // on one -- which is exactly how a 502 from the AI relay ended a
520
+ // live game twice on 2026-08-29. Belt AND braces: NPC.hear now
521
+ // swallows its own reaction failures too, so this is redundant
522
+ // for NPCs on purpose -- it still guards any other Player
523
+ // subclass that grows an async hear().
524
+ for (const recipient of listeners) {
525
+ void Promise.resolve(recipient.hear(actor, recipient instanceof NPC ? `${message}${crowd}` : message, { broadcast: true })).catch(err => {
526
+ this.logger.error(`${recipient.name} failed to hear ${actor.name}: ${err}`);
527
+ });
528
+ }
410
529
  return;
411
530
  }
412
531
  const local = listeners.filter(r => {
@@ -414,8 +533,12 @@ Keep it concise and dramatic.`;
414
533
  return rs === undefined || rs === speakerSpot;
415
534
  });
416
535
  if (local.length > 0) {
417
- for (const recipient of local)
418
- void recipient.hear(actor, message, { broadcast: true });
536
+ const crowd = this.crowdNote(local);
537
+ for (const recipient of local) {
538
+ void Promise.resolve(recipient.hear(actor, recipient instanceof NPC ? `${message}${crowd}` : message, { broadcast: true })).catch(err => {
539
+ this.logger.error(`${recipient.name} failed to hear ${actor.name}: ${err}`);
540
+ });
541
+ }
419
542
  return;
420
543
  }
421
544
  // VOICE RANGE (spatial pass 2026-08-25): how hard you have to work
@@ -434,9 +557,15 @@ Keep it concise and dramatic.`;
434
557
  const shoutTargets = actor instanceof NPC
435
558
  ? listeners.filter(r => r === player)
436
559
  : listeners;
560
+ const shoutCrowd = this.crowdNote(shoutTargets);
437
561
  for (const recipient of shoutTargets) {
438
562
  const band = voiceBandFor(actorDistanceMeters(this, actor, recipient));
439
- void recipient.hear(actor, `${message}${voiceTag(band)}`, { broadcast: true });
563
+ // The crowd note goes LAST, after the voice tag: both are system
564
+ // dressing, and the tag describes the words while the note
565
+ // describes the room.
566
+ void Promise.resolve(recipient.hear(actor, `${message}${voiceTag(band)}${recipient instanceof NPC ? shoutCrowd : ''}`, { broadcast: true })).catch(err => {
567
+ this.logger.error(`${recipient.name} failed to hear ${actor.name} shout: ${err}`);
568
+ });
440
569
  }
441
570
  }
442
571
  addExit(direction, targetRoom, keyItemOrSolution) {
@@ -1 +1 @@
1
- {"version":3,"file":"room.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/models/room.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,EAAE,EAAE,MAAM,kCAAkC,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzI,OAAO,EACL,cAAc,GAEf,MAAM,2BAA2B,CAAC;AAyEnC,MAAM,OAAO,IAAK,SAAQ,YAAY;IAC5B,MAAM,GAAW,MAAM,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,GAAgB,IAAI,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU;IAChB,gBAAgB,CAAW;IAC5B,IAAI,CAAS;IACb,WAAW,CAAS;IACpB,OAAO,CAAU;IACjB,KAAK,GAAkC,IAAI,GAAG,EAAE,CAAC;IACjD,QAAQ,CAAS;IACjB,WAAW,CAAU;IACrB,SAAS,GAAc,IAAI,SAAS,EAAE,CAAC;IACvC,mBAAmB,CAGxB;IACK,eAAe,GAAY,KAAK,CAAC;IACjC,IAAI,CAAY;IAEvB,uEAAuE;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,mEAAmE;IACnE,yCAAyC;IAClC,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,mEAAmE;IACnE,iEAAiE;IAC1D,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,yEAAyE;IACzE,kEAAkE;IAClE,qEAAqE;IACrE,uEAAuE;IACvE,oEAAoE;IACpE,4CAA4C;IACrC,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE3C,mEAAmE;IACnE,mEAAmE;IACnE,qEAAqE;IACrE,mEAAmE;IACnE,qEAAqE;IACrE,kEAAkE;IAClE,oEAAoE;IACpE,4DAA4D;IACrD,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEnD;;;;;;;;;;OAUG;IACI,MAAM,GAAgB,EAAE,CAAC;IAEhC;;;;OAIG;IACH,UAAU,CAAC,KAAa,EAAE,IAAyC;QACjE,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,qEAAqE;QACrE,qBAAqB;QACrB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;YACjD,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,4DAA4D;QAC5D,kEAAkE;QAClE,iEAAiE;QACjE,mBAAmB;QACnB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjD,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,IAAI,CAAC,OAAO,CAAC,IAAY,CAAC,CAAC;oBAC1B,KAAqC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,2BAA2B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,WAAW,CAAC,CAAC;QACpI,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wDAAwD;IACxD,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzD,CAAC;IACO,eAAe,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,sCAAsC;IAEhG,sEAAsE;IAC/D,KAAK,CAAe;IACpB,IAAI,CAAY;IAChB,MAAM,CAAyB;IACtC,sEAAsE;IACtE,0DAA0D;IAC1D,kEAAkE;IAC3D,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAChD,oEAAoE;IACpE,mEAAmE;IACnE,gEAAgE;IAChE,qEAAqE;IACrE,6BAA6B;IACtB,YAAY,GAAgC,EAAE,CAAC;IAC9C,KAAK,CAAa;IAE1B;;;;;;;;OAQG;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,eAAe,CAAC,SAAoB;QAClC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACK,eAAe;QACrB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM;aACrB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAEpC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,IAAI,GAAG,CAAC,IAAwB,EAAE,CAAY,EAAE,EAAE;YACtD,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,8DAA8D;QAC9D,mEAAmE;QACnE,2DAA2D;QAC3D,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;mBAC9D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,+DAA+D;QAC/D,mEAAmE;QACnE,qEAAqE;QACrE,8DAA8D;QAC9D,mEAAmE;QACnE,8DAA8D;QAC9D,iEAAiE;QACjE,mEAAmE;QACnE,qEAAqE;QACrE,kDAAkD;QAClD,EAAE;QACF,+DAA+D;QAC/D,+DAA+D;QAC/D,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,kEAAkE;YAClE,mEAAmE;YACnE,kEAAkE;YAClE,+DAA+D;YAC/D,kEAAkE;YAClE,6DAA6D;YAC7D,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;gBAC1D,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS;aACrD,CAAC,CAAC;YACH,2DAA2D;YAC3D,iEAAiE;YACjE,sDAAsD;YACtD,gEAAgE;YAChE,iEAAiE;YACjE,gEAAgE;YAChE,kEAAkE;YAClE,iEAAiE;YACjE,6DAA6D;YAC7D,kEAAkE;YAClE,mEAAmE;YACnE,sDAAsD;YACtD,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC9C,SAAS;gBACT,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;aAC3E,CAAC,CAAC;YACH,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,CAAC,UAAkB;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAChD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,OAAO,GAAG,KAAK,CAAC;IACvB,oEAAoE;IAC7D,UAAU,GAAyB,UAAU,CAAC;IACrD,wEAAwE;IACxE,uEAAuE;IACvE,gEAAgE;IACzD,WAAW,GAAG,KAAK,CAAC;IAC3B,iEAAiE;IACjE,kEAAkE;IAClE,kEAAkE;IAClE,iEAAiE;IACjE,wDAAwD;IACjD,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,oEAAoE;IACpE,oEAAoE;IACpE,sEAAsE;IACtE,gDAAgD;IACzC,SAAS,GAAG,KAAK,CAAC;IAClB,MAAM,GAAG,KAAK,CAAC;IACtB,kEAAkE;IAC3D,OAAO,GAAG,KAAK,CAAC;IAEvB,YAAY,MAA8B;QACxC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,SAAS,EAAE,CAAC;QACrD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;QAC/C,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,KAAyB;QACjC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,YAAoB;QACnD,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC;YAEhD,MAAM,MAAM,GAAG;;;iBAGJ,YAAY;;aAEhB,IAAI,CAAC,IAAI;oBACF,IAAI,CAAC,WAAW;;;8BAGN,CAAC;YAEzB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAE1B,qBAAqB;YACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;oBACpB,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB;oBAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,iBAAiB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBAE9D,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB;oBAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,iBAAiB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QAEpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE1B,uBAAuB;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBACpB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;gBACzC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,OAAe;QAChC,oEAAoE;QACpE,8DAA8D;QAC9D,8DAA8D;QAC9D,oEAAoE;QACpE,mEAAmE;QACnE,oEAAoE;QACpE,8DAA8D;QAC9D,sDAAsD;QACtD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QAC5D,gEAAgE;QAChE,mEAAmE;QACnE,iEAAiE;QACjE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,MAAM,SAAS,IAAI,SAAS;gBAAE,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACjC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAW,CAAC,CAAC;YAC/B,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,WAAW,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,MAAM,SAAS,IAAI,KAAK;gBAAE,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxF,OAAO;QACT,CAAC;QACD,mEAAmE;QACnE,oEAAoE;QACpE,kEAAkE;QAClE,4DAA4D;QAC5D,qEAAqE;QACrE,mEAAmE;QACnE,gEAAgE;QAChE,oEAAoE;QACpE,mEAAmE;QACnE,8DAA8D;QAC9D,mEAAmE;QACnE,mEAAmE;QACnE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,KAAK,YAAY,GAAG;YACvC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC;YACrC,CAAC,CAAC,SAAS,CAAC;QACd,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAmB,CAAC,CAAC,CAAC;YACjF,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,CAAC,SAAoB,EAAE,UAAgB,EAAE,iBAA0B;QACxE,IAAI,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,IAAI,CAAC;gBACd,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC;gBACpC,oBAAoB,EAAE,iBAAiB;aACxC,CAAC,CAAC;QACL,CAAC;QACD,qEAAqE;QACrE,8DAA8D;QAC9D,qEAAqE;QACrE,kEAAkE;QAClE,kEAAkE;QAClE,+DAA+D;QAC/D,gEAAgE;QAChE,iDAAiD;QACjD,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;gBAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,iBAAiB,CAAC,SAAoB,EAAE,cAAsB;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,SAAS,cAAc,MAAM,EAAE,CAAC,CAAC;YAC5F,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACpD,OAAO,MAAM,CAAC,CAAC,CAAC,yBAAyB,cAAc,GAAG,CAAC,CAAC,CAAC,eAAe,cAAc,kBAAkB,CAAC;QAC/G,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC;QACpE,OAAO,2CAA2C,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,SAAoB;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,SAAoB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,SAAS,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAC/F,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;OAUG;IACI,OAAO,GAAa,EAAE,CAAC;IAE9B;;;;oBAIgB;IAChB,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;6DACyD;IACzD,eAAe;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,IAAI,KAAK,SAAS;eACjB,CAAC,CAAC,OAAO,KAAK,SAAS;eACvB,CAAC,CAAC,SAAS,KAAK,SAAS;eACzB,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;0DACsD;IACtD,aAAa,CAAC,SAAoB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,CAAC,IAAU;QAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,UAAU,CAAC,IAAU;QACnB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,SAAoB;QACvC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC;YACrC,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC;YACrC,KAAK,MAAM,CAAC,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC;YACnC,KAAK,MAAM,CAAC,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC;YACnC,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC;YACjC,KAAK,MAAM,CAAC,CAAC,OAAO,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,UAAgB;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,EAAE,CAAC;oBAC7G,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,mBAAmB,EAAE,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IAC3E,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,mBAAmB,EAAE,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IAC5E,CAAC;IAED,sBAAsB,CAAC,MAAc,EAAE,IAAU;QAC/C,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAAE,OAAO,KAAK,CAAC;QAErE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QAErB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,uBAAuB,CAAC,MAAc,EAAE,QAAgB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACxD,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAE9B,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,IAAU;QAC1C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,QAAQ,CAAC;QACzF,MAAM,kBAAkB,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,IAAI,WAAW,IAAI,YAAY;YACnH,CAAC,CAAC,YAA+B;YACjC,CAAC,CAAC,SAAS,CAAC;QAEZ,MAAM,cAAc,GAAG,kBAAkB,EAAE,QAAQ,CAAC;QAEpD,IAAI,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,mCAAmC;YACrF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,IAAI,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7F,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,yBAAyB,KAAK,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB,CAAC,KAAa;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"room.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/models/room.ts"],"names":[],"mappings":"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"}
@@ -226,6 +226,7 @@
226
226
  "name": "Grid Vault",
227
227
  "description": "A humming server room jury-rigged into the Barrens power grid. Thick cables run from the door into matte-black server racks with no antenna in sight -- whatever lives in there doesn't talk to the wireless world.",
228
228
  "hasNode": true,
229
+ "hostRating": 9,
229
230
  "nodeAccess": "wired",
230
231
  "size": "small",
231
232
  "spots": [
@@ -299,6 +299,7 @@
299
299
  "roomType": "Shop",
300
300
  "owner": "Ratchet",
301
301
  "hasNode": true,
302
+ "hostRating": 3,
302
303
  "size": "medium",
303
304
  "spots": [
304
305
  {
@@ -474,6 +475,7 @@
474
475
  "description": "Past the door, rows of scavenged sim-couches wired into a matte-black host with no wireless presence at all -- hard lines only, the way the paranoid like it. The couch rows whisper with other people's dreams.",
475
476
  "roomType": "Den",
476
477
  "hasNode": true,
478
+ "hostRating": 5,
477
479
  "nodeAccess": "wired",
478
480
  "size": "small",
479
481
  "spots": [
@@ -65,6 +65,26 @@ export interface IReproNpc {
65
65
  /** Holding it shut: a doorman, a picket. Implies atDoorway, because a
66
66
  * guard who is not in the doorway guards nothing. */
67
67
  guarding?: boolean;
68
+ /**
69
+ * ARMED AND WIRELESS -- a firearm and a commlink.
70
+ *
71
+ * Added because a bench could not express "somebody over there is
72
+ * carrying a gun", which is the whole subject of the p.219 icon item:
73
+ * an interesting or dangerous device should break out as its own icon
74
+ * beside its owner's PAN. The bench's NPC answered "runs no devices at
75
+ * all, nothing to crack", so the fixture could not reach the thing it
76
+ * was built to show.
77
+ *
78
+ * IT ALSO UNLOCKS `hack <name>` ON A BENCH, which is worth saying
79
+ * because it is not what the flag is named for and someone looking
80
+ * for it will not think to read "armed". The commlink is what gives
81
+ * the NPC a PAN at all, so every PAN-side Matrix action -- the
82
+ * intrusion, its brackets, jamming a smartgun, cutting an overlay --
83
+ * became reachable from a repro the day this landed. It is currently
84
+ * the ONLY Matrix action a bench can reach: host intrusion and `tap`
85
+ * both need a host fixture, which the builder cannot make.
86
+ */
87
+ armed?: boolean;
68
88
  }
69
89
  export interface IReproItem {
70
90
  name: string;
@@ -86,6 +106,28 @@ export interface IReproFixture {
86
106
  items?: IReproItem[];
87
107
  /** Which side the runner starts on. Defaults to the barrier side. */
88
108
  start?: ReproSide;
109
+ /**
110
+ * A SECOND STOREY on the barrier-side room -- a catwalk, balcony or
111
+ * mezzanine, with a spot standing on it.
112
+ *
113
+ * Added because elevation could not be benched at all: the builder
114
+ * made flat rooms, so a bench for "I don't know how to get up there"
115
+ * could only ever confirm the NEGATIVE (that ordinary rooms are
116
+ * unaffected). It also serves climb/descend, which is the next thing
117
+ * that needs to demonstrate going up.
118
+ *
119
+ * The spot is NOT optional and the builder will not let it be. A
120
+ * declared level with nothing standing on it is precisely the
121
+ * generation defect that produced these reports -- a storey the map
122
+ * draws and no string can reach -- so a fixture must not be able to
123
+ * reproduce it by accident while claiming to test the fix for it.
124
+ */
125
+ level?: {
126
+ /** Reads as the spot's name too: "catwalk" is a fine place to stand. */
127
+ name: string;
128
+ kind?: 'catwalk' | 'balcony' | 'mezzanine';
129
+ side?: 'north' | 'east' | 'south' | 'west';
130
+ };
89
131
  }
90
132
  export interface IRepro {
91
133
  fixture?: IReproFixture;
@@ -51,6 +51,18 @@ export interface IPlayerSeedJson {
51
51
  * utilities/spots.ts holdsGround). The way past is social or
52
52
  * violent, never a lockpick. */
53
53
  guarding?: boolean;
54
+ /**
55
+ * This NPC is OPPOSITION: the runner is not supposed to be here, and
56
+ * they know it (JjQdy4A4tzcQdPHno, "none of the NPCs ever seem to get
57
+ * hostile"). See Player.hostile for what it does and, more
58
+ * importantly, what it deliberately does not do.
59
+ *
60
+ * OPT-IN, NEVER INFERRED. The generator's own head-count calls every
61
+ * NPC that is not the client a "hostile", which is a population
62
+ * measure and not a disposition -- a bartender in an enemy building
63
+ * is counted there. Deriving this from that would turn the vendors.
64
+ */
65
+ hostile?: boolean;
54
66
  lifestyleChoices: LifestyleChoice[];
55
67
  startingItems?: IItemSeedJson[];
56
68
  combat?: ICombatSeedJson;
@@ -5,6 +5,11 @@ export interface IRoomSeedJson {
5
5
  name: string;
6
6
  description: string;
7
7
  roomType: string;
8
+ /** IS THIS ROOM OPEN TO THE SKY? Declared, because no name can be
9
+ * trusted to say it -- see utilities/outdoors.ts. Optional: a seed
10
+ * that omits it falls back to the name heuristic, which is what
11
+ * every seed written before this field does. */
12
+ outdoors?: boolean;
8
13
  isStartRoom?: boolean;
9
14
  owner?: string;
10
15
  tags?: string[];
@@ -15,6 +20,7 @@ export interface IRoomSeedJson {
15
20
  reachable?: boolean;
16
21
  hasNode?: boolean;
17
22
  nodeAccess?: 'wireless' | 'wired';
23
+ hostRating?: number;
18
24
  warded?: boolean;
19
25
  watched?: boolean;
20
26
  spots?: {
@@ -24,6 +24,13 @@ export interface IStrikeProfile {
24
24
  /** A SPELL strike (cast.ts): an Awakened defender's COUNTERSPELLING
25
25
  * (canon: its own Magic skill) rides their defense against it. */
26
26
  isSpell?: boolean;
27
+ /**
28
+ * An explicit limit for a strike that is not a weapon attack: a
29
+ * spell's FORCE (p.281, "the Force acts as a limit on the spell";
30
+ * Spellcasting + Magic [Force]). Weapon strikes leave this undefined
31
+ * and take their Accuracy instead -- see Player.getAttackLimit.
32
+ */
33
+ limit?: number;
27
34
  }
28
35
  /**
29
36
  * The shared combat-exchange engine, extracted from AttackCommand so spell
@@ -450,7 +450,25 @@ export class CombatExchange {
450
450
  // p.189 "Defender Prone": -2 to defend -- but NOT against ranged
451
451
  // fire unless the shooter is inside five metres.
452
452
  const proneDefence = onTheGround(defender) && (isMelee || spatial.meters <= 5) ? -2 : 0;
453
- const attack = rollPool(strike.pool + directed + rangeMod + attackerFloor + targetDown);
453
+ // THE LIMIT RIDES THE WEAPON IN HAND (p.46-47, p.168): a meat
454
+ // attack is capped by its Accuracy, or by the attacker's Physical
455
+ // limit when there is nothing behind the swing. The strike profile
456
+ // is the right thing to ask, because it has ALREADY resolved what
457
+ // is really being swung -- a holstered gun does not count, and a
458
+ // dry or smartlink-locked firearm has degraded to bare fists above,
459
+ // which correctly leaves weaponItem undefined and drops the attack
460
+ // onto the Physical limit.
461
+ //
462
+ // A SPELL IS BRACKETED BY FORCE, NEVER BY THE BODY (p.281). It is
463
+ // cast from the meat plane with no weaponItem, so asking
464
+ // getAttackLimit would hand a manabolt the caster's PHYSICAL limit
465
+ // -- a mage's bolt capped by how strong their arms are. Spells take
466
+ // their own declared limit and nothing else; undefined stays
467
+ // uncapped rather than falling through.
468
+ const attackLimit = strike.isSpell
469
+ ? strike.limit
470
+ : attacker.getAttackLimit(strike.weaponItem);
471
+ const attack = rollPool(strike.pool + directed + rangeMod + attackerFloor + targetDown, attackLimit);
454
472
  const defense = rollPool(defender.getDefensePool() + inspired + counterspell + coverDice + proneDefence);
455
473
  const header = `${attacker.name} attacks ${defender.name} ${strike.label}`;
456
474
  meta.push(`${header}:`);