@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.
- package/CHANGELOG.md +135 -0
- package/LICENSE +21 -0
- package/README.md +2199 -0
- package/STABLE_API.md +266 -0
- package/dist/src/anatomy/anatomy-compiler.d.ts +14 -0
- package/dist/src/anatomy/anatomy-compiler.js +277 -0
- package/dist/src/anatomy/anatomy-contracts.d.ts +94 -0
- package/dist/src/anatomy/anatomy-contracts.js +1 -0
- package/dist/src/anatomy/anatomy-helpers.d.ts +82 -0
- package/dist/src/anatomy/anatomy-helpers.js +233 -0
- package/dist/src/anatomy/anatomy-schema.d.ts +28 -0
- package/dist/src/anatomy/anatomy-schema.js +388 -0
- package/dist/src/anatomy/index.d.ts +4 -0
- package/dist/src/anatomy/index.js +4 -0
- package/dist/src/archetypes.d.ts +87 -0
- package/dist/src/archetypes.js +285 -0
- package/dist/src/arena.d.ts +173 -0
- package/dist/src/arena.js +695 -0
- package/dist/src/bridge/bridge-engine.d.ts +46 -0
- package/dist/src/bridge/bridge-engine.js +252 -0
- package/dist/src/bridge/index.d.ts +4 -0
- package/dist/src/bridge/index.js +5 -0
- package/dist/src/bridge/interpolation.d.ts +64 -0
- package/dist/src/bridge/interpolation.js +130 -0
- package/dist/src/bridge/mapping.d.ts +33 -0
- package/dist/src/bridge/mapping.js +54 -0
- package/dist/src/bridge/types.d.ts +94 -0
- package/dist/src/bridge/types.js +2 -0
- package/dist/src/campaign.d.ts +141 -0
- package/dist/src/campaign.js +235 -0
- package/dist/src/channels.d.ts +15 -0
- package/dist/src/channels.js +20 -0
- package/dist/src/chronicle.d.ts +124 -0
- package/dist/src/chronicle.js +232 -0
- package/dist/src/collective-activities.d.ts +154 -0
- package/dist/src/collective-activities.js +247 -0
- package/dist/src/competence/acoustic.d.ts +101 -0
- package/dist/src/competence/acoustic.js +242 -0
- package/dist/src/competence/catalogue.d.ts +30 -0
- package/dist/src/competence/catalogue.js +241 -0
- package/dist/src/competence/crafting.d.ts +35 -0
- package/dist/src/competence/crafting.js +88 -0
- package/dist/src/competence/engineering.d.ts +53 -0
- package/dist/src/competence/engineering.js +108 -0
- package/dist/src/competence/framework.d.ts +68 -0
- package/dist/src/competence/framework.js +694 -0
- package/dist/src/competence/index.d.ts +12 -0
- package/dist/src/competence/index.js +13 -0
- package/dist/src/competence/interspecies.d.ts +81 -0
- package/dist/src/competence/interspecies.js +108 -0
- package/dist/src/competence/language.d.ts +79 -0
- package/dist/src/competence/language.js +115 -0
- package/dist/src/competence/naturalist.d.ts +97 -0
- package/dist/src/competence/naturalist.js +187 -0
- package/dist/src/competence/navigation.d.ts +24 -0
- package/dist/src/competence/navigation.js +48 -0
- package/dist/src/competence/performance.d.ts +125 -0
- package/dist/src/competence/performance.js +210 -0
- package/dist/src/competence/teaching.d.ts +64 -0
- package/dist/src/competence/teaching.js +121 -0
- package/dist/src/competence/willpower.d.ts +74 -0
- package/dist/src/competence/willpower.js +114 -0
- package/dist/src/crafting/index.d.ts +55 -0
- package/dist/src/crafting/index.js +229 -0
- package/dist/src/crafting/manufacturing.d.ts +83 -0
- package/dist/src/crafting/manufacturing.js +165 -0
- package/dist/src/crafting/materials.d.ts +53 -0
- package/dist/src/crafting/materials.js +120 -0
- package/dist/src/crafting/recipes.d.ts +75 -0
- package/dist/src/crafting/recipes.js +233 -0
- package/dist/src/crafting/workshops.d.ts +61 -0
- package/dist/src/crafting/workshops.js +170 -0
- package/dist/src/debug.d.ts +86 -0
- package/dist/src/debug.js +76 -0
- package/dist/src/derive.d.ts +21 -0
- package/dist/src/derive.js +88 -0
- package/dist/src/describe.d.ts +29 -0
- package/dist/src/describe.js +276 -0
- package/dist/src/dialogue.d.ts +122 -0
- package/dist/src/dialogue.js +266 -0
- package/dist/src/dist.d.ts +20 -0
- package/dist/src/dist.js +39 -0
- package/dist/src/downtime.d.ts +89 -0
- package/dist/src/downtime.js +391 -0
- package/dist/src/economy.d.ts +116 -0
- package/dist/src/economy.js +182 -0
- package/dist/src/emotional-contagion.d.ts +142 -0
- package/dist/src/emotional-contagion.js +274 -0
- package/dist/src/equipment.d.ts +206 -0
- package/dist/src/equipment.js +598 -0
- package/dist/src/faction.d.ts +102 -0
- package/dist/src/faction.js +237 -0
- package/dist/src/generate.d.ts +35 -0
- package/dist/src/generate.js +166 -0
- package/dist/src/index.d.ts +42 -0
- package/dist/src/index.js +54 -0
- package/dist/src/inheritance.d.ts +69 -0
- package/dist/src/inheritance.js +136 -0
- package/dist/src/inventory.d.ts +194 -0
- package/dist/src/inventory.js +637 -0
- package/dist/src/item-durability.d.ts +69 -0
- package/dist/src/item-durability.js +308 -0
- package/dist/src/legend.d.ts +97 -0
- package/dist/src/legend.js +269 -0
- package/dist/src/lod.d.ts +9 -0
- package/dist/src/lod.js +84 -0
- package/dist/src/metrics.d.ts +51 -0
- package/dist/src/metrics.js +91 -0
- package/dist/src/model3d.d.ts +138 -0
- package/dist/src/model3d.js +214 -0
- package/dist/src/mythology.d.ts +101 -0
- package/dist/src/mythology.js +308 -0
- package/dist/src/narrative-render.d.ts +42 -0
- package/dist/src/narrative-render.js +194 -0
- package/dist/src/narrative-stress.d.ts +123 -0
- package/dist/src/narrative-stress.js +183 -0
- package/dist/src/narrative.d.ts +44 -0
- package/dist/src/narrative.js +257 -0
- package/dist/src/party.d.ts +70 -0
- package/dist/src/party.js +226 -0
- package/dist/src/polity.d.ts +262 -0
- package/dist/src/polity.js +398 -0
- package/dist/src/presets.d.ts +42 -0
- package/dist/src/presets.js +170 -0
- package/dist/src/progression.d.ts +170 -0
- package/dist/src/progression.js +256 -0
- package/dist/src/quest-generators.d.ts +76 -0
- package/dist/src/quest-generators.js +534 -0
- package/dist/src/quest.d.ts +239 -0
- package/dist/src/quest.js +520 -0
- package/dist/src/relationships-effects.d.ts +75 -0
- package/dist/src/relationships-effects.js +219 -0
- package/dist/src/relationships.d.ts +104 -0
- package/dist/src/relationships.js +347 -0
- package/dist/src/replay.d.ts +47 -0
- package/dist/src/replay.js +82 -0
- package/dist/src/rng.d.ts +9 -0
- package/dist/src/rng.js +37 -0
- package/dist/src/settlement-services.d.ts +67 -0
- package/dist/src/settlement-services.js +267 -0
- package/dist/src/settlement.d.ts +143 -0
- package/dist/src/settlement.js +419 -0
- package/dist/src/sim/action.d.ts +28 -0
- package/dist/src/sim/action.js +12 -0
- package/dist/src/sim/aging.d.ts +95 -0
- package/dist/src/sim/aging.js +243 -0
- package/dist/src/sim/ai/decide.d.ts +10 -0
- package/dist/src/sim/ai/decide.js +267 -0
- package/dist/src/sim/ai/perception.d.ts +12 -0
- package/dist/src/sim/ai/perception.js +54 -0
- package/dist/src/sim/ai/personality.d.ts +54 -0
- package/dist/src/sim/ai/personality.js +202 -0
- package/dist/src/sim/ai/presets.d.ts +2 -0
- package/dist/src/sim/ai/presets.js +28 -0
- package/dist/src/sim/ai/system.d.ts +6 -0
- package/dist/src/sim/ai/system.js +13 -0
- package/dist/src/sim/ai/targeting.d.ts +8 -0
- package/dist/src/sim/ai/targeting.js +42 -0
- package/dist/src/sim/ai/types.d.ts +14 -0
- package/dist/src/sim/ai/types.js +1 -0
- package/dist/src/sim/body.d.ts +9 -0
- package/dist/src/sim/body.js +32 -0
- package/dist/src/sim/bodyplan.d.ts +161 -0
- package/dist/src/sim/bodyplan.js +677 -0
- package/dist/src/sim/capability.d.ts +135 -0
- package/dist/src/sim/capability.js +8 -0
- package/dist/src/sim/combat.d.ts +21 -0
- package/dist/src/sim/combat.js +77 -0
- package/dist/src/sim/commandBuilders.d.ts +11 -0
- package/dist/src/sim/commandBuilders.js +39 -0
- package/dist/src/sim/commands.d.ts +71 -0
- package/dist/src/sim/commands.js +8 -0
- package/dist/src/sim/condition.d.ts +35 -0
- package/dist/src/sim/condition.js +21 -0
- package/dist/src/sim/cone.d.ts +40 -0
- package/dist/src/sim/cone.js +44 -0
- package/dist/src/sim/context.d.ts +68 -0
- package/dist/src/sim/context.js +1 -0
- package/dist/src/sim/density.d.ts +14 -0
- package/dist/src/sim/density.js +33 -0
- package/dist/src/sim/disease.d.ts +141 -0
- package/dist/src/sim/disease.js +353 -0
- package/dist/src/sim/entity.d.ts +251 -0
- package/dist/src/sim/entity.js +19 -0
- package/dist/src/sim/events.d.ts +25 -0
- package/dist/src/sim/events.js +5 -0
- package/dist/src/sim/explosion.d.ts +40 -0
- package/dist/src/sim/explosion.js +40 -0
- package/dist/src/sim/formation-unit.d.ts +138 -0
- package/dist/src/sim/formation-unit.js +197 -0
- package/dist/src/sim/formation.d.ts +12 -0
- package/dist/src/sim/formation.js +54 -0
- package/dist/src/sim/frontage.d.ts +30 -0
- package/dist/src/sim/frontage.js +84 -0
- package/dist/src/sim/grapple.d.ts +100 -0
- package/dist/src/sim/grapple.js +480 -0
- package/dist/src/sim/hazard.d.ts +104 -0
- package/dist/src/sim/hazard.js +201 -0
- package/dist/src/sim/hydrostatic.d.ts +58 -0
- package/dist/src/sim/hydrostatic.js +117 -0
- package/dist/src/sim/impairment.d.ts +20 -0
- package/dist/src/sim/impairment.js +162 -0
- package/dist/src/sim/indexing.d.ts +7 -0
- package/dist/src/sim/indexing.js +7 -0
- package/dist/src/sim/injury.d.ts +54 -0
- package/dist/src/sim/injury.js +66 -0
- package/dist/src/sim/intent.d.ts +26 -0
- package/dist/src/sim/intent.js +7 -0
- package/dist/src/sim/kernel.d.ts +45 -0
- package/dist/src/sim/kernel.js +1992 -0
- package/dist/src/sim/kinds.d.ts +64 -0
- package/dist/src/sim/kinds.js +56 -0
- package/dist/src/sim/knockback.d.ts +50 -0
- package/dist/src/sim/knockback.js +82 -0
- package/dist/src/sim/limb.d.ts +48 -0
- package/dist/src/sim/limb.js +78 -0
- package/dist/src/sim/medical.d.ts +32 -0
- package/dist/src/sim/medical.js +33 -0
- package/dist/src/sim/morale.d.ts +69 -0
- package/dist/src/sim/morale.js +92 -0
- package/dist/src/sim/mount.d.ts +150 -0
- package/dist/src/sim/mount.js +225 -0
- package/dist/src/sim/nutrition.d.ts +74 -0
- package/dist/src/sim/nutrition.js +168 -0
- package/dist/src/sim/occlusion.d.ts +8 -0
- package/dist/src/sim/occlusion.js +71 -0
- package/dist/src/sim/push.d.ts +11 -0
- package/dist/src/sim/push.js +79 -0
- package/dist/src/sim/ranged.d.ts +44 -0
- package/dist/src/sim/ranged.js +69 -0
- package/dist/src/sim/seeds.d.ts +3 -0
- package/dist/src/sim/seeds.js +16 -0
- package/dist/src/sim/sensory-extended.d.ts +103 -0
- package/dist/src/sim/sensory-extended.js +181 -0
- package/dist/src/sim/sensory.d.ts +38 -0
- package/dist/src/sim/sensory.js +109 -0
- package/dist/src/sim/skills.d.ts +70 -0
- package/dist/src/sim/skills.js +69 -0
- package/dist/src/sim/sleep.d.ts +107 -0
- package/dist/src/sim/sleep.js +215 -0
- package/dist/src/sim/spatial.d.ts +8 -0
- package/dist/src/sim/spatial.js +59 -0
- package/dist/src/sim/step/capability.d.ts +8 -0
- package/dist/src/sim/step/capability.js +77 -0
- package/dist/src/sim/step/concentration.d.ts +9 -0
- package/dist/src/sim/step/concentration.js +25 -0
- package/dist/src/sim/step/effects.d.ts +17 -0
- package/dist/src/sim/step/effects.js +96 -0
- package/dist/src/sim/step/energy.d.ts +3 -0
- package/dist/src/sim/step/energy.js +31 -0
- package/dist/src/sim/step/hazards.d.ts +4 -0
- package/dist/src/sim/step/hazards.js +19 -0
- package/dist/src/sim/step/injury.d.ts +10 -0
- package/dist/src/sim/step/injury.js +353 -0
- package/dist/src/sim/step/morale.d.ts +11 -0
- package/dist/src/sim/step/morale.js +130 -0
- package/dist/src/sim/step/movement.d.ts +5 -0
- package/dist/src/sim/step/movement.js +172 -0
- package/dist/src/sim/step/push.d.ts +11 -0
- package/dist/src/sim/step/push.js +79 -0
- package/dist/src/sim/step/substances.d.ts +3 -0
- package/dist/src/sim/step/substances.js +75 -0
- package/dist/src/sim/substance.d.ts +38 -0
- package/dist/src/sim/substance.js +57 -0
- package/dist/src/sim/systemic-toxicology.d.ts +109 -0
- package/dist/src/sim/systemic-toxicology.js +263 -0
- package/dist/src/sim/team.d.ts +9 -0
- package/dist/src/sim/team.js +37 -0
- package/dist/src/sim/tech.d.ts +36 -0
- package/dist/src/sim/tech.js +46 -0
- package/dist/src/sim/terrain.d.ts +121 -0
- package/dist/src/sim/terrain.js +141 -0
- package/dist/src/sim/testing.d.ts +13 -0
- package/dist/src/sim/testing.js +100 -0
- package/dist/src/sim/thermoregulation.d.ts +77 -0
- package/dist/src/sim/thermoregulation.js +161 -0
- package/dist/src/sim/tick.d.ts +3 -0
- package/dist/src/sim/tick.js +3 -0
- package/dist/src/sim/toxicology.d.ts +52 -0
- package/dist/src/sim/toxicology.js +104 -0
- package/dist/src/sim/trace.d.ts +141 -0
- package/dist/src/sim/trace.js +1 -0
- package/dist/src/sim/tuning.d.ts +16 -0
- package/dist/src/sim/tuning.js +42 -0
- package/dist/src/sim/vec3.d.ts +14 -0
- package/dist/src/sim/vec3.js +31 -0
- package/dist/src/sim/weapon_dynamics.d.ts +102 -0
- package/dist/src/sim/weapon_dynamics.js +142 -0
- package/dist/src/sim/weather.d.ts +95 -0
- package/dist/src/sim/weather.js +105 -0
- package/dist/src/sim/world.d.ts +52 -0
- package/dist/src/sim/world.js +1 -0
- package/dist/src/sim/wound-aging.d.ts +120 -0
- package/dist/src/sim/wound-aging.js +223 -0
- package/dist/src/species.d.ts +106 -0
- package/dist/src/species.js +664 -0
- package/dist/src/story-arcs.d.ts +17 -0
- package/dist/src/story-arcs.js +276 -0
- package/dist/src/tech-diffusion.d.ts +80 -0
- package/dist/src/tech-diffusion.js +185 -0
- package/dist/src/traits.d.ts +25 -0
- package/dist/src/traits.js +178 -0
- package/dist/src/types.d.ts +117 -0
- package/dist/src/types.js +1 -0
- package/dist/src/units.d.ts +41 -0
- package/dist/src/units.js +64 -0
- package/dist/src/weapons.d.ts +20 -0
- package/dist/src/weapons.js +824 -0
- package/dist/src/world-generation.d.ts +52 -0
- package/dist/src/world-generation.js +301 -0
- package/package.json +74 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { q, to } from "./units.js";
|
|
2
|
+
export const HUMAN_BASE = {
|
|
3
|
+
stature_m: to.m(1.75),
|
|
4
|
+
mass_kg: to.kg(75.0),
|
|
5
|
+
visionRange_m: to.m(200), // ~200m reliable visual identification
|
|
6
|
+
visionArcDeg: 120, // ~120° binocular forward arc
|
|
7
|
+
hearingRange_m: to.m(50), // ~50m reliable sound detection
|
|
8
|
+
decisionLatency_s: to.s(0.5), // ~500ms to revise tactical plan
|
|
9
|
+
attentionDepth: 4, // track up to 4 threats simultaneously
|
|
10
|
+
threatHorizon_m: to.m(40), // process threats within 40m
|
|
11
|
+
statureVar: q(0.04),
|
|
12
|
+
massVar: q(0.09),
|
|
13
|
+
reachVar: q(0.10),
|
|
14
|
+
actuatorScaleVar: q(0.005),
|
|
15
|
+
structureScaleVar: q(0.14),
|
|
16
|
+
actuatorMassFrac: q(0.40),
|
|
17
|
+
actuatorMassVar: q(0.025),
|
|
18
|
+
peakForce_N: to.N(1840),
|
|
19
|
+
peakForceVar: q(0.74),
|
|
20
|
+
peakPower_W: to.W(1200),
|
|
21
|
+
peakPowerVar: q(0.30),
|
|
22
|
+
continuousPower_W: to.W(200),
|
|
23
|
+
continuousPowerVar: q(0.25),
|
|
24
|
+
reserveEnergy_J: to.J(20_000),
|
|
25
|
+
reserveEnergyVar: q(0.35),
|
|
26
|
+
conversionEfficiency: q(0.85),
|
|
27
|
+
efficiencyVar: q(0.10),
|
|
28
|
+
reactionTime_s: to.s(0.20),
|
|
29
|
+
reactionTimeVar: q(0.25),
|
|
30
|
+
controlQuality: q(0.75),
|
|
31
|
+
controlVar: q(0.20),
|
|
32
|
+
stability: q(0.70),
|
|
33
|
+
stabilityVar: q(0.22),
|
|
34
|
+
fineControl: q(0.70),
|
|
35
|
+
fineControlVar: q(0.25),
|
|
36
|
+
surfaceIntegrity: q(1.0), surfaceVar: q(0.18),
|
|
37
|
+
bulkIntegrity: q(1.0), bulkVar: q(0.18),
|
|
38
|
+
structureIntegrity: q(1.0), structVar: q(0.18),
|
|
39
|
+
distressTolerance: q(0.50), distressVar: q(0.30),
|
|
40
|
+
shockTolerance: q(0.50), shockVar: q(0.30),
|
|
41
|
+
concussionTolerance: q(0.50), concVar: q(0.30),
|
|
42
|
+
heatTolerance: q(0.50), heatVar: q(0.30),
|
|
43
|
+
coldTolerance: q(0.50), coldVar: q(0.30),
|
|
44
|
+
fatigueRate: q(1.0), fatigueVar: q(0.25),
|
|
45
|
+
recoveryRate: q(1.0), recoveryVar: q(0.25),
|
|
46
|
+
cognition: {
|
|
47
|
+
linguistic: q(0.65), logicalMathematical: q(0.60), spatial: q(0.60),
|
|
48
|
+
bodilyKinesthetic: q(0.60), musical: q(0.50),
|
|
49
|
+
interpersonal: q(0.60), intrapersonal: q(0.55), naturalist: q(0.50), interSpecies: q(0.35),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
// ─── Phase 15: validated real-world archetypes ────────────────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Amateur boxer — British Journal of Sports Medicine, Walilko et al.
|
|
55
|
+
* Amateur punch force: 2,500–4,000 N (nominal 2,800 N used).
|
|
56
|
+
*/
|
|
57
|
+
export const AMATEUR_BOXER = {
|
|
58
|
+
stature_m: to.m(1.78), mass_kg: to.kg(75),
|
|
59
|
+
visionRange_m: to.m(200), visionArcDeg: 120, hearingRange_m: to.m(50),
|
|
60
|
+
decisionLatency_s: to.s(0.45), attentionDepth: 4, threatHorizon_m: to.m(30),
|
|
61
|
+
statureVar: q(0.06), massVar: q(0.10),
|
|
62
|
+
reachVar: q(0.08), actuatorScaleVar: q(0.15), structureScaleVar: q(0.12),
|
|
63
|
+
actuatorMassFrac: q(0.44), actuatorMassVar: q(0.15),
|
|
64
|
+
peakForce_N: to.N(2800), peakForceVar: q(0.18),
|
|
65
|
+
peakPower_W: to.W(1500), peakPowerVar: q(0.20),
|
|
66
|
+
continuousPower_W: to.W(300), continuousPowerVar: q(0.20),
|
|
67
|
+
reserveEnergy_J: to.J(25_000), reserveEnergyVar: q(0.25),
|
|
68
|
+
conversionEfficiency: q(0.88), efficiencyVar: q(0.08),
|
|
69
|
+
reactionTime_s: to.s(0.18), reactionTimeVar: q(0.18),
|
|
70
|
+
controlQuality: q(0.82), controlVar: q(0.15),
|
|
71
|
+
stability: q(0.75), stabilityVar: q(0.18),
|
|
72
|
+
fineControl: q(0.78), fineControlVar: q(0.18),
|
|
73
|
+
surfaceIntegrity: q(1.0), surfaceVar: q(0.15),
|
|
74
|
+
bulkIntegrity: q(1.0), bulkVar: q(0.15),
|
|
75
|
+
structureIntegrity: q(1.0), structVar: q(0.15),
|
|
76
|
+
distressTolerance: q(0.65), distressVar: q(0.22),
|
|
77
|
+
shockTolerance: q(0.65), shockVar: q(0.22),
|
|
78
|
+
concussionTolerance: q(0.55), concVar: q(0.22),
|
|
79
|
+
heatTolerance: q(0.55), heatVar: q(0.25),
|
|
80
|
+
coldTolerance: q(0.50), coldVar: q(0.25),
|
|
81
|
+
fatigueRate: q(0.85), fatigueVar: q(0.20),
|
|
82
|
+
recoveryRate: q(1.10), recoveryVar: q(0.20),
|
|
83
|
+
cognition: {
|
|
84
|
+
linguistic: q(0.55), logicalMathematical: q(0.50), spatial: q(0.60),
|
|
85
|
+
bodilyKinesthetic: q(0.75), musical: q(0.45),
|
|
86
|
+
interpersonal: q(0.50), intrapersonal: q(0.60), naturalist: q(0.40), interSpecies: q(0.25),
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Pro boxer — biomechanics studies on elite boxers.
|
|
91
|
+
* Elite punch force: 4,000–7,000 N (nominal 5,000 N, cruiserweight/light-heavy).
|
|
92
|
+
*/
|
|
93
|
+
export const PRO_BOXER = {
|
|
94
|
+
stature_m: to.m(1.82), mass_kg: to.kg(85),
|
|
95
|
+
visionRange_m: to.m(200), visionArcDeg: 120, hearingRange_m: to.m(50),
|
|
96
|
+
decisionLatency_s: to.s(0.40), attentionDepth: 4, threatHorizon_m: to.m(30),
|
|
97
|
+
statureVar: q(0.05), massVar: q(0.08),
|
|
98
|
+
reachVar: q(0.06), actuatorScaleVar: q(0.12), structureScaleVar: q(0.10),
|
|
99
|
+
actuatorMassFrac: q(0.46), actuatorMassVar: q(0.12),
|
|
100
|
+
peakForce_N: to.N(5000), peakForceVar: q(0.15),
|
|
101
|
+
peakPower_W: to.W(2200), peakPowerVar: q(0.18),
|
|
102
|
+
continuousPower_W: to.W(400), continuousPowerVar: q(0.18),
|
|
103
|
+
reserveEnergy_J: to.J(40_000), reserveEnergyVar: q(0.20),
|
|
104
|
+
conversionEfficiency: q(0.90), efficiencyVar: q(0.06),
|
|
105
|
+
reactionTime_s: to.s(0.16), reactionTimeVar: q(0.15),
|
|
106
|
+
controlQuality: q(0.88), controlVar: q(0.12),
|
|
107
|
+
stability: q(0.80), stabilityVar: q(0.15),
|
|
108
|
+
fineControl: q(0.85), fineControlVar: q(0.14),
|
|
109
|
+
surfaceIntegrity: q(1.0), surfaceVar: q(0.12),
|
|
110
|
+
bulkIntegrity: q(1.0), bulkVar: q(0.12),
|
|
111
|
+
structureIntegrity: q(1.0), structVar: q(0.12),
|
|
112
|
+
distressTolerance: q(0.75), distressVar: q(0.18),
|
|
113
|
+
shockTolerance: q(0.75), shockVar: q(0.18),
|
|
114
|
+
concussionTolerance: q(0.70), concVar: q(0.18),
|
|
115
|
+
heatTolerance: q(0.55), heatVar: q(0.22),
|
|
116
|
+
coldTolerance: q(0.50), coldVar: q(0.22),
|
|
117
|
+
fatigueRate: q(0.80), fatigueVar: q(0.18),
|
|
118
|
+
recoveryRate: q(1.20), recoveryVar: q(0.18),
|
|
119
|
+
cognition: {
|
|
120
|
+
linguistic: q(0.55), logicalMathematical: q(0.58), spatial: q(0.65),
|
|
121
|
+
bodilyKinesthetic: q(0.82), musical: q(0.50),
|
|
122
|
+
interpersonal: q(0.55), intrapersonal: q(0.72), naturalist: q(0.40), interSpecies: q(0.25),
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Greco-Roman wrestler — Olympic grappling literature.
|
|
127
|
+
* Grip ~500 N forearm; whole-body throw ~2,000 N.
|
|
128
|
+
*/
|
|
129
|
+
export const GRECO_WRESTLER = {
|
|
130
|
+
stature_m: to.m(1.76), mass_kg: to.kg(80),
|
|
131
|
+
visionRange_m: to.m(200), visionArcDeg: 120, hearingRange_m: to.m(50),
|
|
132
|
+
decisionLatency_s: to.s(0.45), attentionDepth: 4, threatHorizon_m: to.m(20),
|
|
133
|
+
statureVar: q(0.06), massVar: q(0.10),
|
|
134
|
+
reachVar: q(0.08), actuatorScaleVar: q(0.15), structureScaleVar: q(0.12),
|
|
135
|
+
actuatorMassFrac: q(0.45), actuatorMassVar: q(0.15),
|
|
136
|
+
peakForce_N: to.N(2000), peakForceVar: q(0.18),
|
|
137
|
+
peakPower_W: to.W(1400), peakPowerVar: q(0.22),
|
|
138
|
+
continuousPower_W: to.W(280), continuousPowerVar: q(0.20),
|
|
139
|
+
reserveEnergy_J: to.J(28_000), reserveEnergyVar: q(0.25),
|
|
140
|
+
conversionEfficiency: q(0.88), efficiencyVar: q(0.08),
|
|
141
|
+
reactionTime_s: to.s(0.20), reactionTimeVar: q(0.20),
|
|
142
|
+
controlQuality: q(0.82), controlVar: q(0.15),
|
|
143
|
+
stability: q(0.85), stabilityVar: q(0.14),
|
|
144
|
+
fineControl: q(0.80), fineControlVar: q(0.16),
|
|
145
|
+
surfaceIntegrity: q(1.0), surfaceVar: q(0.15),
|
|
146
|
+
bulkIntegrity: q(1.0), bulkVar: q(0.15),
|
|
147
|
+
structureIntegrity: q(1.0), structVar: q(0.15),
|
|
148
|
+
distressTolerance: q(0.68), distressVar: q(0.22),
|
|
149
|
+
shockTolerance: q(0.70), shockVar: q(0.22),
|
|
150
|
+
concussionTolerance: q(0.55), concVar: q(0.22),
|
|
151
|
+
heatTolerance: q(0.55), heatVar: q(0.25),
|
|
152
|
+
coldTolerance: q(0.50), coldVar: q(0.25),
|
|
153
|
+
fatigueRate: q(0.82), fatigueVar: q(0.20),
|
|
154
|
+
recoveryRate: q(1.15), recoveryVar: q(0.20),
|
|
155
|
+
cognition: {
|
|
156
|
+
linguistic: q(0.52), logicalMathematical: q(0.55), spatial: q(0.65),
|
|
157
|
+
bodilyKinesthetic: q(0.80), musical: q(0.40),
|
|
158
|
+
interpersonal: q(0.55), intrapersonal: q(0.65), naturalist: q(0.42), interSpecies: q(0.25),
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* Medieval knight infantry — trained warrior; armour applied via preset loadout.
|
|
163
|
+
*/
|
|
164
|
+
export const KNIGHT_INFANTRY = {
|
|
165
|
+
stature_m: to.m(1.75), mass_kg: to.kg(80),
|
|
166
|
+
visionRange_m: to.m(200), visionArcDeg: 120, hearingRange_m: to.m(50),
|
|
167
|
+
decisionLatency_s: to.s(0.50), attentionDepth: 4, threatHorizon_m: to.m(40),
|
|
168
|
+
statureVar: q(0.07), massVar: q(0.12),
|
|
169
|
+
reachVar: q(0.10), actuatorScaleVar: q(0.16), structureScaleVar: q(0.14),
|
|
170
|
+
actuatorMassFrac: q(0.43), actuatorMassVar: q(0.16),
|
|
171
|
+
peakForce_N: to.N(2200), peakForceVar: q(0.20),
|
|
172
|
+
peakPower_W: to.W(1300), peakPowerVar: q(0.25),
|
|
173
|
+
continuousPower_W: to.W(220), continuousPowerVar: q(0.22),
|
|
174
|
+
reserveEnergy_J: to.J(22_000), reserveEnergyVar: q(0.28),
|
|
175
|
+
conversionEfficiency: q(0.87), efficiencyVar: q(0.09),
|
|
176
|
+
reactionTime_s: to.s(0.22), reactionTimeVar: q(0.22),
|
|
177
|
+
controlQuality: q(0.78), controlVar: q(0.18),
|
|
178
|
+
stability: q(0.76), stabilityVar: q(0.20),
|
|
179
|
+
fineControl: q(0.75), fineControlVar: q(0.20),
|
|
180
|
+
surfaceIntegrity: q(1.0), surfaceVar: q(0.16),
|
|
181
|
+
bulkIntegrity: q(1.0), bulkVar: q(0.16),
|
|
182
|
+
structureIntegrity: q(1.0), structVar: q(0.16),
|
|
183
|
+
distressTolerance: q(0.72), distressVar: q(0.22),
|
|
184
|
+
shockTolerance: q(0.70), shockVar: q(0.22),
|
|
185
|
+
concussionTolerance: q(0.55), concVar: q(0.25),
|
|
186
|
+
heatTolerance: q(0.55), heatVar: q(0.28),
|
|
187
|
+
coldTolerance: q(0.55), coldVar: q(0.28),
|
|
188
|
+
fatigueRate: q(0.90), fatigueVar: q(0.22),
|
|
189
|
+
recoveryRate: q(1.05), recoveryVar: q(0.22),
|
|
190
|
+
cognition: {
|
|
191
|
+
linguistic: q(0.58), logicalMathematical: q(0.55), spatial: q(0.62),
|
|
192
|
+
bodilyKinesthetic: q(0.72), musical: q(0.48),
|
|
193
|
+
interpersonal: q(0.60), intrapersonal: q(0.68), naturalist: q(0.45), interSpecies: q(0.25),
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Large Pacific Octopus (Enteroctopus dofleini).
|
|
198
|
+
* Arm muscle force ~150 N × 8 arms ≈ 1,200 N total burst.
|
|
199
|
+
* ~2,000 suckers → extremely high controlQuality + grappling skill in presets.
|
|
200
|
+
* Distributed nervous system → high concussionTolerance, low structureIntegrity (no skeleton).
|
|
201
|
+
*/
|
|
202
|
+
export const LARGE_PACIFIC_OCTOPUS = {
|
|
203
|
+
stature_m: to.m(1.0), // effective size; mantle ~0.3 m, arms ~2 m
|
|
204
|
+
mass_kg: to.kg(15),
|
|
205
|
+
visionRange_m: to.m(20), visionArcDeg: 300, hearingRange_m: to.m(5),
|
|
206
|
+
decisionLatency_s: to.s(0.30), attentionDepth: 3, threatHorizon_m: to.m(10),
|
|
207
|
+
statureVar: q(0.10), massVar: q(0.20),
|
|
208
|
+
reachVar: q(0.08), actuatorScaleVar: q(0.12), structureScaleVar: q(0.10),
|
|
209
|
+
actuatorMassFrac: q(0.55), // arms are almost entirely muscle
|
|
210
|
+
actuatorMassVar: q(0.12),
|
|
211
|
+
peakForce_N: to.N(1200), peakForceVar: q(0.15),
|
|
212
|
+
peakPower_W: to.W(400), peakPowerVar: q(0.18),
|
|
213
|
+
continuousPower_W: to.W(80), continuousPowerVar: q(0.20),
|
|
214
|
+
reserveEnergy_J: to.J(6_000), reserveEnergyVar: q(0.25),
|
|
215
|
+
conversionEfficiency: q(0.80), efficiencyVar: q(0.08),
|
|
216
|
+
reactionTime_s: to.s(0.25), reactionTimeVar: q(0.15),
|
|
217
|
+
controlQuality: q(0.95), controlVar: q(0.05), // 8 independently controlled arms
|
|
218
|
+
stability: q(0.98), stabilityVar: q(0.03), // distributed on substrate
|
|
219
|
+
fineControl: q(0.92), fineControlVar: q(0.05),
|
|
220
|
+
surfaceIntegrity: q(0.60), surfaceVar: q(0.15), // soft-bodied
|
|
221
|
+
bulkIntegrity: q(0.70), bulkVar: q(0.15),
|
|
222
|
+
structureIntegrity: q(0.40), structVar: q(0.10), // no skeleton
|
|
223
|
+
distressTolerance: q(0.70), distressVar: q(0.20),
|
|
224
|
+
shockTolerance: q(0.80), shockVar: q(0.15), // distributed nervous system
|
|
225
|
+
concussionTolerance: q(0.90), concVar: q(0.08), // no enclosed brain cavity
|
|
226
|
+
heatTolerance: q(0.35), heatVar: q(0.20),
|
|
227
|
+
coldTolerance: q(0.75), coldVar: q(0.15),
|
|
228
|
+
fatigueRate: q(1.20), fatigueVar: q(0.20),
|
|
229
|
+
recoveryRate: q(0.80), recoveryVar: q(0.20),
|
|
230
|
+
cognition: {
|
|
231
|
+
linguistic: q(0.05), logicalMathematical: q(0.70), spatial: q(0.90),
|
|
232
|
+
bodilyKinesthetic: q(0.95), musical: q(0.25),
|
|
233
|
+
interpersonal: q(0.40), intrapersonal: q(0.65), naturalist: q(0.80), interSpecies: q(0.50),
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
export const SERVICE_ROBOT = {
|
|
237
|
+
stature_m: to.m(1.60),
|
|
238
|
+
mass_kg: to.kg(55),
|
|
239
|
+
visionRange_m: to.m(500), // sensor suite: longer visual range
|
|
240
|
+
visionArcDeg: 360, // omnidirectional cameras
|
|
241
|
+
hearingRange_m: to.m(100), // acoustic arrays
|
|
242
|
+
decisionLatency_s: to.s(0.05), // 50ms: near-instant decision cycle
|
|
243
|
+
attentionDepth: 16, // broad multi-target tracking
|
|
244
|
+
threatHorizon_m: to.m(150), // process threats within 150m
|
|
245
|
+
statureVar: q(0.03),
|
|
246
|
+
massVar: q(0.06),
|
|
247
|
+
reachVar: q(0.05),
|
|
248
|
+
actuatorScaleVar: q(0.12),
|
|
249
|
+
structureScaleVar: q(0.20),
|
|
250
|
+
actuatorMassFrac: q(0.22),
|
|
251
|
+
actuatorMassVar: q(0.12),
|
|
252
|
+
peakForce_N: to.N(2500),
|
|
253
|
+
peakForceVar: q(0.10),
|
|
254
|
+
peakPower_W: to.W(900),
|
|
255
|
+
peakPowerVar: q(0.12),
|
|
256
|
+
continuousPower_W: to.W(350),
|
|
257
|
+
continuousPowerVar: q(0.10),
|
|
258
|
+
reserveEnergy_J: to.J(60_000),
|
|
259
|
+
reserveEnergyVar: q(0.15),
|
|
260
|
+
conversionEfficiency: q(0.92),
|
|
261
|
+
efficiencyVar: q(0.03),
|
|
262
|
+
reactionTime_s: to.s(0.08),
|
|
263
|
+
reactionTimeVar: q(0.10),
|
|
264
|
+
controlQuality: q(0.88),
|
|
265
|
+
controlVar: q(0.08),
|
|
266
|
+
stability: q(0.80),
|
|
267
|
+
stabilityVar: q(0.12),
|
|
268
|
+
fineControl: q(0.85),
|
|
269
|
+
fineControlVar: q(0.10),
|
|
270
|
+
surfaceIntegrity: q(1.6), surfaceVar: q(0.10),
|
|
271
|
+
bulkIntegrity: q(1.2), bulkVar: q(0.10),
|
|
272
|
+
structureIntegrity: q(1.8), structVar: q(0.12),
|
|
273
|
+
distressTolerance: q(0.95), distressVar: q(0.05),
|
|
274
|
+
shockTolerance: q(0.85), shockVar: q(0.08),
|
|
275
|
+
concussionTolerance: q(0.95), concVar: q(0.05),
|
|
276
|
+
heatTolerance: q(0.70), heatVar: q(0.12),
|
|
277
|
+
coldTolerance: q(0.90), coldVar: q(0.08),
|
|
278
|
+
fatigueRate: q(0.70), fatigueVar: q(0.10),
|
|
279
|
+
recoveryRate: q(1.20), recoveryVar: q(0.10),
|
|
280
|
+
cognition: {
|
|
281
|
+
linguistic: q(0.60), logicalMathematical: q(0.90), spatial: q(0.80),
|
|
282
|
+
bodilyKinesthetic: q(0.85), musical: q(0.10),
|
|
283
|
+
interpersonal: q(0.10), intrapersonal: q(0.30), naturalist: q(0.10), interSpecies: q(0.15),
|
|
284
|
+
},
|
|
285
|
+
};
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import type { Archetype } from "./archetypes.js";
|
|
2
|
+
import { type Vec3 } from "./sim/vec3.js";
|
|
3
|
+
import type { Entity } from "./sim/entity.js";
|
|
4
|
+
import type { Loadout } from "./equipment.js";
|
|
5
|
+
import type { SkillMap } from "./sim/skills.js";
|
|
6
|
+
import type { AIPolicy } from "./sim/ai/types.js";
|
|
7
|
+
import type { KernelContext } from "./sim/context.js";
|
|
8
|
+
import type { NarrativeConfig } from "./narrative.js";
|
|
9
|
+
import { type CareLevel, type EntityRecoveryReport as DowntimeReport } from "./downtime.js";
|
|
10
|
+
import type { TerrainGrid, ObstacleGrid, ElevationGrid, HazardGrid } from "./sim/terrain.js";
|
|
11
|
+
export type { CareLevel };
|
|
12
|
+
export interface ArenaCombatant {
|
|
13
|
+
id: number;
|
|
14
|
+
teamId: number;
|
|
15
|
+
archetype: Archetype;
|
|
16
|
+
/** If omitted, derived from trial seed × 1000 + id. */
|
|
17
|
+
seed?: number;
|
|
18
|
+
loadout: Loadout;
|
|
19
|
+
skills?: SkillMap;
|
|
20
|
+
position_m: Vec3;
|
|
21
|
+
aiPolicy?: AIPolicy;
|
|
22
|
+
/**
|
|
23
|
+
* Optional post-creation mutation — called after entity is built from archetype.
|
|
24
|
+
* Use to inject pre-set wounds for recovery-focused calibration scenarios.
|
|
25
|
+
*/
|
|
26
|
+
mutateOnCreate?: (entity: Entity) => void;
|
|
27
|
+
}
|
|
28
|
+
export interface ArenaScenario {
|
|
29
|
+
name: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
combatants: ArenaCombatant[];
|
|
32
|
+
terrain?: {
|
|
33
|
+
terrainGrid?: TerrainGrid;
|
|
34
|
+
obstacleGrid?: ObstacleGrid;
|
|
35
|
+
elevationGrid?: ElevationGrid;
|
|
36
|
+
hazardGrid?: HazardGrid;
|
|
37
|
+
cellSize_m?: number;
|
|
38
|
+
};
|
|
39
|
+
/** Per-trial tick limit (default: 30 s × TICK_HZ = 600 ticks). */
|
|
40
|
+
maxTicks?: number;
|
|
41
|
+
/** Post-combat recovery phase. */
|
|
42
|
+
recovery?: {
|
|
43
|
+
careLevel: CareLevel;
|
|
44
|
+
/** Override care level per team (e.g. victors get better care). */
|
|
45
|
+
careByTeam?: Map<number, CareLevel>;
|
|
46
|
+
/** How many hours of downtime to simulate per trial. */
|
|
47
|
+
recoveryHours: number;
|
|
48
|
+
/** Shared item pool — copied independently to each combatant's schedule. */
|
|
49
|
+
inventory?: Map<string, number>;
|
|
50
|
+
/** If true, rest multiplier applied (×1.50 healing rates). Default false. */
|
|
51
|
+
rest?: boolean;
|
|
52
|
+
};
|
|
53
|
+
/** Statistical expectations checked against aggregate results. */
|
|
54
|
+
expectations?: ArenaExpectation[];
|
|
55
|
+
}
|
|
56
|
+
export interface ArenaExpectation {
|
|
57
|
+
description: string;
|
|
58
|
+
check: (result: ArenaResult) => boolean;
|
|
59
|
+
}
|
|
60
|
+
export declare function expectWinRate(teamId: number, min: number, max?: number): ArenaExpectation;
|
|
61
|
+
export declare function expectSurvivalRate(entityId: number, min: number): ArenaExpectation;
|
|
62
|
+
export declare function expectMeanDuration(minSeconds: number, maxSeconds: number): ArenaExpectation;
|
|
63
|
+
export declare function expectRecovery(entityId: number, maxDays: number, _careLevel: CareLevel): ArenaExpectation;
|
|
64
|
+
export declare function expectResourceCost(teamId: number, maxCostUnits: number): ArenaExpectation;
|
|
65
|
+
export interface InjurySummary {
|
|
66
|
+
entityId: number;
|
|
67
|
+
dead: boolean;
|
|
68
|
+
unconscious: boolean;
|
|
69
|
+
consciousness: number;
|
|
70
|
+
fluidLoss: number;
|
|
71
|
+
shock: number;
|
|
72
|
+
activeBleedingRegions: string[];
|
|
73
|
+
fracturedRegions: string[];
|
|
74
|
+
infectedRegions: string[];
|
|
75
|
+
maxStructuralDamage: number;
|
|
76
|
+
}
|
|
77
|
+
export interface RecoveryOutcome {
|
|
78
|
+
entityId: number;
|
|
79
|
+
died: boolean;
|
|
80
|
+
combatReadyAt_s: number | null;
|
|
81
|
+
fullRecoveryAt_s: number | null;
|
|
82
|
+
resourcesUsed: DowntimeReport["resourcesUsed"];
|
|
83
|
+
totalCostUnits: number;
|
|
84
|
+
}
|
|
85
|
+
export interface CombatLogEntry {
|
|
86
|
+
tick: number;
|
|
87
|
+
text: string;
|
|
88
|
+
}
|
|
89
|
+
export interface ArenaTrialResult {
|
|
90
|
+
trialIndex: number;
|
|
91
|
+
seed: number;
|
|
92
|
+
ticks: number;
|
|
93
|
+
outcome: "team1_wins" | "team2_wins" | "draw" | "timeout";
|
|
94
|
+
survivors: number[];
|
|
95
|
+
injuries: InjurySummary[];
|
|
96
|
+
recoveryOutcomes?: RecoveryOutcome[];
|
|
97
|
+
combatLog?: CombatLogEntry[];
|
|
98
|
+
}
|
|
99
|
+
export interface ArenaResult {
|
|
100
|
+
scenario: ArenaScenario;
|
|
101
|
+
trials: number;
|
|
102
|
+
trialResults: ArenaTrialResult[];
|
|
103
|
+
winRateByTeam: Map<number, number>;
|
|
104
|
+
drawRate: number;
|
|
105
|
+
timeoutRate: number;
|
|
106
|
+
meanCombatDuration_s: number;
|
|
107
|
+
p50CombatDuration_s: number;
|
|
108
|
+
survivalRateByEntity: Map<number, number>;
|
|
109
|
+
meanTTI_s: Map<number, number>;
|
|
110
|
+
injuryDistribution: {
|
|
111
|
+
entityId: number;
|
|
112
|
+
meanFluidLoss: number;
|
|
113
|
+
fractureProbability: number;
|
|
114
|
+
deathProbability: number;
|
|
115
|
+
}[];
|
|
116
|
+
recoveryStats?: {
|
|
117
|
+
entityId: number;
|
|
118
|
+
survivalRatePostRecovery: number;
|
|
119
|
+
meanCombatReadyDays: number | null;
|
|
120
|
+
meanFullRecoveryDays: number | null;
|
|
121
|
+
meanResourceCostUnits: number;
|
|
122
|
+
p90ResourceCostUnits: number;
|
|
123
|
+
}[];
|
|
124
|
+
expectationResults: {
|
|
125
|
+
description: string;
|
|
126
|
+
passed: boolean;
|
|
127
|
+
detail?: string;
|
|
128
|
+
}[];
|
|
129
|
+
}
|
|
130
|
+
export declare function runArena(scenario: ArenaScenario, trials: number, options?: {
|
|
131
|
+
narrativeCfg?: NarrativeConfig;
|
|
132
|
+
ctx?: KernelContext;
|
|
133
|
+
seedOffset?: number;
|
|
134
|
+
}): ArenaResult;
|
|
135
|
+
/** Machine-readable summary (JSON-safe — no Maps or Functions). */
|
|
136
|
+
export declare function summariseArena(result: ArenaResult): object;
|
|
137
|
+
/** Human-readable statistical report. */
|
|
138
|
+
export declare function formatArenaReport(result: ArenaResult): string;
|
|
139
|
+
/**
|
|
140
|
+
* Full narrative of the median-duration trial (representative fight).
|
|
141
|
+
* Falls back to first trial if no narrative was collected.
|
|
142
|
+
*/
|
|
143
|
+
export declare function narrateRepresentativeTrial(result: ArenaResult): string;
|
|
144
|
+
/**
|
|
145
|
+
* Armed trained human vs. unarmed untrained human.
|
|
146
|
+
* Source: criminal assault literature, self-defence training studies.
|
|
147
|
+
*/
|
|
148
|
+
export declare const CALIBRATION_ARMED_VS_UNARMED: ArenaScenario;
|
|
149
|
+
/**
|
|
150
|
+
* Post-combat entity with severe knife wound, no treatment, 60 min downtime.
|
|
151
|
+
* Source: Sperry (2013) untreated penetrating abdominal trauma mortality.
|
|
152
|
+
*/
|
|
153
|
+
export declare const CALIBRATION_UNTREATED_KNIFE_WOUND: ArenaScenario;
|
|
154
|
+
/**
|
|
155
|
+
* Same severe knife wound, first_aid applied within onset delay = 0.
|
|
156
|
+
* Source: TCCC tourniquet outcome data.
|
|
157
|
+
*/
|
|
158
|
+
export declare const CALIBRATION_FIRST_AID_SAVES_LIVES: ArenaScenario;
|
|
159
|
+
/**
|
|
160
|
+
* Fresh long-bone fracture, field_medicine care, extended downtime.
|
|
161
|
+
* Source: orthopaedic rehabilitation literature.
|
|
162
|
+
*/
|
|
163
|
+
export declare const CALIBRATION_FRACTURE_RECOVERY: ArenaScenario;
|
|
164
|
+
/**
|
|
165
|
+
* Moderate internal wound with active infection, no antibiotics, 24h downtime.
|
|
166
|
+
* Source: pre-antibiotic era wound infection mortality (Ogston, Lister era data).
|
|
167
|
+
*/
|
|
168
|
+
export declare const CALIBRATION_INFECTION_UNTREATED: ArenaScenario;
|
|
169
|
+
/**
|
|
170
|
+
* Armoured knight vs. unarmoured swordsman, matched skill and archetype.
|
|
171
|
+
* Source: HEMA literature on plate armour effectiveness.
|
|
172
|
+
*/
|
|
173
|
+
export declare const CALIBRATION_PLATE_ARMOUR: ArenaScenario;
|