Skip to content

Commit

Permalink
BLADERUNNER: BB01, DR01, NR01 reduce freq of intro scene
Browse files Browse the repository at this point in the history
They'll play the first time, but have 33% probability to play on subsequent visits
  • Loading branch information
antoniou79 committed Apr 27, 2019
1 parent 2858873 commit 083bfd1
Show file tree
Hide file tree
Showing 22 changed files with 145 additions and 133 deletions.
6 changes: 3 additions & 3 deletions engines/bladerunner/game_constants.h
Expand Up @@ -1134,12 +1134,12 @@ enum Flags {
kFlagPS05TV4 = 692,
kFlagUG03DeadHomeless = 693,
kFlagUG14DeadHomeless = 694,
// 695 is never used
kFlagNR01VisitedFirstTimeWithSpinner = 695, // Re-purposed. Original: 695 is never used
kFlagKP07ReplicantsAttackMcCoy = 696,
kFlagKP07McCoyPulledGun = 697,
kFlagUG15LanceLuthorTrade = 698,
kFlagTalkToZuben = 699,
// 700 is never used
kFlagBB01VisitedFirstTimeWithSpinner = 700, // Re-purposed. Original: 700 is never used
kFlagMcCoyAttackedLucy = 701,
kFlagBulletBobDead = 702,
kFlagUG18BriefcaseTaken = 703,
Expand Down Expand Up @@ -1167,7 +1167,7 @@ enum Flags {
kFlagCT11DogWrapperAvailable = 725,
kFlagAR02Entered = 726,
kFlagPS04WeaponsOrderForm = 727,
kFlagDR01Visited = 728, // Re-purposed: Original: 728 is never used
kFlagDR01Visited = 728, // Re-purposed. Original: 728 is never used
kFlagNR08DektoraShow = 729
};

Expand Down
24 changes: 12 additions & 12 deletions engines/bladerunner/script/scene/ar01.cpp
Expand Up @@ -26,10 +26,10 @@ namespace BladeRunner {

enum kAR01Loops {
kAR01LoopFromAR02WithSpinner = 0,
kAR01LoopInshoot = 1,
kAR01LoopInshot = 1,
kAR01LoopMainLoop = 2,
kAR01LoopDoorAnim = 4,
kAR01LoopOutshoot = 5,
kAR01LoopOutshot = 5,
kAR01LoopFromAR02NoSpinner = 6,
kAR01LoopMainLoopNoSpinner = 7
};
Expand Down Expand Up @@ -89,7 +89,7 @@ void SceneScriptAR01::InitializeScene() {
) {
Actor_Set_Invisible(kActorMcCoy, true);
Game_Flag_Set(kFlagArrivedFromSpinner2);
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kAR01LoopInshoot, false);
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kAR01LoopInshot, false);
Scene_Loop_Set_Default(kAR01LoopMainLoop);
} else if (Game_Flag_Query(kFlagSpinnerAtAR01)
&& Game_Flag_Query(kFlagAR02toAR01)
Expand Down Expand Up @@ -272,63 +272,63 @@ bool SceneScriptAR01::ClickedOnExit(int exitId) {
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtPS01);
Set_Enter(kSetPS01, kScenePS01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
case kSpinnerDestinationMcCoysApartment:
Game_Flag_Set(kFlagMcCoyInMcCoyApartment);
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtMA01);
Set_Enter(kSetMA01, kSceneMA01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
case kSpinnerDestinationRuncitersAnimals:
Game_Flag_Set(kFlagMcCoyInRunciters);
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtRC01);
Set_Enter(kSetRC01, kSceneRC01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
case kSpinnerDestinationChinatown:
Game_Flag_Set(kFlagMcCoyInChinaTown);
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtCT01);
Set_Enter(kSetCT01_CT12, kSceneCT01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
case kSpinnerDestinationTyrellBuilding:
Game_Flag_Set(kFlagMcCoyInTyrellBuilding);
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtTB02);
Set_Enter(kSetTB02_TB03, kSceneTB02);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
case kSpinnerDestinationDNARow:
Game_Flag_Set(kFlagMcCoyInDNARow);
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtDR01);
Set_Enter(kSetDR01_DR02_DR04, kSceneDR01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
case kSpinnerDestinationBradburyBuilding:
Game_Flag_Set(kFlagMcCoyInBradburyBuilding);
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtBB01);
Set_Enter(kSetBB01, kSceneBB01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
case kSpinnerDestinationNightclubRow:
Game_Flag_Set(kFlagMcCoyInNightclubRow);
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtNR01);
Set_Enter(kSetNR01, kSceneNR01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
case kSpinnerDestinationHysteriaHall:
Game_Flag_Set(kFlagMcCoyInHysteriaHall);
Game_Flag_Reset(kFlagSpinnerAtAR01);
Game_Flag_Set(kFlagSpinnerAtHF01);
Set_Enter(kSetHF01, kSceneHF01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kAR01LoopOutshot, true);
break;
default:
Game_Flag_Set(kFlagMcCoyInAnimoidRow);
Expand Down
30 changes: 19 additions & 11 deletions engines/bladerunner/script/scene/bb01.cpp
Expand Up @@ -28,7 +28,7 @@ enum kBB01Loops {
kBB01LoopInshot = 0,
kBB01LoopMainLoop = 1,
kBB01LoopDoorAnim = 3,
kBB01LoopOutshoot = 4,
kBB01LoopOutshot = 4,
kBB01LoopMainLoopNoSpinner = 5
};

Expand Down Expand Up @@ -66,7 +66,12 @@ void SceneScriptBB01::InitializeScene() {
&& !Game_Flag_Query(kFlagDR02toBB01)
&& !Game_Flag_Query(kFlagBB02toBB01)
) {
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kBB01LoopInshot, false);
if (!Game_Flag_Query(kFlagBB01VisitedFirstTimeWithSpinner)
|| Random_Query(1, 3) == 1
) {
// enhancement: don't always play after first visit
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kBB01LoopInshot, false);
}
Scene_Loop_Set_Default(kBB01LoopMainLoop);
} else if (Game_Flag_Query(kFlagSpinnerAtBB01)
&& Game_Flag_Query(kFlagDR02toBB01)
Expand Down Expand Up @@ -135,63 +140,63 @@ bool SceneScriptBB01::ClickedOnExit(int exitId) {
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtPS01);
Set_Enter(kSetPS01, kScenePS01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
case kSpinnerDestinationMcCoysApartment:
Game_Flag_Set(kFlagMcCoyInMcCoyApartment);
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtMA01);
Set_Enter(kSetMA01, kSceneMA01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
case kSpinnerDestinationRuncitersAnimals:
Game_Flag_Set(kFlagMcCoyInRunciters);
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtRC01);
Set_Enter(kSetRC01, kSceneRC01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
case kSpinnerDestinationChinatown:
Game_Flag_Set(kFlagMcCoyInChinaTown);
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtCT01);
Set_Enter(kSetCT01_CT12, kSceneCT01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
case kSpinnerDestinationAnimoidRow:
Game_Flag_Set(kFlagMcCoyInAnimoidRow);
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtAR01);
Set_Enter(kSetAR01_AR02, kSceneAR01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
case kSpinnerDestinationTyrellBuilding:
Game_Flag_Set(kFlagMcCoyInTyrellBuilding);
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtTB02);
Set_Enter(kSetTB02_TB03, kSceneTB02);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
case kSpinnerDestinationDNARow:
Game_Flag_Set(kFlagMcCoyInDNARow);
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtDR01);
Set_Enter(kSetDR01_DR02_DR04, kSceneDR01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
case kSpinnerDestinationNightclubRow:
Game_Flag_Set(kFlagMcCoyInNightclubRow);
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtNR01);
Set_Enter(kSetNR01, kSceneNR01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
case kSpinnerDestinationHysteriaHall:
Game_Flag_Set(kFlagMcCoyInHysteriaHall);
Game_Flag_Reset(kFlagSpinnerAtBB01);
Game_Flag_Set(kFlagSpinnerAtHF01);
Set_Enter(kSetHF01, kSceneHF01);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshoot, true);
Scene_Loop_Start_Special(kSceneLoopModeChangeSet, kBB01LoopOutshot, true);
break;
default:
Game_Flag_Set(kFlagMcCoyInBradburyBuilding);
Expand Down Expand Up @@ -244,6 +249,9 @@ void SceneScriptBB01::PlayerWalkedIn() {
} else if (Game_Flag_Query(kFlagBB02toBB01)) {
Game_Flag_Reset(kFlagBB02toBB01);
} else {
if (!Game_Flag_Query(kFlagBB01VisitedFirstTimeWithSpinner) && Game_Flag_Query(kFlagSpinnerAtBB01)) {
Game_Flag_Set(kFlagBB01VisitedFirstTimeWithSpinner);
}
Loop_Actor_Walk_To_XYZ(kActorMcCoy, 43.0f, 0.0f, 954.0f, 0, false, false, 0);
}
}
Expand Down
9 changes: 5 additions & 4 deletions engines/bladerunner/script/scene/ct01.cpp
Expand Up @@ -27,7 +27,7 @@ namespace BladeRunner {
enum kCT01Loops {
kCT01LoopInshotFromCT12WithSpinner = 0, // 0 - 14
kCT01LoopInshot = 1, // 15 - 194
kCT01LoopMain = 2, // 195 - 255
kCT01LoopMainLoop = 2, // 195 - 255
kCT01LoopDoorAnim = 4, // 256 - 315
kCT01LoopOutshot = 5, // 316 - 435
kCT01LoopInshotFromCT12NoSpinner = 6, // 436 - 450
Expand Down Expand Up @@ -71,9 +71,10 @@ void SceneScriptCT01::InitializeScene() {
// Note 2: Gordo sitting at the diner overlaps with the counter bar in front of him
// 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
&& Actor_Query_Which_Set_In(kActorGordo) != kSetCT01_CT12
&& Random_Query(1, 3) == 1
){
// enhancement: don't always play
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kCT01LoopInshot, false);
}
// Pause generic walkers outside special loop
Expand Down Expand Up @@ -115,7 +116,7 @@ void SceneScriptCT01::InitializeScene() {
Ambient_Sounds_Add_Sound(kSfxTHNDER4, 20, 40, 33, 50, -100, 100, -101, -101, 0, 0);

if (Game_Flag_Query(kFlagSpinnerAtCT01)) {
Scene_Loop_Set_Default(kCT01LoopMain);
Scene_Loop_Set_Default(kCT01LoopMainLoop);
} else {
Scene_Loop_Set_Default(kCT01LoopMainLoopNoSpinner);
}
Expand Down
4 changes: 2 additions & 2 deletions engines/bladerunner/script/scene/ct02.cpp
Expand Up @@ -25,7 +25,7 @@
namespace BladeRunner {

enum kCT02Loops {
kCT02LoopMain = 0,
kCT02LoopMainLoop = 0,
kCT02LoopTippingPot = 2,
kCT02LoopMainPotTipped = 3
};
Expand Down Expand Up @@ -64,7 +64,7 @@ void SceneScriptCT02::InitializeScene() {
if (Game_Flag_Query(kFlagCT02PotTipped)) {
Scene_Loop_Set_Default(kCT02LoopMainPotTipped);
} else {
Scene_Loop_Set_Default(kCT02LoopMain);
Scene_Loop_Set_Default(kCT02LoopMainLoop);
}
}

Expand Down
12 changes: 6 additions & 6 deletions engines/bladerunner/script/scene/ct04.cpp
Expand Up @@ -24,18 +24,18 @@

namespace BladeRunner {

enum kCT03Loops {
kCT03LoopInshoot = 0,
kCT03LoopMain = 1
enum kCT04Loops {
kCT04LoopInshot = 0,
kCT04LoopMainLoop = 1
};

void SceneScriptCT04::InitializeScene() {
if (Game_Flag_Query(kFlagCT03toCT04)) {
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kCT03LoopInshoot, false);
Scene_Loop_Set_Default(kCT03LoopMain);
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kCT04LoopInshot, false);
Scene_Loop_Set_Default(kCT04LoopMainLoop);
Setup_Scene_Information(-150.0f, -621.3f, 357.0f, 533);
} else {
Scene_Loop_Set_Default(kCT03LoopMain);
Scene_Loop_Set_Default(kCT04LoopMainLoop);
Setup_Scene_Information(-82.86f, -621.3f, 769.03f, 1020);
}

Expand Down
4 changes: 2 additions & 2 deletions engines/bladerunner/script/scene/ct11.cpp
Expand Up @@ -25,7 +25,7 @@
namespace BladeRunner {

enum kCT11Loops {
kCT11LoopMain = 0,
kCT11LoopMainLoop = 0,
kCT11LoopMainNoCar = 2
};

Expand All @@ -52,7 +52,7 @@ void SceneScriptCT11::InitializeScene() {
if (Global_Variable_Query(kVariableChapter) > 3) {
Scene_Loop_Set_Default(kCT11LoopMainNoCar);
} else {
Scene_Loop_Set_Default(kCT11LoopMain);
Scene_Loop_Set_Default(kCT11LoopMainLoop);
}
}

Expand Down
25 changes: 4 additions & 21 deletions engines/bladerunner/script/scene/dr01.cpp
Expand Up @@ -29,8 +29,7 @@ enum kDR01Loops {
kDR01LoopPanFromDR02 = 1,
kDR01LoopPanFromDR04Pre = 2,
kDR01LoopPanFromDR04Post = 3,
kDR01LoopMainLoop = 4,
kDR01LoopMainLoopNoFirstFrame = 5,
kDR01LoopMainLoop = 4
};

void SceneScriptDR01::InitializeScene() {
Expand Down Expand Up @@ -86,8 +85,9 @@ void SceneScriptDR01::InitializeScene() {
Scene_Loop_Set_Default(kDR01LoopMainLoop);
} else {
if ((!Game_Flag_Query(kFlagDR01Visited) && Global_Variable_Query(kVariableChapter) == 2)
|| Random_Query(1, 5) == 1)
{ // enhancement: don't always play the bikers after first visit
|| Random_Query(1, 3) == 1)
{
// enhancement: don't always play after first visit
// But first visit in 2nd chapter should always show it.
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kDR01LoopBikerInshot, false);
}
Expand Down Expand Up @@ -268,26 +268,9 @@ void SceneScriptDR01::PlayerWalkedIn() {
) {
Player_Loses_Control();
Loop_Actor_Walk_To_XYZ(kActorMcCoy, -447.39f, 0.16f, -92.38f, 0, false, false, 0);
#if BLADERUNNER_RESTORED_CUT_CONTENT
if (!Game_Flag_Query(kFlagDR01Visited)) {
Game_Flag_Set(kFlagDR01Visited);
// Make use of the kFlagDirectorsCut like in CT01 case
// extra flags and chapter check are for compatibility / sane behavior
// in imported original save games (or "exported" save games for the original)
if (
Global_Variable_Query(kVariableChapter) == 2
&& !Game_Flag_Query(kFlagDR03ChewTalk1)
&& !Game_Flag_Query(kFlagDR05MorajiTalk)
&& !Game_Flag_Query(kFlagDirectorsCut)) {
Actor_Voice_Over(600, kActorVoiceOver);
Actor_Voice_Over(610, kActorVoiceOver);
Actor_Voice_Over(620, kActorVoiceOver);
Actor_Voice_Over(630, kActorVoiceOver);
Actor_Voice_Over(640, kActorVoiceOver);
Actor_Voice_Over(650, kActorVoiceOver);
}
}
#endif // BLADERUNNER_RESTORED_CUT_CONTENT
Player_Gains_Control();
}
Game_Flag_Reset(kFlagDR02toDR01);
Expand Down
4 changes: 2 additions & 2 deletions engines/bladerunner/script/scene/dr05.cpp
Expand Up @@ -25,7 +25,7 @@
namespace BladeRunner {

enum kDR05Loops {
kDR05LoopMain = 0,
kDR05LoopMainLoop = 0,
kDR05LoopMainDestroyed = 2
};

Expand All @@ -44,7 +44,7 @@ void SceneScriptDR05::InitializeScene() {
if (Game_Flag_Query(kFlagDR05BombExploded)) {
Scene_Loop_Set_Default(kDR05LoopMainDestroyed);
} else {
Scene_Loop_Set_Default(kDR05LoopMain);
Scene_Loop_Set_Default(kDR05LoopMainLoop);
}
}

Expand Down

0 comments on commit 083bfd1

Please sign in to comment.