/** * @file stores.h * * Interface of functionality for stores and towner dialogs. */ #pragma once #include #include #include "DiabloUI/ui_flags.hpp" #include "control.h" #include "engine.h" #include "engine/clx_sprite.hpp" #include "utils/attributes.h" namespace devilution { #define WITCH_ITEMS 25 #define SMITH_ITEMS 25 #define SMITH_PREMIUM_ITEMS 15 #define STORE_LINES 104 enum class TalkID : uint8_t { None, Smith, SmithBuy, SmithSell, SmithRepair, Witch, WitchBuy, WitchSell, WitchRecharge, NoMoney, NoRoom, Confirm, Boy, BoyBuy, Healer, Storyteller, HealerBuy, StorytellerIdentify, SmithPremiumBuy, Gossip, StorytellerIdentifyShow, Tavern, Drunk, Barmaid, }; /** Currently active store */ extern TalkID stextflag; /** Current index into storehidx/storehold */ extern DVL_API_FOR_TEST int storenumh; /** Map of inventory items being presented in the store */ extern int8_t storehidx[48]; /** Copies of the players items as presented in the store */ extern DVL_API_FOR_TEST Item storehold[48]; /** Items sold by Griswold */ extern Item smithitem[SMITH_ITEMS]; /** Number of premium items for sale by Griswold */ extern int numpremium; /** Base level of current premium items sold by Griswold */ extern int premiumlevel; /** Premium items sold by Griswold */ extern Item premiumitems[SMITH_PREMIUM_ITEMS]; /** Items sold by Pepin */ extern Item healitem[20]; /** Items sold by Adria */ extern Item witchitem[WITCH_ITEMS]; /** Current level of the item sold by Wirt */ extern int boylevel; /** Current item sold by Wirt */ extern Item boyitem; void AddStoreHoldRepair(Item *itm, int8_t i); /** Clears premium items sold by Griswold and Wirt. */ void InitStores(); /** Spawns items sold by vendors, including premium items sold by Griswold and Wirt. */ void SetupTownStores(); void FreeStoreMem(); void PrintSString(const Surface &out, int margin, int line, std::string_view text, UiFlags flags, int price = 0, int cursId = -1, bool cursIndent = false); void DrawSLine(const Surface &out, int sy); void DrawSTextHelp(); void ClearSText(int s, int e); void StartStore(TalkID s); void DrawSText(const Surface &out); void StoreESC(); void StoreUp(); void StoreDown(); void StorePrior(); void StoreNext(); void TakePlrsMoney(int cost); void StoreEnter(); void CheckStoreBtn(); void ReleaseStoreBtn(); } // namespace devilution