diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 52ccb7d31..b1a1057e3 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -413,6 +413,7 @@ target_link_dependencies(libdevilutionx_options PUBLIC sol2::sol2 libdevilutionx_game_mode libdevilutionx_logged_fstream + libdevilutionx_quick_messages libdevilutionx_strings libdevilutionx_ini ) @@ -464,6 +465,10 @@ add_devilutionx_object_library(libdevilutionx_random engine/random.cpp ) +add_devilutionx_object_library(libdevilutionx_quick_messages + quick_messages.cpp +) + add_devilutionx_object_library(libdevilutionx_spells spelldat.cpp spells.cpp @@ -654,6 +659,7 @@ target_link_dependencies(libdevilutionx PUBLIC libdevilutionx_pkware_encrypt libdevilutionx_player libdevilutionx_quests + libdevilutionx_quick_messages libdevilutionx_random libdevilutionx_sound libdevilutionx_spells diff --git a/Source/control.cpp b/Source/control.cpp index 261ce0387..2ec1d86aa 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -46,6 +46,7 @@ #include "playerdat.hpp" #include "qol/stash.h" #include "qol/xpbar.h" +#include "quick_messages.hpp" #include "stores.h" #include "towners.h" #include "utils/algorithm/container.hpp" @@ -1690,7 +1691,7 @@ void DiabloHotkeyMsg(uint32_t dwMsg) return; } - assert(dwMsg < QUICK_MESSAGE_OPTIONS); + assert(dwMsg < QuickMessages.size()); for (const std::string &msg : sgOptions.Chat.szHotKeyMsgs[dwMsg]) { #ifdef _DEBUG diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 94c34600e..a4624d697 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -81,6 +81,7 @@ #include "qol/monhealthbar.h" #include "qol/stash.h" #include "qol/xpbar.h" +#include "quick_messages.hpp" #include "restrict.h" #include "stores.h" #include "storm/storm_net.hpp" @@ -134,18 +135,6 @@ bool DebugDisableNetworkTimeout = false; std::vector DebugCmdsFromCommandLine; #endif GameLogicStep gGameLogicStep = GameLogicStep::None; -QuickMessage QuickMessages[QUICK_MESSAGE_OPTIONS] = { - { "QuickMessage1", N_("I need help! Come here!") }, - { "QuickMessage2", N_("Follow me.") }, - { "QuickMessage3", N_("Here's something for you.") }, - { "QuickMessage4", N_("Now you DIE!") }, - { "QuickMessage5", N_("Heal yourself!") }, - { "QuickMessage6", N_("Watch out!") }, - { "QuickMessage7", N_("Thanks.") }, - { "QuickMessage8", N_("Retreat!") }, - { "QuickMessage9", N_("Sorry.") }, - { "QuickMessage10", N_("I'm waiting.") }, -}; /** This and the following mouse variables are for handling in-game click-and-hold actions */ MouseActionType LastMouseButtonAction = MouseActionType::None; @@ -1186,7 +1175,7 @@ void DiabloInit() gbIsHellfireSaveGame = gbIsHellfire; - for (size_t i = 0; i < QUICK_MESSAGE_OPTIONS; i++) { + for (size_t i = 0; i < QuickMessages.size(); i++) { auto &messages = sgOptions.Chat.szHotKeyMsgs[i]; if (messages.empty()) { messages.emplace_back(_(QuickMessages[i].message)); @@ -1856,7 +1845,7 @@ void InitKeymapActions() SpellBookKeyPressed, nullptr, CanPlayerTakeAction); - for (uint32_t i = 0; i < QUICK_MESSAGE_OPTIONS; ++i) { + for (uint32_t i = 0; i < QuickMessages.size(); ++i) { sgOptions.Keymapper.AddAction( "QuickMessage{}", N_("Quick Message {}"), diff --git a/Source/diablo.h b/Source/diablo.h index 3ea16a521..de321dccb 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -110,15 +110,6 @@ void diablo_color_cyc_logic(); extern bool DebugDisableNetworkTimeout; #endif -struct QuickMessage { - /** Config variable names for quick message */ - const char *const key; - /** Default quick message */ - const char *const message; -}; - -constexpr size_t QUICK_MESSAGE_OPTIONS = 10; -extern QuickMessage QuickMessages[QUICK_MESSAGE_OPTIONS]; /** * @brief Specifies what game logic step is currently executed */ diff --git a/Source/options.cpp b/Source/options.cpp index 85bb47b55..0e4107b27 100644 --- a/Source/options.cpp +++ b/Source/options.cpp @@ -29,6 +29,7 @@ #include "platform/locale.hpp" #include "qol/monhealthbar.h" #include "qol/xpbar.h" +#include "quick_messages.hpp" #include "utils/algorithm/container.hpp" #include "utils/display.h" #include "utils/file_util.h" @@ -252,7 +253,7 @@ void LoadOptions() ini->getUtf8Buf("Network", "Previous Game ID", sgOptions.Network.szPreviousZTGame, sizeof(sgOptions.Network.szPreviousZTGame)); ini->getUtf8Buf("Network", "Previous Host", sgOptions.Network.szPreviousHost, sizeof(sgOptions.Network.szPreviousHost)); - for (size_t i = 0; i < QUICK_MESSAGE_OPTIONS; i++) { + for (size_t i = 0; i < QuickMessages.size(); i++) { std::span values = ini->get("NetMsg", QuickMessages[i].key); std::vector &result = sgOptions.Chat.szHotKeyMsgs[i]; result.clear(); @@ -289,7 +290,7 @@ void SaveOptions() ini->set("Network", "Previous Game ID", sgOptions.Network.szPreviousZTGame); ini->set("Network", "Previous Host", sgOptions.Network.szPreviousHost); - for (size_t i = 0; i < QUICK_MESSAGE_OPTIONS; i++) { + for (size_t i = 0; i < QuickMessages.size(); i++) { ini->set("NetMsg", QuickMessages[i].key, sgOptions.Chat.szHotKeyMsgs[i]); } diff --git a/Source/options.h b/Source/options.h index 422e30379..9bffa0d76 100644 --- a/Source/options.h +++ b/Source/options.h @@ -15,6 +15,7 @@ #include "controls/game_controls.h" #include "engine/sound_defs.hpp" #include "pack.h" +#include "quick_messages.hpp" #include "utils/enum_traits.h" #include "utils/string_view_hash.hpp" @@ -647,7 +648,7 @@ struct ChatOptions : OptionCategoryBase { std::vector GetEntries() override; /** @brief Quick chat messages. */ - std::vector szHotKeyMsgs[QUICK_MESSAGE_OPTIONS]; + std::vector szHotKeyMsgs[QuickMessages.size()]; }; struct LanguageOptions : OptionCategoryBase { diff --git a/Source/quick_messages.cpp b/Source/quick_messages.cpp new file mode 100644 index 000000000..97b92a88b --- /dev/null +++ b/Source/quick_messages.cpp @@ -0,0 +1,22 @@ +#include "quick_messages.hpp" + +#include + +#include "utils/language.h" + +namespace devilution { + +std::array QuickMessages = { + QuickMessage { "QuickMessage1", N_("I need help! Come here!") }, + QuickMessage { "QuickMessage2", N_("Follow me.") }, + QuickMessage { "QuickMessage3", N_("Here's something for you.") }, + QuickMessage { "QuickMessage4", N_("Now you DIE!") }, + QuickMessage { "QuickMessage5", N_("Heal yourself!") }, + QuickMessage { "QuickMessage6", N_("Watch out!") }, + QuickMessage { "QuickMessage7", N_("Thanks.") }, + QuickMessage { "QuickMessage8", N_("Retreat!") }, + QuickMessage { "QuickMessage9", N_("Sorry.") }, + QuickMessage { "QuickMessage10", N_("I'm waiting.") }, +}; + +} // namespace devilution diff --git a/Source/quick_messages.hpp b/Source/quick_messages.hpp new file mode 100644 index 000000000..a298c84dc --- /dev/null +++ b/Source/quick_messages.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace devilution { + +struct QuickMessage { + /** Config variable names for quick message */ + const char *const key; + /** Default quick message */ + const char *const message; +}; + +extern std::array QuickMessages; + +} // namespace devilution