]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
p16 is being worked on a bunch by me wwww [16_ca needs huge amounts of work and I...
[16.git] / src / lib / 16_ca.c
index 9e98489951b3ba0a1aad5bf1b729330e5eda07f7..fad1a012b194cd55f552c456b26ead76e0443fd9 100755 (executable)
@@ -38,6 +38,7 @@ loaded into the data segment
 \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
@@ -132,17 +133,17 @@ void      CAL_DialogFinish (void);*/
 //void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,unsigned length);\r
 \r
 \r
-/*++++#ifdef THREEBYTEGRSTARTS\r
+#ifdef THREEBYTEGRSTARTS\r
 #define FILEPOSSIZE    3\r
 //#define      GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff)\r
-long GRFILEPOS(int c)\r
+long GRFILEPOS(int c, global_game_variables_t *gvar)\r
 {\r
        long value;\r
        int     offset;\r
 \r
        offset = c*3;\r
 \r
-       value = *(long far *)(((byte far *)grstarts)+offset);\r
+       value = *(long far *)(((byte far *)gvar->ca.grstarts)+offset);\r
 \r
        value &= 0x00ffffffl;\r
 \r
@@ -153,8 +154,8 @@ long GRFILEPOS(int c)
 };\r
 #else\r
 #define FILEPOSSIZE    4\r
-#define        GRFILEPOS(c) (grstarts[c])\r
-#endif*/\r
+#define        GRFILEPOS(c) (gvar->ca.grstarts[c])\r
+#endif\r
 \r
 /*\r
 =============================================================================\r
@@ -305,7 +306,7 @@ boolean CA_FarWrite(int handle, byte far *source, dword length, global_game_vari
                //segm=(length%0xfffflu)-1;\r
                //fat=segm*0xfffflu;\r
                //length-=fat;\r
-               printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+               printf("CA_FarWrite doesn't support 64K reads yet!\n");\r
                return 0;\r
        }\r
 \r
@@ -375,12 +376,23 @@ boolean CA_ReadFile(char *filename, memptr *ptr, global_game_variables_t *gvar)
                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
+               close(handle);\r
                return false;\r
        }\r
-       close (handle);\r
+       close(handle);\r
        return true;\r
 }\r
 \r
@@ -438,7 +450,28 @@ boolean CA_LoadFile(char *filename, memptr *ptr, global_game_variables_t *gvar)
                return false;\r
 \r
        size = filelength(handle);\r
+#ifdef __DEBUG_CA__\r
+       if(dbg_debugca>0){\r
+               printf("===============================================================================\n");\r
+               printf("                CA_LoadFile\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
        MM_GetPtr(ptr,size, gvar);\r
+#ifdef __DEBUG_CA__\r
+       if(dbg_debugca>0){\r
+               //%04x\r
+               printf("---------------------------------------\n");\r
+               printf("        ptr=%Fp\n", ptr);\r
+               printf("        *ptr=%Fp\n", *ptr);\r
+               printf("        &ptr=%Fp\n", &ptr);\r
+               printf("-------------------------------------------------------------------------------\n");\r
+       }\r
+#endif\r
        if(!CA_FarRead(handle,*ptr,size, gvar))\r
        {\r
                close(handle);\r
@@ -1036,7 +1069,7 @@ dinorm:
 //\r
 // load the data offsets from ???head.ext\r
 //\r
-       MM_GetPtr (&(memptr)grstarts,(NUMCHUNKS+1)*FILEPOSSIZE);\r
+       MM_GetPtr (MEMPTR grstarts,(NUMCHUNKS+1)*FILEPOSSIZE);\r
 \r
        if ((handle = open(GREXT"HEAD."EXT,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
@@ -1061,7 +1094,7 @@ dinorm:
 // 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
+       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
@@ -1070,7 +1103,7 @@ dinorm:
 #endif\r
 \r
 #if NUMPICM>0\r
-       MM_GetPtr(&(memptr)picmtable,NUMPICM*sizeof(pictabletype));\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
@@ -1079,7 +1112,7 @@ dinorm:
 #endif\r
 \r
 #if NUMSPRITES>0\r
-       MM_GetPtr(&(memptr)spritetable,NUMSPRITES*sizeof(spritetabletype));\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
@@ -1102,44 +1135,44 @@ dinorm:
 \r
 void CAL_SetupMapFile (global_game_variables_t *gvar)\r
 {\r
-/*     int handle;\r
+#ifndef MAPHEADERLINKED\r
+       int handle;\r
        long length;\r
+#endif\r
 \r
 //\r
 // load maphead.ext (offsets and tileinfo for map file)\r
 //\r
 #ifndef MAPHEADERLINKED\r
-       if ((handle = open("MAPHEAD."EXT,\r
+       if ((handle = open("maphead.mph",\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               printf("Can't open MAPHEAD."EXT"!");\r
+               Quit (gvar, "Can't open maphead.mph");\r
        length = filelength(handle);\r
-       MM_GetPtr (&(memptr)tinf,length);\r
-       CA_FarRead(handle, tinf, length);\r
+       MM_GetPtr (MEMPTR gvar->ca.tinf,length,gvar);\r
+       CA_FarRead(handle, gvar->ca.tinf, length,gvar);\r
        close(handle);\r
 //#else\r
 \r
-       tinf = (byte _seg *)FP_SEG(&maphead);\r
+       gvar->ca.tinf = (byte _seg *)FP_SEG(&maphead);\r
 \r
-#endif*/\r
+#endif\r
 \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
-       {\r
-               printf("Can't open data/test.map!");\r
-       }\r
-// #ifdef MAPHEADERLINKED\r
-//     if ((maphandle = open("GAMEMAPS."EXT,\r
-//              O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-//             Quit (gvar, "Can't open GAMEMAPS."EXT"!");\r
-// //#else\r
-//     if ((maphandle = open("MAPTEMP."EXT,\r
-//              O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-//             Quit (gvar, "Can't open MAPTEMP."EXT"!");\r
-// #endif\r
+               Quit (gvar, "Can't open data/test.map!");\r
+/*#ifdef MAPHEADERLINKED\r
+       if ((maphandle = open("GAMEMAPS."EXTENSION,\r
+                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
+               Quit ("Can't open GAMEMAPS."EXTENSION"!");\r
+#else\r
+       if ((maphandle = open("MAPTEMP."EXTENSION,\r
+                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
+               Quit ("Can't open MAPTEMP."EXTENSION"!");\r
+#endif*/\r
 }\r
 \r
 //==========================================================================\r
