From 9d90c0ca21fb10123ffcec7907218c875f6eba49 Mon Sep 17 00:00:00 2001 From: negativeExponent Date: Sat, 21 Mar 2020 08:49:45 +0800 Subject: [PATCH] Fix https://github.com/libretro/libretro-fceumm/issues/346 --- src/drivers/libretro/libretro.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index a25c458..b818990 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -989,21 +989,20 @@ static void retro_set_custom_palette(void) ipalette = 0; use_raw_palette = false; - if ((current_palette == PAL_DEFAULT) || - (current_palette == PAL_CUSTOM) || - (GameInfo->type == GIT_VSUNI)) - { - if (current_palette == PAL_CUSTOM) - { - if (external_palette_exist && (GameInfo->type != GIT_VSUNI)) - ipalette = 1; - } + /* VS UNISystem uses internal palette presets regardless of options */ + if (GameInfo->type == GIT_VSUNI) + FCEU_ResetPalette(); - FCEU_ResetPalette(); /* if ipalette is set to 1, external palette - * is loaded when FCEU_ResetPalette is called, - * else it will load default NES palette. - * VS Unisystem should always use default palette. - */ + /* Reset and choose between default internal or external custom palette */ + else if (current_palette == PAL_DEFAULT || current_palette == PAL_CUSTOM) + { + ipalette = external_palette_exist && (current_palette == PAL_CUSTOM); + + /* if ipalette is set to 1, external palette + * is loaded, else it will load default NES palette. + * FCEUI_SetPaletteArray() both resets the palette array to + * internal default palette and then chooses which one to use. */ + FCEUI_SetPaletteArray( NULL ); } /* setup raw palette */ @@ -1020,7 +1019,7 @@ static void retro_set_custom_palette(void) } } - /* Setup this palette*/ + /* setup palette presets */ else { unsigned *palette_data = palettes[current_palette].data;