Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
movelib.qh File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define movelib_move_simple(e, newdir, velo, blendrate)
#define movelib_move_simple_gravity(e, newdir, velo, blendrate)

Functions

void movelib_brake_simple (entity this, float force)
float movelib_dragflt (float fspeed, float drag, float exp_)
 Simulate drag this.velocity *= movelib_dragflt(somespeed,0.01,0.7);.
vector movelib_dragvec (entity this, float drag, float exp_)
 Simulate drag this.velocity = movelib_dragvec(this.velocity,0.02,0.5);.
void movelib_groundalign4point (entity this, float spring_length, float spring_up, float blendrate, float _max)
 Pitches and rolls the entity to match the gound.
vector movelib_inertmove (entity this, vector new_vel, float new_bias)
vector movelib_inertmove_byspeed (entity this, vector vel_new, float vel_max, float newmin, float oldmax)
 Do a inertia simulation based on velocity.
void movelib_move (entity this, vector force, float max_velocity, float drag, float theMass, float breakforce)

Variables

float movelib_lastupdate
vector moveto

Macro Definition Documentation

◆ movelib_move_simple

#define movelib_move_simple ( e,
newdir,
velo,
blendrate )
Value:
e.velocity = e.velocity * (1 - blendrate) + (newdir * blendrate) * velo

Definition at line 36 of file movelib.qh.

36#define movelib_move_simple(e,newdir,velo,blendrate) \
37 e.velocity = e.velocity * (1 - blendrate) + (newdir * blendrate) * velo

Referenced by ewheel_move_enemy(), ewheel_move_path(), Monster_Move(), and spiderbot_frame().

◆ movelib_move_simple_gravity

#define movelib_move_simple_gravity ( e,
newdir,
velo,
blendrate )
Value:
if(IS_ONGROUND(e)) movelib_move_simple(e,newdir,velo,blendrate)
#define movelib_move_simple(e, newdir, velo, blendrate)
Definition movelib.qh:36
#define IS_ONGROUND(s)
Definition movetypes.qh:16

Definition at line 39 of file movelib.qh.

39#define movelib_move_simple_gravity(e,newdir,velo,blendrate) \
40 if(IS_ONGROUND(e)) movelib_move_simple(e,newdir,velo,blendrate)

Referenced by Monster_Move_2D().

Function Documentation

◆ movelib_brake_simple()

void movelib_brake_simple ( entity this,
float force )

Definition at line 163 of file movelib.qc.

164{
165 float mspeed;
166 vector mdir;
167 float vz;
168
169 mspeed = max(0,vlen(this.velocity) - force);
170 mdir = normalize(this.velocity);
171 vz = this.velocity.z;
172 this.velocity = mdir * mspeed;
173 this.velocity_z = vz;
174}
vector velocity
float vlen(vector v)
vector normalize(vector v)
float max(float f,...)
vector
Definition self.qh:92

References entity(), max(), normalize(), vector, velocity, and vlen().

Referenced by ewheel_move_enemy(), ewheel_move_idle(), Monster_Move(), Monster_Move_2D(), and spiderbot_frame().

◆ movelib_dragflt()

float movelib_dragflt ( float fspeed,
float drag,
float exp_ )

Simulate drag this.velocity *= movelib_dragflt(somespeed,0.01,0.7);.

Definition at line 26 of file movelib.qc.

27{
28 float ldrag = fspeed * drag;
29 ldrag *= ldrag * exp_;
30 ldrag = 1 - (ldrag / fspeed);
31
32 return ldrag;
33}

◆ movelib_dragvec()

vector movelib_dragvec ( entity this,
float drag,
float exp_ )

Simulate drag this.velocity = movelib_dragvec(this.velocity,0.02,0.5);.

Definition at line 10 of file movelib.qc.

11{
12 float lspeed,ldrag;
13
14 lspeed = vlen(this.velocity);
15 ldrag = lspeed * drag;
16 ldrag *= drag * exp_;
17 ldrag = 1 - (ldrag / lspeed);
18
19 return this.velocity * ldrag;
20}

References entity(), vector, velocity, and vlen().

Referenced by movelib_move().

◆ movelib_groundalign4point()

void movelib_groundalign4point ( entity this,
float spring_length,
float spring_up,
float blendrate,
float _max )

Pitches and rolls the entity to match the gound.

Yed need to set v_up and v_forward (generally by calling makevectors) before calling this.

Definition at line 182 of file movelib.qc.

