]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/turrets/sv_turrets.qc
Merge branch 'master' into terencehill/translate_colors_2
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / sv_turrets.qc
index 49bd505eda0a1063571396da510df7c65729d45d..1502be25114f1ddfb5bf90192c796d9f37d2febb 100644 (file)
@@ -1,5 +1,5 @@
 #ifdef SVQC
-#include "../../server/autocvars.qh"
+#include <server/autocvars.qh>
 
 // Generic aiming
 vector turret_aim_generic()
@@ -31,7 +31,7 @@ vector turret_aim_generic()
                        prep = pre_pos + (self.enemy.velocity * (impact_time + mintime));
 
                        if(self.aim_flags & TFL_AIM_ZPREDICT)
-                       if(!(self.enemy.flags & FL_ONGROUND))
+                       if(!IS_ONGROUND(self.enemy))
                        if(self.enemy.movetype == MOVETYPE_WALK || self.enemy.movetype == MOVETYPE_TOSS || self.enemy.movetype == MOVETYPE_BOUNCE)
                        {
                                float vz;
@@ -119,7 +119,7 @@ float turret_targetscore_generic(entity _turret, entity _target)
                        (m_score * _turret.target_select_missilebias) +
                        (p_score * _turret.target_select_playerbias);
 
-       if(_turret.target_range < vlen(_turret.tur_shotorg - real_origin(_target)))
+       if(vdist((_turret.tur_shotorg - real_origin(_target)), >, _turret.target_range))
        {
                //dprint("Wtf?\n");
                score *= 0.001;
@@ -207,17 +207,17 @@ void turret_die()
        }
 }
 
-void turret_damage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
-{SELFPARAM();
+void turret_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
+{
        // Enough already!
-       if(self.deadflag == DEAD_DEAD)
+       if(this.deadflag == DEAD_DEAD)
                return;
 
        // Inactive turrets take no damage. (hm..)
-       if(!self.active)
+       if(!this.active)
                return;
 
-       if(SAME_TEAM(self, attacker))
+       if(SAME_TEAM(this, attacker))
        {
                if(autocvar_g_friendlyfire)
                        damage = damage * autocvar_g_friendlyfire;
@@ -225,30 +225,30 @@ void turret_damage (entity inflictor, entity attacker, float damage, int deathty
                        return;
        }
 
-       self.health -= damage;
+       this.health -= damage;
 
        // thorw head slightly off aim when hit?
-       if (self.damage_flags & TFL_DMG_HEADSHAKE)
+       if (this.damage_flags & TFL_DMG_HEADSHAKE)
        {
-               self.tur_head.angles_x = self.tur_head.angles_x + (-0.5 + random()) * damage;
-               self.tur_head.angles_y = self.tur_head.angles_y + (-0.5 + random()) * damage;
+               this.tur_head.angles_x = this.tur_head.angles_x + (-0.5 + random()) * damage;
+               this.tur_head.angles_y = this.tur_head.angles_y + (-0.5 + random()) * damage;
 
-               self.SendFlags  |= TNSF_ANG;
+               this.SendFlags  |= TNSF_ANG;
        }
 
-       if (self.turret_flags & TUR_FLAG_MOVE)
-               self.velocity = self.velocity + vforce;
+       if (this.turret_flags & TUR_FLAG_MOVE)
+               this.velocity = this.velocity + vforce;
 
-       if (self.health <= 0)
+       if (this.health <= 0)
        {
-               self.event_damage                 = func_null;
-               self.tur_head.event_damage = func_null;
-               self.takedamage                  = DAMAGE_NO;
-               self.nextthink = time;
-               self.think = turret_die;
+               this.event_damage                 = func_null;
+               this.tur_head.event_damage = func_null;
+               this.takedamage                  = DAMAGE_NO;
+               this.nextthink = time;
+               this.think = turret_die;
        }
 
-       self.SendFlags  |= TNSF_STATUS;
+       this.SendFlags  |= TNSF_STATUS;
 }
 
 void() turret_think;
@@ -302,7 +302,7 @@ void turrets_setframe(float _frame, float client_only)
 bool turret_send(entity this, entity to, float sf)
 {
 
-       WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
+       WriteHeader(MSG_ENTITY, ENT_CLIENT_TURRET);
        WriteByte(MSG_ENTITY, sf);
        if(sf & TNSF_SETUP)
        {
@@ -360,7 +360,7 @@ bool turret_send(entity this, entity to, float sf)
        return true;
 }
 
-void load_unit_settings(entity ent, float is_reload)
+void load_unit_settings(entity ent, bool is_reload)
 {SELFPARAM();
        string unitname = ent.netname;
        string sbase;
@@ -449,20 +449,21 @@ void turret_projectile_touch()
        turret_projectile_explode();
 }
 
-void turret_projectile_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
-{SELFPARAM();
-       self.velocity  += vforce;
-       self.health     -= damage;
-       //self.realowner = attacker; // Dont change realowner, it does not make much sense for turrets
-       if(self.health <= 0)
-               W_PrepareExplosionByDamage(self.owner, turret_projectile_explode);
+void turret_projectile_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
+{
+       this.velocity  += vforce;
+       this.health     -= damage;
+       //this.realowner = attacker; // Dont change realowner, it does not make much sense for turrets
+       if(this.health <= 0)
+               WITHSELF(this, W_PrepareExplosionByDamage(this.owner, turret_projectile_explode));
 }
 
-entity turret_projectile(string _snd, float _size, float _health, float _death, float _proj_type, float _cull, float _cli_anim)
+entity turret_projectile(Sound _snd, float _size, float _health, float _death, float _proj_type, float _cull, float _cli_anim)
 {SELFPARAM();
+    TC(Sound, _snd);
        entity proj;
 
-       _sound (self, CH_WEAPON_A, _snd, VOL_BASE, ATTEN_NORM);
+       sound (self, CH_WEAPON_A, _snd, VOL_BASE, ATTEN_NORM);
        proj                             = spawn ();
        setorigin(proj, self.tur_shotorg);
        setsize(proj, '-0.5 -0.5 -0.5' * _size, '0.5 0.5 0.5' * _size);
@@ -726,7 +727,7 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
        }
        else if (e_target.health <= 0)
                return -6;
-       else if(e_target.frozen > 0)
+       else if(STAT(FROZEN, e_target) > 0)
                return -6;
 
        // player
@@ -735,7 +736,7 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
                if(!(validate_flags & TFL_TARGETSELECT_PLAYERS))
                        return -7;
 
-               if (e_target.deadflag != DEAD_NO)
+               if (IS_DEAD(e_target))
                        return -8;
        }
 
@@ -816,7 +817,7 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
 
                traceline(e_turret.origin + '0 0 16', v_tmp, 0, e_turret);
 
-               if (e_turret.aim_firetolerance_dist < vlen(v_tmp - trace_endpos))
+               if(vdist(v_tmp - trace_endpos, >, e_turret.aim_firetolerance_dist))
                        return -19;
        }
 
@@ -923,7 +924,7 @@ float turret_firecheck()
 
        // Lack of zombies makes shooting dead things unnecessary :P
        if (self.firecheck_flags & TFL_FIRECHECK_DEAD)
-               if (self.enemy.deadflag != DEAD_NO)
+               if (IS_DEAD(self.enemy))
                        return 0;
 
        // Own ammo?
@@ -994,7 +995,7 @@ void turret_fire()
                return;
 
        Turret info = get_turretinfo(self.m_id);
-       info.tr_attack(info);
+       info.tr_attack(info, self);
 
        self.attack_finished_single[0] = time + self.shot_refire;
        self.ammo -= self.shot_dmg;
@@ -1108,7 +1109,7 @@ void turret_think()
                                        turret_fire();
 
                                Turret tur = get_turretinfo(self.m_id);
-                               tur.tr_think(tur);
+                               tur.tr_think(tur, self);
 
                                return;
                        }
@@ -1147,7 +1148,7 @@ void turret_think()
                                turret_track();
 
                        Turret tur = get_turretinfo(self.m_id);
-                       tur.tr_think(tur);
+                       tur.tr_think(tur, self);
 
                        // And bail.
                        return;
@@ -1171,7 +1172,7 @@ void turret_think()
        }
 
        Turret tur = get_turretinfo(self.m_id);
