netcode-revival: dump the party state machine's internal state
Some checks failed
Lint & Format Check / Format Check (push) Has been cancelled

The trace shows the machine spinning on XNetGetTitleXnAddr (state 1/0). Add a
rate-limited dump of the static party struct (0x82FD9750): state@336, eaip@344,
byte417 (EA flag), byte421 (online), byte423 (EA connected) - so we can see
whether the party bytes are mapped and exactly which gate keeps it stuck.
This commit is contained in:
MiTHRAL 2026-08-28 22:43:17 -04:00
parent 0da17439a7
commit edda6c9a06

View file

@ -172,6 +172,20 @@ void XNetTransport::ForceLiveFlag() {
REXLOG_INFO("xnet trace: live flag 0x82FC8851 {} value={}", REXLOG_INFO("xnet trace: live flag 0x82FC8851 {} value={}",
flag != nullptr ? "mapped" : "NOT MAPPED", flag != nullptr ? "mapped" : "NOT MAPPED",
flag != nullptr ? int(*flag) : -1); flag != nullptr ? int(*flag) : -1);
// Dump the party state machine's internal state (static party struct at
// 0x82FD9750): state@336, eaip@344, byte417 (EA flag), byte421 (online),
// byte423 (EA connected). Tells us exactly where the machine is stuck.
const auto rd8 = [](uint32_t a) -> int {
uint8_t* p = REX_KERNEL_MEMORY()->TranslateVirtual<uint8_t*>(a);
return p != nullptr ? int(*p) : -1;
};
const auto rd32 = [](uint32_t a) -> uint32_t {
uint32_t* p = REX_KERNEL_MEMORY()->TranslateVirtual<uint32_t*>(a);
return p != nullptr ? *p : 0xFFFFFFFFu;
};
REXLOG_INFO("xnet trace: party state={} eaip=0x{:08X} b417={} b421={} b423={}",
rd32(0x82FD98A0), rd32(0x82FD98A8), rd8(0x82FD98F1), rd8(0x82FD98F5),
rd8(0x82FD98F7));
} }
// The flag is the LIVE USER INDEX (not a boolean). The profile lives in // The flag is the LIVE USER INDEX (not a boolean). The profile lives in
// slot 0, so force 0 (any slot answers after the shim fix, but 0 is the // slot 0, so force 0 (any slot answers after the shim fix, but 0 is the