Files
2026-10-02 14:40:41 -05:00

43 lines
2.9 KiB
C++

#pragma once
#include "Engine/Game/Build/fingerprint.h"
#include <cstdint>
// 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;
}