diff --git a/src/common/HighScoresManager.cxx b/src/common/HighScoresManager.cxx index 647018b2d..33e98e1ef 100644 --- a/src/common/HighScoresManager.cxx +++ b/src/common/HighScoresManager.cxx @@ -140,6 +140,7 @@ bool HighScoresManager::get(const Properties& props, uInt32& numVariationsR, info.special = specialLabel(props); info.specialBCD = specialBCD(props); info.specialZeroBased = specialZeroBased(props); + info.notes = notes(props); info.varsAddr = varAddress(props); info.specialAddr = specialAddress(props); @@ -164,12 +165,15 @@ void HighScoresManager::set(Properties& props, uInt32 numVariations, props.set(PropType::Cart_Variations, to_string(min(numVariations, MAX_VARIATIONS))); // fill from the back to skip default values + if (output.length() || !info.notes.empty()) + output.insert(0, "," + toPropString(info.notes)); + if (output.length() || info.specialZeroBased != DEFAULT_SPECIAL_ZERO_BASED) output.insert(0, info.specialZeroBased ? ",1" : ",0"); if (output.length() || info.specialBCD != DEFAULT_SPECIAL_BCD) output.insert(0, info.specialBCD ? ",B" : ",D"); if (output.length() || !info.special.empty()) - output.insert(0, "," + (info.special.empty() ? "-" : info.special)); + output.insert(0, "," + toPropString(info.special.empty() ? "_" : info.special)); if (output.length() || info.varsZeroBased != DEFAULT_VARS_ZERO_BASED) output.insert(0, info.varsZeroBased ? ",1" : ",0"); @@ -253,14 +257,7 @@ bool HighScoresManager::varZeroBased(const Properties& props) const // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string HighScoresManager::specialLabel(const Properties& props) const { - string orgLabel, label; - - // some ugly formatting - orgLabel = label = getPropIdx(props, PropType::Cart_Formats, IDX_SPECIAL_LABEL); - label = BSPF::toLowerCase(label); - label[0] = orgLabel[0]; - - return label; + return fromPropString(getPropIdx(props, PropType::Cart_Formats, IDX_SPECIAL_LABEL)); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -279,6 +276,12 @@ bool HighScoresManager::specialZeroBased(const Properties& props) const return zeroBased.empty() ? DEFAULT_SPECIAL_ZERO_BASED : zeroBased != "0"; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +string HighScoresManager::notes(const Properties& props) const +{ + return fromPropString(getPropIdx(props, PropType::Cart_Formats, IDX_NOTES)); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /*bool HighScoresManager::armRAM(const Properties& props) const { @@ -474,6 +477,14 @@ Int32 HighScoresManager::special(uInt16 addr, bool varBCD, bool zeroBased) const return var; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +string HighScoresManager::notes() const +{ + Properties props; + + return notes(properties(props)); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Int32 HighScoresManager::convert(uInt32 val, uInt32 maxVal, bool isBCD, bool zeroBased) const { @@ -505,3 +516,35 @@ Int32 HighScoresManager::fromBCD(uInt8 bcd) const return (bcd >> 4) * 10 + bcd % 16; } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +string HighScoresManager::toPropString(const string& text) const +{ + string result = text; + size_t pos; + + while ((pos = result.find(" ")) != std::string::npos) { + result.replace(pos, 1, "_"); + } + + return result; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +string HighScoresManager::fromPropString(const string& text) const +{ + string result = text; + size_t pos; + + while ((pos = result.find("_")) != std::string::npos) { + result.replace(pos, 1, " "); + } + + // some ugly formatting + char first = result[0]; + result = BSPF::toLowerCase(result); + result[0] = first; + + return result; +} + diff --git a/src/common/HighScoresManager.hxx b/src/common/HighScoresManager.hxx index 705138cd2..198c20392 100644 --- a/src/common/HighScoresManager.hxx +++ b/src/common/HighScoresManager.hxx @@ -53,6 +53,7 @@ namespace HSM { string special; bool specialBCD; bool specialZeroBased; + string notes; //bool armRAM; // Addresses ScoreAddresses scoreAddr; @@ -121,6 +122,7 @@ class HighScoresManager string formattedScore(Int32 score, Int32 width = -1) const; bool scoreInvert() const; Int32 special() const; + string notes() const; // converts the given value, using only the maximum bits required by maxVal // and adjusted for BCD and zero based data @@ -141,6 +143,7 @@ class HighScoresManager IDX_SPECIAL_LABEL, IDX_SPECIAL_BCD, IDX_SPECIAL_ZERO_BASED, + IDX_NOTES, }; enum { IDX_VARS_ADDRESS = 0, @@ -174,6 +177,7 @@ class HighScoresManager string specialLabel(const Properties& props) const; bool specialBCD(const Properties& props) const; bool specialZeroBased(const Properties& props) const; + string notes(const Properties& props) const; //bool armRAM(const Properties& props) const; // Calculate the number of bytes for one player's score from property parameters @@ -185,6 +189,8 @@ class HighScoresManager string getPropIdx(const Properties& props, PropType type, uInt32 idx = 0) const; Int32 fromBCD(uInt8 bcd) const; + string toPropString(const string& test) const; + string fromPropString(const string& test) const; private: // Reference to the osystem object diff --git a/src/common/stella.pro b/src/common/stella.pro index b9683afa4..e5205894c 100644 --- a/src/common/stella.pro +++ b/src/common/stella.pro @@ -2,7 +2,7 @@ "Cart.Name" "draconian_20171013_RC6" "Display.Phosphor" "YES" "Cart.Variations" "4" -"Cart.Formats" "8,0,B,0,B,1,SECT.,D,1" +"Cart.Formats" "8,0,B,0,B,1,SECT.,D,1,VARIATIONS_ARE_DIFFICULTY_LEVEL" "Cart.Addresses" "177B,177A,1779,1778,811,1780" "" @@ -47,7 +47,7 @@ "Cart.Manufacturer" "Activision, Steve Cartwright" "Cart.ModelNo" "AX-022" "Cart.Name" "Seaquest (1983) (Activision)" -"Cart.Formats" "6" +"Cart.Formats" "6,0,B,0,B,0,_,B,0,HIGH_SCORE_IS_FROM_CURRENT_PLAYER" "Cart.Addresses" "B8,B9,BA" "" @@ -61,6 +61,15 @@ "Cart.Addresses" "FD,FE,FF,FC" "" +"Cart.MD5" "2903896d88a341511586d69fcfc20f7d" +"Cart.Manufacturer" "Activision, David Crane" +"Cart.ModelNo" "AX-014, AX-014-04" +"Cart.Name" "Grand Prix (1982) (Activision)" +"Cart.Variations" "4" +"Cart.Formats" "5,0,B,1,B,1,_,B,0,TIME/SCORE_SHOWS_EXTRA_DIGIT" +"Cart.Addresses" "EB,EC,ED,80" +"" + "Cart.MD5" "2a0ba55e56e7a596146fa729acf0e109" "Cart.Manufacturer" "Activision, Bob Whitehead" "Cart.ModelNo" "AG-019" @@ -115,6 +124,15 @@ "Cart.Addresses" "D5,D6,D7" "" +"Cart.MD5" "4ca73eb959299471788f0b685c3ba0b5" +"Cart.Manufacturer" "Activision, Steve Cartwright" +"Cart.ModelNo" "AX-031" +"Cart.Name" "Frostbite (1983) (Activision)" +"Cart.Variations" "4" +"Cart.Formats" "6,0,B,0,B,1,LEVEL,B,1" +"Cart.Addresses" "C8,C9,CA,80,CB" +"" + "Cart.MD5" "515046e3061b7b18aa3a551c3ae12673" "Cart.Manufacturer" "Atari - GCC, Mark Ackerman, Noellie Alito" "Cart.ModelNo" "CX2692" @@ -135,7 +153,9 @@ "Cart.Manufacturer" "Atari - GCC, Douglas B. Macrae" "Cart.ModelNo" "CX2677" "Cart.Name" "Dig Dug (1983) (Atari)" -"Cart.Addresses" "F0FE,F0FD" +"Cart.Variations" "2" +"Cart.Formats" "4,0,B,0,B,1,_,B,0,VARIATION_1_IS_EASY;_2_IS_NORMAL" +"Cart.Addresses" "F0FE,F0FD,80" "" "Cart.MD5" "72ffbef6504b75e69ee1045af9075f66" @@ -143,7 +163,7 @@ "Cart.ModelNo" "CX2632 - 49-75153" "Cart.Name" "Space Invaders (1980) (Atari)" "Cart.Variations" "112" -"Cart.Formats" "4,0,B,0,H,1" +"Cart.Formats" "4,0,B,0,D,1,_,B,0,ONLY_PLAYER_1_SUPPORTED" "Cart.Addresses" "E6,E8,DC" "" @@ -164,11 +184,21 @@ "Cart.Addresses" "C9,C8,C7" "" +"Cart.MD5" "87e79cd41ce136fd4f72cc6e2c161bee" +"Cart.Manufacturer" "Atari - GCC, Mark Ackerman, Glenn Parker" +"Cart.ModelNo" "CX2675" +"Cart.Name" "Ms. Pac-Man (1983) (Atari)" +"Display.Phosphor" "YES" +"Cart.Variations" "4" +"Cart.Formats" "6,0,B,0,B,1,_,D,1,VARS_VALID_AT_GAME_OVER;_CHERRIES_=_VAR_#4" +"Cart.Addresses" "FA,F9,F8,F7,0" +"" + "Cart.MD5" "91c2098e88a6b13f977af8c003e0bca5" "Cart.Manufacturer" "Atari - GCC" "Cart.ModelNo" "CX2676" "Cart.Name" "Centipede (1983) (Atari)" -"Cart.Formats" "6" +"Cart.Formats" "6,0,B,0,B,0,_,B,0,VARIATIONS_CANNOT_BE_DEFINED" "Cart.Addresses" "F4,F5,F6" "" @@ -180,6 +210,14 @@ "Cart.Addresses" "D4,D3,E5" "" +"Cart.MD5" "94b92a882f6dbaa6993a46e2dcc58402" +"Cart.Manufacturer" "Activision, Larry Miller" +"Cart.ModelNo" "AX-026, AX-026-04" +"Cart.Name" "Enduro (1983) (Activision)" +"Cart.Formats" "6,0,B,0,B,0,DAY" +"Cart.Addresses" "AA,A9,A8,0,AD" +"" + "Cart.MD5" "9ad36e699ef6f45d9eb6c4cf90475c9f" "Cart.Manufacturer" "Imagic, Dennis Koble" "Cart.ModelNo" "720103-1A, 720103-1B, IA3203, IX-010-04" @@ -206,8 +244,8 @@ "Cart.Name" "Decathlon (1983) (Activision)" "Cart.Rarity" "Rare" "Cart.Variations" "10" -"Cart.Formats" "4,0,B,0,D,1" -"Cart.Addresses" "95,96,80" +"Cart.Formats" "4,0,B,0,D,1,_,B,0,DECATHLON_&_100M_DASH_SHARE_VARIATION_1" +"Cart.Addresses" "95,96,80,0" "" "Cart.MD5" "be929419902e21bd7830a7a7d746195d" @@ -233,7 +271,7 @@ "Cart.Name" "Yars' Revenge (1982) (Atari)" "Display.Phosphor" "YES" "Cart.Variations" "8" -"Cart.Formats" "6,0,B,0,B,1" +"Cart.Formats" "6,0,B,0,B,1,_,B,0,VARIATIONS_ARE_LARGER_BY_1" "Cart.Addresses" "E0,E1,E2,80" "" @@ -241,7 +279,7 @@ "Cart.Manufacturer" "Atari - GCC, Dave Payne" "Cart.ModelNo" "CX2669" "Cart.Name" "Vanguard (1983) (Atari)" -"Cart.Formats" "6" +"Cart.Formats" "6,0,B,0,B,0,_,B,0,SCORE_IS_FOR_CURRENT_PLAYER" "Cart.Addresses" "99,98,97" "" @@ -252,8 +290,18 @@ "Cart.Rarity" "Common" "Display.Phosphor" "YES" "Cart.Variations" "66" -"Cart.Formats" "5,1,0,B,D,0" -"Cart.Addresses" "BD,BE,80,C7" +"Cart.Formats" "5,1,H,1,D,0,_,B,0,VARIATIONS_>_32_DIFFER_BY_1" +"Cart.Addresses" "BD,BE,80" +"" + +"Cart.MD5" "d69559f9c9dc6ef528d841bf9d91b275" +"Cart.Manufacturer" "Activision, Alan Miller" +"Cart.ModelNo" "AX-016" +"Cart.Name" "StarMaster (1982) (Activision)" +"Cart.Note" "Use Color/BW switch to change between galactic chart and front views" +"Cart.Variations" "4" +"Cart.Formats" "4,0,B,0,B,1,_,B,0,SCORE_ONLY_CALCULATED_WHEN_GAME_IS_OVER" +"Cart.Addresses" "C1,C2,80" "" "Cart.MD5" "dd7884b4f93cab423ac471aa1935e3df" @@ -261,15 +309,15 @@ "Cart.ModelNo" "CX2649, 49-75163" "Cart.Name" "Asteroids (1981) (Atari)" "Cart.Variations" "66" -"Cart.Formats" "5,1,0,B,D,0" -"Cart.Addresses" "BD,BE,80,C7" +"Cart.Formats" "5,1,H,1,D,0,_,B,0,VARIATIONS_>_32_DIFFER_BY_1" +"Cart.Addresses" "BD,BE,80" "" "Cart.MD5" "dde55d9868911407fe8b3fefef396f00" "Cart.Name" "Seawolf (2004) (Xype, Manuel Rotschkar)" "Cart.Variations" "4" -"Cart.Formats" "6" -"Cart.Addresses" "90,91,92,0" +"Cart.Formats" "6,0,B,0,B,0,_,B,0,USER_DEFINED_VARIATION_BASED_ON_SWITCHES" +"Cart.Addresses" "90,91,92,0,0" "" "Cart.MD5" "f0e0addc07971561ab80d9abe1b8d333" @@ -301,7 +349,7 @@ "Cart.Name" "Breakout (1978) (Atari)" "Cart.Note" "Uses the Paddle Controllers" "Controller.MouseAxis" "01 60" -"Cart.Formats" "3" +"Cart.Formats" "3,0,B,0,B,0,_,B,0,VARIATIONS_CANNOT_BE_DEFINED" "Cart.Addresses" "CE,CD" "" diff --git a/src/gui/GameInfoDialog.cxx b/src/gui/GameInfoDialog.cxx index 5d21a0c2b..5cc465a20 100644 --- a/src/gui/GameInfoDialog.cxx +++ b/src/gui/GameInfoDialog.cxx @@ -444,8 +444,9 @@ void GameInfoDialog::addHighScoresTab() EditableWidget::TextFilter fVars = [](char c) { return (c >= '0' && c <= '9'); }; - EditableWidget::TextFilter fSpecial = [](char c) { - return (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '.'|| c == '-'; + + EditableWidget::TextFilter fText = [](char c) { + return (c >= 'a' && c <= 'z') || (c >= ' ' && c < ',') || (c > ',' && c < '@'); }; xpos = HBORDER; ypos = VBORDER; @@ -499,7 +500,7 @@ void GameInfoDialog::addHighScoresTab() xpos += 20; ypos += lineHeight + VGAP; - vwidth = _font.getStringWidth("AB") + 4; + vwidth = _font.getStringWidth("AB") + 3; items.clear(); for (int i = 1; i <= HSM::MAX_SCORE_DIGITS; ++i) VarList::push_back(items, std::to_string(i), std::to_string(i)); @@ -553,13 +554,13 @@ void GameInfoDialog::addHighScoresTab() myCurrentScore = new StaticTextWidget(myTab, _font, myCurrentScoreLabel->getRight(), ypos + 1, "12345678"); - xpos -= 20; ypos += lineHeight + VGAP * 4; + xpos -= 20; ypos += lineHeight + VGAP * 3; vwidth = _font.getStringWidth("123") + 4; mySpecialLabel = new StaticTextWidget(myTab, _font, xpos, ypos + 1, "Special"); mySpecialName = new EditTextWidget(myTab, _font, mySpecialLabel->getRight() + 19, ypos - 1, swidth, lineHeight); - mySpecialName->setTextFilter(fSpecial); + mySpecialName->setTextFilter(fText); wid.push_back(mySpecialName); mySpecialAddressLabel = new StaticTextWidget(myTab, _font, myVarAddressLabel->getLeft(), @@ -580,6 +581,14 @@ void GameInfoDialog::addHighScoresTab() "0-based", kHiScoresChanged); wid.push_back(mySpecialZeroBased); + ypos += lineHeight + VGAP * 3; + + myHighScoreNotesLabel = new StaticTextWidget(myTab, _font, xpos, ypos + 1, "Notes"); + myHighScoreNotes = new EditTextWidget(myTab, _font, mySpecialName->getLeft(), ypos - 1, + _w - HBORDER - mySpecialName->getLeft() - 2 , lineHeight); + myHighScoreNotes->setTextFilter(fText); + wid.push_back(myHighScoreNotes); + // Add items for tab 4 addToFocusList(wid, myTab, tabID); } @@ -785,6 +794,8 @@ void GameInfoDialog::loadHighScoresProperties(const Properties& props) mySpecialBCD->setState(info.specialBCD); mySpecialZeroBased->setState(info.specialZeroBased); + myHighScoreNotes->setText(info.notes); + ss.str(""); ss << hex << right //<< setw(HSM::MAX_ADDR_CHARS) << setfill(' ') << uppercase << info.varsAddr; @@ -898,15 +909,17 @@ void GameInfoDialog::saveHighScoresProperties() info.varsZeroBased = myVarsZeroBased->getState(); info.varsBCD = myVarsBCD->getState(); - info.special = mySpecialName->getText(); - info.specialZeroBased = mySpecialZeroBased->getState(); - info.specialBCD = mySpecialBCD->getState(); - info.numDigits = myScoreDigits->getSelected() + 1; info.trailingZeroes = myTrailingZeroes->getSelected(); info.scoreBCD = myScoreBCD->getState(); info.scoreInvert = myScoreInvert->getState(); + info.special = mySpecialName->getText(); + info.specialZeroBased = mySpecialZeroBased->getState(); + info.specialBCD = mySpecialBCD->getState(); + + info.notes = myHighScoreNotes->getText(); + // fill addresses string strAddr; @@ -1097,16 +1110,6 @@ void GameInfoDialog::updateHighScoresWidgets() myVarsBCD->setEnabled(enableVars && stringToInt(myVariations->getText(), 1) >= 10); myVarsZeroBased->setEnabled(enableVars); - mySpecialLabel->setEnabled(enable); - mySpecialName->setEnabled(enable); - mySpecialName->setEditable(enable); - mySpecialAddressLabel->setEnabled(enableSpecial); - mySpecialAddress->setEnabled(enableSpecial); - mySpecialAddress->setEditable(enableSpecial); - mySpecialAddressVal->setEnabled(enableSpecial && enableConsole); - mySpecialBCD->setEnabled(enableSpecial); - mySpecialZeroBased->setEnabled(enableSpecial); - myScoreLabel->setEnabled(enable); myScoreDigitsLabel->setEnabled(enable); myScoreDigits->setEnabled(enable); @@ -1126,6 +1129,19 @@ void GameInfoDialog::updateHighScoresWidgets() myCurrentScoreLabel->setEnabled(enable && enableConsole); myCurrentScore->setEnabled(enable && enableConsole); + mySpecialLabel->setEnabled(enable); + mySpecialName->setEnabled(enable); + mySpecialName->setEditable(enable); + mySpecialAddressLabel->setEnabled(enableSpecial); + mySpecialAddress->setEnabled(enableSpecial); + mySpecialAddress->setEditable(enableSpecial); + mySpecialAddressVal->setEnabled(enableSpecial && enableConsole); + mySpecialBCD->setEnabled(enableSpecial); + mySpecialZeroBased->setEnabled(enableSpecial); + + myHighScoreNotesLabel->setEnabled(enable); + myHighScoreNotes->setEnabled(enable); + // verify and update widget data // update variations RAM value diff --git a/src/gui/GameInfoDialog.hxx b/src/gui/GameInfoDialog.hxx index 925494104..dd031a46c 100644 --- a/src/gui/GameInfoDialog.hxx +++ b/src/gui/GameInfoDialog.hxx @@ -132,14 +132,6 @@ class GameInfoDialog : public Dialog, public CommandSender CheckboxWidget* myVarsBCD{nullptr}; CheckboxWidget* myVarsZeroBased{nullptr}; - StaticTextWidget* mySpecialLabel{nullptr}; - EditTextWidget* mySpecialName{nullptr}; - StaticTextWidget* mySpecialAddressLabel{nullptr}; - EditTextWidget* mySpecialAddress{nullptr}; - EditTextWidget* mySpecialAddressVal{nullptr}; - CheckboxWidget* mySpecialBCD{nullptr}; - CheckboxWidget* mySpecialZeroBased{nullptr}; - StaticTextWidget* myScoreLabel{nullptr}; StaticTextWidget* myScoreDigitsLabel{nullptr}; PopUpWidget* myScoreDigits{nullptr}; @@ -154,6 +146,17 @@ class GameInfoDialog : public Dialog, public CommandSender StaticTextWidget* myCurrentScoreLabel{nullptr}; StaticTextWidget* myCurrentScore{nullptr}; + StaticTextWidget* mySpecialLabel{nullptr}; + EditTextWidget* mySpecialName{nullptr}; + StaticTextWidget* mySpecialAddressLabel{nullptr}; + EditTextWidget* mySpecialAddress{nullptr}; + EditTextWidget* mySpecialAddressVal{nullptr}; + CheckboxWidget* mySpecialBCD{nullptr}; + CheckboxWidget* mySpecialZeroBased{nullptr}; + + StaticTextWidget* myHighScoreNotesLabel{nullptr}; + EditTextWidget* myHighScoreNotes{nullptr}; + enum { kVCenterChanged = 'Vcch', kPhosphorChanged = 'PPch', diff --git a/src/gui/HighScoresDialog.cxx b/src/gui/HighScoresDialog.cxx index 5c0ade782..7d3b6958e 100644 --- a/src/gui/HighScoresDialog.cxx +++ b/src/gui/HighScoresDialog.cxx @@ -72,7 +72,8 @@ HighScoresDialog::HighScoresDialog(OSystem& osystem, DialogContainer& parent, { const GUI::Font& ifont = instance().frameBuffer().infoFont(); const int lineHeight = _font.getLineHeight(), - fontWidth = _font.getMaxCharWidth(); + fontWidth = _font.getMaxCharWidth(), + infoLineHeight = ifont.getLineHeight(); const int VBORDER = 10; const int HBORDER = 10; const int VGAP = 4; @@ -135,12 +136,17 @@ HighScoresDialog::HighScoresDialog(OSystem& osystem, DialogContainer& parent, ypos += lineHeight + VGAP; } - ypos += VGAP * 2; + ypos += VGAP; - myMD5Widget = new StaticTextWidget(this, ifont, xpos, ypos + 1, "MD5: 12345678901234567890123456789012"); + _w = myDeleteButtons[0]->getRight() + HBORDER; + myNotesWidget = new StaticTextWidget(this, ifont, xpos, ypos + 1, _w - HBORDER * 2, + infoLineHeight, "Note: "); + + ypos += infoLineHeight + VGAP; + + myMD5Widget = new StaticTextWidget(this, ifont, xpos, ypos + 1, "MD5: 12345678901234567890123456789012"); _h = myMD5Widget->getBottom() + VBORDER + buttonHeight(_font) + VBORDER; - _w = myDeleteButtons[0]->getRight() + HBORDER; myGameNameWidget = new StaticTextWidget(this, _font, HBORDER, VBORDER + _th + 1, _w - HBORDER * 2, lineHeight); @@ -201,12 +207,14 @@ void HighScoresDialog::loadConfig() label = label.substr(label.length() - 5); mySpecialLabelWidget->setLabel(label); + myNotesWidget->setLabel("Note: " + instance().highScores().notes()); + if (instance().hasConsole()) myMD5 = instance().console().properties().get(PropType::Cart_MD5); else myMD5 = instance().launcher().selectedRomMD5(); - myMD5Widget->setLabel("MD5: " + myMD5); + myMD5Widget->setLabel("MD5: " + myMD5); // requires the current MD5 myGameNameWidget->setLabel(cartName()); diff --git a/src/gui/HighScoresDialog.hxx b/src/gui/HighScoresDialog.hxx index c1940fee4..09c529023 100644 --- a/src/gui/HighScoresDialog.hxx +++ b/src/gui/HighScoresDialog.hxx @@ -129,6 +129,7 @@ class HighScoresDialog : public Dialog StaticTextWidget* myDateWidgets[NUM_RANKS]{nullptr}; ButtonWidget* myDeleteButtons[NUM_RANKS]{nullptr}; + StaticTextWidget* myNotesWidget{nullptr}; StaticTextWidget* myMD5Widget{nullptr}; Menu::AppMode myMode{Menu::AppMode::emulator};