diff --git a/Source/engine/actor_position.cpp b/Source/engine/actor_position.cpp index d24284b4e..70a1fd5df 100644 --- a/Source/engine/actor_position.cpp +++ b/Source/engine/actor_position.cpp @@ -105,19 +105,17 @@ constexpr std::array WalkParameters { { } // namespace -DisplacementOf ActorPosition::CalculateWalkingOffset(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation /*= false*/) const +DisplacementOf ActorPosition::CalculateWalkingOffset(Direction dir, const AnimationInfo &animInfo) const { - DisplacementOf offset = CalculateWalkingOffsetShifted4(dir, animInfo, pendingProcessAnimation); + DisplacementOf offset = CalculateWalkingOffsetShifted4(dir, animInfo); offset.deltaX >>= 4; offset.deltaY >>= 4; return offset; } -DisplacementOf ActorPosition::CalculateWalkingOffsetShifted4(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation /*= false*/) const +DisplacementOf ActorPosition::CalculateWalkingOffsetShifted4(Direction dir, const AnimationInfo &animInfo) const { - int8_t velocityProgress = animInfo.currentFrame + 1; - if (pendingProcessAnimation) - velocityProgress += 1; + int16_t velocityProgress = static_cast(animInfo.getAnimationProgress()) * animInfo.numberOfFrames / AnimationInfo::baseValueFraction; const WalkParameter &walkParameter = WalkParameters[static_cast(dir)]; DisplacementOf offset = walkParameter.startingOffset; DisplacementOf velocity = walkParameter.getVelocity(animInfo.numberOfFrames); @@ -125,9 +123,9 @@ DisplacementOf ActorPosition::CalculateWalkingOffsetShifted4(Direction return offset; } -DisplacementOf ActorPosition::CalculateWalkingOffsetShifted8(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation /*= false*/) const +DisplacementOf ActorPosition::CalculateWalkingOffsetShifted8(Direction dir, const AnimationInfo &animInfo) const { - DisplacementOf offset = CalculateWalkingOffsetShifted4(dir, animInfo, pendingProcessAnimation); + DisplacementOf offset = CalculateWalkingOffsetShifted4(dir, animInfo); offset.deltaX <<= 4; offset.deltaY <<= 4; return offset; diff --git a/Source/engine/actor_position.hpp b/Source/engine/actor_position.hpp index 91a10f26a..88b60f0bc 100644 --- a/Source/engine/actor_position.hpp +++ b/Source/engine/actor_position.hpp @@ -20,11 +20,11 @@ struct ActorPosition { WorldTilePosition temp; /** @brief Calculates the offset for the walking animation. */ - DisplacementOf CalculateWalkingOffset(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation = false) const; + DisplacementOf CalculateWalkingOffset(Direction dir, const AnimationInfo &animInfo) const; /** @brief Calculates the offset for the walking animation. */ - DisplacementOf CalculateWalkingOffsetShifted4(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation = false) const; + DisplacementOf CalculateWalkingOffsetShifted4(Direction dir, const AnimationInfo &animInfo) const; /** @brief Calculates the offset for the walking animation. */ - DisplacementOf CalculateWalkingOffsetShifted8(Direction dir, const AnimationInfo &animInfo, bool pendingProcessAnimation = false) const; + DisplacementOf CalculateWalkingOffsetShifted8(Direction dir, const AnimationInfo &animInfo) const; /** @brief Returns Pixel velocity while walking. */ DisplacementOf GetWalkingVelocityShifted4(Direction dir, const AnimationInfo &animInfo) const; /** @brief Returns Pixel velocity while walking. */ diff --git a/Source/engine/animationinfo.cpp b/Source/engine/animationinfo.cpp index 488e3b888..cf6b10f59 100644 --- a/Source/engine/animationinfo.cpp +++ b/Source/engine/animationinfo.cpp @@ -61,7 +61,7 @@ int8_t AnimationInfo::getFrameToUseForRendering() const uint8_t AnimationInfo::getAnimationProgress() const { - int16_t ticksSinceSequenceStarted = ticksSinceSequenceStarted_; + int16_t ticksSinceSequenceStarted = std::max(0, ticksSinceSequenceStarted_); int32_t tickModifier = tickModifier_; if (relevantFramesForDistributing_ <= 0) { diff --git a/Source/player.cpp b/Source/player.cpp index aa6f9024a..1662a61c8 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -149,6 +149,8 @@ void HandleWalkMode(Player &player, Direction dir) return; } + player._pdir = dir; + // The player's tile position after finishing this movement action player.position.future = player.position.tile + dirModeParams.tileAdd; @@ -156,8 +158,6 @@ void HandleWalkMode(Player &player, Direction dir) player.tempDirection = dirModeParams.dir; player._pmode = dirModeParams.walkMode; - - player._pdir = dir; } void StartWalkAnimation(Player &player, Direction dir, bool pmWillBeCalled) @@ -180,8 +180,8 @@ void StartWalk(Player &player, Direction dir, bool pmWillBeCalled) return; } - HandleWalkMode(player, dir); StartWalkAnimation(player, dir, pmWillBeCalled); + HandleWalkMode(player, dir); } void ClearStateVariables(Player &player)