X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_ca.c;h=008e4e84cb54949bf0b645a18a4637db04eea567;hb=181c6beee3d42da41fc53f44f0aa3e9315016ad2;hp=6ef9806c0d37446c800cbdfb7bbf2c3f233529d6;hpb=ac6088c51190c217f45b40c45929768bdc6c0a7d;p=16.git
diff --git a/src/lib/16_ca.c b/src/lib/16_ca.c
index 6ef9806c..008e4e84 100755
--- a/src/lib/16_ca.c
+++ b/src/lib/16_ca.c
@@ -1,19 +1,23 @@
-/* Catacomb Apocalypse Source Code
- * Copyright (C) 1993-2014 Flat Rock Software
+/* Project 16 Source Code~
+ * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover
*
- * This program is free software; you can redistribute it and/or modify
+ * This file is part of Project 16.
+ *
+ * Project 16 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * Project 16 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see , or
+ * write to the Free Software Foundation, Inc., 51 Franklin Street,
+ * Fifth Floor, Boston, MA 02110-1301 USA.
+ *
*/
// ID_CA.C
@@ -36,8 +40,9 @@ loaded into the data segment
#pragma warn -pro
#pragma warn -use
-//#define THREEBYTEGRSTARTS
+#define THREEBYTEGRSTARTS
//https://github.com/open-watcom/open-watcom-v2/issues/279#issuecomment-244587566 for _seg
+//http://www.shikadi.net/moddingwiki/GameMaps_Format for info on the code
/*
=============================================================================
@@ -97,16 +102,17 @@ extern byte EGAdict;
extern byte far maphead;
extern byte mapdict;
extern byte far audiohead;
-extern byte audiodict;
+extern byte audiodict;*/
+void CA_CannotOpen(char *string, global_game_variables_t *gvar);
-long _seg *grstarts; // array of offsets in egagraph, -1 for sparse
+/*long _seg *grstarts; // array of offsets in egagraph, -1 for sparse
long _seg *audiostarts; // array of offsets in audio / audiot
#ifdef GRHEADERLINKED
-huffnode *grhuffman;
+huffnode *gvar->ca.grhuffman;
#else
-huffnode grhuffman[255];
+huffnode gvar->ca.grhuffman[255];
#endif
#ifdef AUDIOHEADERLINKED
@@ -119,9 +125,9 @@ huffnode audiohuffman[255];
int grhandle; // handle to EGAGRAPH
int maphandle; // handle to MAPTEMP / GAMEMAPS
int audiohandle; // handle to AUDIOT / AUDIO
-
+*/
long chunkcomplen,chunkexplen;
-
+/*
SDMode oldsoundmode;
@@ -129,20 +135,21 @@ SDMode oldsoundmode;
void CAL_DialogDraw (char *title,unsigned numcache);
void CAL_DialogUpdate (void);
void CAL_DialogFinish (void);*/
-//void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,unsigned length);
+void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,
+ unsigned length);
#ifdef THREEBYTEGRSTARTS
#define FILEPOSSIZE 3
//#define GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff)
-long GRFILEPOS(int c, global_game_variables_t *gvar)
+CASVT GRFILEPOS(int c, global_game_variables_t *gvar)
{
- long value;
+ CASVT value;
int offset;
offset = c*3;
- value = *(long far *)(((byte far *)gvar->ca.grstarts)+offset);
+ value = *(CASVT far *)(((byte far *)gvar->ca.grstarts)+offset);
value &= 0x00ffffffl;
@@ -153,7 +160,11 @@ long GRFILEPOS(int c, global_game_variables_t *gvar)
};
#else
#define FILEPOSSIZE 4
-#define GRFILEPOS(c) (gvar->ca.grstarts[c])
+//#define GRFILEPOS(c) (gvar->ca.grstarts[c])
+CASVT GRFILEPOS(int c, global_game_variables_t *gvar)
+{
+ return gvar->ca.grstarts[c];
+}
#endif
/*
@@ -202,13 +213,13 @@ void CA_CloseDebug(global_game_variables_t *gvar)
=
============================
*/
-/*++++
-void CAL_GetGrChunkLength (int chunk)
+
+void CAL_GetGrChunkLength (int chunk,global_game_variables_t *gvar)
{
- lseek(grhandle,GRFILEPOS(chunk),SEEK_SET);
- read(grhandle,&chunkexplen,sizeof(chunkexplen));
- chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4;
-}*/
+ lseek(gvar->ca.file.grhandle,GRFILEPOS(chunk,gvar),SEEK_SET);
+ read(gvar->ca.file.grhandle,&gvar->ca.chunkexplen,sizeof(gvar->ca.chunkexplen));
+ gvar->ca.chunkcomplen = GRFILEPOS(chunk+1,gvar)-GRFILEPOS(chunk,gvar)-4;
+}
/*
@@ -375,6 +386,17 @@ boolean CA_ReadFile(char *filename, memptr *ptr, global_game_variables_t *gvar)
return false;
size = filelength(handle);
+#ifdef __DEBUG_CA__
+ if(dbg_debugca>0){
+ printf("===============================================================================\n");
+ printf(" CA_ReadFile\n");
+ printf("===============================================================================\n");
+ //%04x
+ printf(" ptr=%Fp\n", ptr);
+ printf(" *ptr=%Fp\n", *ptr);
+ printf(" &ptr=%Fp\n", &ptr);
+ }
+#endif
if(!CA_FarRead(handle,*ptr,size, gvar))
{
close(handle);
@@ -1022,24 +1044,19 @@ dinorm:
=
======================
*/
-////++++ enable!
-/*void CAL_SetupGrFile (void)
+
+void CAL_SetupGrFile (global_game_variables_t *gvar)
{
+ char fname[13];
int handle;
memptr compseg;
#ifdef GRHEADERLINKED
-#if GRMODE == EGAGR
- grhuffman = (huffnode *)&EGAdict;
- grstarts = (long _seg *)FP_SEG(&EGAhead);
-#endif
-#if GRMODE == CGAGR
- grhuffman = (huffnode *)&CGAdict;
- grstarts = (long _seg *)FP_SEG(&CGAhead);
-#endif
+ gvar->ca.grhuffman = (huffnode *)&VGAdict;
+ grstarts = (long _seg *)FP_SEG(&VGAhead);
- CAL_OptimizeNodes (grhuffman);
+ CAL_OptimizeNodes (gvar->ca.grhuffman);
#else
@@ -1047,23 +1064,29 @@ dinorm:
// load ???dict.ext (huffman dictionary for graphics files)
//
- if ((handle = open(GREXT"DICT."EXT,
+ strcpy(fname,GDICTNAME);
+ strcat(fname,EXTENSION);
+
+ if ((handle = open(fname,
O_RDONLY | O_BINARY, S_IREAD)) == -1)
- Quit (gvar, "Can't open "GREXT"DICT."EXT"!");
+ CA_CannotOpen(fname,gvar);
- read(handle, &grhuffman, sizeof(grhuffman));
+ read(handle, &gvar->ca.grhuffman, sizeof(gvar->ca.grhuffman));
close(handle);
- CAL_OptimizeNodes (grhuffman);
+ CAL_OptimizeNodes (gvar->ca.grhuffman);
//
// load the data offsets from ???head.ext
//
- MM_GetPtr (&(memptr)grstarts,(NUMCHUNKS+1)*FILEPOSSIZE);
+ MM_GetPtr (MEMPTRCONV gvar->ca.grstarts,(NUMCHUNKS+1)*FILEPOSSIZE, gvar);
+
+ strcpy(fname,GHEADNAME);
+ strcat(fname,EXTENSION);
- if ((handle = open(GREXT"HEAD."EXT,
+ if ((handle = open(fname,
O_RDONLY | O_BINARY, S_IREAD)) == -1)
- Quit (gvar, "Can't open "GREXT"HEAD."EXT"!");
+ CA_CannotOpen(fname,gvar);
- CA_FarRead(handle, (memptr)grstarts, (NUMCHUNKS+1)*FILEPOSSIZE);
+ CA_FarRead(handle, (memptr)gvar->ca.grstarts, (NUMCHUNKS+1)*FILEPOSSIZE, gvar);
close(handle);
@@ -1073,42 +1096,48 @@ dinorm:
//
// Open the graphics file, leaving it open until the game is finished
//
- grhandle = open(GREXT"GRAPH."EXT, O_RDONLY | O_BINARY);
- if (grhandle == -1)
- Quit (gvar, "Cannot open "GREXT"GRAPH."EXT"!");
+ strcpy(fname,GFILENAME);
+ strcat(fname,EXTENSION);
+
+ gvar->ca.file.grhandle = open(fname, O_RDONLY | O_BINARY);
+ if (gvar->ca.file.grhandle == -1)
+ CA_CannotOpen(fname,gvar);
//
// load the pic and sprite headers into the arrays in the data segment
//
#if NUMPICS>0
- MM_GetPtr(&(memptr)pictable,NUMPICS*sizeof(pictabletype));
- CAL_GetGrChunkLength(STRUCTPIC); // position file pointer
- MM_GetPtr(&compseg,chunkcomplen);
- CA_FarRead (grhandle,compseg,chunkcomplen);
- CAL_HuffExpand (compseg, (byte far *)pictable,NUMPICS*sizeof(pictabletype),grhuffman);
- MM_FreePtr(&compseg);
+ MM_GetPtr(MEMPTRCONV gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar);
+ CAL_GetGrChunkLength(STRUCTPIC,gvar); // position file pointer
+ printf("CAL_SetupGrFile:\n");
+ printf(" gvar->ca.chunkcomplen size is %lu\n", gvar->ca.chunkcomplen);
+ MM_GetPtr(&compseg,gvar->ca.chunkcomplen,gvar);
+ IN_Ack(gvar);
+ CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen,gvar);
+ CAL_HuffExpand (compseg, (byte far *)gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman);
+ MM_FreePtr(&compseg,gvar);
#endif
#if NUMPICM>0
- MM_GetPtr(&(memptr)picmtable,NUMPICM*sizeof(pictabletype));
+ MM_GetPtr(MEMPTRCONV picmtable,NUMPICM*sizeof(pictabletype));
CAL_GetGrChunkLength(STRUCTPICM); // position file pointer
- MM_GetPtr(&compseg,chunkcomplen);
- CA_FarRead (grhandle,compseg,chunkcomplen);
- CAL_HuffExpand (compseg, (byte far *)picmtable,NUMPICS*sizeof(pictabletype),grhuffman);
+ MM_GetPtr(&compseg,gvar->ca.chunkcomplen);
+ CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen);
+ CAL_HuffExpand (compseg, (byte far *)picmtable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman);
MM_FreePtr(&compseg);
#endif
#if NUMSPRITES>0
- MM_GetPtr(&(memptr)spritetable,NUMSPRITES*sizeof(spritetabletype));
+ MM_GetPtr(MEMPTRCONV spritetable,NUMSPRITES*sizeof(spritetabletype));
CAL_GetGrChunkLength(STRUCTSPRITE); // position file pointer
- MM_GetPtr(&compseg,chunkcomplen);
- CA_FarRead (grhandle,compseg,chunkcomplen);
- CAL_HuffExpand (compseg, (byte far *)spritetable,NUMSPRITES*sizeof(spritetabletype),grhuffman);
+ MM_GetPtr(&compseg,gvar->ca.chunkcomplen);
+ CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen);
+ CAL_HuffExpand (compseg, (byte far *)spritetable,NUMSPRITES*sizeof(spritetabletype),gvar->ca.grhuffman);
MM_FreePtr(&compseg);
#endif
-}*/
+}
//==========================================================================
@@ -1123,44 +1152,44 @@ dinorm:
void CAL_SetupMapFile (global_game_variables_t *gvar)
{
-/* int handle;
+#ifndef MAPHEADERLINKED
+ int handle;
long length;
+#endif
//
// load maphead.ext (offsets and tileinfo for map file)
//
#ifndef MAPHEADERLINKED
- if ((handle = open("MAPHEAD."EXT,
+ if ((handle = open("maphead.mph",
O_RDONLY | O_BINARY, S_IREAD)) == -1)
- printf("Can't open MAPHEAD."EXT"!");
+ Quit (gvar, "Can't open maphead.mph");
length = filelength(handle);
- MM_GetPtr (&(memptr)tinf,length);
- CA_FarRead(handle, tinf, length);
+ MM_GetPtr (MEMPTRCONV gvar->ca.tinf,length,gvar);
+ CA_FarRead(handle, gvar->ca.tinf, length,gvar);
close(handle);
//#else
- tinf = (byte _seg *)FP_SEG(&maphead);
+ gvar->ca.tinf = (byte _seg *)FP_SEG(&maphead);
-#endif*/
+#endif
//
// open the data file
//
//TODO: multiple files
- if ((gvar->ca.file.maphandle[0] = open("data/test.map",
+ if ((gvar->ca.file.maphandle = open("data/test.map",
O_RDONLY | O_BINARY, S_IREAD)) == -1)
- {
- printf("Can't open data/test.map!");
- }
-// #ifdef MAPHEADERLINKED
-// if ((maphandle = open("GAMEMAPS."EXT,
-// O_RDONLY | O_BINARY, S_IREAD)) == -1)
-// Quit (gvar, "Can't open GAMEMAPS."EXT"!");
-// //#else
-// if ((maphandle = open("MAPTEMP."EXT,
-// O_RDONLY | O_BINARY, S_IREAD)) == -1)
-// Quit (gvar, "Can't open MAPTEMP."EXT"!");
-// #endif
+ Quit (gvar, "Can't open data/test.map!");
+/*#ifdef MAPHEADERLINKED
+ if ((maphandle = open("GAMEMAPS.16"ENSION,
+ O_RDONLY | O_BINARY, S_IREAD)) == -1)
+ Quit ("Can't open GAMEMAPS.16"ENSION"!");
+#else
+ if ((maphandle = open("MAPTEMP.16"ENSION,
+ O_RDONLY | O_BINARY, S_IREAD)) == -1)
+ Quit ("Can't open MAPTEMP.16"ENSION"!");
+#endif*/
}
//==========================================================================
@@ -1183,11 +1212,11 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
// load maphead.ext (offsets and tileinfo for map file)
//
#ifndef AUDIOHEADERLINKED
- if ((handle = open("AUDIOHED."EXT,
+ if ((handle = open("AUDIOHED.16",
O_RDONLY | O_BINARY, S_IREAD)) == -1)
- Quit (gvar, "Can't open AUDIOHED."EXT"!");
+ Quit (gvar, "Can't open AUDIOHED.16""!");
length = filelength(handle);
- MM_GetPtr (&(memptr)audiostarts,length);
+ MM_GetPtr (MEMPTRCONV audiostarts,length);
CA_FarRead(handle, (byte far *)audiostarts, length);
close(handle);
#else
@@ -1200,13 +1229,13 @@ void CAL_SetupMapFile (global_game_variables_t *gvar)
// open the data file
//
#ifndef AUDIOHEADERLINKED
- if ((audiohandle = open("AUDIOT."EXT,
+ if ((audiohandle = open("AUDIOT.16",
O_RDONLY | O_BINARY, S_IREAD)) == -1)
- Quit (gvar, "Can't open AUDIOT."EXT"!");
+ Quit (gvar, "Can't open AUDIOT.16""!");
#else
- if ((audiohandle = open("AUDIO."EXT,
+ if ((audiohandle = open("AUDIO.16",
O_RDONLY | O_BINARY, S_IREAD)) == -1)
- Quit (gvar, "Can't open AUDIO."EXT"!");
+ Quit (gvar, "Can't open AUDIO.16""!");
#endif
}*/
@@ -1244,10 +1273,17 @@ void CA_Startup(global_game_variables_t *gvar)
unlink("meminfo.16w");
gvar->handle.showmemhandle = open("meminfo.16w", O_CREAT | O_WRONLY | O_TEXT);
#endif
-/*
- CAL_SetupGrFile ();
- CAL_SetupAudioFile ();*/
+
+
+#ifndef NOMAPS
CAL_SetupMapFile (gvar);
+#endif
+#ifndef NOGRAPHICS
+ CAL_SetupGrFile (gvar);
+#endif
+#ifndef NOAUDIO
+ CAL_SetupMapFile (gvar);
+#endif
gvar->ca.camap.mapon = -1;
gvar->ca.ca_levelbit = 1;
@@ -1278,10 +1314,9 @@ void CA_Shutdown(global_game_variables_t *gvar)
#endif
close(gvar->handle.showmemhandle);
- close(*(gvar->ca.file.maphandle));
-/*++++
- close(grhandle);
- close(audiohandle);*/
+ close(gvar->ca.file.maphandle);
+ close(gvar->ca.file.grhandle);
+ close(gvar->ca.file.audiohandle);
}
//===========================================================================
@@ -1305,13 +1340,13 @@ void CA_CacheAudioChunk (int chunk)
if (audiosegs[chunk])
{
- MM_SetPurge (&(memptr)audiosegs[chunk],0);
+ MM_SetPurge (MEMPTRCONV audiosegs[chunk],0);
return; // allready in memory
}
// MDM begin - (GAMERS EDGE)
//
- if (!FindFile("AUDIO."EXT,NULL,2))
+ if (!FindFile("AUDIO.16",NULL,2))
Quit (gvar, "CA_CacheAudioChunk(): Can't find audio files.");
//
// MDM end
@@ -1327,7 +1362,7 @@ void CA_CacheAudioChunk (int chunk)
#ifndef AUDIOHEADERLINKED
- MM_GetPtr (&(memptr)audiosegs[chunk],compressed);
+ MM_GetPtr (MEMPTRCONV audiosegs[chunk],compressed);
if (mmerror)
return;
@@ -1352,7 +1387,7 @@ void CA_CacheAudioChunk (int chunk)
expanded = *(long far *)source;
source += 4; // skip over length
- MM_GetPtr (&(memptr)audiosegs[chunk],expanded);
+ MM_GetPtr (MEMPTRCONV audiosegs[chunk],expanded);
if (mmerror)
goto done;
CAL_HuffExpand (source,audiosegs[chunk],expanded,audiohuffman);
@@ -1393,7 +1428,7 @@ void CA_LoadAllSounds (void)
for (i=0;idata[0],smallplane*2,grhuffman);
+ CAL_HuffExpand (compressed, &dest->data[0],smallplane*2,gvar->ca.grhuffman);
#endif
@@ -1592,7 +1650,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
//
// expand the unshifted shape
//
- CAL_HuffExpand (compressed, &dest->data[0],smallplane*5,grhuffman);
+ CAL_HuffExpand (compressed, &dest->data[0],smallplane*5,gvar->ca.grhuffman);
//
// make the shifts!
@@ -1724,7 +1782,7 @@ void CAL_ExpandGrChunk (int chunk, byte far *source)
MM_GetPtr (&grsegs[chunk],expanded);
if (mmerror)
return;
- CAL_HuffExpand (source,grsegs[chunk],expanded,grhuffman);
+ CAL_HuffExpand (source,grsegs[chunk],expanded,gvar->ca.grhuffman);
}
}
*/
@@ -1750,21 +1808,21 @@ void CAL_ReadGrChunk (int chunk)
// load the chunk into a buffer, either the miscbuffer if it fits, or allocate
// a larger buffer
//
- pos = GRFILEPOS(chunk);
+ pos = GRFILEPOS(chunk,gvar);
if (pos<0) // $FFFFFFFF start is a sparse tile
return;
next = chunk +1;
- while (GRFILEPOS(next) == -1) // skip past any sparse tiles
+ while (GRFILEPOS(next,gvar) == -1) // skip past any sparse tiles
next++;
- compressed = GRFILEPOS(next)-pos;
+ compressed = GRFILEPOS(next,gvar)-pos;
- lseek(grhandle,pos,SEEK_SET);
+ lseek(gvar->ca.file.grhandle,pos,SEEK_SET);
if (compressed<=BUFFERSIZE)
{
- CA_FarRead(grhandle,bufferseg,compressed);
+ CA_FarRead(gvar->ca.file.grhandle,bufferseg,compressed);
source = bufferseg;
}
else
@@ -1773,7 +1831,7 @@ void CAL_ReadGrChunk (int chunk)
if (mmerror)
return;
MM_SetLock (&bigbufferseg,true);
- CA_FarRead(grhandle,bigbufferseg,compressed);
+ CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed);
source = bigbufferseg;
}
@@ -1800,7 +1858,7 @@ void CA_CacheGrChunk (int chunk)
byte far *source;
int next;
- gvar->video.grneeded[chunk] |= ca_levelbit; // make sure it doesn't get removed
+ gvar->ca.grneeded[chunk] |= ca_levelbit; // make sure it doesn't get removed
if (grsegs[chunk])
{
MM_SetPurge (&grsegs[chunk],0);
@@ -1809,7 +1867,7 @@ void CA_CacheGrChunk (int chunk)
// MDM begin - (GAMERS EDGE)
//
- if (!FindFile("EGAGRAPH."EXT,NULL,2))
+ if (!FindFile("EGAGRAPH.16",NULL,2))
Quit (gvar, "CA_CacheGrChunk(): Can't find graphics files.");
//
// MDM end
@@ -1818,7 +1876,7 @@ void CA_CacheGrChunk (int chunk)
// load the chunk into a buffer, either the miscbuffer if it fits, or allocate
// a larger buffer
//
- pos = GRFILEPOS(chunk);
+ pos = GRFILEPOS(chunk,gvar);
if (pos<0) // $FFFFFFFF start is a sparse tile
return;
@@ -1826,20 +1884,20 @@ void CA_CacheGrChunk (int chunk)
while (GRFILEPOS(next) == -1) // skip past any sparse tiles
next++;
- compressed = GRFILEPOS(next)-pos;
+ compressed = GRFILEPOS(next,gvar)-pos;
- lseek(grhandle,pos,SEEK_SET);
+ lseek(gvar->ca.file.grhandle,pos,SEEK_SET);
if (compressed<=BUFFERSIZE)
{
- CA_FarRead(grhandle,bufferseg,compressed);
+ CA_FarRead(gvar->ca.file.grhandle,bufferseg,compressed);
source = bufferseg;
}
else
{
MM_GetPtr(&bigbufferseg,compressed);
MM_SetLock (&bigbufferseg,true);
- CA_FarRead(grhandle,bigbufferseg,compressed);
+ CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed);
source = bigbufferseg;
}
@@ -1898,12 +1956,12 @@ void CA_CacheMap (global_game_variables_t *gvar)
// if (pos<0) // $FFFFFFFF start is a sparse map
// printf("CA_CacheMap: Tried to load a non existent map!");
-// MM_GetPtr(&(memptr)gvar->ca.camapheaderseg[mapnum],sizeof(maptype));
+// MM_GetPtr(MEMPTRCONV gvar->ca.camapheaderseg[mapnum],sizeof(maptype));
// lseek(maphandle,pos,SEEK_SET);
// CA_FarRead (maphandle,(memptr)mapheaderseg[mapnum],sizeof(maptype));
// }
// else
-// MM_SetPurge (&(memptr)mapheaderseg[mapnum], 0, &(gvar->mm));
+// MM_SetPurge (MEMPTRCONV mapheaderseg[mapnum], 0, &(gvar->mm));
//
// load the planes in
@@ -1921,7 +1979,7 @@ void CA_CacheMap (global_game_variables_t *gvar)
if (!compressed)
continue; // the plane is not used in this game
- dest = &(memptr)mapsegs[plane];
+ dest = MEMPTRCONV mapsegs[plane];
MM_GetPtr(dest,size);
lseek(maphandle,pos,SEEK_SET);
@@ -2024,7 +2082,7 @@ void CA_ClearMarks (global_game_variables_t *gvar)
int i;
for (i=0;ivideo.grneeded[i]&=~gvar->ca.ca_levelbit;
+ gvar->ca.grneeded[i]&=~gvar->ca.ca_levelbit;
}
//===========================================================================
@@ -2041,7 +2099,7 @@ void CA_ClearMarks (global_game_variables_t *gvar)
void CA_ClearAllMarks (global_game_variables_t *gvar)
{
- _fmemset (gvar->video.grneeded,0,sizeof(gvar->video.grneeded));
+ _fmemset (gvar->ca.grneeded,0,sizeof(gvar->ca.grneeded));
gvar->ca.ca_levelbit = 1;
gvar->ca.ca_levelnum = 0;
}
@@ -2090,7 +2148,7 @@ void CA_SetAllPurge (global_game_variables_t *gvar)
//
// free cursor sprite and background save
//
- //VW_FreeCursor ();
+ //____VW_FreeCursor ();
//
// free map headers and map planes
@@ -2101,14 +2159,14 @@ void CA_SetAllPurge (global_game_variables_t *gvar)
for (i=0;i<3;i++)
if (gvar->ca.mapsegs[i])
- MM_FreePtr (gvar->ca.mapsegs[i], gvar);
+ MM_FreePtr ((memptr *)&gvar->ca.mapsegs[i], gvar);
//
// free sounds
//
for (i=0;ica.audiosegs[i])
- MM_SetPurge (gvar->ca.audiosegs[i],3, gvar);
+ MM_SetPurge ((memptr *)&gvar->ca.audiosegs[i],3, gvar);
//
// free graphics
@@ -2276,7 +2334,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
// MDM begin - (GAMERS EDGE)
//
-// if (!FindFile("EGAGRAPH."EXT,NULL,2))
+// if (!FindFile("EGAGRAPH.16",NULL,2))
// Quit (gvar, "CA_CacheMarks(): Can't find graphics files.");
//
// MDM end
@@ -2305,7 +2363,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
if (dialog && updatecachebox)
updatecachebox ();
- pos = GRFILEPOS(i);
+ pos = GRFILEPOS(i,gvar);
if (pos<0)
continue;
@@ -2313,7 +2371,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
while (GRFILEPOS(next) == -1) // skip past any sparse tiles
next++;
- compressed = GRFILEPOS(next)-pos;
+ compressed = GRFILEPOS(next,gvar)-pos;
endpos = pos+compressed;
if (compressed<=BUFFERSIZE)
@@ -2336,10 +2394,10 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
if (next == NUMCHUNKS)
continue;
- nextpos = GRFILEPOS(next);
- while (GRFILEPOS(++next) == -1) // skip past any sparse tiles
+ nextpos = GRFILEPOS(next,gvar);
+ while (GRFILEPOS(++next,gvar) == -1) // skip past any sparse tiles
;
- nextendpos = GRFILEPOS(next);
+ nextendpos = GRFILEPOS(next,gvar);
if (nextpos - endpos <= MAXEMPTYREAD
&& nextendpos-pos <= BUFFERSIZE)
endpos = nextendpos;
@@ -2347,8 +2405,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
next = NUMCHUNKS; // read pos to posend
}
- lseek(grhandle,pos,SEEK_SET);
- CA_FarRead(grhandle,(gvar->mm.bufferseg),endpos-pos,gvar);
+ lseek(gvar->ca.file.grhandle,pos,SEEK_SET);
+ CA_FarRead(gvar->ca.file.grhandle,(gvar->mm.bufferseg),endpos-pos,gvar);
bufferstart = pos;
bufferend = endpos;
source = bufferseg;
@@ -2361,8 +2419,8 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
if (mmerror)
return;
MM_SetLock (&bigbufferseg,true);
- lseek(grhandle,pos,SEEK_SET);
- CA_FarRead(grhandle,bigbufferseg,compressed,gvar);
+ lseek(gvar->ca.file.grhandle,pos,SEEK_SET);
+ CA_FarRead(gvar->ca.file.grhandle,bigbufferseg,compressed,gvar);
source = bigbufferseg;
}
@@ -2381,3 +2439,13 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar)
if (dialog && finishcachebox)
finishcachebox();
}*/
+
+void CA_CannotOpen(char *string, global_game_variables_t *gvar)
+{
+ char str[30];
+
+ strcpy(str,"Can't open ");
+ strcat(str,string);
+ strcat(str,"!\n");
+ Quit (gvar, str);
+}