diff options
| -rw-r--r-- | engines/bladerunner/game_constants.h | 2 | ||||
| -rw-r--r-- | engines/bladerunner/savefile.cpp | 2 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai/sadik.cpp | 20 | ||||
| -rw-r--r-- | engines/bladerunner/script/scene/kp06.cpp | 2 | ||||
| -rw-r--r-- | engines/bladerunner/script/scene/kp07.cpp | 2 | ||||
| -rw-r--r-- | engines/bladerunner/script/scene/ug18.cpp | 56 | 
6 files changed, 68 insertions, 16 deletions
| diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h index a046c06376..6e8e1c7bdf 100644 --- a/engines/bladerunner/game_constants.h +++ b/engines/bladerunner/game_constants.h @@ -2302,7 +2302,7 @@ enum GoalSadik {  	kGoalSadikUG18PrepareShootMcCoy = 307,  	kGoalSadikUG18ShootMcCoy = 308,  	kGoalSadikUG18Leave = 310, -	kGoalSadikUG18NeedsReactorCoreFromMcCoy = 416, +	kGoalSadikKP06NeedsReactorCoreFromMcCoy = 416,  	kGoalSadikGone = 599  }; diff --git a/engines/bladerunner/savefile.cpp b/engines/bladerunner/savefile.cpp index 86e2fe713e..6cc4bddeac 100644 --- a/engines/bladerunner/savefile.cpp +++ b/engines/bladerunner/savefile.cpp @@ -124,7 +124,7 @@ bool SaveFileManager::readHeader(Common::SeekableReadStream &in, SaveFileHeader  	int32 pos = s.pos();  	int32 sizeOfSaveFile = s.size();  	if (sizeOfSaveFile > 0 && sizeOfSaveFile < (int32) (pos + 4 + kThumbnailSize)) { -		warning("Unexpected end of save file %s (%02d:%02d %02d/%02d/%04d) reached. Size of file was: %d bytes", +		warning("Unexpected end of save file \"%s\" (%02d:%02d %02d/%02d/%04d) reached. Size of file was: %d bytes",  		         header._name.c_str(),  		         header._hour,  		         header._minute, diff --git a/engines/bladerunner/script/ai/sadik.cpp b/engines/bladerunner/script/ai/sadik.cpp index 0523e9f5b5..a6de93a337 100644 --- a/engines/bladerunner/script/ai/sadik.cpp +++ b/engines/bladerunner/script/ai/sadik.cpp @@ -161,7 +161,7 @@ void AIScriptSadik::OtherAgentEnteredCombatMode(int otherActorId, int combatMode  void AIScriptSadik::ShotAtAndMissed() {  	if (Actor_Query_Goal_Number(kActorSadik) == 414 -	 || Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18NeedsReactorCoreFromMcCoy +	 || Actor_Query_Goal_Number(kActorSadik) == kGoalSadikKP06NeedsReactorCoreFromMcCoy  	) {  		Game_Flag_Set(kFlagMcCoyAttackedReplicants);  		if (Actor_Query_Which_Set_In(kActorSadik) != kSetKP07) { @@ -215,7 +215,7 @@ bool AIScriptSadik::ShotAtAndHit() {  	}  	if (Actor_Query_Goal_Number(kActorSadik) == 414 -	 || Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18NeedsReactorCoreFromMcCoy +	 || Actor_Query_Goal_Number(kActorSadik) == kGoalSadikKP06NeedsReactorCoreFromMcCoy  	) {  		Game_Flag_Set(kFlagMcCoyAttackedReplicants);  		if (Actor_Query_Which_Set_In(kActorSadik) != kSetKP07) { @@ -337,6 +337,7 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {  		return true;  	case kGoalSadikUG18Decide: +		// This is called first and then the scene script SceneScriptUG18::ActorChangedGoal  		Actor_Set_Targetable(kActorSadik, false);  		return true; @@ -363,11 +364,20 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {  	case kGoalSadikUG18ShootMcCoy:  		if (Player_Query_Current_Scene() == kSceneUG18) { +#if BLADERUNNER_ORIGINAL_BUGS  			Actor_Force_Stop_Walking(kActorMcCoy);  			Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);  			Sound_Play(kSfxLGCAL1, 100, 0, 0, 50);  			Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie);  			Actor_Retired_Here(kActorMcCoy, 6, 6, true, -1); +#else +			Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack); +			Sound_Play(kSfxLGCAL1, 100, 0, 0, 50); +			Player_Loses_Control(); +			Actor_Force_Stop_Walking(kActorMcCoy); +			Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie); +			Actor_Retired_Here(kActorMcCoy, 6, 6, true, kActorSadik); +#endif // BLADERUNNER_ORIGINAL_BUGS  		}  		return true; @@ -443,10 +453,10 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {  		Actor_Says(kActorSadik, 240, kAnimationModeTalk);  		Actor_Says(kActorSadik, 250, kAnimationModeTalk);  		Actor_Says(kActorSadik, 260, kAnimationModeTalk); -		Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18NeedsReactorCoreFromMcCoy); +		Actor_Set_Goal_Number(kActorSadik, kGoalSadikKP06NeedsReactorCoreFromMcCoy);  		return true; -	case kGoalSadikUG18NeedsReactorCoreFromMcCoy: +	case kGoalSadikKP06NeedsReactorCoreFromMcCoy:  		Loop_Actor_Walk_To_XYZ(kActorSadik, -961.0f, 0.0f, -778.0f, 0, false, false, false);  		Actor_Face_Heading(kActorSadik, 150, false);  		return true; @@ -459,7 +469,7 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {  		Actor_Says(kActorSadik, 330, kAnimationModeTalk);  		Actor_Says(kActorMcCoy, 2335, kAnimationModeTalk);  		Actor_Says(kActorSadik, 340, kAnimationModeTalk); -		Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18NeedsReactorCoreFromMcCoy); +		Actor_Set_Goal_Number(kActorSadik, kGoalSadikKP06NeedsReactorCoreFromMcCoy);  		return true;  	case 418: diff --git a/engines/bladerunner/script/scene/kp06.cpp b/engines/bladerunner/script/scene/kp06.cpp index 0ec9d88170..d8e7299350 100644 --- a/engines/bladerunner/script/scene/kp06.cpp +++ b/engines/bladerunner/script/scene/kp06.cpp @@ -113,7 +113,7 @@ bool SceneScriptKP06::ClickedOnExit(int exitId) {  	if (exitId == 1) {  		if (Actor_Clue_Query(kActorSadik, kCluePowerSource) -		 || Actor_Query_Goal_Number(kActorSadik) != kGoalSadikUG18NeedsReactorCoreFromMcCoy +		 || Actor_Query_Goal_Number(kActorSadik) != kGoalSadikKP06NeedsReactorCoreFromMcCoy  		) {  			if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -731.0f, 8.26f, -657.0f, 0, true, false, false)) {  				if (Game_Flag_Query(kFlagMcCoyIsHelpingReplicants)) { diff --git a/engines/bladerunner/script/scene/kp07.cpp b/engines/bladerunner/script/scene/kp07.cpp index fc7e6080e0..4d3ed450ec 100644 --- a/engines/bladerunner/script/scene/kp07.cpp +++ b/engines/bladerunner/script/scene/kp07.cpp @@ -178,7 +178,7 @@ void SceneScriptKP07::PlayerWalkedIn() {  			Actor_Says(kActorClovis, 1240, 3);  			Actor_Says(kActorMcCoy, 8500, 3);  			Actor_Says(kActorClovis, 1250, 3); -			if (Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18NeedsReactorCoreFromMcCoy) { +			if (Actor_Query_Goal_Number(kActorSadik) == kGoalSadikKP06NeedsReactorCoreFromMcCoy) {  				Actor_Put_In_Set(kActorSadik, kSetKP07);  				Global_Variable_Increment(kVariableReplicantsSurvivorsAtMoonbus, 1);  				Actor_Set_At_XYZ(kActorSadik, -12.0f, -41.58f, 72.0f, 0); diff --git a/engines/bladerunner/script/scene/ug18.cpp b/engines/bladerunner/script/scene/ug18.cpp index 1c14c06e27..8b6c1da281 100644 --- a/engines/bladerunner/script/scene/ug18.cpp +++ b/engines/bladerunner/script/scene/ug18.cpp @@ -21,7 +21,6 @@   */  #include "bladerunner/script/scene_script.h" -  namespace BladeRunner {  enum kUG18Loops { @@ -291,7 +290,7 @@ void SceneScriptUG18::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo  			if (Actor_Query_Friendliness_To_Other(kActorClovis, kActorMcCoy) > 55  			 && Game_Flag_Query(kFlagMcCoyRetiredHuman)  			) { -				Actor_Says(kActorClovis, 660, 13); +				Actor_Says(kActorClovis, 660, 13); // Brother, you killed a human...  				Actor_Says(kActorMcCoy, 5995, 13);  				Actor_Says(kActorClovis, 670, 13);  				Actor_Says(kActorMcCoy, 6000, 13); @@ -314,6 +313,7 @@ void SceneScriptUG18::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo  			break;  		case 305: +			// never triggered  			Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);  			Sound_Play(kSfxLGCAL1, 100, 0, 0, 50);  			Actor_Force_Stop_Walking(kActorMcCoy); @@ -376,24 +376,40 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {  		Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);  		Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);  		Actor_Change_Animation_Mode(kActorGuzza, kAnimationModeCombatHit); -		ADQ_Add(kActorClovis, 630, 13); +		ADQ_Add(kActorClovis, 630, 13); // "Whatever is born of mortal birth, must be consumed with the earth."  		Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG18SadikWillShootGuzza);  		break;  	case kGoalGuzzaUG18ShotByMcCoy:  		// Bug in the game, shot animation is not reset so McCoy looks still while he is shooting +#if BLADERUNNER_ORIGINAL_BUGS +#else +		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAim); +#endif // BLADERUNNER_ORIGINAL_BUGS  		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);  		Sound_Play(kSfxLGCAL2, 100, 0, 0, 50);  		Actor_Change_Animation_Mode(kActorGuzza, kAnimationModeCombatHit);  		Delay(900); +#if BLADERUNNER_ORIGINAL_BUGS +#else +		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAim); +#endif // BLADERUNNER_ORIGINAL_BUGS  		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);  		Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);  		Actor_Change_Animation_Mode(kActorGuzza, kAnimationModeCombatHit);  		Delay(1100); +#if BLADERUNNER_ORIGINAL_BUGS +#else +		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAim); +#endif // BLADERUNNER_ORIGINAL_BUGS  		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);  		Sound_Play(kSfxLGCAL1, 100, 0, 0, 50);  		Actor_Change_Animation_Mode(kActorGuzza, kAnimationModeCombatHit);  		Delay(900); +#if BLADERUNNER_ORIGINAL_BUGS +#else +		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAim); +#endif // BLADERUNNER_ORIGINAL_BUGS  		Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);  		Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);  		Actor_Change_Animation_Mode(kActorGuzza, 61); @@ -408,11 +424,15 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {  		Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaUG18FallDown);  		Player_Gains_Control();  		ADQ_Add_Pause(2000); -		ADQ_Add(kActorSadik, 360, -1); +		ADQ_Add(kActorSadik, 360, -1); // The Hunter, he do us a favor...  		ADQ_Add_Pause(2000); -		ADQ_Add(kActorClovis, 650, 14); +		ADQ_Add(kActorClovis, 650, 14); // So, what should we do with this detective.  		ADQ_Add(kActorSadik, 370, 14); -		ADQ_Add(kActorClovis, 1320, 14); +		ADQ_Add(kActorClovis, 1320, 14); // Perhaps you're right +#if BLADERUNNER_ORIGINAL_BUGS +#else +		Actor_Retired_Here(kActorGuzza, 72, 32, true, kActorMcCoy); +#endif // BLADERUNNER_ORIGINAL_BUGS  		Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG18GuzzaDied);  		break; @@ -441,6 +461,19 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {  		Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);  		Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);  		Actor_Change_Animation_Mode(kActorGuzza, 61); +#if BLADERUNNER_ORIGINAL_BUGS +#else +		// don't allow code to reach the overlay animation if the dialogue queue is not flushed +		// otherwise this animation is stored and if the player saves the game during the queued dialogue +		// then upon re-load it would play immediately (before Guzza falls) +		ADQ_Wait_For_All_Queued_Dialogue(); +#endif // BLADERUNNER_ORIGINAL_BUGS +		if (_vm->_cutContent) { +			// same logic as using the BB06OVER for doll explosion case in BB06 +			Overlay_Play("UG18OVER", 1, true, true,  0); +			Overlay_Play("UG18OVER", 2, true, false, 0); +			Global_Variable_Set(kVariableUG18StateOfGuzzaCorpse, kUG18GuzzaCorpseFloatsDown); +		}  		ADQ_Add_Pause(2000);  		ADQ_Add(kActorClovis, 650, 14);  		ADQ_Add(kActorSadik, 370, 14); @@ -452,11 +485,20 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {  		break;  	case kGoalClovisUG18GuzzaDied: +#if BLADERUNNER_ORIGINAL_BUGS  		Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18Move); +#else +		// otherwise this gets repeated whenever dialogue queue re-empties +		if (Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18Wait) { +			Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18Move); +		} +#endif // BLADERUNNER_ORIGINAL_BUGS  		break;  	}  	if (Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18WillShootMcCoy) { +		// Bug in the original game - Why is Sadik set to die animation here? +		// never triggered  		Actor_Change_Animation_Mode(kActorSadik, kAnimationModeDie);  		Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18PrepareShootMcCoy);  		Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG18Leave); @@ -574,7 +616,7 @@ void SceneScriptUG18::talkWithClovis() {  	ADQ_Add(kActorGuzza, 1180, 58);  	ADQ_Add(kActorClovis, 610, 13);  	ADQ_Add(kActorGuzza, 1190, 60); -	ADQ_Add(kActorClovis, 620, 13); +	ADQ_Add(kActorClovis, 620, 13); // Lieutenant, we have everything we need...  	ADQ_Add(kActorGuzza, 1200, 59);  } | 
