A fix for this that I’ve used is to manually stop the sequence right before the end frame. This way you’re essentially starting the next sequence before the last one finishes.
Try something like this, hope it helps:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Random }
sequence_hitch_fix := class(creative_device):
@editable
Sequences : []custom_animation_sequence = array{}
OnBegin<override>()<suspends>:void=
# Initialization
# Set the duration of the sequences
for(Sequence : Sequences):
Sequence.SetSequenceTime()
# Loop random sequences
loop:
if(SequenceToPlay := Sequences[GetRandomInt(0, Sequences.Length - 1)]):
SequenceToPlay.PlaySequence()
custom_animation_sequence := class<concrete>():
# The cinematic sequence device
@editable
CinematicSequenceDevice : cinematic_sequence_device = cinematic_sequence_device{}
# The offset to use for sequences
PlaybackOffset : float = 0.1
# Store the duration of the sequence in seconds
var SequenceDuration : float = 0.0
# Play the sequence
PlaySequence()<suspends>:void=
CinematicSequenceDevice.Play() # Play the sequence
Sleep(SequenceDuration - PlaybackOffset) # Sleep for the duration of the sequence
CinematicSequenceDevice.GoToEndAndStop() # Cut the sequence short (somehow this prevents the hitching)
# Sets the sequence time by skipping to end of the animation and getting the playback time.
SetSequenceTime():void=
# Play the sequence and skip to the end frame
CinematicSequenceDevice.Play()
CinematicSequenceDevice.GoToEndAndStop()
# Set the sequence duration as the current playback time
set SequenceDuration = CinematicSequenceDevice.GetPlaybackTime()