-       tur.tr_think(tur);
+       tur.tr_think(tur, self);
 }
 
 /*
@@ -1200,25 +1201,18 @@ void turret_link()
 }
 
 void turrets_manager_think()
-{SELFPARAM();
-       self.nextthink = time + 1;
+{
+       SELFPARAM();
+       this.nextthink = time + 1;
 
-       entity e;
        if (autocvar_g_turrets_reloadcvars == 1)
        {
-               e = nextent(world);
-               while (e)
-               {
-                       if (IS_TURRET(e))
-                       {
-                               load_unit_settings(e,1);
-                               Turret tur = get_turretinfo(self.m_id);
-                               tur.tr_think(tur);
-                       }
-
-                       e = nextent(e);
-               }
-               cvar_set("g_turrets_reloadcvars","0");
+               FOREACH_ENTITY(IS_TURRET(it), {
+                       load_unit_settings(it, true);
+                       Turret tur = get_turretinfo(it.m_id);
+                       tur.tr_think(tur, it);
+               });
+               cvar_set("g_turrets_reloadcvars", "0");
        }
 }
 
@@ -1267,8 +1261,7 @@ float turret_initialize(Turret tur)
        entity e = find(world, classname, "turret_manager");
        if(!e)
        {
-               e = spawn();
-               e.classname = "turret_manager";
+               e = new(turret_manager);
                e.think = turrets_manager_think;
                e.nextthink = time + 2;
        }
@@ -1353,13 +1346,13 @@ float turret_initialize(Turret tur)
        self.nextthink                          = time + 1;
        self.nextthink                     += turret_count * sys_frametime;
 
-       self.tur_head = spawn();
+       self.tur_head = new(turret_head);
        _setmodel(self.tur_head, tur.head_model);
        setsize(self.tur_head, '0 0 0', '0 0 0');
        setorigin(self.tur_head, '0 0 0');
        setattachment(self.tur_head, self, "tag_head");
 
-       self.tur_head.netname           = self.tur_head.classname = "turret_head";
+       self.tur_head.netname           = self.tur_head.classname;
        self.tur_head.team                      = self.team;
        self.tur_head.owner                     = self;
        self.tur_head.takedamage        = DAMAGE_NO;
@@ -1384,7 +1377,7 @@ float turret_initialize(Turret tur)
 
 #ifdef TURRET_DEBUG
        self.tur_debug_start = self.nextthink;
-       while (vlen(self.tur_debug_rvec) < 2)
+       while(vdist(self.tur_debug_rvec, <, 2))
                self.tur_debug_rvec = randomvec() * 4;
 
        self.tur_debug_rvec_x = fabs(self.tur_debug_rvec_x);