@maka/maka-cli 5.10.0 → 5.11.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 (65) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +3 -1
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +10 -2
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +2 -0
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js +8 -2
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js.map +1 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.d.ts +14 -0
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.js +86 -0
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.js.map +1 -0
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js +8 -2
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +6 -4
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +5 -0
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.d.ts +32 -0
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js +94 -0
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js.map +1 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.d.ts +39 -0
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js +187 -0
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js.map +1 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/palm.d.ts +16 -0
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/palm.js +86 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/palm.js.map +1 -0
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/perform.d.ts +13 -0
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/perform.js +48 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/perform.js.map +1 -0
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +8 -3
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +7 -2
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/source.d.ts +9 -0
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +159 -0
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js.map +1 -0
  40. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +6 -3
  41. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +57 -1
  43. package/bundle/typescript/src/commands/game/sideQuest/game.js +326 -13
  44. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +4 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +19 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +48 -9
  49. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +7 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +299 -60
  53. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +22 -0
  54. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +3 -0
  55. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +41 -9
  56. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.d.ts +19 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js +13 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js.map +1 -1
  60. package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.d.ts +33 -0
  61. package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.js +44 -0
  62. package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.js.map +1 -0
  63. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +7 -16
  64. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  65. package/package.json +1 -1
@@ -138,10 +138,12 @@ export class HackCommand extends BypassCommand {
138
138
  const atkQuality = actor.isTechnomancer()
139
139
  ? Math.floor(actor.resonance / 2)
140
140
  : (actor.activeDeck ?? arDeck)?.qualityBonus ?? 0;
141
- // Logic + HACKING + gear: the skill joined the duel with the rest of
142
- // the skill system -- a trained decker now out-fences a smart amateur
143
- // holding the same deck.
144
- const attack = rollPool(Math.max(0, actor.logic + actor.skillRating('hacking') + atkQuality + actor.qualityBonus('hacking') + actor.woundModifier));
141
+ // Logic + the better of HACKING and ELECTRONIC WARFARE + gear (canon:
142
+ // EW is the jamming-and-signals half of PAN warfare; best-of keeps
143
+ // pre-EW deckers whole) -- a trained operator out-fences a smart
144
+ // amateur holding the same deck.
145
+ const panSkill = Math.max(actor.skillRating('hacking'), actor.skillRating('electronic-warfare'));
146
+ const attack = rollPool(Math.max(0, actor.logic + panSkill + atkQuality + actor.qualityBonus('hacking') + actor.woundModifier));
145
147
  const defense = rollPool(target.getPanDefensePool());
146
148
  actor.performAction('runs a PAN intrusion', target.name);
147
149
  this.logger.write(`${actor.name} PAN-hacks ${target.name}: ${attack.hits} vs ${defense.hits} (silent=${target.runningSilent}).`);
@@ -1 +1 @@
1
- {"version":3,"file":"hack.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/hack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hack.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/hack.ts"],"names":[],"mappings":"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"}
@@ -81,6 +81,11 @@ export class HaggleCommand extends Command {
81
81
  // seed's payout, which flows into the run when "travel" installs it.
82
82
  // Otherwise the live scene's win condition is the table.
83
83
  const pending = this.game?.pendingRun;
84
+ // Accepted means LOCKED (commands/job-offer.ts): the handshake ends
85
+ // the negotiating window, not the taxi ride.
86
+ if (pending && this.game?.pendingRunAccepted) {
87
+ return `You shook on it already -- the rate is locked.`;
88
+ }
84
89
  const wc = pending?.winCondition ?? this.scene.getWinCondition();
85
90
  if (!wc || typeof wc.payout !== 'number' || wc.payout <= 0) {
86
91
  return `There's no pay on the table to argue about.`;
@@ -1 +1 @@
1
- {"version":3,"file":"haggle.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/haggle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"haggle.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/haggle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * EXPLICIT job-offer outcomes (player ruling: "accept and it's locked
4
+ * in, comment, end the call. Deny, trash the run, comment, end the
5
+ * call."). Before these verbs the offer call just hung open -- the only
6
+ * paths out were hailing the cab or wandering off mid-conversation.
7
+ *
8
+ * Both verbs are deterministic engine actions with the fixer's AI
9
+ * riding on top for the signoff line: the state changes NOW, his
10
+ * comment arrives over the link, and the line drops the moment his
11
+ * reply lands (the hear() promise resolves after his AI responds --
12
+ * with AI off it resolves immediately and the click is instant).
13
+ */
14
+ declare abstract class JobOfferCommand extends Command implements ICommand {
15
+ /** The offer-call guards every outcome shares. Returns the refusal,
16
+ * or null when the player is live on the line with a job pending. */
17
+ protected offerGate(): string | null;
18
+ /** Signoff-then-click: the fixer hears the note, his one-line comment
19
+ * arrives over the comm dressing, and THEN the line goes dead. */
20
+ protected signoffAndHangUp(note: string, deadLine: string): void;
21
+ }
22
+ export declare class AcceptCommand extends JobOfferCommand {
23
+ protected static verb: string;
24
+ protected static description: string;
25
+ execute(_args?: string[]): Promise<string>;
26
+ }
27
+ export declare class DeclineCommand extends JobOfferCommand {
28
+ protected static verb: string;
29
+ protected static description: string;
30
+ execute(_args?: string[]): Promise<string>;
31
+ }
32
+ export {};
@@ -0,0 +1,94 @@
1
+ import { Command } from './command.js';
2
+ import { hint } from '../utilities/hints.js';
3
+ import { CALL_ICON, CALL_COLOR } from '../utilities/comm-style.js';
4
+ import { FIXER_NAME } from '../factories/scene-seed-generator.js';
5
+ /**
6
+ * EXPLICIT job-offer outcomes (player ruling: "accept and it's locked
7
+ * in, comment, end the call. Deny, trash the run, comment, end the
8
+ * call."). Before these verbs the offer call just hung open -- the only
9
+ * paths out were hailing the cab or wandering off mid-conversation.
10
+ *
11
+ * Both verbs are deterministic engine actions with the fixer's AI
12
+ * riding on top for the signoff line: the state changes NOW, his
13
+ * comment arrives over the link, and the line drops the moment his
14
+ * reply lands (the hear() promise resolves after his AI responds --
15
+ * with AI off it resolves immediately and the click is instant).
16
+ */
17
+ class JobOfferCommand extends Command {
18
+ /** The offer-call guards every outcome shares. Returns the refusal,
19
+ * or null when the player is live on the line with a job pending. */
20
+ offerGate() {
21
+ if (!this.game?.hasHub || !this.scene.isHub) {
22
+ return `There's no job offer on the table out here.`;
23
+ }
24
+ if (!this.game.pendingRun) {
25
+ return `No job's been offered yet.${hint(` ("call ${FIXER_NAME}" to ask for work.)`)}`;
26
+ }
27
+ const partner = this.actor.activeCallPartner;
28
+ if (!partner || partner.name !== FIXER_NAME) {
29
+ return `Deals close voice to voice -- get ${FIXER_NAME} on the line first ("call ${FIXER_NAME}").`;
30
+ }
31
+ return null;
32
+ }
33
+ /** Signoff-then-click: the fixer hears the note, his one-line comment
34
+ * arrives over the comm dressing, and THEN the line goes dead. */
35
+ signoffAndHangUp(note, deadLine) {
36
+ const partner = this.actor.activeCallPartner;
37
+ if (!partner)
38
+ return;
39
+ void Promise.resolve(partner.hear(this.actor, note)).catch(err => {
40
+ this.logger.error(`${partner.name} failed to sign off: ${err}`);
41
+ }).finally(() => {
42
+ // Disconnect only if this call is still the live one.
43
+ if (this.actor.activeCallPartner === partner) {
44
+ this.actor.activeCallPartner = undefined;
45
+ }
46
+ if (partner.activeCallPartner === this.actor) {
47
+ partner.activeCallPartner = undefined;
48
+ }
49
+ this.logger.logWithColor(`${CALL_ICON} The line goes dead. ${deadLine}`, CALL_COLOR);
50
+ this.scene.updateStatus();
51
+ });
52
+ }
53
+ }
54
+ export class AcceptCommand extends JobOfferCommand {
55
+ static verb = 'accept';
56
+ static description = 'Take the job on offer: the rate locks in, Mr. Johnson signs off, and the call ends. "call taxi" when you\'re ready to ride.';
57
+ async execute(_args = []) {
58
+ const refusal = this.offerGate();
59
+ if (refusal)
60
+ return refusal;
61
+ const game = this.game;
62
+ if (game.pendingRunAccepted) {
63
+ return `You already shook on it -- the job is locked.${hint(` ("call taxi" -- the fare's on the client.)`)}`;
64
+ }
65
+ game.pendingRunAccepted = true;
66
+ const pending = game.pendingRun;
67
+ const payout = pending.winCondition?.payout;
68
+ this.actor.performAction('accepts the job', `"${pending.name}" from ${FIXER_NAME}`);
69
+ this.logger.write(`Job accepted: "${pending.name}" at ${payout ?? 'unset'} nuyen -- rate locked.`);
70
+ this.signoffAndHangUp(`[System note: ${this.actor.name} just ACCEPTED the job ("${pending.name}"${payout ? ` at the agreed ${payout} nuyen -- that figure is now LOCKED, no more haggling` : ''}). Say ONE clipped closing line in your own voice -- deal sealed, cab's on the client's account -- and nothing more; the line drops right after.]`, `Deal sealed.`);
71
+ return `You're in. "${pending.name}" is LOCKED${payout ? ` at ${payout} nuyen -- that rate is final` : ''}.${hint(`\n("call taxi" when you're ready -- the fare's on the client.)`)}`;
72
+ }
73
+ }
74
+ export class DeclineCommand extends JobOfferCommand {
75
+ static verb = 'decline';
76
+ static description = 'Pass on the job offer: the run is trashed, Mr. Johnson signs off, and the call ends. Call him again when you want fresh work.';
77
+ async execute(_args = []) {
78
+ const refusal = this.offerGate();
79
+ if (refusal)
80
+ return refusal;
81
+ const game = this.game;
82
+ if (game.pendingRunAccepted) {
83
+ return `You shook on it already -- the only way off this job now is walking it later, and the street remembers walkers.`;
84
+ }
85
+ const pending = game.pendingRun;
86
+ const name = pending.name;
87
+ game.clearPendingRun();
88
+ this.actor.performAction('declines the job', `"${name}" from ${FIXER_NAME}`);
89
+ this.logger.write(`Job declined: "${name}" -- pending run trashed.`);
90
+ this.signoffAndHangUp(`[System note: ${this.actor.name} just DECLINED the job ("${name}"). No hard feelings -- work is work and there will be more. Say ONE clipped closing line in your own voice and nothing more; the line drops right after. The job is gone; a fresh one takes a new call.]`, `The offer's off the table.`);
91
+ return `You pass on "${name}".${hint(`\n(Call ${FIXER_NAME} again when you want fresh work.)`)}`;
92
+ }
93
+ }
94
+ //# sourceMappingURL=job-offer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-offer.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/job-offer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * LEADERSHIP (SR5e p.139, p.141-142): Charisma-linked, "direct and
4
+ * motivate others" -- the party layer's command console. The book's
5
+ * four actions, translated to this engine's exchange model:
6
+ *
7
+ * RALLY -- +1 initiative SCORE per 2 hits, every party member,
8
+ * banked until their next initiative contest (RAW: 1 turn).
9
+ * DIRECT -- your hits ride ONE companion's next attack as teamwork
10
+ * dice (RAW: their next skill/Composure test), capped at
11
+ * your leadership rating (the teamwork cap, p.49).
12
+ * INSPIRE -- RAW primes Surprise Tests; surprise isn't modeled, so
13
+ * the adaptation primes the party's next DEFENSE instead.
14
+ *
15
+ * A banked bonus must be SPENT before that action re-arms -- the lull
16
+ * between exchanges is a leader's one voice, not a stacking machine.
17
+ * COMMAND (the fourth action) recruits -- see RecruitCommand below.
18
+ */
19
+ export declare class LeadCommand extends Command implements ICommand {
20
+ protected static verb: string;
21
+ protected static description: string;
22
+ private leadPool;
23
+ private party;
24
+ execute(args?: string[]): Promise<string>;
25
+ }
26
+ /**
27
+ * COMMAND (SR5e p.141-142): the opposed test -- your Charisma +
28
+ * Leadership vs their Leadership + Willpower -- to be ACCEPTED as
29
+ * leader. Translated to the hub: recruit a contact (Loyalty 3+, meat,
30
+ * face to face) as an ALLY who rides along on your NEXT RUN (RAW's
31
+ * net-hits-in-combat-turns duration scaled to the job clock). RAW's
32
+ * teeth kept: fail the test and that contact never accepts you at this
33
+ * standing -- the refusal clears only when Loyalty deepens.
34
+ */
35
+ export declare class RecruitCommand extends Command implements ICommand {
36
+ protected static verb: string;
37
+ protected static description: string;
38
+ execute(args?: string[]): Promise<string>;
39
+ }
@@ -0,0 +1,187 @@
1
+ import { Command } from './command.js';
2
+ import { hint } from '../utilities/hints.js';
3
+ import { rollPool, formatRoll } from '../utilities/dice.js';
4
+ import { fuzzyPickName } from '../utilities/fuzzy-match.js';
5
+ import { NPC } from '../models/npc.js';
6
+ /**
7
+ * LEADERSHIP (SR5e p.139, p.141-142): Charisma-linked, "direct and
8
+ * motivate others" -- the party layer's command console. The book's
9
+ * four actions, translated to this engine's exchange model:
10
+ *
11
+ * RALLY -- +1 initiative SCORE per 2 hits, every party member,
12
+ * banked until their next initiative contest (RAW: 1 turn).
13
+ * DIRECT -- your hits ride ONE companion's next attack as teamwork
14
+ * dice (RAW: their next skill/Composure test), capped at
15
+ * your leadership rating (the teamwork cap, p.49).
16
+ * INSPIRE -- RAW primes Surprise Tests; surprise isn't modeled, so
17
+ * the adaptation primes the party's next DEFENSE instead.
18
+ *
19
+ * A banked bonus must be SPENT before that action re-arms -- the lull
20
+ * between exchanges is a leader's one voice, not a stacking machine.
21
+ * COMMAND (the fourth action) recruits -- see RecruitCommand below.
22
+ */
23
+ export class LeadCommand extends Command {
24
+ static verb = 'lead';
25
+ static description = 'Leadership (SR5e p.141): "lead rally" (+initiative, whole party), "lead direct <companion>" (teamwork dice on their next attack), "lead inspire" (primes the party\'s next defense). Bare "lead" shows the party.';
26
+ leadPool() {
27
+ const skill = this.actor.skillRating('leadership');
28
+ return Math.max(1, this.actor.charisma + (skill > 0 ? skill : -1) + this.actor.woundModifier - this.actor.sustainingPenalty);
29
+ }
30
+ party() {
31
+ return (this.game?.companions ?? [])
32
+ .map(c => c.npc)
33
+ .filter(n => n.currentLocation === this.actor.currentLocation && !n.isIncapacitated());
34
+ }
35
+ async execute(args = []) {
36
+ const action = (args[0] ?? '').toLowerCase();
37
+ const party = this.party();
38
+ if (!action) {
39
+ if (party.length === 0)
40
+ return `Nobody's following you right now -- a leader needs a party.${hint(` (Summon, deploy, or "command" someone first.)`)}`;
41
+ const roster = party.map(n => {
42
+ const banked = [
43
+ n.rallyInitBonus > 0 ? `rally +${n.rallyInitBonus}` : '',
44
+ n.directedDice > 0 ? `directed +${n.directedDice}` : '',
45
+ n.inspiredGuardDice > 0 ? `inspired +${n.inspiredGuardDice}` : '',
46
+ ].filter(Boolean).join(', ');
47
+ return ` ${n.name}${banked ? ` (${banked})` : ''}`;
48
+ });
49
+ return [`=== THE PARTY ===`, ...roster, '', `Leadership pool: ${this.leadPool()}d6 (Cha + leadership). "lead rally" | "lead direct <name>" | "lead inspire".`].join('\n');
50
+ }
51
+ if (party.length === 0) {
52
+ return `You square your shoulders and address an empty room. A leader needs a party first.`;
53
+ }
54
+ if (this.actor.inExchange || (this.actor === this.scene.getPlayer() && this.scene.isPlayerExchangeActive())) {
55
+ return `Orders wait for the lull -- nobody hears doctrine over gunfire.`;
56
+ }
57
+ const isPlayer = this.actor === this.scene.getPlayer();
58
+ const tick = (line) => { if (isPlayer)
59
+ this.logger.meta(line); };
60
+ if (action === 'rally') {
61
+ if (party.every(n => n.rallyInitBonus > 0)) {
62
+ return `The rally's already ringing in their ears -- spend it before you spend more breath.`;
63
+ }
64
+ const roll = rollPool(this.leadPool());
65
+ const bonus = Math.floor(roll.hits / 2);
66
+ tick(`Leadership -- Rally: ${formatRoll(roll)} (+1 initiative per 2 hits)`);
67
+ if (bonus <= 0) {
68
+ this.actor.performAction('rallies', `the party -- the words land flat`);
69
+ return `You call the shape of the fight -- and fumble it. Nobody moves sharper for hearing that.`;
70
+ }
71
+ for (const n of party)
72
+ n.rallyInitBonus = Math.max(n.rallyInitBonus, bonus);
73
+ this.actor.performAction('rallies', `the party -- +${bonus} initiative`);
74
+ return `You call the shape of the fight and the party SNAPS to it: +${bonus} initiative, banked for the next clash. (${party.map(n => n.name).join(', ')})`;
75
+ }
76
+ if (action === 'direct') {
77
+ const query = args.slice(1).join(' ');
78
+ if (!query)
79
+ return `Direct whom? Your party: ${party.map(n => n.name).join(', ')}.`;
80
+ const picked = fuzzyPickName(query, party.map(n => n.name));
81
+ const target = picked ? party.find(n => n.name === picked) : undefined;
82
+ if (!target)
83
+ return `No "${query}" in your party. Following you: ${party.map(n => n.name).join(', ')}.`;
84
+ if (target.directedDice > 0) {
85
+ return `${target.name} is already carrying your instructions -- let them use them first.`;
86
+ }
87
+ const roll = rollPool(this.leadPool());
88
+ const cap = Math.max(1, this.actor.skillRating('leadership'));
89
+ const dice = Math.min(roll.hits, cap);
90
+ tick(`Leadership -- Direct ${target.name}: ${formatRoll(roll)} (teamwork, cap ${cap})`);
91
+ if (dice <= 0) {
92
+ this.actor.performAction('directs', `${target.name} -- unclear orders`);
93
+ return `You talk ${target.name} through the opening -- badly. They nod anyway.`;
94
+ }
95
+ target.directedDice = dice;
96
+ this.actor.performAction('directs', `${target.name} -- +${dice} dice on their next strike`);
97
+ return `You walk ${target.name} through exactly where to hit: +${dice} dice on their next strike, banked.`;
98
+ }
99
+ if (action === 'inspire') {
100
+ if (party.every(n => n.inspiredGuardDice > 0)) {
101
+ return `They're already watching the angles you called -- spend it first.`;
102
+ }
103
+ const roll = rollPool(this.leadPool());
104
+ tick(`Leadership -- Inspire: ${formatRoll(roll)} (primes the party's next defense)`);
105
+ if (roll.hits <= 0) {
106
+ this.actor.performAction('inspires', `the party -- the speech wobbles`);
107
+ return `You start the speech and lose the thread. The party pretends not to notice.`;
108
+ }
109
+ for (const n of party)
110
+ n.inspiredGuardDice = Math.max(n.inspiredGuardDice, roll.hits);
111
+ this.actor.performAction('inspires', `the party -- +${roll.hits} on their next defense`);
112
+ return `You put steel in them: +${roll.hits} dice on each party member's next defense, banked. Heads up, eyes open.`;
113
+ }
114
+ return `"lead rally", "lead direct <name>", or "lead inspire". ("command <name>" recruits.)`;
115
+ }
116
+ }
117
+ /**
118
+ * COMMAND (SR5e p.141-142): the opposed test -- your Charisma +
119
+ * Leadership vs their Leadership + Willpower -- to be ACCEPTED as
120
+ * leader. Translated to the hub: recruit a contact (Loyalty 3+, meat,
121
+ * face to face) as an ALLY who rides along on your NEXT RUN (RAW's
122
+ * net-hits-in-combat-turns duration scaled to the job clock). RAW's
123
+ * teeth kept: fail the test and that contact never accepts you at this
124
+ * standing -- the refusal clears only when Loyalty deepens.
125
+ */
126
+ export class RecruitCommand extends Command {
127
+ static verb = 'command';
128
+ static description = 'Leadership\'s Command test (SR5e p.141): recruit a contact (Loyalty 3+, in person) to run with you as an ALLY on your next job. Fail, and they won\'t hear it again until your standing grows.';
129
+ async execute(args = []) {
130
+ if (!this.game?.hasHub) {
131
+ return `Recruiting runs on standing -- home turf only.`;
132
+ }
133
+ if (this.game.enlistedAlly) {
134
+ return `${this.game.enlistedAlly.name} is already riding with you on the next one -- this crew runs one guest at a time.`;
135
+ }
136
+ const query = args.join(' ').trim();
137
+ if (!query)
138
+ return `Command whom? Try: command <contact>`;
139
+ const candidates = this.scene.getActorsInRoom(this.actor.currentLocation)
140
+ .filter((a) => a !== this.actor && a instanceof NPC && a.plane === 'meat' && !a.companionKind);
141
+ const picked = fuzzyPickName(query, candidates.map(a => a.name));
142
+ const target = picked ? candidates.find(a => a.name === picked) : undefined;
143
+ if (!target) {
144
+ return `Nobody by that name is standing here -- commanding happens face to face.`;
145
+ }
146
+ const entry = this.game.contacts.get(target.name);
147
+ if (!entry || entry.loyalty < 3) {
148
+ return `${target.name} hears the tone and raises an eyebrow. Authority is EARNED -- run their errands, spend at their counter (Loyalty 3+), then try again.`;
149
+ }
150
+ const refusedAt = this.game.commandRefusals[target.name];
151
+ if (refusedAt !== undefined && entry.loyalty <= refusedAt) {
152
+ return `${target.name} already turned you down at this standing -- RAW is unforgiving about repeat speeches (p.142). Deepen the loyalty first.`;
153
+ }
154
+ // The opposed test, both sides ticked.
155
+ const mySkill = this.actor.skillRating('leadership');
156
+ const myPool = Math.max(1, this.actor.charisma + (mySkill > 0 ? mySkill : -1) + this.actor.woundModifier - this.actor.sustainingPenalty);
157
+ const theirSkill = target.skillRating('leadership');
158
+ const theirPool = Math.max(1, target.willpower + (theirSkill > 0 ? theirSkill : -1));
159
+ const mine = rollPool(myPool);
160
+ const theirs = rollPool(theirPool);
161
+ const isPlayer = this.actor === this.scene.getPlayer();
162
+ if (isPlayer) {
163
+ this.logger.meta(`Command -- you (Cha+Leadership): ${formatRoll(mine)}`);
164
+ this.logger.meta(`${target.name} (Willpower+Leadership): ${formatRoll(theirs)}`);
165
+ }
166
+ const net = mine.hits - theirs.hits;
167
+ if (net <= 0) {
168
+ this.game.commandRefusals[target.name] = entry.loyalty;
169
+ this.actor.performAction('tries to command', `${target.name} -- and is refused`);
170
+ return `${target.name} lets the silence answer first. "Not this time, chummer." That door stays shut until you mean more to them.`;
171
+ }
172
+ this.game.enlistedAlly = {
173
+ name: target.name,
174
+ description: target.description ?? `${target.name}, running with you on this one.`,
175
+ combat: {
176
+ body: target.body, agility: target.agility, reaction: target.reaction,
177
+ combatSkill: target.combatSkill, strength: target.strength, willpower: target.willpower,
178
+ logic: target.logic, intuition: target.intuition, charisma: target.charisma,
179
+ skills: { ...target.skills },
180
+ },
181
+ };
182
+ this.actor.performAction('commands', `${target.name} -- who accepts, and is IN for the next run`);
183
+ void Promise.resolve(target.hear(this.actor, `[System note: ${this.actor.name} just talked you into riding along on their NEXT JOB as crew -- you accepted (their Leadership won you over, ${net} net). Say ONE short line in your own voice about being in.]`)).catch(() => { });
184
+ return `${target.name} looks you over once, and nods. IN -- they'll meet you at the jobsite when the next run rolls.${hint(` (They ride the next "call taxi"; the crew disbands at homecoming.)`)}`;
185
+ }
186
+ }
187
+ //# sourceMappingURL=lead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lead.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/lead.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * PALMING (SR5e canon, Agility): sleight of hand -- lifting something
4
+ * without the room noticing. The honest counterpart to "take": a take
5
+ * broadcasts (owner-stamped grabs wake owners, prize grabs wake
6
+ * EVERYONE -- see NPC.see), a palm is an opposed roll against the
7
+ * sharpest eyes present. Win: the item simply leaves the world's
8
+ * attention -- no performAction, no reactions, the theft machinery
9
+ * never fires. Lose: you took it AND they watched you do it, which is
10
+ * strictly worse than taking it openly.
11
+ */
12
+ export declare class PalmCommand extends Command implements ICommand {
13
+ protected static verb: string;
14
+ protected static description: string;
15
+ execute(args?: string[]): Promise<string>;
16
+ }
@@ -0,0 +1,86 @@
1
+ import { Command } from './command.js';
2
+ import { hint } from '../utilities/hints.js';
3
+ import { rollPool, formatRoll } from '../utilities/dice.js';
4
+ import { canReach, ensureAtSpot } from '../utilities/spots.js';
5
+ import { NPC } from '../models/npc.js';
6
+ /**
7
+ * PALMING (SR5e canon, Agility): sleight of hand -- lifting something
8
+ * without the room noticing. The honest counterpart to "take": a take
9
+ * broadcasts (owner-stamped grabs wake owners, prize grabs wake
10
+ * EVERYONE -- see NPC.see), a palm is an opposed roll against the
11
+ * sharpest eyes present. Win: the item simply leaves the world's
12
+ * attention -- no performAction, no reactions, the theft machinery
13
+ * never fires. Lose: you took it AND they watched you do it, which is
14
+ * strictly worse than taking it openly.
15
+ */
16
+ export class PalmCommand extends Command {
17
+ static verb = 'palm';
18
+ static description = 'Sleight of hand (Palming + Agility): lift an item without being seen -- opposed by the sharpest eyes in the room. Winning leaves no witnesses; losing means they watched your hand the whole way.';
19
+ async execute(args = []) {
20
+ const actor = this.actor;
21
+ if (!args || args.length === 0)
22
+ return `Palm what? Try: palm <item>`;
23
+ if (actor.plane !== 'meat')
24
+ return `Sleight of hand needs a hand.`;
25
+ const room = actor.currentLocation;
26
+ const itemName = args.join(' ');
27
+ const item = room.inventory.getItem(itemName);
28
+ if (!item)
29
+ return `You don't see "${itemName}" here to lift.`;
30
+ if (!item.transferable)
31
+ return `The ${item.name} isn't going anywhere in anyone's sleeve.`;
32
+ // "At" spots: light fingers still need to be standing at the goods.
33
+ if (!canReach(actor, item.atSpot)) {
34
+ const reach = ensureAtSpot(actor, item.atSpot);
35
+ if (reach.refusal)
36
+ return reach.refusal;
37
+ }
38
+ const observers = this.scene.getActorsInRoom(room)
39
+ .filter((a) => a !== actor && a instanceof NPC && a.canPerceive(actor) && !a.isIncapacitated() && !a.allyOf);
40
+ const skill = actor.skillRating('palming');
41
+ const pool = Math.max(1, actor.agility + (skill > 0 ? skill : -1) + actor.woundModifier - actor.sustainingPenalty);
42
+ const myRoll = rollPool(pool);
43
+ // The sharpest eyes in the room are the opposition.
44
+ let sharpest;
45
+ let bestPool = 0;
46
+ for (const o of observers) {
47
+ const p = o.intuition + Math.max(o.skillRating('perception'), 0);
48
+ if (p > bestPool) {
49
+ bestPool = p;
50
+ sharpest = o;
51
+ }
52
+ }
53
+ const theirRoll = sharpest ? rollPool(Math.max(1, bestPool)) : { hits: 0 };
54
+ const isPlayer = actor === this.scene.getPlayer();
55
+ if (isPlayer) {
56
+ this.logger.meta(`Palming: ${formatRoll(myRoll)}`);
57
+ if (sharpest)
58
+ this.logger.meta(` ${sharpest.name}'s eyes: ${formatRoll(theirRoll)}`);
59
+ }
60
+ // The lift happens either way -- what's contested is who SAW it.
61
+ const moved = room.inventory.removeItem(item.name);
62
+ if (!moved)
63
+ return `The ${item.name} slips your grip -- somebody got there first.`;
64
+ try {
65
+ actor.addInventory(item); // throws over the carry-weight cap
66
+ }
67
+ catch {
68
+ room.inventory.addItem(item);
69
+ return `The ${item.name} is heavier than a sleeve can hide -- and heavier than your pack can take.`;
70
+ }
71
+ this.scene.updateInventory(this.scene.getPlayer().inventory);
72
+ if (!sharpest || myRoll.hits > theirRoll.hits) {
73
+ // CLEAN: no performAction -- the see()/theft machinery never hears
74
+ // about it. The log keeps the truth for the record.
75
+ this.logger.write(`PalmCommand: ${actor.name} palmed ${item.name} unseen (vs ${sharpest?.name ?? 'an empty room'}).`);
76
+ const winNote = this.scene.checkWinCondition ? this.scene.checkWinCondition(item.name, actor.name) : null;
77
+ return `Your hand barely moves. The ${item.name} is in your pocket and the room never blinked.${winNote ? `` : ''}${hint(` (Palmed goods raise no alarms -- unlike "take".)`)}`;
78
+ }
79
+ // BLOWN: the take goes loud, with a witness who watched the hand.
80
+ actor.performAction('takes', `${item.name}${item.owner && item.owner !== actor.name ? ` (${item.owner}'s)` : ''} -- and ${sharpest.name} watched the whole clumsy lift`);
81
+ void Promise.resolve(sharpest.hear(actor, `[System note: you just WATCHED ${actor.name} try to palm the ${item.name} and botch it -- you saw the whole lift. React to a caught thief, in your own voice.]`)).catch(() => { });
82
+ this.scene.checkWinCondition?.(item.name, actor.name);
83
+ return `The lift goes wide -- ${sharpest.name}'s eyes are already on your hand. You HAVE the ${item.name}, and a witness.`;
84
+ }
85
+ }
86
+ //# sourceMappingURL=palm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palm.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/palm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * PERFORMANCE (SR5e canon, Charisma): busking -- the small, honest end
4
+ * of the shadow economy. Once per job cycle (the flag resets at
5
+ * homecoming, like a contact's legwork), at a venue with an audience:
6
+ * Charisma + Performance, 25 nuyen a hit in tips. Nobody retires on it,
7
+ * but nobody shoots at you for it either.
8
+ */
9
+ export declare class PerformCommand extends Command implements ICommand {
10
+ protected static verb: string;
11
+ protected static description: string;
12
+ execute(_args?: string[]): Promise<string>;
13
+ }