diff options
| author | Nicola Mettifogo | 2010-06-13 06:55:40 +0000 | 
|---|---|---|
| committer | Nicola Mettifogo | 2010-06-13 06:55:40 +0000 | 
| commit | 3cacd7bc4372dbaae5c454236b4413ab87955347 (patch) | |
| tree | ad4de443e7a9ef2c3a49e1145f02781989b6c70c | |
| parent | 0659d5f2448cbea343d294146ba20f656f759f42 (diff) | |
| download | scummvm-rg350-3cacd7bc4372dbaae5c454236b4413ab87955347.tar.gz scummvm-rg350-3cacd7bc4372dbaae5c454236b4413ab87955347.tar.bz2 scummvm-rg350-3cacd7bc4372dbaae5c454236b4413ab87955347.zip | |
Keep the balloon from getting stuck in an infinite loop when floating near the borders of the screen.
See the detailed explanation in walk.cpp.
svn-id: r49619
| -rw-r--r-- | engines/parallaction/walk.cpp | 13 | 
1 files changed, 13 insertions, 0 deletions
| diff --git a/engines/parallaction/walk.cpp b/engines/parallaction/walk.cpp index 4468a7a678..d6df23d415 100644 --- a/engines/parallaction/walk.cpp +++ b/engines/parallaction/walk.cpp @@ -626,6 +626,19 @@ void PathWalker_BR::doWalk(State &s) {  	int xStep = (scale * 16) / 100 + 1;  	int yStep = (scale * 10) / 100 + 1; + +	/* WORKAROUND: in the balloon scene, the position of the balloon (which is implemented as a  +	Character) is controlled by the user (for movement, via this walking code) and by the scripts +	(to simulate the balloon floating in the air, in a neverending loop that alters the position +	coordinates). +	When the two step sizes are equal in magnitude and opposite in direction, then the walk code +	enters an infinite loop without giving control back to the user (this happens quite frequently +	when navigating the balloon near the borders of the screen, where the calculated step is  +	forcibly small because of clipping). Since the "floating" script (part1/scripts/mongolo.scr)  +	uses increments of 3 for both x and y, we tweak the calculated steps accordingly here. */ +	if (xStep == 3) xStep--; +	if (yStep == 3) yStep--; +  	debugC(9, kDebugWalk, "calculated step: (%i, %i)", xStep, yStep);  	s._fieldC = 0; | 
