diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index 1e50fe5ec46..4ed3cee6f3b 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -722,6 +722,17 @@ void Interpreter::O_PUTBACKANIM() { _vm->_script->installSingleBackAnim(_vm->_backAnimList, slot, room->_backAnim); } delete room; + + // WALKAROUND: fix for turning on 'walking bird' background animation too soon, + // after completing 'throw a rock' mini-game in Silmaniona location. + // Second bird shouldn't appear when normal animation is still in use + // in script lines 13814 and 13848 + if (_currentInstruction == kSecondBirdAnimationScriptFix) { + if (_vm->_normAnimList[1]._state == 0) { + _vm->_backAnimList[0].backAnims[0]._state = 1; + } + } + debugInterpreter("O_PUTBACKANIM roomId %d, slot %d, animId %d", roomId, slot, animId); } diff --git a/engines/prince/script.h b/engines/prince/script.h index 23c0468d151..fe79cf5f96b 100644 --- a/engines/prince/script.h +++ b/engines/prince/script.h @@ -242,6 +242,7 @@ private: static OpcodeFunc _opcodes[]; static const uint kGiveLetterScriptFix = 79002; + static const uint kSecondBirdAnimationScriptFix = 45658; // Keep opcode handlers names as they are in original code // making it easier to switch back and forth