lotr2_net_msg_join - DirectPlay join payloads
Header: lotr2_net_msg_join.h
Summary
Custom app opcode 1 carries a joining client's DirectPlay id, 32-byte display
name, and a join-state field to the host. Opcode 2 carries the host's response:
host id/name plus the host slot, assigned client slot, and session setup state.
- Confidence: likely
- Transport: payload inside
lotr2_net_msg
- Endianness: little-endian for multi-byte fields
Opcode 1 Request
| Offset |
Field |
Symbol |
Description |
| +0x00 |
player_id |
lotr2_net_local_player_id |
Sender DirectPlay player id. |
| +0x04 |
player_name |
lotr2_game_config_block |
32-byte short player name buffer (within 0x41c config block). |
| +0x24 |
join_flags |
lotr2_net_join_flags |
Join capability / host flag field. |
Opcode 2 Reply
| Offset |
Field |
Symbol |
Description |
| +0x00 |
host_player_id |
lotr2_net_local_player_id |
Host DirectPlay player id. |
| +0x04 |
host_name |
lotr2_game_config_block |
32-byte host short name buffer. |
| +0x24 |
local_slot |
lotr2_game_local_player_slot |
Host local slot. |
| +0x28 |
assigned_slot |
lotr2_net_assigned_slot |
Slot assigned to joining peer. |
| +0x2c |
session_state |
lotr2_net_session_setup_state |
Session setup state field. |
Evidence
| Claim |
Source |
| Opcode 1 payload is 0x28 bytes |
lotr2_net_pack_local_id writes 4 + 0x20 + 4 bytes. |
| Opcode 1 parse reads same fields |
FUN_00449eaf reads 4 + 0x20 + 4 bytes. |
| Opcode 2 payload is 0x30 bytes |
lotr2_net_pack_join_data writes 4 + 0x20 + 4 + 4 + 4 bytes. |
| Opcode 2 parse completes handshake |
lotr2_net_on_join_handshake reads those fields and sets lotr2_net_handshake_done. |
Compatibility Notes
- The strings are copied as fixed 32-byte buffers; do not add a length prefix.
- The payload is still wrapped by the 4-byte app-message header and checksum.
- Opcode 1 and 2 are reliable app messages and are triple-sent by stock code.
Open Questions