diff --git a/Source/stores.cpp b/Source/stores.cpp index c53698043..0517d6d1d 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -897,11 +897,11 @@ void StoreNoRoom() AddSText(0, 14, _("You do not have enough room in inventory"), UiFlags::ColorWhite | UiFlags::AlignCenter, true); } -void StoreConfirm(Item &item) -{ - StartStore(OldActiveStore); - HasScrollbar = false; - ClearSText(5, 23); +void StoreConfirm(Item &item) +{ + StartStore(OldActiveStore); + HasScrollbar = false; + ClearSText(5, 23); if (OldActiveStore == TalkID::StorytellerIdentifyAll) { AddSText(0, 10, _("Identify all items?"), UiFlags::ColorWhite | UiFlags::AlignCenter, false); @@ -949,14 +949,28 @@ void StoreConfirm(Item &item) app_fatal(StrCat("Unknown store dialog ", static_cast(OldActiveStore))); } AddSText(0, 15, prompt, UiFlags::ColorWhite | UiFlags::AlignCenter, false); - AddSText(0, 18, _("Yes"), UiFlags::ColorWhite | UiFlags::AlignCenter, true); - AddSText(0, 20, _("No"), UiFlags::ColorWhite | UiFlags::AlignCenter, true); -} - -void StartBoy() -{ - IsTextFullSize = false; - HasScrollbar = false; + AddSText(0, 18, _("Yes"), UiFlags::ColorWhite | UiFlags::AlignCenter, true); + AddSText(0, 20, _("No"), UiFlags::ColorWhite | UiFlags::AlignCenter, true); +} + +void RestoreStoreFromOldState() +{ + if (OldActiveStore == TalkID::StorytellerIdentifyAll) { + StartStore(TalkID::Storyteller); + CurrentTextLine = 16; + ScrollPos = 0; + return; + } + + StartStore(OldActiveStore); + CurrentTextLine = OldTextLine; + ScrollPos = OldScrollPos; +} + +void StartBoy() +{ + IsTextFullSize = false; + HasScrollbar = false; AddSText(0, 2, _("Wirt the Peg-legged boy"), UiFlags::ColorWhitegold | UiFlags::AlignCenter, false); AddSLine(5); if (!BoyItem.isEmpty()) { @@ -1806,13 +1820,19 @@ void ConfirmEnter(Item &item) } } - StartStore(OldActiveStore); - - if (CurrentTextLine == BackButtonLine()) - return; - - CurrentTextLine = OldTextLine; - ScrollPos = std::min(OldScrollPos, NumTextLines); + StartStore(OldActiveStore); + + if (CurrentTextLine == BackButtonLine()) + return; + + if (OldActiveStore == TalkID::StorytellerIdentifyAll) { + CurrentTextLine = 16; + ScrollPos = 0; + return; + } + + CurrentTextLine = OldTextLine; + ScrollPos = std::min(OldScrollPos, NumTextLines); while (CurrentTextLine != -1 && !TextLine[CurrentTextLine].isSelectable()) { CurrentTextLine--; @@ -2482,17 +2502,15 @@ void StoreESC() case TalkID::StorytellerIdentifyShow: StartStore(TalkID::StorytellerIdentify); break; - case TalkID::NoMoney: - case TalkID::NoRoom: - case TalkID::Confirm: - StartStore(OldActiveStore); - CurrentTextLine = OldTextLine; - ScrollPos = OldScrollPos; - break; - case TalkID::None: - break; - } -} + case TalkID::NoMoney: + case TalkID::NoRoom: + case TalkID::Confirm: + RestoreStoreFromOldState(); + break; + case TalkID::None: + break; + } +} void StoreUp() { @@ -2649,15 +2667,13 @@ void StoreEnter() case TalkID::WitchRecharge: WitchRechargeEnter(); break; - case TalkID::NoMoney: - case TalkID::NoRoom: - StartStore(OldActiveStore); - CurrentTextLine = OldTextLine; - ScrollPos = OldScrollPos; - break; - case TalkID::Confirm: - ConfirmEnter(TempItem); - break; + case TalkID::NoMoney: + case TalkID::NoRoom: + RestoreStoreFromOldState(); + break; + case TalkID::Confirm: + ConfirmEnter(TempItem); + break; case TalkID::Boy: BoyEnter(); break;