@maka/maka-cli 5.62.0 → 5.63.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/commands/ar.d.ts +7 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js +7 -9
- package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/breach.d.ts +7 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js +7 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +56 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +9 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +30 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +5 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/overwatch.js +3 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/overwatch.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.d.ts +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js +10 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js +11 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/tap.d.ts +49 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js +181 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +6 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +7 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.js +22 -16
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +22 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +105 -4
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +17 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +23 -4
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +54 -8
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.d.ts +36 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js +81 -8
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +7 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +34 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +19 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +28 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/surveillance.d.ts +33 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/surveillance.js +61 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/surveillance.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +12 -11
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/maka.js +26 -0
- package/bundle/typescript/src/maka.js.map +1 -1
- package/bundle/typescript/src/tools/sdk-loader/relocate.js +7 -0
- package/bundle/typescript/src/tools/sdk-loader/relocate.js.map +1 -1
- package/bundle/typescript/src/tools/self-spawn/self-spawn.d.ts +10 -0
- package/bundle/typescript/src/tools/self-spawn/self-spawn.js +68 -0
- package/bundle/typescript/src/tools/self-spawn/self-spawn.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mark.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/mark.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mark.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/mark.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,9 @@ export class OverwatchCommand extends Command {
|
|
|
29
29
|
const sleazeEdge = actor.isTechnomancer()
|
|
30
30
|
? Math.floor(actor.resonance / 2)
|
|
31
31
|
: (actor.activeDeck ?? deck)?.matrixEdge('sleaze') ?? 0;
|
|
32
|
-
|
|
32
|
+
// The check is itself a Sleaze action, so silence taxes it too
|
|
33
|
+
// (canon p.235-236, Player.matrixActionPenalty).
|
|
34
|
+
const mine = rollPool(Math.max(1, actor.logic + (skill > 0 ? skill : -1) + sleazeEdge + actor.matrixActionPenalty + actor.woundModifier - actor.sustainingPenalty));
|
|
33
35
|
const god = rollPool(6);
|
|
34
36
|
if (this.scene.isHumanControlled(actor)) {
|
|
35
37
|
this.logger.meta(`Check Overwatch (EW, sleaze): ${formatRoll(mine)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overwatch.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/overwatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAiB,SAAQ,OAAO;IACjC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,MAAM,CAAC,WAAW,GAAG,uQAAuQ,CAAC;IAEvS,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,6DAA6D,CAAC;QACvE,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACjE,OAAO,yFAAyF,CAAC;QACnG,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,gHAAgH,CAAC;QAC1H,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,EAAE;YACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"overwatch.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/overwatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAiB,SAAQ,OAAO;IACjC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,MAAM,CAAC,WAAW,GAAG,uQAAuQ,CAAC;IAEvS,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,6DAA6D,CAAC;QACvE,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACjE,OAAO,yFAAyF,CAAC;QACnG,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,gHAAgH,CAAC;QAC1H,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,EAAE;YACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1D,+DAA+D;QAC/D,iDAAiD;QACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACpK,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,oEAAoE;QACpE,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;QAExF,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,+DAA+D,QAAQ,OAAO,cAAc,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpM,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,iIAAiI,CAAC,CAAC;QAC9I,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC,CAAC,CAAC;QAC7G,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC"}
|
|
@@ -5,6 +5,14 @@ import { Command, ICommand } from './command.js';
|
|
|
5
5
|
* you -- including the fixer, so a job callback will not find you until
|
|
6
6
|
* you go loud again. Toggling silent drops any call you're on. The HUD's
|
|
7
7
|
* Link line tracks the state (see game.ts updateStatus).
|
|
8
|
+
*
|
|
9
|
+
* What silence COSTS and what it does NOT (canon p.235-236, checked
|
|
10
|
+
* 2026-08-27): it hides your icon -- finding you takes a Matrix
|
|
11
|
+
* Perception test first, then an Opposed test -- and it charges -2 dice
|
|
12
|
+
* on every Matrix action you take (Player.matrixActionPenalty), on top
|
|
13
|
+
* of the calls and the commlink initiative bonus this engine already
|
|
14
|
+
* takes. It does NOT blind you: your own AR overlay keeps painting,
|
|
15
|
+
* because AR is what you receive (p.229). See utilities/ar.ts arSightUp.
|
|
8
16
|
*/
|
|
9
17
|
export declare class SilentCommand extends Command implements ICommand {
|
|
10
18
|
protected static verb: string;
|
|
@@ -8,10 +8,18 @@ import { CALL_ICON, CALL_COLOR } from '../utilities/comm-style.js';
|
|
|
8
8
|
* you -- including the fixer, so a job callback will not find you until
|
|
9
9
|
* you go loud again. Toggling silent drops any call you're on. The HUD's
|
|
10
10
|
* Link line tracks the state (see game.ts updateStatus).
|
|
11
|
+
*
|
|
12
|
+
* What silence COSTS and what it does NOT (canon p.235-236, checked
|
|
13
|
+
* 2026-08-27): it hides your icon -- finding you takes a Matrix
|
|
14
|
+
* Perception test first, then an Opposed test -- and it charges -2 dice
|
|
15
|
+
* on every Matrix action you take (Player.matrixActionPenalty), on top
|
|
16
|
+
* of the calls and the commlink initiative bonus this engine already
|
|
17
|
+
* takes. It does NOT blind you: your own AR overlay keeps painting,
|
|
18
|
+
* because AR is what you receive (p.229). See utilities/ar.ts arSightUp.
|
|
11
19
|
*/
|
|
12
20
|
export class SilentCommand extends Command {
|
|
13
21
|
static verb = 'silent';
|
|
14
|
-
static description = 'Toggle your commlink broadcast: running silent
|
|
22
|
+
static description = 'Toggle your commlink broadcast: running silent hides your icon -- no calls in OR out (nobody can reach you, not even the fixer), no commlink initiative bonus, and -2 dice on your own Matrix actions, until you go loud again. Your AR overlay keeps painting.';
|
|
15
23
|
async execute(_args = []) {
|
|
16
24
|
const actor = this.actor;
|
|
17
25
|
// Your link's broadcast IS the Matrix connection -- killing it while
|
|
@@ -54,7 +62,7 @@ export class SilentCommand extends Command {
|
|
|
54
62
|
// NOT {gray-fg} (standing ruling): blessed gray is ANSI
|
|
55
63
|
// bright-black and vanishes on stock dark palettes. White is the
|
|
56
64
|
// established neutral for mechanics text.
|
|
57
|
-
return `{white-fg}${CALL_ICON} You kill your link's broadcast.${hangupNote} Running silent -- no calls in or out, and your
|
|
65
|
+
return `{white-fg}${CALL_ICON} You kill your link's broadcast.${hangupNote} Running silent -- no calls in or out, no commlink initiative bonus, and -2 dice on everything you do on the grid while you're covering your own tracks. Your overlay keeps painting: silence is what you EMIT, not what you can see. Until you go loud${hint(` ("silent" again)`)}.{/white-fg}`;
|
|
58
66
|
}
|
|
59
67
|
}
|
|
60
68
|
//# sourceMappingURL=silent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"silent.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/silent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE
|
|
1
|
+
{"version":3,"file":"silent.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/silent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,aAAc,SAAQ,OAAO;IAC9B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,WAAW,GAAG,iQAAiQ,CAAC;IAEjS,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,qEAAqE;QACrE,iEAAiE;QACjE,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,8FAA8F,CAAC;QACxG,CAAC;QAED,MAAM,UAAU,GACd,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI;YACtC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,kCAAkC,CAAC;QAC5C,CAAC;QAED,oBAAoB;QACpB,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;YAC5B,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,wBAAwB,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC1B,6DAA6D;YAC7D,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM;gBAAE,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxD,OAAO,IAAI,UAAU,OAAO,SAAS,6EAA6E,UAAU,MAAM,CAAC;QACrI,CAAC;QAED,wDAAwD;QACxD,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACpC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,0BAA0B,OAAO,CAAC,IAAI,mBAAmB,CAAC,CAAC;YAC1F,UAAU,GAAG,kBAAkB,OAAO,CAAC,IAAI,kBAAkB,CAAC;QAChE,CAAC;QAED,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,oDAAoD;QACpD,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM;YAAE,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACxD,wDAAwD;QACxD,iEAAiE;QACjE,0CAA0C;QAC1C,OAAO,aAAa,SAAS,mCAAmC,UAAU,0PAA0P,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;IAC9W,CAAC"}
|
|
@@ -56,7 +56,17 @@ export class SolveCommand extends Command {
|
|
|
56
56
|
this.logger.write(`${this.actor.name} attempted to solve ${targets[0].puzzle.name} with result false`);
|
|
57
57
|
this.logger.write(`SolveCommand: ${firstResult.message}`);
|
|
58
58
|
this.actor.performAction('solve', firstResult.message);
|
|
59
|
-
|
|
59
|
+
// NAME THE OTHER ROUTE (blocker 2026-08-27): a wrong answer was the
|
|
60
|
+
// last dead-end refusal left on a barrier -- the same silence go.ts
|
|
61
|
+
// and unlock.ts had. A player who was handed a bad code has nowhere
|
|
62
|
+
// to go from "that's not it"; the risky route is exactly what they
|
|
63
|
+
// need to hear about. Only offered while it's actually available:
|
|
64
|
+
// a burned route is not a suggestion, it's a closed door.
|
|
65
|
+
const alt = targets.find(t => !t.puzzle.bypassBurned && t.puzzle.getBypassVerb());
|
|
66
|
+
const altNote = alt
|
|
67
|
+
? `\n(There's another way at this one -- "${alt.puzzle.getBypassVerb()}" it. Riskier, and it gets exactly one try.)`
|
|
68
|
+
: '';
|
|
69
|
+
return firstResult.message + altNote;
|
|
60
70
|
}
|
|
61
71
|
}
|
|
62
72
|
//# sourceMappingURL=solve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solve.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/solve.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"solve.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/solve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Command, ICommand } from './command.js';
|
|
2
|
+
/**
|
|
3
|
+
* TAP -- THE DIRECT CONNECTION (backlog items 9 and 10, Niko, session
|
|
4
|
+
* 2026-08-27T02-07-12-404Z: "check the rules on this -- shouldn't I be
|
|
5
|
+
* able to get at the camera?" and "I should be able to get at the host
|
|
6
|
+
* through the camera"). Both are the same mechanic seen from each end,
|
|
7
|
+
* and canon says yes to both. RAG-checked against the books 2026-08-27:
|
|
8
|
+
*
|
|
9
|
+
* - A camera on a facility's network is a DEVICE SLAVED to that host
|
|
10
|
+
* (a WAN). Slaved devices normally defend with the BETTER of their
|
|
11
|
+
* own rating and their master's -- which is why hosts are hard
|
|
12
|
+
* (SR5 core p.233, "PANs and WANs").
|
|
13
|
+
* - EXCEPT against a direct connection. "If a slaved device is under
|
|
14
|
+
* attack via a direct connection, it cannot use its master's ratings
|
|
15
|
+
* to defend itself" -- it falls back on its own weak ones (p.233,
|
|
16
|
+
* restated in the tactics reference p.354-355). That is the whole
|
|
17
|
+
* trick: you are not out-fencing the host, you are refusing to fight
|
|
18
|
+
* it.
|
|
19
|
+
* - A direct connection is a CABLE. You plug into the device's
|
|
20
|
+
* universal data connector; every cyberdeck and datajack ships with
|
|
21
|
+
* a meter of retractable microfilament, or buy cable at ~5Y/m (p.232
|
|
22
|
+
* "Direct Connections"). So the price is physical: your body, in the
|
|
23
|
+
* room, in reach of the lens. See directConnectionBlocker.
|
|
24
|
+
* - And the payoff Niko asked for: "if you get a mark on a slave you
|
|
25
|
+
* also get a mark on the master" (p.233). One mark on the camera IS
|
|
26
|
+
* one mark on the host. Data Trails p.87-88 ("A Lesson in Host
|
|
27
|
+
* Invasion") walks exactly this play: direct-connect a slaved
|
|
28
|
+
* terminal, Hack on the Fly for a mark, and that mark is what Enter
|
|
29
|
+
* Host spends.
|
|
30
|
+
*
|
|
31
|
+
* WHAT THIS IS NOT: a skeleton key. It buys ONE mark, not a cracked
|
|
32
|
+
* host. The marks still have to add up (hack.ts: each one lowers the
|
|
33
|
+
* crack threshold, and at MAX_MARKS the host opens like you belong),
|
|
34
|
+
* GOD still bills the intrusion (p.231-232), and a blown sleaze still
|
|
35
|
+
* puts the walls up. What you are buying with the cable is a fight
|
|
36
|
+
* against a camera's ratings instead of a host's -- and the cost is
|
|
37
|
+
* that you had to walk in and touch it.
|
|
38
|
+
*
|
|
39
|
+
* The one place it beats the wireless road outright is an AIR-GAPPED
|
|
40
|
+
* host: it has no door onto the grid at all (planes.canReachHost), but
|
|
41
|
+
* its cameras are wired to it, and a cable is a hard line. Physical
|
|
42
|
+
* infiltration is supposed to be the answer to an air gap, and now it
|
|
43
|
+
* is one from the camera as well as from the terminal.
|
|
44
|
+
*/
|
|
45
|
+
export declare class TapCommand extends Command implements ICommand {
|
|
46
|
+
protected static verb: string;
|
|
47
|
+
protected static description: string;
|
|
48
|
+
execute(args?: string[]): Promise<string>;
|
|
49
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { Command } from './command.js';
|
|
2
|
+
import { rollPool, formatRoll } from '../utilities/dice.js';
|
|
3
|
+
import { accrueOverwatch } from '../utilities/overwatch.js';
|
|
4
|
+
import { MAX_MARKS } from '../utilities/marks.js';
|
|
5
|
+
import { isWatched, cameraMasterHost, directConnectionBlocker } from '../utilities/surveillance.js';
|
|
6
|
+
import { hint } from '../utilities/hints.js';
|
|
7
|
+
/**
|
|
8
|
+
* TAP -- THE DIRECT CONNECTION (backlog items 9 and 10, Niko, session
|
|
9
|
+
* 2026-08-27T02-07-12-404Z: "check the rules on this -- shouldn't I be
|
|
10
|
+
* able to get at the camera?" and "I should be able to get at the host
|
|
11
|
+
* through the camera"). Both are the same mechanic seen from each end,
|
|
12
|
+
* and canon says yes to both. RAG-checked against the books 2026-08-27:
|
|
13
|
+
*
|
|
14
|
+
* - A camera on a facility's network is a DEVICE SLAVED to that host
|
|
15
|
+
* (a WAN). Slaved devices normally defend with the BETTER of their
|
|
16
|
+
* own rating and their master's -- which is why hosts are hard
|
|
17
|
+
* (SR5 core p.233, "PANs and WANs").
|
|
18
|
+
* - EXCEPT against a direct connection. "If a slaved device is under
|
|
19
|
+
* attack via a direct connection, it cannot use its master's ratings
|
|
20
|
+
* to defend itself" -- it falls back on its own weak ones (p.233,
|
|
21
|
+
* restated in the tactics reference p.354-355). That is the whole
|
|
22
|
+
* trick: you are not out-fencing the host, you are refusing to fight
|
|
23
|
+
* it.
|
|
24
|
+
* - A direct connection is a CABLE. You plug into the device's
|
|
25
|
+
* universal data connector; every cyberdeck and datajack ships with
|
|
26
|
+
* a meter of retractable microfilament, or buy cable at ~5Y/m (p.232
|
|
27
|
+
* "Direct Connections"). So the price is physical: your body, in the
|
|
28
|
+
* room, in reach of the lens. See directConnectionBlocker.
|
|
29
|
+
* - And the payoff Niko asked for: "if you get a mark on a slave you
|
|
30
|
+
* also get a mark on the master" (p.233). One mark on the camera IS
|
|
31
|
+
* one mark on the host. Data Trails p.87-88 ("A Lesson in Host
|
|
32
|
+
* Invasion") walks exactly this play: direct-connect a slaved
|
|
33
|
+
* terminal, Hack on the Fly for a mark, and that mark is what Enter
|
|
34
|
+
* Host spends.
|
|
35
|
+
*
|
|
36
|
+
* WHAT THIS IS NOT: a skeleton key. It buys ONE mark, not a cracked
|
|
37
|
+
* host. The marks still have to add up (hack.ts: each one lowers the
|
|
38
|
+
* crack threshold, and at MAX_MARKS the host opens like you belong),
|
|
39
|
+
* GOD still bills the intrusion (p.231-232), and a blown sleaze still
|
|
40
|
+
* puts the walls up. What you are buying with the cable is a fight
|
|
41
|
+
* against a camera's ratings instead of a host's -- and the cost is
|
|
42
|
+
* that you had to walk in and touch it.
|
|
43
|
+
*
|
|
44
|
+
* The one place it beats the wireless road outright is an AIR-GAPPED
|
|
45
|
+
* host: it has no door onto the grid at all (planes.canReachHost), but
|
|
46
|
+
* its cameras are wired to it, and a cable is a hard line. Physical
|
|
47
|
+
* infiltration is supposed to be the answer to an air gap, and now it
|
|
48
|
+
* is one from the camera as well as from the terminal.
|
|
49
|
+
*/
|
|
50
|
+
export class TapCommand extends Command {
|
|
51
|
+
static verb = 'tap';
|
|
52
|
+
static description = 'Cable into a camera you are standing next to -- a DIRECT CONNECTION (p.232). A slaved device can\'t hide behind its host\'s ratings against a cable, so the camera fights you with its own; and a mark on a slaved device is a mark on the host it answers to (p.233), which is your way in. Needs your BODY in the room and a deck in hand. "tap" is sleaze (fail = noticed); "tap loud" is brute force (fail = unnoticed, the firewall bites).';
|
|
53
|
+
async execute(args = []) {
|
|
54
|
+
const actor = this.actor;
|
|
55
|
+
const room = actor.currentLocation;
|
|
56
|
+
const rooms = this.rooms ?? {};
|
|
57
|
+
// Same mode vocabulary as hack.ts and mark.ts -- one fork, learned once.
|
|
58
|
+
const words = (args ?? []).map(w => w.toLowerCase());
|
|
59
|
+
const mode = words.some(w => /^(loud|force|brute|attack)$/.test(w)) ? 'attack' : 'sleaze';
|
|
60
|
+
if (!isWatched(room)) {
|
|
61
|
+
return `No cameras in here to cable into.${hint(` (Your overlay tags them "◎ Camera cluster" when there are.)`)}`;
|
|
62
|
+
}
|
|
63
|
+
// The refusals TEACH (item 9 was a player asking whether the rules
|
|
64
|
+
// allowed this at all) -- each one names what a direct connection
|
|
65
|
+
// actually requires instead of just saying no.
|
|
66
|
+
const blocked = directConnectionBlocker(actor, room);
|
|
67
|
+
if (blocked)
|
|
68
|
+
return blocked;
|
|
69
|
+
const host = cameraMasterHost(rooms, room);
|
|
70
|
+
if (!host) {
|
|
71
|
+
return `You get the housing open and find... a wire to a box on the wall. These are dumb recorders -- no host on this site for them to answer to, nothing on the other end of your cable but tape. ${hint(`Whatever they saw, they saw locally.`)}`;
|
|
72
|
+
}
|
|
73
|
+
if (host.hostCracked) {
|
|
74
|
+
return `You could -- but the ${host.name} host is already cracked wide open, and these lenses answer to you through it. Save the cable.${hint(` ("snoop ${room.name}" rides the feeds.)`)}`;
|
|
75
|
+
}
|
|
76
|
+
const held = host.hostMarksBy.get(actor.name) ?? 0;
|
|
77
|
+
if (held >= MAX_MARKS) {
|
|
78
|
+
return `You already hold ${MAX_MARKS} marks on the ${host.name} host -- it thinks you belong. Another key would not fit on the ring.${hint(` ("hack" walks you in.)`)}`;
|
|
79
|
+
}
|
|
80
|
+
// THE ROLL. The camera defends with its OWN ratings, not the host's
|
|
81
|
+
// (p.233) -- that is what the cable bought -- so the threshold sits
|
|
82
|
+
// a full step below hack.ts's host intrusion (2, or 3 on alert).
|
|
83
|
+
// A site with its walls up is still harder: an alerted host is
|
|
84
|
+
// watching its own edges.
|
|
85
|
+
const threshold = host.hostAlert ? 2 : 1;
|
|
86
|
+
const silence = actor.matrixActionPenalty;
|
|
87
|
+
let pool;
|
|
88
|
+
if (mode === 'attack') {
|
|
89
|
+
pool = Math.max(1, actor.logic + actor.skillRating('hacking') + (actor.getCyberdeck()?.matrixEdge('attack') ?? 0) + actor.qualityBonus('hacking') + silence + actor.woundModifier - actor.sustainingPenalty);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const sleazeEdge = actor.isTechnomancer()
|
|
93
|
+
? Math.floor(actor.resonance / 2)
|
|
94
|
+
: actor.getCyberdeck()?.matrixEdge('sleaze') ?? 0;
|
|
95
|
+
pool = Math.max(1, actor.logic + actor.skillRating('hacking') + sleazeEdge + actor.qualityBonus('hacking') + silence + actor.woundModifier - actor.sustainingPenalty);
|
|
96
|
+
}
|
|
97
|
+
actor.performAction('cables into the cameras', `${room.name} -- a hand on the housing, a filament out of their deck`);
|
|
98
|
+
const roll = rollPool(pool);
|
|
99
|
+
if (this.scene.isHumanControlled(actor)) {
|
|
100
|
+
this.logger.meta(`Direct connection, camera (${mode === 'attack' ? 'brute force' : 'sleaze'}): ${formatRoll(roll)} (${threshold}+ -- its OWN ratings, not the host's)`);
|
|
101
|
+
}
|
|
102
|
+
this.logger.write(`${actor.name} direct-connected to ${room.name}'s cameras (${mode}): ${roll.hits} vs ${threshold}, master=${host.name}.`);
|
|
103
|
+
// GOD counts it either way (p.231-232) -- the same flat 2 a host
|
|
104
|
+
// intrusion bills, because a threshold roll has no defender hits to
|
|
105
|
+
// count. A cable is quieter than the grid, not invisible to it.
|
|
106
|
+
const bill = accrueOverwatch(this.scene, actor, 2, `direct connection (camera, ${mode})`);
|
|
107
|
+
const godLines = bill.lines;
|
|
108
|
+
if (roll.hits < threshold) {
|
|
109
|
+
if (mode === 'sleaze') {
|
|
110
|
+
// p.236: a blown Sleaze action is NOTICED. The camera screams to
|
|
111
|
+
// its master, which is the same alarm hack.ts raises.
|
|
112
|
+
host.hostAlert = true;
|
|
113
|
+
actor.sneaking = false;
|
|
114
|
+
this.scene.addWorldEvent(`Something forced the cameras in ${room.name} -- the ${host.name} host flagged an intrusion and its ice is hunting.`);
|
|
115
|
+
this.scene.updateStatus();
|
|
116
|
+
return [
|
|
117
|
+
`The housing's tamper line trips under your fingers.`,
|
|
118
|
+
` The camera reports itself -- and the ${host.name} host believes it. Walls UP: it holds a mark on your persona now, everything guarding this place knows someone is on the wire, and you are no longer moving unnoticed.`,
|
|
119
|
+
...godLines,
|
|
120
|
+
].join('\n');
|
|
121
|
+
}
|
|
122
|
+
// p.236: a failed Attack action is never noticed -- the firewall
|
|
123
|
+
// just chews on whatever is holding the other end of the cable.
|
|
124
|
+
const dealt = Math.max(0, 2 - rollPool(actor.getSoakPool()).hits);
|
|
125
|
+
const lines = [`You put your shoulder into it and the camera just... doesn't give.`];
|
|
126
|
+
if (dealt > 0) {
|
|
127
|
+
if (actor.simMode === 'hot' || actor.isTechnomancer()) {
|
|
128
|
+
actor.takeStun(dealt);
|
|
129
|
+
lines.push(` The feedback comes straight back up the wire -- ${dealt} stun: ${actor.stunSummary()}`);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
actor.takeMatrixDamage(dealt);
|
|
133
|
+
lines.push(` Your deck takes the bite -- ${dealt} box${dealt === 1 ? '' : 'es'}: ${actor.matrixSummary()}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
lines.push(` You shed the counterstrike and pull the filament back.`);
|
|
138
|
+
}
|
|
139
|
+
lines.push(` Nothing upstairs noticed: a smash that never lands leaves nothing to report.`);
|
|
140
|
+
lines.push(...godLines);
|
|
141
|
+
this.scene.updateStatus();
|
|
142
|
+
return lines.join('\n');
|
|
143
|
+
}
|
|
144
|
+
// IN. Canon p.233: the mark on the slave IS a mark on the master.
|
|
145
|
+
const now = held + 1;
|
|
146
|
+
host.hostMarksBy.set(actor.name, now);
|
|
147
|
+
if (mode === 'attack') {
|
|
148
|
+
actor.sneaking = false;
|
|
149
|
+
this.scene.addWorldEvent(`${actor.name} forced the cameras in ${room.name} -- the ${host.name} host felt it go.`);
|
|
150
|
+
}
|
|
151
|
+
this.logger.write(`${actor.name} now holds ${now} mark(s) on ${host.name} via the ${room.name} cameras.`);
|
|
152
|
+
const lines = [
|
|
153
|
+
`{cyan-fg}The filament finds the connector and the camera stops being a camera -- it's a device, and it's talking to you.{/cyan-fg}`,
|
|
154
|
+
` {cyan-fg}It never gets to hide behind the ${host.name} host: a cable doesn't ask the network for permission, so the lens has to defend itself with what a lens has. It doesn't have much.{/cyan-fg}`,
|
|
155
|
+
` {cyan-fg}MARK PLACED -- and it lands on the host too. The camera answers to ${host.name}, and anything ${host.name} trusts to speak for it just handed you a key. [${now}/${MAX_MARKS}]{/cyan-fg}`,
|
|
156
|
+
];
|
|
157
|
+
if (mode === 'attack') {
|
|
158
|
+
lines.push(` The housing is visibly forced -- the host FELT that one, even if nothing saw your face.`);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
lines.push(` Nothing logged, nothing flagged. You were never here.`);
|
|
162
|
+
}
|
|
163
|
+
if (host === room) {
|
|
164
|
+
lines.push(` {cyan-fg}${now >= MAX_MARKS
|
|
165
|
+
? `The host thinks you belong now -- "hack" walks straight in.`
|
|
166
|
+
: `The ${host.name} host cracks easier with every key you hold${hint(` -- "jack in" and "hack", or come back for another lens`)}.`}{/cyan-fg}`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
lines.push(` {cyan-fg}These lenses ride the site network, so the key fits the ${host.name} host${hint(` -- "jack in", "go ${host.name}", "hack"`)}.{/cyan-fg}`);
|
|
170
|
+
}
|
|
171
|
+
// A mark is all canSnoopFeeds ever wanted (surveillance.ts).
|
|
172
|
+
lines.push(` {cyan-fg}And the eyes are half yours already${hint(` -- jacked in, "snoop <room>" rides any feed on this network`)}.{/cyan-fg}`);
|
|
173
|
+
if (host.nodeAccess === 'wired') {
|
|
174
|
+
lines.push(` {cyan-fg}Worth knowing: that host is AIR-GAPPED. No persona was ever going to drift up to it. This cable is the only door it has, and you're holding a key to it.{/cyan-fg}`);
|
|
175
|
+
}
|
|
176
|
+
lines.push(...godLines);
|
|
177
|
+
this.scene.updateStatus();
|
|
178
|
+
return lines.join('\n');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=tap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/tap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Door } from '../models/door.js';
|
|
2
2
|
import { Command } from './command.js';
|
|
3
|
-
import { exitSpot, ensureAtSpot } from '../utilities/spots.js';
|
|
3
|
+
import { exitSpot, ensureAtSpot, lockedRouteHint } from '../utilities/spots.js';
|
|
4
4
|
export class UnlockCommand extends Command {
|
|
5
5
|
static verb = 'unlock';
|
|
6
6
|
static description = 'Unlock a door.';
|
|
@@ -62,7 +62,11 @@ export class UnlockCommand extends Command {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
this.logger.write(`UnlockCommand: ${this.actor.name} does not have the required key (${requiredKeyOrSolution}) for "${target}".`);
|
|
65
|
-
|
|
65
|
+
// Same first-contact problem go.ts had (blocker 2026-08-27): a flat
|
|
66
|
+
// "you don't have the key" in front of a barrier that advertises a
|
|
67
|
+
// workable route reads as the door refusing to acknowledge itself.
|
|
68
|
+
// Silent on a plain keyed door, which genuinely has no other way.
|
|
69
|
+
return crossNote + `You don't have the key or solution to unlock this door.${lockedRouteHint(door)}`;
|
|
66
70
|
}
|
|
67
71
|
}
|
|
68
72
|
//# sourceMappingURL=unlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/unlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/unlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -478,6 +478,13 @@ For EVERY npc in the skeleton, expand its "concept":
|
|
|
478
478
|
"description" should read like a client rep's dossier -- the employer's deniable face, a
|
|
479
479
|
Johnson buying deniability. When referring to places, use EXACT room names from the
|
|
480
480
|
skeleton -- never invent locations.
|
|
481
|
+
NEVER write a CREDENTIAL into "dialogue" or "description" -- no door code, safe
|
|
482
|
+
combination, passphrase, or key-word, not even a hint at the digits. This stage runs in
|
|
483
|
+
PARALLEL with the stage that writes the pass each barrier actually accepts, so you
|
|
484
|
+
cannot see those passes, and any credential you write here is one you invented: the lock
|
|
485
|
+
will refuse it and the player will burn a run trusting it. An NPC may say that a code
|
|
486
|
+
EXISTS, who holds it, or where it's written down -- never what it is. The engine hands
|
|
487
|
+
the real pass to whoever genuinely holds it, at runtime (see npc.ts).
|
|
481
488
|
- "combat": OPTIONAL attribute block -- omit for anyone who'd never fight. Each attribute
|
|
482
489
|
1-8 (soft civilian 1-2, street-level 3-4, hardened enforcer 5-6, elite 7-8):
|
|
483
490
|
{ "body", "agility", "reaction", "combatSkill", "strength"?, "willpower"?, "logic"?,
|