@its-not-rocket-science/ananke 0.1.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 (311) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/LICENSE +21 -0
  3. package/README.md +2199 -0
  4. package/STABLE_API.md +266 -0
  5. package/dist/src/anatomy/anatomy-compiler.d.ts +14 -0
  6. package/dist/src/anatomy/anatomy-compiler.js +277 -0
  7. package/dist/src/anatomy/anatomy-contracts.d.ts +94 -0
  8. package/dist/src/anatomy/anatomy-contracts.js +1 -0
  9. package/dist/src/anatomy/anatomy-helpers.d.ts +82 -0
  10. package/dist/src/anatomy/anatomy-helpers.js +233 -0
  11. package/dist/src/anatomy/anatomy-schema.d.ts +28 -0
  12. package/dist/src/anatomy/anatomy-schema.js +388 -0
  13. package/dist/src/anatomy/index.d.ts +4 -0
  14. package/dist/src/anatomy/index.js +4 -0
  15. package/dist/src/archetypes.d.ts +87 -0
  16. package/dist/src/archetypes.js +285 -0
  17. package/dist/src/arena.d.ts +173 -0
  18. package/dist/src/arena.js +695 -0
  19. package/dist/src/bridge/bridge-engine.d.ts +46 -0
  20. package/dist/src/bridge/bridge-engine.js +252 -0
  21. package/dist/src/bridge/index.d.ts +4 -0
  22. package/dist/src/bridge/index.js +5 -0
  23. package/dist/src/bridge/interpolation.d.ts +64 -0
  24. package/dist/src/bridge/interpolation.js +130 -0
  25. package/dist/src/bridge/mapping.d.ts +33 -0
  26. package/dist/src/bridge/mapping.js +54 -0
  27. package/dist/src/bridge/types.d.ts +94 -0
  28. package/dist/src/bridge/types.js +2 -0
  29. package/dist/src/campaign.d.ts +141 -0
  30. package/dist/src/campaign.js +235 -0
  31. package/dist/src/channels.d.ts +15 -0
  32. package/dist/src/channels.js +20 -0
  33. package/dist/src/chronicle.d.ts +124 -0
  34. package/dist/src/chronicle.js +232 -0
  35. package/dist/src/collective-activities.d.ts +154 -0
  36. package/dist/src/collective-activities.js +247 -0
  37. package/dist/src/competence/acoustic.d.ts +101 -0
  38. package/dist/src/competence/acoustic.js +242 -0
  39. package/dist/src/competence/catalogue.d.ts +30 -0
  40. package/dist/src/competence/catalogue.js +241 -0
  41. package/dist/src/competence/crafting.d.ts +35 -0
  42. package/dist/src/competence/crafting.js +88 -0
  43. package/dist/src/competence/engineering.d.ts +53 -0
  44. package/dist/src/competence/engineering.js +108 -0
  45. package/dist/src/competence/framework.d.ts +68 -0
  46. package/dist/src/competence/framework.js +694 -0
  47. package/dist/src/competence/index.d.ts +12 -0
  48. package/dist/src/competence/index.js +13 -0
  49. package/dist/src/competence/interspecies.d.ts +81 -0
  50. package/dist/src/competence/interspecies.js +108 -0
  51. package/dist/src/competence/language.d.ts +79 -0
  52. package/dist/src/competence/language.js +115 -0
  53. package/dist/src/competence/naturalist.d.ts +97 -0
  54. package/dist/src/competence/naturalist.js +187 -0
  55. package/dist/src/competence/navigation.d.ts +24 -0
  56. package/dist/src/competence/navigation.js +48 -0
  57. package/dist/src/competence/performance.d.ts +125 -0
  58. package/dist/src/competence/performance.js +210 -0
  59. package/dist/src/competence/teaching.d.ts +64 -0
  60. package/dist/src/competence/teaching.js +121 -0
  61. package/dist/src/competence/willpower.d.ts +74 -0
  62. package/dist/src/competence/willpower.js +114 -0
  63. package/dist/src/crafting/index.d.ts +55 -0
  64. package/dist/src/crafting/index.js +229 -0
  65. package/dist/src/crafting/manufacturing.d.ts +83 -0
  66. package/dist/src/crafting/manufacturing.js +165 -0
  67. package/dist/src/crafting/materials.d.ts +53 -0
  68. package/dist/src/crafting/materials.js +120 -0
  69. package/dist/src/crafting/recipes.d.ts +75 -0
  70. package/dist/src/crafting/recipes.js +233 -0
  71. package/dist/src/crafting/workshops.d.ts +61 -0
  72. package/dist/src/crafting/workshops.js +170 -0
  73. package/dist/src/debug.d.ts +86 -0
  74. package/dist/src/debug.js +76 -0
  75. package/dist/src/derive.d.ts +21 -0
  76. package/dist/src/derive.js +88 -0
  77. package/dist/src/describe.d.ts +29 -0
  78. package/dist/src/describe.js +276 -0
  79. package/dist/src/dialogue.d.ts +122 -0
  80. package/dist/src/dialogue.js +266 -0
  81. package/dist/src/dist.d.ts +20 -0
  82. package/dist/src/dist.js +39 -0
  83. package/dist/src/downtime.d.ts +89 -0
  84. package/dist/src/downtime.js +391 -0
  85. package/dist/src/economy.d.ts +116 -0
  86. package/dist/src/economy.js +182 -0
  87. package/dist/src/emotional-contagion.d.ts +142 -0
  88. package/dist/src/emotional-contagion.js +274 -0
  89. package/dist/src/equipment.d.ts +206 -0
  90. package/dist/src/equipment.js +598 -0
  91. package/dist/src/faction.d.ts +102 -0
  92. package/dist/src/faction.js +237 -0
  93. package/dist/src/generate.d.ts +35 -0
  94. package/dist/src/generate.js +166 -0
  95. package/dist/src/index.d.ts +42 -0
  96. package/dist/src/index.js +54 -0
  97. package/dist/src/inheritance.d.ts +69 -0
  98. package/dist/src/inheritance.js +136 -0
  99. package/dist/src/inventory.d.ts +194 -0
  100. package/dist/src/inventory.js +637 -0
  101. package/dist/src/item-durability.d.ts +69 -0
  102. package/dist/src/item-durability.js +308 -0
  103. package/dist/src/legend.d.ts +97 -0
  104. package/dist/src/legend.js +269 -0
  105. package/dist/src/lod.d.ts +9 -0
  106. package/dist/src/lod.js +84 -0
  107. package/dist/src/metrics.d.ts +51 -0
  108. package/dist/src/metrics.js +91 -0
  109. package/dist/src/model3d.d.ts +138 -0
  110. package/dist/src/model3d.js +214 -0
  111. package/dist/src/mythology.d.ts +101 -0
  112. package/dist/src/mythology.js +308 -0
  113. package/dist/src/narrative-render.d.ts +42 -0
  114. package/dist/src/narrative-render.js +194 -0
  115. package/dist/src/narrative-stress.d.ts +123 -0
  116. package/dist/src/narrative-stress.js +183 -0
  117. package/dist/src/narrative.d.ts +44 -0
  118. package/dist/src/narrative.js +257 -0
  119. package/dist/src/party.d.ts +70 -0
  120. package/dist/src/party.js +226 -0
  121. package/dist/src/polity.d.ts +262 -0
  122. package/dist/src/polity.js +398 -0
  123. package/dist/src/presets.d.ts +42 -0
  124. package/dist/src/presets.js +170 -0
  125. package/dist/src/progression.d.ts +170 -0
  126. package/dist/src/progression.js +256 -0
  127. package/dist/src/quest-generators.d.ts +76 -0
  128. package/dist/src/quest-generators.js +534 -0
  129. package/dist/src/quest.d.ts +239 -0
  130. package/dist/src/quest.js +520 -0
  131. package/dist/src/relationships-effects.d.ts +75 -0
  132. package/dist/src/relationships-effects.js +219 -0
  133. package/dist/src/relationships.d.ts +104 -0
  134. package/dist/src/relationships.js +347 -0
  135. package/dist/src/replay.d.ts +47 -0
  136. package/dist/src/replay.js +82 -0
  137. package/dist/src/rng.d.ts +9 -0
  138. package/dist/src/rng.js +37 -0
  139. package/dist/src/settlement-services.d.ts +67 -0
  140. package/dist/src/settlement-services.js +267 -0
  141. package/dist/src/settlement.d.ts +143 -0
  142. package/dist/src/settlement.js +419 -0
  143. package/dist/src/sim/action.d.ts +28 -0
  144. package/dist/src/sim/action.js +12 -0
  145. package/dist/src/sim/aging.d.ts +95 -0
  146. package/dist/src/sim/aging.js +243 -0
  147. package/dist/src/sim/ai/decide.d.ts +10 -0
  148. package/dist/src/sim/ai/decide.js +267 -0
  149. package/dist/src/sim/ai/perception.d.ts +12 -0
  150. package/dist/src/sim/ai/perception.js +54 -0
  151. package/dist/src/sim/ai/personality.d.ts +54 -0
  152. package/dist/src/sim/ai/personality.js +202 -0
  153. package/dist/src/sim/ai/presets.d.ts +2 -0
  154. package/dist/src/sim/ai/presets.js +28 -0
  155. package/dist/src/sim/ai/system.d.ts +6 -0
  156. package/dist/src/sim/ai/system.js +13 -0
  157. package/dist/src/sim/ai/targeting.d.ts +8 -0
  158. package/dist/src/sim/ai/targeting.js +42 -0
  159. package/dist/src/sim/ai/types.d.ts +14 -0
  160. package/dist/src/sim/ai/types.js +1 -0
  161. package/dist/src/sim/body.d.ts +9 -0
  162. package/dist/src/sim/body.js +32 -0
  163. package/dist/src/sim/bodyplan.d.ts +161 -0
  164. package/dist/src/sim/bodyplan.js +677 -0
  165. package/dist/src/sim/capability.d.ts +135 -0
  166. package/dist/src/sim/capability.js +8 -0
  167. package/dist/src/sim/combat.d.ts +21 -0
  168. package/dist/src/sim/combat.js +77 -0
  169. package/dist/src/sim/commandBuilders.d.ts +11 -0
  170. package/dist/src/sim/commandBuilders.js +39 -0
  171. package/dist/src/sim/commands.d.ts +71 -0
  172. package/dist/src/sim/commands.js +8 -0
  173. package/dist/src/sim/condition.d.ts +35 -0
  174. package/dist/src/sim/condition.js +21 -0
  175. package/dist/src/sim/cone.d.ts +40 -0
  176. package/dist/src/sim/cone.js +44 -0
  177. package/dist/src/sim/context.d.ts +68 -0
  178. package/dist/src/sim/context.js +1 -0
  179. package/dist/src/sim/density.d.ts +14 -0
  180. package/dist/src/sim/density.js +33 -0
  181. package/dist/src/sim/disease.d.ts +141 -0
  182. package/dist/src/sim/disease.js +353 -0
  183. package/dist/src/sim/entity.d.ts +251 -0
  184. package/dist/src/sim/entity.js +19 -0
  185. package/dist/src/sim/events.d.ts +25 -0
  186. package/dist/src/sim/events.js +5 -0
  187. package/dist/src/sim/explosion.d.ts +40 -0
  188. package/dist/src/sim/explosion.js +40 -0
  189. package/dist/src/sim/formation-unit.d.ts +138 -0
  190. package/dist/src/sim/formation-unit.js +197 -0
  191. package/dist/src/sim/formation.d.ts +12 -0
  192. package/dist/src/sim/formation.js +54 -0
  193. package/dist/src/sim/frontage.d.ts +30 -0
  194. package/dist/src/sim/frontage.js +84 -0
  195. package/dist/src/sim/grapple.d.ts +100 -0
  196. package/dist/src/sim/grapple.js +480 -0
  197. package/dist/src/sim/hazard.d.ts +104 -0
  198. package/dist/src/sim/hazard.js +201 -0
  199. package/dist/src/sim/hydrostatic.d.ts +58 -0
  200. package/dist/src/sim/hydrostatic.js +117 -0
  201. package/dist/src/sim/impairment.d.ts +20 -0
  202. package/dist/src/sim/impairment.js +162 -0
  203. package/dist/src/sim/indexing.d.ts +7 -0
  204. package/dist/src/sim/indexing.js +7 -0
  205. package/dist/src/sim/injury.d.ts +54 -0
  206. package/dist/src/sim/injury.js +66 -0
  207. package/dist/src/sim/intent.d.ts +26 -0
  208. package/dist/src/sim/intent.js +7 -0
  209. package/dist/src/sim/kernel.d.ts +45 -0
  210. package/dist/src/sim/kernel.js +1992 -0
  211. package/dist/src/sim/kinds.d.ts +64 -0
  212. package/dist/src/sim/kinds.js +56 -0
  213. package/dist/src/sim/knockback.d.ts +50 -0
  214. package/dist/src/sim/knockback.js +82 -0
  215. package/dist/src/sim/limb.d.ts +48 -0
  216. package/dist/src/sim/limb.js +78 -0
  217. package/dist/src/sim/medical.d.ts +32 -0
  218. package/dist/src/sim/medical.js +33 -0
  219. package/dist/src/sim/morale.d.ts +69 -0
  220. package/dist/src/sim/morale.js +92 -0
  221. package/dist/src/sim/mount.d.ts +150 -0
  222. package/dist/src/sim/mount.js +225 -0
  223. package/dist/src/sim/nutrition.d.ts +74 -0
  224. package/dist/src/sim/nutrition.js +168 -0
  225. package/dist/src/sim/occlusion.d.ts +8 -0
  226. package/dist/src/sim/occlusion.js +71 -0
  227. package/dist/src/sim/push.d.ts +11 -0
  228. package/dist/src/sim/push.js +79 -0
  229. package/dist/src/sim/ranged.d.ts +44 -0
  230. package/dist/src/sim/ranged.js +69 -0
  231. package/dist/src/sim/seeds.d.ts +3 -0
  232. package/dist/src/sim/seeds.js +16 -0
  233. package/dist/src/sim/sensory-extended.d.ts +103 -0
  234. package/dist/src/sim/sensory-extended.js +181 -0
  235. package/dist/src/sim/sensory.d.ts +38 -0
  236. package/dist/src/sim/sensory.js +109 -0
  237. package/dist/src/sim/skills.d.ts +70 -0
  238. package/dist/src/sim/skills.js +69 -0
  239. package/dist/src/sim/sleep.d.ts +107 -0
  240. package/dist/src/sim/sleep.js +215 -0
  241. package/dist/src/sim/spatial.d.ts +8 -0
  242. package/dist/src/sim/spatial.js +59 -0
  243. package/dist/src/sim/step/capability.d.ts +8 -0
  244. package/dist/src/sim/step/capability.js +77 -0
  245. package/dist/src/sim/step/concentration.d.ts +9 -0
  246. package/dist/src/sim/step/concentration.js +25 -0
  247. package/dist/src/sim/step/effects.d.ts +17 -0
  248. package/dist/src/sim/step/effects.js +96 -0
  249. package/dist/src/sim/step/energy.d.ts +3 -0
  250. package/dist/src/sim/step/energy.js +31 -0
  251. package/dist/src/sim/step/hazards.d.ts +4 -0
  252. package/dist/src/sim/step/hazards.js +19 -0
  253. package/dist/src/sim/step/injury.d.ts +10 -0
  254. package/dist/src/sim/step/injury.js +353 -0
  255. package/dist/src/sim/step/morale.d.ts +11 -0
  256. package/dist/src/sim/step/morale.js +130 -0
  257. package/dist/src/sim/step/movement.d.ts +5 -0
  258. package/dist/src/sim/step/movement.js +172 -0
  259. package/dist/src/sim/step/push.d.ts +11 -0
  260. package/dist/src/sim/step/push.js +79 -0
  261. package/dist/src/sim/step/substances.d.ts +3 -0
  262. package/dist/src/sim/step/substances.js +75 -0
  263. package/dist/src/sim/substance.d.ts +38 -0
  264. package/dist/src/sim/substance.js +57 -0
  265. package/dist/src/sim/systemic-toxicology.d.ts +109 -0
  266. package/dist/src/sim/systemic-toxicology.js +263 -0
  267. package/dist/src/sim/team.d.ts +9 -0
  268. package/dist/src/sim/team.js +37 -0
  269. package/dist/src/sim/tech.d.ts +36 -0
  270. package/dist/src/sim/tech.js +46 -0
  271. package/dist/src/sim/terrain.d.ts +121 -0
  272. package/dist/src/sim/terrain.js +141 -0
  273. package/dist/src/sim/testing.d.ts +13 -0
  274. package/dist/src/sim/testing.js +100 -0
  275. package/dist/src/sim/thermoregulation.d.ts +77 -0
  276. package/dist/src/sim/thermoregulation.js +161 -0
  277. package/dist/src/sim/tick.d.ts +3 -0
  278. package/dist/src/sim/tick.js +3 -0
  279. package/dist/src/sim/toxicology.d.ts +52 -0
  280. package/dist/src/sim/toxicology.js +104 -0
  281. package/dist/src/sim/trace.d.ts +141 -0
  282. package/dist/src/sim/trace.js +1 -0
  283. package/dist/src/sim/tuning.d.ts +16 -0
  284. package/dist/src/sim/tuning.js +42 -0
  285. package/dist/src/sim/vec3.d.ts +14 -0
  286. package/dist/src/sim/vec3.js +31 -0
  287. package/dist/src/sim/weapon_dynamics.d.ts +102 -0
  288. package/dist/src/sim/weapon_dynamics.js +142 -0
  289. package/dist/src/sim/weather.d.ts +95 -0
  290. package/dist/src/sim/weather.js +105 -0
  291. package/dist/src/sim/world.d.ts +52 -0
  292. package/dist/src/sim/world.js +1 -0
  293. package/dist/src/sim/wound-aging.d.ts +120 -0
  294. package/dist/src/sim/wound-aging.js +223 -0
  295. package/dist/src/species.d.ts +106 -0
  296. package/dist/src/species.js +664 -0
  297. package/dist/src/story-arcs.d.ts +17 -0
  298. package/dist/src/story-arcs.js +276 -0
  299. package/dist/src/tech-diffusion.d.ts +80 -0
  300. package/dist/src/tech-diffusion.js +185 -0
  301. package/dist/src/traits.d.ts +25 -0
  302. package/dist/src/traits.js +178 -0
  303. package/dist/src/types.d.ts +117 -0
  304. package/dist/src/types.js +1 -0
  305. package/dist/src/units.d.ts +41 -0
  306. package/dist/src/units.js +64 -0
  307. package/dist/src/weapons.d.ts +20 -0
  308. package/dist/src/weapons.js +824 -0
  309. package/dist/src/world-generation.d.ts +52 -0
  310. package/dist/src/world-generation.js +301 -0
  311. package/package.json +74 -0
