diff --git a/src/i_video.c b/src/i_video.c index 30a468c6..424985eb 100644 --- a/src/i_video.c +++ b/src/i_video.c @@ -1058,29 +1058,34 @@ static void I_RestoreDiskBackground(void) disk_to_draw = 0; } -static const float gammalevels[18] = +static const float gammalevels[9] = { // Darker 0.50f, 0.55f, 0.60f, 0.65f, 0.70f, 0.75f, 0.80f, 0.85f, 0.90f, - - // No gamma correction - 1.0f, - - // Lighter - 1.125f, 1.25f, 1.375f, 1.5f, 1.625f, 1.75f, 1.875f, 2.0f, }; static byte gamma2table[18][256]; static void I_InitGamma2Table(void) { - int i, j; + int i, j, k; - for (i = 0; i < 18; ++i) + for (i = 0; i < 9; ++i) for (j = 0; j < 256; ++j) { gamma2table[i][j] = (byte)(pow(j / 255.0, 1.0 / gammalevels[i]) * 255.0 + 0.5); } + + // [crispy] 5 original gamma levels + for (i = 9, k = 0; i < 18 && k < 5; i += 2, k++) + memcpy(gamma2table[i], gammatable[k], 256); + + // [crispy] 4 intermediate gamma levels + for (i = 10, k = 0; i < 18 && k < 4; i += 2, k++) + for (j = 0; j < 256; ++j) + { + gamma2table[i][j] = (gammatable[k][j] + gammatable[k + 1][j]) / 2; + } } int gamma2; @@ -1089,20 +1094,11 @@ void I_SetPalette(byte *palette) { // haleyjd int i; - byte *gamma; + byte *const gamma = gamma2table[gamma2]; SDL_Color colors[256]; if (!in_graphics_mode) // killough 8/11/98 return; - - if (gamma2 != 9) // 1.0f - { - gamma = gamma2table[gamma2]; - } - else - { - gamma = gammatable[usegamma]; - } for(i = 0; i < 256; ++i) { diff --git a/src/m_menu.c b/src/m_menu.c index cd203daf..0a6a3f09 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -3888,19 +3888,18 @@ void static M_SmoothLight(void) static const char *gamma_strings[] = { // Darker - "0.50", "0.55", "0.60", "0.65", "0.70", "0.75", "0.80", "0.85", "0.90", + "-4", "-3.6", "-3.2", "-2.8", "-2.4", "-2.0", "-1.6", "-1.2", "-0.8", // No gamma correction - "1.0", + "0", // Lighter - "1.125", "1.25", "1.375", "1.5", "1.625", "1.75", "1.875", "2.0", + "0.5", "1", "1.5", "2", "2.5", "3", "3.5", "4", NULL }; static void M_ResetGamma(void) { - usegamma = 0; I_SetPalette(W_CacheLumpName("PLAYPAL",PU_CACHE)); } @@ -5518,17 +5517,11 @@ boolean M_Responder (event_t* ev) if (M_InputActivated(input_gamma)) // gamma toggle { - usegamma++; - if (usegamma > 4) - usegamma = 0; - players[consoleplayer].message = - usegamma == 0 ? s_GAMMALVL0 : - usegamma == 1 ? s_GAMMALVL1 : - usegamma == 2 ? s_GAMMALVL2 : - usegamma == 3 ? s_GAMMALVL3 : - s_GAMMALVL4; - gamma2 = 9; // 1.0f - I_SetPalette (W_CacheLumpName ("PLAYPAL",PU_CACHE)); + gamma2++; + if (gamma2 > 17) + gamma2 = 0; + doomprintf("Gamma correction level %s", gamma_strings[gamma2]); + M_ResetGamma(); return true; } diff --git a/src/m_misc.c b/src/m_misc.c index 7527c1e7..fd3e9c3c 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -276,7 +276,7 @@ default_t defaults[] = { "gamma2", (config_t *) &gamma2, NULL, {9}, {0,17}, number, ss_gen, wad_no, - "custom gamma level (0 = 0.5, 9 = 1.0, 17 = 2.0)" + "custom gamma level (0 = -4, 9 = 0, 17 = 4)" }, { @@ -609,13 +609,6 @@ default_t defaults[] = { "initial play screen size" }, - { //jff 3/6/98 fix erroneous upper limit in range - "usegamma", - (config_t *) &usegamma, NULL, - {0}, {0,4}, number, ss_none, wad_no, - "screen brightness (gamma correction)" - }, - // killough 10/98: compatibility vector: { diff --git a/src/v_video.c b/src/v_video.c index 227153ea..7616439f 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -150,8 +150,6 @@ byte gammatable[5][256] = 251,252,252,253,254,254,255,255} }; -int usegamma; - // // V_InitColorTranslation // diff --git a/src/v_video.h b/src/v_video.h index 4478fd96..d5cec7c2 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -97,7 +97,6 @@ typedef enum extern byte *screens[5]; extern int dirtybox[4]; extern byte gammatable[5][256]; -extern int usegamma; // killough 11/98 //jff 4/24/98 loads color translation lumps void V_InitColorTranslation(void);