1 /***************************************************************************
2  *   TEKWAR.H  -  for stuff that probably all modules would like to        *
3  *                know about                                               *
4  *                                                                         *
5  ***************************************************************************/
6 
7 #include "common_game.h"
8 
9 #define TEKWAR
10 
11 #define BETA   1
12 #define DEBUG  1
13 
14 #define CLKIPS      120
15 #define MSGBUFSIZE  40
16 #define DOOMGUY     999
17 #define KENSPLAYERHEIGHT    34
18 
19 #define TICSPERFRAME 3
20 #define MOVEFIFOSIZ 256
21 
22 #define TEKTEMPBUFSIZE  256
23 
24 #define GAMECVARSGLOBAL
25 #define NETNAMES
26 
27 typedef struct
28 {
29      int x, y, z;
30 } point3d;
31 
32 extern int vel, svel, angvel;
33 extern int vel2, svel2, angvel2;
34 
35 extern volatile int recsnddone, recsndoffs;
36 extern int recording;
37 
38 extern int r_showfps;
39 
40 
41 #define   NUMOPTIONS          8
42 #define   NUMGAMEKEYS         32
43 #define   MAXMOREOPTIONS      21
44 #define   MAXTOGGLES          16
45 #define   MAXGAMESTUFF        16
46 extern int fullscreen, xdimgame, ydimgame, bppgame;
47 extern int forcesetup;
48 extern unsigned char option[NUMOPTIONS];
49 extern unsigned char keys[NUMGAMEKEYS];
50 extern unsigned char moreoptions[MAXMOREOPTIONS];
51 extern char toggles[MAXTOGGLES];
52 extern int  gamestuff[MAXGAMESTUFF];
53 
54 extern char frame2draw[MAXPLAYERS];
55 extern int frameskipcnt[MAXPLAYERS];
56 extern char gundmost[320];
57 
58      //Shared player variables
59 extern int posx[MAXPLAYERS], posy[MAXPLAYERS], posz[MAXPLAYERS];
60 extern int horiz[MAXPLAYERS], zoom[MAXPLAYERS], hvel[MAXPLAYERS];
61 extern short ang[MAXPLAYERS], cursectnum[MAXPLAYERS], ocursectnum[MAXPLAYERS];
62 extern short playersprite[MAXPLAYERS], deaths[MAXPLAYERS];
63 extern int lastchaingun[MAXPLAYERS];
64 extern int health[MAXPLAYERS], score[MAXPLAYERS], saywatchit[MAXPLAYERS];
65 extern short numbombs[MAXPLAYERS], oflags[MAXPLAYERS];
66 extern char dimensionmode[MAXPLAYERS];
67 extern char revolvedoorstat[MAXPLAYERS];
68 extern short revolvedoorang[MAXPLAYERS], revolvedoorrotang[MAXPLAYERS];
69 extern int revolvedoorx[MAXPLAYERS], revolvedoory[MAXPLAYERS];
70 
71      //Local multiplayer variables
72 extern int locselectedgun;
73 extern signed char locvel, olocvel;
74 extern short locsvel, olocsvel;                          // Les 09/30/95
75 extern short locangvel, olocangvel;                      // Les 09/30/95
76 extern short locbits, olocbits;
77 
78      //Local multiplayer variables for second player
79 extern int locselectedgun2;
80 extern signed char locvel2, olocvel2;
81 extern short locsvel2, olocsvel2;                        // Les 09/30/95
82 extern short locangvel2, olocangvel2;                    // Les 09/30/95
83 extern short locbits2, olocbits2;
84 
85   //Multiplayer syncing variables
86 extern signed char fsyncvel[MAXPLAYERS], osyncvel[MAXPLAYERS], syncvel[MAXPLAYERS];
87 extern short fsyncsvel[MAXPLAYERS], osyncsvel[MAXPLAYERS], syncsvel[MAXPLAYERS];  // Les 09/30/95
88 extern short fsyncangvel[MAXPLAYERS], osyncangvel[MAXPLAYERS], syncangvel[MAXPLAYERS]; // Les 09/30/95
89 extern unsigned short fsyncbits[MAXPLAYERS], osyncbits[MAXPLAYERS], syncbits[MAXPLAYERS];
90 
91 extern char frameinterpolate, detailmode, ready2send;
92 extern int ototalclock, gotlastpacketclock, smoothratio;
93 extern int oposx[MAXPLAYERS], oposy[MAXPLAYERS], oposz[MAXPLAYERS];
94 extern int ohoriz[MAXPLAYERS], ozoom[MAXPLAYERS];
95 extern short oang[MAXPLAYERS];
96 
97 extern point3d osprite[MAXSPRITESONSCREEN];
98 
99 extern int movefifoplc, movefifoend;
100 extern signed char baksyncvel[MOVEFIFOSIZ][MAXPLAYERS];
101 extern short baksyncsvel[MOVEFIFOSIZ][MAXPLAYERS];       // Les 09/30/95
102 extern short baksyncangvel[MOVEFIFOSIZ][MAXPLAYERS];     // Les 09/30/95
103 extern short baksyncbits[MOVEFIFOSIZ][MAXPLAYERS];
104 
105      //GAME.C sync state variables
106 extern short syncstat;
107 extern int syncvalplc, othersyncvalplc;
108 extern int syncvalend, othersyncvalend;
109 extern int syncvalcnt, othersyncvalcnt;
110 extern short syncval[MOVEFIFOSIZ], othersyncval[MOVEFIFOSIZ];
111 
112 extern int crctable[256];
113 #define updatecrc16(dacrc,dadat) dacrc = (((dacrc<<8)&65535)^crctable[((((unsigned short)dacrc)>>8)&65535)^dadat])
114 extern char playerreadyflag[MAXPLAYERS];
115 
116      //Game recording variables
117 extern int reccnt, recstat;
118 extern signed char recsyncvel[16384][2];
119 extern short recsyncsvel[16384][2];                      // Les 09/30/95
120 extern short recsyncangvel[16384][2];                    // Les 09/30/95
121 extern short recsyncbits[16384][2];
122 
123      //Miscellaneous variables
124 extern char tempbuf[];
125 extern uint8_t packetbuf[];
126 extern char boardfilename[80];
127 extern short screenpeek, oldmousebstatus, brightness;
128 extern short screensize, screensizeflag;
129 extern short neartagsector, neartagwall, neartagsprite;
130 extern int lockclock, neartagdist, neartaghitdist;
131 extern int masterslavetexttime;
132 extern int pageoffset, ydim16, chainnumpages;
133 extern int globhiz, globloz, globhihit, globlohit;
134 extern int stereofps, stereowidth, stereopixelwidth;
135 
136      //Board animation variables
137 extern short rotatespritelist[16], rotatespritecnt;
138 extern short warpsectorlist[64], warpsectorcnt;
139 extern short xpanningsectorlist[16], xpanningsectorcnt;
140 extern short ypanningwalllist[64], ypanningwallcnt;
141 extern short floorpanninglist[64], floorpanningcnt;
142 extern short dragsectorlist[16], dragxdir[16], dragydir[16], dragsectorcnt;
143 extern int dragx1[16], dragy1[16], dragx2[16], dragy2[16], dragfloorz[16];
144 extern short swingcnt, swingwall[32][5], swingsector[32];
145 extern short swingangopen[32], swingangclosed[32], swingangopendir[32];
146 extern short swingang[32], swinganginc[32];
147 extern int swingx[32][8], swingy[32][8];
148 extern short revolvesector[4], revolveang[4], revolvecnt;
149 extern int revolvex[4][16], revolvey[4][16];
150 extern int revolvepivotx[4], revolvepivoty[4];
151 extern short subwaytracksector[4][128], subwaynumsectors[4], subwaytrackcnt;
152 extern int subwaystop[4][8], subwaystopcnt[4];
153 extern int subwaytrackx1[4], subwaytracky1[4];
154 extern int subwaytrackx2[4], subwaytracky2[4];
155 extern int subwayx[4], subwaygoalstop[4], subwayvel[4], subwaypausetime[4];
156 extern short waterfountainwall[MAXPLAYERS], waterfountaincnt[MAXPLAYERS];
157 extern short slimesoundcnt[MAXPLAYERS];
158 
159      //Variables that let you type messages to other player
160 extern char getmessage[162], getmessageleng;
161 extern int getmessagetimeoff;
162 extern char typemessage[162];
163 extern int typemessageleng, typemode;
164 extern char scantoasc[128];
165 extern char scantoascwithshift[128];
166 
167      //These variables are for animating x, y, or z-coordinates of sectors,
168      //walls, or sprites (They are NOT to be used for changing the [].picnum's)
169      //See the setanimation(), and getanimategoal() functions for more details.
170 #define MAXANIMATES 512
171 extern int *animateptr[MAXANIMATES], animategoal[MAXANIMATES];
172 extern int animatevel[MAXANIMATES], animateacc[MAXANIMATES], animatecnt;
173 
174 
175 #define   FT_FULLSCREEN   0
176 #define   FT_DATALINK     1
177 
178 #define   MAXHEALTH      1000
179 #define   MAXSTUN        1000
180 #define   MAXAMMO        100
181 
182 #define   CLASS_NULL               0
183 #define   CLASS_FCIAGENT           1
184 #define   CLASS_CIVILLIAN          2
185 #define   CLASS_SPIDERDROID        3
186 #define   CLASS_COP                4
187 #define   CLASS_MECHCOP            5
188 #define   CLASS_TEKBURNOUT         6
189 #define   CLASS_TEKGOON            7
190 #define   CLASS_ASSASSINDROID      8
191 #define   CLASS_SECURITYDROID      9
192 #define   CLASS_TEKBOSS            10
193 #define   CLASS_TEKLORD            11
194 
195 #define   MAPXT        1
196 
197 struct    picattribtype  {
198      unsigned  char      numframes;
199      unsigned  char      animtype;
200      signed    char      ycenteroffset,xcenteroffset;
201      unsigned  char      animspeed;
202 };
203 
204 #ifdef __GNUC__
205 #  if __GNUC__ == 4 && __GNUC_MINOR__ >= 7
206 #    define TPACK __attribute__ ((packed, gcc_struct))
207 #  else
208 #    define TPACK __attribute__ ((packed))
209 #  endif
210 #else
211 #define TPACK
212 #endif
213 
214 #ifdef _MSC_VER
215 #pragma pack(1)
216 #endif
217 
218 #ifdef __WATCOMC__
219 #pragma pack(push,1);
220 #endif
221 
222 struct TPACK spriteextension {
223      unsigned  char      classification;
224      signed    char      hitpoints;
225      unsigned  short     target;
226      unsigned  short     fxmask;
227      unsigned  short     aimask;
228      short     basestat;
229      unsigned  short     basepic;
230      unsigned  short     standpic;
231      unsigned  short     walkpic;
232      unsigned  short     runpic;
233      unsigned  short     attackpic;
234      unsigned  short     deathpic;
235      unsigned  short     painpic;
236      unsigned  short     squatpic;
237      unsigned  short     morphpic;
238      unsigned  short     specialpic;
239      unsigned  char      lock;
240      unsigned  char      weapon;
241      short     ext2;
242      };
243 
244 #ifdef _MSC_VER
245 #pragma pack()
246 #endif
247 
248 #ifdef __WATCOMC__
249 #pragma pack(pop)
250 #endif
251 
252 #undef TPACK
253 
254 // use this function whenever you need to verify your
255 // extension index
256 extern    int       seconds;
257 extern    int       minutes;
258 extern    int       hours;
259 extern    int       messageon;
260 extern    unsigned  criticalerror;
261 extern    char      messagebuf[MSGBUFSIZE];
262 extern    char      tektempbuf[TEKTEMPBUFSIZE];
263 extern    char      notininventory;
264 extern    struct    picattribtype       *picinfoptr;
265 extern    sectortype          *sectptr[MAXSECTORS];
266 extern    spritetype          *sprptr[MAXSPRITES];
267 extern    walltype            *wallptr[MAXWALLS];
268 extern    struct    spriteextension     spriteXT[MAXSPRITES];
269 extern    struct    spriteextension     *sprXTptr[MAXSPRITES];
270 
271 // additional player arrays
272 extern    int      fallz[],stun[];
273 extern    int      invredcards[MAXPLAYERS], invbluecards[MAXPLAYERS];
274 extern    int      invaccutrak[MAXPLAYERS];
275 extern    int       fireseq[MAXPLAYERS];
276 extern    short     ammo1[MAXPLAYERS];
277 extern    short     ammo2[MAXPLAYERS];
278 extern    short     ammo3[MAXPLAYERS];
279 extern    short     ammo4[MAXPLAYERS];
280 extern    short     ammo5[MAXPLAYERS];
281 extern    short     ammo6[MAXPLAYERS];
282 extern    short     ammo7[MAXPLAYERS];
283 extern    short     ammo8[MAXPLAYERS];
284 extern    int      weapons[MAXPLAYERS];
285 extern    char      dead[MAXPLAYERS];
286 extern    int      firedonetics[MAXPLAYERS];
287 extern    int      lastgun[MAXPLAYERS];
288 extern    int       drawweap[MAXPLAYERS];
289 
290 extern    uint32_t      flags32[];
291 
292 #define   TOGGLE_RETICULE     0
293 #define   TOGGLE_TIME         1
294 #define   TOGGLE_SCORE        2
295 #define   TOGGLE_SOUND        3
296 #define   TOGGLE_MUSIC        4
297 #define   TOGGLE_REARVIEW     5
298 #define   TOGGLE_UPRT         6
299 #define   TOGGLE_GODMODE      7
300 #define   TOGGLE_HEALTH       8
301 #define   TOGGLE_OVERSCAN     9
302 #define   TOGGLE_INVENTORY    10
303 
304 #define   GUN1FLAG            1
305 #define   GUN2FLAG            2
306 #define   GUN3FLAG            3
307 #define   GUN4FLAG            4
308 #define   GUN5FLAG            5
309 #define   GUN6FLAG            6
310 #define   GUN7FLAG            7
311 #define   GUN8FLAG            8
312 
313 #define   BASESONG      0
314 
315 #define   ST_NULL                  0x0000
316 #define   ST_IMMEDIATE             0x0001
317 #define   ST_UPDATE                0x0002
318 #define   ST_NOUPDATE              0x0004
319 #define   ST_UNIQUE                0x0008
320 #define   ST_DELAYED               0x0010
321 #define   ST_VARPITCH              0x0020
322 #define   ST_BACKWARDS             0x0040
323 #define   ST_AMBUPDATE             0x0060
324 #define   ST_VEHUPDATE             0x0080
325 #define   ST_TOGGLE                0x0100
326 
327 #define   MAXSOUNDS                     16
328 #define   TOTALSOUNDS                   208
329 
330 #define   S_WATERFALL                   0
331 #define   S_ALARM                       1
332 
333 #define   S_SEWERLOOP1                  2          //sewer sounds
334 #define   S_SEWERLOOP2                  3
335 #define   S_SEWERLOOP3                  4
336 #define   S_SEWERLOOP4                  5
337 #define   S_SEWERSPLASH1                6
338 #define   S_SEWERSPLASH2                7
339 #define   S_SEWERSPLASH3                8
340 #define   S_SPLASH2                     9
341 #define   S_SPLASH3                     10
342 #define   S_SPLASH                      11
343 
344 #define   S_MATRIX1                     12        //matrix sounds
345 #define   S_MATRIX2                     13
346 #define   S_MATRIX3                     14
347 #define   S_MATRIX4                     15
348 #define   S_MATRIX5                     16
349 #define   S_MATRIX6                     17
350 #define   S_MATRIX7                     18
351 #define   S_MATRIX8                     19
352 #define   S_MATRIX9                     20
353 #define   S_MATRIX10                    21
354 #define   S_MATRIX11                    22
355 #define   S_MATRIX12                    23
356 
357 #define   S_WH_SWITCH                   24        //warehouse
358 #define   S_WH_GRINDING                 25
359 #define   S_WH_TRACKSTOP                26
360 #define   S_WH_STEAMPRESS               27
361 #define   S_WH_CLANK                    28
362 #define   S_WH_6                        29
363 #define   S_WH_7                        30
364 #define   S_WH_8                        31
365 
366 #define   S_WAVES1                      32        //beach and city
367 #define   S_WAVES2                      33
368 #define   S_BIRDIES                     34
369 
370 #define   S_STEAM                       35
371 #define   S_FIRELOOP                    36
372 #define   S_SPINNING_DOOR               37
373 
374 #define   S_TRUCKHORN                   38
375 #define   S_CITY_AMBIENCE               39
376 #define   S_WIND                        40
377 #define   S_AMBULANCE                   41
378 
379 #define   S_ROBOT_ACCESS                42        //matrix voices
380 #define   S_ROBOT_INTRUDER              43
381 #define   S_ROBOT_VIRUS                 44
382 
383 #define   S_SUBWAY_TRACK                45
384 #define   S_ALARM2                      46
385 #define   S_ALARM3                      47
386 
387 #define   S_STATUS1                     48        //menus and status
388 #define   S_STATUS2                     49
389 #define   S_HEALTHMONITOR               50
390 #define   S_REARMONITOR                 51
391 #define   S_MENUSOUND1                  52
392 #define   S_MENUSOUND2                  53
393 #define   S_BEEP                        54
394 #define   S_BOOP                        55
395 
396 #define   S_MATRIXDOOR1                 56      //doors
397 #define   S_MATRIXDOOR2                 57
398 #define   S_MATRIXDOOR3                 58
399 #define   S_SIDEDOOR1                   59
400 #define   S_SIDEDOOR2                   60
401 #define   S_BIGSWINGOP                  61
402 #define   S_BIGSWINGCL                  62
403 #define   S_FLOOROPEN                   63
404 #define   S_BAYDOOR_OPEN                64
405 #define   S_BAYDOOR_CLOSE               65
406 #define   S_BAYDOORLOOP                 66
407 #define   S_UPDOWNDR2_OP                67
408 #define   S_UPDOWNDR2_CL                68
409 #define   S_DOORKLUNK                   69
410 #define   S_AIRDOOR                     70
411 #define   S_AIRDOOR_OPEN                71
412 #define   S_AIRDOOR_CLOSE               72
413 #define   S_ELEVATOR_DOOR               73
414 
415 #define   S_SUBSTATIONLOOP              74        //vehicles
416 #define   S_SUBWAYLOOP                  75
417 #define   S_SUBWAYSTART                 76
418 #define   S_SUBWAYSTOP                  77
419 #define   S_TRUCKLOOP                   78
420 #define   S_TRUCKSTART                  79
421 #define   S_TRUCKSTOP                   80
422 #define   S_TRAMBUSLOOP                 81
423 #define   S_BOATLOOP                    82
424 #define   S_CARTLOOP                    83
425 #define   S_FORKLIFTLOOP                84
426 
427 
428 #define   S_RIC1                        85        //guns
429 #define   S_RIC2                        86
430 #define   S_WEAPON1                     87
431 #define   S_WEAPON2                     88
432 #define   S_WEAPON3                     89
433 
434 #define   S_WEAPON4                     90
435 #define   S_WEAPON5                     91
436 #define   S_WEAPON6                     92
437 #define   S_WEAPON7                     93
438 #define   S_WEAPON8                     94
439 
440 
441 
442 #define   S_ENEMYGUN1                   95
443 #define   S_ENEMYGUN2                   96
444 #define   S_ENEMYGUN3                   97
445 #define   S_ENEMYGUN4                   98
446 #define   S_WITCH                       99
447 #define   S_PLATFORMSTART               100
448 #define   S_PLATFORMSTOP                101
449 #define   S_PLATFORMLOOP                102
450 #define   S_FORCEFIELD1                 103
451 #define   S_FORCEFIELD2                 104
452 #define   S_AUTOGUN                     105
453 #define   S_AUTOGUNEXPLODE              106
454 #define   S_BUSHIT                      107
455 #define   S_FORCEFIELDHUMLOOP           108
456 #define   S_KEYCARDBLIP                 109
457 #define   S_PICKUP_BONUS                110
458 #define   S_JUMP                        111
459 #define   S_GLASSBREAK1                 112
460 #define   S_GLASSBREAK2                 113
461 #define   S_EXPLODE1                    114
462 #define   S_EXPLODE2                    115
463 #define   S_SMALLGLASS1                 116
464 #define   S_SMALLGLASS2                 117
465 #define   S_GORE1                       118
466 #define   S_GORE2                       119
467 #define   S_GORE3                       120
468 #define   S_FLUSH                       121
469 #define   S_REVOLVEDOOR                 122
470 #define   S_PAIN1                       123
471 #define   S_PAIN2                       124
472 #define   S_SCREAM1                     125
473 #define   S_SCREAM2                     126
474 #define   S_SCREAM3                     127
475 #define   S_PLAYERDIE                   128
476 #define   S_MANDIE1                     129
477 #define   S_MANDIE2                     130
478 #define   S_MANDIE3                     131
479 #define   S_MANDIE4                     132
480 #define   S_MANDIE5                     133
481 #define   S_MANDIE6                     134
482 #define   S_MANDIE7                     135
483 #define   S_MANDIE8                     136
484 #define   S_MANDIE9                     137
485 #define   S_MANDIE10                    138
486 #define   S_GIRLDIE1                    139
487 #define   S_GIRLDIE2                    140
488 #define   S_GIRLDIE3                    141
489 #define   S_GIRLDIE4                    142
490 #define   S_GIRLDIE5                    143
491 #define   S_GIRLDIE6                    144
492 #define   S_ANDROID_DIE                 145
493 #define   S_MATRIX_ATTACK               146
494 #define   S_MATRIX_ATTACK2              147
495 #define   S_MATRIX_DIE1                 148
496 #define   S_MATRIX_DIE2                 149
497 #define   S_TRANSITION                  150
498 #define   S_MALE_COMEONYOU              151
499 #define   S_MALE_TAKEYOUINSLEEP         152
500 #define   S_MALE_YOULOSER               153
501 #define   S_MALE_YOUPUNK                154
502 #define   S_MALE_YOUMORON               155
503 #define   S_MALE_LIKESHOOTINGDUX        156
504 #define   S_MALE_SCRAPEBOTBARREL        157
505 #define   S_MALE_DONTHURT               158
506 #define   S_MALE_DONTSHOOT              159
507 #define   S_MALE_PLEASEDONTSHOOT        160
508 #define   S_MALE_DONTSHOOT2             161
509 #define   S_MALE_PLEASEDONTSHOOT2       162
510 #define   S_MALE_OHMYGOD                163
511 #define   S_MALE_GETDOWNTAKECOVER       164
512 #define   S_MALE_HESGOTGUN              165
513 #define   S_MALE_IDONTBELIEVE           166
514 #define   S_MALE_RUNAWAY                167
515 #define   S_MALE_TAKECOVER              168
516 #define   S_MALE_HESGOTGUN2             169
517 #define   S_MALE_ICANTBELIEVE           170
518 #define   S_MALE_CALLTHEPOLICE          171
519 #define   S_MALE_HELPCALLPOLICE         172
520 #define   S_MALE_HEYBACKOFF             173
521 #define   S_MALE_HESGOTAGUN             174
522 #define   S_FEM_RUNHEGOTGUN             175
523 #define   S_FEM_RUN                     176
524 #define   S_FEM_EVRYRUNHEGOTGUN         177
525 #define   S_FEM_CALLACOP                178
526 #define   S_FEM_OHNO                    179
527 #define   S_FEM_MOVEHEKILLUS            180
528 #define   S_FEM_HESGOTAGUN1             181
529 #define   S_FEM_EEKRUN                  182
530 #define   S_FEM_PSYCHOGOTGUN            183
531 #define   S_FEM_OHMYGOD                 184
532 #define   S_FEM_HURRYOUTAMYWAY          185
533 #define   S_FEM_CALLAMBULANCE           186
534 #define   S_DIANE_DONTSHOOTP            187
535 #define   S_DIANE_HELPMEPLEASE          188
536 #define   S_DIANE_OHH                   189
537 #define   S_DIANE_PLEASEDONTSHOOT       190
538 #define   S_DIANE_DONTSHOOTP2           191
539 #define   S_KATIE_DONTSHOOT             192
540 #define   S_KATIE_PLEASEDONTSHOOT       193
541 #define   S_MAR_THINKYOUTAKE            194
542 #define   S_MAR_ISTHATALL               195
543 #define   S_MAR_KISSYOURASS             196
544 #define   S_GRD_WHATDOINGHERE           197
545 #define   S_GRD_IDLEAVE                 198
546 #define   S_GRD_HANDSUP                 199
547 #define   S_GRD_HOLDIT                  200
548 #define   S_GRD_DROPIT                  201
549 #define   S_DIM_WANTSOMETHIS            202
550 #define   S_DIM_THINOUCANTAKEME         203
551 #define   S_DIM_LAUGHTER                204
552 #define   S_DIM_CANTSTOPTEKLORDS        205
553 #define   S_DIM_TEKRULES                206
554 #define   S_HOLOGRAMDIE                 207
555 
556 
557 #define   AI_NULL             0x0000
558 #define   AI_FRIEND           0x0001
559 #define   AI_FOE              0x0002
560 #define   AI_JUSTSHOTAT       0x0004
561 #define   AI_CRITICAL         0x0008
562 #define   AI_WASDRAWN         0x0010
563 #define   AI_WASATTACKED      0x0020
564 #define   AI_GAVEWARNING      0x0040
565 #define   AI_ENCROACHMENT     0x0080
566 #define   AI_DIDFLEESCREAM    0x0100
567 #define   AI_DIDAMBUSHYELL    0x0200
568 #define   AI_DIDHIDEPLEA      0x0400
569 #define   AI_TIMETODODGE      0x0800
570 
571 
572 #define   lm(_str_) printf(" %s...\n", _str_);
573 
574 #define fillsprite(newspriteindex2,x2,y2,z2,cstat2,shade2,pal2,            \
575           clipdist2,xrepeat2,yrepeat2,xoffset2,yoffset2,picnum2,ang2,      \
576           xvel2,yvel2,zvel2,owner2,sectnum2,statnum2,lotag2,hitag2,extra2) \
577 {                                                                          \
578      spritetype *spr2;                                                     \
579      spr2 = &sprite[newspriteindex2];                                      \
580      spr2->x = x2; spr2->y = y2; spr2->z = z2;                             \
581      spr2->cstat = cstat2; spr2->shade = shade2;                           \
582      spr2->pal = pal2; spr2->clipdist = clipdist2;                         \
583      spr2->xrepeat = xrepeat2; spr2->yrepeat = yrepeat2;                   \
584      spr2->xoffset = xoffset2; spr2->yoffset = yoffset2;                   \
585      spr2->picnum = picnum2; spr2->ang = ang2;                             \
586      spr2->xvel = xvel2; spr2->yvel = yvel2; spr2->zvel = zvel2;           \
587      spr2->owner = owner2;                                                 \
588      spr2->lotag = lotag2; spr2->hitag = hitag2; spr2->extra = -1;         \
589      copybuf(&spr2->x,&osprite[newspriteindex2].x,3);                      \
590 }                                                                          \
591 
592 
593 // b5compat.c
594 
595 void overwritesprite(int thex, int they, short tilenum, signed char shade,
596                      char stat, unsigned char dapalnum);
597 void permanentwritesprite(int thex, int they, short tilenum, signed char shade,
598         int cx1, int cy1, int cx2, int cy2, unsigned char dapalnum);
599 void permanentwritespritetile(int thex, int they, short tilenum, signed char shade,
600         int cx1, int cy1, int cx2, int cy2, unsigned char dapalnum);
601 void printext(int x, int y, const char *buffer, short tilenum, char invisiblecol);
602 void precache();
603 void resettiming();
604 void setbrightness(int32_t brightness);
605 
606 // config.c
607 //int loadsetup(const char *fn);
608 //int writesetup(const char *fn);
609 
610 // tekcdr.c
611 
612 int cdpreinit(void);
613 void cduninit(void);
614 
615 // tekchng.c
616 
617 int changehealth(short snum, short deltahealth);
618 void changescore(short snum, short deltascore);
619 void tekchangefallz(short snum,int loz,int hiz);
620 void tekhealstun(short snum);
621 
622 // tekgame.c
623 
624 #define   MAXNAMESIZE    11
625 
626 extern int       dbgflag;
627 extern int       dbgcolumn;
628 extern FILE      *dbgfp;
629 
630 extern short     biasthreshhold;
631 extern char      biasthreshholdon;
632 extern int      headbob;
633 extern char      localname[MAXNAMESIZE];
634 extern char      netnames[MAXPLAYERS][MAXNAMESIZE];
635 
636 extern int32_t   g_noSetup;
637 
638 void checkmasterslaveswitch();
639 void doanimations();
640 void domovethings();
641 void drawscreen(short snum, int dasmoothratio);
642 void getpackets();
643 void playback();
644 int setanimation(int *animptr, int thegoal, int thevel, int theacc);
645 
646 // tekgun.c
647 
648 extern short dieframe[MAXPLAYERS];
649 extern int       goreflag;
650 
651 void gunstatuslistcode(void);
652 void killscore(short hs, short snum, char guntype);
653 void playerpainsound(int p);
654 void restockammo(int snum);
655 void tekanimweap(int gun,short p);
656 void tekdrawgun(int gun,short p);
657 int tekexplodebody(int i);
658 void tekfiregun(int gun,short p);
659 int tekgundamage(int gun,int x,int y,int z,int hitsprite);
660 void tekgunload(int fil);
661 void tekgunsave(int fil);
662 int tekhasweapon(int gun,short snum);
663 int validplayer(int snum);
664 
665 // tekldsv.c
666 
667 int loadgame(int loadno);
668 int savegame(int saveno);
669 
670 // tekmap.c
671 
672 void drawoverheadmap(int cposx, int cposy, int czoom, short cang);
673 
674 // tekmsc.c
675 
676 #define   MAXLOADSAVEOPTS     5
677 #define   MAXLOADSAVESIZE     12
678 #define   TOTALMAPS      32
679 
680 extern int       activemenu;
681 extern int       autocenter[MAXPLAYERS];
682 extern char      debrief;
683 extern int       difficulty;
684 extern char      dofadein;
685 extern char      gameover;
686 extern char      generalplay;
687 extern char      loadsavenames[MAXLOADSAVEOPTS][MAXLOADSAVESIZE];
688 extern const char      *mapnames[TOTALMAPS];
689 extern int       mission;
690 extern int       mousesensitivity;
691 extern int       nochaseflag;
692 extern int       noenemiesflag;
693 extern int       noguardflag;
694 extern int       nostalkflag;
695 extern int       nostrollflag;
696 extern char      rearviewdraw;
697 extern char      singlemapmode;
698 
699 int accessiblemap(int mn);
700 void bonusflash();
701 int choosemap();
702 int choosemission();
703 void copyrightscreen();
704 void criticalflash();
705 void debriefing();
706 void depositsymbol(int snum);
707 void domenu(void);
708 void domenuinput(void);
709 void fadein(int start, int end, int steps);
710 void fadeout(int start, int end, int red, int green, int blue, int steps);
711 void finishpaletteshifts(void);
712 void holyoff();
713 void holyon();
714 void initmenu(void);
715 void initmoreoptions();
716 int initpaletteshifts(void);
717 void missionaccomplished(int  sn);
718 int missionfailed();
719 void newgame(const char *mapname);
720 void newmap(int mapno);
721 void nextnetlevel();
722 void rearview(int snum);
723 void redrawbackfx(void);
724 void teksavemissioninfo(int fil);
725 void setup3dscreen();
726 void showmessage(const char *fmt,...);
727 void tekargv(int argc,char const * const argv[]);
728 void tekgamestarted(void);
729 void tekloadmissioninfo(int fil);
730 void tekloadmoreoptions(int fil);
731 int tekprivatekeys(void);
732 void teksavemoreoptions(int fil);
733 int tekscreenfx(void);
734 void tektime(void);
735 void woundflash();
736 
737 // tekprep.c
738 
739 extern int  coopmode;
740 extern int      startx,starty,startz;
741 extern short starta,starts;
742 extern int      switchlevelsflag;
743 extern int       subwaysound[4];
744 
745 void initplayersprite(short snum);
746 void netstartspot(int *x, int *y,short *sectnum);
747 void placerandompic(int picnum);
748 void prepareboard(char *daboardfilename);
749 void tekinitmultiplayers(int argc, char const * const argv[]);
750 void tekloadsetup();
751 void teknetpickmap(void);
752 int tekpreinit(void);
753 void tekrestoreplayer(short snum);
754 void teksavesetup(void);
755 void tekview(int *x1,int *y1, int *x2,int *y2);
756 
757 // teksmk.c
758 
759 void smkclosemenu();
760 void smkmenuframe(int fn);
761 void smkopenmenu(const char *name);
762 void smkplayseq(const char *name);
763 void smkshowmenu();
764 
765 // teksnd.c
766 
767 extern int          digiloopflag;
768 
769 void initsb(char option1,char option2,int digihz,char option7a,char option7b,int val,char option7c);
770 void menusong(int insubway);
771 void musicfade();
772 void musicoff(void);
773 int playsound(int sn, int sndx,int sndy, int loop, short type);
774 void songmastervolume(int vol);
775 void soundmastervolume(int vol);
776 void startmusic(int level);
777 void stopallsounds();
778 void stopsound(int i);
779 void uninitsb(void);
780 void updatesounds(int snum);
781 void updatevehiclesnds(int i, int sndx, int sndy);
782 
783 // tekspr.c
784 
785 void analyzesprites(int dax, int day);
786 void checktouchsprite(short snum, short sectnum);
787 short floatmovesprite(short spritenum, int dx, int dy, int dz, int ceildist, int flordist, char cliptype);
788 short flymovesprite(short spritenum, int dx, int dy, int dz, int ceildist, int flordist, char cliptype);
789 short kenmovesprite(short spritenum, int dx, int dy, int dz, int ceildist, int flordist, char cliptype);
790 short movesprite(short spritenum, int dx, int dy, int dz, int ceildist, int flordist, char cliptype);
791 void playerdropitems(int snum);
792 
793 // tekstat.c
794 
795 #define   NORMALCLIP          0
796 #define   PROJECTILECLIP      1
797 #define   CLIFFCLIP           2
798 
799 extern uspritetype     pickup;
800 
801 void ambushyell(short sn, short ext);
802 void androidexplosion(int i);
803 int attachvirus(short i, int pic);
804 void blastmark(int i);
805 void bloodonwall(int wn, int x,int y,int z, short sect, short daang, int hitx, int hity, int hitz);
806 void bombexplosion(int i);
807 int damagesprite(int hitsprite, int points);
808 void dosectorflash();
809 void forceexplosion(int i);
810 void genexplosion1(int i);
811 void genexplosion2(int i);
812 void givewarning(short i, short ext);
813 int initsprites();
814 int initspriteXTs();
815 int isahologram(int i);
816 int isanandroid(int i);
817 short jsdeletesprite(short spritenum);
818 short jsinsertsprite(short sect, short stat);
819 void newstatus(short sn, int  seq);
820 int pickupsprite(short sn);
821 void playergunshot(int snum);
822 int playerhit(int hitsprite, int *pnum);
823 int playervirus(short pnum, int pic);
824 void sectorflash(short s);
825 void sectortriggersprites(short snum);
826 int spewblood(int sprnum, int hitz, short daang);
827 void statuslistcode();
828 void tekstatload(int fh);
829 void tekstatsave(int fh);
830 void toss(short snum);
831 int validext(int ext);
832 
833 // tektag.c
834 
835 extern int       headbobon;
836 extern char onelev[MAXPLAYERS];
837 
838 void checkmapsndfx(short p);
839 int krand_intercept(const char *stg);
840 void movedoors(int d);
841 void movefloordoor(int d);
842 void movesprelevs(int e);
843 void movevehicles(int v);
844 void operatesector(short dasector);
845 void operatesprite(short dasprite);
846 void setanimpic(short *pic,short tics,short frames);
847 void tagcode();
848 void tekdoanimpic(void);
849 void tekdodelayfuncs(void);
850 void tekheadbob(void);
851 void teknewsector(short p);
852 void tekoperatesector(short dasector);
853 void tekpreptags();
854 void teksetdelayfunc(void (*delayfunc)(short),int tics,short parm);
855 void tekswitchtrigger(short snum);
856 void tektagcode(void);
857 void tektagload(int fil);
858 void tektagsave(int fil);
859 int testneighborsectors(short sect1, short sect2);
860 void warp(int *x, int *y, int *z, short *daang, short *dasector);
861 void warpsprite(short spritenum);
862 
863 // tektxt.c
864 
865 extern char      bypasscdcheck;
866 
867 void crash(const char *s,...);
868