Merge branch 'master' into Mario/hagar_notfixed
authorMario <mario@smbclan.net>
Thu, 24 Mar 2016 20:08:41 +0000 (06:08 +1000)
committerMario <mario@smbclan.net>
Thu, 24 Mar 2016 20:08:41 +0000 (06:08 +1000)
# Conflicts:
# qcsrc/common/weapons/weapon/hagar.qc

1  2 
qcsrc/client/view.qc
qcsrc/common/weapons/weapon/hagar.qc

Simple merge
@@@ -397,125 -397,106 +397,134 @@@ void W_Hagar_Attack2_Load(Weapon thiswe
        }
  }
  
-       int theframe = WFRAME_FIRE1;
 +void W_Hagar_Attack_Auto(Weapon thiswep, entity actor, .entity weaponentity, int fire)
 +{
 +      if(!(fire & 1) || actor.hagar_load || actor.hagar_loadblock)
 +      {
 +              w_ready(thiswep, actor, weaponentity, fire);
 +              return;
 +      }
 +
 +      if(!thiswep.wr_checkammo1(thiswep))
 +      if(!(actor.items & IT_UNLIMITED_WEAPON_AMMO))
 +      {
 +              W_SwitchWeapon_Force(actor, w_getbestweapon(actor));
 +              w_ready(thiswep, actor, weaponentity, fire);
 +              return;
 +      }
 +
 +      W_Hagar_Attack(thiswep);
 +
 +      int slot = weaponslot(weaponentity);
-               METHOD(Hagar, wr_aim, void(entity thiswep))
-               {
-                       if(random()>0.15)
-                               self.BUTTON_ATCK = bot_aim(WEP_CVAR_PRI(hagar, speed), 0, WEP_CVAR_PRI(hagar, lifetime), false);
-                       else // not using secondary_speed since these are only 15% and should cause some ricochets without re-aiming
-                               self.BUTTON_ATCK2 = bot_aim(WEP_CVAR_PRI(hagar, speed), 0, WEP_CVAR_PRI(hagar, lifetime), false);
-               }
-               METHOD(Hagar, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire))
-               {
-                       float loadable_secondary;
-                       loadable_secondary = (WEP_CVAR_SEC(hagar, load) && WEP_CVAR(hagar, secondary));
-                       if(loadable_secondary)
-                               W_Hagar_Attack2_Load(thiswep, weaponentity); // must always run each frame
-                       if(autocvar_g_balance_hagar_reload_ammo && actor.clip_load < min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo))) { // forced reload
-                               thiswep.wr_reload(thiswep, actor, weaponentity);
-                       } else if((fire & 1) && !actor.hagar_load && !actor.hagar_loadblock) // not while secondary is loaded or awaiting reset
-                       {
-                               if(weapon_prepareattack(thiswep, actor, weaponentity, false, 0))
-                                       W_Hagar_Attack_Auto(thiswep, actor, weaponentity, fire);
-                       }
-                       else if((fire & 2) && !loadable_secondary && WEP_CVAR(hagar, secondary))
-                       {
-                               if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(hagar, refire)))
-                               {
-                                       W_Hagar_Attack2(thiswep);
-                                       weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(hagar, refire), w_ready);
-                               }
-                       }
-               }
-               METHOD(Hagar, wr_gonethink, void(entity thiswep))
-               {
-                       // we lost the weapon and want to prepare switching away
-                       if(self.hagar_load)
-                       {
-                               .entity weaponentity = weaponentities[0]; // TODO: unhardcode
-                               self.(weaponentity).state = WS_READY;
-                               W_Hagar_Attack2_Load_Release(weaponentity);
-                       }
-               }
-               METHOD(Hagar, wr_setup, void(entity thiswep))
-               {
-                       self.hagar_loadblock = false;
-                       if(self.hagar_load)
-                       {
-                               W_DecreaseAmmo(thiswep, self, WEP_CVAR_SEC(hagar, ammo) * self.hagar_load * -1); // give back ammo if necessary
-                               self.hagar_load = 0;
-                       }
-               }
-               METHOD(Hagar, wr_checkammo1, bool(entity thiswep))
-               {
-                       float ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR_PRI(hagar, ammo);
-                       ammo_amount += self.(weapon_load[WEP_HAGAR.m_id]) >= WEP_CVAR_PRI(hagar, ammo);
-                       return ammo_amount;
-               }
-               METHOD(Hagar, wr_checkammo2, bool(entity thiswep))
-               {
-                       float ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR_SEC(hagar, ammo);
-                       ammo_amount += self.(weapon_load[WEP_HAGAR.m_id]) >= WEP_CVAR_SEC(hagar, ammo);
-                       return ammo_amount;
-               }
-               METHOD(Hagar, wr_resetplayer, void(entity thiswep))
-               {
-                       self.hagar_load = 0;
-               }
-               METHOD(Hagar, wr_playerdeath, void(entity thiswep))
-               {
-                       .entity weaponentity = weaponentities[0]; // TODO: unhardcode
-                       // if we have any rockets loaded when we die, release them
-                       if(self.hagar_load && WEP_CVAR_SEC(hagar, load_releasedeath))
-                               W_Hagar_Attack2_Load_Release(weaponentity);
-               }
-               METHOD(Hagar, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))
-               {
-                       if(!self.hagar_load) // require releasing loaded rockets first
-                               W_Reload(self, min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo)), SND(RELOAD));
-               }
-               METHOD(Hagar, wr_suicidemessage, int(entity thiswep))
-               {
-                       return WEAPON_HAGAR_SUICIDE;
-               }
-               METHOD(Hagar, wr_killmessage, int(entity thiswep))
-               {
-                       if(w_deathtype & HITTYPE_SECONDARY)
-                               return WEAPON_HAGAR_MURDER_BURST;
-                       else
-                               return WEAPON_HAGAR_MURDER_SPRAY;
-               }
 +      ATTACK_FINISHED(actor, slot) = time + WEP_CVAR_PRI(hagar, refire) * W_WeaponRateFactor();
