local DRAIN_THRESHOLD = 0.1 local DRAIN_RATE = 0.02 local drainEvents = { {time = 48000, duration = 7000}, {time = 99000, duration = 5000}, {time = 147400, duration = 9000} } local currentDrainingEvent = nil local drainStartTime = 0 function drainHealth(amount) local health = getProperty('health') if health > DRAIN_THRESHOLD then setProperty('health', math.max(health - amount, DRAIN_THRESHOLD)) end end function onUpdate(elapsedTime) local currentTime = getSongPosition() if currentDrainingEvent then local elapsedDrainTime = currentTime - drainStartTime if elapsedDrainTime < currentDrainingEvent.duration then local amountToDrain = (DRAIN_RATE * elapsedTime * 1000) / (currentDrainingEvent.duration / 1000) drainHealth(amountToDrain) else currentDrainingEvent = nil end else for _, event in ipairs(drainEvents) do if currentTime >= event.time and currentTime < event.time + event.duration then currentDrainingEvent = event drainStartTime = currentTime break end end end end