X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Ft_jumppads.qc;h=8bd5a2f1ca3223a4f6819daf960697ef27cd99b4;hb=ba0988ca930f50286f8cf3b6c114ebc6584964af;hp=0b6f7fc4cd9488357ccb0b0110adf3adf87a18ec;hpb=f5689f55e2665c871cfabcee9f8534c482e2b79b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/t_jumppads.qc b/qcsrc/server/t_jumppads.qc index 0b6f7fc4c..8bd5a2f1c 100644 --- a/qcsrc/server/t_jumppads.qc +++ b/qcsrc/server/t_jumppads.qc @@ -1,5 +1,21 @@ -float PUSH_ONCE = 1; -float PUSH_SILENT = 2; +#if defined(CSQC) +#elif defined(MENUQC) +#elif defined(SVQC) + #include "../dpdefs/progsdefs.qc" + #include "../dpdefs/dpextensions.qc" + #include "sys-post.qh" + #include "../warpzonelib/util_server.qh" + #include "../common/constants.qh" + #include "../common/util.qh" + #include "../common/animdecide.qh" + #include "../common/weapons/weapons.qh" + #include "weapons/csqcprojectile.qh" + #include "constants.qh" + #include "defs.qh" +#endif + +const float PUSH_ONCE = 1; +const float PUSH_SILENT = 2; .float pushltime; .float istypefrag; @@ -40,7 +56,7 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) if(other.gravity) grav *= other.gravity; - zdist = torg_z - org_z; + zdist = torg.z - org.z; sdist = vlen(torg - org - zdist * '0 0 1'); sdir = normalize(torg - org - zdist * '0 0 1'); @@ -71,7 +87,7 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) */ // push him so high... - vz = sqrt(2 * grav * jumpheight); // NOTE: sqrt(positive)! + vz = sqrt(fabs(2 * grav * jumpheight)); // NOTE: sqrt(positive)! // we start with downwards velocity only if it's a downjump and the jump apex should be outside the jump! if(ht < 0) @@ -81,10 +97,10 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) vector solution; solution = solve_quadratic(0.5 * grav, -vz, zdist); // equation "z(ti) = zdist" // ALWAYS solvable because jumpheight >= zdist - if(!solution_z) - solution_y = solution_x; // just in case it is not solvable due to roundoff errors, assume two equal solutions at their center (this is mainly for the usual case with ht == 0) + if(!solution.z) + solution_y = solution.x; // just in case it is not solvable due to roundoff errors, assume two equal solutions at their center (this is mainly for the usual case with ht == 0) if(zdist == 0) - solution_x = solution_y; // solution_x is 0 in this case, so don't use it, but rather use solution_y (which will be sqrt(0.5 * jumpheight / grav), actually) + solution_x = solution.y; // solution_x is 0 in this case, so don't use it, but rather use solution_y (which will be sqrt(0.5 * jumpheight / grav), actually) if(zdist < 0) { @@ -94,14 +110,14 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) // almost straight line type // jump apex is before the jump // we must take the larger one - trigger_push_calculatevelocity_flighttime = solution_y; + trigger_push_calculatevelocity_flighttime = solution.y; } else { // regular jump // jump apex is during the jump // we must take the larger one too - trigger_push_calculatevelocity_flighttime = solution_y; + trigger_push_calculatevelocity_flighttime = solution.y; } } else @@ -112,14 +128,14 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) // almost straight line type // jump apex is after the jump // we must take the smaller one - trigger_push_calculatevelocity_flighttime = solution_x; + trigger_push_calculatevelocity_flighttime = solution.x; } else { // regular jump // jump apex is during the jump // we must take the larger one - trigger_push_calculatevelocity_flighttime = solution_y; + trigger_push_calculatevelocity_flighttime = solution.y; } } vs = sdist / trigger_push_calculatevelocity_flighttime; @@ -137,7 +153,7 @@ void trigger_push_touch() return; if(self.team) - if((self.spawnflags & 4 == 0) == (self.team != other.team)) + if(((self.spawnflags & 4) == 0) == (self.team != other.team)) return; EXACTTRIGGER_TOUCH; @@ -164,9 +180,9 @@ void trigger_push_touch() other.velocity = self.movedir; } - other.flags &~= FL_ONGROUND; + other.flags &= ~FL_ONGROUND; - if (other.classname == "player") + if (IS_PLAYER(other)) { // reset tracking of oldvelocity for impact damage (sudden velocity changes) other.oldvelocity = other.velocity; @@ -175,26 +191,24 @@ void trigger_push_touch() { // flash when activated pointparticles(particleeffectnum("jumppad_activate"), other.origin, other.velocity, 1); - sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM); + sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); self.pushltime = time + 0.2; } - float ct; - ct = clienttype(other); - if( ct == CLIENTTYPE_REAL || ct == CLIENTTYPE_BOT) + if(IS_REAL_CLIENT(other) || IS_BOT_CLIENT(other)) { float i; float found; - found = FALSE; + found = false; for(i = 0; i < other.jumppadcount && i < NUM_JUMPPADSUSED; ++i) if(other.(jumppadsused[i]) == self) - found = TRUE; + found = true; if(!found) { - other.(jumppadsused[mod(other.jumppadcount, NUM_JUMPPADSUSED)]) = self; + other.(jumppadsused[other.jumppadcount % NUM_JUMPPADSUSED]) = self; other.jumppadcount = other.jumppadcount + 1; } - if(ct == CLIENTTYPE_REAL) + if(IS_REAL_CLIENT(other)) { if(self.message) centerprint(other, self.message); @@ -203,10 +217,10 @@ void trigger_push_touch() other.lastteleporttime = time; if (other.deadflag == DEAD_NO) - animdecide_setaction(other, ANIMACTION_JUMP, TRUE); + animdecide_setaction(other, ANIMACTION_JUMP, true); } else - other.jumppadcount = TRUE; + other.jumppadcount = true; // reset tracking of who pushed you into a hazard (for kill credit) other.pushltime = 0; @@ -256,7 +270,7 @@ void trigger_push_findtarget() // first calculate a typical start point for the jump org = (self.absmin + self.absmax) * 0.5; - org_z = self.absmax_z - PL_MIN_z; + org_z = self.absmax.z - PL_MIN_z; if (self.target) { @@ -331,7 +345,7 @@ void spawnfunc_trigger_push() self.speed = 1000; self.movedir = self.movedir * self.speed * 10; - if not(self.noise) + if (!self.noise) self.noise = "misc/jumppad.wav"; precache_sound (self.noise);