SKILLS.TXT FILE GUIDE
by Nepharius
Skills.txt, for a long period of time (1.00 until 1.09) was a pretty small file with only a few things to alter
(this was mainly limited to the animation used, the parameters passed to the skill and the damage done by the skill), the rest was completely hardcoded.
How the skills themselves work is still hardcoded (the skill functions), but all other aspects of their behavior can now be controlled via skills.txt, including which skills access which functions.
The file is vast, by far the largest and most complex in Diablo II, it contains 256 columns, the maximum supported by M$ Excel.

The purpose of this fileguide is not to provide a 100% accurate description of each column, as this is impossible (because how some columns are used depends foremost on the skill function accessing them!), it will also not deal with formula, Xeno wrote a comprehensive guide about the formula used by the D2 parsing engine, and there is no point repeating this here.

GENERAL SKILL SETTINGSskill: the ID pointer used to reference this skill within CharStats.txt, Missiles.txt and Monstats.txt, SkillDesc.txt, it is also used within Skills.txt itself.
This ID pointer can also be used within AutoMagic, Gems, MagicPrefix, MagicSuffix, MonProp, QualityItems, Runes, SetItems, Sets and UniqueItems.txt, however the parsing mechanism used for those files is bugged, and skill names with a space will more often then not fail to work properly (just because Blizzard can do it that way doesn't mean we can!).
I recommended to use the actual ID numbers rather then the ID pointer in those files.Warning Never use the same ID pointer twice, all skills but the first will be ignored if they have the same pointer!

Id: the actual ID number of the skill, this is what the pointer actually points at, this must be a unique number, the game supports 32767 skills, but you won't be able to use them in conjunction with items, unless you modify ItemStatCost.txt, encoded stats (chance to cast level xxx yyy on zzz, and charges) can only store IDs up to 1023, no matter what.Warning Some IDs are referenced by the code (such as aura used by bosses), you should thus refrain from randomly moving skills around inside the file unless you know what you're doing.

charclass: to what character class is this skill assigned, this controls mainly from what DC6 icon library the skill icons are picked and by what bonus stat the skill is going to be effected (+to all Amazon skills etc). Warning All characters must have the same amount of skills assigned to them, otherwise only the class(es) with the highest amount of skills will be able to enter games (since the game is preparing the save file for each class for xxx skills, thus those with less then xxx skills will be treated as if their save files are corrupted. To solve this problem just add a number of dummy skills to that class (which will not appear on the skill tree or be usable in any way). Leaving this column blank means that the skill has not been assigned to any class.

skilldesc: ID pointer from SkillDesc.txt, this controls all the user interface related aspects of the skill such as the skill icon used, the text displayed in the skill description and how/if the damage and attack rating is displayed on the character screen.Warning Never use two identical entries for the same skill if they are assigned to the same character class, unless of course you enjoy crashing.

SERVER-SIDE SKILL FUNCTIONS
These functions where originally referenced by a hardcoded table during 1.00-1.09, as of 1.10 this function index has been softcoded and can now be modified by editing skills.txt.
This is the heart and soul of a skill, almost everything that makes a skill differ from the others is controlled by the functions used.
The functions control but are not limited to: whenever the skill can apply a state or not, whenever the calc columns are used, whenever a parameter is referenced by code directly, whenever, and how, a missile is launched and anything else you can think of.

func: Server starting function, this controls the server side function executed when you rightclick or shift+leftclick somewhere while the skill is assigned to a button.

srvdofunc: Server finishing function, this controls the server side function executed when the starting function finishes executing, it might either be called repeatedly as long as the mouse button remains down, or it may be called periodically (for skills like paladin auras and blade shield).

prgstack: Boolean used by charge-up skills, true means the individual charges will stack (Fists of Fire, Claws of Thunder and Blades of Ice), false will make each new charge replace the previous one (Phoenix Strike etc). And indeed, you can make all three charges of Phoenix Strike occur at the same time by setting it to true

srvprgfunc1: Server side function to execute when releasing (using a finishing move) charge number 1.srvprgfunc2: Server side function to execute when releasing (using a finishing move) charge number 2.srvprgfunc3: Server side function to execute when releasing (using a finishing move) charge number 3.

prgcalc1: Calculation used by the server side function of charge number 1 (this column is also used by Shock Web and Blade Fury because the skill functions of those skills access it!).prgcalc2: Calculation used by the server side function of charge number 2.prgcalc3: Calculation used by the server side function of charge number 3.

prgdam: Related to the heavily hardcoded progressive stats. 1 is to be used in conjunction with PROGRESSIVE_DAMAGE, 2 is to be used in conjunction with PROGRESSIVE_STEAL, 3 is to be used with the unused PROGRESSIVE_OTHER stat and 4 is to be used with PROGRESSIVE_ stats. I have yet to do research on this, but adding new progressive stats would involve expanding the list of functions linked to by this field!

SERVER-SIDE MISSILE SETTINGS
These columns control the various aspects the missiles launched by this skill server side, that is, this is independant from what the player (client) sees on the screen, thus the client-side missile settings must match this to avoid weird behaviour and stupid questions from users. But you don't have to make the functions match, nothing will happen if they don't, the missile will just not appear, or appear the way it should, on screen.

srvmissile: Primary missile to launch when the server side starting function is executed. This is launched independent of the server side starting function involved (even when no function is execute at all: see fireball and firebolt for example).

decquant: A boolean that controls whenever this skill will decrease stack or ammunition each time the starting function is executed (this is disabled for strafe, enabling it will make strafe waste as many arrows as you fire).

lob: Another boolean, when enabled the missiles fire will be lobbed (tossed like a grenade).
A lobbed missile will vanish (collide with the ground) at the location you clicked with the mouse.Warning A lobbed missile only 'appears' to fly in an arc, that is it will still damage everything it would damage if it wasn't lobbed, to make it behave properly the missile being lobbed must be modified (see Missiles.txt fileguide).

srvmissilea: First secondary server-side missile (how and if this is accessed depends on the server side functions used by the skill).srvmissileb: Second secondary server-side missile (how and if this is accessed depends on the server side functions used by the skill).srvmissilec: Third secondary server-side missile (how and if this is accessed depends on the server side functions used by the skill).

SERVER CONTROLLED OVERLAYS

srvoverlay: Overlays are usually controlled by client-side code, however mission-critical overlays are handled by the server-side code.
This usually applies to those overlays applied to a targeted units when the server-side finishing function executes.
Mission critical overlays are those used by melee attacks, various monster buffs/curses and by Fist of the Heavens (the downward moving missile is actually an overlay).
This is an ID pointer from Overlays.txt. Whenever this is used depends on the server-side finishing function used.

AURA / CURSE / BUFF RELATED SETTINGS
These columns don't necessarily have to be used by an aura / curse / buff at all - for example, the game also uses these fields for skills that have some sort of search radius or an AoE.

aurafilter: This is a binary filter that controls what type of unit is effected by this skill, a discussion on how aurafilters work can be found here. Not all aura filters will work properly with all skills, it largely depends how the server side skill functions search for potential targets! This is used by most skills that search for targets.

aurastate: The state being applied to the caster (user) of the aura / buff / curse. In the case of enchant this is applied to whatever unit the skill is cast on. This is an ID pointer from States.txt.Warning You shouldn't use the same state on more then one skill if both skills are available to the same character or monster, the game uses an index table to determine which state (and thus which stat changes) are currently active on the unit, a state currently present on a unit cannot be applied to it again while the first state is present, thus two skills using the same state will never be able to apply at the same time. This does not mean they will always prevent stacking, it means that you will experience the strangest of glitches.

auratargetstate: The state being applied to the receiver of the aura / buff / curse. This is an ID pointer from States.txt.Warning Never use the same state here as you can never know whenever two skills with the same state will be applied to the same unit, the game uses an index table to determine which state (and thus which stat changes) are currently active on the unit, a state currently present on a unit cannot be applied to it again while the first state is present, thus two skills using the same state will never be able to apply at the same time. This does not mean they will always prevent stacking, it means that you will experience the strangest of glitches.

auralencalc: This field can either contain a calculation or a static value, it controls how long (in frames) the effects of the aura / buff / curse will last. Real auras don't use this, because they are refreshed periodically.

aurarangecalc: This field can either contain a calculation or a static value, it controls the area of effect (in subtiles) in which the aura / buff / curse will effect other units. Some other types of skills also use this (such as Lightning Fury) to determine the search radius or damage radius of the missiles released by them.

aurastat1-6: The stats this aura / buff / curse can alter. It contains ID pointers from ItemStatCost.txt.aurastatcalc1-6: The amount to add or subtract from the stat in question. This field is limited to values between -2147483647 and +2147483647. Higher or lower values will roll.

auraevent1-3: This field specifies what events the aura / curse / buff should react to when this event occurs to the caster (user) of the skill. This is an ID pointer from Events.txt.auraeventfunc1-3: This field specifies the function to execute when the corresponding event occurs (like the above, this refers to the caster of the skill only). A list of event functions can be found here.Warning The majority of these functions will not work properly when called by a skill.

1 - shoots a missile at the owner of a missile that has just hit you (Chilling Armor uses this)
2 - freezes the attacker for a set duration the attacker (Frozen Armor uses this)
3 - does cold damage to and chills the attacker (Shiver Armor uses this)
4 - % of damage taken is done to the attacker (Iron Maiden, thorns uses a hardcoded stat)
5 - % of damage done added to life, bypassing the targets resistance (used by Life Tap)
6 - attacker takes physical damage of #
7 - knocks the target back
8 - induces fear in the target making it run away
9 - applies Dim Vision to the target (it casts the actual curse on the monster)
10 - attacker takes lightning damage of #
11 - attacker takes fire damage of #
12 - attacker takes cold damage of #
13 - % damage taken is added to mana
14 - freezes the target
15 - causes the target to bleed and lose life (negative life regen)
16 - crushing blow against the target
17 - mana after killing a monster
18 - life after killing a demon
19 - slows the target
20 - casts a skill against the defender
21 - casts a skill against the attacker
22 - absorbs physical damage taken (used by Bone Armor)
23 - transfers damage done from the summon to the owner (used by Blood Golem)
24 - used by Energy Shield to absorb damage and shift it from life to mana
25 - absorbs elemental damage taken (used by Cyclone Armor)
26 - transfers damage taken from the summon to the owner (used by Blood Golem)
27 - used to slow the attacker if he hits a unit that has the slow target stat (used by Clay Golem)
28 - life after killing a monster
29 - destroys the corpse of a killed monster (rest in peace effect)
30 - cast a skill when the event occurs, without a target
31 - reanimate the target as the specified monster

auratgtevent: Not used by vanilla. Warning I couldn't get this to work properly in my tests, but as far as I can say, this is the equivalent to the auraevent columns, but for the receiver of the aura.auratgteventfunc: Not used by vanilla. Warning I couldn't get this to work properly in my tests, but as far as I can say, this is the equivalent to the auraeventfunc columns, but for the receiver of the aura.

PASSIVE SKILL SETTINGS
Whenever a skill is a true passive or not depends whenever the Passive Boolean is switched to true, otherwise the behavior of these columns depends on the server side skill functions used, they might function as a secondary passive bonus granted by the skill, as an extension of the Aura / Curse / Buff columns or applied to a summoned creature.

passivestate: The state used by the game to assign the stats and events related things granted by this passive to the unit. This is an ID Pointer from States.txt.Warning You shouldn't use the same state on more then one skill if both skills are available to the same character or monster, the game uses an index table to determine which state (and thus which stat changes) are currently active on the unit, a state currently present on a unit cannot be applied to it again while the first state is present, thus two skills using the same state will never be able to apply at the same time. This does not mean they will always prevent stacking, it means that you will experience the strangest of glitches.

passiveitype: This field is used in conjunction with the passive stats used by weapon masteries, they contain an ID pointer to ItemTypes.txt which tells the game what item types will receive a bonus from the corresponding passive stat.Warning This does not work with stats that aren't meant to be part of weapon masteries, forget about it, the only stats this works with are passive_weaponblock and passive_mastery__, period.. Weapon masteries are no hardcoded to the lines in Skills.txt, this has been a die hard rumor.

passivestat1-5: This field tells the game which stats are assigned by this passive skill. This contains an ID pointer from ItemStatCost.txt.passivecalc1-5: This field can either contain a static value or a caltulation telling the game how much to add or subtract from the associated stat. This field is limited to values between -2147483647 and +2147483647. Higher or lower values will roll.

passivevent: Not used by vanilla. Warning I couldn't get this to work properly in my tests, but as far as I can say, this will control what event this passive will react to.passiveeventfunc: Not used by vanilla. Warning I couldn't get this to work properly in my tests, but as far as I can say, this field controls what function to execute if the associated event occurs.

SUMMON SETTINGS
Special stats added to a summoned creature are either appended via MonEquip.txt, MonProp.txt or via the aurastat or passivestat columns.

summon: This field specifies what creature is summoned by this skill. This is an ID Pointer from MonStats.txt.

pettype: This controls what group the summoned creature is placed in. This controls what icon appears, whenever this summon can co-exist with other summons or not (such as there being only 1 golem, rather then one golem of each type), warping behavior and more. This is an ID Pointer from PetTypes.txt.

petmax: This field can contain either a static value or a calculation which controls how many summons of this group a player can have at a time. Leaving it blank means there is no limitation.

summode: The animation mode that the summoned creature will play when you summon it. Lets say you want to summon a Zombie, and it should look as if the Zombie crawls out of the soil, then you'd set this to S1 (the special animation of the Zombie). Usually you'd use NU (neutral) mode here, because most units won't have animations suitable for this.

sumskill1-5: These fields control the skills that are assigned to the summoned creature. This doesn't mean the summon will use these skills.
This is mostly used to pass a synergy bonus to the summoned creature (such as additional damage for Hydra). Whenever a summon will actively use any of these skills depends on the AI used. You can forget using the Necropet AI, this AI is totally hardcoded and will not use these skills unless the code is modified. The best AI to use is the Shadowmaster AI, be aware that the skills that the summon should use must also be referenced in MonStats.txt.

sumsk1-5calc: These fields can contain either a static value or a calculation that tells the game what sLvl to assign to the corresponding skill assigned to the summoned creature.

sumumod: This field is pretty neat, it controls what boss modifiers to grant the summoned creature, this means you can make grant your summons properties like Lightning Enchanted or Aura Enchanted (random aura). This column contains ID numbers from MonUMod.txt. There is only one minor side effect, because the summoned creature doesn't have a special boss seed, the name that is displayed when you hover over it with Unsummon will be Mind Maw the Slasher.

sumoverlay: This field controls what graphical overlay to display when the creature is summoned (this overlay is applied to the summoned creature, not the caster). This is an ID Pointer from Overlays.txt.

SOUND and OVERLAY SETTINGS
Quite obviously all columns ending with 'sound' are meant for ID pointers from Sounds.txt whereas those ending with 'overlay' are meant for ID pointers from Overlays.txt.

stsuccessonly: A boolean that controls whenever the assigned sounds and overlays will keep playing even when the casting of the skill is interrupted by an attack landed on the caster. Correction by brappy

stsound: This field controls what sound will be played when the starting function of the skill executes, it will play irregardless of the character class using the skill.

stsoundclass: This field controls what sound will be played when the starting function of the skill executes, it will play only for the character class this skill is assigned to in the charclass column. This is useful for preventing grunts from one class to be played when another class uses it (this wasn't the case prior to 1.10, so if you gave Bash to lets say a Sorceress, she would play the Barbarian grunt wav's).

stsounddelay: Boolean of unknown functionality.Warning Again, I couldn't see a difference in-game while testing. But I believe this controls whenever the sound should start playing at the moment the starting function beings execution (false) or when the function finishes executing (true).

weaponsnd: This Boolean controls whenever or not to play the sound associated with the weapon you have equipped when using this skill when the starting function executes.

dosound: This field controls which sound to play every time the finishing function executes (for a skill like Zeal this would mean every time your Paladin swings at an enemy).dosound a: How this and the next field work is depending on which finishing functions are associated with the skill. It ranges from specific sounds to play after the attack, to the sounds associated with summoned creatures.dosound b: How this and the previous field work is depending on which finishing functions are associated with the skill. It ranges from specific sounds to play after the attack, to the sounds associated with summoned creatures.

tgtoverlay: This field controls what overlay to associate with the unit targeted by the skill, this overlay is drawn once the finishing function executes. In the case of Zeal this would mean that the initial swipe will not draw an overlay over the monster you attack, but all following swipes will.

tgtsound: This field controls what sound to play (originating from the targeted unit) once the finishing function associated with the skill executes. In the case of Zeal this would mean that the initial swipe will not play a sound but all following swipes will.

prgoverlay: How this field is used depends on the skill functions associated with the skill. In the case of charge-up skills, this field contains the first overlay for the charge-up graphics group used by this skill. For other other skills like Hurricane it controls what overlay to display while the skill is active.

prgsound: Like the previous field, the way this field works varies with the functions used. It can contain the sounds to play for each charge-up or the sounds to play while a skill like Hurricane is active.

castoverlay: This field controls what overlay to associate with the unit using the skill. This overlay is drawn when the skill is successfully started (the starting function begins to execute - this does not mean the skill succeeds, it only means that the code for the skill starts executing).

cltoverlaya: Usually this will work like the previous field, but depending on the skill functions used (such as those of the Sorceress' cold armors) this can vary greatly.cltoverlayb: Usually this will work like castoverlay, but depending on the skill functions used (such as those of the Sorceress' cold armors) this can vary greatly.

CLIENT-SIDE SKILL FUNCTIONS
These functions where originally referenced by a hardcoded table during 1.00-1.09, as of 1.10 this function index has been softcoded and can now be modified by editing skills.txt. The client side functions handle how the skill will appear on the users screen, you should stick with the client/server function pairs Blizzard have used (the skill will otherwise do something completely different from what is shown on screen, which can lead to desync and possibly crashes if the client isn't updated properly in MP games), but feel free to experiment.

cltstfunc: Client starting function, This controls the client side function executed when you rightclick or shift+leftclick somewhere while the skill is assigned to a button.cltdofunc: Client finishing function, this controls the client side function executed when the starting function finishes executing, it might either be called repeatedly as long as the mouse button remains down, or it may be called periodically (for skills like paladin auras and blade shield).

cltprgfunc1: Client side function to execute when releasing (using a finishing move) charge number 1.cltprgfunc2: Client side function to execute when releasing (using a finishing move) charge number 2.cltprgfunc3: Client side function to execute when releasing (using a finishing move) charge number 3.

CLIENT-SIDE MISSILE SETTINGS
These columns control the various aspects the missiles launched by this skill client side, that is, this is independent from what the server-side code does, thus the server-side missile settings must match this to avoid weird behavior and stupid questions from users. But you don't have to make the functions match, nothing will happen if they don't, the missile will just not appear, or appear the way it should, on screen.

cltmissile: Primary missile to launch when the client side starting function is executed. This is launched independent of the client side starting function involved (even when no function is execute at all: see fireball and firebolt for example).cltmissilea: First secondary client-side missile (how and if this is accessed depends on the client side functions used by the skill).cltmissileb: Second secondary client-side missile (how and if this is accessed depends on the client side functions used by the skill).cltmissilec: Third secondary client-side missile (how and if this is accessed depends on the client side functions used by the skill).cltmissiled: Fourth secondary client-side missile (how and if this is accessed depends on the client side functions used by the skill).

CLIENT-SIDE SKILL CALCULATIONS

cltcalc1-3: These fields serve special purposes and are referenced by the client side skill functions, what they do depends entirely on the functions involved. You reference them inside other calculations if you wish or require additional space for a very long formula (but you should make sure the functions used don't actually access these fields first!). They can of course also contain a static value instead of a calculation.

MISCELLANEOUS SETTINGS I

warp: A Boolean of unknown function.Warning Set to true only for skills that shift you to another spot, but altering this seams to have no influence on the game at all. Maybe this has to do with MP games and synchronization, leave it alone to stay on the safe side.

immediate: A Boolean that controls whenever an aura will apply immediately after it is assigned to a mouse button or whenever to wait until the first perdelay has elapsed. Usually those aura that grant a bonus to the players stats will be set to true herein, while those that effect monsters (like Conviction) will be set to false.

enhanceable: A Boolean of unknown function.Warning This is set to true only for skills that are always sLvl 1, nonetheless this doesn't influence if the skill gains any bonus from items, it seams to do nothing notable (if it does anything at all).

attackrank: This field is related to how monsters react when the skill in question is used against them. Ever wondered why monsters don't attempt to retaliate if they are hit by a elemental damage aura, this field is what controls the retaliation behavior. As a rule of thumb, the higher the more likely a monster will retaliate against the attack. 0 will make them ignore it (like they ignore elemental damage auras).

EQUIPMENT RELATED USAGE RESTRICTIONS

noammo: This Boolean controls whenever the player requires ammunition to use this skill. Use this, in conjunction with decquant to make other missile skills behave like Magic Arrow. Obviously setting this to true means no ammo is required .

range: This switch field can take one of four values. It controls how the player can launch this skill. First of all, none means it has no restrictions on it, and is a spell (like Fire Ball), rng means this skill is a ranged skill (Javelin skills, Bow/Crossbow skills), h2h means that this is a Hand to Hand combat skill (melee) (Bash, Sacrifice etc), both means that the skill can function as both h2h and rng (like Attack).Warning Setting a skill to h2h will not prevent the player from launching it from afar, he can always shift-click!

weapsel: This field controls how to access the gear necessary to use this skill. A blank value means it wont handle this skill in a special way (that is, it'll look for the weapon in the Right hand of the player). 1 in this field will make it look for a weapon in the Left hand of the player. 2 in this field means that it can either use the Right or the Left or Both weapons (used by Whirlwind). 3 in this field means that it will always use Both weapons and finally a value of 4 means that the game will not use a weapon, but a piece of armor. Be aware that code 4 is heavily hardcoded and will only work with those skill functions using it in vanilla!

itype1-3: The item type required to use this skill (needed to use this skill, this restriction is imposed on the players right hand). This is a ID pointer from ItemTypes.txt.etype1-2: The item types this skill cannot be used with (even if they are included in the former fields! This restriction is imposed on the players right hand). This is a ID pointer from ItemTypes.txt. This is why you cannot use Attack with a throwing potion for example (you could before LoD).itypeb1-3: The item type required to use this skill (needed to use this skill, this restriction is imposed on the players left hand). This is a ID pointer from ItemTypes.txt.etypeb1-2: The item types this skill cannot be used with (even if they are included in the former fields! This restriction is imposed on the players left hand). This is a ID pointer from ItemTypes.txt. This is why you cannot use Attack with a throwing potion for example (you could before LoD).

ANIMATION SETTINGS

anim: The animation mode that the game plays when the player uses this skill. The list of animation modes for players can be found within PlrMode.txt. Setting this to mode SQ will make the player use the associated sequence instead. This also controls whenever the skill is effected by FCR or IAS! In case of a sequence it depends on what animations are used by the sequence.Warning Certain modes (like GH) will crash the game as they aren't meant to be used by skills.

seqtrans: This field apparently doesn't do anything, it probably was meant to control animation mode played before starting the sequence, but is obviously not used (it never was, not even in 1.00 IIRC).

monanim: This field is only used by Shadow Master AI and Shadow Warrior AI, it defines the MonMode used when casting skills that are not assigned within MonStats.txt.
These extra skills can be acquired via MonProp, Items (oskills), sumskill1-5, or even your own skills. - New definition provided by Ogodei

Nefarius wrote:Old Definition: Monsters always use the skill mode that you assign in MonStats.txt. The only units that access this field are Shadow Masters and Shadow Warriors, because they use Assassin animations. A list of modes can be found within PlrMode.txt for these two summons. If a value of xx is supplied the Shadow's will look for the sequence assigned inside MonStats.txt this workaround was put there by Blizzard because monsters are unable to use Player sequences. New wording in part on a suggestion by Myhrginoc.

seqnum: This field contains the ID of the player-animation-sequence to play when this skill is used in case the anim column is set to use mode SQ. Unlike monster sequences, player sequences are unfortunately still hardcoded in a table within D2Common.dll. Below is a list of sequences (the proper characters are needed for each sequence, but some work on more then one class).

0 = no sequence (if you use this you'll see half of a casting anim, and then an assertion error)
1 = used by Jab
2 = messed up sequence originally used by Sacrifice (flashes on some weapons)
3 = unused sequence (uses casting anim)
4 = used by Charge
5 = unused sequence (from the times conviction wasen't an aura, the sequence still works on a pally with a sword)
6 = used by Inferno
7 = unused sequence (uses casting anim)
8 = used by Impale
9 = messed up sequence originally used by Fend (doesn't work properly)
10 = used by Whirlwind
11 = used by Double Swing
12 = similar to 6, used by Lightning skills
13 = used by Leap
14 = used by Leap Attack
15 = used by Double Throw
16 = used by Double-Claw attacks
17 = unused Assassin? sequence
18 = used by Arctic Blast
19 = unused sequence originally used by Dragon Talon
20 = unused Assassin? sequence
21 = used by Dragon Flight
22 = unused sequence originally used by Were-transform skills
23 = used by Blade Fury
Sequences >24 but exist in the DLL (the highest confirmed one is 41, but there are likely more).

seqinput: This controls the interval to wait before looping the sequence (used by recursive skills such as Inferno), setting this to 100 will make the game pause between individual inferno bursts for example. This is most likely in milliseconds and not frames, setting the interval to a too small value however will cause the sequence to skip the trigger frame (on the client-side only however...)!

durability: A boolean of unknown function.Warning This doesn't have anything to do with skills that can reduce durability. It's apparently related to skills that use sequences however. No idea what it does, follow the Blizzard approach and just use it with those skill functions they use it with to be safe of unexpected side effects.

UseAttackRate: A Boolean of unknown function.Warning This is not related to Attack Rating if you wonder. The name suggests that it is related to Attack Rate however (which is the stat increased by IAS) however it seams to have no influence whatsoever in game, most likely a deprecated leftover from alpha D2 times.

TARGETING CONTROLS
While these columns all look straightforward, they usually aren't. What and whenever a skill can target something depends foremost on the skill functions involved, these columns are just a second layer of minor importance, unfortunately.

LineOfSight: This field seams to be a binary flag switch, but only one flag is used by the game, which is 4 (100). It controls whenever or not the skill takes into account the players Line of Sight. That is, if this is set to 4 you cannot cast the skill through walls, but if it is left blank you can. This is easy to test with summoning skills. If for example you'd set this to 0 on a skill like Valkyrie you can summon a Valkyrie in a different room, without ever opening the door.

TargetableOnly: A Boolean of unknown function. Warning It doesn't do what the name suggests anyhow. Frankly enough it doesn't seam to do anything.

SearchEnemyXY: A Boolean of unknown function. Warning This usually comes in conjunction with the previous field, likewise it doesnt seam to do anything (noteable at least).

SearchEnemyNear: A Boolean that controls whenever the skill will make other people call you a noob in MP games, I mean whenever it should automatically pick its own targets (this works best with the left button (combined with shift obviously - it doesn't need to be an enemy, it can also be a corpse for skills that target corpses), heck the character will even pursues monsters on his own as long as the button is held down!). This worked on all skills I tested it on. Don't abuse this field, it will make D2 even easier then it is, as you won't even need to target anything, just hold the button...

SearchOpenXY: When set to true, this Boolean will make the skill look for an unoccupied subtile (apparently depending on the size settings of the controllermissile created by the skill) as the target for the skill (this is used by skills like Fire Wall, Meteor and Blizzard which create a invisible controller missile), it makes sense because no two units (and missiles ARE units) can occupy the same subtile, so if Fire Wall or a similar skill was to spawn in an occupied subtile the game would either crash OR the skill would never show any effect since the missile is destroyed before it triggers. If no free subtile is found in proximity to the target of the skill, the execution of the skill will fail. Confirmed by Brother Laz.

SelectProc: This field is always to be used in conjunction with the following field. It controls which corpses you can target and has 6 different filter lists. 1 is used by the variants of Corpse Explosion, 2 is used by Raise Skeleton and Raise Skeletal Mage, 3 is used by Revive, 4 is used by Find Potion, 5 is used by Find Item and 6 is used by Grim Ward. I haven't tested if this works on living monsters (such as making a skill that cannot target bosses).Warning This does not control whenever a skill can actually be used on the targeted corpses (you cannot make Revive work on boss-corpses etc), but you will be able to highlight them. Not very useful...

TargetCorpse: This Boolean controls whenever the skill can be cast on a corpse (it doesn't control whenever the corpse can be selected, it only controls if the skill is cast on the corpse AFTER it is selected, whenever or not it can select the corpse depends on the skill functions and filter list used).

TargetPet: This boolean controls whenever the skill can be cast on a summon or hireling (it doesn't control whenever the summon or hireling can be selected, it only controls if the skill is cast on the summon or hireling AFTER it is selected, whenever or not it can select the summons or hirelings depends on the skill functions used).

TargetAlly: This Boolean controls whenever the skill can be cast on a other players (it doesn't control whenever the another player can be selected, it only controls if the skill is cast on another player AFTER it is selected, whenever or not it can select another player depends on the skill functions used).

TargetItem: This Boolean controls whenever the skill can be cast on items lying on the ground (it doesn't control whenever the item can be selected, it only controls if the skill is cast on the item AFTER it is selected, whenever or not it can select an item depends on the skill functions used).

TgtPlaceCheck: This Boolean is only used by monster resurrection spells. Setting it to false will break those skills (Resurrect and Resurrect2), I don't know what it does other then enabling those skill functions though.

MISCELLANEOUS SETTINGS II

AttackNoMana: A Boolean that controls whenever or not the player should perform a regular attack in-case he runs out of mana while using this skill. Correction by Nameless.

ITEM-EVENT RELATED SKILL SETTINGS
These columns only influence the behaviour and looks of a skill when it is launched by a Chance-To-Cast event function, they don't effect the skills normal behaviour. I didn't test most of these because I have no idea how exactly I should see the differences as they appear to be minimal, so they are listed as unknown or unclear with my best guess appended.

ItemEffect: Server-side launcher function. This field controls what function is called when this skill is launched by a chance-to-cast modifier. Leaving it blank means no function is called, and the skill isn't cast. You would usually use function 1. But there are at least two others (36 and 151). Function 36 will fire the skill from the target rather then the wielder of the item. Additional info supplied by Brother Laz

ItemCltEffect: Client-side launcher function. This is only required if an abnormal launcher function is used in the previous field. Blizzard uses 10 and 96 as equivalents to server-functions 36 and 151.

ItemTarget: Allows you to target objects (like waypoints).Warning This seams to be another one of those targeting filters. By default this is blank (0), but for some skills special targeting functions are used. 1 is used by Enchant (which can also be cast on nearby allies), 2 is used by Teleport (which picks a random empty subtile), 3 is used by the corpse explosion variants and probably selects a random corpse and 4 is used by homing missiles (Bone Spirit) and Fist of the Heavens (skills that need an absolute target).

ItemCheckStart: A Boolean of unknown function.Warning I assume that this is used to prevent collisions between the Hydra and Bone Prison who have this switched to true and occupied subtiles before the starting function is execute.

ItemCltCheckStart: A Boolean of unknown function.Warning This seams to serve a similar purpose to the one assumed for the previous field, seams to tell the game to check if the server-side starting function has executed successfully before calling the client function (used by Corpse Explosion skills, probably to prevent the gore-graphic from showing up even if the skill fails).

ItemCastSound: This controls the sound that is played instead of the regular sound when the skill is launched by an Item Event. This is a ID pointer from Sounds.txt.

ItemCastOverlay: This controls the casting overlay displayed instead of the regular overlay when this skill is launched by an Item Event. This is a ID pointer from Overlays.txt.

POINT PLACEMENT and PRE-REQUIREMENT SETTINGS

skpoints: This field can contain either a static value or a calculation. This controls how many skill points are necessary in order to boost this skill by 1 sLvl.

reqlevel: The minimum character level required in order to put a point in this skill. To remove the hardcoded level requirement from OSkills you can set this to -6.

maxlvl: The maximum sLvl this skill can achieve.Warning The actual absolute maximum skill level is controlled by the MaxLevel row in Experience.txt and is thus always equal to the maximum cLvl of the class using the skill.

reqstr: How much strength the player requires in order to put a point in this skill (first point only). This is functional as it was always, but it isn't displayed on screen.reqdex: How much dexterity the player requires in order to put a point in this skill (first point only). This is functional as it was always, but it isn't displayed on screen.reqint: How much energy the player requires in order to put a point in this skill (first point only). This is functional as it was always, but it isn't displayed on screen.reqvit: How much vitality the player requires in order to put a point in this skill (first point only). This is functional as it was always, but it isn't displayed on screen.

reqskill1-3: These fields contain the ID Pointers (name column) of the other skills you need in order to put your first point in this skill (aka simply the prerequisite skills).

STATE RELATED RESTRICTIONS

restrict: This switch field controls under what state (shape in case of a druid) this skill can be used. 0 means that it can only be used while in Human form, 1 means that it can be used both under shifted and under Human form and 2 means that it can only be used when in one of the states defined in the three following columns.

state1-3: This field controls which states this skill is restricted to, in the case restrict is set to 2. This is an ID pointer from States.txt.

SKILL DELAY SETTINGS

delay: This field can contain either a static value or a calculation. This controls how many frames the skilldelay state will be applied to the character after using this skill. Among others this also controls which skills will be disable while that state is active. Any skill with a value greater then 0 in this column will be disabled while under the influence of the skilldelay state. When the skill delay is applied depends on the skill used, usually they initialize once the trigger frame of the animation has triggered an event. The delay counter will be reset should the execution of the skill be interrupted by an attack.

MISCELLANEOUS SETTINGS III

leftskill: A Boolean that controls whenever or not you can use this skill will appear on the list of skills you can assign to the left mouse button.Warning A bunch of skills (especially all auras) cannot be used on the left mouse button, no matter what you set this to, this is caused by engine limitations, forget about it. You shouldn't put things like curses, summoning and the like in here, it only serves to causes gameplay related annoyance.

repeat: A Boolean of unclear functionality.Warning This Boolean is used in conjunction with skills that keep repeating their finishing function for as long as you keep the button pressed (Inferno, Arctic Blast, Blade Fury), however unchecking it doesn't have any influence on the game, the skills work like they did before, so I'm a bit puzzled regarding the real purpose of this field. Set it to true on clones of those three skills, to prevent possible problems.

checkfunc: This field contains a reference to a slot in a function table of a special function to call, but the purpose is still unknown.Warning This appears to be a sort of callback function to execute once the main skill functions finish executing. The game uses function 1 for all skills that can use up ammunition (arrows, bolts), 2 is used for throwing (but not the Amazons javelin skills!), 3 is used for Left Hand Throw, 4 is used for Left Hand Swing, 5 is used for the scroll and book skills (these aren't skills at all, what they do is controlled solely by the functions assigned in misc.txt and books.txt) and 6 is used by Double Throw. These are most likely related to updating quantity data in multiplayer games from the looks of this.

MANA COST SETTINGS
The following fields control the mana cost of the skill, and how the mana cost is to be applied. In order to not over-complicate the explanations below, here is a formula to calculate mana cost (replace the column names with the values you've put in those columns in Skills.txt, obviously).For effectiveshift value see the table below this section.

manacost = max((mana+lvlmana*(sLvl-1))*effectiveshift,minmana);

nocostinstate: A boolean related to the other state-restriction related columns found earlier in the file. This controls whenever or not the skill will require no mana while the player is transformed (shape shifted), this is used to make Werebear and Werewolf cost no mana when the Druid is shape shifted, so he can return to human form without any mana cost.

usemanaondo: A boolean that controls when the mana pool is diminished, I can't properly explain this but the following example will demonstrate how it works, this field is usually not noteable, but if you set this to true on a skill like Inferno you will only loose mana once you let the button go (even if you cast the Inferno for a whole hour, day, month or year), but once you let the button go and the game finishes executing the functions you get the whole mana cost thrown at you.Warning This doesn't always work, sometimes you will not loose any mana, even after you let go of the mouse button, so don't overuse this.

startmana: The minimum amount of mana required to cast this skill. This does not control how much mana the skill uses, but the icon will remain red as long as mana is below this. For example Inferno is not castable by a Sorceress who only has 5 mana. This can be quite nasty, see it as if it was called ReqMana.

minmana: The mana cost for this skill will never fall below this minimum value. This functions like max(minmana,manacost);, this is useful for skills with decreasing mana cost per sLvl while preventing them from dropping too low.

manashift: This field controls the precision of the mana cost. Mana Cost is handled in 256ths for extra precision (mana is handled in 256ths by code). Internally this is simply a bitwise shift, but for not making this too complicated see the table below for multiplies and some other values that will aid you in understanding how it works. The mana cost in the example is 1000. To get the proper mana cost just multiply it by the multiplier I've listed below.

lvlmana: The additional mana cost added to the base mana cost with every additional sLvl.

MISCELLANEOUS SETTINGS IV

interrupt: A Boolean that controls whenever the player will stop performing this skill should he get hit in the middle of doing so.Warning Since the original release of the game this whole uninterruptable business is bugged beyond belief. You should always set this to true. If the player performs an uninterruptable skill and gets hit, he will indeed complete performing the skill, but it will more often then not fail to do any damage (it's only performed on the client!)

InTown: This Boolean controls whenever or not this skill can be used inside a town, damage cannot be dealt inside a town, neither will the skill create any missiles, thus you should only use this with buffs and summoning skills.Warning All auras whatsoever must have this set to true, otherwise you'll experience glitches galore.

aura: A Boolean that controls whenever this skill is an aura. This controls the color-tint of the skill icon and all other aspects unique to aurae. It is required to access the perdelay column.

periodic: A Boolean of similar nature to the previous one. This controls whenever this skill will execute every time the perdelay countdown has elapsed for the time the state assigned to the skill remains active. Currently used by Blade Shield and Thunder Storm, experimenting with this could be interesting.

perdelay: This field can either contain a static value or a calculation, this controls the interval used by aura and periodic skills. Auras will be applied to other units every time this interval has elapsed. Periodic skills will execute their code every time this interval has elapsed. This is in frames, obviously.

finishing: A Boolean that controls whenever this skill can function as a finishing move for charge-up skills. No, setting this to true on a charge-up skill will not work.

passive: A Boolean that controls whenever this skill is a passive skill (and thus applies what you've defined in the passive skill at all times). A passive skill will never show up within the left or right skill menus.

progressive: A Boolean that controls whenever this skill is a charge-up skill. Setting this to false on a charge-up skill will break it (the charges will just vanish after it is charged up).

general: A boolean of unknown functionality.Warning This Boolean is only enabled for skills that are inherited by characters via CharStats.txt. Altering this doesn't seam to change anything notable in-game.

scroll: A boolean of unknown functionality.Warning This Boolean is only enabled for skills that are referenced by Books.txt. Altering this doesn't seam to change anything noteable in-game.

SERVER-SIDE SKILL CALCULATIONS and PARAMETERS

calc1: to calc4: These fields control special calculations accessed directly by the server-side skill functions. Their purpose is universal, as their result will be applied to whatever the function is designed to apply it to. Some missile functions will access these fields if the missile is assigned to this skill in Missiles.txt. This obviously can contain calculations (and static value). If a calculation field isn't used by the skill function you can try everything from throwing your computer out of a window to yelling at the field, it won't change unless you use another skill function . You can reference unused skill calculation fields inside other calculation fields however to obtain more space for long formulae.

param1: to param8: These fields contain special parameters either passed on directly to the skill function or referenced within calculations inside this and SkillDesc,txt. Parameters can only contain static values.

MISCELLANEOUS SETTINGS V

InGame: A Boolean that controls whenever or not the skill is available in-game. Setting this to false will make the skill noexistant in-game.

ATTACK RATING RELATED SETTINGS
The following columns will are used to grant a bonus to attack rating (the stat that determines your chance to hit a target) for that skill (so for aurae and buffs these columns are useless other then for additional parameters to reference in calculations). These columns are bugged, they will not work with missile attacks, that is, the AR bonus is never applied even if it shows on screen. This especially applies to Bow and Crossbow skills. The bonus granted by the column is a percentage, not a static bonus. So if the columns give you 100% extra AR that doubles the AR you have while using the skill, it does not add 100 to it.

ToHit: The base bonus to attack rating granted by this skill at sLvl 1.

LevToHit: The additional bonus to attack rating added to the base bonus granted by this skill every sLvl after sLvl 1.

ToHitCalc: A field that can either contain a calculation or a static value that determines the bonus to attack rating granted by this skill, when this is not blank (equals 0) the previous two columns are ignored by the game.

SPECIAL ATTACK SETTINGS
The following fields are still pretty cryptic (except HitClass), they are used to apply special events to successful attacks landed by this skill.

ResultFlags: This field is another binary switch, it controls special events that occur as a result of a successful hit landed by the skill. Below are two reference tables showing which skills/missiles use what and also what the individual binary switches do in case I managed to decipher them. To use two switches you add their decimal values together.
So to make a switch that has all of them set (111111111111111) you'd add 1+2+4+8+16+32+64+128+256+512+1024+2048+4096+8192+16384 together (equals 32767), or just pump the binary value into the windows calculator and convert to decimal.

HitFlags: Pretty much unknown, this is another binary switch (that is barely used on skills).Warning This is used with those skills that have abnormal ways to deal damage and with missiles that radiate their damage on collision, keep with Blizzard's settings to avoid glitches.

Kick: A boolean of unclear purpose.Warning Obviously this is set to true on skills that use the kicking animation, but what exactly it controls I can't say, setting it to true on other skills seams to have no influence on the game.

DAMAGE RELATED SETTINGS

The following columns control how this skill will deal damage, note that many skills also use skill calcs for enhanced damage on top of this. Below is a more or less accurate formula to calculate the damage done by a skill. For the value of effectiveshift see the table at the end of the section.

base_damage is the damage you would do with a normal attack (this is separated by element, so consider this whole thing is done for each element involved, including physical damage and lifesteal/manasteal) in addition to any bonus added by damage enhancements applied by the skill through calc fields.skill_damage is the additional offweapon damage granted by the skill (all sLvl boni included here).enhancer_stat is a stat that increases this damage type as a whole (the 'extra fire damage' style stats).

HitShift: This field controls the precision of the off-weapon damage done by this skill. Damage is handeled in 256ths (life is handled in 256ths by code). Internally this is simply a bitwise shift, but for not making this too complicated see the table below for multiplies and some other values that will aid you in understanding how it works. The damage in the example is 1000. To get the proper damage just multiply it by the multiplier I've listed below.

SrcDamage: This field controls how much weapon damage to transfer to the skill. Unlike HitShift this allows for a much greater degree of precision as instead of using the value 8 as the base, it uses the value 128 allowing for 127 different settings! Simply remember that 128 equals 100%, 96 equals 75%, 64 equals 50%, 32 equals 25% and so on. So as an example, a character doing 1000-3000 damage with normal attack would do roughlt 515-1547 with a skill having a SrcDamage value of 66. This applies to all types of damage done by the character without the skill (and this also includes lifesteal and manasteal, which are damage types). Each damage type is treated seperatly.

MinDam: and MaxDam: Controls the basic minimum and maximum physical damage dealt by this skill at sLvl 1.Warning Whenever the game will use these fields depends on the skill functions used. But almost all of them will do.

MinLevDam1: to MinLevDam5: and MaxLevDam1: to MaxLevDam5: Controls the additional physical damage added to the skills minimum and maximum damage for every additional sLvl. LevDam1 is used for sLvls 2-8, LevDam2 for 9-16, LevDam3 for 17-22, LevDam4 for 23-28 and LevDam5 for sLvls above 28.Warning Whenever the game will use these fields depends on the skill functions used. But almost all of them will do..

DmgSymPerCalc: This field controls the synergy bonus (a percentage) added to the physical damage done by the skill (this does not influence physical damage passed over by SrcDamage). This field can contain both calculations and static values.

EType: Controls the type of elemental damage dealt by this skill (this also controls whenever +to fire skills and similar costum modifiers will effect this skill or not). This is an ID pointer from ElemTypes.txt.

EMin: and EMax: Controls the basic minimum and maximum elemental damage dealt by this skill at sLvl 1.Warning Whenever the game will use these fields depends on the skill functions used. But almost all of them will do.

EMinLev1: to EMinLev5: and EMaxLevDam1: to EMaxLevDam5: Controls the additional elemental damage added to the skills minimum and maximum damage for every additional sLvl. LevDam1 is used for sLvls 2-8, LevDam2 for 9-16, LevDam3 for 17-22, LevDam4 for 23-28 and LevDam5 for sLvls above 28.Warning Whenever the game will use these fields depends on the skill functions used. But almost all of them will do..

EDmgSymPerCalc: This field controls the synergy bonus (a percentage) added to the elemental damage done by the skill (this does not influence elemental damage passed over by SrcDamage). This field can contain both calculations and static values.

ELen: The base duration of the elemental damage used, if this damage type uses duration (stun, pois and burn use duration), this is in frames of course. Burn damage is not fire damage.Warning Whenever the game will use these fields depends on the skill functions used. But almost all of them will do..

ELevLen1: to ELevLen5: Controls the additional duration added to the base duration with every sLvl past sLvl 1. LevLen1 is used for sLvls 2-8, LevLen2 is used for sLvls 9-16 and LevLen3 is used for sLvls above 16.Warning Whenever the game will use these fields depends on the skill functions used. But almost all of them will do..

ELenSymPerCalc: This field controls the synergy bonus (a percentage) added to the duration of the elemental damage done by the skill (this does not influence duration passed over by SrcDamage). This field can contain both calculations and static values.

AI RELATED SETTINGS

aitype: This controls how the skill will be used by Shadow Masters and Shadow Warriors, and in the case of the Act III Iron Wolves this controls how they use the Sorceress cold-armors. See the following topic for details.

aibonus: This field increases the probability that a Shadow Master will use this skill. See the following topic for details.

ITEM COST RELATED SETTINGS

CostMult: This controls by how much the base price of an item is multiplied if this skill is present on it. Keep it below 1024, higher values are ignored by the game.

CostAdd: This controls the additional amount of gold added to the price of an item for each sLvl of this skill present on the item.