]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/gamec/urrebot_load.c
add g_navnodeedit
[divverent/nexuiz.git] / data / qcsrc / gamec / urrebot_load.c
1 /* --- UrreBotSetup ---\r
2 Issues a random funky name, random colors, playermodel and team to the bot*/\r
3 \r
4 void() UrreBotSetup =\r
5 {\r
6         local float r, shirt, pants;\r
7         local string s;\r
8 \r
9         r = random()*18;\r
10         if (r <= 1)\r
11                 s = "GrooveMachine";\r
12         else if (r <= 2)\r
13                 s = "Worm";\r
14         else if (r <= 3)\r
15                 s = "ClownLock";\r
16         else if (r <= 4)\r
17                 s = "DiscO";\r
18         else if (r <= 5)\r
19                 s = "FunkyFresh";\r
20         else if (r <= 6)\r
21                 s = "DanceWithMe";\r
22         else if (r <= 7)\r
23                 s = "BodyJiggle";\r
24         else if (r <= 8)\r
25                 s = "CantSwim";\r
26         else if (r <= 9)\r
27                 s = "AtomicDog";\r
28         else if (r <= 10)\r
29                 s = "Follower";\r
30         else if (r <= 11)\r
31                 s = "BrassMonkey";\r
32         else if (r <= 12)\r
33                 s = "SirNose";\r
34         else if (r <= 13)\r
35                 s = "StarChild";\r
36         else if (r <= 14)\r
37                 s = "GeorgeC";\r
38         else if (r <= 15)\r
39                 s = "Bootsy";\r
40         else if (r <= 16)\r
41                 s = "Flashlight";\r
42         else if (r <= 17)\r
43                 s = "Bodysnatcher";\r
44         else\r
45                 s = "Boogieboy";\r
46 \r
47         self.netname = s;\r
48 \r
49         r = random()*15;\r
50         if (r <= 1)\r
51         {\r
52                 self.playermodel = "models/player/carni.zym";\r
53                 if (random() < 0.5)\r
54                         self.playerskin = "0";\r
55                 else\r
56                         self.playerskin = "1";\r
57         }\r
58         else if (r <= 2)\r
59         {\r
60                 self.playermodel = "models/player/crash.zym";\r
61                 self.playerskin = "0";\r
62         }\r
63         else if (r <= 3)\r
64         {\r
65                 self.playermodel = "models/player/grunt.zym";\r
66                 self.playerskin = "0";\r
67         }\r
68         else if (r <= 4)\r
69         {\r
70                 self.playermodel = "models/player/headhunter.zym";\r
71                 self.playerskin = "0";\r
72         }\r
73         else if (r <= 5)\r
74         {\r
75                 self.playermodel = "models/player/insurrectionist.zym";\r
76                 self.playerskin = "0";\r
77         }\r
78         else if (r <= 6)\r
79         {\r
80                 self.playermodel = "models/player/jeandarc.zym";\r
81                 self.playerskin = "0";\r
82         }\r
83         else if (r <= 7)\r
84         {\r
85                 self.playermodel = "models/player/lurk.zym";\r
86                 if (random() < 0.5)\r
87                         self.playerskin = "0";\r
88                 else\r
89                         self.playerskin = "1";\r
90         }\r
91         else if (r <= 8)\r
92         {\r
93                 self.playermodel = "models/player/lycanthrope.zym";\r
94                 self.playerskin = "0";\r
95         }\r
96         else if (r <= 9)\r
97         {\r
98                 self.playermodel = "models/player/marine.zym";\r
99                 self.playerskin = "0";\r
100         }\r
101         else if (r <= 10)\r
102         {\r
103                 self.playermodel = "models/player/nexus.zym";\r
104                 if (random() < 0.5)\r
105                         self.playerskin = "0";\r
106                 else\r
107                         self.playerskin = "1";\r
108         }\r
109         else if (r <= 11)\r
110         {\r
111                 self.playermodel = "models/player/pyria.zym";\r
112                 self.playerskin = "0";\r
113         }\r
114         else if (r <= 12)\r
115         {\r
116                 self.playermodel = "models/player/shock.zym";\r
117                 self.playerskin = "0";\r
118         }\r
119         else if (r <= 13)\r
120         {\r
121                 self.playermodel = "models/player/skadi.zym";\r
122                 self.playerskin = "0";\r
123         }\r
124         else if (r <= 14)\r
125         {\r
126                 self.playermodel = "models/player/specop.zym";\r
127                 self.playerskin = "0";\r
128         }\r
129         else\r
130         {\r
131                 self.playermodel = "models/player/visitant.zym";\r
132                 self.playerskin = "0";\r
133         }\r
134 \r
135         if (teamplay)\r
136                 JoinBestTeam(self, 0);\r
137         else\r
138         {\r
139                 shirt = floor(random()*15);\r
140                 pants = floor(random()*15);\r
141                 self.clientcolors = pants + shirt * 16;\r
142         }\r
143 };\r
144 \r
145 /* --- UrreBotAdd ---\r
146 Adds an UrreBot to the server*/\r
147 \r
148 entity(float bottype) UrreBotAdd =\r
149 {\r
150         local entity ent, ret;\r
151 \r
152         ent = self;\r
153         self = spawnclient();\r
154         if (!self)\r
155         {\r
156                 bprint("Can not add UrreBot, server full\n");\r
157                 if (bottype == BOT_TYPE_URREBOT)\r
158                         cvar_set("urrebots", ftos(urrebots));\r
159                 else\r
160                         cvar_set("bot_number", ftos(bot_number));\r
161                 self = ent;\r
162                 return world;\r
163         }\r
164         UrreBotSetup();\r
165         self.list = urrebot_chain;\r
166         urrebot_chain = self;\r
167         ClientConnect();\r
168         PutClientInServer();\r
169         ret = self;\r
170         self = ent;\r
171 \r
172         strategytoken = urrebot_chain;\r
173 \r
174         return ret;\r
175 };\r
176 \r
177 /* --- UrreBotRemove ---\r
178 removes an UrreBot from the server*/\r
179 \r
180 void() UrreBotRemove =\r
181 {\r
182         local entity ent, t;\r
183 \r
184         ent = findchain(classname, "player");\r
185         while (ent)\r
186         {\r
187                 if (clienttype(ent) == CLIENTTYPE_BOT)\r
188                 {\r
189                         if (ent.bot_type == BOT_TYPE_URREBOT)\r
190                         {\r
191                                 if (urrebot_chain == self)\r
192                                         urrebot_chain = self.list;\r
193                                 else\r
194                                 {\r
195                                         t = find(world, classname, "player");\r
196                                         while(t)\r
197                                         {\r
198                                                 if (t.list == ent)\r
199                                                         t.list = ent.list;\r
200                                                 t = find(t, classname, "player");\r
201                                         }\r
202                                 }\r
203                                 if (urrebots > 0)\r
204                                         urrebots -= 1;\r
205                                 //if(cvar("g_lms") && self.frags < 1) // DP_SV_BOTCLIENT handles this automaticly\r
206                                 //      lms_dead_count -= 1;\r
207                                 dropclient(ent);\r
208                         }\r
209                 }\r
210                 ent = ent.chain;\r
211         }\r
212 };\r
213 \r
214 /* --- SpawnNavNode ---\r
215 The one to guess what this does gets free bacon from FrikaC*/\r
216 \r
217 entity(vector org, vector nnmins, vector nnmaxs) SpawnNavNode =\r
218 {\r
219         newmis = spawn();\r
220         setsize(newmis, nnmins, nnmaxs);\r
221         newmis.classname = "navnode";\r
222         setorigin(newmis, org);\r
223         return newmis;\r
224 };\r
225 \r
226 /* --- AddPlane ---\r
227 Adds a plane to the plane list of a navnode*/\r
228 \r
229 void(entity navn, vector normal, float dist) AddPlane =\r
230 {\r
231         local float f;\r
232 \r
233         newmis = spawn();\r
234         newmis.classname = "plane";\r
235         newmis.list = navn.plane_chain;\r
236         navn.plane_chain = newmis;\r
237         newmis.mangle = normal*-1;\r
238         newmis.delay = dist;\r
239         f = (navn.origin * newmis.mangle) - ((navn.origin + (newmis.delay * newmis.mangle)) * newmis.mangle);\r
240         if (f > 0)\r
241         {\r
242                 newmis.mangle = newmis.mangle*-1;\r
243                 newmis.delay = newmis.delay*-1;\r
244         }\r
245 };\r
246 \r
247 /* --- LinkNavNodes ---\r
248 Links the navnodes and gives some special attributes (like doors, teleporters)*/\r
249 \r
250 void() LinkNavNodes =\r
251 {\r
252         local entity e, t, tdest;\r
253 \r
254         navnode_chain = world;\r
255         navnodes = 0;\r
256 \r
257         e = findchain(classname, "navnode");\r
258         while (e)\r
259         {\r
260                 e.list = navnode_chain;\r
261                 navnode_chain = e;\r
262                 e.delay = navnodes;\r
263                 navnodes = navnodes + 1;\r
264                 e = e.chain;\r
265         }\r
266 \r
267         e = navnode_chain;\r
268         while (e)\r
269         {\r
270                 if (e.link0)\r
271                 {\r
272                         e.link0.think = SUB_Remove;\r
273                         e.link0.nextthink = time;\r
274                         t = navnode_chain;\r
275                         while (t)\r
276                         {\r
277                                 if (t.delay == e.link0.delay)\r
278                                         e.link0 = t;\r
279                                 t = t.list;\r
280                         }\r
281                         e.lflags0 = e.lflags0 | LF_REMOTE;\r
282                 }\r
283                 if (e.link1)\r
284                 {\r
285                         e.link1.think = SUB_Remove;\r
286                         e.link1.nextthink = time;\r
287                         t = navnode_chain;\r
288                         while (t)\r
289                         {\r
290                                 if (t.delay == e.link1.delay)\r
291                                         e.link1 = t;\r
292                                 t = t.list;\r
293                         }\r
294                         e.lflags1 = e.lflags1 | LF_REMOTE;\r
295                 }\r
296                 if (e.link2)\r
297                 {\r
298                         e.link2.think = SUB_Remove;\r
299                         e.link2.nextthink = time;\r
300                         t = navnode_chain;\r
301                         while (t)\r
302                         {\r
303                                 if (t.delay == e.link2.delay)\r
304                                         e.link2 = t;\r
305                                 t = t.list;\r
306                         }\r
307                         e.lflags2 = e.lflags2 | LF_REMOTE;\r
308                 }\r
309                 if (e.link3)\r
310                 {\r
311                         e.link3.think = SUB_Remove;\r
312                         e.link3.nextthink = time;\r
313                         t = navnode_chain;\r
314                         while (t)\r
315                         {\r
316                                 if (t.delay == e.link3.delay)\r
317                                         e.link3 = t;\r
318                                 t = t.list;\r
319                         }\r
320                         e.lflags3 = e.lflags3 | LF_REMOTE;\r
321                 }\r
322                 if (e.link4)\r
323                 {\r
324                         e.link4.think = SUB_Remove;\r
325                         e.link4.nextthink = time;\r
326                         t = navnode_chain;\r
327                         while (t)\r
328                         {\r
329                                 if (t.delay == e.link4.delay)\r
330                                         e.link4 = t;\r
331                                 t = t.list;\r
332                         }\r
333                         e.lflags4 = e.lflags4 | LF_REMOTE;\r
334                 }\r
335                 if (e.link5)\r
336                 {\r
337                         e.link5.think = SUB_Remove;\r
338                         e.link5.nextthink = time;\r
339                         t = navnode_chain;\r
340                         while (t)\r
341                         {\r
342                                 if (t.delay == e.link5.delay)\r
343                                         e.link5 = t;\r
344                                 t = t.list;\r
345                         }\r
346                         e.lflags5 = e.lflags5 | LF_REMOTE;\r
347                 }\r
348                 if (e.link6)\r
349                 {\r
350                         e.link6.think = SUB_Remove;\r
351                         e.link6.nextthink = time;\r
352                         t = navnode_chain;\r
353                         while (t)\r
354                         {\r
355                                 if (t.delay == e.link6.delay)\r
356                                         e.link6 = t;\r
357                                 t = t.list;\r
358                         }\r
359                         e.lflags6 = e.lflags6 | LF_REMOTE;\r
360                 }\r
361                 if (e.link7)\r
362                 {\r
363                         e.link7.think = SUB_Remove;\r
364                         e.link7.nextthink = time;\r
365                         t = navnode_chain;\r
366                         while (t)\r
367                         {\r
368                                 if (t.delay == e.link7.delay)\r
369                                         e.link7 = t;\r
370                                 t = t.list;\r
371                         }\r
372                         e.lflags7 = e.lflags7 | LF_REMOTE;\r
373                 }\r
374                 if (e.link8)\r
375                 {\r
376                         e.link8.think = SUB_Remove;\r
377                         e.link8.nextthink = time;\r
378                         t = navnode_chain;\r
379                         while (t)\r
380                         {\r
381                                 if (t.delay == e.link8.delay)\r
382                                         e.link8 = t;\r
383                                 t = t.list;\r
384                         }\r
385                         e.lflags8 = e.lflags8 | LF_REMOTE;\r
386                 }\r
387                 if (e.link9)\r
388                 {\r
389                         e.link9.think = SUB_Remove;\r
390                         e.link9.nextthink = time;\r
391                         t = navnode_chain;\r
392                         while (t)\r
393                         {\r
394                                 if (t.delay == e.link9.delay)\r
395                                         e.link9 = t;\r
396                                 t = t.list;\r
397                         }\r
398                         e.lflags9 = e.lflags9 | LF_REMOTE;\r
399                 }\r
400                 if (e.link10)\r
401                 {\r
402                         e.link10.think = SUB_Remove;\r
403                         e.link10.nextthink = time;\r
404                         t = navnode_chain;\r
405                         while (t)\r
406                         {\r
407                                 if (t.delay == e.link10.delay)\r
408                                         e.link10 = t;\r
409                                 t = t.list;\r
410                         }\r
411                         e.lflags10 = e.lflags10 | LF_REMOTE;\r
412                 }\r
413                 if (e.link11)\r
414                 {\r
415                         e.link11.think = SUB_Remove;\r
416                         e.link11.nextthink = time;\r
417                         t = navnode_chain;\r
418                         while (t)\r
419                         {\r
420                                 if (t.delay == e.link11.delay)\r
421                                         e.link11 = t;\r
422                                 t = t.list;\r
423                         }\r
424                         e.lflags11 = e.lflags11 | LF_REMOTE;\r
425                 }\r
426                 if (e.link12)\r
427                 {\r
428                         e.link12.think = SUB_Remove;\r
429                         e.link12.nextthink = time;\r
430                         t = navnode_chain;\r
431                         while (t)\r
432                         {\r
433                                 if (t.delay == e.link12.delay)\r
434                                         e.link12 = t;\r
435                                 t = t.list;\r
436                         }\r
437                         e.lflags12 = e.lflags12 | LF_REMOTE;\r
438                 }\r
439                 if (e.link13)\r
440                 {\r
441                         e.link13.think = SUB_Remove;\r
442                         e.link13.nextthink = time;\r
443                         t = navnode_chain;\r
444                         while (t)\r
445                         {\r
446                                 if (t.delay == e.link13.delay)\r
447                                         e.link13 = t;\r
448                                 t = t.list;\r
449                         }\r
450                         e.lflags13 = e.lflags13 | LF_REMOTE;\r
451                 }\r
452                 if (e.link14)\r
453                 {\r
454                         e.link14.think = SUB_Remove;\r
455                         e.link14.nextthink = time;\r
456                         t = navnode_chain;\r
457                         while (t)\r
458                         {\r
459                                 if (t.delay == e.link14.delay)\r
460                                         e.link14 = t;\r
461                                 t = t.list;\r
462                         }\r
463                         e.lflags14 = e.lflags14 | LF_REMOTE;\r
464                 }\r
465                 if (e.link15)\r
466                 {\r
467                         e.link15.think = SUB_Remove;\r
468                         e.link15.nextthink = time;\r
469                         t = navnode_chain;\r
470                         while (t)\r
471                         {\r
472                                 if (t.delay == e.link15.delay)\r
473                                         e.link15 = t;\r
474                                 t = t.list;\r
475                         }\r
476                         e.lflags15 = e.lflags15 | LF_REMOTE;\r
477                 }\r
478                 if (e.link16)\r
479                 {\r
480                         e.link16.think = SUB_Remove;\r
481                         e.link16.nextthink = time;\r
482                         t = navnode_chain;\r
483                         while (t)\r
484                         {\r
485                                 if (t.delay == e.link16.delay)\r
486                                         e.link16 = t;\r
487                                 t = t.list;\r
488                         }\r
489                         e.lflags16 = e.lflags16 | LF_REMOTE;\r
490                 }\r
491                 if (e.link17)\r
492                 {\r
493                         e.link17.think = SUB_Remove;\r
494                         e.link17.nextthink = time;\r
495                         t = navnode_chain;\r
496                         while (t)\r
497                         {\r
498                                 if (t.delay == e.link17.delay)\r
499                                         e.link17 = t;\r
500                                 t = t.list;\r
501                         }\r
502                         e.lflags17 = e.lflags17 | LF_REMOTE;\r
503                 }\r
504                 if (e.link18)\r
505                 {\r
506                         e.link18.think = SUB_Remove;\r
507                         e.link18.nextthink = time;\r
508                         t = navnode_chain;\r
509                         while (t)\r
510                         {\r
511                                 if (t.delay == e.link18.delay)\r
512                                         e.link18 = t;\r
513                                 t = t.list;\r
514                         }\r
515                         e.lflags18 = e.lflags18 | LF_REMOTE;\r
516                 }\r
517                 if (e.link19)\r
518                 {\r
519                         e.link19.think = SUB_Remove;\r
520                         e.link19.nextthink = time;\r
521                         t = navnode_chain;\r
522                         while (t)\r
523                         {\r
524                                 if (t.delay == e.link19.delay)\r
525                                         e.link19 = t;\r
526                                 t = t.list;\r
527                         }\r
528                         e.lflags19 = e.lflags19 | LF_REMOTE;\r
529                 }\r
530                 e = e.list;\r
531         }\r
532         e = navnode_chain;\r
533         while (e)\r
534         {\r
535                 if (!(e.sflags & S_TELEPORT))\r
536                 {\r
537                         t = navnode_chain;\r
538                         while (t)\r
539                         {\r
540                                 if (boxesoverlap(e.origin + e.mins, e.origin + e.maxs, t.origin + t.mins, t.origin + t.maxs))\r
541                                 if (t != e)\r
542                                 if (t != e.link0)\r
543                                 if (t != e.link1)\r
544                                 if (t != e.link2)\r
545                                 if (t != e.link3)\r
546                                 if (t != e.link4)\r
547                                 if (t != e.link5)\r
548                                 if (t != e.link6)\r
549                                 if (t != e.link7)\r
550                                 if (t != e.link8)\r
551                                 if (t != e.link9)\r
552                                 if (t != e.link10)\r
553                                 if (t != e.link11)\r
554                                 if (t != e.link12)\r
555                                 if (t != e.link13)\r
556                                 if (t != e.link14)\r
557                                 if (t != e.link15)\r
558                                 if (t != e.link16)\r
559                                 if (t != e.link17)\r
560                                 if (t != e.link18)\r
561                                 if (t != e.link19)\r
562                                 {\r
563                                         if (!e.link0)\r
564                                                 e.link0 = t;\r
565                                         else if (!e.link1)\r
566                                                 e.link1 = t;\r
567                                         else if (!e.link2)\r
568                                                 e.link2 = t;\r
569                                         else if (!e.link3)\r
570                                                 e.link3 = t;\r
571                                         else if (!e.link4)\r
572                                                 e.link4 = t;\r
573                                         else if (!e.link5)\r
574                                                 e.link5 = t;\r
575                                         else if (!e.link6)\r
576                                                 e.link6 = t;\r
577                                         else if (!e.link7)\r
578                                                 e.link7 = t;\r
579                                         else if (!e.link8)\r
580                                                 e.link8 = t;\r
581                                         else if (!e.link9)\r
582                                                 e.link9 = t;\r
583                                         else if (!e.link10)\r
584                                                 e.link10 = t;\r
585                                         else if (!e.link11)\r
586                                                 e.link11 = t;\r
587                                         else if (!e.link12)\r
588                                                 e.link12 = t;\r
589                                         else if (!e.link13)\r
590                                                 e.link13 = t;\r
591                                         else if (!e.link14)\r
592                                                 e.link14 = t;\r
593                                         else if (!e.link15)\r
594                                                 e.link15 = t;\r
595                                         else if (!e.link16)\r
596                                                 e.link16 = t;\r
597                                         else if (!e.link17)\r
598                                                 e.link17 = t;\r
599                                         else if (!e.link18)\r
600                                                 e.link18 = t;\r
601                                         else if (!e.link19)\r
602                                                 e.link19 = t;\r
603                                         else\r
604                                                 dprint("WARNING: Too many linking NavNodes!\n");\r
605                                 }\r
606                                 t = t.list;\r
607                         }\r
608                 }\r
609                 e = e.list;\r
610         }\r
611         e = navnode_chain;\r
612         while (e)\r
613         {\r
614                 if (e.sflags & S_TELEPORT)\r
615                 {\r
616                         t = findchain(classname, "trigger_teleport");\r
617                         while (t)\r
618                         {\r
619                                 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))\r
620                                 {\r
621                                         tdest = find(world, targetname, t.target);\r
622                                         tdest = FindCurrentNavNode(tdest.origin, '0 0 0', '0 0 0');\r
623                                         e.link0 = tdest;\r
624                                 }\r
625                                 t = t.chain;\r
626                         }\r
627                         if (!e.link0)\r
628                                 error("Expected navnode\n");\r
629                 }\r
630                 else if (e.sflags & S_DOOR)\r
631                 {\r
632                         t = findchain(classname, "door");\r
633                         while (t)\r
634                         {\r
635                                 if (boxesoverlap(t.absmin, t.absmax, e.absmin, e.absmax))\r
636                                         e.goalentity = t;\r
637                                 t = t.chain;\r
638                         }\r
639                         if (!e.goalentity)\r
640                                 error("Expected door\n");\r
641                 }\r
642                 e = e.list;\r
643         }\r
644 };\r
645 \r
646 /* --- LoadNavNodes ---\r
647 Loads the navnodes from an .nnl file (NavNodeList) for the map*/\r
648 \r
649 void() LoadNavNodes =\r
650 {\r
651         local float f, file, length;\r
652         local float pdst;\r
653         local float sfl;\r
654         local float tfl0, tfl1, tfl2, tfl3, tfl4, tfl5, tfl6, tfl7, tfl8, tfl9;\r
655         local float tfl10, tfl11, tfl12, tfl13, tfl14, tfl15, tfl16, tfl17, tfl18, tfl19;\r
656         local string s;\r
657         local float rl0, rl1, rl2, rl3, rl4, rl5, rl6, rl7, rl8, rl9;\r
658         local float rl10, rl11, rl12, rl13, rl14, rl15, rl16, rl17, rl18, rl19;\r
659         local vector pln;\r
660         local vector wborg, wbmaxs, wbmins;\r
661         local entity e, plane_storage;\r
662 \r
663         if (navnodes)\r
664         {\r
665                 dprint("NavNodes present, map needs to be reloaded to load navnode-file\n");\r
666                 return;\r
667         }\r
668 \r
669         plane_storage = spawn();\r
670 \r
671         length = strlen(world.model);\r
672         length = length - 5;\r
673         s = substring(world.model, 5, length);\r
674         s = strcat("maps/", s, ".nnl");\r
675 \r
676         file = fopen(s, FILE_READ);\r
677 \r
678         if (file >= 0)\r
679         {\r
680                 dprint("Found navnode file\n");\r
681                 s = fgets(file);\r
682                 while (s == "navnode")\r
683                 {\r
684                         f = 0;\r
685                         pdst = -1;\r
686                         pln = nullvector;\r
687                         wborg = wbmaxs = wbmins = nullvector;\r
688                         plane_storage.plane_chain = world;\r
689                         sfl = 0;\r
690                         tfl0 = tfl1 = tfl2 = tfl3 = tfl4 = tfl5 = tfl6 = tfl7 = tfl8 = tfl9 = 0;\r
691                         tfl10 = tfl11 = tfl12 = tfl13 = tfl14 = tfl15 = tfl16 = tfl17 = tfl18 = tfl19 = 0;\r
692                         rl0 = rl1 = rl2 = rl3 = rl4 = rl5 = rl6 = rl7 = rl8 = rl9 = -1;\r
693                         rl10 = rl11 = rl12 = rl13 = rl14 = rl15 = rl16 = rl17 = rl18 = rl19 = -1;\r
694                         s = fgets(file);\r
695                         wborg = stov(s);\r
696                         s = fgets(file);\r
697                         wbmins = stov(s);\r
698                         s = fgets(file);\r
699                         wbmaxs = stov(s);\r
700                         s = fgets(file);\r
701                         while (s == "plane")\r
702                         {\r
703                                 s = fgets(file);\r
704                                 pln = stov(s);\r
705                                 s = fgets(file);\r
706                                 pdst = stof(s);\r
707                                 AddPlane(plane_storage, pln*-1, pdst);\r
708                                 s = fgets(file);\r
709                         }\r
710                         while (substring(s, 0, 6) == "remote")\r
711                         {\r
712                                 length = strlen(s);\r
713                                 f = stof(substring(s, 6, length));\r
714                                 s = fgets(file);\r
715                                 if (!f)\r
716                                         rl0 = stof(s);\r
717                                 else if (f == 1)\r
718                                         rl1 = stof(s);\r
719                                 else if (f == 2)\r
720                                         rl2 = stof(s);\r
721                                 else if (f == 3)\r
722                                         rl3 = stof(s);\r
723                                 else if (f == 4)\r
724                                         rl4 = stof(s);\r
725                                 else if (f == 5)\r
726                                         rl5 = stof(s);\r
727                                 else if (f == 6)\r
728                                         rl6 = stof(s);\r
729                                 else if (f == 7)\r
730                                         rl7 = stof(s);\r
731                                 else if (f == 8)\r
732                                         rl8 = stof(s);\r
733                                 else if (f == 9)\r
734                                         rl9 = stof(s);\r
735                                 else if (f == 10)\r
736                                         rl10 = stof(s);\r
737                                 else if (f == 11)\r
738                                         rl11 = stof(s);\r
739                                 else if (f == 12)\r
740                                         rl12 = stof(s);\r
741                                 else if (f == 13)\r
742                                         rl13 = stof(s);\r
743                                 else if (f == 14)\r
744                                         rl14 = stof(s);\r
745                                 else if (f == 15)\r
746                                         rl15 = stof(s);\r
747                                 else if (f == 16)\r
748                                         rl16 = stof(s);\r
749                                 else if (f == 17)\r
750                                         rl17 = stof(s);\r
751                                 else if (f == 18)\r
752                                         rl18 = stof(s);\r
753                                 else if (f == 19)\r
754                                         rl19 = stof(s);\r
755                                 s = fgets(file);\r
756                         }\r
757                         if (s == "sflags")\r
758                         {\r
759                                 s = fgets(file);\r
760                                 sfl = stof(s);\r
761                                 s = fgets(file);\r
762                         }\r
763                         while (substring(s, 0, 6) == "lflags")\r
764                         {\r
765                                 length = strlen(s);\r
766                                 f = stof(substring(s, 6, length));\r
767                                 s = fgets(file);\r
768                                 if (!f)\r
769                                         tfl0 = stof(s);\r
770                                 else if (f == 1)\r
771                                         tfl1 = stof(s);\r
772                                 else if (f == 2)\r
773                                         tfl2 = stof(s);\r
774                                 else if (f == 3)\r
775                                         tfl3 = stof(s);\r
776                                 else if (f == 4)\r
777                                         tfl4 = stof(s);\r
778                                 else if (f == 5)\r
779                                         tfl5 = stof(s);\r
780                                 else if (f == 6)\r
781                                         tfl6 = stof(s);\r
782                                 else if (f == 7)\r
783                                         tfl7 = stof(s);\r
784                                 else if (f == 8)\r
785                                         tfl8 = stof(s);\r
786                                 else if (f == 9)\r
787                                         tfl9 = stof(s);\r
788                                 else if (f == 10)\r
789                                         tfl10 = stof(s);\r
790                                 else if (f == 11)\r
791                                         tfl11 = stof(s);\r
792                                 else if (f == 12)\r
793                                         tfl12 = stof(s);\r
794                                 else if (f == 13)\r
795                                         tfl13 = stof(s);\r
796                                 else if (f == 14)\r
797                                         tfl14 = stof(s);\r
798                                 else if (f == 15)\r
799                                         tfl15 = stof(s);\r
800                                 else if (f == 16)\r
801                                         tfl16 = stof(s);\r
802                                 else if (f == 17)\r
803                                         tfl17 = stof(s);\r
804                                 else if (f == 18)\r
805                                         tfl18 = stof(s);\r
806                                 else if (f == 19)\r
807                                         tfl19 = stof(s);\r
808                                 s = fgets(file);\r
809                         }\r
810                         e = SpawnNavNode(wborg, wbmins, wbmaxs);\r
811                         if (plane_storage.plane_chain)\r
812                                 e.plane_chain = plane_storage.plane_chain;\r
813                         e.sflags = sfl;\r
814                         e.lflags0 = tfl0;\r
815                         e.lflags1 = tfl1;\r
816                         e.lflags2 = tfl2;\r
817                         e.lflags3 = tfl3;\r
818                         e.lflags4 = tfl4;\r
819                         e.lflags5 = tfl5;\r
820                         e.lflags6 = tfl6;\r
821                         e.lflags7 = tfl7;\r
822                         e.lflags8 = tfl8;\r
823                         e.lflags9 = tfl9;\r
824                         e.lflags10 = tfl10;\r
825                         e.lflags11 = tfl11;\r
826                         e.lflags12 = tfl12;\r
827                         e.lflags13 = tfl13;\r
828                         e.lflags14 = tfl14;\r
829                         e.lflags15 = tfl15;\r
830                         e.lflags16 = tfl16;\r
831                         e.lflags17 = tfl17;\r
832                         e.lflags18 = tfl18;\r
833                         e.lflags19 = tfl19;\r
834                         if (rl0 > -1)\r
835                         {\r
836                                 newmis = spawn();\r
837                                 newmis.classname = "remotelinker";\r
838                                 newmis.delay = rl0;\r
839                                 e.link0 = newmis;\r
840                         }\r
841                         if (rl1 > -1)\r
842                         {\r
843                                 newmis = spawn();\r
844                                 newmis.classname = "remotelinker";\r
845                                 newmis.delay = rl1;\r
846                                 e.link1 = newmis;\r
847                         }\r
848                         if (rl2 > -1)\r
849                         {\r
850                                 newmis = spawn();\r
851                                 newmis.classname = "remotelinker";\r
852                                 newmis.delay = rl2;\r
853                                 e.link2 = newmis;\r
854                         }\r
855                         if (rl3 > -1)\r
856                         {\r
857                                 newmis = spawn();\r
858                                 newmis.classname = "remotelinker";\r
859                                 newmis.delay = rl3;\r
860                                 e.link3 = newmis;\r
861                         }\r
862                         if (rl4 > -1)\r
863                         {\r
864                                 newmis = spawn();\r
865                                 newmis.classname = "remotelinker";\r
866                                 newmis.delay = rl4;\r
867                                 e.link4 = newmis;\r
868                         }\r
869                         if (rl5 > -1)\r
870                         {\r
871                                 newmis = spawn();\r
872                                 newmis.classname = "remotelinker";\r
873                                 newmis.delay = rl5;\r
874                                 e.link5 = newmis;\r
875                         }\r
876                         if (rl6 > -1)\r
877                         {\r
878                                 newmis = spawn();\r
879                                 newmis.classname = "remotelinker";\r
880                                 newmis.delay = rl6;\r
881                                 e.link6 = newmis;\r
882                         }\r
883                         if (rl7 > -1)\r
884                         {\r
885                                 newmis = spawn();\r
886                                 newmis.classname = "remotelinker";\r
887                                 newmis.delay = rl7;\r
888                                 e.link7 = newmis;\r
889                         }\r
890                         if (rl8 > -1)\r
891                         {\r
892                                 newmis = spawn();\r
893                                 newmis.classname = "remotelinker";\r
894                                 newmis.delay = rl8;\r
895                                 e.link8 = newmis;\r
896                         }\r
897                         if (rl9 > -1)\r
898                         {\r
899                                 newmis = spawn();\r
900                                 newmis.classname = "remotelinker";\r
901                                 newmis.delay = rl9;\r
902                                 e.link9 = newmis;\r
903                         }\r
904                         if (rl10 > -1)\r
905                         {\r
906                                 newmis = spawn();\r
907                                 newmis.classname = "remotelinker";\r
908                                 newmis.delay = rl10;\r
909                                 e.link10 = newmis;\r
910                         }\r
911                         if (rl11 > -1)\r
912                         {\r
913                                 newmis = spawn();\r
914                                 newmis.classname = "remotelinker";\r
915                                 newmis.delay = rl11;\r
916                                 e.link11 = newmis;\r
917                         }\r
918                         if (rl12 > -1)\r
919                         {\r
920                                 newmis = spawn();\r
921                                 newmis.classname = "remotelinker";\r
922                                 newmis.delay = rl12;\r
923                                 e.link12 = newmis;\r
924                         }\r
925                         if (rl13 > -1)\r
926                         {\r
927                                 newmis = spawn();\r
928                                 newmis.classname = "remotelinker";\r
929                                 newmis.delay = rl13;\r
930                                 e.link13 = newmis;\r
931                         }\r
932                         if (rl14 > -1)\r
933                         {\r
934                                 newmis = spawn();\r
935                                 newmis.classname = "remotelinker";\r
936                                 newmis.delay = rl14;\r
937                                 e.link14 = newmis;\r
938                         }\r
939                         if (rl15 > -1)\r
940                         {\r
941                                 newmis = spawn();\r
942                                 newmis.classname = "remotelinker";\r
943                                 newmis.delay = rl15;\r
944                                 e.link15 = newmis;\r
945                         }\r
946                         if (rl16 > -1)\r
947                         {\r
948                                 newmis = spawn();\r
949                                 newmis.classname = "remotelinker";\r
950                                 newmis.delay = rl16;\r
951                                 e.link16 = newmis;\r
952                         }\r
953                         if (rl17 > -1)\r
954                         {\r
955                                 newmis = spawn();\r
956                                 newmis.classname = "remotelinker";\r
957                                 newmis.delay = rl17;\r
958                                 e.link17 = newmis;\r
959                         }\r
960                         if (rl18 > -1)\r
961                         {\r
962                                 newmis = spawn();\r
963                                 newmis.classname = "remotelinker";\r
964                                 newmis.delay = rl18;\r
965                                 e.link18 = newmis;\r
966                         }\r
967                         if (rl19 > -1)\r
968                         {\r
969                                 newmis = spawn();\r
970                                 newmis.classname = "remotelinker";\r
971                                 newmis.delay = rl19;\r
972                                 e.link19 = newmis;\r
973                         }\r
974                 }\r
975                 fclose(file);\r
976         }\r
977         else\r
978                 dprint("No navnode file found\n");\r
979         remove(plane_storage);\r
980         plane_storage = world;\r
981 };