Network protocol

From Ace of Spades Wiki
Revision as of 11:51, 28 May 2011 by Matpow2 (Talk | contribs)

Jump to: navigation, search

The network protocol of Ace of Spades is rather simple (even though it hasn't been fully documented yet).

Overview

The protocol uses UDP. Pretty much all variables are big-endian (apart from a few), and every datagram packet consists of:

  • A 2-byte header, consisting of flags (compressed, has timer), an unique value, and the connection id.
  • A 2-byte timer (if the timer flag is set)
  • Packets data (this is compressed if the compressed flag is set)

The compression is probably dynamic Huffman (see pyspades for a decompression routine).

Every packet consists of

  • 1-byte packet ID (and a flag that's set if an ACK is wanted)
  • 1-byte sequence type (0 and 0xFF - basically,
  • 2-byte sequence number (used for ACK)
  • Packet-specific data

There are 11 different packet types:

  • 1 -> ACK
  • 2 -> Connection request
  • 3 -> Connection response
  • 4 -> Disconnect
  • 5 -> Ping
  • 6 -> Sized data (includes chat messages, sending name, position data, etc.)
  • 7 -> Sized unknown (not used?)
  • 8 -> Sized map data (sent in chunks)
  • 9 -> Unreliable sized data with additional sequence (for orientation)
  • 10 -> Unknown (used)
  • 11 -> Unknown (not used?)

For the sized data types, there are different packet types for master/server/client. For further reading, see pyspades.

pyspades

pyspades is a project that attempts to document the protocol and write an alternative server in Python.

It can be found at http://code.google.com/p/pyspades/

The information above was taken from this project. Findings and contributions should be made to pyspades for a better understanding of the protocol.

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox