]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/w_seeker.qc
properly set the HITTYPE_BOUNCE flag on all timeout detonations
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / w_seeker.qc
index b863875d4cb12aa139a0a8e4457930ff87d68150..83d615884c89e2b81473c279404197acbd65473b 100644 (file)
@@ -1,5 +1,5 @@
 #ifdef REGISTER_WEAPON
-REGISTER_WEAPON(SEEKER, w_seeker, IT_ROCKETS, 9, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MEDIUM, "seeker", "seeker", "T.A.G. Seeker");
+REGISTER_WEAPON(SEEKER, w_seeker, IT_ROCKETS, 9, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "seeker", "seeker", "T.A.G. Seeker");
 #else
 //.float speed; = switchweapon
 //.float proxytime; = autoswitch
@@ -8,7 +8,7 @@ REGISTER_WEAPON(SEEKER, w_seeker, IT_ROCKETS, 9, WEP_FLAG_NORMAL | WEP_TYPE_SPLA
 void Seeker_Missile_Explode ()
 {
        self.event_damage = SUB_Null;
-       RadiusDamage (self, self.owner, cvar("g_balance_seeker_missile_damage"), cvar("g_balance_seeker_missile_edgedamage"), cvar("g_balance_seeker_missile_radius"), world, cvar("g_balance_seeker_missile_force"), self.projectiledeathtype, other, WEP_SEEKER);
+       RadiusDamage (self, self.owner, cvar("g_balance_seeker_missile_damage"), cvar("g_balance_seeker_missile_edgedamage"), cvar("g_balance_seeker_missile_radius"), world, cvar("g_balance_seeker_missile_force"), self.projectiledeathtype, other);
 
        remove (self);
 }
@@ -28,7 +28,10 @@ void Seeker_Missile_Think()
        float dist;
 
        if (time > self.cnt)
+       {
+               self.projectiledeathtype |= HITTYPE_SPLASH;
                Seeker_Missile_Explode();
+       }
 
        if (!self.switchweapon)
                self.switchweapon = cvar("g_balance_seeker_missile_speed");
@@ -149,7 +152,7 @@ void Seeker_Missile_Animate()
                self.think           = Seeker_Missile_Think;
                self.nextthink       = time;// + cvar("g_balance_seeker_missile_activate_delay"); // cant dealy with csqc projectiles
 
-               if (cvar("g_balance_seeker_guided_proxy"))
+               if (cvar("g_balance_seeker_missile_proxy"))
                        self.movetype    = MOVETYPE_BOUNCEMISSILE;
                else
                        self.movetype    = MOVETYPE_FLYMISSILE;
@@ -162,7 +165,7 @@ void Seeker_Fire_Missile(vector f_diff)
 {
        local entity missile;
 
-       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+       if not(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)
                self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_missile_ammo");
 
        makevectors(self.v_angle);
@@ -187,7 +190,6 @@ void Seeker_Fire_Missile(vector f_diff)
        missile.nextthink       = time;// + 0.2;// + cvar("g_balance_seeker_missile_activate_delay");
        missile.cnt             = time + cvar("g_balance_seeker_missile_lifetime");
        missile.enemy           = self.enemy;
-       missile.switchweapon           = cvar("g_balance_seeker_missile_speed");
        missile.solid           = SOLID_BBOX;
        missile.scale           = 2;
        missile.takedamage          = DAMAGE_YES;
@@ -203,8 +205,7 @@ void Seeker_Fire_Missile(vector f_diff)
 
        missile.flags       = FL_PROJECTILE;
 
-       missile.velocity    = (w_shotdir + '0 0 0.45') * missile.switchweapon;
-       W_SetupProjectileVelocity(missile);
+       W_SETUPPROJECTILEVELOCITY_UP(missile, g_balance_seeker_missile);
 
        missile.switchweapon = vlen(missile.velocity);
        missile.angles = vectoangles (missile.velocity);
@@ -218,7 +219,7 @@ void Seeker_Vollycontroler_Think()
        entity oldself,oldenemy;
        self.cnt = self.cnt - 1;
 
-       if ((self.owner.ammo_rockets < cvar("g_balance_seeker_missile_ammo")) || (self.cnt <= -1) || (self.owner.deadflag != DEAD_NO))
+       if((!(self.owner.items & IT_UNLIMITED_AMMO) && self.owner.ammo_rockets < cvar("g_balance_seeker_missile_ammo")) || (self.cnt <= -1) || (self.owner.deadflag != DEAD_NO))
        {
                remove(self);
                return;
@@ -344,9 +345,8 @@ void Seeker_Fire_Tag()
 
        missile.flags       = FL_PROJECTILE;
 
-       missile.velocity    = w_shotdir  * cvar("g_balance_seeker_tag_speed");
        missile.movetype    = MOVETYPE_FLY;
-       W_SetupProjectileVelocity(missile);
+       W_SETUPPROJECTILEVELOCITY(missile, g_balance_seeker_tag);
        missile.angles = vectoangles (missile.velocity);
 
        CSQCProjectile(missile, TRUE, PROJECTILE_TAG, FALSE); // has sound
@@ -357,7 +357,7 @@ void Seeker_Flac_Explode ()
 {
        self.event_damage = SUB_Null;
 
-       RadiusDamage (self, self.owner, cvar("g_balance_seeker_flac_damage"), cvar("g_balance_seeker_flac_edgedamage"), cvar("g_balance_seeker_flac_radius"), world, cvar("g_balance_seeker_flac_force"), self.projectiledeathtype, other, WEP_SEEKER);
+       RadiusDamage (self, self.owner, cvar("g_balance_seeker_flac_damage"), cvar("g_balance_seeker_flac_edgedamage"), cvar("g_balance_seeker_flac_radius"), world, cvar("g_balance_seeker_flac_force"), self.projectiledeathtype, other);
 
        remove (self);
 }
@@ -407,7 +407,7 @@ void Seeker_Fire_Flac()
        missile.bot_dodgerating = cvar("g_balance_seeker_flac_damage");
        missile.touch = Seeker_Flac_Explode;
        missile.use = Seeker_Flac_Explode;
-       missile.think = Seeker_Flac_Explode;
+       missile.think = adaptor_think2use_hittype_splash;
        missile.nextthink = time + cvar("g_balance_seeker_flac_lifetime") + cvar("g_balance_seeker_flac_lifetime_rand");
        missile.solid = SOLID_BBOX;
        missile.scale = 0.4; // BUG: the model is too big
@@ -417,10 +417,7 @@ void Seeker_Fire_Flac()
        missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
 
        missile.movetype = MOVETYPE_FLY;
-       w_shotdir = w_shotdir + '0 0 0.3';
-       missile.velocity    = (w_shotdir  + randomvec() * cvar("g_balance_seeker_flac_spread")) * cvar("g_balance_seeker_flac_speed");
-
-       W_SetupProjectileVelocity(missile);
+       W_SETUPPROJECTILEVELOCITY_UP(missile, g_balance_seeker_flac);
 
        missile.angles = vectoangles (missile.velocity);
        missile.flags = FL_PROJECTILE;
@@ -459,7 +456,7 @@ float w_seeker(float req)
        {
                precache_model ("models/weapons/g_seeker.md3");
                precache_model ("models/weapons/v_seeker.md3");
-               precache_model ("models/weapons/h_seeker.dpm");
+               precache_model ("models/weapons/h_seeker.iqm");
                precache_sound ("weapons/tag_fire.wav");
                precache_sound ("weapons/flac_fire.wav");
                precache_sound ("weapons/seeker_fire.wav");