diff options
Diffstat (limited to 'engines/bladerunner/script/script.cpp')
-rw-r--r-- | engines/bladerunner/script/script.cpp | 116 |
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); } |