3 #include "autocvars.qh"
4 #include "bgmscript.qh"
6 #include "../common/util.qh"
7 #include "../csqcmodellib/interpolate.qh"
18 if(self.bgmscriptangular)
22 self.(fld) = self.saved;
24 if(self.lodmodelindex1)
26 if(autocvar_cl_modeldetailreduction <= 0)
28 if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
29 self.modelindex = self.lodmodelindex2;
30 else if(autocvar_cl_modeldetailreduction <= -1)
31 self.modelindex = self.lodmodelindex1;
33 self.modelindex = self.lodmodelindex0;
37 float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
38 f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
39 f *= 1.0 / bound(0.01, view_quality, 1);
40 if(self.lodmodelindex2 && f > self.loddistance2)
41 self.modelindex = self.lodmodelindex2;
42 else if(f > self.loddistance1)
43 self.modelindex = self.lodmodelindex1;
45 self.modelindex = self.lodmodelindex0;
49 InterpolateOrigin_Do();
51 self.saved = self.(fld);
56 if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
57 self.alpha = 1 + self.lip * f;
58 else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
59 self.alpha = 1 - self.lip * (1 - f);
60 self.(fld) = self.(fld) + self.movedir * f;
65 if(self.alpha >= ALPHA_MIN_VISIBLE)
66 self.drawmask = MASK_NORMAL;
71 void Ent_Wall_Remove()
74 strunzone(self.bgmscript);
75 self.bgmscript = string_null;
83 InterpolateOrigin_Undo();
84 self.iflags = IFLAG_ANGLES | IFLAG_ORIGIN;
86 if(self.bgmscriptangular)
90 self.(fld) = self.saved;
97 self.colormap = ReadShort();
104 self.origin_x = ReadCoord();
105 self.origin_y = ReadCoord();
106 self.origin_z = ReadCoord();
107 setorigin(self, self.origin);
114 self.angles_x = ReadAngle();
115 self.angles_y = ReadAngle();
116 self.angles_z = ReadAngle();
119 self.angles = '0 0 0';
126 self.lodmodelindex0 = ReadShort();
127 self.loddistance1 = ReadShort();
128 self.lodmodelindex1 = ReadShort();
129 self.loddistance2 = ReadShort();
130 self.lodmodelindex2 = ReadShort();
134 self.modelindex = ReadShort();
135 self.loddistance1 = 0;
136 self.loddistance2 = 0;
138 self.solid = ReadByte();
139 self.scale = ReadShort() / 256.0;
142 self.mins_x = ReadCoord();
143 self.mins_y = ReadCoord();
144 self.mins_z = ReadCoord();
145 self.maxs_x = ReadCoord();
146 self.maxs_y = ReadCoord();
147 self.maxs_z = ReadCoord();
150 self.mins = self.maxs = '0 0 0';
151 setsize(self, self.mins, self.maxs);
154 strunzone(self.bgmscript);
155 self.bgmscript = ReadString();
156 if(substring(self.bgmscript, 0, 1) == "<")
158 self.bgmscript = strzone(substring(self.bgmscript, 1, -1));
159 self.bgmscriptangular = 1;
163 self.bgmscript = strzone(self.bgmscript);
164 self.bgmscriptangular = 0;
166 if(self.bgmscript != "")
168 self.bgmscriptattack = ReadByte() / 64.0;
169 self.bgmscriptdecay = ReadByte() / 64.0;
170 self.bgmscriptsustain = ReadByte() / 255.0;
171 self.bgmscriptrelease = ReadByte() / 64.0;
172 self.movedir_x = ReadCoord();
173 self.movedir_y = ReadCoord();
174 self.movedir_z = ReadCoord();
175 self.lip = ReadByte() / 255.0;
177 BGMScript_InitEntity(self);
180 InterpolateOrigin_Note();
182 self.saved = self.(fld);
184 self.entremove = Ent_Wall_Remove;
185 self.draw = Ent_Wall_Draw;