]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/weapons/all.qc
Fix weapon attack animations getting cut short by the animtime setting, and allow...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / weapons / all.qc
index 1faa1a0455d582904c20720e5e9a5c58c41e47b0..a694112ce6672ab57a176fc720b8df8c7ace4a5e 100644 (file)
@@ -204,7 +204,7 @@ void W_RandomWeapons(entity e, float n)
                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);
@@ -391,7 +391,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 +525,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;
@@ -560,10 +566,12 @@ NET_HANDLE(wframe, bool isNew)
     int slot = ReadByte();
        bool restartanim = ReadByte();
        entity wepent = viewmodels[slot];
-       anim_set(wepent, a, !restartanim, restartanim, restartanim);
+       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();
-       wepent.alpha = ReadByte() / 255;
        switch (wepent.state)
        {
                case WS_RAISE:
@@ -594,7 +602,6 @@ void wframe_send(entity actor, entity weaponentity, vector a, bool restartanim)
        WriteByte(channel, restartanim);
        WriteByte(channel, weaponentity.state);
        WriteFloat(channel, weaponentity.weapon_nextthink);
-       WriteByte(channel, weaponentity.m_alpha * 255);
 }
 #endif