@maka/maka-cli 5.123.0 → 5.124.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 (73) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.d.ts +0 -8
  3. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.js +6 -50
  4. package/bundle/typescript/src/commands/game/sideQuest/adept-powers.js.map +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +3 -3
  6. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +0 -4
  8. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +0 -1342
  9. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.d.ts +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +1 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js +5 -6
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js.map +1 -1
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +2 -2
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.d.ts +0 -38
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +11 -45
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/install.js +5 -4
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/install.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js +10 -7
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js.map +1 -1
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +5 -6
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/sin.js +2 -2
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/sin.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +1 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/source.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 +14 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +11 -12
  33. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +3 -3
  35. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/game.js +5 -9
  37. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/metamagics.d.ts +32 -0
  39. package/bundle/typescript/src/commands/game/sideQuest/metamagics.js +12 -0
  40. package/bundle/typescript/src/commands/game/sideQuest/metamagics.js.map +1 -0
  41. package/bundle/typescript/src/commands/game/sideQuest/metatypes.d.ts +6 -4
  42. package/bundle/typescript/src/commands/game/sideQuest/metatypes.js +3 -83
  43. package/bundle/typescript/src/commands/game/sideQuest/metatypes.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +5 -5
  45. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +10 -14
  46. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +3 -7
  48. package/bundle/typescript/src/commands/game/sideQuest/qualities.js +15 -715
  49. package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/spells.d.ts +5 -7
  51. package/bundle/typescript/src/commands/game/sideQuest/spells.js +5 -63
  52. package/bundle/typescript/src/commands/game/sideQuest/spells.js.map +1 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/ui.js +22 -0
  54. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +36 -20
  56. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +24 -658
  57. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
  58. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +100 -20
  59. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +314 -57
  60. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +3 -2
  62. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  63. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +26 -0
  64. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  65. package/bundle/typescript/src/error.js +1 -1
  66. package/bundle/typescript/src/error.js.map +1 -1
  67. package/bundle/typescript/src/tool.d.ts +2 -0
  68. package/bundle/typescript/src/tool.js +5 -2
  69. package/bundle/typescript/src/tool.js.map +1 -1
  70. package/bundle/typescript/src/tools/mpi/sdk-runtime.d.ts +1 -0
  71. package/bundle/typescript/src/tools/mpi/sdk-runtime.js +29 -0
  72. package/bundle/typescript/src/tools/mpi/sdk-runtime.js.map +1 -1
  73. package/package.json +1 -1
@@ -38,1348 +38,6 @@
38
38
  /** Opens the `effect` of every entry that grants no dice. Read by the
39
39
  * sheet, the clinic and the test that keeps the two kinds honest. */
40
40
  export const COSMETIC_PREFIX = 'cosmetic -- no mechanical effect yet:';
