@maka/maka-cli 5.73.0 → 5.75.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 +0 -4
- package/bundle/typescript/src/commands/game/_index.js +6 -5
- package/bundle/typescript/src/commands/game/_index.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +6 -6
- package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +26 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +29 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +10 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/move.d.ts +42 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +288 -46
- package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +20 -15
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/snoop.js +8 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/snoop.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sustain.d.ts +48 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sustain.js +135 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sustain.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +10 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js +9 -8
- package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +83 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +253 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +116 -3
- package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +3 -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 +21 -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 +61 -0
- package/bundle/typescript/src/commands/game/sideQuest/game.js +146 -23
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/headless.js +48 -5
- package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +35 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +46 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +158 -3
- package/bundle/typescript/src/commands/game/sideQuest/types/repro.js +24 -1
- package/bundle/typescript/src/commands/game/sideQuest/types/repro.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js +33 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js +8 -8
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.d.ts +4 -2
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js +15 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-vocab.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.d.ts +24 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js +31 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-names.d.ts +63 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-names.js +104 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-names.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +4 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/identity.d.ts +26 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/identity.js +37 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/identity.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/map-view.d.ts +19 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/map-view.js +22 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/map-view.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/marks.js +2 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/marks.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/repro-launch.d.ts +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +71 -18
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +109 -21
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.d.ts +38 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js +46 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/splash.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/splash.js +60 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/splash.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +31 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +41 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.d.ts +29 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +33 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +16 -11
- package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +100 -42
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/commands/registry.js +1 -1
- package/bundle/typescript/src/commands/registry.js.map +1 -1
- package/bundle/typescript/src/commands/set/global.sub.cmd.js +1 -20
- package/bundle/typescript/src/commands/set/global.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/generator.js +1 -0
- package/bundle/typescript/src/generator.js.map +1 -1
- package/bundle/typescript/src/templates/meteor/collection/tests.js +1 -1
- package/bundle/typescript/src/templates/meteor/collection/tests.js.ts +1 -1
- package/bundle/typescript/src/templates/react/test/test.js.jsx +31 -29
- package/bundle/typescript/src/templates/react/test/test.js.tsx +31 -29
- package/bundle/typescript/src/tools/browser/open-browser.d.ts +7 -0
- package/bundle/typescript/src/tools/browser/open-browser.js +21 -0
- package/bundle/typescript/src/tools/browser/open-browser.js.map +1 -0
- package/bundle/typescript/src/tools/pkg/pkg.class.js +12 -1
- package/bundle/typescript/src/tools/pkg/pkg.class.js.map +1 -1
- package/package.json +1 -1
- package/bundle/typescript/src/commands/game/battleship.sub.cmd.d.ts +0 -1
- package/bundle/typescript/src/commands/game/battleship.sub.cmd.js +0 -12
- package/bundle/typescript/src/commands/game/battleship.sub.cmd.js.map +0 -1
- package/bundle/typescript/src/commands/game/play.command.d.ts +0 -3
- package/bundle/typescript/src/commands/game/play.command.js +0 -18
- package/bundle/typescript/src/commands/game/play.command.js.map +0 -1
- package/bundle/typescript/src/commands/game/pong.sub.cmd.d.ts +0 -1
- package/bundle/typescript/src/commands/game/pong.sub.cmd.js +0 -12
- package/bundle/typescript/src/commands/game/pong.sub.cmd.js.map +0 -1
- package/bundle/typescript/src/commands/game/snake.sub.cmd.d.ts +0 -1
- package/bundle/typescript/src/commands/game/snake.sub.cmd.js +0 -12
- package/bundle/typescript/src/commands/game/snake.sub.cmd.js.map +0 -1
- package/bundle/typescript/src/commands/game/tetris.sub.cmd.d.ts +0 -1
- package/bundle/typescript/src/commands/game/tetris.sub.cmd.js +0 -12
- package/bundle/typescript/src/commands/game/tetris.sub.cmd.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { Command } from './command.js';
|
|
|
2
2
|
import { hint } from '../utilities/hints.js';
|
|
3
3
|
import { planeTintItemName, emphasizeFind, canReachHost, objectiveMark } from '../utilities/planes.js';
|
|
4
4
|
import { rollPool, formatRoll } from '../utilities/dice.js';
|
|
5
|
-
import { canReach, exitSpot, spotsActive, revealWithPerception, theSpot,
|
|
5
|
+
import { canReach, exitSpot, spotsActive, revealWithPerception, theSpot, sealedRouteTo, } from '../utilities/spots.js';
|
|
6
6
|
import { placeName } from '../utilities/log-style.js';
|
|
7
7
|
/**
|
|
8
8
|
* Barrier rendering (2026-08-24 playtest: "I don't see THE THING I'm
|
|
@@ -54,20 +54,16 @@ function describeBarriers(room, actor) {
|
|
|
54
54
|
// seals it and the verb that clears it, in the voice the move
|
|
55
55
|
// already uses (utilities/spots.ts terrainRefusal), rather than
|
|
56
56
|
// sending the player at a wall.
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
const sealed =
|
|
66
|
-
|
|
67
|
-
: undefined;
|
|
68
|
-
const advice = sealed
|
|
69
|
-
? terrainRefusal(sealed.region, anchor, sealed.device)
|
|
70
|
-
: `Too far to work from here -- "move to ${anchor}" for a proper look.`;
|
|
57
|
+
// THE ORDERING NOW LIVES IN sealedRouteTo, not here. The pathfind
|
|
58
|
+
// comes FIRST and is not optional: blockingRegionFor answers
|
|
59
|
+
// "would clearing this region open a path", never "is the way
|
|
60
|
+
// shut", so it names a region even when the route is already open.
|
|
61
|
+
// The first cut of this fix got that wrong and would have reported
|
|
62
|
+
// a seal on a room you could walk straight across -- which is
|
|
63
|
+
// exactly the kind of thing three sibling copies would each have
|
|
64
|
+
// had to rediscover. One copy, one place to be right.
|
|
65
|
+
const sealed = sealedRouteTo(room, actor, anchor);
|
|
66
|
+
const advice = sealed ?? `Too far to work from here -- "move to ${anchor}" for a proper look.`;
|
|
71
67
|
out += `
|
|
72
68
|
|
|
73
69
|
${header}
|
|
@@ -171,6 +167,15 @@ export class SearchCommand extends Command {
|
|
|
171
167
|
}
|
|
172
168
|
if (elsewhereSpots.length > 0) {
|
|
173
169
|
description += `\nSomething catches your eye over at the ${elsewhereSpots.join(', the ')} -- worth a closer look from there.`;
|
|
170
|
+
// "FROM THERE" HAS TO BE SOMEWHERE YOU CAN GET (2D6uZWqiWn9Mrhunc).
|
|
171
|
+
// The barrier listing above this one was fixed for exactly this and
|
|
172
|
+
// this line was left: it decides with canReach (spot equality) and
|
|
173
|
+
// then recommends a crossing the route may refuse. Only when EVERY
|
|
174
|
+
// named spot is sealed -- one walkable spot makes the advice true.
|
|
175
|
+
const seals = elsewhereSpots.map(s => sealedRouteTo(room, this.actor, s));
|
|
176
|
+
if (seals.length > 0 && seals.every(s => s !== undefined)) {
|
|
177
|
+
description += ` ${seals[0]}`;
|
|
178
|
+
}
|
|
174
179
|
}
|
|
175
180
|
// Casing a room turns up PEOPLE, not just goods: the same roll runs
|
|
176
181
|
// against anyone tucked at a cover-tagged spot, and whoever it beats
|
|
@@ -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,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAC9D,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from './command.js';
|
|
2
2
|
import { fuzzyPickName } from '../utilities/fuzzy-match.js';
|
|
3
|
+
import { matchesCameraName } from '../utilities/grid-names.js';
|
|
3
4
|
import { isWatched, camerasLive, canSnoopFeeds } from '../utilities/surveillance.js';
|
|
4
5
|
import { shellsInRoom } from '../utilities/planes.js';
|
|
5
6
|
import { hint } from '../utilities/hints.js';
|
|
@@ -25,7 +26,13 @@ export class SnoopCommand extends Command {
|
|
|
25
26
|
const allRooms = this.rooms ?? {};
|
|
26
27
|
const query = (args ?? []).join(' ').trim();
|
|
27
28
|
let target = actor.currentLocation;
|
|
28
|
-
|
|
29
|
+
// A CAMERA WORD MEANS "HERE" (QpxiAiwQw96q3mfL7). The icon line
|
|
30
|
+
// names the object "Camera cluster" and offers snoop in the same
|
|
31
|
+
// breath, so the label has to resolve -- and a cluster is not a
|
|
32
|
+
// separate place, it is this room's cameras. Checked BEFORE the
|
|
33
|
+
// room lookup: no room is ever called "cameras", and failing that
|
|
34
|
+
// lookup is exactly what produced the reported refusal.
|
|
35
|
+
if (query.length > 0 && !matchesCameraName(query)) {
|
|
29
36
|
const picked = fuzzyPickName(query, Object.values(allRooms).map(r => r.name));
|
|
30
37
|
const hit = picked ? Object.values(allRooms).find(r => r.name === picked) : undefined;
|
|
31
38
|
if (!hit)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snoop.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/snoop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAa,SAAQ,OAAO;IAC7B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,MAAM,CAAC,WAAW,GAAG,gQAAgQ,CAAC;IAEhS,KAAK,CAAC,OAAO,CAAC,OAAiB,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,4DAA4D,CAAC;QACtE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"snoop.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/snoop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Command, ICommand } from './command.js';
|
|
2
|
+
/**
|
|
3
|
+
* SUSTAIN COMPLEX FORM (SR5 p.256, a REGISTERED SPRITE TASK) --
|
|
4
|
+
* "sustain [<form>]".
|
|
5
|
+
*
|
|
6
|
+
* Canon, verbatim: "A registered sprite can sustain a complex form for
|
|
7
|
+
* you, so it takes the penalty from sustaining instead of you. Every
|
|
8
|
+
* task you use for this purpose lets the sprite sustain your complex
|
|
9
|
+
* form for up to its Level in Combat Turns. You can then take over
|
|
10
|
+
* sustaining again if you want."
|
|
11
|
+
*
|
|
12
|
+
* THE PENALTY MOVES, WHICH IS THE ENTIRE POINT. A held form costs its
|
|
13
|
+
* holder -2 dice on everything (Player.sustainingPenalty), and a
|
|
14
|
+
* technomancer who wants two forms up is walking around half-blind.
|
|
15
|
+
* This is the book's answer, and it is the only reason to spend a task
|
|
16
|
+
* on it. So the implementation MOVES the entry from the technomancer's
|
|
17
|
+
* sustainedForms onto the sprite's -- the sprite is an NPC, NPC extends
|
|
18
|
+
* Player, and every pool it rolls already subtracts sustainingPenalty.
|
|
19
|
+
* The burden lands where canon puts it without a second mechanism.
|
|
20
|
+
*
|
|
21
|
+
* TAKING IT BACK IS FREE, and toggling on the same word is how this
|
|
22
|
+
* codebase already spells a two-way switch (cast.ts's armor releases by
|
|
23
|
+
* casting again). The book gives take-over no cost, so neither does
|
|
24
|
+
* this.
|
|
25
|
+
*
|
|
26
|
+
* WHAT IS NOT MODELLED, named rather than papered over: the DURATION.
|
|
27
|
+
* Canon buys "up to its Level in Combat Turns" per task, and this
|
|
28
|
+
* engine has no combat-turn clock at all -- there is no counter to
|
|
29
|
+
* decrement, and inventing one to hold a single feature would be a
|
|
30
|
+
* turn-engine change wearing a sprite task's clothes. What the engine
|
|
31
|
+
* does have is the task economy, so the form stays with the sprite
|
|
32
|
+
* until you take it back or the sprite goes (see
|
|
33
|
+
* Game.returnSustainedForms). That is more generous than the book on
|
|
34
|
+
* duration and exactly right on cost; the deviation is stated here so
|
|
35
|
+
* the next reader does not have to discover it.
|
|
36
|
+
*
|
|
37
|
+
* THE FORM COMES HOME WHEN THE SPRITE DOES. A sprite that is dismissed,
|
|
38
|
+
* killed, or sent to standby hands its held forms back to its owner
|
|
39
|
+
* rather than taking them into the Resonance. Without that, the one
|
|
40
|
+
* command in the game that MOVES a form off the player would be the one
|
|
41
|
+
* command that can silently destroy it -- and the loss would look
|
|
42
|
+
* exactly like a form that had been dropped on purpose.
|
|
43
|
+
*/
|
|
44
|
+
export declare class SustainCommand extends Command implements ICommand {
|
|
45
|
+
protected static verb: string;
|
|
46
|
+
protected static description: string;
|
|
47
|
+
execute(args?: string[]): Promise<string>;
|
|
48
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Command } from './command.js';
|
|
2
|
+
import { hint } from '../utilities/hints.js';
|
|
3
|
+
import { fuzzyPickName } from '../utilities/fuzzy-match.js';
|
|
4
|
+
/**
|
|
5
|
+
* SUSTAIN COMPLEX FORM (SR5 p.256, a REGISTERED SPRITE TASK) --
|
|
6
|
+
* "sustain [<form>]".
|
|
7
|
+
*
|
|
8
|
+
* Canon, verbatim: "A registered sprite can sustain a complex form for
|
|
9
|
+
* you, so it takes the penalty from sustaining instead of you. Every
|
|
10
|
+
* task you use for this purpose lets the sprite sustain your complex
|
|
11
|
+
* form for up to its Level in Combat Turns. You can then take over
|
|
12
|
+
* sustaining again if you want."
|
|
13
|
+
*
|
|
14
|
+
* THE PENALTY MOVES, WHICH IS THE ENTIRE POINT. A held form costs its
|
|
15
|
+
* holder -2 dice on everything (Player.sustainingPenalty), and a
|
|
16
|
+
* technomancer who wants two forms up is walking around half-blind.
|
|
17
|
+
* This is the book's answer, and it is the only reason to spend a task
|
|
18
|
+
* on it. So the implementation MOVES the entry from the technomancer's
|
|
19
|
+
* sustainedForms onto the sprite's -- the sprite is an NPC, NPC extends
|
|
20
|
+
* Player, and every pool it rolls already subtracts sustainingPenalty.
|
|
21
|
+
* The burden lands where canon puts it without a second mechanism.
|
|
22
|
+
*
|
|
23
|
+
* TAKING IT BACK IS FREE, and toggling on the same word is how this
|
|
24
|
+
* codebase already spells a two-way switch (cast.ts's armor releases by
|
|
25
|
+
* casting again). The book gives take-over no cost, so neither does
|
|
26
|
+
* this.
|
|
27
|
+
*
|
|
28
|
+
* WHAT IS NOT MODELLED, named rather than papered over: the DURATION.
|
|
29
|
+
* Canon buys "up to its Level in Combat Turns" per task, and this
|
|
30
|
+
* engine has no combat-turn clock at all -- there is no counter to
|
|
31
|
+
* decrement, and inventing one to hold a single feature would be a
|
|
32
|
+
* turn-engine change wearing a sprite task's clothes. What the engine
|
|
33
|
+
* does have is the task economy, so the form stays with the sprite
|
|
34
|
+
* until you take it back or the sprite goes (see
|
|
35
|
+
* Game.returnSustainedForms). That is more generous than the book on
|
|
36
|
+
* duration and exactly right on cost; the deviation is stated here so
|
|
37
|
+
* the next reader does not have to discover it.
|
|
38
|
+
*
|
|
39
|
+
* THE FORM COMES HOME WHEN THE SPRITE DOES. A sprite that is dismissed,
|
|
40
|
+
* killed, or sent to standby hands its held forms back to its owner
|
|
41
|
+
* rather than taking them into the Resonance. Without that, the one
|
|
42
|
+
* command in the game that MOVES a form off the player would be the one
|
|
43
|
+
* command that can silently destroy it -- and the loss would look
|
|
44
|
+
* exactly like a form that had been dropped on purpose.
|
|
45
|
+
*/
|
|
46
|
+
export class SustainCommand extends Command {
|
|
47
|
+
static verb = 'sustain';
|
|
48
|
+
static description = 'Hand a complex form you are holding to a registered sprite, which sustains it for you and takes the -2 instead (SR5 p.256): "sustain <form>". Costs ONE task. Say it again to take the form back, free. A sprite that leaves hands its forms back to you.';
|
|
49
|
+
async execute(args = []) {
|
|
50
|
+
const game = this.game;
|
|
51
|
+
if (!game)
|
|
52
|
+
return `Not here.`;
|
|
53
|
+
const actor = this.actor;
|
|
54
|
+
if (!actor.isTechnomancer()) {
|
|
55
|
+
return `Complex forms are Resonance, and the Resonance doesn't answer to you.`;
|
|
56
|
+
}
|
|
57
|
+
const sprites = game.companions.filter(c => c.kind === 'sprite' && c.registered);
|
|
58
|
+
const holders = sprites.filter(c => (c.npc.sustainedForms?.length ?? 0) > 0);
|
|
59
|
+
const query = (args ?? []).map(w => w.toLowerCase())
|
|
60
|
+
.filter(w => !/^(a|an|the|form|on|to|my)$/.test(w)).join(' ').trim();
|
|
61
|
+
// Bare "sustain": the ledger. Who is holding what, and what it is
|
|
62
|
+
// costing whom -- the two numbers the decision turns on.
|
|
63
|
+
if (query.length === 0) {
|
|
64
|
+
const mine = actor.sustainedForms;
|
|
65
|
+
const lines = [];
|
|
66
|
+
if (holders.length > 0) {
|
|
67
|
+
for (const h of holders) {
|
|
68
|
+
lines.push(` ${h.npc.name} (Level ${h.force}) holds ${h.npc.sustainedForms.map(f => f.key).join(', ')} -- ${h.npc.sustainedForms.length * 2} dice off THEIR pools, none off yours.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (mine.length === 0 && lines.length === 0) {
|
|
72
|
+
return `You hold no complex forms, and nothing of yours is holding one for you.${hint(` ("thread <form>" weaves one.)`)}`;
|
|
73
|
+
}
|
|
74
|
+
const yours = mine.length > 0
|
|
75
|
+
? `You are sustaining ${mine.map(f => f.key).join(', ')} yourself -- ${mine.length * 2} dice off everything you do.`
|
|
76
|
+
: `You are sustaining nothing yourself.`;
|
|
77
|
+
const offer = mine.length > 0 && sprites.length > 0
|
|
78
|
+
? hint(`\n("sustain <form>" hands one to a registered sprite for a task.)`)
|
|
79
|
+
: '';
|
|
80
|
+
return [yours, ...lines].join('\n') + offer;
|
|
81
|
+
}
|
|
82
|
+
// Named a form the sprite already holds: take it back. Free, and
|
|
83
|
+
// checked BEFORE the hand-off path so the same word toggles.
|
|
84
|
+
for (const h of holders) {
|
|
85
|
+
const held = fuzzyPickName(query, h.npc.sustainedForms.map(f => f.key));
|
|
86
|
+
if (held) {
|
|
87
|
+
const idx = h.npc.sustainedForms.findIndex(f => f.key === held);
|
|
88
|
+
const form = h.npc.sustainedForms[idx];
|
|
89
|
+
h.npc.sustainedForms.splice(idx, 1);
|
|
90
|
+
actor.sustainedForms.push(form);
|
|
91
|
+
actor.performAction('takes back a complex form', `${form.key} from ${h.npc.name}`);
|
|
92
|
+
this.scene.updateStatus();
|
|
93
|
+
return `You take ${form.key} back off ${h.npc.name}. The weave is yours again, and so is the -2.`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const mine = actor.sustainedForms;
|
|
97
|
+
if (mine.length === 0) {
|
|
98
|
+
return `You are holding no complex form to hand over.${hint(` ("thread <form>" weaves one first.)`)}`;
|
|
99
|
+
}
|
|
100
|
+
const pickedKey = fuzzyPickName(query, mine.map(f => f.key));
|
|
101
|
+
if (!pickedKey) {
|
|
102
|
+
return `You are not holding anything by that name. Yours: ${mine.map(f => f.key).join(', ')}.`;
|
|
103
|
+
}
|
|
104
|
+
if (sprites.length === 0) {
|
|
105
|
+
const compiled = game.companions.some(c => c.kind === 'sprite');
|
|
106
|
+
return compiled
|
|
107
|
+
? `Only a REGISTERED sprite can carry a form for you -- a compiled one owes you tasks it cannot spend this way (p.256).${hint(` ("register" binds it.)`)}`
|
|
108
|
+
: `No registered sprite of yours is here to take it.${hint(` ("compile <type> <level>", then "register".)`)}`;
|
|
109
|
+
}
|
|
110
|
+
// Which sprite. Named-form-only is the common case, so a single
|
|
111
|
+
// registered sprite is chosen silently; two make you say.
|
|
112
|
+
let target = sprites[0];
|
|
113
|
+
if (sprites.length > 1) {
|
|
114
|
+
const named = fuzzyPickName(query, sprites.map(s => s.npc.name));
|
|
115
|
+
if (!named) {
|
|
116
|
+
return `Which sprite should carry it? Registered and here: ${sprites.map(s => `"${s.npc.name}"`).join(', ')}. ("sustain <form> <sprite>")`;
|
|
117
|
+
}
|
|
118
|
+
target = sprites.find(s => s.npc.name === named);
|
|
119
|
+
}
|
|
120
|
+
const owed = target.services ?? 0;
|
|
121
|
+
if (owed < 1) {
|
|
122
|
+
return `${target.npc.name} owes you nothing more -- there is no task left to spend on carrying a form.${hint(` ("register" it again would buy more, if the book let you; for now, compile another.)`)}`;
|
|
123
|
+
}
|
|
124
|
+
const idx = mine.findIndex(f => f.key === pickedKey);
|
|
125
|
+
const form = mine[idx];
|
|
126
|
+
mine.splice(idx, 1);
|
|
127
|
+
target.npc.sustainedForms.push(form);
|
|
128
|
+
target.services = owed - 1;
|
|
129
|
+
const left = target.services;
|
|
130
|
+
actor.performAction('hands off a complex form', `${form.key} to ${target.npc.name}`);
|
|
131
|
+
this.scene.updateStatus();
|
|
132
|
+
return `${target.npc.name} takes ${form.key} onto itself -- the weave holds, and the -2 is ITS burden now, not yours. One task spent; ${left === 0 ? 'none' : left} ${left === 1 ? 'task' : 'tasks'} still owed.${hint(` ("sustain ${form.key}" takes it back, free.)`)}`;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=sustain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sustain.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sustain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from './command.js';
|
|
2
2
|
import { canReachHost } from '../utilities/planes.js';
|
|
3
|
-
import { canReach, ensureAtSpot } from '../utilities/spots.js';
|
|
3
|
+
import { canReach, ensureAtSpot, sealedRouteTo } from '../utilities/spots.js';
|
|
4
4
|
import { hint } from '../utilities/hints.js';
|
|
5
5
|
export class TakeCommand extends Command {
|
|
6
6
|
static verb = 'take';
|
|
@@ -82,7 +82,15 @@ export class TakeCommand extends Command {
|
|
|
82
82
|
items = items.filter(i => canReach(this.actor, i.atSpot));
|
|
83
83
|
if (items.length === 0 && outOfReach.length > 0) {
|
|
84
84
|
const spotsWith = [...new Set(outOfReach.map(i => i.atSpot))];
|
|
85
|
-
|
|
85
|
+
// ADVERTISE A WALK YOU CAN ACTUALLY TAKE (2D6uZWqiWn9Mrhunc). This
|
|
86
|
+
// line decided with canReach -- spot EQUALITY -- while the walk it
|
|
87
|
+
// suggests is gated by a ROUTE, so goods behind blocking terrain
|
|
88
|
+
// got "move to X" and `move` answered that X was sealed. The
|
|
89
|
+
// listing sent the player at the wall. See sealedRouteTo.
|
|
90
|
+
const sealed = sealedRouteTo(room, this.actor, spotsWith[0]);
|
|
91
|
+
return sealed
|
|
92
|
+
? `Nothing within reach -- the goods are over at the ${spotsWith.join(', the ')}. ${sealed}`
|
|
93
|
+
: `Nothing within reach -- the goods are over at the ${spotsWith.join(', the ')}. ("move to ${spotsWith[0]}")`;
|
|
86
94
|
}
|
|
87
95
|
const lines = [`You sweep ${room.name}:`];
|
|
88
96
|
let tookAnything = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/take.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"take.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/take.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from './command.js';
|
|
2
|
+
import { hostLabel } from '../utilities/grid-names.js';
|
|
2
3
|
import { rollPool, formatRoll } from '../utilities/dice.js';
|
|
3
4
|
import { accrueOverwatch } from '../utilities/overwatch.js';
|
|
4
5
|
import { MAX_MARKS } from '../utilities/marks.js';
|
|
@@ -71,11 +72,11 @@ export class TapCommand extends Command {
|
|
|
71
72
|
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
|
}
|
|
73
74
|
if (host.hostCracked) {
|
|
74
|
-
return `You could -- but
|
|
75
|
+
return `You could -- but ${hostLabel(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
|
}
|
|
76
77
|
const held = host.hostMarksBy.get(actor.name) ?? 0;
|
|
77
78
|
if (held >= MAX_MARKS) {
|
|
78
|
-
return `You already hold ${MAX_MARKS} marks on
|
|
79
|
+
return `You already hold ${MAX_MARKS} marks on ${hostLabel(host)} -- it thinks you belong. Another key would not fit on the ring.${hint(` ("hack" walks you in.)`)}`;
|
|
79
80
|
}
|
|
80
81
|
// THE ROLL. The camera defends with its OWN ratings, not the host's
|
|
81
82
|
// (p.233) -- that is what the cable bought -- so the threshold sits
|
|
@@ -110,11 +111,11 @@ export class TapCommand extends Command {
|
|
|
110
111
|
// its master, which is the same alarm hack.ts raises.
|
|
111
112
|
host.hostAlert = true;
|
|
112
113
|
actor.sneaking = false;
|
|
113
|
-
this.scene.addWorldEvent(`Something forced the cameras in ${room.name} --
|
|
114
|
+
this.scene.addWorldEvent(`Something forced the cameras in ${room.name} -- ${hostLabel(host)} flagged an intrusion and its ice is hunting.`);
|
|
114
115
|
this.scene.updateStatus();
|
|
115
116
|
return [
|
|
116
117
|
`The housing's tamper line trips under your fingers.`,
|
|
117
|
-
` The camera reports itself -- and
|
|
118
|
+
` The camera reports itself -- and ${hostLabel(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.`,
|
|
118
119
|
...godLines,
|
|
119
120
|
].join('\n');
|
|
120
121
|
}
|
|
@@ -145,12 +146,12 @@ export class TapCommand extends Command {
|
|
|
145
146
|
host.hostMarksBy.set(actor.name, now);
|
|
146
147
|
if (mode === 'attack') {
|
|
147
148
|
actor.sneaking = false;
|
|
148
|
-
this.scene.addWorldEvent(`${actor.name} forced the cameras in ${room.name} --
|
|
149
|
+
this.scene.addWorldEvent(`${actor.name} forced the cameras in ${room.name} -- ${hostLabel(host)} felt it go.`);
|
|
149
150
|
}
|
|
150
151
|
this.logger.write(`${actor.name} now holds ${now} mark(s) on ${host.name} via the ${room.name} cameras.`);
|
|
151
152
|
const lines = [
|
|
152
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}`,
|
|
153
|
-
` {cyan-fg}It never gets to hide behind
|
|
154
|
+
` {cyan-fg}It never gets to hide behind ${hostLabel(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}`,
|
|
154
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}`,
|
|
155
156
|
];
|
|
156
157
|
if (mode === 'attack') {
|
|
@@ -162,10 +163,10 @@ export class TapCommand extends Command {
|
|
|
162
163
|
if (host === room) {
|
|
163
164
|
lines.push(` {cyan-fg}${now >= MAX_MARKS
|
|
164
165
|
? `The host thinks you belong now -- "hack" walks straight in.`
|
|
165
|
-
:
|
|
166
|
+
: `${hostLabel(host, { capital: true })} cracks easier with every key you hold${hint(` -- "jack in" and "hack", or come back for another lens`)}.`}{/cyan-fg}`);
|
|
166
167
|
}
|
|
167
168
|
else {
|
|
168
|
-
lines.push(` {cyan-fg}These lenses ride the site network, so the key fits
|
|
169
|
+
lines.push(` {cyan-fg}These lenses ride the site network, so the key fits ${hostLabel(host)}${hint(` -- "jack in", "go ${host.name}", "hack"`)}.{/cyan-fg}`);
|
|
169
170
|
}
|
|
170
171
|
// A mark is all canSnoopFeeds ever wanted (surveillance.ts).
|
|
171
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}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/tap.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,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,OAAO,UAAW,SAAQ,OAAO;IAC3B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;IACpB,MAAM,CAAC,WAAW,GAAG,kbAAkb,CAAC;IAEld,KAAK,CAAC,OAAO,CAAC,OAAiB,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,yEAAyE;QACzE,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,GAAwB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAE/G,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,oCAAoC,IAAI,CAAC,8DAA8D,CAAC,EAAE,CAAC;QACpH,CAAC;QAED,mEAAmE;QACnE,kEAAkE;QAClE,+CAA+C;QAC/C,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAE5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,8LAA8L,IAAI,CAAC,sCAAsC,CAAC,EAAE,CAAC;QACtP,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/tap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Player } from '../models/player.js';
|
|
2
|
+
import type { ISaveFileV1 } from '../types/save-file.js';
|
|
3
|
+
import type { ISceneSeedJson } from '../types/seed/scene-seed.js';
|
|
4
|
+
/**
|
|
5
|
+
* THE ENGINE-SIDE CHARACTER FACTORY -- one payload in, one bootable save
|
|
6
|
+
* out, so the maka-cli.com web generator and the CLI cannot produce
|
|
7
|
+
* different runners from the same description.
|
|
8
|
+
*
|
|
9
|
+
* WHAT THIS IS NOT, because the obvious reading is wrong in two places
|
|
10
|
+
* and both were proposed before the code was read:
|
|
11
|
+
*
|
|
12
|
+
* - It is NOT `Game.buildSaveFile()` parameterised. That is a PRIVATE
|
|
13
|
+
* method on a LIVE game and it serialises contacts, gig pools, rumor
|
|
14
|
+
* indices, sprites and crew. A fresh character has none of that.
|
|
15
|
+
* - It is NOT "the path the CLI's creation walks". ui.ts builds a
|
|
16
|
+
* Player, calls outfitArchetype, and boots a Game; NO SAVE IS WRITTEN
|
|
17
|
+
* AT CREATION. The first save comes later, from a running game. There
|
|
18
|
+
* was no existing path to parameterise.
|
|
19
|
+
*
|
|
20
|
+
* What it IS: the same shape ui.ts uses to build the Player, then
|
|
21
|
+
* `serializePlayer` -- the exported serialiser the live game itself
|
|
22
|
+
* uses (utilities/persistence.ts) -- to write the player block. Sharing
|
|
23
|
+
* that function rather than restating it is the point: a second
|
|
24
|
+
* serialiser is a second thing to drift.
|
|
25
|
+
*
|
|
26
|
+
* DO NOT MODEL A SAVE ON headless-harness.ts's `save()`. It casts
|
|
27
|
+
* through `as unknown as ISaveFileV1` and omits savedAt, reason,
|
|
28
|
+
* summary, hubSeed and hub. It boots in tests and would be unreadable
|
|
29
|
+
* to the launcher's Continue menu.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* THE PAYLOAD, frozen and co-owned with maka-cli.com. Version it here
|
|
33
|
+
* because the engine is the side that has to honour it -- same
|
|
34
|
+
* discipline as REPRO_SCHEMA_VERSION.
|
|
35
|
+
*
|
|
36
|
+
* BUMPING: MINOR for a new optional field; MAJOR when an existing field
|
|
37
|
+
* changes meaning or stops being honoured.
|
|
38
|
+
*/
|
|
39
|
+
export declare const CHARGEN_FACTORY_VERSION = "1.0.0";
|
|
40
|
+
export type ChargenGender = 'male' | 'female';
|
|
41
|
+
export interface IChargenSkill {
|
|
42
|
+
[engineSkillName: string]: number;
|
|
43
|
+
}
|
|
44
|
+
export interface IChargenPayload {
|
|
45
|
+
playerName: string;
|
|
46
|
+
/** The engine models this as a two-value enum, not free text -- see
|
|
47
|
+
* Player.gender. Validated at runtime as well as typed, because a
|
|
48
|
+
* payload arrives as JSON over a wire where a TS type enforces
|
|
49
|
+
* nothing. */
|
|
50
|
+
gender?: ChargenGender;
|
|
51
|
+
combat: Record<string, unknown> & {
|
|
52
|
+
skills?: IChargenSkill;
|
|
53
|
+
};
|
|
54
|
+
qualities?: string[];
|
|
55
|
+
augmentations?: {
|
|
56
|
+
key: string;
|
|
57
|
+
grade?: string;
|
|
58
|
+
}[];
|
|
59
|
+
/** Catalog slugs, from utilities/catalog-data.ts. */
|
|
60
|
+
gear?: {
|
|
61
|
+
slug: string;
|
|
62
|
+
qty?: number;
|
|
63
|
+
}[];
|
|
64
|
+
/** ADVISORY ONLY -- see the karma/nuyen note below. Supplied so the
|
|
65
|
+
* web generator's arithmetic can be CHECKED, not so it can win. */
|
|
66
|
+
karma?: number;
|
|
67
|
+
nuyen?: number;
|
|
68
|
+
}
|
|
69
|
+
export declare class ChargenPayloadError extends Error {
|
|
70
|
+
constructor(message: string);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Builds the Player a payload describes. Exported separately from the
|
|
74
|
+
* save so a caller that wants the live object (a preview, a dossier)
|
|
75
|
+
* does not have to serialise and re-read one.
|
|
76
|
+
*/
|
|
77
|
+
export declare function buildPlayerFromChargen(payload: IChargenPayload): Player;
|
|
78
|
+
/**
|
|
79
|
+
* The payload's save. `hubSeed` is the SHIPPED scene2 seed by ruling --
|
|
80
|
+
* it is embedded rather than referenced so a resume never depends on
|
|
81
|
+
* scene2.json still existing or still matching.
|
|
82
|
+
*/
|
|
83
|
+
export declare function createNewCharacterSave(payload: IChargenPayload, hubSeed: ISceneSeedJson): ISaveFileV1;
|