From 1dec34c2e2ccb52c2f0bc8336c905b282202a4e1 Mon Sep 17 00:00:00 2001 From: GenericHeroGuy Date: Wed, 29 Jan 2025 16:56:25 +0100 Subject: [PATCH] Fix PK3 map folders in vres_GetMap --- src/w_wad.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/w_wad.c b/src/w_wad.c index 18f3d3da4..6271664a4 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -1016,6 +1016,19 @@ const char *W_CheckNameForNum(lumpnum_t lumpnum) return W_CheckNameForNumPwad(WADFILENUM(lumpnum),LUMPNUM(lumpnum)); } +const char *W_CheckFullNameForNumPwad(UINT16 wad, UINT16 lump) +{ + if (lump >= wadfiles[wad]->numlumps || !TestValidLump(wad, 0)) + return NULL; + + return wadfiles[wad]->lumpinfo[lump].fullname; +} + +const char *W_CheckFullNameForNum(lumpnum_t lumpnum) +{ + return W_CheckFullNameForNumPwad(WADFILENUM(lumpnum),LUMPNUM(lumpnum)); +} + // // wadid is a wad number // (Used for sprites loading) @@ -2370,7 +2383,18 @@ virtres_t* vres_GetMap(lumpnum_t lumpnum) { // Count number of lumps until the end of resource OR up until next "MAPXX" lump. lumpnum_t lumppos = lumpnum + 1; - for (i = LUMPNUM(lumppos); i < wadfiles[WADFILENUM(lumpnum)]->numlumps; i++, lumppos++, numlumps++) + lumpnum_t lastlump = wadfiles[WADFILENUM(lumpnum)]->numlumps; + // or the end of directory, for PK3 files + if (wadfiles[WADFILENUM(lumpnum)]->type == RET_PK3) + { + const char *fullname = W_CheckFullNameForNum(lumpnum); + const char *dirend = strrchr(fullname, '/'); + char *dirname = malloc(dirend - fullname + 2); + strlcpy(dirname, fullname, dirend - fullname + 2); + lastlump = W_CheckNumForFolderEndPK3(dirname, WADFILENUM(lumpnum), lumpnum); + free(dirname); + } + for (i = LUMPNUM(lumppos); i < lastlump; i++, lumppos++, numlumps++) if (memcmp(W_CheckNameForNum(lumppos), "MAP", 3) == 0) break; numlumps++;