@maka/maka-cli 5.10.0 → 5.12.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.
- package/bundle/typescript/package.json +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +3 -1
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js +6 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +28 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +3 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js +99 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +12 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js +14 -8
- package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/deck.d.ts +30 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/deck.js +142 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/deck.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.d.ts +14 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.js +87 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +11 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +29 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js +9 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +9 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +5 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +7 -6
- package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/install.js +4 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/install.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.d.ts +32 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js +94 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jump.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/jump.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/lead.d.ts +39 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js +187 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/palm.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/palm.js +86 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/palm.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js +3 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/perform.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/perform.js +48 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/perform.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js +8 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +8 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +9 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sell.js +3 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/sell.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.d.ts +6 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +80 -65
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/source.d.ts +11 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +176 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/source.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +6 -3
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +71 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.js +424 -29
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +28 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js +83 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +29 -7
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +23 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +78 -17
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +7 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +299 -60
- package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +25 -0
- package/bundle/typescript/src/commands/game/sideQuest/ui.js +73 -3
- package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +32 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +112 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +28 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +128 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +41 -9
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.d.ts +19 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.d.ts +33 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.js +44 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +4 -2
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +35 -4
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/programs.d.ts +39 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/programs.js +63 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/programs.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.d.ts +18 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js +91 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +25 -16
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,8 +14,15 @@ export class SearchCommand extends Command {
|
|
|
14
14
|
// room stays uncased ("take all" stays gated). Barriers (puzzles) are
|
|
15
15
|
// in plain sight and show regardless -- you can't fail to notice the
|
|
16
16
|
// maglock you're staring at.
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
// On the GRID a search is Matrix Search (canon: Computer, Logic) --
|
|
18
|
+
// best-of with perception so pre-computer deckers lose nothing.
|
|
19
|
+
const perception = this.actor.plane === 'matrix'
|
|
20
|
+
? Math.max(this.actor.skillRating('perception'), this.actor.skillRating('computer'))
|
|
21
|
+
: this.actor.skillRating('perception');
|
|
22
|
+
const attribute = this.actor.plane === 'matrix' ? this.actor.logic : this.actor.intuition;
|
|
23
|
+
// A loaded Browse program is purpose-built for Matrix Search: +2.
|
|
24
|
+
const browse = this.actor.plane === 'matrix' && this.actor.activeDeck?.hasProgram('browse') ? 2 : 0;
|
|
25
|
+
const pool = Math.max(1, attribute + (perception > 0 ? perception : -1) + browse + this.actor.augBonus('perception') + this.actor.woundModifier - this.actor.sustainingPenalty);
|
|
19
26
|
const roll = rollPool(pool);
|
|
20
27
|
// Roll anatomy to the Mechanics ticker for the player; an NPC's
|
|
21
28
|
// return string is its AI history, so IT keeps the roll inline
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,OAAO,aAAc,SAAQ,OAAO;IAC9B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,WAAW,GAAG,+BAA+B,CAAC;IAE/D,KAAK,CAAC,OAAO,CAAC,KAAe;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QAExC,oEAAoE;QACpE,qEAAqE;QACrE,oEAAoE;QACpE,sEAAsE;QACtE,qEAAqE;QACrE,6BAA6B;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -123,8 +123,9 @@ export class SellCommand extends Command {
|
|
|
123
123
|
const dots = '.'.repeat(Math.max(2, 28 - item.name.length));
|
|
124
124
|
lines.push(` ${item.name} ${dots} ~${fenceValueOf(item)} nuyen`);
|
|
125
125
|
}
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
const footer = hint(`"sell <item>" for a firm quote. (Worn gear must be unequipped first.)`);
|
|
127
|
+
if (footer)
|
|
128
|
+
lines.push('', footer);
|
|
128
129
|
return lines.join('\n');
|
|
129
130
|
}
|
|
130
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sell.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sell.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sell.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sell.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Command, ICommand } from './command.js';
|
|
2
2
|
/**
|
|
3
|
-
* The character sheet
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* The character sheet, basics-first (player direction: the old sheet
|
|
4
|
+
* doubled as an inline rules reference and read as clutter in the
|
|
5
|
+
* Mechanics column). Numbers always; what each stat DOES rides the
|
|
6
|
+
* hints toggle -- hints on restores the reference, hints off is a
|
|
7
|
+
* clean sheet. State that changes decisions (wounds, debts, locked
|
|
8
|
+
* fatigue, burning edge) stays always-on: that's status, not teaching.
|
|
7
9
|
*/
|
|
8
10
|
export declare class SheetCommand extends Command implements ICommand {
|
|
9
11
|
protected static verb: string;
|
|
@@ -3,87 +3,102 @@ import { SKILL_NAMES } from '../models/player.js';
|
|
|
3
3
|
import { AUGMENTATIONS } from '../augmentations.js';
|
|
4
4
|
import { QUALITIES } from '../qualities.js';
|
|
5
5
|
import { METAMAGICS } from './initiate.js';
|
|
6
|
+
import { hint, hintsEnabled } from '../utilities/hints.js';
|
|
6
7
|
/**
|
|
7
|
-
* The character sheet
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* The character sheet, basics-first (player direction: the old sheet
|
|
9
|
+
* doubled as an inline rules reference and read as clutter in the
|
|
10
|
+
* Mechanics column). Numbers always; what each stat DOES rides the
|
|
11
|
+
* hints toggle -- hints on restores the reference, hints off is a
|
|
12
|
+
* clean sheet. State that changes decisions (wounds, debts, locked
|
|
13
|
+
* fatigue, burning edge) stays always-on: that's status, not teaching.
|
|
11
14
|
*/
|
|
12
15
|
export class SheetCommand extends Command {
|
|
13
16
|
static verb = 'sheet';
|
|
14
|
-
static description = 'Your character sheet: attributes, derived pools, tracks, and edge.';
|
|
17
|
+
static description = 'Your character sheet: attributes, derived pools, tracks, and edge. Hints on ("hints") expands it into the full rules reference.';
|
|
15
18
|
async execute(_args = []) {
|
|
16
19
|
const a = this.actor;
|
|
17
|
-
|
|
20
|
+
// What 'ware and qualities add to a skill's ROLLS, shown split from
|
|
21
|
+
// the trained rating (player direction: "hacking 4 +2") -- chrome in
|
|
22
|
+
// this engine never edits the rating itself, it rides the pools, so
|
|
23
|
+
// the split is where the truth lives. Only skills whose pools
|
|
24
|
+
// actually read a bonus appear here; the rest show the bare rating.
|
|
25
|
+
const skillMod = (s) => {
|
|
26
|
+
switch (s) {
|
|
27
|
+
case 'firearms': return a.augBonus('firearms');
|
|
28
|
+
case 'perception': return a.augBonus('perception');
|
|
29
|
+
case 'sneaking': return a.qualityBonus('sneak');
|
|
30
|
+
case 'hacking': return a.qualityBonus('hacking') + a.augBonus('matrix');
|
|
31
|
+
case 'cybercombat':
|
|
32
|
+
case 'computer':
|
|
33
|
+
case 'electronic-warfare': return a.qualityBonus('matrix') + a.augBonus('matrix');
|
|
34
|
+
case 'piloting':
|
|
35
|
+
case 'gunnery': return a.augBonus('piloting') + a.qualityBonus('piloting');
|
|
36
|
+
case 'athletics': return a.qualityBonus('athletics');
|
|
37
|
+
default: return 0;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// Rated skills, two to a line -- the single-column list was half the
|
|
41
|
+
// sheet's height.
|
|
42
|
+
const rated = SKILL_NAMES.filter(s => a.skillRating(s) > 0)
|
|
43
|
+
.map(s => {
|
|
44
|
+
const mod = skillMod(s);
|
|
45
|
+
return `${s} ${a.skillRating(s)}${mod !== 0 ? ` ${mod > 0 ? '+' : ''}${mod}` : ''}`;
|
|
46
|
+
});
|
|
47
|
+
const skillRows = [];
|
|
48
|
+
for (let i = 0; i < rated.length; i += 2) {
|
|
49
|
+
skillRows.push(` ${(rated[i] ?? '').padEnd(22)}${rated[i + 1] ?? ''}`.trimEnd());
|
|
50
|
+
}
|
|
51
|
+
const magicNote = a.adept ? ' (adept)'
|
|
52
|
+
: a.isAwakened() ? ' (awakened)'
|
|
53
|
+
: a.baseMagic > 0 ? ' (burned out)' : '';
|
|
54
|
+
// One format everywhere (player direction -- the old sheet mixed
|
|
55
|
+
// cased headers, colons, and bare labels): section heads UPPERCASE
|
|
56
|
+
// with no colon, data rows as aligned `Label value` -- no colons.
|
|
57
|
+
const row = (label, value) => ` ${label.padEnd(11)} ${value}`;
|
|
18
58
|
const lines = [
|
|
19
|
-
`=== ${a.name.toUpperCase()}
|
|
59
|
+
`=== ${a.name.toUpperCase()} ===${a.archetypeName ? ` (${a.archetypeName})` : ''}`,
|
|
20
60
|
'',
|
|
21
|
-
'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
attr('Magic', a.magic, (a.adept
|
|
31
|
-
? 'ADEPT -- body-magic: half rides every meat attack/defense; no spells, no projection'
|
|
32
|
-
: a.isAwakened() ? 'AWAKENED -- innate casting (see "spells")' : a.baseMagic > 0 ? 'burned out' : 'mundane')
|
|
33
|
-
+ (a.baseMagic > a.magic ? ` (was ${a.baseMagic} -- essence loss)` : '')),
|
|
34
|
-
...(a.baseResonance > 0 ? [attr('Resonance', a.resonance, 'TECHNOMANCER -- the Matrix without a deck; all Matrix damage is REAL stun'
|
|
35
|
-
+ (a.baseResonance > a.resonance ? ` (was ${a.baseResonance} -- essence loss)` : ''))] : []),
|
|
36
|
-
attr('Edge', a.edge, `luck -- ${a.edgeRemaining}/${a.edge} left this job${a.edgeBoostArmed ? ', a boost is BURNING now' : ''} ("edge" to burn one)`),
|
|
37
|
-
` ${'Essence'.padEnd(10)} ${a.essence.toFixed(1).padStart(3)} -- what chrome hasn't claimed ("install" at a clinic to trade more away)`,
|
|
38
|
-
...(this.game?.hasHub ? [` ${'Lifestyle'.padEnd(10)} ${this.game.lifestyleTier.padStart(3)} -- ${this.game.lifestyle.upkeep}/job upkeep${this.game.rentDebt > 0 ? `, ${this.game.rentDebt} OWED ("pay")` : ''} ("lifestyle" to move)`] : []),
|
|
61
|
+
'ATTRIBUTES',
|
|
62
|
+
` Body ${a.body} Agility ${a.agility} Reaction ${a.reaction}`,
|
|
63
|
+
` Strength ${a.strength} Willpower ${a.willpower} Logic ${a.logic}`,
|
|
64
|
+
` Intuition ${a.intuition} Charisma ${a.charisma}`,
|
|
65
|
+
...(a.magic > 0 || a.baseMagic > 0 ? [` Magic ${a.magic}${magicNote}${a.baseMagic > a.magic ? ` (was ${a.baseMagic})` : ''}${hint(a.adept ? ' -- body-magic: half rides meat attack/defense; no spells' : a.isAwakened() ? ' -- innate casting ("spells")' : '')}`] : []),
|
|
66
|
+
...(a.baseResonance > 0 ? [` Resonance ${a.resonance}${a.baseResonance > a.resonance ? ` (was ${a.baseResonance})` : ''}${hint(' -- the Matrix without a deck; Matrix damage is REAL stun')}`] : []),
|
|
67
|
+
` Edge ${a.edge} (${a.edgeRemaining} left)${a.edgeBoostArmed ? ' -- boost BURNING' : ''}${hint(' ("edge" to burn one; refills at the next job if fed and slept)')}`,
|
|
68
|
+
` Essence ${a.essence.toFixed(1)}${hint(' -- what chrome hasn\'t claimed')}`,
|
|
69
|
+
...(this.game?.hasHub ? [` Lifestyle ${this.game.lifestyleTier} (${this.game.lifestyle.upkeep}/job)${this.game.rentDebt > 0 ? ` -- ${this.game.rentDebt} OWED ("pay")` : ''}`] : []),
|
|
39
70
|
'',
|
|
40
|
-
// The chrome itself, when any is in: name, essence toll, and what it
|
|
41
|
-
// actually does to the dice.
|
|
42
71
|
...(a.augmentations.size > 0 ? [
|
|
43
|
-
`'
|
|
44
|
-
...AUGMENTATIONS.filter(w => a.hasAug(w.key)).map(w => ` ${w.name
|
|
72
|
+
`'WARE`,
|
|
73
|
+
...AUGMENTATIONS.filter(w => a.hasAug(w.key)).map(w => ` ${w.name} -${w.essence.toFixed(1)}${hint(` -- ${w.effect}`)}`),
|
|
45
74
|
'',
|
|
46
75
|
] : []),
|
|
47
|
-
// The traits that make the spread a person (SR5e p.71-85): positive
|
|
48
|
-
// qualities cost creation karma, negative ones refunded it -- the
|
|
49
|
-
// ledger is why different archetypes start with different karma.
|
|
50
76
|
...(a.qualities.size > 0 ? [
|
|
51
|
-
`
|
|
52
|
-
...QUALITIES.filter(q => a.hasQuality(q.key)).map(q => ` ${
|
|
77
|
+
`QUALITIES`,
|
|
78
|
+
...QUALITIES.filter(q => a.hasQuality(q.key)).map(q => ` ${q.kind === 'positive' ? '+' : '-'} ${q.name}${hint(` -- ${q.effect} (${q.page})`)}`),
|
|
53
79
|
'',
|
|
54
80
|
] : []),
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
// blades / unarmed by armament; hacking on the grid).
|
|
59
|
-
`Skills (karma: ${a.karma} -- "advance" to train):`,
|
|
60
|
-
...(SKILL_NAMES.filter(s => a.skillRating(s) > 0).length > 0
|
|
61
|
-
? SKILL_NAMES.filter(s => a.skillRating(s) > 0).map(s => ` ${s.padEnd(12)} ${a.skillRating(s)}`)
|
|
62
|
-
: [' (no rated skills -- rolling on raw attributes)']),
|
|
81
|
+
`SKILLS (karma ${a.karma}${hint(' -- "advance" to train')})`,
|
|
82
|
+
...(skillRows.length > 0 ? skillRows : [' (none rated -- rolling raw attributes)']),
|
|
83
|
+
...(skillRows.some(r => /[+-]\d/.test(r)) && hintsEnabled() ? [` (rating first, then what 'ware and qualities add to its rolls)`] : []),
|
|
63
84
|
'',
|
|
64
|
-
'
|
|
65
|
-
...(a.plane !== 'meat' ? [
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
...
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
...(a.notorietyReasons.length > 0 ? [` Stains: ${a.notorietyReasons.join('; ')}`] : []),
|
|
82
|
-
// Initiation/submersion (p.324-326/p.257-258): grade + the picks.
|
|
83
|
-
...(a.initiationGrade > 0 ? [` ${a.isTechnomancer() ? 'Submersion' : 'Initiation'}: grade ${a.initiationGrade} -- ${METAMAGICS.filter(m => a.hasMetamagic(m.key)).map(m => m.name).join(', ')} (talent ceiling ${6 + a.initiationGrade})`] : []),
|
|
84
|
-
...(a.lockedFatigue > 0 ? [` Fatigue: ${a.lockedFatigue} stun LOCKED -- it will not heal until the need behind it is met`] : []),
|
|
85
|
-
...(a.woundModifier < 0 ? [` Wounds: ${a.woundModifier} dice on everything`] : []),
|
|
86
|
-
...(a.sustainedArmor > 0 ? [` Sustained: armor +${a.sustainedArmor} soak (-2 dice)`] : []),
|
|
85
|
+
'DERIVED',
|
|
86
|
+
...(a.plane !== 'meat' ? [row('Plane', `${a.plane.toUpperCase()}${a.plane === 'matrix' ? ` (${a.simMode}-sim)` : ''} -- body at ${a.bodyRoom?.name ?? '???'}`)] : []),
|
|
87
|
+
row('Attack', `${a.getAttackPool()}d6 (${a.getWeaponProfile().name}, DV ${a.getWeaponProfile().damage})${a.plane === 'meat' && a.getCarriedWeapon() && !a.weaponDrawn ? ' -- holstered' : ''}`),
|
|
88
|
+
row('Defense', `${a.getDefensePool()}d6 Soak ${a.getSoakPool()}d6`),
|
|
89
|
+
row('Initiative', `${a.getInitiativePool()}d6`),
|
|
90
|
+
...(a.isCaster() ? [row('Casting', `${a.getMagicPool()}d6`)] : []),
|
|
91
|
+
row('Physical', a.conditionSummary()),
|
|
92
|
+
row('Stun', a.stunSummary()),
|
|
93
|
+
...(a.getAnyCyberdeck() ? [row('Deck', `${a.getAnyCyberdeck().name} ${a.matrixSummary()}${a.getAnyCyberdeck().isBricked ? ' -- BRICKED' : ''}${hint(' ("deck" for the full panel)')}`)] : []),
|
|
94
|
+
...a.inventory.getAllItems().filter(i => i.isDrone()).map(d => row('Drone', `${d.name} ${d.droneSummary()}${d.isWrecked ? ' -- WRECKED' : a.riggedDrone === d ? ' -- JUMPED IN' : ''}`)),
|
|
95
|
+
row('Needs', `${a.ateThisCycle ? 'fed' : 'HUNGRY'}, ${a.sleptThisCycle ? 'slept' : 'SHORT ON SLEEP'}${a.ateThisCycle && a.sleptThisCycle ? '' : ' -- edge will NOT refill'}`),
|
|
96
|
+
row('Rep', `Cred ${a.streetCred} / Notoriety ${a.notoriety} / Awareness ${a.publicAwareness}${hint(`${a.socialRep > 0 ? ` -- +${a.socialRep} dice haggle/persuade` : ''}${a.notoriety > 0 ? `; threats +${Math.min(3, a.notoriety)}` : ''}${a.publicAwareness > 0 ? `; cons -${Math.min(2, a.publicAwareness)}` : ''}`)}`),
|
|
97
|
+
...(a.notorietyReasons.length > 0 ? [row('Stains', a.notorietyReasons.join('; '))] : []),
|
|
98
|
+
...(a.initiationGrade > 0 ? [row(a.isTechnomancer() ? 'Submersion' : 'Initiation', `grade ${a.initiationGrade} -- ${METAMAGICS.filter(m => a.hasMetamagic(m.key)).map(m => m.name).join(', ')}`)] : []),
|
|
99
|
+
...(a.lockedFatigue > 0 ? [row('Fatigue', `${a.lockedFatigue} stun LOCKED until the need is met`)] : []),
|
|
100
|
+
...(a.woundModifier < 0 ? [row('Wounds', `${a.woundModifier} dice on everything`)] : []),
|
|
101
|
+
...(a.sustainedArmor > 0 ? [row('Sustained', `armor +${a.sustainedArmor} soak (-2 dice)`)] : []),
|
|
87
102
|
];
|
|
88
103
|
return lines.join('\n');
|
|
89
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sheet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command, ICommand } from './command.js';
|
|
2
|
+
export declare class SourceCommand extends Command implements ICommand {
|
|
3
|
+
protected static verb: string;
|
|
4
|
+
protected static description: string;
|
|
5
|
+
execute(args?: string[]): Promise<string>;
|
|
6
|
+
/** Resolution chain (player direction: the CATALOG on maka-cli.com is
|
|
7
|
+
* the source of truth -- utilities/catalog.ts): catalog row first
|
|
8
|
+
* (exact gear-table figures, zero AI variance), AI spec only for
|
|
9
|
+
* genuinely off-book requests, honest refusal past that. */
|
|
10
|
+
private resolveSpec;
|
|
11
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
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 { AI } from '../../../../tools/ai/ai.class.js';
|
|
6
|
+
import { Size, Category, Rating } from '../types/shared/item-enum.js';
|
|
7
|
+
import { findCatalogItem, ROLE_DOMAINS } from '../utilities/catalog.js';
|
|
8
|
+
import { findAug } from '../augmentations.js';
|
|
9
|
+
// Canon-approximate street classics for AI-off sessions (exact book
|
|
10
|
+
// rows aren't load-bearing -- the MECHANIC is the RAW part).
|
|
11
|
+
const FALLBACK_CATALOG = [
|
|
12
|
+
{ match: /shock ?glove/i, spec: { name: 'Shock Gloves', category: 'MeleeWeapon', rating: 'Standard', size: 'Small', shape: 'gloves', color: 'black', texture: 'insulated weave', weight: 0.5, price: 550, availability: 6, description: 'Insulated gloves with capacitor plates across the knuckles -- a crackling non-lethal argument.' } },
|
|
13
|
+
{ match: /medkit|first aid/i, spec: { name: 'Medkit', category: 'Medical', rating: 'Standard', size: 'Small', shape: 'case', color: 'red', texture: 'plastic', weight: 1, price: 500, availability: 4, description: 'A rated street medkit: sealant, stims, and a diagnostic patch.' } },
|
|
14
|
+
{ match: /stim ?patch/i, spec: { name: 'Stim Patch', category: 'StimPatch', rating: 'Standard', size: 'Tiny', shape: 'patch', color: 'yellow', texture: 'adhesive', weight: 0.1, price: 150, availability: 4, description: 'Slap-on chemical courage -- the crash comes later.' } },
|
|
15
|
+
{ match: /armou?r (vest|jacket)|vest/i, spec: { name: 'Armor Vest', category: 'BodyArmor', rating: 'Standard', size: 'Medium', shape: 'vest', color: 'gray', texture: 'ballistic weave', weight: 3, price: 500, availability: 4, description: 'Concealable ballistic weave -- the difference between a bad night and a last one.' } },
|
|
16
|
+
{ match: /lock ?pick|picks/i, spec: { name: 'Lockpick Set', category: 'Electronics', rating: 'Standard', size: 'Tiny', shape: 'roll', color: 'black', texture: 'leather', weight: 0.3, price: 250, availability: 6, description: 'Manual picks and a shim set, wrapped like surgeon\'s tools.' } },
|
|
17
|
+
{ match: /ammo|rounds|magazine/i, spec: { name: 'Ammunition', category: 'Ammunition', rating: 'Standard', size: 'Tiny', shape: 'box', color: 'brass', texture: 'metal', weight: 0.5, price: 100, availability: 3, description: 'A box of clean rounds, serial numbers politely absent.' } },
|
|
18
|
+
];
|
|
19
|
+
// DOMAIN AFFINITY: sourcing IN a contact's own trade rides +2 dice --
|
|
20
|
+
// shock gloves through the arms dealer, foci through the talismonger.
|
|
21
|
+
// The map itself lives in utilities/catalog.ts (the contact's AI is
|
|
22
|
+
// briefed on the same stock -- see npc.ts's swag note).
|
|
23
|
+
const AFFINITY_DICE = 2;
|
|
24
|
+
export class SourceCommand extends Command {
|
|
25
|
+
static verb = 'source';
|
|
26
|
+
static description = 'Send a contact shopping for gear (SR5e swag, p.387): "source shock gloves from Torque". They roll THEIR Availability test -- +2 dice in their own trade -- and a win delivers at your next homecoming, paid up front (+25% cut; Loyalty 5+ waives it).';
|
|
27
|
+
async execute(args = []) {
|
|
28
|
+
if (!this.game?.hasHub) {
|
|
29
|
+
return `Sourcing runs on relationships -- and out here you don't have any. Home turf only.`;
|
|
30
|
+
}
|
|
31
|
+
if (!args || args.length === 0) {
|
|
32
|
+
return `Source what? Try: source <item>[ from <contact>]`;
|
|
33
|
+
}
|
|
34
|
+
// "source shock gloves from mr. johnson" -- split request / contact.
|
|
35
|
+
const raw = args.join(' ');
|
|
36
|
+
const fromMatch = raw.match(/^(.*?)\s+from\s+(.+)$/i);
|
|
37
|
+
const request = (fromMatch ? fromMatch[1] : raw).trim();
|
|
38
|
+
const contactQuery = fromMatch ? fromMatch[2].trim() : undefined;
|
|
39
|
+
if (!request) {
|
|
40
|
+
return `Source what? Try: source <item>[ from <contact>]`;
|
|
41
|
+
}
|
|
42
|
+
// Chrome isn't a parcel. Wired reflexes don't arrive in a duffel bag
|
|
43
|
+
// -- they arrive on an operating table (commands/install.ts). A real
|
|
44
|
+
// catalog row wins a loose aug match ("meta link" is a commlink, not
|
|
45
|
+
// a smartlink).
|
|
46
|
+
const aug = findCatalogItem(request) ? undefined : findAug(request);
|
|
47
|
+
if (aug) {
|
|
48
|
+
return `${aug.name} isn't something the network drops at your door -- it goes in on a table. Find the clinic and "install ${aug.name.toLowerCase()}" (${aug.cost} nuyen, ${aug.essence.toFixed(1)} essence).${hint(` "catalog chrome" lists the full surgery menu.`)}`;
|
|
49
|
+
}
|
|
50
|
+
// The contact must be REACHABLE -- in the room or on the line -- and
|
|
51
|
+
// on the roster (swag is a relationship service, not retail).
|
|
52
|
+
const partner = this.actor.activeCallPartner;
|
|
53
|
+
const roomContacts = this.scene.getActorsInRoom(this.actor.currentLocation)
|
|
54
|
+
.filter(a => a !== this.actor && this.game.contacts.has(a.name));
|
|
55
|
+
let contact = undefined;
|
|
56
|
+
if (contactQuery) {
|
|
57
|
+
const pool = [...roomContacts, ...(partner && this.game.contacts.has(partner.name) ? [partner] : [])];
|
|
58
|
+
const picked = fuzzyPickName(contactQuery, pool.map(a => a.name));
|
|
59
|
+
contact = picked ? pool.find(a => a.name === picked) : undefined;
|
|
60
|
+
if (!contact) {
|
|
61
|
+
return `No contact called "${contactQuery}" is in reach -- they shop when you're face to face or on the line.`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else if (partner && this.game.contacts.has(partner.name)) {
|
|
65
|
+
contact = partner;
|
|
66
|
+
}
|
|
67
|
+
else if (roomContacts.length === 1) {
|
|
68
|
+
contact = roomContacts[0];
|
|
69
|
+
}
|
|
70
|
+
else if (roomContacts.length > 1) {
|
|
71
|
+
return `Ask WHO? In reach: ${roomContacts.map(a => a.name).join(', ')}. ("source ${request} from <name>")`;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return `Nobody in reach to do the shopping -- get a contact on the line or at the counter first.`;
|
|
75
|
+
}
|
|
76
|
+
const entry = this.game.contacts.get(contact.name);
|
|
77
|
+
const spec = await this.resolveSpec(request);
|
|
78
|
+
if (!spec) {
|
|
79
|
+
return `${contact.name} hears you out and shakes their head -- "${request}" is too exotic for these channels tonight.`;
|
|
80
|
+
}
|
|
81
|
+
// The money first: price + the sourcing cut, up front (RAW pays the
|
|
82
|
+
// market; the cut stands in for the bonus-dice money knob, p.418).
|
|
83
|
+
const familyRate = entry.loyalty >= 5;
|
|
84
|
+
const cut = familyRate ? 0 : Math.ceil(spec.price * 0.25);
|
|
85
|
+
const total = spec.price + cut;
|
|
86
|
+
if (this.actor.currency < total) {
|
|
87
|
+
return `${contact.name} quotes ${total} nuyen${cut > 0 ? ` (${spec.price} for the goods, ${cut} for the trouble)` : ' -- family rate'} for the ${spec.name}. You're carrying ${this.actor.currency}. Come back flush.`;
|
|
88
|
+
}
|
|
89
|
+
// THE AVAILABILITY TEST -- theirs, not yours (p.418): Charisma +
|
|
90
|
+
// Negotiation (+ half Connection), opposed by the item's
|
|
91
|
+
// Availability rating.
|
|
92
|
+
const negotiation = contact.skillRating('negotiation');
|
|
93
|
+
const inDomain = (ROLE_DOMAINS[entry.role ?? ''] ?? []).includes(spec.category);
|
|
94
|
+
const pool = Math.max(1, contact.charisma + (negotiation > 0 ? negotiation : -1) + Math.floor(entry.connection / 2) + (inDomain ? AFFINITY_DICE : 0));
|
|
95
|
+
const contactRoll = rollPool(pool);
|
|
96
|
+
const streetRoll = rollPool(Math.max(1, spec.availability));
|
|
97
|
+
const isPlayer = this.actor === this.scene.getPlayer();
|
|
98
|
+
if (isPlayer) {
|
|
99
|
+
this.logger.meta(`Swag -- ${contact.name} (Cha+Negotiation+Conn/2${inDomain ? ` +${AFFINITY_DICE} their trade` : ''}): ${formatRoll(contactRoll)}`);
|
|
100
|
+
this.logger.meta(`Street (Availability ${spec.availability}): ${formatRoll(streetRoll)}`);
|
|
101
|
+
}
|
|
102
|
+
const net = contactRoll.hits - streetRoll.hits;
|
|
103
|
+
if (net < 0) {
|
|
104
|
+
this.actor.performAction('asks', `${contact.name} to source a ${spec.name} -- no luck tonight`);
|
|
105
|
+
return `${contact.name} works the channels and comes up dry -- the street wants ${spec.availability > 8 ? 'more juice than this' : 'a better night'} for a ${spec.name}. No charge. Ask again after the next job.`;
|
|
106
|
+
}
|
|
107
|
+
this.actor.adjustCurrency(-total);
|
|
108
|
+
this.game.pendingProcurements.push({
|
|
109
|
+
contact: contact.name,
|
|
110
|
+
itemConfig: { ...spec, category: spec.category, owner: this.actor.name },
|
|
111
|
+
price: total,
|
|
112
|
+
});
|
|
113
|
+
const loyaltyLine = this.game.touchContact(contact.name, 'trade', total);
|
|
114
|
+
this.actor.performAction('commissions', `${contact.name} to source a ${spec.name}`);
|
|
115
|
+
this.logger.write(`Swag: ${contact.name} sourcing "${spec.name}" (avail ${spec.availability}) for ${total} -- net ${net}.`);
|
|
116
|
+
const speed = net >= 3 ? `Fast hands -- it's practically en route already.`
|
|
117
|
+
: net > 0 ? `Give it a job's worth of time.`
|
|
118
|
+
: `It'll surface -- slow boat, but it surfaces.`;
|
|
119
|
+
return [
|
|
120
|
+
`${contact.name} takes the ${total} nuyen${cut > 0 ? ` (${spec.price} + ${cut} for the trouble)` : ` -- family rate, no cut`} and gets to work on the ${spec.name}.`,
|
|
121
|
+
`${speed} It'll be waiting with your gear at your next homecoming.`,
|
|
122
|
+
loyaltyLine ?? '',
|
|
123
|
+
hint(`(Sourced gear lands automatically when you get home.)`),
|
|
124
|
+
].filter(Boolean).join('\n');
|
|
125
|
+
}
|
|
126
|
+
/** Resolution chain (player direction: the CATALOG on maka-cli.com is
|
|
127
|
+
* the source of truth -- utilities/catalog.ts): catalog row first
|
|
128
|
+
* (exact gear-table figures, zero AI variance), AI spec only for
|
|
129
|
+
* genuinely off-book requests, honest refusal past that. */
|
|
130
|
+
async resolveSpec(request) {
|
|
131
|
+
const listed = findCatalogItem(request);
|
|
132
|
+
if (listed) {
|
|
133
|
+
return {
|
|
134
|
+
name: listed.name,
|
|
135
|
+
category: listed.category,
|
|
136
|
+
rating: listed.rating,
|
|
137
|
+
size: listed.size,
|
|
138
|
+
shape: listed.shape,
|
|
139
|
+
color: listed.color,
|
|
140
|
+
texture: listed.texture,
|
|
141
|
+
weight: listed.weight,
|
|
142
|
+
price: listed.price,
|
|
143
|
+
availability: listed.availability,
|
|
144
|
+
description: listed.description,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (AI.isConfigured()) {
|
|
148
|
+
try {
|
|
149
|
+
const reply = await AI.ask(`You are the gear catalog of a Shadowrun text adventure. The player wants to buy: "${request}".
|
|
150
|
+
Respond with ONLY a JSON object (no prose, no fences):
|
|
151
|
+
{ "name": string (proper item name), "category": one of ${Object.keys(Category).join('|')},
|
|
152
|
+
"rating": one of ${Object.keys(Rating).join('|')}, "size": one of ${Object.keys(Size).join('|')},
|
|
153
|
+
"shape": string, "color": string, "texture": string, "weight": number (kg),
|
|
154
|
+
"price": integer nuyen (street price, 50-25000), "availability": integer 2-14 (higher = harder to find),
|
|
155
|
+
"description": one gritty sentence }
|
|
156
|
+
Stay true to Shadowrun 5e's sense of price and availability. If the request is not a plausible piece of gear, respond with exactly: NO`);
|
|
157
|
+
const text = (reply ?? '').trim();
|
|
158
|
+
if (!/^no$/i.test(text)) {
|
|
159
|
+
const parsed = JSON.parse(text.replace(/^```(json)?|```$/g, '').trim());
|
|
160
|
+
if (parsed && typeof parsed.name === 'string'
|
|
161
|
+
&& parsed.category in Category && parsed.rating in Rating && parsed.size in Size) {
|
|
162
|
+
parsed.price = Math.min(25000, Math.max(50, Math.floor(Number(parsed.price) || 500)));
|
|
163
|
+
parsed.availability = Math.min(14, Math.max(2, Math.floor(Number(parsed.availability) || 6)));
|
|
164
|
+
parsed.weight = Math.max(0.1, Number(parsed.weight) || 1);
|
|
165
|
+
return parsed;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
this.logger.write(`SourceCommand: AI spec failed (${err}) -- falling back to the catalog.`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return FALLBACK_CATALOG.find(c => c.match.test(request))?.spec;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/source.ts"],"names":[],"mappings":"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"}
|
|
@@ -357,7 +357,8 @@ ${skeletonContext(skeleton)}
|
|
|
357
357
|
|
|
358
358
|
For EVERY npc in the skeleton, expand its "concept":
|
|
359
359
|
- "description": private GM notes on personality/motives (never shown verbatim to the player).
|
|
360
|
-
- "dialogue": 2-4 short in-character lines. For "${FIXER_NAME}" (the
|
|
360
|
+
- "dialogue": 2-4 short in-character lines. For "${FIXER_NAME}" (the Johnson -- the client
|
|
361
|
+
commissioning this run, NOT a street fixer) this is the REAL
|
|
361
362
|
briefing -- the objective (the winCondition item), where to start looking, the stakes, and
|
|
362
363
|
the exact payout figure from the skeleton (the engine pays exactly that number). When
|
|
363
364
|
referring to places, use EXACT room names from the skeleton -- never invent locations.
|
|
@@ -365,8 +366,10 @@ For EVERY npc in the skeleton, expand its "concept":
|
|
|
365
366
|
1-8 (soft civilian 1-2, street-level 3-4, hardened enforcer 5-6, elite 7-8):
|
|
366
367
|
{ "body", "agility", "reaction", "combatSkill", "strength"?, "willpower"?, "logic"?,
|
|
367
368
|
"intuition"?, "charisma"?, "magic"?, "resonance"?, "adept"?,
|
|
368
|
-
"skills"?: { "firearms"?, "blades"?, "unarmed"?, "sneaking"?, "perception"?, "
|
|
369
|
-
"
|
|
369
|
+
"skills"?: { "firearms"?, "blades"?, "clubs"?, "unarmed"?, "sneaking"?, "perception"?, "palming"?,
|
|
370
|
+
"hacking"?, "cybercombat"?, "electronic-warfare"?, "hardware"?, "locksmith"?, "computer"?,
|
|
371
|
+
"negotiation"?, "con"?, "intimidation"?, "etiquette"?, "leadership"?, "performance"?, "disguise"?,
|
|
372
|
+
"medicine"?, "assensing"?, "counterspelling"?, "conjuring"?, "gunnery"? } }
|
|
370
373
|
"magic" 3-6 ONLY for a genuinely Awakened concept; "plane":"matrix" ice fights with
|
|
371
374
|
logic 4-7; give combat blocks to anyone the story expects in a firefight. "skills" is
|
|
372
375
|
optional flavor for defined concepts (a sharpshooter's "firearms": 6).
|