aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/state.cpp')
-rw-r--r--engines/sci/engine/state.cpp68
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;