mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-13 07:14:59 +00:00
BLADERUNNER: Howie Lee AI and Leary overlap fixes
This commit is contained in:
parent
1e412ec977
commit
674e44f55b
@ -76,10 +76,8 @@ bool AIScriptHowieLee::Update() {
|
||||
// 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
|
||||
) {
|
||||
if (Game_Flag_Query(kFlagMcCoyInChinaTown)
|
||||
&& !Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12)) {
|
||||
AI_Movement_Track_Flush(kActorHowieLee);
|
||||
AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12
|
||||
Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
|
||||
@ -131,15 +129,14 @@ void AIScriptHowieLee::CompletedMovementTrack() {
|
||||
if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner03) {
|
||||
if (_vm->_cutContent) {
|
||||
//
|
||||
// *after Act 1* Howie will be going to the Garbage Bin "regularly"
|
||||
// *after Act 1* Howie will be going to the Garbage Bin "semi-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
|
||||
&& Random_Query(1, 5) == 1
|
||||
) {
|
||||
Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToCT04GarbageBin);
|
||||
return; // true;
|
||||
|
@ -118,8 +118,7 @@ void SceneScriptCT01::InitializeScene() {
|
||||
#if BLADERUNNER_ORIGINAL_BUGS
|
||||
#else
|
||||
if (!Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12)
|
||||
&& Global_Variable_Query(kVariableChapter) == 1
|
||||
) {
|
||||
&& Global_Variable_Query(kVariableChapter) < 4) {
|
||||
AI_Movement_Track_Flush(kActorHowieLee);
|
||||
AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12
|
||||
Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
|
||||
|
@ -73,8 +73,7 @@ void SceneScriptCT12::InitializeScene() {
|
||||
#if BLADERUNNER_ORIGINAL_BUGS
|
||||
#else
|
||||
if (!Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12)
|
||||
&& Global_Variable_Query(kVariableChapter) == 1
|
||||
) {
|
||||
&& Global_Variable_Query(kVariableChapter) < 4) {
|
||||
AI_Movement_Track_Flush(kActorHowieLee);
|
||||
AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12
|
||||
Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault);
|
||||
|
@ -111,7 +111,7 @@ bool SceneScriptDR05::ClickedOnItem(int itemId, bool a2) {
|
||||
|
||||
if (itemId == kItemChain
|
||||
&& Player_Query_Combat_Mode()
|
||||
&& Actor_Query_Goal_Number(kActorMoraji) == kGoalOfficerLearyDefault
|
||||
&& Actor_Query_Goal_Number(kActorMoraji) == kGoalMorajiDefault
|
||||
) {
|
||||
Overlay_Play("DR05OVER", 1, false, true, 0);
|
||||
Item_Remove_From_World(kItemChain);
|
||||
|
@ -364,6 +364,11 @@ void SceneScriptPS04::dialogueWithGuzza() {
|
||||
Delay(1000);
|
||||
Actor_Face_Actor(kActorGuzza, kActorMcCoy, true);
|
||||
Delay(1000);
|
||||
// if McCoy confesses before the body is dumped, then the body should be found (even if in dumpster)
|
||||
if (!Game_Flag_Query(kFlagCT04HomelessBodyThrownAway)) {
|
||||
Game_Flag_Set(kFlagCT04HomelessBodyFound);
|
||||
// return false;
|
||||
}
|
||||
}
|
||||
Actor_Says(kActorGuzza, 700, 34);
|
||||
Actor_Says(kActorMcCoy, 4100, 13);
|
||||
|
@ -113,6 +113,15 @@ void SceneScriptRC01::InitializeScene() {
|
||||
}
|
||||
} else {
|
||||
if (!Game_Flag_Query(kFlagRC02toRC01) && !Game_Flag_Query(kFlagRC03toRC01)) {
|
||||
#if BLADERUNNER_ORIGINAL_BUGS
|
||||
#else
|
||||
// set leary at his original position since otherwise he may overlap badly
|
||||
// with scenery during the video loop of the spinner landing
|
||||
// This only applies in Act 1, before the flag kFlagRC01PoliceDone is set
|
||||
if (Actor_Query_Is_In_Current_Set(kActorOfficerLeary)) {
|
||||
Actor_Set_At_XYZ(kActorOfficerLeary, -261.80f, 6.00f, 79.58f, 512);
|
||||
}
|
||||
#endif // BLADERUNNER_ORIGINAL_BUGS
|
||||
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kRC01LoopInshotWithCrowd, false);
|
||||
}
|
||||
Scene_Loop_Set_Default(kRC01LoopWithCrowd);
|
||||
|
Loading…
x
Reference in New Issue
Block a user