diff options
Diffstat (limited to 'engines/bladerunner/script/ug16.cpp')
-rw-r--r-- | engines/bladerunner/script/ug16.cpp | 369 |
1 files changed, 369 insertions, 0 deletions
diff --git a/engines/bladerunner/script/ug16.cpp b/engines/bladerunner/script/ug16.cpp new file mode 100644 index 0000000000..2a4a028c3d --- /dev/null +++ b/engines/bladerunner/script/ug16.cpp @@ -0,0 +1,369 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "bladerunner/script/script.h" + +namespace BladeRunner { + +void ScriptUG16::InitializeScene() { + if (Game_Flag_Query(552)) { + Setup_Scene_Information(-270.76f, -34.88f, -504.02f, 404); + Game_Flag_Reset(552); + } else if (Game_Flag_Query(152)) { + Setup_Scene_Information(-322.0f, -34.0f, -404.0f, 345); + Game_Flag_Reset(152); + } else { + Setup_Scene_Information(-318.0f, -34.0f, -216.0f, 340); + Game_Flag_Reset(354); + } + Scene_Exit_Add_2D_Exit(0, 242, 169, 282, 262, 3); + Scene_Exit_Add_2D_Exit(1, 375, 166, 407, 251, 3); + Scene_Exit_Add_2D_Exit(2, 461, 148, 523, 248, 0); + Ambient_Sounds_Add_Looping_Sound(516, 33, 81, 0); + Ambient_Sounds_Add_Looping_Sound(332, 40, 0, 1); + Ambient_Sounds_Add_Looping_Sound(333, 40, 0, 1); + if (Game_Flag_Query(568)) { + Scene_Loop_Set_Default(5); + } else { + Scene_Loop_Set_Default(0); + } +} + +void ScriptUG16::SceneLoaded() { + Obstacle_Object("BED", true); + Obstacle_Object("QUADPATCH07", true); + Obstacle_Object("QUADPATCH05", true); + Obstacle_Object("SCREEN 01", true); + Obstacle_Object("BOX49", true); + Obstacle_Object("CYLINDER07", true); + Unobstacle_Object("SEAT 1", true); + Unobstacle_Object("SEAT 2", true); + Unclickable_Object("BED"); + Unclickable_Object("QUADPATCH07"); + Clickable_Object("QUADPATCH05"); + Clickable_Object("SCREEN 01"); + Unclickable_Object("BOX49"); + Unclickable_Object("CYLINDER07"); + Unobstacle_Object("BOX67", true); + Footstep_Sounds_Set(0, 3); + Footstep_Sounds_Set(1, 2); + Footstep_Sounds_Set(2, 3); + Footstep_Sounds_Set(6, 3); +} + +bool ScriptUG16::MouseClick(int x, int y) { + return false; +} + +bool ScriptUG16::ClickedOn3DObject(const char *objectName, bool a2) { + if (Object_Query_Click("QUADPATCH05", objectName) && !Loop_Actor_Walk_To_XYZ(0, 194.0f, -35.0f, 160.8f, 0, 1, false, 0)) { + Actor_Face_Heading(0, 870, false); + if (!Game_Flag_Query(597) && Game_Flag_Query(595)) { + Game_Flag_Set(597); + Delay(1000); + Actor_Voice_Over(3480, 99); + Actor_Change_Animation_Mode(0, 38); + Sound_Play(339, 100, 0, 0, 50); + Delay(1000); + Item_Pickup_Spin_Effect(948, 460, 287); + Actor_Voice_Over(2740, 99); + Actor_Voice_Over(2750, 99); + Actor_Voice_Over(2760, 99); + Actor_Voice_Over(2770, 99); + Actor_Clue_Acquire(0, 125, 1, -1); + } else { + Actor_Says(0, 8523, 12); + Actor_Says(0, 8635, 12); + } + return true; + } + if (Object_Query_Click("SCREEN 01", objectName) && !Loop_Actor_Walk_To_XYZ(0, 194.0f, -35.0f, 160.8f, 0, 1, false, 0)) { + Actor_Face_Heading(0, 870, false); + if ((!Game_Flag_Query(595) && Actor_Query_Is_In_Current_Set(10)) || Actor_Clue_Query(0, 151) || Game_Flag_Query(568)) { + Actor_Says(0, 8525, 12); + Actor_Says(0, 8526, 12); + return false; + } + Delay(2000); + Actor_Face_Heading(0, 1016, false); + Delay(2000); + Actor_Says(0, 5725, 14); + Delay(1000); + Item_Pickup_Spin_Effect(941, 418, 305); + Actor_Clue_Acquire(0, 151, 1, -1); + return true; + } + return false; +} + +bool ScriptUG16::ClickedOnActor(int actorId) { + if (Actor_Query_Goal_Number(10) < 490) { + sub_401D78(); + return true; + } + return false; +} + +bool ScriptUG16::ClickedOnItem(int itemId, bool a2) { + return false; +} + +bool ScriptUG16::ClickedOnExit(int exitId) { + if (exitId == 0) { + if (!Loop_Actor_Walk_To_XYZ(0, -322.0f, -34.0f, -216.0f, 0, 1, false, 0)) { + Ambient_Sounds_Remove_All_Non_Looping_Sounds(1); + Ambient_Sounds_Remove_All_Looping_Sounds(1); + Game_Flag_Set(355); + Set_Enter(87, 99); + } + return true; + } + if (exitId == 1) { + if (!Loop_Actor_Walk_To_XYZ(0, -322.0f, -34.0f, -404.0f, 0, 1, false, 0)) { + Ambient_Sounds_Remove_All_Non_Looping_Sounds(1); + Ambient_Sounds_Remove_All_Looping_Sounds(1); + Game_Flag_Set(153); + Set_Enter(87, 99); + } + return true; + } + if (exitId == 2) { + if (!Loop_Actor_Walk_To_XYZ(0, -316.78f, -34.88f, -533.27f, 0, 1, false, 0)) { + Actor_Face_Heading(0, 0, false); + Loop_Actor_Travel_Stairs(0, 13, 1, 0); + Ambient_Sounds_Remove_All_Non_Looping_Sounds(1); + Ambient_Sounds_Remove_All_Looping_Sounds(1); + Game_Flag_Set(551); + Set_Enter(36, 30); + } + return true; + } + return false; +} + +bool ScriptUG16::ClickedOn2DRegion(int region) { + return false; +} + +void ScriptUG16::SceneFrameAdvanced(int frame) { + if (frame == 132) { + Ambient_Sounds_Remove_Looping_Sound(516, true); + } +} + +void ScriptUG16::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet) { +} + +void ScriptUG16::PlayerWalkedIn() { + Game_Flag_Set(715); + if (!Game_Flag_Query(595)) { + Actor_Set_Goal_Number(10, 403); + } + if (!Game_Flag_Query(556) && Actor_Query_Is_In_Current_Set(10)) { + Player_Loses_Control(); + Loop_Actor_Walk_To_XYZ(0, 120.29f, -35.67f, 214.8f, 310, 0, false, 0); + Actor_Face_Actor(0, 10, true); + Actor_Says(10, 0, 6); + Actor_Says(10, 30, 13); + Actor_Change_Animation_Mode(10, 17); + Actor_Says(13, 0, 17); + Actor_Says(0, 5710, 14); + Actor_Says(10, 40, 13); + Actor_Says(10, 50, 15); + Actor_Says(13, 20, 12); + Actor_Says(10, 60, 23); + Actor_Says(0, 5715, 14); + Actor_Says(13, 30, 16); + Actor_Says(10, 70, 6); + Player_Gains_Control(); + Game_Flag_Set(556); + } +} + +void ScriptUG16::PlayerWalkedOut() { + if (!Game_Flag_Query(595)) { + Actor_Set_Goal_Number(10, 401); + //return true; + } + //return false; +} + +void ScriptUG16::DialogueQueueFlushed(int a1) { +} + +void ScriptUG16::sub_401D78() { + Dialogue_Menu_Clear_List(); + DM_Add_To_List_Never_Repeat_Once_Selected(1400, 5, 6, 2); + DM_Add_To_List_Never_Repeat_Once_Selected(1410, 5, 4, 8); + if (Game_Flag_Query(600) || Game_Flag_Query(601)) { + DM_Add_To_List_Never_Repeat_Once_Selected(1420, 6, 4, 5); + DM_Add_To_List_Never_Repeat_Once_Selected(1430, 6, 4, 5); + DM_Add_To_List_Never_Repeat_Once_Selected(1440, 6, 4, 5); + } + if (Global_Variable_Query(49) > 1 && !Actor_Clue_Query(0, 125)) { + DM_Add_To_List_Never_Repeat_Once_Selected(1450, 6, 4, 5); + } + if (Actor_Clue_Query(0, 76)) { + DM_Add_To_List_Never_Repeat_Once_Selected(1460, 6, 4, 5); + } + if (Actor_Clue_Query(0, 147) && !Actor_Clue_Query(0, 125) && Game_Flag_Query(698)) { + DM_Add_To_List_Never_Repeat_Once_Selected(1470, 6, 4, 5); + } + Dialogue_Menu_Add_DONE_To_List(1480); + Dialogue_Menu_Appear(320, 240); + int answer = Dialogue_Menu_Query_Input(); + Dialogue_Menu_Disappear(); + switch (answer) { + case 1400: + Actor_Says(0, 5730, 13); + Actor_Face_Actor(0, 10, true); + Actor_Says(10, 100, 18); + Actor_Says(0, 5775, 13); + Actor_Says(13, 70, 17); + Actor_Says(10, 110, 16); + Actor_Says(13, 80, 6); + Actor_Says(0, 5780, 13); + Actor_Says(10, 120, 16); + Actor_Says(13, 120, 13); + Actor_Says(0, 5785, 13); + Actor_Says(10, 130, 6); + Actor_Says(0, 5825, 13); + Actor_Modify_Friendliness_To_Other(10, 0, -5); + if (Game_Flag_Query(560)) { + Actor_Says(10, 140, 13); + Actor_Says(10, 150, 14); + Actor_Says(10, 160, 13); + Actor_Says(13, 140, 16); + Actor_Says(0, 5790, 13); + Actor_Says(10, 170, 14); + Game_Flag_Set(600); + Actor_Modify_Friendliness_To_Other(10, 0, 5); + } else { + Actor_Says(10, 180, 14); + Actor_Says(0, 5795, 13); + Actor_Says(13, 150, 17); + Actor_Says(0, 5800, 13); + Actor_Says(10, 190, 15); + Game_Flag_Set(601); + Actor_Modify_Friendliness_To_Other(10, 0, -10); + } + break; + case 1410: + Actor_Says(0, 5735, 13); + Actor_Face_Actor(0, 10, true); + Actor_Says(13, 160, 17); + Actor_Says(10, 200, 14); + break; + case 1420: + Actor_Says(0, 5740, 13); + Actor_Face_Actor(0, 10, true); + Actor_Says(13, 180, 15); + Actor_Says(10, 220, 13); + Actor_Says(13, 190, 17); + Actor_Says(0, 5805, 13); + Actor_Says(10, 230, 14); + Actor_Says(10, 240, 13); + Actor_Says(13, 200, 17); + Actor_Says(10, 260, 13); + Actor_Says(10, 270, 15); + Actor_Says(13, 210, 14); + Actor_Says(0, 5810, 13); + Actor_Says(13, 220, 14); + Actor_Says(13, 230, 17); + Actor_Clue_Acquire(0, 136, 1, 10); + break; + case 1430: + Actor_Says(0, 5745, 13); + Actor_Face_Actor(0, 10, true); + Actor_Says(13, 240, 15); + Actor_Says(0, 5815, 13); + Actor_Says(13, 250, 16); + Actor_Says(10, 290, 15); + Actor_Says(13, 260, 15); + break; + case 1440: + Actor_Says(0, 5750, 13); + Actor_Face_Actor(0, 10, true); + Actor_Says(13, 280, 6); + Actor_Says(10, 300, 14); + Actor_Says(10, 310, 15); + Actor_Modify_Friendliness_To_Other(10, 0, -5); + break; + case 1450: + Actor_Says(0, 5755, 13); + Actor_Face_Actor(0, 10, true); + Actor_Says(13, 290, 17); + Actor_Says(10, 320, 16); + Actor_Says(0, 5820, 13); + Actor_Says(13, 300, 17); + Actor_Says(10, 330, 14); + Actor_Says(0, 5825, 13); + Actor_Says(10, 340, 13); + Actor_Says(13, 310, 13); + Actor_Says(10, 350, 13); + Actor_Says(10, 360, 15); + Actor_Says(0, 5830, 13); + Actor_Says(13, 320, 16); + Actor_Says(13, 330, 15); + Game_Flag_Set(698); + break; + case 1460: + Actor_Says(0, 5760, 13); + Actor_Face_Actor(0, 10, true); + Actor_Says(10, 370, 15); + Actor_Says(13, 340, 14); + Actor_Says(0, 5835, 13); + Actor_Says(10, 380, 15); + Actor_Says(13, 370, 6); + Actor_Says(0, 5840, 13); + Actor_Says(13, 380, 13); + break; + case 1470: + Actor_Says(0, 5765, 13); + Actor_Face_Actor(0, 10, true); + Actor_Says(13, 400, 15); + Actor_Says(0, 5845, 13); + Actor_Says(10, 390, 23); + Actor_Says(13, 410, 14); + Actor_Says(13, 420, 17); + Actor_Says(0, 5835, 13); + Delay(1000); + Item_Pickup_Spin_Effect(948, 239, 454); + Actor_Voice_Over(2740, 99); + Actor_Voice_Over(2750, 99); + Actor_Voice_Over(2760, 99); + Actor_Voice_Over(2770, 99); + Actor_Says(0, 5850, 13); + Actor_Says(10, 400, 15); + Actor_Says(13, 430, 6); + Actor_Says(0, 5855, 13); + Actor_Says(10, 410, 14); + Game_Flag_Set(597); + Actor_Clue_Acquire(0, 125, 1, 10); + break; + case 1480: + Actor_Says(0, 4595, 14); + break; + } +} + +} // End of namespace BladeRunner |