@@ -1166,7 +1199,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
                Quit (gvar, "Can't open AUDIOHED."EXT"!");\r
        length = filelength(handle);\r
-       MM_GetPtr (&(memptr)audiostarts,length);\r
+       MM_GetPtr (MEMPTR audiostarts,length);\r
        CA_FarRead(handle, (byte far *)audiostarts, length);\r
        close(handle);\r
 #else\r
@@ -1223,10 +1256,17 @@ void CA_Startup(global_game_variables_t *gvar)
        unlink("meminfo.16w");\r
        gvar->handle.showmemhandle = open("meminfo.16w", O_CREAT | O_WRONLY | O_TEXT);\r
 #endif\r
-/*\r
-       CAL_SetupGrFile ();\r
-       CAL_SetupAudioFile ();*/\r
+\r
+\r
+#ifndef NOMAPS\r
+       CAL_SetupMapFile (gvar);\r
+#endif\r
+#ifndef NOGRAPHICS\r
+       CAL_SetupGrFile (gvar);\r
+#endif\r
+#ifndef NOAUDIO\r
        CAL_SetupMapFile (gvar);\r
+#endif\r
 \r
        gvar->ca.camap.mapon = -1;\r
        gvar->ca.ca_levelbit = 1;\r
@@ -1257,10 +1297,9 @@ void CA_Shutdown(global_game_variables_t *gvar)
 #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
