@ -154,7 +154,7 @@ constexpr char Animletter[7] = "nwahds";
size_t GetNumAnims ( const MonsterData & monsterData )
{
return monsterData . has_s pecial ? 6 : 5 ;
return monsterData . hasS pecial ? 6 : 5 ;
}
bool IsDirectionalAnim ( const CMonster & monster , size_t animIndex )
@ -166,7 +166,7 @@ void InitMonsterTRN(CMonster &monst)
{
char path [ MAX_PATH ] ;
std : : array < uint8_t , 256 > colorTranslations ;
* BufCopy ( path , " Monsters \\ " , monst . data - > Trans File, " .TRN " ) = ' \0 ' ;
* BufCopy ( path , " Monsters \\ " , monst . data - > trn File, " .TRN " ) = ' \0 ' ;
LoadFileInMem ( path , colorTranslations ) ;
std : : replace ( colorTranslations . begin ( ) , colorTranslations . end ( ) , 255 , 0 ) ;
@ -205,8 +205,8 @@ void InitMonster(Monster &monster, Direction rd, int mtype, Point position)
monster . animInfo . tickCounterOfCurrentFrame = GenerateRnd ( monster . animInfo . ticksPerFrame - 1 ) ;
monster . animInfo . currentFrame = GenerateRnd ( monster . animInfo . numberOfFrames - 1 ) ;
monster . level = monster . data ( ) . mL evel;
int maxhp = monster . data ( ) . mMinHP + GenerateRnd ( monster . data ( ) . mMaxHP - monster . data ( ) . mMinHP + 1 ) ;
monster . level = monster . data ( ) . l evel;
int maxhp = monster . data ( ) . hitPointsMinimum + GenerateRnd ( monster . data ( ) . hitPointsMaximum - monster . data ( ) . hitPointsMinimum + 1 ) ;
if ( monster . type ( ) . type = = MT_DIABLO & & ! gbIsHellfire ) {
maxhp / = 2 ;
monster . level - = 15 ;
@ -217,8 +217,8 @@ void InitMonster(Monster &monster, Direction rd, int mtype, Point position)
monster . maxHitPoints = std : : max ( monster . maxHitPoints / 2 , 64 ) ;
monster . hitPoints = monster . maxHitPoints ;
monster . ai = monster . data ( ) . mA i;
monster . intelligence = monster . data ( ) . mInt ;
monster . ai = monster . data ( ) . a i;
monster . intelligence = monster . data ( ) . intelligence ;
monster . goal = MonsterGoal : : Normal ;
monster . goalVar1 = 0 ;
monster . goalVar2 = 0 ;
@ -231,18 +231,18 @@ void InitMonster(Monster &monster, Direction rd, int mtype, Point position)
monster . rndItemSeed = AdvanceRndSeed ( ) ;
monster . aiSeed = AdvanceRndSeed ( ) ;
monster . whoHit = 0 ;
monster . exp = monster . data ( ) . mE xp;
monster . h it = monster . data ( ) . m Hit;
monster . minDamage = monster . data ( ) . mM inDamage ;
monster . maxDamage = monster . data ( ) . mM axDamage ;
monster . hit2 = monster . data ( ) . mHit2 ;
monster . minDamage2 = monster . data ( ) . mMinDamage2 ;
monster . maxDamage2 = monster . data ( ) . mMaxDamage2 ;
monster . armorClass = monster . data ( ) . mA rmorClass;
monster . magicR esistance = monster . data ( ) . mMagicRes ;
monster . exp = monster . data ( ) . e xp;
monster . toH it = monster . data ( ) . to Hit;
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 ( ) . a rmorClass;
monster . r esistance = monster . data ( ) . resistance ;
monster . leader = Monster : : NoLeader ;
monster . leaderRelation = LeaderRelation : : None ;
monster . flags = monster . data ( ) . m Flags;
monster . flags = monster . data ( ) . ability Flags;
monster . talkMsg = TEXT_NONE ;
if ( monster . ai = = AI_GARG ) {
@ -261,12 +261,12 @@ void InitMonster(Monster &monster, Direction rd, int mtype, Point position)
monster . hitPoints = monster . maxHitPoints ;
monster . level + = 15 ;
monster . exp = 2 * ( monster . exp + 1000 ) ;
monster . h it + = NightmareToHitBonus ;
monster . toH it + = NightmareToHitBonus ;
monster . minDamage = 2 * ( monster . minDamage + 2 ) ;
monster . maxDamage = 2 * ( monster . maxDamage + 2 ) ;
monster . hit2 + = NightmareToHitBonus ;
monster . minDamage2 = 2 * ( monster . minDamage2 + 2 ) ;
monster . maxDamage2 = 2 * ( monster . maxDamage2 + 2 ) ;
monster . toHitSpecial + = NightmareToHitBonus ;
monster . minDamageSpecial = 2 * ( monster . minDamageSpecial + 2 ) ;
monster . maxDamageSpecial = 2 * ( monster . maxDamageSpecial + 2 ) ;
monster . armorClass + = NightmareAcBonus ;
} else if ( sgGameInitInfo . nDifficulty = = DIFF_HELL ) {
monster . maxHitPoints = 4 * monster . maxHitPoints ;
@ -277,14 +277,14 @@ void InitMonster(Monster &monster, Direction rd, int mtype, Point position)
monster . hitPoints = monster . maxHitPoints ;
monster . level + = 30 ;
monster . exp = 4 * ( monster . exp + 1000 ) ;
monster . h it + = HellToHitBonus ;
monster . toH it + = HellToHitBonus ;
monster . minDamage = 4 * monster . minDamage + 6 ;
monster . maxDamage = 4 * monster . maxDamage + 6 ;
monster . hit2 + = HellToHitBonus ;
monster . minDamage2 = 4 * monster . minDamage2 + 6 ;
monster . maxDamage2 = 4 * monster . maxDamage2 + 6 ;
monster . toHitSpecial + = HellToHitBonus ;
monster . minDamageSpecial = 4 * monster . minDamageSpecial + 6 ;
monster . maxDamageSpecial = 4 * monster . maxDamageSpecial + 6 ;
monster . armorClass + = HellAcBonus ;
monster . magicR esistance = monster . data ( ) . mMagicRes2 ;
monster . r esistance = monster . data ( ) . resistanceHell ;
}
}
@ -499,7 +499,7 @@ size_t AddMonsterType(_monster_id type, placeflag placeflag)
if ( typeIndex = = LevelMonsterTypeCount ) {
LevelMonsterTypeCount + + ;
LevelMonsterTypes [ typeIndex ] . type = type ;
monstimgtot + = MonstersData [ type ] . mI mage;
monstimgtot + = MonstersData [ type ] . i mage;
InitMonsterGFX ( typeIndex ) ;
InitMonsterSND ( typeIndex ) ;
}
@ -910,7 +910,7 @@ void StartRangedSpecialAttack(Monster &monster, missile_id missileType, int dam)
Direction md = GetMonsterDirection ( monster ) ;
int8_t distributeFramesBeforeFrame = 0 ;
if ( monster . ai = = AI_MEGA )
distributeFramesBeforeFrame = monster . data ( ) . mAFNum2 ;
distributeFramesBeforeFrame = monster . data ( ) . animFrameNumSpecial ;
NewMonsterAnim ( monster , MonsterGraphic : : Special , md , AnimationDistributionFlags : : ProcessAnimationPending , 0 , distributeFramesBeforeFrame ) ;
monster . mode = MonsterMode : : SpecialRangedAttack ;
monster . var1 = missileType ;
@ -1326,9 +1326,9 @@ void MonsterAttackPlayer(int monsterId, int pnum, int hit, int minDam, int maxDa
hper = 1000 ;
# endif
int ac = player . GetArmor ( ) ;
if ( HasAnyOf ( player . pDamAcFlags , ItemSpecialEffectHf : : ACAgainstDemons ) & & monster . data ( ) . mM onstClass = = MonsterClass : : Demon )
if ( HasAnyOf ( player . pDamAcFlags , ItemSpecialEffectHf : : ACAgainstDemons ) & & monster . data ( ) . monster Class = = MonsterClass : : Demon )
ac + = 40 ;
if ( HasAnyOf ( player . pDamAcFlags , ItemSpecialEffectHf : : ACAgainstUndead ) & & monster . data ( ) . mM onstClass = = MonsterClass : : Undead )
if ( HasAnyOf ( player . pDamAcFlags , ItemSpecialEffectHf : : ACAgainstUndead ) & & monster . data ( ) . monster Class = = MonsterClass : : Undead )
ac + = 20 ;
hit + = 2 * ( monster . level - player . _pLevel )
+ 30
@ -1419,17 +1419,17 @@ bool MonsterAttack(int monsterId)
assert ( static_cast < size_t > ( monsterId ) < MaxMonsters ) ;
auto & monster = Monsters [ monsterId ] ;
if ( monster . animInfo . currentFrame = = monster . data ( ) . mA FNum - 1 ) {
MonsterAttackPlayer ( monsterId , monster . enemy , monster . h it, monster . minDamage , monster . maxDamage ) ;
if ( monster . animInfo . currentFrame = = monster . data ( ) . ani mFrame Num - 1 ) {
MonsterAttackPlayer ( monsterId , monster . enemy , monster . toH it, monster . minDamage , monster . maxDamage ) ;
if ( monster . ai ! = AI_SNAKE )
PlayEffect ( monster , 0 ) ;
}
if ( IsAnyOf ( monster . type ( ) . type , MT_NMAGMA , MT_YMAGMA , MT_BMAGMA , MT_WMAGMA ) & & monster . animInfo . currentFrame = = 8 ) {
MonsterAttackPlayer ( monsterId , monster . enemy , monster . h it + 10 , monster . minDamage - 2 , monster . maxDamage - 2 ) ;
MonsterAttackPlayer ( monsterId , monster . enemy , monster . toH it + 10 , monster . minDamage - 2 , monster . maxDamage - 2 ) ;
PlayEffect ( monster , 0 ) ;
}
if ( IsAnyOf ( monster . type ( ) . type , MT_STORM , MT_RSTORM , MT_STORML , MT_MAEL ) & & monster . animInfo . currentFrame = = 12 ) {
MonsterAttackPlayer ( monsterId , monster . enemy , monster . h it - 20 , monster . minDamage + 4 , monster . maxDamage + 4 ) ;
MonsterAttackPlayer ( monsterId , monster . enemy , monster . toH it - 20 , monster . minDamage + 4 , monster . maxDamage + 4 ) ;
PlayEffect ( monster , 0 ) ;
}
if ( monster . ai = = AI_SNAKE & & monster . animInfo . currentFrame = = 0 )
@ -1444,7 +1444,7 @@ bool MonsterAttack(int monsterId)
bool MonsterRangedAttack ( Monster & monster )
{
if ( monster . animInfo . currentFrame = = monster . data ( ) . mA FNum - 1 ) {
if ( monster . animInfo . currentFrame = = monster . data ( ) . ani mFrame Num - 1 ) {
const auto & missileType = static_cast < missile_id > ( monster . var1 ) ;
if ( missileType ! = MIS_NULL ) {
int multimissiles = 1 ;
@ -1478,7 +1478,7 @@ bool MonsterRangedSpecialAttack(int monsterId)
assert ( static_cast < size_t > ( monsterId ) < MaxMonsters ) ;
auto & monster = Monsters [ monsterId ] ;
if ( monster . animInfo . currentFrame = = monster . data ( ) . mAFNum2 - 1 & & monster . animInfo . tickCounterOfCurrentFrame = = 0 & & ( monster . ai ! = AI_MEGA | | monster . var2 = = 0 ) ) {
if ( monster . animInfo . currentFrame = = monster . data ( ) . animFrameNumSpecial - 1 & & monster . animInfo . tickCounterOfCurrentFrame = = 0 & & ( monster . ai ! = AI_MEGA | | monster . var2 = = 0 ) ) {
if ( AddMissile (
monster . position . tile ,
monster . enemyPosition ,
@ -1493,7 +1493,7 @@ bool MonsterRangedSpecialAttack(int monsterId)
}
}
if ( monster . ai = = AI_MEGA & & monster . animInfo . currentFrame = = monster . data ( ) . mAFNum2 - 1 ) {
if ( monster . ai = = AI_MEGA & & monster . animInfo . currentFrame = = monster . data ( ) . animFrameNumSpecial - 1 ) {
if ( monster . var2 + + = = 0 ) {
monster . flags | = MFLAG_ALLOW_SPECIAL ;
} else if ( monster . var2 = = 15 ) {
@ -1514,8 +1514,8 @@ bool MonsterSpecialAttack(int monsterId)
assert ( static_cast < size_t > ( monsterId ) < MaxMonsters ) ;
auto & monster = Monsters [ monsterId ] ;
if ( monster . animInfo . currentFrame = = monster . data ( ) . mAFNum2 - 1 )
MonsterAttackPlayer ( monsterId , monster . enemy , monster . hit2 , monster . minDamage2 , monster . maxDamage2 ) ;
if ( monster . animInfo . currentFrame = = monster . data ( ) . animFrameNumSpecial - 1 )
MonsterAttackPlayer ( monsterId , monster . enemy , monster . toHitSpecial , monster . minDamageSpecial , monster . maxDamageSpecial ) ;
if ( monster . animInfo . currentFrame = = monster . animInfo . numberOfFrames - 1 ) {
M_StartStand ( monster , monster . direction ) ;
@ -1704,7 +1704,7 @@ void MonsterDeath(Monster &monster)
bool MonsterSpecialStand ( Monster & monster )
{
if ( monster . animInfo . currentFrame = = monster . data ( ) . mAFNum2 - 1 )
if ( monster . animInfo . currentFrame = = monster . data ( ) . animFrameNumSpecial - 1 )
PlayEffect ( monster , 3 ) ;
if ( monster . animInfo . currentFrame = = monster . animInfo . numberOfFrames - 1 ) {
@ -1877,8 +1877,8 @@ bool IsTileSafe(const Monster &monster, Point position)
return true ;
}
bool fearsFire = ( monster . magicR esistance & IMMUNE_FIRE ) = = 0 | | monster . type ( ) . type = = MT_DIABLO ;
bool fearsLightning = ( monster . magicR esistance & IMMUNE_LIGHTNING ) = = 0 | | monster . type ( ) . type = = MT_DIABLO ;
bool fearsFire = ( monster . r esistance & IMMUNE_FIRE ) = = 0 | | monster . type ( ) . type = = MT_DIABLO ;
bool fearsLightning = ( monster . r esistance & IMMUNE_LIGHTNING ) = = 0 | | monster . type ( ) . type = = MT_DIABLO ;
for ( auto & missile : Missiles ) {
if ( missile . position . tile = = position ) {
@ -2358,7 +2358,7 @@ void ScavengerAi(int monsterId)
StartEating ( monster ) ;
if ( ( monster . flags & MFLAG_NOHEAL ) = = 0 ) {
if ( gbIsHellfire ) {
int mMaxHP = monster . maxHitPoints ; // BUGFIX use maxHitPoints or we loose health when difficulty isn't normal (fixed)
int mMaxHP = monster . maxHitPoints ; // BUGFIX use hitPointsMaximum or we loose health when difficulty isn't normal (fixed)
monster . hitPoints + = mMaxHP / 8 ;
if ( monster . hitPoints > monster . maxHitPoints )
monster . hitPoints = monster . maxHitPoints ;
@ -2432,7 +2432,7 @@ void RhinoAi(int monsterId)
& & v < 2 * monster . intelligence + 43
& & LineClear ( [ & monster ] ( Point position ) { return IsTileAvailable ( monster , position ) ; } , monster . position . tile , monster . enemyPosition ) ) {
if ( AddMissile ( monster . position . tile , monster . enemyPosition , md , MIS_RHINO , TARGET_PLAYERS , monsterId , 0 , 0 ) ! = nullptr ) {
if ( monster . data ( ) . snd_special )
if ( monster . data ( ) . hasSpecialSound )
PlayEffect ( monster , 3 ) ;
dMonster [ monster . position . tile . x ] [ monster . position . tile . y ] = - ( monsterId + 1 ) ;
monster . mode = MonsterMode : : Charge ;
@ -3231,7 +3231,7 @@ void HorkDemonAi(int monsterId)
string_view GetMonsterTypeText ( const MonsterData & monsterData )
{
switch ( monsterData . mM onstClass ) {
switch ( monsterData . monster Class ) {
case MonsterClass : : Animal :
return _ ( " Animal " ) ;
case MonsterClass : : Demon :
@ -3240,7 +3240,7 @@ string_view GetMonsterTypeText(const MonsterData &monsterData)
return _ ( " Undead " ) ;
}
app_fatal ( StrCat ( " Unknown mM onstClass " , static_cast < int > ( monsterData . mM onstClass ) ) ) ;
app_fatal ( StrCat ( " Unknown monster Class " , static_cast < int > ( monsterData . monster Class ) ) ) ;
}
void ActivateSpawn ( Monster & monster , Point position , Direction dir )
@ -3324,7 +3324,7 @@ bool IsMonsterAvalible(const MonsterData &monsterData)
if ( gbIsSpawn & & monsterData . availability = = MonsterAvailability : : Retail )
return false ;
return currlevel > = monsterData . mM inDLvl & & currlevel < = monsterData . mM axDLvl ;
return currlevel > = monsterData . minDun Lvl & & currlevel < = monsterData . maxDun Lvl ;
}
bool UpdateModeStance ( int monsterId )
@ -3390,7 +3390,7 @@ void PrepareUniqueMonst(Monster &monster, UniqueMonsterType monsterType, int min
if ( uniqueMonsterData . mlevel ! = 0 ) {
monster . level = 2 * uniqueMonsterData . mlevel ;
} else {
monster . level = monster . data ( ) . mL evel + 5 ;
monster . level = monster . data ( ) . l evel + 5 ;
}
monster . exp * = 2 ;
@ -3404,9 +3404,9 @@ void PrepareUniqueMonst(Monster &monster, UniqueMonsterType monsterType, int min
monster . intelligence = uniqueMonsterData . mint ;
monster . minDamage = uniqueMonsterData . mMinDamage ;
monster . maxDamage = uniqueMonsterData . mMaxDamage ;
monster . minDamage2 = uniqueMonsterData . mMinDamage ;
monster . maxDamage2 = uniqueMonsterData . mMaxDamage ;
monster . magicR esistance = uniqueMonsterData . mMagicRes ;
monster . minDamageSpecial = uniqueMonsterData . mMinDamage ;
monster . maxDamageSpecial = uniqueMonsterData . mMaxDamage ;
monster . r esistance = uniqueMonsterData . mMagicRes ;
monster . talkMsg = uniqueMonsterData . mtalkmsg ;
if ( monsterType = = UniqueMonsterType : : HorkDemon )
monster . lightId = NO_LIGHT ; // BUGFIX monsters initial light id should be -1 (fixed)
@ -3436,8 +3436,8 @@ void PrepareUniqueMonst(Monster &monster, UniqueMonsterType monsterType, int min
monster . exp = 2 * ( monster . exp + 1000 ) ;
monster . minDamage = 2 * ( monster . minDamage + 2 ) ;
monster . maxDamage = 2 * ( monster . maxDamage + 2 ) ;
monster . minDamage2 = 2 * ( monster . minDamage2 + 2 ) ;
monster . maxDamage2 = 2 * ( monster . maxDamage2 + 2 ) ;
monster . minDamageSpecial = 2 * ( monster . minDamageSpecial + 2 ) ;
monster . maxDamageSpecial = 2 * ( monster . maxDamageSpecial + 2 ) ;
} else if ( sgGameInitInfo . nDifficulty = = DIFF_HELL ) {
monster . maxHitPoints = 4 * monster . maxHitPoints ;
if ( gbIsHellfire )
@ -3449,23 +3449,23 @@ void PrepareUniqueMonst(Monster &monster, UniqueMonsterType monsterType, int min
monster . exp = 4 * ( monster . exp + 1000 ) ;
monster . minDamage = 4 * monster . minDamage + 6 ;
monster . maxDamage = 4 * monster . maxDamage + 6 ;
monster . minDamage2 = 4 * monster . minDamage2 + 6 ;
monster . maxDamage2 = 4 * monster . maxDamage2 + 6 ;
monster . minDamageSpecial = 4 * monster . minDamageSpecial + 6 ;
monster . maxDamageSpecial = 4 * monster . maxDamageSpecial + 6 ;
}
InitTRNForUniqueMonster ( monster ) ;
monster . uniqTrans = uniquetrans + + ;
if ( uniqueMonsterData . customToHit ! = 0 ) {
monster . h it = uniqueMonsterData . customToHit ;
monster . hit2 = uniqueMonsterData . customToHit ;
monster . toH it = uniqueMonsterData . customToHit ;
monster . toHitSpecial = uniqueMonsterData . customToHit ;
if ( sgGameInitInfo . nDifficulty = = DIFF_NIGHTMARE ) {
monster . h it + = NightmareToHitBonus ;
monster . hit2 + = NightmareToHitBonus ;
monster . toH it + = NightmareToHitBonus ;
monster . toHitSpecial + = NightmareToHitBonus ;
} else if ( sgGameInitInfo . nDifficulty = = DIFF_HELL ) {
monster . h it + = HellToHitBonus ;
monster . hit2 + = HellToHitBonus ;
monster . toH it + = HellToHitBonus ;
monster . toHitSpecial + = HellToHitBonus ;
}
}
if ( uniqueMonsterData . customArmorClass ! = 0 ) {
@ -3574,7 +3574,7 @@ void GetLevelMTypes()
while ( nt > 0 & & LevelMonsterTypeCount < MaxLvlMTypes & & monstimgtot < 4000 ) {
for ( int i = 0 ; i < nt ; ) {
if ( MonstersData [ typelist [ i ] ] . mI mage > 4000 - monstimgtot ) {
if ( MonstersData [ typelist [ i ] ] . i mage > 4000 - monstimgtot ) {
typelist [ i ] = typelist [ - - nt ] ;
continue ;
}
@ -3605,14 +3605,14 @@ void InitMonsterGFX(size_t monsterTypeIndex)
const size_t numAnims = GetNumAnims ( monsterData ) ;
const auto hasAnim = [ & monsterData ] ( size_t i ) {
return monsterData . F rames[ i ] ! = 0 ;
return monsterData . f rames[ i ] ! = 0 ;
} ;
std : : array < uint32_t , MaxAnims > animOffsets ;
if ( ! HeadlessMode ) {
monster . animData = MultiFileLoader < MaxAnims > { } (
numAnims ,
FileNameWithCharAffixGenerator ( { " Monsters \\ " , monsterData . GraphicType } , " .CL2 " , Animletter ) ,
FileNameWithCharAffixGenerator ( { " Monsters \\ " , monsterData . assetsSuffix } , " .CL2 " , Animletter ) ,
animOffsets . data ( ) ,
hasAnim ) ;
}
@ -3625,8 +3625,8 @@ void InitMonsterGFX(size_t monsterTypeIndex)
continue ;
}
anim . frames = monsterData . F rames[ animIndex ] ;
anim . rate = monsterData . R ate[ animIndex ] ;
anim . frames = monsterData . f rames[ animIndex ] ;
anim . rate = monsterData . r ate[ animIndex ] ;
anim . width = width ;
if ( HeadlessMode )
@ -3647,7 +3647,7 @@ void InitMonsterGFX(size_t monsterTypeIndex)
if ( HeadlessMode )
return ;
if ( monsterData . Trans File ! = nullptr ) {
if ( monsterData . trn File ! = nullptr ) {
InitMonsterTRN ( monster ) ;
}
@ -3704,7 +3704,7 @@ void WeakenNaKrul()
Quests [ Q_NAKRUL ] . _qlog = false ;
monster . armorClass - = 50 ;
int hp = monster . maxHitPoints / 2 ;
monster . magicR esistance = 0 ;
monster . r esistance = 0 ;
monster . hitPoints = hp ;
monster . maxHitPoints = hp ;
}
@ -4421,7 +4421,7 @@ void M_FallenFear(Point position)
if ( monster . ai ! = AI_FALLEN | | monster . hitPoints > > 6 < = 0 )
continue ;
int runDistance = std : : max ( ( 8 - monster . data ( ) . mL evel) , 2 ) ;
int runDistance = std : : max ( ( 8 - monster . data ( ) . l evel) , 2 ) ;
monster . goal = MonsterGoal : : Retreat ;
monster . goalVar1 = runDistance ;
monster . goalVar2 = static_cast < int > ( GetDirection ( position , monster . position . tile ) ) ;
@ -4437,8 +4437,8 @@ void PrintMonstHistory(int mt)
}
if ( MonsterKillCounts [ mt ] > = 30 ) {
int minHP = MonstersData [ mt ] . mMinHP ;
int maxHP = MonstersData [ mt ] . mMaxHP ;
int minHP = MonstersData [ mt ] . hitPointsMinimum ;
int maxHP = MonstersData [ mt ] . hitPointsMaximum ;
if ( ! gbIsHellfire & & mt = = MT_DIABLO ) {
minHP / = 2 ;
maxHP / = 2 ;
@ -4468,7 +4468,7 @@ void PrintMonstHistory(int mt)
AddPanelString ( fmt : : format ( fmt : : runtime ( _ ( " Hit Points: {:d}-{:d} " ) ) , minHP , maxHP ) ) ;
}
if ( MonsterKillCounts [ mt ] > = 15 ) {
int res = ( sgGameInitInfo . nDifficulty ! = DIFF_HELL ) ? MonstersData [ mt ] . mMagicRes : MonstersData [ mt ] . mMagicRes2 ;
int res = ( sgGameInitInfo . nDifficulty ! = DIFF_HELL ) ? MonstersData [ mt ] . resistance : MonstersData [ mt ] . resistanceHell ;
if ( ( res & ( RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING ) ) = = 0 ) {
AddPanelString ( _ ( " No magic resistance " ) ) ;
} else {
@ -4503,7 +4503,7 @@ void PrintUniqueHistory()
AddPanelString ( fmt : : format ( fmt : : runtime ( _ ( " Type: {:s} " ) ) , GetMonsterTypeText ( monster . data ( ) ) ) ) ;
}
int res = monster . magicR esistance & ( RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING ) ;
int res = monster . r esistance & ( RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING ) ;
if ( res = = 0 ) {
AddPanelString ( _ ( " No resistances " ) ) ;
AddPanelString ( _ ( " No Immunities " ) ) ;
@ -4570,7 +4570,7 @@ void MissToMonst(Missile &missile, Point position)
return ;
int pnum = dPlayer [ oldPosition . x ] [ oldPosition . y ] - 1 ;
MonsterAttackPlayer ( monsterId , pnum , 500 , monster . minDamage2 , monster . maxDamage2 ) ;
MonsterAttackPlayer ( monsterId , pnum , 500 , monster . minDamageSpecial , monster . maxDamageSpecial ) ;
if ( IsAnyOf ( monster . type ( ) . type , MT_NSNAKE , MT_RSNAKE , MT_BSNAKE , MT_GSNAKE ) )
return ;
@ -4593,7 +4593,7 @@ void MissToMonst(Missile &missile, Point position)
return ;
int mid = dMonster [ oldPosition . x ] [ oldPosition . y ] - 1 ;
MonsterAttackMonster ( monsterId , mid , 500 , monster . minDamage2 , monster . maxDamage2 ) ;
MonsterAttackMonster ( monsterId , mid , 500 , monster . minDamageSpecial , monster . maxDamageSpecial ) ;
if ( IsAnyOf ( monster . type ( ) . type , MT_NSNAKE , MT_RSNAKE , MT_BSNAKE , MT_GSNAKE ) )
return ;
@ -4743,7 +4743,7 @@ void SpawnGolem(int id, Point position, Missile &missile)
golem . maxHitPoints = 2 * ( 320 * missile . _mispllvl + player . _pMaxMana / 3 ) ;
golem . hitPoints = golem . maxHitPoints ;
golem . armorClass = 25 ;
golem . h it = 5 * ( missile . _mispllvl + 8 ) + 2 * player . _pLevel ;
golem . toH it = 5 * ( missile . _mispllvl + 8 ) + 2 * player . _pLevel ;
golem . minDamage = 2 * ( missile . _mispllvl + 4 ) ;
golem . maxDamage = 2 * ( missile . _mispllvl + 8 ) ;
golem . flags | = MFLAG_GOLEM ;
@ -4852,12 +4852,12 @@ bool Monster::isImmune(missile_id missileType) const
{
missile_resistance missileElement = MissilesData [ missileType ] . mResist ;
if ( ( ( magicR esistance & IMMUNE_MAGIC ) ! = 0 & & missileElement = = MISR_MAGIC )
| | ( ( magicR esistance & IMMUNE_FIRE ) ! = 0 & & missileElement = = MISR_FIRE )
| | ( ( magicR esistance & IMMUNE_LIGHTNING ) ! = 0 & & missileElement = = MISR_LIGHTNING )
| | ( ( magicR esistance & IMMUNE_ACID ) ! = 0 & & missileElement = = MISR_ACID ) )
if ( ( ( r esistance & IMMUNE_MAGIC ) ! = 0 & & missileElement = = MISR_MAGIC )
| | ( ( r esistance & IMMUNE_FIRE ) ! = 0 & & missileElement = = MISR_FIRE )
| | ( ( r esistance & IMMUNE_LIGHTNING ) ! = 0 & & missileElement = = MISR_LIGHTNING )
| | ( ( r esistance & IMMUNE_ACID ) ! = 0 & & missileElement = = MISR_ACID ) )
return true ;
if ( missileType = = MIS_HBOLT & & type ( ) . type ! = MT_DIABLO & & data ( ) . mM onstClass ! = MonsterClass : : Undead )
if ( missileType = = MIS_HBOLT & & type ( ) . type ! = MT_DIABLO & & data ( ) . monster Class ! = MonsterClass : : Undead )
return true ;
return false ;
}
@ -4866,9 +4866,9 @@ bool Monster::isResistant(missile_id missileType) const
{
missile_resistance missileElement = MissilesData [ missileType ] . mResist ;
if ( ( ( magicR esistance & RESIST_MAGIC ) ! = 0 & & missileElement = = MISR_MAGIC )
| | ( ( magicR esistance & RESIST_FIRE ) ! = 0 & & missileElement = = MISR_FIRE )
| | ( ( magicR esistance & RESIST_LIGHTNING ) ! = 0 & & missileElement = = MISR_LIGHTNING ) )
if ( ( ( r esistance & RESIST_MAGIC ) ! = 0 & & missileElement = = MISR_MAGIC )
| | ( ( r esistance & RESIST_FIRE ) ! = 0 & & missileElement = = MISR_FIRE )
| | ( ( r esistance & RESIST_LIGHTNING ) ! = 0 & & missileElement = = MISR_LIGHTNING ) )
return true ;
if ( gbIsHellfire & & missileType = = MIS_HBOLT & & IsAnyOf ( type ( ) . type , MT_DIABLO , MT_BONEDEMN ) )
return true ;