-void SUB_Null() {}
-float SUB_True() { return 1; }
-float SUB_False() { return 0; }
+void SUB_NullThink(void) { }
void() SUB_CalcMoveDone;
void() SUB_CalcAngleMoveDone;
void setanim(entity e, vector anim, float looping, float override, float restart)
{
if (!anim)
- return; // no animation was given to us! We can't use this.
-
+ return; // no animation was given to us! We can't use this.
+
if (anim_x == e.animstate_startframe)
if (anim_y == e.animstate_numframes)
if (anim_z == e.animstate_framerate)
//print(ftos(time), " -> ", ftos(e.frame), "\n");
}
-vector animfixfps(entity e, vector a)
-{
- // multi-frame anim: keep as-is
- if(a_y == 1)
- {
- float dur;
- dur = frameduration(e.modelindex, a_x);
- if(dur > 0)
- a_z = 1.0 / dur;
- }
- return a;
-}
-
/*
==================
SUB_Remove
*/
void SUB_VanishOrRemove (entity ent)
{
- if (ent.flags & FL_CLIENT)
+ if (IS_CLIENT(ent))
{
// vanish
ent.alpha = -1;
*/
void SUB_SetFade (entity ent, float when, float fadetime)
{
- //if (ent.flags & FL_CLIENT) // && ent.deadflag != DEAD_NO)
- // return;
- //ent.alpha = 1;
ent.fade_rate = 1/fadetime;
ent.think = SUB_SetFade_Think;
ent.nextthink = when;
self.owner.angles_z -= 360 * floor((self.owner.angles_z - destangle_z) / 360 + 0.5);
angloc = destangle - self.owner.angles;
angloc = angloc * (1 / sys_frametime); // so it arrives for the next frame
+ self.owner.avelocity = angloc;
}
if(nexttick < self.animstate_endtime)
veloc = nextpos - self.owner.origin;
veloc = veloc * (1 / sys_frametime); // so it arrives for the next frame
self.owner.velocity = veloc;
- self.owner.avelocity = angloc;
self.nextthink = nexttick;
} else {
// derivative: delta + 2 * delta2 (e.g. for angle positioning)
controller.think1 = self.think;
// the thinking is now done by the controller
- self.think = SUB_Null;
+ self.think = SUB_NullThink; // for PushMove
self.nextthink = self.ltime + traveltime;
-
+
// invoke controller
self = controller;
self.think();
// check whether antilagged traces are enabled
if (lag < 0.001)
lag = 0;
- if (clienttype(forent) != CLIENTTYPE_REAL)
+ if (!IS_REAL_CLIENT(forent))
lag = 0; // only antilag for clients
// change shooter to SOLID_BBOX so the shot can hit corpses
tracebox_antilag_force_wz(source, v1, mi, ma, v2, nomonst, forent, lag, TRUE);
}
-float tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomonsters, entity forent, float stopatentity) // returns the number of traces done, for benchmarking
+float tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomonsters, entity forent, float stopatentity, entity ignorestopatentity) // returns the number of traces done, for benchmarking
{
vector pos, dir, t;
float nudge;
for(;;)
{
- if((pos - v1) * dir >= (v2 - v1) * dir)
+ if(pos * dir >= v2 * dir)
{
// went too far
trace_fraction = 1;
pos = t + dir * nudge;
// but if we hit an entity, stop RIGHT before it
- if(stopatentity && stopentity)
+ if(stopatentity && stopentity && stopentity != ignorestopatentity)
{
trace_ent = stopentity;
trace_endpos = t;
}
}
-void traceline_inverted (vector v1, vector v2, float nomonsters, entity forent, float stopatentity)
+void traceline_inverted (vector v1, vector v2, float nomonsters, entity forent, float stopatentity, entity ignorestopatentity)
{
- tracebox_inverted(v1, '0 0 0', '0 0 0', v2, nomonsters, forent, stopatentity);
+ tracebox_inverted(v1, '0 0 0', '0 0 0', v2, nomonsters, forent, stopatentity, ignorestopatentity);
}
/*
}
if(self.lodmodelindex1)
- if not(self.SendEntity)
+ if (!self.SendEntity)
SetCustomizer(self, LOD_customize, LOD_uncustomize);
}
if(self.model != "")
{
precache_model(self.model);
- setmodel(self, self.model); // no precision needed
+ if(self.mins != '0 0 0' || self.maxs != '0 0 0')
+ {
+ vector mi = self.mins;
+ vector ma = self.maxs;
+ setmodel(self, self.model); // no precision needed
+ setsize(self, mi, ma);
+ }
+ else
+ setmodel(self, self.model); // no precision needed
InitializeEntity(self, LODmodel_attach, INITPRIO_FINDTARGET);
}
setorigin(self, self.origin);
if(self.model != "")
{
precache_model(self.model);
- setmodel(self, self.model); // no precision needed
+ if(self.mins != '0 0 0' || self.maxs != '0 0 0')
+ {
+ vector mi = self.mins;
+ vector ma = self.maxs;
+ setmodel(self, self.model); // no precision needed
+ setsize(self, mi, ma);
+ }
+ else
+ setmodel(self, self.model); // no precision needed
}
setorigin(self, self.origin);
ApplyMinMaxScaleAngles(self);