| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
Ranked online play for NEONGLOBS (a Globulos tribute): matchmaking, server-authoritative physics, three bot levels, ELO ratings, and a leaderboard — as a #206 loader plugin.
plugins: [{ id: 'globs', module: 'globs/plugin.js', prefix: '/globs' }]NEONGLOBS rounds are simultaneous secret commitments resolved by a deterministic, fixed-timestep sim — a round is a pure function of its commitments. So the server relays one small message per round, re-runs the same sim as the single authority, and never streams a tick. ./sim.js is vendored from the game repo, where tools/parity.sh proves node and headless Chromium produce bit-identical match results for the same seeds (that took work — see findings).
api.auth.getAgent on the WS upgrade (node clients send Authorization); browsers use POST {prefix}/session — any credential getAgent understands (bearer, DPoP, NIP-98) authenticates a real HTTP request and buys a 24h HMAC macaroon-lite session (pattern #4; secret in pluginDir) that the socket presents as hello{session}. This is how xlogin users (Nostr extension / guest key / Solid OIDC) get onto the leaderboard. A raw pod bearer still works in-band as hello{token}. Guests play unrated. ELO: start 1200, K=32 vs humans, K=16 vs bots; bots are fixed anchors (EASY 800 / MEDIUM 1100 / HARD 1400) that never move. Both deltas are computed from pre-match ratings before either is applied. Disconnect mid-match forfeits. State: elo.json (atomic tmp+rename) and matches.jsonl in pluginDir.
Maps: the full ranked-match loop, bots, leaderboard, forfeits, keepalive pings. Doesn't: spectators, reconnection grace (disconnect = forfeit), multiple tables (soccer only, like the game), and rating decay — all protocol-compatible extensions, none blocked by the api.
| Back | FazBrowse Home | New Git URL |