X-Git-Url: http://4ch.mooo.com/gitweb/?p=16.git;a=blobdiff_plain;f=src%2Flib%2F16_tdef.h;h=08b9699624d2e35b85c6abcaa82bc49d6794ae71;hp=9df1eee955c4eab926d400bec6617e2e4355e198;hb=c8d0f894b450f6dc3b80fbe28fedff4d424ce294;hpb=cccf74b8d5b618b293330755da222138dcf619cc diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index 9df1eee9..08b96996 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -66,12 +66,38 @@ typedef struct { //from 16_sprit.h #ifdef __WATCOMC__ +#include + +typedef struct vrs_container{ + // Size of a .vrs blob in memory + // minus header + dword data_size; + union{ + byte far *buffer; + struct vrs_header far *vrs_hdr; + }; + // Array of corresponding vrl line offsets + vrl1_vgax_offset_t **vrl_line_offsets; +} vrs_container_t; + +typedef struct vrl_container{ + // Size of a .vrl blob in memory + // minus header + dword data_size; + union{ + byte far *buffer; + struct vrl1_vgax_header far *vrl_header; + }; + // Pointer to a corresponding vrl line offsets struct + vrl1_vgax_offset_t *line_offsets; +} vrl_container_t; + typedef struct sprite { // VRS container from which we will extract animation and image data - struct vrs_container *spritesheet; + vrs_container_t spritesheet; // Container for a vrl sprite - struct vrl_container *sprite_vrl_cont; + vrl_container_t sprite_vrl_cont; // Current sprite id int curr_spri_id; // Index of a current sprite in an animation sequence @@ -87,15 +113,52 @@ typedef struct sprite } sprite_t; #endif +//newer structs +typedef struct +{ + int x; //entity exact position on the viewable map + int y; //entity exact position on the viewable map + int tx; //entity tile position on the viewable map + int ty; //entity tile position on the viewable map + int triggerx; //entity's trigger box tile position on the viewable map + int triggery; //entity's trigger box tile position on the viewable map +// int sheetsetx; //NOT USED YET! entity sprite sheet set on the image x +// int sheetsety; //NOT USED YET! entity sprite sheet set on the image y + nibble d; //direction to render sprite!! wwww + nibble pred; //prev. direction for animation changing + word dire; //sprite in use + nibble q; //loop variable for anumation and locking the playing to compleate the animation cycle to prevent issues with misalignment www + word speed; //entity speed! + word spt; //speed per tile +#ifdef __WATCOMC__ + sprite_t spri; // sprite used by entity +#endif + sword hp; //hitpoints of the entity + nibble overdraww, overdrawh; // how many pixels to "overdraw" so that moving sprites with edge pixels don't leave streaks. + // if the sprite's edge pixels are clear anyway, you can set this to 0. + nibble /*int*/ persist_aniframe; // gonna be increased to 1 before being used, so 0 is ok for default +} entity_t; + +typedef struct +{ + int x; //entity exact position on the viewable map + int y; //entity exact position on the viewable map + int tx; //entity tile position on the viewable map + int ty; //entity tile position on the viewable map + +#ifdef __WATCOMC__ + sprite_t spri; // sprite used by entity +#endif + sword hp; //hitpoints of the entity +} static_map_entity_t; + //===========================================================================// //TODO: 16_mm and 16_ca must handle this typedef struct { -// bitmap_t far *pcximg; // old #ifdef __WATCOMC__ sprite_t *spri; // I will probibaly use this --sparky4 #endif - //planar_buf_t far *pbdata; //old word tileHeight, tileWidth; //defined by mapfile unsigned int rows, cols; byte imgname[8]; //image file of tileset (set to 8 because DOS ^^;) @@ -121,10 +184,10 @@ typedef struct { //===================================// typedef struct{ - word tw; /* screen width in tiles */ - word th; /* screen height in tiles */ - word tilesw; /* virtual screen width in tiles */ - word tilesh; /* virtual screen height in tiles */ + word tw; /* screen width in tiles */ + word th; /* screen height in tiles */ + word tilesw; /* virtual screen width in tiles */ + word tilesh; /* virtual screen height in tiles */ sword tilemidposscreenx; /* middle tile x position */ /* needed for scroll system to work accordingly */ sword tilemidposscreeny; /* middle tile y position */ /* needed for scroll system to work accordingly */ sword tileplayerposscreenx; /* player position on screen */ /* needed for scroll and map system to work accordingly */ @@ -134,7 +197,7 @@ typedef struct{ typedef struct { nibble/*word*/ id; /* the Identification number of the page~ For layering~ */ byte far* data; /* the data for the page */ - pagetileinfo_t ti; + pagetileinfo_t ti; // the tile information of the page word dx; /* col we are viewing on virtual screen (on page[0]) */ /* off screen buffer on the left size */ word dy; /* row we are viewing on virtual screen (on page[0]) */ /* off screen buffer on the top size */ word sw; /* screen width */ /* resolution */ @@ -150,34 +213,32 @@ typedef struct { sword delta; // How much should we shift the page for smooth scrolling } page_t; -//newer structs -typedef struct -{ - int x; //entity exact position on the viewable map - int y; //entity exact position on the viewable map - int tx; //entity tile position on the viewable map - int ty; //entity tile position on the viewable map - int triggerx; //entity's trigger box tile position on the viewable map - int triggery; //entity's trigger box tile position on the viewable map -// int sheetsetx; //NOT USED YET! entity sprite sheet set on the image x -// int sheetsety; //NOT USED YET! entity sprite sheet set on the image y - nibble d; //direction to render sprite!! wwww - nibble pred; //prev. direction for animation changing - word dire; //sprite in use - nibble q; //loop variable for anumation and locking the playing to compleate the animation cycle to prevent issues with misalignment www - word speed; //entity speed! - word spt; //speed per tile -#ifdef __WATCOMC__ - sprite_t spri; // sprite used by entity -#endif - sword hp; //hitpoints of the entity - nibble overdraww, overdrawh; // how many pixels to "overdraw" so that moving sprites with edge pixels don't leave streaks. - // if the sprite's edge pixels are clear anyway, you can set this to 0. - nibble /*int*/ persist_aniframe; // gonna be increased to 1 before being used, so 0 is ok for default -} entity_t; - //from 16_in //========================================================================== +#define KeyInt 9 // The keyboard ISR number + +// +// mouse constants +// +#define MReset 0 +#define MButtons 3 +#define MDelta 11 + +#define MouseInt 0x33 +//#define Mouse(x) _AX = x,geninterrupt(MouseInt) + +// +// joystick constants +// +#define JoyScaleMax 32768 +#define JoyScaleShift 8 +#define MaxJoyValue 5000 + +#define MaxPlayers 4 +#define MaxKbds 2 +#define MaxJoys 2 +#define NumCodes 128 + typedef byte ScanCode; typedef enum { @@ -193,12 +254,10 @@ typedef enum { motion_None = 0, motion_Right = 1,motion_Down = 1 } Motion; -typedef enum { - dir_North,//dir_NorthEast, - dir_West,//dir_Nortinest, - dir_None, - dir_East,//,dir_SouthEast, - dir_South,//dir_Soutinest, +typedef enum { // Quick lookup for total direction + /*dir_NorthWest, */dir_North,/* dir_NorthEast,*/ + dir_West, dir_None, dir_East, + /*dir_SouthWest, */dir_South/*, dir_SouthEast*/ } Direction; typedef struct { boolean near button0,button1,button2,button3; @@ -228,6 +287,33 @@ typedef struct { joyMultXH,joyMultYH; } JoystickDef; +typedef struct instat { + boolean CapsLock; + ScanCode CurCode,LastCode; + + boolean Keyboard[NumCodes]; + boolean Paused; + char LastASCII; + ScanCode LastScan; +} inst_t; + +typedef struct// inconfig +{ + boolean IN_Started; +// +// configuration variables +// + boolean JoysPresent[MaxJoys], + MousePresent, + JoyPadPresent; + +// Global variables + KeyboardDef KbdDefs[MaxKbds]; + JoystickDef JoyDefs[MaxJoys]; + //struct instat *inst; + inst_t *inst; +} in_info_t; + //========================================================================== typedef struct @@ -235,7 +321,7 @@ typedef struct entity_t near enti; #ifdef __WATCOMC__ //struct sprite *spri; //supposively the sprite sheet data - memptr gr; + //memptr gr; #endif // bitmap_t *data; //supposively the sprite sheet data//old format // bitmap_t bmp; @@ -347,7 +433,7 @@ typedef struct mmblockstruct { word start,length; //word start; dword length; - word blob; //for data larger than 64k +//++++ word blob; //for data larger than 64k unsigned attributes; memptr *useptr; // pointer to the segment start struct mmblockstruct far *next; @@ -365,7 +451,7 @@ typedef struct boolean mmstarted, bombonerror, mmerror; void far *farheap; #ifdef __BORLANDC__ - void *nearheap; + void *nearheap; #endif #ifdef __WATCOMC__ void __near *nearheap; @@ -481,8 +567,8 @@ typedef struct MainPagesUsed, PMNumBlocks; long PMFrameCount; - PageListStruct far *PMPages; - __SEGA *PMSegPages; + PageListStruct far *PMPages, + _seg *PMSegPages; pm_mmi_t mm; pm_emmi_t emm; pm_xmmi_t xmm; @@ -496,6 +582,7 @@ typedef struct #define NUMMAPS 4//39 #define MAPPLANES 3 +#define NUMSNDCHUNKS 84 typedef struct { @@ -505,24 +592,47 @@ typedef struct typedef struct { int mapon, mapnum; - //__SEGA *mapsegs[4]; - //__SEGA *mapheaderseg[NUMMAPS]; - //__SEGA *tinf; - memptr mapsegs; + //maptype _seg *mapheaderseg[NUMMAPS]; } ca_mapinfo_t; typedef struct { int maphandle[4]; // handle to MAPTEMP / GAMEMAPS + int grhandle[4]; // handle to EGAGRAPH + int audiohandle[4]; // handle to AUDIOT / AUDIO } ca_handle_t; - -typedef struct +/* + 16/wf3d8086/id_ca.c:byte _seg *tinf; +16/wf3d8086/id_ca.c:unsigned _seg *mapsegs[MAPPLANES]; +16/wf3d8086/id_ca.c:maptype _seg *mapheaderseg[NUMMAPS]; +16/wf3d8086/id_ca.c:byte _seg *audiosegs[NUMSNDCHUNKS]; +16/wf3d8086/id_ca.c:void _seg *grsegs[NUMCHUNKS]; +16/wf3d8086/id_ca.c:long _seg *grstarts; // array of offsets in egagraph, -1 for sparse +16/wf3d8086/id_ca.c:long _seg *audiostarts; // array of offsets in audio / audiot +16/wf3d8086/id_ca.c: grstarts = (long _seg *)FP_SEG(&EGAhead); +16/wf3d8086/id_ca.c: tinf = (byte _seg *)FP_SEG(&maphead); +16/wf3d8086/id_ca.c: pos = ((mapfiletype _seg *)tinf)->headeroffsets[i]; +16/wf3d8086/id_ca.c: audiostarts = (long _seg *)FP_SEG(&audiohead); +16/wf3d8086/id_ca.c: ((mapfiletype _seg *)tinf)->RLEWtag); +16/wf3d8086/id_ca.c: ((mapfiletype _seg *)tinf)->RLEWtag); +16/wf3d8086/id_ca.c: source = (byte _seg *)bufferseg+(pos-bufferstart);*/ +typedef struct //TODO: USE THIS!!!! { - byte ca_levelbit,ca_levelnum; - ca_handle_t file; //files to open + byte ca_levelbit,ca_levelnum; + ca_handle_t file; //files to open ca_mapinfo_t camap; - __SEGA *grsegs[NUMCHUNKS]; - byte far grneeded[NUMCHUNKS]; + + unsigned _seg *mapsegs[MAP_LAYERS]; + void _seg *grsegs[NUMCHUNKS]; + byte far grneeded[NUMCHUNKS]; + word _seg *audiosegs[NUMSNDCHUNKS];//long + + word _seg *grstarts; // array of offsets in egagraph, -1 for sparse//long + word _seg *audiostarts; // array of offsets in audio / audiot//long + + //misc memptr + byte _seg *tinf[4]; + huffnode huffnode; //TODO: extend! and learn from keen/wolf/catacomb's code wwww @@ -533,21 +643,25 @@ typedef struct //actual global game varables! typedef enum { - ENGI_EXIT, ENGI_QUIT, ENGI_RUN, - ENGI_INPUT, + ENGI_MENU, ENGI_PAUSE } engi_stat_t; +//ENGI_INPUT, typedef struct { + engi_stat_t engi_stat; video_t video; // video settings variable ca_t ca; // ca stuff pm_t pm; // pm stuff - loghandle_t handle; //handles for file logging - kurokku_t kurokku; //clock struct - mminfo_t mm; mminfotype mmi; + loghandle_t handle; //handles for file logging + kurokku_t kurokku; //clock struct + mminfo_t mm; mminfotype mmi; // mm stuff + in_info_t in; // 16_in info + player_t player[MaxPlayers]; // player vars + map_view_t mv[4]; } global_game_variables_t; #ifdef __WATCOMC__