183{
184 vector a, b, c, d, e, r, push_angle, ahead, side;
185
186 push_angle.y = 0;
187 r = (this.absmax + this.absmin) * 0.5 + (v_up * spring_up);
188 e = v_up * spring_length;
189
190 // Put springs slightly inside bbox
191 ahead = v_forward * (this.maxs.x * 0.8);
192 side = v_right * (this.maxs.y * 0.8);
193
194 a = r + ahead + side;
195 b = r + ahead - side;
196 c = r - ahead + side;
197 d = r - ahead - side;
198
199 traceline(a, a - e,MOVE_NORMAL,this);
200 a.z = (1 - trace_fraction);
201 r = trace_endpos;
202
203 traceline(b, b - e,MOVE_NORMAL,this);
204 b.z = (1 - trace_fraction);
205 r += trace_endpos;
206
207 traceline(c, c - e,MOVE_NORMAL,this);
208 c.z = (1 - trace_fraction);
209 r += trace_endpos;
210
211 traceline(d, d - e,MOVE_NORMAL,this);
212 d.z = (1 - trace_fraction);
213 r += trace_endpos;
214
215 a.x = r.z;
216 r = this.origin;
217
218 push_angle.x = (a.z - c.z) * _max;
219 push_angle.x += (b.z - d.z) * _max;
220
221 push_angle.z = (b.z - a.z) * _max;
222 push_angle.z += (d.z - c.z) * _max;
223
224 //this.angles_x += push_angle_x * 0.95;
225 //this.angles_z += push_angle_z * 0.95;
226
227 this.angles_x = ((1-blendrate) * this.angles.x) + (push_angle.x * blendrate);
228 this.angles_z = ((1-blendrate) * this.angles.z) + (push_angle.z * blendrate);
229
230 //a = this.origin;
231 setorigin(this, r);
232}
vector v_up
const float MOVE_NORMAL
vector v_right
vector trace_endpos
vector maxs
vector absmax
vector v_forward
vector origin
float trace_fraction
vector absmin
ent angles
Definition ent_cs.qc:121

References absmax, absmin, angles, entity(), maxs, MOVE_NORMAL, origin, trace_endpos, trace_fraction, v_forward, v_right, v_up, and vector.

Referenced by spiderbot_frame(), and walker_draw().

◆ movelib_inertmove()

vector movelib_inertmove ( entity this,
vector new_vel,
float new_bias )

Definition at line 49 of file movelib.qc.

50{
51 return new_vel * new_bias + this.velocity * (1-new_bias);
52}

References entity(), vector, and velocity.

◆ movelib_inertmove_byspeed()

vector movelib_inertmove_byspeed ( entity this,
vector vel_new,
float vel_max,
float newmin,
float oldmax )

Do a inertia simulation based on velocity.

Basicaly, this allows you to simulate loss of steering with higher speed. this.velocity = movelib_inertmove_byspeed(this.velocity,newvel,1000,0.1,0.9);

Definition at line 40 of file movelib.qc.

41{
42 float influense = vlen(this.velocity) * (1 / vel_max);
43
44 influense = bound(newmin,influense,oldmax);
45
46 return (vel_new * (1 - influense)) + (this.velocity * influense);
47}
float bound(float min, float value, float max)

References bound(), entity(), vector, velocity, and vlen().

◆ movelib_move()

void movelib_move ( entity this,
vector force,
float max_velocity,
float drag,
float theMass,
float breakforce )

Definition at line 54 of file movelib.qc.

55{
56 float deltatime;
57 float acceleration;
58 float mspeed;
59 vector breakvec;
60
61 deltatime = time - this.movelib_lastupdate;
62 if (deltatime > 0.15) deltatime = 0;
63 this.movelib_lastupdate = time;
64 if (!deltatime) return;
65
66 mspeed = vlen(this.velocity);
67
68 if (theMass)
69 acceleration = vlen(force) / theMass;
70 else
71 acceleration = vlen(force);
72
73 if (IS_ONGROUND(this))
74 {
75 if (breakforce)
76 {
77 breakvec = (normalize(this.velocity) * (breakforce / theMass) * deltatime);
78 this.velocity -= breakvec;
79 }
80
81 this.velocity += force * (acceleration * deltatime);
82 }
83
84 if (drag)
85 this.velocity = movelib_dragvec(this, drag, 1);
86
87 if (this.waterlevel > 1)
88 {
89 this.velocity += force * (acceleration * deltatime)
90 + '0 0 0.05' * PHYS_GRAVITY(NULL) * deltatime;
91 }
92 else
93 this.velocity -= '0 0 1' * PHYS_GRAVITY(NULL) * deltatime;
94
95 mspeed = vlen(this.velocity);
96
97 if (max_velocity)
98 if (mspeed > max_velocity)
99 this.velocity = normalize(this.velocity) * (mspeed - 50);//* max_velocity;
100}
float waterlevel
Definition player.qh:225
float time
vector movelib_dragvec(entity this, float drag, float exp_)
Simulate drag this.velocity = movelib_dragvec(this.velocity,0.02,0.5);.
Definition movelib.qc:10
float movelib_lastupdate
Definition movelib.qh:27
#define PHYS_GRAVITY(s)
Definition movetypes.qh:53
#define NULL
Definition post.qh:14

References entity(), IS_ONGROUND, movelib_dragvec(), movelib_lastupdate, normalize(), NULL, PHYS_GRAVITY, time, vector, velocity, vlen(), and waterlevel.

Variable Documentation

◆ movelib_lastupdate

float movelib_lastupdate

Definition at line 27 of file movelib.qh.

Referenced by movelib_move().

◆ moveto

vector moveto

Definition at line 4 of file movelib.qh.