How pattssun/openwii works
OpenWii turns motion-capable phones into networked game controllers: players scan a QR code, connect over the local network, choose a browser game, and steer or act with motion and buttons. The server relays controller packets to the browser; shared core modules decode motion, track pointers, and provide game-facing input. Games combine input with game-specific logic and rendering. The README and sampled imports establish the central relay and several game integrations; Mario Kart’s detailed runtime wiring is unsampled, so its internal links are shown as unverified.
Main entry points: channel.js Input channel · menu.js Game launcher · server.js LAN server · game.js Mario Kart game
Components 29
Pairing and relay
- LAN server
server.js - Game launcher
public/menu.js
Motion engine
- Input channel
core/channel.js - Socket link
core/net.js - Motion pointer
core/pointer.js - Orientation decoder
core/orientation.js - Device calibration
core/calibration.js - Swing detector
core/gesture.js - Game audio
core/audio.js
Browser games
- Fruit Ninja
games/fruit-ninja/game.js - Fruit gameplay
games/fruit-ninja/logic.js - Alien Attack
games/alien-attack/game.js - Alien gameplay
games/alien-attack/logic.js - Sketch
games/drawing/game.js - Drawing logic
games/drawing/logic.js - Shooting Range
games/shooting-range/game.js - Target logic
games/shooting-range/logic.js - Golf
games/golf/game.js - Golf logic
games/golf/logic.js - Swordplay
games/swordplay/game.js - Duel logic
games/swordplay/logic.js
Mario Kart
- Mario Kart game
games/mario-kart/game.js - Race logic
games/mario-kart/logic.js - Track surfaces
games/mario-kart/track.js - Surface track
games/mario-kart/surface-track.js - Race world
games/mario-kart/world.js - Stadium branding
games/mario-kart/stadium-brands.js - Stadium compound
games/mario-kart/stadium-service.js
Other components
- Phone controller
public/controller.js
Connections 34
- Phone controller → LAN server: sends motion
- LAN server → Game launcher: serves browser
server.js - LAN server → Phone controller: relays packets
- Game launcher → Fruit Ninja: launches game
- Game launcher → Alien Attack: launches game
- Game launcher → Sketch: launches game
- Game launcher → Shooting Range: launches game
- Game launcher → Mario Kart game: launches game
- LAN server → Input channel: serves modules
server.js - Input channel → Socket link: receives samples
core/channel.js - Input channel → Motion pointer: updates pointer
core/channel.js - Motion pointer → Orientation decoder: decodes axes
core/pointer.js - Input channel → Game audio: creates audio
core/channel.js - Fruit Ninja → Fruit gameplay: runs gameplay
games/fruit-ninja/game.js - Fruit Ninja → Motion pointer: uses pointer
games/fruit-ninja/game.js - Fruit gameplay → Input channel: uses trail
games/fruit-ninja/logic.js - Alien Attack → Alien gameplay: runs gameplay
games/alien-attack/game.js - Alien Attack → Input channel: reads controller
games/alien-attack/game.js - Sketch → Drawing logic: runs drawing
games/drawing/game.js - Sketch → Input channel: reads controller
games/drawing/game.js - Shooting Range → Target logic: runs targets
games/shooting-range/game.js - Shooting Range → Input channel: reads controller
games/shooting-range/game.js - Golf → Golf logic: runs gameplay
games/golf/game.js - Golf → Input channel: reads controller
games/golf/game.js - Golf logic → Race world: uses ball physics
- Swordplay → Duel logic: runs duel
games/swordplay/game.js - Swordplay → Input channel: reads controller
games/swordplay/game.js - Swordplay → Swing detector: detects swings
games/swordplay/game.js - Mario Kart game → Race logic: uses race rules
- Mario Kart game → Track surfaces: uses track
- Mario Kart game → Race world: uses world
- Track surfaces → Surface track: queries surface
games/mario-kart/track.js - Stadium compound → Track surfaces: queries surface
games/mario-kart/stadium-service.js - Stadium compound → Stadium branding: uses branding
games/mario-kart/stadium-service.js