]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
xcroll fuckings please ignore and go to e9a094cdce9001737f17d3961f49f27272dff4e4
[16.git] / src / lib / 16_ca.c
old mode 100755 (executable)
new mode 100644 (file)
index 64c6674..4a03920
@@ -36,7 +36,7 @@ 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
@@ -121,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
-long           c hunkcomplen,c hunkexplen;\r
-\r
+*/\r
+long           chunkcomplen,chunkexplen;\r
+/*\r
 SDMode         oldsoundmode;\r
 \r
 \r
@@ -138,14 +138,14 @@ void      CAL_CarmackExpand (unsigned far *source, unsigned far *dest,
 #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
@@ -156,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
@@ -208,9 +212,9 @@ void CA_CloseDebug(global_game_variables_t *gvar)
 \r
 void CAL_GetGrChunkLength (int chunk,global_game_variables_t *gvar)\r
 {\r
-       lseek(gvar->ca.file.grhandle,GRFILEPOS(chunk),SEEK_SET);\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)-GRFILEPOS(chunk)-4;\r
+       gvar->ca.chunkcomplen = GRFILEPOS(chunk+1,gvar)-GRFILEPOS(chunk,gvar)-4;\r
 }\r
 \r
 \r
@@ -227,21 +231,9 @@ void CAL_GetGrChunkLength (int chunk,global_game_variables_t *gvar)
 boolean CA_FarRead(int handle, byte far *dest, dword length, global_game_variables_t *gvar)\r
 {\r
        boolean flag=0;\r
-       //dword fat=0;\r
-       //word segm=0;\r
-       if(gvar->pm.emm.EMSVer<0x40)\r
-       if(length>0xfffflu)\r
-       {\r
-               printf("File is a fat bakapee\n");\r
-               //segm=(length%0xfffflu)-1;\r
-               //fat=segm*0xfffflu;\r
-               //length-=fat;\r
-               printf("CA_FarRead doesn't support 64K reads yet!\n");\r
-               return 0;//TODO: EXPAND!!!\r
-       }\r
+       if (length>0xfffflu)\r
+               Quit (gvar, "CA_FarRead doesn't support 64K reads yet!");//TODO: EXPAND!!!\r
 \r
-       //if(!fat&&!segm)\r
-       //{\r
        __asm {\r
                push    ds\r
                mov     bx,[handle]\r
@@ -289,7 +281,7 @@ End:
 /*\r
 ==========================\r
 =\r
-= CA_SegWrite\r
+= CA_FarWrite\r
 =\r
 = Write from a file to a far pointer\r
 =\r
@@ -299,21 +291,9 @@ End:
 boolean CA_FarWrite(int handle, byte far *source, dword length, global_game_variables_t *gvar)\r
 {\r
        boolean flag=0;\r
-       //dword fat=0;\r
-       //word segm=0;\r
-       if(gvar->pm.emm.EMSVer<0x40)\r
-       if(length>0xfffflu)\r
-       {\r
-               printf("File is a fat bakapee\n");\r
-               //segm=(length%0xfffflu)-1;\r
-               //fat=segm*0xfffflu;\r
-               //length-=fat;\r
-               printf("CA_FarWrite doesn't support 64K reads yet!\n");\r
-               return 0;\r
-       }\r
+       if (length>0xfffflu)\r
+               Quit (gvar, "CA_FarWrite doesn't support 64K reads yet!");//TODO: EXPAND!!!\r
 \r
-       //if(!fat&&!segm)\r
-       //{\r
        __asm {\r
                push    ds\r
                mov     bx,[handle]\r
@@ -1104,7 +1084,10 @@ void CAL_SetupGrFile (global_game_variables_t *gvar)
 #if NUMPICS>0\r
        MM_GetPtr(MEMPTRCONV gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar);\r
        CAL_GetGrChunkLength(STRUCTPIC,gvar);           // position file pointer\r
-       MM_GetPtr(&compseg,gvar->ca.chunkcomplen, gvar);\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
@@ -1175,11 +1158,11 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
 /*#ifdef MAPHEADERLINKED\r
        if ((maphandle = open("GAMEMAPS.16"ENSION,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open GAMEMAPS.16"ENSION"!");\r
+               Quit (gvar, "Can't open GAMEMAPS.16"ENSION"!");\r
 #else\r
        if ((maphandle = open("MAPTEMP.16"ENSION,\r
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open MAPTEMP.16"ENSION"!");\r
+               Quit (gvar, "Can't open MAPTEMP.16"ENSION"!");\r
 #endif*/\r
 }\r
 \r
@@ -1444,7 +1427,6 @@ cachein:
 //===========================================================================\r
 \r
 //????#if GRMODE == EGAGR\r
-#if 0\r
 \r
 /*\r
 ======================\r
@@ -1455,12 +1437,12 @@ cachein:
 =\r
 ======================\r
 */\r
-\r
+/*++++\r
 unsigned       static  sheight,swidth;\r
 boolean static dothemask;\r
 \r
 void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,\r
-       unsigned width, unsigned height, unsigned pixshift, boolean domask)\r
+       unsigned width, unsigned height, unsigned pixshift, boolean domask, global_game_variables_t *gvar)\r
 {\r
 \r
        sheight = height;               // because we are going to reassign bp\r
@@ -1477,6 +1459,7 @@ void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,
                mov     bp,[pixshift]\r
                shl     bp,1\r
                mov     bp,WORD PTR [shifttabletable+bp]        // bp holds pointer to shift table\r
+//             mov     bp,WORD PTR [gvar->video.shifttabletable+bp]    // bp holds pointer to shift table\r
 \r
                cmp     [ss:dothemask],0\r
                je              skipmask\r
@@ -1574,7 +1557,7 @@ dodatabyte:
 }\r
 \r
 #endif\r
-\r
+*/\r
 //===========================================================================\r
 \r
 /*\r
@@ -1587,7 +1570,7 @@ dodatabyte:
 ======================\r
 */\r
 /*++++\r
-void CAL_CacheSprite (int chunk, byte far *compressed)\r
+void CAL_CacheSprite (int chunk, byte far *compressed, global_game_variables_t *gvar)\r
 {\r
        int i;\r
        unsigned shiftstarts[5];\r
@@ -1595,11 +1578,12 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
        spritetabletype far *spr;\r
        spritetype _seg *dest;\r
 \r
-#if GRMODE == CGAGR\r
+#if 0\r
+//GRMODE == CGAGR\r
 //\r
 // CGA has no pel panning, so shifts are never needed\r
 //\r
-       spr = &spritetable[chunk-STARTSPRITES];\r
+       spr = &gvar->video.spritetable[chunk-STARTSPRITES];\r
        smallplane = spr->width*spr->height;\r
        MM_GetPtr (&grsegs[chunk],smallplane*2+MAXSHIFTS*6);\r
        if (mmerror)\r
@@ -1617,12 +1601,12 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
 #endif\r
 \r
 \r
-#if GRMODE == EGAGR\r
+//#if GRMODE == EGAGR\r
 \r
 //\r
 // calculate sizes\r
 //\r
-       spr = &spritetable[chunk-STARTSPRITES];\r
+       spr = &gvar->video.spritetable[chunk-STARTSPRITES];\r
        smallplane = spr->width*spr->height;\r
        bigplane = (spr->width+1)*spr->height;\r
 \r
@@ -1633,10 +1617,10 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
        shiftstarts[4] = shiftstarts[3] + bigplane*5;   // nothing ever put here\r
 \r
        expanded = shiftstarts[spr->shifts];\r
-       MM_GetPtr (&grsegs[chunk],expanded);\r
-       if (mmerror)\r
+       MM_GetPtr (MEMPTRCONV gvar->ca.grsegs[chunk],expanded, gvar);\r
+       if (gvar->mm.mmerror)\r
                return;\r
-       dest = (spritetype _seg *)grsegs[chunk];\r
+       dest = (spritetype _seg *)gvar->ca.grsegs[chunk];\r
 \r
 //\r
 // expand the unshifted shape\r
@@ -1670,8 +1654,8 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                        dest->planesize[i] = bigplane;\r
                        dest->width[i] = spr->width+1;\r
                }\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[2],spr->width,spr->height,4,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[2],spr->width,spr->height,4,true,gvar);\r
                break;\r
 \r
        case    4:\r
@@ -1682,20 +1666,20 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                dest->sourceoffset[1] = shiftstarts[1];\r
                dest->planesize[1] = bigplane;\r
                dest->width[1] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[1],spr->width,spr->height,2,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[1],spr->width,spr->height,2,true,gvar);\r
 \r
                dest->sourceoffset[2] = shiftstarts[2];\r
                dest->planesize[2] = bigplane;\r
                dest->width[2] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[2],spr->width,spr->height,4,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[2],spr->width,spr->height,4,true,gvar);\r
 \r
                dest->sourceoffset[3] = shiftstarts[3];\r
                dest->planesize[3] = bigplane;\r
                dest->width[3] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[3],spr->width,spr->height,6,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[3],spr->width,spr->height,6,true,gvar);\r
 \r
                break;\r
 \r
@@ -1703,7 +1687,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                Quit (gvar, "CAL_CacheSprite: Bad shifts number!");\r
        }\r
 \r
-#endif\r
+//#endif\r
 }*/\r
 \r
 //===========================================================================\r
@@ -1799,15 +1783,15 @@ 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(gvar->ca.file.grhandle,pos,SEEK_SET);\r
 \r
@@ -1867,7 +1851,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
@@ -1875,7 +1859,7 @@ 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(gvar->ca.file.grhandle,pos,SEEK_SET);\r
 \r
@@ -2354,7 +2338,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
@@ -2362,7 +2346,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
@@ -2385,10 +2369,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