Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ThalissonTMora/shaiya-chat-native-re/llms.txt

Use this file to discover all available pages before exploring further.

This page documents every known gap in the Shaiya Core V9 chat RE corpus and provides a priority-ranked roadmap for closing what remains. The goal is chat 100% — full wire compatibility, complete server broadcast rules, and an accurate client pipeline model — without reopening areas already closed in WIRE_CRYPTO.md or pslogin-chat-native/ (client 0xA101 recv and ps_login send are both fully closed). Priorities use a P0/P1/P2 scale: P0 blocks emulator and proxy work entirely, P1 is required for fully stock-compatible behavior, and P2 is UI polish or tooling outside the minimum wire-compat scope.

Priority Summary

PriorityThemeStatus
P0char[21] recv/send + padding wireCONFIRMED (static) — tail ≠ zeros (0xCC…); see test/captures/ui_session_20260526_static.log + validate_d1_padding.py
P0Admin recv 0xF1020xF109Closed — 7× .c files + vtable +0x334 / stubs +0x344 / +0x348
P1Balloon gates DAT_* → map §8Closed+0x1D0 = cinematic suppress CONFIRMED; DAT_007c0d8c = [VIDEO] WATER
P1Chat_BroadcastNamed / megaphone 0x1108Closed — stub → World_BroadcastTradeCore queue mode 3, view 7
P1Whisper server patch +0x0BClosed — byte 0x16 cleared; Pattern C dir 0/1 CONFIRMED
P1Balloon 0x1101/0x1107 recv pathCONFIRMED — vtable chain → balloon create @ 0x4126D0 → tick @ 0x412780
P1NativeChatSendUI vs ChatWindow_SubmitChatInputCONFIRMED — FX 3D vs ChatWindow_SubmitChatInputPacketSend_*
P1Server push 0x11090x110BClosed — 4× builders in psgame-chat-native/send/; layouts D/E/G in PACKET_SPEC.md
P2UI pixel-perfect / hooks renderPartial — out of scope for minimum wire-compat
P20xF107/0xF109 client effectClosed — stub vfn; server bind @ CUser+0x5810; chain doc
P10xF108 bound whisper relayClosed — C→S Pattern I @ 0x00480462; S→C dual 0xF102; ADMIN_F108_WHISPER_RELAY.md
P1DAT_022aa816 faction globalCONFIRMED — single write @ 0x0048BFEA from local entity+0xBF4

Scope

