@maka/maka-cli 5.66.0 → 5.68.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/_index.d.ts +1 -0
- package/bundle/typescript/src/commands/game/_index.js +1 -0
- package/bundle/typescript/src/commands/game/_index.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +6 -1
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js +4 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.d.ts +103 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +423 -25
- package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.d.ts +15 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +61 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/companions.d.ts +39 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +85 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/compile.d.ts +37 -17
- package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js +53 -115
- package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.d.ts +55 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js +203 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +23 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +42 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +27 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +28 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/order.js +69 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/order.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/register.d.ts +15 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/register.js +32 -6
- package/bundle/typescript/src/commands/game/sideQuest/commands/register.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/review.d.ts +39 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/review.js +48 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/review.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.d.ts +35 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.js +108 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/thread.d.ts +27 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js +7 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.d.ts +57 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.js +162 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +31 -1
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.d.ts +87 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +320 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +32 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +8 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +98 -11
- package/bundle/typescript/src/commands/game/sideQuest/game.js +239 -35
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/headless-harness.d.ts +24 -0
- package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +63 -0
- package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +9 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js +9 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +57 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +62 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +10 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +5 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.d.ts +108 -0
- package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.js +186 -0
- package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.d.ts +88 -0
- package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.js +137 -0
- package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +106 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/repro.js +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/repro.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +32 -1
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/ui.d.ts +9 -0
- package/bundle/typescript/src/commands/game/sideQuest/ui.js +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.d.ts +17 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js +250 -36
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.d.ts +30 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.js +58 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.d.ts +85 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js +100 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +45 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js +45 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/commit-ref.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/commit-ref.js +22 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/commit-ref.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.d.ts +13 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +36 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/handoff.d.ts +42 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/handoff.js +57 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/handoff.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +14 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/repro-launch.d.ts +68 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/repro-launch.js +147 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/repro-launch.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +39 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +46 -0
- package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.d.ts +3 -1
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +352 -42
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/tools/log/log.class.d.ts +17 -0
- package/bundle/typescript/src/tools/log/log.class.js +30 -1
- package/bundle/typescript/src/tools/log/log.class.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/thread.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Command, ICommand } from './command.js';
|
|
2
|
+
/**
|
|
3
|
+
* KILL COMPLEX FORM (SR5e p.250-251) -- "unravel <name>".
|
|
4
|
+
*
|
|
5
|
+
* The last of the seven Resonance actions on p.250 that this game did
|
|
6
|
+
* not have (see resonance-actions.ts for the audit that found it).
|
|
7
|
+
*
|
|
8
|
+
* THE GAME ALREADY KNEW THIS HOLE WAS HERE, which is the best argument
|
|
9
|
+
* for filling it. dispel.ts refuses counterspelling against Resonance
|
|
10
|
+
* with a deliberate, canon-correct line -- "What's woven around X isn't
|
|
11
|
+
* mana -- it's RESONANCE. Your counterspelling finds nothing to grip."
|
|
12
|
+
* Somebody stood exactly on the edge of this gap, described it
|
|
13
|
+
* precisely, and had no verb to point at. Now that refusal names a real
|
|
14
|
+
* route instead of an absence.
|
|
15
|
+
*
|
|
16
|
+
* RAW: Software + Resonance [Level] v. Complex Form Level + Resonance
|
|
17
|
+
* (the threader's). Every net hit reduces the hits from the form's
|
|
18
|
+
* ORIGINAL threading test; drive that to zero and the form ends. Then
|
|
19
|
+
* you "resist Fading as if you had threaded the complex form you
|
|
20
|
+
* targeted" -- the toll is the form's, not yours, which is what makes
|
|
21
|
+
* killing a big weave genuinely dangerous rather than free.
|
|
22
|
+
*
|
|
23
|
+
* WHAT IT CAN REACH TODAY, said plainly because it is a real limit and
|
|
24
|
+
* not a small one: NOTHING IN A SOLO GAME -- not because the route is
|
|
25
|
+
* closed but because it is GATED. An NPC CAN reach ThreadCommand:
|
|
26
|
+
* `order` runs a command as the companion through NPC.runCommand, which
|
|
27
|
+
* parses the same registry. What stops it is ThreadCommand's own
|
|
28
|
+
* isTechnomancer() check ("The Resonance doesn't know your voice"),
|
|
29
|
+
* and no NPC is a technomancer today. So no NPC holds a form, and a
|
|
30
|
+
* solo runner meets no weave to cut. The reachable target today is
|
|
31
|
+
* another PLAYER on a shared run.
|
|
32
|
+
*
|
|
33
|
+
* That distinction is the load-bearing half: "structurally impossible"
|
|
34
|
+
* and "open but gated" imply very different costs for the NPC-
|
|
35
|
+
* technomancer feature. The plumbing already exists, and an NPC
|
|
36
|
+
* technomancer inherits this through `order` for free.
|
|
37
|
+
*
|
|
38
|
+
* THE WRITERS OF sustainedForms, enumerated -- and a warning about how
|
|
39
|
+
* to enumerate them. `grep sustainedForms` near a mutator finds
|
|
40
|
+
* thread.ts's push and this file's filter, and MISSES thread.ts's drop
|
|
41
|
+
* path, which aliases first (`const held = actor.sustainedForms`) and
|
|
42
|
+
* splices the alias on a later line. An alias defeats a name-grep, so
|
|
43
|
+
* the search that looks thorough returns an incomplete answer. The full
|
|
44
|
+
* set is: thread.ts push (creates), thread.ts splice-via-alias
|
|
45
|
+
* (releases), unravel.ts filter (kills). All three run as a command
|
|
46
|
+
* actor; none can be an NPC while the gate above stands.
|
|
47
|
+
*
|
|
48
|
+
* It refuses your OWN forms on purpose: "thread drop <form>" already
|
|
49
|
+
* releases those, for free, and routing a free action through an
|
|
50
|
+
* opposed test that can hurt you would be a worse answer to the same
|
|
51
|
+
* question.
|
|
52
|
+
*/
|
|
53
|
+
export declare class UnravelCommand extends Command implements ICommand {
|
|
54
|
+
protected static verb: string;
|
|
55
|
+
protected static description: string;
|
|
56
|
+
execute(args?: string[]): Promise<string>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { Command } from './command.js';
|
|
2
|
+
import { rollPool, formatRoll } from '../utilities/dice.js';
|
|
3
|
+
import { hint } from '../utilities/hints.js';
|
|
4
|
+
import { fuzzyPickName } from '../utilities/fuzzy-match.js';
|
|
5
|
+
import { Player } from '../models/player.js';
|
|
6
|
+
import { FORMS } from './thread.js';
|
|
7
|
+
/**
|
|
8
|
+
* KILL COMPLEX FORM (SR5e p.250-251) -- "unravel <name>".
|
|
9
|
+
*
|
|
10
|
+
* The last of the seven Resonance actions on p.250 that this game did
|
|
11
|
+
* not have (see resonance-actions.ts for the audit that found it).
|
|
12
|
+
*
|
|
13
|
+
* THE GAME ALREADY KNEW THIS HOLE WAS HERE, which is the best argument
|
|
14
|
+
* for filling it. dispel.ts refuses counterspelling against Resonance
|
|
15
|
+
* with a deliberate, canon-correct line -- "What's woven around X isn't
|
|
16
|
+
* mana -- it's RESONANCE. Your counterspelling finds nothing to grip."
|
|
17
|
+
* Somebody stood exactly on the edge of this gap, described it
|
|
18
|
+
* precisely, and had no verb to point at. Now that refusal names a real
|
|
19
|
+
* route instead of an absence.
|
|
20
|
+
*
|
|
21
|
+
* RAW: Software + Resonance [Level] v. Complex Form Level + Resonance
|
|
22
|
+
* (the threader's). Every net hit reduces the hits from the form's
|
|
23
|
+
* ORIGINAL threading test; drive that to zero and the form ends. Then
|
|
24
|
+
* you "resist Fading as if you had threaded the complex form you
|
|
25
|
+
* targeted" -- the toll is the form's, not yours, which is what makes
|
|
26
|
+
* killing a big weave genuinely dangerous rather than free.
|
|
27
|
+
*
|
|
28
|
+
* WHAT IT CAN REACH TODAY, said plainly because it is a real limit and
|
|
29
|
+
* not a small one: NOTHING IN A SOLO GAME -- not because the route is
|
|
30
|
+
* closed but because it is GATED. An NPC CAN reach ThreadCommand:
|
|
31
|
+
* `order` runs a command as the companion through NPC.runCommand, which
|
|
32
|
+
* parses the same registry. What stops it is ThreadCommand's own
|
|
33
|
+
* isTechnomancer() check ("The Resonance doesn't know your voice"),
|
|
34
|
+
* and no NPC is a technomancer today. So no NPC holds a form, and a
|
|
35
|
+
* solo runner meets no weave to cut. The reachable target today is
|
|
36
|
+
* another PLAYER on a shared run.
|
|
37
|
+
*
|
|
38
|
+
* That distinction is the load-bearing half: "structurally impossible"
|
|
39
|
+
* and "open but gated" imply very different costs for the NPC-
|
|
40
|
+
* technomancer feature. The plumbing already exists, and an NPC
|
|
41
|
+
* technomancer inherits this through `order` for free.
|
|
42
|
+
*
|
|
43
|
+
* THE WRITERS OF sustainedForms, enumerated -- and a warning about how
|
|
44
|
+
* to enumerate them. `grep sustainedForms` near a mutator finds
|
|
45
|
+
* thread.ts's push and this file's filter, and MISSES thread.ts's drop
|
|
46
|
+
* path, which aliases first (`const held = actor.sustainedForms`) and
|
|
47
|
+
* splices the alias on a later line. An alias defeats a name-grep, so
|
|
48
|
+
* the search that looks thorough returns an incomplete answer. The full
|
|
49
|
+
* set is: thread.ts push (creates), thread.ts splice-via-alias
|
|
50
|
+
* (releases), unravel.ts filter (kills). All three run as a command
|
|
51
|
+
* actor; none can be an NPC while the gate above stands.
|
|
52
|
+
*
|
|
53
|
+
* It refuses your OWN forms on purpose: "thread drop <form>" already
|
|
54
|
+
* releases those, for free, and routing a free action through an
|
|
55
|
+
* opposed test that can hurt you would be a worse answer to the same
|
|
56
|
+
* question.
|
|
57
|
+
*/
|
|
58
|
+
export class UnravelCommand extends Command {
|
|
59
|
+
static verb = 'unravel';
|
|
60
|
+
static description = 'Kill a complex form somebody else is sustaining (technomancers): "unravel <name>" -- Software + Resonance vs their form. Net hits eat the hits that wove it; drive them to zero and it collapses. You resist the fading as though you had threaded it yourself. Your own forms come off free with "thread drop".';
|
|
61
|
+
async execute(args = []) {
|
|
62
|
+
const actor = this.actor;
|
|
63
|
+
if (!actor.isTechnomancer()) {
|
|
64
|
+
return `Complex forms are Resonance, and the Resonance doesn't answer to you. Only a technomancer can unravel one.`;
|
|
65
|
+
}
|
|
66
|
+
// Everyone standing here who is holding something, minus you.
|
|
67
|
+
const room = actor.currentLocation;
|
|
68
|
+
const holders = (room?.getActors() ?? [])
|
|
69
|
+
.filter((a) => a instanceof Player && a !== actor && (a.sustainedForms?.length ?? 0) > 0);
|
|
70
|
+
const targetName = args.join(' ').trim();
|
|
71
|
+
if (holders.length === 0) {
|
|
72
|
+
// Distinguish "nobody is weaving" from "you asked for a name that
|
|
73
|
+
// isn't here" -- the two have different fixes and one message for
|
|
74
|
+
// both sends players hunting for a typo that isn't there.
|
|
75
|
+
const ownForms = actor.sustainedForms.length > 0;
|
|
76
|
+
return `Nothing woven here but your own${ownForms ? ` -- and yours come off free.${hint(` ("thread drop <form>")`)}` : `, and you hold nothing either.`}`;
|
|
77
|
+
}
|
|
78
|
+
let target = holders[0];
|
|
79
|
+
if (targetName) {
|
|
80
|
+
const picked = fuzzyPickName(targetName, holders.map(h => h.name));
|
|
81
|
+
if (!picked) {
|
|
82
|
+
// Naming your own forms is a common and reasonable mistake.
|
|
83
|
+
if (fuzzyPickName(targetName, [actor.name])) {
|
|
84
|
+
return `Your own weave doesn't fight you.${hint(` ("thread drop <form>" releases it, free.)`)}`;
|
|
85
|
+
}
|
|
86
|
+
return `Nobody here by that name is sustaining anything. Holding a form: ${holders.map(h => h.name).join(', ')}.`;
|
|
87
|
+
}
|
|
88
|
+
target = holders.find(h => h.name === picked) ?? holders[0];
|
|
89
|
+
}
|
|
90
|
+
else if (holders.length > 1) {
|
|
91
|
+
return `Unravel WHOSE weave? Holding a form: ${holders.map(h => h.name).join(', ')}.`;
|
|
92
|
+
}
|
|
93
|
+
// The oldest form they hold -- the one that has been shaping the
|
|
94
|
+
// fight longest, and the one a player means by "unravel her".
|
|
95
|
+
const held = target.sustainedForms[0];
|
|
96
|
+
const form = FORMS.find(f => f.key === held.key);
|
|
97
|
+
const formName = form?.name ?? held.key;
|
|
98
|
+
const level = held.level;
|
|
99
|
+
// Fall back to the Level for a form woven before hits were
|
|
100
|
+
// recorded; see Player.sustainedForms.
|
|
101
|
+
const standing = held.hits ?? level;
|
|
102
|
+
// OPPOSED: Software + Resonance [Level] v. Level + their Resonance.
|
|
103
|
+
const software = actor.skillRating('software');
|
|
104
|
+
const roll = rollPool(Math.max(1, actor.resonance + (software > 0 ? software : -1) + actor.woundModifier - actor.sustainingPenalty));
|
|
105
|
+
// Hits capped by the Level, the same limit threading works under.
|
|
106
|
+
const hits = Math.min(roll.hits, level);
|
|
107
|
+
const defense = rollPool(Math.max(1, level + target.resonance));
|
|
108
|
+
const net = Math.max(0, hits - defense.hits);
|
|
109
|
+
const poolParts = [`Resonance ${actor.resonance}`, software > 0 ? `software ${software}` : `no software -1`];
|
|
110
|
+
if (actor.woundModifier < 0)
|
|
111
|
+
poolParts.push(`wounds ${actor.woundModifier}`);
|
|
112
|
+
if (actor.sustainingPenalty > 0)
|
|
113
|
+
poolParts.push(`sustaining -${actor.sustainingPenalty}`);
|
|
114
|
+
this.logger.meta(`Kill Complex Form (${poolParts.join(', ')}) [Level ${level}]: ${formatRoll(roll)} v. ${formatRoll(defense)}`);
|
|
115
|
+
actor.performAction('unravels a complex form', formName);
|
|
116
|
+
const remaining = Math.max(0, standing - net);
|
|
117
|
+
const collapsed = remaining === 0;
|
|
118
|
+
const lines = [
|
|
119
|
+
`You take hold of the ${formName} riding ${target.name} and PULL:`,
|
|
120
|
+
];
|
|
121
|
+
if (collapsed) {
|
|
122
|
+
target.sustainedForms = target.sustainedForms.filter(f => f !== held);
|
|
123
|
+
lines.push(` The weave comes apart in your hands -- ${formName} collapses off ${target.name}.`);
|
|
124
|
+
this.scene.addWorldEvent(`${actor.name} unravelled the ${formName} ${target.name} was sustaining in ${room?.name ?? 'the room'}.`);
|
|
125
|
+
}
|
|
126
|
+
else if (net > 0) {
|
|
127
|
+
held.hits = remaining;
|
|
128
|
+
lines.push(` Threads part and the weave SAGS -- ${net} of its ${standing} hold${standing === 1 ? '' : 's'} torn out, ${remaining} still gripping.`);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
lines.push(` It holds. ${target.name}'s weave slides out from under you untouched.`);
|
|
132
|
+
}
|
|
133
|
+
// FADING AS THOUGH YOU HAD THREADED IT (p.251) -- their form's
|
|
134
|
+
// value, your Resonance and Willpower to resist. Physical past your
|
|
135
|
+
// own Resonance, the same overreach law threading works under: a
|
|
136
|
+
// technomancer who reaches for a weave bigger than they are pays in
|
|
137
|
+
// body, and that is the whole risk of the action.
|
|
138
|
+
const overreach = level > actor.resonance;
|
|
139
|
+
const fadingValue = Math.max(2, level + (form?.fvDelta ?? 0));
|
|
140
|
+
const resist = rollPool(Math.max(1, actor.willpower + actor.resonance));
|
|
141
|
+
const fadingTaken = Math.max(0, fadingValue - resist.hits);
|
|
142
|
+
this.logger.meta(`Fading (${fadingValue}${overreach ? ', OVERREACH -- physical' : ''}): resist ${formatRoll(resist)}`);
|
|
143
|
+
if (fadingTaken === 0) {
|
|
144
|
+
lines.push(` The fading washes past you.`);
|
|
145
|
+
}
|
|
146
|
+
else if (overreach) {
|
|
147
|
+
actor.takeDamage(fadingTaken);
|
|
148
|
+
lines.push(` You reached past your own Resonance and it burns coming back -- ${fadingTaken} PHYSICAL: ${actor.conditionSummary()}`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const { stun, overflow } = actor.takeStun(fadingTaken);
|
|
152
|
+
lines.push(` The fading bites -- ${stun} stun: ${actor.stunSummary()}`);
|
|
153
|
+
if (overflow > 0) {
|
|
154
|
+
lines.push(` It's more than your mind can hold -- ${overflow} box${overflow === 1 ? '' : 'es'} spill into your body: ${actor.conditionSummary()}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
this.logger.write(`UnravelCommand: ${actor.name} v. ${target.name}'s ${held.key} L${level} -- ${hits} v ${defense.hits} (net ${net}), ${standing} -> ${remaining}, fading ${fadingValue} (took ${fadingTaken}${overreach ? ' physical' : ''}).`);
|
|
158
|
+
this.scene.updateStatus();
|
|
159
|
+
return lines.join('\n');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=unravel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unravel.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/unravel.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,5 +55,35 @@
|
|
|
55
55
|
// types/save-file.ts).
|
|
56
56
|
// - The engine no longer accepts a seed's puzzles[] as live content;
|
|
57
57
|
// it migrates them on load (factories/seed-migration.ts).
|
|
58
|
-
|
|
58
|
+
// 1.15.0 (2026-08-28): A PICKET HOLDS ITS CELL. Two shared-session
|
|
59
|
+
// surfaces move, both about a guarding NPC:
|
|
60
|
+
// - COMMAND SEMANTICS: walking onto a guard's doorway no longer
|
|
61
|
+
// displaces them, so "go <dir>" is now refused where it used to
|
|
62
|
+
// succeed. Grid seats are derived in passes and an exact cell used
|
|
63
|
+
// to win, so stepping into the doorway re-seated the guard one
|
|
64
|
+
// square over and doorwayBlocker stopped seeing them (reported as
|
|
65
|
+
// "I was able to just, push Wraith away by moving to the vault
|
|
66
|
+
// door"). A shared table can now be blocked by a body that
|
|
67
|
+
// previously waved everyone through.
|
|
68
|
+
// - NPC BRIEFS, which the hosting server builds: a guarding NPC is
|
|
69
|
+
// told they ARE the barrier. They were told about every barrier
|
|
70
|
+
// around them and never about that, so a picket beside an open
|
|
71
|
+
// door offered to let people past while the geometry refused.
|
|
72
|
+
// 1.16.0 (2026-08-28): SPRITES BECOME REAL COMPANIONS. Three shared-
|
|
73
|
+
// session surfaces move:
|
|
74
|
+
// - SAVE-SHAPE FIELDS the server writes back: a technomancer's
|
|
75
|
+
// registered sprites are a LIST (registeredSprites[]) rather than
|
|
76
|
+
// one slot, because canon caps them at LOGIC and a Logic-many cap
|
|
77
|
+
// over a single field is the same vanishing one step downstream.
|
|
78
|
+
// The old singular field is still READ for existing saves and no
|
|
79
|
+
// longer written, so no SAVE_VERSION bump is owed (the `bodies?`
|
|
80
|
+
// precedent at save-file.ts).
|
|
81
|
+
// - COMMAND SEMANTICS in shared scenes: new verbs `sprites`,
|
|
82
|
+
// `unravel` (Kill Complex Form) and `decompile`; `recall` gained
|
|
83
|
+
// Call/Dismiss Sprite; `compile` no longer implicitly releases;
|
|
84
|
+
// `order <sprite> stand down` no longer destroys the registration.
|
|
85
|
+
// - COMPANION MOVEMENT: a sprite now heels on its own plane, so a
|
|
86
|
+
// jacked-in technomancer keeps it and a walking one does not drag
|
|
87
|
+
// it through the meat world. It was exactly backwards.
|
|
88
|
+
export const ENGINE_VERSION = '1.16.0';
|
|
59
89
|
//# sourceMappingURL=engine-version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-version.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/engine-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,sEAAsE;AACtE,mEAAmE;AACnE,oEAAoE;AACpE,sEAAsE;AACtE,6CAA6C;AAC7C,iEAAiE;AACjE,qCAAqC;AACrC,oEAAoE;AACpE,6DAA6D;AAC7D,uEAAuE;AACvE,kDAAkD;AAClD,iEAAiE;AACjE,mEAAmE;AACnE,gEAAgE;AAChE,8DAA8D;AAC9D,kEAAkE;AAClE,kDAAkD;AAClD,kEAAkE;AAClE,4DAA4D;AAC5D,qEAAqE;AACrE,yDAAyD;AACzD,sEAAsE;AACtE,2CAA2C;AAC3C,qEAAqE;AACrE,yDAAyD;AACzD,iEAAiE;AACjE,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,wEAAwE;AACxE,oEAAoE;AACpE,wEAAwE;AACxE,6DAA6D;AAC7D,uEAAuE;AACvE,sEAAsE;AACtE,0DAA0D;AAC1D,2BAA2B;AAC3B,uEAAuE;AACvE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"engine-version.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/engine-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,sEAAsE;AACtE,mEAAmE;AACnE,oEAAoE;AACpE,sEAAsE;AACtE,6CAA6C;AAC7C,iEAAiE;AACjE,qCAAqC;AACrC,oEAAoE;AACpE,6DAA6D;AAC7D,uEAAuE;AACvE,kDAAkD;AAClD,iEAAiE;AACjE,mEAAmE;AACnE,gEAAgE;AAChE,8DAA8D;AAC9D,kEAAkE;AAClE,kDAAkD;AAClD,kEAAkE;AAClE,4DAA4D;AAC5D,qEAAqE;AACrE,yDAAyD;AACzD,sEAAsE;AACtE,2CAA2C;AAC3C,qEAAqE;AACrE,yDAAyD;AACzD,iEAAiE;AACjE,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,wEAAwE;AACxE,oEAAoE;AACpE,wEAAwE;AACxE,6DAA6D;AAC7D,uEAAuE;AACvE,sEAAsE;AACtE,0DAA0D;AAC1D,2BAA2B;AAC3B,uEAAuE;AACvE,8DAA8D;AAC9D,mEAAmE;AACnE,4CAA4C;AAC5C,kEAAkE;AAClE,oEAAoE;AACpE,uEAAuE;AACvE,mEAAmE;AACnE,sEAAsE;AACtE,mEAAmE;AACnE,+DAA+D;AAC/D,yCAAyC;AACzC,qEAAqE;AACrE,oEAAoE;AACpE,mEAAmE;AACnE,kEAAkE;AAClE,qEAAqE;AACrE,yBAAyB;AACzB,iEAAiE;AACjE,sEAAsE;AACtE,sEAAsE;AACtE,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,kCAAkC;AAClC,+DAA+D;AAC/D,qEAAqE;AACrE,oEAAoE;AACpE,uEAAuE;AACvE,oEAAoE;AACpE,sEAAsE;AACtE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Direction } from '../types/shared/direction-enum.js';
|
|
2
|
+
import { ISceneSeedJson } from '../types/seed/scene-seed.js';
|
|
3
|
+
import { IReproFixture } from '../types/repro.js';
|
|
4
|
+
/**
|
|
5
|
+
* BUILDING THE BENCH A REVIEW ITEM SHIPS WITH.
|
|
6
|
+
*
|
|
7
|
+
* Two rooms and one sealed door between them. That is the whole scene,
|
|
8
|
+
* on purpose: a repro is a bench, not a run, and every room you have to
|
|
9
|
+
* walk through to reach the thing under test is a room the reproduction
|
|
10
|
+
* can go wrong in.
|
|
11
|
+
*
|
|
12
|
+
* THIS FILE OWNS THE INVARIANTS, and that is the reason it exists
|
|
13
|
+
* rather than the specs carrying raw seed JSON. The author of a repro
|
|
14
|
+
* states INTENT -- "a guard in the doorway", "a keypad sealing north" --
|
|
15
|
+
* and everything that intent implies is derived here, once, for every
|
|
16
|
+
* repro that will ever be written.
|
|
17
|
+
*
|
|
18
|
+
* The invariant that motivated the design: an NPC marked `guarding`
|
|
19
|
+
* whose startSpot is not the sealed exit's spot. Nothing throws.
|
|
20
|
+
* `holdsGround` is simply never consulted, because doorwayOccupants
|
|
21
|
+
* reads the exit cell and the guard is not standing in it. The scene
|
|
22
|
+
* builds, the walkthrough passes, and the repro demonstrates the
|
|
23
|
+
* opposite of what it claims -- a check whose two sides fail together
|
|
24
|
+
* cannot see the failure, which is the dominant defect shape in this
|
|
25
|
+
* codebase's history. An author cannot make that mistake here, because
|
|
26
|
+
* an author never supplies the spot.
|
|
27
|
+
*
|
|
28
|
+
* The other invariants are refusals rather than derivations, and they
|
|
29
|
+
* refuse LOUDLY rather than degrading. A repro that silently does less
|
|
30
|
+
* than it says is the failure mode this whole feature is built against,
|
|
31
|
+
* so "drop the field and carry on" -- which is what the runtime does
|
|
32
|
+
* with a code on a lock -- is exactly the wrong behaviour here.
|
|
33
|
+
*/
|
|
34
|
+
/** The room the device stands in, which is also the room that declares
|
|
35
|
+
* the exit it seals. */
|
|
36
|
+
export declare const REPRO_BARRIER_ROOM = "The Approach";
|
|
37
|
+
/** Through the door. */
|
|
38
|
+
export declare const REPRO_FAR_ROOM = "The Far Side";
|
|
39
|
+
/** The one spot that matters, and the one an author never has to name.
|
|
40
|
+
* Both rooms have it: a doorway has two sides, and a guard posted on
|
|
41
|
+
* the far side stands in their own. */
|
|
42
|
+
export declare const REPRO_DOORWAY_SPOT = "doorway";
|
|
43
|
+
/**
|
|
44
|
+
* Somewhere to stand that is NOT the doorway, so "move to the door" is
|
|
45
|
+
* a real move with a real before-state. Without it the runner starts in
|
|
46
|
+
* the doorway and the whole class of "I walked onto the guard's cell"
|
|
47
|
+
* items cannot be reproduced at all.
|
|
48
|
+
*
|
|
49
|
+
* NOT called "open floor", which was the first name and was wrong for a
|
|
50
|
+
* reason worth recording: "open floor" is the ENGINE's phrase for
|
|
51
|
+
* having no named spot at all (see move.ts -- "You peel off to the open
|
|
52
|
+
* floor"). Naming a real spot that made a positioned NPC render as
|
|
53
|
+
* "Grier at the open floor, Grier on the open floor" -- one clause from
|
|
54
|
+
* the spot, one from the generic fallback, reading exactly like a
|
|
55
|
+
* duplicate-render bug. Every reviewer sent to a bench would have filed
|
|
56
|
+
* it. A fixture must not borrow the engine's words for "none".
|
|
57
|
+
*/
|
|
58
|
+
export declare const REPRO_FLOOR_SPOT = "back wall";
|
|
59
|
+
/** A fixture that cannot be built into an honest bench. Thrown, never
|
|
60
|
+
* swallowed -- the caller turns it into a sentence for whoever wrote
|
|
61
|
+
* the spec. */
|
|
62
|
+
export declare class ReproFixtureError extends Error {
|
|
63
|
+
constructor(message: string);
|
|
64
|
+
}
|
|
65
|
+
export interface IReproBuild {
|
|
66
|
+
seed: ISceneSeedJson;
|
|
67
|
+
/** What the builder actually named things, so a caller can print
|
|
68
|
+
* steps that refer to them without guessing. */
|
|
69
|
+
names: {
|
|
70
|
+
device?: string;
|
|
71
|
+
npcs: string[];
|
|
72
|
+
direction: Direction;
|
|
73
|
+
barrierRoom: string;
|
|
74
|
+
farRoom: string;
|
|
75
|
+
startRoom: string;
|
|
76
|
+
};
|
|
77
|
+
/** Things worth saying that are not refusals -- a mundane sent to
|
|
78
|
+
* dispel a ward, a key stranded behind its own door. */
|
|
79
|
+
warnings: string[];
|
|
80
|
+
}
|
|
81
|
+
export declare function buildReproScene(fixture: IReproFixture): IReproBuild;
|
|
82
|
+
/** The archetype a fixture asks for, resolved. Separate from the build
|
|
83
|
+
* because the launcher hands the NAME to the game (which rolls the
|
|
84
|
+
* character itself) while the headless walkthrough needs the spread to
|
|
85
|
+
* make a save out of. */
|
|
86
|
+
export declare function reproArchetypeName(fixture: IReproFixture): string;
|
|
87
|
+
export declare function reproArchetype(fixture: IReproFixture): import("../archetypes.js").IArchetype;
|