]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
xcrollbroke
[16.git] / src / lib / 16_ca.c
index 1b3020790c144614ee94eff1eaf0b450f0a1cddf..d69989c32b1102853c861a77417c2aa1cb8d262d 100755 (executable)
@@ -36,8 +36,9 @@ loaded into the data segment
 #pragma warn -pro\r
 #pragma warn -use\r
 \r
-//#define THREEBYTEGRSTARTS\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
@@ -97,16 +98,17 @@ extern      byte    EGAdict;
 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
@@ -119,9 +121,9 @@ huffnode    audiohuffman[255];
 int                    grhandle;               // handle to EGAGRAPH\r
 int                    maphandle;              // handle to MAPTEMP / GAMEMAPS\r
 int                    audiohandle;    // handle to AUDIOT / AUDIO\r
-\r
+*/\r
 long           chunkcomplen,chunkexplen;\r
-\r
+/*\r
 SDMode         oldsoundmode;\r
 \r
 \r
@@ -129,20 +131,21 @@ SDMode            oldsoundmode;
 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
 #define FILEPOSSIZE    3\r
 //#define      GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff)\r
-long GRFILEPOS(int c, global_game_variables_t *gvar)\r
+CASVT GRFILEPOS(int c, global_game_variables_t *gvar)\r
 {\r
-       long value;\r
+       CASVT value;\r
        int     offset;\r
 \r
        offset = c*3;\r
 \r
-       value = *(long far *)(((byte far *)gvar->ca.grstarts)+offset);\r
+       value = *(CASVT far *)(((byte far *)gvar->ca.grstarts)+offset);\r
 \r
        value &= 0x00ffffffl;\r
 \r
@@ -153,7 +156,11 @@ long GRFILEPOS(int c, global_game_variables_t *gvar)
 };\r
 #else\r
 #define FILEPOSSIZE    4\r
-#define        GRFILEPOS(c) (gvar->ca.grstarts[c])\r
+//#define      GRFILEPOS(c) (gvar->ca.grstarts[c])\r
+CASVT GRFILEPOS(int c, global_game_variables_t *gvar)\r
+{\r
+       return gvar->ca.grstarts[c];\r
+}\r
 #endif\r
 \r
 /*\r
@@ -202,13 +209,13 @@ void CA_CloseDebug(global_game_variables_t *gvar)
 =\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,gvar),SEEK_SET);\r
+       read(gvar->ca.file.grhandle,&gvar->ca.chunkexplen,sizeof(gvar->ca.chunkexplen));\r
+       gvar->ca.chunkcomplen = GRFILEPOS(chunk+1,gvar)-GRFILEPOS(chunk,gvar)-4;\r
+}\r
 \r
 \r
 /*\r
@@ -1033,24 +1040,19 @@ dinorm:
 =\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
@@ -1058,23 +1060,29 @@ dinorm:
 // 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 (MEMPTRCONV 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
@@ -1084,42 +1092,48 @@ dinorm:
 //\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(MEMPTRCONV gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar);\r
+       CAL_GetGrChunkLength(STRUCTPIC,gvar);           // position file pointer\r
+       printf("CAL_SetupGrFile:\n");\r
+       printf("        gvar->ca.chunkcomplen size is %lu\n", gvar->ca.chunkcomplen);\r
+       MM_GetPtr(&compseg,gvar->ca.chunkcomplen,gvar);\r
+       IN_Ack(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
+       MM_GetPtr(MEMPTRCONV 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
+       MM_GetPtr(MEMPTRCONV 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
@@ -1145,9 +1159,9 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 #ifndef MAPHEADERLINKED\r
        if ((handle = open("maphead.mph",\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit (gvar, "Can't open maphead.mph");\r
+               Quit ("Can't open maphead.mph");\r
        length = filelength(handle);\r
-       MM_GetPtr (MEMPTR gvar->ca.tinf,length,gvar);\r
+       MM_GetPtr (MEMPTRCONV gvar->ca.tinf,length,gvar);\r
        CA_FarRead(handle, gvar->ca.tinf, length,gvar);\r
        close(handle);\r
 //#else\r
@@ -1162,15 +1176,15 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 //TODO: multiple files\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
+               Quit ("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
@@ -1194,11 +1208,11 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 // 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 ("Can't open AUDIOHED.16""!");\r
        length = filelength(handle);\r
-       MM_GetPtr (MEMPTR audiostarts,length);\r
+       MM_GetPtr (MEMPTRCONV audiostarts,length);\r
        CA_FarRead(handle, (byte far *)audiostarts, length);\r
        close(handle);\r
 #else\r
@@ -1211,13 +1225,13 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 // 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 ("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 ("Can't open AUDIO.16""!");\r
 #endif\r
 }*/\r
 \r
