@maka/maka-cli 5.120.0 → 5.122.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 (147) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.d.ts +72 -0
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +300 -61
  4. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/aspects.js +11 -1
  6. package/bundle/typescript/src/commands/game/sideQuest/aspects.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +33 -0
  8. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +85 -0
  9. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +2 -2
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js +31 -2
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +8 -0
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.d.ts +10 -3
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +17 -4
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.d.ts +0 -7
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js +39 -3
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js.map +1 -1
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +31 -5
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/fit.d.ts +29 -0
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/fit.js +85 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/fit.js.map +1 -0
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +16 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +273 -28
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +4 -4
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +16 -5
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.d.ts +19 -10
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +43 -227
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +31 -3
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js +3 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.d.ts +34 -1
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +81 -12
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +5 -0
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +5 -2
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/sell.js +4 -0
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/sell.js.map +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js +4 -6
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js.map +1 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/stance.d.ts +10 -0
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js +50 -2
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js.map +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js +27 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js.map +1 -1
  58. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  59. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +45 -1
  60. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +3 -2
  62. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +34 -41
  63. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -1
  64. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +4 -0
  65. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -1
  66. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +44 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  68. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +47 -0
  69. package/bundle/typescript/src/commands/game/sideQuest/game.js +115 -11
  70. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  71. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.d.ts +17 -0
  72. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +30 -2
  73. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/models/device.d.ts +86 -0
  75. package/bundle/typescript/src/commands/game/sideQuest/models/device.js +103 -1
  76. package/bundle/typescript/src/commands/game/sideQuest/models/device.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +140 -45
  78. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +456 -104
  79. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  80. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +2 -0
  81. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +7 -5
  82. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  83. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +113 -4
  84. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +289 -47
  85. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  86. package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +4 -0
  87. package/bundle/typescript/src/commands/game/sideQuest/qualities.js +16 -0
  88. package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -1
  89. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +9 -9
  90. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +6 -6
  91. package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +8 -0
  92. package/bundle/typescript/src/commands/game/sideQuest/types/repro.js.map +1 -1
  93. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +9 -2
  94. package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.d.ts +17 -0
  95. package/bundle/typescript/src/commands/game/sideQuest/ui.js +23 -26
  96. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  97. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.js +1 -1
  98. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.js.map +1 -1
  99. package/bundle/typescript/src/commands/game/sideQuest/utilities/barrier-combat.d.ts +38 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/utilities/barrier-combat.js +67 -0
  101. package/bundle/typescript/src/commands/game/sideQuest/utilities/barrier-combat.js.map +1 -0
  102. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +279 -4
  103. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +221 -212
  104. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
  105. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +48 -5
  106. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +84 -17
  107. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
  108. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.d.ts +9 -0
  109. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js +8 -0
  110. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js.map +1 -1
  111. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +6 -0
  112. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +52 -12
  113. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  114. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.d.ts +32 -0
  115. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js +33 -0
  116. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js.map +1 -1
  117. package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.js +10 -1
  118. package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.js.map +1 -1
  119. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.d.ts +5 -0
  120. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js +35 -1
  121. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js.map +1 -1
  122. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js +3 -1
  123. package/bundle/typescript/src/commands/game/sideQuest/utilities/first-aid.js.map +1 -1
  124. package/bundle/typescript/src/commands/game/sideQuest/utilities/matrix-intrusion.d.ts +121 -0
  125. package/bundle/typescript/src/commands/game/sideQuest/utilities/matrix-intrusion.js +141 -0
  126. package/bundle/typescript/src/commands/game/sideQuest/utilities/matrix-intrusion.js.map +1 -0
  127. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +11 -3
  128. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  129. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +1 -1
  130. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
  131. package/bundle/typescript/src/commands/game/sideQuest/utilities/pregen-worksheet.d.ts +93 -0
  132. package/bundle/typescript/src/commands/game/sideQuest/utilities/pregen-worksheet.js +201 -0
  133. package/bundle/typescript/src/commands/game/sideQuest/utilities/pregen-worksheet.js.map +1 -0
  134. package/bundle/typescript/src/commands/game/sideQuest/utilities/range.d.ts +19 -13
  135. package/bundle/typescript/src/commands/game/sideQuest/utilities/range.js +77 -34
  136. package/bundle/typescript/src/commands/game/sideQuest/utilities/range.js.map +1 -1
  137. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js +91 -9
  138. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js.map +1 -1
  139. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +16 -0
  140. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +50 -3
  141. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  142. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.d.ts +9 -1
  143. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +28 -4
  144. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -1
  145. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +43 -3
  146. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  147. package/package.json +1 -1
@@ -1,10 +1,11 @@
1
1
  import { PlayerEquipment } from '../types/player-equipment.js';
