X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Ft_jumppads.qc;h=018a7c259c9f0ab24aeb90dcf2bb9866a357b63b;hb=6f37a8f8076a572097afb13de2c367a72717c927;hp=fba705c28afd229aa5676ebc329bbff1fdba7ea1;hpb=f600c870d8c86806c33c99a8ae35f796bfc5de66;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/t_jumppads.qc b/qcsrc/server/t_jumppads.qc index fba705c28..018a7c259 100644 --- a/qcsrc/server/t_jumppads.qc +++ b/qcsrc/server/t_jumppads.qc @@ -1,13 +1,16 @@ -float PUSH_ONCE = 1; -float PUSH_SILENT = 2; +#include "t_jumppads.qh" +#include "_.qh" -.float pushltime; -.float istypefrag; -.float height; +#include "g_subs.qh" -void() SUB_UseTargets; +#include "bot/navigation.qh" +#include "bot/waypoints.qh" -float trigger_push_calculatevelocity_flighttime; +#include "weapons/csqcprojectile.qh" + +#include "../common/animdecide.qh" + +#include "../warpzonelib/util_server.qh" void trigger_push_use() { @@ -40,7 +43,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 +74,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 +84,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 +97,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 +115,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 +140,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,7 +167,7 @@ void trigger_push_touch() other.velocity = self.movedir; } - other.flags &~= FL_ONGROUND; + other.flags &= ~FL_ONGROUND; if (IS_PLAYER(other)) { @@ -175,20 +178,18 @@ 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; } if(IS_REAL_CLIENT(other) || IS_BOT_CLIENT(other)) { - float i; - float found; - found = FALSE; - for(i = 0; i < other.jumppadcount && i < NUM_JUMPPADSUSED; ++i) + bool found = false; + for(int 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; } @@ -201,10 +202,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; @@ -246,7 +247,6 @@ void trigger_push_touch() } } -.vector dest; void trigger_push_findtarget() { entity e, t; @@ -254,7 +254,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) { @@ -329,7 +329,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);