From 93c8a62c99dc4977cdbb7d7b746d5f1f0b88d9c2 Mon Sep 17 00:00:00 2001 From: NepDisk <16447892+NepDisk@users.noreply.github.com> Date: Thu, 19 Sep 2024 19:23:18 -0400 Subject: [PATCH] Add K_TerrainInit to partload instead, Exitlevel on Terrain definition load to prevent issues --- src/k_terrain.c | 8 +++++++- src/k_terrain.h | 5 +++-- src/p_setup.c | 15 ++++++++++++++- src/w_wad.c | 2 -- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/k_terrain.c b/src/k_terrain.c index a5e0f7f2a..c0530acee 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -2211,10 +2211,11 @@ static boolean K_TERRAINLumpParser(char *data, size_t size) See header file for description. --------------------------------------------------*/ -void K_InitTerrain(UINT16 wadNum) +boolean K_InitTerrain(UINT16 wadNum) { UINT16 lumpNum; lumpinfo_t *lump_p = wadfiles[wadNum]->lumpinfo; + boolean terrainLoaded = false; // Iterate through all lumps and compare the name individually. // In PK3 files, you can potentially have multiple TERRAIN differentiated by @@ -2249,6 +2250,8 @@ void K_InitTerrain(UINT16 wadNum) size = W_LumpLengthPwad(wadNum, lumpNum); CONS_Printf(M_GetText("Loading TERRAIN from %s\n"), name); + terrainLoaded = true; + datacopy = (char *)Z_Malloc((size+1)*sizeof(char),PU_STATIC,NULL); memmove(datacopy,data,size); @@ -2265,4 +2268,7 @@ void K_InitTerrain(UINT16 wadNum) } R_ClearTextureNumCache(false); + + return terrainLoaded; + } diff --git a/src/k_terrain.h b/src/k_terrain.h index faae4df18..616f31468 100644 --- a/src/k_terrain.h +++ b/src/k_terrain.h @@ -571,14 +571,15 @@ void K_UpdateTerrainOverlay(mobj_t *mo); Finds the TERRAIN lumps in a WAD/PK3, and processes all of them. + Also returns if new terrains were loaded Input Arguments:- wadNum - WAD file ID to process. Return:- - None + terrainLoaded - Terrain was loaded --------------------------------------------------*/ -void K_InitTerrain(UINT16 wadNum); +boolean K_InitTerrain(UINT16 wadNum); #endif // __K_TERRAIN_H__ diff --git a/src/p_setup.c b/src/p_setup.c index d51d3fd4a..f133b68da 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -175,6 +175,7 @@ mapthing_t *redctfstarts[MAXPLAYERS]; // Might be replacable with parameters, but non-trivial when the functions are called on separate tics static SINT8 partadd_stage = -1; static boolean partadd_replacescurrentmap = false; +static boolean partadd_terrainloaded = false; static boolean partadd_important = false; UINT16 partadd_earliestfile = UINT16_MAX; @@ -8486,7 +8487,11 @@ UINT16 P_PartialAddWadFile(const char *wadfilename) // Reload BRIGHT K_InitBrightmapsPwad(wadnum); - + + // Reload TERRAIN + if (K_InitTerrain(wadnum)) + partadd_terrainloaded = true; + // // look for skins // @@ -8607,6 +8612,13 @@ boolean P_MultiSetupWadFiles(boolean fullsetup) if (server) SendNetXCmd(XD_EXITLEVEL, NULL, 0); } + + if (partadd_terrainloaded && gamestate == GS_LEVEL) + { + CONS_Printf(M_GetText("Terrain Definition reloaded, ending the level to ensure consistency.\n")); + if (server) + SendNetXCmd(XD_EXITLEVEL, NULL, 0); + } partadd_stage = -1; } @@ -8616,6 +8628,7 @@ boolean P_MultiSetupWadFiles(boolean fullsetup) { partadd_important = false; partadd_replacescurrentmap = false; + partadd_terrainloaded = false; partadd_earliestfile = UINT16_MAX; return true; } diff --git a/src/w_wad.c b/src/w_wad.c index bf1787ede..abcae3918 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -872,8 +872,6 @@ UINT16 W_InitFile(const char *filename, boolean mainfile, boolean startup) break; } - K_InitTerrain(numwadfiles - 1); - if (refreshdirmenu & REFRESHDIR_GAMEDATA) G_LoadGameData(); DEH_UpdateMaxFreeslots();