]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/w_seeker.qc
Add weaponthrowable property to weapons
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / w_seeker.qc
index 34061dd15247c01b34bec312450bb843a3d5deee..4c448a10d331628a2f3686a62aa6192e22d39d87 100644 (file)
@@ -1,71 +1,80 @@
 #ifdef REGISTER_WEAPON
 REGISTER_WEAPON(
-/* WEP_##id */ SEEKER,
-/* function */ w_seeker,
-/* ammotype */ IT_ROCKETS,
-/* impulse  */ 8,
-/* flags    */ WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH,
-/* rating   */ BOT_PICKUP_RATING_MID,
-/* model    */ "seeker",
-/* netname  */ "seeker",
-/* fullname */ _("T.A.G. Seeker")
+/* WEP_##id  */ SEEKER,
+/* function  */ W_Seeker,
+/* ammotype  */ ammo_rockets,
+/* impulse   */ 8,
+/* flags     */ WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH,
+/* rating    */ BOT_PICKUP_RATING_MID,
+/* color     */ '0.5 1 0',
+/* modelname */ "seeker",
+/* simplemdl */ "foobar",
+/* crosshair */ "gfx/crosshairseeker 0.8",
+/* wepimg    */ "weaponseeker",
+/* refname   */ "seeker",
+/* wepname   */ _("T.A.G. Seeker")
 );
 
-#define SEEKER_SETTINGS(w_cvar,w_prop) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, type) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_ammo) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_animtime) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_damage) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_edgedamage) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_force) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_lifetime) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_lifetime_rand) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_radius) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_refire) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_speed) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_speed_up) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_speed_z) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, flac_spread) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_accel) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_ammo) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_animtime) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_count) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_damage) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_damageforcescale) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_decel) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_delay) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_edgedamage) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_force) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_health) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_lifetime) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_proxy) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_proxy_delay) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_proxy_maxrange) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_radius) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_refire) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_smart) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_smart_mindist) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_smart_trace_max) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_smart_trace_min) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_speed) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_speed_max) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_speed_up) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_speed_z) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_spread) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, missile_turnrate) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_ammo) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_animtime) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_damageforcescale) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_health) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_lifetime) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_refire) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_speed) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_spread) \
-       w_cvar(WEP_SEEKER, seeker, MO_NONE, tag_tracker_lifetime) \
-       w_prop(WEP_SEEKER, seeker, float,  reloading_ammo, reload_ammo) \
-       w_prop(WEP_SEEKER, seeker, float,  reloading_time, reload_time) \
-       w_prop(WEP_SEEKER, seeker, float,  switchdelay_raise, switchdelay_raise) \
-       w_prop(WEP_SEEKER, seeker, float,  switchdelay_drop, switchdelay_drop)
+#define SEEKER_SETTINGS(w_cvar,w_prop) SEEKER_SETTINGS_LIST(w_cvar, w_prop, SEEKER, seeker)
+#define SEEKER_SETTINGS_LIST(w_cvar,w_prop,id,sn) \
+       w_cvar(id, sn, NONE, type) \
+       w_cvar(id, sn, NONE, flac_ammo) \
+       w_cvar(id, sn, NONE, flac_animtime) \
+       w_cvar(id, sn, NONE, flac_damage) \
+       w_cvar(id, sn, NONE, flac_edgedamage) \
+       w_cvar(id, sn, NONE, flac_force) \
+       w_cvar(id, sn, NONE, flac_lifetime) \
+       w_cvar(id, sn, NONE, flac_lifetime_rand) \
+       w_cvar(id, sn, NONE, flac_radius) \
+       w_cvar(id, sn, NONE, flac_refire) \
+       w_cvar(id, sn, NONE, flac_speed) \
+       w_cvar(id, sn, NONE, flac_speed_up) \
+       w_cvar(id, sn, NONE, flac_speed_z) \
+       w_cvar(id, sn, NONE, flac_spread) \
+       w_cvar(id, sn, NONE, missile_accel) \
+       w_cvar(id, sn, NONE, missile_ammo) \
+       w_cvar(id, sn, NONE, missile_animtime) \
+       w_cvar(id, sn, NONE, missile_count) \
+       w_cvar(id, sn, NONE, missile_damage) \
+       w_cvar(id, sn, NONE, missile_damageforcescale) \
+       w_cvar(id, sn, NONE, missile_decel) \
+       w_cvar(id, sn, NONE, missile_delay) \
+       w_cvar(id, sn, NONE, missile_edgedamage) \
+       w_cvar(id, sn, NONE, missile_force) \
+       w_cvar(id, sn, NONE, missile_health) \
+       w_cvar(id, sn, NONE, missile_lifetime) \
+       w_cvar(id, sn, NONE, missile_proxy) \
+       w_cvar(id, sn, NONE, missile_proxy_delay) \
+       w_cvar(id, sn, NONE, missile_proxy_maxrange) \
+       w_cvar(id, sn, NONE, missile_radius) \
+       w_cvar(id, sn, NONE, missile_refire) \
+       w_cvar(id, sn, NONE, missile_smart) \
+       w_cvar(id, sn, NONE, missile_smart_mindist) \
+       w_cvar(id, sn, NONE, missile_smart_trace_max) \
+       w_cvar(id, sn, NONE, missile_smart_trace_min) \
+       w_cvar(id, sn, NONE, missile_speed) \
+       w_cvar(id, sn, NONE, missile_speed_max) \
+       w_cvar(id, sn, NONE, missile_speed_up) \
+       w_cvar(id, sn, NONE, missile_speed_z) \
+       w_cvar(id, sn, NONE, missile_spread) \
+       w_cvar(id, sn, NONE, missile_turnrate) \
+       w_cvar(id, sn, NONE, tag_ammo) \
+       w_cvar(id, sn, NONE, tag_animtime) \
+       w_cvar(id, sn, NONE, tag_damageforcescale) \
+       w_cvar(id, sn, NONE, tag_health) \
+       w_cvar(id, sn, NONE, tag_lifetime) \
+       w_cvar(id, sn, NONE, tag_refire) \
+       w_cvar(id, sn, NONE, tag_speed) \
+       w_cvar(id, sn, NONE, tag_spread) \
+       w_cvar(id, sn, NONE, tag_tracker_lifetime) \
+       w_prop(id, sn, float,  reloading_ammo, reload_ammo) \
+       w_prop(id, sn, float,  reloading_time, reload_time) \
+       w_prop(id, sn, float,  switchdelay_raise, switchdelay_raise) \
+       w_prop(id, sn, float,  switchdelay_drop, switchdelay_drop) \
+       w_prop(id, sn, string, weaponreplace, weaponreplace) \
+       w_prop(id, sn, float,  weaponstart, weaponstart) \
+       w_prop(id, sn, float,  weaponstartoverride, weaponstartoverride) \
+       w_prop(id, sn, float,  weaponthrowable, weaponthrowable)
 
 #ifdef SVQC
 SEEKER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
