Updated 7 November 2026

Time, timers & easing

Wall-clock functions use the 2000-01-01 epoch. Timers and easing functions live in c8b.timer and c8b.easingFunctions.

Conventions on every page: Availability says whether a symbol exists on the console BIOS, the emulator, or both. c8b and C8B are the same table.

Contents

Clock and date

c8b.getCurrentTimeMilliseconds

c8b.getCurrentTimeMilliseconds()

Milliseconds since local midnight.

  • Returns: integer
  • Availability: Console (BIOS) and emulator
  • Note: Console without NTP returns milliseconds since boot instead.

c8b.resetElapsedTime

c8b.resetElapsedTime()

Resets the high-resolution timer.

  • Availability: Console (BIOS) and emulator

c8b.getElapsedTime

c8b.getElapsedTime()

Seconds since resetElapsedTime.

  • Returns: number
  • Availability: Console (BIOS) and emulator
  • Note: Console resolution is 1 ms.

c8b.getSecondsSinceEpoch

c8b.getSecondsSinceEpoch()

Seconds and milliseconds since 2000-01-01 00:00 UTC (Core8Bit epoch).

  • Returns: seconds, milliseconds
  • Availability: Console (BIOS) and emulator
  • Note: On the console this needs network time (Wi-Fi); until the clock is set it returns zeros. The emulator uses the host clock.

c8b.getTime

c8b.getTime()

Local time as {year, month, day, weekday, hour, minute, second, millisecond}.

  • Returns: table
  • Availability: Console (BIOS) and emulator
  • Note: On the console this needs network time (Wi-Fi); until the clock is set it returns zeros. The emulator uses the host clock.
local t = c8b.getTime()
print(t.hour .. ":" .. t.minute)

c8b.getGMTTime

c8b.getGMTTime()

UTC time table.

  • Returns: table
  • Availability: Console (BIOS) and emulator
  • Note: On the console this needs network time (Wi-Fi); until the clock is set it returns zeros. The emulator uses the host clock.

c8b.epochFromTime

c8b.epochFromTime(timeTable)

Local time table to epoch-2000 seconds.

  • Returns: seconds, milliseconds
  • Availability: Console (BIOS) and emulator

c8b.epochFromGMTTime

c8b.epochFromGMTTime(timeTable)

UTC time table to epoch-2000 seconds.

  • Returns: seconds, milliseconds
  • Availability: Console (BIOS) and emulator

c8b.timeFromEpoch

c8b.timeFromEpoch(seconds, [milliseconds=0])

Epoch-2000 seconds to a local time table.

  • Returns: table
  • Availability: Console (BIOS) and emulator

c8b.GMTTimeFromEpoch

c8b.GMTTimeFromEpoch(seconds, [milliseconds=0])

Epoch-2000 seconds to a UTC time table.

  • Returns: table
  • Availability: Console (BIOS) and emulator

c8b.shouldDisplay24HourTime

c8b.shouldDisplay24HourTime()

Always true.

  • Returns: true
  • Availability: Console (BIOS) and emulator

Timers (c8b.timer)

c8b.timer.new

c8b.timer.new(duration, [callback, ...]) | (duration, startValue, endValue, [easing])

Creates a timer (milliseconds). With a function, it is called with the extra arguments when the timer ends; with numbers, timer.value interpolates. Fields: duration, value, repeats, reverses, discardOnCompletion, paused, updateCallback, timerEndedCallback.

  • Returns: timer
  • Availability: Console (BIOS) and emulator
  • Note: Timers advance only when you call c8b.timer.updateTimers(), by a fixed 41.67 ms (1/24 s) per call. A new timer starts counting after 3 updates.
c8b.timer.new(500, function() print("done") end)
function c8b.update() c8b.timer.updateTimers() end

c8b.timer.updateTimers

c8b.timer.updateTimers()

Advances all timers; call once per frame.

  • Availability: Console (BIOS) and emulator
  • Note: Timers advance only when you call c8b.timer.updateTimers(), by a fixed 41.67 ms (1/24 s) per call.

c8b.timer.performAfterDelay

c8b.timer.performAfterDelay(delay, fn, ...)

Calls fn(...) after delay ms.

  • Returns: timer
  • Availability: Console (BIOS) and emulator

c8b.timer.after

c8b.timer.after(delay, fn, ...)

Same function as performAfterDelay.

  • Returns: timer
  • Availability: Console (BIOS) and emulator

c8b.timer.keyRepeatTimer

c8b.timer.keyRepeatTimer(fn)

Repeating timer: fires after 200 ms, then every 50 ms.

  • Returns: timer
  • Availability: Console (BIOS) and emulator

