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

antoniou79 antoniou at cti.gr
Wed May 22 23:39:10 CEST 2019


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

Summary:
479a1d12ca BLADERUNNER: debugger anim command sets the dmgflagifmoving too
17da1f2352 BLADERUNNER: Fix for McCoy resuming combat resting pose
d4e5211ebb BLADERUNNER: Fix Dektora overlap issues, restore rattle


Commit: 479a1d12ca09f5378a474e573f7b64de4486677f
    https://github.com/scummvm/scummvm/commit/479a1d12ca09f5378a474e573f7b64de4486677f
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-23T00:30:03+03:00

Commit Message:
BLADERUNNER: debugger anim command sets the dmgflagifmoving too

Mostly to compensate with some awry save games

Changed paths:
    engines/bladerunner/debugger.cpp


diff --git a/engines/bladerunner/debugger.cpp b/engines/bladerunner/debugger.cpp
index e354906..de7c22f 100644
--- a/engines/bladerunner/debugger.cpp
+++ b/engines/bladerunner/debugger.cpp
@@ -142,9 +142,9 @@ Debugger::~Debugger() {
 }
 
 bool Debugger::cmdAnimation(int argc, const char **argv) {
-	if (argc != 2 && argc != 3) {
+	if (argc != 2 && argc != 4) {
 		debugPrintf("Get or set animation mode of the actor.\n");
-		debugPrintf("Usage: %s <actorId> [<animationMode>]\n", argv[0]);
+		debugPrintf("Usage: %s <actorId> [<animationMode> <showDamageAnimationWhenMoving>]\n", argv[0]);
 		return true;
 	}
 
@@ -160,14 +160,16 @@ bool Debugger::cmdAnimation(int argc, const char **argv) {
 		return true;
 	}
 
-	if (argc == 3) {
+	if (argc == 4) {
 		int animationMode = atoi(argv[2]);
-		debugPrintf("actorAnimationMode(%i) = %i\n", actorId, animationMode);
+		int showDmgWhenMoving = atoi(argv[3]);
+		actor->setFlagDamageAnimIfMoving(showDmgWhenMoving!=0);
 		actor->changeAnimationMode(animationMode, true);
+		debugPrintf("actorAnimationMode(%i) = %i, showDamageWhenMoving = %i\n", actorId, animationMode, actor->getFlagDamageAnimIfMoving());
 		return false;
 	}
 
-	debugPrintf("actorAnimationMode(%i) = %i\n", actorId, actor->getAnimationMode());
+	debugPrintf("actorAnimationMode(%i) = %i, showDamageWhenMoving = %i, inCombat = %i\n", actorId, actor->getAnimationMode(), actor->getFlagDamageAnimIfMoving(), actor->inCombat());
 	return true;
 }
 
@@ -1791,7 +1793,7 @@ bool Debugger::cmdList(int argc, const char **argv) {
 
 					if (sceneObject->type == kSceneObjectTypeActor) {
 						Actor *actor = _vm->_actors[sceneObject->id - kSceneObjectOffsetActors];
-						debugPrintf("%d: %s (Clk: %s, Trg: %s, Prs: %s, Obs: %s, Mvg: %s)\n    Goal: %d, Set: %d, Anim mode: %d id:%d\n    Pos(%02.2f,%02.2f,%02.2f)\n",
+						debugPrintf("%d: %s (Clk: %s, Trg: %s, Prs: %s, Obs: %s, Mvg: %s)\n    Goal: %d, Set: %d, Anim mode: %d id:%d showDmg: %s inCombat: %s\n    Pos(%02.2f,%02.2f,%02.2f)\n",
 									 sceneObject->id - kSceneObjectOffsetActors,
 									 _vm->_textActorNames->getText(sceneObject->id - kSceneObjectOffsetActors),
 									 sceneObject->isClickable? "T" : "F",
@@ -1803,6 +1805,8 @@ bool Debugger::cmdList(int argc, const char **argv) {
 									 actor->getSetId(),
 									 actor->getAnimationMode(),
 									 actor->getAnimationId(),
+									 actor->getFlagDamageAnimIfMoving()? "T" : "F",
+									 actor->inCombat()? "T" : "F",
 									 actor->getPosition().x,
 									 actor->getPosition().y,
 									 actor->getPosition().z);
@@ -1842,7 +1846,7 @@ bool Debugger::cmdList(int argc, const char **argv) {
 						break;
 					}
 
-					debugPrintf("%d: %s (Mvg: %s, Walk:%s, Run:%s, Ret:%s, Trg: %s, Cmb: %s, Rep: %s)\n    Hp: %d, Fac: %d, Friend: %d\n    Goal: %d, Set: %d, Anim mode: %d id:%d\n    Pos(%02.2f,%02.2f,%02.2f), Walkbx:%d\n",
+					debugPrintf("%d: %s (Mvg: %s, Walk:%s, Run:%s, Ret:%s, Trg: %s, Rep: %s)\n    Hp: %d, Fac: %d, Friend: %d\n    Goal: %d, Set: %d, Anim mode: %d id:%d showDmg: %s inCombat: %s\n    Pos(%02.2f,%02.2f,%02.2f), Walkbx:%d\n",
 						actorId,
 						_vm->_textActorNames->getText(actorId),
 						actor->isMoving()?  "T" : "F",
@@ -1850,7 +1854,6 @@ bool Debugger::cmdList(int argc, const char **argv) {
 						actor->isRunning()? "T" : "F",
 						actor->isRetired()? "T" : "F",
 						actor->isTarget()?  "T" : "F",
-						actor->inCombat()?  "T" : "F",
 						isReplicant?        "T" : "F",
 						actor->getCurrentHP(),
 						actor->getFacing(),
@@ -1859,6 +1862,8 @@ bool Debugger::cmdList(int argc, const char **argv) {
 						actor->getSetId(),
 						actor->getAnimationMode(),
 						actor->getAnimationId(),
+						actor->getFlagDamageAnimIfMoving()? "T" : "F",
+						actor->inCombat()? "T" : "F",
 						actor->getPosition().x,
 						actor->getPosition().y,
 						actor->getPosition().z,


Commit: 17da1f23525f671bc51ff6991fb7c731c3b70c7a
    https://github.com/scummvm/scummvm/commit/17da1f23525f671bc51ff6991fb7c731c3b70c7a
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-23T00:30:03+03:00

Commit Message:
BLADERUNNER: Fix for McCoy resuming combat resting pose

In the original McCoy becomes "frozen" in a single targeting frame if shot at an enemy

Changed paths:
    engines/bladerunner/mouse.cpp
    engines/bladerunner/script/ai/mccoy.cpp


diff --git a/engines/bladerunner/mouse.cpp b/engines/bladerunner/mouse.cpp
index 6a6f94f..fcaafe0 100644
--- a/engines/bladerunner/mouse.cpp
+++ b/engines/bladerunner/mouse.cpp
@@ -387,7 +387,7 @@ void Mouse::tick(int x, int y) {
 	int actorId = Actor::findTargetUnderMouse(_vm, x, y);
 	int itemId = _vm->_items->findTargetUnderMouse(x, y);
 
-	bool isObject = isTarget && sceneObjectId >= kSceneObjectOffsetObjects && sceneObjectId <= 293;
+	bool isObject = isTarget && sceneObjectId >= kSceneObjectOffsetObjects && sceneObjectId <= (95 + kSceneObjectOffsetObjects);
 
 	if (!_vm->_playerActor->isMoving()) {
 		if (actorId >= 0) {
@@ -412,7 +412,7 @@ void Mouse::tick(int x, int y) {
 			break;
 		}
 
-		if (!_vm->_playerActor->isMoving() && animationMode != kAnimationModeCombatAim && animationMode != 22 && animationMode != 49) {
+		if (!_vm->_playerActor->isMoving() && animationMode != kAnimationModeCombatAim && animationMode != kAnimationModeCombatHit && animationMode != kAnimationModeCombatDie) {
 			_vm->_playerActor->changeAnimationMode(kAnimationModeCombatAim, false);
 		}
 	} else {
@@ -427,7 +427,7 @@ void Mouse::tick(int x, int y) {
 			cursorId = 10;
 			break;
 		}
-		if (!_vm->_playerActor->isMoving() && animationMode != kAnimationModeCombatIdle && animationMode != 22 && animationMode != 49) {
+		if (!_vm->_playerActor->isMoving() && animationMode != kAnimationModeCombatIdle && animationMode != kAnimationModeCombatHit && animationMode != kAnimationModeCombatDie) {
 			_vm->_playerActor->changeAnimationMode(kAnimationModeCombatIdle, false);
 		}
 	}
diff --git a/engines/bladerunner/script/ai/mccoy.cpp b/engines/bladerunner/script/ai/mccoy.cpp
index 1fd2684..070c3f2 100644
--- a/engines/bladerunner/script/ai/mccoy.cpp
+++ b/engines/bladerunner/script/ai/mccoy.cpp
@@ -767,6 +767,8 @@ bool AIScriptMcCoy::UpdateAnimation(int *animation, int *frame) {
 		break;
 
 	case 17:
+		// this is just frame 0 always, McCoy doesn't animated shoot in this animation State
+		// animation state 21 is for the full shooting animation
 		*animation = kModelAnimationMcCoyWithGunShooting;
 		_animationFrame = 0;
 		// weird, but thats in game code
@@ -809,6 +811,12 @@ bool AIScriptMcCoy::UpdateAnimation(int *animation, int *frame) {
 			_animationState = 17;
 			_animationFrame = 0;
 			*animation = kModelAnimationMcCoyWithGunShooting;
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			// Resume combat idle position even when shot at a target -- if it's no longer a target (dead or moved)
+			ChangeAnimationMode(kAnimationModeCombatIdle);
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
 			if (Actor_Query_Goal_Number(kActorMcCoy) == kGoalMcCoyNR11Shoot) {
 				_animationFrame = 0;
 				_animationState = 21;


Commit: d4e5211ebbb6690356d6cf9bc56e866b5094fd83
    https://github.com/scummvm/scummvm/commit/d4e5211ebbb6690356d6cf9bc56e866b5094fd83
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-23T00:30:03+03:00

Commit Message:
BLADERUNNER: Fix Dektora overlap issues, restore rattle

Changed paths:
    engines/bladerunner/game_constants.h
    engines/bladerunner/script/ai/dektora.cpp
    engines/bladerunner/script/scene/nr08.cpp
    engines/bladerunner/script/scene/nr11.cpp


diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 71d21d8..490c04d 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -1686,6 +1686,7 @@ enum GameItems {
 };
 
 enum GameModelAnimations {
+	// McCoy animations
 	kModelAnimationMcCoyWithGunIdle              =   0,
 	kModelAnimationMcCoyWithGunGotHitRight       =   1,
 	kModelAnimationMcCoyWithGunGotHitLeft        =   2,
@@ -1740,6 +1741,45 @@ enum GameModelAnimations {
 	kModelAnimationMcCoyCrouchedIdle             =  51,
 	kModelAnimationMcCoyCrouchedGetsUp           =  52,
 	kModelAnimationMcCoyDrinkingBooze            =  53,
+	// Dektora animations
+	kModelAnimationDektoraCombatIdle             = 134,
+	kModelAnimationDektoraCombatWalkingA         = 135,
+	kModelAnimationDektoraCombatWalkingB         = 136,
+	kModelAnimationDektoraCombatGotHitRight      = 137,
+	kModelAnimationDektoraCombatGotHitLeft       = 138,
+	kModelAnimationDektoraCombatBegin            = 139, // assumes fighting pose
+	kModelAnimationDektoraCombatEnd              = 140, // exits combat mode
+	kModelAnimationDektoraCombatLegAttack        = 141,
+	kModelAnimationDektoraCombatPunchAttack      = 142,
+	kModelAnimationDektoraWalking                = 143,
+	kModelAnimationDektoraRunning                = 144, // fast walking
+	kModelAnimationDektoraClimbStairsUp          = 145,
+	kModelAnimationDektoraClimbStairsDown        = 146,
+	kModelAnimationDektoraFrontShoveMove         = 147,
+	kModelAnimationDektoraBackDodgeMove          = 148,
+	kModelAnimationDektoraFallsDead              = 149,
+	kModelAnimationDektoraSittingIdle            = 150,
+	kModelAnimationDektoraSittingShootingGun     = 151, // unused?
+	kModelAnimationDektoraSittingSubtleTalking   = 152,
+	kModelAnimationDektoraSittingIntenseTalking  = 153,
+	kModelAnimationDektoraSittingPullingGunOut   = 154,
+	kModelAnimationDektoraSittingHoldingGun      = 155,
+	kModelAnimationDektoraStandingIdle           = 156, // slow nod left right, could be talking too
+	kModelAnimationDektoraStandingTalkGestureA   = 157, // dismissive / questioning
+	kModelAnimationDektoraStandingNodShort       = 158, // could be talking too
+	kModelAnimationDektoraStandingTalkAgreeing   = 159,
+	kModelAnimationDektoraStandingTalkGestureB   = 160, // mellow
+	kModelAnimationDektoraStandingTalkGestureC   = 161, // move both hands
+	kModelAnimationDektoraStandingTalkGestureD   = 162, // appreciative
+	kModelAnimationDektoraInFlamesA              = 163,
+	kModelAnimationDektoraInFlamesGotHit         = 164, // unused?
+	kModelAnimationDektoraInFlamesStartFalling   = 165,
+	kModelAnimationDektoraInFlamesB              = 166,
+	kModelAnimationDektoraInFlamesEndFalling     = 167,
+	kModelAnimationDektoraDancingA               = 168,
+	kModelAnimationDektoraDancingB               = 169,
+	kModelAnimationDektoraDancingC               = 170,
+	kModelAnimationDektoraDancingFinale          = 171,
 	//
 	kModelAnimationBulletBobsTrackingGun       = 440,
 	kModelAnimationMaleTargetEmptyHandsActive  = 441,
@@ -1752,7 +1792,7 @@ enum GameModelAnimations {
 	kModelAnimationFemaleTargetWithBabyDead    = 448, // 447+1
 	kModelAnimationFemaleTargetWithGunActive   = 449,
 	kModelAnimationFemaleTargetWithGunDead     = 450, // 449+1
-
+	// Rachael Animations
 	kModelAnimationRachaelWalking                  = 822,
 	kModelAnimationRachaelIdle                     = 823,
 	kModelAnimationRachaelIdleOscilate             = 824, // unused
diff --git a/engines/bladerunner/script/ai/dektora.cpp b/engines/bladerunner/script/ai/dektora.cpp
index 7764a97..53678e3 100644
--- a/engines/bladerunner/script/ai/dektora.cpp
+++ b/engines/bladerunner/script/ai/dektora.cpp
@@ -178,9 +178,15 @@ void AIScriptDektora::CompletedMovementTrack() {
 		Actor_Set_Goal_Number(kActorDektora, kGoalDektoraNR11RanAway);
 		break;
 
-	case 272:
+	case kGoalDektoraNR11BurningGoToWindow:
 		AI_Movement_Track_Flush(kActorDektora);
+#if BLADERUNNER_ORIGINAL_BUGS
 		Actor_Face_Heading(kActorDektora, 0, 0);
+#else
+		// better positioning to lessen the bad overlap with the wall
+		// There is still some glitch there but it's not as bad as originally
+		Actor_Set_At_XYZ(kActorDektora, -100.0f, 10.33f, -312.0f, 220);
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		Sound_Play(kSfxDEKGLAS1, 71, 0, 0, 50);
 
 		_animationState = 35;
@@ -259,7 +265,19 @@ bool AIScriptDektora::ShotAtAndHit() {
 	 || Actor_Query_Goal_Number(kActorDektora) == kGoalDektoraNR11BurningGoToWindow
 	) {
 		Actor_Set_Health(kActorDektora, 100, 100);
-
+		if (_vm->_cutContent) {
+		// add hit sounds with small probability
+		switch (Random_Query(1, 10)) {
+			case 1:
+				Sound_Play_Speech_Line(kActorDektora, 9000, 65, 0, 99);
+				break;
+			case 2:
+				Sound_Play_Speech_Line(kActorDektora, 9005, 65, 0, 99);
+				break;
+			default:
+				break;
+			}
+		}
 		if (Actor_Query_Goal_Number(kActorDektora) != kGoalDektoraNR11BurningGoToWindow) {
 			Actor_Set_Goal_Number(kActorDektora, kGoalDektoraNR11BurningGoToWindow);
 		}
@@ -276,7 +294,11 @@ bool AIScriptDektora::ShotAtAndHit() {
 			Delay(2000);
 			Actor_Set_Goal_Number(kActorSteele, kGoalSteeleNR11Enter);
 		} else {
+			// Does this case ever happen?
 			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeDie);
+			if (_vm->_cutContent) {
+				Sound_Play_Speech_Line(kActorDektora, 9020, 60, 0, 99); // add Dektora's death rattle here
+			}
 			Delay(2000);
 			Actor_Set_Goal_Number(kActorMcCoy, kGoalMcCoyArrested);
 		}
@@ -436,7 +458,7 @@ bool AIScriptDektora::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 			Game_Flag_Set(kFlagNR08Faded);
 			Actor_Put_In_Set(kActorDektora, kSetFreeSlotA);
 			Actor_Set_At_Waypoint(kActorDektora, 33, 0);
-			Actor_Change_Animation_Mode(kActorDektora, 0);
+			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeIdle);
 			Actor_Set_Goal_Number(kActorDektora, kGoalDektoraNR07Sit);
 		}
 
@@ -448,8 +470,15 @@ bool AIScriptDektora::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		break;
 
 	case kGoalDektoraNR08ReadyToRun:
+#if BLADERUNNER_ORIGINAL_BUGS
 		Actor_Put_In_Set(kActorDektora, kSetNR05_NR08);
 		Actor_Set_At_XYZ(kActorDektora, -1558.41f, 0.32f, 319.48f, 264);
+#else
+		// better positioning to remove bad overlap with walls
+		AI_Movement_Track_Flush(kActorDektora);
+		Actor_Put_In_Set(kActorDektora, kSetNR05_NR08);
+		Actor_Set_At_XYZ(kActorDektora, -1633.27f, 0.32f, 353.00f, 831);
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		break;
 
 	case kGoalDektoraNR08GoToNR10:
@@ -556,9 +585,9 @@ bool AIScriptDektora::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 	switch (_animationState) {
 	case 0:
-		*animation = 156;
+		*animation = kModelAnimationDektoraStandingIdle;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(156)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingIdle)) {
 			_animationFrame = 0;
 		}
 		break;
@@ -569,154 +598,156 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 		break;
 
 	case 2:
-		*animation = 158;
+		*animation = kModelAnimationDektoraStandingNodShort;
 		if (_animationFrame == 0
 		 && _flag
 		) {
-			*animation = 156;
+			*animation = kModelAnimationDektoraStandingIdle;
 			_animationState = 0;
 		} else {
 			_animationFrame++;
-			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(158)) {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingNodShort)) {
 				_animationFrame = 0;
 			}
 		}
 		break;
 
 	case 3:
-		*animation = 159;
+		*animation = kModelAnimationDektoraStandingTalkAgreeing;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(159)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingTalkAgreeing)) {
 			_animationFrame = 0;
 			_animationState = 2;
-			*animation = 158;
+			*animation = kModelAnimationDektoraStandingNodShort;
 		}
 		break;
 
 	case 4:
-		*animation = 160;
+		*animation = kModelAnimationDektoraStandingTalkGestureB;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(160)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingTalkGestureB)) {
 			_animationFrame = 0;
 			_animationState = 2;
-			*animation = 158;
+			*animation = kModelAnimationDektoraStandingNodShort;
 		}
 		break;
 
 	case 5:
-		*animation = 161;
+		*animation = kModelAnimationDektoraStandingTalkGestureC;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(161)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingTalkGestureC)) {
 			_animationFrame = 0;
 			_animationState = 2;
-			*animation = 158;
+			*animation = kModelAnimationDektoraStandingNodShort;
 		}
 		break;
 
 	case 6:
-		*animation = 161;
+		//  case 6 is identical to case 5
+		*animation = kModelAnimationDektoraStandingTalkGestureC;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(161)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingTalkGestureC)) {
 			_animationFrame = 0;
 			_animationState = 2;
-			*animation = 158;
+			*animation = kModelAnimationDektoraStandingNodShort;
 		}
 		break;
 
 	case 7:
-		*animation = 162;
+		*animation = kModelAnimationDektoraStandingTalkGestureD;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(162)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingTalkGestureD)) {
 			_animationFrame = 0;
 			_animationState = 2;
-			*animation = 158;
+			*animation = kModelAnimationDektoraStandingNodShort;
 		}
 		break;
 
 	case 8:
-		*animation = 162;
+		//  case 8 is identical to case 7
+		*animation = kModelAnimationDektoraStandingTalkGestureD;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(162)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingTalkGestureD)) {
 			_animationFrame = 0;
 			_animationState = 2;
-			*animation = 158;
+			*animation = kModelAnimationDektoraStandingNodShort;
 		}
 		break;
 
 	case 9:
-		*animation = 134;
+		*animation = kModelAnimationDektoraCombatIdle;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(134)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatIdle)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 10:
-		*animation = 139;
+		*animation = kModelAnimationDektoraCombatBegin;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(139)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatBegin)) {
 			_animationFrame = 0;
 			_animationState = 9;
-			*animation = 134;
+			*animation = kModelAnimationDektoraCombatIdle;
 		}
 		break;
 
 	case 11:
-		*animation = 140;
+		*animation = kModelAnimationDektoraCombatEnd;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(140)) {
-			*animation = 156;
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatEnd)) {
+			*animation = kModelAnimationDektoraStandingIdle;
 			_animationFrame = 0;
 			_animationState = 0;
 		}
 		break;
 
 	case 12:
-		*animation = 135;
+		*animation = kModelAnimationDektoraCombatWalkingA;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(135)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatWalkingA)) {
 			_animationFrame = 0;
 			_animationState = 9;
-			*animation = 134;
-			Actor_Change_Animation_Mode(kActorDektora, 4);
+			*animation = kModelAnimationDektoraCombatIdle;
+			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeCombatIdle);
 		}
 		break;
 
 	case 13:
-		*animation = 136;
+		*animation = kModelAnimationDektoraCombatWalkingB;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(136)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatWalkingB)) {
 			_animationFrame = 0;
 			_animationState = 9;
-			*animation = 134;
-			Actor_Change_Animation_Mode(kActorDektora, 4);
+			*animation = kModelAnimationDektoraCombatIdle;
+			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeCombatIdle);
 		}
 		break;
 
 	case 14:
-		*animation = 137;
+		*animation = kModelAnimationDektoraCombatGotHitRight;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(137)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatGotHitRight)) {
 			_animationFrame = 0;
 			_animationState = 9;
-			*animation = 134;
-			Actor_Change_Animation_Mode(kActorDektora, 4);
+			*animation = kModelAnimationDektoraCombatIdle;
+			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeCombatIdle);
 		}
 		break;
 
 	case 15:
-		*animation = 138;
+		*animation = kModelAnimationDektoraCombatGotHitLeft;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(138)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatGotHitLeft)) {
 			_animationFrame = 0;
 			_animationState = 9;
-			*animation = 134;
-			Actor_Change_Animation_Mode(kActorDektora, 4);
+			*animation = kModelAnimationDektoraCombatIdle;
+			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeCombatIdle);
 		}
 		break;
 
 	case 16:
-		*animation = 141;
+		*animation = kModelAnimationDektoraCombatLegAttack;
 		_animationFrame++;
 		if (_animationFrame == 2) {
 			int speech;
@@ -733,16 +764,16 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 			Actor_Combat_AI_Hit_Attempt(kActorDektora);
 		}
 
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(141)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatLegAttack)) {
 			_animationFrame = 0;
 			_animationState = 9;
-			*animation = 134;
+			*animation = kModelAnimationDektoraCombatIdle;
 			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeCombatIdle);
 		}
 		break;
 
 	case 17:
-		*animation = 142;
+		*animation = kModelAnimationDektoraCombatPunchAttack;
 		_animationFrame++;
 		if (_animationFrame == 6
 		 && Actor_Query_Goal_Number(kActorDektora) == kGoalDektoraNR10AttackMcCoy
@@ -765,19 +796,19 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 			Actor_Combat_AI_Hit_Attempt(kActorDektora);
 		}
 
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(142)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraCombatPunchAttack)) {
 			_animationFrame = 0;
 			_animationState = 9;
-			*animation = 134;
+			*animation = kModelAnimationDektoraCombatIdle;
 			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeCombatIdle);
 		}
 		break;
 
 	case 18:
-		*animation = 147;
+		*animation = kModelAnimationDektoraFrontShoveMove;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(147)) {
-			*animation = 156;
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraFrontShoveMove)) {
+			*animation = kModelAnimationDektoraStandingIdle;
 			_animationFrame = 0;
 			_animationState = 0;
 			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeIdle);
