]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_tdef.h
[16_ca needs huge amounts of work and I should remember what needs to be done soon...
[16.git] / src / lib / 16_tdef.h
index e99be1de54cea98f560801cab6b930117025655c..08b9699624d2e35b85c6abcaa82bc49d6794ae71 100755 (executable)
@@ -64,86 +64,40 @@ typedef struct {
        byte *palette;\r
 } planar_buf_t;\r
 \r
-//===========================================================================//\r
-\r
-//TODO: 16_mm and 16_ca must handle this\r
-typedef struct {\r
-       bitmap_t far *pcximg;           //I will probibaly use this --sparky4\r
-       //planar_buf_t far *pbdata;     //old\r
-       word tileHeight, tileWidth;     //defined by mapfile\r
-       unsigned int rows, cols;\r
-       byte    imgname[8];             //image file of tileset (set to 8 because DOS ^^;)\r
-} tiles_t;     //seems to be the tileset properties\r
-\r
-//TODO: 16_mm and 16_ca must handle this\r
-//TODO: add variables from 16_ca\r
-//#define __NEWMAPTILEDATAVARS__\r
-#define MAPLAYERS 4\r
-#ifdef __NEWMAPTILEDATAVARS__\r
-#define MAPTILESPTR            layertile[0]\r
-#define MAPTILESPTK            layertile[k]\r
-#define MAPDATAPTR             layerdata[0]\r
-#define MAPDATAPTK             layerdata[k]\r
-#else\r
-#define MAPTILESPTR            tiles//layertile[0]\r
-#define MAPTILESPTK            tiles//layertile[k]\r
-#define MAPDATAPTR             data//layerdata[0]\r
-#define MAPDATAPTK             data//layerdata[k]\r
-#endif\r
-typedef struct {\r
-       //long          planestart[3];\r
-       //unsigned      planelength[3];\r
-       byte *data;                     //TODO: 16_mm and 16_ca must handle this\r
-       byte far *layerdata[MAPLAYERS]; // mapdata for multilayer (map index values for rendering which image on the tile)\r
-#ifndef __NEWMAPTILEDATAVARS__\r
-       tiles_t *tiles;         //TODO: 16_mm and 16_ca must handle this\r
-#else\r
-       tiles_t far *layertile[MAPLAYERS];      // tilesets for layers (currently ony 4 can be loaded wwww)\r
-#endif\r
-       int width, height;              //this has to be signed!\r
-       byte name[16];\r
-} map_t;\r
-\r
-//===================================//\r
-\r
-typedef struct{\r
-       word tw;                /* screen width in tiles */\r
-       word th;                /* screen height in tiles */\r
-       word tilesw;            /* virtual screen width in tiles */\r
-       word tilesh;            /* virtual screen height in tiles */\r
-       sword tilemidposscreenx;        /* middle tile x position */    /* needed for scroll system to work accordingly */\r
-       sword tilemidposscreeny;        /* middle tile y position */    /* needed for scroll system to work accordingly */\r
-       sword tileplayerposscreenx;     /* player position on screen */ /* needed for scroll and map system to work accordingly */\r
-       sword tileplayerposscreeny;     /* player position on screen */ /* needed for scroll and map system to work accordingly */\r
-} pagetileinfo_t;\r
-\r
-typedef struct {\r
-       nibble/*word*/ id;      /* the Identification number of the page~ For layering~ */\r
-       byte far* data; /* the data for the page */\r
-       pagetileinfo_t  ti;\r
-       word dx;                /* col we are viewing on virtual screen (on page[0]) */ /* off screen buffer on the left size */\r
-       word dy;                /* row we are viewing on virtual screen (on page[0]) */ /* off screen buffer on the top size */\r
-       word sw;                /* screen width */      /* resolution */\r
-       word sh;                /* screen heigth */     /* resolution */\r
-       word width;             /* virtual width of the page */\r
-       word height;    /* virtual height of the page */\r
-       word stridew;                   /* width/4 */   /* VGA */\r
-       word pagesize;                  /* page size */\r
-       word pi;                                /* increment page by this much to preserve location */\r
-       int tlx,tly;\r
-//newer vars\r
-//TODO: find where they are used\r
-       sword delta;                    // How much should we shift the page for smooth scrolling\r
-} page_t;\r
-\r
 //from 16_sprit.h\r
 #ifdef __WATCOMC__\r
+#include <hw/vga/vrl.h>\r
+\r
+typedef struct vrs_container{\r
+       // Size of a .vrs blob in memory\r
+       // minus header\r
+       dword data_size;\r
+       union{\r
+               byte far *buffer;\r
+               struct vrs_header far *vrs_hdr;\r
+       };\r
+       // Array of corresponding vrl line offsets\r
+       vrl1_vgax_offset_t **vrl_line_offsets;\r
+} vrs_container_t;\r
+\r
+typedef struct vrl_container{\r
+       // Size of a .vrl blob in memory\r
+       // minus header\r
+       dword data_size;\r
+       union{\r
+               byte far *buffer;\r
+               struct vrl1_vgax_header far *vrl_header;\r
+       };\r
+       // Pointer to a corresponding vrl line offsets struct\r
+       vrl1_vgax_offset_t *line_offsets;\r
+} vrl_container_t;\r
+\r
 typedef struct sprite\r
 {\r
        // VRS container from which we will extract animation and image data\r
-       struct vrs_container *spritesheet;\r
+       vrs_container_t spritesheet;\r
        // Container for a vrl sprite\r
-       struct vrl_container *sprite_vrl_cont;\r
+       vrl_container_t sprite_vrl_cont;\r
        // Current sprite id\r
        int curr_spri_id;\r
        // Index of a current sprite in an animation sequence\r
@@ -177,7 +131,7 @@ typedef     struct
        word speed;             //entity speed!\r
        word spt;               //speed per tile\r
 #ifdef __WATCOMC__\r
-       sprite_t *spri; // sprite used by entity\r
+       sprite_t spri; // sprite used by entity\r
 #endif\r
        sword hp; //hitpoints of the entity\r
        nibble overdraww, overdrawh;    // how many pixels to "overdraw" so that moving sprites with edge pixels don't leave streaks.\r
@@ -185,8 +139,106 @@ typedef   struct
        nibble /*int*/ persist_aniframe;    // gonna be increased to 1 before being used, so 0 is ok for default\r
 } entity_t;\r
 \r
+typedef        struct\r
+{\r
+       int x; //entity exact position on the viewable map\r
+       int y; //entity exact position on the viewable map\r
+       int tx; //entity tile position on the viewable map\r
+       int ty; //entity tile position on the viewable map\r
+\r
+#ifdef __WATCOMC__\r
+       sprite_t spri; // sprite used by entity\r
+#endif\r
+       sword hp; //hitpoints of the entity\r
+} static_map_entity_t;\r
+\r
+//===========================================================================//\r
+\r
+//TODO: 16_mm and 16_ca must handle this\r
+typedef struct {\r
+#ifdef __WATCOMC__\r
+       sprite_t *spri;                 // I will probibaly use this --sparky4\r
+#endif\r
+       word tileHeight, tileWidth;     //defined by mapfile\r
+       unsigned int rows, cols;\r
+       byte    imgname[8];             //image file of tileset (set to 8 because DOS ^^;)\r
+} tiles_t;     //seems to be the tileset properties\r
+\r
+//TODO: 16_mm and 16_ca must handle this\r
+//TODO: add variables from 16_ca\r
+typedef struct {\r
+       byte    layername[8];\r
+       byte    *data;                  //TODO: 16_mm and 16_ca must handle this\r
+} mapl_t;      //map layer array type def\r
+\r
+#define MAP_LAYERS 3\r
+typedef struct {\r
+       //long          planestart[3];\r
+       //unsigned      planelength[3];\r
+       mapl_t layerdata[MAP_LAYERS];   // mapdata for multilayer (map index values for rendering which image on the tile)\r
+       tiles_t *tiles;         //TODO: 16_mm and 16_ca must handle this        // tilesets for layers (currently ony 4 can be loaded wwww)\r
+       int width, height;              //this has to be signed!\r
+       byte name[16];\r
+} map_t;\r
+\r
+//===================================//\r
+\r
+typedef struct{\r
+       word tw;                                /* screen width in tiles */\r
+       word th;                                /* screen height in tiles */\r
+       word tilesw;                            /* virtual screen width in tiles */\r
+       word tilesh;                            /* virtual screen height in tiles */\r
+       sword tilemidposscreenx;        /* middle tile x position */    /* needed for scroll system to work accordingly */\r
+       sword tilemidposscreeny;        /* middle tile y position */    /* needed for scroll system to work accordingly */\r
+       sword tileplayerposscreenx;     /* player position on screen */ /* needed for scroll and map system to work accordingly */\r
+       sword tileplayerposscreeny;     /* player position on screen */ /* needed for scroll and map system to work accordingly */\r
+} pagetileinfo_t;\r
+\r
+typedef struct {\r
+       nibble/*word*/ id;      /* the Identification number of the page~ For layering~ */\r
+       byte far* data; /* the data for the page */\r
+       pagetileinfo_t ti;      // the tile information of the page\r
+       word dx;                /* col we are viewing on virtual screen (on page[0]) */ /* off screen buffer on the left size */\r
+       word dy;                /* row we are viewing on virtual screen (on page[0]) */ /* off screen buffer on the top size */\r
+       word sw;                /* screen width */      /* resolution */\r
+       word sh;                /* screen heigth */     /* resolution */\r
+       word width;             /* virtual width of the page */\r
+       word height;    /* virtual height of the page */\r
+       word stridew;   /* width/4 */   /* VGA */\r
+       word pagesize;  /* page size */\r
+       word pi;                /* increment page by this much to preserve location */\r
+       int tlx,tly;\r
+//newer vars\r
+//TODO: find where they are used\r
+       sword delta;                    // How much should we shift the page for smooth scrolling\r
+} page_t;\r
+\r
 //from 16_in\r
 //==========================================================================\r
+#define        KeyInt          9       // The keyboard ISR number\r
+\r
+//\r
+// mouse constants\r
+//\r
+#define        MReset          0\r
+#define        MButtons        3\r
+#define        MDelta          11\r
+\r
+#define        MouseInt        0x33\r
+//#define      Mouse(x)        _AX = x,geninterrupt(MouseInt)\r
+\r
+//\r
+// joystick constants\r
+//\r
+#define        JoyScaleMax             32768\r
+#define        JoyScaleShift   8\r
+#define        MaxJoyValue             5000\r
+\r
+#define        MaxPlayers      4\r
+#define        MaxKbds         2\r
+#define        MaxJoys         2\r
+#define        NumCodes        128\r
+\r
 typedef        byte            ScanCode;\r
 \r
 typedef        enum            {\r
@@ -202,12 +254,10 @@ typedef   enum            {
                                                motion_None = 0,\r
                                                motion_Right = 1,motion_Down = 1\r
                                        } Motion;\r
-typedef        enum            {\r
-                                               dir_North,//dir_NorthEast,\r
-                                               dir_West,//dir_Nortinest,\r
-                                               dir_None,\r
-                                               dir_East,//,dir_SouthEast,\r
-                                               dir_South,//dir_Soutinest,\r
+typedef        enum            {               // Quick lookup for total direction\r
+                                               /*dir_NorthWest,        */dir_North,/*  dir_NorthEast,*/\r
+                                               dir_West,               dir_None,       dir_East,\r
+                                               /*dir_SouthWest,        */dir_South/*,  dir_SouthEast*/\r
                                        } Direction;\r
 typedef        struct          {\r
                                                boolean near    button0,button1,button2,button3;\r
@@ -237,6 +287,33 @@ typedef    struct          {
                                                                        joyMultXH,joyMultYH;\r
                                        } JoystickDef;\r
 \r
+typedef struct instat {\r
+       boolean         CapsLock;\r
+       ScanCode        CurCode,LastCode;\r
+\r
+       boolean         Keyboard[NumCodes];\r
+       boolean         Paused;\r
+       char            LastASCII;\r
+       ScanCode        LastScan;\r
+} inst_t;\r
+\r
+typedef struct// inconfig\r
+{\r
+       boolean         IN_Started;\r
+//\r
+// configuration variables\r
+//\r
+       boolean         JoysPresent[MaxJoys],\r
+                                       MousePresent,\r
+                                       JoyPadPresent;\r
+\r
+//     Global variables\r
+       KeyboardDef     KbdDefs[MaxKbds];\r
+       JoystickDef     JoyDefs[MaxJoys];\r
+       //struct        instat  *inst;\r
+       inst_t  *inst;\r
+} in_info_t;\r
+\r
 //==========================================================================\r
 \r
 typedef        struct\r
@@ -244,10 +321,10 @@ typedef   struct
        entity_t near   enti;\r
 #ifdef __WATCOMC__\r
        //struct sprite *spri;  //supposively the sprite sheet data\r
-       memptr          gr;\r
+       //memptr                gr;\r
 #endif\r
-       bitmap_t        *data;          //supposively the sprite sheet data//old format\r
-       bitmap_t        bmp;\r
+//     bitmap_t        *data;          //supposively the sprite sheet data//old format\r
+//     bitmap_t        bmp;\r
 \r
        //input\r
        byte near               pdir;   //previous direction~ used in IN_16 in IN_ReadControl()\r
@@ -277,18 +354,20 @@ typedef struct
        nibble wcpu;    //stored value of cpu type\r
 } kurokku_t;\r
 \r
+//===================================//\r
+#define     PALSIZE            768\r
+#define NUMCHUNKS      416     //keen\r
 //video\r
 typedef struct\r
 {\r
        unsigned int offscreen_ofs;\r
        unsigned int pattern_ofs;\r
-} ofs_t;\r
-#define NUMCHUNKS      416     //keen\r
+} ofs_t;       //unfinished\r
 \r
 typedef struct\r
 {\r
        char old_mode;          //old video mode before game!\r
-       byte palette[768];              //palette array\r
+       byte palette[PALSIZE], dpal[PALSIZE];   //palette array\r
        page_t page[MAXPAGE];   //can be used as a pointer to root page[0]\r
        word vmem_remain;       //remaining video memory\r
        byte num_of_pages;      //number of actual pages\r
@@ -354,7 +433,7 @@ typedef struct mmblockstruct
 {\r
        word    start,length;\r
        //word  start;  dword length;\r
-       word    blob;   //for data larger than 64k\r
+//++++ word    blob;   //for data larger than 64k\r
        unsigned        attributes;\r
        memptr          *useptr;        // pointer to the segment start\r
        struct mmblockstruct far *next;\r
@@ -372,7 +451,7 @@ typedef struct
        boolean         mmstarted, bombonerror, mmerror;\r
        void far        *farheap;\r
 #ifdef __BORLANDC__\r
-       void    *nearheap;\r
+       void            *nearheap;\r
 #endif\r
 #ifdef __WATCOMC__\r
        void __near     *nearheap;\r
@@ -488,8 +567,8 @@ typedef struct
                                        MainPagesUsed,\r
                                        PMNumBlocks;\r
        long                    PMFrameCount;\r
-       PageListStruct  far *PMPages;\r
-       __SEGA *PMSegPages;\r
+       PageListStruct  far *PMPages,\r
+                                       _seg *PMSegPages;\r
        pm_mmi_t        mm;\r
        pm_emmi_t       emm;\r
        pm_xmmi_t       xmm;\r
@@ -503,6 +582,7 @@ typedef struct
 \r
 #define NUMMAPS                4//39\r
 #define MAPPLANES              3\r
+#define NUMSNDCHUNKS           84\r
 \r
 typedef struct\r
 {\r
@@ -512,24 +592,47 @@ typedef struct
 typedef struct\r
 {\r
        int             mapon, mapnum;\r
-       //__SEGA        *mapsegs[4];\r
-       //__SEGA        *mapheaderseg[NUMMAPS];\r
-       //__SEGA        *tinf;\r
-       memptr  mapsegs;\r
+       //maptype               _seg    *mapheaderseg[NUMMAPS];\r
 } ca_mapinfo_t;\r
 \r
 typedef struct\r
 {\r
        int                     maphandle[4];           // handle to MAPTEMP / GAMEMAPS\r
+       int                     grhandle[4];            // handle to EGAGRAPH\r
+       int                     audiohandle[4]; // handle to AUDIOT / AUDIO\r
 } ca_handle_t;\r
-\r
-typedef struct\r
+/*\r
+ 16/wf3d8086/id_ca.c:byte              _seg    *tinf;\r
+16/wf3d8086/id_ca.c:unsigned   _seg    *mapsegs[MAPPLANES];\r
+16/wf3d8086/id_ca.c:maptype            _seg    *mapheaderseg[NUMMAPS];\r
+16/wf3d8086/id_ca.c:byte               _seg    *audiosegs[NUMSNDCHUNKS];\r
+16/wf3d8086/id_ca.c:void               _seg    *grsegs[NUMCHUNKS];\r
+16/wf3d8086/id_ca.c:long               _seg *grstarts; // array of offsets in egagraph, -1 for sparse\r
+16/wf3d8086/id_ca.c:long               _seg *audiostarts;      // array of offsets in audio / audiot\r
+16/wf3d8086/id_ca.c:   grstarts = (long _seg *)FP_SEG(&EGAhead);\r
+16/wf3d8086/id_ca.c:   tinf = (byte _seg *)FP_SEG(&maphead);\r
+16/wf3d8086/id_ca.c:           pos = ((mapfiletype     _seg *)tinf)->headeroffsets[i];\r
+16/wf3d8086/id_ca.c:   audiostarts = (long _seg *)FP_SEG(&audiohead);\r
+16/wf3d8086/id_ca.c:           ((mapfiletype _seg *)tinf)->RLEWtag);\r
+16/wf3d8086/id_ca.c:           ((mapfiletype _seg *)tinf)->RLEWtag);\r
+16/wf3d8086/id_ca.c:                                   source = (byte _seg *)bufferseg+(pos-bufferstart);*/\r
+typedef struct //TODO: USE THIS!!!!\r
 {\r
-       byte            ca_levelbit,ca_levelnum;\r
-       ca_handle_t     file;           //files to open\r
+       byte    ca_levelbit,ca_levelnum;\r
+       ca_handle_t             file;           //files to open\r
        ca_mapinfo_t    camap;\r
-       __SEGA  *grsegs[NUMCHUNKS];\r
-       byte            far     grneeded[NUMCHUNKS];\r
+\r
+       unsigned        _seg    *mapsegs[MAP_LAYERS];\r
+       void            _seg    *grsegs[NUMCHUNKS];\r
+       byte            far             grneeded[NUMCHUNKS];\r
+       word            _seg *audiosegs[NUMSNDCHUNKS];//long\r
+\r
+       word            _seg    *grstarts;      // array of offsets in egagraph, -1 for sparse//long\r
+       word            _seg    *audiostarts;   // array of offsets in audio / audiot//long\r
+\r
+       //misc memptr\r
+       byte            _seg    *tinf[4];\r
+\r
        huffnode huffnode;\r
 \r
        //TODO: extend! and learn from keen/wolf/catacomb's code wwww\r
@@ -540,21 +643,25 @@ typedef struct
 \r
 //actual global game varables!\r
 typedef enum {\r
-       ENGI_EXIT,\r
        ENGI_QUIT,\r
        ENGI_RUN,\r
-       ENGI_INPUT,\r
+       ENGI_MENU,\r
        ENGI_PAUSE\r
 } engi_stat_t;\r
+//ENGI_INPUT,\r
 \r
 typedef struct\r
 {\r
+       engi_stat_t     engi_stat;\r
        video_t video;  // video settings variable\r
        ca_t            ca;     // ca stuff\r
        pm_t            pm;     // pm stuff\r
-       loghandle_t handle;     //handles for file logging\r
-       kurokku_t kurokku;      //clock struct\r
-       mminfo_t mm; mminfotype mmi;\r
+       loghandle_t     handle; //handles for file logging\r
+       kurokku_t       kurokku;        //clock struct\r
+       mminfo_t        mm; mminfotype  mmi;    // mm stuff\r
+       in_info_t       in;             // 16_in info\r
+       player_t        player[MaxPlayers];     // player vars\r
+       map_view_t      mv[4];\r
 } global_game_variables_t;\r
 \r
 #ifdef __WATCOMC__\r