Skip to content
psyGamer edited this page Feb 2, 2025 · 3 revisions

The Info HUD is a useful overlay containing various information, which is very useful while TASing. The default hotkey to toggle it is double-pressing Left Control.
You can also view the Info HUD in Studio, either attatched to the bottom of the editor or as a separate popout window.

General Game Information

The most common usage for the Info HUD is displaying common information about the current player state:

  • Pos: World-space position (including subpixels) of the player in pixels
  • Speed: Speed of the player (in pixels/second by default)
  • Vel: Difference in the player position since the last frame. Usually same as Speed, but accounts for other things moving the player (in pixels/second by default).
  • Fly/Chase: Same as Vel, but displyed in magnitude and angle. Only shown while required (in pixels/second by default).
  • Analog: Currently inputted analog direction
  • Retained(<frames>): Retained speed after hitting a wall. The wall needs to be cleared before the timer runs out to maintain the speed.
  • LiftBoost(<frames>): Available boost from moving blocks. Gets added to the speed while performing various actions.
  • Stamina: Available stamina for climbing / climb jumping. Needs to be >= 20 to start climbing and > 0 to perform a climb jump.
  • Wall-R/Wall-L: Shown while being in range of a wall to perform wall jump / wall bounce on it
  • St<state>: Active state of the player's StateMachine
  • Berry(<frames>): Remaining frames until the current berry is collected. Also shows active delay until collection can start.
  • DashCD(<frames)>: Remaining frames for the current dash cooldown. While active, another dash cannot be started
  • Dash(<frames)>: Remaining frames for the current dash. Not shown for the default 15f.
  • Cutscene: Indicates a cutscene is currently player. Can usually be skipped the frame before this is shown.

Mouse Cursor

While holding down the Info HUD key (Left Control by default), a selection cursor is shown. This allows for watching entities by left clicking on them.
Additionally you draw rectangles to measure pixels. This also copies the position of the top left and bottom right corners to clipboard when the mouse button is released, which is useful for defining checkpoints in Featherline.

Custom Info

Defining a Custom Info is very useful for watching arbitrary values of the game. It can be editing from Studio (by right clicking the game info) or to/from the clipboard in the mod settings.
Certain patters of the defined template will be replaced by real values.

Target Queries

Target queries for the Custom Info are defined inside curly braces ({ }). It generally follows the pattern of { TypeName.MemberName }, but also provides additional features.
The following queries provide some example for possible usages:

  • {EntityName.member...}: Find all entities. e.g. {Strawberry.Position}
  • {EntityName[entityId].member...}: 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.
  • {EntityName@Mod.field...}: Specifices a specific target mod for the entity type. Mod can either be the mod ID (from everest.yaml), or the assembly name. Useful to specify the helper. e.g. {CustomSpinner@FrostTempleHelper.Position} and {CustomSpinner@VivHelper.Position}. You can get the assembly name by opening the console and left-clicking on the entity.
  • {ComponentName.member...}: Find all components. e.g. {StateMachine.State}
  • {EntityName:ComponentName.member...}: Find all components on ceratin entities. e.g. {Player:StateMachine.State}
  • {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.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}.

Tip

Target queries can also be used with the get console command, or as values for the Set/Invoke commands.
That means you could write something like Set, Player.StateMachine.State, Player.StNormal instead of Set, Player.StateMachine.State, 0.

Query Tables

Surrounding a certain part of the line with double-bars (|| ||) causes (Target Queries)[#target-queries] inside to be formatted as a table, organising values by entity.

Example:

JumpThruPos: {Level.Bounds.X=} ||{JumpThru.Position=} | {JumpThru.X=} : {Player.X} # {Level.Wind=} ; {JumpThru.Y=}|| {Level.Bounds.Y=}

Lua Code

The contents wrapped in double square 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 the TAS to desync.

Examples:

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

Default Custom Info

The following Custom Info is provided by default as a general reference

Wind: {Level.Wind}
AutoJump: {Player.AutoJump} {Player.AutoJumpTimer.toFrame()}
Theo: {TheoCrystal.ExactPosition}
TheoCantGrab: {TheoCrystal.Hold.cannotHoldTimer.toFrame()}

Watch Entity

Left-clicking any entity with the Mouse Cursor causes that entity to be watched. This will display various variables about the watched entities.
Right-clicking will clear all currently watched entities. Currently watched entities can be exported with the ExportGameInfo command.

Tooling Documentation

Celeste TAS

TASing Reference

General Gameplay Techniques

Mechanics and Engine Functionality

Entity Interactions

Community

Clone this wiki locally