Skip to content

Ring the squid and the urchins, and stop the aim fit flattening - #5

Merged
averagenative merged 1 commit into
mainfrom
update-urls
Sep 1, 2026
Merged

averagenative merged 1 commit into
mainfrom
update-urls

Conversation

@averagenative

Copy link
Copy Markdown
Owner

Four fixes, all measured off the live game canvas over the DevTools protocol rather than off a screen recording. That distinction mattered: a recording of a session with the overlay on feeds the helper's own marks back into its detection, and the capture pipeline shifts the very saturations this is about. Both sent the first diagnosis the wrong way.

isSquid: the saturation floor came off the game's legend icon and was far too high for the sprite in the lane. The live sprite is three flat tones -- body rgb(237,204,240) at s.15, shading rgb(147,89,161) at s.45, outline rgb(49,24,60) at v.24 -- and s > .22 kept only the middle one. Those 63 pixels are scattered singles through the body they outline, so nothing connected: no component reached even a 21px floor against the 63px the count screen wanted, and the squid was never ringed at all. At s > .12 it comes back as one 173px, 22x24 blob, and a whole-canvas sweep at s > .10 turned up no new component anywhere.

isHazard: 315..360 does not wrap, and hsvAt returns hue 0 for pure red. The urchin's two strongest tones sit at exactly hue 0, so not one of the sprite's 456 pixels could ever match and AVOID never appeared. Now uses inH, the same wrapping helper isBobber has always used.

refitAim: below eight samples the fit dropped to a straight line, sound when the seed was itself a line and wrong once v6 made the seed a curve measured over 19 casts. It fires after three casts, and a live config held aim2 = 0 from six samples spanning only p .25-.625 -- a line that reads +2.2% of the lane at half power and -6.9% at full, so far targets demand more power than they need and you release early to land. The fallback now pins the curvature to the seed and fits only slope and offset; on those same six samples that beats the line on its own data, 1.34% mean residual against 1.52%, without the collapsed top end. A migration restores the seed for configs already holding aim2 = 0.

Blob search: the box stopped exactly at the lane ends, slicing a sprite in half as it swam past. Not the count floor -- at 99% of the lane the squid still had 84px against a floor of 63, but three surviving columns are not 1.2% of the canvas wide, so the width screen killed it. Padding by half a sprite holds the ring to the end of the water.

Also stop ringing AVOID on a hazard with a catch sitting on it. Landing there catches the fish, which is why the aim marker already lets the catch colour outrank the hazard colour; the ring argued with itself.

Four fixes, all measured off the live game canvas over the DevTools
protocol rather than off a screen recording. That distinction mattered:
a recording of a session with the overlay on feeds the helper's own
marks back into its detection, and the capture pipeline shifts the very
saturations this is about. Both sent the first diagnosis the wrong way.

isSquid: the saturation floor came off the game's legend icon and was
far too high for the sprite in the lane. The live sprite is three flat
tones -- body rgb(237,204,240) at s.15, shading rgb(147,89,161) at s.45,
outline rgb(49,24,60) at v.24 -- and s > .22 kept only the middle one.
Those 63 pixels are scattered singles through the body they outline, so
nothing connected: no component reached even a 21px floor against the
63px the count screen wanted, and the squid was never ringed at all. At
s > .12 it comes back as one 173px, 22x24 blob, and a whole-canvas sweep
at s > .10 turned up no new component anywhere.

isHazard: 315..360 does not wrap, and hsvAt returns hue 0 for pure red.
The urchin's two strongest tones sit at exactly hue 0, so not one of the
sprite's 456 pixels could ever match and AVOID never appeared. Now uses
inH, the same wrapping helper isBobber has always used.

refitAim: below eight samples the fit dropped to a straight line, sound
when the seed was itself a line and wrong once v6 made the seed a curve
measured over 19 casts. It fires after three casts, and a live config
held aim2 = 0 from six samples spanning only p .25-.625 -- a line that
reads +2.2% of the lane at half power and -6.9% at full, so far targets
demand more power than they need and you release early to land. The
fallback now pins the curvature to the seed and fits only slope and
offset; on those same six samples that beats the line on its own data,
1.34% mean residual against 1.52%, without the collapsed top end. A
migration restores the seed for configs already holding aim2 = 0.

Blob search: the box stopped exactly at the lane ends, slicing a sprite
in half as it swam past. Not the count floor -- at 99% of the lane the
squid still had 84px against a floor of 63, but three surviving columns
are not 1.2% of the canvas wide, so the width screen killed it. Padding
by half a sprite holds the ring to the end of the water.

Also stop ringing AVOID on a hazard with a catch sitting on it. Landing
there catches the fish, which is why the aim marker already lets the
catch colour outrank the hazard colour; the ring argued with itself.
@averagenative
averagenative merged commit 0ca8330 into main Sep 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant