diff --git a/source/platform/psbarrel.cpp b/source/platform/psbarrel.cpp index 93ae01830..0929e94af 100644 --- a/source/platform/psbarrel.cpp +++ b/source/platform/psbarrel.cpp @@ -60,6 +60,11 @@ void CNpcSteerableBarrelPlatform::processMovement( int _frames ) s32 playerMovement = player->getMovement(); + if ( !playerMovement ) + { + playerMovement = player->getMoveLeftRight(); + } + m_currentSpeed = -playerMovement; } else diff --git a/source/player/player.cpp b/source/player/player.cpp index 09f9800ff..6b4856d3f 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -773,6 +773,7 @@ if(newmode!=-1) m_allowConversation=false; m_xMove = Pos.vx; + m_moveLeftRight = 0; /// #ifdef __USER_paul__ diff --git a/source/player/player.h b/source/player/player.h index fb5b74e0e..8b36bb471 100644 --- a/source/player/player.h +++ b/source/player/player.h @@ -512,9 +512,12 @@ public: // Movement tracking for barrels s32 getMovement() {return( m_xMove );} + s8 getMoveLeftRight() {return( m_moveLeftRight );} + void setMoveLeftRight( s8 newLeftRight ) {m_moveLeftRight = newLeftRight;} private: s32 m_xMove; + s8 m_moveLeftRight; }; diff --git a/source/player/psidle.cpp b/source/player/psidle.cpp index 3e9db4235..44ce66e54 100644 --- a/source/player/psidle.cpp +++ b/source/player/psidle.cpp @@ -81,11 +81,17 @@ void CPlayerStateBaseIdle::thinkControl(CPlayerModeBase *_playerMode) } else if(controlHeld&PI_LEFT) { + CPlayer *player = _playerMode->getPlayer(); + player->setMoveLeftRight( player->getMoveLeftRight() - 1 ); + if(_playerMode->canMoveLeft()) _playerMode->setState(STATE_RUN); } else if(controlHeld&PI_RIGHT) { + CPlayer *player = _playerMode->getPlayer(); + player->setMoveLeftRight( player->getMoveLeftRight() + 1 ); + if(_playerMode->canMoveRight()) _playerMode->setState(STATE_RUN); } diff --git a/source/player/psrun.cpp b/source/player/psrun.cpp index 6b7dbceb5..6c3f89dec 100644 --- a/source/player/psrun.cpp +++ b/source/player/psrun.cpp @@ -126,10 +126,16 @@ void CPlayerStateRun::think(CPlayerModeBase *_playerMode) if(controlHeld&PI_LEFT) { + CPlayer *player = _playerMode->getPlayer(); + player->setMoveLeftRight( player->getMoveLeftRight() - 1 ); + _playerMode->moveLeft(); } else if(controlHeld&PI_RIGHT) { + CPlayer *player = _playerMode->getPlayer(); + player->setMoveLeftRight( player->getMoveLeftRight() + 1 ); + _playerMode->moveRight(); } else