# Ace of Spades Revival > The community home for Ace of Spades: Battle Builder, with the BattleSpades dedicated server, revival client, protocol research, and hosting guides. This index points to first-party Markdown generated from the same typed content used by the public website. HTML remains canonical. Protocol certainty is explicit: provisional records must not be described as live-verified behavior. ## Primary documentation - [Project overview](https://aosplay.net/docs/index.md): Project purpose, repositories, and documentation map. - [BattleSpades dedicated server](https://aosplay.net/docs/dedicated-server.md): Explore BattleSpades, the playable clean-room Ace of Spades server with authoritative physics, VXL maps, bots, and six game modes. - [The open Ace of Spades revival client](https://aosplay.net/docs/revival-client.md): Follow the open Ace of Spades Revival client preserving Battle Builder compatibility, voxel combat, construction, destruction, and community development. - [A master server for reconnecting the community](https://aosplay.net/docs/master-server.md): Explore the Ace of Spades master server implementation for verified community registration, heartbeats, discovery, moderation, and the Battle Builder server browser. - [Inside the Ace of Spades protocol 168](https://aosplay.net/docs/protocol-168.md): A readable guide to Ace of Spades protocol 168: ENet transport, packet research, VXL map streaming, prediction, and clean-room verification. - [How to host a BattleSpades server](https://aosplay.net/docs/host-a-server.md): Host an Ace of Spades Battle Builder server with BattleSpades: portable releases, configuration, UDP port 27015, bots, maps, and security. - [About the Ace of Spades Revival](https://aosplay.net/docs/about.md): Meet Ace of Spades Revival, the independent community preserving Battle Builder through a clean-room server, open client, protocol research, and hosting. - [Ace of Spades Revival Player Identity](https://aosplay.net/docs/account.md): Understand Ace of Spades Revival accounts, signed guest profiles, original Steam owner validation, unique nicknames, join tickets, and leaderboard trust. - [Ace of Spades Revival Privacy Notes](https://aosplay.net/docs/privacy.md): A plain-language description of the account, guest, Steam, session, security, and gameplay data the Ace of Spades Revival service is designed to process. ## Protocol 168 - [Complete Protocol 168 packet catalog](https://aosplay.net/docs/protocol-168/packets.md): All packet IDs 0–118, direction, size, implementation state, and evidence status. - [Packet 0: ClockSync](https://aosplay.net/docs/protocol-168/packets/0.md): Both; 9 bytes; Handled + sent; Round-trip clock synchronization. The server returns its loop count while keeping the retail client one simulation tick ahead. - [Packet 1: PlaceDynamite](https://aosplay.net/docs/protocol-168/packets/1.md): C→S; 12 bytes; Handled; Requests a Miner dynamite placement. The server validates tool, stock, range, and support before creating entity type 10 and owning the fuse and blast. - [Packet 2: WorldUpdate](https://aosplay.net/docs/protocol-168/packets/2.md): S→C; 11 + 56P + ΣE + 6T bytes; Sent; The 30 Hz unreliable snapshot stream for remote players, moving entities, and rocket turrets. P is the player count, E contains variable Entity records, and T is the turret count. - [Packet 3: EntityUpdates](https://aosplay.net/docs/protocol-168/packets/3.md): Inactive; 7 + ΣE bytes; Planned; A separate moving-entity delta stream retained in the retail protocol surface. BattleSpades currently carries entity changes through other active paths. - [Packet 4: ClientData](https://aosplay.net/docs/protocol-168/packets/4.md): C→S; 16, 18, or 20 bytes; Handled; Buffered client input applied at its matching simulation tick. Bit 7 of the player byte enables the palette; bits 0–6 hold the player ID. - [Packet 5: SetHP](https://aosplay.net/docs/protocol-168/packets/5.md): S→C; 9 bytes; Sent; Sets local health for spawn, healing, or damage feedback and supplies a source direction for presentation. - [Packet 6: ShootPacket](https://aosplay.net/docs/protocol-168/packets/6.md): C→S; 40 bytes; Handled; A client firearm request. The server validates cadence, origin, orientation, weapon state, and penetration before resolving authoritative hits. - [Packet 7: PaintBlockPacket](https://aosplay.net/docs/protocol-168/packets/7.md): C→S; 14 bytes; Handled; Requests a block colour mutation. The server validates the paint tool, range, and voxel solidity, then journals the authoritative RGB change for late joiners. - [Packet 8: ShootFeedbackPacket](https://aosplay.net/docs/protocol-168/packets/8.md): S→C; 12 bytes; Sent; Replays a remote firearm shot for observers, producing the native muzzle, gunshot, and character animation without duplicating the shooter's local prediction. - [Packet 9: ShootResponse](https://aosplay.net/docs/protocol-168/packets/9.md): S→C; 10 bytes; Sent; Reports an authoritative player hit. All observers can show blood, while only the matching local shooter receives the hit-confirm sound and crosshair response. - [Packet 10: UseOrientedItem](https://aosplay.net/docs/protocol-168/packets/10.md): Both; 21 bytes; Handled + sent; Uses an oriented item such as a legacy grenade-family object. The server validates the active tool, cadence, and stock before accepting or relaying it. - [Packet 11: SetColor](https://aosplay.net/docs/protocol-168/packets/11.md): Both; 5 bytes; Handled + sent; Updates the selected palette colour for block, flare, and Block Cannon tools. The sender already applies its UI choice, so the server broadcasts to observers. - [Packet 12: SetUGCEditMode](https://aosplay.net/docs/protocol-168/packets/12.md): Inactive; 2 bytes; Planned; Toggles the retail user-generated-content editor mode. The layout exists, but BattleSpades does not currently activate the UGC editor workflow. - [Packet 13: SetClassLoadout](https://aosplay.net/docs/protocol-168/packets/13.md): C→S; Variable: 6 + L + ΣS + optional (1 + U); Handled; Submits a class, equipment list, prefab selection, and optional UGC tools as one life-boundary loadout transaction. - [Packet 14: ExistingPlayer](https://aosplay.net/docs/protocol-168/packets/14.md): Inactive; Variable: 19 + name + L + Σprefabs; Planned; Legacy roster-entry shape. BattleSpades intentionally sends CreatePlayer (28) for roster state because this packet stores pickup verbatim and has no safe 0xFF sentinel path. - [Packet 15: NewPlayerConnection](https://aosplay.net/docs/protocol-168/packets/15.md): C→S; 6 + name bytes; Handled; The client's join announcement. Names are normalized to a case-insensitively unique 15-byte wire value before any CreatePlayer response. - [Packet 16: ChangeEntity](https://aosplay.net/docs/protocol-168/packets/16.md): S→C; 5–10 bytes; Sent; Applies one server-owned entity mutation: state, position, velocity, carrier, forward vector, target, fuse, or ammo. - [Packet 17: ChangePlayer](https://aosplay.net/docs/protocol-168/packets/17.md): S→C; 4 or 5 bytes; Sent; Changes an existing player's presentation state. Active modes use action 8 for a through-terrain/high-minimap marker. - [Packet 18: POIFocus](https://aosplay.net/docs/protocol-168/packets/18.md): Inactive; 7 bytes; Planned; Moves the client's point-of-interest focus marker to a world position. - [Packet 19: DestroyEntity](https://aosplay.net/docs/protocol-168/packets/19.md): S→C; 3 bytes; Sent; Removes an entity previously announced to the current GameScene. - [Packet 20: HitEntity](https://aosplay.net/docs/protocol-168/packets/20.md): S→C; 10 bytes; Sent; Invokes the visual impact callback for an authoritative hit on a damageable entity. - [Packet 21: CreateEntity](https://aosplay.net/docs/protocol-168/packets/21.md): S→C; 34 + 4I + 2F bytes; Sent; Creates a map entity, light, deployable, pickup, or projectile. I and F are the integer- and fixed-property counts carried inside the record. - [Packet 22: CreateAmbientSound](https://aosplay.net/docs/protocol-168/packets/22.md): S→C; Variable: 3 + name + 6P bytes; Sent; Registers a map-owned ambient controller. Empty point lists create a global bed; authored points create local emitters. - [Packet 23: PlaySound](https://aosplay.net/docs/protocol-168/packets/23.md): S→C; 7–16 bytes; Sent; Plays a one-shot or looping positional/UI sound, including pickup, round, kill, and observer-only block-tool cues. - [Packet 24: PlayAmbientSound](https://aosplay.net/docs/protocol-168/packets/24.md): S→C; Variable: name + 7–16 bytes; Sent; Starts the streaming ambient GameSound registered by packet 22 and supplies its playback flags, volume, time, position, and attenuation. - [Packet 25: StopSound](https://aosplay.net/docs/protocol-168/packets/25.md): Inactive; 2 bytes; Planned; Stops the looping sound associated with a loop ID. - [Packet 26: PlayMusic](https://aosplay.net/docs/protocol-168/packets/26.md): S→C; Variable: name + 4 bytes; Sent; Starts a named music track at an encoded playback offset. - [Packet 27: StopMusic](https://aosplay.net/docs/protocol-168/packets/27.md): S→C; 1 byte; Sent; Stops the current music track. - [Packet 28: CreatePlayer](https://aosplay.net/docs/protocol-168/packets/28.md): S→C; Variable: 21 + name + L + Σprefabs; Sent; Creates a player character and also serves as the active roster format. Class, loadout, and all selected prefab names come from one committed selection. - [Packet 29: PrefabComplete](https://aosplay.net/docs/protocol-168/packets/29.md): S→C; 1 byte; Sent; Signals the builder that a queued prefab placement has finished. - [Packet 30: BuildPrefabAction](https://aosplay.net/docs/protocol-168/packets/30.md): C→S; Variable: 28 + prefab-name bytes; Handled; Requests a bounded KV6 prefab expansion. The server validates selection, stock, world contact, reservations, orientation, and cell range. - [Packet 31: ErasePrefabAction](https://aosplay.net/docs/protocol-168/packets/31.md): C→S; Variable: 17 + prefab-name bytes; Handled; Requests a UGC prefab carve over a bounded block-index range, ultimately using the verified Damage (37) block-destroy path. - [Packet 32: BlockBuild](https://aosplay.net/docs/protocol-168/packets/32.md): Both; 13 bytes; Handled + sent; Places one voxel using the player's current colour and the specified build type. - [Packet 33: BlockBuildColored](https://aosplay.net/docs/protocol-168/packets/33.md): S→C; 15 bytes; Sent; Places one voxel with explicit RGB, used for prefabs, observers, terrain repair, and persistent Block Cannon impacts. - [Packet 34: BlockOccupy](https://aosplay.net/docs/protocol-168/packets/34.md): Inactive; 12 bytes; Planned; Marks one voxel as occupied by a player/building workflow. - [Packet 35: BlockLiberate](https://aosplay.net/docs/protocol-168/packets/35.md): C→S; 12 bytes; Handled; Requests liberation/destruction of one voxel, primarily through the spade dig path. - [Packet 36: ExplodeCorpse](https://aosplay.net/docs/protocol-168/packets/36.md): Inactive; 3 bytes; Planned; Requests the client to gib/explode a player's corpse for death presentation. - [Packet 37: Damage](https://aosplay.net/docs/protocol-168/packets/37.md): S→C; 21 bytes; Sent; Broadcasts authoritative block or player damage. Damage type selects exact-cell, area, melee, drill, snowball, and other native expansion behavior. - [Packet 38: BlockManagerState](https://aosplay.net/docs/protocol-168/packets/38.md): Inactive; Variable; non-empty record format unresolved; Planned; Carries BlockManager damaged, occupied, and user-owned dictionaries—not VXL topology or a removed-voxel resynchronization stream. - [Packet 39: ServerBlockAction](https://aosplay.net/docs/protocol-168/packets/39.md): Inactive; 5 + N × (7 or 10) bytes in generated writer; Planned; A server-authored batch of compact block items. The recovered retail client path is currently a no-op stub. - [Packet 40: BlockLine](https://aosplay.net/docs/protocol-168/packets/40.md): C→S; 18 bytes; Handled; The retail 1.x client's normal multi-block placement request. The server rasterizes and validates the line between both voxel endpoints. - [Packet 41: MinimapBillboard](https://aosplay.net/docs/protocol-168/packets/41.md): Inactive; Variable: 15 + icon-name bytes; Planned; Creates a coloured, optionally tracking billboard/icon on the minimap. - [Packet 42: MinimapBillboardClear](https://aosplay.net/docs/protocol-168/packets/42.md): Inactive; 3 bytes; Planned; Clears a minimap billboard by entity identifier. - [Packet 43: MinimapZone](https://aosplay.net/docs/protocol-168/packets/43.md): S→C; 21 bytes; Sent; Creates a bounded minimap zone and icon. BattleSpades uses it for the CTF base area at mode start and during late-join replay. - [Packet 44: MinimapZoneClear](https://aosplay.net/docs/protocol-168/packets/44.md): Inactive; 13 bytes; Planned; Clears the minimap zone matching an exact six-coordinate voxel bounding box. - [Packet 45: StateData](https://aosplay.net/docs/protocol-168/packets/45.md): S→C; Variable: 61-byte shell + strings, arrays, and entities; Sent; The per-spawn GameScene snapshot: lighting, physics, mode, teams, class locks, prefabs, static entities, screenshot cameras, and rollover state. - [Packet 46: KillAction](https://aosplay.net/docs/protocol-168/packets/46.md): S→C; 8 bytes; Sent; Broadcasts a death/kill event and its native HUD metadata. - [Packet 47: GenericVoteMessage](https://aosplay.net/docs/protocol-168/packets/47.md): Both; Variable: 6 + candidates + title + description; Handled + sent; Opens, updates, closes, or casts into the native kick/next-map vote overlay. - [Packet 48: InitiateKickMessage](https://aosplay.net/docs/protocol-168/packets/48.md): C→S; 4 bytes; Handled; Requests the start or cancellation path for a player kick vote. - [Packet 49: ChatMessage](https://aosplay.net/docs/protocol-168/packets/49.md): Both; Variable: 4 + text bytes; Handled + sent; Carries player chat and server announcements. Types 0/1 are player channels, type 2 is a private system reply, and type 3 is the global top-screen CHAT_BIG presentation. - [Packet 50: LocalisedMessage](https://aosplay.net/docs/protocol-168/packets/50.md): S→C; Variable: 5 + string ID + parameters; Sent; Displays a string-table announcement with positional parameters and optional parameter localization. - [Packet 51: SkyboxData](https://aosplay.net/docs/protocol-168/packets/51.md): S→C; Variable: 2 + filename bytes; Sent; Selects the retail mesh-environment manifest used for sky, clouds, mist, waves, sun, transforms, and UV animation. - [Packet 52: MapEnded](https://aosplay.net/docs/protocol-168/packets/52.md): S→C; 1 byte; Sent; Triggers the native full-GameScene rollover boundary after end-of-round presentation and map preflight. - [Packet 53: ShowGameStats](https://aosplay.net/docs/protocol-168/packets/53.md): S→C; 1 byte; Sent; Opens the native end-of-round game-statistics screen when a compatible level screenshot exists. - [Packet 54: MapDataStart](https://aosplay.net/docs/protocol-168/packets/54.md): Inactive; 1 byte; Planned; Begins the legacy map-data transfer family. The active BattleSpades path uses MapSyncStart (55). - [Packet 55: MapSyncStart](https://aosplay.net/docs/protocol-168/packets/55.md): S→C; 1 byte; Sent; Starts the active VXL map synchronization stream, normally under wrapper prefix 0x32. - [Packet 56: MapDataChunk](https://aosplay.net/docs/protocol-168/packets/56.md): Inactive; 4 + N bytes; Planned; Carries one chunk in the legacy map-data transfer family. - [Packet 57: MapSyncChunk](https://aosplay.net/docs/protocol-168/packets/57.md): S→C; 4 + N bytes; Sent; Carries one bounded chunk of the active VXL map stream. - [Packet 58: MapDataEnd](https://aosplay.net/docs/protocol-168/packets/58.md): Inactive; 1 byte; Planned; Terminates the legacy map-data transfer family. - [Packet 59: MapSyncEnd](https://aosplay.net/docs/protocol-168/packets/59.md): S→C; 1 byte; Sent; Terminates the active VXL map stream and advances the loader handshake. - [Packet 60: MapDataValidation](https://aosplay.net/docs/protocol-168/packets/60.md): Both; 5 bytes; Handled + sent; Exchanges the map file CRC. The server answers with its authoritative file checksum before streaming. - [Packet 61: PackStart](https://aosplay.net/docs/protocol-168/packets/61.md): Inactive; 9 bytes; Planned; Starts a legacy resource-pack transfer with its byte length and checksum. - [Packet 62: PackResponse](https://aosplay.net/docs/protocol-168/packets/62.md): Inactive; 2 bytes; Planned; Acknowledges or rejects the pending resource-pack transfer. - [Packet 63: PackChunk](https://aosplay.net/docs/protocol-168/packets/63.md): Inactive; 1 + remaining payload bytes; Planned; Carries raw resource-pack bytes. No inner length prefix is present; the decoded packet boundary supplies the length. - [Packet 64: PlayerLeft](https://aosplay.net/docs/protocol-168/packets/64.md): S→C; 2 bytes; Sent; Removes a player slot from the current roster and scene. - [Packet 65: ProgressBar](https://aosplay.net/docs/protocol-168/packets/65.md): Inactive; 11 bytes; Planned; Configures a generic capture/build progress bar with current progress, rate, and a two-colour gradient. - [Packet 66: RankUps](https://aosplay.net/docs/protocol-168/packets/66.md): Inactive; Variable: 5 + rank-up records; Planned; Describes one or more rank/score changes for end-of-match progression presentation. - [Packet 67: GameStats](https://aosplay.net/docs/protocol-168/packets/67.md): S→C; 9 + 8N bytes; Sent; Builds the end-of-round scoreboard/statistics widget for a team and a list of typed player-stat rows. - [Packet 68: UGCObjectives](https://aosplay.net/docs/protocol-168/packets/68.md): Inactive; Variable: 6 + objective records; Planned; Defines custom UGC objective identifiers and integer values for a mode. - [Packet 69: Restock](https://aosplay.net/docs/protocol-168/packets/69.md): S→C; 3 bytes; Sent; Refills one player resource category. Type 0 is full-life/general restock; physical ammo crates must use type 3. - [Packet 70: PickPickup](https://aosplay.net/docs/protocol-168/packets/70.md): S→C; 4 bytes; Sent; Confirms an authoritative objective pickup and initializes the carried tool and burden state. - [Packet 71: DropPickup](https://aosplay.net/docs/protocol-168/packets/71.md): Both; 19 bytes; Handled + sent; Requests and replicates an objective drop with authoritative identity, position, and capped throw velocity. - [Packet 72: ForceShowScores](https://aosplay.net/docs/protocol-168/packets/72.md): Inactive; 2 bytes; Planned; Forces the scoreboard overlay open or releases that override. - [Packet 73: ShowTextMessage](https://aosplay.net/docs/protocol-168/packets/73.md): S→C; 4 bytes; Reversed / unused; Selects one of nine hard-coded end/mode messages for a fixed duration; it is not an arbitrary-text packet. - [Packet 74: FogColor](https://aosplay.net/docs/protocol-168/packets/74.md): S→C; 5 bytes; Sent; Overrides the active fog colour and persists that override into later spawn/rejoin snapshots. - [Packet 75: TimeScale](https://aosplay.net/docs/protocol-168/packets/75.md): Inactive; 3 bytes; Planned; Changes the GameScene time-scale multiplier for a mode rule. - [Packet 76: WeaponReload](https://aosplay.net/docs/protocol-168/packets/76.md): Both; 4 bytes; Handled + sent; Requests a reload and confirms its completion/state to clients. - [Packet 77: ChangeTeam](https://aosplay.net/docs/protocol-168/packets/77.md): C→S; 3 bytes; Handled; Requests a team switch for a player slot. - [Packet 78: ChangeClass](https://aosplay.net/docs/protocol-168/packets/78.md): C→S; 3 bytes; Handled; Requests a class switch for a player slot. - [Packet 79: LockTeam](https://aosplay.net/docs/protocol-168/packets/79.md): Inactive; 3 bytes; Planned; Locks or unlocks joining a team. - [Packet 80: TeamLockClass](https://aosplay.net/docs/protocol-168/packets/80.md): Inactive; 3 bytes; Planned; Locks or unlocks class selection for a team. - [Packet 81: TeamLockScore](https://aosplay.net/docs/protocol-168/packets/81.md): Inactive; 3 bytes; Planned; Locks or unlocks score changes for a team. - [Packet 82: TeamInfiniteBlocks](https://aosplay.net/docs/protocol-168/packets/82.md): Inactive; 3 bytes; Planned; Enables or disables infinite block stock for a team. - [Packet 83: TeamMapVisibility](https://aosplay.net/docs/protocol-168/packets/83.md): S→C; 3 bytes; Sent; Toggles team radar/minimap visibility while an authoritative radar station exists. - [Packet 84: DisplayCountdown](https://aosplay.net/docs/protocol-168/packets/84.md): S→C; 5 bytes; Sent; Updates the native HUD round countdown in seconds. - [Packet 85: SetScore](https://aosplay.net/docs/protocol-168/packets/85.md): S→C; 8 bytes; Sent; Applies a lightweight mid-game team or player score update to the HUD. - [Packet 86: UseCommand](https://aosplay.net/docs/protocol-168/packets/86.md): C→S; 1 byte; Handled; Requests use of the nearest valid interactive object; BattleSpades uses it to mount or dismount an unoccupied machine gun. - [Packet 87: PlaceMG](https://aosplay.net/docs/protocol-168/packets/87.md): C→S; 14 bytes; Handled; Requests placement of a type-7 mounted machine gun. The server owns yaw, team, health, occupancy, and join persistence after validation. - [Packet 88: PlaceRocketTurret](https://aosplay.net/docs/protocol-168/packets/88.md): C→S; 14 bytes; Handled; Requests an Engineer/Rocketeer turret placement. Target selection, projectile creation, health, and persistence remain server-owned. - [Packet 89: PlaceLandmine](https://aosplay.net/docs/protocol-168/packets/89.md): C→S; 12 bytes; Handled; Requests a landmine placement. The server validates it, then owns the four-second arm time, buried proximity detection, and blast. - [Packet 90: PlaceMedPack](https://aosplay.net/docs/protocol-168/packets/90.md): C→S; 13 bytes; Handled; Requests a type-30 MedPack placement. The server owns its three team uses, 25-HP increments, health, and destruction. - [Packet 91: PlaceRadarStation](https://aosplay.net/docs/protocol-168/packets/91.md): C→S; 12 bytes; Handled; Requests a type-36 radar station placement. The server owns its lifetime and team minimap reveal. - [Packet 92: PlaceC4](https://aosplay.net/docs/protocol-168/packets/92.md): C→S; 12 bytes; Handled; Requests an oriented type-38 C4 placement with server-owned stock and ownership tracking. - [Packet 93: DetonateC4](https://aosplay.net/docs/protocol-168/packets/93.md): C→S; 5 bytes; Handled; Requests detonation of only the sender's currently live C4 charges. - [Packet 94: BlockSuckerPacket](https://aosplay.net/docs/protocol-168/packets/94.md): Both; 8 bytes; Handled + sent; Replicates sanitized Block Sucker state while the server performs the authoritative timed voxel pull and block grant. - [Packet 95: DisguisePacket](https://aosplay.net/docs/protocol-168/packets/95.md): C→S; 6 bytes; Handled; Requests a loadout/tool-gated disguise state, later replicated through WorldUpdate state bit 0x02. - [Packet 96: DisableEntity](https://aosplay.net/docs/protocol-168/packets/96.md): Inactive; 3 bytes; Planned; Disables an entity without destroying or removing its scene record. - [Packet 97: PlaceUGC](https://aosplay.net/docs/protocol-168/packets/97.md): Inactive; 13 bytes; Planned; Places or removes a UGC object at a literal voxel coordinate. - [Packet 98: InitialUGCBatch](https://aosplay.net/docs/protocol-168/packets/98.md): Inactive; 2 + 11N bytes; Planned; Transfers an initial batch of UGC scene objects. - [Packet 99: ReqestUGCEntities](https://aosplay.net/docs/protocol-168/packets/99.md): Inactive; 3 bytes; Planned; Requests the UGC entity set for a game mode. The retail class name preserves its original `Reqest` misspelling. - [Packet 100: UGCMessage](https://aosplay.net/docs/protocol-168/packets/100.md): Inactive; 2 bytes; Planned; Carries a compact UGC workflow message identifier. - [Packet 101: UGCMapLoadingFromHost](https://aosplay.net/docs/protocol-168/packets/101.md): Inactive; 2 bytes; Planned; Reports UGC map-loading progress from the host. - [Packet 102: UGCMapInfo](https://aosplay.net/docs/protocol-168/packets/102.md): Inactive; 5 + N bytes; Planned; Carries length-prefixed PNG map information/preview data for a UGC map. - [Packet 103: VoiceData](https://aosplay.net/docs/protocol-168/packets/103.md): Inactive; 4 + N bytes; Planned; Carries one player's voice-chat frame. - [Packet 104: PlaceFlareBlock](https://aosplay.net/docs/protocol-168/packets/104.md): C→S; 11 bytes; Handled; Requests the flare tool's ten-block-cost voxel light placement. The server validates tool, range, contact, colour, and late-join persistence. - [Packet 105: SteamSessionTicket](https://aosplay.net/docs/protocol-168/packets/105.md): C→S; 5 + N bytes; Handshake; The retail client's first application handshake packet. It carries the opaque Steam session ticket that a Steam-enabled game server must validate before accepting the player's identity. - [Packet 106: TerritoryBaseState](https://aosplay.net/docs/protocol-168/packets/106.md): Inactive; 7 bytes; Planned; Updates a territory/base ownership and capture state for territory-control modes. - [Packet 107: DebugDraw](https://aosplay.net/docs/protocol-168/packets/107.md): Inactive; 10, 24, or 34 bytes; Planned; Draws temporary development primitives. Type 0 is a box, type 1 a sphere, and types 2–4 carry only the common header. - [Packet 108: LockToZone](https://aosplay.net/docs/protocol-168/packets/108.md): Inactive; 13 bytes; Planned; Constrains a player or mode to a six-coordinate voxel zone. - [Packet 109: HelpMessage](https://aosplay.net/docs/protocol-168/packets/109.md): Inactive; Variable: 6 + message strings; Planned; Schedules one or more retail help/tutorial localization IDs after a delay. - [Packet 110: ClientInMenu](https://aosplay.net/docs/protocol-168/packets/110.md): C→S; 2 bytes; Handled; Reports whether the client is currently in a menu for handshake and idle gating. - [Packet 111: Password](https://aosplay.net/docs/protocol-168/packets/111.md): Inactive; Variable: 2 + password bytes; Planned; Carries a NUL-terminated server password in the legacy authentication family. - [Packet 112: PasswordNeeded](https://aosplay.net/docs/protocol-168/packets/112.md): Inactive; 1 byte; Planned; Requests that the client provide a server password. - [Packet 113: PasswordProvided](https://aosplay.net/docs/protocol-168/packets/113.md): Inactive; Variable: 2 + password bytes; Planned; Submits the requested NUL-terminated server password. - [Packet 114: InitialInfo](https://aosplay.net/docs/protocol-168/packets/114.md): S→C; Variable: 55-byte shell + 9 strings and counted arrays; Sent; The first loader packet: server identity, mode copy, map filename/checksum, presentation capabilities, rule toggles, disabled equipment/classes, movement multipliers, and ground palettes. - [Packet 115: ForceTeamJoin](https://aosplay.net/docs/protocol-168/packets/115.md): Inactive; 3 bytes; Planned; Forces the receiving player onto a team, optionally immediately. - [Packet 116: PositionData](https://aosplay.net/docs/protocol-168/packets/116.md): C→S; 7 or 13 bytes; Handled; A position-only input shape retained for compatibility tooling. The targeted retail 1.x client does not send it in normal play. - [Packet 117: TeamProgress](https://aosplay.net/docs/protocol-168/packets/117.md): Inactive; 6 or 12 bytes; Planned; Displays objective progress for a team as either a percentage or a numerator/denominator pair. - [Packet 118: SetGroundColors](https://aosplay.net/docs/protocol-168/packets/118.md): Inactive; 2 + 4N bytes; Planned; Sets a counted per-team/per-surface ground-colour palette. ## Combined corpus - [llms-full.txt](https://aosplay.net/llms-full.txt): Project overview, every article, the packet catalog, and every individual packet document in one response. ## Implementation contracts - [Identity and auth API](https://aosplay.net/docs/auth-and-identity.md): PostgreSQL schema, Railway setup, password, guest, join-ticket, nickname, and stat-ingestion contracts. - [Original Steam client compatibility](https://aosplay.net/docs/steam-retail-compatibility.md): Packet 105 state machine, legacy Steam Game Server approval, bridge request, guard rails, and test matrix. - [Master server API](https://aosplay.net/docs/master-server-api.md): Retail routes, field names, response shapes, spawn contract, heartbeats, and stats. ## Combined corpus - [llms-full.txt](https://aosplay.net/llms-full.txt): Project overview, every public article, the packet catalog, and every individual packet document in one response. ## Source and community - [BattleSpades repository](https://github.com/KikoTs/BattleSpades): Clean-room dedicated server. - [Revival client repository](https://github.com/KikoTs/aceofspades_revival): Open client project. - [Progress board](https://trello.com/b/sf5TkSE9/ace-of-spades-community-revival): Public project planning and status.