From 37cc010e85610bb2a2ed212e6299968a70502b83 Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Tue, 28 Nov 2017 16:10:52 +0700 Subject: [PATCH] Add special hack for monochrome effect in Zelda games. Fixed OOT - major graphic glitches in cutscene #1673 --- src/Config.h | 1 + .../GLSL/glsl_CombinerProgramUniformFactory.cpp | 2 +- src/RSP.cpp | 7 ++++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Config.h b/src/Config.h index bb4c2d46..07381459 100644 --- a/src/Config.h +++ b/src/Config.h @@ -194,6 +194,7 @@ struct Config #define hack_Snap (1<<18) //Frame buffer settings for camera detection in Pokemon Snap. Copy aux buffers at fullsync #define hack_MK64 (1<<19) //Hack for load MK64 HD textures properly. #define hack_RE2 (1<<20) //RE2 hacks. +#define hack_ZeldaMonochrome (1<<21) //Hack for Zeldas monochrome effects. extern Config config; diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp index 8dd97deb..46682ade 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp @@ -203,7 +203,7 @@ public: nFbFixedAlpha0 = 1; } else if (gSP.textureTile[0]->size == G_IM_SIZ_16b && gSP.textureTile[0]->format == G_IM_FMT_IA) { nFbMonochromeMode0 = 2; - } else if ((config.generalEmulation.hacks & hack_ZeldaMM) != 0 && + } else if ((config.generalEmulation.hacks & hack_ZeldaMonochrome) != 0 && cache.current[0]->size == G_IM_SIZ_16b && gSP.textureTile[0]->size == G_IM_SIZ_8b && gSP.textureTile[0]->format == G_IM_FMT_CI) { diff --git a/src/RSP.cpp b/src/RSP.cpp index 83dc15b0..9f5b1530 100644 --- a/src/RSP.cpp +++ b/src/RSP.cpp @@ -290,8 +290,9 @@ void RSP_Init() else if (strstr(RSP.romname, (const char *)"POKEMON STADIUM 2") != nullptr) config.generalEmulation.hacks |= hack_texrect_shade_alpha; else if (strstr(RSP.romname, (const char *)"THE LEGEND OF ZELDA") != nullptr || - strstr(RSP.romname, (const char *)"ZELDA MASTER QUEST") != nullptr || - strstr(RSP.romname, (const char *)"DOUBUTSUNOMORI") != nullptr || + strstr(RSP.romname, (const char *)"ZELDA MASTER QUEST") != nullptr) + config.generalEmulation.hacks |= hack_subscreen | hack_ZeldaMonochrome; + else if (strstr(RSP.romname, (const char *)"DOUBUTSUNOMORI") != nullptr || strstr(RSP.romname, (const char *)"ANIMAL FOREST") != nullptr) config.generalEmulation.hacks |= hack_subscreen; else if (strstr(RSP.romname, (const char *)"LEGORacers") != nullptr) @@ -299,7 +300,7 @@ void RSP_Init() else if (strstr(RSP.romname, (const char *)"Blast") != nullptr) config.generalEmulation.hacks |= hack_blastCorps; else if (strstr(RSP.romname, (const char *)"MASK") != nullptr) // Zelda MM - config.generalEmulation.hacks |= hack_ZeldaMM; + config.generalEmulation.hacks |= hack_ZeldaMonochrome | hack_ZeldaMM; else if (strstr(RSP.romname, (const char *)"Perfect Dark") != nullptr || strstr(RSP.romname, (const char *)"PERFECT DARK") != nullptr) config.generalEmulation.hacks |= hack_rectDepthBufferCopyPD;