Beatemup — Neon Uprising

Beatemup icon

The robots have taken over. Grab your friends, choose a fighter and take back the streets in this cooperative arcade brawler for one to six players.

The crew fighting through a neon-lit street

Start your first game

  1. Open Beatemup from the room's app picker on your main screen.
  2. Join the same RCWeb room on each phone. Use Beatemup Control, or choose Join + on the main screen to show its QR invitation.
  3. Choose an available fighter and enter your name.
  4. Tap Start the uprising on any joined controller.
  5. Click through the short comic, then get ready to fight!

Keep the main screen open while you play. Your phone is the controller; the action happens on the shared screen. Each phone takes one of the six player places.

While you gather the crew, the demo shows 10 seconds of robots patrolling with drones overhead, 5 seconds of the six fighters sparring in pairs, another 10 seconds of patrol, then 10 seconds of sparring. The robots arrive from the right as the fighters arrange on the left, ready for battle. The demo fades and repeats. You can join and start at any point.

Each district now has a longer route through six distinct street sections before its boss. Explore neon markets, transit stations, waterfronts and industrial strongholds, with drifting smoke, steam and fires. Lamps and signs pass in front of the street as distant skylines move behind it.

Choose a fighter and start the game from your phone

Joining friends who have already started? Scan their invitation or open Beatemup Control in the same room. You will take an available fighter and go straight to the controls. If all six places are full, the controller waits for a place to open. Join + on the main screen brings the invitation back.

Play on one device

  • Computer: choose Play on this keyboard on the opening screen. You can also press Enter to join.
  • Phone: open the game in portrait and tap Play on this phone. The action stays above a set of touch controls, so you can play without a separate display.

Playing on one phone with the game above the touch controls

Get comfortable with the controls

Use your left thumb to drag the joystick. Release it to stop. Move up or down to line up with an enemy, then use your right thumb to attack.

Joystick, attacks, health and overdrive on the phone controller

  • Punch: a quick attack. Hold the button to keep throwing combinations.
  • Kick: a stronger attack with more reach. Useful against guarding robots.
  • Jump: leap over ground attacks. Punch or kick in the air for a flying attack.
  • Pick up: collect a nearby weapon or help a fallen teammate.
  • Overdrive: fighting fills your power meter. When it is ready, tap for a powerful attack around you.

Playing with a keyboard

  • WASD or arrow keys: move.
  • J or Z: punch.
  • K or X: kick.
  • Space: jump.
  • E: pick up a weapon or revive a teammate.
  • L or C: overdrive.
  • P: pause or resume.

Weapons, health and extra chances

Walk close to a shock baton, plasma blade or steel pipe and press Pick up. Your fighter holds it and uses it when you Punch. Weapons have limited uses; the controller shows how many hits remain.

Watch your health bar and collect health pickups when you need them. Energy pickups help charge overdrive.

If you fall, a nearby friend can press Pick up to get you back up. Otherwise, you return after seven seconds if the team has a reserve revive left.

Where are the extra lives? Look at TEAM REVIVES in the bottom-right corner of the shared screen, below the character cards. This is a shared pool of automatic respawns. The team starts with three reserve revives per starting player. It is separate from each fighter's health bar.

Take back three districts

Fight through six encounters in each district. Smaller robots arrive first, followed by tougher enemies and a giant boss.

Move right when the street is clear. If you see Blocked! Destroy the robots first, finish the remaining enemies before advancing. Stay close to your crew so everyone can keep up.

  • Tokyo — Unicorn Gundam: jump over ground slams and shockwaves; change lane to dodge its shots.
  • New York — Punk Johnny Five: sidestep the track charge and keep clear of marked mines and incoming volleys.
  • Shenzhen — Sentinel: destroy all eight tentacles separately, then attack the exposed core. Strike low claws during recovery and dodge the marked attacks.

The Sentinel boss in Shenzhen, with separate health bars for its eight tentacles

Watch for drones! They are fragile: one successful hit destroys them. Jump attacks reach higher, while ground attacks connect when a drone drops low. Move away from dive warnings and dropped bombs.

After each boss, the game celebrates the district's liberation. Continue when the crew is ready. Clear all three districts to see Game Complete! AI defeated!

Choose your fighter

  • Kira: a balanced all-rounder and a good first choice.
  • Jax: slower movement and heavy punches.
  • Nova: a fast fighter in cyan.
  • Ronin: strong attacks and a red scarf.
  • Echo: the fastest runner.
  • Sable: a powerful close-range fighter.

Sound, breaks and returning to play

Sound starts automatically when your browser allows it. If playback is blocked after opening or refreshing the viewer, tap or click anywhere on the main screen, press a key, or use Enable sound. Your saved mute setting is respected. Take It Back Tonight by Michael Gardiner accompanies the attract loop and opening comic. Each district and boss then has its own chiptune theme.

The first connected player is the crew captain. They can pause or resume from their controller's Menu. Any joined player can start a fresh game after a defeat or victory.

A quick controller refresh reconnects you to your fighter. Keep the controller visible while playing: closing it, switching away or losing the connection can release your place after a short grace period. Back to apps leaves immediately.

Refreshing the only viewer resets the game. Connected controllers return to the setup screen so the crew can start again. If another viewer is already hosting the game, an additional display follows that ongoing game.

Implementation and agent information

This section is for maintainers, testers and coding agents.

App structure and connections

  • The main display app is beatemup; its phone controller is beatemup-c.
  • App code uses vanilla ES5 JavaScript, HTML and conservative CSS. The viewer owns the game simulation; controllers send input over RCWeb messaging.
  • Controller handoff runs on viewer connection and game start, retaining the room and skipping controllers already in the correct app. Preserve the controller's Back to apps navigation.
  • Controller identity is kept in session storage; names use the shared rcwebName setting. Incomplete joins retry after 2.6 seconds.
  • Missing heartbeats mark a player disconnected after three seconds. Disconnected slots are reserved for five more seconds. Explicit departures release them immediately.
  • Additional viewers mirror the host and can take over. Reloading the only viewer creates a fresh lobby rather than restoring a checkpoint.

Loading, artwork and audio

Only the current district's game artwork loads. Shared fighter, weapon and effect images are reused; previous district images are released. Music loads when its cue is needed and sound is enabled. Story and victory art load when shown.

The attract loop is a presentation-only timeline in the graphics renderer. Its actors never occupy player slots or change the simulation. It reuses the current district's loaded sprites; a test-level override previews that selected district. Scene changes occur during opaque black holds, and starting play resets the demo clock.

The sprites, scenery and comic artwork were created with built-in ImageGen and optimized for delivery. The soundtrack is an original chiptune score; combat effects use sourced CC0 audio. Robot names and designs are fictional arcade interpretations, with invented abilities and no manufacturer affiliation.

The lean display mode reduces effects and frame rate for weaker devices. Add lean=1 to the viewer's query parameters to select it manually.

Test starts

Set level on the viewer URL, then join and start normally:

  • level=1: Tokyo. level=1b: its boss.
  • level=2: New York. level=2b: its boss.
  • level=3: Shenzhen. level=3b: its boss.

Use a question mark before the first query parameter, or an ampersand after an existing room parameter. These starts skip the comic and replay from the same selection. Remove level for the normal opening. Controllers need only the matching room.

Reference material for agents

Read the repository instructions and RCWeb app guide before editing. Keep player instructions above this section, use headings and lists instead of tables, and keep screenshots local and compressed.

DocumentationServer TelemetryServer StatsServer HTTP LogServer WebSocket Log