From a1182145885a09f8b4ba08efa298bddad5a053b4 Mon Sep 17 00:00:00 2001 From: RallyBlock Date: Mon, 9 Nov 2026 20:31:09 -0500 Subject: [PATCH] fix input: overlay ensure, moveMap hooks, hijack --- client.cs | 238 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 183 insertions(+), 55 deletions(-) diff --git a/client.cs b/client.cs index 96fc9b2..a9d23bc 100644 --- a/client.cs +++ b/client.cs @@ -9,6 +9,8 @@ $RPGClient::Dist = 14; $RPGClient::TopDownPitch = 1.22; $RPGClient::OrbitInit = 0; $RPGClient::HudPlaced = 0; +$RPGClient::KeyMapPushed = 0; +$RPGClient::MoveHijacked = 0; $RPGClient::PanX = 0; $RPGClient::PanY = 0; $RPGClient::PanMax = 48; @@ -290,51 +292,86 @@ function RPGClient_SendClickFromCursor(%button) RPGClient_SendClick(%button, Canvas.getCursorPos()); } -function RPGClient_EnableOverlay() +function RPGClient_EnsureKeyMap() { - if (!isObject(PlayGui) || isObject(RPGClient_Mouse)) + if (!isObject(RPGClient_KeyMap)) + { + new ActionMap(RPGClient_KeyMap); + RPGClient_KeyMap.bind(keyboard, w, RPGClient_KeyMvForward); + RPGClient_KeyMap.bind(keyboard, s, RPGClient_KeyMvBackward); + RPGClient_KeyMap.bind(keyboard, a, RPGClient_KeyMvLeft); + RPGClient_KeyMap.bind(keyboard, d, RPGClient_KeyMvRight); + RPGClient_KeyMap.bind(keyboard0, w, RPGClient_KeyMvForward); + RPGClient_KeyMap.bind(keyboard0, s, RPGClient_KeyMvBackward); + RPGClient_KeyMap.bind(keyboard0, a, RPGClient_KeyMvLeft); + RPGClient_KeyMap.bind(keyboard0, d, RPGClient_KeyMvRight); + RPGClient_KeyMap.bind(keyboard, left, RPGClient_YawLeft); + RPGClient_KeyMap.bind(keyboard, right, RPGClient_YawRight); + RPGClient_KeyMap.bind(keyboard0, left, RPGClient_YawLeft); + RPGClient_KeyMap.bind(keyboard0, right, RPGClient_YawRight); + RPGClient_KeyMap.bind(keyboard, equals, RPGClient_ZoomIn); + RPGClient_KeyMap.bind(keyboard, minus, RPGClient_ZoomOut); + RPGClient_KeyMap.bind(keyboard, "[", RPGClient_ZoomIn); + RPGClient_KeyMap.bind(keyboard, "]", RPGClient_ZoomOut); + RPGClient_KeyMap.bind(keyboard0, equals, RPGClient_ZoomIn); + RPGClient_KeyMap.bind(keyboard0, minus, RPGClient_ZoomOut); + RPGClient_KeyMap.bind(keyboard, m, RPGClient_ToggleCursor); + RPGClient_KeyMap.bind(keyboard0, m, RPGClient_ToggleCursor); + } + if ($RPGClient::KeyMapPushed) + { + RPGClient_KeyMap.pop(); + } + RPGClient_KeyMap.push(); + $RPGClient::KeyMapPushed = 1; +} + +function RPGClient_HijackMoveMap() +{ + if ($RPGClient::MoveHijacked || !isObject(moveMap)) { return; } - new GuiMouseEventCtrl(RPGClient_Mouse) + moveMap.bind(keyboard, w, RPGClient_KeyMvForward); + moveMap.bind(keyboard, s, RPGClient_KeyMvBackward); + moveMap.bind(keyboard, a, RPGClient_KeyMvLeft); + moveMap.bind(keyboard, d, RPGClient_KeyMvRight); + moveMap.bind(keyboard, left, RPGClient_YawLeft); + moveMap.bind(keyboard, right, RPGClient_YawRight); + moveMap.bind(keyboard, equals, RPGClient_ZoomIn); + moveMap.bind(keyboard, minus, RPGClient_ZoomOut); + moveMap.bind(keyboard, "[", RPGClient_ZoomIn); + moveMap.bind(keyboard, "]", RPGClient_ZoomOut); + $RPGClient::MoveHijacked = 1; +} + +function RPGClient_EnsureOverlay() +{ + if (!isObject(PlayGui)) { - className = "RPGClient_Mouse"; - horizSizing = "width"; - vertSizing = "height"; - position = "0 0"; - extent = "640 480"; - profile = "GuiDefaultProfile"; - visible = "1"; - enabled = "1"; - modal = "0"; - }; - PlayGui.add(RPGClient_Mouse); - PlayGui.pushToBack(RPGClient_Mouse); - if (isObject(RPGClient_KeyMap)) - { - RPGClient_KeyMap.delete(); + return; } - new ActionMap(RPGClient_KeyMap); - RPGClient_KeyMap.bind(keyboard, w, RPGClient_KeyMvForward); - RPGClient_KeyMap.bind(keyboard, s, RPGClient_KeyMvBackward); - RPGClient_KeyMap.bind(keyboard, a, RPGClient_KeyMvLeft); - RPGClient_KeyMap.bind(keyboard, d, RPGClient_KeyMvRight); - RPGClient_KeyMap.bind(keyboard0, w, RPGClient_KeyMvForward); - RPGClient_KeyMap.bind(keyboard0, s, RPGClient_KeyMvBackward); - RPGClient_KeyMap.bind(keyboard0, a, RPGClient_KeyMvLeft); - RPGClient_KeyMap.bind(keyboard0, d, RPGClient_KeyMvRight); - RPGClient_KeyMap.bind(keyboard, left, RPGClient_YawLeft); - RPGClient_KeyMap.bind(keyboard, right, RPGClient_YawRight); - RPGClient_KeyMap.bind(keyboard0, left, RPGClient_YawLeft); - RPGClient_KeyMap.bind(keyboard0, right, RPGClient_YawRight); - RPGClient_KeyMap.bind(keyboard, equals, RPGClient_ZoomIn); - RPGClient_KeyMap.bind(keyboard, minus, RPGClient_ZoomOut); - RPGClient_KeyMap.bind(keyboard0, equals, RPGClient_ZoomIn); - RPGClient_KeyMap.bind(keyboard0, minus, RPGClient_ZoomOut); - RPGClient_KeyMap.bind(keyboard, m, RPGClient_ToggleCursor); - RPGClient_KeyMap.bind(keyboard0, m, RPGClient_ToggleCursor); - RPGClient_KeyMap.push(); - RPGClient_BumpKeyMap(); + if (!isObject(RPGClient_Mouse)) + { + new GuiMouseEventCtrl(RPGClient_Mouse) + { + className = "RPGClient_Mouse"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + profile = "GuiDefaultProfile"; + visible = "1"; + enabled = "1"; + modal = "0"; + }; + PlayGui.add(RPGClient_Mouse); + PlayGui.pushToBack(RPGClient_Mouse); + } + RPGClient_EnsureKeyMap(); + RPGClient_HijackMoveMap(); + $enableDirectInput = 1; + activateDirectInput(); $mvFreeLook = 0; $firstPerson = 0; if (isObject(Canvas) && !Canvas.isCursorOn()) @@ -347,6 +384,11 @@ function RPGClient_EnableOverlay() } } +function RPGClient_EnableOverlay() +{ + RPGClient_EnsureOverlay(); +} + function RPGClient_ToggleCursor(%val) { if (!$RPGClient::Active || !%val) @@ -366,9 +408,10 @@ function RPGClient_DisableOverlay() $RPGClient::MvB = 0; $RPGClient::MvL = 0; $RPGClient::MvR = 0; - if (isObject(RPGClient_KeyMap)) + if ($RPGClient::KeyMapPushed && isObject(RPGClient_KeyMap)) { RPGClient_KeyMap.pop(); + $RPGClient::KeyMapPushed = 0; } if (isObject(RPGClient_Mouse)) { @@ -377,6 +420,7 @@ function RPGClient_DisableOverlay() $RPGClient::Active = 0; $RPGClient::OrbitInit = 0; $RPGClient::HudPlaced = 0; + $RPGClient::MoveHijacked = 0; } function RPGClient_Hud_Place() @@ -467,42 +511,60 @@ function RPGClient_ScheduleCamera() function RPGClient_YawLeft(%val) { - if (!$RPGClient::Active || %val == 0) + if (!$RPGClient::Active) { return; } - $RPGClient::Yaw = $RPGClient::Yaw - 0.06; - RPGClient_ApplyCamera(1); + if (%val) + { + $RPGClient::MvL = %val; + } + else + { + $RPGClient::MvL = 0; + } } function RPGClient_YawRight(%val) { - if (!$RPGClient::Active || %val == 0) + if (!$RPGClient::Active) { return; } - $RPGClient::Yaw = $RPGClient::Yaw + 0.06; - RPGClient_ApplyCamera(1); + if (%val) + { + $RPGClient::MvR = %val; + } + else + { + $RPGClient::MvR = 0; + } } function RPGClient_ZoomIn(%val) { - if (!$RPGClient::Active || %val == 0) + if (!$RPGClient::Active) { return; } - $RPGClient::Dist = getMax(6, $RPGClient::Dist - 0.6); - RPGClient_ApplyCamera(1); + if (%val) + { + $RPGClient::Dist = getMax(6, $RPGClient::Dist - 0.8); + RPGClient_ApplyCamera(1); + } } function RPGClient_ZoomOut(%val) { - if (!$RPGClient::Active || %val == 0) + if (!$RPGClient::Active) { return; } - $RPGClient::Dist = getMin(32, $RPGClient::Dist + 0.6); - RPGClient_ApplyCamera(1); + if (%val) + { + $RPGClient::Dist = getMin(32, $RPGClient::Dist + 0.8); + RPGClient_ApplyCamera(1); + } } function RPGClient_CanSendCmd() @@ -605,9 +667,11 @@ function clientCmdRPG_TopDown(%on, %yaw, %dist) $RPGClient::Dist = %dist > 0 ? %dist : 14; $RPGClient::OrbitInit = 0; $RPGClient::HudPlaced = 0; - RPGClient_EnableOverlay(); + RPGClient_EnsureOverlay(); RPGClient_BindKeys(); RPGClient_StartCameraTick(); + schedule(500, 0, RPGClient_EnsureOverlay); + schedule(1500, 0, RPGClient_EnsureOverlay); RPGClient_ScheduleCamera(); RPGClient_EnsureCursor(); RPGClient_Hud_Ensure(); @@ -792,6 +856,70 @@ package RPGClient_PageKeys }; activatePackage(RPGClient_PageKeys); +package RPGClient_Input +{ + function moveforward(%val) + { + if ($RPGClient::Active) + { + RPGClient_KeyMvForward(%val); + return; + } + Parent::moveforward(%val); + } + + function movebackward(%val) + { + if ($RPGClient::Active) + { + RPGClient_KeyMvBackward(%val); + return; + } + Parent::movebackward(%val); + } + + function moveleft(%val) + { + if ($RPGClient::Active) + { + RPGClient_KeyMvLeft(%val); + return; + } + Parent::moveleft(%val); + } + + function moveright(%val) + { + if ($RPGClient::Active) + { + RPGClient_KeyMvRight(%val); + return; + } + Parent::moveright(%val); + } + + function invLeft(%val) + { + if ($RPGClient::Active) + { + RPGClient_YawLeft(%val); + return; + } + Parent::invLeft(%val); + } + + function invRight(%val) + { + if ($RPGClient::Active) + { + RPGClient_YawRight(%val); + return; + } + Parent::invRight(%val); + } +}; +activatePackage(RPGClient_Input); + package RPGClient_MapStack { function noHudGui::onWake(%this) @@ -799,7 +927,7 @@ package RPGClient_MapStack Parent::onWake(%this); if ($RPGClient::Active) { - schedule(0, 0, RPGClient_BumpKeyMap); + schedule(0, 0, RPGClient_EnsureOverlay); } } }; @@ -825,7 +953,7 @@ package RPGClient_Cursor if ($RPGClient::Active) { schedule(0, 0, RPGClient_EnsureCursor); - schedule(0, 0, RPGClient_BumpKeyMap); + schedule(0, 0, RPGClient_EnsureOverlay); } return; }