@@ -785,10 +816,10 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 		break;
 
 	case 19:
-		*animation = 148;
+		*animation = kModelAnimationDektoraBackDodgeMove;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(148)) {
-			*animation = 156;
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraBackDodgeMove)) {
+			*animation = kModelAnimationDektoraStandingIdle;
 			_animationFrame = 0;
 			_animationState = 0;
 			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeIdle);
@@ -796,141 +827,141 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 		break;
 
 	case 20:
-		*animation = 149;
-		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(149) - 1) {
+		*animation = kModelAnimationDektoraFallsDead;
+		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraFallsDead) - 1) {
 			_animationFrame++;
 		}
 		break;
 
 	case 21:
-		*animation = 143;
+		*animation = kModelAnimationDektoraWalking;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(143)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraWalking)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 22:
-		*animation = 144;
+		*animation = kModelAnimationDektoraRunning;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(144)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraRunning)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 23:
-		*animation = 145;
+		*animation = kModelAnimationDektoraClimbStairsUp;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(145)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraClimbStairsUp)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 24:
-		*animation = 146;
+		*animation = kModelAnimationDektoraClimbStairsDown;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(146)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraClimbStairsDown)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 25:
-		*animation = 150;
+		*animation = kModelAnimationDektoraSittingIdle;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(150)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraSittingIdle)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 26:
-		*animation = 151;
+		*animation = kModelAnimationDektoraSittingShootingGun;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(151)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraSittingShootingGun)) {
 			_animationFrame = 0;
 			_animationState = 31;
-			*animation = 155;
+			*animation = kModelAnimationDektoraSittingHoldingGun;
 		}
 		break;
 
 	case 27:
