Skip to content

Let the urchin's spikes reach the merge that exists for them - #6

Merged
averagenative merged 1 commit into
mainfrom
fishing-hazard-merge
Sep 1, 2026
Merged

averagenative merged 1 commit into
mainfrom
fishing-hazard-merge

Conversation

@averagenative

Copy link
Copy Markdown
Owner

Follow-up to #5. That PR fixed the hazard colour window (it never wrapped past hue 0, where the urchin's strongest tones sit). Hazards still didn't appear, because the colour was only half the problem.

merge() exists because "a single sprite often breaks into a few blobs (the urchin's spikes especially)" — but the hazard pass screened raw blobs on size first, at 30 * px * px, throwing the spikes away before merge could reassemble them.

Measured live over the DevTools protocol, one frame, one pixel buffer — an urchin at 17% of the lane put 150 pixels through the colour test and shattered into fragments whose largest was 7px, every one under the 15.7 floor:

pre-merge floor result
15.7 (shipped) no hazards — matches the live probe
8 umbrella only
5 umbrella only
3 umbrella + urchin at 85px

So the pre-merge floor comes off. blobs() already refuses anything under 3px, the 110 * px * px screen still runs after the merge, and the urchin rebuilds to 85px against it.

That leaves the beach umbrella, red and white, merging to 67px and clearing the same post-merge floor. The padded search box cuts it off today — centre at -0.07 of the lane against a box reaching -0.05 — but two hundredths of a lane is a coincidence, not a margin, so hazards now get the lane-start screen the species pass has had all along for the sand mound at the same end.

node --check passes on both files; suite regenerated from the standalone script (1.5 → 1.6, fishing 2.2 → 2.3).

Not yet observed end-to-end: I have the pipeline measurement but haven't watched an AVOID ring actually appear on a live urchin — the round ended before I could.

The wrap fix in the last commit got the urchin's colours matching, and
the lane still reported zero hazards with one sitting on it. The colour
was only half of it.

merge() is there because "a single sprite often breaks into a few blobs
(the urchin's spikes especially)". But the hazard pass screened the raw
blobs on size FIRST, at 30*px*px, so the spikes were thrown away before
merge ever saw them -- leaving a merge that could only reassemble a
sprite intact enough not to need it.

Measured live over the DevTools protocol, one frame, one pixel buffer:
an urchin at 17% of the lane put 150 pixels through the colour test and
shattered into fragments whose LARGEST was 7px. Every one under the
30*px*px = 15.7 floor, so the pipeline emptied before the merge. Running
the real pipeline over that same buffer at a range of pre-merge floors:

  floor 15.7 (shipped)   no hazards        matches the live probe
  floor 8                umbrella only
  floor 5                umbrella only
  floor 3                umbrella + urchin at 85px

So the floor comes off entirely. blobs() already refuses anything under
3px, the 110*px*px screen still runs after the merge, and the urchin
rebuilds to 85px against it.

That leaves the beach umbrella, which is red and white, merges to 67px
of its own and clears the same post-merge floor. The padded search box
does cut it off today -- its centre sits at -0.07 of the lane against a
box reaching -0.05 -- but two hundredths of a lane is a coincidence, not
a margin, so hazards now get the lane-start screen the species pass has
had all along for the sand mound at the same end.
@averagenative
averagenative merged commit 8a59084 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