QuakeServer.Extensions.Movement (quake_server v0.1.0)

Copy Markdown View Source

FTE's movement builtins: the engine's player movement (runstandardplayerphysics), area portals (openportal) and the rigid-body physics calls.

runstandardplayerphysics(entity) moves entity with QuakeServer.Pmove by the input_timelength, input_angles, input_movevalues and input_buttons globals, in steps of at most 50 milliseconds. It reads the entity's origin, oldorigin, velocity, mins, maxs, gravitydir, gravity, maxspeed, hasted, flags, movetype, health, teleport_time and pmove_flags. After each step it writes origin, oldorigin, velocity, v_angle, waterlevel, watertype, teleport_time, pmove_flags (1 jump held, 2 on a ladder), flags (FL_ONGROUND

  1. and, on ground, groundentity; links the entity, touching its triggers; and runs the touch of each entity the step ran into, each at most once per call.

The player meets the world and the entities within 256 units whose solid is a box (2), slide box (3), brush (4), ladder (20) or a trigger (1) with a negative skin, other than its own missiles, those dimension_hit and dimension_solid keep apart (255 when the program lacks the fields) and those with no width. A negative skin gives contents to the whole entity: -2, -8 and -18 block the player, the others only fill. The movement settings are the cvars sv_gravity, sv_stopspeed, sv_maxspeed, sv_spectatormaxspeed, sv_accelerate, sv_wateraccelerate, sv_friction, sv_waterfriction, sv_bigcoords, pm_noround, pm_bunnyspeedcap, pm_ktjump, pm_walljump, pm_slidefix, pm_airstep, pm_pground, pm_stepdown, pm_slidyslopes, pm_autobunny and pm_bunnyfriction, and pm_flyfriction (4), pm_watersinkspeed (60), pm_edgefriction (2, testing ledges with the player's box while empty) and pm_stepheight (18), which take the value in brackets while empty. sv_brokenmovetypes and sv_nqplayerphysics choose the movement type as FTE does; entities 1 up to sv_playerslots are players.

Portal states are kept in the host's ext.portals, entity number to state; a map without areas is not divided by them. There is no rigid-body engine: physics_supported answers false and physics_enable, physics_addforce and physics_addtorque change nothing.

Summary

Functions

Run movement builtin builtin (a number or a name).

Functions

call(s, builtin, argc)

@spec call(map(), integer() | String.t(), non_neg_integer()) :: map()

Run movement builtin builtin (a number or a name).