Skip to main content

Movement API

Namespace: hexis.movement

Direct WASD control for fine-grained movement. Useful for scripts that need to strafe while mining, precise positioning, or custom movement patterns.

Control Acquisition

Scripts MUST call take_control() before using movement, and release_control() when done to prevent stuck inputs.


Control Acquisition

hexis.movement.take_control(owner_name)

Take exclusive control of movement. Required before using other movement functions.

hexis.movement.take_control("my_script")
-- ... use movement ...
hexis.movement.release_control()

hexis.movement.release_control()

Release movement control. Always call this when done!

hexis.movement.is_controlled()

Returns true if movement is currently being controlled.


Digital Movement

hexis.movement.set_forward(pressed)

hexis.movement.set_backward(pressed)

hexis.movement.set_strafe_left(pressed)

hexis.movement.set_strafe_right(pressed)

Set individual movement key states.

hexis.movement.set_forward(true)   -- Hold W
hexis.movement.set_strafe_left(true) -- Hold A

Analog Strafe

hexis.movement.set_strafe_intensity(intensity)

Set analog strafe intensity. Uses human-like PWM timing internally for natural movement.

ParameterTypeRangeDescription
intensitynumber-1.0 to 1.0Negative = left, Positive = right
hexis.movement.set_strafe_intensity(0.5)   -- Gentle strafe right
hexis.movement.set_strafe_intensity(-0.8) -- Strong strafe left

Combined State

hexis.movement.set_state(state)

Set multiple movement states at once.

hexis.movement.set_state({
forward = true,
strafe = 0.5, -- Analog strafe (overrides left/right)
sprint = true,
jump = false
})

Actions

hexis.movement.jump()

Trigger a jump. Automatically held for multiple ticks for reliability.

hexis.movement.stop()

Stop all movement immediately.

hexis.movement.tick()

Apply movement for this frame. Call this every tick in your loop!

while hexis.running() do
hexis.movement.set_forward(true)
hexis.movement.tick() -- Apply movement
hexis.sleep(50)
end

State Queries

hexis.movement.get_state()

Returns current movement state as a table.

local state = hexis.movement.get_state()
-- state = {forward=true, backward=false, left=false, right=false,
-- jump=false, sprint=true, sneak=false}

Example: Strafe While Mining

hexis.movement.take_control("fig_mode")

while hexis.running() and mining_tree do
-- Strafe toward next tree while mining current one
local strafe = hexis.spatial.get_safe_strafe_direction(next_tree)
if strafe and strafe.is_safe then
hexis.movement.set_strafe_intensity(strafe.intensity)
end

hexis.mining.aim_tick()
hexis.movement.tick()
hexis.sleep(50)
end

hexis.movement.release_control()