Appearance
J-Frames
J-Frames (jumping frames) are the frames where your character is in the Jumping State.
J-Frames are responsible for many of the glitches featured on this site, such as the Lag High Jump and all its variations.
What's so special about J-Frames?
During each J-Frame, a number of things happen to your character.
- Your torso collision is disabled. (gets re-enabled after leaving this state)
- Your inputs (WASD, Jumping) are ignored. In other words, you lose control of your character for a brief moment. (excluding shiftlock)
- Angular velocity is preserved. (if you were rotating prior, you would continue rotating in the same direction)
- Linear velocity is preserved. (if you were moving, you would continue moving in the same direction)
- Upright stabilisation is disabled. (you're character doesn't get "pushed" into a standing position)
Another thing to keep note of is that to enter the jumping state in the first place, you must've gained vertical velocity from your jump, and this velocity is actually kept going into those J-Frames.
The thing that makes J-Frames so special, is the disabling of upright stabilisation. In simple terms, this means that your character can "tilt" in any direction, to any amount, as long as it's within the jumping frames. This concept is known as Root Tilt. Simply explained, the more a character is tilted, the more forces must be applied to reach an upright position, so by abusing J-Frames, we can greatly amplify the forces applied onto our player after the player exits the jumping frame.
So how do we extend the jumping state?
We've observed that the longer we stay in the jumping state, the more we are able to tilt without upright stabilisation being active, and thus the bigger the "push" we get when we exit the jumping state. This means that, in most cases, the longer we're in the jumping state, the bigger force we get.
But what dictates the entry and exit point of the jumping state?
Entry is pretty simple. When a jump is triggered, via player input, or some other way, the player's HumanoidState is set to Jumping.
Exit is a bit more complicated. Without going into the specifics, when the player exits the jumping state, is dictated by a set of grounded raycasts (imagine lines from the character going downards into the ground. if they come into contact, that means the player is on the floor, or grounded). The length of these grounded raycasts, isn't actually constant, and depends on multiple things, including RigType (R6/R15), Vertical Velocity, Body parts, e.t.c. So when the player is no longer detected to be grounded, the player is put into the FreeFall state (most of the time), and thus upright stabilisation activates, and the forces are exerted onto the character.
So to extend the jumping state, all we need to do is stay closer to ground for longer.
Applications of J-Frame abuse
One of the most widespread glitches abusing J-Frames, is the Lag High Jump. While how it works will be explained in its own page, the essence of it is that when we jump into the wall, we store up velocity moving into the wall. Since in the jumping state your torso collision is disabled, the head acts as a pivot, allowing the character to tilt into the wall. The J-Frames allows the tilt to increase, without being held back by upright stabilisation, and the lag helps "extend" this jumping state (this is another way to extend the jumping state), so when we finally release the lag, upright stabilisation kicks in and the root snaps back to the upright position, in a process known as Root Snap, giving the player an upwards boost.
Pretty much every (i mean it) single glitch that gives you a vertical boost, with a few exceptions, relies on root snap, and thus by proxy relies on the weird quirks of J-Frames, including flicking against the wall to gain height, all types of flings (pressure fling, tail fling, wallhop fling, e.t.c), gaining a boost off of a head hitter (niche glitch), edge bounces, and all the variations of the LHJ (such as HHJ, LHHJ, MHJ).
While there are many ways to setup your character before entering the state, and many ways to amplify the force given by upright stabilisation during and after the J-Frames, these are outside the scope of this article, and may be explained in more depth for the individual glitches which rely upon this.
For those curious, heres the formula for the length of the grounded raycasts (in R6):
So for grounded:
And for non-grounded, with
The reason it is longer while grounded, is to prevent oscillations in humanoidstates, thus if you were already grounded it is more lenient.
Fun Facts
- Having an offset COM can let us control the way our character tilts. This can both extend our j-frames (tilt so that the grounded raycasts touch the ground for longer) and give us more height (since upright stabilisation is based heavily on the COM)
- The entire reason LHJ works to begin with, is due to our offset COM (about 0.2778 studs downwards by default, due to the head being lighter than the legs). This means that if our COM was at (0, 0, 0), not only would LHJ be "patched", but so would other crucial mechanics such as being against a wall to gain height. This has been proven by scripts doing exactly that.