2
+ import type { WeaponSkill } from '../utilities/catalog-data.js';
2
3
  import type { Grid } from '../utilities/grids.js';
3
4
  import type { Host } from './host.js';
4
5
  import { type Aspect } from '../aspects.js';
5
6
  import { LifestyleChoices } from '../types/seed/lifestyle-seed.js';
6
7
  import { Logger } from '../utilities/logger.js';
7
- import { AugBonusKind } from '../augmentations.js';
8
+ import { AugBonusKind, IImplantWeapon } from '../augmentations.js';
8
9
  import { Room } from './room.js';
9
10
  import { Item } from './item.js';
10
11
  import { Inventory } from './inventory.js';
@@ -20,6 +21,40 @@ export type FightStance = 'manual' | 'non-lethal' | 'lethal';
20
21
  export declare const STANCE_CYCLE: FightStance[];
21
22
  /** The old names, still accepted from saves and the stance command. */
22
23
  export declare const STANCE_ALIASES: Record<string, FightStance>;
24
+ /**
25
+ * THE MATRIX HAS ITS OWN STANCE (mjmcee on uMQAhaAysgaKpWFkn,
26
+ * 2026-09-03): "I have a concept ... which leverages the combat stance
27
+ * in the meat world (Manual / Non-Lethal / Lethal) which I'd like to
28
+ * get into the matrix space. Toggling between default BF (Attack) or
29
+ * HotF (Sleaze) as TAB. Normal 'deck config <asdf>' still sets up the
30
+ * config."
31
+ *
32
+ * So Tab is PLANE-AWARE: in the meat it cycles the fight autopilot, on
33
+ * the Matrix it flips which of the book's two intrusion actions your
34
+ * next hack is. Two values, not three -- there is no "manual" here,
35
+ * because a Matrix intrusion is never automated; the stance picks the
36
+ * ACTION, it does not decide whether to act.
37
+ *
38
+ * BRUTE FORCE IS THE DEFAULT, per that directive. It reverses what the
39
+ * engine did before (both hack and mark defaulted to Sleaze), and it
40
+ * is the honest default for a stance you can see: the loud route is
41
+ * the one you should have to notice you are in.
42
+ *
43
+ * This is the DECK'S POSTURE, not its configuration -- "deck config"
44
+ * still assigns the Attack/Sleaze/DP/Firewall array (p.227), and the
45
+ * stance decides which of those two attributes your intrusion leans
46
+ * on. Both matter: a Sleaze stance on a deck configured for Attack is
47
+ * a quiet approach with a low ceiling.
48
+ */
49
+ export type MatrixStance = 'attack' | 'sleaze';
50
+ export declare const MATRIX_STANCE_CYCLE: MatrixStance[];
51
+ /** What each stance is CALLED in the book -- printed everywhere the
52
+ * engine used to say "loud"/"quiet", so the vocabulary teaches the
53
+ * real action names (the whole point of uMQAhaAysgaKpWFkn). */
54
+ export declare const MATRIX_STANCE_ACTION: Record<MatrixStance, string>;
55
+ /** The words a player may type, including the engine's older ones. */
56
+ export declare const MATRIX_STANCE_ALIASES: Record<string, MatrixStance>;
57
+ export declare function normalizeMatrixStance(v: string | undefined): MatrixStance;
23
58
  export declare function normalizeStance(v: string | undefined): FightStance;
24
59
  export type Plane = 'meat' | 'matrix' | 'astral' | 'drone';
25
60
  /** Meat and a jumped-in drone share the physical world. */
@@ -96,7 +131,7 @@ export type SimMode = 'cold' | 'hot';
96
131
  * this not-yet-carried list; all three are now real and hooked, one per
97
132
  * command file beside them.)
98
133
  */
