mirror of https://github.com/mgba-emu/mgba.git
GB: Add SGB palettes, options for selecting which palettes
This commit is contained in:
parent
38c8ff241e
commit
1640d00e87
1
CHANGES
1
CHANGES
|
@ -1,6 +1,7 @@
|
|||
0.10.0: (Future)
|
||||
Features:
|
||||
- Presets for Game Boy palettes
|
||||
- Add Super Game Boy palettes for original Game Boy games
|
||||
- Tool for converting scanned pictures of e-Reader cards to raw dotcode data
|
||||
- Cheat code support in homebrew ports
|
||||
- Support for combo "Super Game Boy Color" SGB + GBC ROM hacks
|
||||
|
|
|
@ -12,6 +12,13 @@ CXX_GUARD_START
|
|||
|
||||
#include <mgba/gb/interface.h>
|
||||
|
||||
enum GBColorLookup {
|
||||
GB_COLORS_NONE = 0,
|
||||
GB_COLORS_CGB = 1,
|
||||
GB_COLORS_SGB = 2,
|
||||
GB_COLORS_SGB_CGB_FALLBACK = GB_COLORS_CGB | GB_COLORS_SGB
|
||||
};
|
||||
|
||||
struct GBCartridgeOverride {
|
||||
int headerCrc32;
|
||||
enum GBModel model;
|
||||
|
@ -27,7 +34,7 @@ struct GBColorPreset {
|
|||
|
||||
struct Configuration;
|
||||
bool GBOverrideFind(const struct Configuration*, struct GBCartridgeOverride* override);
|
||||
bool GBOverrideColorFind(struct GBCartridgeOverride* override);
|
||||
bool GBOverrideColorFind(struct GBCartridgeOverride* override, enum GBColorLookup);
|
||||
void GBOverrideSave(struct Configuration*, const struct GBCartridgeOverride* override);
|
||||
|
||||
size_t GBColorPresetList(const struct GBColorPreset** presets);
|
||||
|
|
|
@ -224,6 +224,7 @@ static void _GBCoreLoadConfig(struct mCore* core, const struct mCoreConfig* conf
|
|||
mCoreConfigCopyValue(&core->config, config, "cgb.model");
|
||||
mCoreConfigCopyValue(&core->config, config, "cgb.hybridModel");
|
||||
mCoreConfigCopyValue(&core->config, config, "cgb.sgbModel");
|
||||
mCoreConfigCopyValue(&core->config, config, "gb.colors");
|
||||
mCoreConfigCopyValue(&core->config, config, "useCgbColors");
|
||||
mCoreConfigCopyValue(&core->config, config, "allowOpposingDirections");
|
||||
|
||||
|
@ -482,13 +483,18 @@ static void _GBCoreReset(struct mCore* core) {
|
|||
}
|
||||
|
||||
if (gb->memory.rom) {
|
||||
int doColorOverride = 0;
|
||||
int doColorOverride = GB_COLORS_NONE;
|
||||
mCoreConfigGetIntValue(&core->config, "gb.colors", &doColorOverride);
|
||||
|
||||
if (doColorOverride == GB_COLORS_NONE) {
|
||||
// Backwards compat for renamed setting
|
||||
mCoreConfigGetIntValue(&core->config, "useCgbColors", &doColorOverride);
|
||||
}
|
||||
|
||||
struct GBCartridgeOverride override;
|
||||
const struct GBCartridge* cart = (const struct GBCartridge*) &gb->memory.rom[0x100];
|
||||
override.headerCrc32 = doCrc32(cart, sizeof(*cart));
|
||||
bool modelOverride = GBOverrideFind(gbcore->overrides, &override) || (doColorOverride && GBOverrideColorFind(&override));
|
||||
bool modelOverride = GBOverrideFind(gbcore->overrides, &override) || (doColorOverride && GBOverrideColorFind(&override, doColorOverride));
|
||||
if (modelOverride) {
|
||||
GBOverrideApply(gb, &override);
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
#define UNIFORM_PAL(A, B, C, D) { PAL_ENTRY(A, B, C, D), PAL_ENTRY(A, B, C, D), PAL_ENTRY(A, B, C, D) }
|
||||
#define SGB_PAL(A) { PAL ## A, PAL ## A, PAL ## A }
|
||||
|
||||
static const struct GBCartridgeOverride _colorOverrides[] = {
|
||||
static const struct GBCartridgeOverride _gbcOverrides[] = {
|
||||
// Adventures of Lolo (Europe)
|
||||
{ 0xFBE65286, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, PALETTE(0, 28, 3) },
|
||||
|
||||
|
@ -524,6 +524,145 @@ static const struct GBCartridgeOverride _colorOverrides[] = {
|
|||
{ 0, 0, 0, { 0 } }
|
||||
};
|
||||
|
||||
static const struct GBCartridgeOverride _sgbOverrides[] = {
|
||||
// Alleyway (World)
|
||||
{ 0xCBAA161B, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3F) },
|
||||
|
||||
// Baseball (World)
|
||||
{ 0xE02904BD, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(2G) },
|
||||
|
||||
// Dr. Mario (World)
|
||||
{ 0xA3C2C1E9, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3B) },
|
||||
|
||||
// Dr. Mario (World) (Rev A)
|
||||
{ 0x69975661, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3B) },
|
||||
|
||||
// F-1 Race (World)
|
||||
{ 0x8434CB2C, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(4F) },
|
||||
|
||||
// F-1 Race (World) (Rev A)
|
||||
{ 0xBA63383B, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(4F) },
|
||||
|
||||
// Game Boy Wars (Japan)
|
||||
{ 0x03E3ED72, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3E) },
|
||||
|
||||
// Golf (World)
|
||||
{ 0x885C242D, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3H) },
|
||||
|
||||
// Hoshi no Kirby (Japan)
|
||||
{ 0x4AA02A13, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(2C) },
|
||||
|
||||
// Hoshi no Kirby (Japan) (Rev A)
|
||||
{ 0x88D03280, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(2C) },
|
||||
|
||||
// Kaeru no Tame ni Kane wa Naru (Japan)
|
||||
{ 0x7F805941, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(2A) },
|
||||
|
||||
// Kid Icarus - Of Myths and Monsters (USA, Europe)
|
||||
{ 0x5D93DB0F, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(2F) },
|
||||
|
||||
// Kirby no Pinball (Japan)
|
||||
{ 0x89239AED, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1C) },
|
||||
|
||||
// Kirby's Dream Land (USA, Europe)
|
||||
{ 0x302017CC, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(2C) },
|
||||
|
||||
// Kirby's Pinball Land (USA, Europe)
|
||||
{ 0x9C4AA9D8, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1C) },
|
||||
|
||||
// Legend of Zelda, The - Link's Awakening (Canada)
|
||||
{ 0x9F54D47B, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1E) },
|
||||
|
||||
// Legend of Zelda, The - Link's Awakening (France)
|
||||
{ 0x441D7FAD, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1E) },
|
||||
|
||||
// Legend of Zelda, The - Link's Awakening (Germany)
|
||||
{ 0x838D65D6, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1E) },
|
||||
|
||||
// Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev A)
|
||||
{ 0x24CAAB4D, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1E) },
|
||||
|
||||
// Legend of Zelda, The - Link's Awakening (USA, Europe) (Rev B)
|
||||
{ 0xBCBB6BDB, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1E) },
|
||||
|
||||
// Legend of Zelda, The - Link's Awakening (USA, Europe)
|
||||
{ 0x9A193109, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1E) },
|
||||
|
||||
// Metroid II - Return of Samus (World)
|
||||
{ 0xBDCCC648, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(4G) },
|
||||
|
||||
// QIX (World)
|
||||
{ 0x5EECB346, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(4A) },
|
||||
|
||||
// SolarStriker (World)
|
||||
{ 0x981620E7, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1G) },
|
||||
|
||||
// Super Mario Land (World)
|
||||
{ 0x6C0ACA9F, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1F) },
|
||||
|
||||
// Super Mario Land (World) (Rev A)
|
||||
{ 0xCA117ACC, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1F) },
|
||||
|
||||
// Super Mario Land 2 - 6 Golden Coins (USA, Europe) (Rev A)
|
||||
{ 0x423E09E6, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3D) },
|
||||
|
||||
// Super Mario Land 2 - 6 Golden Coins (USA, Europe) (Rev B)
|
||||
{ 0x445A0358, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3D) },
|
||||
|
||||
// Super Mario Land 2 - 6 Golden Coins (USA, Europe)
|
||||
{ 0xDE2960A1, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3D) },
|
||||
|
||||
// Super Mario Land 2 - 6-tsu no Kinka (Japan)
|
||||
{ 0xD47CED78, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3D) },
|
||||
|
||||
// Super Mario Land 2 - 6-tsu no Kinka (Japan) (Rev A)
|
||||
{ 0xA4B4F9F9, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3D) },
|
||||
|
||||
// Super Mario Land 2 - 6-tsu no Kinka (Japan) (Rev B)
|
||||
{ 0x5842F25D, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3D) },
|
||||
|
||||
// Tennis (World)
|
||||
{ 0xD2BEBF08, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3G) },
|
||||
|
||||
// Tetris (World)
|
||||
{ 0xE906C6A6, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3A) },
|
||||
|
||||
// Tetris (World) (Rev A)
|
||||
{ 0x4674B43F, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3A) },
|
||||
|
||||
// Wario Land - Super Mario Land 3 (World)
|
||||
{ 0xF1EA10E9, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1B) },
|
||||
|
||||
// X (Japan)
|
||||
{ 0xFED4C47F, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(4D) },
|
||||
|
||||
// Yakuman (Japan)
|
||||
{ 0x40604F17, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3C) },
|
||||
|
||||
// Yakuman (Japan) (Rev A)
|
||||
{ 0x2959ACFC, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(3C) },
|
||||
|
||||
// Yoshi (USA)
|
||||
{ 0xAB1605B9, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(2D) },
|
||||
|
||||
// Yoshi no Cookie (Japan)
|
||||
{ 0x841753DA, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1D) },
|
||||
|
||||
// Yoshi no Tamago (Japan)
|
||||
{ 0xD4098A6B, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(2D) },
|
||||
|
||||
// Yoshi's Cookie (USA, Europe)
|
||||
{ 0x940EDD87, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1D) },
|
||||
|
||||
// Zelda no Densetsu - Yume o Miru Shima (Japan)
|
||||
{ 0x259C9A82, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1E) },
|
||||
|
||||
// Zelda no Densetsu - Yume o Miru Shima (Japan) (Rev A)
|
||||
{ 0x61F269CD, GB_MODEL_AUTODETECT, GB_MBC_AUTODETECT, SGB_PAL(1E) },
|
||||
|
||||
{ 0, 0, 0, { 0 } }
|
||||
};
|
||||
|
||||
static const struct GBCartridgeOverride _overrides[] = {
|
||||
// Pokemon Spaceworld 1997 demo
|
||||
{ 0x232a067d, GB_MODEL_AUTODETECT, GB_MBC3_RTC, { 0 } }, // Gold (debug)
|
||||
|
@ -586,14 +725,24 @@ static const struct GBColorPreset _colorPresets[] = {
|
|||
{ "SGB 4-H", SGB_PAL(4H), },
|
||||
};
|
||||
|
||||
bool GBOverrideColorFind(struct GBCartridgeOverride* override) {
|
||||
bool GBOverrideColorFind(struct GBCartridgeOverride* override, enum GBColorLookup order) {
|
||||
int i;
|
||||
for (i = 0; _colorOverrides[i].headerCrc32; ++i) {
|
||||
if (override->headerCrc32 == _colorOverrides[i].headerCrc32) {
|
||||
memcpy(override->gbColors, _colorOverrides[i].gbColors, sizeof(override->gbColors));
|
||||
if (order & GB_COLORS_SGB) {
|
||||
for (i = 0; _gbcOverrides[i].headerCrc32; ++i) {
|
||||
if (override->headerCrc32 == _sgbOverrides[i].headerCrc32) {
|
||||
memcpy(override->gbColors, _sgbOverrides[i].gbColors, sizeof(override->gbColors));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (order & GB_COLORS_CGB) {
|
||||
for (i = 0; _gbcOverrides[i].headerCrc32; ++i) {
|
||||
if (override->headerCrc32 == _gbcOverrides[i].headerCrc32) {
|
||||
memcpy(override->gbColors, _gbcOverrides[i].gbColors, sizeof(override->gbColors));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -399,7 +399,6 @@ void SettingsView::updateConfig() {
|
|||
saveSetting("gbc.bios", m_ui.gbcBios);
|
||||
saveSetting("sgb.bios", m_ui.sgbBios);
|
||||
saveSetting("sgb.borders", m_ui.sgbBorders);
|
||||
saveSetting("useCgbColors", m_ui.useCgbColors);
|
||||
saveSetting("useBios", m_ui.useBios);
|
||||
saveSetting("skipBios", m_ui.skipBios);
|
||||
saveSetting("sampleRate", m_ui.sampleRate);
|
||||
|
@ -578,6 +577,18 @@ void SettingsView::updateConfig() {
|
|||
m_controller->setOption(color.toUtf8().constData(), m_gbColors[colorId] & ~0xFF000000);
|
||||
|
||||
}
|
||||
|
||||
int gbColors = GB_COLORS_CGB;
|
||||
if (m_ui.gbColor->isChecked()) {
|
||||
gbColors = GB_COLORS_NONE;
|
||||
} else if (m_ui.cgbColor->isChecked()) {
|
||||
gbColors = GB_COLORS_CGB;
|
||||
} else if (m_ui.sgbColor->isChecked()) {
|
||||
gbColors = GB_COLORS_SGB;
|
||||
} else if (m_ui.scgbColor->isChecked()) {
|
||||
gbColors = GB_COLORS_SGB_CGB_FALLBACK;
|
||||
}
|
||||
saveSetting("gb.colors", gbColors);
|
||||
#endif
|
||||
|
||||
m_controller->write();
|
||||
|
@ -593,7 +604,6 @@ void SettingsView::reloadConfig() {
|
|||
loadSetting("gbc.bios", m_ui.gbcBios);
|
||||
loadSetting("sgb.bios", m_ui.sgbBios);
|
||||
loadSetting("sgb.borders", m_ui.sgbBorders, true);
|
||||
loadSetting("useCgbColors", m_ui.useCgbColors, true);
|
||||
loadSetting("useBios", m_ui.useBios);
|
||||
loadSetting("skipBios", m_ui.skipBios);
|
||||
loadSetting("audioBuffers", m_ui.audioBufferSize);
|
||||
|
@ -725,6 +735,22 @@ void SettingsView::reloadConfig() {
|
|||
int index = m_ui.cgbSgbModel->findData(model);
|
||||
m_ui.cgbSgbModel->setCurrentIndex(index >= 0 ? index : 0);
|
||||
}
|
||||
|
||||
switch (m_controller->getOption("gb.colors", m_controller->getOption("useCgbColors", true).toInt()).toInt()) {
|
||||
case GB_COLORS_NONE:
|
||||
m_ui.gbColor->setChecked(true);
|
||||
break;
|
||||
default:
|
||||
case GB_COLORS_CGB:
|
||||
m_ui.cgbColor->setChecked(true);
|
||||
break;
|
||||
case GB_COLORS_SGB:
|
||||
m_ui.sgbColor->setChecked(true);
|
||||
break;
|
||||
case GB_COLORS_SGB_CGB_FALLBACK:
|
||||
m_ui.scgbColor->setChecked(true);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
int hwaccelVideo = m_controller->getOption("hwaccelVideo", 0).toInt();
|
||||
|
|
|
@ -23,13 +23,6 @@
|
|||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetFixedSize</enum>
|
||||
</property>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QListWidget" name="tabs">
|
||||
<property name="sizePolicy">
|
||||
|
@ -89,6 +82,13 @@
|
|||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QStackedWidget" name="stackedWidget">
|
||||
<property name="currentIndex">
|
||||
|
@ -1495,11 +1495,17 @@
|
|||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="gb">
|
||||
<layout class="QFormLayout" name="formLayout_1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Models</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_9">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_29">
|
||||
<property name="text">
|
||||
<string>Game Boy-only model:</string>
|
||||
<string>GB only:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -1509,7 +1515,7 @@
|
|||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_32">
|
||||
<property name="text">
|
||||
<string>Super Game Boy model:</string>
|
||||
<string>SGB compatible:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -1519,7 +1525,7 @@
|
|||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_33">
|
||||
<property name="text">
|
||||
<string>Game Boy Color-only model:</string>
|
||||
<string>GBC only:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -1529,7 +1535,7 @@
|
|||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_38">
|
||||
<property name="text">
|
||||
<string>Game Boy/Game Boy Color model:</string>
|
||||
<string>GBC compatible:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -1539,38 +1545,47 @@
|
|||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_39">
|
||||
<property name="text">
|
||||
<string>Super Game Boy/Game Boy Color model:</string>
|
||||
<string>SGB and GBC compatible:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="cgbSgbModel"/>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="Line" name="line_12">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="sgbBorders">
|
||||
<property name="text">
|
||||
<string>Super Game Boy borders</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Game Boy palette</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_8">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_40">
|
||||
<property name="text">
|
||||
<string>Preset:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="colorPreset"/>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_28">
|
||||
<property name="text">
|
||||
<string>Default BG colors:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
<widget class="QFrame" name="color0">
|
||||
|
@ -1650,14 +1665,14 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_69">
|
||||
<property name="text">
|
||||
<string>Default sprite colors 1:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<item row="2" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
||||
<item>
|
||||
<widget class="QFrame" name="color4">
|
||||
|
@ -1737,14 +1752,14 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_70">
|
||||
<property name="text">
|
||||
<string>Default sprite colors 2:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<item row="3" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_37">
|
||||
<item>
|
||||
<widget class="QFrame" name="color8">
|
||||
|
@ -1824,35 +1839,70 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="10" column="1">
|
||||
<widget class="QCheckBox" name="useCgbColors">
|
||||
<property name="text">
|
||||
<string>Use GBC colors in GB games</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="1">
|
||||
<widget class="QCheckBox" name="sgbBorders">
|
||||
<property name="text">
|
||||
<string>Super Game Boy borders</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0" colspan="2">
|
||||
<widget class="Line" name="line_11">
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="Line" name="line_19">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<item row="5" column="1">
|
||||
<widget class="QRadioButton" name="gbColor">
|
||||
<property name="text">
|
||||
<string>Default color palette only</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">gbColors</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QRadioButton" name="sgbColor">
|
||||
<property name="text">
|
||||
<string>SGB color palette if available</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">gbColors</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QRadioButton" name="cgbColor">
|
||||
<property name="text">
|
||||
<string>GBC color palette if available</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">gbColors</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<widget class="QRadioButton" name="scgbColor">
|
||||
<property name="text">
|
||||
<string>SGB (preferred) or GBC color palette if available</string>
|
||||
</property>
|
||||
<attribute name="buttonGroup">
|
||||
<string notr="true">gbColors</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Game Boy Camera</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_10">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_27">
|
||||
<property name="text">
|
||||
<string>Camera driver:</string>
|
||||
<string>Driver:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="1">
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="cameraDriver">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
|
@ -1862,14 +1912,14 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_35">
|
||||
<property name="text">
|
||||
<string>Camera:</string>
|
||||
<string>Source:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="1">
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="camera">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
|
@ -1884,6 +1934,9 @@
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -2083,4 +2136,7 @@
|
|||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<buttongroups>
|
||||
<buttongroup name="gbColors"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
|
|
Loading…
Reference in New Issue