WinBolo 2.1: Scenarios, Mods, Fullscreen, AI + More

Oct 03, 2026 01:44 WinBolo 2.1: Scenarios, Mods, Fullscreen, AI + More

WinBolo 2.1 Release Notes

WinBolo 2.1 is the largest set of changes since the 2.0 release. It adds scenarios and mods, voice chat, a map overview, skins, smart pings and smarter bots, bringing a modern experience gamers in 2026 would expect.

Being such a big release there will like be some bugs that weren't found in testing. Please report them via discord, forum or github


Scenarios and Mods

The game now supports scenarios and mods: scripts that create new ways of playing and mix up the existing way the game is played. They are written in Lua and are simple way for players to be able to modify the game.

There are two kinds of script:

  • Scenarios change the win condition. A scenario can set the rules, set up the world before anyone spawns, seat bots, and decide when the round ends and who won. Only one scenario can be loaded at a time. A scenario can be packed into its map, so the map always plays that way, or it can play over any map the host picks.
  • Mods change the game but leave the win condition alone. Several mods can be loaded at the same time, up to a total of 10 scenarios and mods. The host sets the order, and where two scripts change the same rule, the higher one wins.

The script chooser in the lobby: the scripts the server offers on the left, and the scenario and mods this round runs on the right

What a script can change

  • 155 game rules. Every gameplay constant is now a rule that a script can change for its round: tank and builder speed on each terrain, tank stocks and reload time, shell speed, range and damage, mine damage, pillbox armour, range and fire rate, base stocks and refuelling, build costs, explosions, tree growth, and more.
  • 26 hooks. Functions the game calls when something happens: the round starting and ending, a player joining or leaving, a tank spawning, being hit or being killed, a pillbox or base changing owner, a builder dying, a mine exploding, a tank entering or leaving a region, a chat line, a smart ping, and more.
  • 13 policies. Functions the game asks before it acts, whose answer decides what happens: whether a shell can hit a target, whether a tank, builder or pillbox can die, how much damage a hit does, whether a player can capture, build, respawn or ally, which start a tank spawns on, what stocks it spawns with, and whether a newswire line is shown.
  • 86 game functions. 28 read the world (tanks, builders, pillboxes, bases, starts, terrain, teams, settings and regions). 58 change it: move and kill tanks, set stocks and modifiers, add, remove and move pillboxes, bases and starts, change terrain and mines, spawn and order bots, set teams, send messages and sounds, draw panels, scores, status lines, announcements and map markers, set timers, and end the round.

Rules are not fixed for the round: a script can change them at any time while the round is playing.

The details dialog for a script shows its settings, the rules it changes and the hooks it implements:

The details dialog for the Virus scenario, with its settings, changed rules and hooks

Shipped scenarios

  • Survival, with its own map. Co-op: hold the island's centre against waves of bots coming in from the outer ring. Hold your bases, take the dead pillboxes and fortify in the forest. The host sets the number of waves and how long each lasts.
  • Pillbox Tag, plays on any map. There is one dead prize pillbox, and carrying it scores one point a second. The holder is slowed according to the ground and cannot fire while carrying it. A new holder gets a speed boost and two seconds without damage, and a holder who stays on deep water is destroyed after a countdown. The host sets the round length, speed penalty, boost and deep water time.
  • Joust, with its own map. Sixteen tanks on boats in a circular arena of deep sea. Any hit sinks a boat, so one hit kills. A tank comes back on the start farthest from every enemy, and a new tank cannot be hit for its first second. The first side to reach the kill target (1 to 50, default 10) wins. The scoreboard animates when the order changes, and kill streaks are announced ("Double kill", "Triple kill!", up to "UNSTOPPABLE!!!!").
  • Virus, plays on any map. One player starts infected, and everyone they kill is infected too. Only a kill by an infected shell spreads the infection, and deep water infects a survivor after a time the host sets. An infected player's pillboxes and bases go to the nearest survivor. Infected tanks come back after three seconds, the first infected is faster and tougher, and the infected get a compass in the last 90 seconds to find the last survivors.
  • Soccer, a scenario with its own map. Two teams, one ball and no guns. Drive into the pillbox to move it, and score goals. The scenario panel works as a minimap.

