Armour covers what it covers, and Coherence moves to the vitals
Asking for the type of armour per location turned out not to be a display request. Every equipped piece added its points to EVERY location, so a Brodie helmet protected your shins and a cuirass protected your skull — with a catalogue containing sallets, lobster-tail helmets and three cuirasses, that could not be printed without the sheet saying something visibly false. Armour now declares coverage as a named set rather than a list of locations, because a piece has to fit whatever body wears it: all, torso, torsoArms, torsoLimbs, head. The sets expand to location KINDS, so a cuirass covers a baseline torso and a vesh trunk and ridge without either knowing the other exists. Unstated coverage is `all`, so anything that does not declare behaves as everything did before. Eighteen of the twenty-five catalogue pieces are not whole-body and now say so. The trap was double counting: hitLocationRoll subtracted the global worn total PLUS the body's own armour at that location, which was right while armour was global and becomes a double count the moment a location knows its own pieces. It reads the location's total and nothing else, verified by firing fourteen hits of 10 damage across every location and asserting damage applied == 10 - that location's armour. A single ARMOUR number no longer exists, so the header shows the torso with "0-8 by location" beside it when the rest of you is not that. This is a real difficulty change: limbs are frequently bare and limbs are 12 of 20 on the melee table. Coherence moves out of the derived strip into the vitals at hit-point size, with its band under it and the box reddening as it falls. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3421ed4a2e
commit
6ed9ded362
+18
-18
@@ -181,35 +181,35 @@ export const WEAPONS = [
|
||||
|
||||
/* ---------- armour (v0.5 §4.8) ---------- */
|
||||
export const ARMOURS = [
|
||||
{ key: "jacket", name: "Reinforced jacket", points: 1, mass: 2, trad: "tradition_agency" },
|
||||
{ key: "stab_vest", name: "Stab vest", points: 2, mass: 3, trad: "tradition_agency" },
|
||||
{ key: "soft_armour", name: "Concealed soft armour", points: 3, mass: 3.5, trad: "tradition_agency" },
|
||||
{ key: "jacket", name: "Reinforced jacket", points: 1, covers: "torsoArms", mass: 2, trad: "tradition_agency" },
|
||||
{ key: "stab_vest", name: "Stab vest", points: 2, covers: "torso", mass: 3, trad: "tradition_agency" },
|
||||
{ key: "soft_armour", name: "Concealed soft armour", points: 3, covers: "torso", mass: 3.5, trad: "tradition_agency" },
|
||||
{ key: "hide", name: "Cured hide", points: 4, mass: 7 },
|
||||
{ key: "mail", name: "Mail", points: 5, mass: 9 },
|
||||
{ key: "mail", name: "Mail", points: 5, covers: "torsoLimbs", mass: 9 },
|
||||
{ key: "plate", name: "Plate", points: 8, mass: 18 },
|
||||
{ key: "impact_vest", name: "Impact vest", points: 6, mass: 3, trad: "tradition_agency" },
|
||||
{ key: "impact_vest", name: "Impact vest", points: 6, covers: "torso", mass: 3, trad: "tradition_agency" },
|
||||
{ key: "breach_suit", name: "Breaching suit", points: 7, mass: 11, trad: "tradition_agency" },
|
||||
{ key: "envsuit", name: "Environment suit", points: 4, mass: 8, trad: "tradition_agency" },
|
||||
{ key: "salvage_plate", name: "Salvaged crossing plate", points: 10, mass: 11, trad: "tradition_transposed", coherence: 1 },
|
||||
|
||||
{ key: "oilcloth_coat", name: "Oilcloth coat", points: 1, mass: 3.0, era: "antique", trad: "tradition_local", desc: "Keeps the weather out and very little else." },
|
||||
{ key: "brigandine", name: "Brigandine", points: 4, mass: 9.0, era: "antique", trad: "tradition_local", desc: "Plates riveted between cloth. Heavy, quiet, and older than the agency." },
|
||||
{ key: "oilcloth_coat", name: "Oilcloth coat", points: 1, covers: "torsoLimbs", mass: 3.0, era: "antique", trad: "tradition_local", desc: "Keeps the weather out and very little else." },
|
||||
{ key: "brigandine", name: "Brigandine", points: 4, covers: "torso", mass: 9.0, era: "antique", trad: "tradition_local", desc: "Plates riveted between cloth. Heavy, quiet, and older than the agency." },
|
||||
{ key: "hardsuit", name: "Sealed hardsuit", points: 9, mass: 12.0, era: "future", trad: "tradition_transposed", desc: "Sealed, powered and not from here. Also a breathing set — see Gear." },
|
||||
|
||||
/* --- the historical range. Weight is the point: everything here protects
|
||||
well and costs you the ability to run in it. --- */
|
||||
{ key: "gambeson", name: "Gambeson", points: 2, mass: 4.5, era: "antique", trad: "tradition_local", desc: "Medieval. Quilted linen, thirty layers. Worn alone by the poor and under everything by everyone else." },
|
||||
{ key: "maille_shirt", name: "Maille shirt", points: 4, mass: 7.5, era: "antique", trad: "tradition_local", desc: "Medieval. Stops a cut completely and a spike not at all. Wear it over the gambeson or regret it." },
|
||||
{ key: "coat_of_plates", name: "Coat of plates", points: 6, mass: 11, era: "antique", trad: "tradition_local", desc: "Medieval. Iron plates riveted inside a fabric coat. The compromise that held for a century." },
|
||||
{ key: "cuirass", name: "Cuirass", points: 6, mass: 9, era: "antique", trad: "tradition_local", desc: "Early modern. Breast and back. Proof against a pistol at any sensible distance, and stated so by the armourer." },
|
||||
{ key: "gambeson", name: "Gambeson", points: 2, covers: "torsoArms", mass: 4.5, era: "antique", trad: "tradition_local", desc: "Medieval. Quilted linen, thirty layers. Worn alone by the poor and under everything by everyone else." },
|
||||
{ key: "maille_shirt", name: "Maille shirt", points: 4, covers: "torsoArms", mass: 7.5, era: "antique", trad: "tradition_local", desc: "Medieval. Stops a cut completely and a spike not at all. Wear it over the gambeson or regret it." },
|
||||
{ key: "coat_of_plates", name: "Coat of plates", points: 6, covers: "torso", mass: 11, era: "antique", trad: "tradition_local", desc: "Medieval. Iron plates riveted inside a fabric coat. The compromise that held for a century." },
|
||||
{ key: "cuirass", name: "Cuirass", points: 6, covers: "torso", mass: 9, era: "antique", trad: "tradition_local", desc: "Early modern. Breast and back. Proof against a pistol at any sensible distance, and stated so by the armourer." },
|
||||
{ key: "harness", name: "Full harness", points: 9, mass: 25, era: "antique", trad: "tradition_local", desc: "Medieval. Head to foot, articulated, and far more wearable than people think — until the third hour." },
|
||||
{ key: "buff_coat", name: "Buff coat", points: 3, mass: 5, era: "antique", trad: "tradition_local", desc: "Civil War. Thick ox hide to the knee. Turns a sword, ignores a ball, and never dries out." },
|
||||
{ key: "sallet", name: "Sallet and bevor", points: 5, mass: 3.2, era: "antique", trad: "tradition_local", desc: "Medieval. Covers the head and the throat and takes most of your hearing with it." },
|
||||
{ key: "lobster_pot", name: "Lobster-tail helmet", points: 4, mass: 2.6, era: "antique", trad: "tradition_local", desc: "Civil War. Three bars across the face. You can see out; that is all that can be said for it." },
|
||||
{ key: "jack_of_plate", name: "Jack of plate", points: 4, mass: 6, era: "antique", trad: "tradition_local", desc: "Tudor. Small iron plates stitched between canvas. Looks like a coat until somebody hits it." },
|
||||
{ key: "cuirassier", name: "Cuirassier armour", points: 8, mass: 18, era: "antique", trad: "tradition_local", desc: "Early modern. Three-quarter plate for a man on a horse. On foot it is a punishment." },
|
||||
{ key: "brodie", name: "Brodie helmet", points: 3, mass: 1.3, era: "antique", trad: "tradition_local", desc: "Great War. A steel plate on a strap. Designed against shrapnel from above and honest about it." },
|
||||
{ key: "flak_jacket", name: "Flak jacket", points: 4, mass: 8.5, era: "antique", trad: "tradition_local", desc: "Second War. Manganese plates in a waistcoat. Heavy, hot, and it has saved a great many people." }
|
||||
{ key: "buff_coat", name: "Buff coat", points: 3, covers: "torsoLimbs", mass: 5, era: "antique", trad: "tradition_local", desc: "Civil War. Thick ox hide to the knee. Turns a sword, ignores a ball, and never dries out." },
|
||||
{ key: "sallet", name: "Sallet and bevor", points: 5, covers: "head", mass: 3.2, era: "antique", trad: "tradition_local", desc: "Medieval. Covers the head and the throat and takes most of your hearing with it." },
|
||||
{ key: "lobster_pot", name: "Lobster-tail helmet", points: 4, covers: "head", mass: 2.6, era: "antique", trad: "tradition_local", desc: "Civil War. Three bars across the face. You can see out; that is all that can be said for it." },
|
||||
{ key: "jack_of_plate", name: "Jack of plate", points: 4, covers: "torso", mass: 6, era: "antique", trad: "tradition_local", desc: "Tudor. Small iron plates stitched between canvas. Looks like a coat until somebody hits it." },
|
||||
{ key: "cuirassier", name: "Cuirassier armour", points: 8, covers: "torsoArms", mass: 18, era: "antique", trad: "tradition_local", desc: "Early modern. Three-quarter plate for a man on a horse. On foot it is a punishment." },
|
||||
{ key: "brodie", name: "Brodie helmet", points: 3, covers: "head", mass: 1.3, era: "antique", trad: "tradition_local", desc: "Great War. A steel plate on a strap. Designed against shrapnel from above and honest about it." },
|
||||
{ key: "flak_jacket", name: "Flak jacket", points: 4, covers: "torso", mass: 8.5, era: "antique", trad: "tradition_local", desc: "Second War. Manganese plates in a waistcoat. Heavy, hot, and it has saved a great many people." }
|
||||
];
|
||||
|
||||
/* ---------- gear ---------- */
|
||||
|
||||
Reference in New Issue
Block a user