aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script
diff options
context:
space:
mode:
authorPeter Kohaut2015-09-19 01:47:54 +0200
committerEugene Sandulenko2016-09-29 22:33:40 +0200
commit2888d0b3460cdca2dd52f8d6aa94b429d46345ad (patch)
tree7092952c395cb32ce26c9c43589de3248053736a /engines/bladerunner/script
parentde7f961f484bc29c33240a29376bbd24dc4d6139 (diff)
downloadscummvm-rg350-2888d0b3460cdca2dd52f8d6aa94b429d46345ad.tar.gz
scummvm-rg350-2888d0b3460cdca2dd52f8d6aa94b429d46345ad.tar.bz2
scummvm-rg350-2888d0b3460cdca2dd52f8d6aa94b429d46345ad.zip
BLADERUNNER: forgotten script files....
Diffstat (limited to 'engines/bladerunner/script')
-rw-r--r--engines/bladerunner/script/rc01.cpp7
-rw-r--r--engines/bladerunner/script/script.cpp696
-rw-r--r--engines/bladerunner/script/script.h215
3 files changed, 690 insertions, 228 deletions
diff --git a/engines/bladerunner/script/rc01.cpp b/engines/bladerunner/script/rc01.cpp
index 81c4795956..73a5f899ac 100644
--- a/engines/bladerunner/script/rc01.cpp
+++ b/engines/bladerunner/script/rc01.cpp
@@ -154,4 +154,11 @@ void ScriptRC01::SceneFrameAdvanced(int frame) {
Sound_Play(118, 40, 80, 80, 50); // CARDOWN3.AUD
}
+
+void ScriptRC01::SceneActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet) {
+
+}
+
+
+
} // End of namespace BladeRunner
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
index 5788936536..c71326d75e 100644
--- a/engines/bladerunner/script/script.cpp
+++ b/engines/bladerunner/script/script.cpp
@@ -33,6 +33,12 @@
#include "bladerunner/scene.h"
#include "bladerunner/text_resource.h"
#include "bladerunner/vector.h"
+#include "bladerunner/slice_renderer.h"
+#include "bladerunner/actor.h"
+#include "bladerunner/waypoints.h"
+#include "bladerunner/slice_animations.h"
+#include "bladerunner/combat.h"
+#include "bladerunner/settings.h"
namespace BladeRunner {
@@ -41,6 +47,8 @@ bool Script::open(const Common::String &name) {
if (name == "RC01") { _currentScript = new ScriptRC01(_vm); return true; }
+ _currentScript = new ScriptRC01(_vm); return true;
+
return false;
}
@@ -66,76 +74,344 @@ void Script::SceneFrameAdvanced(int frame) {
_inScriptCounter--;
}
-// ScriptBase::Preload
-// ScriptBase::Actor_Put_In_Set
-// ScriptBase::Actor_Set_At_XYZ
-// ScriptBase::Actor_Set_At_Waypoint
-// ScriptBase::Region_Check
+void Script::SceneActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet) {
+ _inScriptCounter++;
+ _currentScript->SceneActorChangedGoal(actorId, newGoal, oldGoal, currentSet);
+ _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 angle) {
+ _vm->_actors[actorId]->set_at_xyz(Vector3(x, y, z), angle, true, 0, 0);
+}
+
+void ScriptBase::Actor_Set_At_Waypoint(int actorId, int waypointId, int angle) {
+ _vm->_actors[actorId]->set_at_waypoint(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;
+ return false;
+}
+
// ScriptBase::Object_Query_Click
// ScriptBase::Object_Do_Ground_Click
-// ScriptBase::Object_Mark_For_Hot_Mouse
-// ScriptBase::Actor_Face_Actor
-// ScriptBase::Actor_Face_Object
-// ScriptBase::Actor_Face_Item
-// ScriptBase::Actor_Face_Waypoint
-// ScriptBase::Actor_Face_XYZ
-// ScriptBase::Actor_Face_Current_Camera
-// ScriptBase::Actor_Face_Heading
-// ScriptBase::Actor_Query_Friendliness_To_Other
-// ScriptBase::Actor_Modify_Friendliness_To_Other
-// ScriptBase::Actor_Set_Friendliness_To_Other
-// ScriptBase::Actor_Set_Honesty
-// ScriptBase::Actor_Set_Intelligence
-// ScriptBase::Actor_Set_Stability
-// ScriptBase::Actor_Set_Combat_Aggressiveness
-// ScriptBase::Actor_Query_Current_HP
-// ScriptBase::Actor_Query_Max_HP
-// ScriptBase::Actor_Query_Combat_Aggressiveness
-// ScriptBase::Actor_Query_Honesty
-// ScriptBase::Actor_Query_Intelligence
-// ScriptBase::Actor_Query_Stability
-// ScriptBase::Actor_Modify_Current_HP
-// ScriptBase::Actor_Modify_Max_HP
-// ScriptBase::Actor_Modify_Combat_Aggressiveness
-// ScriptBase::Actor_Modify_Honesty
-// ScriptBase::Actor_Modify_Intelligence
-// ScriptBase::Actor_Modify_Stability
-// ScriptBase::Actor_Set_Flag_Damage_Anim_If_Moving
-// ScriptBase::Actor_Query_Flag_Damage_Anim_If_Moving
-// ScriptBase::Actor_Combat_AI_Hit_Attempt
-// ScriptBase::Non_Player_Actor_Combat_Mode_On
-// ScriptBase::Non_Player_Actor_Combat_Mode_Off
-// ScriptBase::Actor_Set_Health
-// ScriptBase::Actor_Set_Targetable
-// ScriptBase::Actor_Says
-// ScriptBase::Actor_Says_With_Pause
+
+bool ScriptBase::Object_Mark_For_Hot_Mouse(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, 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) {
+ _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,1)
+ 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,1)
+
+ 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();
+}
void ScriptBase::Actor_Voice_Over(int sentenceId, int actorId) {
- // Wait for any existing speech to end
+ _vm->gameWaitForActive();
+ _vm->loopActorSpeaking();
+ //_vm->ADQ->flush(1,1)
+
+ 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 animationId) {
+ return _vm->_sliceAnimations->getNumberOfFrames(animationId);
+}
+
+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();
+}
- // TODO: Hack - This needs to go through the actor class
- char name[13];
- sprintf(name, "%02d-%04d.AUD", actorId, sentenceId);
- _vm->_audioSpeech->playSpeech(name);
-}
-
-// ScriptBase::Actor_Start_Speech_Sample
-// ScriptBase::Actor_Start_Voice_Over_Sample
-// ScriptBase::Actor_Query_Which_Set_In
-// ScriptBase::Actor_Query_Is_In_Current_Set
-// ScriptBase::Actor_Query_In_Set
-// ScriptBase::Actor_Query_Inch_Distance_From_Actor
-// ScriptBase::Actor_Query_Inch_Distance_From_Waypoint
-// ScriptBase::Actor_Query_In_Between_Two_Actors
-// ScriptBase::Actor_Set_Goal_Number
-// ScriptBase::Actor_Query_Goal_Number
-// ScriptBase::Actor_Query_XYZ
-// ScriptBase::Actor_Query_Facing_1024
-// ScriptBase::Actor_Set_Frame_Rate_FPS
-// ScriptBase::Slice_Animation_Query_Number_Of_Frames
-// ScriptBase::Actor_Change_Animation_Mode
-// ScriptBase::Actor_Query_Animation_Mode
// ScriptBase::Loop_Actor_Walk_To_Actor
// ScriptBase::Loop_Actor_Walk_To_Item
// ScriptBase::Loop_Actor_Walk_To_Scene_Object
@@ -147,48 +423,129 @@ void ScriptBase::Actor_Voice_Over(int sentenceId, int actorId) {
// ScriptBase::Loop_Actor_Travel_Stairs
// ScriptBase::Loop_Actor_Travel_Ladder
-void ScriptBase::Actor_Clue_Add_To_Database(int a0, int a1, int a2, int a3, int a4, int a5) {
- // debug("STUB: Actor_Clue_Add_To_Database(%d, %3d, %3d, %d, %d, %d)", a0, a1, a2, a3, a4, a5);
- // debug("\tACTOR: %s", _vm->_actorNames->getText(a0));
- // debug("\tCLUE: %s\n", _vm->_clues->getClueText(a1));
+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);
}
-// ScriptBase::Actor_Clue_Acquire
-// ScriptBase::Actor_Clue_Lose
-// ScriptBase::Actor_Clue_Query
-// ScriptBase::Actor_Clues_Transfer_New_To_Mainframe
-// ScriptBase::Actor_Clues_Transfer_New_From_Mainframe
-// ScriptBase::Actor_Set_Invisible
-// ScriptBase::Actor_Set_Immunity_To_Obstacles
// ScriptBase::Item_Add_To_World
// ScriptBase::Item_Remove_From_World
// ScriptBase::Item_Spin_In_World
// ScriptBase::Item_Flag_As_Target
// ScriptBase::Item_Flag_As_Non_Target
// ScriptBase::Item_Pickup_Spin_Effect
-// ScriptBase::Animation_Open
-// ScriptBase::Animation_Close
-// ScriptBase::Animation_Start
-// ScriptBase::Animation_Stop
-// ScriptBase::Animation_Skip_To_Frame
-// ScriptBase::Delay
+
+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();
+ _vm->playerLosesControl();
}
void ScriptBase::Player_Gains_Control() {
- _vm->playerGainsControl();
+ _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();
}
-// ScriptBase::Player_Set_Combat_Mode
-// ScriptBase::Player_Query_Combat_Mode
-// ScriptBase::Player_Set_Combat_Mode_Access
-// ScriptBase::Player_Query_Current_Set
-// ScriptBase::Player_Query_Current_Scene
-// ScriptBase::Player_Query_Agenda
-// ScriptBase::Player_Set_Agenda
-// ScriptBase::Query_Difficulty_Level
+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);
@@ -202,8 +559,14 @@ bool ScriptBase::Game_Flag_Query(int flag) {
return _vm->_gameFlags->query(flag);
}
-// ScriptBase::Set_Enter
-// ScriptBase::Chapter_Enter
+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;
@@ -303,19 +666,29 @@ void ScriptBase::Setup_Scene_Information(float actorX, float actorY, float actor
// ScriptBase::Dialogue_Menu_Query_Input
// ScriptBase::Dialogue_Menu_Query_List_Size
-void ScriptBase::Scene_Exit_Add_2D_Exit(int a, int b, int c, int d, int e, int f) {
- debug("Scene_Exit_Add_2D_Exit(%d, %d, %d, %d, %d, %d)", a, b, c, d, e, f);
+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);
}
-// ScriptBase::Scene_Exit_Remove
-// ScriptBase::Scene_Exits_Disable
-// ScriptBase::Scene_Exits_Enable
+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 a, int b, int c, int d, int e) {
- debug("Scene_2D_Region_Add(%d, %d, %d, %d, %d)", a, b, c, d, e);
+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);
}
-// ScriptBase::Scene_2D_Region_Remove
// ScriptBase::World_Waypoint_Set
// ScriptBase::World_Waypoint_Reset
// ScriptBase::World_Waypoint_Query_X
@@ -355,35 +728,114 @@ void ScriptBase::Set_Score(int a0, int a1) {
debug("STUB: Set_Score(%d, %d)", a0, a1);
}
-// ScriptBase::Give_McCoy_Ammo
+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);
+}
-void ScriptBase::Assign_Player_Gun_Hit_Sounds(int a0, int a1, int a2, int a3) {
- debug("STUB: Assign_Player_Gun_Hit_Sounds(%d, %d, %d, %d)", a0, a1, a2, a3);
+bool ScriptBase::Query_System_Currently_Loading_Game() {
+ return _vm->_gameIsLoading;
}
-void ScriptBase::Assign_Player_Gun_Miss_Sounds(int a0, int a1, int a2, int a3) {
- debug("STUB: Assign_Player_Gun_Miss_Sounds(%d, %d, %d, %d)", a0, a1, a2, a3);
+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->set_at_xyz(actorPosition, actor->getFacing(), true, 0, true);
+ _vm->_sceneObjects->setRetired(actorId, true);
+}
+
+void ScriptBase::Clickable_Object(char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsClickable(objectId, true, !_vm->_sceneIsLoading);
+}
+
+void ScriptBase::Unclickable_Object(char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsClickable(objectId, false, !_vm->_sceneIsLoading);
+}
+
+void ScriptBase::Obstacle_Object(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(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(char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsCombatTarget(objectId, true, !_vm->_sceneIsLoading);
+}
+
+void ScriptBase::Un_Combat_Target_Object(char *objectName) {
+ int objectId = _vm->_scene->findObject(objectName);
+ if (objectId == -1)
+ return;
+ _vm->_scene->objectSetIsCombatTarget(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(char* fogName, float r, float g, float b) {
+ _vm->_scene->_set->_effects->setFogColor(fogName, r, g, b);
+}
+
+void ScriptBase::Set_Fog_Density(char* fogName, float density) {
+ _vm->_scene->_set->_effects->setFogDensity(fogName, density);
}
-// ScriptBase::Disable_Shadows
-// ScriptBase::Query_System_Currently_Loading_Game
-// ScriptBase::Actor_Retired_Here
-// ScriptBase::Clickable_Object
-// ScriptBase::Unclickable_Object
-// ScriptBase::Obstacle_Object
-// ScriptBase::Unobstacle_Object
-// ScriptBase::Obstacle_Flag_All_Objects
-// ScriptBase::Combat_Target_Object
-// ScriptBase::Un_Combat_Target_Object
-// ScriptBase::Set_Fade_Color
-// ScriptBase::Set_Fade_Density
-// ScriptBase::Set_Fog_Color
-// ScriptBase::Set_Fog_Density
// ScriptBase::ADQ_Flush
// ScriptBase::ADQ_Add
// ScriptBase::ADQ_Add_Pause
-// ScriptBase::Game_Over
-// ScriptBase::Autosave_Game
+
+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);
diff --git a/engines/bladerunner/script/script.h b/engines/bladerunner/script/script.h
index e399a64f29..97db6eb425 100644
--- a/engines/bladerunner/script/script.h
+++ b/engines/bladerunner/script/script.h
@@ -41,66 +41,66 @@ public:
{}
protected:
- // Preload
- // Actor_Put_In_Set
- // Actor_Set_At_XYZ
- // Actor_Set_At_Waypoint
- // Region_Check
+ void Preload(int animationId);
+ void Actor_Put_In_Set(int actorId, int setId);
+ void Actor_Set_At_XYZ(int actorId, float x, float y, float z, int angle);
+ void Actor_Set_At_Waypoint(int actorId, int waypointId, int angle);
+ bool Region_Check(int left, int top, int right, int down);
// Object_Query_Click
// Object_Do_Ground_Click
- // Object_Mark_For_Hot_Mouse
- // Actor_Face_Actor
- // Actor_Face_Object
- // Actor_Face_Item
- // Actor_Face_Waypoint
- // Actor_Face_XYZ
- // Actor_Face_Current_Camera
- // Actor_Face_Heading
- // Actor_Query_Friendliness_To_Other
- // Actor_Modify_Friendliness_To_Other
- // Actor_Set_Friendliness_To_Other
- // Actor_Set_Honesty
- // Actor_Set_Intelligence
- // Actor_Set_Stability
- // Actor_Set_Combat_Aggressiveness
- // Actor_Query_Current_HP
- // Actor_Query_Max_HP
- // Actor_Query_Combat_Aggressiveness
- // Actor_Query_Honesty
- // Actor_Query_Intelligence
- // Actor_Query_Stability
- // Actor_Modify_Current_HP
- // Actor_Modify_Max_HP
- // Actor_Modify_Combat_Aggressiveness
- // Actor_Modify_Honesty
- // Actor_Modify_Intelligence
- // Actor_Modify_Stability
- // Actor_Set_Flag_Damage_Anim_If_Moving
- // Actor_Query_Flag_Damage_Anim_If_Moving
- // Actor_Combat_AI_Hit_Attempt
- // Non_Player_Actor_Combat_Mode_On
- // Non_Player_Actor_Combat_Mode_Off
- // Actor_Set_Health
- // Actor_Set_Targetable
- // Actor_Says
- // Actor_Says_With_Pause
+ bool Object_Mark_For_Hot_Mouse(char *objectName);
+ void Actor_Face_Actor(int actorId, int otherActorId, bool animate);
+ void Actor_Face_Object(int actorId, char *objectName, bool animate);
+ void Actor_Face_Item(int actorId, int itemId, bool animate);
+ void Actor_Face_Waypoint(int actorId, int waypointId, bool animate);
+ void Actor_Face_XYZ(int actorId, float x, float y, float z, bool animate);
+ void Actor_Face_Current_Camera(int actorId, bool animate);
+ void Actor_Face_Heading(int actorId, int heading);
+ int Actor_Query_Friendliness_To_Other(int actorId, int otherActorId);
+ void Actor_Modify_Friendliness_To_Other(int actorId, int otherActorId, signed int change);
+ void Actor_Set_Friendliness_To_Other(int actorId, int otherActorId, int friendliness);
+ void Actor_Set_Honesty(int actorId, int honesty);
+ void Actor_Set_Intelligence(int actorId, int intelligence);
+ void Actor_Set_Stability(int actorId, int stability);
+ void Actor_Set_Combat_Aggressiveness(int actorId, int combatAggressiveness);
+ int Actor_Query_Current_HP(int actorId);
+ int Actor_Query_Max_HP(int actorId);
+ int Actor_Query_Combat_Aggressiveness(int actorId);
+ int Actor_Query_Honesty(int actorId);
+ int Actor_Query_Intelligence(int actorId);
+ int Actor_Query_Stability(int actorId);
+ void Actor_Modify_Current_HP(int actorId, signed int change);
+ void Actor_Modify_Max_HP(int actorId, signed int change);
+ void Actor_Modify_Combat_Aggressiveness(int actorId, signed int change);
+ void Actor_Modify_Honesty(int actorId, signed int change);
+ void Actor_Modify_Intelligence(int actorId, signed int change);
+ void Actor_Modify_Stability(int actorId, signed int change);
+ void Actor_Set_Flag_Damage_Anim_If_Moving(int actorId, bool value);
+ bool Actor_Query_Flag_Damage_Anim_If_Moving(int actorId);
+ void Actor_Combat_AI_Hit_Attempt(int actorId);
+ void 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);
+ void Non_Player_Actor_Combat_Mode_Off(int actorId);
+ void Actor_Set_Health(int actor, int hp, int maxHp);
+ void Actor_Set_Targetable(int actor, bool targetable);
+ void Actor_Says(int actorId, int sentenceId, int animationMode);
+ void Actor_Says_With_Pause(int actorId, int sentenceId, float pause, int animationMode);
void Actor_Voice_Over(int sentenceId, int actorId);
- // Actor_Start_Speech_Sample
- // Actor_Start_Voice_Over_Sample
- // Actor_Query_Which_Set_In
- // Actor_Query_Is_In_Current_Set
- // Actor_Query_In_Set
- // Actor_Query_Inch_Distance_From_Actor
- // Actor_Query_Inch_Distance_From_Waypoint
- // Actor_Query_In_Between_Two_Actors
- // Actor_Set_Goal_Number
- // Actor_Query_Goal_Number
- // Actor_Query_XYZ
- // Actor_Query_Facing_1024
- // Actor_Set_Frame_Rate_FPS
- // Slice_Animation_Query_Number_Of_Frames
- // Actor_Change_Animation_Mode
- // Actor_Query_Animation_Mode
+ void Actor_Start_Speech_Sample(int actorId, int sentenceId);
+ void Actor_Start_Voice_Over_Sample(int sentenceId);
+ int Actor_Query_Which_Set_In(int actorId);
+ bool Actor_Query_Is_In_Current_Set(int actorId);
+ bool Actor_Query_In_Set(int actorId, int setId);
+ int Actor_Query_Inch_Distance_From_Actor(int actorId, int otherActorId);
+ int Actor_Query_Inch_Distance_From_Waypoint(int actorId, int waypointId);
+ bool Actor_Query_In_Between_Two_Actors(int actorId, int otherActor1Id, int otherActor2Id);
+ void Actor_Set_Goal_Number(int actorId, int goalNumber);
+ int Actor_Query_Goal_Number(int actorId);
+ void Actor_Query_XYZ(int actorId, float *x, float *y, float *z);
+ int Actor_Query_Facing_1024(int actorId);
+ void Actor_Set_Frame_Rate_FPS(int actorId, int fps);
+ int Slice_Animation_Query_Number_Of_Frames(int animationId);
+ void Actor_Change_Animation_Mode(int actorId, int animationMode);
+ int Actor_Query_Animation_Mode(int actorId);
// Loop_Actor_Walk_To_Actor
// Loop_Actor_Walk_To_Item
// Loop_Actor_Walk_To_Scene_Object
@@ -111,41 +111,41 @@ protected:
// Actor_Force_Stop_Walking
// Loop_Actor_Travel_Stairs
// Loop_Actor_Travel_Ladder
- void Actor_Clue_Add_To_Database(int a0, int a1, int a2, int a3, int a4, int a5);
- // Actor_Clue_Acquire
- // Actor_Clue_Lose
- // Actor_Clue_Query
- // Actor_Clues_Transfer_New_To_Mainframe
- // Actor_Clues_Transfer_New_From_Mainframe
- // Actor_Set_Invisible
- // Actor_Set_Immunity_To_Obstacles
+ void Actor_Clue_Add_To_Database(int actorId, int clueId, int unknown, bool clueAcquired, bool unknownFlag, int fromActorId);
+ void Actor_Clue_Acquire(int actorId, int clueId, byte unknownFlag, int fromActorId);
+ void Actor_Clue_Lose(int actorId, int clueId);
+ bool Actor_Clue_Query(int actorId, int clueId);
+ void Actor_Clues_Transfer_New_To_Mainframe(int actorId);
+ void Actor_Clues_Transfer_New_From_Mainframe(int actorId);
+ void Actor_Set_Invisible(int actorId, bool isInvisible);
+ void Actor_Set_Immunity_To_Obstacles(int actorId, bool isImmune);
// Item_Add_To_World
// Item_Remove_From_World
// Item_Spin_In_World
// Item_Flag_As_Target
// Item_Flag_As_Non_Target
// Item_Pickup_Spin_Effect
- // Animation_Open
- // Animation_Close
- // Animation_Start
- // Animation_Stop
- // Animation_Skip_To_Frame
- // Delay
+ int Animation_Open();
+ int Animation_Close();
+ int Animation_Start();
+ int Animation_Stop();
+ int Animation_Skip_To_Frame();
+ void Delay(int miliseconds);
void Player_Loses_Control();
void Player_Gains_Control();
- // Player_Set_Combat_Mode
- // Player_Query_Combat_Mode
- // Player_Set_Combat_Mode_Access
- // Player_Query_Current_Set
- // Player_Query_Current_Scene
- // Player_Query_Agenda
- // Player_Set_Agenda
- // Query_Difficulty_Level
+ void Player_Set_Combat_Mode(bool activate);
+ bool Player_Query_Combat_Mode();
+ void Player_Set_Combat_Mode_Access(bool enable);
+ int Player_Query_Current_Set();
+ int Player_Query_Current_Scene();
+ int Player_Query_Agenda();
+ void Player_Set_Agenda(int agenda);
+ int Query_Difficulty_Level();
void Game_Flag_Set(int flag);
void Game_Flag_Reset(int flag);
bool Game_Flag_Query(int flag);
- // Set_Enter
- // Chapter_Enter
+ void Set_Enter(int setId, int sceneId);
+ void Chapter_Enter(int chapter, int setId, int sceneId);
int Global_Variable_Set(int, int);
int Global_Variable_Reset(int);
int Global_Variable_Query(int);
@@ -194,12 +194,12 @@ protected:
// Dialogue_Menu_Remove_From_List
// Dialogue_Menu_Query_Input
// Dialogue_Menu_Query_List_Size
- void Scene_Exit_Add_2D_Exit(int, int, int, int, int, int);
- // Scene_Exit_Remove
- // Scene_Exits_Disable
- // Scene_Exits_Enable
- void Scene_2D_Region_Add(int, int, int, int, int);
- // Scene_2D_Region_Remove
+ void Scene_Exit_Add_2D_Exit(int index, int left, int top, int right, int down, int type);
+ void Scene_Exit_Remove(int index);
+ void Scene_Exits_Disable();
+ void Scene_Exits_Enable();
+ void Scene_2D_Region_Add(int index, int left, int top, int right, int down);
+ void Scene_2D_Region_Remove(int index);
// World_Waypoint_Set
// World_Waypoint_Reset
// World_Waypoint_Query_X
@@ -235,28 +235,28 @@ protected:
// View_Score_Board
// Query_Score
void Set_Score(int a0, int a1);
- // Give_McCoy_Ammo
- void Assign_Player_Gun_Hit_Sounds(int a0, int a1, int a2, int a3);
- void Assign_Player_Gun_Miss_Sounds(int a0, int a1, int a2, int a3);
- // Disable_Shadows
- // Query_System_Currently_Loading_Game
- // Actor_Retired_Here
- // Clickable_Object
- // Unclickable_Object
- // Obstacle_Object
- // Unobstacle_Object
- // Obstacle_Flag_All_Objects
- // Combat_Target_Object
- // Un_Combat_Target_Object
- // Set_Fade_Color
- // Set_Fade_Density
- // Set_Fog_Color
- // Set_Fog_Density
+ void Give_McCoy_Ammo(int ammoType, int ammo);
+ void Assign_Player_Gun_Hit_Sounds(int row, int soundId1, int soundId2, int soundId3);
+ void Assign_Player_Gun_Miss_Sounds(int row, int soundId1, int soundId2, int soundId3);
+ void Disable_Shadows(int *animationsIdsList, int listSize);
+ bool Query_System_Currently_Loading_Game();
+ void Actor_Retired_Here(int actorId, int width, int height, int retired, int retiredByActorId);
+ void Clickable_Object(char *objectName);
+ void Unclickable_Object(char *objectName);
+ void Obstacle_Object(char *objectName, bool updateWalkpath);
+ void Unobstacle_Object(char *objectName, bool updateWalkpath);
+ void Obstacle_Flag_All_Objects(bool isObstacle);
+ void Combat_Target_Object(char *objectName);
+ void Un_Combat_Target_Object(char *objectName);
+ void Set_Fade_Color(float r, float g, float b);
+ void Set_Fade_Density(float density);
+ void Set_Fog_Color(char* fogName, float r, float g, float b);
+ void Set_Fog_Density(char* fogName, float density);
// ADQ_Flush
// ADQ_Add
// ADQ_Add_Pause
- // Game_Over
- // Autosave_Game
+ bool Game_Over();
+ void Autosave_Game(int textId);
void I_Sez(const char *str);
};
@@ -269,6 +269,7 @@ public:
virtual void InitializeScene() = 0;
virtual void SceneLoaded() = 0;
virtual void SceneFrameAdvanced(int frame) = 0;
+ virtual void SceneActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet) = 0;
};
class Script {
@@ -289,6 +290,7 @@ public:
void InitializeScene();
void SceneLoaded();
void SceneFrameAdvanced(int frame);
+ void SceneActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet);
};
#define DECLARE_SCRIPT(name) \
@@ -300,6 +302,7 @@ public: \
void InitializeScene(); \
void SceneLoaded(); \
void SceneFrameAdvanced(int frame); \
+ void SceneActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet); \
};
DECLARE_SCRIPT(RC01)