Repository navigation
[12/16] feat: add alternating chair sweeps and contact hits - #137
Merged
Merged
Conversation
Alternate the approved side sweeps through their recoil poses and expose short hitboxes only at the inspected contact frames. Keep one hit attempt per target and one buffered return swing. Freeze stage actors for 60 milliseconds on an accepted strike, play the hit sound and spark, and let targets apply knockback. Add a development rover fixture and preserve very short keyboard taps through release flags.
|
@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. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Carry human-merged lane A changes upward without rewriting published commits.
Record the contact plan and native atlas measurements in the design. Limit the contact envelope to 8–33 pixels in front of the hero and keep the rover fixture within both alternating sweeps after knockback. Add a baseline comparison and regression coverage for exact bounds on both sides. Typecheck, 99 tests, build and documentation checks pass; browser strikes connect in both directions.
7 tasks done
This was referenced Oct 23, 2026
7 of 11 tasks
9 of 12 tasks
10 of 12 tasks
Carry human-merged lane A changes upward without rewriting published commits.
arudaev
marked this pull request as ready for review
October 24, 2026 01:34
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
Tap J or gamepad X/Square for alternating eight-frame chair sweeps, each ending in two recoil frames. Only the inspected A04/B03 contact poses enable the short hitbox, with one attempt per target per swing. Accepted hits add a 60ms stage hit-stop, a small spark, hit sound and target knockback. A single queued tap keeps the return swing responsive; damage, death and climbing cancel it. The game uses the approved atlas without scaling its poses.
Issue
Closes #39
Refs #50
Stack
[12/16] feat: add alternating chair sweeps and contact hits #137 [12/12] feat: add alternating chair sweeps and contact hits ← this PR
[11/16] feat: add health damage and checkpoint respawn #135 [11/12] feat: add health damage and checkpoint respawn
[10/16] feat: switch locomotion through authored bridge clips #132 [10/12] feat: switch locomotion through authored bridge clips
[9/16] feat: follow the hero with directional camera lead #131 [9/12] feat: follow the hero with directional camera lead
[8/16] feat: add one-way decks and ladder climbing #126 [8/12] feat: add one-way decks and ladder climbing
[7/16] feat: follow ground slopes and slide downhill #125 [7/12] feat: follow ground slopes and slide downhill
[6/16] feat: add variable jumps and landing poses #123 [6/12] feat: add variable jumps and landing poses
[5/16] feat: add weighted walking and running #122 [5/12] feat: add weighted walking and running
[4/16] feat: load authored collision with a debug overlay #120 [4/12] feat: load authored collision with a debug overlay
[3/16] feat: load exported stages and sprite atlases #116 [3/12] feat: load exported stages and sprite atlases
[2/16] ci: check the game with node 22 on pull requests #111 [2/12] ci: check the game with node 22 on pull requests
[1/4] chore(shared): scaffold the phaser game runtime #94 [1/12] chore(shared): scaffold the phaser game runtime — merged
Base:
feature/42-health-and-respawn. Human merges bottom up; retarget the next PR to main and merge origin/main into every open branch, never rebase.Acceptance criteria
Alternate sweep A/B and finish each with the two-frame recoil
Contact-only hitboxes; 60ms hit-stop, spark and target knockback
Light impact with the supplied recoil poses
Verification
Node 22:
npm run typecheck,npm test(99 tests),npm run build; includes main integration at e8577abpy -3.13 scripts/check_docs.py— 703 filesgit diff --cached --checkTests cover exact pose windows, eight-plus-two timing, queued alternation, both directions, one attempt per target and exactly 60ms pause across partial frames
Browser: stationary rover test target records A then B hits, followed by a third hit from the opposite side; target is pushed in the strike direction; F2 shows the contact box and hit-stop; no console errors
Browser: a 5ms keyboard tap is retained through Phaser's release flag
Physical gamepad and Vercel preview: Vatsal2005 needs Vercel project access to create deployments
Integration and art timing
Stage.chair.register(target)accepts damageable actors; real rover AI follows in #45.Stage.playerActorexposes the player andStage.chair.enabledgates the weapon for lane A's pickup beat in #50. Engine testing enables the chair in Rusty Creek and leaves it disabled in the Garden.The approved B contact pose points the opposite way from A. Runtime mirrors B relative to the locked strike direction so both hit the frontal target; recoil uses its own right-facing pose. Contact indices were checked against the actual exported frames. A development-only
combat-testquery adds the stationary rover fixture and hit counter; it never appears in production.Reference comparison
Plan and measurements: docs/02 — chair contact.
Reproduce:
python scripts/compare.py lineup chair-side:sweep-a-04 chair-side:sweep-b-03 enemy-rover:idle-00 --out game/verification/39-chair-contact-compare.png.The reference comparison found the original 50px envelope too long. Contact now reaches 8–33px forward, 23–58px above the foot pivot. The fixture uses its measured 31×25px bounds, starting 38.5px ahead so the second sweep still overlaps after 8px of fixture knockback. Exact bounds, both directions and rejection beyond reach are tested.
Browser after correction: two stationary A/B strikes, then a third left-facing strike connect; the return contact shows 60ms hit-stop. A 5ms tap remains responsive. Screenshots shown in chat, with originals in ignored
tmp/verification/39-measured-two-hits.pngand39-measured-left-hit.png. No browser console errors. The comparison is committed as review evidence; source art is unchanged.