entity weapon_info[WEP_MAXCOUNT];
entity dummy_weapon_info;
-void register_weapon(float id, float(float) func, float droptime, float raisetime, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname)
+void register_weapon(float id, float(float) func, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname)
{
entity e;
weapon_info[id - 1] = e = spawn();
e.model2 = strzone(strcat("wpn-", e.mdl));
e.impulse = i;
e.bot_pickupbasevalue = pickupbasevalue;
-
if(ammotype & IT_SHELLS)
e.ammo_field = ammo_shells;
else if(ammotype & IT_NAILS)
e.ammo_field = ammo_fuel;
else
e.ammo_field = ammo_batteries;
-
- e.switchdelay_drop = droptime;
- e.switchdelay_raise = raisetime;
}
float w_null(float dummy)
{
dummy_weapon_info.model2 = "";
dummy_weapon_info.impulse = -1;
dummy_weapon_info.bot_pickupbasevalue = 0;
- dummy_weapon_info.switchdelay_drop = 0;
- dummy_weapon_info.switchdelay_raise = 0;
float i;
weaponorder_byid = "";
.float bot_pickupbasevalue; // bot weapon priority
.string model2; // wpn- sprite name
..float ammo_field; // main ammo field
-.float switchdelay_drop; // amount of time to complete drop frame for weapon
-.float switchdelay_raise; // amount of time to complete raise frame for weapon
// also, weaponinfo ents can act as a WEPSET
// dynamic weapon adding
float w_null(float dummy);
-void register_weapon(float id, float(float) func, float droptime, float raisetime, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname);
+void register_weapon(float id, float(float) func, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname);
void register_weapons_done();
#define WEP_FIRST 1
WEPSET_DECLARE_A(WEPBIT_ALL);
WEPSET_DECLARE_A(WEPBIT_SUPERWEAPONS);
// note: the fabs call is just there to hide "if result is constant" warning
-#define REGISTER_WEAPON_2(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
+#define REGISTER_WEAPON_2(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
float id; \
float func(float); \
void RegisterWeapons_##id() \
if(fabs(weapontype & WEP_FLAG_SUPERWEAPON)) \
WEPSET_OR_AW(WEPBIT_SUPERWEAPONS, id); \
++WEP_COUNT; \
- register_weapon(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname); \
+ register_weapon(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname); \
} \
ACCUMULATE_FUNCTION(RegisterWeapons, RegisterWeapons_##id)
#ifdef MENUQC
-#define REGISTER_WEAPON(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
- REGISTER_WEAPON_2(WEP_##id,w_null,0,0,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
+#define REGISTER_WEAPON(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
+ REGISTER_WEAPON_2(WEP_##id,w_null,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
#else
-#define REGISTER_WEAPON(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
- REGISTER_WEAPON_2(WEP_##id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
+#define REGISTER_WEAPON(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \
+ REGISTER_WEAPON_2(WEP_##id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname)
#endif
#include "../server/w_all.qc"
float autocvar_g_balance_nex_secondary_damagefalloff_mindist;
float autocvar_g_balance_nex_secondary_force;
float autocvar_g_balance_nex_secondary_refire;
-float autocvar_g_balance_nex_switchdelay_drop;
-float autocvar_g_balance_nex_switchdelay_raise;
+noref float autocvar_g_balance_nex_switchdelay_drop;
+noref float autocvar_g_balance_nex_switchdelay_raise;
float autocvar_g_balance_nex_reload_ammo;
float autocvar_g_balance_nex_reload_time;
float autocvar_g_balance_nexball_primary_animtime;
// Change weapon
if (self.weapon != self.switchweapon)
{
- entity e;
- e = get_weaponinfo(self.switchweapon);
-
if (self.weaponentity.state == WS_CLEAR)
{
// end switching!
self.switchingweapon = self.switchweapon;
+ entity newwep = get_weaponinfo(self.switchweapon);
+
//setanim(self, self.anim_draw, FALSE, TRUE, TRUE);
self.weaponentity.state = WS_RAISE;
weapon_action(self.switchweapon, WR_SETUP);
// set our clip load to the load of the weapon we switched to, if it's reloadable
- if(e.spawnflags & WEP_FLAG_RELOADABLE && cvar(strcat("g_balance_", e.netname, "_reload_ammo"))) // prevent accessing undefined cvars
+ if(newwep.spawnflags & WEP_FLAG_RELOADABLE && cvar(strcat("g_balance_", newwep.netname, "_reload_ammo"))) // prevent accessing undefined cvars
{
self.clip_load = self.(weapon_load[self.switchweapon]);
- self.clip_size = cvar(strcat("g_balance_", e.netname, "_reload_ammo"));
+ self.clip_size = cvar(strcat("g_balance_", newwep.netname, "_reload_ammo"));
}
else
self.clip_load = self.clip_size = 0;
// VorteX: add player model weapon select frame here
// setcustomframe(PlayerWeaponRaise);
- weapon_thinkf(WFRAME_IDLE, cvar(sprintf("g_balance_%s_switchdelay_raise", e.netname)), w_ready);
+ weapon_thinkf(WFRAME_IDLE, cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)), w_ready);
weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');
}
else if (self.weaponentity.state == WS_DROP)
// start switching!
self.switchingweapon = self.switchweapon;
+ entity oldwep = get_weaponinfo(self.weapon);
+
#ifndef INDEPENDENT_ATTACK_FINISHED
if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5)
{
sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
self.weaponentity.state = WS_DROP;
// set up weapon switch think in the future, and start drop anim
- weapon_thinkf(WFRAME_DONTCHANGE, cvar(sprintf("g_balance_%s_switchdelay_drop", e.netname)), w_clear);
+ weapon_thinkf(WFRAME_DONTCHANGE, cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)), w_clear);
weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);
#ifndef INDEPENDENT_ATTACK_FINISHED
}
}
self.angles = '0 0 0';
+
float f;
if (self.state == WS_RAISE && !intermission_running)
{
- f = (self.owner.weapon_nextthink - time) * g_weaponratefactor / ((self.switchdelay_raise < 0) ? autocvar_g_balance_weaponswitchdelay : self.switchdelay_raise);
+ entity newwep = get_weaponinfo(self.owner.switchweapon);
+ f = (self.owner.weapon_nextthink - time) * g_weaponratefactor / cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname));
self.angles_x = -90 * f * f;
}
else if (self.state == WS_DROP && !intermission_running)
{
- f = 1 - (self.owner.weapon_nextthink - time) * g_weaponratefactor / ((self.switchdelay_drop < 0) ? autocvar_g_balance_weaponswitchdelay : self.switchdelay_drop);
+ entity oldwep = get_weaponinfo(self.owner.weapon);
+ f = 1 - (self.owner.weapon_nextthink - time) * g_weaponratefactor / cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname));
self.angles_x = -90 * f * f;
}
else if (self.state == WS_CLEAR)
{
weapon_setup(WEP_NEX);
self.current_ammo = ammo_cells;
- self.weaponentity.switchdelay_drop = autocvar_g_balance_nex_switchdelay_drop;
- self.weaponentity.switchdelay_raise = autocvar_g_balance_nex_switchdelay_raise;
}
else if (req == WR_CHECKAMMO1)
{