]> 4ch.mooo.com Git - 16.git/blob - 16/cawat/DEF.H
wwww
[16.git] / 16 / cawat / DEF.H
1 /* Catacomb Armageddon Source Code\r
2  * Copyright (C) 1993-2014 Flat Rock Software\r
3  *\r
4  * This program is free software; you can redistribute it and/or modify\r
5  * it under the terms of the GNU General Public License as published by\r
6  * the Free Software Foundation; either version 2 of the License, or\r
7  * (at your option) any later version.\r
8  *\r
9  * This program is distributed in the hope that it will be useful,\r
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12  * GNU General Public License for more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along\r
15  * with this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
17  */\r
18 \r
19 #include "ID_HEADS.H"\r
20 #include <MATH.H>\r
21 #include <VALUES.H>\r
22 \r
23 //#define PROFILE\r
24 \r
25 #define DEBUG_KEYS_AVAILABLE 0\r
26 \r
27 /*\r
28 =============================================================================\r
29 \r
30                                                  GLOBAL CONSTANTS\r
31 \r
32 =============================================================================\r
33 */\r
34 \r
35 //\r
36 // SOFTLIB GFX FILENAME\r
37 //\r
38 #define         SLIB_GFX                        "ARM_SLIB."EXT\r
39 \r
40 \r
41 #define USE_INERT_LIST false\r
42 \r
43 \r
44 //\r
45 // MAX_BASE - represents 100 percent in 1st base\r
46 // MAX_PERC - represents 100 percent in 2nd base\r
47 // PERC - fractional portion of 2nd base\r
48 // SCALE - arbitrary scaling value (bigger number means more accurate)\r
49 //\r
50 // ex: PERCENTAGE(320,16,8,7)    returns  160\r
51 //\r
52 // Make sure values used won't overflow a WORD! In general, if largest number\r
53 // to be used (320 in ex: above) * (1<<SCALE) is greater than 65535, use\r
54 // LONG_PERCENTAGE or a lower SCALE. Using a SCALE of 8 in the example\r
55 // above would overflow a WORD in some circumstances!\r
56 //\r
57 // LONG_PERCENTAGE is to be used for larger SCALEs, thus, giving you\r
58 // massive accuracy!\r
59 //\r
60 #define PERCENTAGE(MAX_BASE,MAX_PERC,PERC,SCALE) ((unsigned)(MAX_BASE*((PERC<<SCALE)/MAX_PERC))>>SCALE)\r
61 #define LONG_PERCENTAGE(MAX_BASE,MAX_PERC,PERC,SCALE) (((long)MAX_BASE*(((long)PERC<<SCALE)/MAX_PERC))>>SCALE)\r
62 \r
63 #define PI      3.141592657\r
64 \r
65 //#define SIZE_TEST             65000\r
66 #define SIZE_TEST               0\r
67 \r
68 \r
69 #define FL_QUICK                        0x01\r
70 #define FL_NOMEMCHECK   0x02\r
71 #define FL_HELPTEST             0x04\r
72 \r
73 #define FL_CLEAR                (FL_QUICK|FL_NOMEMCHECK|FL_HELPTEST)\r
74 \r
75 #if 0\r
76 #define GEM_SHIFT               2\r
77 #define FL_RGEM         0x04\r
78 #define FL_GGEM         0x08\r
79 #define FL_BGEM         0x10\r
80 #define FL_YGEM         0x20\r
81 #define FL_PGEM         0x40\r
82 #endif\r
83 \r
84 #define FL_DEAD         0x80\r
85 \r
86 \r
87 \r
88 #define MAXBOLTS                10\r
89 #define MAXNUKES                10\r
90 #define MAXPOTIONS      10\r
91 \r
92 #define NUKE_COST               (1000)\r
93 #define BOLT_COST    (1200)\r
94 #define POTION_COST     (1300)\r
95 \r
96 #define NUKE_COST_TXT           ("1000")                // Allows for Q&D positioning..\r
97 #define BOLT_COST_TXT           ("1200")\r
98 #define POTION_COST_TXT         ("1300")\r
99 \r
100 #define RADARX  31                                                                                                                      // bytes\r
101 #define RADARY  11                                           // pixels\r
102 #define RADAR_WIDTH     51                                  //   "\r
103 #define RADAR_HEIGHT            51                                  //   "\r
104 #define RADAR_XCENTER   ((RADARX*8)+(RADAR_WIDTH/2)+3)      //   "\r
105 #define RADAR_YCENTER   ((RADARY-8)+(RADAR_HEIGHT/2)+5)       //   "\r
106 #define MAX_RADAR_BLIPS 60\r
107 \r
108 \r
109 #define RADAR_RADIUS                    17\r
110 #define RADAR_RADIUS_NSEW       15\r
111 #define RADAR_X_IRADIUS         (113/5)\r
112 #define RADAR_Y_IRADIUS         (113/7)\r
113 #define RADAR_ICON_CENTER       4                                               // Center offset into icon.\r
114 \r
115 #define NAMESTART       180\r
116 #define REMOVED_DOOR_TILE       NAMESTART\r
117 \r
118 #define NEXT_LEVEL_CODE         0xff\r
119 #define REMOVE_DOOR_CODE        0xfe\r
120 #define CANT_OPEN_CODE          0xfd\r
121 #define EXP_WALL_CODE           0xfc\r
122 \r
123 \r
124 #define UNMARKGRCHUNK(chunk)    (grneeded[chunk]&=~ca_levelbit)\r
125 \r
126 #define MOUSEINT        0x33\r
127 \r
128 #define EXPWALLSTART    8\r
129 #define NUMEXPWALLS     7\r
130 #define WALLEXP         59\r
131 #define WATEREXP        62\r
132 #define NUMFLOORS       80      //71\r
133 \r
134 #define NUMLATCHPICS     (FIRSTWALLPIC-FIRSTLATCHPIC) //+5\r
135 #define NUMSCALEPICS     (FIRSTWALLPIC-FIRSTSCALEPIC) //+5\r
136 #define NUMSCALEWALLS (LASTWALLPIC-FIRSTWALLPIC) //+5\r
137 \r
138 \r
139 #define FLASHCOLOR      12\r
140 #define FLASHTICS       4\r
141 \r
142 \r
143 #define NUMLEVELS       32              //21\r
144 \r
145 #define VIEWX           0               // corner of view window\r
146 #define VIEWY           0\r
147 #define VIEWWIDTH       (40*8)          // size of view window                          // 33\r
148 #define VIEWHEIGHT      (15*8)                                                                                          // 18\r
149 #define VIEWXH          (VIEWX+VIEWWIDTH-1)\r
150 #define VIEWYH          (VIEWY+VIEWHEIGHT-1)\r
151 \r
152 #define CENTERX         (VIEWX+VIEWWIDTH/2-1)   // middle of view window\r
153 #define CENTERY         (VIEWY+VIEWHEIGHT/2-1)\r
154 \r
155 #define GLOBAL1         (1l<<16)\r
156 #define TILEGLOBAL  GLOBAL1\r
157 #define TILESHIFT       16l\r
158 \r
159 #define MINDIST         (2*GLOBAL1/5)\r
160 #define FOCALLENGTH     (TILEGLOBAL)    // in global coordinates\r
161 \r
162 #define ANGLES          360             // must be divisable by 4\r
163 \r
164 #define MAPSIZE         64              // maps are 64*64 max\r
165 #define MAXACTORS       100             // max number of tanks, etc / map\r
166 \r
167 #define NORTH   0\r
168 #define EAST    1\r
169 #define SOUTH   2\r
170 #define WEST    3\r
171 \r
172 #define SIGN(x) ((x)>0?1:-1)\r
173 #define ABS(x) ((int)(x)>0?(x):-(x))\r
174 #define LABS(x) ((long)(x)>0?(x):-(x))\r
175 \r
176 #define MAXSCALE        (VIEWWIDTH/2)\r
177 \r
178 \r
179 #define MAXBODY         100\r
180 #define MAXSHOTPOWER    56\r
181 \r
182 #define SCREEN1START    0\r
183 #define SCREEN2START    8320\r
184 \r
185 #define STATUSLEN                       0xc80\r
186 #define PAGELEN                 0x1700\r
187 \r
188 #define PAGE1START      STATUSLEN\r
189 #define PAGE2START      (PAGE1START+PAGELEN)\r
190 #define PAGE3START      (PAGE2START+PAGELEN)\r
191 #define FREESTART               (PAGE3START+PAGELEN)\r
192 \r
193 #define PIXRADIUS               512\r
194 \r
195 #define STATUSLINES             (200-VIEWHEIGHT)\r
196 \r
197 enum bonusnumbers {B_BOLT,B_NUKE,B_POTION,B_RKEY,B_YKEY,B_GKEY,B_BKEY,B_SCROLL1,\r
198  B_SCROLL2,B_SCROLL3,B_SCROLL4,B_SCROLL5,B_SCROLL6,B_SCROLL7,B_SCROLL8,\r
199  B_GOAL,B_CHEST,B_RGEM,B_GGEM,B_BGEM,B_YGEM,B_PGEM};\r
200 \r
201 \r
202 #define MAX_DOOR_STORAGE 5\r
203 \r
204 #define GEM_DELAY_TIME  (120*60)\r
205 \r
206 #define ROTATE_SPEED            (6)\r
207 \r
208 #define WALL_SKELETON_CODE 6\r
209 \r
210 #define MAXREALTICS (2*60)\r
211 \r
212 #define MAXFREEZETIME                   (100*30)                                // 50 secs (100 half)\r
213 \r
214 #define INVISIBLEWALL                   0x46\r
215 \r
216 #define USE_STRIPS              FALSE\r
217 \r
218 /*\r
219 =============================================================================\r
220 \r
221                                                    GLOBAL TYPES\r
222 \r
223 =============================================================================\r
224 */\r
225 \r
226 enum {BLANKCHAR=9,BOLTCHAR,NUKECHAR,POTIONCHAR,KEYCHARS,SCROLLCHARS=17,\r
227         NUMBERCHARS=25};\r
228 \r
229 typedef long fixed;\r
230 \r
231 typedef struct {int x,y;} tilept;\r
232 typedef struct {fixed x,y;} globpt;\r
233 \r
234 typedef struct\r
235 {\r
236   int   x1,x2,leftclip,rightclip;// first pixel of wall (may not be visable)\r
237   unsigned      height1,height2,color,walllength,side;\r
238         long    planecoord;\r
239 } walltype;\r
240 \r
241 typedef enum\r
242   {nothing,playerobj,bonusobj,succubusobj,batobj,skeletonobj,fatdemonobj,godessobj,\r
243   mageobj,pshotobj,bigpshotobj,mshotobj,inertobj,bounceobj,grelmobj,sshotobj,\r
244   gateobj,zombieobj,antobj,wetobj,expobj,eyeobj,wallskelobj,eshotobj,treeobj,\r
245   gshotobj,reddemonobj,freezeobj,solidobj,cloudobj,dshotobj,hbunnyobj,bunnyobj,\r
246   realsolidobj} classtype;\r
247 \r
248 typedef enum {north,east,south,west,northeast,southeast,southwest,\r
249                   northwest,nodir} dirtype;             // a catacombs 2 carryover\r
250 \r
251 typedef struct  statestruct\r
252 {\r
253         int             shapenum;\r
254         int             tictime;\r
255         void    (*think) ();\r
256         struct  statestruct     far *next;\r
257 } statetypestruct;\r
258 \r
259 #define statetype statetypestruct far\r
260 \r
261 #define of_shootable            0x01\r
262 #define of_damagedone   0x02\r
263 #define of_forcefield   0x40            // defines a solid object as a forcefield???????????\r
264 #define of_tree                 0x80            // used to identify between a tree and a statue --\r
265                                                                                         //                      last minute changes for Greg\r
266 \r
267 typedef struct objstruct\r
268 {\r
269 \r
270         int ticcount;                                           //\r
271         statetype *state;                                       // THESE MEMBERS MUST BE IN THE SAME\r
272         fixed x,y;                    // ORDER AS THE MEMBERS DEFINED IN\r
273         int viewx;                    // IOBJSTRUCT OR ALL HELL WILL BREAK\r
274         unsigned tilex,tiley;         // LOOSE!!\r
275         unsigned viewheight;          //\r
276         unsigned size;                //\r
277         struct  objstruct       *next;   //\r
278 \r
279 \r
280   struct objstruct *prev;\r
281   enum {no,noalways,yes,always} active;\r
282   classtype     obclass;\r
283 \r
284   unsigned char flags;\r
285 \r
286   long          distance;\r
287   dirtype       dir;\r
288 \r
289   int           angle;\r
290   int           hitpoints;\r
291   long          speed;\r
292 \r
293   fixed         xl,xh,yl,yh;    // hit rectangle\r
294 \r
295   int           temp1,temp2;\r
296 } objtype;\r
297 \r
298 #if USE_INERT_LIST\r
299 \r
300 #define MAXINERTOBJ 20\r
301 \r
302 typedef struct iobjstruct {\r
303         int ticcount;\r
304         statetype *state;\r
305         fixed x,y;\r
306         int viewx;\r
307         unsigned tilex,tiley;\r
308         unsigned viewheight;\r
309         unsigned size;\r
310         struct iobjstruct *next;\r
311 } inertobjtype;\r
312 \r
313 #endif\r
314 \r
315 \r
316 typedef enum    {ex_stillplaying,ex_died,ex_warped,ex_resetgame\r
317         ,ex_loadedgame,ex_victorious,ex_turning,ex_abort} exittype;\r
318 \r
319 \r
320 typedef enum {S_NONE,     S_HELP,    S_SND,     S_SAVING,   S_RESTORING,\r
321                         S_JOYSTICK, S_RETREAT, S_ADVANCE, S_SIDESTEP, S_QTURN,\r
322                         S_MISSLE,   S_ZAPPER,  S_XTER,    S_CURING,   S_READ,\r
323                         S_VIEWING,  S_ITEMDES,  S_DAMAGE,  S_TURN,    S_TIMESTOP} status_flags;\r
324 \r
325 typedef struct {\r
326         char x,y;\r
327         unsigned ondoor,underdoor;\r
328 } doorinfo;\r
329 \r
330 typedef struct {\r
331         char x,y;\r
332         short angle;\r
333         doorinfo doors[MAX_DOOR_STORAGE];\r
334 } levelinfo;\r
335 \r
336 typedef struct\r
337 {\r
338         int             difficulty;\r
339         int             mapon;\r
340         int             bolts,nukes,potions,keys[4],scrolls[8];\r
341 \r
342         int             gems[5];                                // "int allgems[5]" is used for 1:1 comparison\r
343                                                                                 // in play loop for radar... CHANGE IT, TOO!\r
344 \r
345         long    score;\r
346         int             body,shotpower;\r
347         short mapwidth,mapheight;\r
348 //      levelinfo levels[NUMLEVELS];\r
349 } gametype;\r
350 \r
351 /*\r
352 =============================================================================\r
353 \r
354                                                  C3_MAIN DEFINITIONS\r
355 \r
356 =============================================================================\r
357 */\r
358 \r
359 extern  char inlevel[][2];\r
360 extern  char            str[80],str2[20];\r
361 extern  unsigned        tedlevelnum;\r
362 extern  boolean         tedlevel;\r
363 extern  gametype        gamestate;\r
364 extern  exittype        playstate;\r
365 extern  char SlowMode;\r
366 extern   unsigned Flags;\r
367 extern  boolean LoadShapes;\r
368 extern  boolean EASYMODEON;\r
369 \r
370 \r
371 void NewGame (void);\r
372 boolean SaveTheGame(int file);\r
373 boolean LoadTheGame(int file);\r
374 void ResetGame(void);\r
375 void ShutdownId (void);\r
376 void InitGame (void);\r
377 void Quit (char *error, ...);\r
378 void TEDDeath(void);\r
379 void DemoLoop (void);\r
380 void SetupScalePic (unsigned picnum);\r
381 void SetupScaleWall (unsigned picnum);\r
382 void SetupScaling (void);\r
383 void main (void);\r
384 void Display320(void);\r
385 void Display640(void);\r
386 void PrintHelp(void);\r
387 \r
388 /*\r
389 =============================================================================\r
390 \r
391                                                  C3_GAME DEFINITIONS\r
392 \r
393 =============================================================================\r
394 */\r
395 \r
396 extern  unsigned        latchpics[NUMLATCHPICS];\r
397 extern  unsigned        tileoffsets[NUMTILE16];\r
398 extern  unsigned        textstarts[27];\r
399 \r
400 \r
401 #define L_CHARS         0\r
402 #define L_NOSHOT        1\r
403 #define L_SHOTBAR       2\r
404 #define L_NOBODY        3\r
405 #define L_BODYBAR       4\r
406 \r
407 \r
408 void ScanInfoPlane (void);\r
409 void ScanText (void);\r
410 void SetupGameLevel(void);\r
411 void Victory (boolean playsounds);\r
412 void Died (void);\r
413 void NormalScreen (void);\r
414 void DrawPlayScreen (void);\r
415 void LoadLatchMem (void);\r
416 void FizzleFade (unsigned source, unsigned dest,\r
417         unsigned width,unsigned height, boolean abortable);\r
418 void FizzleOut (int showlevel);\r
419 void FreeUpMemory (void);\r
420 void GameLoop (void);\r
421 \r
422 \r
423 /*\r
424 =============================================================================\r
425 \r
426                                                  C3_PLAY DEFINITIONS\r
427 \r
428 =============================================================================\r
429 */\r
430 \r
431 #define BGF_NIGHT                       0x01            // it is officially night\r
432 #define BGF_NOT_LIGHTNING               0x02            // lightning flash has ended\r
433 \r
434 extern byte BGFLAGS,bcolor;\r
435 \r
436 extern unsigned *skycolor,*groundcolor;\r
437 \r
438 extern  ControlInfo     control;\r
439 extern  boolean         running,slowturn;\r
440 \r
441 extern  int                     bordertime;\r
442 \r
443 extern  byte            tilemap[MAPSIZE][MAPSIZE];\r
444 extern  objtype         *actorat[MAPSIZE][MAPSIZE];\r
445 extern  byte            spotvis[MAPSIZE][MAPSIZE];\r
446 \r
447 extern  objtype         objlist[MAXACTORS],*new,*obj,*player;\r
448 \r
449 extern  unsigned        farmapylookup[MAPSIZE];\r
450 extern  byte            *nearmapylookup[MAPSIZE];\r
451 extern  byte            update[];\r
452 \r
453 extern  boolean         godmode,singlestep;\r
454 extern  int                     extravbls;\r
455 \r
456 extern  int                     mousexmove,mouseymove;\r
457 extern  int                     pointcount,pointsleft;\r
458 extern  status_flags    status_flag;\r
459 extern  int             status_delay;\r
460 \r
461 extern  objtype                 dummyobj;\r
462 extern  short           BeepTime;\r
463 extern  unsigned        scolor,gcolor;\r
464 \r
465 void CenterWindow(word w,word h);\r
466 void DebugMemory (void);\r
467 void PicturePause (void);\r
468 int  DebugKeys (void);\r
469 void CheckKeys (void);\r
470 void InitObjList (void);\r
471 void GetNewObj (boolean usedummy);\r
472 void RemoveObj (objtype *gone);\r
473 void PollControlls (void);\r
474 void PlayLoop (void);\r
475 void InitBgChange(short stimer, unsigned *scolors, short gtimer, unsigned *gcolors, byte flag);\r
476 \r
477 void DisplayStatus (status_flags *stat_flag);\r
478 \r
479 /*\r
480 =============================================================================\r
481 \r
482                                                  C3_STATE DEFINITIONS\r
483 \r
484 =============================================================================\r
485 */\r
486 \r
487 //void SpawnNewObj (unsigned x, unsigned y, statetype *state, unsigned size);\r
488 //void SpawnNewObjFrac (long x, long y, statetype *state, unsigned size);\r
489 \r
490 void Internal_SpawnNewObj (unsigned x, unsigned y, statetype *state, unsigned size, boolean UseDummy, boolean PutInActorat);\r
491 void Internal_SpawnNewObjFrac (long x, long y, statetype *state, unsigned size,boolean UseDummy);\r
492 \r
493 #define DSpawnNewObj(x, y, state, size)                         Internal_SpawnNewObj(x,y,state,size,true,true)\r
494 #define SpawnNewObj(x, y, state, size)                                  Internal_SpawnNewObj(x,y,state,size,false,true)\r
495 #define ASpawnNewObj(x, y, state, size)                                 Internal_SpawnNewObj(x,y,state,size,false,false)\r
496 #define SpawnNewObjFrac(x, y, state, size,Dummy)        Internal_SpawnNewObjFrac(x, y, state, size,false)\r
497 #define DSpawnNewObjFrac(x, y, state, size)                     Internal_SpawnNewObjFrac(x, y, state, size,true)\r
498 \r
499 boolean CheckHandAttack (objtype *ob);\r
500 void T_DoDamage (objtype *ob);\r
501 boolean Walk (objtype *ob);\r
502 void ChaseThink (objtype *obj, boolean diagonal);\r
503 void MoveObj (objtype *ob, long move);\r
504 boolean Chase (objtype *ob, boolean diagonal);\r
505 \r
506 extern  dirtype opposite[9];\r
507 \r
508 /*\r
509 =============================================================================\r
510 \r
511                                                  C3_TRACE DEFINITIONS\r
512 \r
513 =============================================================================\r
514 */\r
515 \r
516 int FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max);\r
517 int BackTrace (int finish);\r
518 void ForwardTrace (void);\r
519 int FinishWall (void);\r
520 void InsideCorner (void);\r
521 void OutsideCorner (void);\r
522 void FollowWalls (void);\r
523 \r
524 extern  boolean aborttrace;\r
525 \r
526 /*\r
527 =============================================================================\r
528 \r
529                                                  C3_DRAW DEFINITIONS\r
530 \r
531 =============================================================================\r
532 */\r
533 \r
534 #define MAXWALLS        50\r
535 #define DANGERHIGH      45\r
536 \r
537 #define MIDWALL         (MAXWALLS/2)\r
538 \r
539 //==========================================================================\r
540 \r
541 extern  tilept  tile,lasttile,focal,left,mid,right;\r
542 \r
543 extern  globpt  edge,view;\r
544 \r
545 extern  unsigned screenloc[3];\r
546 extern  unsigned freelatch;\r
547 \r
548 extern  int screenpage;\r
549 \r
550 extern  boolean         fizzlein;\r
551 \r
552 extern  long lasttimecount;\r
553 \r
554 extern  int firstangle,lastangle;\r
555 \r
556 extern  fixed prestep;\r
557 \r
558 extern  int traceclip,tracetop;\r
559 \r
560 extern  fixed sintable[ANGLES+ANGLES/4],*costable;\r
561 \r
562 extern  fixed   viewx,viewy,viewsin,viewcos;                    // the focal point\r
563 extern  int     viewangle;\r
564 \r
565 extern  fixed scale,scaleglobal;\r
566 extern  unsigned slideofs;\r
567 \r
568 extern  int zbuffer[VIEWXH+1];\r
569 \r
570 extern  walltype        walls[MAXWALLS],*leftwall,*rightwall;\r
571 \r
572 \r
573 extern  fixed   tileglobal;\r
574 extern  fixed   focallength;\r
575 extern  fixed   mindist;\r
576 extern  int             viewheight;\r
577 extern  fixed scale;\r
578 \r
579 extern  int     far walllight1[NUMFLOORS];\r
580 extern  int     far walldark1[NUMFLOORS];\r
581 \r
582 extern unsigned topcolor,bottomcolor;\r
583 \r
584 extern char wall_anim_info[NUMFLOORS];\r
585 extern char wall_anim_pos[NUMFLOORS];\r
586 \r
587 //==========================================================================\r
588 \r
589 void    DrawLine (int xl, int xh, int y,int color);\r
590 void    DrawWall (walltype *wallptr);\r
591 void    TraceRay (unsigned angle);\r
592 fixed   FixedByFrac (fixed a, fixed b);\r
593 void    TransformPoint (fixed gx, fixed gy, int *screenx, unsigned *screenheight);\r
594 fixed   TransformX (fixed gx, fixed gy);\r
595 int     FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max);\r
596 void    ForwardTrace (void);\r
597 int     FinishWall (void);\r
598 int     TurnClockwise (void);\r
599 int     TurnCounterClockwise (void);\r
600 void    FollowWall (void);\r
601 \r
602 void    NewScene (void);\r
603 void    BuildTables (void);\r
604 \r
605 \r
606 /*\r
607 =============================================================================\r
608 \r
609                                                  C3_SCALE DEFINITIONS\r
610 \r
611 =============================================================================\r
612 */\r
613 \r
614 \r
615 #define COMPSCALECODESTART      (65*6)          // offset to start of code in comp scaler\r
616 \r
617 typedef struct\r
618 {\r
619         unsigned        codeofs[65];\r
620         unsigned        start[65];\r
621         unsigned        width[65];\r
622         byte            code[];\r
623 }       t_compscale;\r
624 \r
625 typedef struct\r
626 {\r
627         unsigned        width;\r
628         unsigned        codeofs[64];\r
629 }       t_compshape;\r
630 \r
631 \r
632 extern unsigned scaleblockwidth,\r
633                 scaleblockheight,\r
634                 scaleblockdest;\r
635 \r
636 extern  byte    plotpix[8];\r
637 extern  byte    bitmasks1[8][8];\r
638 extern  byte    bitmasks2[8][8];\r
639 \r
640 \r
641 extern  t_compscale _seg *scaledirectory[NUMSCALEPICS];\r
642 extern  t_compshape _seg *shapedirectory[NUMSCALEPICS];\r
643 extern  memptr                  walldirectory[NUMSCALEWALLS];\r
644 extern  unsigned        shapesize[NUMSCALEPICS];\r
645 \r
646 void            DeplanePic (int picnum);\r
647 void ScaleShape (int xcenter, t_compshape _seg *compshape, unsigned scale);\r
648 unsigned        BuildCompShape (t_compshape _seg **finalspot);\r
649 \r
650 \r
651 /*\r
652 =============================================================================\r
653 \r
654                                                  C3_ASM DEFINITIONS\r
655 \r
656 =============================================================================\r
657 */\r
658 \r
659 extern  unsigned        wallheight      [VIEWWIDTH];\r
660 extern  unsigned        wallwidth       [VIEWWIDTH];\r
661 extern  unsigned        wallseg         [VIEWWIDTH];\r
662 extern  unsigned        wallofs         [VIEWWIDTH];\r
663 extern  unsigned        screenbyte      [VIEWWIDTH];\r
664 extern  unsigned        screenbit       [VIEWWIDTH];\r
665 extern  unsigned        bitmasks        [64];\r
666 \r
667 extern  long            wallscalecall;\r
668 \r
669 void    ScaleWalls (void);\r
670 \r
671 /*\r
672 =============================================================================\r
673 \r
674                                                  C3_WIZ DEFINITIONS\r
675 \r
676 =============================================================================\r
677 */\r
678 \r
679 #define MAXHANDHEIGHT   72\r
680 \r
681 extern statetype s_pshot_exp1;\r
682 extern statetype s_pshot_exp2;\r
683 extern statetype s_pshot_exp3;\r
684 \r
685 extern  long    lastnuke;\r
686 extern   int lasttext;\r
687 extern  int             handheight;\r
688 extern  int             boltsleft,bolttimer;\r
689 extern short RadarXY[][3];\r
690 \r
691 extern short RotateAngle;\r
692 extern short FreezeTime;\r
693 \r
694 //void FaceDir(short x, short y, boolean StopTime);\r
695 //short CalcAngle(short dx, short dy);\r
696 \r
697 void FaceAngle(short DestAngle);\r
698 void RotateView();\r
699 void InitRotate(short DestAngle);\r
700 short FaceDoor(short x, short y);\r
701 \r
702 char DisplayMsg(char *text,char *choices);\r
703 char DisplaySMsg(char *text,char *choices);\r
704 \r
705 extern statetype s_explode;\r
706 \r
707 void SpawnExplosion(fixed x, fixed y,short Delay);\r
708 void T_ExpThink(objtype *obj);\r
709 void SpawnBigExplosion(fixed x, fixed y, short Delay, fixed Range);\r
710 \r
711 \r
712 /*\r
713 =============================================================================\r
714 \r
715                                                  C3_ACT1 DEFINITIONS\r
716 \r
717 =============================================================================\r
718 */\r
719 \r
720 int EasyHitPoints(int NrmHitPts);\r
721 int EasyDoDamage(int Damage);\r
722 \r
723 #define zombie_mode     ob->temp1\r
724 #define zombie_delay    ob->temp2\r
725 \r
726 enum zombie_modes {zm_wait_for_dark,zm_wait_to_rise,zm_active};\r
727 \r
728 enum eye_modes {em_other1,em_player1,em_other2,em_player2,em_other3,em_player3,em_other4,em_player4,em_dummy};\r
729 \r
730 #define MSHOTDAMAGE     2\r
731 #define MSHOTSPEED      10000\r
732 \r
733 #define ESHOTDAMAGE     1\r
734 #define ESHOTSPEED      5000\r
735 \r
736 #define SSHOTDAMAGE     3\r
737 #define SSHOTSPEED      6500\r
738 \r
739 #define RANDOM_ATTACK 20\r
740 \r
741 extern dirtype dirtable[];\r
742 extern short other_x[], other_y[];\r
743 extern short zombie_base_delay;\r
744 \r
745 extern statetype s_fatdemon_ouch;\r
746 extern statetype s_fatdemon_blowup1;\r
747 \r
748 extern statetype s_succubus_ouch;\r
749 extern statetype s_succubus_death1;\r
750 \r
751 extern  statetype s_godessouch;\r
752 extern  statetype s_godessdie1;\r
753 \r
754 extern  statetype s_mageouch;\r
755 extern  statetype s_magedie1;\r
756 \r
757 extern  statetype s_grelouch;\r
758 extern  statetype s_greldie1;\r
759 \r
760 extern  statetype s_batdie1;\r
761 \r
762 extern  statetype s_zombie_death1;\r
763 extern  statetype s_zombie_ouch;\r
764 \r
765 extern statetype s_zombie_rise1;\r
766 extern statetype s_zombie_rise2;\r
767 extern statetype s_zombie_rise3;\r
768 extern statetype s_zombie_rise4;\r
769 \r
770 extern statetype s_ant_wait;\r
771 extern statetype s_ant_egg;\r
772 extern statetype s_ant_walk1;\r
773 extern statetype s_ant_walk2;\r
774 extern statetype s_ant_walk3;\r
775 extern statetype s_ant_attack1;\r
776 extern statetype s_ant_pause;\r
777 extern statetype s_ant_ouch;\r
778 extern statetype s_ant_die1;\r
779 extern statetype s_ant_die2;\r
780 extern statetype s_ant_die3;\r
781 \r
782 extern statetype s_skel_pause;\r
783 extern statetype s_skel_1;\r
784 extern statetype s_skel_2;\r
785 extern statetype s_skel_3;\r
786 extern statetype s_skel_4;\r
787 extern statetype s_skel_attack1;\r
788 extern statetype s_skel_attack2;\r
789 extern statetype s_skel_attack3;\r
790 extern statetype s_skel_ouch;\r
791 extern statetype s_skel_die1;\r
792 extern statetype s_skel_die2;\r
793 extern statetype s_skel_die3;\r
794 \r
795 extern statetype s_wet_pause;\r
796 \r
797 extern statetype s_wet_bubbles1;\r
798 extern statetype s_wet_bubbles2;\r
799 extern statetype s_wet_bubbles3;\r
800 extern statetype s_wet_bubbles4;\r
801 \r
802 extern statetype s_wet_peek;\r
803 \r
804 extern statetype s_wet_rise1;\r
805 extern statetype s_wet_rise2;\r
806 extern statetype s_wet_rise3;\r
807 extern statetype s_wet_rise4;\r
808 extern statetype s_wet_rise5;\r
809 \r
810 extern statetype s_wet_sink1;\r
811 extern statetype s_wet_sink2;\r
812 extern statetype s_wet_sink3;\r
813 \r
814 extern statetype s_wet_walk1;\r
815 extern statetype s_wet_walk2;\r
816 extern statetype s_wet_walk3;\r
817 extern statetype s_wet_walk4;\r
818 \r
819 extern statetype s_wet_attack1;\r
820 extern statetype s_wet_attack2;\r
821 extern statetype s_wet_attack3;\r
822 extern statetype s_wet_attack4;\r
823 \r
824 extern statetype s_wet_ouch;\r
825 \r
826 extern statetype s_wet_die1;\r
827 extern statetype s_wet_die2;\r
828 extern statetype s_wet_die3;\r
829 extern statetype s_wet_die4;\r
830 extern statetype s_wet_die5;\r
831 \r
832 extern  statetype s_obj_gate1;\r
833 extern  statetype s_obj_gate2;\r
834 extern  statetype s_obj_gate3;\r
835 extern  statetype s_obj_gate4;\r
836 \r
837 extern statetype s_eye_pause;\r
838 \r
839 extern statetype s_eye_1;\r
840 extern statetype s_eye_2;\r
841 extern statetype s_eye_3;\r
842 extern statetype s_eye_4;\r
843 \r
844 extern statetype s_eye_ouch;\r
845 extern statetype s_eye_ouch2;\r
846 \r
847 extern statetype s_eye_die1;\r
848 extern statetype s_eye_die2;\r
849 extern statetype s_eye_die3;\r
850 \r
851 extern  statetype s_mshot1;\r
852 extern  statetype s_mshot2;\r
853 \r
854 extern statetype s_bonus_die;\r
855 \r
856 extern  statetype s_red_demonouch;\r
857 extern  statetype s_red_demondie1;\r
858 \r
859 extern statetype s_bunny_death1;\r
860 extern statetype s_bunny_ouch;\r
861 \r
862 extern statetype s_tree_death1;\r
863 extern statetype s_tree_ouch;\r
864 \r
865 extern statetype s_force_field_die;