mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
8f266efe27
Seat 1 (P2) can bring its LOCAL slot-1 card to a match: it uploads the card to the host at launch over the new recomp-net MEMCARD op, the host installs it as the match's slot-2 card, and the usual card broadcast carries it to everyone. The host's real slot-2 file is rebound to netplay/guest_card2.mcd for the session and restored on shutdown; guests already sandbox both slots. Lobby side: a per-seat memcard_offer on set_ready (has_card, share), a host allow flag in match_caps, and guest_memcard_active settled ONCE by the host at start and shipped with the launch, so a toggle racing the start cannot split the room. LAN carries the same over MOTK5 UPDATE / MEMCARD / JOIN tail / a trailing START line. PSX_NET_GUEST_MEMCARD=1 for CLI sessions; a host waiting on a card that never comes stalls at a named phase (mc_guest_wait), not a silent "ok". Two latent guest-sandbox bugs fixed on the way: a disabled slot 2 had no bound path, so a host blob carrying a card for it failed to import and the guest stalled forever; and leaving the sandbox re-bound a disabled slot to the sandbox file. Both slots are now bound in the sandbox and restored per slot (memcard_rebind_path, which can also unbind). Lobby chat: the client keeps a ring fed by the server's echo (op:chat); LAN rooms relay through the host (MOTK5 CHATREQ guest->host, MOTK5 CHAT host->everyone). Wired to the launcher's chat_send/chat_count/chat_get. Also carries the spectator-seat work that was in the tree alongside this (spectator seats in the lobby client, spectator_wire_slot in the launch). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V1dT6h1ZshMVUUVKTPxsCD