From: Samual Lenks Date: Tue, 14 May 2013 07:13:53 +0000 (-0400) Subject: Save what i've got now for later if necessary X-Git-Tag: xonotic-v0.7.0~47^2~11 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=0a7f077d2afa8eede51253055d459b9af5e52072;p=xonotic%2Fxonotic-data.pk3dir.git Save what i've got now for later if necessary --- diff --git a/qcsrc/common/items.qc b/qcsrc/common/items.qc index c961895d9..913d16bc8 100644 --- a/qcsrc/common/items.qc +++ b/qcsrc/common/items.qc @@ -2,7 +2,7 @@ entity weapon_info[WEP_MAXCOUNT]; entity dummy_weapon_info; -void register_weapon(float id, float(float) func, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname) +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) { entity e; weapon_info[id - 1] = e = spawn(); @@ -19,6 +19,7 @@ void register_weapon(float id, float(float) func, float ammotype, float i, float 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) @@ -31,6 +32,9 @@ void register_weapon(float id, float(float) func, float ammotype, float i, float e.ammo_field = ammo_fuel; else e.ammo_field = ammo_batteries; + + e.switchdelay_drop = droptime; + e.switchdelay_raise = raisetime; } float w_null(float dummy) { @@ -52,6 +56,8 @@ void register_weapons_done() 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 = ""; diff --git a/qcsrc/common/items.qh b/qcsrc/common/items.qh index ba42d55ac..c0aab581b 100644 --- a/qcsrc/common/items.qh +++ b/qcsrc/common/items.qh @@ -83,11 +83,13 @@ string W_NumberWeaponOrder(string order); .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 ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname); +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_weapons_done(); #define WEP_FIRST 1 @@ -207,7 +209,7 @@ float WEP_LAST; 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,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \ +#define REGISTER_WEAPON_2(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \ float id; \ float func(float); \ void RegisterWeapons_##id() \ @@ -217,15 +219,15 @@ WEPSET_DECLARE_A(WEPBIT_SUPERWEAPONS); if(fabs(weapontype & WEP_FLAG_SUPERWEAPON)) \ WEPSET_OR_AW(WEPBIT_SUPERWEAPONS, id); \ ++WEP_COUNT; \ - register_weapon(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname); \ + register_weapon(id,func,droptime,raisetime,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname); \ } \ ACCUMULATE_FUNCTION(RegisterWeapons, RegisterWeapons_##id) #ifdef MENUQC -#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) +#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) #else -#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) +#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) #endif #include "../server/w_all.qc" diff --git a/qcsrc/server/cl_weapons.qc b/qcsrc/server/cl_weapons.qc index c4603aa65..a34e5fad3 100644 --- a/qcsrc/server/cl_weapons.qc +++ b/qcsrc/server/cl_weapons.qc @@ -398,6 +398,9 @@ void W_WeaponFrame() // Change weapon if (self.weapon != self.switchweapon) { + entity e; + e = get_weaponinfo(self.switchweapon); + if (self.weaponentity.state == WS_CLEAR) { // end switching! @@ -408,8 +411,6 @@ void W_WeaponFrame() weapon_action(self.switchweapon, WR_SETUP); // set our clip load to the load of the weapon we switched to, if it's reloadable - entity e; - e = get_weaponinfo(self.switchweapon); if(e.spawnflags & WEP_FLAG_RELOADABLE && cvar(strcat("g_balance_", e.netname, "_reload_ammo"))) // prevent accessing undefined cvars { self.clip_load = self.(weapon_load[self.switchweapon]); @@ -420,7 +421,7 @@ void W_WeaponFrame() // VorteX: add player model weapon select frame here // setcustomframe(PlayerWeaponRaise); - weapon_thinkf(WFRAME_IDLE, ((self.weaponentity.switchdelay_raise < 0) ? autocvar_g_balance_weaponswitchdelay : self.weaponentity.switchdelay_raise), w_ready); + weapon_thinkf(WFRAME_IDLE, cvar(sprintf("g_balance_%s_switchdelay_raise", e.netname)), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0'); } else if (self.weaponentity.state == WS_DROP) @@ -440,7 +441,7 @@ void W_WeaponFrame() 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, ((self.weaponentity.switchdelay_drop < 0) ? autocvar_g_balance_weaponswitchdelay : self.weaponentity.switchdelay_drop), w_clear); + weapon_thinkf(WFRAME_DONTCHANGE, cvar(sprintf("g_balance_%s_switchdelay_drop", e.netname)), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE); #ifndef INDEPENDENT_ATTACK_FINISHED } diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 21bfa0a84..7d3585725 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -177,8 +177,6 @@ void setanim(entity e, vector anim, float looping, float override, float restart .vector weaponentity_glowmod; //.float weapon; // current weapon -.float switchdelay_drop; // amount of time to complete drop frame for weapon -.float switchdelay_raise; // amount of time to complete raise frame for weapon .float switchweapon; // weapon requested to switch to .float switchingweapon; // weapon currently being switched to (is copied from switchweapon once switch is possible) .string weaponname; // name of .weapon