climb
The salvager hangs in the physics simulation off two independently fired mag-clamps, and every number the rest of IRONSPINE reads comes out of the constraint solver rather than out of a script.
climb — the verb
The salvager hangs in the physics simulation off two independently fired mag-clamps, and every number the rest of IRONSPINE reads comes out of the constraint solver rather than out of a script.
The hand
Closing a hand picks the hold under the aim through Game.pickHold — the one
reach rule in the world, so the HUD's highlight and the grab can never
disagree — parks a static anchor body on that hold, and creates a rope joint
from the anchor to the suit. The tether is made at the distance it was fired
at, so it is never violated on the frame it is created: slack is free, taut
resists, and the whole mass of the suit hangs off it.
Physics.jointReaction(anchor).force is what that tether is carrying, in
newtons, as the solver resolved it on the last step. A still hang off one hand
reads 1148 N, which is exactly bodyMass x gravity. That number goes to
Game.state.hands.<side>.load and drives stamina, the HUD, and the strain in
the suit's pose. Nothing estimates it.
The joint carries Game.C.gripBreakForce, so a violent catch is torn off
inside the solver before this module has an opinion, and a tether that is gone
reports no reaction — which is how the break is noticed. A catch faster than
the clamp can arrest (about 6 m/s) is refused outright and costs stamina.
The body
Force and impulse only. The player's own avatar entity is what becomes physical — there is never a second body, so the camera rig and the suit ride the thing the solver is moving.
| Control | What it does |
|---|---|
| mouse / right stick / drag | aim; whatever is under it is what a clamp takes |
| LMB / RMB | close the left / right clamp, release to let go |
| W / S | winch in and pay out along the loaded arm |
| A / D | lean — lateral force shifting the centre of mass between the clamps |
| Space | a committed lunge: both clamps open, an impulse down the aim |
| Shift | brace — cheaper to hold on, half the reach |
The winch is a speed servo, not a shove: it carries the weight first and then
adds whatever holds Game.C.winchSpeed along the tether, capped at
Game.C.winchForce, and the tether ratchets in behind the gain so what the
winch wins is kept. It hauls you to a hold and never past it.
A boot that finds iron pushes with up to Game.C.footAssistForce and the
measured load on the arms falls, because the solver has less to hold. Wind,
which LOOK owns, is force on the same body. The only places the body is placed
rather than pushed are the run start and a respawn onto a piton.
The run
climb and fall alternate, then won or lost. Clipping a piton records
the checkpoint; falling past it puts you back on that piton with the pitch lost
and the run intact. Falling with nothing clipped below you ends the run in the
water. Both clamps on the Crown Beacon's ignition ring for
Game.C.beaconHoldSeconds lights it.
Everything else — camera, cards, atmosphere, the suit's own IK — reads
Game.state and the events this module emits: grip, release, slip,
anchorSet, fall, land, beacon, win, lose.
Files
init.luau— the slice.../controls.inputMap— the control scheme, every control carrying keyboard, gamepad and touch.
Scoped to this part · feeds back into the world's score.