aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script/scene
diff options
context:
space:
mode:
authorThanasis Antoniou2019-05-13 03:27:07 +0300
committerThanasis Antoniou2019-05-13 03:29:00 +0300
commit7f6b9750d7c77afa469aac82f75bb46bf75ddf3e (patch)
treef5ff009f7bc43078c4a67a0f60832f3074e3a2f8 /engines/bladerunner/script/scene
parent9207f7270b9be7b72f7b65f5df6957c56c3bdc31 (diff)
downloadscummvm-rg350-7f6b9750d7c77afa469aac82f75bb46bf75ddf3e.tar.gz
scummvm-rg350-7f6b9750d7c77afa469aac82f75bb46bf75ddf3e.tar.bz2
scummvm-rg350-7f6b9750d7c77afa469aac82f75bb46bf75ddf3e.zip
BLADERUNNER: Howie restored content
Howie will now be in Chinatown in Acts 2 and 3, but won't always be in the diner This gives him more probability to discover the homeless body if in dumpster and also enables some extra dialogue
Diffstat (limited to 'engines/bladerunner/script/scene')
-rw-r--r--engines/bladerunner/script/scene/ct01.cpp118
-rw-r--r--engines/bladerunner/script/scene/ct12.cpp11
-rw-r--r--engines/bladerunner/script/scene/ma02.cpp2
-rw-r--r--engines/bladerunner/script/scene/ma04.cpp9
4 files changed, 105 insertions, 35 deletions
diff --git a/engines/bladerunner/script/scene/ct01.cpp b/engines/bladerunner/script/scene/ct01.cpp
index 138fada1a2..3eb06e2160 100644
--- a/engines/bladerunner/script/scene/ct01.cpp
+++ b/engines/bladerunner/script/scene/ct01.cpp
@@ -72,7 +72,7 @@ void SceneScriptCT01::InitializeScene() {
// so the loop will be prevented from playing when he is there.
if ( Global_Variable_Query(kVariableChapter) < 4
&& Actor_Query_Which_Set_In(kActorGordo) != kSetCT01_CT12
- && Random_Query(1, 3) == 1
+ && Random_Query(1, 2) == 1
){
// enhancement: don't always play
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kCT01LoopInshot, false);
@@ -115,6 +115,17 @@ void SceneScriptCT01::InitializeScene() {
Ambient_Sounds_Add_Sound(kSfxTHNDER3, 20, 40, 33, 50, -100, 100, -101, -101, 0, 0);
Ambient_Sounds_Add_Sound(kSfxTHNDER4, 20, 40, 33, 50, -100, 100, -101, -101, 0, 0);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ if (!Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12)
+ && Global_Variable_Query(kVariableChapter) == 1
+ ) {
+ AI_Movement_Track_Flush(kActorHowieLee);
+ AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
if (Game_Flag_Query(kFlagSpinnerAtCT01)) {
Scene_Loop_Set_Default(kCT01LoopMainLoop);
} else {
@@ -146,8 +157,8 @@ bool SceneScriptCT01::ClickedOn3DObject(const char *objectName, bool a2) {
// if ("ASIANSITTINGANDEATI" == objectName) { //bug?
if (Object_Query_Click("ASIANSITTINGANDEATI", objectName)) {
Actor_Face_Object(kActorMcCoy, "ASIANSITTINGANDEATI", true);
- Actor_Says(kActorMcCoy, 365, 13);
- Actor_Says(kActorHowieLee, 160, 13);
+ Actor_Says(kActorMcCoy, 365, 13); // Excuse me, pal!
+ Actor_Says(kActorHowieLee, 160, 13); // I take care of you soon, McCoy. Real busy tonight.
return true;
}
return false;
@@ -155,7 +166,7 @@ bool SceneScriptCT01::ClickedOn3DObject(const char *objectName, bool a2) {
bool SceneScriptCT01::ClickedOnActor(int actorId) {
if (actorId == kActorHowieLee) {
- Actor_Set_Goal_Number(kActorHowieLee, 50);
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeStopMoving);
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -335.23f, -6.5f, 578.97f, 12, true, false, false)) {
Actor_Face_Actor(kActorMcCoy, kActorHowieLee, true);
Actor_Face_Actor(kActorHowieLee, kActorMcCoy, true);
@@ -163,30 +174,60 @@ bool SceneScriptCT01::ClickedOnActor(int actorId) {
Actor_Says(kActorMcCoy, 260, 18);
Actor_Says(kActorHowieLee, 0, 14);
Game_Flag_Set(kFlagCT01McCoyTalkedToHowieLee);
- Actor_Set_Goal_Number(kActorHowieLee, 0);
- return true;
- }
-
- if (!Game_Flag_Query(kFlagNotUsed30)
- && Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) >= 40
- ) {
- dialogueWithHowieLee();
- Actor_Set_Goal_Number(kActorHowieLee, 0);
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
return true;
}
- if (Game_Flag_Query(kFlagCT01ZubenGone)) {
- Actor_Says(kActorMcCoy, 330, 17);
- Actor_Says(kActorHowieLee, 130, 13);
- Actor_Says(kActorHowieLee, 140, 14);
- } else if (Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) < 50) {
- Actor_Says(kActorMcCoy, 330, 13);
- Actor_Says(kActorHowieLee, 160, 15);
+ if (_vm->_cutContent) {
+ // Howie begins with friendliness of 60
+ if (!Game_Flag_Query(kFlagCT01TalkToHowieAfterZubenMissing)) {
+ dialogueWithHowieLee();
+ } else {
+ if (Game_Flag_Query(kFlagCT01ZubenGone) && !Game_Flag_Query(kFlagCT01TalkToHowieAboutDeadZuben)) {
+ Game_Flag_Set(kFlagCT01TalkToHowieAboutDeadZuben);
+ Actor_Says(kActorMcCoy, 330, 17);
+ Actor_Says(kActorHowieLee, 130, 13);
+ Actor_Says(kActorHowieLee, 140, 14);
+ if (_vm->_cutContent) {
+ Actor_Says(kActorMcCoy, 315, 16);
+ }
+ Actor_Modify_Friendliness_To_Other(kActorHowieLee, kActorMcCoy, -10);
+ } else if (Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) < 50) {
+ Actor_Says(kActorMcCoy, 310, 11); // keeping out of trouble...?
+ Actor_Says(kActorHowieLee, 190, 13); // I look like I got time for chit-er chat-er?
+ } else if (Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) <= 55) {
+ Actor_Says(kActorMcCoy, 330, 13);
+ Actor_Says(kActorHowieLee, 160, 15); // real busy tonight
+ } else { // friendly > 55
+ Actor_Says(kActorMcCoy, 310, 11);
+ Actor_Says(kActorHowieLee, 10, 16);
+ }
+ }
} else {
- Actor_Says(kActorMcCoy, 310, 11);
- Actor_Says(kActorHowieLee, 10, 16);
+ // Original: Howie begins with friendliness of 60, max can be 65, lowest is 52
+ if (!Game_Flag_Query(kFlagCT01TalkToHowieAfterZubenMissing)
+ && Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) >= 40
+ ) {
+ dialogueWithHowieLee();
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
+ return true;
+ }
+ // In the original Howie's friendliness to McCoy can never go below 52
+ // and the flag kFlagCT01TalkToHowieAfterZubenMissing is never set
+ // so the code below was un-triggered
+ if (Game_Flag_Query(kFlagCT01ZubenGone)) {
+ Actor_Says(kActorMcCoy, 330, 17);
+ Actor_Says(kActorHowieLee, 130, 13);
+ Actor_Says(kActorHowieLee, 140, 14);
+ } else if (Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) < 50) {
+ Actor_Says(kActorMcCoy, 330, 13);
+ Actor_Says(kActorHowieLee, 160, 15);
+ } else { // friendly >= 50
+ Actor_Says(kActorMcCoy, 310, 11);
+ Actor_Says(kActorHowieLee, 10, 16);
+ }
}
- Actor_Set_Goal_Number(kActorHowieLee, 0);
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
return true;
}
}
@@ -538,8 +579,9 @@ void SceneScriptCT01::dialogueWithHowieLee() {
DM_Add_To_List_Never_Repeat_Once_Selected(80, 3, 4, 8); // EMPLOYEE
}
- if (Actor_Clue_Query(kActorMcCoy, kClueCarColorAndMake)
- && Actor_Clue_Query(kActorMcCoy, kClueDispatchHitAndRun) // this clue is never obtained
+ if ((Actor_Clue_Query(kActorMcCoy, kClueCarColorAndMake)
+ || (_vm->_cutContent && Actor_Clue_Query(kActorMcCoy, kClueLabPaintTransfer)))
+ && Actor_Clue_Query(kActorMcCoy, kClueDispatchHitAndRun) // this clue is now acquired in restored Cut Content
) {
DM_Add_To_List_Never_Repeat_Once_Selected(90, 5, 4, 5); // HIT AND RUN
}
@@ -586,9 +628,14 @@ void SceneScriptCT01::dialogueWithHowieLee() {
case 60: // MORE RUNCITER CLUES
if (Actor_Clue_Query(kActorMcCoy, kClueSushiMenu)) {
Actor_Says(kActorMcCoy, 270, 11);
- Actor_Says(kActorHowieLee, 40, 15);
+ Actor_Says(kActorHowieLee, 40, 15); // You do Howie a favor? Distribute...
+ // TODO Possible YES/NO option for McCoy? -> and friendliness adjustment accordingly
} else {
+#if BLADERUNNER_ORIGINAL_BUGS
Actor_Says(kActorMcCoy, 270, 11);
+#else
+ Actor_Says(kActorMcCoy, 280, 11);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Says(kActorHowieLee, 30, 14);
}
Actor_Modify_Friendliness_To_Other(kActorHowieLee, kActorMcCoy, 5);
@@ -596,14 +643,17 @@ void SceneScriptCT01::dialogueWithHowieLee() {
break;
case 70: // SMALL TALK
- Actor_Says(kActorMcCoy, 290, 13);
- if (Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) > 49
- && (Global_Variable_Query(kVariableChinyen) > 10
- || Query_Difficulty_Level() == kGameDifficultyEasy
- )
+ Actor_Says(kActorMcCoy, 290, 13); // what's real fresh tonight
+ if (((!_vm->_cutContent && Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) > 49)
+ || Actor_Query_Friendliness_To_Other(kActorHowieLee, kActorMcCoy) > 59)
+ && (Global_Variable_Query(kVariableChinyen) > 10
+ || Query_Difficulty_Level() == kGameDifficultyEasy)
) {
Actor_Says(kActorHowieLee, 50, kAnimationModeTalk);
Actor_Says(kActorHowieLee, 60, kAnimationModeTalk);
+ if (_vm->_cutContent) {
+ Actor_Says(kActorMcCoy, 320, 13);
+ }
Actor_Face_Actor(kActorHowieLee, kActorMcCoy, true);
Actor_Says(kActorHowieLee, 70, 16);
Actor_Says(kActorMcCoy, 325, 13);
@@ -612,7 +662,11 @@ void SceneScriptCT01::dialogueWithHowieLee() {
}
Game_Flag_Set(kFlagCT01BoughtHowieLeeFood);
} else {
- Actor_Says(kActorHowieLee, 130, 15);
+ Actor_Says(kActorHowieLee, 130, 15); // nothing now
+ if (_vm->_cutContent) {
+ Actor_Says(kActorMcCoy, 8565, 14); // really?
+ Actor_Says(kActorHowieLee, 80, 16); // No, sir. Any luck...
+ }
}
break;
diff --git a/engines/bladerunner/script/scene/ct12.cpp b/engines/bladerunner/script/scene/ct12.cpp
index 3419766d3b..88b59cad33 100644
--- a/engines/bladerunner/script/scene/ct12.cpp
+++ b/engines/bladerunner/script/scene/ct12.cpp
@@ -70,6 +70,17 @@ void SceneScriptCT12::InitializeScene() {
Game_Flag_Set(kFlagCT12GaffSpinner);
}
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ if (!Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12)
+ && Global_Variable_Query(kVariableChapter) == 1
+ ) {
+ AI_Movement_Track_Flush(kActorHowieLee);
+ AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
if (Game_Flag_Query(kFlagCT01toCT12)
&& Game_Flag_Query(kFlagSpinnerAtCT01)
) {
diff --git a/engines/bladerunner/script/scene/ma02.cpp b/engines/bladerunner/script/scene/ma02.cpp
index f10fd59f64..af95d8a146 100644
--- a/engines/bladerunner/script/scene/ma02.cpp
+++ b/engines/bladerunner/script/scene/ma02.cpp
@@ -71,7 +71,7 @@ void SceneScriptMA02::InitializeScene() {
&& Game_Flag_Query(kFlagMcCoyIsHelpingReplicants)
&& !Actor_Clue_Query(kActorMcCoy, kClueCrystalsCigarette)
) {
- Overlay_Play("MA02OVER", 0, 1, 0, 0);
+ Overlay_Play("MA02OVER", 0, true, false, 0);
}
}
diff --git a/engines/bladerunner/script/scene/ma04.cpp b/engines/bladerunner/script/scene/ma04.cpp
index fc84ad9104..9bf36a6ed8 100644
--- a/engines/bladerunner/script/scene/ma04.cpp
+++ b/engines/bladerunner/script/scene/ma04.cpp
@@ -257,7 +257,7 @@ void SceneScriptMA04::PlayerWalkedIn() {
Player_Gains_Control();
}
if (isPhoneMessageWaiting() || isPhoneRinging()) {
- Overlay_Play("MA04OVER", 0, 1, 0, 0);
+ Overlay_Play("MA04OVER", 0, true, false, 0);
}
if (Game_Flag_Query(kFlagMA04McCoySleeping)) {
Loop_Actor_Walk_To_XYZ(kActorMcCoy, -7139.0f, 954.0f, 1746.0f, 0, true, false, false);
@@ -272,7 +272,7 @@ void SceneScriptMA04::PlayerWalkedIn() {
Sound_Play(kSfxVIDFONE1, 100, 0, 0, 50);
Loop_Actor_Walk_To_XYZ(kActorMcCoy, -7176.0f, 954.0f, 1806.0f, 0, false, false, false);
Actor_Face_Heading(kActorMcCoy, 256, true);
- Actor_Says(kActorMcCoy, 2680, 0);
+ Actor_Says(kActorMcCoy, 2680, kAnimationModeIdle);
Sound_Play(kSfxSPNBEEP9, 100, 0, 0, 50);
Delay(500);
Actor_Says(kActorGuzza, 0, 3);
@@ -311,6 +311,11 @@ void SceneScriptMA04::PlayerWalkedIn() {
}
Loop_Actor_Walk_To_XYZ(kActorMcCoy, -7199.0f, 955.0f, 1675.0f, 0, true, false, false);
Game_Flag_Set(kFlagChapter1Ending);
+
+ if (_vm->_cutContent) {
+ Game_Flag_Set(kFlagCT01TalkToHowieAfterZubenMissing);
+ }
+
Async_Actor_Walk_To_XYZ(kActorMcCoy, -7204.0f, 956.17f, 1568.0f, 0, false);
Set_Enter(kSetMA05, kSceneMA05);
}