\r
#define MAXPAGE 4\r
\r
+#define BDOFSCONV (unsigned __near)\r
+#define BOFS page[1].data\r
+#define DOFS page[0].data\r
+\r
/*\r
* typedefs of the game variables!\r
*/\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
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
+#define MAPPLANES 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
+ mapl_t layerdata[MAPPLANES]; // 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
joyMultXH,joyMultYH;\r
} JoystickDef;\r
\r
-typedef struct// instat\r
-{\r
- boolean IN_Started;\r
+typedef struct instat {\r
boolean CapsLock;\r
ScanCode CurCode,LastCode;\r
-} in_status_t;\r
+\r
+ boolean Keyboard[NumCodes];\r
+ boolean Paused;\r
+ char LastASCII;\r
+ ScanCode LastScan;\r
+} inst_t;\r
\r
typedef struct// inconfig\r
{\r
- in_status_t instat;\r
+ boolean IN_Started;\r
//\r
// configuration variables\r
//\r
- boolean Keyboard[NumCodes],\r
- JoysPresent[MaxJoys],\r
+ boolean JoysPresent[MaxJoys],\r
MousePresent,\r
JoyPadPresent;\r
\r
// Global variables\r
- boolean Paused;\r
- char LastASCII;\r
- ScanCode LastScan;\r
-\r
KeyboardDef KbdDefs[MaxKbds];\r
JoystickDef JoyDefs[MaxJoys];\r
+ inst_t *inst;\r
} in_info_t;\r
\r
//==========================================================================\r
} kurokku_t;\r
\r
//===================================//\r
-#define PALSIZE 768\r
+#define PALSIZE 768\r
#define NUMCHUNKS 416 //keen\r
+#define MAXSCANLINES 240 // size of ylookup table\r
+\r
+typedef struct\r
+{\r
+ int width,height;\r
+} pictabletype;\r
+\r
//video\r
typedef struct\r
{\r
+ word tileHeight, tileWidth; //defined by mapfile\r
+ word quadwh; //preproccessed quad size of tilewidth and tileheight\r
+} tile_dimention_t;\r
+\r
+#define MAXSCROLLEDGES 6\r
+typedef struct\r
+{\r
+ unsigned panx,pany; // panning adjustments inside port in pixels\r
+ unsigned pansx,pansy;\r
+ unsigned panadjust; // panx/pany adjusted by screen resolution\r
+ int hscrollblocks,vscrollblocks;\r
+ int hscrolledge[MAXSCROLLEDGES],vscrolledge[MAXSCROLLEDGES];\r
+} pan_t;\r
+\r
+typedef struct\r
+{\r
+ //ylookup[MAXSCANLINES],\r
unsigned int offscreen_ofs;\r
unsigned int pattern_ofs;\r
+// unsigned bufferofs,linewidth,displayofs;\r
+ pan_t pan;\r
+\r
} ofs_t; //unfinished\r
\r
typedef struct\r
{\r
- char old_mode; //old video mode before game!\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
- //doslib origi vars\r
+//doslib origi vars\r
byte far * omemptr;\r
byte vga_draw_stride;\r
byte vga_draw_stride_limit; // further X clipping\r
- //end of doslib origi vars\r
+//end of doslib origi vars\r
boolean __near rss; //render sprite switch\r
boolean __near bgps; //bg preservation render switch between old and new\r
+} vga_state_t;\r
+\r
+typedef struct\r
+{\r
+ boolean VL_Started,VL_Initiated;\r
+ char old_mode; //old video mode before game!\r
+ sword curr_mode; //modex curent mode\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
+ vga_state_t vga_state;\r
sword __near sprifilei; //player file's i\r
nibble __near p; //render page number\r
nibble __near sp; //show page number(for showpage)\r
nibble sfip; //shinku_fps_indicator_page; // we're on page 1 now, shinku(). follow along please or it will not be visible.\r
ofs_t ofs; //offset vars used for doslib\r
word vh; //video combined height\r
+ tile_dimention_t td;\r
//0000word startclk; float clk, tickclk; //timer\r
-//newer vars\r
-//TODO: find out how they are used\r
- byte grneeded[NUMCHUNKS];\r
+ //wolf3d vars\r
+ boolean screenfaded;\r
+ word bordercolor;\r
+ boolean fastpalette;\r
+ byte far palette1[256][3],far palette2[256][3];\r
+ pictabletype _seg *pictable;\r
} video_t;\r
\r
//from scroll16\r
int tx,ty; //appears to be the top left tile position on the viewable screen map\r
word dxThresh,dyThresh; //Threshold for physical tile switch\r
video_t *video; //pointer to game variables of the video\r
+ kurokku_t *kurokku; //pointer to game variables of the kurokku\r
nibble __near *p; // pointer to video's render page num\r
nibble __near *sp; // pointer to video's show page num\r
int dx, dy; // draw row and col var\r
//from 16_mm\r
//==========================================================================\r
\r
-#define MAXBLOCKS 1024\r
-#define MAXUMBS 12\r
+#define MAXBLOCKS 800//kd=1300 wolf3d=700 cata=600\r
\r
typedef struct mmblockstruct\r
{\r
- word start,length;\r
- //word start; dword length;\r
- word blob; //for data larger than 64k\r
+ unsigned start,length;\r
unsigned attributes;\r
memptr *useptr; // pointer to the segment start\r
struct mmblockstruct far *next;\r
} mmblocktype;\r
\r
+typedef struct mmshowmemoryinfo\r
+{\r
+ word x,y;\r
+ mmblocktype far *scan;\r
+} mmshowmemoryinfo_t;\r
+\r
typedef struct\r
{\r
dword nearheap,farheap,EMSmem,XMSmem,mainmem;\r
\r
typedef struct\r
{\r
- memptr bufferseg;\r
boolean mmstarted, bombonerror, mmerror;\r
void far *farheap;\r
#ifdef __BORLANDC__\r
#ifdef __WATCOMC__\r
void __near *nearheap;\r
#endif\r
- unsigned int EMSVer;\r
- word numUMBs,UMBbase[MAXUMBS];\r
- word totalEMSpages, freeEMSpages, EMSpagesmapped, EMSHandle, EMSPageFrame;\r
- //dword numUMBs,UMBbase[MAXUMBS];\r
+//---- unsigned int EMSVer;\r
+//---- word numUMBs,UMBbase[MAXUMBS];\r
+//---- word totalEMSpages, freeEMSpages, EMSpagesmapped, EMSHandle, EMSPageFrame;\r
+//---- dword numUMBs,UMBbase[MAXUMBS];\r
mmblocktype far mmblocks[MAXBLOCKS],far *mmhead,far *mmfree,far *mmrover,far *mmnew;\r
+ memptr bufferseg; //Allocates bufferseg misc buffer\r
} mminfo_t;\r
\r
//==========================================================================\r
MainPagesUsed,\r
PMNumBlocks;\r
long PMFrameCount;\r
- PageListStruct far *PMPages;\r
- memptr/*__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
\r
//==========================================================================\r
\r
+//for 16_sd\r
+//==========================================================================\r
+#pragma pack(push,1)\r
+typedef struct imf_entry\r
+{\r
+ byte reg,data;\r
+ word delay;\r
+} imf_entry_t;\r
+#pragma pack(pop)\r
+\r
+typedef struct\r
+{\r
+ volatile unsigned long irq0_ticks;//=0;\r
+ volatile unsigned int irq0_cnt,irq0_add,irq0_max;//=0;\r
+ imf_entry_t* imf_music;//=NULL;\r
+ imf_entry_t* imf_play_ptr;//=NULL;\r
+ imf_entry_t* imf_music_end;//=NULL;\r
+ word imf_delay_countdown;//=0;\r
+} sd_t;\r
+\r
+//==========================================================================\r
+\r
//from 16_ca\r
//==========================================================================\r
\r
+#define NOMAPS\r
+//#define NOGRAPHICS\r
+#define NOAUDIO\r
+\r
+#define MAPHEADERLINKED\r
+//#define GRHEADERLINKED\r
+#define AUDIOHEADERLINKED\r
+\r
#define NUMMAPS 4//39\r
-#define MAPPLANES 3\r
-#define NUMSNDCHUNKS 84\r
+#define NUMSNDCHUNKS 4//3\r
+//#define NUMPICS 4//132//wolf3d wl6\r
+\r
+#define STRUCTPIC 0\r
+#define CASVT dword //*start var type\r
+\r
+\r
+#define DATADIR "data/"\r
+#define GDICTNAME DATADIR"vgadict."\r
+#define GHEADNAME DATADIR"vgahead."\r
+#define GFILENAME DATADIR"vgagraph."\r
+#define EXTENSION "hb1"\r
+\r
\r
typedef struct\r
{\r
word bit0,bit1; // 0-255 is a character, > is a pointer to a node\r
} huffnode;\r
\r
+typedef struct\r
+{\r
+ long planestart[3];\r
+ unsigned planelength[3];\r
+ unsigned width,height;\r
+ char name[16];\r
+} maptype;\r
+\r
typedef struct\r
{\r
int mapon, mapnum;\r
- //__SEGA *mapheaderseg[NUMMAPS];\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
+ int maphandle; // handle to MAPTEMP / GAMEMAPS\r
+ int grhandle; // handle to EGAGRAPH\r
+ int audiohandle; // handle to AUDIOT / AUDIO\r
} ca_handle_t;\r
-\r
+/*\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
+*/\r
typedef struct //TODO: USE THIS!!!!\r
{\r
byte ca_levelbit,ca_levelnum;\r
ca_handle_t file; //files to open\r
ca_mapinfo_t camap;\r
\r
- memptr/*__SEGA*/ mapsegs[MAP_LAYERS];\r
- memptr/*__SEGA*/ *grsegs[NUMCHUNKS];\r
+ byte _seg *tinf;//?? where in the id engine is this used and what is it? --sparky4\r
+ unsigned _seg *mapsegs[MAPPLANES];\r
+ void _seg *grsegs[NUMCHUNKS];\r
byte far grneeded[NUMCHUNKS];\r
- memptr/*byte _seg*/ *audiosegs[NUMSNDCHUNKS];\r
+ word _seg *audiosegs[NUMSNDCHUNKS];//long\r
\r
- long _seg *grstarts; // array of offsets in egagraph, -1 for sparse\r
- long _seg *audiostarts; // array of offsets in audio / audiot\r
+ CASVT _seg *grstarts; // array of offsets in egagraph, -1 for sparse//long\r
+ CASVT _seg *audiostarts; // array of offsets in audio / audiot//long\r
\r
- //misc memptr\r
- memptr tinf[4];\r
+#ifdef GRHEADERLINKED\r
+ huffnode *grhuffman;\r
+#else\r
+ huffnode grhuffman[255];\r
+#endif\r
+\r
+#ifdef AUDIOHEADERLINKED\r
+ huffnode *audiohuffman;\r
+#else\r
+ huffnode audiohuffman[255];\r
+#endif\r
\r
- huffnode huffnode;\r
+ CASVT chunkcomplen,chunkexplen;//long\r
\r
+ sd_t sd;\r
//TODO: extend! and learn from keen/wolf/catacomb's code wwww\r
memptr spribuff;\r
} ca_t;\r
//==========================================================================\r
\r
//actual global game varables!\r
-typedef enum {\r
- ENGI_EXIT,\r
- ENGI_QUIT,\r
- ENGI_RUN,\r
- ENGI_INPUT,\r
- ENGI_PAUSE\r
-} engi_stat_t;\r
+/*typedef struct {\r
+ boolean clearmem;\r
+} vidsw_t;\r
\r
-typedef struct\r
+typedef struct {\r
+ vidsw_t vsw;\r
+} sw_t;*/\r
+\r
+\r
+\r
+typedef struct glob_game_vars\r
{\r
video_t video; // video settings variable\r
ca_t ca; // ca stuff\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
+ in_info_t in; // 16_in info\r
player_t player[MaxPlayers]; // player vars\r
-//==== word far* clockw; /* 18.2hz clock */\r
+ map_view_t mv[4];\r
+// sw_t sw;\r
+ boolean DLStarted;\r
} global_game_variables_t;\r
\r
#ifdef __WATCOMC__\r