99
- export type SkillName = 'blades' | 'clubs' | 'unarmed' | 'gunnery' | 'astral-combat' | 'cybercombat' | 'sneaking' | 'perception' | 'palming' | 'escape-artist' | 'disguise' | 'hacking' | 'locksmith' | 'computer' | 'electronic-warfare' | 'hardware' | 'negotiation' | 'con' | 'intimidation' | 'etiquette' | 'leadership' | 'performance' | 'instruction' | 'first-aid' | 'medicine' | 'assensing' | 'spellcasting' | 'counterspelling' | 'piloting' | 'conjuring' | 'compiling' | 'decompiling' | 'registering' | 'software' | 'impersonation' | 'ritual-spellcasting' | 'gymnastics' | 'running' | 'swimming' | 'automatics' | 'pistols' | 'longarms' | 'banishing' | 'summoning' | 'binding' | 'cybertechnology' | 'alchemy' | 'disenchanting' | 'artificing' | 'aeronautics-mechanic' | 'industrial-mechanic' | 'automotive-mechanic' | 'nautical-mechanic' | 'navigation' | 'tracking' | 'survival' | 'archery' | 'free-fall';
134
+ export type SkillName = 'blades' | 'clubs' | 'unarmed' | 'gunnery' | 'astral-combat' | 'cybercombat' | 'sneaking' | 'perception' | 'palming' | 'escape-artist' | 'disguise' | 'hacking' | 'locksmith' | 'computer' | 'electronic-warfare' | 'hardware' | 'negotiation' | 'con' | 'intimidation' | 'etiquette' | 'leadership' | 'performance' | 'instruction' | 'first-aid' | 'medicine' | 'assensing' | 'spellcasting' | 'counterspelling' | 'piloting' | 'conjuring' | 'compiling' | 'decompiling' | 'registering' | 'software' | 'impersonation' | 'ritual-spellcasting' | 'gymnastics' | 'running' | 'swimming' | 'automatics' | 'pistols' | 'longarms' | 'banishing' | 'summoning' | 'binding' | 'cybertechnology' | 'alchemy' | 'disenchanting' | 'artificing' | 'aeronautics-mechanic' | 'industrial-mechanic' | 'automotive-mechanic' | 'nautical-mechanic' | 'navigation' | 'tracking' | 'survival' | 'archery' | 'free-fall' | 'heavy-weapons' | 'throwing-weapons' | 'exotic-melee' | 'exotic-ranged';
100
135
  export declare const SKILL_NAMES: SkillName[];
101
136
  /**
102
137
  * Skills that fall back to the legacy `combatSkill` attribute when no
@@ -147,6 +182,7 @@ export declare function firearmSkillFor(weapon: {
147
182
  name: string;
148
183
  shape?: string;
149
184
  category?: string;
185
+ weaponSkill?: WeaponSkill;
150
186
  }): SkillName;
151
187
  export interface ICombatAttributes {
152
188
  body?: number;
@@ -293,6 +329,11 @@ export declare class Player extends AbstractPlayer {
293
329
  private _autoStance;
294
330
  get autoStance(): FightStance;
295
331
  set autoStance(v: FightStance);
332
+ /** Which of the book's two intrusion actions the next hack uses
333
+ * (see MatrixStance). Sheet-visible, like its meat-world twin. */
334
+ private _matrixStance;
335
+ get matrixStance(): MatrixStance;
336
+ set matrixStance(v: MatrixStance);
296
337
  grappledBy?: string;
297
338
  grappleThreshold?: number;
298
339
  grappling?: string;
