[Scummvm-git-logs] scummvm master -> 7f6b9750d7c77afa469aac82f75bb46bf75ddf3e
antoniou79
antoniou at cti.gr
Mon May 13 02:40:33 CEST 2019
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0e112b964c BLADERUNNER: cut content now loads all TLK resources
b6f7ff77d3 BLADERUNNER: GPS talkie does not disable controls
c52cd1ea4c BLADERUNNER: Fixes for PS05
618d48dde8 BLADERUNNER: Mainframe talkie restored
9207f7270b BLADERUNNER: Hit and Run dispatch clue restored
7f6b9750d7 BLADERUNNER: Howie restored content
Commit: 0e112b964c4cde11dcdeb8ca809a8e8de496ab6e
https://github.com/scummvm/scummvm/commit/0e112b964c4cde11dcdeb8ca809a8e8de496ab6e
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-13T03:29:00+03:00
Commit Message:
BLADERUNNER: cut content now loads all TLK resources
Work-around for cut content stored in wrong TLK files
Changed paths:
engines/bladerunner/chapters.cpp
engines/bladerunner/script/kia_script.cpp
engines/bladerunner/script/scene/rc01.cpp
diff --git a/engines/bladerunner/chapters.cpp b/engines/bladerunner/chapters.cpp
index 09ab94b..7cf7c5e 100644
--- a/engines/bladerunner/chapters.cpp
+++ b/engines/bladerunner/chapters.cpp
@@ -39,8 +39,18 @@ bool Chapters::enterChapter(int chapter) {
if (!_vm->openArchive(Common::String::format("VQA%d.MIX", MIN(id, 3))))
return false;
- if (!_vm->openArchive(Common::String::format("%d.TLK", MIN(id, 3))))
- return false;
+ if (_vm->_cutContent) {
+ for (int chi = 1; chi < 4; ++chi) {
+ if (!_vm->isArchiveOpen(Common::String::format("%d.TLK", chi))
+ && !_vm->openArchive(Common::String::format("%d.TLK", chi))
+ ){
+ return false;
+ }
+ }
+ } else {
+ if (!_vm->openArchive(Common::String::format("%d.TLK", MIN(id, 3))))
+ return false;
+ }
if (!_vm->openArchive(Common::String::format("OUTTAKE%d.MIX", id)))
return false;
@@ -61,7 +71,15 @@ void Chapters::closeResources() {
}
#endif // BLADERUNNER_ORIGINAL_BUGS
_vm->closeArchive(Common::String::format("VQA%d.MIX", MIN(id, 3)));
- _vm->closeArchive(Common::String::format("%d.TLK", MIN(id, 3)));
+ if (_vm->_cutContent) {
+ for (int chi = 1; chi < 4; ++chi) {
+ if (_vm->isArchiveOpen(Common::String::format("%d.TLK", chi))) {
+ _vm->closeArchive(Common::String::format("%d.TLK", chi));
+ }
+ }
+ } else {
+ _vm->closeArchive(Common::String::format("%d.TLK", MIN(id, 3)));
+ }
_vm->closeArchive(Common::String::format("OUTTAKE%d.MIX", id));
_hasOpenResources = false;
}
diff --git a/engines/bladerunner/script/kia_script.cpp b/engines/bladerunner/script/kia_script.cpp
index a6416d2..10afa16 100644
--- a/engines/bladerunner/script/kia_script.cpp
+++ b/engines/bladerunner/script/kia_script.cpp
@@ -46,9 +46,9 @@ void KIAScript::SCRIPT_KIA_DLL_Play_Clue_Asset_Script(int notUsed, int clueId) {
KIA_Play_Actor_Dialogue(kActorOfficerLeary, 0);
break;
case kClueDoorForced1:
- if (_vm->_cutContent && _vm->_gameVars[kVariableChapter] == 1) {
- // unfortunately this line is only available in TLK1 (so only Act 1)
- // it will be silent in subsequent Acts
+ if (_vm->_cutContent || _vm->_gameVars[kVariableChapter] == 1) {
+ // keep in mind, this line in only available in Act 1 (1.TLK) unless _vm->_cutContent is selected (provided that cut content now loads all TLKs)
+ // Without cut content it will be silent in subsequent Acts
KIA_Play_Actor_Dialogue(kActorVoiceOver, 1870);
}
break;
diff --git a/engines/bladerunner/script/scene/rc01.cpp b/engines/bladerunner/script/scene/rc01.cpp
index e35c231..c07ff46 100644
--- a/engines/bladerunner/script/scene/rc01.cpp
+++ b/engines/bladerunner/script/scene/rc01.cpp
@@ -278,7 +278,7 @@ bool SceneScriptRC01::ClickedOn3DObject(const char *objectName, bool a2) {
&& !Actor_Query_In_Set(kActorOfficerLeary, kSetRC01)
&& Global_Variable_Query(kVariableChapter) == 1) {
if (_vm->_cutContent) {
- // keep in mind, this line in only available in Act 1
+ // keep in mind, this line in only available in Act 1 (1.TLK) unless _vm->_cutContent is selected (provided that cut content now loads all TLKs)
Actor_Voice_Over(1870, kActorVoiceOver);
} else {
Actor_Says(kActorMcCoy, 8570, 14);
Commit: b6f7ff77d3a464954536dd6dcdf97f1d13a5fc85
https://github.com/scummvm/scummvm/commit/b6f7ff77d3a464954536dd6dcdf97f1d13a5fc85
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-13T03:29:00+03:00
Commit Message:
BLADERUNNER: GPS talkie does not disable controls
Changed paths:
engines/bladerunner/ui/spinner.cpp
engines/bladerunner/ui/spinner.h
diff --git a/engines/bladerunner/ui/spinner.cpp b/engines/bladerunner/ui/spinner.cpp
index bb4f67b..0054e1b 100644
--- a/engines/bladerunner/ui/spinner.cpp
+++ b/engines/bladerunner/ui/spinner.cpp
@@ -163,8 +163,7 @@ int Spinner::chooseDestination(int loopId, bool immediately) {
mouseUpCallback,
this
);
-// _vm->_ambientSounds->playSpeech(kActorAnsweringMachine, 480, 50, 0, 0, 100);
- playSpeechLine(kActorAnsweringMachine, 480, 0.5f);
+ _vm->_actors[kActorAnsweringMachine]->speechPlay(480, false);
_vm->_ambientSounds->addSound(kSfxSPINAMB2, 5, 30, 30, 45, 0, 0, -101, -101, 0, 0);
} else {
_imagePicker->activate(
@@ -440,34 +439,4 @@ void Spinner::tickDescription() {
}
}
-void Spinner::playSpeechLine(int actorId, int sentenceId, float duration) {
- _vm->gameWaitForActive();
-
- _vm->_mouse->disable();
- Actor *actor = _vm->_actors[actorId];
- actor->speechPlay(sentenceId, true);
-
- while (_vm->_gameIsRunning) {
- _vm->_actorIsSpeaking = true;
- _vm->_actorSpeakStopIsRequested = false;
- _vm->gameTick();
- _vm->_actorIsSpeaking = false;
- if (_vm->_actorSpeakStopIsRequested || !actor->isSpeeching()) {
- actor->speechStop();
- break;
- }
- }
-
- if (duration > 0.0f && !_vm->_actorSpeakStopIsRequested) {
- int timeEnd = duration * 1000.0f + _vm->_time->current();
- while ((timeEnd > _vm->_time->current()) && _vm->_gameIsRunning) {
- _vm->gameTick();
- }
- }
-
- _vm->_actorSpeakStopIsRequested = false;
-
- _vm->_mouse->enable();
-}
-
} // End of namespace BladeRunner
diff --git a/engines/bladerunner/ui/spinner.h b/engines/bladerunner/ui/spinner.h
index a637cef..50a8be9 100644
--- a/engines/bladerunner/ui/spinner.h
+++ b/engines/bladerunner/ui/spinner.h
@@ -76,7 +76,6 @@ public:
void reset();
void resume();
- void playSpeechLine(int actorId, int sentenceId, float duration);
void destinationFocus(int destination);
void setupDescription(int actorId, int sentenceId);
void resetDescription();
Commit: c52cd1ea4cde0a81623737f6f6382da059f36a67
https://github.com/scummvm/scummvm/commit/c52cd1ea4cde0a81623737f6f6382da059f36a67
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-13T03:29:00+03:00
Commit Message:
BLADERUNNER: Fixes for PS05
Pathfinding and spawn points fixes
Changed paths:
engines/bladerunner/script/scene/ps05.cpp
engines/bladerunner/set.cpp
diff --git a/engines/bladerunner/script/scene/ps05.cpp b/engines/bladerunner/script/scene/ps05.cpp
index 6adff84..8bb579c 100644
--- a/engines/bladerunner/script/scene/ps05.cpp
+++ b/engines/bladerunner/script/scene/ps05.cpp
@@ -29,8 +29,13 @@ void SceneScriptPS05::InitializeScene() {
Setup_Scene_Information(547.59f, 0.18f, -216.84f, 334);
} else if (Game_Flag_Query(kFlagPS02toPS05)) {
Setup_Scene_Information(635.0f, 0.0f, -598.0f, 475);
- } else { // kFlagPS06toPS05 || kFlagPS15toPS05
+ } else { // kFlagPS06toPS05 || kFlagPS15toPS05, but for some reason kFlagPS06toPS05 is then set in PlayerWalkedIn
+#if BLADERUNNER_ORIGINAL_BUGS
Setup_Scene_Information(630.72f, 0.38f, -469.26f, 400);
+#else
+ // exiting from PS15
+ Setup_Scene_Information(553.24f, 0.37f, -422.97f, 400);
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
Scene_Exit_Add_2D_Exit(0, 218, 98, 280, 246, 3);
Scene_Exit_Add_2D_Exit(1, 330, 90, 436, 198, 0);
@@ -49,6 +54,10 @@ void SceneScriptPS05::InitializeScene() {
void SceneScriptPS05::SceneLoaded() {
Obstacle_Object("WATER FOUNTAIN", true);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ Obstacle_Object("MAINFBLOCK", true);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Clickable_Object("WATER FOUNTAIN");
Clickable_Object("ASHTRAY");
Clickable_Object("FIRE EXTINGISHER");
@@ -57,6 +66,11 @@ void SceneScriptPS05::SceneLoaded() {
Clickable_Object("WANTED POSTERS");
Unclickable_Object("WATER FOUNTAIN");
Unclickable_Object("CUP");
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ Unclickable_Object("FIRE EXTINGISHER");
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
}
bool SceneScriptPS05::MouseClick(int x, int y) {
@@ -112,12 +126,21 @@ bool SceneScriptPS05::ClickedOnExit(int exitId) {
return true;
}
if (exitId == 2) {
+#if BLADERUNNER_ORIGINAL_BUGS
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 742.52f, 0.37f, -457.69f, 0, true, false, false)) {
Game_Flag_Set(kFlagPS05toPS06);
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
Set_Enter(kSetPS06, kScenePS06);
}
+#else
+ if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 715.52f, 0.37f, -457.69f, 0, true, false, false)) {
+ Game_Flag_Set(kFlagPS05toPS06);
+ Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
+ Ambient_Sounds_Remove_All_Looping_Sounds(1);
+ Set_Enter(kSetPS06, kScenePS06);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
return true;
}
return false;
@@ -143,7 +166,11 @@ void SceneScriptPS05::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo
void SceneScriptPS05::PlayerWalkedIn() {
if (Game_Flag_Query(kFlagPS06toPS05)) {
+#if BLADERUNNER_ORIGINAL_BUGS
Actor_Set_At_XYZ(kActorMcCoy, 718.72f, 0.37f, -461.26f, 600);
+#else
+ Actor_Set_At_XYZ(kActorMcCoy, 710.14f, 0.37f, -455.48f, 600);
+#endif // BLADERUNNER_ORIGINAL_BUGS
} else if (Game_Flag_Query(kFlagPS02toPS05)) {
selectNextTvNews();
turnOnTV();
diff --git a/engines/bladerunner/set.cpp b/engines/bladerunner/set.cpp
index e03466b..5427858 100644
--- a/engines/bladerunner/set.cpp
+++ b/engines/bladerunner/set.cpp
@@ -480,6 +480,12 @@ void Set::patchInAdditionalObjectsInSet() {
int objectId = _objectCount;
BoundingBox bbox;
switch (_vm->_scene->getSceneId()) {
+ case kScenePS05:
+ // block actual passage to ESPER room because
+ // it causes McCoy to sometimes go behind the wall
+ bbox = BoundingBox(730.50f, -0.0f, -481.10f, 734.51f, 144.75f, -437.55f);
+ custObjName = "MAINFBLOCK";
+ break;
case kSceneUG13:
// Underground homeless place
// block passage to empty elevator chute
Commit: 618d48dde8a9e83f0cfa01d48cecd9cbfca6bf0d
https://github.com/scummvm/scummvm/commit/618d48dde8a9e83f0cfa01d48cecd9cbfca6bf0d
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-13T03:29:00+03:00
Commit Message:
BLADERUNNER: Mainframe talkie restored
Changed paths:
engines/bladerunner/actor.cpp
engines/bladerunner/actor.h
engines/bladerunner/script/scene/ps06.cpp
engines/bladerunner/script/script.cpp
engines/bladerunner/script/script.h
diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index 1987627..b00b870 100644
--- a/engines/bladerunner/actor.cpp
+++ b/engines/bladerunner/actor.cpp
@@ -1209,7 +1209,8 @@ bool Actor::hasClue(int clueId) const {
return _clues->isAcquired(clueId);
}
-void Actor::copyClues(int actorId) {
+bool Actor::copyClues(int actorId) {
+ bool newCluesAcquired = false;
Actor *otherActor = _vm->_actors[actorId];
for (int i = 0; i < (int)_vm->_gameInfo->getClueCount(); i++) {
if (hasClue(i) && !_clues->isPrivate(i) && otherActor->canAcquireClue(i) && !otherActor->hasClue(i)) {
@@ -1218,8 +1219,10 @@ void Actor::copyClues(int actorId) {
fromActorId = _clues->getFromActorId(i);
}
otherActor->acquireClue(i, false, fromActorId);
+ newCluesAcquired = true;
}
}
+ return newCluesAcquired;
}
void Actor::acquireCluesByRelations() {
diff --git a/engines/bladerunner/actor.h b/engines/bladerunner/actor.h
index 186468b..9d84e57 100644
--- a/engines/bladerunner/actor.h
+++ b/engines/bladerunner/actor.h
@@ -254,7 +254,7 @@ public:
void acquireClue(int clueId, bool unknownFlag, int fromActorId);
void loseClue(int clueId);
bool hasClue(int clueId) const;
- void copyClues(int actorId);
+ bool copyClues(int actorId);
void acquireCluesByRelations();
int soundVolume() const;
diff --git a/engines/bladerunner/script/scene/ps06.cpp b/engines/bladerunner/script/scene/ps06.cpp
index d0624ef..10797e3 100644
--- a/engines/bladerunner/script/scene/ps06.cpp
+++ b/engines/bladerunner/script/scene/ps06.cpp
@@ -53,7 +53,7 @@ bool SceneScriptPS06::ClickedOn3DObject(const char *objectName, bool a2) {
if (Object_Query_Click("E.SCREEN03", objectName)
|| Object_Query_Click("E.MONITOR3", objectName)
) {
- Actor_Says(kActorAnsweringMachine, 330, 3);
+ Actor_Says(kActorAnsweringMachine, 330, kAnimationModeTalk); // uploading clues
if (Actor_Clue_Query(kActorMcCoy, kClueCar)
&& !Actor_Clue_Query(kActorMcCoy, kClueCarRegistration1)
&& !Actor_Clue_Query(kActorMcCoy, kClueCarRegistration2)
@@ -85,15 +85,27 @@ bool SceneScriptPS06::ClickedOn3DObject(const char *objectName, bool a2) {
Actor_Clues_Transfer_New_From_Mainframe(kActorMcCoy);
return true;
} else {
- Actor_Clues_Transfer_New_To_Mainframe(kActorMcCoy);
- Ambient_Sounds_Play_Sound(kSfxDATALOAD, 50, 0, 0, 99);
- Delay(2000);
- Actor_Says(kActorAnsweringMachine, 340, kAnimationModeTalk);
- Actor_Clues_Transfer_New_From_Mainframe(kActorMcCoy);
- Ambient_Sounds_Play_Sound(kSfxDATALOAD, 50, 0, 0, 99);
- Delay(2000);
+ bool tranferedClues = false;
+ tranferedClues = Actor_Clues_Transfer_New_To_Mainframe(kActorMcCoy);
+ if (_vm->_cutContent && !tranferedClues) {
+ Actor_Says(kActorAnsweringMachine, 370, kAnimationModeTalk); // no clues transfered
+ } else {
+ Ambient_Sounds_Play_Sound(kSfxDATALOAD, 50, 0, 0, 99);
+ Delay(2000);
+ }
+ Actor_Says(kActorAnsweringMachine, 340, kAnimationModeTalk); // downloading clues
+ tranferedClues = Actor_Clues_Transfer_New_From_Mainframe(kActorMcCoy);
+ if (_vm->_cutContent && !tranferedClues) {
+ Actor_Says(kActorAnsweringMachine, 370, kAnimationModeTalk); // no clues transfered
+ } else {
+ Ambient_Sounds_Play_Sound(kSfxDATALOAD, 50, 0, 0, 99);
+ Delay(2000);
+ }
Ambient_Sounds_Play_Sound(kSfxBEEPNEAT, 80, 0, 0, 99);
- Actor_Says(kActorAnsweringMachine, 350, kAnimationModeTalk);
+ Actor_Says(kActorAnsweringMachine, 350, kAnimationModeTalk); // db transfer complete
+ if (_vm->_cutContent && tranferedClues) {
+ Actor_Says(kActorAnsweringMachine, 360, kAnimationModeTalk); // new clues added
+ }
return true;
}
}
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
index 4ce5e89..e665916 100644
--- a/engines/bladerunner/script/script.cpp
+++ b/engines/bladerunner/script/script.cpp
@@ -740,14 +740,14 @@ bool ScriptBase::Actor_Clue_Query(int actorId, int clueId) {
return _vm->_actors[actorId]->hasClue(clueId);
}
-void ScriptBase::Actor_Clues_Transfer_New_To_Mainframe(int actorId) {
+bool ScriptBase::Actor_Clues_Transfer_New_To_Mainframe(int actorId) {
debugC(kDebugScript, "Actor_Clues_Transfer_New_To_Mainframe(%d)", actorId);
- _vm->_actors[actorId]->copyClues(kActorVoiceOver);
+ return _vm->_actors[actorId]->copyClues(kActorVoiceOver);
}
-void ScriptBase::Actor_Clues_Transfer_New_From_Mainframe(int actorId) {
+bool ScriptBase::Actor_Clues_Transfer_New_From_Mainframe(int actorId) {
debugC(kDebugScript, "Actor_Clues_Transfer_New_From_Mainframe(%d)", actorId);
- _vm->_actors[kActorVoiceOver]->copyClues(actorId);
+ return _vm->_actors[kActorVoiceOver]->copyClues(actorId);
}
void ScriptBase::Actor_Set_Invisible(int actorId, bool isInvisible) {
diff --git a/engines/bladerunner/script/script.h b/engines/bladerunner/script/script.h
index 7641b22..aca4507 100644
--- a/engines/bladerunner/script/script.h
+++ b/engines/bladerunner/script/script.h
@@ -117,8 +117,8 @@ protected:
void Actor_Clue_Acquire(int actorId, int clueId, bool unknownFlag, int fromActorId);
void Actor_Clue_Lose(int actorId, int clueId);
bool Actor_Clue_Query(int actorId, int clueId);
- void Actor_Clues_Transfer_New_To_Mainframe(int actorId);
- void Actor_Clues_Transfer_New_From_Mainframe(int actorId);
+ bool Actor_Clues_Transfer_New_To_Mainframe(int actorId);
+ bool Actor_Clues_Transfer_New_From_Mainframe(int actorId);
void Actor_Set_Invisible(int actorId, bool isInvisible);
void Actor_Set_Immunity_To_Obstacles(int actorId, bool isImmune);
void Item_Add_To_World(int itemId, int animationId, int setId, float x, float y, float z, signed int facing, int height, int width, bool isTargetable, bool isObstacle, bool isPoliceMazeEnemy, bool updateOnly);
Commit: 9207f7270b9be7b72f7b65f5df6957c56c3bdc31
https://github.com/scummvm/scummvm/commit/9207f7270b9be7b72f7b65f5df6957c56c3bdc31
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-13T03:29:00+03:00
Commit Message:
BLADERUNNER: Hit and Run dispatch clue restored
Changed paths:
engines/bladerunner/script/ai/mccoy.cpp
engines/bladerunner/script/scene/ma01.cpp
engines/bladerunner/script/scene/ps01.cpp
diff --git a/engines/bladerunner/script/ai/mccoy.cpp b/engines/bladerunner/script/ai/mccoy.cpp
index 145743f..f5c6342 100644
--- a/engines/bladerunner/script/ai/mccoy.cpp
+++ b/engines/bladerunner/script/ai/mccoy.cpp
@@ -127,17 +127,22 @@ void AIScriptMcCoy::CompletedMovementTrack() {
void AIScriptMcCoy::ReceivedClue(int clueId, int fromActorId) {
switch (clueId) {
+ case kClueDispatchHitAndRun: // added case for cut content
+ // fall through
case kClueChopstickWrapper:
+ // fall through
case kClueSushiMenu:
Spinner_Set_Selectable_Destination_Flag(kSpinnerDestinationChinatown, true);
break;
case kClueDragonflyEarring:
+ // fall through
case kClueBombingSuspect:
Spinner_Set_Selectable_Destination_Flag(kSpinnerDestinationAnimoidRow, true);
break;
case kClueKingstonKitchenBox1:
+ // fall through
case kClueKingstonKitchenBox2:
if (Query_Difficulty_Level() == kGameDifficultyEasy) {
Spinner_Set_Selectable_Destination_Flag(kSpinnerDestinationAnimoidRow, true);
@@ -149,17 +154,24 @@ void AIScriptMcCoy::ReceivedClue(int clueId, int fromActorId) {
break;
case kClueHysteriaToken:
+ // fall through
case kClueCarRegistration1:
+ // fall through
case kClueCarRegistration2:
+ // fall through
case kClueCarRegistration3:
+ // fall through
case kClueLichenDogWrapper:
Spinner_Set_Selectable_Destination_Flag(kSpinnerDestinationHysteriaHall, true);
Spinner_Set_Selectable_Destination_Flag(kSpinnerDestinationNightclubRow, true);
break;
case kClueWeaponsCache:
+ // fall through
case kClueWeaponsOrderForm:
+ // fall through
case kClueShippingForm:
+ // fall through
case kCluePoliceIssueWeapons:
Global_Variable_Increment(kVariableCorruptedGuzzaEvidence, 1);
break;
@@ -169,20 +181,27 @@ void AIScriptMcCoy::ReceivedClue(int clueId, int fromActorId) {
break;
case kClueHomelessManKid:
+ // fall through
case kClueOriginalRequisitionForm:
Global_Variable_Increment(kVariableCorruptedGuzzaEvidence, 3);
break;
case kClueScaryChair:
+ // fall through
case kClueIzosStashRaided:
Global_Variable_Increment(kVariableCorruptedGuzzaEvidence, 2);
break;
case kClueDNATyrell:
+ // fall through
case kClueDNASebastian:
+ // fall through
case kClueDNAChew:
+ // fall through
case kClueDNAMoraji:
+ // fall through
case kClueDNALutherLance:
+ // fall through
case kClueDNAMarcus:
Global_Variable_Increment(kVariableDNAEvidence, 1);
break;
@@ -196,10 +215,15 @@ void AIScriptMcCoy::ReceivedClue(int clueId, int fromActorId) {
Actor_Voice_Over(3320, kActorVoiceOver);
switch (clueId) {
case kClueWeaponsCache:
+ // fall through
case kClueWeaponsOrderForm:
+ // fall through
case kClueGuzzasCash:
+ // fall through
case kCluePoliceIssueWeapons:
+ // fall through
case kClueIzosStashRaided:
+ // fall through
case kClueOriginalRequisitionForm:
Actor_Voice_Over(3340, kActorVoiceOver);
Actor_Voice_Over(3350, kActorVoiceOver);
diff --git a/engines/bladerunner/script/scene/ma01.cpp b/engines/bladerunner/script/scene/ma01.cpp
index 9b4e8d2..d21ac5d 100644
--- a/engines/bladerunner/script/scene/ma01.cpp
+++ b/engines/bladerunner/script/scene/ma01.cpp
@@ -269,12 +269,41 @@ void SceneScriptMA01::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo
}
void SceneScriptMA01::PlayerWalkedIn() {
+ if (_vm->_cutContent) {
+ if (!Game_Flag_Query(kFlagCT01Visited) && !Actor_Clue_Query(kActorMcCoy, kClueDispatchHitAndRun)) {
+ Actor_Clue_Acquire(kActorMcCoy, kClueDispatchHitAndRun, false, kActorDispatcher);
+ ADQ_Add(kActorDispatcher, 80, kAnimationModeTalk);
+ if (Game_Flag_Query(kFlagRC01PoliceDone)) {
+ ADQ_Add(kActorOfficerLeary, 340, kAnimationModeTalk); // sector 3 - go ahead
+ } else {
+ ADQ_Add(kActorOfficerGrayford, 360, kAnimationModeTalk); // sector 3 - go ahead
+ }
+ ADQ_Add(kActorDispatcher, 90, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 100, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 110, kAnimationModeTalk);
+ if (Game_Flag_Query(kFlagRC01PoliceDone)) {
+ ADQ_Add(kActorOfficerLeary, 350, kAnimationModeTalk); // sector 3 - responding code 3
+ } else {
+ ADQ_Add(kActorOfficerGrayford, 370, kAnimationModeTalk); // sector 3 - responding code 3
+ }
+ ADQ_Add_Pause(1000);
+ ADQ_Add(kActorDispatcher, 120, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 130, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 140, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 150, kAnimationModeTalk);
+ }
+ }
}
void SceneScriptMA01::PlayerWalkedOut() {
Actor_Set_Invisible(kActorMcCoy, false);
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
+
+ if (_vm->_cutContent) {
+ ADQ_Flush(); // for dispatcher queue cleanup
+ }
+
if (!Game_Flag_Query(kFlagMA01toMA06)) {
if (Global_Variable_Query(kVariableChapter) == 1) {
Outtake_Play(kOuttakeTowards2, true, -1);
diff --git a/engines/bladerunner/script/scene/ps01.cpp b/engines/bladerunner/script/scene/ps01.cpp
index bffcd0e..abe4a07 100644
--- a/engines/bladerunner/script/scene/ps01.cpp
+++ b/engines/bladerunner/script/scene/ps01.cpp
@@ -285,6 +285,30 @@ void SceneScriptPS01::PlayerWalkedIn() {
Actor_Set_At_XYZ(kActorMcCoy, 1920.0f, 16581.0f, -2653.0f, 150);
Game_Flag_Reset(kFlagPS02toPS01);
}
+ if (_vm->_cutContent) {
+ if (!Game_Flag_Query(kFlagCT01Visited) && !Actor_Clue_Query(kActorMcCoy, kClueDispatchHitAndRun)) {
+ Actor_Clue_Acquire(kActorMcCoy, kClueDispatchHitAndRun, false, kActorDispatcher);
+ ADQ_Add(kActorDispatcher, 80, kAnimationModeTalk);
+ if (Game_Flag_Query(kFlagRC01PoliceDone)) {
+ ADQ_Add(kActorOfficerLeary, 340, kAnimationModeTalk); // sector 3 - go ahead
+ } else {
+ ADQ_Add(kActorOfficerGrayford, 360, kAnimationModeTalk); // sector 3 - go ahead
+ }
+ ADQ_Add(kActorDispatcher, 90, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 100, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 110, kAnimationModeTalk);
+ if (Game_Flag_Query(kFlagRC01PoliceDone)) {
+ ADQ_Add(kActorOfficerLeary, 350, kAnimationModeTalk); // sector 3 - responding code 3
+ } else {
+ ADQ_Add(kActorOfficerGrayford, 370, kAnimationModeTalk); // sector 3 - responding code 3
+ }
+ ADQ_Add_Pause(1000);
+ ADQ_Add(kActorDispatcher, 120, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 130, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 140, kAnimationModeTalk);
+ ADQ_Add(kActorDispatcher, 150, kAnimationModeTalk);
+ }
+ }
//return false;
}
@@ -293,6 +317,10 @@ void SceneScriptPS01::PlayerWalkedOut() {
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
+ if (_vm->_cutContent) {
+ ADQ_Flush(); // for dispatcher queue cleanup
+ }
+
if (!Game_Flag_Query(kflagPS01toPS02)) {
if (Global_Variable_Query(kVariableChapter) == 1) {
Outtake_Play(kOuttakeTowards3, true, -1);
Commit: 7f6b9750d7c77afa469aac82f75bb46bf75ddf3e
https://github.com/scummvm/scummvm/commit/7f6b9750d7c77afa469aac82f75bb46bf75ddf3e
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-13T03:29:00+03:00
Commit Message:
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
Changed paths:
engines/bladerunner/game_constants.h
engines/bladerunner/script/ai/howie_lee.cpp
engines/bladerunner/script/scene/ct01.cpp
engines/bladerunner/script/scene/ct12.cpp
engines/bladerunner/script/scene/ma02.cpp
engines/bladerunner/script/scene/ma04.cpp
diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index e412adf..a88693b 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -143,7 +143,7 @@ enum Clues {
kClueLicensePlate = 37,
kClueLicensePlateMatch = 38,
kClueLabPaintTransfer = 39,
- kClueDispatchHitAndRun = 40, // is never acquired
+ kClueDispatchHitAndRun = 40, // is now acquired in restored Cut Content
kClueInceptShotRoy = 41,
kClueInceptShotsLeon = 42,
kCluePhoneCallGuzza = 43,
@@ -446,7 +446,7 @@ enum Flags {
kFlagRC02Left = 4,
// 5 is never used
kFlagRC02RunciterInterview = 6,
- // 7 is never used
+ kFlagCT01TalkToHowieAboutDeadZuben = 7, // Re-purposed. Original: 7 is never used
kFlagRC01toRC02 = 8,
kFlagRC02toRC01 = 9,
kFlagDR01toDR04 = 10,
@@ -469,7 +469,7 @@ enum Flags {
kFlagCT01Evidence1Linked = 27,
kFlagCT01Evidence2Linked = 28,
kFlagCT01ZubenLeft = 29,
- kFlagNotUsed30 = 30, // is never set
+ kFlagCT01TalkToHowieAfterZubenMissing = 30, // New, it is now set/unset to restore cut content there. Original: is never set
kFlagCT01ZubenGone = 31,
kFlagCT01GordoTalk = 32,
kFlagMA02toMA06 = 33,
@@ -2247,6 +2247,18 @@ enum GoalLuther {
kGoalLutherGone = 599
};
+enum GoalHowieLee {
+ kGoalHowieLeeDefault = 0,
+ kGoalHowieLeeMovesInDiner01 = 1,
+ kGoalHowieLeeMovesInDiner02 = 2,
+ kGoalHowieLeeMovesInDiner03 = 3,
+ kGoalHowieLeeGoesToCT04GarbageBin = 4,
+ kGoalHowieLeeGoesToFreeSlotH = 5,
+ kGoalHowieLeeMovesInDiner06 = 6, // Unused goal?
+ kGoalHowieLeeStopMoving = 50,
+ kGoalHowieLeeGoesToFreeSlotC = 100
+};
+
enum GoalTransient {
kGoalTransientDefault = 0,
kGoalTransientCT04Leave = 2
diff --git a/engines/bladerunner/script/ai/howie_lee.cpp b/engines/bladerunner/script/ai/howie_lee.cpp
index 3675fc1..8701230 100644
--- a/engines/bladerunner/script/ai/howie_lee.cpp
+++ b/engines/bladerunner/script/ai/howie_lee.cpp
@@ -36,47 +36,79 @@ void AIScriptHowieLee::Initialize() {
var_45DFB8 = false;
Actor_Put_In_Set(kActorHowieLee, kSetCT01_CT12);
- Actor_Set_At_Waypoint(kActorHowieLee, 67, 605);
- Actor_Set_Goal_Number(kActorHowieLee, 0);
+ Actor_Set_At_Waypoint(kActorHowieLee, 67, 605); // in kSetCT01_CT12
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
}
bool AIScriptHowieLee::Update() {
- if (Actor_Query_Goal_Number(kActorHowieLee) < 100
- && Global_Variable_Query(kVariableChapter) == 2
- ) {
- Actor_Set_Goal_Number(kActorHowieLee, 100);
- }
- if (Global_Variable_Query(kVariableChapter) > 1) {
- return true;
+ if (_vm->_cutContent) {
+ // keep Howie in Acts 2 and 3
+ // Howie in Acts 2 and 3 will have a routine with existing waypoints/goals,
+ // so no need to add new goals (> 100) for those Acts
+ if (Actor_Query_Goal_Number(kActorHowieLee) < 100
+ && Global_Variable_Query(kVariableChapter) == 4
+ ) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToFreeSlotC);
+ }
+
+ if (Global_Variable_Query(kVariableChapter) > 3) {
+ return true;
+ }
+ } else {
+ if (Actor_Query_Goal_Number(kActorHowieLee) < 100
+ && Global_Variable_Query(kVariableChapter) == 2
+ ) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToFreeSlotC);
+ }
+
+ if (Global_Variable_Query(kVariableChapter) > 1) {
+ return true;
+ }
}
- if (Actor_Query_Goal_Number(kActorHowieLee) == 0) {
- Actor_Set_Goal_Number(kActorHowieLee, 1);
+ if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeDefault) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeMovesInDiner01);
}
+ // In the original code this is used (in Act 1) to get Howie back to the Diner
+ // from goals kGoalHowieLeeGoesToCT04GarbageBin or kGoalHowieLeeGoesToFreeSlotH
+ // It might cause a blink-in issue, depending when update() will be called for Howie
+ // This is kept as a backup while similar code is placed in the CT01 and CT02 scenes InitializeScene()
+ // that will handle Howie appearing there immediately (fix for blink in)
if ( Game_Flag_Query(kFlagMcCoyInChinaTown)
&& !Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12)
+ && Global_Variable_Query(kVariableChapter) == 1 // added condition - in cut content don't force Howie to return to CT01 here after Act 1
) {
AI_Movement_Track_Flush(kActorHowieLee);
- AI_Movement_Track_Append(kActorHowieLee, 67, 0);
- Actor_Set_Goal_Number(kActorHowieLee, 0);
+ AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
}
- if ( Actor_Query_Goal_Number(kActorHowieLee) == 1
- && Game_Flag_Query(kFlagCT01BoughtHowieLeeFood)
- && !Game_Flag_Query(kFlagMcCoyInChinaTown)
#if BLADERUNNER_ORIGINAL_BUGS
+ if ( Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner01
+ && Game_Flag_Query(kFlagCT01BoughtHowieLeeFood)
+ && !Game_Flag_Query(kFlagMcCoyInChinaTown) ) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToCT04GarbageBin);
+ return true;
+ }
#else
// Prevents possibility of Howie Lee from blinking in/out of existence
- // when the flyout loop is playing
- // and when McCoy enters and exits the Spinner with the spinner doors animation restored
- && Player_Query_Current_Scene() != kSceneCT01
-#endif // BLADERUNNER_ORIGINAL_BUGS
+ // when the fly-out loop is playing and/or when McCoy enters and exits the Spinner with the spinner doors animation restored
+ if ((Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner01
+ || Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner02
+ || Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner03
+ || Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner06
+ || Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeDefault)
+ && Game_Flag_Query(kFlagCT01BoughtHowieLeeFood)
+ && !Game_Flag_Query(kFlagMcCoyInChinaTown)
+ && Player_Query_Current_Scene() != kSceneCT01
+ && Player_Query_Current_Scene() != kSceneCT12
) {
- Actor_Set_Goal_Number(kActorHowieLee, 4);
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToCT04GarbageBin);
return true;
}
+#endif // BLADERUNNER_ORIGINAL_BUGS
return false;
}
@@ -86,36 +118,73 @@ void AIScriptHowieLee::TimerExpired(int timer) {
}
void AIScriptHowieLee::CompletedMovementTrack() {
- if (Actor_Query_Goal_Number(kActorHowieLee) == 1) {
- Actor_Set_Goal_Number(kActorHowieLee, 2);
+ if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner01) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeMovesInDiner02);
return; // true;
}
- if (Actor_Query_Goal_Number(kActorHowieLee) == 2) {
- Actor_Set_Goal_Number(kActorHowieLee, 3);
+ if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner02) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeMovesInDiner03);
return; // true;
}
- if (Actor_Query_Goal_Number(kActorHowieLee) == 3) {
- Actor_Set_Goal_Number(kActorHowieLee, 0);
- return; // true;
+ if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner03) {
+ if (_vm->_cutContent) {
+ //
+ // *after Act 1* Howie will be going to the Garbage Bin "regularly"
+ // if McCoy is not in scenes CT01 and CT12 (where Howie is visible working at the diner)
+ // otherwise he'll do the short cycle (goals 0, 1, 2, 3)
+ // This will result in Howie not being at the Diner sometimes even when McCoy is in Chinatown area
+ // This won't happen in Act 1, since he is most useful during that Act
+ if (Global_Variable_Query(kVariableChapter) > 1
+ && Player_Query_Current_Scene() != kSceneCT01
+ && Player_Query_Current_Scene() != kSceneCT12
+ && Player_Query_Current_Scene() != kSceneCT04
+ ) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToCT04GarbageBin);
+ return; // true;
+ } else {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
+ return; // true;
+ }
+ } else {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
+ return; // true;
+ }
}
- // Bug/intentional in original game?
- if (Actor_Query_Goal_Number(kActorHowieLee) == 3) {
- Actor_Set_Goal_Number(kActorHowieLee, 4);
- return; // true;
+#if BLADERUNNER_ORIGINAL_BUGS
+ if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner03) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToCT04GarbageBin);
+ return; // true;
}
+#endif // BLADERUNNER_ORIGINAL_BUGS
- if (Actor_Query_Goal_Number(kActorHowieLee) == 4) {
- Actor_Set_Goal_Number(kActorHowieLee, 5);
+ if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeGoesToCT04GarbageBin) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToFreeSlotH);
return; // true;
}
- if (Actor_Query_Goal_Number(kActorHowieLee) == 5) {
- Actor_Set_Goal_Number(kActorHowieLee, 0);
+ if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeGoesToFreeSlotH) {
+#if BLADERUNNER_ORIGINAL_BUGS
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
return; // true;
+#else
+ // don't blink-in and also only return to diner routine if McCoy is actually in Chinatown
+ if (Game_Flag_Query(kFlagMcCoyInChinaTown)
+ && Player_Query_Current_Scene() != kSceneCT01
+ && Player_Query_Current_Scene() != kSceneCT12
+ ) {
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
+ return; // true;
+ } else {
+ // return to "garbage bin" goal instead of blinking in
+ Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToCT04GarbageBin);
+ return; // true;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
+
// return false;
}
@@ -128,7 +197,7 @@ void AIScriptHowieLee::ClickedByPlayer() {
}
void AIScriptHowieLee::EnteredScene(int sceneId) {
- if (Actor_Query_Goal_Number(kActorHowieLee) == 4
+ if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeGoesToCT04GarbageBin
&& Actor_Query_In_Set(kActorHowieLee, kSetCT03_CT04)
) {
if ( Game_Flag_Query(kFlagCT04HomelessKilledByMcCoy)
@@ -139,7 +208,7 @@ void AIScriptHowieLee::EnteredScene(int sceneId) {
// return false;
}
- if (!Game_Flag_Query(kFlagCT04HomelessKilledByMcCoy)
+ if (Game_Flag_Query(kFlagCT04HomelessKilledByMcCoy)
&& Game_Flag_Query(kFlagCT04HomelessBodyInDumpster)
&& !Game_Flag_Query(kFlagCT04HomelessBodyFound)
&& Random_Query(1, 10) == 1
@@ -152,6 +221,17 @@ void AIScriptHowieLee::EnteredScene(int sceneId) {
}
void AIScriptHowieLee::OtherAgentEnteredThisScene(int otherActorId) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ // prevent player from actually meeting hovering Howie half-body in kSetCT03_CT04
+ if (otherActorId == kActorMcCoy
+ && Actor_Query_In_Set(kActorHowieLee, kSetCT03_CT04)
+ ) {
+ 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
// return false;
}
@@ -181,55 +261,55 @@ int AIScriptHowieLee::GetFriendlinessModifierIfGetsClue(int otherActorId, int cl
bool AIScriptHowieLee::GoalChanged(int currentGoalNumber, int newGoalNumber) {
switch (newGoalNumber) {
- case 1:
+ case kGoalHowieLeeMovesInDiner01:
AI_Movement_Track_Flush(kActorHowieLee);
if (Random_Query(1, 2) == 1) {
- AI_Movement_Track_Append_With_Facing(kActorHowieLee, 67, Random_Query(3, 10), 720);
+ AI_Movement_Track_Append_With_Facing(kActorHowieLee, 67, Random_Query(3, 10), 720); // in kSetCT01_CT12
} else {
- AI_Movement_Track_Append_With_Facing(kActorHowieLee, 69, Random_Query(3, 10), 640);
+ AI_Movement_Track_Append_With_Facing(kActorHowieLee, 69, Random_Query(3, 10), 640); // in kSetCT01_CT12
}
AI_Movement_Track_Repeat(kActorHowieLee);
return true;
- case 2:
+ case kGoalHowieLeeMovesInDiner02:
AI_Movement_Track_Flush(kActorHowieLee);
if (Random_Query(1, 2) == 1) {
- AI_Movement_Track_Append_With_Facing(kActorHowieLee, 68, Random_Query(3, 10), 641);
+ AI_Movement_Track_Append_With_Facing(kActorHowieLee, 68, Random_Query(3, 10), 641); // in kSetCT01_CT12
} else {
- AI_Movement_Track_Append_With_Facing(kActorHowieLee, 67, Random_Query(3, 10), 720);
+ AI_Movement_Track_Append_With_Facing(kActorHowieLee, 67, Random_Query(3, 10), 720); // in kSetCT01_CT12
}
AI_Movement_Track_Repeat(kActorHowieLee);
return true;
- case 3:
+ case kGoalHowieLeeMovesInDiner03:
AI_Movement_Track_Flush(kActorHowieLee);
if (Random_Query(1, 2) == 1) {
- AI_Movement_Track_Append_With_Facing(kActorHowieLee, 69, Random_Query(3, 10), 640);
+ AI_Movement_Track_Append_With_Facing(kActorHowieLee, 69, Random_Query(3, 10), 640); // in kSetCT01_CT12
} else {
- AI_Movement_Track_Append_With_Facing(kActorHowieLee, 68, Random_Query(3, 10), 641);
+ AI_Movement_Track_Append_With_Facing(kActorHowieLee, 68, Random_Query(3, 10), 641); // in kSetCT01_CT12
}
AI_Movement_Track_Repeat(kActorHowieLee);
return true;
- case 4:
+ case kGoalHowieLeeGoesToCT04GarbageBin:
AI_Movement_Track_Flush(kActorHowieLee);
- AI_Movement_Track_Append(kActorHowieLee, 66, 30);
+ AI_Movement_Track_Append(kActorHowieLee, 66, 30); // in kSetCT03_CT04
AI_Movement_Track_Repeat(kActorHowieLee);
return true;
- case 5:
+ case kGoalHowieLeeGoesToFreeSlotH:
AI_Movement_Track_Flush(kActorHowieLee);
- AI_Movement_Track_Append(kActorHowieLee, 40, 60);
+ AI_Movement_Track_Append(kActorHowieLee, 40, 60); // in kSetFreeSlotH
AI_Movement_Track_Repeat(kActorHowieLee);
return true;
- case 6:
+ case kGoalHowieLeeMovesInDiner06: // Unused goal?
AI_Movement_Track_Flush(kActorHowieLee);
- AI_Movement_Track_Append(kActorHowieLee, 67, 90);
+ AI_Movement_Track_Append(kActorHowieLee, 67, 90); // in kSetCT01_CT12
AI_Movement_Track_Repeat(kActorHowieLee);
return true;
- case 50:
+ case kGoalHowieLeeStopMoving:
AI_Movement_Track_Flush(kActorHowieLee);
return false;
- case 100:
+ case kGoalHowieLeeGoesToFreeSlotC:
AI_Movement_Track_Flush(kActorHowieLee);
Actor_Put_In_Set(kActorHowieLee, kSetFreeSlotC);
- Actor_Set_At_Waypoint(kActorHowieLee, 35, 0);
+ Actor_Set_At_Waypoint(kActorHowieLee, 35, 0); // in kSetFreeSlotC
return false;
}
return false;
diff --git a/engines/bladerunner/script/scene/ct01.cpp b/engines/bladerunner/script/scene/ct01.cpp
index 138fada..3eb06e2 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 3419766..88b59ca 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 f10fd59..af95d8a 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 fc84ad9..9bf36a6 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);
}
More information about the Scummvm-git-logs
mailing list