OSDN Git Service

going to start wolf3d core core (loop with input only) work soon. I was mostly brains...
[proj16/16.git] / src / lib / hb / def / c3_def.h
1 /* Catacomb 3-D 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 /*\r
26 =============================================================================\r
27 \r
28                                                  GLOBAL CONSTANTS\r
29 \r
30 =============================================================================\r
31 */\r
32 \r
33 #define NAMESTART       180\r
34 \r
35 \r
36 #define UNMARKGRCHUNK(chunk)    (grneeded[chunk]&=~ca_levelbit)\r
37 \r
38 #define MOUSEINT        0x33\r
39 \r
40 #define EXPWALLSTART    8\r
41 #define NUMEXPWALLS             7\r
42 #define WALLEXP                 15\r
43 #define NUMFLOORS               36\r
44 \r
45 #define NUMFLOORS       36\r
46 \r
47 #define NUMLATCHPICS    100\r
48 #define NUMSCALEPICS    100\r
49 #define NUMSCALEWALLS   30\r
50 \r
51 \r
52 #define FLASHCOLOR      5\r
53 #define FLASHTICS       4\r
54 \r
55 \r
56 #define NUMLEVELS       20\r
57 \r
58 #define VIEWX           0               // corner of view window\r
59 #define VIEWY           0\r
60 #define VIEWWIDTH       (33*8)          // size of view window\r
61 #define VIEWHEIGHT      (18*8)\r
62 #define VIEWXH          (VIEWX+VIEWWIDTH-1)\r
63 #define VIEWYH          (VIEWY+VIEWHEIGHT-1)\r
64 \r
65 #define CENTERX         (VIEWX+VIEWWIDTH/2-1)   // middle of view window\r
66 #define CENTERY         (VIEWY+VIEWHEIGHT/2-1)\r
67 \r
68 #define GLOBAL1         (1l<<16)\r
69 #define TILEGLOBAL  GLOBAL1\r
70 #define TILESHIFT       16l\r
71 \r
72 #define MINDIST         (2*GLOBAL1/5)\r
73 #define FOCALLENGTH     (TILEGLOBAL)    // in global coordinates\r
74 \r
75 #define ANGLES          360             // must be divisable by 4\r
76 \r
77 #define MAPSIZE         64              // maps are 64*64 max\r
78 #define MAXACTORS       150             // max number of tanks, etc / map\r
79 \r
80 #define NORTH   0\r
81 #define EAST    1\r
82 #define SOUTH   2\r
83 #define WEST    3\r
84 \r
85 #define SIGN(x) ((x)>0?1:-1)\r
86 #define ABS(x) ((int)(x)>0?(x):-(x))\r
87 #define LABS(x) ((long)(x)>0?(x):-(x))\r
88 \r
89 #define MAXSCALE        (VIEWWIDTH/2)\r
90 \r
91 \r
92 #define MAXBODY                 64\r
93 #define MAXSHOTPOWER    56\r
94 \r
95 #define SCREEN1START    0\r
96 #define SCREEN2START    8320\r
97 \r
98 #define PAGE1START              0x900\r
99 #define PAGE2START              0x2000\r
100 #define PAGE3START              0x3700\r
101 #define FREESTART               0x4e00\r
102 \r
103 #define PIXRADIUS               512\r
104 \r
105 #define STATUSLINES             (200-VIEWHEIGHT)\r
106 \r
107 enum bonusnumbers {B_BOLT,B_NUKE,B_POTION,B_RKEY,B_YKEY,B_GKEY,B_BKEY,B_SCROLL1,\r
108  B_SCROLL2,B_SCROLL3,B_SCROLL4,B_SCROLL5,B_SCROLL6,B_SCROLL7,B_SCROLL8,\r
109  B_GOAL,B_CHEST};\r
110 \r
111 \r
112 /*\r
113 =============================================================================\r
114 \r
115                                                    GLOBAL TYPES\r
116 \r
117 =============================================================================\r
118 */\r
119 \r
120 enum {BLANKCHAR=9,BOLTCHAR,NUKECHAR,POTIONCHAR,KEYCHARS,SCROLLCHARS=17,\r
121         NUMBERCHARS=25};\r
122 \r
123 typedef long fixed;\r
124 \r
125 typedef struct {int x,y;} tilept;\r
126 typedef struct {fixed x,y;} globpt;\r
127 \r
128 typedef struct\r
129 {\r
130   int   x1,x2,leftclip,rightclip;// first pixel of wall (may not be visable)\r
131   unsigned      height1,height2,color,walllength,side;\r
132         long    planecoord;\r
133 } walltype;\r
134 \r
135 typedef enum\r
136   {nothing,playerobj,bonusobj,orcobj,batobj,skeletonobj,trollobj,demonobj,\r
137   mageobj,pshotobj,bigpshotobj,mshotobj,inertobj,bounceobj,grelmobj\r
138   ,gateobj} classtype;\r
139 \r
140 typedef enum {north,east,south,west,northeast,southeast,southwest,\r
141                   northwest,nodir} dirtype;             // a catacombs 2 carryover\r
142 \r
143 \r
144 typedef struct  statestruct\r
145 {\r
146         int             shapenum;\r
147         int             tictime;\r
148         void    (*think) ();\r
149         struct  statestruct     *next;\r
150 } statetype;\r
151 \r
152 \r
153 typedef struct objstruct\r
154 {\r
155   enum {no,yes} active;\r
156   int           ticcount;\r
157   classtype     obclass;\r
158   statetype     *state;\r
159 \r
160   boolean       shootable;\r
161   boolean       tileobject;             // true if entirely inside one tile\r
162 \r
163   long          distance;\r
164   dirtype       dir;\r
165   fixed         x,y;\r
166   unsigned      tilex,tiley;\r
167   int           viewx;\r
168   unsigned      viewheight;\r
169 \r
170   int           angle;\r
171   int           hitpoints;\r
172   long          speed;\r
173 \r
174   unsigned      size;                   // global radius for hit rect calculation\r
175   fixed         xl,xh,yl,yh;    // hit rectangle\r
176 \r
177   int           temp1,temp2;\r
178   struct        objstruct       *next,*prev;\r
179 } objtype;\r
180 \r
181 \r
182 typedef struct\r
183 {\r
184         int             difficulty;\r
185         int             mapon;\r
186         int             bolts,nukes,potions,keys[4],scrolls[8];\r
187         long    score;\r
188         int             body,shotpower;\r
189 } gametype;\r
190 \r
191 typedef enum    {ex_stillplaying,ex_died,ex_warped,ex_resetgame\r
192         ,ex_loadedgame,ex_victorious,ex_abort} exittype;\r
193 \r
194 \r
195 /*\r
196 =============================================================================\r
197 \r
198                                                  C3_MAIN DEFINITIONS\r
199 \r
200 =============================================================================\r
201 */\r
202 \r
203 extern  char            str[80],str2[20];\r
204 extern  unsigned        tedlevelnum;\r
205 extern  boolean         tedlevel;\r
206 extern  gametype        gamestate;\r
207 extern  exittype        playstate;\r
208 \r
209 \r
210 void NewGame (void);\r
211 boolean SaveTheGame(int file);\r
212 boolean LoadTheGame(int file);\r
213 void ResetGame(void);\r
214 void ShutdownId (void);\r
215 void InitGame (void);\r
216 void Quit (char *error);\r
217 void TEDDeath(void);\r
218 void DemoLoop (void);\r
219 void SetupScalePic (unsigned picnum);\r
220 void SetupScaleWall (unsigned picnum);\r
221 void SetupScaling (void);\r
222 void main (void);\r
223 \r
224 /*\r
225 =============================================================================\r
226 \r
227                                                  C3_GAME DEFINITIONS\r
228 \r
229 =============================================================================\r
230 */\r
231 \r
232 extern  unsigned        latchpics[NUMLATCHPICS];\r
233 extern  unsigned        tileoffsets[NUMTILE16];\r
234 extern  unsigned        textstarts[27];\r
235 \r
236 \r
237 #define L_CHARS         0\r
238 #define L_NOSHOT        1\r
239 #define L_SHOTBAR       2\r
240 #define L_NOBODY        3\r
241 #define L_BODYBAR       4\r
242 \r
243 \r
244 void ScanInfoPlane (void);\r
245 void ScanText (void);\r
246 void SetupGameLevel (void);\r
247 void Victory (void);\r
248 void Died (void);\r
249 void NormalScreen (void);\r
250 void DrawPlayScreen (void);\r
251 void LoadLatchMem (void);\r
252 void FizzleFade (unsigned source, unsigned dest,\r
253         unsigned width,unsigned height, boolean abortable);\r
254 void FizzleOut (int showlevel);\r
255 void FreeUpMemory (void);\r
256 void GameLoop (void);\r
257 \r
258 \r
259 /*\r
260 =============================================================================\r
261 \r
262                                                  C3_PLAY DEFINITIONS\r
263 \r
264 =============================================================================\r
265 */\r
266 \r
267 extern  ControlInfo     c;\r
268 extern  boolean         running,slowturn;\r
269 \r
270 extern  int                     bordertime;\r
271 \r
272 extern  byte            tilemap[MAPSIZE][MAPSIZE];\r
273 extern  objtype         *actorat[MAPSIZE][MAPSIZE];\r
274 extern  byte            spotvis[MAPSIZE][MAPSIZE];\r
275 \r
276 extern  objtype         objlist[MAXACTORS],*new,*obj,*player;\r
277 \r
278 extern  unsigned        farmapylookup[MAPSIZE];\r
279 extern  byte            *nearmapylookup[MAPSIZE];\r
280 extern  byte            update[];\r
281 \r
282 extern  boolean         godmode,singlestep;\r
283 extern  int                     extravbls;\r
284 \r
285 extern  int                     mousexmove,mouseymove;\r
286 extern  int                     pointcount,pointsleft;\r
287 \r
288 \r
289 void CenterWindow(word w,word h);\r
290 void DebugMemory (void);\r
291 void PicturePause (void);\r
292 int  DebugKeys (void);\r
293 void CheckKeys (void);\r
294 void InitObjList (void);\r
295 void GetNewObj (boolean usedummy);\r
296 void RemoveObj (objtype *gone);\r
297 void PollControlls (void);\r
298 void PlayLoop (void);\r
299 \r
300 \r
301 /*\r
302 =============================================================================\r
303 \r
304                                                  C3_STATE DEFINITIONS\r
305 \r
306 =============================================================================\r
307 */\r
308 \r
309 void SpawnNewObj (unsigned x, unsigned y, statetype *state, unsigned size);\r
310 void SpawnNewObjFrac (long x, long y, statetype *state, unsigned size);\r
311 boolean CheckHandAttack (objtype *ob);\r
312 void T_DoDamage (objtype *ob);\r
313 boolean Walk (objtype *ob);\r
314 void ChaseThink (objtype *obj, boolean diagonal);\r
315 void MoveObj (objtype *ob, long move);\r
316 boolean Chase (objtype *ob, boolean diagonal);\r
317 \r
318 extern  dirtype opposite[9];\r
319 \r
320 /*\r
321 =============================================================================\r
322 \r
323                                                  C3_TRACE DEFINITIONS\r
324 \r
325 =============================================================================\r
326 */\r
327 \r
328 int FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max);\r
329 int BackTrace (int finish);\r
330 void ForwardTrace (void);\r
331 int FinishWall (void);\r
332 void InsideCorner (void);\r
333 void OutsideCorner (void);\r
334 void FollowWalls (void);\r
335 \r
336 extern  boolean aborttrace;\r
337 \r
338 /*\r
339 =============================================================================\r
340 \r
341                                                  C3_DRAW DEFINITIONS\r
342 \r
343 =============================================================================\r
344 */\r
345 \r
346 #define MAXWALLS        50\r
347 #define DANGERHIGH      45\r
348 \r
349 #define MIDWALL         (MAXWALLS/2)\r
350 \r
351 //==========================================================================\r
352 \r
353 extern  tilept  tile,lasttile,focal,left,mid,right;\r
354 \r
355 extern  globpt  edge,view;\r
356 \r
357 extern  unsigned screenloc[3];\r
358 extern  unsigned freelatch;\r
359 \r
360 extern  int screenpage;\r
361 \r
362 extern  boolean         fizzlein;\r
363 \r
364 extern  long lasttimecount;\r
365 \r
366 extern  int firstangle,lastangle;\r
367 \r
368 extern  fixed prestep;\r
369 \r
370 extern  int traceclip,tracetop;\r
371 \r
372 extern  fixed sintable[ANGLES+ANGLES/4],*costable;\r
373 \r
374 extern  fixed   viewx,viewy,viewsin,viewcos;                    // the focal point\r
375 extern  int     viewangle;\r
376 \r
377 extern  fixed scale,scaleglobal;\r
378 extern  unsigned slideofs;\r
379 \r
380 extern  int zbuffer[VIEWXH+1];\r
381 \r
382 extern  walltype        walls[MAXWALLS],*leftwall,*rightwall;\r
383 \r
384 \r
385 extern  fixed   tileglobal;\r
386 extern  fixed   focallength;\r
387 extern  fixed   mindist;\r
388 extern  int             viewheight;\r
389 extern  fixed scale;\r
390 \r
391 extern  int     walllight1[NUMFLOORS];\r
392 extern  int     walldark1[NUMFLOORS];\r
393 extern  int     walllight2[NUMFLOORS];\r
394 extern  int     walldark2[NUMFLOORS];\r
395 \r
396 //==========================================================================\r
397 \r
398 void    DrawLine (int xl, int xh, int y,int color);\r
399 void    DrawWall (walltype *wallptr);\r
400 void    TraceRay (unsigned angle);\r
401 fixed   FixedByFrac (fixed a, fixed b);\r
402 void    TransformPoint (fixed gx, fixed gy, int *screenx, unsigned *screenheight);\r
403 fixed   TransformX (fixed gx, fixed gy);\r
404 int     FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max);\r
405 void    ForwardTrace (void);\r
406 int     FinishWall (void);\r
407 int     TurnClockwise (void);\r
408 int     TurnCounterClockwise (void);\r
409 void    FollowWall (void);\r
410 \r
411 void    NewScene (void);\r
412 void    BuildTables (void);\r
413 \r
414 \r
415 /*\r
416 =============================================================================\r
417 \r
418                                                  C3_SCALE DEFINITIONS\r
419 \r
420 =============================================================================\r
421 */\r
422 \r
423 \r
424 #define COMPSCALECODESTART      (65*6)          // offset to start of code in comp scaler\r
425 \r
426 typedef struct\r
427 {\r
428         unsigned        codeofs[65];\r
429         unsigned        start[65];\r
430         unsigned        width[65];\r
431         byte            code[];\r
432 }       t_compscale;\r
433 \r
434 typedef struct\r
435 {\r
436         unsigned        width;\r
437         unsigned        codeofs[64];\r
438 }       t_compshape;\r
439 \r
440 \r
441 extern unsigned scaleblockwidth,\r
442                 scaleblockheight,\r
443                 scaleblockdest;\r
444 \r
445 extern  byte    plotpix[8];\r
446 extern  byte    bitmasks1[8][8];\r
447 extern  byte    bitmasks2[8][8];\r
448 \r
449 \r
450 extern  t_compscale _seg *scaledirectory[MAXSCALE+1];\r
451 extern  t_compshape _seg *shapedirectory[NUMSCALEPICS];\r
452 extern  memptr                  walldirectory[NUMSCALEWALLS];\r
453 extern  unsigned        shapesize[MAXSCALE+1];\r
454 \r
455 void            DeplanePic (int picnum);\r
456 void ScaleShape (int xcenter, t_compshape _seg *compshape, unsigned scale);\r
457 unsigned        BuildCompShape (t_compshape _seg **finalspot);\r
458 \r
459 \r
460 /*\r
461 =============================================================================\r
462 \r
463                                                  C3_ASM DEFINITIONS\r
464 \r
465 =============================================================================\r
466 */\r
467 \r
468 extern  unsigned        wallheight      [VIEWWIDTH];\r
469 extern  unsigned        wallwidth       [VIEWWIDTH];\r
470 extern  unsigned        wallseg         [VIEWWIDTH];\r
471 extern  unsigned        wallofs         [VIEWWIDTH];\r
472 extern  unsigned        screenbyte      [VIEWWIDTH];\r
473 extern  unsigned        screenbit       [VIEWWIDTH];\r
474 extern  unsigned        bitmasks        [64];\r
475 \r
476 extern  long            wallscalecall;\r
477 \r
478 void    ScaleWalls (void);\r
479 \r
480 /*\r
481 =============================================================================\r
482 \r
483                                                  C3_WIZ DEFINITIONS\r
484 \r
485 =============================================================================\r
486 */\r
487 \r
488 #define MAXHANDHEIGHT   72\r
489 \r
490 extern  long    lastnuke;\r
491 extern  int             handheight;\r
492 extern  int             boltsleft;\r
493 \r
494 /*\r
495 =============================================================================\r
496 \r
497                                                  C3_ACT1 DEFINITIONS\r
498 \r
499 =============================================================================\r
500 */\r
501 \r
502 extern  statetype s_trollouch;\r
503 extern  statetype s_trolldie1;\r
504 \r
505 \r
506 extern  statetype s_orcpause;\r
507 \r
508 extern  statetype s_orc1;\r
509 extern  statetype s_orc2;\r
510 extern  statetype s_orc3;\r
511 extern  statetype s_orc4;\r
512 \r
513 extern  statetype s_orcattack1;\r
514 extern  statetype s_orcattack2;\r
515 extern  statetype s_orcattack3;\r
516 \r
517 extern  statetype s_orcouch;\r
518 \r
519 extern  statetype s_orcdie1;\r
520 extern  statetype s_orcdie2;\r
521 extern  statetype s_orcdie3;\r
522 \r
523 \r
524 extern  statetype s_demonouch;\r
525 extern  statetype s_demondie1;\r
526 \r
527 extern  statetype s_mageouch;\r
528 extern  statetype s_magedie1;\r
529 \r
530 extern  statetype s_grelouch;\r
531 extern  statetype s_greldie1;\r
532 \r
533 extern  statetype s_batdie1;\r