aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script/script.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/bladerunner/script/script.cpp')
-rw-r--r--engines/bladerunner/script/script.cpp1433
1 files changed, 1433 insertions, 0 deletions
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
new file mode 100644
index 0000000000..cf607a4b47
--- /dev/null
+++ b/engines/bladerunner/script/script.cpp
@@ -0,0 +1,1433 @@
+/* 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"
+
+#include "bladerunner/bladerunner.h"
+
+#include "bladerunner/actor.h"
+#include "bladerunner/actor_combat.h"
+#include "bladerunner/adq.h"
+#include "bladerunner/ambient_sounds.h"
+#include "bladerunner/audio_player.h"
+#include "bladerunner/audio_speech.h"
+#include "bladerunner/crimes_database.h"
+#include "bladerunner/combat.h"
+#include "bladerunner/gameflags.h"
+#include "bladerunner/gameinfo.h"
+#include "bladerunner/items.h"
+#include "bladerunner/item_pickup.h"
+#include "bladerunner/movement_track.h"
+#include "bladerunner/settings.h"
+#include "bladerunner/set_effects.h"
+#include "bladerunner/scene.h"
+#include "bladerunner/scene_objects.h"
+#include "bladerunner/slice_animations.h"
+#include "bladerunner/slice_renderer.h"
+#include "bladerunner/text_resource.h"
+#include "bladerunner/vector.h"
+#include "bladerunner/waypoints.h"
+
+#include "bladerunner/script/ai_00_mccoy.h"
+#include "bladerunner/script/aiscript_officer_leroy.h"
+
+namespace BladeRunner {
+
+bool Script::open(const Common::String &name) {
+ delete _currentScript;
+
+
+ if (name == "RC01") { _currentScript = new ScriptRC01(_vm); return true; }
+ if (name == "RC02") { _currentScript = new ScriptRC02(_vm); return true; }
+ if (name == "RC03") { _currentScript = new ScriptRC03(_vm); return true; }
+ if (name == "RC04") { _currentScript = new ScriptRC04(_vm); return true; }
+ if (name == "RC51") { _currentScript = new ScriptRC51(_vm); return true; }
+
+
+ return false;
+}
+
+Script::~Script() {
+ delete _currentScript;
+}
+
+void Script::InitializeScene() {
+ _inScriptCounter++;
+ _currentScript->InitializeScene();
+ _inScriptCounter--;
+}
+
+void Script::SceneLoaded() {
+ _inScriptCounter++;
+ _currentScript->SceneLoaded();
+ _inScriptCounter--;
+}
+
+bool Script::MouseClick(int x, int y) {
+ if (_inScriptCounter > 0)
+ return true;
+
+ _inScriptCounter++;
+ //MouseX = x;
+ //MouseY = y;
+ bool result = _currentScript->MouseClick(x, y);
+ //SelectedEntity = -1;
+ _inScriptCounter--;
+ //MouseX = -1;
+ //MouseY = -1;
+ return result;
+}
+
+bool Script::ClickedOn3DObject(const char *objectName, bool a2) {
+ if (_inScriptCounter > 0)
+ return true;
+
+ _inScriptCounter++;
+ bool result = _currentScript->ClickedOn3DObject(objectName, a2);
+ _inScriptCounter--;
+ return result;
+}
+
+bool Script::ClickedOnActor(int actorId) {
+ if (_inScriptCounter > 0)
+ return true;
+
+ _inScriptCounter++;
+ bool result = _currentScript->ClickedOnActor(actorId);
+ _inScriptCounter--;
+ return result;
+}
+
+bool Script::ClickedOnItem(int itemId, bool a2) {
+ if (_inScriptCounter > 0)
+ return true;
+
+ _inScriptCounter++;
+ bool result = _currentScript->ClickedOnItem(itemId, a2);
+ _inScriptCounter--;
+ return result;
+}
+
+bool Script::ClickedOnExit(int exitId) {
+ if (_inScriptCounter > 0)
+ return true;
+
+ _inScriptCounter++;
+ bool result = _currentScript->ClickedOnExit(exitId);
+ _inScriptCounter--;
+ return result;
+}
+
+bool Script::ClickedOn2DRegion(int region) {
+ if (_inScriptCounter > 0)
+ return true;
+
+ _inScriptCounter++;
+ bool result = _currentScript->ClickedOn2DRegion(region);
+ _inScriptCounter--;
+ return result;
+}
+
+void Script::SceneFrameAdvanced(int frame) {
+ _inScriptCounter++;
+ _currentScript->SceneFrameAdvanced(frame);
+ _inScriptCounter--;
+}
+
+void Script::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet) {
+ _inScriptCounter++;
+ //TODO remove this check
+ if(_currentScript)
+ _currentScript->ActorChangedGoal(actorId, newGoal, oldGoal, currentSet);
+ _inScriptCounter--;
+}
+
+void Script::PlayerWalkedIn() {
+ _inScriptCounter++;
+ _currentScript->PlayerWalkedIn();
+ _inScriptCounter--;
+}
+
+void Script::PlayerWalkedOut() {
+ _inScriptCounter++;
+ _currentScript->PlayerWalkedOut();
+ _inScriptCounter--;
+}
+
+void Script::DialogueQueueFlushed(int a1) {
+ _inScriptCounter++;
+ _currentScript->DialogueQueueFlushed(a1);
+ _inScriptCounter--;
+}
+
+void ScriptBase::Preload(int animationId) {
+ _vm->_sliceRenderer->preload(animationId);
+}
+
+void ScriptBase::Actor_Put_In_Set(int actorId, int setId) {
+ _vm->_actors[actorId]->setSetId(setId);
+}
+
+void ScriptBase::Actor_Set_At_XYZ(int actorId, float x, float y, float z, int direction) {
+ _vm->_actors[actorId]->setAtXYZ(Vector3(x, y, z), direction);
+}
+
+void ScriptBase::Actor_Set_At_Waypoint(int actorId, int waypointId, int angle) {
+ _vm->_actors[actorId]->setAtWaypoint(waypointId, angle, 0, 0);
+}
+
+bool ScriptBase::Region_Check(int left, int top, int right, int down) {
+ //TODO: return _vm->_mouse.x >= left && _vm->_mouse.y >= top && _vm->_mouse.x <= right && _vm->_mouse.y <= down;
+ warning("Region_Check(%d, %d, %d, %d)", left, top, right, down);
+ return false;
+}
+
+bool ScriptBase::Object_Query_Click(const char *objectName1, const char *objectName2) {
+ return strcmp(objectName1, objectName2) == 0;
+}
+
+void ScriptBase::Object_Do_Ground_Click() {
+ //This is not implemented in game
+ return;
+}
+
+bool ScriptBase::Object_Mark_For_Hot_Mouse(const char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return false;
+ return _vm->_scene->objectSetHotMouse(objectId);
+}
+
+void ScriptBase::Actor_Face_Actor(int actorId, int otherActorId, bool animate) {
+ _vm->_actors[actorId]->faceActor(otherActorId, animate);
+}
+
+void ScriptBase::Actor_Face_Object(int actorId, const char *objectName, bool animate) {
+ _vm->_actors[actorId]->faceObject(objectName, animate);
+}
+
+void ScriptBase::Actor_Face_Item(int actorId, int itemId, bool animate) {
+ _vm->_actors[actorId]->faceItem(itemId, animate);
+}
+
+void ScriptBase::Actor_Face_Waypoint(int actorId, int waypointId, bool animate) {
+ _vm->_actors[actorId]->faceWaypoint(waypointId, animate);
+}
+
+void ScriptBase::Actor_Face_XYZ(int actorId, float x, float y, float z, bool animate) {
+ _vm->_actors[actorId]->faceXYZ(x, y, z, animate);
+}
+
+void ScriptBase::Actor_Face_Current_Camera(int actorId, bool animate) {
+ _vm->_actors[actorId]->faceCurrentCamera(animate);
+}
+
+void ScriptBase::Actor_Face_Heading(int actorId, int heading, bool animate) {
+ _vm->_actors[actorId]->faceHeading(heading, true);
+}
+
+int ScriptBase::Actor_Query_Friendliness_To_Other(int actorId, int otherActorId) {
+ return _vm->_actors[actorId]->_friendlinessToOther[otherActorId];
+}
+
+void ScriptBase::Actor_Modify_Friendliness_To_Other(int actorId, int otherActorId, signed int change) {
+ _vm->_actors[actorId]->modifyFriendlinessToOther(otherActorId, change);
+}
+
+void ScriptBase::Actor_Set_Friendliness_To_Other(int actorId, int otherActorId, int friendliness) {
+ _vm->_actors[actorId]->setFriendlinessToOther(otherActorId, friendliness);
+}
+
+void ScriptBase::Actor_Set_Honesty(int actorId, int honesty) {
+ _vm->_actors[actorId]->setHonesty(honesty);
+}
+
+void ScriptBase::Actor_Set_Intelligence(int actorId, int intelligence) {
+ _vm->_actors[actorId]->setIntelligence(intelligence);
+}
+
+void ScriptBase::Actor_Set_Stability(int actorId, int stability) {
+ _vm->_actors[actorId]->setStability(stability);
+}
+
+void ScriptBase::Actor_Set_Combat_Aggressiveness(int actorId, int combatAggressiveness) {
+ _vm->_actors[actorId]->setCombatAggressiveness(combatAggressiveness);
+}
+
+int ScriptBase::Actor_Query_Current_HP(int actorId) {
+ return _vm->_actors[actorId]->_currentHP;
+}
+
+int ScriptBase::Actor_Query_Max_HP(int actorId) {
+ return _vm->_actors[actorId]->_maxHP;
+}
+
+int ScriptBase::Actor_Query_Combat_Aggressiveness(int actorId) {
+ return _vm->_actors[actorId]->_combatAggressiveness;
+}
+
+int ScriptBase::Actor_Query_Honesty(int actorId) {
+ return _vm->_actors[actorId]->_honesty;
+}
+
+int ScriptBase::Actor_Query_Intelligence(int actorId) {
+ return _vm->_actors[actorId]->_intelligence;
+}
+
+int ScriptBase::Actor_Query_Stability(int actorId) {
+ return _vm->_actors[actorId]->_stability;
+}
+
+void ScriptBase::Actor_Modify_Current_HP(int actorId, signed int change) {
+ _vm->_actors[actorId]->modifyCurrentHP(change);
+}
+
+void ScriptBase::Actor_Modify_Max_HP(int actorId, signed int change) {
+ _vm->_actors[actorId]->modifyMaxHP(change);
+}
+
+void ScriptBase::Actor_Modify_Combat_Aggressiveness(int actorId, signed int change) {
+ _vm->_actors[actorId]->modifyCombatAggressiveness(change);
+}
+
+void ScriptBase::Actor_Modify_Honesty(int actorId, signed int change) {
+ _vm->_actors[actorId]->modifyHonesty(change);
+}
+
+void ScriptBase::Actor_Modify_Intelligence(int actorId, signed int change) {
+ _vm->_actors[actorId]->modifyIntelligence(change);
+}
+
+void ScriptBase::Actor_Modify_Stability(int actorId, signed int change) {
+ _vm->_actors[actorId]->modifyStability(change);
+}
+
+void ScriptBase::Actor_Set_Flag_Damage_Anim_If_Moving(int actorId, bool value) {
+ _vm->_actors[actorId]->setFlagDamageAnimIfMoving(value);
+}
+
+bool ScriptBase::Actor_Query_Flag_Damage_Anim_If_Moving(int actorId) {
+ return _vm->_actors[actorId]->getFlagDamageAnimIfMoving();
+}
+
+void ScriptBase::Actor_Combat_AI_Hit_Attempt(int actorId) {
+ if (_vm->_actors[actorId]->inCombat())
+ _vm->_actors[actorId]->_combatInfo->hitAttempt();
+}
+
+void ScriptBase::Non_Player_Actor_Combat_Mode_On(int actorId, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14) {
+ _vm->_actors[actorId]->combatModeOn(a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);
+}
+
+void ScriptBase::Non_Player_Actor_Combat_Mode_Off(int actorId) {
+ _vm->_actors[actorId]->combatModeOff();
+}
+
+void ScriptBase::Actor_Set_Health(int actorId, int hp, int maxHp) {
+ _vm->_actors[actorId]->setHealth(hp, maxHp);
+}
+
+void ScriptBase::Actor_Set_Targetable(int actorId, bool targetable) {
+ _vm->_actors[actorId]->setTargetable(targetable);
+
+}
+
+void ScriptBase::Actor_Says(int actorId, int sentenceId, int animationMode){
+ _vm->loopActorSpeaking();
+ _vm->_adq->flush(1, true);
+ Actor_Says_With_Pause(actorId, sentenceId, 0.5f, animationMode);
+}
+
+void ScriptBase::Actor_Says_With_Pause(int actorId, int sentenceId, float pause, int animationMode) {
+ _vm->gameWaitForActive();
+ _vm->loopActorSpeaking();
+ _vm->_adq->flush(1, true);
+
+ Actor *actor = _vm->_actors[actorId];
+
+ if(animationMode != -1) {
+ actor->stopWalking(false);
+ }
+
+ actor->speechPlay(sentenceId, false);
+ bool animationModeChanged = false;
+ if(animationMode >= 0) {
+ if (actorId != 0) {
+ actor->changeAnimationMode(animationMode, false);
+ animationModeChanged = true;
+ } else if(_vm->_combat->isActive()) {
+ actor->changeAnimationMode(animationMode, false);
+ animationModeChanged = true;
+ }
+ }
+ Player_Loses_Control();
+ while (_vm->_gameIsRunning) {
+ _vm->_speechSkipped = false;
+ _vm->gameTick();
+ if (_vm->_speechSkipped || !actor->isSpeeching()) {
+ actor->speechStop();
+ break;
+ }
+ }
+ if (animationModeChanged) {
+ actor->changeAnimationMode(0, false);
+ }
+
+ //TODO: sitcom
+ //if (_vm->isSitcom)
+ //{
+ // int rnd = _vm->random(1, 100);
+ // if (rnd <= actor::get_unknown3(actor))
+ // {
+ // int soundId = _vm->random(319, 327);
+ // _vm->_audioPlayer->play(soundId, 40, 0, 0, 50);
+ // }
+ //}
+ if(pause > 0.0f && !_vm->_speechSkipped) {
+ Delay(pause * 1000);
+ }
+ Player_Gains_Control();
+}
+
+#if 0
+void ScriptBase::Actor_Voice_Over(int sentenceId, int actorId) {
+ // Wait for any existing speech to end
+ _vm->loopActorSpeaking();
+
+ // TODO: Hack - This needs to go through the actor class
+ char name[13];
+ sprintf(name, "%02d-%04d.AUD", actorId, sentenceId);
+ _vm->_audioSpeech->playSpeech(name);
+
+ // warning("start voice over loop");
+ while (true)
+ {
+ _vm->gameTick();
+ if (_vm->shouldQuit())
+ break;
+ if (!_vm->_audioSpeech->isPlaying())
+ break;
+ }
+ // warning("end voice over loop");
+}
+#endif
+
+void ScriptBase::Actor_Voice_Over(int sentenceId, int actorId) {
+ _vm->gameWaitForActive();
+ _vm->loopActorSpeaking();
+ _vm->_adq->flush(1, true);
+
+ Actor *actor = _vm->_actors[actorId];
+
+ actor->speechPlay(sentenceId, true);
+ Player_Loses_Control();
+ while(_vm->_gameIsRunning) {
+ _vm->_speechSkipped = false;
+ _vm->gameTick();
+ if(_vm->_speechSkipped || !actor->isSpeeching()) {
+ actor->speechStop();
+ break;
+ }
+ }
+ Player_Gains_Control();
+}
+
+void ScriptBase::Actor_Start_Speech_Sample(int actorId, int sentenceId) {
+ _vm->loopActorSpeaking();
+ _vm->_actors[actorId]->speechPlay(sentenceId, false);
+}
+
+void ScriptBase::Actor_Start_Voice_Over_Sample(int sentenceId) {
+ _vm->loopActorSpeaking();
+ _vm->_voiceoverActor->speechPlay(sentenceId, true);
+}
+
+int ScriptBase::Actor_Query_Which_Set_In(int actorId) {
+ return _vm->_actors[actorId]->getSetId();
+}
+
+bool ScriptBase::Actor_Query_Is_In_Current_Set(int actorId) {
+ int actorSetId = _vm->_actors[actorId]->getSetId();
+ return actorSetId >= 0 && _vm->_scene->getSetId();
+}
+
+bool ScriptBase::Actor_Query_In_Set(int actorId, int setId) {
+ return _vm->_actors[actorId]->getSetId() == setId;
+}
+
+int ScriptBase::Actor_Query_Inch_Distance_From_Actor(int actorId, int otherActorId) {
+ if (_vm->_actors[actorId]->getSetId() != _vm->_actors[otherActorId]->getSetId())
+ return 0.0f;
+ return _vm->_actors[actorId]->distanceFromActor(otherActorId);
+}
+
+int ScriptBase::Actor_Query_Inch_Distance_From_Waypoint(int actorId, int waypointId) {
+ if (_vm->_actors[actorId]->getSetId() != _vm->_waypoints->getSetId(waypointId))
+ return 0;
+
+ float actorX = _vm->_actors[actorId]->getX();
+ float actorZ = _vm->_actors[actorId]->getZ();
+ float waypointX = _vm->_waypoints->getX(waypointId);
+ float waypointZ = _vm->_waypoints->getZ(waypointId);
+
+ float distX = actorX - waypointX;
+ float distZ = actorZ - waypointZ;
+
+ return sqrtf(distX * distX + distZ * distZ);
+}
+
+bool ScriptBase::Actor_Query_In_Between_Two_Actors(int actorId, int otherActor1Id, int otherActor2Id) {
+ float x1 = _vm->_actors[otherActor1Id]->getX();
+ float z1 = _vm->_actors[otherActor1Id]->getZ();
+ float x2 = _vm->_actors[otherActor2Id]->getX();
+ float z2 = _vm->_actors[otherActor2Id]->getZ();
+ return _vm->_sceneObjects->isBetweenTwoXZ(actorId, x1, z1, x2, z1)
+ || _vm->_sceneObjects->isBetweenTwoXZ(actorId, x1 - 12.0f, z1 - 12.0f, x2 - 12.0f, z2 - 12.0f)
+ || _vm->_sceneObjects->isBetweenTwoXZ(actorId, x1 + 12.0f, z1 - 12.0f, x2 + 12.0f, z2 - 12.0f)
+ || _vm->_sceneObjects->isBetweenTwoXZ(actorId, x1 + 12.0f, z1 + 12.0f, x2 + 12.0f, z2 + 12.0f)
+ || _vm->_sceneObjects->isBetweenTwoXZ(actorId, x1 - 12.0f, z1 + 12.0f, x2 - 12.0f, z2 + 12.0f);
+}
+
+void ScriptBase::Actor_Set_Goal_Number(int actorId, int goalNumber) {
+ _vm->_actors[actorId]->setGoal(goalNumber);
+}
+
+int ScriptBase::Actor_Query_Goal_Number(int actorId) {
+ return _vm->_actors[actorId]->getGoal();
+}
+
+void ScriptBase::Actor_Query_XYZ(int actorId, float *x, float *y, float *z) {
+ *x = _vm->_actors[actorId]->getX();
+ *y = _vm->_actors[actorId]->getY();
+ *z = _vm->_actors[actorId]->getZ();
+}
+
+int ScriptBase::Actor_Query_Facing_1024(int actorId) {
+ return _vm->_actors[actorId]->getFacing();
+}
+
+void ScriptBase::Actor_Set_Frame_Rate_FPS(int actorId, int fps) {
+ _vm->_actors[actorId]->setFPS(fps);
+}
+
+int ScriptBase::Slice_Animation_Query_Number_Of_Frames(int animation) {
+ return _vm->_sliceAnimations->getFrameCount(animation);
+}
+
+void ScriptBase::Actor_Change_Animation_Mode(int actorId, int animationMode) {
+ _vm->_actors[actorId]->changeAnimationMode(animationMode, 0);
+}
+
+int ScriptBase::Actor_Query_Animation_Mode(int actorId) {
+ return _vm->_actors[actorId]->getAnimationMode();
+}
+
+bool ScriptBase::Loop_Actor_Walk_To_Actor(int actorId, int otherActorId, int a3, int a4, bool run) {
+ //TODO
+ warning("Loop_Actor_Walk_To_Actor(%d, %d, %d, %d, %d)", actorId, otherActorId, a3, a4, run);
+ return false;
+}
+
+bool ScriptBase::Loop_Actor_Walk_To_Item(int actorId, int itemId, int a3, int a4, bool run) {
+ //TODO
+ warning("Loop_Actor_Walk_To_Item(%d, %d, %d, %d, %d)", actorId, itemId, a3, a4, run);
+ return false;
+}
+
+bool ScriptBase::Loop_Actor_Walk_To_Scene_Object(int actorId, const char *objectName, int destinationOffset, bool a4, bool run) {
+ _vm->gameWaitForActive();
+
+ if(_vm->_walkingActorId == actorId) {
+ run = true;
+ }
+ bool isRunning;
+ bool result = _vm->_actors[actorId]->loopWalkToSceneObject(objectName, destinationOffset, a4, run, true, &isRunning);
+ if(isRunning == 1) {
+ _vm->_walkingActorId = actorId;
+ }
+ Global_Variable_Set(37, actorId);
+ Global_Variable_Set(38, isRunning);
+ return result;
+}
+
+bool ScriptBase::Loop_Actor_Walk_To_Waypoint(int actorId, int waypointId, int destinationOffset, int a4, bool run) {
+ //TODO
+ warning("Loop_Actor_Walk_To_Waypoint(%d, %d, %d, %d, %d)", actorId, waypointId, destinationOffset, a4, run);
+ return false;
+}
+
+bool ScriptBase::Loop_Actor_Walk_To_XYZ(int actorId, float x, float y, float z, int destinationOffset, int a5, bool run, int a7) {
+ _vm->gameWaitForActive();
+
+ if(_vm->_walkingActorId == actorId) {
+ if(a7) {
+ _vm->_walkingActorId = -1;
+ } else {
+ run = true;
+ }
+ }
+ //TODO:
+ //PlayerActorIdle = 0;
+ bool isRunning;
+ bool result = _vm->_actors[actorId]->loopWalkToXYZ(Vector3(x, y, z), destinationOffset, a5, run, 1, &isRunning);
+
+// if (PlayerActorIdle == 1) {
+// result = 1;
+// PlayerActorIdle = 0;
+// }
+ if(isRunning) {
+ _vm->_walkingActorId = actorId;
+ }
+ Global_Variable_Set(37, actorId);
+ Global_Variable_Set(38, isRunning);
+ return result;
+}
+
+void ScriptBase::Async_Actor_Walk_To_Waypoint(int actorId, int waypointId, int destinationOffset, int run) {
+ //TODO
+ warning("Async_Actor_Walk_To_Waypoint(%d, %d, %d, %d)", actorId, waypointId, destinationOffset, run);
+}
+
+void ScriptBase::Async_Actor_Walk_To_XYZ(int actorId, float x, float y, float z, int destinationOffset, bool run) {
+ //TODO
+ warning("Async_Actor_Walk_To_XYZ(%d, %f, %f, %f, %d, %d)", actorId, x, y, z, destinationOffset, run);
+}
+
+void ScriptBase::Actor_Force_Stop_Walking(int actorId) {
+ //TODO
+ warning("Loop_Actor_Travel_Stairs(%d)", actorId);
+}
+
+bool ScriptBase::Loop_Actor_Travel_Stairs(int actorId, int a2, int a3, int a4) {
+ //TODO
+ warning("Loop_Actor_Travel_Stairs(%d, %d, %d, %d)", actorId, a2, a3, a4);
+ return false;
+}
+
+bool ScriptBase::Loop_Actor_Travel_Ladder(int actorId, int a2, int a3, int a4) {
+ //TODO
+ warning("Loop_Actor_Travel_Ladder(%d, %d, %d, %d)", actorId,a2,a3,a4);
+ return false;
+}
+
+void ScriptBase::Actor_Clue_Add_To_Database(int actorId, int clueId, int unknown, bool clueAcquired, bool unknownFlag, int fromActorId) {
+ _vm->_actors[actorId]->addClueToDatabase(clueId, unknown, clueAcquired, unknownFlag, fromActorId);
+}
+
+void ScriptBase::Actor_Clue_Acquire(int actorId, int clueId, byte unknownFlag, int fromActorId) {
+ _vm->_actors[actorId]->acquireClue(clueId, unknownFlag, fromActorId);
+}
+
+void ScriptBase::Actor_Clue_Lose(int actorId, int clueId) {
+ _vm->_actors[actorId]->loseClue(clueId);
+}
+
+bool ScriptBase::Actor_Clue_Query(int actorId, int clueId) {
+ return _vm->_actors[actorId]->hasClue(clueId);
+}
+
+void ScriptBase::Actor_Clues_Transfer_New_To_Mainframe(int actorId) {
+ _vm->_actors[actorId]->copyClues(99);
+}
+
+void ScriptBase::Actor_Clues_Transfer_New_From_Mainframe(int actorId) {
+ _vm->_voiceoverActor->copyClues(actorId);
+}
+
+void ScriptBase::Actor_Set_Invisible(int actorId, bool isInvisible) {
+ _vm->_actors[actorId]->setInvisible(isInvisible);
+}
+
+void ScriptBase::Actor_Set_Immunity_To_Obstacles(int actorId, bool isImmune) {
+ _vm->_actors[actorId]->setImmunityToObstacles(isImmune);
+}
+
+void ScriptBase::Item_Add_To_World(int itemId, int animationId, int setId, float x, float y, float z, signed int facing, int height, int width, bool isTargetable, bool isObstacle, bool isPoliceMazeEnemy, bool updateOnly) {
+ _vm->_items->addToWorld(itemId, animationId, setId, Vector3(x, y, z), facing, height, width, isTargetable, isObstacle, isPoliceMazeEnemy, updateOnly == 0);
+}
+
+void ScriptBase::Item_Remove_From_World(int itemId) {
+ _vm->_items->remove(itemId);
+}
+
+void ScriptBase::Item_Spin_In_World(int itemId) {
+ warning("Item_Spin_In_World(%d)", itemId);
+}
+
+void ScriptBase::Item_Flag_As_Target(int itemId) {
+ warning("Item_Flag_As_Target(%d)", itemId);
+}
+
+void ScriptBase::Item_Flag_As_Non_Target(int itemId) {
+ warning("Item_Flag_As_Non_Target(%d)", itemId);
+}
+
+void ScriptBase::Item_Pickup_Spin_Effect(int animationId, int x, int y) {
+ _vm->_itemPickup->setup(animationId, x, y);
+}
+
+int ScriptBase::Animation_Open() {
+ //This is not implemented in game
+ return -1;
+}
+
+int ScriptBase::Animation_Close() {
+ //This is not implemented in game
+ return 0;
+}
+
+int ScriptBase::Animation_Start() {
+ //This is not implemented in game
+ return 0;
+}
+
+int ScriptBase::Animation_Stop() {
+ //This is not implemented in game
+ return 0;
+}
+
+int ScriptBase::Animation_Skip_To_Frame() {
+ //This is not implemented in game
+ return 0;
+}
+
+void ScriptBase::Delay(int miliseconds) {
+ Player_Loses_Control();
+ int endTime = _vm->getTotalPlayTime() + miliseconds;
+ while ((int)_vm->getTotalPlayTime() < endTime)
+ _vm->gameTick();
+ Player_Gains_Control();
+}
+
+void ScriptBase::Player_Loses_Control() {
+ _vm->playerLosesControl();
+}
+
+void ScriptBase::Player_Gains_Control() {
+ _vm->playerGainsControl();
+}
+
+void ScriptBase::Player_Set_Combat_Mode(bool activate) {
+ if (!_vm->_combat->isActive() || activate) {
+ if (_vm->_combat->isActive() && activate) {
+ _vm->_combat->activate();
+ }
+ } else {
+ _vm->_combat->deactivate();
+ }
+}
+
+bool ScriptBase::Player_Query_Combat_Mode() {
+ return _vm->_combat->isActive();
+}
+
+void ScriptBase::Player_Set_Combat_Mode_Access(bool enable) {
+ if (enable) {
+ _vm->_combat->enable();
+ } else {
+ _vm->_combat->disable();
+ }
+}
+
+int ScriptBase::Player_Query_Current_Set() {
+ return _vm->_scene->getSetId();
+}
+
+int ScriptBase::Player_Query_Current_Scene() {
+ return _vm->_scene->getSceneId();
+}
+
+int ScriptBase::Player_Query_Agenda() {
+ return _vm->_settings->getPlayerAgenda();
+}
+
+void ScriptBase::Player_Set_Agenda(int agenda) {
+ _vm->_settings->setPlayerAgenda(agenda);
+}
+
+int ScriptBase::Query_Difficulty_Level() {
+ return _vm->_settings->getDifficulty();
+}
+
+
+void ScriptBase::Game_Flag_Set(int flag) {
+ _vm->_gameFlags->set(flag);
+}
+
+void ScriptBase::Game_Flag_Reset(int flag) {
+ _vm->_gameFlags->reset(flag);
+}
+
+bool ScriptBase::Game_Flag_Query(int flag) {
+ return _vm->_gameFlags->query(flag);
+}
+
+void ScriptBase::Set_Enter(int setId, int sceneId) {
+ _vm->_settings->setNewSetAndScene(setId, sceneId);
+}
+
+void ScriptBase::Chapter_Enter(int chapter, int setId, int sceneId) {
+ _vm->_settings->setChapter(chapter);
+ Set_Enter(setId, sceneId);
+}
+
+int ScriptBase::Global_Variable_Set(int var, int value) {
+ return _vm->_gameVars[var] = value;
+}
+
+int ScriptBase::Global_Variable_Reset(int var) {
+ return _vm->_gameVars[var] = 0;
+}
+
+int ScriptBase::Global_Variable_Query(int var) {
+ return _vm->_gameVars[var];
+}
+
+int ScriptBase::Global_Variable_Increment(int var, int inc) {
+ return _vm->_gameVars[var] += inc;
+}
+
+int ScriptBase::Global_Variable_Decrement(int var, int dec) {
+ return _vm->_gameVars[var] -= dec;
+}
+
+int ScriptBase::Random_Query(int min, int max) {
+ return _vm->_rnd.getRandomNumberRng(min, max);
+}
+
+void ScriptBase::Sound_Play(int id, int volume, int panFrom, int panTo, int priority) {
+ const char *name = _vm->_gameInfo->getSfxTrack(id);
+ _vm->_audioPlayer->playAud(name, volume, panFrom, panTo, priority);
+}
+
+void ScriptBase::Sound_Play_Speech_Line(int actorId, int speechId, int a3, int a4, int a5) {
+ //TODO
+ warning("Sound_Play_Speech_Line(%d, %d, %d, %d, %d)", actorId, speechId, a3, a4, a5);
+}
+
+void ScriptBase::Sound_Left_Footstep_Walk(int actorId) {
+ int walkboxId = _vm->_actors[actorId]->getWalkbox();
+ if (walkboxId < 0) {
+ walkboxId = 0;
+ }
+
+ _vm->_walkSoundId = _vm->_scene->_set->getWalkboxSoundWalkLeft(walkboxId);
+ _vm->_walkSoundVolume = _vm->_actors[actorId]->soundVolume();
+ _vm->_walkSoundBalance = _vm->_actors[actorId]->soundBalance();
+}
+
+void ScriptBase::Sound_Right_Footstep_Walk(int actorId) {
+ int walkboxId = _vm->_actors[actorId]->getWalkbox();
+ if (walkboxId < 0) {
+ walkboxId = 0;
+ }
+
+ _vm->_walkSoundId = _vm->_scene->_set->getWalkboxSoundWalkRight(walkboxId);
+ _vm->_walkSoundVolume = _vm->_actors[actorId]->soundVolume();
+ _vm->_walkSoundBalance = _vm->_actors[actorId]->soundBalance();
+}
+
+void ScriptBase::Sound_Left_Footstep_Run(int actorId) {
+ int walkboxId = _vm->_actors[actorId]->getWalkbox();
+ if (walkboxId < 0) {
+ walkboxId = 0;
+ }
+
+ _vm->_walkSoundId = _vm->_scene->_set->getWalkboxSoundRunLeft(walkboxId);
+ _vm->_walkSoundVolume = _vm->_actors[actorId]->soundVolume();
+ _vm->_walkSoundBalance = _vm->_actors[actorId]->soundBalance();
+}
+
+void ScriptBase::Sound_Right_Footstep_Run(int actorId) {
+ int walkboxId = _vm->_actors[actorId]->getWalkbox();
+ if (walkboxId < 0) {
+ walkboxId = 0;
+ }
+
+ _vm->_walkSoundId = _vm->_scene->_set->getWalkboxSoundRunRight(walkboxId);
+ _vm->_walkSoundVolume = _vm->_actors[actorId]->soundVolume();
+ _vm->_walkSoundBalance = _vm->_actors[actorId]->soundBalance();
+}
+
+// ScriptBase::Sound_Walk_Shuffle_Stop
+
+void ScriptBase::Footstep_Sounds_Set(int walkboxId, int stepSound) {
+ _vm->_scene->_set->setWalkboxStepSound(walkboxId, stepSound);
+}
+
+void ScriptBase::Footstep_Sound_Override_On(int footstepSoundOverride) {
+ _vm->_scene->_set->setFoodstepSoundOverride(footstepSoundOverride);
+}
+
+void ScriptBase::Footstep_Sound_Override_Off() {
+ _vm->_scene->_set->resetFoodstepSoundOverride();
+}
+
+bool ScriptBase::Music_Play(int a1, int a2, int a3, int a4, int a5, int a6, int a7) {
+ //TODO
+ warning("Music_Play(%d, %d, %d, %d, %d, %d, %d)", a1, a2, a3, a4, a5, a6, a7);
+ return false;
+}
+
+void ScriptBase::Music_Adjust(int a1, int a2, int a3) {
+ //TODO
+ warning("Music_Adjust(%d, %d, %d)", a1, a2, a3);
+}
+
+void ScriptBase::Music_Stop(int a1) {
+ //TODO
+ warning("Music_Stop(%d)", a1);
+}
+
+bool ScriptBase::Music_Is_Playing() {
+ //TODO
+ warning("Music_Is_Playing()");
+ return false;
+}
+
+void ScriptBase::Overlay_Play(const char *overlay, int a2, int a3, int a4, int a5) {
+ //TODO
+ warning("Overlay_Play(%s, %d, %d, %d, %d)", overlay, a2, a3, a4, a5);
+}
+
+void ScriptBase::Overlay_Remove(const char *overlay) {
+ //TODO
+ warning("Overlay_Remove(%s)", overlay);
+}
+
+void ScriptBase::Scene_Loop_Set_Default(int a) {
+ // debug("Scene_Loop_Set_Default(%d)", a);
+
+ _vm->_scene->loopSetDefault(a);
+ // _vm->_scene->_defaultLoop = a;
+}
+
+void ScriptBase::Scene_Loop_Start_Special(int a, int b, int c) {
+ // debug("Scene_Loop_Start_Special(%d, %d, %d)", a, b, c);
+
+ _vm->_scene->loopStartSpecial(a, b, c);
+ // _vm->_scene->_field_24_loop_start_special_param_1 = a;
+}
+
+void ScriptBase::Outtake_Play(int id, int noLocalization, int container) {
+ _vm->outtakePlay(id, noLocalization, container);
+}
+
+void ScriptBase::Ambient_Sounds_Add_Sound(int id, int time1, int time2, int volume1, int volume2, int pan1begin, int pan1end, int pan2begin, int pan2end, int priority, int unk) {
+ _vm->_ambientSounds->addSound(id, time1, time2, volume1, volume2, pan1begin, pan1end, pan2begin, pan2end, priority, unk);
+}
+
+void ScriptBase::Ambient_Sounds_Remove_Sound(int id, bool a2) {
+ //TODO
+ warning("Ambient_Sounds_Remove_Sound(%d, %d)", id, a2);
+}
+
+void ScriptBase::Ambient_Sounds_Add_Speech_Sound(int id, int unk1, int time1, int time2, int volume1, int volume2, int pan1begin, int pan1end, int pan2begin, int pan2end, int priority, int unk2){
+ //TODO
+ warning("Ambient_Sounds_Add_Speech_Sound(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", id, unk1, time1, time2, volume1, volume2, pan1begin, pan1end, pan2begin, pan2end, priority, unk2);
+}
+
+// ScriptBase::Ambient_Sounds_Remove_Speech_Sound
+
+int ScriptBase::Ambient_Sounds_Play_Sound(int a1, int a2, int a3, int a4, int a5) {
+ //TODO
+ warning("Ambient_Sounds_Remove_Sound(%d, %d, %d, %d, %d)", a1, a2, a3, a4, a5);
+ return -1;
+}
+
+// ScriptBase::Ambient_Sounds_Play_Speech_Sound
+
+void ScriptBase::Ambient_Sounds_Remove_All_Non_Looping_Sounds(int time) {
+ //TODO
+ warning("Ambient_Sounds_Remove_All_Non_Looping_Sounds(%d)", time);
+ // _vm->_ambientSounds->removeAllNonLoopingSounds(time);
+}
+
+void ScriptBase::Ambient_Sounds_Add_Looping_Sound(int id, int volume, int pan, int fadeInTime) {
+ _vm->_ambientSounds->addLoopingSound(id, volume, pan, fadeInTime);
+}
+
+void ScriptBase::Ambient_Sounds_Adjust_Looping_Sound(int id, int panBegin, int panEnd, int a4) {
+ //TODO
+ warning("Ambient_Sounds_Adjust_Looping_Sound(%d, %d, %d, %d)", id, panBegin, panEnd, a4);
+}
+
+void ScriptBase::Ambient_Sounds_Remove_Looping_Sound(int id, bool a2){
+ //TODO
+ warning("Ambient_Sounds_Remove_Looping_Sound(%d, %d)", id, a2);
+}
+
+void ScriptBase::Ambient_Sounds_Remove_All_Looping_Sounds(int time) {
+ //TODO
+ warning("Ambient_Sounds_Remove_All_Looping_Sounds(%d)", time);
+ // _vm->_ambientSounds->removeAllLoopingSounds(time);
+}
+
+void ScriptBase::Setup_Scene_Information(float actorX, float actorY, float actorZ, int actorFacing) {
+ _vm->_scene->setActorStart(Vector3(actorX, actorY, actorZ), actorFacing);
+}
+
+bool ScriptBase::Dialogue_Menu_Appear(int x, int y) {
+ //TODO
+ warning("Dialogue_Menu_Appear(%d, %d)", x, y);
+ return false;
+}
+
+bool ScriptBase::Dialogue_Menu_Disappear() {
+ //TODO
+ warning("Dialogue_Menu_Disappear()");
+ return false;
+}
+
+bool ScriptBase::Dialogue_Menu_Clear_List() {
+ //TODO
+ warning("Dialogue_Menu_Clear_List()");
+ return false;
+}
+
+bool ScriptBase::Dialogue_Menu_Add_To_List(int answer) {
+ //TODO
+ warning("Dialogue_Menu_Add_To_List(%d)", answer);
+ return false;
+}
+
+bool ScriptBase::Dialogue_Menu_Add_DONE_To_List(int answerValue) {
+ //TODO
+ warning("Dialogue_Menu_Add_DONE_To_List(%d)", answerValue);
+ return false;
+}
+
+// Dialogue_Menu_Add_To_List_Never_Repeat_Once_Selected
+
+bool ScriptBase::DM_Add_To_List(int answer, int a2, int a3, int a4) {
+ //TODO
+ warning("DM_Add_To_List(%d, %d, %d, %d)", answer, a2, a3, a4);
+ return false;
+}
+
+bool ScriptBase::DM_Add_To_List_Never_Repeat_Once_Selected(int answer, int a2, int a3, int a4) {
+ //TODO
+ warning("DM_Add_To_List_Never_Repeat_Once_Selected(%d, %d, %d, %d)", answer, a2, a3, a4);
+ return false;
+}
+
+void ScriptBase::Dialogue_Menu_Remove_From_List(int answer) {
+ //TODO
+ warning("Dialogue_Menu_Remove_From_List(%d)", answer);
+}
+
+int ScriptBase::Dialogue_Menu_Query_Input() {
+ //TODO
+ warning("Dialogue_Menu_Query_Input()");
+ return 0;
+}
+
+int ScriptBase::Dialogue_Menu_Query_List_Size() {
+ //TODO
+ warning("Dialogue_Menu_Query_List_Size()");
+ return 0;
+}
+
+void ScriptBase::Scene_Exit_Add_2D_Exit(int index, int left, int top, int right, int down, int type) {
+ _vm->_scene->_exits->add(index, Common::Rect(left, top, right, down), type);
+}
+
+void ScriptBase::Scene_Exit_Remove(int index) {
+ _vm->_scene->_exits->remove(index);
+}
+
+void ScriptBase::Scene_Exits_Disable() {
+ _vm->_scene->_exits->setEnabled(false);
+}
+void ScriptBase::Scene_Exits_Enable() {
+ _vm->_scene->_exits->setEnabled(true);
+}
+
+void ScriptBase::Scene_2D_Region_Add(int index, int left, int top, int right, int down) {
+ _vm->_scene->_regions->add(index, Common::Rect(left, top, right, down), 0);
+}
+
+void ScriptBase::Scene_2D_Region_Remove(int index) {
+ _vm->_scene->_regions->remove(index);
+}
+
+void ScriptBase::World_Waypoint_Set(int waypointId, int sceneId, float x, float y, float z) {
+ //TODO
+ warning("World_Waypoint_Set(%d, %d, %f, %f, %f)", waypointId, sceneId, x, y, z);
+}
+// ScriptBase::World_Waypoint_Reset
+
+float ScriptBase::World_Waypoint_Query_X(int waypointId) {
+ //TODO
+ warning("World_Waypoint_Query_X(%d)", waypointId);
+ return 0.0f;
+}
+
+float ScriptBase::World_Waypoint_Query_Y(int waypointId) {
+ //TODO
+ warning("World_Waypoint_Query_Y(%d)", waypointId);
+ return 0.0f;
+}
+
+float ScriptBase::World_Waypoint_Query_Z(int waypointId) {
+ //TODO
+ warning("World_Waypoint_Query_Z(%d)", waypointId);
+ return 0.0f;
+}
+
+void ScriptBase::Combat_Cover_Waypoint_Set_Data(int combatCoverId, int a2, int sceneId, int a4, float x, float y, float z) {
+ //TODO
+ warning("Combat_Cover_Waypoint_Set_Data(%d, %d, %d, %d, %f, %f, %f)", combatCoverId, a2, sceneId, a4, x, y, z);
+}
+
+void ScriptBase::Combat_Flee_Waypoint_Set_Data(int combatFleeWaypointId, int a2, int sceneId, int a4, float x, float y, float z, int a8) {
+ //TODO
+ warning("Combat_Cover_Waypoint_Set_Data(%d, %d, %d, %d, %f, %f, %f, %d)", combatFleeWaypointId, a2, sceneId, a4, x, y, z, a8);
+}
+
+void ScriptBase::Police_Maze_Target_Track_Add(int itemId, float startX, float startY, float startZ, float endX, float endY, float endZ, int steps, signed int data[], bool a10) {
+ //TODO
+ warning("Police_Maze_Target_Track_Add(%d, %f, %f, %f, %f, %f, %f, %d, %p, %d)", itemId, startX, startY, startZ, endX, endY, endZ, steps, (void *)data, a10);
+
+}
+
+// ScriptBase::Police_Maze_Query_Score
+// ScriptBase::Police_Maze_Zero_Score
+// ScriptBase::Police_Maze_Increment_Score
+// ScriptBase::Police_Maze_Decrement_Score
+// ScriptBase::Police_Maze_Set_Score
+
+void ScriptBase::Police_Maze_Set_Pause_State(int a1) {
+ //TODO
+ warning("Police_Maze_Set_Pause_State(%d)", a1);
+}
+
+void ScriptBase::CDB_Set_Crime(int crimeId, int value) {
+ _vm->_crimesDatabase->setCrime(crimeId, value);
+}
+
+void ScriptBase::CDB_Set_Clue_Asset_Type(int assetId, int type) {
+ _vm->_crimesDatabase->setAssetType(assetId, type);
+}
+
+void ScriptBase::SDB_Set_Actor(int suspectId, int actorId) {
+ _vm->_suspectsDatabase->get(suspectId)->setActor(actorId);
+}
+
+bool ScriptBase::SDB_Add_Photo_Clue(int suspectId, int a2, int a3) {
+ return _vm->_suspectsDatabase->get(suspectId)->addPhotoClue(a2, a3);
+}
+
+void ScriptBase::SDB_Set_Name(int actorId) {
+ // not implemented in game
+}
+
+void ScriptBase::SDB_Set_Sex(int suspectId, int sex) {
+ _vm->_suspectsDatabase->get(suspectId)->setSex(sex);
+}
+
+bool ScriptBase::SDB_Add_Identity_Clue(int suspectId, int clueId) {
+ return _vm->_suspectsDatabase->get(suspectId)->addIdentityClue(clueId);
+}
+
+bool ScriptBase::SDB_Add_MO_Clue(int suspectId, int clueId) {
+ return _vm->_suspectsDatabase->get(suspectId)->addMOClue(clueId);
+}
+
+bool ScriptBase::SDB_Add_Whereabouts_Clue(int suspectId, int clueId) {
+ return _vm->_suspectsDatabase->get(suspectId)->addWhereaboutsClue(clueId);
+}
+
+bool ScriptBase::SDB_Add_Replicant_Clue(int suspectId, int clueId) {
+ return _vm->_suspectsDatabase->get(suspectId)->addReplicantClue(clueId);
+}
+
+bool ScriptBase::SDB_Add_Non_Replicant_Clue(int suspectId, int clueId) {
+ return _vm->_suspectsDatabase->get(suspectId)->addNonReplicantClue(clueId);
+}
+
+bool ScriptBase::SDB_Add_Other_Clue(int suspectId, int clueId) {
+ return _vm->_suspectsDatabase->get(suspectId)->addOtherClue(clueId);
+}
+
+void ScriptBase::Spinner_Set_Selectable_Destination_Flag(int a1, int a2) {
+ //TODO
+ warning("Spinner_Set_Selectable_Destination_Flag(%d, %d)", a1, a2);
+}
+
+// ScriptBase::Spinner_Query_Selectable_Destination_Flag
+
+int ScriptBase::Spinner_Interface_Choose_Dest(int a1, int a2) {
+ //TODO
+ warning("Spinner_Interface_Choose_Dest(%d, %d)", a1, a2);
+ return -1;
+}
+
+// ScriptBase::Spinner_Set_Selectable_Destination_Flag
+// ScriptBase::Spinner_Query_Selectable_Destination_Flag
+// ScriptBase::Spinner_Interface_Choose_Dest
+
+void ScriptBase::ESPER_Flag_To_Activate() {
+ //TODO
+ warning("ESPER_Flag_To_Activate()");
+}
+
+bool ScriptBase::Voight_Kampff_Activate(int a1, int a2){
+ //TODO
+ warning("Voight_Kampff_Activate(%d, %d)", a1, a2);
+ return false;
+}
+
+int ScriptBase::Elevator_Activate(int elevator) {
+ //TODO
+ warning("Elevator_Activate(%d)", elevator);
+ return 0;
+}
+
+void ScriptBase::View_Score_Board() {
+ //TODO
+ warning("View_Score_Board()");
+}
+// ScriptBase::Query_Score
+
+void ScriptBase::Set_Score(int a0, int a1) {
+ // debug("STUB: Set_Score(%d, %d)", a0, a1);
+}
+
+void ScriptBase::Give_McCoy_Ammo(int ammoType, int ammo) {
+ _vm->_settings->addAmmo(ammoType, ammo);
+}
+
+void ScriptBase::Assign_Player_Gun_Hit_Sounds(int row, int soundId1, int soundId2, int soundId3) {
+ _vm->_combat->setHitSoundId(row, 0, soundId1);
+ _vm->_combat->setHitSoundId(row, 1, soundId2);
+ _vm->_combat->setHitSoundId(row, 2, soundId3);
+}
+
+void ScriptBase::Assign_Player_Gun_Miss_Sounds(int row, int soundId1, int soundId2, int soundId3) {
+ _vm->_combat->setMissSoundId(row, 0, soundId1);
+ _vm->_combat->setMissSoundId(row, 1, soundId2);
+ _vm->_combat->setMissSoundId(row, 2, soundId3);
+}
+
+void ScriptBase::Disable_Shadows(int animationsIdsList[], int listSize) {
+ _vm->_sliceRenderer->disableShadows(animationsIdsList, listSize);
+}
+
+bool ScriptBase::Query_System_Currently_Loading_Game() {
+ return _vm->_gameIsLoading;
+}
+
+void ScriptBase::Actor_Retired_Here(int actorId, int width, int height, int retired, int retiredByActorId) {
+ Actor *actor = _vm->_actors[actorId];
+ Vector3 actorPosition;
+ actor->getXYZ(&actorPosition.x, &actorPosition.y, &actorPosition.z);
+ actor->retire(retired, width, height, retiredByActorId);
+ actor->setAtXYZ(actorPosition, actor->getFacing(), true, 0, true);
+ _vm->_sceneObjects->setRetired(actorId, true);
+}
+
+void ScriptBase::Clickable_Object(const char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsClickable(objectId, true, !_vm->_sceneIsLoading);
+}
+
+void ScriptBase::Unclickable_Object(const char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsClickable(objectId, false, !_vm->_sceneIsLoading);
+}
+
+void ScriptBase::Obstacle_Object(const char *objectName, bool updateWalkpath) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsObstacle(objectId, true, !_vm->_sceneIsLoading, !_vm->_sceneIsLoading && updateWalkpath);
+}
+
+void ScriptBase::Unobstacle_Object(const char *objectName, bool updateWalkpath) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsObstacle(objectId, false, !_vm->_sceneIsLoading, !_vm->_sceneIsLoading && updateWalkpath);
+}
+
+void ScriptBase::Obstacle_Flag_All_Objects(bool isObstacle) {
+ _vm->_scene->objectSetIsObstacleAll(isObstacle, !_vm->_sceneIsLoading);
+}
+
+void ScriptBase::Combat_Target_Object(const char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsTarget(objectId, true, !_vm->_sceneIsLoading);
+}
+
+void ScriptBase::Un_Combat_Target_Object(const char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsTarget(objectId, true, !_vm->_sceneIsLoading);
+}
+
+void ScriptBase::Set_Fade_Color(float r, float g, float b) {
+ _vm->_scene->_set->_effects->setFadeColor(r, g, b);
+}
+
+void ScriptBase::Set_Fade_Density(float density) {
+ _vm->_scene->_set->_effects->setFadeDensity(density);
+}
+
+void ScriptBase::Set_Fog_Color(const char* fogName, float r, float g, float b) {
+ _vm->_scene->_set->_effects->setFogColor(fogName, r, g, b);
+}
+
+void ScriptBase::Set_Fog_Density(const char* fogName, float density) {
+ _vm->_scene->_set->_effects->setFogDensity(fogName, density);
+}
+
+void ScriptBase::ADQ_Flush() {
+ _vm->_adq->flush(0, true);
+}
+
+void ScriptBase::ADQ_Add(int actorId, int sentenceId, int animationMode) {
+ _vm->_adq->add(actorId, sentenceId, animationMode);
+}
+
+void ScriptBase::ADQ_Add_Pause(int delay) {
+ _vm->_adq->addPause(delay);
+}
+
+bool ScriptBase::Game_Over() {
+ _vm->_gameIsRunning = false;
+ _vm->_gameOver = true;
+ return true;
+}
+
+void ScriptBase::Autosave_Game(int textId) {
+ _vm->_gameAutoSave = textId;
+}
+
+void ScriptBase::I_Sez(const char *str) {
+ _vm->ISez(str);
+}
+
+void ScriptBase::AI_Countdown_Timer_Start(int actorId, signed int timer, int seconds) {
+// if (timer >= 0 && timer <= 2)
+// _vm->_actors[actorId]->timerSet(timer, 1000 * seconds);
+}
+
+void ScriptBase::AI_Countdown_Timer_Reset(int actorId, int timer) {
+// if (timer >= 0 && timer <= 2)
+// _vm->_actors[actorId]->timerReset(timer);
+}
+
+void ScriptBase::AI_Movement_Track_Unpause(int actorId) {
+ //_vm->_actors[actorId]->movementTrackUnpause();
+}
+
+void ScriptBase::AI_Movement_Track_Pause(int actorId) {
+ //_vm->_actors[actorId]->movementTrackPause();
+}
+
+void ScriptBase::AI_Movement_Track_Repeat(int actorId) {
+ _vm->_actors[actorId]->_movementTrack->repeat();
+ //_vm->_actors[actorId]->movementTrackRepeat(1);
+}
+
+void ScriptBase::AI_Movement_Track_Append_Run_With_Facing(int actorId, int waypointId, int delay, int angle) {
+ _vm->_actors[actorId]->_movementTrack->append(waypointId, delay, angle, 1);
+}
+
+void ScriptBase::AI_Movement_Track_Append_With_Facing(int actorId, int waypointId, int delay, int angle) {
+ _vm->_actors[actorId]->_movementTrack->append(waypointId, delay, angle, 0);
+}
+
+void ScriptBase::AI_Movement_Track_Append_Run(int actorId, int waypointId, int delay) {
+ _vm->_actors[actorId]->_movementTrack->append(waypointId, delay, 1);
+}
+
+void ScriptBase::AI_Movement_Track_Append(int actorId, int waypointId, int delay) {
+ _vm->_actors[actorId]->_movementTrack->append(waypointId, delay, 0);
+}
+
+void ScriptBase::AI_Movement_Track_Flush(int actorId) {
+ _vm->_actors[actorId]->_movementTrack->flush();
+ _vm->_actors[actorId]->stopWalking(false);
+}
+
+void ScriptBase::KIA_Play_Actor_Dialogue(int a1, int a2) {
+ //TODO
+ warning("KIA_Play_Actor_Dialogue(%d, %d)", a1, a2);
+}
+
+void ScriptBase::KIA_Play_Slice_Model(int a1) {
+ //TODO
+ warning("KIA_Play_Slice_Model(%d)", a1);
+}
+
+void ScriptBase::KIA_Play_Photograph(int a1) {
+ //TODO
+ warning("KIA_Play_Photograph(%d)", a1);
+}
+
+void ScriptBase::ESPER_Add_Photo(const char* fileName, int a2, int a3) {
+ //TODO
+ warning("ESPER_Add_Photo(%s, %d, %d)", fileName, a2, a3);
+}
+
+void ScriptBase::ESPER_Define_Special_Region(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, const char *name) {
+ //TODO
+ warning("ESPER_Define_Special_Region(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %s)", a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, name);
+}
+
+AIScripts::AIScripts(BladeRunnerEngine *vm) : _vm(vm), _inScriptCounter(0) {
+ for (int i = 0; i != 100; ++i)
+ _AIScripts[i] = 0;
+
+ _AIScripts[0] = new AIScript_McCoy(_vm);
+ _AIScripts[23] = new AIScript_Officer_Leroy(_vm);
+}
+
+void AIScripts::Initialize(int actor) {
+ if (_AIScripts[actor])
+ _AIScripts[actor]->Initialize();
+}
+
+void AIScripts::UpdateAnimation(int actor, int *animation, int *frame) {
+ _inScriptCounter++;
+ if (_AIScripts[actor])
+ _AIScripts[actor]->UpdateAnimation(animation, frame);
+ _inScriptCounter--;
+}
+
+void AIScripts::ChangeAnimationMode(int actor, int mode) {
+ _inScriptCounter++;
+ if (_AIScripts[actor])
+ _AIScripts[actor]->ChangeAnimationMode(mode);
+ _inScriptCounter--;
+}
+
+} // End of namespace BladeRunner