#pragma once #include "Engine/Game/Build/fingerprint.h" #include // The UI's per-frame pointer hit-test and the mouse cursor mode that says whether it matters // (Runtime/ui_pointer.cpp; analysis/sim-performance.md). namespace dingosdk::game::build::v20260929::ui_pointer { // Every client frame the input dispatch (0x31ff690) runs the mouse state update (0x31fdbf0), // which clears the player's hit list and hands the pointer to the UI's pointer handler (vtable // 0x65a0bb0: +0x08 the pointer stayed still, +0x10 it moved; both thunk into these). They walk // every UI view and, for each active input-taking one, hit-test the pointer down its widget // tree (view vtable +0x78 / +0x80 = 0x4323f50 ...), filling the hit list clicks and hover use. inline constexpr Fingerprint pointer_still{0x43242d0, { 0x40,0x53,0x55,0x56,0x57,0x48,0x83,0xec,0x28,0x48,0x8b,0x79,0x68,0x49,0x8b,0xf0, 0x48,0x8b,0x59,0x60,0x48,0x8b,0xea,0x48,0x3b,0xdf,0x74,0x42,0x0f,0x1f,0x40,0x00}}; inline constexpr Fingerprint pointer_moved{0x4324340, { 0x40,0x53,0x55,0x56,0x57,0x41,0x56,0x48,0x83,0xec,0x20,0x48,0x8b,0x79,0x68,0x49, 0x8b,0xf1,0x48,0x8b,0x59,0x60,0x49,0x8b,0xe8,0x4c,0x8b,0xf2,0x48,0x3b,0xdf,0x74}}; // InputManMouse. enable_cursor_mode(mouse, bool enable, int style, const char* reason) is the // locked vtable entry (+0x2d0 of the vtable around 0x641c4a0) the UI's cursor entities call; // force_cursor(mouse, int delta) is a counted override that keeps the cursor on (posted to the // window thread as message 0x801d). Either one hands over the mouse object. inline constexpr Fingerprint enable_cursor_mode{0x315ad20, { 0x40,0x55,0x56,0x57,0x41,0x56,0x48,0x83,0xec,0x28,0x4d,0x8b,0xf1,0x41,0x8b,0xf0, 0x0f,0xb6,0xea,0x48,0x8b,0xf9,0x38,0x51,0x19,0x75,0x06,0x44,0x39,0x41,0x10,0x74}}; inline constexpr Fingerprint force_cursor{0x315a970, { 0x40,0x53,0x57,0x48,0x83,0xec,0x28,0x01,0x51,0x14,0x48,0x8b,0xf9,0x8b,0x59,0x14, 0x85,0xdb,0x0f,0x9f,0xc0,0x3a,0x41,0x18,0x75,0x08,0x85,0xd2,0x0f,0x85,0xac,0x02}}; // The InputManMouse base constructor (vtable 0x641c4a0; the Win32 mouse's 0x6421200 and // 0x641c978 derive from it), run once at engine start: it hands over the mouse before any // cursor change. inline constexpr Fingerprint mouse_construct{0x3153f80, { 0x40,0x53,0x55,0x56,0x57,0x41,0x56,0x41,0x57,0x48,0x83,0xec,0x28,0x33,0xed,0xc7, 0x41,0x18,0xff,0x00,0x00,0x00,0x48,0x8d,0x05,0x03,0x85,0x2c,0x03,0x48,0x89,0x69}}; // InputManMouse fields: the force count (> 0 keeps the cursor on), a deferral byte (0xff from // the constructor; while non-zero a cursor change is held back), the cursor mode asked for, and // the one applied (bytes; 0 = no cursor). inline constexpr std::uintptr_t mouse_force_count = 0x14; inline constexpr std::uintptr_t mouse_forced = 0x18; inline constexpr std::uintptr_t mouse_cursor_requested = 0x19; inline constexpr std::uintptr_t mouse_cursor_applied = 0xe9; }