Shipped mods

  • Mac Bolo Rules. Turns on the original Mac Bolo behaviour that WinBolo has as rules: the armour-scaled shell push, the pillbox shell cap, pillbox massage, the circular base defence area and the Mac Bolo choice of starting position. Following this release we will take a community poll on if this should be the default and create Mods for WinBolo 1.X and WinBolo 2.X if wanted.
  • Rule Roulette. Changes the game rules at random every so often, from a list of named modes. For example, for the next minute players fire like machine guns but are glass cannons that die quickly, builders are on repair duty, and roads are free.
  • Tree Growth. Raises the rate at which trees grow back. Configurable.
  • Base Restocking Rate. Raises the rate at which bases restock. Configurable.

Rule Roulette in play. Its panel shows the current tank and builder modes and what comes next, and each change is announced at the top of the screen:

Rule Roulette's panel showing the Hovercraft tank mode and the Cleanup Crew builder mode, with the change announced at the top of the screen

Steam Workshop

  • Subscribe to mods, scenarios and scenario maps on the Steam Workshop. Subscribed items are copied into the game when it starts and whenever Steam finishes installing one, with no restart, and are removed again when you unsubscribe.
  • Publish your own from the Workshop tab in Settings. It lists every script in your Mods folder and every map that carries a scenario, with Publish, or Update for an item you have already published. A loose .lua script is packed before it is sent.
  • The Workshop tab also lists everything you are subscribed to, including skins, with its install state and an Open in Workshop button.
  • In the lobby, a script from the Workshop is marked with a Workshop chip and a link to its page. Subscribed maps appear in a Workshop folder at the top of the map chooser.
  • A dedicated server does not use Steam. To run a Workshop mod on one, copy the file into the server's mod directory.

Subscribed

The Workshop tab's Subscribed view, listing the Bolo Reloaded skin as installed

Publish

The Workshop tab's Publish view, listing the player's own mods with Publish and Update buttons

These scenarios and mods are published on the Steam Workshop:

  • No Friendly Fire, a mod that turns off damage from friendly tanks, friendly pillboxes, or both. Configurable.
  • No LGM Deaths, a mod that makes builders invincible.
  • Mac Bolo mods, one mod for each part of the Mac Bolo Rules mod, so you can turn on just the original start chooser, say, without the rest.

In the lobby

  • The lobby shows the map's scenario, and the host can control it.
  • The host picks the round's scenario and mods in a chooser, and sets their order.
  • Scripts can declare settings, which the host picks in the details dialog. A setting can be a number, on/off, or a choice from a list.
  • The details dialog shows each script's rules, callbacks, and the simulation rules it changes.
  • A "Scenarios only" checkbox in the map chooser.
  • The lobby's Mods checkbox turns the picked scenario off along with the mods.
  • The lobby keeps its bots when the host changes the map or picks a mod.
  • A scenario or mod turns bots on only when it says it needs them.
  • The menu's background game does not use scenario maps.

In game

  • Each script draws its own 128x128 panel. A panel can be closed, or popped out into its own window, which remembers its position.
  • Scripts can show scores per player or per team, show announcements at a chosen position, show map markers and bot hints, and put a status line with a countdown at the top of the game view.
  • Scripts can send voice to every player, not only allies. Players see a newswire line when this changes, and the microphone outline is drawn amber while it is on.
  • Scripted rounds are recorded in replays and shown in the log viewer.

Sharing scenarios and mods

  • Players can send a mod or scenario to the server they are on. The server operator chooses whether uploads are off, kept for the session, or kept permanently.
  • Players can save a copy of a server's mods and scenarios.
  • The server reports its scenario and mods to WinBolo.net, the game finder and Steam.
  • A scenario and its map can be packed into one .map file. Older readers still load it as an ordinary map.

For script authors

  • Scripts run in a sandboxed Lua state.
  • Triggers: a hook, a list of tests and a list of actions, written as data. The map editor has Triggers and Functions views that write them.
  • The map editor can write, check and pack a scenario without leaving the editor.
  • The scenario API document lists every rule with its name, unit and range.
  • A round's rules table is applied completely or not at all.
  • WinBoloDS -validate <map> checks a script without running it. WinBoloDS -setting sets a script's setting from the command line.
  • Scripts and uploads are documented.

