@maka/maka-cli 5.119.0 → 5.121.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 (82) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +2 -2
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js +31 -2
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js.map +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.d.ts +10 -3
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +17 -4
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.d.ts +0 -7
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js +39 -3
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +28 -4
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/fit.d.ts +29 -0
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/fit.js +85 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/fit.js.map +1 -0
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +4 -4
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +16 -5
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js +3 -1
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js.map +1 -1
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.d.ts +34 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +81 -12
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +5 -2
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  30. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +29 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +4 -0
  33. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +7 -0
  35. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/game.js +12 -7
  37. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/models/device.d.ts +72 -0
  39. package/bundle/typescript/src/commands/game/sideQuest/models/device.js +89 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/models/device.js.map +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +134 -45
  42. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +448 -104
  43. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +2 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +7 -5
  46. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +31 -3
  48. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +171 -47
  49. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +8 -0
  51. package/bundle/typescript/src/commands/game/sideQuest/types/repro.js.map +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +4 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.d.ts +17 -0
  54. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.js +1 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.js.map +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/utilities/barrier-combat.d.ts +38 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/utilities/barrier-combat.js +67 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/utilities/barrier-combat.js.map +1 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +279 -4
  60. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +221 -212
  61. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +24 -5
  63. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +50 -17
  64. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
  65. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +6 -0
  66. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +28 -11
  67. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  68. package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.js +16 -1
  69. package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.js.map +1 -1
  70. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js +3 -1
  71. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +6 -2
  73. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +1 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
  76. package/bundle/typescript/src/commands/game/sideQuest/utilities/range.d.ts +19 -13
  77. package/bundle/typescript/src/commands/game/sideQuest/utilities/range.js +77 -34
  78. package/bundle/typescript/src/commands/game/sideQuest/utilities/range.js.map +1 -1
  79. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.d.ts +2 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +22 -3
  81. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -1
  82. package/package.json +1 -1
@@ -20,11 +20,211 @@
20
20
  * gear -- these strings are what the player reads, and what an NPC's
21
21
  * swag briefing quotes.
22
22
  */
