X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_subs.qc;h=97450cd4ca107333c5255e9e024d26f4bc6f5a13;hp=eacba6452869ce4bb9c95836f1de2b28ccf356d7;hb=f72821fdcebe3ca01181a99727a06198de65ea08;hpb=924ba9b521119651b5667c0280868df9f95ca488 diff --git a/qcsrc/server/g_subs.qc b/qcsrc/server/g_subs.qc index eacba6452..97450cd4c 100644 --- a/qcsrc/server/g_subs.qc +++ b/qcsrc/server/g_subs.qc @@ -1,60 +1,17 @@ #include "g_subs.qh" -#include "_all.qh" #include "antilag.qh" #include "command/common.qh" -#include "../warpzonelib/common.qh" +#include "../common/state.qh" +#include "../lib/warpzone/common.qh" +#include "../common/triggers/subs.qh" -void spawnfunc_info_null (void) +spawnfunc(info_null) { remove(self); // if anything breaks, tell the mapper to fix his map! info_null is meant to remove itself immediately. } -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. - - if (anim.x == e.animstate_startframe) - if (anim.y == e.animstate_numframes) - if (anim.z == e.animstate_framerate) - { - if(restart) - { - if(restart > 0) - if(anim.y == 1) // ZYM animation - BITXOR_ASSIGN(e.effects, EF_RESTARTANIM_BIT); - } - else - return; - } - e.animstate_startframe = anim.x; - e.animstate_numframes = anim.y; - e.animstate_framerate = anim.z; - e.animstate_starttime = servertime - 0.1 * serverframetime; // shift it a little bit into the past to prevent float inaccuracy hiccups - e.animstate_endtime = e.animstate_starttime + e.animstate_numframes / e.animstate_framerate; - e.animstate_looping = looping; - e.animstate_override = override; - e.frame = e.animstate_startframe; - e.frame1time = servertime; -} - -void updateanim(entity e) -{ - if (time >= e.animstate_endtime) - { - if (e.animstate_looping) - { - e.animstate_starttime = e.animstate_endtime; - e.animstate_endtime = e.animstate_starttime + e.animstate_numframes / e.animstate_framerate; - } - e.animstate_override = false; - } - e.frame = e.animstate_startframe + bound(0, (time - e.animstate_starttime) * e.animstate_framerate, e.animstate_numframes - 1); - //print(ftos(time), " -> ", ftos(e.frame), "\n"); -} - /* ================== main @@ -62,7 +19,7 @@ main unused but required by the engine ================== */ -void main (void) +void main () { } @@ -79,9 +36,6 @@ Additionally it moves players back into the past before the trace and restores t */ void tracebox_antilag_force_wz (entity source, vector v1, vector mi, vector ma, vector v2, float nomonst, entity forent, float lag, float wz) { - entity player; - float oldsolid; - // check whether antilagged traces are enabled if (lag < 0.001) lag = 0; @@ -89,18 +43,18 @@ void tracebox_antilag_force_wz (entity source, vector v1, vector mi, vector ma, lag = 0; // only antilag for clients // change shooter to SOLID_BBOX so the shot can hit corpses - oldsolid = source.dphitcontentsmask; + int oldsolid = source.dphitcontentsmask; if(source) source.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE; if (lag) { // take players back into the past - FOR_EACH_PLAYER(player) - if(player != forent) - antilag_takeback(player, time - lag); - FOR_EACH_MONSTER(player) - antilag_takeback(player, time - lag); + FOREACH_CLIENT(IS_PLAYER(it) && it != forent, antilag_takeback(it, CS(it), time - lag)); + FOREACH_ENTITY_FLAGS(flags, FL_MONSTER, { + if(it != forent) + antilag_takeback(it, it, time - lag); + }); } // do the trace @@ -112,11 +66,11 @@ void tracebox_antilag_force_wz (entity source, vector v1, vector mi, vector ma, // restore players to current positions if (lag) { - FOR_EACH_PLAYER(player) - if(player != forent) - antilag_restore(player); - FOR_EACH_MONSTER(player) - antilag_restore(player); + FOREACH_CLIENT(IS_PLAYER(it) && it != forent, antilag_restore(it, CS(it))); + FOREACH_ENTITY_FLAGS(flags, FL_MONSTER, { + if (it != forent) + antilag_restore(it, it); + }); } // restore shooter solid type @@ -187,10 +141,10 @@ float tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomon if(c == 50) { - dprint("HOLY SHIT! When tracing from ", vtos(v1), " to ", vtos(v2), "\n"); - dprint(" Nudging gets us nowhere at ", vtos(pos), "\n"); - dprint(" trace_endpos is ", vtos(trace_endpos), "\n"); - dprint(" trace distance is ", ftos(vlen(pos - trace_endpos)), "\n"); + LOG_TRACE("HOLY SHIT! When tracing from ", vtos(v1), " to ", vtos(v2), "\n"); + LOG_TRACE(" Nudging gets us nowhere at ", vtos(pos), "\n"); + LOG_TRACE(" trace_endpos is ", vtos(trace_endpos), "\n"); + LOG_TRACE(" trace distance is ", ftos(vlen(pos - trace_endpos)), "\n"); } stopentity = trace_ent; @@ -280,55 +234,11 @@ vector findbetterlocation (vector org, float mindist) return org; } -/* -================== -crandom - -Returns a random number between -1.0 and 1.0 -================== -*/ -float crandom (void) -{ - return 2 * (random () - 0.5); -} - -/* -================== -Angc used for animations -================== -*/ - - -float angc (float a1, float a2) -{ - float a; - - while (a1 > 180) - a1 = a1 - 360; - while (a1 < -179) - a1 = a1 + 360; - - while (a2 > 180) - a2 = a2 - 360; - while (a2 < -179) - a2 = a2 + 360; - - a = a1 - a2; - while (a > 180) - a = a - 360; - while (a < -179) - a = a + 360; - - return a; -} - float LOD_customize() -{ - float d; - +{SELFPARAM(); if(autocvar_loddebug) { - d = autocvar_loddebug; + int d = autocvar_loddebug; if(d == 1) self.modelindex = self.lodmodelindex0; else if(d == 2 || !self.lodmodelindex2) @@ -339,10 +249,10 @@ float LOD_customize() } // TODO csqc network this so it only gets sent once - d = vlen(NearestPointOnBox(self, other.origin) - other.origin); - if(d < self.loddistance1) + vector near_point = NearestPointOnBox(self, other.origin); + if(vdist(near_point - other.origin, <, self.loddistance1)) self.modelindex = self.lodmodelindex0; - else if(!self.lodmodelindex2 || d < self.loddistance2) + else if(!self.lodmodelindex2 || vdist(near_point - other.origin, <, self.loddistance2)) self.modelindex = self.lodmodelindex1; else self.modelindex = self.lodmodelindex2; @@ -351,12 +261,12 @@ float LOD_customize() } void LOD_uncustomize() -{ +{SELFPARAM(); self.modelindex = self.lodmodelindex0; } void LODmodel_attach() -{ +{SELFPARAM(); entity e; if(!self.loddistance1) @@ -396,13 +306,13 @@ void LODmodel_attach() ma = self.maxs; precache_model(self.lodmodel1); - setmodel(self, self.lodmodel1); + _setmodel(self, self.lodmodel1); self.lodmodelindex1 = self.modelindex; if(self.lodmodel2 != "") { precache_model(self.lodmodel2); - setmodel(self, self.lodmodel2); + _setmodel(self, self.lodmodel2); self.lodmodelindex2 = self.modelindex; } @@ -416,7 +326,7 @@ void LODmodel_attach() } void ApplyMinMaxScaleAngles(entity e) -{ +{SELFPARAM(); if(e.angles.x != 0 || e.angles.z != 0 || self.avelocity.x != 0 || self.avelocity.z != 0) // "weird" rotation { e.maxs = '1 1 1' * vlen( @@ -443,7 +353,7 @@ void ApplyMinMaxScaleAngles(entity e) } void SetBrushEntityModel() -{ +{SELFPARAM(); if(self.model != "") { precache_model(self.model); @@ -451,11 +361,11 @@ void SetBrushEntityModel() { vector mi = self.mins; vector ma = self.maxs; - setmodel(self, self.model); // no precision needed + _setmodel(self, self.model); // no precision needed setsize(self, mi, ma); } else - setmodel(self, self.model); // no precision needed + _setmodel(self, self.model); // no precision needed InitializeEntity(self, LODmodel_attach, INITPRIO_FINDTARGET); } setorigin(self, self.origin); @@ -463,7 +373,7 @@ void SetBrushEntityModel() } void SetBrushEntityModelNoLOD() -{ +{SELFPARAM(); if(self.model != "") { precache_model(self.model); @@ -471,11 +381,11 @@ void SetBrushEntityModelNoLOD() { vector mi = self.mins; vector ma = self.maxs; - setmodel(self, self.model); // no precision needed + _setmodel(self, self.model); // no precision needed setsize(self, mi, ma); } else - setmodel(self, self.model); // no precision needed + _setmodel(self, self.model); // no precision needed } setorigin(self, self.origin); ApplyMinMaxScaleAngles(self); @@ -487,24 +397,24 @@ InitTrigger ================ */ -void SetMovedir() +void SetMovedir(entity this) { - if (self.movedir != '0 0 0') - self.movedir = normalize(self.movedir); + if(this.movedir != '0 0 0') + this.movedir = normalize(this.movedir); else { - makevectors (self.angles); - self.movedir = v_forward; + makevectors(this.angles); + this.movedir = v_forward; } - self.angles = '0 0 0'; + this.angles = '0 0 0'; } void InitTrigger() -{ +{SELFPARAM(); // trigger angles are used for one-way touches. An angle of 0 is assumed // to mean no restrictions, so use a yaw of 360 instead. - SetMovedir (); + SetMovedir(self); self.solid = SOLID_TRIGGER; SetBrushEntityModel(); self.movetype = MOVETYPE_NONE; @@ -513,10 +423,10 @@ void InitTrigger() } void InitSolidBSPTrigger() -{ +{SELFPARAM(); // trigger angles are used for one-way touches. An angle of 0 is assumed // to mean no restrictions, so use a yaw of 360 instead. - SetMovedir (); + SetMovedir(self); self.solid = SOLID_BSP; SetBrushEntityModel(); self.movetype = MOVETYPE_NONE; // why was this PUSH? -div0 @@ -525,7 +435,7 @@ void InitSolidBSPTrigger() } float InitMovingBrushTrigger() -{ +{SELFPARAM(); // trigger angles are used for one-way touches. An angle of 0 is assumed // to mean no restrictions, so use a yaw of 360 instead. self.solid = SOLID_BSP;