diff --git a/docs/graphics/options_developer_tia.png b/docs/graphics/options_developer_tia.png index 21376b14b..cbeffbf74 100644 Binary files a/docs/graphics/options_developer_tia.png and b/docs/graphics/options_developer_tia.png differ diff --git a/docs/index.html b/docs/index.html index bdcf1211e..909cceac6 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3694,7 +3694,7 @@ When enabled, each external access (AtariVox/SaveKey EEPROM, PlusROM, Supercharger...) is signalled by a message. -
-dev.tia.type <standard|koolaidman|
cosmicark|pesco|quickstep|matchie|
indy500|heman|custom>
+
-dev.tia.type <standard|koolaidman|
cosmicark|pesco|quickstep|matchie|
indy500|heman|flashmenu|custom>
Set emulated TIA type. Only with 'custom' the following TIA options become relevant.
-dev.tia.plinvphase <1|0>
@@ -3705,6 +3705,15 @@
-dev.tia.blinvphase <1|0>
Enable/disable inverted HMOVE clock phase for ball. + +
-dev.tia.pllatehmove <1|0>
+ Enable/disable short late HMOVE for players (Flashcart menu shifted right). + +
-dev.tia.mslatehmove <1|0>
+ Enable/disable short late HMOVE for missiles. + +
-dev.tia.bllatehmove <1|0>
+ Enable/disable short late HMOVE for ball.
-dev.tia.delaypfbits <1|0>
Enable/disable playfield bits delayed by one color clock (stray playfield pixels in Pesco). @@ -4615,6 +4624,9 @@ Inverted HMOVE clock...Emulates the Kool-Aid Man collision and Cosmic Ark stars glitches for the given objects. -dev.tia.plinvphase
-dev.tia.msinvphase
-dev.tia.blinvphase + Short late HMOVEEmulates one pixel too short late HMOVEs for the given objects. + This causes e.g. shifted flashcart menues. + -dev.tia.pllatehmove
-dev.tia.mslatehmove
-dev.tia.bllatehmove Delayed PlayfieldEmulates playfield changes moved by one color clock. This e.g. causes glitches in Pesco (stray playfield pixel), Quick Step! (colored step borders) and Matchie (vertical line at pixel 79). diff --git a/src/common/DevSettingsHandler.cxx b/src/common/DevSettingsHandler.cxx index c457c16d8..4b569385e 100644 --- a/src/common/DevSettingsHandler.cxx +++ b/src/common/DevSettingsHandler.cxx @@ -70,6 +70,9 @@ void DevSettingsHandler::loadSettings(SettingsSet set) myPlInvPhase[set] = devSettings ? settings.getBool("dev.tia.plinvphase") : false; myMsInvPhase[set] = devSettings ? settings.getBool("dev.tia.msinvphase") : false; myBlInvPhase[set] = devSettings ? settings.getBool("dev.tia.blinvphase") : false; + myPlLateHMove[set] = devSettings ? settings.getBool("dev.tia.pllatehmove") : false; + myMsLateHMove[set] = devSettings ? settings.getBool("dev.tia.mslatehmove") : false; + myBlLateHMove[set] = devSettings ? settings.getBool("dev.tia.bllatehmove") : false; myPFBits[set] = devSettings ? settings.getBool("dev.tia.delaypfbits") : false; myPFColor[set] = devSettings ? settings.getBool("dev.tia.delaypfcolor") : false; myPFScore[set] = devSettings ? settings.getBool("dev.tia.pfscoreglitch") : false; @@ -141,6 +144,9 @@ void DevSettingsHandler::saveSettings(SettingsSet set) settings.setValue("dev.tia.plinvphase", myPlInvPhase[set]); settings.setValue("dev.tia.msinvphase", myMsInvPhase[set]); settings.setValue("dev.tia.blinvphase", myBlInvPhase[set]); + settings.setValue("dev.tia.pllatehmove", myPlLateHMove[set]); + settings.setValue("dev.tia.mslatehmove", myMsLateHMove[set]); + settings.setValue("dev.tia.bllatehmove", myBlLateHMove[set]); settings.setValue("dev.tia.delaypfbits", myPFBits[set]); settings.setValue("dev.tia.delaypfcolor", myPFColor[set]); settings.setValue("dev.tia.pfscoreglitch", myPFScore[set]); @@ -197,6 +203,9 @@ void DevSettingsHandler::applySettings(SettingsSet set) myOSystem.console().tia().setPlInvertedPhaseClock(myPlInvPhase[set]); myOSystem.console().tia().setMsInvertedPhaseClock(myMsInvPhase[set]); myOSystem.console().tia().setBlInvertedPhaseClock(myBlInvPhase[set]); + myOSystem.console().tia().setPlShortLateHMove(myPlLateHMove[set]); + myOSystem.console().tia().setMsShortLateHMove(myMsLateHMove[set]); + myOSystem.console().tia().setBlShortLateHMove(myBlLateHMove[set]); myOSystem.console().tia().setPFBitsDelay(myPFBits[set]); myOSystem.console().tia().setPFColorDelay(myPFColor[set]); myOSystem.console().tia().setPFScoreGlitch(myPFScore[set]); diff --git a/src/common/DevSettingsHandler.hxx b/src/common/DevSettingsHandler.hxx index a0f914e11..e75308cc5 100644 --- a/src/common/DevSettingsHandler.hxx +++ b/src/common/DevSettingsHandler.hxx @@ -69,16 +69,19 @@ class DevSettingsHandler std::array myThumbException{}; std::array myArmSpeed{}; // TIA sets - std::array myTIAType{}; - std::array myPlInvPhase{}; - std::array myMsInvPhase{}; - std::array myBlInvPhase{}; - std::array myPFBits{}; - std::array myPFColor{}; - std::array myPFScore{}; - std::array myBKColor{}; - std::array myPlSwap{}; - std::array myBlSwap{}; + std::array myTIAType; + std::array myPlInvPhase; + std::array myMsInvPhase; + std::array myBlInvPhase; + std::array myPlLateHMove; + std::array myMsLateHMove; + std::array myBlLateHMove; + std::array myPFBits; + std::array myPFColor; + std::array myPFScore; + std::array myBKColor; + std::array myPlSwap; + std::array myBlSwap; // States sets std::array myTimeMachine{}; std::array myStateSize{}; diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index a6a2d79fe..7be24c464 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -297,6 +297,9 @@ Settings::Settings() setPermanent("dev.tia.plinvphase", "true"); setPermanent("dev.tia.msinvphase", "true"); setPermanent("dev.tia.blinvphase", "true"); + setPermanent("dev.tia.pllatehmove", "true"); + setPermanent("dev.tia.mslatehmove", "true"); + setPermanent("dev.tia.bllatehmove", "true"); setPermanent("dev.tia.delaypfbits", "true"); setPermanent("dev.tia.delaypfcolor", "true"); setPermanent("dev.tia.pfscoreglitch", "true"); @@ -811,11 +814,16 @@ void Settings::usage() << " koolaidman|\n" << " cosmicark|pesco|\n" << " quickstep|matchie|\n" - << " indy500|heman|>\n" + << " indy500|heman|\n" + << " flashmenu>\n" << " -dev.tia.plinvphase <1|0> Enable inverted HMOVE clock phase for players\n" << " -dev.tia.msinvphase <1|0> Enable inverted HMOVE clock phase for\n" << " missiles\n" << " -dev.tia.blinvphase <1|0> Enable inverted HMOVE clock phase for ball\n" + << " -dev.tia.pllatehmove <1|0> Enable short late HMOVE for players\n" + << " -dev.tia.mslatehmove <1|0> Enable short late HMOVE for\n" + << " missiles\n" + << " -dev.tia.bllatehmove <1|0> Enable short late HMOVE for ball\n" << " -dev.tia.delaypfbits <1|0> Enable extra delay cycle for PF bits access\n" << " -dev.tia.delaypfcolor <1|0> Enable extra delay cycle for PF color\n" << " -dev.tia.pfscoreglitch <1|0> Enable PF score mode color glitch\n" diff --git a/src/emucore/tia/Ball.cxx b/src/emucore/tia/Ball.cxx index 242f103bd..d9e3a5af4 100644 --- a/src/emucore/tia/Ball.cxx +++ b/src/emucore/tia/Ball.cxx @@ -45,6 +45,7 @@ void Ball::reset() myRenderCounter = 0; myInvertedPhaseClock = false; myUseInvertedPhaseClock = false; + myUseShortLateHMove = false; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -153,6 +154,12 @@ void Ball::setInvertedPhaseClock(bool enable) myUseInvertedPhaseClock = enable; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Ball::setShortLateHMove(bool enable) +{ + myUseShortLateHMove = enable; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Ball::startMovement() { diff --git a/src/emucore/tia/Ball.hxx b/src/emucore/tia/Ball.hxx index 74c44b7f1..df468566c 100644 --- a/src/emucore/tia/Ball.hxx +++ b/src/emucore/tia/Ball.hxx @@ -108,6 +108,7 @@ class Ball : public Serializable Aid Man bug on some Jr. models. */ void setInvertedPhaseClock(bool enable); + void setShortLateHMove(bool enable); /** Start movement --- this is triggered by strobing HMOVE. @@ -167,7 +168,7 @@ class Ball : public Serializable /** Process a single movement tick. Inline for performance (implementation below). */ - FORCE_INLINE void movementTick(uInt32 clock, bool hblank); + FORCE_INLINE void movementTick(uInt32 clock, uInt32 hclock, bool hblank); /** Tick one color clock. Inline for performance (implementation below). @@ -323,6 +324,8 @@ class Ball : public Serializable */ bool myUseInvertedPhaseClock{false}; + bool myUseShortLateHMove{false}; + /** TIA instance. Required for flushing the line cache and requesting collision updates. */ @@ -341,7 +344,7 @@ class Ball : public Serializable // ############################################################################ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Ball::movementTick(uInt32 clock, bool hblank) +void Ball::movementTick(uInt32 clock, uInt32 hclock, bool hblank) { myLastMovementTick = myCounter; @@ -350,7 +353,7 @@ void Ball::movementTick(uInt32 clock, bool hblank) // Stop movement once the number of clocks according to HMBL is reached if (clock == myHmmClocks) isMoving = false; - else + else if (!myUseShortLateHMove || hclock != 0) { // Process the tick if we are in hblank. Otherwise, the tick is either masked // by an ordinary tick or merges two consecutive ticks into a single tick (inverted diff --git a/src/emucore/tia/Missile.cxx b/src/emucore/tia/Missile.cxx index 4e1c9371d..8ed8ddda9 100644 --- a/src/emucore/tia/Missile.cxx +++ b/src/emucore/tia/Missile.cxx @@ -46,6 +46,7 @@ void Missile::reset() collision = myCollisionMaskDisabled; myInvertedPhaseClock = false; myUseInvertedPhaseClock = false; + myUseShortLateHMove = false; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -199,6 +200,12 @@ void Missile::setInvertedPhaseClock(bool enable) myUseInvertedPhaseClock = enable; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Missile::setShortLateHMove(bool enable) +{ + myUseShortLateHMove = enable; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Missile::updateEnabled() { diff --git a/src/emucore/tia/Missile.hxx b/src/emucore/tia/Missile.hxx index 995a18650..04f6fe4f6 100644 --- a/src/emucore/tia/Missile.hxx +++ b/src/emucore/tia/Missile.hxx @@ -60,6 +60,7 @@ class Missile : public Serializable void applyColorLoss(); void setInvertedPhaseClock(bool enable); + void setShortLateHMove(bool enable); void toggleCollisions(bool enabled); @@ -127,6 +128,7 @@ class Missile : public Serializable bool myInvertedPhaseClock{false}; bool myUseInvertedPhaseClock{false}; + bool myUseShortLateHMove{false}; TIA *myTIA{nullptr}; @@ -149,7 +151,7 @@ void Missile::movementTick(uInt8 clock, uInt8 hclock, bool hblank) // Stop movement once the number of clocks according to HMMx is reached if(clock == myHmmClocks) isMoving = false; - else + else if (!myUseShortLateHMove || hclock != 0) { // Process the tick if we are in hblank. Otherwise, the tick is either masked // by an ordinary tick or merges two consecutive ticks into a single tick (inverted diff --git a/src/emucore/tia/Player.cxx b/src/emucore/tia/Player.cxx index 0925f25ee..5698d0c38 100644 --- a/src/emucore/tia/Player.cxx +++ b/src/emucore/tia/Player.cxx @@ -47,6 +47,7 @@ void Player::reset() myDividerChangeCounter = -1; myInvertedPhaseClock = false; myUseInvertedPhaseClock = false; + myUseShortLateHMove = false; myPattern = 0; setDivider(1); @@ -260,6 +261,12 @@ void Player::setInvertedPhaseClock(bool enable) myUseInvertedPhaseClock = enable; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Player::setShortLateHMove(bool enable) +{ + myUseShortLateHMove = enable; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Player::startMovement() { diff --git a/src/emucore/tia/Player.hxx b/src/emucore/tia/Player.hxx index 222e2a7d5..823d627eb 100644 --- a/src/emucore/tia/Player.hxx +++ b/src/emucore/tia/Player.hxx @@ -60,6 +60,7 @@ class Player : public Serializable void applyColorLoss(); void setInvertedPhaseClock(bool enable); + void setShortLateHMove(bool enable); void startMovement(); @@ -88,7 +89,7 @@ class Player : public Serializable bool save(Serializer& out) const override; bool load(Serializer& in) override; - FORCE_INLINE void movementTick(uInt32 clock, bool hblank); + FORCE_INLINE void movementTick(uInt32 clock, uInt32 hclock, bool hblank); FORCE_INLINE void tick(); @@ -143,6 +144,7 @@ class Player : public Serializable bool myIsDelaying{false}; bool myInvertedPhaseClock{false}; bool myUseInvertedPhaseClock{false}; + bool myUseShortLateHMove{false}; TIA* myTIA{nullptr}; @@ -158,14 +160,14 @@ class Player : public Serializable // ############################################################################ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Player::movementTick(uInt32 clock, bool hblank) +void Player::movementTick(uInt32 clock, uInt32 hclock, bool hblank) { if(isMoving) { // Stop movement once the number of clocks according to HMPx is reached if (clock == myHmmClocks) isMoving = false; - else + else if (!myUseShortLateHMove || hclock != 0) { // Process the tick if we are in hblank. Otherwise, the tick is either masked // by an ordinary tick or merges two consecutive ticks into a single tick (inverted diff --git a/src/emucore/tia/TIA.cxx b/src/emucore/tia/TIA.cxx index a7bb57f5d..98ed5ffa3 100644 --- a/src/emucore/tia/TIA.cxx +++ b/src/emucore/tia/TIA.cxx @@ -978,6 +978,11 @@ void TIA::applyDeveloperSettings() ? mySettings.getBool("dev.tia.msinvphase") : BSPF::equalsIgnoreCase("cosmicark", mySettings.getString("dev.tia.type"))); setBlInvertedPhaseClock(custom ? mySettings.getBool("dev.tia.blinvphase") : false); + setPlShortLateHMove(custom + ? mySettings.getBool("dev.tia.pllatehmove") + : BSPF::equalsIgnoreCase("flashmenu", mySettings.getString("dev.tia.type"))); + setMsShortLateHMove(custom ? mySettings.getBool("dev.tia.mslatehmove") : false); + setBlShortLateHMove(custom ? mySettings.getBool("dev.tia.bllatehmove") : false); setPFBitsDelay(custom ? mySettings.getBool("dev.tia.delaypfbits") : BSPF::equalsIgnoreCase("pesco", mySettings.getString("dev.tia.type"))); @@ -1558,9 +1563,9 @@ FORCE_INLINE void TIA::tickMovement() myMissile0.movementTick(movementCounter, myHctr, hblank); myMissile1.movementTick(movementCounter, myHctr, hblank); - myPlayer0.movementTick(movementCounter, hblank); - myPlayer1.movementTick(movementCounter, hblank); - myBall.movementTick(movementCounter, hblank); + myPlayer0.movementTick(movementCounter, myHctr, hblank); + myPlayer1.movementTick(movementCounter, myHctr, hblank); + myBall.movementTick(movementCounter, myHctr, hblank); myMovementInProgress = myMissile0.isMoving || @@ -1900,6 +1905,27 @@ void TIA::setBlInvertedPhaseClock(bool enable) myBall.setInvertedPhaseClock(enable); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::setPlShortLateHMove(bool enable) +{ + myPlayer0.setShortLateHMove(enable); + myPlayer1.setShortLateHMove(enable); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::setMsShortLateHMove(bool enable) +{ + myMissile0.setShortLateHMove(enable); + myMissile1.setShortLateHMove(enable); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::setBlShortLateHMove(bool enable) +{ + myBall.setShortLateHMove(enable); +} + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TIA::delayedWrite(uInt8 address, uInt8 value) { diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index d150563a4..bcc87cb19 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -523,6 +523,27 @@ class TIA : public Device */ void setBlInvertedPhaseClock(bool enable); + /** + Enables/disables short late HMOVE for players. + + @param enable Whether to enable short late HMOVE for players + */ + void setPlShortLateHMove(bool enable); + + /** + Enables/disables short late HMOVE for missiles. + + @param enable Whether to enable short late HMOVE for missiles + */ + void setMsShortLateHMove(bool enable); + + /** + Enables/disables short late HMOVE for ball. + + @param enable Whether to enable short late HMOVE for ball + */ + void setBlShortLateHMove(bool enable); + /** This method should be called to update the TIA with a new scanline. */ diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 282a62726..0be0b786b 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -229,8 +229,8 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) myArmSpeedWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 1, ypos - 1, fontWidth * 10, lineHeight, "Limit ARM speed (*) ", 0, kArmSpeedChanged, fontWidth * 9, " MIPS"); - myArmSpeedWidget->setMinValue(CartridgeELF::MIPS_MIN); - myArmSpeedWidget->setMaxValue(CartridgeELF::MIPS_MAX); + myArmSpeedWidget->setMinValue(CartridgeELF::MIPS_MIN); + myArmSpeedWidget->setMaxValue(CartridgeELF::MIPS_MAX); myArmSpeedWidget->setTickmarkIntervals((CartridgeELF::MIPS_MAX - CartridgeELF::MIPS_MIN) / 50); myArmSpeedWidget->setStepValue(2); myArmSpeedWidget->setToolTip("Limit emulation speed to simulate ARM CPU used for ELF."); @@ -238,7 +238,7 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) ypos = myTab->getHeight() - fontHeight - infofont.getFontHeight() - VGAP - VBORDER; lwidth = infofont.getStringWidth("(*) Change requires a reload for ELF ROMs"); - new StaticTextWidget(myTab, infofont, HBORDER, ypos, lwidth, infofont.getFontHeight(), + new StaticTextWidget(myTab, infofont, HBORDER, ypos, lwidth, infofont.getFontHeight(), "(*) Change requires a reload for ELF ROMs"); // Add items for tab 0 @@ -286,6 +286,7 @@ void DeveloperDialog::addTiaTab(const GUI::Font& font) VarList::push_back(items, "Glitched Matchie line", "matchie"); VarList::push_back(items, "Glitched Indy 500 menu", "indy500"); VarList::push_back(items, "Glitched He-Man title", "heman"); + VarList::push_back(items, "Shifted flashcart menu", "flashmenu"); VarList::push_back(items, "Custom", "custom"); myTIATypeWidget = new PopUpWidget(myTab, font, HBORDER + INDENT, ypos - 1, pwidth, lineHeight, items, "Chip type ", 0, kTIAType); @@ -314,6 +315,24 @@ void DeveloperDialog::addTiaTab(const GUI::Font& font) wid.push_back(myBlInvPhaseWidget); ypos += lineHeight + VGAP * 1; + myLateHMoveLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, + "Short late HMOVE for"); + myLateHMoveLabel->setToolTip("Objects react different to late HMOVEs"); + wid.push_back(myLateHMoveLabel); + ypos += lineHeight + VGAP * 1; + + myPlLateHMoveWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 3, ypos + 1, "Players"); + wid.push_back(myPlLateHMoveWidget); + + myMsLateHMoveWidget = new CheckboxWidget(myTab, font, myPlLateHMoveWidget->getRight() + fontWidth() * 2.5, + ypos + 1, "Missiles"); + wid.push_back(myMsLateHMoveWidget); + + myBlLateHMoveWidget = new CheckboxWidget(myTab, font, myMsLateHMoveWidget->getRight() + fontWidth() * 2.5, + ypos + 1, "Ball"); + wid.push_back(myBlLateHMoveWidget); + ypos += lineHeight + VGAP * 1; + myPlayfieldLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, "Delayed playfield"); myPlayfieldLabel->setToolTip("Playfield reacts one color clock slower to updates."); @@ -758,6 +777,9 @@ void DeveloperDialog::getWidgetStates(SettingsSet set) myPlInvPhase[set] = myPlInvPhaseWidget->getState(); myMsInvPhase[set] = myMsInvPhaseWidget->getState(); myBlInvPhase[set] = myBlInvPhaseWidget->getState(); + myPlLateHMove[set] = myPlLateHMoveWidget->getState(); + myMsLateHMove[set] = myMsLateHMoveWidget->getState(); + myBlLateHMove[set] = myBlLateHMoveWidget->getState(); myPFBits[set] = myPFBitsWidget->getState(); myPFColor[set] = myPFColorWidget->getState(); myPFScore[set] = myPFScoreWidget->getState(); @@ -1183,6 +1205,10 @@ void DeveloperDialog::handleTia() myPlInvPhaseWidget->setEnabled(enable); myMsInvPhaseWidget->setEnabled(enable); myBlInvPhaseWidget->setEnabled(enable); + myLateHMoveLabel->setEnabled(enable); + myPlLateHMoveWidget->setEnabled(enable); + myMsLateHMoveWidget->setEnabled(enable); + myBlLateHMoveWidget->setEnabled(enable); myPlayfieldLabel->setEnabled(enable); myBackgroundLabel->setEnabled(enable); myPFBitsWidget->setEnabled(enable); @@ -1200,6 +1226,9 @@ void DeveloperDialog::handleTia() myPlInvPhaseWidget->setState(myPlInvPhase[set]); myMsInvPhaseWidget->setState(myMsInvPhase[set]); myBlInvPhaseWidget->setState(myBlInvPhase[set]); + myPlLateHMoveWidget->setState(myPlLateHMove[set]); + myMsLateHMoveWidget->setState(myMsLateHMove[set]); + myBlLateHMoveWidget->setState(myBlLateHMove[set]); myPFBitsWidget->setState(myPFBits[set]); myPFColorWidget->setState(myPFColor[set]); myPFScoreWidget->setState(myPFScore[set]); @@ -1212,6 +1241,9 @@ void DeveloperDialog::handleTia() myPlInvPhaseWidget->setState(BSPF::equalsIgnoreCase("koolaidman", myTIATypeWidget->getSelectedTag().toString())); myMsInvPhaseWidget->setState(BSPF::equalsIgnoreCase("cosmicark", myTIATypeWidget->getSelectedTag().toString())); myBlInvPhaseWidget->setState(false); + myPlLateHMoveWidget->setState(BSPF::equalsIgnoreCase("flashmenu", myTIATypeWidget->getSelectedTag().toString())); + myMsLateHMoveWidget->setState(false); + myBlLateHMoveWidget->setState(false); myPFBitsWidget->setState(BSPF::equalsIgnoreCase("pesco", myTIATypeWidget->getSelectedTag().toString())); myPFColorWidget->setState(BSPF::equalsIgnoreCase("quickstep", myTIATypeWidget->getSelectedTag().toString())); myPFScoreWidget->setState(BSPF::equalsIgnoreCase("matchie", myTIATypeWidget->getSelectedTag().toString())); diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index 1a4c83489..41418e901 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -108,14 +108,22 @@ class DeveloperDialog : public Dialog, DevSettingsHandler // TIA widgets RadioButtonGroup* mySettingsGroupTia{nullptr}; PopUpWidget* myTIATypeWidget{nullptr}; + StaticTextWidget* myInvPhaseLabel{nullptr}; CheckboxWidget* myPlInvPhaseWidget{nullptr}; CheckboxWidget* myMsInvPhaseWidget{nullptr}; CheckboxWidget* myBlInvPhaseWidget{nullptr}; + + StaticTextWidget* myLateHMoveLabel{nullptr}; + CheckboxWidget* myPlLateHMoveWidget{nullptr}; + CheckboxWidget* myMsLateHMoveWidget{nullptr}; + CheckboxWidget* myBlLateHMoveWidget{nullptr}; + StaticTextWidget* myPlayfieldLabel{nullptr}; CheckboxWidget* myPFBitsWidget{nullptr}; CheckboxWidget* myPFColorWidget{nullptr}; CheckboxWidget* myPFScoreWidget{nullptr}; + StaticTextWidget* myBackgroundLabel{nullptr}; CheckboxWidget* myBKColorWidget{nullptr}; StaticTextWidget* mySwapLabel{nullptr};