[Scummvm-git-logs] scummvm master -> bfcd59571ee0e742cd74ec172301056a17c6c5ba

antoniou79 antoniou at cti.gr
Mon Jul 1 20:07:08 CEST 2019


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

Summary:
bc056feddd DEVTOOLS: BLADERUNNER: Improve kerning for latin glyphs
bfcd59571e BLADERUNNER: Rat AI bug fixes


Commit: bc056feddde50fbefc8147f667f95524ce46b622
    https://github.com/scummvm/scummvm/commit/bc056feddde50fbefc8147f667f95524ce46b622
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-07-01T21:03:03+03:00

Commit Message:
DEVTOOLS: BLADERUNNER: Improve kerning for latin glyphs

Changed paths:
    devtools/create_bladerunner/subtitles/fontCreator/samples/overrideEncodingSUBLTS.txt
    devtools/create_bladerunner/subtitles/sampleInput/overrideEncodingSUBLTS.txt


diff --git a/devtools/create_bladerunner/subtitles/fontCreator/samples/overrideEncodingSUBLTS.txt b/devtools/create_bladerunner/subtitles/fontCreator/samples/overrideEncodingSUBLTS.txt
index a759755..1140933 100644
--- a/devtools/create_bladerunner/subtitles/fontCreator/samples/overrideEncodingSUBLTS.txt
+++ b/devtools/create_bladerunner/subtitles/fontCreator/samples/overrideEncodingSUBLTS.txt
@@ -1,6 +1,6 @@
 targetEncoding=windows-1252
 asciiCharList=!!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ
-explicitKerningList=i:-1,ì:-1,í:-1,î:-1,ï:-1,u:-1
+explicitKerningList=i:-1,ì:-1,í:-1,î:-1,ï:-1,u:-1,T:1,A:1,Y:1
 explicitWidthIncrement=i:0,j:1,l:1
 originalFontName=SUBLTS
 specialOutOfOrderGlyphsUTF8ToAsciiTargetEncoding=ÿ:€
diff --git a/devtools/create_bladerunner/subtitles/sampleInput/overrideEncodingSUBLTS.txt b/devtools/create_bladerunner/subtitles/sampleInput/overrideEncodingSUBLTS.txt
index a759755..1140933 100644
--- a/devtools/create_bladerunner/subtitles/sampleInput/overrideEncodingSUBLTS.txt
+++ b/devtools/create_bladerunner/subtitles/sampleInput/overrideEncodingSUBLTS.txt
@@ -1,6 +1,6 @@
 targetEncoding=windows-1252
 asciiCharList=!!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ
-explicitKerningList=i:-1,ì:-1,í:-1,î:-1,ï:-1,u:-1
+explicitKerningList=i:-1,ì:-1,í:-1,î:-1,ï:-1,u:-1,T:1,A:1,Y:1
 explicitWidthIncrement=i:0,j:1,l:1
 originalFontName=SUBLTS
 specialOutOfOrderGlyphsUTF8ToAsciiTargetEncoding=ÿ:€


Commit: bfcd59571ee0e742cd74ec172301056a17c6c5ba
    https://github.com/scummvm/scummvm/commit/bfcd59571ee0e742cd74ec172301056a17c6c5ba
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-07-01T21:03:03+03:00

Commit Message:
BLADERUNNER: Rat AI bug fixes

Most prominent bugs fixed is behavior in KP02 and not attacking when near McCoy

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/ai/clovis.cpp
    engines/bladerunner/script/ai/free_slot_a.cpp
    engines/bladerunner/script/ai/free_slot_b.cpp
    engines/bladerunner/script/ai_script.h
    engines/bladerunner/script/scene/kp02.cpp
    engines/bladerunner/script/scene/ug07.cpp
    engines/bladerunner/script/scene/ug15.cpp


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 28eb244..2010a75 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -2595,7 +2595,8 @@ enum GoalCrazyLegs {
 	kGoalCrazyLegsIsArrested = 699
 };
 
