aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script
diff options
context:
space:
mode:
authorThanasis Antoniou2019-02-24 00:13:07 +0200
committerThanasis Antoniou2019-02-24 00:13:07 +0200
commit2301cc04a391a1d042843ea34cd8cbec128ae546 (patch)
tree4d2992f77c7d6eaab5e883c1ecaaf46f77b9b565 /engines/bladerunner/script
parent28551e8124562440d21c23d2787f0205cd88cc6b (diff)
downloadscummvm-rg350-2301cc04a391a1d042843ea34cd8cbec128ae546.tar.gz
scummvm-rg350-2301cc04a391a1d042843ea34cd8cbec128ae546.tar.bz2
scummvm-rg350-2301cc04a391a1d042843ea34cd8cbec128ae546.zip
BLADERUNNER: Fix Moraji death screams and Grayford bug
Death scream in lab changed to his own. Death scream outside lab added. Also, original code had a bug whereby if you clicked through the conversation with Grayford about Moraji's murder, then clicking again on Moraji would restart the same conversation and this could go on infinitely.
Diffstat (limited to 'engines/bladerunner/script')
-rw-r--r--engines/bladerunner/script/ai/moraji.cpp16
-rw-r--r--engines/bladerunner/script/ai/officer_grayford.cpp5
-rw-r--r--engines/bladerunner/script/scene/dr04.cpp14
3 files changed, 30 insertions, 5 deletions
diff --git a/engines/bladerunner/script/ai/moraji.cpp b/engines/bladerunner/script/ai/moraji.cpp
index 6e650e4316..0c07d3c9b0 100644
--- a/engines/bladerunner/script/ai/moraji.cpp
+++ b/engines/bladerunner/script/ai/moraji.cpp
@@ -150,8 +150,13 @@ bool AIScriptMoraji::GoalChanged(int currentGoalNumber, int newGoalNumber) {
return false;
case kGoalMorajiShot:
+ // applies only when shot inside the Dermo Design Lab
Actor_Set_Targetable(kActorMoraji, false);
- Sound_Play(4, 100, 0, 0, 50);
+ #if BLADE_RUNNER_ORIGINAL_BUGS
+ Sound_Play(4, 100, 0, 0, 50); // Original code has female scream here (FEMHURT2)
+ #else
+ Sound_Play_Speech_Line(kActorMoraji, 9020, 50, 0, 50); // fix: Use Moraji's death SPCHSFX, also lower volume
+ #endif // BLADE_RUNNER_ORIGINAL_BUGS
_animationState = 10;
_animationFrame = 0;
Actor_Retired_Here(kActorMoraji, 60, 16, true, -1);
@@ -184,6 +189,15 @@ bool AIScriptMoraji::GoalChanged(int currentGoalNumber, int newGoalNumber) {
return true;
case kGoalMorajiDie:
+ // Added check here to have Moraji death speech SFX
+ // when shot by McCoy outside the Dermo Design Lab
+ if (Game_Flag_Query(kFlagDR04McCoyShotMoraji)) {
+ #if BLADE_RUNNER_ORIGINAL_BUGS
+ // original code uses no voice here
+ #else
+ Sound_Play_Speech_Line(kActorMoraji, 9020, 50, 0, 50); // Use Moraji's death SPCHSFX, also lower volume
+ #endif // BLADE_RUNNER_ORIGINAL_BUGS
+ }
_animationFrame = -1;
_animationState = 13;
return true;
diff --git a/engines/bladerunner/script/ai/officer_grayford.cpp b/engines/bladerunner/script/ai/officer_grayford.cpp
index cdf1b1a524..75c0718581 100644
--- a/engines/bladerunner/script/ai/officer_grayford.cpp
+++ b/engines/bladerunner/script/ai/officer_grayford.cpp
@@ -21,7 +21,6 @@
*/
#include "bladerunner/script/ai_script.h"
-
namespace BladeRunner {
AIScriptOfficerGrayford::AIScriptOfficerGrayford(BladeRunnerEngine *vm) : AIScriptBase(vm) {
@@ -535,7 +534,7 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
Player_Gains_Control();
- if (Actor_Query_Goal_Number(kActorMoraji) == 23) {
+ if (Actor_Query_Goal_Number(kActorMoraji) == kGoalMorajiDead) {
Actor_Face_Actor(kActorOfficerGrayford, kActorMoraji, 1);
} else {
Actor_Face_Waypoint(kActorOfficerGrayford, 97, 1);
@@ -578,7 +577,7 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
Actor_Says(kActorOfficerGrayford, 180, 18);
Actor_Set_Goal_Number(kActorOfficerGrayford, currentGoalNumber);
- break;
+ return true; // possible bugfix: was break;
case 110:
AI_Movement_Track_Flush(kActorOfficerGrayford);
diff --git a/engines/bladerunner/script/scene/dr04.cpp b/engines/bladerunner/script/scene/dr04.cpp
index 3b033d0c9f..b0d801b3ed 100644
--- a/engines/bladerunner/script/scene/dr04.cpp
+++ b/engines/bladerunner/script/scene/dr04.cpp
@@ -120,14 +120,26 @@ bool SceneScriptDR04::ClickedOnActor(int actorId) {
Actor_Says(kActorMoraji, 50, kAnimationModeTalk);
Actor_Clue_Acquire(kActorMcCoy, kClueMorajiInterview, true, kActorMoraji);
Actor_Set_Goal_Number(kActorMoraji, kGoalMorajiDie);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 101);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, 101); // Grayford arrives at scene of Moraji corpse
return true;
}
}
if (Actor_Query_Goal_Number(kActorMoraji) == kGoalMorajiDead) {
if (!Loop_Actor_Walk_To_Actor(kActorMcCoy, kActorMoraji, 36, true, false)) {
+ #if BLADERUNNER_ORIGINAL_BUGS
Actor_Set_Goal_Number(kActorOfficerGrayford, 106);
+ #else
+ // bugfix: original code would result in this conversation repeating multiple times if:
+ // Officer Grayford is at 103 goal (asking "What do you know about this?"...
+ // and the player skips the conversation fast.
+ // So ask about a sheet (goal 106) for Moraji only when Grayford starts patrolling (104, 105 goals)
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford)
+ && ( Actor_Query_Goal_Number(kActorOfficerGrayford) == 104
+ || Actor_Query_Goal_Number(kActorOfficerGrayford) == 105 ) ) {
+ Actor_Set_Goal_Number(kActorOfficerGrayford, 106); // This goal reverts to the previous one after finishing up
+ }
+ #endif // BLADERUNNER_ORIGINAL_BUGS#else [new code]
return true;
}
}