]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge cl_weapons code into main
authorSamual Lenks <samual@xonotic.org>
Mon, 1 Jul 2013 08:42:11 +0000 (04:42 -0400)
committerSamual Lenks <samual@xonotic.org>
Mon, 1 Jul 2013 08:42:11 +0000 (04:42 -0400)
qcsrc/server/weapons/cl_weapons.qc [deleted file]
qcsrc/server/weapons/cl_weapons.qh [deleted file]
qcsrc/server/weapons/main.qc
qcsrc/server/weapons/main.qh [new file with mode: 0644]

diff --git a/qcsrc/server/weapons/cl_weapons.qc b/qcsrc/server/weapons/cl_weapons.qc
deleted file mode 100644 (file)
index abb8f3a..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-float forbidWeaponUse()
-{
-       if(time < game_starttime && !autocvar_sv_ready_restart_after_countdown)
-               return 1;
-       if(round_handler_IsActive() && !round_handler_IsRoundStarted())
-               return 1;
-       if(self.player_blocked)
-               return 1;
-       if(self.freezetag_frozen)
-               return 1;
-       return 0;
-}
-
-void W_WeaponFrame()
-{
-       vector fo, ri, up;
-
-       if (frametime)
-               self.weapon_frametime = frametime;
-
-       if (!self.weaponentity || self.health < 1)
-               return; // Dead player can't use weapons and injure impulse commands
-
-       if(forbidWeaponUse())
-       if(self.weaponentity.state != WS_CLEAR)
-       {
-               w_ready();
-               return;
-       }
-
-       if(!self.switchweapon)
-       {
-               self.weapon = 0;
-               self.switchingweapon = 0;
-               self.weaponentity.state = WS_CLEAR;
-               self.weaponname = "";
-               self.items &~= IT_AMMO;
-               return;
-       }
-
-       makevectors(self.v_angle);
-       fo = v_forward; // save them in case the weapon think functions change it
-       ri = v_right;
-       up = v_up;
-
-       // Change weapon
-       if (self.weapon != self.switchweapon)
-       {
-               if (self.weaponentity.state == WS_CLEAR)
-               {
-                       // end switching!
-                       self.switchingweapon = self.switchweapon;
-                       entity newwep = get_weaponinfo(self.switchweapon);
-
-                       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
-                       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
-                       {
-                               self.clip_load = self.(weapon_load[self.switchweapon]);
-                               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, newwep.switchdelay_raise, w_ready);
-                       //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname))));
-                       weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');
-               }
-               else if (self.weaponentity.state == WS_DROP)
-               {
-                       // in dropping phase we can switch at any time
-                       self.switchingweapon = self.switchweapon;
-               }
-               else if (self.weaponentity.state == WS_READY)
-               {
-                       // 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)
-                       {
-#endif
-                       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, oldwep.switchdelay_drop, w_clear);
-                       //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname))));
-                       weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);
-#ifndef INDEPENDENT_ATTACK_FINISHED
-                       }
-#endif
-               }
-       }
-
-       // LordHavoc: network timing test code
-       //if (self.button0)
-       //      print(ftos(frametime), " ", ftos(time), " >= ", ftos(ATTACK_FINISHED(self)), " >= ", ftos(self.weapon_nextthink), "\n");
-
-       float w;
-       w = self.weapon;
-
-       // call the think code which may fire the weapon
-       // and do so multiple times to resolve framerate dependency issues if the
-       // server framerate is very low and the weapon fire rate very high
-       float c;
-       c = 0;
-       while (c < W_TICSPERFRAME)
-       {
-               c = c + 1;
-               if(w && !WEPSET_CONTAINS_EW(self, w))
-               {
-                       if(self.weapon == self.switchweapon)
-                               W_SwitchWeapon_Force(self, w_getbestweapon(self));
-                       w = 0;
-               }
-
-               v_forward = fo;
-               v_right = ri;
-               v_up = up;
-
-               if(w)
-                       WEP_ACTION(self.weapon, WR_THINK);
-               else
-                       WEP_ACTION(self.weapon, WR_GONETHINK);
-
-               if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink)
-               {
-                       if(self.weapon_think)
-                       {
-                               v_forward = fo;
-                               v_right = ri;
-                               v_up = up;
-                               self.weapon_think();
-                       }
-                       else
-                               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
-}
diff --git a/qcsrc/server/weapons/cl_weapons.qh b/qcsrc/server/weapons/cl_weapons.qh
deleted file mode 100644 (file)
index bd60f4b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-float weaponswapping;
-float internalteam;
-
-void weapon_defaultspawnfunc(float wpn);
index be5eca13b81318497e7d6fa8266599ee4c46758f..68c78aa9b5b01df398c669daddd571c992edf47c 100644 (file)
@@ -777,6 +777,172 @@ void weapon_thinkf(float fr, float t, void() func)
        }
 }
 
