From d1b6bbabfd72f2dc86c6acdf3e9dc75817e909af Mon Sep 17 00:00:00 2001 From: Littleboy Date: Thu, 4 Aug 2011 21:54:31 -0400 Subject: [PATCH] ASYLUM: Move skipScriptProcessing and isEncounterRunning flags to SharedData --- engines/asylum/asylum.cpp | 4 +++ engines/asylum/resources/actor.cpp | 8 +++--- engines/asylum/resources/data.cpp | 34 +++++++++++-------------- engines/asylum/resources/data.h | 10 ++++---- engines/asylum/resources/encounters.cpp | 11 ++++---- engines/asylum/resources/encounters.h | 2 -- engines/asylum/resources/script.cpp | 9 +++---- engines/asylum/resources/script.h | 3 --- engines/asylum/resources/special.cpp | 2 +- engines/asylum/views/scene.cpp | 2 +- 10 files changed, 39 insertions(+), 46 deletions(-) diff --git a/engines/asylum/asylum.cpp b/engines/asylum/asylum.cpp index 5dd966c21d7..3d8cc685435 100644 --- a/engines/asylum/asylum.cpp +++ b/engines/asylum/asylum.cpp @@ -576,6 +576,10 @@ void AsylumEngine::saveLoadWithSerializer(Common::Serializer &s) { // the proper order _data.saveLoadAmbientSoundData(s); + // Original skips two elements + // (original has one unused, one used for debugging screen update counts) + s.skip(8); + // Script queue _script->saveLoadWithSerializer(s); diff --git a/engines/asylum/resources/actor.cpp b/engines/asylum/resources/actor.cpp index 0a5114a73c3..8843ab351d6 100644 --- a/engines/asylum/resources/actor.cpp +++ b/engines/asylum/resources/actor.cpp @@ -596,7 +596,7 @@ void Actor::update() { break; case kActorStatus8: - if (_vm->encounter()->isRunning() + if (getSharedData()->getFlag(kFlagIsEncounterRunning) || !_soundResourceId || getSound()->isPlaying(_soundResourceId)) { _frameIndex = (_frameIndex + 1) % _frameCount; @@ -691,7 +691,7 @@ void Actor::updateStatus(ActorStatus actorStatus) { break; case kActorStatus9: - if (_vm->encounter()->isRunning()) + if (getSharedData()->getFlag(kFlagIsEncounterRunning)) return; if (_vm->getRandomBit() == 1 && isDefaultDirection(15)) @@ -2134,7 +2134,7 @@ void Actor::updateStatusEnabled() { if (_vm->isGameFlagNotSet(kGameFlagScriptProcessing) && isVisible() - && !_vm->encounter()->isRunning() + && !getSharedData()->getFlag(kFlagIsEncounterRunning) && !getSpeech()->getSoundResourceId()) { if (_vm->getRandom(100) < 50) { if (getWorld()->chapter == kChapter13) @@ -3210,7 +3210,7 @@ void Actor::updateFinish() { ActionArea *area = getWorld()->actions[areaIndex]; ActionArea *actorArea = getWorld()->actions[_actionIdx3]; - if ((area->flags & 1) && !getScript()->isProcessingSkipped()) { + if ((area->flags & 1) && !getSharedData()->getFlag(kFlagSkipScriptProcessing)) { getScript()->queueScript(actorArea->scriptIndex2, _index); getScript()->queueScript(area->scriptIndex, _index); } diff --git a/engines/asylum/resources/data.cpp b/engines/asylum/resources/data.cpp index 91d08756d58..e8fa8f6804f 100644 --- a/engines/asylum/resources/data.cpp +++ b/engines/asylum/resources/data.cpp @@ -39,8 +39,8 @@ SharedData::SharedData() { memset(&_ambientTicks, 0, sizeof(_ambientTicks)); _globalPoint.x = -1; _globalPoint.y = -1; - // _flagSkipScriptProcessing - // _flagEncounterRunning + _flagSkipScriptProcessing = false; + _flagIsEncounterRunning = false; // player ActorIndex _sceneOffset = 0; _sceneOffsetAdd = 0; @@ -221,11 +221,11 @@ bool SharedData::getFlag(GlobalFlag flag) const { case kFlagScene1: return _flagScene1; - //case kFlagSkipScriptProcessing: - // return _flagSkipScriptProcessing; + case kFlagSkipScriptProcessing: + return _flagSkipScriptProcessing; - //case kFlagEncounterRunning: - // return _flagEncounterRunning; + case kFlagIsEncounterRunning: + return _flagIsEncounterRunning; case kFlagActorUpdateEnabledCheck: return _flagActorUpdateEnabledCheck; @@ -268,13 +268,13 @@ void SharedData::setFlag(GlobalFlag flag, bool state) { _flagScene1 = state; break; - //case kFlagSkipScriptProcessing: - // _flagSkipScriptProcessing = state; - // break; + case kFlagSkipScriptProcessing: + _flagSkipScriptProcessing = state; + break; - //case kFlagEncounterRunning: - // _flagEncounterRunning = state; - // break; + case kFlagIsEncounterRunning: + _flagIsEncounterRunning = state; + break; case kFlagActorUpdateEnabledCheck: _flagActorUpdateEnabledCheck = state; @@ -299,17 +299,13 @@ void SharedData::saveLoadAmbientSoundData(Common::Serializer &s) { } void SharedData::saveLoadWithSerializer(Common::Serializer &s) { - // Original skips two elements (original has one unused, one used for debugging screen update counts) - s.skip(8); - - // Script queue (part of ScriptManager) - // Global coordinates (original uses int32 for coordinates) s.syncAsSint32LE(_globalPoint.x); s.syncAsSint32LE(_globalPoint.y); - // Processing skipped (part of ScriptManager) - // Encounter running (part of Encounter) + // Processing of scripts/encounter + s.syncAsUint32LE(_flagSkipScriptProcessing); + s.syncAsUint32LE(_flagIsEncounterRunning); // Player index //s.syncAsUint32LE(playerIndex); diff --git a/engines/asylum/resources/data.h b/engines/asylum/resources/data.h index 4e1ee3e1700..57f7305ecae 100644 --- a/engines/asylum/resources/data.h +++ b/engines/asylum/resources/data.h @@ -41,9 +41,9 @@ enum GlobalFlag { kFlagSceneRectChanged, kFlagScene1, kFlagSkipScriptProcessing, - kFlagEncounterRunning, + kFlagIsEncounterRunning, kFlagActorUpdateEnabledCheck, - kFlagActorUpdateStatus15Check + kFlagActorUpdateStatus15Check, }; /** @@ -65,7 +65,7 @@ enum GlobalFlag { * uint32 {15} - ambient ticks * uint32 {1} - UNUSED * uint32 {1} - UNUSED (scene updateScreen calls count) - * -- Script queue (stored in ScriptManager - reset on scene change) + * uint32 {1} - Skip script processing * uint32 {1} - global Object X * uint32 {1} - global Object Y * -- Skip processing flag (stored in ScriptManager) @@ -208,8 +208,8 @@ private: uint32 _ambientFlags[15]; uint32 _ambientTicks[15]; Common::Point _globalPoint; // global point - // _flagSkipScriptProcessing - // _flagEncounterRunning + bool _flagSkipScriptProcessing; + bool _flagIsEncounterRunning; // player ActorIndex Common::Point _sceneCoords; int16 _sceneOffset; diff --git a/engines/asylum/resources/encounters.cpp b/engines/asylum/resources/encounters.cpp index d4f0e59c435..51b2666b4ce 100644 --- a/engines/asylum/resources/encounters.cpp +++ b/engines/asylum/resources/encounters.cpp @@ -46,8 +46,7 @@ namespace Asylum { Encounter::Encounter(AsylumEngine *engine) : _vm(engine), _index(0), _keywordIndex(0), _item(NULL), _objectId1(kObjectNone), _objectId2(kObjectNone), _objectId3(kObjectNone), - _actorIndex(kActorInvalid), _flag1(false), _flag2(false), _flag3(false), _flag4(false), _disablePlayerOnExit(false), - _isRunning(false) { + _actorIndex(kActorInvalid), _flag1(false), _flag2(false), _flag3(false), _flag4(false), _disablePlayerOnExit(false) { memset(&_keywordIndexes, 0, sizeof(_keywordIndexes)); _rectIndex = -1; @@ -262,7 +261,7 @@ void Encounter::exitEncounter() { // Original saves the item back here // Update flags - _isRunning = false; + getSharedData()->setFlag(kFlagIsEncounterRunning, false); getSharedData()->setFlag(kFlag3, true); if (_flag2) @@ -313,7 +312,7 @@ bool Encounter::init() { getSound()->setMusicVolume(Config.musicVolume - 500); if (!getSharedData()->getMatteBarHeight()) { - _isRunning = true; + getSharedData()->setFlag(kFlagIsEncounterRunning, true); _data_455BD4 = false; _data_455BD8 = false; _data_455BDC = false; @@ -1143,7 +1142,7 @@ void Encounter::drawScreen() { // Play movie getScreen()->clear(); - getVideo()->play(getSharedData()->movieIndex, _isRunning ? (EventHandler*)this : getScene()); + getVideo()->play(getSharedData()->movieIndex, getSharedData()->getFlag(kFlagIsEncounterRunning) ? (EventHandler*)this : getScene()); getScreen()->clearGraphicsInQueue(); getScreen()->clear(); getCursor()->hide(); @@ -1167,7 +1166,7 @@ void Encounter::drawScreen() { getSharedData()->setMatteBarHeight(170); } } else if (getSharedData()->getMatteBarHeight() >= 170) { - if (_isRunning) { + if (getSharedData()->getFlag(kFlagIsEncounterRunning)) { getSharedData()->setMatteBarHeight(0); getCursor()->show(); } diff --git a/engines/asylum/resources/encounters.h b/engines/asylum/resources/encounters.h index 95d1bfa9da8..df09670900f 100644 --- a/engines/asylum/resources/encounters.h +++ b/engines/asylum/resources/encounters.h @@ -81,7 +81,6 @@ public: void setFlag3(bool state) { _flag3 = state; } bool getFlag3() { return _flag3; } void disablePlayerOnExit(bool state) { _disablePlayerOnExit = state; } - bool isRunning() { return _isRunning; } // Accessors (for saving game) EncounterItems *items() { return &_items; } @@ -186,7 +185,6 @@ private: bool _flag3; bool _flag4; bool _disablePlayerOnExit; - bool _isRunning; ////////////////////////////////////////////////////////////////////////// // Data diff --git a/engines/asylum/resources/script.cpp b/engines/asylum/resources/script.cpp index 3edc63174f1..2beae2df44c 100644 --- a/engines/asylum/resources/script.cpp +++ b/engines/asylum/resources/script.cpp @@ -235,7 +235,6 @@ void ScriptManager::reset() { // Remove all scripts _scripts.clear(); - _skipProcessing = false; _done = false; _exit = false; _processNextEntry = false; @@ -250,7 +249,7 @@ void ScriptManager::resetQueue() { void ScriptManager::queueScript(int32 scriptIndex, ActorIndex actorIndex) { // When the skipProcessing flag is set, do not queue any more scripts - if (_skipProcessing) + if (getSharedData()->getFlag(kFlagSkipScriptProcessing)) return; // Look for a empty queue slot @@ -822,7 +821,7 @@ IMPLEMENT_OPCODE(RunEncounter) encounter->disablePlayerOnExit((bool)cmd->param5); if (cmd->param6) { - if (encounter->isRunning()) + if (getSharedData()->getFlag(kFlagIsEncounterRunning)) _processNextEntry = true; else cmd->param6 = 0; @@ -1023,13 +1022,13 @@ END_OPCODE ////////////////////////////////////////////////////////////////////////// // Opcode 0x2F IMPLEMENT_OPCODE(StopProcessing) - _skipProcessing = true; + getSharedData()->setFlag(kFlagSkipScriptProcessing, true); END_OPCODE ////////////////////////////////////////////////////////////////////////// // Opcode 0x30 IMPLEMENT_OPCODE(ResumeProcessing) - _skipProcessing = false; + getSharedData()->setFlag(kFlagSkipScriptProcessing, false); END_OPCODE ////////////////////////////////////////////////////////////////////////// diff --git a/engines/asylum/resources/script.h b/engines/asylum/resources/script.h index 9f9f35727ed..30d42ff9ba2 100644 --- a/engines/asylum/resources/script.h +++ b/engines/asylum/resources/script.h @@ -158,8 +158,6 @@ public: */ void resetQueue(); - bool isProcessingSkipped() { return _skipProcessing; } - // Serializable void saveLoadWithSerializer(Common::Serializer &s); @@ -298,7 +296,6 @@ private: Common::Array _opcodes; Common::Array