@@ -1322,14 +1336,14 @@ void CA_CacheAudioChunk (int chunk)
 \r
        if (audiosegs[chunk])\r
        {\r
-               MM_SetPurge (MEMPTR audiosegs[chunk],0);\r
+               MM_SetPurge (MEMPTRCONV audiosegs[chunk],0);\r
                return;                                                 // allready in memory\r
        }\r
 \r
 // MDM begin - (GAMERS EDGE)\r
 //\r
-       if (!FindFile("AUDIO."EXT,NULL,2))\r
-               Quit (gvar, "CA_CacheAudioChunk(): Can't find audio files.");\r
+       if (!FindFile("AUDIO.16",NULL,2))\r
+               Quit ("CA_CacheAudioChunk(): Can't find audio files.");\r
 //\r
 // MDM end\r
 \r
@@ -1344,7 +1358,7 @@ void CA_CacheAudioChunk (int chunk)
 \r
 #ifndef AUDIOHEADERLINKED\r
 \r
-       MM_GetPtr (MEMPTR audiosegs[chunk],compressed);\r
+       MM_GetPtr (MEMPTRCONV audiosegs[chunk],compressed);\r
        if (mmerror)\r
                return;\r
 \r
@@ -1369,7 +1383,7 @@ void CA_CacheAudioChunk (int chunk)
 \r
        expanded = *(long far *)source;\r
        source += 4;                    // skip over length\r
-       MM_GetPtr (MEMPTR audiosegs[chunk],expanded);\r
+       MM_GetPtr (MEMPTRCONV audiosegs[chunk],expanded);\r
        if (mmerror)\r
                goto done;\r
        CAL_HuffExpand (source,audiosegs[chunk],expanded,audiohuffman);\r
@@ -1410,7 +1424,7 @@ void CA_LoadAllSounds (void)
 \r
        for (i=0;i<NUMSOUNDS;i++,start++)\r
                if (audiosegs[start])\r
-                       MM_SetPurge (MEMPTR audiosegs[start],3);                // make purgable\r
+                       MM_SetPurge (MEMPTRCONV audiosegs[start],3);            // make purgable\r
 \r
 cachein:\r
 \r
@@ -1434,7 +1448,8 @@ cachein:
 \r
 //===========================================================================\r
 \r
-//++++#if GRMODE == EGAGR\r
+//????#if GRMODE == EGAGR\r
+#if 0\r
 \r
 /*\r
 ======================\r
@@ -1445,7 +1460,7 @@ cachein:
 =\r
 ======================\r
 */\r
