Skip to content
Molly edited this page Oct 17, 2024 · 2 revisions

Several maneuvers in Madeline's moveset allow her to maintain a state and/or a certain amount of speed for some duration, controlled by a timer, and these maneuvers also have other effects if certain events occur before the timer expires. There are many unrelated events that change Madeline's state or speed without forcibly setting some or all of her timers to 0, which expands the set of situations in which those other timer-related effects can be triggered. Causing this sequence of events is referred to as "timer abuse" with respect to the timer whose effects are still active after the speed- or state-changing event.

Some timers' abuse is either well-defined enough or niche enough that it's classified as a specific tech or category of tech. Examples of this are climbhop cancels, retention tech, and some applications of jelly bumps, which abuse Madeline's forceMoveXTimer, wallSpeedRetentionTimer, and gliderBoostTimer respectively.

Other timers' abuse is so loosely defined or widespread that general terms related to "timer abuse" are used to describe it. This page aims to describe those forms of timer abuse and specific applications of them.

Jump Timer

Madeline's jump height depends on how long the player holds a jump button, up to a maximum. The implementation of this functionality is that starting a jump sets Madeline's varJumpTimer and varJumpSpeed, and while the jump timer is positive, holding jump sets Madeline's vertical speed to varJumpSpeed.

Madeline's AutoJump and AutoJumpTimer fields are used to force her to act as if jump is held, regardless of player input. When AutoJumpTimer decrements, if it reaches 0, AutoJump is set to false. But if AutoJump is set to true while AutoJumpTimer is already 0, AutoJump will never automatically be set to false, so it can last indefinitely (denoted as ♾️ in the table below).

varJumpTimer is set to 0 by:

  • releasing jump while AutoJump is false in StNormal or StDummy
  • colliding with a ceiling while varJumpTimer is less than 0.15 (9 frames)
  • entering a downwards screen transition

Jumps can be started by:

varJumpSpeed varJumpTimer AutoJump Source
-105 + LiftBoost.Y 0.2 (12f) ground jump, walljump, climbjump, super
(-105 + LiftBoost.Y) / 2 0.2 (12f) hyper
-160 + LiftBoost.Y 0.25 (15f) wallbounce
-140 0.2 (12f) 0.1 (6f) Player.Bounce (bouncing on snowballs, iceballs, pufferfish, etc.)
-105 0.15 (9f) ♾️ Player.Rebound (dash-colliding with Kevins, power boxes, etc.)
-105 0.2 (12f) ♾️ upwards screen transition while state is not StRedDash, StStarFly, or StReflectionFall
-140 0.2 (12f) ♾️ side spring
-185 0.2 (12f) ♾️ upwards spring
-100 0.2 (12f) ♾️ bird fling
-100 or Speed.Y 0.2 (12f) ♾️ StStarFly ending while input direction is not downwards
-60 0.15 (9f) ♾️ hiccup

Jump Timer Abuse

The term jump timer abuse, often abbreviated as JTA, refers to starting a jump, temporarily altering Madeline's trajectory, then resuming the trajectory from the jump before varJumpTimer ends. It's often used to gain upwards speed in a situation where that wouldn't otherwise be possible or optimal.

Some JTA-related tech has specific terms applied to it, but many applications of JTA are so open-ended that general terms are applied to many situations in which JTA is used. For example, "cutscene JTA" may refer to jumping, dashing, then skipping a cutscene to set Madeline's state to StNormal and resume using the jump timer, or it may refer to jumping, then skipping a cutscene to get upwards speed at a cutscene warp destination without starting a second jump, or something else entirely.

Dashbounce

Refers to wallbouncing, then dashing again soon enough that the jump timer from the wallbounce will outlast the StDash coroutine duration, resulting in Madeline's vertical speed being set to -160 again after the second dash. This is also sometimes referred to as "shaboingboing" in reference to someone's particularly popular reaction to themself accidentally performing it.

Medboost

Refers to wallbouncing, then entering a Badeline orb soon enough that the jump timer from the wallbounce will outlast the duration over which the orb coroutine moves Madeline. To keep the jump timer active, jump must be held while in the orb since the coroutine puts Madeline in StDummy.

Coyote Time

Ground jumps, supers, and hypers can only be started if Madeline is currently touching the ground or has recently touched the ground. Both of these possibilities are accounted for by Madeline's jumpGraceTimer, which is set to 0.1 seconds (effectively 5 frames) by:

  • touching the ground
  • exiting a dream block, unless DashDir is strictly vertical
  • being launched by a core block

Additionally, "normal" hiccups check if jumpGraceTimer is positive and increase it to 0.6 seconds (35 frames) if so. Normal hiccups occur when Madeline's hiccupTimer reaches 0 while she has more than -60 vertical speed (slower upwards or any downwards) and is in StNormal, StDash, StSwim, StHitSquash, StPickup, StTempleFall, or StIntroMoonJump.

jumpGraceTimer is set to 0 by:

  • ground jumping, climbjumping, and walljumping
  • hypers, supers, and wallbounces
  • entering StStarFly
  • Player.Bounce (bouncing on Oshiro, snowballs, seekers, iceballs, pufferfish, or deadly pits in assist mode)
  • screen transitions
  • hitting a spring
  • exiting a dream block when DashDir is strictly vertical

In addition to having positive jumpGraceTimer, starting a super or hyper from StRedDash requires DashDir to be strictly horizontal, and from StDash requires DashDir to have a vertical magnitude of less than 0.1.

Coyote Tech

Bubble Hyper/Super

Refers to using a booster while touching ground or in coyote time, so that a hyper or super can be performed from the booster.

