mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-03 00:46:55 +02:00
Formatting & cleanup
This commit is contained in:
@ -134,7 +134,7 @@ class DefaultSpellMechanics: public ISpellMechanics
|
|||||||
public:
|
public:
|
||||||
DefaultSpellMechanics(CSpell * s): ISpellMechanics(s){};
|
DefaultSpellMechanics(CSpell * s): ISpellMechanics(s){};
|
||||||
|
|
||||||
std::vector<BattleHex> rangeInHexes(BattleHex centralHex, ui8 schoolLvl, ui8 side, bool *outDroppedHexes = nullptr) const override;
|
std::vector<BattleHex> rangeInHexes(BattleHex centralHex, ui8 schoolLvl, ui8 side, bool * outDroppedHexes = nullptr) const override;
|
||||||
std::set<const CStack *> getAffectedStacks(SpellTargetingContext & ctx) const override;
|
std::set<const CStack *> getAffectedStacks(SpellTargetingContext & ctx) const override;
|
||||||
|
|
||||||
ESpellCastProblem::ESpellCastProblem isImmuneByStack(const CGHeroInstance * caster, const CStack * obj) const override;
|
ESpellCastProblem::ESpellCastProblem isImmuneByStack(const CGHeroInstance * caster, const CStack * obj) const override;
|
||||||
@ -264,7 +264,7 @@ ISpellMechanics::ISpellMechanics(CSpell * s):
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ISpellMechanics * ISpellMechanics::createMechanics(CSpell* s)
|
ISpellMechanics * ISpellMechanics::createMechanics(CSpell * s)
|
||||||
{
|
{
|
||||||
switch (s->id)
|
switch (s->id)
|
||||||
{
|
{
|
||||||
@ -325,16 +325,16 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
sc.spellCost = 0;
|
sc.spellCost = 0;
|
||||||
|
|
||||||
//calculate spell cost
|
//calculate spell cost
|
||||||
if (parameters.caster)
|
if(parameters.caster)
|
||||||
{
|
{
|
||||||
sc.spellCost = parameters.cb->battleGetSpellCost(owner, parameters.caster);
|
sc.spellCost = parameters.cb->battleGetSpellCost(owner, parameters.caster);
|
||||||
|
|
||||||
if (parameters.secHero && parameters.mode == ECastingMode::HERO_CASTING) //handle mana channel
|
if(parameters.secHero && parameters.mode == ECastingMode::HERO_CASTING) //handle mana channel
|
||||||
{
|
{
|
||||||
int manaChannel = 0;
|
int manaChannel = 0;
|
||||||
for(const CStack * stack : parameters.cb->battleGetAllStacks(true)) //TODO: shouldn't bonus system handle it somehow?
|
for(const CStack * stack : parameters.cb->battleGetAllStacks(true)) //TODO: shouldn't bonus system handle it somehow?
|
||||||
{
|
{
|
||||||
if (stack->owner == parameters.secHero->tempOwner)
|
if(stack->owner == parameters.secHero->tempOwner)
|
||||||
{
|
{
|
||||||
vstd::amax(manaChannel, stack->valOfBonuses(Bonus::MANA_CHANNELING));
|
vstd::amax(manaChannel, stack->valOfBonuses(Bonus::MANA_CHANNELING));
|
||||||
}
|
}
|
||||||
@ -353,7 +353,7 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
|
|
||||||
for (auto cre : attackedCres)
|
for (auto cre : attackedCres)
|
||||||
{
|
{
|
||||||
sc.affectedCres.insert (cre->ID);
|
sc.affectedCres.insert(cre->ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
//checking if creatures resist
|
//checking if creatures resist
|
||||||
@ -374,15 +374,6 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
StacksInjured si;
|
StacksInjured si;
|
||||||
SpellCastContext ctx(attackedCres, sc, si);
|
SpellCastContext ctx(attackedCres, sc, si);
|
||||||
|
|
||||||
//TODO: extract dmg to display calculation
|
|
||||||
//calculating dmg to display
|
|
||||||
if (owner->id == SpellID::DEATH_STARE || owner->id == SpellID::ACID_BREATH_DAMAGE)
|
|
||||||
{
|
|
||||||
sc.dmgToDisplay = parameters.usedSpellPower;
|
|
||||||
if (owner->id == SpellID::DEATH_STARE)
|
|
||||||
vstd::amin(sc.dmgToDisplay, (*attackedCres.begin())->count); //stack is already reduced after attack
|
|
||||||
}
|
|
||||||
|
|
||||||
applyBattleEffects(env, parameters, ctx);
|
applyBattleEffects(env, parameters, ctx);
|
||||||
|
|
||||||
env->sendAndApply(&sc);
|
env->sendAndApply(&sc);
|
||||||
@ -404,7 +395,7 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Magic Mirror effect
|
//Magic Mirror effect
|
||||||
if (owner->isNegative() && parameters.mode != ECastingMode::MAGIC_MIRROR && owner->level && owner->getLevelInfo(0).range == "0") //it is actual spell and can be reflected to single target, no recurrence
|
if(owner->isNegative() && parameters.mode != ECastingMode::MAGIC_MIRROR && owner->level && owner->getLevelInfo(0).range == "0") //it is actual spell and can be reflected to single target, no recurrence
|
||||||
{
|
{
|
||||||
for(auto & attackedCre : attackedCres)
|
for(auto & attackedCre : attackedCres)
|
||||||
{
|
{
|
||||||
@ -413,7 +404,7 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
{
|
{
|
||||||
std::vector<const CStack *> mirrorTargets;
|
std::vector<const CStack *> mirrorTargets;
|
||||||
auto battleStacks = parameters.cb->battleGetAllStacks(true);
|
auto battleStacks = parameters.cb->battleGetAllStacks(true);
|
||||||
for (auto & battleStack : battleStacks)
|
for(auto & battleStack : battleStacks)
|
||||||
{
|
{
|
||||||
if(battleStack->owner == parameters.casterColor) //get enemy stacks which can be affected by this spell
|
if(battleStack->owner == parameters.casterColor) //get enemy stacks which can be affected by this spell
|
||||||
{
|
{
|
||||||
@ -421,7 +412,7 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
mirrorTargets.push_back(battleStack);
|
mirrorTargets.push_back(battleStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!mirrorTargets.empty())
|
if(!mirrorTargets.empty())
|
||||||
{
|
{
|
||||||
int targetHex = (*RandomGeneratorUtil::nextItem(mirrorTargets, env->getRandomGenerator()))->position;
|
int targetHex = (*RandomGeneratorUtil::nextItem(mirrorTargets, env->getRandomGenerator()))->position;
|
||||||
|
|
||||||
@ -443,7 +434,7 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int DefaultSpellMechanics::calculateDuration(const CGHeroInstance* caster, int usedSpellPower) const
|
int DefaultSpellMechanics::calculateDuration(const CGHeroInstance * caster, int usedSpellPower) const
|
||||||
{
|
{
|
||||||
if(!caster)
|
if(!caster)
|
||||||
{
|
{
|
||||||
@ -462,18 +453,16 @@ int DefaultSpellMechanics::calculateDuration(const CGHeroInstance* caster, int u
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment* env, BattleSpellCastParameters& parameters, SpellCastContext & ctx) const
|
void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment* env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const
|
||||||
{
|
{
|
||||||
//TODO:applying effects
|
|
||||||
|
|
||||||
//applying effects
|
//applying effects
|
||||||
if (owner->isOffensiveSpell())
|
if(owner->isOffensiveSpell())
|
||||||
{
|
{
|
||||||
int spellDamage = 0;
|
int spellDamage = 0;
|
||||||
if (parameters.casterStack && parameters.mode != ECastingMode::MAGIC_MIRROR)
|
if(parameters.casterStack && parameters.mode != ECastingMode::MAGIC_MIRROR)
|
||||||
{
|
{
|
||||||
int unitSpellPower = parameters.casterStack->valOfBonuses(Bonus::SPECIFIC_SPELL_POWER, owner->id.toEnum());
|
int unitSpellPower = parameters.casterStack->valOfBonuses(Bonus::SPECIFIC_SPELL_POWER, owner->id.toEnum());
|
||||||
if (unitSpellPower)
|
if(unitSpellPower)
|
||||||
ctx.sc.dmgToDisplay = spellDamage = parameters.casterStack->count * unitSpellPower; //TODO: handle immunities
|
ctx.sc.dmgToDisplay = spellDamage = parameters.casterStack->count * unitSpellPower; //TODO: handle immunities
|
||||||
else //Faerie Dragon
|
else //Faerie Dragon
|
||||||
{
|
{
|
||||||
@ -488,14 +477,14 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment* env,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
BattleStackAttacked bsa;
|
BattleStackAttacked bsa;
|
||||||
if ((parameters.destination > -1 && (attackedCre)->coversPos(parameters.destination)) || (owner->getLevelInfo(parameters.spellLvl).range == "X" || parameters.mode == ECastingMode::ENCHANTER_CASTING))
|
if((parameters.destination > -1 && (attackedCre)->coversPos(parameters.destination)) || (owner->getLevelInfo(parameters.spellLvl).range == "X" || parameters.mode == ECastingMode::ENCHANTER_CASTING))
|
||||||
//display effect only upon primary target of area spell
|
//display effect only upon primary target of area spell
|
||||||
//FIXME: if no stack is attacked, there is no animation and interface freezes
|
//FIXME: if no stack is attacked, there is no animation and interface freezes
|
||||||
{
|
{
|
||||||
bsa.flags |= BattleStackAttacked::EFFECT;
|
bsa.flags |= BattleStackAttacked::EFFECT;
|
||||||
bsa.effect = owner->mainEffectAnim;
|
bsa.effect = owner->mainEffectAnim;
|
||||||
}
|
}
|
||||||
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.caster, attackedCre, parameters.spellLvl, parameters.usedSpellPower) >> chainLightningModifier;
|
||||||
@ -503,22 +492,22 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment* env,
|
|||||||
ctx.sc.dmgToDisplay += bsa.damageAmount;
|
ctx.sc.dmgToDisplay += bsa.damageAmount;
|
||||||
|
|
||||||
bsa.stackAttacked = (attackedCre)->ID;
|
bsa.stackAttacked = (attackedCre)->ID;
|
||||||
if (parameters.mode == ECastingMode::ENCHANTER_CASTING) //multiple damage spells cast
|
if(parameters.mode == ECastingMode::ENCHANTER_CASTING) //multiple damage spells cast
|
||||||
bsa.attackerID = parameters.casterStack->ID;
|
bsa.attackerID = parameters.casterStack->ID;
|
||||||
else
|
else
|
||||||
bsa.attackerID = -1;
|
bsa.attackerID = -1;
|
||||||
(attackedCre)->prepareAttacked(bsa, env->getRandomGenerator());
|
(attackedCre)->prepareAttacked(bsa, env->getRandomGenerator());
|
||||||
ctx.si.stacks.push_back(bsa);
|
ctx.si.stacks.push_back(bsa);
|
||||||
|
|
||||||
if (owner->id == SpellID::CHAIN_LIGHTNING)
|
if(owner->id == SpellID::CHAIN_LIGHTNING)
|
||||||
++chainLightningModifier;
|
++chainLightningModifier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (owner->hasEffects())
|
if(owner->hasEffects())
|
||||||
{
|
{
|
||||||
int stackSpellPower = 0;
|
int stackSpellPower = 0;
|
||||||
if (parameters.casterStack && parameters.mode != ECastingMode::MAGIC_MIRROR)
|
if(parameters.casterStack && parameters.mode != ECastingMode::MAGIC_MIRROR)
|
||||||
{
|
{
|
||||||
stackSpellPower = parameters.casterStack->valOfBonuses(Bonus::CREATURE_ENCHANT_POWER);
|
stackSpellPower = parameters.casterStack->valOfBonuses(Bonus::CREATURE_ENCHANT_POWER);
|
||||||
}
|
}
|
||||||
@ -528,16 +517,16 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment* env,
|
|||||||
pseudoBonus.val = parameters.spellLvl;
|
pseudoBonus.val = parameters.spellLvl;
|
||||||
pseudoBonus.turnsRemain = calculateDuration(parameters.caster, stackSpellPower ? stackSpellPower : parameters.usedSpellPower);
|
pseudoBonus.turnsRemain = calculateDuration(parameters.caster, 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)
|
||||||
{
|
{
|
||||||
sse.effect.back().val = (100 - sse.effect.back().val); //fix to original config: shield should display damage reduction
|
sse.effect.back().val = (100 - sse.effect.back().val); //fix to original config: shield should display damage reduction
|
||||||
}
|
}
|
||||||
if (owner->id == SpellID::BIND && parameters.casterStack)//bind
|
if(owner->id == SpellID::BIND && parameters.casterStack)//bind
|
||||||
{
|
{
|
||||||
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.caster)
|
||||||
bonus = parameters.caster->getBonusLocalFirst(Selector::typeSubtype(Bonus::SPECIAL_PECULIAR_ENCHANT, owner->id));
|
bonus = parameters.caster->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?
|
||||||
|
|
||||||
@ -550,7 +539,7 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment* env,
|
|||||||
|
|
||||||
//Apply hero specials - peculiar enchants
|
//Apply hero specials - peculiar enchants
|
||||||
const ui8 tier = std::max((ui8)1, affected->getCreature()->level); //don't divide by 0 for certain creatures (commanders, war machines)
|
const ui8 tier = std::max((ui8)1, affected->getCreature()->level); //don't divide by 0 for certain creatures (commanders, war machines)
|
||||||
if (bonus)
|
if(bonus)
|
||||||
{
|
{
|
||||||
switch(bonus->additionalInfo)
|
switch(bonus->additionalInfo)
|
||||||
{
|
{
|
||||||
@ -578,7 +567,7 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment* env,
|
|||||||
power = std::max(5 - tier, 0);
|
power = std::max(5 - tier, 0);
|
||||||
Bonus specialBonus = CStack::featureGenerator(Bonus::PRIMARY_SKILL, PrimarySkill::ATTACK, power, pseudoBonus.turnsRemain);
|
Bonus specialBonus = CStack::featureGenerator(Bonus::PRIMARY_SKILL, PrimarySkill::ATTACK, power, pseudoBonus.turnsRemain);
|
||||||
specialBonus.sid = owner->id;
|
specialBonus.sid = owner->id;
|
||||||
sse.uniqueBonuses.push_back (std::pair<ui32,Bonus> (affected->ID, specialBonus)); //additional attack to Slayer effect
|
sse.uniqueBonuses.push_back(std::pair<ui32,Bonus> (affected->ID, specialBonus)); //additional attack to Slayer effect
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -601,10 +590,10 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment* env,
|
|||||||
if(owner->isHealingSpell())
|
if(owner->isHealingSpell())
|
||||||
{
|
{
|
||||||
int hpGained = 0;
|
int hpGained = 0;
|
||||||
if (parameters.casterStack)
|
if(parameters.casterStack)
|
||||||
{
|
{
|
||||||
int unitSpellPower = parameters.casterStack->valOfBonuses(Bonus::SPECIFIC_SPELL_POWER, owner->id.toEnum());
|
int unitSpellPower = parameters.casterStack->valOfBonuses(Bonus::SPECIFIC_SPELL_POWER, owner->id.toEnum());
|
||||||
if (unitSpellPower)
|
if(unitSpellPower)
|
||||||
hpGained = parameters.casterStack->count * unitSpellPower; //Archangel
|
hpGained = parameters.casterStack->count * unitSpellPower; //Archangel
|
||||||
else //Faerie Dragon-like effect - unused so far
|
else //Faerie Dragon-like effect - unused so far
|
||||||
parameters.usedSpellPower = parameters.casterStack->valOfBonuses(Bonus::CREATURE_SPELL_POWER) * parameters.casterStack->count / 100;
|
parameters.usedSpellPower = parameters.casterStack->valOfBonuses(Bonus::CREATURE_SPELL_POWER) * parameters.casterStack->count / 100;
|
||||||
@ -740,7 +729,7 @@ std::set<const CStack *> DefaultSpellMechanics::getAffectedStacks(SpellTargeting
|
|||||||
const CSpell::TargetInfo ti(owner, ctx.schoolLvl, ctx.mode);
|
const CSpell::TargetInfo ti(owner, ctx.schoolLvl, ctx.mode);
|
||||||
|
|
||||||
//TODO: more generic solution for mass spells
|
//TODO: more generic solution for mass spells
|
||||||
if (owner->getLevelInfo(ctx.schoolLvl).range.size() > 1) //custom many-hex range
|
if(owner->getLevelInfo(ctx.schoolLvl).range.size() > 1) //custom many-hex range
|
||||||
{
|
{
|
||||||
for(BattleHex hex : attackedHexes)
|
for(BattleHex hex : attackedHexes)
|
||||||
{
|
{
|
||||||
@ -767,7 +756,7 @@ std::set<const CStack *> DefaultSpellMechanics::getAffectedStacks(SpellTargeting
|
|||||||
|
|
||||||
TStacks stacks = ctx.cb->battleGetStacksIf(predicate);
|
TStacks stacks = ctx.cb->battleGetStacksIf(predicate);
|
||||||
|
|
||||||
if (ti.massive)
|
if(ti.massive)
|
||||||
{
|
{
|
||||||
//for massive spells add all targets
|
//for massive spells add all targets
|
||||||
for (auto stack : stacks)
|
for (auto stack : stacks)
|
||||||
@ -896,15 +885,15 @@ void CloneMechanics::applyBattleEffects(const SpellCastEnvironment * env, Battle
|
|||||||
env->sendAndApply(&ssp);
|
env->sendAndApply(&ssp);
|
||||||
}
|
}
|
||||||
|
|
||||||
ESpellCastProblem::ESpellCastProblem CloneMechanics::isImmuneByStack(const CGHeroInstance* caster, const CStack * obj) const
|
ESpellCastProblem::ESpellCastProblem CloneMechanics::isImmuneByStack(const CGHeroInstance * caster, const CStack * obj) const
|
||||||
{
|
{
|
||||||
//can't clone already cloned creature
|
//can't clone already cloned creature
|
||||||
if (vstd::contains(obj->state, EBattleStackState::CLONED))
|
if(vstd::contains(obj->state, EBattleStackState::CLONED))
|
||||||
return ESpellCastProblem::STACK_IMMUNE_TO_SPELL;
|
return ESpellCastProblem::STACK_IMMUNE_TO_SPELL;
|
||||||
//TODO: how about stacks casting Clone?
|
//TODO: how about stacks casting Clone?
|
||||||
//currently Clone casted by stack is assumed Expert level
|
//currently Clone casted by stack is assumed Expert level
|
||||||
ui8 schoolLevel;
|
ui8 schoolLevel;
|
||||||
if (caster)
|
if(caster)
|
||||||
{
|
{
|
||||||
schoolLevel = caster->getSpellSchoolLevel(owner);
|
schoolLevel = caster->getSpellSchoolLevel(owner);
|
||||||
}
|
}
|
||||||
@ -913,15 +902,15 @@ ESpellCastProblem::ESpellCastProblem CloneMechanics::isImmuneByStack(const CGHer
|
|||||||
schoolLevel = 3;
|
schoolLevel = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (schoolLevel < 3)
|
if(schoolLevel < 3)
|
||||||
{
|
{
|
||||||
int maxLevel = (std::max(schoolLevel, (ui8)1) + 4);
|
int maxLevel = (std::max(schoolLevel, (ui8)1) + 4);
|
||||||
int creLevel = obj->getCreature()->level;
|
int creLevel = obj->getCreature()->level;
|
||||||
if (maxLevel < creLevel) //tier 1-5 for basic, 1-6 for advanced, any level for expert
|
if(maxLevel < creLevel) //tier 1-5 for basic, 1-6 for advanced, any level for expert
|
||||||
return ESpellCastProblem::STACK_IMMUNE_TO_SPELL;
|
return ESpellCastProblem::STACK_IMMUNE_TO_SPELL;
|
||||||
}
|
}
|
||||||
//use default algorithm only if there is no mechanics-related problem
|
//use default algorithm only if there is no mechanics-related problem
|
||||||
return DefaultSpellMechanics::isImmuneByStack(caster,obj);
|
return DefaultSpellMechanics::isImmuneByStack(caster, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
///DeathStareMechnics
|
///DeathStareMechnics
|
||||||
@ -984,7 +973,7 @@ ESpellCastProblem::ESpellCastProblem HypnotizeMechanics::isImmuneByStack(const C
|
|||||||
}
|
}
|
||||||
|
|
||||||
///ObstacleMechanics
|
///ObstacleMechanics
|
||||||
void ObstacleMechanics::applyBattleEffects(const SpellCastEnvironment* env, BattleSpellCastParameters& parameters, SpellCastContext& ctx) const
|
void ObstacleMechanics::applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const
|
||||||
{
|
{
|
||||||
auto placeObstacle = [&, this](BattleHex pos)
|
auto placeObstacle = [&, this](BattleHex pos)
|
||||||
{
|
{
|
||||||
@ -1032,7 +1021,7 @@ void ObstacleMechanics::applyBattleEffects(const SpellCastEnvironment* env, Batt
|
|||||||
env->sendAndApply(&bop);
|
env->sendAndApply(&bop);
|
||||||
};
|
};
|
||||||
|
|
||||||
switch (owner->id)
|
switch(owner->id)
|
||||||
{
|
{
|
||||||
case SpellID::QUICKSAND:
|
case SpellID::QUICKSAND:
|
||||||
case SpellID::LAND_MINE:
|
case SpellID::LAND_MINE:
|
||||||
@ -1073,7 +1062,7 @@ void ObstacleMechanics::applyBattleEffects(const SpellCastEnvironment* env, Batt
|
|||||||
|
|
||||||
|
|
||||||
///WallMechanics
|
///WallMechanics
|
||||||
std::vector<BattleHex> WallMechanics::rangeInHexes(BattleHex centralHex, ui8 schoolLvl, ui8 side, bool* outDroppedHexes) const
|
std::vector<BattleHex> WallMechanics::rangeInHexes(BattleHex centralHex, ui8 schoolLvl, ui8 side, bool * outDroppedHexes) const
|
||||||
{
|
{
|
||||||
using namespace SRSLPraserHelpers;
|
using namespace SRSLPraserHelpers;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user