diff options
Diffstat (limited to 'engines/bladerunner/script')
-rw-r--r-- | engines/bladerunner/script/ai_script.cpp | 7 | ||||
-rw-r--r-- | engines/bladerunner/script/ai_script.h | 4 | ||||
-rw-r--r-- | engines/bladerunner/script/police_maze.cpp | 68 | ||||
-rw-r--r-- | engines/bladerunner/script/police_maze.h | 40 | ||||
-rw-r--r-- | engines/bladerunner/script/script.cpp | 6 | ||||
-rw-r--r-- | engines/bladerunner/script/script.h | 4 |
6 files changed, 98 insertions, 31 deletions
diff --git a/engines/bladerunner/script/ai_script.cpp b/engines/bladerunner/script/ai_script.cpp index 257e323c5b..b328824de1 100644 --- a/engines/bladerunner/script/ai_script.cpp +++ b/engines/bladerunner/script/ai_script.cpp @@ -22,9 +22,8 @@ #include "bladerunner/script/ai_script.h" -#include "bladerunner/bladerunner.h" - #include "bladerunner/actor.h" +#include "bladerunner/bladerunner.h" namespace BladeRunner { @@ -358,7 +357,7 @@ void AIScripts::setAnimationState(int actor, int animationState, int animationFr } -void AIScripts::queryAnimationState(int actor, int *animationState, int *animationFrame, int *animationStateNext, int *nextAnimation) { +void AIScripts::queryAnimationState(int actor, int *animationState, int *animationFrame, int *animationStateNext, int *animationNext) { if (actor >= _actorCount) { return; } @@ -366,7 +365,7 @@ void AIScripts::queryAnimationState(int actor, int *animationState, int *animati _inScriptCounter++; if (_AIScripts[actor]) { _AIScripts[actor]->FledCombat(); - _AIScripts[actor]->QueryAnimationState(animationState, animationFrame, animationStateNext, nextAnimation); + _AIScripts[actor]->QueryAnimationState(animationState, animationFrame, animationStateNext, animationNext); } _inScriptCounter--; } diff --git a/engines/bladerunner/script/ai_script.h b/engines/bladerunner/script/ai_script.h index 5e782d0820..03789ae542 100644 --- a/engines/bladerunner/script/ai_script.h +++ b/engines/bladerunner/script/ai_script.h @@ -61,7 +61,7 @@ public: virtual bool GoalChanged(int currentGoalNumber, int newGoalNumber) = 0; virtual bool UpdateAnimation(int *animation, int *frame) = 0; virtual bool ChangeAnimationMode(int mode) = 0; - virtual void QueryAnimationState(int *animationState, int *animationFrame, int *animationStateNext, int *nextAnimation) = 0; + virtual void QueryAnimationState(int *animationState, int *animationFrame, int *animationStateNext, int *animationNext) = 0; virtual void SetAnimationState(int animationState, int animationFrame, int animationStateNext, int animationNext) = 0; virtual bool ReachedMovementTrackWaypoint(int waypointId) = 0; virtual void FledCombat() = 0; @@ -566,7 +566,7 @@ public: bool reachedMovementTrackWaypoint(int actor, int waypointId); void updateAnimation(int actor, int *animation, int *frame); void changeAnimationMode(int actor, int mode); - void queryAnimationState(int actor, int *animationState, int *animationFrame, int *animationStateNext, int *nextAnimation); + void queryAnimationState(int actor, int *animationState, int *animationFrame, int *animationStateNext, int *animationNext); void setAnimationState(int actor, int animationState, int animationFrame, int animationStateNext, int animationNext); void fledCombat(int actor); diff --git a/engines/bladerunner/script/police_maze.cpp b/engines/bladerunner/script/police_maze.cpp index 3aa3ebbfc8..68bb84a762 100644 --- a/engines/bladerunner/script/police_maze.cpp +++ b/engines/bladerunner/script/police_maze.cpp @@ -24,6 +24,7 @@ #include "bladerunner/game_constants.h" #include "bladerunner/items.h" #include "bladerunner/mouse.h" +#include "bladerunner/savefile.h" #include "bladerunner/scene.h" #include "bladerunner/scene_objects.h" #include "bladerunner/script/police_maze.h" @@ -122,6 +123,24 @@ void PoliceMaze::tick() { } } +void PoliceMaze::save(SaveFileWriteStream &f) { + f.writeBool(_isPaused); + f.writeBool(_isActive); + f.writeBool(_isEnding); + for (int i = 0; i < kNumMazeTracks; ++i) { + _tracks[i]->save(f); + } +} + +void PoliceMaze::load(SaveFileReadStream &f) { + _isPaused = f.readBool(); + _isActive = f.readBool(); + _isEnding = f.readBool(); + for (int i = 0; i < kNumMazeTracks; ++i) { + _tracks[i]->load(f); + } +} + PoliceMazeTargetTrack::PoliceMazeTargetTrack(BladeRunnerEngine *vm) : ScriptBase(vm) { reset(); } @@ -139,7 +158,7 @@ void PoliceMazeTargetTrack::reset() { _timeLeftUpdate = 0; _timeLeftWait = 0; _time = 0; - _isWaiting = false; + _isWaiting = false; _isMoving = false; _pointIndex = 0; _pointTarget = 0; @@ -528,8 +547,8 @@ bool PoliceMazeTargetTrack::tick() { void PoliceMazeTargetTrack::readdObject(int itemId) { if (_vm->_sceneObjects->remove(itemId + kSceneObjectOffsetItems)) { - BoundingBox *boundingBox = _vm->_items->getBoundingBox(itemId); - Common::Rect *screenRect = _vm->_items->getScreenRectangle(itemId); + const BoundingBox &boundingBox = _vm->_items->getBoundingBox(itemId); + const Common::Rect &screenRect = _vm->_items->getScreenRectangle(itemId); bool targetable = _vm->_items->isTarget(itemId); bool obstacle = _vm->_items->isVisible(itemId); @@ -537,5 +556,48 @@ void PoliceMazeTargetTrack::readdObject(int itemId) { } } +void PoliceMazeTargetTrack::save(SaveFileWriteStream &f) { + f.writeBool(_isPresent); + f.writeInt(_itemId); + f.writeInt(_pointCount); + f.writeInt(_dataIndex); + f.writeBool(_isWaiting); + f.writeBool(_isMoving); + f.writeInt(_pointIndex); + f.writeInt(_pointTarget); + f.writeBool(_isRotating); + f.writeInt(_angleTarget); + f.writeInt(_angleDelta); + f.writeBool(_isPaused); + + for (int i = 0; i < kNumTrackPoints; ++i) { + f.writeVector3(_points[i]); + } + + f.writeInt(_timeLeftUpdate); + f.writeInt(_timeLeftWait); +} + +void PoliceMazeTargetTrack::load(SaveFileReadStream &f) { + _isPresent = f.readBool(); + _itemId = f.readInt(); + _pointCount = f.readInt(); + _dataIndex = f.readInt(); + _isWaiting = f.readBool(); + _isMoving = f.readBool(); + _pointIndex = f.readInt(); + _pointTarget = f.readInt(); + _isRotating = f.readBool(); + _angleTarget = f.readInt(); + _angleDelta = f.readInt(); + _isPaused = f.readBool(); + + for (int i = 0; i < kNumTrackPoints; ++i) { + _points[i] = f.readVector3(); + } + + _timeLeftUpdate = f.readInt(); + _timeLeftWait = f.readInt(); +} } // End of namespace BladeRunner diff --git a/engines/bladerunner/script/police_maze.h b/engines/bladerunner/script/police_maze.h index e53d68e373..725fbd4319 100644 --- a/engines/bladerunner/script/police_maze.h +++ b/engines/bladerunner/script/police_maze.h @@ -34,25 +34,27 @@ enum { }; class BladeRunnerEngine; +class SaveFileReadStream; +class SaveFileWriteStream; class PoliceMazeTargetTrack : ScriptBase { - uint32 _time; - bool _isPresent; - int _itemId; - int _pointCount; - Vector3 _points[kNumTrackPoints]; + uint32 _time; + bool _isPresent; + int _itemId; + int _pointCount; + Vector3 _points[kNumTrackPoints]; const int *_data; - int _dataIndex; - int32 _timeLeftUpdate; - int32 _timeLeftWait; - bool _isWaiting; - int _isMoving; - int _pointIndex; - int _pointTarget; - bool _isRotating; - int _angleTarget; - int _angleDelta; - bool _isPaused; + int _dataIndex; + int32 _timeLeftUpdate; + int32 _timeLeftWait; + bool _isWaiting; + int _isMoving; + int _pointIndex; + int _pointTarget; + bool _isRotating; + int _angleTarget; + int _angleDelta; + bool _isPaused; public: PoliceMazeTargetTrack(BladeRunnerEngine *vm); @@ -70,6 +72,9 @@ public: void setTime(uint32 t) { _time = t; } void readdObject(int itemId); + + void save(SaveFileWriteStream &f); + void load(SaveFileReadStream &f); }; class PoliceMaze : ScriptBase { @@ -91,6 +96,9 @@ public: void clear(bool isLoadingGame); void setPauseState(bool state); void activate(); + + void save(SaveFileWriteStream &f); + void load(SaveFileReadStream &f); }; } // End of namespace BladeRunner diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp index 6c7d8f5bd9..6d981fe3e3 100644 --- a/engines/bladerunner/script/script.cpp +++ b/engines/bladerunner/script/script.cpp @@ -832,8 +832,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) { @@ -899,8 +898,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) { diff --git a/engines/bladerunner/script/script.h b/engines/bladerunner/script/script.h index 5e1e160498..09c372d009 100644 --- a/engines/bladerunner/script/script.h +++ b/engines/bladerunner/script/script.h @@ -23,11 +23,11 @@ #ifndef BLADERUNNER_SCRIPT_H #define BLADERUNNER_SCRIPT_H -#include "common/str.h" - #include "bladerunner/bladerunner.h" #include "bladerunner/game_constants.h" +#include "common/str.h" + namespace BladeRunner { class BladeRunnerEngine; |