diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index 905862998ee..9026e53c5ba 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -1390,8 +1390,9 @@ void PrinceEngine::showNormAnims() { } else { anim._frame++; } - if (anim._frame < phaseCount - 1) { - anim._showFrame = anim._frame; + anim._showFrame = anim._frame; + if (anim._showFrame >= phaseCount) { + anim._showFrame = phaseCount - 1; } showAnim(anim); } diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index 061d86c848c..dc8bb916744 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -643,6 +643,14 @@ void Interpreter::O_SHOWANIM() { delete anim._shadowData; anim._shadowData = nullptr; } + + // WALKAROUND: fix for turning off bard's wife background animation + // in front of bard's house (location 7) after giving her poem (item 33) + // in script: GiveLetter (line 11082) + if (_currentInstruction == kGiveLetterScriptFix) { + _vm->_backAnimList[1].backAnims[0]._state = 1; + } + debugInterpreter("O_SHOWANIM slot %d, animId %d", slot, animId); } diff --git a/engines/prince/script.h b/engines/prince/script.h index 9c397b0d1f6..196a19512d8 100644 --- a/engines/prince/script.h +++ b/engines/prince/script.h @@ -252,6 +252,8 @@ private: typedef void (Interpreter::*OpcodeFunc)(); static OpcodeFunc _opcodes[]; + static const int kGiveLetterScriptFix = 79002; + // Keep opcode handlers names as they are in original code // it easier to switch back and forth void O_WAITFOREVER();