]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/weapon/vaporizer.qc
Merge branch 'master' into TimePath/notifications
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / weapon / vaporizer.qc
index e568acac1f9fe6a81d3f9833890e64c95070e994..92c795421a401cb88e6d50490e28e48a5bf73d31 100644 (file)
@@ -339,168 +339,168 @@ void W_RocketMinsta_Attack3 ()
     }
 }
 
-               METHOD(Vaporizer, wr_aim, void(entity thiswep))
-               {
-                       if(self.(thiswep.ammo_field) > 0)
-                               self.BUTTON_ATCK = bot_aim(1000000, 0, 1, false);
-                       else
-                               self.BUTTON_ATCK2 = bot_aim(WEP_CVAR_SEC(vaporizer, speed), 0, WEP_CVAR_SEC(vaporizer, lifetime), false); // WEAPONTODO: replace with proper vaporizer cvars
-               }
-               METHOD(Vaporizer, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire))
-               {
-                       float vaporizer_ammo = ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo));
-                       // if the laser uses load, we also consider its ammo for reloading
-                       if(WEP_CVAR(vaporizer, reload_ammo) && WEP_CVAR_SEC(vaporizer, ammo) && actor.clip_load < min(vaporizer_ammo, WEP_CVAR_SEC(vaporizer, ammo))) { // forced reload
-                               thiswep.wr_reload(thiswep, actor, weaponentity);
-                       } else if(WEP_CVAR(vaporizer, reload_ammo) && actor.clip_load < vaporizer_ammo) { // forced reload
-                               thiswep.wr_reload(thiswep, actor, weaponentity);
-                       }
-                       if((fire & 1) && (actor.ammo_cells || !autocvar_g_rm) && !forbidWeaponUse(actor))
-                       {
-                               if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(vaporizer, refire)))
-                               {
-                                       W_Vaporizer_Attack(thiswep);
-                                       weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(vaporizer, animtime), w_ready);
-                               }
-                       }
-                       if((fire & 2) || ((fire & 1) && !actor.ammo_cells && autocvar_g_rm))
-                       {
-                               if((autocvar_g_rm && autocvar_g_rm_laser) || autocvar_g_rm_laser == 2)
-                               {
-                                       bool rapid = autocvar_g_rm_laser_rapid;
-                                       if(actor.jump_interval <= time && !actor.held_down)
-                                       {
-                                               if(rapid)
-                                                       actor.held_down = true;
-                                               actor.jump_interval = time + autocvar_g_rm_laser_refire;
-                                               actor.jump_interval2 = time + autocvar_g_rm_laser_rapid_delay;
-                                               damage_goodhits = 0;
-                                               W_RocketMinsta_Attack2();
-                                       }
-                                       else if(rapid && actor.jump_interval2 <= time && actor.held_down)
-                                       {
-                                               actor.jump_interval2 = time + autocvar_g_rm_laser_rapid_refire;
-                                               damage_goodhits = 0;
-                                               W_RocketMinsta_Attack3();
-                                               //weapon_thinkf(actor, WFRAME_FIRE2, autocvar_g_rm_laser_rapid_animtime, w_ready);
-                                       }
-                               }
-                               else if (actor.jump_interval <= time)
-                               {
-                                       // handle refire manually, so that primary and secondary can be fired without conflictions (important for instagib)
-                                       actor.jump_interval = time + WEP_CVAR_SEC(vaporizer, refire) * W_WeaponRateFactor();
-
-                                       // decrease ammo for the laser?
-                                       if(WEP_CVAR_SEC(vaporizer, ammo))
-                                               W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(vaporizer, ammo));
-
-                                       // ugly instagib hack to reuse the fire mode of the laser
-                                       makevectors(actor.v_angle);
-                                       Weapon oldwep = PS(actor).m_weapon; // we can't avoid this hack
-                                       PS(actor).m_weapon = WEP_BLASTER;
-                                       W_Blaster_Attack(
-                                               actor,
-                                               WEP_BLASTER.m_id | HITTYPE_SECONDARY,
-                                               WEP_CVAR_SEC(vaporizer, shotangle),
-                                               WEP_CVAR_SEC(vaporizer, damage),
-                                               WEP_CVAR_SEC(vaporizer, edgedamage),
-                                               WEP_CVAR_SEC(vaporizer, radius),
-                                               WEP_CVAR_SEC(vaporizer, force),
-                                               WEP_CVAR_SEC(vaporizer, speed),
-                                               WEP_CVAR_SEC(vaporizer, spread),
-                                               WEP_CVAR_SEC(vaporizer, delay),
-                                               WEP_CVAR_SEC(vaporizer, lifetime)
-                                       );
-                                       PS(actor).m_weapon = oldwep;
-
-                                       // now do normal refire
-                                       weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(vaporizer, animtime), w_ready);
-                               }
-                       }
-                       else
-                               actor.held_down = false;
-               }
-               METHOD(Vaporizer, wr_setup, void(entity thiswep))
-               {
-                       self.ammo_field = (thiswep.ammo_field);
-                       self.vaporizer_lasthit = 0;
-               }
-               METHOD(Vaporizer, wr_checkammo1, bool(entity thiswep))
-               {
-                       float vaporizer_ammo = ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo));
-                       float ammo_amount = self.(thiswep.ammo_field) >= vaporizer_ammo;
-                       ammo_amount += self.(weapon_load[WEP_VAPORIZER.m_id]) >= vaporizer_ammo;
-                       return ammo_amount;
-               }
-               METHOD(Vaporizer, wr_checkammo2, bool(entity thiswep))
-               {
-                       if(!WEP_CVAR_SEC(vaporizer, ammo))
-                               return true;
-                       float ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR_SEC(vaporizer, ammo);
-                       ammo_amount += self.(weapon_load[WEP_VAPORIZER.m_id]) >= WEP_CVAR_SEC(vaporizer, ammo);
-                       return ammo_amount;
-               }
-               METHOD(Vaporizer, wr_resetplayer, void(entity thiswep))
-               {
-                       self.vaporizer_lasthit = 0;
-               }
-               METHOD(Vaporizer, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))
-               {
-                       float vaporizer_ammo = ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo));
-                       float used_ammo;
-                       if(WEP_CVAR_SEC(vaporizer, ammo))
-                               used_ammo = min(vaporizer_ammo, WEP_CVAR_SEC(vaporizer, ammo));
-                       else
-                               used_ammo = vaporizer_ammo;
-
-                       W_Reload(self, used_ammo, SND(RELOAD));
-               }
-               METHOD(Vaporizer, wr_suicidemessage, Notification(entity thiswep))
-               {
-                       return WEAPON_THINKING_WITH_PORTALS;
-               }
-               METHOD(Vaporizer, wr_killmessage, Notification(entity thiswep))
-               {
-                       return WEAPON_VAPORIZER_MURDER;
-               }
+METHOD(Vaporizer, wr_aim, void(entity thiswep))
+{
+    if(self.(thiswep.ammo_field) > 0)
+        PHYS_INPUT_BUTTON_ATCK(self) = bot_aim(1000000, 0, 1, false);
+    else
+        PHYS_INPUT_BUTTON_ATCK2(self) = bot_aim(WEP_CVAR_SEC(vaporizer, speed), 0, WEP_CVAR_SEC(vaporizer, lifetime), false); // WEAPONTODO: replace with proper vaporizer cvars
+}
+METHOD(Vaporizer, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire))
+{
+    float vaporizer_ammo = ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo));
+    // if the laser uses load, we also consider its ammo for reloading
+    if(WEP_CVAR(vaporizer, reload_ammo) && WEP_CVAR_SEC(vaporizer, ammo) && actor.clip_load < min(vaporizer_ammo, WEP_CVAR_SEC(vaporizer, ammo))) { // forced reload
+        thiswep.wr_reload(thiswep, actor, weaponentity);
+    } else if(WEP_CVAR(vaporizer, reload_ammo) && actor.clip_load < vaporizer_ammo) { // forced reload
+        thiswep.wr_reload(thiswep, actor, weaponentity);
+    }
+    if((fire & 1) && (actor.ammo_cells || !autocvar_g_rm) && !forbidWeaponUse(actor))
+    {
+        if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(vaporizer, refire)))
+        {
+            W_Vaporizer_Attack(thiswep);
+            weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(vaporizer, animtime), w_ready);
+        }
+    }
+    if((fire & 2) || ((fire & 1) && !actor.ammo_cells && autocvar_g_rm))
+    {
+        if((autocvar_g_rm && autocvar_g_rm_laser) || autocvar_g_rm_laser == 2)
+        {
+            bool rapid = autocvar_g_rm_laser_rapid;
+            if(actor.jump_interval <= time && !actor.held_down)
+            {
+                if(rapid)
+                    actor.held_down = true;
+                actor.jump_interval = time + autocvar_g_rm_laser_refire;
+                actor.jump_interval2 = time + autocvar_g_rm_laser_rapid_delay;
+                damage_goodhits = 0;
+                W_RocketMinsta_Attack2();
+            }
+            else if(rapid && actor.jump_interval2 <= time && actor.held_down)
+            {
+                actor.jump_interval2 = time + autocvar_g_rm_laser_rapid_refire;
+                damage_goodhits = 0;
+                W_RocketMinsta_Attack3();
+                //weapon_thinkf(actor, WFRAME_FIRE2, autocvar_g_rm_laser_rapid_animtime, w_ready);
+            }
+        }
+        else if (actor.jump_interval <= time)
+        {
+            // handle refire manually, so that primary and secondary can be fired without conflictions (important for instagib)
+            actor.jump_interval = time + WEP_CVAR_SEC(vaporizer, refire) * W_WeaponRateFactor();
+
+            // decrease ammo for the laser?
+            if(WEP_CVAR_SEC(vaporizer, ammo))
+                W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(vaporizer, ammo));
+
+            // ugly instagib hack to reuse the fire mode of the laser
+            makevectors(actor.v_angle);
+            Weapon oldwep = PS(actor).m_weapon; // we can't avoid this hack
+            PS(actor).m_weapon = WEP_BLASTER;
+            W_Blaster_Attack(
+                actor,
+                WEP_BLASTER.m_id | HITTYPE_SECONDARY,
+                WEP_CVAR_SEC(vaporizer, shotangle),
+                WEP_CVAR_SEC(vaporizer, damage),
+                WEP_CVAR_SEC(vaporizer, edgedamage),
+                WEP_CVAR_SEC(vaporizer, radius),
+                WEP_CVAR_SEC(vaporizer, force),
+                WEP_CVAR_SEC(vaporizer, speed),
+                WEP_CVAR_SEC(vaporizer, spread),
+                WEP_CVAR_SEC(vaporizer, delay),
+                WEP_CVAR_SEC(vaporizer, lifetime)
+            );
+            PS(actor).m_weapon = oldwep;
+
+            // now do normal refire
+            weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(vaporizer, animtime), w_ready);
+        }
+    }
+    else
+        actor.held_down = false;
+}
+METHOD(Vaporizer, wr_setup, void(entity thiswep))
+{
+    self.ammo_field = (thiswep.ammo_field);
+    self.vaporizer_lasthit = 0;
+}
+METHOD(Vaporizer, wr_checkammo1, bool(entity thiswep))
+{
+    float vaporizer_ammo = ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo));
+    float ammo_amount = self.(thiswep.ammo_field) >= vaporizer_ammo;
+    ammo_amount += self.(weapon_load[WEP_VAPORIZER.m_id]) >= vaporizer_ammo;
+    return ammo_amount;
+}
+METHOD(Vaporizer, wr_checkammo2, bool(entity thiswep))
+{
+    if(!WEP_CVAR_SEC(vaporizer, ammo))
+        return true;
+    float ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR_SEC(vaporizer, ammo);
+    ammo_amount += self.(weapon_load[WEP_VAPORIZER.m_id]) >= WEP_CVAR_SEC(vaporizer, ammo);
+    return ammo_amount;
+}
+METHOD(Vaporizer, wr_resetplayer, void(entity thiswep))
+{
+    self.vaporizer_lasthit = 0;
+}
+METHOD(Vaporizer, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))
+{
+    float vaporizer_ammo = ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo));
+    float used_ammo;
+    if(WEP_CVAR_SEC(vaporizer, ammo))
+        used_ammo = min(vaporizer_ammo, WEP_CVAR_SEC(vaporizer, ammo));
+    else
+        used_ammo = vaporizer_ammo;
+
+    W_Reload(self, used_ammo, SND(RELOAD));
+}
+METHOD(Vaporizer, wr_suicidemessage, Notification(entity thiswep))
+{
+    return WEAPON_THINKING_WITH_PORTALS;
+}
+METHOD(Vaporizer, wr_killmessage, Notification(entity thiswep))
+{
+    return WEAPON_VAPORIZER_MURDER;
+}
 
 #endif
 #ifdef CSQC
 