c8b.timer.keyRepeatTimerWithDelay

c8b.timer.keyRepeatTimerWithDelay(initialDelay, repeatDelay, fn)

Repeating timer with custom delays.

  • Returns: timer
  • Availability: Console (BIOS) and emulator

c8b.timer.allTimers

c8b.timer.allTimers()

Active timers.

  • Returns: table
  • Availability: Console (BIOS) and emulator

c8b.timer.clearAll

c8b.timer.clearAll()

Removes all timers (also run on game unload).

  • Availability: Console (BIOS) and emulator

Timer.new

Timer.new(duration, ...)

Global Timer class constructor; same as c8b.timer.new.

  • Availability: Console (BIOS) and emulator

Timer:start

timer:start()

Unpauses.

  • Availability: Console (BIOS) and emulator

Timer:pause

timer:pause()

Pauses.

  • Availability: Console (BIOS) and emulator

Timer:reset

timer:reset()

Restarts from 0.

  • Availability: Console (BIOS) and emulator

Timer:remove

timer:remove()

Removes the timer and drops its callbacks.

  • Availability: Console (BIOS) and emulator

Timer:getTimeLeft

timer:getTimeLeft()

Remaining ms.

  • Returns: number
  • Availability: Console (BIOS) and emulator

Timer.updateCallback

timer.updateCallback = function(timer) end

Callback field: called on every update while running.

  • Availability: Console (BIOS) and emulator

Timer.timerEndedCallback

timer.timerEndedCallback = function(timer) end

Callback field: called when the timer ends (with the extra new() arguments if given, otherwise the timer).

  • Availability: Console (BIOS) and emulator

RealTimer.new

RealTimer.new(duration, ...) | c8b.timer.RealTimer.new(...)

Timer that skips its first update so actions land on separate frames.

  • Returns: timer
  • Availability: Console (BIOS) and emulator

Aliases

RealTimer

RealTimer

Global alias of c8b.timer.RealTimer.

  • Availability: Console (BIOS) and emulator

Timer

Timer

Global Timer class (metatable of timers).

  • Availability: Console (BIOS) and emulator

Easing functions (c8b.easingFunctions)

c8b.easingFunctions.linear

c8b.easingFunctions.linear(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inQuad

c8b.easingFunctions.inQuad(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outQuad

c8b.easingFunctions.outQuad(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutQuad

c8b.easingFunctions.inOutQuad(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outInQuad

c8b.easingFunctions.outInQuad(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inCubic

c8b.easingFunctions.inCubic(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outCubic

c8b.easingFunctions.outCubic(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutCubic

c8b.easingFunctions.inOutCubic(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outInCubic

c8b.easingFunctions.outInCubic(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inQuart

c8b.easingFunctions.inQuart(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outQuart

c8b.easingFunctions.outQuart(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutQuart

c8b.easingFunctions.inOutQuart(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inSine

c8b.easingFunctions.inSine(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outSine

c8b.easingFunctions.outSine(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutSine

c8b.easingFunctions.inOutSine(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inExpo

c8b.easingFunctions.inExpo(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outExpo

c8b.easingFunctions.outExpo(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutExpo

c8b.easingFunctions.inOutExpo(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inCirc

c8b.easingFunctions.inCirc(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outCirc

c8b.easingFunctions.outCirc(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutCirc

c8b.easingFunctions.inOutCirc(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inElastic

c8b.easingFunctions.inElastic(t, b, c, d, [a], [p])

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outElastic

c8b.easingFunctions.outElastic(t, b, c, d, [a], [p])

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutElastic

c8b.easingFunctions.inOutElastic(t, b, c, d, [a], [p])

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inBack

c8b.easingFunctions.inBack(t, b, c, d, [s])

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outBack

c8b.easingFunctions.outBack(t, b, c, d, [s])

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutBack

c8b.easingFunctions.inOutBack(t, b, c, d, [s])

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.outBounce

c8b.easingFunctions.outBounce(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inBounce

c8b.easingFunctions.inBounce(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

c8b.easingFunctions.inOutBounce

c8b.easingFunctions.inOutBounce(t, b, c, d)

Penner easing: t elapsed, b start, c change, d duration.

  • Returns: number
  • Availability: Console (BIOS) and emulator

Low-level bindings (C8B.*)

C8B.System_getFPS

C8B.System_getFPS()

Measured FPS (console integer, emulator float).

  • Returns: 1 value(s): number
  • Availability: Console (BIOS) and emulator

C8B.System_getTime

C8B.System_getTime()

Emulator: monotonic ms (console uses c8b.system.getTime).

  • Returns: 1 value(s): integer
  • Availability: Emulator only