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.cpp116
1 files changed, 71 insertions, 45 deletions
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
index 2aca6db9d3..3c68717116 100644
--- a/engines/bladerunner/script/script.cpp
+++ b/engines/bladerunner/script/script.cpp
@@ -45,6 +45,7 @@
#include "bladerunner/set_effects.h"
#include "bladerunner/scene.h"
#include "bladerunner/scene_objects.h"
+#include "bladerunner/script/police_maze.h"
#include "bladerunner/slice_animations.h"
#include "bladerunner/slice_renderer.h"
#include "bladerunner/suspects_database.h"
@@ -52,6 +53,7 @@
#include "bladerunner/ui/elevator.h"
#include "bladerunner/ui/esper.h"
#include "bladerunner/ui/kia.h"
+#include "bladerunner/ui/scores.h"
#include "bladerunner/ui/spinner.h"
#include "bladerunner/ui/vk.h"
#include "bladerunner/vector.h"
@@ -130,7 +132,7 @@ void ScriptBase::Actor_Face_Heading(int actorId, int heading, bool animate) {
}
int ScriptBase::Actor_Query_Friendliness_To_Other(int actorId, int otherActorId) {
- return _vm->_actors[actorId]->_friendlinessToOther[otherActorId];
+ return _vm->_actors[actorId]->getFriendlinessToOther(otherActorId);
}
void ScriptBase::Actor_Modify_Friendliness_To_Other(int actorId, int otherActorId, signed int change) {
@@ -158,27 +160,27 @@ void ScriptBase::Actor_Set_Combat_Aggressiveness(int actorId, int combatAggressi
}
int ScriptBase::Actor_Query_Current_HP(int actorId) {
- return _vm->_actors[actorId]->_currentHP;
+ return _vm->_actors[actorId]->getCurrentHP();
}
int ScriptBase::Actor_Query_Max_HP(int actorId) {
- return _vm->_actors[actorId]->_maxHP;
+ return _vm->_actors[actorId]->getMaxHP();
}
int ScriptBase::Actor_Query_Combat_Aggressiveness(int actorId) {
- return _vm->_actors[actorId]->_combatAggressiveness;
+ return _vm->_actors[actorId]->getCombatAggressiveness();
}
int ScriptBase::Actor_Query_Honesty(int actorId) {
- return _vm->_actors[actorId]->_honesty;
+ return _vm->_actors[actorId]->getHonesty();
}
int ScriptBase::Actor_Query_Intelligence(int actorId) {
- return _vm->_actors[actorId]->_intelligence;
+ return _vm->_actors[actorId]->getIntelligence();
}
int ScriptBase::Actor_Query_Stability(int actorId) {
- return _vm->_actors[actorId]->_stability;
+ return _vm->_actors[actorId]->getStability();
}
void ScriptBase::Actor_Modify_Current_HP(int actorId, signed int change) {
@@ -218,8 +220,8 @@ void ScriptBase::Actor_Combat_AI_Hit_Attempt(int actorId) {
_vm->_actors[actorId]->_combatInfo->hitAttempt();
}
-void ScriptBase::Non_Player_Actor_Combat_Mode_On(int actorId, int a2, int a3, int otherActorId, int a5, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int a9, int a10, int a11, int a12, int a13, int a14) {
- _vm->_actors[actorId]->combatModeOn(a2, a3, otherActorId, a5, animationModeCombatIdle, animationModeCombatWalk, animationModeCombatRun, a9, a10, a11, a12, a13, a14);
+void ScriptBase::Non_Player_Actor_Combat_Mode_On(int actorId, int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int actionRatio, int damage, int range, bool unstoppable) {
+ _vm->_actors[actorId]->combatModeOn(initialState, rangedAttack, enemyId, waypointType, animationModeCombatIdle, animationModeCombatWalk, animationModeCombatRun, fleeRatio, coverRatio, actionRatio, damage, range, unstoppable);
}
void ScriptBase::Non_Player_Actor_Combat_Mode_Off(int actorId) {
@@ -680,15 +682,20 @@ void ScriptBase::Item_Remove_From_World(int itemId) {
}
void ScriptBase::Item_Spin_In_World(int itemId) {
- warning("Item_Spin_In_World(%d)", itemId);
+ _vm->_items->spinInWorld(itemId);
+ if (_vm->_items->isPoliceMazeEnemy(itemId)) {
+ Police_Maze_Increment_Score(1);
+ } else {
+ Police_Maze_Decrement_Score(1);
+ }
}
void ScriptBase::Item_Flag_As_Target(int itemId) {
- warning("Item_Flag_As_Target(%d)", itemId);
+ _vm->_items->setIsTarget(itemId, true);
}
void ScriptBase::Item_Flag_As_Non_Target(int itemId) {
- warning("Item_Flag_As_Non_Target(%d)", itemId);
+ _vm->_items->setIsTarget(itemId, false);
}
void ScriptBase::Item_Pickup_Spin_Effect(int animationId, int x, int y) {
@@ -723,8 +730,9 @@ int ScriptBase::Animation_Skip_To_Frame() {
void ScriptBase::Delay(int miliseconds) {
Player_Loses_Control();
int endTime = _vm->getTotalPlayTime() + miliseconds;
- while ((int)_vm->getTotalPlayTime() < endTime)
+ while ((int)_vm->getTotalPlayTime() < endTime) {
_vm->gameTick();
+ }
Player_Gains_Control();
}
@@ -825,8 +833,7 @@ int ScriptBase::Random_Query(int min, int 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);
+ _vm->_audioPlayer->playAud(_vm->_gameInfo->getSfxTrack(id), volume, panFrom, panTo, priority);
}
void ScriptBase::Sound_Play_Speech_Line(int actorId, int sentenceId, int volume, int a4, int priority) {
@@ -892,8 +899,7 @@ void ScriptBase::Footstep_Sound_Override_Off() {
}
bool ScriptBase::Music_Play(int musicId, int volume, int pan, int timeFadeIn, int timePlay, int loop, int timeFadeOut) {
- const char *musicName = _vm->_gameInfo->getMusicTrack(musicId);
- return _vm->_music->play(musicName, volume, pan, timeFadeIn, timePlay, loop, timeFadeOut);
+ return _vm->_music->play(_vm->_gameInfo->getMusicTrack(musicId), volume, pan, timeFadeIn, timePlay, loop, timeFadeOut);
}
void ScriptBase::Music_Adjust(int volume, int pan, int delay) {
@@ -1075,31 +1081,56 @@ float ScriptBase::World_Waypoint_Query_Z(int waypointId) {
return _vm->_waypoints->getZ(waypointId);
}
-void ScriptBase::Combat_Cover_Waypoint_Set_Data(int combatCoverId, int type, int setId, int sceneId, float x, float y, float z) {
- //TODO
- warning("Combat_Cover_Waypoint_Set_Data(%d, %d, %d, %d, %f, %f, %f)", combatCoverId, type, setId, sceneId, x, y, z);
+void ScriptBase::Combat_Cover_Waypoint_Set_Data(int coverWaypointId, int type, int setId, int sceneId, float x, float y, float z) {
+ assert(coverWaypointId < (int)_vm->_combat->_coverWaypoints.size());
+
+ _vm->_combat->_coverWaypoints[coverWaypointId].type = type;
+ _vm->_combat->_coverWaypoints[coverWaypointId].setId = setId;
+ _vm->_combat->_coverWaypoints[coverWaypointId].sceneId = sceneId;
+ _vm->_combat->_coverWaypoints[coverWaypointId].position.x = x;
+ _vm->_combat->_coverWaypoints[coverWaypointId].position.y = y;
+ _vm->_combat->_coverWaypoints[coverWaypointId].position.z = z;
}
-void ScriptBase::Combat_Flee_Waypoint_Set_Data(int combatFleeWaypointId, int type, int setId, int sceneId, float x, float y, float z, int a8) {
- //TODO
- warning("Combat_Cover_Waypoint_Set_Data(%d, %d, %d, %d, %f, %f, %f, %d)", combatFleeWaypointId, type, setId, sceneId, x, y, z, a8);
+void ScriptBase::Combat_Flee_Waypoint_Set_Data(int fleeWaypointId, int type, int setId, int sceneId, float x, float y, float z, int a8) {
+ assert(fleeWaypointId < (int)_vm->_combat->_fleeWaypoints.size());
+
+ _vm->_combat->_fleeWaypoints[fleeWaypointId].type = type;
+ _vm->_combat->_fleeWaypoints[fleeWaypointId].setId = setId;
+ _vm->_combat->_fleeWaypoints[fleeWaypointId].sceneId = sceneId;
+ _vm->_combat->_fleeWaypoints[fleeWaypointId].position.x = x;
+ _vm->_combat->_fleeWaypoints[fleeWaypointId].position.y = y;
+ _vm->_combat->_fleeWaypoints[fleeWaypointId].position.z = z;
+ _vm->_combat->_fleeWaypoints[fleeWaypointId].field7 = 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);
+void ScriptBase::Police_Maze_Target_Track_Add(int itemId, float startX, float startY, float startZ, float endX, float endY, float endZ, int steps, const int* instructions, bool isActive) {
+ _vm->_policeMaze->_tracks[itemId]->add(itemId, startX, startY, startZ, endX, endY, endZ, steps, instructions, isActive);
+ _vm->_policeMaze->activate();
+}
+
+int ScriptBase::Police_Maze_Query_Score() {
+ return Global_Variable_Query(kVariablePoliceMazeScore);
+}
+void ScriptBase::Police_Maze_Zero_Score() {
+ Global_Variable_Reset(kVariablePoliceMazeScore);
}
-// 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_Increment_Score(int delta) {
+ Global_Variable_Set(kVariablePoliceMazeScore, Global_Variable_Query(kVariablePoliceMazeScore) + delta);
+}
-void ScriptBase::Police_Maze_Set_Pause_State(int a1) {
- //TODO
- warning("Police_Maze_Set_Pause_State(%d)", a1);
+void ScriptBase::Police_Maze_Decrement_Score(int delta) {
+ Global_Variable_Set(kVariablePoliceMazeScore, Global_Variable_Query(kVariablePoliceMazeScore) - delta);
+}
+
+void ScriptBase::Police_Maze_Set_Score(int value) {
+ Global_Variable_Set(kVariablePoliceMazeScore, value);
+}
+
+void ScriptBase::Police_Maze_Set_Pause_State(bool state) {
+ _vm->_policeMaze->setPauseState(state);
}
void ScriptBase::CDB_Set_Crime(int clueId, int crimeId) {
@@ -1181,18 +1212,15 @@ int ScriptBase::Elevator_Activate(int elevatorId) {
}
void ScriptBase::View_Score_Board() {
- //TODO
- warning("View_Score_Board()");
+ _vm->_scores->open();
}
-int ScriptBase::Query_Score(int a0) {
- warning("Query_Score(%d)", a0);
-
- return 0;
+int ScriptBase::Query_Score(int index) {
+ return _vm->_scores->query(index);
}
-void ScriptBase::Set_Score(int a0, int a1) {
- warning("Set_Score(%d, %d)", a0, a1);
+void ScriptBase::Set_Score(int index, int value) {
+ _vm->_scores->set(index, value);
}
void ScriptBase::Give_McCoy_Ammo(int ammoType, int ammo) {
@@ -1221,10 +1249,8 @@ bool ScriptBase::Query_System_Currently_Loading_Game() {
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, false, true);
+ actor->setAtXYZ(actor->getXYZ(), actor->getFacing(), true, false, true);
_vm->_sceneObjects->setRetired(actorId + kSceneObjectOffsetActors, true);
}