local traxx = require "traxx" require "utils" require "string" require "math" function start_blasting(track) local blast = table.shallow_copy(traxx[track]) blast.channel = "blast" ctx.udata.blast = blast ctx.udata.last_beat = ctx.udata.time + 60 / blast.bpm audio_play(ctx.udata.blast) end function game_tick() if ctx.initialization_needed then ctx.udata = { time = 0, beat = 0 } start_blasting("mod22") end local state = ctx.udata draw_rectangle { rect = { w = 960, h = 540 }, color = { r = 125, a = 255 } } state.time = state.time + ctx.frame_duration if state.time - state.last_beat > 60 / state.blast.bpm then state.last_beat = state.last_beat + 60 / state.blast.bpm state.beat = state.beat + 1 -- draw_rectangle { -- rect = { w = 64, h = 64 }, -- color = { r = 255, a = 255 } -- } end local wobble = sinease(12, state.time - state.beat * (60 / state.blast.bpm) , (60 / state.blast.bpm) / 1.5, 0) for i = 0,10 do draw_sprite { texture = "art/creatures/meathead/" .. string.format("dance-%s.png", pingpong(state.beat, 3)), rect = { w = 64, h = 64 + wobble, x = 300 + i * 32, y = 300 - wobble } } end end