Replace uAxisThreshold with appropriate constant for octagon clamping - #83
Merged
Merged
Conversation
Contributor
|
LGTM! |
NEstelami
approved these changes
Mar 29, 2022
Kenix3
approved these changes
Mar 30, 2022
Kenix3
pushed a commit
to Kenix3/Shipwright
that referenced
this pull request
Oct 19, 2022
Malkierian
pushed a commit
to Malkierian/Shipwright
that referenced
this pull request
Nov 20, 2023
Malkierian
pushed a commit
to Malkierian/Shipwright
that referenced
this pull request
Nov 20, 2023
garrettjoecox
added a commit
to Tawling/Shipwright
that referenced
this pull request
Feb 21, 2024
GameInteractor hooks for adult and child shooting gallery
Patrick12115
pushed a commit
to Patrick12115/Shipwright
that referenced
this pull request
Nov 8, 2025
Made logic setting glitchless and added Tressanity reading from slot data
SomeoneIsWorking
added a commit
to SomeoneIsWorking/Shipwright
that referenced
this pull request
Jun 21, 2026
…ion (HarbourMasters#70/HarbourMasters#83) The 3d3 Link transient cluster (HarbourMasters#70 roll, HarbourMasters#83 dialog-arms) was BLOCKED on reaching the failing state headlessly: natural triggers are context-gated (roll needs a moving stick; talk needs an NPC's talk-offer accepted via an A edge), which btnhold/walkhold can't reliably hit. Per the project rule "every bugfix STARTS by proving the tooling can reach the failing state," build the state-injection primitive first. New z_player.c hooks (mirror the existing SoH3D_PlayerForceClimb/Teleport pattern): - SoH3D_PlayerForceRoll: Player_SetupRoll -> real forward dodge-roll, no NPC needed. - SoH3D_PlayerForceTalk: pick nearest live ACTORCAT_NPC within range, wire talkActor/ focusActor/textId, Player_SetupTalk -> real talk action (holds in talk_free_wait headlessly since no input advances the textbox). Returns the NPC's actor id. REPL: `linkstate roll|talk`. Generic + reusable for any future player-state repro. Finding with the new tooling (Kokiri Forest, 3d3 linksrc=3ds, vs Saria 0x146): neither bug reproduces as broken — the roll plays a faithful forward somersault matching N64 (standstill + run-roll), and the live talk blend (entry transition + held) shows natural gesturing arms, extending the prior "static poses correct" finding to the LIVE blend. Evidence posted to HarbourMasters#70/HarbourMasters#83; cards left in todo pending user re-confirm/pinpoint. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qR9VBpgoWRQCNew29Wooe
SomeoneIsWorking
added a commit
to SomeoneIsWorking/Shipwright
that referenced
this pull request
Jun 21, 2026
…asters#86) Per "trace via animation state, not eyeballed pixels": dump Link's live anim state so a transient is read as a numeric discontinuity. Reports the resolved base+upper CSAB, curFrame/animLength/playSpeed/morphWeight, upperLimbRot (the literal upper-torso euler), headLimbRot.y, shape.rot.y/yaw/focus.rot.y, and speedXZ. Driven under freeze/step. HarbourMasters#86 finding (quantitative, Kokiri, 3d3, freeze/step): the walk-stop transition is CLEAN across straight / full-run / angled-turning stops: - CSAB sequence is proper: nml_run_free (speed-driven loco) -> nml_walk_endR_free settle (curFrame 0->10) -> nml_wait_free idle. - shapeY/yaw ramp smoothly into the walk direction at the START then HOLD constant through the stop -- no yaw snap. upperLimbRot.y stays 0; focusY shows no stop-time discontinuity. - No ~90deg torso snap reproduces. Matches HarbourMasters#70/HarbourMasters#83: the 3d3 transient cluster appears resolved by the prior HarbourMasters#7/HarbourMasters#8 work. - Lone latent nit (NOT the cause): walk_end settles match the isLoco "walk" strstr so they are speed-driven for 1 frame at the stop -- but only ever at curFrame=0, so visually identical to the one-shot path. Left unchanged (no observable effect to fix). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qR9VBpgoWRQCNew29Wooe
SomeoneIsWorking
added a commit
to SomeoneIsWorking/Shipwright
that referenced
this pull request
Jun 21, 2026
… (anim cluster)
"Better tooling to reveal what can go wrong with different animations" (user). Instead of
eyeballing one transition at a time, this systematically measures every transition's pose
discontinuity and flags hard-cuts automatically.
Mechanism: the 3d3 named-CSAB path picks ONE csab at a phase and never blends morphs, so any
anim-name change / phase-lock jump HARD-CUTS the pose -- a per-bone rotation that jumps far
beyond what continuous playback produces. New pieces:
- soh3d_model.cpp SoH3D_PoseDiscontinuity(modelId,&bone): largest per-bone rotation jump (deg)
between this frame's cached pose (lastSkin) and the previous, orthonormalizing each bone's 3x3
(removes skin scale) and measuring the relative angle. SoH3D_PoseScanReset baselines it.
- soh3d_link.cpp per-frame LOGGER sampled in the DRAW path (poseScanRecord): records each drawn
player frame's {maxJump,bone,csab,curFrame}. SoH3D_LinkModelId exposes the body modelId.
- REPL `posescan on|off|dump` (CSV log); `linkstate idle` safe reset out of forced talk/roll
(the forced-talk CLOSING path null-derefs talkActor since the NPC never did the handshake --
reset by clearing talk flags + Message_CloseTextbox + standing-idle, NOT by mashing A).
- tools/soh3d_anim_qa.py: drives idle / walk-stop / run-stop / turn / roll / talk / sword-draw
through the real action machine, oversamples dumps (headless renders on demand; freeze caches),
de-dups redraws, and reports max jump + bone + csab + a sparkline, flagging isolated spikes.
Metric VALIDATED: scrubbing nml_wait_free frame-by-frame (animframe 0..N) yields a smooth
~3deg/frame series (no math artifacts), so spikes in LIVE playback are real transition hard-cuts.
Finding: idle (bone15, nml_wait_free) 110deg, talk (bone13) 136deg, run-start (bone14,
nml_run_free) 128deg all show isolated 1-frame pops; roll/sword show SUSTAINED high motion
(correctly not flagged). The pops are the morph-blindness of the 3d3 path -- the measurable root
mechanism behind the user-reported transient cluster (HarbourMasters#70/HarbourMasters#83/HarbourMasters#86 family). Fixing it = blend the
3d3 CSAB across anim transitions (honor morphWeight) instead of restarting at frame 0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qR9VBpgoWRQCNew29Wooe
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.
In the "bound diagonals to an octagonal range" code, uAxisThreshold is incorrect. The value should be 16, which is the difference between the cardinal maximum of 85 of the diagonal maximum of 69. edgex and edgey are simply making use of equations for a line.