X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fsteerlib.qc;h=24800165661c95361ab2662b4037df977c2e1a15;hb=d9a9475eee28bbb477788fdf3b06bad9242a51a6;hp=e57d56dd169be0022cd881bc00d32e581f8e5842;hpb=b557753cb5b1d9c92ef9ab17cb03d74bcbb75485;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/steerlib.qc b/qcsrc/server/steerlib.qc index e57d56dd1..248001656 100644 --- a/qcsrc/server/steerlib.qc +++ b/qcsrc/server/steerlib.qc @@ -1,15 +1,14 @@ +#include "steerlib.qh" #if defined(CSQC) #elif defined(MENUQC) #elif defined(SVQC) - #include "../dpdefs/progsdefs.qh" - #include "../dpdefs/dpextensions.qh" #endif /** Uniform pull towards a point **/ vector steerlib_pull(vector point) -{ +{SELFPARAM(); return normalize(point - self.origin); } @@ -27,7 +26,7 @@ vector steerlib_push(vector point) Pull toward a point, The further away, the stronger the pull. **/ vector steerlib_arrive(vector point,float maximal_distance) -{ +{SELFPARAM(); float distance; vector direction; @@ -40,7 +39,7 @@ vector steerlib_arrive(vector point,float maximal_distance) Pull toward a point increasing the pull the closer we get **/ vector steerlib_attract(vector point, float maximal_distance) -{ +{SELFPARAM(); float distance; vector direction; @@ -50,14 +49,14 @@ vector steerlib_attract(vector point, float maximal_distance) return direction * (1-(distance / maximal_distance)); } -vector steerlib_attract2(vector point, float min_influense,float max_distance,float max_influense) +vector steerlib_attract2(entity this, vector point, float min_influense,float max_distance,float max_influense) { float distance; vector direction; float influense; - distance = bound(0.00001,vlen(self.origin - point),max_distance); - direction = normalize(point - self.origin); + distance = bound(0.00001,vlen(this.origin - point),max_distance); + direction = normalize(point - this.origin); influense = 1 - (distance / max_distance); influense = min_influense + (influense * (max_influense - min_influense)); @@ -99,7 +98,7 @@ vector steerlib_attract2(vector point, float maximal_distance,float min_influens Move away from a point. **/ vector steerlib_repell(vector point,float maximal_distance) -{ +{SELFPARAM(); float distance; vector direction; @@ -113,7 +112,7 @@ vector steerlib_repell(vector point,float maximal_distance) Try to keep at ideal_distance away from point **/ vector steerlib_standoff(vector point,float ideal_distance) -{ +{SELFPARAM(); float distance; vector direction; @@ -140,7 +139,7 @@ vector steerlib_standoff(vector point,float ideal_distance) where range is the cicrle radius and tresh is how close we need to be to pick a new heading. **/ vector steerlib_wander(float range,float tresh,vector oldpoint) -{ +{SELFPARAM(); vector wander_point; wander_point = v_forward - oldpoint; @@ -159,7 +158,7 @@ vector steerlib_wander(float range,float tresh,vector oldpoint) Dodge a point. dont work to well. **/ vector steerlib_dodge(vector point,vector dodge_dir,float min_distance) -{ +{SELFPARAM(); float distance; distance = max(vlen(self.origin - point),min_distance); @@ -175,7 +174,7 @@ vector steerlib_dodge(vector point,vector dodge_dir,float min_distance) **/ .float flock_id; vector steerlib_flock(float _radius, float standoff,float separation_force,float flock_force) -{ +{SELFPARAM(); entity flock_member; vector push = '0 0 0', pull = '0 0 0'; float ccount = 0; @@ -201,7 +200,7 @@ vector steerlib_flock(float _radius, float standoff,float separation_force,float xy only version (for ground movers). **/ vector steerlib_flock2d(float _radius, float standoff,float separation_force,float flock_force) -{ +{SELFPARAM(); entity flock_member; vector push = '0 0 0', pull = '0 0 0'; float ccount = 0; @@ -232,7 +231,7 @@ vector steerlib_flock2d(float _radius, float standoff,float separation_force,flo This results in a aligned movement (?!) much like flocking. **/ vector steerlib_swarm(float _radius, float standoff,float separation_force,float swarm_force) -{ +{SELFPARAM(); entity swarm_member; vector force = '0 0 0', center = '0 0 0'; float ccount = 0; @@ -262,7 +261,7 @@ vector steerlib_swarm(float _radius, float standoff,float separation_force,float You need to call makevectors() (or equivalent) before this function to set v_forward and v_right **/ vector steerlib_traceavoid(float pitch,float length) -{ +{SELFPARAM(); vector vup_left,vup_right,vdown_left,vdown_right; float fup_left,fup_right,fdown_left,fdown_right; vector upwish,downwish,leftwish,rightwish; @@ -309,7 +308,7 @@ vector steerlib_traceavoid(float pitch,float length) Run tracelines in a forward trident, bias each direction negative if something is found there. **/ vector steerlib_traceavoid_flat(float pitch, float length, vector vofs) -{ +{SELFPARAM(); vector vt_left, vt_right,vt_front; float f_left, f_right,f_front; vector leftwish, rightwish,frontwish, v_left; @@ -381,7 +380,7 @@ float beamsweep_badpoint(vector point,float waterok) //#define BEAMSTEER_VISUAL float beamsweep(vector from, vector dir,float length, float step,float step_up, float step_down) -{ +{SELFPARAM(); float i; vector a,b,u,d; @@ -421,7 +420,7 @@ float beamsweep(vector from, vector dir,float length, float step,float step_up, } vector steerlib_beamsteer(vector dir, float length, float step, float step_up, float step_down) -{ +{SELFPARAM(); float bm_forward, bm_right, bm_left,p; vector vr,vl; @@ -497,7 +496,7 @@ vector steerlib_beamsteer(vector dir, float length, float step, float step_up, f //#define TLIBS_TETSLIBS #ifdef TLIBS_TETSLIBS void flocker_die() -{ +{SELFPARAM(); Send_Effect(EFFECT_ROCKET_EXPLODE, self.origin, '0 0 0', 1); self.owner.cnt += 1; @@ -509,7 +508,7 @@ void flocker_die() void flocker_think() -{ +{SELFPARAM(); vector dodgemove,swarmmove; vector reprellmove,wandermove,newmove; @@ -545,19 +544,17 @@ void flocker_think() self.nextthink = time + 0.1; } +MODEL(FLOCKER, "models/turrets/rocket.md3"); void spawn_flocker() -{ - entity flocker; - - flocker = spawn (); +{SELFPARAM(); + entity flocker = new(flocker); setorigin(flocker, self.origin + '0 0 32'); - setmodel (flocker, "models/turrets/rocket.md3"); + setmodel (flocker, MDL_FLOCKER); setsize (flocker, '-3 -3 -3', '3 3 3'); flocker.flock_id = self.flock_id; - flocker.classname = "flocker"; flocker.owner = self; flocker.think = flocker_think; flocker.nextthink = time + random() * 5; @@ -574,7 +571,7 @@ void spawn_flocker() } void flockerspawn_think() -{ +{SELFPARAM(); if(self.cnt > 0) @@ -585,7 +582,7 @@ void flockerspawn_think() } void flocker_hunter_think() -{ +{SELFPARAM(); vector dodgemove,attractmove,newmove; entity e,ee; float d,bd; @@ -595,7 +592,7 @@ void flocker_hunter_think() self.angles_x = self.angles.x * -1; if(self.enemy) - if(vlen(self.enemy.origin - self.origin) < 64) + if(vdist(self.enemy.origin - self.origin, <, 64)) { ee = self.enemy; ee.health = -1; @@ -639,10 +636,8 @@ void flocker_hunter_think() float globflockcnt; -void spawnfunc_flockerspawn() -{ - precache_model ( "models/turrets/rocket.md3"); - precache_model("models/turrets/c512.md3"); +spawnfunc(flockerspawn) +{SELFPARAM(); ++globflockcnt; if(!self.cnt) self.cnt = 20; @@ -652,12 +647,11 @@ void spawnfunc_flockerspawn() self.think = flockerspawn_think; self.nextthink = time + 0.25; - self.enemy = spawn(); + self.enemy = new(FLock Hunter); - setmodel(self.enemy, "models/turrets/rocket.md3"); + setmodel(self.enemy, MDL_FLOCKER); setorigin(self.enemy,self.origin + '0 0 768' + (randomvec() * 128)); - self.enemy.classname = "FLock Hunter"; self.enemy.scale = 3; self.enemy.effects = EF_LOWPRECISION; self.enemy.movetype = MOVETYPE_BOUNCEMISSILE;