A free multiplayer game — play it in your browser, no install. Authoritative server, client prediction and delta snapshots for 2D side-scrolling multiplayer games
Vote and save it — free account with email or sign in with GitHub
Made this, @vtxe02023274? See how many people played it → or use email
📅 Three new games every day, no account needed · Play today’s three →
Best with a keyboard. Controls: Space
GitHub may ask you to sign in, then to let VibeCruiser “Verify your GitHub identity” and “Act on your behalf”. We only read your profile and email, and never post anything.
No account needed to save ♥ or react 🔥: they’re under the game. Or vote with email.
Open the live demo Source on GitHub同一份物理:src/shared/physics.ts 的 step(map, state, buttons) 伺服器和客戶端共用,固定 30 tick、不讀時間也不用亂數。狀態每步都轉成 f32,跟快照的精度一樣,所以客戶端從快照重播會跟伺服器算出完全相同的位置。測試在 6 tick 延遲下跑 600 tick,修正量是 0。
伺服器只信輸入:客戶端送的是按鍵,不是座標。一個輸入只走一步,佇列最多存 8 個、每 tick 平均只消耗 1 個,連發輸入也跑不快。
快照省頻寬:每 2 tick 送一次,帶上這個客戶端最後被處理的輸入序號。完整快照每個玩家 29 bytes,平常送的是跟上一個快照的差量,站著不動的玩家只要 4 bytes,走路時通常只多 x 的 4 bytes。
延遲補償:攻擊者看到的別人是過去的位置(網路延遲+內插延遲),所以客戶端每個輸入都附上「畫面上別人停在哪個 tick」。伺服器保留每個玩家最近 15 tick 的位置,判定命中時把目標倒回那個 tick 再比對攻擊範圍。最多只倒回 500 ms,延遲太高的玩家不能打到太久以前的位置。
設計上的取捨寫在 docs/design.md。封包格式定義在 protocol.yaml,欄位表見 docs/protocol.md(用 pktspec 產生)。
Built something like this? Submit your vibe — free account, takes a minute. How listing works.
Claim it: create a free account, then press CLAIM THIS in the cruiser. Put the badge below in your README or on your demo page first; that link is how we know it's yours.
Your project is on the cruise, loaded live from your own site. Put the badge in your README or on the demo page: it shows your live play count, it links back to this page, and everyone who lands here is one click from running the real thing.