From 92e3eb38e7cc662524b45f5b1998956d4081b6ab Mon Sep 17 00:00:00 2001 From: laikh Date: Thu, 23 Jan 2020 18:50:13 +0100 Subject: [PATCH 1/3] Fix bcrypt dependency for MINGW build --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c1c5a963f..5925051cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,7 +160,7 @@ if(WIN32) endif(MSVC) if(MINGW) - set(SYSTEM_LIBS ${SYSTEM_LIBS} ole32 oleaut32 ws2_32 mswsock dbghelp) + set(SYSTEM_LIBS ${SYSTEM_LIBS} ole32 oleaut32 ws2_32 mswsock dbghelp bcrypt) # Check for iconv (may be needed for Boost.Locale) include(CheckLibraryExists) From 90e2ab58a8e0e0c77ffc7b15c532b2a7fb2a9d5f Mon Sep 17 00:00:00 2001 From: laikh Date: Thu, 23 Jan 2020 19:46:12 +0100 Subject: [PATCH 2/3] Include header SDL_Compat.h in AdventureMapClasses.cpp --- client/widgets/AdventureMapClasses.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/client/widgets/AdventureMapClasses.cpp b/client/widgets/AdventureMapClasses.cpp index cdc763c3e..39766e2ed 100644 --- a/client/widgets/AdventureMapClasses.cpp +++ b/client/widgets/AdventureMapClasses.cpp @@ -24,6 +24,7 @@ #include "../gui/CGuiHandler.h" #include "../gui/SDL_Pixels.h" +#include "../gui/SDL_Compat.h" #include "../widgets/Images.h" From edc1d06f4ec83f794499fedc2bd9df2b87c21a3f Mon Sep 17 00:00:00 2001 From: laikh Date: Tue, 7 Jul 2020 19:45:53 +0800 Subject: [PATCH 3/3] Random Map Generator Option: Allow having more computer only players than human/computer players Remove unused variable humanPlayersCount and function getHumanOnlyPlayerCount() --- client/lobby/RandomMapTab.cpp | 21 ++++++++++++++++----- client/lobby/RandomMapTab.h | 1 + lib/rmg/CMapGenOptions.cpp | 22 +++------------------- lib/rmg/CMapGenOptions.h | 5 +---- 4 files changed, 21 insertions(+), 28 deletions(-) diff --git a/client/lobby/RandomMapTab.cpp b/client/lobby/RandomMapTab.cpp index dd8b4fca5..730ce0397 100644 --- a/client/lobby/RandomMapTab.cpp +++ b/client/lobby/RandomMapTab.cpp @@ -80,7 +80,10 @@ RandomMapTab::RandomMapTab() { mapGenOptions->setPlayerCount(btnId); deactivateButtonsFrom(groupMaxTeams.get(), btnId); - deactivateButtonsFrom(groupCompOnlyPlayers.get(), btnId); + + // deactive some CompOnlyPlayers buttons to prevent total number of players exceeds PlayerColor::PLAYER_LIMIT_I + deactivateButtonsFrom(groupCompOnlyPlayers.get(), PlayerColor::PLAYER_LIMIT_I - btnId + 1); + validatePlayersCnt(btnId); updateMapInfoByHost(); }); @@ -175,7 +178,14 @@ void RandomMapTab::updateMapInfoByHost() mapInfo->mapHeader->players.clear(); int playersToGen = PlayerColor::PLAYER_LIMIT_I; if(mapGenOptions->getPlayerCount() != CMapGenOptions::RANDOM_SIZE) - playersToGen = mapGenOptions->getPlayerCount(); + { + if(mapGenOptions->getCompOnlyPlayerCount() != CMapGenOptions::RANDOM_SIZE) + playersToGen = mapGenOptions->getPlayerCount() + mapGenOptions->getCompOnlyPlayerCount(); + else + playersToGen = mapGenOptions->getPlayerCount(); + } + + mapInfo->mapHeader->howManyTeams = playersToGen; for(int i = 0; i < playersToGen; ++i) @@ -183,7 +193,7 @@ void RandomMapTab::updateMapInfoByHost() PlayerInfo player; player.isFactionRandom = true; player.canComputerPlay = true; - if(mapGenOptions->getCompOnlyPlayerCount() != CMapGenOptions::RANDOM_SIZE && i >= mapGenOptions->getHumanOnlyPlayerCount()) + if(mapGenOptions->getCompOnlyPlayerCount() != CMapGenOptions::RANDOM_SIZE && i >= mapGenOptions->getPlayerCount()) { player.canHumanPlay = false; } @@ -268,9 +278,10 @@ void RandomMapTab::validatePlayersCnt(int playersCnt) mapGenOptions->setTeamCount(playersCnt - 1); groupMaxTeams->setSelected(mapGenOptions->getTeamCount()); } - if(mapGenOptions->getCompOnlyPlayerCount() >= playersCnt) + // total players should not exceed PlayerColor::PLAYER_LIMIT_I (8 in homm3) + if(mapGenOptions->getCompOnlyPlayerCount() + playersCnt > PlayerColor::PLAYER_LIMIT_I) { - mapGenOptions->setCompOnlyPlayerCount(playersCnt - 1); + mapGenOptions->setCompOnlyPlayerCount(PlayerColor::PLAYER_LIMIT_I - playersCnt); groupCompOnlyPlayers->setSelected(mapGenOptions->getCompOnlyPlayerCount()); } diff --git a/client/lobby/RandomMapTab.h b/client/lobby/RandomMapTab.h index 6d89d2146..f9e9f42b0 100644 --- a/client/lobby/RandomMapTab.h +++ b/client/lobby/RandomMapTab.h @@ -12,6 +12,7 @@ #include "CSelectionBase.h" #include "../../lib/FunctionList.h" +#include "../../lib/GameConstants.h" class CMapGenOptions; class CToggleButton; diff --git a/lib/rmg/CMapGenOptions.cpp b/lib/rmg/CMapGenOptions.cpp index 4de95e678..cb1c9d875 100644 --- a/lib/rmg/CMapGenOptions.cpp +++ b/lib/rmg/CMapGenOptions.cpp @@ -19,7 +19,7 @@ CMapGenOptions::CMapGenOptions() : width(CMapHeader::MAP_SIZE_MIDDLE), height(CMapHeader::MAP_SIZE_MIDDLE), hasTwoLevels(true), - playerCount(RANDOM_SIZE), teamCount(RANDOM_SIZE), compOnlyPlayerCount(RANDOM_SIZE), compOnlyTeamCount(RANDOM_SIZE), humanPlayersCount(0), + playerCount(RANDOM_SIZE), teamCount(RANDOM_SIZE), compOnlyPlayerCount(RANDOM_SIZE), compOnlyTeamCount(RANDOM_SIZE), waterContent(EWaterContent::RANDOM), monsterStrength(EMonsterStrength::RANDOM), mapTemplate(nullptr) { resetPlayersMap(); @@ -71,22 +71,9 @@ void CMapGenOptions::setPlayerCount(si8 value) if (compOnlyPlayerCount > possibleCompPlayersCount) setCompOnlyPlayerCount(possibleCompPlayersCount); - if (getPlayerCount() != RANDOM_SIZE) - { - if (getCompOnlyPlayerCount() != RANDOM_SIZE) - humanPlayersCount = getPlayerCount() - getCompOnlyPlayerCount(); - else - humanPlayersCount = getPlayerCount(); - } - resetPlayersMap(); } -si8 CMapGenOptions::getHumanOnlyPlayerCount() const -{ - return humanPlayersCount; -} - si8 CMapGenOptions::getTeamCount() const { return teamCount; @@ -105,12 +92,9 @@ si8 CMapGenOptions::getCompOnlyPlayerCount() const void CMapGenOptions::setCompOnlyPlayerCount(si8 value) { - assert(value == RANDOM_SIZE || (getPlayerCount() == RANDOM_SIZE || (value >= 0 && value <= getPlayerCount()))); + assert(value == RANDOM_SIZE || (getPlayerCount() == RANDOM_SIZE || (value >= 0 && value <= PlayerColor::PLAYER_LIMIT_I - getPlayerCount()))); compOnlyPlayerCount = value; - if (getPlayerCount() != RANDOM_SIZE && getCompOnlyPlayerCount() != RANDOM_SIZE) - humanPlayersCount = getPlayerCount() - getCompOnlyPlayerCount(); - resetPlayersMap(); } @@ -159,7 +143,7 @@ void CMapGenOptions::resetPlayersMap() players.clear(); - int realPlayersCnt = humanPlayersCount; + int realPlayersCnt = playerCount; int realCompOnlyPlayersCnt = (compOnlyPlayerCount == RANDOM_SIZE) ? (PlayerColor::PLAYER_LIMIT_I - realPlayersCnt) : compOnlyPlayerCount; int totalPlayersLimit = realPlayersCnt + realCompOnlyPlayersCnt; if (getPlayerCount() == RANDOM_SIZE || compOnlyPlayerCount == RANDOM_SIZE) diff --git a/lib/rmg/CMapGenOptions.h b/lib/rmg/CMapGenOptions.h index 41b9c90e1..68c58517b 100644 --- a/lib/rmg/CMapGenOptions.h +++ b/lib/rmg/CMapGenOptions.h @@ -109,8 +109,6 @@ public: si8 getPlayerCount() const; void setPlayerCount(si8 value); - si8 getHumanOnlyPlayerCount() const; - /// The count of the teams ranging from 0 to or RANDOM_SIZE for random. si8 getTeamCount() const; void setTeamCount(si8 value); @@ -166,7 +164,7 @@ private: si32 width, height; bool hasTwoLevels; - si8 playerCount, teamCount, humanPlayersCount, compOnlyPlayerCount, compOnlyTeamCount; + si8 playerCount, teamCount, compOnlyPlayerCount, compOnlyTeamCount; EWaterContent::EWaterContent waterContent; EMonsterStrength::EMonsterStrength monsterStrength; std::map players; @@ -186,7 +184,6 @@ public: h & waterContent; h & monsterStrength; h & players; - h & humanPlayersCount; //TODO add name of template to class, enables selection of a template by a user } };