AI Improvements, Pings

GoalHunter bots

  • There is now one GoalHunter brain, with a difficulty for each bot. Versions 1.0, 1.5 and 1.6 were removed. Difficulty shows as three chips next to the tank icon.
  • A brain declares its own modes and difficulty levels, and the lobby fills its dropdowns from them.
  • A Turtle mode, which open games now start bots in. Bots follow a game-type change unless a person set their mode by hand.
  • The builder works on its own jobs while the tank does something else.
  • Fewer needless deaths: bots drown less, guard themselves better while carrying pillboxes, play more carefully once they lose their builder, and no longer freeze when their builder is stranded.
  • Fixed a bug in pillbox repositioning. Bots now reposition more often and keep a better balance of attacking and defensive pillboxes.
  • While driving to capture a dead pillbox, a bot shoots an enemy builder who is trying to rebuild it.
  • Bots defend their pillboxes better: they notice when a pillbox is under attack and go to defend it.
  • Harder bots present more of a challenge to seasoned players when they outnumber them.
  • Brain think time is about 50% lower, which reduces CPU use.
  • Bots follow the live rules and tank modifiers, so they plan correctly under a scenario that changes the physics.

Ordering bots

  • Allies can give orders to GoalHunter bots by team chat, by smart ping, or by landing three full-range shells on one square.
  • A ping on a damaged friendly pillbox makes the bot's man repair it.
  • A bot on a person's attack order waits only a limited time for a blitz or to gather trees.
  • A bot does not leave a person's order because of a new ping.
  • Bots acknowledge the attack-closest and nearby orders.
  • Games start with bot chat off and bot pings on.

Smart pings

  • A pie menu (Ctrl or Alt + right mouse by default) puts a team signal on the map: Ping, Caution, Assist Me, Attack, On My Way and Bot Command. Each kind can also be bound to its own key, and controllers are supported.
  • On My Way is drawn as a 3D arrow. Every ping shows the sender's name. Off-screen pings show as bars at the edge of the view, sized by distance.
  • On arrival a ring closes onto the square, and the marker flashes three times.
  • Each ping kind has its own sound.
  • A player can mute another player's pings without muting their voice or chat.
  • Ping spam limit: at most 3 pings in 5 seconds and 10 in 30 seconds.
  • The host can turn smart pings off in the lobby.

The smart ping pie menu open over the map, with Bot Command selected


VOIP and Positional Sounds

Voice chat

  • Voice chat between allies, using Opus.
  • The voice controls are in the lobby and the players panel, including mute and a microphone level indicator on your own row. New installs start with voice off.
  • The microphone permission is only requested when a player turns voice on.

The lobby's Voice section: enable voice, mute, microphone and playback device, mic gain and input level

In game, a speaker icon beside a player's name shows that they are talking, and the microphone on the right of the status panel shows your own:

A game with a speaker icon beside a talking player's name and a microphone icon on the status panel

Positional sound

  • Game sounds pan left or right by their east-west distance from your tank.
  • The host sets it as a lobby setting, which is off by default and off in classic mode. Each player can also turn panning off in Settings.

Fullscreen and Map Overview

  • Map overview: a fog-of-war map of the whole world, as a pop-out window or full screen.
  • Full screen mode for the game window. The macOS menu bar stays visible.
  • Base and allied tank views, in addition to pillbox view.
  • The server now decides what each client can see. Each view type (pillbox, base, ally) has an operator setting: always, key, decay or off. This closes several ways to see the whole map, such as a dead player getting a full-map view and tanks in trees being hidden only by the client's drawing code.
  • Visibility presets in the lobby: Classic, Classic with overview, Expanded, Max view, Line of sight, and Custom. The preset is shown in the game finders.
  • The overview's fog rules are a server setting. An unconfigured server uses the classic set.
  • Line of sight: a square counts as seen when any part of it is.
  • Where several view areas overlap, all of them give sight instead of only the last one.
  • Zoom and follow are shown as a notice that fades out, not a permanent line.

