From 3ba4bac5e284626c701cd37546e7d769fcfa5212 Mon Sep 17 00:00:00 2001 From: obligaron Date: Sun, 27 Jun 2021 05:31:26 +0200 Subject: [PATCH] Harmonize DelayLen for Player and Monster (was 1-based on monseter (>= DelayLen) and 0-based on player (> DelayLen). Now both are 1-based (>= DelayLen) --- Source/engine/animationinfo.cpp | 11 +- Source/items.cpp | 4 +- Source/loadsave.cpp | 4 +- Source/monstdat.cpp | 274 ++++++++++++++++---------------- Source/player.cpp | 26 +-- test/animationinfo_test.cpp | 16 +- test/writehero_test.cpp | 2 +- 7 files changed, 171 insertions(+), 166 deletions(-) diff --git a/Source/engine/animationinfo.cpp b/Source/engine/animationinfo.cpp index 71fc5c280..28057c1bf 100644 --- a/Source/engine/animationinfo.cpp +++ b/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--; diff --git a/Source/items.cpp b/Source/items.cpp index 26e917505..d9a5220e0 100644 --- a/Source/items.cpp +++ b/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) { diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index ba1712703..63b0a818f 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -341,7 +341,7 @@ static void LoadPlayer(LoadHelper *file, int p) player._pgfxnum = file->nextLE(); file->skip(4); // Skip pointer pData player.AnimInfo = {}; - player.AnimInfo.DelayLen = file->nextLE(); + player.AnimInfo.DelayLen = file->nextLE() + 1; player.AnimInfo.DelayCounter = file->nextLE(); player.AnimInfo.NumberOfFrames = file->nextLE(); player.AnimInfo.CurrentFrame = file->nextLE(); @@ -1404,7 +1404,7 @@ static void SavePlayer(SaveHelper *file, int p) file->skip(4); // Unused file->writeLE(player._pgfxnum); file->skip(4); // Skip pointer _pAnimData - file->writeLE(player.AnimInfo.DelayLen); + file->writeLE(std::max(0, player.AnimInfo.DelayLen - 1)); file->writeLE(player.AnimInfo.DelayCounter); file->writeLE(player.AnimInfo.NumberOfFrames); file->writeLE(player.AnimInfo.CurrentFrame); diff --git a/Source/monstdat.cpp b/Source/monstdat.cpp index f12138f9b..fc7758899 100644 --- a/Source/monstdat.cpp +++ b/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 diff --git a/Source/player.cpp b/Source/player.cpp index 919fd414e..3d006a1cd 100644 --- a/Source/player.cpp +++ b/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(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(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, diff --git a/test/animationinfo_test.cpp b/test/animationinfo_test.cpp index 074426b7f..d3643e8a4 100644 --- a/test/animationinfo_test.cpp +++ b/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::ProcessAnimationPending | AnimationDistributionFlags::RepeatedAction), 0, 9), + new SetNewAnimationData(16, 1, static_cast(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), diff --git a/test/writehero_test.cpp b/test/writehero_test.cpp index 43232f4bc..6f8b39b7b 100644 --- a/test/writehero_test.cpp +++ b/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);