[Scummvm-git-logs] scummvm master -> 3653703a40583bc538a2d8d4f55e37fff7bd42ab

peterkohaut peterkohaut at users.noreply.github.com
Sat Jan 26 15:00:34 CET 2019


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
80fb50423d BLADERUNNER: Added names of loops in BB01
bff136ca0c BLADERUNNER: Fixed Sebastian script
71c262f881 BLADERUNNER: Analysed Leon scene at Yukon Hotel
3653703a40 BLADERUNNER: Analysed all Yukon hotel scenes


Commit: 80fb50423d7268f84f90472f615d6235df7fd74c
    https://github.com/scummvm/scummvm/commit/80fb50423d7268f84f90472f615d6235df7fd74c
Author: Peter Kohaut (peter.kohaut at gmail.com)
Date: 2019-01-26T10:38:33+01:00

Commit Message:
BLADERUNNER: Added names of loops in BB01

Changed paths:
    engines/bladerunner/script/scene/bb01.cpp


diff --git a/engines/bladerunner/script/scene/bb01.cpp b/engines/bladerunner/script/scene/bb01.cpp
index f78cd72..7c40138 100644
--- a/engines/bladerunner/script/scene/bb01.cpp
+++ b/engines/bladerunner/script/scene/bb01.cpp
@@ -24,6 +24,14 @@
 
 namespace BladeRunner {
 
+enum kBB01Loops {
+	kBB01LoopInshot            = 0,
+	kBB01LoopMainLoop          = 1,
+	kBB01LoopDoorAnim          = 3,
+	kBB01LoopOutshoot          = 4,
+	kBB01LoopMainLoopNoSpinner = 5
+};
+
 void SceneScriptBB01::InitializeScene() {
 	if (Game_Flag_Query(kFlagDR02toBB01)) {
 		Setup_Scene_Information(-253.0f, 9.0f,  715.0f, 266);
@@ -54,22 +62,22 @@ void SceneScriptBB01::InitializeScene() {
 	Ambient_Sounds_Add_Speech_Sound(60, 40, 10, 260, 17, 24, -100, 100, -101, -101, 1, 1);
 	Ambient_Sounds_Add_Speech_Sound(60, 50, 10, 260, 17, 24, -100, 100, -101, -101, 1, 1);
 
-	if (Game_Flag_Query(kFlagSpinnerAtBB01)
+	if ( Game_Flag_Query(kFlagSpinnerAtBB01)
 	 && !Game_Flag_Query(kFlagDR02toBB01)
 	 && !Game_Flag_Query(kFlagBB02toBB01)
 	) {
-		Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 0, false);
-		Scene_Loop_Set_Default(1);
+		Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kBB01LoopInshot, false);
+		Scene_Loop_Set_Default(kBB01LoopMainLoop);
 	} else if (Game_Flag_Query(kFlagSpinnerAtBB01)
 	        && Game_Flag_Query(kFlagDR02toBB01)
 	) {
-		Scene_Loop_Set_Default(1);
+		Scene_Loop_Set_Default(kBB01LoopMainLoop);
 	} else if (Game_Flag_Query(kFlagSpinnerAtBB01)
 	        && Game_Flag_Query(kFlagBB02toBB01)
 	) {
-		Scene_Loop_Set_Default(1);
+		Scene_Loop_Set_Default(kBB01LoopMainLoop);
 	} else {
-		Scene_Loop_Set_Default(5);
+		Scene_Loop_Set_Default(kBB01LoopMainLoopNoSpinner);
 	}
 }
 
@@ -114,80 +122,80 @@ bool SceneScriptBB01::ClickedOnExit(int exitId) {
 	}
 
 	if (exitId == 2) {
-		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 43.0f, 0.0f, 1062.0f, 0, false, false, 0)) {
+		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 43.0f, 0.0f, 1062.0f, 0, true, false, 0)) {
 			Game_Flag_Reset(kFlagMcCoyInChinaTown);
 			Game_Flag_Reset(kFlagMcCoyInRunciters);
 			Game_Flag_Reset(kFlagMcCoyInMcCoyApartment);
 			Game_Flag_Reset(kFlagMcCoyInPoliceStation);
 			Game_Flag_Reset(kFlagMcCoyInBradburyBuilding);
-			int spinnerDest = Spinner_Interface_Choose_Dest(3, false);
+			int spinnerDest = Spinner_Interface_Choose_Dest(kBB01LoopDoorAnim, false);
 			switch (spinnerDest) {
 			case kSpinnerDestinationPoliceStation:
 				Game_Flag_Set(kFlagMcCoyInPoliceStation);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtPS01);
 				Set_Enter(kSetPS01, kScenePS01);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			case kSpinnerDestinationMcCoysApartment:
 				Game_Flag_Set(kFlagMcCoyInMcCoyApartment);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtMA01);
 				Set_Enter(kSetMA01, kSceneMA01);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			case kSpinnerDestinationRuncitersAnimals:
 				Game_Flag_Set(kFlagMcCoyInRunciters);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtRC01);
 				Set_Enter(kSetRC01, kSceneRC01);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			case kSpinnerDestinationChinatown:
 				Game_Flag_Set(kFlagMcCoyInChinaTown);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtCT01);
 				Set_Enter(kSetCT01_CT12, kSceneCT01);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			case kSpinnerDestinationAnimoidRow:
 				Game_Flag_Set(kFlagMcCoyInAnimoidRow);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtAR01);
 				Set_Enter(kSetAR01_AR02, kSceneAR01);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			case kSpinnerDestinationTyrellBuilding:
 				Game_Flag_Set(kFlagMcCoyInTyrellBuilding);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtTB02);
 				Set_Enter(kSetTB02_TB03, kSceneTB02);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			case kSpinnerDestinationDNARow:
 				Game_Flag_Set(kFlagMcCoyInDNARow);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtDR01);
 				Set_Enter(kSetDR01_DR02_DR04, kSceneDR01);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			case kSpinnerDestinationNightclubRow:
 				Game_Flag_Set(kFlagMcCoyInNightclubRow);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtNR01);
 				Set_Enter(kSetNR01, kSceneNR01);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			case kSpinnerDestinationHysteriaHall:
 				Game_Flag_Set(kFlagMcCoyInHysteriaHall);
 				Game_Flag_Reset(kFlagSpinnerAtBB01);
 				Game_Flag_Set(kFlagSpinnerAtHF01);
 				Set_Enter(kSetHF01, kSceneHF01);
-				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 4, true);
+				Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
 				break;
 			default:
 				Game_Flag_Set(kFlagMcCoyInBradburyBuilding);
-				Scene_Loop_Start_Special(kSceneLoopModeOnce, 3, true);
+				Scene_Loop_Start_Special(kSceneLoopModeOnce, kBB01LoopDoorAnim, true);
 				break;
 			}
 		}
