int FIWadManager::ScanIWAD (const char *iwad) { FResourceFile *iwadfile = FResourceFile::OpenResourceFile(iwad, NULL, true); if (iwadfile != NULL) { ClearChecks(); for(DWORD ii = 0; ii < iwadfile->LumpCount(); ii++) { FResourceLump *lump = iwadfile->GetLump(ii); CheckLumpName(lump->Name); if (lump->FullName != NULL) { if (strnicmp(lump->FullName, "maps/", 5) == 0) { FString mapname(lump->FullName+5, strcspn(lump->FullName+5, ".")); CheckLumpName(mapname); } else if (0 == strlen(lump->Name) && strlen(lump->FullName) > 8) { CheckLumpName(lump->FullName); } } } delete iwadfile; } return GetIWadInfo(); }
void FWadCollection::RenameSprites () { bool renameAll; bool MNTRZfound = false; static const uint32_t HereticRenames[] = { MAKE_ID('H','E','A','D'), MAKE_ID('L','I','C','H'), // Ironlich }; static const uint32_t HexenRenames[] = { MAKE_ID('B','A','R','L'), MAKE_ID('Z','B','A','R'), // ZBarrel MAKE_ID('A','R','M','1'), MAKE_ID('A','R','_','1'), // MeshArmor MAKE_ID('A','R','M','2'), MAKE_ID('A','R','_','2'), // FalconShield MAKE_ID('A','R','M','3'), MAKE_ID('A','R','_','3'), // PlatinumHelm MAKE_ID('A','R','M','4'), MAKE_ID('A','R','_','4'), // AmuletOfWarding MAKE_ID('S','U','I','T'), MAKE_ID('Z','S','U','I'), // ZSuitOfArmor and ZArmorChunk MAKE_ID('T','R','E','1'), MAKE_ID('Z','T','R','E'), // ZTree and ZTreeDead MAKE_ID('T','R','E','2'), MAKE_ID('T','R','E','S'), // ZTreeSwamp150 MAKE_ID('C','A','N','D'), MAKE_ID('B','C','A','N'), // ZBlueCandle MAKE_ID('R','O','C','K'), MAKE_ID('R','O','K','K'), // rocks and dirt in a_debris.cpp MAKE_ID('W','A','T','R'), MAKE_ID('H','W','A','T'), // Strife also has WATR MAKE_ID('G','I','B','S'), MAKE_ID('P','O','L','5'), // RealGibs MAKE_ID('E','G','G','M'), MAKE_ID('P','R','K','M'), // PorkFX MAKE_ID('I','N','V','U'), MAKE_ID('D','E','F','N'), // Icon of the Defender }; static const uint32_t StrifeRenames[] = { MAKE_ID('M','I','S','L'), MAKE_ID('S','M','I','S'), // lots of places MAKE_ID('A','R','M','1'), MAKE_ID('A','R','M','3'), // MetalArmor MAKE_ID('A','R','M','2'), MAKE_ID('A','R','M','4'), // LeatherArmor MAKE_ID('P','M','A','P'), MAKE_ID('S','M','A','P'), // StrifeMap MAKE_ID('T','L','M','P'), MAKE_ID('T','E','C','H'), // TechLampSilver and TechLampBrass MAKE_ID('T','R','E','1'), MAKE_ID('T','R','E','T'), // TreeStub MAKE_ID('B','A','R','1'), MAKE_ID('B','A','R','C'), // BarricadeColumn MAKE_ID('S','H','T','2'), MAKE_ID('M','P','U','F'), // MaulerPuff MAKE_ID('B','A','R','L'), MAKE_ID('B','B','A','R'), // StrifeBurningBarrel MAKE_ID('T','R','C','H'), MAKE_ID('T','R','H','L'), // SmallTorchLit MAKE_ID('S','H','R','D'), MAKE_ID('S','H','A','R'), // glass shards MAKE_ID('B','L','S','T'), MAKE_ID('M','A','U','L'), // Mauler MAKE_ID('L','O','G','G'), MAKE_ID('L','O','G','W'), // StickInWater MAKE_ID('V','A','S','E'), MAKE_ID('V','A','Z','E'), // Pot and Pitcher MAKE_ID('C','N','D','L'), MAKE_ID('K','N','D','L'), // Candle MAKE_ID('P','O','T','1'), MAKE_ID('M','P','O','T'), // MetalPot MAKE_ID('S','P','I','D'), MAKE_ID('S','T','L','K'), // Stalker }; const uint32_t *renames; int numrenames; switch (gameinfo.gametype) { case GAME_Doom: default: // Doom's sprites don't get renamed. return; case GAME_Heretic: renames = HereticRenames; numrenames = sizeof(HereticRenames)/8; break; case GAME_Hexen: renames = HexenRenames; numrenames = sizeof(HexenRenames)/8; break; case GAME_Strife: renames = StrifeRenames; numrenames = sizeof(StrifeRenames)/8; break; } for (uint32_t i=0; i< LumpInfo.Size(); i++) { // check for full Minotaur animations. If this is not found // some frames need to be renamed. if (LumpInfo[i].lump->Namespace == ns_sprites) { if (LumpInfo[i].lump->dwName == MAKE_ID('M', 'N', 'T', 'R') && LumpInfo[i].lump->Name[4] == 'Z' ) { MNTRZfound = true; break; } } } renameAll = !!Args->CheckParm ("-oldsprites") || nospriterename; for (uint32_t i = 0; i < LumpInfo.Size(); i++) { if (LumpInfo[i].lump->Namespace == ns_sprites) { // Only sprites in the IWAD normally get renamed if (renameAll || LumpInfo[i].wadnum == GetIwadNum()) { for (int j = 0; j < numrenames; ++j) { if (LumpInfo[i].lump->dwName == renames[j*2]) { LumpInfo[i].lump->dwName = renames[j*2+1]; } } if (gameinfo.gametype == GAME_Hexen) { if (CheckLumpName (i, "ARTIINVU")) { LumpInfo[i].lump->Name[4]='D'; LumpInfo[i].lump->Name[5]='E'; LumpInfo[i].lump->Name[6]='F'; LumpInfo[i].lump->Name[7]='N'; } } } if (!MNTRZfound) { if (LumpInfo[i].lump->dwName == MAKE_ID('M', 'N', 'T', 'R')) { if (LumpInfo[i].lump->Name[4] >= 'F' && LumpInfo[i].lump->Name[4] <= 'K') { LumpInfo[i].lump->Name[4] += 'U' - 'F'; } } } // When not playing Doom rename all BLOD sprites to BLUD so that // the same blood states can be used everywhere if (!(gameinfo.gametype & GAME_DoomChex)) { if (LumpInfo[i].lump->dwName == MAKE_ID('B', 'L', 'O', 'D')) { LumpInfo[i].lump->dwName = MAKE_ID('B', 'L', 'U', 'D'); } } } } }