1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Add configurable damage and defense parameters

This commit is contained in:
Dydzio 2022-12-31 16:25:40 +01:00 committed by Ivan Savenko
parent e8845244f7
commit a83c7eb00f
4 changed files with 30 additions and 3 deletions

View File

@ -26,7 +26,11 @@
"MAX_HEROES_ON_MAP_PER_PLAYER" : 8,
"WINNING_HERO_WITH_NO_TROOPS_RETREATS": true,
"BLACK_MARKET_MONTHLY_ARTIFACTS_CHANGE": true,
"NO_RANDOM_SPECIAL_WEEKS_AND_MONTHS": false
"NO_RANDOM_SPECIAL_WEEKS_AND_MONTHS": false,
"ATTACK_POINT_DMG_MULTIPLIER": 0.05,
"ATTACK_POINTS_DMG_MULTIPLIER_CAP": 4.0,
"DEFENSE_POINT_DMG_MULTIPLIER": 0.025,
"DEFENSE_POINTS_DMG_MULTIPLIER_CAP": 0.7
},
"modules":
{

View File

@ -751,6 +751,14 @@ void CModHandler::loadConfigFromFile (std::string name)
logMod->debug("\tBLACK_MARKET_MONTHLY_ARTIFACTS_CHANGE\t%d", static_cast<int>(settings.BLACK_MARKET_MONTHLY_ARTIFACTS_CHANGE));
settings.NO_RANDOM_SPECIAL_WEEKS_AND_MONTHS = hardcodedFeatures["NO_RANDOM_SPECIAL_WEEKS_AND_MONTHS"].Bool();
logMod->debug("\tNO_RANDOM_SPECIAL_WEEKS_AND_MONTHS\t%d", static_cast<int>(settings.NO_RANDOM_SPECIAL_WEEKS_AND_MONTHS));
settings.ATTACK_POINT_DMG_MULTIPLIER = hardcodedFeatures["ATTACK_POINT_DMG_MULTIPLIER"].Float();
logMod->debug("\tATTACK_POINT_DMG_MULTIPLIER\t%f", settings.ATTACK_POINT_DMG_MULTIPLIER);
settings.ATTACK_POINTS_DMG_MULTIPLIER_CAP = hardcodedFeatures["ATTACK_POINTS_DMG_MULTIPLIER_CAP"].Float();
logMod->debug("\tATTACK_POINTS_DMG_MULTIPLIER_CAP\t%f", settings.ATTACK_POINTS_DMG_MULTIPLIER_CAP);
settings.DEFENSE_POINT_DMG_MULTIPLIER = hardcodedFeatures["DEFENSE_POINT_DMG_MULTIPLIER"].Float();
logMod->debug("\tDEFENSE_POINT_DMG_MULTIPLIER\t%f", settings.DEFENSE_POINT_DMG_MULTIPLIER);
settings.DEFENSE_POINTS_DMG_MULTIPLIER_CAP = hardcodedFeatures["DEFENSE_POINTS_DMG_MULTIPLIER_CAP"].Float();
logMod->debug("\tDEFENSE_POINTS_DMG_MULTIPLIER_CAP\t%f", settings.DEFENSE_POINTS_DMG_MULTIPLIER_CAP);
const JsonNode & gameModules = settings.data["modules"];
modules.STACK_EXP = gameModules["STACK_EXPERIENCE"].Bool();

View File

@ -358,6 +358,10 @@ public:
bool WINNING_HERO_WITH_NO_TROOPS_RETREATS;
bool BLACK_MARKET_MONTHLY_ARTIFACTS_CHANGE;
bool NO_RANDOM_SPECIAL_WEEKS_AND_MONTHS;
double ATTACK_POINT_DMG_MULTIPLIER;
double ATTACK_POINTS_DMG_MULTIPLIER_CAP;
double DEFENSE_POINT_DMG_MULTIPLIER;
double DEFENSE_POINTS_DMG_MULTIPLIER_CAP;
template <typename Handler> void serialize(Handler &h, const int version)
{
@ -373,6 +377,10 @@ public:
h & WINNING_HERO_WITH_NO_TROOPS_RETREATS;
h & BLACK_MARKET_MONTHLY_ARTIFACTS_CHANGE;
h & NO_RANDOM_SPECIAL_WEEKS_AND_MONTHS;
h & ATTACK_POINT_DMG_MULTIPLIER;
h & ATTACK_POINTS_DMG_MULTIPLIER_CAP;
h & DEFENSE_POINT_DMG_MULTIPLIER;
h & DEFENSE_POINTS_DMG_MULTIPLIER_CAP;
}
} settings;

View File

@ -18,6 +18,7 @@
#include "../spells/CSpellHandler.h"
#include "../mapObjects/CGTownInstance.h"
#include "../BattleFieldHandler.h"
#include "../CModHandler.h"
VCMI_LIB_NAMESPACE_BEGIN
@ -802,12 +803,18 @@ TDmgRange CBattleInfoCallback::calculateDmgRange(const BattleAttackInfo & info)
//bonus from attack/defense skills
if(attackDefenceDifference < 0) //decreasing dmg
{
const double dec = std::min(0.025 * (-attackDefenceDifference), 0.7);
double defenseMultiplier = VLC->modh->settings.DEFENSE_POINT_DMG_MULTIPLIER;
double defenseMultiplierCap = VLC->modh->settings.DEFENSE_POINTS_DMG_MULTIPLIER_CAP;
const double dec = std::min(defenseMultiplier * (-attackDefenceDifference), defenseMultiplierCap);
multBonus *= 1.0 - dec;
}
else //increasing dmg
{
const double inc = std::min(0.05 * attackDefenceDifference, 4.0);
double attackMultiplier = VLC->modh->settings.ATTACK_POINT_DMG_MULTIPLIER;
double attackMultiplierCap = VLC->modh->settings.ATTACK_POINTS_DMG_MULTIPLIER_CAP;
const double inc = std::min(attackMultiplier * attackDefenceDifference, attackMultiplierCap);
additiveBonus += inc;
}