From cb8da61c98358cd1c3da93b21618f07a5d2b8069 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Tue, 27 Oct 2026 16:05:51 +0000 Subject: [PATCH] Decompile fn_17154 (UIWindowMgr::ProcessDialogKey) Batch #1078 by ragnarok-clanker: 0 byte-identical, 1 confirmed by peer review. - fn_17154 UIWindowMgr::ProcessDialogKey: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/UI/Window/UIWindowMgr.h | 1 + Source/UI/Window/WindowDialogs.cpp | 104 +++++++++++++++++++++++++++++ Source/UI/Window/WindowDialogs.h | 3 + 3 files changed, 108 insertions(+) diff --git a/Source/UI/Window/UIWindowMgr.h b/Source/UI/Window/UIWindowMgr.h index 95b28be4..b8777533 100644 --- a/Source/UI/Window/UIWindowMgr.h +++ b/Source/UI/Window/UIWindowMgr.h @@ -430,6 +430,7 @@ public: void RefreshRouletteWnd(); void EnableRouletteWnd(); char UpdateSnapRectangles(); + bool ProcessDialogKey(int unused, int key); }; extern UIWindowMgr g_windowMgr; diff --git a/Source/UI/Window/WindowDialogs.cpp b/Source/UI/Window/WindowDialogs.cpp index 5926a044..afd70e10 100644 --- a/Source/UI/Window/WindowDialogs.cpp +++ b/Source/UI/Window/WindowDialogs.cpp @@ -2,6 +2,110 @@ #include "UI/Window/WindowDialogs.h" #include "UI/Window/UIWindowMgr.h" +// GLOBAL: gl_24604 +int g_dialogKeyboardEnabled; + +// GLOBAL: gl_24605 +int g_dialogKeyboardBlocked; + +// OFFSET: 0x00A90950 +// FUNCTION: fn_17154 +bool UIWindowMgr::ProcessDialogKey(int, int key) { + if (g_dialogKeyboardEnabled == 0 || g_dialogKeyboardBlocked != 0) { + return false; + } + + if (!this->window_01E8) { + return false; + } + + switch (key) { + case 0x100001: + this->window_01E8->SendMsg(nullptr, 41, 0, 1, 0, 0); + return false; + case 0x110001: + this->window_01E8->SendMsg(nullptr, 41, 1, 1, 0, 0); + return false; + case 0x120001: + this->window_01E8->SendMsg(nullptr, 41, 2, 1, 0, 0); + return false; + case 0x130001: + this->window_01E8->SendMsg(nullptr, 41, 3, 1, 0, 0); + return false; + case 0x140001: + this->window_01E8->SendMsg(nullptr, 41, 4, 1, 0, 0); + return false; + case 0x150001: + this->window_01E8->SendMsg(nullptr, 41, 5, 1, 0, 0); + return false; + case 0x160001: + this->window_01E8->SendMsg(nullptr, 41, 6, 1, 0, 0); + return false; + case 0x170001: + this->window_01E8->SendMsg(nullptr, 41, 7, 1, 0, 0); + return false; + case 0x180001: + this->window_01E8->SendMsg(nullptr, 41, 8, 1, 0, 0); + return false; + case 0x1E0001: + this->window_01E8->SendMsg(nullptr, 41, 0, 2, 0, 0); + return false; + case 0x1F0001: + this->window_01E8->SendMsg(nullptr, 41, 1, 2, 0, 0); + return false; + case 0x200001: + this->window_01E8->SendMsg(nullptr, 41, 2, 2, 0, 0); + return false; + case 0x210001: + this->window_01E8->SendMsg(nullptr, 41, 3, 2, 0, 0); + return false; + case 0x220001: + this->window_01E8->SendMsg(nullptr, 41, 4, 2, 0, 0); + return false; + case 0x230001: + this->window_01E8->SendMsg(nullptr, 41, 5, 2, 0, 0); + return false; + case 0x240001: + this->window_01E8->SendMsg(nullptr, 41, 6, 2, 0, 0); + return false; + case 0x250001: + this->window_01E8->SendMsg(nullptr, 41, 7, 2, 0, 0); + return false; + case 0x260001: + this->window_01E8->SendMsg(nullptr, 41, 8, 2, 0, 0); + return false; + case 0x2C0001: + this->window_01E8->SendMsg(nullptr, 41, 0, 0, 0, 0); + return false; + case 0x2D0001: + this->window_01E8->SendMsg(nullptr, 41, 1, 0, 0, 0); + return false; + case 0x2E0001: + this->window_01E8->SendMsg(nullptr, 41, 2, 0, 0, 0); + return false; + case 0x2F0001: + this->window_01E8->SendMsg(nullptr, 41, 3, 0, 0, 0); + return false; + case 0x300001: + this->window_01E8->SendMsg(nullptr, 41, 4, 0, 0, 0); + return false; + case 0x310001: + this->window_01E8->SendMsg(nullptr, 41, 5, 0, 0, 0); + return false; + case 0x320001: + this->window_01E8->SendMsg(nullptr, 41, 6, 0, 0, 0); + return false; + case 0x330001: + this->window_01E8->SendMsg(nullptr, 41, 7, 0, 0, 0); + return false; + case 0x340001: + this->window_01E8->SendMsg(nullptr, 41, 8, 0, 0, 0); + return false; + default: + return false; + } +} + // OFFSET: 0x00A91450 // FUNCTION: fn_17160 UIWindow* WindowDialogs::Top() const { diff --git a/Source/UI/Window/WindowDialogs.h b/Source/UI/Window/WindowDialogs.h index a8be090e..a2fe5812 100644 --- a/Source/UI/Window/WindowDialogs.h +++ b/Source/UI/Window/WindowDialogs.h @@ -41,4 +41,7 @@ struct WindowDialogs { int Confirm(const char* text, int type, bool defaultAccept, bool replace, int timeout, const char* caption, int width, int height, unsigned char protect); }; +extern int g_dialogKeyboardEnabled; +extern int g_dialogKeyboardBlocked; + #endif