Repository navigation
[16/16] feat: block frontal hits with the chair guard - #149
Merged
Merged
Conversation
…ure/58-slice-ending # Conflicts: # docs/04-WORLD-AND-LEVELS.md
Raise the approved chair guard on held Act, activating at the first forward-leg pose. Block frontal normal hits with a 14-pixel kinematic push, deflect rovers without damaging them, and retain normal rear damage. Heavy hits break guard and apply normal life damage. Preserve quick taps, consume engaged releases and finish current attack poses before raising a queued hold. Typecheck, 125 tests, build and docs pass; browser verifies front block, rear hit and tap/hold behavior.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
@Vatsal2005 must be a member of the arudaev's projects team on Vercel to deploy. Learn more about collaboration on Vercel and other options here. |
This was referenced Oct 24, 2026
Carry human-merged lane A changes upward without rewriting published commits.
[2/3] art: grow the Hidden Garden into a five-chunk prologue walk
art: export Dexter at 27 px after approval
feat: end the slice with Dexter's absorb and the continue window
[3/3] art: draw Rusty Creek's parallax layers from region-wide plates
Phaser clears the press flag when a key is released. Reconstruct a short Act tap from its surviving release flag when no down state was observed, so guard routing retains the existing quick sweep input. Keep held guard releases from becoming new presses. Regression coverage drives the real guard and sweep models; typecheck, 128 tests, build and docs pass. Two 5ms browser taps both connect.
Interact boxes now emit trigger-entered once per entry. swapRegion reloads the stage through Preload, and the slice starts in the Hidden Garden. The Flow scene runs the crossing at the pond, then Jenny's ram on the clean bridge, which turns the creek into the rust maze.
This was referenced Oct 24, 2026
arudaev
marked this pull request as ready for review
October 24, 2026 01:34
[17/20] feat: swap regions on the route to the maze
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Hold Act to raise the chair and block frontal one-cell damage. Guard becomes active at the first forward-leg pose (02), loops the hold clip, and plays impact poses with a 14px kinematic push on a successful block. A blocked rover recoils without losing HP, preventing the charge from passing through into a back hit. Rear damage still hits normally.
Two-cell heavy damage breaks the guard and uses normal life damage/knockback. The four break poses survive the knockback state; death takes priority. A quick release remains a sweep, an engaged release consumes the input, and a hold begun during another attack raises guard when that attack finishes. Directional attacks keep priority.
Issue
Closes #41
Refs #45, #57
Stack
[16/16] feat: block frontal hits with the chair guard #149 [16/16] feat: block frontal hits with the chair guard ← this PR
[15/16] feat: add up attacks and pogo slams #146 [15/16] feat: add up attacks and pogo slams
[14/16] feat: patrol and charge with autonomous rovers #145 [14/16] feat: patrol and charge with autonomous rovers
[13/16] feat: save and refill at coffee machines #144 [13/16] feat: save and refill at coffee machines
[12/16] feat: add alternating chair sweeps and contact hits #137 [12/16] feat: add alternating chair sweeps and contact hits
[11/16] feat: add health damage and checkpoint respawn #135 [11/16] feat: add health damage and checkpoint respawn
[10/16] feat: switch locomotion through authored bridge clips #132 [10/16] feat: switch locomotion through authored bridge clips
[9/16] feat: follow the hero with directional camera lead #131 [9/16] feat: follow the hero with directional camera lead
[8/16] feat: add one-way decks and ladder climbing #126 [8/16] feat: add one-way decks and ladder climbing
[7/16] feat: follow ground slopes and slide downhill #125 [7/16] feat: follow ground slopes and slide downhill
[6/16] feat: add variable jumps and landing poses #123 [6/16] feat: add variable jumps and landing poses
[5/16] feat: add weighted walking and running #122 [5/16] feat: add weighted walking and running
[4/16] feat: load authored collision with a debug overlay #120 [4/16] feat: load authored collision with a debug overlay
[3/16] feat: load exported stages and sprite atlases #116 [3/16] feat: load exported stages and sprite atlases
[2/16] ci: check the game with node 22 on pull requests #111 [2/16] ci: check the game with node 22 on pull requests
[1/4] chore(shared): scaffold the phaser game runtime #94 [1/16] chore(shared): scaffold the phaser game runtime — merged
Base:
feature/40-overhead-and-pogo. Human merges bottom up; retarget the next PR to main and merge origin/main into every open branch, never rebase.Acceptance and remaining integration
Held Act blocks frontal damage with a small push; verified against the real tutorial rover
Rear hits cost health despite holding guard
Two-cell heavy damage breaks guard and plays four authored break poses; verified in the pure guard/life test
Actual Jenny charge integration and browser playthrough when [M4-S5] Jenny: rev, charge, crash, debris, stunned – three phases #57 reaches this stack
Verification
Node 22:
npm run typecheck,npm test(128 tests),npm run build; includes main integration at e8577abpy -3.13 scripts/check_docs.pygit diff --cached --checkTests cover exact pose/FPS activation, hold loop, quick versus engaged release, cancelled taps, front/back in both directions, blocked rover recoil without HP loss, heavy guard break, 14px push over three frames and wall clipping
Browser: holding J through the first real rover charge leaves 5/5 cells, increments the block counter to 1 and moves the hero from x676 to x662 (14px). Rover remains at 3/3 HP
Browser: facing away while holding J takes a rear charge, leaves 4/5 cells and records zero blocks
Browser: a 5ms tap followed by a long hold leaves one fixture hit; guard release adds no sweep. No console errors
Physical gamepad and Vercel preview: existing deployments require the owner to grant Vatsal2005 project access
Reference comparison
Plan: docs/02 chair guard.
Reproduce:
python scripts/compare.py lineup chair-block:guard-up-00 chair-block:guard-up-01 chair-block:guard-up-02 chair-block:guard-up-03 chair-block:guard-hold-00 chair-block:guard-impact-00 chair-block:guard-break-00 --out game/verification/41-guard-pose-compare.png.Pose 02 is the first raised pose with forward-pointing legs, so activation is 2/12s. Standing raise/hold poses measure 76px; the approved impact crouches to 72px and break extends to 92px including the raised arms. Runtime preserves native atlas sizes. Push distance is half the documented 28px body width and uses the existing wall/floor solver.
Browser proof shown in chat and retained in ignored
tmp/verification/41-front-guard.png,41-rear-hit.pngand41-tap-then-hold.png. The front capture is after the block/release and before the next unguarded charge; its persistent block counter and unchanged five cells identify the successful block.Short-tap correction
The pool integration check exposed a lost-tap case: Phaser's
Key.onUpclears the press flag, so a complete tap between rendered frames can leave only the release flag. Guard routing now reconstructs that tap when no down state was observed. A held guard release stays a release and does not restart an attack.The regression test routes that exact key state through the real guard and sweep models into a rover contact. Node 22 typecheck, 128 tests, build and docs pass. In the browser, two separate 5ms taps both connect and the fixture records two hits without console errors (
tmp/verification/41-retained-short-taps.png, shown in chat).