gus.rikers.org — Battlezone Online

Battlezone Online (bzo) is a free, open-source 3D multiplayer tank game that runs in the browser -- on a desktop, a phone or a VR headset -- and plays with BZFlag clients and servers. This server: bzo https://gus.rikers.org Azure server Germany.

Controls

One client runs on a desktop, a phone and a headset, so every action has a way in from each of them. The keyboard has the most; touch, a gamepad and the XR controllers carry the actions a match needs, and the Settings menu reaches the rest -- including from a headset, where there is no keyboard at all. The in-game help (/ or ?) lists the keyboard's; npm run check:controls-docs keeps the two in step.

Keyboard

Driving

Chat

View and panels

Hunting

Marking a player puts a cyan ◎ on their scoreboard row, a cyan ring on their radar blip, and a beacon in the sky over them in their own tank colour -- so several marked at once are still told apart at a glance. While one of them is in your sights the HUD says SPOTTED: and a ping sounds once a second from where they are. In Rabbit Chase the rabbit is marked for you, and its beacon is cyan like its ring: everyone is hunting it, so everyone's mark over it says so.

As an observer

As an Observer you have no tank. Drive and turn fly the camera instead, Tab climbs and Space descends, and holding Shift makes drive tilt the view up and down and turn slide it sideways. The camera rests at the eye height of a tank on the ground, and travel stays level however the view is tilted. Pausing and self-destruct do nothing.

Mouse

M turns mouse steering on and off, and nothing else does: the keys never take it away behind your back.

The targeting box

The two boxes in the middle of the screen are the steering, as in BZFlag. Where the cursor sits relative to their centre is what the tank does:

The boxes are BZFlag's own sizes, scaled to the window. BZFlag also holds the cursor inside the box; a browser cannot without taking the pointer over, so in bzo the cursor can leave it -- the steering simply stays at full, and the cost is a longer move back to the centre.

With the keys, the mouse keeps whichever axis no key is holding -- see Combining inputs.

Clicks

Left click shoots wherever the cursor is, whether mouse steering is on or not, unless the click lands on the chat panel or a button. Right click identifies. Mouse steering is unavailable with no mouse attached, in VR, and while the on-screen controls are up, since those steer instead; a click that misses one of their buttons does nothing rather than firing.

Combining inputs

Every input drives at once, and nothing switches between them on its own: M and the Settings rows are the only things that change which ones are on.

Driving is shared out an axis at a time -- forward/back, and turn, each on its own. On each, the first of these with something to say wins:

  1. Keys. A held drive key owns its axis, and holding both of a pair (W and S, or A and D) is a deliberate stop on that axis.
  2. The stick: the XR controllers in VR, otherwise a connected gamepad, otherwise the on-screen stick. Only one of the three is read at a time -- they are not added together.
  3. The mouse, in the targeting box, with mouse steering on.

So you can drive with W while the mouse steers, turn with A/D while the mouse sets the speed, or steer a gamepad's turn while a key holds the speed. A stick let go reads zero and gives the axis to the mouse; the mouse box holds whatever the cursor's place says, which is why it comes last.

Buttons add up. Shoot fires from Enter, a left click, or the stick source's own fire button; jump from Tab or the stick source's; identify from I, a right click, or the stick source's. Any of them will do.

With the autopilot on, the pilot takes the mouse's place, last in line: a drive key or the stick you hold still owns its axis, and the pilot has the rest. So when it is wedged against something you can hold A to turn it out, or S to back it off, while it keeps the other axis, and let go to hand it back -- it carries on from wherever you left it, re-planning its route if you took it somewhere else. Your shots, jumps and drops add to its own. The mouse box does not steer while the autopilot drives: it holds an offset wherever the cursor is parked, so it would never hand anything back.

Menus don't stop the autopilot. Opening Settings, or any other menu, normally pauses your tank. With the autopilot driving, the menu takes the keys and the pilot goes on driving. With a pilot chosen on the Settings -> Autopilot row but not driving, opening a menu turns the autopilot on, and closing the menu turns it off again -- so a menu means "drive for me a moment" rather than "stop". With the row on None, the default, or on a server that refuses bots (-disableBots), menus pause as they always have. A hidden window still pauses either way: the browser stops drawing it, and the pilot with it.

Three keys at once. Many keyboards cannot report some three-key combinations at all -- the third key's press never reaches the browser -- so a held turn and reverse can swallow a jump (#146). The debug HUD (`) shows how many keys the browser saw held at once, which tells the keyboard's limit from bzo's.

Touch: the on-screen controls

A phone starts with them on; anywhere else Settings -> Virtual Controls turns them on and off.

Everything else -- camera, radar range, chat, hunting, autopilot, pausing -- is a row in Settings, which a tap reaches.

Gamepad

Any controller the browser reports in the standard layout (most USB and Bluetooth pads, and iOS MFi controllers). Plugging one in turns it on; nothing needs setting up.

