From 12bc9db609e5b20684372ed30e4240275d858642 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 29 Oct 2023 08:13:01 +0100 Subject: [PATCH] hooked up the per-level colormaps with the hardware renderer. --- src/g_level.cpp | 5 +---- src/g_levellocals.h | 1 + src/gamedata/g_mapinfo.h | 1 - src/gamedata/r_defs.h | 2 +- src/p_saveg.cpp | 1 + src/rendering/2d/v_blend.cpp | 2 ++ src/rendering/swrenderer/r_swrenderer.cpp | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/g_level.cpp b/src/g_level.cpp index abab361063..2fb9de298c 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1822,11 +1822,8 @@ void FLevelLocals::Init() } } - if (strnicmp (info->CustomColorMap.GetChars(), "COLORMAP", 8) != 0) - { - flags3 |= LEVEL3_HAS_CUSTOM_COLORMAP; - } + globalcolormap = R_ColormapNumForName(info->CustomColorMap.GetChars()); airsupply = info->airsupply*TICRATE; outsidefog = info->outsidefog; WallVertLight = info->WallVertLight*2; diff --git a/src/g_levellocals.h b/src/g_levellocals.h index 504eea6075..58aac058f6 100644 --- a/src/g_levellocals.h +++ b/src/g_levellocals.h @@ -642,6 +642,7 @@ public: double sky1pos, sky2pos; float hw_sky1pos, hw_sky2pos; bool skystretch; + uint32_t globalcolormap; int total_secrets; int found_secrets; diff --git a/src/gamedata/g_mapinfo.h b/src/gamedata/g_mapinfo.h index 8906e043cc..427a32830a 100644 --- a/src/gamedata/g_mapinfo.h +++ b/src/gamedata/g_mapinfo.h @@ -270,7 +270,6 @@ enum ELevelFlags : unsigned int LEVEL3_AVOIDMELEE = 0x00020000, // global flag needed for proper MBF support. LEVEL3_NOJUMPDOWN = 0x00040000, // only for MBF21. Inverse of MBF's dog_jumping flag. LEVEL3_LIGHTCREATED = 0x00080000, // a light had been created in the last frame - LEVEL3_HAS_CUSTOM_COLORMAP = 0x00100000, // custom colormap property from dsda-doom }; diff --git a/src/gamedata/r_defs.h b/src/gamedata/r_defs.h index c05550b54d..3b909ce282 100644 --- a/src/gamedata/r_defs.h +++ b/src/gamedata/r_defs.h @@ -693,7 +693,7 @@ struct sector_t int sky; // MBF sky transfer info. int validcount; // if == validcount, already checked - uint32_t bottommap, midmap, topmap; // killough 4/4/98: dynamic colormaps + uint32_t selfmap, bottommap, midmap, topmap; // killough 4/4/98: dynamic colormaps // [RH] these can also be blend values if // the alpha mask is non-zero diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index 9f481be06c..de7f2a49d7 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -303,6 +303,7 @@ FSerializer &Serialize(FSerializer &arc, const char *key, sector_t &p, sector_t //("bottommap", p.bottommap) //("midmap", p.midmap) //("topmap", p.topmap) + //("selfmap", p.selfmap) // todo: if this becomes changeable we need a colormap serializer. ("damageamount", p.damageamount, def->damageamount) ("damageinterval", p.damageinterval, def->damageinterval) ("leakydamage", p.leakydamage, def->leakydamage) diff --git a/src/rendering/2d/v_blend.cpp b/src/rendering/2d/v_blend.cpp index 9fdba41791..ec3a7a3908 100644 --- a/src/rendering/2d/v_blend.cpp +++ b/src/rendering/2d/v_blend.cpp @@ -250,6 +250,8 @@ FVector4 V_CalcBlend(sector_t* viewsector, PalEntry* modulateColor) auto s = viewsector->heightsec; blendv = s->floorplane.PointOnSide(vpp) < 0 ? s->bottommap : s->ceilingplane.PointOnSide(vpp) < 0 ? s->topmap : s->midmap; } + else if (viewsector->selfmap != 0) blendv = viewsector->selfmap; + else blendv = viewsector->Level->globalcolormap; } else { diff --git a/src/rendering/swrenderer/r_swrenderer.cpp b/src/rendering/swrenderer/r_swrenderer.cpp index 7c86a64d96..bb7340ef4b 100644 --- a/src/rendering/swrenderer/r_swrenderer.cpp +++ b/src/rendering/swrenderer/r_swrenderer.cpp @@ -271,7 +271,7 @@ void FSoftwareRenderer::SetColormap(FLevelLocals *Level) NormalLight.Maps = realcolormaps.Maps; NormalLight.ChangeColor(PalEntry(255, 255, 255), 0); NormalLight.ChangeFade(Level->fadeto); - if(Level->info->flags3 & LEVEL3_HAS_CUSTOM_COLORMAP) + if(Level->globalcolormap != 0) // this deliberately ignores the translated value and goes directly to the source. { SetDefaultColormap(Level->info->CustomColorMap.GetChars()); }