remove(self);
return;
}
- if (self.owner.weaponentity.state != WS_INUSE || (self.owner.(self.current_ammo) <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK || self.owner.freezetag_frozen)
+ if (self.owner.weaponentity.state != WS_INUSE || (self.owner.AMMO_VAL(WEP_ARC) <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK || self.owner.freezetag_frozen)
{
if(self == self.owner.arc_beam)
self.owner.arc_beam = world;
{
if(WEP_CVAR_PRI(arc, ammo))
{
- dt = min(dt, self.owner.(self.current_ammo) / WEP_CVAR_PRI(arc, ammo));
- self.owner.(self.current_ammo) = max(0, self.owner.(self.current_ammo) - WEP_CVAR_PRI(arc, ammo) * frametime);
+ dt = min(dt, self.owner.AMMO_VAL(WEP_ARC) / WEP_CVAR_PRI(arc, ammo));
+ self.owner.AMMO_VAL(WEP_ARC) = max(0, self.owner.AMMO_VAL(WEP_ARC) - WEP_CVAR_PRI(arc, ammo) * frametime);
}
}
}
case WR_CHECKAMMO1:
{
- return !WEP_CVAR_PRI(arc, ammo) || (self.(self.current_ammo) > 0);
+ return !WEP_CVAR_PRI(arc, ammo) || (self.AMMO_VAL(WEP_ARC) > 0);
}
case WR_CHECKAMMO2:
{
- return self.(self.current_ammo) >= WEP_CVAR_SEC(arc, ammo);
+ return self.AMMO_VAL(WEP_ARC) >= WEP_CVAR_SEC(arc, ammo);
}
case WR_CONFIG:
{
if(self.crylink_lastgroup && self.crylink_waitrelease)
return TRUE;
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_PRI(crylink, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_CRYLINK) >= WEP_CVAR_PRI(crylink, ammo);
ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= WEP_CVAR_PRI(crylink, ammo);
return ammo_amount;
}
if(self.crylink_lastgroup && self.crylink_waitrelease)
return TRUE;
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(crylink, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_CRYLINK) >= WEP_CVAR_SEC(crylink, ammo);
ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= WEP_CVAR_SEC(crylink, ammo);
return ammo_amount;
}
if (self.realowner.weapon == WEP_DEVASTATOR)
{
- if(self.realowner.(self.current_ammo) < WEP_CVAR(devastator, ammo))
+ if(self.realowner.AMMO_VAL(WEP_DEVASTATOR) < WEP_CVAR(devastator, ammo))
{
self.realowner.cnt = WEP_DEVASTATOR;
ATTACK_FINISHED(self.realowner) = time;
if (self.realowner.weapon == WEP_DEVASTATOR)
{
- if(self.realowner.(self.current_ammo) < WEP_CVAR(devastator, ammo))
+ if(self.realowner.AMMO_VAL(WEP_DEVASTATOR) < WEP_CVAR(devastator, ammo))
{
self.realowner.cnt = WEP_DEVASTATOR;
ATTACK_FINISHED(self.realowner) = time;
ammo_amount = FALSE;
if(WEP_CVAR(devastator, reload_ammo))
{
- if(self.(self.current_ammo) < WEP_CVAR(devastator, ammo) && self.(weapon_load[WEP_DEVASTATOR]) < WEP_CVAR(devastator, ammo))
+ if(self.AMMO_VAL(WEP_DEVASTATOR) < WEP_CVAR(devastator, ammo) && self.(weapon_load[WEP_DEVASTATOR]) < WEP_CVAR(devastator, ammo))
ammo_amount = TRUE;
}
- else if(self.(self.current_ammo) < WEP_CVAR(devastator, ammo))
+ else if(self.AMMO_VAL(WEP_DEVASTATOR) < WEP_CVAR(devastator, ammo))
ammo_amount = TRUE;
return !ammo_amount;
}
}
case WR_CHECKAMMO1:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_PRI(electro, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_ELECTRO) >= WEP_CVAR_PRI(electro, ammo);
ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= WEP_CVAR_PRI(electro, ammo);
return ammo_amount;
}
{
if(WEP_CVAR(electro, combo_safeammocheck)) // true if you can fire at least one secondary blob AND one primary shot after it, otherwise false.
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(electro, ammo) + WEP_CVAR_PRI(electro, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_ELECTRO) >= WEP_CVAR_SEC(electro, ammo) + WEP_CVAR_PRI(electro, ammo);
ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= WEP_CVAR_SEC(electro, ammo) + WEP_CVAR_PRI(electro, ammo);
}
else
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(electro, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_ELECTRO) >= WEP_CVAR_SEC(electro, ammo);
ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= WEP_CVAR_SEC(electro, ammo);
}
return ammo_amount;
if(autocvar_g_balance_hagar_reload_ammo)
enough_ammo = self.(weapon_load[WEP_HAGAR]) >= WEP_CVAR_SEC(hagar, ammo);
else
- enough_ammo = self.(self.current_ammo) >= WEP_CVAR_SEC(hagar, ammo);
+ enough_ammo = self.AMMO_VAL(WEP_HAGAR) >= WEP_CVAR_SEC(hagar, ammo);
if(self.BUTTON_ATCK2)
{
}
case WR_CHECKAMMO1:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_PRI(hagar, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_HAGAR) >= WEP_CVAR_PRI(hagar, ammo);
ammo_amount += self.(weapon_load[WEP_HAGAR]) >= WEP_CVAR_PRI(hagar, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(hagar, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_HAGAR) >= WEP_CVAR_SEC(hagar, ammo);
ammo_amount += self.(weapon_load[WEP_HAGAR]) >= WEP_CVAR_SEC(hagar, ammo);
return ammo_amount;
}
}
case WR_CHECKAMMO1:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_PRI(hlac, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_HLAC) >= WEP_CVAR_PRI(hlac, ammo);
ammo_amount += self.(weapon_load[WEP_HLAC]) >= WEP_CVAR_PRI(hlac, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(hlac, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_HLAC) >= WEP_CVAR_SEC(hlac, ammo);
ammo_amount += self.(weapon_load[WEP_HLAC]) >= WEP_CVAR_SEC(hlac, ammo);
return ammo_amount;
}
case WR_CHECKAMMO1:
{
if(WEP_CVAR(uzi, mode) == 1)
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(uzi, sustained_ammo);
+ ammo_amount = self.AMMO_VAL(WEP_UZI) >= WEP_CVAR(uzi, sustained_ammo);
else
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(uzi, first_ammo);
+ ammo_amount = self.AMMO_VAL(WEP_UZI) >= WEP_CVAR(uzi, first_ammo);
if(autocvar_g_balance_uzi_reload_ammo)
{
case WR_CHECKAMMO2:
{
if(WEP_CVAR(uzi, mode) == 1)
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(uzi, burst_ammo);
+ ammo_amount = self.AMMO_VAL(WEP_UZI) >= WEP_CVAR(uzi, burst_ammo);
else
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(uzi, first_ammo);
+ ammo_amount = self.AMMO_VAL(WEP_UZI) >= WEP_CVAR(uzi, first_ammo);
if(autocvar_g_balance_uzi_reload_ammo)
{
if(autocvar_g_balance_minelayer_reload_ammo && self.clip_load < WEP_CVAR(minelayer, ammo)) // forced reload
{
// not if we're holding the minelayer without enough ammo, but can detonate existing mines
- if(!(W_PlacedMines(FALSE) && self.(self.current_ammo) < WEP_CVAR(minelayer, ammo)))
+ if(!(W_PlacedMines(FALSE) && self.AMMO_VAL(WEP_MINE_LAYER) < WEP_CVAR(minelayer, ammo)))
WEP_ACTION(self.weapon, WR_RELOAD);
}
else if (self.BUTTON_ATCK)
// don't switch while placing a mine
if (ATTACK_FINISHED(self) <= time || self.weapon != WEP_MINE_LAYER)
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(minelayer, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_MINE_LAYER) >= WEP_CVAR(minelayer, ammo);
ammo_amount += self.(weapon_load[WEP_MINE_LAYER]) >= WEP_CVAR(minelayer, ammo);
return ammo_amount;
}
{
case WR_AIM:
{
- if(self.(self.current_ammo) > 0)
+ if(self.AMMO_VAL(WEP_MINSTANEX) > 0)
self.BUTTON_ATCK = bot_aim(1000000, 0, 1, FALSE);
else
self.BUTTON_ATCK2 = bot_aim(WEP_CVAR_SEC(minstanex, speed), 0, WEP_CVAR_SEC(minstanex, lifetime), FALSE); // WEAPONTODO: replace with proper minstanex cvars
}
case WR_SETUP:
{
- self.current_ammo = (self.current_ammo);
+ self.current_ammo = AMMO_VAL(WEP_MINSTANEX);
self.minstanex_lasthit = 0;
return TRUE;
}
case WR_CHECKAMMO1:
{
- ammo_amount = self.(self.current_ammo) >= minstanex_ammo;
+ ammo_amount = self.AMMO_VAL(WEP_MINSTANEX) >= minstanex_ammo;
ammo_amount += self.(weapon_load[WEP_MINSTANEX]) >= minstanex_ammo;
return ammo_amount;
}
{
if(!WEP_CVAR_SEC(minstanex, ammo))
return TRUE;
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(minstanex, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_MINSTANEX) >= WEP_CVAR_SEC(minstanex, ammo);
ammo_amount += self.(weapon_load[WEP_MINSTANEX]) >= WEP_CVAR_SEC(minstanex, ammo);
return ammo_amount;
}
}
case WR_CHECKAMMO1:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_PRI(mortar, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_MORTAR) >= WEP_CVAR_PRI(mortar, ammo);
ammo_amount += self.(weapon_load[WEP_MORTAR]) >= WEP_CVAR_PRI(mortar, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(mortar, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_MORTAR) >= WEP_CVAR_SEC(mortar, ammo);
ammo_amount += self.(weapon_load[WEP_MORTAR]) >= WEP_CVAR_SEC(mortar, ammo);
return ammo_amount;
}
}
else
{
- dt = min(dt, (self.(self.current_ammo) - WEP_CVAR_PRI(nex, ammo)) / WEP_CVAR_SEC(nex, ammo));
+ dt = min(dt, (self.AMMO_VAL(WEP_NEX) - WEP_CVAR_PRI(nex, ammo)) / WEP_CVAR_SEC(nex, ammo));
dt = max(0, dt);
if(dt > 0)
{
- self.(self.current_ammo) = max(WEP_CVAR_SEC(nex, ammo), self.(self.current_ammo) - WEP_CVAR_SEC(nex, ammo) * dt);
+ self.AMMO_VAL(WEP_NEX) = max(WEP_CVAR_SEC(nex, ammo), self.AMMO_VAL(WEP_NEX) - WEP_CVAR_SEC(nex, ammo) * dt);
}
}
}
}
case WR_CHECKAMMO1:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_PRI(nex, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_NEX) >= WEP_CVAR_PRI(nex, ammo);
ammo_amount += (autocvar_g_balance_nex_reload_ammo && self.(weapon_load[WEP_NEX]) >= WEP_CVAR_PRI(nex, ammo));
return ammo_amount;
}
if(WEP_CVAR(nex, secondary))
{
// don't allow charging if we don't have enough ammo
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(nex, ammo);
- ammo_amount += self.(weapon_load[WEP_NEX]) >= WEP_CVAR_SEC(nex, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_NEX) >= WEP_CVAR_SEC(nex, ammo);
+ ammo_amount += self.(weapon_load[WEP_NEX]) >= WEP_CVAR_SEC(nex, ammo);
return ammo_amount;
}
else
af = ATTACK_FINISHED(self);
self.switchweapon = self.weapon;
ATTACK_FINISHED(self) = time;
- print(ftos(self.(self.current_ammo)), "\n");
+ print(ftos(self.AMMO_VAL(WEP_RIFLE)), "\n");
r = weapon_prepareattack(self.rifle_bullethail_frame == WFRAME_FIRE2, self.rifle_bullethail_refire);
if(self.switchweapon == self.weapon)
self.switchweapon = sw;
}
case WR_CHECKAMMO1:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_PRI(rifle, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_RIFLE) >= WEP_CVAR_PRI(rifle, ammo);
ammo_amount += self.(weapon_load[WEP_RIFLE]) >= WEP_CVAR_PRI(rifle, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR_SEC(rifle, ammo);
+ ammo_amount = self.AMMO_VAL(WEP_RIFLE) >= WEP_CVAR_SEC(rifle, ammo);
ammo_amount += self.(weapon_load[WEP_RIFLE]) >= WEP_CVAR_SEC(rifle, ammo);
return ammo_amount;
}
entity oldself,oldenemy;
self.cnt = self.cnt - 1;
- if((!(self.realowner.items & IT_UNLIMITED_AMMO) && self.realowner.(self.current_ammo) < 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.AMMO_VAL(WEP_SEEKER) < WEP_CVAR(seeker, missile_ammo)) || (self.cnt <= -1) || (self.realowner.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER))
{
remove(self);
return;
{
if (WEP_CVAR(seeker, type) == 1)
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(seeker, missile_ammo);
+ ammo_amount = self.AMMO_VAL(WEP_SEEKER) >= WEP_CVAR(seeker, missile_ammo);
ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, missile_ammo);
}
else
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(seeker, tag_ammo);
+ ammo_amount = self.AMMO_VAL(WEP_SEEKER) >= WEP_CVAR(seeker, tag_ammo);
ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, tag_ammo);
}
return ammo_amount;
{
if (WEP_CVAR(seeker, type) == 1)
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(seeker, tag_ammo);
+ ammo_amount = self.AMMO_VAL(WEP_SEEKER) >= WEP_CVAR(seeker, tag_ammo);
ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, tag_ammo);
}
else
{
- ammo_amount = self.(self.current_ammo) >= WEP_CVAR(seeker, flac_ammo);
+ ammo_amount = self.AMMO_VAL(WEP_SEEKER) >= WEP_CVAR(seeker, flac_ammo);
ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, flac_ammo);
}
return ammo_amount;
dummy_weapon_info.model2 = "";
dummy_weapon_info.impulse = -1;
dummy_weapon_info.bot_pickupbasevalue = 0;
- dummy_weapon_info.current_ammo = ammo_broken;
+ dummy_weapon_info.current_ammo = ammo_none;
float i;
weaponorder_byid = "";
.float ammo_cells;
.float ammo_fuel;
.float ammo_none;
-.float ammo_broken; // dummy
// entity properties of weaponinfo:
.float weapon; // WEP_...
// other useful macros
#define WEP_ACTION(wpn,wrequest) (get_weaponinfo(wpn)).weapon_func(wrequest)
-
+#define AMMO_VAL(wpn) ((get_weaponinfo(wpn)).current_ammo)
// =====================
// Weapon Registration
self.weapon = self.switchweapon;
self.weaponname = newwep.mdl;
self.bulletcounter = 0; // WEAPONTODO
+ //self.current_ammo = newwep.current_ammo;
WEP_ACTION(self.switchweapon, WR_SETUP);
self.weaponentity.state = WS_RAISE;
void W_DecreaseAmmo(float ammo_use)
{
- if((self.items & IT_UNLIMITED_WEAPON_AMMO) && !self.reloading_ammo)
+ 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(self.reloading_ammo)
+ 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.current_ammo) -= ammo_use;
}
// weapon reloading code