---
title: "Packet 37: Damage"
description: "Broadcasts authoritative block or player damage. Damage type selects exact-cell, area, melee, drill, snowball, and other native expansion behavior."
canonical: "https://aosplay.net/protocol-168/packets/37"
markdown: "https://aosplay.net/docs/protocol-168/packets/37.md"
last_updated: "2026-07-16"
protocol: "Ace of Spades Battle Builder 168"
packet_id_decimal: "37"
packet_id_hex: "0x25"
direction: "S→C"
family: "Combat"
implementation_status: "Sent"
evidence: "Live-verified"
wire_size: "21 bytes"
---

# Packet 37: Damage

> Broadcasts authoritative block or player damage. Damage type selects exact-cell, area, melee, drill, snowball, and other native expansion behavior.

- **Decimal ID:** 37
- **Hex ID:** 0x25
- **Direction:** S→C
- **Family:** Combat
- **Status:** Sent
- **Evidence:** Live-verified
- **Wire size:** 21 bytes

## Implementation note

Snowball sends one reliable zero-damage type-20 event before DestroyEntity (19) so the retail explosion manager predicts impulse.

## Exact wire layout

The application packet ID is the first byte. The remaining rows are in decode order. Byte sizes exclude ENet headers, wrapper prefixes, LZF chunk framing, and compression effects.

| # | Field | Encoding | Bytes | Purpose | Condition |
| ---: | --- | --- | ---: | --- | --- |
| 0 | `packet_id` | u8 | 1 | Always 37 (0x25). | — |
| 1 | `player_id` | u8 | 1 | Compact player-slot identifier. | — |
| 2 | `type` | u8 | 1 | Action- or resource-specific discriminator. | — |
| 3 | `damage` | u8 fixed-point (1/4) | 1 | Damage scalar encoded in quarter units. | — |
| 4 | `face` | u8 | 1 | Voxel face or placement orientation index. | — |
| 5 | `chunk_check` | boolean u8 | 1 | chunk check value. | — |
| 6 | `seed` | u8 | 1 | Deterministic random seed used to reproduce client effects. | — |
| 7 | `causer_id` | i16 LE | 2 | causer id value. | — |
| 8 | `position` | 3 × IEEE-754 f32 LE | 12 | X, Y, and Z floating-point components. | — |

## Encoding conventions

- `LE` means least-significant byte first.
- `fixed16` is two-byte sign-magnitude at 1/64 precision.
- `orientation16` uses the measured 1/8192 orientation mapping.
- NUL strings consume their encoded byte length plus one `00` terminator.
- Counted arrays repeat immediately in the documented order.

## Related resources

- [HTML packet page](https://aosplay.net/protocol-168/packets/37)
- [Complete packet catalog](https://aosplay.net/protocol-168/packets)
- [Packet catalog in Markdown](https://aosplay.net/docs/protocol-168/packets.md)
- [Protocol 168 guide](https://aosplay.net/protocol-168)
