Log inGet started
World

Ironspine

Branchmain
Branchesmain
Commit9a7cce6233

README.md

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.

ControlWhat it does
mouse / right stick / dragaim; whatever is under it is what a clamp takes
LMB / RMBclose the left / right clamp, release to let go
W / Swinch in and pay out along the loaded arm
A / Dlean — lateral force shifting the centre of mass between the clamps
Spacea committed lunge: both clamps open, an impulse down the aim
Shiftbrace — 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.