Getting into a booster while in coyote time is usually accomplished by leaving ground using a dash. Dashing in any direction does not remove coyote time, so dashes are a commonly available way to move upwards or downwards into a booster not quite at ground level. Dashes also have their usual benefits of preserving high speed or gaining speed from a standstill, at the cost of one frame at zero speed.

Red boosters do not allow demodashing, so performing a hyper from a red booster requires Madeline to manually crouch and dash on the same frame. Crouching requires Madeline to be currently touching ground, not just in coyote time. Green boosters have no such limitation.

Core Hyper/Super

Refers to getting coyote time from a core block launching Madeline, then dashing to perform a hyper or super using that coyote time. The dash must be started after coyote time is given, as starting it earlier would cause the core block to disintegrate early and not give coyote time for that launch.

Double Jump

Refers to touching ground, then getting upwards speed in a way that does not remove coyote time, then using that coyote time to start a ground jump from above the ground.

Below are some common ways to get upwards speed after touching ground:

  • performing a holdable 0f bunnyhop
  • jumping, then performing a grounded ultra, then picking up a holdable. This ends StDash early, resulting in jump timer abuse which gives upwards speed
  • jumping, then colliding with a ceiling, then touching ground, then getting out from under the ceiling before the jump timer falls below 0.15

Dream Double Jump

There are two separate mechanisms that allow Madeline to dream jump. Madeline can use both of them consecutively to dream jump twice after exiting a single dream block.

  1. When DreamDashUpdate detects that it has moved Madeline outside of the dream block, it also checks whether a jump button is pressed, and makes Madeline jump if so.
  2. DreamDashUpdate then sets Madeline's state to StNormal or StClimb. The state change causes DreamDashEnd to be called, and DreamDashEnd gives Madeline coyote time, allowing her to jump.

Both mechanisms only allow Madeline to jump if her DashDir is not strictly vertical.

Dream Hyper/Super

Refers to getting coyote time from exiting a dream block, then dashing and performing a hyper or super using that coyote time. Exiting a dream block only gives Madeline coyote time if her DashDir is not strictly vertical.

Dash Attack Timer

Many interactions can only be triggered while Madeline is DashAttacking, which is true if either she is in StDash or her dashAttackTimer is positive. StDash lasts for 11 frames and sets the state to normal on the 12th frame, whereas entering StDash or StRedDash sets the dashAttackTimer to 0.3 (18 frames). Each of those durations is often considered to be 3 frames longer because entering StDash causes 3 freeze frames, during which timers don't decrement.

The short duration for which dashAttackTimer outlasts the dash state is enough for the timer to function as a leniency mechanic, but enables few new situations in which triggering interactions that require DashAttacking wasn't already possible. DashAttacking can be preserved into many more situations by changing Madeline's state (but not her dashAttackTimer) soon after StDash or StRedDash begins, which often allows significant changes to her trajectory as well.

The dashAttackTimer is set to 0 by:

  • ground jumping, climbjumping, and walljumping
  • hypers, supers, and wallbounces
  • colliding with a solid
  • entering a dream block
  • Player.Bounce (bouncing on Oshiro, snowballs, seekers, iceballs, pufferfish, or deadly pits in assist mode)

Dash Collision

Cancelling StDash or StRedDash without resetting the dashAttackTimer often allows Madeline to enter dream blocks or dash-collide with solids in situations that aren't otherwise possible or optimal with the trajectory from a dash in a given direction. Dash-colliding occurs when the movement from Madeline's speed causes her to collide with a solid or jumpthrough with an OnDashCollide method while she is DashAttacking. Dash-colliding also requires the collision direction and dash direction (DashDir) to have the same component on the axis of collision.

Entering dream blocks uses its own check which is independent of the axis of collision -- it only checks if either the X-component or the Y-component of the dash is the same as that of the collision direction. As a result, in addition to the dash directions allowed by dash-colliding, Madeline can also enter a dream block with a directionless dash or a strictly horizontal or vertical dash that is opposite the collision direction.

Expand for a complete table of what given collision directions result in with given dash directions. Colliding in a certain direction while having a certain dash direction may result in:
✅ a dream block entry or a dash-collision
✨ only a dream block entry
❌ neither

Collision \ Dash ⬆️ ↗️ ➡️ ↘️ ⬇️ ↙️ ⬅️ ↖️
⬆️
➡️
⬇️
⬅️

Note

Only speed-based movement can cause dash-collisions because the solid's OnDashCollide method is only called by Madeline's OnCollide* methods, and only the speed-based Move* calls in Player.Update pass her corresponding onCollide* delegates. As such, movement from any other Move* calls (such as from wind, moving solids, and states like StAttract) cannot cause dash-collision, even if it causes Madeline to collide while DashAttacking, because it does not result in her OnCollide* methods (and so solids' OnDashCollide methods) being called.

Dash Attack Tech

Kermit Dash

Refers to entering an upwards screen transition while DashAttacking, then triggering some interaction in the new room before the dashAttackTimer runs out. Transition wallbounces are technically an application of this, but typically aren't described as such -- the term "kermit dash" is usually reserved for more niche uses such as activating a Kevin using the dashAttackTimer from the room below.

Spiked Wallbounce

Refers to performing a wallbounce from a wall with spikes on it. If Madeline is not moved into range after a frame's death check (by e.g. wind or a climbhop cancel), and the spikes' hitbox isn't lagging behind a frame due to the solid moving, performing a spiked wallbounce requires Madeline to be inside the spikes' hitbox in order to be in range of the wall.

The most common way to accomplish this is to dash upwards such that StDash ends just below the spikes, then hold away from the wall so that Madeline has speed away from the wall, preventing the spikes from killing her while she's inside their hitbox. This method sees widespread usage because it's possible to perform when a dash naturally ends, but it can also be used when StDash is ended early.