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
|
||||
_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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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]);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue