]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/hb/def/c3_def.h
going to start wolf3d core core (loop with input only) work soon. I was mostly brains...
[16.git] / src / lib / hb / def / c3_def.h
diff --git a/src/lib/hb/def/c3_def.h b/src/lib/hb/def/c3_def.h
new file mode 100755 (executable)
index 0000000..c0fe07f
--- /dev/null
@@ -0,0 +1,533 @@
+/* Catacomb 3-D Source Code\r
+ * Copyright (C) 1993-2014 Flat Rock Software\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along\r
+ * with this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+ */\r
+\r
+#include "ID_HEADS.H"\r
+#include <MATH.H>\r
+#include <VALUES.H>\r
+\r
+//#define PROFILE\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                GLOBAL CONSTANTS\r
+\r
+=============================================================================\r
+*/\r
+\r
+#define NAMESTART      180\r
+\r
+\r
+#define UNMARKGRCHUNK(chunk)   (grneeded[chunk]&=~ca_levelbit)\r
+\r
+#define MOUSEINT       0x33\r
+\r
+#define EXPWALLSTART   8\r
+#define NUMEXPWALLS            7\r
+#define WALLEXP                        15\r
+#define NUMFLOORS              36\r
+\r
+#define NUMFLOORS      36\r
+\r
+#define NUMLATCHPICS   100\r
+#define NUMSCALEPICS   100\r
+#define NUMSCALEWALLS  30\r
+\r
+\r
+#define FLASHCOLOR     5\r
+#define FLASHTICS      4\r
+\r
+\r
+#define NUMLEVELS      20\r
+\r
+#define VIEWX          0               // corner of view window\r
+#define VIEWY          0\r
+#define VIEWWIDTH      (33*8)          // size of view window\r
+#define VIEWHEIGHT     (18*8)\r
+#define VIEWXH         (VIEWX+VIEWWIDTH-1)\r
+#define VIEWYH         (VIEWY+VIEWHEIGHT-1)\r
+\r
+#define CENTERX                (VIEWX+VIEWWIDTH/2-1)   // middle of view window\r
+#define CENTERY                (VIEWY+VIEWHEIGHT/2-1)\r
+\r
+#define GLOBAL1                (1l<<16)\r
+#define TILEGLOBAL  GLOBAL1\r
+#define TILESHIFT      16l\r
+\r
+#define MINDIST                (2*GLOBAL1/5)\r
+#define FOCALLENGTH    (TILEGLOBAL)    // in global coordinates\r
+\r
+#define ANGLES         360             // must be divisable by 4\r
+\r
+#define MAPSIZE                64              // maps are 64*64 max\r
+#define MAXACTORS      150             // max number of tanks, etc / map\r
+\r
+#define NORTH  0\r
+#define EAST   1\r
+#define SOUTH  2\r
+#define WEST   3\r
+\r
+#define SIGN(x) ((x)>0?1:-1)\r
+#define ABS(x) ((int)(x)>0?(x):-(x))\r
+#define LABS(x) ((long)(x)>0?(x):-(x))\r
+\r
+#define        MAXSCALE        (VIEWWIDTH/2)\r
+\r
+\r
+#define MAXBODY                        64\r
+#define MAXSHOTPOWER   56\r
+\r
+#define SCREEN1START   0\r
+#define SCREEN2START   8320\r
+\r
+#define PAGE1START             0x900\r
+#define PAGE2START             0x2000\r
+#define        PAGE3START              0x3700\r
+#define        FREESTART               0x4e00\r
+\r
+#define PIXRADIUS              512\r
+\r
+#define STATUSLINES            (200-VIEWHEIGHT)\r
+\r
+enum bonusnumbers {B_BOLT,B_NUKE,B_POTION,B_RKEY,B_YKEY,B_GKEY,B_BKEY,B_SCROLL1,\r
+ B_SCROLL2,B_SCROLL3,B_SCROLL4,B_SCROLL5,B_SCROLL6,B_SCROLL7,B_SCROLL8,\r
+ B_GOAL,B_CHEST};\r
+\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                  GLOBAL TYPES\r
+\r
+=============================================================================\r
+*/\r
+\r
+enum {BLANKCHAR=9,BOLTCHAR,NUKECHAR,POTIONCHAR,KEYCHARS,SCROLLCHARS=17,\r
+       NUMBERCHARS=25};\r
+\r
+typedef long fixed;\r
+\r
+typedef struct {int x,y;} tilept;\r
+typedef struct {fixed x,y;} globpt;\r
+\r
+typedef struct\r
+{\r
+  int  x1,x2,leftclip,rightclip;// first pixel of wall (may not be visable)\r
+  unsigned     height1,height2,color,walllength,side;\r
+       long    planecoord;\r
+} walltype;\r
+\r
+typedef enum\r
+  {nothing,playerobj,bonusobj,orcobj,batobj,skeletonobj,trollobj,demonobj,\r
+  mageobj,pshotobj,bigpshotobj,mshotobj,inertobj,bounceobj,grelmobj\r
+  ,gateobj} classtype;\r
+\r
+typedef enum {north,east,south,west,northeast,southeast,southwest,\r
+                 northwest,nodir} dirtype;             // a catacombs 2 carryover\r
+\r
+\r
+typedef struct statestruct\r
+{\r
+       int             shapenum;\r
+       int             tictime;\r
+       void    (*think) ();\r
+       struct  statestruct     *next;\r
+} statetype;\r
+\r
+\r
+typedef struct objstruct\r
+{\r
+  enum {no,yes}        active;\r
+  int          ticcount;\r
+  classtype    obclass;\r
+  statetype    *state;\r
+\r
+  boolean      shootable;\r
+  boolean      tileobject;             // true if entirely inside one tile\r
+\r
+  long         distance;\r
+  dirtype      dir;\r
+  fixed        x,y;\r
+  unsigned     tilex,tiley;\r
+  int          viewx;\r
+  unsigned     viewheight;\r
+\r
+  int          angle;\r
+  int          hitpoints;\r
+  long         speed;\r
+\r
+  unsigned     size;                   // global radius for hit rect calculation\r
+  fixed                xl,xh,yl,yh;    // hit rectangle\r
+\r
+  int          temp1,temp2;\r
+  struct       objstruct       *next,*prev;\r
+} objtype;\r
+\r
+\r
+typedef        struct\r
+{\r
+       int             difficulty;\r
+       int             mapon;\r
+       int             bolts,nukes,potions,keys[4],scrolls[8];\r
+       long    score;\r
+       int             body,shotpower;\r
+} gametype;\r
+\r
+typedef        enum    {ex_stillplaying,ex_died,ex_warped,ex_resetgame\r
+       ,ex_loadedgame,ex_victorious,ex_abort} exittype;\r
+\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_MAIN DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern char            str[80],str2[20];\r
+extern unsigned        tedlevelnum;\r
+extern boolean         tedlevel;\r
+extern gametype        gamestate;\r
+extern exittype        playstate;\r
+\r
+\r
+void NewGame (void);\r
+boolean        SaveTheGame(int file);\r
+boolean        LoadTheGame(int file);\r
+void ResetGame(void);\r
+void ShutdownId (void);\r
+void InitGame (void);\r
+void Quit (char *error);\r
+void TEDDeath(void);\r
+void DemoLoop (void);\r
+void SetupScalePic (unsigned picnum);\r
+void SetupScaleWall (unsigned picnum);\r
+void SetupScaling (void);\r
+void main (void);\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_GAME DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern unsigned        latchpics[NUMLATCHPICS];\r
+extern unsigned        tileoffsets[NUMTILE16];\r
+extern unsigned        textstarts[27];\r
+\r
+\r
+#define        L_CHARS         0\r
+#define L_NOSHOT       1\r
+#define L_SHOTBAR      2\r
+#define L_NOBODY       3\r
+#define L_BODYBAR      4\r
+\r
+\r
+void ScanInfoPlane (void);\r
+void ScanText (void);\r
+void SetupGameLevel (void);\r
+void Victory (void);\r
+void Died (void);\r
+void NormalScreen (void);\r
+void DrawPlayScreen (void);\r
+void LoadLatchMem (void);\r
+void FizzleFade (unsigned source, unsigned dest,\r
+       unsigned width,unsigned height, boolean abortable);\r
+void FizzleOut (int showlevel);\r
+void FreeUpMemory (void);\r
+void GameLoop (void);\r
+\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_PLAY DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern ControlInfo     c;\r
+extern boolean         running,slowturn;\r
+\r
+extern int                     bordertime;\r
+\r
+extern byte            tilemap[MAPSIZE][MAPSIZE];\r
+extern objtype         *actorat[MAPSIZE][MAPSIZE];\r
+extern byte            spotvis[MAPSIZE][MAPSIZE];\r
+\r
+extern objtype         objlist[MAXACTORS],*new,*obj,*player;\r
+\r
+extern unsigned        farmapylookup[MAPSIZE];\r
+extern byte            *nearmapylookup[MAPSIZE];\r
+extern byte            update[];\r
+\r
+extern boolean         godmode,singlestep;\r
+extern int                     extravbls;\r
+\r
+extern int                     mousexmove,mouseymove;\r
+extern int                     pointcount,pointsleft;\r
+\r
+\r
+void CenterWindow(word w,word h);\r
+void DebugMemory (void);\r
+void PicturePause (void);\r
+int  DebugKeys (void);\r
+void CheckKeys (void);\r
+void InitObjList (void);\r
+void GetNewObj (boolean usedummy);\r
+void RemoveObj (objtype *gone);\r
+void PollControlls (void);\r
+void PlayLoop (void);\r
+\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_STATE DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+void SpawnNewObj (unsigned x, unsigned y, statetype *state, unsigned size);\r
+void SpawnNewObjFrac (long x, long y, statetype *state, unsigned size);\r
+boolean CheckHandAttack (objtype *ob);\r
+void T_DoDamage (objtype *ob);\r
+boolean Walk (objtype *ob);\r
+void ChaseThink (objtype *obj, boolean diagonal);\r
+void MoveObj (objtype *ob, long move);\r
+boolean Chase (objtype *ob, boolean diagonal);\r
+\r
+extern dirtype opposite[9];\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_TRACE DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+int FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max);\r
+int BackTrace (int finish);\r
+void ForwardTrace (void);\r
+int FinishWall (void);\r
+void InsideCorner (void);\r
+void OutsideCorner (void);\r
+void FollowWalls (void);\r
+\r
+extern boolean aborttrace;\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_DRAW DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+#define MAXWALLS       50\r
+#define DANGERHIGH     45\r
+\r
+#define        MIDWALL         (MAXWALLS/2)\r
+\r
+//==========================================================================\r
+\r
+extern tilept  tile,lasttile,focal,left,mid,right;\r
+\r
+extern globpt  edge,view;\r
+\r
+extern unsigned screenloc[3];\r
+extern unsigned freelatch;\r
+\r
+extern int screenpage;\r
+\r
+extern boolean         fizzlein;\r
+\r
+extern long lasttimecount;\r
+\r
+extern int firstangle,lastangle;\r
+\r
+extern fixed prestep;\r
+\r
+extern int traceclip,tracetop;\r
+\r
+extern fixed sintable[ANGLES+ANGLES/4],*costable;\r
+\r
+extern fixed   viewx,viewy,viewsin,viewcos;                    // the focal point\r
+extern int     viewangle;\r
+\r
+extern fixed scale,scaleglobal;\r
+extern unsigned slideofs;\r
+\r
+extern int zbuffer[VIEWXH+1];\r
+\r
+extern walltype        walls[MAXWALLS],*leftwall,*rightwall;\r
+\r
+\r
+extern fixed   tileglobal;\r
+extern fixed   focallength;\r
+extern fixed   mindist;\r
+extern int             viewheight;\r
+extern fixed scale;\r
+\r
+extern int     walllight1[NUMFLOORS];\r
+extern int     walldark1[NUMFLOORS];\r
+extern int     walllight2[NUMFLOORS];\r
+extern int     walldark2[NUMFLOORS];\r
+\r
+//==========================================================================\r
+\r
+void   DrawLine (int xl, int xh, int y,int color);\r
+void   DrawWall (walltype *wallptr);\r
+void   TraceRay (unsigned angle);\r
+fixed  FixedByFrac (fixed a, fixed b);\r
+void   TransformPoint (fixed gx, fixed gy, int *screenx, unsigned *screenheight);\r
+fixed  TransformX (fixed gx, fixed gy);\r
+int    FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max);\r
+void   ForwardTrace (void);\r
+int    FinishWall (void);\r
+int    TurnClockwise (void);\r
+int    TurnCounterClockwise (void);\r
+void   FollowWall (void);\r
+\r
+void   NewScene (void);\r
+void   BuildTables (void);\r
+\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_SCALE DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+\r
+#define COMPSCALECODESTART     (65*6)          // offset to start of code in comp scaler\r
+\r
+typedef struct\r
+{\r
+       unsigned        codeofs[65];\r
+       unsigned        start[65];\r
+       unsigned        width[65];\r
+       byte            code[];\r
+}      t_compscale;\r
+\r
+typedef struct\r
+{\r
+       unsigned        width;\r
+       unsigned        codeofs[64];\r
+}      t_compshape;\r
+\r
+\r
+extern unsigned        scaleblockwidth,\r
+               scaleblockheight,\r
+               scaleblockdest;\r
+\r
+extern byte    plotpix[8];\r
+extern byte    bitmasks1[8][8];\r
+extern byte    bitmasks2[8][8];\r
+\r
+\r
+extern t_compscale _seg *scaledirectory[MAXSCALE+1];\r
+extern t_compshape _seg *shapedirectory[NUMSCALEPICS];\r
+extern memptr                  walldirectory[NUMSCALEWALLS];\r
+extern unsigned        shapesize[MAXSCALE+1];\r
+\r
+void           DeplanePic (int picnum);\r
+void ScaleShape (int xcenter, t_compshape _seg *compshape, unsigned scale);\r
+unsigned       BuildCompShape (t_compshape _seg **finalspot);\r
+\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_ASM DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern unsigned        wallheight      [VIEWWIDTH];\r
+extern unsigned        wallwidth       [VIEWWIDTH];\r
+extern unsigned        wallseg         [VIEWWIDTH];\r
+extern unsigned        wallofs         [VIEWWIDTH];\r
+extern unsigned        screenbyte      [VIEWWIDTH];\r
+extern unsigned        screenbit       [VIEWWIDTH];\r
+extern unsigned        bitmasks        [64];\r
+\r
+extern long            wallscalecall;\r
+\r
+void   ScaleWalls (void);\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_WIZ DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+#define MAXHANDHEIGHT  72\r
+\r
+extern long    lastnuke;\r
+extern int             handheight;\r
+extern int             boltsleft;\r
+\r
+/*\r
+=============================================================================\r
+\r
+                                                C3_ACT1 DEFINITIONS\r
+\r
+=============================================================================\r
+*/\r
+\r
+extern statetype s_trollouch;\r
+extern statetype s_trolldie1;\r
+\r
+\r
+extern statetype s_orcpause;\r
+\r
+extern statetype s_orc1;\r
+extern statetype s_orc2;\r
+extern statetype s_orc3;\r
+extern statetype s_orc4;\r
+\r
+extern statetype s_orcattack1;\r
+extern statetype s_orcattack2;\r
+extern statetype s_orcattack3;\r
+\r
+extern statetype s_orcouch;\r
+\r
+extern statetype s_orcdie1;\r
+extern statetype s_orcdie2;\r
+extern statetype s_orcdie3;\r
+\r
+\r
+extern statetype s_demonouch;\r
+extern statetype s_demondie1;\r
+\r
+extern statetype s_mageouch;\r
+extern statetype s_magedie1;\r
+\r
+extern statetype s_grelouch;\r
+extern statetype s_greldie1;\r
+\r
+extern statetype s_batdie1;\r