@@ -1284,7 +1323,7 @@ void CA_CacheAudioChunk (int chunk)
 \r
        if (audiosegs[chunk])\r
        {\r
-               MM_SetPurge (&(memptr)audiosegs[chunk],0);\r
+               MM_SetPurge (MEMPTR audiosegs[chunk],0);\r
                return;                                                 // allready in memory\r
        }\r
 \r
@@ -1306,7 +1345,7 @@ void CA_CacheAudioChunk (int chunk)
 \r
 #ifndef AUDIOHEADERLINKED\r
 \r
-       MM_GetPtr (&(memptr)audiosegs[chunk],compressed);\r
+       MM_GetPtr (MEMPTR audiosegs[chunk],compressed);\r
        if (mmerror)\r
                return;\r
 \r
@@ -1331,7 +1370,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 (MEMPTR audiosegs[chunk],expanded);\r
        if (mmerror)\r
                goto done;\r
        CAL_HuffExpand (source,audiosegs[chunk],expanded,audiohuffman);\r
@@ -1372,7 +1411,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 (MEMPTR audiosegs[start],3);                // make purgable\r
 \r
 cachein:\r
 \r
@@ -1396,7 +1435,8 @@ cachein:
 \r
 //===========================================================================\r
 \r
-//++++#if GRMODE == EGAGR\r
+//????#if GRMODE == EGAGR\r
+#if 0\r
 \r
 /*\r
 ======================\r
@@ -1407,7 +1447,7 @@ cachein:
 =\r
 ======================\r
 */\r