The table below defines what is in scope for this gap analysis versus what is tracked elsewhere.
ArtifactScope
game-chat-native/handlers/*, vtable/*, balloon/*, send/*, ui/*Client
psgame-chat-native/handlers/Chat_ProcessIncoming_0047f400.c, broadcast/*Server
0xA101/0xA102 game client, ps_login key blob, crypto counter wireOut of scope (already closed in WIRE_CRYPTO.md / pslogin-chat-native/)

Key Findings

Five client recv handlers all call PacketRead_String (@ 0x005F4780) with a hard-coded count of 0x15 (21 bytes). The function performs a fixed-size memcpy up to param_2 bytes with no null terminator written on the wire.
OpcodeHandler VAEvidence
0x1102 Whisper0x005E5180FUN_005f4780(&local_9c, 0x15) after PacketRead_Scalar 1 B dir
0x1103 Trade0x005E5250FUN_005f4780(local_a0+1, 0x15)
0x1104 Guild0x005E5310Same pattern
0x1108 Megaphone0x005E5540Same pattern
0x1111 Area0x005E57D0Same pattern
Opcodes that do not use char[21]: 0x1101, 0x1105, 0x1107 (Pattern A: u32 charId); 0x1109 (Pattern D); 0x110A (u32 + u16); 0x110B (char[32] @ +0x20).
PacketSend_Whisper @ 0x005ED160 copies param_2[0..4] (5×u32) plus *(param_2+5) — totalling 21 bytes — into the outgoing buffer. NetworkSend is called with size param_3 + 0x18 (24 bytes = 2 opcode + 21 name + 1 len byte). This layout is inferred to match the recv-side char[21] field exactly (5 dwords + 1 byte, not a length-prefixed string).
Three confirmed broadcast sites on the server copy a name from CUser+0x184 into a char[21] stack buffer using a do-while null-terminating loop. Crucially, there is no memset or rep stosd of the tail before SConnection_Send, which means bytes [strlen..20] in the wire name field contain whatever was on the stack — confirmed as 0xCC… in the MSVC debug simulation.
SiteVAEvidence
Guild + alliance 0x8120x00432530char local_a2[21], loop do { *dst = *src; } while (*src++ != '\0')
Megaphone repack 0x11080x0047F400 case 0x1101Copies CUser+0x184 → buffer; FUN_004d55b0(&local_14c, bVar1 + 0x18)
Trade 0x11030x0047F400Same param_1+0x184 copy pattern
Wire name+text total: len + 0x18 (24 bytes = 2 opcode + 21 name + 1 len) — CONFIRMED in FUN_004d55b0(..., bVar1+0x18).Emulator implication: must accept arbitrary tail bytes on recv (client uses C-string semantics); stock server does not zero the tail on send.
All seven admin receive handlers are decompiled in game-chat-native/handlers/Handler_Chat_Admin_F*.c. The vtable layout is:
  • +0x334: main admin recv vfn
  • +0x344, +0x348: stub entries
Server-side:
  • F107/F109: send opcode+char[21], size 0x17; server stores bind @ CUser+0x5810 = target +0x128; F109 C→S is opcode-only (no body).
  • F108: handler at 0x00480462; requires CUser+0x5810 != 0; relays to target as dual 0xF102, never 0xF108; no bind or offline → 0x1106 size 3.
  • Stock Game.exe contains zero mov $0xF107/$0xF108/$0xF109 send sites — those opcodes originate from a GM tool not bundled in the client.

P2 Items (Out of Minimum Wire-Compat Scope)

The following P2 items are documented for completeness but are not required to achieve basic wire compatibility with a stock server.
#ItemNotes
P2-1Rename NativeChatSendUIChatWorldFX_SendUI✅ Done — manifest + ui/ChatWorldFX_SendUI_0045bbe0.c; no network path in body
P2-2Hooks ChatWindow_Render_* @ 0x47DB8DHide native UI; landmarks present but not decomped
P2-3GmCommand_Dispatch / staff overlayOutside minimum wire scope
P2-4Pixel-perfect tabs / IMEChatUIFont_*, InputCapture — visual only
NativeChatSendUI @ 0x0045BBE0 and ChatWindow_SubmitChatInput @ 0x0047A4B0 are not alternatives for the same chat send. The former spawns 3D world FX / object queues with no NetworkSend call in its body; the latter handles the Enter-key submit path that ultimately calls PacketSend_*. The symbol was renamed to ChatWorldFX_SendUI to eliminate this confusion.

Actionable Roadmap

P0 — Blocks emulator / proxy 100% compat

#TaskStatus
P0-1char[21] padding on wire — confirm tail in live guild 0x1104 captureCONFIRMED (static); live hex optional
P0-2Decompile admin recv 0xF1020xF109game-chat-native/handlers/Handler_Chat_Admin_F*.c
P0-3Wire layouts for admin recvPACKET_SPEC.md + CHAT_CHANNEL_MAP.md §2

P1 — Full stock chat behavior

#TaskStatus
P1-1Decompile Chat_PacketBuilder_1109/110A/110Bpsgame-chat-native/send/*.c
P1-2Balloon gate booleansCHAT_CHANNEL_MAP.md §8
P1-3Chat_BroadcastNamed real bodyChat_BroadcastNamed_chain.md
P1-4Whisper server patch +0x0BPACKET_SPEC.md § Whisper + handler L105/L138

P2 — UI / Polish

#TaskNotes
P2-1Rename NativeChatSendUI✅ Complete
P2-2Render hooksLandmarks exist; out of wire scope
P2-3GM command full list3139-line decomp available; only notice subset tested
P2-4Pixel-perfect IMEChatUIFont_*, InputCapture
For the runtime validation items (D3/D4/D5) that remain open, see Missing Artifacts.

Build docs developers (and LLMs) love