aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorsylvaintv2013-06-30 01:18:07 +0200
committersylvaintv2013-06-30 01:18:07 +0200
commit114eff979d281341f9a7661a58b0ea2114fcfc7d (patch)
treed881eeebcebbba822fc5693a694a78487bad600e /engines
parent7c18021c52985aabc4574c633ba6569bbddd648b (diff)
downloadscummvm-rg350-114eff979d281341f9a7661a58b0ea2114fcfc7d.tar.gz
scummvm-rg350-114eff979d281341f9a7661a58b0ea2114fcfc7d.tar.bz2
scummvm-rg350-114eff979d281341f9a7661a58b0ea2114fcfc7d.zip
TOON: Fix bug #3611869 - Drew sometimes ends up stuck walking forever
Canceled old character setFacing when a new one is issued during the character rotation. Bug #3611869: "TOON: Drew sometimes ends up stuck walking forever"
Diffstat (limited to 'engines')
-rw-r--r--engines/toon/character.cpp9
-rw-r--r--engines/toon/character.h1
2 files changed, 10 insertions, 0 deletions
diff --git a/engines/toon/character.cpp b/engines/toon/character.cpp
index 479f4965f3..83c9e3ec70 100644
--- a/engines/toon/character.cpp
+++ b/engines/toon/character.cpp
@@ -58,6 +58,7 @@ Character::Character(ToonEngine *vm) : _vm(vm) {
_animSpecialDefaultId = 0;
_currentPathNode = 0;
_currentWalkStamp = 0;
+ _currentFacingStamp = 0;
_visible = true;
_speed = 150; // 150 = nominal drew speed
_lastWalkTime = 0;
@@ -99,6 +100,9 @@ void Character::setFacing(int32 facing) {
if (_blockingWalk) {
_flags |= 2;
+ _currentFacingStamp++;
+ int32 localFacingStamp = _currentFacingStamp;
+
int32 dir = 0;
_lastWalkTime = _vm->_system->getMillis();
@@ -127,6 +131,11 @@ void Character::setFacing(int32 facing) {
else
playWalkAnim(0, 0);
_vm->doFrame();
+
+ if (_currentFacingStamp != localFacingStamp) {
+ // another setFacing was started in doFrame, we need to cancel this one.
+ return;
+ }
};
_flags &= ~2;
diff --git a/engines/toon/character.h b/engines/toon/character.h
index d33c314bf7..b248e7ccf2 100644
--- a/engines/toon/character.h
+++ b/engines/toon/character.h
@@ -143,6 +143,7 @@ protected:
Common::Array<Common::Point> _currentPath;
uint32 _currentPathNode;
int32 _currentWalkStamp;
+ int32 _currentFacingStamp;
};
} // End of namespace Toon