]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/all.qc
Store rifle_accumulator on the weapon entity
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / all.qc
index 2b75ec0313f9aa015b916b0d7479c44b12a11be8..9efbb29a2615aab18f98eaddd1a0359620455086 100644 (file)
@@ -1,8 +1,7 @@
+#include "all.qh"
 #ifndef WEAPONS_ALL_C
 #define WEAPONS_ALL_C
 
-#include "all.qh"
-
 #if defined(CSQC)
        #include <client/defs.qh>
        #include "../constants.qh"
@@ -19,6 +18,7 @@
        #include <lib/csqcmodel/cl_model.qh>
 #elif defined(MENUQC)
 #elif defined(SVQC)
+       #include <common/items/_mod.qh>
     #include <lib/warpzone/anglestransform.qh>
     #include <lib/warpzone/common.qh>
     #include <lib/warpzone/util_server.qh>
@@ -26,8 +26,8 @@
     #include "../constants.qh"
     #include "../stats.qh"
     #include "../teams.qh"
-    #include "../util.qh"
-    #include "../monsters/all.qh"
+    #include <common/util.qh>
+    #include "../monsters/_mod.qh"
     #include "config.qh"
     #include <server/weapons/csqcprojectile.qh>
     #include <server/weapons/tracing.qh>
     #include <server/defs.qh>
     #include "../notifications/all.qh"
     #include "../deathtypes/all.qh"
-    #include <server/mutators/all.qh>
+    #include <server/mutators/_mod.qh>
     #include "../mapinfo.qh"
-    #include <server/command/common.qh>
+    #include <server/command/_mod.qh>
     #include <lib/csqcmodel/sv_model.qh>
     #include <server/portals.qh>
     #include <server/g_hook.qh>
 #endif
-#ifndef MENUQC
+#ifdef GAMEQC
        #include "calculations.qc"
 #endif
 #ifdef SVQC
@@ -67,11 +67,11 @@ WepSet _WepSet_FromWeapon(int a)
                                if (a >= 24)
                                {
                                        a -= 24;
-                                       return '0 0 1' * power2of(a);
+                                       return '0 0 1' * (2 ** a);
                                }
-                       return '0 1 0' * power2of(a);
+                       return '0 1 0' * (2 ** a);
                }
-       return '1 0 0' * power2of(a);
+       return '1 0 0' * (2 ** a);
 }
 #ifdef SVQC
        void WriteWepSet(float dst, WepSet w)
@@ -192,19 +192,16 @@ string W_FixWeaponOrder_ForceComplete(string order)
        return W_FixWeaponOrder(order, 1);
 }
 
-void W_RandomWeapons(entity e, float n)
+void W_RandomWeapons(entity e, int n)
 {
-       int i;
-       WepSet remaining;
-       WepSet result;
-       remaining = e.weapons;
-       result = '0 0 0';
-       for (i = 0; i < n; ++i)
+       WepSet remaining = e.weapons;
+       WepSet result = '0 0 0';
+       for (int j = 0; j < n; ++j)
        {
                RandomSelection_Init();
                FOREACH(Weapons, it != WEP_Null, {
                        if (remaining & (it.m_wepset))
-                               RandomSelection_Add(it, 0, string_null, 1, 1);
+                               RandomSelection_AddEnt(it, 1, 1);
                });
                Weapon w = RandomSelection_chosen_ent;
                result |= WepSet_FromWeapon(w);
@@ -260,12 +257,8 @@ string GetAmmoPicture(.int ammotype)
 string W_Sound(string w_snd)
 {
        string output = strcat("weapons/", w_snd);
-#ifdef SVQC
-               MUTATOR_CALLHOOK(WeaponSound, w_snd, output);
-               return M_ARGV(1, string);
-#else
-               return output;
-#endif
+       MUTATOR_CALLHOOK(WeaponSound, w_snd, output);
+       return M_ARGV(1, string);
 }
 
 string W_Model(string w_mdl)
@@ -275,7 +268,7 @@ string W_Model(string w_mdl)
        return M_ARGV(1, string);
 }
 
-#ifndef MENUQC
+#ifdef GAMEQC
 vector shotorg_adjustfromclient(vector vecs, float y_is_right, float algn)
 {
        switch (algn)
@@ -391,7 +384,9 @@ void CL_WeaponEntity_SetModel(entity this, string name, bool _anim)
 {
        if (name == "")
        {
-               this.model = "";
+               vector oldmin = this.mins, oldmax = this.maxs;
+               setmodel(this, MDL_Null);
+               setsize(this, oldmin, oldmax);
                if (this.weaponchild) delete(this.weaponchild);
                this.weaponchild = NULL;
                this.movedir = '0 0 0';
@@ -523,7 +518,11 @@ void CL_WeaponEntity_SetModel(entity this, string name, bool _anim)
 
        if (this.movedir.x >= 0)
        {
-               int algn = STAT(GUNALIGN, this.owner);
+               //int algn = STAT(GUNALIGN, this.owner);
+               int algn = W_GunAlign(this, STAT(GUNALIGN, this.owner));
+       #ifdef SVQC
+               this.m_gunalign = algn;
+       #endif
                vector v = this.movedir;
                this.movedir = shotorg_adjust(v, false, false, algn);
                this.view_ofs = shotorg_adjust(v, false, true, algn) - v;
@@ -547,7 +546,7 @@ void CL_WeaponEntity_SetModel(entity this, string name, bool _anim)
 }
 #endif
 
-#ifndef MENUQC
+#ifdef GAMEQC
 
 REGISTER_NET_TEMP(wframe)
 #ifdef CSQC
@@ -557,21 +556,25 @@ NET_HANDLE(wframe, bool isNew)
        a.x = ReadCoord();
     a.y = ReadCoord();
     a.z = ReadCoord();
+    int slot = ReadByte();
        bool restartanim = ReadByte();
-       anim_set(viewmodel, a, !restartanim, restartanim, restartanim);
-       viewmodel.state = ReadByte();
-       viewmodel.weapon_nextthink = ReadFloat();
-       viewmodel.alpha = ReadByte() / 255;
-       switch (viewmodel.state)
+       entity wepent = viewmodels[slot];
+       if(a.x == wepent.anim_idle_x) // we don't need to enforce idle animation
+               wepent.animstate_looping = false;
+       else
+               anim_set(wepent, a, !restartanim, restartanim, restartanim);
+       wepent.state = ReadByte();
+       wepent.weapon_nextthink = ReadFloat();
+       switch (wepent.state)
        {
                case WS_RAISE:
-                       viewmodel.weapon_switchdelay = activeweapon.switchdelay_raise;
+                       wepent.weapon_switchdelay = wepent.activeweapon.switchdelay_raise;
                        break;
                case WS_DROP:
-                       viewmodel.weapon_switchdelay = activeweapon.switchdelay_drop;
+                       wepent.weapon_switchdelay = wepent.activeweapon.switchdelay_drop;
                        break;
         default:
-            viewmodel.weapon_switchdelay = 0;
+            wepent.weapon_switchdelay = 0;
             break;
        }
        return true;
@@ -588,10 +591,10 @@ void wframe_send(entity actor, entity weaponentity, vector a, bool restartanim)
        WriteCoord(channel, a.x);
        WriteCoord(channel, a.y);
        WriteCoord(channel, a.z);
+       WriteByte(channel, weaponslot(weaponentity.weaponentity_fld));
        WriteByte(channel, restartanim);
        WriteByte(channel, weaponentity.state);
        WriteFloat(channel, weaponentity.weapon_nextthink);
-       WriteByte(channel, weaponentity.m_alpha * 255);
 }
 #endif