ASYLUM: Move skipScriptProcessing and isEncounterRunning flags to SharedData

This commit is contained in:
Littleboy 2011-08-04 21:54:31 -04:00 committed by Eugene Sandulenko
parent c935ba9eae
commit d1b6bbabfd
No known key found for this signature in database
GPG key ID: 014D387312D34F08
10 changed files with 39 additions and 46 deletions

View file

@ -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);

View file

@ -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);
}

View file

@ -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);

View file

@ -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;

View file

@ -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();
}

View file

@ -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

View file

@ -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
//////////////////////////////////////////////////////////////////////////

View file

@ -158,8 +158,6 @@ public:
*/
void resetQueue();
bool isProcessingSkipped() { return _skipProcessing; }
// Serializable
void saveLoadWithSerializer(Common::Serializer &s);
@ -298,7 +296,6 @@ private:
Common::Array<Opcode *> _opcodes;
Common::Array<Script> _scripts;
bool _skipProcessing;
bool _done;
bool _exit;
bool _processNextEntry;

View file

@ -672,7 +672,7 @@ void Special::chapter9(Object *object, ActorIndex actorIndex) {
void Special::playChapterSound(Object *object, ActorIndex actorIndex) {
ResourceId id = getResourceId(object, actorIndex);
if (_vm->encounter()->isRunning())
if (getSharedData()->getFlag(kFlagIsEncounterRunning))
return;
if (id != kResourceNone && getSound()->isPlaying(id))

View file

@ -1133,7 +1133,7 @@ void Scene::updateCursor(ActorDirection direction, const Common::Rect &rect) {
int16 rightLimit = rect.right - 10;
Common::Point mouse = getCursor()->position();
if (getEncounter()->isRunning()) {
if (getSharedData()->getFlag(kFlagIsEncounterRunning)) {
if (getCursor()->getResourceId() != _ws->cursorResources[kCursorResourceTalkNPC])
getCursor()->set(_ws->cursorResources[kCursorResourceTalkNPC]);