Shoot and Destroy

Build Your Battlefield – Engineer Your Assault

News

The map was the biggest thing in the server’s memory, and the one part of a match it cannot do without. This week it moved to the library the client already uses: a bit for each solid cell, and a colour only for the cells that touch the air, where the old representation kept four bytes for every cell, air and buried ground included.

The mapBeforeNow
Raindance (512 x 512)63-64 MiB6.5-8.8 MiB
A 1024 x 1024 map256 MiB29-34 MiB
“Is this cell solid?” on a 1024 map12.2 ns3.6 ns

The whole server with 127 bots peaks at 33 MB on Raindance and 88 MB on a 1024 x 1024 map, and every mode plays exactly as it did: the same kills, the same captures, the same blocks.

New

  • maps of 1024 x 1024 blocks, on the client and on the server: the size comes from the map itself, and the chunk grid (4096 chunks), the large map, the small map and the view distance all follow it. The 0.75 profile still plays 512 only, because the classic wire carries no size
  • nothings’ public domain generators build maps at any size: caves, forest rivers, fortresses, rainbow towers, skybridges and slopes at 1024 blocks a side, with their spawn areas
  • a join no longer encodes the map: the server loads the ngmap beside the map (or encodes it once and keeps it), plays that very map, and sends it as it is with the cells changed since the load on top. A client that already has the map receives 0 bytes, and a 1024 join costs no CPU (it took 1.1 s before)
  • the map’s top view in the server list, and a map found under any of its names (2fort is 2Fort_CTF)
  • the retail class profile of the first Steam Ace of Spades: walk 5.6 blocks/s, a sprint per class, health 100/70/70/85, each body’s head shot multiplier, the wallet of blocks, falls measured by the distance flown, melee by the spade
  • the retail jump pack: a 28 blocks/s climb, a 1.333 s tank, a 10 s refill that runs in the air too and waits 2 s after a hit
  • zombies play at night: the survivors hunt with their flashlights, and the zombies see the dark as day
  • supply crates fall when the ground under them is dug out or shot away
  • Babel’s bots split into a stair crew, wall builders and hunters, and the wall goes up on the enemy’s side of the staircase
  • the classic modes’ rifle, SMG and shotgun from the TF2 Beta Weapons pack, with their sights and sounds
  • the server list fills a wide window, a phone’s menus are readable, and the large map pinches and drags with two fingers
  • the iPhone draws at the screen’s pixels, so the text is sharp
  • the browser tells you when a new version is deployed, and reloads into it

Fixed

  • a grenade no longer goes off in your hand: the suicides in the kill feed
  • the shot that empties a clip does damage (one rifle shot in ten did nothing)
  • a shot on a spawn-protected body shows its own hit marker instead of reading as lost
  • an arena round’s start no longer leaves you unable to damage anyone
  • the menu’s world comes back when you leave a match, instead of an empty sky
  • the language you picked stays picked
  • bodies wear their team’s colour again
  • bots build the wall in front of them and hold behind it, instead of beside it in the open
  • a 0.75 join to a map with a column of nothing in it no longer kills the server
  • no map of the maps repository takes the server down: 103 runs in every mode, all the way through

The highlight of the week is how maps travel. Ace of Spades maps are VXL files of 2 to 11 MB. Protocol 1.0 has its own map format, ngmap, and this week it took over everywhere it could.

Smaller on the wire

When you join one of our servers, the map comes as ngmap. At the default quality 2Fort is 27 KiB instead of 2180 KiB of VXL, and Raindance 149 KiB instead of 2084. The server encodes it on a thread of its own, so a player joining never freezes the match for everyone else.

No download at all, the second time

The server tells the client the map’s checksum before sending it. If you have that exact map in your cache, the client says so and the server skips the download: you are in the match as soon as the handshake ends. Classic 0.76 servers get the same treatment, and the cache keeps itself to a size you set.

The whole map collection, seven times smaller

The maps repository, the community’s maps published as data, now keeps every map as ngmap at quality 100, where every solid block is exactly where its author put it: 324 MiB instead of 2273 MiB of VXL. A server that lacks a map of its rotation downloads it from there and unpacks it by itself.

Maps go by many names (“2Fort CTF”, 2fort.vxl…). A server now finds a map under its other names, by the shape of its blocks and the repository’s list of aliases.

See the map before you join

  • the server list shows a top view of the map each of our servers is playing, fetched from the server in about a second and cached
  • even the main menu’s backdrop, the island of Raindance, ships as ngmap: 149 KiB instead of 2 MiB

Shoot and Destroy keeps joining the classic 0.75 and 0.76 servers, and the classic servers have grown. The community wrote down a set of protocol extensions, the aosprotocol specification, and ZeroSpades speaks them. This week our client learned them all, written from ZeroSpades’ code and the specification (credited in the source), so a server made for ZeroSpades works with ours.