@@ -79,7 +88,7 @@ void spawnfunc_weapon_seeker (void) { weapon_defaultspawnfunc(WEP_SEEKER); }
 // ============================
 // Begin: Missile functions, these are general functions to be manipulated by other code
 // ============================
-void Seeker_Missile_Explode ()
+void W_Seeker_Missile_Explode()
 {
        self.event_damage = func_null;
        RadiusDamage (self, self.realowner, WEP_CVAR(seeker, missile_damage), WEP_CVAR(seeker, missile_edgedamage), WEP_CVAR(seeker, missile_radius), world, world, WEP_CVAR(seeker, missile_force), self.projectiledeathtype, other);
@@ -87,14 +96,14 @@ void Seeker_Missile_Explode ()
        remove (self);
 }
 
-void Seeker_Missile_Touch()
+void W_Seeker_Missile_Touch()
 {
        PROJECTILE_TOUCH;
 
-       Seeker_Missile_Explode();
+       W_Seeker_Missile_Explode();
 }
 
-void Seeker_Missile_Think()
+void W_Seeker_Missile_Think()
 {
        entity e;
        vector desireddir, olddir, newdir, eorg;
@@ -105,7 +114,7 @@ void Seeker_Missile_Think()
        if (time > self.cnt)
        {
                self.projectiledeathtype |= HITTYPE_SPLASH;
-               Seeker_Missile_Explode();
+               W_Seeker_Missile_Explode();
        }
 
        spd = vlen(self.velocity);
@@ -163,7 +172,7 @@ void Seeker_Missile_Think()
                        {
                                if (self.autoswitch <= time)
                                {
-                                       Seeker_Missile_Explode();
+                                       W_Seeker_Missile_Explode();
                                        self.autoswitch = 0;
                                }
                        }
@@ -191,7 +200,7 @@ void Seeker_Missile_Think()
 
 
 
-void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+void W_Seeker_Missile_Damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
        if (self.health <= 0)
                return;
@@ -205,11 +214,11 @@ void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, flo
                self.health = self.health - damage;
 
        if (self.health <= 0)
-               W_PrepareExplosionByDamage(attacker, Seeker_Missile_Explode);
+               W_PrepareExplosionByDamage(attacker, W_Seeker_Missile_Explode);
 }
 
 /*
-void Seeker_Missile_Animate()
+void W_Seeker_Missile_Animate()
 {
        self.frame = self.frame +1;
        self.nextthink = time + 0.05;
@@ -220,7 +229,7 @@ void Seeker_Missile_Animate()
 
        if(self.frame == 5)
        {
-               self.think           = Seeker_Missile_Think;
+               self.think           = W_Seeker_Missile_Think;
                self.nextthink       = time;// + cvar("g_balance_seeker_missile_activate_delay"); // cant dealy with csqc projectiles
 
                if (autocvar_g_balance_seeker_missile_proxy)
@@ -233,11 +242,11 @@ void Seeker_Missile_Animate()
 }
 */
 
