
doom-c is the smartphone touch controller for the RCWeb doom viewer. Open it by scanning the viewer's QR code or visit /doom-c/?r=<room> with the same room as the display.
The paired viewer runs Doom's original 1993 shareware campaign, Episode 1: Knee-Deep in the Dead. It is a nine-level single-player journey through the UAC facilities on Phobos, where the player explores interconnected maps, finds keys and supplies, fights demons, and reaches each level exit. The phone is only the input device: the complete game, WebAssembly engine, graphics, music, and sound effects stay on the shared display.
Back to apps returns to the controller catalog when that route is available.Fire, Use, or Run while steering or strafing. Fire also acts as Select in menus.Weapon to cycle weapon slots 1-7.Menu button to open or close Doom's menu, then use the stick for one-item navigation and Select or Fire to confirm.Reset game asks the connected Doom viewer to reload.Both apps connect to RCWeb with the same room ID. Touch input is reduced to named press and release events, and the controller sends them with rc.sendFunctionCall to the doom app target. RCWeb forwards those calls only to Doom viewers in the same room.
Every message includes the current RCWeb client ID and the controller identity saved in local storage. The viewer uses both values to reject input from waiting phones while allowing the owning phone to recover after a refresh changes its WebSocket connection. The controller announces its presence every two seconds, and the viewer sends readiness and ownership state directly back to that controller client.
The viewer converts accepted actions into Doom's keyboard input. Because forward, backward, turning, strafing, running, using, and firing have independent press/release state, several controls can remain active together. Menu and weapon commands are short taps. When the controller is hidden, blurred, refreshed, or closed, it releases its local actions and asks the viewer to release all held keys; the viewer also clears them if the controller disappears or times out.
No gameplay data is processed by the phone or persisted by the RCWeb server. The controller sends input intent only; the paired viewer remains the authoritative Doom session.