2 #include "../dpdefs/csprogsdefs.qh"
3 #include "../common/util.qh"
4 #include "autocvars.qh"
5 #include "../csqcmodellib/interpolate.qh"
6 #include "bgmscript.qh"
8 #include "../csqcmodellib/cl_model.qh"
14 .float bgmscriptangular;
15 .int lodmodelindex0, lodmodelindex1, lodmodelindex2;
16 .float loddistance1, loddistance2;
24 if(self.bgmscriptangular)
28 self.fld = self.saved;
30 if(self.lodmodelindex1)
32 if(autocvar_cl_modeldetailreduction <= 0)
34 if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
35 self.modelindex = self.lodmodelindex2;
36 else if(autocvar_cl_modeldetailreduction <= -1)
37 self.modelindex = self.lodmodelindex1;
39 self.modelindex = self.lodmodelindex0;
43 float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
44 f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
45 f *= 1.0 / bound(0.01, view_quality, 1);
46 if(self.lodmodelindex2 && f > self.loddistance2)
47 self.modelindex = self.lodmodelindex2;
48 else if(f > self.loddistance1)
49 self.modelindex = self.lodmodelindex1;
51 self.modelindex = self.lodmodelindex0;
55 InterpolateOrigin_Do();
57 self.saved = self.fld;
62 if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
63 self.alpha = 1 + self.lip * f;
64 else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
65 self.alpha = 1 - self.lip * (1 - f);
66 self.fld = self.fld + self.movedir * f;
71 if(self.alpha >= ALPHA_MIN_VISIBLE)
72 self.drawmask = MASK_NORMAL;
77 void Ent_Wall_Remove()
80 strunzone(self.bgmscript);
81 self.bgmscript = string_null;
89 InterpolateOrigin_Undo();
90 self.iflags = IFLAG_ANGLES | IFLAG_ORIGIN;
92 if(self.bgmscriptangular)
96 self.fld = self.saved;
103 self.colormap = ReadShort();
110 self.origin_x = ReadCoord();
111 self.origin_y = ReadCoord();
112 self.origin_z = ReadCoord();
113 setorigin(self, self.origin);
120 self.angles_x = ReadAngle();
121 self.angles_y = ReadAngle();
122 self.angles_z = ReadAngle();
125 self.angles = '0 0 0';
132 self.lodmodelindex0 = ReadShort();
133 self.loddistance1 = ReadShort();
134 self.lodmodelindex1 = ReadShort();
135 self.loddistance2 = ReadShort();
136 self.lodmodelindex2 = ReadShort();
140 self.modelindex = ReadShort();
141 self.loddistance1 = 0;
142 self.loddistance2 = 0;
144 self.solid = ReadByte();
145 self.scale = ReadShort() / 256.0;
148 self.mins_x = ReadCoord();
149 self.mins_y = ReadCoord();
150 self.mins_z = ReadCoord();
151 self.maxs_x = ReadCoord();
152 self.maxs_y = ReadCoord();
153 self.maxs_z = ReadCoord();
156 self.mins = self.maxs = '0 0 0';
157 setsize(self, self.mins, self.maxs);
160 strunzone(self.bgmscript);
161 self.bgmscript = ReadString();
162 if(substring(self.bgmscript, 0, 1) == "<")
164 self.bgmscript = strzone(substring(self.bgmscript, 1, -1));
165 self.bgmscriptangular = 1;
169 self.bgmscript = strzone(self.bgmscript);
170 self.bgmscriptangular = 0;
172 if(self.bgmscript != "")
174 self.bgmscriptattack = ReadByte() / 64.0;
175 self.bgmscriptdecay = ReadByte() / 64.0;
176 self.bgmscriptsustain = ReadByte() / 255.0;
177 self.bgmscriptrelease = ReadByte() / 64.0;
178 self.movedir_x = ReadCoord();
179 self.movedir_y = ReadCoord();
180 self.movedir_z = ReadCoord();
181 self.lip = ReadByte() / 255.0;
183 BGMScript_InitEntity(self);
186 InterpolateOrigin_Note();
188 self.saved = self.fld;
190 self.entremove = Ent_Wall_Remove;
191 self.draw = Ent_Wall_Draw;