From 3c69d426e27812e840854e0c452865173f7d5f0e Mon Sep 17 00:00:00 2001 From: Christian Lizell Date: Fri, 23 Oct 2026 16:26:57 +0200 Subject: [PATCH] Allow eight pilots in the space easter egg --- _includes/layout.html | 2 +- assets/space-egg/game.js | 6 +++--- assets/space-egg/multiplayer.js | 4 ++-- assets/space-egg/trigger.js | 2 +- assets/space-egg/view.js | 2 +- scripts/space-browser-multiplayer.py | 2 +- scripts/space-transport.test.mjs | 20 +++++++++++--------- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/_includes/layout.html b/_includes/layout.html index 537d19a..afc4fef 100644 --- a/_includes/layout.html +++ b/_includes/layout.html @@ -30,6 +30,6 @@ {% include "header.html" %} {{ content }} {% include "footer.html" %} - + diff --git a/assets/space-egg/game.js b/assets/space-egg/game.js index 0445298..5e57472 100644 --- a/assets/space-egg/game.js +++ b/assets/space-egg/game.js @@ -1,5 +1,5 @@ import { createRenderer } from './rendering.js?v=14'; -import { gameMarkup, gameTheme, waitForStyles, adaptControls } from './view.js?v=15'; +import { gameMarkup, gameTheme, waitForStyles, adaptControls } from './view.js?v=18'; import { matchesWorld } from './protocol.js?v=14'; import { createOrdnance, ORDNANCE, blastTouches } from './ordnance.js?v=14'; import { targetStrength, damageEdge } from './targets.js?v=14'; @@ -9,7 +9,7 @@ import { POWERUPS, damageHull, expandedRect, effectSeconds, advanceScroll, shipC import { hitsRect, firstHit } from './physics.js?v=14'; import { createSound } from './sound.js?v=17'; import { internalDestination } from './navigation.js?v=14'; -import { createMultiplayer, MAX_PLAYERS, pilotName } from './multiplayer.js?v=15'; +import { createMultiplayer, MAX_PLAYERS, pilotName } from './multiplayer.js?v=18'; import { invitationLink, invitationPeer } from './invitation.js?v=15'; import { hitReward, pageReward } from './scoring.js?v=14'; @@ -115,7 +115,7 @@ export async function openGame(onClose, invitedPeerId = null, signal) { const { drawShip, drawPilotName, drawOrdnance } = createRenderer(context, reducedMotion); const launchButton = find('.launch'); const scoreOutput = find('.score'); - const colors = ['#ff6600', '#56dfff', '#ee91ff', '#b2ef5e']; + const colors = ['#ff6600', '#56dfff', '#ee91ff', '#b2ef5e', '#ffd65a', '#ff718d', '#a7a0ff', '#72f0cf']; function playerColor(id = network?.playerId) { const index = network?.playerIds.indexOf(id) ?? -1; return colors[Math.max(0, index) % colors.length]; diff --git a/assets/space-egg/multiplayer.js b/assets/space-egg/multiplayer.js index 7d9f24c..2129c5f 100644 --- a/assets/space-egg/multiplayer.js +++ b/assets/space-egg/multiplayer.js @@ -29,13 +29,13 @@ function loadPeerLibrary() { return libraryPromise; } -export const MAX_PLAYERS = 4; +export const MAX_PLAYERS = 8; export function pilotName(value) { if (typeof value !== 'string') return ''; return Array.from(value.replace(/[\u0000-\u001f\u007f\u202a-\u202e\u2066-\u2069]/g, '').replace(/\s+/g, ' ').trim()).slice(0, 20).join(''); } -const protocol = 9; +const protocol = 10; // Star topology: the host owns scoring and relays guests' visual updates. export function createMultiplayer({ onMessage, onConnected, onStatus, onPlayers = () => {}, loadPeer = loadPeerLibrary }) { diff --git a/assets/space-egg/trigger.js b/assets/space-egg/trigger.js index 23fa5df..70a3e48 100644 --- a/assets/space-egg/trigger.js +++ b/assets/space-egg/trigger.js @@ -16,7 +16,7 @@ async function reveal(invitedPeerId = null) { const cancel = event => { if (event.key === 'Escape') controller.abort(); }; window.addEventListener('keydown', cancel); try { - const { openGame } = await import('./game.js?v=17'); + const { openGame } = await import('./game.js?v=18'); controller.signal.throwIfAborted(); await openGame(() => { active = false; }, invitedPeerId, controller.signal); } catch (error) { diff --git a/assets/space-egg/view.js b/assets/space-egg/view.js index 376dabc..3b33a21 100644 --- a/assets/space-egg/view.js +++ b/assets/space-egg/view.js @@ -29,7 +29,7 @@ export function gameMarkup() {