Sit down (seen from the front)

Sitting down drawn facing the camera: the thighs swing toward you as the knees bend and the feet stay exactly where they stood, for a game that shows the character from the front rather than in profile.

A cartoon person and a dog facing the camera, lowering down onto bent legs.

Use it in a cartoonOpen it in the block editorThe pack file (JSON)

What it is for

Sit down (seen from the front) is Sit down drawn facing the camera instead of in profile, for a game that shows its character from the front. The thighs swing toward the viewer as the knees bend, rather than swinging sideways the way a profile view shows them, and the feet stay exactly where they stood.

The principle it shows: arcs

The body's own height is still worked out every frame from the same bending angles rather than drawn separately, the same arc the side view uses to keep a foot planted. Seen from the front, though, a leg has no knee-fold to lift it the way the side view does, a known limit of the front view: a ground sit ends up drawn more like sitting on a low seat than folding the knee up past the hips. That is also why, in this view, sitting on the ground, a chair or a ledge all draw the same way: without a fold to tell them apart, there is nothing left to vary.

The program, line by line

settings: h = 540, leg = 0.24, on = 0
when it starts
  show the front view
  at the same time:
    — 1:
      glide left leg 30, right leg 30, left shin 30, right shin 30, left foot 0, right foot 0, left arm 24, right arm 24 over 0.3 s (in)
    — 2:
      set dy 0
      for 0.3 s:
        dy follows (h*leg/2*(2 - cos(((0 + 30*pow(min(local/0.3, 1), 2)))*pi/180) - cos(((0 + 30*pow(min(local/0.3, 1), 2)))*pi/180) + 0.55*sin(((0 + 30*pow(min(local/0.3, 1), 2)))*pi/180)))
  set dy (h*leg/2*(2 - cos((30)*pi/180) - cos((30)*pi/180) + 0.55*sin((30)*pi/180)))
  if (on == 0):
    at the same time:
      — 1:
        glide left leg 85, right leg 85, left shin 0, right shin 0, left foot 0, right foot 0, left arm 16, right arm 16, left forearm 20, right forearm 20 over 0.55 s (smooth)
      — 2:
        set dy 0
        for 0.55 s:
          dy follows (h*leg/2*(2 - cos(((30 + 55*smoothstep(min(local/0.55, 1))))*pi/180) - cos(((30 + -30*smoothstep(min(local/0.55, 1))))*pi/180) + 0.55*sin(((30 + -30*smoothstep(min(local/0.55, 1))))*pi/180)))
    set dy (h*leg/2*(2 - cos((85)*pi/180) - cos((0)*pi/180) + 0.55*sin((0)*pi/180)))
  if (on == 1):
    at the same time:
      — 1:
        glide left leg 85, right leg 85, left shin 0, right shin 0, left foot 0, right foot 0, left arm 16, right arm 16, left forearm 20, right forearm 20 over 0.55 s (smooth)
      — 2:
        set dy 0
        for 0.55 s:
          dy follows (h*leg/2*(2 - cos(((30 + 55*smoothstep(min(local/0.55, 1))))*pi/180) - cos(((30 + -30*smoothstep(min(local/0.55, 1))))*pi/180) + 0.55*sin(((30 + -30*smoothstep(min(local/0.55, 1))))*pi/180)))
    set dy (h*leg/2*(2 - cos((85)*pi/180) - cos((0)*pi/180) + 0.55*sin((0)*pi/180)))
  if (on == 2):
    at the same time:
      — 1:
        glide left leg 85, right leg 85, left shin 0, right shin 0, left foot 0, right foot 0, left arm 16, right arm 16, left forearm 20, right forearm 20 over 0.55 s (smooth)
      — 2:
        set dy 0
        for 0.55 s:
          dy follows (h*leg/2*(2 - cos(((30 + 55*smoothstep(min(local/0.55, 1))))*pi/180) - cos(((30 + -30*smoothstep(min(local/0.55, 1))))*pi/180) + 0.55*sin(((30 + -30*smoothstep(min(local/0.55, 1))))*pi/180)))
    set dy (h*leg/2*(2 - cos((85)*pi/180) - cos((0)*pi/180) + 0.55*sin((0)*pi/180)))

Written out in full, exactly as the engine prints them:

h*leg/2*(2 - cos(((0 + 30*pow(min(local/0.3, 1), 2)))*pi/180) - cos(((0 + 30*pow(min(local/0.3, 1), 2)))*pi/180) + 0.55*sin(((0 + 30*pow(min(local/0.3, 1), 2)))*pi/180))

h*leg/2*(2 - cos((30)*pi/180) - cos((30)*pi/180) + 0.55*sin((30)*pi/180))

h*leg/2*(2 - cos(((30 + 55*smoothstep(min(local/0.55, 1))))*pi/180) - cos(((30 + -30*smoothstep(min(local/0.55, 1))))*pi/180) + 0.55*sin(((30 + -30*smoothstep(min(local/0.55, 1))))*pi/180))

h*leg/2*(2 - cos((85)*pi/180) - cos((0)*pi/180) + 0.55*sin((0)*pi/180))

Try this

  1. Take 0.6 seconds for the first lean-in instead of 0.3. The sit begins with a noticeably slower settle before the legs fold.

    In the program: ramp · over 0.3 → 0.6

  2. Bring the left arm 40 degrees forward instead of 16 as the legs fold under. Seen from the front, one arm now reaches out noticeably further than the other for balance.

    In the program: ramp · to.part:arm:-1 16 → 40

How it differs from Sit down and Sit (seen from the front)

Sit down is the same motion drawn in profile, where the on setting genuinely changes how the hips and knees bend for the ground, a chair or a ledge. Sit (seen from the front) is the held pose this move settles into once it finishes.

Works on

Worked out by the build: it plays the move in the engine on each body and checks what moves on screen. Nobody types this table.
BodyMoves?What moves
2 legs (a person)yeswhole body, arms, legs
4 legs (a dog)yeswhole body, turns, front legs, back legs
no legs (the monster with no legs)yeswhole body, arms

c4c:beh:sit_down_front · version 1.0.0 · c4c-free · by Jabbertoon