Skip to content

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_alotr2_net_roster_slot5_flags_a Per-slot state bytes (player_record +0x06).
+0x09 slot_flags_b[5] lotr2_net_roster_slot1_flags_blotr2_net_roster_slot5_flags_b Per-slot state bytes (player_record +0x01).
+0x0e slot_ids[5] lotr2_net_roster_slot1_idlotr2_net_roster_slot5_id Per-slot id/status bytes (name block +0x21).
+0x13 player_ids[5] lotr2_net_roster_player1_idlotr2_net_roster_player5_id Five 4-byte player/slot fields.
+0x27 player_names[5][0x14] lotr2_net_roster_player1_namelotr2_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.