diff --git a/engines/ags/engine/ac/character_info_engine.cpp b/engines/ags/engine/ac/character_info_engine.cpp index 3fc262c0c63..560f334a3f5 100644 --- a/engines/ags/engine/ac/character_info_engine.cpp +++ b/engines/ags/engine/ac/character_info_engine.cpp @@ -76,10 +76,15 @@ void CharacterInfo::UpdateMoveAndAnim(int &char_index, CharacterExtras *chex, in return; // must be careful not to screw things up } - // Make sure it doesn't flash up a blue cup - if (view < 0); - else if (loop >= _G(views)[view].numLoops) - loop = 0; + // Fixup character's view when possible + if (view >= 0 && + (loop >= _G(views)[view].numLoops || frame >= _G(views)[view].loops[loop].numFrames)) { + for (loop = 0; + (loop < _G(views)[view].numLoops) && (_G(views)[view].loops[loop].numFrames == 0); ++loop) { + } + if (loop == _G(views)[view].numLoops) + quitprintf("!Character %s is assigned view %d that has no frames!", name, view); + } int doing_nothing = 1;