From 82453f62d84f979f8a6fc7b46e21b61cb835d2f1 Mon Sep 17 00:00:00 2001
From: Christian Semmler <mail@csemmler.com>
Date: Sun, 2 Feb 2025 09:42:37 -0700
Subject: [PATCH] Match `Hospital::HandleButtonDown` (#1381)

---
 LEGO1/lego/legoomni/src/worlds/hospital.cpp | 55 ++++++++++-----------
 1 file changed, 25 insertions(+), 30 deletions(-)

diff --git a/LEGO1/lego/legoomni/src/worlds/hospital.cpp b/LEGO1/lego/legoomni/src/worlds/hospital.cpp
index e32edfdb..fbf276dd 100644
--- a/LEGO1/lego/legoomni/src/worlds/hospital.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/hospital.cpp
@@ -392,21 +392,20 @@ MxLong Hospital::HandleEndAction(MxEndActionNotificationParam& p_param)
 }
 
 // FUNCTION: LEGO1 0x10075710
+// FUNCTION: BETA10 0x1002d2b1
 MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 {
 	if (m_unk0x100 == 1) {
 		LegoROI* roi = PickROI(p_param.GetX(), p_param.GetY());
 		if (roi != NULL) {
-			LegoChar* roiName = (LegoChar*) roi->GetName();
+			const LegoChar* roiName = roi->GetName();
 
 			if (roiName[0] == '*') {
 				roiName += 1;
 			}
 
 			if (!strcmpi("actor_ha", roiName)) {
-				LegoInputManager* inputManager = InputManager();
-				inputManager->SetUnknown88(TRUE);
-				inputManager->SetUnknown336(FALSE);
+				InputManager()->DisableInputProcessing();
 
 				m_unk0x100 = 3;
 
@@ -418,7 +417,9 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 
 						m_hospitalState->m_unk0x08 = 9;
 						Act1State* act1State = (Act1State*) GameState()->GetState("Act1State");
-						act1State->SetUnknown18(9);
+						assert(act1State);
+
+						act1State->m_unk0x018 = 9;
 
 						m_destLocation = LegoGameState::e_unk31;
 						DeleteObjects(
@@ -480,25 +481,6 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 								break;
 							}
 							break;
-						case LegoActor::c_papa:
-							switch (m_hospitalState->m_unk0x12) {
-							case 0:
-							case 1:
-								m_hospitalState->m_unk0x08 = 12;
-								PlayAction(HospitalScript::c_hho023cl_RunAnim);
-
-								m_currentAction = HospitalScript::c_hho023cl_RunAnim;
-								m_unk0x108 = 1;
-								break;
-							default:
-								m_hospitalState->m_unk0x08 = 12;
-								PlayAction(HospitalScript::c_hho024cl_RunAnim);
-
-								m_currentAction = HospitalScript::c_hho024cl_RunAnim;
-								m_unk0x108 = 1;
-								break;
-							}
-							break;
 						case LegoActor::c_nick:
 							switch (m_hospitalState->m_unk0x14) {
 							case 0:
@@ -518,6 +500,25 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 								break;
 							}
 							break;
+						case LegoActor::c_papa:
+							switch (m_hospitalState->m_unk0x12) {
+							case 0:
+							case 1:
+								m_hospitalState->m_unk0x08 = 12;
+								PlayAction(HospitalScript::c_hho023cl_RunAnim);
+
+								m_currentAction = HospitalScript::c_hho023cl_RunAnim;
+								m_unk0x108 = 1;
+								break;
+							default:
+								m_hospitalState->m_unk0x08 = 12;
+								PlayAction(HospitalScript::c_hho024cl_RunAnim);
+
+								m_currentAction = HospitalScript::c_hho024cl_RunAnim;
+								m_unk0x108 = 1;
+								break;
+							}
+							break;
 						case LegoActor::c_laura:
 							switch (m_hospitalState->m_unk0x16) {
 							case 0:
@@ -543,14 +544,8 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 
 				return 1;
 			}
-			else {
-				return 0;
-			}
 		}
 	}
-	else {
-		return 0;
-	}
 
 	return 0;
 }