aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/prince/prince.cpp11
-rw-r--r--engines/prince/script.cpp10
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() {