@ -157,7 +157,6 @@ void InitMonster(Monster &monster, Direction rd, size_t typeIndex, Point positio
monster . toHit = monster . data ( ) . toHit ;
monster . minDamage = monster . data ( ) . minDamage ;
monster . maxDamage = monster . data ( ) . maxDamage ;
monster . toHitSpecial = monster . data ( ) . toHitSpecial ;
monster . minDamageSpecial = monster . data ( ) . minDamageSpecial ;
monster . maxDamageSpecial = monster . data ( ) . maxDamageSpecial ;
monster . armorClass = monster . data ( ) . armorClass ;
@ -184,7 +183,6 @@ void InitMonster(Monster &monster, Direction rd, size_t typeIndex, Point positio
monster . toHit + = NightmareToHitBonus ;
monster . minDamage = 2 * ( monster . minDamage + 2 ) ;
monster . maxDamage = 2 * ( monster . maxDamage + 2 ) ;
monster . toHitSpecial + = NightmareToHitBonus ;
monster . minDamageSpecial = 2 * ( monster . minDamageSpecial + 2 ) ;
monster . maxDamageSpecial = 2 * ( monster . maxDamageSpecial + 2 ) ;
monster . armorClass + = NightmareAcBonus ;
@ -198,7 +196,6 @@ void InitMonster(Monster &monster, Direction rd, size_t typeIndex, Point positio
monster . toHit + = HellToHitBonus ;
monster . minDamage = 4 * monster . minDamage + 6 ;
monster . maxDamage = 4 * monster . maxDamage + 6 ;
monster . toHitSpecial + = HellToHitBonus ;
monster . minDamageSpecial = 4 * monster . minDamageSpecial + 6 ;
monster . maxDamageSpecial = 4 * monster . maxDamageSpecial + 6 ;
monster . armorClass + = HellAcBonus ;
@ -1213,9 +1210,9 @@ void MonsterAttackPlayer(Monster &monster, Player &player, int hit, int minDam,
void MonsterAttackEnemy ( Monster & monster , int hit , int minDam , int maxDam )
{
if ( ( monster . flags & MFLAG_TARGETS_MONSTER ) ! = 0 )
MonsterAttackMonster ( monster , Monsters [ monster . enemy ] , monster . toH it, monster . m inDamage , monster . m axDamage ) ;
MonsterAttackMonster ( monster , Monsters [ monster . enemy ] , h it, minDam , maxDam ) ;
else
MonsterAttackPlayer ( monster , Players [ monster . enemy ] , monster . toH it, monster . m inDamage , monster . m axDamage ) ;
MonsterAttackPlayer ( monster , Players [ monster . enemy ] , h it, minDam , maxDam ) ;
}
bool MonsterAttack ( Monster & monster )
@ -1312,7 +1309,7 @@ bool MonsterRangedSpecialAttack(Monster &monster)
bool MonsterSpecialAttack ( Monster & monster )
{
if ( monster . animInfo . currentFrame = = monster . data ( ) . animFrameNumSpecial - 1 ) {
MonsterAttackEnemy ( monster , monster . toHitSpecial , monster . minDamageSpecial , monster . maxDamageSpecial ) ;
MonsterAttackEnemy ( monster , monster . toHitSpecial ( sgGameInitInfo . nDifficulty ) , monster . minDamageSpecial , monster . maxDamageSpecial ) ;
}
if ( monster . animInfo . isLastFrame ( ) ) {
@ -3154,14 +3151,11 @@ void PrepareUniqueMonst(Monster &monster, UniqueMonsterType monsterType, size_t
if ( uniqueMonsterData . customToHit ! = 0 ) {
monster . toHit = uniqueMonsterData . customToHit ;
monster . toHitSpecial = uniqueMonsterData . customToHit ;
if ( sgGameInitInfo . nDifficulty = = DIFF_NIGHTMARE ) {
monster . toHit + = NightmareToHitBonus ;
monster . toHitSpecial + = NightmareToHitBonus ;
} else if ( sgGameInitInfo . nDifficulty = = DIFF_HELL ) {
monster . toHit + = HellToHitBonus ;
monster . toHitSpecial + = HellToHitBonus ;
}
}
if ( uniqueMonsterData . customArmorClass ! = 0 ) {
@ -4638,4 +4632,20 @@ bool Monster::tryLiftGargoyle()
return false ;
}
unsigned int Monster : : toHitSpecial ( _difficulty difficulty ) const
{
unsigned int baseToHitSpecial = data ( ) . toHitSpecial ;
if ( isUnique ( ) & & UniqueMonstersData [ static_cast < size_t > ( uniqueType ) ] . customToHit ! = 0 ) {
baseToHitSpecial = UniqueMonstersData [ static_cast < size_t > ( uniqueType ) ] . customToHit ;
}
if ( difficulty = = DIFF_NIGHTMARE ) {
baseToHitSpecial + = NightmareToHitBonus ;
} else if ( difficulty = = DIFF_HELL ) {
baseToHitSpecial + = HellToHitBonus ;
}
return baseToHitSpecial ;
}
} // namespace devilution