}
// VorteX: static frame globals
-float WFRAME_DONTCHANGE = -1;
-float WFRAME_FIRE1 = 0;
-float WFRAME_FIRE2 = 1;
-float WFRAME_IDLE = 2;
-float WFRAME_RELOAD = 3;
+const float WFRAME_DONTCHANGE = -1;
+const float WFRAME_FIRE1 = 0;
+const float WFRAME_FIRE2 = 1;
+const float WFRAME_IDLE = 2;
+const float WFRAME_RELOAD = 3;
.float wframe;
void(float fr, float t, void() func) weapon_thinkf;
tb = (self.effects & (EF_TELEPORT_BIT | EF_RESTARTANIM_BIT));
self.effects = self.owner.effects & EFMASK_CHEAP;
- self.effects &~= EF_LOWPRECISION;
- self.effects &~= EF_FULLBRIGHT; // can mask team color, so get rid of it
- self.effects &~= EF_TELEPORT_BIT;
- self.effects &~= EF_RESTARTANIM_BIT;
+ self.effects &= ~EF_LOWPRECISION;
+ self.effects &= ~EF_FULLBRIGHT; // can mask team color, so get rid of it
+ self.effects &= ~EF_TELEPORT_BIT;
+ self.effects &= ~EF_RESTARTANIM_BIT;
self.effects |= tb;
if(self.owner.alpha == default_player_alpha)
}
self.angles = '0 0 0';
-
+
float f = (self.owner.weapon_nextthink - time);
if (self.state == WS_RAISE && !intermission_running)
{
entity newwep = get_weaponinfo(self.owner.switchweapon);
f = f * g_weaponratefactor / max(f, newwep.switchdelay_raise);
- //print(sprintf("CL_Weaponentity_Think(): cvar: %s, value: %f, nextthink: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)), (self.owner.weapon_nextthink - time)));
self.angles_x = -90 * f * f;
}
else if (self.state == WS_DROP && !intermission_running)
{
entity oldwep = get_weaponinfo(self.owner.weapon);
f = 1 - f * g_weaponratefactor / max(f, oldwep.switchdelay_drop);
- //print(sprintf("CL_Weaponentity_Think(): cvar: %s, value: %f, nextthink: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)), (self.owner.weapon_nextthink - time)));
self.angles_x = -90 * f * f;
}
else if (self.state == WS_CLEAR)
.float prevwarntime;
float weapon_prepareattack_checkammo(float secondary)
{
- if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+ if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
if (!WEP_ACTION(self.weapon, WR_CHECKAMMO1 + secondary))
{
// always keep the Mine Layer if we placed mines, so that we can detonate them
if(self.weapon == self.switchweapon && time - self.prevdryfire > 1) // only play once BEFORE starting to switch weapons
{
- sound (self, CH_WEAPON_A, "weapons/dryfire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/dryfire.wav", VOL_BASE, ATTEN_NORM);
self.prevdryfire = time;
}
{
W_SwitchToOtherWeapon(self);
}
-
+
return FALSE;
}
return TRUE;
if((fr == WFRAME_FIRE1 || fr == WFRAME_FIRE2) && t)
{
- if(self.weapon == WEP_SHOTGUN && fr == WFRAME_FIRE2)
+ if((self.weapon == WEP_SHOCKWAVE || self.weapon == WEP_SHOTGUN) && fr == WFRAME_FIRE2)
animdecide_setaction(self, ANIMACTION_MELEE, restartanim);
else
animdecide_setaction(self, ANIMACTION_SHOOT, restartanim);
self.switchingweapon = 0;
self.weaponentity.state = WS_CLEAR;
self.weaponname = "";
- self.items &~= IT_AMMO;
+ //self.items &= ~IT_AMMO;
return;
}
self.switchingweapon = self.switchweapon;
entity newwep = get_weaponinfo(self.switchweapon);
- self.items &~= IT_AMMO;
- self.items = self.items | (newwep.items & IT_AMMO);
+ //self.items &= ~IT_AMMO;
+ //self.items = self.items | (newwep.items & IT_AMMO);
// the two weapon entities will notice this has changed and update their models
self.weapon = self.switchweapon;
self.weaponname = newwep.mdl;
self.bulletcounter = 0; // WEAPONTODO
+ //self.ammo_field = newwep.ammo_field;
WEP_ACTION(self.switchweapon, WR_SETUP);
self.weaponentity.state = WS_RAISE;
// set our clip load to the load of the weapon we switched to, if it's reloadable
- if(newwep.spawnflags & WEP_FLAG_RELOADABLE && cvar(strcat("g_balance_", newwep.netname, "_reload_ammo"))) // prevent accessing undefined cvars
+ if(newwep.spawnflags & WEP_FLAG_RELOADABLE && newwep.reloading_ammo) // prevent accessing undefined cvars
{
self.clip_load = self.(weapon_load[self.switchweapon]);
- self.clip_size = cvar(strcat("g_balance_", newwep.netname, "_reload_ammo"));
+ self.clip_size = newwep.reloading_ammo;
}
else
self.clip_load = self.clip_size = 0;
while (c < W_TICSPERFRAME)
{
c = c + 1;
- if(w && !WEPSET_CONTAINS_EW(self, w))
+ if(w && !(self.weapons & WepSet_FromWeapon(w)))
{
if(self.weapon == self.switchweapon)
W_SwitchWeapon_Force(self, w_getbestweapon(self));
bprint("\{1}^1ERROR: undefined weapon think function for ", self.netname, "\n");
}
}
-
-#if 0
- if (self.items & IT_CELLS)
- self.currentammo = self.ammo_cells;
- else if (self.items & IT_ROCKETS)
- self.currentammo = self.ammo_rockets;
- else if (self.items & IT_NAILS)
- self.currentammo = self.ammo_nails;
- else if (self.items & IT_SHELLS)
- self.currentammo = self.ammo_shells;
- else
- self.currentammo = 1;
-#endif
}
void W_AttachToShotorg(entity flash, vector offset)
}
}
-void W_DecreaseAmmo(.float ammo_type, float ammo_use, float ammo_reload) // WEAPONTODO: why does this have ammo_type?
+void W_DecreaseAmmo(float ammo_use)
{
- if((self.items & IT_UNLIMITED_WEAPON_AMMO) && !ammo_reload)
+ entity wep = get_weaponinfo(self.weapon);
+
+ if((self.items & IT_UNLIMITED_WEAPON_AMMO) && !wep.reloading_ammo)
return;
// if this weapon is reloadable, decrease its load. Else decrease the player's ammo
- if(ammo_reload)
+ if(wep.reloading_ammo)
{
self.clip_load -= ammo_use;
self.(weapon_load[self.weapon]) = self.clip_load;
}
else
- self.(self.current_ammo) -= ammo_use;
+ self.(wep.ammo_field) -= ammo_use;
}
// weapon reloading code
self.clip_load = self.old_clip_load; // restore the ammo counter, in case we still had ammo in the weapon before reloading
// if the gun uses no ammo, max out weapon load, else decrease ammo as we increase weapon load
- if(!self.reload_ammo_min || self.items & IT_UNLIMITED_WEAPON_AMMO)
+ if(!self.reload_ammo_min || self.items & IT_UNLIMITED_WEAPON_AMMO || self.ammo_field == ammo_none)
self.clip_load = self.reload_ammo_amount;
else
{
- while(self.clip_load < self.reload_ammo_amount && self.(self.current_ammo)) // make sure we don't add more ammo than we have
+ while(self.clip_load < self.reload_ammo_amount && self.(self.ammo_field)) // make sure we don't add more ammo than we have
{
self.clip_load += 1;
- self.(self.current_ammo) -= 1;
+ self.(self.ammo_field) -= 1;
}
}
self.(weapon_load[self.weapon]) = self.clip_load;
w_ready();
}
-void W_Reload(float sent_ammo_min, float sent_ammo_amount, float sent_time, string sent_sound)
+void W_Reload(float sent_ammo_min, string sent_sound)
{
// set global values to work with
+ entity e;
+ e = get_weaponinfo(self.weapon);
self.reload_ammo_min = sent_ammo_min;
- self.reload_ammo_amount = sent_ammo_amount;
- self.reload_time = sent_time;
+ self.reload_ammo_amount = e.reloading_ammo;;
+ self.reload_time = e.reloading_time;
self.reload_sound = sent_sound;
- // check if we meet the necessary conditions to reload
-
- entity e;
- e = get_weaponinfo(self.weapon);
-
// don't reload weapons that don't have the RELOADABLE flag
- if not(e.spawnflags & WEP_FLAG_RELOADABLE)
+ if (!(e.spawnflags & WEP_FLAG_RELOADABLE))
{
dprint("Warning: Attempted to reload a weapon that does not have the WEP_FLAG_RELOADABLE flag. Fix your code!\n");
return;
return;
// no ammo, so nothing to load
- if(!self.(self.current_ammo) && self.reload_ammo_min)
- if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+ if(self.ammo_field != ammo_none)
+ if(!self.(self.ammo_field) && self.reload_ammo_min)
+ if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
if(IS_REAL_CLIENT(self) && self.reload_complain < time)
{
play2(self, "weapons/unavailable.wav");
- sprint(self, strcat("You don't have enough ammo to reload the ^2", W_Name(self.weapon), "\n"));
+ sprint(self, strcat("You don't have enough ammo to reload the ^2", WEP_NAME(self.weapon), "\n"));
self.reload_complain = time + 1;
}
// switch away if the amount of ammo is not enough to keep using this weapon
- if not(WEP_ACTION(self.weapon, WR_CHECKAMMO1) + WEP_ACTION(self.weapon, WR_CHECKAMMO2))
+ if (!(WEP_ACTION(self.weapon, WR_CHECKAMMO1) + WEP_ACTION(self.weapon, WR_CHECKAMMO2)))
{
self.clip_load = -1; // reload later
W_SwitchToOtherWeapon(self);
// now begin the reloading process
- sound (self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTN_NORM);
+ sound(self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTEN_NORM);
// do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon,
// then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there,