3 void Ent_Wall_PreDraw()
12 org = getpropertyvec(VF_ORIGIN);
13 if(!checkpvs(org, self))
15 else if(self.fade_start) {
16 float player_dist = vlen(org - self.origin - 0.5 * (self.mins + self.maxs));
17 if (self.fade_end == self.fade_start)
19 if (player_dist >= self.fade_start) {
29 self.alpha = (self.alpha_min + self.alpha_max * bound(0,
30 (self.fade_end - player_dist)
31 / (self.fade_end - self.fade_start), 1)) / 100.0;
42 self.drawmask = MASK_NORMAL;
50 if(self.bgmscriptangular)
54 self.fld = self.saved;
56 if(self.lodmodelindex1)
58 if(autocvar_cl_modeldetailreduction <= 0)
60 if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
61 self.modelindex = self.lodmodelindex2;
62 else if(autocvar_cl_modeldetailreduction <= -1)
63 self.modelindex = self.lodmodelindex1;
65 self.modelindex = self.lodmodelindex0;
69 float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
70 f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
71 f *= 1.0 / bound(0.01, view_quality, 1);
72 if(self.lodmodelindex2 && f > self.loddistance2)
73 self.modelindex = self.lodmodelindex2;
74 else if(f > self.loddistance1)
75 self.modelindex = self.lodmodelindex1;
77 self.modelindex = self.lodmodelindex0;
81 InterpolateOrigin_Do();
83 self.saved = self.fld;
88 if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
89 self.alpha = 1 + self.lip * f;
90 else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
91 self.alpha = 1 - self.lip * (1 - f);
92 self.fld = self.fld + self.movedir * f;
97 if(self.alpha >= ALPHA_MIN_VISIBLE)
98 self.drawmask = MASK_NORMAL;
103 void Ent_Wall_Remove()
106 strunzone(self.bgmscript);
107 self.bgmscript = string_null;
115 InterpolateOrigin_Undo();
116 self.iflags = IFLAG_ANGLES | IFLAG_ORIGIN;
118 if(self.bgmscriptangular)
122 self.fld = self.saved;
129 self.colormap = ReadShort();
136 self.origin_x = ReadCoord();
137 self.origin_y = ReadCoord();
138 self.origin_z = ReadCoord();
139 setorigin(self, self.origin);
146 self.angles_x = ReadAngle();
147 self.angles_y = ReadAngle();
148 self.angles_z = ReadAngle();
151 self.angles = '0 0 0';
158 self.lodmodelindex0 = ReadShort();
159 self.loddistance1 = ReadShort();
160 self.lodmodelindex1 = ReadShort();
161 self.loddistance2 = ReadShort();
162 self.lodmodelindex2 = ReadShort();
166 self.modelindex = ReadShort();
167 self.loddistance1 = 0;
168 self.loddistance2 = 0;
170 self.solid = ReadByte();
171 self.scale = ReadShort() / 256.0;
174 self.mins_x = ReadCoord();
175 self.mins_y = ReadCoord();
176 self.mins_z = ReadCoord();
177 self.maxs_x = ReadCoord();
178 self.maxs_y = ReadCoord();
179 self.maxs_z = ReadCoord();
182 self.mins = self.maxs = '0 0 0';
183 setsize(self, self.mins, self.maxs);
186 strunzone(self.bgmscript);
187 self.bgmscript = ReadString();
188 if(substring(self.bgmscript, 0, 1) == "<")
190 self.bgmscript = strzone(substring(self.bgmscript, 1, -1));
191 self.bgmscriptangular = 1;
195 self.bgmscript = strzone(self.bgmscript);
196 self.bgmscriptangular = 0;
198 if(self.bgmscript != "")
200 self.bgmscriptattack = ReadByte() / 64.0;
201 self.bgmscriptdecay = ReadByte() / 64.0;
202 self.bgmscriptsustain = ReadByte() / 255.0;
203 self.bgmscriptrelease = ReadByte() / 64.0;
204 self.movedir_x = ReadCoord();
205 self.movedir_y = ReadCoord();
206 self.movedir_z = ReadCoord();
207 self.lip = ReadByte() / 255.0;
209 self.fade_start = ReadShort();
210 self.fade_end = ReadShort();
211 self.alpha_max = ReadShort();
212 self.alpha_min = ReadShort();
213 self.inactive = ReadShort();
214 BGMScript_InitEntity(self);
217 InterpolateOrigin_Note();
219 self.saved = self.fld;
221 self.entremove = Ent_Wall_Remove;
222 self.draw = Ent_Wall_Draw;
223 self.predraw = Ent_Wall_PreDraw;