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.
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.
W / S or Up / Down — move forward/backwardA / D or Left / Right — turn left/rightEnter — shootTab — jumpSpace — drop flagI or right-click — identify the tank in your sights, and lock a Guided Missile onto itDelete — self-destruct, after a five second countdown; Delete again calls it off9 or /autopilot [roger|ace] — autopilot: the pilot drives, aims and shoots until pressed again. Settings -> Autopilot chooses the pilot without a keyboard. You can still drive while it does, to help it out of a corner -- see Combining inputsP — pause/resumeN — open chat (or click the Send button)Enter — send chat (while chat input is focused, or click Send again)1 / 2 / 3 / 4 / 5 — switch chat tab (All / Chat / Server / Misc / Debug)[ / ] — previous/next chat tabTab — while typing, complete a player, command or flag name; @ starts a mention and # a player's slot numberUp / Down — while typing, recall earlier lines; type the start of a line first to recall only the ones beginning that way. — reply to last direct-message sender, — message nemesis targetPage Up / Page Down — scroll chat historyEnd — jump chat to newest messageEsc — back out one step: exit chat input, leave fullscreen, leave mouse steering, then open Settings. Pressing it again closes Settings, so it is always safe to press one more timeM — toggle mouse steeringC — cycle camera modeO — toggle operator panelF — toggle fullscreen` — toggle debug HUD= or + or Numpad + — zoom radar out (increase range)- or Numpad - — zoom radar in (decrease range)\ — reset radar zoom to the default medium range (half the world's radar limit, which is the world size unless the map says otherwise)Settings -> Radar: ... — cycle Short/Medium/Long radar presetsB — toggle the voice microphoneSettings -> Audio Settings — set the game, voice, and microphone levels, and choose the voice channel: All, Nearby, or Team/ or ? — show/hide help panelMarking 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.
U — hunt: open the scoreboard cursor, and press it again on a running hunt to clear every mark7 — add hunt: the same cursor, but committing adds to what is marked rather than replacing it, and committing on a row already marked takes it offSettings -> Hunt — the same thing without a keyboard, for a phone or a headset. Left and right step through Clear and then the players in alphabetical order; select marks or unmarks whoever is shown, or clears every mark on Clear. On a touch screen or with a mouse, tap a chevron to step and anywhere else on the row to select*SEL* and a pulsing ○ sits on the row it is on, filling in to ◎ when you commit. Up / Down move it, Enter commits, and U or 7 backs out keeping whatever was already marked. I and Space move the cursor too, so a surface without arrow keys can reach itAs 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.
Enter or C — step through everything: in each view, the leader first, then every player, then on to the next view. The views are Free, Track, Follow, Driving with, and Flag where a map has team flagsI or right-click — in the Free view, watch the tank in your sights, or show the obstacle there: what it is, an outline round it, and its block from the map file with the group blocks that placed itM turns mouse steering on and off, and nothing else does: the keys never take it away behind your back.
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:
-a, off by default) brings the tank up to it over time, the same as it does from the keys.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.
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.
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:
W and S, or A and D) is a deliberate stop on that axis.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.
A phone starts with them on; anywhere else Settings -> Virtual Controls turns them on and off.
● — shoot. Tapping fires as fast as clicking a mouse; holding fires at the world's sustained rate⤒ — jump⚑ — drop flag◎ — identify, and lock a Guided MissileEverything else -- camera, radar range, chat, hunting, autopilot, pausing -- is a row in Settings, which a tap reaches.
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.
| Control | Driving | In a menu |
|---|---|---|
| Left stick | forward/backward and turn | move between rows, change a row |
A / Cross, or right trigger | shoot | select |
B / Circle, or left trigger | jump | back |
X / Square | drop flag | |
| Either shoulder | identify |
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.
In VR the controllers are the only input. Turning the tank is independent of where you look.
| Control | Driving | In the XR menu |
|---|---|---|
| Either thumbstick | forward/backward and turn -- the right stick if both are pushed | move between rows, change a row |
| Either trigger | shoot | select |
A / X (primary face button) | drop flag | select |
B / Y (secondary face button) | open the XR menu | back, and close it from the top |
| Either grip | jump | back |
| Press either thumbstick | identify |
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.
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.
| Flag | Name | Kind | What it does |
|---|---|---|---|
A | Agility | good | Tank is quick and nimble making it easier to dodge. |
BU | Burrow | good | Tank burrows underground, impervious to normal shots, but can be steamrolled by anyone! |
CL | Cloaking | good | Tank is invisible out window. Shots are still visible. Sneak up behind enemies! |
G | Genocide | good | Killing one tank kills that tank's whole team. |
GM | Guided Missile | good | Shots track a target. Lock on with right button. Can lock on or retarget after firing. |
V | High Speed | good | Tank moves faster. Outrun bad guys. |
ID | Identify | good | Identifies type of nearest flag. |
IB | Invisible Bullet | good | Your shots don't appear on other radars. Can still see them out window. |
JP | Jumping | good | Tank can jump. Use Tab key. Can't steer in the air. |
L | Laser | good | Shoots a laser. Infinite speed and range but long reload time. |
MG | Machine Gun | good | Very fast reload and very short range. |
MQ | Masquerade | good | In opponent's hud, you appear as a teammate. |
N | Narrow | good | Tank is super thin. Very hard to hit from front but is normal size from side. Can get through small openings. |
OO | Oscillation Overthruster | good | Can drive through buildings. Can't back up or shoot while inside. |
PZ | Phantom Zone | good | Teleporting 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). |
QT | Quick Turn | good | Tank turns faster. Good for dodging. |
F | Rapid Fire | good | Shoots more often. Shells go faster but not as far. |
R | Ricochet | good | Shots bounce off walls. Don't shoot yourself! |
SE | Seer | good | See stealthed, cloaked and masquerading tanks as normal. |
SH | Shield | good | Getting hit only drops flag. Flag flies an extra-long time. |
SW | Shock Wave | good | Firing destroys all tanks nearby. Don't kill teammates! Can kill tanks on/in buildings. |
ST | Stealth | good | Tank is invisible on radar. Shots are still visible. Sneak up behind enemies! |
SR | Steamroller | good | Destroys tanks you touch but you have to get really close. |
SB | Super Bullet | good | Shoots through buildings. Can kill Phantom Zone. |
TH | Thief | good | Steal flags. Small and fast but can't kill. |
T | Tiny | good | Tank is small and can get through small openings. Very hard to hit. |
US | Useless | good | You have found the useless flag. Use it wisely. |
WG | Wings | good | Tank can drive in air. |
B | Blindness | bad | Can't see out window. Radar still works. |
BY | Bouncy | bad | Tank can't stop bouncing. |
CB | Colorblindness | bad | Can't tell team colors. Don't shoot teammates! |
FO | Forward Only | bad | Can't drive in reverse. |
JM | Jamming | bad | Radar doesn't work. Can still see. |
LT | Left Turn Only | bad | Can't turn right. |
M | Momentum | bad | Tank has inertia. Acceleration is limited. |
NJ | No Jumping | bad | Tank can't jump. |
O | Obesity | bad | Tank becomes very large. Can't fit through teleporters. |
RC | ReverseControls | bad | Tank driving controls are reversed. |
RO | ReverseOnly | bad | Can't drive forward. |
RT | Right Turn Only | bad | Can't turn left. |
TR | Trigger Happy | bad | Tank can't stop firing. |
WA | Wide Angle | bad | Fish-eye lens distorts view. bzo leaves the view alone, so this one only costs you the time to shake it off. |
Talk with other players on the BZFlag Discord.
Battlezone Online 1.3.67 · Source, AGPL-3.0