ControlDrivingIn a menu
Left stickforward/backward and turnmove between rows, change a row
A / Cross, or right triggershootselect
B / Circle, or left triggerjumpback
X / Squaredrop flag
Either shoulderidentify

The sticks have a dead zone of a fifth of their travel, so a pad left on the desk does not creep. The right stick is free.

The pad rumbles when you fire and when your tank dies, as BZFlag's does: a short buzz for a shot, longer for a shock wave, both motors for a laser, and one long, strong shake for a death. It rumbles only while it is what you are playing with -- a key or a click hands control back and keeps it quiet -- and never for an observer. Rumble in Settings turns it off. The browser has to support it; Chrome and Edge do.

XR controllers

In VR the controllers are the only input. Turning the tank is independent of where you look.

ControlDrivingIn the XR menu
Either thumbstickforward/backward and turn -- the right stick if both are pushedmove between rows, change a row
Either triggershootselect
A / X (primary face button)drop flagselect
B / Y (secondary face button)open the XR menuback, and close it from the top
Either gripjumpback
Press either thumbstickidentify

Both controllers pulse for the same events as a gamepad's rumble.

Identify is on the thumbstick press because a thumb that is steering presses it by accident, and identifying costs nothing; the menu is on B for the same reason. Typing -- a name, a MOTD -- uses the headset's own system keyboard, raised when the row takes focus; see the README's WebXR section for headsets that have none.

Flags

Drive over a flag to pick it up. Good flags help; bad flags hinder, and stay until they shake off, you kill, or you die. Team flags are captured by carrying an enemy's to your own base.

FlagNameKindWhat it does
AAgilitygoodTank is quick and nimble making it easier to dodge.
BUBurrowgoodTank burrows underground, impervious to normal shots, but can be steamrolled by anyone!
CLCloakinggoodTank is invisible out window. Shots are still visible. Sneak up behind enemies!
GGenocidegoodKilling one tank kills that tank's whole team.
GMGuided MissilegoodShots track a target. Lock on with right button. Can lock on or retarget after firing.
VHigh SpeedgoodTank moves faster. Outrun bad guys.
IDIdentifygoodIdentifies type of nearest flag.
IBInvisible BulletgoodYour shots don't appear on other radars. Can still see them out window.
JPJumpinggoodTank can jump. Use Tab key. Can't steer in the air.
LLasergoodShoots a laser. Infinite speed and range but long reload time.
MGMachine GungoodVery fast reload and very short range.
MQMasqueradegoodIn opponent's hud, you appear as a teammate.
NNarrowgoodTank is super thin. Very hard to hit from front but is normal size from side. Can get through small openings.
OOOscillation OverthrustergoodCan drive through buildings. Can't back up or shoot while inside.
PZPhantom ZonegoodTeleporting toggles Zoned effect. Zoned tank can drive through buildings. Zoned tank shoots Zoned bullets and can't be shot (except by superbullet, shock wave, and other Zoned tanks).
QTQuick TurngoodTank turns faster. Good for dodging.
FRapid FiregoodShoots more often. Shells go faster but not as far.
RRicochetgoodShots bounce off walls. Don't shoot yourself!
SESeergoodSee stealthed, cloaked and masquerading tanks as normal.
SHShieldgoodGetting hit only drops flag. Flag flies an extra-long time.
SWShock WavegoodFiring destroys all tanks nearby. Don't kill teammates! Can kill tanks on/in buildings.
STStealthgoodTank is invisible on radar. Shots are still visible. Sneak up behind enemies!
SRSteamrollergoodDestroys tanks you touch but you have to get really close.
SBSuper BulletgoodShoots through buildings. Can kill Phantom Zone.
THThiefgoodSteal flags. Small and fast but can't kill.
TTinygoodTank is small and can get through small openings. Very hard to hit.
USUselessgoodYou have found the useless flag. Use it wisely.
WGWingsgoodTank can drive in air.
BBlindnessbadCan't see out window. Radar still works.
BYBouncybadTank can't stop bouncing.
CBColorblindnessbadCan't tell team colors. Don't shoot teammates!
FOForward OnlybadCan't drive in reverse.
JMJammingbadRadar doesn't work. Can still see.
LTLeft Turn OnlybadCan't turn right.
MMomentumbadTank has inertia. Acceleration is limited.
NJNo JumpingbadTank can't jump.
OObesitybadTank becomes very large. Can't fit through teleporters.
RCReverseControlsbadTank driving controls are reversed.
ROReverseOnlybadCan't drive forward.
RTRight Turn OnlybadCan't turn left.
TRTrigger HappybadTank can't stop firing.
WAWide AnglebadFish-eye lens distorts view. bzo leaves the view alone, so this one only costs you the time to shake it off.

Discord

Talk with other players on the BZFlag Discord.

Battlezone Online 1.3.67 · Source, AGPL-3.0