Browse Source

Harmonize DelayLen for Player and Monster (was 1-based on monseter (>= DelayLen) and 0-based on player (> DelayLen). Now both are 1-based (>= DelayLen)

pull/2246/head
obligaron 5 years ago committed by Anders Jenbo
parent
commit
3ba4bac5e2
  1. 11
      Source/engine/animationinfo.cpp
  2. 4
      Source/items.cpp
  3. 4
      Source/loadsave.cpp
  4. 274
      Source/monstdat.cpp
  5. 26
      Source/player.cpp
  6. 16
      test/animationinfo_test.cpp
  7. 2
      test/writehero_test.cpp

11
Source/engine/animationinfo.cpp

@ -83,6 +83,11 @@ void AnimationInfo::SetNewAnimation(CelSprite *pCelSprite, int numberOfFrames, i
SkippedFramesFromPreviousAnimation = 0;
}
if (delayLen <= 0) {
Log("SetNewAnimation: Invalid delayLen {}", delayLen);
delayLen = 1;
}
this->pCelSprite = pCelSprite;
NumberOfFrames = numberOfFrames;
CurrentFrame = 1 + numSkippedFrames;
@ -105,7 +110,7 @@ void AnimationInfo::SetNewAnimation(CelSprite *pCelSprite, int numberOfFrames, i
}
// How many game ticks are needed to advance one Animation Frame
int ticksPerFrame = (delayLen + 1);
int ticksPerFrame = delayLen;
// Game ticks that will be adjusted for the skipped Frames/game ticks
int relevantAnimationTicksForDistribution = relevantAnimationFramesForDistributing * ticksPerFrame;
@ -142,7 +147,7 @@ void AnimationInfo::SetNewAnimation(CelSprite *pCelSprite, int numberOfFrames, i
// in game tick 5 ProcessPlayer sees Frame = 3 and stops the animation.
// But Frame 3 is only shown 1 game tick and all other Frames are shown 2 game ticks.
// Thats why we need to remove the Delay of the last Frame from the time (game ticks) the Animation is shown
relevantAnimationTicksWithSkipping -= delayLen;
relevantAnimationTicksWithSkipping -= (delayLen - 1);
}
// The truncated Frames from previous Animation will also be shown, so we also have to distribute them for the given time (game ticks)
@ -181,7 +186,7 @@ void AnimationInfo::ProcessAnimation(bool reverseAnimation /*= false*/, bool don
if (dontProgressAnimation)
return;
TicksSinceSequenceStarted++;
if (DelayCounter > DelayLen) {
if (DelayCounter >= DelayLen) {
DelayCounter = 0;
if (reverseAnimation) {
CurrentFrame--;

4
Source/items.cpp

@ -4948,9 +4948,9 @@ void ItemStruct::SetNewAnimation(bool showAnimation)
int numberOfFrames = ItemAnimLs[it];
auto *pCelSprite = itemanims[it] ? &*itemanims[it] : nullptr;
if (_iCurs != ICURS_MAGIC_ROCK)
AnimInfo.SetNewAnimation(pCelSprite, numberOfFrames, 0, AnimationDistributionFlags::ProcessAnimationPending, 0, numberOfFrames);
AnimInfo.SetNewAnimation(pCelSprite, numberOfFrames, 1, AnimationDistributionFlags::ProcessAnimationPending, 0, numberOfFrames);
else
AnimInfo.SetNewAnimation(pCelSprite, numberOfFrames, 0);
AnimInfo.SetNewAnimation(pCelSprite, numberOfFrames, 1);
_iPostDraw = false;
_iRequest = false;
if (showAnimation) {

4
Source/loadsave.cpp

@ -341,7 +341,7 @@ static void LoadPlayer(LoadHelper *file, int p)
player._pgfxnum = file->nextLE<int32_t>();
file->skip(4); // Skip pointer pData
player.AnimInfo = {};
player.AnimInfo.DelayLen = file->nextLE<int32_t>();
player.AnimInfo.DelayLen = file->nextLE<int32_t>() + 1;
player.AnimInfo.DelayCounter = file->nextLE<int32_t>();
player.AnimInfo.NumberOfFrames = file->nextLE<int32_t>();
player.AnimInfo.CurrentFrame = file->nextLE<int32_t>();
@ -1404,7 +1404,7 @@ static void SavePlayer(SaveHelper *file, int p)
file->skip(4); // Unused
file->writeLE<int32_t>(player._pgfxnum);
file->skip(4); // Skip pointer _pAnimData
file->writeLE<int32_t>(player.AnimInfo.DelayLen);
file->writeLE<int32_t>(std::max(0, player.AnimInfo.DelayLen - 1));
file->writeLE<int32_t>(player.AnimInfo.DelayCounter);
file->writeLE<int32_t>(player.AnimInfo.NumberOfFrames);
file->writeLE<int32_t>(player.AnimInfo.CurrentFrame);

274
Source/monstdat.cpp

@ -16,143 +16,143 @@ const MonsterData monsterdata[] = {
// clang-format off
// mName, GraphicType, sndfile, TransFile, width, mImage, has_special, snd_special, has_trans, Frames[6], Rate[6], mMinDLvl, mMaxDLvl, mLevel, mMinHP, mMaxHP, mAi, mFlags , mInt, mHit, mAFNum, mMinDamage, mMaxDamage, mHit2, mAFNum2, mMinDamage2, mMaxDamage2, mArmorClass, mMonstClass, mMagicRes , mMagicRes2 , mSelFlag, mTreasure, mExp
// TRANSLATORS: Monster Block start
{ N_("Zombie"), "Monsters\\Zombie\\Zombie%c.CL2", "Monsters\\Zombie\\Zombie%c%i.WAV", nullptr, 128, 799, false, false, false, { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, 1, 3, 1, 4, 7, AI_ZOMBIE, 0 , 0, 10, 8, 2, 5, 0, 0, 0, 0, 5, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 54 },
{ N_("Ghoul"), "Monsters\\Zombie\\Zombie%c.CL2", "Monsters\\Zombie\\Zombie%c%i.WAV", "Monsters\\Zombie\\Bluered.TRN", 128, 799, false, false, true, { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, 2, 4, 2, 7, 11, AI_ZOMBIE, 0 , 1, 10, 8, 3, 10, 0, 0, 0, 0, 10, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 58 },
{ N_("Rotting Carcass"), "Monsters\\Zombie\\Zombie%c.CL2", "Monsters\\Zombie\\Zombie%c%i.WAV", "Monsters\\Zombie\\Grey.TRN", 128, 799, false, false, true, { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, 2, 6, 4, 15, 25, AI_ZOMBIE, 0 , 2, 25, 8, 5, 15, 0, 0, 0, 0, 15, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , 3, 0, 136 },
{ N_("Black Death"), "Monsters\\Zombie\\Zombie%c.CL2", "Monsters\\Zombie\\Zombie%c%i.WAV", "Monsters\\Zombie\\Yellow.TRN", 128, 799, false, false, true, { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, 4, 8, 6, 25, 40, AI_ZOMBIE, 0 , 3, 30, 8, 6, 22, 0, 0, 0, 0, 20, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 240 },
{ N_("Fallen One"), "Monsters\\FalSpear\\Phall%c.CL2", "Monsters\\FalSpear\\Phall%c%i.WAV", "Monsters\\FalSpear\\FallenT.TRN", 128, 543, true, true, true, { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, 1, 3, 1, 1, 4, AI_FALLEN, 0 , 0, 15, 7, 1, 3, 0, 5, 0, 0, 0, MC_ANIMAL, 0 , 0 , 3, 0, 46 },
{ N_("Carver"), "Monsters\\FalSpear\\Phall%c.CL2", "Monsters\\FalSpear\\Phall%c%i.WAV", "Monsters\\FalSpear\\Dark.TRN", 128, 543, true, true, true, { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, 2, 5, 3, 4, 8, AI_FALLEN, 0 , 2, 20, 7, 2, 5, 0, 5, 0, 0, 5, MC_ANIMAL, 0 , 0 , 3, 0, 80 },
{ N_("Devil Kin"), "Monsters\\FalSpear\\Phall%c.CL2", "Monsters\\FalSpear\\Phall%c%i.WAV", nullptr, 128, 543, true, true, false, { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, 3, 7, 5, 12, 24, AI_FALLEN, 0 , 2, 25, 7, 3, 7, 0, 5, 0, 0, 10, MC_ANIMAL, 0 , RESIST_FIRE , 3, 0, 155 },
{ N_("Dark One"), "Monsters\\FalSpear\\Phall%c.CL2", "Monsters\\FalSpear\\Phall%c%i.WAV", "Monsters\\FalSpear\\Blue.TRN", 128, 543, true, true, true, { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, 5, 9, 7, 20, 36, AI_FALLEN, 0 , 3, 30, 7, 4, 8, 0, 5, 0, 0, 15, MC_ANIMAL, IMMUNE_NULL_40 , RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 255 },
{ N_("Skeleton"), "Monsters\\SkelAxe\\SklAx%c.CL2", "Monsters\\SkelAxe\\SklAx%c%i.WAV", "Monsters\\SkelAxe\\White.TRN", 128, 553, true, false, true, { 12, 8, 13, 6, 17, 16 }, { 5, 0, 0, 0, 0, 0 }, 1, 3, 1, 2, 4, AI_SKELSD, 0 , 0, 20, 8, 1, 4, 0, 0, 0, 0, 0, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 64 },
{ N_("Corpse Axe"), "Monsters\\SkelAxe\\SklAx%c.CL2", "Monsters\\SkelAxe\\SklAx%c%i.WAV", "Monsters\\SkelAxe\\Skelt.TRN", 128, 553, true, false, true, { 12, 8, 13, 6, 17, 16 }, { 4, 0, 0, 0, 0, 0 }, 2, 5, 2, 4, 7, AI_SKELSD, 0 , 1, 25, 8, 3, 5, 0, 0, 0, 0, 0, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 68 },
{ N_("Burning Dead"), "Monsters\\SkelAxe\\SklAx%c.CL2", "Monsters\\SkelAxe\\SklAx%c%i.WAV", nullptr, 128, 553, true, false, false, { 12, 8, 13, 6, 17, 16 }, { 2, 0, 0, 0, 0, 0 }, 2, 6, 4, 8, 12, AI_SKELSD, 0 , 2, 30, 8, 3, 7, 0, 0, 0, 0, 5, MC_UNDEAD, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 3, 0, 154 },
{ N_("Horror"), "Monsters\\SkelAxe\\SklAx%c.CL2", "Monsters\\SkelAxe\\SklAx%c%i.WAV", "Monsters\\SkelAxe\\Black.TRN", 128, 553, true, false, true, { 12, 8, 13, 6, 17, 16 }, { 3, 0, 0, 0, 0, 0 }, 4, 8, 6, 12, 20, AI_SKELSD, 0 , 3, 35, 8, 4, 9, 0, 0, 0, 0, 15, MC_UNDEAD, IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 264 },
{ N_("Fallen One"), "Monsters\\FalSword\\Fall%c.CL2", "Monsters\\FalSword\\Fall%c%i.WAV", "Monsters\\FalSword\\FallenT.TRN", 128, 623, true, true, true, { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, 1, 3, 1, 2, 5, AI_FALLEN, 0 , 0, 15, 8, 1, 4, 0, 5, 0, 0, 10, MC_ANIMAL, 0 , 0 , 3, 0, 52 },
{ N_("Carver"), "Monsters\\FalSword\\Fall%c.CL2", "Monsters\\FalSword\\Fall%c%i.WAV", "Monsters\\FalSword\\Dark.TRN", 128, 623, true, true, true, { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, 2, 5, 3, 5, 9, AI_FALLEN, 0 , 1, 20, 8, 2, 7, 0, 5, 0, 0, 15, MC_ANIMAL, 0 , 0 , 3, 0, 90 },
{ N_("Devil Kin"), "Monsters\\FalSword\\Fall%c.CL2", "Monsters\\FalSword\\Fall%c%i.WAV", nullptr, 128, 623, true, true, false, { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, 3, 7, 5, 16, 24, AI_FALLEN, 0 , 2, 25, 8, 4, 10, 0, 5, 0, 0, 20, MC_ANIMAL, 0 , RESIST_FIRE , 3, 0, 180 },
{ N_("Dark One"), "Monsters\\FalSword\\Fall%c.CL2", "Monsters\\FalSword\\Fall%c%i.WAV", "Monsters\\FalSword\\Blue.TRN", 128, 623, true, true, true, { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, 5, 9, 7, 24, 36, AI_FALLEN, 0 , 3, 30, 8, 4, 12, 0, 5, 0, 0, 25, MC_ANIMAL, IMMUNE_NULL_40 , RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 280 },
{ N_("Scavenger"), "Monsters\\Scav\\Scav%c.CL2", "Monsters\\Scav\\Scav%c%i.WAV", nullptr, 128, 410, true, false, false, { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, 1, 4, 2, 3, 6, AI_SCAV, 0 , 0, 20, 7, 1, 5, 0, 0, 0, 0, 10, MC_ANIMAL, 0 , RESIST_FIRE , 3, 0, 80 },
{ N_("Plague Eater"), "Monsters\\Scav\\Scav%c.CL2", "Monsters\\Scav\\Scav%c%i.WAV", "Monsters\\Scav\\ScavBr.TRN", 128, 410, true, false, true, { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, 3, 6, 4, 12, 24, AI_SCAV, 0 , 1, 30, 7, 1, 8, 0, 0, 0, 0, 20, MC_ANIMAL, 0 , RESIST_LIGHTNING , 3, 0, 188 },
{ N_("Shadow Beast"), "Monsters\\Scav\\Scav%c.CL2", "Monsters\\Scav\\Scav%c%i.WAV", "Monsters\\Scav\\ScavBe.TRN", 128, 410, true, false, true, { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, 4, 8, 6, 24, 36, AI_SCAV, 0 , 2, 35, 7, 3, 12, 0, 0, 0, 0, 25, MC_ANIMAL, IMMUNE_NULL_40 , RESIST_FIRE | IMMUNE_NULL_40 , 3, 0, 375 },
{ N_("Bone Gasher"), "Monsters\\Scav\\Scav%c.CL2", "Monsters\\Scav\\Scav%c%i.WAV", "Monsters\\Scav\\ScavW.TRN", 128, 410, true, false, true, { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, 6, 10, 8, 28, 40, AI_SCAV, 0 , 3, 35, 7, 5, 15, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC | IMMUNE_NULL_40 , RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 552 },
{ N_("Skeleton"), "Monsters\\SkelBow\\SklBw%c.CL2", "Monsters\\SkelBow\\SklBw%c%i.WAV", "Monsters\\SkelBow\\White.TRN", 128, 567, true, false, true, { 9, 8, 16, 5, 16, 16 }, { 4, 0, 0, 0, 0, 0 }, 2, 5, 3, 2, 4, AI_SKELBOW, 0 , 0, 15, 12, 1, 2, 0, 0, 0, 0, 0, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 110 },
{ N_("Corpse Bow"), "Monsters\\SkelBow\\SklBw%c.CL2", "Monsters\\SkelBow\\SklBw%c%i.WAV", "Monsters\\SkelBow\\Skelt.TRN", 128, 567, true, false, true, { 9, 8, 16, 5, 16, 16 }, { 4, 0, 0, 0, 0, 0 }, 3, 7, 5, 8, 16, AI_SKELBOW, 0 , 1, 25, 12, 1, 4, 0, 0, 0, 0, 0, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 210 },
{ N_("Burning Dead"), "Monsters\\SkelBow\\SklBw%c.CL2", "Monsters\\SkelBow\\SklBw%c%i.WAV", nullptr, 128, 567, true, false, false, { 9, 8, 16, 5, 16, 16 }, { 2, 0, 0, 0, 0, 0 }, 5, 9, 7, 10, 24, AI_SKELBOW, 0 , 2, 30, 12, 1, 6, 0, 0, 0, 0, 5, MC_UNDEAD, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 3, 0, 364 },
{ N_("Horror"), "Monsters\\SkelBow\\SklBw%c.CL2", "Monsters\\SkelBow\\SklBw%c%i.WAV", "Monsters\\SkelBow\\Black.TRN", 128, 567, true, false, true, { 9, 8, 16, 5, 16, 16 }, { 3, 0, 0, 0, 0, 0 }, 7, 11, 9, 15, 45, AI_SKELBOW, 0 , 3, 35, 12, 2, 9, 0, 0, 0, 0, 15, MC_UNDEAD, IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 594 },
{ N_("Skeleton Captain"), "Monsters\\SkelSd\\SklSr%c.CL2", "Monsters\\SkelSd\\SklSr%c%i.WAV", "Monsters\\SkelSd\\White.TRN", 128, 575, true, true, true, { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, 1, 4, 2, 3, 6, AI_SKELSD, 0 , 0, 20, 8, 2, 7, 0, 0, 0, 0, 10, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 90 },
{ N_("Corpse Captain"), "Monsters\\SkelSd\\SklSr%c.CL2", "Monsters\\SkelSd\\SklSr%c%i.WAV", "Monsters\\SkelSd\\Skelt.TRN", 128, 575, true, false, true, { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, 2, 6, 4, 12, 20, AI_SKELSD, 0 , 1, 30, 8, 3, 9, 0, 0, 0, 0, 5, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 200 },
{ N_("Burning Dead Captain"), "Monsters\\SkelSd\\SklSr%c.CL2", "Monsters\\SkelSd\\SklSr%c%i.WAV", nullptr, 128, 575, true, false, false, { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, 4, 8, 6, 16, 30, AI_SKELSD, 0 , 2, 35, 8, 4, 10, 0, 0, 0, 0, 15, MC_UNDEAD, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 3, 0, 393 },
{ N_("Horror Captain"), "Monsters\\SkelSd\\SklSr%c.CL2", "Monsters\\SkelSd\\SklSr%c%i.WAV", "Monsters\\SkelSd\\Black.TRN", 128, 575, true, false, true, { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, 6, 10, 8, 35, 50, AI_SKELSD, MFLAG_SEARCH , 3, 40, 8, 5, 14, 0, 0, 0, 0, 30, MC_UNDEAD, IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 604 },
{ N_("Invisible Lord"), "Monsters\\TSneak\\TSneak%c.CL2", "Monsters\\TSneak\\Sneakl%c%i.WAV", nullptr, 128, 800, false, false, false, { 13, 13, 15, 11, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, 36, 39, 14, 278, 278, AI_SKELSD, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 65, 8, 16, 30, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 2000 },
{ N_("Hidden"), "Monsters\\Sneak\\Sneak%c.CL2", "Monsters\\Sneak\\Sneak%c%i.WAV", nullptr, 128, 992, true, false, false, { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, 3, 8, 5, 8, 24, AI_SNEAK, MFLAG_HIDDEN , 0, 35, 8, 3, 6, 0, 0, 0, 0, 25, MC_DEMON, 0 , IMMUNE_NULL_40 , 3, 0, 278 },
{ N_("Stalker"), "Monsters\\Sneak\\Sneak%c.CL2", "Monsters\\Sneak\\Sneak%c%i.WAV", "Monsters\\Sneak\\Sneakv2.TRN", 128, 992, true, false, true, { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, 8, 12, 9, 30, 45, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 1, 40, 8, 8, 16, 0, 0, 0, 0, 30, MC_DEMON, 0 , IMMUNE_NULL_40 , 3, 0, 630 },
{ N_("Unseen"), "Monsters\\Sneak\\Sneak%c.CL2", "Monsters\\Sneak\\Sneak%c%i.WAV", "Monsters\\Sneak\\Sneakv3.TRN", 128, 992, true, false, true, { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, 10, 14, 11, 35, 50, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 2, 45, 8, 12, 20, 0, 0, 0, 0, 30, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 935 },
{ N_("Illusion Weaver"), "Monsters\\Sneak\\Sneak%c.CL2", "Monsters\\Sneak\\Sneak%c%i.WAV", "Monsters\\Sneak\\Sneakv1.TRN", 128, 992, true, false, true, { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, 14, 18, 13, 40, 60, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 3, 60, 8, 16, 24, 0, 0, 0, 0, 30, MC_DEMON, RESIST_MAGIC | RESIST_FIRE , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , 3, 0, 1500 },
{ N_("Satyr Lord"), "Monsters\\GoatLord\\GoatL%c.CL2", "Monsters\\newsfx\\Satyr%c%i.WAV", nullptr, 160, 800, false, false, false, { 13, 13, 14, 9, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, 40, 43, 28, 160, 200, AI_SKELSD, MFLAG_SEARCH , 3, 90, 8, 20, 30, 0, 0, 0, 0, 70, MC_ANIMAL, RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 3, 0, 2800 },
{ N_("Flesh Clan"), "Monsters\\GoatMace\\Goat%c.CL2", "Monsters\\GoatMace\\Goat%c%i.WAV", nullptr, 128, 1030, true, false, false, { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, 6, 10, 8, 30, 45, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 50, 8, 4, 10, 0, 0, 0, 0, 40, MC_DEMON, 0 , 0 , 3, 0, 460 },
{ N_("Stone Clan"), "Monsters\\GoatMace\\Goat%c.CL2", "Monsters\\GoatMace\\Goat%c%i.WAV", "Monsters\\GoatMace\\Beige.TRN", 128, 1030, true, false, true, { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, 8, 12, 10, 40, 55, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 60, 8, 6, 12, 0, 0, 0, 0, 40, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 685 },
{ N_("Fire Clan"), "Monsters\\GoatMace\\Goat%c.CL2", "Monsters\\GoatMace\\Goat%c%i.WAV", "Monsters\\GoatMace\\Red.TRN", 128, 1030, true, false, true, { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, 10, 14, 12, 50, 65, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 70, 8, 8, 16, 0, 0, 0, 0, 45, MC_DEMON, RESIST_FIRE , IMMUNE_FIRE , 3, 0, 906 },
{ N_("Night Clan"), "Monsters\\GoatMace\\Goat%c.CL2", "Monsters\\GoatMace\\Goat%c%i.WAV", "Monsters\\GoatMace\\Gray.TRN", 128, 1030, true, false, true, { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, 12, 16, 14, 55, 70, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 80, 8, 10, 20, 15, 0, 30, 30, 50, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 1190 },
{ N_("Fiend"), "Monsters\\Bat\\Bat%c.CL2", "Monsters\\Bat\\Bat%c%i.WAV", "Monsters\\Bat\\red.trn", 96, 364, false, false, true, { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, 2, 5, 3, 3, 6, AI_BAT, 0 , 0, 35, 5, 1, 6, 0, 0, 0, 0, 0, MC_ANIMAL, 0 , 0 , 6, 0x4000, 102 },
{ N_("Blink"), "Monsters\\Bat\\Bat%c.CL2", "Monsters\\Bat\\Bat%c%i.WAV", nullptr, 96, 364, false, false, false, { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, 5, 9, 7, 12, 28, AI_BAT, 0 , 1, 45, 5, 1, 8, 0, 0, 0, 0, 15, MC_ANIMAL, 0 , 0 , 6, 0x4000, 340 },
{ N_("Gloom"), "Monsters\\Bat\\Bat%c.CL2", "Monsters\\Bat\\Bat%c%i.WAV", "Monsters\\Bat\\grey.trn", 96, 364, false, false, true, { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, 7, 11, 9, 28, 36, AI_BAT, MFLAG_SEARCH , 2, 70, 5, 4, 12, 0, 0, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC | IMMUNE_NULL_40 , 6, 0x4000, 509 },
{ N_("Familiar"), "Monsters\\Bat\\Bat%c.CL2", "Monsters\\Bat\\Bat%c%i.WAV", "Monsters\\Bat\\orange.trn", 96, 364, false, false, true, { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, 11, 15, 13, 20, 35, AI_BAT, MFLAG_SEARCH , 3, 50, 5, 4, 16, 0, 0, 0, 0, 35, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING , RESIST_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 6, 0x4000, 448 },
{ N_("Flesh Clan"), "Monsters\\GoatBow\\GoatB%c.CL2", "Monsters\\GoatBow\\GoatB%c%i.WAV", nullptr, 128, 1040, false, false, false, { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, 6, 10, 8, 20, 35, AI_GOATBOW, MFLAG_CAN_OPEN_DOOR, 0, 35, 13, 1, 7, 0, 0, 0, 0, 35, MC_DEMON, 0 , 0 , 3, 0, 448 },
{ N_("Stone Clan"), "Monsters\\GoatBow\\GoatB%c.CL2", "Monsters\\GoatBow\\GoatB%c%i.WAV", "Monsters\\GoatBow\\Beige.TRN", 128, 1040, false, false, true, { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, 8, 12, 10, 30, 40, AI_GOATBOW, MFLAG_CAN_OPEN_DOOR, 1, 40, 13, 2, 9, 0, 0, 0, 0, 35, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 645 },
{ N_("Fire Clan"), "Monsters\\GoatBow\\GoatB%c.CL2", "Monsters\\GoatBow\\GoatB%c%i.WAV", "Monsters\\GoatBow\\Red.TRN", 128, 1040, false, false, true, { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, 10, 14, 12, 40, 50, AI_GOATBOW, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 45, 13, 3, 11, 0, 0, 0, 0, 35, MC_DEMON, RESIST_FIRE , IMMUNE_FIRE , 3, 0, 822 },
{ N_("Night Clan"), "Monsters\\GoatBow\\GoatB%c.CL2", "Monsters\\GoatBow\\GoatB%c%i.WAV", "Monsters\\GoatBow\\Gray.TRN", 128, 1040, false, false, true, { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, 12, 16, 14, 50, 65, AI_GOATBOW, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 50, 13, 4, 13, 15, 0, 0, 0, 40, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 1092 },
{ N_("Acid Beast"), "Monsters\\Acid\\Acid%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 716, true, true, false, { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, 10, 14, 11, 40, 66, AI_ACID, 0 , 0, 40, 8, 4, 12, 25, 8, 0, 0, 30, MC_ANIMAL, IMMUNE_ACID , IMMUNE_MAGIC | IMMUNE_ACID , 3, 0, 846 },
{ N_("Poison Spitter"), "Monsters\\Acid\\Acid%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", "Monsters\\Acid\\AcidBlk.TRN", 128, 716, true, true, true, { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, 14, 18, 15, 60, 85, AI_ACID, 0 , 1, 45, 8, 4, 16, 25, 8, 0, 0, 30, MC_ANIMAL, IMMUNE_ACID , IMMUNE_MAGIC | IMMUNE_ACID , 3, 0, 1248 },
{ N_("Pit Beast"), "Monsters\\Acid\\Acid%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", "Monsters\\Acid\\AcidB.TRN", 128, 716, true, true, true, { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, 18, 22, 21, 80, 110, AI_ACID, 0 , 2, 55, 8, 8, 18, 35, 8, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | IMMUNE_ACID , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_ACID , 3, 0, 2060 },
{ N_("Lava Maw"), "Monsters\\Acid\\Acid%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", "Monsters\\Acid\\AcidR.TRN", 128, 716, true, true, true, { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, 22, 27, 25, 100, 150, AI_ACID, 0 , 3, 65, 8, 10, 20, 40, 8, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_ACID , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_ACID , 3, 0, 2940 },
{ N_("Skeleton King"), "Monsters\\SKing\\SKing%c.CL2", "Monsters\\SKing\\SKing%c%i.WAV", "Monsters\\SkelAxe\\White.TRN", 160, 1010, true, true, true, { 8, 6, 16, 6, 16, 6 }, { 2, 0, 0, 0, 0, 2 }, 6, 6, 9, 140, 140, AI_SKELKING, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 60, 8, 6, 16, 0, 0, 0, 0, 70, MC_UNDEAD, IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0x8001, 570 },
{ N_("The Butcher"), "Monsters\\FatC\\FatC%c.CL2", "Monsters\\FatC\\FatC%c%i.WAV", nullptr, 128, 980, false, false, false, { 10, 8, 12, 6, 16, 0 }, { 1, 0, 0, 0, 0, 0 }, 0, 0, 1, 320, 320, AI_CLEAVER, 0 , 3, 50, 8, 6, 12, 0, 0, 0, 0, 50, MC_DEMON, RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 3, 0x8000, 710 },
{ N_("Overlord"), "Monsters\\Fat\\Fat%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 128, 1130, true, false, false, { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, 8, 12, 10, 60, 80, AI_FAT, 0 , 0, 55, 8, 6, 12, 0, 0, 0, 0, 55, MC_DEMON, 0 , RESIST_FIRE , 3, 0, 635 },
{ N_("Mud Man"), "Monsters\\Fat\\Fat%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", "Monsters\\Fat\\Blue.TRN", 128, 1130, true, false, true, { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, 13, 17, 14, 100, 125, AI_FAT, MFLAG_SEARCH , 1, 60, 8, 8, 16, 0, 0, 0, 0, 60, MC_DEMON, 0 , IMMUNE_LIGHTNING , 3, 0, 1165 },
{ N_("Toad Demon"), "Monsters\\Fat\\Fat%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", "Monsters\\Fat\\FatB.TRN", 128, 1130, true, false, true, { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, 15, 19, 16, 135, 160, AI_FAT, MFLAG_SEARCH , 2, 70, 8, 8, 16, 40, 0, 8, 20, 65, MC_DEMON, IMMUNE_MAGIC , IMMUNE_MAGIC | RESIST_LIGHTNING , 3, 0, 1380 },
{ N_("Flayed One"), "Monsters\\Fat\\Fat%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", "Monsters\\Fat\\FatF.TRN", 128, 1130, true, false, true, { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, 19, 23, 20, 160, 200, AI_FAT, MFLAG_SEARCH , 3, 85, 8, 10, 20, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 3, 0, 2058 },
{ N_("Wyrm"), "Monsters\\Worm\\Worm%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 160, 2420, false, false, false, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, 9, 13, 11, 60, 90, AI_SKELSD, 0 , 0, 40, 8, 4, 10, 0, 0, 0, 0, 25, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC , 3, 0, 660 },
{ N_("Cave Slug"), "Monsters\\Worm\\Worm%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 160, 2420, false, false, false, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, 11, 15, 13, 75, 110, AI_SKELSD, 0 , 1, 50, 8, 6, 13, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC , 3, 0, 994 },
{ N_("Devil Wyrm"), "Monsters\\Worm\\Worm%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 160, 2420, false, false, false, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, 13, 17, 15, 100, 140, AI_SKELSD, 0 , 2, 55, 8, 8, 16, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC | RESIST_FIRE , RESIST_MAGIC | RESIST_FIRE , 3, 0, 1320 },
{ N_("Devourer"), "Monsters\\Worm\\Worm%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 160, 2420, false, false, false, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, 15, 19, 17, 125, 200, AI_SKELSD, 0 , 3, 60, 8, 10, 20, 0, 0, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , RESIST_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , 3, 0, 1827 },
{ N_("Magma Demon"), "Monsters\\Magma\\Magma%c.CL2", "Monsters\\Magma\\Magma%c%i.WAV", nullptr, 128, 1680, true, true, false, { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, 14, 17, 13, 50, 70, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 45, 4, 2, 10, 50, 13, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 1076 },
{ N_("Blood Stone"), "Monsters\\Magma\\Magma%c.CL2", "Monsters\\Magma\\Magma%c%i.WAV", "Monsters\\Magma\\Yellow.TRN", 128, 1680, true, true, true, { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, 15, 19, 14, 55, 75, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 50, 4, 2, 12, 50, 14, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 1309 },
{ N_("Hell Stone"), "Monsters\\Magma\\Magma%c.CL2", "Monsters\\Magma\\Magma%c%i.WAV", "Monsters\\Magma\\Blue.TRN", 128, 1680, true, true, true, { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, 16, 20, 16, 60, 80, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 60, 4, 2, 20, 60, 14, 0, 0, 50, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 1680 },
{ N_("Lava Lord"), "Monsters\\Magma\\Magma%c.CL2", "Monsters\\Magma\\Magma%c%i.WAV", "Monsters\\Magma\\Wierd.TRN", 128, 1680, true, true, true, { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, 17, 21, 18, 70, 85, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 75, 4, 4, 24, 60, 14, 0, 0, 60, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 2124 },
{ N_("Horned Demon"), "Monsters\\Rhino\\Rhino%c.CL2", "Monsters\\Rhino\\Rhino%c%i.WAV", nullptr, 160, 1630, true, true, false, { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, 12, 16, 13, 40, 80, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 60, 7, 2, 16, 100, 0, 5, 32, 40, MC_ANIMAL, 0 , RESIST_FIRE , 7, 0, 1172 },
{ N_("Mud Runner"), "Monsters\\Rhino\\Rhino%c.CL2", "Monsters\\Rhino\\Rhino%c%i.WAV", "Monsters\\Rhino\\Orange.TRN", 160, 1630, true, true, true, { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, 14, 18, 15, 50, 90, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 70, 7, 6, 18, 100, 0, 12, 36, 45, MC_ANIMAL, 0 , RESIST_FIRE , 7, 0, 1404 },
{ N_("Frost Charger"), "Monsters\\Rhino\\Rhino%c.CL2", "Monsters\\Rhino\\Rhino%c%i.WAV", "Monsters\\Rhino\\Blue.TRN", 160, 1630, true, true, true, { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, 16, 20, 17, 60, 100, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 80, 7, 8, 20, 100, 0, 20, 40, 50, MC_ANIMAL, IMMUNE_MAGIC | RESIST_LIGHTNING , IMMUNE_MAGIC | RESIST_LIGHTNING , 7, 0, 1720 },
{ N_("Obsidian Lord"), "Monsters\\Rhino\\Rhino%c.CL2", "Monsters\\Rhino\\Rhino%c%i.WAV", "Monsters\\Rhino\\RhinoB.TRN", 160, 1630, true, true, true, { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, 18, 22, 19, 70, 110, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 90, 7, 10, 22, 100, 0, 20, 50, 55, MC_ANIMAL, IMMUNE_MAGIC | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 7, 0, 1809 },
{ N_("oldboned"), "Monsters\\Demskel\\Demskl%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 128, 1740, true, true, false, { 10, 8, 20, 6, 24, 16 }, { 3, 0, 0, 0, 0, 0 }, 46, 47, 12, 70, 70, AI_STORM, 0 , 0, 60, 8, 6, 14, 12, 0, 0, 0, 50, MC_DEMON, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 7, 0, 1344 },
{ N_("Red Death"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, 14, 18, 16, 96, 96, AI_STORM, 0 , 1, 75, 5, 10, 20, 0, 0, 0, 0, 60, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 2168 },
{ N_("Litch Demon"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, 16, 20, 18, 110, 110, AI_STORM, 0 , 2, 80, 5, 10, 24, 0, 0, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 2736 },
{ N_("Undead Balrog"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, 20, 24, 22, 130, 130, AI_STORM, 0 , 3, 85, 5, 12, 30, 0, 0, 0, 0, 65, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3575 },
{ N_("Incinerator"), "Monsters\\Fireman\\FireM%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 1460, true, false, false, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, 40, 43, 16, 30, 45, AI_FIREMAN, 0 , 0, 75, 8, 8, 16, 0, 0, 0, 0, 25, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 3, 0, 1888 },
{ N_("Flame Lord"), "Monsters\\Fireman\\FireM%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 1460, true, false, false, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, 42, 45, 18, 40, 55, AI_FIREMAN, 0 , 1, 75, 8, 10, 20, 0, 0, 0, 0, 25, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 3, 0, 2250 },
{ N_("Doom Fire"), "Monsters\\Fireman\\FireM%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 1460, true, false, false, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, 44, 47, 20, 50, 65, AI_FIREMAN, 0 , 2, 80, 8, 12, 24, 0, 0, 0, 0, 30, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 2740 },
{ N_("Hell Burner"), "Monsters\\Fireman\\FireM%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 1460, true, false, false, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, 46, 47, 22, 60, 80, AI_FIREMAN, 0 , 3, 85, 8, 15, 30, 0, 0, 0, 0, 30, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 3355 },
{ N_("Red Storm"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, 17, 21, 18, 55, 110, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 80, 5, 8, 18, 75, 8, 4, 16, 30, MC_DEMON, IMMUNE_MAGIC | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_LIGHTNING , 7, 0, 2160 },
{ N_("Storm Rider"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", nullptr, 160, 1740, true, true, false, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, 19, 23, 20, 60, 120, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 80, 5, 8, 18, 80, 8, 4, 16, 30, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING , IMMUNE_MAGIC | IMMUNE_LIGHTNING , 7, 0, 2391 },
{ N_("Storm Lord"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv2.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, 21, 25, 22, 75, 135, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 85, 5, 12, 24, 75, 8, 4, 16, 35, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING , IMMUNE_MAGIC | IMMUNE_LIGHTNING , 7, 0, 2775 },
{ N_("Maelstrom"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv1.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, 23, 27, 24, 90, 150, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 90, 5, 12, 28, 75, 8, 4, 16, 40, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3177 },
{ N_("Devil Kin Brute"), "Monsters\\BigFall\\Fallg%c.CL2", "Monsters\\newsfx\\KBrute%c%i.WAV", nullptr, 128, 800, true, false, false, { 10, 8, 11, 8, 17, 0 }, { 0, 0, 0, 0, 2, 2 }, 40, 43, 27, 120, 160, AI_SKELSD, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 100, 6, 18, 24, 0, 0, 0, 0, 70, MC_ANIMAL, RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 2400 },
{ N_("Winged-Demon"), "Monsters\\Gargoyle\\Gargo%c.CL2", "Monsters\\Gargoyle\\Gargo%c%i.WAV", nullptr, 160, 1650, true, false, false, { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 2 }, 8, 12, 9, 45, 60, AI_GARG, MFLAG_CAN_OPEN_DOOR, 0, 50, 7, 10, 16, 0, 0, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 6, 0, 662 },
{ N_("Gargoyle"), "Monsters\\Gargoyle\\Gargo%c.CL2", "Monsters\\Gargoyle\\Gargo%c%i.WAV", "Monsters\\Gargoyle\\GarE.TRN", 160, 1650, true, false, true, { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 2 }, 12, 16, 13, 60, 90, AI_GARG, MFLAG_CAN_OPEN_DOOR, 1, 65, 7, 10, 16, 0, 0, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 6, 0, 1205 },
{ N_("Blood Claw"), "Monsters\\Gargoyle\\Gargo%c.CL2", "Monsters\\Gargoyle\\Gargo%c%i.WAV", "Monsters\\Gargoyle\\GargBr.TRN", 160, 1650, true, false, true, { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 0 }, 16, 20, 19, 75, 125, AI_GARG, MFLAG_CAN_OPEN_DOOR, 2, 80, 7, 14, 22, 0, 0, 0, 0, 50, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 6, 0, 1873 },
{ N_("Death Wing"), "Monsters\\Gargoyle\\Gargo%c.CL2", "Monsters\\Gargoyle\\Gargo%c%i.WAV", "Monsters\\Gargoyle\\GargB.TRN", 160, 1650, true, false, true, { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 0 }, 18, 22, 23, 90, 150, AI_GARG, MFLAG_CAN_OPEN_DOOR, 3, 95, 7, 16, 28, 0, 0, 0, 0, 60, MC_DEMON, IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 6, 0, 2278 },
{ N_("Slayer"), "Monsters\\Mega\\Mega%c.CL2", "Monsters\\Mega\\Mega%c%i.WAV", nullptr, 160, 2220, true, true, false, { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, 19, 23, 20, 120, 140, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 100, 8, 12, 20, 0, 3, 0, 0, 60, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE , RESIST_MAGIC | IMMUNE_FIRE , 7, 0, 2300 },
{ N_("Guardian"), "Monsters\\Mega\\Mega%c.CL2", "Monsters\\Mega\\Mega%c%i.WAV", "Monsters\\Mega\\Guard.TRN", 160, 2220, true, true, true, { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, 21, 25, 22, 140, 160, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 110, 8, 14, 22, 0, 3, 0, 0, 65, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE , RESIST_MAGIC | IMMUNE_FIRE , 7, 0, 2714 },
{ N_("Vortex Lord"), "Monsters\\Mega\\Mega%c.CL2", "Monsters\\Mega\\Mega%c%i.WAV", "Monsters\\Mega\\Vtexl.TRN", 160, 2220, true, true, true, { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, 23, 26, 24, 160, 180, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 120, 8, 18, 24, 0, 3, 0, 0, 70, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3252 },
{ N_("Balrog"), "Monsters\\Mega\\Mega%c.CL2", "Monsters\\Mega\\Mega%c%i.WAV", "Monsters\\Mega\\Balr.TRN", 160, 2220, true, true, true, { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, 25, 29, 26, 180, 200, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 130, 8, 22, 30, 0, 3, 0, 0, 75, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3643 },
{ N_("Cave Viper"), "Monsters\\Snake\\Snake%c.CL2", "Monsters\\Snake\\Snake%c%i.WAV", nullptr, 160, 1270, false, false, false, { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, 20, 24, 21, 100, 150, AI_SNAKE, MFLAG_SEARCH , 0, 90, 8, 8, 20, 0, 0, 0, 0, 60, MC_DEMON, IMMUNE_MAGIC , IMMUNE_MAGIC , 7, 0, 2725 },
{ N_("Fire Drake"), "Monsters\\Snake\\Snake%c.CL2", "Monsters\\Snake\\Snake%c%i.WAV", "Monsters\\Snake\\SnakR.TRN", 160, 1270, false, false, true, { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, 22, 26, 23, 120, 170, AI_SNAKE, MFLAG_SEARCH , 1, 105, 8, 12, 24, 0, 0, 0, 0, 65, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 3139 },
{ N_("Gold Viper"), "Monsters\\Snake\\Snake%c.CL2", "Monsters\\Snake\\Snake%c%i.WAV", "Monsters\\Snake\\Snakg.TRN", 160, 1270, false, false, true, { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, 24, 27, 25, 140, 180, AI_SNAKE, MFLAG_SEARCH , 2, 120, 8, 15, 26, 0, 0, 0, 0, 70, MC_DEMON, IMMUNE_MAGIC | RESIST_LIGHTNING , IMMUNE_MAGIC | RESIST_LIGHTNING , 7, 0, 3540 },
{ N_("Azure Drake"), "Monsters\\Snake\\Snake%c.CL2", "Monsters\\Snake\\Snake%c%i.WAV", "Monsters\\Snake\\Snakb.TRN", 160, 1270, false, false, true, { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, 28, 30, 27, 160, 200, AI_SNAKE, MFLAG_SEARCH , 3, 130, 8, 18, 30, 0, 0, 0, 0, 75, MC_DEMON, RESIST_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING , 7, 0, 3791 },
{ N_("Black Knight"), "Monsters\\Black\\Black%c.CL2", "Monsters\\Black\\Black%c%i.WAV", nullptr, 160, 2120, false, false, false, { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, 23, 27, 24, 150, 150, AI_SKELSD, MFLAG_SEARCH , 0, 110, 8, 15, 20, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3360 },
{ N_("Doom Guard"), "Monsters\\Black\\Black%c.CL2", "Monsters\\Black\\Black%c%i.WAV", "Monsters\\Black\\BlkKntRT.TRN", 160, 2120, false, false, true, { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, 25, 29, 26, 165, 165, AI_SKELSD, MFLAG_SEARCH , 0, 130, 8, 18, 25, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 7, 0, 3650 },
{ N_("Steel Lord"), "Monsters\\Black\\Black%c.CL2", "Monsters\\Black\\Black%c%i.WAV", "Monsters\\Black\\BlkKntBT.TRN", 160, 2120, false, false, true, { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, 27, 30, 28, 180, 180, AI_SKELSD, MFLAG_SEARCH , 1, 120, 8, 20, 30, 0, 0, 0, 0, 80, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4252 },
{ N_("Blood Knight"), "Monsters\\Black\\Black%c.CL2", "Monsters\\Black\\Black%c%i.WAV", "Monsters\\Black\\BlkKntBe.TRN", 160, 2120, false, false, true, { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, 24, 26, 30, 200, 200, AI_SKELSD, MFLAG_SEARCH , 1, 130, 8, 25, 35, 0, 0, 0, 0, 85, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 5130 },
{ N_("The Shredded"), "Monsters\\Unrav\\Unrav%c.CL2", "Monsters\\newsfx\\Shred%c%i.WAV", nullptr, 96, 484, false, false, false, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, 32, 35, 23, 70, 90, AI_SKELSD, 0 , 0, 75, 7, 4, 12, 0, 0, 0, 0, 65, MC_UNDEAD, RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 900 },
{ N_("Hollow One"), "Monsters\\Unrav\\Unrav%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 96, 484, false, false, false, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, 34, 37, 27, 135, 240, AI_SKELSD, 0 , 1, 75, 7, 12, 24, 0, 0, 0, 0, 75, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 4374 },
{ N_("Pain Master"), "Monsters\\Unrav\\Unrav%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 96, 484, false, false, false, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, 36, 39, 29, 110, 200, AI_SKELSD, 0 , 2, 80, 7, 16, 30, 0, 0, 0, 0, 80, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 5147 },
{ N_("Reality Weaver"), "Monsters\\Unrav\\Unrav%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 96, 484, false, false, false, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, 38, 39, 30, 135, 240, AI_SKELSD, 0 , 3, 85, 7, 20, 35, 0, 0, 0, 0, 85, MC_UNDEAD, RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 5925 },
{ N_("Succubus"), "Monsters\\Succ\\Scbs%c.CL2", "Monsters\\Succ\\Scbs%c%i.WAV", nullptr, 128, 980, false, false, false, { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, 22, 26, 24, 120, 150, AI_SUCC, MFLAG_CAN_OPEN_DOOR, 0, 100, 10, 1, 20, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC , IMMUNE_MAGIC | RESIST_FIRE , 3, 0, 3696 },
{ N_("Snow Witch"), "Monsters\\Succ\\Scbs%c.CL2", "Monsters\\Succ\\Scbs%c%i.WAV", "Monsters\\Succ\\Succb.TRN", 128, 980, false, false, true, { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, 25, 28, 26, 135, 175, AI_SUCC, MFLAG_CAN_OPEN_DOOR, 1, 110, 10, 1, 24, 0, 0, 0, 0, 65, MC_DEMON, RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 4084 },
{ N_("Hell Spawn"), "Monsters\\Succ\\Scbs%c.CL2", "Monsters\\Succ\\Scbs%c%i.WAV", "Monsters\\Succ\\Succrw.TRN", 128, 980, false, false, true, { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, 27, 30, 28, 150, 200, AI_SUCC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 115, 10, 1, 30, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 4480 },
{ N_("Soul Burner"), "Monsters\\Succ\\Scbs%c.CL2", "Monsters\\Succ\\Scbs%c%i.WAV", "Monsters\\Succ\\Succbw.TRN", 128, 980, false, false, true, { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, 28, 30, 30, 140, 225, AI_SUCC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 120, 10, 1, 35, 0, 0, 0, 0, 85, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 3, 0, 4644 },
{ N_("Counselor"), "Monsters\\Mage\\Mage%c.CL2", "Monsters\\Mage\\Mage%c%i.WAV", nullptr, 128, 2000, true, false, false, { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, 24, 26, 25, 70, 70, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 0, 90, 8, 8, 20, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 7, 0, 4070 },
{ N_("Magistrate"), "Monsters\\Mage\\Mage%c.CL2", "Monsters\\Mage\\Mage%c%i.WAV", "Monsters\\Mage\\Cnselg.TRN", 128, 2000, true, false, true, { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, 26, 28, 27, 85, 85, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 1, 100, 8, 10, 24, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4478 },
{ N_("Cabalist"), "Monsters\\Mage\\Mage%c.CL2", "Monsters\\Mage\\Mage%c%i.WAV", "Monsters\\Mage\\Cnselgd.TRN", 128, 2000, true, false, true, { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, 28, 30, 29, 120, 120, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 2, 110, 8, 14, 30, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4929 },
{ N_("Advocate"), "Monsters\\Mage\\Mage%c.CL2", "Monsters\\Mage\\Mage%c%i.WAV", "Monsters\\Mage\\Cnselbk.TRN", 128, 2000, true, false, true, { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, 30, 30, 30, 145, 145, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 3, 120, 8, 15, 25, 0, 0, 0, 0, 0, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4968 },
{ N_("Golem"), "Monsters\\Golem\\Golem%c.CL2", "Monsters\\Golem\\Golm%c%i.WAV", nullptr, 96, 386, true, false, false, { 0, 16, 12, 0, 12, 20 }, { 0, 0, 0, 0, 0, 0 }, 0, 0, 12, 1, 1, AI_GOLUM, MFLAG_CAN_OPEN_DOOR, 0, 0, 7, 1, 1, 0, 0, 0, 0, 1, MC_DEMON, 0 , 0 , 0, 0, 0 },
{ N_("The Dark Lord"), "Monsters\\Diablo\\Diablo%c.CL2", "Monsters\\Diablo\\Diablo%c%i.WAV", nullptr, 160, 2000, true, true, false, { 16, 6, 16, 6, 16, 16 }, { 0, 0, 0, 0, 0, 0 }, 50, 50, 45, 3333, 3333, AI_DIABLO, MFLAG_KNOCKBACK | MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 220, 4, 30, 60, 0, 11, 0, 0, 90, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 31666 },
{ N_("The Arch-Litch Malignus"), "Monsters\\DarkMage\\Dmage%c.CL2", "Monsters\\DarkMage\\Dmag%c%i.WAV", nullptr, 128, 1060, true, false, false, { 6, 1, 21, 6, 23, 18 }, { 0, 0, 0, 0, 0, 0 }, 40, 41, 30, 160, 160, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 3, 120, 8, 20, 40, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4968 },
{ N_("Hellboar"), "Monsters\\Fork\\Fork%c.CL2", "Monsters\\newsfx\\HBoar%c%i.WAV", nullptr, 188, 800, false, false, false, { 10, 10, 15, 6, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, 32, 35, 23, 80, 100, AI_SKELSD, MFLAG_KNOCKBACK | MFLAG_SEARCH , 2, 70, 7, 16, 24, 0, 0, 0, 0, 60, MC_DEMON, 0 , RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 750 },
{ N_("Stinger"), "Monsters\\Scorp\\Scorp%c.CL2", "Monsters\\newsfx\\Stingr%c%i.WAV", nullptr, 64, 305, false, false, false, { 10, 10, 12, 6, 15, 0 }, { 2, 0, 0, 0, 0, 0 }, 32, 35, 22, 30, 40, AI_SKELSD, 0 , 3, 85, 8, 1, 20, 0, 0, 0, 0, 50, MC_ANIMAL, 0 , RESIST_LIGHTNING , 1, 0, 500 },
{ N_("Psychorb"), "Monsters\\Eye\\Eye%c.CL2", "Monsters\\newsfx\\psyco%c%i.WAV", nullptr, 156, 800, false, false, false, { 12, 13, 13, 7, 21, 0 }, { 2, 0, 0, 0, 0, 0 }, 32, 35, 22, 20, 30, AI_PSYCHORB, 0 , 3, 80, 8, 10, 10, 0, 0, 0, 0, 40, MC_ANIMAL, 0 , RESIST_FIRE , 6, 0, 450 },
{ N_("Arachnon"), "Monsters\\Spider\\Spider%c.CL2", "Monsters\\newsfx\\SLord%c%i.WAV", nullptr, 148, 800, false, false, false, { 12, 10, 15, 6, 20, 0 }, { 2, 0, 0, 0, 0, 0 }, 32, 35, 22, 60, 80, AI_SKELSD, MFLAG_SEARCH , 3, 50, 8, 5, 15, 0, 0, 0, 0, 50, MC_ANIMAL, 0 , RESIST_LIGHTNING , 7, 0, 500 },
{ N_("Felltwin"), "Monsters\\TSneak\\TSneak%c.CL2", "Monsters\\newsfx\\FTwin%c%i.WAV", nullptr, 128, 800, false, false, false, { 13, 13, 15, 11, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, 32, 35, 22, 50, 70, AI_SKELSD, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 70, 8, 10, 18, 0, 0, 0, 0, 50, MC_DEMON, IMMUNE_NULL_40 , RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 600 },
{ N_("Hork Spawn"), "Monsters\\Spawn\\Spawn%c.CL2", "Monsters\\newsfx\\HSpawn%c%i.WAV", nullptr, 164, 520, false, true, false, { 15, 12, 14, 11, 14, 0 }, { 0, 0, 0, 0, 0, 0 }, 34, 37, 22, 30, 30, AI_SKELSD, 0 , 3, 60, 8, 10, 25, 0, 0, 0, 0, 25, MC_DEMON, RESIST_MAGIC , RESIST_MAGIC , 3, 0, 250 },
{ N_("Venomtail"), "Monsters\\WScorp\\WScorp%c.CL2", "Monsters\\newsfx\\Stingr%c%i.WAV", nullptr, 86, 305, false, false, false, { 10, 10, 12, 6, 15, 0 }, { 2, 0, 0, 0, 0, 0 }, 36, 39, 24, 40, 50, AI_SKELSD, 0 , 3, 85, 8, 1, 30, 0, 0, 0, 0, 60, MC_ANIMAL, RESIST_LIGHTNING , IMMUNE_LIGHTNING , 1, 0, 1000 },
{ N_("Necromorb"), "Monsters\\Eye2\\Eye2%c.CL2", "Monsters\\newsfx\\Psyco%c%i.WAV", nullptr, 140, 800, false, false, false, { 12, 13, 13, 7, 21, 0 }, { 2, 0, 0, 0, 0, 0 }, 36, 39, 24, 30, 40, AI_NECROMORB, 0 , 3, 80, 8, 20, 20, 0, 0, 0, 0, 50, MC_ANIMAL, RESIST_FIRE , IMMUNE_FIRE | RESIST_LIGHTNING , 6, 0, 1100 },
{ N_("Spider Lord"), "Monsters\\bSpidr\\bSpidr%c.CL2", "Monsters\\newsfx\\SLord%c%i.WAV", nullptr, 148, 800, true, true, false, { 12, 10, 15, 6, 20, 10 }, { 2, 0, 0, 0, 0, 0 }, 36, 39, 24, 80, 100, AI_ACID, MFLAG_SEARCH , 3, 60, 8, 8, 20, 75, 8, 10, 10, 60, MC_ANIMAL, RESIST_LIGHTNING , RESIST_FIRE | IMMUNE_LIGHTNING , 7, 0, 1250 },
{ N_("Lashworm"), "Monsters\\Clasp\\Clasp%c.CL2", "Monsters\\newsfx\\Lworm%c%i.WAV", nullptr, 176, 800, false, false, false, { 10, 12, 15, 6, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, 36, 39, 20, 30, 30, AI_SKELSD, 0 , 3, 90, 8, 12, 20, 0, 0, 0, 0, 50, MC_ANIMAL, 0 , RESIST_FIRE , 3, 0, 600 },
{ N_("Torchant"), "Monsters\\AntWorm\\Worm%c.CL2", "Monsters\\newsfx\\TchAnt%c%i.WAV", nullptr, 192, 800, false, false, false, { 14, 12, 12, 6, 20, 0 }, { 2, 0, 0, 0, 0, 0 }, 36, 39, 22, 60, 80, AI_TORCHANT, 0 , 3, 75, 8, 20, 30, 0, 0, 0, 0, 70, MC_ANIMAL, IMMUNE_FIRE , RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 7, 0, 1250 },
{ N_("Hork Demon"), "Monsters\\HorkD\\HorkD%c.CL2", "Monsters\\newsfx\\HDemon%c%i.WAV", nullptr, 138, 800, true, true, false, { 15, 8, 16, 6, 16, 9 }, { 2, 0, 0, 0, 0, 2 }, 36, 37, 27, 120, 160, AI_SKELSD, 0 , 3, 60, 8, 20, 35, 80, 8, 0, 0, 80, MC_DEMON, RESIST_LIGHTNING , RESIST_MAGIC | IMMUNE_LIGHTNING , 7, 0, 2000 },
{ N_("Hell Bug"), "Monsters\\Hellbug\\Hellbg%c.CL2", "Monsters\\newsfx\\Defile%c%i.WAV", nullptr, 198, 800, true, true, false, { 8, 8, 14, 6, 14, 12 }, { 0, 0, 0, 0, 0, 0 }, 38, 39, 30, 240, 240, AI_SKELSD, MFLAG_SEARCH , 3, 110, 8, 20, 30, 90, 8, 50, 60, 80, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 7, 0, 5000 },
{ N_("Gravedigger"), "Monsters\\Gravdg\\Gravdg%c.CL2", "Monsters\\newsfx\\GDiggr%c%i.WAV", nullptr, 124, 800, true, true, false, { 24, 24, 12, 6, 16, 16 }, { 2, 0, 0, 0, 0, 0 }, 40, 41, 26, 120, 240, AI_SCAV, MFLAG_CAN_OPEN_DOOR, 3, 80, 6, 2, 12, 0, 0, 0, 0, 20, MC_UNDEAD, IMMUNE_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 2000 },
{ N_("Tomb Rat"), "Monsters\\Rat\\Rat%c.CL2", "Monsters\\newsfx\\TmbRat%c%i.WAV", nullptr, 104, 550, false, false, false, { 11, 8, 12, 6, 20, 0 }, { 2, 0, 0, 0, 0, 0 }, 40, 43, 24, 80, 120, AI_SKELSD, 0 , 3, 120, 8, 12, 25, 0, 0, 0, 0, 30, MC_ANIMAL, 0 , RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 1800 },
{ N_("Firebat"), "Monsters\\Hellbat\\Helbat%c.CL2", "Monsters\\newsfx\\HelBat%c%i.WAV", nullptr, 96, 550, false, false, false, { 18, 16, 14, 6, 18, 11 }, { 2, 0, 0, 0, 0, 0 }, 40, 43, 24, 60, 80, AI_FIREBAT, 0 , 3, 100, 8, 15, 20, 0, 0, 0, 0, 70, MC_ANIMAL, IMMUNE_FIRE , RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 7, 0, 2400 },
{ N_("Skullwing"), "Monsters\\Demskel\\Demskl%c.CL2", "Monsters\\newsfx\\SWing%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 128, 1740, true, false, false, { 10, 8, 20, 6, 24, 16 }, { 3, 0, 0, 0, 0, 0 }, 40, 43, 27, 70, 70, AI_SKELSD, 0 , 0, 75, 7, 15, 20, 75, 9, 15, 20, 80, MC_UNDEAD, RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3000 },
{ N_("Lich"), "Monsters\\Lich\\Lich%c.CL2", "Monsters\\newsfx\\Lich%c%i.WAV", nullptr, 96, 800, false, true, false, { 12, 10, 10, 7, 21, 0 }, { 2, 0, 0, 0, 2, 0 }, 40, 43, 25, 80, 100, AI_LICH, 0 , 3, 100, 8, 15, 20, 0, 0, 0, 0, 60, MC_UNDEAD, RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 3000 },
{ N_("Crypt Demon"), "Monsters\\Bubba\\Bubba%c.CL2", "Monsters\\newsfx\\Crypt%c%i.WAV", nullptr, 154, 800, false, true, false, { 8, 18, 12, 8, 21, 0 }, { 3, 0, 0, 0, 0, 0 }, 42, 45, 28, 200, 240, AI_SKELSD, 0 , 3, 100, 8, 20, 40, 0, 0, 0, 0, 85, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 3200 },
{ N_("Hellbat"), "Monsters\\Hellbat2\\bhelbt%c.CL2", "Monsters\\newsfx\\HelBat%c%i.WAV", nullptr, 96, 550, true, false, false, { 18, 16, 14, 6, 18, 11 }, { 2, 0, 0, 0, 0, 0 }, 44, 47, 29, 100, 140, AI_TORCHANT, 0 , 3, 110, 8, 30, 30, 0, 0, 0, 0, 80, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 7, 0, 3600 },
{ N_("Bone Demon"), "Monsters\\Demskel\\Demskl%c.CL2", "Monsters\\newsfx\\SWing%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 128, 1740, true, true, false, { 10, 8, 20, 6, 24, 16 }, { 3, 0, 0, 0, 0, 0 }, 44, 47, 30, 240, 280, AI_BONEDEMON, 0 , 0, 100, 8, 40, 50, 160, 12, 50, 50, 50, MC_UNDEAD, IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 5000 },
{ N_("Arch Lich"), "Monsters\\Lich2\\Lich2%c.CL2", "Monsters\\newsfx\\Lich%c%i.WAV", nullptr, 136, 800, false, true, false, { 12, 10, 10, 7, 21, 0 }, { 2, 0, 0, 0, 2, 0 }, 44, 47, 30, 180, 200, AI_ARCHLICH, 0 , 3, 120, 8, 30, 30, 0, 0, 0, 0, 75, MC_UNDEAD, RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 4000 },
{ N_("Biclops"), "Monsters\\Byclps\\Byclps%c.CL2", "Monsters\\newsfx\\Biclop%c%i.WAV", nullptr, 180, 800, false, false, false, { 10, 11, 16, 6, 16, 0 }, { 2, 0, 0, 0, 2, 0 }, 44, 47, 30, 200, 240, AI_SKELSD, MFLAG_KNOCKBACK | MFLAG_CAN_OPEN_DOOR, 3, 90, 8, 40, 50, 0, 0, 0, 0, 80, MC_DEMON, RESIST_LIGHTNING , RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 4000 },
{ N_("Flesh Thing"), "Monsters\\Flesh\\Flesh%c.CL2", "Monsters\\newsfx\\FleshT%c%i.WAV", nullptr, 164, 800, false, true, false, { 15, 24, 15, 6, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, 44, 47, 28, 300, 400, AI_SKELSD, 0 , 3, 150, 8, 12, 18, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 4000 },
{ N_("Reaper"), "Monsters\\Reaper\\Reap%c.CL2", "Monsters\\newsfx\\Reaper%c%i.WAV", nullptr, 180, 800, false, false, false, { 12, 10, 14, 6, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, 44, 47, 30, 260, 300, AI_SKELSD, 0 , 3, 120, 8, 30, 35, 0, 0, 0, 0, 90, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 3, 0, 6000 },
{ N_("Zombie"), "Monsters\\Zombie\\Zombie%c.CL2", "Monsters\\Zombie\\Zombie%c%i.WAV", nullptr, 128, 799, false, false, false, { 11, 24, 12, 6, 16, 0 }, { 4, 1, 1, 1, 1, 1 }, 1, 3, 1, 4, 7, AI_ZOMBIE, 0 , 0, 10, 8, 2, 5, 0, 0, 0, 0, 5, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 54 },
{ N_("Ghoul"), "Monsters\\Zombie\\Zombie%c.CL2", "Monsters\\Zombie\\Zombie%c%i.WAV", "Monsters\\Zombie\\Bluered.TRN", 128, 799, false, false, true, { 11, 24, 12, 6, 16, 0 }, { 4, 1, 1, 1, 1, 1 }, 2, 4, 2, 7, 11, AI_ZOMBIE, 0 , 1, 10, 8, 3, 10, 0, 0, 0, 0, 10, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 58 },
{ N_("Rotting Carcass"), "Monsters\\Zombie\\Zombie%c.CL2", "Monsters\\Zombie\\Zombie%c%i.WAV", "Monsters\\Zombie\\Grey.TRN", 128, 799, false, false, true, { 11, 24, 12, 6, 16, 0 }, { 4, 1, 1, 1, 1, 1 }, 2, 6, 4, 15, 25, AI_ZOMBIE, 0 , 2, 25, 8, 5, 15, 0, 0, 0, 0, 15, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , 3, 0, 136 },
{ N_("Black Death"), "Monsters\\Zombie\\Zombie%c.CL2", "Monsters\\Zombie\\Zombie%c%i.WAV", "Monsters\\Zombie\\Yellow.TRN", 128, 799, false, false, true, { 11, 24, 12, 6, 16, 0 }, { 4, 1, 1, 1, 1, 1 }, 4, 8, 6, 25, 40, AI_ZOMBIE, 0 , 3, 30, 8, 6, 22, 0, 0, 0, 0, 20, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 240 },
{ N_("Fallen One"), "Monsters\\FalSpear\\Phall%c.CL2", "Monsters\\FalSpear\\Phall%c%i.WAV", "Monsters\\FalSpear\\FallenT.TRN", 128, 543, true, true, true, { 11, 11, 13, 11, 18, 13 }, { 3, 1, 1, 1, 1, 1 }, 1, 3, 1, 1, 4, AI_FALLEN, 0 , 0, 15, 7, 1, 3, 0, 5, 0, 0, 0, MC_ANIMAL, 0 , 0 , 3, 0, 46 },
{ N_("Carver"), "Monsters\\FalSpear\\Phall%c.CL2", "Monsters\\FalSpear\\Phall%c%i.WAV", "Monsters\\FalSpear\\Dark.TRN", 128, 543, true, true, true, { 11, 11, 13, 11, 18, 13 }, { 3, 1, 1, 1, 1, 1 }, 2, 5, 3, 4, 8, AI_FALLEN, 0 , 2, 20, 7, 2, 5, 0, 5, 0, 0, 5, MC_ANIMAL, 0 , 0 , 3, 0, 80 },
{ N_("Devil Kin"), "Monsters\\FalSpear\\Phall%c.CL2", "Monsters\\FalSpear\\Phall%c%i.WAV", nullptr, 128, 543, true, true, false, { 11, 11, 13, 11, 18, 13 }, { 3, 1, 1, 1, 1, 1 }, 3, 7, 5, 12, 24, AI_FALLEN, 0 , 2, 25, 7, 3, 7, 0, 5, 0, 0, 10, MC_ANIMAL, 0 , RESIST_FIRE , 3, 0, 155 },
{ N_("Dark One"), "Monsters\\FalSpear\\Phall%c.CL2", "Monsters\\FalSpear\\Phall%c%i.WAV", "Monsters\\FalSpear\\Blue.TRN", 128, 543, true, true, true, { 11, 11, 13, 11, 18, 13 }, { 3, 1, 1, 1, 1, 1 }, 5, 9, 7, 20, 36, AI_FALLEN, 0 , 3, 30, 7, 4, 8, 0, 5, 0, 0, 15, MC_ANIMAL, IMMUNE_NULL_40 , RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 255 },
{ N_("Skeleton"), "Monsters\\SkelAxe\\SklAx%c.CL2", "Monsters\\SkelAxe\\SklAx%c%i.WAV", "Monsters\\SkelAxe\\White.TRN", 128, 553, true, false, true, { 12, 8, 13, 6, 17, 16 }, { 5, 1, 1, 1, 1, 1 }, 1, 3, 1, 2, 4, AI_SKELSD, 0 , 0, 20, 8, 1, 4, 0, 0, 0, 0, 0, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 64 },
{ N_("Corpse Axe"), "Monsters\\SkelAxe\\SklAx%c.CL2", "Monsters\\SkelAxe\\SklAx%c%i.WAV", "Monsters\\SkelAxe\\Skelt.TRN", 128, 553, true, false, true, { 12, 8, 13, 6, 17, 16 }, { 4, 1, 1, 1, 1, 1 }, 2, 5, 2, 4, 7, AI_SKELSD, 0 , 1, 25, 8, 3, 5, 0, 0, 0, 0, 0, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 68 },
{ N_("Burning Dead"), "Monsters\\SkelAxe\\SklAx%c.CL2", "Monsters\\SkelAxe\\SklAx%c%i.WAV", nullptr, 128, 553, true, false, false, { 12, 8, 13, 6, 17, 16 }, { 2, 1, 1, 1, 1, 1 }, 2, 6, 4, 8, 12, AI_SKELSD, 0 , 2, 30, 8, 3, 7, 0, 0, 0, 0, 5, MC_UNDEAD, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 3, 0, 154 },
{ N_("Horror"), "Monsters\\SkelAxe\\SklAx%c.CL2", "Monsters\\SkelAxe\\SklAx%c%i.WAV", "Monsters\\SkelAxe\\Black.TRN", 128, 553, true, false, true, { 12, 8, 13, 6, 17, 16 }, { 3, 1, 1, 1, 1, 1 }, 4, 8, 6, 12, 20, AI_SKELSD, 0 , 3, 35, 8, 4, 9, 0, 0, 0, 0, 15, MC_UNDEAD, IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 264 },
{ N_("Fallen One"), "Monsters\\FalSword\\Fall%c.CL2", "Monsters\\FalSword\\Fall%c%i.WAV", "Monsters\\FalSword\\FallenT.TRN", 128, 623, true, true, true, { 12, 12, 13, 11, 14, 15 }, { 3, 1, 1, 1, 1, 1 }, 1, 3, 1, 2, 5, AI_FALLEN, 0 , 0, 15, 8, 1, 4, 0, 5, 0, 0, 10, MC_ANIMAL, 0 , 0 , 3, 0, 52 },
{ N_("Carver"), "Monsters\\FalSword\\Fall%c.CL2", "Monsters\\FalSword\\Fall%c%i.WAV", "Monsters\\FalSword\\Dark.TRN", 128, 623, true, true, true, { 12, 12, 13, 11, 14, 15 }, { 3, 1, 1, 1, 1, 1 }, 2, 5, 3, 5, 9, AI_FALLEN, 0 , 1, 20, 8, 2, 7, 0, 5, 0, 0, 15, MC_ANIMAL, 0 , 0 , 3, 0, 90 },
{ N_("Devil Kin"), "Monsters\\FalSword\\Fall%c.CL2", "Monsters\\FalSword\\Fall%c%i.WAV", nullptr, 128, 623, true, true, false, { 12, 12, 13, 11, 14, 15 }, { 3, 1, 1, 1, 1, 1 }, 3, 7, 5, 16, 24, AI_FALLEN, 0 , 2, 25, 8, 4, 10, 0, 5, 0, 0, 20, MC_ANIMAL, 0 , RESIST_FIRE , 3, 0, 180 },
{ N_("Dark One"), "Monsters\\FalSword\\Fall%c.CL2", "Monsters\\FalSword\\Fall%c%i.WAV", "Monsters\\FalSword\\Blue.TRN", 128, 623, true, true, true, { 12, 12, 13, 11, 14, 15 }, { 3, 1, 1, 1, 1, 1 }, 5, 9, 7, 24, 36, AI_FALLEN, 0 , 3, 30, 8, 4, 12, 0, 5, 0, 0, 25, MC_ANIMAL, IMMUNE_NULL_40 , RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 280 },
{ N_("Scavenger"), "Monsters\\Scav\\Scav%c.CL2", "Monsters\\Scav\\Scav%c%i.WAV", nullptr, 128, 410, true, false, false, { 12, 8, 12, 6, 20, 11 }, { 2, 1, 1, 1, 1, 1 }, 1, 4, 2, 3, 6, AI_SCAV, 0 , 0, 20, 7, 1, 5, 0, 0, 0, 0, 10, MC_ANIMAL, 0 , RESIST_FIRE , 3, 0, 80 },
{ N_("Plague Eater"), "Monsters\\Scav\\Scav%c.CL2", "Monsters\\Scav\\Scav%c%i.WAV", "Monsters\\Scav\\ScavBr.TRN", 128, 410, true, false, true, { 12, 8, 12, 6, 20, 11 }, { 2, 1, 1, 1, 1, 1 }, 3, 6, 4, 12, 24, AI_SCAV, 0 , 1, 30, 7, 1, 8, 0, 0, 0, 0, 20, MC_ANIMAL, 0 , RESIST_LIGHTNING , 3, 0, 188 },
{ N_("Shadow Beast"), "Monsters\\Scav\\Scav%c.CL2", "Monsters\\Scav\\Scav%c%i.WAV", "Monsters\\Scav\\ScavBe.TRN", 128, 410, true, false, true, { 12, 8, 12, 6, 20, 11 }, { 2, 1, 1, 1, 1, 1 }, 4, 8, 6, 24, 36, AI_SCAV, 0 , 2, 35, 7, 3, 12, 0, 0, 0, 0, 25, MC_ANIMAL, IMMUNE_NULL_40 , RESIST_FIRE | IMMUNE_NULL_40 , 3, 0, 375 },
{ N_("Bone Gasher"), "Monsters\\Scav\\Scav%c.CL2", "Monsters\\Scav\\Scav%c%i.WAV", "Monsters\\Scav\\ScavW.TRN", 128, 410, true, false, true, { 12, 8, 12, 6, 20, 11 }, { 2, 1, 1, 1, 1, 1 }, 6, 10, 8, 28, 40, AI_SCAV, 0 , 3, 35, 7, 5, 15, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC | IMMUNE_NULL_40 , RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 552 },
{ N_("Skeleton"), "Monsters\\SkelBow\\SklBw%c.CL2", "Monsters\\SkelBow\\SklBw%c%i.WAV", "Monsters\\SkelBow\\White.TRN", 128, 567, true, false, true, { 9, 8, 16, 5, 16, 16 }, { 4, 1, 1, 1, 1, 1 }, 2, 5, 3, 2, 4, AI_SKELBOW, 0 , 0, 15, 12, 1, 2, 0, 0, 0, 0, 0, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 110 },
{ N_("Corpse Bow"), "Monsters\\SkelBow\\SklBw%c.CL2", "Monsters\\SkelBow\\SklBw%c%i.WAV", "Monsters\\SkelBow\\Skelt.TRN", 128, 567, true, false, true, { 9, 8, 16, 5, 16, 16 }, { 4, 1, 1, 1, 1, 1 }, 3, 7, 5, 8, 16, AI_SKELBOW, 0 , 1, 25, 12, 1, 4, 0, 0, 0, 0, 0, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 210 },
{ N_("Burning Dead"), "Monsters\\SkelBow\\SklBw%c.CL2", "Monsters\\SkelBow\\SklBw%c%i.WAV", nullptr, 128, 567, true, false, false, { 9, 8, 16, 5, 16, 16 }, { 2, 1, 1, 1, 1, 1 }, 5, 9, 7, 10, 24, AI_SKELBOW, 0 , 2, 30, 12, 1, 6, 0, 0, 0, 0, 5, MC_UNDEAD, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 3, 0, 364 },
{ N_("Horror"), "Monsters\\SkelBow\\SklBw%c.CL2", "Monsters\\SkelBow\\SklBw%c%i.WAV", "Monsters\\SkelBow\\Black.TRN", 128, 567, true, false, true, { 9, 8, 16, 5, 16, 16 }, { 3, 1, 1, 1, 1, 1 }, 7, 11, 9, 15, 45, AI_SKELBOW, 0 , 3, 35, 12, 2, 9, 0, 0, 0, 0, 15, MC_UNDEAD, IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 594 },
{ N_("Skeleton Captain"), "Monsters\\SkelSd\\SklSr%c.CL2", "Monsters\\SkelSd\\SklSr%c%i.WAV", "Monsters\\SkelSd\\White.TRN", 128, 575, true, true, true, { 13, 8, 12, 7, 15, 16 }, { 4, 1, 1, 1, 1, 1 }, 1, 4, 2, 3, 6, AI_SKELSD, 0 , 0, 20, 8, 2, 7, 0, 0, 0, 0, 10, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 90 },
{ N_("Corpse Captain"), "Monsters\\SkelSd\\SklSr%c.CL2", "Monsters\\SkelSd\\SklSr%c%i.WAV", "Monsters\\SkelSd\\Skelt.TRN", 128, 575, true, false, true, { 13, 8, 12, 7, 15, 16 }, { 4, 1, 1, 1, 1, 1 }, 2, 6, 4, 12, 20, AI_SKELSD, 0 , 1, 30, 8, 3, 9, 0, 0, 0, 0, 5, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 200 },
{ N_("Burning Dead Captain"), "Monsters\\SkelSd\\SklSr%c.CL2", "Monsters\\SkelSd\\SklSr%c%i.WAV", nullptr, 128, 575, true, false, false, { 13, 8, 12, 7, 15, 16 }, { 4, 1, 1, 1, 1, 1 }, 4, 8, 6, 16, 30, AI_SKELSD, 0 , 2, 35, 8, 4, 10, 0, 0, 0, 0, 15, MC_UNDEAD, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 3, 0, 393 },
{ N_("Horror Captain"), "Monsters\\SkelSd\\SklSr%c.CL2", "Monsters\\SkelSd\\SklSr%c%i.WAV", "Monsters\\SkelSd\\Black.TRN", 128, 575, true, false, true, { 13, 8, 12, 7, 15, 16 }, { 4, 1, 1, 1, 1, 1 }, 6, 10, 8, 35, 50, AI_SKELSD, MFLAG_SEARCH , 3, 40, 8, 5, 14, 0, 0, 0, 0, 30, MC_UNDEAD, IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 604 },
{ N_("Invisible Lord"), "Monsters\\TSneak\\TSneak%c.CL2", "Monsters\\TSneak\\Sneakl%c%i.WAV", nullptr, 128, 800, false, false, false, { 13, 13, 15, 11, 16, 0 }, { 2, 1, 1, 1, 1, 1 }, 36, 39, 14, 278, 278, AI_SKELSD, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 65, 8, 16, 30, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 2000 },
{ N_("Hidden"), "Monsters\\Sneak\\Sneak%c.CL2", "Monsters\\Sneak\\Sneak%c%i.WAV", nullptr, 128, 992, true, false, false, { 16, 8, 12, 8, 24, 15 }, { 2, 1, 1, 1, 1, 1 }, 3, 8, 5, 8, 24, AI_SNEAK, MFLAG_HIDDEN , 0, 35, 8, 3, 6, 0, 0, 0, 0, 25, MC_DEMON, 0 , IMMUNE_NULL_40 , 3, 0, 278 },
{ N_("Stalker"), "Monsters\\Sneak\\Sneak%c.CL2", "Monsters\\Sneak\\Sneak%c%i.WAV", "Monsters\\Sneak\\Sneakv2.TRN", 128, 992, true, false, true, { 16, 8, 12, 8, 24, 15 }, { 2, 1, 1, 1, 1, 1 }, 8, 12, 9, 30, 45, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 1, 40, 8, 8, 16, 0, 0, 0, 0, 30, MC_DEMON, 0 , IMMUNE_NULL_40 , 3, 0, 630 },
{ N_("Unseen"), "Monsters\\Sneak\\Sneak%c.CL2", "Monsters\\Sneak\\Sneak%c%i.WAV", "Monsters\\Sneak\\Sneakv3.TRN", 128, 992, true, false, true, { 16, 8, 12, 8, 24, 15 }, { 2, 1, 1, 1, 1, 1 }, 10, 14, 11, 35, 50, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 2, 45, 8, 12, 20, 0, 0, 0, 0, 30, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 935 },
{ N_("Illusion Weaver"), "Monsters\\Sneak\\Sneak%c.CL2", "Monsters\\Sneak\\Sneak%c%i.WAV", "Monsters\\Sneak\\Sneakv1.TRN", 128, 992, true, false, true, { 16, 8, 12, 8, 24, 15 }, { 2, 1, 1, 1, 1, 1 }, 14, 18, 13, 40, 60, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 3, 60, 8, 16, 24, 0, 0, 0, 0, 30, MC_DEMON, RESIST_MAGIC | RESIST_FIRE , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , 3, 0, 1500 },
{ N_("Satyr Lord"), "Monsters\\GoatLord\\GoatL%c.CL2", "Monsters\\newsfx\\Satyr%c%i.WAV", nullptr, 160, 800, false, false, false, { 13, 13, 14, 9, 16, 0 }, { 2, 1, 1, 1, 1, 1 }, 40, 43, 28, 160, 200, AI_SKELSD, MFLAG_SEARCH , 3, 90, 8, 20, 30, 0, 0, 0, 0, 70, MC_ANIMAL, RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 3, 0, 2800 },
{ N_("Flesh Clan"), "Monsters\\GoatMace\\Goat%c.CL2", "Monsters\\GoatMace\\Goat%c%i.WAV", nullptr, 128, 1030, true, false, false, { 12, 8, 12, 6, 20, 12 }, { 2, 1, 1, 1, 1, 1 }, 6, 10, 8, 30, 45, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 50, 8, 4, 10, 0, 0, 0, 0, 40, MC_DEMON, 0 , 0 , 3, 0, 460 },
{ N_("Stone Clan"), "Monsters\\GoatMace\\Goat%c.CL2", "Monsters\\GoatMace\\Goat%c%i.WAV", "Monsters\\GoatMace\\Beige.TRN", 128, 1030, true, false, true, { 12, 8, 12, 6, 20, 12 }, { 2, 1, 1, 1, 1, 1 }, 8, 12, 10, 40, 55, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 60, 8, 6, 12, 0, 0, 0, 0, 40, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 685 },
{ N_("Fire Clan"), "Monsters\\GoatMace\\Goat%c.CL2", "Monsters\\GoatMace\\Goat%c%i.WAV", "Monsters\\GoatMace\\Red.TRN", 128, 1030, true, false, true, { 12, 8, 12, 6, 20, 12 }, { 2, 1, 1, 1, 1, 1 }, 10, 14, 12, 50, 65, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 70, 8, 8, 16, 0, 0, 0, 0, 45, MC_DEMON, RESIST_FIRE , IMMUNE_FIRE , 3, 0, 906 },
{ N_("Night Clan"), "Monsters\\GoatMace\\Goat%c.CL2", "Monsters\\GoatMace\\Goat%c%i.WAV", "Monsters\\GoatMace\\Gray.TRN", 128, 1030, true, false, true, { 12, 8, 12, 6, 20, 12 }, { 2, 1, 1, 1, 1, 1 }, 12, 16, 14, 55, 70, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 80, 8, 10, 20, 15, 0, 30, 30, 50, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 1190 },
{ N_("Fiend"), "Monsters\\Bat\\Bat%c.CL2", "Monsters\\Bat\\Bat%c%i.WAV", "Monsters\\Bat\\red.trn", 96, 364, false, false, true, { 9, 13, 10, 9, 13, 0 }, { 1, 1, 1, 1, 1, 1 }, 2, 5, 3, 3, 6, AI_BAT, 0 , 0, 35, 5, 1, 6, 0, 0, 0, 0, 0, MC_ANIMAL, 0 , 0 , 6, 0x4000, 102 },
{ N_("Blink"), "Monsters\\Bat\\Bat%c.CL2", "Monsters\\Bat\\Bat%c%i.WAV", nullptr, 96, 364, false, false, false, { 9, 13, 10, 9, 13, 0 }, { 1, 1, 1, 1, 1, 1 }, 5, 9, 7, 12, 28, AI_BAT, 0 , 1, 45, 5, 1, 8, 0, 0, 0, 0, 15, MC_ANIMAL, 0 , 0 , 6, 0x4000, 340 },
{ N_("Gloom"), "Monsters\\Bat\\Bat%c.CL2", "Monsters\\Bat\\Bat%c%i.WAV", "Monsters\\Bat\\grey.trn", 96, 364, false, false, true, { 9, 13, 10, 9, 13, 0 }, { 1, 1, 1, 1, 1, 1 }, 7, 11, 9, 28, 36, AI_BAT, MFLAG_SEARCH , 2, 70, 5, 4, 12, 0, 0, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC | IMMUNE_NULL_40 , 6, 0x4000, 509 },
{ N_("Familiar"), "Monsters\\Bat\\Bat%c.CL2", "Monsters\\Bat\\Bat%c%i.WAV", "Monsters\\Bat\\orange.trn", 96, 364, false, false, true, { 9, 13, 10, 9, 13, 0 }, { 1, 1, 1, 1, 1, 1 }, 11, 15, 13, 20, 35, AI_BAT, MFLAG_SEARCH , 3, 50, 5, 4, 16, 0, 0, 0, 0, 35, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING , RESIST_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 6, 0x4000, 448 },
{ N_("Flesh Clan"), "Monsters\\GoatBow\\GoatB%c.CL2", "Monsters\\GoatBow\\GoatB%c%i.WAV", nullptr, 128, 1040, false, false, false, { 12, 8, 16, 6, 20, 0 }, { 3, 1, 1, 1, 1, 1 }, 6, 10, 8, 20, 35, AI_GOATBOW, MFLAG_CAN_OPEN_DOOR, 0, 35, 13, 1, 7, 0, 0, 0, 0, 35, MC_DEMON, 0 , 0 , 3, 0, 448 },
{ N_("Stone Clan"), "Monsters\\GoatBow\\GoatB%c.CL2", "Monsters\\GoatBow\\GoatB%c%i.WAV", "Monsters\\GoatBow\\Beige.TRN", 128, 1040, false, false, true, { 12, 8, 16, 6, 20, 0 }, { 3, 1, 1, 1, 1, 1 }, 8, 12, 10, 30, 40, AI_GOATBOW, MFLAG_CAN_OPEN_DOOR, 1, 40, 13, 2, 9, 0, 0, 0, 0, 35, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 645 },
{ N_("Fire Clan"), "Monsters\\GoatBow\\GoatB%c.CL2", "Monsters\\GoatBow\\GoatB%c%i.WAV", "Monsters\\GoatBow\\Red.TRN", 128, 1040, false, false, true, { 12, 8, 16, 6, 20, 0 }, { 3, 1, 1, 1, 1, 1 }, 10, 14, 12, 40, 50, AI_GOATBOW, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 45, 13, 3, 11, 0, 0, 0, 0, 35, MC_DEMON, RESIST_FIRE , IMMUNE_FIRE , 3, 0, 822 },
{ N_("Night Clan"), "Monsters\\GoatBow\\GoatB%c.CL2", "Monsters\\GoatBow\\GoatB%c%i.WAV", "Monsters\\GoatBow\\Gray.TRN", 128, 1040, false, false, true, { 12, 8, 16, 6, 20, 0 }, { 3, 1, 1, 1, 1, 1 }, 12, 16, 14, 50, 65, AI_GOATBOW, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 50, 13, 4, 13, 15, 0, 0, 0, 40, MC_DEMON, RESIST_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 3, 0, 1092 },
{ N_("Acid Beast"), "Monsters\\Acid\\Acid%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 716, true, true, false, { 13, 8, 12, 8, 16, 12 }, { 1, 1, 1, 1, 1, 1 }, 10, 14, 11, 40, 66, AI_ACID, 0 , 0, 40, 8, 4, 12, 25, 8, 0, 0, 30, MC_ANIMAL, IMMUNE_ACID , IMMUNE_MAGIC | IMMUNE_ACID , 3, 0, 846 },
{ N_("Poison Spitter"), "Monsters\\Acid\\Acid%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", "Monsters\\Acid\\AcidBlk.TRN", 128, 716, true, true, true, { 13, 8, 12, 8, 16, 12 }, { 1, 1, 1, 1, 1, 1 }, 14, 18, 15, 60, 85, AI_ACID, 0 , 1, 45, 8, 4, 16, 25, 8, 0, 0, 30, MC_ANIMAL, IMMUNE_ACID , IMMUNE_MAGIC | IMMUNE_ACID , 3, 0, 1248 },
{ N_("Pit Beast"), "Monsters\\Acid\\Acid%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", "Monsters\\Acid\\AcidB.TRN", 128, 716, true, true, true, { 13, 8, 12, 8, 16, 12 }, { 1, 1, 1, 1, 1, 1 }, 18, 22, 21, 80, 110, AI_ACID, 0 , 2, 55, 8, 8, 18, 35, 8, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | IMMUNE_ACID , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_ACID , 3, 0, 2060 },
{ N_("Lava Maw"), "Monsters\\Acid\\Acid%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", "Monsters\\Acid\\AcidR.TRN", 128, 716, true, true, true, { 13, 8, 12, 8, 16, 12 }, { 1, 1, 1, 1, 1, 1 }, 22, 27, 25, 100, 150, AI_ACID, 0 , 3, 65, 8, 10, 20, 40, 8, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_ACID , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_ACID , 3, 0, 2940 },
{ N_("Skeleton King"), "Monsters\\SKing\\SKing%c.CL2", "Monsters\\SKing\\SKing%c%i.WAV", "Monsters\\SkelAxe\\White.TRN", 160, 1010, true, true, true, { 8, 6, 16, 6, 16, 6 }, { 2, 1, 1, 1, 1, 2 }, 6, 6, 9, 140, 140, AI_SKELKING, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 60, 8, 6, 16, 0, 0, 0, 0, 70, MC_UNDEAD, IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0x8001, 570 },
{ N_("The Butcher"), "Monsters\\FatC\\FatC%c.CL2", "Monsters\\FatC\\FatC%c%i.WAV", nullptr, 128, 980, false, false, false, { 10, 8, 12, 6, 16, 0 }, { 1, 1, 1, 1, 1, 1 }, 0, 0, 1, 320, 320, AI_CLEAVER, 0 , 3, 50, 8, 6, 12, 0, 0, 0, 0, 50, MC_DEMON, RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 3, 0x8000, 710 },
{ N_("Overlord"), "Monsters\\Fat\\Fat%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 128, 1130, true, false, false, { 8, 10, 15, 6, 16, 10 }, { 4, 1, 1, 1, 1, 1 }, 8, 12, 10, 60, 80, AI_FAT, 0 , 0, 55, 8, 6, 12, 0, 0, 0, 0, 55, MC_DEMON, 0 , RESIST_FIRE , 3, 0, 635 },
{ N_("Mud Man"), "Monsters\\Fat\\Fat%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", "Monsters\\Fat\\Blue.TRN", 128, 1130, true, false, true, { 8, 10, 15, 6, 16, 10 }, { 4, 1, 1, 1, 1, 1 }, 13, 17, 14, 100, 125, AI_FAT, MFLAG_SEARCH , 1, 60, 8, 8, 16, 0, 0, 0, 0, 60, MC_DEMON, 0 , IMMUNE_LIGHTNING , 3, 0, 1165 },
{ N_("Toad Demon"), "Monsters\\Fat\\Fat%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", "Monsters\\Fat\\FatB.TRN", 128, 1130, true, false, true, { 8, 10, 15, 6, 16, 10 }, { 4, 1, 1, 1, 1, 1 }, 15, 19, 16, 135, 160, AI_FAT, MFLAG_SEARCH , 2, 70, 8, 8, 16, 40, 0, 8, 20, 65, MC_DEMON, IMMUNE_MAGIC , IMMUNE_MAGIC | RESIST_LIGHTNING , 3, 0, 1380 },
{ N_("Flayed One"), "Monsters\\Fat\\Fat%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", "Monsters\\Fat\\FatF.TRN", 128, 1130, true, false, true, { 8, 10, 15, 6, 16, 10 }, { 4, 1, 1, 1, 1, 1 }, 19, 23, 20, 160, 200, AI_FAT, MFLAG_SEARCH , 3, 85, 8, 10, 20, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 3, 0, 2058 },
{ N_("Wyrm"), "Monsters\\Worm\\Worm%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 160, 2420, false, false, false, { 13, 13, 13, 11, 19, 0 }, { 1, 1, 1, 1, 1, 1 }, 9, 13, 11, 60, 90, AI_SKELSD, 0 , 0, 40, 8, 4, 10, 0, 0, 0, 0, 25, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC , 3, 0, 660 },
{ N_("Cave Slug"), "Monsters\\Worm\\Worm%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 160, 2420, false, false, false, { 13, 13, 13, 11, 19, 0 }, { 1, 1, 1, 1, 1, 1 }, 11, 15, 13, 75, 110, AI_SKELSD, 0 , 1, 50, 8, 6, 13, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC , 3, 0, 994 },
{ N_("Devil Wyrm"), "Monsters\\Worm\\Worm%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 160, 2420, false, false, false, { 13, 13, 13, 11, 19, 0 }, { 1, 1, 1, 1, 1, 1 }, 13, 17, 15, 100, 140, AI_SKELSD, 0 , 2, 55, 8, 8, 16, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC | RESIST_FIRE , RESIST_MAGIC | RESIST_FIRE , 3, 0, 1320 },
{ N_("Devourer"), "Monsters\\Worm\\Worm%c.CL2", "Monsters\\Fat\\Fat%c%i.WAV", nullptr, 160, 2420, false, false, false, { 13, 13, 13, 11, 19, 0 }, { 1, 1, 1, 1, 1, 1 }, 15, 19, 17, 125, 200, AI_SKELSD, 0 , 3, 60, 8, 10, 20, 0, 0, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , RESIST_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , 3, 0, 1827 },
{ N_("Magma Demon"), "Monsters\\Magma\\Magma%c.CL2", "Monsters\\Magma\\Magma%c%i.WAV", nullptr, 128, 1680, true, true, false, { 8, 10, 14, 7, 18, 18 }, { 2, 1, 1, 1, 1, 1 }, 14, 17, 13, 50, 70, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 45, 4, 2, 10, 50, 13, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 1076 },
{ N_("Blood Stone"), "Monsters\\Magma\\Magma%c.CL2", "Monsters\\Magma\\Magma%c%i.WAV", "Monsters\\Magma\\Yellow.TRN", 128, 1680, true, true, true, { 8, 10, 14, 7, 18, 18 }, { 2, 1, 1, 1, 1, 1 }, 15, 19, 14, 55, 75, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 50, 4, 2, 12, 50, 14, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 1309 },
{ N_("Hell Stone"), "Monsters\\Magma\\Magma%c.CL2", "Monsters\\Magma\\Magma%c%i.WAV", "Monsters\\Magma\\Blue.TRN", 128, 1680, true, true, true, { 8, 10, 14, 7, 18, 18 }, { 2, 1, 1, 1, 1, 1 }, 16, 20, 16, 60, 80, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 60, 4, 2, 20, 60, 14, 0, 0, 50, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 1680 },
{ N_("Lava Lord"), "Monsters\\Magma\\Magma%c.CL2", "Monsters\\Magma\\Magma%c%i.WAV", "Monsters\\Magma\\Wierd.TRN", 128, 1680, true, true, true, { 8, 10, 14, 7, 18, 18 }, { 2, 1, 1, 1, 1, 1 }, 17, 21, 18, 70, 85, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 75, 4, 4, 24, 60, 14, 0, 0, 60, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 2124 },
{ N_("Horned Demon"), "Monsters\\Rhino\\Rhino%c.CL2", "Monsters\\Rhino\\Rhino%c%i.WAV", nullptr, 160, 1630, true, true, false, { 8, 8, 14, 6, 16, 6 }, { 2, 1, 1, 1, 1, 1 }, 12, 16, 13, 40, 80, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 60, 7, 2, 16, 100, 0, 5, 32, 40, MC_ANIMAL, 0 , RESIST_FIRE , 7, 0, 1172 },
{ N_("Mud Runner"), "Monsters\\Rhino\\Rhino%c.CL2", "Monsters\\Rhino\\Rhino%c%i.WAV", "Monsters\\Rhino\\Orange.TRN", 160, 1630, true, true, true, { 8, 8, 14, 6, 16, 6 }, { 2, 1, 1, 1, 1, 1 }, 14, 18, 15, 50, 90, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 70, 7, 6, 18, 100, 0, 12, 36, 45, MC_ANIMAL, 0 , RESIST_FIRE , 7, 0, 1404 },
{ N_("Frost Charger"), "Monsters\\Rhino\\Rhino%c.CL2", "Monsters\\Rhino\\Rhino%c%i.WAV", "Monsters\\Rhino\\Blue.TRN", 160, 1630, true, true, true, { 8, 8, 14, 6, 16, 6 }, { 2, 1, 1, 1, 1, 1 }, 16, 20, 17, 60, 100, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 80, 7, 8, 20, 100, 0, 20, 40, 50, MC_ANIMAL, IMMUNE_MAGIC | RESIST_LIGHTNING , IMMUNE_MAGIC | RESIST_LIGHTNING , 7, 0, 1720 },
{ N_("Obsidian Lord"), "Monsters\\Rhino\\Rhino%c.CL2", "Monsters\\Rhino\\Rhino%c%i.WAV", "Monsters\\Rhino\\RhinoB.TRN", 160, 1630, true, true, true, { 8, 8, 14, 6, 16, 6 }, { 2, 1, 1, 1, 1, 1 }, 18, 22, 19, 70, 110, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 90, 7, 10, 22, 100, 0, 20, 50, 55, MC_ANIMAL, IMMUNE_MAGIC | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 7, 0, 1809 },
{ N_("oldboned"), "Monsters\\Demskel\\Demskl%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 128, 1740, true, true, false, { 10, 8, 20, 6, 24, 16 }, { 3, 1, 1, 1, 1, 1 }, 46, 47, 12, 70, 70, AI_STORM, 0 , 0, 60, 8, 6, 14, 12, 0, 0, 0, 50, MC_DEMON, IMMUNE_MAGIC | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_NULL_40 , 7, 0, 1344 },
{ N_("Red Death"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 1, 1, 1, 1, 1 }, 14, 18, 16, 96, 96, AI_STORM, 0 , 1, 75, 5, 10, 20, 0, 0, 0, 0, 60, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 2168 },
{ N_("Litch Demon"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 1, 1, 1, 1, 1 }, 16, 20, 18, 110, 110, AI_STORM, 0 , 2, 80, 5, 10, 24, 0, 0, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 2736 },
{ N_("Undead Balrog"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 1, 1, 1, 1, 1 }, 20, 24, 22, 130, 130, AI_STORM, 0 , 3, 85, 5, 12, 30, 0, 0, 0, 0, 65, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3575 },
{ N_("Incinerator"), "Monsters\\Fireman\\FireM%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 1460, true, false, false, { 14, 19, 20, 8, 14, 23 }, { 1, 1, 1, 1, 1, 1 }, 40, 43, 16, 30, 45, AI_FIREMAN, 0 , 0, 75, 8, 8, 16, 0, 0, 0, 0, 25, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 3, 0, 1888 },
{ N_("Flame Lord"), "Monsters\\Fireman\\FireM%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 1460, true, false, false, { 14, 19, 20, 8, 14, 23 }, { 1, 1, 1, 1, 1, 1 }, 42, 45, 18, 40, 55, AI_FIREMAN, 0 , 1, 75, 8, 10, 20, 0, 0, 0, 0, 25, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 3, 0, 2250 },
{ N_("Doom Fire"), "Monsters\\Fireman\\FireM%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 1460, true, false, false, { 14, 19, 20, 8, 14, 23 }, { 1, 1, 1, 1, 1, 1 }, 44, 47, 20, 50, 65, AI_FIREMAN, 0 , 2, 80, 8, 12, 24, 0, 0, 0, 0, 30, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 2740 },
{ N_("Hell Burner"), "Monsters\\Fireman\\FireM%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 128, 1460, true, false, false, { 14, 19, 20, 8, 14, 23 }, { 1, 1, 1, 1, 1, 1 }, 46, 47, 22, 60, 80, AI_FIREMAN, 0 , 3, 85, 8, 15, 30, 0, 0, 0, 0, 30, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 3355 },
{ N_("Red Storm"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 1, 1, 1, 1, 1 }, 17, 21, 18, 55, 110, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 80, 5, 8, 18, 75, 8, 4, 16, 30, MC_DEMON, IMMUNE_MAGIC | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_LIGHTNING , 7, 0, 2160 },
{ N_("Storm Rider"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", nullptr, 160, 1740, true, true, false, { 8, 8, 18, 4, 17, 14 }, { 3, 1, 1, 1, 1, 1 }, 19, 23, 20, 60, 120, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 80, 5, 8, 18, 80, 8, 4, 16, 30, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING , IMMUNE_MAGIC | IMMUNE_LIGHTNING , 7, 0, 2391 },
{ N_("Storm Lord"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv2.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 1, 1, 1, 1, 1 }, 21, 25, 22, 75, 135, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 85, 5, 12, 24, 75, 8, 4, 16, 35, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING , IMMUNE_MAGIC | IMMUNE_LIGHTNING , 7, 0, 2775 },
{ N_("Maelstrom"), "Monsters\\Thin\\Thin%c.CL2", "Monsters\\Thin\\Thin%c%i.WAV", "Monsters\\Thin\\Thinv1.TRN", 160, 1740, true, true, true, { 8, 8, 18, 4, 17, 14 }, { 3, 1, 1, 1, 1, 1 }, 23, 27, 24, 90, 150, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 90, 5, 12, 28, 75, 8, 4, 16, 40, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3177 },
{ N_("Devil Kin Brute"), "Monsters\\BigFall\\Fallg%c.CL2", "Monsters\\newsfx\\KBrute%c%i.WAV", nullptr, 128, 800, true, false, false, { 10, 8, 11, 8, 17, 0 }, { 1, 1, 1, 1, 2, 2 }, 40, 43, 27, 120, 160, AI_SKELSD, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 100, 6, 18, 24, 0, 0, 0, 0, 70, MC_ANIMAL, RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 2400 },
{ N_("Winged-Demon"), "Monsters\\Gargoyle\\Gargo%c.CL2", "Monsters\\Gargoyle\\Gargo%c%i.WAV", nullptr, 160, 1650, true, false, false, { 14, 14, 14, 10, 18, 14 }, { 1, 1, 1, 1, 1, 2 }, 8, 12, 9, 45, 60, AI_GARG, MFLAG_CAN_OPEN_DOOR, 0, 50, 7, 10, 16, 0, 0, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 6, 0, 662 },
{ N_("Gargoyle"), "Monsters\\Gargoyle\\Gargo%c.CL2", "Monsters\\Gargoyle\\Gargo%c%i.WAV", "Monsters\\Gargoyle\\GarE.TRN", 160, 1650, true, false, true, { 14, 14, 14, 10, 18, 14 }, { 1, 1, 1, 1, 1, 2 }, 12, 16, 13, 60, 90, AI_GARG, MFLAG_CAN_OPEN_DOOR, 1, 65, 7, 10, 16, 0, 0, 0, 0, 45, MC_DEMON, IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 6, 0, 1205 },
{ N_("Blood Claw"), "Monsters\\Gargoyle\\Gargo%c.CL2", "Monsters\\Gargoyle\\Gargo%c%i.WAV", "Monsters\\Gargoyle\\GargBr.TRN", 160, 1650, true, false, true, { 14, 14, 14, 10, 18, 14 }, { 1, 1, 1, 1, 1, 1 }, 16, 20, 19, 75, 125, AI_GARG, MFLAG_CAN_OPEN_DOOR, 2, 80, 7, 14, 22, 0, 0, 0, 0, 50, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 6, 0, 1873 },
{ N_("Death Wing"), "Monsters\\Gargoyle\\Gargo%c.CL2", "Monsters\\Gargoyle\\Gargo%c%i.WAV", "Monsters\\Gargoyle\\GargB.TRN", 160, 1650, true, false, true, { 14, 14, 14, 10, 18, 14 }, { 1, 1, 1, 1, 1, 1 }, 18, 22, 23, 90, 150, AI_GARG, MFLAG_CAN_OPEN_DOOR, 3, 95, 7, 16, 28, 0, 0, 0, 0, 60, MC_DEMON, IMMUNE_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 6, 0, 2278 },
{ N_("Slayer"), "Monsters\\Mega\\Mega%c.CL2", "Monsters\\Mega\\Mega%c%i.WAV", nullptr, 160, 2220, true, true, false, { 6, 7, 14, 1, 24, 5 }, { 3, 1, 1, 1, 2, 1 }, 19, 23, 20, 120, 140, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 100, 8, 12, 20, 0, 3, 0, 0, 60, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE , RESIST_MAGIC | IMMUNE_FIRE , 7, 0, 2300 },
{ N_("Guardian"), "Monsters\\Mega\\Mega%c.CL2", "Monsters\\Mega\\Mega%c%i.WAV", "Monsters\\Mega\\Guard.TRN", 160, 2220, true, true, true, { 6, 7, 14, 1, 24, 5 }, { 3, 1, 1, 1, 2, 1 }, 21, 25, 22, 140, 160, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 110, 8, 14, 22, 0, 3, 0, 0, 65, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE , RESIST_MAGIC | IMMUNE_FIRE , 7, 0, 2714 },
{ N_("Vortex Lord"), "Monsters\\Mega\\Mega%c.CL2", "Monsters\\Mega\\Mega%c%i.WAV", "Monsters\\Mega\\Vtexl.TRN", 160, 2220, true, true, true, { 6, 7, 14, 1, 24, 5 }, { 3, 1, 1, 1, 2, 1 }, 23, 26, 24, 160, 180, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 120, 8, 18, 24, 0, 3, 0, 0, 70, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3252 },
{ N_("Balrog"), "Monsters\\Mega\\Mega%c.CL2", "Monsters\\Mega\\Mega%c%i.WAV", "Monsters\\Mega\\Balr.TRN", 160, 2220, true, true, true, { 6, 7, 14, 1, 24, 5 }, { 3, 1, 1, 1, 2, 1 }, 25, 29, 26, 180, 200, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 130, 8, 22, 30, 0, 3, 0, 0, 75, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3643 },
{ N_("Cave Viper"), "Monsters\\Snake\\Snake%c.CL2", "Monsters\\Snake\\Snake%c%i.WAV", nullptr, 160, 1270, false, false, false, { 12, 11, 13, 5, 18, 0 }, { 2, 1, 1, 1, 1, 1 }, 20, 24, 21, 100, 150, AI_SNAKE, MFLAG_SEARCH , 0, 90, 8, 8, 20, 0, 0, 0, 0, 60, MC_DEMON, IMMUNE_MAGIC , IMMUNE_MAGIC , 7, 0, 2725 },
{ N_("Fire Drake"), "Monsters\\Snake\\Snake%c.CL2", "Monsters\\Snake\\Snake%c%i.WAV", "Monsters\\Snake\\SnakR.TRN", 160, 1270, false, false, true, { 12, 11, 13, 5, 18, 0 }, { 2, 1, 1, 1, 1, 1 }, 22, 26, 23, 120, 170, AI_SNAKE, MFLAG_SEARCH , 1, 105, 8, 12, 24, 0, 0, 0, 0, 65, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE , IMMUNE_MAGIC | IMMUNE_FIRE , 7, 0, 3139 },
{ N_("Gold Viper"), "Monsters\\Snake\\Snake%c.CL2", "Monsters\\Snake\\Snake%c%i.WAV", "Monsters\\Snake\\Snakg.TRN", 160, 1270, false, false, true, { 12, 11, 13, 5, 18, 0 }, { 2, 1, 1, 1, 1, 1 }, 24, 27, 25, 140, 180, AI_SNAKE, MFLAG_SEARCH , 2, 120, 8, 15, 26, 0, 0, 0, 0, 70, MC_DEMON, IMMUNE_MAGIC | RESIST_LIGHTNING , IMMUNE_MAGIC | RESIST_LIGHTNING , 7, 0, 3540 },
{ N_("Azure Drake"), "Monsters\\Snake\\Snake%c.CL2", "Monsters\\Snake\\Snake%c%i.WAV", "Monsters\\Snake\\Snakb.TRN", 160, 1270, false, false, true, { 12, 11, 13, 5, 18, 0 }, { 2, 1, 1, 1, 1, 1 }, 28, 30, 27, 160, 200, AI_SNAKE, MFLAG_SEARCH , 3, 130, 8, 18, 30, 0, 0, 0, 0, 75, MC_DEMON, RESIST_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING , 7, 0, 3791 },
{ N_("Black Knight"), "Monsters\\Black\\Black%c.CL2", "Monsters\\Black\\Black%c%i.WAV", nullptr, 160, 2120, false, false, false, { 8, 8, 16, 4, 24, 0 }, { 2, 1, 1, 1, 1, 1 }, 23, 27, 24, 150, 150, AI_SKELSD, MFLAG_SEARCH , 0, 110, 8, 15, 20, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3360 },
{ N_("Doom Guard"), "Monsters\\Black\\Black%c.CL2", "Monsters\\Black\\Black%c%i.WAV", "Monsters\\Black\\BlkKntRT.TRN", 160, 2120, false, false, true, { 8, 8, 16, 4, 24, 0 }, { 2, 1, 1, 1, 1, 1 }, 25, 29, 26, 165, 165, AI_SKELSD, MFLAG_SEARCH , 0, 130, 8, 18, 25, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_NULL_40 , 7, 0, 3650 },
{ N_("Steel Lord"), "Monsters\\Black\\Black%c.CL2", "Monsters\\Black\\Black%c%i.WAV", "Monsters\\Black\\BlkKntBT.TRN", 160, 2120, false, false, true, { 8, 8, 16, 4, 24, 0 }, { 2, 1, 1, 1, 1, 1 }, 27, 30, 28, 180, 180, AI_SKELSD, MFLAG_SEARCH , 1, 120, 8, 20, 30, 0, 0, 0, 0, 80, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4252 },
{ N_("Blood Knight"), "Monsters\\Black\\Black%c.CL2", "Monsters\\Black\\Black%c%i.WAV", "Monsters\\Black\\BlkKntBe.TRN", 160, 2120, false, false, true, { 8, 8, 16, 4, 24, 0 }, { 2, 1, 1, 1, 1, 1 }, 24, 26, 30, 200, 200, AI_SKELSD, MFLAG_SEARCH , 1, 130, 8, 25, 35, 0, 0, 0, 0, 85, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 5130 },
{ N_("The Shredded"), "Monsters\\Unrav\\Unrav%c.CL2", "Monsters\\newsfx\\Shred%c%i.WAV", nullptr, 96, 484, false, false, false, { 10, 10, 12, 5, 16, 0 }, { 1, 1, 1, 1, 1, 1 }, 32, 35, 23, 70, 90, AI_SKELSD, 0 , 0, 75, 7, 4, 12, 0, 0, 0, 0, 65, MC_UNDEAD, RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 900 },
{ N_("Hollow One"), "Monsters\\Unrav\\Unrav%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 96, 484, false, false, false, { 10, 10, 12, 5, 16, 0 }, { 1, 1, 1, 1, 1, 1 }, 34, 37, 27, 135, 240, AI_SKELSD, 0 , 1, 75, 7, 12, 24, 0, 0, 0, 0, 75, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 4374 },
{ N_("Pain Master"), "Monsters\\Unrav\\Unrav%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 96, 484, false, false, false, { 10, 10, 12, 5, 16, 0 }, { 1, 1, 1, 1, 1, 1 }, 36, 39, 29, 110, 200, AI_SKELSD, 0 , 2, 80, 7, 16, 30, 0, 0, 0, 0, 80, MC_UNDEAD, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 5147 },
{ N_("Reality Weaver"), "Monsters\\Unrav\\Unrav%c.CL2", "Monsters\\Acid\\Acid%c%i.WAV", nullptr, 96, 484, false, false, false, { 10, 10, 12, 5, 16, 0 }, { 1, 1, 1, 1, 1, 1 }, 38, 39, 30, 135, 240, AI_SKELSD, 0 , 3, 85, 7, 20, 35, 0, 0, 0, 0, 85, MC_UNDEAD, RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 5925 },
{ N_("Succubus"), "Monsters\\Succ\\Scbs%c.CL2", "Monsters\\Succ\\Scbs%c%i.WAV", nullptr, 128, 980, false, false, false, { 14, 8, 16, 7, 24, 0 }, { 1, 1, 1, 1, 1, 1 }, 22, 26, 24, 120, 150, AI_SUCC, MFLAG_CAN_OPEN_DOOR, 0, 100, 10, 1, 20, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC , IMMUNE_MAGIC | RESIST_FIRE , 3, 0, 3696 },
{ N_("Snow Witch"), "Monsters\\Succ\\Scbs%c.CL2", "Monsters\\Succ\\Scbs%c%i.WAV", "Monsters\\Succ\\Succb.TRN", 128, 980, false, false, true, { 14, 8, 16, 7, 24, 0 }, { 1, 1, 1, 1, 1, 1 }, 25, 28, 26, 135, 175, AI_SUCC, MFLAG_CAN_OPEN_DOOR, 1, 110, 10, 1, 24, 0, 0, 0, 0, 65, MC_DEMON, RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 4084 },
{ N_("Hell Spawn"), "Monsters\\Succ\\Scbs%c.CL2", "Monsters\\Succ\\Scbs%c%i.WAV", "Monsters\\Succ\\Succrw.TRN", 128, 980, false, false, true, { 14, 8, 16, 7, 24, 0 }, { 1, 1, 1, 1, 1, 1 }, 27, 30, 28, 150, 200, AI_SUCC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 115, 10, 1, 30, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | IMMUNE_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 4480 },
{ N_("Soul Burner"), "Monsters\\Succ\\Scbs%c.CL2", "Monsters\\Succ\\Scbs%c%i.WAV", "Monsters\\Succ\\Succbw.TRN", 128, 980, false, false, true, { 14, 8, 16, 7, 24, 0 }, { 1, 1, 1, 1, 1, 1 }, 28, 30, 30, 140, 225, AI_SUCC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 120, 10, 1, 35, 0, 0, 0, 0, 85, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 3, 0, 4644 },
{ N_("Counselor"), "Monsters\\Mage\\Mage%c.CL2", "Monsters\\Mage\\Mage%c%i.WAV", nullptr, 128, 2000, true, false, false, { 12, 1, 20, 8, 28, 20 }, { 1, 1, 1, 1, 1, 1 }, 24, 26, 25, 70, 70, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 0, 90, 8, 8, 20, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 7, 0, 4070 },
{ N_("Magistrate"), "Monsters\\Mage\\Mage%c.CL2", "Monsters\\Mage\\Mage%c%i.WAV", "Monsters\\Mage\\Cnselg.TRN", 128, 2000, true, false, true, { 12, 1, 20, 8, 28, 20 }, { 1, 1, 1, 1, 1, 1 }, 26, 28, 27, 85, 85, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 1, 100, 8, 10, 24, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4478 },
{ N_("Cabalist"), "Monsters\\Mage\\Mage%c.CL2", "Monsters\\Mage\\Mage%c%i.WAV", "Monsters\\Mage\\Cnselgd.TRN", 128, 2000, true, false, true, { 12, 1, 20, 8, 28, 20 }, { 1, 1, 1, 1, 1, 1 }, 28, 30, 29, 120, 120, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 2, 110, 8, 14, 30, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4929 },
{ N_("Advocate"), "Monsters\\Mage\\Mage%c.CL2", "Monsters\\Mage\\Mage%c%i.WAV", "Monsters\\Mage\\Cnselbk.TRN", 128, 2000, true, false, true, { 12, 1, 20, 8, 28, 20 }, { 1, 1, 1, 1, 1, 1 }, 30, 30, 30, 145, 145, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 3, 120, 8, 15, 25, 0, 0, 0, 0, 0, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4968 },
{ N_("Golem"), "Monsters\\Golem\\Golem%c.CL2", "Monsters\\Golem\\Golm%c%i.WAV", nullptr, 96, 386, true, false, false, { 0, 16, 12, 0, 12, 20 }, { 1, 1, 1, 1, 1, 1 }, 0, 0, 12, 1, 1, AI_GOLUM, MFLAG_CAN_OPEN_DOOR, 0, 0, 7, 1, 1, 0, 0, 0, 0, 1, MC_DEMON, 0 , 0 , 0, 0, 0 },
{ N_("The Dark Lord"), "Monsters\\Diablo\\Diablo%c.CL2", "Monsters\\Diablo\\Diablo%c%i.WAV", nullptr, 160, 2000, true, true, false, { 16, 6, 16, 6, 16, 16 }, { 1, 1, 1, 1, 1, 1 }, 50, 50, 45, 3333, 3333, AI_DIABLO, MFLAG_KNOCKBACK | MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 220, 4, 30, 60, 0, 11, 0, 0, 90, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 31666 },
{ N_("The Arch-Litch Malignus"), "Monsters\\DarkMage\\Dmage%c.CL2", "Monsters\\DarkMage\\Dmag%c%i.WAV", nullptr, 128, 1060, true, false, false, { 6, 1, 21, 6, 23, 18 }, { 1, 1, 1, 1, 1, 1 }, 40, 41, 30, 160, 160, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 3, 120, 8, 20, 40, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 4968 },
{ N_("Hellboar"), "Monsters\\Fork\\Fork%c.CL2", "Monsters\\newsfx\\HBoar%c%i.WAV", nullptr, 188, 800, false, false, false, { 10, 10, 15, 6, 16, 0 }, { 2, 1, 1, 1, 1, 1 }, 32, 35, 23, 80, 100, AI_SKELSD, MFLAG_KNOCKBACK | MFLAG_SEARCH , 2, 70, 7, 16, 24, 0, 0, 0, 0, 60, MC_DEMON, 0 , RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 750 },
{ N_("Stinger"), "Monsters\\Scorp\\Scorp%c.CL2", "Monsters\\newsfx\\Stingr%c%i.WAV", nullptr, 64, 305, false, false, false, { 10, 10, 12, 6, 15, 0 }, { 2, 1, 1, 1, 1, 1 }, 32, 35, 22, 30, 40, AI_SKELSD, 0 , 3, 85, 8, 1, 20, 0, 0, 0, 0, 50, MC_ANIMAL, 0 , RESIST_LIGHTNING , 1, 0, 500 },
{ N_("Psychorb"), "Monsters\\Eye\\Eye%c.CL2", "Monsters\\newsfx\\psyco%c%i.WAV", nullptr, 156, 800, false, false, false, { 12, 13, 13, 7, 21, 0 }, { 2, 1, 1, 1, 1, 1 }, 32, 35, 22, 20, 30, AI_PSYCHORB, 0 , 3, 80, 8, 10, 10, 0, 0, 0, 0, 40, MC_ANIMAL, 0 , RESIST_FIRE , 6, 0, 450 },
{ N_("Arachnon"), "Monsters\\Spider\\Spider%c.CL2", "Monsters\\newsfx\\SLord%c%i.WAV", nullptr, 148, 800, false, false, false, { 12, 10, 15, 6, 20, 0 }, { 2, 1, 1, 1, 1, 1 }, 32, 35, 22, 60, 80, AI_SKELSD, MFLAG_SEARCH , 3, 50, 8, 5, 15, 0, 0, 0, 0, 50, MC_ANIMAL, 0 , RESIST_LIGHTNING , 7, 0, 500 },
{ N_("Felltwin"), "Monsters\\TSneak\\TSneak%c.CL2", "Monsters\\newsfx\\FTwin%c%i.WAV", nullptr, 128, 800, false, false, false, { 13, 13, 15, 11, 16, 0 }, { 2, 1, 1, 1, 1, 1 }, 32, 35, 22, 50, 70, AI_SKELSD, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 70, 8, 10, 18, 0, 0, 0, 0, 50, MC_DEMON, IMMUNE_NULL_40 , RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 600 },
{ N_("Hork Spawn"), "Monsters\\Spawn\\Spawn%c.CL2", "Monsters\\newsfx\\HSpawn%c%i.WAV", nullptr, 164, 520, false, true, false, { 15, 12, 14, 11, 14, 0 }, { 1, 1, 1, 1, 1, 1 }, 34, 37, 22, 30, 30, AI_SKELSD, 0 , 3, 60, 8, 10, 25, 0, 0, 0, 0, 25, MC_DEMON, RESIST_MAGIC , RESIST_MAGIC , 3, 0, 250 },
{ N_("Venomtail"), "Monsters\\WScorp\\WScorp%c.CL2", "Monsters\\newsfx\\Stingr%c%i.WAV", nullptr, 86, 305, false, false, false, { 10, 10, 12, 6, 15, 0 }, { 2, 1, 1, 1, 1, 1 }, 36, 39, 24, 40, 50, AI_SKELSD, 0 , 3, 85, 8, 1, 30, 0, 0, 0, 0, 60, MC_ANIMAL, RESIST_LIGHTNING , IMMUNE_LIGHTNING , 1, 0, 1000 },
{ N_("Necromorb"), "Monsters\\Eye2\\Eye2%c.CL2", "Monsters\\newsfx\\Psyco%c%i.WAV", nullptr, 140, 800, false, false, false, { 12, 13, 13, 7, 21, 0 }, { 2, 1, 1, 1, 1, 1 }, 36, 39, 24, 30, 40, AI_NECROMORB, 0 , 3, 80, 8, 20, 20, 0, 0, 0, 0, 50, MC_ANIMAL, RESIST_FIRE , IMMUNE_FIRE | RESIST_LIGHTNING , 6, 0, 1100 },
{ N_("Spider Lord"), "Monsters\\bSpidr\\bSpidr%c.CL2", "Monsters\\newsfx\\SLord%c%i.WAV", nullptr, 148, 800, true, true, false, { 12, 10, 15, 6, 20, 10 }, { 2, 1, 1, 1, 1, 1 }, 36, 39, 24, 80, 100, AI_ACID, MFLAG_SEARCH , 3, 60, 8, 8, 20, 75, 8, 10, 10, 60, MC_ANIMAL, RESIST_LIGHTNING , RESIST_FIRE | IMMUNE_LIGHTNING , 7, 0, 1250 },
{ N_("Lashworm"), "Monsters\\Clasp\\Clasp%c.CL2", "Monsters\\newsfx\\Lworm%c%i.WAV", nullptr, 176, 800, false, false, false, { 10, 12, 15, 6, 16, 0 }, { 1, 1, 1, 1, 1, 1 }, 36, 39, 20, 30, 30, AI_SKELSD, 0 , 3, 90, 8, 12, 20, 0, 0, 0, 0, 50, MC_ANIMAL, 0 , RESIST_FIRE , 3, 0, 600 },
{ N_("Torchant"), "Monsters\\AntWorm\\Worm%c.CL2", "Monsters\\newsfx\\TchAnt%c%i.WAV", nullptr, 192, 800, false, false, false, { 14, 12, 12, 6, 20, 0 }, { 2, 1, 1, 1, 1, 1 }, 36, 39, 22, 60, 80, AI_TORCHANT, 0 , 3, 75, 8, 20, 30, 0, 0, 0, 0, 70, MC_ANIMAL, IMMUNE_FIRE , RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 7, 0, 1250 },
{ N_("Hork Demon"), "Monsters\\HorkD\\HorkD%c.CL2", "Monsters\\newsfx\\HDemon%c%i.WAV", nullptr, 138, 800, true, true, false, { 15, 8, 16, 6, 16, 9 }, { 2, 1, 1, 1, 1, 2 }, 36, 37, 27, 120, 160, AI_SKELSD, 0 , 3, 60, 8, 20, 35, 80, 8, 0, 0, 80, MC_DEMON, RESIST_LIGHTNING , RESIST_MAGIC | IMMUNE_LIGHTNING , 7, 0, 2000 },
{ N_("Hell Bug"), "Monsters\\Hellbug\\Hellbg%c.CL2", "Monsters\\newsfx\\Defile%c%i.WAV", nullptr, 198, 800, true, true, false, { 8, 8, 14, 6, 14, 12 }, { 1, 1, 1, 1, 1, 1 }, 38, 39, 30, 240, 240, AI_SKELSD, MFLAG_SEARCH , 3, 110, 8, 20, 30, 90, 8, 50, 60, 80, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 7, 0, 5000 },
{ N_("Gravedigger"), "Monsters\\Gravdg\\Gravdg%c.CL2", "Monsters\\newsfx\\GDiggr%c%i.WAV", nullptr, 124, 800, true, true, false, { 24, 24, 12, 6, 16, 16 }, { 2, 1, 1, 1, 1, 1 }, 40, 41, 26, 120, 240, AI_SCAV, MFLAG_CAN_OPEN_DOOR, 3, 80, 6, 2, 12, 0, 0, 0, 0, 20, MC_UNDEAD, IMMUNE_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 2000 },
{ N_("Tomb Rat"), "Monsters\\Rat\\Rat%c.CL2", "Monsters\\newsfx\\TmbRat%c%i.WAV", nullptr, 104, 550, false, false, false, { 11, 8, 12, 6, 20, 0 }, { 2, 1, 1, 1, 1, 1 }, 40, 43, 24, 80, 120, AI_SKELSD, 0 , 3, 120, 8, 12, 25, 0, 0, 0, 0, 30, MC_ANIMAL, 0 , RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 1800 },
{ N_("Firebat"), "Monsters\\Hellbat\\Helbat%c.CL2", "Monsters\\newsfx\\HelBat%c%i.WAV", nullptr, 96, 550, false, false, false, { 18, 16, 14, 6, 18, 11 }, { 2, 1, 1, 1, 1, 1 }, 40, 43, 24, 60, 80, AI_FIREBAT, 0 , 3, 100, 8, 15, 20, 0, 0, 0, 0, 70, MC_ANIMAL, IMMUNE_FIRE , RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 7, 0, 2400 },
{ N_("Skullwing"), "Monsters\\Demskel\\Demskl%c.CL2", "Monsters\\newsfx\\SWing%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 128, 1740, true, false, false, { 10, 8, 20, 6, 24, 16 }, { 3, 1, 1, 1, 1, 1 }, 40, 43, 27, 70, 70, AI_SKELSD, 0 , 0, 75, 7, 15, 20, 75, 9, 15, 20, 80, MC_UNDEAD, RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 3000 },
{ N_("Lich"), "Monsters\\Lich\\Lich%c.CL2", "Monsters\\newsfx\\Lich%c%i.WAV", nullptr, 96, 800, false, true, false, { 12, 10, 10, 7, 21, 0 }, { 2, 1, 1, 1, 2, 1 }, 40, 43, 25, 80, 100, AI_LICH, 0 , 3, 100, 8, 15, 20, 0, 0, 0, 0, 60, MC_UNDEAD, RESIST_LIGHTNING | IMMUNE_NULL_40 , RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 3000 },
{ N_("Crypt Demon"), "Monsters\\Bubba\\Bubba%c.CL2", "Monsters\\newsfx\\Crypt%c%i.WAV", nullptr, 154, 800, false, true, false, { 8, 18, 12, 8, 21, 0 }, { 3, 1, 1, 1, 1, 1 }, 42, 45, 28, 200, 240, AI_SKELSD, 0 , 3, 100, 8, 20, 40, 0, 0, 0, 0, 85, MC_DEMON, IMMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 3200 },
{ N_("Hellbat"), "Monsters\\Hellbat2\\bhelbt%c.CL2", "Monsters\\newsfx\\HelBat%c%i.WAV", nullptr, 96, 550, true, false, false, { 18, 16, 14, 6, 18, 11 }, { 2, 1, 1, 1, 1, 1 }, 44, 47, 29, 100, 140, AI_TORCHANT, 0 , 3, 110, 8, 30, 30, 0, 0, 0, 0, 80, MC_DEMON, RESIST_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 7, 0, 3600 },
{ N_("Bone Demon"), "Monsters\\Demskel\\Demskl%c.CL2", "Monsters\\newsfx\\SWing%c%i.WAV", "Monsters\\Thin\\Thinv3.TRN", 128, 1740, true, true, false, { 10, 8, 20, 6, 24, 16 }, { 3, 1, 1, 1, 1, 1 }, 44, 47, 30, 240, 280, AI_BONEDEMON, 0 , 0, 100, 8, 40, 50, 160, 12, 50, 50, 50, MC_UNDEAD, IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 5000 },
{ N_("Arch Lich"), "Monsters\\Lich2\\Lich2%c.CL2", "Monsters\\newsfx\\Lich%c%i.WAV", nullptr, 136, 800, false, true, false, { 12, 10, 10, 7, 21, 0 }, { 2, 1, 1, 1, 2, 1 }, 44, 47, 30, 180, 200, AI_ARCHLICH, 0 , 3, 120, 8, 30, 30, 0, 0, 0, 0, 75, MC_UNDEAD, RESIST_MAGIC | RESIST_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 3, 0, 4000 },
{ N_("Biclops"), "Monsters\\Byclps\\Byclps%c.CL2", "Monsters\\newsfx\\Biclop%c%i.WAV", nullptr, 180, 800, false, false, false, { 10, 11, 16, 6, 16, 0 }, { 2, 1, 1, 1, 2, 1 }, 44, 47, 30, 200, 240, AI_SKELSD, MFLAG_KNOCKBACK | MFLAG_CAN_OPEN_DOOR, 3, 90, 8, 40, 50, 0, 0, 0, 0, 80, MC_DEMON, RESIST_LIGHTNING , RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 4000 },
{ N_("Flesh Thing"), "Monsters\\Flesh\\Flesh%c.CL2", "Monsters\\newsfx\\FleshT%c%i.WAV", nullptr, 164, 800, false, true, false, { 15, 24, 15, 6, 16, 0 }, { 1, 1, 1, 1, 1, 1 }, 44, 47, 28, 300, 400, AI_SKELSD, 0 , 3, 150, 8, 12, 18, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 4000 },
{ N_("Reaper"), "Monsters\\Reaper\\Reap%c.CL2", "Monsters\\newsfx\\Reaper%c%i.WAV", nullptr, 180, 800, false, false, false, { 12, 10, 14, 6, 16, 0 }, { 2, 1, 1, 1, 1, 1 }, 44, 47, 30, 260, 300, AI_SKELSD, 0 , 3, 120, 8, 30, 35, 0, 0, 0, 0, 90, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING , 3, 0, 6000 },
// TRANSLATORS: Monster Block end
{ "Na-Krul", "Monsters\\Nkr\\Nkr%c.CL2", "Monsters\\newsfx\\Nakrul%c%i.WAV", nullptr, 226, 1200, true, true, false, { 2, 6, 16, 3, 16, 16 }, { 0, 0, 0, 0, 0, 0 }, 60, 60, 40, 1332, 1332, AI_SKELSD, MFLAG_KNOCKBACK | MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 150, 7, 40, 50, 150, 10, 40, 50, 125, MC_DEMON, IMMUNE_MAGIC | IMMUNE_FIRE | RESIST_LIGHTNING | IMMUNE_NULL_40 , IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING | IMMUNE_NULL_40 , 7, 0, 13333 },
// clang-format on

26
Source/player.cpp

@ -185,7 +185,7 @@ void StartWalkAnimation(PlayerStruct &player, Direction dir, bool pmWillBeCalled
skippedFrames = 2;
if (pmWillBeCalled)
skippedFrames += 1;
NewPlrAnim(player, player_graphic::Walk, dir, player._pWFrames, 0, AnimationDistributionFlags::ProcessAnimationPending, skippedFrames);
NewPlrAnim(player, player_graphic::Walk, dir, player._pWFrames, 1, AnimationDistributionFlags::ProcessAnimationPending, skippedFrames);
}
/**
@ -1214,12 +1214,12 @@ void InitPlayer(int pnum, bool FirstTime)
if (player._pHitPoints >> 6 > 0) {
player._pmode = PM_STAND;
NewPlrAnim(player, player_graphic::Stand, DIR_S, player._pNFrames, 3);
NewPlrAnim(player, player_graphic::Stand, DIR_S, player._pNFrames, 4);
player.AnimInfo.CurrentFrame = GenerateRnd(player._pNFrames - 1) + 1;
player.AnimInfo.DelayCounter = GenerateRnd(3);
} else {
player._pmode = PM_DEATH;
NewPlrAnim(player, player_graphic::Death, DIR_S, player._pDFrames, 1);
NewPlrAnim(player, player_graphic::Death, DIR_S, player._pDFrames, 2);
player.AnimInfo.CurrentFrame = player.AnimInfo.NumberOfFrames - 1;
}
@ -1367,7 +1367,7 @@ void StartStand(int pnum, Direction dir)
auto &player = plr[pnum];
if (!player._pInvincible || player._pHitPoints != 0 || pnum != myplr) {
NewPlrAnim(player, player_graphic::Stand, dir, player._pNFrames, 3);
NewPlrAnim(player, player_graphic::Stand, dir, player._pNFrames, 4);
player._pmode = PM_STAND;
FixPlayerLocation(pnum, dir);
FixPlrWalkTags(pnum);
@ -1452,7 +1452,7 @@ void StartAttack(int pnum, Direction d)
auto animationFlags = AnimationDistributionFlags::ProcessAnimationPending;
if (player._pmode == PM_ATTACK)
animationFlags = static_cast<AnimationDistributionFlags>(animationFlags | AnimationDistributionFlags::RepeatedAction);
NewPlrAnim(player, player_graphic::Attack, d, player._pAFrames, 0, animationFlags, skippedAnimationFrames, player._pAFNum);
NewPlrAnim(player, player_graphic::Attack, d, player._pAFrames, 1, animationFlags, skippedAnimationFrames, player._pAFNum);
player._pmode = PM_ATTACK;
FixPlayerLocation(pnum, d);
SetPlayerOld(player);
@ -1480,7 +1480,7 @@ void StartRangeAttack(int pnum, Direction d, int cx, int cy)
auto animationFlags = AnimationDistributionFlags::ProcessAnimationPending;
if (player._pmode == PM_RATTACK)
animationFlags = static_cast<AnimationDistributionFlags>(animationFlags | AnimationDistributionFlags::RepeatedAction);
NewPlrAnim(player, player_graphic::Attack, d, player._pAFrames, 0, animationFlags, skippedAnimationFrames, player._pAFNum);
NewPlrAnim(player, player_graphic::Attack, d, player._pAFrames, 1, animationFlags, skippedAnimationFrames, player._pAFNum);
player._pmode = PM_RATTACK;
FixPlayerLocation(pnum, d);
@ -1507,7 +1507,7 @@ void StartPlrBlock(int pnum, Direction dir)
skippedAnimationFrames = (player._pBFrames - 2); // ISPL_FASTBLOCK means we cancel the animation if frame 2 was shown
}
NewPlrAnim(player, player_graphic::Block, dir, player._pBFrames, 2, AnimationDistributionFlags::SkipsDelayOfLastFrame, skippedAnimationFrames);
NewPlrAnim(player, player_graphic::Block, dir, player._pBFrames, 3, AnimationDistributionFlags::SkipsDelayOfLastFrame, skippedAnimationFrames);
player._pmode = PM_BLOCK;
FixPlayerLocation(pnum, dir);
@ -1532,13 +1532,13 @@ void StartSpell(int pnum, Direction d, int cx, int cy)
switch (spelldata[player._pSpell].sType) {
case STYPE_FIRE:
NewPlrAnim(player, player_graphic::Fire, d, player._pSFrames, 0, animationFlags, 0, player._pSFNum);
NewPlrAnim(player, player_graphic::Fire, d, player._pSFrames, 1, animationFlags, 0, player._pSFNum);
break;
case STYPE_LIGHTNING:
NewPlrAnim(player, player_graphic::Lightning, d, player._pSFrames, 0, animationFlags, 0, player._pSFNum);
NewPlrAnim(player, player_graphic::Lightning, d, player._pSFrames, 1, animationFlags, 0, player._pSFNum);
break;
case STYPE_MAGIC:
NewPlrAnim(player, player_graphic::Magic, d, player._pSFrames, 0, animationFlags, 0, player._pSFNum);
NewPlrAnim(player, player_graphic::Magic, d, player._pSFrames, 1, animationFlags, 0, player._pSFNum);
break;
}
} else {
@ -1649,7 +1649,7 @@ void StartPlrHit(int pnum, int dam, bool forcehit)
skippedAnimationFrames = 0;
}
NewPlrAnim(player, player_graphic::Hit, pd, player._pHFrames, 0, AnimationDistributionFlags::None, skippedAnimationFrames);
NewPlrAnim(player, player_graphic::Hit, pd, player._pHFrames, 1, AnimationDistributionFlags::None, skippedAnimationFrames);
player._pmode = PM_GOTHIT;
FixPlayerLocation(pnum, pd);
@ -1735,7 +1735,7 @@ StartPlayerKill(int pnum, int earflag)
SetPlrAnims(player);
}
NewPlrAnim(player, player_graphic::Death, player._pdir, player._pDFrames, 1);
NewPlrAnim(player, player_graphic::Death, player._pdir, player._pDFrames, 2);
player._pBlockFlag = false;
player._pmode = PM_DEATH;
@ -2904,7 +2904,7 @@ bool PM_DoSpell(int pnum)
}
auto &player = plr[pnum];
int currentSpellFrame = leveltype != DTYPE_TOWN ? player.AnimInfo.CurrentFrame : (player.AnimInfo.CurrentFrame * (player.AnimInfo.DelayLen + 1) + player.AnimInfo.DelayCounter);
int currentSpellFrame = leveltype != DTYPE_TOWN ? player.AnimInfo.CurrentFrame : ((player.AnimInfo.CurrentFrame * player.AnimInfo.DelayLen) + player.AnimInfo.DelayCounter);
if (currentSpellFrame == (player._pSFNum + 1)) {
CastSpell(
pnum,

16
test/animationinfo_test.cpp

@ -106,7 +106,7 @@ TEST(AnimationInfo, AttackSwordWarrior) // ProcessAnimationPending should be con
{
RunAnimationTest(
{
new SetNewAnimationData(16, 0, AnimationDistributionFlags::ProcessAnimationPending, 0, 9),
new SetNewAnimationData(16, 1, AnimationDistributionFlags::ProcessAnimationPending, 0, 9),
// ProcessAnimation directly after StartAttack (in same GameTick). So we don't see any rendering before.
new GameTickData(2, 0),
new RenderingData(0.0f, 1),
@ -169,7 +169,7 @@ TEST(AnimationInfo, AttackSwordWarriorWithFastestAttack) // Skipped frames and P
{
RunAnimationTest(
{
new SetNewAnimationData(16, 0, AnimationDistributionFlags::ProcessAnimationPending, 2, 9),
new SetNewAnimationData(16, 1, AnimationDistributionFlags::ProcessAnimationPending, 2, 9),
// ProcessAnimation directly after StartAttack (in same GameTick). So we don't see any rendering before.
new GameTickData(4, 0),
new RenderingData(0.0f, 1),
@ -225,7 +225,7 @@ TEST(AnimationInfo, AttackSwordWarriorRepeated)
{
RunAnimationTest(
{
new SetNewAnimationData(16, 0, AnimationDistributionFlags::ProcessAnimationPending, 0, 9),
new SetNewAnimationData(16, 1, AnimationDistributionFlags::ProcessAnimationPending, 0, 9),
// ProcessAnimation directly after StartAttack (in same GameTick). So we don't see any rendering before.
new GameTickData(2, 0),
new RenderingData(0.0f, 1),
@ -270,7 +270,7 @@ TEST(AnimationInfo, AttackSwordWarriorRepeated)
new RenderingData(0.3f, 10),
// Start of repeated attack, cause plr[pnum].AnimInfo.CurrentFrame > plr[myplr]._pAFNum
new SetNewAnimationData(16, 0, static_cast<AnimationDistributionFlags>(AnimationDistributionFlags::ProcessAnimationPending | AnimationDistributionFlags::RepeatedAction), 0, 9),
new SetNewAnimationData(16, 1, static_cast<AnimationDistributionFlags>(AnimationDistributionFlags::ProcessAnimationPending | AnimationDistributionFlags::RepeatedAction), 0, 9),
// ProcessAnimation directly after StartAttack (in same GameTick). So we don't see any rendering before.
new GameTickData(2, 0),
new RenderingData(0.0f, 11),
@ -333,7 +333,7 @@ TEST(AnimationInfo, BlockingWarriorNormal) // Ignored delay for last Frame shoul
{
RunAnimationTest(
{
new SetNewAnimationData(2, 2, AnimationDistributionFlags::SkipsDelayOfLastFrame),
new SetNewAnimationData(2, 3, AnimationDistributionFlags::SkipsDelayOfLastFrame),
new RenderingData(0.0f, 1),
new RenderingData(0.3f, 1),
new RenderingData(0.6f, 1),
@ -361,7 +361,7 @@ TEST(AnimationInfo, BlockingSorcererWithFastBlock) // Skipped frames and ignored
{
RunAnimationTest(
{
new SetNewAnimationData(6, 2, AnimationDistributionFlags::SkipsDelayOfLastFrame, 4),
new SetNewAnimationData(6, 3, AnimationDistributionFlags::SkipsDelayOfLastFrame, 4),
new RenderingData(0.0f, 1),
new RenderingData(0.3f, 1),
new RenderingData(0.6f, 1),
@ -389,7 +389,7 @@ TEST(AnimationInfo, HitRecoverySorcererZenMode) // Skipped frames and ignored de
{
RunAnimationTest(
{
new SetNewAnimationData(8, 0, AnimationDistributionFlags::None, 4),
new SetNewAnimationData(8, 1, AnimationDistributionFlags::None, 4),
new RenderingData(0.0f, 1),
new RenderingData(0.3f, 1),
new RenderingData(0.6f, 2),
@ -416,7 +416,7 @@ TEST(AnimationInfo, Stand) // Distribution Logic shouldn't change anything here
{
RunAnimationTest(
{
new SetNewAnimationData(10, 3),
new SetNewAnimationData(10, 4),
new RenderingData(0.1f, 1),
new GameTickData(1, 1),
new RenderingData(0.6f, 1),

2
test/writehero_test.cpp

@ -292,7 +292,7 @@ static void AssertPlayer(PlayerStruct &player)
ASSERT_EQ(player._pmode, 0);
ASSERT_EQ(Count8(player.walkpath, MAX_PATH_LENGTH), 25);
ASSERT_EQ(player._pgfxnum, 36);
ASSERT_EQ(player.AnimInfo.DelayLen, 3);
ASSERT_EQ(player.AnimInfo.DelayLen, 4);
ASSERT_EQ(player.AnimInfo.DelayCounter, 1);
ASSERT_EQ(player.AnimInfo.NumberOfFrames, 20);
ASSERT_EQ(player.AnimInfo.CurrentFrame, 1);

Loading…
Cancel
Save