BLADERUNNER: Fix for Sebastian's doll in BB06

Targeting clicking bounding box fixed. Animation weirdness minimized.

Also restored explosion animation.
This commit is contained in:
Thanasis Antoniou 2019-02-25 05:39:49 +02:00
parent 390b243ef2
commit 09d3460780
2 changed files with 66 additions and 2 deletions

View file

@ -63,17 +63,36 @@ void SceneScriptBB06::InitializeScene() {
Game_Flag_Reset(kFlagBB51toBB06b);
} else {
Scene_Loop_Set_Default(1);
#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
#else
// bugfix: case of not transitioning from BB51: chess/ egg boiler sub-space
if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
Overlay_Play("BB06OVER", 1, false, false, 0);
}
#endif // BLADERUNNER_ORIGINAL_BUGS
}
#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
Overlay_Play("BB06OVER", 1, true, false, 0); // TODO: check, it's is playing while the background is still panning so it looks pretty weird
Overlay_Play("BB06OVER", 1, true, false, 0); // Original bug: it is playing while the background is still panning so it looks pretty weird
}
#endif // BLADERUNNER_ORIGINAL_BUGS
}
void SceneScriptBB06::SceneLoaded() {
Obstacle_Object("V2CHESSTBL01", true);
Clickable_Object("BOX31");
Item_Add_To_World(kItemBB06ControlBox, 931, kSetBB02_BB04_BB06_BB51, -127.0f, 68.42f, 57.0f, 0, 8, 8, true, true, false, true);
#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
// This Item_Add_To_World call is only ok for the transition from BB51 to BB06,
// otherwise the doll item is not placed in the current set
Item_Add_To_World(kItemBB06ControlBox, 931, kSetBB06_BB07, -127.0f, 68.42f, 57.0f, 0, 8, 8, true, true, false, true);
#else
// Add doll item based on which SET version of the "room" we are in
Item_Add_To_World(kItemBB06ControlBox, 931, Player_Query_Current_Set(), -117.24f, 46.41f, 76.66f, 256, 28, 16, true, true, false, true);
if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
Item_Flag_As_Non_Target(kItemBB06ControlBox);
}
#endif // BLADERUNNER_ORIGINAL_BUGS
}
bool SceneScriptBB06::MouseClick(int x, int y) {
@ -101,12 +120,24 @@ bool SceneScriptBB06::ClickedOnActor(int actorId) {
bool SceneScriptBB06::ClickedOnItem(int itemId, bool a2) {
if (itemId == kItemBB06ControlBox) {
#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
if (Player_Query_Combat_Mode()) {
Overlay_Play("BB06OVER", 1, true, true, 0);
Game_Flag_Set(kFlagBB06AndroidDestroyed);
Item_Remove_From_World(kItemBB06ControlBox);
return true;
}
#else
if (Player_Query_Combat_Mode()) {
Overlay_Play("BB06OVER", 0, false, true, 0); // explosion - don't loop
Game_Flag_Set(kFlagBB06AndroidDestroyed);
// flag item kItemBB06ControlBox as non-combat-target
Item_Flag_As_Non_Target(kItemBB06ControlBox);
return true;
} else {
ClickedOn3DObject("BOX31", false); // clone behavior of box31
}
#endif // BLADERUNNER_ORIGINAL_BUGS
}
return false;
}
@ -152,6 +183,15 @@ void SceneScriptBB06::SceneFrameAdvanced(int frame) {
if (frame == 34) {
Ambient_Sounds_Play_Sound(447, 40, -50, -50, 10);
}
#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
#else
// last frame of transition is 15, try 13 for better transition - minimize weird effect
if (frame == 13) { // executed once during transition FROM bb51 (chess sub space)
if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
Overlay_Play("BB06OVER", 1, false, false, 0);
}
}
#endif // BLADERUNNER_ORIGINAL_BUGS
if (frame == 16) {
Ambient_Sounds_Play_Sound(448, 20, -50, -50, 10);
}
@ -177,6 +217,12 @@ void SceneScriptBB06::PlayerWalkedIn() {
}
void SceneScriptBB06::PlayerWalkedOut() {
#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
#else
// this might be redundant -- the item is not visible in BB07 even if it was drawn in BB06
Item_Remove_From_World(kItemBB06ControlBox); // this removes the item from the set so it won't exist in the next scene
// mainly to remove it completely from BB07
#endif // BLADERUNNER_ORIGINAL_BUGS
}
void SceneScriptBB06::DialogueQueueFlushed(int a1) {

View file

@ -47,6 +47,14 @@ void SceneScriptBB51::InitializeScene() {
Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 0, false);
Scene_Loop_Set_Default(1);
#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
#else
if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
Overlay_Play("BB06OVER", 1, false, false, 0);
}
#endif // BLADERUNNER_ORIGINAL_BUGS
}
void SceneScriptBB51::SceneLoaded() {
@ -111,6 +119,16 @@ bool SceneScriptBB51::ClickedOn2DRegion(int region) {
}
void SceneScriptBB51::SceneFrameAdvanced(int frame) {
#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
#else
// Scene Transition loop frames range from 0 to 14
// keep destroyedDoll overlay for 2-3 frames - to minimize weird effect
if (frame == 2) { // executed once during transition to BB51 (chess sub space)
if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
Overlay_Remove("BB06OVER");
}
}
#endif // BLADERUNNER_ORIGINAL_BUGS
}
void SceneScriptBB51::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet) {