Skip to content

Seamless co-op: Dream Island trip, buried spots and memory pieces in a story-area session - #636

Merged
featureJosh merged 1 commit into
mainfrom
fix/coop-beta2-reports
Nov 13, 2026
Merged

featureJosh merged 1 commit into
mainfrom
fix/coop-beta2-reports

Conversation

@featureJosh

Copy link
Copy Markdown
Collaborator

What it changes

Three player reports from the seamless co-op Testing build (0.13.0-beta.2).

1. Dream Island trip from a story area. Asking Drifloon for a Dream Island in a session left everyone in the same area, renamed "Dream Island", with an all-blue map, an island arrival structure and lit caves. The trip is the game's own group feature in Palette Town and on Cloud Islands (poll, then everyone who said yes travels); the game never starts it from a story area online, and the island code only knows the two towns. With story areas open to a session, Drifloon's talk started it there: the stage switched to the Dream Island while the area's terrain stayed loaded.
Now (core/pkp_link_trips): while the player is online in a story area (stages 1-10), the poll's result reads "this player stays", which is the game's own path for a player who voted no, and a request for the island that still arrives from another player is dropped. A message on screen says the trip is not available there. Palette Town and Cloud Islands keep the trip.

2. Gold glow left behind after a visitor breaks the block. The glow is a story dig spot: a buried item, made from the host's own save (a closed story quest unlocks it, a "found" bit ends it). The game keeps these on the host only and ends one in a single place, the host's own change of that block. When another player removed the block, the glow was redrawn over the empty cell every frame and the item was never given.
Now (core/pkp_link_digspots): on the host of a session, a spot whose block was natural terrain and has been gone for 30 frames is ended with the game's own function, as if the host had dug it up: the item drops at the spot, the found bit is set, the glow goes.

3. Unique collectibles a visitor takes. The host's handler claims a memory piece for the visitor it gives it to and never frees the claim, so the host could not pick that piece up until the world was loaded again. The claim is now freed (core/pkp_story_pickups, with the game's own call).

Pokémon traces themselves need no change: they are a per-player list on each PC, nothing about them is sent to other players or saved in the world, so investigating one cannot take it from another player. The changelog's known-problems list now says which things differ per player by design (story markers, story talks, buried spots, traces).

core/pkp_site_check.h is the hook-site check (expected instruction word, midhook site lifted) the two new modules share.

For players

  • CHANGELOG.md ## Unreleased has an entry (Before / Now / Still not), or this change is not player-facing
  • Needs Set up again / Finish update: Finish update, once: six new hook sites in main.sites, so the game code is built again
  • Rebuilds shaders: no

Pros

  • The Dream Island block uses the game's own "stays" path instead of a new refusal, and leaves the vanilla trip in the towns alone
  • The dig-spot fix does not depend on which network route the other player's block change took: it looks at the block itself and calls the game's own end-of-spot code
  • All three only act in a Link Play session with link_interact_everywhere or link_story_coop on; offline play is untouched

Cons

  • In a story area's session the poll for the trip still opens and counts down before the "stays" result; only the trip itself is stopped
  • A buried spot's item goes to the host (it is the host's story), dropped in the world where a visitor could pick it up
  • A world already left in the broken "Dream Island" state by the earlier build is not repaired by this
  • pkp_story_guard, pkp_story_hold, pkp_story_pickups and pkp_linkplay still carry their own copies of the site check; moving them to pkp_site_check.h is a follow-up

…pieces stay the host's

Three reports from the seamless co-op Testing build.

- pkp_link_trips: Drifloon's Dream Island trip is the game's group feature of
  Palette Town and the Cloud Islands. Started from a story area's session it
  renamed the session to the Dream Island while the area's terrain stayed
  loaded. In a story area online the poll's result now reads "stays" for the
  player (the game's own path) and a request for the island is dropped.
- pkp_link_digspots: a story dig spot (gold glow, buried item) is made from
  the host's own save and ended only by the host's own change of that block.
  When another player removes the block the spot is now ended with the game's
  own code: the item drops at the spot for the host and the glow goes.
- pkp_story_pickups: the host handler claims a memory piece for the visitor it
  gives it to and never frees the claim, so the host could not take the piece
  until its world was loaded again. The claim is freed.

pkp_site_check.h holds the hook-site check the new modules share.
Six new hook sites in main.sites: the game code is built again once.
@featureJosh
featureJosh merged commit b098d31 into main Nov 13, 2026
1 check passed
@featureJosh
featureJosh deleted the fix/coop-beta2-reports branch November 13, 2026 17:02
@featureJosh featureJosh mentioned this pull request Nov 13, 2026
3 tasks done
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