Skip to content

Rando: Mark seen world items and chests in the Check Tracker#6987

Open
meldridge wants to merge 3 commits into
HarbourMasters:developfrom
meldridge:check-tracker-seen-items
Open

Rando: Mark seen world items and chests in the Check Tracker#6987
meldridge wants to merge 3 commits into
HarbourMasters:developfrom
meldridge:check-tracker-seen-items

Conversation

@meldridge

@meldridge meldridge commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #6946 (now merged) and, to #6906 and #6934: this covers the other half of Issue #3762. Where #6946 marks checks from explicit gossip stone hints, this marks them from what the player actually sees in the world.

A shuffled world item marks its check as seen once you've "seen it": freestanding items, skulltula tokens, heart pieces and containers, key and heart drops, etc. Being drawn alone isn't enough to count as "seen" because the cull volume is larger than the view frustum (larger still with Disable Draw Distance) and ignores walls. So an item only counts after several consecutive frames drawn inside the real frustum, close enough to read, and unoccluded on a ray from the camera. Marking is gated on the drawn item faithfully matching the placed one. Unobtainable items draw as a blue rupee and are skipped, and ice trap disguises match on both sides so they record as their cover item, exactly as the tracker already shows them. Mysterious Shuffle disables it entirely, since the ? swap happens only at draw time.

The maximum range at which items will mark as "seen" (kSeenMaxDepth) is set to 1200. I tuned this based on the PoH on top of Dodongo's Cavern as the player is walking up the Death Mountain Trail, and also the Blue Tektite PoH in the Hyrule Field Grotto. This might need further tweaks with more playtesting on systems with lower resolutions.

Chests get the same feature but at the category level. With Chest Size And Texture Match Contents on, a chest's appearance already gives away its item category as soon as the player sees it, so recording that category is spoiler-safe. A new RCSHOW_CATEGORY status sits between RCSHOW_UNCHECKED and RCSHOW_SEEN_OR_HINTED, and its label is recomputed on display so it follows the chest's dynamic downgrades (bombchus, bottle, skeleton key). If you're a completionist like me and end up opening every junk chest in grottos because you don't want to forget which checks you've done later in a rando, this is a huge quality of life improvement.

One limitation is that occlusion is a single ray from the camera eye to the item, so a see-through-but-solid surface (webs in Deku Tree, the cage in Impa's house) reads as blocking. The same is true for the freestanding PoH at Lon Lon Ranch (seen through the crawlspace). I didn't want to risk spoilers so I've left these as gaps for now rather than complicate the tests. Suggestions welcome for how to improve these.

Screenshots:

IMG_2405 IMG_2404 IMG_2407 IMG_2406

Build Artifacts

meldridge and others added 2 commits July 25, 2026 11:16
Shuffled world items now mark their check as seen once the player has
demonstrably seen the item on screen: freestanding items, gold skulltula
token drops, heart pieces, small key drops, heart containers, Ruto's
letter, the lake fire arrow, the bombchu bowling prizes, and the Lost
Woods target reward. Being drawn is not proof of sight: the cull volume
is larger than the view frustum (and enlarged further by Disable Draw
Distance), and culling ignores walls entirely. An item counts as seen
only when, for several consecutive game frames, it was drawn inside the
real frustum, close enough to render at a recognizable size, and
unoccluded on a ray from the camera eye.

Eligible actors are exactly those whose randomizer handlers stamp an item
entry while swapping the draw function to render it, so what was on
screen is known. Marking is gated on that stamped entry faithfully
representing the placed item: unobtainable items deliberately draw as a
blue rupee, and recording those would reveal an item the player never
saw. Ice trap disguises appear identically on both sides of that
comparison, so a seen disguise records as its cover item, matching what
the tracker already displays for seen checks. The treasure chest game
rupees are excluded because their randomized draw renders through the
Lens of Truth, so being drawn does not mean the player saw them.

Mysterious Shuffle disables the feature entirely: its "?" model swap
happens only in the draw call and is never written back to the actor, so
the stamped entry a fidelity check would compare against is still the
true item, not what was shown. Most check types also have no display-side
mystery gate, so a false match here would print a name the player only
ever saw disguised as "?".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
When Chest Size And Texture Match Contents is on, a chest reveals its item
category through its size and texture, so seeing one already tells the
player the category. Mark that check with a new RCSHOW_CATEGORY status
showing the category name -- not the item, which the chest never revealed.
It is the lowest knowledge tier: a later item hint promotes it to seen, and
opening the chest to collected.

The chest scan rides the world-item per-frame handler and its visibility
gauntlet. The mystery gate moves to the item path only: a mystery-shuffled
item draws as "?" so seeing it reveals nothing, but a chest still shows its
category under mystery, so that path marks regardless. The marking gate
mirrors EnBox_UpdateTexture exactly, so the tracker only marks when the
chest is actually drawn with a category-differentiated appearance. The
category is recomputed at display time so it tracks the chest's dynamic
downgrades (bombchus/bottle/skeleton key).

The seven category labels are provided by a new ItemCategoryName() in
item_category_adj (singular, as each names one check's contents). The
previously-stubbed Color_Hinted_* CVars and "Hinted (WIP)" colour picker
are wired up for the new status.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@serprex

serprex commented Jul 25, 2026

Copy link
Copy Markdown
Member

I think we may want to require being a bit closer to check before marking. Other hard to see checks which we shouldn't mark: GV waterfall HP, DMC spire HP in smoke, freestanding rupees in KF bushes

Most shuffle features route their items through EnItem00, so any new one
would inherit seen-marking without review. Gate the world-item path on an
explicit set of check types instead: standard checks, Skulltula tokens and
boss rewards. Freestanding rupees and hearts are excluded - they sit inside
bushes and grass, whose actor collision the occlusion ray cannot see, so
they marked while hidden from the player.

Also drop the awarded Bombchu Bowling prizes and the Lost Woods target
prize, keeping only the two prizes displayed on the bowling counter. The
awarded variants fly straight to Link and are collected immediately, so
marking them as seen conveys nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@meldridge

meldridge commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

Hm. It already excludes RCTYPE_FREESTANDING, but it's opt-out (correction, no it doesn't - sorry). I'll change it to an allowlist, so the only checks which mark are RCTYPE_STANDARD, RCTYPE_SKULL_TOKEN, and RCTYPE_BOSS_HEART_OR_OTHER_REWARD. Also, the chests. That should avoid any spoiler paths with the freestanding items in bushes.

From my testing GV waterfall HP doesn't flag due to occlusion from the water, but I'll double-check this. As for DMC I think this one should mark, it's trivial to see what's there despite the smoke, and it's a check I always make as soon as I visit DMC.

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.

2 participants