ASYLUM: Move skipScriptProcessing and isEncounterRunning flags to SharedData
This commit is contained in:
parent
c935ba9eae
commit
d1b6bbabfd
10 changed files with 39 additions and 46 deletions
|
@ -576,6 +576,10 @@ void AsylumEngine::saveLoadWithSerializer(Common::Serializer &s) {
|
||||||
// the proper order
|
// the proper order
|
||||||
_data.saveLoadAmbientSoundData(s);
|
_data.saveLoadAmbientSoundData(s);
|
||||||
|
|
||||||
|
// Original skips two elements
|
||||||
|
// (original has one unused, one used for debugging screen update counts)
|
||||||
|
s.skip(8);
|
||||||
|
|
||||||
// Script queue
|
// Script queue
|
||||||
_script->saveLoadWithSerializer(s);
|
_script->saveLoadWithSerializer(s);
|
||||||
|
|
||||||
|
|
|
@ -596,7 +596,7 @@ void Actor::update() {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kActorStatus8:
|
case kActorStatus8:
|
||||||
if (_vm->encounter()->isRunning()
|
if (getSharedData()->getFlag(kFlagIsEncounterRunning)
|
||||||
|| !_soundResourceId
|
|| !_soundResourceId
|
||||||
|| getSound()->isPlaying(_soundResourceId)) {
|
|| getSound()->isPlaying(_soundResourceId)) {
|
||||||
_frameIndex = (_frameIndex + 1) % _frameCount;
|
_frameIndex = (_frameIndex + 1) % _frameCount;
|
||||||
|
@ -691,7 +691,7 @@ void Actor::updateStatus(ActorStatus actorStatus) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kActorStatus9:
|
case kActorStatus9:
|
||||||
if (_vm->encounter()->isRunning())
|
if (getSharedData()->getFlag(kFlagIsEncounterRunning))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_vm->getRandomBit() == 1 && isDefaultDirection(15))
|
if (_vm->getRandomBit() == 1 && isDefaultDirection(15))
|
||||||
|
@ -2134,7 +2134,7 @@ void Actor::updateStatusEnabled() {
|
||||||
|
|
||||||
if (_vm->isGameFlagNotSet(kGameFlagScriptProcessing)
|
if (_vm->isGameFlagNotSet(kGameFlagScriptProcessing)
|
||||||
&& isVisible()
|
&& isVisible()
|
||||||
&& !_vm->encounter()->isRunning()
|
&& !getSharedData()->getFlag(kFlagIsEncounterRunning)
|
||||||
&& !getSpeech()->getSoundResourceId()) {
|
&& !getSpeech()->getSoundResourceId()) {
|
||||||
if (_vm->getRandom(100) < 50) {
|
if (_vm->getRandom(100) < 50) {
|
||||||
if (getWorld()->chapter == kChapter13)
|
if (getWorld()->chapter == kChapter13)
|
||||||
|
@ -3210,7 +3210,7 @@ void Actor::updateFinish() {
|
||||||
|
|
||||||
ActionArea *area = getWorld()->actions[areaIndex];
|
ActionArea *area = getWorld()->actions[areaIndex];
|
||||||
ActionArea *actorArea = getWorld()->actions[_actionIdx3];
|
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(actorArea->scriptIndex2, _index);
|
||||||
getScript()->queueScript(area->scriptIndex, _index);
|
getScript()->queueScript(area->scriptIndex, _index);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,8 +39,8 @@ SharedData::SharedData() {
|
||||||
memset(&_ambientTicks, 0, sizeof(_ambientTicks));
|
memset(&_ambientTicks, 0, sizeof(_ambientTicks));
|
||||||
_globalPoint.x = -1;
|
_globalPoint.x = -1;
|
||||||
_globalPoint.y = -1;
|
_globalPoint.y = -1;
|
||||||
// _flagSkipScriptProcessing
|
_flagSkipScriptProcessing = false;
|
||||||
// _flagEncounterRunning
|
_flagIsEncounterRunning = false;
|
||||||
// player ActorIndex
|
// player ActorIndex
|
||||||
_sceneOffset = 0;
|
_sceneOffset = 0;
|
||||||
_sceneOffsetAdd = 0;
|
_sceneOffsetAdd = 0;
|
||||||
|
@ -221,11 +221,11 @@ bool SharedData::getFlag(GlobalFlag flag) const {
|
||||||
case kFlagScene1:
|
case kFlagScene1:
|
||||||
return _flagScene1;
|
return _flagScene1;
|
||||||
|
|
||||||
//case kFlagSkipScriptProcessing:
|
case kFlagSkipScriptProcessing:
|
||||||
// return _flagSkipScriptProcessing;
|
return _flagSkipScriptProcessing;
|
||||||
|
|
||||||
//case kFlagEncounterRunning:
|
case kFlagIsEncounterRunning:
|
||||||
// return _flagEncounterRunning;
|
return _flagIsEncounterRunning;
|
||||||
|
|
||||||
case kFlagActorUpdateEnabledCheck:
|
case kFlagActorUpdateEnabledCheck:
|
||||||
return _flagActorUpdateEnabledCheck;
|
return _flagActorUpdateEnabledCheck;
|
||||||
|
@ -268,13 +268,13 @@ void SharedData::setFlag(GlobalFlag flag, bool state) {
|
||||||
_flagScene1 = state;
|
_flagScene1 = state;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//case kFlagSkipScriptProcessing:
|
case kFlagSkipScriptProcessing:
|
||||||
// _flagSkipScriptProcessing = state;
|
_flagSkipScriptProcessing = state;
|
||||||
// break;
|
break;
|
||||||
|
|
||||||
//case kFlagEncounterRunning:
|
case kFlagIsEncounterRunning:
|
||||||
// _flagEncounterRunning = state;
|
_flagIsEncounterRunning = state;
|
||||||
// break;
|
break;
|
||||||
|
|
||||||
case kFlagActorUpdateEnabledCheck:
|
case kFlagActorUpdateEnabledCheck:
|
||||||
_flagActorUpdateEnabledCheck = state;
|
_flagActorUpdateEnabledCheck = state;
|
||||||
|
@ -299,17 +299,13 @@ void SharedData::saveLoadAmbientSoundData(Common::Serializer &s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SharedData::saveLoadWithSerializer(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)
|
// Global coordinates (original uses int32 for coordinates)
|
||||||
s.syncAsSint32LE(_globalPoint.x);
|
s.syncAsSint32LE(_globalPoint.x);
|
||||||
s.syncAsSint32LE(_globalPoint.y);
|
s.syncAsSint32LE(_globalPoint.y);
|
||||||
|
|
||||||
// Processing skipped (part of ScriptManager)
|
// Processing of scripts/encounter
|
||||||
// Encounter running (part of Encounter)
|
s.syncAsUint32LE(_flagSkipScriptProcessing);
|
||||||
|
s.syncAsUint32LE(_flagIsEncounterRunning);
|
||||||
|
|
||||||
// Player index
|
// Player index
|
||||||
//s.syncAsUint32LE(playerIndex);
|
//s.syncAsUint32LE(playerIndex);
|
||||||
|
|
|
@ -41,9 +41,9 @@ enum GlobalFlag {
|
||||||
kFlagSceneRectChanged,
|
kFlagSceneRectChanged,
|
||||||
kFlagScene1,
|
kFlagScene1,
|
||||||
kFlagSkipScriptProcessing,
|
kFlagSkipScriptProcessing,
|
||||||
kFlagEncounterRunning,
|
kFlagIsEncounterRunning,
|
||||||
kFlagActorUpdateEnabledCheck,
|
kFlagActorUpdateEnabledCheck,
|
||||||
kFlagActorUpdateStatus15Check
|
kFlagActorUpdateStatus15Check,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -65,7 +65,7 @@ enum GlobalFlag {
|
||||||
* uint32 {15} - ambient ticks
|
* uint32 {15} - ambient ticks
|
||||||
* uint32 {1} - UNUSED
|
* uint32 {1} - UNUSED
|
||||||
* uint32 {1} - UNUSED (scene updateScreen calls count)
|
* 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 X
|
||||||
* uint32 {1} - global Object Y
|
* uint32 {1} - global Object Y
|
||||||
* -- Skip processing flag (stored in ScriptManager)
|
* -- Skip processing flag (stored in ScriptManager)
|
||||||
|
@ -208,8 +208,8 @@ private:
|
||||||
uint32 _ambientFlags[15];
|
uint32 _ambientFlags[15];
|
||||||
uint32 _ambientTicks[15];
|
uint32 _ambientTicks[15];
|
||||||
Common::Point _globalPoint; // global point
|
Common::Point _globalPoint; // global point
|
||||||
// _flagSkipScriptProcessing
|
bool _flagSkipScriptProcessing;
|
||||||
// _flagEncounterRunning
|
bool _flagIsEncounterRunning;
|
||||||
// player ActorIndex
|
// player ActorIndex
|
||||||
Common::Point _sceneCoords;
|
Common::Point _sceneCoords;
|
||||||
int16 _sceneOffset;
|
int16 _sceneOffset;
|
||||||
|
|
|
@ -46,8 +46,7 @@ namespace Asylum {
|
||||||
|
|
||||||
Encounter::Encounter(AsylumEngine *engine) : _vm(engine),
|
Encounter::Encounter(AsylumEngine *engine) : _vm(engine),
|
||||||
_index(0), _keywordIndex(0), _item(NULL), _objectId1(kObjectNone), _objectId2(kObjectNone), _objectId3(kObjectNone),
|
_index(0), _keywordIndex(0), _item(NULL), _objectId1(kObjectNone), _objectId2(kObjectNone), _objectId3(kObjectNone),
|
||||||
_actorIndex(kActorInvalid), _flag1(false), _flag2(false), _flag3(false), _flag4(false), _disablePlayerOnExit(false),
|
_actorIndex(kActorInvalid), _flag1(false), _flag2(false), _flag3(false), _flag4(false), _disablePlayerOnExit(false) {
|
||||||
_isRunning(false) {
|
|
||||||
|
|
||||||
memset(&_keywordIndexes, 0, sizeof(_keywordIndexes));
|
memset(&_keywordIndexes, 0, sizeof(_keywordIndexes));
|
||||||
_rectIndex = -1;
|
_rectIndex = -1;
|
||||||
|
@ -262,7 +261,7 @@ void Encounter::exitEncounter() {
|
||||||
// Original saves the item back here
|
// Original saves the item back here
|
||||||
|
|
||||||
// Update flags
|
// Update flags
|
||||||
_isRunning = false;
|
getSharedData()->setFlag(kFlagIsEncounterRunning, false);
|
||||||
getSharedData()->setFlag(kFlag3, true);
|
getSharedData()->setFlag(kFlag3, true);
|
||||||
|
|
||||||
if (_flag2)
|
if (_flag2)
|
||||||
|
@ -313,7 +312,7 @@ bool Encounter::init() {
|
||||||
getSound()->setMusicVolume(Config.musicVolume - 500);
|
getSound()->setMusicVolume(Config.musicVolume - 500);
|
||||||
|
|
||||||
if (!getSharedData()->getMatteBarHeight()) {
|
if (!getSharedData()->getMatteBarHeight()) {
|
||||||
_isRunning = true;
|
getSharedData()->setFlag(kFlagIsEncounterRunning, true);
|
||||||
_data_455BD4 = false;
|
_data_455BD4 = false;
|
||||||
_data_455BD8 = false;
|
_data_455BD8 = false;
|
||||||
_data_455BDC = false;
|
_data_455BDC = false;
|
||||||
|
@ -1143,7 +1142,7 @@ void Encounter::drawScreen() {
|
||||||
|
|
||||||
// Play movie
|
// Play movie
|
||||||
getScreen()->clear();
|
getScreen()->clear();
|
||||||
getVideo()->play(getSharedData()->movieIndex, _isRunning ? (EventHandler*)this : getScene());
|
getVideo()->play(getSharedData()->movieIndex, getSharedData()->getFlag(kFlagIsEncounterRunning) ? (EventHandler*)this : getScene());
|
||||||
getScreen()->clearGraphicsInQueue();
|
getScreen()->clearGraphicsInQueue();
|
||||||
getScreen()->clear();
|
getScreen()->clear();
|
||||||
getCursor()->hide();
|
getCursor()->hide();
|
||||||
|
@ -1167,7 +1166,7 @@ void Encounter::drawScreen() {
|
||||||
getSharedData()->setMatteBarHeight(170);
|
getSharedData()->setMatteBarHeight(170);
|
||||||
}
|
}
|
||||||
} else if (getSharedData()->getMatteBarHeight() >= 170) {
|
} else if (getSharedData()->getMatteBarHeight() >= 170) {
|
||||||
if (_isRunning) {
|
if (getSharedData()->getFlag(kFlagIsEncounterRunning)) {
|
||||||
getSharedData()->setMatteBarHeight(0);
|
getSharedData()->setMatteBarHeight(0);
|
||||||
getCursor()->show();
|
getCursor()->show();
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,6 @@ public:
|
||||||
void setFlag3(bool state) { _flag3 = state; }
|
void setFlag3(bool state) { _flag3 = state; }
|
||||||
bool getFlag3() { return _flag3; }
|
bool getFlag3() { return _flag3; }
|
||||||
void disablePlayerOnExit(bool state) { _disablePlayerOnExit = state; }
|
void disablePlayerOnExit(bool state) { _disablePlayerOnExit = state; }
|
||||||
bool isRunning() { return _isRunning; }
|
|
||||||
|
|
||||||
// Accessors (for saving game)
|
// Accessors (for saving game)
|
||||||
EncounterItems *items() { return &_items; }
|
EncounterItems *items() { return &_items; }
|
||||||
|
@ -186,7 +185,6 @@ private:
|
||||||
bool _flag3;
|
bool _flag3;
|
||||||
bool _flag4;
|
bool _flag4;
|
||||||
bool _disablePlayerOnExit;
|
bool _disablePlayerOnExit;
|
||||||
bool _isRunning;
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// Data
|
// Data
|
||||||
|
|
|
@ -235,7 +235,6 @@ void ScriptManager::reset() {
|
||||||
// Remove all scripts
|
// Remove all scripts
|
||||||
_scripts.clear();
|
_scripts.clear();
|
||||||
|
|
||||||
_skipProcessing = false;
|
|
||||||
_done = false;
|
_done = false;
|
||||||
_exit = false;
|
_exit = false;
|
||||||
_processNextEntry = false;
|
_processNextEntry = false;
|
||||||
|
@ -250,7 +249,7 @@ void ScriptManager::resetQueue() {
|
||||||
|
|
||||||
void ScriptManager::queueScript(int32 scriptIndex, ActorIndex actorIndex) {
|
void ScriptManager::queueScript(int32 scriptIndex, ActorIndex actorIndex) {
|
||||||
// When the skipProcessing flag is set, do not queue any more scripts
|
// When the skipProcessing flag is set, do not queue any more scripts
|
||||||
if (_skipProcessing)
|
if (getSharedData()->getFlag(kFlagSkipScriptProcessing))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Look for a empty queue slot
|
// Look for a empty queue slot
|
||||||
|
@ -822,7 +821,7 @@ IMPLEMENT_OPCODE(RunEncounter)
|
||||||
encounter->disablePlayerOnExit((bool)cmd->param5);
|
encounter->disablePlayerOnExit((bool)cmd->param5);
|
||||||
|
|
||||||
if (cmd->param6) {
|
if (cmd->param6) {
|
||||||
if (encounter->isRunning())
|
if (getSharedData()->getFlag(kFlagIsEncounterRunning))
|
||||||
_processNextEntry = true;
|
_processNextEntry = true;
|
||||||
else
|
else
|
||||||
cmd->param6 = 0;
|
cmd->param6 = 0;
|
||||||
|
@ -1023,13 +1022,13 @@ END_OPCODE
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// Opcode 0x2F
|
// Opcode 0x2F
|
||||||
IMPLEMENT_OPCODE(StopProcessing)
|
IMPLEMENT_OPCODE(StopProcessing)
|
||||||
_skipProcessing = true;
|
getSharedData()->setFlag(kFlagSkipScriptProcessing, true);
|
||||||
END_OPCODE
|
END_OPCODE
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// Opcode 0x30
|
// Opcode 0x30
|
||||||
IMPLEMENT_OPCODE(ResumeProcessing)
|
IMPLEMENT_OPCODE(ResumeProcessing)
|
||||||
_skipProcessing = false;
|
getSharedData()->setFlag(kFlagSkipScriptProcessing, false);
|
||||||
END_OPCODE
|
END_OPCODE
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -158,8 +158,6 @@ public:
|
||||||
*/
|
*/
|
||||||
void resetQueue();
|
void resetQueue();
|
||||||
|
|
||||||
bool isProcessingSkipped() { return _skipProcessing; }
|
|
||||||
|
|
||||||
// Serializable
|
// Serializable
|
||||||
void saveLoadWithSerializer(Common::Serializer &s);
|
void saveLoadWithSerializer(Common::Serializer &s);
|
||||||
|
|
||||||
|
@ -298,7 +296,6 @@ private:
|
||||||
Common::Array<Opcode *> _opcodes;
|
Common::Array<Opcode *> _opcodes;
|
||||||
Common::Array<Script> _scripts;
|
Common::Array<Script> _scripts;
|
||||||
|
|
||||||
bool _skipProcessing;
|
|
||||||
bool _done;
|
bool _done;
|
||||||
bool _exit;
|
bool _exit;
|
||||||
bool _processNextEntry;
|
bool _processNextEntry;
|
||||||
|
|
|
@ -672,7 +672,7 @@ void Special::chapter9(Object *object, ActorIndex actorIndex) {
|
||||||
void Special::playChapterSound(Object *object, ActorIndex actorIndex) {
|
void Special::playChapterSound(Object *object, ActorIndex actorIndex) {
|
||||||
ResourceId id = getResourceId(object, actorIndex);
|
ResourceId id = getResourceId(object, actorIndex);
|
||||||
|
|
||||||
if (_vm->encounter()->isRunning())
|
if (getSharedData()->getFlag(kFlagIsEncounterRunning))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (id != kResourceNone && getSound()->isPlaying(id))
|
if (id != kResourceNone && getSound()->isPlaying(id))
|
||||||
|
|
|
@ -1133,7 +1133,7 @@ void Scene::updateCursor(ActorDirection direction, const Common::Rect &rect) {
|
||||||
int16 rightLimit = rect.right - 10;
|
int16 rightLimit = rect.right - 10;
|
||||||
Common::Point mouse = getCursor()->position();
|
Common::Point mouse = getCursor()->position();
|
||||||
|
|
||||||
if (getEncounter()->isRunning()) {
|
if (getSharedData()->getFlag(kFlagIsEncounterRunning)) {
|
||||||
if (getCursor()->getResourceId() != _ws->cursorResources[kCursorResourceTalkNPC])
|
if (getCursor()->getResourceId() != _ws->cursorResources[kCursorResourceTalkNPC])
|
||||||
getCursor()->set(_ws->cursorResources[kCursorResourceTalkNPC]);
|
getCursor()->set(_ws->cursorResources[kCursorResourceTalkNPC]);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue