// // P_UnArchiveMap // void P_UnArchiveMap(void) { if ((automapactive = saveg_read_bool()) || mapwindow) AM_Start(automapactive); if ((markpointnum = saveg_read32())) { markpoints = I_Realloc(markpoints, markpointnum * sizeof(*markpoints)); for (int i = 0; i < markpointnum; i++) { markpoints[i].x = saveg_read32(); markpoints[i].y = saveg_read32(); } } if ((pathpointnum = saveg_read32())) { pathpoints = I_Realloc(pathpoints, pathpointnum * sizeof(*pathpoints)); for (int i = 0; i < pathpointnum; i++) { pathpoints[i].x = saveg_read32(); pathpoints[i].y = saveg_read32(); } } }
// [crispy] remove MAXVISPLANES limit static void R_RaiseVisplanes (visplane_t** vp) { if (lastvisplane - visplanes == numvisplanes) { int numvisplanes_old = numvisplanes; visplane_t* visplanes_old = visplanes; numvisplanes = numvisplanes ? 2 * numvisplanes : MAXVISPLANES; visplanes = I_Realloc(visplanes, numvisplanes * sizeof(*visplanes)); memset(visplanes + numvisplanes_old, 0, (numvisplanes - numvisplanes_old) * sizeof(*visplanes)); lastvisplane = visplanes + numvisplanes_old; floorplane = visplanes + (floorplane - visplanes_old); ceilingplane = visplanes + (ceilingplane - visplanes_old); if (numvisplanes_old) fprintf(stderr, "R_FindPlane: Hit MAXVISPLANES limit at %d, raised to %d.\n", numvisplanes_old, numvisplanes); // keep the pointer passed as argument in relation to the visplanes pointer if (vp) *vp = visplanes + (*vp - visplanes_old); } }
void W_AddFile (char *filename) { wadinfo_t header; lumpinfo_t* lump_p; unsigned i; int handle; int length; int startlump; filelump_t* fileinfo; filelump_t singleinfo; int storehandle; // open the file and add to directory // handle reload indicator. if (filename[0] == '~') { filename++; reloadname = filename; reloadlump = numlumps; } if ( (handle = I_FileOpenRead(filename)) == -1) { I_printf (" couldn't open %s\n",filename); return; } I_printf (" adding %s\n",filename); startlump = numlumps; if (strcmp (filename+strlen(filename)-3 , "wad" ) && strcmp (filename+strlen(filename)-3 , "WAD" ) ) { // single lump file fileinfo = &singleinfo; singleinfo.filepos = 0; singleinfo.size = LONG(filelength(handle)); ExtractFileBase (filename, singleinfo.name); numlumps++; } else { // WAD file I_FileRead (handle, &header, sizeof(header)); if (strncmp(header.identification,"IWAD",4)) { // Homebrew levels? if (strncmp(header.identification,"PWAD",4)) { I_Error ("Wad file %s doesn't have IWAD " "or PWAD id\n", filename); } // ???modifiedgame = true; } header.numlumps = LONG(header.numlumps); header.infotableofs = LONG(header.infotableofs); length = header.numlumps*sizeof(filelump_t); fileinfo = alloca (length); I_FilePos(handle, header.infotableofs); I_FileRead(handle, fileinfo, length); numlumps += header.numlumps; } // Fill in lumpinfo lumpinfo = I_Realloc (lumpinfo, numlumps*sizeof(lumpinfo_t)); if (!lumpinfo) I_Error ("Couldn't realloc lumpinfo"); lump_p = &lumpinfo[startlump]; storehandle = reloadname ? -1 : handle; for (i=startlump ; i<numlumps ; i++,lump_p++, fileinfo++) { lump_p->handle = storehandle; lump_p->position = LONG(fileinfo->filepos); lump_p->size = LONG(fileinfo->size); strncpy (lump_p->name, fileinfo->name, 8); } if (reloadname) I_FileClose(handle); }