]> icculus.org git repositories - divverent/nexuiz.git/blob - attic/TeamNexuiz/game/gamec/bot_ed.c
now menu qc respects g_campaign_name
[divverent/nexuiz.git] / attic / TeamNexuiz / game / gamec / bot_ed.c
1 /***********************************************\r
2 *                                              *\r
3 *          FrikBot Waypoint Editor             *\r
4 *   "The 'wtf is this doing in my mod' code"   *\r
5 *                                              *\r
6 ***********************************************/\r
7 \r
8 /*\r
9 \r
10 This program is in the Public Domain. My crack legal\r
11 team would like to add:\r
12 \r
13 RYAN "FRIKAC" SMITH IS PROVIDING THIS SOFTWARE "AS IS"\r
14 AND MAKES NO WARRANTY, EXPRESS OR IMPLIED, AS TO THE\r
15 ACCURACY, CAPABILITY, EFFICIENCY, MERCHANTABILITY, OR\r
16 FUNCTIONING OF THIS SOFTWARE AND/OR DOCUMENTATION. IN\r
17 NO EVENT WILL RYAN "FRIKAC" SMITH BE LIABLE FOR ANY\r
18 GENERAL, CONSEQUENTIAL, INDIRECT, INCIDENTAL,\r
19 EXEMPLARY, OR SPECIAL DAMAGES, EVEN IF RYAN "FRIKAC"\r
20 SMITH HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
21 DAMAGES, IRRESPECTIVE OF THE CAUSE OF SUCH DAMAGES.\r
22 \r
23 You accept this software on the condition that you\r
24 indemnify and hold harmless Ryan "FrikaC" Smith from\r
25 any and all liability or damages to third parties,\r
26 including attorney fees, court costs, and other\r
27 related costs and expenses, arising out of your use\r
28 of this software irrespective of the cause of said\r
29 liability.\r
30 \r
31 The export from the United States or the subsequent\r
32 reexport of this software is subject to compliance\r
33 with United States export control and munitions\r
34 control restrictions. You agree that in the event you\r
35 seek to export this software, you assume full\r
36 responsibility for obtaining all necessary export\r
37 licenses and approvals and for assuring compliance\r
38 with applicable reexport restrictions.\r
39 \r
40 Any reproduction of this software must contain\r
41 this notice in its entirety.\r
42 \r
43 */\r
44 \r
45 float saved1, saved2, saved3, scratch1, scratch2, scratch3, scratch4;\r
46 float bytecounter, filecount;\r
47 \r
48 float MENU_MAIN                 = 1;\r
49 float MENU_WAYPOINTS    = 2;\r
50 float MENU_LINKS                = 3;\r
51 float MENU_FLAGS                = 4;\r
52 float MENU_FLAGS2               = 5;\r
53 float MENU_BOTS                 = 6;\r
54 float MENU_WAYLIST      = 7;\r
55 // 8 = link way\r
56 // 9 = telelink way\r
57 // 10 = delete link\r
58 // 11 = create link X2\r
59 // 12 = delete link x2\r
60 // 13 = confirmation of delete all\r
61 // 14 = Teleport to way\r
62 // 15 = confirmation of delete point\r
63 \r
64 void() BSPDumpWaypoints;\r
65 void() QCDumpWaypoints;\r
66 void() DumpWaypoints;\r
67 /*\r
68 // source for the menu strings...\r
69 \r
70 -- Main Menu --\n\r
71 [1] >>Waypoint Management\n\r
72 [2] >>Link Management    \n\r
73 [3] >>AI Flag Management \n\r
74 [4] >>Bot Management     \n\r
75 [5] >>Waylist Management \n\r
76 [6] [#] Noclip           \n\r
77 [7] [#] Godmode          \n\r
78 [8] [#] Hold Select      \n\r
79 [9] Teleport to Way #    \n\r
80 [0] Close Menu           \n\r
81 \r
82 // missing from main is show way info\r
83 // iffy on the teleport to way thing being on main...seems like either a bot or way list thing\r
84 \r
85 -- Waypoint Management --\n\r
86 [1] Move Waypoint        \n\r
87 [2] Delete Waypoint      \n\r
88 [3] Make Waypoint        \n\r
89 [4] Make Way + Link      \n\r
90 [5] Make Way + Link X2   \n\r
91 [6] Make Way + Telelink  \n\r
92 [7] Show waypoint info   \n\r
93 [8] >>Link Management    \n\r
94 [9] >>AI Flag Management \n\r
95 [0] >>Main Menu          \n\r
96 \r
97 -- Link Management --\n\r
98 [1] Unlink Waypoint      \n\r
99 [2] Create Link          \n\r
100 [3] Create Telelink      \n\r
101 [4] Delete Link          \n\r
102 [5] Create Link X2       \n\r
103 [6] Delete Link X2       \n\r
104 [7] >Make Waypoint       \n\r
105 [8] >>Waypoint Management\n\r
106 [9] >>AI Flag Management \n\r
107 [0] >>Main Menu          \n\r
108 \r
109 // Ai flags...ugh\r
110 \r
111 -- AI Flag Management --\n\r
112 [1] [#] Door Flag        \n\r
113 [2] [#] Precision        \n\r
114 [3] [#] Surface for air  \n\r
115 [4] [#] Blind mode       \n\r
116 [5] [#] Jump             \n\r
117 [6] [#] Dark             \n\r
118 [7] [#] Super Jump       \n\r
119 \n\r
120 [9] >>AI Flags page 2    \n\r
121 [0] >>Main Menu          \n\r
122 \r
123 -- AI Flags pg. 2--\n\r
124 [1] [#] Difficult        \n\r
125 [2] [#] Wait for plat    \n\r
126 [3] [#] Ride train       \n\r
127 [4] [#] Door flag no open\n\r
128 [5] [#] Ambush           \n\r
129 [6] [#] Snipe            \n\r
130 [7] [#] Trace Test       \n\r
131 \n\r
132 [9] >>AI Flag Management \n\r
133 [0] >>Main Menu          \n\r
134 \r
135 -- Bot Management --\n\r
136 [1] Add a Test Bot       \n\r
137 [2] Order Test Bot here  \n\r
138 [3] Remove Test Bot      \n\r
139 [4] Stop Test Bot        \n\r
140 [5] Teleport Bot here    \n\r
141 [6] Teleport to Way #    \n\r
142 \n\r
143 \n\r
144 \n\r
145 [0] >>Main Menu          \n\r
146 \r
147 -- Waylist Management --\n\r
148 [1] Delete ALL Waypoints \n\r
149 [2] Dump Waypoints       \n\r
150 [3] Check For Errors     \n\r
151 [4] Save Waypoints       \n\r
152 [5] [#] Dynamic Mode     \n\r
153 [6] [#] Dynamic Link     \n\r
154 [7] [#] WAY output       \n\r
155 [8] [#] QC output        \n\r
156 [9] [#] BSP ents output  \n\r
157 [0] Main Menu            \n\r
158 \r
159 */\r
160 \r
161 void() bot_menu_display =\r
162 {\r
163 // build options\r
164         local string s1, s2, s3, s4, s5, s6, s7, h;\r
165         local entity t;\r
166 \r
167 // check impulses\r
168         if (self.impulse > 0 && self.impulse < 11 && self.b_menu)\r
169         {\r
170                 if (self.b_menu == MENU_MAIN)\r
171                 {\r
172                         if (self.impulse == 1)\r
173                         {\r
174                                 self.b_menu = MENU_WAYPOINTS;\r
175                                 self.b_menu_time = time;\r
176                         }\r
177                         else if (self.impulse == 2)\r
178                         {\r
179                                 self.b_menu = MENU_LINKS;\r
180                                 self.b_menu_time = time;\r
181                         }\r
182                         else if (self.impulse == 3)\r
183                         {\r
184                                 self.b_menu = MENU_FLAGS;\r
185                                 self.b_menu_time = time;\r
186                         }\r
187                         else if (self.impulse == 4)\r
188                         {\r
189                                 self.b_menu = MENU_BOTS;\r
190                                 self.b_menu_time = time;\r
191                         }\r
192                         else if (self.impulse == 5)\r
193                         {\r
194                                 self.b_menu = MENU_WAYLIST;\r
195                                 self.b_menu_time = time;\r
196                         }\r
197                         else if (self.impulse == 6)\r
198                         {\r
199                                 if (self.movetype == MOVETYPE_NOCLIP)\r
200                                         self.movetype = MOVETYPE_WALK;\r
201                                 else\r
202                                         self.movetype = MOVETYPE_NOCLIP;\r
203                                 self.b_menu_time = time;\r
204 \r
205                         }\r
206                         else if (self.impulse == 7)\r
207                         {\r
208                                 if (self.flags & FL_GODMODE)\r
209                                         self.flags = self.flags - FL_GODMODE;\r
210                                 else\r
211                                         self.flags = self.flags | FL_GODMODE;\r
212                                 self.b_menu_time = time;\r
213 \r
214                         }\r
215                         else if (self.impulse == 8)\r
216                         {\r
217                                 if (self.b_aiflags & AI_HOLD_SELECT)\r
218                                         self.b_aiflags = self.b_aiflags - AI_HOLD_SELECT;\r
219                                 else\r
220                                         self.b_aiflags = self.b_aiflags | AI_HOLD_SELECT;\r
221                                 self.b_menu_time = time;\r
222                         }\r
223                         else if (self.impulse == 9)\r
224                         {\r
225                                 self.b_menu = 14;\r
226                                 self.b_menu_time = time;\r
227                         }\r
228                         else if (self.impulse == 10)\r
229                                 bot_way_edit();\r
230                 }\r
231                 else if (self.b_menu == MENU_WAYPOINTS)\r
232                 {\r
233                         if (self.impulse == 1)\r
234                         {\r
235                                 if (self.current_way)\r
236                                         setorigin(self.current_way, self.origin + self.view_ofs);\r
237                         }\r
238                         else if (self.impulse == 2)\r
239                         {\r
240                                 if (self.current_way)\r
241                                 {\r
242                                         self.b_menu = 15;\r
243                                         self.b_menu_time = time;\r
244                                         self.last_way = self.current_way;\r
245                                 }\r
246                         }\r
247                         else if (self.impulse == 3)\r
248                         {\r
249                                 make_waypoint(self.origin + self.view_ofs);\r
250                         }\r
251                         else if (self.impulse == 4)\r
252                         {\r
253                                 t = make_waypoint(self.origin + self.view_ofs);\r
254                                 if (!LinkWays(self.current_way, t))\r
255                                         sprint(self, "Unable to link them\n");\r
256                         }\r
257                         else if (self.impulse == 5)\r
258                         {\r
259                                 t = make_waypoint(self.origin + self.view_ofs);\r
260                                 if (!LinkWays(self.current_way, t))\r
261                                         sprint(self, "Unable to link old to new\n");\r
262                                 LinkWays(t, self.current_way);\r
263                         }\r
264                         else if (self.impulse == 6)\r
265                         {\r
266                                 t = make_waypoint(self.origin + self.view_ofs);\r
267                                 if (!TeleLinkWays(self.current_way, t))\r
268                                         sprint(self, "Unable to link them\n");\r
269                         }\r
270                         else if (self.impulse == 7)\r
271                         {\r
272                                 if (self.current_way)\r
273                                 {\r
274                                         sprint(self, "\nwaypoint info for waypoint #");\r
275                                         h = ftos(self.current_way.count);\r
276                                         sprint(self, h);\r
277                                         sprint(self, "\nAI Flag value: ");\r
278                                         h = ftos(self.current_way.b_aiflags);\r
279                                         sprint(self, h);\r
280 \r
281                                         if (self.current_way.target1)\r
282                                         {\r
283                                                 h = ftos(self.current_way.target1.count);\r
284                                                 if (self.current_way.b_aiflags & AI_TELELINK_1)\r
285                                                         sprint(self, "\nTelelink1 to:");\r
286                                                 else\r
287                                                         sprint(self, "\nLink1 to:");\r
288                                                 sprint(self, h);\r
289                                         }\r
290                                         if (self.current_way.target2)\r
291                                         {\r
292                                                 h = ftos(self.current_way.target2.count);\r
293                                                 if (self.current_way.b_aiflags & AI_TELELINK_2)\r
294                                                         sprint(self, "\nTelelink2 to:");\r
295                                                 else\r
296                                                         sprint(self, "\nLink2 to:");\r
297                                                 sprint(self, h);\r
298                                         }\r
299                                         if (self.current_way.target3)\r
300                                         {\r
301                                                 h = ftos(self.current_way.target3.count);\r
302                                                 if (self.current_way.b_aiflags & AI_TELELINK_3)\r
303                                                         sprint(self, "\nTelelink3 to:");\r
304                                                 else\r
305                                                         sprint(self, "\nLink3 to:");\r
306                                                 sprint(self, h);\r
307                                         }\r
308                                         if (self.current_way.target4)\r
309                                         {\r
310                                                 h = ftos(self.current_way.target4.count);\r
311                                                 if (self.current_way.b_aiflags & AI_TELELINK_4)\r
312                                                         sprint(self, "\nTelelink4 to:");\r
313                                                 else\r
314                                                         sprint(self, "\nLink4 to:");\r
315                                                 sprint(self, h);\r
316                                         }\r
317                                         sprint(self, "\n\n");\r
318                                 }\r
319 \r
320                         }\r
321                         if (self.impulse == 8)\r
322                         {\r
323                                 self.b_menu = MENU_LINKS;\r
324                                 self.b_menu_time = time;\r
325                         }\r
326                         else if (self.impulse == 9)\r
327                         {\r
328                                 self.b_menu = MENU_FLAGS;\r
329                                 self.b_menu_time = time;\r
330                         }\r
331                         else if (self.impulse == 10)\r
332                         {\r
333                                 self.b_menu = MENU_MAIN;\r
334                                 self.b_menu_time = time;\r
335                         }\r
336                 }\r
337                 else if (self.b_menu == MENU_LINKS)\r
338                 {\r
339                         if (self.impulse == 1)\r
340                         {\r
341                                 if (self.current_way)\r
342                                         self.current_way.target1 = self.current_way.target2 = self.current_way.target3 = self.current_way.target4 = world;\r
343                         }\r
344                         else if (self.impulse == 2)\r
345                         {\r
346                                 self.b_menu = 8;\r
347                                 self.b_menu_time = time;\r
348                                 self.last_way = self.current_way;\r
349                         }\r
350                         else if (self.impulse == 3)\r
351                         {\r
352                                 self.b_menu = 9;\r
353                                 self.b_menu_time = time;\r
354                                 self.last_way = self.current_way;\r
355                         }\r
356                         else if (self.impulse == 4)\r
357                         {\r
358                                 self.b_menu = 10;\r
359                                 self.b_menu_time = time;\r
360                                 self.last_way = self.current_way;\r
361                         }\r
362                         else if (self.impulse == 5)\r
363                         {\r
364                                 self.b_menu = 11;\r
365                                 self.b_menu_time = time;\r
366                                 self.last_way = self.current_way;\r
367                         }\r
368                         else if (self.impulse == 6)\r
369                         {\r
370                                 self.b_menu = 12;\r
371                                 self.b_menu_time = time;\r
372                                 self.last_way = self.current_way;\r
373                         }\r
374                         else if (self.impulse == 7)\r
375                                 make_waypoint(self.origin + self.view_ofs);\r
376                         else if (self.impulse == 8)\r
377                         {\r
378                                 self.b_menu = MENU_WAYPOINTS;\r
379                                 self.b_menu_time = time;\r
380                         }\r
381                         else if (self.impulse == 9)\r
382                         {\r
383                                 self.b_menu = MENU_FLAGS;\r
384                                 self.b_menu_time = time;\r
385                         }\r
386                         else if (self.impulse == 10)\r
387                         {\r
388                                 self.b_menu = MENU_MAIN;\r
389                                 self.b_menu_time = time;\r
390                         }\r
391                 }\r
392                 else if (self.b_menu == MENU_FLAGS)\r
393                 {\r
394 \r
395                         if (self.current_way)\r
396                         {\r
397                                 if (self.impulse == 1)\r
398                                 {\r
399                                         if (self.current_way.b_aiflags & AI_DOORFLAG)\r
400                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_DOORFLAG);\r
401                                         else\r
402                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_DOORFLAG;\r
403 \r
404                                         self.b_menu_time = time;\r
405                                 }\r
406                                 else if (self.impulse == 2)\r
407                                 {\r
408                                         if (self.current_way.b_aiflags & AI_PRECISION)\r
409                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_PRECISION);\r
410                                         else\r
411                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_PRECISION;\r
412                                         self.b_menu_time = time;\r
413                                 }\r
414                                 else if (self.impulse == 3)\r
415                                 {\r
416                                         if (self.current_way.b_aiflags & AI_SURFACE)\r
417                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_SURFACE);\r
418                                         else\r
419                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_SURFACE;\r
420                                         self.b_menu_time = time;\r
421                                 }\r
422                                 else if (self.impulse == 4)\r
423                                 {\r
424                                         if (self.current_way.b_aiflags & AI_BLIND)\r
425                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_BLIND);\r
426                                         else\r
427                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_BLIND;\r
428                                         self.b_menu_time = time;\r
429                                 }\r
430                                 else if (self.impulse == 5)\r
431                                 {\r
432                                         if (self.current_way.b_aiflags & AI_JUMP)\r
433                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_JUMP);\r
434                                         else\r
435                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_JUMP;\r
436                                         self.b_menu_time = time;\r
437                                 }\r
438                                 else if (self.impulse == 6)\r
439                                 {\r
440                                         if (self.current_way.b_aiflags & AI_DIRECTIONAL)\r
441                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_DIRECTIONAL);\r
442                                         else\r
443                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_DIRECTIONAL;\r
444                                         self.b_menu_time = time;\r
445                                 }\r
446                                 else if (self.impulse == 7)\r
447                                 {\r
448                                         if (self.current_way.b_aiflags & AI_SUPER_JUMP)\r
449                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_SUPER_JUMP);\r
450                                         else\r
451                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_SUPER_JUMP;\r
452                                         self.b_menu_time = time;\r
453                                 }\r
454                                 else if (self.impulse == 8)\r
455                                 {\r
456                                         if (self.current_way.b_aiflags & AI_CARELESS)\r
457                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_CARELESS);\r
458                                         else\r
459                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_CARELESS;\r
460                                         self.b_menu_time = time;\r
461                                 }\r
462                         }\r
463                         if (self.impulse == 9)\r
464                         {\r
465                                 self.b_menu = MENU_FLAGS2;\r
466                                 self.b_menu_time = time;\r
467                         }\r
468                         else if (self.impulse == 10)\r
469                         {\r
470                                 self.b_menu = MENU_MAIN;\r
471                                 self.b_menu_time = time;\r
472                         }\r
473                 }\r
474                 else if (self.b_menu == MENU_FLAGS2)\r
475                 {\r
476 \r
477                         if (self.current_way)\r
478                         {\r
479                                 if (self.impulse == 1)\r
480                                 {\r
481                                         if (self.current_way.b_aiflags & AI_DIFFICULT)\r
482                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_DIFFICULT);\r
483                                         else\r
484                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_DIFFICULT;                                                         self.b_menu_time = time;\r
485                                 }\r
486                                 else if (self.impulse == 2)\r
487                                 {\r
488                                         if (self.current_way.b_aiflags & AI_PLAT_BOTTOM)\r
489                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_PLAT_BOTTOM);\r
490                                         else\r
491                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_PLAT_BOTTOM;\r
492                                         self.b_menu_time = time;\r
493                                 }\r
494                                 else if (self.impulse == 3)\r
495                                 {\r
496                                         if (self.current_way.b_aiflags & AI_RIDE_TRAIN)\r
497                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_RIDE_TRAIN);\r
498                                         else\r
499                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_RIDE_TRAIN;\r
500                                         self.b_menu_time = time;\r
501                                 }\r
502                                 else if (self.impulse == 4)\r
503                                 {\r
504                                         if (self.current_way.b_aiflags & AI_DOOR_NO_OPEN)\r
505                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_DOOR_NO_OPEN);\r
506                                         else\r
507                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_DOOR_NO_OPEN;\r
508                                         self.b_menu_time = time;\r
509                                 }\r
510                                 else if (self.impulse == 5)\r
511                                 {\r
512                                         if (self.current_way.b_aiflags & AI_AMBUSH)\r
513                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_AMBUSH);\r
514                                         else\r
515                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_AMBUSH;\r
516                                         self.b_menu_time = time;\r
517                                 }\r
518                                 else if (self.impulse == 6)\r
519                                 {\r
520                                         if (self.current_way.b_aiflags & AI_SNIPER)\r
521                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_SNIPER);\r
522                                         else\r
523                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_SNIPER;\r
524                                         self.b_menu_time = time;\r
525                                 }\r
526                                 else if (self.impulse == 7)\r
527                                 {\r
528                                         if (self.current_way.b_aiflags & AI_TRACE_TEST)\r
529                                                 self.current_way.b_aiflags = self.current_way.b_aiflags - (self.current_way.b_aiflags & AI_TRACE_TEST);\r
530                                         else\r
531                                                 self.current_way.b_aiflags = self.current_way.b_aiflags | AI_TRACE_TEST;\r
532                                         self.b_menu_time = time;\r
533                                 }\r
534 \r
535                         }\r
536                         if (self.impulse == 9)\r
537                         {\r
538                                 self.b_menu = MENU_FLAGS;\r
539                                 self.b_menu_time = time;\r
540                         }\r
541                         else if (self.impulse == 10)\r
542                         {\r
543                                 self.b_menu = MENU_MAIN;\r
544                                 self.b_menu_time = time;\r
545                         }\r
546                 }\r
547 \r
548                 else if (self.b_menu == MENU_BOTS)\r
549                 {\r
550                         if (self.impulse == 1)\r
551                         {\r
552                                 self.impulse = 100;\r
553                                 return;\r
554                         }\r
555                         else if (self.impulse == 2)\r
556                         {\r
557                                 b_temp3 = self;\r
558                                 self = player_head;\r
559                                 while(self)\r
560                                 {\r
561                                         if (!self.ishuman)\r
562                                         {\r
563                                                 target_add(b_temp3);\r
564                                                 bot_get_path(b_temp3, TRUE);\r
565                                                 self = world;\r
566                                         }\r
567                                         else\r
568                                                 self = self._next;\r
569                                 }\r
570                                 self = b_temp3;\r
571                         }\r
572                         else if (self.impulse == 3)\r
573                         {\r
574                                 self.impulse = 102;\r
575                                 return;\r
576                         }\r
577                         else if (self.impulse == 4)\r
578                         {\r
579                                 b_temp1 = self;\r
580                                 self = player_head;\r
581                                 while(self)\r
582                                 {\r
583                                         if (!self.ishuman)\r
584                                         {\r
585                                                 self.target1 = self.target2 = self.target3 = self.target4 = world;\r
586                                                 route_table = world;\r
587                                         }\r
588                                         self = self._next;\r
589                                 }\r
590                                 self = b_temp1;\r
591                         }\r
592                         else if (self.impulse == 5)\r
593                         {\r
594                                 if (self.current_way)\r
595                                 {\r
596                                         b_temp1 = self;\r
597                                         self = player_head;\r
598                                         while(self)\r
599                                         {\r
600                                                 if (!self.ishuman)\r
601                                                 {\r
602                                                         setorigin(self, b_temp1.current_way.origin);\r
603                                                 }\r
604                                                 self = self._next;\r
605                                         }\r
606                                         self = b_temp1;\r
607                                 }\r
608                                 else\r
609                                         sprint(self, "select a waypoint first\n");\r
610                         }\r
611                         else if (self.impulse == 6)\r
612                         {\r
613                                 self.b_menu = 14;\r
614                                 self.b_menu_time = time;\r
615                         }\r
616                         else if (self.impulse == 10)\r
617                         {\r
618                                 self.b_menu = MENU_MAIN;\r
619                                 self.b_menu_time = time;\r
620                         }\r
621                 }\r
622                 else if (self.b_menu == MENU_WAYLIST)\r
623                 {\r
624                         if (self.impulse == 1)\r
625                         {\r
626                                 self.b_menu = 13;\r
627                                 self.b_menu_time = time;\r
628                         }\r
629                         else if (self.impulse == 2)\r
630                         {\r
631                                 if (dump_mode == 0)\r
632                                         DumpWaypoints();\r
633                                 else if (dump_mode == 1)\r
634                                         QCDumpWaypoints();\r
635                                 else if (dump_mode == 2)\r
636                                         BSPDumpWaypoints();\r
637                         }\r
638                         else if (self.impulse == 3)\r
639                         {\r
640                                 t = way_head;\r
641                                 while(t)\r
642                                 {\r
643                                         if ((t.target1 == world) && (t.target2 == world) && (t.target3 == world) && (t.target4 == world))\r
644                                         {\r
645                                                 sprint(self, "Waypoint #");\r
646                                                 h = ftos(t.count);\r
647                                                 sprint(self, h);\r
648                                                 sprint(self, " has no outbound links\n");\r
649                                         }\r
650                                         if ((t.target1 == t) || (t.target2 == t) || (t.target3 == t) || (t.target4 == t))\r
651                                         {\r
652                                                 sprint(self, "Waypoint #");\r
653                                                 h = ftos(t.count);\r
654                                                 sprint(self, h);\r
655                                                 sprint(self, " links to itself (??)\n");\r
656                                         }\r
657                                         t = t._next;\r
658                                 }\r
659                                 sprint(self, "Error check complete\n");\r
660                         }\r
661                         else if (self.impulse == 4)\r
662                         {\r
663                                 sprint(self, "not in this version (FBX 0.10.0)\n");\r
664                         }\r
665                         else if (self.impulse == 5)\r
666                         {\r
667                                 if (waypoint_mode == WM_EDITOR_DYNAMIC)\r
668                                         waypoint_mode = WM_EDITOR;\r
669                                 else\r
670                                         waypoint_mode = WM_EDITOR_DYNAMIC;\r
671                                 self.b_menu_time = time;\r
672 \r
673                         }\r
674                         else if (self.impulse == 6)\r
675                         {\r
676                                 if (waypoint_mode == WM_EDITOR_DYNLINK)\r
677                                         waypoint_mode = WM_EDITOR;\r
678                                 else\r
679                                         waypoint_mode = WM_EDITOR_DYNLINK;\r
680                                 self.b_menu_time = time;\r
681                         }\r
682                         else if (self.impulse == 7)\r
683                         {\r
684                                 dump_mode = 0;\r
685                                 self.b_menu_time = time;\r
686                         }\r
687                         else if (self.impulse == 8)\r
688                         {\r
689                                 dump_mode = 1;\r
690                                 self.b_menu_time = time;\r
691                         }\r
692                         else if (self.impulse == 9)\r
693                         {\r
694                                 dump_mode = 2;\r
695                                 self.b_menu_time = time;\r
696                         }\r
697                         else if (self.impulse == 10)\r
698                         {\r
699                                 self.b_menu = MENU_MAIN;\r
700                                 self.b_menu_time = time;\r
701                         }\r
702                 }\r
703                 else if (self.b_menu == 8)\r
704                 {\r
705                         if (self.impulse == 1)\r
706                         {\r
707                                 if (self.current_way)\r
708                                 {\r
709                                         if (!LinkWays(self.last_way, self.current_way))\r
710                                                 sprint(self, "Unable to link them\n");\r
711                                         self.b_menu = MENU_LINKS;\r
712                                         self.b_menu_time = time;\r
713                                 }\r
714                         }\r
715                         else if (self.impulse == 2)\r
716                         {\r
717                                 self.b_menu = MENU_LINKS;\r
718                                 self.b_menu_time = time;\r
719                         }\r
720                 }\r
721                 else if (self.b_menu == 9)\r
722                 {\r
723                         if (self.impulse == 1)\r
724                         {\r
725                                 if (self.current_way)\r
726                                 {\r
727                                         if (!TeleLinkWays(self.last_way, self.current_way))\r
728                                                 sprint(self, "Unable to link them\n");\r
729                                         self.b_menu = MENU_LINKS;\r
730                                         self.b_menu_time = time;\r
731                                 }\r
732                         }\r
733                         else if (self.impulse == 2)\r
734                         {\r
735                                 self.b_menu = MENU_LINKS;\r
736                                 self.b_menu_time = time;\r
737                         }\r
738                 }\r
739                 else if (self.b_menu == 10)\r
740                 {\r
741                         if (self.impulse == 1)\r
742                         {\r
743                                 if (self.current_way)\r
744                                 {\r
745                                         UnlinkWays(self.last_way, self.current_way);\r
746                                         self.b_menu = MENU_LINKS;\r
747                                         self.b_menu_time = time;\r
748                                 }\r
749                         }\r
750                         else if (self.impulse == 2)\r
751                         {\r
752                                 self.b_menu = MENU_LINKS;\r
753                                 self.b_menu_time = time;\r
754                         }\r
755                 }\r
756                 else if (self.b_menu == 11)\r
757                 {\r
758                         if (self.impulse == 1)\r
759                         {\r
760                                 if (self.current_way)\r
761                                 {\r
762                                         if (!LinkWays(self.last_way, self.current_way))\r
763                                                 sprint(self, "Unable to link 1 to 2\n");\r
764                                         if (!LinkWays(self.current_way, self.last_way))\r
765                                                 sprint(self, "Unable to link 2 to 1\n");\r
766                                         self.b_menu = MENU_LINKS;\r
767                                         self.b_menu_time = time;\r
768                                 }\r
769                         }\r
770                         else if (self.impulse == 2)\r
771                         {\r
772                                 self.b_menu = MENU_LINKS;\r
773                                 self.b_menu_time = time;\r
774                         }\r
775                 }\r
776                 else if (self.b_menu == 12)\r
777                 {\r
778                         if (self.impulse == 1)\r
779                         {\r
780                                 if (self.current_way)\r
781                                 {\r
782                                         UnlinkWays(self.last_way, self.current_way);\r
783                                         UnlinkWays(self.current_way, self.last_way);\r
784                                         self.b_menu = MENU_LINKS;\r
785                                         self.b_menu_time = time;\r
786                                 }\r
787                         }\r
788                         else if (self.impulse == 2)\r
789                         {\r
790                                 self.b_menu = MENU_LINKS;\r
791                                 self.b_menu_time = time;\r
792                         }\r
793                 }\r
794                 else if (self.b_menu == 13)\r
795                 {\r
796                         if (self.impulse == 1)\r
797                         {\r
798                                 ClearAllWays();\r
799                                 self.b_menu = MENU_WAYLIST;\r
800                                 self.b_menu_time = time;\r
801                         }\r
802                         else if (self.impulse == 2)\r
803                         {\r
804                                 self.b_menu = MENU_WAYLIST;\r
805                                 self.b_menu_time = time;\r
806                         }\r
807                 }\r
808                 else if (self.b_menu == 14)\r
809                 {\r
810                         if (self.impulse == 10)\r
811                                 self.impulse = 0;\r
812                         self.b_menu_value = self.b_menu_value * 10 + self.impulse;\r
813                         self.b_menu_time = 0;\r
814                 }\r
815                 else if (self.b_menu == 15)\r
816                 {\r
817                         if (self.impulse == 1)\r
818                         {\r
819                                 delete_waypoint(self.last_way);\r
820                                 self.b_menu = MENU_WAYPOINTS;\r
821                                 self.b_menu_time = time;\r
822                         }\r
823                         else if (self.impulse == 2)\r
824                         {\r
825                                 self.b_menu = MENU_WAYPOINTS;\r
826                                 self.b_menu_time = time;\r
827                         }\r
828                 }\r
829                 self.impulse = 0;\r
830 \r
831         }\r
832         if (self.b_menu_time < time)\r
833         {\r
834                 if (self.b_menu == MENU_MAIN)\r
835                 {\r
836                         s1 = "-- Main Menu --\n[1] >>Waypoint Management\n[2] >>Link Management    \n[3] >>AI Flag Management \n[4] >>Bot Management     \n[5] >>Waylist Management \n";\r
837                         if (self.movetype == MOVETYPE_NOCLIP)\r
838                                 s2 = "[6] [#] Noclip           \n";\r
839                         else\r
840                                 s2 = "[6] [ ] Noclip           \n";\r
841 \r
842                         if (self.flags & FL_GODMODE)\r
843                                 s3 = "[7] [#] Godmode          \n";\r
844                         else\r
845                                 s3 = "[7] [ ] Godmode          \n";\r
846                         if (self.b_aiflags & AI_HOLD_SELECT)\r
847                                 s4 = "[8] [#] Hold Select      \n";\r
848                         else\r
849                                 s4 = "[8] [ ] Hold Select      \n";\r
850                         s5 = "[9] Teleport to Way #    \n[0] Close Menu           \n";\r
851                 }\r
852                 else if (self.b_menu == MENU_WAYPOINTS)\r
853                 {\r
854                         s1 = "-- Waypoint Management --\n[1] Move Waypoint        \n[2] Delete Waypoint      \n[3] Make Waypoint        \n[4] Make Way + Link      \n[5] Make Way + Link X2   \n[6] Make Way + Telelink  \n[7] Show waypoint info   \n[8] >>Link Management    \n[9] >>AI Flag Management \n[0] >>Main Menu          \n";\r
855                 }\r
856                 else if (self.b_menu == MENU_LINKS)\r
857                 {\r
858                         s1 = "-- Link Management --\n[1] Unlink Waypoint      \n[2] Create Link          \n[3] Create Telelink      \n[4] Delete Link          \n[5] Create Link X2       \n[6] Delete Link X2       \n[7] >Make Waypoint       \n[8] >>Waypoint Management\n[9] >>AI Flag Management \n[0] >>Main Menu          \n";\r
859                 }\r
860                 else if (self.b_menu == MENU_FLAGS)\r
861                 {\r
862                         if (self.current_way.b_aiflags & AI_DOORFLAG)\r
863                                 s1 = "-- AI Flag Management --\n[1] [#] Door Flag        \n";\r
864                         else\r
865                                 s1 = "-- AI Flag Management --\n[1] [ ] Door Flag        \n";\r
866 \r
867                         if (self.current_way.b_aiflags & AI_PRECISION)\r
868                                 s2 = "[2] [#] Precision        \n";\r
869                         else\r
870                                 s2 = "[2] [ ] Precision        \n";\r
871 \r
872                         if (self.current_way.b_aiflags & AI_SURFACE)\r
873                                 s3 = "[3] [#] Surface for air  \n";\r
874                         else\r
875                                 s3 = "[3] [ ] Surface for air  \n";\r
876 \r
877                         if (self.current_way.b_aiflags & AI_BLIND)\r
878                                 s4 = "[4] [#] Blind mode       \n";\r
879                         else\r
880                                 s4 = "[4] [ ] Blind mode       \n";\r
881 \r
882                         if (self.current_way.b_aiflags & AI_JUMP)\r
883                                 s5 = "[5] [#] Jump             \n";\r
884                         else\r
885                                 s5 = "[5] [ ] Jump             \n";\r
886 \r
887                         if (self.current_way.b_aiflags & AI_DIRECTIONAL)\r
888                                 s6 = "[6] [#] Directional      \n";\r
889                         else\r
890                                 s6 = "[6] [ ] Directional      \n";\r
891 \r
892                         // Electro - eww\r
893                         if ( (self.current_way.b_aiflags & AI_SUPER_JUMP) && (self.current_way.b_aiflags & AI_CARELESS) )\r
894                                 s7 = "[7] [#] Super Jump       \n[8] [#] Careless         \n[9] >>AI Flags page 2    \n[0] >>Main Menu          \n";\r
895                         else if ( (self.current_way.b_aiflags & AI_SUPER_JUMP) && (!(self.current_way.b_aiflags & AI_CARELESS)) )\r
896                                 s7 = "[7] [#] Super Jump       \n[8] [ ] Careless         \n[9] >>AI Flags page 2    \n[0] >>Main Menu          \n";\r
897                         else if ( (!(self.current_way.b_aiflags & AI_SUPER_JUMP)) && (self.current_way.b_aiflags & AI_CARELESS) )\r
898                                 s7 = "[7] [ ] Super Jump       \n[8] [#] Careless         \n[9] >>AI Flags page 2    \n[0] >>Main Menu          \n";\r
899                         else if ( (!(self.current_way.b_aiflags & AI_SUPER_JUMP)) && (!(self.current_way.b_aiflags & AI_CARELESS)) )\r
900                                 s7 = "[7] [ ] Super Jump       \n[8] [ ] Careless         \n[9] >>AI Flags page 2    \n[0] >>Main Menu          \n";\r
901                 }\r
902                 else if (self.b_menu == MENU_FLAGS2)\r
903                 {\r
904                         if (self.current_way.b_aiflags & AI_DIFFICULT)\r
905                                 s1 = "-- AI Flags pg. 2--\n[1] [#] Difficult        \n";\r
906                         else\r
907                                 s1 = "-- AI Flags pg. 2--\n[1] [ ] Difficult        \n";\r
908 \r
909                         if (self.current_way.b_aiflags & AI_PLAT_BOTTOM)\r
910                                 s2 = "[2] [#] Wait for plat    \n";\r
911                         else\r
912                                 s2 = "[2] [ ] Wait for plat    \n";\r
913 \r
914                         if (self.current_way.b_aiflags & AI_RIDE_TRAIN)\r
915                                 s3 = "[3] [#] Ride train       \n";\r
916                         else\r
917                                 s3 = "[3] [ ] Ride train       \n";\r
918 \r
919                         if (self.current_way.b_aiflags & AI_DOOR_NO_OPEN)\r
920                                 s4 = "[4] [#] Door flag no open\n";\r
921                         else\r
922                                 s4 = "[4] [ ] Door flag no open\n";\r
923 \r
924                         if (self.current_way.b_aiflags & AI_AMBUSH)\r
925                                 s5 = "[5] [#] Ambush           \n";\r
926                         else\r
927                                 s5 = "[5] [ ] Ambush           \n";\r
928 \r
929                         if (self.current_way.b_aiflags & AI_SNIPER)\r
930                                 s6 = "[6] [#] Snipe            \n";\r
931                         else\r
932                                 s6 = "[6] [ ] Snipe            \n";\r
933 \r
934                         if (self.current_way.b_aiflags & AI_TRACE_TEST)\r
935                                 s7 = "[7] [#] Trace Test       \n\n[9] >>AI Flag Management \n[0] >>Main Menu          \n";\r
936                         else\r
937                                 s7 = "[7] [ ] Trace Test       \n\n[9] >>AI Flag Management \n[0] >>Main Menu          \n";\r
938 \r
939                 }\r
940                 else if (self.b_menu == MENU_BOTS)\r
941                 {\r
942                         s1 = "-- Bot Management --\n[1] Add a Test Bot       \n[2] Order Test Bot here  \n[3] Remove Test Bot      \n[4] Stop Test Bot        \n[5] Teleport Bot here    \n[6] Teleport to Way #    \n\n\n\n[0] >>Main Menu          \n";\r
943                 }\r
944                 else if (self.b_menu == MENU_WAYLIST)\r
945                 {\r
946                         s1 = "-- Waylist Management --\n[1] Delete ALL Waypoints \n[2] Dump Waypoints       \n[3] Check For Errors     \n[4] Save Waypoints       \n";\r
947 \r
948                         if (waypoint_mode == WM_EDITOR_DYNAMIC)\r
949                                 s2 = "[5] [#] Dynamic Mode     \n[6] [#] Dynamic Link     \n";\r
950                         else if (waypoint_mode == WM_EDITOR_DYNLINK)\r
951                                 s2 = "[5] [ ] Dynamic Mode     \n[6] [#] Dynamic Link     \n";\r
952                         else\r
953                                 s2 = "[5] [ ] Dynamic Mode     \n[6] [ ] Dynamic Link     \n";\r
954                         if (dump_mode == 0)\r
955                                 s3 = "[7] [#] WAY output       \n[8] [ ] QC output        \n[9] [ ] BSP ents output  \n[0] Main Menu            \n";\r
956                         else if (dump_mode == 1)\r
957                                 s3 = "[7] [ ] WAY output       \n[8] [#] QC output        \n[9] [ ] BSP ents output  \n[0] Main Menu            \n";\r
958                         else if (dump_mode == 2)\r
959                                 s3 = "[7] [ ] WAY output       \n[8] [ ] QC output        \n[9] [#] BSP ents output  \n[0] Main Menu            \n";\r
960 \r
961                 }\r
962                 else if (self.b_menu == 8)\r
963                         s1 = "-- Link Ways --\n\nSelect another way and push 1\nor press 2 to cancel";\r
964                 else if (self.b_menu == 9)\r
965                         s1 = "-- Telelink Ways --\n\nSelect another way and push 1\nor press 2 to cancel";\r
966                 else if (self.b_menu == 10)\r
967                         s1 = "-- Delete Link --\n\nSelect another way and push 1\nor press 2 to cancel";\r
968                 else if (self.b_menu == 11)\r
969                         s1 = "-- Create Link X2 --\n\nSelect another way and push 1\nor press 2 to cancel";\r
970                 else if (self.b_menu == 12)\r
971                         s1 = "-- Delete Link X2 --\n\nSelect another way and push 1\nor press 2 to cancel";\r
972                 else if (self.b_menu == 13)\r
973                         s1 = "-- Delete ALL Ways --\n\nAre you sure? Push 1 to go\nthrough with it, 2 to cancel";\r
974                 else if (self.b_menu == 14)\r
975                 {\r
976                         s1 = "-- Teleport to Way # --\n\nEnter way number and press\nimpulse 104 to warp\n\nWaypoint #";\r
977                         s2 = ftos(self.b_menu_value);\r
978 \r
979                 }\r
980                 else if (self.b_menu == 15)\r
981                         s1 = "-- Delete Waypoint --\n\nAre you sure? Push 1 to go\nthrough with it, 2 to cancel";\r
982                 frik_big_centerprint(self, s1, s2, s3, s4, s5, s6, s7);\r
983                 self.b_menu_time = time + 1.25;\r
984         }\r
985 };\r
986 \r
987 \r
988 // engage menu\r
989 void() bot_way_edit =\r
990 {\r
991         local entity t;\r
992         local float f;\r
993         if (self.b_menu_value)\r
994         {\r
995                 if (self.b_menu == 14)\r
996                 {\r
997                         t = WaypointForNum(self.b_menu_value);\r
998                         if (t)\r
999                                 setorigin(self, t.origin - self.view_ofs);\r
1000                         else\r
1001                                 sprint(self, "No waypoint with that number\n");\r
1002 \r
1003                         self.b_menu = MENU_MAIN;\r
1004                         self.b_menu_time = time;\r
1005                 }\r
1006                 self.b_menu_value = 0;\r
1007                 return;\r
1008         }\r
1009         if (waypoint_mode < WM_EDITOR)\r
1010         {\r
1011                 self.b_menu = MENU_MAIN;\r
1012                 waypoint_mode = WM_EDITOR;\r
1013                 self.b_menu_time = 0;\r
1014                 cvar_set("saved2", "0");\r
1015                 WriteByte(MSG_ALL, 8);\r
1016                 WriteByte(MSG_ALL, 1);\r
1017                 WriteString(MSG_ALL, "MAKE SURE THE FOLLOWING LINE CONTAINS -CONDEBUG BEFORE PROCEEDING\n");\r
1018                 localcmd("cmdline\n");\r
1019                 t = way_head;\r
1020                 while (t)\r
1021                 {\r
1022                         setmodel(t, "progs/s_bubble.spr"); // show the waypoints // file missing from nexuiz\r
1023                         t = t._next;\r
1024                 }\r
1025                 if (self.current_way)\r
1026                         setmodel(self.current_way, "progs/s_light.spr"); // file missing from nexuiz\r
1027         }\r
1028         else\r
1029         {\r
1030                 saved2 = cvar("saved2");\r
1031                 if (saved2 != 0)\r
1032                 {\r
1033                         f = self.b_menu;\r
1034                         self.b_menu = floor(saved2/16);\r
1035                         self.impulse = saved2 & 15;\r
1036                         bot_menu_display();\r
1037                         self.b_menu = f;\r
1038                         cvar_set("saved2", "0");\r
1039                         return;\r
1040                 }\r
1041                 self.b_menu = 0;\r
1042                 waypoint_mode = WM_LOADED;\r
1043                 t = way_head;\r
1044                 while (t)\r
1045                 {\r
1046                         setmodel(t, string_null); // hide the waypoints\r
1047                         t = t._next;\r
1048                 }\r
1049         }\r
1050 };\r
1051 \r
1052 \r
1053 /*\r
1054 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
1055 \r
1056 Waypoint Saving to file.\r
1057 \r
1058 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
1059 */\r
1060 \r
1061 \r
1062 // bytecount is really iffy\r
1063 // since there is no true way to determine the length of an ftos\r
1064 // it uses an approximate of 5\r
1065 // various other things are guesses, but I don't cut it at the absolute\r
1066 // max so it should be okay\r
1067 \r
1068 void() PrintWaypoint =\r
1069 {\r
1070         local entity t;\r
1071         local float needcolon;\r
1072         local string h;\r
1073 \r
1074         if (self.enemy == world)\r
1075                 t = way_head;\r
1076         else\r
1077                 t = self.enemy._next;\r
1078         if (bytecounter >= 8000)\r
1079         {\r
1080                 bprint("exec maps/");\r
1081                 bprint(mapname);\r
1082                 bprint(".wa");\r
1083                 h = ftos(filecount);\r
1084                 bprint(h);\r
1085                 filecount = filecount + 1;\r
1086                 bprint("\n// **** break here **** \n");\r
1087                 bytecounter = 26;\r
1088         }\r
1089         if (t == world)\r
1090         {\r
1091                 remove(self);\r
1092                 fixer = world;\r
1093                 bprint("saved4 3\n// end waypoint dump\n");\r
1094                 bytecounter = bytecounter + 27;\r
1095                 return;\r
1096         }\r
1097         if ((t.origin_x != saved1) || (t.count == 1))\r
1098         {\r
1099                 bprint("saved1 ");\r
1100                 h = ftos(t.origin_x);\r
1101                 bprint(h);\r
1102                 saved1 = t.origin_x;\r
1103                 bytecounter = bytecounter + 12;\r
1104                 needcolon = TRUE;\r
1105         }\r
1106         if ((t.origin_y != saved2) || (t.count == 1))\r
1107         {\r
1108                 if (needcolon)\r
1109                 {\r
1110                         bprint("; ");\r
1111                         bytecounter = bytecounter + 2;\r
1112                 }\r
1113                 else\r
1114                         needcolon = TRUE;\r
1115                 bprint("saved2 ");\r
1116                 h = ftos(t.origin_y);\r
1117                 bprint(h);\r
1118                 bytecounter = bytecounter + 12;\r
1119                 saved2 = t.origin_y;\r
1120         }\r
1121         if ((t.origin_z != saved3) || (t.count == 1))\r
1122         {\r
1123                 if (needcolon)\r
1124                 {\r
1125                         bprint("; ");\r
1126                         bytecounter = bytecounter + 2;\r
1127                 }\r
1128                 else\r
1129                         needcolon = TRUE;\r
1130                 bprint("saved3 ");\r
1131                 h = ftos(t.origin_z);\r
1132                 bprint(h);\r
1133                 bytecounter = bytecounter + 12;\r
1134                 saved3 = t.origin_z;\r
1135         }\r
1136         bytecounter = bytecounter + 1;\r
1137         bprint("\n");\r
1138         needcolon = FALSE;\r
1139         if ((scratch1 != t.target1.count) || t.count == 1)\r
1140         {\r
1141                 needcolon = TRUE;\r
1142                 bprint("scratch1 ");\r
1143                 bytecounter = bytecounter + 14;\r
1144                 h = ftos(t.target1.count);\r
1145                 bprint(h);\r
1146                 scratch1 = t.target1.count;\r
1147         }\r
1148         if ((scratch2 != t.target2.count) || t.count == 1)\r
1149         {\r
1150                 if (needcolon)\r
1151                 {\r
1152                         bprint("; ");\r
1153                         bytecounter = bytecounter + 2;\r
1154                 }\r
1155                 else\r
1156                         needcolon = TRUE;\r
1157                 bprint("scratch2 ");\r
1158                 bytecounter = bytecounter + 14;\r
1159                 h = ftos(t.target2.count);\r
1160                 bprint(h);\r
1161                 scratch2 = t.target2.count;\r
1162         }\r
1163         if ((scratch3 != t.target3.count) || t.count == 1)\r
1164         {\r
1165                 if (needcolon)\r
1166                 {\r
1167                         bprint("; ");\r
1168                         bytecounter = bytecounter + 2;\r
1169                 }\r
1170                 else\r
1171                         needcolon = TRUE;\r
1172                 bprint("scratch3 ");\r
1173                 bytecounter = bytecounter + 14;\r
1174                 h = ftos(t.target3.count);\r
1175                 bprint(h);\r
1176                 scratch3 = t.target3.count;\r
1177         }\r
1178         if ((scratch4 != t.target4.count) || t.count == 1)\r
1179         {\r
1180                 if (needcolon)\r
1181                 {\r
1182                         bprint("; ");\r
1183                         bytecounter = bytecounter + 2;\r
1184                 }\r
1185                 else\r
1186                         needcolon = TRUE;\r
1187                 bprint("scratch4 ");\r
1188                 bytecounter = bytecounter + 14;\r
1189                 h = ftos(t.target4.count);\r
1190                 bprint(h);\r
1191                 scratch4 = t.target4.count;\r
1192         }\r
1193         bprint("\nsaved4 ");\r
1194         bytecounter = bytecounter + 19;\r
1195         if (t.count != 1)\r
1196                 h = ftos(t.b_aiflags * 4 + 2);\r
1197         else\r
1198                 h = ftos(t.b_aiflags * 4 + 1);\r
1199         bprint(h);\r
1200         bprint ("; wait\n");\r
1201         self.nextthink = time + 0.01;\r
1202         self.enemy = t;\r
1203 };\r
1204 \r
1205 // to allow for 100+ waypoints, we need to trick the runaway loop counter\r
1206 void() DumpWaypoints =\r
1207 {\r
1208         bytecounter = 50;\r
1209         filecount = 1;\r
1210 \r
1211         bprint("// ");\r
1212         bprint(world.message);\r
1213         bprint("- maps/");\r
1214         bprint(mapname);\r
1215         bprint(".way\n");\r
1216         bprint("// Ways by ");\r
1217         bprint(self.netname);\r
1218         bprint("\n");\r
1219         if (!fixer)\r
1220         {\r
1221                 fixer = spawn();\r
1222                 fixer.nextthink = time + 0.01;\r
1223                 fixer.think = PrintWaypoint;\r
1224                 fixer.enemy = world;\r
1225         }\r
1226 };\r
1227 \r
1228 void() PrintQCWaypoint =\r
1229 {\r
1230         local entity t;\r
1231         local string h;\r
1232 \r
1233         if (self.enemy == world)\r
1234                 t = way_head;\r
1235         else\r
1236                 t = self.enemy._next;\r
1237 \r
1238         if (t == world)\r
1239         {\r
1240                 remove(self);\r
1241                 fixer = world;\r
1242                 bprint("};\n\n// End dump\n");\r
1243                 return;\r
1244         }\r
1245         bprint("        make_way(");\r
1246         h = vtos(t.origin);\r
1247         bprint(h);\r
1248         bprint(", '");\r
1249         h = ftos(t.target1.count);\r
1250         bprint(h);\r
1251         bprint(" ");\r
1252         h = ftos(t.target2.count);\r
1253         bprint(h);\r
1254         bprint(" ");\r
1255         h = ftos(t.target3.count);\r
1256         bprint(h);\r
1257         bprint("', ");\r
1258         h = ftos(t.target4.count);\r
1259         bprint(h);\r
1260         bprint(", ");\r
1261         h = ftos(t.b_aiflags);\r
1262         bprint(h);\r
1263         bprint(");\n");\r
1264         self.nextthink = time + 0.01;\r
1265         self.enemy = t;\r
1266 \r
1267 };\r
1268 void() QCDumpWaypoints =\r
1269 {\r
1270         bprint("/* QC Waypoint Dump - src/frikbot/map_");\r
1271 \r
1272         bprint(mapname);\r
1273         bprint(".qc\nFor instructions please read the\nreadme.html that comes with FrikBot */\n\nvoid(vector org, vector bit1, float bit4, float flargs) make_way;\n");\r
1274         bprint("// Ways by ");\r
1275         bprint(self.netname);\r
1276         bprint("\n\n");\r
1277 \r
1278         bprint("void() map_");\r
1279         bprint(mapname);\r
1280         bprint(" =\n{\n");\r
1281 \r
1282 \r
1283         if (!fixer)\r
1284         {\r
1285                 fixer = spawn();\r
1286                 fixer.nextthink = time + 0.01;\r
1287                 fixer.think = PrintQCWaypoint;\r
1288                 fixer.enemy = world;\r
1289         }\r
1290 };\r
1291 \r
1292 void() PrintBSPWaypoint =\r
1293 {\r
1294         local entity t;\r
1295         local string h;\r
1296 \r
1297         if (self.enemy == world)\r
1298                 t = way_head;\r
1299         else\r
1300                 t = self.enemy._next;\r
1301 \r
1302         if (t == world)\r
1303         {\r
1304                 bprint("\n\n// End dump\n");\r
1305                 remove(self);\r
1306                 fixer = world;\r
1307                 return;\r
1308         }\r
1309         bprint("{\n\"classname\" \"waypoint\"\n\"origin\" \"");\r
1310         h = ftos(t.origin_x);\r
1311         bprint(h);\r
1312         bprint(" ");\r
1313         h = ftos(t.origin_y);\r
1314         bprint(h);\r
1315         bprint(" ");\r
1316         h = ftos(t.origin_z);\r
1317         bprint(h);\r
1318         if (t.target1.count)\r
1319         {\r
1320                 bprint("\"\n\"b_pants\" \"");\r
1321                 h = ftos(t.target1.count);\r
1322                 bprint(h);\r
1323         }\r
1324         if (t.target2.count)\r
1325         {\r
1326                 bprint("\"\n\"b_skill\" \"");\r
1327                 h = ftos(t.target2.count);\r
1328                 bprint(h);\r
1329         }\r
1330         if (t.target3.count)\r
1331         {\r
1332                 bprint("\"\n\"b_shirt\" \"");\r
1333                 h = ftos(t.target3.count);\r
1334                 bprint(h);\r
1335         }\r
1336         if (t.target4.count)\r
1337         {\r
1338                 bprint("\"\n\"b_frags\" \"");\r
1339                 h = ftos(t.target4.count);\r
1340                 bprint(h);\r
1341         }\r
1342         if (t.b_aiflags)\r
1343         {\r
1344                 bprint("\"\n\"b_aiflags\" \"");\r
1345                 h = ftos(t.b_aiflags);\r
1346                 bprint(h);\r
1347         }\r
1348         bprint("\"\n}\n");\r
1349         self.nextthink = time + 0.01;\r
1350         self.enemy = t;\r
1351 \r
1352 };\r
1353 void() BSPDumpWaypoints =\r
1354 {\r
1355         bprint("/* BSP entities Dump - maps/");\r
1356 \r
1357         bprint(mapname);\r
1358         bprint(".ent\nFor instructions please read the\nreadme.html that comes with FrikBot */\n\n\n");\r
1359 \r
1360         if (!fixer)\r
1361         {\r
1362                 fixer = spawn();\r
1363                 fixer.nextthink = time + 0.01;\r
1364                 fixer.think = PrintBSPWaypoint;\r
1365                 fixer.enemy = world;\r
1366         }\r
1367 };\r