]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/g_decors.c
bumps for morphed's teleporter model
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / g_decors.c
1 \r
2 float maxclients; // set by worldspawn code\r
3 float numdecors;\r
4 float maxdecors;\r
5 .float createdtime;\r
6 \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
9 \r
10 // removes the oldest decors each frame to maintain a certain maximum decors\r
11 void() decorframe =\r
12 {\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
15 \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
19                 return;\r
20 \r
21         // recount all the decors\r
22         numdecors = 0;\r
23         estart = e = findchain(classname, "decor");\r
24         while(e)\r
25         {\r
26                 numdecors = numdecors + 1;\r
27                 e = e.chain;\r
28         }\r
29         if (numdecors <= maxdecors)\r
30                 return; // nothing to do\r
31 \r
32         // limit it to considering 10000 entities per frame,\r
33         // otherwise it can cause a runaway loop error\r
34         iterations = 0;\r
35         while (numdecors > maxdecors && iterations < 10000)\r
36         {\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
41                 if (iterations > 0)\r
42                         estart = findchain(classname, "decor");\r
43                 e = estart;\r
44                 while(e)\r
45                 {\r
46                         iterations = iterations + 1;\r
47                         if (e.createdtime < bt10)\r
48                         {\r
49                                 if (e.createdtime < bt9)\r
50                                 {\r
51                                         if (e.createdtime < bt8)\r
52                                         {\r
53                                                 if (e.createdtime < bt7)\r
54                                                 {\r
55                                                         if (e.createdtime < bt6)\r
56                                                         {\r
57                                                                 if (e.createdtime < bt5)\r
58                                                                 {\r
59                                                                         if (e.createdtime < bt4)\r
60                                                                         {\r
61                                                                                 if (e.createdtime < bt3)\r
62                                                                                 {\r
63                                                                                         if (e.createdtime < bt2)\r
64                                                                                         {\r
65                                                                                                 if (e.createdtime < bt1)\r
66                                                                                                 {\r
67                                                                                                         b10=b9;bt10=bt9;\r
68                                                                                                         b9=b8;bt9=bt8;\r
69                                                                                                         b8=b7;bt8=bt7;\r
70                                                                                                         b7=b6;bt7=bt6;\r
71                                                                                                         b6=b5;bt6=bt5;\r
72                                                                                                         b5=b4;bt5=bt4;\r
73                                                                                                         b4=b3;bt4=bt3;\r
74                                                                                                         b3=b2;bt3=bt2;\r
75                                                                                                         b2=b1;bt2=bt1;\r
76                                                                                                         b1=e;bt1=e.createdtime;\r
77                                                                                                 }\r
78                                                                                                 else\r
79                                                                                                 {\r
80                                                                                                         b10=b9;bt10=bt9;\r
81                                                                                                         b9=b8;bt9=bt8;\r
82                                                                                                         b8=b7;bt8=bt7;\r
83                                                                                                         b7=b6;bt7=bt6;\r
84                                                                                                         b6=b5;bt6=bt5;\r
85                                                                                                         b5=b4;bt5=bt4;\r
86                                                                                                         b4=b3;bt4=bt3;\r
87                                                                                                         b3=b2;bt3=bt2;\r
88                                                                                                         b2=e;bt2=e.createdtime;\r
89                                                                                                 }\r
90                                                                                         }\r
91                                                                                         else\r
92                                                                                         {\r
93                                                                                                 b10=b9;bt10=bt9;\r
94                                                                                                 b9=b8;bt9=bt8;\r
95                                                                                                 b8=b7;bt8=bt7;\r
96                                                                                                 b7=b6;bt7=bt6;\r
97                                                                                                 b6=b5;bt6=bt5;\r
98                                                                                                 b5=b4;bt5=bt4;\r
99                                                                                                 b4=b3;bt4=bt3;\r
100                                                                                                 b3=e;bt3=e.createdtime;\r
101                                                                                         }\r
102                                                                                 }\r
103                                                                                 else\r
104                                                                                 {\r
105                                                                                         b10=b9;bt10=bt9;\r
106                                                                                         b9=b8;bt9=bt8;\r
107                                                                                         b8=b7;bt8=bt7;\r
108                                                                                         b7=b6;bt7=bt6;\r
109                                                                                         b6=b5;bt6=bt5;\r
110                                                                                         b5=b4;bt5=bt4;\r
111                                                                                         b4=e;bt4=e.createdtime;\r
112                                                                                 }\r
113                                                                         }\r
114                                                                         else\r
115                                                                         {\r
116                                                                                 b10=b9;bt10=bt9;\r
117                                                                                 b9=b8;bt9=bt8;\r
118                                                                                 b8=b7;bt8=bt7;\r
119                                                                                 b7=b6;bt7=bt6;\r
120                                                                                 b6=b5;bt6=bt5;\r
121                                                                                 b5=e;bt5=e.createdtime;\r
122                                                                         }\r
123                                                                 }\r
124                                                                 else\r
125                                                                 {\r
126                                                                         b10=b9;bt10=bt9;\r
127                                                                         b9=b8;bt9=bt8;\r
128                                                                         b8=b7;bt8=bt7;\r
129                                                                         b7=b6;bt7=bt6;\r
130                                                                         b6=e;bt6=e.createdtime;\r
131                                                                 }\r
132                                                         }\r
133                                                         else\r
134                                                         {\r
135                                                                 b10=b9;bt10=bt9;\r
136                                                                 b9=b8;bt9=bt8;\r
137                                                                 b8=b7;bt8=bt7;\r
138                                                                 b7=e;bt7=e.createdtime;\r
139                                                         }\r
140                                                 }\r
141                                                 else\r
142                                                 {\r
143                                                         b10=b9;bt10=bt9;\r
144                                                         b9=b8;bt9=bt8;\r
145                                                         b8=e;bt8=e.createdtime;\r
146                                                 }\r
147                                         }\r
148                                         else\r
149                                         {\r
150                                                 b10=b9;bt10=bt9;\r
151                                                 b9=e;bt9=e.createdtime;\r
152                                         }\r
153                                 }\r
154                                 else\r
155                                 {\r
156                                         b10=e;bt10=e.createdtime;\r
157                                 }\r
158                         }\r
159                         // failed all 10 slots\r
160                         e = e.chain;\r
161                 }\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
173         }\r
174 };\r
175 \r
176 entity() newdecor =\r
177 {\r
178         local entity e;\r
179         numdecors++;\r
180         e = spawn();\r
181         e.classname = "decor";\r
182         return e;\r
183 };\r
184 \r
185 void(entity e) removedecor =\r
186 {\r
187         numdecors--;\r
188         remove(e);\r
189 };\r
190 \r
191 \r
192 void(vector org, vector vel, float amount) blood =\r
193 {\r
194         te_blood(org, vel, amount);\r
195 };\r
196 \r
197 void(vector org, vector vel, float amount) spark =\r
198 {\r
199         te_spark(org, vel, amount);\r
200 };\r
201 \r
202 void(vector m1, vector m2, float vel, float amount) bloodshower =\r
203 {\r
204         te_bloodshower(m1, m2, vel, amount);\r
205 };\r
206 \r
207 void(vector org, float quad) bulletpuff =\r
208 {\r
209         if (quad)\r
210                 te_gunshotquad(org);\r
211         else\r
212                 te_gunshot(org);\r
213 };\r
214 \r
215 void(vector org, float quad) nailpuff =\r
216 {\r
217         if (quad)\r
218                 te_superspikequad(org);\r
219         else\r
220                 te_superspike(org);\r
221 };\r
222 \r
223 // used for various little bouncing debris to avoid getting stuck in the air\r
224 void() DecorThink =\r
225 {\r
226         self.nextthink = time;\r
227         self.flags = self.flags - (self.flags & FL_ONGROUND);\r
228         if (pointcontents(self.origin) == CONTENT_SOLID)\r
229                 removedecor(self);\r
230 };\r
231 \r
232 .float  createdtime;\r
233 \r
234 void() InitDecors =\r
235 {\r
236         // different number of decors in multi-player (to avoid lag on modems)\r
237         if (maxclients > 1)\r
238                 maxdecors = 32;\r
239         else\r
240                 maxdecors = 100;\r
241         // overridable by saved2 cvar on server console\r
242         if (cvar("decors"))\r
243                 maxdecors = cvar("decors");\r
244         if (maxdecors < 1)\r
245                 maxdecors = 1;\r
246 };\r