23
- export declare const CATALOG_VERSION = 12;
24
- export interface ICatalogItem {
23
+ import type { SkillName } from '../models/player.js';
24
+ import type { AugBonusKind } from '../augmentations.js';
25
+ export declare const CATALOG_VERSION = 13;
26
+ export type CatalogKind = 'gear' | 'quality' | 'spell' | 'augmentation' | 'metatype';
27
+ /** The skill a weapon is fired or swung with. The last four have no engine
28
+ * skill yet (SkillName); the engine falls back per models/player.ts. */
29
+ export type WeaponSkill = 'pistols' | 'automatics' | 'longarms' | 'archery' | 'blades' | 'clubs' | 'unarmed' | 'heavy-weapons' | 'throwing-weapons' | 'exotic-melee' | 'exotic-ranged';
30
+ /** The p.185 Range Table rows (utilities/range.ts carries the metres). */
31
+ export type WeaponRange = 'taser' | 'holdout' | 'light-pistol' | 'heavy-pistol' | 'machine-pistol' | 'smg' | 'assault-rifle' | 'shotgun' | 'sniper' | 'lmg' | 'mmg' | 'bow' | 'light-crossbow' | 'medium-crossbow' | 'heavy-crossbow' | 'thrown-knife' | 'grenade' | 'melee';
32
+ export type FireMode = 'SS' | 'SA' | 'BF' | 'FA';
33
+ export type AmmoFeed = 'c' | 'm' | 'cy' | 'b' | 'd' | 'ml' | 'belt';
34
+ /** SR5 p.417-418, p.432: hold-outs have no mounts; tasers top only;
35
+ * pistols, machine pistols and SMGs top + barrel; rifles, shotguns and
36
+ * heavy weapons all three. One accessory per mount. */
37
+ export type MountPoint = 'top' | 'under' | 'barrel';
38
+ /** A weapon's combat values, the book's table row (p.421-431, p.435). */
39
+ export interface ICatalogWeapon {
40
+ skill: WeaponSkill;
41
+ /** The BARE number, never the smartlink/laser parenthetical (the shooter
42
+ * supplies those -- Player.getAttackLimit). 'physical' is the table's own
43
+ * word for "use the Physical limit" (shock gloves, throwing knives). */
44
+ accuracy: number | 'physical';
45
+ /** The flat part of the DV: 8 for "8P", 2 for "(STR+2)P". */
46
+ dv: number;
47
+ /** Melee: DV = this attribute + dv. */
48
+ dvAttribute?: 'strength';
49
+ damageType: 'P' | 'S';
50
+ /** "(e)": electricity, Stun by canon (p.170-171). */
51
+ electric?: true;
52
+ /** Armor penetration, <= 0 for the usual, > 0 where the book prints "+". 0 for "--". */
53
+ ap: number;
54
+ reach?: number;
55
+ modes?: FireMode[];
56
+ /** Recoil compensation as the table prints it ("RC (1)" -> 1). Data until
57
+ * a recoil model exists. */
58
+ rc?: number;
59
+ ammo?: {
60
+ rounds: number;
61
+ feed: AmmoFeed;
62
+ };
63
+ range?: WeaponRange;
64
+ /** Grenades: the blast falls off this much per metre. */
65
+ blast?: number;
66
+ /** The accessory seats this gun has. Absent = none (hold-outs). */
67
+ mounts?: MountPoint[];
68
+ /** Accessories fitted at the factory, by identifier. They occupy no
69
+ * mount. Identifiers, not slugs: 'smartgun-internal', 'laser-sight',
70
+ * 'silencer', 'gas-vent-2', 'folding-stock', 'shock-pad',
71
+ * 'imaging-scope', 'grenade-launcher'. */
72
+ builtIn?: string[];
73
+ }
74
+ /** Ammunition (p.433-434): how a loaded round shifts the gun's line. */
75
+ export interface ICatalogAmmo {
76
+ dvMod: number;
77
+ apMod: number;
78
+ /** Stun rounds. Absent = the gun's own damage type. */
79
+ damageType?: 'S';
80
+ electric?: true;
81
+ note?: string;
82
+ }
83
+ export type ModKind = 'vision' | 'audio' | 'armor' | 'trodes' | 'weapon';
84
+ /** Something worn: armor (p.436-438) and/or capacity for mods (p.443-445). */
85
+ export interface ICatalogWearable {
86
+ /** The piece's own Armor rating. Only the highest worn piece counts (p.169). */
87
+ armor?: number;
88
+ /** A "+" accessory (helmet, shield): adds to the worn piece, capped by
89
+ * Strength (p.169, p.438). */
90
+ armorBonus?: number;
91
+ /** How much it holds (goggles 4, helmet 6). */
92
+ capacity?: number;
93
+ /** What may be fitted into it. */
94
+ holds?: ModKind[];
95
+ /** Concealability modifier for what is worn under it (lined coat -2).
96
+ * Data only: the engine has no concealment test yet. */
97
+ concealment?: number;
98
+ }
99
+ /** A Matrix device (p.438-439). Device Rating is NUMERIC. */
100
+ export interface ICatalogDevice {
101
+ deviceRating: number;
102
+ /** Cyberdecks: the p.227 attribute array, highest first as the book prints it. */
103
+ attack?: number;
104
+ sleaze?: number;
105
+ dataProcessing?: number;
106
+ firewall?: number;
107
+ /** Running-program limit (p.227). */
108
+ programs?: number;
109
+ }
110
+ /** A drone or vehicle (SR5 p.466, Rigger 5.0 p.126-149). A value stays a
111
+ * string only where the book prints two figures ("4/2" on/off-road,
112
+ * "1G/1W" two travel modes, "--" for an immobile frame). */
113
+ export interface ICatalogVehicle {
114
+ handling: number | string;
115
+ speed: number | string;
116
+ acceleration: number | string;
117
+ body: number;
118
+ armor: number;
119
+ pilot: number;
120
+ sensor: number;
121
+ seats?: number;
122
+ /** A weapon mount: the drone can be armed (Player.droneArmed). */
123
+ mount?: 'standard' | 'heavy';
124
+ /** Rigger 5.0 p.145: an anthroform's monitor is 8 + (Body/2). */
125
+ anthro?: boolean;
126
+ }
127
+ /** A modification that is FITTED into something else (fit.ts). */
128
+ export interface ICatalogMod {
129
+ kind: ModKind;
130
+ /** Wearable capacity it uses (vision/audio/armor/trodes, p.444-445). */
131
+ capacityCost?: number;
132
+ /** Weapon accessories: the mounts it may take (p.432). */
133
+ mount?: MountPoint[];
134
+ /** An accessory that itself holds mods (imaging scope: Capacity 3). */
135
+ capacity?: number;
136
+ /** Weapon classes it refuses: a silencer fits no revolver or shotgun (p.432). */
137
+ excludes?: ('shotgun' | 'revolver')[];
138
+ }
139
+ export type EffectPool = AugBonusKind | 'pan-defense' | 'matrix-soak' | 'biofeedback' | 'toxin' | 'climbing';
140
+ export type EffectLimit = 'physical' | 'mental' | 'social' | 'accuracy';
141
+ export type EffectAttribute = 'body' | 'agility' | 'reaction' | 'strength' | 'willpower' | 'logic' | 'intuition' | 'charisma' | 'edge' | 'magic' | 'resonance' | 'reach' | 'armor-bonus';
142
+ export type EffectMatrixAttribute = 'attack' | 'sleaze' | 'dataProcessing' | 'firewall' | 'damage';
143
+ /** A capability is a flag the engine asks for by key (Player.hasCapability). */
144
+ export type EffectCapability = 'dni' | 'smartlink' | 'smartgun' | 'low-light' | 'thermographic' | 'no-fog' | 'silenced' | 'full-body' | 'autopicker' | 'maglock-opposed';
145
+ /**
146
+ * A modifier the row grants while it applies. `value` is a NUMBER, never a
147
+ * string: every reader adds it, and a string would need parsing at each
148
+ * one and would drift in the web's seed. `scaleBy` multiplies it by the
149
+ * row's `ratingValue` (rating), the cast Force (force) or the hits of a
150
+ * sustained spell (hits). `when` defaults by kind: a wearable's effects
151
+ * apply worn, a weapon's held, a program's running, a data soft's stored,
152
+ * a mod's fitted, an augmentation's installed, a quality's held.
153
+ */
154
+ export type ICatalogEffect = {
155
+ type: 'dice';
156
+ category: 'skills';
157
+ property: SkillName;
158
+ value: number;
159
+ scaleBy?: EffectScale;
160
+ when?: EffectWhen;
161
+ only?: string;
162
+ } | {
163
+ type: 'dice';
164
+ category: 'pools';
165
+ property: EffectPool;
166
+ value: number;
167
+ scaleBy?: EffectScale;
168
+ when?: EffectWhen;
169
+ only?: string;
170
+ } | {
171
+ type: 'limit';
172
+ category: 'limits';
173
+ property: EffectLimit;
174
+ value: number;
175
+ scaleBy?: EffectScale;
176
+ when?: EffectWhen;
177
+ only?: string;
178
+ } | {
179
+ type: 'attribute';
180
+ category: 'attributes';
181
+ property: EffectAttribute;
182
+ value: number;
183
+ scaleBy?: EffectScale;
184
+ when?: EffectWhen;
185
+ only?: string;
186
+ } | {
187
+ type: 'attribute';
188
+ category: 'matrix';
189
+ property: EffectMatrixAttribute;
190
+ value: number;
191
+ scaleBy?: EffectScale;
192
+ when?: EffectWhen;
193
+ only?: string;
194
+ } | {
195
+ type: 'initiative';
196
+ category: 'pools';
197
+ property: 'dice' | 'score';
198
+ value: number;
199
+ scaleBy?: EffectScale;
200
+ when?: EffectWhen;
201
+ only?: string;
202
+ } | {
203
+ type: 'flag';
204
+ category: 'capability';
205
+ property: EffectCapability;
206
+ value: number;
207
+ scaleBy?: EffectScale;
208
+ when?: EffectWhen;
209
+ only?: string;
210
+ };
211
+ export type EffectScale = 'rating' | 'force' | 'hits';
212
+ export type EffectWhen = 'worn' | 'held' | 'carried' | 'running' | 'stored' | 'fitted' | 'installed' | 'held-quality' | 'sustained';
213
+ /** Every kind shares this. */
214
+ export interface ICatalogBase {
215
+ /** Absent = 'gear'. */
216
+ kind?: CatalogKind;
217
+ /** Unique across the whole collection, every kind. Qualities, spells,
218
+ * augmentations and metatypes use their existing `key`. */
25
219
  slug: string;
26
220
  name: string;
27
221
  description: string;
222
+ page?: string;
223
+ approx?: boolean;
224
+ effects?: ICatalogEffect[];
225
+ }
226
+ export interface ICatalogItem extends ICatalogBase {
227
+ kind?: 'gear';
28
228
  category: string;
29
229
  rating: string;
30
230
  size: string;
@@ -34,9 +234,84 @@ export interface ICatalogItem {
34
234
  weight: number;
35
235
  price: number;
36
236
  availability: number;
37
- page?: string;
38
- approx?: boolean;
39
237
  legality?: 'R' | 'F';
40
238
  stats?: string;
239
+ /** The SR5 Rating / Force / Capacity the NAME carries ("Medkit (Rating 3)"
240
+ * -> 3). What `scaleBy: 'rating'` multiplies by. */
241
+ ratingValue?: number;
242
+ weapon?: ICatalogWeapon;
243
+ ammo?: ICatalogAmmo;
244
+ wearable?: ICatalogWearable;
245
+ device?: ICatalogDevice;
246
+ vehicle?: ICatalogVehicle;
247
+ mod?: ICatalogMod;
248
+ /**
249
+ * WHAT "use" SHOULD SAY when the generic "Nothing special happens." would
250
+ * read as broken (user, 2026-09-03: a Lockpick Set at a pickable door
251
+ * giving that line is confusing, not a shrug). Only for gear whose NAME
252
+ * implies a specific action that lives at a DIFFERENT verb -- a Lockpick
253
+ * Set means "pick", not "use". Absent = the generic line stays; most
254
+ * gear needs no hint at all. Read by Item.use() (models/item.ts).
255
+ */
256
+ useHint?: string;
257
+ }
258
+ export type Metatype = 'human' | 'elf' | 'dwarf' | 'ork' | 'troll';
259
+ export interface ICatalogQuality extends ICatalogBase {
260
+ kind: 'quality';
261
+ quality: {
262
+ polarity: 'positive' | 'negative';
263
+ karma: number;
264
+ maxRating?: number;
265
+ retired?: string;
266
+ requires?: 'awakened' | 'mundane' | 'caster-or-technomancer';
267
+ requiresQuality?: string;
268
+ requiresMetatype?: Metatype[];
269
+ };
270
+ }
271
+ export interface ICatalogSpell extends ICatalogBase {
272
+ kind: 'spell';
273
+ spell: {
274
+ category: 'Combat' | 'Detection' | 'Health' | 'Illusion' | 'Manipulation';
275
+ type: 'mana' | 'physical';
276
+ range: 'LOS' | 'LOS(A)' | 'touch';
277
+ duration: 'I' | 'S' | 'P';
278
+ drainOffset: number;
279
+ soak?: 'willpower' | 'body' | 'armor';
280
+ stun?: boolean;
281
+ area?: boolean;
282
+ touch?: boolean;
283
+ };
284
+ }
285
+ export interface ICatalogAugmentation extends ICatalogBase {
286
+ kind: 'augmentation';
287
+ augmentation: {
288
+ ware: 'cyberware' | 'bioware';
289
+ essence: number;
290
+ cost: number;
291
+ wakeLine: string;
292
+ excludes?: string[];
293
+ avail?: number;
294
+ legality?: 'R' | 'F';
295
+ canonCost?: number;
296
+ canonEssence?: number;
297
+ };
298
+ }
299
+ export interface ICatalogMetatype extends ICatalogBase {
300
+ kind: 'metatype';
301
+ metatype: {
302
+ attributes: Record<string, {
303
+ min: number;
304
+ max: number;
305
+ }>;
306
+ sprintMetersPerHit: 1 | 2;
307
+ lifestyleCostMult?: number;
308
+ };
41
309
  }
310
+ export type ICatalogRow = ICatalogItem | ICatalogQuality | ICatalogSpell | ICatalogAugmentation | ICatalogMetatype;
311
+ /** Gear or not -- the discriminator every consumer of the gear list uses. */
312
+ export declare function isGearRow(r: ICatalogRow): r is ICatalogItem;
42
313
  export declare const CATALOG_ITEMS: ICatalogItem[];
314
+ /** THE WHOLE SEED, every kind. Gear today; qualities, spells, augmentations
315
+ * and metatypes join it in v14. The loader (utilities/catalog.ts) weighs
316
+ * THIS against the server and the cache. */
317
+ export declare const CATALOG_ROWS: ICatalogRow[];