From 79e150886a2bdcd24d06ccd7eef4c10a841d9cbe Mon Sep 17 00:00:00 2001 From: BearOso Date: Fri, 31 Mar 2023 17:09:23 -0500 Subject: [PATCH] Add ability to force backdrop color for sprite extraction. Only Gtk hotkey is hooked up so far. --- controls.cpp | 21 +++++++++++++++++++++ gfx.cpp | 1 + gtk/src/gtk_control.cpp | 2 +- gtk/src/snes9x.ui | 4 ++-- snes9x.h | 1 + tileimpl.h | 2 ++ 6 files changed, 28 insertions(+), 3 deletions(-) diff --git a/controls.cpp b/controls.cpp index 878c809f..d31040fa 100644 --- a/controls.cpp +++ b/controls.cpp @@ -265,6 +265,7 @@ static const int ptrspeeds[4] = { 1, 1, 4, 8 }; S(ToggleBG1), \ S(ToggleBG2), \ S(ToggleBG3), \ + S(ToggleBackdrop), \ S(ToggleEmuTurbo), \ S(ToggleSprites), \ S(ToggleTransparency) \ @@ -2360,6 +2361,26 @@ void S9xApplyCommand (s9xcommand_t cmd, int16 data1, int16 data2) S9xSetInfoString("All sound channels on"); break; + case ToggleBackdrop: + switch (Settings.ForcedBackdrop) + { + case 0: + Settings.ForcedBackdrop = 0xf81f; + break; + case 0xf81f: + Settings.ForcedBackdrop = 0x07e0; + break; + case 0x07e0: + Settings.ForcedBackdrop = 0x07ff; + break; + default: + Settings.ForcedBackdrop = 0; + break; + } + sprintf(buf, "Setting backdrop to 0x%04x", Settings.ForcedBackdrop); + S9xSetInfoString(buf); + break; + case ToggleBG0: Settings.BG_Forced ^= 1; DisplayStateChange("BG#0", !(Settings.BG_Forced & 1)); diff --git a/gfx.cpp b/gfx.cpp index 6303aed2..fbeee33f 100644 --- a/gfx.cpp +++ b/gfx.cpp @@ -51,6 +51,7 @@ bool8 S9xGraphicsInit (void) IPPU.OBJChanged = TRUE; Settings.BG_Forced = 0; + Settings.ForcedBackdrop = 0; S9xFixColourBrightness(); S9xBuildDirectColourMaps(); diff --git a/gtk/src/gtk_control.cpp b/gtk/src/gtk_control.cpp index 259d1771..e2053a76 100644 --- a/gtk/src/gtk_control.cpp +++ b/gtk/src/gtk_control.cpp @@ -62,7 +62,7 @@ const BindingLink b_links[] = { "b_bg_layer_2", "ToggleBG2" }, { "b_bg_layer_3", "ToggleBG3" }, { "b_sprites", "ToggleSprites" }, - { "b_bg_layering_hack", "BGLayeringHack" }, + { "toggle_backdrop", "ToggleBackdrop" }, { "b_screenshot", "Screenshot" }, { "b_fullscreen", "GTK_fullscreen" }, { "b_state_save_current", "GTK_state_save_current" }, diff --git a/gtk/src/snes9x.ui b/gtk/src/snes9x.ui index 98acdc08..f2896492 100644 --- a/gtk/src/snes9x.ui +++ b/gtk/src/snes9x.ui @@ -7198,7 +7198,7 @@ True False 0 - BG layering hack + Toggle forced backdrop color 5 @@ -7324,7 +7324,7 @@ - + True True False diff --git a/snes9x.h b/snes9x.h index b52d8f83..502dbf98 100644 --- a/snes9x.h +++ b/snes9x.h @@ -247,6 +247,7 @@ struct SSettings bool8 Transparency; uint8 BG_Forced; bool8 DisableGraphicWindows; + uint16 ForcedBackdrop; bool8 DisplayTime; bool8 DisplayFrameRate; diff --git a/tileimpl.h b/tileimpl.h index 9ea546e5..8b062354 100644 --- a/tileimpl.h +++ b/tileimpl.h @@ -481,6 +481,8 @@ namespace TileImpl { GFX.RealScreenColors = IPPU.ScreenColors; GFX.ScreenColors = GFX.ClipColors ? BlackColourMap : GFX.RealScreenColors; + if (Settings.ForcedBackdrop) + GFX.ScreenColors = &Settings.ForcedBackdrop; OFFSET_IN_LINE; for (l = GFX.StartY; l <= GFX.EndY; l++, Offset += GFX.PPL)