2 .float bgmscriptangular;
3 .float lodmodelindex0, lodmodelindex1, lodmodelindex2;
4 .float loddistance1, loddistance2;
13 if(self.bgmscriptangular)
14 self.angles = self.saved;
16 self.origin = self.saved;
18 if(self.lodmodelindex1)
20 if(autocvar_cl_modeldetailreduction <= 0)
22 if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
23 self.modelindex = self.lodmodelindex2;
24 else if(autocvar_cl_modeldetailreduction <= -1)
25 self.modelindex = self.lodmodelindex1;
27 self.modelindex = self.lodmodelindex0;
31 float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
32 float f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
33 f *= 1.0 / bound(0.01, view_quality, 1);
34 if(self.lodmodelindex2 && f > self.loddistance2)
35 self.modelindex = self.lodmodelindex2;
36 else if(f > self.loddistance1)
37 self.modelindex = self.lodmodelindex1;
39 self.modelindex = self.lodmodelindex0;
43 InterpolateOrigin_Do();
45 if(self.bgmscriptangular)
46 self.saved = self.angles;
48 self.saved = self.origin;
53 if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
54 self.alpha = 1 + self.lip * f;
55 else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
56 self.alpha = 1 - self.lip * (1 - f);
57 self.fld = self.fld + self.movedir * f;
62 if(self.alpha >= ALPHA_MIN_VISIBLE)
63 self.drawmask = MASK_NORMAL;
68 void Ent_Wall_Remove()
71 strunzone(self.bgmscript);
72 self.bgmscript = string_null;
78 InterpolateOrigin_Undo();
79 self.iflags = IFLAG_ANGLES;
81 if(self.bgmscriptangular)
82 self.angles = self.saved;
84 self.origin = self.saved;
91 self.colormap = ReadShort();
98 self.origin_x = ReadCoord();
99 self.origin_y = ReadCoord();
100 self.origin_z = ReadCoord();
107 self.angles_x = ReadAngle();
108 self.angles_y = ReadAngle();
109 self.angles_z = ReadAngle();
112 self.angles = '0 0 0';
119 self.lodmodelindex0 = ReadShort();
120 self.loddistance1 = ReadShort();
121 self.lodmodelindex1 = ReadShort();
122 self.loddistance2 = ReadShort();
123 self.lodmodelindex2 = ReadShort();
127 self.modelindex = ReadShort();
128 self.loddistance1 = 0;
129 self.loddistance2 = 0;
131 self.solid = ReadByte();
132 self.scale = ReadShort() / 256.0;
135 self.mins_x = ReadCoord();
136 self.mins_y = ReadCoord();
137 self.mins_z = ReadCoord();
138 self.maxs_x = ReadCoord();
139 self.maxs_y = ReadCoord();
140 self.maxs_z = ReadCoord();
143 self.mins = self.maxs = '0 0 0';
146 strunzone(self.bgmscript);
147 self.bgmscript = ReadString();
148 if(substring(self.bgmscript, 0, 1) == "<")
150 self.bgmscript = strzone(substring(self.bgmscript, 1, -1));
151 self.bgmscriptangular = 1;
155 self.bgmscript = strzone(self.bgmscript);
156 self.bgmscriptangular = 0;
158 if(self.bgmscript != "")
160 self.bgmscriptattack = ReadByte() / 64.0;
161 self.bgmscriptdecay = ReadByte() / 64.0;
162 self.bgmscriptsustain = ReadByte() / 255.0;
163 self.bgmscriptrelease = ReadByte() / 64.0;
164 self.movedir_x = ReadCoord();
165 self.movedir_y = ReadCoord();
166 self.movedir_z = ReadCoord();
167 self.lip = ReadByte() / 255.0;
169 BGMScript_InitEntity(self);
172 InterpolateOrigin_Note();
174 if(self.bgmscriptangular)
175 self.saved = self.angles;
177 self.saved = self.origin;
179 self.entremove = Ent_Wall_Remove;
180 self.draw = Ent_Wall_Draw;