diff --git a/engines/trecision/scheduler.cpp b/engines/trecision/scheduler.cpp index 4b8730d2b40..6474d7febce 100644 --- a/engines/trecision/scheduler.cpp +++ b/engines/trecision/scheduler.cpp @@ -30,6 +30,7 @@ Scheduler::Scheduler(TrecisionEngine *vm) : _vm(vm) { _counter = 0; _idleMsg = { MC_IDLE, 0, MP_DEFAULT, 0, 0, 0, 0 }; + _msg = {MC_IDLE, 0, MP_DEFAULT, 0, 0, 0, 0}; } Scheduler::~Scheduler() { diff --git a/engines/trecision/script.cpp b/engines/trecision/script.cpp index 0c6b83dae2d..619b2aae1c6 100644 --- a/engines/trecision/script.cpp +++ b/engines/trecision/script.cpp @@ -37,6 +37,16 @@ namespace Trecision { +void SScriptFrame::clear() { + _class = MC_IDLE; + _event = ME_MOUSEOPERATE; + _u8Param = 0; + _u16Param1 = _u16Param2 = 0; + _u32Param = 0; + + _noWait = false; +} + void SScriptFrame::sendFrame(Scheduler *scheduler) { scheduler->doEvent(_class, _event, MP_DEFAULT, _u16Param1, _u16Param2, _u8Param, _u32Param); } diff --git a/engines/trecision/struct.h b/engines/trecision/struct.h index 292ee29e4a2..0a7298569b1 100644 --- a/engines/trecision/struct.h +++ b/engines/trecision/struct.h @@ -154,6 +154,7 @@ struct SScriptFrame { bool _noWait; + void clear(); void sendFrame(Scheduler *scheduler); bool isEmptyEvent() const { return _class == 0 && _event == 0; } }; @@ -168,7 +169,7 @@ struct SDText { Common::String _text; char _drawTextLines[MAXDTEXTLINES][MAXDTEXTCHARS]; - void set(SDText org); + void set(SDText *org); void set(Common::Rect rect, Common::Rect subtitleRect, uint16 textCol, uint16 shadowCol, const Common::String &text); void draw(TrecisionEngine *vm, Graphics::Surface *externalSurface = nullptr); diff --git a/engines/trecision/text.cpp b/engines/trecision/text.cpp index dccd35d53e8..5bbaf8c6125 100644 --- a/engines/trecision/text.cpp +++ b/engines/trecision/text.cpp @@ -436,7 +436,7 @@ void TextManager::drawText(StackText text) { void TextManager::clearText() { if (_oldString._text.empty() && !_curString._text.empty()) { - _oldString.set(_curString); + _oldString.set(&_curString); _curString._text.clear(); _vm->_textStatus |= TEXT_DEL; diff --git a/engines/trecision/trecision.cpp b/engines/trecision/trecision.cpp index dc230ca9443..8d297c04a87 100644 --- a/engines/trecision/trecision.cpp +++ b/engines/trecision/trecision.cpp @@ -164,6 +164,13 @@ TrecisionEngine::TrecisionEngine(OSystem *syst, const ADGameDescription *desc) : _textStatus = TEXT_OFF; _cx = _cy = 0; + + _textArea = nullptr; + _snake52 = {MC_IDLE, 0, MP_DEFAULT, 0, 0, 0, 0}; + for (int i = 0; i < 50; ++i) + _scriptFrame[i].clear(); + + _scheduler = nullptr; } TrecisionEngine::~TrecisionEngine() { diff --git a/engines/trecision/utils.cpp b/engines/trecision/utils.cpp index d3fa8ff4aeb..f37fdcd263e 100644 --- a/engines/trecision/utils.cpp +++ b/engines/trecision/utils.cpp @@ -79,9 +79,8 @@ uint16 TrecisionEngine::getKey() { case Common::KEYCODE_F6: return 0x3B + key - Common::KEYCODE_F1; default: - if (ascii) { + if (ascii) return ascii; - } return 0; } @@ -297,8 +296,8 @@ int TrecisionEngine::getRoomObjectIndex(uint16 objectId) { /************************************************ * SDText ************************************************/ -void SDText::set(SDText org) { - set(org._rect, org._subtitleRect, org._textCol, org._shadowCol, org._text); +void SDText::set(SDText *org) { + set(org->_rect, org->_subtitleRect, org->_textCol, org->_shadowCol, org->_text); } void SDText::set(Common::Rect rect, Common::Rect subtitleRect, uint16 textCol, uint16 shadowCol, const Common::String &text) {