-		*animation = 152;
+		*animation = kModelAnimationDektoraSittingSubtleTalking;
 		if (!_animationFrame && _flag) {
-			*animation = 150;
+			*animation = kModelAnimationDektoraSittingIdle;
 			_animationState = 25;
 		} else {
 			_animationFrame++;
-			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(152)) {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraSittingSubtleTalking)) {
 				_animationFrame = 0;
 			}
 		}
 		break;
 
 	case 28:
-		*animation = 153;
+		*animation = kModelAnimationDektoraSittingIntenseTalking;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(153)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraSittingIntenseTalking)) {
 			_animationFrame = 0;
 			_animationState = 27;
-			*animation = 152;
+			*animation = kModelAnimationDektoraSittingSubtleTalking;
 		}
 		break;
 
 	case 29:
-		*animation = 154;
+		*animation = kModelAnimationDektoraSittingPullingGunOut;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(154)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraSittingPullingGunOut)) {
 			_animationFrame = 0;
 			_animationState = 31;
-			*animation = 155;
+			*animation = kModelAnimationDektoraSittingHoldingGun;
 		}
 		break;
 
 	case 30:
-		*animation = 154;
+		*animation = kModelAnimationDektoraSittingPullingGunOut;
 		_animationFrame--;
 		if (_animationFrame == 0) {
 			_animationFrame = 0;
 			_animationState = 25;
-			*animation = 150;
+			*animation = kModelAnimationDektoraSittingIdle;
 		}
 		break;
 
 	case 31:
-		*animation = 155;
+		*animation = kModelAnimationDektoraSittingHoldingGun;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(155)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraSittingHoldingGun)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 32:
-		*animation = 163;
+		*animation = kModelAnimationDektoraInFlamesA;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(163)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraInFlamesA)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 33:
-		*animation = 166;
+		*animation = kModelAnimationDektoraInFlamesB;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(166)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraInFlamesB)) {
 			_animationFrame = 0;
 		}
 		break;
 
 	case 34:
-		*animation = 164;
+		*animation = kModelAnimationDektoraInFlamesGotHit;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(164)) {
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraInFlamesGotHit)) {
 			_animationFrame = 0;
 			_animationState = 32;
-			*animation = 163;
+			*animation = kModelAnimationDektoraInFlamesA;
 		}
 		break;
 
 	case 35:
-		*animation = 165;
+		*animation = kModelAnimationDektoraInFlamesStartFalling;
 		_animationFrame++;
 		if (_animationFrame == 2) {
 			Game_Flag_Set(kFlagNR11BreakWindow);
@@ -939,14 +970,14 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) {
 			_animationFrame = 0;
 			_animationState = 36;
-			*animation = 167;
+			*animation = kModelAnimationDektoraInFlamesEndFalling;
 			Actor_Set_Goal_Number(kActorDektora, kGoalDektoraNR11PrepareFallThroughWindow);
 		}
 		break;
 
 	case 36:
-		*animation = 167;
-		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(167) - 1) {
+		*animation = kModelAnimationDektoraInFlamesEndFalling;
+		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraInFlamesEndFalling) - 1) {
 			_animationFrame++;
 		}
 
@@ -956,7 +987,7 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 		break;
 
 	case 37:
-		*animation = 168;
+		*animation = kModelAnimationDektoraDancingA;
 		if (_animationFrame == 1) {
 			switch (Random_Query(0, 2)) {
 			case 0:
@@ -974,15 +1005,15 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 		}
 
 		_animationFrame++;
-		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(168) - 1) {
+		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraDancingA) - 1) {
 			_animationFrame = 0;
 			_animationState = 38;
-			*animation = 169;
+			*animation = kModelAnimationDektoraDancingB;
 		}
 		break;
 
 	case 38:
-		*animation = 169;
+		*animation = kModelAnimationDektoraDancingB;
 		_animationFrame++;
 		if (_animationFrame == 1) {
 			switch (Random_Query(0, 2)) {
@@ -1003,12 +1034,12 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(*animation) - 1) {
 			_animationFrame = 0;
 			_animationState = 39;
-			*animation = 170;
+			*animation = kModelAnimationDektoraDancingC;
 		}
 		break;
 
 	case 39:
-		*animation = 170;
+		*animation = kModelAnimationDektoraDancingC;
 		_animationFrame++;
 		if (_animationFrame == 1) {
 			switch (Random_Query(0, 2)) {
@@ -1029,12 +1060,12 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(*animation) - 1) {
 			_animationFrame = 0;
 			_animationState = 40;
-			*animation = 171;
+			*animation = kModelAnimationDektoraDancingFinale;
 		}
 		break;
 
 	case 40:
-		*animation = 171;
+		*animation = kModelAnimationDektoraDancingFinale;
 		if (_animationFrame == 1) {
 			switch (Random_Query(0, 2)) {
 			case 0:
@@ -1051,16 +1082,16 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 			}
 		}
 
-		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(171) - 1) {
+		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraDancingFinale) - 1) {
 			_animationFrame++;
-			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(171) - 1) {
+			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraDancingFinale) - 1) {
 				Actor_Set_Goal_Number(kActorDektora, kGoalDektoraNR08Leave);
 			}
 		}
 		break;
 
 	case 41:
-		*animation = 157;
+		*animation = kModelAnimationDektoraStandingTalkGestureA;
 		_animationFrame++;
 		if (_animationFrame == 8
 		 && Actor_Query_In_Set(kActorDektora, kSetNR10)
@@ -1068,11 +1099,11 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) {
 			Scene_Loop_Start_Special(kSceneLoopModeOnce, 4, true);
 		}
 
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(157)) {
-			*animation = 156;
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraStandingTalkGestureA)) {
+			*animation = kModelAnimationDektoraStandingIdle;
 			_animationFrame = 0;
 			_animationState = 0;
-			Actor_Change_Animation_Mode(kActorDektora, 0);
+			Actor_Change_Animation_Mode(kActorDektora, kAnimationModeIdle);
 		}
 		break;
 
@@ -1178,7 +1209,7 @@ bool AIScriptDektora::ChangeAnimationMode(int mode) {
 			break;
 		case 31:
 			_animationState = 30;
-			_animationFrame = Slice_Animation_Query_Number_Of_Frames(154) - 1;
+			_animationFrame = Slice_Animation_Query_Number_Of_Frames(kModelAnimationDektoraSittingPullingGunOut) - 1;
 			break;
 		default:
 			_animationState = 10;
@@ -1273,7 +1304,7 @@ bool AIScriptDektora::ChangeAnimationMode(int mode) {
 		}
 		break;
 
-	case 21:
+	case kAnimationModeHit:
 		if (Game_Flag_Query(kFlagNR11DektoraBurning)) {
 			_animationState = 34;
 			_animationFrame = 0;
@@ -1341,6 +1372,12 @@ bool AIScriptDektora::ChangeAnimationMode(int mode) {
 		break;
 
 	case kAnimationModeDie:
+		if (_vm->_cutContent && Global_Variable_Query(kVariableChapter) == 5) {
+			// only play the rattle sound in the Act 5 death (moon bud), but not in chapter 3 death
+			// The rattle also plays in ShotAtAndHit() in Act 3 (if Dektora is shot at the back in NR11,
+			// and she is Human) but that case is currently never triggered.
+			Sound_Play_Speech_Line(kActorDektora, 9020, 60, 0, 99); // add Dektora's death rattle here
+		}
 		_animationState = 20;
 		_animationFrame = 0;
 		break;
@@ -1378,7 +1415,6 @@ bool AIScriptDektora::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 	}
-
 	return true;
 }
 
diff --git a/engines/bladerunner/script/scene/nr08.cpp b/engines/bladerunner/script/scene/nr08.cpp
index bac1e4d..66940e1 100644
--- a/engines/bladerunner/script/scene/nr08.cpp
+++ b/engines/bladerunner/script/scene/nr08.cpp
@@ -206,8 +206,13 @@ void SceneScriptNR08::PlayerWalkedIn() {
 	}
 
 	if (Actor_Query_Goal_Number(kActorDektora) == kGoalDektoraNR08ReadyToRun) {
+#if BLADERUNNER_ORIGINAL_BUGS
 		Actor_Face_Heading(kActorDektora, 790, false);
 		Loop_Actor_Travel_Stairs(kActorDektora, 8, true, kAnimationModeIdle);
+#else
+		Actor_Face_Heading(kActorDektora, 831, false);
+		Loop_Actor_Travel_Stairs(kActorDektora, 7, true, kAnimationModeIdle);
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		Actor_Set_Goal_Number(kActorDektora, kGoalDektoraNR08GoToNR10);
 	}
 
diff --git a/engines/bladerunner/script/scene/nr11.cpp b/engines/bladerunner/script/scene/nr11.cpp
index ab7d899..515fb787 100644
--- a/engines/bladerunner/script/scene/nr11.cpp
+++ b/engines/bladerunner/script/scene/nr11.cpp
@@ -214,10 +214,12 @@ bool SceneScriptNR11::ClickedOn3DObject(const char *objectName, bool combatMode)
 					Game_Flag_Set(kFlagDektoraRanAway);
 				}
 			} else {
+				// TODO why put this here? Could be a bug.
+				// There's a chance that McCoy will say this while "searching" for hidden Dektora
 				if (Random_Query(1, 2) == 1) {
-					Actor_Says(kActorMcCoy, 8575, 14);
+					Actor_Says(kActorMcCoy, 8575, 14); // More useless junk.
 				} else {
-					Actor_Says(kActorMcCoy, 8580, 14);
+					Actor_Says(kActorMcCoy, 8580, 14); // Nothing else there
 				}
 			}
 		}





More information about the Scummvm-git-logs mailing list