What a server can now ask of the client

  • ExtInfo: the server lists what it speaks, and the client agrees only to what both sides know
  • Player Properties, 256 players, message types and kick reasons: you are told why you were kicked, and notices arrive as what they are
  • Damage Markers: the hit marker and a number rising over the player you hit
  • Teamplay: teammates’ names through walls, pings with the server’s own colours and labels, marks on enemies, and the compass bar, each only when the server allows it
  • Pie Menu: the server sends its own quick chat rings, picked by what you aim at, and they replace ours on that server
  • Daytime and Weather: the server can call the night, and the world goes dark
  • Flashlight: press F (or tap Back on a gamepad) and your lamp lights the world for everyone, with real shadows
  • UTF-8 chat: accents and Cyrillic both ways, when the server reads them
  • the extended version request, and the draft Player Outfit extension: a server can dress a player as a zombie or as a team of its choice

And a few habits of the other clients

  • the server owns the reload, as in ZeroSpades: the client plays it and waits for the server, so your ammo always agrees with it
  • a team named “Zombies” is drawn as zombies, as ZeroSpades does
  • a match can be recorded as a demo and played back, on any server, as ZeroSpades and KyroSpades do (the format is our own)

Our own server speaks them too: its classic profile (for 0.75 clients) offers the extensions and can call the night, so you can host a classic server with flashlights.

The rest of the week, in one post. Most of it is stuff you will see the moment you open the game.

New

  • The server list is a board in the style of the menus: the servers on the left, the chosen one on the right with a top view of its map and its details. One control switches between Internet, Local, Pinned and Demos, and the d-pad reaches everything
  • Join a friend sits right on that board: type their six-character code in the address box (or press X on a gamepad) and you are in their match, no port forwarding. On a small screen the list takes the whole board and a server opens its own page
  • Zombie nights: a zombie match is played at midnight. Survivors hunt with their flashlights (the bots keep theirs on), and the zombies see the dark in green night vision, with no lamp of their own
  • New classic guns: in every match without classes, the rifle, SMG and shotgun are the TF2 Beta Weapons pack’s, with their sights, shots and reloads (from GameBanana, by The Freeman, Brenex, Navaro and Mateoski, after Valve’s Team Fortress 2 concept art). Matches with classes keep their own guns
  • supply crates drop where the classes play, from crowded kills and where the fighting is hottest, and a crate falls again when you dig, shoot or blow up the block under it. The intel and the tents settle on the ground below too
  • the arena learned from the community’s arena script: several spawn points a team, sides swapped or rotated between rounds, a countdown that keeps you near your spawn, clock warnings, “3 vs 2 remain”, the winner’s colour in the fog, and the last survivors marked for the enemy in the final minute
  • changing your weapon during the arena’s countdown is free and keeps your place
  • Babel’s bots split into jobs: a quarter build a wall with windows between their staircase and the enemy, a few hunt on the ground, and the rest build the staircase
  • on a phone, the Map button opens the large map: drag it with one finger, pinch it with two, tap beside it to close. Phone menus are larger, and a scroll the inner list cannot take goes on to the page round it
  • the home page has the island of Raindance behind its board, flown round by the helicopter
  • in the browser, a new version of the game is announced on the page, with Update now and Later; flashlights are lit per pixel there too, and full screen fills the whole screen
  • a page comparing our client with the others: see Compare

Fixed

  • a countdown no longer leaves you unable to throw a grenade or hurt anyone in the next arena round
  • a language picked in Settings stays picked

A short one to close the week. The game and this site now live on our own domain, shootanddestroy.obex.pw, and the server list comes from master.shootanddestroy.obex.pw.

New

  • the master server on our own domain, for the desktop and the browser alike
  • if our list cannot be reached, the game says so, keeps the 0.75 servers listed and points you at this site and GitHub for news
  • a new icon: a green helmeted face, on every platform, in the main menu and on Android TV’s banner

Fixed

  • ASSIST, ROUND 1, FIGHT! and the other notices are drawn above the crosshair, not on it
  • the chat stands on its bottom line, so a few messages no longer sit under your sights
  • Miner bots in a squad tunnel their own way instead of following the leader over the hills
  • the walls bots build at their posts leave open the way they shoot
  • the client and the server build without a single warning

The biggest day so far. Our servers speak WebRTC now, so the Play page lists them and a click opens the game right in the browser: no download, no install.

