[Scummvm-git-logs] scummvm master -> 0e691072bb352d8cfd16bd17874ca5befe3092f0

antoniou79 antoniou at cti.gr
Thu Aug 22 22:52:33 CEST 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:
ea6ae69ac6 BLADERUNNER: Named animations for Klein and Hasan
927e5bf67b BLADERUNNER: Restore a banter quote for Sgt Walls
06a08d9c77 BLADERUNNER: Restore Hasan being at Animoid past Act 2
0e691072bb BLADERUNNER: Restore Animoid banter and purchases


Commit: ea6ae69ac6e2093b7c61cc3d21379be3d13c5af0
    https://github.com/scummvm/scummvm/commit/ea6ae69ac6e2093b7c61cc3d21379be3d13c5af0
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2019-08-22T23:50:20+03:00

Commit Message:
BLADERUNNER: Named animations for Klein and Hasan

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/ai/hasan.cpp
    engines/bladerunner/script/ai/klein.cpp
    engines/bladerunner/script/ai/mccoy.cpp
    engines/bladerunner/script/scene/bb11.cpp
    engines/bladerunner/script/scene/ct02.cpp
    engines/bladerunner/script/scene/ct06.cpp
    engines/bladerunner/script/scene/hc01.cpp
    engines/bladerunner/script/scene/nr01.cpp
    engines/bladerunner/script/scene/rc01.cpp


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 0454666..b1f40a7 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -1822,6 +1822,16 @@ enum GameModelAnimations {
 	// 671 - 681: Howie Lee animations
 	// 682 - 687: Fish Dealer animations
 	// 688 - 697: Dino Klein animations
+	kModelAnimationKleinWalking                    = 688,
+	kModelAnimationKleinStandingIdle               = 689,
+	kModelAnimationKleinTalkScratchBackOfHead      = 690,
+	kModelAnimationKleinWorkingOnInstruments       = 691,
+	kModelAnimationKleinTalkSmallLeftHandMove      = 692,
+	kModelAnimationKleinTalkRightHandTouchFace     = 693,
+	kModelAnimationKleinTalkWideHandMotion         = 694,
+	kModelAnimationKleinTalkSuggestOrAsk           = 695,
+	kModelAnimationKleinTalkDismissive             = 696,
+	kModelAnimationKleinTalkRaisingBothHands       = 697,
 	// 698 - 704: Murray animations
 	// 705 - 715: Hawker's Barkeep animations
 	// 716 - 721: Holloway animations
@@ -1876,6 +1886,18 @@ enum GameModelAnimations {
 	// 908 - 917: Mutant 3 animations
 	// 918 - 919: Taffy Patron (Gordo's hostage) animations
 	// 920 - 930: Hasan animations
+	kModelAnimationHasanTalkWipeFaceLeftHand01    = 920, // UNUSED
+	kModelAnimationHasanIdleSlightMovement        = 921,
+	kModelAnimationHasanTalkSuggest               = 922,
+	kModelAnimationHasanTakingABiteSnakeMove      = 923,
+	kModelAnimationHasanTalkPointingRightHand     = 924, // UNUSED
+	kModelAnimationHasanTalkMovingBothHands       = 925,
+	kModelAnimationHasanTalkLeftRightLeftGesture  = 926,
+	kModelAnimationHasanTalkRaiseHandSnakeMove    = 927,
+	kModelAnimationHasanTalkMovingBothHandsAndNod = 928,
+	kModelAnimationHasanTalkWipeFaceLeftHand02    = 929, // (almost) identical to 920 (same number of frames too)
+	kModelAnimationHasanTalkUpset                 = 930,
+	// 931 - 996: Item animations
 	kModelAnimationBadge                       = 931,
 	kModelAnimationBomb                        = 932,
 	kModelAnimationCandy                       = 933,
diff --git a/engines/bladerunner/script/ai/hasan.cpp b/engines/bladerunner/script/ai/hasan.cpp
index b2386a2..3f48cc1 100644
--- a/engines/bladerunner/script/ai/hasan.cpp
+++ b/engines/bladerunner/script/ai/hasan.cpp
@@ -126,15 +126,15 @@ bool AIScriptHasan::UpdateAnimation(int *animation, int *frame) {
 	switch (_animationState) {
 	case 0:
 		if (_var6 == 1) {
-			*animation = 922;
+			*animation = kModelAnimationHasanTalkSuggest;
 			if (_var3) {
 				_var3--;
 			} else {
 				_animationFrame++;
-				if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(922)) {
+				if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanTalkSuggest)) {
 					_animationFrame = 0;
 					_var6 = 0;
-					*animation = 921;
+					*animation = kModelAnimationHasanIdleSlightMovement;
 					_var1 = Random_Query(6, 14);
 					_var2 = 2 * Random_Query(0, 1) - 1;
 					_var4 = Random_Query(40, 60);
@@ -144,15 +144,15 @@ bool AIScriptHasan::UpdateAnimation(int *animation, int *frame) {
 				}
 			}
 		} else if (_var6 == 2) {
-			*animation = 923;
+			*animation = kModelAnimationHasanTakingABiteSnakeMove;
 			if (_var3) {
 				_var3--;
 			} else {
 				_animationFrame++;
-				if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(923)) {
+				if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanTakingABiteSnakeMove)) {
 					_animationFrame = 0;
 					_var6 = 0;
-					*animation = 921;
+					*animation = kModelAnimationHasanIdleSlightMovement;
 					_var1 = Random_Query(6, 14);
 					_var2 = 2 * Random_Query(0, 1) - 1;
 					_var5 = Random_Query(40, 60);
@@ -165,16 +165,16 @@ bool AIScriptHasan::UpdateAnimation(int *animation, int *frame) {
 				}
 			}
 		} else if (_var6 == 0) {
-			*animation = 921;
+			*animation = kModelAnimationHasanIdleSlightMovement;
 			if (_var3) {
 				_var3--;
 			} else {
 				_animationFrame += _var2;
-				if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(921)) {
+				if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanIdleSlightMovement)) {
 					_animationFrame = 0;
 				}
 				if (_animationFrame < 0) {
-					_animationFrame = Slice_Animation_Query_Number_Of_Frames(921) - 1;
+					_animationFrame = Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanIdleSlightMovement) - 1;
 				}
 				if (!--_var1) {
 					_var2 = 2 * Random_Query(0, 1) - 1;
@@ -195,60 +195,60 @@ bool AIScriptHasan::UpdateAnimation(int *animation, int *frame) {
 		break;
 
 	case 1:
-		*animation = 925;
+		*animation = kModelAnimationHasanTalkMovingBothHands;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(925)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanTalkMovingBothHands)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 2:
-		*animation = 926;
+		*animation = kModelAnimationHasanTalkLeftRightLeftGesture;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(926)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanTalkLeftRightLeftGesture)) {
 			_animationFrame = 0;
 			_animationState = 1;
-			*animation = 925;
+			*animation = kModelAnimationHasanTalkMovingBothHands;
 		}
 		break;
 
 	case 3:
-		*animation = 927;
+		*animation = kModelAnimationHasanTalkRaiseHandSnakeMove;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(927)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanTalkRaiseHandSnakeMove)) {
 			_animationFrame = 0;
 			_animationState = 1;
-			*animation = 925;
+			*animation = kModelAnimationHasanTalkMovingBothHands;
 		}
 		break;
 
 	case 4:
-		*animation = 928;
+		*animation = kModelAnimationHasanTalkMovingBothHandsAndNod;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(928)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanTalkMovingBothHandsAndNod)) {
 			_animationFrame = 0;
 			_animationState = 1;
-			*animation = 925;
+			*animation = kModelAnimationHasanTalkMovingBothHands;
 		}
 		break;
 
 	case 5:
-		*animation = 929;
+		*animation = kModelAnimationHasanTalkWipeFaceLeftHand02;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(929)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanTalkWipeFaceLeftHand02)) {
 			_animationFrame = 0;
 			_animationState = 1;
-			*animation = 925;
+			*animation = kModelAnimationHasanTalkMovingBothHands;
 		}
 		break;
 
 	case 6:
-		*animation = 930;
+		*animation = kModelAnimationHasanTalkUpset;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(930)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationHasanTalkUpset)) {
 			_animationFrame = 0;
 			_animationState = 1;
-			*animation = 925;
+			*animation = kModelAnimationHasanTalkMovingBothHands;
 		}
 		break;
 
diff --git a/engines/bladerunner/script/ai/klein.cpp b/engines/bladerunner/script/ai/klein.cpp
index fbb2cdb..44bd872 100644
--- a/engines/bladerunner/script/ai/klein.cpp
+++ b/engines/bladerunner/script/ai/klein.cpp
@@ -354,17 +354,17 @@ bool AIScriptKlein::UpdateAnimation(int *animation, int *frame) {
 		if (Actor_Query_Goal_Number(kActorKlein) == kGoalKleinMovingInLab01
 		    || Actor_Query_Goal_Number(kActorKlein) == kGoalKleinMovingInLab02
 		) {
-			*animation = 691;
+			*animation = kModelAnimationKleinWorkingOnInstruments;
 			_animationFrame++;
-			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(691)) {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinWorkingOnInstruments)) {
 				_animationFrame = 0;
 			}
 		} else if (!Game_Flag_Query(kFlagKleinAnimation1)
 		           && Actor_Query_Goal_Number(kActorKlein) == kGoalKleinGotoLabSpeaker
 		) {
-			*animation = 689;
+			*animation = kModelAnimationKleinStandingIdle;
 			_animationFrame++;
-			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(689)) {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinStandingIdle)) {
 				_animationFrame = 0;
 				if (Random_Query(1, 10) == 1) {
 					Game_Flag_Set(kFlagKleinAnimation1);
@@ -382,7 +382,7 @@ bool AIScriptKlein::UpdateAnimation(int *animation, int *frame) {
 				++_animationFrame;
 			}
 
-			*animation = 690;
+			*animation = kModelAnimationKleinTalkScratchBackOfHead;
 			if (_animationFrame <= 9) {
 				if (Game_Flag_Query(kFlagKleinAnimation3)) {
 					Game_Flag_Reset(kFlagKleinAnimation3);
@@ -399,69 +399,69 @@ bool AIScriptKlein::UpdateAnimation(int *animation, int *frame) {
 					Game_Flag_Set(kFlagKleinAnimation3);
 				}
 			}
-			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(690)) {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinTalkScratchBackOfHead)) {
 				_animationFrame = 0;
 				Game_Flag_Reset(kFlagKleinAnimation1);
 			}
 		}
 		break;
 	case 1:
-		*animation = 688;
+		*animation = kModelAnimationKleinWalking;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(688)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinWalking)) {
 			_animationFrame = 0;
 		}
 		break;
 	case 2:
-		*animation = 692;
+		*animation = kModelAnimationKleinTalkSmallLeftHandMove;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(692)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinTalkSmallLeftHandMove)) {
 			_animationFrame = 0;
 		}
 		break;
 	case 3:
-		*animation = 693;
+		*animation = kModelAnimationKleinTalkRightHandTouchFace;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(693)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinTalkRightHandTouchFace)) {
 			_animationState = 2;
 			_animationFrame = 0;
-			*animation = 692;
+			*animation = kModelAnimationKleinTalkSmallLeftHandMove;
 		}
 		break;
 	case 4:
-		*animation = 694;
+		*animation = kModelAnimationKleinTalkWideHandMotion;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(694)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinTalkWideHandMotion)) {
 			_animationState = 2;
 			_animationFrame = 0;
-			*animation = 692;
+			*animation = kModelAnimationKleinTalkSmallLeftHandMove;
 		}
 		break;
 	case 5:
-		*animation = 695;
+		*animation = kModelAnimationKleinTalkSuggestOrAsk;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(695)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinTalkSuggestOrAsk)) {
 			_animationState = 2;
 			_animationFrame = 0;
-			*animation = 692;
+			*animation = kModelAnimationKleinTalkSmallLeftHandMove;
 		}
 		break;
 	case 6:
-		*animation = 696;
+		*animation = kModelAnimationKleinTalkDismissive;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(696)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinTalkDismissive)) {
 			_animationState = 2;
 			_animationFrame = 0;
-			*animation = 692;
+			*animation = kModelAnimationKleinTalkSmallLeftHandMove;
 		}
 		break;
 	case 7:
-		*animation = 697;
+		*animation = kModelAnimationKleinTalkRaisingBothHands;
 		_animationFrame++;
-		if (_animationFrame>= Slice_Animation_Query_Number_Of_Frames(697)) {
+		if (_animationFrame>= Slice_Animation_Query_Number_Of_Frames(kModelAnimationKleinTalkRaisingBothHands)) {
 			_animationState = 2;
 			_animationFrame = 0;
-			*animation = 692;
+			*animation = kModelAnimationKleinTalkSmallLeftHandMove;
 		}
 		break;
 	case 8:
@@ -470,7 +470,7 @@ bool AIScriptKlein::UpdateAnimation(int *animation, int *frame) {
 		_animationState = _animationStateNext;
 		break;
 	default:
-		*animation = 399;
+		*animation = 399; // TODO: A bug? This belongs to Zuben
 		break;
 	}
 	*frame = _animationFrame;
@@ -490,7 +490,7 @@ bool AIScriptKlein::ChangeAnimationMode(int mode) {
 		} else if (_animationState == 0) {
 			_animationState = 8;
 			_animationStateNext = 1;
-			_animationNext = 688;
+			_animationNext = kModelAnimationKleinWalking;
 		}
 		break;
 	case kAnimationModeTalk:
@@ -500,7 +500,7 @@ bool AIScriptKlein::ChangeAnimationMode(int mode) {
 		} else {
 			_animationState = 8;
 			_animationStateNext = 2;
-			_animationNext = 692;
+			_animationNext = kModelAnimationKleinTalkSmallLeftHandMove;
 		}
 		break;
 	case 12:
@@ -510,7 +510,7 @@ bool AIScriptKlein::ChangeAnimationMode(int mode) {
 		} else {
 			_animationState = 8;
 			_animationStateNext = 3;
-			_animationNext = 693;
+			_animationNext = kModelAnimationKleinTalkRightHandTouchFace;
 		}
 		break;
 	case 13:
@@ -520,7 +520,7 @@ bool AIScriptKlein::ChangeAnimationMode(int mode) {
 		} else {
 			_animationState = 8;
 			_animationStateNext = 4;
-			_animationNext = 694;
+			_animationNext = kModelAnimationKleinTalkWideHandMotion;
 		}
 		break;
 	case 14:
@@ -530,7 +530,7 @@ bool AIScriptKlein::ChangeAnimationMode(int mode) {
 		} else {
 			_animationState = 8;
 			_animationStateNext = 5;
-			_animationNext = 695;
+			_animationNext = kModelAnimationKleinTalkSuggestOrAsk;
 		}
 		break;
 	case 15:
@@ -540,7 +540,7 @@ bool AIScriptKlein::ChangeAnimationMode(int mode) {
 		} else {
 			_animationState = 8;
 			_animationStateNext = 6;
-			_animationNext = 696;
+			_animationNext = kModelAnimationKleinTalkDismissive;
 		}
 		break;
 	case 16:
@@ -550,7 +550,7 @@ bool AIScriptKlein::ChangeAnimationMode(int mode) {
 		} else {
 			_animationState = 8;
 			_animationStateNext = 7;
-			_animationNext = 697;
+			_animationNext = kModelAnimationKleinTalkRaisingBothHands;
 		}
 		break;
 	}
