01

A real server, not a packet relay

The aim is a complete and hackable server that behaves like the original authority expected by the retail client.

BattleSpades accepts the stock Steam client, the non-Steam client, and the open revival client build. Connection compatibility is only the first layer. The server re-simulates players, resolves combat, owns the voxel world, advances game modes, and distributes state back to every connected peer.

That server-authoritative model matters because it creates one shared truth. A player may predict movement locally so controls feel immediate, but the fixed-rate server remains responsible for the result. The implementation was calibrated against the compiled client instead of relying on remembered behavior or approximate constants.

02

What already works

The current server covers the complete minute-to-minute combat loop: walking, sprinting, crouching, wading, climbing, jumping, hitscan weapons, headshots, grenades, damage, kill feeds, graves, timed respawns, ammo crates, and health crates. Block placement and destruction operate on the exact aimed cell, with debris and structure collapse propagated to clients.

Six modes give those systems a purpose rather than leaving them as disconnected demonstrations. Team Deathmatch, Capture the Flag, Classic CTF, Arena, gangster VIP, and Zombie infection each have their own runtime rules and objective flow.

  • Full VXL map streaming with CRC validation
  • BlockLine construction, spade digging, bullet damage, and flood-fill collapse
  • Grenade fuse, bounce, line-of-sight blast damage, and 3×3×3 terrain destruction
  • Objective-aware bots with voxel navigation and class actions
  • Player and administrator commands, team management, and plugin hooks
03

Readable logic with compiled hot paths

BattleSpades splits responsibilities deliberately. Python holds the game rules, modes, players, commands, plugins, and orchestration where maintainers need clarity. Cython handles physics, VXL and KV6 operations, byte-level packet work, and vector math where predictable performance matters.

The ENet transport uses the same protocol family as the original client: protocol version 168, a single channel, and range-coder compression. Networking and gameplay drains have explicit budgets so a burst of packets, world mutations, entity work, or plugin activity cannot quietly consume the entire tick.

  • aoslib: compiled physics, VXL world operations, and KV6 voxel models
  • shared: packet readers, writers, protocol types, and vector math
  • server: 60 Hz loop, connections, players, combat, and world management
  • modes: isolated rules for TDM, CTF, Arena, VIP, and Zombie play
  • plugins and commands: customization without rewriting the simulation core
04

Measured against the client

Reverse engineering becomes useful only when findings are repeatable. BattleSpades keeps captured behavior, packet research, deterministic scenarios, and regression tests close to the implementation. Movement replay gates compare client and server trajectories over thousands of frames, with the accepted mean position delta in the millimetre range.

Capacity validation is executable rather than aspirational. The current Windows and Python 3.12 baseline sustains the 50-player gate at roughly 60 Hz with sub-5 ms tick p99. That does not promise identical results on every host, but it provides a published baseline that future changes must continue to meet.

05

Run it or build it

Portable alpha archives package the launcher, native runtime, editable configuration, maps, prefabs, plugins, and license notices. Builds are prepared for Windows, Linux, and macOS on x86-64 and ARM64, so hosting does not require a system Python installation or local compiler.

Developers can build from source with Python 3.10 through 3.12 and a C/C++ compiler. The repository includes installation scripts, release checks, operator documentation, protocol notes, and contribution guidance. Start with the hosting guide if the goal is a game night; start with the repository if the goal is changing the battlefield.

06

Common questions

Does BattleSpades work with the original Ace of Spades client?

Yes. It is designed for the original Ace of Spades 1.x Battle Builder protocol and is tested with the stock Steam client, the non-Steam client, and the open revival client build.

Is BattleSpades a fork of an old dedicated server?

No. It is a clean-room, from-scratch implementation built from observed client behavior, packet research, and repeatable verification.

Can I add custom modes or server behavior?

The readable Python game layer, mode modules, commands, and plugin hooks are intended to make experimentation possible without forcing every change into compiled physics code.

How many players can it host?

The default configuration uses 24 player slots. An executable performance gate validates a 50-player workload at approximately 60 Hz with sub-5 ms tick p99 on the documented Windows baseline.