@maka/maka-cli 5.83.0 → 5.85.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 (81) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +0 -28
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +1 -41
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +7 -0
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +3 -0
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +62 -4
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/heal.d.ts +53 -0
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/heal.js +158 -0
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/heal.js.map +1 -0
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js +16 -1
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +13 -5
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +9 -6
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/sustain.d.ts +12 -0
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/sustain.js +52 -2
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/sustain.js.map +1 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/use.d.ts +17 -11
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +45 -32
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +34 -1
  26. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +84 -6
  27. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.d.ts +9 -2
  29. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js +12 -5
  30. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +22 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/game.js +148 -7
  33. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +11 -0
  35. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +86 -16
  36. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +16 -0
  38. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +23 -0
  39. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +8 -0
  41. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js +6 -0
  42. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js.map +1 -1
  43. package/bundle/typescript/src/commands/game/sideQuest/utilities/bystander.d.ts +17 -0
  44. package/bundle/typescript/src/commands/game/sideQuest/utilities/bystander.js +123 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/utilities/bystander.js.map +1 -0
  46. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.d.ts +116 -0
  47. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +96 -0
  48. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js.map +1 -0
  49. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.d.ts +124 -0
  50. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js +209 -0
  51. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js.map +1 -0
  52. package/bundle/typescript/src/commands/game/sideQuest/utilities/meet-location.d.ts +37 -0
  53. package/bundle/typescript/src/commands/game/sideQuest/utilities/meet-location.js +51 -0
  54. package/bundle/typescript/src/commands/game/sideQuest/utilities/meet-location.js.map +1 -0
  55. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.d.ts +76 -0
  56. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js +84 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js.map +1 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +9 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  60. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +57 -0
  61. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +121 -16
  62. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/utilities/presence-gate.d.ts +21 -0
  64. package/bundle/typescript/src/commands/game/sideQuest/utilities/presence-gate.js +28 -0
  65. package/bundle/typescript/src/commands/game/sideQuest/utilities/presence-gate.js.map +1 -0
  66. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.d.ts +75 -0
  67. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js +121 -10
  68. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js.map +1 -1
  69. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.d.ts +10 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js +55 -0
  71. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/utilities/street-gang.d.ts +17 -0
  73. package/bundle/typescript/src/commands/game/sideQuest/utilities/street-gang.js +139 -0
  74. package/bundle/typescript/src/commands/game/sideQuest/utilities/street-gang.js.map +1 -0
  75. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +9 -1
  76. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +3 -1
  78. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  79. package/bundle/typescript/src/commands/testCmd/mocha.sub.cmd.js +46 -44
  80. package/bundle/typescript/src/commands/testCmd/mocha.sub.cmd.js.map +1 -1
  81. package/package.json +1 -1
@@ -41,6 +41,18 @@ import { Command, ICommand } from './command.js';
41
41
  * command that can silently destroy it -- and the loss would look
42
42
  * exactly like a form that had been dropped on purpose.
43
43
  */
