]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into Mario/wepent_experimental
authorMario <mario@smbclan.net>
Sun, 25 Dec 2016 11:07:16 +0000 (21:07 +1000)
committerMario <mario@smbclan.net>
Sun, 25 Dec 2016 11:07:16 +0000 (21:07 +1000)
1  2 
qcsrc/common/weapons/weapon/vaporizer.qc

index 7866f1b828e27d55312b3952c0b164a837b01e11,91042b613b7a425c8fc354a395a2392108a4697e..4e352c75d9452188e4a8012a171ad541adad757e
@@@ -12,7 -12,6 +12,7 @@@ CLASS(Vaporizer, Weapon
  #endif
  /* crosshair */ ATTRIB(Vaporizer, w_crosshair, string, "gfx/crosshairminstanex");
  /* crosshair */ ATTRIB(Vaporizer, w_crosshair_size, float, 0.6);
 +/* reticle   */ ATTRIB(Vaporizer, w_reticle, string, "gfx/reticle_nex");
  /* wepimg    */ ATTRIB(Vaporizer, model2, string, "weaponminstanex");
  /* refname   */ ATTRIB(Vaporizer, netname, string, "vaporizer");
  /* wepname   */ ATTRIB(Vaporizer, m_name, string, _("Vaporizer"));
@@@ -194,7 -193,7 +194,7 @@@ void W_Vaporizer_Attack(Weapon thiswep
  
        yoda = 0;
        damage_goodhits = 0;
 -      FireRailgunBullet(actor, w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, vaporizer_damage, 800, 0, 0, 0, 0, WEP_VAPORIZER.m_id);
 +      FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, vaporizer_damage, 800, 0, 0, 0, 0, WEP_VAPORIZER.m_id);
  
        // do this now, as goodhits is disabled below
        SendCSQCVaporizerBeamParticle(actor, damage_goodhits);
        if(!(trace_dphitq3surfaceflags & (Q3SURFACEFLAG_SKY | Q3SURFACEFLAG_NOIMPACT)))
                W_RocketMinsta_Explosion(actor, trace_endpos);
  
 -      W_DecreaseAmmo(thiswep, actor, ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo)));
 +      W_DecreaseAmmo(thiswep, actor, ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo)), weaponentity);
  }
  
- void W_RocketMinsta_Laser_Explode (entity this)
+ void W_RocketMinsta_Laser_Explode (entity this, entity directhitentity)
  {
-       if(other.takedamage == DAMAGE_AIM)
-               if(IS_PLAYER(other))
-                       if(DIFF_TEAM(this.realowner, other))
-                               if(!IS_DEAD(other))
-                                       if(IsFlying(other))
+       if(directhitentity.takedamage == DAMAGE_AIM)
+               if(IS_PLAYER(directhitentity))
+                       if(DIFF_TEAM(this.realowner, directhitentity))
+                               if(!IS_DEAD(directhitentity))
+                                       if(IsFlying(directhitentity))
                                                Send_Notification(NOTIF_ONE, this.realowner, MSG_ANNCE, ANNCE_ACHIEVEMENT_ELECTROBITCH);
  
        this.event_damage = func_null;
        this.takedamage = DAMAGE_NO;
-       RadiusDamage (this, this.realowner, this.rm_damage, this.rm_edmg, autocvar_g_rm_laser_radius, NULL, NULL, this.rm_force, this.projectiledeathtype, other);
+       RadiusDamage (this, this.realowner, this.rm_damage, this.rm_edmg, autocvar_g_rm_laser_radius, NULL, NULL, this.rm_force, this.projectiledeathtype, directhitentity);
        delete(this);
  }
  
  void W_RocketMinsta_Laser_Explode_use(entity this, entity actor, entity trigger)
  {
-       W_RocketMinsta_Laser_Explode(this);
+       W_RocketMinsta_Laser_Explode(this, trigger); // we probably don't want trigger used here, but this matches closest to old behaviour
  }
  
  void W_RocketMinsta_Laser_Touch(entity this, entity toucher)
@@@ -254,10 -253,10 +254,10 @@@ void W_RocketMinsta_Attack2(entity acto
        float spread = autocvar_g_rm_laser_spread;
        float rndspread = autocvar_g_rm_laser_spread_random;
  
 -      Weapon w = PS(actor).m_weapon;
 -      PS(actor).m_weapon = WEP_ELECTRO;
 +      Weapon w = actor.(weaponentity).m_weapon;
 +      actor.(weaponentity).m_weapon = WEP_ELECTRO;
        W_SetupShot_ProjectileSize (actor, weaponentity, '0 0 -3', '0 0 -3', false, 2, SND_CRYLINK_FIRE, CH_WEAPON_A, autocvar_g_rm_laser_damage);
 -      PS(actor).m_weapon = w;
 +      actor.(weaponentity).m_weapon = w;
  
        Send_Effect(EFFECT_ELECTRO_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
  
@@@ -308,10 -307,10 +308,10 @@@ void W_RocketMinsta_Attack3 (entity act
        float counter = 0;
        float total = 1;
  
 -      Weapon w = PS(actor).m_weapon;
 -      PS(actor).m_weapon = WEP_ELECTRO;
 +      Weapon w = actor.(weaponentity).m_weapon;
 +      actor.(weaponentity).m_weapon = WEP_ELECTRO;
        W_SetupShot_ProjectileSize (actor, weaponentity, '0 0 -3', '0 0 -3', false, 2, SND_ELECTRO_FIRE2, CH_WEAPON_A, autocvar_g_rm_laser_damage);
 -      PS(actor).m_weapon = w;
 +      actor.(weaponentity).m_weapon = w;
  
        Send_Effect(EFFECT_ELECTRO_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
  
      }
  }
  
 -METHOD(Vaporizer, wr_aim, void(entity thiswep, entity actor))
 +METHOD(Vaporizer, wr_aim, void(entity thiswep, entity actor, .entity weaponentity))
  {
      if(actor.(thiswep.ammo_field) > 0)
 -        PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, 1000000, 0, 1, false);
 +        PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, 1000000, 0, 1, false);
      else
 -        PHYS_INPUT_BUTTON_ATCK2(actor) = bot_aim(actor, WEP_CVAR_SEC(vaporizer, speed), 0, WEP_CVAR_SEC(vaporizer, lifetime), false); // WEAPONTODO: replace with proper vaporizer cvars
 +        PHYS_INPUT_BUTTON_ATCK2(actor) = bot_aim(actor, weaponentity, 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
 +    if(WEP_CVAR(vaporizer, reload_ammo) && WEP_CVAR_SEC(vaporizer, ammo) && actor.(weaponentity).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
 +    } else if(WEP_CVAR(vaporizer, reload_ammo) && actor.(weaponentity).clip_load < vaporizer_ammo) { // forced reload
          thiswep.wr_reload(thiswep, actor, weaponentity);
      }
      if((fire & 1) && (actor.ammo_cells || !autocvar_g_rm) && !forbidWeaponUse(actor))
          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(actor.(weaponentity).jump_interval <= time && !actor.(weaponentity).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;
 +                    actor.(weaponentity).held_down = true;
 +                actor.(weaponentity).jump_interval = time + autocvar_g_rm_laser_refire;
 +                actor.(weaponentity).jump_interval2 = time + autocvar_g_rm_laser_rapid_delay;
                  damage_goodhits = 0;
                  W_RocketMinsta_Attack2(actor, weaponentity);
              }
 -            else if(rapid && actor.jump_interval2 <= time && actor.held_down)
 +            else if(rapid && actor.(weaponentity).jump_interval2 <= time && actor.(weaponentity).held_down)
              {
 -                actor.jump_interval2 = time + autocvar_g_rm_laser_rapid_refire;
 +                actor.(weaponentity).jump_interval2 = time + autocvar_g_rm_laser_rapid_refire;
                  damage_goodhits = 0;
                  W_RocketMinsta_Attack3(actor, weaponentity);
                  //weapon_thinkf(actor, WFRAME_FIRE2, autocvar_g_rm_laser_rapid_animtime, w_ready);
              }
          }
 -        else if (actor.jump_interval <= time)
 +        else if (actor.(weaponentity).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(actor);
 +            actor.(weaponentity).jump_interval = time + WEP_CVAR_SEC(vaporizer, refire) * W_WeaponRateFactor(actor);
  
              // decrease ammo for the laser?
              if(WEP_CVAR_SEC(vaporizer, ammo))
 -                W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(vaporizer, ammo));
 +                W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(vaporizer, ammo), weaponentity);
  
              // 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;
 +            Weapon oldwep = actor.(weaponentity).m_weapon; // we can't avoid this hack
 +            actor.(weaponentity).m_weapon = WEP_BLASTER;
              W_Blaster_Attack(
                  actor,
                  weaponentity,
                  WEP_CVAR_SEC(vaporizer, delay),
                  WEP_CVAR_SEC(vaporizer, lifetime)
              );
 -            PS(actor).m_weapon = oldwep;
 +            actor.(weaponentity).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;
 +        actor.(weaponentity).held_down = false;
  }
 -METHOD(Vaporizer, wr_setup, void(entity thiswep, entity actor))
 +METHOD(Vaporizer, wr_setup, void(entity thiswep, entity actor, .entity weaponentity))
  {
 -    actor.ammo_field = (thiswep.ammo_field);
      actor.vaporizer_lasthit = 0;
  }
 -METHOD(Vaporizer, wr_checkammo1, bool(entity thiswep, entity actor))
 +METHOD(Vaporizer, wr_checkammo1, bool(entity thiswep, entity actor, .entity weaponentity))
  {
      float vaporizer_ammo = ((g_instagib) ? 1 : WEP_CVAR_PRI(vaporizer, ammo));
      float ammo_amount = actor.(thiswep.ammo_field) >= vaporizer_ammo;
 -    ammo_amount += actor.(weapon_load[WEP_VAPORIZER.m_id]) >= vaporizer_ammo;
 +    ammo_amount += actor.(weaponentity).(weapon_load[WEP_VAPORIZER.m_id]) >= vaporizer_ammo;
      return ammo_amount;
  }
 -METHOD(Vaporizer, wr_checkammo2, bool(entity thiswep, entity actor))
 +METHOD(Vaporizer, wr_checkammo2, bool(entity thiswep, entity actor, .entity weaponentity))
  {
      if(!WEP_CVAR_SEC(vaporizer, ammo))
          return true;
      float ammo_amount = actor.(thiswep.ammo_field) >= WEP_CVAR_SEC(vaporizer, ammo);
 -    ammo_amount += actor.(weapon_load[WEP_VAPORIZER.m_id]) >= WEP_CVAR_SEC(vaporizer, ammo);
 +    ammo_amount += actor.(weaponentity).(weapon_load[WEP_VAPORIZER.m_id]) >= WEP_CVAR_SEC(vaporizer, ammo);
      return ammo_amount;
  }
  METHOD(Vaporizer, wr_resetplayer, void(entity thiswep, entity actor))
@@@ -501,10 -501,11 +501,10 @@@ METHOD(Vaporizer, wr_init, void(entity 
          precache_pic("gfx/reticle_nex");
      }
  }
 -METHOD(Vaporizer, wr_zoomreticle, bool(entity thiswep))
 +METHOD(Vaporizer, wr_zoom, bool(entity thiswep, entity actor))
  {
      if(button_zoom || zoomscript_caught)
      {
 -        reticle_image = "gfx/reticle_nex";
          return true;
      }
      else