Recording
Recording runs on the server.
local Flashback = require(game.ReplicatedStorage.Flashback)
local rec = Flashback.Recorder.new({ tickRate = 15, keyframeEvery = 150 })
rec:watchProperties("BasePart", { "Color", "Transparency", "Size", "Material" })
rec:watchProperties("Humanoid", { "Health" })
rec:start()
-- Player characters are tracked automatically. For anything else:
projectile:AddTag(Flashback.TAG)
projectile:SetAttribute(Flashback.DESCRIPTOR_ATTRIBUTE, "model:Rocket")
-- or rec:track(projectile)
rec:event("Kill", { killer = 1, victim = 2 })
local blob = rec:stop()
Flashback.Store.save(`match_{os.time()}`, blob)
Options
| option | default | meaning |
|---|---|---|
tickRate | 15 | snapshots per second |
keyframeEvery | 300 | ticks between full transforms |
trackCharacters | true | tag player characters automatically |
Extending
watchProperties(className, props)records bool, number, string, Color3, Vector3 and Enum properties on matching entities.event(name, payload)queues a JSON event for the next tick.registerChannel(name, writer)callswriter(w, tick)every tick with a binary writer for anything the generic system does not cover.custom(channel, buffer)queues a one-off binary payload.- Animations on tracked models are captured from
Animator.AnimationPlayed.
Descriptors
The descriptor attribute tells playback what proxy to build:
| descriptor | proxy |
|---|---|
char:<userId> | Players:CreateHumanoidModelFromUserId |
model:<name> | clone of <name> under opts.prototypes, else rebuilt from the recorded geometry snapshot |
part:<Shape> | rebuilt from the snapshot (or a bare Part), shape overridden when given |
| anything else | magenta placeholder part so missing prototypes show up |