The map overview window beside the game view

Max view

The full screen map with the Max view preset

Visibility settings

The lobby's visibility presets and Details table

Line of sight: a tank sees only what is not blocked by buildings and trees.

Line of sight in the game view

Line of sight on the map overview


Skins and Graphics Settings

Skins

  • Skin support is back. A skin replaces some or all of the game's artwork and sounds: the terrain, tanks, pillboxes, bases, shells, explosions, the status panel and sound effects.
  • WinBolo 1.x .wsf skins work again. A skin can also be a directory or a .zip file with a skin.ini.
  • Skins can use PNG and SVG graphics, as well as the 1.x format. A skin can include higher resolution graphics from 2x up to 8x, and SVG graphics are drawn sharp at any size.
  • A skin can turn on auto-rotation. The skin then only has to draw each tank facing north, and the game makes the other fifteen directions. Any direction the skin does draw is used as drawn.
  • A skin can include several sound files for one sound effect, and the game picks one at random each time the effect plays. Skins can also replace the ping sounds.
  • A skin can set the colours of the simplified zoomed out view.
  • Skins can be shared on the Steam Workshop, which packages them and installs them for subscribers. Minhiriath's Bolo Reloaded skin is on the Workshop, with his permission.
  • Skins are chosen in Settings → Display → Skin. The change applies immediately, including during a game. The picker shows the skin's name, author, notes and a small preview.

Minhiriath's Bolo Reloaded skin in the game view and in full screen mode:

A game running with the Bolo Reloaded skin

The Bolo Reloaded skin in full screen mode

Graphics settings

All of these default to the way the game has always looked, except Fog of war style.

The skin picker and graphics settings under Settings, Display

  • Tile detail: Classic always uses the original 16×16 art. Match to zoom uses higher resolution art, up to your zoom level, when the skin has it for every sprite. High detail uses the best art the skin has for each sprite. Only available with a skin that includes higher resolution art.
  • Animation smoothness: Classic moves sprites in whole game pixels. Smooth moves your tank and shells continuously. Match pixelation is between the two.
  • Smooth shells: moves shells smoothly while Animation smoothness is Classic or Match pixelation.
  • Texture filter: Nearest, Linear or Pixel art. Controls how sprites are drawn when they fall between pixels. A skin can recommend one.
  • Fog of war style: Grey, Darker, Darker with fog edge (the default), or None. This changes only your own display, not what the server lets you see.
  • Simplified zoomed out view: when the Map Overview or full screen map is zoomed out far enough that sprites are too small to make out, each square is drawn in a flat colour, and tanks, pillboxes and bases are drawn as marker shapes. It is on by default and can be turned off, or limited to the Map Overview window, in Settings → Display. Thanks to rooklift and his Bolo log viewer.

The simplified zoomed out view: flat colours and marker shapes

The difference Smooth shells makes, at 8x zoom and half speed.

Classic moves shells a whole game pixel at a time:

Classic shells

Classic + Smooth shells moves them continuously:

Smooth shells

Fixes

  • Removed the green fringe on tanks.
  • Fixed good boat sprites 0 to 10 being drawn one pixel off.
  • The sound system keeps running if one sound file fails to load.

Bug fixes and improvements

New features

  • Team starting sides: each team has a side of the map. The compass on the lobby map preview sets both teams' sides in one click. Teams are spread across their side, every team gets its own start region, and every lobby opens with teams 1 and 2 on opposite sides.
  • 47 new maps, including Dream Soda IV and A Rock And A Hard Place. Six maps with symmetry problems were fixed.
  • Map downloads use zlib and are about a quarter of their old size.
  • Web client: the browser client has the 2.1 features, its own menu and game finder, sign-in from WinBolo.net, and bot brains running on worker threads.
  • A password prompt when joining a protected game.
  • The map editor can open maps from WinBolo.net, and Settings opens inside WinBolo from the map editor.
  • Quit exits the application from every screen.
  • On the welcome screen, C cycles the background camera and +/- zoom it.
  • Ctrl+M always raises and focuses the Send Message window.