-enum GoalFreeSlotA { // Rat
+enum GoalFreeSlotA { // Rat A
+	kGoalFreeSlotADefault = 0,
 	kGoalFreeSlotAUG15Wait = 300,
 	kGoalFreeSlotAUG15WalkOut = 301,
 	kGoalFreeSlotAUG15RunToOtherSide = 302,
@@ -2607,9 +2608,22 @@ enum GoalFreeSlotA { // Rat
 	kGoalFreeSlotAUG15Die = 305,
 	kGoalFreeSlotAUG15Fall = 309,
 	kGoalFreeSlotAUG15Prepare = 310,
+	kGoalFreeSlotAAct5Default = 400,
+	kGoalFreeSlotAAct5Prepare = 405,
+	kGoalFreeSlotAAct5KP02Attack = 406,
 	kGoalFreeSlotAGone = 599
 };
 
+enum GoalFreeSlotB { // Rat B
+	kGoalFreeSlotBAct4Default = 300,
+	kGoalFreeSlotBAct4WalkAround = 301,
+	kGoalFreeSlotBAct4AttackMcCoy = 302,
+	kGoalFreeSlotBAct5Default = 400,
+	kGoalFreeSlotBAct5Prepare = 405,
+	kGoalFreeSlotBAct5KP02Attack = 406,
+	kGoalFreeSlotBGone = 599
+};
+
 enum GoalMaggie {
 	kGoalMaggieMA02Default = 0,
 	kGoalMaggieMA02WalkToEntrance = 1,
diff --git a/engines/bladerunner/script/ai/clovis.cpp b/engines/bladerunner/script/ai/clovis.cpp
index f054ce3..3c63244 100644
--- a/engines/bladerunner/script/ai/clovis.cpp
+++ b/engines/bladerunner/script/ai/clovis.cpp
@@ -318,8 +318,11 @@ bool AIScriptClovis::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		return true;
 
 	case kGoalClovisUG18SadikWillShootGuzza:
+		// fall through
 	case kGoalClovisUG18SadikIsShootingGuzza:
+		// fall through
 	case kGoalClovisUG18GuzzaDied:
+		// fall through
 	case kGoalClovisUG18Leave:
 		return true;
 
diff --git a/engines/bladerunner/script/ai/free_slot_a.cpp b/engines/bladerunner/script/ai/free_slot_a.cpp
index 4f823df..78f886e 100644
--- a/engines/bladerunner/script/ai/free_slot_a.cpp
+++ b/engines/bladerunner/script/ai/free_slot_a.cpp
@@ -21,6 +21,7 @@
  */
 
 #include "bladerunner/script/ai_script.h"
+//#include "common/debug.h"
 
 namespace BladeRunner {
 
@@ -42,23 +43,24 @@ void AIScriptFreeSlotA::Initialize() {
 	_var2 = 1;
 	_fallSpeed = 0.0f;
 	_fallHeightCurrent = 0.0f; // not initialized in original
-	_fallHeightTarget = 0.0f; // not initialized in original
+	_fallHeightTarget  = 0.0f; // not initialized in original
 
 	World_Waypoint_Set(525, kSetKP02, -780.0f, -615.49f, 2611.0f);
+	// TODO: A bug? world waypoint 526 is unused
 	World_Waypoint_Set(526, kSetKP02, -780.0f, -615.49f, 2759.0f);
 }
 
 bool AIScriptFreeSlotA::Update() {
 	switch (Global_Variable_Query(kVariableChapter)) {
 	case 4:
+		// Act 4
 		if (Actor_Query_Which_Set_In(kActorMcCoy) == kSetUG15
 		 && Actor_Query_Which_Set_In(kActorFreeSlotA) == kSetUG15
 		) {
 			int goal = Actor_Query_Goal_Number(kActorFreeSlotA);
 			if ((goal == kGoalFreeSlotAUG15RunToOtherSide
-			  || goal == kGoalFreeSlotAUG15RunBack
-			 )
-			 && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
+			     || goal == kGoalFreeSlotAUG15RunBack)
+			    && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
 			) {
 				Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15Attack);
 			} else if (goal == kGoalFreeSlotAUG15Fall) {
@@ -70,21 +72,28 @@ bool AIScriptFreeSlotA::Update() {
 					_fallSpeed -= 0.2f;
 				} else {
 					_fallHeightCurrent = _fallHeightTarget;
-					Actor_Set_Goal_Number(kActorFreeSlotA, 0);
+					Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
 				}
 				Actor_Set_At_XYZ(kActorFreeSlotA, x, _fallHeightCurrent, z, Actor_Query_Facing_1024(kActorFreeSlotA));
 			}
-
 			return true;
 		}
 
 		switch (Actor_Query_Goal_Number(kActorFreeSlotA)) {
 		case kGoalFreeSlotAWalkAround:
+#if BLADERUNNER_ORIGINAL_BUGS
 			if (Actor_Query_Which_Set_In(kActorFreeSlotA) == Player_Query_Current_Set()
 				&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
 			) {
 				Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAttackMcCoy);
 			}
+#else
+			if (Actor_Query_Which_Set_In(kActorFreeSlotA) == Player_Query_Current_Set()
+				&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 54
+			) {
+				Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAttackMcCoy);
+			}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			break;
 
 		case kGoalFreeSlotAAttackMcCoy:
@@ -97,7 +106,7 @@ bool AIScriptFreeSlotA::Update() {
 			if (Actor_Query_Which_Set_In(kActorFreeSlotA) != Player_Query_Current_Set()) {
 				Game_Flag_Reset(kFlagRatWalkingAround);
 				Game_Flag_Reset(kFlagUG15BridgeWillBreak);
-				Actor_Set_Goal_Number(kActorFreeSlotA, 0);
+				Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
 			}
 			break;
 
@@ -112,14 +121,38 @@ bool AIScriptFreeSlotA::Update() {
 		return true;
 
 	case 5:
-		if (Actor_Query_Goal_Number(kActorFreeSlotA) < 400) {
+		// Act 5
+		if (Actor_Query_Goal_Number(kActorFreeSlotA) < kGoalFreeSlotAAct5Default) {
 			AI_Movement_Track_Flush(kActorFreeSlotA);
-			Actor_Set_Goal_Number(kActorFreeSlotA, 400);
-		} else if (Actor_Query_Goal_Number(kActorFreeSlotA) == 405
-		        && Actor_Query_Which_Set_In(kActorMcCoy) == kSceneKP05
-		) {
+			Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
+		} else {
+#if BLADERUNNER_ORIGINAL_BUGS
+			if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5Prepare
+		        && Actor_Query_Which_Set_In(kActorMcCoy) == kSetKP02
+			) {
+				Actor_Set_Targetable(kActorFreeSlotA, true);
+				Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5KP02Attack);
+			}
+#else
+			// copying the behavior of Rat B (kActorFreeSlotB) because it works without the bug
+			// Fixes the bug where the Rat A is killed in KP02 but when McCoy re-enters it is there alive
+			// in idle mode and non-target-able
+			if (Actor_Query_Goal_Number(kActorFreeSlotA) != kGoalFreeSlotAAct5Prepare
+		        || Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02
+			) {
+				if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAGone) {
+					if (Actor_Query_Which_Set_In(kActorFreeSlotA) != Player_Query_Current_Set()) {
+						Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
+						Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
+						return true;
+					}
+				}
+				return false;
+			}
+			Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5KP02Attack);
 			Actor_Set_Targetable(kActorFreeSlotA, true);
-			Actor_Set_Goal_Number(kActorFreeSlotA, 406);
+			return true;
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		}
 		return true;
 
@@ -133,6 +166,7 @@ void AIScriptFreeSlotA::TimerExpired(int timer) {
 }
 
 void AIScriptFreeSlotA::CompletedMovementTrack() {
+//	debug("Rat A completed move with Goal: %d", Actor_Query_Goal_Number(kActorFreeSlotA));
 	switch (Actor_Query_Goal_Number(kActorFreeSlotA)) {
 	case kGoalFreeSlotAUG15WalkOut:
 		Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15RunToOtherSide);
@@ -154,11 +188,11 @@ void AIScriptFreeSlotA::CompletedMovementTrack() {
 		Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAWalkAround);
 		break;
 
-	case 400:
-		Actor_Set_Goal_Number(kActorFreeSlotA, 405);
+	case kGoalFreeSlotAAct5Default:
+		Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Prepare);
 		break;
 
-	case 406:
+	case kGoalFreeSlotAAct5KP02Attack:
 		Non_Player_Actor_Combat_Mode_On(kActorFreeSlotA, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 0, 0, 100, 5, 300, false);
 		break;
 
@@ -194,6 +228,18 @@ void AIScriptFreeSlotA::OtherAgentEnteredThisScene(int otherActorId) {
 }
 
 void AIScriptFreeSlotA::OtherAgentExitedThisScene(int otherActorId) {
+#if !BLADERUNNER_ORIGINAL_BUGS
+	if (otherActorId == kActorMcCoy && Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAGone) {
+		if (Global_Variable_Query(kVariableChapter == 4)) {
+			Game_Flag_Reset(kFlagRatWalkingAround);
+			Game_Flag_Reset(kFlagUG15BridgeWillBreak);
+			Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
+		} else if (Global_Variable_Query(kVariableChapter == 5)) {
+			Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
+			Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
+		}
+	}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 	// return false;
 }
 
@@ -225,6 +271,7 @@ int AIScriptFreeSlotA::GetFriendlinessModifierIfGetsClue(int otherActorId, int c
 }
 
 bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
+//	debug("Rat A goal changed from %d to: %d", currentGoalNumber, newGoalNumber);
 	switch (newGoalNumber) {
 	case kGoalFreeSlotAUG15Wait:
 		AI_Movement_Track_Flush(kActorFreeSlotA);
@@ -233,6 +280,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		break;
 
 	case kGoalFreeSlotAUG15WalkOut:
+		// kSetUG15
 		Actor_Force_Stop_Walking(kActorMcCoy);
 		AI_Movement_Track_Flush(kActorFreeSlotA);
 		World_Waypoint_Set(444, kSetUG15, -48.75f, 44.66f, 87.57f);
@@ -241,6 +289,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		break;
 
 	case kGoalFreeSlotAUG15RunToOtherSide:
+		// kSetUG15
 		AI_Movement_Track_Flush(kActorFreeSlotA);
 		World_Waypoint_Set(444, kSetUG15, -237.0f, 48.07f, 208.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 444, 1);
@@ -249,6 +298,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		break;
 
 	case kGoalFreeSlotAUG15RunBack:
+		// kSetUG15
 		AI_Movement_Track_Flush(kActorFreeSlotA);
 		World_Waypoint_Set(444, kSetUG15, 3.52f, 52.28f, 90.68f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 444, 0);
@@ -279,6 +329,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		break;
 
 	case kGoalFreeSlotAWalkAroundRestart:
+		// kSetFreeSlotG
 		AI_Movement_Track_Flush(kActorFreeSlotA);
 		AI_Movement_Track_Append(kActorFreeSlotA, 39, 1);
 		AI_Movement_Track_Repeat(kActorFreeSlotA);
@@ -310,12 +361,14 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15Wait);
 		break;
 
-	case 400:
+	case kGoalFreeSlotAAct5Default:
+		// kSetFreeSlotG
 		AI_Movement_Track_Append(kActorFreeSlotA, 39, 0);
 		AI_Movement_Track_Repeat(kActorFreeSlotA);
 		break;
 
-	case 406:
+	case kGoalFreeSlotAAct5KP02Attack:
+		// kSetKP02
 		AI_Movement_Track_Flush(kActorFreeSlotA);
 		AI_Movement_Track_Append(kActorFreeSlotA, 525, 0);
 		AI_Movement_Track_Repeat(kActorFreeSlotA);
@@ -529,7 +582,7 @@ bool AIScriptFreeSlotA::ReachedMovementTrackWaypoint(int waypointId) {
 		if (waypointId == 465) {
 			Actor_Change_Animation_Mode(kActorFreeSlotA, 43);
 		}
-	} else if (Actor_Query_Goal_Number(kActorFreeSlotA) == 302) {
+	} else if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAUG15RunToOtherSide) {
 		Actor_Face_Actor(kActorFreeSlotA, kActorMcCoy, true);
 	}
 
@@ -556,15 +609,17 @@ void AIScriptFreeSlotA::checkIfOnBridge() {
 void AIScriptFreeSlotA::goToRandomUGxx() {
 	switch (Random_Query(1, 14)) {
 	case 1:
+		// kSetUG01
 		AI_Movement_Track_Append(kActorFreeSlotA, 450, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 451, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 450, 0);
 		break;
 
 	case 2:
+		// kSetUG01
 		World_Waypoint_Set(463, kSetUG01, 144.98f, -50.13f, -175.75f);
-		World_Waypoint_Set(464, kSetUG01, 105.6f, -50.13f, -578.46f);
-		World_Waypoint_Set(465, kSetUG01, 62.0f, -50.13f, -574.0f);
+		World_Waypoint_Set(464, kSetUG01, 105.6f,  -50.13f, -578.46f);
+		World_Waypoint_Set(465, kSetUG01,  62.0f,  -50.13f, -574.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 5);
@@ -572,85 +627,106 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
 		break;
 
 	case 3:
+		// kSetUG04
 		AI_Movement_Track_Append(kActorFreeSlotA, 446, 15);
-		AI_Movement_Track_Append(kActorFreeSlotA, 447, 1);
-		AI_Movement_Track_Append(kActorFreeSlotA, 449, 1);
-		AI_Movement_Track_Append(kActorFreeSlotA, 448, 2);
-		AI_Movement_Track_Append(kActorFreeSlotA, 449, 0);
+		AI_Movement_Track_Append(kActorFreeSlotA, 447,  1);
+		AI_Movement_Track_Append(kActorFreeSlotA, 449,  1);
+		AI_Movement_Track_Append(kActorFreeSlotA, 448,  2);
+		AI_Movement_Track_Append(kActorFreeSlotA, 449,  0);
 		break;
 
 	case 4:
-		World_Waypoint_Set(463, kSetUG04, -22.7f, 6.39f, 33.12f);
-		World_Waypoint_Set(464, kSetUG04, -6.70f, -1.74f, -362.88f);
-		World_Waypoint_Set(465, kSetUG04, 164.0f, 11.87f, -1013.0f);
+		// kSetUG04
+		World_Waypoint_Set(463, kSetUG04, -22.7f,   6.39f,    33.12f);
+		World_Waypoint_Set(464, kSetUG04,  -6.70f, -1.74f,  -362.88f);
+		World_Waypoint_Set(465, kSetUG04, 164.0f,  11.87f, -1013.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 2);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 0);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 0);
 		break;
 
 	case 5:
+		// kSetUG05
 		AI_Movement_Track_Append(kActorFreeSlotA, 457, 15);
-		AI_Movement_Track_Append(kActorFreeSlotA, 458, 0);
+		AI_Movement_Track_Append(kActorFreeSlotA, 458,  0);
 		AI_Movement_Track_Append(kActorFreeSlotA, 459, 15);
 		break;
 
 	case 6:
+		// kSetUG06
 		AI_Movement_Track_Append(kActorFreeSlotA, 460, 15);
-		AI_Movement_Track_Append(kActorFreeSlotA, 461, 5);
+		AI_Movement_Track_Append(kActorFreeSlotA, 461,  5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 460, 15);
 		break;
 
 	case 7:
+		// kSetUG07 or kSetFreeSlotG
 		if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
-			AI_Movement_Track_Append(kActorFreeSlotA, 39, 10);
+			AI_Movement_Track_Append(kActorFreeSlotA, 39, 10); // kSetFreeSlotG
 		} else {
-			World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
-			World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+			World_Waypoint_Set(463, kSetUG07,  -88.78f, -12.21f, -184.08f);
+			World_Waypoint_Set(464, kSetUG07,  250.0f,  -12.21f, -342.0f);
 			World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
 			AI_Movement_Track_Append(kActorFreeSlotA, 463, 5);
 			AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
+			// TODO: A bug? the waypoint 465 is created but is unused
 		}
 		break;
 
 	case 8:
-		World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+		// kSetUG07
+		// TODO a bug? Maybe also check here if Clovis is in the set
+		// like in case 7
+		World_Waypoint_Set(463, kSetUG07,  -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(464, kSetUG07,  250.0f,  -12.21f, -342.0f);
 		World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
+		// TODO: A bug? the waypoint 465 is created but is unused
 		break;
 
 	case 9:
-		World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+		// kSetUG07
+		// TODO a bug? Maybe also check here if Clovis is in the set
+		// like in case 7
+		World_Waypoint_Set(463, kSetUG07,  -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(464, kSetUG07,  250.0f,  -12.21f, -342.0f);
 		World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 1);
+		// TODO: A bug? the waypoint 463 is created but is unused
 		break;
 
 	case 10:
-		World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+		// kSetUG07
+		// TODO a bug? Maybe also check here if Clovis is in the set
+		// like in case 7
+		World_Waypoint_Set(463, kSetUG07,  -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(464, kSetUG07,  250.0f,  -12.21f, -342.0f);
 		World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
+		// TODO: A bug? the waypoint 463 is created but is unused
 		break;
 
 	case 11:
-		World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+		// kSetUG09
+		World_Waypoint_Set(463, kSetUG09,   91.0f, 156.94f, -498.0f);
 		World_Waypoint_Set(464, kSetUG09, -149.0f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
 		break;
 
 	case 12:
-		World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+		// kSetUG09
+		World_Waypoint_Set(463, kSetUG09,   91.0f, 156.94f, -498.0f);
 		World_Waypoint_Set(464, kSetUG09, -149.0f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		break;
 
 	case 13:
+		// kSetUG09
 #if BLADERUNNER_ORIGINAL_BUGS
 		// this makes the rat appear on the pipe (top left) but this is buggy
 		// since it appears floating there
@@ -661,7 +737,7 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 #else
 		// replacing with something more normal
-		World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(463, kSetUG09,  91.0f,  156.94f, -498.0f);
 		World_Waypoint_Set(464, kSetUG09, -29.60f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
@@ -670,8 +746,9 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
 		break;
 
 	case 14:
-		World_Waypoint_Set(463, kSetUG12, -360.67f, 21.39f, 517.55f);
-		World_Waypoint_Set(464, kSetUG12, -250.67f, 21.39f, 477.55f);
+		// kSetUG12
+		World_Waypoint_Set(463, kSetUG12, -360.67f, 21.39f,   517.55f);
+		World_Waypoint_Set(464, kSetUG12, -250.67f, 21.39f,   477.55f);
 		World_Waypoint_Set(465, kSetUG12, -248.67f, 21.39f, -1454.45f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 8);
@@ -679,6 +756,7 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
 		break;
 
 	default:
+		// kSetFreeSlotG
 		AI_Movement_Track_Append(kActorFreeSlotA, 39, Random_Query(1, 10));
 		break;
 	}
diff --git a/engines/bladerunner/script/ai/free_slot_b.cpp b/engines/bladerunner/script/ai/free_slot_b.cpp
index dd4ce55..fa8d17f 100644
--- a/engines/bladerunner/script/ai/free_slot_b.cpp
+++ b/engines/bladerunner/script/ai/free_slot_b.cpp
@@ -21,6 +21,7 @@
  */
 
 #include "bladerunner/script/ai_script.h"
+//#include "common/debug.h"
 
 namespace BladeRunner {
 
@@ -38,7 +39,8 @@ void AIScriptFreeSlotB::Initialize() {
 	_var1 = 0;
 	_var2 = 1;
 
-	World_Waypoint_Set(527, kSetKP02, -468.46f, -616.58f, 2840.60f);
+	World_Waypoint_Set(527, kSetKP02,  -468.46f, -616.58f, 2840.60f);
+	// TODO: A bug? world waypoints 528, 529 are unused
 	World_Waypoint_Set(528, kSetKP02, -1024.46f, -615.49f, 2928.60f);
 	World_Waypoint_Set(529, kSetKP02, -1024.46f, -615.49f, 2788.60f);
 }
@@ -50,53 +52,65 @@ bool AIScriptFreeSlotB::Update() {
 
 	if (Global_Variable_Query(kVariableChapter) == 4) {
 		switch (Actor_Query_Goal_Number(kActorFreeSlotB)) {
-		case 300:
-			Actor_Set_Goal_Number(kActorFreeSlotB, 301);
+		case kGoalFreeSlotBAct4Default:
+			Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
 			Actor_Set_Targetable(kActorFreeSlotB, true);
 			break;
 
-		case 301:
+		case kGoalFreeSlotBAct4WalkAround:
+#if BLADERUNNER_ORIGINAL_BUGS
 			if (Actor_Query_Which_Set_In(kActorFreeSlotB) == Player_Query_Current_Set()
-					&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 48) {
-				Actor_Set_Goal_Number(kActorFreeSlotB, 302);
+			    && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 48
+			) {
+				Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4AttackMcCoy);
 			}
+#else
+			if (Actor_Query_Which_Set_In(kActorFreeSlotB) == Player_Query_Current_Set()
+			    && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 54
+			) {
+				Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4AttackMcCoy);
+			}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			break;
 
-		case 302:
+		case kGoalFreeSlotBAct4AttackMcCoy:
 			if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
-				Actor_Set_Goal_Number(kActorFreeSlotB, 301);
+				Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
 			}
 			break;
 
-		case 599:
+		case kGoalFreeSlotBGone:
 			if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
-				Actor_Set_Goal_Number(kActorFreeSlotB, 300);
+				Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
 			}
 			break;
 
 		default:
-			Actor_Set_Goal_Number(kActorFreeSlotB, 300);
+			Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
 			break;
 		}
 
 		return false;
 	}
-	if (Actor_Query_Goal_Number(kActorFreeSlotB) < 400) {
+	// if in Act 5
+	if (Actor_Query_Goal_Number(kActorFreeSlotB) < kGoalFreeSlotBAct5Default) {
 		AI_Movement_Track_Flush(kActorFreeSlotB);
-		Actor_Set_Goal_Number(kActorFreeSlotB, 400);
+		Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
 		return true;
 	} else {
-		if (Actor_Query_Goal_Number(kActorFreeSlotB) != 405 || Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02) {
-			if (Actor_Query_Goal_Number(kActorFreeSlotB) == 599) {
+		if (Actor_Query_Goal_Number(kActorFreeSlotB) != kGoalFreeSlotBAct5Prepare
+		    || Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02
+		) {
+			if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBGone) {
 				if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
 					Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
-					Actor_Set_Goal_Number(kActorFreeSlotB, 400);
+					Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
 					return true;
 				}
 			}
 			return false;
 		}
-		Actor_Set_Goal_Number(kActorFreeSlotB, 406);
+		Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5KP02Attack);
 		Actor_Set_Targetable(kActorFreeSlotB, true);
 		return true;
 	}
@@ -107,20 +121,21 @@ void AIScriptFreeSlotB::TimerExpired(int timer) {
 }
 
 void AIScriptFreeSlotB::CompletedMovementTrack() {
+//	debug("Rat B completed move with Goal: %d", Actor_Query_Goal_Number(kActorFreeSlotB));
 	switch (Actor_Query_Goal_Number(kActorFreeSlotB)) {
-	case 300:
-		Actor_Set_Goal_Number(kActorFreeSlotB, 301);
+	case kGoalFreeSlotBAct4Default:
+		Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
 		break;
 
-	case 301:
-		Actor_Set_Goal_Number(kActorFreeSlotB, 300);
+	case kGoalFreeSlotBAct4WalkAround:
+		Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
 		break;
 
-	case 400:
-		Actor_Set_Goal_Number(kActorFreeSlotB, 405);
+	case kGoalFreeSlotBAct5Default:
+		Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Prepare);
 		break;
 
-	case 406:
+	case kGoalFreeSlotBAct5KP02Attack:
 		Non_Player_Actor_Combat_Mode_On(kActorFreeSlotB, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 0, 0, 100, 5, 300, false);
 		break;
 
@@ -136,7 +151,7 @@ void AIScriptFreeSlotB::ReceivedClue(int clueId, int fromActorId) {
 }
 
 void AIScriptFreeSlotB::ClickedByPlayer() {
-	if (Actor_Query_Goal_Number(kActorFreeSlotB) != 599)
+	if (Actor_Query_Goal_Number(kActorFreeSlotB) != kGoalFreeSlotBGone)
 		return; //false;
 
 	Actor_Face_Actor(kActorMcCoy, kActorFreeSlotB, true);
@@ -156,6 +171,17 @@ void AIScriptFreeSlotB::OtherAgentEnteredThisScene(int otherActorId) {
 }
 
 void AIScriptFreeSlotB::OtherAgentExitedThisScene(int otherActorId) {
+#if !BLADERUNNER_ORIGINAL_BUGS
+	if (otherActorId == kActorMcCoy && Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBGone) {
+		if (Global_Variable_Query(kVariableChapter == 4)) {
+			Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
+		} else if (Global_Variable_Query(kVariableChapter == 5)) {
+			Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
+			Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
+		}
+	}
+
+#endif // BLADERUNNER_ORIGINAL_BUGS
 	// return false;
 }
 
@@ -172,7 +198,7 @@ bool AIScriptFreeSlotB::ShotAtAndHit() {
 }
 
 void AIScriptFreeSlotB::Retired(int byActorId) {
-	Actor_Set_Goal_Number(kActorFreeSlotB, 599);
+	Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBGone);
 }
 
 int AIScriptFreeSlotB::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId) {
@@ -180,36 +206,40 @@ int AIScriptFreeSlotB::GetFriendlinessModifierIfGetsClue(int otherActorId, int c
 }
 
 bool AIScriptFreeSlotB::GoalChanged(int currentGoalNumber, int newGoalNumber) {
+//	debug("Rat B goal changed from %d to: %d", currentGoalNumber, newGoalNumber);
 	switch (newGoalNumber) {
-	case 300:
+	case kGoalFreeSlotBAct4Default:
+		// kSetFreeSlotG
 		AI_Movement_Track_Flush(kActorFreeSlotB);
 		AI_Movement_Track_Append(kActorFreeSlotB, 39, 2);
 		AI_Movement_Track_Repeat(kActorFreeSlotB);
 		break;
 
-	case 301:
+	case kGoalFreeSlotBAct4WalkAround:
 		AI_Movement_Track_Flush(kActorFreeSlotB);
-		processGoal301();
+		goToRandomUGxx();
 		AI_Movement_Track_Repeat(kActorFreeSlotB);
 		break;
 
-	case 302:
+	case kGoalFreeSlotBAct4AttackMcCoy:
 		Actor_Set_Targetable(kActorFreeSlotB, true);
 		Non_Player_Actor_Combat_Mode_On(kActorFreeSlotB, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 25, 0, 75, 5, 300, false);
 		break;
 
-	case 400:
+	case kGoalFreeSlotBAct5Default:
+		// kSetFreeSlotG
 		AI_Movement_Track_Append(kActorFreeSlotB, 39, 0);
 		AI_Movement_Track_Repeat(kActorFreeSlotB);
 		break;
 
-	case 406:
+	case kGoalFreeSlotBAct5KP02Attack:
+		// kSetKP02
 		AI_Movement_Track_Flush(kActorFreeSlotB);
 		AI_Movement_Track_Append(kActorFreeSlotB, 527, 0);
 		AI_Movement_Track_Repeat(kActorFreeSlotB);
 		break;
 
-	case 599:
+	case kGoalFreeSlotBGone:
 		Actor_Set_Health(kActorFreeSlotB, 20, 20);
 		break;
 
@@ -426,18 +456,20 @@ void AIScriptFreeSlotB::FledCombat() {
 	// return false;
 }
 
-void AIScriptFreeSlotB::processGoal301() {
+void AIScriptFreeSlotB::goToRandomUGxx() {
 	switch (Random_Query(1, 14)) {
 	case 1:
+		// kSetUG01
 		AI_Movement_Track_Append(kActorFreeSlotB, 450, 1);
 		AI_Movement_Track_Append(kActorFreeSlotB, 451, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 450, 0);
 		break;
 
 	case 2:
+		// kSetUG01
 		World_Waypoint_Set(466, kSetUG01, 144.98f, -50.13f, -175.75f);
-		World_Waypoint_Set(547, kSetUG01, 105.6f, -50.13f, -578.46f);
-		World_Waypoint_Set(548, kSetUG01, 62.0f, -50.13f, -574.0f);
+		World_Waypoint_Set(547, kSetUG01, 105.6f,  -50.13f, -578.46f);
+		World_Waypoint_Set(548, kSetUG01,  62.0f,  -50.13f, -574.0f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 5);
@@ -445,40 +477,45 @@ void AIScriptFreeSlotB::processGoal301() {
 		break;
 
 	case 3:
+		// kSetUG04
 		AI_Movement_Track_Append(kActorFreeSlotB, 446, 15);
-		AI_Movement_Track_Append(kActorFreeSlotB, 447, 1);
-		AI_Movement_Track_Append(kActorFreeSlotB, 449, 1);
-		AI_Movement_Track_Append(kActorFreeSlotB, 448, 2);
-		AI_Movement_Track_Append(kActorFreeSlotB, 449, 0);
+		AI_Movement_Track_Append(kActorFreeSlotB, 447,  1);
+		AI_Movement_Track_Append(kActorFreeSlotB, 449,  1);
+		AI_Movement_Track_Append(kActorFreeSlotB, 448,  2);
+		AI_Movement_Track_Append(kActorFreeSlotB, 449,  0);
 		break;
 
 	case 4:
-		World_Waypoint_Set(466, kSetUG04, -22.70f, 6.39f, 33.12f);
-		World_Waypoint_Set(547, kSetUG04, -6.70f, -1.74f, -362.88f);
-		World_Waypoint_Set(548, kSetUG04, 164.0f, 11.87f, -1013.0f);
+		// kSetUG04
+		World_Waypoint_Set(466, kSetUG04, -22.70f,  6.39f,    33.12f);
+		World_Waypoint_Set(547, kSetUG04,  -6.70f, -1.74f,  -362.88f);
+		World_Waypoint_Set(548, kSetUG04, 164.0f,  11.87f, -1013.0f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 2);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 0);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 0);
 		break;
 
 	case 5:
+		// kSetUG05
 		AI_Movement_Track_Append(kActorFreeSlotB, 457, 15);
-		AI_Movement_Track_Append(kActorFreeSlotB, 458, 0);
+		AI_Movement_Track_Append(kActorFreeSlotB, 458,  0);
 		AI_Movement_Track_Append(kActorFreeSlotB, 459, 15);
 		break;
 
 	case 6:
+		// kSetUG06
 		AI_Movement_Track_Append(kActorFreeSlotB, 460, 15);
-		AI_Movement_Track_Append(kActorFreeSlotB, 461, 5);
+		AI_Movement_Track_Append(kActorFreeSlotB, 461,  5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 460, 15);
 		break;
 
 	case 7:
+		// kSetUG07 or kSetFreeSlotG
 		if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
 			AI_Movement_Track_Append(kActorFreeSlotB, 39, 10);
 		} else {
-			World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
-			World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+			World_Waypoint_Set(466, kSetUG07,  -88.78f, -12.21f, -184.08f);
+			World_Waypoint_Set(547, kSetUG07,  250.0f,  -12.21f, -342.0f);
 			World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
 			AI_Movement_Track_Append(kActorFreeSlotB, 466, 5);
 			AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
@@ -486,44 +523,59 @@ void AIScriptFreeSlotB::processGoal301() {
 		break;
 
 	case 8:
-		World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+		// kSetUG07
+		// TODO a bug? Maybe also check here if Clovis is in the set
+		// like in case 7
+		World_Waypoint_Set(466, kSetUG07,  -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(547, kSetUG07,  250.0f,  -12.21f, -342.0f);
 		World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
+		// TODO: A bug? the waypoint 548 is created but is unused
 		break;
 
 	case 9:
-		World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+		// kSetUG07
+		// TODO a bug? Maybe also check here if Clovis is in the set
+		// like in case 7
+		World_Waypoint_Set(466, kSetUG07,  -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(547, kSetUG07,  250.0f,  -12.21f, -342.0f);
 		World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 1);
+		// TODO: A bug? the waypoint 466 is created but is unused
 		break;
 
 	case 10:
-		World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+		// kSetUG07
+		// TODO a bug? Maybe also check here if Clovis is in the set
+		// like in case 7
+		World_Waypoint_Set(466, kSetUG07,  -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(547, kSetUG07,  250.0f,  -12.21f, -342.0f);
 		World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
+		// TODO: A bug? the waypoint 466 is created but is unused
 		break;
 
 	case 11:
-		World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
+		// kSetUG09
+		World_Waypoint_Set(466, kSetUG09,   91.0f, 156.94f, -498.0f);
 		World_Waypoint_Set(547, kSetUG09, -149.0f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
 		break;
 
 	case 12:
-		World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
+		// kSetUG09
+		World_Waypoint_Set(466, kSetUG09,   91.0f, 156.94f, -498.0f);
 		World_Waypoint_Set(547, kSetUG09, -149.0f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
 		break;
 
 	case 13:
+		// kSetUG09
 #if BLADERUNNER_ORIGINAL_BUGS
 		// this makes the rat appear on the pipe (top left)
 		// but this is buggy since it will appear floating there
@@ -543,8 +595,9 @@ void AIScriptFreeSlotB::processGoal301() {
 		break;
 
 	case 14:
-		World_Waypoint_Set(466, kSetUG12, -360.67f, 21.39f, 517.55f);
-		World_Waypoint_Set(547, kSetUG12, -250.67f, 21.39f, 477.55f);
+		// kSetUG12
+		World_Waypoint_Set(466, kSetUG12, -360.67f, 21.39f,   517.55f);
+		World_Waypoint_Set(547, kSetUG12, -250.67f, 21.39f,   477.55f);
 		World_Waypoint_Set(548, kSetUG12, -248.67f, 21.39f, -1454.45f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 8);
@@ -552,6 +605,7 @@ void AIScriptFreeSlotB::processGoal301() {
 		break;
 
 	default:
+		// kSetFreeSlotG
 		AI_Movement_Track_Append(kActorFreeSlotB, 39, Random_Query(1, 10));
 		break;
 	}
diff --git a/engines/bladerunner/script/ai_script.h b/engines/bladerunner/script/ai_script.h
index 2fb2820..8942613 100644
--- a/engines/bladerunner/script/ai_script.h
+++ b/engines/bladerunner/script/ai_script.h
@@ -467,7 +467,7 @@ DECLARE_SCRIPT(FreeSlotB)
 	int _var1;
 	int _var2;
 
-	void processGoal301();
+	void goToRandomUGxx();
 END_SCRIPT
 
 DECLARE_SCRIPT(Maggie)
diff --git a/engines/bladerunner/script/scene/kp02.cpp b/engines/bladerunner/script/scene/kp02.cpp
index 955a513..0c238b3 100644
--- a/engines/bladerunner/script/scene/kp02.cpp
+++ b/engines/bladerunner/script/scene/kp02.cpp
@@ -79,14 +79,15 @@ bool SceneScriptKP02::ClickedOnItem(int itemId, bool a2) {
 
 bool SceneScriptKP02::ClickedOnExit(int exitId) {
 	if (exitId == 0) {
+		// TODO - A bug? Exit 0 is not added in the original game so this will never be triggered
 		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -1040.0f, -615.49f, 2903.0f, 0, true, false, false)) {
-			if (Actor_Query_Goal_Number(kActorFreeSlotB) == 406
-			 || Actor_Query_Goal_Number(kActorFreeSlotA) == 406
+			if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBAct5KP02Attack
+			 || Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5KP02Attack
 			) {
 				Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
 				Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
-				Actor_Set_Goal_Number(kActorFreeSlotB, 400);
-				Actor_Set_Goal_Number(kActorFreeSlotA, 400);
+				Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
+				Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
 				Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 				Ambient_Sounds_Remove_All_Looping_Sounds(1);
 				Game_Flag_Set(kFlagKP02toUG12);
@@ -103,13 +104,13 @@ bool SceneScriptKP02::ClickedOnExit(int exitId) {
 
 	if (exitId == 1) {
 		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -884.0f, -615.49f, 3065.0f, 0, true, false, false)) {
-			if (Actor_Query_Goal_Number(kActorFreeSlotB) == 406
-			 || Actor_Query_Goal_Number(kActorFreeSlotA) == 406
+			if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBAct5KP02Attack
+			 || Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5KP02Attack
 			) {
 				Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
 				Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
-				Actor_Set_Goal_Number(kActorFreeSlotB, 400);
-				Actor_Set_Goal_Number(kActorFreeSlotA, 400);
+				Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
+				Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
 				Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 				Ambient_Sounds_Remove_All_Looping_Sounds(1);
 				Game_Flag_Set(kFlagKP02toKP01);
diff --git a/engines/bladerunner/script/scene/ug07.cpp b/engines/bladerunner/script/scene/ug07.cpp
index e504413..7a4c1d8 100644
--- a/engines/bladerunner/script/scene/ug07.cpp
+++ b/engines/bladerunner/script/scene/ug07.cpp
@@ -96,7 +96,7 @@ bool SceneScriptUG07::ClickedOnItem(int itemId, bool a2) {
 
 bool SceneScriptUG07::ClickedOnExit(int exitId) {
 	if (exitId == 0) {
-		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -94.0f, -12.21f, -710.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != 402) {
+		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -94.0f, -12.21f, -710.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy) {
 			Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 			Ambient_Sounds_Remove_All_Looping_Sounds(1);
 			Game_Flag_Set(kFlagUG07toUG09);
@@ -106,7 +106,7 @@ bool SceneScriptUG07::ClickedOnExit(int exitId) {
 	}
 
 	if (exitId == 1) {
-		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 110.0f, -12.21f, -274.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != 402) {
+		if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 110.0f, -12.21f, -274.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy) {
 			Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 			Ambient_Sounds_Remove_All_Looping_Sounds(1);
 			Game_Flag_Set(kFlagUG07toUG08);
@@ -147,11 +147,11 @@ bool SceneScriptUG07::ClickedOnExit(int exitId) {
 				}
 				Actor_Set_Goal_Number(kActorMcCoy, kGoalMcCoyUG07Released);
 				Delay(1000);
-				Actor_Set_Goal_Number(kActorClovis, 401);
+				Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG07ChaseMcCoy);
 			}
 		} else {
 			if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -10.0f, -21.47f, -58.0f, 0, true, false, false)
-			 && Actor_Query_Goal_Number(kActorClovis) != 402
+			 && Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy
 			) {
 				Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
 				Ambient_Sounds_Remove_All_Looping_Sounds(1);
@@ -201,7 +201,7 @@ void SceneScriptUG07::PlayerWalkedOut() {
 	}
 
 	if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
-		Actor_Set_Goal_Number(kActorClovis, 400);
+		Actor_Set_Goal_Number(kActorClovis, kGoalClovisStartChapter4);
 	}
 }
 
diff --git a/engines/bladerunner/script/scene/ug15.cpp b/engines/bladerunner/script/scene/ug15.cpp
index 62fa14f..50f6e2e 100644
--- a/engines/bladerunner/script/scene/ug15.cpp
+++ b/engines/bladerunner/script/scene/ug15.cpp
@@ -140,9 +140,9 @@ bool SceneScriptUG15::ClickedOnExit(int exitId) {
 	}
 
 	if (exitId == 2) {
-		int v1 = Actor_Query_Goal_Number(kActorFreeSlotA);
-		if (v1 >= 300
-		 && v1 <= 303
+		int ratGoal = Actor_Query_Goal_Number(kActorFreeSlotA);
+		if (ratGoal >= 300 // kGoalFreeSlotAUG15Wait
+		 && ratGoal <= 303 // kGoalFreeSlotAUG15RunBack
 		) {
 			Loop_Actor_Walk_To_XYZ(kActorMcCoy, -137.61f, 48.07f, 147.12f, 0, true, false, false);
 		} else if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 18.0f, 52.28f, 46.0f, 0, true, false, false)) {





More information about the Scummvm-git-logs mailing list