Ticket #2698: 1508935.diff

File 1508935.diff, 1.8 KB (added by cyxx, 18 years ago)

Possible fix for the issue (adds extra check to actorWalkStep)

  • scumm/actor.cpp

     
    420420        }
    421421
    422422        _pos = _actorPos;
     423
     424        if (_pos == _walkdata.next) {
     425                _moving &= ~MF_IN_LEG;
     426                return 0;
     427        }
    423428        return 1;
    424429}
    425430
     
    776781        if (newdir == -1 || _ignoreTurns)
    777782                return;
    778783
    779         _moving &= ~MF_TURN;
    780 
    781         if (newdir != _facing) {
    782                 if (_vm->_game.version <= 6)
    783                         _moving = MF_TURN;
    784                 else
     784        if (_vm->_game.version <= 6) {
     785                _moving = MF_TURN;
     786                _targetFacing = newdir;
     787        } else {
     788                _moving &= ~MF_TURN;
     789                if (newdir != _facing) {
    785790                        _moving |= MF_TURN;
    786                 _targetFacing = newdir;
     791                        _targetFacing = newdir;
     792                }
    787793        }
    788794}
    789795
     
    817823                startAnimActor(_talkStopFrame);
    818824        } else {
    819825                if (_costumeNeedsInit) {
    820                                 startAnimActor(_initFrame);
     826                        startAnimActor(_initFrame);
    821827                        _costumeNeedsInit = false;
    822828                }
    823829        }
     
    13351341        for (i = 1; i < _numActors; i++) {
    13361342                if (testGfxUsageBit(x / 8, i) && !getClass(i, kObjectClassUntouchable)
    13371343                        && y >= _actors[i]._top && y <= _actors[i]._bottom
    1338                         && (_actors[i]._pos.y > _actors[curActor]._pos.y || curActor == 0)) 
     1344                        && (_actors[i]._pos.y > _actors[curActor]._pos.y || curActor == 0))
    13391345                                curActor = i;
    13401346        }
    13411347
     
    15961602        if (!isInCurrentRoom() && _vm->_game.version <= 6) {
    15971603                _pos.x = abr.x;
    15981604                _pos.y = abr.y;
    1599                 if (_ignoreTurns == false && dir != -1)
     1605                if (!_ignoreTurns && dir != -1)
    16001606                        _facing = dir;
    16011607                return;
    16021608        }
     
    16881694                        _moving = 0;
    16891695                        setBox(_walkdata.destbox);
    16901696                        startWalkAnim(3, _walkdata.destdir);
     1697                        if (_vm->_game.version <= 6) {
     1698                                if (!_ignoreTurns && _walkdata.destdir != -1 && _targetFacing != _walkdata.destdir) {
     1699                                        _targetFacing = _walkdata.destdir;
     1700                                        _moving = MF_TURN;
     1701                                }
     1702                        }
    16911703                        return;
    16921704                }
    16931705