]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/csqcmodel_hooks.qc
Merge branch 'master' into Mario/minigames_merge
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / csqcmodel_hooks.qc
index 715a05c52bcd125ca33f376acdc0935be86779bc..91f3bfb4c6410f6b163e38eba85b882635bd6cfa 100644 (file)
@@ -1,3 +1,26 @@
+#include "csqcmodel_hooks.qh"
+#include "_all.qh"
+
+#include "gibs.qh"
+#include "player_skeleton.qh"
+#include "sortlist.qh"
+
+#include "weapons/projectile.qh"
+
+#include "../common/animdecide.qh"
+#include "../common/csqcmodel_settings.qh"
+#include "../common/teams.qh"
+#include "../common/triggers/trigger/viewloc.qh"
+
+#include "../csqcmodellib/cl_model.qh"
+#include "../csqcmodellib/cl_player.qh"
+#include "../csqcmodellib/interpolate.qh"
+
+#include "../warpzonelib/mathlib.qh"
+
+.float death_time;
+.int modelflags;
+
 void CSQCModel_Hook_PreDraw(bool isplayer);
 
 .bool isplayermodel;
@@ -267,7 +290,7 @@ void CSQCPlayer_ModelAppearance_Apply(bool islocalplayer)
 
        // GLOWMOD AND DEATH FADING
        if(self.colormap > 0)
-               self.glowmod = colormapPaletteColor(((self.colormap >= 1024) ? self.colormap : stof(getplayerkeyvalue(self.colormap - 1, "colors"))) & 0x0F, TRUE) * 2;
+               self.glowmod = colormapPaletteColor(((self.colormap >= 1024) ? self.colormap : stof(getplayerkeyvalue(self.colormap - 1, "colors"))) & 0x0F, true) * 2;
        else
                self.glowmod = '1 1 1';
 
@@ -322,16 +345,15 @@ void CSQCPlayer_FallbackFrame_PostUpdate(bool isnew)
        // player "pops in"
        if(isnew)
        {
-#define FIX_FRAMETIME(f,ft) \
-               if(IS_DEAD_FRAME(self.f) && self.ft != 0 && self.death_time != 0) \
-               { \
-                       self.ft = self.death_time; \
-               }
-               FIX_FRAMETIME(frame, frame1time)
-               FIX_FRAMETIME(frame2, frame2time)
+#define FIX_FRAMETIME(f,ft) do {                                                                                                                                                                       \
+               if(IS_DEAD_FRAME(self.f) && self.ft != 0 && self.death_time != 0)                                                                                       \
+                       self.ft = self.death_time;                                                                                                                                                              \
+} while(0)
+               FIX_FRAMETIME(frame, frame1time);
+               FIX_FRAMETIME(frame2, frame2time);
 #ifdef CSQCMODEL_HAVE_TWO_FRAMES
-               FIX_FRAMETIME(frame3, frame3time)
-               FIX_FRAMETIME(frame4, frame4time)
+               FIX_FRAMETIME(frame3, frame3time);
+               FIX_FRAMETIME(frame4, frame4time);
 #endif
        }
        self.csqcmodel_isdead = IS_DEAD_FRAME(self.frame);
@@ -379,6 +401,12 @@ void CSQCModel_AutoTagIndex_Apply(void)
        if(self.tag_entity && wasfreed(self.tag_entity))
                self.tag_entity = world;
 
+       if(self.viewloc && wasfreed(self.viewloc))
+               self.viewloc = world;
+
+       if(self.viewloc.entnum != self.tag_networkviewloc)
+               self.viewloc = findfloat(world, entnum, self.tag_networkviewloc);
+
        if(self.tag_networkentity)
        {
                // we are ATTACHED!
@@ -408,9 +436,9 @@ void CSQCModel_AutoTagIndex_Apply(void)
                        if(self.tag_entity)
                        {
                                // the best part is: IT EXISTS
-                               if(substring(self.model, 0, 17) == "models/weapons/v_")
+                               if(substring(self.model, 0, 14) == "models/weapons")
                                {
-                                       if(substring(self.tag_entity.model, 0, 17) == "models/weapons/h_")
+                                       if(substring(self.tag_entity.model, 0, 14) == "models/weapons")
                                        {
                                                self.tag_index = gettagindex(self.tag_entity, "weapon");
                                                if(!self.tag_index)
@@ -430,7 +458,7 @@ void CSQCModel_AutoTagIndex_Apply(void)
                                        }
                                }
 
-                               if(substring(self.tag_entity.model, 0, 17) == "models/weapons/v_")
+                               if(substring(self.tag_entity.model, 0, 14) == "models/weapons")
                                {
                                        self.tag_index = gettagindex(self.tag_entity, "shot");
                                        if(!self.tag_index)
@@ -485,7 +513,7 @@ void CSQCModel_Effects_PostUpdate(void)
        if(self.csqcmodel_teleported)
                Projectile_ResetTrail(self.origin);
 }
-.bool snd_looping;
+.int snd_looping;
 void CSQCModel_Effects_Apply(void)
 {
        int eff = self.csqcmodel_effects & ~CSQCMODEL_EF_RESPAWNGHOST;
@@ -634,13 +662,13 @@ void CSQCModel_Hook_PreDraw(bool isplayer)
                        bool onground = 0;
                        if(self == csqcplayer)
                        {
-                               if(self.pmove_flags & PMF_ONGROUND)
+                               if(self.flags & FL_ONGROUND)
                                        onground = 1;
-                               self.anim_prev_pmove_flags = self.pmove_flags;
-                               if(self.pmove_flags & PMF_DUCKED)
-                                       animdecide_setstate(self, self.anim_state | ANIMSTATE_DUCK, FALSE);
+                               self.anim_prev_pmove_flags = self.flags;
+                               if(self.flags & FL_DUCKED)
+                                       animdecide_setstate(self, self.anim_state | ANIMSTATE_DUCK, false);
                                else if(self.anim_state & ANIMSTATE_DUCK)
-                                       animdecide_setstate(self, self.anim_state - ANIMSTATE_DUCK, FALSE);
+                                       animdecide_setstate(self, self.anim_state - ANIMSTATE_DUCK, false);
                        }
                        else
                        {
@@ -668,7 +696,7 @@ void CSQCModel_Hook_PreDraw(bool isplayer)
                        self.frame1time = self.anim_frame1time;
                        self.frame2 = self.anim_frame2;
                        self.frame2time = self.anim_frame2time;
-                       CSQCModel_InterpolateAnimation_2To4_Note(sf | CSQCMODEL_PROPERTY_LERPFRAC, FALSE);
+                       CSQCModel_InterpolateAnimation_2To4_Note(sf | CSQCMODEL_PROPERTY_LERPFRAC, false);
                        CSQCModel_InterpolateAnimation_2To4_Do();
                        if(doblend)
                        {