New

  • a transport layer on both sides: ENet on the desktop, WebRTC in the browser
  • our own master server: the list of our servers, merged with the 0.75 one in the game
  • ngCTF sounds next gen and the zombie mode sounds like a PS2 horror game: two sound sets of their own, with the classic ones everywhere else
  • menus that tick and chime like the Xbox 360 dashboard
  • sounds for picking a team, a class and a weapon, and the zombie’s dying groan
  • zombie survivors may pick a class when the host allows it
  • the Miner’s shotgun breaks a block with one shot
  • aiming the rocket launcher zooms a little and keeps the crosshair
  • plugins: “/” chat commands, a table kept across restarts, map edits and a refusable login
  • a frame cap for the game and another for the menus
  • the second team is the Green Team, and the scoreboard shows the team scores in big figures
  • bots: Commandos draw the revolver up close, Miners tunnel under the ground, campers raise castle walls on their hills, jetpack wearers fly onto roofs, and squads fill up

Fixed

  • putting down a landmine or a sentry no longer kills you
  • a rocket is no longer refused now and then: the trigger does not spend it
  • bodies no longer bob up and down on flat ground
  • a damaged block’s cracks no longer come out in stripes on Metal
  • bots no longer shoot the wall in front of an enemy
  • an infected player gets its new body on every screen, instead of walking as a corpse
  • a server that refuses the connection no longer closes the game
  • the classic stingers play again, and far gunfire no longer sounds like a radar
  • a 0.75 server’s team names show their accents

Hey guys, Shoot and Destroy has a home on the web, dressed in voxel digi-camo to match the game.

Everything you need is up top: Play has the downloads for every platform, News is where updates land, and Links credits the projects we stand on.

The news page has the small stuff between releases.

Now get out there and spade someone.

A week of work under the hood pays off: the client draws through its own render backends, checked against golden images so the move changes no pixel.

New

  • Metal is the default renderer on macOS
  • a bgfx backend: Direct3D 11, Vulkan, OpenGL, OpenGL ES and Metal, the first that starts is used, and you can pick one in Settings
  • an OpenGL ES 2 backend for handhelds and the browser
  • the client builds for the browser with WebGL 2
  • the client and the server build on Windows
  • a deploy screen to choose your team, instead of the list under the scoreboard
  • a key and a gamepad button for the spectator’s first and third person views
  • hold to aim by default, listed in both control sections
  • arena bots walk lanes across the map instead of meeting in one corridor
  • zombie and arena rounds wait for their first human

Fixed

  • the arena map stays whole, and nobody carries blocks there
  • a mouse or a keyboard takes the game out of touch mode
  • a zombie’s health sits at the bottom centre
  • no two bots stand inside each other

The game now speaks eight languages, and fits the small screens of handheld consoles.

New

  • German, Russian, Turkish, Polish and Czech (a first pass: native speakers, we want your corrections), with fonts for Latin Extended-A and Cyrillic
  • a PortMaster build for R36S class handhelds, and the UI fits 640x480
  • Android and Android TV builds, and the Nintendo Switch homebrew build started
  • protocol 1.2: a player’s update in 19 bytes instead of 39, and nothing sent about an enemy hidden in the fog
  • a server details page: its mechanics, classes, rotation, plugins and best players
  • a native Metal renderer on the Mac, and touch controls made for thumbs
  • Babel’s staircases built by the whole team
  • plugins reach the players, the match and safe server controls from Lua
  • bots build bridges together

Fixed

  • settings are saved when you leave Settings, by any way, and kept in your own folder
  • settings are saved on iPhone too
  • the client uses less memory: textures are freed once the GPU has them
  • Babel’s slab no longer collapses when a pillar under it is dug

Next gen CTF has its four classes, each with its own gun, body and streak perk: Commando, Rocketeer, Marksman and Miner.

New

  • the Commando’s rocket launcher, and a revolver as its second gun
  • the Miner digs a 3x3x3 cube with its spade and fires a drill that bores through the ground
  • the Marksman carries a sniper rifle with its own scope
  • landmines and dynamite, put down from the fifth tool bar slot
  • server owners set every class figure in config.toml or from a plugin
  • Creative: a building-only mode where you fly, with no teams and no bots
  • a first iOS port, playable with touch or a controller
  • touch controls with the controller’s icons, and team and class screens that work with a finger
  • a server picked in the list opens its details, with Connect
  • weapon skins: in the arena every body wears the suit of its gun
  • an MCP server, so admins can run their server through an AI agent
  • the Bots menu is a window of its own, worded for newcomers

Fixed

  • UTF-8 player names
  • Shoot and Destroy shows where BetterSpades or ButterSpades still showed
  • Miner bots run from their own dynamite

Since a phone cannot start a server process, Singleplayer and hosting stay on the desktop builds. The iPhone joins servers like any other client.

