Fix for maxHP boosts/upgrades

maxHP cannot been boosted anymore( just upgrades!). this has too many
side effects.
maxHP upgrades were calculated based on units current HP which doesn't
make sense.

maxEP cannot been boosted anymore( just upgrades!). this has too many
side effects.

Code is much cleaner and smaller now
This commit is contained in:
titiger 2021-01-02 18:54:03 +01:00
parent d28db00a1a
commit 0f4bc361c6
1 changed files with 50 additions and 101 deletions

View File

@ -1166,121 +1166,70 @@ void TotalUpgrade::sum(const UpgradeTypeBase *ut, const Unit *unit, bool boostMo
prodSpeedIsMultiplier = ut->getProdSpeedIsMultiplier();
attackSpeedIsMultiplier = ut->getAttackSpeedIsMultiplier();
if(ut->getMaxHpIsMultiplier() == true) {
//printf("#1 Maxhp maxHp = %d, unit->getHp() = %d ut->getMaxHp() = %d\n",maxHp,unit->getHp(),ut->getMaxHp());
int newValue = ((double)unit->getHp() * ((double)ut->getMaxHp() / (double)100));
if(boostMode) {
maxHp = newValue;
}
else {
maxHp += newValue;
}
if(ut->getMaxHpRegeneration() != 0) {
newValue = ((double)unit->getType()->getHpRegeneration() + ((double)max(maxHp,unit->getHp()) * ((double)ut->getMaxHpRegeneration() / (double)100)));
if(boostMode) {
maxHpRegeneration = newValue;
}
else {
maxHpRegeneration += newValue;
}
}
//printf("#1.1 Maxhp maxHp = %d, unit->getHp() = %d ut->getMaxHp() = %d\n",maxHp,unit->getHp(),ut->getMaxHp());
}
else {
//printf("#2 Maxhp maxHp = %d, unit->getHp() = %d ut->getMaxHp() = %d\n",maxHp,unit->getHp(),ut->getMaxHp());
int newValue = ut->getMaxHp();
if(boostMode) {
maxHp = newValue;
}
else {
maxHp += newValue;
}
if(ut->getMaxHpRegeneration() != 0) {
newValue = ut->getMaxHpRegeneration();
if(boostMode) {
maxHpRegeneration = newValue;
}
else {
maxHpRegeneration += newValue;
}
{
int upgradeValue;
if (ut->getMaxHpIsMultiplier() == true) {
upgradeValue = ((double) unit->getType()->getMaxHp() * ((double) ut->getMaxHp() / (double) 100));
} else {
upgradeValue = ut->getMaxHp();
}
if (boostMode) {
//no boost for MaxHP. This makes no sense. Just upgrades allowed.
maxHp=0;
} else {
maxHp += upgradeValue;
}
}
if(ut->getMaxEpIsMultiplier() == true) {
int newValue = ((double)unit->getEp() * ((double)ut->getMaxEp() / (double)100));
if(boostMode) {
maxEp = newValue;
}
else {
maxEp += newValue;
}
if(ut->getMaxEpRegeneration() != 0) {
newValue = ((double)unit->getType()->getEpRegeneration() + ((double)max(maxEp,unit->getEp()) * ((double)ut->getMaxEpRegeneration() / (double)100)));
if(boostMode) {
maxEpRegeneration = newValue;
}
else {
maxEpRegeneration += newValue;
}
}
if (ut->getMaxHpRegeneration() != 0) {
// ut->getMaxHpIsMultiplier() is ignored atm! makes no sense to have one switch for 2 values. It's called value-percent-multiplier anyway. If we need it one day the following commented will be handy:
// int newValue = ((double) unit->getType()->getHpRegeneration()
// + ((double) max(maxHp, unit->getHp()) * ((double) ut->getMaxHpRegeneration() / (double) 100)));
maxHpRegeneration+= ut->getMaxHpRegeneration();
}
else {
int newValue = ut->getMaxEp();
if(boostMode) {
maxEp = newValue;
}
else {
maxEp += newValue;
}
if(ut->getMaxEpRegeneration() != 0) {
newValue = ut->getMaxEpRegeneration();
if(boostMode) {
maxEpRegeneration = newValue;
}
else {
maxEpRegeneration += newValue;
}
{
int upgradeValue;
if (ut->getMaxEpIsMultiplier() == true) {
upgradeValue = ((double) unit->getType()->getMaxEp() * ((double) ut->getMaxEp() / (double) 100));
} else {
upgradeValue = ut->getMaxEp();
}
if (boostMode) {
//ignore! no boost for MaxEP. This makes no sense. Just upgrades allowed
maxEp=0;
} else {
maxEp += upgradeValue;
}
}
if(ut->getSightIsMultiplier() == true) {
int newValue = ((double)unit->getType()->getSight() * ((double)ut->getSight() / (double)100));
if(boostMode) {
sight = newValue;
{
int upgradeValue;
if (ut->getSightIsMultiplier() == true) {
upgradeValue = ((double) unit->getType()->getSight() * ((double) ut->getSight() / (double) 100));
} else {
upgradeValue = ut->getSight();
}
else {
sight += newValue;
}
}
else {
int newValue = ut->getSight();
if(boostMode) {
sight = newValue;
}
else {
sight += newValue;
if (boostMode) {
sight = upgradeValue;
} else {
sight += upgradeValue;
}
}
if(ut->getArmorIsMultiplier() == true) {
int newValue = ((double)unit->getType()->getArmor() * ((double)ut->getArmor() / (double)100));
if(boostMode) {
armor = newValue;
{
int upgradeValue;
if (ut->getArmorIsMultiplier() == true) {
upgradeValue = ((double) unit->getType()->getArmor() * ((double) ut->getArmor() / (double) 100));
} else {
upgradeValue = ut->getArmor();
}
else {
armor += newValue;
}
}
else {
int newValue = ut->getArmor();
if(boostMode) {
armor = newValue;
}
else {
armor += newValue;
if (boostMode) {
armor = upgradeValue;
} else {
armor += upgradeValue;
}
}