Skip to content
Permalink
Browse files

BLADERUNNER: Fix CT02 map obstacles glitches

  • Loading branch information...
antoniou79 committed Sep 9, 2019
1 parent ded24d9 commit a4f9842065351c92dc20677dcc4a5bc2f8dc9542
Showing with 42 additions and 1 deletion.
  1. +27 −1 engines/bladerunner/script/scene/ct02.cpp
  2. +15 −0 engines/bladerunner/set.cpp
@@ -40,9 +40,15 @@ void SceneScriptCT02::InitializeScene() {
Game_Flag_Reset(kFlagCT03toCT02);
Setup_Scene_Information(-154.83f, -145.11f, 9.39f, 516);
} else if (Game_Flag_Query(kFlagCT02McCoyCombatReady)) {
// after soup dumping
Setup_Scene_Information(-213.82f, -145.11f, 214.43f, 82);
} else {
#if BLADERUNNER_ORIGINAL_BUGS
Setup_Scene_Information(-119.02f, -145.11f, 240.99f, 768);
#else
// puts McCoy within the obstacle map - prevents clipping through objects
Setup_Scene_Information(-117.43f, -145.11f, 262.36f, 768);
#endif // BLADERUNNER_ORIGINAL_BUGS
}
if (_vm->_cutContent
&& Global_Variable_Query(kVariableChapter) == 1
@@ -78,7 +84,23 @@ void SceneScriptCT02::InitializeScene() {

void SceneScriptCT02::SceneLoaded() {
Obstacle_Object("STOVE-1", true);
#if BLADERUNNER_ORIGINAL_BUGS
Unobstacle_Object("BACK-DOOR", true);
#else
Obstacle_Object("STOVE-2", true);
Obstacle_Object("STOVE-4", true);
Obstacle_Object("BACKWALL", true);
// Back wall is split to two parts since there is a back door in the middle
Obstacle_Object("BACKWALL2", true);
Obstacle_Object("LFTSTOVE-1", true);
Obstacle_Object("FRIDGE-1", true);
if (Actor_Clue_Query(kActorMcCoy, kClueZubenRunsAway)) {
Unobstacle_Object("BACK-DOOR", true);
} else {
Obstacle_Object("BACK-DOOR", true);
}
Unclickable_Object("BACKWALL2");
#endif // BLADERUNNER_ORIGINAL_BUGS
Unclickable_Object("STOVE-1");
Unclickable_Object("STOVE-2");
Unclickable_Object("STOVE-3");
@@ -106,7 +128,7 @@ void SceneScriptCT02::SceneLoaded() {
}
if (Game_Flag_Query(kFlagCT02McCoyCombatReady)) {
Game_Flag_Reset(kFlagCT02McCoyCombatReady);
Actor_Change_Animation_Mode(kActorMcCoy, 0);
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeIdle);
Player_Set_Combat_Mode(true);
Player_Gains_Control();
}
@@ -225,6 +247,10 @@ void SceneScriptCT02::dialogueWithZuben() {
if (Actor_Query_Friendliness_To_Other(kActorZuben, kActorMcCoy) < 44) {
Scene_Exits_Disable();
Actor_Clue_Acquire(kActorMcCoy, kClueZubenRunsAway, true, -1);
#if BLADERUNNER_ORIGINAL_BUGS
#else
Unobstacle_Object("BACK-DOOR", true);
#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Set_Goal_Number(kActorZuben, kGoalZubenCT02PushPot);
Game_Flag_Set(kFlagCT02PotTipped);
if (_vm->_cutContent) {
@@ -452,6 +452,16 @@ void Set::overrideSceneObjectInfo(int objectId) const {
_objects[objectId].bbox.setXYZ(-75.17f, -1239.29f, 108340.13f, -56.32f, -1221.16f, 108365.65f);
}
break;
case kSceneCT02:
// prevent McCoy from moving "around and behind" the map
if (objectId == 18 && _objects[objectId].name == "BACK-DOOR") {
_objects[objectId].bbox.setXYZ(-177.95f, -145.11f, -86.25f, -130.13f, -49.00f, -4.74f);
} else if (objectId == 19 && _objects[objectId].name == "BACKWALL") {
_objects[objectId].bbox.setXYZ(-323.10f, -162.41f, -16.25f, -177.95f, 160.29f, -4.74f);
} else if (objectId == 7 && _objects[objectId].name == "LFTSTOVE-1") {
_objects[objectId].bbox.setXYZ(-315.17f, -145.11f, 171.93f, -282.86f, -103.98f, 225.29f);
}
break;
case kSceneCT04:
// prevent McCoy or transient from blending/glitching with the right wall
if (objectId == 6 && _objects[objectId].name == "BOX04") {
@@ -566,6 +576,11 @@ void Set::patchInAdditionalObjectsInSet() {
Common::String custObjName;
BoundingBox bbox;
switch (_vm->_scene->getSceneId()) {
case kSceneCT02:
bbox = BoundingBox(-130.13f, -162.41f, -16.25f, -81.74f, 160.29f, -4.74f);
custObjName = "BACKWALL2";
setupNewObjectInSet(custObjName, bbox);
break;
case kSceneHF06:
// block clicking / path access to northern part of the scene
// which causes McCoy and Police officers/ rats to go behind the map

0 comments on commit a4f9842

Please sign in to comment.
You can’t perform that action at this time.