41
- export const AUGMENTATIONS = [
42
- {
43
- key: 'datajack',
44
- name: 'Datajack',
45
- kind: 'cyberware',
46
- essence: 0.1,
47
- cost: 1000,
48
- effect: '+1 die on every Matrix pool (a hard line beats any trode net)',
49
- wakeLine: 'A cool port sits behind your ear. The Matrix feels one thought closer.',
50
- effects: [{ type: 'dice', category: 'pools', property: 'matrix', value: 1 }],
51
- page: 'p.452', avail: 2, canonCost: 1000,
52
- },
53
- {
54
- key: 'smartlink',
55
- name: 'Smartlink',
56
- kind: 'cyberware',
57
- essence: 0.2,
58
- cost: 4000,
59
- effect: '+2 dice with a drawn firearm (the crosshair lives in your eye)',
60
- wakeLine: 'You look at the far wall and a targeting reticle looks back.',
61
- effects: [{ type: 'dice', category: 'pools', property: 'firearms', value: 2 }],
62
- page: 'p.454', avail: 8, legality: 'R', canonCost: 4000,
63
- },
64
- // VISION ENHANCEMENT, p.454 eyeware, Rating 1-3. Two sources agree
65
- // and neither was taken on the other's word: the eyeware table gives
66
- // 0.1 Essence flat, [Rating] Capacity, Rating x 3 availability and
67
- // Rating x 4,000 nuyen; the rules text gives the effect -- "adds its
68
- // Rating as a dice pool modifier to your visual Perception Tests".
69
- //
70
- // TWO TABLES PRICE THIS THING and taking the wrong one misprices the
71
- // implant. p.444 sells vision enhancement as an ACCESSORY for glasses
72
- // and goggles at (Rating x 500) nuyen; p.454 sells the implanted
73
- // version at Rating x 4,000. The catalog is augmentations, so the
74
- // eyeware row is the one that applies -- the accessory is eight times
75
- // cheaper and is not surgery.
76
- //
77
- // THE LIMIT HALF IS NOT MODELLED, and is named rather than dropped:
78
- // canon also adds the Rating to the LIMIT on visual Perception tests.
79
- //
80
- // THE SHAPE HAS SINCE OPENED. This said "bonuses carries pool dice and
81
- // nothing else, and a limit field would be a contract change for one
82
- // family" -- true of the old map, and no longer true: chrome declares
83
- // `effects` now, and that vocabulary has carried a `limit` arm since
84
- // the gear pass. So the blocker is gone and only the work remains:
85
- // adding it means deciding the same question for every rated family,
86
- // not just this one, which is why it is still written down here rather
87
- // than done in passing.
88
- //
89
- // AUDIO ENHANCEMENT IS ITS TWIN AND IS DELIBERATELY ABSENT. The p.454
90
- // earware table gives it the identical row and the identical effect
91
- // one sense over. This engine has ONE perception pool and cannot tell
92
- // sight from hearing, so shipping both would hand a runner +6 dice on
93
- // every perception test where canon gives +3 to seeing and +3 to
94
- // hearing. Sight is the sense the engine actually models -- spotting
95
- // cover, reading a room, wouldNotice -- so sight is what ships.
96
- {
97
- key: 'vision-enhancement-1',
98
- name: 'Vision Enhancement I',
99
- kind: 'cyberware',
100
- essence: 0.1,
101
- cost: 4000,
102
- effect: '+1 die on perception (the image sharpens a shade past what eyes do)',
103
- wakeLine: 'Edges come back harder than you remember them. The far wall has a texture now.',
104
- excludes: ['vision-enhancement-2', 'vision-enhancement-3'],
105
- effects: [{ type: 'dice', category: 'pools', property: 'perception', value: 1 }],
106
- page: 'p.454', avail: 3, canonCost: 4000,
107
- },
108
- {
109
- key: 'vision-enhancement-2',
110
- name: 'Vision Enhancement II',
111
- kind: 'cyberware',
112
- essence: 0.1,
113
- cost: 8000,
114
- effect: '+2 dice on perception (the image sharpens a shade past what eyes do)',
115
- wakeLine: 'You read a licence plate across the lot and only afterwards wonder how.',
116
- excludes: ['vision-enhancement-1', 'vision-enhancement-3'],
117
- effects: [{ type: 'dice', category: 'pools', property: 'perception', value: 2 }],
118
- page: 'p.454', avail: 6, canonCost: 8000,
119
- },
120
- {
121
- key: 'vision-enhancement-3',
122
- name: 'Vision Enhancement III',
123
- kind: 'cyberware',
124
- essence: 0.1,
125
- cost: 12000,
126
- effect: '+3 dice on perception (the image sharpens a shade past what eyes do)',
127
- wakeLine: 'Nothing in the room is vague any more. It is restful and it is not restful at all.',
128
- excludes: ['vision-enhancement-1', 'vision-enhancement-2'],
129
- effects: [{ type: 'dice', category: 'pools', property: 'perception', value: 3 }],
130
- page: 'p.454', avail: 9, canonCost: 12000,
131
- },
132
- {
133
- key: 'cybereyes',
134
- name: 'Cybereyes',
135
- kind: 'cyberware',
136
- essence: 0.5,
137
- cost: 5000,
138
- effect: '+2 dice on perception tests (low-light, thermographic, flare comp)',
139
- wakeLine: 'The dark peels back. You will never see the world the old way again -- literally.',
140
- effects: [{ type: 'dice', category: 'pools', property: 'perception', value: 2 }],
141
- page: 'p.454', avail: 6, canonCost: 6000, canonEssence: 0.3,
142
- },
143
- {
144
- key: 'bone-lacing',
145
- name: 'Bone Lacing (Aluminum)',
146
- kind: 'cyberware',
147
- essence: 1.0,
148
- cost: 6000,
149
- effect: '+2 unarmed damage, +1 soak (your skeleton is the weapon now)',
150
- wakeLine: 'Everything aches at the marrow. You knock a knuckle on the table and dent it.',
151
- effects: [
152
- { type: 'dice', category: 'pools', property: 'soak', value: 1 },
153
- { type: 'dice', category: 'pools', property: 'unarmed-damage', value: 2 },
154
- ],
155
- page: 'p.455', avail: 12, legality: 'R', canonCost: 18000,
156
- excludes: ['bone-density-1', 'bone-density-2', 'bone-density-3', 'bone-density-4'],
157
- },
158
- {
159
- key: 'pain-editor',
160
- name: 'Pain Editor',
161
- kind: 'bioware',
162
- essence: 0.3,
163
- cost: 10000,
164
- effect: 'ignore the first -1 of wound modifiers (the hurt arrives as a memo)',
165
- wakeLine: 'The incision should hurt. It reads instead like a report about someone else.',
166
- page: 'p.461', avail: 18, legality: 'F', canonCost: 48000,
167
- },
168
- {
169
- key: 'wired-reflexes-1',
170
- name: 'Wired Reflexes I',
171
- kind: 'cyberware',
172
- essence: 2.0,
173
- cost: 8000,
174
- effect: '+1 initiative die, +1 defense die',
175
- wakeLine: 'You wake with lightning under your skin. The room moves like it\'s wading through syrup.',
176
- effects: [
177
- { type: 'dice', category: 'pools', property: 'initiative', value: 1 },
178
- { type: 'dice', category: 'pools', property: 'defense', value: 1 },
179
- ],
180
- page: 'p.456', avail: 8, legality: 'R', canonCost: 39000,
181
- excludes: ['synaptic-booster'],
182
- },
183
- {
184
- key: 'wired-reflexes-2',
185
- name: 'Wired Reflexes II',
186
- kind: 'cyberware',
187
- essence: 3.0,
188
- cost: 18000,
189
- effect: '+2 initiative dice, +2 defense dice (supersedes Wired Reflexes I)',
190
- wakeLine: 'The world drops into slow motion and stays there. Doors take forever to finish opening.',
191
- effects: [
192
- { type: 'dice', category: 'pools', property: 'initiative', value: 2 },
193
- { type: 'dice', category: 'pools', property: 'defense', value: 2 },
194
- ],
195
- page: 'p.456', avail: 12, legality: 'R', canonCost: 149000,
196
- excludes: ['synaptic-booster'],
197
- },
198
- {
199
- key: 'sleep-regulator',
200
- name: 'Sleep Regulator',
201
- kind: 'bioware',
202
- essence: 0.2,
203
- cost: 12000,
204
- effect: 'stay awake twice as long before sleep-deprivation fatigue bites (healing rest unaffected)',
205
- wakeLine: 'You wake from the surgery already rested. Nights are optional now -- the district never noticed you needed them.',
206
- page: 'p.461', avail: 6, canonCost: 12000, canonEssence: 0.1,
207
- },
208
- {
209
- key: 'synaptic-booster',
210
- name: 'Synaptic Booster',
211
- kind: 'bioware',
212
- essence: 0.5,
213
- cost: 16000,
214
- effect: '+1 initiative die, +1 defense die -- bioware: a fraction of the essence, twice the price',
215
- wakeLine: 'No metal, no ports -- just nerves rebuilt to a faster spec. You feel exactly like yourself, sooner.',
216
- effects: [
217
- { type: 'dice', category: 'pools', property: 'initiative', value: 1 },
218
- { type: 'dice', category: 'pools', property: 'defense', value: 1 },
219
- ],
220
- page: 'p.461', avail: 6, legality: 'R', canonCost: 95000,
221
- excludes: ['wired-reflexes-1', 'wired-reflexes-2'],
222
- },
223
- // ---- Sensory chrome (p.453-454) ----
224
- {
225
- key: 'cyberears',
226
- name: 'Cyberears',
227
- kind: 'cyberware',
228
- essence: 0.3,
229
- cost: 4000,
230
- effect: '+1 die on perception (spatial recognizer, and a damper that saves your hearing)',
231
- wakeLine: 'The room gains depth you never noticed: a fan two doors down, someone breathing above you.',
232
- effects: [{ type: 'dice', category: 'pools', property: 'perception', value: 1 }],
233
- page: 'p.454', avail: 6, canonCost: 4500,
234
- },
235
- {
236
- key: 'ultrasound-sensor',
237
- name: 'Ultrasound Sensor',
238
- kind: 'cyberware',
239
- essence: 0.25,
240
- cost: 9000,
241
- effect: '+2 dice on perception -- sound paints what smoke, darkness, and cover hide',
242
- wakeLine: 'You close your eyes and the room is still there, drawn in echoes.',
243
- effects: [{ type: 'dice', category: 'pools', property: 'perception', value: 2 }],
244
- page: 'p.453', avail: 10, canonCost: 24000,
245
- },
246
- // ---- Speed and strength (p.456, p.460) ----
247
- // REACTION ENHANCERS, p.456, the full canon range. The table is a
248
- // formula -- Rating x 0.3 Essence, (Rating x 5)R, Rating x 13,000
249
- // nuyen -- and the shipped Rating 2 matched it on every column, which
250
- // is what made the other two safe to derive rather than invent.
251
- //
252
- // THE TIERS EXCLUDE EACH OTHER, and that is not decoration: augBonus
253
- // SUMS every installed piece except the reflex family, so two tiers of
254
- // one rated aug would stack into a bonus canon never grants. It could
255
- // not happen while every family shipped exactly one tier; the moment a
256
- // family is completed it can. bone-lacing-titanium already holds this
257
- // line for a material scale (excludes: ['bone-lacing']).
258
- //
259
- // AND CANON'S OWN INCOMPATIBILITY, added to the shipped entry as well
260
- // as the new ones: reaction enhancers are incompatible with all other
261
- // enhancements to Reaction, wired reflexes included (p.456). The
262
- // shipped Rating 2 has been installable alongside them since it
263
- // landed, which is a canon defect this family's completion inherits.
264
- {
265
- key: 'reaction-enhancers-1',
266
- name: 'Reaction Enhancers I',
267
- kind: 'cyberware',
268
- essence: 0.3,
269
- cost: 4500,
270
- effect: '+1 defense die (nerve boosters that answer before you do)',
271
- wakeLine: 'A dropped cup is in your hand before you have finished flinching.',
272
- effects: [{ type: 'dice', category: 'pools', property: 'defense', value: 1 }],
273
- excludes: ['reaction-enhancers-2', 'reaction-enhancers-3', 'wired-reflexes-1', 'wired-reflexes-2', 'wired-reflexes-3', 'synaptic-booster'],
274
- page: 'p.456', avail: 5, legality: 'R', canonCost: 13000,
275
- },
276
- {
277
- key: 'reaction-enhancers-3',
278
- name: 'Reaction Enhancers III',
279
- kind: 'cyberware',
280
- essence: 0.9,
281
- cost: 13500,
282
- effect: '+3 defense dice (nerve boosters that answer before you do)',
283
- wakeLine: 'The room fills with things that have not happened yet, and you are already leaning away from them.',
284
- effects: [{ type: 'dice', category: 'pools', property: 'defense', value: 3 }],
285
- excludes: ['reaction-enhancers-1', 'reaction-enhancers-2', 'wired-reflexes-1', 'wired-reflexes-2', 'wired-reflexes-3', 'synaptic-booster'],
286
- page: 'p.456', avail: 15, legality: 'R', canonCost: 39000,
287
- },
288
- {
289
- key: 'reaction-enhancers-2',
290
- name: 'Reaction Enhancers II',
291
- kind: 'cyberware',
292
- essence: 0.6,
293
- cost: 9000,
294
- effect: '+2 defense dice (nerve boosters that answer before you do)',
295
- wakeLine: 'Someone tosses you a chip and your hand has it before your eyes find it.',
296
- effects: [{ type: 'dice', category: 'pools', property: 'defense', value: 2 }],
297
- excludes: ['reaction-enhancers-1', 'reaction-enhancers-3', 'wired-reflexes-1', 'wired-reflexes-2', 'wired-reflexes-3', 'synaptic-booster'],
298
- page: 'p.456', avail: 10, legality: 'R', canonCost: 26000,
299
- },
300
- // SYNTHACARDIUM, bioware, Rating 1-3: Rating x 0.1 Essence,
301
- // (Rating x 4) availability with no legality suffix, Rating x 30,000
302
- // nuyen. The book's own words for the effect -- "adds its Rating as a
303
- // dice pool bonus to your tests using skills in the Athletics skill
304
- // group" -- which is exactly the shipped Rating 2's +2 athletics, so
305
- // the family fills without touching what anybody already owns.
306
- //
307
- // THE RETRIEVAL COULD NOT PRODUCE THIS ROW. Asked in a family sweep
308
- // it reported Synthacardium NOT FOUND, and #162 omitted the family on
309
- // that basis. The book settles it, and the shipped Rating 2 matches
310
- // the formula on all three columns -- which is what makes reading a
311
- // badly-extracted table trustworthy rather than hopeful.
312
- {
313
- key: 'synthacardium-1',
314
- name: 'Synthacardium I',
315
- kind: 'bioware',
316
- essence: 0.1,
317
- cost: 4000,
318
- effect: '+1 die on athletics (a heart cultured for the long run)',
319
- wakeLine: 'You climb the clinic stairs and notice, at the top, that you did not need to notice them.',
320
- excludes: ['synthacardium-2', 'synthacardium-3'],
321
- effects: [{ type: 'dice', category: 'pools', property: 'athletics', value: 1 }],
322
- page: 'p.460', avail: 4, canonCost: 30000,
323
- },
324
- {
325
- key: 'synthacardium-3',
326
- name: 'Synthacardium III',
327
- kind: 'bioware',
328
- essence: 0.3,
329
- cost: 12000,
330
- effect: '+3 dice on athletics (a heart cultured for the long run)',
331
- wakeLine: 'Your pulse settles at a rate that would worry a doctor who did not know. You could run all night.',
332
- excludes: ['synthacardium-1', 'synthacardium-2'],
333
- effects: [{ type: 'dice', category: 'pools', property: 'athletics', value: 3 }],
334
- page: 'p.460', avail: 12, canonCost: 90000,
335
- },
336
- {
337
- key: 'synthacardium-2',
338
- name: 'Synthacardium II',
339
- kind: 'bioware',
340
- essence: 0.2,
341
- cost: 8000,
342
- effect: '+2 dice on athletics (a heart cultured for the long run)',
343
- wakeLine: 'You take the clinic stairs two at a time and arrive without a breath out of place.',
344
- effects: [{ type: 'dice', category: 'pools', property: 'athletics', value: 2 }],
345
- excludes: ['synthacardium-1', 'synthacardium-3'],
346
- page: 'p.460', avail: 8, canonCost: 60000,
347
- },
348
- {
349
- key: 'wired-reflexes-3',
350
- name: 'Wired Reflexes III',
351
- kind: 'cyberware',
352
- essence: 5.0,
353
- cost: 40000,
354
- effect: '+3 initiative dice, +3 defense dice (supersedes the lower tiers -- and costs most of your soul)',
355
- wakeLine: 'The world stops pretending to move. You have never been this fast, and never had this little of yourself left.',
356
- effects: [
357
- { type: 'dice', category: 'pools', property: 'initiative', value: 3 },
358
- { type: 'dice', category: 'pools', property: 'defense', value: 3 },
359
- ],
360
- excludes: ['synaptic-booster'],
361
- page: 'p.456', avail: 20, legality: 'R', canonCost: 217000,
362
- },
363
- // ---- Skin, bone, and blood (p.455, p.460) ----
364
- {
365
- key: 'bone-lacing-titanium',
366
- name: 'Bone Lacing (Titanium)',
367
- kind: 'cyberware',
368
- essence: 1.5,
369
- cost: 12000,
370
- effect: '+3 unarmed damage, +2 soak (the expensive skeleton -- supersedes aluminum lacing)',
371
- wakeLine: 'You are heavier by the weight of a small engine, and everything you touch knows it.',
372
- effects: [
373
- { type: 'dice', category: 'pools', property: 'soak', value: 2 },
374
- { type: 'dice', category: 'pools', property: 'unarmed-damage', value: 3 },
375
- ],
376
- excludes: ['bone-lacing', 'bone-density-1', 'bone-density-2', 'bone-density-3', 'bone-density-4'],
377
- page: 'p.455', avail: 16, legality: 'R', canonCost: 30000,
378
- },
379
- {
380
- key: 'platelet-factories',
381
- name: 'Platelet Factories',
382
- kind: 'bioware',
383
- essence: 0.2,
384
- cost: 7000,
385
- effect: '+2 dice healing, +1 soak (wounds close while you are still standing in them)',
386
- wakeLine: 'The surgical cut is already a pink line. Your blood has learned to be in a hurry.',
387
- effects: [
388
- { type: 'dice', category: 'pools', property: 'healing', value: 2 },
389
- { type: 'dice', category: 'pools', property: 'soak', value: 1 },
390
- ],
391
- page: 'p.460', avail: 12, canonCost: 17000,
392
- },
393
- {
394
- key: 'suprathyroid-gland',
395
- name: 'Suprathyroid Gland',
396
- kind: 'bioware',
397
- essence: 0.7,
398
- cost: 20000,
399
- effect: '+1 attack, +1 soak, +2 athletics -- the whole body runs hot, and eats like it',
400
- wakeLine: 'You wake ravenous and burning, a body idling at a speed it was never issued.',
401
- effects: [
402
- { type: 'dice', category: 'pools', property: 'attack', value: 1 },
403
- { type: 'dice', category: 'pools', property: 'soak', value: 1 },
404
- { type: 'dice', category: 'pools', property: 'athletics', value: 2 },
405
- ],
406
- page: 'p.460', avail: 20, legality: 'R', canonCost: 140000,
407
- },
408
- // ---- Cultured bioware: the head (p.461) ----
409
- // CEREBRAL BOOSTER, p.461, Rating 1-3: Rating x 0.2 Essence,
410
- // (Rating x 6) availability with no legality suffix, Rating x 31,500
411
- // nuyen. The shipped Rating 2 matched on all four, the missing suffix
412
- // included -- which is the kind of agreement that makes a derived
413
- // sibling trustworthy.
414
- {
415
- key: 'cerebral-booster-1',
416
- name: 'Cerebral Booster I',
417
- kind: 'bioware',
418
- essence: 0.2,
419
- cost: 6500,
420
- effect: '+1 die on every Matrix pool (more brain, cultured to fit your skull)',
421
- wakeLine: 'A problem you left half-finished last week is suddenly obvious, and you cannot say when that happened.',
422
- effects: [{ type: 'dice', category: 'pools', property: 'matrix', value: 1 }],
423
- excludes: ['cerebral-booster-2', 'cerebral-booster-3'],
424
- page: 'p.461', avail: 6, canonCost: 31500,
425
- },
426
- {
427
- key: 'cerebral-booster-3',
428
- name: 'Cerebral Booster III',
429
- kind: 'bioware',
430
- essence: 0.6,
431
- cost: 19500,
432
- effect: '+3 dice on every Matrix pool (more brain, cultured to fit your skull)',
433
- wakeLine: 'You follow four threads at once and none of them frays. The skull feels crowded in a way you have decided to enjoy.',
434
- effects: [{ type: 'dice', category: 'pools', property: 'matrix', value: 3 }],
435
- excludes: ['cerebral-booster-1', 'cerebral-booster-2'],
436
- page: 'p.461', avail: 18, canonCost: 94500,
437
- },
438
- {
439
- key: 'cerebral-booster-2',
440
- name: 'Cerebral Booster II',
441
- kind: 'bioware',
442
- essence: 0.4,
443
- cost: 13000,
444
- effect: '+2 dice on every Matrix pool (more brain, cultured to fit your skull)',
445
- wakeLine: 'Thoughts arrive already finished. You catch yourself solving things you had not started.',
446
- effects: [{ type: 'dice', category: 'pools', property: 'matrix', value: 2 }],
447
- excludes: ['cerebral-booster-1', 'cerebral-booster-3'],
448
- page: 'p.461', avail: 12, canonCost: 63000,
449
- },
450
- // DAMAGE COMPENSATOR, p.461 cultured bioware: Rating x 0.1 Essence,
451
- // (Rating x 3)F, Rating x 2,000 nuyen. Canon runs to Rating 12; this
452
- // catalog stops at 3, which is where it already stopped -- widening
453
- // the band is a balance decision about how much pain a runner files
454
- // under 'later', not a catalog gap, and it is not made here.
455
- //
456
- // ONE RETRIEVAL PUT THIS ROW UNDER 'VEHICLE MODIFICATIONS' and I very
457
- // nearly reported the shipped entry as carrying vehicle stats. The
458
- // per-entry follow-up quoted the row out of the CULTURED BIOWARE table
459
- // on the same page and settled it: the shipped Rating 3 is right.
460
- // Recorded because that time the discipline protected an existing
461
- // entry rather than a new one.
462
- {
463
- key: 'damage-compensator-1',
464
- name: 'Damage Compensator (Rating 1)',
465
- kind: 'bioware',
466
- essence: 0.1,
467
- cost: 2000,
468
- effect: 'ignore 1 box of damage when figuring wound modifiers (the pain arrives, the penalty does not)',
469
- wakeLine: 'The first bad news your body sends now arrives without the shouting.',
470
- effects: [{ type: 'dice', category: 'pools', property: 'wound-ignore', value: 1 }],
471
- excludes: ['damage-compensator-2', 'damage-compensator-3'],
472
- page: 'p.461', avail: 3, legality: 'F', canonCost: 2000,
473
- },
474
- {
475
- key: 'damage-compensator-2',
476
- name: 'Damage Compensator (Rating 2)',
477
- kind: 'bioware',
478
- essence: 0.2,
479
- cost: 4000,
480
- effect: 'ignore 2 boxes of damage when figuring wound modifiers (the pain arrives, the penalty does not)',
481
- wakeLine: 'Two floors of the alarm are switched off. The building still burns; you just stop hearing about it so early.',
482
- effects: [{ type: 'dice', category: 'pools', property: 'wound-ignore', value: 2 }],
483
- excludes: ['damage-compensator-1', 'damage-compensator-3'],
484
- page: 'p.461', avail: 6, legality: 'F', canonCost: 4000,
485
- },
486
- {
487
- key: 'damage-compensator-3',
488
- name: 'Damage Compensator (Rating 3)',
489
- kind: 'bioware',
490
- essence: 0.3,
491
- cost: 6000,
492
- effect: 'ignore 3 boxes of damage when figuring wound modifiers (the pain arrives, the penalty does not)',
493
- wakeLine: 'Cut-offs sit in your nerves now, filing the first three screams under "later".',
494
- effects: [{ type: 'dice', category: 'pools', property: 'wound-ignore', value: 3 }],
495
- excludes: ['damage-compensator-1', 'damage-compensator-2'],
496
- page: 'p.461', avail: 9, legality: 'F', canonCost: 6000,
497
- },
498
- // ---- The face (p.460) ----
499
- // TAILORED PHEROMONES, p.460: Rating x 0.2 Essence, (Rating x 4)R,
500
- // Rating x 31,000 nuyen -- the shipped Rating 2 matched all three.
501
- //
502
- // THE RANGE IS 1-3, settled by the bioware table in the book after the
503
- // retrieval would only ever give the formula. Rating 3 is below.
504
- {
505
- key: 'tailored-pheromones-1',
506
- name: 'Tailored Pheromones I',
507
- kind: 'bioware',
508
- essence: 0.2,
509
- cost: 5500,
510
- effect: '+1 die on social work -- people like you and cannot say why',
511
- wakeLine: 'Conversations go a shade easier all afternoon. Nobody mentions it, including you.',
512
- effects: [{ type: 'dice', category: 'pools', property: 'social', value: 1 }],
513
- excludes: ['tailored-pheromones-2', 'tailored-pheromones-3'],
514
- page: 'p.460', avail: 4, legality: 'R', canonCost: 31000,
515
- },
516
- // RATING 3 JOINS THE FAMILY. #162 shipped I and II and stopped, because
517
- // the retrieval gave the formula and never the RANGE -- and a tier the
518
- // book does not allow is worse than a family one short. The bioware
519
- // table settles it: "Tailored pheromones (Rating 1-3)". The ceiling is
520
- // 3, so 3 exists, and the note above it that said otherwise is gone.
521
- {
522
- key: 'tailored-pheromones-3',
523
- name: 'Tailored Pheromones III',
524
- kind: 'bioware',
525
- essence: 0.6,
526
- cost: 16500,
527
- effect: '+3 dice on social work -- people like you and cannot say why',
528
- wakeLine: 'A stranger holds a door for you and looks briefly puzzled about why they did.',
529
- excludes: ['tailored-pheromones-1', 'tailored-pheromones-2'],
530
- effects: [{ type: 'dice', category: 'pools', property: 'social', value: 3 }],
531
- page: 'p.460', avail: 12, legality: 'R', canonCost: 93000,
532
- },
533
- {
534
- key: 'tailored-pheromones-2',
535
- name: 'Tailored Pheromones II',
536
- kind: 'bioware',
537
- essence: 0.4,
538
- cost: 11000,
539
- effect: '+2 dice on social work -- people like you and cannot say why',
540
- wakeLine: 'Nothing about you looks different. The room warms to you anyway.',
541
- effects: [{ type: 'dice', category: 'pools', property: 'social', value: 2 }],
542
- excludes: ['tailored-pheromones-1', 'tailored-pheromones-3'],
543
- page: 'p.460', avail: 8, legality: 'R', canonCost: 62000,
544
- },
545
- // ================= THE RATED FAMILIES, AT CANON =================
546
- //
547
- // Five families shipped as ONE hand-tuned tier each, and the tier was
548
- // not always the one its name suggested: what the catalog called
549
- // "Muscle Toner" carried Rating 4's essence, availability and price
550
- // while granting Rating 1's dice. Filling the siblings in forced a
551
- // choice -- contradict the shipped tier, or invent a scale -- and the
552
- // project owner ruled for canon.
553
- //
554
- // THE MAPPING IS NOT A JUDGEMENT CALL. In this engine an attribute
555
- // point IS a die in the pools these augs touch, read off the formulas
556
- // rather than assumed:
557
- // attack = AGILITY + skill + ... + augBonus (player.ts)
558
- // sneak = AGILITY + sneaking + ... + augBonus (npc.ts)
559
- // athletics = STRENGTH + athletics + ... + augBonus (move.ts)
560
- // soak = body + ARMOR + ... + augBonus (player.ts)
561
- // So "+Rating Agility" is +Rating attack AND +Rating sneak; "+Rating
562
- // Armor" is +Rating soak; "+Rating Strength" is +Rating athletics.
563
- // Canon dictates the numbers; nothing here was chosen for feel.
564
- //
565
- // KEYS ARE UNCHANGED and that is load-bearing. restorePlayer REPLAYS
566
- // essence from this catalog on every load and SKIPS a key it cannot
567
- // find (persistence.ts) -- so renaming `muscle-toner` to
568
- // `muscle-toner-4` would hand every owner their essence back along
569
- // with the bonus. Only the display names gained their numeral.
570
- //
571
- // THE TIERS EXCLUDE THEIR SIBLINGS, or augBonus sums them: it adds up
572
- // every installed piece bar the reflex family, so a filled family is
573
- // stackable the moment it is filled. Orthoskin and dermal plating
574
- // exclude each other across families too, because the book says so
575
- // ("Orthoskin cannot be combined with skin augmentations that give
576
- // you Armor, including dermal plating").
577
- // ---- MUSCLE TONER (p.460), Rating 1-4 ----
578
- {
579
- key: 'muscle-toner-1',
580
- name: 'Muscle Toner I',
581
- kind: 'bioware',
582
- essence: 0.2,
583
- cost: 2250,
584
- effect: '+1 die on meat-plane attacks and on sneaking (vat-grown fast-twitch fiber)',
585
- wakeLine: 'Your hands move a half-beat before you finish deciding to move them.',
586
- effects: [
587
- { type: 'dice', category: 'pools', property: 'attack', value: 1 },
588
- { type: 'dice', category: 'pools', property: 'sneak', value: 1 },
589
- ],
590
- excludes: ['muscle-toner-2', 'muscle-toner-3', 'muscle-toner', 'muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4'],
591
- page: 'p.460', avail: 5, legality: 'R', canonCost: 32000,
592
- },
593
- {
594
- key: 'muscle-toner-2',
595
- name: 'Muscle Toner II',
596
- kind: 'bioware',
597
- essence: 0.4,
598
- cost: 4500,
599
- effect: '+2 diece on meat-plane attacks and on sneaking (vat-grown fast-twitch fiber)',
600
- wakeLine: 'You catch a falling glass without looking up from the table.',
601
- effects: [
602
- { type: 'dice', category: 'pools', property: 'attack', value: 2 },
603
- { type: 'dice', category: 'pools', property: 'sneak', value: 2 },
604
- ],
605
- excludes: ['muscle-toner-1', 'muscle-toner-3', 'muscle-toner', 'muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4'],
606
- page: 'p.460', avail: 10, legality: 'R', canonCost: 64000,
607
- },
608
- {
609
- key: 'muscle-toner-3',
610
- name: 'Muscle Toner III',
611
- kind: 'bioware',
612
- essence: 0.6,
613
- cost: 7000,
614
- effect: '+3 diece on meat-plane attacks and on sneaking (vat-grown fast-twitch fiber)',
615
- wakeLine: 'The room has slowed by a fraction nobody else has noticed.',
616
- effects: [
617
- { type: 'dice', category: 'pools', property: 'attack', value: 3 },
618
- { type: 'dice', category: 'pools', property: 'sneak', value: 3 },
619
- ],
620
- excludes: ['muscle-toner-1', 'muscle-toner-2', 'muscle-toner', 'muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4'],
621
- page: 'p.460', avail: 15, legality: 'R', canonCost: 96000,
622
- },
623
- {
624
- key: 'muscle-toner',
625
- name: 'Muscle Toner IV',
626
- kind: 'bioware',
627
- essence: 0.8,
628
- cost: 9000,
629
- effect: '+4 diece on meat-plane attacks and on sneaking (vat-grown fast-twitch fiber)',
630
- wakeLine: 'You move like something that was designed to, and the designing shows.',
631
- effects: [
632
- { type: 'dice', category: 'pools', property: 'attack', value: 4 },
633
- { type: 'dice', category: 'pools', property: 'sneak', value: 4 },
634
- ],
635
- excludes: ['muscle-toner-1', 'muscle-toner-2', 'muscle-toner-3', 'muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4'],
636
- page: 'p.460', avail: 20, legality: 'R', canonCost: 128000,
637
- },
638
- // ---- MUSCLE AUGMENTATION (p.460), Rating 1-4 ----
639
- {
640
- key: 'muscle-augmentation-1',
641
- name: 'Muscle Augmentation I',
642
- kind: 'bioware',
643
- essence: 0.2,
644
- cost: 5500,
645
- effect: '+1 die on athletics (grown strength, not bolted-on)',
646
- wakeLine: 'Your grip closes on the bed rail a little harder than you meant it to.',
647
- effects: [{ type: 'dice', category: 'pools', property: 'athletics', value: 1 }],
648
- excludes: ['muscle-augmentation-2', 'muscle-augmentation-3', 'muscle-augmentation-4', 'muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4'],
649
- page: 'p.460', avail: 5, legality: 'R', canonCost: 31000,
650
- },
651
- {
652
- key: 'muscle-augmentation-2',
653
- name: 'Muscle Augmentation II',
654
- kind: 'bioware',
655
- essence: 0.4,
656
- cost: 11000,
657
- effect: '+2 diece on athletics (grown strength, not bolted-on)',
658
- wakeLine: 'Your arms sit heavier on the table, and the table complains first.',
659
- effects: [{ type: 'dice', category: 'pools', property: 'athletics', value: 2 }],
660
- excludes: ['muscle-augmentation-1', 'muscle-augmentation-3', 'muscle-augmentation-4', 'muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4'],
661
- page: 'p.460', avail: 10, legality: 'R', canonCost: 62000,
662
- },
663
- {
664
- key: 'muscle-augmentation-3',
665
- name: 'Muscle Augmentation III',
666
- kind: 'bioware',
667
- essence: 0.6,
668
- cost: 16500,
669
- effect: '+3 diece on athletics (grown strength, not bolted-on)',
670
- wakeLine: 'You stand up too fast and the chair goes over behind you.',
671
- effects: [{ type: 'dice', category: 'pools', property: 'athletics', value: 3 }],
672
- excludes: ['muscle-augmentation-1', 'muscle-augmentation-2', 'muscle-augmentation-4', 'muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4'],
673
- page: 'p.460', avail: 15, legality: 'R', canonCost: 93000,
674
- },
675
- {
676
- key: 'muscle-augmentation-4',
677
- name: 'Muscle Augmentation IV',
678
- kind: 'bioware',
679
- essence: 0.8,
680
- cost: 22000,
681
- effect: '+4 diece on athletics (grown strength, not bolted-on)',
682
- wakeLine: 'Doors open further than you push them. You are learning to push less.',
683
- effects: [{ type: 'dice', category: 'pools', property: 'athletics', value: 4 }],
684
- excludes: ['muscle-augmentation-1', 'muscle-augmentation-2', 'muscle-augmentation-3', 'muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4'],
685
- page: 'p.460', avail: 20, legality: 'R', canonCost: 124000,
686
- },
687
- // ---- ORTHOSKIN (p.460), Rating 1-4 ----
688
- {
689
- key: 'orthoskin-1',
690
- name: 'Orthoskin I',
691
- kind: 'bioware',
692
- essence: 0.25,
693
- cost: 3000,
694
- effect: '+1 soak, and no plating shows in a scan (grown armor, worn under the skin)',
695
- wakeLine: 'Your skin looks exactly the same. It is not.',
696
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 1 }],
697
- excludes: ['orthoskin-2', 'orthoskin-3', 'orthoskin-4', 'dermal-plating', 'dermal-plating-1', 'dermal-plating-2', 'dermal-plating-4', 'dermal-plating-5', 'dermal-plating-6'],
698
- page: 'p.460', avail: 4, legality: 'R', canonCost: 6000,
699
- },
700
- {
701
- key: 'orthoskin-2',
702
- name: 'Orthoskin II',
703
- kind: 'bioware',
704
- essence: 0.5,
705
- cost: 6000,
706
- effect: '+2 soak, and no plating shows in a scan (grown armor, worn under the skin)',
707
- wakeLine: 'Your skin looks exactly the same. A knife would disagree.',
708
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 2 }],
709
- excludes: ['orthoskin-1', 'orthoskin-3', 'orthoskin-4', 'dermal-plating', 'dermal-plating-1', 'dermal-plating-2', 'dermal-plating-4', 'dermal-plating-5', 'dermal-plating-6'],
710
- page: 'p.460', avail: 8, legality: 'R', canonCost: 12000,
711
- },
712
- {
713
- key: 'orthoskin-3',
714
- name: 'Orthoskin III',
715
- kind: 'bioware',
716
- essence: 0.75,
717
- cost: 9000,
718
- effect: '+3 soak, and no plating shows in a scan (grown armor, worn under the skin)',
719
- wakeLine: 'You run a thumbnail along your forearm and it skates off.',
720
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 3 }],
721
- excludes: ['orthoskin-1', 'orthoskin-2', 'orthoskin-4', 'dermal-plating', 'dermal-plating-1', 'dermal-plating-2', 'dermal-plating-4', 'dermal-plating-5', 'dermal-plating-6'],
722
- page: 'p.460', avail: 12, legality: 'R', canonCost: 18000,
723
- },
724
- {
725
- key: 'orthoskin-4',
726
- name: 'Orthoskin IV',
727
- kind: 'bioware',
728
- essence: 1,
729
- cost: 12000,
730
- effect: '+4 soak, and no plating shows in a scan (grown armor, worn under the skin)',
731
- wakeLine: 'Nothing about you reads as armored, which is the entire and expensive point.',
732
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 4 }],
733
- excludes: ['orthoskin-1', 'orthoskin-2', 'orthoskin-3', 'dermal-plating', 'dermal-plating-1', 'dermal-plating-2', 'dermal-plating-4', 'dermal-plating-5', 'dermal-plating-6'],
734
- page: 'p.460', avail: 16, legality: 'R', canonCost: 24000,
735
- },
736
- // ---- DERMAL PLATING (p.456), Rating 1-6 ----
737
- {
738
- key: 'dermal-plating-1',
739
- name: 'Dermal Plating I',
740
- kind: 'cyberware',
741
- essence: 0.5,
742
- cost: 2250,
743
- effect: '+1 soak (armor that never comes off)',
744
- wakeLine: 'A faint ridging under the skin, like a scar you did not earn.',
745
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 1 }],
746
- excludes: ['dermal-plating-2', 'dermal-plating', 'dermal-plating-4', 'dermal-plating-5', 'dermal-plating-6', 'orthoskin-1', 'orthoskin-2', 'orthoskin-3', 'orthoskin-4'],
747
- page: 'p.456', avail: 4, legality: 'R', canonCost: 3000,
748
- },
749
- {
750
- key: 'dermal-plating-2',
751
- name: 'Dermal Plating II',
752
- kind: 'cyberware',
753
- essence: 1,
754
- cost: 4750,
755
- effect: '+2 soak (armor that never comes off)',
756
- wakeLine: 'Your forearms have an edge to them now. People notice and do not say.',
757
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 2 }],
758
- excludes: ['dermal-plating-1', 'dermal-plating', 'dermal-plating-4', 'dermal-plating-5', 'dermal-plating-6', 'orthoskin-1', 'orthoskin-2', 'orthoskin-3', 'orthoskin-4'],
759
- page: 'p.456', avail: 8, legality: 'R', canonCost: 6000,
760
- },
761
- {
762
- key: 'dermal-plating',
763
- name: 'Dermal Plating III',
764
- kind: 'cyberware',
765
- essence: 1.5,
766
- cost: 7000,
767
- effect: '+3 soak (armor that never comes off)',
768
- wakeLine: 'Your skin sits heavier, ridged under the surface like something geological.',
769
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 3 }],
770
- excludes: ['dermal-plating-1', 'dermal-plating-2', 'dermal-plating-4', 'dermal-plating-5', 'dermal-plating-6', 'orthoskin-1', 'orthoskin-2', 'orthoskin-3', 'orthoskin-4'],
771
- page: 'p.456', avail: 12, legality: 'R', canonCost: 9000,
772
- },
773
- {
774
- key: 'dermal-plating-4',
775
- name: 'Dermal Plating IV',
776
- kind: 'cyberware',
777
- essence: 2,
778
- cost: 9500,
779
- effect: '+4 soak (armor that never comes off)',
780
- wakeLine: 'You are visibly plated. Nobody asks you for directions any more.',
781
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 4 }],
782
- excludes: ['dermal-plating-1', 'dermal-plating-2', 'dermal-plating', 'dermal-plating-5', 'dermal-plating-6', 'orthoskin-1', 'orthoskin-2', 'orthoskin-3', 'orthoskin-4'],
783
- page: 'p.456', avail: 16, legality: 'R', canonCost: 12000,
784
- },
785
- {
786
- key: 'dermal-plating-5',
787
- name: 'Dermal Plating V',
788
- kind: 'cyberware',
789
- essence: 2.5,
790
- cost: 11500,
791
- effect: '+5 soak (armor that never comes off)',
792
- wakeLine: 'Chairs creak. Doorframes are closer than they were.',
793
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 5 }],
794
- excludes: ['dermal-plating-1', 'dermal-plating-2', 'dermal-plating', 'dermal-plating-4', 'dermal-plating-6', 'orthoskin-1', 'orthoskin-2', 'orthoskin-3', 'orthoskin-4'],
795
- page: 'p.456', avail: 20, legality: 'R', canonCost: 15000,
796
- },
797
- {
798
- key: 'dermal-plating-6',
799
- name: 'Dermal Plating VI',
800
- kind: 'cyberware',
801
- essence: 3,
802
- cost: 14000,
803
- effect: '+6 soak (armor that never comes off)',
804
- wakeLine: 'You are wearing your own armor and there is no taking it off, ever.',
805
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 6 }],
806
- excludes: ['dermal-plating-1', 'dermal-plating-2', 'dermal-plating', 'dermal-plating-4', 'dermal-plating-5', 'orthoskin-1', 'orthoskin-2', 'orthoskin-3', 'orthoskin-4'],
807
- page: 'p.456', avail: 24, legality: 'R', canonCost: 18000,
808
- },
809
- // ---- CONTROL RIG (p.452), Rating 1-3 ----
810
- {
811
- key: 'control-rig',
812
- name: 'Control Rig I',
813
- kind: 'cyberware',
814
- essence: 1,
815
- cost: 12000,
816
- effect: '+1 die piloting drones (the machine becomes a limb)',
817
- wakeLine: 'Somewhere in your skull a new sense is waiting for wings to wear.',
818
- effects: [{ type: 'dice', category: 'pools', property: 'piloting', value: 1 }],
819
- excludes: ['control-rig-2', 'control-rig-3'],
820
- page: 'p.452', avail: 5, legality: 'R', canonCost: 43000,
821
- },
822
- {
823
- key: 'control-rig-2',
824
- name: 'Control Rig II',
825
- kind: 'cyberware',
826
- essence: 2,
827
- cost: 27000,
828
- effect: '+2 diece piloting drones (the machine becomes a limb)',
829
- wakeLine: 'You reach for a drone that is not in the room and feel the absence like a missing finger.',
830
- effects: [{ type: 'dice', category: 'pools', property: 'piloting', value: 2 }],
831
- excludes: ['control-rig', 'control-rig-3'],
832
- page: 'p.452', avail: 10, legality: 'R', canonCost: 97000,
833
- },
834
- {
835
- key: 'control-rig-3',
836
- name: 'Control Rig III',
837
- kind: 'cyberware',
838
- essence: 3,
839
- cost: 58000,
840
- effect: '+3 diece piloting drones (the machine becomes a limb)',
841
- wakeLine: 'The airframe is not a thing you fly. It is a thing you are.',
842
- effects: [{ type: 'dice', category: 'pools', property: 'piloting', value: 3 }],
843
- excludes: ['control-rig', 'control-rig-2'],
844
- page: 'p.452', avail: 15, legality: 'R', canonCost: 208000,
845
- },
846
- // BONE DENSITY AUGMENTATION (p.459-460 bioware), Rating 1-4:
847
- // Rating x 0.3 Essence, (Rating x 4) availability with no legality
848
- // suffix, Rating x 5,000 nuyen -- table pinned from the book.
849
- //
850
- // TWO EFFECTS ON TWO DIFFERENT SCALES, which is why this family does
851
- // not follow the bonus == rating shape the rest of the rated augs do:
852
- // "Your Body attribute is increased by the bone density Rating for
853
- // the purpose of damage resistance tests" -> soak = Rating,
854
- // because Body sits in the soak pool one-for-one.
855
- // The Bone Density Augmentation table gives unarmed damage as
856
- // (STR)P, (STR+1)P, (STR+2)P, (STR+3)P -> the increment is
857
- // Rating MINUS ONE, not Rating.
858
- //
859
- // RATING 1 CARRIES NO UNARMED BONUS AT ALL, and that is faithful
860
- // rather than a rounding-down. What Rating 1 buys in the book is that
861
- // your fists deal PHYSICAL damage; this engine has no stun/physical
862
- // split on a melee hit -- getWeaponProfile hands bare fists a flat
863
- // damage number -- so that half is already true for everyone, and
864
- // there is nothing left for Rating 1 to add. The key is simply
865
- // omitted at that tier rather than declared as a zero.
866
- //
867
- // INCOMPATIBLE WITH BONE LACING, both materials: "incompatible with
868
- // other augmentations to the bones, including bone lacing cyberware".
869
- {
870
- key: 'bone-density-1',
871
- name: 'Bone Density Augmentation I',
872
- kind: 'bioware',
873
- essence: 0.3,
874
- cost: 3000,
875
- effect: '+1 soak (bone grown dense enough to argue with a bullet)',
876
- wakeLine: 'Your bones feel like somebody else\'s -- heavier, and unwilling to bend the way they used to.',
877
- effects: [{ type: 'dice', category: 'pools', property: 'soak', value: 1 }],
878
- excludes: ['bone-density-2', 'bone-density-3', 'bone-density-4', 'bone-lacing', 'bone-lacing-titanium'],
879
- page: 'p.460', avail: 4, canonCost: 5000,
880
- },
881
- {
882
- key: 'bone-density-2',
883
- name: 'Bone Density Augmentation II',
884
- kind: 'bioware',
885
- essence: 0.6,
886
- cost: 6000,
887
- effect: '+2 soak, +1 unarmed damage (bone grown dense enough to argue with a bullet)',
888
- wakeLine: 'You knock on the door frame and the frame is what gives.',
889
- effects: [
890
- { type: 'dice', category: 'pools', property: 'soak', value: 2 },
891
- { type: 'dice', category: 'pools', property: 'unarmed-damage', value: 1 },
892
- ],
893
- excludes: ['bone-density-1', 'bone-density-3', 'bone-density-4', 'bone-lacing', 'bone-lacing-titanium'],
894
- page: 'p.460', avail: 8, canonCost: 10000,
895
- },
896
- {
897
- key: 'bone-density-3',
898
- name: 'Bone Density Augmentation III',
899
- kind: 'bioware',
900
- essence: 0.9,
901
- cost: 9000,
902
- effect: '+3 soak, +2 unarmed damage (bone grown dense enough to argue with a bullet)',
903
- wakeLine: 'Every fall you take from here is somebody else\'s problem.',
904
- effects: [
905
- { type: 'dice', category: 'pools', property: 'soak', value: 3 },
906
- { type: 'dice', category: 'pools', property: 'unarmed-damage', value: 2 },
907
- ],
908
- excludes: ['bone-density-1', 'bone-density-2', 'bone-density-4', 'bone-lacing', 'bone-lacing-titanium'],
909
- page: 'p.460', avail: 12, canonCost: 15000,
910
- },
911
- {
912
- key: 'bone-density-4',
913
- name: 'Bone Density Augmentation IV',
914
- kind: 'bioware',
915
- essence: 1.2,
916
- cost: 12000,
917
- effect: '+4 soak, +3 unarmed damage (bone grown dense enough to argue with a bullet)',
918
- wakeLine: 'You are a load-bearing person now. Chairs know it before you sit.',
919
- effects: [
920
- { type: 'dice', category: 'pools', property: 'soak', value: 4 },
921
- { type: 'dice', category: 'pools', property: 'unarmed-damage', value: 3 },
922
- ],
923
- excludes: ['bone-density-1', 'bone-density-2', 'bone-density-3', 'bone-lacing', 'bone-lacing-titanium'],
924
- page: 'p.460', avail: 16, canonCost: 20000,
925
- },
926
- // SYMBIOTES (p.459 bioware), Rating 1-4: Rating x 0.2 Essence,
927
- // (Rating x 5) availability with no legality suffix, Rating x 3,500
928
- // nuyen. The effect is one clean line in the book -- "Add the Rating
929
- // of the symbiotes as a dice pool modifier on healing tests" -- and
930
- // `healing` is a kind this engine already wires, through first aid
931
- // (use.ts) and the rest recovery roll (rest.ts).
932
- //
933
- // THE UPKEEP IS NOT MODELLED AND IS NAMED RATHER THAN DROPPED. The
934
- // book charges (Rating x 200) nuyen a month for symbiote food, waived
935
- // at High Lifestyle or better. This game has lifestyles and a monthly
936
- // ledger, so the hook exists -- but a recurring per-aug charge is a
937
- // billing feature, not a catalog row, and inventing one here would
938
- // put an unpriced obligation on every runner who buys these.
939
- {
940
- key: 'symbiotes-1',
941
- name: 'Symbiotes I',
942
- kind: 'bioware',
943
- essence: 0.2,
944
- cost: 2500,
945
- effect: '+1 dice on every healing test made on or by you (first aid, rest)',
946
- wakeLine: 'A cut on your thumb from the taxi door has already stopped bleeding.',
947
- effects: [{ type: 'dice', category: 'pools', property: 'healing', value: 1 }],
948
- excludes: ['symbiotes-2', 'symbiotes-3', 'symbiotes-4'],
949
- page: 'p.460', avail: 5, canonCost: 3500,
950
- },
951
- {
952
- key: 'symbiotes-2',
953
- name: 'Symbiotes II',
954
- kind: 'bioware',
955
- essence: 0.4,
956
- cost: 5000,
957
- effect: '+2 dice on every healing test made on or by you (first aid, rest)',
958
- wakeLine: 'The surgical line is pink by evening. Something in you is working overtime and eating for it.',
959
- effects: [{ type: 'dice', category: 'pools', property: 'healing', value: 2 }],
960
- excludes: ['symbiotes-1', 'symbiotes-3', 'symbiotes-4'],
961
- page: 'p.460', avail: 10, canonCost: 7000,
962
- },
963
- {
964
- key: 'symbiotes-3',
965
- name: 'Symbiotes III',
966
- kind: 'bioware',
967
- essence: 0.6,
968
- cost: 7500,
969
- effect: '+3 dice on every healing test made on or by you (first aid, rest)',
970
- wakeLine: 'You heal like a rumour spreads. You are also always, always hungry.',
971
- effects: [{ type: 'dice', category: 'pools', property: 'healing', value: 3 }],
972
- excludes: ['symbiotes-1', 'symbiotes-2', 'symbiotes-4'],
973
- page: 'p.460', avail: 15, canonCost: 10500,
974
- },
975
- {
976
- key: 'symbiotes-4',
977
- name: 'Symbiotes IV',
978
- kind: 'bioware',
979
- essence: 0.8,
980
- cost: 10000,
981
- effect: '+4 dice on every healing test made on or by you (first aid, rest)',
982
- wakeLine: 'Your blood is a small industrious country now, and it has an appetite.',
983
- effects: [{ type: 'dice', category: 'pools', property: 'healing', value: 4 }],
984
- excludes: ['symbiotes-1', 'symbiotes-2', 'symbiotes-3'],
985
- page: 'p.460', avail: 20, canonCost: 14000,
986
- },
987
- {
988
- // THE INTERNAL CYBERDECK (Chrome Flesh p.222), the piece
989
- // xHarA3TNgxZXtZwgp named first and PR 27990dba parked as "a
990
- // getCyberdeck question ... an investigation, not a row".
991
- //
992
- // The investigation's answer: the book sells a HOUSING, not a deck.
993
- // 5,000 nuyen PLUS the cost of the deck you put in it -- so this
994
- // does not hand you hardware, it takes the deck you already own and
995
- // puts it inside your skull. Every downstream reader keeps working
996
- // untouched, because it is still the same Item: the attribute
997
- // array, programs, bricking, repair and "deck config" never learn
998
- // that anything changed. What changes is that nobody can take it
999
- // off you.
1000
- //
1001
- // Canon says nothing about an implanted deck rolling differently
1002
- // from a handheld one, so it does not. That silence is recorded
1003
- // rather than filled.
1004
- key: 'headware-cyberdeck',
1005
- name: 'Headware Cyberdeck Housing',
1006
- kind: 'cyberware',
1007
- essence: 0.4,
1008
- cost: 5000,
1009
- effect: 'your cyberdeck rides inside your skull -- it cannot be dropped, lifted, or taken off your body',
1010
- wakeLine: 'The deck is gone from your bag and the Matrix is one thought closer than it was. You keep reaching for a case that is not there.',
1011
- implantsCarriedDeck: true,
1012
- page: 'Chrome Flesh p.222', avail: 5, canonCost: 5000,
1013
- },
1014
- // ============== IMPLANT WEAPONS (core p.458) ==============
1015
- //
1016
- // THE OTHER HALF OF xHarA3TNgxZXtZwgp, and no longer a listing: these
1017
- // roll. The book is explicit about how -- "Attacks with cyber melee
1018
- // weapons use Unarmed Combat skill and the Physical limit" -- so an
1019
- // implanted weapon REPLACES the bare-fists profile rather than being
1020
- // a weapon in a hand. That is why they could not ship as catalog rows
1021
- // when the compartments did: nothing reads a weapon block that is not
1022
- // held, and the unarmed profile is computed in TWO places
1023
- // (Player.getWeaponProfile and utilities/combat-exchange.ts). Both
1024
- // read implantWeapon now; a hook in one would have made a weapon that
1025
- // works in some fights and not others.
1026
- //
1027
- // THE HAND BLADE IS DELIBERATELY ABSENT. Its essence, capacity,
1028
- // availability and cost are all on p.458, but its damage code did not
1029
- // come back from two separate retrievals -- and a weapon with an
1030
- // invented DV is worse than a missing one. It goes in when the number
1031
- // is read off the page, not guessed.
1032
- {
1033
- key: 'hand-razors',
1034
- name: 'Hand Razors',
1035
- kind: 'cyberware',
1036
- essence: 0.2,
1037
- cost: 1250,
1038
- effect: 'unarmed attacks become (STR + 1)P at AP -3 -- retractable blades along the fingers',
1039
- wakeLine: 'You flex, and something under the nail beds answers. It was always going to be your hands.',
1040
- excludes: ['spurs', 'shock-hand'],
1041
- implantWeapon: { dv: 1, dvAttribute: 'strength', damageType: 'physical', ap: -3 },
1042
- page: 'p.458', avail: 8, canonCost: 1250,
1043
- },
1044
- {
1045
- key: 'spurs',
1046
- name: 'Spurs',
1047
- kind: 'cyberware',
1048
- essence: 0.3,
1049
- cost: 5000,
1050
- effect: 'unarmed attacks become (STR + 1)P at AP -3 -- blades that punch out past the wrist',
1051
- wakeLine: 'They slide out of your forearms with a sound you will hear in your sleep, and slide back like they were never there.',
1052
- excludes: ['hand-razors', 'shock-hand'],
1053
- implantWeapon: { dv: 1, dvAttribute: 'strength', damageType: 'physical', ap: -3 },
1054
- page: 'p.458', avail: 12, canonCost: 5000,
1055
- },
1056
- {
1057
- // Ten charges in each hand, recharging one per ten seconds while
1058
- // plugged in (p.458). The charges are modelled; the ten-second
1059
- // trickle is compressed to a refill when you rest, because this
1060
- // engine has no wall clock a hand could be plugged into.
1061
- key: 'shock-hand',
1062
- name: 'Shock Hand',
1063
- kind: 'cyberware',
1064
- essence: 0.25,
1065
- cost: 5000,
1066
- effect: 'unarmed attacks become 9S(e) at AP -5 while charged -- ten jolts per hand, refilled by rest',
1067
- wakeLine: 'Your palm hums when you make a fist. The tech says that is normal. The tech would not shake your hand.',
1068
- excludes: ['hand-razors', 'spurs'],
1069
- implantWeapon: { dv: 9, damageType: 'stun', ap: -5, electric: true, charges: 10 },
1070
- page: 'p.458', avail: 8, canonCost: 5000,
1071
- },
1072
- // ================== LISTINGS: OWNABLE, NOT ROLLED ==================
1073
- //
1074
- // The first entries under the 2026-08-31 policy. Every stat is pinned
1075
- // from the book exactly as a mechanical entry would be -- essence,
1076
- // availability and price are REAL here, because you pay them -- and
1077
- // only the dice are absent. That is the whole distinction: a listing
1078
- // is honest about what it does not do, not vague about what it costs.
1079
- //
1080
- // THESE THREE ANSWER A BOARD ITEM (xHarA3TNgxZXtZwgp, "install items,
1081
- // like the internal cyberdeck, hidden body compartments, and shock
1082
- // hands"). The compartment half is here; the internal cyberdeck is
1083
- // NOT, and stays parked -- it is a getCyberdeck question about
1084
- // whether an implanted deck can be the deck you hack with, which is
1085
- // an investigation rather than a row, and shipping it as a cosmetic
1086
- // listing would answer the wrong question loudly.
1087
- //
1088
- // WHAT WOULD MAKE THEM REAL, said here so the next reader knows the
1089
- // hook is missing rather than forgotten: concealment. Each has a
1090
- // Concealability rating in the book (-10 for a skin pocket), and this
1091
- // engine has no concealment check for carried items -- palm.ts hides
1092
- // the ACT of taking something, not the thing itself. Item 9r9st
1093
- // (equipment slots) is the neighbouring question and is not mine.
1094
- {
1095
- key: 'fingertip-compartment',
1096
- name: 'Fingertip Compartment',
1097
- kind: 'cyberware',
1098
- essence: 0.1,
1099
- cost: 3000,
1100
- effect: 'cosmetic -- no mechanical effect yet: a hollowed fingertip with a catch under the nail -- somewhere very small to keep something very small',
1101
- wakeLine: 'Your index finger clicks. It has a lid now, and a secret to keep.',
1102
- page: 'p.455', avail: 4, canonCost: 3000,
1103
- },
1104
- {
1105
- key: 'smuggling-compartment',
1106
- name: 'Smuggling Compartment',
1107
- kind: 'cyberware',
1108
- essence: 0.2,
1109
- cost: 7500,
1110
- effect: 'cosmetic -- no mechanical effect yet: a shielded cavity under the muscle -- room for a pistol, and nothing on a scanner',
1111
- wakeLine: 'There is a space inside you that was not there on Tuesday. It closes flush and you cannot feel the seam.',
1112
- page: 'p.455', avail: 6, canonCost: 7500,
1113
- },
1114
- {
1115
- key: 'skin-pocket',
1116
- name: 'Skin Pocket',
1117
- kind: 'bioware',
1118
- essence: 0.1,
1119
- cost: 6000,
1120
- effect: 'cosmetic -- no mechanical effect yet: a nerveless sheath of flesh under a skin flap -- the bioware answer to a smuggling compartment',
1121
- wakeLine: 'A flap of you lifts like an envelope. It does not hurt, which is somehow worse.',
1122
- page: 'p.460', avail: 4, canonCost: 12000,
1123
- },
1124
- // ===================== CYBERLIMBS (p.456-457) =====================
1125
- //
1126
- // LISTINGS, ALL FOURTEEN, and the reason is structural rather than
1127
- // lazy: a cyberlimb in SR5 has its own Strength and Agility (base 3,
1128
- // customizable upward) and its own CAPACITY that enhancements and
1129
- // accessories are installed into. This engine has none of those --
1130
- // no per-limb attributes, no capacity, no limb slots. Item 9r9st
1131
- // (equipment slots) is the neighbouring question and is not mine.
1132
- //
1133
- // SO THE LIMB IS OWNABLE AND HONEST ABOUT IT. Essence, availability
1134
- // and price are the book's, because you really do pay them -- and a
1135
- // full arm really does cost a whole point of Essence for nothing
1136
- // mechanical yet, which is exactly the sort of thing the marker
1137
- // exists to say out loud before somebody spends it.
1138
- //
1139
- // HOW THE TABLE WAS READ, because it nearly went wrong. pdftotext in
1140
- // -layout mode returns this table with values shifted from their
1141
- // labels by an amount that CHANGES partway down, so a careful
1142
- // reading still produces wrong rows. The raw (reading-order)
1143
- // extraction returns it COLUMN-MAJOR instead -- every label, then
1144
- // every Essence, then every Capacity -- which zips together
1145
- // unambiguously. Four rows were then confirmed against an
1146
- // independent retrieval and matched exactly. Neither source alone
1147
- // was trustworthy here: unlike every other family, the catalog had
1148
- // no shipped cyberlimb to anchor the alignment against.
1149
- {
1150
- key: 'cyberlimb-obvious-full-arm',
1151
- name: 'Obvious Cyberlimb (Full Arm)',
1152
- kind: 'cyberware',
1153
- essence: 1,
1154
- cost: 6000,
1155
- effect: 'cosmetic -- no mechanical effect yet: chromed and unmistakable -- 15 capacity in the book, which this engine does not model yet',
1156
- wakeLine: 'You flex fingers that gleam. They answer instantly and they are not warm.',
1157
- page: 'p.457', avail: 4, canonCost: 15000,
1158
- },
1159
- {
1160
- key: 'cyberlimb-synthetic-full-arm',
1161
- name: 'Synthetic Cyberlimb (Full Arm)',
1162
- kind: 'cyberware',
1163
- essence: 1,
1164
- cost: 8000,
1165
- effect: 'cosmetic -- no mechanical effect yet: indistinguishable from flesh until somebody looks hard -- 8 capacity in the book, which this engine does not model yet',
1166
- wakeLine: 'It looks like the limb you were born with. It is not, and only you and the surgeon can tell.',
1167
- page: 'p.457', avail: 4, canonCost: 20000,
1168
- },
1169
- {
1170
- key: 'cyberlimb-obvious-full-leg',
1171
- name: 'Obvious Cyberlimb (Full Leg)',
1172
- kind: 'cyberware',
1173
- essence: 1,
1174
- cost: 6000,
1175
- effect: 'cosmetic -- no mechanical effect yet: chromed and unmistakable -- 20 capacity in the book, which this engine does not model yet',
1176
- wakeLine: 'You flex fingers that gleam. They answer instantly and they are not warm.',
1177
- page: 'p.457', avail: 4, canonCost: 15000,
1178
- },
1179
- {
1180
- key: 'cyberlimb-synthetic-full-leg',
1181
- name: 'Synthetic Cyberlimb (Full Leg)',
1182
- kind: 'cyberware',
1183
- essence: 1,
1184
- cost: 8000,
1185
- effect: 'cosmetic -- no mechanical effect yet: indistinguishable from flesh until somebody looks hard -- 10 capacity in the book, which this engine does not model yet',
1186
- wakeLine: 'It looks like the limb you were born with. It is not, and only you and the surgeon can tell.',
1187
- page: 'p.457', avail: 4, canonCost: 20000,
1188
- },
1189
- {
1190
- key: 'cyberlimb-obvious-hand-foot',
1191
- name: 'Obvious Cyberlimb (Hand/Foot)',
1192
- kind: 'cyberware',
1193
- essence: 0.25,
1194
- cost: 2000,
1195
- effect: 'cosmetic -- no mechanical effect yet: chromed and unmistakable -- 4 capacity in the book, which this engine does not model yet',
1196
- wakeLine: 'You flex fingers that gleam. They answer instantly and they are not warm.',
1197
- page: 'p.457', avail: 2, canonCost: 5000,
1198
- },
1199
- {
1200
- key: 'cyberlimb-synthetic-hand-foot',
1201
- name: 'Synthetic Cyberlimb (Hand/Foot)',
1202
- kind: 'cyberware',
1203
- essence: 0.25,
1204
- cost: 2500,
1205
- effect: 'cosmetic -- no mechanical effect yet: indistinguishable from flesh until somebody looks hard -- 2 capacity in the book, which this engine does not model yet',
1206
- wakeLine: 'It looks like the limb you were born with. It is not, and only you and the surgeon can tell.',
1207
- page: 'p.457', avail: 2, canonCost: 6000,
1208
- },
1209
- {
1210
- key: 'cyberlimb-obvious-lower-arm',
1211
- name: 'Obvious Cyberlimb (Lower Arm)',
1212
- kind: 'cyberware',
1213
- essence: 0.45,
1214
- cost: 4000,
1215
- effect: 'cosmetic -- no mechanical effect yet: chromed and unmistakable -- 10 capacity in the book, which this engine does not model yet',
1216
- wakeLine: 'You flex fingers that gleam. They answer instantly and they are not warm.',
1217
- page: 'p.457', avail: 4, canonCost: 10000,
1218
- },
1219
- {
1220
- key: 'cyberlimb-synthetic-lower-arm',
1221
- name: 'Synthetic Cyberlimb (Lower Arm)',
1222
- kind: 'cyberware',
1223
- essence: 0.45,
1224
- cost: 5000,
1225
- effect: 'cosmetic -- no mechanical effect yet: indistinguishable from flesh until somebody looks hard -- 5 capacity in the book, which this engine does not model yet',
1226
- wakeLine: 'It looks like the limb you were born with. It is not, and only you and the surgeon can tell.',
1227
- page: 'p.457', avail: 4, canonCost: 12000,
1228
- },
1229
- {
1230
- key: 'cyberlimb-obvious-lower-leg',
1231
- name: 'Obvious Cyberlimb (Lower Leg)',
1232
- kind: 'cyberware',
1233
- essence: 0.45,
1234
- cost: 4000,
1235
- effect: 'cosmetic -- no mechanical effect yet: chromed and unmistakable -- 12 capacity in the book, which this engine does not model yet',
1236
- wakeLine: 'You flex fingers that gleam. They answer instantly and they are not warm.',
1237
- page: 'p.457', avail: 4, canonCost: 10000,
1238
- },
1239
- {
1240
- key: 'cyberlimb-synthetic-lower-leg',
1241
- name: 'Synthetic Cyberlimb (Lower Leg)',
1242
- kind: 'cyberware',
1243
- essence: 0.45,
1244
- cost: 5000,
1245
- effect: 'cosmetic -- no mechanical effect yet: indistinguishable from flesh until somebody looks hard -- 6 capacity in the book, which this engine does not model yet',
1246
- wakeLine: 'It looks like the limb you were born with. It is not, and only you and the surgeon can tell.',
1247
- page: 'p.457', avail: 4, canonCost: 12000,
1248
- },
1249
- {
1250
- key: 'cyberlimb-obvious-torso',
1251
- name: 'Obvious Cyberlimb (Torso)',
1252
- kind: 'cyberware',
1253
- essence: 1.5,
1254
- cost: 8000,
1255
- effect: 'cosmetic -- no mechanical effect yet: chromed and unmistakable -- 10 capacity in the book, which this engine does not model yet',
1256
- wakeLine: 'You flex fingers that gleam. They answer instantly and they are not warm.',
1257
- page: 'p.457', avail: 12, canonCost: 20000,
1258
- },
1259
- {
1260
- key: 'cyberlimb-synthetic-torso',
1261
- name: 'Synthetic Cyberlimb (Torso)',
1262
- kind: 'cyberware',
1263
- essence: 1.5,
1264
- cost: 10000,
1265
- effect: 'cosmetic -- no mechanical effect yet: indistinguishable from flesh until somebody looks hard -- 5 capacity in the book, which this engine does not model yet',
1266
- wakeLine: 'It looks like the limb you were born with. It is not, and only you and the surgeon can tell.',
1267
- page: 'p.457', avail: 12, canonCost: 25000,
1268
- },
1269
- {
1270
- key: 'cyberlimb-obvious-skull',
1271
- name: 'Obvious Cyberlimb (Skull)',
1272
- kind: 'cyberware',
1273
- essence: 0.75,
1274
- cost: 4000,
1275
- effect: 'cosmetic -- no mechanical effect yet: chromed and unmistakable -- 4 capacity in the book, which this engine does not model yet',
1276
- wakeLine: 'You flex fingers that gleam. They answer instantly and they are not warm.',
1277
- page: 'p.457', avail: 16, canonCost: 10000,
1278
- },
1279
- {
1280
- key: 'cyberlimb-synthetic-skull',
1281
- name: 'Synthetic Cyberlimb (Skull)',
1282
- kind: 'cyberware',
1283
- essence: 0.75,
1284
- cost: 6000,
1285
- effect: 'cosmetic -- no mechanical effect yet: indistinguishable from flesh until somebody looks hard -- 2 capacity in the book, which this engine does not model yet',
1286
- wakeLine: 'It looks like the limb you were born with. It is not, and only you and the surgeon can tell.',
1287
- page: 'p.457', avail: 16, canonCost: 15000,
1288
- },
1289
- // MUSCLE REPLACEMENT (p.457 bodyware), Rating 1-4: Rating x 1
1290
- // Essence, (Rating x 5)R, Rating x 25,000 nuyen. It sits with the
1291
- // limbs because canon ties it to them -- vat-grown muscle replacing
1292
- // your own -- and because both muscle bioware families name it as
1293
- // the thing they cannot coexist with.
1294
- //
1295
- // IT MOVES REAL DICE, so it is NOT a listing: "It increases both your
1296
- // Strength and Agility attributes by its rating." Strength is in the
1297
- // athletics pool and Agility is in both the attack and sneak pools,
1298
- // each one-for-one, so the rating lands three times. A full point of
1299
- // Essence per rating is what pays for that.
1300
- //
1301
- // THE EXCLUSIONS WERE ALREADY HALF-WRITTEN AND POINTED AT NOTHING.
1302
- // The muscle toner and muscle augmentation families have carried
1303
- // `excludes: [... "muscle-replacement"]` since the rescale -- a key
1304
- // that did not exist, so the rule silently never fired. It would
1305
- // have started mattering the moment this family landed, which is why
1306
- // a dangling-exclude check now runs in the tests.
1307
- {
1308
- key: 'muscle-replacement-1',
1309
- name: 'Muscle Replacement I',
1310
- kind: 'cyberware',
1311
- essence: 1,
1312
- cost: 4500,
1313
- effect: '+1 on athletics, on meat-plane attacks and on sneaking (bought muscle, not earned)',
1314
- wakeLine: 'Your arms are somebody else\'s idea of your arms, and they are better at it.',
1315
- effects: [
1316
- { type: 'dice', category: 'pools', property: 'athletics', value: 1 },
1317
- { type: 'dice', category: 'pools', property: 'attack', value: 1 },
1318
- { type: 'dice', category: 'pools', property: 'sneak', value: 1 },
1319
- ],
1320
- excludes: ['muscle-replacement-2', 'muscle-replacement-3', 'muscle-replacement-4', 'muscle-toner-1', 'muscle-toner-2', 'muscle-toner-3', 'muscle-toner', 'muscle-augmentation-1', 'muscle-augmentation-2', 'muscle-augmentation-3', 'muscle-augmentation-4'],
1321
- page: 'p.457', avail: 5, legality: 'R', canonCost: 25000,
1322
- },
1323
- {
1324
- key: 'muscle-replacement-2',
1325
- name: 'Muscle Replacement II',
1326
- kind: 'cyberware',
1327
- essence: 2,
1328
- cost: 9000,
1329
- effect: '+2 on athletics, on meat-plane attacks and on sneaking (bought muscle, not earned)',
1330
- wakeLine: 'You lift the clinic chair one-handed to see if you can. You can.',
1331
- effects: [
1332
- { type: 'dice', category: 'pools', property: 'athletics', value: 2 },
1333
- { type: 'dice', category: 'pools', property: 'attack', value: 2 },
1334
- { type: 'dice', category: 'pools', property: 'sneak', value: 2 },
1335
- ],
1336
- excludes: ['muscle-replacement-1', 'muscle-replacement-3', 'muscle-replacement-4', 'muscle-toner-1', 'muscle-toner-2', 'muscle-toner-3', 'muscle-toner', 'muscle-augmentation-1', 'muscle-augmentation-2', 'muscle-augmentation-3', 'muscle-augmentation-4'],
1337
- page: 'p.457', avail: 10, legality: 'R', canonCost: 50000,
1338
- },
1339
- {
1340
- key: 'muscle-replacement-3',
1341
- name: 'Muscle Replacement III',
1342
- kind: 'cyberware',
1343
- essence: 3,
1344
- cost: 13500,
1345
- effect: '+3 on athletics, on meat-plane attacks and on sneaking (bought muscle, not earned)',
1346
- wakeLine: 'Nothing about moving costs what it used to.',
1347
- effects: [
1348
- { type: 'dice', category: 'pools', property: 'athletics', value: 3 },
1349
- { type: 'dice', category: 'pools', property: 'attack', value: 3 },
1350
- { type: 'dice', category: 'pools', property: 'sneak', value: 3 },
1351
- ],
1352
- excludes: ['muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-4', 'muscle-toner-1', 'muscle-toner-2', 'muscle-toner-3', 'muscle-toner', 'muscle-augmentation-1', 'muscle-augmentation-2', 'muscle-augmentation-3', 'muscle-augmentation-4'],
1353
- page: 'p.457', avail: 15, legality: 'R', canonCost: 75000,
1354
- },
1355
- {
1356
- key: 'muscle-replacement-4',
1357
- name: 'Muscle Replacement IV',
1358
- kind: 'cyberware',
1359
- essence: 4,
1360
- cost: 18000,
1361
- effect: '+4 on athletics, on meat-plane attacks and on sneaking (bought muscle, not earned)',
1362
- wakeLine: 'You are strong and quick in a way no training explains, and everyone can tell.',
1363
- effects: [
1364
- { type: 'dice', category: 'pools', property: 'athletics', value: 4 },
1365
- { type: 'dice', category: 'pools', property: 'attack', value: 4 },
1366
- { type: 'dice', category: 'pools', property: 'sneak', value: 4 },
1367
- ],
1368
- excludes: ['muscle-replacement-1', 'muscle-replacement-2', 'muscle-replacement-3', 'muscle-toner-1', 'muscle-toner-2', 'muscle-toner-3', 'muscle-toner', 'muscle-augmentation-1', 'muscle-augmentation-2', 'muscle-augmentation-3', 'muscle-augmentation-4'],
1369
- page: 'p.457', avail: 20, legality: 'R', canonCost: 100000,
1370
- },
1371
- ];
1372
- export function getAug(key) {
1373
- return AUGMENTATIONS.find(a => a.key === key);
1374
- }
1375
- /** Loose name lookup: exact key/name first, then substring either way. */
1376
- export function findAug(query) {
1377
- const q = query.trim().toLowerCase();
1378
- if (!q)
1379
- return undefined;
1380
- return (AUGMENTATIONS.find(a => a.key === q || a.name.toLowerCase() === q) ??
1381
- AUGMENTATIONS.find(a => a.name.toLowerCase().includes(q) || q.includes(a.name.toLowerCase())));
1382
- }
1383
41
  export const WARE_GRADES = [
1384
42
  {
1385
43
  grade: 'used', essenceMult: 1.25, costMult: 0.75, availMod: -4, streetLegal: true,