proof of concept: press to join#688
Draft
briaguya0 wants to merge 7 commits intoHarbourMasters:mainfrom
Draft
Conversation
Kenix3/libultraship#972 changed the OpenGL backend to load a single combined default.shader.glsl instead of separate .fs and .vs files. The assets were never updated to match, breaking the OpenGL renderer. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Design doc for a press-to-join system that replaces manual controller assignment for multiplayer. Device identity never matters — only user actions drive assignment. Addresses the pain points from LUS #792/#793 simplification without reintroducing device persistence (#1058) or auto-distribution (#964). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configure needs -DCMAKE_BUILD_TYPE=Debug to avoid -Wincompatible-pointer-types errors in courses/*/course_offsets.c on GCC 15. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Call MultiplayerStart(gPlayerCount) when confirming game mode with 2+ players. Poll MultiplayerGetPortStatus each frame on PLAYER_ONE during character select, filling each port's cursor position as its controller joins. Block the "all selected" transition while any active port is still unjoined. MultiplayerStopPressToJoin on leave to map select, MultiplayerStartPressToJoin on return, MultiplayerStop on B back to main menu. Bump libultraship to include the input editor toggle, per-port gamepad defaults, and release-edge assignment. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Always render every active player's cursor at its default grid slot, and use gSPGrayscale to desaturate it until MultiplayerGetPortStatus returns joined. Keeps the colored frame and number badge visible but makes waiting slots clearly distinct from claimed ones. Single source of truth for "is this port joined" is now the port status bridge rather than piggybacking on grid selection == 0. Init always sets grid to i+1, the auto-assign block only plays the join sound on a status 0->1 transition, and the all-selected gate asks the bridge directly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Document the activation grace period, release-edge assignment, and StopMultiplayer ignore-list wipe. Rewrite Part 5 around MultiplayerGetPortStatus as single source of truth for joined state. Record actual hook locations in Part 6 and note that the MAIN_MENU_MODE_SELECT hook wasn't needed. Add Part 8 for the POC default-mappings-on-all-ports loop in ControlDeck::Init, and a "POC Limitations / Known Gaps" section listing the one-off "stolen input" report, keyboard release-edge gap, and analog-stick feel concern. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced Apr 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
includes:
see
docs/press-to-join.mdfor detailsscreencast-fixed.mp4