CranberryClock.Ideas / Systems / Design

INDEPENDENT TOOLResponsive motion

Spring

A little bounce. A lot of life.

Three mechanical friends. One identical nudge. Find the feeling between wobbly and wonderfully calm.

MIT LICENSEv0.1.0MODULAR BY DESIGN
JELLYWORKS — Spring showcase identity
JELLYWORKS / TEST BENCH 03ORIGINAL PROCEDURAL TOYS
TAP A FRIEND TO SAY HELLO · DRAG TO LOOK AROUND
01

Mochi YOUR SPRING

A little extra wiggle.

ζ 0.28
02

Pip CRITICAL

Gets there without a bounce.*

ζ 1.00
03

Orbit OVERDAMPED

Slow, soft, and deliberate.

ζ 1.80
THE MOTION, MADE VISIBLE

Same force. Different feeling.

MochiPipOrbitTarget
Recent spring displacement A live comparison of three scalar spring values over the last five seconds. Exact values are also shown below.
POSITION 0.000 / 0.000 / 0.000VELOCITY 0.000 / 0.000 / 0.000±2.0 units · last 5 seconds

BORROW A LITTLE FEELING

Recoil. Follow-through.
The last 10% of alive.

Spring keeps value and velocity together when a target changes. Add it to a camera, a floating label, or a creature’s antenna. Your game owns the frame loop.

Camera recoilUI motionSecondary animation
@cranberry-forge/spring
import { Spring } from '@cranberry-forge/spring';

const recoil = new Spring({
  frequency: 3, dampingRatio: 0.65,
});

// Add velocity when the action happens.
recoil.impulse(8);

// In your own frame loop, dt is seconds.
mesh.position.y = restY + recoil.step(dt);

ZERO DEPENDENCIES · ANALYTIC MOTION · MIT

FROM SHOWCASE TO YOUR PROJECT

Take the good parts with you.

Tune the motion with a real spring simulation, then apply that feeling to cameras, interfaces, or props.

Download the archive, then install locally.

npm install ./cranberry-forge-spring-0.1.0.tgz
Download archive ↓Read the integration guide ↗