-               METHOD(Vaporizer, wr_impacteffect, void(entity thiswep))
-               {
-                       vector org2 = w_org + w_backoff * 6;
-                       if(w_deathtype & HITTYPE_SECONDARY)
-                       {
-                               pointparticles(EFFECT_BLASTER_IMPACT, org2, w_backoff * 1000, 1);
-                               if(!w_issilent) { sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM); }
-                       }
-                       else
-                       {
-                               pointparticles(EFFECT_VORTEX_IMPACT, org2, '0 0 0', 1);
-                               if(!w_issilent) { sound(self, CH_SHOTS, SND_NEXIMPACT, VOL_BASE, ATTN_NORM); }
-                       }
-               }
-               METHOD(Vaporizer, wr_init, void(entity thiswep))
-               {
-                       if(autocvar_cl_reticle && autocvar_cl_reticle_weapon)
-                       {
-                               precache_pic("gfx/reticle_nex");
-                       }
-               }
-               METHOD(Vaporizer, wr_zoomreticle, bool(entity thiswep))
-               {
-                       if(button_zoom || zoomscript_caught)
-                       {
-                               reticle_image = "gfx/reticle_nex";
-                               return true;
-                       }
-                       else
-                       {
-                               // no weapon specific image for this weapon
-                               return false;
-                       }
-               }
+METHOD(Vaporizer, wr_impacteffect, void(entity thiswep))
+{
+    vector org2 = w_org + w_backoff * 6;
+    if(w_deathtype & HITTYPE_SECONDARY)
+    {
+        pointparticles(EFFECT_BLASTER_IMPACT, org2, w_backoff * 1000, 1);
+        if(!w_issilent) { sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM); }
+    }
+    else
+    {
+        pointparticles(EFFECT_VORTEX_IMPACT, org2, '0 0 0', 1);
+        if(!w_issilent) { sound(self, CH_SHOTS, SND_NEXIMPACT, VOL_BASE, ATTN_NORM); }
+    }
+}
+METHOD(Vaporizer, wr_init, void(entity thiswep))
+{
+    if(autocvar_cl_reticle && autocvar_cl_reticle_weapon)
+    {
+        precache_pic("gfx/reticle_nex");
+    }
+}
+METHOD(Vaporizer, wr_zoomreticle, bool(entity thiswep))
+{
+    if(button_zoom || zoomscript_caught)
+    {
+        reticle_image = "gfx/reticle_nex";
+        return true;
+    }
+    else
+    {
+        // no weapon specific image for this weapon
+        return false;
+    }
+}
 
 #endif
 #endif