diff --git a/engines/bladerunner/script/ai/mccoy.cpp b/engines/bladerunner/script/ai/mccoy.cpp
index 5ede8c6..390af53 100644
--- a/engines/bladerunner/script/ai/mccoy.cpp
+++ b/engines/bladerunner/script/ai/mccoy.cpp
@@ -424,7 +424,7 @@ bool AIScriptMcCoy::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case kGoalMcCoyNR10Fall:
 		Player_Set_Combat_Mode(false);
-		Preload(18);
+		Preload(kModelAnimationMcCoyFallsOnHisBack);
 		Set_Enter(kSetNR10, kSceneNR10);
 		Player_Loses_Control();
 		Actor_Force_Stop_Walking(kActorMcCoy);
diff --git a/engines/bladerunner/script/scene/bb11.cpp b/engines/bladerunner/script/scene/bb11.cpp
index 6ad4c65..381b03d 100644
--- a/engines/bladerunner/script/scene/bb11.cpp
+++ b/engines/bladerunner/script/scene/bb11.cpp
@@ -44,17 +44,17 @@ void SceneScriptBB11::InitializeScene() {
 	Ambient_Sounds_Add_Sound(kSfxTHNDER4, 5, 180, 50, 100, 0, 0, -101, -101, 0, 0);
 
 	if (Game_Flag_Query(kFlagBB11SadikFight)) {
-		Preload(19);
+		Preload(kModelAnimationMcCoyIdle);
 		Preload(220);
 		Preload(227);
 		Preload(328);
 		Preload(343);
 		Preload(344);
-		Preload(17);
-		Preload(14);
+		Preload(kModelAnimationMcCoyGotHitRight);
+		Preload(kModelAnimationMcCoyRunning);
 		Preload(324);
 		Preload(323);
-		Preload(18);
+		Preload(kModelAnimationMcCoyFallsOnHisBack);
 		Preload(345);
 	}
 }
