@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
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { Player } from '../models/player.js';
|
|
2
|
+
import { Room } from '../models/room.js';
|
|
3
|
+
import { Item } from '../models/item.js';
|
|
4
|
+
import { Category, Size, Rating } from '../types/shared/item-enum.js';
|
|
5
|
+
import { getAug, getGrade, gradedAug, STANDARD_GRADE } from '../augmentations.js';
|
|
6
|
+
import { getQuality, creationSplit } from '../qualities.js';
|
|
7
|
+
import { findCatalogItem } from '../utilities/catalog.js';
|
|
8
|
+
import { serializePlayer } from '../utilities/persistence.js';
|
|
9
|
+
import { SAVE_VERSION } from '../types/save-file.js';
|
|
10
|
+
/**
|
|
11
|
+
* THE ENGINE-SIDE CHARACTER FACTORY -- one payload in, one bootable save
|
|
12
|
+
* out, so the maka-cli.com web generator and the CLI cannot produce
|
|
13
|
+
* different runners from the same description.
|
|
14
|
+
*
|
|
15
|
+
* WHAT THIS IS NOT, because the obvious reading is wrong in two places
|
|
16
|
+
* and both were proposed before the code was read:
|
|
17
|
+
*
|
|
18
|
+
* - It is NOT `Game.buildSaveFile()` parameterised. That is a PRIVATE
|
|
19
|
+
* method on a LIVE game and it serialises contacts, gig pools, rumor
|
|
20
|
+
* indices, sprites and crew. A fresh character has none of that.
|
|
21
|
+
* - It is NOT "the path the CLI's creation walks". ui.ts builds a
|
|
22
|
+
* Player, calls outfitArchetype, and boots a Game; NO SAVE IS WRITTEN
|
|
23
|
+
* AT CREATION. The first save comes later, from a running game. There
|
|
24
|
+
* was no existing path to parameterise.
|
|
25
|
+
*
|
|
26
|
+
* What it IS: the same shape ui.ts uses to build the Player, then
|
|
27
|
+
* `serializePlayer` -- the exported serialiser the live game itself
|
|
28
|
+
* uses (utilities/persistence.ts) -- to write the player block. Sharing
|
|
29
|
+
* that function rather than restating it is the point: a second
|
|
30
|
+
* serialiser is a second thing to drift.
|
|
31
|
+
*
|
|
32
|
+
* DO NOT MODEL A SAVE ON headless-harness.ts's `save()`. It casts
|
|
33
|
+
* through `as unknown as ISaveFileV1` and omits savedAt, reason,
|
|
34
|
+
* summary, hubSeed and hub. It boots in tests and would be unreadable
|
|
35
|
+
* to the launcher's Continue menu.
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* THE PAYLOAD, frozen and co-owned with maka-cli.com. Version it here
|
|
39
|
+
* because the engine is the side that has to honour it -- same
|
|
40
|
+
* discipline as REPRO_SCHEMA_VERSION.
|
|
41
|
+
*
|
|
42
|
+
* BUMPING: MINOR for a new optional field; MAJOR when an existing field
|
|
43
|
+
* changes meaning or stops being honoured.
|
|
44
|
+
*/
|
|
45
|
+
export const CHARGEN_FACTORY_VERSION = '1.0.0';
|
|
46
|
+
export class ChargenPayloadError extends Error {
|
|
47
|
+
constructor(message) {
|
|
48
|
+
super(message);
|
|
49
|
+
this.name = 'ChargenPayloadError';
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Wearables a runner starts already wearing. Mirrors archetypes.ts's
|
|
53
|
+
* EQUIP_ON_START, which is module-private there; kept in step by a test
|
|
54
|
+
* that compares the two sets rather than by hoping. */
|
|
55
|
+
const EQUIP_ON_START = new Set([
|
|
56
|
+
Category.Weapon, Category.MeleeWeapon, Category.RangedWeapon,
|
|
57
|
+
Category.Armor, Category.BodyArmor, Category.ArmorClothing,
|
|
58
|
+
Category.Helmet, Category.Hat, Category.Gloves, Category.Boots, Category.Commlink,
|
|
59
|
+
Category.Clothing, Category.LegArmor,
|
|
60
|
+
]);
|
|
61
|
+
/**
|
|
62
|
+
* ENUM KEY BACK TO ENUM VALUE -- the trap, in its third costume.
|
|
63
|
+
*
|
|
64
|
+
* headless-harness.ts records enum KEY vs VALUE costing two sessions an
|
|
65
|
+
* hour, and carries `enumKeyFor` for the value->key direction that a
|
|
66
|
+
* SAVED item needs. Catalog rows go the other way: catalog-data.ts
|
|
67
|
+
* declares `size: 'Tiny'` (a KEY) while the Item constructor validates
|
|
68
|
+
* against VALUES ('tiny') and throws outright on a mismatch.
|
|
69
|
+
*
|
|
70
|
+
* This function existing is not incidental -- the first cut of the gear
|
|
71
|
+
* path did not have it and died on "Invalid size value for Gel Rounds:
|
|
72
|
+
* Tiny". Left as a lesson rather than a silent fix, because the same
|
|
73
|
+
* trap will meet whoever wires the next catalog-fed feature.
|
|
74
|
+
*/
|
|
75
|
+
function enumValueFor(enumObj, given) {
|
|
76
|
+
if (given === undefined)
|
|
77
|
+
return undefined;
|
|
78
|
+
// Already a value: nothing to do.
|
|
79
|
+
if (Object.values(enumObj).includes(given))
|
|
80
|
+
return given;
|
|
81
|
+
return enumObj[given] ?? given;
|
|
82
|
+
}
|
|
83
|
+
/** A catalog row is not an Item. The conversion lives here because
|
|
84
|
+
* nothing else in the engine needed it -- `buy` works off shelf stock
|
|
85
|
+
* that is already instantiated. */
|
|
86
|
+
function itemFromSlug(slug) {
|
|
87
|
+
const row = findCatalogItem(slug);
|
|
88
|
+
if (!row) {
|
|
89
|
+
throw new ChargenPayloadError(`No catalog item with slug "${slug}". Slugs come from utilities/catalog-data.ts.`);
|
|
90
|
+
}
|
|
91
|
+
return new Item({
|
|
92
|
+
name: row.name,
|
|
93
|
+
description: row.description,
|
|
94
|
+
category: enumValueFor(Category, row.category),
|
|
95
|
+
size: (enumValueFor(Size, row.size) ?? Size.Small),
|
|
96
|
+
rating: (enumValueFor(Rating, row.rating) ?? Rating.Standard),
|
|
97
|
+
shape: row.shape ?? 'Rectangle',
|
|
98
|
+
color: row.color ?? 'Gray',
|
|
99
|
+
texture: row.texture ?? 'Plain',
|
|
100
|
+
weight: row.weight ?? 0.5,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* CANON OWNS THE CREATION LEDGER (SR5 p.71, p.94/98, via
|
|
105
|
+
* qualities.ts creationSplit): the positives are bought, the negatives
|
|
106
|
+
* refund, at most 7 karma carries into play and up to 10 more converts
|
|
107
|
+
* to nuyen at 2,000 a point.
|
|
108
|
+
*
|
|
109
|
+
* So the payload's karma and nuyen are VALIDATED against the derivation
|
|
110
|
+
* and REJECTED on mismatch -- never silently overridden. Coordinator
|
|
111
|
+
* ruling, and the reason is that a silent correction ships a web
|
|
112
|
+
* character that diverges from its CLI twin while both look fine; a
|
|
113
|
+
* rejection surfaces the generator's bug at the seam, once, with both
|
|
114
|
+
* numbers named.
|
|
115
|
+
*/
|
|
116
|
+
function ledgerFor(payload) {
|
|
117
|
+
const derived = creationSplit(payload.qualities ?? []);
|
|
118
|
+
const claims = [];
|
|
119
|
+
if (payload.karma !== undefined && payload.karma !== derived.karma) {
|
|
120
|
+
claims.push(`karma: payload says ${payload.karma}, canon derives ${derived.karma}`);
|
|
121
|
+
}
|
|
122
|
+
if (payload.nuyen !== undefined && payload.nuyen !== derived.nuyen) {
|
|
123
|
+
claims.push(`nuyen: payload says ${payload.nuyen}, canon derives ${derived.nuyen}`);
|
|
124
|
+
}
|
|
125
|
+
if (claims.length > 0) {
|
|
126
|
+
throw new ChargenPayloadError(`The creation ledger disagrees with canon (SR5 p.71/94/98). ${claims.join('; ')}. `
|
|
127
|
+
+ `Qualities given: ${(payload.qualities ?? []).join(', ') || 'none'}. `
|
|
128
|
+
+ `The engine derives both from the qualities -- fix the generator rather than the engine.`);
|
|
129
|
+
}
|
|
130
|
+
return derived;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Builds the Player a payload describes. Exported separately from the
|
|
134
|
+
* save so a caller that wants the live object (a preview, a dossier)
|
|
135
|
+
* does not have to serialise and re-read one.
|
|
136
|
+
*/
|
|
137
|
+
export function buildPlayerFromChargen(payload) {
|
|
138
|
+
if (!payload.playerName?.trim()) {
|
|
139
|
+
throw new ChargenPayloadError('A character needs a name.');
|
|
140
|
+
}
|
|
141
|
+
// The same nowhere-room ui.ts and buildPlayerFromSave both use: a
|
|
142
|
+
// Player needs somewhere to stand before a scene exists.
|
|
143
|
+
const nexus = new Room({
|
|
144
|
+
name: 'Nexus',
|
|
145
|
+
description: 'A featureless room where lost souls drift.',
|
|
146
|
+
roomType: 'void',
|
|
147
|
+
});
|
|
148
|
+
const { skills, ...attrs } = payload.combat ?? {};
|
|
149
|
+
const player = new Player({
|
|
150
|
+
playerName: payload.playerName,
|
|
151
|
+
startLocation: nexus,
|
|
152
|
+
combat: { ...attrs, skills: skills ?? {} },
|
|
153
|
+
});
|
|
154
|
+
if (payload.gender !== undefined) {
|
|
155
|
+
// Validated as well as typed: a payload crosses a wire as JSON,
|
|
156
|
+
// where a TypeScript union enforces nothing at all.
|
|
157
|
+
if (payload.gender !== 'male' && payload.gender !== 'female') {
|
|
158
|
+
throw new ChargenPayloadError(`Gender is "male" or "female" in this engine; got "${String(payload.gender)}". `
|
|
159
|
+
+ `It is a two-value enum on Player, not free text.`);
|
|
160
|
+
}
|
|
161
|
+
player.gender = payload.gender;
|
|
162
|
+
}
|
|
163
|
+
// QUALITIES FIRST: the ledger is derived from them, and addQuality is
|
|
164
|
+
// what the CLI path uses.
|
|
165
|
+
for (const key of payload.qualities ?? []) {
|
|
166
|
+
if (!getQuality(key)) {
|
|
167
|
+
throw new ChargenPayloadError(`No quality called "${key}" (see qualities.ts QUALITIES).`);
|
|
168
|
+
}
|
|
169
|
+
player.addQuality(key);
|
|
170
|
+
}
|
|
171
|
+
const ledger = ledgerFor(payload);
|
|
172
|
+
player.karma += ledger.karma;
|
|
173
|
+
// Converted karma arrives as a CREDSTICK, never a floating number --
|
|
174
|
+
// currency only counts when a carrier in the pack holds it. Same
|
|
175
|
+
// pattern as outfitArchetype and the job-payment stick.
|
|
176
|
+
if (ledger.nuyen > 0) {
|
|
177
|
+
const stick = new Item({
|
|
178
|
+
name: 'Certified Credstick (gear money)',
|
|
179
|
+
description: 'Whatever was left when the outfitting was done -- certified, anonymous, and spending fast.',
|
|
180
|
+
size: Size.Tiny, category: Category.Credstick,
|
|
181
|
+
shape: 'Rectangle', color: 'Gunmetal', texture: 'Smooth',
|
|
182
|
+
rating: Rating.Standard, weight: 0.05, transferable: true,
|
|
183
|
+
});
|
|
184
|
+
stick.addCurrency(ledger.nuyen);
|
|
185
|
+
player.addInventory(stick);
|
|
186
|
+
stick.owner = player.name;
|
|
187
|
+
}
|
|
188
|
+
// CHROME BEFORE GEAR, as at creation: essence is paid first so the
|
|
189
|
+
// Magic/Resonance burn-down lands before anything reads the totals.
|
|
190
|
+
for (const entry of payload.augmentations ?? []) {
|
|
191
|
+
const aug = getAug(entry.key);
|
|
192
|
+
if (!aug) {
|
|
193
|
+
throw new ChargenPayloadError(`No augmentation with key "${entry.key}" (see augmentations.ts).`);
|
|
194
|
+
}
|
|
195
|
+
if (entry.grade && !getGrade(entry.grade)) {
|
|
196
|
+
throw new ChargenPayloadError(`No ware grade "${entry.grade}" (see WARE_GRADES).`);
|
|
197
|
+
}
|
|
198
|
+
if (!player.hasAug(entry.key)) {
|
|
199
|
+
player.installAug(gradedAug(aug, getGrade(entry.grade) ?? STANDARD_GRADE));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
for (const entry of payload.gear ?? []) {
|
|
203
|
+
// QTY > 1 CANNOT BE HONOURED, and is refused rather than quietly
|
|
204
|
+
// granted once. Inventory is a Map keyed by lowercased name
|
|
205
|
+
// (models/inventory.ts addItem), so adding a second Gel Rounds
|
|
206
|
+
// REPLACES the first -- a runner can hold exactly one item of any
|
|
207
|
+
// given name. Granting one where three were asked for is the
|
|
208
|
+
// "quietly does less than it says" failure this codebase keeps
|
|
209
|
+
// paying for, and it would be invisible on the payload side.
|
|
210
|
+
if (entry.qty !== undefined && entry.qty > 1) {
|
|
211
|
+
throw new ChargenPayloadError(`"${entry.slug}" was asked for qty ${entry.qty}, and this engine cannot hold it. `
|
|
212
|
+
+ `Inventory is keyed by item NAME, so a second copy replaces the first -- `
|
|
213
|
+
+ `one item per name, always. Emit a single entry, or model stacks as a rating/quantity `
|
|
214
|
+
+ `on the item itself if the catalog ever grows one.`);
|
|
215
|
+
}
|
|
216
|
+
const item = itemFromSlug(entry.slug);
|
|
217
|
+
player.addInventory(item);
|
|
218
|
+
item.owner = player.name;
|
|
219
|
+
if (EQUIP_ON_START.has(item.category)) {
|
|
220
|
+
try {
|
|
221
|
+
player.equip(item);
|
|
222
|
+
}
|
|
223
|
+
catch { /* a second weapon just stays holstered */ }
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return player;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* The payload's save. `hubSeed` is the SHIPPED scene2 seed by ruling --
|
|
230
|
+
* it is embedded rather than referenced so a resume never depends on
|
|
231
|
+
* scene2.json still existing or still matching.
|
|
232
|
+
*/
|
|
233
|
+
export function createNewCharacterSave(payload, hubSeed) {
|
|
234
|
+
const player = buildPlayerFromChargen(payload);
|
|
235
|
+
return {
|
|
236
|
+
version: SAVE_VERSION,
|
|
237
|
+
savedAt: new Date().toISOString(),
|
|
238
|
+
reason: 'creation',
|
|
239
|
+
playerName: player.name,
|
|
240
|
+
summary: {
|
|
241
|
+
archetypeName: player.archetypeName,
|
|
242
|
+
karma: player.karma,
|
|
243
|
+
currency: player.currency,
|
|
244
|
+
lifestyleTier: 'street',
|
|
245
|
+
hubName: hubSeed.name ?? 'the hub',
|
|
246
|
+
},
|
|
247
|
+
hubSeed,
|
|
248
|
+
player: serializePlayer(player),
|
|
249
|
+
game: {},
|
|
250
|
+
hub: {},
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=chargen-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chargen-factory.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/chargen-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -129,10 +129,39 @@ export function buildReproScene(fixture) {
|
|
|
129
129
|
if (items.length > MAX_ITEMS) {
|
|
130
130
|
throw new ReproFixtureError(`A repro carries at most ${MAX_ITEMS} items; this one has ${items.length}.`);
|
|
131
131
|
}
|
|
132
|
+
// A CIRCULATING NPC HOLDS NOTHING. Refused rather than resolved:
|
|
133
|
+
// "guarding" and "atDoorway" both mean "stands in the doorway", and
|
|
134
|
+
// "circulating" means "stands nowhere". A fixture asking for both
|
|
135
|
+
// would build, walk, and hold the door open while claiming to guard
|
|
136
|
+
// it -- the same silent-nothing this file exists to prevent.
|
|
137
|
+
const contradictory = npcs.find(n => n.circulating && (n.guarding || n.atDoorway));
|
|
138
|
+
if (contradictory) {
|
|
139
|
+
throw new ReproFixtureError(`"${contradictory.name}" is asked to circulate AND hold the doorway. `
|
|
140
|
+
+ `A circulating NPC stands nowhere, so it can guard nothing -- pick one.`);
|
|
141
|
+
}
|
|
132
142
|
const duplicateNpc = npcs.find((n, i) => npcs.findIndex(o => o.name === n.name) !== i);
|
|
133
143
|
if (duplicateNpc) {
|
|
134
144
|
throw new ReproFixtureError(`Two NPCs are both called "${duplicateNpc.name}" -- a name has to pick one body out.`);
|
|
135
145
|
}
|
|
146
|
+
// ICE NEEDS SOMETHING TO GUARD. Refused rather than promoted to a
|
|
147
|
+
// host: a builder that quietly invented the host would be inventing
|
|
148
|
+
// the very fixture the bench exists to demonstrate.
|
|
149
|
+
const homelessIce = npcs.find(n => n.ice) && !fixture.host;
|
|
150
|
+
if (homelessIce) {
|
|
151
|
+
throw new ReproFixtureError(`This fixture has ice but no host. Intrusion countermeasures guard a node -- `
|
|
152
|
+
+ `add "host": {} (or give it a rating and access) so there is something for it to be inside.`);
|
|
153
|
+
}
|
|
154
|
+
// ICE DOES NOT STAND ANYWHERE, AND CARRIES NOTHING (raised by
|
|
155
|
+
// backlog-session-1). Spots are MEAT positions -- spotOf returns
|
|
156
|
+
// undefined off the meat plane -- so a doorway or a patrol route on
|
|
157
|
+
// ice is silently inert rather than wrong, and silently inert is
|
|
158
|
+
// exactly what these invariants exist to catch. `armed` is a pistol
|
|
159
|
+
// and a commlink, which on a countermeasure is meaningless at best.
|
|
160
|
+
const misplacedIce = npcs.find(n => n.ice && (n.atDoorway || n.guarding || n.circulating || n.armed));
|
|
161
|
+
if (misplacedIce) {
|
|
162
|
+
throw new ReproFixtureError(`"${misplacedIce.name}" is ice, so it cannot also stand in a doorway, guard, circulate or carry a gun. `
|
|
163
|
+
+ `Ice lives in the host, not on the floor -- drop the meat-side flags, or drop "ice".`);
|
|
164
|
+
}
|
|
136
165
|
const barrier = fixture.barrier;
|
|
137
166
|
const direction = barrier?.sealsExit ?? Direction.NORTH;
|
|
138
167
|
const startSide = fixture.start ?? 'barrier';
|
|
@@ -208,7 +237,36 @@ export function buildReproScene(fixture) {
|
|
|
208
237
|
if (level) {
|
|
209
238
|
spots.push({ name: level.name, level: 1 });
|
|
210
239
|
}
|
|
240
|
+
// `climbOnly` is applied AFTER the grid exists, in buildReproScene
|
|
241
|
+
// below -- the seed cannot express "no ladder", because the safe link
|
|
242
|
+
// is synthesised by the grid rather than declared by the room.
|
|
243
|
+
// THE HOST, on whichever side was asked for.
|
|
244
|
+
//
|
|
245
|
+
// INVARIANT 4: a host goes on ONE room, and by default the one the
|
|
246
|
+
// runner is standing in. A bench whose node sits behind the door it
|
|
247
|
+
// is also testing makes the reviewer walk before they can type the
|
|
248
|
+
// verb under review, and the first thing they will report is that
|
|
249
|
+
// `hack` says there is no host here.
|
|
250
|
+
const host = fixture.host;
|
|
251
|
+
const hostSide = host?.side ?? startSide;
|
|
252
|
+
if (host?.rating !== undefined && (host.rating < 1 || host.rating > 12)) {
|
|
253
|
+
throw new ReproFixtureError(`A host rating is 1-12 (SR5 p.247); this one is ${host.rating}.`);
|
|
254
|
+
}
|
|
255
|
+
/** hasNode/nodeAccess/hostRating/watched already mean exactly this on
|
|
256
|
+
* the room seed -- see types/seed/room-seed.ts. Nothing is invented
|
|
257
|
+
* here, so a bench cannot describe a host the engine cannot build. */
|
|
258
|
+
const hostFields = (side) => (host && hostSide === side
|
|
259
|
+
? { hasNode: true, nodeAccess: host.access ?? 'wireless', hostRating: host.rating }
|
|
260
|
+
: {});
|
|
261
|
+
// Cameras WITHOUT a host. Never emitted alongside one: a host is
|
|
262
|
+
// always watched already, and saying it twice invites the next reader
|
|
263
|
+
// to think the two flags are independent.
|
|
264
|
+
const watchedFields = (side) => (fixture.watched && !(host && hostSide === side)
|
|
265
|
+
? { watched: true }
|
|
266
|
+
: {});
|
|
211
267
|
const barrierRoom = {
|
|
268
|
+
...hostFields('barrier'),
|
|
269
|
+
...watchedFields('barrier'),
|
|
212
270
|
name: REPRO_BARRIER_ROOM,
|
|
213
271
|
description: barrier
|
|
214
272
|
? `A short concrete run ending at one door, ${direction} of you. `
|
|
@@ -218,12 +276,14 @@ export function buildReproScene(fixture) {
|
|
|
218
276
|
roomType: 'Street',
|
|
219
277
|
size: level ? 'large' : 'medium',
|
|
220
278
|
spots,
|
|
221
|
-
levels: level ? [{ name: level.name, side: level.side ?? 'north', kind: level.kind ?? 'catwalk' }] : undefined,
|
|
279
|
+
levels: level ? [{ name: level.name, side: level.side ?? 'north', kind: level.kind ?? 'catwalk', climbOnly: level.climbOnly === true }] : undefined,
|
|
222
280
|
isStartRoom: startSide === 'barrier',
|
|
223
281
|
exits: [{ direction, targetRoom: REPRO_FAR_ROOM, atSpot: REPRO_DOORWAY_SPOT }],
|
|
224
282
|
devices: device ? [device] : undefined,
|
|
225
283
|
};
|
|
226
284
|
const farRoom = {
|
|
285
|
+
...hostFields('far'),
|
|
286
|
+
...watchedFields('far'),
|
|
227
287
|
name: REPRO_FAR_ROOM,
|
|
228
288
|
description: `The other side of the door, which lies ${OPPOSITE[direction]} of you`
|
|
229
289
|
+ `${barrier ? ` and is held from the far side by ${device.name}` : ''}. Bare, and no further out.`,
|
|
@@ -240,6 +300,32 @@ export function buildReproScene(fixture) {
|
|
|
240
300
|
const npcSeeds = npcs.map(npc => {
|
|
241
301
|
const side = npc.side ?? 'barrier';
|
|
242
302
|
const inDoorway = standsInDoorway(npc);
|
|
303
|
+
// ICE LIVES IN THE HOST'S ROOM, and takes its side from the host
|
|
304
|
+
// rather than from `side` -- one placement rule, not two. plane
|
|
305
|
+
// 'matrix' is what MAKES it ice (npc-seed.ts), and scene-factory
|
|
306
|
+
// then treats it as opposition by construction, so the fixture
|
|
307
|
+
// never has to declare hostility to get hostile ice.
|
|
308
|
+
//
|
|
309
|
+
// No startSpot, deliberately: a spot is a meat position and would
|
|
310
|
+
// be silently inert on a persona. The refusal above stops a fixture
|
|
311
|
+
// ASKING for one; this is the same rule on the emitting side.
|
|
312
|
+
if (npc.ice) {
|
|
313
|
+
return {
|
|
314
|
+
plane: 'matrix',
|
|
315
|
+
description: npc.concept,
|
|
316
|
+
dialogue: [],
|
|
317
|
+
player: {
|
|
318
|
+
name: npc.name,
|
|
319
|
+
startLocation: roomFor(fixture.host?.side ?? startSide),
|
|
320
|
+
lifestyleChoices: [],
|
|
321
|
+
combat: {
|
|
322
|
+
body: 4, agility: 4, reaction: 4, combatSkill: 3, strength: 4,
|
|
323
|
+
willpower: 3, logic: 3, intuition: 3, charisma: 3, edge: 2,
|
|
324
|
+
skills: { unarmed: 3, perception: 3, negotiation: 3 },
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
};
|
|
328
|
+
}
|
|
243
329
|
return {
|
|
244
330
|
description: npc.concept,
|
|
245
331
|
dialogue: [],
|
|
@@ -250,7 +336,10 @@ export function buildReproScene(fixture) {
|
|
|
250
336
|
// direction the barrier seals, never supplied -- a guarding NPC
|
|
251
337
|
// standing anywhere else holds nothing, silently, and the
|
|
252
338
|
// walkthrough would still pass.
|
|
253
|
-
|
|
339
|
+
// Omitted entirely when circulating -- an undefined startSpot is
|
|
340
|
+
// what "no cell" means to the scene factory. Not the empty
|
|
341
|
+
// string, which would read as a spot whose name is nothing.
|
|
342
|
+
...(npc.circulating ? {} : { startSpot: inDoorway ? REPRO_DOORWAY_SPOT : REPRO_FLOOR_SPOT }),
|
|
254
343
|
guarding: npc.guarding === true,
|
|
255
344
|
lifestyleChoices: [],
|
|
256
345
|
combat: {
|
|
@@ -273,7 +362,7 @@ export function buildReproScene(fixture) {
|
|
|
273
362
|
rating: 'Common',
|
|
274
363
|
weight: 0.1,
|
|
275
364
|
room: roomFor(it.side ?? 'barrier'),
|
|
276
|
-
atSpot: REPRO_FLOOR_SPOT,
|
|
365
|
+
atSpot: it.atDoorway ? REPRO_DOORWAY_SPOT : REPRO_FLOOR_SPOT,
|
|
277
366
|
}));
|
|
278
367
|
// INVARIANT 4: the key is on the side the runner starts on. A key
|
|
279
368
|
// behind the door it opens is a bench nobody can work, and it reads
|
|
@@ -321,6 +410,30 @@ export function buildReproScene(fixture) {
|
|
|
321
410
|
player: {
|
|
322
411
|
name: 'Testbed',
|
|
323
412
|
startLocation: startRoom,
|
|
413
|
+
// THE RUNNER STARTS NOWHERE, and this line does not yet fix it.
|
|
414
|
+
//
|
|
415
|
+
// Stated rather than quietly omitted, because it BLOCKS the climb
|
|
416
|
+
// bench this fixture work exists for. Every bench NPC gets a
|
|
417
|
+
// spot; the runner gets none, so spotOf() returns undefined for
|
|
418
|
+
// the one actor a reviewer controls -- and move.ts derives
|
|
419
|
+
// climbSteps from that spot, so with none there is no path, no
|
|
420
|
+
// climb link, and no climbing test. A level fixture walks you
|
|
421
|
+
// onto the catwalk with no roll at all.
|
|
422
|
+
//
|
|
423
|
+
// `startSpot` IS declared on player-seed.ts and scene-factory
|
|
424
|
+
// never reads it for the player (NPCs get theirs applied a
|
|
425
|
+
// hundred lines earlier). Setting it here alone is therefore
|
|
426
|
+
// inert today -- kept because it is the correct INTENT and the
|
|
427
|
+
// seed is where the intent belongs, and reported rather than
|
|
428
|
+
// half-wired: the remaining piece is that something re-places the
|
|
429
|
+
// runner after synthesis, and the currentLocation setter clears
|
|
430
|
+
// atSpot on every room change.
|
|
431
|
+
//
|
|
432
|
+
// Measured, not assumed: with climbOnly the grid really does emit
|
|
433
|
+
// climb,climb instead of ladder,climb, and pathClimbSteps finds
|
|
434
|
+
// the link -- the bench still says "You cross to the catwalk"
|
|
435
|
+
// because the runner has no spot to path FROM.
|
|
436
|
+
startSpot: REPRO_FLOOR_SPOT,
|
|
324
437
|
// NO RESIDENCE. Copied from paritySeed originally, where it is
|
|
325
438
|
// right -- that fixture models a real run. A bench models nothing
|
|
326
439
|
// and nobody lives in it; declaring a home here only invites the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repro-scene.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/repro-scene.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repro-scene.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/repro-scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -320,6 +320,9 @@ ${JSON_ONLY}
|
|
|
320
320
|
// building, and marking them turns an ordinary scene into a
|
|
321
321
|
// brawl. If in doubt, leave it out -- a guard who stays calm is
|
|
322
322
|
// a missed beat, a hostile bartender is a broken scene.
|
|
323
|
+
// ICE NEEDS NO FLAG: a "matrix" NPC is intrusion countermeasures
|
|
324
|
+
// and is treated as opposition automatically. Write it only to
|
|
325
|
+
// say FALSE, for the rare tame construct.
|
|
323
326
|
}],
|
|
324
327
|
"devices": [{
|
|
325
328
|
"name": string, "concept": string, // what it physically IS (a maglock, a keypad, a
|