Overview
This file controls the main functionalities and statistics for every monster in the game. This includes enemy monsters, pets, and NPC units.
This file is connected to the monstats2.txt file, so additional functionalities can be found in that file. This means that this file’s number and order of entries should be identical with the monstats2.txt file.
The “(N)” text in field names signifies to use that specific value for games in Nightmare difficulty
The “(H)” text in field names signifies to use that specific value for games in Hell difficulty
Any column field name starting with “*” is considered a comment field and is not used by the game
Data Fields
Id – Controls the unique name ID to define the monster. This must match the same value in the monstats2.txt file.
BaseId – Points to the “Id” of another monster to define the monster’s base type. This is to create groups of monsters which are considered the same type.
NextInClass – Points to the “Id” of another monster to signify the next monster in the group of this monster’s type. This is to continue the groups of monsters which are considered the same type. The order should be contiguous.
TransLvl – Defines the color transform level to use for this monster, which affects what color palette that the monster will use
Code | Description |
0 | Cold |
1 | Poison |
2 | Level 0 |
3 | Level 1 |
4 | Level 2 |
5 | Level 3 |
6 | Level 4 |
7 | Level Miscellaneous |
NameStr – String Key. Used to define the monster’s name, such as in the Life bar UI when it is being targeted.
MonStatsEx – Controls a pointer to the “Id” of a monster to define which entry to use in the monstats2.txt file. This should always match the same “Id” value for the monster in this file.
MonProp – Points to the “Id” field from the MonProp.txt file. Used to add special modifiers to the monster.
MonType – Points to the “type” field from the MonType.txt file. Used to handle the monster’s classification.
AI – Points to a type of AI script to use for the monster (See monai.txt).
DescStr – String Key. Used to add a string to appear as an additional description below the Life bar UI when the monster is being targeted.
Code – Controls the token used for choosing the proper cells to display the monster’s graphics
enabled – Boolean Field. If equals 1, then this monster is allowed to spawn in the game. If equals 0, then this monster will never spawn in the game.
rangedtype – Boolean Field. If equals 1, then the monster will be classified as a ranged type. If equals 0, then the monster will be classified as a melee type.
placespawn – Boolean Field. If equals 1, then this monster will be treated as a spawner, so monsters that spawn can be initially placed within this monster. If equals 0, then ignore this.
spawn – Points to the “Id” of another monster to control what kind of monster is spawned from this monster. This is only used if the “placespawn” field is enabled.
spawnx & spawny – Controls the X & Y offsets for where another monster is displaced when being spawned by this monster.
spawnmode – Defines the animation mode that the spawned monsters will be initiated with
Token | Description |
DT | Death / Reset |
NU | Neutral |
WL | Walk |
GH | Get Hit |
A1 | Attack 1 |
A2 | Attack 2 |
BL | Block |
SC | Cast |
S1 | Skill 1 |
S2 | Skill 2 |
S3 | Skill 3 |
S4 | Skill 4 |
DD | Dead |
GH | Knockback |
xx | Sequence |
RN | Run |
minion1 & minion2 – Points to the “Id” of another monster to control what kind of monster is spawned with this monster when it is spawned, like a monster pack. The “minion1” field is also used for spawning a monster when this monster is killed while it has the “SplEndDeath” field enabled.
SetBoss – Boolean Field. If equals 1, then set the monster AI to use the Boss AI type, which can affect the monster’s behaviors. If equals 0, then ignore this.
BossXfer – Boolean Field. If equals 1, then the monster’s AI will transfer its boss recognition to another monster, which can affect the minion monster behaviors after this boss is killed. If equals 0, then ignore no boss AI will transfer and minion monsters will behave differently after the boss is killed. This field relies on the “SetBoss” field being enabled.
PartyMin – The minimum number of minions that can spawn with this monster. Uses the “minion1” and “minion2” fields. The actual number is a random value chosen between the “PartyMin” and “PartyMax” field values.
PartyMax – The maximum number of minions that can spawn with this monster. Uses the “minion1” and “minion2” fields. The actual number is a random value chosen between the “PartyMin” and “PartyMax” field values.
MinGrp – The minimum number of duplicates of this monster that can spawn together. The actual number is a random value chosen between the “MinGrp” and “MaxGrp” field values.
MaxGrp – The maximum number of duplicates of this monster that can spawn together. The actual number is a random value chosen between the “MinGrp” and “MaxGrp” field values.
sparsePopulate – If this value is greater than 0, then it controls the percent chance that this monster does not spawn, and another monster will spawn in its place. (Out of 100)
Velocity – Determines the movement velocity of the monster, which can be the monster’s baseline walk speed.
Run – Determines the run speed of the monster as opposed to walk speed. This is only used if the monster has a Run mode.
Rarity – Modifies the chance that this monster will be chosen to spawn in the area level. The higher the value is, then the more likely this monster will be chosen. This value acts as a numerator and a denominator. All “Rarity” values of possible monsters get summed together to give a total denominator, used for the random roll. For example, if there are 3 possible monsters that can spawn, and their “Rarity” values are 1, 2, 2, then their chances to be chosen are 1/5, 2/5, and 2/5 respectively. If this value equals 0, then this monster is never randomly selected to spawn in an area level.
Level – Determines the monster’s level. This value for Nightmare and Hell difficulty can be overridden by the area level’s “MonLvl#” or “MonLvl#Ex” value (See Levels.txt), unless the monster’s “boss” and “noRatio” fields are enabled.
MonSound – Points to the “Id” field of a monster sound from the monsounds.txt file. This is used to control the monsters assigned sounds, when the monster is spawned as a Normal monster.
UMonSound – Points to the “Id” field of a monster sound from the monsounds.txt file. This is used to control the monsters assigned sounds, when the monster is spawned as a Unique or Champion monster.
threat – Controls the AI threat value of the monster which can affect the targeting priorities of enemy Ais for this monster. The higher this value is, then the more likely that enemy AI will target this monster.
aidel – Controls the delay in frame length for how often the monster’s AI will update its commands. A lower delay means that the monster will perform commands more often without as long of a pause in between.
aidist – Controls the maximum distance (measured in tiles) between the monster and an enemy until the monster’s AI becomes aggressive. If equals 0, then default to 35.
aip1 (to aip8) – Defines numeric parameters used to control various functions of the monster’s AI. These fields depend on which AI script is being used (See monai.txt, and the “AI” field in monstats.txt)
MissA1 & MissA2 – Points to the “Missile” field from Missiles.txt to determine which missile to use when the monster is in Attack 1 & Attack 2 mode
MissS1 (to MissS4) – Points to the “Missile” field from Missiles.txt to determine which missile to use when the monster is in Skill 1 (to Skill 4) mode
MissC – Points to the “Missile” field from Missiles.txt to determine which missile to use when the monster is in Cast mode
MissSQ – Points to the “Missile” field from Missiles.txt to determine which missile to use when the monster is in Sequence mode
Align – Controls the monster’s alignment, which determines if the monster will be an enemy, ally, or neutral party to the player.
Code | Description |
0 | Evil Alignment – The monster will attack the player |
1 | Good Alignment – The monster will fight with the player and will be in the player’s party |
2 | Neutral Alignment – The monster will not attack the player and will not be in the player’s party |
isSpawn – Boolean Field. If equals 1, then the monster is allowed to spawn in an area level. If equals 0, then the monster will not be spawned automatically in an area level.
isMelee – Boolean Field. If equals 1, then the monster is classified as a melee only type, which can affect its AI behaviors and what monster modifiers are allowed on the monster. If equals 0, then ignore this.
npc – Boolean Field. If equals 1, then the monster is classified as an NPC (Non-Playable Character), which can affect its AI behaviors and how the player treats this monster. If equals 0, then ignore this.
interact – Boolean Field. If equals 1, then the monster is interactable, meaning that the player can click on the monster to perform an interact command instead of attacking. If equals 0, then ignore this.
inventory – Boolean Field. If equals 1, then monster will have an inventory with randomly generated items, such as an NPC with shop items (if the “interact” field is enabled) or a summoned unit with random equipped items (also see monequip.txt). If equals 0, then ignore this.
inTown – Boolean Field. If equals 1, then the monster is allowed to be in town. If equals 0, then the monster is not allowed to be in town, which can affect or disable their AI or collision from entering towns.
lUndead – Boolean Field. If equals 1, then the monster is treated as a Low Undead, meaning that the monster is classified as an Undead type and can be resurrected by certain AI. If equals 0, then ignore this.
hUndead – Boolean Field. If equals 1, then the monster is treated as a High Undead, meaning that the monster is classified as an Undead type but cannot be resurrected by certain AI. If equals 0, then ignore this.
demon – Boolean Field. If equals 1, then the monster is classified as a Demon type. If equals 0, then ignore this.
flying – Boolean Field. If equals 1, then the monster is flagged as a flying type, which can affect its collision with the area level and how it is spawned. If equals 0, then ignore this.
opendoors – Boolean Field. If equals 1, then the monster will use its AI to open doors if necessary. If equals 0, then the monster cannot open doors and will treat doors as another type of collision.
boss – Boolean Field. If equals 1, then the monster is classified as a Boss type, which can affect boss related AI and functions. If equals 0, then ignore this.
primeevil – Boolean Field. If equals 1, then the monster is classified as a Prime Evil type, or an Act End boss, which can affect various skills, AI, and damage related functions. If equals 0, then ignore this.
killable – Boolean Field. If equals 1, then the monster can be killed, damage, and be put in a Death or Dead mode. If equals 0, then the monster cannot be damaged or killed.
switchai – Boolean Field. If equals 1, then monster’s AI can switched, such as by the Assassin’s Mind Blast ability. If equals 0, then the monster AI cannot be switched.
noAura – Boolean Field. If equals 1, then the monster cannot be affected by friendly auras. If equals 0, then the monster can be affected by friendly auras.
nomultishot – Boolean Field. If equals 1, then the monster is not allowed to spawn with the Multi-Shot unique monster modifier (See monumod.txt). If equals 0, then ignore this.
neverCount – Boolean Field. If equals 1, then the monster is not counted on the list of the active monsters in the area, which affects spawning and saving functions. If equals 0, then the monster will be accounted for, and can be part of the active or inactive list functions.
petIgnore – Boolean Field. If equals 1, then pet AI scripts will ignore this monster (See monai.txt). If equals 0, then pet AI will attack this monster.
deathDmg – Boolean Field. If equals 1, then the monster will explode on death. This has special cases for the “bonefetish1” and “siegebeast1” monster classes, otherwise the monster will use a general death damage function to damage nearby units based on the monster’s health percentage. If equals 0, then ignore this.
genericSpawn – Boolean Field. If equals 1, the monster is flagged as a possible selection for the AI generic spawner function. There are defaults for using the If equals 0, then ignore this.
zoo – Boolean Field. If equals 1, then the monster will be flagged as a zoo type monster, which will give it the AI zoo behavior. If equals 0, then ignore this.
CannotDesecrate – Boolean Field. If equals 1, then the monster will not be able to be desecrated when inside a desecrated level. If equals 0, then ignore this.
rightArmItemType – Determines what type of items the monster is allowed to hold in its right arm (see ItemTypes.txt). A blank value means it can hold any item.
leftArmItemType – Determines what type of items the monster is allowed to hold in its left arm (see ItemTypes.txt). A blank value means it can hold any item.
canNotUseTwoHandedItems – Boolean Field. If equals 1, then the monster can not items marked as two handed (see weapons.txt)
SendSkills – Determines which of the monster’s skill’s level should be sent to the client. Uses a byte value, where the code tests each bit to determine which of the monster’s skills to check.
Skill1 (to Skill8) – Points to a skill from the “skill” field in the skills.txt file. This gives the monster the skill to use (requires “Sk#mode”)
Sk1mode (to Sk8mode) – Determines the monster’s animation mode when using the related skill. Outside of the standard animation mode inputs, the field can also point to a “sequence” defined in the monseq.txt file, which handle a specific set of frames to place a sequence animation.
Token | Description |
DT | Death / Reset |
NU | Neutral |
WL | Walk |
GH | Get Hit |
A1 | Attack 1 |
A2 | Attack 2 |
BL | Block |
SC | Cast |
S1 | Skill 1 |
S2 | Skill 2 |
S3 | Skill 3 |
S4 | Skill 4 |
DD | Dead |
GH | Knockback |
RN | Run |
Sk1lvl (to Sk8lvl) – Controls the base skill level of the related skill on the monster
Drain – Controls the monster’s overall Life and Mana steal percentage. This can also be affected by the “LifeStealDivisor” and “ManaStealDivisor” fields from the difficultylevels.txt file.If equals 0, then the monster will not have Life or Mana steal.
coldeffect – Sets the percentage change in movement speed and attack rate when the monster if chilled by a cold effect. If this equals 0, then the monster will be immune to the cold effect.
ResDm – Sets the monster’s Physical Damage Resistance stat
ResMa – Sets the monster’s Magic Resistance stat
ResFi – Sets the monster’s Fire Resistance stat
ResLi – Sets the monster’s Lightning Resistance stat
ResCo – Sets the monster’s Cold Resistance stat
ResPo – Sets the monster’s Poison Resistance stat
DamageRegen – Controls the monster’s Life regeneration per frame. This is calculated based on the monster’s maximum life: Regeneration Rate = (Life * “DamageRegen”) / 16
SkillDamage – Points to a skill from the “skill” field in the skills.txt file. This changes the monster’s min physical damage, max physical damage, and Attack Rating to be based off the values from the linked skill and its current level from the monster’s owner (usually the player who summoned the monster).
noRatio – Boolean Field. If equals 1, then use this file’s fields to determine the monster’s baseline stats (“minHP”, “maxHP”, “AC”, “Exp”, “A1MinD”, “A1MaxD”, “A1TH”, “A2MinD”, “A2MaxD”, “A2TH”, “S1MinD”, “S1MaxD”, “S1TH”). If equals 0, then use the MonLvl.txt file to determine the monster’s baseline stats.
ShieldBlockOverride – If equals 1, then the monster can block without a shield (the block chance stat will take effect even without a shield equipped). If equals 2, then the monster cannot block at all, even with a shield equipped. If equals 0, then ignore this.
ToBlock – The monster’s percent chance to block an attack
Crit – The percent chance for the monster to score a critical hit when attacking an enemy, which causes the attack to deal double damage
minHP – The monster’s minimum amount of Life when spawned
maxHP – The monster’s maximum amount of Life when spawned
AC – The monster’s Defense value
Exp – The amount of Experience that is rewarded to the player when the monster is killed
A1MinD – The minimum damage dealt by the monster when it is using the Attack 1 (A1) animation mode
A1MaxD – The maximum damage dealt by the monster when it is using the Attack 1 (A1) animation mode
A1TH – The monster’s Attack Rating when it is using the Attack 1 (A1) animation mode
A2MinD – The minimum damage dealt by the monster when it is using the Attack 2 (A2) animation mode
A2MaxD – The maximum damage dealt by the monster when it is using the Attack 2 (A2) animation mode
A2TH – The monster’s Attack Rating when it is using the Attack 2 (A2) animation mode
S1MinD – The minimum damage dealt by the monster when it is using the Skill 1 (S1) animation mode
S1MaxD – The maximum damage dealt by the monster when it is using the Skill 1 (S1) animation mode
S1TH – The monster’s Attack Rating when it is using the Skill 1 (S1) animation mode
El1Mode (to El3Mode) – Determines which animation mode will trigger an additional elemental damage type when used
Token | Description |
DT | Death / Reset |
NU | Neutral |
WL | Walk |
GH | Get Hit |
A1 | Attack 1 |
A2 | Attack 2 |
BL | Block |
SC | Cast |
S1 | Skill 1 |
S2 | Skill 2 |
S3 | Skill 3 |
S4 | Skill 4 |
DD | Dead |
GH | Knockback |
xx | Sequence |
RN | Run |
El1Type (to El3Type) – Defines the type of elemental damage. This field is used when El#Mode is not null.
Code | Description |
fire | Fire |
ltng | Lightning |
mag | Magic |
cold | Cold |
pois | Poison |
life | Life Drain |
mana | Mana Drain |
stam | Stamina Drain |
stun | Stun |
rand | Randomly select between Fire, Lightning, Magic, Cold, or PoisonIf the related “El#Dur” field equals 0, then default the value to 25 |
burn | Burning |
frze | Freeze |
El1Pct (to El3Pct) – Controls the random percent chance (out of 100) that the monster will append the element damage to the attack. This field is used when El#Mode is not null.
El1MinD (to El3MinD) – The minimum element damage applied to the attack. This field is used when El#Mode is not null.
El1MaxD (to El3MaxD) – The maximum element damage applied to the attack. This field is used when El#Mode is not null.
El1Dur (to El3Dur) – Controls the duration of the related element mode in frame lengths (25 Frames = 1 Second). This is only applicable for the Cold, Poison, Stun, Burning, Freeze elements. There are special cases when evaluating the elements, where Poison min and max damage are multiplied by 10, and Poison duration is multiplied by 2. This field is used when El#Mode is not null.
TreasureClass – Defines which Treasure Class is used by the monster when it is killed. Points to the “Treasure Class” field from the TreasureClassEx.txt file. Used for normal monster types.
TreasureClassChamp – Defines which Treasure Class is used by the monster when it is killed. Points to the “Treasure Class” field from the TreasureClassEx.txt file. Used for Champion monster types.
TreasureClassUnique – Defines which Treasure Class is used by the monster when it is killed. Points to the “Treasure Class” field from the TreasureClassEx.txt file. Used for Unique monster types.
TreasureClassQuest – Defines which Treasure Class is used by the monster when it is killed. Points to the “Treasure Class” field from the TreasureClassEx.txt file. Used for quest related monster drops (See “TCQuestId” and “TCQuestCP”).
TreasureClassDesecrated – Defines which Treasure Class is used by the monster when it is killed while desecrated (Terrorized). Points to the “Treasure Class” field from the TreasureClassEx.txt file. Used for normal monster types.
TreasureClassDesecratedChamp – Defines which Treasure Class is used by the monster when it is killed while desecrated (Terrorized). Points to the “Treasure Class” field from the TreasureClassEx.txt file. Used for Champion monster types.
TreasureClassDesecratedUnique – Defines which Treasure Class is used by the monster when it is killed while desecrated (Terrorized). Points to the “Treasure Class” field from the TreasureClassEx.txt file. Used for Unique monster types.
TCQuestId – Checks to see if the player has does not have a quest flag progress. If not, then use the “TreasureClass4” field, based on the game’s current difficulty.
Code | Quest Progress |
0 | Act 1 Prologue Seen |
1 | Den of Evil Completed |
2 | Sisters’ Burial Grounds Completed |
3 | Tools of the Trade Completed |
4 | The Search for Cain Completed |
5 | The Forgotten Tower Completed |
6 | Sisters to the Slaughter Completed |
7 | Act 1 Traversed |
8 | Act 2 Prologue Seen |
9 | Radament’s Lair Completed |
10 | The Horadric Staff Completed |
11 | Tainted Sun Completed |
12 | Arcane Sanctuary Completed |
13 | The Summoner Completed |
14 | The Seven Tombs Completed |
15 | Act 2 Traversed |
16 | Act 3 Prologue Seen |
17 | Lam Esen’s Tome Completed |
18 | Khalim’s Will Completed |
19 | Blade of the Old Religion Completed |
20 | The Golden Bird Completed |
21 | The Blackened Temple Completed |
22 | The Guardian Completed |
23 | Act 3 Traversed |
24 | Act 4 Prologue Seen |
25 | The Fallen Angel Completed |
26 | Terror’s End Completed |
27 | Hell’s Forge Completed |
28 | Act 4 Traversed |
29 | Rogue Warning Complete |
30 | Guard in Town Warning Complete |
31 | Guard in Desert Warning Complete |
32 | Dark Wanderer Seen |
33 | Angel Warning Complete |
34 | Act 5 Prologue Seen |
35 | Siege on Harrogath Completed |
36 | Rescue on Mount Arreat Completed |
37 | Prison of Ice Completed |
38 | Betrayal of Harrogath Completed |
39 | Rite of Passage Completed |
40 | Eve of Destruction Completed |
41 | Respecialization from Akara is Completed |
TCQuestCP – Controls which Quest Checkpoint, or current progress within a quest (based on the “TCQuestId” value), is needed to use the “TreasureClass4” field, based on the game’s current difficulty
Code | Description |
0 | History Success |
1 | History Earned Reward |
2 | Checkpoint 1 |
3 | Checkpoint 2 |
4 | Checkpoint 3 |
5 | Checkpoint 4 |
6 | Checkpoint 5 |
7 | Checkpoint 6 |
8 | Checkpoint 7 |
9 | Checkpoint 8 |
10 | Checkpoint 9 |
11 | Checkpoint 10 |
12 | Complete Quest Log |
13 | Current Game Success |
14 | Current Game Failure |
15 | Previous Game |
SplEndDeath – Controls a special case death handler for the monster that is ran on the server side
Code | Description |
null | Do nothing |
1 | Spawn the monster type from the “minion1” field after this monster dies |
2 | Kill the source unit that is related to this monster. Typically this is a mount type unit that the monster is riding when it dies |
SplGetModeChart – Boolean Field. If equals 1, then check special case handlers of certain monsters with specific “BaseId” fields while they are using certain a mode and perform a function. If equals 0, then ignore this.
Index | “BaseId” | Description |
243333705 | “diablo”“diablo clone”“uberdiablo” | If current mode equals Skill 3 (S3) or Skill 4 (S4), then do a generic attack function |
403 | “trappedsoul1” | If current mode equals Attack 1 (A1), Attack 2 (A2), Skill 1 (S1), or Skill 2 (S2), then do a generic attack function and end it with setting the monster to start the Skill 1 mode and skip the AI pause |
543 | “baalthrone” | If the current mode equals Skill 3 (S3), then tell the monster to do its Cast mode (SC) |
544570709 | “baalcrab”“baalclone”“uberbaal” | If the current mode equals Skill 3 (S3), then tell the monster to do its Cast mode (SC) |
417418 | “shadowwarrior”“shadowmaster” | If the current mode equals Skill 4 (S4), then tell the monster to do a generic attack function |
SplEndGeneric – Boolean Field. If equals 1, then check special case handlers of monsters with specific “BaseId” fields while they are ending certain modes and perform a function. If equals 0, then ignore this.
Index | “BaseId” | Mode that is ending | Description |
110 | “vulture1” | Skill 1 (S1) | Process the event Run AI |
118 | “willowwisp1” | Walk (WL) | Process the event Run AI |
136 | “batdemon1” | Skill 3 (S3) or Skill 4 (S4) | Process the event Run AI |
230231 | “firebeast”“iceglobe” | Any mode | Process the event Run AI |
247 | “frogdemon1” | Sequence (xx) | Process the event Run AI |
403 | “trappedsoul1” | Any mode | Process the event Run AI |
SplClientEnd – Boolean Field. If equals 1, then on the client side, check special case handlers of monsters with specific “BaseId” fields while they are ending certain modes and perform a function. If equals 0, then ignore this.
Index | “BaseId” | Mode that is ending | Description |
110 | “vulture1” | Skill 1 (S1) | Ignore setting the monster back to Neutral (NU) |
403404 | “trappedsoul1”“trappedsoul2” | Skill 1 (S1)or Skill 2 (S2) or Attack 1 (A1)or Attack 2 (A2) | Set the mode to Skill 1 (S1) |
136 | “batdemon1” | Skill 3 (S3) | Set the mode to Skill 4 (S4) |
136 | “batdemon1” | Skill 4 (S4) | Ignore setting the monster back to Neutral (NU) |
118231 | “willowwisp1”“iceglobe” | Walk (WL) | Ignore setting the monster back to Neutral (NU) |
497 | “catapult1” | Attack 1 (A1) | Remove the siege missile and add a new one |
247 | “frogdemon1” | Sequence (xx) | Ignore setting the monster back to Neutral (NU) |
284 | “maggotqueen1” | Dead (DD) | Ignore setting the monster back to Neutral (NU) |