init.luau
Versions
Every version of this package its world published, newest first by when it first appeared. A version published again later keeps its place.
Comparing from 01KZ239AY2NNPK6METXAH79AEG. Pick the version to compare it with. Cancel
the-roster: un-invert the ramp, close the exploit with a rule, bound the bout --- the-roster: un-invert the ramp, close the exploit with a rule, bound the bout
01KZ3EY76EKSA2CCDA6QCDSXATc0197a6317Browse filesCompare with this versionthe-garden: the garden takes light, and there are six of them lib.hedge_leaf writes a real PBR G-buffer, so pass:albedo and pass:final differ completely on every hedge, topiary, orchard and treeline surface and pass:roughness reports a value instead of magenta. Every foliage material is authored against a lit surface rather than an emitter, and the same hedge run with the sun behind it is visibly darker than with the sun on it. lib.garden_turf is new: the lawn is a lit surface whose mown bands wander instead of meeting along a ruler, with a clump register for the sward, a blade register so it does not go flat close up, and a wear register for the ground either side of the piste. Ten lawn materials moved onto it, each carrying its own roller width - 1.65m and almost no wander for the Major's parade ground, 7.5m and 3m of wander for a field mown twice a year. The stripe slabs and the stripe style fields are gone with it. Three more grounds and three more turnouts: Sixpenny Nursery, the Old Rectory and Gallows Piece, with Mr Quilty, the Revd. Brasenose and Young Tibb. Mrs Pettifer is a bottle-green bell under a wide pale brim now, because straw over straw against a player in whites is one figure and not two. The counter-fill is removed. A second directional light contributes nothing to the shaded result - the same frame at fill 0.0 and fill 8.0 is pixel-identical, filed as #8139 - so the shade side was always ambient alone, and the rig says so now: one key and one hemisphere, five moods re-solved on it, and the shadow re-arm hack that existed only to survive the second light went with it. The treeline stands at 44m instead of 31m in eleven irregular crowns, because a 9m crown at 31m is twenty degrees of backdrop before anything in the game is drawn. GardenDressing's repair loop runs twice a second instead of five times: 0.07ms a frame against 0.52ms.
01KZ372NV7TKQDRRG1WF1NNMB546ea9ea9ddBrowse filesCompare with this versionplaytest r2: close the triangle, de-fizz the garden, make the neighbours' grounds reachable
01KZ26GP452DQVBVMN7YQPWM785f0d6bdbc5Browse filesCompare with this versionthe-fight: the panel goes up at a blade, not at a man The last source of the losing line. A guard was still being offered to an opponent standing at guard - by the weighted choice and by the old 'close the line' rule, which existed because a 0.22 s tell used to be unanswerable. It is answerable now that the read is latched, and a pre-emptive guard is strictly worse than a read one: the opponent chooses when to start, so the window closes before he does, and he attacks into a panel that has already come down. That is 'lunge vs parry/recover -> touch', which was 12 of 23 exchanges in the last measured bout. The panel now goes up only at a blade already on its way. Against a man who does nothing but attack, the neighbour holds the edge of his measure and waits for the wind-up. Measured after the change, one-button lunge bot vs skill 0.5: lost 0-5, nine exchanges, four lunges turned aside and four ripostes taken off them. No occurrence of a guard being beaten in its wind-up or its recovery.
01KZ239AY2NNPK6METXAH79AEGa3d0174fffBrowse filesPickedthe-fight: the neighbour reads the wind-up, and never spends a guard on an empty tempo Three defects the played logs turned up, all of which let a one-button lunge win. - The read was being lost to frame sampling. It gated on the opponent's phaseTime crossing a reaction threshold on some frame, and a 0.30 s wind-up seen at 10 fps offers two samples - so at reaction 0.24 s the answer to a lunge could not fire at all. The eye now latches onto a wind-up when it appears, rolls the read once, and answers when it has had its time. The threshold is 0.20 - 0.11 * skill, shorter than every tell it is meant to beat; the difficulty lives in whether the read is taken, not in whether it was physically possible. - A guard was being thrown at a man who could not attack. Raising the panel during an opponent's recovery spends its window on an empty tempo, and the attack that follows meets nothing - which is exactly the losing line the log kept showing, 'lunge vs parry/recover -> touch'. The guard is now offered only when there is something it could turn aside, and against a proven attacker the neighbour holds its measure at the edge of his reach and waits for the wind-up rather than committing into his recovery. - idleFor counted a man in the middle of a commitment as idle, so the courtesy meant for a passive opponent was firing at one who was attacking. Only a fencer standing at guard with nothing thrown is offering nothing.
01KZ231JACB7DKYKAHGQ61S3GE53b992b599Browse filesCompare with this versioncard-and-ceremony: edge-anchored shell, a verdict that shows the board, and the docket --- the-fight: the guard answers from its first frame, and a post is worth what the ground is The lunge stops being the one button that solves the game, and the bout gets a length that was chosen rather than inherited. - resolveTouch treats a parry in windup exactly as one in active. A guard that only worked once it had finished rising lost to any attack thrown from further out than the wind-up is long, so a correct read lost to a committed attack - the one outcome the triangle exists to prevent. - The lunge is marked recoil: whatever of its 1.30 m advance it covered, it gives back over its own recovery, travelling backwards and unable to answer. It buys reach; it no longer buys position. - whiff and parried debts are per commitment rather than one constant, so the price scales with what was bought: a lunge turned aside costs 1.20 s. A guard that turned nothing aside is an opening of its own, at 0.30 s. - postDrive replaces the flat POST_STEP. Fresh lawn gives, the rooted feet by a hedge do not, ground already conceded holds somebody else's posts, and every post driven breaks the ground further. Rooted ground stops a garden falling to a short run of luck; conceded ground stops two even fencers walking the line back and forth all afternoon. - duel.STYLES gives the three neighbours three manners of fencing rather than one difficulty float: Mrs Pettifer stands off and waits, Major Wickham plays the triangle's answer to a repeated stroke before it is thrown, Lady Ashcombe fences hardest with her own hedge behind her. - A neighbour waits for the invitation. An opponent who offers nothing is indulged for as long as that neighbour's form requires, so passivity is still punished but no longer instantly.
01KZ21RF98QMHJWCYK5CS8DH27adffdc9f52Browse filesCompare with this versionthe-fight: ship fxQueue, matchClock, neighbour, neighbourKey The four fields the other sections are blocked on, ahead of the tuning. - fxQueue is the lossless read of the frozen event vocabulary: DuelMatch empties it at the top of its own update, before anything that reads it, so a frame's whole list survives. The touch and the post it fires in the same frame both arrive, which is what the one-slot bus drops. - matchClock runs from the bout's first allez and stops at the verdict. - neighbour / neighbourKey / FencerAI.style are one identity written three ways. Writing any of index, slug or skill settles the other two off the roster in duel.module, so a garden, a turnout and a verdict can name the same person without guessing.
01KZ20353SYZXT55AHVTSNKGV382609e7f7eBrowse filesCompare with this versionduel-depth: four commitments with measure bands, a lunge, a riposte worth two posts, whiff punish, clash, and a rival that keeps a book
01KZ1S6THDCC3PCGNXTZ4QVCY37c7758c3ebBrowse filesCompare with this versionbase: playable loop — the Hedgerow Assizes fence duel end to end Scene, both fencers, controls, camera, core loop and win/lose. Placeholder primitives and untuned numbers throughout. - duel.module — the rules in one file: ground plan, frame data for thrust / sweep / parry, the triangle (resolveTouch), and the placeholder palette. - Fencer.component — one combatant: builds its own primitive body, footwork locked to the piste, windup/active/recover state machine. The panel's pose per phase is the tell. role=player reads input; role=rival is driven by FencerAI through the same methods. - FencerAI.component — the neighbour: closes the measure, reads a wind-up after a reaction delay it cannot beat on a thrust, holds guard, takes its riposte. - DuelMatch.component — the umpire: builds the garden and the boundary fence, spawns the rival, resolves exchanges, plants a post, drives the line into the loser's garden, runs the salute, calls the match at either hedge. - DuelHud.component — the umpire's card. - PisteCamera.component — the locked side-on broadcast view, on the PlayerPrototype's CameraRig. - fencing_controls.inputMap — A/D footwork on the canonical move axis, J thrust, K sweep, L/Space parry, with touch buttons synthesised. The fence runs ALONG the piste and its leading post IS the property line, so the health bar is a physical fence growing across the lawn and the won ground brightens behind it. Validated in a running engine: two full matches to a player win driven with synthetic input, both terminal branches (player and rival) reached, parry into riposte into touch observed in play, clear-and-reload rebuilds the whole arena, scene.json holds exactly 11 entities, zero component errors. --- docs: describe the fencing_controls input map so the world is publishable
01KZ1K4VMBT1HA8SEN14Q6BC2Reb84fe3bdcBrowse filesCompare with this version