diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/prince/prince.cpp | 11 | ||||
-rw-r--r-- | engines/prince/script.cpp | 10 |
2 files changed, 13 insertions, 8 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index 101af7b35c..ea28ae3c6b 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -2367,16 +2367,15 @@ void PrinceEngine::dialogLeftMouseButton(byte *string, int dialogSelected) { talkHero(0); int dialogDataValue = (int)READ_UINT32(_dialogData); - int newValue = (dialogDataValue & (1 << dialogSelected)); // FIXME - WRITE_UINT32(_dialogData, newValue); // FIXME + dialogDataValue |= (1u << dialogSelected); + WRITE_UINT32(_dialogData, dialogDataValue); _flags->setFlagValue(Flags::BOXSEL, dialogSelected + 1); setVoice(0, 28, dialogSelected + 1); - int dialogOpt = dialogSelected << 4; - _flags->setFlagValue(Flags::VOICE_H_LINE, _dialogOptLines[dialogOpt]); - _flags->setFlagValue(Flags::VOICE_A_LINE, _dialogOptLines[dialogOpt + 1]); - _flags->setFlagValue(Flags::VOICE_B_LINE, _dialogOptLines[dialogOpt + 2]); + _flags->setFlagValue(Flags::VOICE_H_LINE, _dialogOptLines[dialogSelected * 4]); + _flags->setFlagValue(Flags::VOICE_A_LINE, _dialogOptLines[dialogSelected * 4 + 1]); + _flags->setFlagValue(Flags::VOICE_B_LINE, _dialogOptLines[dialogSelected * 4 + 2]); _interpreter->setString(_dialogOptAddr[dialogSelected]); } diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index 3fe03e8c1d..ab75b50ade 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -684,7 +684,7 @@ void Interpreter::O_CHECKBACKANIMFRAME() { uint16 frameId = readScriptFlagValue(); int currAnim = _vm->_backAnimList[slotId]._seq._currRelative; if (_vm->_backAnimList[slotId].backAnims[currAnim]._frame != frameId) { - //esi -= 6; loop of this OP? + _currentInstruction -= 6; _opcodeNF = 1; } debugInterpreter("O_CHECKBACKANIMFRAME slotId %d, frameId %d", slotId, frameId); @@ -781,7 +781,7 @@ void Interpreter::O_BACKANIMUPDATEOFF() { void Interpreter::O_BACKANIMUPDATEON() { uint16 slotId = readScriptFlagValue(); int currAnim = _vm->_backAnimList[slotId]._seq._currRelative; - _vm->_backAnimList[slotId].backAnims[currAnim]._state = 1; + _vm->_backAnimList[slotId].backAnims[currAnim]._state = 0; debugInterpreter("O_BACKANIMUPDATEON %d", slotId); } @@ -1437,11 +1437,17 @@ void Interpreter::O_INITDIALOG() { void Interpreter::O_ENABLEDIALOGOPT() { uint16 opt = readScriptFlagValue(); debugInterpreter("O_ENABLEDIALOGOPT opt %d", opt); + int dialogDataValue = (int)READ_UINT32(_vm->_dialogData); + dialogDataValue &= ~(1u << opt); + WRITE_UINT32(_vm->_dialogData, dialogDataValue); } void Interpreter::O_DISABLEDIALOGOPT() { uint16 opt = readScriptFlagValue(); debugInterpreter("O_DISABLEDIALOGOPT opt %d", opt); + int dialogDataValue = (int)READ_UINT32(_vm->_dialogData); + dialogDataValue |= (1u << opt); + WRITE_UINT32(_vm->_dialogData, dialogDataValue); } void Interpreter::O_SHOWDIALOGBOX() { |