+float forbidWeaponUse()
+{
+       if(time < game_starttime && !autocvar_sv_ready_restart_after_countdown)
+               return 1;
+       if(round_handler_IsActive() && !round_handler_IsRoundStarted())
+               return 1;
+       if(self.player_blocked)
+               return 1;
+       if(self.freezetag_frozen)
+               return 1;
+       return 0;
+}
+
+void W_WeaponFrame()
+{
+       vector fo, ri, up;
+
+       if (frametime)
+               self.weapon_frametime = frametime;
+
+       if (!self.weaponentity || self.health < 1)
+               return; // Dead player can't use weapons and injure impulse commands
+
+       if(forbidWeaponUse())
+       if(self.weaponentity.state != WS_CLEAR)
+       {
+               w_ready();
+               return;
+       }
+
+       if(!self.switchweapon)
+       {
+               self.weapon = 0;
+               self.switchingweapon = 0;
+               self.weaponentity.state = WS_CLEAR;
+               self.weaponname = "";
+               self.items &~= IT_AMMO;
+               return;
+       }
+
+       makevectors(self.v_angle);
+       fo = v_forward; // save them in case the weapon think functions change it
+       ri = v_right;
+       up = v_up;
+
+       // Change weapon
+       if (self.weapon != self.switchweapon)
+       {
+               if (self.weaponentity.state == WS_CLEAR)
+               {
+                       // end switching!
+                       self.switchingweapon = self.switchweapon;
+                       entity newwep = get_weaponinfo(self.switchweapon);
+
+                       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
+                       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
+                       {
+                               self.clip_load = self.(weapon_load[self.switchweapon]);
+                               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, newwep.switchdelay_raise, w_ready);
+                       //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname))));
+                       weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');
+               }
+               else if (self.weaponentity.state == WS_DROP)
+               {
+                       // in dropping phase we can switch at any time
+                       self.switchingweapon = self.switchweapon;
+               }
+               else if (self.weaponentity.state == WS_READY)
+               {
+                       // 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)
+                       {
+#endif
+                       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, oldwep.switchdelay_drop, w_clear);
+                       //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname))));
+                       weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);
+#ifndef INDEPENDENT_ATTACK_FINISHED
+                       }
+#endif
+               }
+       }
+
+       // LordHavoc: network timing test code
+       //if (self.button0)
+       //      print(ftos(frametime), " ", ftos(time), " >= ", ftos(ATTACK_FINISHED(self)), " >= ", ftos(self.weapon_nextthink), "\n");
+
+       float w;
+       w = self.weapon;
+
+       // call the think code which may fire the weapon
+       // and do so multiple times to resolve framerate dependency issues if the
+       // server framerate is very low and the weapon fire rate very high
+       float c;
+       c = 0;
+       while (c < W_TICSPERFRAME)
+       {
+               c = c + 1;
+               if(w && !WEPSET_CONTAINS_EW(self, w))
+               {
+                       if(self.weapon == self.switchweapon)
+                               W_SwitchWeapon_Force(self, w_getbestweapon(self));
+                       w = 0;
+               }
+
+               v_forward = fo;
+               v_right = ri;
+               v_up = up;
+
+               if(w)
+                       WEP_ACTION(self.weapon, WR_THINK);
+               else
+                       WEP_ACTION(self.weapon, WR_GONETHINK);
+
+               if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink)
+               {
+                       if(self.weapon_think)
+                       {
+                               v_forward = fo;
+                               v_right = ri;
+                               v_up = up;
+                               self.weapon_think();
+                       }
+                       else
+                               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 weapon_boblayer1(float spd, vector org)
 {
        // VorteX: haste can be added here
diff --git a/qcsrc/server/weapons/main.qh b/qcsrc/server/weapons/main.qh
new file mode 100644 (file)
index 0000000..bd60f4b
--- /dev/null
@@ -0,0 +1,4 @@
+float weaponswapping;
+float internalteam;
+
+void weapon_defaultspawnfunc(float wpn);