Data Map
This appendix tracks important globals, tables, structures, virtual tables, and persistent buffers. See Runtime UI Memory Map for process-relative pointer chains, Pane tree traversal, class-specific UI fields, and safe snapshot guidance. C Structure Layouts provides packed C99 views of the same established fields without replacing the detailed offset tables below.
| Address | Current IDA name | Type or size | Owner | Purpose | Detailed page | Notes |
|---|---|---|---|---|---|---|
Darkages.exe:0x004D64C0 | app_window_active | uint8_t | Application and Win32 | Records whether the main window is treated as active. | Startup and Shutdown | Set before the message loop and by WM_ACTIVATEAPP handling. |
Darkages.exe:0x004E0F00 | net_xor_table | uint32_t[256] | Socket transformation | Generated XOR byte table. | Sequence and XOR Transformation | Each dword repeats one byte four times. Initial contents implement function 0. |
Darkages.exe:0x004E2D70 | ui_bulletin_session | void * | UI and bulletin/mail | Static root of the active heap BulletinSession Pane. | Runtime UI Memory Map | Ten child pointers begin at object +0xF8, current index is +0xF5, active child is +0x120, and the request-wait byte is +0x124. RVA 0x000E2D70. |
Darkages.exe:0x004E2E40 | ui_lag_indicator_pane | void *, object 0xF8 bytes | UI and timing | Static root of the persistent movement-latency indicator. | Runtime UI Memory Map | Smoothed millisecond value is at pane +0xF4. RVA 0x000E2E40. |
Darkages.exe:0x004E32A4 | ui_equip_pane | void * | UI and character state | Static root of the persistent heap User Equip pane. | Runtime UI Memory Map | Slot identifier expression is +0xB22 + 2 * slot; names use +0xB3E + 0x80 * (slot - 1); embedded legend/details ownership is at +0x11CC. RVA 0x000E32A4. |
Darkages.exe:0x004E32C0 | event_manager_instance | void * | Events and network | EventMan singleton that converts worker records into Event objects. | Internal Event Routing | Published by event_manager_ctor and started separately from event_dispatcher. |
Darkages.exe:0x004E3564 | ui_users_dialog_pane | void * | UI | Static root of the heap Users Dialog Pane. | UI, Input, and Packet Flows | Null before the first CWho UI action creates the pane; reused and shown by later SShowUsers replies. RVA 0x000E3564. |
Darkages.exe:0x004F5198 | ui_local_user | void *, object 0x776C bytes | UI, character, and timing | Owning in-game root of the local user object. | Runtime UI Memory Map | Movement sequence and timing fields are at +0x6F28 through +0x6F34. RVA 0x000F5198. |
Darkages.exe:0x004F51AC | ui_main_menu_pane | void *, object 0x124 bytes | UI | Current heap MainMenuPane. | UI Panes and Registries | Non-null during the main-menu phase and cleared on transition or teardown. RVA 0x000F51AC. |
Darkages.exe:0x004F51B0 | ui_map_pane | void *, object 0xF38 bytes | UI | Current heap MapPane. | UI Panes and Registries | Published after game-pane creation and cleared during game teardown. RVA 0x000F51B0. |
Darkages.exe:0x004F51B4 | ui_background_pane | void *, object 0x144 bytes | UI | Current heap BackgroundPane. | UI Panes and Registries | Published with the game UI and cleared during game teardown. RVA 0x000F51B4. |
Darkages.exe:0x004F51B8 | event_deferred_delete_queue | void * | Events | Holds objects awaiting deletion by the dispatcher tick. | Internal Event Routing | Created during initialization, drained from last element to first, and deleted after the dispatcher. |
Darkages.exe:0x004F51BC | net_socket_instance | void * | Network and EventMan | Static root of the active heap Socket object. | IPC, Rules, and State | EventMan owns the Socket at object +0x68, publishes this root during construction, and clears it during destruction. RVA 0x000F51BC. |
Darkages.exe:0x004F51C4 | app_config | void * | Application | Global configuration object. | Startup and Shutdown | Constructed from Darkages.cfg when English.nfo exists, otherwise from Legend.cfg. |
Darkages.exe:0x004F51C8 | ui_screen_pane | void * | UI and rendering | Global 640 by 480, 8-bit screen pane. | Startup and Shutdown | Registered with the event dispatcher and reactivated around the message loop. |
Darkages.exe:0x004F51CC | ui_screen_registry | void * | UI | Heap Screen composition hierarchy. | UI Panes and Registries | Stride 0x3F; list fields are at +0x0C, +0x14, +0x18, and +0x1C. RVA 0x000F51CC. |
Darkages.exe:0x004F51D0 | event_dispatcher | void * | Events | Global event dispatcher and timer-worker object. | Internal Event Routing | Created and started by app_initialize; destroyed by app_shutdown. |
Darkages.exe:0x004F51D4 | app_error_code | int32_t | Application | Process-wide subsystem initialization error. | Startup and Shutdown | Checked after most constructors and before the message loop. |
Darkages.exe:0x004F51DC | app_main_window | HWND | Application and Win32 | Main DAClass window handle. | Startup and Shutdown | A null result from CreateWindowExA is stored but not rejected. |
Darkages.exe:0x004F51E0 | app_instance | HINSTANCE | Application and Win32 | Saved process instance handle. | Startup and Shutdown | Assigned by app_win_main after class registration. |
Darkages.exe:0x004F51F4 | app_shutdown_requested | uint8_t | Application | Requests termination of the blocking message loop. | Startup and Shutdown | Observed only after GetMessageA returns. Several writers also post a message to wake the loop. |
Darkages.exe:0x004FA0E0 | app_single_instance_mutex | HANDLE | Application | Handle for Nexon.SingleInstance. | Startup and Shutdown | Closed and cleared only after normal app_shutdown. |
Darkages.exe:0x004FA160 | util_memory_manager_instance | void * | Cross-subsystem memory | Static MemoryMan root used by client allocation and free wrappers. | Hooks and Injection | Required when an injected server packet will be released by dispatcher cleanup. RVA 0x000FA160. |
Darkages.exe:0x004FC244 | ui_local_user_singleton | void * | UI and character state | Class-level alias of the active local user object. | Runtime UI Memory Map | Set by ui_local_user_ctor and cleared by ui_local_user_dtor. RVA 0x000FC244. |
Darkages.exe:0x004FD320 | app_virus_check_failure_detail | char[256] | Application checks | Detail inserted into the virus-scan failure prompt. | Input and Windows Events | Used when WM_USER + 0x2046 arrives with zero wParam. |
Darkages.exe:0x004FD420 | app_virus_report_module | char[256] | Application checks | First infected-module name reported to the window thread. | Input and Windows Events | Its address is posted in wParam for WM_USER + 0x2046. |
Darkages.exe:0x004FD5A0 | net_xor_key | key storage, at least 13 bytes | Socket transformation | Runtime repeating XOR key. | Sequence and XOR Transformation | Constructor default is ASCII NexonInc.. Negotiated updates require at most 9 bytes. |
Darkages.exe:0x004FD5AC | net_xor_key_length | int32_t | Socket transformation | Number of bytes in the active key. | Sequence and XOR Transformation | Default is 9. |
Darkages.exe:0x004FD5B0 | net_xor_key_repeated | uint8_t[48] | Socket transformation | Four adjacent copies of the key. | Sequence and XOR Transformation | Supports optimized four-byte XOR loops. |
Darkages.exe:0x004FD5E0 | net_c_send_sequence | uint8_t | Socket transformation | Sequence inserted after ordinary transformed client actions. | Sequence and XOR Transformation | Zero-initialized at process load and incremented modulo 256 only by the transformed client encoder; cleartext bypass actions do not consume it. |
Darkages.exe:0x004FD640 | ui_terminal_pane | void *, object 0xF78 bytes | UI | Current heap TerminalPane. | UI Panes and Registries | Published by the constructor, returned by ui_get_terminal_pane, and cleared by the destructor. RVA 0x000FD640. |
Darkages.exe:0x005002C0 | ui_aggrement_dialog_pane_vtable | virtual table | AggrementDialogPane | Runtime class discriminator for the agreement dialog. | Pane Virtual Table Inventory | Aggrement is the spelling retained in the binary. |
Darkages.exe:0x00500700 | ui_background_pane_vtable | virtual table | UI | Concrete BackgroundPane handler table. | UI Panes and Registries | Socket slot +0x40 handles server portrait requests. |
Darkages.exe:0x00501E60 | ui_bulletin_session_vtable | virtual table | BulletinSession | Runtime class discriminator for the bulletin and mail session Pane. | Runtime UI Memory Map | Socket slot +0x40 claims action 0x31. RVA 0x00101E60. |
Darkages.exe:0x00501EC0 | ui_bulletin_dialog_pane_vtable | virtual table | BulletinDialogPane | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Socket slot claims action 0x31. |
Darkages.exe:0x00501F40 | ui_article_list_dialog_vtable | virtual table | ArticleListDialog | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Custom keyboard and editing handlers. |
Darkages.exe:0x00501FC0 | ui_mail_list_dialog_vtable | virtual table | MailListDialog | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Custom keyboard and completion handlers. |
Darkages.exe:0x005020C0 | ui_new_article_dialog_vtable | virtual table | NewArticleDialog | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Control-click handler is at vslot +0x4C. |
Darkages.exe:0x00502140 | ui_new_mail_dialog_vtable | virtual table | NewMailDialog | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Control-click handler is at vslot +0x4C. |
Darkages.exe:0x005021C0 | ui_board_list_dialog_vtable | virtual table | BoardListDialog | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Has a class-specific timer override. |
Darkages.exe:0x00502240 | ui_article_dialog_vtable | virtual table | ArticleDialog | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Bulletin-family mouse and socket handlers. |
Darkages.exe:0x005022C0 | ui_mail_dialog_vtable | virtual table | MailDialog | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Bulletin-family mouse and socket handlers. |
Darkages.exe:0x005023E0 | ui_article_list_pane_vtable | virtual table | ArticleListPane | Runtime class discriminator for the scrollable article list. | Pane Virtual Table Inventory | DrawCell virtual is at +0x84. |
Darkages.exe:0x00502580 | ui_mail_list_pane_vtable | virtual table | MailListPane | Runtime class discriminator for the scrollable mail list. | Pane Virtual Table Inventory | Selection and DrawCell virtuals are at +0x80/+0x84. |
Darkages.exe:0x00506C80 | ui_legend_dialog_pane_vtable | virtual table | LegendDialogPane | Runtime class discriminator for the outer character-legend dialog. | Pane Virtual Table Inventory | The inner control vtable at 0x00506BE0 remains unnamed. |
Darkages.exe:0x00509C20 | ui_lag_indicator_pane_vtable | virtual table | lag indicator pane | Runtime discriminator for the persistent movement-latency indicator. | Runtime UI Memory Map | Draw vslot +0x48 selects one of four statcon.epf frames. RVA 0x00109C20. |
Darkages.exe:0x0050C6C0 | ui_equip_pane_vtable | virtual table | User Equip pane | Runtime discriminator for the persistent equipment and self-look Pane. | Runtime UI Memory Map | RVA 0x0010C6C0. |
Darkages.exe:0x0050D180 | event_dispatcher_vtable | void *[8] | Events | Virtual table for pane dispatch, work processing, wait handling, and periodic ticks. | Internal Event Routing | Slot +0x10 points to event_dispatcher_tick. |
Darkages.exe:0x0050D720 | event_manager_vtable | void *[8] | Events and network | EventMan worker and dispatch virtual table. | Internal Event Routing | Slot +0x10 points to event_manager_periodic_noop; slot +0x14 reaches event_process_work_item. |
Darkages.exe:0x0050D740 | event_vtable | void *[2] | Events | Runtime discriminator installed in copied mouse, keyboard, and socket Event objects. | Hooks and Injection | Event objects are 0x24 bytes in this build. RVA 0x0010D740. |
Darkages.exe:0x00510300 | ui_game_buttons_pane_vtable | virtual table | GameButtonsPane | Runtime discriminator for the persistent in-game content owner. | Runtime UI Memory Map | RVA 0x00110300. |
Darkages.exe:0x00510420 | ui_skill_inventory_pane_vtable | virtual table | skill inventory parent | Runtime discriminator for the 36-entry skill inventory. | Runtime UI Memory Map | RVA 0x00110420. |
Darkages.exe:0x00510480 | ui_spell_inventory_pane_vtable | virtual table | spell inventory parent | Runtime discriminator for the 36-entry spell inventory. | Runtime UI Memory Map | RVA 0x00110480. |
Darkages.exe:0x005106E0 | ui_users_dialog_pane_vtable | virtual table | Users Dialog Pane | Runtime discriminator for the reusable users dialog. | Runtime UI Memory Map | RVA 0x001106E0. |
Darkages.exe:0x005134E0 | ui_human_image_control_pane_vtable | virtual table | HumanImageControlPane | Runtime class discriminator for the human image control. | Pane Virtual Table Inventory | Draw virtual is at +0x48. |
Darkages.exe:0x00514820 | ui_skill_slot_pane_vtable | virtual table | skill slot child | Runtime discriminator for a populated skill slot. | Runtime UI Memory Map | RVA 0x00114820. |
Darkages.exe:0x00514880 | ui_spell_slot_pane_vtable | virtual table | spell slot child | Runtime discriminator for a populated spell slot. | Runtime UI Memory Map | RVA 0x00114880. |
Darkages.exe:0x005177C0 | ui_main_menu_pane_vtable | virtual table | MainMenuPane | Includes mouse, keyboard, and server-packet handlers. | UI Panes and Registries | Packet handler is ui_main_menu_handle_server_packet. |
Darkages.exe:0x00519280 | ui_map_pane_vtable | virtual table | MapPane | Includes mouse, keyboard, timer, and in-game server handlers. | UI Panes and Registries | Socket Event virtual slot +0x40 points to ui_map_dispatch_server_packet. |
Darkages.exe:0x0051B6C0 | ui_item_list_pane_vtable | virtual table | ItemListPane | Runtime class discriminator for the scrollable item list. | Pane Virtual Table Inventory | DrawCell virtual is at +0x84. |
Darkages.exe:0x0051BE60 | ui_monster_image_control_pane_vtable | virtual table | MonsterImageControlPane | Runtime class discriminator for the monster image control. | Pane Virtual Table Inventory | Draw virtual is at +0x48. |
Darkages.exe:0x0051C0C0 | ui_question_message_dialog_vtable | virtual table | QuestionMessageDialog | Runtime class discriminator for the question dialog. | Pane Virtual Table Inventory | Answer sender is at class vslot +0x74. |
Darkages.exe:0x0051C140 | ui_question_message_face_dialog_vtable | virtual table | QuestionMessageFaceDialog | Runtime class discriminator for the faced question dialog. | Pane Virtual Table Inventory | User-dialog and answer virtuals are at +0x64/+0x74. |
Darkages.exe:0x0051D700 | ui_monster_pane2_vtable | virtual table | MonsterPane2 | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | StartMove virtual is at +0x64. |
Darkages.exe:0x0051E980 | ui_local_user_vtable | virtual table | NewUser local-user pane | Runtime discriminator for the active local user object. | Runtime UI Memory Map | Socket vslot +0x40 dispatches SMove and the other local-user actions. RVA 0x0011E980. |
Darkages.exe:0x0051FB00 | ui_effect_object_pane_vtable | virtual table | EffectObjectPane | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Timer vslot +0x44 is class-specific. |
Darkages.exe:0x00520660 | ui_option_pane_vtable | virtual table | OptionPane | Runtime class discriminator for the main options dialog. | Pane Virtual Table Inventory | Mouse, key, socket, and timer slots are all class-specific. |
Darkages.exe:0x005207E0 | ui_exit_wait_pane_vtable | virtual table | exit-wait pane | Includes the server action 0x4C handler used by the orderly-exit exchange. | SReconnect | Installed by ui_exit_wait_pane_ctor; the source-level C++ class name is not yet established. |
Darkages.exe:0x005213A0 | ui_pane_vtable | virtual table | UI | Base Pane lifecycle and event slots. | UI Panes and Registries | Screen slots are +0x28/+0x2C; event registration is +0x30/+0x34; handlers begin at +0x38. |
Darkages.exe:0x00524CA0 | ui_screen_registry_vtable | virtual table | UI | Screen composition registry table. | UI Panes and Registries | Owns packed 0x3F-byte Screen nodes. |
Darkages.exe:0x00524CE0 | ui_screen_pane_vtable | virtual table | UI and rendering | Persistent ScreenPane handler table. | UI Panes and Registries | Keyboard and timer slots have concrete overrides. |
Darkages.exe:0x00526140 | ui_server_select_dialog_pane_vtable | virtual table | ServerSelectDialogPane | Includes the action 0x56 server-list handler. | UI Panes and Registries | Constructor and deletion diagnostics establish the class name. |
Darkages.exe:0x00526940 | net_socket_vtable | virtual table | Socket | Socket work-item interface. | Networking | Slot +0x10 points to net_poll_receive; slot +0x14 reaches net_process_work_item. |
Darkages.exe:0x00528280 | ui_spell_book_dialog_vtable | virtual table | SpellBookDialog | Runtime class discriminator for the spell-book dialog. | Pane Virtual Table Inventory | Draw virtual is at +0x48. |
Darkages.exe:0x005282E0 | ui_skill_book_dialog_vtable | virtual table | SkillBookDialog | Runtime class discriminator for the skill-book dialog. | Pane Virtual Table Inventory | Draw virtual is at +0x48. |
Darkages.exe:0x00529000 | ui_terminal_pane_vtable | virtual table | TerminalPane | Includes mouse, keyboard, and terminal server-packet handlers. | UI Panes and Registries | Installed by ui_terminal_pane_ctor. |
Darkages.exe:0x0052CFA0 | ui_weather_pane_vtable | virtual table | WeatherPane | Runtime class discriminator and Event handler table. | Pane Virtual Table Inventory | Timer and Draw virtuals are class-specific. |
GameButtons content fields
These offsets are relative to the GameButtons owner found through the Screen or Event hierarchy. They connect persistent visible content to the owner even though the owner itself does not have a static root. The Runtime UI Memory Map records the full traversal and class-specific layout.
| Offset | Width | Working field | Reads and writes |
|---|---|---|---|
+0x00F4 | 4 | map_pane | Constructor-owned link that normally matches ui_map_pane. |
+0x0100 | 1 | equipment_selected | Updated with the other four button-state bytes during content selection. |
+0x0108 | 1 | skill_selected | Updated with the other four button-state bytes during content selection. |
+0x0110 | 1 | spell_selected | Updated with the other four button-state bytes during content selection. |
+0x0118 | 1 | chat_selected | Updated with the other four button-state bytes during content selection. |
+0x0120 | 1 | status_selected | Updated with the other four button-state bytes during content selection. |
+0x0124 | 4 | current_content_pane | Compared and replaced by all five content selectors. |
+0x0130 | 4 | chat_pane | Selected by F/f or content index 3. |
+0x0134 | 4 | status_pane | Selected by G/g or content index 4. |
+0x0138 | 4 | equip_pane | Selected by A/a or content index 0; same-pane selection can toggle visibility. |
+0x013C | 4 | skill_inventory_pane | Selected by S/s or content index 1. |
+0x0140 | 4 | spell_inventory_pane | Selected by D/d or content index 2. |
+0x0144 | 4 | system_message | Constructor-owned link used by the GameButtons graph. |
Worker queue and bounded ring layouts
The dispatcher, EventMan, and Socket begin with the same 0x68-byte worker base. These fields establish the in-process wake point and the native queue state relevant to an Event Proxy.
| Offset | Width | Working field | Reads and writes |
|---|---|---|---|
+0x00 | 4 | vtable | Derived worker vtable. Periodic virtual slot is +0x10. |
+0x0C | 4 | wait_timeout_ms | INFINITE by default; dispatcher changes it to 1. |
+0x10 | 1 | wait_handle_count | Number of entries beginning at +0x14. |
+0x14 | 64 | wait_handles[16] | Entry 0 is the work semaphore released after a native queue push. |
+0x54 | 4 | work_queue | Pointer to the synchronized bounded ring. |
+0x58 | 4 | completion_monitor | Protects synchronous waiter records. |
+0x5C | 4 | completion_waiters | List used only by synchronous work requests. |
+0x60 | 4 | worker_thread | Thread handle created suspended and later resumed. |
+0x64 | 4 | worker_thread_id | Thread identifier written by _beginthreadex. |
Each native work record is 0x18 bytes. Asynchronous posting sets the final three fields to zero.
| Offset | Width | Working field |
|---|---|---|
+0x00 | 4 | code |
+0x04 | 4 | data |
+0x08 | 4 | value |
+0x0C | 4 | completion_event |
+0x10 | 4 | result_buffer |
+0x14 | 4 | result_buffer_size |
The ring object pointed to by worker +0x54 has this established state:
| Offset | Width | Working field |
|---|---|---|
+0x0C | 4 | monitor |
+0x10 | 4 | not_full_condition |
+0x14 | 4 | not_empty_condition |
+0x18 | 4 | element_size |
+0x1C | 4 | capacity |
+0x20 | 4 | buffer |
+0x24 | 4 | element_count |
+0x28 | 4 | head_index |
+0x2C | 4 | tail_index |
Programmer-oriented layouts follow. They are documentation types, not recovered source declarations.
typedef uint32_t client_ptr32;
typedef struct worker_record_421 {
uint32_t code;
client_ptr32 data;
int32_t value;
client_ptr32 completion_event;
client_ptr32 result_buffer;
int32_t result_buffer_size;
} worker_record_421;
typedef struct worker_queue_base_421 {
client_ptr32 vtable;
uint8_t unknown_04[8];
uint32_t wait_timeout_ms;
uint8_t wait_handle_count;
uint8_t unknown_11[3];
client_ptr32 wait_handles[16];
client_ptr32 work_queue;
client_ptr32 completion_monitor;
client_ptr32 completion_waiters;
client_ptr32 worker_thread;
uint32_t worker_thread_id;
} worker_queue_base_421;
typedef struct bounded_ring_421 {
client_ptr32 vtable;
uint8_t unknown_04[8];
client_ptr32 monitor;
client_ptr32 not_full_condition;
client_ptr32 not_empty_condition;
int32_t element_size;
int32_t capacity;
client_ptr32 buffer;
int32_t element_count;
int32_t head_index;
int32_t tail_index;
} bounded_ring_421;
The Socket and EventMan constructors pass capacity 0x80; the dispatcher passes 0x400. An observer can sample element_count, but the value may change concurrently and external code should not write queue metadata. For a worker-affine proxy wake, validate the root and vtable, read wait_handles[0], and call ReleaseSemaphore without touching the native ring.
Event dispatcher fields
Offsets below are from the object stored in event_dispatcher. The earlier fields belong to its worker-queue base.
| Offset | Width | Working field | Reads and writes |
|---|---|---|---|
+0x0000 | 4 | vtable | Set to event_dispatcher_vtable. |
+0x000C | 4 | wait_timeout_ms | Set to 1 and passed to WaitForMultipleObjects. |
+0x0010 | 1 | wait_handle_count | Number of entries beginning at +0x14. |
+0x0014 | variable | wait_handles | Handle index 0 is the queued-work notification. |
+0x0060 | 4 | worker_thread | Created suspended, resumed during initialization, and terminated by the base destructor. |
+0x0068 | 4 | pane_registry | Registry traversed by internal event dispatch. |
+0x006C | 4 | multimedia_period_ms | Passed to timeBeginPeriod and timeEndPeriod. |
+0x0070 | 4 | current_tick | Latest 32-bit timeGetTime sample and base for relative timer insertion. |
+0x0074 | 4 | next_deadline | First timer deadline, or UINT32_MAX when no timer is pending. |
+0x0078 | 4 | timer_list | Sorted list with capacity 256 and 20-byte records. |
Event timer record
| Offset | Width | Meaning |
|---|---|---|
+0x00 | 4 | Receiver pane pointer. |
+0x04 | 4 | Callback identifier. |
+0x08 | 4 | Absolute 32-bit timeGetTime deadline. |
+0x0C | 4 | First callback payload value. |
+0x10 | 4 | Second callback payload value. |
Event manager input fields
Offsets below are from the object stored in event_manager_instance. They are used by the window-message input queue and the EventMan worker.
| Offset | Width | Working field | Reads and writes |
|---|---|---|---|
+0x006C | 4 | mouse_y | Updated from the first word of internal (y, x) mouse-move work and copied into button and wheel Events. |
+0x0070 | 4 | mouse_x | Updated from the second word of internal (y, x) mouse-move work and copied into button and wheel Events. |
+0x007C | 4 | double_click_time_limit | A second button down is eligible only when its unsigned elapsed message time is strictly less than this value. |
+0x0080 | 1 | previous_click_button | Value 1 records a prior left down; value 0 records a prior right down. |
+0x0084 | 4 | previous_click_y | First coordinate used by internal double-click recognition. |
+0x0088 | 4 | previous_click_x | Second coordinate used by internal double-click recognition. |
+0x008C | 4 | previous_click_time | GetMessageTime value for the prior button-down candidate. |
+0x0390 | 256 | scan_code_pressed | Per-scan-code state; bit 7 is set on key down and cleared on key up. |
+0x0490 | 1 | input_modifier_state | Combined mouse-button and mapped keyboard modifier bits placed in Events. |
+0x04B0 | 4 | input_block_flags | Bit 0 suppresses movement, wheel, button-down, and key-down queueing. |
+0x04B4 | 4 | mouse_button_state | Bit 0 tracks left and bit 1 tracks right at window-message enqueue time. |
Socket fields used by binary TCP
Offsets below are from the Socket object passed as this. They are established by the constructor and the mapped receive and send paths. The complete class layout is not yet named.
| Offset | Width | Working field | Reads and writes |
|---|---|---|---|
+0x0068 | 4 | event_sink | Used as this for event_post_socket_bytes. |
+0x006C | 4 | receive_cache | Points at the object’s 0x18000 byte transport cache. |
+0x48074 | 4 | receive_cursor | Index of the next cached transport byte. |
+0x48078 | 4 | receive_remaining | Cached bytes remaining after the current byte. |
+0x4807C | 4 | current_body_length | Big-endian length assembled from the two frame header bytes. |
+0x48084 | 4 | serial_handle | Set to INVALID_HANDLE_VALUE when unused. |
+0x480BC | 1 | socket_connected | Cleared on recv == 0 and disconnect cleanup. |
+0x480C0 | 4 | socket | Winsock SOCKET; INVALID_SOCKET is 0xFFFFFFFF. |
+0x480C5 | 0x10000 | wire_body_buffer | Receives body bytes beginning with the server action. |
+0x580C8 | 4 | frame_offset | Counts length-header and body bytes while a frame is open. |
+0x680CC | at least 0x10000 | decoded_or_encoded_buffer | Destination for packet-body XOR transformation. |
+0x780CC | 1 | transport_mode | Value 5 selects the normal TCP byte path. |
+0x780CD | 1 | frame_open | Set after consuming 0xAA; cleared on body completion. |
+0x780CF | 1 | legacy_send_sequence | Decimal digit sequence used by the printable legacy transport. |
+0x780D2 | 1 | transfer_gate | When set, only client action 0x10 may be queued. |
Socket Event fields
The Event object created for a decoded packet has these fields:
| Offset | Width | Meaning | Lifetime |
|---|---|---|---|
+0x0C | 1 | Event type, value 9 for a socket packet. | Set before queueing. |
+0x14 | 4 | Owned decoded-packet pointer. | Freed by the dispatcher worker after event_dispatch returns. |
+0x18 | 4 | Decoded packet size. | Positive when the pointer is present. |
Structures should use unknown_XX for an established field location whose meaning remains unknown.