From d67c9862aee1e690febc2c946ff7a267d90c4bec Mon Sep 17 00:00:00 2001 From: GenericHeroGuy Date: Fri, 24 Jan 2025 17:17:47 +0100 Subject: [PATCH] Add compatmode flag --- src/d_netcmd.c | 2 ++ src/w_wad.c | 40 ++++++++++++++++++++++++++++++++++++++++ src/w_wad.h | 1 + 3 files changed, 43 insertions(+) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index fde1a4e27..2a488a17c 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -4634,6 +4634,8 @@ static void Command_ListWADS_f(void) CONS_Printf("\x82 * %.2d\x80: %s\n", i, tempname); else if (!wadfiles[i]->important) CONS_Printf("\x86 %.2d: %s\n", i, tempname); + else if (wadfiles[i]->compatmode) + CONS_Printf("\x8a %.2d: %s\n", i, tempname); else CONS_Printf(" %.2d: %s\n", i, tempname); } diff --git a/src/w_wad.c b/src/w_wad.c index afc6c2caf..e9f346746 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -291,6 +291,33 @@ static inline void W_LoadDehackedLumps(UINT16 wadnum, boolean mainfile) #endif } +static inline boolean CheckCompatFilename(char *filename) +{ + // check for a K prefix + char *basename = strrchr(filename, *PATHSEP); + return toupper(basename ? basename[1] : filename[0]) == 'K'; +} + +// try to figure out if a PK3 file needs compatmode enabled (palette remap) +static inline boolean CheckCompatZip(UINT16 wadnum) +{ + if (CheckCompatFilename(wadfiles[wadnum]->filename)) + return true; + + // assume RR/2.2 for PK3s so basegame assets work + return false; +} + +// ditto, but for WADs +static inline boolean CheckCompatWad(UINT16 wadnum) +{ + if (CheckCompatFilename(wadfiles[wadnum]->filename)) + return true; + + // assume Kart/2.1 for WADs so basegame assets work + return true; +} + /** Compute MD5 message digest for bytes read from STREAM of this filname. * * The resulting message digest number will be written into the 16 bytes @@ -872,6 +899,19 @@ UINT16 W_InitFile(const char *filename, boolean mainfile, boolean startup) break; } + // check if compatmode is needed + switch (wadfile->type) + { + case RET_WAD: + wadfile->compatmode = CheckCompatWad(numwadfiles - 1); + break; + case RET_PK3: + wadfile->compatmode = CheckCompatZip(numwadfiles - 1); + break; + default: + break; + } + if (refreshdirmenu & REFRESHDIR_GAMEDATA) G_LoadGameData(); DEH_UpdateMaxFreeslots(); diff --git a/src/w_wad.h b/src/w_wad.h index 43aa1b228..27b7174ac 100644 --- a/src/w_wad.h +++ b/src/w_wad.h @@ -128,6 +128,7 @@ struct wadfile_t UINT8 md5sum[16]; boolean important; // also network - !W_VerifyNMUSlumps + boolean compatmode; // TODO: network this too! }; #define WADFILENUM(lumpnum) (UINT16)((lumpnum)>>16) // wad flumpnum>>16) // wad file number in upper word