diff --git a/engines/bladerunner/script/scene/ct02.cpp b/engines/bladerunner/script/scene/ct02.cpp
index 07907d1..97efa51 100644
--- a/engines/bladerunner/script/scene/ct02.cpp
+++ b/engines/bladerunner/script/scene/ct02.cpp
@@ -96,10 +96,10 @@ void SceneScriptCT02::SceneLoaded() {
 	Unclickable_Object("COFFEJUG IN FOREGRO");
 	Unclickable_Object("BACK-DOOR");
 	if (!Game_Flag_Query(kFlagCT02PotTipped)) {
-		Preload(0);
-		Preload(3);
-		Preload(3);
-		Preload(28);
+		Preload(kModelAnimationMcCoyWithGunIdle);
+		Preload(kModelAnimationMcCoyWithGunWalking);
+		Preload(kModelAnimationMcCoyWithGunWalking); // A bug? Why is this preloaded twice?
+		Preload(kModelAnimationMcCoyDodgeAndDrawGun);
 		Preload(400);
 		Preload(419);
 		Preload(420);
diff --git a/engines/bladerunner/script/scene/ct06.cpp b/engines/bladerunner/script/scene/ct06.cpp
index 1aab6c5..963a53f 100644
--- a/engines/bladerunner/script/scene/ct06.cpp
+++ b/engines/bladerunner/script/scene/ct06.cpp
@@ -68,8 +68,8 @@ void SceneScriptCT06::SceneLoaded() {
 	Unobstacle_Object("CB BOX04", true);
 	Unclickable_Object("DOOR");
 	if (Actor_Query_Goal_Number(kActorZuben) == kGoalZubenCT06HideAtFreeSlotA) {
-		Preload(3);
-		Preload(4);
+		Preload(kModelAnimationMcCoyWithGunWalking);
+		Preload(kModelAnimationMcCoyWithGunRunning);
 		Preload(389);
 		Preload(390);
 		Preload(398);
diff --git a/engines/bladerunner/script/scene/hc01.cpp b/engines/bladerunner/script/scene/hc01.cpp
index 5fa6721..7399346 100644
--- a/engines/bladerunner/script/scene/hc01.cpp
+++ b/engines/bladerunner/script/scene/hc01.cpp
@@ -74,7 +74,7 @@ void SceneScriptHC01::InitializeScene() {
 void SceneScriptHC01::SceneLoaded() {
 	Obstacle_Object("PILLAR", true);
 	if (Game_Flag_Query(kFlagAR01toHC01)) {
-		Preload(19);
+		Preload(kModelAnimationMcCoyIdle);
 		Preload(426);
 		Preload(430);
 		Preload(437);
diff --git a/engines/bladerunner/script/scene/nr01.cpp b/engines/bladerunner/script/scene/nr01.cpp
index 3a0b46d..08d62d7 100644
--- a/engines/bladerunner/script/scene/nr01.cpp
+++ b/engines/bladerunner/script/scene/nr01.cpp
@@ -37,7 +37,7 @@ void SceneScriptNR01::InitializeScene() {
 	} else if (Game_Flag_Query(kFlagNR01DektoraFall)) {
 		Setup_Scene_Information( -416.0f, 31.93f,  -841.0f, 200);
 		Actor_Set_Invisible(kActorMcCoy, true);
-		Preload(167);
+		Preload(kModelAnimationDektoraInFlamesEndFalling);
 	} else if (Game_Flag_Query(kFlagNR03toNR01)) {
 		Setup_Scene_Information( -416.0f, 31.93f,  -841.0f, 200);
 	} else if (Game_Flag_Query(kFlagUG06toNR01)) {
diff --git a/engines/bladerunner/script/scene/rc01.cpp b/engines/bladerunner/script/scene/rc01.cpp
index 4c0f0b7..1c5ba9a 100644
--- a/engines/bladerunner/script/scene/rc01.cpp
+++ b/engines/bladerunner/script/scene/rc01.cpp
@@ -198,9 +198,9 @@ void SceneScriptRC01::SceneLoaded() {
 	}
 
 	if (!Game_Flag_Query(kFlagRC01PoliceDone)) {
-		Preload(13);
-		Preload(14);
-		Preload(19);
+		Preload(kModelAnimationMcCoyWalking);
+		Preload(kModelAnimationMcCoyRunning);
+		Preload(kModelAnimationMcCoyIdle);
 		Preload(582);
 		Preload(589);
 	}


Commit: 927e5bf67bbf213f21e17448bc64223747f9eb58
    https://github.com/scummvm/scummvm/commit/927e5bf67bbf213f21e17448bc64223747f9eb58
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2019-08-22T23:50:20+03:00

Commit Message:
BLADERUNNER: Restore a banter quote for Sgt Walls

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


diff --git a/engines/bladerunner/script/scene/ps15.cpp b/engines/bladerunner/script/scene/ps15.cpp
index 6cdd961..d86f5cb 100644
--- a/engines/bladerunner/script/scene/ps15.cpp
+++ b/engines/bladerunner/script/scene/ps15.cpp
@@ -80,7 +80,18 @@ bool SceneScriptPS15::ClickedOnActor(int actorId) {
 		} else {
 			Actor_Face_Actor(kActorMcCoy, kActorSergeantWalls, true);
 			Actor_Says(kActorMcCoy, 8600, 15);
-			Actor_Says(kActorSergeantWalls, 190, 12);
+			if (_vm->_cutContent) {
+				switch (Random_Query(1, 2)) {
+				case 1:
+					Actor_Says(kActorSergeantWalls, 190, 12);
+					break;
+				case 2:
+					Actor_Says(kActorSergeantWalls, 200, 12);
+					break;
+				}
+			} else {
+				Actor_Says(kActorSergeantWalls, 190, 12);
+			}
 		}
 		return true;
 	}


Commit: 06a08d9c775f305d78cd64c8db194a0c421ee415
    https://github.com/scummvm/scummvm/commit/06a08d9c775f305d78cd64c8db194a0c421ee415
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2019-08-22T23:50:20+03:00

Commit Message:
BLADERUNNER: Restore Hasan being at Animoid past Act 2

This restores the trigger for the last dialogue about the fish scale

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/ai/hasan.cpp
    engines/bladerunner/script/init_script.cpp
    engines/bladerunner/script/scene/rc04.cpp


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index b1f40a7..a425efd 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -578,7 +578,7 @@ enum Flags {
 	kFlagPS05toPS06                           = 136,
 	kFlagCT04HomelessTalk                     = 137,
 	kFlagPS07KleinInsulted                    = 138,
-	// 139 is never used
+	kFlagMcCoyTalkedToBulletBobAboutHasan     = 139, // Re-purposed. Original: 139 is never used
 	// 140 is never used
 	kFlagRC51Available                        = 141,
 	kFlagNotUsed142                           = 142, // is never checked
@@ -2518,6 +2518,15 @@ enum GoalZuben {
 	kGoalZubenGone                = 599
 };
 
+enum GoalHasan {
+	kGoalHasanDefault                         =   0,
+	kGoalHasanIsAway                          = 300, // original final goal for Hasan
+	kGoalHasanIsWalkingAroundIsAtCT02         = 301, // new goal for restored content
+	kGoalHasanIsWalkingAroundStayAwayFromCT02 = 302, // new goal for restored content
+	kGoalHasanIsWalkingAroundStaysAtCT02      = 303, // new goal for restored content
+	kGoalHasanIsWalkingAroundIsAway           = 304  // new goal for restored content
+};
+
 enum GoalOfficerLeary {
 	kGoalOfficerLearyDefault                          =   0,
 	kGoalOfficerLearyRC01WalkToCrowd                  =   1,
diff --git a/engines/bladerunner/script/ai/hasan.cpp b/engines/bladerunner/script/ai/hasan.cpp
index 3f48cc1..696d440 100644
--- a/engines/bladerunner/script/ai/hasan.cpp
+++ b/engines/bladerunner/script/ai/hasan.cpp
@@ -48,15 +48,36 @@ void AIScriptHasan::Initialize() {
 
 	Actor_Put_In_Set(kActorHasan, kSetAR01_AR02);
 	Actor_Set_At_XYZ(kActorHasan, -214.0f, 0.0f, -1379.0f, 371);
-	Actor_Set_Goal_Number(kActorHasan, 0);
+	Actor_Set_Goal_Number(kActorHasan, kGoalHasanDefault);
 }
 
 bool AIScriptHasan::Update() {
-	if (Global_Variable_Query(kVariableChapter) != 3 || Actor_Query_Goal_Number(kActorHasan) >= 300)
+	if (_vm->_cutContent) {
+		if (Global_Variable_Query(kVariableChapter) == 1
+		    && Actor_Query_Goal_Number(kActorHasan) != kGoalHasanIsAway)
+		{
+			// use this goal to put Hasan in a FreeSlot set for Act 1
+			Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsAway);
+			return true;
+		} else if (Global_Variable_Query(kVariableChapter) == 2
+		           && Actor_Query_Goal_Number(kActorHasan) != kGoalHasanDefault
+		) {
+			Actor_Set_Goal_Number(kActorHasan, kGoalHasanDefault);
+			return true;
+		} else if (Global_Variable_Query(kVariableChapter) > 2
+		           && Actor_Query_Goal_Number(kActorHasan) < kGoalHasanIsWalkingAroundIsAtCT02) {
+			Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsWalkingAroundIsAtCT02);
+			return true;
+		}
 		return false;
+	} else {
+		// original behavior results in Hasan going away when chapter 3 begins
+		if (Global_Variable_Query(kVariableChapter) != 3 || Actor_Query_Goal_Number(kActorHasan) >= kGoalHasanIsAway)
+			return false;
 
-	Actor_Set_Goal_Number(kActorHasan, 300);
-	return true;
+		Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsAway);
+		return true;
+	}
 }
 
 void AIScriptHasan::TimerExpired(int timer) {
@@ -64,6 +85,51 @@ void AIScriptHasan::TimerExpired(int timer) {
 }
 
 void AIScriptHasan::CompletedMovementTrack() {
+	if (_vm->_cutContent) {
+		//
+		// *after Act 2* Hasan will be leaving Animoid Row for sometime
+		if (Global_Variable_Query(kVariableChapter) > 2) {
+			int maxHasanLeaveProb = 4;
+			// if Bullet Bob is dead or McCoy reprimanded Bob about Hasan,
+			// then Hasan is less likely to leave at Animoid Row, *after Act 2*
+			if (Game_Flag_Query(kFlagMcCoyTalkedToBulletBobAboutHasan)
+			    || Actor_Query_Goal_Number(kGoalBulletBobDead)
+			    || Actor_Query_Goal_Number(kGoalBulletBobGone)
+			) {
+				maxHasanLeaveProb = 10;
+			}
+
+			if (Actor_Query_Goal_Number(kActorHasan) == kGoalHasanIsWalkingAroundIsAtCT02) {
+				if (Random_Query(1, maxHasanLeaveProb) == 1
+				    && Player_Query_Current_Scene() != kSceneAR01
+					&& Player_Query_Current_Scene() != kSceneAR02
+				) {
+					// Hasan leaves Animoid Row
+					Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsWalkingAroundIsAway);
+					return; // true;
+				} else {
+					// stay (change goal to a temp one to trigger GoalChanged() (so that we can reset the "track")
+					Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsWalkingAroundStaysAtCT02);
+					return; // true;
+				}
+			}
+
+			if (Actor_Query_Goal_Number(kActorHasan) == kGoalHasanIsWalkingAroundIsAway) {
+				if (Random_Query(1, 2) == 1
+				    && Player_Query_Current_Scene() != kSceneAR01
+					&& Player_Query_Current_Scene() != kSceneAR02
+				) {
+					// Hasan returns tp Animoid Row
+					Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsWalkingAroundIsAtCT02);
+					return; // true;
+				} else {
+					// stay away (change goal to a temp one to trigger GoalChanged() (so that we can reset the "track")
+					Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsWalkingAroundStayAwayFromCT02);
+					return; // true;
+				}
+			}
+		}
+	}
 	//return false;
 }
 
@@ -108,9 +174,40 @@ int AIScriptHasan::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueI
 }
 
 bool AIScriptHasan::GoalChanged(int currentGoalNumber, int newGoalNumber) {
-	if (newGoalNumber == 300) {
-		Actor_Put_In_Set(kActorHasan, kSetFreeSlotH);
-		Actor_Set_At_Waypoint(kActorHasan, 40, 0);
+	if (_vm->_cutContent) {
+		switch (newGoalNumber) {
+		case kGoalHasanDefault:
+			Actor_Put_In_Set(kActorHasan, kSetAR01_AR02);
+			Actor_Set_At_XYZ(kActorHasan, -214.0f, 0.0f, -1379.0f, 371);
+			break;
+		case kGoalHasanIsAway:
+			Actor_Put_In_Set(kActorHasan, kSetFreeSlotH);
+			Actor_Set_At_Waypoint(kActorHasan, 40, 0); // kSetFreeSlotH
+			break;
+		case kGoalHasanIsWalkingAroundIsAtCT02:
+			AI_Movement_Track_Flush(kActorHasan);
+			AI_Movement_Track_Append(kActorHasan, 554, Random_Query(60, 180)); // kSetAR01_AR02
+			Actor_Face_Heading(kActorHasan, 371, false);
+			AI_Movement_Track_Repeat(kActorHasan);
+			break;
+		case kGoalHasanIsWalkingAroundIsAway:
+			AI_Movement_Track_Flush(kActorHasan);
+			AI_Movement_Track_Append(kActorHasan, 40, Random_Query(10, 40)); // kSetFreeSlotH
+			AI_Movement_Track_Repeat(kActorHasan);
+			break;
+		case kGoalHasanIsWalkingAroundStayAwayFromCT02:
+			Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsWalkingAroundIsAway);
+			break;
+		case kGoalHasanIsWalkingAroundStaysAtCT02:
+			Actor_Set_Goal_Number(kActorHasan, kGoalHasanIsWalkingAroundIsAtCT02);
+			break;
+		}
+	} else {
+		// original behavior - Hasan leaves on Act 3
+		if (newGoalNumber == kGoalHasanIsAway) {
+			Actor_Put_In_Set(kActorHasan, kSetFreeSlotH);
+			Actor_Set_At_Waypoint(kActorHasan, 40, 0); // kSetFreeSlotH
+		}
 	}
 	return false;
 }
diff --git a/engines/bladerunner/script/init_script.cpp b/engines/bladerunner/script/init_script.cpp
index 6332361..0b8afe1 100644
--- a/engines/bladerunner/script/init_script.cpp
+++ b/engines/bladerunner/script/init_script.cpp
@@ -2242,6 +2242,7 @@ void InitScript::Init_World_Waypoints() {
 	World_Waypoint_Set(551, kSetKP05_KP06, -737.31f, 0.0f, -145.05f);
 	// 552 - UNUSED
 	// 553 - kSetRC03 - Izo AI script
+	// 554 - kSetAR01_AR02 - Hasan AI script (new)
 }
 
 void InitScript::Init_SDB() {
diff --git a/engines/bladerunner/script/scene/rc04.cpp b/engines/bladerunner/script/scene/rc04.cpp
index 774eca6..8efdaf4 100644
--- a/engines/bladerunner/script/scene/rc04.cpp
+++ b/engines/bladerunner/script/scene/rc04.cpp
@@ -209,6 +209,7 @@ void SceneScriptRC04::dialogueWithBulletBob() {
 		Actor_Says(kActorMcCoy, 5040, 16);
 		Actor_Says(kActorBulletBob, 550, 11);
 		Actor_Modify_Friendliness_To_Other(kActorBulletBob, kActorMcCoy, -6);
+		Game_Flag_Set(kFlagMcCoyTalkedToBulletBobAboutHasan);
 		break;
 
 	case 610: // GOGGLES


Commit: 0e691072bb352d8cfd16bd17874ca5befe3092f0
    https://github.com/scummvm/scummvm/commit/0e691072bb352d8cfd16bd17874ca5befe3092f0
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2019-08-22T23:50:20+03:00

Commit Message:
BLADERUNNER: Restore Animoid banter and purchases

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/scene/ar01.cpp
    engines/bladerunner/script/scene/ar02.cpp
    engines/bladerunner/script/scene/rc04.cpp
    engines/bladerunner/script/scene_script.h


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index a425efd..36c6ab6 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -685,7 +685,7 @@ enum Flags {
 	// 243 is never used
 	// 244 is never used
 	// 245 is never used
-	// 246 is never used
+	kFlagWrongInvestigation                   = 246, // Re-purposed. Original: 246 is never used
 	kFlagArrivedFromSpinner1                  = 247,
 	kFlagSpinnerAtCT01                        = 248,
 	kFlagSpinnerAtRC01                        = 249,
@@ -1186,7 +1186,9 @@ enum Variables {
 	kVariablePoliceMazePS13TargetCounter   = 13,
 	kVariableMcCoyEvidenceMissed           = 14,
 	// variable 15 has no use
-	// variables 16 - 18 are not used
+	kVariableFishDealerBanterTalk          = 16, // Re-purposed. Original: not used
+	kVariableInsectDealerBanterTalk        = 17, // Re-purposed. Original: not used
+	kVariableHasanBanterTalk               = 18, // Re-purposed. Original: not used
 	kVariableIzoShot                       = 19, // has no use
 	// variables 20 - 23 are not used
 	kVariableBobShot                       = 24, // has no use
diff --git a/engines/bladerunner/script/scene/ar01.cpp b/engines/bladerunner/script/scene/ar01.cpp
index 227ed73..edc18bb 100644
--- a/engines/bladerunner/script/scene/ar01.cpp
+++ b/engines/bladerunner/script/scene/ar01.cpp
@@ -182,9 +182,10 @@ bool SceneScriptAR01::ClickedOnActor(int actorId) {
 				Game_Flag_Set(kFlagAR01FishDealerTalk);
 				Actor_Set_Goal_Number(kActorFishDealer, 1);
 			} else {
-				if ( Actor_Clue_Query(kActorMcCoy, kClueStrangeScale1)
-				 && !Actor_Clue_Query(kActorMcCoy, kClueFishLadyInterview)
-				 ) {
+				if (Actor_Clue_Query(kActorMcCoy, kClueStrangeScale1)
+				    && !Actor_Clue_Query(kActorMcCoy, kClueFishLadyInterview)
+				    && (!_vm->_cutContent || !Game_Flag_Query(kFlagWrongInvestigation))
+				) {
 					Actor_Says(kActorMcCoy, 40, 11);
 					Actor_Says(kActorFishDealer, 120, 14);
 					Actor_Says(kActorMcCoy, 45, 17);
@@ -198,14 +199,50 @@ bool SceneScriptAR01::ClickedOnActor(int actorId) {
 					Actor_Clue_Acquire(kActorMcCoy, kClueFishLadyInterview, true, kActorFishDealer);
 #endif // BLADERUNNER_ORIGINAL_BUGS
 				} else {
-					if (Random_Query(1, 2) == 1) {
-						Actor_Says(kActorMcCoy, 30, 17);
-						Actor_Says(kActorFishDealer, 100, 14);
-						Actor_Says(kActorFishDealer, 110, 14);
-						Actor_Says(kActorMcCoy, 35, 13);
+					if (_vm->_cutContent) {
+						switch (Global_Variable_Query(kVariableFishDealerBanterTalk)) {
+						case 0:
+							Global_Variable_Increment(kVariableFishDealerBanterTalk, 1);
+							Actor_Says(kActorFishDealer, 230, 14);
+							Item_Pickup_Spin_Effect(kModelAnimationGoldfish, 88, 400); // TODO check co-ordinates
+							dialogueWithFishDealerBuyGoldfish();
+							break;
+						case 1:
+							Global_Variable_Increment(kVariableFishDealerBanterTalk, 1);
+							if (Player_Query_Agenda() == kPlayerAgendaSurly
+							    || Actor_Query_Friendliness_To_Other(kActorFishDealer, kActorMcCoy) <= 45 ) {
+								Actor_Says(kActorMcCoy, 8600, 17); // You keeping busy, pal?
+								Actor_Says(kActorFishDealer, 180, 14); // I can't stand all day gabbing away. My fish require attention.
+								Actor_Says(kActorMcCoy, 8450, 14); // Does this badge mean anything to you?
+								Actor_Says(kActorFishDealer, 190, 14); // Ah! You think you get better info somewhere else? You welcome to try.
+							} else {
+								Actor_Says(kActorMcCoy, 8514, 11); // Got anything new to tell me?
+								Actor_Says(kActorFishDealer, 170, 14); // Afraid not. But been busy today. Maybe you ask me later.
+							}
+							break;
+
+						default:
+							if (Random_Query(1, 2) == 1) {
+								Actor_Says(kActorMcCoy, 30, 17);
+								Actor_Says(kActorFishDealer, 100, 14);
+								Actor_Says(kActorFishDealer, 110, 14);
+								Actor_Says(kActorMcCoy, 35, 13);
+							} else {
+								Actor_Says(kActorMcCoy, 30, 17);
+								Actor_Says(kActorFishDealer, 220, 14);
+							}
+						}
 					} else {
-						Actor_Says(kActorMcCoy, 30, 17);
-						Actor_Says(kActorFishDealer, 220, 14);
+						// original behavior
+						if (Random_Query(1, 2) == 1) {
+							Actor_Says(kActorMcCoy, 30, 17);
+							Actor_Says(kActorFishDealer, 100, 14);
+							Actor_Says(kActorFishDealer, 110, 14);
+							Actor_Says(kActorMcCoy, 35, 13);
+						} else {
+							Actor_Says(kActorMcCoy, 30, 17);
+							Actor_Says(kActorFishDealer, 220, 14);
+						}
 					}
 				}
 				Actor_Set_Goal_Number(kActorFishDealer, 1);
@@ -437,4 +474,37 @@ void SceneScriptAR01::PlayerWalkedOut() {
 void SceneScriptAR01::DialogueQueueFlushed(int a1) {
 }
 
+/**
+* This is only for cut content (purchasing the Goldfish)
+*/
+void SceneScriptAR01::dialogueWithFishDealerBuyGoldfish() {
+	Dialogue_Menu_Clear_List();
+
+	Dialogue_Menu_Clear_Never_Repeat_Was_Selected_Flag(530);
+	Dialogue_Menu_Clear_Never_Repeat_Was_Selected_Flag(540);
+
+	if (Global_Variable_Query(kVariableChinyen) >= 75
+	    || Query_Difficulty_Level() == kGameDifficultyEasy
+	) {
+		DM_Add_To_List_Never_Repeat_Once_Selected(530, 7, 5, 3); // BUY
+	}
+	DM_Add_To_List_Never_Repeat_Once_Selected(540, 3, 5, 7); // NO THANKS
+
+	Dialogue_Menu_Appear(320, 240);
+	int answerValue = Dialogue_Menu_Query_Input();
+	Dialogue_Menu_Disappear();
+
+	if (answerValue == 530) { // BUY
+		Actor_Says(kActorMcCoy, 7000, 12);
+		if (Query_Difficulty_Level() != kGameDifficultyEasy) {
+			Global_Variable_Decrement(kVariableChinyen, 75);
+		}
+		Actor_Clue_Acquire(kActorMcCoy, kClueGoldfish, true, kActorFishDealer);
+		Actor_Modify_Friendliness_To_Other(kActorFishDealer, kActorMcCoy, 5);
+	} else if (answerValue == 540) { // NO THANKS
+		Actor_Says(kActorMcCoy, 7005, 13);
+		Actor_Modify_Friendliness_To_Other(kActorFishDealer, kActorMcCoy, -5);
+	}
+}
+
 } // End of namespace BladeRunner
diff --git a/engines/bladerunner/script/scene/ar02.cpp b/engines/bladerunner/script/scene/ar02.cpp
index a013c16..81846a3 100644
--- a/engines/bladerunner/script/scene/ar02.cpp
+++ b/engines/bladerunner/script/scene/ar02.cpp
@@ -63,12 +63,12 @@ void SceneScriptAR02::InitializeScene() {
 	Ambient_Sounds_Add_Sound(kSfxTHNDER3, 10, 180, 50, 100,    0,   0, -101, -101, 0, 0);
 	Ambient_Sounds_Add_Sound(kSfxTHNDER4, 10, 180, 50, 100,    0,   0, -101, -101, 0, 0);
 	if (Game_Flag_Query(kFlagSpinnerAtAR01)
-	 && Game_Flag_Query(kFlagAR01toAR02)) {
+	    && Game_Flag_Query(kFlagAR01toAR02)) {
 		Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 1, false);
 		Scene_Loop_Set_Default(2);
 		Game_Flag_Reset(kFlagAR01toAR02);
 	} else if (!Game_Flag_Query(kFlagSpinnerAtAR01)
-	        &&  Game_Flag_Query(kFlagAR01toAR02)) {
+	           &&  Game_Flag_Query(kFlagAR01toAR02)) {
 		Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 0, false);
 		Scene_Loop_Set_Default(2);
 		Game_Flag_Reset(kFlagAR01toAR02);
@@ -123,8 +123,8 @@ bool SceneScriptAR02::ClickedOnActor(int actorId) {
 			Actor_Face_Actor(kActorMcCoy, kActorInsectDealer, true);
 			Actor_Face_Actor(kActorInsectDealer, kActorMcCoy, true);
 			if (Global_Variable_Query(kVariableChapter) == 2) {
-				if ( Game_Flag_Query(kFlagAR02InsectDealerInterviewed)
-				 && !Game_Flag_Query(kFlagAR02InsectDealerTalk)
+				if (Game_Flag_Query(kFlagAR02InsectDealerInterviewed)
+				    && !Game_Flag_Query(kFlagAR02InsectDealerTalk)
 				) {
 					Game_Flag_Set(kFlagAR02InsectDealerTalk);
 					Player_Loses_Control();
@@ -132,6 +132,9 @@ bool SceneScriptAR02::ClickedOnActor(int actorId) {
 					ADQ_Add(kActorInsectDealer, 210, 14);
 					Loop_Actor_Walk_To_XYZ(kActorMcCoy, -350.66f, 0.0f, -1117.19f, 0, false, false, false);
 					Actor_Face_Actor(kActorMcCoy, kActorInsectDealer, true);
+					if (_vm->_cutContent) {
+						Actor_Says(kActorInsectDealer, 220, 14); // Doesn't she deserve a gift?
+					}
 					Actor_Says(kActorMcCoy, 110, 18);
 					Actor_Says(kActorInsectDealer, 230, 14);
 					Actor_Says(kActorMcCoy, 115, 18);
@@ -139,7 +142,7 @@ bool SceneScriptAR02::ClickedOnActor(int actorId) {
 					Item_Pickup_Spin_Effect(kModelAnimationMaggieBracelet, 288, 257);
 					Actor_Says(kActorInsectDealer, 250, 14);
 					Player_Gains_Control();
-					dialogueWithInsectDealer2();
+					dialogueWithInsectDealerBuyBracelet();
 				} else if (Game_Flag_Query(kFlagAR02InsectDealerInterviewed)) {
 					Actor_Says(kActorMcCoy, 75, 18);
 					Actor_Says(kActorInsectDealer, 60, 12);
@@ -148,15 +151,15 @@ bool SceneScriptAR02::ClickedOnActor(int actorId) {
 					dialogueWithInsectDealer1();
 				}
 			} else if (Global_Variable_Query(kVariableChapter) > 2) {
-				if ( Actor_Clue_Query(kActorMcCoy, kCluePeruvianLadyInterview)
-				 && !Actor_Clue_Query(kActorMcCoy, kClueDragonflyCollection)
+				if (Actor_Clue_Query(kActorMcCoy, kCluePeruvianLadyInterview)
+				    && !Actor_Clue_Query(kActorMcCoy, kClueDragonflyCollection)
 				) {
 					Actor_Says(kActorMcCoy, 205, 16);
 					Actor_Says(kActorInsectDealer, 290, 12);
 					Actor_Says(kActorInsectDealer, 300, 13);
 					Actor_Says(kActorMcCoy, 210, 15);
 					Actor_Says(kActorInsectDealer, 310, 12);
-					Actor_Says(kActorMcCoy, 215, 13);
+					Actor_Says(kActorMcCoy, 215, 13); // Thanks for your help
 					if (Game_Flag_Query(kFlagAR02DektoraBoughtScorpions)) {
 						Actor_Says(kActorMcCoy, 220, 14);
 						Actor_Says(kActorInsectDealer, 320, 12);
@@ -170,10 +173,59 @@ bool SceneScriptAR02::ClickedOnActor(int actorId) {
 					}
 					Actor_Clue_Acquire(kActorMcCoy, kClueDragonflyCollection, false, kActorInsectDealer);
 				} else {
-					Actor_Says(kActorMcCoy, 240, 17);
-					Actor_Says(kActorInsectDealer, 360, 13);
-					Actor_Says(kActorInsectDealer, 370, 14);
-					Actor_Says(kActorMcCoy, 245, 13);
+					// still from Act 3 and beyond
+					if (_vm->_cutContent) {
+						switch (Global_Variable_Query(kVariableInsectDealerBanterTalk)) {
+						case 0:
+							// how's business
+							Global_Variable_Increment(kVariableInsectDealerBanterTalk, 1);
+							Actor_Says(kActorMcCoy, 240, 17); // How's business?
+							Actor_Says(kActorInsectDealer, 360, 13);
+							Actor_Says(kActorInsectDealer, 370, 14);
+							Actor_Says(kActorMcCoy, 245, 13);
+							break;
+						case 1:
+							Global_Variable_Increment(kVariableInsectDealerBanterTalk, 1);
+							Actor_Says(kActorMcCoy, 8920, 13); // I gotta ask you a question.
+							Actor_Says(kActorInsectDealer, 410, 13); //	Ah, perhaps you should ask someone else.
+							if (Player_Query_Agenda() == kPlayerAgendaSurly) {
+								Actor_Says(kActorMcCoy, 8450, 14); // Does this badge mean anything to you?
+								Actor_Says(kActorInsectDealer, 440, 14); // Please, this is all I know.
+								Actor_Modify_Friendliness_To_Other(kActorInsectDealer, kActorMcCoy, -5);
+							}
+							break;
+						case 2:
+							// offer to buy slug
+							Global_Variable_Increment(kVariableInsectDealerBanterTalk, 1);
+							Actor_Says(kActorMcCoy, 8520, 13); // What do you know?
+							Actor_Says(kActorInsectDealer, 450, 13);
+							if (Actor_Query_Friendliness_To_Other(kActorInsectDealer, kActorMcCoy) > 40) {
+								Actor_Says(kActorInsectDealer, 460, 14);
+								Actor_Says(kActorInsectDealer, 470, 13); // This slug, perhaps.
+								Item_Pickup_Spin_Effect(kModelAnimationSlug, 288, 257);
+								dialogueWithInsectDealerBuySlug();
+							}
+							break;
+						case 3:
+							Global_Variable_Increment(kVariableInsectDealerBanterTalk, 1);
+							if (Actor_Query_Friendliness_To_Other(kActorInsectDealer, kActorMcCoy) > 45) {
+								Actor_Says(kActorMcCoy, 8610, 17); // What's the word, friend?
+							} else {
+								Actor_Says(kActorMcCoy, 8615, 17); // Heard anything on the street?
+							}
+							Actor_Says(kActorInsectDealer, 400, 13); // I hear very little.
+							break;
+						default:
+							Actor_Says(kActorMcCoy, 215, 13);
+							break;
+						}
+					} else {
+						// original behavior
+						Actor_Says(kActorMcCoy, 240, 17); // How's business?
+						Actor_Says(kActorInsectDealer, 360, 13);
+						Actor_Says(kActorInsectDealer, 370, 14);
+						Actor_Says(kActorMcCoy, 245, 13);
+					}
 				}
 			}
 			return true;
@@ -181,7 +233,7 @@ bool SceneScriptAR02::ClickedOnActor(int actorId) {
 	}
 
 	if (actorId == kActorHasan
-	 && Global_Variable_Query(kVariableChapter) == 2
+	    && Global_Variable_Query(kVariableChapter) == 2
 	) {
 		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -240.79f, 0.0f, -1328.89f, 12, true, false, false)) {
 			Actor_Face_Actor(kActorMcCoy, kActorHasan, true);
@@ -195,6 +247,58 @@ bool SceneScriptAR02::ClickedOnActor(int actorId) {
 			dialogueWithHassan();
 		}
 	}
+
+	if (_vm->_cutContent) {
+		if (actorId == kActorHasan
+		    && Global_Variable_Query(kVariableChapter) > 2) {
+
+			if (Actor_Clue_Query(kActorMcCoy, kClueStrangeScale1)
+			    && !Game_Flag_Query(kFlagWrongInvestigation)
+			) {
+				dialogueWithHassan();
+			} else {
+				switch (Global_Variable_Query(kVariableHasanBanterTalk)) {
+				case 0:
+					Global_Variable_Increment(kVariableHasanBanterTalk, 1);
+					Actor_Says(kActorMcCoy, 155, 13); // How's business?
+					Actor_Says(kActorHasan, 10, 13);
+					Actor_Says(kActorHasan, 20, 14);
+					break;
+				case 1:
+					Global_Variable_Increment(kVariableHasanBanterTalk, 1);
+					Actor_Says(kActorMcCoy, 6980, 13); // What's the word
+					Actor_Says(kActorHasan, 290, 13);
+					if (Actor_Query_Friendliness_To_Other(kActorHasan, kActorMcCoy) > 49) {
+						Actor_Says(kActorHasan, 300, 14);
+						Actor_Says(kActorHasan, 310, 13);
+						Item_Pickup_Spin_Effect(kModelAnimationGarterSnake, 328, 237); // TODO check co-ordinates
+						dialogueWithHassanBuySnake();
+					}
+					break;
+				case 2:
+					// offer to buy snake
+					Global_Variable_Increment(kVariableHasanBanterTalk, 1);
+					if (Player_Query_Agenda() == kPlayerAgendaSurly
+					   || Actor_Query_Friendliness_To_Other(kActorHasan, kActorMcCoy) <= 49 ) {
+						Actor_Says(kActorMcCoy, 8915, 14); // You got a minute, pal?
+						Actor_Says(kActorHasan, 260, 14); // My time is quite valuable, noble one
+						Actor_Modify_Friendliness_To_Other(kActorHasan, kActorMcCoy, -5);
+					} else {
+						Actor_Says(kActorMcCoy, 8615, 13); // Heard anything on the street?
+						Actor_Says(kActorHasan, 250, 13); // I'm afraid not, noble one. But you shall surely be the first to know, if I do hear something.
+					}
+					break;
+				default:
+					if (Actor_Query_Friendliness_To_Other(kActorHasan, kActorMcCoy) <= 45 ) {
+						Actor_Says(kActorMcCoy, 8940, 13);
+					} else {
+						Actor_Says(kActorMcCoy, 1315, 13);
+					}
+					break;
+				}
+			}
+		}
+	}
 	return false;
 }
 
@@ -280,13 +384,13 @@ void SceneScriptAR02::DialogueQueueFlushed(int a1) {
 void SceneScriptAR02::dialogueWithInsectDealer1() {
 	Dialogue_Menu_Clear_List();
 	if (Actor_Clue_Query(kActorMcCoy, kClueDragonflyEarring)
-	 || Actor_Clue_Query(kActorMcCoy, kClueBombingSuspect)
+	    || Actor_Clue_Query(kActorMcCoy, kClueBombingSuspect)
 	) {
 		DM_Add_To_List_Never_Repeat_Once_Selected(490, 3, 5, 5); // EARRING
 	}
-	if ( Actor_Clue_Query(kActorMcCoy, kClueDragonflyAnklet)
-	 && !Actor_Clue_Query(kActorMcCoy, kClueDragonflyEarring)
-	 && !Actor_Clue_Query(kActorMcCoy, kClueBombingSuspect)
+	if (Actor_Clue_Query(kActorMcCoy, kClueDragonflyAnklet)
+	    && !Actor_Clue_Query(kActorMcCoy, kClueDragonflyEarring)
+	    && !Actor_Clue_Query(kActorMcCoy, kClueBombingSuspect)
 	) {
 		DM_Add_To_List_Never_Repeat_Once_Selected(500, 3, 5, 5); // ANKLET
 	}
@@ -333,16 +437,16 @@ void SceneScriptAR02::dialogueWithInsectDealer1() {
 		break;
 
 	case 520: // DONE
-		Actor_Says(kActorMcCoy, 215, 16);
+		Actor_Says(kActorMcCoy, 215, 16); // Thanks for your help.
 		break;
 	}
 }
 
-void SceneScriptAR02::dialogueWithInsectDealer2() {
+void SceneScriptAR02::dialogueWithInsectDealerBuyBracelet() {
 	Dialogue_Menu_Clear_List();
 
 	if (Global_Variable_Query(kVariableChinyen) >= 15
-	 || Query_Difficulty_Level() == kGameDifficultyEasy
+	    || Query_Difficulty_Level() == kGameDifficultyEasy
 	) {
 		DM_Add_To_List_Never_Repeat_Once_Selected(530, 7, 5, 3); // BUY
 	}
@@ -370,6 +474,39 @@ void SceneScriptAR02::dialogueWithInsectDealer2() {
 	}
 }
 
+/**
+* This is only for cut content (purchasing the Electric Slug)
+*/
+void SceneScriptAR02::dialogueWithInsectDealerBuySlug() {
+	Dialogue_Menu_Clear_List();
+
+	Dialogue_Menu_Clear_Never_Repeat_Was_Selected_Flag(530);
+	Dialogue_Menu_Clear_Never_Repeat_Was_Selected_Flag(540);
+
+	if (Global_Variable_Query(kVariableChinyen) >= 85
+	    || Query_Difficulty_Level() == kGameDifficultyEasy
+	) {
+		DM_Add_To_List_Never_Repeat_Once_Selected(530, 7, 5, 3); // BUY
+	}
+	DM_Add_To_List_Never_Repeat_Once_Selected(540, 3, 5, 7); // NO THANKS
+
+	Dialogue_Menu_Appear(320, 240);
+	int answerValue = Dialogue_Menu_Query_Input();
+	Dialogue_Menu_Disappear();
+
+	if (answerValue == 530) { // BUY
+		Actor_Says(kActorMcCoy, 7000, 12);
+		if (Query_Difficulty_Level() != kGameDifficultyEasy) {
+			Global_Variable_Decrement(kVariableChinyen, 85);
+		}
+		Actor_Clue_Acquire(kActorMcCoy, kClueSlug, true, kActorInsectDealer);
+		Actor_Modify_Friendliness_To_Other(kActorInsectDealer, kActorMcCoy, 5);
+	} else if (answerValue == 540) { // NO THANKS
+		Actor_Says(kActorMcCoy, 7005, 13);
+		Actor_Modify_Friendliness_To_Other(kActorInsectDealer, kActorMcCoy, -5);
+	}
+}
+
 void SceneScriptAR02::dialogueWithHassan() {
 	Dialogue_Menu_Clear_List();
 	if (Actor_Clue_Query(kActorMcCoy, kClueStrangeScale1)) {
@@ -386,7 +523,7 @@ void SceneScriptAR02::dialogueWithHassan() {
 
 	switch (answerValue) {
 	case 550: // SCALE
-		Actor_Says(kActorMcCoy, 145, 11);
+		Actor_Says(kActorMcCoy, 145, 11); // This your work?
 		Actor_Says(kActorHasan, 30, 11);
 		Actor_Says(kActorMcCoy, 160, 11);
 		Actor_Says(kActorHasan, 40, 11);
@@ -395,6 +532,9 @@ void SceneScriptAR02::dialogueWithHassan() {
 		Actor_Says(kActorMcCoy, 170, 11);
 		Actor_Says(kActorHasan, 60, 11);
 		Actor_Says(kActorMcCoy, 175, 11);
+		if (_vm->_cutContent) {
+			Game_Flag_Set(kFlagWrongInvestigation);
+		}
 		Game_Flag_Set(kFlagNotUsed370);
 		break;
 
@@ -411,9 +551,9 @@ void SceneScriptAR02::dialogueWithHassan() {
 		Actor_Says(kActorHasan, 190, 11);
 		Actor_Says(kActorHasan, 200, 11);
 		Actor_Says(kActorMcCoy, 200, 11);
-		Actor_Says(kActorHasan, 210, 11);
-		Actor_Says(kActorHasan, 220, 11);
-		Actor_Says(kActorHasan, 230, 11);
+		Actor_Says(kActorHasan, 210, 11); // Perhaps you should ask the Peruvian woman next door.
+		Actor_Says(kActorHasan, 220, 11); // She's an expert on such things
+		Actor_Says(kActorHasan, 230, 11); // and will cut a wonderful deal to friends.
 		Game_Flag_Set(kFlagNotUsed370);
 		break;
 
@@ -429,10 +569,43 @@ void SceneScriptAR02::dialogueWithHassan() {
 			Actor_Modify_Friendliness_To_Other(kActorHasan, kActorMcCoy, -1);
 			Actor_Clue_Acquire(kActorMcCoy, kClueHasanInterview, false, kActorHasan);
 		} else {
-			Actor_Says(kActorMcCoy, 1315, 11);
+			Actor_Says(kActorMcCoy, 1315, 11); // Thanks for your time
 		}
 		break;
 	}
 }
 
+/**
+* This is only for cut content (purchasing the Garter Snake)
+*/
+void SceneScriptAR02::dialogueWithHassanBuySnake() {
+	Dialogue_Menu_Clear_List();
+
+	Dialogue_Menu_Clear_Never_Repeat_Was_Selected_Flag(530);
+	Dialogue_Menu_Clear_Never_Repeat_Was_Selected_Flag(540);
+
+	if (Global_Variable_Query(kVariableChinyen) >= 105
+	    || Query_Difficulty_Level() == kGameDifficultyEasy
+	) {
+		DM_Add_To_List_Never_Repeat_Once_Selected(530, 7, 5, 3); // BUY
+	}
+	DM_Add_To_List_Never_Repeat_Once_Selected(540, 3, 5, 7); // NO THANKS
+
+	Dialogue_Menu_Appear(320, 240);
+	int answerValue = Dialogue_Menu_Query_Input();
+	Dialogue_Menu_Disappear();
+
+	if (answerValue == 530) { // BUY
+		Actor_Says(kActorMcCoy, 7000, 12);
+		if (Query_Difficulty_Level() != kGameDifficultyEasy) {
+			Global_Variable_Decrement(kVariableChinyen, 105);
+		}
+		Actor_Clue_Acquire(kActorMcCoy, kClueGarterSnake, true, kActorHasan);
+		Actor_Modify_Friendliness_To_Other(kActorHasan, kActorMcCoy, 5);
+	} else if (answerValue == 540) { // NO THANKS
+		Actor_Says(kActorMcCoy, 7005, 13);
+		Actor_Modify_Friendliness_To_Other(kActorHasan, kActorMcCoy, -5);
+	}
+}
+
 } // End of namespace BladeRunner
diff --git a/engines/bladerunner/script/scene/rc04.cpp b/engines/bladerunner/script/scene/rc04.cpp
index 8efdaf4..4b4e31b 100644
--- a/engines/bladerunner/script/scene/rc04.cpp
+++ b/engines/bladerunner/script/scene/rc04.cpp
@@ -209,6 +209,9 @@ void SceneScriptRC04::dialogueWithBulletBob() {
 		Actor_Says(kActorMcCoy, 5040, 16);
 		Actor_Says(kActorBulletBob, 550, 11);
 		Actor_Modify_Friendliness_To_Other(kActorBulletBob, kActorMcCoy, -6);
+		if (_vm->_cutContent) {
+			Actor_Modify_Friendliness_To_Other(kActorHasan, kActorMcCoy, 6);
+		}
 		Game_Flag_Set(kFlagMcCoyTalkedToBulletBobAboutHasan);
 		break;
 
diff --git a/engines/bladerunner/script/scene_script.h b/engines/bladerunner/script/scene_script.h
index f5abd45..8fd586a 100644
--- a/engines/bladerunner/script/scene_script.h
+++ b/engines/bladerunner/script/scene_script.h
@@ -71,12 +71,15 @@ private:
 #define END_SCRIPT };
 
 DECLARE_SCRIPT(AR01)
+	void dialogueWithFishDealerBuyGoldfish();
 END_SCRIPT
 
 DECLARE_SCRIPT(AR02)
 	void dialogueWithInsectDealer1();
-	void dialogueWithInsectDealer2();
+	void dialogueWithInsectDealerBuyBracelet();
+	void dialogueWithInsectDealerBuySlug();
 	void dialogueWithHassan();
+	void dialogueWithHassanBuySnake();
 END_SCRIPT
 
 DECLARE_SCRIPT(BB01)





More information about the Scummvm-git-logs mailing list