duel
The rules of the Hedgerow Assizes, in one place: the ground plan of the walled garden, the frame data of the four commitments, the measure each one works at, the triangle that decides what a contact means, how far a post drives the property line, and the roster of neighbours with…
duel
The rules of the Hedgerow Assizes, in one place: the ground plan of the walled garden, the frame data of the four commitments, the measure each one works at, the triangle that decides what a contact means, how far a post drives the property line, and the roster of neighbours with the fencing each one keeps. Every duel component reads its numbers from here, so the whole match is tuned in one file.
Consumed by Fencer, FencerAI, DuelMatch, DuelHud, DuelFx, garden and
the main scene's entrypoint.
The measure
Each action carries a band, not a range: reach is the furthest the blade
crosses and minReach the nearest — inside that, the panel is smothered and the
attack is crowded out. advance is the ground the commitment itself takes, so
every attack steps in and a defender cannot simply walk backwards out of the
sport. A commitment that reached nobody runs its recovery from a debt, and that
debt is the whole punishment for committing at the wrong distance.
| Action | windup | active | recover | reach | minReach | advance | whiff | parried |
|---|---|---|---|---|---|---|---|---|
thrust | 0.22 | 0.10 | 0.42 | 2.55 | 1.55 | 0.35 | 0.35 | 0.45 |
sweep | 0.34 | 0.20 | 0.58 | 2.15 | 0.00 | 0.25 | 0.55 | 0.65 |
lunge | 0.30 | 0.16 | 0.95 | 3.05 | 1.75 | 1.30 † | 1.00 | 1.20 |
parry | 0.05 | 0.34 | 0.40 | — | — | — | 0.30 | — |
† The lunge is marked recoil: whatever of its advance it managed to cover it
gives back over its own recovery, travelling backwards and unable to answer
anything while it does. It buys reach; it never buys position.
The triangle
parry turns a thrust and a lunge aside and earns a riposte; a sweep
crashes through a held guard; a thrust arrives inside a sweep's long
wind-up. A riposte cannot be turned at all.
The guard answers from its first frame. resolveTouch treats a parry in
windup exactly as it treats one in active, because a guard that only worked
once it had finished rising could be beaten by an attack thrown from further out
than the wind-up is long — which made a correct read lose to a committed attack,
the one outcome the triangle exists to prevent.
What a post is worth
A post is not a fixed step. Three properties of the ground decide how far the line moves, and between them they are what gives a bout its length:
POST_STEP | 1.15 | fresh mown lawn in the middle of a garden |
POST_ROOTED | 0.60 | the last feet before a hedge are old rooted ground, and give up to this much of the step |
POST_RECLAIM | 0.35 | lawn you already conceded holds somebody else's posts; they come out before the line passes back |
POST_CHURN | 0.05 | each post already driven breaks the ground a little further, to POST_CHURN_MAX |
postDrive(line, dir, posts, driven) is the whole rule. Rooted ground stops a
garden being annexed by a short run of luck; conceded ground stops two even
fencers walking the line back and forth all afternoon. Chosen against a
simulation of the rule over 600 bouts a configuration, with the riposte rate and
touch cadence taken from played logs: a median bout of about 20 touches, 80 % of
bouts between 45 s and 120 s.
The roster, and how each one fences
NEIGHBOURS is the roster — index, key, skill and style. STYLES is the
fencing attached to each key, and it is what makes three opponents rather than
one opponent at three settings:
hold | think | patience | adapt | boundary | |
|---|---|---|---|---|---|
pettifer | +0.55 | 1.45 | 2.4 | 0.6 | 0.0 |
wickham | 0.00 | 0.90 | 1.0 | 2.2 | 0.15 |
ashcombe | −0.35 | 0.75 | 0.6 | 1.1 | 1.0 |
hold moves the measure held at rest; think the pause between commitments;
patience how long an opponent who has offered nothing is indulged before the
touch is simply fetched; adapt how heavily a repeated stroke steers the answer
and how much faster the eye settles on one it has seen; boundary how far the
defence of one's own ground stiffens the fencing as the line comes back toward
one's own hedge. w* are the standing appetites for each commitment.
style(key) falls back to wickham's for an unknown name rather than erroring.
Surface
ACTIONS— the table above.isAttack(name),reachOf(name, isRiposte),windupOf(name, isRiposte),advanceSpeed(name),whiffOf(name),parriedOf(name).resolveTouch(attack, defAction, defPhase, isRiposte)—"touch"|"parried"|"nothing".measureFault(name, gap, isRiposte)—"short"|"crowded"|nil.postDrive(line, dir, posts, driven)— metres one touch moves the boundary.resetX(line, side)/clampX(x, line, side, foeX)— where a fencer stands, and how far it may travel: bounded by the opponent, not by the line.winner(line)—"player"|"rival"|nilfor the boundary's position.NEIGHBOURS,neighbour(index),neighbourIndexOf(key),neighbourNearestSkill(skill),STYLES,style(key).LAWN_HALF,LINE_LIMIT,POST_STEP,POST_ROOTED,POST_RECLAIM,POST_CHURN,POST_CHURN_MAX,RIPOSTE_POSTS,STANCE,WALK_SPEED,RETREAT_FACTOR,MIN_GAP,LEASH,RIPOSTE_WINDOW,RIPOSTE_QUICK,RIPOSTE_REACH,CLASH_PUSHBACK,HIT_STUN,SALUTE_TIME,TOUCH_PAUSE,SIDE,COLOR.
Scoped to this part · feeds back into the world's score.