diff --git a/skelatool64/lua/sk_animation.lua b/skelatool64/lua/sk_animation.lua index 2eeb7c6..2ee9a10 100644 --- a/skelatool64/lua/sk_animation.lua +++ b/skelatool64/lua/sk_animation.lua @@ -154,7 +154,10 @@ local function build_armature_pose(armature, node_pose, result) end local function build_animation(armature, animation) - local n_frames = math.ceil(animation.duration * sk_input.settings.ticks_per_second / animation.ticks_per_second) + -- Don't stop at the last frame, include it + local ticks_to_include = animation.duration + 1 + + local n_frames = math.ceil(ticks_to_include * sk_input.settings.ticks_per_second / animation.ticks_per_second) local node_pose = {} diff --git a/skelatool64/src/definition_generator/AnimationGenerator.cpp b/skelatool64/src/definition_generator/AnimationGenerator.cpp index d09f4fe..d25582d 100644 --- a/skelatool64/src/definition_generator/AnimationGenerator.cpp +++ b/skelatool64/src/definition_generator/AnimationGenerator.cpp @@ -156,7 +156,10 @@ aiQuaternion evaluateQuaternionAt(const aiQuatKey* keys, unsigned keyCount, doub } std::string generateanimationV2(const aiAnimation& animation, int index, BoneHierarchy& bones, CFileDefinition& fileDef, const DisplayListSettings& settings) { - int nFrames = ceil(animation.mDuration * settings.mTicksPerSecond / animation.mTicksPerSecond) + 1; + // Don't stop at the last frame, include it + int ticksToInclude = animation.mDuration + 1; + + int nFrames = ceil(ticksToInclude * settings.mTicksPerSecond / animation.mTicksPerSecond); std::vector> allFrameData(nFrames);