diff --git a/hch/CCreatureHandler.cpp b/hch/CCreatureHandler.cpp index 715daf7ea..f4da2c73d 100644 --- a/hch/CCreatureHandler.cpp +++ b/hch/CCreatureHandler.cpp @@ -235,7 +235,7 @@ void CCreatureHandler::loadCreatures() if(boost::algorithm::find_first(ncre.abilityRefs, "const_two_attacks")) ncre.abilities.push_back(makeCreatureAbility(StackFeature::ADDITIONAL_ATTACK, 1)); if(boost::algorithm::find_first(ncre.abilityRefs, "const_free_attack")) - ncre.abilities.push_back(makeCreatureAbility(StackFeature::BLOCKS_RETAILATION, 0)); + ncre.abilities.push_back(makeCreatureAbility(StackFeature::BLOCKS_RETALIATION, 0)); if(boost::algorithm::find_first(ncre.abilityRefs, "IS_UNDEAD")) ncre.abilities.push_back(makeCreatureAbility(StackFeature::UNDEAD, 0)); if(boost::algorithm::find_first(ncre.abilityRefs, "const_no_melee_penalty")) @@ -257,7 +257,7 @@ void CCreatureHandler::loadCreatures() if(boost::algorithm::find_first(ncre.abilityRefs, "CATAPULT")) ncre.abilities.push_back(makeCreatureAbility(StackFeature::CATAPULT, 0)); if(boost::algorithm::find_first(ncre.abilityRefs, "MULTI_HEADED")) - ncre.abilities.push_back(makeCreatureAbility(StackFeature::ATTACKS_ALL_ADAJCENT, 0)); + ncre.abilities.push_back(makeCreatureAbility(StackFeature::ATTACKS_ALL_ADJACENT, 0)); if(boost::algorithm::find_first(ncre.abilityRefs, "IMMUNE_TO_MIND_SPELLS")) { std::vector mindSpells = getMindSpells(); @@ -497,8 +497,8 @@ void CCreatureHandler::loadCreatures() creatures[0].abilities += makeCreatureAbility(StackFeature::CHARGE_IMMUNITY, 0); //pikeman immunity to Champion charge bonus creatures[1].abilities += makeCreatureAbility(StackFeature::CHARGE_IMMUNITY, 0); //halberdier immunity to Champion charge bonus - creatures[4].abilities += makeCreatureAbility(StackFeature::ADDITIONAL_RETAILATION, 1); //griffins retailate twice - creatures[5].abilities += makeCreatureAbility(StackFeature::UNLIMITED_RETAILATIONS, 0); //royal griffins retailate always + creatures[4].abilities += makeCreatureAbility(StackFeature::ADDITIONAL_RETALIATION, 1); //griffins retaliate twice + creatures[5].abilities += makeCreatureAbility(StackFeature::UNLIMITED_RETALIATIONS, 0); //royal griffins retaliate always creatures[12].abilities += makeCreatureAbility(StackFeature::HATE, 0, 54); //angels hate devils creatures[12].abilities += makeCreatureAbility(StackFeature::HATE, 0, 55); //angels hate archdevils creatures[13].abilities += makeCreatureAbility(StackFeature::HATE, 0, 54); //archangels hate devils @@ -531,8 +531,8 @@ void CCreatureHandler::loadCreatures() creatures[37].abilities += makeCreatureAbility(StackFeature::HATE, 0, 52); //master genies hate efreets creatures[37].abilities += makeCreatureAbility(StackFeature::HATE, 0, 53); //master genies hate efreet sultans creatures[37].abilities += makeCreatureAbility(StackFeature::RANDOM_GENIE_SPELLCASTER, 0); //master genies cast spells - creatures[38].abilities += makeCreatureAbility(StackFeature::BLOCKS_RETAILATION, 0); //nagas block retailation - creatures[39].abilities += makeCreatureAbility(StackFeature::BLOCKS_RETAILATION, 0); //naga queens block retailation + creatures[38].abilities += makeCreatureAbility(StackFeature::BLOCKS_RETALIATION, 0); //nagas block retaliation + creatures[39].abilities += makeCreatureAbility(StackFeature::BLOCKS_RETALIATION, 0); //naga queens block retaliation std::vector mindSpells = getMindSpells(); for(int g=0; g stackEffectToFeature(const CStack::StackEffect sf.push_back(featureGenerator(StackFeature::ALWAYS_MAXIMUM_DAMAGE, -1, VLC->spellh->spells[sse.id].powers[sse.level], sse.turnsRemain)); break; case 42: //curse - sf.push_back(featureGenerator(StackFeature::ALWAYS_MINUMUM_DAMAGE, -1, -1 * VLC->spellh->spells[sse.id].powers[sse.level], sse.turnsRemain, sse.level >= 2 ? 20 : 0)); + sf.push_back(featureGenerator(StackFeature::ALWAYS_MINIMUM_DAMAGE, -1, -1 * VLC->spellh->spells[sse.id].powers[sse.level], sse.turnsRemain, sse.level >= 2 ? 20 : 0)); break; case 43: //bloodlust sf.push_back(featureGenerator(StackFeature::ATTACK_BONUS, 0, VLC->spellh->spells[sse.id].powers[sse.level], sse.turnsRemain)); diff --git a/lib/StackFeature.h b/lib/StackFeature.h index de5ae4929..7818d15ac 100644 --- a/lib/StackFeature.h +++ b/lib/StackFeature.h @@ -10,7 +10,7 @@ struct StackFeature VCMI_CREATURE_ABILITY_NAME(SHOOTER) \ VCMI_CREATURE_ABILITY_NAME(CHARGE_IMMUNITY) \ VCMI_CREATURE_ABILITY_NAME(ADDITIONAL_ATTACK) \ - VCMI_CREATURE_ABILITY_NAME(UNLIMITED_RETAILATIONS) \ + VCMI_CREATURE_ABILITY_NAME(UNLIMITED_RETALIATIONS) \ VCMI_CREATURE_ABILITY_NAME(NO_MELEE_PENALTY) \ VCMI_CREATURE_ABILITY_NAME(JOUSTING) /*for champions*/ \ VCMI_CREATURE_ABILITY_NAME(RAISING_MORALE) /*value - how much raises*/ \ @@ -29,12 +29,12 @@ struct StackFeature VCMI_CREATURE_ABILITY_NAME(NO_WALL_PENALTY) \ VCMI_CREATURE_ABILITY_NAME(NON_LIVING) /*eg. gargoyle*/ \ VCMI_CREATURE_ABILITY_NAME(RANDOM_GENIE_SPELLCASTER) /*eg. master genie*/ \ - VCMI_CREATURE_ABILITY_NAME(BLOCKS_RETAILATION) /*eg. naga*/ \ + VCMI_CREATURE_ABILITY_NAME(BLOCKS_RETALIATION) /*eg. naga*/ \ VCMI_CREATURE_ABILITY_NAME(SPELL_IMMUNITY) /*subid - spell id*/ \ VCMI_CREATURE_ABILITY_NAME(MANA_CHANNELING) /*value in %, eg. familiar*/ \ - VCMI_CREATURE_ABILITY_NAME(SPELL_LIKE_ATTACK /*value - spell id; range is taken from spell, but damage from creature; eg. magog*/) \ + VCMI_CREATURE_ABILITY_NAME(SPELL_LIKE_ATTACK) /*value - spell id; range is taken from spell, but damage from creature; eg. magog*/ \ VCMI_CREATURE_ABILITY_NAME(THREE_HEADED_ATTACK) /*eg. cerberus*/ \ - VCMI_CREATURE_ABILITY_NAME(DEAMON_SUMMONING) /*pit lord*/ \ + VCMI_CREATURE_ABILITY_NAME(DAEMON_SUMMONING) /*pit lord*/ \ VCMI_CREATURE_ABILITY_NAME(FIRE_IMMUNITY) \ VCMI_CREATURE_ABILITY_NAME(FIRE_SHIELD) \ VCMI_CREATURE_ABILITY_NAME(ENEMY_MORALE_DECREASING) /*value - how much it decreases*/ \ @@ -50,8 +50,8 @@ struct StackFeature VCMI_CREATURE_ABILITY_NAME(CATAPULT) \ VCMI_CREATURE_ABILITY_NAME(ENEMY_DEFENCE_REDUCTION) /*in % (value) eg. behemots*/ \ VCMI_CREATURE_ABILITY_NAME(GENERAL_DAMAGE_REDUCTION) /*eg. while stoned or blinded - in %, subtype: -1 - any damage, 0 - melee damage, 1 - ranged damage*/ \ - VCMI_CREATURE_ABILITY_NAME(ATTACKS_ALL_ADAJCENT) /*eg. hydra*/ \ - VCMI_CREATURE_ABILITY_NAME(MORE_DAMEGE_FROM_SPELL) /*value - damage increase in %, subtype - spell id*/ \ + VCMI_CREATURE_ABILITY_NAME(ATTACKS_ALL_ADJACENT) /*eg. hydra*/ \ + VCMI_CREATURE_ABILITY_NAME(MORE_DAMAGE_FROM_SPELL) /*value - damage increase in %, subtype - spell id*/ \ VCMI_CREATURE_ABILITY_NAME(CASTS_SPELL_WHEN_KILLED) /*similar to spell after attack*/ \ VCMI_CREATURE_ABILITY_NAME(FEAR) \ VCMI_CREATURE_ABILITY_NAME(FEARLESS) \ @@ -68,10 +68,10 @@ struct StackFeature VCMI_CREATURE_ABILITY_NAME(LUCK_BONUS) \ VCMI_CREATURE_ABILITY_NAME(MORALE_BONUS) \ VCMI_CREATURE_ABILITY_NAME(HYPNOTIZED) \ - VCMI_CREATURE_ABILITY_NAME(ADDITIONAL_RETAILATION) /*value - number of additional retailations*/ \ + VCMI_CREATURE_ABILITY_NAME(ADDITIONAL_RETALIATION) /*value - number of additional retaliations*/ \ VCMI_CREATURE_ABILITY_NAME(MAGIC_MIRROR) /* value - chance of redirecting in %*/ \ VCMI_CREATURE_ABILITY_NAME(SUMMONED) \ - VCMI_CREATURE_ABILITY_NAME(ALWAYS_MINUMUM_DAMAGE) /*unit does its minimum damage from range; subtype: -1 - any attack, 0 - melee, 1 - ranged, value: additional damage, additional info - multiplicative anti-bonus for dmg in % [eg 20 means that creature will inflict 80% of normal dmg]*/ \ + VCMI_CREATURE_ABILITY_NAME(ALWAYS_MINIMUM_DAMAGE) /*unit does its minimum damage from range; subtype: -1 - any attack, 0 - melee, 1 - ranged, value: additional damage, additional info - multiplicative anti-bonus for dmg in % [eg 20 means that creature will inflict 80% of normal dmg]*/ \ VCMI_CREATURE_ABILITY_NAME(ALWAYS_MAXIMUM_DAMAGE) /*eg. bless effect, subtype: -1 - any attack, 0 - melee, 1 - ranged, value: additional damage, additional info - multiplicative bonus for dmg in %*/ \ VCMI_CREATURE_ABILITY_NAME(ATTACKS_NEAREST_CREATURE) /*while in berserk*/ \ VCMI_CREATURE_ABILITY_NAME(IN_FRENZY) /*value - level*/ \ diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 921bd276d..e803a76d2 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -2144,7 +2144,7 @@ bool CGameHandler::makeBattleAction( BattleAction &ba ) sendAndApply(&bat); //counterattack - if(!curStack->hasFeatureOfType(StackFeature::BLOCKS_RETAILATION) + if(!curStack->hasFeatureOfType(StackFeature::BLOCKS_RETALIATION) && stackAtEnd->alive() && stackAtEnd->counterAttacks && !stackAtEnd->hasFeatureOfType(StackFeature::SIEGE_WEAPON)) //TODO: support for multiple retaliatons per turn @@ -2686,4 +2686,4 @@ bool CGameHandler::isAllowedExchange( int id1, int id2 ) void CGameHandler::objectVisited( const CGObjectInstance * obj, const CGHeroInstance * h ) { obj->onHeroVisit(h); -} \ No newline at end of file +}