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

CodeDescription
0Cold
1Poison
2Level 0
3Level 1
4Level 2
5Level 3
6Level 4
7Level 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

TokenDescription
DTDeath / Reset
NUNeutral
WLWalk
GHGet Hit
A1Attack 1
A2Attack 2
BLBlock
SCCast
S1Skill 1
S2Skill 2
S3Skill 3
S4Skill 4
DDDead
GHKnockback
xxSequence
RNRun

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.

CodeDescription
0Evil Alignment – The monster will attack the player
1Good Alignment – The monster will fight with the player and will be in the player’s party
2Neutral 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.

TokenDescription
DTDeath / Reset
NUNeutral
WLWalk
GHGet Hit
A1Attack 1
A2Attack 2
BLBlock
SCCast
S1Skill 1
S2Skill 2
S3Skill 3
S4Skill 4
DDDead
GHKnockback
RNRun

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

TokenDescription
DTDeath / Reset
NUNeutral
WLWalk
GHGet Hit
A1Attack 1
A2Attack 2
BLBlock
SCCast
S1Skill 1
S2Skill 2
S3Skill 3
S4Skill 4
DDDead
GHKnockback
xxSequence
RNRun

El1Type (to El3Type) – Defines the type of elemental damage. This field is used when El#Mode is not null.

CodeDescription
fireFire
ltngLightning
magMagic
coldCold
poisPoison
lifeLife Drain
manaMana Drain
stamStamina Drain
stunStun
randRandomly select between Fire, Lightning, Magic, Cold, or PoisonIf the related “El#Dur” field equals 0, then default the value to 25
burnBurning
frzeFreeze

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.

CodeQuest Progress
0Act 1 Prologue Seen
1Den of Evil Completed
2Sisters’ Burial Grounds Completed
3Tools of the Trade Completed
4The Search for Cain Completed
5The Forgotten Tower Completed
6Sisters to the Slaughter Completed
7Act 1 Traversed
8Act 2 Prologue Seen
9Radament’s Lair Completed
10The Horadric Staff Completed
11Tainted Sun Completed
12Arcane Sanctuary Completed
13The Summoner Completed
14The Seven Tombs Completed
15Act 2 Traversed
16Act 3 Prologue Seen
17Lam Esen’s Tome Completed
18Khalim’s Will Completed
19Blade of the Old Religion Completed
20The Golden Bird Completed
21The Blackened Temple Completed
22The Guardian Completed
23Act 3 Traversed
24Act 4 Prologue Seen
25The Fallen Angel Completed
26Terror’s End Completed
27Hell’s Forge Completed
28Act 4 Traversed
29Rogue Warning Complete
30Guard in Town Warning Complete
31Guard in Desert Warning Complete
32Dark Wanderer Seen
33Angel Warning Complete
34Act 5 Prologue Seen
35Siege on Harrogath Completed
36Rescue on Mount Arreat Completed
37Prison of Ice Completed
38Betrayal of Harrogath Completed
39Rite of Passage Completed
40Eve of Destruction Completed
41Respecialization 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

CodeDescription
0History Success
1History Earned Reward
2Checkpoint 1
3Checkpoint 2
4Checkpoint 3
5Checkpoint 4
6Checkpoint 5
7Checkpoint 6
8Checkpoint 7
9Checkpoint 8
10Checkpoint 9
11Checkpoint 10
12Complete Quest Log
13Current Game Success
14Current Game Failure
15Previous Game

SplEndDeath – Controls a special case death handler for the monster that is ran on the server side

CodeDescription
nullDo nothing
1Spawn the monster type from the “minion1” field after this monster dies
2Kill 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 endingDescription
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 modeProcess the event Run AI
247“frogdemon1”Sequence (xx)Process the event Run AI
403“trappedsoul1”Any modeProcess 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 endingDescription
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)