Skip to content

EverestAPI/CelesteTAS-EverestInterop

Repository files navigation

CelesteTAS

TAS tools for Celeste / Everest

License: MIT


  • Install Everest if you haven't already.
  • (Recommended) Use the 1-click installer here. (Alternatively) Download the latest auto-build.
  • Make sure the mod is enabled in the in-game mod options.
  • Enable the mod-setting Celeste TAS > More Options > Launch Studio at Boot. Celeste Studio, our input editor, should now automatically launch. (You can find the Studio documentation here)
  • Alternatively, you can start Celeste Studio directly. It'll be installed in the CelesteStudio directory inside your Celeste install.
  • You can find the most up-to-date input files here.

Input File

The input file is a text file with tas as a suffix, e.g. 1A.tas.

Format for the input file is (Frames),(Actions)

e.g. 123,R,J (For 123 frames, hold Right and Jump)

Available Actions

  • R = Right
  • L = Left
  • U = Up
  • D = Down
  • J = Jump / Confirm
  • K = Jump Bind 2
  • X = Dash / Talk / Cancel
  • C = Dash Bind 2 / Cancel Bind 2
  • Z = Crouch Dash
  • V = Crouch Dash Bind 2
  • G = Grab
  • H = Grab Bind 2
  • S = Pause
  • Q = Quick Restart
  • F = Feather Aim
    • Format: F, angle, optional upper limit of single axis (default value is 1, range is 0.26 to 1, works in all analog modes)
  • O = Confirm Bind 2
  • N = Journal / Talk Bind 2
  • A = Dash Only Directional Modifier (generally used to manipulate camera with binocular control storage. eg: 15,R,X,ALU)
  • M = Move Only Directional Modifier (eg: 15,X,AL,MR)
  • P = Custom Button Press Modifier (used to press inputs added by mods after binding them using the Set command, e.g. 15,R,X,PA after binding A to a custom input)

Controls

While in game or in Studio:

  • Start/Stop Playback: RightControl
  • Restart Playback: Equals
  • Fast Forward / Frame Advance Continuously: RightShift or Controller Right Analog Stick
  • Fast Forward to Next Comment: RightAlt + RightShift
  • Slow Forward: \
  • Pause / Frame Advance: [
  • Pause / Resume: ]
  • Toggle Hitboxes: LeftControl + B
  • Toggle Simplified Graphics: LeftControl + N
  • Toggle Center Camera: LeftControl + M
  • Save State: RightAlt + Minus
  • Clear State: RightAlt + Back
  • Info HUD:
    • While holding the Info HUD hotkey, left-click to move the HUD around
    • Double press the Info HUD hotkey to toggle it
    • While Holding the Info HUD hotkey, left-click on entity to watch the entity
  • These can be rebound in Mod Options
    • You will have to rebind some of these if you are on a non-US keyboard layout.
    • Binding multiple keys to a control will cause those keys to act as a key-combo.

Special Input

Breakpoints

  • You can create a breakpoint in the input file by typing *** by itself on a single line
  • The TAS, when played back from the start will fast-forward until it reaches that line and will then pause the TAS
  • ***S will make a savestate, which can reduce TAS playback time.
  • You can specify the speed with ***X, where X is the speedup factor. e.g. ***10 will go at 10x speed, ***0.5 will go at 0.5x speed.

Commands

Savestate

  • Savestates require the SpeedrunTool mod.
  • Reliable in vanilla maps.
  • Savestates may not work properly in custom maps that use code mods. Placing a savestate right before leaving a room can help with this.
  • Currently, cannot savestate when paused.
  • Crashes due to running out of memory are possible, although uncommon.

Misc

Move Camera

When center camera is enabled, free camera hotkey + holding mouse right button or free camera hotkey + arrow move canvas, when zooming out holding mouse right button or info hud hotkey + arrow move camera.

Zoom Camera

When center camera is enabled, scroll wheel or free camera hotkey + home/end zoom camera.

Reset Camera

When center camera is enabled, double press mouse right button or double press free camera hotkey reset camera.

Rectangle Selection Info

Hold the Info HUD hotkey and the mouse right down to select a rectangle. Copies the position of the top left and bottom right corners when the mouse button is released. This helps to define checkpoints for Featherline.

Watch Entity

Enable Info HUD, holding info hud hotkey then left-click to add the entity to be watched, while holding watch trigger hotkey to watch trigger, right-click to clear the watching entities. Supports exporting watching entities info via the StartExportGameInfo command.

Custom Info

The contents of the curly brackets will be converted to actual data, here are some examples:

  • {EntityName.field...} Find all entities. e.g. {Strawberry.Position}
  • {EntityName[entityId].field...} Find the entity with the specified entityId. e.g. {Strawberry[1:12].Position} means 1A gold berry. You can get the entityId by opening the console and left-clicking on the entity.
  • {[email protected]...} Add the assembly name, if the simple name exists in multiple helpers and you want to specify the helper. e.g. {[email protected]} and {[email protected]}. You can get the assembly name by opening the console and left-clicking on the entity.
  • {Level.field...} Get the value of level field. e.g. Wind: {Level.Wind}.
  • {Session.field...} Get the value of session field. e.g. Room: {Session.Level}.
  • {ClassName.staticField.field...} Non-entity and non-level types that can get the value of a static field.
  • {Player.Position.Length()} Invoke method is supported, but must be parameterless and return a non-void type. Be careful not to invoke method that change the game state, as this will cause tas desync.
  • {Player.AutoJumpTimer.toFrame()} add toFrame() to the end can change the float value to frames.
  • {Player.Speed.toPixelPerFrame()} add toPixelPerFrame() to the end can change the float/vector2 speed unit to pixel/frame.
  • {Player.Position:} add : or = to the end will add label before the value. e.g. {Player.Position:} is the same as Player.Position: {Player.Position}.
  • AutoJump: {Player.AutoJump} ({Player.AutoJumpTimer.toFrame()})
  • Theo: {TheoCrystal.Position}
  • TheoCantGrab: {TheoCrystal.Hold.cannotHoldTimer.toFrame()}
  • KeyCycle: {Key.sprite.CurrentAnimationFrame}
  • CustomSpinner: {CustomSpinner.Position} or CustomSpinner: {[email protected]}

The contents wrapped in double center brackets will be executed as lua code, check here for how to write lua. Be careful not to change the game state, as this will cause tas desync. Here are some examples:

  • [[return player.Position]]
  • [[return player.Position, player.Speed]] Return multiple results.

Other Useful Tools

  • TAS Recorder: High quality fixed framerate TAS encoder, cross-platform (use this instead of .kkapture or ldcapture)
  • GhostMod: Compare new TASes with old ones.
  • Radeline: Chaos monkey that optimizes a Celeste TAS by randomly (or sequentially) changing inputs.
  • Lobby Router: Helps find the fastest route for a collab lobby
  • Featherline: Algorithm for analog feather movement in Celeste. (built-in into Studio)
  • .kkapture: High quality fixed framerate TAS encoder, Windows only.
  • ldcapture: High quality fixed framerate TAS encoder, Linux only.