@@ -204,19 +212,23 @@ void SceneScriptBB01::SceneFrameAdvanced(int frame) {
 	if (frame == 193) {
 		Sound_Play(118, 40, 0, 0, 50);
 	}
+
 	if (frame == 241
 	 || frame == 363
 	) {
 		Sound_Play(116, 100, -50, -50, 50);
 	}
+
 	if (frame == 286
 	 || frame == 407
 	) {
 		Sound_Play(119, 100, -50, -50, 50);
 	}
+
 	if (frame == 433) {
 		Sound_Play(117, 40, -50, 80, 50);
 	}
+
 	if (frame == 120) {
 		Sound_Play(286, Random_Query(33, 33), 100, -100, 50);
 	}


Commit: bff136ca0c3974525ade5c42b2f3975299c03695
    https://github.com/scummvm/scummvm/commit/bff136ca0c3974525ade5c42b2f3975299c03695
Author: Peter Kohaut (peter.kohaut at gmail.com)
Date: 2019-01-26T10:38:53+01:00

Commit Message:
BLADERUNNER: Fixed Sebastian script

Dialogue was not available

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/ai/sebastian.cpp
    engines/bladerunner/script/scene/bb03.cpp


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 4512a22..bcaa673 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -957,6 +957,7 @@ enum Variables {
 	kVariableDR06MannequinHeadOpened = 39,
 	kVariableMcCoyDrinks = 42, // is never checked
 	kVariableAffectionTowards = 45, // 0 none, 1 steele, 2 dektora, 3 lucy
+	kVariableGunPulledInFrontOfSebastian = 46,
 	kVariableDNAEvidences = 48,
 	kVariableReplicants = 51,
 	kVariableNextTvNews = 52
diff --git a/engines/bladerunner/script/ai/sebastian.cpp b/engines/bladerunner/script/ai/sebastian.cpp
index 2d8bec2..4f2cc0a 100644
--- a/engines/bladerunner/script/ai/sebastian.cpp
+++ b/engines/bladerunner/script/ai/sebastian.cpp
@@ -62,21 +62,21 @@ void AIScriptSebastian::ReceivedClue(int clueId, int fromActorId) {
 }
 
 void AIScriptSebastian::ClickedByPlayer() {
-	if (Actor_Query_Goal_Number(kActorSebastian) != 205)
-		return; //false;
-
-	AI_Movement_Track_Pause(56);
-	Actor_Face_Actor(kActorSebastian, kActorMcCoy, 1);
-	Actor_Face_Actor(kActorMcCoy, kActorSebastian, 1);
-	if (Actor_Clue_Query(kActorSebastian, 214)) {
-		Actor_Says(kActorMcCoy, 6985, 16);
-		Actor_Says(kActorSebastian, 610, 14);
-	} else {
-		dialogue();
-	}
+	if (Actor_Query_Goal_Number(kActorSebastian) == 205) {
+		AI_Movement_Track_Pause(kActorSebastian);
+		Actor_Face_Actor(kActorSebastian, kActorMcCoy, true);
+		Actor_Face_Actor(kActorMcCoy, kActorSebastian, true);
+		if (Actor_Clue_Query(kActorSebastian, kClueMcCoyIsABladeRunner)) {
+			Actor_Says(kActorMcCoy, 6985, 16);
+			Actor_Says(kActorSebastian, 610, 14);
+		} else {
+			dialogue();
+		}
 
-	AI_Movement_Track_Unpause(56);
-	return; //true;
+		AI_Movement_Track_Unpause(kActorSebastian);
+		return; //true;
+	}
+	return; //false;
 }
 
 void AIScriptSebastian::EnteredScene(int sceneId) {
@@ -92,29 +92,30 @@ void AIScriptSebastian::OtherAgentExitedThisScene(int otherActorId) {
 }
 
 void AIScriptSebastian::OtherAgentEnteredCombatMode(int otherActorId, int combatMode) {
-	if (otherActorId || !combatMode)
-		return; //false;
+	if (otherActorId == kActorMcCoy
+	 && combatMode
+	) {
+		Global_Variable_Increment(kVariableGunPulledInFrontOfSebastian, 1);
+		Actor_Modify_Friendliness_To_Other(kActorSebastian, kActorMcCoy, -5);
+		AI_Movement_Track_Pause(kActorSebastian);
+		Actor_Face_Actor(kActorSebastian, kActorMcCoy, true);
+
+		if (Global_Variable_Query(kVariableGunPulledInFrontOfSebastian) == 1) {
+			Actor_Says(kActorSebastian, 680, 12);
+			Actor_Face_Actor(kActorMcCoy, kActorSebastian, true);
+			Actor_Says_With_Pause(kActorMcCoy, 7265, 0.0, kAnimationModeCombatIdle);
+			Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatIdle);
+			Delay(500);
+			Actor_Says(kActorSebastian, 690, 16);
+		} else {
+			Actor_Says(kActorSebastian, 700, 15);
+			Actor_Says_With_Pause(kActorMcCoy, 7270, 0.0, kAnimationModeCombatIdle);
+			Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatIdle);
+		}
+		AI_Movement_Track_Unpause(kActorSebastian);
 
-	Global_Variable_Increment(46, 1);
-	Actor_Modify_Friendliness_To_Other(kActorSebastian, kActorMcCoy, -5);
-	AI_Movement_Track_Pause(56);
-	Actor_Face_Actor(kActorSebastian, kActorMcCoy, 1);
-
-	if (Global_Variable_Query(46) == 1) {
-		Actor_Says(kActorSebastian, 680, 12);
-		Actor_Face_Actor(kActorMcCoy, kActorSebastian, 1);
-		Actor_Says_With_Pause(kActorMcCoy, 7265, 0.0, 4);
-		Actor_Change_Animation_Mode(kActorMcCoy, 4);
-		Delay(500);
-		Actor_Says(kActorSebastian, 690, 16);
-	} else {
-		Actor_Says(kActorSebastian, 700, 15);
-		Actor_Says_With_Pause(kActorMcCoy, 7270, 0.0, 4);
-		Actor_Change_Animation_Mode(kActorMcCoy, 4);
+		return; //true;
 	}
-	AI_Movement_Track_Unpause(56);
-
-	return; //true;
 }
 
 void AIScriptSebastian::ShotAtAndMissed() {
@@ -273,7 +274,7 @@ bool AIScriptSebastian::UpdateAnimation(int *animation, int *frame) {
 
 bool AIScriptSebastian::ChangeAnimationMode(int mode) {
 	switch (mode) {
-	case 0:
+	case kAnimationModeIdle:
 		if (_animationState > 11) {
 			_animationState = 0;
 			_animationFrame = 0;
@@ -281,60 +282,69 @@ bool AIScriptSebastian::ChangeAnimationMode(int mode) {
 			_flag = true;
 		}
 		break;
-	case 1:
+
+	case kAnimationModeWalk:
 		_animationState = 1;
 		_animationFrame = 0;
 		break;
-	case 3:
+
+	case kAnimationModeTalk:
 		_animationState = 4;
 		_animationFrame = 0;
 		_flag = 0;
 		break;
+
 	case 12:
 		_animationState = 5;
 		_animationFrame = 0;
 		_flag = 0;
 		break;
+
 	case 13:
 		_animationState = 6;
 		_animationFrame = 0;
 		_flag = 0;
 		break;
+
 	case 14:
 		_animationState = 7;
 		_animationFrame = 0;
 		_flag = 0;
 		break;
+
 	case 15:
 		_animationState = 8;
 		_animationFrame = 0;
 		_flag = 0;
 		break;
+
 	case 16:
 		_animationState = 9;
 		_animationFrame = 0;
 		_flag = 0;
 		break;
+
 	case 17:
 		_animationState = 10;
 		_animationFrame = 0;
 		_flag = 0;
 		break;
+
 	case 18:
 		_animationState = 11;
 		_animationFrame = 0;
 		_flag = 0;
 		break;
+
 	case 20:
 		_animationState = 2;
 		_animationFrame = 0;
 		break;
-	case 48:
+
+	case kAnimationModeDie:
 		_animationState = 3;
 		_animationFrame = 0;
 		break;
-	default:
-		break;
 	}
 
 	return true;
@@ -366,54 +376,57 @@ void AIScriptSebastian::dialogue() {
 	Dialogue_Menu_Clear_List();
 
 	if (Actor_Query_Friendliness_To_Other(kActorSebastian, kActorMcCoy) >= 45) {
-		DM_Add_To_List_Never_Repeat_Once_Selected(930, 5, 5, 5);
-		DM_Add_To_List_Never_Repeat_Once_Selected(940, -1, 5, 6);
-		DM_Add_To_List_Never_Repeat_Once_Selected(950, 5, 5, 5);
+		DM_Add_To_List_Never_Repeat_Once_Selected(930, 5, 5, 5); // MORAJI AND CHEW
+		DM_Add_To_List_Never_Repeat_Once_Selected(940, -1, 5, 6); // EISENDULLER
+		DM_Add_To_List_Never_Repeat_Once_Selected(950, 5, 5, 5); // TYRELL
 	}
 
 	if (Actor_Clue_Query(kActorMcCoy, kClueAnsweringMachineMessage)) {
-		DM_Add_To_List_Never_Repeat_Once_Selected(960, 3, -1, 5);
+		DM_Add_To_List_Never_Repeat_Once_Selected(960, 3, -1, 5); // TWINS
 	}
 
-	if (Actor_Clue_Query(kActorMcCoy, kClueAnsweringMachineMessage) && Actor_Clue_Query(kActorMcCoy, kClueEnvelope)) {
-		DM_Add_To_List_Never_Repeat_Once_Selected(970, -1, 4, -1);
+	if (Actor_Clue_Query(kActorMcCoy, kClueAnsweringMachineMessage)
+	 && Actor_Clue_Query(kActorMcCoy, kClueEnvelope)
+	) {
+		DM_Add_To_List_Never_Repeat_Once_Selected(970, -1, 4, -1); // RUNCITER
 	}
 
-	DM_Add_To_List_Never_Repeat_Once_Selected(980, -1, -1, 7);
-	DM_Add_To_List_Never_Repeat_Once_Selected(990, 7, 3, -1);
+	DM_Add_To_List_Never_Repeat_Once_Selected(980, -1, -1, 7); // ROBBERS
+	DM_Add_To_List_Never_Repeat_Once_Selected(990, 7, 3, -1); // NEXUS-6
 
 	if (Dialogue_Menu_Query_List_Size()) {
-		Dialogue_Menu_Add_DONE_To_List(1000);
+		Dialogue_Menu_Add_DONE_To_List(1000); // DONE
 		Dialogue_Menu_Appear(320, 240);
+		int answer = Dialogue_Menu_Query_Input();
 		Dialogue_Menu_Disappear();
 
-		switch (Dialogue_Menu_Query_Input()) {
-		case 930:
+		switch (answer) {
+		case 930: // MORAJI AND CHEW
 			Actor_Says(kActorMcCoy, 7075, 13);
 			Actor_Says(kActorSebastian, 290, 12);
 			Actor_Says(kActorSebastian, 300, 13);
 			break;
 
-		case 940:
+		case 940: // EISENDULLER
 			Actor_Says(kActorMcCoy, 7080, 15);
 			Actor_Says(kActorSebastian, 310, 13);
 			Actor_Says(kActorSebastian, 320, 16);
 			Actor_Says(kActorSebastian, 340, 12);
 			Actor_Says(kActorMcCoy, 7120, 14);
-			Actor_Says(kActorSebastian, 350, 3);
+			Actor_Says(kActorSebastian, 350, kAnimationModeTalk);
 			Actor_Says(kActorMcCoy, 7125, 13);
 			Actor_Says(kActorSebastian, 360, 17);
-			Actor_Says_With_Pause(kActorMcCoy, 7130, 1.0, 3);
+			Actor_Says_With_Pause(kActorMcCoy, 7130, 1.0, kAnimationModeTalk);
 			Actor_Says(kActorMcCoy, 7135, 18);
 			break;
 
-		case 950:
+		case 950: // TYRELL
 			Actor_Says(kActorMcCoy, 7085, 15);
 			Actor_Says_With_Pause(kActorSebastian, 370, 0.30f, 13);
 			Actor_Says_With_Pause(kActorSebastian, 380, 0.70f, 17);
 			Actor_Says(kActorSebastian, 390, 14);
 			if (Actor_Clue_Query(kActorMcCoy, kClueChessTable)) {
-				Actor_Says(kActorMcCoy, 7140, 3);
+				Actor_Says(kActorMcCoy, 7140, kAnimationModeTalk);
 				Actor_Says(kActorSebastian, 400, 12);
 				Actor_Says(kActorMcCoy, 7145, 16);
 				Actor_Says(kActorSebastian, 410, 13);
@@ -423,7 +436,7 @@ void AIScriptSebastian::dialogue() {
 			}
 			break;
 
-		case 960:
+		case 960: // TWINS
 			Actor_Says(kActorMcCoy, 7090, 17);
 			Actor_Says(kActorSebastian, 440, 14);
 			Actor_Says(kActorSebastian, 450, 13);
@@ -437,7 +450,7 @@ void AIScriptSebastian::dialogue() {
 			setMcCoyIsABladeRunner();
 			break;
 
-		case 970:
+		case 970: // RUNCITER
 			Actor_Says(kActorMcCoy, 7095, 13);
 			Actor_Says(kActorSebastian, 500, 15);
 			Actor_Says(kActorMcCoy, 7170, 17);
@@ -450,14 +463,14 @@ void AIScriptSebastian::dialogue() {
 			setMcCoyIsABladeRunner();
 			break;
 
-		case 980:
+		case 980: // ROBBERS
 			Actor_Says(kActorMcCoy, 7100, 12);
 			Actor_Says(kActorSebastian, 540, 16);
 			Actor_Says(kActorMcCoy, 7195, 18);
 			Actor_Says(kActorSebastian, 720, 12);
 			break;
 
-		case 990:
+		case 990: // NEXUS-6
 			Actor_Says(kActorMcCoy, 7105, 18);
 			setMcCoyIsABladeRunner();
 			break;
@@ -475,7 +488,7 @@ void AIScriptSebastian::dialogue() {
 }
 
 void AIScriptSebastian::setMcCoyIsABladeRunner() {
-	Actor_Clue_Acquire(kActorSebastian, kClueMcCoyIsABladeRunner, true, 0);
+	Actor_Clue_Acquire(kActorSebastian, kClueMcCoyIsABladeRunner, true, kActorMcCoy);
 	Actor_Modify_Friendliness_To_Other(kActorSebastian, kActorMcCoy, -5);
 	Actor_Says(kActorSebastian, 560, 15);
 	Actor_Says(kActorMcCoy, 7200, 14);
diff --git a/engines/bladerunner/script/scene/bb03.cpp b/engines/bladerunner/script/scene/bb03.cpp
index de7c368..65caf37 100644
--- a/engines/bladerunner/script/scene/bb03.cpp
+++ b/engines/bladerunner/script/scene/bb03.cpp
@@ -150,6 +150,7 @@ void SceneScriptBB03::PlayerWalkedIn() {
 		Loop_Actor_Walk_To_XYZ(kActorMcCoy, 164.0f, 60.16f, -164.0f, 0, false, false, 0);
 		Game_Flag_Reset(kFlagBB05toBB03);
 	}
+
 	if (Game_Flag_Query(kFlagBB04toBB03)) {
 		Loop_Actor_Walk_To_XYZ(kActorMcCoy, 176.0f, 60.16f, -64.0f, 0, false, false, 0);
 		Game_Flag_Reset(kFlagBB04toBB03);


Commit: 71c262f88183720a0710a7627b4db324e8d3f66c
    https://github.com/scummvm/scummvm/commit/71c262f88183720a0710a7627b4db324e8d3f66c
Author: Peter Kohaut (peter.kohaut at gmail.com)
Date: 2019-01-26T14:31:04+01:00

Commit Message:
BLADERUNNER: Analysed Leon scene at Yukon Hotel

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/ai/desk_clerk.cpp
    engines/bladerunner/script/ai/leon.cpp
    engines/bladerunner/script/ai_script.h
    engines/bladerunner/script/scene/ct09.cpp


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index bcaa673..9966359 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -893,6 +893,9 @@ enum Flags {
 	kFlagTB06DogCollarTaken = 519,
 	kFlagTB06KitchenBoxTaken = 520,
 	kFlagCT11toDR01 = 531,
+	kFlagCT09Entered = 538,
+	kFlagCT09LeonInterrupted = 539,
+	kFlagCT09DeskClerkTalk = 540,
 	kFlagGordoTalk1 = 543,
 	kFlagGordoTalk2 = 544,
 	kFlagDR06MannequinHeadOpen = 548,
@@ -1065,8 +1068,8 @@ enum Scenes {
 	kSceneCT03 = 15, // Chinatown - Back alley - Restaurant
 	kSceneCT04 = 16, // Chinatown - Back alley - Dumpster
 	kSceneCT05 = 17, // Chinatown - Warehouse - Inside
-	kSceneCT06 = 18, // Chinatown - Passage from front
-	kSceneCT07 = 19, // Chinatown - Passage form back
+	kSceneCT06 = 18, // Chinatown - Passage - front
+	kSceneCT07 = 19, // Chinatown - Passage - back
 	kSceneCT08 = 20, // Chinatown - Yukon Hotel - Backroom
 	kSceneCT09 = 21, // Chinatown - Yukon Hotel - Lobby
 	kSceneCT10 = 22, // Chinatown - Yukon Hotel - Room
@@ -1607,6 +1610,13 @@ enum GoalOfficerLeary {
 	kGoalOfficerLearyRC01CrowdInterrogation = 2
 };
 
+enum GoalDeskClerk {
+	kGoalDeskClerkDefault = 0,
+	kGoalDeskClerkKnockedOut = 1,
+	kGoalDeskClerkRecovered = 2,
+	kGoalDeskClerkGone = 400
+};
+
 enum GoalMoraji {
 	kGoalMorajiDefault = 0,
 	kGoalMorajiShot = 5,
@@ -1622,6 +1632,18 @@ enum GoalMoraji {
 	kGoalMorajiPerished = 99
 };
 
+enum GoalLeon {
+	kGoalLeonDefault = 0,
+	kGoalLeonHoldingDeskClerk = 1,
+	kGoalLeonReleaseDeskClerk = 2,
+	kGoalLeonPrepareTalkToMcCoy = 3,
+	kGoalLeonTalkToMcCoy = 4,
+	kGoalLeonApproachMcCoy = 5, // there is no way how to trigger this path in the game
+	kGoalLeonPunchMcCoy = 6, // there is no way how to trigger this path in the game
+	kGoalLeonLeave = 7,
+	kGoalLeonGone = 8
+};
+
 } // End of namespace BladeRunner
 
 #endif
diff --git a/engines/bladerunner/script/ai/desk_clerk.cpp b/engines/bladerunner/script/ai/desk_clerk.cpp
index 6af7d5d..f723b33 100644
--- a/engines/bladerunner/script/ai/desk_clerk.cpp
+++ b/engines/bladerunner/script/ai/desk_clerk.cpp
@@ -25,8 +25,8 @@
 namespace BladeRunner {
 
 AIScriptDeskClerk::AIScriptDeskClerk(BladeRunnerEngine *vm) : AIScriptBase(vm) {
-	_var1 = 0;
-	_var2 = 0;
+	_flag1 = false;
+	_flag2 = false;
 	_var3 = 75;
 }
 
@@ -36,29 +36,32 @@ void AIScriptDeskClerk::Initialize() {
 	_animationStateNext = 0;
 	_animationNext = 0;
 
-	_var1 = 0;
-	_var2 = 0;
+	_flag1 = false;
+	_flag2 = false;
 	_var3 = 75;
-	Actor_Set_Goal_Number(kActorDeskClerk, 0);
+	Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkDefault);
 }
 
 bool AIScriptDeskClerk::Update() {
-	if (Actor_Query_Goal_Number(kActorDeskClerk) == 1
-			&& Player_Query_Current_Set() != kSetCT01_CT12
-			&& Player_Query_Current_Set() != kSetCT03_CT04
-			&& Player_Query_Current_Set() != kSetCT08_CT51_UG12
-			&& Player_Query_Current_Set() != kSetCT02
-			&& Player_Query_Current_Set() != kSetCT05
-			&& Player_Query_Current_Set() != kSetCT06
-			&& Player_Query_Current_Set() != kSetCT07
-			&& Player_Query_Current_Set() != kSetCT09
-			&& Player_Query_Current_Set() != kSetCT10
-			&& Player_Query_Current_Set() != kSetCT11) {
-		Actor_Set_Goal_Number(kActorDeskClerk, 2);
+	if (Actor_Query_Goal_Number(kActorDeskClerk) == kGoalDeskClerkKnockedOut
+	 && Player_Query_Current_Set() != kSetCT01_CT12
+	 && Player_Query_Current_Set() != kSetCT03_CT04
+	 && Player_Query_Current_Set() != kSetCT08_CT51_UG12
+	 && Player_Query_Current_Set() != kSetCT02
+	 && Player_Query_Current_Set() != kSetCT05
+	 && Player_Query_Current_Set() != kSetCT06
+	 && Player_Query_Current_Set() != kSetCT07
+	 && Player_Query_Current_Set() != kSetCT09
+	 && Player_Query_Current_Set() != kSetCT10
+	 && Player_Query_Current_Set() != kSetCT11
+	) {
+		Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkRecovered);
 	}
 
-	if (Global_Variable_Query(kVariableChapter) == 5 && Actor_Query_Goal_Number(kActorDeskClerk) < 400) {
-		Actor_Set_Goal_Number(kActorDeskClerk, 400);
+	if (Global_Variable_Query(kVariableChapter) == 5
+	 && Actor_Query_Goal_Number(kActorDeskClerk) < kGoalDeskClerkGone
+	) {
+		Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkGone);
 	}
 
 	return false;
@@ -114,13 +117,13 @@ int AIScriptDeskClerk::GetFriendlinessModifierIfGetsClue(int otherActorId, int c
 
 bool AIScriptDeskClerk::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 	switch (newGoalNumber) {
-	case 0:
-	case 2:
+	case kGoalDeskClerkDefault:
+	case kGoalDeskClerkRecovered:
 		Actor_Put_In_Set(kActorDeskClerk, kSetCT09);
 		Actor_Set_At_XYZ(kActorDeskClerk, 282.0f, 360.52f, 743.0f, 513);
 		break;
-	case 1:
-	case 400:
+	case kGoalDeskClerkKnockedOut:
+	case kGoalDeskClerkGone:
 		Actor_Put_In_Set(kActorDeskClerk, kSetFreeSlotH);
 		Actor_Set_At_Waypoint(kActorDeskClerk, 40, 0);
 		break;
@@ -129,61 +132,49 @@ bool AIScriptDeskClerk::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 }
 
 bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) {
-	int frameRes;
 
 	switch (_animationState) {
 	case 0:
-		if (_var1 > 1) {
-			frameRes = _animationFrame;
-		} else if (_var1) {
+		if (_flag1) {
 			*animation = 662;
 			_animationFrame++;
-
 			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(662)) {
 				_animationFrame = 0;
-				_var1 = 0;
+				_flag1 = false;
 				*animation = 661;
 				_var3 = Random_Query(50, 100);
 			}
-			frameRes = _animationFrame;
 		} else {
-			if (_var3)
+			if (_var3 != 0) {
 				--_var3;
+			}
 
 			*animation = 661;
 			_animationFrame++;
-
-			if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(661)) {
-				frameRes = _animationFrame;
-			} else {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(661)) {
 				_animationFrame = 0;
 
-				if (!_var3) {
+				if (_var3 == 0) {
 					*animation = 662;
-					_var1 = 1;
+					_flag1 = true;
 				}
-
-				frameRes = _animationFrame;
 			}
 		}
 		break;
 
 	case 1:
-		frameRes = _animationFrame;
 		*animation = 663;
 
-		if (!frameRes && _var2) {
+		if (_animationFrame == 0
+		 && _flag2
+		) {
 			*animation = 661;
 			_animationState = 0;
-			_var1 = 0;
+			_flag1 = false;
 		} else {
 			_animationFrame++;
-
-			if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(*animation)) {
-				frameRes = _animationFrame;
-			} else {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) {
 				_animationFrame = 0;
-				frameRes = 0;
 			}
 		}
 		break;
@@ -191,12 +182,8 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) {
 	case 2:
 		*animation = 664;
 		_animationFrame++;
-
-		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(664)) {
-			frameRes = _animationFrame;
-		} else {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(664)) {
 			_animationFrame = 0;
-			frameRes = 0;
 			_animationState = 1;
 			*animation = 663;
 		}
@@ -205,12 +192,8 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) {
 	case 3:
 		*animation = 665;
 		_animationFrame++;
-
-		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(665)) {
-			frameRes = _animationFrame;
-		} else {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(665)) {
 			_animationFrame = 0;
-			frameRes = 0;
 			_animationState = 1;
 			*animation = 663;
 		}
@@ -219,12 +202,8 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) {
 	case 4:
 		*animation = 666;
 		_animationFrame++;
-
-		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(666)) {
-			frameRes = _animationFrame;
-		} else {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(666)) {
 			_animationFrame = 0;
-			frameRes = 0;
 			_animationState = 1;
 			*animation = 663;
 		}
@@ -233,12 +212,8 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) {
 	case 5:
 		*animation = 667;
 		_animationFrame++;
-
-		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(667)) {
-			frameRes = _animationFrame;
-		} else {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(667)) {
 			_animationFrame = 0;
-			frameRes = 0;
 			_animationState = 1;
 			*animation = 663;
 		}
@@ -247,31 +222,24 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) {
 	case 6:
 		*animation = 668;
 		_animationFrame++;
-
-		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(668)) {
-			frameRes = _animationFrame;
-		} else {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(668)) {
 			_animationFrame = 0;
-			frameRes = 0;
 		}
 		break;
 
 	case 7:
 		*animation = 669;
 
-		if (!_animationFrame && _var2) {
+		if (_animationFrame == 0
+		 && _flag2
+		) {
 			Actor_Change_Animation_Mode(kActorDeskClerk, 72);
 			*animation = 668;
 			_animationState = 6;
-			frameRes = _animationFrame;
 		} else {
 			_animationFrame++;
-
-			if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(*animation)) {
-				frameRes = _animationFrame;
-			} else {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) {
 				_animationFrame = 0;
-				frameRes = 0;
 			}
 		}
 		break;
@@ -279,33 +247,24 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) {
 	case 8:
 		*animation = 670;
 		_animationFrame++;
-
-		if (_animationFrame <= Slice_Animation_Query_Number_Of_Frames(670) - 2) {
-			frameRes = _animationFrame;
-		} else {
+		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(670) - 2) {
 			Ambient_Sounds_Play_Sound(206, 40, 30, 30, 99);
-			Actor_Set_Goal_Number(kActorDeskClerk, 1);
-			Actor_Change_Animation_Mode(kActorDeskClerk, 0);
+			Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkKnockedOut);
+			Actor_Change_Animation_Mode(kActorDeskClerk, kAnimationModeIdle);
 			*animation = 661;
 			_animationFrame = 0;
-			frameRes = 0;
 			_animationState = 0;
 		}
 		break;
-
-	default:
-		frameRes = _animationFrame;
-		break;
 	}
 
-	*frame = frameRes;
-
+	*frame = _animationFrame;
 	return true;
 }
 
 bool AIScriptDeskClerk::ChangeAnimationMode(int mode) {
 	switch (mode) {
-	case 0:
+	case kAnimationModeIdle:
 		switch (_animationState) {
 		case 0:
 			_animationState = 8;
@@ -317,7 +276,7 @@ bool AIScriptDeskClerk::ChangeAnimationMode(int mode) {
 		case 3:
 		case 4:
 		case 5:
-			_var2 = 1;
+			_flag2 = true;
 			break;
 
 		case 6:
@@ -327,40 +286,40 @@ bool AIScriptDeskClerk::ChangeAnimationMode(int mode) {
 		default:
 			_animationState = 0;
 			_animationFrame = 0;
-			_var1 = 0;
+			_flag1 = false;
 			_var3 = Random_Query(70, 140);
 			break;
 		}
 		break;
 
-	case 3:
+	case kAnimationModeTalk:
 		_animationState = 1;
 		_animationFrame = 0;
-		_var2 = 0;
+		_flag2 = false;
 		break;
 
 	case 12:
 		_animationState = 2;
 		_animationFrame = 0;
-		_var2 = 0;
+		_flag2 = false;
 		break;
 
 	case 13:
 		_animationState = 3;
 		_animationFrame = 0;
-		_var2 = 0;
+		_flag2 = false;
 		break;
 
 	case 14:
 		_animationState = 4;
 		_animationFrame = 0;
-		_var2 = 0;
+		_flag2 = false;
 		break;
 
 	case 15:
 		_animationState = 5;
 		_animationFrame = 0;
-		_var2 = 0;
+		_flag2 = false;
 		break;
 
 	case 26:
@@ -371,7 +330,7 @@ bool AIScriptDeskClerk::ChangeAnimationMode(int mode) {
 	case 58:
 		_animationState = 7;
 		_animationFrame = 0;
-		_var2 = 0;
+		_flag2 = false;
 		break;
 
 	case 72:
@@ -380,9 +339,6 @@ bool AIScriptDeskClerk::ChangeAnimationMode(int mode) {
 			_animationFrame = 0;
 		}
 		break;
-
-	default:
-		break;
 	}
 
 	return true;
diff --git a/engines/bladerunner/script/ai/leon.cpp b/engines/bladerunner/script/ai/leon.cpp
index bbb940e..0e1a115 100644
--- a/engines/bladerunner/script/ai/leon.cpp
+++ b/engines/bladerunner/script/ai/leon.cpp
@@ -25,17 +25,17 @@
 namespace BladeRunner {
 
 AIScriptLeon::AIScriptLeon(BladeRunnerEngine *vm) : AIScriptBase(vm) {
-	var_45EDA0_z = 0.0f;
-	var_45EDA4_y = 0.0f;
-	var_45EDA8_x = 0.0f;
-	var_45EDAC = 0;
+	_mcCoyPositionX = 0.0f;
+	_mcCoyPositionY = 0.0f;
+	_mcCoyPositionZ = 0.0f;
+	_flag = false;
 }
 
 void AIScriptLeon::Initialize() {
-	var_45EDA0_z = 0.0f;
-	var_45EDA4_y = 0.0f;
-	var_45EDA8_x = 0.0f;
-	var_45EDAC = 0;
+	_mcCoyPositionX = 0.0f;
+	_mcCoyPositionY = 0.0f;
+	_mcCoyPositionZ = 0.0f;
+	_flag = false;
 	_animationStateNext = 0;
 	_animationNext = 0;
 	_animationFrame = 0;
@@ -44,22 +44,28 @@ void AIScriptLeon::Initialize() {
 
 bool AIScriptLeon::Update() {
 	int goalNumber = Actor_Query_Goal_Number(kActorLeon);
-	if (goalNumber == 3) {
-		Actor_Set_Goal_Number(kActorLeon, 4);
+
+	if (goalNumber == kGoalLeonPrepareTalkToMcCoy) {
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonTalkToMcCoy);
 		return true;
 	}
-	if (goalNumber == 5) {
-		if (Player_Query_Combat_Mode() == 1) {
-			Actor_Set_Goal_Number(kActorLeon, 7);
+
+	if (goalNumber == kGoalLeonApproachMcCoy) {
+		if (Player_Query_Combat_Mode()) {
+			Actor_Set_Goal_Number(kActorLeon, kGoalLeonLeave);
 			return true;
 		}
-		if (Actor_Query_Inch_Distance_From_Actor(kActorLeon, 0) <= 36 && !Player_Query_Combat_Mode()) {
-			Actor_Set_Goal_Number(kActorLeon, 6);
+
+		if ( Actor_Query_Inch_Distance_From_Actor(kActorLeon, kActorMcCoy) <= 36
+		 && !Player_Query_Combat_Mode()
+		) {
+			Actor_Set_Goal_Number(kActorLeon, kGoalLeonPunchMcCoy);
 			return true;
 		}
-		if (sub_446700(kActorLeon, var_45EDA8_x, var_45EDA4_y, var_45EDA0_z) > 12.0f) {
-			Actor_Query_XYZ(kActorMcCoy, &var_45EDA8_x, &var_45EDA4_y, &var_45EDA0_z);
-			Async_Actor_Walk_To_XYZ(kActorLeon, var_45EDA8_x, var_45EDA4_y, var_45EDA0_z, 24, false);
+
+		if (distanceTo(kActorLeon, _mcCoyPositionX, _mcCoyPositionY, _mcCoyPositionZ) > 12.0f) {
+			Actor_Query_XYZ(kActorMcCoy, &_mcCoyPositionX, &_mcCoyPositionY, &_mcCoyPositionZ);
+			Async_Actor_Walk_To_XYZ(kActorLeon, _mcCoyPositionX, _mcCoyPositionY, _mcCoyPositionZ, 24, false);
 		}
 		return true;
 	}
@@ -67,14 +73,16 @@ bool AIScriptLeon::Update() {
 }
 
 void AIScriptLeon::TimerExpired(int timer) {
-	if (timer == 0 && Actor_Query_Goal_Number(kActorLeon) == 7) {
+	if (timer == 0
+	 && Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave
+	) {
 		AI_Countdown_Timer_Reset(kActorLeon, 0);
-		Actor_Set_Goal_Number(kActorLeon, 8);
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonGone);
 	}
 }
 
 void AIScriptLeon::CompletedMovementTrack() {
-	if (Actor_Query_Goal_Number(kActorLeon) == 7) {
+	if (Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave) {
 		AI_Countdown_Timer_Reset(kActorLeon, 0);
 		AI_Countdown_Timer_Start(kActorLeon, 0, 8);
 		//return true;
@@ -85,13 +93,13 @@ void AIScriptLeon::CompletedMovementTrack() {
 void AIScriptLeon::ReceivedClue(int clueId, int fromActorId) {}
 
 void AIScriptLeon::ClickedByPlayer() {
-	if (Actor_Query_Goal_Number(kActorLeon) == 1) {
-		Game_Flag_Set(539);
+	if (Actor_Query_Goal_Number(kActorLeon) == kGoalLeonHoldingDeskClerk) {
+		Game_Flag_Set(kFlagCT09LeonInterrupted);
 		Player_Loses_Control();
 		Actor_Face_Actor(kActorMcCoy, kActorLeon, true);
 		ADQ_Flush();
-		Actor_Says(kActorMcCoy, 495, 3);
-		Actor_Set_Goal_Number(kActorLeon, 2);
+		Actor_Says(kActorMcCoy, 495, kAnimationModeTalk);
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonReleaseDeskClerk);
 		//return true;
 	}
 	//return false;
@@ -100,7 +108,9 @@ void AIScriptLeon::ClickedByPlayer() {
 void AIScriptLeon::EnteredScene(int sceneId) {}
 
 void AIScriptLeon::OtherAgentEnteredThisScene(int otherActorId) {
-	if (otherActorId == kActorMcCoy && Actor_Query_Goal_Number(kActorLeon) == 7) {
+	if (otherActorId == kActorMcCoy
+	 && Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave
+	) {
 		AI_Countdown_Timer_Reset(kActorLeon, 0);
 		AI_Movement_Track_Flush(kActorLeon);
 		AI_Movement_Track_Append(kActorLeon, 353, 0);
@@ -111,23 +121,28 @@ void AIScriptLeon::OtherAgentEnteredThisScene(int otherActorId) {
 }
 
 void AIScriptLeon::OtherAgentExitedThisScene(int otherActorId) {
-	if (otherActorId == kActorMcCoy && Actor_Query_Which_Set_In(kActorLeon) == 33) {
+	if (otherActorId == kActorMcCoy
+	 && Actor_Query_Which_Set_In(kActorLeon) == kSetCT11
+	) {
 		AI_Movement_Track_Flush(kActorLeon);
 		ADQ_Flush();
-		Actor_Set_Goal_Number(kActorLeon, 8);
-		Actor_Set_Goal_Number(kActorDeskClerk, 1);
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonGone);
+		Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkKnockedOut);
 		//return true;
 	}
 	///return false;
 }
 
 void AIScriptLeon::OtherAgentEnteredCombatMode(int otherActorId, int combatMode) {
-	if (otherActorId == kActorMcCoy && combatMode == 1 && Actor_Query_Goal_Number(kActorLeon) == 1) {
-		Game_Flag_Set(539);
+	if (otherActorId == kActorMcCoy
+	 && combatMode == 1
+	 && Actor_Query_Goal_Number(kActorLeon) == kGoalLeonHoldingDeskClerk
+	) {
+		Game_Flag_Set(kFlagCT09LeonInterrupted);
 		Player_Loses_Control();
 		Actor_Face_Actor(kActorMcCoy, kActorLeon, true);
-		Actor_Says(kActorMcCoy, 500, 5);
-		Actor_Set_Goal_Number(kActorLeon, 2);
+		Actor_Says(kActorMcCoy, 500, kAnimationModeCombatAim);
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonReleaseDeskClerk);
 		//return true;
 	}
 	//return false;
@@ -136,8 +151,8 @@ void AIScriptLeon::OtherAgentEnteredCombatMode(int otherActorId, int combatMode)
 void AIScriptLeon::ShotAtAndMissed() {}
 
 bool AIScriptLeon::ShotAtAndHit() {
-	if (Actor_Query_Goal_Number(kActorLeon) != 7) {
-		Actor_Set_Goal_Number(kActorLeon, 7);
+	if (Actor_Query_Goal_Number(kActorLeon) != kGoalLeonLeave) {
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonLeave);
 	}
 	return false;
 }
@@ -150,94 +165,101 @@ int AIScriptLeon::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId
 
 bool AIScriptLeon::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 	switch (newGoalNumber) {
-	case 8:
+	case kGoalLeonDefault:
 		Actor_Put_In_Set(kActorLeon, kSetFreeSlotA);
-		AI_Movement_Track_Flush(kActorLeon);
+		Actor_Change_Animation_Mode(kActorLeon, kAnimationModeIdle);
 		return true;
-	case 7:
-		Actor_Force_Stop_Walking(kActorLeon);
-		AI_Movement_Track_Flush(kActorLeon);
-		AI_Movement_Track_Append(kActorLeon, 351, 0);
-		AI_Movement_Track_Append(kActorLeon, 352, 0);
-		AI_Movement_Track_Repeat(kActorLeon);
+
+	case kGoalLeonHoldingDeskClerk:
+		Actor_Change_Animation_Mode(kActorDeskClerk, 72);
+		Actor_Change_Animation_Mode(kActorLeon, 72);
+		Actor_Put_In_Set(kActorLeon, kSetCT09);
+		Actor_Set_At_XYZ(kActorLeon, 264.0f, 348.52f, 827.0f, 0);
+		Actor_Face_Actor(kActorDeskClerk, kActorLeon, true);
+		ADQ_Add(kActorLeon, 0, 16);
+		ADQ_Add(kActorDeskClerk, 0, 58);
+		ADQ_Add(kActorLeon, 10, 15);
+		ADQ_Add(kActorDeskClerk, 10, 58);
+		ADQ_Add(kActorLeon, 20, 16);
 		return true;
-	case 6:
-		Player_Loses_Control();
-		Actor_Says(kActorLeon, 40, 3);
-		Actor_Says(kActorMcCoy, 510, 3);
-		Actor_Says(kActorLeon, 50, 3);
-		Actor_Change_Animation_Mode(kActorLeon, 6);
-		return false;
-	case 5:
+
+	case kGoalLeonReleaseDeskClerk:
+		Actor_Change_Animation_Mode(kActorLeon, 26);
+		Actor_Change_Animation_Mode(kActorDeskClerk, 26);
 		return true;
-	case 4:
+
+	case kGoalLeonTalkToMcCoy:
 		Actor_Face_Actor(kActorLeon, kActorMcCoy, true);
 		Player_Set_Combat_Mode(false);
 		Actor_Says(kActorLeon, 30, 12);
 		Actor_Face_Actor(kActorMcCoy, kActorLeon, true);
-		if (Player_Query_Combat_Mode() == 1) {
+		if (Player_Query_Combat_Mode()) {
 			Player_Set_Combat_Mode(false);
 		}
 		Actor_Says(kActorMcCoy, 505, 23);
 		Actor_Says(kActorLeon, 60, 13);
 		Player_Gains_Control();
-		Loop_Actor_Walk_To_XYZ(kActorLeon, 233.0f, 349.0f, 849.0f, 0, 0, false, 0);
-		Actor_Face_Actor(kActorLeon, 0, true);
+		Loop_Actor_Walk_To_XYZ(kActorLeon, 233.0f, 349.0f, 849.0f, 0, false, false, 0);
+		Actor_Face_Actor(kActorLeon, kActorMcCoy, true);
 		Actor_Face_Actor(kActorMcCoy, kActorLeon, true);
 		Actor_Says(kActorMcCoy, 515, 18);
 		Actor_Says_With_Pause(kActorLeon, 70, 0.3f, 12);
 		Actor_Says(kActorMcCoy, 520, 15);
 		Actor_Says(kActorLeon, 80, 12);
-		Loop_Actor_Walk_To_XYZ(kActorLeon, 198.0f, 349.0f, 865.0f, 0, 0, false, 0);
-		Actor_Face_Actor(kActorLeon, 0, true);
+		Loop_Actor_Walk_To_XYZ(kActorLeon, 198.0f, 349.0f, 865.0f, 0, false, false, 0);
+		Actor_Face_Actor(kActorLeon, kActorMcCoy, true);
 		Actor_Face_Actor(kActorMcCoy, kActorLeon, true);
-		if (Actor_Clue_Query(kActorMcCoy, kClueWantedPoster)) {
+		if (Actor_Clue_Query(kActorMcCoy, kClueWantedPoster)) { // there is no way how to obtain this poster
 			Actor_Says_With_Pause(kActorMcCoy, 525, 0.2f, 14);
 			Actor_Says(kActorLeon, 90, 13);
 			Actor_Says(kActorMcCoy, 530, 16);
-			Actor_Set_Goal_Number(kActorLeon, 5);
+			Actor_Set_Goal_Number(kActorLeon, kGoalLeonApproachMcCoy);
 		} else {
 			Actor_Says_With_Pause(kActorMcCoy, 535, 0.8f, 17);
 			Actor_Says(kActorLeon, 100, 13);
 			Actor_Says_With_Pause(kActorMcCoy, 540, 0.0f, 19);
-			Actor_Says(kActorLeon, 110, 3);
+			Actor_Says(kActorLeon, 110, kAnimationModeTalk);
 			Actor_Says(kActorMcCoy, 550, 17);
 			Actor_Says(kActorMcCoy, 555, 18);
 			Actor_Says(kActorLeon, 120, 13);
-			Actor_Says(kActorMcCoy, 560, 3);
-			Actor_Says_With_Pause(kActorLeon, 130, 0.8f, 3);
+			Actor_Says(kActorMcCoy, 560, kAnimationModeTalk);
+			Actor_Says_With_Pause(kActorLeon, 130, 0.8f, kAnimationModeTalk);
 			Actor_Face_Current_Camera(kActorMcCoy, true);
 			Actor_Says(kActorMcCoy, 565, 18);
 			Actor_Face_Actor(kActorMcCoy, kActorLeon, true);
 			Actor_Says(kActorLeon, 140, 12);
 			Actor_Says_With_Pause(kActorMcCoy, 570, 0.0f, 17);
 			Actor_Says_With_Pause(kActorMcCoy, 575, 1.2f, 13);
-			Actor_Says(kActorLeon, 150, 3);
-			Actor_Says(kActorMcCoy, 580, 3);
+			Actor_Says(kActorLeon, 150, kAnimationModeTalk);
+			Actor_Says(kActorMcCoy, 580, kAnimationModeTalk);
 			Actor_Says(kActorLeon, 160, 13);
 			Actor_Says(kActorLeon, 170, 12);
-			Actor_Set_Goal_Number(kActorLeon, 7);
+			Actor_Set_Goal_Number(kActorLeon, kGoalLeonLeave);
 		}
 		return true;
-	case 2:
-		Actor_Change_Animation_Mode(kActorLeon, 26);
-		Actor_Change_Animation_Mode(kActorDeskClerk, 26);
+
+	case kGoalLeonApproachMcCoy:
 		return true;
-	case 1:
-		Actor_Change_Animation_Mode(kActorDeskClerk, 72);
-		Actor_Change_Animation_Mode(kActorLeon, 72);
-		Actor_Put_In_Set(kActorLeon, kSetCT09);
-		Actor_Set_At_XYZ(kActorLeon, 264.0f, 348.52f, 827.0f, 0);
-		Actor_Face_Actor(kActorDeskClerk, kActorLeon, true);
-		ADQ_Add(kActorLeon, 0, 16);
-		ADQ_Add(kActorDeskClerk, 0, 58);
-		ADQ_Add(kActorLeon, 10, 15);
-		ADQ_Add(kActorDeskClerk, 10, 58);
-		ADQ_Add(kActorLeon, 20, 16);
+
+	case kGoalLeonPunchMcCoy:
+		Player_Loses_Control();
+		Actor_Says(kActorLeon, 40, kAnimationModeTalk);
+		Actor_Says(kActorMcCoy, 510, kAnimationModeTalk);
+		Actor_Says(kActorLeon, 50, kAnimationModeTalk);
+		Actor_Change_Animation_Mode(kActorLeon, kAnimationModeCombatAttack);
+		return false;
+
+	case kGoalLeonLeave:
+		Actor_Force_Stop_Walking(kActorLeon);
+		AI_Movement_Track_Flush(kActorLeon);
+		AI_Movement_Track_Append(kActorLeon, 351, 0);
+		AI_Movement_Track_Append(kActorLeon, 352, 0);
+		AI_Movement_Track_Repeat(kActorLeon);
 		return true;
-	case 0:
+
+	case kGoalLeonGone:
 		Actor_Put_In_Set(kActorLeon, kSetFreeSlotA);
-		Actor_Change_Animation_Mode(kActorLeon, 0);
+		AI_Movement_Track_Flush(kActorLeon);
 		return true;
 	}
 	return false;
@@ -245,110 +267,126 @@ bool AIScriptLeon::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 bool AIScriptLeon::UpdateAnimation(int *animation, int *frame) {
 	switch (_animationState) {
-	case 10:
-		*animation = 856;
-		if (_animationFrame++ == 7) {
-			Actor_Change_Animation_Mode(kActorMcCoy, 48);
-			Actor_Retired_Here(kActorMcCoy, 12, 12, 1, -1);
-		}
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(*animation) - 1) {
-			*animation = 847;
-			_animationFrame = 0;
-			Actor_Change_Animation_Mode(kActorLeon, 0);
-		}
-		break;
-	case 9:
-		*animation = 849;
-		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(849) - 1) {
-			Actor_Change_Animation_Mode(kActorLeon, 0);
-			*animation = 847;
-			_animationFrame = 0;
-			_animationState = 0;
-			if (Actor_Query_Goal_Number(kActorLeon) == 2) {
-				Actor_Set_Goal_Number(kActorLeon, 3);
-			}
-		}
-		break;
-	case 8:
-		*animation = 854;
+	case 0:
+		*animation = 847;
 		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(854) - 1) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(847)) {
 			_animationFrame = 0;
 		}
 		break;
-	case 7:
-		*animation = 855;
+
+	case 1:
+		*animation = 846;
 		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(855) - 1) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(846)) {
 			_animationFrame = 0;
-			_animationState = 6;
-			*animation = 854;
 		}
 		break;
-	case 6:
-		if (_animationFrame == 0 && var_45EDAC != 0) {
-			Actor_Change_Animation_Mode(kActorLeon, 72);
-			*animation = 848;
+
+	case 2:
+		if (_animationFrame == 0
+		 && _flag
+		) {
+			*animation = 847;
+			_animationState = 0;
 		} else {
-			*animation = 854;
+			*animation = 850;
 			_animationFrame++;
-			if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(854) - 1) {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(850)) {
 				_animationFrame = 0;
 			}
 		}
 		break;
-	case 5:
-		*animation = 853;
+
+	case 3:
+		*animation = 851;
 		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(853) - 1) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(851)) {
 			_animationFrame = 0;
 			_animationState = 2;
 			*animation = 850;
 		}
 		break;
+
 	case 4:
 		*animation = 852;
 		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(852) - 1) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(852)) {
 			_animationFrame = 0;
 			_animationState = 2;
 			*animation = 850;
 		}
 		break;
-	case 3:
-		*animation = 851;
+
+	case 5:
+		*animation = 853;
 		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(851) - 1) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(853)) {
 			_animationFrame = 0;
 			_animationState = 2;
 			*animation = 850;
 		}
 		break;
-	case 2:
-		if (!_animationFrame && var_45EDAC) {
-			*animation = 847;
-			_animationState = 0;
+
+	case 6:
+		if (_animationFrame == 0
+		 && _flag
+		) {
+			Actor_Change_Animation_Mode(kActorLeon, 72);
+			*animation = 848;
 		} else {
-			*animation = 850;
+			*animation = 854;
 			_animationFrame++;
-			if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(850) - 1) {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(854)) {
 				_animationFrame = 0;
 			}
 		}
 		break;
-	case 1:
-		*animation = 846;
+
+	case 7:
+		*animation = 855;
 		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(846) - 1) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(855)) {
 			_animationFrame = 0;
+			_animationState = 6;
+			*animation = 854;
 		}
 		break;
-	case 0:
-		*animation = 847;
+
+	case 8:
+		*animation = 854;
+		_animationFrame++;
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(854)) {
+			_animationFrame = 0;
+		}
+		break;
+
+	case 9:
+		*animation = 849;
 		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(847) - 1) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(849)) {
+			Actor_Change_Animation_Mode(kActorLeon, kAnimationModeIdle);
+			*animation = 847;
 			_animationFrame = 0;
+			_animationState = 0;
+			if (Actor_Query_Goal_Number(kActorLeon) == kGoalLeonReleaseDeskClerk) {
+				Actor_Set_Goal_Number(kActorLeon, kGoalLeonPrepareTalkToMcCoy);
+			}
+		}
+		break;
+
+	case 10:
+		*animation = 856;
+		_animationFrame++;
+		if (_animationFrame == 6) {
+			Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie);
+			Actor_Retired_Here(kActorMcCoy, 12, 12, true, -1);
+		}
+
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) {
+			*animation = 847;
+			_animationFrame = 0;
+			Actor_Change_Animation_Mode(kActorLeon, kAnimationModeIdle);
 		}
 		break;
 	}
@@ -366,7 +404,7 @@ bool AIScriptLeon::ChangeAnimationMode(int mode) {
 		case 5:
 		case 6:
 		case 7:
-			var_45EDAC = 1;
+			_flag = true;
 			break;
 		case 8:
 			Actor_Change_Animation_Mode(kActorLeon, 72);
@@ -377,48 +415,58 @@ bool AIScriptLeon::ChangeAnimationMode(int mode) {
 			break;
 		}
 		break;
+
 	case kAnimationModeWalk:
 		_animationState = 1;
 		_animationFrame = 0;
 		break;
+
 	case kAnimationModeTalk:
 		_animationState = 2;
 		_animationFrame = 0;
-		var_45EDAC = 0;
+		_flag = false;
 		break;
+
 	case kAnimationModeCombatAttack:
 		_animationState = 10;
 		_animationFrame = 0;
 		break;
+
 	case 12:
 		_animationState = 3;
 		_animationFrame = 0;
-		var_45EDAC = 0;
+		_flag = false;
 		break;
+
 	case 13:
 		_animationState = 4;
 		_animationFrame = 0;
-		var_45EDAC = 0;
+		_flag = false;
 		break;
+
 	case 14:
 		_animationState = 5;
 		_animationFrame = 0;
-		var_45EDAC = 0;
+		_flag = false;
 		break;
+
 	case 15:
 		_animationState = 6;
 		_animationFrame = 0;
-		var_45EDAC = 0;
+		_flag = false;
 		break;
+
 	case 16:
 		_animationState = 7;
 		_animationFrame = 0;
-		var_45EDAC = 0;
+		_flag = false;
 		break;
+
 	case 26:
 		_animationState = 9;
 		_animationFrame = 0;
 		break;
+
 	case 72:
 		if (_animationState != 8) {
 			_animationState = 8;
@@ -445,14 +493,14 @@ void AIScriptLeon::SetAnimationState(int animationState, int animationFrame, int
 
 bool AIScriptLeon::ReachedMovementTrackWaypoint(int waypointId) {
 	if (waypointId == 353) {
-		Actor_Set_Goal_Number(kActorLeon, 8);
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonGone);
 	}
 	return true;
 }
 
 void AIScriptLeon::FledCombat() {}
 
-float AIScriptLeon::sub_446700(int actorId, float x, float y, float z) {
+float AIScriptLeon::distanceTo(int actorId, float x, float y, float z) {
 	float actorX, actorY, actorZ;
 	Actor_Query_XYZ(actorId, &actorX, &actorY, &actorZ);
 	return sqrt(static_cast<float>((z - actorZ) * (z - actorZ) + (y - actorY) * (y - actorY) + (x - actorX) * (x - actorX)));
diff --git a/engines/bladerunner/script/ai_script.h b/engines/bladerunner/script/ai_script.h
index 9252db3..691a9cf 100644
--- a/engines/bladerunner/script/ai_script.h
+++ b/engines/bladerunner/script/ai_script.h
@@ -299,8 +299,8 @@ DECLARE_SCRIPT(Baker)
 END_SCRIPT
 
 DECLARE_SCRIPT(DeskClerk)
-	int _var1;
-	int _var2;
+	bool _flag1;
+	bool _flag2;
 	int _var3;
 END_SCRIPT
 
@@ -445,12 +445,12 @@ DECLARE_SCRIPT(Newscaster)
 END_SCRIPT
 
 DECLARE_SCRIPT(Leon)
-	int var_45EDAC;
-	float var_45EDA0_z;
-	float var_45EDA4_y;
-	float var_45EDA8_x;
+	bool _flag;
+	float _mcCoyPositionX;
+	float _mcCoyPositionY;
+	float _mcCoyPositionZ;
 
-	float sub_446700(int actorId, float x, float y, float z);
+	float distanceTo(int actorId, float x, float y, float z);
 END_SCRIPT
 
 DECLARE_SCRIPT(MaleAnnouncer)
diff --git a/engines/bladerunner/script/scene/ct09.cpp b/engines/bladerunner/script/scene/ct09.cpp
index c9506d5..4211ae0 100644
--- a/engines/bladerunner/script/scene/ct09.cpp
+++ b/engines/bladerunner/script/scene/ct09.cpp
@@ -25,16 +25,18 @@
 namespace BladeRunner {
 
 void SceneScriptCT09::InitializeScene() {
-	if (Game_Flag_Query(85)) {
-		Setup_Scene_Information(160.0f, 349.0f, 587.0f, 490);
+	if (Game_Flag_Query(kFlagCT10toCT09)) {
+		Setup_Scene_Information(160.0f,   349.0f, 587.0f, 490);
 	} else if (Game_Flag_Query(kFlagCT08toCT09)) {
 		Setup_Scene_Information(235.0f, 3348.52f, 599.0f, 800);
 	} else {
-		Setup_Scene_Information(107.0f, 348.52f, 927.0f, 200);
+		Setup_Scene_Information(107.0f,  348.52f, 927.0f, 200);
 	}
+
 	Scene_Exit_Add_2D_Exit(0, 321, 164, 345, 309, 1);
-	Scene_Exit_Add_2D_Exit(1, 0, 0, 15, 479, 3);
+	Scene_Exit_Add_2D_Exit(1,   0,   0,  15, 479, 3);
 	Scene_Exit_Add_2D_Exit(2, 198, 177, 263, 311, 0);
+
 	Ambient_Sounds_Add_Looping_Sound(336, 28, 0, 1);
 	Ambient_Sounds_Add_Sound(375, 6, 180, 33, 33, 0, 0, -101, -101, 0, 0);
 	Ambient_Sounds_Add_Sound(376, 5, 180, 33, 33, 0, 0, -101, -101, 0, 0);
@@ -54,12 +56,12 @@ bool SceneScriptCT09::MouseClick(int x, int y) {
 
 bool SceneScriptCT09::ClickedOn3DObject(const char *objectName, bool a2) {
 	if (Object_Query_Click("BELL", objectName)) {
-		if (Actor_Query_Which_Set_In(kActorLeon) != 31) {
-			if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 229.0f, 348.52f, 851.0f, 36, 1, false, 0)) {
+		if (Actor_Query_Which_Set_In(kActorLeon) != kSetCT09) {
+			if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 229.0f, 348.52f, 851.0f, 36, true, false, 0)) {
 				Actor_Face_Object(kActorMcCoy, "BELL", true);
 				Sound_Play(337, 100, 0, 0, 50);
 				if (!Actor_Query_Goal_Number(kActorDeskClerk)) {
-					Actor_Says(kActorDeskClerk, 160, 3);
+					Actor_Says(kActorDeskClerk, 160, kAnimationModeTalk);
 				}
 			}
 		}
@@ -70,28 +72,30 @@ bool SceneScriptCT09::ClickedOn3DObject(const char *objectName, bool a2) {
 
 bool SceneScriptCT09::ClickedOnActor(int actorId) {
 	if (actorId == kActorDeskClerk) {
-		if (!Actor_Query_Goal_Number(kActorDeskClerk) && Actor_Query_Which_Set_In(kActorLeon) != 31) {
-			if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 270.0f, 348.52f, 846.0f, 12, 1, false, 0)) {
+		if (Actor_Query_Goal_Number(kActorDeskClerk) == kGoalDeskClerkDefault
+		 && Actor_Query_Which_Set_In(kActorLeon) != kSetCT09
+		) {
+			if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 270.0f, 348.52f, 846.0f, 12, true, false, 0)) {
 				Player_Loses_Control();
 				Actor_Face_Actor(kActorMcCoy, kActorDeskClerk, true);
-				if (Global_Variable_Query(kVariableChapter) < 3) {
-					Actor_Says(kActorMcCoy, 650, 3);
+				if (Global_Variable_Query(kVariableChapter) < 3) { // it is impossible to get here before chapter 3
+					Actor_Says(kActorMcCoy, 650, kAnimationModeTalk);
 					Actor_Says(kActorDeskClerk, 250, 12);
 					Actor_Says(kActorMcCoy, 665, 18);
-				} else if (Game_Flag_Query(540)) {
-					Actor_Says(kActorMcCoy, 650, 18);
-					Actor_Says(kActorDeskClerk, 220, 15);
-				} else {
-					Game_Flag_Set(540);
+				} else if (!Game_Flag_Query(kFlagCT09DeskClerkTalk)) {
+					Game_Flag_Set(kFlagCT09DeskClerkTalk);
 					Actor_Says(kActorDeskClerk, 170, 13);
 					Actor_Says(kActorMcCoy, 630, 12);
 					Actor_Says(kActorDeskClerk, 180, 14);
-					Actor_Says(kActorMcCoy, 635, 3);
+					Actor_Says(kActorMcCoy, 635, kAnimationModeTalk);
 					Actor_Says(kActorDeskClerk, 190, 15);
 					Actor_Says(kActorMcCoy, 640, 12);
-					Actor_Says(kActorMcCoy, 645, 3);
+					Actor_Says(kActorMcCoy, 645, kAnimationModeTalk);
 					Actor_Says(kActorDeskClerk, 200, 13);
 					Actor_Says(kActorDeskClerk, 210, 14);
+				} else {
+					Actor_Says(kActorMcCoy, 650, 18);
+					Actor_Says(kActorDeskClerk, 220, 15);
 				}
 				Player_Gains_Control();
 			}
@@ -107,8 +111,8 @@ bool SceneScriptCT09::ClickedOnItem(int itemId, bool a2) {
 
 bool SceneScriptCT09::ClickedOnExit(int exitId) {
 	if (exitId == 0) {
-		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 206.0f, 348.52f, 599.0f, 0, 1, false, 0)) {
-			Loop_Actor_Walk_To_XYZ(kActorMcCoy, 235.0f, 348.52f, 599.0f, 0, 0, false, 0);
+		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 206.0f, 348.52f, 599.0f, 0, true, false, 0)) {
+			Loop_Actor_Walk_To_XYZ(kActorMcCoy, 235.0f, 348.52f, 599.0f, 0, false, false, 0);
 			Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 			Ambient_Sounds_Remove_All_Looping_Sounds(1);
 			Game_Flag_Set(kFlagCT09toCT08);
@@ -116,8 +120,9 @@ bool SceneScriptCT09::ClickedOnExit(int exitId) {
 		}
 		return true;
 	}
+
 	if (exitId == 1) {
-		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 107.0f, 348.52f, 927.0f, 0, 1, false, 0)) {
+		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 107.0f, 348.52f, 927.0f, 0, true, false, 0)) {
 			Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 			Ambient_Sounds_Remove_All_Looping_Sounds(1);
 			Game_Flag_Set(kFlagCT09toCT11);
@@ -125,8 +130,9 @@ bool SceneScriptCT09::ClickedOnExit(int exitId) {
 		}
 		return true;
 	}
+
 	if (exitId == 2) {
-		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 159.0f, 349.0f, 570.0f, 0, 1, false, 0)) {
+		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 159.0f, 349.0f, 570.0f, 0, true, false, 0)) {
 			Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 			Ambient_Sounds_Remove_All_Looping_Sounds(1);
 			Game_Flag_Set(kFlagCT09toCT10);
@@ -142,7 +148,13 @@ bool SceneScriptCT09::ClickedOn2DRegion(int region) {
 }
 
 void SceneScriptCT09::SceneFrameAdvanced(int frame) {
-	if (frame == 6 || frame == 12 || frame == 19 || frame == 25 || frame == 46 || frame == 59) {
+	if (frame == 6
+	 || frame == 12
+	 || frame == 19
+	 || frame == 25
+	 || frame == 46
+	 || frame == 59
+	) {
 		Sound_Play(97, Random_Query(47, 47), 70, 70, 50);
 	}
 }
@@ -151,31 +163,36 @@ void SceneScriptCT09::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo
 }
 
 void SceneScriptCT09::PlayerWalkedIn() {
-	bool v0 = false;
-	if (Global_Variable_Query(kVariableChapter) == 3 && !Game_Flag_Query(538)) {
-		Game_Flag_Set(538);
-		Actor_Set_Goal_Number(kActorLeon, 1);
-		v0 = true;
+	bool leonScene = false;
+
+	if ( Global_Variable_Query(kVariableChapter) == 3
+	 && !Game_Flag_Query(kFlagCT09Entered)
+	) {
+		Game_Flag_Set(kFlagCT09Entered);
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonHoldingDeskClerk);
+		leonScene = true;
 	}
+
 	if (Game_Flag_Query(kFlagCT10toCT09)) {
 		Game_Flag_Reset(kFlagCT10toCT09);
 	} else if (Game_Flag_Query(kFlagCT08toCT09)) {
-		if (v0) {
+		if (leonScene) {
 			Async_Actor_Walk_To_XYZ(kActorMcCoy, 206.0f, 348.52f, 599.0f, 0, false);
 		} else {
-			Loop_Actor_Walk_To_XYZ(kActorMcCoy, 206.0f, 348.52f, 599.0f, 0, 0, false, 0);
+			Loop_Actor_Walk_To_XYZ(kActorMcCoy, 206.0f, 348.52f, 599.0f, 0, false, false, 0);
 		}
 		Game_Flag_Reset(kFlagCT08toCT09);
 	} else {
-		if (v0) {
+		if (leonScene) {
 			Async_Actor_Walk_To_XYZ(kActorMcCoy, 124.0f, 348.52f, 886.0f, 0, false);
 		} else {
-			Loop_Actor_Walk_To_XYZ(kActorMcCoy, 124.0f, 348.52f, 886.0f, 0, 0, false, 0);
+			Loop_Actor_Walk_To_XYZ(kActorMcCoy, 124.0f, 348.52f, 886.0f, 0, false, false, 0);
 		}
 		Game_Flag_Reset(kFlagCT11toCT09);
 	}
-	if (Actor_Query_Goal_Number(kActorDeskClerk) == 2) {
-		if (Game_Flag_Query(539)) {
+
+	if (Actor_Query_Goal_Number(kActorDeskClerk) == kGoalDeskClerkRecovered) {
+		if (Game_Flag_Query(kFlagCT09LeonInterrupted)) {
 			Actor_Says(kActorDeskClerk, 70, 13);
 			Actor_Face_Actor(kActorMcCoy, kActorDeskClerk, true);
 			Actor_Says(kActorMcCoy, 600, 17);
@@ -193,7 +210,7 @@ void SceneScriptCT09::PlayerWalkedIn() {
 			Actor_Says(kActorDeskClerk, 60, 13);
 			Actor_Modify_Friendliness_To_Other(kActorDeskClerk, kActorMcCoy, -1);
 		}
-		Actor_Set_Goal_Number(kActorDeskClerk, 0);
+		Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkDefault);
 	}
 }
 
@@ -202,13 +219,16 @@ void SceneScriptCT09::PlayerWalkedOut() {
 
 void SceneScriptCT09::DialogueQueueFlushed(int a1) {
 	Actor_Force_Stop_Walking(kActorMcCoy);
-	if (Actor_Query_Goal_Number(kActorLeon) == 1 && !Game_Flag_Query(539)) {
+
+	if ( Actor_Query_Goal_Number(kActorLeon) == kGoalLeonHoldingDeskClerk
+	 && !Game_Flag_Query(kFlagCT09LeonInterrupted)
+	) {
 		Player_Loses_Control();
-		Actor_Set_Goal_Number(kActorLeon, 2);
+		Actor_Set_Goal_Number(kActorLeon, kGoalLeonReleaseDeskClerk);
 		//return true;
-	} else {
-		//return false;
 	}
+
+	//return false;
 }
 
 } // End of namespace BladeRunner


Commit: 3653703a40583bc538a2d8d4f55e37fff7bd42ab
    https://github.com/scummvm/scummvm/commit/3653703a40583bc538a2d8d4f55e37fff7bd42ab
Author: Peter Kohaut (peter.kohaut at gmail.com)
Date: 2019-01-26T14:59:16+01:00

Commit Message:
BLADERUNNER: Analysed all Yukon hotel scenes

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/scene/ct07.cpp
    engines/bladerunner/script/scene/ct10.cpp
    engines/bladerunner/script/scene/ct11.cpp
    engines/bladerunner/script/scene_script.h


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 9966359..b2c5beb 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -892,6 +892,7 @@ enum Flags {
 	kFlagCT07ZubenAttack = 516,
 	kFlagTB06DogCollarTaken = 519,
 	kFlagTB06KitchenBoxTaken = 520,
+	kFlagCT10Entered = 525,
 	kFlagCT11toDR01 = 531,
 	kFlagCT09Entered = 538,
 	kFlagCT09LeonInterrupted = 539,
@@ -904,6 +905,7 @@ enum Flags {
 	kFlagKIAPrivacyAddonIntro = 599,
 	kFlagTB07toTB02 = 608,
 	kFlagTB07RachaelTalk = 612,
+	kFlagCT11DogWrapperTaken = 645,
 	kFlagMA04McCoySleeping = 647,
 	kFlagMA04PhoneMessageFromClovis = 649,
 	kFlagMA04PhoneMessageFromLucy = 650,
@@ -934,6 +936,7 @@ enum Flags {
 	kFlagCT02McCoyFell = 719,
 	kFlagCT02McCoyCombatReady = 720,
 	kFlagZubenBountyPaid = 723,
+	kFlagCT11DogWrapperAvailable = 725,
 	kFlagAR02Entered = 726,
 	kFlagPS04WeaponsOrderForm = 727
 };
@@ -1370,6 +1373,7 @@ enum GameItems {
 	kItemChair = 109,
 	kItemWeaponsCrate = 110,
 	kItemWeaponsOrderForm = 111,
+	kItemDogWrapper = 115,
 	kItemTyrellSalesPamphlet = 119,
 	kItemMoonbusPhoto = 120,
 	kItemGreenPawnLock = 121,
diff --git a/engines/bladerunner/script/scene/ct07.cpp b/engines/bladerunner/script/scene/ct07.cpp
index 9c922fe..f431085 100644
--- a/engines/bladerunner/script/scene/ct07.cpp
+++ b/engines/bladerunner/script/scene/ct07.cpp
@@ -28,8 +28,9 @@ void SceneScriptCT07::InitializeScene() {
 	Setup_Scene_Information(202.32f, -58.23f, -12.86f, 225);
 	Actor_Put_In_Set(kActorZuben, kSetCT07);
 	Actor_Set_At_XYZ(kActorZuben, -9.68f, -58.23f, 11.14f, 250);
-	Ambient_Sounds_Add_Looping_Sound( 54, 30, 90, 1);
-	Ambient_Sounds_Add_Looping_Sound(205, 20, 1, 1);
+	
+	Ambient_Sounds_Add_Looping_Sound( 54, 30,  90, 1);
+	Ambient_Sounds_Add_Looping_Sound(205, 20,   1, 1);
 	Ambient_Sounds_Add_Looping_Sound( 56, 40, 100, 1);
 	Ambient_Sounds_Add_Speech_Sound(60,  0, 10, 260, 17, 24, -100, 100, -101, -101, 1, 1);
 	Ambient_Sounds_Add_Speech_Sound(60, 20, 10, 260, 17, 24, -100, 100, -101, -101, 1, 1);
diff --git a/engines/bladerunner/script/scene/ct10.cpp b/engines/bladerunner/script/scene/ct10.cpp
index 0bbc6c2..3052fac 100644
--- a/engines/bladerunner/script/scene/ct10.cpp
+++ b/engines/bladerunner/script/scene/ct10.cpp
@@ -64,8 +64,8 @@ bool SceneScriptCT10::MouseClick(int x, int y) {
 	return false;
 }
 
-void SceneScriptCT10::sub_401844() {
-	if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 10.6f, 0.0f, -50.5f, 0, 1, false, 0)) {
+void SceneScriptCT10::checkCabinet() {
+	if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 10.6f, 0.0f, -50.5f, 0, true, false, 0)) {
 		Player_Loses_Control();
 		Actor_Face_Heading(kActorMcCoy, 0, false);
 		Sound_Play(339, 100, 0, 0, 50);
@@ -82,7 +82,7 @@ void SceneScriptCT10::sub_401844() {
 
 bool SceneScriptCT10::ClickedOn3DObject(const char *objectName, bool a2) {
 	if (Object_Query_Click("TUB", objectName)) {
-		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -41.0f, 0.0f, -106.0f, 0, 1, false, 0)) {
+		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -41.0f, 0.0f, -106.0f, 0, true, false, 0)) {
 			Player_Loses_Control();
 			Actor_Face_Heading(kActorMcCoy, 850, false);
 			Actor_Change_Animation_Mode(kActorMcCoy, 38);
@@ -101,8 +101,11 @@ bool SceneScriptCT10::ClickedOn3DObject(const char *objectName, bool a2) {
 		}
 		return true;
 	}
-	if (Object_Query_Click("CABINETTOP", objectName) || Object_Query_Click("CABINETFRONT", objectName)) {
-		sub_401844();
+
+	if (Object_Query_Click("CABINETTOP", objectName)
+	 || Object_Query_Click("CABINETFRONT", objectName)
+	) {
+		checkCabinet();
 		return true;
 	}
 	return false;
@@ -118,8 +121,8 @@ bool SceneScriptCT10::ClickedOnItem(int itemId, bool a2) {
 
 bool SceneScriptCT10::ClickedOnExit(int exitId) {
 	if (exitId == 0) {
-		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -93.0f, 0.0f, -38.0f, 0, 1, false, 0)) {
-			Loop_Actor_Walk_To_XYZ(kActorMcCoy, -121.0f, 0.0f, -78.0f, 0, 0, false, 0);
+		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -93.0f, 0.0f, -38.0f, 0, true, false, 0)) {
+			Loop_Actor_Walk_To_XYZ(kActorMcCoy, -121.0f, 0.0f, -78.0f, 0, false, false, 0);
 			Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 			Ambient_Sounds_Remove_All_Looping_Sounds(1);
 			Game_Flag_Set(kFlagCT10toCT09);
@@ -131,7 +134,7 @@ bool SceneScriptCT10::ClickedOnExit(int exitId) {
 
 bool SceneScriptCT10::ClickedOn2DRegion(int region) {
 	if (region == 0) {
-		sub_401844();
+		checkCabinet();
 	}
 	return false;
 }
@@ -145,11 +148,11 @@ void SceneScriptCT10::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo
 void SceneScriptCT10::PlayerWalkedIn() {
 	Loop_Actor_Walk_To_XYZ(kActorMcCoy, -93.0f, 0.0f, -38.0f, 0, 0, false, 0);
 	Loop_Actor_Walk_To_XYZ(kActorMcCoy, -49.0f, 0.0f, -38.0f, 0, 0, false, 0);
-	if (!Game_Flag_Query(525)) {
+	if (!Game_Flag_Query(kFlagCT10Entered)) {
 		Actor_Voice_Over(450, kActorVoiceOver);
 		Actor_Voice_Over(460, kActorVoiceOver);
 		Actor_Voice_Over(470, kActorVoiceOver);
-		Game_Flag_Set(525);
+		Game_Flag_Set(kFlagCT10Entered);
 	}
 }
 
diff --git a/engines/bladerunner/script/scene/ct11.cpp b/engines/bladerunner/script/scene/ct11.cpp
index 7581628..e5e772d 100644
--- a/engines/bladerunner/script/scene/ct11.cpp
+++ b/engines/bladerunner/script/scene/ct11.cpp
@@ -24,6 +24,11 @@
 
 namespace BladeRunner {
 
+enum kCT11Loops {
+	kCT11LoopMain = 0,
+	kCT11LoopMainNoCar = 2
+};
+
 void SceneScriptCT11::InitializeScene() {
 	if (Game_Flag_Query(kFlagCT12toCT11)) {
 		Setup_Scene_Information(-378.0f, 9.68f, -55.0f, 440);
@@ -34,8 +39,8 @@ void SceneScriptCT11::InitializeScene() {
 	}
 
 	Scene_Exit_Add_2D_Exit(0, 257, 240, 364, 330, 1);
-	Scene_Exit_Add_2D_Exit(1, 97, 0, 155, 324, 0);
-	Scene_Exit_Add_2D_Exit(2, 0, 0, 20, 479, 3);
+	Scene_Exit_Add_2D_Exit(1,  97,   0, 155, 324, 0);
+	Scene_Exit_Add_2D_Exit(2,   0,   0,  20, 479, 3);
 
 	Ambient_Sounds_Add_Looping_Sound(54, 50, 0, 1);
 	Ambient_Sounds_Add_Sound( 67, 5, 80, 16,  25, -100, 100, -101, -101, 0, 0);
@@ -45,9 +50,9 @@ void SceneScriptCT11::InitializeScene() {
 	Ambient_Sounds_Add_Sound(380, 5, 80, 50, 100, -100, 100, -101, -101, 0, 0);
 
 	if (Global_Variable_Query(kVariableChapter) > 3) {
-		Scene_Loop_Set_Default(2);
+		Scene_Loop_Set_Default(kCT11LoopMainNoCar);
 	} else {
-		Scene_Loop_Set_Default(0);
+		Scene_Loop_Set_Default(kCT11LoopMain);
 	}
 }
 
@@ -56,19 +61,19 @@ void SceneScriptCT11::SceneLoaded() {
 	Unobstacle_Object("BOX NORTHWEST 1", true);
 	Unobstacle_Object("BOX SOUTH 1", true);
 	if (Global_Variable_Query(kVariableChapter) < 4) {
-		if (!Game_Flag_Query(645)) {
-			Item_Add_To_World(115, 951, 33, 640.21f, 30.0f, 470.0f, 512, 12, 12, false, true, false, true);
+		if (!Game_Flag_Query(kFlagCT11DogWrapperTaken)) {
+			Item_Add_To_World(kItemDogWrapper, 951, 33, 640.21f, 30.0f, 470.0f, 512, 12, 12, false, true, false, true);
 			Scene_2D_Region_Add(0, 505, 316, 513, 321);
-			Game_Flag_Set(725);
+			Game_Flag_Set(kFlagCT11DogWrapperAvailable);
 		}
 		if (!Actor_Clue_Query(kActorMcCoy, kClueCar)) {
 			Scene_2D_Region_Add(1, 412, 258, 552, 358);
 		}
 	} else {
-		if (Game_Flag_Query(725)) {
-			Item_Remove_From_World(115);
-			Game_Flag_Reset(725);
-			Game_Flag_Set(645);
+		if (Game_Flag_Query(kFlagCT11DogWrapperAvailable)) {
+			Item_Remove_From_World(kItemDogWrapper);
+			Game_Flag_Reset(kFlagCT11DogWrapperAvailable);
+			Game_Flag_Set(kFlagCT11DogWrapperTaken);
 		}
 		Unobstacle_Object("BRIDGE SUPPORT", true);
 		Unobstacle_Object("BODY", true);
@@ -131,14 +136,14 @@ bool SceneScriptCT11::ClickedOnExit(int exitId) {
 }
 
 bool SceneScriptCT11::ClickedOn2DRegion(int region) {
-	if (region == 0 && Game_Flag_Query(725)) {
+	if (region == 0 && Game_Flag_Query(kFlagCT11DogWrapperAvailable)) {
 		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 686.0f, 0.0f, 658.0f, 12, true, false, 0)) {
 			Actor_Face_Heading(kActorMcCoy, 47, false);
-			Item_Remove_From_World(115);
+			Item_Remove_From_World(kItemDogWrapper);
 			Actor_Clue_Acquire(kActorMcCoy, kClueLichenDogWrapper, false, -1);
 			Item_Pickup_Spin_Effect(951, 510, 319);
-			Game_Flag_Reset(725);
-			Game_Flag_Set(645);
+			Game_Flag_Reset(kFlagCT11DogWrapperAvailable);
+			Game_Flag_Set(kFlagCT11DogWrapperTaken);
 			Actor_Voice_Over(550, kActorVoiceOver);
 			Actor_Voice_Over(560, kActorVoiceOver);
 			Actor_Voice_Over(570, kActorVoiceOver);
diff --git a/engines/bladerunner/script/scene_script.h b/engines/bladerunner/script/scene_script.h
index cb0b3a4..b565351 100644
--- a/engines/bladerunner/script/scene_script.h
+++ b/engines/bladerunner/script/scene_script.h
@@ -149,7 +149,7 @@ DECLARE_SCRIPT(CT09)
 END_SCRIPT
 
 DECLARE_SCRIPT(CT10)
-	void sub_401844();
+	void checkCabinet();
 END_SCRIPT
 
 DECLARE_SCRIPT(CT11)





More information about the Scummvm-git-logs mailing list