Gameplay

  • Mines: the blast reaches one square and does 15 damage (10 when fatal), as in Mac Bolo.
  • A rule switches the base defence area from the 9-square square to the Mac Bolo circle.
  • New rules for the Mac Bolo shell push and for capping the pillbox shells in the air at one tank.
  • Shell knockback no longer slides further north and west than in other directions, and a knocked tank cannot be pushed through a wall.
  • A diagonal tank no longer steps one axis at a time.
  • Every tap of a turn key turns the gun.
  • The tank holds still during short gaps in input, instead of repeating the held buttons.
  • The gunsight no longer snaps back while range changes are still in flight.
  • Building happens on the square the reticle is on, not the one under the pointer.
  • A pillbox is angered only when it is strictly less than 7 squares from a shot base.
  • Bases refuel by the current player count, not the highest the server has ever had, and no longer drain stock without refuelling a tank that is just short of full.
  • An enemy base's destruction shows immediately instead of waiting for the server.
  • The man no longer dies standing beside a solid square, and his pillbox is dropped when his player quits.
  • Mines under pillboxes are cleared when the map loads. Starts, pillboxes and bases in the mined border are removed.

Alliances and teams

  • The server no longer accepts alliances nobody asked for.
  • A player who leaves with no ally no longer hands their bases and pillboxes to the last player slot.
  • The round start no longer hands map pillboxes and bases to the previous round's ally.
  • A team with no side stays off the side another team chose.

Lobby and network

  • New games keep the game type, computer tanks and hidden mines picked in the lobby.
  • The lobby map preview no longer spins forever when its request is lost.
  • A lost join reply no longer leaves the Ready button stuck.
  • UI state from the last game (build selection, newswire, and so on) is reset.
  • Map upload timeouts no longer block retries or other players. An upload with no reply says to try again instead of "rejected by server".
  • The server no longer stalls the game on WinBolo.net calls or input lockouts.
  • Control messages are queued instead of refused, and joining a game sends less data.
  • A -nolobby -autoclose server stays up until someone has joined.
  • The two native save dialogs no longer block the network and cause disconnects.
  • Four faults in the dedicated server's operator console were fixed.
  • The WinBolo.net sign-in dialog fits the UI scale.

Display

  • The menu background game no longer flickers or jumps a tile at the map edges, and it scrolls smoothly.
  • The lobby replay no longer draws the map's mined border across the middle of the view.
  • The map editor and log viewer render at full resolution, and the dark grid between tiles in the map editor is gone.
  • In the log viewer, team colours follow alliance groups.
  • The players panel is one table, and its icons are no longer resampled.
  • Keys no longer stay pressed when a key release is lost.
  • The tutorial's network-errors screen was removed and its unwelcoming lines were reworded.
  • Newswire messages no longer assume the player is male.

Stability and security

  • Downloaded maps are checked on load, the map parser is fuzzed, and the loader refuses truncated or corrupt maps.
  • Fixed two client leaks found by fuzzing.
  • Fixed a hang when a client joined a game with bots.
  • Fixed a GoalHunter crash when a bot goes to rescue its builder.
  • SDL was updated to 3.4.14.
  • Fixed MSVC and compiler warnings across the build. ONNX Runtime's third-party notices ship with the library.

Source code and GitHub

  • WinBolo's source code is on GitHub at https://github.com/john-winbolo/winbolo.
  • WinBolo is now licensed under GPL v3 or later. See the README, contributing guide and build instructions for every platform for more details.
  • Bug reports and pull requests are welcome on GitHub.

Repositories:

  • winbolo: the game: desktop client, dedicated server, map editor, log viewer, web client and bot brains.
  • winbolo-ml: the machine-learning brain, its training gym and the ONNX models.
  • winbolo-udp-proxy: the UDP relay that lets the browser client join network games.
  • tracker: the game tracker, NAT helper and game finder.
  • winbolo-classic: the original WinBolo 1.15 source release.

The winbolo.net source code will follow soon.

Oct 03, 2026 02:31

This is an absolutely incredible release, JM, an all-timer.

As an old dude, this is almost too much to take in. From 1.08 to 2.10 is like a Mars landing.

Are we going to visit the LGMs' home, JM?