diff options
Diffstat (limited to 'engines/sci/engine/state.cpp')
-rw-r--r-- | engines/sci/engine/state.cpp | 68 |
1 files changed, 29 insertions, 39 deletions
diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp index b642cd8dc9..bd78639c77 100644 --- a/engines/sci/engine/state.cpp +++ b/engines/sci/engine/state.cpp @@ -69,52 +69,51 @@ static const uint16 s_halfWidthSJISMap[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -EngineState::EngineState(SegManager *segMan) -: _segMan(segMan), _dirseeker() { +EngineState::EngineState(Vocabulary *voc, SegManager *segMan) +: _voc(voc), _segMan(segMan), _dirseeker() { - reset(false); -} - -EngineState::~EngineState() { - delete _msgState; -} - -void EngineState::reset(bool isRestoring) { #ifdef USE_OLD_MUSIC_FUNCTIONS sfx_init_flags = 0; #endif - if (!isRestoring) { - script_000 = 0; - _gameObj = NULL_REG; + restarting_flags = 0; - _memorySegmentSize = 0; - _soundCmd = 0; + last_wait_time = 0; - restarting_flags = 0; + _fileHandles.resize(5); - execution_stack_base = 0; - _executionStackPosChanged = false; + execution_stack_base = 0; + _executionStackPosChanged = false; - _fileHandles.resize(5); + r_acc = NULL_REG; + restAdjust = 0; + r_prev = NULL_REG; - r_acc = NULL_REG; - restAdjust = 0; - r_prev = NULL_REG; + stack_base = 0; + stack_top = 0; - stack_base = 0; - stack_top = 0; - } + script_000 = 0; - last_wait_time = 0; + sys_strings_segment = 0; + sys_strings = 0; + + _gameObj = NULL_REG; gc_countdown = 0; + successor = 0; + _throttleCounter = 0; _throttleLastTime = 0; _throttleTrigger = false; - restoring = false; + _memorySegmentSize = 0; + + _soundCmd = 0; +} + +EngineState::~EngineState() { + delete _msgState; } void EngineState::wait(int16 ticks) { @@ -136,15 +135,6 @@ void EngineState::setRoomNumber(uint16 roomNumber) { script_000->_localsBlock->_locals[13] = make_reg(0, roomNumber); } -void EngineState::shrinkStackToBase() { - uint size = execution_stack_base + 1; - assert(_executionStack.size() >= size); - Common::List<ExecStack>::iterator iter = _executionStack.begin(); - for (uint i = 0; i < size; ++i) - ++iter; - _executionStack.erase(iter, _executionStack.end()); -} - static kLanguage charToLanguage(const char c) { switch (c) { case 'F': @@ -228,7 +218,7 @@ kLanguage SciEngine::getSciLanguage() { lang = K_LANG_ENGLISH; if (_kernel->_selectorCache.printLang != -1) { - lang = (kLanguage)readSelectorValue(_gamestate->_segMan, _gamestate->_gameObj, SELECTOR(printLang)); + lang = (kLanguage)GET_SEL32V(_gamestate->_segMan, _gamestate->_gameObj, SELECTOR(printLang)); if ((getSciVersion() >= SCI_VERSION_1_1) || (lang == K_LANG_NONE)) { // If language is set to none, we use the language from the game detector. @@ -263,7 +253,7 @@ kLanguage SciEngine::getSciLanguage() { } // Store language in printLang selector - writeSelectorValue(_gamestate->_segMan, _gamestate->_gameObj, SELECTOR(printLang), lang); + PUT_SEL32V(_gamestate->_segMan, _gamestate->_gameObj, SELECTOR(printLang), lang); } } @@ -275,7 +265,7 @@ Common::String SciEngine::strSplit(const char *str, const char *sep) { kLanguage subLang = K_LANG_NONE; if (_kernel->_selectorCache.subtitleLang != -1) { - subLang = (kLanguage)readSelectorValue(_gamestate->_segMan, _gamestate->_gameObj, SELECTOR(subtitleLang)); + subLang = (kLanguage)GET_SEL32V(_gamestate->_segMan, _gamestate->_gameObj, SELECTOR(subtitleLang)); } kLanguage secondLang; |