D2R Data Guide (Corrected)





This data guide attempts to improve and correct some of the information provided by Blizzard.
Please be mindful of the WIP status of this data guide; there may be typos, formatting issues, etc.
With that said, here are a few important notes to keep in mind regarding the files:

Coloring Legend:

To help streamline important information as well as improve the user experience, colored text will help indicate important attributes:

- Columns shown in seagreen, indicate that it applies to all matching columns, such as waypoint1 representing the waypoint1 through waypoint9 columns
- Text shown in seagreen indicate that it contains additional info when hovered over

- Text shown in orange indicate that it is hotlinked to another file, column or function. Clicking it will both scroll to and highlight the appropriate entry

- Text shown in skyblue indicate generally important formulas, values, conditions or text. Mostly for readability purposes

Column Markers:

In addition, some extra information has been added to each column to help identify it's capabilities, using the following legend:
[ * ] = Comment column. This column is not read by the game and is used for documentation or indexing purposes only
[B] = Boolean column. Only understands the values 0 and 1. (On or Off, Disabled or Enabled, etc.)
[N] = Number column. Only understands static numbers; usually used as skill parameter or item stat value.
[O] = Open column. Understands text, numbers and limited set of special characters; usually used as references to other file entries. Cannot use calculations.
[C] = Calculation column. Can use math arithmetic for dynamic values (SkillCalc.txt). Can also use static numbers
[X] = Broken column. This column is broken or highly restrictive.
This document is not guaranteed to be 100% accurate or complete

ActInfo.txt

This file controls global Act functionalities including item levels, monster behaviors, and waypoints

This file uses the WanderingMon.txt file for a modular list of potential wandering units to spawn

This file defines where an act begins and ends. It is new to D2R and helps control traveling between acts.


Data Fields

act - [O] - Defines the ID for the Act

town - [O] - Uses an area level (Name field from Levels.txt) to define the Act's town area

start - [O] - Uses an area level (Name field from Levels.txt) to define where the player starts in the Act

maxnpcitemlevel - [N] - Controls the maximum item level for items sold by the NPC in the Act

classlevelrangestart - [O] - Uses an area level (Name field from Levels.txt) with its MonLvl values as a global Act minimum monster level. For example, this is used to determine chest levels in an Act.

classlevelrangeend - [O] - Uses an area level (Name field from Levels.txt) with its MonLvl values as a global Act maximum monster level. For example, this is used to determine chest levels in an Act.

wanderingnpcstart - [N] - Uses an index to determine which wandering monster class to use when populating areas (WanderingMon.txt for a list of possible monsters to spawn)

wanderingnpcrange - [N] - This is a modifier that gets added to the wanderingnpcstart value to randomly select an index

commonactcof - [O] - Specifies which ".D2" file to use as for the common Act COF file. This is used to establish the seed when initializing the Act.

waypoint1 - [O] - Uses an area level (Name field from Levels.txt) as the designated waypoint selection in the Waypoint UI

wanderingMonsterPopulateChance - [N] - The percent chance (from 0 to 100) to spawn a wandering monster (WanderingMon.txt for a list of possible monsters to spawn)

wanderingMonsterRegionTotal - [N] - The maximum number of wandering monsters allowed at once

wanderingPopulateRandomChance - [N] - A secondary percent chance (from 0 to #) to determine whether to attempt populating with monsters. Only fails if random chance selects 0.

Armor.txt, Misc.txt, Weapons.txt

These files control the functionality for all base items in the game (armors, miscellaneous and weapons).

They are loaded/merged together on runtime with their counterpart files in the following order: Weapons.txt, Armor.txt, Misc.txt

Columns that typically only exist in one of the files will be listed below all of the shared column entries.

This also means columns can be copied between files (such as auto prefix or spelldesc, etc)


Data Fields

name - [O] - This is a reference field to define the item; it does not need to be uniquely named

version - [N] - Defines which game version to create this item (0 = Classic mode | 100 = Expansion mode)

compactsave - [B] - If equals 1, then only the item's base stats will be stored in the character save, but not any modifiers or additional stats. If equals 0, then all of the items stats will be saved.

rarity - [N] - Determines the chance that the item will randomly spawn (1 / N). The higher the value then the rarer the item will be. This field depends on the spawnable field being enabled, the quest field being disabled, and the item level being less than or equal to the area level. This value is also affected by the relative Act number that the item is dropping in, where the higher the Act number, then the more common the item will drop.

spawnable - [B] - If equals 1, then this item can be randomly spawned. If equals 0, then this item will never randomly spawn.

speed - [N] - For Armors: Controls the Walk/Run Speed reduction when wearing the item. For Weapons: Controls the Attack Speed reduction when wearing the item.

reqstr - [N] - Defines the amount of the Strength attribute needed to use the item

reqdex - [N] - Defines the amount of the Dexterity attribute needed to use the item

durability - [N] - Defines the base durability amount that the item will spawn with. An item must have durability to become ethereal

nodurability - [B] - If equals 1, then the item will not have durability. If equals 0, then the item will have durability.

level - [N] - Controls the base item level. This is used for determining when the item is allowed to drop, such as making sure that the item level is not greater than the monster's level or the area level.

ShowLevel - [B] - If equals 1, then display the item level next to the item name. If equals 0, then ignore this.

levelreq - [N] - Controls the player level requirement for being able to use the item

cost - [N] - Defines the base gold cost of the item when being sold by an NPC. This can be affected by item modifiers and the rarity of the item.

gamble cost - [X] [N] - Defines the gambling gold cost of the item on the Gambling UI. Only functions for rings and amulets.

code - [O] - Defines a unique 3* letter/number identifier code for the item. This code is case sensitive, so a69 and A69 are considered different. *Can technically use 4 characters instead of 3, but Items.json will not process it (no visuals).

namestr - [O] - String Key that is used for the base item name. Reference string files found in local/lng/strings, such as item-names.json

magic lvl - [N] - Defines the magic level of the item, which can affect how magical item modifiers that can appear on the item (AutoMagic.txt)

auto prefix - [N] - Automatically picks an item affix name from a designated group value from AutoMagic.txt. Applies to all item qualities, excluding sets and uniques.

alternategfx - [O] - Uses a unique 3 letter/number code similar to the defined code fields to determine what in-game graphics to display on the player character when the item is equipped

normcode - [O] - Links to the Code field to determine the normal version of the item

ubercode - [O] - Links to a Code field to determine the Exceptional version of the item

ultracode - [O] - Links to a Code field to determine the Elite version of the item

component - [N] - Determines the layer of player animation when the item is equipped. This uses a Token entry from Composit.txt

invwidth & invheight - [N] - Defines the width and height of grid cells that the item occupies in the player inventory

hasinv - [B] - Determines if an item can be socketed with runes, jewels or Gems. (1 = Socketable | 0 = Not Socketable)

Gemsockets - [N] - Controls the maximum number of sockets allowed on this item. This is limited by the item's size based on the invwidth and invheight fields. This also compares with the MaxSockets1 field(s) in the ItemTypes.txt file.

gemapplytype - [N] - Determines which affect from a gem or rune will be applied when it is socketed into this item (Gems.txt)

CodeDescription
0Weapon
1Armor or Helmet
2Shield

flippyfile - [O] - Controls which DC6 file to use for displaying the item in the game world when it is dropped on the ground (uses the file name as the input). *Legacy View Only

invfile - [O] - Controls which DC6 file to use for displaying the item graphics in the inventory (uses the file name as the input). *Legacy View Only

uniqueinvfile - [O] - Controls which DC6 file to use for displaying the item graphics in the inventory when it is a Unique quality item (uses the file name as the input). *Legacy View Only (Any text required in field to use entry from uniques.JSON for D2R view)

setinvfile - [O] - Controls which DC6 file to use for displaying the item graphics in the inventory when it is a Set quality item (uses the file name as the input). *Legacy View Only

useable - [B] - If equals 1, then the item can be used with the right-click mouse button command (this only works with specific belt items or quest items). If equals 0, then ignore this

stackable - [B] - If equals 1, then the item will use a quantity field and handle stacking functionality. This can depend on if the item type is throwable, is a type of ammunition, or is some other kind of miscellaneous item. If equals 0, then the item cannot be stacked

minstack - [N] - Controls the minimum stack count or quantity that is allowed on the item. This field depends on the stackable field being enabled

maxstack - [N] - Controls the maximum stack count or quantity that is allowed on the item. This field depends on the stackable field being enabled

spawnstack - [N] - Controls the stack count or quantity that the item can spawn with. This field depends on the stackable field being enabled

Transmogrify - [X] [B] - If equals 1, then the item will use the transmogrify function. If equals 0, then ignore this. This field depends on the "useable" field being enabled. Does not function at all

TMogType - [X] [O] - Links to a "code" field to determine which item is chosen to transmogrify this item to. Does not function at all

TMogMin - [X] [N] - Controls the minimum quantity that the transmogrify item will have. This depends on what item was chosen in the "TMogType" field, and that the transmogrify item has quantity. Does not function at all

TMogMax - [X] [N] - Controls the minimum quantity that the transmogrify item will have. This depends on what item was chosen in the "TMogType" field, and that the transmogrify item has quantity. Does not function at all

type - [O] - Points to an Code defined in the ItemTypes.txt file, which controls how the item functions

type2 - [O] - Points to a secondary Item Type defined in the ItemTypes.txt file, which controls how the item functions. This is optional but can add more functionalities and possibilities with the item

dropsound - [O] - Points to a sound defined in the Sounds.txt file. Used when the item is dropped on the ground

dropsfxframe - [N] - Defines which frame in the flippyfile animation to play the dropsound when the item is dropped on the ground

usesound - [O] - Points to sound defined in the Sounds.txt file. Used when the item is moved in the inventory or used

unique - [B] - If equals 1, then the item can only spawn as a Unique quality type. If equals 0, then the item can spawn as other quality types

transparent - [B] - If equals 1, then the item will be drawn transparent on the player model (similar to ethereal models). If equals 0, then the item will appear solid on the player model

transtbl - [N] - Controls what type of transparency to use (if the above transparent field is enabled). Referenced by the Code value of the Transparency Table

lightradius - [N] - Controls the value of the light radius that this item can apply on the monster. This only affects monsters with this item equipped, not other types of units. This is ignored if the item's component on the monster is "lit", "med", or "hvy"

belt - [N] - Controls which belt type to use for belt items only. This field determines what index entry in the Belts.txt file to use

quest - [N] - Controls what quest class is tied to the item which can enable certain item functionalities for a specific quest. Any value greater than 0 will also mean the item is flagged as a quest item, which can affect how it is displayed in tooltips, how it is traded with other players, its item rarity, and how it cannot be sold to an NPC. If equals 0, then the item will not be flagged as a quest item. Referenced by the Code value of the Quests Table

questdiffcheck - [B] - If equals 1 and the quest field is enabled, then the game will check the current difficulty setting and will tie that difficulty setting to the quest item. This means that the player can have more than 1 of the same quest item as long each they are obtained per difficulty mode (Normal / Nightmare / Hell). If equals 0 and the "quest" field is enabled, then the player can only have 1 count of the quest item in the inventory, regardless of difficulty

missiletype - [O] - Points to the *ID field from the Missiles.txt file, which determines what type of missile is used when using the throwing weapons

durwarning - [N] - Controls the threshold value for durability to display the low durability warning UI. This is only used if the item has durability

qntwarning - [N] - Controls the threshold value for quantity to display the low quantity warning UI. This is only used if the item has stacks

mindam - [N] - The minimum physical damage provided by the item

maxdam - [N] - The maximum physical damage provided by the item

StrBonus - [N] - The percentage multiplier that gets multiplied the player's current Strength attribute value to modify the bonus damage percent from the equipped item. If this equals 1, then default the value to 100

DexBonus - [N] - The percentage multiplier that gets multiplied the player's current Dexterity attribute value to modify the bonus damage percent from the equipped item. If this equals 1, then default the value to 100

gemoffset - [N] - Determines the starting index of possible gem/rune options based on the gemapplytype field and the Gems.txt entries. For example, if this value equals 9, then the game will start with index 9 ("Chipped Emerald") and ignore lower-indexed entries, meaning the item cannot roll these options

bitfield1 - [N] - Controls different flags that can affect the item. Uses an integer value to check against different bit fields by using the "&" operator. For example, if the value equals 5 (binary = 101) then that returns true for both the 4 (binary = 100) and 1 (binary = 1) bit field values.

Bit Field One BitsBinary Equivalent ValueDescription
11Allow the item to be capable of having Magic quality
210The item is classified as metal
4100The item is classified as a spellcaster item (currently does nothing)
81000The item is classified as a skill based item (currently does nothing)

The following fields are separated per NPC in each Act:

[NPC]Min - [N] - Minimum amount of this item type in Normal rarity that the NPC can sell at once

[NPC]Max - [N] - Maximum amount of this item type in Normal rarity that the NPC can sell at once. This must be equal to or greater than the minimum amount

[NPC]MagicMin - [N] - Minimum amount of this item type in Magical rarity that the NPC can sell at once

[NPC]MagicMax - [N] - Maximum amount of this item type in Magical rarity that the NPC can sell at once. This must be equal to or greater than the minimum amount

[NPC]MagicLvl - [N] - Maximum magic level allowed for this item type in Magical rarity; Where [NPC] is one of the following:

Charsi
Gheed
Akara
Fara
Lysander
Drognan
Hratli
Alkor
Ormus
Elzix
Asheara
Cain
Halbu
Jamella
Larzuk
Malah
Anya

Transform - [O] - Controls the color palette change of the item for the character model graphics. Referenced by the Code value of the Inventory Transform Table

InvTrans - [N] - Controls the color palette change of the item for the inventory graphics. Referenced by the Code value of the Inventory Transform Table

SkipName - [B] - If equals 1 and the item is Unique rarity, then skip adding the item's base name in its title. If equals 0, then ignore this

NightmareUpgrade - [O] - Links to another item's Code field. Used to determine which item will replace this item when being generated in the NPC's store while the game is playing in Nightmare difficulty. If this field's code equals "xxx", then this item will not change in this difficulty

HellUpgrade - [O] - Links to another item's Code field. Used to determine which item will replace this item when being generated in the NPC's store while the game is playing in Hell difficulty. If this field's code equals "xxx", then this item will not change in this difficulty

Nameable - [B] - If equals 1, then the item's name can be personalized by Anya for the Act 5 Betrayal of Harrogath quest reward. If equals 0, then the item cannot be used for the personalized name reward

PermStoreItem - [B] - If equals 1, then this item will always appear on the NPC's store. If equals 0, then the item will randomly appear on the NPC's store when appropriate

diablocloneweight - [N] - The amount of weight added to the diablo clone progress when this item is sold. When offline, selling this item will instead immediately spawn diablo clone.

Armor.txt only

minac - [N] - The minimum amount of Defense that an armor item type can have

maxac - [N] - The maximum amount of Defense that an armor item type can have

block - [N] - Controls the block percent chance that the item provides (out of 100, but caps at 75)

rArm - [N] - Controls the character's graphics and animations for the Right Arm component when wearing the armor, where the value 0 = Light or "lit", 1 = Medium or "med", and 2 = Heavy or "hvy"

lArm - [N] - Controls the character's graphics and animations for the Left Arm component when wearing the armor, where the value 0 = Light or "lit", 1 = Medium or "med", and 2 = Heavy or "hvy"

Torso - [N] - Controls the character's graphics and animations for the Torso component when wearing the armor, where the value 0 = Light or "lit", 1 = Medium or "med", and 2 = Heavy or "hvy"

Legs - [N] - Controls the character's graphics and animations for the Legs component when wearing the armor, where the value 0 = Light or "lit", 1 = Medium or "med", and 2 = Heavy or "hvy"

rSPad - [N] - Controls the character's graphics and animations for the Right Shoulder Pad component when wearing the armor, where the value 0 = Light or "lit", 1 = Medium or "med", and 2 = Heavy or "hvy"

lSPad - [N] - Controls the character's graphics and animations for the Left Shoulder Pad component when wearing the armor, where the value 0 = Light or "lit", 1 = Medium or "med", and 2 = Heavy or "hvy"

Misc.txt only

autobelt - [B] - If equals 1, then the item will automatically be placed is a free slot in the belt when picked up, if possible. If equals 0, then ignore this

bettergem - [O] - Links to another item's Code field. Also used by Function 18 from the Code field in Shrines.txt to specify which gem is the upgraded version

multibuy - [B] - If equals 1, then use the multi-buy transaction function when holding the shift key and buying this item from an NPC store. This multi-buy function will automatically purchase enough of the item to fill up to a full quantity stack or fill the available belt slots if the item is has the autobelt field enabled. If equals 0, then ignore this

spellicon - [N] - Determines the icon asset for displaying the item's spell. This uses an ID value based on the global skillicon file. If this value equals -1, then the item's spell will not display an icon. Used as a parameter for a PSpell function

pspell - [N] - Uses the Code value to select a spell from the Player Spell Table when the item is used. This depends on the item type.

state - [O] - Links to a State field defined in the States.txt file. It signifies what state will be applied to the player when the item is used. Used as a parameter for a PSpell function

cstate1 - [O] - Links to a State field defined in the States.txt file. It signifies what state will be removed from the player when the item is used. Used as a parameter for a PSpell function

len - [N] - Calculates the frame length of a state. Used as a parameter for a PSpell function

stat1 - [N] - Controls the stat modifier when the item is used (Uses the Code field from Properties.txt). Used as a parameter for a PSpell function

calc1 - [C] - Calculates the value of the above stat1 field. Used as a parameter for a PSpell function

spelldesc - [N] - Uses the code value from the below table to format and display string for the item's tooltip:

CodeParametersDescription
0 (or empty)
Do nothing
1spelldescstr
spelldescstr2
1. Add the spelldescstr string to the item tooltip
2. If spelldescstr2 is not null, then use this string instead of spelldescstr string when playing in controller mode
2spelldescstr
spelldesccalc
stat1
1. Evaluate the spelldesccalc field
2. If the stat1 value equals "hitpoints" or "hpregen" then adjust the calculated value based on the relative HealthPotionPercent value from CharStats.txt
3. If the stat1 value equals "mana" or "manarecovery" then adjust the calculated value based on the relative ManaPotionPercent value from CharStats.txt
4. Insert the calculated value into the spelldescstr string and add the string to the item tooltip
3spelldescstr
spelldesccalc
1. Evaluate the spelldesccalc field
2. Add the spelldescstr string to the item tooltip
3. Append a space string and the calculated value after the spelldescstr string to the item tooltip
4spelldescstr
spelldesccalc
1. Evaluate the spelldesccalc field
2. Insert the calculated value into the spelldescstr string and add the string to the item tooltip

spelldescstr - [O] - Defines the primary string key used by the above spelldesc table

spelldescstr2 - [O] - Defines the secondary string key used by the above spelldesc table

spelldesccalc - [C] - Value applied or used by the above spelldesc table

spelldesccolor - [N] - Uses the Code value from the below table, for the above spelldesc table.

CodeDescription
0White (R=255, G=255, B=255)
1Red (R=255, G=77, B=77)
2Green (R=0, G=255, B=0)
3Blue (R=105, G=105, B=255)
4Light Gold (R=199, G=179, B=119)
5Grey (R=105, G=105, B=105)
6Black (R=0, G=0, B=0)
7Dark Gold (R=208, G=194, B=125)
8Orange (R=255, G=168, B=0)
9Yellow (R=255, G=255, B=100)
10Dark Green (R=0, G=128, B=0)
11Purple (R=174, G=0, B=255)
12Medium Green (R=0, G=200, B=0)

Weapons.txt only

1or2handed - [B] - If equals 1, then the item will be treated as a one-handed and two-handed weapon by the Barbarian class. If equals 0, then the Barbarian can only use this weapon as either one-handed or two-handed, but not both

2handed - [B] - If equals 1, then the item will be treated as two-handed weapon. If equals 0, then the item will be treated as one-handed weapon

2handedwclass - [O] - Defines the two-handed weapon class, which controls what character animations are used when the weapon is equipped. Referenced by the Code value of the Weapon Class Table

2handmindam - [N] - The minimum physical damage provided by the weapon if the item is two-handed. This relies on the 2handed field being enabled

2handmaxdam - [N] - The maximum physical damage provided by the weapon if the item is two-handed. This relies on the 2handed field being enabled

hit class - [O] - Defines the hit class of the weapon which is used to know what SFX to use when the weapon hits an enemy. Referenced from the Code column in HitClass.txt

minmisdam - [N] - The maximum physical damage provided by the item if it is a throwing weapon

maxmisdam - [N] - The maximum physical damage provided by the item if it is a throwing weapon

rangeadder - [N] - Adds extra range in grid spaces for melee attacks while the melee weapon is equipped. The baseline melee range is 1, and this field adds to that range

wclass - [O] - Defines the one-handed weapon class, which controls what character animations are used when the weapon is equipped. Referenced by the Code value of the Weapon Class Table

AutoMagic.txt

This file controls what item affixes (groups of item modifiers) are automatically applied to items, regardless of their quality type. These item affixes will not change the quality of the item.

An example can be class based items like a paladin shield that can be Normal Quality but still have Paladin skill bonuses without changing the item's name.

This file is loaded together with other similar files in the following order: magicsuffix.txt, magicprefix.txt, AutoMagic.txt. These combined files form the Item Mods structure.

Data Fields

Name - [O] - Defines the item affix name; it does not need to be uniquely named

version - [N] - Defines which game version to use this item affix (0 = Classic mode | 100 = Expansion mode)

spawnable - [B] - If equals 1, then this item affix is used as part of the game's randomizer for assigning item modifiers when an item spawns. If equals 0, then this item affix is never used.

rare - [B] - If equals 1, then this item affix can be used when randomly assigning item modifiers when a rare item spawns. If equals 0, then this item affix is not used for rare items.

level - [N] - The minimum item level required for this item affix to spawn on the item. If the item level is below this value, then the item affix will not spawn on the item.

maxlevel - [N] - The maximum item level required for this item affix to spawn on the item. If the item level is above this value, then the item affix will not spawn on the item.

levelreq - [N] - The minimum character level required to equip an item that has this item affix

classspecific - [O] - Controls if this item affix should only be used for class specific items. Specified by the Code column in PlayerClass.txt

class - [O] - Controls which character class is required for the class specific level requirement specified in the below classlevelreq field. Specified by the Code column in PlayerClass.txt

classlevelreq - [N] - The minimum character level required for a specific class in order to equip an item that has this item affix. This relies on the class specified in the above class field. If equals null, then the class will default to using the levelreq field

frequency - [N] - Controls the probability that the affix appears on the item (a higher value means that the item affix will appear on the item more often). This value gets summed together with other frequency values from all possible item affixes that can spawn on the item, and then is used as a denominator value for the randomizer. Whichever item affix is randomly selected will be the one to appear on the item. The formula is calculated as the following: [Item Affix Selected] = ["frequency"] / [Total Frequency]. If the item has a magic lvl, then the magic level value is multiplied with this value. If equals 0, then this item affix will never appear on an item

group - [N] - Assigns an item affix to a specific group number. Items cannot spawn with more than 1 item affix with the same group number. This is used to guarantee that certain item affixes do not overlap on the same item. If this field is null, then the group number will default to group 0

mod1code - [O] - Controls the item properties for the item affix using the Code value from Properties.txt

mod1param - [N] - The "parameter" value associated with the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

mod1min - [N] - The "min" value to assign to the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

mod1max - [N] - The "max" value to assign to the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

transformcolor - [N] - Controls the color change of the item after spawning with this item affix. If empty, then the item affix will not change the item's color. Referenced from the Code column in colors.txt

itype1 - [O] - Controls what Item Types are allowed to spawn with this item affix. Uses the Code field from ItemTypes.txt

etype1 - [O] - Controls what Item Types are forbidden to spawn with this item affix. Uses the Code field from ItemTypes.txt

multiply - [N] - Multiplicative modifier for the item's buy and sell costs, based on the item affix (Calculated in 1024ths for buy cost and 4096ths for sell cost)

add - [N] - Flat integer modification to the item's buy and sell costs, based on the item affix

AutoMap.txt

This file controls how the Automap in game will display the discovered parts of the area level and store this progress in character save files.

The Automap is composed of many different image files depicted as small icons to convey what part of the area level is being displayed. This file will assign these image files to their related map cells, which will properly build the Automap as the player explores the area.

Not all tiles will have image files assigned to them, and in these cases, those parts of the Automap will remain blank.


Data Fields

LevelName - [O] - Uses a string format system to define the Act number and name of the level type. Level types are static defined values that cannot be added. The number at the start of the string defines the Act number, and the word that follows this number defines the level type. This data should stay grouped by level.

String CodeDescription

Level Type None
1 TownLevel Type 1 Town
1 WildernessLevel Type 1 Wilderness
1 CaveLevel Type 1 Cave
1 CryptLevel Type 1 Crypt
1 MonestaryLevel Type 1 Monestary
1 CourtyardLevel Type 1 Courtyard
1 BarracksLevel Type 1 Barracks
1 JailLevel Type 1 Jail
1 CathedralLevel Type 1 Cathedral
1 CatacombsLevel Type 1 Catacombs
1 TristramLevel Type 1 Tristram
2 TownLevel Type 2 Town
2 SewerLevel Type 2 Sewer
2 HaremLevel Type 2 Desert
2 BasementLevel Type 2 Sewer
2 DesertLevel Type 2 Desert
2 TombLevel Type 2 Tomb
2 LairLevel Type 2 Lair
2 ArcaneLevel Type 2 Arcane
3 TownLevel Type 3 Town
3 JungleLevel Type 3 Jungle
3 KurastLevel Type 3 Kurast
3 SpiderLevel Type 3 Spider
3 DungeonLevel Type 3 Dungeon
3 SewerLevel Type 3 Sewer
4 TownLevel Type 4 Town
4 MesaLevel Type 4 Mesa
4 LavaLevel Type 4 Hell
5 TownLevel Type 6 Town
5 SiegeLevel Type 6 Siege
5 BarricadeLevel Type 6 Barricade
5 TempleLevel Type 6 Temple
5 IceLevel Type 5 Ice Caves
5 BaalLevel Type 5 Baal
5 LavaLevel Type 5 Lava

TileName - [O] - Uses defined string codes to control the tile orientations on the Automap

String CodeDescription
flBase Floor
wlBase Left Wall
wrBase Right Wall
wtlrBase Upper Top Corner Right
wtllBase Upper Top Corner Left
wtrBase Upper Top Corner
wblBase Lower Bottom Corner Left
wbrBase Lower Bottom Corner Right
wldBase Left Door
wrdBase Right Door
wleBase Left Exit
wreBase Right Exit
coBase Column
shBase Shadow
trBase Tree
rfBase Roof
ldBase Left Wall Down
rdBase Right Wall Down
fdBase Full Wall Down
fiBase Front Wall Down

Style - [N] - Defines a group numeric ID for the range of cells, meaning that the game will try to use cells that matc the same style value, after determining the Level Type and Tile Type. If this value is equal to 255, then the style is ignored in the "Cel#" field selection

StartSequence - [N] - The start index value for valid Cel1 field(s) to choose for displaying on the Automap. If this value is equal to 255, then both the "StartSequence" and "EndSequence" are ignored in the Cel1 field(s) field selection. If this value is equal to -1, then this field is ignored in the Cel1 field(s) field selection

EndSequence - [N] - The end index value for a valid Cel1 field(s) to choose for displaying on the Automap. If this value is equal to -1, then this field is ignored in the Cel1 field(s) selection

Cel1 - [N] - Determines the unique image frame to use from the MaxiMap.dc6 file that will be used to display on the Automap for that position of the level tile. There are multiple of these fields because they can be randomly chosen to give image variety in the Automap display. If the value equals -1, then this cell is not valid and will be ignored. If no cell is chosen overall, then nothing will be drawn in this area on the Automap.

Belts.txt

This file controls the statistics for how belts and their various item slots work.

This file relies on the belt field from the Armor.txt file. Each belt entry in this file defines a belt type that controls how many slots the belt item provides.

The game uses the 3rd entry is defined as the "default" belt, meaning that the player has no belt equipped, and the game will use this entry's stats to determine how to handle the belt slots.

Data Fields

name - [O] - This is a reference field to define the belt type

numboxes - [N] - This integer field defines the number of item slots in the belt. This is used when inserting items into the belt and also for handling the removal of items when the belt item is unequipped.

box1left - [N] - Specifies the belt slot left side coordinates. This is use for Server verification purposes and does not affect the local box UI in the client.

box1right - [N] - Specifies the belt slot right side coordinates. This is use for Server verification purposes and does not affect the local box UI in the client.

box1top - [N] - Specifies the belt slot left top coordinates. This is use for Server verification purposes and does not affect the local box UI in the client.

box1bottom - [N] - Specifies the belt slot bottom side coordinates. This is use for Server verification purposes and does not affect the local box UI in the client.

defaultItemTypeCol1 - [O] - Specifies the default item type used for the populate belt and auto-use functionality on controller.

defaultItemCodeCol1 - [O] - Specifies the default item code used for the populate belt and auto-use functionality on controller. Leaving this blank uses no code and instead relies entirely on the item type.

Books.txt

This file controls functionalities of book items (also called Tomes). This includes how they interact with their related scroll items.


Data Fields

Name - [O] - This is a reference field to define the book

ScrollSpellCode - [O] - Uses an item's code to define as the scroll item for the book

BookSpellCode - [O] - Uses an item's code to define as the book item

pSpell - [N] - Defines the item spell function to use when using the book. Referenced by the Code value of the Player Spell Table

SpellIcon - [O] - Controls which DC6 file to display for the mouse cursor when using the scroll or book (Uses numeric indices to pick the DC6 file. Example: When using Identify, use icon 1 or buysell.DC6)

ScrollSkill - [O] - Defines which Skill to use for the scroll item (Uses the skill field from Skills.txt)

BookSkill - [O] - Defines which Skill to use for the book item (Uses the skill field from Skills.txt)

BaseCost - [N] - The starting gold cost to buy the book from an NPC

CostPerCharge - [N] - The additional gold cost added with the book's "BaseCost" value, based on how many charges the book has

Charstats.txt

This file controls the starting stats for each of the classes


Data Fields

class - [O] - The name of the character class (this cannot be changed)

str - [N] - Starting amount of the Strength attribute

dex - [N] - Starting amount of the Dexterity attribute

int - [N] - Starting amount of the Energy attribute

vit - [N] - Starting amount of the Vitality attribute

stamina - [N] - Starting amount of Stamina

hpadd - [N] - Bonus starting Life value (This value gets added with the vit field value to determine the overall starting amount of Life)

ManaRegen - [N] - Number of seconds to regain max Mana. (If this equals 0 then it will default to 300 seconds)

ToHitFactor - [N] - Starting amount of Attack Rating

WalkVelocity - [N] - Base Walk movement speed

RunVelocity - [N] - Base Run movement speed

RunDrain - [N] - Rate at which Stamina is lost while running

LifePerLevel - [N] - Amount of Life added for each level gained (Calculated in fourths and is divided by 256)

StaminaPerLevel - [N] - Amount of Stamina added for each level gained (Calculated in fourths and is divided by 256)

ManaPerLevel [N] - Amount of Mana added for each level gained (Calculated in fourths and is divided by 256)

LifePerVitality - [N] - Amount of Life added for each point in Vitality (Calculated in fourths and is divided by 256)

StaminaPerVitality - [N] - Amount of Stamina added for each point in Vitality (Calculated in fourths and is divided by 256)

ManaPerMagic - [N] - Amount of Mana added for each point in Energy (Calculated in fourths and is divided by 256)

StatPerLevel - [N] - Amount of Attribute stat points earned for each level gained

SkillsPerLevel - [N] - Amount of Skill points earned for each level gained

LightRadius - [N] - Baseline radius size of the character's Light Radius

BlockFactor - [N] - Baseline percent chance for Blocking

MinimumCastingDelay - [N] - Global delay on all Skills after using a Skill with a Casting Delay (Calculated in Frames, where 25 Frames = 1 Second)

StartSkill - [O] - Controls what skill will be added by default to the character's starting weapon and will be slotted in the Right Skill selection (Uses the skill field from Skills.txt)

Skill 1 - [O] - Skill that the character starts with and will always have available (Uses the skill field from Skills.txt)

StrAllSkills - [O] - String key for displaying the item modifier bonus to all skills for the class (Ex: "+1 to Barbarian Skill Levels")

StrSkillTab1 - [O] - String key for displaying the item modifier bonus to all skills for the class's first to third skill tab (Ex: "+1 to Warcries")

StrClassOnly - [O] - String key for displaying on item modifier exclusive to the class or for class specific items (Ex: "Barbarian only")

HealthPotionPercent - [N] - This scales the amount of Life that a Healing potion will restore based on the class

ManaPotionPercent - [N] - This scales the amount of Mana that a Mana potion will restore based on the class

baseWClass - [O] - Base weapon class that the character will use by default when no weapon is equipped. Referenced by the Code value of the Weapon Class Table

item1 - [O] - Item that the character starts with (Uses the code field from Weapons.txt, Armor.txt or Misc.txt)

item1loc - [O] - Location where the related item will be placed in the character's inventory. Referenced from the Code column in BodyLocs.txt

item1count - [N] - The amount of the related item that the character starts with

item1quality - [O] - Controls the quality level of the related item using the below table:

Item Quality CodeDescription
0Any Quality (Used for a random quality)
1Low Quality (Ex: "Crude")
2Normal Quality (Default value if the value is empty)
3High Quality (Superior)
4Magic Quality (Uses Magic Prefixes and Suffixes)
5Set Item
6Rare Quality
7Unique (Predetermined stats)
8Crafted
9Tempered

Cubemain.txt

This file controls the recipes for the Horadric Cube


Data Fields

description - [O] - This is a reference field to define the cube recipe

enabled - [B] - If equals 1, then the recipe can be used in-game. If equals 0, then the recipe cannot be used in-game

ladder - [B] - If equals 1, then the recipe can only be used on Ladder realm games. If equals 0, then the recipe can be used in all game types

min diff - [N] - The minimum game difficulty to use the recipe (0 = All Game Difficulties | 1 = Nightmare and Hell Difficulty only | 2 = Hell Difficulty only)

version - [N] - Defines which game version to use this recipe (0 = Classic mode | 100 = Expansion mode)

op - [N] - Uses a function as an additional input requirement for the recipe. (See param and value)

Op IDParametersDescription
(empty)Do nothing
1param
value
Require that the current day of the month is less than param or greater than value
2valueRequire that the current day of the week does not equal value
(0=None, 1=Sunday, 2=Monday, 3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday, 7=Saturday)
3param
value
Require that the player's current stat param is greater than or equal to value
4param
value
Require that the player's current stat param is less than or equal to value
5param
value
Require that the player's current stat param is not equal to value
6param
value
Require that the player's current stat param is equal to value
7param
value
Require that the player's base stat param is greater than or equal to value
8param
value
Require that the player's base stat param is less than or equal to value
9param
value
Require that the player's base stat param is not equal to value
10param
value
Require that the player's base stat param is equal to value
11param
value
Require that the player's non-base stat param is greater than or equal to value
12param
value
Require that the player's non-base stat param is less than or equal to value
13param
value
Require that the player's non-base stat param is not equal to value
14param
value
Require that the player's non-base stat param is equal to value
15param
value
Require that the input item's current stat param is greater than or equal to value
16param
value
Require that the input item's current stat param is less than or equal to value
17param
value
Require that the input item's current stat param is not equal to value
18param
value
Require that the input item's current stat param is equal to value
19param
value
Require that the input item's base stat param is greater than or equal to value
20param
value
Require that the input item's base stat param is less than or equal to value
21param
value
Require that the input item's base stat param is not equal to value
22param
value
Require that the input item's base stat param is equal to value
23param
value
Require that the input item's non-base stat param is greater than or equal to value
24param
value
Require that the input item's non-base stat param is less than or equal to value
25param
value
Require that the input item's non-base stat param is not equal to value
26param
value
Require that the input item's non-base stat param is equal to value
27valueRequire that the item's Mod Class is not equal to value. An item's Mod Class value can be the item's unique ID or quality type, depending on the case.
28
Checks that the item has the Quest and QuestDiffCheck flag, then ensures that the item's quest difficulty is greater than the game's difficulty level

param - [N] - Integer value used as a possible parameter for the op function. Normally uses the *ID field from ItemStatCost.txt for the param value

value - [N] - Integer value used as a possible parameter for the op function. Normally used to compare against the *ID linked in param

class - [O] - Defines the recipe to be only usable by a defined class. Referenced from the Code column in PlayerClass.txt

numinputs - [N] - Controls the number of items that need to be inside the cube for the recipe

input 1 - [O] - Controls what items are required for the recipe. Uses either the item's unique code or a combination of pre-defined codes from the table below, separated by commas if needed. (hiq,noe)

CodeDescription
qty=#The number (#) of this item type required for the recipe
lowLow Quality
norNormal Quality
hiqHigh Quality (Superior)
magMagic Item
setSet Item
rarRare Item
uniUnique Item
crfCrafted Item
tmpTempered Item
nosItem with no sockets
sock=#Item with sockets, where # defines the number of sockets
noeItem that is not Ethereal
ethItem that is Ethereal
upgItem that allows Upgrades
basBasic Item
excExceptional Item
eliElite Item
nruItem is not a Rune Word

output - [O] - Controls the first to third output items. Uses either the item's unique code or a combination of pre-defined codes from the table below, separated by commas if needed. (hiq,noe).

CodeDescription
Cow PortalSpecial code to create the Portal to the Moo Moo Farm
Pandemonium PortalSpecial code to randomly create 1 of the 3 Pandemonium Portals:
(The Matron's Den / The Forgotten Sands / The Furnace of Pain)
(Does not create duplicate portals in the same game)
Pandemonium Finale PortalSpecial code to create the Portal to Uber Tristram
Red PortalSpecial code to create a permanent Red Portal to a Level ID.
The Level ID is determined by the output "qty=#" code.
usetypeUse the same item type as input 1 for the output item's type
useitemUse the item from "input 1" as the output item
qty=#The number (#) of this item type created
pre=#Force the output item to have an item prefix, where # equals the ID of the prefix (the row count on MagicPrefix.txt)
suf=#Force the output item to have an item suffix, where # equals the ID of the suffix (the row count on MagicSuffix.txt)
lowLow Quality Item
norNormal Item
hiqHigh Quality Item (Superior)
magMagic Item
setSet Item
rarRare Item
uniUnique Item
crfCrafted Item
tmpTempered Item
ethEthereal Item
sockItem with sockets, where # defines the number of sockets
modUse the item modifiers from "input 1" as the output item's modifiers
unsDestroy all Gems/runes/jewels in the item's sockets
remRemove all Gems/runes/jewels in the item's sockets
regIf the function has "usetype" and if the item is a Unique, then regenerate/reroll the Unique
excExceptional Item
eliElite Item
repRepair the Item
rchRecharge all of the skill charges on the Item
lvl=#The number (#) of this item type created (same as "qty=#")

lvl - [N] - Forces the output item level to be a specific level. If this field is used, then ignore the below plvl and ilvl fields

plvl - [N] - This is a numeric ratio that gets multiplied with the current player's level, to add to the output item's level requirement

ilvl - [N] - This is a numeric ratio that gets multiplied with input 1's item's level, to add to the output item's level requirement

mod 1 - [O] - Controls the output item properties (Uses the Code field from Properties.txt)

mod 1 chance - [N] - The percent chance that the property will be assigned. If this equals 0, then the Property will always be assigned

mod 1 param - [N] - The "parameter" value associated with the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

mod 1 min - [N] - The "min" value to assign to the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

mod 1 max - [N] - The "max" value to assign to the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

DifficultyLevels.txt

This file controls global parameters for game rules and how they work between each difficulty mode

Users cannot add new difficulty modes from this file


Data Fields

Name - [O] - This is a reference field to define the difficulty mode

ResistPenalty - [N] - Defines the baseline starting point for a player character's resistances for Expansion mode

ResistPenaltyNonExpansion - [N] - Defines the baseline starting point for a player character's resistances for Non-Expansion mode

DeathExpPenalty - [N] - Modifies the percentage of current level Experience lost when a player character dies

MonsterSkillBonus - [N] - Adds additional skill levels to skills used by monsters (Only applies to monsters with skills assigned via the Skill1 column(s) in MonStats.txt)

MonsterFreezeDivisor - [N] - Divisor that affects all Freeze Length values on monsters. The attempted Freeze Length value is divided by this divisor to determine the actual Freeze Length

MonsterColdDivisor - [N] - Divisor that affects all Cold Length values on monsters. The attempted Cold Length value is divided by this divisor to determine the actual Cold Length

AiCurseDivisor - [N] - Divisor that affects all durations of Curses on monsters. The attempted Curse duration is divided by this divisor to determine the actual Curse duration

LifeStealDivisor - [N] - Divisor that affects the amount of Life Steal that player characters gain. The attempted Life Steal value is divided by this divisor to determine the actual Life Steal

ManaStealDivisor - [N] - Divisor that affects the amount of Mana Steal that player characters gain. The attempted Mana Steal value is divided by this divisor to determine the actual Mana Steal

UniqueDamageBonus - [N] - Percentage modifier for a Unique monster's overall Damage and Attack Rating. This is applied after calculating the monster's other modifications

ChampionDamageBonus - [N] - Percentage modifier for a Champion monster's overall Damage and Attack Rating. This is applied after calculating the monster's other modifications

PlayerDamagePercentVSPlayer - [N] - Percentage modifier for the total damage a player deals to another player

PlayerDamagePercentVSMercenary - [N] - Percentage modifier for the total damage a player deals to another player's mercenary

PlayerDamagePercentVSPrimeEvil - [N] - Percentage modifier for the total damage a player deals to a Prime Evil boss

PlayerHitReactBufferVSPlayer - [N] - The frame length for the amount of time a player cannot be placed into another hit react from a player (25 frames = 1 second)

PlayerHitReactBufferVSMonster - [N] - The frame length for the amount of time a player cannot be placed into another hit react from a monster (25 frames = 1 second)

MercenaryDamagePercentVSPlayer - [N] - Percentage modifier for the total damage a player's mercenary deals to another player

MercenaryDamagePercentVSMercenary - [N] - Percentage modifier for the total damage a player's mercenary deals to another player's mercenary

MercenaryDamagePercentVSBoss - [N] - Percentage modifier for the total damage a player's mercenary deals to a boss monster

MercenaryMaxStunLength - [N] - The frame length for the maximum stun length allowed on a player's mercenary (25 Frames = 1 second)

PrimeEvilDamagePercentVSPlayer - [N] - Percentage modifier applied to the total damage a Prime Evil boss deals to a player

PrimeEvilDamagePercentVSMercenary - [N] - Percentage modifier for the total damage a Prime Evil boss deals to a player's mercenary

PrimeEvilDamagePercentVSPet - [N] - Percentage modifier for the total damage a Prime Evil boss deals to a player's pet

PetDamagePercentVSPlayer - [N] - Percentage modifier for the total damage a player's pet deals to another player

MonsterCEDamagePercent - [N] - Percentage modifier that affects how much damage is dealt to a player by a Monster's version of Corpse Explosion. For example, when certain monsters die and explode on death

MonsterFireEnchantExplosionDamagePercent - [N] - Percentage modifier that affects how much damage is dealt to a player by a Monster's Fire Enchant explosion. The Fire Enchant death explosion uses the same Corpse Explosion functionality and this value is applied after the "MonsterCEDamagePercent" value

StaticFieldMin - [N] - Percentage modifier for capping the amount of current Life damage dealt to monsters by the Sorceress Static Field skill. This field only affects games in Expansion mode

GambleRare - [N] - The odds to obtain a Rare item from gambling. The game rolls a random number between 0 to 100000. If that rolled number is less than this value, then the gambled item will be a Rare item

GambleSet - [N] - The odds to obtain a Set item from gambling. The game rolls a random number between 0 to 100000. If that rolled number is less than this value, then the gambled item will be a Set item

GambleUnique - [N] - The odds to obtain a Unique item from gambling. The game rolls a random number between 0 to 100000. If that rolled number is less than this value, then the gambled item will be a Unique item

GambleUber - [N] - The odds to make the gambled item be an Exceptional Quality item. The game rolls a random number between 0 to 10000. This rolled number is then compared to the following formula:
([Item Level] - [Base Item Level]) * ["GambleUber"] + 1. If the rolled number is less than this value, then the item becomes an Exceptional Quality item, and the game will roll for upgrading it to Elite Quality ("GambleUltra")

GambleUltra - [N] - The odds to make the gambled item be an Elite Quality item. The game rolls a random number between 0 to 10000. This rolled number is then compared to the following formula:
([Item Level] - [Base Item Level]) * ["GambleUltra"] + 1. If the rolled number is less than this value, then the item is upgraded to an Elite Quality item. This only happens if the item successfully rolled for Exceptional Quality.

Experience.txt

This file controls the Experience required for each level by each class


Data Fields

Level - [O] - This is a reference field to define the level

Amazon - [N] - Controls the Experience required for each level with the Amazon class

Sorceress - [N] - Controls the Experience required for each level with the Sorceress class

Necromancer - [N] - Controls the Experience required for each level with the Necromancer class

Paladin - [N] - Controls the Experience required for each level with the Paladin class

Barbarian - [N] - Controls the Experience required for each level with the Barbarian class

Druid - [N] - Controls the Experience required for each level with the Druid class

Assassin - [N] - Controls the Experience required for each level with the Assassin class

ExpRatio - [N] - This multiplier affects the percentage of Experienced earned, based on the level (Calculated in 1024ths by default, but this can be changed by updating the "10" value in the "Maxlvl" row)

Gamble.txt

This file controls what Item Types will appear as possible items to purchase in the Gambling UI

Item Types can be added to this list as a potential option for the Gambling system


Data Fields

name - [O] - This is a reference field to describe the Item

code - [O] - This is a pointer to code field from Weapons.txt/Armor.txt/Misc.txt

Gems.txt

This file controls the item modifiers of Gems and runes for each item type

This file is used by the following files: Weapons.txt, Armor.txt, Misc.txt


Data Fields

name - [O] - This is a reference field to define the gem/rune name

letter - [O] - Defines the string that is concatenated together in the item tooltip when a rune is socketed into an item

transform - [N] - Controls the color change of the item after being socketed by the gem/rune. Referenced from the Index value in colors.txt

code - [O] - Defines the unique item code used to create the gem/rune

weaponMod1Code - [O] - Controls the item properties that the gem/rune provides when socketed into an item with a "gemapplytype" value that equals 0 (Uses the Code field from Properties.txt)

weaponMod1Param - [N] - The stat's "parameter" value associated with the listed property (weaponMod1Code). Usage depends on the (Function ID field from Properties.txt)

weaponMod1Min - [N] - The stat's "min" value associated with the listed property (weaponMod1Code). Usage depends on the (Function ID field from Properties.txt)

weaponMod1Max - [N] - The stat's "max" value to assign to the listed property (weaponMod1Code). Usage depends on the (Function ID field from Properties.txt)

helmMod1Code - [O] - Controls the item properties that the gem/rune provides when socketed into an item with a "gemapplytype" value that equals 1 (Uses the Code field from Properties.txt)

helmMod1Param - [N] - The stat's "parameter" value associated with the listed property (helmMod1Code). Usage depends on the (Function ID field from Properties.txt)

helmMod1Min - [N] - The stat's "min" value associated with the listed property (helmMod1Code). Usage depends on the (Function ID field from Properties.txt)

helmMod1Max - [N] - The stat's "max" value to assign to the listed property (helmMod1Code). Usage depends on the (Function ID field from Properties.txt)

shieldMod1Code - [O] - Controls the item properties that the gem/rune provides when socketed into an item with a "gemapplytype" value that equals 2 (Uses the Code field from Properties.txt)

shieldMod1Param - [N] - The stat's "parameter" value associated with the listed property (shieldMod1Code). Usage depends on the (Function ID field from Properties.txt)

shieldMod1Min - [N] - The stat's "min" value associated with the listed property (shieldMod1Code). Usage depends on the (Function ID field from Properties.txt)

shieldMod1Max - [N] - The stat's "max" value to assign to the listed property (shieldMod1Code). Usage depends on the (Function ID field from Properties.txt)

Hireling.txt

This file controls the unit statistics for player mercenaries and their related functions


Data Fields

Hireling - [O] - This is a reference field to define the Hireling name

Version - [N] - Defines which game version to use this hireling (0 = Classic mode | 100 = Expansion mode)

ID - [N] - The unique identification number to define each hireling type

Class - [N] - This refers to the hcIDx field in MonStats.txt, which defines the base type of unit to use for the hireling

Act - [N] - The Act that the hireling belongs to (values 1 to 5 equal Act 1 to Act 5, respectively)

Difficulty - [N] - The difficulty mode associated with the hireling (1 = Normal | 2 = Nightmare | 3 = Hell)

Level - [N] - The starting level of the unit

Seller - [N] - This refers to the hcIDx field in MonStats.txt, which defines the unit NPC that sells this hireling

NameFirst & NameLast - [O] - These fields define a string key which the game uses as a sequential range of string IDs from "NameFirst" to "NameLast" to randomly generate as hireling names. (Max name length is 48 characters)

Gold - [N] - The initial cost of the hireling. This is used in the following calculation to generate the full hire price: Cost = ["Gold"] * (100 + 15 * [Difference of Current Level and "Level"]) / 100

Exp/Lvl - [N] - This modifier is used in the following calculation to determine the amount of Experience need for the hireling's next level: [Current Level] + [Current Level] * [Current Level + 1] * ["Exp/Lvl"]

HP - [N] - The starting amount of Life at base Level

HP/Lvl - [N] - The amount of Life gained per Level

Defense - [N] - The starting amount of Defense at base Level

Def/Lvl - [N] - The amount of Defense gained per Level

Str - [N] - The starting amount of Strength at base Level

Str/Lvl - [N] - The amount of Strength gained per Level (Calculated in 8ths)

Dex - [N] - The starting amount of Dexterity at base Level

Dex/Lvl - [N] - The amount of Dexterity gained per Level (Calculated in 8ths)

AR - [N] - The starting amount of Attack Rating at base Level

AR/Lvl - [N] - The amount of Attack Rating gained per Level

Dmg-Min - [N] - The starting amount of minimum Physical Damage for attacks

Dmg-Max - [N] - The starting amount of maximum Physical Damage for attacks

Dmg/Lvl - [N] - The amount of Physical Damage gained per level, to be added to "Dmg-Min" and "Dmg-Max" (Calculated in 8ths)

ResistFire - [N] - The starting amount of Fire Resistance at base Level

ResistFire/Lvl - [N] - The amount of Fire Resistance gained per Level (Calculated in 4ths)

ResistCold - [N] - The starting amount of Fire Resistance at base Level

ResistCold/Lvl - [N] - The amount of Fire Resistance gained per Level (Calculated in 4ths)

ResistLightning - [N] - The starting amount of Fire Resistance at base Level

ResistLightning/Lvl - [N] - The amount of Fire Resistance gained per Level (Calculated in 4ths)

ResistPoison - [N] - The starting amount of Fire Resistance at base Level

ResistPoison/Lvl - [N] - The amount of Fire Resistance gained per Level (Calculated in 4ths)

HireDesc - [O] - This accepts a string key, which is used to display as the special description of the hireling in the hire UI window (local/lng/strings/mercenaries.JSON)

DefaultChance - [N] - This is the chance for the hireling to attack with his/her weapon instead of using a Skill. All Chance values are summed together as a denominator value for a random roll to determine which skill to use

Skill1 - [O] - Points to a skill from the skill field in the Skills.txt file. This gives the hireling the Skill to use (requires "Mode#", "Chance#", "ChancePerLvl#")

Mode1 - [O] - Uses a monster mode to determine the hireling's behavior when using the related Skill. Referenced from the Index value in MonMode.txt

Chance1 - [N] - This is the base chance for the hireling to use the related Skill. All Chance values are summed together as a denominator value for a random roll to determine which skill to use

ChancePerLvl1 - [N] - This is the chance for the hireling to use the related Skill, affected by the difference in the hireling's current Level and the hireling's Level field. All Chance values are summed together as a denominator value for a random roll to determine which skill to use. Each skill Chance is calculated with the following formula: ["Chance#"] + ["ChancePerLvl#"] * [Difference of Current Level and "Level"] / 4

Level1 - [N] - The starting Level for the related Skill

LvlPerLvl1 - [N] - A modifier to increase the related Skill level for every Level gained. This is used in the following calculated to determine the current skill level: [Current Skill Level] = FLOOR(["Level"] + ((["LvlPerLvl"] * [Difference of Current Level and "Level"]) / 32))

HiringMaxLevelDifference - [N] - This is used to generate a range with this value plus and minus with the player's current Level. In the hiring UI window, hirelings start with a random Level that is between this range

resurrectcostmultiplier - [N] - A modifier used to calculate the hireling's current resurrect cost. Used in the following formula: [Resurrect Cost] = [Current Level] * [Current Level] / ["resurrectcostdivisor"] * ["resurrectcostmultiplier"]

resurrectcostdivisor - [N] - A modifier used to calculate the hireling's current resurrect cost. Used in the following formula: [Resurrect Cost] = [Current Level] * [Current Level] / ["resurrectcostdivisor"] * ["resurrectcostmultiplier"]

resurrectcostmax - [N] - This is the maximum Gold cost to resurrect this hireling

equivalentcharclass - [O] - Determines what class this hireling is treated like under the hood when calculating skill level bonuses and gear restrictions.

HirelingDesc.txt

This file controls attributes about player mercenaries that relate to the monster class but not the specific statblocks.


Data Fields

id - [N] - The id of the hireling monster class as defined in monstats.txt

alternateVoice - [B] - If equals 1, then the hireling will use the alternate (feminine) voice type for voice lines. If equals 0, then it will use the masculine voice type.

Inventory.txt

This file controls the grid sizes of the inventory slots for the game's various UI windows.

These values are measured in pixels on the screen.


Data Fields

class - [O] - This is a reference field to define the type of inventory screen

invLeft - [N] - Starting X coordinate pixel position of the inventory panel

invRight - [N] - Ending X coordinate pixel position of the inventory panel (Includes the "invLeft" value with the inventory width size)

invTop - [N] - Starting Y coordinate pixel position of the inventory panel

invBottom - [N] - Ending Y coordinate pixel position of the inventory panel (Includes the "invTop" value with the inventory height size)

gridX - [N] - Column number size of the inventory grid, measured in the number of grid boxes to use

gridY - [N] - Column row size of the inventory grid, measured in the number of grid boxes to use

gridLeft - [N] - Starting X coordinate location of the inventory's left grid side

gridRight - [N] - Ending X coordinate location of the inventory's right grid side (Includes the "gridLeft" value with the grid width size)

gridTop - [N] - Starting Y coordinate location of the inventory's top grid side

gridBottom - [N] - Ending Y coordinate location of the inventory's bottom grid side (Includes the "gridTop" value with the grid height size)

gridBoxWidth - [N] - Width size of an inventory's box cell

gridBoxHeight - [N] - Height size of an inventory's box cell

rArmLeft - [N] - Starting X coordinate location of the Right Weapon Slot

rArmRight - [N] - Ending X coordinate location of the Right Weapon Slot (Includes the "rArmLeft" value with the "rArmWidth" value)

rArmTop - [N] - Starting Y coordinate location of the Right Weapon Slot

rArmBottom - [N] - Ending Y coordinate location of the Right Weapon Slot (Includes the "rArmTop" value with the "rArmHeight" value)

rArmWidth - [N] - The pixel width of the Right Weapon Slot

rArmHeight - [N] - The pixel Height of the Right Weapon Slot

torsoLeft - [N] - Starting X coordinate location of the Body Armor Slot

torsoRight - [N] - Ending X coordinate location of the Body Armor Slot (Includes the "torsoLeft" value with the "torsoWidth" value)

torsoTop - [N] - Starting Y coordinate location of the Body Armor Slot

torsoBottom - [N] - Ending Y coordinate location of the Body Armor Slot (Includes the "torsoTop" value with the "torsoHeight" value)

torsoWidth - [N] - The pixel width of the Body Armor Slot

torsoHeight - [N] - The pixel Height of the Body Armor Slot

lArmLeft - [N] - Starting X coordinate location of the Left Weapon Slot

lArmRight - [N] - Ending X coordinate location of the Left Weapon Slot (Includes the "lArmLeft" value with the "lArmWidth" value)

lArmTop - [N] - Starting Y coordinate location of the Left Weapon Slot

lArmBottom - [N] - Ending Y coordinate location of the Left Weapon Slot (Includes the "lArmTop" value with the "lArmHeight" value)

lArmWidth - [N] - The pixel width of the Left Weapon Slot

lArmHeight - [N] - The pixel Height of the Left Weapon Slot

headLeft - [N] - Starting X coordinate location of the Helm Slot

headRight - [N] - Ending X coordinate location of the Helm Slot (Includes the "headLeft" value with the "headWidth" value)

headTop - [N] - Starting Y coordinate location of the Helm Slot

headBottom - [N] - Ending Y coordinate location of the Helm Slot (Includes the "headTop" value with the "headHeight" value)

headWidth - [N] - The pixel width of the Helm Slot

headHeight - [N] - The pixel Height of the Helm Slot

neckLeft - [N] - Starting X coordinate location of the Amulet Slot

neckRight - [N] - Ending X coordinate location of the Amulet Slot (Includes the "neckLeft" value with the "neckWidth" value)

neckTop - [N] - Starting Y coordinate location of the Amulet Slot

neckBottom - [N] - Ending Y coordinate location of the Amulet Slot (Includes the "neckTop" value with the "neckHeight" value)

neckWidth - [N] - The pixel width of the Amulet Slot

neckHeight - [N] - The pixel Height of the Amulet Slot

rHandLeft - [N] - Starting X coordinate location of the Right Ring Slot

rHandLeft - [N] - Ending X coordinate location of the Right Ring Slot (Includes the "rHandLeft" value with the "rHandWidth" value)

rHandTop - [N] - Starting Y coordinate location of the Right Ring Slot

rHandBottom - [N] - Ending Y coordinate location of the Right Ring Slot (Includes the "rHandTop" value with the "rHandHeight" value)

rHandWidth - [N] - The pixel width of the Right Ring Slot

rHandHeight - [N] - The pixel Height of the Right Ring Slot

lHandLeft - [N] - Starting X coordinate location of the Left Ring Slot

lHandRight - [N] - Ending X coordinate location of the Left Ring Slot (Includes the "lHandLeft" value with the "lHandWidth" value)

lHandTop - [N] - Starting Y coordinate location of the Left Ring Slot

lHandBottom - [N] - Ending Y coordinate location of the Left Ring Slot (Includes the "lHandTop" value with the "lHandHeight" value)

lHandWidth - [N] - The pixel width of the Left Ring Slot

lHandHeight - [N] - The pixel Height of the Left Ring Slot

beltLeft - [N] - Starting X coordinate location of the Belt Slot

beltRight - [N] - Ending X coordinate location of the Belt Slot (Includes the "beltLeft" value with the "beltWidth" value)

beltTop - [N] - Starting Y coordinate location of the Belt Slot

beltBottom - [N] - Ending Y coordinate location of the Belt Slot (Includes the "beltTop" value with the "beltHeight" value)

beltWidth - [N] - The pixel width of the Belt Slot

beltHeight - [N] - The pixel Height of the Belt Slot

feetLeft - [N] - Starting X coordinate location of the Boots Slot

feetRight - [N] - Ending X coordinate location of the Boots Slot (Includes the "feetLeft" value with the "feetWidth" value)

feetTop - [N] - Starting Y coordinate location of the Boots Slot

feetBottom - [N] - Ending Y coordinate location of the Boots Slot (Includes the "feetTop" value with the "feetHeight" value)

feetWidth - [N] - The pixel width of the Boots Slot

feetHeight - [N] - The pixel Height of the Boots Slot

glovesLeft - [N] - Starting X coordinate location of the Gloves Slot

glovesRight - [N] - Ending X coordinate location of the Gloves Slot (Includes the "glovesLeft" value with the "glovesWidth" value)

glovesTop - [N] - Starting Y coordinate location of the Gloves Slot

glovesBottom - [N] - Ending Y coordinate location of the Gloves Slot (Includes the "glovesTop" value with the "glovesHeight" value)

glovesWidth - [N] - The pixel width of the Gloves Slot

glovesHeight - [N] - The pixel Height of the Gloves Slot

ItemRatio.txt

This file determines the quality of items when being spawned. After the game determines what Item Type should spawn, it then uses this file to calculate the quality of that item.

These Item Quality checks are used for most item drops in the game such as monster drops and chest drops.

The following files related to these calculations: ItemTypes.txt, Weapons.txt, Armor.txt, Misc.txt, Uniqueitems.txt, SetItems.txt, monstats.txt, TreasureClassEx.txt


Data Fields

Function - [O] - This is a reference field to define the item ratio name

Version - [N] - Defines which game version to use this item ratio (0 = Classic mode | 100 = Expansion mode)

Uber - [B] - If equals 1, then the item ratio will apply to items with Exceptional or Elite Quality. If equals 0, then the item ratio will apply to Normal Quality items (This is determined by the normcode, ubercode and ultracode fields in Armor/Weapons.txt)

Class Specific - [B] - If equals 1, then the item ratio will apply to class-based items (This will compare to the Item Type's Class field from ItemTypes.txt to determine if the item is class specific)

Unique - [N] - Base value for calculating the Unique Quality chance. Higher value means rarer chance. (Calculated first)

UniqueDivisor - [N] - Modifier for changing the Unique Quality chance, based on the difference between the Monster Level and the Item's base level

UniqueMin - [N] - The minimum value of the probability denominator for Unique Quality. This is compared to the calculated Unique Quality value after Magic Find calculations and is chosen if it is greater than that value. (Calculated in 128ths)

Set - [N] - Base value for calculating the Set Quality chance. Higher value means rarer chance. (Calculated after Unique)

SetDivisor - [N] - Modifier for changing the Set Quality chance, based on the difference between the Monster Level and the Item's base level

SetMin - [N] - The minimum value of the probability denominator for Set Quality. This is compared to the calculated Set Quality value after Magic Find calculations and is chosen if it is greater than that value. (Calculated in 128ths)

Rare - [N] - Base value for calculating the Rare Quality chance. Higher value means rarer chance. (Calculated after Set)

RareDivisor - [N] - Modifier for changing the Rare Quality chance, based on the difference between the Monster Level and the Item's base level

RareMin - [N] - The minimum value of the probability denominator for Rare Quality. This is compared to the calculated Rare Quality value after Magic Find calculations and is chosen if it is greater than that value. (Calculated in 128ths)

Magic - [N] - Base value for calculating the Magic Quality chance. Higher value means rarer chance. (Calculated after Rare)

MagicDivisor - [N] - Modifier for changing the Magic Quality chance, based on the difference between the Monster Level and the Item's base level

MagicMin - [N] - The minimum value of the probability denominator for Magic Quality. This is compared to the calculated Magic Quality value after Magic Find calculations and is chosen if it is greater than that value. (Calculated in 128ths)

HiQuality - [N] - Base value for calculating the High Quality (Superior) chance. Higher value means rarer chance. (Calculated after Magic)

HiQualityDivisor - [N] - Modifier for changing the High Quality (Superior) chance, based on the difference between the Monster Level and the Item's base level

Normal - [N] - Base value for calculating the Normal Quality chance. Higher value means rarer chance. (Calculated after Normal, and if this does not succeed in rolling, then the item is defaulted to Low Quality)

NormalDivisor - [N] - Modifier for changing the Normal Quality chance, based on the difference between the Monster Level and the Item's base level


Calculations

Item Quality is determined by first calculating the roll chance for a specific Quality. Then the game will attempt a random roll for that Item Quality. If that roll fails, then the game will calculate for the next lower Item Quality.

The order of Item Quality calculations is the following: Unique > Set > Rare > Magic > High Quality (Superior) > Normal > Low Quality

The following information details how the game uses the Data Fields in its calculations.


Step 1: Calculate the Base Probability

The first part of the calculations is to obtain the base probability for rolling the item quality with the following formula:

Probability = ( Quality - ( mlvl - ilvl ) / Divisor ) * 128

This probability value is a ratio divisor, meaning that there is a 1 in probability chance of the game choosing that Item Quality, so the lower the probability value, then the better the chance the item will successfully roll that Item Quality. The multiplication with 128 is for decreasing rounding errors. The Quality value is the "Unique"/"Set"/"Rare"/"Magic"/"HiQuality"/"Normal" Data Field. The mlvl value is the Monster Level, which depends on the current area level and game difficulty (this can also be the level for the chest drop). The ilvl value is the Base Item Level (the "level" field in the Weapons.txt/Armor.txt/Misc.txt or the "lvl" field in UniqueItems.txt/SetItems.txt). The Divisor value is the "UniqueDivisor"/"SetDivisor"/"RareDivisor"/"MagicDivisor"/"HiQualityDivisor"/"NormalDivisor" Data Field


Step 2: Calculate Magic Find

The game will then obtain the character's magic find bonus from items. If the current calculation is for Unique/Set/ Rare Quality items and the magic find item bonus exceeds 110%, then the character's magic find will be modified with diminishing returns:

MagicFind = 100 + MF * dim / (MF + dim)

The MF value is the character's magic find bonus percentage value plus the baseline default 100 value ("item_magicbonus" in ItemStatCost.txt). The dim value is a special modifier for adding diminishing returns to the magic find bonus, which differs based on the Item Quality being calculated (Unique = 250, Set = 500, Rare = 600)

After calculating the proper magic find value, the probability value is modified with the following formula:

Probability = Probability * 100 / MagicFind

This will reduce the Probability value, giving the Item Quality a higher chance to be successfully rolled


Step 3: Calculate Probability with Treasure Class

After calculating the baseline probability with the magic find bonus, the game will then compare this value with the minimum value for the Item Quality to cap it from reducing any further ("UniqueMin"/"SetMin"/"RareMin"/"MagicMin" Data Fields). High Quality (Superior) and Normal Quality do not have a minimum value.

The game will then modify the probability with the value from the related Treasure Class:

Probability = Probability - Probability * TreasureClass / 1024

The TreasureClass value is a modifier for this Item Quality based on the Treasure Class being used (the "Unique"/"Set"/"Rare"/"Magic" field from the TreasureClassEx.txt file)


Step 4: Roll for the Item Quality

Finally, after calculating the overall value of the probability for the Item Quality, the game will then find a random number between 0 and the probability value. If that random value is between 0 and 128, then the item has successfully rolled that specific Item Quality. Otherwise, the calculations will move on to checking for the next lower Item Quality.

ItemStatCost.txt

Thisfile controls the functionalities for each possible stat on a unit

Thesedefined stats are used to form modifiers for the Properties.txt file

Anycolumn field name starting with "*" is considered a comment field and is notused by the game


Data Fields

Stat - [O] - Defines the unique pointer for this stat, which is used in other files

*ID - [N] - This field is not read directly, but can be used as an Index for stats

Send Other - [B] - If equals 1, then only add the stat to a new monster if the that has no state and has an item mask. If equals 0, then ignore this

Signed - [B] - If equals 1, then the stat will be treated as a signed integer, meaning that it can be either a positive or negative value. If equals 0, then stat will be treated as an unsigned integer, meaning that it can only be a positive value. This only affects stats with state bits

Send Bits - [N] - Controls how many bits of data for the stat to send to the game client, essentially controlling the max value possible for the stat. Signed values should have less than 32 bits, otherwise they will be treated as unsigned values

Send Param Bits - [N] - Controls how many bits of data for the stat's parameter value to send to the client for a unit. This value is always treated as a signed integer

UpdateAnimRate - [B] - If equals 1, then the stat will notify that game to handle and adjust the speed of the unit when the stat changes. If equals 0, then ignore this. This is only checked for stats with States or for specific skill server functions including 30, 61, 71

Saved - [B] - If equals 1, then this state will be inserted in the change list to be stored in the Character Save file. If equals 0, then ignore this

CSvSigned - [B] - If equals 1, then the stat will be saved as a signed integer in the Character Save file. If equals 0, then the stat will be saved as an unsigned integer in the Character Save file. This is only used if the "Saved" field is enabled

CSvBits - [N] - Controls how many bits of data for the stat to send to save in the Character Save file. Signed values should have less than 32 bits, otherwise they will be treated as unsigned values. This is only used if the "Saved" field is enabled

CSvParam - [N] - Controls how many bits of data for the stat's parameter value to save in the Character Save file. This value is always treated as a signed integer. This is only used if the "Saved" field is enabled

fCallback - [B] - If equals 1, then any changes to the stat will call the Callback function which will update thgecharacter's States, skills, or item events based on the changed stat value. If equals 0, then ignore this

fMin - [B] - If equals 1, then the stat will have a minimum value that cannot be reduced further than that value ("MinAccr" field). If equals 0, then ignore this

MinAccr - [N] - The minimum value of a stat. This is only used if the "fMin" field is enabled

Encode - [N] - Controls how the stat will modify an item's buy, sell, and repair costs. This field uses a code value to select a function to handle the calculations. This field relies on the "Add", "Multiply" and "ValShift" fields. The baseline Stat Value is first modified using the "ValShift" field to shift the bits. This Stat Value is then used in the calculations by one of the selected functions.

CodeParametersDescription
0
(or empty)
Add
Multiply
Buy Cost += [Stat Value] * ["Multiply"] / 1024 + ["Add"]
Sell Cost += [Stat Value] * ["Multiply"] / 1024 + ["Add"]
Repair Cost += [Stat Value] * ["Multiply"] / 1024 + ["Add"]
1
Use the stat's parameter value to determine the skill ID used.
Use the stat's value to determine the skill level.
Obtain the "cost mult" and "cost add" values from the skill linked in this stat's parameter (Skills.txt).
The Stat Value is considered the skill's level.
Buy Cost += [Stat Value] * ["cost mult"] / 1024 + ["cost add"]
Sell Cost += [Stat Value] * ["cost mult"] / 4096 + ["cost add"]
Repair Cost += [Stat Value] * ["cost mult"] / 1024 + ["cost add"]
2
Use the stat's parameter value to determine both the skill ID and skill level.
Obtain the "cost mult" and "cost add" values from the determined skill ID (Skills.txt).
Buy Cost += [Stat Value] * ["cost mult"] / 1024 + ["cost add"]
Sell Cost += [Stat Value] * ["cost mult"] / 4096 + ["cost add"]
Repair Cost += [Stat Value] * ["cost mult"] / 1024 + ["cost add"]
3
Same as function 2
4Add
Multiply
Obtains the stat's min and max values based on the By Time bit masks and uses them to calculate the average value or Baseline stat value.
Buy Cost += [Baseline] * ["Multiply"] / 1024 + ["Add"]
Sell Cost += [Baseline] * ["Multiply"] / 1024 + ["Add"]
Repair Cost += [Baseline] * ["Multiply"] / 1024 + ["Add"]

Add - [N] - Used as a possible parameter value for the "Encode" function. Flat integer modification to the Unique item's buy, sell, and repair costs. This is added after the "Multiply" field has modified the costs

Multiply - [N] - Used as a possible parameter value for the "Encode" function. Multiplicative modifier for the item's buy, sell, and repair costs. The way this value is used depends on the Encode function selected

ValShift - [N] - Used to shift the stat's input value by a number of bits to obtain the actual value when performing calculations (such as for the "Encode" function)

1.09-Save Bits - [N] - Controls how many bits of data are allocated for the overall size of the stat when saving/reading an item from a Character Save. This value can be treated as a signed or unsigned integer, depending on the stat. This field is only used for items saved in a game version of Patch 1.09d or older

1.09-Save Add - [N] - Controls how many bits of data are allocated for the stat's value when saving/reading an item from a Character Save. This value is treated as a signed integer. This field is only used for items saved in a game version of Patch 1.09d or older

Save Bits - [N] - Controls how many bits of data are allocated for the overall size of the stat when saving/reading an item from a Character Save. This value can be treated as a signed or unsigned integer, depending on the stat

Save Add - [N] - Controls how many bits of data are allocated for the stat's value when saving/reading an item from a Character Save. This value is treated as a signed integer

Save Param Bits - [N] - Controls how many bits of data for the stat's parameter value to use when saving/reading an item from a Character Save. This value is always treated asan unsigned integer

keepzero - [B] - If equals 1, then this stat will remain on the stat change list, when being updated, even if that stat value is 0. If equals 0, then ignore this

op - [N] - This is the stat operator, used for advanced stat modification when calculating the value of a stat. This can involves using this stat and its value to modify another stat's value. This use a function ID to determine what to calculate.

CodeParametersDescription
0
(or empty)

No Operator. Just add the stat normally
1op stat1
op stat2
op stat3
Percent Operator. Gets the value of "op stat#" and multiplies it by a percentage increase equal to this stat's value:
["op stat#"] += ["op stat#"] * value / 100
2op param
op base
op stat1
op stat2
op stat3
By Level Operator. Gets value of "op stat#" and uses it as a multiplier with "op param" as the divisor:
["op stat#"] += ["op stat#"] * ["op base"] << ["op param"]
3op param
op base
op stat1
op stat2
op stat3
By Level Percent Operator. Gets value of "op stat#" and uses it as a multiplier with "op param" as the divisor. Then it uses this value as a percentage increase to "op stat#":
percent = ["op stat#"] * ["op base"] << ["op param"]
["op stat#"] = ["op stat#"] * percent / 100
4op param
op base
op stat1
op stat2
op stat3
By Level Source Operator. Gets value of "op stat#" for the item (not the unit) and uses it as a multiplier with "op param" as the divisor:
["op stat#"] += ["op stat#"] * ["op base"] << ["op param"]
5op param
op base
op stat1
op stat2
op stat3
By Level Source Percent Operator. Gets value of "op stat#" for the item (not the unit) and uses it as a multiplier with "op param" as the divisor. Then it uses this value as a percentage increase to "op stat#":
percent = ["op stat#"] * ["op base"] << ["op param"]
["op stat#"] = ["op stat#"] * percent / 100
6op stat1
op stat2
op stat3
By Time Operator. Gets the value of "op stat#" and increases it by a delta value which depends on game's time of day. The delta is calculated by using the stat's min and max as a range of increase/decrease and biasing this value with the current progress of game's time of day
["op stat#"] += ["op stat#"] * [delta]
7op stat1
op stat2
op stat3
By Time Percent Operator. Gets the value of "op stat#" and multiplies it by a percentage. This percentage is determined by obtaining "op stat#" and a delta value which depends on game's time of day. The delta is calculated by using the stat's min and max as a range of increase/decrease and biasing this value with the current progress of game's time of day
percent = ["op stat#"] * [delta]
["op stat#"] = ["op stat#"] * percent / 100
8op stat1
op stat2
op stat3
Energy Operator. This will only apply for stats on the player. Gets the value of "op stat#" and multiplies it by the related "ManaPerMagic" field from the CharStats.txt file. This is then bit shifted by the baseline Mana bit value, MANA_SHIFT = 8, with the fourths value calculation from the "ManaPerMagic" field.
["op stat#"] = ["op stat#"] * ["ManaPerMagic"] << (MANA_SHIFT - 2)
9op stat1
op stat2
op stat3
Vitality Operator. This will only apply for stats on the player.
If the stat is "maxstamina", then the operator will get the value of "op stat#" and multiply it by the related "StaminaPerVitality" field from the CharStats.txt file. This is then bit shifted by the baseline Stamina bit value, STAMINA_SHIFT = 8, with the fourths value calculation from the "StaminaPerVitality" field:
["op stat#"] = ["op stat#"] * ["StaminaPerVitality"] << (STAMINA_SHIFT - 2)


If the stat is not "maxstamina", then the operator will get the value of "op stat#" and multiply it by the related "LifePerVitality" field from the CharStats.txt file. This is then bit shifted by the baseline Life bit value, LIFE_SHIFT = 8, with the fourths value calculation from the "LifePerVitality" field:
["op stat#"] = ["op stat#"] * ["LifePerVitality"] << (LIFE_SHIFT - 2)

10
Currently not being used. Does nothing.
11op stat1
op stat2
op stat3
Player Percent Operator. This will only apply for stats on units. Gets the value of "op stat#" and multiplies it by a percentage increase equal to this stat's value:
["op stat#"] += ["op stat#"] * value / 100
12
Currently not being used. Does nothing.
13op stat1
op stat2
op stat3
Item Percent Operator. This will only apply for stats on items. Gets the value of "op stat#" and multiplies it by a percentage increase equal to this stat's value:
["op stat#"] += ["op stat#"] * value / 100

op param - [N] - Used as a possible parameter value for the "op" function

op base - [N] - Used as a possible parameter value for the "op" function

op stat1 - [N] - Used as a possible parameter value for the "op" function

direct - [B] - If equals 1, then when the stat is being updated in certain skill functions having to do with state changes, the stat will update in relation to its "maxstat" field to ensure that it never exceeds that value. If equals 0, then ignore this, and the stat will simply update in these cases. This only applies to skills that use skill server function 65, 66, 81, and 82

maxstat - [O] - Controls which stat is associated with this stat to be treated as the maximum version of this stat. This means that 2 stats are essentially linked so that there can be a current version of the stat and a maximum version to control the cap of stat's value. This is used for Life, Mana, Stamina, and Durability. This field relies on the "direct" field to be enabled unless it is being used for the healing potion item spell

damagerelated - [B] - If equals 1, then this stat will be exclusive to the item and will not add to the unit. If equals 0, then ignore this, and the stat will always add to the unit. This is typically used for weapons and is important when dual wielding weapons so that when a unit attacks, then one weapon's stats do not stack with another weapon's stats

itemevent1 - [N] - Uses an event that will activate the specified function defined by "itemeventfunc#". Referenced from the event column in Events.txt

itemeventfunc1 - [N] - Specifies the function to use after the related item event occurred. Functions are defined by a numeric ID code. This is only applied based on the "itemevent#" field definition. Referenced by the Code value of the Event Functions Table

descpriority - [N] - Controls how this stat is sorted in item tooltips. This field is compared to the same field on other stats to determine how to order the stats. The higher the value means that the stat will be sorted higher than other stats. If more than 1 stat has the same "descpriority" value, then they will be listed in the order defined in this data file

descfunc - [N] - Controls how the stat is displayed in tooltips. Uses the Code value from the below table to format the string value using the specified function

CodeParametersDescription
0
No display. Do nothing.
1descval
descstrpos
descstrneg
Plus or Minus
• If value > 0, "+[value] [descstr]"
• If value < 0, "-[value] [descstr]"
2descval
descstrpos
descstrneg
Percent
• "[value] [descstr]"
3descval
descstrpos
descstrneg
String
• "[value] [descstr]"
4descval
descstrpos
descstrneg
Plus Percent
• "+[value]% descstr]"
5descval
descstrpos
descstrneg
Percent 128
• "+[value * 100 / 128]% [descstr]"
6descval
descstrpos
descstrneg
descstr2
Plus or Minus Per Level
• If value > 0, "+[value] [descstr] [descstr2]"
• If value < 0, "-[value] [descstr] [descstr2]"
7descval
descstrpos
descstrneg
descstr2
Percent Per Level
• "[value]% [descstr] [descstr2]"
8descval
descstrpos
descstrneg
descstr2
Plus Percent Per Level
• "+[value]%[descstr] [descstr2]"
9descval
descstrpos
descstrneg
descstr2
String Per Level
• "[value][descstr] [descstr2]"
10descval
descstrpos
descstrneg
descstr2
Percent 128 Per Level
• "[value * 100 / 128]% [descstr] [descstr2]"
11
Repair
• Uses the string ModStre9t and inserts the value into this string
12descval
descstrpos
descstrneg
Plus Sub One
• If value > 1, then use "+[value] [descstr]"
• Else, use "[value] [descstr]" or "-[value] [descstr]"
13
Add Class Skill
• Uses the "StrAllSkills" from the CharStats.txt File
14
Add Tab Skill
• Uses "StrSkillTab#" from the CharStats.txt file based on related tab being modified
15descstrposProc Skill
• Gets the skill name, skill level, and chance percent to insert into the "descstrpos" string
16descstrpos
descstrneg
Aura
• Gets the skill name, and uses the stat's value for the skill level and inserts these values into the designated "descstr" string
17descstrpos
descstrneg
Plus Minus By Time
• Gets the proper value based on the time of day and inserts this value into the "descstr" string
• Uses the following strings for the second part of the description, depending on the time selected: ModStre9d, ModStre9e, ModStre9f, ModStre9g
18descstrpos
descstrneg
(Same as function 17)
19descstrpos
descstrneg
descstr2
Sprintf Num
• Uses the Sprintf string function with the designated "descstr" string and adds "descstr2" if that value is not empty
20descval
descstrpos
descstrneg
Minus Percent
• "[value* -1]% [descstr]"
21descstrpos
descstrneg
descstr2
Minus Percent Per Level
• "[value * -1]% [descstr] [descstr2]"
• If "descstr2" is empty, then default to using the increaseswithplaylevelX string
22descstrpos
descstrneg

Versus Monster Percent
• Uses strplur from MonType.txt, based on the monster type selected, and inserts this value into the designated descstrpos or descstrneg strings
23descstrpos
descstrneg
Reanimate
• Obtains the related "NameStr" string from the monstats.txt file and inserts this string into the designated "descstr" string
24descstrpos
descstrneg
Charges
• Obtains the skill, skill level, max charges, and current charges and inserts these values into the designated "descstr" string
25descval
descstrpos
descstrneg
Minus
• If desval equals 1, then use "+[value * -1] [descstr]"
• If desval equals 2, then use "[descstr] +[value * -1]"

26descval
descstrpos
descstrneg
descstr2
Minus Per Level
• (Same as function 25)
27descstrpos
descstrneg
Single Skill
• Obtains the "str name" field from SkillDesc.txt file and the "StrClassOnly" field from the CharStats.txt file
• Uses the stat value as the skill level
• Combines these values into the designated "descstr" string
28descstrpos
descstrneg
Non Class Skill
• Obtains the "str name" field from SkillDesc.txt file
• Uses the stat value as the skill level
• Combines these values into the designated "descstr" string
29descstrpos
descstrneg
descstr2
Sprintf num positive
• Same as function 19, except the it uses the absolute value of [value]

descval - [N] - Used as a possible parameter value for the descfunc function. This controls the how the value of the stat is displayed.

CodeDescription
0Do not show the value of the stat
1Shows the value of the stat at the start of its description
2Shows the value of the stat at the end of its description

descstrpos - [O] - Used as a possible parameter value for the descfunc function. This uses a string to display the item stat in a tooltip when its value is positive

descstrneg - [O] - Used as a possible parameter value for the descfunc function. This uses a string to display the item stat in a tooltip when its value is negative

descstr2 - [O] - Used as a possible parameter value for the descfunc function. This uses a string to append to an item stat's string in a tooltip

dgrp - [N] - Assigns the stat to a group ID value. If all stats with a matching "dgrp" value are applied on the unit, then instead of displaying each stat individually, the group description will be applied instead (dgrpfunc field below)

dgrpfunc - [N] - Controls how the shared group of stats is displayed in tooltips. Uses an ID value to select a description function to format the string value. This function IDs are exactly the same as the descfunc field

dgrpval - [N] - Used as a possible parameter value for the dgrpfunc function. This controls the how the value of the stat is displayed. (Functions the same as the "descval" field)

dgrpstrpos - [O] - Used as a possible parameter value for the dgrpfunc function. This uses a string to display the item stat in a tooltip when its value is positive

dgrpstrneg - [O] - Used as a possible parameter value for the dgrpfunc function. This uses a string to display the item stat in a tooltip when its value is negative

dgrpstr2 - [O] - Used as a possible parameter value for the dgrpfunc function. This uses a string to append to an item stat's string in a tooltip

stuff - [N] - Used as a bit shift value for handling the conversion of skill IDs and skill levels to bit values for the stat. Controls the numeric range of possible skill IDs and skill levels for charge based items. This value cannot be less than or equal to 0, or greater than 8, otherwise it will default to 6. The row that this value appears in the data file is unrelated, since this is a universally applied value

advdisplay - [N] - Controls how the stat appears in the Advanced Stats UI

CodeDescription
0 (or empty)The stat will never appear on the Advanced Stats UI
1The stat will always show on the Advanced Stats UI
2The stat will only show on the Advanced Stats UI if the value is greater than 0

ItemTypes.txt

This file controls the general statistics for each type of item, which is then used for the item type fields in other files


Data Fields

ItemType - [O] - This is a reference field to define the Item Type name

Code - [O] - Defines the unique pointer for this Item Type, which is used by various data files

Equiv1 - [O] - Points to the index of another Item Type to reference as a parent. This is used to create a hierarchy for Item Types where the parents will have more universal settings shared across the related children

Repair - [B] - If equals 1, then the item can be repaired by an NPC in the shop UI. If equals 0, then the item cannot be repaired

Body - [B] - If equals 1, then the item can be equipped by a character (Also uses the BodyLoc1 field(s) as parameters). If equals 0, then the item can only be carried in the inventory, stash, or Horadric Cube

BodyLoc1 - [O] - These are required parameters if the Body field is enabled. These fields specify the inventory slots where the item can be equipped. Referenced from the Code column in BodyLocs.txt

Shoots - [N] - Points to the index of another Item Type as the required equipped Item Type to be used as ammo

Quiver - [N] - Points to the index of another Item Type as the required equipped Item Type to be used as this ammo's weapon

Throwable - [B] - If equals 1, then it determines that this item is a throwing weapon. If equals 0, then ignore this

Reload - [B] - If equals 1, then the item (considered ammo in this case) will be automatically transferred from the inventory to the required BodyLoc1 when another item runs out of that specific ammo. If equals 0, then ignore this

ReEquip - [B] - If equals 1, then the item in the inventory will replace a matching equipped item if that equipped item was destroyed. If equals 0, then ignore this

AutoStack - [B] - If equals 1, then if the player picks up a matching Item Type, then they will try to automatically stack together. If equals 0, then ignore this

Magic - [B] - If equals 1, then this item will always have the Magic quality (unless it is a Quest item). If equals 0, then ignore this

Rare - [B] - If equals 1, then this item can spawn as a Rare quality. If equals 0, then ignore this

Normal - [B] - If equals 1, then this item will always have the Normal quality. If equals 0, then ignore this

Beltable - [B] - If equals 1, then this item can be placed in the character's belt slots. If equals 0, then ignore this

MaxSockets1 - [N] - Determines the maximum possible number of sockets that can be spawned on the item when the item level is greater than or equal to 1 and less than or equal to the matching MaxSocketsLevelThreshold1 value(s). The number of sockets is also determined by the Gemsockets value from AMW.txt

MaxSocketsLevelThreshold1 - [N] - Defines the item level thresholds using the above MaxSockets1 field(s)

TreasureClass - [B] - If equals 1, then allow this Item Type to be used in default treasure classes. If equals 0, then ignore this

Rarity - [N] - Determines the chance for the item to spawn with stats, when created as a random Weapon/Armor/Misc item. Used in the following formula: IF RANDOM(0, (["Rarity"] - [Current Act Level]))> 0, THEN spawn stats

StaffMods - [O] - Determines if the Item Type should have class specific item skill modifiers. Grants skills to the class listed using the Code column in PlayerClass.txt

Class - [O] - Determines if this item should be useable only by a specific class. Referenced from the Code column in PlayerClass.txt

VarInvGfx - [N] - Tracks the number of inventory graphics used for this item type. This number much match the number of InvGfx1 field(s) used

InvGfx1 - [O] - Defines a DC6 file to use for the item's inventory graphics. The entry amount should equal the value used in above VarInvGfx

StorePage - [O] - Uses a code to determine which UI tab page on the NPC shop UI to display this Item Type, such as after it is sold to the NPC. Referenced from the Code column in StorePage.txt

LevelGroups.txt

This file controls how the game groups levels together. This has currently no gameplay purpose and is mainly used for condensing level names in desecrated (terror) zone messaging.


Data Fields

Name - [O] - Defines the unique name pointer for the level group, which is used in other files

ID - [N] - Defines the unique numeric ID for the level group, which is used in other files

GroupName - [O] - String Field. Used for displaying the name of the level group, such as when all levels in a group have been desecrated (Terrorized)

Levels.txt

This file controls how the game controls the area levels, including how the level is built, what rules are allowed on the level, and what monsters/objects can spawn on the level.

This file uses the following files: AutoMap.txt, LevelGroups.txt, LvlMaze.txt, LvlPrest.txt, LvlSub.txt, LvlTypes.txt, LvlWarp.txt, monstats.txt, Objgroup.txt


Data Fields

Name - [O] - Defines the unique name pointer for the area level, which is used in other files

ID - [N] - Defines the unique numeric ID for the area level, which is used in other files

Pal - [N] - Defines which palette file to use for the area level. This uses index values from 0 to 4 to convey Act 1 to Act 5

Act - [N] - Defines the Act number that the area level is a part of. This uses index values from 0 to 4 to convey Act 1 to Act 5

QuestFlag - [N] - Controls what quest record that the player needs to have completed before being allowed to enter this area level, while playing in Classic Mode. Each quest can have multiple quest records, and this field is looking for a specific quest record from a quest. Referenced by the Code value of the Quest Flags Table

QuestFlagEx - [N] - Controls what quest record that the player needs to have completed before being allowed to enter this area level, while playing in Expansion Mode. Each quest can have multiple quest records, and this field is looking for a specific quest record from a quest. Referenced by the Code value of the Quest Flags Table

Layer - [N] - Defines a unique numeric ID that is used to identify which Automap data belongs to which area level when saving and loading data from the character save

SizeX - [N] - Specifies the Length tile size values of an entire area level, which are used for determining how to build the level, for Normal, Nightmare, and Hell Difficulty, respectively

SizeY - [N] - Specifies the Width tile size values of an entire area level, which are used for determining how to build the level, for Normal, Nightmare, and Hell Difficulty, respectively

OffsetX & OffsetY - [N] - Specifies the location offset coordinates (measured in tile size) for the origin point of the area level in the world. Must not overlap with other level offsets

Depend - [N] - Assigns another level to be this area level's depended level, which controls this area level's position and how it starts building its tiles. Uses the level ID field. If this equals 0, then ignore this

Teleport - [N] - Controls the functionality of the Sorceress Teleport skill and the Assassin Dragon Flight skill on the area level

CodeDescription
0Teleport is disabled on the area level
1Teleport is enabled on the area level
2Teleport is enabled on the area level but adheres to the collision of the rooms

Rain - [B] - If equals 1, then allow rain to play its effects on the area level. If the level is part of Act 5, then it will snow on the area level, instead of rain. If equals 0, then it will never rain on the area level

Mud - [B] - If equals 1, then random bubbles will animate on the tiles that are flagged as water tiles. If equals 0, then ignore this

NoPer - [B] - If equals 1, then allow the use of display option of Perspective Mode while the player is in the level. If equals 0, then disable the option of Perspective Mode and force the player to use Orthographic Mode while the player is in the level

LOSDraw - [B] - If equals 1, then the level will check the player's line of sight before drawing monsters. If equals 0, then ignore this

FloorFilter - [B] - If equals 1 and if the floor's layer in the area level equals 1, then draw the floor tiles with a linear texture sampler. If equals 0, then draw the floor tiles with a nearest texture sampler

BlankScreen - [B] - If equals 1, then draw the area level screen. If equals 0, then do not draw the area level screen, meaning that the level will be a blank screen

DrawEdges - [B] - If equals 1, then draw the areas in levels that are not covered by floor tiles. If equals 0, then ignore this

DrlgType - [N] - Determines the type of Dynamic Random Level Generation used for building and handling different elements of the area level. Uses the Code from the table below to handle which type of DRLG is used.

CodeDescription
0None
1Maze
2Preset
3Outdoor

LevelType - [N] - Defines the Level Type used for this area level. Uses the ID field from LvlTypes.txt

SubType - [N] - Controls the group of tile substitutions for the area level (LvlSub.txt). There are defined sub-types to choose from, listed below.

CodeDescription
-1None
0Border Cliffs
1Border Middle
2Border Corner
3Border General
4Border Wild Waypoint
5Border Wild Shrine
6Border Wild Themes
7Border Desert Waypoint
8Border Desert Shrine
9Border Desert Themes
10Siege Dirt
11Siege Snow
12Barricade
13Broken Barricade

SubTheme - [N] - Controls which theme number to use in a Level Substitution. The allowed values are 0 to 4, which convey which Prob0, Trials0, and Max0 field to use from the LvlSub.txt file. If this equals -1, then there is no sub theme for the area level

SubWaypoint - [N] - Controls the level substitutions for adding waypoints in the area level (LvlSub.txt). This uses a defined sub type to choose from and also depends on the room having a waypoint tile

SubShrine - [N] - Controls the level substitutions for adding Shrines in the area level (LvlSub.txt). This uses a defined sub type to choose from and also depends on the room allowing for a shrine to spawn

Vis0 - [N] - Defines the visibility of other area levels involved with this area level, allowing for travel functionalities between levels. This uses the ID field of another defined area level to link with this area level. If this equals 0, then no area level is specified

Warp0 - [N] - Uses the ID field from LvlWarp.txt, which defines which Level Warp to use when exiting the area level. This is connected with the definition of the related Vis0 field. If this equals -1, then no Level Warp is specified which should also mean that the related Vis0 field is not defined

Intensity - [N] - Controls the intensity value of the area level's ambient colors. This affects brightness of the room's RGB colors. Uses a value between 0 and 128. If all these related fields equal 0, then the game ignores setting the area level's ambient colors

Red - [N] - Controls the red value of the area level's ambient colors. Uses a value between 0 and 255

Green - [N] - Controls the green value of the area level's ambient colors. Uses a value between 0 and 255

Blue - [N] - Controls the blue value of the area level's ambient colors. Uses a value between 0 and 255

Portal - [B] - If equals 1, then this area level will be flagged as a portal level, which is saved in the player's information and can be used for keeping track of the player's portal functionalities. If equals 0, then ignore this

Position - [B] - If equals 1, then enable special casing for positioning the player on the area level. This can mean that the player could spawn on a different location on the area level, depending on the level room's position type. An example can be when the player spawns in a town when loading the game, or using a waypoint, or using a town portal. If equals 0, then ignore this

SaveMonsters - [B] - If equals 1, then the game will save the monsters in the area level, such as when all players leave the area level. If equals 0, then monsters will not be saved and will be removed. This is usually disabled for areas where monsters do not spawn

Quest - [N] - Controls what quest record is attached to monsters that spawn in this area level. This is used for specific quests handling lists of monsters in the area level. Referenced by the Code value of the Quest Flags Table

WarpDist - [N] - Defines the minimum pixel distance from a Level Warp that a monster is allowed to spawn near. Tile distance values are converted to game pixel distance values by multiplying the tile distance value by 160 / 32, where 160 is the width of pixels of a tile

MonLvl - [N] - Controls the overall monster level for the area level for Normal, Nightmare, and Hell Difficulty, respectively. This is for Classic mode only. This can affect the highest item level allowed to drop in this area level

MonLvlEx - [N] - Controls the overall monster level for the area level for Normal, Nightmare, and Hell Difficulty, respectively. This is for Expansion mode only. This can affect the highest item level allowed to drop in this area level

MonDen - [N] - Controls the monster density on the area level for Normal, Nightmare, and Hell Difficulty, respectively. This is a random value out of 100000, which will determine whether to spawn or not spawn a monster pack in the room of the area level. If this value equals 0, then no random monsters will populate on the area level

MonUMin - [N] - Defines the minimum number of Unique Monsters that can spawn in the area level for Normal, Nightmare, and Hell Difficulty, respectively. This field depends on the related MonDen fields being defined

MonUMax - [N] - Defines the maximum number of Unique Monsters that can spawn in the area level for Normal, Nightmare, and Hell Difficulty, respectively. This field depends on the related MonDen field being defined. Each room in the area level will attempt to spawn a Unique Monster with a 5/100 random chance, and this field's value will cap the number of successful attempts for the entire area level

MonWndr - [B] - If equals 1, then allow Wandering Monsters to spawn on this area level (WanderingMon.txt). This field depends on the related MonDen field being defined. If equals 0, then ignore this

MonSpcWalk - [N] - Defines a distance value, used to handle monster pathing AI when the level has certain pathing blockers, such as jail bars or rivers. In these cases, monsters will walk randomly until a player is located within this distance value or when the monsters find a possible path to target the player. If this equals 0, then ignore this field

NumMon - [N] - Controls the number of different monsters randomly spawn in the area level. The maximum value is 13. This controls the number of random selections from the 25 related mon1 and nmon1 fields or umon1 fields, depending on the game difficulty and monster type

mon1 - [O] - Defines which monsters can spawn on the area level for Normal Difficulty. Uses the monster ID field from MonStats.txt

rangedspawn - [B] - If equals 1, then for the first monster, try to pick a ranged type. If equals 0, then ignore this

nmon1 - [O] - Defines which monsters can spawn on the area level for Nightmare Difficulty and Hell Difficulty. Uses the monster ID field from MonStats.txt

umon1 - [O] - Defines which monsters can spawn as Unique monsters on this area level for Normal Difficulty. Uses the monster ID field from MonStats.txt

cmon1 - [O] - Defines which Critter monsters can spawn on the area level. Uses the monster ID field from MonStats.txtCritter monsters are determined by the critter field from MonStats2.txt

cpct1 - [N] - Controls the percent chance (out of 100) to spawn a Critter monster on the area level

camt1 - [N] - Controls the amount of Critter monsters to spawn on the area level after they succeeded their random spawn chance from the above cpct1 field

Themes - [N] - Controls the type of theme when building a level room. This value is a summation of possible values to build a bit mask for determining which themes to use when building a level room. For example, a value of 60 means that the area level can have the following themes: 32, 16, 8, 4.

CodeDescription
0No Theme
1Object Empty Theme (no objects spawn)
2Barrel Theme (create random barrel objects)
4Shrine Theme
8Treasure Theme (create random items)
16Armor Stand Theme
32Weapon Rack Theme

SoundEnv - [N] - Uses the Index field from SoundEnviron.txt, which controls what music is played while the player is in the area level

Waypoint - [N] - Defines the unique numeric ID for the Waypoint in the area level. If this value is greater than or equal to 255, then ignore this field

LevelName - [O] - Used for displaying the name of the area level, such as when in the UI when the Automap is being viewed

LevelWarp - [O] - Used for displaying the entrance name of the area level on Level Warp tiles that link to this area level. For example, when the player mouse hovers over a tile to warp to the area level, then this string is displayed

LevelEntry - [O] - Used for displaying the UI popup title string when the player enters the area level

ObjGrp0 - [N] - Uses a numeric *ID Index to define which possible Object Groups to spawn in this area level (ObjGroup.txt). The game will go through each of these fields, so there can be more than 1 Object Group used in an area level. If this value equals 0, then ignore this

ObjPrb0 - [N] - Determines the random chance (out of 100) for each Object Group to spawn in the area level. This field depends on the related "ObjGrp#" field being defined

LevelGroup - [O] - Defines what group this level belongs to. Used for condensing level names in desecrated (terror) zones messaging. See LevelGroups.txt.

LvlMaze.txt

This file controls the sizes of the underground area levels. This file uses the levels from Levels.txt and specifies the sizes for each room, which can mean how many Level Presets to use to build out the entire randomly generated area.


Data Fields

Name - [O] - This is a reference field to describe the area level. IDeally this should match the name of the area level from the Levels.txt file

Level - [N] - This refers to the ID field from the Levels.txt file

Rooms - [N] - Controls the total number of rooms that a Level Maze will generate when playing the game in Normal Difficulty, Nightmare Difficulty, and Hell Difficulty, respectively

SizeX & SizeY - [N] - Controls the length and width sizes of each room (DS1 map files) that are added to the Level Maze. This is measured in tile sizes

Merge - [N] - This value affects the probability that a room gets an adjacent room linked next to it. This is a random chance out of 1000.

LvlPrest.txt

This file controls the values for each Level Preset. A Level Preset is a static area composed of tiles that is used to construct entire area levels found in the game.


Data Fields

Name - [O] - This is a reference field to define the Level Preset

Def - [N] - Defines the unique numeric ID for the Level Preset. This is referenced in other files

LevelID - [N] - This refers to the ID field from the Levels.txt file. If this value is not equal to 0, then this Level Preset is used to build that entire area level. If this value is equal to 0, then the Level Preset does not define the entire area level and is used as a part of constructing area levels

Populate - [B] - If equals 1, then units are allowed to spawn in the Level Preset. If equals 0, then units will never spawn in the Level Preset

Logicals - [B] - If equals 1, then the Level Preset allow for wall transparency to function. If equals 0, then walls will always appear solid

Outdoors - [B] - If equals 1, then the Level Preset will be classified as an outdoor area, which can mean that lighting will function differently. If equals 0, then the Level Preset will be classified as an indoor area

Animate - [B] - If equals 1, then the game will animate the tiles in the Level Preset. If equals 0, then ignore this

KillEdge - [B] - If equals 1, then the game will remove tiles that border the size of the Level Preset. If equals 0, then ignore this

FillBlanks - [B] - If equals 1, then all blank tiles in the Level Preset will be filled with unwalkable tiles. If equals 0, then ignore this

SizeX & SizeY - [N] - Specifies the Length and Width tile size values of the Level Preset, which are used for determining how big to build area levels. These values are equal to 0 for Level Presets that are static

AutoMap - [B] - If equals 1, then this Level Preset will be automatically completely revealed on the Automap. If equals 0, then this Level Preset will be hidden on the Automap and will need to be explored

Scan - [B] - If equals 1, then this Level Preset will allow the usage of warping with waypoints (This requires that the Level Preset has a waypoint object). If equals 0, then ignore this

Pops - [N] - Defines how many Pop tiles are defined in the Level Preset file. These Pop tiles are mainly used for controlling the roof and wall popping when a player enters a building in an area

PopPad - [N] - Determines the size of the Pop tile area, by using an offset value. This offset value can increase or decrease the size of the Pop tile size if it has a positive or negative value

Files - [N] - Determines the number of different versions to use for the Level Preset. This value acts as a range, which the game will use for randomly choosing one of the File1 fields to build the Level Preset. This is how the Level Presets have variety when the area level is being built

File1 - [O] - Specifies the name of which ds1 file to use. The ds1 files contain data for building Level Presets. If this value equals 0, then this field will be ignored. The number of these defined fields should match the value used in the "Files" field

Dt1Mask - [N] - This functions as a bit field mask with a size of a 32 bit value. This explains to the ds1 file which of the 32 dt1 tile files to use from a Level Type when assembling the Level Preset. Each File 1 field value from LevelTypes.txt is assigned a bit value, up to the 32 possible bit values. (For example: File1 = 1, File2=2, File3 = 4, File4=8, File5=16….File32 = 2147483648). To build the "Dt1Mask", you would add their associated bit values together for a total value. This total value is the bitmask value.

LvlSub.txt

This file controls how tiles can be substituted in for other tiles. The game will divide the level into clusters and iterate through these clusters to randomly substitute tiles with different ones for more visual diversity.


Data Fields

Name - [O] - This is a reference field to describe the Level Substitution

Type - [N] - This refers to the SubType field from the Levels.txt file. This defines a group that multiple substitutions can share

File - [O] - Specifies the name of which ds1 file to use. The ds1 files contain data for building Level Presets

CheckAll - [B] - If equals 1, then substitute each tile in the room. If equals 0, then substitute random tiles in the room.

BordType - [N] - This controls how often substituting tiles can work for border tiles

CodeDescription
0Single One Only. This allows substituting for 1 border in total
1One Per Cluster. This allows substituting 1 border for each cluster in the level
Other valuesAllow substituting borders for all of the level

GridSize - [N] - Controls the tile size of a cluster for substituting tiles. This evenly affects both the X and Y size values of a room

Dt1Mask - [N] - This functions as a bit field mask with a size of a 32 bit value. This explains to the ds1 file which of the 32 dt1 tile files to use from a Level Type when assembling the Level Preset. Each File 1 field value from LevelTypes.txt is assigned a bit value, up to the 32 possible bit values. (For example: File1 = 1, File2=2, File3 = 4, File4=8, File5=16….File32 = 2147483648). To build the "Dt1Mask", you would add their associated bit values together for a total value. This total value is the bitmask value.

Prob0 - [N] - This value affects the probability that the tile substitution is used. This is a random chance out of 100. Which "Prob#" field that is checked depends on the SubTheme value from the Levels.txt file

Trials0 - [N] - Controls the number of times to randomly substitute tiles in a cluster. If this value equals -1, then the game will try to do as many tile substitutions that can be allowed based on the cluster and tile size. This field depends on the CheckAll field being equal to 0

Max0 - [N] - The maximum number of clusters of tiles to substitute randomly. This field depends on the CheckAll field being equal to 0.

LvlTypes.txt

This file controls which files containing tile graphics are used for creating maps. This looks at dt1 files, which contain tile images of the environments foundin the game. Each line in this file defines a Level Type and what files it uses.

The order of each Level Type defined in this file will convey what ID value it has, which is referenced by the following files: Levels.txt, LvlPrest.txt

The order of these Level Types should not be changed


Data Fields

Name - [O] - This is a reference field to define the name of each Level Type

ID - [N] - This is a reference field to define the index of each Level Type

File 1 - [O] - Specifies the name of which dt1 file to use. The dt1 files contain the images for each area tile found in each Act. If this value equals 0, then this field will be ignored

Act - [N] - Defines which Act is related to the Level Type. When loading an Act, the game will only use the Level Types associated with that Act number. Uses a decimal number to convey each Act number (Ex: A value of 3 means Act 3)

LvlWarp.txt

This file controls how the player is moved to different area levels, such as entrances and exits between different areas. This player transportation of between levels is defined as a Level Warp. Level Warps function as special tiles that are added to the area for controlling the location for where to transport the player.

This file is used by the Levels.txt file.


Data Fields

Name - [O] - This is a reference field to define the Level Warp

ID - [N] - Defines the numeric ID for the type of Level Warp. This ID can be shared between multiple Level Warps if those Level Warps want to use the same functionality. This is referenced in other files

SelectX & SelectY - [N] - These values define the horizontal and vertical offsets (respectively) of the starting left corner position of the Level Warp area. This is treated as the starting position to select the interactable Level Warp area in the area level. This value is measured in pixels

SelectDX & SelectDY - [N] - These values define the horizontal and vertical offsets (respectively) of the offset from the starting position of the Level Warp area. This is added with the SelectX & SelectY fields (respectively) to determine the overall size and position of the Level Warp in the area level. This value is measured in pixels

ExitWalkX & ExitWalkY - [N] - These values define the horizontal and vertical positions (respectively) of the destination location where the player will walk to after exiting to this Level Warp. This value is measured with a sub-tile offset from the base position of the Level Warp. One full tile on a level is composed of a grid of 5x5 sub-tiles

OffsetX & OffsetY - [N] - These values define the horizontal and vertical positions (respectively) of the sub-tile for the Level Warp, where the player will appear when exiting to this area level. This value is measured with a sub-tile offset from the base position of the Level Warp. One full tile on a level is composed of a grid of 5x5 sub-tiles

LitVersion - [B] - If equals 1, then Level Warp tiles will change their appearance when highlighted. If equals 0, then the Level Warp tiles will not change appearance when highlighted

Tiles - [N] - Defines an index offset to determine which tile to use in the tile set for the highlighted version of the Level Warp. These tiles are loaded and hidden/revealed when the player mouse hovers over the Level Warp tiles. This relies on LitVersion being enabled

NoInteract - [B] - If equals 1, then the Level War cannot be directly interacted by the player. If equals 0, then the player can interact with the Level Warp

Direction - [O] - Defines the orientation of the Level Warp. Uses a specific string code.

CodeDescription
lLeft. If this is selected, then the tile type direction should match this.
rRight. If this is selected, then the tile type direction should match this.
bBoth. This can mean that the Level Warp can be reassigned its direction.

UniqueID - [N] - Defines the unique numeric ID for the Level Warp. Each Level Warp should have a unique ID so that the game can handle loading that specific Level Warp's related files.

MagicPrefix.txt, MagicSuffix.txt

These files control the possible magic stat modifiers applied as either a prefix or suffix to the item.

These item affixes will appear at the start or end of an item's name respectively

This file is loaded together with other similar files in the following order: magicsuffix.txt, magicprefix.txt, AutoMagic.txt

These stat modifiers may only appear on magical or higher quality items, excluding sets and uniques.


Data Fields

Name - [O] - Defines the item affix name

version - [N] - Defines which game version to use this item affix (<100 = Classic mode | 100 = Expansion mode)

spawnable - [B] - If equals 1, then this item affix is used as part of the game's randomizer for assigning item modifiers when an item spawns. If equals 0, then this item affix is never used

rare - [B] - If equals 1, then this item affix can be used when randomly assigning item modifiers when a rare item spawns. If equals 0, then this item affix is not used for rare items

level - [N] - The minimum item level required for this item affix to spawn on the item. If the item level is below this value, then the item affix will not spawn on the item

maxlevel - [N] - The maximum item level required for this item affix to spawn on the item. If the item level is above this value, then the item affix will not spawn on the item

levelreq - [N] - The minimum character level required to equip an item that has this item affix

classspecific - [O] - Controls if this item affix should only be used for class specific items. This relies on the Class specified from ItemTypes.txt, for the specific item. Referenced from the Code column in PlayerClass.txt

class - [O] - Controls which character class is required for the class specific level requirement (classlevelreq field). Referenced from the Code column in PlayerClass.txt

classlevelreq - [N] - The minimum character level required for a specific class in order to equip an item that has this item affix. This relies on the class specified. If equals null, then the class will default to using the levelreq field

frequency - [N] - Controls the probability that the affix appears on the item (a higher value means that the item affix will appear on the item more often). This value gets summed together with other "frequency" values from all possible item affixes that can spawn on the item, and then is used as a denominator value for the randomizer. Whichever item affix is randomly selected will be the one to appear on the item. The formula is calculated as the following: [Item Affix Selected] = ["frequency"] / [Total Frequency]. If the item has a magic level (from the "magic lvl" field in Weapons.txt/Armor.txt/Misc.txt) then the magic level value is multiplied with this value. If equals 0, then this item affix will never appear on an item

group - [N] - Assigns an item affix to a specific group number. Items cannot spawn with more than 1 item affix with the same group number. This is used to guarantee that certain item affixes do not overlap on the same item. If this field is null, then the group number will default to group 0

mod1code - [O] - Controls the item properties for the item affix (Uses the Code field from Properties.txt)

mod1param - [N] - The "parameter" value associated with the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

mod1min - [N] - The "min" value to assign to the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

mod1max - [N] - The "max" value to assign to the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

transformcolor - [O] - Controls the color change of the item after spawning with this item affix. If empty, then the item affix will not change the item's color. Referenced from the Code column in Colors.txt

itype1 - [O] - Controls what Item Types are allowed to spawn with this item affix. Uses the Code field from ItemTypes.txt

etype1 - [O] - Controls what Item Types are excluded to spawn with this item affix. Uses the Code field from ItemTypes.txt

multiply - [N] - Multiplicative modifier for the item's buy and sell costs, based on the item affix (Calculated in 1024ths for buy cost and 4096ths for sell cost)

add - [N] - Flat integer modification to the item's buy and sell costs, based on the item affix

Missiles.txt

This file controls the different functions for all missiles and their statistics. Missiles are projectiles used throughout the game for attacks, skills, and special effects.


Data Fields

Missile - [O] - Defines the unique name ID for the missile, which is how other files can reference the missile. The order of defined missiles will determine their ID numbers, so they should not be reordered

pCltDoFunc - [N] - Uses an ID value from the below table, to select a function for the missile's behavior that will be active every frame on the client side. This is more about handling the local graphics while the missile is moving.

IDParametersDescription
0 (or empty)
Do nothing
1
ProcessMissileMode - Perform the standard client missile move function. This is called in most of the other functions
2
ProcessBlood - Kill the missile if it goes off screen. Otherwise, set the number of duration frames for the missile to equal 128 and perform the standard missile move function.
3CltCalc1
CltSubMissile1
PoisonJavelin - Create a sub missile each frame that the current missile is moving where "CltCalc1" controls the number of subloops for thecreated sub missile.
4CltParam1
CltParam2
CltParam3
CltSubMissile1
PoisonCloud - Create multiple sub missiles randomly in a area where the parameters control the spawn rate, number of sub missiles to spawn per rate, and the spawn radius size, respectively.
5SubStart
SubStop
Firewall - Create an animation sequence for the missile where the difference of the "SubStart" and "SubStop" fields control the length of the sequence within the animation, and the game will randomly choose a frame within this sequence to loop back to.
6CltParam1
CltSubMissile1
CltSubMissile2
CltSubMissile3
FirewallMaker - Randomly create 1 of the 3 possible sub missiles, where the parameter controls the random chance that the sub missile spawns with no light.
7CltParam1ProcessGuidedArrow - Try to retarget the missile on a possible target unit where the parameter controls the rate at which the missile should attempt to retarget again.
8CltParam1
CltSubMissile1
InitSteps
LightningMaker - Attempt to create a sub missile where the parameter controls the number of subloops for the sub missile (minimum value equals 1). The sub missile is only created if the current missile's has existed for greater than or equal to the "InitSteps" value.
9CltParam1
CltParam2
CltParam3
CltSubMissile1
CltSubMissile2
ProgSound
ProcessMeteorCenter - Create each sub missile where the parameters control the number of frames, the missile fall rate (Used to calculate the starting height), and the missile slide rate (used to calculated the starting position offset), respectively. Also attempt to play the "ProgSound" sound at 2 frames before the "CltParam1" frame count.
10CltParam1
CltParam2
CltParam3
CltSubMissile1
CltSubMissile2
ProcessMonBliz - Randomly create 1 of the 2 sub missiles in an area radius, where the parameters control the baseline radius size (affected by the missile level), the spawn frequency (minimum equals 3 frames, affected by the missile level), and the level divisor (affects the difference in value for the other fields per missile level). The "CltParam1" and "CltParam2" parameters also can control the missile fall distance and fall rate.
11
ProcessHoldLast - At the end of the missile's animation, set it to dead and destroy its light. Otherwise, run the ProcessMissileMode function.
12CltParam1
CltParam2
ProcessScreenShake - Run the ProcessMissileMode function and also call the camera shaking function. The "CltParam1" field controls the camera shake magnitude, and the "CltParam2" field controls the camera shake duration.
13CltParam1
CltParam2
CltSubMissile1
CltSubMissile2
ProcessBlizzard - Randomly create 1 of the 2 missiles in a calculated area every duration. The radius and spawn frequency are controlled by the missile's linked skill's "calc1" and "calc2" fields. The "CltParam1" and "CltParam2" parameters control the sub missile fall distance and fall rate.
14CltParam3
CltParam4
CltParam5
FingerMageSpider2 - Shoot a missile that can be retargeted on a unit. The parameters control the retarget frequency, the retarget distance range, and the retarget position offset (minimum value equals 1), respectively.
15CltParam1
CltParam2
CltParam3
CltParam4
CltParam5
CltSubMissile1
FingerMageSpider - Shoot a missile that can be retargeted on a unit and can spawn a sub missile. The parameters control the number of frames to wait before spawning the sub missile (minimum value equals 1), the number of frames to wait before processing the missile, the retarget frequency, the retarget distance range, and the retarget position offset (minimum value equals 1), respectively.
16CltSubMissile1DiabWallMaker - Shoot a missile using the ProcessMissileMode function where every frame while moving it can create a sub missile that will have a random chance to spawn with no light
17CltParam1
CltSubMissile1
ProcessCurse - Shoot a missile that will create a disc of sub missiles every 3 frames after a specified frame duration controlled by the parameter. The radius and density of the disc of sub missile is controlled by the current missile's radius value, which is given to the missile by the skill function.
18CltParam1
CltSubMissile1
InitSteps
SimpleTrailMaker - Shoot a missile that will create a sub missile after the "InitSteps" frame count, where the parameter controls the sub missile's subloops. The sub missile will follow the same direction, offset, and path of the current missile.
19CltParam1
CltParam2
CltSubMissile1
ProcessFrozenOrb - Shoot a missile that will create sub missiles at a spawn rate and different directions. The "CltParam1" value controls the rate to spawn sub missiles, and the "CltParam2" value controls the direction index increment for looping through which direction the next created sub missile should fire towards.
20CltParam1
CltParam2


ProcessFrozenOrbNova - Shoot a missile that will have a delay until processing and then will process its path at a specified rate. The "CltParam1" value controls the activation frame, and the "CltParam2" value controls the periodic rate to process the missile path
21CltParam1
CltSubMissile1
BRDeathControl - Create a sub missile after a periodic delay that can spawn in a random location in a radius controlled by the parameter. The periodic delay can be 25, 10, 3, or 15 frames, depending how many frames the current missile has lasted.
22CltParam1
CltSubMissile1
BRDeathLightning - Shoot a missile that will retarget to a randomized direction every periodic frame delay and will create sub missiles while moving.
23
ProcessDOELight - Run the ProcessMissileMode function and ensure that the missile lasts 500 frames if its frame count is less than 100
24CltParam1
CltParam2
CltParam3
CltSubMissile1
CltSubMissile2
ProcessCairnStones - Create multiple "CltSubMissile1" sub missiles in a radius controlled by "CltParam2" and a spawn frequency controlled by "CltParam3", lasting a duration controlled by "CltParam1". The "CltParam1" field also controls the start time for spawning more "CltSubMissile1" sub missiles and "CltSubMissile2" sub missiles every 8 frames if there are any of the "StoneAlpha" to "StoneTheta" objects in the room.
25CltParam1
CltParam2
CltParam3
CltSubMissile1
ProcessTowerMist - Shoot a missile that will spawn a sub missile randomly in a defined radius after a periodic delay
26CltParam1
CltParam2
CltParam3
CltSubMissile1
CltSubMissile2
SmithDeathControl - Create "CltSubMissile1" sub missile in a random position in a radius controlled by "CltParam3" where "CltParam1" controls its spawn rate. Create "CltSubMissile2" sub missile as a lobbing missile in a random position in the same radius where "CltParam2" controls its spawn rate. Also the "CltSubMissile2" sub missile's level is controlled by the following function: 1 + RANDOM(0, 5)
27CltParam1
CltSubMissile1
SmithFirewallMaker - Create the sub missile every frame while moving. The parameter controls the delay until the current missile needs to retarget in a new direction
28CltParam1
CltSubMissile1
SmithDoNotDraw - Create 4 sub missiles in different directions after a delay that is controlled by the parameter.
29CltParam1
CltParam2
CltSubMissile1
CltSubMissile2
CltSubMissile3
ProgSound
ProcessAndyControl0 - Create "CltSubMissile1" after 10 Frames which subsequently will make its own "CltSubMissile1" where its "CltParam1", "CltParam2" and "CltParam3" fields control the Z offset, Z Velocity Max, and Z Acceleration, respectively. Create "CltSubMissile2" randomly in a radius equal to 20 and at a periodic rate controlled by "CltParam1". "CltParam2" controls the duration of the camera shake, which starts after 90 frames. Between frame 115 and 315, create "CltSubMissile3" randomly in a radius equal to 6 where its "CltParam1" and "CltParam2" values control the Z offset and Z velocity.
30CltParam1
CltParam2
CltParam3
CltSubMissile1
ProcessTowerChestSpawner - Start creating the sub missileperiodically after an initial delay controlled by "CltParam1". "CltParam2"controls the periodic rate to spawn the sub missile and "CltParam3" controlsthe radius size to spawn the sub missile randomly in an area.
31
ProcessHoradricStaff - This function does multiple hardcoded features. Shake the screen after 150 frames. Create 7 "horadriclight" missiles. After 165 frames, create the "horadriclightning" missile at a specific position, direction, and velocity. After 150 frames, create the "dust" missile every other frame.
32
ProcessRadDeath - Create a "radamenthandofgod" missile at an increasing rate based on the total frame count of the current missile
33
ProcessTaintedSun - Create a "taintedsunflash" missile at an increasing rate and at random ranges, based on the total frame count of the current missile. Also add a "horadric_light" overlay on the altar object in the level room.
34
ProcessTaintedSunBall - The missile will change its path and velocities throughout its life cycle using different mods, to follow a crafted pattern
35
ProcessQueenDeath - Every 4 frames, create a "queendeathglob" using a lobbing function in a random position in a defined radius of size 12.
36
ProcessDurielDeath - Create a "explodingarrowexp" missile at an increasing rate and at random ranges, based on the total frame count of the current missile. Also create a "durieldeathrock" missile at an increasing rate and at random ranges, based on the total frame count of the current missile. Run a camera shake function.
37
ProcessDiabloAppears - Run a camera shake function andrequest to play the "monster_diablo_taunt_1" sound
38
ProcessHellForge - Create multiple lobbing "hffragment1" missiles at an increasing rate in random directions, based on the total frame count of the current missile. Run a camera shake function.
39
ProcessHFragment1 - If the missile has a source unit, then set the missile frame to 0 and run the ProcessMissileMode function
40
ProcessHFragment2 - Periodically create a "hfspirit1" missile after a randomized periodic delay.
41
ProcessSoul - Adjust the animation rate of the missile after certain key frames during the missile's duration.
42Param1 Param2ProcessIzualDeath - Create the "izual mist loop" missile every frame in a random radius of size 10. Create a "izual lightning" missile every frame between the value of the "Param1" and "Param2" fields.
43
ProcessAttached - Attach the missile follow its source unit's position. Kill the missile if the unit is dead.
44CltSubMissile1ProcessDistraction - Attach the missile follow its source unit's position. Create a sub missile while moving.
45CltParam1
CltParam2
CltParam3
CltSubMissile1
ProcessDistractionFog - Create a number of sub missiles in an area at a defined rate. "CltParam1" controls the spawn rate, "CltParam2" controls the number of missiles to spawn per rate, and "CltParam3" controls the radius to randomly spawn the sub missiles.
46CltParam1
CltSubMissile1
ProcessTrailJav - Create 2 sub missiles per frame while moving with perpendicular directions and a defined number of subloopscontrolled by the parameter
47CltParam1
CltSubMissile1
CltSubMissile2
CltSubMissile3
ProgSound
ProcessMoltenBoulder - Play the "ProgSound" sound if the missile has a bounce value. Run the FirewallMaker function (Code = 6).
48CltSubMissile1
CltSubMissile2
ProcessEruption - Uses the linked skill's "calc1" and "calc2" fields to get the spawn radius and spawn frequency for creating the 2 sub missiles. For "CltSubMissile1", the missile is automatically set to dead mode when it is created.
49CltParam1
CltSubMissile1
ProcessVines - Periodically spawn the sub missile in the same direction as the current missile where the parameter controls the spawn rate
50CltParam1
CltParam2
CltParam3
CltParam4
CltParam5
CltSubMissile1
ProcessVolcano - Spawn a sub missile with the lob function at a defined spawn rate at certain frames within the current missile's duration. "CltParam1" controls the periodic spawn rate, "CltParam2" controls the radius to spawn the sub missile, "CltParam3" controls the starting frame to begin spawning the sub missile, "CltParam4" controls the end frame to stop spawning the sub missile, and "CltParam5" controls the lob start value.
51CltParam1
CltParam2
CltParam3
CltParam4
CltSubMissile1
CltSubMissile2
ProgSound
ProcessRecycleDelay - Create "CltSubMissile1" at a frame controlled by "CltParam1" in a radius controlled by "CltParam4" and a spawn count controlled by "CltParam3". Create "CltSubMissile2" sub missile at a frame controlled by "CltParam2" and also request to play the "ProgSound" at the same time.
52CltSubMissile1ProcessMakePerpMissiles - Create 2 of the same sub missile every frame while moving that face at perpendicular directions
53CltParam1
CltSubMissile1
ProcessTigerFury - Create a sub missile every frame while moving and then run the ProcessGuidedArrow function (Code = 7).
54
ProcessAnyaCenter - Create a "anya icemagic" missile every frame until frame 110. Create a decreasing number of "anyasteam1" missiles in a random position and velocity, every frame until frame 110. Perform a camera shake function. Create a "anyasteamvent" missile and a "anyasteam" missile randomly in a radius every 7 frames until frame 200.
55
ProcessAncientDeath - Create a "ancient death cloud" missile every 3 frames randomly in an area in a random direction
56CltParam1
CltParam2
CltParam3
CltSubMissile1
CltSubMissile2
CltSubMissile3
ProcessBaalTaunt - Randomly choose to spawn one of the 3 sub missiles where each of the parameters control the spawn rate for each of the sub missiles.
57CltSubMissile1ProcessBladeShieldCenter - Attach the current missile to the source unit and after a certain delay, create a sub missile every frame that moves in a missile spiral path
58Param1ProcessChaosIce - Randomly decide to change the path of the missile to a different direction
59
ProcessWorldstoneChip - If the current Z offset is too low or too high, then stop the missile
60
ProcessHurricane - Every 2 Frames change the missile path to a different direction
61
ProcessOverseerCtrl - Randomly create either the "catapult cold ball" missile or "catapult meteor ball" missile at an increasing spawnrate in a random position in a radius.
62
ProcessNihlathak - This function handles the missilevisuals for Nihlathak's death.
• Every frame has a random chance to create 2 of the following missiles in a random position: "nehlithakswoosh" "nehlithakdebris1", "nehlithakdebris2", "nehlithakdebris3",nehlithakdebris4".
• After frame 60, every 20 frames create a "brdeathlightningbolt" missile in a random direction.
• At frame 25, create a "nehlithakhole" and "nehlithakholelight" at the missile's location.
63
ProcessNihlathakHurr - Update the path of the missile at every frame
64
ProcessBaalControl - This function handles the missile visuals for Baal's death.
• Randomly spawn either a "baalfx spirit 1" missile or "baalfx spirit 2" missile at an increasing rate and in a randomdirection.
• At frame 450, create a "baalfx baal head appear" missile
• At frame 425, create a "baalfx baal head 1" missile
• At frame 375, create a "baalfx baal head 2" missile
• At frame 325, create a "baalfx baal head 3" missile
• After some time and when the "tyrael3" unit is found within the level, then randomly create either the "baalfx tyreal debris 1", "baalfx tyreal debris 2", or "baalfx tyreal debris 3" every frame for a specified duration
65
ProcessBaalSpirit - The missile will follow different modes that can change its path and direction, which are controlled by the ProcessBaalControl function (Code = 64)
66
ProcessWorldstoneShake - Attach the missile to the source unit. Call the camera shake function at random periodic delays. There is a small chance to randomly create either the "baalfx tyreal debris 1", "baalfx tyreal debris 2", or "baalfx tyreal debris 3" at periodic durations.
67CltParam1
CltParam2
CltParam3
CltSubMissile1
CltSubMissile2
CltSubMissile3
ProcessMissileDelayed - Create a sub missile at a specified frame at the source unit's location. Each parameter controls the specific frame to spawn one of the sub missiles.
68CltParam1
CltSubMissile1
ProcessSucFireBall - Create a sub missile every frame while the current missile is moving where the number of sub loops for the sub missile is controlled by the parameter

pCltHitFunc - [N] - Uses an ID value from the below table, to select a specialized function for the missile's behavior when hitting something on the client side. This is more about handling the local graphics at the moment of missile collision.

IDParametersDescription
0 (or empty)
Do nothing
1cHitPar1
cHitPar2
CltHitSubMissile1
HitExplodingArrow - Create a disc of sub missiles with a defined radius and missile count
2cHitPar1
cHitPar2
cHitPar3
CltHitSubMissile1
Param1
Param2
HitPlagueJavelin - Create an inner and outer disc of sub missiles with a specified density for each ring. Each sub missile will use its "Param1" and "Param2" fields to define their velocities
3CltHitSubMissile1
CltHitSubMissile2
CltHitSubMissile3
HitOilPotion - Create "CltHitSubMissile1" and then randomly create either "CltHitSubMissile2" or "CltHitSubMissile3"
4cHitPar1
CltHitSubMissile1
HitDoNova - Create a ring of sub missiles with a defined count
5
Do nothing
6
Do nothing
7
Do nothing
8
Do nothing
9cHitPar1
cHitPar2
cHitPar3
CltHitSubMissile1
ProgOverlay
HitHolyBolt - Determine whether to impact allies, how that damage is modified by the "dParam1" field based on the unit type hit, and if the missile should be killed on hitting an allowed unit. If impacting a unit then create a sub missile. When hitting an ally, create an overlay.
10ProgOverlayHitLightningOverlay - Add an overlay on the target unit
11
Do nothing
12cHitPar1
cHitPar2
CltHitSubMissile1
CltHitSubMissile2
CltHitSubMissile3
SHitCalc1
HitImmolationArrow - Create a ring of sub missiles with a defined radius and density count. Use "SHitCalc1" to control the range (duration) of the sub missile
13Param2HitGuidedArrow - Control the missile flags to either mark the target, go to the target, or run the missile retarget function
14CltHitSubMissile1
CltHitSubMissile2
HitFreezingArrow - Create the "CltHitSubMissile1" sub missile normally, and create "CltHitSubMissile2" sub missile in a random rotation
15
Do nothing
16cHitPar1
ProgOverlay
HitChainLightning - Create duplicate of this missile if there is a valid unit in range and there are still enough chain hits. Add an overlay on the target unit.
17
Do nothing
18cHitPar1
cHitPar2
cHitPar3
CltHitSubMissile1
CltHitSubMissile2
CltHitSubMissile3
CltHitSubMissile4
HitMeteorCenter - Create a ring of "CltHitSubMissile1" sub missiles where "cHitPar1" controls the density. Create a "CltHitSubMissile2" sub missile where the range is controlled by the linked skill's "Param3" and "Param4" values from the Skills.txt file, and also set the missile's light radius value to 12. Create a ring of "CltHitSubMissile3" sub missiles where "cHitPar2" controls the density. Create a ring of "CltHitSubMissile4" sub missiles where "cHitPar3" controls the density.
19CltHitSubMissile1
CltHitSubMissile2
HitMonBliz - Randomly choose between creating one of the sub missiles
20
Do nothing
21
Do nothing
22
Do nothing
23
Do nothing
24CltHitSubMissile1HitBoneSpear - Create a sub missile at the target location
25cHitPar1
cHitPar2
CltHitSubMissile1
HitLightningFury - Create a sub missile per enemy found in an area, where the radius and the maximum number of possible missiles to spawn are controlled by the parameters
26cHitPar1
cHitPar2
CltHitSubMissile1
HitSubMissile1
HitFistOfHeavensDelay - If there is no "HitSubMissile1" sub missile, then do nothing. Otherwise, create a sub missile per enemy found in an area, where the radius and the maximum number of possible missiles to spawn are controlled by the parameters
27
nullptr
28cHitPar1
CltHitSubMissile1
Param1
HitMonsterRancidGasPotion - Create a disc of sub missiles with a specified density. Each sub missile will use its "Param1" field to define its velocity.
29cHitPar1
CltHitSubMissile1
HitGrimWard - Create a sub missile with a specified duration and force its direction to be the same as the missile that created it
30cHitPar1
CltHitSubMissile1
HitFrozenOrb - Create a disc of sub missiles with a specified density.
31
HitIceBreak - Create a missile with a forced animation rate value of 1, depending on the missile class used.
• If "Missile" equals "icebreaksmall" then create "icebreaksmallmelt"
• If "Missile" equals "icebreakmedium" then create "icebreaklargemelt"
• If "Missile" equals "icebreaklarge" then create "icebreaklargemelt"
• If "Missile" equals "catapult cold explosion" then create "icebreaklargemelt"
32cHitPar1
cHitPar2
CltHitSubMissile1
CltHitSubMissile2
ProgOverlay
HitFirehead - Create the "CltHitSubMissile1" sub missile at the target location and create a ring of "CltHitSubMissile2" sub missiles where the parameters control the ring radius and density. Also add an overlay on the source unit.
33cHitPar1
CltHitSubMissile1
HitFlyingRocks - Create a random number of sub missiles in a defined area radius controlled by "cHitPar1"
34
HitSmithDoNotDraw - Make the source unit invisibile
35
Do nothing
36Param1HitHellMeteor - Do nothing is colliding with a wall. Otherwise, create a disc of randomly selected missiles. The random missiles chosen are either "firewall", "firesmall", or "firemedium". The missile's "Param1" field controls the disc radius. The duration of each missile created is calculated with the following: Range = 25 + RANDOM(0, 25) - 12
37
HitRadHandOfGod - Create a random number of "radamentholybolt" missiles in random positions in a radius
38
HitTaintedSunFlash - Create a "taintedsunball" missile
39
HitQueenDeathGlob - Randomly create 1 of the next 2 missile's defined in the missile.txt file after the missile that uses this function. For example, if "Missile" equals "queendeathglob" (ID = 354) and it uses this function, then randomly choose to create "queendeathsplat1" (ID = 355) or "queendeathsplat2" (ID = 356).
40
HitHealingBolt - Determine that the target is an allied unit
41
HitDurielDeathRock - Create 3 "durieldeathdebris" missiles randomly in a radius value of 6. Create a "durieldeathsmoke" missile at the previous missile's location.
42
HitSoulStoneFragment1 - Create a "hffragment2" missile on the target unit
43
HitSoulStoneFragment2 - Create a "hffragment3" missile on the target unit, with 0 velocity, and a random delay between 10 to 45 frames.
44CltHitSubMissile1HitCreateNextMissile - Create a sub missile and set its direction to match the old missile's path
45
Do nothing
46cHitPar1
cHitPar2
HitSubMissile1
HitCatapultChargedBall - Create a disc of sub missiles where the number of missiles created is controlled by the following formula: ["cHitPar1"] + ["cHitPar2"] * ([Missile current level] - 1)
47cHitPar1
cHitPar2
CltHitSubMissile1
CltHitSubMissile2
HitCatapultSpikeBag - Create "CltHitSubMissile1" sub missiles using the lob function where "cHitPar1" and "cHitPar2" are used to calculate the number of missiles in the following formula: MissileCount = ["cHitPar1"] + ["cHitPar2"] 8 ([Missile current level] - 1). The radius is this missile lob function is determined by doing MissileCount / 4.


Also create "CltHitSubMissile2" at the location of the old missile.

48
HitCatapultCold - Create a "freezingarrowexp1" (ID = 88) missile in the center of the previous missile location. Also create 8 different "freezingarrowexp2" (ID = 89) missiles ejected in 8 different directions. Also create 8 different "catapult cold explosion" (ID = 417) missiles that have a randomized range and velocity and use the lob function to launch these missiles which an initial Z offset equal to 30.
49
Do nothing
50cHitPar1
cHitPar2
CltHitSubMissile1
CltHitSubMissile2
HitCatapultMeteor - Run the spray rock function to spawn different missiles. First create multiple "moltenboulder-flyingrocks" (ID = 456) missiles where the "cHitPar1" field controls the number of missiles to spawn and the targeted radius distance to spawn these missiles is equal to this value multiplied by 2. The "cHitPar2" field controls these missiles' velocity. The "CltHitSubMissile1" sub missile is never spawned, but these "moltenboulder-flyingrocks" will not spawn unless this field has a value. Next create a ring of 18 "CltHitSubMissile2" sub missiles.
51cHitPar1
cHitPar2
CltHitSubMissile1
HitLightJav - Create a disc of the sub missiles where "cHitPar1" controls the number of sub missiles to spawn and "cHitPar2" acts as a Boolean Field where if enabled, it will cause these spawned sub missiles to have a randomized path.
52cHitPar1
cHitPar2
CltHitSubMissile1
CltHitSubMissile2
CltHitSubMissile3
HitMoltenBoulder - If hitting the target or a monster with the "large" flag enabled, then create "CltHitSubMissile1" sub missile. Also run the spray rock function to spawn different missiles. First create multiple "moltenboulder-flyingrocks" (ID = 456) missiles where the "cHitPar1" field controls the number of missiles to spawn and the targeted radius distance to spawn these missiles is equal to this value multiplied by 2. The "cHitPar2" field controls these missiles' velocity. The "CltHitSubMissile2" sub missile is never spawned, but these "moltenboulder-flyingrocks" will not spawn unless this field has a value. Next create a ring of 18 "CltHitSubMissile3" sub missiles.
53cHitPar1
cHitPar2
cHitPar3
CltHitSubMissile1
CreateRollingBoulder - Create the sub missile that bounces, where "cHitPar1" controls the number of bounces, "cHitPar2" controls the bounce dampening percentage, and "cHitPar3" controls the number of steps, or the lifetime remaining in ticks (Minimum value equal to 1).
54CltHitSubMissile1HitVineTrail - Create the sub missile and force it to get the same direction as the previous missile
55CltHitSubMissile1
CltHitSubMissile2
CltHitSubMissile3
HitDebris - Create all 3 sub missiles at the source unit location
56CltHitSubMissile1HitRecycleVine - Create the sub missile at the source unit location and force it to get the same direction as the previous missile
57cHitPar1
cHitPar2
CltHitSubMissile1
HitBaalSpawn - Create a disc ring of sub missiles where the parameters control the radius and density of the ring, respectively
58
Do nothing
59
Do nothing
60cHitPar1
CltHitSubMissile1
CltHitSubMissile2
HitNihlathak1 - Create the "CltHitSubMissile1" sub missile at the location of the previous missile. Create the "CltHitSubMissile2" sub missile at the same position, but "cHitPar1" controls the z offset of the sub missile.
61
HitWorldstoneShake - Stop the camera shake
62cHitPar1
CltHitSubMissile1
HitBaalRandomBolts - Create the sub missile where the range is randomized by the parameter (minimum value equals 1) and the target location is also randomized by this range value
63cHitPar1
CltHitSubMissile1
Param1
Param2
HitBaalTauntPoison - Create a disc of sub missiles where "cHitPar1" controls the ring density (minimum value equals 1). Each sub missile will use its "Param1" and "Param2" fields to define their velocities
64cHitPar1
CltHitSubMissile1
HitBladeFury - Create a disc of sub missiles with the parameter controlling the ring density (minimum value equals 1)

pSrvDoFunc - [N] - Uses an ID value from the below table, to select a specialized function for the missile's behavior while active every frame on the server side

IDParametersDescription
0 (or empty)
Do nothing
1
MissileDoArrow - Perform the standard missile move function. This is called in most of the other functions
2SrvCalc1
SubMissile1
MissileDoPoisonJavelin - Create a sub missile with a specified number of subloops
3
StillMissileKludge - Check the missile velocity to determine whether or not to set the collision mask to Missile
4
Do nothing
5SubStart
SubStop
Firewall - Create an animation sequence for the missile, set the collision mask to Missile
6SubMissile1MissileMakeFirewall - Create sub missiles based on the count that was passed to this missile
7Param1MissileGuidedArrow - Use the parameter to control the retarget time on the unit
8Param1
Param2
Param3
SubMissile1
MissileMonBliz - Create multiple sub missiles, using the parameters as the spawn radius, spawn frequency, and level divisor
9SubMissile1MissileMakeBatLightning - Create a sub missile based on the missile's path moved
10SubMissile1MissileBlizzard - Create multiple sub missiles, use the linked skill's "calc1" field for the radius, and the "calc2" field for the sub missile spawn frequency
11Param1
Param2
Param3
FingerMageSpider - Shoot a missile that can be retargeted. Uses the parameters to control the periodic delay between retargeting, the maximum distance to retarget, and the distance delta for where to retarget.
12SubMissile1MissileDiabWallMaker - Shoot a missile and have that missile create sub missiles as it is moving
13
MissileBoneWallMaker - Shoot a missile and have that missile create pet summons as it is moving, using the linked skill's "PetType" field from Skills.txt
14Param1
Param2
MissileDoGrimWard - Shoot a missile where every periodic delay, do a function from the "srvdofunc" field in the Skills.txt file. "Param1" controls the periodic frame delay, and "Param2" controls which function code number to use.
15Param1
Param2
SubMissile1
MissileFrozenOrb - Shoot a missile and have that missile shoot sub missiles in different directions as it is moving. "Param1" controls the sub missile spawn rate and "Param2" controls the change in direction per sub missile spawn.
16Param1
Param2
MissileFrozenOrbNova - Shoot a missile in a set direction. "Param1" controls the delay until the missile moves and "Param2" controls theperiodic frame delay for updating the missile's target path
17Param1
Param2
Param3
Param4
Param5
SubMissile1
MissileDoCairnStones - Shoot sub missiles in a radius and then after a delay, create a portal to another level. Uses parameters to control the delays between creating sub missiles, the radius to create the sub missiles, which level ID to link the portal to, and the delay before creating the portal.
18Param1
Param2
Param3


DoTowerChestSpawner - Open the chest object to spawn items, and create random gold piles in an area
19
DoRadamentDeath - Use the Paladin Redemption skill function on nearby corpses in an area
20
MissileAttachUntilDead - Shoot the missile and keep it attached to the source until. If the source unit dies, then kill the missile.
21SubMissile1MissileDoDistraction - Create a sub missile and run the MissileAttachUntilDead function
22Param1
SubMissile1
ProcessTrailJav - Shoot the missile and have it create 2 sub missiles every frame while it is moving
23Param1
SubMissile1
ProcessSucFireBall - Create a sub missile every frame while the missile is moving, where the parameter controls the sub missile's subloops
24Param1
SubMissile1
Duplicate of function 23
25SubMissile1MissileEruption - Shoot the missile and have it create sub missiles in a radius at a periodic rate, which is controlled by the link skill's "calc1" and "calc2" fields.
26Param1
SubMissile1
ProcessVines - Shoot the missile and have it create sub missiles at a periodic rate, which is controlled by the parameter
27Param1
Param2
MissileTornado - Shoot the missile and have it deal damage at a periodic rate in a radius, which is controlled by the parameters or by the linked skill's "calc4" and "aurarangecalc" fields
28Param1
Param2
Param3
Param4
Param5
SubMissile1
ProcessVolcano - Shoot the missile and have it periodically create sub missiles in a lobbing pattern. Use parameters to control the periodic frame delay for spawning sub missiles, the radius to spawn the sub missiles, the start and stop frame count for when to spawn and stop spawning sub missiles, and the lob start value for the sub missiles
29Param1ProcessRecycleDelay - Shoot the missile and after a certain delay, process any life steal or mana steal, based on the linked skill's "calc1" and "calc2" fields
30Param1
Param2
SubMissile1
MissileRabiesPlague - Shoot the missile, have it attached to the source unit, and have it periodically spawn sub missiles in a radius
31SubMissile1ProcessMakePerpMissiles - Shoot the missile and have it create 2 sub missiles that are fired in perpendicular directions
32SubMissile1MissileTigerFuryPath - Shoot the missile using the MissileGuidedArrow function and have it create a sub missile
33Param1
Param2
SubMissile1
ProcessRecycleManaDelay - Shoot the missile and after a certain delay, process any mana steal, based on the linked skill's "calc1" field, and create a sub missile after another certain delay
34Param1
Param2
Param3
Param4
SubMissile1
SubMissile2
ProcessBaalTaunt - Randomly choose one of the 4 parameters to select a delay and randomly spawn one of the sub missiles
35Param1MissileDoChaosIce - Shoot the missile and have it repath in a perpendicular direction after a periodic delay
36
MissileDoBaalDeathControl - Shoot the missile and spawn the Tyrael unit
37SubMissile1
SubMissile2
SubMissile3
ProcessMissileDelayed - Shoot the missile and have it create 1 of each sub missile

pSrvHitFunc - [N] - Uses an ID value from the below table, to select a specialized function for the missile's behavior when hitting something on the server side

IDParametersDescription
0 (or empty)
Do nothing
1sHitPar1RadialFireDamage - Deal elemental damage in an area where the parameter controls the damage radius
2sHitPar1
sHitPar2
HitSubMissile1
HitPlagueJavelin - Kill the missile while dealing its damage, and also deal radial poison damage in an area by creating sub missiles in a defined radius for a specified number of loops
3sHitPar1NoTargetRadialDamage - Deal the missile damage in amdefined area radius
4sHitPar1
HitSubMissile1
HitSubMissile2
HitSubMissile3
HitSubMissile4
HitCreateMissile - Determine whether to kill this missile on hit or not, and then create 1 of each hit sub missile
5sHitPar1
HitSubMissile1
HitDoNova - Create a certain number of sub missiles and shoot them outwards in an equalized distance from the location of this missile
6sHitPar1
sHitPar2
HitSummon - Create a monster in a specific starting mode at the missile's location. The "sHitPar1" field controls the monster ID to use, and the "sHitPar2" field controls which mode to set on the monster.
7sHitPar1
sHitPar2
sHitPar3
dParam1
HitHolyBolt - Determine whether to impact allies, how that damage is modified by the "dParam1" field based on the unit type hit, and if the missile should be killed on hitting an allowed unit
8
HitBlaze - The missile will deal damage if the source unit has the "blaze" state
9sHitPar1
sHitCalc1
HitSubMissile1
HitImmolationArrow - Deal radius damage and create sub missiles with specified range values in a defined radius. If there is a freeze length or cold length from the elemental damage, then set it to 0.
10
HitGuidedArrow - Control if the missile should be redirected on a target when possible, or if it should be destroyed
11sHitPar1
HitSubMissile1
HitSubMissile2
HitSubMissile3
HitSubMissile4
HitCreateMissileNoDmg - Kill this missile on hit and create 1 of each hit sub missile
12sHitPar1HitChainLightning - Create duplicate of this missile if there is a valid unit in range and there are still enough chain hits
13sHitPar1
sHitPar2
HitGlacialSpike - Deal elemental damage in a specified radius with a specified elemental duration, if applicable
14sHitPar1
sHitPar2
HitSubMissile1
HitMeteorCenter - Deal damage in a specified radius and create a ring of hit sub missiles (controlled by a count) and define the duration of these sub missiles based on the linked skill's "Param3" and "Param4" values
15HitSubMissile1HitSpiderLay - Kill the missile and create a sub missile at the location
16
HitSpiderGoo - Apply the state from the linked skill's "auratargetstate" field with a duration defined by the linked skill's "calc4" field
17
HitHowl - Use the linked skill's "auratargetstate", "calc2", "calc3", and "Param2" fields to apply a state (with a defined level and duration) to units in a defined radius. Also call the AIScare function.
18
HitShout - Kill the missile and call the AddShout function on hit allied units, which applies the "aurastate" state defined in the linked skill
19
HitFingerMageSpiderHit - Kill the missile and apply the "auratargetstate" defined in the linked skill
20sHitPar1
sHitPar2
HitSubMissile1
HitLightningFury - Kill the missile and create a specified number of sub missiles in a radius, per unit targeted in that radius
21
HitBattleCry - Kill the missile and apply the "auratargetstate" state on the target unit, defined in the linked skill
22sHitPar1
sHitPar2
HitSubMissile1
HitFistOfHeavensDelay - Kill the missile and create a specified number of sub missiles in a defined radius, per filtered unit targeted in that radius
23sHitPar1HitMissileSkill - Kill the missile and do a function from the "srvdofunc" field in the Skills.txt file, where the "sHitPar1" field controls the function ID to use
24sHitPar1RadialMissileDamage - Kill the missile and damage in an area controlled by a defined radius
25sHitPar1
HitSubMissile1
HitMonsterRancidGasPotion - Kill the missile and deal radial poison damage in an area by creating sub missiles in a defined radius for a specified number of loops
26sHitPar1
HitSubMissile1
HitGrimWardStart - Kill the missile and create a sub missile with a specified duration
27
HitKillMissile - Kill the missile
28
HitGrimWardScare - Kill the missile and apply the AiScare function to all monsters in a radius controlled by the "calc2" field from the linked skill with a distance and duration value controlled by the "Param5" and "Param6" values from the linked skill.
29sHitPar1
HitSubMissile1
HitFrozenOrb - Kill the missile and create specified number sub missiles in a circular outwards direction from that location
30sHitPar1
sHitPar2
RadialStunDamage - Kill the missile and do stun damage in a defined radius with a defined stun length
31
HitFirehead - Kill the missile and deal elemental damage directly to the target unit's life, ignoring resistances
32Param4MissileHitCairnStones - Create a portal linked to a specified level area ID
33
HitTowerChest - Set the dungeon room to untile
34
Do nothing
35
OrbMistHit - Kill the missile. Set the missile's tracked object's dungeon room to untile and set that object's mode from Neutral to Operating.
36HitSubMissile1HitCreateNextMissile - Kill the missile and create a sub missile with parameters copied over
37
HitBladeCreeper - If this hits a target unit then deal damage
38sHitPar1
sHitPar2
HitSubMissile1
HitCatapultChargedBall - Kill the missile and create a specified number of sub missiles in a ring
39
HitImpSpawnMonsters - Kill the missile and spawn an appropriate monster, based on the allowed monsters in the area level
40sHitPar1
sHitPar2
HitSubMissile1
HitCatapultSpikeBag - Kill the missile and create aspecified number of sub missiles that are lobbed outwards in a radius
41
Do nothing
42
Do nothing
43
HitHealing - Use the linked skill's physical damage as the amount of healing done to the target unit. Determine whether to kill the missile or not, based on the "CollideKill" field
44sHitPar1RadialDamage - Kill the missile and deal damage in a specified radius
45sHitPar1
sHitPar2
HitSubMissile1
HitLightJav - Kill the missile and create a number of sub missiles in a disc. Determine whether these sub missiles created should use a random path or not.
46
Do nothing
47sHitPar1
sHitPar2
HitSubMissile1
BoulderExplode - Kill the missile and create an explosion with a defined radius and a ring of sub missiles with a defined count of missiles
48HitSubMissile1CreateRollingBoulder - Kill the missile and create a sub missile
49
Do nothing
50sHitPar1HitPlagueVines - If the range of the missile minus the"sHitPar1" parameter is greater than the missile's current frame, then deal damage
51HitSubMissile1
HitSubMissile2
HitSubMissile3
HitDebris - Kill the missile and create the 3 sub missiles, if possible
52sHitPar1
HitSubMissile1
HitBladeFury - Kill the missile and spawn sub missiles in multiple directions depending on the "sHitPar1" value
53
HitRabiesContagion - Get the elemental duration from the linked skill and compare that with the duration of the missile to determine to kill the missile or create a new one, depending on the target having the linked skill's "auratargetstate" state
54
HitBaalSpawnMonsters - Kill the missile and spawn a monster in Neutral mode
55sHitPar1HitBaalInferno - Drain a percentage of the target's mana (from 0 to 100) and deal damage
56sHitPar1
HitSubMissile1
HitArmageddon - Kill the missile, deal damage in an area with a defined radius, and create a sub missile
57
MissileHitBaalDeathControl - Create the Tyrael unit
58sHitPar1
HitSubMissile1
HitBaalRandomBolts - Kill the missile and create a sub missile targeting a random randomized location range controlled by "sHitPar1"
59sHitPar1
HitSubMissile1
Param1
Param2
HitBaalTauntPoison - Kill the missile and create an inner and outer disc of sub missiles with a specified count (using "sHitPar1") of missiles and with incremental specified velocities (the sub missile will use its "Param1" and "Param2" fields)

pSrvDmgFunc - [N] - Uses an ID value from the below table, to select a specialized function that gets called before damaging a unit on the server side

IDParametersDescription
0 (or empty)
Default
1DmgCalc1DamageFireArrow - Converts a percentage of physical damageto elemental damage per level
2dParam1DamageIceArrow - Converts the Cold Length value to Freeze Length. Uses the parameter value as a percentage increase the Freeze Length
3dParam1DamageFireWall - Uses the parameter as a random chance to use an attack result Soft Hit flag
4
DamageIceBlast - Converts the Cold Length value to the Freeze Length value
5dParam1
dParam2
DamageBlessedHammerNew - Uses "dParam1" as a damage percent multiplier against Undead type monsters. Uses "dParam2" as a damage percent multiplier against Demon type monsters.
6
DamageNoItem - If the source unit is not a Mercenary, then set the target unit to be unable to drop items when it dies.
7dParam1DamageWarCry - Uses the parameter as the Stun Length. If the parameter equals 0, then use the source unit's related skill's "Calc4" field as the Stun Length value. If the skill is null, then use the missile's default skill's Param1 & Param2 values.
8ProgOverlayDamageEruption - Create an overlay on the target
9dParam1DamageTwister - Uses the parameter as the Stun Length, and sets the damage Hit Class layer to Stun Layer. If the parameter equals 0, then use the source unit's related skill's "Calc2" field as the Stun Length.
10
DamageFreeze - Checks that the missile has stats and then sets the Freeze Length value to equal the Cold Length value.
11
DoRabiesDamage - Checks the remaining poison duration on the target unit and if it is less than 10, it will use the linked skill's Elemental damage and duration length calculation (Skills.txt) to apply a new poison.
12
sDamageLightningJavelin
13dParam1
dParam2
DamageBlessedHammerOld - Uses the source units physical damage percent stat as a percentage modifier for the missile's damage, and then calls the "DamageBlessedHammerNew" function (function code 5)
14dParam1
dParam2
DamageMoltenBoulder - Uses "dParam2" as the percent chance to knockback the target unit. Uses "dParam1" to control how this percent chance is modified. Also relies on the "small" and "large" fields from the MonStats2.txt file.
• If the target unit is a player and "dParam1" is greater than or equal to 1, then set the knockback chance to "dParam2"
• If "dParam1" is less than 1 and the monster is a small size, then set the knockback chance to "dParam2"
• If "dParam1" equals 1 and the monster is a small size, then set the knockback chance to "dParam2" * 2
• If "dParam1" equals 1 and the monster is a large size, then set the knockback chance to "dParam2"
• If "dParam1" is greater than 1 and the monster is a small size, then set the knockback chance to "dParam2" * 3
• If "dParam1" is greater than 1 and the monster is a large size, then set the knockback chance to "dParam2" * 2
• If "dParam1" is greater than 1 and the monster is not a small or large size, then set the knockback chance to "dParam2"
15sHitPar2
dParam1
DamageHolyBolt - Uses "dParam1" as a percent damage multiplier for the total elemental damage, depending on the use case of "sHitPar2"
• If the target unit is a monster
• If "sHitPar2" equals 0, then do not modify the damage
• If "sHitPar2" equals 1, then only modify the damage if the monster is an Undead type
• If "sHitPar2" equals 2, then only modify the damage if the monster is a Demon type
• If "sHitPar2" equals 3, then only modify the damage if the monster is an Undead or Demon type
• If the target unit is a player
• If "sHitPar2" equals 0, then modify the damage
• If "sHitPar2" equals 0, then do not modify the damage

SrvCalc1 - [C] - Used as a parameter for the pSrvDoFunc field

Param1 - [N] - Used as a parameter for the pSrvDoFunc field

CltCalc1 - [C] - Used as a parameter for the pCltDoFunc field

CltParam1 - [N] - Used as a parameter for the pCltDoFunc field

SHitCalc1 - [C] - Used as a parameter for the pSrvHitFunc field

sHitPar1 - [N] - Used as a parameter for the pSrvHitFunc field

CHitCalc1 - [C] - Used as a parameter for the pCltHitFunc field

cHitPar1 - [N] - Used as a parameter for the pCltHitFunc field

DmgCalc1 - [C] - Used as a parameter for the pSrvDmgFunc field

dParam1 - [N] - Used as a parameter for the pSrvDmgFunc field

Vel - [N] - The baseline velocity of the missile, which is the speed at which the missile moves in the game world. This is measured by distance in pixels traveled per frame

MaxVel - [N] - The maximum velocity of the missile. If the missile's current velocity increases (based on other fields), then this field controls how high the velocity is allowed to go

VelLev - [N] - Adds extra velocity based on the caster unit's level. Each level gained beyond level 1 will add this value to the baseline Vel field

Accel - [N] - Controls the acceleration of the missile's movement. A positive value will increase the missile's velocity per frame. A negative value will decrease the missile's velocity per frame. The bigger positive or negative values will cause the velocity to change faster per frame

Range - [N] - Controls the baseline duration that the missile will exist for after it is created. This is measured in frames where 25 Frames = 1 second

LevRange - [N] - Adds extra duration based on the caster unit's level. Each level gained beyond level 1 will add this value to the baseline Range field

Light - [N] - Controls the missile's Light Radius size (measured in grid sub-tiles)

Flicker - [N] - If greater than 0, then every 4th frame while the missile is active, the Light Radius will randomly change in size between base size to its base size plus this value (measured in grid sub-tiles)

Red - [N] - Controls the red color value of the missile's Light Radius (Uses a value from 0 to 255)

Green - [N] - Controls the green color value of the monster's Light Radius (Uses a value from 0 to 255)

Blue - [N] - Controls the blue color value of the monster's Light Radius (Uses a value from 0 to 255)

InitSteps - [N] - The number of frames the missile needs to be alive until it becomes visible on the game client. If the missile's current duration in frame count is less than this value, then the missile will appear invisible

Activate - [N] - The number of frames the missile needs to be alive until it becomes active. If the missile's current duration in frame count is less than this value, then the missile will not collide

LoopAnim - [B] - If equals 1, then the missile's animation will repeat once the previous animation finishes. If equals 0, then the missile's animation will only play once, which can cause the missile to appear invisible at the end of the animation, but it will still be alive

CelFile - [O] - Defines which DCC missile file to use for the visual graphics of the missile

animrate - [N] - Controls the visual speed of the missile's animation graphics. The overall missile animation rate is calculated as the following: 256 * ["animrate"] / 1024

AnimLen - [N] - Defines the length of the missile's animation in frames where 25 Frames = 1 second. This field can sometimes be used to calculate the missile animation rate, depending on the missile function used

AnimSpeed - [N] - Controls the visual speed of the missile's animation graphics on the client side (Measured in 16ths, where 16 equals 1 frame per second). This can be overridden by certain missile functions

RandStart - [N] - If this value is greater than 0, then the missile will start at a random frame between 0 and this value when it begins its animation

SubLoop - [B] - If equals 1, then the missile will use a specific sequence of its animation while it is alive, depending on its creation. If equals 0, then the missile will not use a sequenced animation

SubStart - [N] - The starting frame of the sequence animation. This requires that the SubLoop field is enabled

SubStop - [N] - The ending frame of the sequence animation. After reaching this frame, then the sequenced animation will loop back to the SubStart frame. This requires that the SubLoop field is enabled

CollideType - [N] - Defines the missile's collision type, which controls what units, objects, or parts of the environment that the missile can impact

CodeDescription
0No collision
1Player unit collision
2Monster unit collision
3Player and Monster unit collision
4No collision
5Monster unit collision
6Barrier collision, such as doors
7Missile collision
8Player, Monster, Barrier, and Wall collision

CollideKill - [B] - If equals 1, then the missile will be destroyed when it collides with something. If equals 0, then the missile will not be destroyed when it collides with something

CollideFriend - [B] - If equals 1, then the missile can collide with friendly units, including the caster. If equals 0, then the missile will ignore friendly units

LastCollide - [B] - If equals 1, then the missile will track the last unit that it collided with, which is useful for making sure the missile does not hit the same unit twice. If equals 0, then ignore this

Collision - [B] - If equals 1, then the missile will have a missile type path placement collision mask when it is initialized or moved. If equals 0, then the missile will have no placement collision mask when it is created or moved

ClientCol - [B] - If equals 1, then the missile will check collision on the client, depending on the missile's CollideType field. If equals 0, then ignore this

ClientSend - [B] - If equals 1, then the server will create the missile on the client. This can be used when reloading area levels or transitioning units between areas. If equals 0, then ignore this

NextHit - [B] - If equals 1, then the missile will use the next delay. If equals 0, then ignore this

NextDelay - [N] - Controls the delay in frame length until the missile is allowed to hit the same unit again. This field relies on the NextHit field being enabled

xoffset & yoffset & zoffset - [N] - Specifies the X, Y, and Z location coordinates (measured in pixels) to offset to visually draw the missile based on its actual location. This will only offset the visual graphics of the missile, not the missile itself. The Z axis controls the visual height of the missile

Size - [N] - Defines the diameter in sub-tiles (for both the X and Y axis) that the missile will occupy. This affects how the missile will collide with something or how the game will handle placement for the missile

SrcTown - [B] - If equals 1, then the missile will be destroyed if the caster unit is located in an act town. If equals 0, then ignore this

CltSrcTown - [N] - If this value is greater than 0 and the LoopAnim field is disabled, then this field will control which frame to set the missile's animation when the player is in town. This value gets subtracted from the AnimLen value to determine the frame to set the missile's animation.

CanDestroy - [B] - If equals 1, then the missile can be attacked and destroyed. If equals 0, then the missile cannot be attacked

ToHit - [B] - If equals 1, then this missile will use the caster's Attack Rating stat to determine if the missile should hit its target. If equals 0, then the missile will always hit its target

AlwaysExplode - [B] - If equals 1, then the missile will always process an explosion when it is killed, which can use the pSrvHitFunc, HitSound and ExplosionMissile fields on the client side. If equals 0, then the missile will only rely on proper collision hits to process an explosion

Explosion - [B] - If equals 1, then the missile will be classified as an explosion which will make it use different handlers for finding nearby units and dealing damage. If equals 0, then ignore this

Town - [B] - If equals 1, then the missile is allowed to be alive when in a town area. If equals 0, then the missile will be immediately destroyed when located within a town area

NoUniqueMod - [B] - If equals 1, then the missile will not receive bonuses from Unique monster modifiers. If equals 0, then the missile will receive bonuses from Unique monster modifiers

NoMultiShot - [B] - If equals 1, then the missile will not be affected by the Multi-Shot monster modifier. If equals 0, then the missile will be affected by theMulti-Shot monster modifier

Holy - [N] - Controls a bit field flag where each value is a code to allow the missile to damage a certain type of monster

CodeDescription
0Damage all units
1Only damage Undead
2Only damage Demons
4Only damage Beasts

CanSlow - [B] - If equals 1, then the missile can be affected by the "slowmissiles" state (States.txt). If equals 0, then the missile will ignore the "slowmissiles" state

ReturnFire - [B] - If equals 1, then missile can trigger the Sorceress Chilling Armor event function. If equals 0, then this missile will not trigger that function

GetHit - [B] - If equals 1, then the missile will cause the target unit to enter the Get Hit mode (GH), which acts as the hit recovery mode. If equals 0, then ignore this

SoftHit - [B] - If equals 1, then the missile will cause a soft hit on the unit, which can trigger a blood splatter effect, hit flash, and/or a hit sound. If equals 0, then ignore this

KnockBack - [N] - Controls the percentage chance (out of 100) that the target unit will be knocked back when hit by the missile

Trans - [N] - Controls the alpha mode for how the missile is displayed, which can affect transparency and blending

CodeDescription
0No Transparency
1Black Alpha Transparency
2White Alpha Transparency

Pierce - [B] - If equals 1, then allow the Pierce modifier function to work with this missile. If equals 0, then do not allow Pierce to work with this missile

MissileSkill - [B] - If equals 1, then the missile will look up the skill that created it and use that skill's damage instead of the missile damage. If equals 0, then ignore this

Skill - [O] - Links to the "skill" field from the Skills.txt file. This will look up the specified skill's damage and use it for the missile instead of using the missile's defined damage

ResultFlags - [N] - Controls different flags that can affect how the target reacts after being hit by the missile. Uses an integer value to check against different bit fields by using the "&" operator. For example, if the value equals 5 (binary = 101) then that returns true for both the 4 (binary = 100) and 1 (binary = 1) bit field values. Referenced by the Bit Field Value of the Result Flags Table

HitFlags - [N] - Controls different flags that can affect the damage dealt when the target is hit by the missile. Uses an integer value to check against different bit fields by using the "&" operator. For example, if the value equals 6 (binary = 110) then that returns true for both the 4 (binary = 100) and 2 (binary = 10) bit field values. Referenced by the Bit Field Value of the Hit Flags Table

HitShift - [N] - Controls the percentage modifier for the missile's damage. This value cannot be less than 0 or greater than 8. This is calculated in 256ths, where 8=256/256, 7=128/256, 6=64/256, 5=32/256, 4=16/256, 3=8/256, 2=4/256, 1=2/256, and 0=1/256

ApplyMastery - [B] - If equals 1, then apply the caster's elemental mastery bonus modifiers to the missile's elemental damage. If equals 0, then ignore this

SrcDamage - [N] - Controls how much of the source unit's damage should be added to the missile's damage. This is calculated in 128ths and acts as a percentage modifier for the source unit's damage that added to the missile. If equals -1 or 0, then the source damage is not included

Half2HSrc - [B] - If equals 1 and the source unit is currently wielding a 2-Handed weapon, then the SrcDamage is reduced by 50%. If equals 0, then ignore this

SrcMissDmg - [N] - If the missile was created by another missile, then this controls how much of the source missile's damage should be added to this missile's damage. This is calculated in 128ths and acts as a percentage modifier for the source missile's damage that added to this missile. If equals 0, then the source damage is not included

MinDamage - [N] - Minimum baseline physical damage dealt by the missile

MinLevDam1 - [N] - Controls the additional minimum physical damage dealt by the missile, calculated using the leveling formula between 5 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17-22, 23-28, 29 and beyond. These 5 level thresholds correlate to each field

MaxDamage - [N] - Maximum baseline physical damage dealt by the missile

MaxLevDam1 - [N] - Controls the additional maximum physical damage dealt by the missile, calculated using the leveling formula between 5 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17-22, 23-28, 29 and beyond. These 5 level thresholds correlate to each field

DmgSymPerCalc - [C] - Determines the percentage increase to the physical damage dealt by the missile based on specified skill levels

EType - [O] - Defines the type of elemental damage dealt by the missile. If this field is empty, then the related elemental fields below will not be used. Referenced by the Code value of the Elemental Types Table

EMin - [N] - Minimum baseline elemental damage dealt by the missile

MinELev1 - [N] - Controls the additional minimum elemental damage dealt by the missile, calculated using the leveling formula between 5 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17-22, 23-28, 29 and beyond. These 5 level thresholds correlate to each field number

EMax - [N] - Maximum baseline elemental damage dealt by the missile

MaxELev1 - [N] - Controls the additional maximum elemental damage dealt by the missile, calculated using the leveling formula between 5 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17-22, 23-28, 29 and beyond. These 5 level thresholds correlate to each field

EDmgSymPerCalc - [C] - Determines the percentage increase to the elemental damage dealt by the missile based on specified skill levels

ELen - [N] - The baseline elemental duration dealt by the missile. This is calculated in frame lengths where 25 Frames = 1 second. These fields only apply to appropriate elemental types with a duration

ELevLen1 - [N] - Controls the additional elemental duration added by the missile, calculated using the leveling formula between 3 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17 and beyond. These 3 level thresholds correlate to each field. These fields only apply to appropriate elemental types with a duration

HitClass - [N] - Defines the missile's own hit class into the damage routines, mainly used for determining hit sound effects and overlays. This field only handles the hit class layers, so values beyond these defined bits are ignored. Uses an integer value to check against different bit fields by using the "&" operator. For example, if the value equals 6 (binary = 110) then that returns true for both the 4 (binary = 100) and 2 (binary = 10) bit field values.

Bit Field ValueBinary Equivalent ValueDescription
1600010000Double Layer
3200010100Fire Layer
4800011110Cold Layer
6401000000Lightning Layer
8001010000Poison Layer
9601100000Stun Layer
11201110000Bash Layer
12810000000Thorns Layer
14410010000Sanctuary Layer
16010100000Silent Voice Layer
17610110000Goo Layer

NumDirections - [N] - The number of directions allowed by the missile, based on the DCC file used (CelFile). This value should be within the power of 2, with a minimum value of 1 or up to a maximum value of 64

LocalBlood - [B] - If equals 1, then change the color of blood missiles to green. If equals 0, then keep the blood missiles colored the default red

DamageRate - [N] - Controls the "damage_framerate" stat (Calculated in 1024ths), which acts as a percentage multiplier for the physical damage reduction and magic damage reduction stat modifiers, when performing damage resistance calculations. This is only enabled if the value is greater than 0

TravelSound - [O] - Points to a Sound field defined in the Sounds.txt file. Used when the missile is created and while it is alive

HitSound - [O] - Points to a Sound field defined in the Sounds.txt file. Used when the collides with a target

ProgSound - [O] - Points to a Sound field defined in the Sounds.txt file. Used for a programmed special event based on the client function

ProgOverlay - [O] - Points to the overlay field defined in the Overlay.txt file. Used for a programmed special event based on the server or client function

ExplosionMissile - [O] - Points to the Missile field for another missile. Used for the missile created on the client when this missile explodes

SubMissile1 - [O] - Points to the Missile field for another missile. Used for creating a new missile based on the server function used

HitSubMissile1 - [O] - Points to the Missile field for another missile. Used for a new missile after a collision, based on the server function used

CltSubMissile1 - [O] - Points to the Missile field for another missile. Used for creating a new missile based on the client function used

CltHitSubMissile1 - [O] - Points to the Missile field for another missile. Used for a new missile after a collision, based on the client function used.

MonEquip.txt

This file controls how a monster may be created with specific type of inventory equipment items

These equipment items are randomly generated on the monster, based on the specified parameters in this file

This data relies on the "inventory" field being enabled for the listed monster, found in the monstats.txt file


Data Fields

monster - [O] - Defines the monster that should be equipped. Points to the matching ID value in the MonStats.txt file. If the monster has multiple defined equipment possibilities, then they should always be grouped together. The game will go through the list in order to match what is best to use for the monster

oninit - [B] - Defines if the monster equipment is added on initialization during the monster's creation, depending how the monster is spawned. Monsters created by a skill have this value set to 0. Monsters created by a level have this value set to 1

level - [N] - Defines the level requirement for the monster in order to gain this equipment. The game will prefer the highest level allowed, so the order of these equipment should be from highest level to lowest level

item1 - [O] - Item code that can be equipped on the monster

loc1 - [O] - Specifies the inventory slot where the item will be equipped. Once an item is equipped on that body location, then the game will skip any duplicate calls to equipping the same body location. This is another reason why the equipment should be ordered from highest level to lowest level. Referenced from the Code column in BodyLocs.txt

mod1 - [N] - Controls the quality level of the related item

Item Quality CodeDescription
0Any Quality (Used for a random quality)
1Low Quality (Ex: "Crude")
2Normal Quality (Default value if the value is empty)
3High Quality (Superior)
4Magic Quality (Uses Magic Prefixes and Suffixes)
5Set Item
6Rare Quality
7Unique (Predetermined stats)

MonLvl.txt

This file controls how monster statistics increase per level based on the current game type and difficulty

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

This file is used by MonStats.txt for all of these values


Data Fields

Level - [N] - An integer value to determine how to scale the monster's statistics when at a specific level


The following are used for D2R Classic:

AC & AC(N) & AC(H) - [N] - Percentage multiplier for increasing the Monster's Defense (multiplies with the AC field)

TH & TH(N) & TH(H) - [N] - Percentage multiplier for increasing the Monster's Attack Rating (multiplies with the A1TH and A2TH fields)

HP & HP(N) & HP(H) - [N] - Percentage multiplier for increasing the Monster's Life (multiplies with the minHP and maxHP fields)

DM & DM(N) & DM(H) - [N] - Percentage multiplier for increasing the Monster's Damage (multiplies with the A1MinD, A1MaxD, A2MinD, A2MaxD, El1MinD and El1MaxD fields)

XP & XP(N) & XP(H) - [N] - Percentage multiplier for increasing the Experience provided to the player when killing the Monster (multiplies with the Exp fields)


The following are used for D2R Expansion:

L-AC & L-AC(N) & L-AC(H) - [N] - Percentage multiplier for increasing the Monster's Defense (multiplies with the AC field)

L-TH & L-TH(N) & L-TH(H) - [N] - Percentage multiplier for increasing the Monster's Attack Rating (multiplies with the A1TH and A2TH fields)

L-HP & L-HP(N) & L-HP(H) - [N] - Percentage multiplier for increasing the Monster's Life (multiplies with the minHP and maxHP fields)

L-DM & L-DM(N) & L-DM(H) - [N] - Percentage multiplier for increasing the Monster's Damage (multiplies with the A1MinD, A1MaxD, A2MinD, A2MaxD, El1MinD and El1MaxD fields)

L-XP & L-XP(N) & L-XP(H) - [N] - Percentage multiplier for increasing the Experience provided to the player when killing the Monster (multiplies with the Exp fields)

MonPreset.txt

This file controls which monsters are preloaded in a preset, based on the Act number


Data Fields

Act - [N] - Defines the Act number used for each Monster Preset. Uses values between 1 to 5

Place - [O] - Defines a Super Unique monster from SuperUniques.txt, a monster from MonStats.txt or a place from MonPlace.txt. This defines the Monster Preset which is used for preloading, such as during level transitions

MonProp.txt

This file controls special properties that can be added to a monster, based on the game difficulty

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

This file is used by the monstats.txt file


Data Fields

ID - [N] - Defines the monster that should gain the Property. Points to the matching "ID" value in the monstats.txt file

prop1 - [O] - Defines with Property to apply to the monster (Uses the "code field from Properties.txt)

chance1 - [N] - The percent chance that the related property (prop#) will be assigned. If this value equals 0, then the Property will always be applied

par1 - [N] - The "parameter" value associated with the related property (prop#). Usage depends on the (Function ID field from Properties.txt)

min1 - [N] - The "min" value to assign to the related property (prop#). Usage depends on the (Function ID field from Properties.txt)

max1 - [N] - The "max" value to assign to the related property (prop#). Usage depends on the (Function ID field from Properties.txt)

MonSeq.txt

This file controls the sequence table used for specifying events during certain animation frames, such as when using skills.

A sequence is divided into multiple lines in this file to define each frame in the animation and to determine which event to use during a specific frame.


Data Fields

sequence -[N] - Establishes the Monster Sequence index. An entire monster sequence can be composed of multiple sequence lines, which means that each line needs to have matching "sequence" fields and must be in contiguous order

mode - [O] - Defines which monster mode animation to use for the sequence. Referenced from the Code column in MonMode.txt

frame - [N] - The in-game frame number for the animation. For the first line in the sequence, this value will establish where the starting frame for the animation. These values should be in contiguous order for the sequence

dir - [N] - Defines the numeric animation direction that the frame use. Most animations have between 8 to 64 maximum directions

event - [N] - Defines what type of event will be used when the frame triggers

CodeDescription
0No event, do nothing
1Do Melee attack
2Do Missile attack
3Play a sound
4Use a Skill

MonStats.txt

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


Data Fields

ID - [N] - Controls the unique name ID to define the monster

*hcIDx - [*] - This field is not read directly, but can be used as an index entry for the monsters.

BaseID - [O] - 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 - [O] - 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 - [N] - 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 - [O] Used to define the monster's name, such as in the Life bar UI when it is being targeted

MonStatsEx - [O] - Controls a pointer to the ID from MonStats2.txt

MonProp - [O] - Points to the ID field from MonProp.txt. Used to add special modifiers to the monster

MonType - [O] - Points to the type field from MonType.txt. Used to handle the monster's classification

AI - [O] - Points to a type of AI script to use for the monster (MonAI.txt)

DescStr - [O] Used to add a string to appear as an additional description below the Life bar UI when the monster is being targeted

Code - [O] - Controls the token used for choosing the proper cells to display the monster's graphics

enabled - [B] - 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 - [B] - 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 - [B] - 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 - [O] - 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 - [N] - Controls the X & Y offsets for where another monster is displaced when being spawned by this monster

spawnmode - [O] - Defines the animation mode that the spawned monsters will be initiated with. Referenced from the Token column in MonMode.txt

minion1 - [O] - 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 - [B] - 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 - [B] - 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 - [N] - The minimum number of minions that can spawn with this monster. Uses the minion1 fields. The actual number is a random value chosen between the "PartyMin" and "PartyMax" field values

PartyMax - [N] - The maximum number of minions that can spawn with this monster. Uses the minion1 fields. The actual number is a random value chosen between the "PartyMin" and "PartyMax" field values

MinGrp - [N] - 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 - [N] - 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 - [N] - 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 - [N] - Determines the movement velocity of the monster, which can be the monster's baseline walk speed

Run - [N] - Determines the run speed of the monster as opposed to walk speed. This is only used if the monster has a Run mode

Rarity - [N] - 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 - [N] - Determines the monster's level. This value for Nightmare and Hell difficulty can be overridden by the area level's MonLvl or MonLvlEx values from Levels.txt, unless the monster's boss and noRatio fields are enabled

MonSound - [O] - Points to the ID field of a monster sound from MonSounds.txt. This is used to control the monsters assigned sounds, when the monster is spawned as a Normal monster

UMonSound - [O] - Points to the ID field of a monster sound from MonSounds.txt. This is used to control the monsters assigned sounds, when the monster is spawned as a Unique or Champion monster

threat - [N] - 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 - [N] - 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 - [N] - 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 - [N] - Defines numeric parameters used to control various functions of the monster's AI. These fields depend on which AI script is being used (MonAI.txt, and the AI field in MonStats.txt)

MissA1 - [O] - 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 - [O] - 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 - [O] - Points to the Missile field from Missiles.txt to determine which missile to use when the monster is in Cast mode

MissSQ - [O] - Points to the Missile field from Missiles.txt to determine which missile to use when the monster is in Sequence mode

Align - [N] - 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 - [B] - 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 - [B] - 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 - [B] - 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 - [B] - 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 - [B] - 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 (MonEquip.txt). If equals 0, then ignore this

inTown - [B] - 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 - [B] - 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 - [B] - 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 - [B] - If equals 1, then the monster is classified as a Demon type. If equals 0, then ignore this

flying - [B] - 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 - [B] - 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 - [B] - 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 - [B] - 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 - [B] - 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 - [B] - 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 - [B] - 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 - [B] - If equals 1, then the monster is not allowed to spawn with the Multi-Shot unique monster modifier (MonUMod.txt). If equals 0, then ignore this

neverCount - [B] - 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 - [B] - If equals 1, then pet AI scripts will ignore this monster (MonAI.txt). If equals 0, then pet AI will attack this monster

deathDmg - [B] - 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 - [B] - 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 - [B] - 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 - [B] - 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 - [O] - Determines what type of items the monster is allowed to hold in its right arm (ItemTypes.txt). A blank value means it can hold any item

leftArmItemType - [O] - Determines what type of items the monster is allowed to hold in its left arm (ItemTypes.txt). A blank value means it can hold any item

canNotUseTwoHandedItems - [B] - If equals 1, then the monster can not items marked as two handed (Weapons.txt)

SendSkills - [N] - 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 - [O] - Points to the Skill field from Skills.txt file. This gives the monster the skill to use for Sk1Mode

Sk1mode - [O] - 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 from MonSeq.txt, which handles a specific set of frames to place a sequence animation. Referenced from the Code column in MonMode.txt

Sk1lvl - [N] - Controls the base skill level of the related skill on the monster

Drain - [N] - Controls the monster's overall Life and Mana steal percentage. This can also be affected by the LifeStealDivisor and ManaStealDivisor fields from DifficultyLevels.txt. If equals 0, then the monster will not have Life or Mana steal

coldeffect - [N] - 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 - [N] - Sets the monster's Physical Damage Resistance stat

ResMa - [N] - Sets the monster's Magic Resistance stat

ResFi - [N] - Sets the monster's Fire Resistance stat

ResLi - [N] - Sets the monster's Lightning Resistance stat

ResCo - [N] - Sets the monster's Cold Resistance stat

ResPo - [N] - Sets the monster's Poison Resistance stat

DamageRegen - [N] - Controls the monster's Life regeneration per frame. This is calculated based on the monster's maximum life: Regeneration Rate = (Life * "DamageRegen") / 16

SkillDamage - [N] - 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 - [B] - If equals 1, then use this file's fields to determine the monster's baseline stats (minHP, maxHP, AC, Exp, A1MinD, A1MaxD, A1TH, A2MinD, A2MinD, A2TH, S1MinD, S1MaxD, S1TH). If equals 0, then use MonLvl.txt to determine the monster's baseline stats

ShieldBlockOverride - [N] - 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 - [N] - The monster's percent chance to block an attack

Crit - [N] - The percent chance for the monster to score a critical hit when attacking an enemy, which causes the attack to deal double damage

minHP - [N] - The monster's minimum amount of Life when spawned

maxHP - [N] - The monster's maximum amount of Life when spawned

AC - [N] - The monster's Defense value

Exp - [N] - The amount of Experience that is rewarded to the player when the monster is killed

A1MinD - [N] - The minimum damage dealt by the monster when it is using the Attack 1 (A1) animation mode

A1MaxD - [N] - The maximum damage dealt by the monster when it is using the Attack 1 (A1) animation mode

A1TH - [N] - The monster's Attack Rating when it is using the Attack 1 (A1) animation mode

A2MinD - [N] - The minimum damage dealt by the monster when it is using the Attack 2 (A2) animation mode

A2MaxD - [N] - The maximum damage dealt by the monster when it is using the Attack 2 (A2) animation mode

A2TH - [N] - The monster's Attack Rating when it is using the Attack 2 (A2) animation mode

S1MinD - [N] - The minimum damage dealt by the monster when it is using the Skill 1 (S1) animation mode

S1MaxD - [N] - The maximum damage dealt by the monster when it is using the Skill 1 (S1) animation mode

S1TH - [N] - The monster's Attack Rating when it is using the Skill 1 (S1) animation mode

El1Mode - [O] - Determines which animation mode will trigger an additional elemental damage type when used. Referenced from the Code column in MonMode.txt

El1Type - [O] - Defines the type of elemental damage. This field is used when El#Mode is not null. Referenced by the Code value of the Elemental Types Table

El1Pct - [N] - 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 - [N] - The minimum element damage applied to the attack. This field is used when El#Mode is not null

El1MaxD - [N] - The maximum element damage applied to the attack. This field is used when El#Mode is not null

El1Dur - [N] - 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 - [O] - Defines which Treasure Class is used by the monster when a Normal monster type is killed; for each difficulty respectively

TreasureClassChamp - [O] - Defines which Treasure Class is used by the monster when a Champion monster type is killed; for each difficulty respectively

TreasureClassUnique - [O] - Defines which Treasure Class is used by the monster when a Unique monster type is killed; for each difficulty respectively

TreasureClassQuest - [O] - Defines which Treasure Class is used by the monster when a Quest-Enabled monster type is killed; for each difficulty respectively. Based on the TCQuestID and TCQuestCP fields

TCQuestID - [N] - Checks to see if the player has does not have a quest flag progress. If not, then use the TreasureClassQuest field, based on the game's current difficulty. Referenced by the Code value of the Quest Flags Table

TCQuestCP - [N] - Controls which Quest Checkpoint, or current progress within a quest (based on the TCQuestID value), is needed to use the TreasureClassQuest 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 - [N] - 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 - [B] - 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
243
333
705
"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)
544
570
709
"baalcrab"
"baalclone"
"uberbaal"
If the current mode equals Skill 3 (S3), then tell the monster to do its Cast mode (SC)
417
418
"shadowwarrior"
"shadowmaster"
If the current mode equals Skill 4 (S4), then tell the monster to do a generic attack function

SplEndGeneric - [B] - 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
230
231
"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 - [B] - 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)
403
404
"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)
118
231
"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)

MonStats2.txt

This file controls additional functionalities and statistics for every monster in the game.


Data Fields

ID - [O] - Controls the unique name ID to define the monster. This must match the same value in the monstats.txt file

Height - [N] - Determines the height of the monster. This has 2 purposes. The first purpose is to act as an index value for selecting which icebreak missile to use when the monster dies while frozen. The second purpose is to select a code which affects what attack animation the player characters will use when attacking the monster (Attack1 and or Attack2). See each code description types below.

CodeDescriptionCodeDescription
1icebreaksmall1Low Height
2icebreakmedium2High Height
3icebreaklarge3Both types of Heights
4icebreaksmoke

OverlayHeight - [N] - Determines the height value of overlays (Overlay.txt) for the monster

pixHeight - [N] - Determines the pixel height value for the damage bar when the monster is selected

SizeX & SizeY - [N] - Determines the tile grid size of the monster which is use for handling placement when the monster spawns or uses movement skills

spawnCol - [N] - Controls the method for spawning the monster based on the collisions in the environment

CodeDescription
0Normal - Basic Monster Pathing
1Water - Handle water terrain where units cannot normally walk, but can fly over
2Preset - Placement handler which considers walls, no pathable areas, objects, doors, items, and other monsters
3Force - Override any collision

MeleeRng - [N] - Controls the range of the monster's melee attack, which can affect also affect certain AI pathing. If this value equals 255, then refer to the monster's weapon class ("BaseW")

BaseW - [O] - Defines the monster's base weapon class, which can affect how the monster attacks. Referenced by the Code value of the Weapon Class Table

HitClass - [O] - Defines the specific class of an attack when the monster successfully hits with an attack. This can affect the sound and overlay display of the attack hit. Referenced from the Index value in HitClass.txt


The following are formula fields that define the types of visual graphics to use for the specific component field. Users can add input parameters by adding a comma "," to the input and using a code. For a list of possible component inputs, see the compcode.txt file

HDv - [O] - Head visual

TRv - [O] - Torso visual

LGv - [O] - Legs visual

RAv - [O] - Right Arm visual

LAv - [O] - Left Arm visual

RHv - [O] - Right Hand visual

LHv - [O] - Left Hand visual

SHv - [O] - Shield visual

S1v (to S8v) - [O] - Special 1 to Special 8 visual


The following fields are Boolean fields, which control which specific component piece is enabled for the monster. If equals 1, then the component is enabled. If equals 0, then the monster does not have that component.

(Referenced from the Token column in Composit.txt)

HD - [B] - Head

TR - [B] - Torso

LG - [B] - Legs

RA - [B] - Right Arm

LA - [B] - Left Arm

RH - [B] - Right Hand

LH - [B] - Left Hand

SH - [B] - Shield

S1 - [B] - Special 1 to Special 8


TotalPieces - [N] - Defines the total amount of component pieces that the monster uses. This value should match the number of enabled Boolean fields listed above

mDT - [B] - If equals 1, then enable the Death Mode for the monster. If equals 0, then this mode is disabled

mNU - [B] - If equals 1, then enable the Neutral Mode for the monster. If equals 0, then this mode is disabled

mWL - [B] - If equals 1, then enable the Walk Mode for the monster. If equals 0, then this mode is disabled

mGH - [B] - If equals 1, then enable the Get Hit Mode for the monster. If equals 0, then this mode is disabled

mA1 - [B] - If equals 1, then enable the Attack 1 (and Attack 2) Mode for the monster. If equals 0, then this mode is disabled

mBL - [B] - If equals 1, then enable the Block Mode for the monster. If equals 0, then this mode is disabled

mSC - [B] - If equals 1, then enable the Cast Mode for the monster. If equals 0, then this mode is disabled

mS1 - [B] - If equals 1, then enable the Skill 1 (to Skill4) Mode for the monster. If equals 0, then this mode is disabled

mDD - [B] - If equals 1, then enable the Dead Mode for the monster. If equals 0, then this mode is disabled

mKB - [B] - If equals 1, then enable the Knockback Mode for the monster. If equals 0, then this mode is disabled

mSQ - [B] - If equals 1, then enable the Sequence Mode for the monster. If equals 0, then this mode is disabled

mRN - [B] - If equals 1, then enable the Run Mode for the monster. If equals 0, then this mode is disabled

dDT - [N] - Defines the number of directions that the monster can face during Death Mode

dNU - [N] - Defines the number of directions that the monster can face during Neutral Mode

dWL - [N] - Defines the number of directions that the monster can face during Walk Mode

dGH - [N] - Defines the number of directions that the monster can face during Get Hit Mode

dA1 - [N] - Defines the number of directions that the monster can face during Attack 1 (and Attack 2) Mode

dBL - [N] - Defines the number of directions that the monster can face during Block Mode

dSC - [N] - Defines the number of directions that the monster can face during Cast Mode

dS1 - [N] - Defines the number of directions that the monster can face during Skill 1 (to Skill 4) Mode

dDD - [N] - Defines the number of directions that the monster can face during Dead Mode

dKB - [N] - Defines the number of directions that the monster can face during Knockback Mode

dSQ - [N] - Defines the number of directions that the monster can face during Sequence Mode

dRN - [N] - Defines the number of directions that the monster can face during Run Mode

A1mv - [B] - If equals 1, then enable the Attack 1 (and Attack 2) Mode while the monster is moving with the Walk mode or Run mode. If equals 0, then this mode is disabled while the monster is moving

SCmv - [B] - If equals 1, then enable the Cast Mode while the monster is moving with the Walk mode or Run mode. If equals 0, then this mode is disabled while the monster is moving

S1mv - [B] - If equals 1, then enable the Skill 1 (to Skill 4) Mode while the monster is moving with the Walk mode or Run mode. If equals 0, then this mode is disabled while the monster is moving

noGfxHitTest - [B] - If equals 1, then enable the mouse selection bounding box functionality around the monster. If equals 0, then the monster cannot be selected by the mouse

htTop - [N] - Define the pixel top offset around the monster for the mouse selection bounding box functionality. This field relies on the noGfxHitTest field being enabled

htLeft - [N] - Define the pixel left offset around the monster for the mouse selection bounding box functionality. This field relies on the noGfxHitTest field being enabled

htWidth - [N] - Define the pixel right offset around the monster for the mouse selection bounding box functionality. This field relies on the noGfxHitTest field being enabled

htHeight - [N] - Define the pixel bottom offset around the monster for the mouse selection bounding box functionality. This field relies on the noGfxHitTest field being enabled

restore - [N] - Determines if the monster should be placed on the inactive list, to be saved when the level unloads. If equals 0, then do not save the monster. If equals 1, then rely on other checks to determine to save the monster. If equals 2, then force save the monster

automapCel - [N] - Controls what index of the Automap tiles to use to display this monster on the Automap. This field relies on the noMap field being disabled

noMap - [B] - If equals 1, then the monster will not appear on the Automap. If equals 0, then the monster will normally appear on the Automap

noOvly - [B] - If equals 1, then no looping overlays will be drawn on the monster. If equals 0, then overlays will be drawn on the monster. (Overlay.txt)

isSel - [B] - If equals 1, then the monster is selectable and can be targeted. If equals 0, then the monster cannot be selected

alSel - [B] - If equals 1, then the player can always select the monster, regardless of being an ally or enemy. If equals 0, then ignore this

noSel - [B] - If equals 1, then the player can never select the monster. If equals 0, then ignore this

shiftSel - [B] - If equals 1, then the player can target this monster when holding the Shift key and clicking to use a skill. If equals 0, then the monster cannot be targeted while the player is holding the Shift key

corpseSel - [B] - If equals 1, then the monster's corpse can be with the mouse cursor. If equals 0, then the monster's corpse cannot be selected with the mouse cursor

isAtt - [B] - If equals 1, then the monster can be attacked. If equals 0, then the monster cannot be attacked

revive - [B] - If equals 1, then the monster is allowed to be revived by the Necromancer Revive skill. If equals 0, then the monster cannot be revived by the Necromancer Revive skill

limitCorpses - [B] - If equals 1, then the monster's corpse will be placed into a pool with all other corpses with this field checked. Once that pool reaches the max (50), the corpses at the beginning of the pool start getting removed

critter - [B] - If equals 1, then the monster will be flagged as a critter, which gives some special case handling such as not creating impact sounds and differently handling its spawn placement in presets. If equals 0, then ignore this

small - [B] - If equals 1, then the monster will be classified as a small type, which can affect what types of missiles can be used on the monster (Example: Barbarian Grim Ward size) or how the monster is knocked back. If equals 0, then ignore this. If this field is enabled, then the large field should be disabled, to avoid confusion

large - [B] - If equals 1, then the monster will be classified as a large type, which can affect what types of missiles can be used on the monster (Example: Barbarian Grim Ward size) or how the monster is knocked back. If equals 0, then ignore this. If this field is enabled, then the small field should be disabled, to avoid confusion

soft - [B] - If equals 1, then the monster's corpse is classified as soft bodied, meaning that its corpse can be used by certain corpse skills such as Barbarian Find Potion, Find Item, or Grim Ward. If equals 0, then the monster's corpse cannot be used for these skills

inert - [B] - If equals 1, then the monster will never attack its enemies. If equals 0, then ignore this

objCol - [B] - If equals 1 and the monster class is "barricadedoor", "barricadedoor2", or "evilhut", then the monster will place an invisible object with collision. If equals 0, then ignore this

deadCol - [B] - If equals 1, then the monster's corpse will have collision with other units. If equals 0, then the monster's corpse will not have collision

unflatDead - [B] - If equals 1, then ignore the corpse draw order for rendering the Sprite on top of others, while the monster is dead. If equals 0, then the monster's corpse will have a normal corpse draw order

Shadow - [B] - If equals 1, then the monster will project a shadow on the ground. If equals 0, then the monster will not project a shadow

noUniqueShift - [B] - If equals 1 and the monster is a Unique monster, then the monster will not have random color palette transform shifts. If equals 0, then the non-Unique monster will have random color palette transform shifts

compositeDeath - [B] - If equals 1, then the monster's Death Mode and Dead mode will make use of its component system. If equals 0, then the monster will default to using the Hand-To-Hand weapon class and no component system

localBlood - [N] - Controls the color of the monster's blood based on the region locale. If equals 0, then do not change the blood to green and keep it red. If equals 1, then change the monster's special components to use the green blood locale. If equals 2, then change the blood to green

Bleed - [N] - Controls if the monster will create blood missiles. If equals 0, then the monster will never bleed. If equals 1, then the monster will randomly create the "blood1" or "blood2" missiles when hit. If equals 2, then the monster will randomly create the "blood1", "blood2", "bigblood1", or "bigblood2" missiles when hit

Light - [N] - Controls the monster's minimum Light Radius size (measured in grid sub-tiles)

light-r - [N] - Controls the red color value of the monster's Light Radius (Uses a value from 0 to 255)

light-g - [N] - Controls the green color value of the monster's Light Radius (Uses a value from 0 to 255)

light-b - [N] - Controls the blue color value of the monster's Light Radius (Uses a value from 0 to 255)

Utrans & Utrans(N) & Utrans(H) - [N] - Modifies the color palette transform for the monster respectively in Normal, Nightmare, and Hell difficulty.

CodeDescription
0Cold
1Poison
2Level 0
3Level 1
4Level 2
5Level 3
6Level 4
7Miscellaneous
255Special case handler.

If hostile, then select the Cold transform.

If not hostile, then select the Poison transform.

InfernoLen - [N] - The frame length to hold the channel cast time of the inferno skill. This is used for when the monster has the "inferno" state, or for Diablo when he is using the "DiabLight" skill

InfernoAnim - [N] - The exact frame in the channel animation to loop back and start at again

InfernoRollback - [N] - The exact frame in the channel animation to determine when to roll back to the InfernoAnim frame

ResurrectMode - [O] - Controls which monster mode to set on the monster when it is resurrected. Referenced from the Code column in MonMode.txt

ResurrectSkill - [O] - Controls what skill should the monster use when it is resurrected (Skills.txt)

SpawnUniqueMod - [O] - Controls what unique modifier the monster should always spawn with (MonUMod.txt)

MonType.txt

This file handles the classification, naming conventions and element of monsters

This is used by the monstats.txt data file


Data Fields

type - [O] - Defines the unique monster type ID

equiv1 - [O] - Points to the index of another Monster Type to reference as a parent. This is used to create a hierarchy for Monster Types where the parents will have more universal settings shared across the related children

strplur - [O] - Uses a string for the plural form of the monster type. This is used by Function 22 of the descfunc field from ItemStatCost.txt, based on the monster type selected

element - [O] - Defines the monster's element type. This can be used for the Necromancer's Raise Skeletal Mage skill for determining what elemental type a Skeletal Mage should be based on the monster it was raised from (If the monster has no element, then the skeletal mage element will be randomly selected).

CodeDescription
(empty)Any Element
poisPoison
coldCold
fireFire
ltngLightning

MonUMod.txt

This file controls the different monster modifiers for special monsters, including Unique and Champion monsters

Any column field name starting with "*" is considered a comment field and is not used by the game

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


Data Fields

uniquemod - [O] - This is a reference field to define the monster modifier

id - [N] - Defines the unique numeric ID for the monster modifier. Used as a reference in other data files

enabled - [B] - If equals 1, then this monster modifier will be an available option for monsters to spawn with. If equals 0, then this monster modifier will never be used

version - [N] - Defines which game version to use this monster modifier (<100 = Classic mode | 100 = Expansion mode)

xfer - [B] - If equals 1, then this monster modifier can be transferred from the Boss monster to his Minion monsters, including auras. If equals 0, then the monster modifier will never be transferred

champion - [B] - If equals 1, then this monster modifier will only be used by Champion monsters. If equals 0, then the monster modifier can be used by any type of special monster

fPick - [N] - Controls if this monster modifier is allowed on the monster based on the function code and the parameters it checks.

CodeDescription
0 (or empty)Ignore this
1Monster class must have the Attack 1 mode (checks "mA1" field from monstats.txt)
2Monster class cannot be flagged as Melee (checks "IsMelee" field from monstats.txt)
Monster class cannot have the No Multishot flag (checks "nomultishot" field from monstats.txt)
3Monster class must have the Walk mode (checks "mWL" field from monstats.txt)

exclude1 - [N] - This controls which Monster Types should not have this monster modifier (Uses the type field from MonType.txt)

cpick & cpick (N) & cpick (H) - [N] - Modifies the chances that this monster modifier will be chosen for a Champion monster, compared to other monster modifiers. The higher the value is, then the more likely this modifier will be chosen. This value acts as a numerator and a denominator. All "cpick" values get summed together to give a total denominator, used for the random roll. For example, if there are 3 possible monster modifiers, and their "cpick" values are 3, 4, 6, then their chances to be chosen are 3/13, 4/13, and 6/13 respectively

upick & upick (N) & upick (H) - [N] - Modifies the chances that this monster modifier will be chosen for a Unique monster, compared to other monster modifiers. The higher the value is, then the more likely this modifier will be chosen. This value acts as a numerator and a denominator. All "upick" values get summed together to give a total denominator, used for the random roll. For example, if there are 3 possible monster modifiers, and their "upick" values are 3, 4, 6, then their chances to be chosen are 3/13, 4/13, and 6/13 respectively

constants - [N] - These values control a special list of numeric parameters for special monsters. The row that each constant appears in the data file is unrelated. You can treat this column almost like a separate data file that controls other aspects of special monsters. See the description next to each value for more specific clarification on each constant.

MonSounds.txt

This file controls the sounds that play for each of a monster's actions

This file points to a Sound entry from Sounds.txt for all it's entries

This file is used by the monstats.txt file


Data Fields

ID - [O] - Defines the unique name ID for the monster sound

Attack1 - [O] - Play this sound when the monster performs Attack 1 and Attack 2, respectively.

Weapon1 - [O] - Play this sound when the monster performs Attack 1 and Attack 2, respectively. This acts as an extra sound that can play with the Attack1 sounds.

Att1Del - [N] - Controls the amount of game frames to delay playing the Attack1 sounds, respectively

Wea1Del - [N] - Controls the amount of game frames to delay playing the Weapon1 sounds, respectively

Att1Prb - [N] - Controls the percent chance (out of 100) to play the Attack1 sounds, respectively

Wea1Vol - [N] - Controls the volume of the Weapon1 sounds, respectively. Uses a range between 0 to 255, where 255 is the maximum volume

HitSound - [O] - Play this sound when the monster gets hit or knocked back.

DeathSound - [O] - Play this sound when the monster dies.

HitDelay - [N] - Controls the amount of game frames to delay playing the HitSound

DeaDelay - [N] - Controls the amount of game frames to delay playing the DeathSound

Skill1 - [O] - Play this sound when the monster uses the skill linked in the related Skill1 field from MonStats.txt.

Footstep - [O] - Play this sound while the monster is walking or running.

FootstepLayer - [O] - Play this sound while the monster is walking or running. This acts as an extra sound that can play with the Footstep sound.

FsCnt - [N] - Controls the footstep count which is used to determine how often to play the Footstep and FootstepLayer sound. A higher value would mean that the sounds would play more often

FsOff - [N] - Controls the footstep offset which is used for calculating when to play the next Footstep and FootstepLayer sound, based on the current animation frame and the animation rate. A higher value would mean that the sounds would play less often

FsPrb - [N] - Controls the probability to play the Footstep and FootstepLayer sound, with a random chance out of 100

Neutral - [O] - Play this sound while the monster is in Neutral, Walk, or Run mode. Also play this sound when the monster ID equals "vulture1" while using Skill1 or the ID equals "batdemon1" while using Skill4.

NeuTime - [N] - Controls the amount of game frames to delay between re-playing the Neutral sound after it finishes

Init - [O] - Play this sound when the monster spawns and is not dead and is not playing its Neutral sound. Sound entry from Sounds.txt

Taunt - [O] - Play this sound when the server requests that the monster should play its Taunt. This is typically used for quest or story related moments. Sound entry from Sounds.txt

Flee - [O] - Play this sound when the monster is told to flee. This depends on when the monster AI is told to play this sound. Sound entry from Sounds.txt

CvtMo1 - [O] - This is used to convert the mode for playing the sound. This field defines the original mode that the monster is using. (MonMode.txt for the list of possible inputs)

CvtSk1 - [O] - Defines the skill that the monster is using. If the monster uses a specific skill, then the game can change the monster's mode for sound functionalities to another mode to change how sounds are generally handled. Points to a Skill in the Skills.txt file

CvtTgt1 - [O] - Defines the mode to convert the sound to when the monster is using the relative skill from the CvtSk1 field. This does not actually change the monster's mode; only what mode it sounds like. (MonMode.txt for the list of possible inputs)

NPC.txt

This file controls how each town NPC manipulates their store prices


Data Fields

NPC - [O] - Points to the matching "ID" value in the monstats.txt file. This should not be changed

buy mult - [N] - Used to calculate the item's price when it is bought by the NPC from the player. This number is a fraction of 1024 in the following formula: [cost] * [buy mult] / 1024

sell mult - [N] - Used to calculate the item's price when it is sold by the NPC to the player. This number is a fraction of 1024 in the following formula: [cost] * [sell mult] / 1024

rep mult - [N] - Used to calculate the cost to repair an item. This number is a fraction of 1024 in the following formula: [cost] * [rep mult] / 1024. This is then used to influence the repair cost based on the item durability and charges

questflag A - [N] - If the player has this quest flag progress, then apply the relative additional price calculations. Referenced by the Code value of the Quest Flags Table

questbuymult A - [N] - Same functionality as the buy mult field, except it applies after it and relies on the questflag A field

questsellmult A - [N] - Same functionality as the sell mult field, except it applies after it and relies on the questflag A field

questrepmult A - [N] - Same functionality as the rep mult field, except it applies after it and relies on the questflag A field

max buy & max buy (N) & max buy (H) - [N] - Sets the maximum price that the NPC will pay, when the player sells an item in Normal Difficulty, Nightmare Difficulty, and Hell Difficulty, respectively

Objects.txt

This file controls the functionalities of all objects found in area levels

The order of each object defined in this file will convey what ID value it has, and thus should not be changed

This file uses the following files: ObjMode.txt, objpreset, ObjType.txt, Shrines.txt

Objects are always set to be using a specific mode, which controls which fields to use for functionalities. There are 8 possible Object modes, each tied to an ID number. Specific fields are indexed to match each of these modes (ObjMode.txt)

NumberObjectModeToken
0NeutralNU
1OperatingOP
2OpenedON
3Special 1S1
4Special 2S2
5Special 3S3
6Special 4S4
7Special 5S5

Data Fields

Class - [O] - Defines the unique type class of the object which is used to reference this object. These are also defined in the objpreset.txt file

Name - [O] Used as the display name of the object when being highlighted by the player

*ID - [N] - This field is not read directly, but can be used as an Index for objects

Token - [O] - Determines what files to use to display the graphics of the object. These are defined by the ObjType.txt file

Selectable0 - [B] - If equals 1, then the object can be selected by the player and highlighted when hovered on by the mouse cursor. If equals 0, then the object cannot be selected and will not highlight when the player hovers the mouse over it

SizeX & SizeY - [N] - Controls the amount of sub tiles that the object occupies using X and Y coordinates. This is generally used for measuring the object's size when trying to spawn objects in rooms and controlling their distances apart

FrameCnt0 - [N] - Controls the frame length of the object's mode. If this equals 0, then that mode will be skipped

FrameDelta0 - [N] - Controls the animation frame rate of how many frames to update per delta (Measured in 256ths)

CycleAnim0 - [B] - If equals 1, then the object's current animation will loop back to play again when it finishes. If equals 0, then the object will generally play the Opened mode after playing the Operating mode

Lit0 - [N] - Controls the Light Radius distance value for the object. If this value equals 0, then the object will not emit a Light Radius

BlocksLight0 - [B] - If equals 1, then the object will draw a shadow. If equals 0, then the object will not draw a shadow

HasCollision0 - [B] - If equals 1, then the object will have collision. If equals 0, then the object will not have collision, and units can walk through it

IsAttackable0 - [B] - If equals 1, then the player can target this object to be attacked, and the player will use the Kick skill when operating the object. If the object has the Class equal to "CompellingOrb" or "SoulStoneForge", then instead of using the Kick skill, players will use the Attack skill when operating the object. If equals 0, then ignore this, and the player will not use a skill or animation when operating the object

Start0 - [N] - Controls the frame for where the object will start playing the next animation

EnvEffect - [B] - If equals 1, then enable the object to update its mode based on the game's time of day. This can mean that when the object is spawned, and it is current day time and the object is in Opened or Operating mode, then it will reset back to Neutral mode. Also, if the current time is dusk, night, or dawn and the object is in Neutral mode, then it will change to Operating mode. If equals 0, then the object will not update its mode based on the time of day

IsDoor - [B] - If equals 1, then the object will be treated as a door when the game handles its collision, animation properties, tooltips, and commands. If equals 0, then ignore this

BlocksVis - [B] - If equals 1, then the object will block the player's line of sight to see anything beyond the object. If equals 0, then ignore this. This field relies on the IsDoor field being enabled

Orientation - [N] - Determines the object's orientation type, which can affect mouse selection priority of the object when a unit is being rendered in front of or behind the object (such as a door object covering a unit and how the mouse selection should handle that). This also affects the randomization of the coordinates when spawning the object near the edge of a room.

CodeDescription
0 (or other #)Center
1Right
2Left

OrderFlag0 - [N] - Controls how the object's Sprite is drawn, which can affect how it is displayed in Perspective game camera mode.

CodeDescription
0Do nothing
1Flat floor
2Wall

PreOperate - [B] - If equals 1, then enable a random chance that the object will spawn in already in Opened mode. The game will choose a 1/14 chance that this can happen when the object is spawned. If equals 0, then ignore this

Mode0 - [B] - If equals 1, then confirm that this object has the correlating mode. If equals 0, then this object will not have the correlating mode. This flag can affect how the object functions work

Xoffset & Yoffset - [N] - Controls the offset values in the X and Y directions for the object's visual graphics. This is measured in game pixels

Draw - [B] - If equals 1, then draw the object's shadows. If equal's 0, then do not draw the object's shadows

Red - [N] - Controls the Red color gradient of the object's Light Radius. This field depends on the Lit0 field having a value greater than 0

Green - [N] - Controls the Green color gradient of the object's Light Radius. This field depends on the Lit0 field having a value greater than 0

Blue - [N] - Controls the Blue color gradient of the object's Light Radius. This field depends on the Lit0 field having a value greater than 0

HD - [B] - If equals 1, then the object will be flagged to have a Head composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

TR - [B] - If equals 1, then the object will be flagged to have a Torso composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

LG - [B] - If equals 1, then the object will be flagged to have a Legs composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

RA - [B] - If equals 1, then the object will be flagged to have a Right Arm composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

LA - [B] - If equals 1, then the object will be flagged to have a Left Arm composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

RH - [B] - If equals 1, then the object will be flagged to have a Right Hand composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

LH - [B] - If equals 1, then the object will be flagged to have a Left Hand composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

SH - [B] - If equals 1, then the object will be flagged to have a Shield composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

S1 - [B] - If equals 1, then the object will be flagged to have a Special # composite piece, and the game will use the component system to handle the object's mouse selection collision box. If equals 0, then ignore this

TotalPieces - [N] - Defines the total amount of composite pieces. If this value is greater than 1, then the game will treat the object with the multiple composite piece system, and the player can hover the mouse over and select the object's different components

SubClass - [N] - Determines the object's class type by declaring a specific value. This is used by the various functions (OperateFn, PopulateFn and InitFn) for knowing how to handle specific types of objects.

CodeDescription
0None
1Shrine
2Obelisk
4Portal (With a source & destination)
8Trappable
16Fixed Portal
32Well
64Waypoint
128Hidden

Xspace & Yspace - [N] - Controls the X and Y distance delta values between adjacent objects whe they are being populated together. This field is only used by the PopulateFn field. (Values 3 and 4 for the Add Barrels and Add Crates functions respectively)

NameOffset - [N] - Controls the vertical offset of the name tooltip's position above the object when the object is being selected. This is measured in pixels

MonsterOK - [B] - If equals 1, then if a monster operates the object, then the object will run its operate function. If equals 0, then then if a monster operates the object, then the object will not run its operate function

ShrineFunction - [N] - Controls what shrine function to use (Code field in Shrines.txt) when the object is told to do its Skill command

Restore - [B] - If equals 1, the game will restore the object in an inactive state when the area level repopulates after a player loads back into it. If equals 0, then the game will not restore the object

Parm0 - [N] - Used as possible parameters for various functions for the object

Lockable - [B] - If equals 1, then the object will have a random chance to spawn with the locked attribute and have a display tooltip name with the "lockedchest" [O] This only works when the object has the InitFn value equal to 3. If equals 0, then ignore this

Gore - [N] - Controls if an object should call its PopulateFn when it is chosen as an object that can spawn in a room. Objects with a gore value greater than 2 will not be populated in rooms

Sync - [B] - If equals 1, then the object's animation rate will always match the FrameDelta0 field (depending on the object's mode) which means the client and server will have synced animations. If equals 0, then the animation rate will have random visual variation

Damage - [N] - Controls the amount of damage dealt by the object when it performs an OperateFn that deals damage such as triggering a pulse trap or an explosion

Overlay - [B] - If equals 1, then add and remove an overlay on the object based on its current mode. If equals 0, then ignore this. This field will only work with specific object Classes and will use specific Overlays for those objects.

Object ClassOverlay
SpecialChest100
KhalimHeartChest
KhalimEyeChest
KhalimBrainChest
HoradricCubeChest
HoradricScrollChest
StaffOfKingsChest
ConsolationChest
multigleam
SevenTombsReceptaclehoradric_light
TaintedSunShrinehoradric_light

CollisionSubst - [B] - If equals 1, then the game will handle the bounding box around the object for mouse selection. The game will use the object's pixel size and Left, Top, Width and Height field values to determine the collision size. If equals 0, then ignore this

Left - [N] - Controls the starting X position offset value for drawing the bounding collision box around the object for mouse selection. Depends on the CollisionSubst field being enabled

Top - [N] - Controls the starting Y position offset value for drawing the bounding collision box around the object for mouse selection. Depends on the CollisionSubst field being enabled

Width - [N] - Controls the ending X position offset value for drawing the bounding collision box around the object for mouse selection. Depends on the CollisionSubst field being enabled

Height - [N] - Controls the ending Y position offset value for drawing the bounding collision box around the object for mouse selection. Depends on the CollisionSubst field being enabled

OperateFn - [N] - Defines a function that the game will use when the player clicks on the object

CodeDescription
0Do nothing
1Spawn Item And Maybe Monster - General function to operate an object, spawn items. Also can randomly spawn a monster and/or trigger a trap.
2Shrine - General function for Shrine objects. Uses fields from the Shrines.txt file for determining specific Shrine functions.
3Spawn Item Sometimes - General function to operate the object and spawn random items. Has a 20% chance to spawn a random item. Can also randomly trigger a trap.
4Chest Operate - General function for opening chest objects and spawning random items. Handles key interaction functionality if the chest object is locked
5Barrel Operate - General function for breaking barrel objects and randomly spawning items or possibly a monster
6Quest Tome Operate - Handles updating The Forgotten Tower quest progress
7Barrel Exploding Operate - Explode the object and also explode adjacent Exploding Barrel object Classes
8Door Operate - General function for opening and closing door objects
9Quest Cairn Stone Operate - Handle operating the 5 Cairn Stone objects based on the player's progress for the Search for Cain quest and if the player has the deciphered Scroll of Inifuss item. Also removes the Scroll of Inifuss item once successfully operated.
10Quest Gibbet Operate - Handle operating the object and updating the player's progress for the Search for Cain quest. This is used for the cage object that Deckard Cain is trapped in.
11Brazier Operate - Switch the object from Neutral mode to Operating/Opened mode, or vice versa
12Quest Inifuss Operate - Handle dropping the Bark Scroll item, based on the player's progress for the Search for Cain quest
13Tiki Operate - Switch the object from Neutral mode to Operating mode, or vice versa
14Spawn Item - General function to operate an object and have it spawn random items. Can also remove the object's collision and randomlytrigger a trap.
15Town Portal Operate - Controls the Town Portal functionalities, including how to teleport players back to town or to the current level, and handling how players interact with other player Town Portals
16Trap Door Operate - Open a door type object and then control its level warp capabilities
17Obelisk 1 - Use the transaction UI if the player has a gem in their inventory, and operate the object
18Secret Door Operate - Handle operating an object and removing its collision
19Armor Rack Operate - Activate the object to spawn a random armor item
20Weapon Rack Operate - Activate the object to spawn a random weapon item
21Quest Malus Operate - Handle dropping the Horadric Malus item, based on the player's progress for the Tools of the Trade quest
22Well Operate - Handle healing the player and keeping track of the charges and regeneration of charges for the well object
23Waypoint Operate - Handle activating a waypoint object and using the Waypoint UI when clicking on an activated waypoint object
24Quest Tainted Sun Altar Operate - Create the Amulet of the Viper item and other treasure items based on The Horadric Staff quest progress and the number of players in the game. Also update the progress for the Tainted Sun quest.
25Quest Seven Tombs Receptacle Operate - Handle using the Horadric Staff item with the transaction UI to operate the object
26Bookshelf Operate - Randomly create either tomes or scrolls of Identify or Town Portal
27Teleport Pad Operate - Teleport the player to another part of the room
28Quest Lam Esens Tome Operate - Handle dropping the Lam Esen's Tome item, based on the player's progress for the Lam Esen's Tome quest
29Breakable Operate - Animate the object and remove its collision
30Exploding - Create an explosion around the object
31Quest Gidbinn Operate - Handle dropping the Decoy Gidbinn item, based on the player's progress for the Blade of the Old Religion quest
32Player Bank Operate - Control accessing the Stash UI while in town for the Bank object Class
33Wirt Spurt - Create the Wirt's leg item and animate the object
34Arcane Portal - Control how the warp object transitions the player from the Palace Cellar Level 3 to the Arcane Sanctuary
35Return null
36Return null
37Return null
38Return null
39Quest Horadric Cube Chest Operate - Create the Horadric Cube item and other treasure items based on The Horadric Staff quest progress and the number of players in the game
40Quest Horadric Scroll Chest Operate - Create the Horadric Scroll item and other treasure items based on The Horadric Staff quest progress and the number of players in the game
41Quest Staff of Kings Chest Operate - Create the Staff of Kings item and other treasure items based on The Horadric Staff quest progress and the number of players in the game
42Quest Arcane Tome Operate - Handles updating The Arcane Sanctuary quest progress
43One Way Portal Operate - Controls the functionalities of the "DurielPortal" one way warp object
44Quest Beneath The City Stairs Operate - Handles warp object operates based on the Khalim's Flail quest progress
45Quest Beneath The City Lever Operate - Handles operating an object based on the Khalim's Flail quest progress
46Hell Gate Operate - Handles how to transition the player to Act 4 based on The Guardian quest progress
47Stairs Operate - Handles how the stairs object opens or warp the player to another level
48Jack In The Box Operate - Handles the operating the object and having it spawn items and set its mode to Special 2.
49Quest Soulstone Forge Operate - Handle operating the object based on The Hellforge quest progress and how it spawns items. Also remove the Hellforge Hammer weapon from the player.
50Quest Mephisto Door Operate - Handles how the stairs object opens or warp the player to another level
51Delay Spawn Operate - Waits until the object is done operating before updating events
52Quest Diablo Seal Operate - Handle operating a Diablo Seal object while also tracking the progress on the other related Diablo Seal objects (5 in total).
53Quest Compelling Orb Operate - Handle operating the object based on the Khalim's Flail quest progress and The Blackened Temple progress. Also remove the Khalim's Flail weapon from the player.
54Quest Diablo Seal 1 Operate - Handle operating a Diablo Seal object Class and getting a spawn point for monsters. Also calls function 52.
55Quest Diablo Seal 3 Operate - Handle operating a Diablo Seal object Class and getting a spawn point for monsters. Also calls function 52.
56Quest Diablo Seal 5 Operate - Handle operating a Diablo Seal object Class and getting a spawn point for monsters. Also calls function 52.
57Quest Khalim Heart Chest Operate - Create the Khalim's Heart item and other treasure items based on the Khalim's Flail quest progress and the number of players in the game
58Quest Khalim Eye Chest Operate - Create the Khalim's Eye item and other treasure items based on the Khalim's Flail quest progress and the number of players in the game
59Quest Khalim Brain Chest Operate - Create the Khalim's Brain item and other treasure items based on the Khalim's Flail quest progress and the number of players in the game
60Return null
61Town Gate - Handles how the gate object opens and closes
62Handles the modes of one of the Ancient's statues based on the player's progress of the Rite of Passage quest
63Same as function 62
64Same as function 62
65Quest Ancient Altar Operate - Handle displaying quest text and disabling the player's town portals, based on the player's progress of the Rite of Passage quest.
66Quest Ancient Gateway Operate - Handle opening the door object based on the player's progress of the Rite of Passage quest.
67Quest Frozen Anya Operate - Handles the object displaying quest text or validating that the player has the Malah's Potion item and updating the Prison of Ice quest
68Evil Urn - Handle triggering a trap from the object
69Quest Ancient Invisible Operate - Handle displaying the A5Q6InitAncients string conversation text based on the player's progress of the Rite of Passage quest.
70Quest Last Exit Operate - Handle transitioning the player to the from the Throne of Destruction level to the Worldstone Chamber level
71Quest Summit Door Operate - Handle opening the door object based on the player's progress of the Rite of Passage quest.
72Quest Player Last Portal Operate - Handle transitioning the player to completing the game after completing the Destruction's End quest
73Quest Tyrael Portal To Expansion Operate - Handle transitioning the player to Act 5 after completing the Act 4 Terror's End quest

PopulateFn - [N] - Defines a function that the game will use to spawn this object

CodeDescription
0Do not spawn the object
1Add Clumped Group - Handles creating multiple of these objects randomly in a room, based on the object's size and Class. This function only handles specific object classes such as caskets, urns, and baskets.
2Add Single Shrine - Handles the creation of a shrine object
3Add Simple Objects - Handles randomly spawning the object in a room, based on the object's size.
4Add Barrels - Handle creating multiple barrel or exploding barrel Class objects in a room.
5Add Crates - Handle creating multiple crate or urn Class objects in a room.
6Add Corpse - Use function 3 to handle spawning the object. Also call a random chance to spawn the "Flies" object class on top of the objects that spawn.
7Add Staked Corpses - Handles how to specifically spawn the "RogueCorpse1" and "RogueCorpse2" objects, based on their sizes and the locations in the room. Also call a random chance to spawn the "Flies" object class on top of the objects that spawn.
8Add Well - Handles the creation of one of these objects randomly in a room based on the object's size. A level can have a maximum of 4 these objects that spawn.
9Add One - Handles the creation of one of these objects randomly in a room based on the object's size.

InitFn - [N] - Defines a function to control how the object works while active and when initially activated by a player

CodeDescription
0Do nothing
1ObjectInitShrine - General function for determining which type of Shrine function to pick for the Shrine object. (Shrines.txt file for a list of shrine types)

This also uses the "Parm0" field to define the Shrine Type
• If equals 0, default to health shrine
• If equals 1, then use Health Shrine
• If equals 2, then use Mana Shrine
• If equals 3, then pick a random stats shrine with a 10% chance to spawn a surprise shrine
2ObjectInitTrappable - Handle a random chance to give the object 1 of the 9 random traps. This random chance depends on the area level's monster level.
3ObjectInitChest - Run function 1, and also determine if the object should be Locked or not. The random chance to make the objectLocked depends on the area level's monster level.
4QuestObjectTowerTomeInit - If The Forgotten Tower quest is active, then set the object to run in Special 0 Mode.
5Do nothing
6QuestObjectStoneInit - Sets the object's mode to be Opened or Neutral, depending on the progress with the Portal to Tristram for the Search for Cain quest.
7QuestObjectGibbetInit - Sets the object's mode, depending on the progress with Cain's Cage for the Search for Cain quest.
8ObjectInitDungeonTorch - Sets the object's mode to Opened
9Quest Object Inifuss Init - Sets the object's mode, depending on the progress with the Tree for the Search for Cain quest.
10ObjectInitBonfire - If the current level is Act 1 Rogue Encampment, then tell the object to do a periodic skill, otherwise set the object mode to Opened.
11ObjectInitTownPortal - Initializes the object's mode and adds the level ID as an attribute to keep track of.
12ObjectInitPermanentPortal - Handles specific level transitions for permanent portals found throughout the game
13QuestObjectStoneSoundInit - Attaches the object to the Search for Cain quest functions
14ObjectInitDungeonTorch2 - Sets the object's mode to Operating
15QuestObjectMalusInit - Attaches the object to the Tools of the Trade quest functions
16ObjectInitWell - Sets the object's attributes for a well including amount of charges
This also uses the "Parm2" field to define the amount of Life healed
17ObjectInitWaypoint - Handles setting up the waypoint mechanic to the object for the current area level
18QuestObjectJerhyn1Init - Handle where to place Jerhyn (near the palace entrance) based on Arcane Sanctuary quest progress
19QuestObjectJerhyn2Init - Handle where to place Jerhyn (inside the palace) based on The Seven Tombs quest progress
20QuestObjectTaintedSunAltarInit - Attaches the object to the Tainted Sun quest functions
21QuestObjectSevenTombsReceptacleInit - Setup the object to be a receptacle for the Horadric Staff, based on The Seven Tombs quest progress
22ObjectInitFire - Setup the object to act as fire
23QuestObjectLamEsensTomeInit - Attaches the object to the Lam Esen's Tome quest functions
24ObjectInitTrap1 - Handle setting up the object frame count and making sure it has full stats
25QuestObjectGidbinnInit - Attaches the object to the Blade of the Old Religion quest functions
26TestObjectInit - Sets the object's mode to Operating
27ObjectInitTrappablePoison - Sets up the random chance of 333/1000 for the object to have a trap that creates a poison nova
28ObjectInitGold - Create a random amount of gold piles (between 1 to 10) in random locations around the object
29QuestObjectInitArcanePortal - Setup the object to link area levels between the Palace Cellar Level 3 and the Arcane Sanctuary
30QuestObjectHaremBlockerInit - Setup the object's collision based on the Arcane Sanctuary quest progress
31QuestObjectHoradricCubeChestInit - Sets up information about the object
32QuestObjectHoradricScrollChestInit - Sets up information about the object
33QuestObjectStaffOfKingsChestInit - Sets up information about the object
34ObjectInitHellTorch - Randomly set the object's mode to Operating
35Return null
36Return null
37QuestObjectDurielPassagewayInit - Decide between setting the object's mode to Opened or Neutral, based on the progress of the The Seven Tombs quest
38QuestObjectTyraelDoorInit - Decide between setting the object's mode to Opened or Neutral, based on the progress of the The Seven Tombs quest
39QuestObjectGidbinnTownAltarInit - Decide between setting the object's mode to Opened or Neutral, based on the progress of the The Blade of the Old Religion quest
40Return null
41QuestObjectBeneathTheCityStairsInit - Decide between setting the object's mode to Opened or Neutral, based on the progress of the Khalim's Flail quest
42QuestObjectBeneathTheCityLeverInit - If the Khalim's Flail quest is complete, then set the object's mode to Opened
43QuestObjectDarkWandererInit - Create the "darkwanderer" monster and order to walk to the object's location. This depends on the players character save from having witnessed this event before.
44QuestObjectInitHellGate - Decide between setting the object's mode to Opened or Neutral, based on the progress of the The Guardian quest
45QuestObjectMephistoBridgeInit - Decide between setting the object's mode to Opened or Neutral, based on the progress of the The Guardian quest. If the object is not Opened, then also tell it to do its unique event.
46ObjectTrappedSoulInit - Determine where to spawn the "trappedsoul1" and "trappedsoul2" monster classes in the area level.
47QuestObjectForgottenTowerChestInit - Decide between setting up the chest object, relying on the Forgotten Tower quest being in progress
48QuestObjectSoulstoneForgeInit - Decide between setting the object's mode to Opened or Neutral, based on the progress of the Hell's Forge quest
49QuestObjectHratliStartInit - Handle placing Hratli near the starting point of Act 3, based on the player's Act 3 prologue progress
50QuestObjectHratliEndInit - Handle placing Hratli near his forge, if the player has progressed past the Act 3 prologue
51ObjectJackInTheBoxInit - If the object is in Opened or Opening mode, then tell the object to do a periodic item skill event
52QuestObjectNatalyaInit - Handle placing Natalya at her location based on the player's progress of The Guardian quest
53QuestObjectMephistoDoorInit - Handle setting the object to Opened mode based on the player's progress of destroying the orb for The Blackened Temple quest
54QuestObjectCainStartInit - Handle creating the Cain unit in the Rogue Encampment based on the player's progress of The Search for Cain quest
55QuestObjectDiabloStartInit - Handle the spawning event of Diablo based on the player's progress of activating the seal objects in the Chaos Sanctuary
56QuestObjectDiabloSealInit - Do nothing
57ObjectInitBetterChest - Initialize the chest object, and give it the special magical property
58ObjectInitFissure - Tell the object to do a periodic skill event at random times
59ObjectVileDoggieInit - If the object is in Neutral mode, then set the object to Operating mode and tell it to do a unique event
60QuestObjectCompellingOrbInit - Set the object to Opened based on the progress of The Blackened Temple quest
61QuestObjectCainPortalInit - Set the object to Operating mode and tell it to do a unique event
62QuestCagedWussie1Init - Spawn the "act5pow" units based on the player's progress of the Rescue on Mount Arreat quest
63QuestMoeInit - Setup the Korlic statue object with quest data based on the Right of Passage quest progress
64QuestLarryInit - Setup the Madawc statue object with quest data based on the Right of Passage quest progress
65QuestCurlyInit - Setup the Talic statue object with quest data based on the Right of Passage quest progress
66QuestAnyaInsideTownInit - Handle for creating the Anya NPC in town, based on the progress of the Prison of Ice quest
67QuestAnyaOutsideTownInit - Handle this object during the progress of the Prison of Ice quest and tell it to do its unique event
68QuestNihlathakInsideTownInit - Create the Nihlathak NPC in town, based on the progress of the Prison of Ice quest
69QuestNihlathakOutsideTownInit - Create the "Nihlathak Boss" super unique monster, based on the progress of the Prison of Ice quest
70QuestLarzukStartInit - Do nothing
71QuestLarzukEndInit - Object placeholder to create the "Larzuk" NPC in town
72QuestAncientTomeInit - Set the tome object mode to Opened or Neutral based on the progress of The Rite of Passage quest
73QuestAncientGatewayInit - Set the door object mode to Opened or Neutral based on the progress of The Rite of Passage quest
74QuestFrozenAnyaInit - Handle this object during the progress of the Prison of Ice quest and tell it to do its unique event
75QuestLastExitInit - Set the Throne of Destruction exit object mode to Operating or Opened based on the progress of the Eve of Destruction quest
76QuestSummitDoorInit - Set this door object mode to Operating or Opened based on the progress of the Rite of Passage quest
77QuestPlayerLastPortalInit - Set the last portal object mode to Operating or Opened based on the progress of the Eve of Destruction quest
78QuestTyraelPortalToExpansionInit - Set this object mode to Operating or Opened based on the progress of the Terror's End quest
79QuestZooInit - Attempt a random chance based on successfully selecting a "zoo" type monster from the entire list of possible monsters (monstats.txt). If selected, then send the quest update command to all players, based on the Eve of Destruction quest.

ClientFn - [N] - Defines a function that runs on the object from the game's client side.

CodeDescription
0Do nothing
1Ambient Sound - Always return true
2Ripple - Tells the object to randomly play between its Operating animation and loop back to its Neutral animation
3Hell Fire - Same as function 2, except sound will also be processed
4Drinker - Tells the object to randomly play between its Special 0 animation and loop back to its Neutral animation. Also processes sound.
5Gesturer - Tells the object to randomly play between its Special 0 / Special 1 animation and loop back to its Neutral animation. Also processes sound.
6Turner - Tells the object to randomly play between its Special 0 animation and loop back to its Neutral animation. Uses different tick counts than function 4. Also processes sound.
7Skeleton - Tells the object to randomly play between its Operating animation and loop back to its Neutral animation.
8Duriel Entrance - If the object is not in Neutral mode then preload the Duriel monster
9Client Smoke - Controls how the object can be removed from the client based on distance to a player and if the object has a specific tick count.
10Bubbles - Tells the object to randomly play between its Operating animation and loop back to its Neutral animation. Uses different tick counts than function 7.
11Floaters - Always return true
12Altar - If the object is not in Neutral mode then preload the Ancients statues
13Invisible Ancient - If the object is in its Neutral mode and the player operating the object has not completed the Rite of Passage quest, then handle the control of operating the object
14Bonfire - Updates the object's animation modes based on the time of day
15Frozen Anya - If the object is in Neutral mode then play the "NPCalert" overlay.
16Last Exit - If the object is in its Operating mode, then modify the animation frames
17Zoo - Handle the creation of monsters if monsters need to be created
18Keeper - Randomly play the "barbarian_grunt_small_1" sound

RestoreVirgins - [B] - If equals 1, then when the object has been used, the game will not restore the object in an inactive state when the area level repopulates after a player loads back into it. If equals 0, then ignore this

BlockMissile - [B] - If equals 1, then missiles can collide with this object. If equals 0, then missiles will ignore and fly through this object

DrawUnder - [N] - Controls the targeting priority of the object

CodeDescription
0The object will not change its targeting priority
1The object's target priority will equal a corpse only when the object is opened
2The object's target priority always equals a corpse

OpenWarp - [B] - If equals 1, then this object will be classified as an object that can be opened to warp to another area, and the UI will be notified to display a tooltip for opening or entering, based on the object's mode. If equals 0, then ignore this

AutoMap - [N] - Used to display a tile in the Automap to represent the object. Defines which cell number to use in the tile list for the Automap. If this value equals 0, then this object will not display on the Automap. (Automap.txt)

ObjGroup.txt

This file controls what group of possible Objects to spawn in a part of an area level.

This file uses the following files: objects.txt

The order of each Object Group defined in this file will convey what ID value it has, which is referenced by the Levels.txt file

The order of these Object Groups should not be changed


Data Fields

GroupName - [O] - This is a reference field to define the Object Group name

*ID - [N] - This field is not read directly, but can be used as an Index for groups

ID0 - [N] - Uses the ID field from Objects.txt as an index to choose which Objects are assigned to this Object Group

Density0 - [N] - Controls the number of Objects to spawn in the area level. This is also affected by the Object's populate function defined by the PopulateFn field from the objects.txt file. The maximum value allowed is 128

Prob0 - [N] - Controls the probability that the Object will spawn in the area level. This is calculated in order so the first probability that is successful will be chosen. This also means that these field values should add up to exactly 100 in total to guarantee that one of the objects spawn.

ObjPreset.txt

This file controls which Objects are preloaded in a preset, based on the Act number


Data Fields

Index - [N] - Assigns a unique numeric ID to the Object Preset so that it can be properly referenced

Act - [N] - Defines the Act number used for each Object Preset. Uses values between 1 to 5

ObjectClass -[O] - Uses the Class field from Objects.txt, which assigns an Object to this Object Preset

Overlay.txt

This file controls the overlay graphics related to States, auras, cast animations, curses, and buffs


Data Fields

overlay - [O] - Defines the name of the overlay, used in other data files

Filename - [O] - Defines which DCC file to use for the Overlay

version - [N] - Defines which game version to use this Overlay (0 = Classic mode | 100 = Expansion mode)"'>

Character - [O] - Used for name categorizing Overlays for unit translation mapping

PreDraw - [B] - If equals 1, then display the Overlay in front of Sprites. If equals 0, then display the Overlay behind Sprites

1ofN - [N] - Controls how to randomly display Overlays. This value will randomly add to the current index of the Overlay to possibly use another Overlay that is indexed after this current Overlay. The formula is as follows: Index = Index + RANDOM(0, ["1ofN"]-1)

Xoffset - [N] - Sets the horizontal offset of the overlay on the unit. Positive values move it toward the left and negative values move it towards the right

Yoffset - [N] - Sets the vertical offset of the overlay on the unit. Positive values move it down and negative values move it up

Height1 - [N] - These are additional values added to Yoffset. Only 1 of these Height1 fields are added, and which field gets added depends on the OverlayHeight value from MonStats2.txt (Example: If the "OverlayHeight" value is 4, then use the "Height4" field). Furthermore, If the "OverlayHeight" value is 0, then ignore these "Height" fields and add a default value of 75 to "Yoffset". Player unit types will always use "Height2"

AnimRate - [N] - Controls the animation frame rate of the Overlay. The value is the number of frames that will update per second

LoopWaitTime - [N] - Controls the number of periodic frames to wait until redrawing the Overlay. This only works with Overlays that are a loop type

Trans - [N] - Controls the alpha mode for how the Overlay is displayed, which can affect transparency and blending. Referenced by the Code value of the Transparency Table

InitRadius - [N] - Controls the starting Light Radius value for the Overlay (Max = 18)

Radius - [N] - Controls the maximum Light Radius value for the Overlay. This can only be greater than or equal to InitRadius. If greater than, the Light Radius will increase in size per frame, starting from InitRadius until it matches this "Radius" value (Max = 18)

Red - [N] - Controls the Red color gradient of the Light Radius

Green - [N] - Controls the Green color gradient of the Light Radius

Blue - [N] - Controls the Blue color gradient of the Light Radius

NumDirections - [N] - The number of directions in the cell file

LocalBlood - [N] - Controls how to display green blood or VFX on a unit.

CodeQuest Progress
0null
1Transform the default red blood splatter to green blood
2Change the monster palette to green

PetType.txt

This file controls the various statistics for each type of pet from all the classes summon Skills


Data Fields

PetType - [O] - Defines the name of the pet type, used in the PetType column in Skills.txt

group - [N] - Used as an ID field, where if pet types share the same group value, then only 1 pet of that group is allowed to be alive at any time. If equals 0 (or null), then ignore this

basemax - [N] - This sets a baseline maximum number of pets allowed to be alive when skill levels are reset or changed

warp - [B] - If equals 1, then the Pet will teleport to the player when the player teleports or warps to another area. If equals 0, then the pet will die instead

range - [B] - If equals 1, then the Pet will die if the player teleports or warps to another area and is located more than 40 grid tiles in distances from the Pet. If equals 0, then ignore this

partysend - [B] - If equals 1, then tell the Pet to do the Party Location Update command (find the location of its Player) when its health changes. If equals 0, then ignore this

unsummon - [B] - If equals 1, then the Pet can be unsummoned by the Unsummon skill function. If equals 0, then the Pet cannot be unsummoned

automap - [B] - If equals 1, then display the Pet on the Automap. If equals 0, then hide the pet on the Automap

name - [O] Used to define the Pet's name on its party frame

drawhp - [B] - If equals 1, then display the Pet's Life bar under the party frame. If equals 0, then hide the Pet's Life bar under the party icon

icontype - [N] - Controls the functionality for how to display the Pet Icon and number of Pets counter

CodeDescription
0Do not display the Pet icon
1Display the Pet icon and do not show the Pet counter
2Display the Pet icon and show the Pet counter

baseicon - [O] - Define which DC6 file to use for the default Pet's icon in its party frame

mclass1 - [O] - Defines the alternative pet to use for the PetType by using that specific unit's hcIDx from Monstats.txt

micon1 - [O] - Defines which DC6 file to use for the related "mclass" Pet's icon in its party frame

Properties.txt

This file defines how item modifiers work. It takes a stat defined from ItemStatCost.txt and uses a function to handle the stat's "min", "max" and "parameter" values.

Used by the following data files: UniqueItems.txt, SetItems.txt, QualityItems.txt, Sets.txt, Runes.txt


Data Fields

code - [O] - Defines the property ID. Used as a reference in other data files

func1 - [N] - Code function used to define the Property. Uses numeric ID values to define what function to use.

Function IDFunction NameParametersDescription
0

null
1ItemModsSetValueRegularstat
set
• Modify the stat to be randomly calculated between its "min" and "max" values
• Sets the stat value to its "max" value if the item is High Quality (Superior)
2ItemModsSetValueBaseToMaxstat
set
Modify the stat to always be set to its "max" value
3ItemModsSetValueRegular2stat
set
Same as function 1, but consecutive calls of this function will use the same stat value as the previous call
4ItemModsSetValueBaseToMax2stat
set
Same as function 2, but consecutive calls of this function will use the same stat value as the previous call
5ItemModsSetMinDamagesetSets the minimum damage value for an item
6ItemModsSetMaxDamagesetSets the maximum damage value for an item (dependent on its minimum value)
7ItemModsSetDamagePctsetSets the damage percent of the item based on its percentage damage "min" and "max" values
8ItemModsSetSpeedstat
set
Modify the stat to be randomly calculated between its "min" and "max" values
9ItemModsSetSingleSkillstat
set
• Used for modifying a single skill level
• Requires the stat's "min" and "max" values for the skill's level modification
• Requires the stat's "parameter" value for the skill ID
10ItemModsSetTabSkillsstat
set
• Used for modifying the levels of skills from askill tab
• The skill tab level modification is defined through the stat's value
• The skill tab ID is defined through the stat's "parameter" value. The stat's "parameter" value is defined as the class ID and the number of tabs that the class has:
• 0-2 = Amazon (Bow and Crossbow Skills / Javelin and Spear Skills / Passive and Magic Skills)
• 3-5 = Sorceress (Fire Spells / Lightning Spells / Cold Spells)
• 6-8 = Necromancer (Summoning Spells / Poison and Bone Spels / Curses)
• 9-11 = Paladin (Combat Skills / Defensive Auras / Offensive Auras)
• 12-14 = Barbarian (Warcries / Combat Masteries / Combat Skills)
• 15-17 = Druid (Shape Shifting / Elemental / Summoning)
• 18-20 = Assassin (Traps / Martial Arts / Shadow Disciplines)
11ItemModsSetSkillOnAttackstat
set
• Used for item event modifiers to cast a skill
• Requires the stat's param value as the skill ID
• Requires the stat's "min" value as the percentchance to cast the skill (if 0, then default to 5)
• Requires the stat's "max" value as the skill's level
12ItemModsSetRandomParamstat
set
• Uses the stat's "min" and "max" value as a random selection of the stat's "parameter" value
13ItemModsSetMaxDurabilitystat
set
• Modify the stat to be randomly calculated between its "min" and "max" values
• Sets the stat value to its "max" value if the item is High Quality (Superior)
• Always sets the current durability to its maximum durability after the calculation of the stat value
14ItemModsSetSockets
• Determines the number of sockets on an item
• If the stat has "min" and "max" values, then calculate a random number of sockets between these values. Otherwise, use the stat's "parameter" value as the number of sockets
• The max number of sockets depends on the stat's "max" size, the item's inventory grid size, or the hard cap of 6 sockets maximum
15ItemModsSetMinstat
set
• Always use the stat's "min" value
• If the stat is physical minimum damage, then set the item's minimum damage to the stat's value. Otherwise, simply set the stat's value to its "min" value.
16ItemModsSetMaxstat
set
• Always use the stat's "max" value
• If the stat is physical maximum damage, then set the item's maximum damage to the stat's value. Otherwise, simply set the stat's value to its "max" value.
17ItemModsSetParamstat
set
• Use the stat's "parameter" value. Otherwise, calculate a random value between the stat's "min" and "max" value. Otherwise,use 0.
• If the stat is physical maximum damage, then set the item's maximum damage to the stat's value
18ItemModsSetByTimestat• Modifies the stat based on the current game's time of day, and the stat's preferred time period. The closer the current game's time of day is to the stat's preferred time period, then the stronger the stat's value will be, based on its "min" and "max" values
• Requires the stat's "parameter" value as the time period. The allowed time periods are:
• 0 = Day
• 1 = Dusk
• 2 = Night
• 3 = Dawn
19ItemModsSetChargedSkillstat• Used for creating a stat for a charged skill.
• Requires the stat's "parameter" value as the skill ID
• Requires the stat's "min" value to calculate the value MaxCharges (maximum number of charges)
• If that value equals 0, then default to 5 max charges
• If that value is less than 0, then equal to the following calculation:
MaxCharges = |MaxCharges| + |MaxCharges| * [CURRENT ITEM LEVEL] / 8
• MaxCharges cannot exceed 255
• Requires the stat's "max" value as the skill's level
• The spawned number of charges is calculated as the following:
• Random(0 and (MaxCharges - MaxCharges / 8)) + MaxCharges / 8 + 1
20ItemModsSetIndestructible
Adds the Indestructible stat to an item
21ItemModsSetValueRegPropValParamstat
set
val
Modify the stat to be randomly calculated between its "min" and "max" values and use the Property "val" value to offset the stat ID
22ItemModsSetValueRegParamstat
set
Modify the stat to be randomly calculated between its "min" and "max" values and use the stat's "parameter" value to offset the stat ID
23ItemModsSetEthereal
Used to add the Ethereal stat to an item, only if the item has Durability
24ItemModsSetParamAndValuestat
set
• Modify the stat's value to be randomly calculated between its "min" and "max" values and use the stat's "parameter" value to offset the stat ID
• Consecutive calls of this function will use the same stat value as the previous call
25 to 35null
null
36ItemModsSetValueRegPropValParamSwappedstat
set
val
• Switches the usage of the Property "val" value with the stat's value
• The Property "val" value is used as the stat value
• The stat's value (based on its "min" and "max" values) is used at the Property "val" value

stat1 - [O] - Stat applied by the property. Used by the func1 field as a possible parameter using a Stat entry from ItemStatCost.txt. A stat is comprised of a "min" and "max" value which it uses to calculate the actual numeric value. Stats also can have a "parameter" value, depending on its function

set1 - [B] - Used by the func1 field as a possible parameter. If equals 1, then set the stat value regardless of its current value. If equals 0, then add to the stat value

val1 - [N] - sed by the func1 field as a possible input parameter for additional function calculations

QualityItems.txt

This file controls the groups item modifiers for High Quality (Superior) item types.

The game will randomly choose between one of these High Quality groups, if it is allowed for the item type.


Data Fields

mod1code - [O] - Controls the item properties for the item affix (Uses the Code field from Properties.txt)

mod1param - [N] - The "parameter" value associated with the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

mod1min - [N] - The "min" value to assign to the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

mod1max - [N] - The "max" value to assign to the listed property (mod). Usage depends on the (Function ID field from Properties.txt)

armor - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on both torso armor and helmet item types. If equals 0, then ignore this

weapon - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on melee weapon item types (except scepters, wands, and staves). If equals 0, then ignore this

shield - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on shield item types. If equals 0, then ignore this

scepter - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on scepter item types. If equals 0, then ignore this

wand - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on wand item types. If equals 0, then ignore this

staff - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on staff item types. If equals 0, then ignore this

bow - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on bow or crossbow item types. If equals 0, then ignore this

boots - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on boots item types. If equals 0, then ignore this

gloves - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on gloves item types. If equals 0, then ignore this

belt - [B] - If equals 1, then allow this High Quality (Superior) modifier to be applied on belt item types. If equals 0, then ignore this.

RarePrefix.txt

This file controls the list of strings that are randomly selected to be used as the prefix part of the name when generating Rare items

Rare Prefixes are chosen at random from the list define in the data file

These item affixes will appear at the start of a Rare item's name


Data Fields

name - [O] - Uses a string key to define the Rare Prefix name

version - [N] - Defines which game version to use this Set bonus (0 = Classic mode | 100 = Expansion mode)

itype1 - [O] - Controls what item types are allowed for this Rare Prefix to spawn on (Uses the Code field from ItemTypes.txt)

etype1 - [O] - Controls what item types are excluded for this Rare Prefix to spawn on (Uses the Code field from ItemTypes.txt)

RareSuffix.txt

This file controls the list of strings that are randomly selected to be used as the suffix part of the name when generating Rare items

Rare Suffixes are chosen at random from the list define in the data file

These item affixes will appear at the end of a Rare item's name


Data Fields

name - [O] - Uses a string key to define the Rare Suffix name

version - [N] - Defines which game version to use this Set bonus (0 = Classic mode | 100 = Expansion mode)

itype1 - [O] - Controls what item types are allowed for this Rare Prefix to spawn on (Uses the Code field from ItemTypes.txt)

etype1 - [O] - Controls what item types are excluded for this Rare Prefix to spawn on (Uses the Code field from ItemTypes.txt)

Runes.txt

This file controls the creation of Rune Words and their various modifiers.


Data Fields

Name - [O] - Controls the string key that is used to the display the name of the item when the Rune Word is complete

complete - [B] - If equals 1, then the Rune Word can be crafted in-game. If equals 0, then the Rune Word cannot be crafted in-game

server - [B] - If equals 1, then the Rune Word can only be crafted on Ladder realm games. If equals 0, then the Rune Word can be crafted in all game types

itype1 - [O] - Controls what item types are allowed for this Rune Word (Uses the Code field from ItemTypes.txt)

etype1 - [O] - Controls what item types are excluded for this Rune Word (Uses the Code field from ItemTypes.txt)

Rune1 - [O] - Controls what runes are required to make the Rune Word. The order of each of these fields matters. (Uses the Code field from Misc.txt)

T1Code1 - [O] - Controls the item properties that the Rune Word provides (Uses the Code field from Properties.txt)

T1Param1 - [N] - The stat's "parameter" value associated with the related property (T1Code1). Usage depends on the (Function ID field from Properties.txt)

T1Min1 - [N] - The stat's "min" value to assign to the related property (T1Code1). Usage depends on the (Function ID field from Properties.txt)

T1Max1 - [N] - The stat's "max" value to assign to the related property (T1Code1). Usage depends on the (Function ID field from Properties.txt)

SetItems.txt

Thisfile controls the item modifiers for each Set item in a Set


Data Fields

index - [O] - Links to a string key for displaying the Set item name

set - [O] - Defines the Set to link to this Set Item (must match the Index field from Sets.txt)

item - [O] - Defines the baseline item code to use for this Set item (must match the code value from AMW.txt)

rarity - [N] - Modifies the chances that this Unique item will spawn compared to the other Set items. This value acts as a numerator and a denominator. Each "rarity" value gets summed together to give a total denominator, used for the random roll for the item. For example, if there are 3 possible Set items, and their "rarity" values are 3, 5, 7, then their chances to be chosen are 3/15, 5/15, and 7/15 respectively. (The minimum "rarity" value equals 1)

lvl - [N] - The item level for the item, which controls what object or monster needs to be in order to drop this item

lvl req - [N] - The minimum character level required to equip the item

chrtransform - [O] - Controls the color change of the item when equipped on a character or dropped on the ground. If empty, then the item will have the default item color. Referenced from the Code column in Colors.txt

invtransform - [O] - Controls the color change of the item in the inventory UI. If empty, then the item will have the default item color. Referenced from the Code column in Colors.txt

invfile - [O] - An override for the invfile field from AMW.txt. Uses the item field by default

flippyfile - [O] - An override for the flippyfile field from AMW.txt. Uses the item field by default

dropsound - [O] - An override for the dropsound field from AMW.txt. Uses the item field by default

dropsfxframe - [N] - An override for the dropsfxframe field from AMW.txt. Uses the item field by default

usesound - [O] - An override for the usesound field from the AMW.txt. Uses the item field by default

cost mult - [N] - Multiplicative modifier for the Set item's buy, sell, and repair costs

cost add - [N] - Flat integer modification to the Set item's buy, sell, and repair costs. This is added after the "cost mult" has modified the costs

add func - [N] - Controls how the additional Set item properties (aprop#a & aprob#b) will function on the Set item based on other related set items are equipped

CodeDescription
0 (or empty)Additional Set item properties will function like normal item properties, ignoring the Set
1Additional Set item properties will be added depending on which specific Set item is equipped. Each Set item has their own index depending on their order in data and the "set" they belong to. For example, if a Set item is defined first in the list, that that it has the index equal to 1, which means this function will make "aprop1a" and "aprop1b" fields only be added to a Set Item when that specific Set item of index 1 is equipped.
2Additional Set item properties will be added depending the number of related Set items equipped. For example, if 2 Set items are equipped, then the "aprop1a", "aprop1b", "aprop2a", and "aprop2b" fields will be added to the Set item.

prop1 - [O] - Controls the item properties that are add baseline to the Set Item (Uses the Code field from Properties.txt)

par1 - [N] - The stat's "parameter" value associated with the related property (prop1). Usage depends on the (Function ID field from Properties.txt)

min1 - [N] - The stat's "min" value to assign to the related property (prop1). Usage depends on the (Function ID field from Properties.txt)

max1 - [N] - The stat's "max" value to assign to the related property (prop1). Usage depends on the (Function ID field from Properties.txt)

aprop1a - [O] - Controls the item properties that are added to the Set Item when other pieces of the Set are also equipped (Uses the Code field from Properties.txt)

apar1a - [N] - The stat's "parameter" value associated with the related property (aprop1a). Usage depends on the (Function ID field from Properties.txt)

amin1a - [N] - The stat's "min" value to assign to the related property (aprop1a). Usage depends on the (Function ID field from Properties.txt)

amax1a - [N] - The stat's "max" value to assign to the related property (aprop1a). Usage depends on the (Function ID field from Properties.txt)

aprop1b - [O] - Controls the item properties that are added to the Set Item when other pieces of the Set are also equipped. Each of these numbered fields are paired with the related "aprop#a" field as an additional item property. (Uses the Code field from Properties.txt)

apar1b - [N] - The stat's "parameter" value associated with the related property (aprop1b). Usage depends on the (Function ID field from Properties.txt)

amin1b - [N] - The stat's "min" value to assign to the related property (aprop1b). Usage depends on the (Function ID field from Properties.txt)

amax1b - [N] - The stat's "max" value to assign to the related property (aprop1b). Usage depends on the (Function ID field from Properties.txt)

diablocloneweight - [N] - The amount of weight added to the diablo clone progress when this item is sold. When offline, selling this item will instead immediately spawn diablo clone.

Sets.txt

This file controls the item modifiers for Set bonus statistics when the player has equipped enough Set Items


Data Fields

index - [O] - Defines the specific Set ID

name - [O] - Uses a string for displaying the Set name in the inventory tooltip

version - [N] - Defines which game version to use this Set bonus (0 = Classic mode | 100 = Expansion mode)

PCode2a - [O] - Controls the each of the different pairs of Partial Set item properties. These are applied when the player has equipped the related # of Set items. This is the first part of the pair for each Partial Set bonus. (Uses the Code field from Properties.txt)

PParam2a - [N] - The stat's "parameter" value associated with the relative property (PCode#a). Usage depends on the (Function ID field from Properties.txt)

PMin2a - [N] - The stat's "min" value associated with the listed relative (PCode#a). Usage depends on the (Function ID field from Properties.txt)

PMax2a - [N] - The stat's "max" value to assign to the listed relative (PCode#a). Usage depends on the (Function ID field from Properties.txt)

PCode2b - [O] - Controls the each of the different pairs of Partial Set item properties. These are applied when the player has equipped the related # of Set items. This is the second part of the pair for each Partial Set bonus. (Uses the Code field from Properties.txt)

PParam2b - [N] - The stat's "parameter" value associated with the relative property (PCode#b). Usage depends on the (Function ID field from Properties.txt)

PMin2b - [N] - The stat's "min" value associated with the listed relative (PCode#b). Usage depends on the (Function ID field from Properties.txt)

PMax2b - [N] - The stat's "max" value to assign to the listed relative (PCode#b). Usage depends on the (Function ID field from Properties.txt)

FCode1 - [O] - Controls the each of the different Full Set item properties. These are applied when the player has all Set item pieces equipped (Uses the Code field from Properties.txt)

FParam1 - [N] - The stat's "parameter" value associated with the relative property (FCode#b). Usage depends on the (Function ID field from Properties.txt)

FMin1 - [N] - The stat's "min" value associated with the listed relative (FCode#b). Usage depends on the (Function ID field from Properties.txt)

FMax1 - [N] - The stat's "max" value to assign to the listed relative (FCode#b). Usage depends on the (Function ID field from Properties.txt)

Shrines.txt

This file controls the functionalities of shrine objects found in area levels


Data Fields

Name - [O] - This is a reference field to define the Shrine index

Code - [N] - Code function used to define the Shrine's function. Uses ID values listed below to define what function to use.

CodeParameterDescription
0
None
1
Gain full Life and Mana
2
Gain full Life
3
Gain full Mana
4Arg0 = Life percent consumed
Arg1 = Mana percent added
Exchange your current Life to restore Mana
5Arg0 = Mana percent consumed
Arg1 = Life percent added
Exchange your current Mana to restore Life
6Arg0 = Defense percentIncreases Defense
7Arg0 = Attack Rating percent
Arg1 = Physical Damage percent
Increases Physical Damage and Attack Rating
8Arg0 = Resist Fire percent
Increases Fire Resistance
9Arg0 = Resist Cold percent
Increases Cold Resistance
10Arg0 = Resist Lightning percent
Increases Lightning Resistance
11Arg0 = Resist Poison percent
Increases Poison Resistance
12Arg0 = Bonus Skill Levels
Increases all Skill levels
13Arg0 = Mana Recharge percent
Increases Mana Recharge Rate
14Arg0 = Stamina percentGain infinite Stamina
15Arg0 = Bonus Experience percentTemporarily gain bonus Experience from kills
16
Temporarily reverse your character's Name (Not Used)
17
Create a neutral Town Portal back to the current Act Town
18
Randomly select a gem in your inventory and upgrade its level (Otherwise, create a random chipped gem)
19Arg0 = Life percent damage
Arg1 = Range to find units
Release a nova of fireballs that cause any player or monster to lose a percentage of Life
20
Causes the nearest monster to upgrade a Unique or Champion type
21Arg0 = Minimum potions
Arg1 = Maximum potions
Deal Fire damage to nearby monsters and create a random number of Exploding Potions
22Arg0 = Minimum potions
Arg1 = Maximum potions
Create Poison Gas that damages nearby monsters and create a random number of Choking Gas Potions

Arg0 - [N] - Integer value used as a possible parameter for the Code function

Duration in frames - [N] - Duration of the effects of the Shrine (Calculated in Frames, where 25 Frames = 1 Second)

reset time in minutes - [N] - Controls the amount of time before the Shrine is available to use again. Each value of 1 equals 1200 Frames or 48 seconds. A value of 0 means that the Shrine is a one-time use

StringName - [O] - Uses a string to display as the Shrine's name

StringPhrase - [O] - Uses a string to display as the Shrine's activation phrase when it is used

effectclass - [N] - Used to define the Shrine's archetype which is involved with calculating region stats

LevelMin - [N] - Define the earliest area level where the Shrine can spawn. Area levels are determined from Levels.txt

Skills.txt

This file controls all skill functionalities. Skills are abilities used by all units in the game.

This file uses many other data files, and other data files will reference fields in this file to verify certain functionalities.


Data Fields

skill - [O] - Defines the unique name ID for the skill, which is how other files can reference the skill. The order of the defined skills will determine their ID numbers, so they should not be reordered

*ID - [N] - This field is not read directly, but can be used as an Index for skills

charclass - [O] - Assigns the skill to a specific character class which affects how skill item modifiers work and what skills the class can learn. Referenced from the Code column in PlayerClass.txt

SkillDesc - [O] - Controls the skill's tooltip and general UI display. Points to the SkillDesc field from SkillDesc.txt

srvstfunc - [N] - Server Start function. This controls how the skill works when it is starting to cast, on the server side. This uses a code value to call a function, affecting how certain fields are used.

CodeParametersDescription
0
Do nothing
1
StartAttack - Check that the attack is melee or ranged. If the attack is ranged, then verify the ammunition.
2
StartKick - Calculate the damage and attack the target unit with a Hand-To-Hand hit class.
3
StartUnsummon - Validate that the target unit is not a monster or player and that the unit is owned by the caster unit. Check that the pet can be unsummoned ("unsummon" in PetType.txt)
4
AmaStartCheckQuantity - Verify that the caster unit has enough weapon ammunition
5AmaStartJab - Return true.
6calc1
calc4
AmaStartPowerStrike - Validate the target enemy and attempt to attack it. Use "calc1" to control the percentage increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
7calc1
calc2
calc3
calc4
AmaStartImpale - Validate the target enemy and attempt to attack it. Use "calc1" to control the percentage increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used. Use "calc2" to control the percent chance of losing weapon durability. Use "calc3" to control the flat amount of durability lost.
8aurarangecalc
calc1
calc3
AmaStartStrafe - Attempt to find nearby valid targets and shoot them. Use "aurarangecalc" to control the range to find targets. Use "calc1" and "calc3" to control the minimum and maximum amount of shots fired.
9calc1AmaStartFend - Find a valid target to attack in melee and then perform multiple attacks to nearby enemies. Use "calc1" to control the max targets to attack.
10calc1
calc4
AmaStartLightningStrike - Validate the target enemy and attempt to attack it to deal a random amount of lightning damage. Use "calc1" to control the percentage increase for damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
11srvmissilea
calc2
SorStartInferno - Continuously create missiles while the caster has the "inferno" state, and adjust the animations and modes based on the inferno frames. Use "calc2" to control the monster channel duration.
12aurarangecalcSorStartTelekinesis - Validate the range distance and the target type
13
SorStartThunderStorm - Validate the skill use and setup targeting parameters
14
SorStartHydra - Validate the target location
15
NecStartRaiseSkeleton - Check for a valid target corpse that can be raised
16calc1
calc4
NecStartPoisonDagger - Validate the target enemy and attempt to attack it. Use "calc1" to control the percentage increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
17
NecStartCorpseExplosion - Check for a valid target corpse that can explode
18
NecStartAttract - Return true
19
NecStartBonePrison - Validate that the target is an enemy and make sure that the target is not located in town
20
NecStartIronGolem - Validate that the target is an identified item located on the ground
21
NecStartRevive - Check for a valid target corpse that canbe revived
22
AssStartPsychicHammer - Check for a valid target player or monster
23
AssStartProgressiveAttack - Reset internal variable used for keeping track of skill steps.
24calc1AssStartDragonTalon - Use "calc1" to control the number of attacks.
25
AssStartDragonClaw - Reset internal variable used for keeping track of skill steps.
26aurastate aurastat1
srvmissilea srvmissileb
srvmissilec
prgcalc1
prgcalc2
prgcalc3
AssStartBladeFury - Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. If the caster unit does not have the "inferno" state, then add it and handle the animation frames. If the caster unit does have the "inferno" state, then periodically create missiles.
27Param4
Param8
AssStartDragonTail - Validate the target to attack and calculate the kick damage. Use "Param4" to control the attack speed. Use "Param8" to control if the attack should always hit.
28aurastate aurastat1
srvmissilea srvmissileb
srvmissilec
auralencalc
AssStartBladeShield - Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Add the "aurastate" state that lasts a duration controlled by "auralencalc".
29calc1
calc4
PalStartSacrifice - Validate the target enemy unit and determine if the caster unit can melee attack it. Use "calc1" to control the percentage increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
30
Do nothing
31calc2PalStartCharge - Validate the target enemy unit and determine if the caster unit can melee attack it. Adjust the caster unit's movement speed. Do special adjustments for the "duriel" and "clawviper1" monster attack modes. Use "calc2" to add bonus movement speed percentage while charging.
32aurastate
calc1
calc2
calc3
calc4
BarStartBash - Validate the target enemy and attack it. Use "calc1" to control the physical damage percent increase. Use "calc2" to control the flat damage increase. Use "calc3" to control the attack speed bonus. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used. Applies "aurastate" to self.
33
BarStartFindHeart - Check for a valid target corpse that can spawn potions. This relies on the "soft" and "noSel" flags from the MonStats2.txt file.
34
BarStartFindItem - Check for a valid target corpse that can spawn items. This relies on the "soft" and "noSel" flags from the MonStats2.txt file.
35calc1
calc2
calc3
PalStartVengeance - Validate the target enemy and attack it. Use the calculation fields to control fire, cold, and lightning damage percentages added to the attack.
36
PalStartHolyShield - Check that the player has a shield equipped
37calc1AmaStartFend2 - Find nearby enemy targets to melee attack. Use "calc1" to control the maximum number of targets to attack.
38aurastate
auralencalc
auraevent1
auraeventfunc1
auraevent2
auraeventfunc2
auraevent3
auraeventfunc3
BarStartWhirlwind - Stop any skills and validate the target location. Modify the caster unit's collision to only collide with walls and objects and save the target location. Apply the "aurastate" state with the length controlled. Applies "auraevents" if they exist.
39aurastate
calc1
calc2
calc4
BarStartBerserk - Validate the target enemy unit and determine if the caster unit can melee attack it. Use "calc1" to control the percentage increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used. Use "calc2" to control the duration for how long the caster unit has the state.
40aurarangecalcBarStartLeap - Adjust the caster unit collision, validate the target location, and store the location in a parameter. If the caster unit is in a monster, then handle how the monster can attack the target while leaping.
41
BarStartLeapAttack - Adjust the caster unit collision, validate the target location, and store the location in a parameter. Make the caster unit uninterruptable after landing in order to melee attack a nearby target.
42
MonStartFirehit - If the caster unit is a player, then use the BarStartBash function (Code 32). Otherwise make the caster attack the target while in "Skill 1" mode and deal damage
43
MonStartMagottEgg - Make the unit unattackable, unselectable, and unable to be hit by missiles
44
MonStartMaggotUp - Set the unit to have ground collision and adjust the collision and pathing. Teleport the unit to a viable location in the area.
45
MonStartMaggotDown - Make the unit unattackable, unselectable, and unable to be hit by missiles. Adjust the unit's collisionto not have pathing.
46
MonStartAndariel - Validate the target unit and store the target's location in a parameter
47calc1MonStartJump - Validate the target location. Return false if the caster unit has the "freeze" state. Use the "calc1" field to control the damage percent bonus. Make the caster unit attack the target, if possible.
48
MonStartSwarmMove - Find and validate a path to the target.
49
MonStartNest - Validate the caster unit's location and modify its collision
50
MonStartQuickStrike - Validate the target unit and attack it
51
MonStartSubmerge - Make the unit unattackable, unselectable, and unable to be hit by missiles
52
MonStartEmerge - Make the unit unattackable, unselectable, and unable to be hit by missiles
53calc2MonStartDiabLight - Add the "inferno" state to the caster unit. Use "calc2" to control the number of frames to add to the animation while channeling and save it in a parameter.
54
MonStartDiabRun - Validate the target unit and save its location in parameters
55calc1
calc2
MonStartMosquito - Validate the target unit and use the calculation fields to control the minimum and maximum number of animation loops for the skill.
56calc1
calc4
DruStartChargeUpAttack - Validate the target enemy and attempt to attack it. Use "calc1" to control the percentage increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
57aurastateDruStartRabies - Validate the "aurastate" state. Reset internal variables used to keep track of hits.
58calc1DruStartFireClaws - Validate the target enemy and attempt to attack it. Use "calc1" to control the percentage increase for physical damage dealt.
59calc1MonStartImpInferno - Add the "inferno" state to the caster unit. Use "calc1" to control the number of frames to add to the animation while channeling and save it in a parameter.
60calc1
calc2
calc3
MonStartBatSuckBlood - Validate the target enemy and attempt to attack it. Use "calc1" to control the damage penalty percentage. Use "calc2" to control the life steal percent. Use "calc3" to control the mana steal percent.
61
MonStartSelfResurrect - Validate that the caster unit is a monster, then resurrect the monster, making it have proper pathing, be attackable, selectable, and able to be hit by missiles.
62
MonStartSpawner - Save the monster's position, class, and mode as parameters
63srvmissileaMonStartCorpseCycler - Validate that the caster unit is a monster. Check for the "noSel" state on the target (MonStats2.txt) or add it on the target. Create the missile at the target location and corpse explode the corpse on the client.
64
MonStartFrenzy - Validate that the target is an enemy. Reset internal variables used to keep track of frames and attacks.
65
StartThrow - Validate that the caster unit has enough ammunition and durability
66auraevent1
auraeventfunc1
auraevent2
auraeventfunc2
auraevent3
auraeventfunc3
ApplyPassiveAuraEvents - Check each of the aura events on the skill and apply the event handler to use the aura event functions
67BarStartFrenzy - Resets internal variables used to keep track of frames and attacks.
68calc2BarStartDoubleSwing - Uses "calc2" to apply an attack rate bonus.

srvdofunc - [N] - Server Do function. This controls how the skill works when it finishes being cast, on the server side. This uses a code value to call a function, affecting how certain fields are used.

CodeParametersDescription
0
Do nothing
1
DoAttack - If using a ranged weapon, then launch the weapon's missile. Otherwise, perform a standard melee attack to deal damage.
2srvoverlay
aurastate
auratargetstate
auralencalc
DoApplyDamage - Apply the overlay on the target unit when dealing damage. Apply the "auratargetstate" state on the target, if possible, with "auralencalc" controlling its duration. Apply the "aurastate" state on the caster unit, if possible.
3
DoThrow - Check that primary equipped weapon is a throwing weapon and handle launching the weapon's missile
4
DoUnsummon - Remove the pet from the caster owner
5
DoLeftThrow - Check that non-primary equipped weapon is a throwing weapon and handle launching the weapon's missile
6auratargetstate
auralencalc
aurarangecalc
AmaDoInnerSight - Apply the "auratargetstate" state to all units in the area with a radius controlled by "aurarangecalc", that lasts a duration controlled by "auralencalc". The state can use any of the aura stats and their related calculation values.
7calc1
calc4
AmaDoJab - Attempt to attack the target unit. Use "calc1" to control the percent increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
8srvmissilea
srvmissileb
calc1-3
AmaDoMultipleShot - Shoot a number of missiles toward a target location. If the weapon class is a bow then use "srvmissilea", otherwise use "srvmissileb" as the missile to create. Use "calc1" to control the number of missiles created. Use "calc2" to control the activation frame for each missile created. Use "calc3" to control the number of triggering missiles.
9aurastate
auralencalc
calc1
calc4
BarDoFrenzy - Attack with both weapons on a target or to nearby targets. Add the "aurastate" state to the caster unit, with a duration controlled by "auralencalc". Use "calc1" to control the percentage increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
10srvmissilea
srvmissileb
calc1
AmaDoGuidedArrow - Shoot a missile that will change its path to find a nearby target to hit. If the weapon class is a bow then use "srvmissilea", otherwise use "srvmissileb" as the missile to create. Use "calc1" to control the physical damage dealt by the missile.
11aurastate
aurastat1
srvmissilea/b/c
calc1
AmaDoChargedStrike - Create the number of missiles with randomized pathing. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use "calc1" to control the number of missiles created.
12aurarangecalc
srvmissilea
srvmissileb
calc2
Param6
AmaDoStrafe - Use "aurarangecalc" to control the range to find a target. If the weapon class is a bow then use "srvmissilea", otherwise use "srvmissileb" as the missile to create. Use "calc2" to control the percent increase for physical damage dealt. Use "Param6" to control what percent within the entire animation to trigger rolling back the loop within the animation.
13calc1
calc4
Param2
AmaDoFend - Attempt to attack the target unit or nearby enemies with multiple attacks. Use "calc1" to control the percent increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used. Use "Param2" to control what percent within the entire animation to trigger rolling back the loop within the animation.
14aurastate
aurastat1
srvmissilea/b/c
calc1
calc2
AmaDoLightningStrike - Damage the target and create a missile that bounces to different targets. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use "calc1" to control the range of the missile to find a nearby target. Use "calc2" top control the number target chain jump hits for the missile.
15PetType
calc2
calc3
AmaDoDopplezon - Create a pet unit that is a duplicate of the caster unit. Use "calc1" to control the life percent of the pet. Use "calc3" to control the Life percent increase on the pet unit based on the caster's Life. Use "calc2" to control the duration that the pet exists. Apply the "dopllezon_appear" overlay on the pet.
16PetType
calc1
calc2
AmaDoValkyrie - Create a pet unit with generated item equipment and stats. Use "calc1" to control the life percent of the pet. Use "calc2" to control the item level for the generated items on the pet.
17aurastate
aurastat1
srvmissilea/b/c
calc1
SorDoChargedBolt - Create a number of missiles that have a randomized path. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use "calc1" to control the number of missiles created.
18aurastate
auralencalc
SorDoFrozenArmor - Apply the state on the target unit with its length controlled by "auralencalc".
19srvmissilea
calc1
SorDoInferno - Create the missile where "calc1" controls the range. Continue creating missiles while having the "inferno" state.
20aurarangecalc
calc1
calc2
SorDoStaticField - Apply damage to all units in the area. Use "aurarangecalc" to control the damage radius. Use "calc1" to control the Life percent damage. Use "calc2" to control the minimum damage dealt.
21calc1SorDoTelekinesis - If the target is a monster or player, then deal damage and use "calc1" to control the knockback chance. If the target is an item, then ensure that the item type is a scroll, gold, or potion. If the target is a object, then call the object's operate function.
22aurastate
aurastat1
srvmissilea/b/c
calc1
SorDoFrostNova - Shoot missiles in a circular array. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use "calc1" to add to the velocity of the missiles created.
23aurastate
auralencalc
SorDoBlaze - Add the "aurastate" state on the caster with a duration controlled by "auralencalc". Apply any aura stats or events.
24srvmissilea
srvmissileb
calc1
SorDoFirewall - Create 2 "srvmissilea" missiles in opposite directions and create 2 "srvmissileb" missiles also at those locations. Use "calc1" to control how many different groups of these missiles can exist at once.
25aurastate
auralencalc
SorDoEnchant - Add the "aurastate" state on the target with a duration controlled by "auralencalc". Apply any aura stats or events.
26srvmissilea
calc1
SorDoChainLightning - Create the missile, which can jump off targets hit, where "calc1" controls the number of missile chain jump hits
27
SorDoTeleport - Check that the level allows teleporting ("Teleport" in Levels.txt), then validate the target location and warp the unit to that location.
28srvmissileaSorDoMeteor - Check that the target location is valid to spawn the missile, then create it
29aurastate
auralencalc
srvmissilea
Param7
SorDoThunderStorm - While the caster unit has the "aurastate" state with the "auralencalc" duration, find nearby a nearby enemy and shoot the missile. Use "Param7" to control the radius size for finding nearby enemies.
30auratargetstate
aurarangecalc
auralencalc
NecDoAmplifyDamage - Apply the "auratargetstate" state on enemies in an area where "aurarangecalc" controls the radius and "auralencalc" controls the duration. Also apply and aura stats, events, and filters.
31PetType
calc1
calc2
NecDoRaiseSkeleton - Validate the target corpse and then create a pet unit. Use "calc1" to control the life percent of the pet. Use "calc2" to control the percent chance to spawn the skeleton with a shield (only works for the "necroskeleton" monster).
32
NecDoApplyDamage - Validate the target enemy and perform damage from the attacker
33calc1
calc2
calc3
calc4
AssDoPsychicHammer - Validate that the target unit is a monster or player and is not in town. Use the calculation fields to control the chance to knockback the target if it is a monster, unique monster, boss, or player, respectively.
34aurastate
auralencalc
aurastat1
aurastat2
aurastatcalc2
AssDoProgressiveAttack - Attempt to attack the target unit and deal damage. Calculate the progressive damage. Use "auralencalc" to determine the length of the charges. Use "aurastat1" to control the progressive charges. Use "aurastat2" as a stat when the player attacks and has no charges. Use "aurastatcalc2" to control that stat's value.
35aurastate
auralencalc
aurastat1
aurastat2
aurastatcalc2
AssDoDualProgressiveAttack - Check that the player has 2 weapons equipped. Attempt to attack the target unit twice with a frame delay, and use the "AssDoProgressiveAttack" (Code = 34) function for each attack.
36aurastate
aurastat1
srvmissilea/b/c
calc1
ApplyClawsOfThunderLvl2 - Shoot missiles in a circular array. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use "calc1" to add to the velocity of the missiles created.
37aurastate
aurarangecalc
aurastat1
srvmissilea/b/c
ApplyClawsOfThunderLvl3 - Shoot missiles in an arc array. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use "aurarangecalc" to control how many missiles are created, only if there are no values from the progressive charge calculation fields ("prgcalc1")
38aurastate
aurarangecalc
aurastat1
AssDoAreaDamage - Deal damage to enemies in an area at a target location. Use the progressive calculation fields to determine the radius increase per charge, controlled by the "aurastate" state and the "aurastat1" value, otherwise use "aurarangecalc" for the radius.
39aurastate
aurarangecalc
aurastat1
srvmissilea/b/c
AssMissileDisc - Create a disc of randomly positioned missiles. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use the progressive calculation fields to determine the radius increase per charge, controlled by the "aurastate" state and the "aurastat1" value, otherwise use "aurarangecalc" for the radius.
40aurastate
aurastat1
srvmissilea/b/c
ApplyRoyalStrikeLvl1 - Create a missile at a target location. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields.
41aurastate
aurarangecalc
aurastat1
srvmissilea/b/c
ApplyChaosIce - Create multiple missiles from the caster unit. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use the progressive calculation fields to determine the number of missiles created per charge, controlled by the "aurastate" state and the "aurastat1" value. Use "aurarangecalc" for the radius.
42calc2
calc3
calc4
Param1
Param2
AssDoDragonTalon - Attempt to melee attack the target unit multiple times. Use the progressive fields to control the charge functions. Use each calculation field to control the percent chance to knockback for a monster, boss, or player unit. Use the parameters to control a linear calculation for the percentage of bonus physical damage dealt.
43aurastate
aurarangecalc
aurastat1
srvmissilea/b/c
AssDoShockField - Create multiple missiles using the lob function. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use the progressive calculation fields to determine the number of missiles created per charge, controlled by the "aurastate" state and the "aurastat1" value. Use "aurarangecalc" for the radius.
44PetTypeAssDoBladeSentinel - Summon a pet at the target location and cause it to oscillate
45PetTypeAssDoWakeOfFireSentry - Summon a pet at the target location
46calc1
calc4
AssDoDragonClaw - Attempt to attack the target unit twice with a frame delay. Use "calc1" to control the percent increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used. Use the progressive fields to determine progressive damage changes.
47aurastate
auratargetstate
auralencalc
aurarangecalc
AssDoCloakOfShadows - Apply the "aurastate" state on the caster unit with a duration controlled by "auralencalc". Apply the "auratargetstate" state on nearby enemies in a radius controlled by "aurarangecalc". Use any applicable aura stats or filters.
48aurastate
aurastat1
srvmissilea/b/c
AssDoBladeFury - Create a missile after a frame delay. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use the progressive calculation fields to modify the delay between creating the next missile, based on the charges.
49PetType
Param5
Param6
AssDoShadowWarrior - Create a pet unit with generated item equipment and stats. Use "Param5" and "Param6" to control the item level for the generated items on the pet.
50aurarangecalc
calc1
AssDoDragonTail - Attempt to attack a target unit and deal damage in an area. Use the progressive fields to control the charge functions. Use "aurarangecalc" to control the radius. Use "calc1" to control the percent increase in damage dealt.
51aurarangecalc
calc1
calc2
Param4
AssDoMindBlast - Randomly damage and convert enemies in an area. Use "aurarangecalc" to control the radius, or if using the progressive charges, then use their field values instead. Use "calc1" to control the chance to convert enemies. Use "calc2" to control the duration enemies are converted. Use "Param4" to add an additional randomized duration value.
52calc1AssDoDragonFlight - Teleport the caster to the target unit and attempt to attack it. Use the progressive fields to control the charge functions. Use "calc1" to control the percent increase for physical damage dealt.
53aurastate
aurarangecalc
aurastat1
AssDoAreaDamage2 - Deal damage to enemies in an area around the caster. Use the progressive calculation fields to determine the radius increase per charge, controlled by the "aurastate" state and the "aurastat1" value, otherwise use "aurarangecalc" for the radius.
54aurastate
aurarangecalc
aurastat1
AssDoBladeShield - Deal damage to enemies in an area around the caster. Use the progressive calculation fields to determine the radius increase per charge, controlled by the "aurastate" state and the "aurastat1" value, otherwise use "aurarangecalc" for the radius.
55aurarangecalc
calc1
calc2
calc3
EType
NecDoCorpseExplosion - Hide the target corpse and deal damage in an area. Use "aurarangecalc" to control the radius. Use "calc1" and "calc2" to control the min and max percent damage dealt based on the max Life from the corpse unit. Use "calc3" to control the percent of damage converted to elemental.
56PetTypeNecCreateGolem - Create a pet unit with defined stats. If the skill has the "TargetableOnly" and "TargetCorpse" flag enabled, then the summoned pet will copy the modifiers of the corpse.
57PetTypeNecCreateIronGolem - Validate that the target is an identified item on the ground. Remove the item and create the pet, inheriting properties from the item.
58PetTypeNecDoRevive - Validate that the target is a corpse that can be revived, then revive the monster, applying any valid stats
59auratargetstate
auralencalc
aurarangecalc
NecDoAttract - Validate that the target is a monster and can have its AI changed. Apply the "auratargetstate" state on any valid monsters in an area controlled by "aurarangecalc" which lasts a duration controlled by "auralencalc".
60PetType
calc2
srvmissilea
NecDoBoneWall - Create the pet, and then create 2 missiles that shoot in opposite directions, where "calc2" controls the number of sub missiles to create within each of these missile parameters.
61auratargetstate
auralencalc
aurarangecalc
aurastat2-6
NecDoConfuse - Validate that the target is a monster and can have its AI changed. Apply the "auratargetstate" state on any valid monsters in an area controlled by "aurarangecalc" which lasts a duration controlled by "auralencalc".
62PetTypeNecDoBonePrison - Create a number of pets around the target unit.
63srvmissileaNecDoPoisonExplosion - Validate that the target corpse can explode, then update the corpse to be unselectable and create a radial ring of poison missiles.
64calc2
Param4
PalDoSacrifice - Attack and deal damage to the target. Deal damage to the caster based on a percentage of life controlled by "calc2" and "Param4".
65aurastate
auratargetstate
aurarangecalc
PalDoMight - Apply the aurastate" state to the caster. Apply the "auratargetstate" state to nearby units, where "aurarangecalc" controls the radius size.
66aurastate
auratargetstate
aurarangecalc
PalDoHolyFire - Apply the aurastate" state to the caster. Apply the "auratargetstate" state to nearby units, where "aurarangecalc" controls the radius size. Deal damage to the nearby units in the area.
67calc1
calc4
PalDoCharge - Listen for the event frames and attempt to attack the target unit to deal damage. Use "calc1" to control the percent increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
68aurastate
auralencalc
srvmissilea
BarDoBattleCry - Create a circular array of missiles and add the "aurastate" state to the caster unit where the duration is controlled by "auralencalc"
69calc1
Param3
Param4
BarDoFindHeart - Validate the target corpse, then update the corpse to be unselectable and roll a random chance to create a potion. Use "calc1" to control the chance of finding a potion. Use "Param3" and "Param4" to control the chance for finding a mana potion and rejuvenation potion. Potions depend on the current Act level and Game Difficulty.
70aurastate
calc1
calc2
calc3
calc4
BarDoDoubleSwing - Validate the target enemy and attack it based on the animation sequence frame to determine if it is the first attack or second attack. Uses the BarStartBash function (Code 32 for "srvstfunc").
71auratargetstate
auralencalc
BarDoTaunt - Validate that the target is a monster and can have its AI changed to force it to attack the caster. Apply the "auratargetstate" state on the target, which lasts a duration controlled by "auralencalc". If there is no target selected, then find the nearest target within a radius value of 20.
72calc1
Param1
Param2
Param3
Param4
BarDoFindItem - Validate the target corpse, then update the corpse to be unselectable and roll a random chance to spawn a treasure class item. Use "calc1" to control the chance of finding an item. Use the parameter values to control the chances for finding Low Quality, Normal, High Quality, and Magic items.
73srvmissilea
calc1
PalDoBlessedHammer - Create a missile in a spiral path pattern. Use "calc1" to control the damage percent bonus when the caster has the "concentration" state.
74calc1BarDoDoubleThrow - Launch the weapon missile, where "calc1" controls the bonus damage percent
75srvmissilea/b/cBarDoGrimWard - Validate the target corpse, then update the corpse to be unselectable and create the "srvmissilea" missile. If the target unit has the "large" flag enabled (MonStats2.txt) then use "srvmissileb" instead. If the target unit has the "small" flag enabled (MonStats2.txt) then use "srvmissilec" instead.
76aurastate
calc1
BarDoWhirlwind - If the caster unit is at the target location, then remove the aura and stop whirlwinding. Otherwise, find nearby enemies and deal damage, where "calc1" controls the damage bonus.
77calc1
calc2
BarDoLeap - Validate the target position and caster's collision, and move the unit. Use "calc1" to control the range, and "calc2" to control the speed.
78calc1
calc2
calc4
BarDoLeapAttack - Validate the target position and the caster's collision, and move the unit. Make the unit attack the target, if nearby, or find another nearby target. Use "calc2" to control the speed. Use "calc1" to control the percent increase for physical damage dealt. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
79auratargetstate
auralencalc
calc1
Param5
PalDoConversion - Validate that the target is a monster and can have its AI changed to fight alongside the player. Apply the "auratargetstate" state on the target, which lasts a duration controlled by "auralencalc". Use "calc1" to control the chance to convert. Use "Param5" to enable a expire effect.
80srvmissilea
srvoverlay
PalDoFistOfTheHeavens - Create the missile and apply the overlay on the target unit
81aurastate
auratargetstate
aurarangecalc
PalDoHolyFreeze - Apply the "aurastate" state on the caster, and apply the "auratargetstate" on any nearby enemies with a radiuscontrolled by "aurarangecalc".
82aurastate
aurarangecalc
calc1
calc2
calc3
PalDoRedemption - Apply the "aurastate" state on the caster. Use "aurarangecalc" to control the radius of the aura, which will look for valid corpses to redeem. Use "calc1" to control the chance to redeem. Use "calc2" to control the life gain. Use "calc3" to control the mana gain.
83
MonDoFirehit - Apply damage to the target
84calc1MonDoMaggotEgg - Spawn a number of units around the caster and kill the caster. Use "calc1" to control the number of spawned units.
85srvmissileaMonDoShamanFire - Get the missile and possibly add the monster's number in class to the missile ID to get another missile ID instead, and then fire that missile
86calc1MonDoMaggotDown - Check for the proper frame count and then heal the caster by a percentage of Life controlled by "calc1"
87
MonDoMaggotLay - Spawn a unit in 1 of 8 possible directions nearby the target location
88srvmissileaMonDoAndariel - For multiple frames, spawn a missile in 1 of 8 possible directions
89
MonDoJump - Validate the target path and check for the completion of the animation or the arrival to destination, then update the unit's collision. Handle special cases for the "sandleaper1" monster frame counts.
90calc1
calc2
MonDoSwarmMove - Check for the skill flag to stop the sequence, otherwise reset the sequence. Use "calc1" to control the animation starting frame at the beginning of the sequence. Use "calc2" to control the animation frame when ending the sequence.
91sumoverlayMonDoNest - Make the caster unit interruptable. Create the monster saved in the function parameter and make that monster unable to reward Experience and Item Drops, and add the overlay on that monster.
92srvmissileaMonDoQuickStrike - Apply damage to the target. Check for the monster's missile frame and then launch the missile.
93srvmissileaMonDoGargoyleTrap - Create the missile in one of the allowed directions that is closest to the target unit
94
MonDoSubmerge - When on the last frame, set the animation sequence rate to 0 and clear the frame events
95srvmissilea
calc1
calc3
MonDoMonsterInferno - Continuously create missiles based on the monster's Inferno fields (MonStats2.txt). Use "calc1" to adjust the missile range. Use "calc3" to adjust the density when to create the next missile.
96calc1
calc2
MonDoZakarumHeal - Heal the ally target by a random percentage of the target's life, where "calc1" controls the min percent and "calc2" controls the max percent
97srvoverlayMonDoResurrect - Validate that the monster is dead and can be resurrected. Make the monster have proper collision, be attackable, be selectable, able to be hit by missiles, not provide Experience, and not provide item drops. Also update the monster's mode and add an overlay.
98
MonDoTeleport - Validate the target location and teleport the unit. Adjust the location if the monster has a boss owner.
99srvmissilea
calc1
calc2
MonDoPrimePoisonNova - Create 2 rings of missiles. Use "calc1" to control the number of missile subloops. Use "calc2" to control how many missiles are created per ring. Use the missile's "Param1" and "Param2" values to control its velocity per ring (Missiles.txt).
100srvoverlayMonDoDiabCold - Deal elemental damage to the target and apply the overlay. Adjust the Freeze Length using the "ELen" fields from the skill.
101srvmissilea
calc1
MonDoFingerMageSpider - Create the missile with a facing opposite of the target or caster unit, and use "calc1" to control the missile's subloops.
102srvmissilea
calc1
MonDiabWallMaker - Create a number of missiles with a randomized path and range. Use "calc1" to control the number of missiles created.
103calc1
Param1
Param2
Param3
Param4
Param5
Param6
MonDoDiabRun - Move the caster unit with increased speed towards a target, and then attack the target, dealing damage. Use "calc1" to control the increase in movement speed. The 6 parameter values controls the run animation's stop frame length, stop event frame, start event frame, start frame length, loop repeat event frame, loop frame length, and loop start event frame.
104summonMonDoDiabPrison - Create multiple of the "summon" units around the target, based on the type of unit that is being targeted
105srvmissilea
calc1
MonDoDesertTurret - Create a number of missiles in 8 possible directions. Use "calc1" to control the number of missiles created.
106srvmissileaMonDoArcaneTower - Create a circular array of missiles
107calc3
Param1
MonDoMosquito - Validate that the caster is in melee range for the target and then deal damage, including randomized poison damage, mana drain, and stamina drain. Use "calc3" to control the heal percentage on the caster based on the damage dealt. Use "Param1" to control the animation frame to start the repeat loop.
108calc1MonDoRegurgitatorEat - Validate that the target corpse is a monster and then remove it and heal the caster by a percentage of the target's life, controlled by "calc1"
109aurastate
auralencalc
calc1
MonDoFrenzy - Attempt to attack the target unit, dealing damage. Add the "aurastate" state to the caster unit, with a duration controlled by "auralencalc". Use "calc1" to control the percentage increase for physical damage dealt.
110srvmissileaMonDoHireFireMissile - Launch the weapon missile to the target. Use "srvmissilea" if the weapon missile is "arrow" or "bolt".
111Param4MonDoFetishAura - Apply an aura to nearby "fetish1" or "fetishblow1" monster types, increasing their attack rate. Use "Param4" to control the radius.
112auratargetstate
aurarangecalc
auaralencalc
Param5
Param6
Param7
MonDoCurse - Apply a random curse to enemy units in an area. Randomly select between the following curses: Amplify Damage, Weaken, Life Tap, Decrepify, Lower Resist. Use "aurarangecalc" to control the radius. Use "auralencalc" to control the duration. Use "Param5" and "Param6" to control the resistance percentage change for the Lower Resist curse. Use "Param7" to control the Decrepify attack speed and movement speed change.
113
ItemDoBookSkill - Check the caster's inventory for an item that has the "Book" or "Scroll" Item Type (ItemTypes.txt), and then use that item's skill and update its quantity.
114PetType
calc1
calc2
DruDoRaven - Create the pet unit and make it unattackable. Use "calc1" to control the pet's bonus Life percent. Use "calc2" to control the summoned pet's unit level.
115PetType
calc1
calc2
DruCreateVineCreature - Create the pet unit in the "Skill 1" mode. Use "calc1" to control the pet's bonus Life percent. Use "calc2" to control the summoned pet's unit level.
116aurastate
auralencalc
DruDoWerewolf - Add/Remove the "aurastate" state on the caster, depending if the caster unit does or does not have the state. Use "auralencalc" to control the state duration
117srvmissilea
calc1
DruDoFireStorm - Create a number of missiles that move in a randomized pattern. Use "calc1" to control the number of missiles created.
118srvmissilea
calc1
DruDoTwister - Create a number of missiles that move in a randomized pattern. Use "calc1" to control the number of missiles created.
119PetType
calc1
calc2
DruCreateTotem - Create the pet unit at a valid target location. Use "calc1" to control the pet's bonus Life percent. Use "calc2" to control the summoned pet's unit level.
120aurastate
auralencalc
calc2
DruDoFeralRage - After hitting the target, apply the state on the caster unit with a duration controlled by "auralencalc" and with the capability to stack with charges. Use "calc2" to control the max charges.
121auratargetstate
calc1
DruDoRabies - Attack the target to deal damage. Apply the "auratargetstate" where its duration is controlled by the "ELen" field. Use "calc1" to control the percent increase in physical damage.
122calc1
calc2
calc3
DruDoHunger - Attempt to attack the target, dealing damage and restoring Life and Mana. Use Use "calc1" to control the percent change in physical damage. Use "calc2" and "calc3" to control the life steal and mana steal gained from the attack damage.
123srvmissilea


DruDoVolcano - Validate the target location and then create the missile
124aurastate
auralencalc
Param4
DruDoArmageddon - Apply the "aurastate" state on the caster unit which lasts a duration controlled by "auralencalc". Use "Param4" to control the duration between sending an event state update.
125srvmissileaMonDoWakeOfFire - Create a missile from the source unit with a saved direction
126srvmissilea
calc2
Param2
MonDoImpInferno - Based on the animation frames set in MonStats2.txt, create a missile where "calc2" controls the missile's range (and also "Param1" from Missiles.txt).
127calc1MonDoBatSuckBlood - Deal damage to the target and then use "calc1" to control the percentage of max Life healed on the caster unit
128calc1
srvoverlay
MonDoCryHelp - If the caster is a monster, then command the caster to attack the target for a duration controlled by "calc1". Apply the overlay on the target.
129aurastateMonDoImpTeleport - If the target location is on the ground, then warp the unit to that location. If the type of unit targeted is the "barricadetower" or "siegebeast1" and the caster unit type is "imp1", then add the "attached" state to the caster unit, and update the AI, animation events, and stats to be not interactable.
130srvmissilea
calc1
MonDoVineAttack - Create a number of missiles in a random spread pattern with 4 possible spread directions. Use "calc1" to control the number of missiles created.
131auratargetstate
calc1
MonDoOverseerWhip - Validate that the target is a living monster. If the target unit type is "minion1", then perform a random chance to bloodlust the target. Use "calc1" to control the percent chance to bloodlust the target, which will apply the "auratargetstate" state on the target. If bloodlust does not happen, then change the monster class and AI to the suicide minion.
132srvmissileaMonDoImpFireMissile - Based on the monster's number in class, increment the index of the linked "srvmissilea" missile and then create that missile based on the index.
133
MonDoImpregnate - Validate that the target is a friendly dead monster and that it does not have the "pregnant" state. Then add the "pregnant" state to the target and create a "painworm1" type monster.
134srvmissilea
aurarangecalc
MonDoSiegeBeastStomp - Deal damage to nearby enemies in an aura where "aurarangecalc" controls the radius of the damage
135sumoverlayMonDoSpawner - Create the monster saved in the parameter with the added overlay, with no Experience provided, and with no item spawning.
136srvmissilea
calc1
MonDoDeathMauler - Validate the target location and then create the missile with an animation rate controlled by "calc1". The missile's range is modified based on the distance from the caster.
137aurastateMonDoFenrisRage - Validate that the target is an enemy corpse that has not been used. Apply the state on the caster, adding any aura events on the caster.
138srvmissilea
calc1
calc2
MonDoBaalInferno - Shoot multiple missiles from the caster unit to a target location. Use "calc1" to control the number of missiles created. Use "calc2" to control the range of the missiles. Check the inferno frame events for the monster (MonStats2.txt).
139srvmissileaMonDoBaalCold - Validate the target location and then create the missile using the directions from the saved parameters.
140
MonDoBaalTentacle - Based on the monster class of the caster, create a number of "baaltentacle1" summoned monsters randomly positioned in a location with a radius size of 9. Make sure these monsters do not provide exp or reward items.
141aurarangecalc
calc1
calc2
calc3
EType
Param5
Param6
MonDoBaalCorpseExplosion - Find a nearby dead monster and then do the "NecDoCorpseExplosion" function (Code = 55) except where "Param5" and "Param6" control the baseline radius and radius increase per skill level.
142prgcalc1
prgcalc2
prgcalc3
aurastate
aurastat1
aurarangecalc
AssDoAreaAttack - Deal attack damage in an area. Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, use the proper "progcalc#" value to control the radius, based on the number of progressive charges. Otherwise, default to using "aurarangecalc" for the radius.
143prgcalc1
prgcalc2
prgcalc3
aurastate
aurastat1
srvmissilea/b/c
ApplyRoyalStrikeLvl2 - Create a number of missiles that move in a randomized pattern. Use the "srvmissilea" missile by default, or use 1 of the 3 missiles depending on the progressive charges controlled by the "aurastate" field and "aurastat1" fields. Use "aurarangecalc" value by default for the number of missiles created, or use the appropriate progressive calculation fields, based on the number of progressive charges.
144PetType
calc1
SorDoHydra - Validate the target location and create 3 pets, where "calc1" controls their duration and bonus life percent.
145aurastate
aurarangecalc
Param4
DruApplyHurricane - Apply the state on the caster with the radius controlled by "aurarangecalc" and the frame state updates to deal radius damage controlled by "Param4".
146aurastate
aurarangecalc
srvmissilea
Param4
DruApplyArmageddon - Update the state on the caster unit based on the events, and then create a missile in a radius controlled by "aurarangecalc" at a periodic frame interval controlled by "Param4".
147
MonApplyAttached - Get the source unit of the caster and update the caster's pathing to follow the source unit, like a rider attached to its mount.
148srvmissileaMonDoDoomKnightMissile - Create the "srvmissilea" using either the lob function or the normal linear function, depending on the "lob" flag. Also select the missile or up to 3 index values higher, depending on the monster's graphics variation for the "Special 3" component variation.
149srvmissileaMonDoNecroMageMissile - Create the "srvmissilea" using either the lob function or the normal linear function, depending on the "lob" flag. Also select the missile or up to 3 index values higher, depending on the monster's graphics variation for the "Special 4" component variation.
150calc1
calc2
calc4
PalDoSmite - Validate the target enemy and that the target is in melee range, and then attempt to attack the target. Use "calc1" to control the percent increase for physical damage dealt. Use "calc2" to control the stun length. Use "calc4" to control the percent of damage converted to elemental, if the "Etype" field is used.
151srvmissilea
calc1
SorDoChainLightning2 - Launch the missile that can do chain hits to other nearby enemies. Use "calc1" to control the number of chain hits.
152srvmissilea
calc1
calc3
MonDoDiabloLight - Shoot a missile from the caster to the target location, adhering to the caster's inferno animation frames (MonStats2.txt). Use "calc1" to control the missile range, otherwise default to using the missile's "Param2" value calculated with its current level. Use "calc3" to control the periodic frame count for how often to create the missile.

srvstopfunc - [N] - Server Stop function. This controls how the skill cleans up after ending. This uses a code value to call a function, affecting how certain fields are used. Only used by "Whirlwind".

CodeParametersDescription
0
Do nothing
1aurastateBarStopWhirlwind - Handles changing the collision, pathing, and aura state of the caster.

prgstack - [B] - If equals 1, then all srvprgfunc1 functions will execute, based on the current number of progressive charges. If equals 0, then only the relative srvprgfunc1 function will execute, based on the current number of progressive charges

srvprgfunc1 - [N] - Controls what srvdofunc is used when executing the progressive skill with a charge number equal to 1, 2, and 3, respectively. This field uses the same functions as the srvdofunc field

prgcalc1 - [C] - Used as a possible parameter for calculating values when executing the progressive skill with a charge number equal to 1, 2, and 3, respectively

prgdam - [N] - Calls a function to modify the progressive damage dealt

CodeParametersDescription
0
Do nothing
1aurastat1

calc1

tgtoverlay
ModifyProgressiveDamage - Modify the percentage of the physical damage dealt and apply an overlay on the target
2aurastat1

calc1
ModifyProgressiveSteal - Modify the percentage of the life steal and mana steal gained
3aurastat1

EType

Param2
ModifyProgressiveElemental - If the progressive damage elemental type equals Cold, then at 3 charges, modify the Freeze Length based on the Cold Length and a divisor (using Param2)
4aurastat1

EType

calc1

Param5
ModifyProgressiveElementalConvert - Convert a percentage of the physical damage dealt to elemental damage, based on the "calc1" field. If the elemental type equals Cold, then at 3 charges, modify the Freeze Length based on the Cold Length and a divisor (using Param5)

srvmissile - [O] - Used as a parameter for controlling what main missile is used for the server functions used (Missile field from Missiles.txt)

decquant - [B] - If equals 1, then the unit's ammo quantity will be updated each time the skill's srvdofunc is called. If equals 0, then ignore this

lob - [B] - If equals 1, then missiles created by the skill's functions will use the missile lobbing function, which will cause the missile fly in an arc pattern. If equals 0, then missiles that are created will use the normal linear function

srvmissilea - [O] - Used as a parameter for controlling what secondary missile is used for the server functions used (Missile field from Missiles.txt)

useServerMissilesOnRemoteClients - [X] [N] - Control new missile changes per player skill. Values of 1 will force enable it for that skill. Skills that have matching server/client missiles sets for the skill get auto enabled. Setting this to a value greater than 1 will force it to skip this auto enable logic. If equals 0, then ignore this. Note: this feature is disabled

srvoverlay - [O] - Creates an overlay on the target unit when the skill is used. This is a possible parameter used by various skill functions (overlay field from Overlay.txt)

aurafilter - [N] - Controls different flags that affect how the skill's aura will affect the different types of units. Uses an integer value to check against different bit fields. For example, if the value equals 4354 (binary = 1000100000010) then that returns true for the 4096 (binary = 1000000000000), 256 (binary = 0000100000000), and 2 (binary = 0000000000010) bit field values. (See SuperCalc for a helpful calculator for this)

Bit Field ValueBinary Equivalent ValueDescription
100000000000000000001Find Players
200000000000000000010Find Monsters
400000000000000000100Find Undead Monsters
800000000000000001000Find Missiles
1600000000000000010000Find Objects
3200000000000000100000Find Items
6400000000000001000000Limit number of targets
12800000000000010000000Attackable units only
25600000000000100000000Make sure the target is not in town
51200000000001000000000No missile barriers to center
102400000000010000000000Missile units only
204800000000100000000000Custom check function
409600000001000000000000Find dead units only
819200000010000000000000Units not in town
1638400000100000000000000No bosses
3276800001000000000000000Run a target check function, checking for unit types and player alignment
6553600010000000000000000Allies
13107200100000000000000000Target in melee range
26214401000000000000000000No Act boss units (the "primeevil" field in monstats.txt)
52428810000000000000000000Units not in the Just Hit state

aurastate - [O] - Links to a state that can be applied to the caster unit when casting the skill, depending on the skill function used (state field from States.txt)

auratargetstate - [O] - Links to a state that can be applied to the target unit when using the skill, depending on the skill function used (state field from States.txt)

auralencalc - [C] - Controls the aura state duration on the unit (where 25 Frames = 1 second). If this value is empty, then the state duration will be controlled by other functions, or it will last forever. This can also be used as a parameter for certain skill functions

aurarangecalc - [C] - Controls the aura state's area radius size, measured in grid sub-tiles. This can also be used as a parameter for certain skill functions

aurastat1 - [O] - Controls which stat modifiers will be altered or added by the aura state (Stat field from ItemStatCost.txt)

aurastatcalc1 - [C] - Controls the value for the relative aurastat1 field

auraevent1 - [O] - Controls what event will trigger the relative auraeventfunc1 field function. (event field from Events.txt)

auraeventfunc1 - [N] - Controls the function used when the relative auraevent1 event is triggered. Referenced by the Code value of the Event Functions Table

passivestate - [O] - Links to a state that can be applied by the passive skill, depending on the skill function used (state field from States.txt)

passiveitype - [O] - Links to an Item Type to define what type of item needs to be equipped in order to enable the passive state (Code field from Itemtypes.txt)

passivereqweaponcount - [N] - Controls how many equipped weapons are needed for this passive state to be enabled. If the value equals 1, then the player must have 1 weapon equipped for this passive state to be enabled. If the value equals 2, then the player must be dual wielding weapons for this passive state to be enabled. If the value equals 0, then ignore this field

passivestat1 - [O] - Assigns stat modifiers to the passive skill (Stat field from ItemStatCost.txt)

passivecalc1 - [C] - Controls the value for the relative passivestat1 field

summon - [O] - Controls what monster is summoned by the skill (ID field from MonStats.txt). This field's usage will depend on the skill function used. This field can also be used as reference for AI behaviors and for SkillDesc.txt

PetType - [O] - Links to a pet type data to control how the summoned unit is displayed on the UI (PetType column in PetType.txt)

petmax - [C] - Used skill functions that summon pets to control how many summon units are allowed at a time

summode - [O] - Defines the animation mode that the summoned monster will be initiated with. Referenced from the Code column in MonMode.txt

sumskill1 - [O] - Assigns a skill to the summoned monster. Points to another Skill. This can be useful for adding a skill to a monster to transition its synergy bonuses

sumsk1calc - [C] - Controls the skill level for the designated sumskill1 field when the skill is assigned to the monster

sumumod - [N] - Assigns a monster modifier to the summoned monster (ID field from MonUMod.txt)

sumoverlay - [O] - Creates an overlay on the summoned monster when it is first created (overlay field from Overlay.txt)

stsuccessonly - [B] - If equals 1, then the following sound and overlay fields will only play when the skill is successfully cast, instead of always being used even when the skill cast is interrupted. If equals 0, then the following sound and overlay fields will always be used when the skill is cast, regardless if the skill was interrupted or not

stsound - [O] - Controls what client sound is played when the skill is used, based on the client starting function (Sound field from Sounds.txt)

stsoundclass - [O] - Controls what client sound is played when the skill is used by the skill's assigned class (charclass), based on the client starting function (Sound field from Sounds.txt). If the unit using the skill is not the same class as the "charclass" value for the skill, then this sound will not play

stsounddelay - [B] - If equals 1, then use the weapon's hit class to determine the delay in frames (where 25 frames = 1 second) before playing the skill's start sound. If equals 0, then the skill's start sound will play immediately.

Hit ClassSound UsedSound Delay
NoneNone0 frames
Hand-To-Handweapon_punch_16 frames
One Handed Swing Smallweapon_1hs_small_16 frames
One Handed Swing Largeweapon_1hs_large_16 frames
Two Handed Swing Smallweapon_2hs_small_18 frames
Two Handed Swing Largeweapon_2hs_large_18 frames
One Handed Thrustweapon_1ht_16 frames
Two Handed Thrustweapon_2ht_16 frames
Clubweapon_1hs_large_16 frames
Staffweapon_staff_16 frames
BowNone0 frames
CrossbowNone0 frames
ClawNone0 frames

weaponsnd - [B] - If equals 1, then play the weapon's hit sound when hitting an enemy with this skill. The sound chosen is based on the weapon's hit class. Also use the sound delay based on the weapon's hit class to determine the delay in frames (where 25 frames = 1 second) before playing the weapon hit sound (stsounddelay for the types of hit class sounds and delays used). If equals 0, then do not play the weapon hit sound when hitting an enemy with the skill attack

dosound - [O] - Controls the sound for the skill each time the cltdofunc is used (Sound field from Sounds.txt)

dosound a - [O] - Used as a possible parameter for playing additional sounds based on the cltdofunc used(Sound field from Sounds.txt)

tgtoverlay - [O] - Used as a possible parameter for adding an Overlay on the target unit, based on the cltdofunc used (overlay field from Overlay.txt)

tgtsound - [O] - Used as a possible parameter for playing a sound located on the target unit, based on the cltdofunc used (Sound field from Sounds.txt)

prgoverlay - [O] - Used as a possible parameter for adding an Overlay on the caster unit for progressive charge-up skill functions, based on the cltdofunc used and how many progressive charges the caster unit has (overlay field from Overlay.txt)

prgsound - [O] - Used as a possible parameter for playing a sound when using the skill for progressive charge-up skill functions, based on the cltdofunc used and how many progressive charges the caster unit has (Sound field from Sounds.txt)

castoverlay - [O] - Used as a possible parameter for adding an Overlay on the caster unit when using the skill, based on the Client Start/Do function used (overlay field from Overlay.txt)

cltoverlaya - [O] - Used as a possible parameter for adding additional Overlays on the caster unit, based on the Client Start/Do function used (overlay field from Overlay.txt)

cltstfunc - [N] - Client Start function. This controls how the skill works when it is starting to cast, on the client side. This uses a code value to call a function, affecting how certain fields are used.

CodeParametersDescription
0
Do nothing
1
StartAttack - Check that the weapon is not a "Missile Potion" item type and if the player has enough ammunition if it is a ranged weapon
2
StartThrow - Check that the player has enough ammunition
3
StartUnsummon - Check that the target is a monster owned by the player and that the monster's Pet Type has "unsummon" enabled (PetType.txt)
4
StartLeftAttack - Return true
5
AssStartPsychicHammer - Check that the target is a valid player or monster
6calc1AssStartDragonClaw - Validate that the target is a proper enemy, and use the skill's "calc1" field to save the number of kicks to be used by the skill
7aurastateAssStartCloakOfShadows - Check that the player does not already have the state
8prgoverlay
prgsound
seqinput
AssStartBladeFury - Add the overlay and sound if the player does not have the "inferno" state. If the player does not have the "inferno" state, then add it. Otherwise set the player's animation sequence frame.
9Param4AssStartDragonTail - Adjust the player's attack speed using the skill's parameter
10
AssStartDragonFlight - Validate that the target is an enemy monster or player
11
AmaStartCheckQuantity - Check that the player has enough ammunition for the weapon
12
AmaStartJab - Validate the skill and prepare to track the max targets to attack
13aurarangecalc
calc1
calc3
AmaStartStrafe - Use the skill's calculation fields to track the minimum and maximum number of shots. Use the skill's "aurarangecalc" value to count nearby valid targets. Have the caster unit face the first valid target found.
14calc1AmaStartFend - Find at least an initial valid target and prepare to track the max targets to attack
15prgoverlay
prgsound


SorStartInferno - Add the overlay and sound if the player does not have the "inferno" state. If the player does not have the "inferno" state, then add it. Otherwise set the player's animation sequence frame.
16aurarangecalcSorStartTelekinesis - Check the range of the skill using the "aurarangecalc" value and ensure there is a valid monster or player to target in the area
17
SorStartHydra - Check for a valid area and ensure that the skill cannot be used in town
18cltmissilecNecStartCurse - Validate and launch the client missile
19cltmissilecNecStartTeeth - Validate and create the missile to launch in a direction based on the cast position
20
NecStartRaiseSkeleton - Check that the target corpse is valid
21
NecStartCExplosion - Check that there is a valid enemy corpse
22
NecStartBonePrison - Check for a valid area and ensure that the skill cannot be used in town
23
NecStartIronGolem - Check that the target item on the ground is valid and that it is identified
24cltmissilea
cltmissileb
cltmissilec
NecStartRevive - Validate that the target monster can be revived. Based on the monster's "OverlayHeight" value (MonStats2.txt), create 1 of the 3 client missiles in a random direction. If the monster's "OverlayHeight" value equals 1, then create "cltmissileb". If the monster's "OverlayHeight" value equals 3, then create "cltmissilec".
25dosound a
Param1
PalStartCharge - If the player is in melee range of the target, then start an attack. If the caster unit is a player then play the "dosound a" sound. If the caster unit is a monster, then play the monster's skill sound (MonSounds.txt). Ensure that the target is not in an uninterruptable state. Adjust the movement speed of the caster unit. Set the caster unit's movement velocity speed percent so the skill's "Param1" value. Add movement parameters for the skill function.
26
BarStartFindHeart - Check that the target corpse is valid and has not been used yet
27cltcalc1BarStartDoubleSwing - Adjust the caster unit's attack speed based on the "cltcalc1" field
28
BarStartFindItem - Check that the target corpse is valid and has not been used yet
29aurarangecalcBarStartLeap - Check that the caster unit is not in an uninterruptible state. If the caster unit is a monster, then find a valid location past the target unit. If the caster unit is not a monster, then find a valid location and ensure that the target location is not in town. Store the target location. The target range is controlled by the "aurarangecalc" field.
30
BarStartLeapAttack - Check that the caster unit is not in an uninterruptible state. If the player is in melee range of the target, then start an attack. Validate the target location, checking for proper player collision. Store the target location.
31
BarStartWhirlwind - Check that the caster unit is not in an uninterruptible state. Modify the caster unit's collision to only collide with walls and objects. Adjust the caster unit's velocity. Add movement parameters for the skill function. Minimum whirlwind distance equals 5.
32cltmissilea
cltmissileb
MonStartMaggotUp - Set the caster unit to be attackable and selectable. If the current area level is in Act 2, then create the "cltmissileb" missile, otherwise create the "cltmissilea" missile. Find a valid location, checking for collision, and then warp the caster unit to that location.
33
MonStartMaggotDown - Set the unit to no longer be attackable or selectable and remove its collision
34
MonStartAndariel - Validate the target enemy and store the target unit's location for the skill function
35
MonStartSwarmMove - Find a valid path with a proper distance, and set movement parameters
36
MonStartNest - Validate the monster class, store the target location, and set the collision in the caster unit's location to be a monster collision
37
MonStartSubmerge - Set the unit to no longer be attackable or selectable
38
MonStartEmerge - Set the unit to be attackable or selectable
39
MonStartResurrect - Unhide the unit
40cltcalc1MonStartDiabLight - Use the "cltcalc1" field to calculate a periodic delay for spawning missile and store that value in a parameter
41
MonStartDiabRun - Clear all function flags on the skill
42calc1
calc2
MonStartMosquito - Validate the target enemy. Use the "calc1" and "calc2" fields as min and max values to randomly select a value to control a loop count, and store that loop count as a parameter for the skill function.
43cltmissileaMonStartCurse - Validate and launch the client missile
44
MonStartHellMeteor - Create the following missiles: "hellmeteordown", "hellmeteorball", "hellmeteorup", "hellmeteorball", "hellmeteorlaunch1", "hellmeteorlaunch2"
45aurastate
cltoverlaya
cltoverlayb
DruStartWereWolf - Add the "cltoverlayb" overlay to the caster unit if the unit has the "aurastate" state. Otherwise, add the "cltoverlaya" overlay to the caster unit.
46aurastate aurastat1
cltmissilea
prgsound
MonStartBaalTaunt - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile. Create the "baal taunt control" missile. Play the "prgsound" sound.
47aurastate aurastat1
cltcalc1
cltmissilea cltmissileb
cltmissilec
MonStartCatapultDropMissile - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Create the missile and use the "cltcalc1" value to set the missile's fall rate.
48cltmissileaMonStartTeleport2 - Create the missile at the target location
49cltmissilea
cltmissileb
cltcalc1
MonStartVines - Create the "cltmissilea" missile. Use the "cltcalc1" value to control the number of created "cltmissileb" missiles.
50
MonStartDeathSentry - Validate the target enemy and store the target unit's location for the skill function
51
sMonStartFenrisRage - Validate the target enemy corpse. Store the target unit's location and unit class for the skill function.
52calc2MonStartInfernoSentry - Add the "inferno" state to the caster unit if it is not already added. Use the "calc1" field to control the animation frame tick and store the value for the skill function.
53calc1AmaStartFend2 - Find at least an initial valid target and track the max targets to attack using the "calc1" value. Have the caster unit face the target unit.

cltdofunc - [N] - Client Do function. This controls how the skill works when it finishes being cast, on the client side. This uses a code value to call a function, affecting how certain fields are used.

CodeParametersDescription
0
Do nothing
1
DoAttack - If this is a ranged attack, then launch the client missile. Otherwise, apply damage to the target.
2
DoThrow - If the weapon is a "Missile Potion" item type then launch a missile using the lob function. Otherwise, launch a missile with the normal linear function.
3
AssDoPsychicHammer - Validate the "AssStartPsychicHammer" function
4
AssDoDragonClaw - Check the number of attacks. Roll back the animation by 100%.
5prgcalc1
prgcalc2
prgcalc3
aurarangecalc
aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AssDoShockField - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Get the number of missiles using the "progcalc#" values, based on the number of progressive charges. Get the range by using the "aurarangecalc" field. Create the calculated number of missiles using the lob function.
6prgcalc1
prgcalc2
prgcalc3
aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AssDoBladeFury - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Get the number of missiles using the "progcalc#" values, based on the number of progressive charges. Every periodic delay create a client missile and set the Z position to 15. If the caster unit has the "inferno" state, then repeat the sequence do frame.
7aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AssDoDragonTail - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Create the client missile and set the caster unit's mode event.
8aurarangecalc
cltmissilea
cltmissileb
AssDoMindblast - Create the "cltmissilea" missile at the target location. Use the "aurarangecalc" field to calculate the area radius value of the missile. Set the missile's spawn class to "cltmissileb".
9prgcalc1
prgcalc2
prgcalc3
aurarangecalc
aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AssDoMissileDisc - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Get the number of missiles using the "progcalc#" values, based on the number of progressive charges. Get the radius by using the "aurarangecalc" field. Create a ring of client missiles where the number of missile depends on the size of the radius value.
10aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AssClawsOfThunderLvl2 - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Create the client missile where its velocity is calculated based on the skill level instead of the missile level.
11prgcalc1
prgcalc2
prgcalc3
aurarangecalc
aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AssClawsOfThunderLvl3 - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Get the number of missiles using the "progcalc#" values, based on the number of progressive charges. Use the "aurarangecalc" field to calculate the number of missiles. Create the client missiles using random pattern directions.
12prgoverlay
prgsound
aurastate
aurastat1


AssTigerStrike - Based on the "progressive" flag, if the caster unit has the "aurastate" state, or if the "aurastat1" field value is greater than 0, determine whether to add the overlay and sound on the caster unit. If the caster unit has progressive charges, then increase the index of the overlay and the sound by 1 per charge and add those overlay and sounds instead.
13prgoverlay
prgsound
aurastate
aurastat1
AssCobraStrike - Based on the "progressive" flag, if the caster unit has the "aurastate" state, or if the "aurastat1" field value is greater than 0, determine whether to add the overlay and sound on the target unit. If the caster unit has progressive charges, then increase the index of the overlay and the sound by 1 per charge and add those overlay and sounds instead.
14aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AssRoyalStrikeMeteorLvl1 - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Create the selected client missile at the target location.
15prgcalc1
prgcalc2
prgcalc3
aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AssRoyalStrikeChaosIce - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Get the number of missiles using the "progcalc#" values, based on the number of progressive charges. Create the number of selected client missiles using randomized directions.
16dosound a
dosound b
AmaDoJab - On the frame event of type "Sound", if the caster unit is a player then play the "dosound a" sound, or if the caster unit is a monster than play the "dosound b" sound
17cltmissilea
cltmissileb
calc1
calc2
AmaDoMultipleShot - If the weapon class is not equal to a "bow" then use "cltmissileb", otherwise use "cltmissilea". Use the "calc1" value to determine the number of missiles to create. Use the "calc2" value to determine the activation frame of the missiles. Create the missiles.
18aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
AmaDoGuidedArrow - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Create the selected client missile with flags of either following a target or going to a location to be retargeted later.
19aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
calc1
AmaDoChargedStrike - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Use the "calc1" value to determine the number of missiles to create. Create the missiles that move in a randomized path towards the direction.
20aurarangecalc
cltmissilea
cltmissileb
Param6
AmaDoStrafe - Use "aurarangecalc" to determine the skill range. The max targets and current target are controlled by a saved parameter. If the weapon class is not equal to a "bow" then use "cltmissileb", otherwise use "cltmissilea". Use the "Param6" value to determine the percentage of animation frames to rollback. Find the next target to attack. Create a client missile, making the caster unit face the direction, and update the target count parameter.
21Param2AmaDoFend - Use the weapon range to determine the skill range. Find the next valid target to attack and then update the maximum targets to attack next time. Use the "Param2" value to determine the percentage of animation frames to rollback. Based on the hit class, determine what weapon sound to play.
22aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
calc1
calc2
AmaDoLightningStrike - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Use the "calc1" value to determine the range of the missile to find the next target. Use the "calc2" value to determine the maximum number of chain hits for the missile. Create the missile targeting the target unit.
23aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
calc1
SorDoChargedBolt - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Use the "calc1" value to determine the number of missiles to create. Create the missiles that move in a randomized path towards the direction.
24cltmissilea
cltmissileb
calc1
SorDoInferno - Randomly select between either "cltmissilea" or "cltmissileb". Use the "calc1" value to determine the range of the missile. Create the client missile and adjust the caster unit's animation frames. If the caster unit still has the "inferno" state, then repeat the animation do frame.
25aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
cltcalc1
SorDoFrostNova - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Use the "cltcalc1" value to determine the additional velocity to add to the missiles created. Create a ring of missiles.
26cltmissilea
calc1
SorDoFirewall - Validate the target location. Validate that the missile create has a missile linked in its "SubMissile1" field (Missiles.txt). Use the "calc1" value to determine the maximum number of fire wall spawning missiles. Create 2 of the "cltmissilea" missiles thar are launched in opposite directions. Create 1 of the "cltmissilea" missile's sub missile.
27aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
cltcalc1
SorDoChainLightning - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Use the "calc1" value to determine the maximum number of chain hits for the missile. Create the missile targeting the target unit and update the number of chain hits in a parameter.
28aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
SorDoMeteor - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Validate that the target location is valid and then create the missile.
29aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
SorDoFrozenOrb - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch the selected client missile.
30aurarangecalc
cltmissilea
NecDoCurse - Use "aurarangecalc" to determine the radius of the skill and always subtract a value of 3 (Min value = 2). Create the client missile at the cursor location and also create a light at the location with RGB values equal to 255, 0, 0.
31aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
NecDoRaiseSkeleton - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch the selected client missile facing the directions saved in the parameters.
32cltmissilea
cltmissileb
cltmissilec
tgtsound
NecDoCExplosion - Create "cltmissilea" at the target location facing a random direction. If the target monster is "small" then spawn 1 "cltmissilea". If the target monster is "large" then spawn 3 "cltmissilea" missiles in a radius value of 3, and if that missile has a "SubMissile1" value, then also spawn 4 sub missiles in a radius value of 2. If the target monster is neither "small" nor "large", then spawn 2 "cltmissilea" missiles in a radius value of 2, and spawn 3 of its sub missiles in a radius value of 1. (Missiles.txt and MonStats2.txt). Spawn 1 "cltmissileb" normally. Spawn 1 "cltmissilec" missile with its level equal to 2. If there is no target enemy, then play the "tgtsound" sound.
33cltmissilea
cltmissileb
cltmissilec
tgtsound
NecDoPoisonExplosion - Create "cltmissilea" at the target location facing a random direction. Spawn an inner and outer radial ring of "cltmissileb" missiles, based on the missile's "Param1" and "Param2" values (Missiles.txt). Spawn 1 "cltmissilec" missile with its level equal to 2. If there is no target enemy, then play the "tgtsound" sound.
34cltmissilea
cltcalc1
PalDoSacrifice - Validate the target enemy and spawn the client missile in a random direction, where the missile can receive additional range that is randomly selected between 0 and the "cltcalc1" value.
35aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
PalDoBlessedHammer - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch the selected client missile with a spiral path.
36aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
PalDoFistOfHeavens - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch the selected client missile and save the target unit type and ID as parameters.
37
PalDoCharge - Setup a sequence of frames to play the animation. If the caster unit is a player or monster, then play its attack sound at the sound frame event. Set the unit's animation and frame length and order the unit to move to a location or the previously targeted unit. If the player does not need to move, then attack the target or a nearby target.
38
BarDoFindHeart - If the target is valid, then set the mode event and create blood missiles from the monster ("bleed" in MonStats2.txt)
39
BarDoDoubleSwing - If the caster unit's animation sequence frame is less than 6, then play the weapon sound and have the character turn to face the target. Otherwise, have the caster unit find a proper target and face that target.
40
BarDoFindItem - If the target is valid ("soft" MonStats2.txt), then set the mode event and create blood missiles from the monster ("bleed" in MonStats2.txt)
41cltmissilea
cltmissileb
cltmissilec
BarDoGrimWard - If the target is valid ("soft" MonStats2.txt) and there is valid space at that target's location, then create one of the following missiles. By default, use the "cltmissilea" missile. If the monster is large ("large" in MonStats2.txt), then use the "cltmissilec" missile. If the monster is small ("large" in MonStats2.txt), then use the "cltmissileb" missile. Also, always create a "corpseexplosion" missile.
42
BarDoDoubleThrow - Check that the attacking weapon is throwable and shoot a missile based on the weapon's missile class. If the weapon's item type is a "Missile Potion" (ItemTypes.txt), then use the lobbing missile launch function, otherwise use the normal linear missile launch function.
43
BarDoLeap - Check different flags and parameters to determine when to stop leaping. There are special cases to handle the "sandleadper1" and "ancientbarb1" monsters.
44
BarDoLeapAttack - Check different flags and parameters to determine when to stop leaping. After leaping, if there is a valid target, then attack the target.
45
BarDoWhirlwind - Continue to whirlwind based until at reaching the target location or if the skill flags have been changed.
46
MonDoMagottEgg - Set the unit's animation sequence rate to 0
47
MonDoMaggotDown - When the unit's animation frame reaches 0, then set the unit's animation sequence rate to 0
48cltmissilea


MonDoAndariel - Based on the unit's current direction, launch the missile in one of 8 directions
49calc1
calc2
MonDoSwarmMove - Set the unit's animation sequence start and stop frames based on the skill's calculation values
50
MonDoNest - Remove the monster collision at the target location
51cltmissileaMonDoGargoyleTrap - Launch the missile in one of 4 directions.
52
MonDoSubmerge - This equals the "MonDoMaggotDown" function (Code = 47)
53aurarangecalc
cltmissilea
cltcalc1
MonDoFetishAura - Create a disc of missiles where "aurarangecalc" controls the disc radius size (Minimum value = 1) and "cltcalc1" controls the density of missiles created (higher value means less missiles).
54cltmissilea
cltmissileb
calc1
sMonDoFetishInferno - Randomly create 2 of either "cltmissilea" or "cltmissileb" missiles. Use "calc1" to determine the range of the missile if it is greater than 0, otherwise use the missile's "Param2" value (Missiles.txt).
55cltmissilea
calc1
calc2
MonDoPrimePoisonNova - Creates 8 missiles in different directions using a velocity set by the missile's "Param1" value (Missiles.txt). Then uses "calc2" to control how many additional missiles to create using a velocity set by the missile's "Param2" value. Uses "calc1" to set the missile's subloops.
56cltmissilea
cltcalc1
calc1
MonDoDiabLight - Create the missile at an interval controlled by the "cltcalc1" value. Use "calc1" to determine the range of the missile if it is greater than 0, otherwise use the missile's "Param2" value (Missiles.txt). Also use the monster's inferno values to set the animation frames (MonStats2.txt)
57cltmissilea
calc1
MonDoFingerMageSpider - Create the missile with its subloops controlled by "calc1" and have that missile positioned and face the caster unit
58cltmissilea
calc1
MonDiabWallMaker - Create a number of missiles controlled by the "calc1" value where their pathing and direction is randomized
59calc1
Param1
Param2
Param3
Param4
Param5
Param6
MonDoDiabRun - Modifies the caster unit's movement speed by a percentage controlled by "calc1" and controls its animations to adhere to this run mode. The 6 parameter values controls the run animation's stop frame length, stop event frame, start event frame, start frame length, loop repeat event frame, loop frame length, and loop start event frame.
60cltmissilea
calc1
MonDoDesertTurret - Fire a number of missiles controlled by the "calc1" value that are directed in 8 possible directions
61cltmissileaMonDoArcaneTower - Fire missiles in all possible directions with particles
62Param1MonDoMosquito - Check that the caster unit cannot melee the target and then repeat the animation for a number of loops saved in a parameter, where "Param1" controls the frame to repeat the animation.
63cltmissilea
cltmissileb
MonDoRegurgitatorEat - Create 1 "cltmissilea" missile in a random direction. Create 5 "cltmissileb" missiles in a radius value of 4.
64
MonDoQueenDeath - Repeatedly loop the animation using hardcoded frame counts, and then set the unit to Dead mode when finished
65aurarangecalc
cltmissileb
MonDoCurseRadius - Find a valid target and create a "cursecenter" missile. Then create the "cltmissileb" missile with a radius controlled by "aurarangecalc"
66
MonDoHireFireMissile - Use the lob launch function or normal linear launch function when creating the missile
67aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
calc1
DruDoFirestorm - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch a number of selected client missiles, controlled by the "calc1" value. These missiles has randomized directions and pathing, and they have an increased animation rate.
68aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
calc1
DruDoTwister - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch a number of selected client missiles, controlled by the "calc1" value. These missiles start with a linear direction and then change to randomized pathing.
69aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
calc1
DruDoTornado - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch a number of selected client missiles, controlled by the "calc1" value. These missiles start with a linear direction and then change to randomized pathing, and they have an increased animation rate.
70aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
MonDoWakeofFire - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch the selected missile in the opposite direction.
71cltmissilea
cltmissileb
cltcalc1
cltcalc2
MonDoInferno - Randomly create 1 of either "cltmissilea" or "cltmissileb" missiles. Use "cltcalc1" to control the missile's Z offset. Use "cltcalc2" to control add to the missile's range, which is also determined by the missile's "Param2" value (Missiles.txt)
72aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
cltcalc1
MonDoImpFireBall - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch the missile to the target location. Use the "cltcalc1" value to control the missile's Z offset value.
73cltmissilebMonDoTeleport2 - Create the missile at the caster unit's location with its skill level set to 1
74cltmissilebMonDoTeleport3 - Create the missile at the caster unit's location with its skill level set to 1. Also create a particle and add it tothe target unit.
75Param1
Param2
Param3
Param4
MonDoSiegeBeastStomp - Shake the camera screen, where the parameters control the magnitude, shake build up duration, shake loop duration, and shake fade duration (controlled in frames where 25 frames = 1 second).
76cltmissilea
cltmissileb
calc1
MonDoDeathMauler - Continuously create "cltmissileb" missiles as the trail missile's using the missile's "Param1" and "Param2" values (Missiles.txt) to control the frequency and range/frames of the missile's creation. Create the "cltmissilea" missile with an animation rate controlled by "calc1", set this missile to not draw, and update its range and activation frame delay based on the "cltmissileb" missile's "Param1" and "Param2" values.
77cltmissilea
cltmissileb
cltcalc1
calc1
MonDoInfernoSentry - Randomly create 1 of either "cltmissilea" or "cltmissileb" missiles. Use "cltcalc1" to control the missile's Z offset. Use "calc1" to control the missile range duration. Repeat the Do frame while the caster unit has the "inferno" state.
78cltmissilea
cltmissileb
prgsound
MonDoDeathSentry - Create the "cltmissilea" missile at the target location and play the "prgsound" sound. Then create the "cltmissileb" missile at the target location.
79cltmissileaMonDoFenrisRage - Create the "cltmissilea" missile at the target location
80aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
calc1
calc2
MonDoBaalInferno - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Create a number of the selected missiles where "calc1" controls the number of missiles created, and "calc2" controls the range duration of the missiles. Repeat the Do frame while the caster unit has the "inferno" state.
81aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec


MonDoBaalCold - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Launch the selected missile to the target location.
82Param5
Param6
MonStartBaalCExplode - Use "Param5" and "Param6" to calculate the baseline and increase per skill level change in the radius to find a target. Search for valid dead targets and create a "baalcorpseexplodedelay" missile for each target found.
83prgcalc1
prgcalc2
prgcalc3
aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
aurarangecalc
Param2
ApplyRoyalStrikeLvl2 - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Get the number of missiles using the "progcalc#" values, based on the number of progressive charges, and if they are equal to or less than 0, then use the "aurarangecalc" value instead. Create the missile, using the "Param2" value to control the number of chain hits that the missile bounces.
84cltmissilea
prgoverlay
SorDoThunderStorm - Launch the missile at the target's position, with a starting Z position equal to 280 and a starting velocity equal to -40. Also add the overlay to the target unit.
85
ItemDoOpenWounds - Create a blood missile from the unit every 5 frames ("bleed" in MonStats2.txt)
86aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
aurarangecalc
PalDoSanctuary - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Use the "aurarangecalc" value to determine the radius to randomly create missiles and also the number of missiles to create.
87aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
cltcalc1
cltcalc2
cltcalc3
SorApplyShiverArmor - Based on the "progressive" flag, the "aurastate" field, or the "aurastat1" field, validate the "cltmissilea" missile or use the other missiles based on the "aurastat1" value. Create the selected missile using the lob function. Use "cltcalc1" to control the delay between creating missiles. Use "cltcalc2" to control the radius to create the missile. Use "cltcalc3" to control the vertical height of the missile when it is created.
88
MonApplyAttached - Attach the source unit on the caster unit.
89cltmissilec
cltmissiled
cltcalc1
MonDoVineBeast - Validate that the caster unit is a monster type. Validate that the skill used is the "Vine Attack" skill and get its stats, otherwise use a default level 1 "Vine Attack" skill. Use the "cltcalc1" value to determine the frame delay between creating missiles and also the minimum distance between missiles created. If the current mode of the unit is "Walk" then randomly choose between creating the "cltmissilec" or "cltmissiled" missile. If the current mode of the unit is "Neutral" then kill any existing old missile and create the "cltmissiled".
90cltmissilea
cltmissileb
cltmissilec
prgsound
cltcalc1
cltcalc2
DruDoHurricane - Play the "prgsound" sound and stop playing it if the caster unit is in town. Use "cltcalc1" to how many sets of 3 missiles to create at a time, at a random height. Randomly choose between one of the 3 missiles to create each time, and use "cltcalc2" to control the maximum Z height position of the missile.
91cltmissilea
cltmissileb


DruDoVolcano - Create both missiles at the valid target position
92cltmissilea
cltmissileb
cltcalc1
cltcalc2
cltcalc3
aurarangecalc
DruDoArmageddon - Create both missiles with a negative fall rate and slide rate. Use the "aurarangecalc" value to control a radius value, but this value is not used. Use the "cltcalc1" value to control the frame count for determining the starting height and offset. Use the "cltcalc2" value to control the missile fall rate per frame. Use the "cltcalc3" value to control the missile slide rate per frame.
93cltmissilebMonDoCorpseCycler - Validate the target unit, and create the "cltmissileb" missile on the target and 3 blood missiles ("bleed" in MonStats2.txt)
94cltmissileaMonDoDoomKnightMissile - Create the "cltmissilea" using either the lob function or the normal linear function, depending on the "lob" flag. Also select the missile or up to 3 index values higher, depending on the monster's graphics variation for the "Special 3" component variation.
95cltmissileaMonDoNecroMageMissile - Create the "cltmissilea" using either the lob function or the normal linear function, depending on the "lob" flag. Also select the missile or up to 3 index values higher, depending on the monster's graphics variation for the "Special 4" component variation.
96aurarangecalc
aurastate
aurastat1
cltmissilea
cltmissileb
cltmissilec
calc1
SorDoChainLightning2 - Based on the "progressive" flag or the "aurastate" field, create the "cltmissilea" missile. Otherwise, use one of the 3 client missiles based on the "aurastat1" value. Create the missile and use the "calc1" value to set the number of chain hits.

cltstopfunc - [N] - Client Stop function. This controls how the skill cleans up after ending. This uses a code value to call a function, affecting how certain fields are used. Only used for "Whirlwind"

CodeParametersDescription
0
Do nothing
1
SkillBarRemoveWhirlwind - Handles changing the collision and pathing of the caster, and also stops the whirlwind sound.

cltprgfunc1 - [N] - Controls which Client Do function is used when the skill is executed while having a progressive charge number equal to 1, 2, and 3, respectively. (uses cltdofunc values)

cltmissile - [O] - Used as a parameter for controlling what main missile is used for the client functions used (Missile field from Missiles.txt)

cltmissilea - [O] - Used as a parameter for controlling what secondary missile is used for the client functions used (Missile field from Missiles.txt)

cltcalc1 - [C] - Use as a possible parameter for controlling values for the client functions

warp - [B] - If equals 1 and the skill uses a function that involves warping/teleporting, then check for a scene transition loading screen, if necessary. If equals 0, then ignore this

immediate - [B] - If equals 1 and the skill has a periodic function, then immediately perform the skill's function when the periodic skill is activated. If equals 0, then wait until the skill's first periodic delay before performing the skill's function

enhanceable - [B] - If equals 1, then the skill will be included in the plus to all skills item modifier. If equals 0, then the skill will not be included in the plus to all skills item modifier

attackrank - Controls the skill's AI score value for determining what is the best target for the AI. The higher the value, then the more likely the AI will select a target with this skill equipped

noammo - [B] - If equals 1, then the skill will not check that weapon's ammo when performing an attack. This relies on the Shoots field from ItemTypes.txt. If equals 0, then the weapon will consume its ammo when being used by the skill

range - Determines how the unit uses the skill, which affects the weapon requirements and the type of attack used

CodeDescription
noneNo restrictions to use the skill
h2hThis is a melee skill, which requires a melee weapon
rngThis is a ranged skill, which requires a ranged weapon
bothThis is both a melee and ranged skill, which can use either a melee or ranged weapon
locThis is a location based skill, which ignores the weapon equipped and instead uses the player's location

weapsel - [N] - If the unit can dual wield weapons, then this field will control how the weapons are used for the skill

CodeDescription
0Use the Left or Right Hand weapon
1Use the Left Hand weapon
2Use the Left and/or Right Hand weapon
3Always use both weapons
4Ignore the weapon used

itypea1 - [O] - Controls what Item Types are included, or allowed, when determining if this skill can be used (Code field from ItemTypes.txt)

etypea1 - [O] - Controls what Item Types are excluded, or not allowed, when determining if this skill can be used (Code field from ItemTypes.txt)

itypeb1 - [O] - Controls what alternate Item Types are included, or allowed, when determining if this skill can be used (Code field from ItemTypes.txt). This acts as a second set of Item Types to check

etypeb1 - [O] - Controls what alternate Item Types are excluded, or not allowed, when determining if this skill can be used (Code field from ItemTypes.txt). This acts as a second set of Item Types to check

anim - [O] - Controls the animation mode that the player character will use when using this skill. Setting the mode to Sequence (SQ) will cause the player character to play a time controlled animation sequence, utilizing certain sequence fields. Referenced from the Token column in PlrMode.txt

seqtrans - [O] - Uses the same inputs as the anim field. If the "anim" field equals SQ (Sequence) and this field equals SC (Cast), then the sequence animation speed can be modified by the faster cast rate stat modifier

monanim - [O] - Controls the animat on mode that the monster will use when using this skill. This is similar to the anim field except with monster units using the skill instead of player units. Referenced from the Token column in MonMode.txt

seqnum - [N] - If the unit is a player and the anim used for the skill is a Sequence, then this field will control the index of which sequence animation to use. These sequences are specifically designed for certain skills, and each sequence has a set number of frames using certain animations.

CodeDescription
0 (or empty)Do nothing
1Jab
2Sacrifice
3Chastise
4Charge
5Defiance
6Inferno
7Strafe
8Impale
9Fend
10Whirlwind
11Double Swing
12Lightning
13Leap
14Leap Attack
15Double Throw
16Tiger Fist
17Projection
18Arctic Blast
19Triple Kick
20Dragon Breath
21Dragon Flight
22Druid Unmorph
23Assassin Blade Fury

seqinput - [N] - For skills that can repeat, this controls the number of frames to wait before the "Do" frame in the sequence. This acts as a delay in frames (25 Frames = 1 second) to wait within the sequence animation before it is allowed to be cast again or for looping back to the start of the sequence, such as for the Sorceress Inferno skill

durability - [B] - If equals 1 and when the player character ends an animation mode that was not Attack 1, Attack 2, or Throw, then check the quantity and durability of the player's items to see if the valid weapons are out of ammo or are broken. If equals 0, then ignore this

UseAttackRate - [B] - If equals 1, then the current attack speed should be updated after using the skill, relative to the "attackrate" stat (ItemStatCost.txt), and if the skill was an attacking skill. If equals 0, then the attack speed will not be updated after using the skill

LineOfSight - [N] - Controls the skill's collision filters for valid target locations when it is being cast

CodeDescription
0No collision filter
1Missile Barrier
2Player Path - Walls, no pathing, objects, doors, no player pathing
3Player Monster - Monsters, Players
4Player Flying - Missile barriers, doors
5Radial Barrier - Missile barriers, doors, walls

TargetableOnly - [B] - If equals 1, then the skill will require a target unit in order to be used. If equals 0, then ignore this

SearchEnemyXY - [B] - If equals 1, then when the skill is cast on a target location, it will automatically search in different directions in the target area to find the first available enemy target. If equals 0, then ignore this. This field can be overridden if the SearchEnemyNear field is enabled

SearchEnemyNear - [B] - If equals 1, then when the skill is cast on a target location, it will automatically find the nearest enemy target. If equals 0, then ignore this

SearchOpenXY - [B] - If equals 1, then automatically search in a radius of size 7 in around the clicked target location to find an available unoccupied location to use the skill, testing for collision. If equals 0, then ignore this. This field can be overridden if the SearchEnemyNear or SearchEnemyXY field is enabled

SelectProc - [N] - Uses a function to check that the target is a corpse with various parameters before validating the usage of the skill

CodeDescription
0Do nothing
1CorpseExplode - Check that the target is a corpse
2RaiseSkeleton - Check that the target is a monster corpse, and that the corpse was a unit that has a velocity (if the unit does not move, then the corpse cannot be used)
3Revive - Use the RaiseSkeleton function (Code = 2) and that the monser has a switchable AI
4HeartMonster - Check that the target is a monster corpse and that the monster has the "soft" flag enabled (MonStats2.txt)
5ItemMonster - Check that the target is a monster corpse
6WardMonster - Check that the target is a monster corpse and that the monster has the "soft" flag enabled (MonStats2.txt)

TargetCorpse - [B] - If equals 1, then the skill is allowed to target corpses. If equals 0, then skill cannot target corpses

TargetPet - [B] - If equals 1, then the skill is allowed to target pets (summons and mercenaries). If equals 0, then the skill cannot target pets

TargetAlly - [B] - If equals 1, then the skill is allowed to target ally units. If equals 0, then the skill cannot target ally units

TargetItem - [B] - If equals 1, then the skill is allowed to target items on the ground. If equals 0, then the skill cannot target items

AttackNoMana - [B] - If equals 1, then then when the caster does not have enough mana to cast the skill and attempts to use the skill, the caster will default to using the Attack skill. If equals 0, then attempting to use the skill without enough mana will do nothing

TgtPlaceCheck - [B] - If equals 1, then check that the target location is available for spawning a unit, testing collision. If equals 0, then ignore this. This is only used for skills that monsters use to spawn new units

KeepCursorStateOnKill - [B] - If equals 1, then the mouse click hold state will continue to stay active after killing a selected target. If equals 0, then after killing the target, the mouse click hold state will reset

ContinueCastUnselected - [B] - If equals 1, then while the mouse is held down and there is no more target selected, then the skill will continue being used at the mouse's location. If equals 0, then while the mouse is held down and there is no more target selected, then the player character will cancel the skill and move to the mouse location

ClearSelectedOnHold - [B] - If equals 1, then when the mouse is held down, the target selection will be cleared. If equals 0, then ignore this

ItemEffect - [N] - Uses a Server Do function ("srvdofunc") for handling how the skill is used when it is triggered by an item, on the server side

ItemCltEffect - [N] - Uses a Client Do function ("cltdofunc") for handling how the skill is used when it is triggered by an item, on the client side

ItemTgtDo - [B] - If equals 1, then use the skill from the enemy target instead of the caster. If equals 0, then ignore this

ItemTarget - [N] - Controls the targeting behavior of the skill when it is triggered by an item.

ItemUseRestrict – [B] - If equals 1, then use the state restriction defined in the restrict field from States.txt when being triggered by an item.

CodeDescription
0 (or empty)Default to targeting the attacker
1Target the caster
2Target a random location in a radius with a size of 20. Also tests collision.
3Target a random nearby corpse
4Target the attacker, and if that attacker is not found then target a previous attacker or the previous attacker's location

ItemCheckStart - [B] - If equals 1, then use the skill's srvstfunc when the skill is trigged by an item. If equals 0, then the skill's Server Start function is ignored

ItemCltCheckStart - [B] - If equals 1, then when the skill is triggered by an item, and if the target is dead and the skill has a cltstfunc, then add the "corpse_noselect" to the target. If equals 0, then ignore this

ItemCastSound - [O] - Play a sound when the skill is used by an item event. (Sound field from Sounds.txt)

ItemCastOverlay - [O] - Add a cast overlay when the skill is used by an item event. (overlay field from Overlay.txt)

skpoints - [C] - Controls the number of Skill Points needed to level up the skill

reqlevel - [N] - Minimum character level required to be allowed to spend Skill Points on this skill

maxlvl - [N] - Maximum base level for the skill from spending Skill Points. Skill levels can be increased beyond this through item modifiers

reqstr - [N] - Minimum Strength attribute required to be allowed to spend Skill Points on this skill

reqdex - [N] - Minimum Dexterity attribute required to be allowed to spend Skill Points on this skill

reqint - [N] - Minimum Intelligence attribute required to be allowed to spend Skill Points on this skill

reqvit - [N] - Minimum Vitality attribute required to be allowed to spend Skill Points on this skill

reqskill1 - [O] - Points to a Skill field to act as a prerequisite skill. The prerequisite skill must be least base level 1 before the player is allowed to spend Skill Points on this skill.

restrict - [N] - Controls how the skill is used when the unit has a restricted state (restrict field from States.txt)

CodeDescription
0None - The skill cannot be used when the unit has a restricted state
1Any - The skill can be used in when the unit has any restricted state
2State Only - The skill can only be used when the unit has a restricted state ("State1" to "State3")
3Pop State - The skill can be used at any time but when used, it will remove the unit's restrict States

State1 - [O] - Points to a state field from States.txt. Used as parameters for the restrict field to control what specific States will restrict the usage of the skill

localdelay - [C] - Controls the Casting Delay duration for this skill after it is used (25 frames = 1 second)

globaldelay - [C] - Controls the Casting Delay duration for all other skills with Casting Delays after this skill is used (25 frames = 1 second)

leftskill - [B] - If equals 1, then the skill will appear on the list of skills to assign for the Left Mouse Button. If equals 0, then the skill will not appear on the Left Mouse Button skill list

rightskill - [B] - If equals 1, then the skill will appear on the list of skills to assign for the Right Mouse Button. If equals 0, then the skill will not appear on the Right Mouse Button skill list

repeat - [B] - If equals 1 and the skill has no "anim" mode declared, then on the client side, the unit's mode will repeat its current mode (this can also happen if the unit has the "inferno" state). If equals 0, then the unit will have its mode set to Neutral when starting to use the skill

alwayshit - [B] - If equals 1, then skills that rely on attack rating and defense will ignore those stats and will always hit enemies. If equals 0, then ignore this

usemanaondo - [B] - If equals 1, then the skill will consume mana on its do function instead of its start function. If equals 0, then the skill will consume mana on its start function, which is the general case for skills

startmana - [N] - Controls the required amount of mana to start using the skill. This can control skills that reduce in mana cost per level to not fall below this amount. (srvst routine)

minmana - [N] - Controls the minimum amount of mana to use the skill. This can control skills that reduce in mana cost per level to not fall below this amount. (srvdo routine)

manashift - [N] - This acts as a multiplicative modifier to control the precision of the mana cost after calculating the total mana cost with the mana and lvlmana fields. Mana is calculated in 256ths in code which equals 8 bits. This field acts as a bitwise shift value, which means it will modify the mana value by the power of 2. For example, if this value equals 5 then that means divide the mana value of 256ths by 2^5 = 32 (or multiply the mana by 32/256). A value equal to 8 means 256/256 which means that the mana of 256ths value is not shifted

mana - [N] - Defines the base mana cost to use the skill at level 1

lvlmana - [N] - Defines the change in mana cost per skill level gained

interrupt - [B] - If equals 1, then the casting the skill will be interruptible such as when the player is getting hit while casting a skill. If equals 0, then the skill should be uninterruptible

InTown - [B] - If equals 1, then the skill can be used while the unit is in town. If equals 0, then the skill cannot be used in town

aura - [B] - If equals 1, then the skill will be classified as an aura, which will make the skill execute its function periodically (perdelay), based on the if the aurastate state is active. Aura skills will also override a preexisting state if that state matches the skill's "aurastate" state. If equals 0, then ignore this

periodic - [B] - If equals 1, then the skill will execute its function periodically (perdelay), based on the if the aurastate state is active. If equals 0, then ignore this

perdelay - [C] - Controls the periodic rate that the skill continuously executes its function. Minimum value equals 5. This field requires periodic or aura field to be enabled

finishing - [B] - If equals 1, then the skill will be classified as a finishing move, which can affect how progressive charges are consumed when using the skill and how the skill's description tooltip is displayed. If equals 0, then ignore this

prgchargestocast - [N] - Controls how many progressive charges are required to cast the skill

prgchargesconsumed - [N] - Controls how many progressive charges are consumed when the skill attack hits an enemy

passive - [B] - If equals 1, then the skill will be treated as a passive, which can mean that the skill will not show up in the skill selection menu and will not run a server do function. If equals 0, then the skill is an active skill that can be used

progressive - [B] - If equals 1, then the skill will use the progressive calculations to act as a charge-up skill that will add charges. This is only used for certain skill functions and will generally require the usage of the prgcalc1 and aurastat fields. If equals 0, then ignore this

scroll - [B] - If equals 1, then the skill can appear as a scroll version in the skill selection UI, if the skill allows for the scroll mechanics and if the player has the skill's scroll item in the inventory. If equals 0, then ignore this

calc1 - [C] - It is used as a possible parameter for skill functions or as a numeric input for other calculation fields

Param1 - [N] - It is used as a possible parameter for skill functions or as a numeric input for other calculation fields

InGame - [B] - If equals 1, then the skill is enabled to be used in-game. If equals 0, then the skill will be disabled in-game

ToHit - [N] - Baseline bonus Attack Rating that is added to the attack when using this skill at level 1

LevToHit - [N] - Additional bonus Attack Rating when using this skill, calculated per skill level

ToHitCalc - [C] - Calculates the bonus Attack Rating when using the skill. This will override the ToHit and LevToHit fields if it is not blank

ResultFlags - [N] - Controls different flags that can affect how the target reacts after being hit by the missile. Uses an integer value to check against different bit fields by using the "&" operator. For example, if the value equals 5 (binary = 101) then that returns true for both the 4 (binary = 100) and 1 (binary = 1) bit field values. Referenced by the Bit Field Value of the Result Flags Table

HitFlags - [N] - Controls different flags that can affect the damage dealt when the target is hit by the missile. Uses an integer value to check against different bit fields by using the "&" operator. For example, if the value equals 6 (binary = 110) then that returns true for both the 4 (binary = 100) and 2 (binary = 10) bit field values. Referenced by the Bit Field Value of the Hit Flags Table

HitClass - [N] - Defines the skill's damage routines when hitting, mainly used for determining hit sound effects and overlays. Uses an integer value to check against different bit fields by using the "&" operator. For example, if the value equals 6 (binary = 110) then that returns true for both the 4 (binary = 100) and 2 (binary = 10) bit field values. There are binary masks to check between Base Hit Classes and Hit Class Layers, which can distinguish bewteen overlays or sounds are displayed.

Bit Field ValueBinary Equivalent ValueDescription
Base Hit Classes
000000000None
100000001Hand to Hand
200000010One Handed Swing Small
300000011One Handed Swing Large
400000100Two Handed Swing Small
500000101Two Handed Swing Large
600000110One Handed Thrust
700000111Two Handed Thrust
800001000Club
900001001Staff
1000001010Bow
1100001011Crossbow
1200001100Claw
1300001101Do Overlay
Hit Class Layers
1600010000Double Layer
3200010100Fire Layer
4800011110Cold Layer
6401000000Lightning Layer
8001010000Poison Layer
9601100000Stun Layer
11201110000Bash Layer
12810000000Thorns Layer
14410010000Sanctuary Layer
16010100000Silent Voice Layer
17610110000Goo Layer

Kick - [B] - If equals 1, then a separate function is used to calculate the physical damage dealt by the skill, ignoring the following damage fields. This function will factor in the player character's Strength and Dexterity attributes (or Monster's level) to determine the baseline damage dealt. If equals 0, then ignore this

HitShift - [N] - Controls the percentage modifier for the skill's damage. This value cannot be less than 0 or greater than 8. This is calculated in 256ths.

ValueDescriptionPercentage
8256/256100%
7128/25650%
664/25625%
532/25612.5%
416/2566.25%
38/2563.125%
24/2561.5625%
12/256.78125%
01/256.390625%

SrcDam - [N] - Controls the percentage modifier for how much weapon damage is transferred to the skill's damage (Out of 128). For example, if the value equals 64, then 50% (64/128) of the weapon's damage will be added to the skill's damage

MinDam - [N] - Minimum baseline physical damage dealt by the skill

MinLevDam1 - [N] - Controls the additional minimum physical damage dealt by the skill, calculated using the leveling formula between 5 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17-22, 23-28, 29 and beyond. These 5 level thresholds correlate to each field number

MaxDam - [N] - Maximum baseline physical damage dealt by the skill

MaxLevDam1 - [N] - Controls the additional maximum physical damage dealt by the skill, calculated using the leveling formula between 5 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17-22, 23-28, 29 and beyond. These 5 level thresholds correlate to each field number

DmgSymPerCalc - [C] - Determines the percentage increase to the physical damage dealt by the skill

EType - [O] - Defines the type of elemental damage dealt by the skill. If this field is empty, then the related elemental fields below will not be used. Referenced by the Code value of the Elemental Types Table

EMin - [N] - Minimum baseline elemental damage dealt by the skill

EMinLev1 - [N] - Controls the additional minimum elemental damage dealt by the skill, calculated using the leveling formula between 5 level thresholds of the skill's current level. The level thresholds are levels 2-8, 9-16, 17-22, 23-28, 29 and beyond. These 5 level thresholds correlate to each field number

EMax - [N] - Maximum baseline elemental damage dealt by the skill

EMaxLev1 - [N] - Controls the additional maximum elemental damage dealt by the skill, calculated using the leveling formula between 5 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17-22, 23-28, 29 and beyond. These 5 level thresholds correlate to each field

EDmgSymPerCalc - [C] - Determines the percentage increase to the total elemental damage dealt by the skill

ELen - [N] - The baseline elemental duration dealt by the skill. This is calculated in frame lengths where 25 Frames = 1 second. These fields only apply to appropriate elemental types with a duration

ELevLen1 - [N] - Controls the additional elemental duration added by the skill, calculated using the leveling formula between 3 level thresholds of the missile's current level. The level thresholds are levels 2-8, 9-16, 17 and beyond. These 3 level thresholds correlate to each field number. These fields only apply to appropriate elemental types with a duration

ELenSymPerCalc - [C] - Determines the percentage increase to the total elemental duration dealt by the skill

aitype - [N] - Controls what the skill's archetype for how the AI will handle using this skill. This mostly affects the mercenary AI and Shadow Warrior AI, but some types are used for general AI.

CodeDescription
0None
1Buff
2Debuff
3Summon
4Melee
5Ranged
6Aura
7Teleport
8Heal
9Resurrect
10Passive
11Area Range
12Steal
13Move Attack

aibonus - [N] - This is only used with the Shadow Master AI. This value is a flat integer rating that gets added to the AI's parameters when deciding which skill is most likely to be used next. The higher this value, then the more likely this skill will be used by the AI

cost mult - [N] - Multiplicative modifier of an item's gold cost, only when the item has a stat modifier with this skill. This will affect the item's buy, sell, and repair costs (Calculated in 1024ths)

cost add - [N] - Flat integer modification of an item's gold cost, only when the item has a stat modifier with this skill. This will affect the item's buy, sell, and repair costs. This is added after the cost mult has modified the costs.

SkillDesc.txt

This file controls a skill's tooltip description and how it is displayed on the Skill Tree

Used by the following data files: Missiles.txt, Monstats.txt, Skills.txt


Data Fields

SkillDesc - [O] - The name of the skill description, as a reference for associated Data files

SkillPage - [N] - Determines which page on the Skill tree to display the skill

CodeDescription
0Do not display on any skill tree page
1Skill Tree Page 1
2Skill Tree Page 2
3Skill Tree Page 3

SkillRow - [N] - Determines which row on the Skill tree page to display the skill

CodeDescription
0Do not display on the skill tree page
1Row 1
2Row 2
3Row 3
4Row 4
5Row 5
6Row 6

SkillColumn - [N] - Determines which column on the Skill tree page to display the skill

CodeDescription
0Do not display on any skill tree page
1Left Column
2Middle Column
3Right Column

ListRow - [N] - Determines which row the skill will be listed in, for the skill select UI.

CodeDescription
0Common Skill Row
1Skill Tree 1 Row
2Skill Tree 2 Row
3Skill Tree 3 Row
(Other)Skill will not appear in the Skill Selection UI

IconCel - [N] - Determines the icon asset for displaying the skill, using the Frame# of the Sprite (See Common Folders). It will use Frame+1 for the "when pressed" icon visual. The sprite path can be changed in _ProfileHD.json or _ProfileLV.json

HireableIconCel - [N] - Determines the icon asset for displaying the skill, using the Frame# of the Sprite (See Common Folders). There is no "when pressed" icon visual. The sprite path can be changed in _ProfileHD.json or _ProfileLV.json

str name - [O] - Uses a string to display as the skill name

str short - [O] - Uses a string to display as the skill description in shortcuts or when selecting a skill

str long - [O] - Uses a string to display as the skill description on the Skill Tree

str alt - [O] - Uses a string to display the skill name on the Character Screen when the skill is selected

descdam - [N] - Use a function to calculate a skill's damage and determine how to display it. These functions sometimes require certain skill fields, especially the damage related fields.

CodeParametersDescription
0
null
1ddam calc1
ddam calc2
Calculates the basic Attack damage (Uses function 7)
"ddam calc1" is used as a percent bonus
"ddam calc2" is used as a flat number bonus
2
Calculates the character's kick damage
3
Calculates the character's throwing weapon damage
4
Calculates the character's left throwing weapon damage
5
Calculates damage using the equipped weapon damage and the linked skill's physical and elemental damage
6
Similar to function 5
Calculates the damage of the skill but with carry-over of elemental damage from the source, such as a missile direct hit and then a missile explosion
7ddam calc1
ddam calc2
Calculates the damage of a skill, including damage bonuses
"ddam calc1" is used as a percent bonus
"ddam calc2" is used as a flat number bonus
8ddam calc1
ddam calc2
Calculates the elemental damage of a skill as a periodic damage (every 25 frames = 1 second)
"ddam calc1" is used as a multiplier of the damage (If equals 0 then default to 1)
"ddam calc2" is used as a divisor of the damage (If equals 0 then default to 1)
9
Calculates the elemental damage of a skill as a periodic damage (every 25 frames = 1 second)
The damage is always multiplied by 3
10
Calculates damage based on the shield equipped and the damage provided by the skill Holy Shield.
Also adds a damage percent bonus based on the linked skill's Param3 & Param4 values, plus the stat bonuses from Strength and Dexterity
11
Calculates damage by obtaining the current weapon damage, and then adds the following:
Fire percent damage based on the linked skill's Calc1 field
Cold percent damage based on the linked skill's Calc2 field
Lightning percent damage based on the linked skill's Calc3 field
12
Calculates a skill's damage based on the status of the Concentration Aura state
If the game is in Expansion, then use the linked skill's Calc1 field to define the bonus damage when using Concentration
If the game is in Classic, then use the Concentration skill's damage percent increase to define the bonus damage when using Concentration
13
Calculates throwing damage, where it adds a damage percent bonus defined by the linked skill's Calc1 field
14
Calculates the damage of a skill, and uses the linked skill's Param5 field as an overall damage percent penalty
15
Calculates the total damage by adding a damage percent bonus from the linked skill's Param1 & Param2 linear increase calculation, the progressive increase from charges from the linked skill, and the boot damage
16
Calculates the total damage by adding a damage percent bonus from the linked skill's Calc1 value, the progressive increase from charges from the linked skill, and the boot damage
17ddam calc1
ddam calc2
Calculates the damage of a skill and displays the physical damage and the elemental damage separately
"ddam calc1" is used as a percent bonus
"ddam calc2" is used as a flat number bonus
18ddam calc1
ddam calc2
Calculates the damage of a skill, including damage bonuses (Uses function 7)
"ddam calc1" is used as a percent bonus
"ddam calc2" is used as a flat number bonus
19ddam calc1
ddam calc2
Calculates the damage of a dual wielding attack. If not dual wielding, then it calculates a normal attack damage
"ddam calc1" is used as a percent bonus
"ddam calc2" is used as a flat number bonus
20ddam calc1
ddam calc2
Same as function 19, but does not add elemental damage
21
Calculates the throwing weapon damage with the linked skill's elemental damage added
22
Calculates the throwing weapon damage for dual wielding throwing weapons and displays them as two values
23
Calculates the damage of a skill and displays the physical damage and elemental damage separately
(Similar to function 17)
24
Calculates damage using the equipped weapon damage and the linked skill's physical and elemental damage
(Similar to function 5)
25ddam calc1
ddam calc2
Same as function 5 with a percentage multiplier to min and max.
26ddam calc1
ddam calc2
Calculates weapon damage and skill damage as two values.

ddam calc1 - [C] - Integer calc value used as a possible parameter for the descdam function

p1dmelem - [O] - Used for skills that have charge-ups to display the damage on the Character Screen, controls the elemental type for that charge

p1dmmin - [C] - Used for skills that have charge-ups to display the damage on the Character Screen, controls the minimum damage for that charge

p1dmmax - [C] - Used for skills that have charge-ups to display the damage on the Character Screen, controls the maximum damage for that charge

descatt - [N] - Used to display the overall Attack Rating of the skill in the Character Screen

CodeDescription
0null
1Displays the overall Attack Rating the character's primary weapon
2If the character can dual wield two weapons, then display the overall Attack Rating for each weapon
3Displays the overall Attack Rating for throwing the right-hand weapon
4Displays the overall Attack Rating for throwing the left-hand weapon
5Displays the overall Attack Rating for a skill marked with the "finishing" flag

descmissile1 - [O] - Links a missile from Missiles.txt to be used as a reference value for calculations

descline1 - [N] - Uses an ID value to select a description function to format the string value. Displays this text as the current level and next level description lines in the skill tooltip.

CodeParametersDescription
0 (or empty)
None
13desctexta
desccalca
desccalcb
Calculates the Life value of the monster referenced from the "summon" field in the linked skill. Also multiplies this value with [desccalca] as a Life Percent bonus or adds to this value with [desccalcb] as a Life Add bonus.

Inserts this calculated Life value into [desctexta] and output that string

31desctexta
desctextb
desccalca
desccalcb
Performs the calculation using the "AiCurseDivisor" from DifficultyLevels.txt based on the current game's difficulty mode: [desccalca] / [AiCurseDivisor] / [desccalcb]

If this value is equals to 1, then insert the calculated value into [desctexta] and output that string
If this value is greater than or less than 1, then insert the calculated value into [desctextb] and output that string

34desctextaCalculates the Damage value of the monster referenced from the "summon" field in the linked skill. Then this function inserts that value into [desctexta] and outputs that string
36desctexta
desctextb
desccalca
desccalcb
Performs the calculation of a value: [desccalca] / [desccalcb]

If this value is equals to 1, then insert the value into [desctexta] and output that string
If this value is greater than or less than 1, then insert the value into [desctextb] and output that string

40desctexta
desctextb
desccalca
Use [desccalca] as a code to change the color of the string

0 = White (R=255, G=255, B=255)
1 = Red (R=255, G=77, B=77)
2 = Green (R=0, G=255, B=0)
3 = Blue (R=105, G=105, B=255)
4 = Light Gold (R=199, G=179, B=119)
5 = Grey (R=105, G=105, B=105)
6 = Black (R=0, G=0, B=0)
7 = Dark Gold (R=208, G=194, B=125)
8 = Orange (R=255, G=168, B=0)
9 = Yellow (R=255, G=255, B=100)
10 = Dark Green (R=0, G=128, B=0)
11 = Purple (R=174, G=0, B=255)
12 = Medium Green (R=0, G=200, B=0)

Inserts [desctextb] into [desctexta] and outputs that string

56
Gets the quantity of the item that is connected to the linked skill and inserts this value into the "scrollbooktext" string and outputs that string
74desctexta
desccalca
Inserts [desccalca] into [desctexta] and outputs that string
75desctexta
desccalca
desccalcb
Inserts [desccalca] and [desccalcb] into [desctexta] and outputs that string
76desctexta
desctextb
desccalca
Inserts [desctextb] and [desccalca] into [desctexta] andoutputs that string
77desctexta
desctextb
desccalca
desccalcb
Inserts [desctextb], [desccalca], and [desccalcb] into [desctexta] and outputs that string

desctexta1 - [O] - String value used as the first possible string parameter for the descline1 function

desctextb1 - [O] - String value used as the second possible string parameter for the descline1 function

desccalca1 - [C] - Integer calculation value used as the first possible numeric parameter for the descline1 function

desccalcb1 - [C] - Integer calculation value used as the second possible numeric parameter for the descline1 function

dsc2line1 - [N] - Uses an ID value to select a description function to format the string value. Displays this text as a pinned line, after the skill description. (Uses the same function codes as descline1)

dsc2texta1 - [O] - String value used as the first possible string parameter for the dsc2line1 function

dsc2textb1 - [O] - String value used as the second possible string parameter for the dsc2line1 function

dsc2calca1 - [C] - Integer Calc value used as the first possible numeric parameter for the dsc2line1 function

dsc2calcb1 - [C] - Integer Calc value used as the second possible numeric parameter for the dsc2line1 function

dsc3line1 - [N] - Uses an ID value to select a description function to format the string value. Displays this text as a pinned line at the bottom of the skill tooltip. (Uses the same function codes as descline1)

dsc3texta1 - [O] - String value used as the first possible string parameter for the dsc3line1 function

dsc3textb1 - [O] - String value used as the second possible string parameter for the dsc3line1 function

dsc3calca1 - [C] - Integer Calc value used as the first possible numeric parameter for the dsc3line1 function

dsc3calcb1 - [C] - Integer Calc value used as the second possible numeric parameter for the dsc3line1 function

Sounds.txt

Thisfile controls settings for all sounds in the game

The order of each sound defined in this file will convey what ID value it has. This existing order should not be changed.


Data Fields

Sound - [O] - Defines the unique name ID for the sound, which is how other files can reference the sound

Redirect - [O] - Points the sound so the index of another sound in the data file. If this field is not empty, the game will use the redirected sound instead of this sound. This can be used when playing the game in the new graphics mode

Channel - [O] - Declares which channel the sound is initialized in. This can affect how different volume or sound settings handle this sound.

FileName - [O] - Defines the file path and name of the sound file to play

IsLocal - [B] - If equals 1, then this sound is considered a localized sound and will change based on the game's localization setting. If equals 0, then ignore this

IsMusic - [B] - If equals 1, then the sound is flagged as a music sound, which affects how music related settings handle this sound. If equals 0, then ignore this

IsAmbientScene - [B] - If equals 1, then the sound is flagged as an ambient scene sound, which affects how the game handles the sound when the player transitions between areas. If equals 0, then ignore this

IsAmbientEvent - [B] - If equals 1, then the sound is flagged as an ambient event sound, which affects how the game treats the sound when the player transitions between areas. If equals 0, then ignore this

IsUI - [B] - If equals 1, then the sound is flagged as a UI sound, which affects how UI related settings handle this sound. If equals 0, then ignore this

Volume Min - [N] - Controls the minimum volume of the sound. Uses a range of 0 to 255

Volume Max - [N] - Controls the maximum volume of the sound. If both Volume Min and Volume Max fields differ in value, then the sound will randomly select a volume value in between these values when it is played. Uses a range of 0 to 255

Pitch Min - [N] - Controls the minimum pitch percentage of the sound

Pitch Max - [N] - Controls the maximum pitch percentage of the sound. If both Pitch Min and Pitch Max fields differ in value, then the sound will randomly select a pitch value in between these values when it is played

Group Size - [N] - Defines a sound Group by declaring a size value. When the sound has this value greater than 0, then this sound is declared as the group's base sound. Any link to use a sound should use the base sound, to signify that the game should use this group of sounds. This field's value controls the number of sounds indexed after base sound that should be added to the group. For example, if the sound has a "Group Size" value equal to 5, then this sound is declared as the group's base sound, and the next 4 sounds indexed after this base sound will be added to the group

Group Weight - [N] - Controls the chance to pick the sound when it is part of a group with other sounds. If all sounds in the group do not have a "Group Weight" value, then the group sounds will play in historical order. This value controls a weighted random chance, meaning that all related sounds have their weights added together for a total chance and each sound's weight value is rolled against that total value to determine if the sound is successfully picked. The higher this value, the more likely the sound will be picked. This is only used when the sound is part of a group ("Group Size")

Loop - [B] - If equals 1, then the sound will replay itself after it finishes playing. If equals 0, then the sound will only play once

Fade In - [N] - Controls how long to gradually increase the sound's volume starting from 0 when the sound starts playing. Measured in audio game ticks, where 1 game frame is 40 audio ticks, and the game runs at 25 frames per second

Fade Out - [N] - Controls how long to gradually decrease the sound's volume to 0 when the sound stops playing. Measured in audio game ticks, where 1 game frame is 40 audio ticks, and the game runs at 25 frames per second

Defer Inst - [B] - If equals 1, then when a duplicate instance of this sound plays the game will stop that request. If equals 0, then ignore this

Stop Inst - [B] - If equals 1, then when a duplicate instance of this sound plays the previous instance of the sound will stop and the new instance of the sound will play. If equals 0, then ignore this

Duration - [N] - Controls the length of time to play the sound. When the sound has been playing for this length of time, then the sound will stop. If this equals 0, then ignore this functionality

Compound - [N] - Controls the game tick time limit for when a sound can join in playing based on the previous sound played in the Group. If equals 0, then the sound will not be compounded

Falloff - [N] - Defines the range of falloff for hearing the sound, based on distance. Uses a code to determine the range value presets.

CodeDescription
0Short - falloff range is 60 to 400 pixels
1Medium - falloff range is 60 to 700 pixels
2Large - falloff range is 200 to 1000 pixels
3Ambient - falloff range is 400 to 1500 pixels
4Voice - falloff range is 2000 pixels (no falloff)

LFEMix - [N] - Controls the percentage (out of 100) of the sound's Low-Frequency Effects channel

3dSpread - [N] - Controls the 3D spread angle of the sound. This only works if the sound is considered a 3D sound (Is2D)

Priority - [N] - Controls which if the sound should play before other sounds when too many sounds are playing at once. This value is compared to the priority value of other sounds, and the sound that has the higher priority will play first. Sounds belonging to the player will get an increased priority value of 80

Stream - [B] - If equals 1, then the sound will be file streamed into the game when called to play. If equals 0, then the entire sound will be loaded into the game before playing

Is2D - [B] - If equals 1, then the sound is considered a 2D sound and will not have 3D spread settings. If equals 0, then the sound is considered a 3D sound and will use the 3D spread settings

Tracking - [B] - If equals 1, then the sound will track a unit and will update its position to follow that unit. If equals 0, then the sound will not move and will be stationary

Solo - [B] - If equals 1, then reduce the volume of other sounds while this sound is playing. If equals 0, then ignore this

Music Vol - [B] - If equals 1, then the sound's volume will be affected by the music volume in the game options menu. If equals 0, then ignore this

Block 1 - [N] - Defines an offset time value in the sound. If this sound is used in a Sound Environment then these fields control when to periodically update the current song sound to an offset. If this sound is not used in a Sound Environment and Block 1 is used and the Loop field is enabled, then use this block value as the time in the sound when to start looping. If this equals -1, then the field is ignored

HDOptOut - [B] - If equals 1, then the sound will not play in the new graphics mode. If equals 0, then the sound will play in the new graphics mode

Delay - [N] - Adds a delay to the starting tick of the sound when the sound starts playing. Measured in audio game ticks, where 1 game frame is 40 audio ticks, and the game runs at 25 frames per second.

SoundEnviron.txt

This file controls the music and ambient sounds that are played while the player is in the area level

The order of each Sound Environment defined in this file will convey what ID value it has

This file points to a Sound entry from Sounds.txt for all it's entries

This file is used by Levels.txt


Data Fields

Handle - [O] - A reference field to define the name of the Sound Environment

Index - [O] - A reference field to define the ID/Index for the Environment

Song - [O] - Play this sound as the background music while the player is in an area level

Day Ambience - [O] - Play this sound as an ambient sound while it is currently daytime in the game

HD Day Ambience - [O] - Play this sound as an ambient sound while it is currently daytime in the game while playing in the new graphics mode

Night Ambience - [O] - Play this sound as an ambient sound while it is currently nighttime in the game

HD Night Ambience - [O] - Play this sound as an ambient sound while it is currently nighttime in the game while playing in the new graphics mode

Day Event - [O] - Play this sound at a random range and variance in the background when it is currently daytime in the game

HD Day Event - [O] - Play this sound at a random range and variance in the background when it is currently daytime in the game while playing in the new graphics mode

Night Event - [O] - Play this sound at a random range and variance in the background when it is currently nighttime in the game

HD Night Event - [O] - Play this sound at a random range and variance in the background when it is currently nighttime in the game while playing in the new graphics mode

Event Delay - [N] - Controls the baseline number of frames to wait before playing the Day Event or Night Event sound, depending on the time of day. This only applies when the game is being played in SD mode. This value is used in the following calculation to get a random time to play the next event sound: [Event Delay] - [Event Delay] / 3 + RANDOM(0, ([Event Delay] / 3 * 2 + 1))

HD Event Delay - [N] - Controls the baseline number of frames to wait before playing the Day Event or Night Event sound, depending on the time of day. This only applies when the game is being played in the new graphics mode. This value is used in the following calculation to get a random time to play the next event sound: [Event Delay] - [Event Delay] / 3 + RANDOM(0, ([Event Delay] / 3 * 2 + 1))

Indoors - [B] - If equals 1 then, if the current sound being played in the area level with this Sound Environment is "event_thunder_1", then the sound will be obstructed. If equals 0, then ignore this

Material 1 - [N] - Controls the material of the Sound Environment, which affects which footstep sounds are played. Uses a code to define a specific material.

CodeDescription
0None
1Dirt
2Indoor Stone
3Outdoor Stone
4Sand
5Snow
6Wood

HD Material 1 - [N] - Controls the material of the Sound Environment, which affects which footstep sounds are played. Uses a code to define a specific material. This only applies when the game is being played in the new graphics mode. See Material 1 for the code descriptions.

SFX EAX Environ - [N] - Determines an environment preset for default sound reverberation settings.

CodeDescription
0Generic
1Padded Cell
2Room
3Bathroom
4Livingroom
5Stone Room
6Auditorium
7Concert Hall
8Cave
9Arena
10Hanger
11Carpeted Hallway
12Hallway
13Stone Corridor
14Alley
15Forest
16City
17Mountains
18Quarry
19Plain
20Parking Lot
21Sewer Pipe
22Underwater
23Drugged
24Dizzy
25Psychotic
26Programmer Test (A long distant echo)

SFX EAX Room Vol - [N] - Room effect level at mid frequencies

SFX EAX Room HF - [N] - Relative room effect level at high frequencies

SFX EAX Decay Time - [N] - Reverberation decay time at mid frequencies

SFX EAX Decay HF - [N] - High-frequency to mid-frequency decay time ratio

SFX EAX Reflect - [N] - Early reflections level relative to room effect

SFX EAX Reflect Delay - [N] - Initial reflection delay time

SFX EAX Reverb - [N] - Late reverberation level relative to room effect

SFX EAX Rev Delay - [N] - Late reverberation delay time relative to initial reflection.

The following are sound reverberation settings for Voice sounds

VOX EAX Environ - [N] - Determines an environment preset for default sound reverberation settings.

CodeDescription
0Generic
1Padded Cell
2Room
3Bathroom
4Livingroom
5Stone Room
6Auditorium
7Concert Hall
8Cave
9Arena
10Hanger
11Carpeted Hallway
12Hallway
13Stone Corridor
14Alley
15Forest
16City
17Mountains
18Quarry
19Plain
20Parking Lot
21Sewer Pipe
22Underwater
23Drugged
24Dizzy
25Psychotic
26Programmer Test (A long distant echo)

VOX EAX Room Vol - [N] - Room effect level at mid frequencies

VOX EAX Room HF - [N] - Relative room effect level at high frequencies

VOX EAX Decay Time - [N] - Reverberation decay time at mid frequencies

VOX EAX Decay HF - [N] - High-frequency to mid-frequency decay time ratio

VOX EAX Reflect - [N] - Early reflections level relative to room effect

VOX EAX Reflect Delay - [N] - Initial reflection delay time

VOX EAX Reverb - [N] - Late reverberation level relative to room effect

VOX EAX Rev Delay - [N] - Late reverberation delay time relative to initial reflection

InheritEnvironment - [B] - If equals 1, then this sound environment will inherit certain values from the existing environment and overwrite other values with its own.

Overwritten Values
Song
Day Ambience
HD Day Ambience
Night Ambience
HD Night Ambience
Day Event
HD Day Event
Night Event
HD Night Event
Event Delay
HD Event Delay

States.txt

This file defines the different States used by the game and controls how they function. States are basically passive behaviors applied to units that can apply various effects.

This file is used by the following data files: CubeMain.txt, MonProp.txt, Overlay.txt, Runes.txt, Sets.txt, SetItems.txt, Skills.txt, UniqueItems.txt


Data Fields

state - [O] - Defines the unique name ID for the state

group - [N] - Assigns the state to a group ID value. This means that only 1 state with that group ID can be active at any time on a unit. If this value is empty, then ignore this

remhit - [B] - If equals 1, then this state will be removed when the unit is hit. If equals 0, then ignore this

nosend - [B] - If equals 1, then this state change will not be sent to the client. If equals 0, then ignore this

transform - [B] - If equals 1, then this state will be flagged to change the unit's appearance and reset its animations when it is applied. If equals 0, then ignore this

aura - [B] - If equals 1, then this state will be treated as an aura. If equals 0, then ignore this

curable - [B] - If equals 1, then this state can be cured (This can be checked by NPC healing or the Paladin Cleansing skill). If equals 0, then ignore this

curse - [B] - If equals 1, then this state will be flagged as a curse. If equals 0, then ignore this

active - [B] - If equals 1, then the state will be classified as an active state which enables the cltactivefunc and srvactivefunc fields. If equals 0, then ignore this

restrict - [B] - If equals 1, then this state will restrict the usage of certain skills (This connects with the restrict field from the Skills.txt file). If equals 0, then ignore this

disguise - [B] - If equals 1, then this state will be flagged as a disguise, meaning that the unit's appearance is changed, which can affect how the animations are treated when being used. If equals 0, then ignored this

attblue - [B] - If equals 1, then the state will make the related Attack Rating value in the character screen be colored blue. If equals 0, then ignore this

damblue - [B] - If equals 1, then the state will make related Damage value in the character screen be colored blue. If equals 0, then ignore this

armblue - [B] - If equals 1, then the state will make Defense value (Armor) in the character screen be colored blue. If equals 0, then ignore this

rfblue - [B] - If equals 1, then the state will make Fire Resistance value in the character screen be colored blue. If equals 0, then ignore this

rlblue - [B] - If equals 1, then the state will make Lightning Resistance value in the character screen be colored blue. If equals 0, then ignore this

rcblue - [B] - If equals 1, then the state will make Cold Resistance value in the character screen be colored blue. If equals 0, then ignore this

stambarblue - [B] - If equals 1, then the state will make the Stamina Bar UI in the HUD be colored blue. If equals 0, then ignore this

rpblue - [B] - If equals 1, then the state will make Poison Resistance value in the character screen be colored blue. If equals 0, then ignore this

attred - [B] - If equals 1, then the state will make the related Attack Rating value in the character screen be colored red. If equals 0, then ignore this

damred - [B] - If equals 1, then the state will make related Damage value in the character screen be colored red. If equals 0, then ignore this

armred - [B] - If equals 1, then the state will make Defense value (Armor) in the character screen be colored red. If equals 0, then ignore this

rfred - [B] - If equals 1, then the state will make Fire Resistance value in the character screen be colored red. If equals 0, then ignore this

rlred - [B] - If equals 1, then the state will make Lightning Resistance value in the character screen be colored red. If equals 0, then ignore this

rcred - [B] - If equals 1, then the state will make Cold Resistance value in the character screen be colored red. If equals 0, then ignore this

rpred - [B] - If equals 1, then the state will make Poison Resistance value in the character screen be colored red. If equals 0, then ignore this

exp - [B] - If equals 1, then a unit with this state will give exp when killed or will gain exp when killing another unit. If equals 0, then ignore this

plrstaydeath - [B] - If equals 1, then the state will persist on the player after that player is killed. If equals 0, then ignore this. state stays after death

monstaydeath - [B] - If equals 1, then the state will persist on the monster (non-boss) after that monster is killed. If equals 0, then ignore this

bossstaydeath - [B] - If equals 1, then the state will persist on the boss after that boss is killed. If equals 0, then ignore this

hide - [B] - If equals 1, then the state will hide the unit when dead (corpse and death animations will not be drawn). If equals 0, then ignore this

hidedead - [B] - If equals 1, then the state will be used to destroy units with invisible corpses. If equals 0, then ignore this

shatter - [B] - If equals 1, then the state causes ice shatter missiles to create when the unit dies. If equals 0, then ignore this

udead - [B] - If equals 1, then the state flags the unit as a used dead corpse and the unit cannot be targeted for corpse skills. If equals 0, then ignore this

life - [B] - If equals 1, then this state will cancel out the monster's normal life regeneration. If equals 0, then ignore this

green - [B] - If equals 1, then the state overrides the color changes the unit and the unit will be colored green. If equals 0, then ignore this

pgsv - [B] - If equals 1, then the state is flagged as part of a progressive skill which relates to charge-up skill functionalities. If equals 0, then ignore this

nooverlays - [B] - If equals 1, then the standard way for States to add overlays will be disabled. If equals 0, then ignore this

noclear - [B] - If equals 1, then when this state is applied on the unit, it will not clear stats that have this state from the state's previous application. If equals 0, then ignore this

bossinv - [B] - If equals 1, then the unit with this state will use the state's source unit's (in this case, the unit's boss) inventory for generating the unit's equipped item graphics. If equals 0, then ignore this

meleeonly - [B] - If equals 1, then the state will make the all the unit's attack become melee attacks. If equals 0, then ignore this

notondead - [B] - If equals 1, then the state will not play its On function (function that happens when the state is applied) if the unit is dead. If equals 0, then ignore this

overlay1 - [O] - Controls which overlay to use for normally displaying the state (Uses the overlay field from Overlay.txt). The usage depends on the specific state defined and/or the function using the state. Typically, States use "overlay1" for the Front overlay and "overlay2" for the Back overlay. Other cases can have States use each overlay field as the Front Start, Front End, Back Start, and Back End, respectively

pgsvoverlay - [O] - Controls which overlay to use when the state has progressive charges on the unit, such as for the charge-up stat when using Assassin Martial Arts charge-up skills (Uses the overlay field from Overlay.txt)

castoverlay - [O] - Controls which overlay to use when the state is initially applied on the unit (Uses the overlay field from Overlay.txt)

removerlay - [O] - Controls which overlay to use when the state is removed from the unit (Uses the overlay field from Overlay.txt)

stat - [O] - Controls the stat associated with the stat. This is also used when determining how to add the progressive overlay (Uses the Stat field from ItemStatCost.txt)

setfunc - [N] - Controls the client side set functions for when the state is initially applied on the unit

CodeParametersDescription
0
Do nothing
1statCreates the overlay used for a progressive state. Can only be used if the pgsv flag is enabled and the pgsvoverlay field has a value.
2
Changes the area level's room lighting based on a skill's aurarangecalc field from the Skills.txt file. Gets the skill by looking at the "modifierlist_skill" stat defined in ItemStatsCost.txt
3
Updates a skill's level. Gets the skill by looking at the "modifierlist_skill" stat defined in the ItemStatsCost.txt file.
4
Sets the source unit for the state. Gets the "source_unit_type" and "source_unit_id" stats defined in the ItemStatsCost.txt file.
5
Changes the monster's class type to another monster's class type. Gets the "shortparam1" stat defined in the ItemStatsCost.txt file and uses stat's parameter to get the class type that the unit should change to. Only works for monster units. Has a special case where if the class the monster changed from was the "baalthrone" monster (defined in monstats.txt), then also set the path of the monster to move a direction.
6
Gets the skill by looking at the "modifierlist_skill" stat defined in the ItemStatsCost.txt file and then creates the overlays defined in the "castoverlay" and "overlay#" fields
7
Plays a sound from the "prgsound" field of a skill from the Skills.txt file. Gets the skill by looking at the "modifierlist_skill" stat defined in the ItemStatsCost.txt file.
8
Gets the skill by looking at the "modifierlist_skill" stat defined in the ItemStatsCost.txt file and then creates the overlays defined in the "overlay1", "overlay2" and "overlay3" fields
9
Calls the updates passive skills function which updates the values of any skill with a "passivestate" field defined in the Skills.txt file
10skillCreates the missile defined in the "skill" parameter's "cltmissile" field and hides the targeted unit
11
Hides the unit, by disabling the drawing of its visuals
12
Hides the unit, by disabling the drawing of its visuals and shadows
13
Initializes the particle for attaching to the unit by getting the offset of the source unit's Special component
14
Tells the unit to use the "SKILL1" command and resets its direction
15
Sets the monster mode to neutral and sets its flag to a pet
16
Sets up the overlays for a charge up skill. Gets the skill by looking at the "modifierlist_skill" stat defined in the ItemStatsCost.txt file. Applies all the overlays defined the "overlay#" fields, based on the number of skill charges on the unit.
17missileCreates the missile defined in the "missile" parameter
18missileCreates blood on the targeted unit and creates the missile defined in the "missile" parameter
19
Sets the global skill cooldown to 0

remfunc - [N] - Controls the client side remove functions for when the state is removed from the unit

CodeDescription
0Do nothing
1Removes the "pgsvoverlay" overlay. This function relies on the "pgsv" being enabled.
2Removes the state's source unit
3Removes the overlays defined in the "castoverlay" and all of the "overlay#" fields
4Removes the "cltprgsound" from the related skill. To get the skill, this looks at the "modifierlist_skill" stat defined in the ItemStatsCost.txt file.
5Removes the overlays defined in the "castoverlay", "overlay1", "overlay2", and "overlay3" fields
6Calls the updates passive skills function which updates the values of any skill with a "passivestate" field defined in the Skills.txt file
7Checks that the related unit is a monster and that the skill used is the "Nest" skill defined in the Skills.txt file. If true, then it removes the related unit's collision pattern.
8Hides the unit, by disabling the drawing of its visuals and shadows
9Removes particles attached to the unit or the position of the unit
10Gets the related unit's position and creates a "monstercorpseexplode" and "pain worm appear" missile defined from the Missiles.txt file
11Removes the overlays defined in all of the "overlay#" fields
12Sets the global skill cooldown to 0

missile - [O] - Used as a possible parameter for the setfunc field (Uses the Missile field from Missiles.txt)

skill - [O] - Used as a possible parameter for the setfunc field (Uses the Skill field from Skills.txt)

itemtype - [O] - Defines a potential ItemType that can be affected by the state's color change

itemtrans - [O] - Controls the color change of the item when the unit has this state. Referenced from the Code column in Colors.txt

colorpri - [N] - Defines the priority of the state's color change, when compared to other current sates on the unit. The current state that has the highest color priority on the unit will be used and other state colors will be ignored. If multiple current States share the same color priority value, then the game will choose the state with the lower ID value (based on where in the list of States in the data file that the state is defined)

colorshift - [N] - Controls which index of the color shift palette to use.

IDDescription
0 (or empty)Do nothing
1First Hue Rotation
25First Hue Rotation and Darken
49First Hue Rotation and Lighten
73Color to Grey
74Color to Black
75First No Red Rotation
100Color to Red
101Color to Orange
102Color to Yellow
103Color to Grass
104Color to Green
(There is a special case to not turn the player unit green)
105Color to Teal
106Color to Aqua
107Color to Light Blue
108Color to Blue
109Color to Purple
110Color to Magenta
111Color to Some Funky Red
112Color to RGB Red
113Color to RGB Green
114Color to RGB Blue

light-r - [N] - Controls the state's change of the red color value of the Light radius (Uses a value from 0 to 255)

light-g - [N] - Controls the state's change of the green color value of the Light radius (Uses a value from 0 to 255)

light-b - [N] - Controls the state's change of the blue color value of the Light radius (Uses a value from 0 to 255)

onsound - [O] - Plays a sound when the state is initially applied to the unit. Links to a Sound from Sounds.txt

offsound - [O] - Plays a sound when the state is removed from the unit. Links to a Sound from Sounds.txt

gfxtype - [N] - Controls the how to handle the unit graphics transformation based on the unit type (This relies on the disguise field being enabled). If equals 1, then use this on a monster type unit. If equals 2, then use this on a player type unit. Otherwise, ignore this

gfxclass - [N] - Control's the unit class used for handling the unit graphics transformation. This field relies on what unit type was used in the gfxtype field. If gfxtype equals 1 for monster type units, then this field will rely on the hcIDx field from MonStats.txt. If "gfxtype" equals 2, then this field will use the character class numeric ID.

IDFileDescription
0Amazon
1Sorceress
2Necromancer
3Paladin
4Barbarian
5Druid
6Assassin

cltevent - [N] - Controls the event to check on the client side to determine when to use the function defined in the clteventfunc field (Uses an event defined in the Events.txt file)

clteventfunc - [N] - Controls the client Unit event function that is called when the event is determined in the cltevent field (Uses the functions defined in the Events.txt file)

IDFileDescription
0Do nothing
1Sorceress Apply Chilling Armor
• Requires on the "hitbymissile" event defined in the "cltevent" field
• Uses the related skill with this state and it's related missile fields to fire a missile at a target

cltactivefunc - [N] - Controls the Client Do function that is called every frame while the state is active (the cltdofunc field in Skills.txt). This relies on the "active" field being enabled

srvactivefunc - [N] - Controls the Server Do function that is called every frame while the state is active (the srvdofunc field in Skills.txt). This relies on the "active" field being enabled

canstack - [B] - If equals 1, then this state can stack with duplicate forms of itself (This is only usable with the "poison" state). If equals 0, then ignore this.

sunderfull - [X] [B] - If equals 1, then this state will reapply any negative resistance stats at full potential when calculating pierce immunity if the immunity was broken. If equals 0, then reapply at the normal reduced efficiency (currently 1/5).

sunder-res-reduce – [X] [B] - If equals 1, then this state will apply pierce resistance at reduced effectiveness (currently 1/5) when calculating pierce resistance if an immunity was broken. If equals 0, then apply pierce resistance at normal effectiveness.

SuperUniques.txt

This file defines the Super Unique monsters and their properties. Super Unique monsters are considered the special boss monsters that have static encounters in the game.

This file uses the following data files: MonSounds.txt, monstats.txt, MonUMod.txt, TreasureClassEx.txt


Data Fields

Superunique - [O] - Defines the unique name ID for the Super Unique monster

Name - [O] - Uses a string for the Super Unique monster's name

Class - [O] - Defines the baseline monster type for the Super Unique monster, which this monster will use for default values. This uses the ID field from MonStats.txt

hcIDx - [N] - Defines the unique numeric ID for the Super Unique monster. The existing IDs are hardcoded for specific scripts with the specified Super Unique monsters

MonSound - [O] - Defines what set of sounds to use for the Super Unique monster. Uses the ID field from MonSounds.txt. If this field is empty, then the Super Unique monster will default to using the monster class sounds

Mod1 (to Mod3) - [N] - Controls which monster modifier to assign to the Super Unique monster. Uses the id field from MonUMod.txt

MinGrp - [N] - Controls the min amount of Minion monsters that will spawn with the Super Unique monster

MaxGrp - [N] - Controls the max amount of Minion monsters that will spawn with the Super Unique monster. This value must be equal to or higher than MinGrp. If this value is greater than it, then a random number will be chosen between the MinGrp and MaxGrp values

AutoPos - [B] - If equals 1, then the Super Unique monster will randomly spawn within a radius of its designated position. If equals 0, then the Super Unique monster will spawn at exact coordinates of its designated position

Stacks - [B] - If equals 1, then this Super Unique monster can spawn more than once in the same game. If equals 0, then this Super Unique monster can only spawn once in the same game

Replaceable - [B] - If equals 1, then the room where the Super Unique monster spawns in can be replaced during the creation of a level preset. If equals 0, then the room cannot be replaced and will remain static

Utrans & Utrans(N) & UTrans(H) - [N] - Modifies the color transform for the unique monster respectively in Normal, Nightmare, or Hell difficulty. If this value is greater than or equal to 30, then the value will default to 2, which is the monster's default color palette shift. If the value is 0 or is empty, then a random value will be chosen

TC & TC(N) & TC(H) - [O] - Controls the Treasure Class to use when the Super Unique monster is killed respectively in Normal, Nightmare, or Hell difficulty. This is linked to the corresponding Treasure Class

TreasureClassEx.txt

This file controls the Treasure Class linked to a monster drop. Treasure Classes are groups of item types and their chances of dropping from a monster.

This is used by the following data files: monstats.txt, SuperUniques.txt


Data Fields

Treasure Class - [O] - Defines the unique Treasure Class ID, that is referenced in other files

group - [N] - Assigns the Treasure Class to a group ID value, which will connect this Treasure Class with other Treasure Classes, as a potential Treasure Class to use for an itemdrop. When determining which Treasure Class to use for an item drop, the game will iterate through all Treasure Classes that share the same group. This field works with the level field to determine an ideal Treasure Class to use for the monster drop. Treasure Classes that share the same group should be in contiguous order

level - [N] - Defines the level of a Treasure Class. Monsters who have a Treasure Class will pick the Treasure Class that a level value that is less than or equal to the monster's level. This is ignored for Boss monsters

Picks - [N] - Controls how to handle the calculations for item drops. If this value is positive, then this value will control how many item drop chances will be rolled for the Treasure Class using the "Prob#" fields as probability values. If this value is negative, then this value functions as the total guaranteed quantity of item drops from the Treasure Class, and each "Prob#" field now defines the quantity of items generated from its related "Item#" field. If this field is empty, then default to a value of 1

Unique - [N] - Modifies the item ratio drop for a Unique Quality item. A higher value means a better chance of being chosen. (ItemRatio.txt for an explanation for how the Item Quality is chosen)

Set - [N] - Modifies the item ratio drop for a Set Quality item. A higher value means a better chance of being chosen. (ItemRatio.txt for an explanation for how the Item Quality is chosen)

Rare - [N] - Modifies the item ratio drop for a Rare Quality item. A higher value means a better chance of being chosen. (ItemRatio.txt for an explanation for how the Item Quality is chosen)

Magic - [N] - Modifies the item ratio drop for a Magic Quality item. A higher value means a better chance of being chosen. (ItemRatio.txt for an explanation for how the Item Quality is chosen)

NoDrop - [N] - Controls the probability of no item dropping by the Treasure Class. The higher this value, then the more likely no item will drop from the monster. This can be automatically be affected by the number of players currently in the game

Item1 - [O] - Defines a potential ItemType or other Treasure Class that can drop from this Treasure Class. Linking another Treasure Class in this field means that there is a chance to use that Treasure Class group of items which the game will then calculate a selection from that Treasure Class, and so on

Prob1 - [N] - The individual probability for each related Item1 drop. The higher this value, then the more likely the Item1 field will be chosen. The chance a drop is picked is calculated by summing all Prob1 field values and the NoDrop value for a total denominator value, and then having each Prob1 value and the NoDrop value rolling their chance out of the total denominator value for a drop.

UniqueAppellation.txt

This file controls the list of strings that are randomly selected to be used as an extra suffix when generating unique monster names

The game has a 50% chance to randomly use Unique Appellation when generating the Unique monster name.
• If a Unique Appellation is not added, then the game will generate a unique monster name using the string called Monster1Format (ID: 1721)
• If a Unique Appellation is added, then the game will generate a unique monster name using the string called Monster2Format (ID: 1722)


Data Fields

Name - [O] - A string key, which is used as a potential selection for generating a unique monster's name

UniqueItems.txt

This file defines each Unique item and controls their item modifiers.

The row order of items should not be changed because it defines their ID value.

Any column field name starting with "*" is considered a comment field and is not used by the game.


Data Fields

index - [O] - Points to a string key value to use as the Unique item's name

version - [N] - Defines which game version to create this item (0 = Classic mode | 100 = Expansion mode)

enabled - [B] - If equals 1, then this item can be created and dropped. If equals 0, then this item cannot be dropped

ladder - [B] - If equals 1, then this item can only be created and dropped in online Battle.net Ladder games. If equals 0, then this item can be created and dropped in any game mode

rarity - [N] - Modifies the chances that this Unique item will spawn compared to the other Unique items. This value acts as a numerator and a denominator. Each "rarity" value gets summed together to give a total denominator, used for the random roll for the item. For example, if there are 3 possible Unique items, and their "rarity" values are 3, 5, 7, then their chances to be chosen are 3/15, 5/15, and 7/15 respectively. (The minimum "rarity" value equals 1) (Only works for games in Expansion mode)

nolimit - [B] - Requires the quest field from AMW.txt to be enabled. If equals 1, then this item can be created and will automatically be identified. If equals 0, then ignore this

lvl - [N] - The item level for the item, which controls what object or monster needs to be in order to drop this item

lvl req - The minimum character level required to equip the item

code - [O] - Defines the baseline item code to use for this Unique item (must match the code field from AMW.txt)

carry1 - [B] - If equals 1, then players can only carry one of these items in their inventory. If equals 0, then ignore this

cost mult - [N] - Multiplicative modifier for the Unique item's buy, sell, and repair costs

cost add - [N] - Flat integer modification to the Unique item's buy, sell, and repair costs. This is added after the cost mult has modified the costs

chrtransform - [O] - Controls the color change of the item when equipped on a character or dropped on the ground. If empty, then the item will have the default item color. Referenced from the Code column in Colors.txt

invtransform - [O] - Controls the color change of the item in the inventory UI. If empty, then the item will have the default item color. Referenced from the Code column in Colors.txt

invfile - [O] - An override for the invfile field from AMW.txt. By default, the Unique item will use what was defined by the baseline item from the "item" field

flippyfile - [O] - An override for the "flippyfile" field from the weapon.txt, Armor.txt, or Misc.txt files. By default, the Unique item will use what was defined by the baseline item from the "item" field

dropsound - [O] - An override for the "dropsound" field from the weapon.txt, Armor.txt, or Misc.txt files. By default, the Unique item will use what was defined by the baseline item from the "item" field

dropsfxframe - [N] - An override for the "dropsfxframe" field from the weapon.txt, Armor.txt, or Misc.txt files. By default, the Unique item will use what was defined by the baseline item from the "item" field

usesound - [O] - An override for the "usesound" field from the weapon.txt, Armor.txt, or Misc.txt files. By default, the Unique item will use what was defined by the baseline item from the "item" field

prop1 - [O] - Controls the item properties for the Unique item (Uses the Code field from Properties.txt)

par1 - [N] - The stat's "parameter" value associated with the related property (prop#). Usage depends on the (Function ID field from Properties.txt)

min1 - [N] - The stat's "min" value to assign to the related property (prop#). Usage depends on the (Function ID field from Properties.txt)

max1 - [N] - The stat's "max" value to assign to the related property (prop#). Usage depends on the (Function ID field from Properties.txt)

diablocloneweight - [N] - The amount of weight added to the diablo clone progress when this item is sold. When offline, selling this item will instead immediately spawn diablo clone.

UniquePrefix.txt

This file controls the list of strings that are randomly selected to be used as the prefix when generating unique monster names

This is always added to every unique monster name


Data Fields

Name - [O] - A string key, which is used as a potential selection for generating a unique monster's name

UniqueSuffix.txt

This file controls the list of strings that are randomly selected to be used as the suffix when generating unique monster names

This is always added to every unique monster name


Data Fields

Name - [O] - A string key, which is used as a potential selection for generating a unique monster's name

WanderingMon.txt

This file controls the list of monsters that can be used as good NPC units to randomly place in certain area levels. The "ActInfo.txt" file controls the statistics on when to spawn wandering monsters, and this file simply controls the list of possible monsters to choose from.


Data Fields

class - [O] - Uses a monster "ID" defined from the monstats.txt file. Monsters defined here are added to a list which is used to randomly pick a monster to spawn in an area level.

Reference Data Files

The following files are considered hardcoded reference files used for specific fields or as indices for other data files.

ArmType.txt

NameToken
Litelit
Mediummed
Heavyhvy

BodyLocs.txt

Body LocationCode
None
Headhead
Neckneck
Torsotors
Right Armrarm
Left Armlarm
Right Ringrrin
Left Ringlrin
Beltbelt
Feetfeet
Glovesglov

Colors.txt

IndexCodeColor
0whitWhite
1lgryLight Grey
2dgryDark Grey
3blacBlack
4lbluLight Blue
5dbluDark Blue
6cbluCrystal Blue
7lredLight Red
8dredDark Red
9credCrystal Red
10lgrnLight Green
11dgrnDark Green
12cgrnCrystal Green
13lyelLight Yellow
14dyelDark Yellow
15lgldLight Gold
16dgldDark Gold
17lpurLight Purple
18dpurDark Purple
19oranOrange
20bwhtBright White

CompCode.txt

componentcode
nilnil
lightlit
mediummed
heavyhev
heavyhvy
skarmordes
roguearmor/brheadbrv
axeaxe
flailfla
handaxehax
macemac
scimitarscm
bucklerbuc
large shieldlrg
kite shieldkit
small shieldsml
long swordlsd
wandwnd
short swordssd
clubclb
torchtch
battleaxebtx
halberdhal
large axelax
maulmau
scythescy
war hammerwhm
whipwhp
javelinjav
exploding potopl
gas potiongpl
short bowsbw
long bowlbw
long battle bowlbb
short battle bowsbb
pikepik
spearspr
tridenttri
falchionflc
sabersbr
glaiveglv
poleaxepax
broad swordbsd
flambergeflb
waraxewax
warscythewsc
warswordwsd
claymoreclm
dk weaponsmc
skmage firefir
skmage ltnglht
skmage coldcld
skmage poispos
dk rh spellrsp
dk lh spelllsp
dk unholyunh
dk partrsg
misc part 1bld
misc part 2shr
misc part 3lhr
misc part 4hbd
misc part 5tkt
headress1bab
headress2pha
headress3fan
headress4pon
zealot head 1hd1
zealot head 2hd2
zealot head 3hd3
zealot head 4hd4
zealot torso 1zz1
zealot torso 2zz2
zealot torso 3zz3
zealot torso 4zz4
zealot torso 5zz5
zealot torso 6zz6
zealot torso 7zz7
flying scimred
thornhulkhead2th2
thornhulkhead3th3
thornhulkhead4th4
thornhulkhead5th5
fetish weap 1fbl
fetish weap 2fsp
young NPC headyng
old NPC headold
bearded NPC headbrd
goatee NPC headgot
NPC part 1fez
NPC part 2rol
NPC part 3bsk
NPC part 4buk
NPC part 5sak
NPC part 6ban
NPC part 7fsh
NPC part 8snk
fem brown hairbrn
fem black hairblk
fem NPC leg 1srt
fem NPC leg 2lng
fem NPC leg 3dln
fem NPC tor 1btp
fem NPC tor 2mtp
fem NPC tor 3stp
fem NPC tor 4svt
dk head 1col
dk head 2hod
dk head 3hrn
siege beast trlnk
siege beast s1tur
siege beast s3mlk
full helmfhm
great helmghm
pow handbhn
pow headhed

Composit.txt

NameToken
HeadHD
TorsoTR
LegsLG
Right ArmRA
Left ArmLA
Right HandRH
Left HandLH
ShieldSH
Special 1S1
Special 2S2
Special 3S3
Special 4S4
Special 5S5
Special 6S6
Special 7S7
Special 8S8

CubeMod.txt

cubemod typeCode
None
Amethystame
Rubyrub
Sapphiresap
Topaztop
Emeraldeme
Diamonddim
Skullsku
Magicmag
Rarerar
Uniqueunq
Craftedcrf

ElemTypes.txt

elemental typeCode
None
Firefire
Lightningltng
Magicmag
Coldcold
Poisonpois
Life Drainlife
Mana Drainmana
Stamina Drainstam
Stunstun
Randomrand
Burningburn
Freezefrze

Events.txt

event*description
hitbymissileUnit is hit by a missile
damagedinmeleeUnit takes damage from a melee attack
damagedbymissileUnit takes damage from a missile
attackedinmeleeUnit is attacked by a melee attack
doactiveUnit used a skill
domeleedamageUnit dealt damage with a melee attack
domissiledamageUnit dealt damage with a missile
domeleeattackUnit used a melee attack
domissileattackUnit used a missile attack
killUnit killed another Unit
killedUnit dies
absorbdamageUnit takes damage
levelupUnit gained a Level
deathMonster dies

HitClass.txt

IndexHit ClassCode
0None
1Hand To Handhth
2One Hand Swing vs. Small1hss
3One Hand Swing vs. Large1hsl
4Two Hand Swing vs. Small2hss
5Two Hand Swing vs. Large2hsl
6One Hand Thrust1ht
7Two Hand Thrust2ht
8Clubclub
9Staffstaf
10Bowbow
11Crossbowxbow
12Clawclaw
13Overlayover

LowQualityItems.txt

Name
Crude
Cracked
Damaged
Low Quality

MissCalc.txt

code*description
par1The Param1 field value
par2The Param2 field value
par3The Param3 field value
par4The Param4 field value
par5The Param5 field value
cpa1The CltParam1 field value
cpa2The CltParam2 field value
cpa3The CltParam3 field value
cpa4The CltParam4 field value
cpa5The CltParam5 field value
hpa1The sHitPar1 field value
hpa2The sHitPar2 field value
hpa3The sHitPar3 field value
chp1The cHitPar1 field value
chp2The cHitPar2 field value
chp3The cHitPar3 field value
dpa1The dParam1 field value
dpa2The dParam2 field value
lvlThe current Missile Level
edmnElemental Damage Min
edmxElemental Damage Max
edlnElemental Damage Length
ednsElemental Damage Min (256ths)
edxsElemental Damage Max (256ths)
damnPhysical Damage Min
damxPhysical Damage Max
dmnsPhysical Damage Min (256ths)
dmxsPhysical Damage Max (256ths)
rangThe Range field value
sl12par1 + (lvl - 1) * par2
sd12((110 * lvl) * (par2 - par1)) / (100 * (lvl + 6)) + par1
sl34par3 + (lvl - 1) * par4
sd34((110 * lvl) * (par4 - par3)) / (100 * (lvl + 6)) + par3
cl12cpa1 + (lvl - 1) * cpa2
cd12((110 * lvl) * (cpa2 - cpa1)) / (100 * (lvl + 6)) + cpa1
cl34cpa3 + (lvl - 1) * cpa4
cd34((110 * lvl) * (cpa4 - cpa3)) / (100 * (lvl + 6)) + cpa3
shl1hpa1 + (lvl - 1) * hpa2
shd1((110 * lvl) * (hpa2 - hpa1)) / (100 * (lvl + 6)) + hpa1
chl1chp1 + (lvl - 1) * chp2
chd1((110 * lvl) * (chp2 - chp1)) / (100 * (lvl + 6)) + chp1
dl12dpa1 + (lvl - 1) * dpa2
dd12((110 * lvl) * (dpa2 - dpa1)) / (100 * (lvl + 6)) + dpa1

MonAI.txt

AI - [O] - Defines a unique reference used by the AI field from MonStats.txt

*aip1 - [O] - Description of the AI behavior attached to the corresponding aip1 fields in MonStats.txt

*eol - [N] - End of Line


MonMode.txt

Indexnametokencode
0deathDTDT
1neutralNUNU
2walkWLWL
3gethitGHGH
4attack 1A1A1
5attack 2A2A2
6blockBLBL
7castSCSC
8skill 1S1S1
9skill 2S2S2
10skill 3S3S3
11skill 4S4S4
12deadDDDD
13knockbackGHKB
14sequencexxxx
15runRNRN

MonPlace.txt

code
place_nothing
place_NPC_pack
place_unique_pack
place_champion
place_rogue_warner
place_bloodraven
place_rivermonster_right
place_rivermonster_left
place_tightspotboss
place_amphibian
place_tentacle_ns
place_tentacle_ew
place_fallennest
place_fetishnest
place_talkingrogue
place_talkingguard
place_dumbguard
place_fallen
place_fallenshaman
place_maggot
place_maggotegg
place_mosquitonest
place_fetish
place_fetishshaman
place_impgroup
place_imp
place_miniongroup
place_minion
place_bloodlord
place_deadminion
place_deadimp
place_deadbarb
place_reanimateddead
place_group25
place_group50
place_group75
place_group100

ObjMode.txt

NameToken
NeutralNU
OperatingOP
OpenedON
Special 1S1
Special 2S2
Special 3S3
Special 4S4
Special 5S5

ObjType.txt

This file is too large to be displayed here

PlayerClass.txt

Player ClassCode
Amazonama
Sorceresssor
Necromancernec
Paladinpal
Barbarianbar
Expansion
Druiddru
Assassinass

PlrMode.txt

NameTokenCode
deathDTDT
neutralNUNU
walkWLWL
runRNRN
gethitGHGH
town neutralTNTN
town walkTWTW
attack 1A1A1
attack 2A2A2
blockBLBL
castSCSC
throwTHTH
kickKKKK
skill 1S1S1
skill 2S2S2
skill 3S3S3
skill 4S4S4
deadDDDD
sequenceGHSQ
knockbackGHKB

PlrType.txt

NameToken
AmazonAM
SorceressSO
NecromancerNE
PaladinPA
BarbarianBA
Expansion
DruidDZ
AssassinAI

SkillCalc.txt

code*Description
ln12par1 + (lvl - 1) * par2
dm12((110 * lvl) * (par2 - par1)) / (100 * (lvl + 6)) + par1
ln34par3 + (lvl - 1) * par4
dm34((110 * lvl) * (par4 - par3)) / (100 * (lvl + 6)) + par3
ln56par5 + (lvl - 1) * par6
dm56((110 * lvl) * (par6 - par5)) / (100 * (lvl + 6)) + par5
ln78par7 + (lvl - 1) * par8
dm78((110 * lvl) * (par8 - par7)) / (100 * (lvl + 6)) + par7
par1The Param1 field value
par2The Param2 field value
par3The Param3 field value
par4The Param4 field value
par5The Param5 field value
par6The Param6 field value
par7The Param7 field value
par8The Param8 field value
lvlThe current Skill Level (with bonuses)
edmnElemental Damage Min
edmxElemental Damage Max
edlnElemental Damage Length
tohtAttack Rating Bonus (ToHit) Calculation
manaMana Cost Calculation
mpsMana Cost Per Second Calculation
mathAttack Rating (ToHit) Mastery
madmPhysical Damage Mastery
macrCritical Hit Mastery
m1enElemental Damage Min for SkillDesc descmissile1
m1exElemental Damage Max for SkillDesc descmissile1
m1elElemental Damage Length for SkillDesc descmissile1
m2enElemental Damage Min for SkillDesc descmissile2
m2exElemental Damage Max for SkillDesc descmissile2
m2elElemental Damage Length for SkillDesc descmissile2
m3enElemental Damage Min for SkillDesc descmissile3
m3exElemental Damage Max for SkillDesc descmissile3
m3elElemental Damage Length for SkillDesc descmissile3
m1rnRange for SkillDesc descmissile1
m2rnRange for SkillDesc descmissile2
m3rnRange for SkillDesc descmissile3
ednsElemental Damage Min (256ths)
edxsElemental Damage Max (256ths)
ulvlThe caster unit's current Level
blvlThe base Skill Level (without bonuses)
usmcMana Cost (256ths)
m1eoElemental Damage Min for SkillDesc descmissile1 (256ths)
m1eyElemental Damage Max for SkillDesc descmissile1 (256ths)
m2eoElemental Damage Min for SkillDesc descmissile2 (256ths)
m2eyElemental Damage Max for SkillDesc descmissile2 (256ths)
me3oElemental Damage Min for SkillDesc descmissile3 (256ths)
me3yElemental Damage Max for SkillDesc descmissile3 (256ths)
enmaElemental Damage Min with Elemental Mastery
exmaElemental Damage Max with Elemental Mastery
edmaElemental Damage Length with Elemental Mastery
enmsElemental Damage Min with Elemental Mastery (256ths)
exmsElemental Damage Max with Elemental Mastery (256ths)
lenThe auralencalc field value
clc1The calc1 field value
clc2The calc2 field value
clc3The calc3 field value
clc4The calc4 field value
rngThe aurarangecalc field value
ast1The aurastatcalc1 field value
ast2The aurastatcalc2 field value
ast3The aurastatcalc3 field value
ast4The aurastatcalc4 field value
ast5The aurastatcalc5 field value
ast6The aurastatcalc6 field value
pst1The passivecalc1 field value
pst2The passivecalc2 field value
pst3The passivecalc3 field value
pst4The passivecalc4 field value
pst5The passivecalc5 field value
petsThe petmax field value
skptThe skpoints field value
pnmaPhysical Damage Min (Skill Only)
pxmaPhysical Damage Max (Skill Only)
pnmsPhysical Damage Min (Skill Only) (256ths)
pxmsPhysical Damage Max (Skill Only) (256ths)
maelElemental Damage Mastery
mapiThrowing Pierce Mastery
mancThrowing No Consume Mastery
par9The Param9 field value
pa10The Param10 field value
pa11The Param11 field value
pa12The Param12 field value
ln91par9 + (lvl - 1) * pa10
dm91((110 * lvl) * (pa10 - par9)) / (100 * (lvl + 6)) + par9
ln21pa11 + (lvl - 1) * pa12
dm21((110 * lvl) * (pa12 - pa11)) / (100 * (lvl + 6)) + pa11
clc5The calc5 field value
clc6The calc6 field value
pst6The passivecalc6 field value

StorePage.txt

Store PageCode
Armor Pagearmo
Weapons Pageweap
Magic Pagemag
Misc Pagemisc

Commonly Referenced Data Tables

The following tables are frequently used for various files, but do not have a file of their own.

Elemental Types Table

CodeDescription
(empty)None
fireFire
ltngLightning
magMagic
coldCold (Uses "ELen")
poisPoison (Uses "ELen")
lifeLife Drain
manaMana Drain
stamStamina Drain
stunStun (Uses "ELen")
randRandomly select between Fire, Lightning, Magic, Cold, or Poison. (If the related "El#Dur" field equals 0, then default the value to 25)
burnBurning (Uses "ELen")
frzeFreeze (Uses "ELen")

Event Functions Table

CodeParametersDescription
0
Do nothing
1srvmissileaSorApplyChillingArmor - Shoot a missile at the target unit
2cltoverlaya
calc1
SorApplyFrozenArmor - Deal skill damage with the freeze length controlled by the calc field and apply an overlay to the attacker
3cltoverlayaSorApplyShiverArmor - Deal elemental skill damage and apply an overlay to the attacker
4auratargetstate
calc1
calc2
calc3
calc4
NecApplyIronMaiden - Deal damage to the attacking unit using the calc fields as damage modifiers, based on the state being active.
If the target monster is equal to "bloodgolem" then calculate a life steal and also create the "steallife" overlay on the golem's caster unit.
5auratargetstate
calc1
prgoverlay
NecApplyLifeTap - If the target has the "auratargetstate" state, then apply a percentage heal to the attacker that is determined by the calc field. Also apply an overlay to the attacker when the attack is healed.
6
ItemApplyAttackerTakesDamage - Deal physical damage to the attacker
7
ItemApplyKnockback - Determine a chance to knockback the attacker monster
8
ItemApplyHowl - Apply terror to the monster, changing its AI to run away
9
ItemApplyDimVision - Based on a random chance, apply the "Dim Vision" skill to the enemy attacker with a random skill level between 1 to 20.
10
ItemApplyAttackerTakesLtngDamage - Deal lightning damage to the attacker
11
ItemApplyAttackerTakesFireDamage - Deal fire damage to the attacker
12
ItemApplyAttackerTakesColdDamage - Deal cold damage to the attacker, and apply a cold length that is modified based on the level difference between the attacker and defender
13
ItemApplyDamageToMana - Add mana to the source unit, based on a percentage of the damage taken. Also add a "stealmana" overlay to the source unit.
14
ItemApplyFreeze - Based on a random chance, deal damage to the enemy attacker and apply a freeze length
15
ItemApplyOpenWounds - Based on a random chance, apply open wounds on the target, using the "openwounds" state
16
ItemApplyCrushingBlow - Based on a random chance, deal crushing blow percentage life damage to the enemy attacker and apply the "bash" overlay
17
ItemApplyManaAfterKill - Add mana to the source unit and add a "stealmana" overlay
18
ItemApplyHealAfterDemonKill - If a Demon enemy is killed, then add life to the source unit and add a "steallife" overlay
19
ItemApplySlow - Apply the "slowed" state to the target
20
ItemApplyHitOrAttack - Based on a random chance, cast a skill on the target when the source unit attacks
21
ItemApplyGetHit - Based on a random chance, cast a skill on the attacker when the source unit gets hit
22aurastate
aurastat1
aurastat2
NecApplyBoneArmor - Calculates the minimum and maximum damage to absorb based on the aura stat values. If no remaining absorbing damage is left, then remove the state.
23calc2
calc3
NecApplyBloodGolemSteal - Calculate a life steal for the attacking unit and its boss unit. Also create the "steallife" overlay on the both units.
24aurastate
calc1
calc2
prgoverlay
SorApplyEnergyShield - If the "aurastate" state is active, then calculate the percentage of damage taken by the source unit that should be absorbs and the amount of mana that should be consumed by the percent absorbed. Also apply an overlay on the source unit. If the source unit runs out of mana, then remove the state.
25aurastate
aurastat1
aurastat2
DruApplyCycloneArmor - Calculates the minimum and maximum elemental damage to absorb based on the aura stat values. If no remaining absorbing damage is left, then remove the state.
26Param5NecApplyBloodGolemShare - Controls the percentage of damage taken by the source unit that should be transferred to the source unit's boss.
27
NecApplyClayGolemSlow - Apply the "slowed" state to the target
28
ItemApplyHealAfterKill - Add life to the source unit and add a "steallife" overlay
29
ItemApplyRestInPeace - Apply the "restinpeace" state on the enemy unit
30
ItemApplyOnDeath - Based on a random chance, cast a skill when the source unit dies
31
ItemApplyReanimate - Based on a random chance, revive a dead monster that is not a champion or unique.
32aurarangecalcHitClassSkillApplyRadiusDamage - Use a skill's damage to deal damage in an area based on the skill's hit class
33aurastatcalc1
aurastatcalc2
passiveitype
passivereqweaponcount
sumskill1
sumsk1calc
SkillActivateSubskill - Based on a random chance controlled by the "aurastatcalc1" value, cast a skill (determined by "sumskill1") with a skill level controlled by "sumsk1calc". If "aurastatcalc2" value is greater than 0, then factor the "passiveitype" and "passivereqweaponcount" fields for determining if the skill should be cast or not.

Hit Flags Table

Bit Field ValueBinary Equivalent ValueDescription
100000000001Do not add physical damage
200000000010Do not add any damage
400000000100No Life Steal
800000001000No Mana Steal
1600000010000No Stamina Steal
3200000100000Use Source Damage
12800010000000No Triggered Events
25600100000000Bypass Undead
51201000000000Bypass Demons
102410000000000Bypass Beasts

Inventory Transform Table

CodeColor
0No color change
1Grey
2Grey 2
3Gold
4Brown
5Grey Brown
6Inventory Grey
7Inventory Grey 2
8Inventory Grey Brown

Player Spell Table

CodeParametersDescription
0
Do nothing
1spelliconSkillItemIdentify - Sets the spell icon. Identifies anitem.
2
SkillItemTownPortal - The player creates a town portal
3state
stat1, calc1
stat2, calc2
stat3, calc3
len
SkillItemHealPotion
1. Applies a "state" on the player that is controlled by the "len" field
2. This function requires that the stat parameters be either "hitpoints", "hpregen", "mana", or "manarecovery"
3. Calculates a flat amount of these stats to restore to the player, based on the class and Vitality/Energy attribute for Life/Mana stats
4state
stat1, calc1
stat2, calc2
stat3, calc3
len
SkillItemHealPotion2
1. Applies a "state" on the player that iscontrolled by the "len" field
2. This function requires that the statparameters be either "hitpoints", "hpregen", "mana", or "manarecovery"
3. Calculates a flat amount of these stats torestore to the player
5stat1, calc1
stat2, calc2
stat3, calc3


SkillItemHealPotion3 - Adds a percentage of the stat's"maxstat" value (ItemStatCost.txt) to the current stat. This percentage is determined by the related calculated value.
6state
cstate1
cstate2
len
SkillItemPotionAntidote - Clears the "cstate1" and "cstate2" States on the user and applies the "state" state with its duration controlled by the "len" field.
7
SkillItemTransmogrify - Opens the Horadric Cube UI
8
SkillItemElixir - Get a stat from item's mod class and set it to the it's "value" stat
9state
stat1, calc1
stat2, calc2
stat3, calc3
len
SkillItemHerb
1. Applies a "state" on the player that iscontrolled by the "len" field
2. Calculates a flat amount of the stats to set on the player
3. Has a special case where if the stat equals "staminarecoverybonus" then also set the current "stamina" stat to be equal to the "maxstamina" stat
10
SkillItemSkill - Cast a level 1 Sorceress Fire Ball skill at a targeted enemy or targeted location
11
SkillItemSkillXY - Cast a level 1 Sorceress Fire Ball skill at a targeted location

Quests Table

CodeDescription
0Not a quest item
1Act 1 Prologue
2Den of Evil
3Sisters' Burial Grounds
4Tools of the Trade
5The Search for Cain
6The Forgotten Tower
7Sisters to the Slaughter
8Act 2 Prologue
9Radament's Lair
10The Horadric Staff
11The Tainted Sun
12The Arcane Sanctuary
13The Summoner
14The Seven Tombs
15Act 2 Traversed
16Lam Esen's Tome
17Khalim's Will
18Blade of the Old Religion
19The Golden Bird
20The Blackened Temple
21The Guardian
22Act 4 Prologue
23The Fallen Angel
24Terror's End
25The Hellforge
26Rogue Warning
27Guard in Town Warning
28Guard in Desert Warning
29Dark Wanderer Seen
30Angel Warning
31Respec from Akara Complete
Act 5 Prologue
32Siege on Harrogath
33Rescue on Mount Arreat
34Prison of Ice
35Betrayal of Harrogath
36Rite of Passage
37Eve of Destruction

Quest Flags Table

CodeDescription
0Act 1 Prologue Seen
1Den of Evil Complete
2Sisters' Burial Grounds Complete
3Tools of the Trade Complete
4The Search for Cain Complete
5The Forgotten Tower Complete
6Sisters to the Slaughter Complete
7Act 1 Traversed
8Act 2 Prologue Seen
9Radament's Lair Complete
10The Horadric Staff Complete
11The Tainted Sun Complete
12The Arcane Sanctuary Complete
13The Summoner Complete
14The Seven Tombs Complete
15Act 2 Traversed
16Act 3 Prologue Seen
17Lam Esen's Tome Complete
18Khalim's Will Complete
19Blade of the Old Religion Complete
20The Golden Bird Complete
21The Blackened Temple Complete
22The Guardian Complete
23Act 3 Traversed
24Act 4 Prologue Seen
25The Fallen Angel Complete
26Terror's End Complete
27The Hellforge Complete
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 Complete
36Rescue on Mount Arreat Complete
37Prison of Ice Complete
38Betrayal of Harrogath Complete
39Rite of Passage Complete
40Eve of Destruction Complete
41Respec from Akara Complete

Result Flags Table

Bit Field ValueBinary Equivalent ValueDescription
10000000000000001Hit
20000000000000010Death
40000000000000100Get Hit
80000000000001000Knockback
160000000000010000Block
320000000000100000No Passive
1280000000010000000Dodge
2560000000100000000Avoid
5120000001000000000Evade
40960001000000000000Ignore Friendly
81920010000000000000Double Damage
163840100000000000000Soft Hit
327681000000000000000Two Hand-to-Hand Block

Transparency Table

CodeDescription
0Transparency at 25%
1Transparency at 50%
2Transparency at 75%
3Black Alpha Transparency
4White Alpha Transparency
5No Transparency
6Dark Transparency (Unused)
7Highlight Transparency (Used when mousing over the unit)
8Blended

Weapon Class Table

CodeDescription
1hsOne Handed Swing
1htOne Handed Thrust
bowBow
2hsTwo Handed Swing
2htTwo Handed Thrust
1jsLeft Jab Right Swing
1jtLeft Jab Right Thrust
1ssLeft Swing Right Swing
1stLeft Swing Right Thrust
stfStaff
xbwCrossbow
ht1One Hand-To-Hand
ht2Two Hand-To-Hand

Modder's Info

The following section will outline common folder locations, important modding tools, useful video guides and more.

Please be patient as this section (and the data guide in general) get improved over time.


File Types and Capabilities

The following table will outline the file types that exist, their purposes and our current abilities to edit them.

[L] = Legacy View Only, [R] = Resurrected View Only, [B] = Both Views, [X] = Unused

File TypePurposeCapability
DC6 [L]2D images for items, icons and ui elements in the Legacy ViewFully Unlocked
DCC [L]Animated 2D images (DC6) for various visual effectsFully Unlocked
DS1 [B]"Map" file which controls legacy visuals as well as monster/object placement and collision for both viewsFully Unlocked
FLAC [B]Audio files used for all in-game soundsOpen Standard
JSON [B]Plain text files used for a vast majority of Resurrected file linking and functions; Some legacy content also adapted to JSONOpen Standard
MODEL [R]3D assets for Resurrected View which control unit, item and environment visuals in the "world view"Partially Unlocked (Ep.9 Guide)
PARTICLES [R]3D Visual Effects for Resurrected View which control missiles, overlays, and environmental decoration elementsPartially Unlocked (Ep.9 Guide)
SPRITE [R]2D images for items, icons and ui elements in the Resurrected View. Can also be used by certain "widgets" for animated imagesFully Unlocked
TBL [X]String Definitions for all in-game textUnused. Converted to JSON
TEXTURE [R]2D images "wrapped" around various models and particlesFully Unlocked
TXT [B]Tab-Delimited text files which control 95% of gameplay-related aspectsFully Unlocked

Recommended Modding Programs

The following table will outline the various user-made or open-source programs available to you.

While sometimes these specific programs are not required, they are recommended for their improved functionality, quality of life or compatibility.

Please keep in mind that while a project may be listed as active; it doesn't mean it gets frequent updates.

Program / Direct DL LinkPurposeVersionDevelopment StatusAuthor(s)
AFJ's Sheet EditorUsed to edit TXT files0.61bInactiveAFJ
BeaconUsed to advertise and browse active LAN games (optional advertising)1.0.7ActiveBonesy
CascViewerUsed to extract files from compressed game storage2.3.0UnknownLadik
D2CompareUsed to compare TXT file changes between versions (including custom filesets)1.0.2ActiveBonesy
D2RHUD (SP) or D2RHUD (MP)Used to draw a screen overlay that displays specified monster and player stats---ActiveBonesy
D2RLANMod Launcher/Manager for LAN-based mods1.1.1ActiveBonesy
D2RLaunchMod Launcher/Manager for Single-Player only mods1.4.9ActiveBonesy
D2R Backup BuddyUsed to create automated character and stash file backups1.0.0ActiveBonesy
MoPaHUsed primarily to replace embedded textures inside MODEL and PARTICLE files0.4ActiveBonesy
NoesisUsed to extract MODELS and edit TEXTURES4.458UnknownRich Whitehouse, Jayn23
PKBlaster*Used to change baked-in colors of PARTICLES. *Not guaranteed to work0.0.5InactiveLeny, Bonesy
SpriteEditUsed to edit SPRITE files (2D Images)2.0InactiveCla$$ics, Bonesy
WINDS1_EditUsed to edit DS1 files1.0InactivePaul Siramy
Visual Studio CodeUsed to edit JSON files (Recommended)---ActiveMicrosoft

Scripts and Resources

Here are some user-created code snippets and collections that are likely to help with your day-to-day editing tasks and/or save you much time.

ResourcePurposeTypeAuthor(s)
AnimData EditorUsed to edit AnimData.d2EXE/BATCHPaul Siramy
CombinedDS1 GeneratorUsed to generate mapping cache file for custom mapsPowershell ScriptBonesy
D2RLintUsed to error check various TXT files and functions for issuesEXE/BATCHCla$$ics
String TranslatorUsed to convert specified english string to all other languagesPowershell ScriptBonesy
SuperCalcProvides monster, skill, and many other various modding-related calculatorsGoogle SheetsBonesy
Quest Icon TemplateProvides all Quest Icons in pre-sliced and organized formatsPhotoshop TemplateBonesy
Skill Icon TemplateProvides all Skill Icons in pre-sliced and organized formatsPhotoshop TemplateBonesy
Legacy UpscaledProvides manually upscaled legacy item images in the D2R formatImagesBonesy

Commonly Edited Folders

The below table will list common reasons you might browse to these locations. It does not indicate all files or edits possible.

LocationPurposeFile Type(s)
globalMostly files for controlling Legacy View Mode, includes ui layouts:DC6, DCC, DS1, FLAC, JSON, TXT
hdFiles for controlling Resurrected View Mode:FLAC, JSON, MODEL, PARTICLES, SPRITE, TEXTURE
localFiles for strings (text) for Both View Modes:FLAC, JSON
global/excelFiles which control 95% of gameplay-related editsTXT
global/ui/layoutsFiles which control the in-game UI panelingJSON
global/tilesFiles which control level/map generation. (D2R Visuals applied by JSON)DS1
hd/characterFiles for unit visuals and animationsMODEL, TEXTURE, JSON
hd/env/presetFiles for level/map visuals for preset levelsJSON
hd/env/visFiles for level/map visuals for level typesJSON
hd/global/excelFiles for adjusting controller and "quick-cast" settingsJSON
hd/global/musicFiles for controlling background and theme related soundsFLAC
hd/global/sfxFiles for controlling item, unit and UI related soundsFLAC
hd/global/uiFiles which control 2D Visuals for items, skill/quest icons and all other UI panelsSPRITE
hd/itemsFiles which control the visuals for all items in Resurrected ViewMODEL, TEXTURE, JSON
hd/missilesFiles which control the visuals for the 3D models of all missiles in Resurrected ViewMODEL, TEXTURE, JSON
hd/overlaysFiles which control the visuals for unit overlays in Resurrected ViewJSON
hd/vfx/particlesFiles which contain the visual effects for missiles, overlays and environmental decorationPARTICLES
hd/vfx/texturesFiles which control various visual aspects for both models and particlesTEXTURE
local/lng/stringsFiles which control all text displayed in the gameJSON

Commonly Edited Files

The below table will list common reasons you might browse to these locations. It does not indicate all files or edits possible.

FilenameLocationPurposeRecommended Editor
AnimData.D2globalControls the animation speed (breakpoints) of all unitsAnimData Editor
DataVersionBuild.txtglobalDefines the mod version to compare against the retail versionNotepad
_ProfileHD.jsonglobal/ui/layoutsDefines global variables and settings many layout JSON files useVisual Studio Code
_ProfileLV.jsonglobal/ui/layoutsDefines global variables and settings many layout JSON files use. Used while "Low Vision Mode" is enabled in-gameVisual Studio Code
Monsters.jsonhd/characterLinks entries from the ID field in MonStats.txt to their matching HD counterparts. Looks in the "enemy" or "npc" folders depending on the npc flag statusVisual Studio Code
Items.jsonhd/itemsLinks entries from the code field in AMW.txt to their matching HD counterparts (Models, Sprites and JSON files)
JSON and Model files are located in hd/items, while Sprites are located in hd/global/ui/items
Visual Studio Code
Sets.jsonhd/itemsLinks entries from the index field in SetItems.txt to their matching HD counterparts (Models, Sprites and JSON files)
JSON and Model files are located in hd/items, while Sprites are located in hd/global/ui/items
Requires invfile in SetItems.txt to have any value specified
Visual Studio Code
Uniques.jsonhd/itemsLinks entries from the index field in UniqueItems.txt to their matching HD counterparts (Models, Sprites and JSON files)
JSON and Model files are located in hd/items, while Sprites are located in hd/global/ui/items
Requires invfile in UniqueItems.txt to have any value specified
Visual Studio Code
Missiles.jsonhd/missilesLinks entries from the Missile field in Missiles.txt to their matching HD counterparts in hd/missilesVisual Studio Code
ControllerSkillSettings.jsonhd/global/excelDefines the "quick-cast" settings for any altered/added skills. References the *ID values to define settingsVisual Studio Code

Known File Limits

The below tables will list the known (or previously tested) limits for both .txt files and other file types


.TXT Limits

The values below were largely derived from this legacy post. Known changes in D2R are listed.

Limits that you may need to worry about are listed in yellow.

File NameKnown LimitSpecial Notes
Armor.txt1024 RowsItems past 1024 cannot be spawned by racks
Automagic.txt4096+ Rows2048+ Tested
Gems.txt256 Rows---
ItemStatCost.txt512 Rows---
ItemTypes.txt65536 Rows---
Levels.txt1024* RowsLevels past 256 cannot be referenced by the cube (red portals)
LvlPrest.txt32768 Rows---
MagicPrefix/Suffix.txt2048 Rows---
Missiles.txt32768 Rows---
MonProp.txt32768* RowsEntries past 1024 do not function correctly for some linking functions
MonStats.txt32768* RowsEntries past 1024 do not function correctly for some linking functions
MonStats2.txt32768* RowsEntries past 1024 do not function correctly for some linking functions
Objects.txt585+ RowsLikely 32768 Rows, but unconfirmed
ObjType.txt585+ RowsLikely 32768 Rows, but unconfirmed
RarePrefix/Suffix.txt256 Rows---
Runes.txt4096 Rows---
SetItems.txt32768 Rows---
Sets.txt4096 Rows---
Skills.txt32768* RowsEntries past 512 will not function correctly on item skills without editing the Save Bits for the appropriate stat
SkillDesc.txt32768* RowsEntries past 512 will not function correctly on item skills without editing the Save Bits for the appropriate stat
States.txt512* RowsEntries past 256 will not function on item States, for games created after it was first used
SuperUniques.txt512* RowsLikely 512 Rows, but unconfirmed
UniqueItems.txt4096 Rows---

D2R File Limits

The values below were personally tested/confirmed after various development projects or capability testing sessions.

File Name/TypeKnown LimitSpecial Notes
Items.JSON3 Character CodesTXT files support 4 characters codes, but Items.json does not
Sprite File16384 Horizontal PixelsVertical Pixel Limit untested (Animated Sprites are placed horizontally)
String File65536 String ID'sString ID's past 65536 will start replacing ID's 1+ (local/lng/strings)
Video FileVP9 Encoded WEBMThis is the only "known-good" settings. I used (CloudConvert)

Video Guides

The below tables will outline all of the video guides I have currently made. More will be added as i'm able. Others are also welcome to contribute.

Due to the upload date for some of the videos; certain limitations or information may be slightly inaccurate. Please check our Discord for active chat assistance.

All video guides contain timestamps/chapters for each subtask, and I strongly recommend taking advantage of them. (I tend to yammer a bit).


The Hitchhiker's Series

This series covers the more basic attributes of D2R Modding; such as file types, known limits, needed programs, etc.

Most of these videos will also show a brief demonstration of edits being applied; but is not the main focus of this series.

Ep. #TitlePurposeDirect Link
1D2R File TypesGives a broad overview of the new file types to D2Rhttps://youtu.be/nd62gkLCYrA
2Modding 101Explains the different mod modes and how to set them uphttps://youtu.be/QhSlhcDdx3g
3Reference FilesDiscusses "reference" files and how they're usedhttps://youtu.be/JPSv12oiHH4
4StringsOutlines how in-game text is defined and it's associated limitshttps://youtu.be/ytp_HGdQpV0
5New TXT EditsExplains some of the new D2R only columns that have been addedhttps://youtu.be/P8bXzcQKgWs
6SpritesDemonstrates how Sprites function and explains the known limitshttps://youtu.be/Pf-_Tu4xZSk
7JSON FilesProvides an outline of the unique attributes for JSON file functionality in D2Rhttps://youtu.be/jhYSsDdB-Zc
8TexturesExplains the varying types, usage and needed programs for this file types in D2Rhttps://youtu.be/Bvb-0Yf3kik
9Models & ParticlesExplains the currently limited modding aspects for these file types in D2Rhttps://youtu.be/jj9C9u5EdsU
10TXT FilesDescribes how the .txt files control varying gameplay aspectshttps://youtu.be/PVFHaCut0HE

The Catacombs Series

This series covers the more advanced attributes of D2R Modding; it assumes you've already watched The Hitchhiker's Series, linked above.

These videos will tend to focus on a specific modding task and show the editing process in actuality; doing my best to explain as I go.

None of these videos contain any editing - All videos are single-take, uncut walkthroughs; in order to provide realistic timeframes and demonstrate common mistakes.

Ep. #TitlePurposeDirect Link
1ItemsDemonstrates how to change item stats, graphics used, text displayed and Particle attachmenthttps://youtu.be/lIPAMnkCuss
2Melee Splash DamageExplains a single, adapatable method of enabling "melee splash" on itemshttps://youtu.be/8WCuE58oXZo
3Particle ColorsExplains how to edit the Textures embedded inside a Particle, to control it's colorshttps://youtu.be/UOCl7g5Bug0
4Custom Warp LevelsDemonstrates how to create a connection between two levels, using a custom warp entry and visualhttps://youtu.be/_cJZ7u0bQZE
5Placing New MonstersGuides you through creating a new monster and manually placing it in a map filehttps://youtu.be/4Pjw4xoU0bM
6Custom Texture ModelsExplains the process and reasoning needed for embedding textures into "new" 3D modelshttps://youtu.be/xPCPJf7qiLE
7Adding Custom NPCExplains how to assign "gossip" text to a monster (NPC dialogue)https://youtu.be/87Zv1WuRh_Y
8Creating New SoundsDemonstrates how to add a "taunt" sound to a monster; can be used for other sound edits alsohttps://youtu.be/J3bbGzaAQTo
9Item Drop OddsExplains how the drop tables in D2R work, and outlining column functions to control them as desiredhttps://youtu.be/XlavLZ1pRV0
10Skill IconsShows you how to add or update skill icons (also applies to quest icons with different file locations)https://youtu.be/pXrJ9haVDGM
11WaypointsDemonstrates how to add a waypoint to "Chaos Sanctuary" as an examplehttps://youtu.be/JSiMjojVl7c
12Skills, Calcs, DescriptionsExplains how skills, their tooltips and calculations in general function for D2Rhttps://youtu.be/arKVMUQiKMM
13Item "Corruption" MechanicsShows one method of creating the popular "corruption" style cube recipes using a new stathttps://youtu.be/2u9QlT7rQ40
14Color Dye SystemGuides you through creating the needed stats and recipes which will allow players to control item colorhttps://youtu.be/LRQeFO0Y3Y4
15Expanding In-Game StorageDemonstrates how to edit in-game storage panels to be desired sizehttps://youtu.be/WAPXnQhp63A
16Creating a Kill/Death TrackerGuides you through the advanced process of tracking most lifetime character kills/deathshttps://youtu.be/TxP_RdoCdOk
17Creating a Passive CtC SkillExplains one method of creating a passive skill which can trigger other skills, using an event-based chance%https://youtu.be/mfKU7XydEBI
18Colors, Colors, ColorsExplains advanced controls for things such as color palettes, variant shifts, MonUMods and state applicationshttps://youtu.be/5PT2P1DVaJU
19Making Enemies into PlayersShows the process of changing a monster visual and animation to take on a playershttps://youtu.be/FzDbz4yB87Q
20Hardcoded Workarounds #1Demonstrates 3 different workarounds you can easily achieve to bypass hardcoded restrictionshttps://youtu.be/vaW__qvecbs
21Breakpoints/Animation SequencesExplains the basics of how animation speeds are determined and editedhttps://youtu.be/43i3vArQMcc
22Custom Status/Indicator IconsGuides you through editing a particle's texture mask(s) to create custom icons or alter the appearancehttps://youtu.be/rDMwhBhfh3Q
23Skill Filtering, Missile Functions, ParticlesOutlines how missile functions, JSON files and particles can link to each otherhttps://youtu.be/K4A5M0BWvfI