A fantastic multiplayer action browser game http://chuck-game.tumblr.com
Find a file
Jeena a0481ed867 Route gameCommand traffic through WebRTC unreliable DataChannel
Socket.IO (TCP) holds back later packets while it retransmits a lost
one, which stalls worldUpdate delivery on lossy long-distance links —
exactly the pattern game state suffers worst from. WebRTC DataChannels
in unreliable mode (ordered:false, maxRetransmits:0) drop late packets
instead of queueing them, which is what we want for high-frequency
state sync.

Adds a per-user WebRTCTransport on top of the existing Socket.IO
connection. Socket.IO stays in charge of bootstrap, signaling
(SDP/ICE exchange), and control messages — only gameCommand payloads
get routed onto the unreliable channel once it's open. If WebRTC
fails to negotiate, gameCommand transparently falls back to
Socket.IO, so the game keeps working unchanged.

A new StatsLogger writes per-session JSONL events (session_start,
webrtc_ready with negotiation time, per-second stats with transport,
RTT samples, recv/send rates, seq gaps) so we can compare real-world
runs (e.g. Germany server <-> Korea client) instead of guessing.
URL flag ?webrtc=0 forces fallback for A/B testing.

scripts/webrtc-browser-test.js spins up a headless Chromium against
a freshly-started server and asserts the unreliable channel opens
and gameCommand traffic actually rides it.
2026-05-11 00:38:18 +00:00
app Route gameCommand traffic through WebRTC unreliable DataChannel 2026-05-11 00:38:18 +00:00
config implemented rubedoll level item (not after dying yet) 2015-05-11 11:10:30 +02:00
lab Makes singleton variable name of NotificationCenter lowercase 2016-10-10 22:11:55 +02:00
poc-webrtc Add standalone POC comparing WebRTC DataChannel vs Socket.IO 2026-05-11 00:38:01 +00:00
scripts Route gameCommand traffic through WebRTC unreliable DataChannel 2026-05-11 00:38:18 +00:00
snippets added semicolon because of jslint 2015-03-15 13:39:51 +01:00
static 2025 update! 2025-07-15 20:05:12 +02:00
.floo changed modes 2014-01-12 16:59:16 +01:00
.gitignore Replace cheat-detection teleport with server reconciliation 2026-05-11 00:37:42 +00:00
channel.js implemented rubedoll level item (not after dying yet) 2015-05-11 11:10:30 +02:00
client.js 2025 update! 2025-07-15 20:05:12 +02:00
package-lock.json Route gameCommand traffic through WebRTC unreliable DataChannel 2026-05-11 00:38:18 +00:00
package.json Route gameCommand traffic through WebRTC unreliable DataChannel 2026-05-11 00:38:18 +00:00
README.md adds video image 2015-06-28 17:06:52 +02:00
server.js adds warning too many recordings. fixes #132 2015-06-22 11:58:13 +02:00

chuck.js

Physical JavaScript Action Browser Multiplayer Game - it will be awesome!

Follow the development at http://chuck-game.tumblr.com/

How to run:

  • git clone https://github.com/logsol/chuck.js.git
  • cd chuck.js
  • npm install
  • node server.js [port] [log level]

Open in browser http://localhost:1234

This game is licensed under the GPLv3 licence http://www.gnu.org/licenses/gpl-3.0.html