-/*++++\r
+\r
 unsigned       static  sheight,swidth;\r
 boolean static dothemask;\r
 \r
@@ -1419,92 +1459,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
@@ -1779,7 +1841,7 @@ void CA_CacheGrChunk (int chunk)
        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
@@ -1877,12 +1939,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(MEMPTR 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 (MEMPTR mapheaderseg[mapnum], 0, &(gvar->mm));\r
 \r
 //\r
 // load the planes in\r
@@ -1900,7 +1962,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 = MEMPTR mapsegs[plane];\r
                MM_GetPtr(dest,size);\r
 \r
                lseek(maphandle,pos,SEEK_SET);\r
@@ -2003,7 +2065,7 @@ void CA_ClearMarks (global_game_variables_t *gvar)
        int i;\r
 \r
        for (i=0;i<NUMCHUNKS;i++)\r
-               gvar->video.grneeded[i]&=~gvar->ca.ca_levelbit;\r
+               gvar->ca.grneeded[i]&=~gvar->ca.ca_levelbit;\r
 }\r
 \r
 //===========================================================================\r
@@ -2020,7 +2082,7 @@ void CA_ClearMarks (global_game_variables_t *gvar)
 \r
 void CA_ClearAllMarks (global_game_variables_t *gvar)\r
 {\r
-       _fmemset (gvar->video.grneeded,0,sizeof(gvar->video.grneeded));\r
+       _fmemset (gvar->ca.grneeded,0,sizeof(gvar->ca.grneeded));\r
        gvar->ca.ca_levelbit = 1;\r
        gvar->ca.ca_levelnum = 0;\r
 }\r
@@ -2069,7 +2131,7 @@ void CA_SetAllPurge (global_game_variables_t *gvar)
 //\r
 // free cursor sprite and background save\r
 //\r
-       //VW_FreeCursor ();\r
+       //____VW_FreeCursor ();\r
 \r
 //\r
 // free map headers and map planes\r
@@ -2080,14 +2142,14 @@ void CA_SetAllPurge (global_game_variables_t *gvar)
 \r
        for (i=0;i<3;i++)\r
                if (gvar->ca.mapsegs[i])\r
-                       MM_FreePtr (gvar->ca.mapsegs[i], gvar);\r
+                       MM_FreePtr ((memptr *)&gvar->ca.mapsegs[i], gvar);\r
 \r
 //\r
 // free sounds\r
 //\r
        for (i=0;i<NUMSNDCHUNKS;i++)\r
                if (gvar->ca.audiosegs[i])\r
-                       MM_SetPurge (gvar->ca.audiosegs[i],3, gvar);\r
+                       MM_SetPurge ((memptr *)&gvar->ca.audiosegs[i],3, gvar);\r
 \r
 //\r
 // free graphics\r
@@ -2218,10 +2280,10 @@ void    CAL_DialogFinish (void)
 = CA_CacheMarks\r
 =\r
 ======================\r
-*//*\r
+*//*++++\r
 #define MAXEMPTYREAD   1024\r
 \r
-void CA_CacheMarks (char *title)\r
+void CAL_CacheMarks (char *title, global_game_variables_t *gvar)\r
 {\r
        boolean dialog;\r
        int     i,next,numcache;\r
@@ -2237,17 +2299,17 @@ void CA_CacheMarks (char *title)
 // go through and make everything not needed purgable\r
 //\r
        for (i=0;i<NUMCHUNKS;i++)\r
-               if (gvar->video.grneeded[i]&ca_levelbit)\r
+               if (gvar->ca.grneeded[i]&(gvar->ca.ca_levelbit))//if (grneeded[i]&ca_levelbit)\r
                {\r
-                       if (grsegs[i])                                  // its allready in memory, make\r
-                               MM_SetPurge(&grsegs[i],0);      // sure it stays there!\r
+                       if (gvar->ca.grsegs[i])                                 // its allready in memory, make\r
+                               MM_SetPurge(gvar->ca.grsegs[i],0,gvar); // sure it stays there!\r
                        else\r
                                numcache++;\r
                }\r
                else\r
                {\r
-                       if (grsegs[i])                                  // not needed, so make it purgeable\r
-                               MM_SetPurge(&grsegs[i],3);\r
+                       if (gvar->ca.grsegs[i])                                 // not needed, so make it purgeable\r
+                               MM_SetPurge(gvar->ca.grsegs[i],3,gvar);\r
                }\r
 \r
        if (!numcache)                  // nothing to cache!\r
@@ -2255,8 +2317,8 @@ void CA_CacheMarks (char *title)
 \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."EXT,NULL,2))\r
+//             Quit (gvar, "CA_CacheMarks(): Can't find graphics files.");\r
 //\r
 // MDM end\r
 \r
@@ -2276,7 +2338,7 @@ void CA_CacheMarks (char *title)
        bufferstart = bufferend = 0;            // nothing good in buffer now\r
 \r
        for (i=0;i<NUMCHUNKS;i++)\r
-               if ( (gvar->video.grneeded[i]&ca_levelbit) && !grsegs[i])\r
+               if ( (gvar->ca.grneeded[i]&(gvar->ca.ca_levelbit)) && !gvar->ca.grsegs[i])\r
                {\r
 //\r
 // update thermometer\r
@@ -2327,7 +2389,7 @@ void CA_CacheMarks (char *title)
                                        }\r
 \r
                                        lseek(grhandle,pos,SEEK_SET);\r
-                                       CA_FarRead(grhandle,bufferseg,endpos-pos);\r
+                                       CA_FarRead(grhandle,(gvar->mm.bufferseg),endpos-pos,gvar);\r
                                        bufferstart = pos;\r
                                        bufferend = endpos;\r
                                        source = bufferseg;\r
@@ -2336,12 +2398,12 @@ void CA_CacheMarks (char *title)
                        else\r
                        {\r
                        // big chunk, allocate temporary buffer\r
-                               MM_GetPtr(&bigbufferseg,compressed);\r
+                               MM_GetPtr(&bigbufferseg,compressed,gvar);\r
                                if (mmerror)\r
                                        return;\r
                                MM_SetLock (&bigbufferseg,true);\r
                                lseek(grhandle,pos,SEEK_SET);\r
-                               CA_FarRead(grhandle,bigbufferseg,compressed);\r
+                               CA_FarRead(grhandle,bigbufferseg,compressed,gvar);\r
                                source = bigbufferseg;\r
                        }\r
 \r