-- first motion test (to make sure it works in LIVE. Success!): -- script.parent:RotateContinuous(Rotation.New(20, 0, 0),2) -- Image for testing: -- https://www.luasnippets.com/wp-content/uploads/2021/06/mtg128x80.jpg local fps = 1/20 -- frames per second local tf = 90 -- total movie frames local fwidth = -165.4 -- (negative) movie "frame" dimensions local fheight = 103.2 local f = script.parent --frame (image sheet) local depth = f:GetPosition().x local startHorz = f:GetPosition().y local horz = startHorz local startVert = f:GetPosition().z local vert = startVert local stepV = 1 -- 18 total steps up (vert) local stepH = 1 -- 32 total steps right (horz) local stepHmax = 10 local stepVmax = 9 function _onEnterFrame() f:SetPosition(Vector3.New(depth, horz, vert)) horz = horz + fwidth stepH = stepH + 1 -- move a step over if(stepH == stepHmax+1)then stepH = 1 stepV = stepV + 1 -- increase vert if at the end of the horz and reset starting horz horz = startHorz vert = vert + fheight end if(stepV == stepVmax+1)then -- reset to start over f:SetPosition(Vector3.New(depth, startHorz, startVert)) --print("Current status is Done? " .. tostring(myTask:GetStatus() == TaskStatus.COMPLETED)) stepV = 1 stepH = 1 vert = startVert horz = startHorz Task.Wait(2) _init() end end function _init() local _task = Task.Spawn(function() _onEnterFrame() end) _task.repeatCount = tf -- total frames _task.repeatInterval = fps -- frames per second end Task.Wait(2) _init()