Required state contract
A StartPos is an exact gameplay-state snapshot. Loading it must restore every captured entity, component, reference, position, speed, timer, state machine, animation, coroutine, random-number state, and registered helper state to the captured frame. Akron stores this state in a local v11 snapshot file so it survives closing and restarting Celeste. Set and Load hold the room state until Celeste renders the restored frame. Set holds the requested gameplay frame until outer update hooks have finished. If the room, player, or save profile changes before capture starts, Akron cancels the request. The console command reports the active map’s status after completion or cancellation; it does not switch back to the abandoned map’s slot catalog. An ordinary Load keeps the captured player animation and frame. Explicit spawn options can change that pose; Load does not otherwise recalculate it. Captured coroutine state includes removed components still held by a running routine, such as a CrushBlock’s sound after its delayed removal. Those components restore as detached objects, without adding them back to the room. Reconstruction follows captured object ownership and identity, including typed managed grids, records, pooled effects, helper-owned UI, backdrop particles, and removed objects still referenced by their owners. Running coroutines keep references to their owning room. A helper does not need a map-specific exception for these shapes. Process-owned caches stay attached to the running engine. Mutable blend settings are copied as managed values, without copying GPU handles. Room-owned dust styles are saved with the room so their controller references remain consistent across repeated loads. Callbacks created by a component’s constructor can also restore captured sibling components. Named component fields preserve identity when an entity swaps which component is attached; removed callbacks must still belong to their entity, not borrow another entity’s state. The v11 snapshot adds required room-registry state. Set existing v10 StartPos slots again, then export any StartPos packs again. Positions, spawn settings, and keybinds are unchanged; the older saved room state cannot be loaded exactly. A successful first Load prepares the other slots in the active chapter within the machine’s memory budget. Later Loads reuse those room states. Restoring the saved render-buffer pixels must not add a GPU readback to each Load; pixel comparisons belong in the QA capture checks. When Wait for input after load is enabled, Akron keeps gameplay paused after the restored frame until a fresh gameplay input arrives. Controls held before the Load do not release the pause. Backdrops and respawn wipes keep moving while Akron waits. Akron does not replace the whole save file. A local StartPos captures the active map’s collected berry IDs and berry count, then restores that active-map progress to the Set state. Berry progress for other maps stays unchanged. Imported StartPos packs replace the author’s captured berry field with the recipient’s current active-map berry progress before the snapshot is installed. Akron keeps the greater current or captured value for session time, session deaths, room deaths, save-file time and deaths, and area time and deaths. These statistics do not rewind. Room simulation clocks restore to the Set frame because room objects and visuals use them. Akron must reject capture or load when it cannot represent required gameplay state exactly. This includes unregistered native handles, such as a running Lua interpreter, that a managed snapshot cannot recreate. Akron reports a refusal instead of substituting a player-only or session-only room reload. Manual capture and load are blocked while paused, dead, transitioning, or in a cutscene. There is one named exception to that contract. Akron does not capture the playback tutorial ghost, Celeste’splaybackTutorial entity, or the trail it
draws. A room that has one keeps the ghost the fresh room load built, so after a
Load the ghost is about a second before the start of its demonstration instead of
where it was at the Set frame, and its footstep and dash sounds restart with it.
The ghost has a collider, but nothing in Celeste checks against it, nothing
tracks it, and no code reads it, so nothing else in the room is affected. This
exception exists because Akron cannot prove that the saved ghost and the fresh
room’s ghost are the same object, and accepting that edge unproven would risk a
wrong restore that reports success. It covers this one entity type, and only the
ghosts a map places in a room. Playback figures a cutscene owns, such as
Farewell’s wave-dash tutorial, are captured and restored exactly as before. Use
Disable Playback if you would rather the ghost were not there at all.
Akron does not load old selected-field room snapshots. A v11 snapshot contains
the complete managed room graph, registered helper state, audio state, room
registry state, and render-buffer pixels required by the Set frame. Akron
refuses the load if the file is missing, damaged, uses another snapshot format,
or belongs to another map or save file. Snapshot versions change when required
captured state or reconstruction assumptions change. Older slots must be set
again; Akron does not guess the missing state. Imported StartPos packs bind
their snapshots to the active save-file slot without importing the author’s
progress or module save data. The
same map and object-providing mods must remain installed because an exact
snapshot cannot recreate types that no longer exist. Akron does not require
CelesteTAS, Speedrun Tool, or another savestate mod.
Option menus
Rows with a triangle expose the controls listed below.
Right-click a bindable button or checkbox in an options popup to open its
Bind input and Clear binding actions. On the main StartPos row,
right-click or Shift-click Set, Load, or Clear to start binding that
action directly.