@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.
Files changed (115) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +9 -9
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +54 -3
  5. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +987 -53
  6. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.d.ts +0 -14
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +23 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.d.ts +10 -2
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js +11 -2
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +14 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +30 -3
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +5 -1
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +5 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +10 -1
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +2 -2
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +2 -2
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +8 -1
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js +3 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js.map +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +2 -2
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +55 -17
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/project.js +12 -0
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/project.js.map +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +14 -4
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +3 -3
  45. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +109 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +62 -16
  50. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +26 -3
  52. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +95 -3
  54. package/bundle/typescript/src/commands/game/sideQuest/game.js +237 -15
  55. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +5 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -1
  58. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.d.ts +13 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js +45 -2
  60. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +65 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +83 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  64. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +153 -3
  65. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +197 -12
  66. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +73 -0
  68. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +97 -3
  69. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  70. package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +33 -1
  71. package/bundle/typescript/src/commands/game/sideQuest/qualities.js +80 -2
  72. package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -1
  73. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +1 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +4 -4
  75. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.d.ts +120 -0
  76. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js +135 -0
  77. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js.map +1 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +34 -2
  79. package/bundle/typescript/src/commands/game/sideQuest/ui.js +36 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  81. package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.d.ts +116 -0
  82. package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.js +127 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.js.map +1 -0
  84. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +1 -1
  85. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +123 -2
  86. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
  87. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +131 -2
  88. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +170 -12
  89. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
  90. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.d.ts +139 -1
  91. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js +307 -5
  92. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js.map +1 -1
  93. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.d.ts +41 -0
  94. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +41 -0
  95. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js.map +1 -1
  96. package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.d.ts +98 -0
  97. package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.js +137 -0
  98. package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.js.map +1 -0
  99. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js +1 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js.map +1 -1
  101. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.d.ts +38 -0
  102. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +106 -0
  103. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  104. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js +19 -3
  105. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js.map +1 -1
  106. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js +1 -1
  107. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js.map +1 -1
  108. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +2 -1
  109. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  110. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.d.ts +22 -0
  111. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +27 -0
  112. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -1
  113. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +79 -44
  114. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  115. 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
- export const ENGINE_VERSION = '1.18.0';
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.0.0";
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.0.0';
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 derived = creationSplit(payload.qualities ?? []);
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 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
- }
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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAwB/C,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;wDAEwD;AACxD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY;IAC5D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,aAAa;IAC1D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ;IACjF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;CACrC,CAAC,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,SAAS,YAAY,CAAC,OAA+B,EAAE,KAAyB;IAC9E,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,kCAAkC;IAClC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AACjC,CAAC;AAED;;oCAEoC;AACpC,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,mBAAmB,CAC3B,8BAA8B,IAAI,+CAA+C,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,IAAI,CAAC;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,QAAQ,EAAE,YAAY,CAAC,QAA6C,EAAE,GAAG,CAAC,QAAQ,CAAa;QAC/F,IAAI,EAAE,CAAC,YAAY,CAAC,IAAyC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAS;QAC/F,MAAM,EAAE,CAAC,YAAY,CAAC,MAA2C,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAW;QAC5G,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,WAAW;QAC/B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM;QAC1B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO;QAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG;KAC1B,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,SAAS,CAAC,OAAwB;IACzC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,KAAK,mBAAmB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,KAAK,mBAAmB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,mBAAmB,CAC3B,8DAA8D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;cACjF,oBAAoB,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI;cACtE,yFAAyF,CAC5F,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAwB;IAC7D,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,mBAAmB,CAAC,2BAA2B,CAAC,CAAC;IAC7D,CAAC;IAED,kEAAkE;IAClE,yDAAyD;IACzD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC;QACrB,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,4CAA4C;QACzD,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,KAAK;QACpB,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAW;KACpD,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,gEAAgE;QAChE,oDAAoD;QACpD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,IAAI,mBAAmB,CAC3B,qDAAqD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;kBAC9E,kDAAkD,CACrD,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,sEAAsE;IACtE,0BAA0B;IAC1B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,mBAAmB,CAAC,sBAAsB,GAAG,iCAAiC,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAC7B,qEAAqE;IACrE,iEAAiE;IACjE,wDAAwD;IACxD,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC;YACrB,IAAI,EAAE,kCAAkC;YACxC,WAAW,EAAE,4FAA4F;YACzG,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS;YAC7C,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ;YACxD,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI;SAC1D,CAAC,CAAC;QACH,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,mEAAmE;IACnE,oEAAoE;IACpE,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,mBAAmB,CAAC,6BAA6B,KAAK,CAAC,GAAG,2BAA2B,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,KAAK,CAAC,KAAK,sBAAsB,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACvC,iEAAiE;QACjE,4DAA4D;QAC5D,+DAA+D;QAC/D,kEAAkE;QAClE,6DAA6D;QAC7D,+DAA+D;QAC/D,6DAA6D;QAC7D,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,mBAAmB,CAC3B,IAAI,KAAK,CAAC,IAAI,uBAAuB,KAAK,CAAC,GAAG,oCAAoC;kBAChF,0EAA0E;kBAC1E,uFAAuF;kBACvF,mDAAmD,CACtD,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAwB,EAAE,OAAuB;IACtF,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,OAAO,EAAE;YACP,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,aAAa,EAAE,QAAQ;YACvB,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,SAAS;SACnC;QACD,OAAO;QACP,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;QAC/B,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,EAAE;KACkB,CAAC;AAC9B,CAAC"}
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
- // 1-2 rooms in corp/tech locations only. Ice NPCs and matrix-plane
317
- // items belong ONLY in hasNode rooms, and any hasNode room holding
318
- // matrix items MUST have an ice NPC stationed in it.
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