Option 2: hop cycle with parallax, driven by three personalities. Tap to switch between them.
**The bot never moves forward.**
The world scrolls past it instead. That's how Super Mario Bros. and most side-scrollers work.
**Parallax:**
four layers scroll at different speeds (×0.15, ×0.45, ×1, ×1.4). Tick "Show layer speeds" to see them. Your brain reads the speed difference as distance. The front grass layer moves faster than the ground. That puts it between you and the bot, so a flat screen gains a foreground.
**Personality comes from the same 10 numbers.**
Switching tweens between the three sets, so the bot changes mood gradually instead of snapping.
**Smug's float:**
the hop curve is raised to the power 0.55. That flattens the top, so the bot "hangs" in the air. That's cartoon arrogance: it isn't in a hurry to obey gravity.
**Shy's hesitation:**
the double blink during the glance back reads as nervous. One blink reads as neutral, two as anxiety.
**Curious's darting eyes:**
the eyes jump instantly between targets instead of gliding. Real eyes move in these jumps (saccades), so the dart feels alive. Smooth eye glides read as robotic or sleepy.
**Beats wait for a landing.**
A pause mid-air would break physics, so each beat triggers only when the bot touches the ground.
**Layer stack, side view**
```
camera ─┐ │ far hills ×0.15 ░░░░░░░░░░ │ mid trees ×0.45 ♣ ♣ ♣ │ ground/bot ×1.00 ────●────── (bot fixed at x=130) │ front grass ×1.40 ^^ ^ ^^
```
**Hop cycle, one loop**
```
phase: 0 ────── 0.25 ─────────────────────── 1.0 [contact:squash][ air: arc^g, stretch, eyes lag ] g=1 normal · g=0.55 smug float
```
**Personality as data**
```
Personality { per, H, spd, sq, g, ex, ey, es, eb, rot, beat(t) → overrides, every, dur } current = lerp(current, target, dt·4) // smooth mood change
```
**Critical thinking:**
the shy bot moves slowest. Does slowness actually signal shyness, or does hesitation (stop-start rhythm) do the work? Test it: set smug's speed to 55 and see if it still reads as smug.
**Lateral thinking:**
parallax fakes depth with speed differences. UI designers use the same trick in scrolling websites, and astronomers use it to measure distances to stars. What else in your life do you judge by how fast it seems to move against a background?
**First principles:**
a personality here is 10 numbers plus one beat. What is the smallest set of numbers that still separates "curious" from "smug"? Could 3 numbers do it?
- Can two bots with different personalities hop together?
A. Animation foundations