-void Seeker_Fire_Missile(vector f_diff, entity m_target)
+void W_Seeker_Fire_Missile(vector f_diff, entity m_target)
 {
        entity missile;
 
-       W_DecreaseAmmo(ammo_rockets, WEP_CVAR(seeker, missile_ammo), autocvar_g_balance_seeker_reload_ammo);
+       W_DecreaseAmmo(WEP_CVAR(seeker, missile_ammo));
 
        makevectors(self.v_angle);
        W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/seeker_fire.wav", CH_WEAPON_A, 0);
@@ -252,9 +261,9 @@ void Seeker_Fire_Missile(vector f_diff, entity m_target)
        missile.bot_dodge       = TRUE;
        missile.bot_dodgerating = WEP_CVAR(seeker, missile_damage);
 
-       missile.think           = Seeker_Missile_Think;
-       missile.touch           = Seeker_Missile_Touch;
-       missile.event_damage    = Seeker_Missile_Damage;
+       missile.think           = W_Seeker_Missile_Think;
+       missile.touch           = W_Seeker_Missile_Touch;
+       missile.event_damage    = W_Seeker_Missile_Damage;
        missile.nextthink       = time;// + 0.2;// + cvar("g_balance_seeker_missile_activate_delay");
        missile.cnt             = time + WEP_CVAR(seeker, missile_lifetime);
        missile.enemy           = m_target;
@@ -264,7 +273,7 @@ void Seeker_Fire_Missile(vector f_diff, entity m_target)
        missile.health          = WEP_CVAR(seeker, missile_health);
        missile.damageforcescale = WEP_CVAR(seeker, missile_damageforcescale);
        missile.damagedbycontents = TRUE;
-       //missile.think           = Seeker_Missile_Animate; // csqc projectiles.
+       //missile.think           = W_Seeker_Missile_Animate; // csqc projectiles.
 
        if (missile.enemy != world)
                missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
@@ -278,7 +287,7 @@ void Seeker_Fire_Missile(vector f_diff, entity m_target)
        missile.flags       = FL_PROJECTILE;
        missile.missile_flags = MIF_SPLASH | MIF_GUIDED_TAG;
 
-       WEP_SETUPPROJVELOCITY_UP_NONE(missile, seeker, missile_);
+       W_SetupProjVelocity_UP_PRE(missile, seeker, missile_);
 
        missile.angles = vectoangles (missile.velocity);
 
@@ -290,7 +299,7 @@ void Seeker_Fire_Missile(vector f_diff, entity m_target)
 // ============================
 // Begin: FLAC, close range attack meant for defeating rockets which are coming at you.
 // ============================
-void Seeker_Flac_Explode ()
+void W_Seeker_Flac_Explode()
 {
        self.event_damage = func_null;
 
@@ -299,20 +308,20 @@ void Seeker_Flac_Explode ()
        remove (self);
 }
 
-void Seeker_Flac_Touch()
+void W_Seeker_Flac_Touch()
 {
        PROJECTILE_TOUCH;
 
-       Seeker_Flac_Explode();
+       W_Seeker_Flac_Explode();
 }
 
-void Seeker_Fire_Flac()
+void W_Seeker_Fire_Flac()
 {
        entity missile;
        vector f_diff;
        float c;
 
-       W_DecreaseAmmo(ammo_rockets, WEP_CVAR(seeker, flac_ammo), autocvar_g_balance_seeker_reload_ammo);
+       W_DecreaseAmmo(WEP_CVAR(seeker, flac_ammo));
 
        c = mod(self.bulletcounter, 4);
        switch(c)
@@ -341,8 +350,8 @@ void Seeker_Fire_Flac()
        missile.classname               = "missile";
        missile.bot_dodge               = TRUE;
        missile.bot_dodgerating = WEP_CVAR(seeker, flac_damage);
-       missile.touch                   = Seeker_Flac_Explode;
-       missile.use                     = Seeker_Flac_Explode;
+       missile.touch                   = W_Seeker_Flac_Explode;
+       missile.use                     = W_Seeker_Flac_Explode;
        missile.think                   = adaptor_think2use_hittype_splash;
        missile.nextthink               = time + WEP_CVAR(seeker, flac_lifetime) + WEP_CVAR(seeker, flac_lifetime_rand);
        missile.solid                   = SOLID_BBOX;
@@ -359,7 +368,7 @@ void Seeker_Fire_Flac()
        setorigin (missile, w_shotorg);
        setsize (missile, '-2 -2 -2', '2 2 2');
 
-       WEP_SETUPPROJVELOCITY_UP_NONE(missile, seeker, flac_);
+       W_SetupProjVelocity_UP_PRE(missile, seeker, flac_);
        CSQCProjectile(missile, TRUE, PROJECTILE_FLAC, TRUE);
 
        other = missile; MUTATOR_CALLHOOK(EditProjectile);
@@ -368,7 +377,7 @@ void Seeker_Fire_Flac()
 // ============================
 // Begin: Tag and rocket controllers
 // ============================
-entity Seeker_Tagged_Info(entity isowner, entity istarget)
+entity W_Seeker_Tagged_Info(entity isowner, entity istarget)
 {
        entity tag;
        for(tag = world; (tag = find(tag, classname, "tag_tracker")); )
@@ -378,7 +387,7 @@ entity Seeker_Tagged_Info(entity isowner, entity istarget)
        return world;
 }
 
-void Seeker_Attack()
+void W_Seeker_Attack()
 {
        entity tracker, closest_target;
 
@@ -398,16 +407,16 @@ void Seeker_Attack()
        if ((!closest_target) || ((trace_fraction < 1) && (trace_ent != closest_target)))
                closest_target = world;
 
-       Seeker_Fire_Missile('0 0 0', closest_target);
+       W_Seeker_Fire_Missile('0 0 0', closest_target);
 }
 
-void Seeker_Vollycontroller_Think() // TODO: Merge this with Seeker_Attack
+void W_Seeker_Vollycontroller_Think() // TODO: Merge this with W_Seeker_Attack
 {
        float c;
        entity oldself,oldenemy;
        self.cnt = self.cnt - 1;
 
-       if((!(self.realowner.items & IT_UNLIMITED_AMMO) && self.realowner.ammo_rockets < WEP_CVAR(seeker, missile_ammo)) || (self.cnt <= -1) || (self.realowner.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER))
+       if((!(self.realowner.items & IT_UNLIMITED_AMMO) && self.realowner.WEP_AMMO(SEEKER) < WEP_CVAR(seeker, missile_ammo)) || (self.cnt <= -1) || (self.realowner.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER))
        {
                remove(self);
                return;
@@ -425,17 +434,17 @@ void Seeker_Vollycontroller_Think() // TODO: Merge this with Seeker_Attack
        switch(c)
        {
                case 0:
-                       Seeker_Fire_Missile('-1.25 -3.75 0', self.enemy);
+                       W_Seeker_Fire_Missile('-1.25 -3.75 0', self.enemy);
                        break;
                case 1:
-                       Seeker_Fire_Missile('+1.25 -3.75 0', self.enemy);
+                       W_Seeker_Fire_Missile('+1.25 -3.75 0', self.enemy);
                        break;
                case 2:
-                       Seeker_Fire_Missile('-1.25 +3.75 0', self.enemy);
+                       W_Seeker_Fire_Missile('-1.25 +3.75 0', self.enemy);
                        break;
                case 3:
                default:
-                       Seeker_Fire_Missile('+1.25 +3.75 0', self.enemy);
+                       W_Seeker_Fire_Missile('+1.25 +3.75 0', self.enemy);
                        break;
        }
 
@@ -443,7 +452,7 @@ void Seeker_Vollycontroller_Think() // TODO: Merge this with Seeker_Attack
        self = oldself;
 }
 
-void Seeker_Tracker_Think()
+void W_Seeker_Tracker_Think()
 {
        // commit suicide if: You die OR target dies OR you switch away from the seeker OR commit suicide if lifetime is up
        if ((self.realowner.deadflag != DEAD_NO) || (self.tag_target.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER)
@@ -464,7 +473,7 @@ void Seeker_Tracker_Think()
 // ============================
 // Begin: Tag projectile
 // ============================
-void Seeker_Tag_Explode ()
+void W_Seeker_Tag_Explode()
 {
        //if(other==self.realowner)
        //    return;
@@ -473,16 +482,16 @@ void Seeker_Tag_Explode ()
        remove (self);
 }
 
-void Seeker_Tag_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+void W_Seeker_Tag_Damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
        if (self.health <= 0)
                return;
        self.health = self.health - damage;
        if (self.health <= 0)
-               Seeker_Tag_Explode();
+               W_Seeker_Tag_Explode();
 }
 
-void Seeker_Tag_Touch()
+void W_Seeker_Tag_Touch()
 {
        vector dir;
        vector org2;
@@ -501,7 +510,7 @@ void Seeker_Tag_Touch()
        if (other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO)
        {
                // check to see if this person is already tagged by me
-               entity tag = Seeker_Tagged_Info(self.realowner, other);
+               entity tag = W_Seeker_Tagged_Info(self.realowner, other);
 
                if (tag != world)
                {
@@ -523,12 +532,12 @@ void Seeker_Tag_Touch()
                        {
                                e.tag_target  = other;
                                e.tag_time    = time;
-                               e.think       = Seeker_Tracker_Think;
+                               e.think       = W_Seeker_Tracker_Think;
                        }
                        else
                        {
                                e.enemy     = other;
-                               e.think     = Seeker_Vollycontroller_Think;
+                               e.think     = W_Seeker_Vollycontroller_Think;
                        }
 
                        e.nextthink   = time;
@@ -545,10 +554,10 @@ void Seeker_Tag_Touch()
        return;
 }
 
-void Seeker_Fire_Tag()
+void W_Seeker_Fire_Tag()
 {
        entity missile;
-       W_DecreaseAmmo(ammo_rockets, WEP_CVAR(seeker, tag_ammo), autocvar_g_balance_seeker_reload_ammo);
+       W_DecreaseAmmo(WEP_CVAR(seeker, tag_ammo));
 
        W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/tag_fire.wav", CH_WEAPON_A, WEP_CVAR(seeker, missile_damage) * WEP_CVAR(seeker, missile_count));
 
@@ -557,14 +566,14 @@ void Seeker_Fire_Tag()
        missile.classname       = "seeker_tag";
        missile.bot_dodge       = TRUE;
        missile.bot_dodgerating = 50;
-       missile.touch           = Seeker_Tag_Touch;
+       missile.touch           = W_Seeker_Tag_Touch;
        missile.think           = SUB_Remove;
        missile.nextthink       = time + WEP_CVAR(seeker, tag_lifetime);
        missile.movetype        = MOVETYPE_FLY;
        missile.solid           = SOLID_BBOX;
 
        missile.takedamage       = DAMAGE_YES;
-       missile.event_damage     = Seeker_Tag_Damage;
+       missile.event_damage     = W_Seeker_Tag_Damage;
        missile.health           = WEP_CVAR(seeker, tag_health);
        missile.damageforcescale = WEP_CVAR(seeker, tag_damageforcescale);
 
@@ -575,7 +584,7 @@ void Seeker_Fire_Tag()
        //missile.missile_flags = MIF_..?;
 
        missile.movetype    = MOVETYPE_FLY;
-       WEP_SETUPPROJVELOCITY_NONE(missile, seeker, tag_);
+       W_SetupProjVelocity_PRE(missile, seeker, tag_);
        missile.angles = vectoangles (missile.velocity);
 
        CSQCProjectile(missile, TRUE, PROJECTILE_TAG, FALSE); // has sound
@@ -587,7 +596,7 @@ void Seeker_Fire_Tag()
 // Begin: Genereal weapon functions
 // ============================
 
-float w_seeker(float req)
+float W_Seeker(float req)
 {
        float ammo_amount;
 
@@ -596,7 +605,7 @@ float w_seeker(float req)
                case WR_AIM:
                {
                        if (WEP_CVAR(seeker, type) == 1)
-                               if (Seeker_Tagged_Info(self, self.enemy) != world)
+                               if (W_Seeker_Tagged_Info(self, self.enemy) != world)
                                        self.BUTTON_ATCK = bot_aim(WEP_CVAR(seeker, missile_speed_max), 0, WEP_CVAR(seeker, missile_lifetime), FALSE);
                                else
                                        self.BUTTON_ATCK2 = bot_aim(WEP_CVAR(seeker, tag_speed), 0, WEP_CVAR(seeker, tag_lifetime), FALSE);
@@ -615,7 +624,7 @@ float w_seeker(float req)
                                {
                                        if (weapon_prepareattack(0, WEP_CVAR(seeker, missile_refire)))
                                        {
-                                               Seeker_Attack();
+                                               W_Seeker_Attack();
                                                weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(seeker, missile_animtime), w_ready);
                                        }
                                }
@@ -623,7 +632,7 @@ float w_seeker(float req)
                                {
                                        if (weapon_prepareattack(0, WEP_CVAR(seeker, tag_refire)))
                                        {
-                                               Seeker_Fire_Tag();
+                                               W_Seeker_Fire_Tag();
                                                weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(seeker, tag_animtime), w_ready);
                                        }
                                }
@@ -635,7 +644,7 @@ float w_seeker(float req)
                                {
                                        if (weapon_prepareattack(0, WEP_CVAR(seeker, tag_refire)))
                                        {
-                                               Seeker_Fire_Tag();
+                                               W_Seeker_Fire_Tag();
                                                weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(seeker, tag_animtime), w_ready);
                                        }
                                }
@@ -643,7 +652,7 @@ float w_seeker(float req)
                                {
                                        if (weapon_prepareattack(0, WEP_CVAR(seeker, flac_refire)))
                                        {
-                                               Seeker_Fire_Flac();
+                                               W_Seeker_Fire_Flac();
                                                weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(seeker, flac_animtime), w_ready);
                                        }
                                }
@@ -659,24 +668,19 @@ float w_seeker(float req)
                        precache_sound ("weapons/tag_fire.wav");
                        precache_sound ("weapons/flac_fire.wav");
                        precache_sound ("weapons/seeker_fire.wav");
-                       SEEKER_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP)
-                       return TRUE;
-               }
-               case WR_SETUP:
-               {
-                       self.current_ammo = ammo_rockets;
+                       SEEKER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP)
                        return TRUE;
                }
                case WR_CHECKAMMO1:
                {
                        if (WEP_CVAR(seeker, type) == 1)
                        {
-                               ammo_amount = self.ammo_rockets >= WEP_CVAR(seeker, missile_ammo);
+                               ammo_amount = self.WEP_AMMO(SEEKER) >= WEP_CVAR(seeker, missile_ammo);
                                ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, missile_ammo);
                        }
                        else
                        {
-                               ammo_amount = self.ammo_rockets >= WEP_CVAR(seeker, tag_ammo);
+                               ammo_amount = self.WEP_AMMO(SEEKER) >= WEP_CVAR(seeker, tag_ammo);
                                ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, tag_ammo);
                        }
                        return ammo_amount;
@@ -685,12 +689,12 @@ float w_seeker(float req)
                {
                        if (WEP_CVAR(seeker, type) == 1)
                        {
-                               ammo_amount = self.ammo_rockets >= WEP_CVAR(seeker, tag_ammo);
+                               ammo_amount = self.WEP_AMMO(SEEKER) >= WEP_CVAR(seeker, tag_ammo);
                                ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, tag_ammo);
                        }
                        else
                        {
-                               ammo_amount = self.ammo_rockets >= WEP_CVAR(seeker, flac_ammo);
+                               ammo_amount = self.WEP_AMMO(SEEKER) >= WEP_CVAR(seeker, flac_ammo);
                                ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, flac_ammo);
                        }
                        return ammo_amount;
@@ -717,11 +721,11 @@ float w_seeker(float req)
                                return WEAPON_SEEKER_MURDER_SPRAY;
                }
        }
-       return TRUE;
+       return FALSE;
 }
 #endif
 #ifdef CSQC
-float w_seeker(float req)
+float W_Seeker(float req)
 {
        switch(req)
        {
@@ -776,9 +780,13 @@ float w_seeker(float req)
                        precache_sound("weapons/tag_impact.wav");
                        return TRUE;
                }
+               case WR_ZOOMRETICLE:
+               {
+                       // no weapon specific image for this weapon
+                       return FALSE;
+               }
        }
-
-       return TRUE;
+       return FALSE;
 }
 #endif
 #endif