void W_NWTDashMerge(char *filename) { wad_file_t *wad_file; int old_numlumps; int i; old_numlumps = numlumps; // Load PWAD wad_file = W_AddFile(filename); if (wad_file == NULL) { return; } // IWAD is at the start, PWAD was appended to the end iwad.lumps = lumpinfo; iwad.numlumps = old_numlumps; pwad.lumps = lumpinfo + old_numlumps; pwad.numlumps = numlumps - old_numlumps; // Setup sprite/flat lists SetupLists(); // Search through the IWAD sprites list. for (i=0; i<iwad_sprites.numlumps; ++i) { if (FindInList(&pwad, iwad_sprites.lumps[i]->name) >= 0) { // Replace this entry with an empty string. This is what // nwt -merge does. M_StringCopy(iwad_sprites.lumps[i]->name, "", 8); } } // Discard PWAD // The PWAD must now be added in again with -file. numlumps = old_numlumps; W_CloseFile(wad_file); }
// // W_WadType // Returns IWAD, PWAD or 0. // int W_WadType(char *filename) { wadinfo_t header; wad_file_t *wad_file = W_OpenFile(filename); if (!wad_file) return 0; W_Read(wad_file, 0, &header, sizeof(header)); W_CloseFile(wad_file); if (!strncmp(header.identification, "IWAD", 4)) return IWAD; else if (!strncmp(header.identification, "PWAD", 4)) return PWAD; else return 0; }
// The Doom reload hack. The idea here is that if you give a WAD file to -file // prefixed with the ~ hack, that WAD file will be reloaded each time a new // level is loaded. This lets you use a level editor in parallel and make // incremental changes to the level you're working on without having to restart // the game after every change. // But: the reload feature is a fragile hack... void W_Reload(void) { char *filename; lumpindex_t i; if (reloadname == NULL) { return; } // We must free any lumps being cached from the PWAD we're about to reload: for (i = reloadlump; i < numlumps; ++i) { if (lumpinfo[i]->cache != NULL) { Z_Free(lumpinfo[i]->cache); } } // Reset numlumps to remove the reload WAD file: numlumps = reloadlump; // Now reload the WAD file. filename = reloadname; W_CloseFile(reloadhandle); free(reloadlumps); reloadname = NULL; reloadlump = -1; reloadhandle = NULL; W_AddFile(filename); free(filename); // The WAD directory has changed, so we have to regenerate the // fast lookup hashtable: W_GenerateHashTable(); }