X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fcsqcmodel_hooks.qc;h=6f008fb541a118c53c2a10cf0513d64fffe61dd9;hb=02c69da4fd008a0291ebdd8b88129f86b3108e74;hp=848c632773404b03f3e2b2f5cdea611483e78a17;hpb=d2aa2e833adeef6854046076d65472310ac9f542;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/csqcmodel_hooks.qc b/qcsrc/client/csqcmodel_hooks.qc index 848c63277..6f008fb54 100644 --- a/qcsrc/client/csqcmodel_hooks.qc +++ b/qcsrc/client/csqcmodel_hooks.qc @@ -114,7 +114,7 @@ void CSQCPlayer_ModelAppearance_PostUpdate(void) self.forceplayermodels_isgoodmodel = fexists(self.forceplayermodels_savemodel); self.forceplayermodels_isgoodmodel_mdl = self.forceplayermodels_savemodel; if(!self.forceplayermodels_isgoodmodel) - print(sprintf("Warning: missing model %s has been used\n", self.forceplayermodels_savemodel)); + printf("Warning: missing model %s has been used\n", self.forceplayermodels_savemodel); } } void CSQCPlayer_ModelAppearance_Apply(float islocalplayer) @@ -292,7 +292,7 @@ void CSQCPlayer_ModelAppearance_Apply(float islocalplayer) else if(self.old_glowmod != '0 0 0') { self.old_glowmod = '0 0 0'; } } - //print(sprintf("CSQCPlayer_ModelAppearance_Apply(): state = %s, colormap = %f, glowmod = %s\n", (self.csqcmodel_isdead ? "DEAD" : "ALIVE"), self.colormap, vtos(self.glowmod))); + //printf("CSQCPlayer_ModelAppearance_Apply(): state = %s, colormap = %f, glowmod = %s\n", (self.csqcmodel_isdead ? "DEAD" : "ALIVE"), self.colormap, vtos(self.glowmod)); } // FEATURE: fallback frames @@ -362,7 +362,7 @@ float CSQCPlayer_FallbackFrame(float f) case 29: return 4; // anim_duckwalkbackright -> anim_duckwalk case 30: return 4; // anim_duckwalkbackleft -> anim_duckwalk } - print(sprintf("Frame %d missing in model %s, and we have no fallback - FAIL!\n", f, self.model)); + printf("Frame %d missing in model %s, and we have no fallback - FAIL!\n", f, self.model); return f; } void CSQCPlayer_FallbackFrame_Apply(void) @@ -610,7 +610,22 @@ void CSQCModel_Hook_PreDraw(float isplayer) CSQCPlayer_ModelAppearance_Apply(self.entnum == player_localnum + 1); CSQCPlayer_LOD_Apply(); if(!isplayer) + { + skeleton_loadinfo(self); + float doblend = (self.bone_upperbody >= 0); CSQCPlayer_FallbackFrame_Apply(); + if(doblend) + { + skeleton_from_frames(self, self.csqcmodel_isdead); + } + else + { + free_skeleton_from_frames(self); + // just in case, clear these (we're animating in frame and frame3) + self.lerpfrac = 0; + self.lerpfrac4 = 0; + } + } else { // we know that frame3 and frame4 fields, used by InterpolateAnimation, are left alone - but that is all we know!