2 float maxclients; // set by worldspawn code
\r
7 //void(vector org, entity en, vector dir, float splattype, float importance) newbloodsplat;
\r
8 //void(vector org, float bodydamage, float armordamage, vector vel, float damgtype) genericbleedfunc;
\r
10 // removes the oldest decors each frame to maintain a certain maximum decors
\r
13 local entity estart, e, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10;
\r
14 local float bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, iterations;
\r
16 // numdecors is allowed to be bogus as long as it is >= the real number of decors
\r
17 // (but perfection is clearly preferable)
\r
18 if (numdecors <= maxdecors)
\r
21 // recount all the decors
\r
23 estart = e = findchain(classname, "decor");
\r
26 numdecors = numdecors + 1;
\r
29 if (numdecors <= maxdecors)
\r
30 return; // nothing to do
\r
32 // limit it to considering 10000 entities per frame,
\r
33 // otherwise it can cause a runaway loop error
\r
35 while (numdecors > maxdecors && iterations < 10000)
\r
37 iterations = iterations + 1;
\r
38 // find and remove the oldest decors (upto 10 at once)
\r
39 b1 = b2 = b3 = b4 = b5 = b6 = b7 = b8 = b9 = b10 = world;
\r
40 bt1 = bt2 = bt3 = bt4 = bt5 = bt6 = bt7 = bt8 = bt9 = bt10 = time + 10000;
\r
42 estart = findchain(classname, "decor");
\r
46 iterations = iterations + 1;
\r
47 if (e.createdtime < bt10)
\r
49 if (e.createdtime < bt9)
\r
51 if (e.createdtime < bt8)
\r
53 if (e.createdtime < bt7)
\r
55 if (e.createdtime < bt6)
\r
57 if (e.createdtime < bt5)
\r
59 if (e.createdtime < bt4)
\r
61 if (e.createdtime < bt3)
\r
63 if (e.createdtime < bt2)
\r
65 if (e.createdtime < bt1)
\r
76 b1=e;bt1=e.createdtime;
\r
88 b2=e;bt2=e.createdtime;
\r
100 b3=e;bt3=e.createdtime;
\r
111 b4=e;bt4=e.createdtime;
\r
121 b5=e;bt5=e.createdtime;
\r
130 b6=e;bt6=e.createdtime;
\r
138 b7=e;bt7=e.createdtime;
\r
145 b8=e;bt8=e.createdtime;
\r
151 b9=e;bt9=e.createdtime;
\r
156 b10=e;bt10=e.createdtime;
\r
159 // failed all 10 slots
\r
162 // remove the oldest decors
\r
163 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b1);}
\r
164 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b2);}
\r
165 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b3);}
\r
166 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b4);}
\r
167 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b5);}
\r
168 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b6);}
\r
169 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b7);}
\r
170 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b8);}
\r
171 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b9);}
\r
172 if (numdecors > maxdecors) {numdecors = numdecors - 1;remove(b10);}
\r
176 entity() newdecor =
\r
181 e.classname = "decor";
\r
185 void(entity e) removedecor =
\r
192 void(vector org, vector vel, float amount) blood =
\r
194 te_blood(org, vel, amount);
\r
197 void(vector org, vector vel, float amount) spark =
\r
199 te_spark(org, vel, amount);
\r
202 void(vector m1, vector m2, float vel, float amount) bloodshower =
\r
204 te_bloodshower(m1, m2, vel, amount);
\r
207 void(vector org, float quad) bulletpuff =
\r
210 te_gunshotquad(org);
\r
215 void(vector org, float quad) nailpuff =
\r
218 te_superspikequad(org);
\r
220 te_superspike(org);
\r
223 // used for various little bouncing debris to avoid getting stuck in the air
\r
224 void() DecorThink =
\r
226 self.nextthink = time;
\r
227 self.flags = self.flags - (self.flags & FL_ONGROUND);
\r
228 if (pointcontents(self.origin) == CONTENT_SOLID)
\r
232 .float createdtime;
\r
234 void() InitDecors =
\r
236 // different number of decors in multi-player (to avoid lag on modems)
\r
237 if (maxclients > 1)
\r
241 // overridable by saved2 cvar on server console
\r
242 if (cvar("decors"))
\r
243 maxdecors = cvar("decors");
\r