++      int theframe = WFRAME_FIRE1;
 +      entity this = actor.(weaponentity);
 +      if(this)
 +      {
 +              if(this.wframe == WFRAME_FIRE1)
 +                      theframe = WFRAME_DONTCHANGE;
 +      }
 +      weapon_thinkf(actor, weaponentity, theframe, WEP_CVAR_PRI(hagar, refire), W_Hagar_Attack_Auto);
 +}
 +
 -    } else if((fire & 1) && !actor.hagar_load && !actor.hagar_loadblock) // not while secondary is loaded or awaiting reset
 -    {
 -        if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(hagar, refire)))
 -        {
 -            W_Hagar_Attack(thiswep);
 -            weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(hagar, refire), w_ready);
 -        }
+ METHOD(Hagar, wr_aim, void(entity thiswep))
+ {
+     SELFPARAM();
+     if(random()>0.15)
+         PHYS_INPUT_BUTTON_ATCK(self) = bot_aim(self, WEP_CVAR_PRI(hagar, speed), 0, WEP_CVAR_PRI(hagar, lifetime), false);
+     else // not using secondary_speed since these are only 15% and should cause some ricochets without re-aiming
+         PHYS_INPUT_BUTTON_ATCK2(self) = bot_aim(self, WEP_CVAR_PRI(hagar, speed), 0, WEP_CVAR_PRI(hagar, lifetime), false);
+ }
+ METHOD(Hagar, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire))
+ {
+     float loadable_secondary;
+     loadable_secondary = (WEP_CVAR_SEC(hagar, load) && WEP_CVAR(hagar, secondary));
+     if(loadable_secondary)
+         W_Hagar_Attack2_Load(thiswep, weaponentity); // must always run each frame
+     if(autocvar_g_balance_hagar_reload_ammo && actor.clip_load < min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo))) { // forced reload
+         thiswep.wr_reload(thiswep, actor, weaponentity);
+     }
++    else if((fire & 1) && !actor.hagar_load && !actor.hagar_loadblock) // not while secondary is loaded or awaiting reset
++      {
++              if(weapon_prepareattack(thiswep, actor, weaponentity, false, 0))
++                      W_Hagar_Attack_Auto(thiswep, actor, weaponentity, fire);
++      }
+     else if((fire & 2) && !loadable_secondary && WEP_CVAR(hagar, secondary))
+     {
+         if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(hagar, refire)))
+         {
+             W_Hagar_Attack2(thiswep);
+             weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_SEC(hagar, refire), w_ready);
+         }
+     }
+ }
+ METHOD(Hagar, wr_gonethink, void(entity thiswep))
+ {
+     SELFPARAM();
+     // we lost the weapon and want to prepare switching away
+     if(self.hagar_load)
+     {
+         .entity weaponentity = weaponentities[0]; // TODO: unhardcode
+         self.(weaponentity).state = WS_READY;
+         W_Hagar_Attack2_Load_Release(weaponentity);
+     }
+ }
+ METHOD(Hagar, wr_setup, void(entity thiswep))
+ {
+     SELFPARAM();
+     self.hagar_loadblock = false;
+     if(self.hagar_load)
+     {
+         W_DecreaseAmmo(thiswep, self, WEP_CVAR_SEC(hagar, ammo) * self.hagar_load * -1); // give back ammo if necessary
+         self.hagar_load = 0;
+     }
+ }
+ METHOD(Hagar, wr_checkammo1, bool(entity thiswep))
+ {
+     SELFPARAM();
+     float ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR_PRI(hagar, ammo);
+     ammo_amount += self.(weapon_load[WEP_HAGAR.m_id]) >= WEP_CVAR_PRI(hagar, ammo);
+     return ammo_amount;
+ }
+ METHOD(Hagar, wr_checkammo2, bool(entity thiswep))
+ {
+     SELFPARAM();
+     float ammo_amount = self.(thiswep.ammo_field) >= WEP_CVAR_SEC(hagar, ammo);
+     ammo_amount += self.(weapon_load[WEP_HAGAR.m_id]) >= WEP_CVAR_SEC(hagar, ammo);
+     return ammo_amount;
+ }
+ METHOD(Hagar, wr_resetplayer, void(entity thiswep))
+ {
+     SELFPARAM();
+     self.hagar_load = 0;
+ }
+ METHOD(Hagar, wr_playerdeath, void(entity thiswep))
+ {
+     SELFPARAM();
+     .entity weaponentity = weaponentities[0]; // TODO: unhardcode
+     // if we have any rockets loaded when we die, release them
+     if(self.hagar_load && WEP_CVAR_SEC(hagar, load_releasedeath))
+         W_Hagar_Attack2_Load_Release(weaponentity);
+ }
+ METHOD(Hagar, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))
+ {
+     SELFPARAM();
+     if(!self.hagar_load) // require releasing loaded rockets first
+         W_Reload(self, min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo)), SND_RELOAD);
+ }
+ METHOD(Hagar, wr_suicidemessage, Notification(entity thiswep))
+ {
+     return WEAPON_HAGAR_SUICIDE;
+ }
+ METHOD(Hagar, wr_killmessage, Notification(entity thiswep))
+ {
+     if(w_deathtype & HITTYPE_SECONDARY)
+         return WEAPON_HAGAR_MURDER_BURST;
+     else
+         return WEAPON_HAGAR_MURDER_SPRAY;
+ }
  
  #endif
  #ifdef CSQC