[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