44
+ /**
45
+ * The query with the form's OWN words taken out, so what remains is the
46
+ * player's answer to "which sprite?" and nothing else.
47
+ *
48
+ * Split on non-alphanumerics on both sides, so the separator a player
49
+ * chooses never decides whether they are understood: "static-veil",
50
+ * "static veil" and "staticveil" all subtract the same words. The
51
+ * collapsed form ("staticveil") is matched too, because the form keys
52
+ * are hyphenated and a player typing the key verbatim is the common
53
+ * case, not the exotic one.
54
+ */
55
+ export declare function withoutFormWords(query: string, formKey: string): string;
44
56
  export declare class SustainCommand extends Command implements ICommand {
45
57
  protected static verb: string;
46
58
  protected static description: string;
@@ -43,6 +43,29 @@ import { fuzzyPickName } from '../utilities/fuzzy-match.js';
43
43
  * command that can silently destroy it -- and the loss would look
44
44
  * exactly like a form that had been dropped on purpose.
45
45
  */
46
+ /**
47
+ * The query with the form's OWN words taken out, so what remains is the
48
+ * player's answer to "which sprite?" and nothing else.
49
+ *
50
+ * Split on non-alphanumerics on both sides, so the separator a player
51
+ * chooses never decides whether they are understood: "static-veil",
52
+ * "static veil" and "staticveil" all subtract the same words. The
53
+ * collapsed form ("staticveil") is matched too, because the form keys
54
+ * are hyphenated and a player typing the key verbatim is the common
55
+ * case, not the exotic one.
56
+ */
57
+ export function withoutFormWords(query, formKey) {
58
+ const parts = formKey.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);
59
+ const formWords = new Set(parts);
60
+ const collapsed = parts.join('');
61
+ return query.split(/\s+/)
62
+ .filter(w => {
63
+ const bare = w.toLowerCase().replace(/[^a-z0-9]+/g, '');
64
+ return bare.length > 0 && !formWords.has(bare) && bare !== collapsed;
65
+ })
66
+ .join(' ')
67
+ .trim();
68
+ }
46
69
  export class SustainCommand extends Command {
47
70
  static verb = 'sustain';
48
71
  static description = 'Hand a complex form you are holding to a registered sprite, which sustains it for you and takes the -2 instead (SR5 p.256): "sustain <form>". Costs ONE task. Say it again to take the form back, free. A sprite that leaves hands its forms back to you.';
@@ -114,11 +137,38 @@ export class SustainCommand extends Command {
114
137
  }
115
138
  // Which sprite. Named-form-only is the common case, so a single
116
139
  // registered sprite is chosen silently; two make you say.
140
+ //
141
+ // THE ANSWER IS MATCHED AGAINST WHAT IS LEFT AFTER THE FORM
142
+ // (AAEZma9zQEkWzrXKi: "what if more than one sprite is active, how
143
+ // does 'sustain static-veil' know which sprite should sustain it?").
144
+ //
145
+ // It asked -- and then could not hear the answer. The sprite was
146
+ // matched against the WHOLE query, form name and all, so the form's
147
+ // own words diluted the match below fuzzyPickName's 0.6 word-score
148
+ // threshold: with "Machine Sprite (Level 1)" and "Fault Sprite
149
+ // (Level 1)" registered, `sustain static-veil fault` scored "fault"
150
+ // at 1 word out of 3 and answered undefined. The game printed
151
+ // ("sustain <form> <sprite>"), the player typed exactly that, and
152
+ // got the same question back. Only retyping the full name --
153
+ // `sustain static-veil Fault Sprite (Level 1)`, parenthesised level
154
+ // included -- ever worked, which nobody would guess.
155
+ //
156
+ // Canon is silent here and stays silent: p.256 gives the task
157
+ // economy and the sustain hand-off, nothing about how a player
158
+ // designates one sprite among several. That is UI, so this refuses
159
+ // when it cannot tell rather than inventing a rule -- but the
160
+ // syntax it advertises now has to actually work.
117
161
  let target = sprites[0];
118
162
  if (sprites.length > 1) {
119
- const named = fuzzyPickName(query, sprites.map(s => s.npc.name));
163
+ const rest = withoutFormWords(query, pickedKey);
164
+ const named = rest.length > 0 ? fuzzyPickName(rest, sprites.map(s => s.npc.name)) : undefined;
120
165
  if (!named) {
121
- return `Which sprite should carry it? Registered and here: ${sprites.map(s => `"${s.npc.name}"`).join(', ')}. ("sustain <form> <sprite>")`;
166
+ const roster = sprites.map(s => `"${s.npc.name}"`).join(', ');
167
+ // Two different silences, two different answers: naming nothing
168
+ // is a question, naming something unrecognized is a correction.
169
+ return rest.length > 0
170
+ ? `No registered sprite of yours answers to "${rest}". Here: ${roster}.${hint(` ("sustain ${pickedKey} <sprite>" -- one distinguishing word is enough.)`)}`
171
+ : `Which sprite should carry it? Registered and here: ${roster}.${hint(` ("sustain ${pickedKey} <sprite>" -- one distinguishing word is enough.)`)}`;
122
172
  }
123
173
  target = sprites.find(s => s.npc.name === named);
124
174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sustain.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sustain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sustain.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sustain.ts"],"names":[],"mappings":"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"}
@@ -36,18 +36,24 @@ export declare class UseCommand extends Command implements ICommand {
36
36
  /** The offer itself, and everything that follows a thing opening. */
37
37
  private openWith;
38
38
  /**
39
- * Healing, matching combat's texture (see commands/attack.ts): a visible
40
- * first-aid dice pool scaled by the item's quality, applied to the
41
- * condition monitor. Pool is 2 * (1 + quality) d6 (a common medkit rolls
42
- * 2d6, a military-grade one 10d6) and the recovery is hits + 1 + quality
43
- * -- the floor guarantees even an all-miss roll isn't a wasted kit, and
44
- * quality dominates, since gear is the game's whole progression system.
45
- * Single-use: the kit is consumed. Healing also restores wound-modifier
46
- * dice, since those derive from current damage.
39
+ * `use <medkit>` and `heal` are THE SAME TEST (SR5 p.205-206) and now
40
+ * literally run the same code -- utilities/first-aid.ts. They used to
41
+ * differ, because this one was written first and grew its own rules:
42
+ * a pool of 2 * (1 + quality) d6, healing of hits + 1 + quality, no
43
+ * threshold, no cap, no limit, and the kit consumed on use.
47
44
  *
48
- * Deliberately refuses BEFORE consuming when there's nothing to heal --
49
- * burning a medkit at full health would just be a trap -- and when the
50
- * user is already down: death is death, not a big wound.
45
+ * Leaving that here while heal.ts spoke canon would have been the worst
46
+ * of the three options -- the same report one layer down, from the
47
+ * player who happens to type `use medkit` instead of `heal`. So this is
48
+ * a thin shim over the shared module and holds no mechanics of its own.
49
+ *
50
+ * TWO PLAYER-VISIBLE CHANGES land here, both canon:
51
+ * - An all-miss roll no longer closes a box. There is a threshold now.
52
+ * - THE KIT IS NO LONGER CONSUMED. p.205 lets you apply First Aid
53
+ * "even if you do not currently have supplies for it", and the
54
+ * catalog already sells 'Medkit Supplies' as the separate
55
+ * consumable. Consumption was the old anti-spam device; the
56
+ * once-per-set-of-wounds lock is canon's own, and does it better.
51
57
  */
52
58
  private applyFirstAid;
53
59
  /**
@@ -4,6 +4,8 @@ import { rollPool, formatRoll } from '../utilities/dice.js';
4
4
  import { resolveUseTarget } from '../utilities/use-target.js';
5
5
  import { ensureAtSpot, ensureAtExit } from '../utilities/spots.js';
6
6
  import { applyDeviceOpened } from '../utilities/devices.js';
7
+ import { hint } from '../utilities/hints.js';
8
+ import { FIRST_AID_THRESHOLD, firstAidCap, firstAidRefusal, performFirstAid, } from '../utilities/first-aid.js';
7
9
  export class UseCommand extends Command {
8
10
  static verb = 'use';
9
11
  static description = 'Use a thing: an item from your pack (a medkit, a stim patch), or a device in the room -- "use keypad 4471" offers a code, "use safe" tries it with what you are carrying. With one device here, a bare code works too.';
@@ -248,46 +250,57 @@ export class UseCommand extends Command {
248
250
  return [result.message, ...lines].join('\n');
249
251
  }
250
252
  /**
251
- * Healing, matching combat's texture (see commands/attack.ts): a visible
252
- * first-aid dice pool scaled by the item's quality, applied to the
253
- * condition monitor. Pool is 2 * (1 + quality) d6 (a common medkit rolls
254
- * 2d6, a military-grade one 10d6) and the recovery is hits + 1 + quality
255
- * -- the floor guarantees even an all-miss roll isn't a wasted kit, and
256
- * quality dominates, since gear is the game's whole progression system.
257
- * Single-use: the kit is consumed. Healing also restores wound-modifier
258
- * dice, since those derive from current damage.
253
+ * `use <medkit>` and `heal` are THE SAME TEST (SR5 p.205-206) and now
254
+ * literally run the same code -- utilities/first-aid.ts. They used to
255
+ * differ, because this one was written first and grew its own rules:
256
+ * a pool of 2 * (1 + quality) d6, healing of hits + 1 + quality, no
257
+ * threshold, no cap, no limit, and the kit consumed on use.
259
258
  *
260
- * Deliberately refuses BEFORE consuming when there's nothing to heal --
261
- * burning a medkit at full health would just be a trap -- and when the
262
- * user is already down: death is death, not a big wound.
259
+ * Leaving that here while heal.ts spoke canon would have been the worst
260
+ * of the three options -- the same report one layer down, from the
261
+ * player who happens to type `use medkit` instead of `heal`. So this is
262
+ * a thin shim over the shared module and holds no mechanics of its own.
263
+ *
264
+ * TWO PLAYER-VISIBLE CHANGES land here, both canon:
265
+ * - An all-miss roll no longer closes a box. There is a threshold now.
266
+ * - THE KIT IS NO LONGER CONSUMED. p.205 lets you apply First Aid
267
+ * "even if you do not currently have supplies for it", and the
268
+ * catalog already sells 'Medkit Supplies' as the separate
269
+ * consumable. Consumption was the old anti-spam device; the
270
+ * once-per-set-of-wounds lock is canon's own, and does it better.
263
271
  */
264
272
  applyFirstAid(kit) {
265
- if (this.actor.isDown()) {
266
- return `You're past the help of a ${kit.name}.`;
267
- }
268
- if (this.actor.damageTaken === 0) {
269
- return `You're not hurt -- save the ${kit.name} for when you're bleeding.`;
270
- }
271
- // First aid is Logic + FIRST-AID skill now (unskilled: Logic - 1,
272
- // fumbling with the sprays), with the kit's quality still deciding how
273
- // much each hit actually closes (hits + 1 + quality below).
274
- const quality = kit.qualityBonus;
275
- const firstAid = this.actor.skillRating('first-aid');
276
- // Quick Healer (p.77): +2 on every healing test made on or by you.
277
- const roll = rollPool(Math.max(1, this.actor.logic + (firstAid > 0 ? firstAid : -1) + this.actor.qualityBonus('healing') + this.actor.augBonus('healing') + this.actor.woundModifier));
278
- const healed = this.actor.healDamage(roll.hits + 1 + quality);
279
- this.actor.inventory.removeItem(kit.name);
280
- this.logger.write(`UseCommand: ${this.actor.name} used ${kit.name} and healed ${healed} boxes (${this.actor.damageTaken}/${this.actor.maxConditionBoxes}).`);
273
+ const track = this.actor.damageTaken > 0 ? 'physical' : 'stun';
274
+ const refusal = firstAidRefusal(this.actor, this.actor, kit, track);
275
+ if (refusal)
276
+ return refusal;
277
+ const cap = firstAidCap(this.actor, kit);
278
+ const result = performFirstAid(this.actor, this.actor, kit, track);
279
+ const summary = track === 'physical' ? this.actor.conditionSummary() : this.actor.stunSummary();
280
+ this.logger.write(`UseCommand: ${this.actor.name} used ${kit.name} (${track}): ${formatRoll(result.roll)}, cap ${cap}, healed ${result.healed}, worsened ${result.worsened}.`);
281
281
  this.actor.performAction('uses', kit.name);
282
282
  this.scene.addWorldEvent(`${this.actor.name} patched themselves up with ${kit.name}.`);
283
283
  this.scene.updateInventory(this.scene.getPlayer().inventory);
284
284
  this.scene.updateStatus();
285
- return [
285
+ const lines = [
286
286
  `You use the ${kit.name}:`,
287
- ` First aid: ${formatRoll(roll)}`,
288
- ` You recover ${healed} box${healed === 1 ? '' : 'es'}: ${this.actor.conditionSummary()}`,
289
- ` (The ${kit.name} is spent.)`,
290
- ].join('\n');
287
+ ` First aid: ${formatRoll(result.roll)} (threshold ${FIRST_AID_THRESHOLD})`,
288
+ ];
289
+ if (result.worsened > 0) {
290
+ lines.push(` IT GOES WRONG -- ${result.worsened} more box${result.worsened === 1 ? '' : 'es'}: ${summary}`);
291
+ }
292
+ else if (result.healed > 0) {
293
+ lines.push(` You recover ${result.healed} box${result.healed === 1 ? '' : 'es'}: ${summary}`);
294
+ if (result.halvedByArmor)
295
+ lines.push(` (Halved -- you're working through full-body armor.)`);
296
+ if (result.capBound)
297
+ lines.push(` (Capped at ${cap} -- first aid only takes you as far as your training.)`);
298
+ }
299
+ else {
300
+ lines.push(` Nothing closes: ${result.roll.hits} hit${result.roll.hits === 1 ? '' : 's'} against a threshold of ${FIRST_AID_THRESHOLD}. ${summary}`);
301
+ }
302
+ lines.push(hint(` (The ${kit.name} keeps -- but that's your one application for these wounds.)`));
303
+ return lines.join('\n');
291
304
  }
292
305
  /**
293
306
  * Hot food is the slow, cheap, pleasant road to stun recovery -- the
@@ -1 +1 @@
1
- {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/use.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/use.ts"],"names":[],"mappings":"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"}
@@ -217,7 +217,7 @@ export interface ICrewDossierEntry {
217
217
  * crew (Game.draftNextScene). So the head count is always crew + 1.
218
218
  */
219
219
  export declare function partyHeadcount(crew?: ICrewDossierEntry[]): number;
220
- export declare function buildSkeletonPrompt(tier: number, player?: Player, previousError?: string, rumor?: string, crew?: ICrewDossierEntry[], canonBlock?: string): string;
220
+ export declare function buildSkeletonPrompt(tier: number, player?: Player, previousError?: string, rumor?: string, crew?: ICrewDossierEntry[], canonBlock?: string, runType?: RunType): string;
221
221
  export declare function buildRoomsPrompt(skeleton: ISceneSkeleton, previousError?: string): string;
222
222
  export declare function buildNpcsPrompt(skeleton: ISceneSkeleton, previousError?: string): string;
223
223
  export declare function buildDevicesPrompt(skeleton: ISceneSkeleton, previousError?: string): string;
@@ -248,6 +248,39 @@ export declare function buildItemsPrompt(skeleton: ISceneSkeleton, devices: IDev
248
248
  * canBypassUnaided would attract the other two cases back.
249
249
  */
250
250
  export declare function partyCanDispel(player: Player | undefined): boolean;
251
+ /**
252
+ * CAN THIS RUNNER WORK THE GRID AT ALL (ruoedrMTA6kCRNmEN, user ruling:
253
+ * data runs are offered to deck-capable runners only)?
254
+ *
255
+ * A working cyberdeck, or the Resonance -- the two ways into a host.
256
+ * getCyberdeck() and not getAnyCyberdeck() on purpose: a BRICKED deck is
257
+ * a deck you cannot run with, and a job whose every objective sits
258
+ * behind a host would strand the runner who accepted it. Offering work
259
+ * that cannot be done is worse than offering none.
260
+ *
261
+ * THE PLAYER ONLY, DELIBERATELY. A crew decker could in fiction carry
262
+ * this run, but ICrewDossierEntry has a name, an archetype label and a
263
+ * skill map -- no gear. "This NPC owns a deck" is not knowable from it,
264
+ * and reading a `hacking` rating as a deck would invent capability the
265
+ * dossier never claimed. Left out rather than guessed; if the crew
266
+ * dossier ever carries gear, this is the one line to revisit.
267
+ */
268
+ export declare function partyCanDeck(player: Player | undefined): boolean;
269
+ /**
270
+ * WHAT KIND OF JOB IS ON THE TABLE.
271
+ *
272
+ * 'data' is the quiet one: get in, pull the file, get out. It is gated,
273
+ * not weighted, for a reason -- a runner who cannot deck must NEVER see
274
+ * one, because every objective on it lives behind a host. The roll only
275
+ * decides how often a qualified runner gets offered one.
276
+ *
277
+ * `roll` is injected so the decision is testable without owning the
278
+ * global RNG: the gate is what matters and it must hold for every
279
+ * possible roll, which is exactly what a test can then prove.
280
+ */
281
+ export declare const DATA_RUN_SHARE = 0.3;
282
+ export type RunType = 'standard' | 'data';
283
+ export declare function pickRunType(player: Player | undefined, roll?: number): RunType;
251
284
  /** Strips accidental markdown fences and parses; throws with a useful message. */
252
285
  export declare function parseJsonReply<T>(reply: string): T;
253
286
  /**
@@ -199,7 +199,7 @@ The opposition must credibly threaten a team of ${crew.length + 1} runners: scal
199
199
  counts and quality up accordingly (one extra capable defender per crew member is a good
200
200
  baseline), and let the fiction acknowledge a crew, not a loner.`;
201
201
  }
202
- export function buildSkeletonPrompt(tier, player, previousError, rumor, crew, canonBlock) {
202
+ export function buildSkeletonPrompt(tier, player, previousError, rumor, crew, canonBlock, runType = 'standard') {
203
203
  // Tier 1 is the only fresh start (the launch menu's "Generate a new
204
204
  // Run"); every Johnson-commissioned draft is tier 2+ and the runner
205
205
  // arrives fully equipped -- authoring "starting" items there was pure
@@ -221,12 +221,51 @@ export function buildSkeletonPrompt(tier, player, previousError, rumor, crew, ca
221
221
  // need a longer map or more locks, it needs the opposition to answer
222
222
  // for more guns. Scaling the map too would just add walking.
223
223
  const heads = partyHeadcount(crew);
224
- const scope = tier <= 1
225
- ? `3 to 4 rooms, exactly ${heads} NPC${heads === 1 ? '' : 's'} besides the client, and exactly 1 device`
226
- : tier === 2
227
- ? `4 to 6 rooms, ${2 * heads} NPCs besides the client, and 1 to 2 devices`
228
- : `6 to 8 rooms, ${3 * heads} to ${4 * heads} NPCs besides the client, and 2 to 3 devices`;
224
+ // A DATA RUN IS SHORTER BY DESIGN (ruoedrMTA6kCRNmEN). It is one
225
+ // building, one host, one file -- the shape of a job a decker takes
226
+ // between the big ones. Scaling it like a full run would just be a
227
+ // full run with the guards renamed, which is the thing this type
228
+ // exists NOT to be. It still scales with the table, because the
229
+ // action economy argument that drove Scope holds on the grid too.
230
+ const scope = runType === 'data'
231
+ ? (tier <= 1
232
+ ? `2 to 3 rooms, exactly ${heads} NPC${heads === 1 ? '' : 's'} besides the client, and exactly 1 device`
233
+ : `3 to 4 rooms, ${2 * heads} NPCs besides the client, and 1 to 2 devices`)
234
+ : tier <= 1
235
+ ? `3 to 4 rooms, exactly ${heads} NPC${heads === 1 ? '' : 's'} besides the client, and exactly 1 device`
236
+ : tier === 2
237
+ ? `4 to 6 rooms, ${2 * heads} NPCs besides the client, and 1 to 2 devices`
238
+ : `6 to 8 rooms, ${3 * heads} to ${4 * heads} NPCs besides the client, and 2 to 3 devices`;
229
239
  const dossier = buildPlayerDossier(player) + buildTeamBlock(crew);
240
+ // THE DATA RUN (ruoedrMTA6kCRNmEN). Offered only to a runner who can
241
+ // actually reach a host -- see pickRunType, which gates before this is
242
+ // ever built.
243
+ //
244
+ // The chip half already shipped: taking a matrix-plane file writes it
245
+ // to physical media (take.ts), which is what makes "hand it to the
246
+ // fixer" possible at all and why the objective below can be a `give`.
247
+ // The two halves have to agree about WHERE the file is, so this block
248
+ // says host-or-offline-server in the same vocabulary room.ts uses.
249
+ const dataRunBlock = runType !== 'data' ? '' : `
250
+ THIS JOB IS A DATA RUN -- a quiet one. The runner is being paid to STEAL A FILE, not to
251
+ take ground. Build it accordingly:
252
+ - The winCondition item is PAYDATA: a "matrix"-plane item, category Document, sitting
253
+ either INSIDE a hasNode host, or on an OFFLINE SERVER device in a room (a box with no
254
+ Matrix presence, whose files open only to a runner whose BODY is in that room). Pick one
255
+ and commit to it -- the offline server is the harder, more interesting shape when the
256
+ fiction wants a vault you must walk into.
257
+ - THE OPPOSITION IS ICE, not muscle. Every NPC besides the client is "matrix"-plane and
258
+ stationed in the host. No guards patrolling meat corridors, no gunfight in the lobby: a
259
+ data run that ends in a firefight is a smash-and-grab wearing the wrong name. A site can
260
+ still be WATCHED (cameras) -- surveillance is pressure without being a gun.
261
+ - Keep it SHORT and tight. One site, one host, one file.
262
+ - It pays LESS than a full run of the same tier -- roughly half. The runner is trading pay
263
+ for a job that never puts a gun in their face, and the fixer prices it that way. Say so
264
+ in the client's own terms if it comes up at the meet.
265
+ - The delivery still matters: the file comes out of the vault written to a chip, and the
266
+ chip is a physical object the runner carries and hands over. A "give" objective is the
267
+ natural shape.
268
+ `;
230
269
  // The hub's active street rumor becomes the job's backdrop -- gossip
231
270
  // the runner heard at the noodle stand pays off as foreshadowing when
232
271
  // the next job turns out to be tangled in exactly that (see
@@ -244,6 +283,7 @@ Prose comes later in separate passes: here, every "concept" is ONE tight sentenc
244
283
  and everything else is structure. Get the STRUCTURE exactly right -- every name is a
245
284
  cross-reference other passes and the game engine will rely on verbatim.
246
285
  ${rumorBlock}
286
+ ${dataRunBlock}
247
287
  ${canonBlock ? `\n${canonBlock}\n` : ''}
248
288
  ${dossier ? `\n${dossier}\n` : ''}
249
289
  ${JSON_ONLY}
@@ -665,6 +705,44 @@ export function partyCanDispel(player) {
665
705
  // Adepts are awakened but cannot cast, so they cannot unweave a ward.
666
706
  return !!player && player.isAwakened() && !player.adept;
667
707
  }
708
+ /**
709
+ * CAN THIS RUNNER WORK THE GRID AT ALL (ruoedrMTA6kCRNmEN, user ruling:
710
+ * data runs are offered to deck-capable runners only)?
711
+ *
712
+ * A working cyberdeck, or the Resonance -- the two ways into a host.
713
+ * getCyberdeck() and not getAnyCyberdeck() on purpose: a BRICKED deck is
714
+ * a deck you cannot run with, and a job whose every objective sits
715
+ * behind a host would strand the runner who accepted it. Offering work
716
+ * that cannot be done is worse than offering none.
717
+ *
718
+ * THE PLAYER ONLY, DELIBERATELY. A crew decker could in fiction carry
719
+ * this run, but ICrewDossierEntry has a name, an archetype label and a
720
+ * skill map -- no gear. "This NPC owns a deck" is not knowable from it,
721
+ * and reading a `hacking` rating as a deck would invent capability the
722
+ * dossier never claimed. Left out rather than guessed; if the crew
723
+ * dossier ever carries gear, this is the one line to revisit.
724
+ */
725
+ export function partyCanDeck(player) {
726
+ return !!player && (player.isTechnomancer() || !!player.getCyberdeck());
727
+ }
728
+ /**
729
+ * WHAT KIND OF JOB IS ON THE TABLE.
730
+ *
731
+ * 'data' is the quiet one: get in, pull the file, get out. It is gated,
732
+ * not weighted, for a reason -- a runner who cannot deck must NEVER see
733
+ * one, because every objective on it lives behind a host. The roll only
734
+ * decides how often a qualified runner gets offered one.
735
+ *
736
+ * `roll` is injected so the decision is testable without owning the
737
+ * global RNG: the gate is what matters and it must hold for every
738
+ * possible roll, which is exactly what a test can then prove.
739
+ */
740
+ export const DATA_RUN_SHARE = 0.3;
741
+ export function pickRunType(player, roll = Math.random()) {
742
+ if (!partyCanDeck(player))
743
+ return 'standard';
744
+ return roll < DATA_RUN_SHARE ? 'data' : 'standard';
745
+ }
668
746
  /** Strips accidental markdown fences and parses; throws with a useful message. */
669
747
  export function parseJsonReply(reply) {
670
748
  const cleaned = reply.replace(/^```(?:json)?\s*/i, '').replace(/\s*```$/i, '');