Capture the flag splits in two: classic, the 0.75 rules as they were, and next gen, where all the new mechanics live.

New

  • classes in ngCTF, with a class screen, their own bodies and their own streak perks
  • kill assists for every enemy who hurt the victim in its last 10 seconds
  • 3D spotting: the ping key on an enemy marks it for your team
  • revive: a perk that brings a fallen teammate back where it fell
  • a squad rally point the leader drops from the quick chat ring
  • the feel of ngspades: a hurt screen, the clip as a row of rounds, casings that ring, far shots that sound far, stingers for the intel and the rounds
  • a netgraph under the fps box, and filters for the server list
  • menus work with a finger: taps, drags to scroll, the screen keyboard
  • the first run picks the quality and the window size for your machine
  • translations in gettext .po files, ready for Poedit, Weblate or Crowdin
  • a Flatpak for Linux, with the server inside so Singleplayer works in the sandbox
  • zombies: one patient zero, a two hit claw, and a leap you charge by holding jump
flatpak install shootanddestroy-<version>-linux-x86_64.flatpak

Fixed

  • tracers start from the shooter, not from the map’s corner
  • public 0.75 servers that accept any connection are joined with 0.75
  • your movement travels on an unreliable channel, so a lost packet no longer holds the next one back
  • fewer libraries to build: no cglm, lodepng or GLEW any more

One day with the zombie mode, and it already plays very differently.

New

  • zombies are tough and fight with their own two hands
  • a shot slows a zombie, and its high jump has a cooldown
  • zombie bots climb houses with their leap and the spade
  • survivors spawn all over the map and hold the highest place they can reach, together
  • lone survivors on flat ground group up, wall themselves in and cover each other
  • zombies play zombie maps only
  • the minimap is round and turns with you by default

Fixed

  • a zombie’s arms are two arms, not a slab

Big day. Here is what landed:

New

  • a Zombie mode, played like Call of Duty’s Infected on a horror night
  • game modes and plugins in Lua 5.4: King of the hill and Push to start with
  • the client in Portuguese (Brazil) and Spanish, and our server’s notices in your language
  • quick chat, LAN games in the server list, a short tutorial and a title screen
  • local co-op: a window and a gamepad per player, the first step to split screen
  • a compact pause menu, and suspend and resume
  • the feel: camera shake, gun sway and view bob, a death camera that orbits your body, sounds muffled behind walls, a teammate’s name in your crosshair and prompts under it
  • kill feed icons from OpenSpades’ ngspades branch
  • graphics presets and a frame time log
  • forward posts on large maps, and carriers that run home from post to post

Fixed

  • Babel bots no longer walk into the moat, and carriers get down their pillar
  • Babel hunters go up to the slab instead of drowning under it
  • bots rejoin their way from farther off instead of throwing it away

One Lua script can be a whole game mode or change any rule. Plugins live in their own repository, and the server hands them HTTP, JSON and a documented API.

Two days of bot work, and a lighter server along the way.

New

  • bots sneak through tunnels and push for the intel
  • Babel: bots build, break and climb the staircases
  • each team talks its plan over in the team chat before the match starts
  • an overwatch on the high ground, and a defender who mends the base
  • bots throw grenades and use their perks
  • team and weapon change work on our protocol
  • Busan_Port in the rotation

Fixed

  • bots see what is in front of them, reload, and walk without spinning
  • a bot that strays from its way rejoins it instead of planning a new one

Bots in Shoot and Destroy are ordinary players to the server, named Bot_ plus a generated name. This update teaches them to actually play.

New

  • they plan their way to the objective: digging, bridging, swimming out
  • they take cover behind whatever is there
  • they hear digging and react to being shot
  • CTF roles: a defender behind a camouflaged wall, an infiltrator tunnelling with a bodyguard, rushers and attackers
  • squads in CTF, and the score always in sight
  • pings, rumble, gyro aiming and button icons for your controller
  • up to 128 players a match, and each map’s own spawns, intel and protected areas

Fixed

  • bots look and shoot like players: no more hits on every shot
  • perks are earned only in CTF

Difficulty is easy, normal or hard, set in the config or from the in-game menu.

Shoot and Destroy is out in the open. It is an Ace of Spades revival built around a listen server: one program hosts the match and plays in it, friends can join, and server-side bots fill the teams.

  • Singleplayer that is a real server, so offline and online play are the same game
  • pick the mode and the map, with a new Arena mode
  • perks earned by playing: jetpack and sentry gun, no button to press
  • gamepad first: nothing in a match needs a keyboard, and hints follow your device
  • builds for Linux, macOS and Windows

The client still plays on every public Ace of Spades 0.75/0.76 server, so it is a second client for the same community, not a replacement for it.

Grab it on the Play page.