3 void Ent_Wall_PreDraw()
9 org = getpropertyvec(VF_ORIGIN);
10 if(!checkpvs(org, self))
12 else if(self.fade_start) {
13 self.alpha = self.alpha_max / 100.0 * bound(0,
14 (self.fade_end - vlen(org - self.origin - 0.5 * (self.mins + self.maxs)))
15 / (self.fade_end - self.fade_start), 1);
23 self.drawmask = MASK_NORMAL;
31 if(self.bgmscriptangular)
35 self.fld = self.saved;
37 if(self.lodmodelindex1)
39 if(autocvar_cl_modeldetailreduction <= 0)
41 if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
42 self.modelindex = self.lodmodelindex2;
43 else if(autocvar_cl_modeldetailreduction <= -1)
44 self.modelindex = self.lodmodelindex1;
46 self.modelindex = self.lodmodelindex0;
50 float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
51 f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
52 f *= 1.0 / bound(0.01, view_quality, 1);
53 if(self.lodmodelindex2 && f > self.loddistance2)
54 self.modelindex = self.lodmodelindex2;
55 else if(f > self.loddistance1)
56 self.modelindex = self.lodmodelindex1;
58 self.modelindex = self.lodmodelindex0;
62 InterpolateOrigin_Do();
64 self.saved = self.fld;
69 if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
70 self.alpha = 1 + self.lip * f;
71 else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
72 self.alpha = 1 - self.lip * (1 - f);
73 self.fld = self.fld + self.movedir * f;
78 if(self.alpha >= ALPHA_MIN_VISIBLE)
79 self.drawmask = MASK_NORMAL;
84 void Ent_Wall_Remove()
87 strunzone(self.bgmscript);
88 self.bgmscript = string_null;
96 InterpolateOrigin_Undo();
97 self.iflags = IFLAG_ANGLES | IFLAG_ORIGIN;
99 if(self.bgmscriptangular)
103 self.fld = self.saved;
110 self.colormap = ReadShort();
117 self.origin_x = ReadCoord();
118 self.origin_y = ReadCoord();
119 self.origin_z = ReadCoord();
120 setorigin(self, self.origin);
127 self.angles_x = ReadAngle();
128 self.angles_y = ReadAngle();
129 self.angles_z = ReadAngle();
132 self.angles = '0 0 0';
139 self.lodmodelindex0 = ReadShort();
140 self.loddistance1 = ReadShort();
141 self.lodmodelindex1 = ReadShort();
142 self.loddistance2 = ReadShort();
143 self.lodmodelindex2 = ReadShort();
147 self.modelindex = ReadShort();
148 self.loddistance1 = 0;
149 self.loddistance2 = 0;
151 self.solid = ReadByte();
152 self.scale = ReadShort() / 256.0;
155 self.mins_x = ReadCoord();
156 self.mins_y = ReadCoord();
157 self.mins_z = ReadCoord();
158 self.maxs_x = ReadCoord();
159 self.maxs_y = ReadCoord();
160 self.maxs_z = ReadCoord();
163 self.mins = self.maxs = '0 0 0';
164 setsize(self, self.mins, self.maxs);
167 strunzone(self.bgmscript);
168 self.bgmscript = ReadString();
169 if(substring(self.bgmscript, 0, 1) == "<")
171 self.bgmscript = strzone(substring(self.bgmscript, 1, -1));
172 self.bgmscriptangular = 1;
176 self.bgmscript = strzone(self.bgmscript);
177 self.bgmscriptangular = 0;
179 if(self.bgmscript != "")
181 self.bgmscriptattack = ReadByte() / 64.0;
182 self.bgmscriptdecay = ReadByte() / 64.0;
183 self.bgmscriptsustain = ReadByte() / 255.0;
184 self.bgmscriptrelease = ReadByte() / 64.0;
185 self.movedir_x = ReadCoord();
186 self.movedir_y = ReadCoord();
187 self.movedir_z = ReadCoord();
188 self.lip = ReadByte() / 255.0;
190 self.fade_start = ReadShort();
191 self.fade_end = ReadShort();
192 self.alpha_max = ReadShort();
193 self.alpha_min = ReadShort();
194 self.inactive = ReadShort();
195 BGMScript_InitEntity(self);
198 InterpolateOrigin_Note();
200 self.saved = self.fld;
202 self.entremove = Ent_Wall_Remove;
203 self.draw = Ent_Wall_Draw;
204 self.predraw = Ent_Wall_PreDraw;