@@ -0,0 +1,206 @@
1
+ import type { I32, Q } from "./units.js";
2
+ import type { Material } from "./crafting/materials.js";
3
+ import type { ChannelMask } from "./channels.js";
4
+ import { DamageChannel } from "./channels.js";
5
+ import type { IndividualAttributes } from "./types.js";
6
+ import type { BodyRegion } from "./sim/body.js";
7
+ import type { TechCapability, TechContext } from "./sim/tech.js";
8
+ import { HitArea } from "./sim/kinds.js";
9
+ export type ItemId = string;
10
+ export interface ItemBase {
11
+ id: ItemId;
12
+ name: string;
13
+ mass_kg: I32;
14
+ bulk: Q;
15
+ /** Phase 11: capabilities that must be in TechContext.available for this item to be usable. */
16
+ requiredCapabilities?: readonly TechCapability[];
17
+ }
18
+ export interface WeaponDamageProfile {
19
+ surfaceFrac: Q;
20
+ internalFrac: Q;
21
+ structuralFrac: Q;
22
+ bleedFactor: Q;
23
+ penetrationBias: Q;
24
+ }
25
+ export type Handedness = "oneHand" | "twoHand" | "mounted" | "natural";
26
+ export interface Weapon extends ItemBase {
27
+ kind: "weapon";
28
+ reach_m?: I32 | undefined;
29
+ handlingMul?: Q;
30
+ readyTime_s?: I32;
31
+ strikeEffectiveMassFrac?: Q;
32
+ strikeSpeedMul?: Q;
33
+ damage: WeaponDamageProfile;
34
+ handedness?: Handedness;
35
+ /** Lever advantage (m). Used for parry/block effectiveness and control. */
36
+ momentArm_m?: number;
37
+ /** how tiring it is to wield (dimensionless Q multiplier). */
38
+ handlingLoadMul?: Q;
39
+ /** Phase 11C: energy weapon type — routes damage through DamageChannel.Energy; resisted by reflectivity. */
40
+ energyType?: "plasma" | "laser" | "sonic";
41
+ /** Phase 17: flexible/chain weapons (flail, morning star) that loop around shields.
42
+ * q(0) = no bypass; q(0.50) = 50% reduction in effective shield coverageQ. */
43
+ shieldBypassQ?: Q;
44
+ /** Phase 25: cumulative use-wear (0 = new, q(1.0) = broken). Updated by applyWear(). */
45
+ wear_Q?: Q;
46
+ }
47
+ export interface Shield extends ItemBase {
48
+ kind: "shield";
49
+ coverageQ: Q;
50
+ blockResist_J: number;
51
+ deflectQ: Q;
52
+ arcDeg: number;
53
+ regions: BodyRegion[];
54
+ manipulationMul: Q;
55
+ mobilityMul: Q;
56
+ fatigueMul: Q;
57
+ covers?: HitArea[];
58
+ coverageProfileId?: string;
59
+ }
60
+ export type CoverageByRegion = Partial<Record<BodyRegion, Q>>;
61
+ export interface Armour extends ItemBase {
62
+ kind: "armour";
63
+ protects: ChannelMask;
64
+ coverageByRegion: CoverageByRegion;
65
+ resist_J: I32;
66
+ protectedDamageMul: Q;
67
+ channelResistMul?: Partial<Record<DamageChannel, Q>>;
68
+ mobilityMul?: Q;
69
+ fatigueMul?: Q;
70
+ /** Phase 11C: fraction of energy-weapon damage reflected (0..1); q(0.40) = deflects 40%. */
71
+ reflectivity?: Q;
72
+ /** Phase 11C: ablative plating — resist_J degrades each time the armour absorbs a hit. */
73
+ ablative?: boolean;
74
+ /** Phase 29: thermal insulation value (m²K/W).
75
+ * 0 = none; 0.02 = plate metal; 0.15 = heavy wool; 0.25 = heavy fur.
76
+ * Added to the 0.09 baseline in the heat-balance equation. */
77
+ insulation_m2KW?: number;
78
+ }
79
+ export interface Gear extends ItemBase {
80
+ kind: "gear";
81
+ }
82
+ /** Phase 11: powered exoskeleton — boosts speed and strike force at a continuous energy cost. */
83
+ export interface Exoskeleton extends ItemBase {
84
+ kind: "exoskeleton";
85
+ /** Multiplier on effective sprint speed (e.g. q(1.25) = +25%). */
86
+ speedMultiplier: Q;
87
+ /** Multiplier on melee strike energy delivered (e.g. q(1.40) = +40%). */
88
+ forceMultiplier: Q;
89
+ /** Continuous power draw added to metabolic demand (watts). */
90
+ powerDrain_W: number;
91
+ }
92
+ /** Phase 3 extension: ammo type — overrides projectile properties per shot. */
93
+ export interface AmmoType {
94
+ id: string;
95
+ name: string;
96
+ /** Override projectile mass (SCALE.kg). Omit to use weapon default. */
97
+ projectileMass_kg?: number;
98
+ /** Override drag coefficient per metre. Omit to use weapon default. */
99
+ dragCoeff_perM?: Q;
100
+ /** Override damage channel distribution. Omit to use weapon default. */
101
+ damage?: WeaponDamageProfile;
102
+ /** Multiplier on weapon's launchEnergy_J (Q). Default q(1.0). */
103
+ launchEnergyMul?: Q;
104
+ }
105
+ export interface RangedWeapon extends ItemBase {
106
+ kind: "ranged";
107
+ category: "thrown" | "bow" | "firearm";
108
+ launchEnergy_J: I32;
109
+ projectileMass_kg: I32;
110
+ dragCoeff_perM: Q;
111
+ dispersionQ: Q;
112
+ recycleTime_s: I32;
113
+ /** Phase 17: rounds per magazine; undefined = muzzle-loader (no tracking). */
114
+ magCapacity?: number;
115
+ /** Phase 17: SCALE.s — cooldown between shots within magazine; recycleTime_s used only when mag empties. */
116
+ shotInterval_s?: I32;
117
+ damage: WeaponDamageProfile;
118
+ /** Phase 11C: energy weapon type — routes damage through DamageChannel.Energy; resisted by reflectivity. */
119
+ energyType?: "plasma" | "laser" | "sonic";
120
+ /** Phase 3 extension: available ammo types for this weapon. */
121
+ ammo?: AmmoType[];
122
+ /** Phase 5 extension: scales per-tick suppression fear (default q(1.0)). */
123
+ suppressionFearMul?: Q;
124
+ shieldBypassQ?: Q;
125
+ }
126
+ /** Phase 11C: electronic sensor suite — boosts vision and hearing range while worn. */
127
+ export interface Sensor extends ItemBase {
128
+ kind: "sensor";
129
+ /** Multiplier on effective vision range (e.g. q(2.0) = double range). */
130
+ visionRangeMul: Q;
131
+ /** Multiplier on effective hearing range (e.g. q(1.5) = +50%). */
132
+ hearingRangeMul: Q;
133
+ }
134
+ export type Item = Weapon | Armour | Gear | Shield | RangedWeapon | Exoskeleton | Sensor | Material;
135
+ export interface Loadout {
136
+ items: Item[];
137
+ }
138
+ export interface EncumbranceTotals {
139
+ carriedMass_kg: I32;
140
+ carriedBulk: Q;
141
+ wornMass_kg: I32;
142
+ wornBulk: Q;
143
+ carriedMassFracOfBody: Q;
144
+ }
145
+ export interface EncumbrancePenalties {
146
+ speedMul: Q;
147
+ accelMul: Q;
148
+ jumpMul: Q;
149
+ energyDemandMul: Q;
150
+ controlMul: Q;
151
+ stabilityMul: Q;
152
+ encumbranceRatio: Q;
153
+ overloaded: boolean;
154
+ }
155
+ export interface CarryRules {
156
+ capacityFactor: Q;
157
+ bulkToMassFactor: Q;
158
+ }
159
+ export declare const DEFAULT_CARRY_RULES: CarryRules;
160
+ export declare function computeLoadoutTotals(loadout: Loadout, armourIsWorn?: boolean): EncumbranceTotals;
161
+ export declare function deriveCarryCapacityMass_kg(a: IndividualAttributes, rules?: CarryRules): I32;
162
+ export declare function computeEncumbrance(a: IndividualAttributes, loadout: Loadout, rules?: CarryRules): {
163
+ totals: EncumbranceTotals;
164
+ penalties: EncumbrancePenalties;
165
+ };
166
+ export interface ProtectionProfile {
167
+ protects: ChannelMask;
168
+ coverageByRegion: Record<BodyRegion, Q>;
169
+ coverageOverall: Q;
170
+ resist_J: I32;
171
+ protectedDamageMul: Q;
172
+ mobilityMul: Q;
173
+ fatigueMul: Q;
174
+ channelResistMul: Partial<Record<DamageChannel, Q>>;
175
+ /** Phase 11C: max reflectivity across all armour items (for energy-weapon mitigation). */
176
+ reflectivity: Q;
177
+ }
178
+ export declare function deriveArmourProfile(loadout: Loadout, armourState?: Map<string, {
179
+ resistRemaining_J: number;
180
+ }>): ProtectionProfile;
181
+ export declare function findWeapon(loadout: Loadout, weaponId?: string): Weapon | null;
182
+ export declare function findRangedWeapon(loadout: Loadout, weaponId?: string): RangedWeapon | null;
183
+ export declare function findShield(loadout: Loadout): Shield | undefined;
184
+ export declare function findExoskeleton(loadout: Loadout): Exoskeleton | null;
185
+ /** Phase 11C: return the first Sensor in the loadout, or null. */
186
+ export declare function findSensor(loadout: Loadout): Sensor | null;
187
+ /**
188
+ * Phase 11: check that every item in a loadout is usable in the given TechContext.
189
+ * Returns an array of error messages; empty array means the loadout is valid.
190
+ */
191
+ export declare function validateLoadout(loadout: Loadout, ctx: TechContext): string[];
192
+ export declare function deriveWeaponHandling(w: Weapon, ownerStature_m: number): {
193
+ handedness: Handedness;
194
+ momentArm_m: number;
195
+ handlingLoadMul: Q;
196
+ };
197
+ export declare const STARTER_WEAPONS: Weapon[];
198
+ export declare const STARTER_EXOSKELETONS: Exoskeleton[];
199
+ export declare const STARTER_ARMOUR: Armour[];
200
+ export declare const STARTER_SHIELDS: Shield[];
201
+ export declare const STARTER_RANGED_WEAPONS: RangedWeapon[];
202
+ /** Reflective/ablative armour items for energy and kinetic threats. */
203
+ export declare const STARTER_ARMOUR_11C: Armour[];
204
+ /** Phase 11C: sensor suites that boost vision and hearing range. */
205
+ export declare const STARTER_SENSORS: Sensor[];
206
+ export declare const STARTER_AMMO: AmmoType[];