]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/gamec/urrebot_load.qc
Renamed remotely
[divverent/nexuiz.git] / data / qcsrc / gamec / urrebot_load.qc
1 void() UrreBotAdd =\r
2 {\r
3         local entity ent;\r
4 \r
5         ent = self;\r
6         self = spawnclient();\r
7         if (!self)\r
8         {\r
9                 bprint("Can not add UrreBot, server full\n");\r
10                 cvar_set("bots", ftos(actualurrebots));\r
11                 self = ent;\r
12                 return;\r
13         }\r
14         UrreBotSetup();\r
15         self.list = bot_chain;\r
16         bot_chain = self;\r
17         self.bottype = BOTTYPE_URREBOT;\r
18         ClientConnect();\r
19         PutClientInServer();\r
20         self = ent;\r
21 \r
22         strategytoken = bot_chain;\r
23         actualurrebots = actualurrebots + 1;\r
24 };\r
25 \r
26 void() UrreBotRemove =\r
27 {\r
28         local entity ent, t;\r
29 \r
30         ent = findchain(classname, "player");\r
31         while (ent)\r
32         {\r
33                 if (clienttype(ent) == CLIENTTYPE_BOT)\r
34                 {\r
35                         if (ent.bottype == BOTTYPE_URREBOT)\r
36                         {\r
37                                 if (bot_chain == self)\r
38                                         bot_chain = self.list;\r
39                                 else\r
40                                 {\r
41                                         t = find(world, classname, "player");\r
42                                         while(t)\r
43                                         {\r
44                                                 if (t.list == ent)\r
45                                                         t.list = ent.list;\r
46                                                 t = find(t, classname, "player");\r
47                                         }\r
48                                 }\r
49                                 if (actualurrebots > 0)\r
50                                         actualurrebots -= 1;\r
51                                 if(cvar("g_lms") && self.frags < 1)\r
52                                         lms_dead_count -= 1;\r
53                                 dropclient(ent);\r
54                         }\r
55                 }\r
56                 ent = ent.chain;\r
57         }\r
58 };\r
59 \r
60 /* --- SpawnNavNode ---\r
61 The one to guess what this does gets bacon from FrikaC*/\r
62 \r
63 entity(vector org, vector nnmins, vector nnmaxs) SpawnNavNode =\r
64 {\r
65         newmis = spawn();\r
66         setsize(newmis, nnmins, nnmaxs);\r
67         newmis.classname = "navnode";\r
68         setorigin(newmis, org);\r
69         return newmis;\r
70 };\r
71 \r
72 void(entity navn, vector normal, float dist) AddPlane =\r
73 {\r
74         local float f;\r
75 \r
76         newmis = spawn();\r
77         newmis.classname = "plane";\r
78         newmis.list = navn.plane_chain;\r
79         navn.plane_chain = newmis;\r
80         newmis.mangle = normal*-1;\r
81         newmis.delay = dist;\r
82         f = (navn.origin * newmis.mangle) - ((navn.origin + (newmis.delay * newmis.mangle)) * newmis.mangle);\r
83         if (f > 0)\r
84         {\r
85                 newmis.mangle = newmis.mangle*-1;\r
86                 newmis.delay = newmis.delay*-1;\r
87         }\r
88 };\r
89 \r
90 /* --- LinkNavNodes ---\r
91 Links the navnodes and gives some special attributes (like doors, teleporters)*/\r
92 \r
93 void() LinkNavNodes =\r
94 {\r
95         local entity e, t, tdest;\r
96 \r
97         navnode_chain = world;\r
98         navnodes = 0;\r
99 \r
100         e = findchain(classname, "navnode");\r
101         while (e)\r
102         {\r
103                 e.list = navnode_chain;\r
104                 navnode_chain = e;\r
105                 e.delay = navnodes;\r
106                 navnodes = navnodes + 1;\r
107                 e = e.chain;\r
108         }\r
109 \r
110         e = navnode_chain;\r
111         while (e)\r
112         {\r
113                 if (e.link0)\r
114                 {\r
115                         e.link0.think = SUB_Remove;\r
116                         e.link0.nextthink = time;\r
117                         t = navnode_chain;\r
118                         while (t)\r
119                         {\r
120                                 if (t.delay == e.link0.delay)\r
121                                         e.link0 = t;\r
122                                 t = t.list;\r
123                         }\r
124                         e.lflags0 = e.lflags0 | LF_REMOTE;\r
125                 }\r
126                 if (e.link1)\r
127                 {\r
128                         e.link1.think = SUB_Remove;\r
129                         e.link1.nextthink = time;\r
130                         t = navnode_chain;\r
131                         while (t)\r
132                         {\r
133                                 if (t.delay == e.link1.delay)\r
134                                         e.link1 = t;\r
135                                 t = t.list;\r
136                         }\r
137                         e.lflags1 = e.lflags1 | LF_REMOTE;\r
138                 }\r
139                 if (e.link2)\r
140                 {\r
141                         e.link2.think = SUB_Remove;\r
142                         e.link2.nextthink = time;\r
143                         t = navnode_chain;\r
144                         while (t)\r
145                         {\r
146                                 if (t.delay == e.link2.delay)\r
147                                         e.link2 = t;\r
148                                 t = t.list;\r
149                         }\r
150                         e.lflags2 = e.lflags2 | LF_REMOTE;\r
151                 }\r
152                 if (e.link3)\r
153                 {\r
154                         e.link3.think = SUB_Remove;\r
155                         e.link3.nextthink = time;\r
156                         t = navnode_chain;\r
157                         while (t)\r
158                         {\r
159                                 if (t.delay == e.link3.delay)\r
160                                         e.link3 = t;\r
161                                 t = t.list;\r
162                         }\r
163                         e.lflags3 = e.lflags3 | LF_REMOTE;\r
164                 }\r
165                 if (e.link4)\r
166                 {\r
167                         e.link4.think = SUB_Remove;\r
168                         e.link4.nextthink = time;\r
169                         t = navnode_chain;\r
170                         while (t)\r
171                         {\r
172                                 if (t.delay == e.link4.delay)\r
173                                         e.link4 = t;\r
174                                 t = t.list;\r
175                         }\r
176                         e.lflags4 = e.lflags4 | LF_REMOTE;\r
177                 }\r
178                 if (e.link5)\r
179                 {\r
180                         e.link5.think = SUB_Remove;\r
181                         e.link5.nextthink = time;\r
182                         t = navnode_chain;\r
183                         while (t)\r
184                         {\r
185                                 if (t.delay == e.link5.delay)\r
186                                         e.link5 = t;\r
187                                 t = t.list;\r
188                         }\r
189                         e.lflags5 = e.lflags5 | LF_REMOTE;\r
190                 }\r
191                 if (e.link6)\r
192                 {\r
193                         e.link6.think = SUB_Remove;\r
194                         e.link6.nextthink = time;\r
195                         t = navnode_chain;\r
196                         while (t)\r
197                         {\r
198                                 if (t.delay == e.link6.delay)\r
199                                         e.link6 = t;\r
200                                 t = t.list;\r
201                         }\r
202                         e.lflags6 = e.lflags6 | LF_REMOTE;\r
203                 }\r
204                 if (e.link7)\r
205                 {\r
206                         e.link7.think = SUB_Remove;\r
207                         e.link7.nextthink = time;\r
208                         t = navnode_chain;\r
209                         while (t)\r
210                         {\r
211                                 if (t.delay == e.link7.delay)\r
212                                         e.link7 = t;\r
213                                 t = t.list;\r
214                         }\r
215                         e.lflags7 = e.lflags7 | LF_REMOTE;\r
216                 }\r
217                 if (e.link8)\r
218                 {\r
219                         e.link8.think = SUB_Remove;\r
220                         e.link8.nextthink = time;\r
221                         t = navnode_chain;\r
222                         while (t)\r
223                         {\r
224                                 if (t.delay == e.link8.delay)\r
225                                         e.link8 = t;\r
226                                 t = t.list;\r
227                         }\r
228                         e.lflags8 = e.lflags8 | LF_REMOTE;\r
229                 }\r
230                 if (e.link9)\r
231                 {\r
232                         e.link9.think = SUB_Remove;\r
233                         e.link9.nextthink = time;\r
234                         t = navnode_chain;\r
235                         while (t)\r
236                         {\r
237                                 if (t.delay == e.link9.delay)\r
238                                         e.link9 = t;\r
239                                 t = t.list;\r
240                         }\r
241                         e.lflags9 = e.lflags9 | LF_REMOTE;\r
242                 }\r
243                 if (e.link10)\r
244                 {\r
245                         e.link10.think = SUB_Remove;\r
246                         e.link10.nextthink = time;\r
247                         t = navnode_chain;\r
248                         while (t)\r
249                         {\r
250                                 if (t.delay == e.link10.delay)\r
251                                         e.link10 = t;\r
252                                 t = t.list;\r
253                         }\r
254                         e.lflags10 = e.lflags10 | LF_REMOTE;\r
255                 }\r
256                 if (e.link11)\r
257                 {\r
258                         e.link11.think = SUB_Remove;\r
259                         e.link11.nextthink = time;\r
260                         t = navnode_chain;\r
261                         while (t)\r
262                         {\r
263                                 if (t.delay == e.link11.delay)\r
264                                         e.link11 = t;\r
265                                 t = t.list;\r
266                         }\r
267                         e.lflags11 = e.lflags11 | LF_REMOTE;\r
268                 }\r
269                 if (e.link12)\r
270                 {\r
271                         e.link12.think = SUB_Remove;\r
272                         e.link12.nextthink = time;\r
273                         t = navnode_chain;\r
274                         while (t)\r
275                         {\r
276                                 if (t.delay == e.link12.delay)\r
277                                         e.link12 = t;\r
278                                 t = t.list;\r
279                         }\r
280                         e.lflags12 = e.lflags12 | LF_REMOTE;\r
281                 }\r
282                 if (e.link13)\r
283                 {\r
284                         e.link13.think = SUB_Remove;\r
285                         e.link13.nextthink = time;\r
286                         t = navnode_chain;\r
287                         while (t)\r
288                         {\r
289                                 if (t.delay == e.link13.delay)\r
290                                         e.link13 = t;\r
291                                 t = t.list;\r
292                         }\r
293                         e.lflags13 = e.lflags13 | LF_REMOTE;\r
294                 }\r
295                 if (e.link14)\r
296                 {\r
297                         e.link14.think = SUB_Remove;\r
298                         e.link14.nextthink = time;\r
299                         t = navnode_chain;\r
300                         while (t)\r
301                         {\r
302                                 if (t.delay == e.link14.delay)\r
303                                         e.link14 = t;\r
304                                 t = t.list;\r
305                         }\r
306                         e.lflags14 = e.lflags14 | LF_REMOTE;\r
307                 }\r
308                 if (e.link15)\r
309                 {\r
310                         e.link15.think = SUB_Remove;\r
311                         e.link15.nextthink = time;\r
312                         t = navnode_chain;\r
313                         while (t)\r
314                         {\r
315                                 if (t.delay == e.link15.delay)\r
316                                         e.link15 = t;\r
317                                 t = t.list;\r
318                         }\r
319                         e.lflags15 = e.lflags15 | LF_REMOTE;\r
320                 }\r
321                 if (e.link16)\r
322                 {\r
323                         e.link16.think = SUB_Remove;\r
324                         e.link16.nextthink = time;\r
325                         t = navnode_chain;\r
326                         while (t)\r
327                         {\r
328                                 if (t.delay == e.link16.delay)\r
329                                         e.link16 = t;\r
330                                 t = t.list;\r
331                         }\r
332                         e.lflags16 = e.lflags16 | LF_REMOTE;\r
333                 }\r
334                 if (e.link17)\r
335                 {\r
336                         e.link17.think = SUB_Remove;\r
337                         e.link17.nextthink = time;\r
338                         t = navnode_chain;\r
339                         while (t)\r
340                         {\r
341                                 if (t.delay == e.link17.delay)\r
342                                         e.link17 = t;\r
343                                 t = t.list;\r
344                         }\r
345                         e.lflags17 = e.lflags17 | LF_REMOTE;\r
346                 }\r
347                 if (e.link18)\r
348                 {\r
349                         e.link18.think = SUB_Remove;\r
350                         e.link18.nextthink = time;\r
351                         t = navnode_chain;\r
352                         while (t)\r
353                         {\r
354                                 if (t.delay == e.link18.delay)\r
355                                         e.link18 = t;\r
356                                 t = t.list;\r
357                         }\r
358                         e.lflags18 = e.lflags18 | LF_REMOTE;\r
359                 }\r
360                 if (e.link19)\r
361                 {\r
362                         e.link19.think = SUB_Remove;\r
363                         e.link19.nextthink = time;\r
364                         t = navnode_chain;\r
365                         while (t)\r
366                         {\r
367                                 if (t.delay == e.link19.delay)\r
368                                         e.link19 = t;\r
369                                 t = t.list;\r
370                         }\r
371                         e.lflags19 = e.lflags19 | LF_REMOTE;\r
372                 }\r
373                 e = e.list;\r
374         }\r
375         e = navnode_chain;\r
376         while (e)\r
377         {\r
378                 if (!(e.sflags & S_TELEPORT))\r
379                 {\r
380                         t = navnode_chain;\r
381                         while (t)\r
382                         {\r
383                                 if (boxesoverlap(e.origin + e.mins, e.origin + e.maxs, t.origin + t.mins, t.origin + t.maxs))\r
384                                 if (t != e)\r
385                                 if (t != e.link0)\r
386                                 if (t != e.link1)\r
387                                 if (t != e.link2)\r
388                                 if (t != e.link3)\r
389                                 if (t != e.link4)\r
390                                 if (t != e.link5)\r
391                                 if (t != e.link6)\r
392                                 if (t != e.link7)\r
393                                 if (t != e.link8)\r
394                                 if (t != e.link9)\r
395                                 if (t != e.link10)\r
396                                 if (t != e.link11)\r
397                                 if (t != e.link12)\r
398                                 if (t != e.link13)\r
399                                 if (t != e.link14)\r
400                                 if (t != e.link15)\r
401                                 if (t != e.link16)\r
402                                 if (t != e.link17)\r
403                                 if (t != e.link18)\r
404                                 if (t != e.link19)\r
405                                 {\r
406                                         if (!e.link0)\r
407                                                 e.link0 = t;\r
408                                         else if (!e.link1)\r
409                                                 e.link1 = t;\r
410                                         else if (!e.link2)\r
411                                                 e.link2 = t;\r
412                                         else if (!e.link3)\r
413                                                 e.link3 = t;\r
414                                         else if (!e.link4)\r
415                                                 e.link4 = t;\r
416                                         else if (!e.link5)\r
417                                                 e.link5 = t;\r
418                                         else if (!e.link6)\r
419                                                 e.link6 = t;\r
420                                         else if (!e.link7)\r
421                                                 e.link7 = t;\r
422                                         else if (!e.link8)\r
423                                                 e.link8 = t;\r
424                                         else if (!e.link9)\r
425                                                 e.link9 = t;\r
426                                         else if (!e.link10)\r
427                                                 e.link10 = t;\r
428                                         else if (!e.link11)\r
429                                                 e.link11 = t;\r
430                                         else if (!e.link12)\r
431                                                 e.link12 = t;\r
432                                         else if (!e.link13)\r
433                                                 e.link13 = t;\r
434                                         else if (!e.link14)\r
435                                                 e.link14 = t;\r
436                                         else if (!e.link15)\r
437                                                 e.link15 = t;\r
438                                         else if (!e.link16)\r
439                                                 e.link16 = t;\r
440                                         else if (!e.link17)\r
441                                                 e.link17 = t;\r
442                                         else if (!e.link18)\r
443                                                 e.link18 = t;\r
444                                         else if (!e.link19)\r
445                                                 e.link19 = t;\r
446                                         else\r
447                                                 dprint("WARNING: Too many linking NavNodes!\n");\r
448                                 }\r
449                                 t = t.list;\r
450                         }\r
451                 }\r
452                 e = e.list;\r
453         }\r
454         e = navnode_chain;\r
455         while (e)\r
456         {\r
457                 if (e.sflags & S_TELEPORT)\r
458                 {\r
459                         t = findchain(classname, "trigger_teleport");\r
460                         while (t)\r
461                         {\r
462                                 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))\r
463                                 {\r
464                                         tdest = find(world, targetname, t.target);\r
465                                         tdest = FindCurrentNavNode(tdest.origin, '0 0 0', '0 0 0');\r
466                                         e.link0 = tdest;\r
467                                 }\r
468                                 t = t.chain;\r
469                         }\r
470                         if (!e.link0)\r
471                                 error("Expected navnode\n");\r
472                 }\r
473                 else if (e.sflags & S_DOOR)\r
474                 {\r
475                         t = findchain(classname, "door");\r
476                         while (t)\r
477                         {\r
478                                 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))\r
479                                         e.goalentity = t;\r
480                                 t = t.chain;\r
481                         }\r
482                         if (!e.goalentity)\r
483                                 error("Expected door\n");\r
484                 }\r
485                 e = e.list;\r
486         }\r
487 };\r
488 \r
489 void() LoadNavNodes =\r
490 {\r
491         local float f, file, length;\r
492         local float pdst;\r
493         local float sfl;\r
494         local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;\r
495         local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;\r
496         local string s;\r
497         local float rl0, rl1, rl2, rl3, rl4, rl5, rl6, rl7, rl8, rl9;\r
498         local float rl10, rl11, rl12, rl13, rl14, rl15, rl16, rl17, rl18, rl19;\r
499         local vector pln;\r
500         local vector wborg, wbmaxs, wbmins;\r
501         local entity e, plane_storage;\r
502 \r
503         if (navnodes)\r
504         {\r
505                 dprint("NavNodes present, map needs to be reloaded to load navnode-file\n");\r
506                 return;\r
507         }\r
508 \r
509         plane_storage = spawn();\r
510 \r
511         length = strlen(world.model);\r
512         length = length - 5;\r
513         s = substring(world.model, 5, length);\r
514         s = strcat("maps/", s, ".nnl");\r
515 \r
516         file = fopen(s, FILE_READ);\r
517 \r
518         if (file >= 0)\r
519         {\r
520                 dprint("Found navnode file\n");\r
521                 s = fgets(file);\r
522                 while (s == "navnode")\r
523                 {\r
524                         f = 0;\r
525                         pdst = -1;\r
526                         pln = nullvector;\r
527                         wborg = wbmaxs = wbmins = nullvector;\r
528                         plane_storage.plane_chain = world;\r
529                         sfl = 0;\r
530                         tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;\r
531                         tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;\r
532                         rl0 = rl1 = rl2 = rl3 = rl4 = rl5 = rl6 = rl7 = rl8 = rl9 = -1;\r
533                         rl10 = rl11 = rl12 = rl13 = rl14 = rl15 = rl16 = rl17 = rl18 = rl19 = -1;\r
534                         s = fgets(file);\r
535                         wborg = stov(s);\r
536                         s = fgets(file);\r
537                         wbmins = stov(s);\r
538                         s = fgets(file);\r
539                         wbmaxs = stov(s);\r
540                         s = fgets(file);\r
541                         while (s == "plane")\r
542                         {\r
543                                 s = fgets(file);\r
544                                 pln = stov(s);\r
545                                 s = fgets(file);\r
546                                 pdst = stof(s);\r
547                                 AddPlane(plane_storage, pln*-1, pdst);\r
548                                 s = fgets(file);\r
549                         }\r
550                         while (substring(s, 0, 6) == "remote")\r
551                         {\r
552                                 length = strlen(s);\r
553                                 f = stof(substring(s, 6, length));\r
554                                 s = fgets(file);\r
555                                 if (!f)\r
556                                         rl0 = stof(s);\r
557                                 else if (f == 1)\r
558                                         rl1 = stof(s);\r
559                                 else if (f == 2)\r
560                                         rl2 = stof(s);\r
561                                 else if (f == 3)\r
562                                         rl3 = stof(s);\r
563                                 else if (f == 4)\r
564                                         rl4 = stof(s);\r
565                                 else if (f == 5)\r
566                                         rl5 = stof(s);\r
567                                 else if (f == 6)\r
568                                         rl6 = stof(s);\r
569                                 else if (f == 7)\r
570                                         rl7 = stof(s);\r
571                                 else if (f == 8)\r
572                                         rl8 = stof(s);\r
573                                 else if (f == 9)\r
574                                         rl9 = stof(s);\r
575                                 else if (f == 10)\r
576                                         rl10 = stof(s);\r
577                                 else if (f == 11)\r
578                                         rl11 = stof(s);\r
579                                 else if (f == 12)\r
580                                         rl12 = stof(s);\r
581                                 else if (f == 13)\r
582                                         rl13 = stof(s);\r
583                                 else if (f == 14)\r
584                                         rl14 = stof(s);\r
585                                 else if (f == 15)\r
586                                         rl15 = stof(s);\r
587                                 else if (f == 16)\r
588                                         rl16 = stof(s);\r
589                                 else if (f == 17)\r
590                                         rl17 = stof(s);\r
591                                 else if (f == 18)\r
592                                         rl18 = stof(s);\r
593                                 else if (f == 19)\r
594                                         rl19 = stof(s);\r
595                                 s = fgets(file);\r
596                         }\r
597                         if (s == "sflags")\r
598                         {\r
599                                 s = fgets(file);\r
600                                 sfl = stof(s);\r
601                                 s = fgets(file);\r
602                         }\r
603                         while (substring(s, 0, 6) == "lflags")\r
604                         {\r
605                                 length = strlen(s);\r
606                                 f = stof(substring(s, 6, length));\r
607                                 s = fgets(file);\r
608                                 if (!f)\r
609                                         tfl0 = stof(s);\r
610                                 else if (f == 1)\r
611                                         tfl1 = stof(s);\r
612                                 else if (f == 2)\r
613                                         tfl2 = stof(s);\r
614                                 else if (f == 3)\r
615                                         tfl3 = stof(s);\r
616                                 else if (f == 4)\r
617                                         tfl4 = stof(s);\r
618                                 else if (f == 5)\r
619                                         tfl5 = stof(s);\r
620                                 else if (f == 6)\r
621                                         tfl6 = stof(s);\r
622                                 else if (f == 7)\r
623                                         tfl7 = stof(s);\r
624                                 else if (f == 8)\r
625                                         tfl8 = stof(s);\r
626                                 else if (f == 9)\r
627                                         tfl9 = stof(s);\r
628                                 else if (f == 10)\r
629                                         tfl10 = stof(s);\r
630                                 else if (f == 11)\r
631                                         tfl11 = stof(s);\r
632                                 else if (f == 12)\r
633                                         tfl12 = stof(s);\r
634                                 else if (f == 13)\r
635                                         tfl13 = stof(s);\r
636                                 else if (f == 14)\r
637                                         tfl14 = stof(s);\r
638                                 else if (f == 15)\r
639                                         tfl15 = stof(s);\r
640                                 else if (f == 16)\r
641                                         tfl16 = stof(s);\r
642                                 else if (f == 17)\r
643                                         tfl17 = stof(s);\r
644                                 else if (f == 18)\r
645                                         tfl18 = stof(s);\r
646                                 else if (f == 19)\r
647                                         tfl19 = stof(s);\r
648                                 s = fgets(file);\r
649                         }\r
650                         e = SpawnNavNode(wborg, wbmins, wbmaxs);\r
651                         if (plane_storage.plane_chain)\r
652                                 e.plane_chain = plane_storage.plane_chain;\r
653                         e.sflags = sfl;\r
654                         e.lflags0 = tfl0;\r
655                         e.lflags1 = tfl1;\r
656                         e.lflags2 = tfl2;\r
657                         e.lflags3 = tfl3;\r
658                         e.lflags4 = tfl4;\r
659                         e.lflags5 = tfl5;\r
660                         e.lflags6 = tfl6;\r
661                         e.lflags7 = tfl7;\r
662                         e.lflags8 = tfl8;\r
663                         e.lflags9 = tfl9;\r
664                         e.lflags10 = tfl10;\r
665                         e.lflags11 = tfl11;\r
666                         e.lflags12 = tfl12;\r
667                         e.lflags13 = tfl13;\r
668                         e.lflags14 = tfl14;\r
669                         e.lflags15 = tfl15;\r
670                         e.lflags16 = tfl16;\r
671                         e.lflags17 = tfl17;\r
672                         e.lflags18 = tfl18;\r
673                         e.lflags19 = tfl19;\r
674                         if (rl0 > -1)\r
675                         {\r
676                                 newmis = spawn();\r
677                                 newmis.classname = "remotelinker";\r
678                                 newmis.delay = rl0;\r
679                                 e.link0 = newmis;\r
680                         }\r
681                         if (rl1 > -1)\r
682                         {\r
683                                 newmis = spawn();\r
684                                 newmis.classname = "remotelinker";\r
685                                 newmis.delay = rl1;\r
686                                 e.link1 = newmis;\r
687                         }\r
688                         if (rl2 > -1)\r
689                         {\r
690                                 newmis = spawn();\r
691                                 newmis.classname = "remotelinker";\r
692                                 newmis.delay = rl2;\r
693                                 e.link2 = newmis;\r
694                         }\r
695                         if (rl3 > -1)\r
696                         {\r
697                                 newmis = spawn();\r
698                                 newmis.classname = "remotelinker";\r
699                                 newmis.delay = rl3;\r
700                                 e.link3 = newmis;\r
701                         }\r
702                         if (rl4 > -1)\r
703                         {\r
704                                 newmis = spawn();\r
705                                 newmis.classname = "remotelinker";\r
706                                 newmis.delay = rl4;\r
707                                 e.link4 = newmis;\r
708                         }\r
709                         if (rl5 > -1)\r
710                         {\r
711                                 newmis = spawn();\r
712                                 newmis.classname = "remotelinker";\r
713                                 newmis.delay = rl5;\r
714                                 e.link5 = newmis;\r
715                         }\r
716                         if (rl6 > -1)\r
717                         {\r
718                                 newmis = spawn();\r
719                                 newmis.classname = "remotelinker";\r
720                                 newmis.delay = rl6;\r
721                                 e.link6 = newmis;\r
722                         }\r
723                         if (rl7 > -1)\r
724                         {\r
725                                 newmis = spawn();\r
726                                 newmis.classname = "remotelinker";\r
727                                 newmis.delay = rl7;\r
728                                 e.link7 = newmis;\r
729                         }\r
730                         if (rl8 > -1)\r
731                         {\r
732                                 newmis = spawn();\r
733                                 newmis.classname = "remotelinker";\r
734                                 newmis.delay = rl8;\r
735                                 e.link8 = newmis;\r
736                         }\r
737                         if (rl9 > -1)\r
738                         {\r
739                                 newmis = spawn();\r
740                                 newmis.classname = "remotelinker";\r
741                                 newmis.delay = rl9;\r
742                                 e.link9 = newmis;\r
743                         }\r
744                         if (rl10 > -1)\r
745                         {\r
746                                 newmis = spawn();\r
747                                 newmis.classname = "remotelinker";\r
748                                 newmis.delay = rl10;\r
749                                 e.link10 = newmis;\r
750                         }\r
751                         if (rl11 > -1)\r
752                         {\r
753                                 newmis = spawn();\r
754                                 newmis.classname = "remotelinker";\r
755                                 newmis.delay = rl11;\r
756                                 e.link11 = newmis;\r
757                         }\r
758                         if (rl12 > -1)\r
759                         {\r
760                                 newmis = spawn();\r
761                                 newmis.classname = "remotelinker";\r
762                                 newmis.delay = rl12;\r
763                                 e.link12 = newmis;\r
764                         }\r
765                         if (rl13 > -1)\r
766                         {\r
767                                 newmis = spawn();\r
768                                 newmis.classname = "remotelinker";\r
769                                 newmis.delay = rl13;\r
770                                 e.link13 = newmis;\r
771                         }\r
772                         if (rl14 > -1)\r
773                         {\r
774                                 newmis = spawn();\r
775                                 newmis.classname = "remotelinker";\r
776                                 newmis.delay = rl14;\r
777                                 e.link14 = newmis;\r
778                         }\r
779                         if (rl15 > -1)\r
780                         {\r
781                                 newmis = spawn();\r
782                                 newmis.classname = "remotelinker";\r
783                                 newmis.delay = rl15;\r
784                                 e.link15 = newmis;\r
785                         }\r
786                         if (rl16 > -1)\r
787                         {\r
788                                 newmis = spawn();\r
789                                 newmis.classname = "remotelinker";\r
790                                 newmis.delay = rl16;\r
791                                 e.link16 = newmis;\r
792                         }\r
793                         if (rl17 > -1)\r
794                         {\r
795                                 newmis = spawn();\r
796                                 newmis.classname = "remotelinker";\r
797                                 newmis.delay = rl17;\r
798                                 e.link17 = newmis;\r
799                         }\r
800                         if (rl18 > -1)\r
801                         {\r
802                                 newmis = spawn();\r
803                                 newmis.classname = "remotelinker";\r
804                                 newmis.delay = rl18;\r
805                                 e.link18 = newmis;\r
806                         }\r
807                         if (rl19 > -1)\r
808                         {\r
809                                 newmis = spawn();\r
810                                 newmis.classname = "remotelinker";\r
811                                 newmis.delay = rl19;\r
812                                 e.link19 = newmis;\r
813                         }\r
814                 }\r
815                 fclose(file);\r
816         }\r
817         else\r
818                 dprint("No navnode file found\n");\r
819         remove(plane_storage);\r
820         plane_storage = world;\r
821 };\r
822 \r
823 /* --- SpawnWayBox ---\r
824 The one to guess what this does gets a cookie from Quest*/\r
825 /*\r
826 entity(vector org, vector wsize) SpawnWayBox =\r
827 {\r
828         newmis = spawn();\r
829         setsize(newmis, wsize*-1, wsize);\r
830         newmis.classname = "waybox";\r
831         setorigin(newmis, org);\r
832         return (newmis);\r
833 };\r
834 */\r
835 /* --- LinkWayBoxes ---\r
836 Links wayboxes and gives some special attributes (like doors, teleporters)*/\r
837 \r
838 /*\r
839 void() LinkWayBoxes =\r
840 {\r
841         local entity e, t, tdest;\r
842 \r
843         box_chain = world;\r
844         wayboxes = 0;\r
845 \r
846         e = findchain(classname, "waybox");\r
847         while (e)\r
848         {\r
849                 e.list = box_chain;\r
850                 box_chain = e;\r
851                 e.link0 = e.link1 = e.link2 = e.link3 = e.link4 = e.link5 = e.link6 = e.link7 = e.link8 = e.link9 = world;\r
852                 e.link10 = e.link11 = e.link12 = e.link13 = e.link14 = e.link15 = e.link16 = e.link17 = e.link18 = e.link19 = world;\r
853                 wayboxes = wayboxes + 1;\r
854                 e = e.chain;\r
855         }\r
856 \r
857         e = box_chain;\r
858         while (e)\r
859         {\r
860                 if (!(e.sflags & S_TELEPORT))\r
861                 {\r
862                         t = box_chain;\r
863                         while (t)\r
864                         {\r
865                                 if (boxesoverlap(e.origin + e.mins, e.origin + e.maxs, t.origin + t.mins, t.origin + t.maxs))\r
866                                 if (t != e)\r
867                                 if (t != e.link0)\r
868                                 if (t != e.link1)\r
869                                 if (t != e.link2)\r
870                                 if (t != e.link3)\r
871                                 if (t != e.link4)\r
872                                 if (t != e.link5)\r
873                                 if (t != e.link6)\r
874                                 if (t != e.link7)\r
875                                 if (t != e.link8)\r
876                                 if (t != e.link9)\r
877                                 if (t != e.link10)\r
878                                 if (t != e.link11)\r
879                                 if (t != e.link12)\r
880                                 if (t != e.link13)\r
881                                 if (t != e.link14)\r
882                                 if (t != e.link15)\r
883                                 if (t != e.link16)\r
884                                 if (t != e.link17)\r
885                                 if (t != e.link18)\r
886                                 if (t != e.link19)\r
887                                 {\r
888                                         if (!e.link0)\r
889                                                 e.link0 = t;\r
890                                         else if (!e.link1)\r
891                                                 e.link1 = t;\r
892                                         else if (!e.link2)\r
893                                                 e.link2 = t;\r
894                                         else if (!e.link3)\r
895                                                 e.link3 = t;\r
896                                         else if (!e.link4)\r
897                                                 e.link4 = t;\r
898                                         else if (!e.link5)\r
899                                                 e.link5 = t;\r
900                                         else if (!e.link6)\r
901                                                 e.link6 = t;\r
902                                         else if (!e.link7)\r
903                                                 e.link7 = t;\r
904                                         else if (!e.link8)\r
905                                                 e.link8 = t;\r
906                                         else if (!e.link9)\r
907                                                 e.link9 = t;\r
908                                         else if (!e.link10)\r
909                                                 e.link10 = t;\r
910                                         else if (!e.link11)\r
911                                                 e.link11 = t;\r
912                                         else if (!e.link12)\r
913                                                 e.link12 = t;\r
914                                         else if (!e.link13)\r
915                                                 e.link13 = t;\r
916                                         else if (!e.link14)\r
917                                                 e.link14 = t;\r
918                                         else if (!e.link15)\r
919                                                 e.link15 = t;\r
920                                         else if (!e.link16)\r
921                                                 e.link16 = t;\r
922                                         else if (!e.link17)\r
923                                                 e.link17 = t;\r
924                                         else if (!e.link18)\r
925                                                 e.link18 = t;\r
926                                         else if (!e.link19)\r
927                                                 e.link19 = t;\r
928                                         else\r
929                                                 objerror("Too many touching wayboxes!\n");\r
930                                 }\r
931                                 t = t.list;\r
932                         }\r
933                 }\r
934                 e = e.list;\r
935         }\r
936         e = box_chain;\r
937         while (e)\r
938         {\r
939                 if (e.sflags & S_TELEPORT)\r
940                 {\r
941                         t = findchain(classname, "trigger_teleport");\r
942                         while (t)\r
943                         {\r
944                                 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))\r
945                                 {\r
946                                         tdest = find(world, targetname, t.target);\r
947                                         tdest = FindCurrentWayBox(tdest.origin, '0 0 0', '0 0 0');\r
948                                         e.link0 = tdest;\r
949                                 }\r
950                                 t = t.chain;\r
951                         }\r
952                 }\r
953                 else if (e.sflags & S_DOOR)\r
954                 {\r
955                         t = findchain(classname, "door");\r
956                         while (t)\r
957                         {\r
958                                 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))\r
959                                         e.goalentity = t;\r
960                                 t = t.chain;\r
961                         }\r
962                         if (!e.goalentity)\r
963                                 error("Expected door\n");\r
964                 }\r
965                 e = e.list;\r
966         }\r
967 };\r
968 */\r
969 \r
970 /* --- LoadWayBoxes ---\r
971 Loads wayboxes from a file generated by the waybox-editor mod*/\r
972 \r
973 /*\r
974 void() LoadNavs =\r
975 {\r
976         local float f, file, length;\r
977         local float sfl;\r
978         local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;\r
979         local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;\r
980         local string s, nname;\r
981         local vector wborg, wbmaxs;\r
982         local entity e;\r
983 \r
984         if (navents)\r
985         {\r
986                 dprint("NavEntities present, map needs to be reloaded to load navent-file\n");\r
987                 return;\r
988         }\r
989 \r
990         length = strlen(world.model);\r
991         length = length - 5;\r
992         s = substring(world.model, 5, length);\r
993         s = strcat(s, ".nel");\r
994 \r
995         file = fopen(s, FILE_READ);\r
996 \r
997         if (file >= 0)\r
998         {\r
999                 s = fgets(file);\r
1000                 while (s == "navent")\r
1001                 {\r
1002                         f = 0;\r
1003                         sfl = 0;\r
1004                         tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;\r
1005                         tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;\r
1006                         s = fgets(file);\r
1007                         if (s == "sflags")\r
1008                         {\r
1009                                 s = fgets(file);\r
1010                                 sfl = stof(s);\r
1011                                 s = fgets(file);\r
1012                         }\r
1013                         while (substring(s, 0, 6) == "tflags")\r
1014                         {\r
1015                                 f = stof(substring(s, 6, 7));\r
1016                                 s = fgets(file);\r
1017                                 if (!f)\r
1018                                         tfl0 = stof(s);\r
1019                                 else if (f == 1)\r
1020                                         tfl1 = stof(s);\r
1021                                 else if (f == 2)\r
1022                                         tfl2 = stof(s);\r
1023                                 else if (f == 3)\r
1024                                         tfl3 = stof(s);\r
1025                                 else if (f == 4)\r
1026                                         tfl4 = stof(s);\r
1027                                 else if (f == 5)\r
1028                                         tfl5 = stof(s);\r
1029                                 else if (f == 6)\r
1030                                         tfl6 = stof(s);\r
1031                                 else if (f == 7)\r
1032                                         tfl7 = stof(s);\r
1033                                 else if (f == 8)\r
1034                                         tfl8 = stof(s);\r
1035                                 else if (f == 9)\r
1036                                         tfl9 = stof(s);\r
1037                                 else if (f == 10)\r
1038                                         tfl10 = stof(s);\r
1039                                 else if (f == 11)\r
1040                                         tfl11 = stof(s);\r
1041                                 else if (f == 12)\r
1042                                         tfl12 = stof(s);\r
1043                                 else if (f == 13)\r
1044                                         tfl13 = stof(s);\r
1045                                 else if (f == 14)\r
1046                                         tfl14 = stof(s);\r
1047                                 else if (f == 15)\r
1048                                         tfl15 = stof(s);\r
1049                                 else if (f == 16)\r
1050                                         tfl16 = stof(s);\r
1051                                 else if (f == 17)\r
1052                                         tfl17 = stof(s);\r
1053                                 else if (f == 18)\r
1054                                         tfl18 = stof(s);\r
1055                                 else if (f == 19)\r
1056                                         tfl19 = stof(s);\r
1057                                 s = fgets(file);\r
1058                         }\r
1059                         wborg = stov(s);\r
1060                         s = fgets(file);\r
1061                         wbmaxs = stov(s);\r
1062                         e = SpawnNavEnt(wborg, wbmaxs);\r
1063                         e.sflags = sfl;\r
1064                         e.tflags0 = tfl0;\r
1065                         e.tflags1 = tfl1;\r
1066                         e.tflags2 = tfl2;\r
1067                         e.tflags3 = tfl3;\r
1068                         e.tflags4 = tfl4;\r
1069                         e.tflags5 = tfl5;\r
1070                         e.tflags6 = tfl6;\r
1071                         e.tflags7 = tfl7;\r
1072                         e.tflags8 = tfl8;\r
1073                         e.tflags9 = tfl9;\r
1074                         e.tflags10 = tfl10;\r
1075                         e.tflags11 = tfl11;\r
1076                         e.tflags12 = tfl12;\r
1077                         e.tflags13 = tfl13;\r
1078                         e.tflags14 = tfl14;\r
1079                         e.tflags15 = tfl15;\r
1080                         e.tflags16 = tfl16;\r
1081                         e.tflags17 = tfl17;\r
1082                         e.tflags18 = tfl18;\r
1083                         e.tflags19 = tfl19;\r
1084                         s = fgets(file);\r
1085                 }\r
1086                 fclose(file);\r
1087         }\r
1088         LinkNavs();\r
1089 };\r
1090 */\r
1091 /*\r
1092 void() LoadWayBoxes =\r
1093 {\r
1094         local float f, file, length;\r
1095         local float sfl;\r
1096         local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;\r
1097         local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;\r
1098         local string s, nname;\r
1099         local vector wborg, wbmaxs;\r
1100         local entity e;\r
1101 \r
1102         if (wayboxes)\r
1103         {\r
1104                 dprint("Wayboxes present, map needs to be reloaded to load waybox-file\n");\r
1105                 return;\r
1106         }\r
1107 \r
1108         length = strlen(world.model);\r
1109         length = length - 5;\r
1110         s = substring(world.model, 5, length);\r
1111         s = strcat(s, ".wbl");\r
1112 \r
1113         file = fopen(s, FILE_READ);\r
1114 \r
1115         if (file >= 0)\r
1116         {\r
1117                 s = fgets(file);\r
1118                 while (s == "waybox")\r
1119                 {\r
1120                         f = 0;\r
1121                         sfl = 0;\r
1122                         tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;\r
1123                         tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;\r
1124                         s = fgets(file);\r
1125                         if (s == "sflags")\r
1126                         {\r
1127                                 s = fgets(file);\r
1128                                 sfl = stof(s);\r
1129                                 s = fgets(file);\r
1130                         }\r
1131                         while (substring(s, 0, 6) == "tflags")\r
1132                         {\r
1133                                 f = stof(substring(s, 6, 7));\r
1134                                 s = fgets(file);\r
1135                                 if (!f)\r
1136                                         tfl0 = stof(s);\r
1137                                 else if (f == 1)\r
1138                                         tfl1 = stof(s);\r
1139                                 else if (f == 2)\r
1140                                         tfl2 = stof(s);\r
1141                                 else if (f == 3)\r
1142                                         tfl3 = stof(s);\r
1143                                 else if (f == 4)\r
1144                                         tfl4 = stof(s);\r
1145                                 else if (f == 5)\r
1146                                         tfl5 = stof(s);\r
1147                                 else if (f == 6)\r
1148                                         tfl6 = stof(s);\r
1149                                 else if (f == 7)\r
1150                                         tfl7 = stof(s);\r
1151                                 else if (f == 8)\r
1152                                         tfl8 = stof(s);\r
1153                                 else if (f == 9)\r
1154                                         tfl9 = stof(s);\r
1155                                 else if (f == 10)\r
1156                                         tfl10 = stof(s);\r
1157                                 else if (f == 11)\r
1158                                         tfl11 = stof(s);\r
1159                                 else if (f == 12)\r
1160                                         tfl12 = stof(s);\r
1161                                 else if (f == 13)\r
1162                                         tfl13 = stof(s);\r
1163                                 else if (f == 14)\r
1164                                         tfl14 = stof(s);\r
1165                                 else if (f == 15)\r
1166                                         tfl15 = stof(s);\r
1167                                 else if (f == 16)\r
1168                                         tfl16 = stof(s);\r
1169                                 else if (f == 17)\r
1170                                         tfl17 = stof(s);\r
1171                                 else if (f == 18)\r
1172                                         tfl18 = stof(s);\r
1173                                 else if (f == 19)\r
1174                                         tfl19 = stof(s);\r
1175                                 s = fgets(file);\r
1176                         }\r
1177                         wborg = stov(s);\r
1178                         s = fgets(file);\r
1179                         wbmaxs = stov(s);\r
1180                         e = SpawnWayBox(wborg, wbmaxs);\r
1181                         e.sflags = sfl;\r
1182                         e.tflags0 = tfl0;\r
1183                         e.tflags1 = tfl1;\r
1184                         e.tflags2 = tfl2;\r
1185                         e.tflags3 = tfl3;\r
1186                         e.tflags4 = tfl4;\r
1187                         e.tflags5 = tfl5;\r
1188                         e.tflags6 = tfl6;\r
1189                         e.tflags7 = tfl7;\r
1190                         e.tflags8 = tfl8;\r
1191                         e.tflags9 = tfl9;\r
1192                         e.tflags10 = tfl10;\r
1193                         e.tflags11 = tfl11;\r
1194                         e.tflags12 = tfl12;\r
1195                         e.tflags13 = tfl13;\r
1196                         e.tflags14 = tfl14;\r
1197                         e.tflags15 = tfl15;\r
1198                         e.tflags16 = tfl16;\r
1199                         e.tflags17 = tfl17;\r
1200                         e.tflags18 = tfl18;\r
1201                         e.tflags19 = tfl19;\r
1202                         s = fgets(file);\r
1203                 }\r
1204                 fclose(file);\r
1205         }\r
1206 };\r
1207 */\r