Open this document in the playground · Download source
Cairn 2e — one Blood Elk hit
Advanced · R23 · Component: immediate injury categories, not a combat simulator
Question and scope
After one ordinary Blood Elk horns hit, how likely is each immediate injury category? The attack hits automatically. Armour reduces the d8 damage, HP absorbs what it can, and overflow reduces STR. A surviving victim then saves against reduced STR. At zero STR the victim dies before any save can help.
This report flags a scar but does not resolve the scar table, recovery, aid, subsequent attacks, or the fictional consequences of goring. Impaired/enhanced attacks and multiple attackers are excluded.
Inputs
| Input | Default | Supported values |
|---|---|---|
| HP before the hit | 4 | Positive integers; not an already incapacitated PC |
| Armour | 2 | Integers 0–3 |
| STR before the hit | 11 | Integers 1–20 |
| Horns | d8 | Fixed ordinary Blood Elk attack |
Model sketch
The function receives a horn face and an independent potential save face.
def defines a function; return supplies its answer. Indented if branches
stop at the first applicable outcome. Passing blood_elk_hit by name lets
joint_classify apply it to all 8 × 20 possible pairs.
The potential save is ignored when damage does not require one. This preserves the relationship between damage and its save threshold; multiplying two separately displayed marginal probabilities would not preserve it.
HP = 4
ARMOR = 2
STR = 11
if HP < 1 or ARMOR < 0 or ARMOR > 3 or STR < 1 or STR > 20:
fail("Use positive HP, Armor 0–3, and STR 1–20")
Scale = (
scale()
.step("NO_EFFECT")
.step("HIT_PROTECTION_LOSS")
.step("SCAR")
.step("STR_DOWN_OK")
.step("CRITICAL_DAMAGE")
.step("DEATH")
)
def blood_elk_hit(horn, save):
dmg = max(0, horn - ARMOR)
if dmg == 0:
return "NO_EFFECT"
if dmg < HP:
return "HIT_PROTECTION_LOSS"
if dmg == HP:
return "SCAR"
new_str = STR - (dmg - HP)
if new_str <= 0:
return "DEATH"
if save == 1:
return "STR_DOWN_OK"
if save == 20:
return "CRITICAL_DAMAGE"
if save <= new_str:
return "STR_DOWN_OK"
return "CRITICAL_DAMAGE"
out = joint_classify(d(8), d(20), Scale, blood_elk_hit)
output("blood_elk_horns", out)
output("p_protection_loss_or_worse", out.p_at_least("HIT_PROTECTION_LOSS"))
output("p_scar_or_worse", out.p_at_least("SCAR"))
output("Critical damage or death", out.p_at_least("CRITICAL_DAMAGE"))
blood_elk_horns · Outcomes
| outcome | % | frac | X/160 |
|---|---|---|---|
| NO_EFFECT | 25.0 | 1/4 | 40 |
| HIT_PROTECTION_LOSS | 37.5 | 3/8 | 60 |
| SCAR | 12.5 | 1/8 | 20 |
| STR_DOWN_OK | 11.9 | 19/160 | 19 |
| CRITICAL_DAMAGE | 13.1 | 21/160 | 21 |
| DEATH | 0.00 | 0 | 0 |
p_protection_loss_or_worse · Prob
| outcome | % | frac | X/160 |
|---|---|---|---|
| p_protection_loss_or_worse | 75.0 | 3/4 | 120 |
p_scar_or_worse · Prob
| outcome | % | frac | X/160 |
|---|---|---|---|
| p_scar_or_worse | 37.5 | 3/8 | 60 |
Critical damage or death · Prob
| outcome | % | frac | X/160 |
|---|---|---|---|
| Critical damage or death | 13.1 | 21/160 | 21 |
Reading and checking the report
| Default horn faces | Category | Independent check |
|---|---|---|
| 1–2 | No effect | 1/4 |
| 3–5 | HP loss only | 3/8 |
| 6 | Scar triggered at exactly zero HP | 1/8 |
| 7–8, passed save | STR loss, still fighting | (10 + 9)/160 = 19/160 |
| 7–8, failed save | Critical damage | (10 + 11)/160 = 21/160 |
| None | Death at zero STR | 0 |
The default scar is keyed to 4 HP lost (Broken Limb), but its later rolls are outside this report. The last probability includes critical damage or death; the output title states both possibilities rather than hiding death in a critical-damage label.
Adaptations and boundaries
Change STR to 1 while keeping HP 4 and armour 2: horns 7–8 now cause death, probability 1/4. Even a potential save of 1 cannot prevent it. With STR 2, only a horn face of 8 causes immediate death, probability 1/8. These boundary checks catch an error that the default inputs cannot expose.
Do not chain this report into a second attack as if it preserved the remaining HP and STR. That needs a stateful model, not just these outcome labels.
Rules dossier
Cairn second edition, online Player’s Guide: Saves, Armor, Attacking & Damage, Critical Damage, Attribute Loss, and Scars; core rules. Warden’s Guide: Blood Elk. The online text was source-checked during this rewrite; no printing-specific page numbers are implied. Rules are paraphrased, not a replacement for the game. Independent human rules review and beginner/browser review remain pending.
Related: modifiers introduces named inputs; ordered outcomes explains the label ladder.
Content ID: R23 · Review status: pilot