lotr2_net_msg_roster - DirectPlay roster sync payload#
Header: lotr2_net_msg_roster.h
Summary#
Custom app opcode 3 syncs the multiplayer roster: active player count, several per-slot status byte arrays, per-slot ids, fixed name blocks, and the slot-to-player lookup. It is sent after host join acceptance and when a DirectPlay destroy-player system message removes a player before gameplay.
- Confidence: likely
- Transport: payload inside
lotr2_net_msg - Payload size: 0x91 bytes
- Endianness: little-endian for multi-byte fields
Offset Table#
| Offset | Field | Symbol(s) | Description |
|---|---|---|---|
| +0x00 | player_count |
lotr2_net_roster_player_count |
Active player count. |
| +0x04 | slot_flags_a[5] |
lotr2_net_roster_slot1_flags_a … lotr2_net_roster_slot5_flags_a |
Per-slot state bytes (player_record +0x06). |
| +0x09 | slot_flags_b[5] |
lotr2_net_roster_slot1_flags_b … lotr2_net_roster_slot5_flags_b |
Per-slot state bytes (player_record +0x01). |
| +0x0e | slot_ids[5] |
lotr2_net_roster_slot1_id … lotr2_net_roster_slot5_id |
Per-slot id/status bytes (name block +0x21). |
| +0x13 | player_ids[5] |
lotr2_net_roster_player1_id … lotr2_net_roster_player5_id |
Five 4-byte player/slot fields. |
| +0x27 | player_names[5][0x14] |
lotr2_net_roster_player1_name … lotr2_net_roster_player5_name |
Five fixed 20-byte name blocks. |
| +0x8b | slot_to_player[6] |
lotr2_net_roster_slot_to_player |
Slot lookup bytes (6-byte array base). |
Evidence#
| Claim | Source |
|---|---|
| Payload size is 0x91 | FUN_0044a0d0 writes 4 + 15 + 20 + 100 + 6 bytes. |
| Parser mirrors builder | FUN_0044a36a reads the same sequence and sizes. |
| Used for disconnect sync | lotr2_net_handle_system_message sends opcode 3 after removing a player slot. |
| Used after host accepts join | FUN_00449eaf sends opcode 3 in the host join-accept path. |
Compatibility Notes#
- The five player-name blocks are fixed 0x14-byte slices, not length-prefixed strings.
- The final 6-byte lookup includes index 0 as well as player slots 1-5.
- Opcode 3 is reliable and stock code sends three copies with retry flags.
Open Questions#
- Exact names for each per-slot byte array.
- Whether any name block is guaranteed null-terminated.