mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-25 22:42:04 +02:00
rename BattleSpellCastParameters::caster
This commit is contained in:
@@ -571,7 +571,7 @@ void SummonMechanics::applyBattleEffects(const SpellCastEnvironment * env, Battl
|
|||||||
bsa.pos = parameters.cb->getAvaliableHex(creatureToSummon, !(bool)parameters.casterSide); //TODO: unify it
|
bsa.pos = parameters.cb->getAvaliableHex(creatureToSummon, !(bool)parameters.casterSide); //TODO: unify it
|
||||||
|
|
||||||
//TODO stack casting -> probably power will be zero; set the proper number of creatures manually
|
//TODO stack casting -> probably power will be zero; set the proper number of creatures manually
|
||||||
int percentBonus = parameters.caster ? parameters.caster->valOfBonuses(Bonus::SPECIFIC_SPELL_DAMAGE, owner->id.toEnum()) : 0;
|
int percentBonus = parameters.casterHero ? parameters.casterHero->valOfBonuses(Bonus::SPECIFIC_SPELL_DAMAGE, owner->id.toEnum()) : 0;
|
||||||
|
|
||||||
bsa.amount = parameters.usedSpellPower
|
bsa.amount = parameters.usedSpellPower
|
||||||
* owner->getPower(parameters.spellLvl)
|
* owner->getPower(parameters.spellLvl)
|
||||||
|
|||||||
@@ -232,16 +232,16 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
sc.skill = parameters.spellLvl;
|
sc.skill = parameters.spellLvl;
|
||||||
sc.tile = parameters.destination;
|
sc.tile = parameters.destination;
|
||||||
sc.dmgToDisplay = 0;
|
sc.dmgToDisplay = 0;
|
||||||
sc.castedByHero = nullptr != parameters.caster;
|
sc.castedByHero = nullptr != parameters.casterHero;
|
||||||
sc.casterStack = (parameters.casterStack ? parameters.casterStack->ID : -1);
|
sc.casterStack = (parameters.casterStack ? parameters.casterStack->ID : -1);
|
||||||
sc.manaGained = 0;
|
sc.manaGained = 0;
|
||||||
|
|
||||||
int spellCost = 0;
|
int spellCost = 0;
|
||||||
|
|
||||||
//calculate spell cost
|
//calculate spell cost
|
||||||
if(parameters.caster)
|
if(parameters.casterHero)
|
||||||
{
|
{
|
||||||
spellCost = parameters.cb->battleGetSpellCost(owner, parameters.caster);
|
spellCost = parameters.cb->battleGetSpellCost(owner, parameters.casterHero);
|
||||||
|
|
||||||
if(parameters.secHero && parameters.mode == ECastingMode::HERO_CASTING) //handle mana channel
|
if(parameters.secHero && parameters.mode == ECastingMode::HERO_CASTING) //handle mana channel
|
||||||
{
|
{
|
||||||
@@ -261,7 +261,7 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
//must be vector, as in Chain Lightning order matters
|
//must be vector, as in Chain Lightning order matters
|
||||||
std::vector<const CStack*> attackedCres; //CStack vector is somewhat more suitable than ID vector
|
std::vector<const CStack*> attackedCres; //CStack vector is somewhat more suitable than ID vector
|
||||||
|
|
||||||
auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.casterColor, parameters.spellLvl, parameters.destination, parameters.caster);
|
auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.casterColor, parameters.spellLvl, parameters.destination, parameters.casterHero);
|
||||||
std::copy(creatures.begin(), creatures.end(), std::back_inserter(attackedCres));
|
std::copy(creatures.begin(), creatures.end(), std::back_inserter(attackedCres));
|
||||||
|
|
||||||
for (auto cre : attackedCres)
|
for (auto cre : attackedCres)
|
||||||
@@ -292,12 +292,12 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
env->sendAndApply(&sc);
|
env->sendAndApply(&sc);
|
||||||
|
|
||||||
//spend mana
|
//spend mana
|
||||||
if(parameters.caster)
|
if(parameters.casterHero)
|
||||||
{
|
{
|
||||||
SetMana sm;
|
SetMana sm;
|
||||||
sm.absolute = false;
|
sm.absolute = false;
|
||||||
|
|
||||||
sm.hid = parameters.caster->id;
|
sm.hid = parameters.casterHero->id;
|
||||||
sm.val = -spellCost;
|
sm.val = -spellCost;
|
||||||
|
|
||||||
env->sendAndApply(&sm);
|
env->sendAndApply(&sm);
|
||||||
@@ -355,9 +355,9 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
mirrorParameters.spellLvl = 0;
|
mirrorParameters.spellLvl = 0;
|
||||||
mirrorParameters.casterSide = 1-parameters.casterSide;
|
mirrorParameters.casterSide = 1-parameters.casterSide;
|
||||||
mirrorParameters.casterColor = (attackedCre)->owner;
|
mirrorParameters.casterColor = (attackedCre)->owner;
|
||||||
mirrorParameters.caster = nullptr;
|
mirrorParameters.casterHero = nullptr;
|
||||||
mirrorParameters.destination = targetHex;
|
mirrorParameters.destination = targetHex;
|
||||||
mirrorParameters.secHero = parameters.caster;
|
mirrorParameters.secHero = parameters.casterHero;
|
||||||
mirrorParameters.mode = ECastingMode::MAGIC_MIRROR;
|
mirrorParameters.mode = ECastingMode::MAGIC_MIRROR;
|
||||||
mirrorParameters.casterStack = (attackedCre);
|
mirrorParameters.casterStack = (attackedCre);
|
||||||
mirrorParameters.selectedStack = nullptr;
|
mirrorParameters.selectedStack = nullptr;
|
||||||
@@ -533,7 +533,7 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment * env,
|
|||||||
if(spellDamage)
|
if(spellDamage)
|
||||||
bsa.damageAmount = spellDamage >> chainLightningModifier;
|
bsa.damageAmount = spellDamage >> chainLightningModifier;
|
||||||
else
|
else
|
||||||
bsa.damageAmount = owner->calculateDamage(parameters.caster, attackedCre, parameters.spellLvl, parameters.usedSpellPower) >> chainLightningModifier;
|
bsa.damageAmount = owner->calculateDamage(parameters.casterHero, attackedCre, parameters.spellLvl, parameters.usedSpellPower) >> chainLightningModifier;
|
||||||
|
|
||||||
ctx.sc.dmgToDisplay += bsa.damageAmount;
|
ctx.sc.dmgToDisplay += bsa.damageAmount;
|
||||||
|
|
||||||
@@ -561,7 +561,7 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment * env,
|
|||||||
Bonus pseudoBonus;
|
Bonus pseudoBonus;
|
||||||
pseudoBonus.sid = owner->id;
|
pseudoBonus.sid = owner->id;
|
||||||
pseudoBonus.val = parameters.spellLvl;
|
pseudoBonus.val = parameters.spellLvl;
|
||||||
pseudoBonus.turnsRemain = calculateDuration(parameters.caster, stackSpellPower ? stackSpellPower : parameters.usedSpellPower);
|
pseudoBonus.turnsRemain = calculateDuration(parameters.casterHero, stackSpellPower ? stackSpellPower : parameters.usedSpellPower);
|
||||||
CStack::stackEffectToFeature(sse.effect, pseudoBonus);
|
CStack::stackEffectToFeature(sse.effect, pseudoBonus);
|
||||||
if(owner->id == SpellID::SHIELD || owner->id == SpellID::AIR_SHIELD)
|
if(owner->id == SpellID::SHIELD || owner->id == SpellID::AIR_SHIELD)
|
||||||
{
|
{
|
||||||
@@ -572,8 +572,8 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment * env,
|
|||||||
sse.effect.back().additionalInfo = parameters.casterStack->ID; //we need to know who casted Bind
|
sse.effect.back().additionalInfo = parameters.casterStack->ID; //we need to know who casted Bind
|
||||||
}
|
}
|
||||||
const Bonus * bonus = nullptr;
|
const Bonus * bonus = nullptr;
|
||||||
if(parameters.caster)
|
if(parameters.casterHero)
|
||||||
bonus = parameters.caster->getBonusLocalFirst(Selector::typeSubtype(Bonus::SPECIAL_PECULIAR_ENCHANT, owner->id));
|
bonus = parameters.casterHero->getBonusLocalFirst(Selector::typeSubtype(Bonus::SPECIAL_PECULIAR_ENCHANT, owner->id));
|
||||||
//TODO does hero specialty should affects his stack casting spells?
|
//TODO does hero specialty should affects his stack casting spells?
|
||||||
|
|
||||||
si32 power = 0;
|
si32 power = 0;
|
||||||
@@ -618,9 +618,9 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment * env,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (parameters.caster && parameters.caster->hasBonusOfType(Bonus::SPECIAL_BLESS_DAMAGE, owner->id)) //TODO: better handling of bonus percentages
|
if (parameters.casterHero && parameters.casterHero->hasBonusOfType(Bonus::SPECIAL_BLESS_DAMAGE, owner->id)) //TODO: better handling of bonus percentages
|
||||||
{
|
{
|
||||||
int damagePercent = parameters.caster->level * parameters.caster->valOfBonuses(Bonus::SPECIAL_BLESS_DAMAGE, owner->id.toEnum()) / tier;
|
int damagePercent = parameters.casterHero->level * parameters.casterHero->valOfBonuses(Bonus::SPECIAL_BLESS_DAMAGE, owner->id.toEnum()) / tier;
|
||||||
Bonus specialBonus = CStack::featureGenerator(Bonus::CREATURE_DAMAGE, 0, damagePercent, pseudoBonus.turnsRemain);
|
Bonus specialBonus = CStack::featureGenerator(Bonus::CREATURE_DAMAGE, 0, damagePercent, pseudoBonus.turnsRemain);
|
||||||
specialBonus.valType = Bonus::PERCENT_TO_ALL;
|
specialBonus.valType = Bonus::PERCENT_TO_ALL;
|
||||||
specialBonus.sid = owner->id;
|
specialBonus.sid = owner->id;
|
||||||
@@ -667,7 +667,7 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment * env,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
hi.healedHP = calculateHealedHP(parameters.caster, attackedCre, parameters.selectedStack); //Casted by hero
|
hi.healedHP = calculateHealedHP(parameters.casterHero, attackedCre, parameters.selectedStack); //Casted by hero
|
||||||
hi.lowLevelResurrection = (parameters.spellLvl <= 1) && (owner->id != SpellID::ANIMATE_DEAD);
|
hi.lowLevelResurrection = (parameters.spellLvl <= 1) && (owner->id != SpellID::ANIMATE_DEAD);
|
||||||
shr.healedStacks.push_back(hi);
|
shr.healedStacks.push_back(hi);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ namespace SpellConfig
|
|||||||
}
|
}
|
||||||
|
|
||||||
BattleSpellCastParameters::BattleSpellCastParameters(const BattleInfo* cb)
|
BattleSpellCastParameters::BattleSpellCastParameters(const BattleInfo* cb)
|
||||||
: spellLvl(0), destination(BattleHex::INVALID), casterSide(0),casterColor(PlayerColor::CANNOT_DETERMINE),caster(nullptr), secHero(nullptr),
|
: spellLvl(0), destination(BattleHex::INVALID), casterSide(0),casterColor(PlayerColor::CANNOT_DETERMINE),casterHero(nullptr), secHero(nullptr),
|
||||||
usedSpellPower(0),mode(ECastingMode::HERO_CASTING), casterStack(nullptr), selectedStack(nullptr), cb(cb)
|
usedSpellPower(0),mode(ECastingMode::HERO_CASTING), casterStack(nullptr), selectedStack(nullptr), cb(cb)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public:
|
|||||||
BattleHex destination;
|
BattleHex destination;
|
||||||
ui8 casterSide;
|
ui8 casterSide;
|
||||||
PlayerColor casterColor;
|
PlayerColor casterColor;
|
||||||
const CGHeroInstance * caster;
|
const CGHeroInstance * casterHero; //deprecated
|
||||||
const CGHeroInstance * secHero;
|
const CGHeroInstance * secHero;
|
||||||
int usedSpellPower;
|
int usedSpellPower;
|
||||||
ECastingMode::ECastingMode mode;
|
ECastingMode::ECastingMode mode;
|
||||||
|
|||||||
@@ -3881,7 +3881,7 @@ bool CGameHandler::makeBattleAction( BattleAction &ba )
|
|||||||
p.mode = ECastingMode::CREATURE_ACTIVE_CASTING;
|
p.mode = ECastingMode::CREATURE_ACTIVE_CASTING;
|
||||||
p.destination = destination;
|
p.destination = destination;
|
||||||
p.casterColor = stack->owner;
|
p.casterColor = stack->owner;
|
||||||
p.caster = nullptr;
|
p.casterHero = nullptr;
|
||||||
p.usedSpellPower = 0;
|
p.usedSpellPower = 0;
|
||||||
p.casterStack = stack;
|
p.casterStack = stack;
|
||||||
p.selectedStack = nullptr;
|
p.selectedStack = nullptr;
|
||||||
@@ -4081,7 +4081,7 @@ bool CGameHandler::makeCustomAction( BattleAction &ba )
|
|||||||
parameters.destination = ba.destinationTile;
|
parameters.destination = ba.destinationTile;
|
||||||
parameters.casterSide = ba.side;
|
parameters.casterSide = ba.side;
|
||||||
parameters.casterColor = h->tempOwner;
|
parameters.casterColor = h->tempOwner;
|
||||||
parameters.caster = h;
|
parameters.casterHero = h;
|
||||||
parameters.secHero = secondHero;
|
parameters.secHero = secondHero;
|
||||||
|
|
||||||
parameters.usedSpellPower = h->getPrimSkillLevel(PrimarySkill::SPELL_POWER);
|
parameters.usedSpellPower = h->getPrimSkillLevel(PrimarySkill::SPELL_POWER);
|
||||||
@@ -4953,7 +4953,7 @@ void CGameHandler::attackCasting(const BattleAttack & bat, Bonus::BonusType atta
|
|||||||
parameters.destination = destination;
|
parameters.destination = destination;
|
||||||
parameters.casterSide = !attacker->attackerOwned;
|
parameters.casterSide = !attacker->attackerOwned;
|
||||||
parameters.casterColor = attacker->owner;
|
parameters.casterColor = attacker->owner;
|
||||||
parameters.caster = nullptr;
|
parameters.casterHero = nullptr;
|
||||||
parameters.secHero = nullptr;
|
parameters.secHero = nullptr;
|
||||||
|
|
||||||
parameters.usedSpellPower = 0;
|
parameters.usedSpellPower = 0;
|
||||||
@@ -4988,7 +4988,7 @@ void CGameHandler::handleAfterAttackCasting( const BattleAttack & bat )
|
|||||||
parameters.destination = gs->curB->battleGetStackByID(bat.bsa.at(0).stackAttacked)->position;
|
parameters.destination = gs->curB->battleGetStackByID(bat.bsa.at(0).stackAttacked)->position;
|
||||||
parameters.casterSide = !attacker->attackerOwned;
|
parameters.casterSide = !attacker->attackerOwned;
|
||||||
parameters.casterColor = attacker->owner;
|
parameters.casterColor = attacker->owner;
|
||||||
parameters.caster = nullptr;
|
parameters.casterHero = nullptr;
|
||||||
parameters.secHero = nullptr;
|
parameters.secHero = nullptr;
|
||||||
|
|
||||||
parameters.usedSpellPower = power;
|
parameters.usedSpellPower = power;
|
||||||
@@ -5298,7 +5298,7 @@ void CGameHandler::runBattle()
|
|||||||
parameters.destination = BattleHex::INVALID;
|
parameters.destination = BattleHex::INVALID;
|
||||||
parameters.casterSide = i;
|
parameters.casterSide = i;
|
||||||
parameters.casterColor = h->tempOwner;
|
parameters.casterColor = h->tempOwner;
|
||||||
parameters.caster = nullptr;
|
parameters.casterHero = nullptr;
|
||||||
parameters.secHero = gs->curB->battleGetFightingHero(1-i);
|
parameters.secHero = gs->curB->battleGetFightingHero(1-i);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user