Merge pull request #30 from askotx/master

Fixed on game reload and a custom palette was used, it was lost on reset...
This commit is contained in:
Twinaphex 2014-07-18 04:52:06 +02:00
commit a3d458036a

View File

@ -123,7 +123,7 @@ void retro_set_environment(retro_environment_t cb)
static const struct retro_variable vars[] = { static const struct retro_variable vars[] = {
{ "gb_gbamode", "GBA mode; disabled|enabled" }, { "gb_gbamode", "GBA mode; disabled|enabled" },
{ "gb_colorization", "GB Colorization; disabled|enabled" }, { "gb_colorization", "GB Colorization; disabled|enabled|custom" },
{ "gbc_color_correction", "Color correction; enabled|disabled" }, { "gbc_color_correction", "Color correction; enabled|disabled" },
{ NULL, NULL }, { NULL, NULL },
}; };
@ -211,7 +211,7 @@ static bool startswith(const std::string s1, const std::string prefix)
return s1.compare(0, prefix.length(), prefix) == 0; return s1.compare(0, prefix.length(), prefix) == 0;
} }
static bool gb_colorization_enable = false; static int gb_colorization_enable = 0;
static std::string rom_path; static std::string rom_path;
char internal_game_name[17]; char internal_game_name[17];
@ -240,10 +240,10 @@ static void check_palette(void)
palette_file.open(custom_palette_path.c_str()); palette_file.open(custom_palette_path.c_str());
} }
if (!palette_file.is_open() && !findGbcTitlePal(internal_game_name)) if (!palette_file.is_open())// && !findGbcTitlePal(internal_game_name))
{ {
// try again with default.pal // try again with default.pal
// only if no specific title palette from the GBC BIOS is found //- removed last line if colorization is enabled
custom_palette_path = system_directory + "/palettes/" + "default.pal"; custom_palette_path = system_directory + "/palettes/" + "default.pal";
palette_file.open(custom_palette_path.c_str()); palette_file.open(custom_palette_path.c_str());
} }
@ -342,12 +342,14 @@ static void check_variables(void)
return; return;
// else it is a GB-mono game -> set a color palette // else it is a GB-mono game -> set a color palette
bool gb_colorization_old = gb_colorization_enable; //bool gb_colorization_old = gb_colorization_enable;
if (strcmp(var.value, "disabled") == 0) if (strcmp(var.value, "disabled") == 0)
gb_colorization_enable = false; gb_colorization_enable = 0;
else if (strcmp(var.value, "enabled") == 0) else if (strcmp(var.value, "enabled") == 0)
gb_colorization_enable = true; gb_colorization_enable = 1;
else if (strcmp(var.value, "custom") == 0)
gb_colorization_enable = 2;
//std::string internal_game_name = gb.romTitle(); // available only in latest Gambatte //std::string internal_game_name = gb.romTitle(); // available only in latest Gambatte
//std::string internal_game_name = reinterpret_cast<const char *>(info->data + 0x134); // buggy with some games ("YOSSY NO COOKIE", "YOSSY NO PANEPON, etc.) //std::string internal_game_name = reinterpret_cast<const char *>(info->data + 0x134); // buggy with some games ("YOSSY NO COOKIE", "YOSSY NO PANEPON, etc.)
@ -355,18 +357,27 @@ static void check_variables(void)
// load a GBC BIOS builtin palette // load a GBC BIOS builtin palette
unsigned short* gbc_bios_palette = NULL; unsigned short* gbc_bios_palette = NULL;
if (gb_colorization_enable) switch (gb_colorization_enable){
{ case 1:
gbc_bios_palette = const_cast<unsigned short*>(findGbcTitlePal(internal_game_name)); gbc_bios_palette = const_cast<unsigned short*>(findGbcTitlePal(internal_game_name));
if (!gbc_bios_palette) if (!gbc_bios_palette)
{ {
// no custom palette found, load the default (blue) // no custom palette found, load the default (blue)
gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal("GBC - Blue")); gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal("GBC - Blue"));
} }
} break;
else
gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal("GBC - Grayscale"));
case 2:
check_palette();
break;
default:
gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal("GBC - Grayscale"));
break;
}
//gambatte is using custom colorization then we have a previously palette loaded,
//skip this loop then
if (gb_colorization_enable != 2){
unsigned rgb32 = 0; unsigned rgb32 = 0;
for (unsigned palnum = 0; palnum < 3; ++palnum) for (unsigned palnum = 0; palnum < 3; ++palnum)
{ {
@ -376,6 +387,7 @@ static void check_variables(void)
gb.setDmgPaletteColor(palnum, colornum, rgb32); gb.setDmgPaletteColor(palnum, colornum, rgb32);
} }
} }
}
} }
static unsigned pow2ceil(unsigned n) { static unsigned pow2ceil(unsigned n) {
@ -433,7 +445,7 @@ bool retro_load_game(const struct retro_game_info *info)
log_cb(RETRO_LOG_INFO, "[Gambatte]: Got internal game name: %s.\n", internal_game_name); log_cb(RETRO_LOG_INFO, "[Gambatte]: Got internal game name: %s.\n", internal_game_name);
check_variables(); check_variables();
check_palette(); //check_palette();
//Ugly hack alert: This entire thing depends upon cartridge.cpp and memptrs.cpp not changing in weird ways. //Ugly hack alert: This entire thing depends upon cartridge.cpp and memptrs.cpp not changing in weird ways.
unsigned sramsize = gb.savedata_size(); unsigned sramsize = gb.savedata_size();