How it compares
“Why another Ace of Spades client?” is a fair question. The community has kept this game alive for years with clients of its own, and ours stands on their work: our client is a fork of ButterSpades, itself a fork of BetterSpades; our protocol 1.0 comes from OpenSpades’ ngspades branch; and on the classic servers we speak the extensions ZeroSpades and the aosprotocol specification wrote down. They are credited in the game and on the Links page.
So this page compares features, not people. It says what Shoot and Destroy does, as of today, in terms you can check by playing it or by reading the source.
The family
| Client | What it is | Licence |
|---|---|---|
| Classic 0.75 / 0.76 | the original game’s client (Voxlap) | closed source |
| Jagex’s Ace of Spades | the 2012 remake on Steam, its own protocol and servers | closed source, shut down in 2019 |
| BetterSpades | a C client for 0.75 / 0.76 servers | GPLv3 |
| ButterSpades | a BetterSpades fork with a reworked UI; ours is forked from it | GPLv3 |
| OpenSpades | a C++ client for 0.75 / 0.76 servers | GPLv3 |
| ZeroSpades, KyroSpades | OpenSpades forks with the community’s 0.75 extensions | GPLv3 |
| Shoot and Destroy | a client and a server, built together | GPLv3 |
One client for every server
- Public 0.75 and 0.76 servers, forever, and our own servers over protocol 1.0, from one list. A join tries 1.0, then 0.75, then 0.76 by itself: nothing to pick.
- A server that accepts any handshake and answers with its 0.75 game is recognised, and the client falls back to 0.75 instead of waiting on it.
- The 0.75 extensions of the aosprotocol specification and of ZeroSpades: Player Properties, 256 players, message types, kick reasons, Damage Markers, Teamplay, Pie Menu, Daytime and Weather, Flashlight, UTF-8 chat, the extended version request and the draft Player Outfit. See the news post for what each one does.
- On a 0.75 server the server owns the reload, as ZeroSpades does: the client plays the animation and waits for the server’s word, so your ammo never disagrees with the server after switching tools or firing mid-reload.
- Text is UTF-8 inside the game (accented Latin, Czech, Polish, Turkish, Cyrillic) and is converted only at a classic server’s edge; the menus are in eight languages.
- Several server lists merged into one, pinned servers, LAN games found by broadcast, IPv6, and demos: record any match on any server and play it back with pause, speed and seeking.
- Maps you already have are not downloaded again: a 0.76 server’s map cache and our own 1.0 joins both check the map’s checksum first.
A server in the box, and bots that play
- Play with bots starts the real dedicated server on your machine and joins it. Offline and online are the same game.
- The bots are ordinary players on the server: they plan their way to the objective, dig, bridge and swim, take cover, hear digging and footsteps, split into CTF roles, build Babel’s staircases and walls, tunnel as Miners and leap as zombies. The guide shows the modes they play.
- A friend joins your match with a six-character code, with no port forwarding.
- Our server holds 128 players at 60 ticks a second. With 127 bots a player receives about 26 KB/s, because far bodies are updated less often than near ones (sending every change to everyone cost about 161 KB/s).
Maps that weigh less
- Our servers send maps as ngmap, protocol 1.0’s map format, encoded off the game’s tick so a join never freezes the match: 2Fort goes out as 27 KiB instead of 2180 KiB, Raindance as 149 KiB instead of 2084.
- The maps repository keeps the community’s maps as ngmap with every solid block exact: 324 MiB against 2273 MiB of VXL.
- The server list shows a top view of the map each of our servers is playing, and a server fetches the maps of its rotation it lacks, under the other names a map goes by.
Wherever you play
- Windows (installer or portable), a macOS app drawn with Metal, Linux and Flatpak, the iPhone, PortMaster handhelds, and the browser, no install. Android, Android TV, Apple TV and the Nintendo Switch (homebrew) build today and are next to be played on the devices.
- Renderers: Metal, OpenGL, OpenGL ES 2, and bgfx for Direct3D 11 and 12 and Vulkan, with a fallback when one cannot start.
- Every menu and every action on a gamepad: Xbox, PlayStation and Nintendo button names and icons, rumble, gyro aiming, and aim assist only on servers that allow it.
- Touch controls on phones (a floating stick, tap to fire, hold to dig, a pinch-zoomed map) and a UI scale for handhelds.
How it looks and feels
- On our servers, a day and night cycle and weather: rain, snow, fog and storms with lightning. Flashlights light the world per pixel, with shadows.
- Explosions that throw burning debris, blood, fragments and splashes on hits, and falling structures that bounce once and shatter like stone.
- A fog that stays clear until far away, a view distance up to the whole map, bloom, FXAA and colour grading on the Mac, and a frame cap that follows your display’s refresh rate.
- The first start measures the machine and picks a quality preset, so it runs on modest hardware too.
Where we are not there yet
Fair is fair. As of today the Android, Apple TV and Switch builds still have to be played on the devices, the post effects run on the Mac only, the browser joins our servers only, and there is no voice chat. Each of these is on our list.
If something here is wrong, or another client does it too and deserves the mention, tell us on GitHub.
