]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
reverted part 2
[16.git] / src / lib / 16_ca.c
index 87db2377e2910f881b031189d54ee755503f98a1..008e4e84cb54949bf0b645a18a4637db04eea567 100755 (executable)
@@ -1,19 +1,23 @@
-/* Catacomb Apocalypse Source Code\r
- * Copyright (C) 1993-2014 Flat Rock Software\r
+/* Project 16 Source Code~\r
+ * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
  *\r
- * This program is free software; you can redistribute it and/or modify\r
+ * This file is part of Project 16.\r
+ *\r
+ * Project 16 is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
+ * the Free Software Foundation; either version 3 of the License, or\r
  * (at your option) any later version.\r
  *\r
- * This program is distributed in the hope that it will be useful,\r
+ * Project 16 is distributed in the hope that it will be useful,\r
  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
  * GNU General Public License for more details.\r
  *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>, or\r
+ * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
+ * Fifth Floor, Boston, MA 02110-1301 USA.\r
+ *\r
  */\r
 \r
 // ID_CA.C\r
@@ -36,7 +40,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 +125,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 +142,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 +160,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
@@ -205,13 +213,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(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
-}*/\r
+       gvar->ca.chunkcomplen = GRFILEPOS(chunk+1,gvar)-GRFILEPOS(chunk,gvar)-4;\r
+}\r
 \r
 \r
 /*\r
@@ -1036,8 +1044,8 @@ dinorm:
 =\r
 ======================\r
 */\r
-////++++TODO: enable!\r
-/*void CAL_SetupGrFile (global_game_variables_t *gvar)\r
+\r
+void CAL_SetupGrFile (global_game_variables_t *gvar)\r
 {\r
        char fname[13];\r
        int handle;\r
@@ -1069,7 +1077,7 @@ dinorm:
 //\r
 // load the data offsets from ???head.ext\r
 //\r
-       MM_GetPtr (MEMPTR gvar->ca.grstarts,(NUMCHUNKS+1)*FILEPOSSIZE, gvar);\r
+       MM_GetPtr (MEMPTRCONV gvar->ca.grstarts,(NUMCHUNKS+1)*FILEPOSSIZE, gvar);\r
 \r
        strcpy(fname,GHEADNAME);\r
        strcat(fname,EXTENSION);\r
@@ -1100,16 +1108,19 @@ 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),gvar);\r
-       CAL_GetGrChunkLength(STRUCTPIC);                // position file pointer\r
-       MM_GetPtr(&compseg,gvar->ca.chunkcomplen, gvar);\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 *)pictable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman);\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,gvar->ca.chunkcomplen);\r
        CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen);\r
@@ -1118,7 +1129,7 @@ dinorm:
 #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,gvar->ca.chunkcomplen);\r
        CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen);\r
@@ -1126,7 +1137,7 @@ dinorm:
        MM_FreePtr(&compseg);\r
 #endif\r
 \r
-}*/\r
+}\r
 \r
 //==========================================================================\r
 \r
@@ -1154,7 +1165,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
                Quit (gvar, "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
@@ -1205,7 +1216,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
                 O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
                Quit (gvar, "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
@@ -1329,7 +1340,7 @@ 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
@@ -1351,7 +1362,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
@@ -1376,7 +1387,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
@@ -1417,7 +1428,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
@@ -1797,15 +1808,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
@@ -1865,7 +1876,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
@@ -1873,7 +1884,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
@@ -1945,12 +1956,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
@@ -1968,7 +1979,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
@@ -2352,7 +2363,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
@@ -2360,7 +2371,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
@@ -2383,10 +2394,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