@@ -763,6 +804,11 @@ export declare class Player extends AbstractPlayer {
763
804
  * never a die, and a die is never a limit.
764
805
  */
765
806
  smartlinkAccuracyBonus(weapon?: Item | null): number;
807
+ /**
808
+ * A LASER SIGHT's +1 Accuracy (p.432), built in or fitted -- and never
809
+ * cumulative with a smartlink: getAttackLimit takes the larger of the two.
810
+ */
811
+ laserSightBonus(weapon?: Item | null): number;
766
812
  get matrixTaken(): number;
767
813
  get maxMatrixBoxes(): number;
768
814
  /** Routes Matrix combat damage into the jacked-in deck's hardware track. */
@@ -826,6 +872,30 @@ export declare class Player extends AbstractPlayer {
826
872
  */
827
873
  augGrades: Map<string, string>;
828
874
  hasAug(key: string): boolean;
875
+ /**
876
+ * THE WEAPON BUILT INTO YOUR HANDS (core p.458, xHarA3TNgxZXtZwgp).
877
+ * Canon routes these through Unarmed Combat and the Physical limit,
878
+ * so they REPLACE the bare-fists profile rather than sitting in a
879
+ * hand slot -- see getWeaponProfile and utilities/combat-exchange.ts,
880
+ * the two places that compute a punch.
881
+ *
882
+ * A drawn weapon always wins: chrome in the palm does not stop you
883
+ * shooting. Mutually exclusive by row (excludes), so at most one is
884
+ * ever installed and the find is the answer rather than a contest.
885
+ */
886
+ implantWeapon(): IImplantWeapon | undefined;
887
+ /**
888
+ * Jolts left in a shock hand. Ten per hand in the book, recharging
889
+ * one per ten seconds while plugged in -- there is no wall clock here
890
+ * for a hand to be plugged into, so the trickle is compressed to a
891
+ * refill on rest (commands/rest.ts). Session state: a fresh install
892
+ * arrives charged.
893
+ */
894
+ implantCharges: number;
895
+ /** Spends one jolt. Returns what is left. */
896
+ spendImplantCharge(): number;
897
+ /** Back to full -- a rest, or the moment the chrome goes in. */
898
+ refillImplantCharges(): void;
829
899
  /** Full essence points lost, rounded up -- the toll Magic/Resonance pay. */
830
900
  get essenceBurn(): number;
831
901
  /**
@@ -838,6 +908,23 @@ export declare class Player extends AbstractPlayer {
838
908
  essence: number;
839
909
  grade?: string;
840
910
  }): void;
911
+ /** Every effect that applies right now, with the rating it scales by. */
912
+ private applyingEffects;
913
+ private sumEffects;
914
+ /**
915
+ * Dice the gear adds to a pool or a skill's tests (cf. augBonus,
916
+ * qualityBonus): `kind` is a pool kind or a SkillName; `only` names a
917
+ * narrowing an effect may carry ('haggle', 'silent', 'matrix-search').
918
+ */
919
+ gearBonus(kind: string, opts?: {
920
+ only?: string;
921
+ }): number;
922
+ /** What the gear adds to a LIMIT (a Shopsoft's +1 Social on a haggle). */
923
+ gearLimit(kind: 'physical' | 'mental' | 'social' | 'accuracy', opts?: {
924
+ only?: string;
925
+ }): number;
926
+ /** A capability the gear grants (dni, smartlink, no-fog, low-light...), by key. */
927
+ hasCapability(key: string): boolean;
841
928
  /**
842
929
  * The single tap every pool reads chrome through. Wired Reflexes tiers
843
930
  * don't stack -- the higher tier wins (II supersedes I) -- but the
@@ -1079,6 +1166,24 @@ export declare class Player extends AbstractPlayer {
1079
1166
  static slotWord(group: keyof PlayerEquipment, slot: string): string;
1080
1167
  /** True for the hand slots that hold a wielded weapon. */
1081
1168
  static isWeaponSlot(group: keyof PlayerEquipment, slot: string): boolean;
1169
+ /**
1170
+ * WHERE A THING ACTUALLY IS RIGHT NOW, which for a weapon is not a
1171
+ * property of the slot (user report, 2026-09-03: "when looking at
1172
+ * equipment, and I have a Katana Holstered, I should not see Right
1173
+ * hand Katana (weapon hand) -- it's not in hand, it's in holster").
1174
+ *
1175
+ * SLOT_WORDS is static, so it can only ever say where a weapon lives
1176
+ * when drawn. The weapon slot is really two places -- the hand and the
1177
+ * holster -- and `weaponDrawn` is which one. Everything else in the
1178
+ * game already knew: the HUD prints "Holstered:", equip prints "You
1179
+ * slide it into your holster", and the equipment screen's own top line
1180
+ * prints HOLSTERED. Only the worn listing underneath still read the
1181
+ * static word, so one screen contradicted itself.
1182
+ *
1183
+ * Instance method, not static, precisely because the answer depends on
1184
+ * the actor rather than the slot.
1185
+ */
1186
+ wornSlotWord(group: keyof PlayerEquipment, slot: string): string;
1082
1187
  unequip(input: string): string;
1083
1188
  /**
1084
1189
  * The slot an ITEM wears in: the category decides (determineEquipmentSlot)
@@ -1223,7 +1328,11 @@ export declare class Player extends AbstractPlayer {
1223
1328
  bonus: number;
1224
1329
  }[];
1225
1330
  ignored: Item[];
1331
+ bonusCapped: number;
1332
+ encumbrance: number;
1226
1333
  };
1334
+ /** The p.169 encumbrance penalty on Agility and Reaction, as dice off those pools. */
1335
+ get encumbrancePenalty(): number;
1227
1336
  getAttackPool(): number;
1228
1337
  /**
1229
1338
  * The subdual pool: bare-hands work regardless of what's in the other
@@ -1526,7 +1635,7 @@ export declare class Player extends AbstractPlayer {
1526
1635
  set astralPerceiving(v: boolean);
1527
1636
  sneaking: boolean;
1528
1637
  riggedDrone?: Item;
1529
- /** Whether the ridden drone carries a weapon mount (name/description duck-typing). */
1638
+ /** Whether the ridden drone carries a weapon mount (its vehicle block, catalog v13; the name for generated frames). */
1530
1639
  get droneArmed(): boolean;
1531
1640
  dumpshockedUntil: number;
1532
1641
  get dumpshocked(): boolean;
@@ -1539,7 +1648,7 @@ export declare class Player extends AbstractPlayer {
1539
1648
  back: string;
1540
1649
  };
1541
1650
  socialMarks: Set<string>;
1542
- /** The best Focus item on this actor, if any -- scales casting power. */
1651
+ /** The best Focus item on this actor, if any -- by Force (catalog v13: ratingValue). */
1543
1652
  getBestFocus(): Item | undefined;
1544
1653
  getMagicPool(): number;
1545
1654
  /**