4 #include "bgmscript.qh"
6 #include "../common/util.qh"
8 #include "../csqcmodellib/interpolate.qh"
14 void Ent_Wall_PreDraw()
22 vector org = getpropertyvec(VF_ORIGIN);
23 if(!checkpvs(org, self))
25 else if(self.fade_start || self.fade_end) {
26 vector offset = '0 0 0';
27 offset_z = self.fade_vertical_offset;
28 float player_dist = vlen(org - self.origin - 0.5 * (self.mins + self.maxs) + offset);
29 if (self.fade_end == self.fade_start)
31 if (player_dist >= self.fade_start)
38 self.alpha = (self.alpha_min + self.alpha_max * bound(0,
39 (self.fade_end - player_dist)
40 / (self.fade_end - self.fade_start), 1)) / 100.0;
51 self.drawmask = MASK_NORMAL;
59 if(self.bgmscriptangular)
63 self.(fld) = self.saved;
65 if(self.lodmodelindex1)
67 if(autocvar_cl_modeldetailreduction <= 0)
69 if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
70 self.modelindex = self.lodmodelindex2;
71 else if(autocvar_cl_modeldetailreduction <= -1)
72 self.modelindex = self.lodmodelindex1;
74 self.modelindex = self.lodmodelindex0;
78 float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
79 f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
80 f *= 1.0 / bound(0.01, view_quality, 1);
81 if(self.lodmodelindex2 && f > self.loddistance2)
82 self.modelindex = self.lodmodelindex2;
83 else if(f > self.loddistance1)
84 self.modelindex = self.lodmodelindex1;
86 self.modelindex = self.lodmodelindex0;
90 InterpolateOrigin_Do();
92 self.saved = self.(fld);
94 f = doBGMScript(self);
97 if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
98 self.alpha = 1 + self.lip * f;
99 else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
100 self.alpha = 1 - self.lip * (1 - f);
101 self.(fld) = self.(fld) + self.movedir * f;
106 if(self.alpha >= ALPHA_MIN_VISIBLE)
107 self.drawmask = MASK_NORMAL;
112 void Ent_Wall_Remove()
115 strunzone(self.bgmscript);
116 self.bgmscript = string_null;
124 InterpolateOrigin_Undo();
125 self.iflags = IFLAG_ANGLES | IFLAG_ORIGIN;
127 if(self.bgmscriptangular)
131 self.(fld) = self.saved;
138 self.colormap = ReadShort();
145 self.origin_x = ReadCoord();
146 self.origin_y = ReadCoord();
147 self.origin_z = ReadCoord();
148 setorigin(self, self.origin);
155 self.angles_x = ReadAngle();
156 self.angles_y = ReadAngle();
157 self.angles_z = ReadAngle();
160 self.angles = '0 0 0';
167 self.lodmodelindex0 = ReadShort();
168 self.loddistance1 = ReadShort();
169 self.lodmodelindex1 = ReadShort();
170 self.loddistance2 = ReadShort();
171 self.lodmodelindex2 = ReadShort();
175 self.modelindex = ReadShort();
176 self.loddistance1 = 0;
177 self.loddistance2 = 0;
179 self.solid = ReadByte();
180 self.scale = ReadShort() / 256.0;
183 self.mins_x = ReadCoord();
184 self.mins_y = ReadCoord();
185 self.mins_z = ReadCoord();
186 self.maxs_x = ReadCoord();
187 self.maxs_y = ReadCoord();
188 self.maxs_z = ReadCoord();
191 self.mins = self.maxs = '0 0 0';
192 setsize(self, self.mins, self.maxs);
195 strunzone(self.bgmscript);
196 self.bgmscript = ReadString();
197 if(substring(self.bgmscript, 0, 1) == "<")
199 self.bgmscript = strzone(substring(self.bgmscript, 1, -1));
200 self.bgmscriptangular = 1;
204 self.bgmscript = strzone(self.bgmscript);
205 self.bgmscriptangular = 0;
207 if(self.bgmscript != "")
209 self.bgmscriptattack = ReadByte() / 64.0;
210 self.bgmscriptdecay = ReadByte() / 64.0;
211 self.bgmscriptsustain = ReadByte() / 255.0;
212 self.bgmscriptrelease = ReadByte() / 64.0;
213 self.movedir_x = ReadCoord();
214 self.movedir_y = ReadCoord();
215 self.movedir_z = ReadCoord();
216 self.lip = ReadByte() / 255.0;
218 self.fade_start = ReadShort();
219 self.fade_end = ReadShort();
220 self.alpha_max = ReadShort();
221 self.alpha_min = ReadShort();
222 self.inactive = ReadShort();
223 self.fade_vertical_offset = ReadShort();
224 BGMScript_InitEntity(self);
227 InterpolateOrigin_Note();
229 self.saved = self.(fld);
231 self.entremove = Ent_Wall_Remove;
232 self.draw = Ent_Wall_Draw;
233 self.predraw = Ent_Wall_PreDraw;