I create a code snippet for animations :) Hope its useful for someone https://tic.computer/play?cart=12
-- title: Animation Testing -- author: Ahmed Khalifa -- desc: Function to draw sprite animation -- script: lua -- input: gamepad -- create animation object -- frames: array of the upper left corner of each frame -- size: 0 means 8x8, 1 means 16x16, etc -- fps: frames per seconds function createAnimation(frames,size,fps) return {cf=0,frames=frames,size=size,t=1/fps*1000,spf=1/fps*1000} end -- reset the animation to the original frame -- anim: animation object to reset function resetAnimation(anim) anim.cf=0 anim.t=anim.spf end -- Draw the current animation object -- anim: animation object to draw -- dt: delta time since last update -- x,y: position of upper left corner -- ts: transparent color -- flip: 0 no flip 1 flip horizontally function drawAnimation(anim,dt,x,y,ts,flip) anim.t=anim.t-dt if anim.t<=0 then anim.t=anim.t+anim.spf anim.cf=anim.cf+1 if anim.cf>=#anim.frames then anim.cf=0 end end local f=anim.frames[anim.cf+1] for i=0,anim.size do for j=0,anim.size do if flip==0 then spr(f+i+j*16,x+i*8,y+j*8,ts,1,flip) else spr(f+i+j*16,x+(anim.size-i)*8,y+j*8,ts,1,flip) end end end end -- initialize the required data function init() pt=time() dt=0 x=84 y=64 flip=0 -- 16x16 animation big=createAnimation({256,258,260,258,256,262,264,262},1,20) -- 8x8 animation small=createAnimation({266,267,268,267,266,269,270,269},0,20) -- the current activated animation anim=big end init() -- update function function TIC() -- calculate delta time dt=time()-pt pt=time() -- change the animation state and direction based on controls state=0 if btn(2) then state=1 flip=1 x=x-1 end if btn(3) then state=1 flip=0 x=x+1 end if btnp(4,60,6) then if anim==big then anim=small else anim=big end end -- clear screen cls(12) -- reset the current animation when no btns pressed if state==0 then resetAnimation(anim) end -- draw the screen drawAnimation(anim,dt,x,y,15,flip) print("Press Z to change Animation",50,100,0) end