word offset;\r
} bitmap_t;\r
\r
+typedef struct {\r
+ byte far **data;\r
+ word ntiles; // the number of tiles\r
+ word twidth; // width of the tiles\r
+ word theight; // height of the tiles\r
+ byte *palette; // palette for the tile set\r
+} tileset_t;\r
+\r
+typedef struct {\r
+ byte far *plane[4]; // 4 planes of image data\r
+ word width; // width of the image (spread across 4 planes)\r
+ word height; // height of the image (spread across 4 planes)\r
+ word pwidth; // the number of bytes in each plane\r
+ byte *palette;\r
+} planar_buf_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
} sprite_t;\r
#endif\r
\r
-typedef struct {\r
- //byte far **data;\r
-//#ifdef __WATCOMC__\r
- //sprite_t *spri;\r
-//#endif\r
- bitmap_t far *data; // actual tileset info\r
-//in the bitmap_t\r
-// byte *palette; // palette for the tile set\r
- word ntiles; // the number of tiles\r
- word twidth; // width of the tiles\r
- word theight; // height of the tiles\r
- byte imgname[8]; // image filename of tileset\r
-} tileset_t;\r
+//newer structs\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
+ int triggerx; //entity's trigger box tile position on the viewable map\r
+ int triggery; //entity's trigger box tile position on the viewable map\r
+// int sheetsetx; //NOT USED YET! entity sprite sheet set on the image x\r
+// int sheetsety; //NOT USED YET! entity sprite sheet set on the image y\r
+ nibble d; //direction to render sprite!! wwww\r
+ nibble pred; //prev. direction for animation changing\r
+ word dire; //sprite in use\r
+ nibble q; //loop variable for anumation and locking the playing to compleate the animation cycle to prevent issues with misalignment www\r
+ word speed; //entity speed!\r
+ word spt; //speed per tile\r
+#ifdef __WATCOMC__\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
+ // if the sprite's edge pixels are clear anyway, you can set this to 0.\r
+ nibble /*int*/ persist_aniframe; // gonna be increased to 1 before being used, so 0 is ok for default\r
+} entity_t;\r
\r
-//not currently using\r
-typedef struct {\r
- byte far *plane[4]; // 4 planes of image data\r
- word width; // width of the image (spread across 4 planes)\r
- word height; // height of the image (spread across 4 planes)\r
- word pwidth; // the number of bytes in each plane\r
- byte *palette;\r
-} planar_buf_t;\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
-//tile properties\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
- //bitmap_t far *btdata; //old\r
- tileset_t tileset; //new\r
- word tileHeight, tileWidth;\r
- word rows, cols;\r
-} tiles_t;\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
-#define MAPLAYERS 4\r
-//#define __NEWMAPTILEDATAVARS__\r
-\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
+ 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
-#ifndef __NEWMAPTILEDATAVARS__\r
- byte *data; //TODO: 16_mm and 16_ca must handle this\r
- tiles_t *tiles; //TODO: 16_mm and 16_ca must handle this\r
-#else\r
- byte far *layerdata[MAPLAYERS]; //mapindex for specific layer\r
- tiles_t far *layertile[MAPLAYERS];\r
-#endif\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]; //mapname/maptitle\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
+ 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
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
+ 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
+ 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
-//newer structs\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
- int triggerx; //entity's trigger box tile position on the viewable map\r
- int triggery; //entity's trigger box tile position on the viewable map\r
-// int sheetsetx; //NOT USED YET! entity sprite sheet set on the image x\r
-// int sheetsety; //NOT USED YET! entity sprite sheet set on the image y\r
- nibble d; //direction to render sprite!! wwww\r
- nibble pred; //prev. direction for animation changing\r
- word dire; //sprite in use\r
- nibble q; //loop variable for anumation and locking the playing to compleate the animation cycle to prevent issues with misalignment www\r
- word speed; //entity speed!\r
- word spt; //speed per tile\r
-#ifdef __WATCOMC__\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
- // if the sprite's edge pixels are clear anyway, you can set this to 0.\r
- nibble /*int*/ persist_aniframe; // gonna be increased to 1 before being used, so 0 is ok for default\r
-} entity_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
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
joyMultXH,joyMultYH;\r
} JoystickDef;\r
\r
+/*typedef struct// inconfig\r
+{\r
+ boolean IN_Started;\r
+ boolean CapsLock;\r
+ ScanCode CurCode,LastCode;\r
+//\r
+// configuration variables\r
+//\r
+ boolean Keyboard[NumCodes],\r
+ 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
+} in_info_t;*/\r
+\r
//==========================================================================\r
\r
typedef struct\r
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
word clock_start; //timer start\r
word *clock; //current time on clock\r
boolean fpscap; //cap the fps var\r
+ 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
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
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
\r
#define NUMMAPS 4//39\r
#define MAPPLANES 3\r
+#define NUMSNDCHUNKS 84\r
\r
typedef struct\r
{\r
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
\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