From ab2d35ba75df6e1dcf68d136ac08d2f582f2b3b2 Mon Sep 17 00:00:00 2001 From: Roman Fomin Date: Tue, 20 Feb 2024 14:20:39 +0700 Subject: [PATCH] redo translucency options (#1496) * Rename "Enable Translucency"->"Sprite Translucency" * Instantly enable/disable translucency for things * Make a thermo for the translucency percentage * Remove unnecessary macros * Remove predefined translucency check * add S_THRM_PCT flag to show % sign --- src/d_deh.c | 2 -- src/d_main.c | 45 +-------------------------------------------- src/d_main.h | 2 -- src/doomstat.h | 4 ---- src/g_game.c | 2 -- src/m_cheat.c | 1 - src/m_menu.c | 13 ++++++------- src/m_menu.h | 1 + src/r_things.c | 3 ++- 9 files changed, 10 insertions(+), 63 deletions(-) diff --git a/src/d_deh.c b/src/d_deh.c index 9932e14c..80091bff 100644 --- a/src/d_deh.c +++ b/src/d_deh.c @@ -33,7 +33,6 @@ #include "p_inter.h" #include "g_game.h" #include "d_think.h" -#include "d_main.h" // D_DehChangePredefinedTranslucency() #include "w_wad.h" #include "memio.h" @@ -1996,7 +1995,6 @@ void deh_procThing(DEHFILE *fpin, FILE* fpout, char *line) } mobjinfo[indexnum].flags = value; - D_DehChangePredefinedTranslucency(indexnum); break; case DEH_MOBJINFO_INFIGHTING_GROUP: diff --git a/src/d_main.c b/src/d_main.c index d44df70e..2cb5b2bb 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -288,7 +288,7 @@ void D_Display (void) wipe = false; // save the current screen if about to wipe - if (gamestate != wipegamestate && NOTSTRICTMODE(screen_melt)) + if (gamestate != wipegamestate && (strictmode || screen_melt)) { wipe = true; wipe_StartScreen(0, 0, video.unscaledw, SCREENHEIGHT); @@ -1964,49 +1964,6 @@ void D_SetBloodColor(void) } } -static const int predefined_translucency[] = { - // MBF - MT_FIRE, MT_SMOKE, MT_FATSHOT, MT_BRUISERSHOT, - MT_SPAWNFIRE, MT_TROOPSHOT, MT_HEADSHOT, MT_PLASMA, - MT_BFG, MT_ARACHPLAZ, MT_PUFF, MT_TFOG, - MT_IFOG, MT_MISC12, MT_INV, MT_INS, - MT_MEGA, - // [Woof!] - MT_PLASMA1, MT_PLASMA2 -}; - -static boolean deh_set_translucency[arrlen(predefined_translucency)] = {false}; - -void D_DehChangePredefinedTranslucency(int index) -{ - int i; - - for (i = 0; i < arrlen(predefined_translucency); ++i) - { - if (predefined_translucency[i] == index) - { - deh_set_translucency[i] = true; - break; - } - } -} - -void D_SetPredefinedTranslucency(void) -{ - int i; - - for (i = 0; i < arrlen(predefined_translucency); ++i) - { - if (deh_set_translucency[i]) - continue; - - if (STRICTMODE_VANILLA(translucency)) - mobjinfo[predefined_translucency[i]].flags |= MF_TRANSLUCENT; - else - mobjinfo[predefined_translucency[i]].flags &= ~MF_TRANSLUCENT; - } -} - // killough 2/22/98: Add support for ENDBOOM, which is PC-specific // killough 8/1/98: change back to ENDOOM diff --git a/src/d_main.h b/src/d_main.h index 58ef2a24..1f810bf2 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -41,8 +41,6 @@ extern boolean clfastparm; // checkparm of -fast void D_SetMaxHealth(void); void D_SetBloodColor(void); -void D_SetPredefinedTranslucency(void); -void D_DehChangePredefinedTranslucency(int index); boolean D_CheckEndDoom(void); diff --git a/src/doomstat.h b/src/doomstat.h index cd0b5a1d..fa90f4fd 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -316,12 +316,8 @@ extern boolean strictmode, default_strictmode; #define STRICTMODE(x) (strictmode ? 0 : (x)) -#define NOTSTRICTMODE(x) (strictmode ? 1 : (x)) - #define STRICTMODE_COMP(x) (strictmode ? comp[x] : default_comp[x]) -#define STRICTMODE_VANILLA(x) (strictmode && demo_compatibility ? 0 : (x)) - extern boolean critical; #define CRITICAL(x) (critical || strictmode ? 0 : (x)) diff --git a/src/g_game.c b/src/g_game.c index 36061dbd..41211ef6 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -3320,8 +3320,6 @@ void G_ReloadDefaults(boolean keep_demover) D_SetBloodColor(); - D_SetPredefinedTranslucency(); - if (!mbf21) { // Set new compatibility options diff --git a/src/m_cheat.c b/src/m_cheat.c index 99bb51e3..10ea44e5 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -746,7 +746,6 @@ static void cheat_tran() { displaymsg( // Ty 03/27/98 - *not* externalized (translucency = !translucency) ? "Translucency enabled" : "Translucency disabled"); - D_SetPredefinedTranslucency(); } static void cheat_massacre() // jff 2/01/98 kill all monsters diff --git a/src/m_menu.c b/src/m_menu.c index 8aa878fb..033e25c0 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2442,8 +2442,10 @@ static void M_DrawSetting(setup_menu_t *s, int accum_y) if (strings) strcpy(menu_buffer, strings[value]); + else if (flags & S_THRM_PCT) + M_snprintf(menu_buffer, sizeof(menu_buffer), "%d%%", value); else - M_snprintf(menu_buffer, 4, "%d", value); + M_snprintf(menu_buffer, sizeof(menu_buffer), "%d", value); BlinkingArrowRight(s); M_DrawMenuStringEx(flags, x + M_THRM_STEP + rect->w, y + M_THRM_TXT_OFFSET, color); @@ -4134,13 +4136,12 @@ setup_menu_t gen_settings5[] = { {"Smooth Pixel Scaling", S_YESNO, m_null, M_X, M_Y, {"smooth_scaling"}, 0, M_ResetScreen}, - {"Enable Translucency", S_YESNO|S_STRICT, m_null, M_X, M_SPC, - {"translucency"}, 0, M_Trans}, + {"Sprite Translucency", S_YESNO|S_STRICT, m_null, M_X, M_SPC, {"translucency"}}, - {"Translucency Percent", S_NUM, m_null, M_X, M_SPC, + {"Translucency", S_THERMO|S_ACTION|S_THRM_PCT, m_null, M_X_THRM8, M_SPC, {"tran_filter_pct"}, 0, M_Trans}, - {"", S_SKIP, m_null, M_X, M_SPC}, + {"", S_SKIP, m_null, M_X, M_THRM_SPC}, {"Voxels", S_YESNO|S_STRICT, m_null, M_X, M_SPC, {"voxels_rendering"}}, @@ -4204,8 +4205,6 @@ setup_menu_t gen_settings6[] = { void M_Trans(void) // To reset translucency after setting it in menu { R_InitTranMap(0); - - D_SetPredefinedTranslucency(); } // Setting up for the General screen. Turn on flags, set pointers, diff --git a/src/m_menu.h b/src/m_menu.h index 59cd8a74..32d5c962 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -109,6 +109,7 @@ void M_DisableVoxelsRenderingItem(void); #define S_ONOFF 0x08000000 // Alias for S_YESNO #define S_MBF 0x10000000 // Disable if complevel < mbf #define S_THRM_SIZE4 0x20000000 // Thermo bar size 4 +#define S_THRM_PCT 0x40000000 // Show % sign // S_SHOWDESC = the set of items whose description should be displayed // S_SHOWSET = the set of items whose setting should be displayed diff --git a/src/r_things.c b/src/r_things.c index d807337e..143d88b6 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -433,7 +433,8 @@ void R_DrawVisSprite(vissprite_t *vis, int x1, int x2) ((vis->mobjflags & MF_TRANSLATION) >> (MF_TRANSSHIFT-8) ); } else - if (vis->mobjflags & MF_TRANSLUCENT) // phares + if (translucency && !(strictmode && demo_compatibility) + && vis->mobjflags & MF_TRANSLUCENT) // phares { colfunc = R_DrawTLColumn; tranmap = main_tranmap; // killough 4/11/98