\r
//#define THREEBYTEGRSTARTS\r
//https://github.com/open-watcom/open-watcom-v2/issues/279#issuecomment-244587566 for _seg\r
+//http://www.shikadi.net/moddingwiki/GameMaps_Format for info on the code\r
/*\r
=============================================================================\r
\r
extern byte far maphead;\r
extern byte mapdict;\r
extern byte far audiohead;\r
-extern byte audiodict;\r
+extern byte audiodict;*/\r
\r
+void CA_CannotOpen(char *string, global_game_variables_t *gvar);\r
\r
-long _seg *grstarts; // array of offsets in egagraph, -1 for sparse\r
+/*long _seg *grstarts; // array of offsets in egagraph, -1 for sparse\r
long _seg *audiostarts; // array of offsets in audio / audiot\r
\r
#ifdef GRHEADERLINKED\r
-huffnode *grhuffman;\r
+huffnode *gvar->ca.grhuffman;\r
#else\r
-huffnode grhuffman[255];\r
+huffnode gvar->ca.grhuffman[255];\r
#endif\r
\r
#ifdef AUDIOHEADERLINKED\r
int maphandle; // handle to MAPTEMP / GAMEMAPS\r
int audiohandle; // handle to AUDIOT / AUDIO\r
\r
-long chunkcomplen,chunkexplen;\r
+long c hunkcomplen,c hunkexplen;\r
\r
SDMode oldsoundmode;\r
\r
void CAL_DialogDraw (char *title,unsigned numcache);\r
void CAL_DialogUpdate (void);\r
void CAL_DialogFinish (void);*/\r
-//void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,unsigned length);\r
+void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,\r
+ unsigned length);\r
\r
\r
#ifdef THREEBYTEGRSTARTS\r
=\r
============================\r
*/\r
-/*++++\r
-void CAL_GetGrChunkLength (int chunk)\r
+\r
+void CAL_GetGrChunkLength (int chunk,global_game_variables_t *gvar)\r
{\r
- lseek(grhandle,GRFILEPOS(chunk),SEEK_SET);\r
- read(grhandle,&chunkexplen,sizeof(chunkexplen));\r
- chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4;\r
-}*/\r
+ lseek(gvar->ca.file.grhandle,GRFILEPOS(chunk),SEEK_SET);\r
+ read(gvar->ca.file.grhandle,&gvar->ca.chunkexplen,sizeof(gvar->ca.chunkexplen));\r
+ gvar->ca.chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4;\r
+}\r
\r
\r
/*\r
return false;\r
\r
size = filelength(handle);\r
+#ifdef __DEBUG_CA__\r
+ if(dbg_debugca>0){\r
+ printf("===============================================================================\n");\r
+ printf(" CA_ReadFile\n");\r
+ printf("===============================================================================\n");\r
+ //%04x\r
+ printf(" ptr=%Fp\n", ptr);\r
+ printf(" *ptr=%Fp\n", *ptr);\r
+ printf(" &ptr=%Fp\n", &ptr);\r
+ }\r
+#endif\r
if(!CA_FarRead(handle,*ptr,size, gvar))\r
{\r
close(handle);\r
=\r
======================\r
*/\r
-////++++ enable!\r
-/*void CAL_SetupGrFile (void)\r
+\r
+void CAL_SetupGrFile (global_game_variables_t *gvar)\r
{\r
+ char fname[13];\r
int handle;\r
memptr compseg;\r
\r
#ifdef GRHEADERLINKED\r
\r
-#if GRMODE == EGAGR\r
- grhuffman = (huffnode *)&EGAdict;\r
- grstarts = (long _seg *)FP_SEG(&EGAhead);\r
-#endif\r
-#if GRMODE == CGAGR\r
- grhuffman = (huffnode *)&CGAdict;\r
- grstarts = (long _seg *)FP_SEG(&CGAhead);\r
-#endif\r
+ gvar->ca.grhuffman = (huffnode *)&VGAdict;\r
+ grstarts = (long _seg *)FP_SEG(&VGAhead);\r
\r
- CAL_OptimizeNodes (grhuffman);\r
+ CAL_OptimizeNodes (gvar->ca.grhuffman);\r
\r
#else\r
\r
// load ???dict.ext (huffman dictionary for graphics files)\r
//\r
\r
- if ((handle = open(GREXT"DICT."EXT,\r
+ strcpy(fname,GDICTNAME);\r
+ strcat(fname,EXTENSION);\r
+\r
+ if ((handle = open(fname,\r
O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
- Quit (gvar, "Can't open "GREXT"DICT."EXT"!");\r
+ CA_CannotOpen(fname,gvar);\r
\r
- read(handle, &grhuffman, sizeof(grhuffman));\r
+ read(handle, &gvar->ca.grhuffman, sizeof(gvar->ca.grhuffman));\r
close(handle);\r
- CAL_OptimizeNodes (grhuffman);\r
+ CAL_OptimizeNodes (gvar->ca.grhuffman);\r
//\r
// load the data offsets from ???head.ext\r
//\r
- MM_GetPtr (MEMPTR grstarts,(NUMCHUNKS+1)*FILEPOSSIZE);\r
+ MM_GetPtr (MEMPTR gvar->ca.grstarts,(NUMCHUNKS+1)*FILEPOSSIZE, gvar);\r
+\r
+ strcpy(fname,GHEADNAME);\r
+ strcat(fname,EXTENSION);\r
\r
- if ((handle = open(GREXT"HEAD."EXT,\r
+ if ((handle = open(fname,\r
O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
- Quit (gvar, "Can't open "GREXT"HEAD."EXT"!");\r
+ CA_CannotOpen(fname,gvar);\r
\r
- CA_FarRead(handle, (memptr)grstarts, (NUMCHUNKS+1)*FILEPOSSIZE);\r
+ CA_FarRead(handle, (memptr)gvar->ca.grstarts, (NUMCHUNKS+1)*FILEPOSSIZE, gvar);\r
\r
close(handle);\r
\r
//\r
// Open the graphics file, leaving it open until the game is finished\r
//\r
- grhandle = open(GREXT"GRAPH."EXT, O_RDONLY | O_BINARY);\r
- if (grhandle == -1)\r
- Quit (gvar, "Cannot open "GREXT"GRAPH."EXT"!");\r
+ strcpy(fname,GFILENAME);\r
+ strcat(fname,EXTENSION);\r
+\r
+ gvar->ca.file.grhandle = open(fname, O_RDONLY | O_BINARY);\r
+ if (gvar->ca.file.grhandle == -1)\r
+ CA_CannotOpen(fname,gvar);\r
\r
\r
//\r
// load the pic and sprite headers into the arrays in the data segment\r
//\r
#if NUMPICS>0\r
- MM_GetPtr(MEMPTR pictable,NUMPICS*sizeof(pictabletype));\r
- CAL_GetGrChunkLength(STRUCTPIC); // position file pointer\r
- MM_GetPtr(&compseg,chunkcomplen);\r
- CA_FarRead (grhandle,compseg,chunkcomplen);\r
- CAL_HuffExpand (compseg, (byte far *)pictable,NUMPICS*sizeof(pictabletype),grhuffman);\r
- MM_FreePtr(&compseg);\r
+ MM_GetPtr(MEMPTR gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar);\r
+ CAL_GetGrChunkLength(STRUCTPIC,gvar); // position file pointer\r
+ MM_GetPtr(&compseg,gvar->ca.chunkcomplen, gvar);\r
+ CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen,gvar);\r
+ CAL_HuffExpand (compseg, (byte far *)gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman);\r
+ MM_FreePtr(&compseg,gvar);\r
#endif\r
\r
#if NUMPICM>0\r
MM_GetPtr(MEMPTR picmtable,NUMPICM*sizeof(pictabletype));\r
CAL_GetGrChunkLength(STRUCTPICM); // position file pointer\r
- MM_GetPtr(&compseg,chunkcomplen);\r
- CA_FarRead (grhandle,compseg,chunkcomplen);\r
- CAL_HuffExpand (compseg, (byte far *)picmtable,NUMPICS*sizeof(pictabletype),grhuffman);\r
+ MM_GetPtr(&compseg,gvar->ca.chunkcomplen);\r
+ CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen);\r
+ CAL_HuffExpand (compseg, (byte far *)picmtable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman);\r
MM_FreePtr(&compseg);\r
#endif\r
\r
#if NUMSPRITES>0\r
MM_GetPtr(MEMPTR spritetable,NUMSPRITES*sizeof(spritetabletype));\r
CAL_GetGrChunkLength(STRUCTSPRITE); // position file pointer\r
- MM_GetPtr(&compseg,chunkcomplen);\r
- CA_FarRead (grhandle,compseg,chunkcomplen);\r
- CAL_HuffExpand (compseg, (byte far *)spritetable,NUMSPRITES*sizeof(spritetabletype),grhuffman);\r
+ MM_GetPtr(&compseg,gvar->ca.chunkcomplen);\r
+ CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen);\r
+ CAL_HuffExpand (compseg, (byte far *)spritetable,NUMSPRITES*sizeof(spritetabletype),gvar->ca.grhuffman);\r
MM_FreePtr(&compseg);\r
#endif\r
\r
-}*/\r
+}\r
\r
//==========================================================================\r
\r
\r
void CAL_SetupMapFile (global_game_variables_t *gvar)\r
{\r
+#ifndef MAPHEADERLINKED\r
int handle;\r
long length;\r
+#endif\r
\r
//\r
// load maphead.ext (offsets and tileinfo for map file)\r
MM_GetPtr (MEMPTR gvar->ca.tinf,length,gvar);\r
CA_FarRead(handle, gvar->ca.tinf, length,gvar);\r
close(handle);\r
-#else\r
+//#else\r
\r
- tinf = (byte _seg *)FP_SEG(&maphead);\r
+ gvar->ca.tinf = (byte _seg *)FP_SEG(&maphead);\r
\r
#endif\r
\r
// open the data file\r
//\r
//TODO: multiple files\r
- if ((gvar->ca.file.maphandle[0] = open("data/test.map",\r
+ if ((gvar->ca.file.maphandle = open("data/test.map",\r
O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
Quit (gvar, "Can't open data/test.map!");\r
/*#ifdef MAPHEADERLINKED\r
- if ((maphandle = open("GAMEMAPS."EXTENSION,\r
+ if ((maphandle = open("GAMEMAPS.16"ENSION,\r
O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
- Quit ("Can't open GAMEMAPS."EXTENSION"!");\r
+ Quit ("Can't open GAMEMAPS.16"ENSION"!");\r
#else\r
- if ((maphandle = open("MAPTEMP."EXTENSION,\r
+ if ((maphandle = open("MAPTEMP.16"ENSION,\r
O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
- Quit ("Can't open MAPTEMP."EXTENSION"!");\r
+ Quit ("Can't open MAPTEMP.16"ENSION"!");\r
#endif*/\r
}\r
\r
// load maphead.ext (offsets and tileinfo for map file)\r
//\r
#ifndef AUDIOHEADERLINKED\r
- if ((handle = open("AUDIOHED."EXT,\r
+ if ((handle = open("AUDIOHED.16",\r
O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
- Quit (gvar, "Can't open AUDIOHED."EXT"!");\r
+ Quit (gvar, "Can't open AUDIOHED.16""!");\r
length = filelength(handle);\r
MM_GetPtr (MEMPTR audiostarts,length);\r
CA_FarRead(handle, (byte far *)audiostarts, length);\r
// open the data file\r
//\r
#ifndef AUDIOHEADERLINKED\r
- if ((audiohandle = open("AUDIOT."EXT,\r
+ if ((audiohandle = open("AUDIOT.16",\r
O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
- Quit (gvar, "Can't open AUDIOT."EXT"!");\r
+ Quit (gvar, "Can't open AUDIOT.16""!");\r
#else\r
- if ((audiohandle = open("AUDIO."EXT,\r
+ if ((audiohandle = open("AUDIO.16",\r
O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
- Quit (gvar, "Can't open AUDIO."EXT"!");\r
+ Quit (gvar, "Can't open AUDIO.16""!");\r
#endif\r
}*/\r
\r
#endif\r
close(gvar->handle.showmemhandle);\r
\r
- close(*(gvar->ca.file.maphandle));\r
-/*++++\r
- close(grhandle);\r
- close(audiohandle);*/\r
+ close(gvar->ca.file.maphandle);\r
+ close(gvar->ca.file.grhandle);\r
+ close(gvar->ca.file.audiohandle);\r
}\r
\r
//===========================================================================\r
\r
// MDM begin - (GAMERS EDGE)\r
//\r
- if (!FindFile("AUDIO."EXT,NULL,2))\r
+ if (!FindFile("AUDIO.16",NULL,2))\r
Quit (gvar, "CA_CacheAudioChunk(): Can't find audio files.");\r
//\r
// MDM end\r
\r
//===========================================================================\r
\r
-//++++#if GRMODE == EGAGR\r
+//????#if GRMODE == EGAGR\r
+#if 0\r
\r
/*\r
======================\r
=\r
======================\r
*/\r
-/*++++\r
+\r
unsigned static sheight,swidth;\r
boolean static dothemask;\r
\r
swidth = width;\r
dothemask = domask;\r
\r
-asm mov ax,[segment]\r
-asm mov ds,ax // source and dest are in same segment, and all local\r
+ __asm {\r
+ mov ax,[segment]\r
+ mov ds,ax // source and dest are in same segment, and all local\r
\r
-asm mov bx,[source]\r
-asm mov di,[dest]\r
+ mov bx,[source]\r
+ mov di,[dest]\r
\r
-asm mov bp,[pixshift]\r
-asm shl bp,1\r
-asm mov bp,WORD PTR [shifttabletable+bp] // bp holds pointer to shift table\r
+ mov bp,[pixshift]\r
+ shl bp,1\r
+ mov bp,WORD PTR [shifttabletable+bp] // bp holds pointer to shift table\r
\r
-asm cmp [ss:dothemask],0\r
-asm je skipmask\r
+ cmp [ss:dothemask],0\r
+ je skipmask\r
\r
//\r
// table shift the mask\r
//\r
-asm mov dx,[ss:sheight]\r
-\r
+ mov dx,[ss:sheight]\r
+#ifdef __BORLANDC__\r
+ }\r
+#endif\r
domaskrow:\r
-\r
-asm mov BYTE PTR [di],255 // 0xff first byte\r
-asm mov cx,ss:[swidth]\r
-\r
+#ifdef __BORLANDC__\r
+ __asm {\r
+#endif\r
+ mov BYTE PTR [di],255 // 0xff first byte\r
+ mov cx,ss:[swidth]\r
+#ifdef __BORLANDC__\r
+ }\r
+#endif\r
domaskbyte:\r
-\r
-asm mov al,[bx] // source\r
-asm not al\r
-asm inc bx // next source byte\r
-asm xor ah,ah\r
-asm shl ax,1\r
-asm mov si,ax\r
-asm mov ax,[bp+si] // table shift into two bytes\r
-asm not ax\r
-asm and [di],al // and with first byte\r
-asm inc di\r
-asm mov [di],ah // replace next byte\r
-\r
-asm loop domaskbyte\r
-\r
-asm inc di // the last shifted byte has 1s in it\r
-asm dec dx\r
-asm jnz domaskrow\r
-\r
+#ifdef __BORLANDC__\r
+ __asm {\r
+#endif\r
+ mov al,[bx] // source\r
+ not al\r
+ inc bx // next source byte\r
+ xor ah,ah\r
+ shl ax,1\r
+ mov si,ax\r
+ mov ax,[bp+si] // table shift into two bytes\r
+ not ax\r
+ and [di],al // and with first byte\r
+ inc di\r
+ mov [di],ah // replace next byte\r
+\r
+ loop domaskbyte\r
+\r
+ inc di // the last shifted byte has 1s in it\r
+ dec dx\r
+ jnz domaskrow\r
+#ifdef __BORLANDC__\r
+ }\r
+#endif\r
skipmask:\r
-\r
+#ifdef __BORLANDC__\r
+ __asm {\r
+#endif\r
//\r
// table shift the data\r
//\r
-asm mov dx,ss:[sheight]\r
-asm shl dx,1\r
-asm shl dx,1 // four planes of data\r
-\r
+ mov dx,ss:[sheight]\r
+ shl dx,1\r
+ shl dx,1 // four planes of data\r
+#ifdef __BORLANDC__\r
+ }\r
+#endif\r
dodatarow:\r
-\r
-asm mov BYTE PTR [di],0 // 0 first byte\r
-asm mov cx,ss:[swidth]\r
-\r
+#ifdef __BORLANDC__\r
+ __asm {\r
+#endif\r
+ mov BYTE PTR [di],0 // 0 first byte\r
+ mov cx,ss:[swidth]\r
+#ifdef __BORLANDC__\r
+ }\r
+#endif\r
dodatabyte:\r
+#ifdef __BORLANDC__\r
+ __asm {\r
+#endif\r
+ mov al,[bx] // source\r
+ inc bx // next source byte\r
+ xor ah,ah\r
+ shl ax,1\r
+ mov si,ax\r
+ mov ax,[bp+si] // table shift into two bytes\r
+ or [di],al // or with first byte\r
+ inc di\r
+ mov [di],ah // replace next byte\r
\r
-asm mov al,[bx] // source\r
-asm inc bx // next source byte\r
-asm xor ah,ah\r
-asm shl ax,1\r
-asm mov si,ax\r
-asm mov ax,[bp+si] // table shift into two bytes\r
-asm or [di],al // or with first byte\r
-asm inc di\r
-asm mov [di],ah // replace next byte\r
-\r
-asm loop dodatabyte\r
+ loop dodatabyte\r
\r
-asm inc di // the last shifted byte has 0s in it\r
-asm dec dx\r
-asm jnz dodatarow\r
+ inc di // the last shifted byte has 0s in it\r
+ dec dx\r
+ jnz dodatarow\r
\r
//\r
// done\r
//\r
\r
-asm mov ax,ss // restore data segment\r
-asm mov ds,ax\r
+ mov ax,ss // restore data segment\r
+ mov ds,ax\r
+ }\r
\r
}\r
\r
#endif\r
-*/\r
+\r
//===========================================================================\r
\r
/*\r
//\r
// expand the unshifted shape\r
//\r
- CAL_HuffExpand (compressed, &dest->data[0],smallplane*2,grhuffman);\r
+ CAL_HuffExpand (compressed, &dest->data[0],smallplane*2,gvar->ca.grhuffman);\r
\r
#endif\r
\r
//\r
// expand the unshifted shape\r
//\r
- CAL_HuffExpand (compressed, &dest->data[0],smallplane*5,grhuffman);\r
+ CAL_HuffExpand (compressed, &dest->data[0],smallplane*5,gvar->ca.grhuffman);\r
\r
//\r
// make the shifts!\r
MM_GetPtr (&grsegs[chunk],expanded);\r
if (mmerror)\r
return;\r
- CAL_HuffExpand (source,grsegs[chunk],expanded,grhuffman);\r
+ CAL_HuffExpand (source,grsegs[chunk],expanded,gvar->ca.grhuffman);\r
}\r
}\r
*/\r
\r
compressed = GRFILEPOS(next)-pos;\r
\r
- lseek(grhandle,pos,SEEK_SET);\r
+ lseek(gvar->ca.file.grhandle,pos,SEEK_SET);\r
\r
if (compressed<=BUFFERSIZE)\r
{\r
- CA_FarRead(grhandle,bufferseg,compressed);\r
+ CA_FarRead(gvar->ca.file.grhandle,bufferseg,compressed);\r
source = bufferseg;\r
}\r
else\r
if (mmerror)\r
return;\r
MM_SetLock (&bigbufferseg,true);\r
- CA_FarRead(grhandle,bigbufferseg,compressed);\r
+ CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed);\r
source = bigbufferseg;\r
}\r
\r
byte far *source;\r
int next;\r
\r
- gvar->video.grneeded[chunk] |= ca_levelbit; // make sure it doesn't get removed\r
+ gvar->ca.grneeded[chunk] |= ca_levelbit; // make sure it doesn't get removed\r
if (grsegs[chunk])\r
{\r
MM_SetPurge (&grsegs[chunk],0);\r
\r
// MDM begin - (GAMERS EDGE)\r
//\r
- if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
+ if (!FindFile("EGAGRAPH.16",NULL,2))\r
Quit (gvar, "CA_CacheGrChunk(): Can't find graphics files.");\r
//\r
// MDM end\r
\r
compressed = GRFILEPOS(next)-pos;\r
\r
- lseek(grhandle,pos,SEEK_SET);\r
+ lseek(gvar->ca.file.grhandle,pos,SEEK_SET);\r
\r
if (compressed<=BUFFERSIZE)\r
{\r
- CA_FarRead(grhandle,bufferseg,compressed);\r
+ CA_FarRead(gvar->ca.file.grhandle,bufferseg,compressed);\r
source = bufferseg;\r
}\r
else\r
{\r
MM_GetPtr(&bigbufferseg,compressed);\r
MM_SetLock (&bigbufferseg,true);\r
- CA_FarRead(grhandle,bigbufferseg,compressed);\r
+ CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed);\r
source = bigbufferseg;\r
}\r
\r
\r
// MDM begin - (GAMERS EDGE)\r
//\r
-// if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
+// if (!FindFile("EGAGRAPH.16",NULL,2))\r
// Quit (gvar, "CA_CacheMarks(): Can't find graphics files.");\r
//\r
// MDM end\r
next = NUMCHUNKS; // read pos to posend\r
}\r
\r
- lseek(grhandle,pos,SEEK_SET);\r
- CA_FarRead(grhandle,(gvar->mm.bufferseg),endpos-pos,gvar);\r
+ lseek(gvar->ca.file.grhandle,pos,SEEK_SET);\r
+ CA_FarRead(gvar->ca.file.grhandle,(gvar->mm.bufferseg),endpos-pos,gvar);\r
bufferstart = pos;\r
bufferend = endpos;\r
source = bufferseg;\r
if (mmerror)\r
return;\r
MM_SetLock (&bigbufferseg,true);\r
- lseek(grhandle,pos,SEEK_SET);\r
- CA_FarRead(grhandle,bigbufferseg,compressed,gvar);\r
+ lseek(gvar->ca.file.grhandle,pos,SEEK_SET);\r
+ CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed,gvar);\r
source = bigbufferseg;\r
}\r
\r
if (dialog && finishcachebox)\r
finishcachebox();\r
}*/\r
+\r
+void CA_CannotOpen(char *string, global_game_variables_t *gvar)\r
+{\r
+ char str[30];\r
+\r
+ strcpy(str,"Can't open ");\r
+ strcat(str,string);\r
+ strcat(str,"!\n");\r
+ Quit (gvar, str);\r
+}\r