# D2Mods Knowledge Base: Article 383 # Title: MonStats.txt # URL: https://d2mods.info/forum/kb/viewarticle?a=383 MonStats.txt Written by: Nefarius Written on: Wed Jun 21, 2006 5:18 pm Views: 7824 Description: by Fecesfaerie [written 2000, modified by Nefarius 2006] Categories: File Guides (1.00-1.06x) In this tutorial, I'll provide you with all the information I've uncovered so far in the monstats.txt file in Diablo 2. This tutorial is largely incomplete as there are still numerous columns that I don't yet understand. Hopefully, it will be completed in time with further study and the help of any other hackers out there willing to share their secrets. The first part of this tutorial simply lists all the columns in this file by name and gives a description of what they do if known. Since some of us use a spreadsheet program like excel to view and edit these files, I'll also refer to these columns by the letter at the top of the spreadsheet as well as their name. The second part of this tutorial will go over a few simple tricks on what you can do with this file. Part I: Class (column A): This determines what name appears over the monster's head when you move the mouse over it. Namco (column B): I've heard (but not extensively tested) that this determines what animation file is generated for a monster. (Nefarius: infact this is controlled by the token column in MonType.txt - not this column.) Type (column C): Identifies monster by type. Discriptor (column D): Short comment to describe any special or unusual attribute of this monster. For example, all the giant maggot monsters can lay eggs, so that ability is listed in this column beside their name. Base ID (column E): A simple number that identifies what type of enemy this is. All monsters of the same type generally have the same ID. This ID seems to determine what kind of abilities or skills the game generates for that monster when it appears in the game. For example, you may have noticed the monster entries for the Rogue Scout, Rogue Hireling, and Rogue Town. They each have different ID's because they have some different behavior. The Rogue Town monsters are the rogues in the Act I town who simply stand there. A Rogue Scout and Rogue Hireling will move around and shoot nearby monsters, but the Rogue Hireling seems different because it seems to reference other files besides this monstats.txt to get all of its abilities (such as randomly generated levels and magic arrow attacks). Changing these ID's causes the game to expect later columns to have specific things set for them (like certain skills), so be aware of this if you decide to go manipulating these numbers. Spawned (column F): This value is set for zero or one for every monster. A one means that monster can be randomly generated in a level. A zero means that monster can't. If you want monsters like bosses to appear in areas other than they normally do (like the Cow Level) then set this value to one. In part two, I'll describe what else needs to be done to get that enemy to appear in the level of your choosing. Beta (column G): Determines if the monster appeared in the beta version of the game. Seems to be only for reference. Code (column H): Another identifier for a monster along with Base ID. (Nefarius: controlls from what token-folder the palshift.dat is picked.) Client Only (column I) and NoMap (column J): These are set at either zero or one. Not exactly sure what they do, but every monster either has both set to zero or both set to one. Only the little critters that appear running around (bats, rats, scorpions, etc.) have this set. It seems to be special settings for monsters that don't do much more than act as scenery. Size X, Size Y, Height, Overlay Height (columns K-N): Determines the physical dimentions of the monster. (Nefarius: these columns function as for 1.10+ [MonStats2.txt]) Velocity (column O): The walking speed of the monster. Run (column P): The running speed of the monster. There's a later column that controls if the monster has the ability to run at all. If it doesn't, this column is unused for that monster. Rarity (column Q): Seems to control frequency of appearance. (Nefarius: not used prior to 1.10) Level, Level(N), Level(H) (columns R-T): Determines what level this monster is on in each difficulty. Melee Rng (column U): Determines the reach of a monster's melee attack. The higher the value, the further distance a monster can hit you with its melee attack. Min Grp (column V): Determines the minimum number of monsters of this type that are spawned at a time. You've noticed that some monsters (like cows) appear in larger groups than others. Most monsters have this set around 1 to 3. Hell Bovines have it set at 5. Increase this number to make larger minimum monster groups. Max Grp (column W): Determines the maximum number of monsters of this type that are spawned at a time. Make sure this value is the same or higher than Min Grp if you decide to change these values. Most monsters have this column set around 2 to 4. Hell Bovines have it set at 10. (Nefarius: pre 1.10 it was impossible to modify which components a monster has, it was handled by a hardcoded table - the columns below are used after that table has been loaded, and thus serve no real purpose. ) HD (column X): Stands for head. Not sure of its significance. I think it has something to do with wheather or not that enemy can have something equipted on its head. TR (column Y): Stands for torso. LG (column Z): Stands for legs. RA (column AA): Unknown. (Nefarius: right arm ) LA (column AB): Unknown.(Nefarius: left arm ) RH (column AC): Unknown.(Nefarius: right hand ) LH (column AD): unknown.(Nefarius: left hand ) SH (column AE): Stands for shield. I think it determines if the monster can equip a shield or not. S1 (column AF): Some kind of setting for specials. Not sure what it means. (Nefarius: overlay 1) S2 (column AG): unknown(Nefarius: overlay 2) S3 (column AH): unknown(Nefarius: overlay 3) S4 (column AI): unknown(Nefarius: overlay 4) S5 (column AJ): unknown(Nefarius: overlay 5) S6 (column AK): unknown(Nefarius: overlay 6) S7 (column AL): unknown(Nefarius: overlay 7) S8 (column AM): unknown(Nefarius: overlay 8) TotalPieces (AN): unknown (Nefarius: number of components) SpawnComponets(AO): Unknown, but every monster has it set to zero, so it's probably not important. BaseW (AP): Base weapon that the monster carries when it appears. Several monsters have an hth listed in this column. This means either the monster uses no weapon, or the weapon it uses is not referenced in this file (the rogue scouts and hirelings have hth set here).(Nefarius: back in classic changing this allowed you to make necro skeletons use a bow etc, never featured in a mod, but doable.) AIParam 1-AIParam 5 (columns AQ-AY): These columns determine the AI parameters for the monsters. The comment field after some entries give a description of what the AI parameter causes the monster to do. ModeDH (column AZ): This is set to one if the monster can die. It's set to zero if it can't. Some monsters, like rogues or other hirelings that appear in town may have this set at zero. You can set it to one without causing any problems, but to make that monster actually killable you also have to set a couple of other columns that appear later. ModeN (column BA): unknown. (Nefarius: neutral) ModeW(column BB): Determines if the monster can walk or move. One means yes, zero means no. ModeGH(column BC): GH stands for get hit. This column determines if a monster can be attacked. One means yes; zero means no. ModeA1(column BD): Determines if the monster has a physical attack (usually melee but not necessarily). One means yes; zero means no. ModeA2(column BE): Determines if the monster has a second physical attack. ModeB (column BF): Determines if a monster can block a physical attack ModeC (column BG): Seems to determine if a monster casts spells or not. ModeS1-ModeS4 (column BH-BL): unknown(Nefarius: Skill1 to Skill4 anims) ModeDD (column BM): Another column that determines if a monster can die or not. As usual, one means yes; zero means no. (Nefarius: has corpse, yes/no) ModeKB (column BN): Determines if a monster can be knocked back by certain attacks. ModeSQ (column BO): Some kind of sequence field. Not sure what it controls. (Nefarius: can use skill sequence yes/no) ModeRN (column BP): Determines if a monster can run or not. ElMode (column BQ): Some kind of setting for an element attached to a monster that used when it attacks you. Eltype (column BR): The type of element associated with that monster. An example would be the Claw Vipers who have the ability to freeze a character when they attack them. Their element type is cold. ElOver (column BS): unknown (Nefarius: display an overlay when using element) ElPct (column BT): Percent chance that the particular element will take effect when the monster attacks. ElMinD (column BU): Minimum damage caused by the elemental attack. ElMaxD (column BV): Max damage caused by the elemental attack. ElDur (column BW): Duration that the elemental attack has affect over the targeted character. Cold and Poison attacks have something set in this column. The actual duration of this attack is (number in column / 25= #seconds element has effect). (Nefarius: the following columns are missile indexes, FFFF = no missile) MissA1 (column BX): Not sure beyond that it has some association with an enemy's first physical attack. MissA2 (column BY): Has something to do with enemy's second attack. MissS1 (column BZ): unknown MissS2 (column CA): unknown MissS3 (column CB): unknown MissS4 (column CC): unknown MissC (column CD): unknown MissSQ (column CE): Somehow relates to whatever a monster's sequence is. A1Move (column CF): unknown A2Move (column CG): unknown S1Move (column CH): unknown S2Move (column CI): unknown S3Move (column CJ): unknown S4Move (column CK): unknown Cmove (column CL): Not set for any monster, so doesn't seem to be used. Align (colimn CM): This determines if a monster is an enemy or an ally. You can have a lot of fun with this column. Set it to one, and that monster will fight other monsters and not attack you. Set it to zero to make any monster an enemy. IsMelee (column CN): Determines if the monster is a melee fighter. (Nefarius: spawn with multi-shot? yes/no) IsSel (column CO): Determines if the monster is 'selectable.' What that means is, if it's set to one then moving the cursor over that monster's body will cause his/her name to display. It will also allow you to target a monster with attacks by moving the mouse cursor over it. IsSel2 (column CP): Not sure what this one does. Only a few NPC's have it set though. NeverSel (column CQ): This determines if the monster can not be selected. It's basically the opposite of IsSel. In fact, if this column is set to one for a monster, than even if you set IsSel to one, you still can't highlight that monster by moving the mouse over it. CourpseSel (column CR): This determines if the monster's courpse can be selected for certain spells after it dies. Examples of spells are, Raise Skeleton, Corpse Explosion, Find Potion, and Grim Ward. Set it to one to allow a character to use this skill on that dead monster. You may notice that the Abyss Knight in Act 4 can have some courpse selected spells cast on it, but a Necromancer can't revive it. There's another field that controls that. It appears towards the end of the file. IsAtt (column CS): This determines if the monster can be attacked. IsNPC (column CT): Determines if the monster is an NPC or not. IsCritter (column CU): Determines if the monster is a critter. Critters are those little crawling monsters like scorpions and rats. InTown (column CV): Determines if the monster can appear in or enter a town. Set it to one for an enemy monster and it'll walk right into town to chase you. It won't be able to attack you in town though. Bleed (column CW): Determines if the monster bleeds when you attack it. Shadow (column CX): Determines if the monster casts a shadow. Light (column CY): This determines how much of a light radius the monster creates around him. The higher the number, the greater the light it creates. NoUniqueShift (column CZ): unknown (Nefarius: prevent bosses from using RandTransforms.dat) CompositeDeath (column DA): unknown (Nefarius: death anim composed of more then one component.) Skill1 (column DB): This is the first skill that a monster possesses. You can look in skills.txt to see a full listing of all skills in the game. Each skill has an ID number. That id number is what appears in this file. One thing to note is that changing the skill number in this column does not seem to affect what skill the monster actually possesses. I think the skill number is listed here just for reference, and the actual monster's skills is determined by its ID number. Skill1Seq (column DC): Some kind of sequence involved with a skill. I haven't messed with this field. Skill1Lvl (column DD): What skill level the first skill is on. Monsters have levels associated with their skills just like characters do. Changing this value will change how strong that skill is for the monster. Skill2-Skill5, Skill2Seq-Skill5Seq, Skill2Lvl-Skill5Lvl (columns DE-DP): Same as the fields for the first skill. They just affect the 2nd, 3rd, 4th, and 5th skills a monster has. LightR: (column DQ): I haven't messed with this one, but I imagine it stands for light red, and affects the color of the monster. LightG: (column DR): Stands for light green. LightB: (column DS): Light blue. Damage Resist (column DT): Determines what percentage of a character's attack does not hurt the monster. For example, if you hit the monster for 200 points of damage, and the monster had a damage resist of 10, then the monster would lose 180 hit points. Magic Resist (Column DU): Determines what percentage of magic damage does not affect the monster. I'm not sure if magic resistance works as a general resistance towards all magic (including poison, fire, lightning, and cold) or just a resistance to cover all forms of magic other than the elemental ones. For example, resistance against an attack like bone spear probably falls under this category. Fire Resist (Column DV): Determines what percentage of fire attacks a monster ignores. Lightning Resist (Column DW): Determines what percentage of lightning attacks the monster ignores. Cold Resist (Column DX): Determines what percentage of cold attacks the monster ignores. Poison Resist (Column DY): Determines what percentage of poison attacks a monster ignores. DamageResist(N) (Column DZ): Determines a monster's damage resistance for Nightmare difficulty. MagicResist(N) (Column EA): Magic resist for Nightmare. FireResist(N) (Column EB): Fire resist for Nightmare. LightningResist(N) (Column EC): Lightning resist for Nightmare. ColdResist(N) (Column ED): Cold resist for Nightmare. PoisonResist(N): (Column EE): Poison Resist for Nightmare. (Columns EF-EK): Resistances for Hell difficulty. DamageRegen (Column EL): Determines the rate at which a monster recovers hit points. this is similer to the life replenish ability some magic items have. eLUndead (Column EM): The first of two columns that can determines if a monster is undead. Basic undead like skeletons and mummies have this column set. Wheather or not a monster is undead will affect how much damage certain weapons do against it. eHUndead (Column EN): The second undead field. I'm not sure what the difference is between this one and the first one, but the undead who have this field set tend to be the more magically oriented undead like Vampires, Greater Mummies, and Mephisto. eDemon (Column EO): Determines if the monster is a demon. Again, this will determine how much damage certain weapons do against these monsters. eMagicUsing (Column EP): Determines if the monster is a spell caster. eLarge (Column EQ): Determines if the monster is classified as 'large.' This won't affect how the monster appears on screen. It again affects damage obtained by certain weapons. eSmall (Column ER): Classifies a monster as small. eFlying (Column ES): Classifies a monster as flying. I don't know if setting this column to one for a monster that has it at zero will actually give the monster the ability to fly (i.e. walk over walls or rivers) or just affect how much damage weapons do against them. eOpensDoors (Column ET): Determines if a monster can open doors or not. eSpawnCol (Column EU): unknown (Nefarius: how the unit is spawned: 0 = use m1-25 columns, 1 = DS1 generated only, 2 = use s1-25 columns) eBoss (Column EV): Determines if an enemy is classified as a boss (Duriel, Diablo, etc.). This field is usually best left alone unless you want to make clones of bosses (more on that later). Making an enemy a boss tends to crash the game when you kill it. You'll get a message along the lines of 'error, boss not in table.' I don't know where this table it refers to is located. PixHeight (Column EW): Not sure it does anything since changing it doesn't change how tall or short a monster appears. (Nefarius: overlay offset) Interact (Column EX): You've noticed throughout the game that moving the mouse corsor over someone displays differently for different monsters. More specifically, moving the cursor over a monster displays its name inside a life bar while moving it over a townsperson will display its name in white. This column determines which appears. Set to zero to show the name inside the life bar. set to one to display the name in white. MinHP (Column EY): The smallest number of hitpoints a monster can have when it's generated in Normal difficulty. MaxHP (Column EZ): The largest number of hitpoints a monster can have when it's generated in Normal difficulty. AC (Column FA): This is the enemy's defense for Normal difficulty. The higher it is, the harder it is to hit the monster. EXP (Column FB): How much exp you get from killing this monster in Normal Difficulty. ToBlock (Column FC): This determines the percentage chance a monster has to block an attack (assuming it's capable of blocking an attack). One thing to keep in mind, is that this number sets its blocking ability for all three difficulties. A1MinD (Column FD): Determines the minimum amount of damage the monster does with its first physical attack. A1MaxD (Column FE): Determines the maximum amount of damage the monster does with its first physical attack. A1ToHit (Column FF): Determines the attack rating the monster has with its first hysical attack. the higher it is, the more likely it is to hit someone with this attack. A2MinD (Column FG): Determines the minimum damage of the monster's second physical attack (if it has one). A2MaxD (Column FH): Determines the max damage of a monster's second physical attack in Normal difficulty. A2ToHit (Column FI): Determines the attack rating of the monster's second physical attack. S1MinD (Column FJ): Determines the min damage done by a special attack. This field is used mostly by traps. S1MaxD (Column FK): Determines the max damage done by a special attack. S1ToHit (Column FL): Determines the attack rating of a special attack. MinHP(N) (Column FM): The smallest number of hitpoints a monster can have when it's generated in Nightmare difficulty. MaxHP(N) (Column FN): The largest number of hitpoints a monster can have when it's generated in Nightmare difficulty. AC(N) (Column FO): This is the enemy's defense for Nightmare difficulty. The higher it is, the harder it is to hit the monster. EXP(N) (Column FP): How much exp you get from killing this monster in Nightmare Difficulty. A1MinD(N) (Column FQ): Determines the minimum amount of damage the monster does with its first physical attack. A1MaxD(N) (Column FR): Determines the maximum amount of damage the monster does with its first physical attack. A1ToHit(N) (Column FS): Determines the attack rating the monster has with its first hysical attack. the higher it is, the more likely it is to hit someone with this attack. A2MinD(N) (Column FT): Determines the minimum damage of the monster's second physical attack (if it has one). A2MaxD(N) (Column FU): Determines the max damage of a monster's second physical attack in Nightmare difficulty. A2ToHit(N) (Column FV): Determines the attack rating of the monster's second physical attack. S1MinD(N) (Column FW): Determines the min damage done by a special attack. This field is used mostly by traps. S1MaxD(N) (Column FX): Determines the max damage done by a special attack. S1ToHit(N) (Column FY): Determines the attack rating of a special attack. (Columns FZ-GL): Monster stats for hell difficulty. TreasureClass1-4 (Columns GM-GP): The numbers in the treasure class fields determine what kind of items monsters drop when you kill them. You can see what these fields are by looking in TreasureClasses.txt and looking at the column numbers. The number listed in the monstats.txt file is the row of the file in TreasureClasses.txt – 1 (I think). TreasureClass1-4(N) (Columns GQ-GT): Determines the items a monster drops in nightmare difficulty. TreasureClass1-4(H) (Columns GU-GX): Determins the items a monster drops in hell difficulty. SpawnPctBonus (Column GY): This is a fun column to play around with. This column determines any percentage bonuses to a monster's chances of dropping an item when you kill it. Set it to something around 100, and they'll drop items like mad (and they'll often be magical). Soft (Column GZ): unknown (Nefarius: soft or hard skinned foe.) Heart (Column HA): unknown, but every monster has it set to xxx. (Nefarius: set to an item code, the monster will drop this item if MonItemPercent.txt is edited) BodyPart (Column HB): Unknown, but every monster has it set to xxx. (Nefarius: set to an item code, the monster will drop this item if MonItemPercent.txt is edited) Killable (Column HC): The last column that determines if a monster can be killed. Almost everything has this column set. Switch (Column HD): Remember when I said earlier that the ability of Reveive to work on a monster was set by something other than the CourpseSel solumn? Well, this is that column. Set to one to make Revive work on this enemy's courpse. Set to zero to make it not work. Restore (Column HE): unknown Never Count (Column HF): unknown Hit Class (Column HG): unknown (Nefarius: what hitclass effect is used when it hits something) SplEndDeath (Column HH): unknown (Nefarius: as for all subsequent versions, just that the absence of minion columns makes this here useless) SplGetModeChart (Column HI): unknown SplEndGeneric (Column HJ): unknown SplClientEnd (Column HK): unknown DeadCollision (Column HL): Determines if an enemy's courpse will block a character's path. An example is Duriel's courpse which can't be walked over when you kill him. UnflatDead (Column HM): unknown BloodLocal (Cloumn HN): unknown DeathDamage (Column HO): Haven't tested, but it probably determines how much damage a monster does when it dies. (Nefarius: boolean: does damage on death yes/no) PetIgnore (Column HP): Set to one to make a monster fighting for you (Golem, Valkerie, etc.) never attack it. (Nefarius: the below work as for 1.10+) NoGfxHitTest (Column HQ): unknown HitTestTop (Column HR): unknown HitTestLeft (Column HS): unknown HitTestWidth (column HT): unknown HitTestHeight (Column HU): unknown Part II: Trick One: Make any monster appear in any area You'll need to use levels.txt for this one as well. If you're looking at monstats.txt using a spreedsheet program of somekind, notice that the rows are numbered. These numbers-2 actually give you the monster number for each monster in the game. For example, let's look at Hell Bovines (cows). They're on row 393. The monster number for them is 391 (393-2=391). Now open up levels.txt. Scroll left until you see some columns labeled M1, M2, M3, etc. You'll see numbers under these columns. These are the monsters that appear in these levels. If you look at the entry for the secret cow level you'll notice 391 listed in these columns. To the left of the M1 column is the column that determines how many different monsters can appear in this level. If you add an entry to the M columns, make sure you also change the value in the other column. If you want to make a Boss monster like Diablo, Blood Raven or the Summoner appear, there's one other thing you need to change. Go to the Spwaned column (column F) in monstats.txt file and make the column entry for the monster you want to appear a one. Trick Two: Cloning a Monster This trick is useful if you want to spawn a Boss monster, but you think the boss is too hard to fight as a regular enemy. It's also useful to do this in order to get around some of the annoyances of killing Bosses. For example, killing a spawned Diablo will trigger the counter that ends the game. Killing a spawned Andarial causes a massive explosion that kills every other monster within several screens of her. A cloned monster will usually not carry over any special death animation with it. To actually clone a monster, open up both the monstats.txt file and the file name montypes.txt. For my example, I'll clone Diablo. -First go to the entry for Diablo in monstats.txt (Row 245). -Copy that entire row. -Now go to the entry labeled Diablo Clone (Row 335). -Paste the row you copied earlier over this row. -Set the Spawned entry (Column F) to one if you haven't already. -Set the eBoss entry (Column EV) to zero. If you leave it at one, the game will crash when you kill this clone. -Now go into montypes.txt -Find Diablo's entry (also row 245). -Copy that entire row. -Find the Diablo Clone entry (Row 335). -Paste what you copied into that row. And that's it. Go back through and change the stats for you're cloned Diablo if you'd like. If you know how to work with string.tbl, you can even give your new Diablo clone a different name by inserting it into the string.tbl file and then typing its name in the class column in monstats.txt. One thing to note is that sometimes if you copy a large monster into another spot, that clone may not display correctly. For example, copying Diablo to somewhere other than the Diablo Clone entry may make your new Diablo appear without a body, or he may even be invisible. It's best to use on of the unused rows in the monstats.txt file to create your clones (there are at least 20 of them, so don't worry about running out unless you're really imaganitive). Do not place your copied monster at the end of the monstats.txt file after the last monster entry. The game will crash if you do. Trick 3: Kill Jar-Jar! Okay, so you're not really killing the Star Wars Jar-Jar, but you may have noticed that the namco for Kaleen in the monstats.txt file lists Jar-Jar. Well, Kaleen's pretty annoying too ('you may not pass' 'you may not pass' blah blah blah). While I don't know how to make attacks work in town, you can make the character killable and then spawn him in some other area of the game. Here's what to do, and this will work on other characters that look like hirelings in the game. -Set ModeDH (Column BA) to one if it isn't set already. -Set ModeGH (Column BD) to one if it isn't already. -Set ModeDD (Column BM) to one. -Set Align (Column CM) to zero. -Make sure the IsSel entry (Column CO) is set to one. -Make sure NeverSel (Column CR) is set to zero. -Set IsAtt (Column CS) is set to one. -Set Interact (Column EX) to zero. -Make sure Killible (Column HC) is set to one. And there you have it. You can try this on other NPC's as well like the guards in each act. The game tends to crash if you use these settings to make important NPC's like Cain or Izual killable though. Link to this article: Select all [url=https://d2mods.info/forum/kb/viewarticle?a=383]Knowledge Base - MonStats.txt[/url]