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

antoniou79 antoniou at cti.gr
Tue Apr 9 15:38:54 CEST 2019


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

Summary:
a9404284c3 BLADERUNNER: Fix Officer Leary crowd interrogation


Commit: a9404284c3778c087aa1f10428db632880296a99
    https://github.com/scummvm/scummvm/commit/a9404284c3778c087aa1f10428db632880296a99
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-04-09T16:32:51+03:00

Commit Message:
BLADERUNNER: Fix Officer Leary crowd interrogation

He will now resume interrogation after McCoy interrupts him

Also used named constants for timers

Changed paths:
    engines/bladerunner/actor.cpp
    engines/bladerunner/actor.h
    engines/bladerunner/bladerunner.cpp
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/ai/bullet_bob.cpp
    engines/bladerunner/script/ai/dektora.cpp
    engines/bladerunner/script/ai/early_q.cpp
    engines/bladerunner/script/ai/gaff.cpp
    engines/bladerunner/script/ai/general_doll.cpp
    engines/bladerunner/script/ai/generic_walker_a.cpp
    engines/bladerunner/script/ai/generic_walker_b.cpp
    engines/bladerunner/script/ai/generic_walker_c.cpp
    engines/bladerunner/script/ai/gordo.cpp
    engines/bladerunner/script/ai/hanoi.cpp
    engines/bladerunner/script/ai/holloway.cpp
    engines/bladerunner/script/ai/klein.cpp
    engines/bladerunner/script/ai/leon.cpp
    engines/bladerunner/script/ai/lucy.cpp
    engines/bladerunner/script/ai/luther.cpp
    engines/bladerunner/script/ai/maggie.cpp
    engines/bladerunner/script/ai/moraji.cpp
    engines/bladerunner/script/ai/officer_grayford.cpp
    engines/bladerunner/script/ai/officer_leary.cpp
    engines/bladerunner/script/ai/sadik.cpp
    engines/bladerunner/script/ai/steele.cpp
    engines/bladerunner/script/ai/transient.cpp
    engines/bladerunner/script/ai/tyrell_guard.cpp
    engines/bladerunner/script/ai/zuben.cpp
    engines/bladerunner/script/scene/rc01.cpp


diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index da4e3fe..fa8a5d9 100644
--- a/engines/bladerunner/actor.cpp
+++ b/engines/bladerunner/actor.cpp
@@ -102,11 +102,11 @@ void Actor::setup(int actorId) {
 	_movementTrackWalkingToWaypointId = -1;
 	_movementTrackDelayOnNextWaypoint = -1;
 
-	for (int i = 0; i != 7; ++i) {
+	for (int i = 0; i != kActorTimers; ++i) {
 		_timersLeft[i] = 0;
 		_timersLast[i] = _vm->_time->current();
 	}
-	_timersLeft[4] = _timer4RemainDefault; // This was in original code. We need to init this timer in order to kick off periodic updates for acquireCluesByRelations
+	_timersLeft[kActorTimerClueExchange] = _timer4RemainDefault; // This was in original code. We need to init this timer in order to kick off periodic updates for acquireCluesByRelations
 
 	_honesty              = 50;
 	_intelligence         = 50;
@@ -209,18 +209,18 @@ void Actor::increaseFPS() {
 }
 
 void Actor::timerStart(int timerId, int interval) {
-	assert(timerId >= 0 && timerId < 7);
+	assert(timerId >= 0 && timerId < kActorTimers);
 	_timersLeft[timerId] = interval;
 	_timersLast[timerId] = _vm->_time->current();
 }
 
 void Actor::timerReset(int timerId) {
-	assert(timerId >= 0 && timerId < 7);
+	assert(timerId >= 0 && timerId < kActorTimers);
 	_timersLeft[timerId] = 0;
 }
 
 int Actor::timerLeft(int timerId) {
-	assert(timerId >= 0 && timerId < 7);
+	assert(timerId >= 0 && timerId < kActorTimers);
 	return _timersLeft[timerId];
 }
 
@@ -242,9 +242,9 @@ void Actor::timerUpdate(int timerId) {
 
 	if (_timersLeft[timerId] <= 0) {
 		switch (timerId) {
-		case 0:
-		case 1:
-		case 2:
+		case kActorTimerAIScriptCustomTask0:
+		case kActorTimerAIScriptCustomTask1:
+		case kActorTimerAIScriptCustomTask2:
 			if (!_vm->_aiScripts->isInsideScript() && !_vm->_sceneScript->isInsideScript()) {
 				_vm->_aiScripts->timerExpired(_id, timerId);
 				_timersLeft[timerId] = 0;
@@ -252,23 +252,23 @@ void Actor::timerUpdate(int timerId) {
 				_timersLeft[timerId] = 1;
 			}
 			break;
-		case 3:
-			_timersLeft[3] = 0;
+		case kActorTimerMovementTrack:
+			_timersLeft[kActorTimerMovementTrack] = 0;
 			if (_movementTrack->isPaused()) {
-				_timersLeft[3] = 1;
+				_timersLeft[kActorTimerMovementTrack] = 1;
 			} else {
 				movementTrackNext(false);
 			}
 			break;
-		case 4:
+		case kActorTimerClueExchange:
 			// Exchange clues between actors
 			acquireCluesByRelations();
-			_timersLeft[4] = _timer4RemainDefault;
+			_timersLeft[kActorTimerClueExchange] = _timer4RemainDefault;
 			break;
-		case 5:
+		case kActorTimerAnimationFrame:
 			// Actor animation frame timer
 			break;
-		case 6:
+		case kActorTimerRunningStaminaFPS:
 			if (isRunning()) {
 				if (_fps > 15) {
 					int newFps = _fps - 2;
@@ -278,7 +278,7 @@ void Actor::timerUpdate(int timerId) {
 					setFPS(newFps);
 				}
 			}
-			_timersLeft[6] = 200;
+			_timersLeft[kActorTimerRunningStaminaFPS] = 200;
 			break;
 		}
 	}
@@ -323,7 +323,7 @@ void Actor::movementTrackNext(bool omitAiScript) {
 			if (delay > 1) {
 				changeAnimationMode(kAnimationModeIdle, false);
 			}
-			timerStart(3, delay);
+			timerStart(kActorTimerMovementTrack, delay);
 		}
 		//return true;
 	} else {
@@ -368,7 +368,7 @@ void Actor::movementTrackWaypointReached() {
 					changeAnimationMode(kAnimationModeIdle, false);
 					delay = _movementTrackDelayOnNextWaypoint; // todo: analyze if movement is changed in some aiscript->ChangeAnimationMode?
 				}
-				timerStart(3, delay);
+				timerStart(kActorTimerMovementTrack, delay);
 			}
 		}
 		_movementTrackWalkingToWaypointId = -1;
@@ -584,8 +584,8 @@ bool Actor::tick(bool forceDraw, Common::Rect *screenRect) {
 	int timeLeft = 0;
 	bool needsUpdate = false;
 	if (_fps > 0) {
-		timerUpdate(5);
-		timeLeft = timerLeft(5);
+		timerUpdate(kActorTimerAnimationFrame);
+		timeLeft = timerLeft(kActorTimerAnimationFrame);
 		needsUpdate = timeLeft <= 0;
 	} else if (_fps == 0) {
 		needsUpdate = false;
@@ -703,7 +703,7 @@ bool Actor::tick(bool forceDraw, Common::Rect *screenRect) {
 		if (nextFrameTime <= 0) {
 			nextFrameTime = 1;
 		}
-		timerStart(5, nextFrameTime);
+		timerStart(kActorTimerAnimationFrame, nextFrameTime);
 	}
 	if (_targetFacing >= 0) {
 		if (_targetFacing == _facing) {
@@ -1364,12 +1364,12 @@ void Actor::save(SaveFileWriteStream &f) {
 	f.writeInt(0);
 	f.writeFloat(_scale);
 
-	for (int i = 0; i < 7; ++i) {
+	for (int i = 0; i < kActorTimers; ++i) {
 		f.writeInt(_timersLeft[i]);
 	}
 
 	uint32 now = _vm->_time->getPauseStart();
-	for (int i = 0; i < 7; ++i) {
+	for (int i = 0; i < kActorTimers; ++i) {
 		f.writeInt(now - _timersLast[i]);
 	}
 
@@ -1443,17 +1443,17 @@ void Actor::load(SaveFileReadStream &f) {
 	f.skip(4);
 	_scale = f.readFloat();
 
-	for (int i = 0; i < 7; ++i) {
+	for (int i = 0; i < kActorTimers; ++i) {
 		_timersLeft[i] = f.readInt();
 	}
-	// Bugfix: Special initialization case for timer 4 when it's value is restored as 0
+	// Bugfix: Special initialization case for timer 4 (kActorTimerClueExchange) when its value is restored as 0
 	// This should be harmless, but will remedy any broken save-games where the timer 4 was saved as 0.
-	if (_timersLeft[4] == 0) {
-		_timersLeft[4] = _timer4RemainDefault;
+	if (_timersLeft[kActorTimerClueExchange] == 0) {
+		_timersLeft[kActorTimerClueExchange] = _timer4RemainDefault;
 	}
 
 	uint32 now = _vm->_time->getPauseStart();
-	for (int i = 0; i < 7; ++i) {
+	for (int i = 0; i < kActorTimers; ++i) {
 		_timersLast[i] = now - f.readInt();
 	}
 
diff --git a/engines/bladerunner/actor.h b/engines/bladerunner/actor.h
index 8061303..1177e65 100644
--- a/engines/bladerunner/actor.h
+++ b/engines/bladerunner/actor.h
@@ -44,6 +44,8 @@ class View;
 class Actor {
 	BladeRunnerEngine *_vm;
 
+	static const int kActorTimers = 7;
+
 public:
 	BoundingBox    _bbox;
 	Common::Rect   _screenRectangle;
@@ -108,8 +110,8 @@ private:
 	int _retiredWidth;
 	int _retiredHeight;
 
-	int _timersLeft[7];
-	int _timersLast[7];
+	int _timersLeft[kActorTimers];
+	int _timersLast[kActorTimers];
 
 	float _scale;
 
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index b35c5bb..64b42e0 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -481,7 +481,7 @@ bool BladeRunnerEngine::startup(bool hasSavegames) {
 	_playerActor = _actors[_gameInfo->getPlayerId()];
 
 	_playerActor->setFPS(15);
-	_playerActor->timerStart(6, 200);
+	_playerActor->timerStart(kActorTimerRunningStaminaFPS, 200);
 
 	_policeMaze = new PoliceMaze(this);
 
diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index df934e6..65d1cc5 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -2193,7 +2193,11 @@ enum GoalZuben {
 enum GoalOfficerLeary {
 	kGoalOfficerLearyDefault = 0,
 	kGoalOfficerLearyRC01WalkToCrowd = 1,
-	kGoalOfficerLearyRC01CrowdInterrogation = 2
+	kGoalOfficerLearyRC01CrowdInterrogation = 2,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+	kGoalOfficerLearyRC01ResumeWalkToCrowd = 4
+#endif // BLADERUNNER_ORIGINAL_BUGS
 };
 
 enum GoalHanoi {
@@ -2310,6 +2314,16 @@ enum GoalMaggie {
 	kGoalMaggieDead = 599
 };
 
+enum ActorTimers {
+	kActorTimerAIScriptCustomTask0 = 0,
+	kActorTimerAIScriptCustomTask1 = 1,
+	kActorTimerAIScriptCustomTask2 = 2,
+	kActorTimerMovementTrack       = 3,
+	kActorTimerClueExchange        = 4,
+	kActorTimerAnimationFrame      = 5,
+	kActorTimerRunningStaminaFPS   = 6,
+};
+
 // Certain tracks are available at Frank Klepacki's website/portfolio for Blade Runner
 // Those are noted with their "official" name in a side-comment here, as they appear at the website
 // A few may not match the incremental number given in-game (eg kMusicGothic3 is "Gothic Club 2")
diff --git a/engines/bladerunner/script/ai/bullet_bob.cpp b/engines/bladerunner/script/ai/bullet_bob.cpp
index 47e3852..f494624 100644
--- a/engines/bladerunner/script/ai/bullet_bob.cpp
+++ b/engines/bladerunner/script/ai/bullet_bob.cpp
@@ -58,15 +58,15 @@ bool AIScriptBulletBob::Update() {
 	 && !Game_Flag_Query(kFlagRC04McCoyCombatMode)
 	 &&  Global_Variable_Query(kVariableChapter) < 4
 	) {
-		AI_Countdown_Timer_Reset(kActorBulletBob, 2);
-		AI_Countdown_Timer_Start(kActorBulletBob, 2, 10);
+		AI_Countdown_Timer_Reset(kActorBulletBob, kActorTimerAIScriptCustomTask2);
+		AI_Countdown_Timer_Start(kActorBulletBob, kActorTimerAIScriptCustomTask2, 10);
 		Actor_Set_Goal_Number(kActorBulletBob, kGoalBulletBobWarningMcCoy);
 		Actor_Modify_Friendliness_To_Other(kActorBulletBob, kActorMcCoy, -15);
 		Game_Flag_Set(kFlagRC04McCoyCombatMode);
 	} else if ( Actor_Query_Goal_Number(kActorBulletBob) == kGoalBulletBobWarningMcCoy
 	        && !Player_Query_Combat_Mode()
 	) {
-		AI_Countdown_Timer_Reset(kActorBulletBob, 2);
+		AI_Countdown_Timer_Reset(kActorBulletBob, kActorTimerAIScriptCustomTask2);
 		Game_Flag_Reset(kFlagRC04McCoyCombatMode);
 		Game_Flag_Set(kFlagRC04McCoyWarned);
 		Actor_Set_Goal_Number(kActorBulletBob, kGoalBulletBobDefault);
@@ -96,11 +96,11 @@ bool AIScriptBulletBob::Update() {
 }
 
 void AIScriptBulletBob::TimerExpired(int timer) {
-	if (timer == 2
+	if (timer == kActorTimerAIScriptCustomTask2
 	 && Actor_Query_Goal_Number(kActorBulletBob) == kGoalBulletBobWarningMcCoy
 	) {
 		Actor_Set_Goal_Number(kActorBulletBob, kGoalBulletBobShootMcCoy);
-		AI_Countdown_Timer_Reset(kActorBulletBob, 2);
+		AI_Countdown_Timer_Reset(kActorBulletBob, kActorTimerAIScriptCustomTask2);
 		return; //true;
 	}
 	return; //false;
diff --git a/engines/bladerunner/script/ai/dektora.cpp b/engines/bladerunner/script/ai/dektora.cpp
index b4e059a..1e64228 100644
--- a/engines/bladerunner/script/ai/dektora.cpp
+++ b/engines/bladerunner/script/ai/dektora.cpp
@@ -110,20 +110,20 @@ bool AIScriptDektora::Update() {
 }
 
 void AIScriptDektora::TimerExpired(int timer) {
-	if (timer == 0) {
+	if (timer == kActorTimerAIScriptCustomTask0) {
 		if (Actor_Query_Goal_Number(kActorDektora) == kGoalDektoraNR08Dance) {
 			if (Player_Query_Current_Scene() == kSceneNR08) {
-				AI_Countdown_Timer_Reset(kActorDektora, 0);
-				AI_Countdown_Timer_Start(kActorDektora, 0, 10);
+				AI_Countdown_Timer_Reset(kActorDektora, kActorTimerAIScriptCustomTask0);
+				AI_Countdown_Timer_Start(kActorDektora, kActorTimerAIScriptCustomTask0, 10);
 			} else {
 				Actor_Set_Goal_Number(kActorDektora, kGoalDektoraNR08Leave);
-				AI_Countdown_Timer_Reset(kActorDektora, 0);
+				AI_Countdown_Timer_Reset(kActorDektora, kActorTimerAIScriptCustomTask0);
 			}
 			return; //true;
 		}
 
 		if (Actor_Query_Goal_Number(kActorDektora) == kGoalDektoraNR11Burning) {
-			AI_Countdown_Timer_Reset(kActorDektora, 0);
+			AI_Countdown_Timer_Reset(kActorDektora, kActorTimerAIScriptCustomTask0);
 			Actor_Set_Goal_Number(kActorDektora, kGoalDektoraNR11BurningGoToMcCoy);
 			return; //true;
 		}
@@ -417,8 +417,8 @@ bool AIScriptDektora::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		AI_Movement_Track_Flush(kActorDektora);
 		Actor_Put_In_Set(kActorDektora, kSetNR05_NR08);
 		Actor_Set_At_XYZ(kActorDektora, -923.93f, 127.85f, 413.46f, 30);
-		AI_Countdown_Timer_Reset(kActorDektora, 0);
-		AI_Countdown_Timer_Start(kActorDektora, 0, 45);
+		AI_Countdown_Timer_Reset(kActorDektora, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorDektora, kActorTimerAIScriptCustomTask0, 45);
 		break;
 
 	case kGoalDektoraNR08Leave:
@@ -458,9 +458,9 @@ bool AIScriptDektora::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case kGoalDektoraNR11Hiding:
 		AI_Movement_Track_Flush(kActorDektora);
-		AI_Countdown_Timer_Reset(kActorDektora, 0);
-		AI_Countdown_Timer_Reset(kActorDektora, 1);
-		AI_Countdown_Timer_Reset(kActorDektora, 2);
+		AI_Countdown_Timer_Reset(kActorDektora, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Reset(kActorDektora, kActorTimerAIScriptCustomTask1);
+		AI_Countdown_Timer_Reset(kActorDektora, kActorTimerAIScriptCustomTask2);
 		Actor_Put_In_Set(kActorDektora, kSetNR11);
 		Actor_Set_At_XYZ(kActorDektora, -184.0f, 0.33f, -268.0f, 256);
 		break;
diff --git a/engines/bladerunner/script/ai/early_q.cpp b/engines/bladerunner/script/ai/early_q.cpp
index 4d67360..a0f4983 100644
--- a/engines/bladerunner/script/ai/early_q.cpp
+++ b/engines/bladerunner/script/ai/early_q.cpp
@@ -78,11 +78,11 @@ bool AIScriptEarlyQ::Update() {
 }
 
 void AIScriptEarlyQ::TimerExpired(int timer) {
-	if (timer == 0
+	if (timer == kActorTimerAIScriptCustomTask0
 	 && Actor_Query_Goal_Number(kActorEarlyQ) == kGoalEarlyQNR05WillLeave
 	) {
 		if (Player_Query_Current_Scene() == kSceneNR05) {
-			AI_Countdown_Timer_Reset(kActorEarlyQ, 0);
+			AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask0);
 			Actor_Set_Goal_Number(kActorEarlyQ, kGoalEarlyQNR05Leave);
 		} else {
 			Actor_Set_Goal_Number(kActorEarlyQ, kGoalEarlyQNR05Wait);
@@ -90,19 +90,19 @@ void AIScriptEarlyQ::TimerExpired(int timer) {
 		return; //true;
 	}
 
-	if (timer == 0
+	if (timer == kActorTimerAIScriptCustomTask0
 	 && Actor_Query_Goal_Number(kActorEarlyQ) == kGoalEarlyQNR04GoToMcCoy
 	) {
 		Player_Loses_Control();
-		AI_Countdown_Timer_Reset(kActorEarlyQ, 0);
+		AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask0);
 		Actor_Set_Goal_Number(kActorEarlyQ, kGoalEarlyQNR04HandDrink);
 		return; //true;
 	}
 
-	if (timer == 1
+	if (timer == kActorTimerAIScriptCustomTask1
 	 && Actor_Query_Goal_Number(kActorEarlyQ) == kGoalEarlyQNR04WaitForPulledGun
 	) {
-		AI_Countdown_Timer_Reset(kActorEarlyQ, 1);
+		AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask1);
 		Player_Loses_Control();
 		Actor_Change_Animation_Mode(kActorEarlyQ, 29);
 		Delay(2500);
@@ -207,7 +207,7 @@ void AIScriptEarlyQ::OtherAgentEnteredCombatMode(int otherActorId, int combatMod
 			Game_Flag_Set(kFlagNotUsed565);
 		}
 		Game_Flag_Set(kFlagNR04McCoyAimedAtEarlyQ);
-		AI_Countdown_Timer_Reset(kActorEarlyQ, 0);
+		AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask0);
 		Actor_Set_Goal_Number(kActorEarlyQ, kGoalEarlyQNR04McCoyPulledGun);
 		return; // true;
 	}
@@ -219,7 +219,7 @@ void AIScriptEarlyQ::OtherAgentEnteredCombatMode(int otherActorId, int combatMod
 		if (Game_Flag_Query(kFlagNotUsed565)) {
 			Game_Flag_Reset(kFlagNotUsed565);
 		}
-		AI_Countdown_Timer_Reset(kActorEarlyQ, 1);
+		AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask1);
 		Actor_Set_Goal_Number(kActorEarlyQ, kGoalEarlyQNR04Talk3);
 		return; //true;
 	}
@@ -335,8 +335,8 @@ bool AIScriptEarlyQ::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case kGoalEarlyQNR04GoToMcCoy:
 		Loop_Actor_Walk_To_Actor(kActorEarlyQ, 0, 36, 0, 0);
-		AI_Countdown_Timer_Reset(kActorEarlyQ, 0);
-		AI_Countdown_Timer_Start(kActorEarlyQ, 0, 4);
+		AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorEarlyQ, kActorTimerAIScriptCustomTask0, 4);
 		break;
 
 	case kGoalEarlyQNR04McCoyPulledGun:
@@ -378,8 +378,8 @@ bool AIScriptEarlyQ::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		break;
 
 	case kGoalEarlyQNR04WaitForPulledGun:
-		AI_Countdown_Timer_Reset(kActorEarlyQ, 1);
-		AI_Countdown_Timer_Start(kActorEarlyQ, 1, 5);
+		AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask1);
+		AI_Countdown_Timer_Start(kActorEarlyQ, kActorTimerAIScriptCustomTask1, 5);
 		break;
 
 	case kGoalEarlyQNR04TakeDisk:
@@ -432,8 +432,8 @@ bool AIScriptEarlyQ::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		break;
 
 	case kGoalEarlyQNR05WillLeave:
-		AI_Countdown_Timer_Reset(kActorEarlyQ, 0);
-		AI_Countdown_Timer_Start(kActorEarlyQ, 0, 20);
+		AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorEarlyQ, kActorTimerAIScriptCustomTask0, 20);
 		break;
 
 	case kGoalEarlyQNR05Leave:
@@ -460,7 +460,7 @@ bool AIScriptEarlyQ::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case 229:
 		AI_Movement_Track_Flush(kActorEarlyQ);
-		AI_Countdown_Timer_Reset(kActorEarlyQ, 0);
+		AI_Countdown_Timer_Reset(kActorEarlyQ, kActorTimerAIScriptCustomTask0);
 		break;
 
 	case kGoalEarlyQNR04Wait:
diff --git a/engines/bladerunner/script/ai/gaff.cpp b/engines/bladerunner/script/ai/gaff.cpp
index bfcd163..ac9d944 100644
--- a/engines/bladerunner/script/ai/gaff.cpp
+++ b/engines/bladerunner/script/ai/gaff.cpp
@@ -57,8 +57,8 @@ bool AIScriptGaff::Update() {
 }
 
 void AIScriptGaff::TimerExpired(int timer) {
-	if (timer == 0) {
-		AI_Countdown_Timer_Reset(kActorGaff, 0);
+	if (timer == kActorTimerAIScriptCustomTask0) {
+		AI_Countdown_Timer_Reset(kActorGaff, kActorTimerAIScriptCustomTask0);
 		Actor_Set_Goal_Number(kActorGaff, kGoalGaffMA07TalkToMcCoy);
 	}
 	//return false;
@@ -171,7 +171,7 @@ void AIScriptGaff::OtherAgentEnteredCombatMode(int otherActorId, int combatMode)
 	 && Actor_Query_In_Set(kActorMcCoy, kSetMA07)
 	 && Actor_Query_Goal_Number(kActorGaff) == kGoalGaffMA07Wait
 	) {
-		AI_Countdown_Timer_Reset(kActorGaff, 0);
+		AI_Countdown_Timer_Reset(kActorGaff, kActorTimerAIScriptCustomTask0);
 		Actor_Set_Goal_Number(kActorGaff, kGoalGaffMA07ShootMcCoy);
 	}
 	// return false;
diff --git a/engines/bladerunner/script/ai/general_doll.cpp b/engines/bladerunner/script/ai/general_doll.cpp
index ee531d0..eb82c54 100644
--- a/engines/bladerunner/script/ai/general_doll.cpp
+++ b/engines/bladerunner/script/ai/general_doll.cpp
@@ -61,10 +61,10 @@ bool AIScriptGeneralDoll::Update() {
 }
 
 void AIScriptGeneralDoll::TimerExpired(int timer) {
-	if (timer == 2) {
+	if (timer == kActorTimerAIScriptCustomTask2) {
 		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie);
 		Actor_Change_Animation_Mode(kActorGeneralDoll, kAnimationModeDie);
-		AI_Countdown_Timer_Reset(kActorGeneralDoll, 2);
+		AI_Countdown_Timer_Reset(kActorGeneralDoll, kActorTimerAIScriptCustomTask2);
 		return; //true;
 	}
 	return; //false;
diff --git a/engines/bladerunner/script/ai/generic_walker_a.cpp b/engines/bladerunner/script/ai/generic_walker_a.cpp
index c7afdbc..b764f77 100644
--- a/engines/bladerunner/script/ai/generic_walker_a.cpp
+++ b/engines/bladerunner/script/ai/generic_walker_a.cpp
@@ -66,8 +66,8 @@ bool AIScriptGenericWalkerA::Update() {
 }
 
 void AIScriptGenericWalkerA::TimerExpired(int timer) {
-	if (timer == 2) {
-		AI_Countdown_Timer_Reset(kActorGenwalkerA, 2);
+	if (timer == kActorTimerAIScriptCustomTask2) {
+		AI_Countdown_Timer_Reset(kActorGenwalkerA, kActorTimerAIScriptCustomTask2);
 		Game_Flag_Reset(kFlagGenericWalkerWaiting);
 		return;// true;
 	}
@@ -79,8 +79,8 @@ void AIScriptGenericWalkerA::CompletedMovementTrack() {
 		Actor_Set_Goal_Number(kActorGenwalkerA, 0);
 		if (!Game_Flag_Query(kFlagGenericWalkerWaiting)) {
 			Game_Flag_Set(kFlagGenericWalkerWaiting);
-			AI_Countdown_Timer_Reset(kActorGenwalkerA, 2);
-			AI_Countdown_Timer_Start(kActorGenwalkerA, 2, Random_Query(6, 10));
+			AI_Countdown_Timer_Reset(kActorGenwalkerA, kActorTimerAIScriptCustomTask2);
+			AI_Countdown_Timer_Start(kActorGenwalkerA, kActorTimerAIScriptCustomTask2, Random_Query(6, 10));
 		}
 		// return true;
 	}
@@ -358,8 +358,8 @@ bool AIScriptGenericWalkerA::prepareWalker() {
 
 	Global_Variable_Set(kVariableGenericWalkerAModel, model);
 	Game_Flag_Set(kFlagGenericWalkerWaiting);
-	AI_Countdown_Timer_Reset(kActorGenwalkerA, 2);
-	AI_Countdown_Timer_Start(kActorGenwalkerA, 2, Random_Query(4, 12));
+	AI_Countdown_Timer_Reset(kActorGenwalkerA, kActorTimerAIScriptCustomTask2);
+	AI_Countdown_Timer_Start(kActorGenwalkerA, kActorTimerAIScriptCustomTask2, Random_Query(4, 12));
 	Actor_Set_Goal_Number(kActorGenwalkerA, 1);
 	return true;
 }
diff --git a/engines/bladerunner/script/ai/generic_walker_b.cpp b/engines/bladerunner/script/ai/generic_walker_b.cpp
index acada61..b4c37e8 100644
--- a/engines/bladerunner/script/ai/generic_walker_b.cpp
+++ b/engines/bladerunner/script/ai/generic_walker_b.cpp
@@ -62,8 +62,8 @@ bool AIScriptGenericWalkerB::Update() {
 }
 
 void AIScriptGenericWalkerB::TimerExpired(int timer) {
-	if (timer == 2) {
-		AI_Countdown_Timer_Reset(kActorGenwalkerB, 2);
+	if (timer == kActorTimerAIScriptCustomTask2) {
+		AI_Countdown_Timer_Reset(kActorGenwalkerB, kActorTimerAIScriptCustomTask2);
 		Game_Flag_Reset(kFlagGenericWalkerWaiting);
 		return;// true;
 	}
@@ -75,8 +75,8 @@ void AIScriptGenericWalkerB::CompletedMovementTrack() {
 		Actor_Set_Goal_Number(kActorGenwalkerB, 0);
 		if (!Game_Flag_Query(kFlagGenericWalkerWaiting)) {
 			Game_Flag_Set(kFlagGenericWalkerWaiting);
-			AI_Countdown_Timer_Reset(kActorGenwalkerB, 2);
-			AI_Countdown_Timer_Start(kActorGenwalkerB, 2, Random_Query(6, 10));
+			AI_Countdown_Timer_Reset(kActorGenwalkerB, kActorTimerAIScriptCustomTask2);
+			AI_Countdown_Timer_Start(kActorGenwalkerB, kActorTimerAIScriptCustomTask2, Random_Query(6, 10));
 		}
 		// return true;
 	}
@@ -334,8 +334,8 @@ bool AIScriptGenericWalkerB::prepareWalker() {
 
 	Global_Variable_Set(kVariableGenericWalkerBModel, model);
 	Game_Flag_Set(kFlagGenericWalkerWaiting);
-	AI_Countdown_Timer_Reset(kActorGenwalkerB, 2);
-	AI_Countdown_Timer_Start(kActorGenwalkerB, 2, Random_Query(4, 12));
+	AI_Countdown_Timer_Reset(kActorGenwalkerB, kActorTimerAIScriptCustomTask2);
+	AI_Countdown_Timer_Start(kActorGenwalkerB, kActorTimerAIScriptCustomTask2, Random_Query(4, 12));
 	Actor_Set_Goal_Number(kActorGenwalkerB, 1);
 	return true;
 }
diff --git a/engines/bladerunner/script/ai/generic_walker_c.cpp b/engines/bladerunner/script/ai/generic_walker_c.cpp
index a70ebc0..80b1191 100644
--- a/engines/bladerunner/script/ai/generic_walker_c.cpp
+++ b/engines/bladerunner/script/ai/generic_walker_c.cpp
@@ -63,8 +63,8 @@ bool AIScriptGenericWalkerC::Update() {
 }
 
 void AIScriptGenericWalkerC::TimerExpired(int timer) {
-	if (timer == 2) {
-		AI_Countdown_Timer_Reset(kActorGenwalkerC, 2);
+	if (timer == kActorTimerAIScriptCustomTask2) {
+		AI_Countdown_Timer_Reset(kActorGenwalkerC, kActorTimerAIScriptCustomTask2);
 		Game_Flag_Reset(kFlagGenericWalkerWaiting);
 		return;// true;
 	}
@@ -76,8 +76,8 @@ void AIScriptGenericWalkerC::CompletedMovementTrack() {
 		Actor_Set_Goal_Number(kActorGenwalkerC, 0);
 		if (!Game_Flag_Query(kFlagGenericWalkerWaiting)) {
 			Game_Flag_Set(kFlagGenericWalkerWaiting);
-			AI_Countdown_Timer_Reset(kActorGenwalkerC, 2);
-			AI_Countdown_Timer_Start(kActorGenwalkerC, 2, Random_Query(6, 10));
+			AI_Countdown_Timer_Reset(kActorGenwalkerC, kActorTimerAIScriptCustomTask2);
+			AI_Countdown_Timer_Start(kActorGenwalkerC, kActorTimerAIScriptCustomTask2, Random_Query(6, 10));
 		}
 		// return true;
 	}
@@ -337,8 +337,8 @@ bool AIScriptGenericWalkerC::prepareWalker() {
 
 	Global_Variable_Set(kVariableGenericWalkerCModel, model);
 	Game_Flag_Set(kFlagGenericWalkerWaiting);
-	AI_Countdown_Timer_Reset(kActorGenwalkerC, 2);
-	AI_Countdown_Timer_Start(kActorGenwalkerC, 2, Random_Query(4, 12));
+	AI_Countdown_Timer_Reset(kActorGenwalkerC, kActorTimerAIScriptCustomTask2);
+	AI_Countdown_Timer_Start(kActorGenwalkerC, kActorTimerAIScriptCustomTask2, Random_Query(4, 12));
 	Actor_Set_Goal_Number(kActorGenwalkerC, 1);
 	return true;
 }
diff --git a/engines/bladerunner/script/ai/gordo.cpp b/engines/bladerunner/script/ai/gordo.cpp
index b540719..974629b 100644
--- a/engines/bladerunner/script/ai/gordo.cpp
+++ b/engines/bladerunner/script/ai/gordo.cpp
@@ -101,8 +101,8 @@ bool AIScriptGordo::Update() {
 }
 
 void AIScriptGordo::TimerExpired(int timer) {
-	if (timer == 0) {
-		AI_Countdown_Timer_Reset(kActorGordo, 0);
+	if (timer == kActorTimerAIScriptCustomTask0) {
+		AI_Countdown_Timer_Reset(kActorGordo, kActorTimerAIScriptCustomTask0);
 		if (Player_Query_Combat_Mode()) {
 			Actor_Set_Goal_Number(kActorGordo, kGoalGordoNR01RunAway);
 		} else {
@@ -629,7 +629,7 @@ bool AIScriptGordo::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case kGoalGordoNR01GiveUp:
 		ADQ_Add(kActorGordo, 170, 18);
-		AI_Countdown_Timer_Start(kActorGordo, 0, 10);
+		AI_Countdown_Timer_Start(kActorGordo, kActorTimerAIScriptCustomTask0, 10);
 		break;
 
 	case kGoalGordoNR01TalkToMcCoy:
@@ -689,7 +689,7 @@ bool AIScriptGordo::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case kGoalGordoNR01Die:
 		Music_Stop(2);
-		AI_Countdown_Timer_Reset(kActorGordo, 0);
+		AI_Countdown_Timer_Reset(kActorGordo, kActorTimerAIScriptCustomTask0);
 		ADQ_Flush();
 		AI_Movement_Track_Flush(kActorGordo);
 		if (Game_Flag_Query(kFlagGordoIsReplicant)) {
diff --git a/engines/bladerunner/script/ai/hanoi.cpp b/engines/bladerunner/script/ai/hanoi.cpp
index 6472c5a..735f442 100644
--- a/engines/bladerunner/script/ai/hanoi.cpp
+++ b/engines/bladerunner/script/ai/hanoi.cpp
@@ -47,7 +47,7 @@ void AIScriptHanoi::Initialize() {
 
 bool AIScriptHanoi::Update() {
 	if (Actor_Query_Goal_Number(kActorHolloway) == kGoalHollowayGoToNR07) {
-		AI_Countdown_Timer_Reset(kActorHanoi, 0);
+		AI_Countdown_Timer_Reset(kActorHanoi, kActorTimerAIScriptCustomTask0);
 	}
 
 	if (Global_Variable_Query(kVariableChapter) == 3
@@ -99,7 +99,7 @@ bool AIScriptHanoi::Update() {
 }
 
 void AIScriptHanoi::TimerExpired(int timer) {
-	if (timer == 0) {
+	if (timer == kActorTimerAIScriptCustomTask0) {
 		if (Actor_Query_Goal_Number(kActorHanoi) == kGoalHanoiNR03StartGuarding) {
 			Actor_Set_Goal_Number(kActorHanoi, kGoalHanoiNR03GoToDefaultPosition);
 			return; //true;
@@ -219,11 +219,11 @@ bool AIScriptHanoi::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	switch (newGoalNumber) {
 	case kGoalHanoiDefault:
-		AI_Countdown_Timer_Start(kActorHanoi, 0, 45);
+		AI_Countdown_Timer_Start(kActorHanoi, kActorTimerAIScriptCustomTask0, 45);
 		break;
 
 	case kGoalHanoiResetTimer:
-		AI_Countdown_Timer_Reset(kActorHanoi, 0);
+		AI_Countdown_Timer_Reset(kActorHanoi, kActorTimerAIScriptCustomTask0);
 		break;
 
 	case kGoalHanoiNR07TalkToMcCoy:
@@ -283,13 +283,13 @@ bool AIScriptHanoi::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 	case kGoalHanoiNR03StartGuarding:
 		Actor_Put_In_Set(kActorHanoi, kSetNR03);
 		Actor_Set_At_Waypoint(kActorHanoi, 362, 300);
-		AI_Countdown_Timer_Reset(kActorHanoi, 0);
-		AI_Countdown_Timer_Start(kActorHanoi, 0, 6);
+		AI_Countdown_Timer_Reset(kActorHanoi, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorHanoi, kActorTimerAIScriptCustomTask0, 6);
 		break;
 
 	case kGoalHanoiThrowOutMcCoy:
 		Game_Flag_Set(kFlagNR03McCoyThrownOut);
-		AI_Countdown_Timer_Reset(kActorHanoi, 0);
+		AI_Countdown_Timer_Reset(kActorHanoi, kActorTimerAIScriptCustomTask0);
 		Player_Loses_Control();
 		Player_Set_Combat_Mode(false); // this is missing in ITA & SPA versions of the game
 		Actor_Force_Stop_Walking(kActorMcCoy);
diff --git a/engines/bladerunner/script/ai/holloway.cpp b/engines/bladerunner/script/ai/holloway.cpp
index 8efb3c9..c7eb29e 100644
--- a/engines/bladerunner/script/ai/holloway.cpp
+++ b/engines/bladerunner/script/ai/holloway.cpp
@@ -48,8 +48,8 @@ bool AIScriptHolloway::Update() {
 }
 
 void AIScriptHolloway::TimerExpired(int timer) {
-	if (timer == 0) {
-		AI_Countdown_Timer_Reset(kActorHolloway, 0);
+	if (timer == kActorTimerAIScriptCustomTask0) {
+		AI_Countdown_Timer_Reset(kActorHolloway, kActorTimerAIScriptCustomTask0);
 		if (Global_Variable_Query(kVariableHollowayArrest) == 1) {
 			Player_Gains_Control();
 		}
@@ -90,7 +90,7 @@ void AIScriptHolloway::OtherAgentEnteredCombatMode(int otherActorId, int combatM
 	if (otherActorId == kActorMcCoy
 	 && Actor_Query_Goal_Number(kActorHolloway) == kGoalHollowayApproachMcCoy
 	) {
-		AI_Countdown_Timer_Reset(kActorHolloway, 0);
+		AI_Countdown_Timer_Reset(kActorHolloway, kActorTimerAIScriptCustomTask0);
 		Actor_Set_Goal_Number(kActorHolloway, kGoalHollowayKnockOutMcCoy);
 	}
 }
@@ -146,8 +146,8 @@ bool AIScriptHolloway::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		} else {
 			Actor_Says(kActorHolloway, 30, kAnimationModeTalk);
 			Actor_Face_Actor(kActorMcCoy, kActorHolloway, true);
-			AI_Countdown_Timer_Reset(kActorHolloway, 0);
-			AI_Countdown_Timer_Start(kActorHolloway, 0, 1);
+			AI_Countdown_Timer_Reset(kActorHolloway, kActorTimerAIScriptCustomTask0);
+			AI_Countdown_Timer_Start(kActorHolloway, kActorTimerAIScriptCustomTask0, 1);
 		}
 		break;
 
diff --git a/engines/bladerunner/script/ai/klein.cpp b/engines/bladerunner/script/ai/klein.cpp
index fc2893d..8091fee 100644
--- a/engines/bladerunner/script/ai/klein.cpp
+++ b/engines/bladerunner/script/ai/klein.cpp
@@ -72,8 +72,8 @@ bool AIScriptKlein::Update() {
 	 &&  Actor_Query_Friendliness_To_Other(kActorKlein, kActorMcCoy) < 35
 	 && !Game_Flag_Query(kFlagPS07KleinInsulted)
 	) {
-		AI_Countdown_Timer_Reset(kActorKlein, 2);
-		AI_Countdown_Timer_Start(kActorKlein, 2, 5);
+		AI_Countdown_Timer_Reset(kActorKlein, kActorTimerAIScriptCustomTask2);
+		AI_Countdown_Timer_Start(kActorKlein, kActorTimerAIScriptCustomTask2, 5);
 		Game_Flag_Set(kFlagPS07KleinInsulted);
 		return true;
 	}
@@ -91,7 +91,7 @@ bool AIScriptKlein::Update() {
 }
 
 void AIScriptKlein::TimerExpired(int timer) {
-	if (timer == 2) {
+	if (timer == kActorTimerAIScriptCustomTask2) {
 		if ( Game_Flag_Query(kFlagPS07KleinInsulted)
 		 && !Game_Flag_Query(kFlagPS07KleinInsultedTalk)
 		 &&  Actor_Query_Is_In_Current_Set(kActorKlein)
diff --git a/engines/bladerunner/script/ai/leon.cpp b/engines/bladerunner/script/ai/leon.cpp
index 0e1a115..94f3093 100644
--- a/engines/bladerunner/script/ai/leon.cpp
+++ b/engines/bladerunner/script/ai/leon.cpp
@@ -73,18 +73,18 @@ bool AIScriptLeon::Update() {
 }
 
 void AIScriptLeon::TimerExpired(int timer) {
-	if (timer == 0
+	if (timer == kActorTimerAIScriptCustomTask0
 	 && Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave
 	) {
-		AI_Countdown_Timer_Reset(kActorLeon, 0);
+		AI_Countdown_Timer_Reset(kActorLeon, kActorTimerAIScriptCustomTask0);
 		Actor_Set_Goal_Number(kActorLeon, kGoalLeonGone);
 	}
 }
 
 void AIScriptLeon::CompletedMovementTrack() {
 	if (Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave) {
-		AI_Countdown_Timer_Reset(kActorLeon, 0);
-		AI_Countdown_Timer_Start(kActorLeon, 0, 8);
+		AI_Countdown_Timer_Reset(kActorLeon, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorLeon, kActorTimerAIScriptCustomTask0, 8);
 		//return true;
 	}
 	//return false;
@@ -111,7 +111,7 @@ void AIScriptLeon::OtherAgentEnteredThisScene(int otherActorId) {
 	if (otherActorId == kActorMcCoy
 	 && Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave
 	) {
-		AI_Countdown_Timer_Reset(kActorLeon, 0);
+		AI_Countdown_Timer_Reset(kActorLeon, kActorTimerAIScriptCustomTask0);
 		AI_Movement_Track_Flush(kActorLeon);
 		AI_Movement_Track_Append(kActorLeon, 353, 0);
 		AI_Movement_Track_Repeat(kActorLeon);
diff --git a/engines/bladerunner/script/ai/lucy.cpp b/engines/bladerunner/script/ai/lucy.cpp
index ab007e1..52b2b80 100644
--- a/engines/bladerunner/script/ai/lucy.cpp
+++ b/engines/bladerunner/script/ai/lucy.cpp
@@ -111,14 +111,14 @@ bool AIScriptLucy::Update() {
 }
 
 void AIScriptLucy::TimerExpired(int timer) {
-	AI_Countdown_Timer_Reset(kActorLucy, 0);
-	if (timer == 0
-	 && Actor_Query_Goal_Number(kActorLucy) == kGoalLucyGoToHF03
-	) {
-		if (Player_Query_Current_Scene() == kSceneHF03) {
-			AI_Countdown_Timer_Start(kActorLucy, 0, 20);
-		} else {
-			Actor_Set_Goal_Number(kActorLucy, kGoalLucyMoveAround);
+	if (timer == kActorTimerAIScriptCustomTask0) { // rephrased this to be more expandable (if required)
+		AI_Countdown_Timer_Reset(kActorLucy, kActorTimerAIScriptCustomTask0);
+		if(Actor_Query_Goal_Number(kActorLucy) == kGoalLucyGoToHF03) {
+			if (Player_Query_Current_Scene() == kSceneHF03) {
+				AI_Countdown_Timer_Start(kActorLucy, kActorTimerAIScriptCustomTask0, 20);
+			} else {
+				Actor_Set_Goal_Number(kActorLucy, kGoalLucyMoveAround);
+			}
 		}
 	}
 }
@@ -132,8 +132,8 @@ void AIScriptLucy::CompletedMovementTrack() {
 			Actor_Set_Goal_Number(kActorLucy, kGoalLucyReturnToHF03);
 			return; //true;
 		}
-		AI_Countdown_Timer_Reset(kActorLucy, 0);
-		AI_Countdown_Timer_Start(kActorLucy, 0, 30);
+		AI_Countdown_Timer_Reset(kActorLucy, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorLucy, kActorTimerAIScriptCustomTask0, 30);
 		break;
 
 	case kGoalLucyHF03RunOutPhase1:
diff --git a/engines/bladerunner/script/ai/luther.cpp b/engines/bladerunner/script/ai/luther.cpp
index f30763a..4ad0e56 100644
--- a/engines/bladerunner/script/ai/luther.cpp
+++ b/engines/bladerunner/script/ai/luther.cpp
@@ -72,8 +72,8 @@ bool AIScriptLuther::Update() {
 	if ( Actor_Query_Goal_Number(kActorLuther) == kGoalLutherDyingStarted
 	 && !Game_Flag_Query(kFlagUG15LutherLanceStartedDying)
 	) {
-		AI_Countdown_Timer_Reset(kActorLuther, 2);
-		AI_Countdown_Timer_Start(kActorLuther, 2, 5);
+		AI_Countdown_Timer_Reset(kActorLuther, kActorTimerAIScriptCustomTask2);
+		AI_Countdown_Timer_Start(kActorLuther, kActorTimerAIScriptCustomTask2, 5);
 		Actor_Set_Goal_Number(kActorLuther, kGoalLutherDyingWait);
 		Game_Flag_Set(kFlagUG15LutherLanceStartedDying);
 		return false;
@@ -116,8 +116,8 @@ bool AIScriptLuther::Update() {
 }
 
 void AIScriptLuther::TimerExpired(int timer) {
-	if (timer == 2) {
-		AI_Countdown_Timer_Reset(kActorLuther, 2);
+	if (timer == kActorTimerAIScriptCustomTask2) {
+		AI_Countdown_Timer_Reset(kActorLuther, kActorTimerAIScriptCustomTask2);
 		Actor_Set_Goal_Number(kActorLuther, kGoalLutherDyingCheck);
 		// return true;
 	}
diff --git a/engines/bladerunner/script/ai/maggie.cpp b/engines/bladerunner/script/ai/maggie.cpp
index 3521abb..86a1c5f 100644
--- a/engines/bladerunner/script/ai/maggie.cpp
+++ b/engines/bladerunner/script/ai/maggie.cpp
@@ -94,10 +94,10 @@ bool AIScriptMaggie::Update() {
 }
 
 void AIScriptMaggie::TimerExpired(int timer) {
-	if (timer == 0) {
+	if (timer == kActorTimerAIScriptCustomTask0) {
 		int goal = Actor_Query_Goal_Number(kActorMaggie);
 		if (goal == kGoalMaggieMA02Wait) {
-			AI_Countdown_Timer_Reset(kActorMaggie, 0);
+			AI_Countdown_Timer_Reset(kActorMaggie, kActorTimerAIScriptCustomTask0);
 			if (Random_Query(0, 4)) {
 				AI_Movement_Track_Flush(kActorMaggie);
 				AI_Movement_Track_Append(kActorMaggie, randomWaypointMA02(), 0);
@@ -109,7 +109,7 @@ void AIScriptMaggie::TimerExpired(int timer) {
 		}
 
 		if (goal == kGoalMaggieMA02SitDown) {
-			AI_Countdown_Timer_Reset(kActorMaggie, 0);
+			AI_Countdown_Timer_Reset(kActorMaggie, kActorTimerAIScriptCustomTask0);
 			Actor_Change_Animation_Mode(kActorMaggie, 55);
 			return; //true
 		}
@@ -132,8 +132,8 @@ void AIScriptMaggie::CompletedMovementTrack() {
 
 		if (goal == kGoalMaggieMA02Wait) {
 			Actor_Face_Actor(kActorMaggie, kActorMcCoy, true);
-			AI_Countdown_Timer_Reset(kActorMaggie, 0);
-			AI_Countdown_Timer_Start(kActorMaggie, 0, Random_Query(1, 5));
+			AI_Countdown_Timer_Reset(kActorMaggie, kActorTimerAIScriptCustomTask0);
+			AI_Countdown_Timer_Start(kActorMaggie, kActorTimerAIScriptCustomTask0, Random_Query(1, 5));
 			return; //true
 		}
 
@@ -194,8 +194,8 @@ void AIScriptMaggie::ClickedByPlayer() {
 			Actor_Face_Actor(kActorMaggie, kActorMcCoy, true);
 			Actor_Change_Animation_Mode(kActorMaggie, 56);
 		}
-		AI_Countdown_Timer_Reset(kActorMaggie, 0);
-		AI_Countdown_Timer_Start(kActorMaggie, 0, Random_Query(3, 9));
+		AI_Countdown_Timer_Reset(kActorMaggie, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorMaggie, kActorTimerAIScriptCustomTask0, Random_Query(3, 9));
 		return; // true
 	}
 
@@ -280,7 +280,7 @@ bool AIScriptMaggie::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		return true;
 
 	case kGoalMaggieMA02WalkToMcCoy:
-		AI_Countdown_Timer_Reset(kActorMaggie, 0);
+		AI_Countdown_Timer_Reset(kActorMaggie, kActorTimerAIScriptCustomTask0);
 		AI_Movement_Track_Flush(kActorMaggie);
 		Loop_Actor_Walk_To_Actor(kActorMaggie, kActorMcCoy, 30, false, false);
 		Actor_Face_Actor(kActorMaggie, kActorMcCoy, true);
@@ -289,8 +289,8 @@ bool AIScriptMaggie::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		return true;
 
 	case kGoalMaggieMA02Wait:
-		AI_Countdown_Timer_Reset(kActorMaggie, 0);
-		AI_Countdown_Timer_Start(kActorMaggie, 0, Random_Query(3, 9));
+		AI_Countdown_Timer_Reset(kActorMaggie, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorMaggie, kActorTimerAIScriptCustomTask0, Random_Query(3, 9));
 		return true;
 
 	case 9:
@@ -310,8 +310,8 @@ bool AIScriptMaggie::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		Actor_Change_Animation_Mode(kActorMaggie, 54);
 		_animationState = kMaggieStateLayingIdle;
 		_animationFrame = 0;
-		AI_Countdown_Timer_Reset(kActorMaggie, 0);
-		AI_Countdown_Timer_Start(kActorMaggie, 0, Random_Query(2, 9));
+		AI_Countdown_Timer_Reset(kActorMaggie, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorMaggie, kActorTimerAIScriptCustomTask0, Random_Query(2, 9));
 		return true;
 
 	case kGoalMaggieMA02Sleep:
diff --git a/engines/bladerunner/script/ai/moraji.cpp b/engines/bladerunner/script/ai/moraji.cpp
index e7ae669..732905e 100644
--- a/engines/bladerunner/script/ai/moraji.cpp
+++ b/engines/bladerunner/script/ai/moraji.cpp
@@ -46,8 +46,8 @@ bool AIScriptMoraji::Update() {
 	 &&  Player_Query_Current_Scene() == kSceneDR05
 	 && !Game_Flag_Query(kFlagDR05BombActivated)
 	) {
-		AI_Countdown_Timer_Reset(kActorMoraji, 2);
-		AI_Countdown_Timer_Start(kActorMoraji, 2, 30);
+		AI_Countdown_Timer_Reset(kActorMoraji, kActorTimerAIScriptCustomTask2);
+		AI_Countdown_Timer_Start(kActorMoraji, kActorTimerAIScriptCustomTask2, 30);
 		Game_Flag_Set(kFlagDR05BombActivated);
 		return true;
 	}
@@ -63,8 +63,8 @@ bool AIScriptMoraji::Update() {
 }
 
 void AIScriptMoraji::TimerExpired(int timer) {
-	if (timer == 2) {
-		AI_Countdown_Timer_Reset(kActorMoraji, 2);
+	if (timer == kActorTimerAIScriptCustomTask2) {
+		AI_Countdown_Timer_Reset(kActorMoraji, kActorTimerAIScriptCustomTask2);
 
 		if (Actor_Query_Goal_Number(kActorMoraji) != kGoalMorajiJump
 		 && Actor_Query_Goal_Number(kActorMoraji) != kGoalMorajiLayDown
@@ -80,7 +80,7 @@ void AIScriptMoraji::TimerExpired(int timer) {
 
 void AIScriptMoraji::CompletedMovementTrack() {
 	if (Actor_Query_Goal_Number(kActorMoraji) == kGoalMorajiRunOut) {
-		AI_Countdown_Timer_Reset(kActorMoraji, 2);
+		AI_Countdown_Timer_Reset(kActorMoraji, kActorTimerAIScriptCustomTask2);
 		Game_Flag_Set(kFlagDR05BombWillExplode);
 		_animationState = 3;
 
@@ -476,7 +476,7 @@ void AIScriptMoraji::SetAnimationState(int animationState, int animationFrame, i
 
 bool AIScriptMoraji::ReachedMovementTrackWaypoint(int waypointId) {
 	if (waypointId == 96)
-		AI_Countdown_Timer_Reset(kActorMoraji, 2);
+		AI_Countdown_Timer_Reset(kActorMoraji, kActorTimerAIScriptCustomTask2);
 
 	return true;
 }
diff --git a/engines/bladerunner/script/ai/officer_grayford.cpp b/engines/bladerunner/script/ai/officer_grayford.cpp
index 66f05e5..15f7044 100644
--- a/engines/bladerunner/script/ai/officer_grayford.cpp
+++ b/engines/bladerunner/script/ai/officer_grayford.cpp
@@ -202,8 +202,8 @@ bool AIScriptOfficerGrayford::Update() {
 }
 
 void AIScriptOfficerGrayford::TimerExpired(int timer) {
-	if (timer == 2) {
-		AI_Countdown_Timer_Reset(kActorOfficerGrayford, 2);
+	if (timer == kActorTimerAIScriptCustomTask2) {
+		AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
 		if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 104) {
 			Actor_Set_Goal_Number(kActorOfficerGrayford, 105);
 		} else if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 105) {
@@ -255,8 +255,8 @@ void AIScriptOfficerGrayford::CompletedMovementTrack() {
 		if (Random_Query(0, 2)) {
 			Actor_Change_Animation_Mode(kActorOfficerGrayford, 43);
 		} else {
-			AI_Countdown_Timer_Reset(kActorOfficerGrayford, 2);
-			AI_Countdown_Timer_Start(kActorOfficerGrayford, 2, Random_Query(6, 12));
+			AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
+			AI_Countdown_Timer_Start(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2, Random_Query(6, 12));
 		}
 		Actor_Face_Waypoint(kActorOfficerGrayford, 97, true);
 		// return false;
@@ -365,7 +365,7 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
 		Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
 		Actor_Says(kActorMcCoy, 1005, kAnimationModeTalk);
 		AI_Movement_Track_Flush(kActorOfficerGrayford);
-		AI_Countdown_Timer_Reset(kActorOfficerGrayford, 2);
+		AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
 		if (_animationState == 35 || _animationState == 34) {
 			_animationState = 37;
 			_animationFrame = 0;
@@ -380,7 +380,7 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
 		Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
 		Actor_Says(kActorMcCoy, 1005, kAnimationModeTalk);
 		AI_Movement_Track_Flush(kActorOfficerGrayford);
-		AI_Countdown_Timer_Reset(kActorOfficerGrayford, 2);
+		AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
 		if (_animationState == 35 || _animationState == 34) {
 			_animationState = 37;
 			_animationFrame = 0;
@@ -548,14 +548,14 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
 		return true;
 
 	case 104:
-		AI_Countdown_Timer_Reset(kActorOfficerGrayford, 2);
+		AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
 		AI_Movement_Track_Flush(kActorOfficerGrayford);
 		AI_Movement_Track_Append(kActorOfficerGrayford, 112, 0);
 		AI_Movement_Track_Repeat(kActorOfficerGrayford);
 		return true;
 
 	case 105:
-		AI_Countdown_Timer_Reset(kActorOfficerGrayford, 2);
+		AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
 		AI_Movement_Track_Flush(kActorOfficerGrayford);
 		AI_Movement_Track_Append(kActorOfficerGrayford, 113, 0);
 		AI_Movement_Track_Repeat(kActorOfficerGrayford);
@@ -565,7 +565,7 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
 		Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
 		Actor_Says(kActorMcCoy, 1000, 14);
 		AI_Movement_Track_Flush(kActorOfficerGrayford);
-		AI_Countdown_Timer_Reset(kActorOfficerGrayford, 2);
+		AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
 
 		if (_animationState == 35
 		 || _animationState == 34
diff --git a/engines/bladerunner/script/ai/officer_leary.cpp b/engines/bladerunner/script/ai/officer_leary.cpp
index c4ddef7..a4ece9f 100644
--- a/engines/bladerunner/script/ai/officer_leary.cpp
+++ b/engines/bladerunner/script/ai/officer_leary.cpp
@@ -198,18 +198,28 @@ bool AIScriptOfficerLeary::Update() {
 }
 
 void AIScriptOfficerLeary::TimerExpired(int timer) {
-	if (timer == 1) {
-		AI_Countdown_Timer_Reset(kActorOfficerLeary, 1);
+	if (timer == kActorTimerAIScriptCustomTask1) {
+		AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask1);
 		if (Actor_Query_In_Set(kActorMcCoy, kSetHF05)) {
 			Actor_Set_Goal_Number(kActorOfficerLeary, 430);
 			Actor_Set_Goal_Number(kActorOfficerGrayford, 430);
 		} else {
 			Game_Flag_Set(kFlagHF05PoliceAttacked);
 		}
-	} else if (timer == 2) {
-		AI_Countdown_Timer_Reset(kActorOfficerLeary, 2);
+	} else if (timer == kActorTimerAIScriptCustomTask2) {
+		AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask2);
 		Game_Flag_Reset(kFlagOfficerLearyTakingNotes);
 	}
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+	else if (timer == kActorTimerAIScriptCustomTask0) {
+		AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask0);
+		if (Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01ResumeWalkToCrowd) {
+			Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyRC01WalkToCrowd);
+		}
+	}
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
 }
 
 void AIScriptOfficerLeary::CompletedMovementTrack() {
@@ -340,6 +350,13 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
 		AI_Movement_Track_Append(kActorOfficerLeary, 35, 0);
 		AI_Movement_Track_Repeat(kActorOfficerLeary);
 		return true;
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+	case kGoalOfficerLearyRC01ResumeWalkToCrowd:
+		AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask0);    // usable for custom stuff are timers 0-2
+		AI_Countdown_Timer_Start(kActorOfficerLeary, kActorTimerAIScriptCustomTask0, 4); // wait a few seconds before starting taking notes again
+		return true;
+#endif // BLADERUNNER_ORIGINAL_BUGS
 	case 99:
 		AI_Movement_Track_Flush(kActorOfficerLeary);
 		return false;
@@ -521,13 +538,13 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
 		Actor_Set_Goal_Number(kActorOfficerLeary, 410);
 		return true;
 	case 420:
-		AI_Countdown_Timer_Reset(kActorOfficerLeary, 1);
-		AI_Countdown_Timer_Start(kActorOfficerLeary, 1, 120);
+		AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask1);
+		AI_Countdown_Timer_Start(kActorOfficerLeary, kActorTimerAIScriptCustomTask1, 120);
 		Actor_Set_Goal_Number(kActorOfficerLeary, 410);
 		return true;
 	case 425:
-		AI_Countdown_Timer_Reset(kActorOfficerLeary, 1);
-		AI_Countdown_Timer_Start(kActorOfficerLeary, 1, 60);
+		AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask1);
+		AI_Countdown_Timer_Start(kActorOfficerLeary, kActorTimerAIScriptCustomTask1, 60);
 		Actor_Set_Goal_Number(kActorOfficerLeary, 410);
 		return true;
 	case 430:
@@ -1226,8 +1243,8 @@ void AIScriptOfficerLeary::SetAnimationState(int animationState, int animationFr
 bool AIScriptOfficerLeary::ReachedMovementTrackWaypoint(int waypointId) {
 	if (waypointId == 57 || waypointId == 58) {
 		Game_Flag_Set(kFlagOfficerLearyTakingNotes);
-		AI_Countdown_Timer_Reset(kActorOfficerLeary, 2);
-		AI_Countdown_Timer_Start(kActorOfficerLeary, 2, 6);
+		AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask2);
+		AI_Countdown_Timer_Start(kActorOfficerLeary, kActorTimerAIScriptCustomTask2, 6);
 	}
 	return true;
 }
diff --git a/engines/bladerunner/script/ai/sadik.cpp b/engines/bladerunner/script/ai/sadik.cpp
index d931ac7..85c1e58 100644
--- a/engines/bladerunner/script/ai/sadik.cpp
+++ b/engines/bladerunner/script/ai/sadik.cpp
@@ -87,8 +87,8 @@ bool AIScriptSadik::Update() {
 }
 
 void AIScriptSadik::TimerExpired(int timer) {
-	if (timer == 0) {
-		AI_Countdown_Timer_Reset(kActorSadik, 0);
+	if (timer == kActorTimerAIScriptCustomTask0) {
+		AI_Countdown_Timer_Reset(kActorSadik, kActorTimerAIScriptCustomTask0);
 
 		// goals 303, 304 and 305 are never set,  cut out part of game?
 		switch (Actor_Query_Goal_Number(kActorSadik)) {
@@ -340,13 +340,13 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	// goals 303, 304 and 305 are never set,  cut out part of game?
 	case 303:
-		AI_Countdown_Timer_Reset(kActorSadik, 0);
-		AI_Countdown_Timer_Start(kActorSadik, 0, 5);
+		AI_Countdown_Timer_Reset(kActorSadik, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorSadik, kActorTimerAIScriptCustomTask0, 5);
 		return true;
 
 	case 304:
 		Actor_Set_Targetable(kActorSadik, false);
-		AI_Countdown_Timer_Reset(kActorSadik, 0);
+		AI_Countdown_Timer_Reset(kActorSadik, kActorTimerAIScriptCustomTask0);
 		return true;
 
 	case 305:
@@ -356,7 +356,7 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case kGoalSadikUG18PrepareShootMcCoy:
 		Sound_Play(kSfxLGCAL1, 100, 0, 0, 50);
-		AI_Countdown_Timer_Start(kActorSadik, 0, 2);
+		AI_Countdown_Timer_Start(kActorSadik, kActorTimerAIScriptCustomTask0, 2);
 		return true;
 
 	case kGoalSadikUG18ShootMcCoy:
@@ -370,7 +370,7 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		return true;
 
 	case 309:
-		AI_Countdown_Timer_Reset(kActorSadik, 0);
+		AI_Countdown_Timer_Reset(kActorSadik, kActorTimerAIScriptCustomTask0);
 		return true;
 
 	case 400:
diff --git a/engines/bladerunner/script/ai/steele.cpp b/engines/bladerunner/script/ai/steele.cpp
index f44efeb..7569157 100644
--- a/engines/bladerunner/script/ai/steele.cpp
+++ b/engines/bladerunner/script/ai/steele.cpp
@@ -192,7 +192,7 @@ bool AIScriptSteele::Update() {
 }
 
 void AIScriptSteele::TimerExpired(int timer) {
-	if (timer == 0
+	if (timer == kActorTimerAIScriptCustomTask0
 	 && Actor_Query_Goal_Number(kActorSteele) == kGoalSteeleNR11StartWaiting
 	) {
 		if (Player_Query_Current_Scene() == kSceneNR11) {
@@ -203,10 +203,10 @@ void AIScriptSteele::TimerExpired(int timer) {
 		return; // true;
 	}
 
-	if (timer == 1) {
+	if (timer == kActorTimerAIScriptCustomTask1) {
 		int goal = Actor_Query_Goal_Number(kActorSteele);
 
-		AI_Countdown_Timer_Reset(kActorSteele, 1);
+		AI_Countdown_Timer_Reset(kActorSteele, kActorTimerAIScriptCustomTask1);
 
 		if (goal == kGoalSteeleKP03Exploded) {
 			Actor_Set_Goal_Number(kActorSteele, kGoalSteeleKP03Dying);
@@ -852,19 +852,19 @@ bool AIScriptSteele::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		return true;
 
 	case kGoalSteeleNR11StartWaiting:
-		AI_Countdown_Timer_Reset(kActorSteele, 0);
-		AI_Countdown_Timer_Start(kActorSteele, 0, 15);
+		AI_Countdown_Timer_Reset(kActorSteele, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorSteele, kActorTimerAIScriptCustomTask0, 15);
 		return true;
 
 	case kGoalSteeleNR11StopWaiting:
-		AI_Countdown_Timer_Reset(kActorSteele, 0);
+		AI_Countdown_Timer_Reset(kActorSteele, kActorTimerAIScriptCustomTask0);
 		return true;
 
 	case kGoalSteeleNR11Enter:
 		if (comp_distance(kActorMcCoy, -4.0, 0.33f, 0.0f, 100.0f, 0.33f, -4.0f) < 48.0f) {
 			Loop_Actor_Walk_To_XYZ(kActorMcCoy, 32.0f, 0.33f, 17.0f, 0, false, false, 0);
 		}
-		AI_Countdown_Timer_Reset(kActorSteele, 0);
+		AI_Countdown_Timer_Reset(kActorSteele, kActorTimerAIScriptCustomTask0);
 		Player_Loses_Control();
 		if (Actor_Query_Goal_Number(kActorDektora) == kGoalSteeleNR01ConfrontGordo) {
 			Async_Actor_Walk_To_XYZ(kActorMcCoy, -15.53f, 0.33f, 73.49f, 0, false);
@@ -1356,7 +1356,7 @@ bool AIScriptSteele::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 	case kGoalSteeleKP03Exploded:
 		Actor_Force_Stop_Walking(kActorSteele);
 		Actor_Change_Animation_Mode(kActorSteele, 51);
-		AI_Countdown_Timer_Start(kActorSteele, 1, 2);
+		AI_Countdown_Timer_Start(kActorSteele, kActorTimerAIScriptCustomTask1, 2);
 		return true;
 
 	case kGoalSteeleKP03Dying:
@@ -1376,7 +1376,7 @@ bool AIScriptSteele::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 			Actor_Says(kActorSteele, 460, 3);
 			Actor_Says(kActorSteele, 470, 3);
 		}
-		AI_Countdown_Timer_Start(kActorSteele, 1, 3);
+		AI_Countdown_Timer_Start(kActorSteele, kActorTimerAIScriptCustomTask1, 3);
 		return true;
 
 	case kGoalSteeleKP03ShootMcCoy:
diff --git a/engines/bladerunner/script/ai/transient.cpp b/engines/bladerunner/script/ai/transient.cpp
index 3edbbaa..8fefc8e 100644
--- a/engines/bladerunner/script/ai/transient.cpp
+++ b/engines/bladerunner/script/ai/transient.cpp
@@ -76,17 +76,17 @@ bool AIScriptTransient::Update() {
 	 && !Game_Flag_Query(kFlagCT04HomelessTrashFinish)
 	) {
 		Game_Flag_Set(kFlagCT04HomelessTrashFinish);
-		AI_Countdown_Timer_Reset(kActorTransient, 1);
-		AI_Countdown_Timer_Start(kActorTransient, 1, 12);
+		AI_Countdown_Timer_Reset(kActorTransient, kActorTimerAIScriptCustomTask1);
+		AI_Countdown_Timer_Start(kActorTransient, kActorTimerAIScriptCustomTask1, 12);
 	}
 
 	return false;
 }
 
 void AIScriptTransient::TimerExpired(int timer) {
-	if (timer == 0) {
+	if (timer == kActorTimerAIScriptCustomTask0) {
 		if (Actor_Query_Goal_Number(kActorTransient) == 395 && Actor_Query_Which_Set_In(kActorMcCoy) == kSetUG13) {
-			AI_Countdown_Timer_Start(kActorTransient, 0, Random_Query(20, 10));
+			AI_Countdown_Timer_Start(kActorTransient, kActorTimerAIScriptCustomTask0, Random_Query(20, 10));
 			switch (Random_Query(1, 3)) {
 			case 1:
 				Sound_Play(kSfxBUMSNOR1, 50, 0, 0, 50);
@@ -100,17 +100,17 @@ void AIScriptTransient::TimerExpired(int timer) {
 			}
 		} else if (Actor_Query_Goal_Number(kActorTransient) != 599) {
 			Actor_Set_Goal_Number(kActorTransient, 391);
-			AI_Countdown_Timer_Reset(kActorTransient, 0);
+			AI_Countdown_Timer_Reset(kActorTransient, kActorTimerAIScriptCustomTask0);
 		}
 	}
-	if (timer == 1) {
+	if (timer == kActorTimerAIScriptCustomTask1) {
 		if (Actor_Query_Goal_Number(kActorTransient) == kGoalTransientDefault) { // stop diggin the trash
 			Actor_Set_Goal_Number(kActorTransient, 10);
 			Actor_Change_Animation_Mode(kActorTransient, kAnimationModeIdle);
 		}
 		Actor_Set_Goal_Number(kActorTransient, 10);
 		Actor_Set_Targetable(kActorTransient, false);
-		AI_Countdown_Timer_Reset(kActorTransient, 1);
+		AI_Countdown_Timer_Reset(kActorTransient, kActorTimerAIScriptCustomTask1);
 	}
 }
 
@@ -210,10 +210,10 @@ bool AIScriptTransient::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		return true;
 	case 395:
 		Actor_Change_Animation_Mode(kActorTransient, 55);
-		AI_Countdown_Timer_Start(kActorTransient, 0, Random_Query(30, 40));
+		AI_Countdown_Timer_Start(kActorTransient, kActorTimerAIScriptCustomTask0, Random_Query(30, 40));
 		return true;
 	case 599:
-		AI_Countdown_Timer_Reset(kActorTransient, 0);
+		AI_Countdown_Timer_Reset(kActorTransient, kActorTimerAIScriptCustomTask0);
 		return true;
 	}
 	return false;
diff --git a/engines/bladerunner/script/ai/tyrell_guard.cpp b/engines/bladerunner/script/ai/tyrell_guard.cpp
index a0b95bb..25992c2 100644
--- a/engines/bladerunner/script/ai/tyrell_guard.cpp
+++ b/engines/bladerunner/script/ai/tyrell_guard.cpp
@@ -46,15 +46,15 @@ bool AIScriptTyrellGuard::Update() {
 
 void AIScriptTyrellGuard::TimerExpired(int timer) {
 	switch (timer) {
-	case 0:
-		AI_Countdown_Timer_Reset(kActorTyrellGuard, 0);
+	case kActorTimerAIScriptCustomTask0:
+		AI_Countdown_Timer_Reset(kActorTyrellGuard, kActorTimerAIScriptCustomTask0);
 		if (Actor_Query_Which_Set_In(kActorMcCoy) == kSetTB02_TB03) {
 			Actor_Set_Goal_Number(kActorTyrellGuard, kGoalTyrellGuardWakeUpAndArrestMcCoy);
 		}
 		break;
 
-	case 1:
-		AI_Countdown_Timer_Reset(kActorTyrellGuard, 1);
+	case kActorTimerAIScriptCustomTask1:
+		AI_Countdown_Timer_Reset(kActorTyrellGuard, kActorTimerAIScriptCustomTask1);
 		Actor_Set_Goal_Number(kActorTyrellGuard, kGoalTyrellGuardArrestMcCoy);
 		break;
 	}
@@ -109,7 +109,7 @@ bool AIScriptTyrellGuard::GoalChanged(int currentGoalNumber, int newGoalNumber)
 	case kGoalTyrellGuardSleeping:
 		if (currentGoalNumber != newGoalNumber) {
 			Actor_Change_Animation_Mode(kActorTyrellGuard, 55);
-			AI_Countdown_Timer_Start(kActorTyrellGuard, 0, 30);
+			AI_Countdown_Timer_Start(kActorTyrellGuard, kActorTimerAIScriptCustomTask0, 30);
 		}
 		return true;
 
@@ -125,9 +125,9 @@ bool AIScriptTyrellGuard::GoalChanged(int currentGoalNumber, int newGoalNumber)
 		return true;
 
 	case kGoalTyrellGuardWakeUp:
-		AI_Countdown_Timer_Reset(kActorTyrellGuard, 0);
+		AI_Countdown_Timer_Reset(kActorTyrellGuard, kActorTimerAIScriptCustomTask0);
 		Actor_Says(kActorTyrellGuard, 310, 14);
-		AI_Countdown_Timer_Start(kActorTyrellGuard, 1, 20);
+		AI_Countdown_Timer_Start(kActorTyrellGuard, kActorTimerAIScriptCustomTask1, 20);
 		return true;
 
 	case kGoalTyrellGuardArrestMcCoy:
@@ -139,7 +139,7 @@ bool AIScriptTyrellGuard::GoalChanged(int currentGoalNumber, int newGoalNumber)
 		return true;
 
 	case kGoalTyrellGuardWait:
-		AI_Countdown_Timer_Reset(kActorTyrellGuard, 1);
+		AI_Countdown_Timer_Reset(kActorTyrellGuard, kActorTimerAIScriptCustomTask1);
 		return true;
 	}
 	return false;
diff --git a/engines/bladerunner/script/ai/zuben.cpp b/engines/bladerunner/script/ai/zuben.cpp
index aad4bfd..a1cc7c0 100644
--- a/engines/bladerunner/script/ai/zuben.cpp
+++ b/engines/bladerunner/script/ai/zuben.cpp
@@ -58,8 +58,8 @@ bool AIScriptZuben::Update() {
 	 &&  Player_Query_Current_Scene() == kSceneCT01
 	 && !Game_Flag_Query(kFlagCT01ZubenMcCoyCheck)
 	) {
-		AI_Countdown_Timer_Reset(kActorZuben, 2);
-		AI_Countdown_Timer_Start(kActorZuben, 2, 30);
+		AI_Countdown_Timer_Reset(kActorZuben, kActorTimerAIScriptCustomTask2);
+		AI_Countdown_Timer_Start(kActorZuben, kActorTimerAIScriptCustomTask2, 30);
 		Game_Flag_Set(kFlagCT01ZubenMcCoyCheck);
 		return true;
 	}
@@ -99,7 +99,7 @@ bool AIScriptZuben::Update() {
 	if (Actor_Query_Goal_Number(kActorZuben) == kGoalZubenCT06AttackMcCoy
 	 && Player_Query_Current_Scene() == kSceneCT07
 	) {
-		AI_Countdown_Timer_Reset(kActorZuben, 0);
+		AI_Countdown_Timer_Reset(kActorZuben, kActorTimerAIScriptCustomTask0);
 		Game_Flag_Set(kFlagCT05WarehouseOpen);
 		Actor_Set_Targetable(kActorZuben, true);
 		if (Actor_Query_Goal_Number(kActorGordo) == kGoalGordoDefault) {
@@ -118,7 +118,7 @@ bool AIScriptZuben::Update() {
 }
 
 void AIScriptZuben::TimerExpired(int timer) {
-	if (timer == 2) { // Check on McCoy every 30s
+	if (timer == kActorTimerAIScriptCustomTask2) { // Check on McCoy every 30s
 		if (Actor_Query_Goal_Number(kActorZuben) == kGoalZubenDefault
 		 && Player_Query_Current_Scene() == kSceneCT01
 		 && Random_Query(1, 3) < 3
@@ -127,19 +127,19 @@ void AIScriptZuben::TimerExpired(int timer) {
 		}
 		Game_Flag_Reset(kFlagCT01ZubenMcCoyCheck);
 		// return true;
-	} else if (timer == 1) {
+	} else if (timer == kActorTimerAIScriptCustomTask1) {
 		if (Actor_Query_Goal_Number(kActorZuben) == kGoalZubenCT02RunToFreeSlotG) { // Zuben fleeing, after 10s
 			Music_Stop(10);
 			Actor_Set_Goal_Number(kActorZuben, kGoalZubenCT06HideAtFreeSlotA);
-			AI_Countdown_Timer_Reset(kActorZuben, 1);
+			AI_Countdown_Timer_Reset(kActorZuben, kActorTimerAIScriptCustomTask1);
 			// return true;
 		}
-	} else if (timer == 0) { // Zuben fleeing, after 70s
+	} else if (timer == kActorTimerAIScriptCustomTask0) { // Zuben fleeing, after 70s
 		if (Player_Query_Current_Set() != kSetCT01_CT12) {
 			Music_Stop(2);
 		}
 		Actor_Set_Goal_Number(kActorZuben, kGoalZubenFled); // Let Zuben flee completly, he will catch McCoy on MA01
-		AI_Countdown_Timer_Reset(kActorZuben, 0);
+		AI_Countdown_Timer_Reset(kActorZuben, kActorTimerAIScriptCustomTask0);
 		// return true;
 	}
 	// return false;
@@ -158,7 +158,7 @@ void AIScriptZuben::CompletedMovementTrack() {
 	} else if (Actor_Query_Goal_Number(kActorZuben) == kGoalZubenCT06HideAtFreeSlotA
 	        && Game_Flag_Query(kFlagCT02McCoyFell)
 	) {
-		AI_Countdown_Timer_Reset(kActorZuben, 0);
+		AI_Countdown_Timer_Reset(kActorZuben, kActorTimerAIScriptCustomTask0);
 		Game_Flag_Reset(kFlagCT02McCoyFell);
 		Game_Flag_Set(kFlagCT02McCoyCombatReady);
 		Game_Flag_Set(kFlagNotUsed721);
@@ -332,10 +332,10 @@ bool AIScriptZuben::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		AI_Movement_Track_Append_Run(kActorZuben, 84, 0);
 		AI_Movement_Track_Append_Run(kActorZuben, 85, 0);
 		AI_Movement_Track_Append(kActorZuben, 39, 0);
-		AI_Countdown_Timer_Reset(kActorZuben, 1);
-		AI_Countdown_Timer_Start(kActorZuben, 1, 10);
-		AI_Countdown_Timer_Reset(kActorZuben, 0);
-		AI_Countdown_Timer_Start(kActorZuben, 0, 70);
+		AI_Countdown_Timer_Reset(kActorZuben, kActorTimerAIScriptCustomTask1);
+		AI_Countdown_Timer_Start(kActorZuben, kActorTimerAIScriptCustomTask1, 10);
+		AI_Countdown_Timer_Reset(kActorZuben, kActorTimerAIScriptCustomTask0);
+		AI_Countdown_Timer_Start(kActorZuben, kActorTimerAIScriptCustomTask0, 70);
 		AI_Movement_Track_Repeat(kActorZuben);
 		return false;
 
@@ -400,7 +400,7 @@ bool AIScriptZuben::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		return false;
 
 	case kGoalZubenCT06JumpDown:
-		AI_Countdown_Timer_Reset(kActorZuben, 0);
+		AI_Countdown_Timer_Reset(kActorZuben, kActorTimerAIScriptCustomTask0);
 		Actor_Put_In_Set(kActorZuben, kSetCT06);
 		Actor_Set_At_XYZ(kActorZuben, 37.14f, -58.23f, 4.0f, 256);
 		_animationFrame = 0;
diff --git a/engines/bladerunner/script/scene/rc01.cpp b/engines/bladerunner/script/scene/rc01.cpp
index e3686a6..a0074eb 100644
--- a/engines/bladerunner/script/scene/rc01.cpp
+++ b/engines/bladerunner/script/scene/rc01.cpp
@@ -250,11 +250,23 @@ bool SceneScriptRC01::ClickedOn3DObject(const char *objectName, bool a2) {
 		if (!Loop_Actor_Walk_To_Scene_Object(kActorMcCoy, "DOOR LEFT", 48, true, false)) {
 			Actor_Face_Object(kActorMcCoy, "DOOR LEFT", true);
 			if (!Actor_Clue_Query(kActorMcCoy, kClueDoorForced2) && Actor_Query_In_Set(kActorOfficerLeary, kSetRC01) && Global_Variable_Query(kVariableChapter) > 0) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+				bool officerLearyWasInterrogatingTheCrowd = Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01CrowdInterrogation
+				                                            || Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01WalkToCrowd
+				                                            || Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01ResumeWalkToCrowd;
+#endif // BLADERUNNER_ORIGINAL_BUGS
 				Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDefault);
 				Actor_Face_Actor(kActorOfficerLeary, kActorMcCoy, true);
 				Actor_Says(kActorOfficerLeary, 0, 12);
 				Actor_Says(kActorMcCoy, 4495, 13);
 				Actor_Clue_Acquire(kActorMcCoy, kClueDoorForced2, true, kActorOfficerLeary);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+				if (officerLearyWasInterrogatingTheCrowd) {
+					Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyRC01ResumeWalkToCrowd);
+				}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			}
 #if BLADERUNNER_ORIGINAL_BUGS
 #else
@@ -292,6 +304,12 @@ bool SceneScriptRC01::ClickedOn3DObject(const char *objectName, bool a2) {
 bool SceneScriptRC01::ClickedOnActor(int actorId) {
 	if (actorId == kActorOfficerLeary && Global_Variable_Query(kVariableChapter) == 1) {
 		if (!Loop_Actor_Walk_To_Actor(kActorMcCoy, kActorOfficerLeary, 36, true, false)) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			bool officerLearyWasInterrogatingTheCrowd = Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01CrowdInterrogation
+			                                            || Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01WalkToCrowd
+			                                            || Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01ResumeWalkToCrowd;
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			Actor_Face_Actor(kActorMcCoy, kActorOfficerLeary, true);
 			Actor_Face_Actor(kActorOfficerLeary, kActorMcCoy, true);
 			if (Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01WalkToCrowd) {
@@ -344,6 +362,12 @@ bool SceneScriptRC01::ClickedOnActor(int actorId) {
 				}
 				Game_Flag_Reset(kFlagRC01McCoyAndOfficerLearyTalking);
 			}
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			if (officerLearyWasInterrogatingTheCrowd) {
+				Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyRC01ResumeWalkToCrowd);
+			}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		}
 		return true;
 	}
@@ -352,6 +376,12 @@ bool SceneScriptRC01::ClickedOnActor(int actorId) {
 
 bool SceneScriptRC01::ClickedOnItem(int itemId, bool a2) {
 	if (itemId == kItemChromeDebris) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		bool officerLearyWasInterrogatingTheCrowd = Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01CrowdInterrogation
+		                                            || Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01WalkToCrowd
+		                                            || Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01ResumeWalkToCrowd;
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDefault);
 		if (!Loop_Actor_Walk_To_Item(kActorMcCoy, kItemChromeDebris, 36, true, false)) {
 			Actor_Face_Item(kActorMcCoy, kItemChromeDebris, true);
@@ -371,6 +401,12 @@ bool SceneScriptRC01::ClickedOnItem(int itemId, bool a2) {
 			I_Sez("JM: He keeps me chuckling non-stop!\n");
 			Loop_Actor_Walk_To_Actor(kActorOfficerLeary, kActorMcCoy, 36, 0, false);
 		}
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		if (officerLearyWasInterrogatingTheCrowd) {
+			Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyRC01ResumeWalkToCrowd);
+		}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		return true;
 	}
 	return false;
@@ -564,6 +600,20 @@ bool SceneScriptRC01::ClickedOnExit(int exitId) {
 
 void SceneScriptRC01::interrogateCrowd() {
 	if (!Game_Flag_Query(kFlagRC01PoliceDone)) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		bool officerLearyWasInterrogatingTheCrowd = Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01CrowdInterrogation
+		                                            || Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01WalkToCrowd
+		                                            || Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyRC01ResumeWalkToCrowd;
+		if (officerLearyWasInterrogatingTheCrowd
+		    || (Actor_Clue_Query(kActorMcCoy, kClueCrowdInterviewA)
+		        && Actor_Clue_Query(kActorMcCoy, kClueCrowdInterviewB) )
+		) {
+			Actor_Says(kActorMcCoy, 8525, 3); // generic "hmph"
+			return;
+		}
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
 		if (!Loop_Actor_Walk_To_Scene_Object(kActorMcCoy, "BARICADE03", 36, true, false)) {
 			Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDefault);
 			Actor_Face_Object(kActorMcCoy, "BARICADE03", true);





More information about the Scummvm-git-logs mailing list