Retune the case ramp, and let leading a phase earn experience

The ramp made every phase after the first Difficult (halving the lead's skill) and
stacked a cumulative -5% on top. Separated in phaseRampFor() in rules.mjs:
difficulty belongs to the phase (only Containment is Difficult, and it does not
also ramp), the modifier is attrition (-5 a phase, capped at -15).

  lead 55%   was 55 -> 22 -> 17 -> 12 -> 7      now 55 -> 50 -> 45 -> 27 -> 40

Over 20,000 simulated cases with destitution modelled, phases passed roughly
double and destitution incidence roughly halves.

R-222: resolveLegDialog passed no skillFamilyId, so the choke point could not
resolve the skill item and leading a phase never earned a tick — Tradecraft, the
skill the job most uses, could never improve.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-08-10 21:12:04 +01:00
co-authored by Claude Opus 5
parent 1a0bdbd2df
commit 1b44fccb79
31 changed files with 171 additions and 82 deletions
+7
View File
@@ -5015,6 +5015,13 @@ async function resolveLegDialog(expedition) {
actor: best.actor,
label: game.i18n.format("RINGBRP.Expedition.LegRoll", { n: idx + 1, terrain: leg.terrain ?? "" }),
rating: best.rating,
// R-222. The family was never passed, so skillRoll could not resolve the skill
// item, and a phase led successfully earned no experience tick. This is the same
// fault the internal-callers fix addressed — it resolves the item FROM the
// family, and this caller supplied none. The skill the job most uses was still
// the one that could never improve.
skillFamilyId: best.skill,
categoryId: "mental",
difficulty,
situational: (cancelled ? 0 : Number(leg.modifier) || 0) + rewardBonus,
flavourLines: [