@maka/maka-cli 5.90.0 → 5.92.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/typescript/package.json +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +9 -9
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +54 -3
- package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +987 -53
- package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/ask.d.ts +0 -14
- package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +23 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/breach.d.ts +10 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js +11 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +14 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +30 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +5 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +5 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +10 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +2 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +2 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +8 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +2 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +55 -17
- package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/project.js +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/project.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +14 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +3 -3
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +109 -1
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +62 -16
- package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +26 -3
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +95 -3
- package/bundle/typescript/src/commands/game/sideQuest/game.js +237 -15
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +5 -1
- package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js +45 -2
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +65 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js +83 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +153 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +197 -12
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +73 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +97 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +33 -1
- package/bundle/typescript/src/commands/game/sideQuest/qualities.js +80 -2
- package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +4 -4
- package/bundle/typescript/src/commands/game/sideQuest/skill-groups.d.ts +120 -0
- package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js +135 -0
- package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +34 -2
- package/bundle/typescript/src/commands/game/sideQuest/ui.js +36 -0
- package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.d.ts +116 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.js +127 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +123 -2
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +131 -2
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +170 -12
- package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.d.ts +139 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js +307 -5
- package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.d.ts +41 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +41 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.d.ts +98 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.js +137 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.d.ts +38 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +106 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js +19 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +2 -1
- 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 +22 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +27 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +79 -44
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
- package/package.json +1 -1
|
@@ -117,5 +117,113 @@
|
|
|
117
117
|
// so old scenes and saves keep working and no SAVE_VERSION is owed:
|
|
118
118
|
// insideHost is session state, cleared on every route out of the
|
|
119
119
|
// Matrix, and is never written to a save.
|
|
120
|
-
|
|
120
|
+
// 1.19.0 (2026-08-31): A BUMP THE 5.90.0 WAVE OWED AND DID NOT TAKE.
|
|
121
|
+
// Nothing new ships here. This is the version number four merged PRs
|
|
122
|
+
// should have carried, recorded late and in their own words rather
|
|
123
|
+
// than folded quietly into the next feature that happened along.
|
|
124
|
+
//
|
|
125
|
+
// The rule this file states is that a change altering behaviour a
|
|
126
|
+
// SERVER-HOSTED session shares with clients bumps the version. Three
|
|
127
|
+
// changes in v5.90.0 did exactly that and went out on 1.18.0, so a
|
|
128
|
+
// mixed-version table has been resolving them differently with no
|
|
129
|
+
// skew tripwire firing:
|
|
130
|
+
// - COMMAND SEMANTICS, `thread <form>` (#146): a complex form with no
|
|
131
|
+
// target named now REFUSES where it used to fire. The lone-hostile
|
|
132
|
+
// and current-opponent fallbacks are gone, and Stitches and Kill
|
|
133
|
+
// Complex Form stopped choosing a sprite or a weave for you. A
|
|
134
|
+
// client on 1.18.0 rolls where a client on this version does not.
|
|
135
|
+
// - COMMAND SEMANTICS, `mark` and `hack` on a PAN (#147): both refuse
|
|
136
|
+
// from inside a host, because a PAN is on the outside grid (p.246).
|
|
137
|
+
// Same disagreement, opposite direction -- 1.18.0 rolls an action
|
|
138
|
+
// this version declines.
|
|
139
|
+
// - TARGET RESOLUTION in shared scenes (#142): the host wall is read
|
|
140
|
+
// by the verbs that pick a target, and seeded ice now stands inside
|
|
141
|
+
// the node it guards. Two clients disagree about what is in reach.
|
|
142
|
+
//
|
|
143
|
+
// OWNED, not merely observed: #142, #146 and #147 are mine, and the
|
|
144
|
+
// omission was mine three times over. It is corrected on its own
|
|
145
|
+
// rather than riding a feature branch, so the number moves for the
|
|
146
|
+
// reason the number exists.
|
|
147
|
+
// 1.20.0 (2026-08-31): SIX MORE QUALITIES, and the chargen payload is
|
|
148
|
+
// SHARED -- the web chargen reads qualities.js live (loadEngineModule),
|
|
149
|
+
// so QUALITIES is not a client-side list. Perceptive, Trustworthy,
|
|
150
|
+
// Codeslinger (Hack on the Fly), Bad Rep, Uncouth and Codeblock (Brute
|
|
151
|
+
// Force) each join it wired to a real pool, and a save written here can
|
|
152
|
+
// carry a key an older client resolves to `undefined` and silently
|
|
153
|
+
// ignores. The two clients then disagree about that character's dice
|
|
154
|
+
// in every social, perception and Matrix test the quality touches.
|
|
155
|
+
//
|
|
156
|
+
// ITS OWN NUMBER, DELIBERATELY. 1.19.0 above is a correction owed by
|
|
157
|
+
// an earlier wave and says so; letting this ride it would repeat the
|
|
158
|
+
// mistake that entry exists to record -- a version moving because
|
|
159
|
+
// something ELSE happened to change.
|
|
160
|
+
// 1.21.0 (2026-08-31): RATED AUGMENTATIONS BECOME FAMILIES. Same shared
|
|
161
|
+
// surface as 1.20.0's qualities, one catalog over: the web chargen
|
|
162
|
+
// reads augmentations.js live, so AUGMENTATIONS is a shared payload
|
|
163
|
+
// rather than a client-side list. Seven tiers join it -- Reaction
|
|
164
|
+
// Enhancers I/III, Cerebral Booster I/III, Tailored Pheromones I,
|
|
165
|
+
// Damage Compensator 1/2 -- and a save written here can carry a key an
|
|
166
|
+
// older client resolves to `undefined` and silently ignores, so the two
|
|
167
|
+
// disagree about that character's dice.
|
|
168
|
+
//
|
|
169
|
+
// AND ONE RULE CHANGES FOR EVERYONE, which is why this is a minor bump
|
|
170
|
+
// and not a data-only one: reaction enhancers now EXCLUDE wired
|
|
171
|
+
// reflexes and the synaptic booster (p.456, "incompatible with all
|
|
172
|
+
// other enhancements to Reaction"). A client on 1.20.0 will install
|
|
173
|
+
// that combination; a client on this version refuses it. Same shape as
|
|
174
|
+
// the tier-vs-tier exclusions, which stop a completed family stacking
|
|
175
|
+
// into a bonus canon never grants.
|
|
176
|
+
// 1.22.0 (2026-08-31): VISION ENHANCEMENT I-III, the first chunk of the
|
|
177
|
+
// full-catalog augmentation pass. Same shared surface as 1.20.0 and
|
|
178
|
+
// 1.21.0: the web chargen reads augmentations.js live, so a save
|
|
179
|
+
// written here can carry a key an older client resolves to undefined
|
|
180
|
+
// and silently ignores, and the two disagree about that character's
|
|
181
|
+
// perception pool. Data only -- no rule changes for anyone this time.
|
|
182
|
+
// 1.23.0 (2026-08-31): SYNTHACARDIUM I-III and TAILORED PHEROMONES III.
|
|
183
|
+
// Same shared chargen payload as 1.20.0-1.22.0; data only, no rule
|
|
184
|
+
// changes. Both families were blocked in earlier chunks by the
|
|
185
|
+
// retrieval, and the core PDF settled them: the bioware table it could
|
|
186
|
+
// not produce carries Synthacardium whole, and gives Tailored
|
|
187
|
+
// Pheromones the RANGE (1-3) that #162 lacked when it stopped at 2.
|
|
188
|
+
// 1.24.0 (2026-08-31): FIVE RATED FAMILIES RE-TUNED TO CANON, on the
|
|
189
|
+
// project owner ruling. This is the first aug change that moves
|
|
190
|
+
// EXISTING characters rather than only offering new choices, which is
|
|
191
|
+
// why it is called out here rather than filed as data:
|
|
192
|
+
// - Control Rig I drops from +2 piloting to +1 (canon gives the
|
|
193
|
+
// Rating as the dice bonus). The Rigger archetype ships with it, so
|
|
194
|
+
// every Rigger loses one die on drone piloting, gunnery and defence
|
|
195
|
+
// -- 15 to 14 on the stock spread. Recoverable at the clinic:
|
|
196
|
+
// Rating 2 restores parity, Rating 3 beats it.
|
|
197
|
+
// - Muscle Augmentation II loses its +1 attack. Strength is not in
|
|
198
|
+
// the attack pool, so that die was never grounded in a formula.
|
|
199
|
+
// - Muscle Toner (Rating 4) goes from +1 attack to +4 attack AND +4
|
|
200
|
+
// sneak; Orthoskin II 1 to 2 soak; Dermal Plating III 2 to 3 soak.
|
|
201
|
+
// Sixteen new tiers join them. Two clients on different versions will
|
|
202
|
+
// compute different pools for the same character sheet.
|
|
203
|
+
// 1.25.0 (2026-08-31): CONSUMABLES STACK. `quantity` joins ISavedItem
|
|
204
|
+
// (sparse, >1 only), and the server writes that save back -- which is
|
|
205
|
+
// the bump rule's own "save-shape fields the server writes back"
|
|
206
|
+
// clause, not a judgment call. An older client restoring a stack of
|
|
207
|
+
// five ration bars ignores the field and hands the player ONE: four
|
|
208
|
+
// items silently gone, and the two clients then disagree about the
|
|
209
|
+
// contents of a pack, its weight, and therefore the carry cap.
|
|
210
|
+
//
|
|
211
|
+
// ADDITIVE THE OTHER WAY, which is why it is minor rather than major:
|
|
212
|
+
// absent means 1, so every save written before this restores
|
|
213
|
+
// unchanged on a new client.
|
|
214
|
+
//
|
|
215
|
+
// RENUMBERED ON REBASE, from 1.21.0. Three bumps landed while this was
|
|
216
|
+
// in flight; taking the number I first wrote would have overwritten
|
|
217
|
+
// somebody else's entry and left two features claiming one version.
|
|
218
|
+
// 1.26.0 (2026-08-31): DRONE HULLS ARE BODY-BASED, plus two aug families.
|
|
219
|
+
// The shared-semantics driver is the drone condition monitor: maxDroneBoxes
|
|
220
|
+
// now reads the catalog's Body (6+ceil(Bod/2), 8+ceil(Bod/2) anthro, SR5
|
|
221
|
+
// p.199) instead of the price-derived rating, so a drone's hull -- combat
|
|
222
|
+
// math a server-hosted run shares -- changes, and a stale catalog cache on
|
|
223
|
+
// one client would give the same drone a different track (the cache-vs-seed
|
|
224
|
+
// fix in this batch closes that). Rode along, catalog-only: Bone Density
|
|
225
|
+
// I-IV and Symbiotes I-IV. Bumped by the coordinator at merge, not in any
|
|
226
|
+
// PR -- three sessions bumping this line in parallel collided every rebase,
|
|
227
|
+
// so the number is assigned once, here, at merge time.
|
|
228
|
+
export const ENGINE_VERSION = '1.26.0';
|
|
121
229
|
//# 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,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,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,uEAAuE;AACvE,yEAAyE;AACzE,sEAAsE;AACtE,2DAA2D;AAC3D,wEAAwE;AACxE,0EAA0E;AAC1E,uEAAuE;AACvE,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,gCAAgC;AAChC,wEAAwE;AACxE,oEAAoE;AACpE,sEAAsE;AACtE,oEAAoE;AACpE,uEAAuE;AACvE,uEAAuE;AACvE,wEAAwE;AACxE,mEAAmE;AACnE,uEAAuE;AACvE,mEAAmE;AACnE,qEAAqE;AACrE,0EAA0E;AAC1E,wEAAwE;AACxE,qEAAqE;AACrE,8CAA8C;AAC9C,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":"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"}
|
|
@@ -36,7 +36,7 @@ import type { ISceneSeedJson } from '../types/seed/scene-seed.js';
|
|
|
36
36
|
* BUMPING: MINOR for a new optional field; MAJOR when an existing field
|
|
37
37
|
* changes meaning or stops being honoured.
|
|
38
38
|
*/
|
|
39
|
-
export declare const CHARGEN_FACTORY_VERSION = "1.
|
|
39
|
+
export declare const CHARGEN_FACTORY_VERSION = "1.1.0";
|
|
40
40
|
export type ChargenGender = 'male' | 'female';
|
|
41
41
|
export interface IChargenSkill {
|
|
42
42
|
[engineSkillName: string]: number;
|
|
@@ -42,7 +42,7 @@ import { SAVE_VERSION } from '../types/save-file.js';
|
|
|
42
42
|
* BUMPING: MINOR for a new optional field; MAJOR when an existing field
|
|
43
43
|
* changes meaning or stops being honoured.
|
|
44
44
|
*/
|
|
45
|
-
export const CHARGEN_FACTORY_VERSION = '1.
|
|
45
|
+
export const CHARGEN_FACTORY_VERSION = '1.1.0';
|
|
46
46
|
export class ChargenPayloadError extends Error {
|
|
47
47
|
constructor(message) {
|
|
48
48
|
super(message);
|
|
@@ -114,7 +114,41 @@ function itemFromSlug(slug) {
|
|
|
114
114
|
* numbers named.
|
|
115
115
|
*/
|
|
116
116
|
function ledgerFor(payload) {
|
|
117
|
-
const
|
|
117
|
+
const combat = payload.combat;
|
|
118
|
+
const powerPoints = Math.max(0, Math.floor(combat?.powerPoints ?? 0));
|
|
119
|
+
// A MYSTIC ADEPT'S POWER POINTS ARE A KARMA SPEND, so they belong to
|
|
120
|
+
// the ledger and not merely to the sheet. Two things have to be true
|
|
121
|
+
// before the split is computed, and both are refusals rather than
|
|
122
|
+
// corrections -- same discipline as the karma/nuyen check below.
|
|
123
|
+
if (powerPoints > 0) {
|
|
124
|
+
const magic = Math.max(0, Math.floor(combat?.magic ?? 0));
|
|
125
|
+
if (combat?.adept === true) {
|
|
126
|
+
throw new ChargenPayloadError(`A full adept's Power Points are FREE and equal to their Magic (SR5 p.69) -- `
|
|
127
|
+
+ `"powerPoints" is the mystic adept's bought-with-karma field and must not be set alongside "adept: true". `
|
|
128
|
+
+ `Either drop powerPoints (a plain adept) or set adept:false (a mystic adept).`);
|
|
129
|
+
}
|
|
130
|
+
if (magic <= 0) {
|
|
131
|
+
throw new ChargenPayloadError(`powerPoints: ${powerPoints} was given with magic ${magic}. Power Points need Magic to hang on `
|
|
132
|
+
+ `(SR5 p.69-70) -- an unawakened character cannot buy them.`);
|
|
133
|
+
}
|
|
134
|
+
if (powerPoints > magic) {
|
|
135
|
+
throw new ChargenPayloadError(`powerPoints: ${powerPoints} exceeds the Magic rating ${magic}. A mystic adept may hold at most `
|
|
136
|
+
+ `Magic Power Points (SR5 p.70-71). Fix the generator rather than the engine.`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const derived = creationSplit({ qualities: payload.qualities ?? [], powerPoints });
|
|
140
|
+
// AN OVERSPEND IS ITS OWN MESSAGE. Without this the remainder simply
|
|
141
|
+
// goes negative and surfaces as a baffling "payload says 0, canon
|
|
142
|
+
// derives -5" further down, which names the symptom and hides the
|
|
143
|
+
// cause. At 5 karma a point against a 25-karma pool, a mystic adept
|
|
144
|
+
// reaching for a high Magic runs out of pool long before they run out
|
|
145
|
+
// of cap -- see the CREATION_KARMA note in qualities.ts.
|
|
146
|
+
if (derived.karma < 0) {
|
|
147
|
+
throw new ChargenPayloadError(`The creation pool is overdrawn by ${-derived.karma} karma. `
|
|
148
|
+
+ `${powerPoints} Power Point(s) cost ${powerPoints * 5} of the 25-karma pool (SR5 p.69-70), `
|
|
149
|
+
+ `and the qualities given (${(payload.qualities ?? []).join(', ') || 'none'}) account for the rest. `
|
|
150
|
+
+ `Buy fewer points, or take negative qualities to fund them.`);
|
|
151
|
+
}
|
|
118
152
|
const claims = [];
|
|
119
153
|
if (payload.karma !== undefined && payload.karma !== derived.karma) {
|
|
120
154
|
claims.push(`karma: payload says ${payload.karma}, canon derives ${derived.karma}`);
|
|
@@ -125,7 +159,7 @@ function ledgerFor(payload) {
|
|
|
125
159
|
if (claims.length > 0) {
|
|
126
160
|
throw new ChargenPayloadError(`The creation ledger disagrees with canon (SR5 p.71/94/98). ${claims.join('; ')}. `
|
|
127
161
|
+ `Qualities given: ${(payload.qualities ?? []).join(', ') || 'none'}. `
|
|
128
|
-
+ `The engine derives both from the qualities -- fix the generator rather than the engine.`);
|
|
162
|
+
+ `The engine derives both from the qualities and any Power Points bought -- fix the generator rather than the engine.`);
|
|
129
163
|
}
|
|
130
164
|
return derived;
|
|
131
165
|
}
|
|
@@ -200,20 +234,32 @@ export function buildPlayerFromChargen(payload) {
|
|
|
200
234
|
}
|
|
201
235
|
}
|
|
202
236
|
for (const entry of payload.gear ?? []) {
|
|
203
|
-
// QTY > 1
|
|
204
|
-
//
|
|
205
|
-
//
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
237
|
+
// QTY > 1 IS NOW HONOURED FOR STACKABLES, AND STILL REFUSED FOR
|
|
238
|
+
// EVERYTHING ELSE.
|
|
239
|
+
//
|
|
240
|
+
// This comment used to explain why NOTHING could be stacked:
|
|
241
|
+
// inventory is a Map keyed by lowercased name, so a second Gel
|
|
242
|
+
// Rounds replaced the first. It named its own fix -- "model stacks
|
|
243
|
+
// as a rating/quantity on the item itself" -- and that is what
|
|
244
|
+
// Item.quantity now is.
|
|
245
|
+
//
|
|
246
|
+
// THE REFUSAL SURVIVES WHERE IT WAS RIGHT. A payload asking for 3
|
|
247
|
+
// cyberdecks still errors, and loudly: decks carry their own damage
|
|
248
|
+
// track, programs and load order, so three of them are three
|
|
249
|
+
// different objects and the name key can hold exactly one. Granting
|
|
250
|
+
// one where three were asked for is the quietly-does-less failure
|
|
251
|
+
// the original comment was written against, and it is still that.
|
|
216
252
|
const item = itemFromSlug(entry.slug);
|
|
253
|
+
const qty = entry.qty ?? 1;
|
|
254
|
+
if (qty > 1) {
|
|
255
|
+
if (!item.stackable) {
|
|
256
|
+
throw new ChargenPayloadError(`"${entry.slug}" was asked for qty ${qty}, and a ${item.category} does not stack. `
|
|
257
|
+
+ `Only consumables are fungible -- gear that carries its own state (a deck's damage `
|
|
258
|
+
+ `and programs, a gun's ammo, a drone's hull) is one object per name, always. `
|
|
259
|
+
+ `Emit separate entries with distinct names, or a single one.`);
|
|
260
|
+
}
|
|
261
|
+
item.quantity = qty;
|
|
262
|
+
}
|
|
217
263
|
player.addInventory(item);
|
|
218
264
|
item.owner = player.name;
|
|
219
265
|
if (EQUIP_ON_START.has(item.category)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chargen-factory.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/chargen-factory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chargen-factory.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/chargen-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -90,6 +90,14 @@ export function buildPlayerDossier(player) {
|
|
|
90
90
|
if (a.adept) {
|
|
91
91
|
caps.push('Physical ADEPT: magic fuels their meat combat; NO spellcasting, NO astral projection -- spell formulas, grimoires, and foci are all useless to them');
|
|
92
92
|
}
|
|
93
|
+
else if (a.isMysticAdept) {
|
|
94
|
+
// ORDERED BEFORE the plain-mage branch, because a mystic adept IS
|
|
95
|
+
// awakened and would otherwise be briefed as one -- and that brief
|
|
96
|
+
// promises astral projection, which they never have (SR5 p.69-70).
|
|
97
|
+
// A wrong capability in a brief is worse than a missing one: the
|
|
98
|
+
// model writes fiction around it.
|
|
99
|
+
caps.push('MYSTIC ADEPT: casts and summons like a mage AND carries bought adept powers in the body; NEVER astrally projects (assensing only if bought) -- spell formulas and foci work, the door out of the flesh does not');
|
|
100
|
+
}
|
|
93
101
|
else if (a.isAwakened()) {
|
|
94
102
|
caps.push('Awakened MAGE: casts manabolt/heal/armor innately, can astrally project ("project") and assense');
|
|
95
103
|
}
|
|
@@ -313,9 +321,24 @@ ${JSON_ONLY}
|
|
|
313
321
|
// ENTERED by a persona that holds a mark on it. Hacking it releases
|
|
314
322
|
// the room's maglocks AND unseals its matrix-plane files, which live
|
|
315
323
|
// INSIDE the host -- from the outside grid it is one sealed icon.
|
|
316
|
-
//
|
|
317
|
-
//
|
|
318
|
-
//
|
|
324
|
+
// A HOST IS ORDINARY, NOT CORPORATE. "Your local Stuffer Shack has
|
|
325
|
+
// a host icon" (p.219), and the core book publishes that convenience
|
|
326
|
+
// store as a worked sample host (p.245-246) -- so a pawnshop, a bar,
|
|
327
|
+
// a clinic or a corner store plausibly has one, rated 3-4 as "low-end
|
|
328
|
+
// commercial, private business" (p.247). Withholding hosts from
|
|
329
|
+
// everything but corp/tech sites is what made an ordinary storefront
|
|
330
|
+
// read "thin grid" on the map when canon says otherwise.
|
|
331
|
+
// SET IT ON PREMISES, NOT ON EVERY ROOM: the businesses and secure
|
|
332
|
+
// sites a scene contains, not each corridor, alley, stairwell or
|
|
333
|
+
// room inside one building -- a site is covered by its host, and
|
|
334
|
+
// interior rooms of the same premises share it rather than each
|
|
335
|
+
// sprouting their own. Give every host a hostRating chosen for the
|
|
336
|
+
// place it actually is; a scene where every rating is 3 is as wrong
|
|
337
|
+
// as one where nothing is a host.
|
|
338
|
+
// Ice NPCs and matrix-plane items belong ONLY in hasNode rooms, and
|
|
339
|
+
// any hasNode room holding matrix items MUST have an ice NPC
|
|
340
|
+
// stationed in it -- so a corner-store host with no paydata in it
|
|
341
|
+
// carries no ice, and costs the scene nothing.
|
|
319
342
|
"nodeAccess"?: "wireless", // Hosts are always reachable from the Matrix -- that is what
|
|
320
343
|
// makes them hosts. There is no air-gapped host: for a vault that
|
|
321
344
|
// must be entered in the flesh, put an OFFLINE SERVER device in the
|