9 void CSQCModel_Hook_PreDraw(float isplayer)
11 // auto glowmod from colormap
15 self.glowmod = colormapPaletteColor(((self.colormap >= 1024) ? (self.colormap & 0xFF) : stof(getplayerkeyvalue(self.colormap - 1, "colors"))), TRUE) * 2;
17 self.glowmod = '1 1 1';
19 if(self.modelindex && self.model != "null")
21 if(autocvar_cl_playerdetailreduction <= 0)
23 if(autocvar_cl_playerdetailreduction <= -2)
24 self.modelindex = self.lodmodelindex2;
25 else if(autocvar_cl_playerdetailreduction <= -1)
26 self.modelindex = self.lodmodelindex1;
28 self.modelindex = self.lodmodelindex0;
32 float distance = vlen(self.origin - other.origin);
33 float f = (distance + 100.0) * autocvar_cl_playerdetailreduction;
34 f *= 1.0 / bound(0.01, view_quality, 1);
35 if(f > autocvar_cl_loddistance2)
36 self.modelindex = self.lodmodelindex2;
37 else if(f > autocvar_cl_loddistance1)
38 self.modelindex = self.lodmodelindex1;
40 self.modelindex = self.lodmodelindex0;
47 if(self.tag_entity && wasfreed(self.tag_entity))
48 self.tag_entity = world;
50 if(self.tag_networkentity)
53 if(self.tag_entity.entnum == self.tag_networkentity)
56 self.drawmask = MASK_NORMAL;
60 // to something NEW NEW NEW NEW!
61 self.tag_entity = findfloat(world, entnum, self.tag_networkentity);
64 // the best part is: IT EXISTS
65 self.drawmask = MASK_NORMAL;
67 if(substring(self.model, 0, 17) == "models/weapons/v_")
68 if(substring(self.tag_entity.model, 0, 17) == "models/weapons/h_")
70 self.tag_index = gettagindex(self.tag_entity, "weapon");
72 self.tag_index = gettagindex(self.tag_entity, "tag_weapon");
75 // we need to prevent this from 'appening
76 self.tag_entity = world;
78 dprint("h_ model lacks weapon attachment, but v_ model is attached to it\n");
82 if(substring(self.model, 0, 17) == "models/weapons/v_")
83 if(substring(self.tag_entity.model, 0, 14) == "models/player/")
85 self.tag_index = gettagindex(self.tag_entity, "tag_weapon");
87 self.tag_index = gettagindex(self.tag_entity, "bip01 r hand");
90 if(substring(self.tag_entity.model, 0, 17) == "models/weapons/v_")
92 self.tag_index = gettagindex(self.tag_entity, "shot");
94 self.tag_index = gettagindex(self.tag_entity, "tag_shot");
99 // damn, see you next frame
107 self.drawmask = MASK_NORMAL;
112 string forceplayermodels_model;
113 float forceplayermodels_modelindex;
114 float forceplayermodels_skin;
115 float forceplayermodels_attempted;
116 .string forceplayermodels_savemodel;
117 .float forceplayermodels_savemodelindex;
118 .float forceplayermodels_saveskin;
119 void CSQCModel_Hook_PreUpdate(float isplayer, float islocalplayer)
123 // revert to values from server
124 self.model = self.forceplayermodels_savemodel;
125 self.modelindex = self.forceplayermodels_savemodelindex;
126 self.skin = self.forceplayermodels_saveskin;
130 void CSQCModel_Hook_PostUpdate(float isplayer, float islocalplayer)
134 // save values set by server
135 self.forceplayermodels_savemodel = self.model;
136 self.forceplayermodels_savemodelindex = self.modelindex;
137 self.forceplayermodels_saveskin = self.skin;
139 if(self.modelindex && self.model != "null")
143 // trust server's idea of "own player model"
144 forceplayermodels_model = self.model;
145 forceplayermodels_modelindex = self.modelindex;
146 forceplayermodels_skin = self.skin;
147 forceplayermodels_attempted = 1;
150 if(!forceplayermodels_attempted)
152 // only if this failed, find it out on our own
155 setmodel(e, autocvar__cl_playermodel); // this is harmless, see below
156 forceplayermodels_model = e.model;
157 forceplayermodels_modelindex = e.modelindex;
158 forceplayermodels_skin = autocvar__cl_playerskin;
159 forceplayermodels_attempted = 1;
163 if(autocvar_cl_forceplayermodels && forceplayermodels_modelindex)
165 self.model = forceplayermodels_model;
166 self.modelindex = forceplayermodels_modelindex;
167 self.skin = forceplayermodels_skin;
171 if(self.lodmodelindex0 != self.modelindex)
173 string modelname = self.model;
176 if(!fexists(modelname))
178 print(sprintf(_("Trying to use non existing model %s. "), modelname));
179 modelname = cvar_defstring("_cl_playermodel");
180 print(sprintf(_("Reverted to %s."), modelname));
184 self.lodmodelindex0 = self.modelindex;
185 self.lodmodelindex1 = self.modelindex;
186 self.lodmodelindex2 = self.modelindex;
188 // FIXME: this only supports 3-letter extensions
189 s = strcat(substring(modelname, 0, strlen(modelname)-4), "_lod1", substring(modelname, -4, 4));
195 self.lodmodelindex1 = self.modelindex;
198 s = strcat(substring(modelname, 0, strlen(modelname)-4), "_lod2", substring(modelname, -4, 4));
204 self.lodmodelindex2 = self.modelindex;
207 setmodel(self, modelname); // make everything normal again