-/*++++\r
+\r
 unsigned       static  sheight,swidth;\r
 boolean static dothemask;\r
 \r
@@ -1457,92 +1472,114 @@ void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,
        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
@@ -1580,7 +1617,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
 //\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
@@ -1609,7 +1646,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
 //\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
@@ -1668,7 +1705,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                break;\r
 \r
        default:\r
-               Quit (gvar, "CAL_CacheSprite: Bad shifts number!");\r
+               Quit ("CAL_CacheSprite: Bad shifts number!");\r
        }\r
 \r
 #endif\r
@@ -1741,7 +1778,7 @@ void CAL_ExpandGrChunk (int chunk, byte far *source)
                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
@@ -1767,21 +1804,21 @@ void CAL_ReadGrChunk (int chunk)
 // load the chunk into a buffer, either the miscbuffer if it fits, or allocate\r
 // a larger buffer\r
 //\r
-       pos = GRFILEPOS(chunk);\r
+       pos = GRFILEPOS(chunk,gvar);\r
        if (pos<0)                                                      // $FFFFFFFF start is a sparse tile\r
          return;\r
 \r
        next = chunk +1;\r
-       while (GRFILEPOS(next) == -1)           // skip past any sparse tiles\r
+       while (GRFILEPOS(next,gvar) == -1)              // skip past any sparse tiles\r
                next++;\r
 \r
-       compressed = GRFILEPOS(next)-pos;\r
+       compressed = GRFILEPOS(next,gvar)-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
@@ -1790,7 +1827,7 @@ void CAL_ReadGrChunk (int chunk)
                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
@@ -1826,8 +1863,8 @@ void CA_CacheGrChunk (int chunk)
 \r
 // MDM begin - (GAMERS EDGE)\r
 //\r
-       if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
-               Quit (gvar, "CA_CacheGrChunk(): Can't find graphics files.");\r
+       if (!FindFile("EGAGRAPH.16",NULL,2))\r
+               Quit ("CA_CacheGrChunk(): Can't find graphics files.");\r
 //\r
 // MDM end\r
 \r
@@ -1835,7 +1872,7 @@ void CA_CacheGrChunk (int chunk)
 // load the chunk into a buffer, either the miscbuffer if it fits, or allocate\r
 // a larger buffer\r
 //\r
-       pos = GRFILEPOS(chunk);\r
+       pos = GRFILEPOS(chunk,gvar);\r
        if (pos<0)                                                      // $FFFFFFFF start is a sparse tile\r
          return;\r
 \r
@@ -1843,20 +1880,20 @@ void CA_CacheGrChunk (int chunk)
        while (GRFILEPOS(next) == -1)           // skip past any sparse tiles\r
                next++;\r
 \r
-       compressed = GRFILEPOS(next)-pos;\r
+       compressed = GRFILEPOS(next,gvar)-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
@@ -1915,12 +1952,12 @@ void CA_CacheMap (global_game_variables_t *gvar)
 //             if (pos<0)                                              // $FFFFFFFF start is a sparse map\r
 //               printf("CA_CacheMap: Tried to load a non existent map!");\r
 \r
-//             MM_GetPtr(MEMPTR gvar->ca.camapheaderseg[mapnum],sizeof(maptype));\r
+//             MM_GetPtr(MEMPTRCONV gvar->ca.camapheaderseg[mapnum],sizeof(maptype));\r
 //             lseek(maphandle,pos,SEEK_SET);\r
 //             CA_FarRead (maphandle,(memptr)mapheaderseg[mapnum],sizeof(maptype));\r
 //     }\r
 //     else\r
-//             MM_SetPurge (MEMPTR mapheaderseg[mapnum], 0, &(gvar->mm));\r
+//             MM_SetPurge (MEMPTRCONV mapheaderseg[mapnum], 0, &(gvar->mm));\r
 \r
 //\r
 // load the planes in\r
@@ -1938,7 +1975,7 @@ void CA_CacheMap (global_game_variables_t *gvar)
                if (!compressed)\r
                        continue;               // the plane is not used in this game\r
 \r
-               dest = MEMPTR mapsegs[plane];\r
+               dest = MEMPTRCONV mapsegs[plane];\r
                MM_GetPtr(dest,size);\r
 \r
                lseek(maphandle,pos,SEEK_SET);\r
@@ -2293,8 +2330,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
 \r
 // MDM begin - (GAMERS EDGE)\r
 //\r
-//     if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
-//             Quit (gvar, "CA_CacheMarks(): Can't find graphics files.");\r
+//     if (!FindFile("EGAGRAPH.16",NULL,2))\r
+//             Quit ("CA_CacheMarks(): Can't find graphics files.");\r
 //\r
 // MDM end\r
 \r
@@ -2322,7 +2359,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
                        if (dialog && updatecachebox)\r
                                updatecachebox ();\r
 \r
-                       pos = GRFILEPOS(i);\r
+                       pos = GRFILEPOS(i,gvar);\r
                        if (pos<0)\r
                                continue;\r
 \r
@@ -2330,7 +2367,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
                        while (GRFILEPOS(next) == -1)           // skip past any sparse tiles\r
                                next++;\r
 \r
-                       compressed = GRFILEPOS(next)-pos;\r
+                       compressed = GRFILEPOS(next,gvar)-pos;\r
                        endpos = pos+compressed;\r
 \r
                        if (compressed<=BUFFERSIZE)\r
@@ -2353,10 +2390,10 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
                                                if (next == NUMCHUNKS)\r
                                                        continue;\r
 \r
-                                               nextpos = GRFILEPOS(next);\r
-                                               while (GRFILEPOS(++next) == -1) // skip past any sparse tiles\r
+                                               nextpos = GRFILEPOS(next,gvar);\r
+                                               while (GRFILEPOS(++next,gvar) == -1)    // skip past any sparse tiles\r
                                                        ;\r
-                                               nextendpos = GRFILEPOS(next);\r
+                                               nextendpos = GRFILEPOS(next,gvar);\r
                                                if (nextpos - endpos <= MAXEMPTYREAD\r
                                                && nextendpos-pos <= BUFFERSIZE)\r
                                                        endpos = nextendpos;\r
@@ -2364,8 +2401,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
                                                        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
@@ -2378,8 +2415,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
                                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
@@ -2398,3 +2435,13 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
                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 (str);\r
+}\r