生活情怀-神话暗黑-暗黑破坏神2

 找回密码
 立即注册

QQ登录

只需一步,快速开始

暗黑mod发布网
搜索
逗破暗黑Mod群:67994934逗破暗黑Mod客户端及补丁逗破暗黑Mod新手攻略逗破暗黑Mod赞助菜单
神话怀旧MOD群:67994934神话怀旧Mod客户端及补丁神话怀旧Mod新手攻略神话怀旧Mod赞助菜单
圣者归来Mod群:558972013圣者归来Mod客户端及补丁圣者归来Mod新手攻略圣者归来Mod赞助菜单
查看: 1077|回复: 1
收起左侧

[修改攻略] Missile的Functions详细介绍

[复制链接]

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
发表于 2022-2-17 10:49:21 | 显示全部楼层 |阅读模式
转载 https://d2mods.info/forum/viewtopic.php?f=4&t=67114   自行翻译
0 }# w4 o7 ?4 V; m
# b0 _( d$ o9 W8 bThis is my attempt at describing as many missile functions as possible, primarily looking at skills.txt and missiles.txt. I made this to get an idea as to the limits of using missiles.1 y4 l# _4 U6 E1 D3 }' k7 U  Y

4 s2 C- Z3 f4 X4 \' X8 iSee here for the Guide to Non-Missile Functions: https://d2mods.info/forum/viewtopic.php?t=66934+ _; j9 ]  q  J  ~5 c+ v+ j6 C
: ]/ s* {8 N( C7 s
I also use a color scheme to describe how useful a missile might be.# G  S0 h$ Q0 ]0 \, T( T
Indicates the function is hardcoded, broken, has no known purpose or is not understood3 s, D" ~& C+ ?. O3 z
Indicates the function works, but is either awkward or seems to be an inferior version of another function: k2 r* q! c  P4 b% K- q# p7 Q
Indicates the function works and is highly recommended for use; subsequent green-labeled entries are alternatives that might work just as well) t8 c5 l! k) s; d5 G* b2 D
Indicates the function works and has a unique behavior with no available alternatives
2 a% i( R7 a0 l9 \: G; _. w9 }Indicates the function works somewhat, but is cltside only; these can also sometimes be hardcoded, but I don't care enough about cltside missiles to make a distinction, o( \( F+ A* }# h4 Q
Indicates the function works and is cltside only, but is still interesting' P: s* {9 Z  W
/ v0 ^/ o( m$ {9 k' f
Also, I recommend looking at mishy23's excellent guide: https://d2mods.info/forum/viewtopic.php?t=29595; a few of the missiles described in that guide are not described here, and it also fully describes pSrvDmgFunc which is not described in this guide at all.8 f9 _: N; k9 X

' K. Z6 R% }3 Y" W! DTHANKS TO:' ~( l+ _8 E" m; S
mishy23 for his missile guide# Z  W* p9 o% u) S& i% Q
Ogodei for his description and understanding of doomknightmissile/necromagemissile
- i% c" E7 a4 n4 \7 o3 eWhoever figured out the hidden monster spawning missile function
1 c$ u- t  B2 F/ KHygiliak for describing hit function 39, Brother Laz for popularizing it8 K" G6 ]4 b! x( o
Vicarious Visions for including "diabloiidatafileguide" in D2R.
5 c/ ]3 o9 S; o: A6 t
& S2 \, J3 N( k9 J$ gEDIT:
- J" Y: K. c2 k' k* n* m$ Y$ M4 b(4/9/2021) Added Sacrifice's cltdofunc# \$ C& K* `- ~- `
(4/13/2021) Added param6 to Strafe and updated PrimePoisonNova, describing how it uses a missile's params
  K- o8 Z* s" a+ h' ?: k! j; W(4/26/2021) Added Imp Spawn Monster's hitfunc 39, which is highly useful and most well known as MXL's Book of Summoning! P* n: R0 k+ k) Q6 c
(5/12/2021) Added more information to Unholybolt, which has a changing srvmissilea based on ID. Also AndrialSpray. Added Quick Strike.3 ~8 I$ T& d$ r2 _  P3 t
(5/13/2021) Updated RogueMissile.
  _7 D8 u3 q- u5 ~! m! ]  M& o(5/14/2021) Merged Frost Nova+Nova and Howl after realizing they are the same.
- n! {; J3 t$ |- }7 a: ~$ ?(5/18/2021) Updated imp fire missile
9 a( R& }3 `# [- x7 @( l  M/ f; h(6/15/2021) Further described Howl's missile, psrvhitfunc 17
( i; p0 x: @: B* u7 i(9/21/2021) Described moltenboulderemerge a bit better.
5 m4 ]; E8 h2 U& s(10/13/2021) Organized guide. Also described many functions thanks to VV: psrvhitfunc=14,4,23,5,11,30,50,51 and psrvdofunc=8,9 (and some cltfuncs that I don't care about enough to list).+ A! @1 n$ a; g
(11/16/2021) Thanks to VV: psrvhitfunc=52 and psrvdofunc=375 t$ S4 k/ `- r5 n
8 }& j7 I" }1 p( ^8 }
( O+ @! d% m$ W- u/ U5 d
[SKILLS MODIFYING AND/OR USING MISSILES.TXT] This section describes how skills modify and control missiles via skill functions.
% b% E, Q7 @- h) M[DOFUNC MISSILES] Missile function that will do something while the missile exists and/or as it moves.) R" ^( h/ `$ {' e  {3 r0 p
[HITFUNC MISSILES] Missile function that will hit something and produce an effect (if collidekill=0, then the hitfunc will only trigger on the first hit, unless piercing is used, in which case each time the missile successfully pierces it will trigger another hitfunc).
/ n8 x5 D  a5 g  o[MIXED MISSILES] Missiles that make sense to be used with both hitfuncs and dofuncs. Also some odd missiles that aren't understood.
: ~5 p+ x+ C* J& B% v" _' y[OTHER WAYS OF GENERATING MISSILES] Lists a few other ways to generate missiles.2 T% L, C8 x- t3 i$ ?0 g0 v
) e% Y. V& _8 y: [$ r

$ R  S* e2 I/ X& I" ?----0 Q' M1 e+ X( i) B3 g0 R
0 p) U1 r6 Q; c% x5 A$ \

$ e! D0 {9 P5 J  I- k# {( j9 |[SKILLS MODIFYING AND/OR USING MISSILES.TXT]4 D' U+ z7 x( i4 g! ]' m( A
3 i! h7 S6 u/ r
srvmissile/cltmissile: Makes a skill shoot out a srvside/cltside missile from the user's location. These columns function for every skill, although they break moving sequences, making them virtually unusable for Charge, Whirlwind, Leap and Leap Attack. These missiles are not influenced by Skills.txt (except for the following periodic setup) or unless you set specific functions/parameters in Missiles.txt that reference Skills.txt." O, L1 _. h7 m1 o' K8 D0 W
3 m0 h7 M2 ~' q2 b" F7 W
[Any skill] Releases a missile while a state is active after every perdelay frames elapse
/ Y3 K& `' D: ]( ](srvmissile/cltmissile=missile to launch)
! w8 n! o) t( M) H2 E(pcltdofunc=any function that applies a state to self)
" Z3 P1 m4 t" T- O8 B(aurafilter=determines the targets for blade shield to attack)
9 p+ d) ~+ L7 M- w% w* a(aurastate=state that must be active for missile launching)' d7 S7 I1 k' }9 a4 c
(auralencalc=duration of state)
5 }7 I3 [3 m) E5 X$ h  Z8 V1 Z: B4 ~(periodic=1;perdelay=frames that must pass for another missile launch)
6 X) G- X- i8 y4 I5 k! V, b; c2 {/ B: @
srvmissilea/b/c and cltmissilea/b/c/d: Due to the complexity of these columns, I will individually describe as many cases as I can find. Following are numerous cases, first describing what occurs, then in parentheses describing the srvside requirements followed by the cltside requirements. Following are the relevant fields that change the missile, which have mostly been described by other sources, but I'm doing it again anyways for the sake of being thorough.
' k& C2 d- t( z* R1 j1 t6 c7 E3 H
$ N2 u5 Y, P) j! c4 ^- n4 k/ w6 I
[Multiple Shot][Teeth] Multiple missiles launched when not using a crossbow
; t5 m2 @: I# b2 t(a,srvdofunc=8,cltdofunc=17)
; G8 L5 p1 ?* F6 K[Multiple Shot][Teeth] Multiple missiles launched when using a crossbow# R# w+ E) [1 }9 `' _( w
(b,srvdofunc=8,cltdofunc=17)
+ j, v% M, \/ q- x5 K1 n4 }(clc1=number of missiles that cannot cause hit effects)
" K* {- H% U% e! g! X(clc2=how many frames must pass until the missile can collide with something; submissiles ignore this)1 q! E& m9 f9 v+ J
(clc3=number of clc1 missiles that cause hit effects; if the number is greater than clc1, then an additional clc3-clc1 srvside hit effect missiles are released)
$ C# S9 I# `; y" p# ?' h(note: can also add in cltstfunc=19 to release cltmissilec)# d0 v& ]7 |; G0 k: X
5 m; f3 {: T' o3 I4 U4 @) f
[N/A] An unused srvdofunc. Appears to work identically to srvdofunc=4, it releases a cone of missiles which gets tighter as you aim farther away, the number of missiles equivalent to calc1. Unlike srvdofunc=4, it does not change missile based on the weapon you equip.( l" h, d0 k+ P% I4 B' I
(srv:a,srvdofunc=138)4 d3 f+ m4 a% ]
(calc1=number of srvmissilea to release)6 i1 _9 E$ A- m+ s- p

9 S0 H6 i9 j8 _9 n: |  r: \" s[Strafe] Repeated missiles launched when not using a crossbow
7 N4 k$ ?) c; G3 v! B: U! _* n! N(a,srvdofunc=8,srvdofunc=12,cltstfunc=13,cltdofunc=20)4 u4 j! l0 d& p4 N6 _
[Strafe] Repeated missiles launched when using a crossbow
# p0 L+ H3 t; G) P(b,srvdofunc=8,srvdofunc=12,cltstfunc=13,cltdofunc=20)
- V; T2 V2 I  c+ L  I6 j8 H6 q. m(clc1=number of nearby targets to fire missiles at)
: d% @& R3 `& X5 I; y" [, L(clc2=applies damagepercent to all physical damage of missile)3 b" M7 d- o- r& [$ _! x( O
(clc3=number of missiles to fire at nearby targets; cannot exceed clc1)
( y. J0 k! V) R1 }" U(param6=% frame rollback; percentage of frames to shave off from the action frame for each repeat)
+ v0 {: ?: `. G! r# [
- B  c: p' v1 J0 F4 w8 I4 Q3 b4 V( n% ]* T
[Guided Arrow][Bone Spirit] Missile locks onto a nearby target
: F9 `& k  i$ `# C, R# L(a,srvdofunc=10,cltdofunc=18); p* \$ a1 w# ?/ r
(clc2=applies damagepercent to all physical damage of missile)2 H( x' u! @8 v, d  C
(missiles.txt: pclthitfunc=13,pcltdofunc=7,psrvhitfunc=10,pcltdofunc=7)
% b  A1 e, {9 P% r$ L" ?1 z(param1/cltparam1=appears to be nonfunctional)
# h4 g: n$ J- R$ ^( @(param2=radius of target searching)2 }" ?, v. k0 y. J) ~. u" t

) Y  R" |2 N8 a- A9 [' {% v5 z( v[FingerMageSpider] Releases a single missile with controllable subloops{?}. Seems to lock on just like Guided Arrow.
  r* T/ i% `0 R: \(a,svdofunc=101,cltdofunc=57)+ F5 J) D+ v$ ?6 h
(clc1={subloops; not sure what this does})
& D; |0 B1 P" N5 x2 @% Y# v. r, d; j- B3 c/ \! x- d
' p( z& R) n9 ~1 \$ _
[Charged Strike] Multiple zig-zagging missiles launched from target
: v9 _% k) ~, j! m4 e# j(a,srvdofunc=11,cltdofunc=19)/ {: i8 ?9 }+ F( g  d6 S
(clc1=number of missiles)
8 L5 E' d' Y2 }% `* E  I1 ]5 K
5 Q0 K" v: h0 U) x" K. w
! Z9 y5 ~. H$ ][Lightning Strike] Missile launched from target locks onto nearby target
6 \5 q  A1 P. C* v. G(a,srvdofunc=14,cltdofunc=22)
% N! y4 V9 f0 q) k+ }+ M. n2 m(clc1=radius of target searching; if radius=0, then it will not release a missile; if radius=1+, it will search for a nearby enemy, and if none are within radius, then it will target the user)" B8 a7 K7 Q  ~: K. A/ E
(clc2=number of hits; only relevant if you are using missiles.txt: pclthitfunc=16,psrvhitfunc=12): l' x, M, g' ?0 y# e

' g; m" z1 ?( x! f2 j+ [1 Q/ Y) E+ p2 A
[Charged Bolt] Multiple zig-zagging missiles launched
4 @( ^$ Q* o6 h( F8 Q' t( u7 K(a,srvdofunc=17,cltdofunc=23)
% d* e$ P6 Q) ]( v# b(clc1=number of missiles)
' S- T$ ^7 f% G* \/ ]
2 |, R3 O7 T$ S
! i* u0 N" @% [$ H" S[Inferno] Release 9 missiles in rapid succession5 ~; ?  Z# b* G+ y
(srv:a,clt:a/b,srvstfunc=11,srvdofunc=19,cltstfunc=15,cltdofunc=24)2 x4 Y, z+ E% r" t
(clc1=delay until missiles come into existence)
3 Y' N" e, o& f4 x; b8 M0 L& _) y% _/ L1 n* z, p( G% _' {, n
[Inferno] Release many missiles, releasing more with higher slvl9 V% T0 u5 {5 k0 I& L0 h
(srv:a,clt:a/b,srvdofunc=19,cltstfunc=15,cltdofunc=24). E6 }% O' d3 o! L6 i5 O
(clc1=delay until missiles come into existence)
4 y9 |$ U6 p* V/ ^
! H/ H! S% E- P3 c! L* e3 ?4 }. D: @8 r0 C$ m
[Frost Nova][Nova][Howl][DiabFire] Release 64 missiles around user with controllable velocity.
& o% q( F+ f' o8 g6 G9 U(a,srvdofunc=22,cltdofunc=25)# R+ L/ _0 v1 I) v$ L
(clc1=missile velocity added to srvmissilea)) M2 P( j2 E  z3 @/ U0 y* T
(cltcalc1=missile velocity added to cltmissilea)" N" q2 \: D7 T) q  t) b) b: d; t% U

. f7 W( W4 ~5 x: E: w3 ?[Shout][Battle Orders][Battle Commands][Battle Cry] Release 64 missiles around user. {not sure what the point of this is in comparison to other novas}
' d& V; c4 E' ~(a,srvdofunc=68,cltdofunc=25); B8 D0 f/ m; n# Q0 g8 S

  n+ f! J3 T& c- X: M, H- P( k: {5 g0 |) a, _1 c
[Blaze][SpiderLay] Releases one missile per tile traveled. Also is an incredibly versatile aurastate, allowing you to control up to 11 different stats at once while duration is active as well as auraevents.2 S6 j1 C2 Q3 b0 O) G5 `! o. n2 K# H! X
(srv:a,clt:a/b/c,srvdofunc=23; srva must have velocity=0 or it will not spawn; clta/b/c require blaze state to be produced)9 f  p9 Y! u0 ^% s# z
(aurastate=state that must be active for missiles to be released; use blaze if you want clta/b/c to work properly)
% N0 O& t9 _( g' P(auralencalc=length of state)# W3 |* @! t6 c+ j7 d9 q  j
(aurastat1-6 AND passivestat1-5 are active while the state is active; this is the only non-aura in the game that applies temporary passivestats; this is very fortunate since you might want to use an aurastat-applying missile to the produced missiles, this allows you to counteract stats gained/lost via aurastats with passivestats)2 [! J* @# N! m0 Y
(auraevent1-3,auraeventfunc1-3 can also be enabled for the duration)' ?  R. V; d7 v( W* a, a
(NOTE: the cltside missiles released per tile traveled only function properly if the skill's ID is 511 or less. If the ID is higher, then the skill will instead use cltmissilea/b/c from ID=511. If you want more than one clone of this skill past ID=511 and also want them to have different cltmissiles, then you could leave cltmissilea/b/c blank in ID=511 and try to produce graphics via spawned monsters with srvmissiles, although synchronization may or may not work well depending on what you are using this skill with.)  C9 ]6 q3 E4 r  c" m$ v, G, T
0 y+ }) k  w0 }/ S+ c4 _* L

! o! ^, o/ Q; k" y$ O* Y[Fire Wall] Release two missiles at the target location that travel in opposite directions perpendicular to the user
+ V# T" F* D7 x(srv:a,clt:a,srvdofunc=24,cltdofunc=26)& C2 \5 n% R7 Q, J& U
' d; B+ `* I( g6 y
[Fire Wall] Release two missiles at the target location that travel in opposite directions perpendicular to the user (a) and release one srvside missile at the target location that travels southward (b)
0 \4 F1 Z4 Q3 Y. M. F! e; ](srv:a,b,clt:a,srvdofunc=24,cltdofunc=26)8 M7 o, y" K3 {  H8 V) e
(note: monsters are always srv&cltside, so if you spawn an invisible monster that immediately dies, you can have it generate a graphical missile to somewhat make up for the lack of cltside on missileb). }3 m0 j1 M  Z; A9 K) s

' ?/ `- o* g+ b2 S' W3 m( R[Fire Wall] Release one srvside missile at the target location that travels southward/ b/ m! q# R0 }
(srv:b,srvdofunc=24)
6 f/ n% h5 E. W6 \
: p" \0 R7 O2 o2 l7 B; _' Z
1 k+ z! c) x- q3 g2 L/ j, k8 U+ r. e2 ^' ~

- `2 I7 I- g8 Z4 \% `[Chain Lightning] Releases a single missile
. Z: {0 [  C# G" wOR3 H% t1 l$ |3 p8 E# S# z- f1 J
Releases a missile that targets a nearby enemy after hitting an enemy2 B8 ^5 N! z6 S& _. q. j
(a,srvdofunc=26,cltdofunc=27)
: o$ q: e8 G; ]8 d: j  ?7 \* O7 y$ J(clc1=number of hits; only relevant if you are using missiles.txt: pclthitfunc=16,psrvhitfunc=12)
4 V! F/ N/ h  d(aurarangecalc=search radius for nearby enemy after hitting a target)
4 y0 c8 V8 R4 t+ P( A/ x+ u) l' F! V8 c5 Y6 W7 I# r3 S- x! Q
[Blizzard][Meteor] Release a stationary missile at target location
) L/ C6 L  g& AOR2 m, @4 n, J6 k1 ?' r5 U$ b2 R
Release a missile at target location that travels southward srvside and toward you cltside9 ]# ?# z: m& a- O
(a,srvdofunc=28,cltdofunc=28)
6 ?6 \, C5 Z7 r. X7 \$ E- Z4 q3 ]% t5 G# v! ~
[DeathMaul] Releases a single srvside missile at the target location that travels south; releases two cltside missiles, (a) one that travels towards the user and (b) one that travels outward from the target location
, s8 [% F7 n, x, k6 l(srv:a,clt:a&b,srvdofunc=136,cltdofunc=76)  K. R1 Z  I: X8 x

: T" Y- H) }* f- j[Phoenix Strike] Release a stationary missile at target location
* j9 H( m- p6 I8 u( bOR4 ^2 O  p: g: J7 }
Release a missile at target location that travels southward srvside and toward you cltside
3 }  G' T; I; L(a,srvdofunc=40,cltdofunc=14)7 P- b8 [% Q, @0 l" }" w$ M" R" d  D
6 [( g; x/ O  n2 J  L
& H: H1 o& L0 {+ k( M) a7 p
[Thunder Storm] User releases stationary missiles periodically. The missilea has troubles producing submissiles/hitsubmissiles, although moltenboulderemerge works great. Notably, if you use Thunder Storm as a chance to cast that isn't in the original ID, then it will only trigger when you satisfy the event (e.g. if you set up a thunder storm derivative that is cast via striking, then it will only release bolts if it triggers the skill again on striking, unless you cast the skill itself, then it will both cast bolts periodically as per expectation as well as when you trigger the event; it also doesn't re-apply the state each time via ctc, it will only trigger the missile release; basically, this is worthless for ctc).8 O8 Z( I9 |% m% ?4 R* f1 l
(a,srvdofunc=29,cltprgfunc1=84)
  j6 a1 @# Q7 j" p+ U. A) w& L(aurastate=state that must be active for missiles to be released)
/ {7 F$ |' P" ?( l4 M( i(auralencalc=length of state)  i( C7 u' X# l4 m4 M9 P/ g7 |/ f, U/ `
(periodic=1,perdelay=frames between releases)
# g; j& q. K9 M$ l& t(note: missiles must be stationary or they deal no damage)
, D5 H: W6 E% u, K9 {& H2 _(note: has srvstfunc=13, but it does not seem to be necessary)- h0 I5 A* m, }4 @! }& }" x
0 v8 b( u2 ^* v% H

; I' V1 R* B. W[Chilling Armor] User releases a missile when hit by a missile
  J1 u& c" t9 S, n8 Q& w. ]8 V(a,srvdofunc=18/23/or any other srvdofunc that applies a state)' P& N8 L8 s% b2 O0 y
(aurastate=state that must be active for missiles to be released)
- o* w2 V: Z; \# [9 |, [(auralencalc=duration of aurastate)
8 e( L- Q( l. k0 M5 h' Z: t6 a(aurastat1-5,passivestat1-5 are only active when state is active)
& s# f) C. P: B6 c- B(auraevent1=hitbymissile)/ {. z- r3 c& L  n  j' y( e
(auraeventfunc1=1)  M! ?& s+ d& w2 N
(auraevent2-3,auraeventfunc2-3 can also be enabled for the duration)4 B; ]0 \2 X- r( Q# l( S5 Q

$ c2 I7 K2 |; o6 x# X$ e* R[Amplify Damage] Target releases a missile when hit by a missile. D3 H$ ]4 U- N9 n& l  }
(a,srvdofunc=30/or any other srvdofunc that applies a state to a target, but auras don't seem to work)% `. N# t  @+ P& ]
(auratargetstate=state that must be active for missiles to be released)
* L5 z( u8 w* _1 c(auralencalc=duration of aurastate)$ Z" K+ [5 ?7 B8 r5 W% i
(aurastat1-5,passivestat1-5 are only active when state is active)
6 v+ g% T$ V! [: K# z3 ?! O(auraevent1=hitbymissile)
+ z$ n0 b- Y/ n+ i" @(auraeventfunc1=1)% n2 m1 Y" D; J, R+ h; ^
(auraevent2-3,auraeventfunc2-3 can also be enabled for the duration)) j- X! Z9 g; w) l
2 S" J# u) ?1 m( {( J  |7 t

8 i( C. D7 l8 f* T4 k/ w[Corpse Explosion][NihlathakCorpseExplosion][mon death sentry] Consume a corpse srvside&cltside, deal physical/elemental explosion damage and release cltside missiles that travel randomly north, east, south or west* \, D( m# V- x7 G) Y) S
(clt:a&b&c,srvdofunc=55,cltstfunc=21,cltdofunc=23); g) {6 q/ y# c: x7 H3 ~" v9 }( b' m
(aurarangecalc=radius of explosion)# b7 x  s& C' ~) I- B5 D; g
(searchenemynear=1,selectproc=1,targetcorpse=1)
8 e4 I( G/ n# ^- p(clc1=minimum /players1 HP dealt as damage)9 B0 O% v5 K. A
(clc2=maximum /players1 HP dealt as damage)
7 m7 R7 A4 A. n9 B6 J(clc3=percent of physical damage to convert to etype; varies from 0-100%)
8 X. F6 H3 _# X! a8 s/ |(etype=the elemental damage conversion type of the explosion; also applies elen): a! C0 m8 J( K
(note: to make the corpse disappear, need to also use srvstfunc=17)2 w& m+ Y. s4 X* C8 p4 G
, K; P  k% u0 I5 o. @
! }) k- E  n) a4 X9 \; ~" C  R# j
[Poison Explosion] Consume a corpse srvside, releasing 8 velocity-locked srvside missiles in a circle around the corpse (clta&c target the player, cltb is synchronous with srva)$ l( ^& v/ i3 }# p) }, u
(srv:a,clt:a/b/c,srvdofunc=63,cltstfunc=21,cltdofunc=33)) X4 {* b  z) W- z) l6 X6 G
(searchenemynear=1,selectproc=1,targetcorpse=1)
! k, D$ o. }, p1 n# F(note: the produced missiles srva/cltb have a very low, locked velocity that is independent of missiles.txt vel column; setting maxvel and accel in missiles.txt allows you to override this locked velocity)$ H* D+ S& s$ V" ]
(note: to make the corpse disappear, need to also use srvstfunc=17)
% X) b- S( W& g! b8 X- r1 a: y1 c' C$ g1 i
[Sacrifice] Produces randomized cltmissilea.% n3 b7 Q- ~4 `6 z9 m1 S3 d
(clt:a,cltdofunc=34)
* l* G; d% l0 }! t& G; _$ d(cltcalc1=randomly selects a missile starting from srvmissilea, with 0 and 1 producing srvmissilea only, 2 producing srvmissilea OR the ID after it, 3 producing srvmissilea OR the ID after it OR the ID after that)2 W" [9 K' j1 X/ o5 A9 L
' r6 j2 J# x9 b+ T+ p
[Blessed Hammer] Releases a spiralling missile that does ~2.5 increasingly large revolutions around the player then stops, starting from the upper left; after stopping, the missile and produced submissiles become cltside only
7 W; I, {- w) x2 _(a,srvdofunc=73,cltdofunc=35)- L2 h+ j- G7 H( T0 ^$ y; V
(par1=percent of damagepercent that applies only to magic damage added to srvmissilea, including magic damage from the skill/missile as well as the user's magic damage if using srcdam; state that gives the damagepercent must be concentration)
2 ^2 ]3 c* p- g0 ?( y% x  |4 [
; C$ `; l' L  K+ l' i[Fist of the Heavens] Releases a srvside missile from a target that travels south and a cltside missile from a target that targets the user5 V4 C8 y9 C8 p9 B" P4 d9 f% j# h7 j) ^
(a,srvdofunc=80,cltdofunc=36)  i# Z# f5 @5 ?2 r$ g5 ?  P

5 s$ r. H, o6 Y# S[Fist of the Heavens] Releases clc4 srvside missiles from a target that travels south and a cltside missile at every selected target within a defined radius; srvside and cltside missiles are desynced. The delay missile itself is very unique in that it hits a specific target only after a defined duration (the missile's range) passes.( c" X) K; f, g4 b- m
(a,srvdofunc=80,cltdofunc=36)
- V( g5 U. l- `8 a; t) m5 j; M& N(aurafilter=determines which targets the submissiles can collide with)
) B0 K1 f1 ]" m( W; C(aurarangecalc=determines the radius that targets will be selected within)' F% i$ a7 }# F9 Z$ P; F
(clc4=the number of srvside bolts to release)
1 B, W" A! `/ t9 ], G(missiles.txt: hitsubmissile1,pclthitfunc=26,psrvhitfunc=22), q1 t: k1 x( \8 ~6 N, m" {& Q
(note: for some reason, using the same missile as holy bolt will not allow them to heal, even though holy bolt healing is controlled by missiles.txt; you can however use shout missiles which apply states, which can be set to heal)
( g4 p# V0 V+ O! \# u6 W! _1 j/ @0 L/ L( `

8 A. N" H) c  B" ~% m0 z+ ~. E; @[Double Throw] Throws an additional instance of your throwing weapon
& T9 C- H& q8 J, @* t/ m(srvdofunc=74,cltdofunc=42)
) N- Y% H: {3 _. q. s( j(srvmissile=,cltmissile=; both should be blank, otherwise the inputted missile will replace the throwing weapon's missile, which will not have clc1 damage appended to it)6 f3 g- [; j/ N' C. o7 ]7 ^
(clc1=percent damage applied to both instances of your throwing weapon; will not apply if you use a srvmissile)% X5 U( q9 o% g3 F$ q
(toht,levtohit,tohitcalc: unlike arrow skills which pretend to apply attack rating, this will actually append it, applying to both instances of the thrown weapon; just as with damage, replacing one of the instances with any missile will cause it to not gain the attack rating bonus)
) O/ x6 _( g5 h% P! P! Y
. @2 n& O; g# \& X2 m% q( |0 ^/ t* r( t2 I) T
[Grim Ward] Consume a corpse to produce a srvmissile that travels directly down and a cltmissile that travels towards the user. Notably, this is the only skill to make full use of srvmissilea/b/c. Will also always produce cltside corpse gibs.
: m# n9 m3 b( p) m+ r  v  v$ y(srvstfunc=75,cltstfunc=41)
' U. t( _) ?* @0 G6 @( S% K" o) o(srvmissilea/b/c=,cltmissilea/b/c=; missile selected depends on the size of the corpse, as determined in monstats2.txt by the columns "small" and "large", with small=0/large=0 producing missilea, small=1 producing missileb, large=1 producing missilec; small=1/large=1 results in missilec): k7 m( t2 v" F# e. o7 m1 ^
(NOTE: in vanilla, this skill uses srvstfunc=33 and cltstfunc=26 but they don't seem to do anything)
4 O! f$ f! T0 r* M7 B7 i6 l$ F8 v' C" F
[Quick Strike] Should be deprecated. All it seems to do is break Blood Raven, so that instead of firing raven2 srvside and cltside, she fires raven1 srvside and raven2 cltside. Only fires srvmissilea if you are wielding a bow or crossbow. Decreases quiver quantity. Will only shoot srvmissilea if you select a target. Made even more awkward by the lack of cltside functions.  a; R7 q& ^( R. ~$ ~
(srvstfunc=50,srvdofunc=92)& E9 O( ^% t  R( ^; Q" A) Y
(srvmissilea)" h3 i: [, D0 S6 O/ w6 g

* j$ h/ c) i! S- o[Firestorm] Release one missile that travels straight, and additional missiles that travel in a zigzaglike pattern
: X4 f8 M# X! K) s9 x0 ~(a,srvdofunc=117,cltdofunc=67); a" {# n1 Y# ]$ o, D' L7 i$ c
(clc1=# of missiles to release; 1 releases a single, straight moving missile; any higher number releases #-1 missiles that travel in the zigzaglike pattern that appear in an increasingly large, straight row)
) l! A( a1 S: T& N* r# B" \% b* J7 d+ O- F* X3 d/ \% v* ~
[Rabies] Melee attack applies state to target, making them constantly release missiles at nearby targets0 y" L0 a4 K! [9 C% Z
(srv:a,srvstfunc=57,srvdofunc=121)
* R; l9 ~" m% k$ J3 `(auratargetstate=duration of spreading and missile release)
- Y) q+ t' I! \0 j(ELen=duration of state and missile release)
, g) m& t/ C. a8 g9 I(missiles.txt: psrvdofunc=30, param1=frequency of submissile1 release, param2=radius?, submissile1=missile to release)
8 Z- c3 z( w- \* B$ s7 _(note: missile release damage is based on the user's current damage from the skill, while the duration is based on the ELen of the skill when cast)
3 T/ L2 v9 F# `4 w7 h) V) L1 O9 S& S5 J8 K" [' i+ f4 A
[Rabies] Melee attack applies state to target, making them constantly release missiles at nearby targets and spread the state to nearby targets  d8 n" C; _3 J" b# R' F
(srv:a,srvstfunc=57,srvdofunc=121)' f; k. \* r4 @, x+ V
(auratargetstate=duration of spreading and missile release)3 N. i* t( y9 N' g& J9 f- O4 C0 Y
(ELen=duration of state and missile release)
" r6 w6 N: |$ f8 z# l1 Z' t0 q- Y(missiles.txt: psrvdofunc=30, param1=frequency of submissile1 release, param2=radius?, submissile1=missile with psrvdofunc=any,psrvhitfunc=53): F; l3 N* K  M& k
(note: missile release damage is based on the user's current damage from the skill, while the duration is based on the ELen of the skill when cast)/ h9 ^) r9 j, |* G& K# h. d

" V2 `7 {3 P, ~2 n) k/ g[Rabies] Melee attack applies state to target, making the target release a missile to the south based on your skill level that is owned by the target (meaning it will damage the user instead of the target)" y$ g* {! |; p% A4 l, x* j. D6 W
(srv:a,srvstfunc=57,srvdofunc=121)
! z1 [( J) z' v! Z(auratargetstate=state that is applied)' {" X# o$ \6 h% L: a
(ELen=duration of state; cannot release another missile until the state expires)
% W+ T8 l) I* Y0 @* ~(note: missile release damage is based on the user's current damage from the skill, while the duration is based on the ELen of the skill when cast)
. o' g0 X9 h8 D' G- H. ~& ^, J  V$ p9 e
" U2 T. ^7 a" E: U9 a
[Twister][Tornado] Release multiple missiles with semi-random movement
0 p' O6 W9 G3 b+ l(a,srvdofunc=118,cltdofunc=68)) M/ e; k# u  m5 I! a; p
(clc1=number of missiles to release)4 I- F% m3 y0 e- {6 J4 r9 [
  i1 w0 I. E% n( O- x' N
[Volcano] Creates a srvside missile that travels south from a target location, and two different cltside missiles at the location that target the user( }  L  O+ q6 }3 {, m  G
(srv:a,clt:a&b,srvstfunc=123,cltprgfunc1=91), s+ {* r! }1 ^6 X
) I  |/ E: E8 F% }5 N3 j! b2 F. N) g
[GargoyleTrap] Releases a missile only if you cast on an enemy; cannot release missile above or below the user, if it is attempted in this direction then it will choose the nearest possible angle to shoot from; only shoots in ~16 possible directions
( s0 C3 v$ O* W  w! }. p(a,srvstfunc=93,cltstfunc=51)( G+ E* y1 D2 c
+ X; Z  t1 `& B/ K
[UnholyBolt][ShamanFire] Releases a missile based on your ID. This works somewhat for players (ama=0, sor=1, nec=2, pal=3, bar=4, dru=0, ass=1). So for example, the amazon and druid will release srvmissilea, the sorceress and assassin will release the missile after srvmissilea, the necromancer will release the missile after that, and so on. This func is responsible for two bugs in vanilla, both likely in part due to the lack of a synchronized cltside function:
& f' ^5 w* l* x) V3 d(1) Unraveler5 gets SanctuaryCenter instead of another unholybolt, resulting in no damage dealt. B) h5 |' a: ~+ J& y
(2) Fallen Shamans use shafire1 for cltside, but shafire1-5 for srvside, which have progressively increased speeds, and thus progressively increasing desyncs
3 m' D; M7 g3 v8 x' g(srv:a,srvdofunc=85)
3 @9 W0 q1 k7 y# K) m6 X
  w. H% @3 f; B' k, c1 _[Imp Fire Missile] Releases a single srvmissilea depending on your ID. See the above function for an explanation. This is different in that it supposedly gets a calc." E, s6 t7 O) m* O3 G5 ^( V
(srv:a,srvdofunc=132)
- @5 D7 O. V6 h/ p4 m0 a(calc1=range adder; from my testing, this does nothing)* `" v4 X: o, o  _0 U
# x% M7 C$ x* k4 S0 I9 h. _" D2 [
[PrimePoisonNova] Releases one controlled-velocity very slow moving circle of 8 missiles and a second controlled-velocity moderate speed controllable shape of 0-8 missiles. Note that this func overrides missiles in a weird way: param1 of the missile is the "slow drift speed" and param2 of the missile is the "fast drift speed", which allows you to give different velocities to each of the two novas.& ]( S0 ^8 H+ i" E% @
(a,cltstfunc=99,cltdofunc=55)
( `% ?( r1 `7 @3 V(clc1={subloops? not sure what this does})% f+ [3 ]& L- b# b  T5 w0 f6 r5 d9 X
(clc2=second controllable circle controller; 0-1=nothing, 2=8 missiles in an octagon, 3=5 missiles in a pentagon, 4=4 missiles in a square, 5=3 missiles in a triangle, 6=3 missiles in a scalene triangle, 7=3 missiles in an acute triangle, 8=2 missiles in a line one going to the northeast and the other to the southwest, 9=2 missiles, one always goes to the north and the other to the southwest, 10-14=2 missiles, one always goes to the southwest and the other is increasingly angled away from the north and closer to the southwest, 15+=1 missile, always goes to the southwest)7 Z' N. ^1 i8 q- j5 I
(missiles.txt: param1=slow drift speed; param2=fast drift speed)" o  q& S2 h/ r0 g* [# _- }
(note: although vel doesn't do anything, you can change accel and maxvel in missiles.txt to make the missiles move faster)( l3 i; k+ d0 o* _9 \
# J: Q* N8 W$ ?$ z
[DiabWall] Releases multiple semi-zigzagging missiles; sometimes some of the missiles move completely straight depending on angle and number of missiles
9 n: W3 Y" M/ j, j2 O(a,srvdofunc=102,cltdofunc=58)
+ x0 Q' k6 y& a(clc1=number of missiles)
. b/ n2 v; Q, Z+ v2 f$ @. G4 l$ d' a7 c' y+ Y
/ k3 ^6 [8 [! d
[ArcaneTower] Releases 64 missiles in a circle but only if you select an enemy; missiles look like they are falling from a height for a distance, then resume their normal travel; produced submissiles are not heightened
( e* |1 ?" S& G: r/ ]6 W% B(a,srvdofunc=106,cltdofunc=61)  U- @+ V. x# M% X

5 K% m5 [$ Y  r' x7 o[Claws of Thunder] Release 64 missiles in a circle from the selected enemy target
$ x; g9 r! z1 b" I" H: I(a,srvdofunc=36,cltdofunc=10)6 {( |3 H4 P% S2 R2 w( ?) t
/ {" K& e, w! B: Z$ s  m3 t$ I

" u$ D3 Q& e6 I' |. I- B1 b( j# ?! k* W8 A[DesertTurret] Releases multiple missiles in a straight row, with your aim directing only the middle-most missiles creating a bulging effect! \, F1 ~% S( y: O5 M# `1 T. R
(a,srvdofunc=105,cltdofunc=60)  K3 V# L4 I' W1 F, ~' H6 Q
(clc1=number of missiles)
: @; G" g9 ^6 Z
; v6 m! d) a) m/ U: L: z3 u; l1 Q5 d+ R
[Baal Cold Missiles] Releases a single missile that generates two submissiles every frame, which travel perpendicular to the missile
* f; P* N3 o& @: Z& ^(a,srvdofunc=139,cltdofunc=81)
# N/ p6 B( k0 h; O% N% V6 h- ^' B(missiles.txt: pcltdofunc=52,psrvdofunc=31,submissile1/cltsubmissile1=released in an arrow formation)
! n+ `! j( b2 T# k% p* M/ [1 A7 ~
[Wake of Destruction Sentry] {Appears to behave exactly the same as Baal Cold Missiles} {???}
, g4 K- S$ `" ~, c: Y+ G8 X(a,srvdofunc=125,cltdofunc=70)6 m% g3 B( Y* j, v
(missiles.txt: pcltdofunc=52,psrvdofunc=31,submissile1/cltsubmissile1=released in an arrow formation)) n) G6 U* W$ e  r
' p  C, u4 D$ Z$ Y/ b
[Vine Attack] Releases multiple zig-zagging srvmissiles at the target location in a circle; and (clta) one straight cltmissile that is always released from the user to the right of the aim and can only move in 9 directions, (cltb) multiple zig-zagging cltmissiles that are released at the target location in a circle0 O+ C8 y6 k1 z
(srv:a,clt:a&b&c&d,srvdofunc=130,cltstfunc=49)5 T* L# e. ~- `4 d
(cltcalc1=number of cltside missiles to spawn; should set cltcalc1=clc1 so that they are synchronized)
6 f2 ?) P0 E7 @9 ~( j; i(cltcalc2={delay? doesn't seem to do anything}
7 r2 Z9 W! x% Z: z: \! m(cltcalc3={min dist between missiles? doesn't seem to do anything})) {5 @0 |% f: m% E3 \
(clc1=number of srvside missiles to spawn)2 o+ F" N" b# a$ G  J; D
(clc4={unknown, doesn't seem to do anything})
/ t5 b+ d% |7 s* g(note: the srvmissilea and cltmissileb are slightly out of sync, with cltb traveling ahead of srva)- `; S/ a, I& |$ x3 N

! K. S$ d+ ]6 t: L7 [[RogueMissile][HireableMissile][MissileSkill1] Releases a single missile only if you are equipping a bow or crossbow; releases nothing if you are not using a bow/crossbow. You must select a target when firing, or the missile will be cltside only.* N3 d( g, y* C" g$ m1 g: s
(a,srvdofunc=110,cltdofunc=66)4 f0 R6 e2 n* Y4 ?8 Z6 O

5 V  n8 F  i# @3 k[mon inferno sentry][Horror Arctic Blast][FetishInferno][Baal Inferno][MegaDemonInferno] Releases a single srvside missile and two cltsidemissiles which are randomly chosen between cltsidemissilea/b, with one of the cltsidemissiles being randomly staggered- N$ P, ^0 ~  [) N
(srv:a,clt:a/b,srvstfunc=53,srvdofunc=95,cltdofunc=54)
2 t& T3 z  ~+ y- b(anim=SQ, seqnum=6, seqinput=10)
# Q, ?& `3 `/ f+ H4 F5 c(clc1=overrides the range of the missile regardless of what missiles.txt says)
* X) M6 g8 W" s4 w/ V. G(clc2=fire length; determines the frames that a monster will use the skill for; number of missiles produced is = 1+(firelength-10)/density ; one missile is produced at the start from frames 0-10, and following that missiles are produced every firelength/density frames)) Z0 A' q# A3 K+ I- Q
(clc3=density; modulates the number of missiles produced)2 B. C" X  ^3 U' C
(note: skill level also increases missile range)
  v: r% ~7 V# W- p
0 z) B- S: X/ P- Z- Q! g[Imp Inferno] Releases a single srvmissile and two cltsidemissiles which are randomly chosen between cltsidemissilea/b; allows for complete clc control over missile range& ^  [0 e* I3 @, l
(srv:a,clt:a/b,srvdofunc=126,cltdofunc=71; has srvstfunc=59 by default, but this makes it unusable for players)* `- s9 Z$ I8 c1 l1 y  ^
(clc1=len; duration of channeling for a monster{?}{need exact formula})
( ~" t" u( o: c. m(clc2=range override; ignores missiles.txt)
9 I- V' M: A; b1 X(note: skill level increases missile range and there is an additional added range at base level, but you can remove this offset by adding -19-24/lvl to clc2) {need to confirm that this is accurate up to a very high value}
0 a4 j. j2 `) l3 o# m+ I' A3 C* r4 @! F5 E
[DoomKnightMissile] Monster releases a randomized missile within a defined missile ID range determined by Monstats2.txt S3v column/ j# b6 m1 b0 U  {" c
(a,srvdofunc=148,cltdofunc=94)# V- ~3 y1 q) J
(see: https://d2mods.info/forum/viewtopic.php?t=66433)
& Q: s9 p( |% ^; S2 S2 c- L
' H) x4 d9 r0 E. D& ^$ H  @[NecromageMissile] Monster releases a randomized missile within a defined missile ID range determined by Monstats2.txt S4v column6 p0 E# i+ @9 M
(a,srvdofunc=149,cltdofunc=95)6 W8 h. h) r9 T& }+ p
(see: https://d2mods.info/forum/viewtopic.php?t=66433)
/ J9 \6 |4 y3 `4 l7 d5 g/ A- o6 v
[DiabLight] Release a missile that appears farther the higher the skill level2 V+ p) C' d6 Q1 m
(a,srvdofunc=152,cltstfunc=40,cltdofunc=56)
. W9 Z. S+ C+ R$ m  Z(NOTE: the vanilla skill has srvstfunc=53, which is only necessary for Diablo; if Diablo does not have a skill with srvstfunc=53 in Sk1, then he will get stuck in the sequence and repeatedly cast that skill indefinitely): `% s* J% ^" U9 n: V5 {& T9 T

: `& c# w% x5 g5 x, M[AndrialSpray] Release a desycned srvside and cltside missile; srvside missile is always spawned at the top left, top right, bottom left or bottom right part of the user; srvside missile is always slightly off to the left of the cltside missile. If used propertly (e.g. by a monster with a monseq), then it will release missiles in a spread during the animation, kind of like a Multiple Shot where you are shooting each arrow in each direction yourself.' u2 V1 Q  q! O  t
(a,srvdofunc=88,cltdofunc=48)0 r9 ~5 o( p! F# ?
(anim=SQ,seqnum=10,seqinput=10)# H! v! \5 M7 z3 a4 c4 H2 B

# g1 t$ p0 L4 m* h! Y
" X  ]7 Y2 m. @[Shock Field] Releases multiple missiles to a location in a tight cone that come into existence when they either collide with something or hit their max range; the range is defined by the location the user selects and completely ignores missiles.txt( R6 f4 {; D1 p# `
(a,srvdofunc=43,cltdofunc=5)
7 O' v: ]0 x& C' w+ x' U(prgcalc1=number of missiles)
, ?+ {; ?+ z# M% H: `/ ?* J(note: due to the way range functions with this skill, it can have very unusual interactions with complex missiles like frozen orb, allowing the number of bolts released to be determined by the distance the player selects)
) H  F. L+ x/ M3 o9 n9 _& t(note: the submissile placement tends to be all over the place, although mostly in a circle that gathers around the edge of the screen, if you use a missile like frozenorb)
8 U" {9 s# B- `, M. ^% h
2 r3 b3 z' p; N# z  N$ c+ ?
6 y+ S+ ?# C, G& U( p3 e6 |2 V7 |[Blade Fury] Channel to release a missile every prgcalc1+1 frames1 Y. v5 g. J9 ?9 p
(a,srvstfunc=26,srvdofunc=48,cltstfunc=8,cltdofunc=6)
9 o' e# {* p$ U( w(prgcalc1=frames between each missile release)
4 p0 W+ n- k; ^2 P, q(anim=SQ,seqnum=23,seqinput=12)$ b$ g7 d- _3 g/ Z! o) S, X
(note: you can remove srvdofunc=48 and the only difference will be that the first missile doesn't exist srvside)
. L* ?  B$ d' b$ S" J0 L
" b" b" y& s$ E5 t& U% g9 b( S/ p3 G; t" a
[Claws of Thunder] Release 64/prgcalc1 zigzagging srvmissiles in a circle at the target location or enemy; release prgcalc1/64 zigzagging cltmissiles in a circle but only if you select an enemy
: ]% ]4 s/ m7 J% J(a,srvdofunc=37,cltdofunc=11)+ R% L3 F3 m& x% @
(prgcalc1=64/# missiles)( A0 m) b" |1 V/ w
. m& X$ h3 F$ L7 Y0 K- Q
1 r( K9 ~% E- j
[Fists of Fire][Blades of Ice] Releases an explosion with a controlled radius at the target location; also releases cltmissiles within that radius of an equal density
% v, E( [* v) s2 \(clt:a,srvdofunc=38,cltdofunc=9)
  n/ t5 c* x: X3 [: V% A1 v% D(prgcalc1=radius of explosion and cltmissile release)$ n3 W, r, i. P
1 i; I  {3 B$ }5 A& ^8 b

# a2 ?# V( Z1 T3 j4 m5 i[Fists of Fire][Blades of Ice] Releases a missile within a controlled radius at the target location; clt and srv spawn locations are not synchronized; clt targets the player; srv travels south of the spawn location at a slight angle
- e4 K1 j+ \4 F: p# c, I+ |, q(a,srvdofunc=39,cltdofunc=9)( f- [7 l' X$ z. u2 M+ ?5 E1 ~
(prgcalc1=radius of missile release)
. z" W2 X! h. M, B2 P) ]9 E. p* R9 s( Y1 P

3 q, [( o- u/ W1 w: t$ E% E[Phoenix Strike] Releases a 64/prgcalc1 srvmissiles that do repeated figure-8s/serpentine movement with changing direction at the target location or enemy; does the same for cltmissiles, but only if you select an enemy target
- Y- m" [9 ]# A% f3 t(a,srvdofunc=143,cltdofunc=83)9 F! w  t9 C, d* h0 p- e9 [) x
(prgcalc1=64/# missiles)
9 U) y: Y) q" R6 L- Y1 |5 O5 e* ?0 e4 O4 ~" s# n& J

- S( V* }4 m+ o. x, Z& O/ c[Phoenix Strike] Releases prgcalc1 missiles at the target location that move away from the location in a semi-random straight direction; clt and srv are completely out of sync8 M4 s9 n9 {: b3 r: }! |8 ~  i
OR: F* b! h% h3 H8 u
Release prgcalc1 missiles at the target location that do circular loops and occasionally dive in toward the target location
, k0 n% ^) F1 K+ q7 B: W8 k& a(a,srvdofunc=41,cltdofunc=15)3 D/ C% Y; s; o$ s/ n( J6 `* g
(prgcalc1=number of missiles to release)
' q, R0 n/ Q( k, E  `, G(missiles.txt: pcltdofunc=58,psrvdofunc=35; required if you want it to do loops)
3 v8 H# ]9 e( Q* w7 o0 ]
& d% J9 ~) Z/ W8 D  c1 T; }0 k: C# K
[Hurricane]Releases 6, evenly spaced streams of cltmissile generation at a constant distance around the player; cltmissiles are generated on random z-heights" `& e3 E  _- m2 E& W
(clt:a&b&c,srvdofunc=any that can apply aurastate)- n: f6 {  O2 n- t- t* G8 q' X
(aurastate=any state that has the proper settings); c7 Q  ?/ k, z1 w5 n7 F
(states.txt: active=1,setfunc=7,remfunc=4,cltactivefunc=90,srvactivefunc=145)
% w/ u- x3 S5 H(cltcalc1=the number of cltmissiles to spawn per stream per frame)3 N" {3 C% D0 m, V, b$ f: O
(cltcalc2=the maximum z-height of the spawned cltmissiles)
0 h7 m" @( f% M(srvdofunc=124,resultflags=1; required to deal explosion damage)) v/ l3 i2 m4 X8 K6 r; E) ?
(par3=explosion radius)+ y- [  [8 X# H" g: M
(par4=frames that must pass for an explosion to be released)
- {& I6 g: ^, Q$ A/ R, ~- i
8 H, K) _8 G4 P* J% S7 Z[Armageddon][Diablogeddon] Srvside missiles are released randomly within radius, traveling southward and trajectories that are slightly angled; cltside missiles are released randomly within radius at a heightened z-level that returns to ground after a bit, traveling in straight, semi-random directions away from the player+ U6 P. A* W. c
(srv:a,clt:a&b,srvdofunc=124,cltdofunc=92)$ T# y( j0 C) V8 _  Q
(aurarangecalc=radius to create missiles within; no missiles are released if set to 0)/ g: ^# @0 P' D* r
(cltcalc1=frames it takes for the cltmissile to hit ground level)1 m3 w; U! L: ~1 T, X& [
(cltcalc2=z-velocity at which cltmissile falls to ground level)7 O. M1 p4 |( \% {. L/ n! k( h
(cltcalc3=y-velocity at which cltmissile falls from the right of the screen)5 b7 k# \# w; S: F5 k
(par4=frames that must pass for a missile to be spawned; can be set to 0 which may or may not be the same as 1)
( H7 u3 d; L' i2 R& L/ h9 M/ X* `0 C0 ^, \5 g7 r9 A
[] produce cltside missiles at the location, increasing with radius, that target the player4 p2 i! [" @1 l" c; v
(clt:a,cltdofunc=30)
0 H) N8 h/ w! V% j3 R(aurarangecalc=radius missiles are spawned within)
% V7 P' n, A# z
0 j  k) d' c# b# P3 s[] release a cltside missile from the player at the start of the animation
5 I0 S5 X1 o; u3 ^5 @& S/ G# r5 n(clt:c,cltstfunc=18)2 {2 o1 C6 @5 D" q0 W2 E5 [
, E) d  ?8 Z- k% L8 [! ]. K
[] release a random-ID cltside missile; missile is released either behind yourself, or 45 degrees to the left or right of behind yourself, @8 m' \! G: i/ h! f1 m
(clt:a,cltdofunc=34)1 L1 W$ q& }7 h4 Y# [. M
(cltcalc1=#; add the number to the missile ID of cltmissilea and it will randomly select a missile ID between cltmissilea and cltmissilea+#)4 I9 H5 K- B) _  Z8 z. Q* K- t& a
( x* d5 g" |/ Z" Y
[] releases randomly placed cltside missiles around the player that target the player via a state
# }1 P( S! `% Z& B- F(clt:a)" H, R2 T% e4 u/ E) N
(aurarangecalc=radius that missiles will appear within)
4 T; E' q* @" K* p0 W5 v# v(aurastate/auratargetstate/passivestate=missiles are only released while active)
; N( N5 d; j1 Z(auralencalc=duration of aurastate/auratargetstate)( b' Q; [! z* J5 ]6 v( |8 C
(states.txt: cltactivefunc=86)3 f  A, f1 ?0 b5 q

8 K+ l% t1 k: j7 @3 f5 k. t% B" M+ |! P[] Release a single cltside missile on first use, then release many on subsequent uses; only allows release in 9 directions and continues to release in a given direction if the user has used in that direction recently
% C6 W. N1 a$ ]- X(a,cltdofunc=49,cltprgfunc=93)- D/ T( i( M' z' ^1 r
(anim=SQ, seqnum=6, seqinput=10)
- ]& b& R! S3 d$ A5 v3 f5 {( k; g: |" X# w
[Dragon Tail] Release a single cltsidemissile that targets the player and a kick explosion if you are within melee range. Does not release srvmissilea.
# \8 M6 |3 r0 B  M(clt:a,srvstfunc=27,srvdofunc=50,cltstfunc=9,cltdofunc=7)8 e5 {2 @' g  U# O% j
(aurarangecalc=radius of explosion)- j4 }9 s) V0 T4 M; V. {$ B
(clc1=percent kick damage)
6 I$ Y6 a' O* w* X: {7 N( g1 g9 H  A' V! G
[Raise Skeleton] Release a single cltsidemissile from a corpse that targets the player
5 u9 c1 N! }* p% v2 S(clt:a,cltstfunc=20,cltdofunc=31)
4 v9 S, Y! I; n) z* F/ d) X(searchenemynear=1,selectproc=2,targetcorpse=1)
; }1 ]5 j7 O9 k* x  d
# {+ m/ Y" N8 W$ v) f[Mind Blast] Releases cltmissiles at the target location, with radius (but not number) of cltmissiles being controlled
! |! P6 \9 K1 g4 ?# v2 Y(clt:a,cltdofunc=8)
( A( h1 ~% ]) X/ U9 h(aurarangecalc=radius cltmissiles are spawned within), o. f) v# B1 _" j* t  N. R7 ^

6 `8 j  {7 N4 ~" W4 y' B# F[corpsecycler][vinecycler] Consumes a corpse and releases srvmissilea southward, as well as cltmissilea/b toward nearby targets {Doesn't seem to function if used by player, even if the player selects a corpse with it}3 w( e8 k5 r( g( B7 T3 w+ b8 r
(srv:a,clt:a,b;srvstfunc=63,cltstfunc=49,cltprgfunc1=93), z* b9 D3 M% G" L

5 i" m7 f0 U% q8 ?- k* l" S/ Q[Vine Attack] Spawns multiple srvmissilea and cltmissileb, varying based on calc1, at a target location. The missiles travel in a vein-like pattern. Cltmissilea is released southward from the user. Cltmissilec is only produced if used by a pet, constantly producing the missile as it moves. Cltmissiled is only produced if used by a pet, producing the missile when it is neutral.9 c6 W7 v1 L% b8 Z, i" f
(srv:a,clt:a,b,c,d;srvdofunc=130,cltstfunc=49)
4 f6 T/ \0 m# }# i4 {( p( S4 I(calc1=# missiles; how many missiles to release at the target location)
) m4 O9 Q4 {. ?) ~(calc4=frames to apply aura to target; likely defunct, originally this skill probably applied spidergoo, which applies an aurastate, but it is not set up like that in vanilla)
1 ^' v- J& g, L; U) \0 g
  }3 b: ]- l0 J" g# C6 Q$ |[N/A] An unused srvdofunc. When used on untargeted ground, it releases srvmissilea normally. When used on a target (like a monster), it releases srvmissilea southward from the target. {Not sure if it has a cltdofunc.} If no cltdofunc exists for it, then it will be rather awkward to make use of.5 S  \- k, q- J) a1 S$ I
(srv:a,srvdofunc=151)
! o, w/ Z( |' H; K: K0 J5 C8 F. r& t- p2 D% S$ L
[quick strike] {Unknown purpose, does not seem to work with players. Doesn't seem to do anything special either.} Releases srvmissilea and a cltside fire arrow.
( X! y5 }. o3 M7 v: Q: ]. V(a,srvstfunc=50,srvdofunc=92)
: H( C/ b* H+ B2 X$ ^+ s; z8 P! E4 F0 h+ G
---
' m* L+ z! l; T! n3 U& z2 Q' L$ @7 O: g. J! T: y; ?9 f4 ^
[DOFUNC MISSILES]" ~6 k9 h/ z3 a, x0 `

6 ]# z( v+ |: W* D8 l5 S5 p! ?. @* {[monblizcenter] Releases submissile1 and cltsubmissile1 & cltsubmissile2 within a radius every time the frequency elapses.
6 s5 i3 S4 e6 b9 L0 x(pcltdofunc=10, psrvdofunc=8)
* S  k) j2 B" X5 y: g* E) S0 E(param1&cltparam1=base radius; radius that submissiles are released within)
1 w8 x& \& [- p2 b! m) G( @, j. x(param2&cltparam2=base freq; how many frames must elapse for another submissile to release)
) @1 ~4 r- }- O3 A7 \: d& H/ H(param3&cltparam3=level divisor; {unknown}, seems to do almost nothing, lower values can increase frequency slightly)! }# z- F7 i- I* F% a
. f6 G( R0 U1 d1 w: J
[blizzardcenter] Missile subreleases submissile1 and cltsubmissile1/cltsubmissile2; subrelease is controlled by skills.txt5 j8 ]1 f) n. l" ~1 t$ o
(srv:sub1,clt:sub1/2,pcltdofunc=13,psrvdofunc=10)
+ [  ?) V. K) t8 t(clc1=radius over which submissiles are spawned)
; `- e6 q( w' ]; s5 [/ m(clc2=frames that must pass for another submissile to spawn)
0 a! _* N' O% g% E( |9 C4 `8 u; X: d# p
[bat lightning bolt] Constantly releases a downward-traveling submissile1 as it moves. Not sure if there is a cltfunc for this.
7 k8 d8 t8 v2 P4 I- ^2 X! _. P(psrvdofunc=9)1 P, J8 Z! W+ ~3 n3 A; ^
(submissile1=)
; N4 {  d( F6 i5 `1 Z* {% L
& E; ]* w3 T, g! @( f" t[erruption center] Missile subreleases submissile1 and cltsubmissile1/cltsubmissile2; subrelease is controlled by skills.txt
0 W+ G7 [6 ?+ b# p(srv:sub1,clt:sub1/2,pcltdofunc=48,psrvdofunc=25)
: E, _: z* t+ M# c4 _(clc1=radius over which submissiles are spawned)
/ R& X  i6 c* P+ ]1 U$ e/ Z(clc2=frames that must pass for another submissile to spawn)
* i" i  k* d! K: S! f$ D, i  z$ ?- r/ `) _" e, {
[volcano] Missile subreleases submissile1/cltsubmissile1; radius and rate of fire is controlled by skills.txt. The submissiles are given a randomized point within the radius to move toward, and their velocity is changed such that no matter how far it is, it will always run out of range when it reaches the randomized point (and if the point is the same as the missile, then it won't move at all, remaining stationary until its range elapses). This is the only missile function in the game that has randomized missile release from a single point; additionally, it is unique in that the randomized missiles can move (in all other cases, the missiles are set to be stationary since they will always move directly downwards: see Blizzard and Fissure).& {- ?& a6 ^/ a9 O' N" l9 t( v
(sub1,pcltdofunc=50,psrvdofunc=28)/ X8 f) [5 M% U" o5 H5 \
(aurarangecalc=radius of submissile release)8 A" d3 T' X. m1 i: t3 S2 M- Z
(clc4=frames that must pass for another submissile to be released)
& l- a- j- @2 \! u4 T
; S$ z- n. P; R! O[tornado] Missile releases explosions; radius, target selectivity and rate is controlled by skills.txt (or can be controlled by missiles.txt param1/2 if desired, with param1=frequency and param2=radius)
" z' q0 S6 ]' V" A% T, O(psrvdofunc=27)' d4 C. \/ r- N  O3 T
(aurafilter=selects targets to be hit by explosion)# U1 K6 y5 ^5 @/ c( \+ [  T
(aurarangecalc=radius of explosions released)0 g+ z. P" z! j8 {. f
(clc4=frames that must pass for another explosion to be released)6 X& b. P0 V7 O# m
+ Y4 {. b2 i# o, N4 I$ g3 z
[blade shield attachment] Missile must be present for Blade Shield to function; only required missile column is that it has pcltdofunc=57. Note that if you use cltsubmissile1, then it attaches a missile to you that spawns circling (ala Blessed Hammers) cltsubmissile1. These cltsubmissile1 missiles are released until the range expires. Looks cool, but it is unfortunately cltside-only.3 y( u. B! K$ }2 ^8 E, A5 R
(missiles.txt: pcltdofunc=57)4 g+ m  J7 z, u
(srvstfunc=28,srvdofunc=54)( r( Y% g6 d3 L
(srvmissilea=missile with pcltdofunc=57)" v; A( C, }$ I# v. O) d3 {
(aurafilter=determines the targets for blade shield to attack)9 c+ T3 ]+ @. M. R# S$ Z. N6 R8 @
(aurastate=state required for blade shield to attack)
/ j0 D% c  D) A; z& S4 _. j(auralencalc=duration of state)
/ X1 T- N7 I# y$ W3 n(periodic=1;perdelay=frames that must pass for another attack)) v# w" `$ z" u
3 D" Q  ]0 H' Q6 g- J
[grimwardmediumstart][grimwardsmallstart][grimwardlargestart] {}3 I3 Q/ e( |( s8 t" q9 j' E0 ?

, d$ @5 l2 S6 @) w[grimwardmedium][grimwardsmall][grimwardlarge] A missile that casts a skill periodically, making it act kind of like a pet or a pet with an aura. If the missile moves, the skill use will still apply from its original position. Does not seem to be able to deal direct damage as a missile (i.e. if it collides with an enemy and has damage values, nothing will happen).
  u  M; u. Z) z+ j: }2 z8 V0 l. i(psrvdofunc=14)
1 G0 l" g! F9 @- t" z; |(param1=repeat frame; determines how often the skill func is used)
; [7 i7 y* x) }0 j9 v9 c(param2=skill func; defines the srvdofunc used by the grimward)9 o/ o6 Z8 b  N" I
(skills.txt: clc1=duration of missile)4 c4 b" n8 X5 O1 c+ r$ D

& S  p; {" f7 ~( @- X[grimwardscare] {}' A3 \0 t3 g) x" |" k( l3 Y. ~

2 x) m. b& }/ U+ j8 U. y0 B[moltenboulder] Missile subreleases submissile1 and cltsubmissile1-3; missile numbers depends on the distance traveled (meaning velocity, acceleration and range all scale the number) as well as the direction you aim, with straight up or down reducing the missile count most significantly6 S+ D* p" H6 i* y; T9 m) n# V. y
(srv:sub1,clt:sub1-3,pcltdofunc=47,psrvdofunc=6)( J' u4 P. j; R  V. c! [
- b1 G& f9 l1 j2 Z
[vines][plague vines] Missile that subreleases another submissile1/cltsubmissile1 each time param1/cltparam1 frames elapse; submissile1 is released southward; cltsubmissile1 only exists if its velocity=0
/ t9 N  {% a% R0 q(sub1,pcltdofunc=49,psrvdofunc=26)# b; _* M: O3 F, L% Q) y

" T7 b# t2 w) k" w% C3 D[blade creeper] Makes the user automatically hit nearby targets. The missile seems to automatically travel with the user, unless you travel through a waypoint or portal.
' N! J, L- p( I6 |& D# w# O1 R7 l  d0 k(pcltdofunc=43,psrvdofunc=20,psrvhitfunc=37)
7 ?6 W" P/ `' U7 m; a(size=; determines the radius to hit monsters within)
; ^. c) L9 F( p* Q$ z/ o(srcdam=,mindam/maxdam,etype,emin/emax,elen; these are all applied to each hit): g4 H9 I- s/ l7 {

; R+ H% f3 n) u, ]# I$ {1 V[blade creeper][catapultchargedball on][catapult spike ball on][catapult cold ball on][catapult plague ball on][catapult meteor ball on] Makes a missile appear to travel with the user, fairly useful as far as cltside functions go.
5 L* O. T6 L2 ~* A& `# e4 P( R3 x(pcltdofunc=43)8 h6 w" Y, H) P; O7 P) q& N

/ h: u: F4 Y8 o[brdeathcontrol] Produces cltsubmissile1 randomly around the user.
7 [2 E% u0 f1 i7 G8 d) R- o; [(pcltdofunc=21)3 ]( s4 G6 }! E8 n6 I  o( B& @
(cltparam1=radius; {not really sure what it does, but it definitely does something}, crashes if the value is too large)6 I2 I( i- M+ u* N' r
(cltsubmissile1=; only seems to work if the cltsubmissile1 has pcltdofunc=1)
; Y- ^  p# i. l7 f( k" E! |
! T% L5 j2 T$ O7 _[brdeathlightningbolt] Only seems to randomly move around if produced as cltsubmissile1 from a missile with pcltdofunc=21.+ [( W/ k& Z. a
(pcltdofunc=22)
1 c+ Y! x& h7 S& I4 I$ d( z7 b(cltparam1=retarget frame; how many frames must elapse for it to randomly change direction)% |: k0 h  j* \* D) c: S
(cltsubmissile1=)
* U: _( e9 f+ Y4 v! u0 @, A/ ^" @
3 e3 o+ i# t' t6 ~0 S[denofevillight] Produces a missile that exists indefinitely cltside, so long as you do not return to Town.' G. l, S+ j5 f4 o9 K& K0 I
(pcltdofunc=23)
5 h' s8 e" i0 Z: @9 o& t1 g- @! r7 x& |8 r2 o
[towermist] Produces a missile that releases cltsubmissile1 all around itself.  k1 p0 k% D9 B- z3 H/ K- C
(pcltdofunc=25)' q( i$ H* ~1 M* z
(cltparam1=dest radius; controls the range cltsubmissile1 will travel)
) r( q' O1 W4 S1 Q(cltparam2=init radius; controls the distance from the missile that cltsubmissile1 will be spawned from)/ g5 h8 l, e, a" j1 B7 e
(cltparam3=frequency; number of frames that must pass for another cltsubmissile1 to be released)
2 N1 X* |2 Y% g" H* K7 x+ Q$ L(cltsubmissile1=): u/ L; W9 H# V6 z
1 N# r# q0 U* a( J5 W
[mephistodeathcontrol]
" f1 n+ d4 g8 N" I9 h  F2 Z3 L% A(pcltdofunc=26)1 J* v; @- ?0 @1 I0 M3 {2 g; W
(cltparam1=firewall frequency; how many frames must pass for another cltsubmissile1 to be released)
+ |2 u2 g2 a: c" B* ~6 D) |(cltparam2=rock frequency; how many frames must pass for another cltsubmissile2 to be released), A2 ^) @1 b1 T& T8 b
(cltparam3=radius; seems to control the total range of cltsubmissile1, causes a crash if the value is too high). f( ~8 l$ C' P. y+ K5 Y  Q% I
(cltsubmissile1=controlled by cltparam1 and cltparam3)
% E( p( L) \( K  @5 P: \(cltsubmissile2=controlled by cltparam2; lobbed out in the Z-direction and collides with the ground; how high it goes is probably controlled by the cltsubmissile2's range)6 \4 e. N; H3 |! F
( ?- H! |6 c9 D2 }6 p" ~
[mephistofirewallmaker][andyfirewallmaker] Only seems to work if spawned as a cltsubmissile of a different missile (not thoroughly tested).
7 V$ h1 L7 v( P- X5 X- k3 V  b(pcltdofunc=27)
5 Z0 W2 ^& ^9 q3 k# c( Z3 s(cltparam1=how many frames must pass for cltsubmissile1 to randomly change directions)
; `4 d* Z  K! J# a: K& r5 Y, p" Z* @4 n(cltsubmissile1=)0 Y# z) Q5 P  T4 [

% b$ X$ C2 K$ h! v& q' P: ?+ u[mephistodonotdraw] Spawns 4 cltsubmissile1. They will be spawned in a similar way as Teeth or Multiple Shot, but they can only be released in 8 equally spaced directions and the cltsubmissiles themselves will have randomized apparent directions despite all moving in the same direction.4 W+ i  A0 p4 g# b% ?+ a
(pcltdofunc=28)
3 v3 q. f, [/ _! A(cltparam1=activation frame; the frame at which the four cltsubmissile1 will be released; if it exceeds the range, then it doesn't happen)+ h6 P. E: l. J6 D( F( |
(cltsubmissile1=)
. ~& b" g6 g$ V7 }. p# Z, b* g4 z
" k0 K+ J1 a5 f[horadricstaff] Hardcoded. Allows ID=338 to produce the Horadric Staff graphics.. q! B0 z8 w7 D+ O, j
(pcltdofunc=31)' n2 C6 c4 j3 l( y% p2 C6 Q/ \4 r

. U# }1 d* K$ _4 \# n2 r: U. B[towerchestspawner] Releases cltsubmissile1 in random directions (not synchronized with the gold dropping outside of the delay which can easily be controlled by other means, hence why I've separated it from psrvhitfunc=33).
$ T$ |% x- R$ L- u(pcltdofunc=30)
$ d3 J$ D; Q7 S2 x5 N$ o4 D(cltparam1=start delay; cltsubmissile1 only starts being produced after this time runs out, in frames)
, Y/ w. [; _" x1 z3 G" d! m(cltparam2=spawn interval divisor; spawns slower the higher the number is)1 P( G' _. |; N% D% P
(cltparam3=radius; {doesn't seem to do anything})
  W$ U5 S2 O) N5 K  b(cltsubmissile1=)
9 O1 I5 G; p5 {6 q% ]% z" i* I! q0 f3 l
[cairnstones] Spawns a portal to a level and creates a bunch of missiles randomly within the defined radius over the range of the missile.
, m7 g& T$ t2 j$ k0 Z(pcltdofunc=24,psrvdofunc=17,psrvhitfunc=32)" P2 U  p2 R8 Q/ p7 j8 V$ E, _
(param1/cltparam1=fade frames; {???; seems as if it skips the number of frames entered}); i! s) O: D$ X
(param2/cltparam2=lightning delay; how many frames must elapse for another submissile1/cltsubmissile1 to be released)( _, Y5 Y2 a5 A) Y3 Q& v
(param3/cltparam3=radius to randomly produce submissile1 within; srv and clt does not seem to be synchronized)* u! L* G; T5 S  n6 {/ L
(param4=destination level; chooses a level from levels.txt and creates a portal to it; crashes if the portal leads to a level from a different act)
2 t5 o! F3 H  L. {(param5=portal delay; number of frames that must elapse for the portal to spawn)! M9 M0 X4 R  n# P! G8 S" M2 m7 W
(cltsubmissile1/submissile1=missiles to spawn within param3 radius every param2 frames)& y1 ?) u( o8 D8 C5 d
+ G1 j* l& m! e' s
[durieldeathcontrol] Produces screen shaking, and the missile durieldeathrock. {Also produces some kind of explosion, don't care enough to check which one it is.} Modifying the range makes it produce the missiles for longer, although the screen shaking will only occur towards the end of the range.
: J, O$ P* [6 V" T# g(pcltdofunc=36)
+ b2 w" T) k& }( l  W5 R9 D7 O# @' K" ~# r. u
[diablo appears] Shakes the screen for a fixed duration towards the end of the range. Also causes the "Not even death can save you from me" line to play.
6 P7 ~2 w  S$ y- ~$ O(pcltdofunc=37)
/ L+ U- S+ o  }% O- L+ G  t0 a; c6 b: J2 x- Y  i! @
[izual control] Rapidly spews out izual mist loop and izual mist fade. Also allows you to control when it starts and stops spewing out izual lightning and izual lightning trail.5 r9 E; |, M" I6 m
(pcltdofunc=42), Q; f# s5 d  \6 b0 z  W$ L/ s
(param1=lightning start; determines the frame in which it starts spewing izual lightning)
6 b: S0 x% j$ X% G& J0 L9 o1 ]7 n& G(param2=lightning stop; determines the frame in which it stops spewing izual lightning). p( w* S) ], h

5 V+ ?, T3 G: K, ^[distraction] An extremely useful and unique missile function. Functions like Blaze, but does not depend on a skill nor a state. Creates some kind of missile that follows you around (it's invisible), producing submissile1 as you move. There does not appear to be a limit to the number of these you can have following you at once. Only seems to disable itself if town=0 and you go to town. {The cltside graphics do not seem to function at all.}6 i) b  Y5 X; K
(pcltdofunc=44,psrvdofunc=21); {! B: {% y! h! H" D
: ~) r  }1 n3 A1 g% s" B5 _
[distraction fog] Creates clthitsubmissile1, which seem to spawn distributed along west/east/north/south, but also spaced apart if on a given direction.
) M# K7 n! U" r) R( l' Z(pcltdofunc=45)2 `/ A4 p* w  [6 c- P: d. \  V
(cltparam1=spawn rate; determines how many frames must pass for another clthitsubmissile1 to spawn, seems to have a global timer instead of being relative to the initial missile appearance)
$ Q; ?6 k* e6 ]% R0 t3 M(cltparam2=number; determines how many clthitsubmissile1 are produced per spawn)* s7 D. _% O9 I2 ^. K9 |) M- m
(cltparam3=radius; {???})
6 H( ~! n+ U) I6 q+ H; S0 j
/ H& r; P0 R2 b( N/ X; e+ v[anya center] Shakes the screen. Hardcoded to only produce a few specific ID missiles.# U" M0 u% D+ @4 N; [
(pcltdofunc=54)% z8 ^/ ?; o: l. w4 T2 g) u/ ^

# a7 F; ^3 ~% j$ l* L[world stone chip 1][world stone chip 2][world stone chip 3][world stone chip 4] {Doesn't seem to do anything special, probably only functions right when produced in the Worldstone Chamber}* _: P  F& b2 O6 h" B/ B
(pcltdofunc=59)
- E0 Y8 E& `4 y1 i  h; E- O; A/ a
1 p3 k/ @( p" s& {! w[bonewallmaker] See The Guide to Almost All Non-Missile Skill Functions under Bone Wall.6 E. U; V+ S; N" O

, Y0 h0 x# Y. ]9 J& X" @4 ^$ |' D[tigerfury] Cltside produces a trail of clthitsubmissile1. Srvside does not seem to do anything {???}' t* K6 h. Y9 ?1 Y7 R, U
(pcltdofunc=53, psrvdofunc=32)% N! U* M$ c% v% }  g

: D/ V3 \7 k* ~& W! P[ancient death center] Produces ancient death cloud around itself.
8 C$ A" O) t% V' @8 N(pcltdofunc=55)
& J9 d/ }+ o0 w& n7 l
  r4 p0 k8 z: B[baalfx spirit 1][baalfx spirit 2][baalfx spirit 3][baalfx spirit 4][baalfx spirit 5] {probably specially called by baalfx control} {???}' E9 O8 ?/ {$ }& x
(pcltdofunc=65)
( b  s! o5 h5 L. O4 n! U8 p4 Y; r8 f5 ^% s9 L
[nehlithakcontrol] Controls the whirlwind/fissure thing that Nihlithak produces on death.
9 E/ F; ~' K! y4 i(pcltdofunc=62)" {  t4 J5 ]  n0 _! ~  B
) M9 K7 m: F: ]9 @8 l% D( ~6 p
[nehlithakswoosh][nehlithakdebris1][nehlithakdebris2][nehlithakdebris3][nehlithakdebris4] {???}
7 F* x7 p) s5 P# Q; `. t% }4 f2 x1 p(pcltdofunc=63); u) L  H4 T) l3 f
7 Z7 H! ^$ Y6 f9 r' C/ K& v7 W" o
[baal taunt control] The only missile in the entire game that creates all submissiles, randomly selecting between submissilea/b/c. Also has a built-in delay before it starts firing, as well as allowing you to control the frequency of submissilea/b/c production. Note that if param2/3/4=0, then that submissile and all following submissiles will not be selected. Also automatically explodes submissiles to release their hitsubmissiles: even Frozen Orb will immediately spawn as an ice bolt nova, despite usually only expiring by range.7 d) X& @( z# s' h  n( }- B+ h% i
(pcltdofunc=56, psrvdofunc=34)
; ~4 B) g  q0 G9 q3 J(param1,cltparam1=initial delay; how many frames must pass before a submissile is released)
  V2 [, y1 @2 z9 ~! X: q(param2,cltparam4=missile 1 delay; how many frames must pass per submissile release)4 R5 T3 x. l8 y  i9 k
(param3,cltparam4=missile 2 delay; how many frames must pass per submissile release)
, n5 j% V! ?8 [( Q8 G(param4,cltparam4=missile 3 delay; how many frames must pass per submissile release)
1 D; K% Q" V( D5 q, I5 E* k* b9 v& l1 z; k" n# c
[royalstrikechaosice] If used without srvdofunc=41, then it releases a missile straight south. With srvdofunc=41, it produces a defined number of missiles which can have definable, changing paths.
- [6 F- p9 z! }7 ?2 I, l(pcltdofunc=58, psrvdofunc=35)6 z  N  o* q' H- w
(param1/cltparam1=repath freq; how many frames must pass before the missile changes paths)
  m% {: s7 f5 J  l: t  I5 v: T- X! }% F6 r4 Z" `
[baal cold maker][wake of destruction maker] Missile subreleases 2x submissile1/cltsubmissile1 as it travels; the number of missiles released is based on the total distance travelled, so if you make the missile faster or shoot it at the proper angles, then it will produce more missiles. If used with srvdofunc=139,cltdofunc=8 then it will form an arrow-like stream instead of a compact stream.5 o3 m; k) m: \4 v4 m6 q
(pcltdofunc=52, psrvdofunc=31)5 W. Y; Q/ e; @  n
3 e' \" X3 O6 a$ G. z6 ~2 t% y
[rabiesplague] {doesn't seem to do anything when not used by rabies}
4 T: ~# E9 |) a6 |8 D, y# _(psrvdofunc=30)2 `- d( w; E# G8 {( f- N

, l6 z- W& o6 t9 _4 f- o[hurricaneswoosh][hurricanecart][hurricanerock][hurricanesack][hurricanetree][hurricanevase] {Seems worthless unless used with Hurricane.}
( `* K3 q4 n  A% Q- x7 ^(pcltdofunc=60)
2 j3 a; f* o% s$ |0 P5 R* E& O) u( Y( ^3 V+ A7 R# I
[firestormmaker] Releases submissile1 and clthitsubmissile1/2/3 as it travels. Not that interesting unless used by Firestorm.. _, ^) U( n1 k: P. M+ N; y
(pcltdofunc=6,psrvdofunc=23)
& z$ F( M# t$ W" v+ e4 d' f2 t/ [/ ~' w8 H- g* @1 S5 \
  E# R: P6 }# a9 Y0 o) |
[recycler delay] A missile that is more like a skill than a missile. Lets you rejuvenate a defined % of max life after a delay.
) y# }: l/ W4 p; q& \8 s$ Z(psrvdofunc=29)
' ]5 o6 t7 [' P4 M* G& S(param1=active frame; determines when the life rejuvenation applies)
+ k! n: m$ _# x2 s) y( S0 X(skills.txt: calc1=life steal; determines the % of max life gained)3 I& k  Z. C! @" B
0 T" F* ]  B  w3 t. Z' a3 u" p
[recycler delay][vine recycler delay] The cltside part of the recycler delays. Makes the user invisible (except for their shadow) and releases missiles.
1 q5 l% @! l9 A(pcltdofunc=51)4 g; e8 g1 y+ e0 Y5 I" `4 k$ j
(cltparam1=launch vines frame; determine when cltsubmissile1 is released). K9 l; H( X6 ]& v) b# j% M1 Q
(cltparam2=active frame; determine when cltsubmissile2 is released)
4 ^( C  n# l4 ?! \(cltparam3=extra vines; determines how many cltsubmissile1 should be released)
" G7 f+ Z$ x+ h" J" n+ |8 w% T(cltparam4=vine radius; determines the radius in which cltsubmissile1 will spawn)
+ M6 O$ w+ h2 V$ B) v! O(cltsubmissile1=missile is released after cltparam1 elapses)( Y& `. x1 I: s# g) e
(cltsubmissile2=missile is released after cltparam2 elapses)
( ^0 U" ]$ H9 o. O" o, Z9 q
. O1 j5 }1 Z6 [8 E[vine recycler delay] A function that is more like a skill than a missile. Lets you rejuvenate a defined % of max mana after a delay.
9 ]! k1 D" p: k(srvdofunc=33)1 g7 _" k8 W" t! E: f+ M( E* A
(param1=active frame; determines when the mana rejuvenation applies)
8 \6 c. _' F6 t) O7 O8 z+ x! y(skills.txt: calc1=mana steal; determines the % of max mana gained)
- s  r: `2 T6 u" ?- L
6 j6 Y3 K: d. f, P# P" c[ProcessMissileDelayed]' f8 I+ |! d6 A8 [! b% \7 j  G
(pcltdofunc=67, psrvdofunc=37)
3 {1 ]2 J, F$ w: c(param1=frames until submissile1 release)
- ]1 @7 |9 x1 g3 k; G2 [: L) S- }. L  J(param2=frames until submissile2 release)& @8 f# b* _& x* l0 H. |
(param3=frames until submissile3 release)
) i6 L8 @3 |  W  s* A/ v- a8 ^(cltparam1=frames until cltsubmissile1 release)& U" }2 K/ o2 Q* x, w* X6 e
(cltparam2=frames until cltsubmissile2 release)
- g2 \3 m2 @* f& |/ G* A(cltparam3=frames until cltsubmissile3 release)
1 s" r, V$ `/ s* O& c(submissile1,submissile2,submissile3=submissiles are released after respective param# delays): d* h. e$ P5 Q$ M
(cltsubmissile1,cltsubmissile2,cltsubmissile3=cltsubmissiles are released after respective cltparam# delays)# u! |7 [0 Y( J" W" p

8 ^# e1 D; q* a---7 m+ S9 @2 P6 i8 G! R' Z- R
) `. ~' ?$ T* N5 m
[HITFUNC MISSILES]$ @( x+ F* U( H8 r

$ t5 h: N5 ?* A& R  |: @[cairnstones] {Unknown purpose}2 `7 Q+ m; S- I. F, K
(psrvhitfunc=32)6 }9 B2 L$ ]7 z% D
/ G, O; i3 B% v/ B$ J0 s1 v& e
[orbmist] Spews cltsubmissiles all over the place with configurable radii and frequency.; L) r& U5 o) x5 {) g4 H
(pcltdofunc=25,psrvhitfunc=35 {unknown what psrvhitfunc=35 does; might be what triggers the countess chest to open})& Y* ?3 d% a% ?% C8 e: k6 x  F4 y
(cltparam1=dest radius; {???})
2 P+ w  \0 v& Z% }3 S# }) g; r(cltparam2=init radius; determines how far from center cltsubmissile1 can be released)% \/ ?" A& N$ A' F+ X: ?
(cltparam3=frequency; controls how many frames must pass before another cltsubmissile1 is produced)/ K  |9 p: z( B$ P9 [  o5 `
(cltsubmissile1=released in a distinct pattern)" }; E. V) n. X6 Z0 [3 `

; X. d( S1 [" z, [, _& I& M[hellmeteordown] Produces a cltside-only fire patch after the missile expires; the fire patch has randomized animspeeds, which gives it variable duration. Strangely, it does not actually use clthitsubmissile1/2/3. Chitpar1/2/3 also appear to be useless.. W  v1 E9 ]: w5 O# T' \
(pclthitfunc=36)
! i; U; Q: M' @: _$ r+ f3 L(chitpar1=radius; {???})
$ p/ w0 C5 B- B) M, l) }3 x. D(chitpar2=variable duration; {???})  k3 }0 ]# E/ ^
(chitpar3=density; {???})* t5 z+ o) x, B( q# s1 d- {% \

% ^0 N9 \6 G9 \; }[immolationarrow] Missile subreleases hitsubmissile1 and clthitsubmissile1-3 in a radius and an explosion; radius of hitsubmissiles and explosion are controlled by skills.txt& j! ~, _" n: V4 L3 \
(srv:hit1,clt:hit1&2&3&4,pclthitfunc=12,psrvhitfunc=9,resultflags=5)( G1 B: G8 ]4 S# d9 S- G2 d
(skills.txt: clc1=radius hitsubmissiles are spawned within)3 K- z. h" h" R. `! Y% i0 E
(skills.txt: clc2=radius of explosion)( f. w6 x0 Z1 a5 {; ]' A4 a

1 E  \, @2 G9 J. c& E  A# Q" c[lightningfury] Missile subreleases hitsubmissile1 and clthitsubmissile1; subrelease is controlled by skills.txt
+ l# w" w0 d, E; R4 K4 b(hit1,pclthitfunc=25,psrvhitfunc=21), j$ c- i  j9 N. K
(aurafilter=determines targets of released missiles)
9 `( r# O3 \; ~  \$ R1 J% s(aurarangecalc=determines range to search for targets)9 O) d2 j3 U% k9 g; a7 C
(clc1=number of bolts to release)
! _# Y% f0 j: A
) y2 d* _$ Q2 m  |0 ?[moltenboulder] Missile releases 18 hitsubmissile1 and clthitsubmissile1-3 within a defined, unchangeable radius; also releases explosion damage radius controlled by skills.txt; missile also always pierces size 1 and 2 units and always explodes on collision with size 3 units and units that are immune to knockback. It can deal weapon damage over its explosion radius (which won't apply any attack/striking/hit effects), which is highly useful.
0 }; x7 G' U' b' K  @1 \3 r(srvhit=1,clthit=1&2&3,pclthitfunc=52,psrvhitfunc=47,resultflags=5)2 f8 s$ g3 C' Y4 V0 G1 }
(skills.txt: aurarangecalc=radius of explosion damage)) M$ _% P/ B0 m; @7 `  f- E4 n9 W+ r

) J  n. P9 o3 D: `2 a[explodingjavalin][ice javalin] Explodes within a defined radius, dealing srcdam+dmg+elemdmg within the radius. Seems like a less weird, more generally useful moltenboulder. Highly useful if you want to add Melee Splash to your mod without using nextdelay (which I recommend, since nextdelay should be disused as often as possible).3 q4 O: d! u5 L: R
(psrvhitfunc=44)
5 s* a& R; `' I. ]) _  M; Q(s.HitPar1=damage radius; only functions if resultflags=5)) {, s" v, q: d7 @" {
(skills.txt: aurarangecalc=radius of explosion)# _+ L, \( s* P3 L. C' O7 D$ G4 y

! r9 j5 h, W* T7 y9 o[fireball][glacialspike] Missile deals damage with a radius explosion instead of by collision with a specific target; explosion radius is controlled by skills.txt.
# n. b2 _5 D3 ]0 q. [6 Q(pclthitfunc=14,psrvhitfunc=13,resultflags=5). S& H" Z$ z9 m/ g3 `
(s.Hitpar1=radius of explosion; if set to 0 then skills.txt aurarangecalc is used instead)7 L5 h$ [7 t7 s, }+ N- U/ C+ A7 Q$ w
(s.Hitpar2=freeze length; if set to 0 then skills.txt auralencalc is used instead)
$ r- H: [" p  \9 }5 Q(skills.txt: aurarangecalc=radius of explosion)
; q2 r6 q7 j2 h/ c$ R(skills.txt: auralencalc=freezing duration)
# f1 w9 L8 ~# m: Q% m( w
5 R) \0 V1 Z1 R: s[catapult spike in air] Spawns hitsubmissile1 and clthitsubmissile1 after expiring. {Not sure if this has any unique behaviors, it doesn't seem to behave differently when used with catapult spike ball}6 m, d( O9 T+ `1 m3 j# I
(pclthitfunc=44, psrvhitfunc=36)5 [# o3 U- A/ h) d2 [' m) W$ q
(hitsubmissile1 & clthitsubmissile1=released after the missile expires); B3 ^+ R) ^4 G- S& c! E* ]8 o9 b

0 ^2 D9 k6 f& C, }[catapult cold ball] Releases a bunch of catapult cold explosion missiles, seems hardcoded.3 @5 A; @1 U$ L
(pclthitfunc=48)& |3 n. s9 w- \0 B" s3 N, t) b( ?0 n

) f) s3 s: o& g8 h0 D1 z4 y[catapult cold explosion] Leaps in a random direction, produces the melting ice cube graphics after expiring.
$ O& i  l# s9 \+ i6 \9 N& X5 Y(pclthitfunc=31)( U2 g; y/ P' c5 j) m

9 o3 d; V& Z5 S* V* `[catapult meteor ball] Produces clthitsubmissile2 in a pattern like Meteor fire and flings molten boulder rock chunks. Seems like a fancier Meteor pclthitfunc.
0 y8 X' {8 ^) K6 o" t; u' x: k(pclthitfunc=50)% Z3 y5 \. B: f" Q
(clthitsubmissile1={does not seem to do anything})9 J( T5 X6 Z) |& u
(clthitsubmissile2=produced in the same pattern as Meteor)+ m" S2 T( x5 e; @% V5 R

$ X* o3 y/ a% D7 {; c, N2 F# Z[vines trail] {}) [- S9 F# M- N+ f3 N( @% O( ~
(pclthitfunc=54); e* G" d- N5 D2 o
(clthitsubmissile1=Released after missile expires)
, e$ V3 v) X4 m( L
) a# T5 ^8 _% S( A[plague vines trail] Makes it so a missile stops dealing damage prematurely.: e. N$ m7 G2 w* g4 K
(psrvhitfunc=50)8 k7 p  D1 K) x4 H6 |$ p1 n
(s.HitPar1=hit delay; makes it so the missile can only deal damage if hitpar1+range>=range left on missile, i.e. if you have 200 hitpar1 and 200 range on your missile, then it will be able to hit for the first frame only)' T  p$ e6 D0 [* Z- ?1 O
. Z3 J  w3 D  L8 {" c) Z, U( j
[healingbolt] {???}8 Y+ }$ d4 A8 `$ w4 n5 s# R: d$ L
(pclthitfunc=40)2 P" y5 ~; Q, @: ]( x

* I, F2 t; I# V8 |3 p[death mauler trail] {Doesn't seem to function unless used with the usual skill function}
, y% H2 ?4 A6 M3 e8 g(pclthitfunc=44)
: W( G+ z4 ]( Z4 Y(param1=spacing;)
  w6 [. @9 S4 A(param2=draw delay;)
) _6 D% K' q9 C/ |7 w5 J# L7 [) e! S# s: `6 I
[catapultchargedball] A very confusing missile, although still somewhat useful. The supposed missile count is not anywhere close to the actual missiles released: it uses some annoying non-linear function. Has an interesting pathing for its hitsubmissiles, which follow a vein-like pattern. Strangely, the cltside missile seems to reference hitsubmissile1 instead of clthitsubmissile1.5 i( ~9 B5 g3 |; f, v5 M6 y
(pclthitfunc=46,psrvhitfunc=38)+ v! g+ L( @5 _1 R% c9 @# S
(s/cHitPar1=charged bolts; not accurate, see below)
* _4 W; Z' ^1 a0 d: ?(s/cHitPar2=charged bolts per level; not accurate, see below; I recommend ALWAYS setting this to 0 since if the value climbs to high it will crash)
2 M* j& n" R0 E( c: p(hitsubmissile1=missile to release, both srvside and cltside; appears to be perfectly synchronized)+ k$ I7 x0 V% _* Z, H- M' {
  1. supposed charged bolt count=actual charged bolt count
    ' Z% ]: r0 V! r( @0 p+ y+ ~2 B
  2. 1=1$ l7 g+ H7 h1 o: Y- u9 R5 ]
  3. 2-3=10
    + j- I) V$ l9 [) W$ _# D
  4. 4-5=12* g: C% J. }+ @; s) T) F( |+ a
  5. 6-7=14
    % o; ^% L, D( _' L' {8 H9 n0 R
  6. 8-9=162 X# L4 t2 R1 N$ R3 q1 E  ?
  7. 10=10% q' N% B+ ?: a/ N% ^# e
  8. 11-12=18
    , F& m# T* S* j1 s. S+ v- x0 S
  9. 13-14=201 O8 }( m3 ^6 i8 y2 I+ K
  10. 15-16=229 d1 z: H0 E+ v" o
  11. 17-18=24
    * [0 l4 f. r. W4 o  R% O5 P4 |
  12. 19=19$ `* N2 l" a# P0 M. p
  13. 20-21=26
    3 h3 o; d6 ]+ ~/ P
  14. 22-23=280 H+ A' P5 B+ w4 W% M6 F8 P
  15. 24-25=30: ^1 ^9 U* f, s4 t
  16. 26=34
    2 F  T7 f! F& J5 Q6 u
  17. 27=32$ m3 _! _+ z/ ]! s1 A% ~7 l: m" {
  18. 28=28
    6 v/ a. n& R2 l4 \: T0 g
  19. 29-30=34$ Z7 K0 z1 m% s4 t. c& q
  20. 31-32=36
    2 y. V7 B! D& {0 M/ q4 d: H4 \) B
  21. 33-34=38% }9 [; p2 T1 }& I6 v
  22. 35-36=40, u  A6 k0 P& D& F0 Y
  23. 37=370 b. K8 d0 u0 J4 W/ ~: U+ ]
  24. 38-39=42" [5 Q8 V9 |& ?) a& V' a' N9 n
  25. 40=44; K) J; D5 i8 @' ~9 Z( e" m
  26. 41+=crash
复制代码
[baal taunt lightning control] Releases hitsubmissile1 and clthitsubmissile1 in a random direction.
: }# ^7 `2 N( B) |. i$ {1 v8 D- C(pclthitfunc=62, psrvhitfunc=58)
. m) r& w0 t' l: `8 V. p; g# B(s.HitPar1=range; {???}, according to VV this determines the radius of the random area selection, but I haven't thought of a good way to test it)
3 e+ P' E' e& n: H(cHitPar1=range; {???})
+ x# ]# e$ V3 J3 V( d+ @0 D: W  H* H8 K( ?2 P# _
[baal taunt poison control] Releases multiple hitsubmissile1 and clthitsubmissile1 in a kind of double-layered nova. The inner nova is "slow drift" and the outer nova is "fast drift". Seems to only be able to produce 9, 10, 11, 12, 13, 16 or 23 missiles. Modifies its hitsubmissiles by applying their params as velocity modifiers: param1 is slow drift and param2 is fast drift (if these are set to 0, then the hitsubmissiles will not move).% ?4 p2 u" v6 t6 H6 c) R2 j) z
(pclthitfunc=63, psrvhitfunc=59)
% C( c, d- n& H, Y& f(s.HitPar1=increment; 1=23 missiles, 2=16 missiles, 3=13 missiles, 4=12 missiles, 5=11 missiles, 8=10 missiles, 256=9 missiles)7 x/ `& y4 b/ T5 p* o
(cHitPar1=increment; see above)
5 i) b2 q* k5 q! m- {# A& b& w: d, F, I5 |5 [+ y% m5 |( d* w4 Z
[baal inferno] A missile that can drain the target's mana.( W; z  Y8 B: K+ H, i
(psrvhitfunc=55)
* J. A" q# t/ p2 ^6 z0 \, n(s.HitPar1=mana drain %; this works like crushing blow, so if the target has 100 mana and the missile has 50% mana drain, then it will reduce them to 50/25/12.5/etc mana)
4 N! Y* ?) Q& j- K2 A3 E  K. r
7 J! ?/ t' `4 J. Q" I8 u9 }[armageddoncontrol][diablogeddoncontrol] Has a controllable explosion radius and produces hitsubmissile1.
9 ]" t( n) g$ `6 u& s" n(psrvhitfunc=56)! q0 z9 F4 T% l9 B+ [
(s.HitPar1=damage radius; radius of explosion)- b" P2 W8 ~7 |$ e/ m2 s% G

( ?. g1 P$ A$ r% A[armageddonrock][diablogeddonrock] Releases clthitsubmissile1 and clthitsubmissile2.% n7 z3 ?/ i. f5 K! Y9 r
(pclthitfunc=55). t/ Z* }. `. O0 A
! p+ P9 M1 Z5 B4 H; m
[taintedsunflash] {No known purpose; probably does something special but only when triggered by the quest} {???}3 N) X3 F: L/ I' E
(pclthitfunc=38)
6 o$ `3 b' n) J) X, y  X4 X2 v- _' R9 p; a5 @  o- P
[durieldeathrock] Produces durieldeathsmoke and three durieldeathdebris in the target direction. When spawned by durieldeathcontrol, the durieldeathdebris seem to spew around randomly./ \# C5 f6 @. `& R
(pclthitfunc=41)
% [+ z0 E7 f$ A7 x$ O; y
2 L$ ^3 W% \6 f0 Q7 U[bladefury1][bladefury2][bladefury3] Releases 1-8 arrows (seems to only release arrows, ID=0) in cardinal directions.
8 |3 X) Y1 i5 v' i% _$ [4 u(pclthitfunc=64, psrvhitfunc=52)! r" |3 u) P) J
(s.HitPar1=increment; see code)
' z* \+ G, B/ \+ y7 q(cHitPar1=increment; see code)1 h* X4 E$ R' ^/ R
(hitsubmissile1=; must have a valid entry, but regardless of what you enter it will release ID=0, arrow)
; e* z. H( ^7 ~6 ]' F: y6 |(clthitsubmissile1=; must have a valid entry, but regardless of what you enter it will release ID=0, arrow)5 c2 x7 S+ k3 w/ Q5 h

" C# Z* i9 P8 R! N3 ~. o
  1. hitpar1=# arrows
      a% [1 n5 E' T
  2. 0-1=8 arrows, in the cardinal directions
    , t: Y4 W* k% ?( ?: F
  3. 2=4 arrows: NW, NE, SE, SW
    & n$ J: H# t6 Q: e# f% m
  4. 3=3 arrows: W, NE, SE/ k" L: i- m$ f
  5. 4=2 arrows: NW, SE
    2 T' t0 W, v3 }2 |
  6. 5=2 arrows: N, SE
    ) E- [& T9 z/ @6 {2 i; o
  7. 6=2 arrows: NE, SE
    / `  H( E; x6 D( A5 E+ x; K3 ~5 ]
  8. 7=2 arrows: E, SE  ?" R" p6 V4 p. J5 M6 k! N
  9. 8=1 arrow: SE
复制代码
[overseercontrol] Crashes the game. {Probably only works with Shenk}
. i/ H( ?) C$ S" j3 a2 @5 r(pclthitfunc=61)
' \3 g" X; }: m2 [5 l
4 D4 T. ^2 o" ~0 x" H% z: O# Y[baalcorpseexplodeexpl] Produces clthitsubmissile1 {no idea why this exists} {???}; F" n& C) Z( K
(pclthitfunc=44)
" C0 [1 {4 u' i8 Z$ G% v9 V! h. {! y. `* D& V! A+ l( Q
[fistoftheheavensdelay] Very unique in that it follows an enemy, only hitting them when the delay elapses, and never hitting anything else. Calc1 and calc2 do not do anything, the healing is deprecated. Annoyingly, calc4 determines the srvside submissiles, but does nothing about the cltside submissiles.
2 L! F% v/ l; \  w, B& I3 O3 F) ~(pclthitfunc=26, pcltdofunc=22)7 d# R1 v( t9 N7 y6 D6 Z# Y
(s.Hitpar1=range; uses the skill's aurarangecalc if set to 0)( w' H% ?  C8 C% ?0 X! _% ^6 v& P
(s.Hitpar2=# bolts; references calc4 if set to 0)
) t8 l8 u+ U% \/ c(cHitpar1=range; uses the skill's aurarangecalc if set to 0)
  ~. B) ^5 F7 [  k, m" q(cHitpar2=; doesn't seem to do anything, always seems to produce one missile per nearby monster and targets all monsters within range regardless of their type)5 c6 x9 t- A1 R% c
(Range=the amount of frames it takes for the missile hit the target)
5 O2 N5 ~- }6 M1 R) d- `(aurafilter=determines what the missile will release hitsubmissiles at; does not influence the cltside)
! l3 {( |: o8 V& ~& t& ]5 g(calc4=number of srvside bolts to release)
6 U) @& T' C  R9 s' r) o
9 V1 S4 E+ c" i. C5 H[catapult spike ball] Creates a missile which sends hitsubmissiles to the cursor without needing skill functions. Also has calculation controlled hitsubmissile count.' g6 u% h8 t6 ~- I* u
(pclthitfunc=47,psrvhitfunc=40)
) ]5 B# \3 V) C- |# j2 a2 Y) K! h(hitsubmissile1=missiles released towards the cursor, which explode upon reaching the location; note that this hitsubmissile1 will not explode if it has too little range/velocity relative to the catapult spike ball, it seems that it can get purged before it explodes)
7 c* _6 h+ h/ e& t* q(clthitsubmissile1=clt missiles released towards the curosr, which explode upon reaching the location)% M, V. B% O! }$ B/ k/ q/ x
(clthitsubmissile2=released when the missile expires, spawning like explosionmissile)
% ]: K0 l1 x+ N8 g(skills.txt: calc4=number of hitsubmissile1 to release)* z$ z$ |0 t: A7 R/ ^+ k1 Y
0 Z# ^: a8 n* e- u% b6 X8 ]& |$ w
[meteorcenter] Missile subreleases hitsubmissile1 and simultaneously subreleases clthitsubmissile1-4; also subreleases an explosion which is controlled by skills.txt  s0 e0 j5 s; y7 w0 {6 R, {1 Y
(srv:hit1,clt:hit1&2&3&4,pclthitfunc=18,psrvhitfunc=14,resultflags=5)
5 N/ A* d  x) i$ ?' U(skills.txt: auralencalc=radius of explosion)
  x6 u: O# @! D3 V2 L2 f7 |  f5 V% t  Z* u: P+ e4 C: I
[holybolt][fistoftheheavensbolt] Missile can specify between undead/demon/beast, releasing clthitsubmissile1 only if it hits the undead. Note that if collidekill=0, then the srvmissile will still die on the first collision, whereas the cltmissile will still exist, resulting in a serious desync. This is not a problem if you use pierce=1, but then you have to rely on the item_pierce stat.  Z' ~- T) U* S6 t
(clt:hit1,pclthitfunc=9,psrvhitfunc=7; hitpar1=collides with allies and applies healing; hitpar2=enemies it can collide with and apply damage)7 T7 w: m, q$ J+ x
(clc1=minimum amount of healing to allies)
- g! F, U7 T( g8 x9 H(clc2=maximum amount of healing to allies)" A, }( q, [4 ~6 Q# I8 c
(note: clthitpar2 always only targets undead, so it may be desirable to try out other pclthitfuncs)
  g& h; p( X) ?. x& W/ f; }7 S# h2 S+ N% i( Q1 e
[spidergoolay] Releases hitsubmissile1 southward upon expiring. {Doesn't seem to do anything special} {???}
' B) g' z3 V( h; A6 K( t(psrvhitfunc=15)  A4 Q! G+ O7 p
(hitsubmissile1=released southward upon missile expiration)# F$ B9 `1 Z+ A1 c. q# y" X! `/ [, f
" W& p3 ]8 @( n/ K7 r
[howl] Missile applies fear to the target but only if there is an auratargetstate in skills.txt; regardless of the state, it will only apply the fear state1 G# I7 m! w  T; I1 K' l, c$ t5 h* {* h
(psrvhitfunc=17)( c" }' C  `9 f" P& q/ O
(auratargetstate=any state)
4 [: {* ~" ^* Q. T4 M" x(param2=plev+slev+n; n=param2; fear will only be applied if playerlevel+howllevel+param2>monster level)
+ P0 ?# u- \  ]2 z1 R& a* ^(param3=distance to retreat; seems to be deprecated)
! m$ m( r$ s% I4 H(param4=distance per level; seems to be deprecated)
* [4 O' T9 B3 p& j(param5=time to retreat; number of frames that target will have the fear state, at level 1; state seems to last forever if set to 0): }7 \9 T5 q! f; }; S+ H
(param6=time per level; number of additional fear state frames per level past level 1; state seems to last forever if set to 0)$ N% B; _3 v1 |1 [0 G3 p

8 _# T- H1 H9 {
7 \6 n4 J( t7 [) b( m0 r9 G: K& [3 q[spidergoo] Missile applies skills.txt auratargetstate and aurastats1-6, but the aurastats only seem to be applied if you apply the state twice in a row. State duration is based on calc4. Aurafilter does not seem to restrict its application. Seems to hit only enemies, unless collidefriend=1, then it will apply to both allies and enemies. Note that any calculations used for the aurastats will reference the TARGET'S values and not the user's; the only exception is for references to the skill that produces the missile itself.
% W0 c  g6 q) R4 l  N, m; ?(psrvhitfunc=16,collidefriend=)
6 M( A# r0 X( A* }. w. c(skills.txt: auratargetstate,aurastat1-6)
" s* w5 G! E0 X* F& W(skills.txt: calc4=length of auratargetstate)
5 Q8 ^) n( f8 q$ \0 \1 k, I: m& ~+ k$ [# W
[shout][battleorders][battlecommand] Missile applies skills.txt auratargetstate to allies of the user. If collidefriend is not set to 1, then it doesn't seem to do anything. Unlike the battlecry and fingermagespider missile, this one references the USER'S stats and skill levels.1 s* N) C' A. L5 z- X
(psrvHitfunc=18,param2=increased velocity per level,collidefriend=1)
+ t7 e2 N. z! S( M! \(auratargetstate=applied state to target)! R& p) _* T" m  T8 t0 k
(auralencalc=length of state)4 O' N5 g* c, j9 [
(aurastat1-6=stats applied during the state)$ h& r. O) p5 X: x
" u2 r* k$ t& D- W- Y; T
[fingermagespider] Missile applies skills.txt auratargetstate and aurastats1-6, but the aurastats only seem to be applied if you apply the state twice in a row. Note that any calculations used for the aurastats will reference the TARGET'S values and not the user's; the only exception is for references to the skill that produces the missile itself.
! |5 h% ]; X; }% [! F* T) w1 ](psrvhitfunc=19)
3 Q4 q7 }' Y' V$ N  b(skills.txt: auratargetstate=applied state to target)8 ?; H* y+ x1 h6 n' [
(skills.txt: auralencalc=length of state): Z1 U) u7 k0 Y# M0 q0 O
(skills.txt: aurastat1-6=stats applied during the state; only seem to apply on the second application of the state)
$ L0 O9 ]" G7 z6 A4 N+ U
% p" Z6 k$ }/ w0 }5 `6 U[battlecry] Missile applies skills.txt auratargetstate and aurastats1-6 to those selected via aurafilter; always ignores allies. Note that any calculations used for the aurastats will reference the TARGET'S values and not the user's; the only exception is for references to the skill that produces the missile itself. Always pierces regardless of collidekill. Cannot deal damage.
0 e  d& q" ~, i" O) {8 r/ G(psrvHitfunc=21)# C" |& R# L7 N, s4 E
(skills.txt: aurafilter=controls target selection)
8 Z  d" \  K; Y" ?8 y, Q/ Q# z/ X(skills.txt: auratargetstate=applied state to target)$ [" K. b2 `2 v8 M7 E" A
(skills.txt: auralencalc=length of state)
$ e% o0 B5 x. B# \$ J. q0 J(skills.txt: aurastat1-6=stats applied during the state); |, X- }4 r# m8 U

4 s& T0 I" ^# m5 i$ K2 X% L7 b[rabiescontagion] {doesn't seem to do anything when not used by rabies}
- E; L. ]6 @' v7 \* l3 [' n4 ]5 ^(psrvhitfunc=53)
" B+ D: W4 ^: F% u' E
5 H8 l$ w( H( d  u+ |, ~0 J- w0 c[andycontrol0]; G* P, o, c: o
(pcltdofunc=29)
( @( b" e0 r; |3 c, j(cltparam1=firewall frequency; how many frames must pass for an instance of cltsubmissile2 to be produced)
' G' H1 I: |, U% i9 `(cltparam2=screen shake seconds; the number of seconds the screen will shake for starting after a seemingly pre-determined point in the missile's range; will continue shaking even after the missile runs out of range)
9 \1 Y0 i1 e2 U" Z(cltsubmissile1=; rapidly produced over the range, and move towards the player)
: N. Q3 i0 W  B9 N# d  F* ^(cltsubmissile2=controlled by cltparam1)
5 s) O2 ~1 ~$ Z  m% ^. |/ f(cltsubmissile3=; randomly spawns missiles in a distinctive pattern that starts outwards then goes inwards; seems to automatically collide unless the cltsubmissile3 uses pclthitfunc=19)
( v. @; [" \9 h1 \- s% S4 i  x/ Y8 G5 X
[icebreaksmall][icebreakmedium][icebreaklarge] Hardcoded. Allows ID=272/273/274 to produce the animation of IceBreakSmallMelt/IceBreakMediumMelt/IceBreakLargeMelt after running out of range.
' B( F$ y8 x4 ~. T(pclthitfunc=31)
6 d$ c9 y! n6 w+ r
: ^/ k, C' u6 B6 K, S; [  f[radamentdeath] Creates the graphical effects of Radament's death. Produces ID=348 (radamenthandofgod) for the graphics.1 [  D2 q* T0 p3 k. t
(pcltdofunc=32,psrvdofunc=19). }8 h3 S. v" o) z0 P
[radamenthandofgod] Creates the graphical effects of Radament's death. Produces numerous ID=349 (radamentholybolt) for the graphics. Does not seem to function unless created by a missile with pcltdofunc=32,psrvdofunc=19.8 ]4 Z- V  b$ V3 c0 P/ i
(pclthitfunc=37)
- e4 |5 b( h1 K+ @0 v% l2 X4 w" K; j$ ?7 o2 M; O0 \& e
[queendeathcenter] Creates the graphical effects of the Maggot Queen's death. Produces ID=354 (queendeathglob) for the graphics.
- m8 y  o( p% s2 g$ P( x2 E, i(pcltdofunc=35)$ z, o/ F/ A8 B5 c
[queendeathglob] Creates the graphical effects of the Maggot Queen's death. Randomly produces both ID=355 (queendeathsplat1) and ID=356 (queendeathsplat2) for the graphics.
! [# w6 q! q% }4 Z(pclthitfunc=39)7 c6 q9 Q  i7 `* L* z; p

$ G' R& l. U: j0 }  U$ Z[towerchestspawner] Spawns the gold from the Countess's chest (presumably only gold; maybe it references a specific treasureclass that can be modified but probably not). Amount of gold in each pile scales with area level, but doesn't seem to adjust with gold find.$ L* y+ U" I: u1 J
(psrvhitfunc=33)) z1 @! j4 A& g9 K
(param1=start delay; gold only starts being produced after this time runs out, in frames)
6 [( C) Z, S- t7 I: \. a  H(param2=spawn interval divisor; spawns slower the higher the number is)' X; y9 I+ ]; \& z, I
(param3=radius; the radius that gold will randomly drop within)7 O& R- t- J& M1 m1 y0 `! Y

  U$ ~$ \0 m* Q, ?( |' a! E2 D[nihlithak1] A missile that produces clthitsubmissile1 and clthitsubmissile2, allow a z-offset for clthitsubmissile2.) ^2 B6 r+ n4 T* N' ?! J
(pclthitfunc=60)6 o# p4 q. J+ o6 P# U
(cHitPar1=zoffset of missile 2; controls the z-offset of clthitsubmissile2)
, U. f/ D. }/ h0 o. }# d/ x+ r7 r. v- F2 j9 E. h/ n' n
[mephistodonotdraw] An incredibly unique cltside missile: it makes the user disappear, (the shadow remains if a player uses it; for monsters they entirely disappear), after the range runs out. This seems to last until you restart the game, even beyond death, even if you transform.
' `0 [) F' a- ~, {7 \) M7 c8 T(pclthitfunc=34), t5 F- Q+ c" r. i3 E: r( G4 j
(range=how many frames must pass until the user is disappeared)3 o9 y: s4 U6 P7 T
4 W7 \: {  \3 A: B" A; I
[] Missile that spawns a single, specific monster after expiring.
2 E" o; S. f8 p: C(psrvhitfunc=6)6 l+ g" F, e3 N& }7 g1 n( t
(s.HitPar1=monstats hcIdx; chooses the monster to spawn)( z9 R+ X+ q. H) g
(s.HitPar2={animmode?}; any value seems to work as long as it isn't blank)5 r3 X; O7 ~) a* w0 s7 d
9 x' F: K3 Y. X$ J9 K& h/ W0 S, G2 M
[Imp Spawn Monsters] Missile that spawns a monster after expiring, based on available monsters for the area in levels.txt. Rarity of the monster seems to have no affect on the results, and from monstats.txt: the monster will also spawn with partymin to partymax minion1/minion2; monster will not spawn if isSpawn=0.
4 s9 A  x, J: f3 t$ ]3 W1 m(psrvhitfunc=39)
5 Q' _% R. S. J9 X0 k/ k8 z3 t/ c+ q
[baal spawn monsters] Spawns a monster and clthitsubmissile1. When used by the player, seems to only create a lonely Skeleton (monstats.txt ID=0).
; ^# Y/ M  \/ }' c' l1 B(pclthitfunc=57, psrvhitfunc=54)
; e5 R0 [. l- {- x% n(chitpar1=radius; radius of clthitsubmissile1)  o' k+ F+ H, `4 i
(chitpar2=density; density of clthitsubmissile1): D6 c  j0 j1 u2 ?  i
/ P) n- H+ x( }0 \+ Z
[moltenboulderemerge] Missile that subreleases hitsubmissile1 in the same direction it is moving once and clthitsubmissile1 up to 5 times either in front or behind the missile, applying a bouncing effect to each subreleased clthitsubmissile1. w2 {; V4 f4 a" t# ?
(hit1,pclthitfunc=53,psrvhitfunc=48)! s1 R4 I0 F! A4 m: h
(cHitPar1=bounces {need to describe these chitpars still})8 o2 p2 R, a+ w1 n3 S5 _+ d& N! b
(cHitPar2=damping)
, y! {) K8 @/ S' _- O* P/ h# F! L(chitPar3=lob)4 i7 D" h. p# G! \1 U
(note: If you want it to spawn a single missile, minimize the range and set it to alwaysexplode=1; if you want it to spawn the maximum missiles, then use a piercing function like frozen orb's dofunc and make it collide with everything)9 t5 g* }+ e8 Y! o6 ?  p

9 F- l$ M% t8 u5 n! K- @* o[pantherpotorange] {???}' x2 l; S4 N0 `$ h2 b, d
(psrvhitfunc=24)
- d# Y& d4 l. G5 C) p7 \/ O) |* s  V% h. ^
[pantherpotgreen] Releases 8 instances of hitsubmissile1 and {unknown} instances of clthitsubmissile1 on collision.
. q" `/ K8 O& S; P(param1=poison length; {doesn't seem to do anything})1 d: I3 z% E  @" D9 H* ^
(pclthitfunc=28,psrvhitfunc=25)
: U- I& }5 e# s0 Z, W1 R7 K* S
4 }: k- g$ \) F4 K* C' c# \[healing vortex] A missile that heals anything it collides with." |9 t9 L. T, G+ @: @" K
(psrvhitfunc=43)
$ V: w3 H, I+ e: X8 |% O(mindam/maxdam=amount to heal)
6 D0 K8 j+ U* c/ Q8 ^$ X, X8 _. D: i" V9 u
[volcano debris 2] A missile that releases hitsubmissile1 to 3 and clthitsubmissile1 and 2.& j: ^8 T  u6 {" V* q' h) ~
(pclthitfunc=55,psrvhitfunc=51)
0 U3 l3 k$ K" ^; r3 F(hitsubmissile1=)
2 z& C9 A4 w1 G5 J/ j  ~(hitsubmissile2=)
: ]# J/ u# N) Z# e4 c/ |(hitsubmissile3=)
2 @/ T% L, r/ u% G: v$ N(clthitsubmissile1=)
& G( t* g# M: j. e! x2 u(clthitsubmissile2=)1 S  T- z/ T1 q

/ q$ W9 y8 e0 A3 B: k( f[] An unused missile function "HitMissileSkill" (thanks VV!). It triggers a defined srvdofunc. So you could, for example, produce a missile that triggers Amplify Damage. Very useful.
+ Z3 ~6 Q/ E( n* K1 \(psrvhitfunc=23)
, s- U. v7 s. X9 r& n(s.HitPar1=srvdofunc to apply)! q! m2 H5 [! d' U2 D- U

, Q$ Z3 c7 M0 C[explodingarrow] Produces all hitsubmissiles. Unknown if there is a clthitfunc that can produce all clthitsubmissiles.
* U/ q% {  {8 s3 P- R(psrvhitfunc=4)
# ^9 t3 v% d& ~$ K  A(hitsubmissile1=)5 L* D4 ~# L0 y; `- J
(hitsubmissile2=)2 k: a0 V' g. U
(hitsubmissile3=)
9 c% @4 X' ?/ u- i* h(hitsubmissile4=)5 i' H) |4 a9 U
( f: U. T2 }3 E2 A
[] An unused missile function "HitDoNova" (thanks VV!). It releases a number of hitsubmissile1/clthitsubmissile1. Seems like an inferior frozenorb nova.5 N' M2 s  P. S( y8 d' ]
(pclthitfunc=4,psrvhitfunc=5)8 ~6 z2 e4 v! u1 o
(s.hitpar1=64/x hitsubmissile1 to release in the nova)
2 v% F0 T# C3 o(chitpar1=64/x clthitsubmissile1 to release in the nova)
2 Z; v9 [1 i& Y6 y(hitsubmissile1,clthitsubmissile1=# depends on hitpar1)
: b6 \) C8 r# p! H$ x
# ~& @9 X' Z6 C4 ^2 D4 E[] An unused missile function "HitCreateMissileNoDmg" (thanks VV!). It releases hitsubmissile1, hitsubmissile2, hitsubmissile3 and hitsubmissile4 simultaneously. As the name states, it does not seem to do direct damage. Does not seem to have a related cltside missile, so it might be awkward to use.: s1 h& t/ F, m  R2 a' {
(psrvhitfunc=11)
+ ?3 n. [8 H- H; V2 f(s.hitpar1=if <1, it produces one of each missile; if >1, it produces two of each missile)& F1 E6 N7 z0 @
(hitsubmissile1=)
! D  k4 |9 `8 u$ L  B) m5 T(hitsubmissile2=)
& L/ I  b% [. i1 X5 a0 W$ n(hitsubmissile3=)
  c* @/ [# v. }1 [(hitsubmissile4=)
% m0 ^  U# r6 h: u4 o# V
6 d+ t; k3 v4 ][] An unused missile function "RadialStunDamage" (thanks VV!). Supposedly stuns, but it keeps causing crashes instead. Probably should not be used. {???}) R! ]* e) m5 k/ ]8 L
(psrvhitfunc=30)
% q( k2 m. ?* Y  e" l( M(s.hitpar1={???}; maybe the stun radius)
9 ]3 q9 d8 \2 _(s.hitpar2={???}; maybe the stun length)5 P8 l8 P5 S& [6 u; w+ A

: R, h7 d% b( `1 t& A2 B" r---/ u& Z5 f3 t3 N
4 I# t6 W: M6 ]9 S" f
[UNKNOWN/MIXED MISSILES], R! V+ P$ ~2 O& o0 o- ?1 R
, j2 }: s) U9 x1 ?  Z& @
[hfcontrol] {Produces a static-animation missile?} {???}
( q% }6 o; z7 c3 M3 `, f  t# E(pcltdofunc=38)" R% \2 ^8 o+ v5 s" T

& g. Q$ L9 n6 J: \& U[hffragment1] Produces hffragment2 after expiring.
) r, U4 G# J* U' I6 Z(pcltdofunc=39,pclthitfunc=42): Y; ]7 C8 P& l# Z* B6 }7 A0 ^2 }9 C

  v# B- J8 P" Q0 I! r! Q9 u2 z[hffragment2] Produces hffragment3 after expiring.
  x& P; ]0 H9 s% w" g9 q(pcltdofunc=39,pclthitfunc=43)3 Q2 l& C% j. ?

7 p; ]" C+ Q  a5 T; C[hffragment3] Does not move.
$ |4 X+ A1 K. ^& h(pcltdofunc=40)3 ?. V" S; W, C
3 g* L0 w  C- E
[hfspirit1] {???}
! ?8 i9 V; W4 n- F& n- j(pcltdofunc=41)/ G( ~& d' @8 @$ U  \  l
* A( A' k) E; O8 m& {/ B
[worldstone shake] {Doesn't seem to do anything, probably only functions in the Worldstone Chamber} {???}
* \  K6 ?4 I5 F; }(pcltdofunc=66, pclthitfunc=61)% x  U0 ~; V& ^) Z5 g+ A
' J/ P' t+ k* \+ R
[baalfx control] Spawns Tyrael.
& d: y! u2 o  [. F/ {(pcltdofunc=64, psrvdofunc=36, psrvhitfunc=57)
4 D% E0 t  \& ^# a' J# C+ w2 K  l3 J* `! [; M3 K
---
3 S5 @" S' l* ?( q6 Y! ]$ @2 ^; d" m. f9 F
[OTHER WAYS OF GENERATING MISSILES]
/ ]  y1 b  J: y: q9 w
9 e( A! U! F; KIn weapons.txt (as well as armor.txt and misc.txt, if you should add in the column), there is the "missiletype" column. This determines what missile is released when equipped and thrown by Throw, Left Hand Throw and Double Throw.
6 S$ G3 A) w$ Z% x% H
, ]+ V5 ?3 b' c; Y7 v6 u* Y1 bIn monstats.txt, there are the columns "MissA1", "MissA2", "MissS1", "MissS2", "MissS3", "MissS4", "MissC" and "MissSQ". See https://d2mods.info/forum/kb/viewarticle?a=360 for more information.
% Y7 i5 g, \$ T) J
6 |( f6 J6 \  A1 a: t! ~$ CIn monseq.txt, you can use event=2 or 4 to make a monster launch a missile or skill which produces a missile. See https://d2mods.info/forum/kb/viewarticle?a=395.9 m( |+ N. E4 u8 i# ^# ]4 a7 Q
神话战网出品,必出精品!
回复

使用道具 举报

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
 楼主| 发表于 2022-2-17 10:50:04 | 显示全部楼层
I was bored and decided to check out how a bunch of skills work. This is the result. Note that I purposely did not cover most skills involving srv/cltmissilea/b/c/d because that is in a separate guide I am working on; I chose to separate them since missile skills work very distinctly and there are a ton of them.4 F5 ^7 Y4 m  U6 I) e2 k- @
: ~  Y% [7 r, Q7 l( ^+ O, ]8 U
See here for the Guide to Missile Functions: https://d2mods.info/forum/viewtopic.php?f=4&t=67114
3 D; n2 L3 Z) F6 C, H1 ?3 X: L1 t. u: z4 Z/ |  F
This guide is quite lengthy, so I recommend using ctrl+F to find specific skills you are interested in, each entry begins with the name of skills that use the respective function(s).
* H1 T/ O1 p4 _) Q. Y6 X7 ~$ d
; u+ ]4 V: v; n  o/ |The only non-missile skills that aren't covered in this guide are: Cry Help, Diabprison, Submerge, Emerge, Self-Resurrect, DiabRun, Suck Blood (I did however hybridize it and found that it was a kicking skill which is bizarre, as described below), FetishAura, EvilHutSpawner, Swarm Move and Jump; these skills either seemed to do nothing when used by a player, or cause crashes.1 d" C4 O* Y* V( _; ~8 T  Y
# E; B# J% t) R4 t8 x
If you notice any errors, or any notable features given by skills that I missed, then please let me know!
) Z4 Y1 `( H0 F! T, m$ [$ {' C( h) D
Indicates the function is hardcoded, broken, has no known purpose or is not understood; M2 t) ~! b4 a/ I) y
Indicates the function works, but is either awkward or seems to be an inferior version of another function
% U) t) o* k9 T8 A* r' `% A5 U+ u% qIndicates the function works and is highly recommended for use; subsequent green-labeled entries are alternatives that might work just as well
& l9 S* P2 i- n+ p( K0 uIndicates the function works and has a unique behavior with no available alternatives
0 C& O( ~% h; @4 Y3 S: S! y; u
THANKS: Red Havoc for explaining a lot of monster functions (https://d2mods.info/forum/viewtopic.php?t=1073), Ogodei and LadyIsabelle for finding out how broken Shadow Warrior/Master are (https://d2mods.info/forum/viewtopic.php?t=66555) and Nefarius for his description of charge-ups (https://d2mods.info/forum/viewtopic.php?t=48854), the Amazon Basin Wiki for their detailed skill descriptions
; Y$ C% \  h+ L, v3 Y# n! V' t: H7 J& M. r7 q$ m" Q5 U/ z
EDIT:
3 n) r+ M: M+ R  I5 ZAdded Siege Beast Stomp.
: g9 u! \7 @. c( yFixed up Holy Freeze description.3 X, g) \1 W! U: @$ ~( |
Fixed Valkyrie and Shadow Warrior/Shadow Master descriptions which erronously stated that the item level override wasn't working: it works.
$ z& j. G) B! Y9 t1 ^; W; |(3/7/2021) Described Imp Teleport's unique functionality.' t' P) O3 s$ u0 V0 {0 j3 P
(4/6/2021) Added in a behavior of srvdofunc=30, which makes it non-functional against monsters with mWL=0 (thanks Riv!)
2 A% n/ ?# w" k/ e, S( B(4/16/2021) Corrected Energy Shield's description, it can actually make use of passivestats (thanks to UzurpatorWersja, creator of the EaseOfUse mod). Also added Blaze, since it is the only function that applies all stats
  _6 a, T6 V% S: C: r(4/25/2021) Described another requisite for Iron Golem memory
. i/ t2 E( i3 ](4/30/2021) Added information to golem and skeleton functions
. L4 A, c' a- J- [( O0 N(5/6/2021) Realized that Energy Shield and Blaze have the same func, so I put them together' w$ C$ Z, V% _( D( e8 H
(5/12/2021) Added clc1 to MagottDown; added Nest
* Y0 {+ t& A$ i+ A(5/13/2021) Updated MonTeleport
' A* [6 Q) O: t, v- ~2 y; E3 _5 u(5/14/2021) Corrected Mosquito7 p% m" }! m, F/ j) e* B/ j
(5/17/2021) Corrected RegurgitatorEat and MonCurseCast and Suck Blood* [. Q# \& c) }5 s
(5/18/2021) Added Psychic Hammer and Mind Blast. Re-organized and added colors. Described how you can make Telekinesis pick up anything
, B; `  R9 H6 z: \* Z0 V3 M(5/19/2021) Updated Charge to describe par1
$ k) M# @5 e8 ?& G! d(6/22/2021) Added some info to Resurrect.- p% L6 L0 ?6 @) @
(8/10/2021) Added the SPECIAL section, which as of now only contains srvdofunc=4.
2 g  F" b; M4 H( Q' B% w" d/ K(2/6/2022) Updated srvdofunc=65 to describe Cleansing's behavior. _3 A" O! h( W/ G* P
(2/14/2022) Added more to Whirlwind, particularly its buggy behaviors/ t& H. x, j  a. R3 j% G7 k0 B9 x
* l# Q+ f- z# W% a* ^$ q- e
---
+ o0 X+ Z" g3 d" [) ?[SPECIAL] Describes functions which do not belong in any other sections.
2 u# l3 v" o( j& y! q6 h[ATTACKS] This section describes attacking skills.2 |) {, s; k0 K) x  H1 T
[OTHER ATTACKS] This section describes unusual attack skills that use damage from shields or boots.. w5 h/ Z# j% G/ c
[SEQUENCE] This section describes skills that require sequences.: w' V2 V0 o9 k6 u8 `& T- l
[SPELLS] This section describes skills that carry out some unusual function that doesn't involve weapon damage, states nor sequences.5 H; X  \) a! S& p) s
[STATES] This section describes skills that aren't attacks but do apply states.
8 w8 ?; {' g( X  l[PETS] This section describes skills that use the summon and pet columns.
4 }; J' j9 U; p/ Q. h9 \[SUMMONS] This section describes skills that use the summon columns, but not the pet columns.4 I& u* h8 x1 [: j- R
[USEFUL CLTFUNCS]
4 ^1 j+ i. d4 R9 E% w3 S* Z4 V[GENERALIZED NON-FUNCTIONS] This section describes skill features that may seem as if they are unique to a function, but are in fact more generally applicable.- ]; r$ r1 [/ V; s& F: r& {

3 g9 R: g* B+ k6 O[SKILLS AS AURAS] An analysis of various skill functions when applied as auras (aura=1, periodic=1, perdelay=).
1 U" T3 {, Z  t/ g) P
7 Z2 @& Y/ f! {& O9 l--------------------------
1 Z& e" q" f( ~) |1 z3 D# }3 x4 I; R( u* C' D. L3 l8 R
[SPECIAL]
+ ~7 X+ I. K9 G- c# i) Q* i$ `0 K  ]# f
[Fire Arrow][Cold Arrow][Multiple Shot][Poison Javelin][Exploding Arrow][Lightning Bolt][Ice Arrow][Guided Arrow][Plague Javelin][Immolation Arrow][Freezing Arrow][Lightning Fury] Makes it so the skill only works properly if the equipped weapon has settings in itemtypes.txt: throwable=1 or shoots=(an itemcode; in vanilla this is bowq or xboq). If throwable=1, then item_throw_mindamage and item_throw_maxdamage are used for SrcDam. If shoots is set, then mindamage and maxdamage (for one-handed weapons) or secondary_mindamage and secondary_maxdamage (for two-handed weapons) are used. If both throwable and shoots are used, then it will use throw damage.
4 t; l% k. K' R- N(srvstfunc=4)  n8 y( q8 f$ O, {

) S$ j; |" f" F; M. D[ATTACKS]) C6 A6 A! V4 h' f. Z

# C* d$ O8 ]9 g! W8 ?4 \' @& ~" y4 e0 Y+ b1 ?2 _( z+ G
[ATTACK] Hardcoded so that in ID=0, it is the only skill that allows the main-hand and off-hand weapon to be swapped on each use. When in any other ID, this skill only attacks with the main-hand. Note that Attack is special in that it ALWAYS rolls chance to cast on attack, even if it misses or is blocked, even if you aren't using it in ID=0." m( ~) ^" f$ J9 l% d1 i& z* Z& b
(srvdofunc=1)+ q/ g/ n) m; d& U
(SrcDam=)$ N3 n7 \/ T% a! D% b& ]0 c% y' T
(note: in vanilla, it also uses srvstfunc=1, cltstfunc=1, cltdofunc=1 but these do not seem to do anything)
5 m) m1 a: v  F5 U# k7 e! n(note: for dual wielding, you can even remove srvdofunc=1 if it is from ID=0 and it'll still attack, but it won't swap hands)
2 \! M! Y. C: w) B3 ~" r. }: l4 U. u3 N" j6 g$ q# y

; @$ m  X  K5 O- v8 O7 X  h[KICK] Always "hits" and always rolls chance to cast on attack and on striking despite not dealing any damage (descdam=2, the default, wrongly thinks it gains damage). It also always applies normal knockback. Seems to be required in ID=1 for kicking objects to work properly.9 b% p0 r" \% w' H# T% L. D' {
(srvstfunc=2,srvdofunc=2)! m: p/ J- Q7 o& h/ M
(aurastate=,auratargetstate=,auralencalc=,aurastat1-6=; applies aurastate to the player while the animation is playing, and applies the auratargetstate to the hit target for as long as auralencalc, uses all aurastats; hitting the target again causes the state to toggle off)/ M$ q  |" x& j$ A  ^3 d6 R
(interrupt=1; if this is not set, then it will interrupt itself on subsequent uses, causing major desync issues)8 V  E3 x3 Z2 E+ f
(note: in vanilla, it uses cltstfunc=0, cltdofunc=0, but I do not notice any differences, and I do not even think these are valid func IDs)
1 |6 L. B! L: {! I* v6 Y7 E5 ?! i0 D- y* B# f! @# @& u0 J4 V
6 @- s; S1 w3 v: P" ^: Y2 X
[THROW] Releases the missile assigned in weapons.txt in the direction you click. Hardcoded such that Throwing Mastery stats will not apply unless the skill is ID=2.6 p1 G) \4 V% V/ j, w  o# T
(srvdofunc=3,cltdofunc=2): }7 m2 q4 J" G, h
(note: in vanilla, it has srvstfunc=65,cltstfunc=2, but these do not seem to do anything)
/ e- P( ^* F, e$ G* L$ w) |2 K- ]
+ `$ Q& \7 f( s* n  B& e" W
: J! ~! e- l4 e# d0 b[LEFT HAND THROW] Releases the missile assigned in weapons.txt in the direction you click of a throwing weapon, but only if you are dual-wielding throwing weapons (trying to use this function when you are not dual-wielding will cause a crash). Hardcoded such that Throwing Mastery stats will not apply unless the skill is ID=3.0 `+ T3 e; t" N" j3 \" n3 d
(srvdofunc=5,cltdofunc=2)( N5 j, r/ F$ D0 w
(weapsel=1; otherwise will throw your main-hand weapon)# N8 g9 X) b6 L+ R7 m' ?8 `( V
(note: in vanilla, it has srvstfunc=65,cltstfunc=2, but these do not seem to do anything)
4 n& y# U9 h3 U$ A; M- \2 Q4 K! @! `" q; i! ]; _

7 \, p6 C2 Y9 V2 C, R8 Y2 `4 v; v[Power Strike] Attack a target and add damage, and apply states to self and target. Note that tohit,levtohit,tohitcalc do NOT work despite the vanilla skill thinking they do.
+ O- ^- f7 f7 Z3 L4 I* r( d(srvstfunc=6,srvdofunc=2)
; d+ H4 s* w( {$ S& u(aurastate=,auratargetstate=,auralencalc=,aurastat1-6=; applies aurastate to the player while the animation is playing, and applies the auratargetstate to a target within melee range for as long as auralencalc, uses all aurastats; hitting the target again causes the state to toggle off), I( q( a' g1 h3 |. ?  [
(range=h2h; recommended but not required)
/ U# \% h: m, i% C. m. s4 l1 M% T(clc1=damagepercent added to each hit)
! w/ g. }( w. q3 z(clc4=damage converted to etype; multiplies damage by every % over 100%), r1 t) t8 |; G6 v1 R4 L) h
(srcdam=,etype,emin/emax,elen)) G% F7 _8 M; Z  V2 G. U' p# c3 s

9 M8 j+ Z; a+ [[Impale] Attack a target in melee range and modify your weapon if you successfully hit. Can apply a state to both the player and target. For non-stacked weapons, this skill can increase or decrease the durability. For stacked weapons, this skill will always reduce stack size by 1 regardless of clc3.1 u8 q3 z5 x# I0 i
(srvstfunc=7,srvdofunc=2)
' A( G/ q0 t- Z  f" ?(aurastate=,auratargetstate=,auralencalc=,aurastat1-6=; applies aurastate to the player while the animation is playing, and applies the auratargetstate to a target within melee range for as long as auralencalc, uses all aurastats; hitting the target again causes the state to toggle off)6 I4 W" m/ B& |' d- Y9 [9 U! k
(range=h2h; not required but recommended)
# k4 z! `8 Y1 O8 N(clc1=damagepercent added to each hit)1 I, O: x/ U7 C$ N$ a. ~( e  }5 h
(clc2=chance to modify durability of your weapon)! C: ?! z! ]- ]$ z
(clc3=amount of durability to add or subtract to your weapon; positive numbers reduce durability, negative numbers increase durability; added durability can go over maxdurability; does not affect stacked weapons)
3 H6 u& e) {; [; n; E' C: @(clc4=damage converted to etype; multiplies damage by every % over 100%)$ w& _( V- p" V) B' o; e+ P2 [
(tohit,levtohit,tohitcalc)
3 J8 C9 x( J* u) k. N, t- f- y(srcdam=,etype=,emin/emax,elen)
; p  v9 q! a- c8 d- x6 I5 A(NOTE: this skill ignores stats that double damage, like deadly strike and critical strike): U; D- ]+ `$ ?" ]3 j
' k5 c- |, E. W. e+ Q2 |

8 V2 N, U0 {- d: G. [! x- I, c( G[Charged Strike] Attack that releases zig-zagging missiles.1 U$ h& s$ p4 z$ Z
(srvstfunc=6,srvdofunc=11,cltdofunc=19), G2 s( @% r' \6 f* q% B* p: g' S
(range=h2h; not required but recommended)
" d; F; N; P$ |& x. j' T5 e(srv/cltmissilea=; released in a zig-zag)! K# q" s" @7 A% N& P+ z  x
(clc1=number of srv/cltmissilea to release)
4 \) x  }3 Q; }0 A: q$ @) i(clc4=damage converted to etype; multiplies damage by every % over 100%)# D1 o/ V6 R2 P8 D7 A3 R
(srcdam=,etype=,emin/emax,elen)3 B: `* O  t) D
. {8 a% P' P2 H
- l; z5 o% g- `
[Lightning Strike] Attack that releases a chaining missile. Adds lightning damage to attacks and converts attack damage to an element of choice, making it the only skill able to do multielemental (lightning + a second, converted element) damage without using the stat columns.
9 p+ G7 H# w/ D7 r9 h0 {: S(srvstfunc=10,srvdofunc=14,cltdofunc=22)
8 ]2 n8 P* @$ M- |5 q& z9 _: I(clc1=radius to seek targets)- I7 ^' P5 k5 a0 y9 I
(clc2=number of targets to hit)
+ D0 Z+ t& m5 I1 A(clc4=damage converted to etype; seems to cap at around 255%)
  F# T: W! t- p9 n(etype=,emin/max=; regardless of the etype it will be added to your attack as lightning damage)
0 S& v3 U: i+ E9 o
  u+ i; w9 o! `, f% b! A/ Q0 c" U7 v, u$ ?# g
[Fend] Unlike most vanilla sequenced skills, this one works fine with any anim, sequence or not, it seems to automatically go into a sequence after the first anim is finished. Attacks additional targets around you automatically, up to once each, repeating the same anim each time for each attack.8 U  M. P1 I" M! ?: s9 _
(srvstfunc=9,srvdofunc=13,cltstfunc=14,cltdofunc=21)
, X. O  }0 x# G' M6 @7 p; A0 A, D4 ~(range=h2h; not required but recommended)+ J8 [  b" p% n' j; u5 D0 D/ c
(anim=; anything should work well, including sequences)! f) p+ O/ q( X8 \0 C& D6 \
(clc1=number of targets within melee range to hit once each)& k2 |) l& A2 k
(clc2=damagepercent added to each hit)& f  i9 `; R; W% Y2 C8 u- y
(clc4=damage converted to elem; multiplies damage by every % over 100%)
; _1 b1 j: J4 G3 u6 s(par2=frame rollback; modifies sequence speed, oddly seems like sometimes a lower value is faster and sometimes a higher value is faster, depending on the weapon and anim)
- L& M$ W, \( m0 m6 ?; D6 u+ C+ G(tohit,levtohit,tohitcalc)
7 M/ _2 ^$ ^7 C* H(srcdam=,etype=,emin/emax,elen). ?  g0 p' D( j+ I4 i) {+ H
; \2 m2 b# @6 T
3 z6 m4 c$ j/ }
[Poison Dagger] A seemingly redundant attack skill, especially given that it requires both srvstfunc and srvdofunc to be able to do anything (although you can create working hybrids with other skills).9 a& k. S: f4 k. e
(srvstfunc=16,srvdofunc=32)2 c/ h8 t6 F! g4 {( ]9 \: s5 ^
(range=h2h; not required but recommended)
/ J, f9 q, _. ?(clc1=damagepercent added to each hit)+ f7 |3 H6 S! D3 u: y
(clc4=damage converted to elem; multiplies damage by every % over 100%)
1 z* |2 }7 B6 G* I' j0 `! N(tohit,levtohit,tohitcalc)
' d* ?8 @/ T. p6 c, T8 ](srcdam=,etype=,emin/emax,elen)! A- k1 a2 Y) a7 S: M

2 \4 G9 k- m- U6 I' I
7 R) q( ?; G, U: ^[Sacrifice] A fairly varied attack that gets flags and all of the usual columns. Does not apply damage doubling, nor damage to undead/demons.- }# l5 H$ }% P: S, d
(srvstfunc=29,srvdofunc=64)# @1 g+ s/ `0 \0 _! \( Z1 L
(range=h2h; not required but recommended)- G. G5 L! Y( {8 S
(clc1=damagepercent added to each hit)4 A, u4 h+ F. k$ j+ H
(clc2=percent of physical damage to deal to self)
1 w4 Z: W7 Z8 @- o! @( m(clc4=damage converted to elem; multiplies damage by every % over 100%)9 T( f( m* @. t
(tohit,levtohit,tohitcalc)4 M! d" N: V" q% f# V" L
(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)" }8 }" Y  w) o8 N1 ?0 h& E
(srcdam=,etype=,emin/emax,elen); R% ?6 t& w" g; _# d) G$ M7 P
(note: in vanilla, it has cltdofunc=34, which allows you to release cltmissilea on each attack, but it isn't necessary for the skill to animate properly)
- o, T  L8 E' }& o; u
# n- _. ]% H, M% x0 Y+ v* S2 R
/ k6 \! ^! G- f' }& q( J5 m; B1 s. o8 W[Zeal][Fury] Releases a normal hit, followed by more hits that can be sped up.
, B" |) [/ W+ z) V7 H$ q(srvstfunc=37,srvdofunc=13,cltstfunc=53,cltdofunc=21)7 u  V+ p( Y1 Y+ O! j' A
(range=h2h; not required but recommended)$ W6 d' v* q5 Y3 W
(clc1=number of hits). T/ j" }0 S  `8 I. [4 B3 X
(clc2=damagepercent added to each hit); H% i, S* c( \8 t  O$ d/ U
(clc4=damage converted to elem; multiplies damage by every % over 100%)
( g: u, x% b2 p: V' d  e" g(param2=frame rollback; modifies the speed of the hits beyond the first)2 y) E5 E8 N, f' r: N% H
(tohit,levtohit,tohitcalc)
) I, @4 w  l: @7 B; c" O(srcdam=,etype=,emin/emax,elen)* f" M1 ^8 ~, r* a7 k. N

0 U# y; p: c5 X: y- `+ p2 G; ^6 e. K
; b2 g7 {$ P' J7 D1 }. L. `[Charge][SerpentCharge] Moves the user toward the selected point with a par1-controlled movement speed changer, surprisingly does not require a sequence. Always attempts to cause knockback and applies the bash overlay effect.
% X( T5 B! M+ s  ]. w+ V) K! t(srvstfunc=31,srvdofunc=67,cltdofunc=37)- t8 w( Z) k, i( _5 g0 C, f! ?
(clc1=damagepercent added to each hit)
$ I# A0 v: ~' n/ x8 y- r) K% Z(clc4=damage converted to elem; multiplies damage by every % over 100%)
% c: [& {0 i4 o0 P7 h  N: C(par1=percent increase in velocity; does not use the actual stat velocitypercent, but is additive with it; negative values work, which can allow for moonwalking; if modifier cancels out total speed charging will occur immediately, which lets you release srv/cltmissiles every frame)
( b$ o, R7 B* U. x, x(tohit,levtohit,tohitcalc)1 w! {6 |; H( F% t4 W, W6 _
(srcdam=,etype=,emin/emax,elen)
- _, }) S: ]. s3 h: u(note: cltstfunc=25 is used in vanilla, but does not seem to be necessary)
3 n4 z" U! @! ^; S* Q' A8 V
3 ?* t' b1 O( W; a. v4 {( g5 q+ ^/ G: b
[Vengeance] An attack that gets most features, along with added additional fire/cold/lightning damage. Notably, it is one of the few attacks that does not allow for damage conversion.1 f. ^( V/ K4 e+ k
(srvstfunc=35,srvdofunc=2)- Q% ?+ m. A: @) @
(aurastate=,auratargetstate=,aurastat1-6=; applies aurastate to the player while the animation is playing, and applies the auratargetstate to the hit target for as long as auralencalc, uses all aurastats; hitting the target again causes the state to toggle off)
3 h8 H7 \* h4 L4 g0 [$ a9 B# |(range=h2h; not required but recommended)' e5 x% S  |' y
(clc1=percent of base damage to add as additional fire damage)
" X/ |) d; _+ q; e/ P6 X. _- I(clc2=percent of base damage to add as additional cold damage)
# Z! v* `  t4 Y( A6 \/ S7 U' z(clc3=percent of base damage to add as additional lightning damage)- u; D4 D& F' u7 N" H
(tohit,levtohit,tohitcalc)( B7 {2 B5 D7 b
(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)
8 g! a2 ?  C* S: G2 H, s(srcdam=,etype=,emin/emax,elen)! k/ l, M( c: s9 `# a: L" u1 M- V
: @, X" [' j7 q& ?

5 K. R; G0 s) _1 M[Conversion] An attack that has a chance to convert monsters. Unfortunately, cannot apply aurastats to the converted monster.
. f  u& `- }! L(srvstfunc=32,srvdofunc=79)
) p7 D. k: _8 ~1 ^(aurastate=,auratargetstate=,auralencalc=,aurastat1-6=; applies aurastate to the player while the animation is playing, and applies the auratargetstate to a target within melee range for as long as auralencalc; note that the aurastats only apply to the player, not to monsters even if converted)
9 q9 G+ [" E; [(range=h2h; not required but recommended)
. R: Q. \" t- Q8 n. A(clc1=chance to convert a monster for as long as auralencalc)' L5 m2 ~5 x, r! x+ l- d
(clc4=damage converted to elem; multiplies damage by every % over 100%), |; j, _; O+ t0 p  r  F
(tohit,levtohit,tohitcalc)
6 h. p$ V! z  G(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)
8 [6 i. ^3 p) O/ \(srcdam=,etype=,emin/emax,elen)$ L# q& r5 E! |: o' H. D4 g

! Q6 y* d( n4 o& [2 K, e5 i, B- D9 T/ P) f
[Bash][Stun][Concentrate] An attack that does almost everything, including states, full clcs (damage%, drain damage, speed and conversion), elemental damage/length, hit chance and resultflags/hitflags/hitclass. This is one of the ultimate plain-attack functions., P$ e. z: N5 n& h8 U
(srvstfunc=32,srvdofunc=2)4 e" `3 ^8 l  |
(aurastate=,auratargetstate=,aurastat1-6=; applies aurastate to the player while the animation is playing, and applies the auratargetstate to the hit target for as long as auralencalc, uses all aurastats; hitting the target again causes the state to toggle off)7 e3 s" @6 {) q4 z" |% [7 O1 d& v$ j( ^
(range=h2h; not required but recommended)3 Q+ }( t. o; ], t0 T+ z  T& o
(clc1=damagepercent added to each hit)  O+ @% ]( [( V# q: b( \2 M
(clc2=drain damage to add to each hit; this damage only counts towards life/mana steal and is only reduced by drain resistance)2 P& P" T1 l$ ^
(clc3=attack rate bonus; works very unusually since it doesn't actually change the displayed animation; lower values are slower, higher values are faster; it seems like it can be slowed enough such that you won't ever hit, and can be sped up enough that your subsequent attacks will be slightly faster, but only barely; not very useful unless someone finds out cltfuncs that make it not desync)5 b* L8 X% i4 s9 C4 `
(clc4=damage converted to elem; multiplies damage by every % over 100%)( q8 p: X3 z/ A9 o
(tohit,levtohit,tohitcalc)
, U9 _: B9 x8 q3 n8 h2 P(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)/ H% ^7 F- g1 ~, Z( |
(srcdam=,etype=,emin/emax,elen)
' z; ?& d9 c: {0 A; i0 D  R. X) C# W. a5 ]0 V* {  k7 t5 i
% I  _) b5 `, i
[Double Swing] An attack that can increase attack rate, surprisingly does not require a sequence, so you can use it with a single weapon. Does not actually require you to dual wield.
$ f8 s7 C+ {! |+ [% S5 U(srvdofunc=70,cltstfunc=27; cltdofunc=39 should only be used if you are dual wielding, I think it controls the double hitting sound and maybe some other dual wielding stuff)
$ n  m" r* d, [) x# A* K(range=h2h; not required but recommended)0 m2 X7 q, N* W" j, o% b- _2 }
(aurastate=,aurastat1-6=; applies aurastate to the player while the animation is playing, uses all aurastats)
8 ~$ i. u. v$ y6 Q8 _(cltcalc1=cltside attack rate bonus; probably should set this to reference clc3)2 L/ t; b3 l. k, P
(clc1=damagepercent added to each hit). u! ^+ j& c% \8 R/ b4 {# C' F  W
(clc3=srvside attack rate bonus; determines how much faster you actually attack; doesn't work well with certain animations so be cautious as to which weapons/anims you use and allow)5 A& n) B" G: F2 N2 e9 D
(clc4=damage converted to elem; multiplies damage by every % over 100%)( P' l4 N7 Z( k: K3 g. o
(tohit,levtohit,tohitcalc)- K5 P+ B" \( W+ r0 C: _
(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)
/ E0 X  i( y8 X+ ](srcdam=,etype=,emin/emax,elen): I( j7 c8 Y- z2 Q9 v& V
* W( O9 A1 p5 E& Y) ]7 E
& h% t" A: X2 g3 V% L2 y3 c
[Frenzy] Attack that activates a auralencalc controlled state on the second attack in a row, does not actually require two weapons, nor does it require a sequence. The aurastat values of the state can scale with the number of hits if using dm/ln/lvl, with each hit setting the stat to the max value of that given level (so the first hit is level 1, the second is level 2, etc).7 A3 z$ o& c$ b
(srvdofunc=9; cltdofunc=39 should only be used if dual wielding)
& [0 L! @# Z$ S& J4 g2 E1 W(range=h2h; not required but recommended)3 q1 u6 F8 b: ^  d, P8 O3 A  ^1 Z
(aurastate=,auralencalc,aurastat1-6=; applies aurastate to the player for as long as auralencalc, uses all aurastats; for aurastat clcs, lvl is equivalent to the number of hits beyond the first)
5 L8 Z! r# c$ C' e! m(clc1=damagepercent added to each hit)
1 ^) ]6 I4 h' O6 N  p5 k(clc4=damage converted to elem; multiplies damage by every % over 100%)
1 h( B1 X4 j- a1 ?. [(tohit,levtohit,tohitcalc)
6 I) x8 g! ^3 W2 q* J& I(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)
4 W8 z$ i7 V8 s* O(srcdam=,etype=,emin/emax,elen)
! Z/ \/ q8 }: u1 l1 }
$ v( m5 K) X8 j, l! w$ E& i[monfrenzy][BloodLordFrenzy] Attack that activates an auralencalc controlled state on the first attack. Aurastat value of dm/ln/lvl scales with number of hits, with each hit being equivalent to an additional level. Basically, the same as Frenzy but only requiring a single hit to activate the aurastate instead of two. This skill also doesn't get elemental conversion.2 I8 O: ]& |/ n
(srvdofunc=109)
' y( x% }: U2 n! L# F(range=h2h; not required but recommended)& ?( E8 A$ |2 h( Y' i4 Y
(aurastate=,auralencalc,aurastat1-6=; applies aurastate to the player for as long as auralencalc, uses all aurastats; for aurastat clcs, lvl is equivalent to the number of hits beyond the first)
* o  }0 Q2 o4 K(clc2=damagepercent added to each hit)( H. @, R6 o" j! z9 {
(tohit,levtohit,tohitcalc)8 h( |+ M8 O' l6 H0 U
(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)
8 r' Y4 y; o9 Y* }( P(srcdam=,etype=,emin/emax,elen)/ m3 Y6 C. `: z; r9 f4 S+ Y6 Q5 v
(NOTE: vanilla monfrenzy uses srvstfunc=64, but this doesn't seem to do anything; vanilla bloodlordfrenzy uses srvstfunc=37 but I didn't bother checking if it does anything relevant to non-bloodlords)+ U" t/ E% u. ]2 g& w
8 C* D+ }2 }+ Q+ J
+ N, R. |0 B7 m9 d
[Berserk] An attack that can apply a state to self and the enemy for set, independent durations. Also applies most other features, including elemtype/len, resultflags/hitflags/hitclass, toht and a few clcs to play with.
+ H* _1 K( `8 S7 ?( |! j, w(srvstfunc=39,srvdofunc=2)/ w4 c7 Z) M6 l2 y
(aurastate=,auratargetstate=,auralencalc=,aurastat1-6=; applies aurastate to the player for as long as calc2, and applies the auratargetstate to the hit target for as long as auralencalc, uses all aurastats; hitting the target again causes the state to toggle off)
, n7 Y" Y# D0 J' o( S(range=h2h; not required but recommended)4 Y0 j+ o" o2 S( Z8 Z$ K. T
(clc1=damagepercent added to each hit)
/ \7 H' k  e# R: [5 ?$ P(clc2=duration of aurastate on user when attacking in melee range)+ \9 z/ _5 q; k- l8 _. m$ I
(clc4=damage converted to elem; multiplies damage by every % over 100%), ^& f* V5 [0 A' `+ y% ~
(tohit,levtohit,tohitcalc)
9 }# G) N* b! t- [/ T(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)) G4 \  {6 M, f$ ?' r6 j5 |
(srcdam=,etype=,emin/emax,elen)! I3 Q& f/ @  U" V( M# j8 g

! ~% ^* B1 X9 `% H% y- J
: ]1 l3 Q6 d; q0 x[Feral Rage][Maul] An attack that gives the user a state that can accumulate aurastat with subsequent hits.) r) L' Z5 E+ n. T- h  P5 L3 M
(srvstfunc=56,srvdofunc=120)
2 @) d7 ^( Y$ t(range=h2h; not required but recommended)1 J6 M* E# s; n" E( ]
(aurastate=,auralencalc,aurastat1-6=; applies aurastate to the player for as long as auralencalc, uses all aurastats; for aurastat clcs, lvl is equivalent to the number of hits, up to a maximum of clc2)' n9 j; X1 _' }
(clc1=damagepercent added to each hit)
% h3 T. [5 Y' A- C(clc2=max lvl of charge; this sets it so that when you use lvl in any aurastat calculation, the lvl value will increase by 1 per attack until it hits this value)6 h7 p  y4 f+ q2 t+ W
(clc4=damage converted to elem; multiplies damage by every % over 100%)5 e3 F: n5 J. d8 I: \
(tohit,levtohit,tohitcalc)
. s0 D- P7 g' j. ]) e(srcdam=,etype=,emin/emax,elen)/ [1 y# M% Q, {
  j! S/ j% v5 c4 J
. J. n1 g3 \! V+ o( `6 N$ g
[Fists of Fire][Claws of Thunder][Blades of Ice] Allow you to build-up charges on each attack, which can be released to execute specific functions. Read https://d2mods.info/forum/viewtopic.php?t=48854 for a better explanation than I can give.
# e, R/ \; T6 w  r/ p4 E(srvdofunc=35)
. W1 r  j& K! x4 W3 }3 k, v% X$ t(srvprgfunc1/2/3,prgcalc1/2/3,prgdam,cltprgfunc1/2/3; prgfunc allows you to control which srv/clt functions to call upon when releasing respective charges, with prgcalc1/2/3 allowing executing some specific modifications to the skill function; prgdam has a few different results depending on the input, see the above linked guide)2 x" Z5 a: W4 u
(aurastate=,auralencalc,aurastat1=,aurastat2=; note that the aurastate must have pgsv=1 or it won't build up charges properly)# ]/ H" j0 v% ?  N) K; f' R5 ~
(range=h2h; not required but recommended)8 e( h5 M, {) P. `5 z
(progressive=1; otherwise it won't gain charges)" X4 B! B5 k- R7 j
(calc1=elem conversion%; converts physical damage to elemental on the hit which releases charges, conversion seems to cap at 100%; only occurs if under prgdam=4): p. Q; `/ M7 S+ ?+ n
(tohit,levtohit,tohitcalc)
* s- ~9 A$ Y( O2 H(srcdam=,etype=,emin/emax,elen; notably, emin/emax and elen are only released when the charges are released under prgdam 3 or 4)" u) j) k" ], Y
(NOTE: in vanilla, these skills use srvstfunc=23, but it doesn't seem to do anything important)3 [: d2 L1 V5 Y- S4 a! r+ t. s( X  z& f
2 v7 |  e( {/ f) [- m7 O

- R# m. U# ^$ w" S' D6 F# @# L[Tiger Strike][Cobra Strike][Phoenix Strike] I was unable to find any difference between these and the specific elemental charge-up functions. Notably, in vanilla these skills do not use prgstack, whereas the others do, but from what I can tell these can use prgstack by just setting it =1. If there is an actual difference in features, then I can't find it.) A" O( O" r0 _6 U
(srvdofunc=34)
3 s: c/ }! j/ d# _; A& M& F
$ [& b- ~5 h( @4 t# ^4 i3 Z5 d# L5 q/ m
[Dragon Claw] An attack that always acts as a finishing move; surprisingly, does not require finishing=1. Useful and versatile seeing as it has an open srvstfunc and is one of a few skills (one of two regular, weapon-based attacks; the other being Attack) that can act as a finishing move. Does not require a sequence despite using one normally.
0 t; r8 p& ?6 n7 a5 }(srvdofunc=46)  p  {% L+ o6 L' Y' M8 m4 W! s, N
(range=h2h; not required but recommended)# ]" Y6 K4 W- q0 n% C& v
(clc1=damagepercent added to each hit)
2 j3 B# D- |; M) |/ h: _2 o(clc4=damage converted to elem; multiplies damage by every % over 100%)
0 o5 ~$ R$ e" n5 V) }4 K! `4 V(tohit,levtohit,tohitcalc)6 \5 p, U" Y1 @( x
(srcdam=,etype=,emin/emax,elen)
; ~( Y, o+ S  E0 k% U(NOTE: vanilla dragon claw uses srvstfunc=25, but this doesn't seem to do anything)
% U3 K0 G6 A4 }( R8 J3 w7 x) R7 t6 v' K# N$ n- d
: S& k4 c' r0 k& M# G7 `& y, Y, A$ L
[Blade Shield] This skill is described in two different sections because its function massively changes based on how you configure it, and both the srvstfunc and srvdofunc have interesting capabilities. This section describes Blade Shield's srvdofunc, it is perhaps the most unique attack skill in the game. It deals area of effect damage, every hit of which to each monster can apply effects, so you can trigger ctc on attack or striking numerous times in a single use. It also gains mindam/maxdam, which no other non-kicking attack skills gain. Unfortunately, this attack has the same range constraints as the state-based Blade Shield, which makes it really awkward to use with any weapon with added melee range (the only vanilla item types that work nicely are daggers, wands, orbs, bows, crossbows and non-javelin throwing weapons). It doesn't seem to have any clcs, but you can easily add a state onto it since it does not require a srvstfunc which can apply damagepercent as a stat.
( x, p3 G8 n8 d% l8 \3 F(srvdofunc=54); m9 `/ x; G% [, Y4 X/ P+ |/ k
(range=h2h; not required but strongly recommended)% y" W4 f; r$ ^! e8 ~3 s
(tohit,levtohit,tohitcalc)
' q5 E7 x$ @+ @& ~, l5 S6 `(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects on each attack; by default, it uses 32/0/3; resultflag=32 prevents quite a few effects from being applied, like ctc on striking and crushing blow)9 \- }& G8 }, ^
(srcdam=,mindam/maxdam,etype=,emin/emax,elen; note that mindam/maxdam is increased by damagepercent, strength/dex when applicable, etc)
9 p3 \: ?4 m5 w1 ^
# n7 D. N  J. ^[Hunger]: @; P; d2 K& a5 c5 W! \
(srvdofunc=122)& U: p: |) b6 S- {, J# [$ ^5 e( ^
(clc1=a multiplier to physical damage that applies after everything else; can be positive or negative; so if you have 100 damage, 50% enhanced damage and -75% damage from hunger, you will deal 100*1.5*0.25=37.5 damage)4 d) V: W, t2 s& y
(clc2=lifesteal percent; negative values show leeching, but do not do anything)
/ c/ i# ]* k. C(clc3=manasteal percent; negative values show leeching, but do not do anything)0 N) y+ X  I, v$ P8 m9 s4 L. J
(tohit,levtohit,tohitcalc)
  G) h8 Z! s; X# Y(srcdam=,etype=,emin/emax,elen)# C' T( T, k+ V/ m$ @

  y- ~: j5 G2 N* t------+ d" O( S1 C* @: ^9 h2 v& l1 m

7 Q" G- ?/ |0 M[OTHER ATTACKS]3 l1 Y  t. F- I+ J0 B! \- o, m

& a5 A6 t: F  J( M3 Y& `
: n  }4 |! @4 c) s[Smite] Attacks with a shield; does nothing if you are not wielding a shield. Cannot miss; ignores hit chance and blocking, uses the damage of your shield. Ignores numerous properties that are usually applied to weapons (+damage, dmg% to a monster type, damage doubling, elemental damage, life/mana steal). Despite not adding elemental damage from items, it does add elemental damage from the elemental damage columns.! `; t4 o( n3 w
(srvdofunc=150)+ c8 A  M/ @3 Y7 I7 }4 b8 @
(range=h2h; not required but recommended)
$ Q7 }. Z8 S1 Z+ l(clc1=damagepercent added to each hit)
0 c# A% G: I' s, r) C  V(clc2=length of stun from each hit, in frames)' z% w$ T/ Y) M" O1 P/ c
(etype=,emin/emax,elen), D% k* J( l0 [. G! H
9 {4 s0 ]. U% j; v5 c  L5 P5 I

$ ~4 s6 ?5 L9 n' X2 e5 s0 h[Dragon Talon] Attacks with boots (meaning it can follow kicking rules, adding damage from str/dex, etc). Uniquely, kicking attacks make use of the mindam/maxdam (added physical damage) columns, which is particularly fortunate for Dragon Talon considering that the kick damage% is determined by param1/2, which do not accept calculations., O: c8 [* C: `1 N' |
(srvstfunc=24,srvdofunc=42,cltstfunc=6,cltdofunc=4)
4 k# y! U. N- S2 h% q6 e: s' s(range=h2h; not required but strongly recommended)
/ x0 |' y: Y. m! ]7 |, f(clc1=number of kicks per use)
& y) e+ L) \" x+ v" a$ A(clc2=knockback chance on the last kick, versus uniques)
1 n  X0 t* c3 L8 p(clc3=knockback chance on the last kick, versus bosses)& b/ h2 Z# X0 B  Y
(clc4=knockback chance on the last kick, versus players)2 e9 n4 Q: ?* j/ |
(param1=base percent kick damage; note that percent kick damage is multiplicative with percent damage when being applied to kick damage added by str/dex)0 w: n. @# N5 z0 R! G
(param2=additional percent kick damage per level)
/ k' K$ k. p: U1 G, x(tohit,levtohit,tohitcalc); T% q$ b5 c  ]/ e- e* t! L* T( c. R
(kick=1; without this, your attack will not gain kick damage from str/dex)
2 h6 B" [# ?" O5 c(mindam/maxdam,etype=,emin/emax,elen)2 n* y5 V  `- a+ V; t
) H  v0 B$ N/ p. \/ a- O

6 }, @* I$ Y, P7 s% C1 ?/ ?[Dragon Tail] Attacks with boots (meaning it can follow kicking rules, adding damage from str/dex, etc). Produces a fire explosion within aurarangecalc based on the amount of kick damage you deal to a target. Uniquely, kicking attacks make use of the mindam/maxdam (added physical damage) columns; in the context of Dragon Tail, this also massively boosts the fire explosion since the added mindam/maxdam counts as kick damage.: ~7 @" h6 Q) Y* J
(srvstfunc=27,srvdofunc=50; cltdofunc=7 only if you want to produce cltmissilea)
- Z# \* j. j4 b8 T7 b9 K(aurarangecalc=; radius of fire explosion)
& K* Y0 m% H- ?4 T(h2h; not required but recommended)
2 R! y2 K; q4 N" Q5 K) {8 X: R5 g(clc1=percent kick and fire explosion damage; note that percent kick damage is multiplicative with percent damage when being applied to kick damage added by str/dex)
+ W5 K+ W3 d3 e0 M4 {; e* V(tohit,levtohit,tohitcalc)8 e6 c, ]: F0 b' J* Y+ Q( N
(kick=1; without this, your attack will not gain kick damage from str/dex)
3 {/ S3 `0 {# ?4 z% ~0 k) _  t(mindam/maxdam,etype=,emin/emax,elen)
. Z/ c& P5 x: l: A; w1 J& `* I(NOTE: vanilla dragon tail uses cltstfunc=9, but it doesn't seem to do anything)
3 I) l; [$ D9 B6 K
% V  n( p% l! e4 y" ]2 F6 L* y7 F) g8 `1 t+ {8 y
[Suck Blood] This is a hybrid skill using Suck Blood and a common attack srvdofunc, srvdofunc=2; it could probably be used with other attack srvdofuncs. It ignores all added non-skill damage, but the skill's physical damage can be increased by +dmg% (but not by str/dex). What this skill does is act as an attack skill and appends life steal to each hit equivalent to percent damage. It's kind of like a kick skill that doesn't use boot damage.8 V+ _7 `8 [- s& H
(srvstfunc=60,srvdofunc=2)
/ _7 o8 M& X7 \4 L4 f- r(range=h2h; not required but recommended)
6 \0 V7 u$ ^; m6 K; i9 ~(aurastate=,auratargetstate=,aurastat1-6=; applies aurastate to the player while the animation is playing, and applies the auratargetstate to the hit target for as long as auralencalc, uses all aurastats; hitting the target again causes the state to toggle off)( R  i% \+ S& ~8 y( J- m/ r
(clc1=percent damage)/ O2 [4 s- ^* ?* ?7 v% n4 Y
(clc2=life leech%)7 o- F! S% o; w- U
(tohit,levtohit,tohitcalc)* |" R& e2 ]( A% P( @8 n; m
(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)2 L. S5 }# b2 Z5 H+ f$ O6 Y) ~
(kick=1; without this, your attack will not gain damage from str/dex, but you will gain access to mindam/maxdam columns)6 Q% `! z7 i- D1 i9 g, ]6 D9 A
(mindam/maxdam,etype=,emin/emax,elen)
  }4 N8 z: B' {+ B0 a% E(NOTE: in vanilla, suck blood uses srvdofunc=127, but this causes the game to crash, so I instead tried salvaging it with a different function)! Z4 G  Z; I* I% X
, |. D7 v) e6 V; x! j
: g% ~" n6 j0 I! @5 k
-----
3 S) ~8 X0 \- S' Y: l2 e* r
7 c2 B- F$ k" S  r[SEQUENCE]
% D. H. O" y2 c* w! N( q- ^" z' z' n0 O2 a/ R9 n* D) {, E  t
[Jab] Uses a sequence to release hits in melee range; if you do not use a sequence, then it will only hit according to normal animation rates. The sequences used work differently, seemingly sped up (when comparing Concentrate and Jab using Whirlwind sequence, Jab kills way faster).  Q; B- l' J2 l7 P- z8 I
(srvdofunc=7)3 X5 H0 G- \1 O' l+ K
(range=h2h; recommended but not required)
6 ]5 W: O% X. B5 ~% v5 s(anim=SQ or other,seqnum=; you can choose not to use SQ, but then you will lose most of the special features of this skill; the seqnum changes how this skill works, for example if you use whirlwind's then it will rapidly hit for as long as you hold down, if you use jab's then it will rapidly hit three times in a row)
. A( o9 v/ w7 q, T! u% V" m(clc1=damagepercent added to each hit)
6 _3 D4 \' N0 f3 ](clc4=damage converted to etype; multiplies damage by every % over 100%)
8 O4 x6 y. G; v1 H6 o8 h9 u3 i& I. ^(tohit,levtohit,tohitcalc)
1 a9 y2 ?0 r8 L- P(srcdam=,etype,emin/emax,elen)/ U0 d3 d/ L# C. W
(note: has srvstfunc=5 in vanilla, but it doesn't seem to be necessary)
  I. M* f. @2 R6 F9 Q3 ~  N% {' W; M8 T/ ]* ]/ A; Q
[Leap] Requires a sequence, but most sequences won't work and results are different for different characters. You can't make it release missiles without breaking it and there is no state attached to it. Not very useful for doing anything except an almost exact Leap clone.
' [) q5 ?. s2 ]% f: x4 ^(srvstfunc=40,srvdofunc=77,cltstfunc=29,cltdofunc=43)/ Y. P% x! U6 X6 T0 J3 t
(aurarangecalc=; leaping distance)
4 V! h# ?& A. z% @- T+ Q$ e/ ^(anim=SQ,seqnum=; only works properly with some sequences, and sequences that work for one character might not work for another)( }5 {( H% j1 x: x+ ~( _, @; y
(useattackrate=0; otherwise it will be jittery and messed up); M- }7 g8 ?* f1 c8 @4 l
(clc1=radius of knockback around landing point)
& p1 s8 {5 I* u# y# X0 U" W& m0 l; z$ N

( o& T' ~1 g& {$ F8 x[Leap Attack] Requires a sequence, but most sequences won't work and results are different for different characters. You can't make it release missiles without breaking it and there is no state attached to it. Not very useful for doing anything except an almost exact Leap Attack clone.3 M0 c7 H( j; R  K& `# y
(srvstfunc=41,srvdofunc=78,cltstfunc=30,cltdofunc=44)' j) K$ w3 o( p. H  z" B" m! j9 E. o
(anim=SQ,seqnum=; only works properly with some sequences, and sequences that work for one character might not work for another)3 T& J) q9 I& p  v
(useattackrate=0; otherwise it will be jittery and messed up)0 W. ~+ s  a9 n7 L$ h7 X( q5 V+ R
(clc1=damagepercent added to each hit)7 b. P. L/ u, u2 d
(clc4=damage converted to elem; multiplies damage by every % over 100%)/ L9 D* c: _% }) V* e8 F5 p9 U7 X
(tohit,levtohit,tohitcalc)% h! @; v! P- s+ ]6 p# V" b2 s& ?
(srcdam=,etype=,emin/emax,elen)
, e6 p4 B. \4 `$ E0 }9 c% e' p* C/ e! [" u9 t6 Q

4 C' m, h; ~: y[Whirlwind] A moving attack. Technically does not require a sequence, but is really awkward without one. Will not trigger chance to cast while animating.4 a& E6 g! B8 k4 J5 Q
&#8226;Attack speed (I think this also applies to range? hard to tell) is based entirely on the main-hand, the off-hand is irrelevant (so if a barb has a Grief PB and a 0% IAS Legendary Mallet, then he will hit 12.5 APS with the PB on the main-hand and 2.08 APS with the Legendary Mallet on the main-hand)
5 Q7 f( H" y) R&#8226;If dual-wielding with a usable weapon and a broken weapon, then the usable weapon will count for all attacks as if you were dual-wielding it twice (so if you have a Grief PB and a Broken Dagger, then your Grief PB will attack at 12.5 APS and the Broken Dagger at 0 APS)0 k; r# Z" [6 W; I9 K
&#8226;Two-handed swords use one-handed breakpoints, even when equipped with both hands (this seems to hold true even for non-barbs)
; M! a9 X5 F3 x/ n; @& ~6 ^4 U(srvstfunc=38,srvdofunc=76,cltstfunc=31,cltdofunc=45)$ d2 c7 S6 Z: C2 W5 L
(aurastate=,aurastat1-6=; applies aurastate to the player while the animation is playing, uses all aurastats)% Y5 C: Y( r$ U7 l
(anim=SQ,seqnum=; using non-SQ will cause it to be very slow and virtually unusable; usually you will want seqnum=11, the default, but some other seqs also work well enough)) i# m: E1 e; c0 Y5 V( Y( I6 x' Q2 `
(clc1=damagepercent added to each hit)' z( S0 j. R# D" l- V2 X, L. g/ a
(param3=attacks per tick; supposedly gives an additional chance to hit if it misses per attempt at an attack, although I didn't notice a difference in practice, might have very low limits which would make hard to confirm)& P& u" _/ d2 @  G5 b
(tohit,levtohit,tohitcalc)
0 Y& K( D& C- h- _; k(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)
8 g7 }3 h& D8 o(srcdam=,etype=,emin/emax,elen)5 ~4 g  w0 X  X: w( I

7 g& j1 m3 g$ P+ b2 @3 ?, K/ V5 \' B. r
[Dragon Flight] A target specified warp that only attacks if you use an attacking sequence. Attacks with boots (meaning it can follow kicking rules, adding damage from str/dex, etc). Kicking attacks make use of the mindam/maxdam (added physical damage) columns, which is particularly fortunate for Dragon Flight considering that the kick damage% is determined by param1/2, which do not accept calculations.
) _( H' ^$ i8 y# g" Q& U(srvdofunc=52)) p$ _4 q; P$ }! T
(aurarangecalc=; the radius from the user for selecting targets that it will warp and then attack)
* Q: U4 n% A1 A( U8 O& y. j(warp=1; otherwise will fade to black after each use)1 E6 D& J( S5 M: g
(anim=SQ or other,seqnum=; requires an attacking sequence if you want it to attack e.g. whirlwind or dragon flight sequence, if you only want it to teleport then any anim is fine)/ ?3 y6 \( X4 Y1 ~
(param1=base percent kick damage; note that percent kick damage is multiplicative with percent damage when being applied to kick damage added by str/dex)$ E3 @# R+ Z4 J' W
(param2=additional percent kick damage per level)) Z' j! i. j: x
(tohit,levtohit,tohitcalc)% J. L/ R4 I& R! U( S7 b4 P; w  A
(kick=1; without this, your attack will not gain kick damage from str/dex)
* Y' o" m8 C: r, w" B9 U(mindam/maxdam,etype=,emin/emax,elen): F4 Y. ]) D+ T  ~# Y
(NOTE: vanilla dragon flight also uses srvstfunc=12 and cltstfunc=5, but these do not seem to do anything)
2 X1 u3 U, F8 G" q. p% u
% D: k5 s9 u8 @/ |) y( ]0 V0 \; n: D: ?- r
[Fire Hit] An attack that should use a sequence (but doesn't have to, but you really should use a sequence). Most notably, it applies an aurastate while you are using a sequence and has access to most of the usual columns./ c& N; r! z9 q2 N7 e  d/ p8 R& G
(srvstfunc=42,srvdofunc=83)
. \0 n3 J4 {: d9 Q! j4 V7 {" E(aurastate=,aurastat1-6=; applies aurastate during the anim and maintains it until the user moves, uses all aurastats)! |, @4 J) R& {+ t
(range=h2h; not required but recommended)
* p2 H) t; v8 `. S5 v* a, X8 l* E(anim=SQ,seqnum=; strongly recommended to use a sequence, you technically can use a non-sequence, but it will cause the user to be broken until they move, but has the amusing side effect of keeping the aurastate active indefinitely)
1 d  N- o: J7 g+ u( g(clc1=damagepercent added to each hit)2 H+ Y& A# q. ?' n8 E! D5 g& t
(clc4=damage converted to elem; multiplies damage by every % over 100%)
! \4 C& h+ K0 [(tohit,levtohit,tohitcalc)
  }2 c! Q4 N8 y. v! j& A(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects): R3 J. w7 v" w  _9 Q. F  s/ Q+ f
(srcdam=,etype=,emin/emax,elen)  p1 L  _3 X2 N. s
( \9 J. }* o% c) c; e
[Mosquito] A melee damage spell. Technically does not require a sequence, but you want to use a sequence with it given that it allows a great amount of sequence customization. Deals a lot of damage types.  ~: o: `! O; M: x" l6 {. O+ \
(srvstfunc=55,srvdofunc=107; cltstfunc=42,cltdofunc=62 are only necessary if you are using a sequence and want it to do multiple loops)
2 M5 w- c& W+ l, `(clc1=min loops; minimum number of times to repeat a sequence if you are using a sequence)
8 j0 |7 {* i6 d- y(clc2=max loops; maximum number of times to repeat a sequence if you are using a sequence)4 d  R  @* s. c
(clc3=life gained; gains life based on the amount of physical damage the spell deals regardless of how much damage you actually deal to the enemy, this means it ignores physical resistance, it also ignores drain resistance; also allows for negative values to do the opposite)  j: i, B$ g. j1 ], z" |, |
(param1=reset loop frame; chooses the frame at which the sequence starts over, so you probably want to make sure your given sequence does not reset before the activation frame occurs)) Z. k3 t; f$ ?
(range=h2h; not required but recommended), t3 p( L( Z( N5 _
(mindam/maxdam,; value is dealt as physical damage and mana damage)
% d8 |6 D2 V' ?/ _(etype=,emin/emax,; value is dealt as physical damage and whatever element you set etype to)
: E8 f8 j( D' w$ j* p' c(elen=value is dealt as poison duration, doesn't seem to do poison damage unless you make the etype pois)5 E$ R& T5 N/ N( q

, c, h& {' [: P, o- J* i( r-----, o7 y6 r: F8 \4 v) F) S! B( b2 A

5 X, j' y" C8 R9 n[SPELLS]1 z+ g+ V  ^" I+ L6 z5 G. I
# |, C7 W$ {& T7 l2 w
[Static Field] Deals damage in a defined radius of a defined element.2 Z4 a+ U# _1 J# z" r
(srvdofunc=20)
( ~2 F/ ]3 \$ H(aurarangecalc=; radius of damage)
2 Y  a4 h: B) G- I(clc1=percent of current monster life removed, damage type is based on etype and can be resisted)3 F3 Z* p- g" Z% S1 X& d
(clc2={min damage}; supposedly does something, but I don't see any difference when messing with it)3 Q' m$ a4 L8 b3 y& q3 G0 k
(etype=,elen; uses etype for its damage and applies elen to monsters in radius)0 X& V3 _8 z2 M) E

7 @% p+ d" F6 d/ W$ _) L/ i& J* u% k5 u, i
[Telekinesis] Deals physical and/or elemental damage to a selected target, and also applying resultflags/hitflags/hitclass. Can pick up items that have one of the following itemtypes code (or an equiv that links to that code, which means you can make it pick up all items again just like in the old days): gold, xboq, bowq, poti, key, scro.
+ o  d& {' ?# D/ t+ r(srvdofunc=21)# ?$ g- ]! L5 i# h) Q/ B
(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects; by default it is set to 5/2/109, which gives a chance of knockback based on param2). j1 f  l/ g' _' @0 A
(mindam/maxdam,etype=,emin/emax,elen): _+ ~6 t: j5 R( J$ T! o
(note: the vanilla skill has srvstfunc=12, although this does not seem to do anything)1 h: l6 C; `7 ]; q4 ]! x
' n6 }* Z+ ]  M( v
[Psychic Hammer] Deals physical and/or elemental damage to a target. Has special knockback settings, allowing for control over chances against different types.
" e! ~( t# ~8 x: J; T(calc1=knockback% vs. monster; normal monsters only): N7 E- a1 X/ d
(calc2=knockback% vs. unique; champion & unique monsters only)* W: h4 g3 D3 ]2 H
(calc3=knockback% vs. boss; monsters with boss=1 only)& L( P4 h$ X1 \" T7 B3 x
(calc4=knockback% vs. player)
5 U+ O6 _% |* u5 i1 E/ k(mindam/maxdam,etype=,emin/emax,elen)2 [/ k0 _6 J/ X% i
! e0 u" c4 K+ U! ?; H8 Z% K. ]
[DiabCold] Damages the selected target and chills/freezes them for as long as elen.$ M4 L5 S6 K  I: x2 v$ P6 s
(srvdofunc=100)
) Z; S2 g3 v5 ~% k; `% B(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects)
9 `; z( h8 T0 R7 g6 |9 O& \(etype=,emin/emax,elen; regardless of etype, it will freeze/chill for as long as elen)+ e" g* v. R, O" H1 V
3 v! o2 @. [+ S) M2 U6 A" s, J) l  U
[Teleport] Immediately teleports the user to the clicked point.
& r  u7 ?7 @8 |3 f(srvdofunc=27)8 Q/ J; |6 z% G6 B7 V" i, y
(warp=1; not required, but without it you will fade from black after every use)
0 Z1 k: Z& _( D# H
1 W3 _. f8 ^5 J1 U( Q( I[monteleport][Teleport 2][Baal Teleport][Baal Clone Teleport] Like Teleport, but if you select a target it will warp you backwards.* \' Q4 J$ f% s# \8 Z
(srvdofunc=98)
4 Y) O5 ?0 d  a5 C8 P. q3 K3 l  }(warp=1; not required, but without it you will fade from black after every use)% A; ?) [% P& ?& g0 c. O) I
(NOTE: vanilla teleport 2 and baal teleport use cltstfunc=48,cltdofunc=73 which produce cltmissilea/b on start/end)
5 w  p& u. f  V5 D# [
1 e  l4 n* y$ o( V[Imp Teleport] Similar to Teleport, but it doesn't have any collision issues. If a bunch of monsters use this on a player, then the monsters will neatly stack up into a perfect pile.9 ?" W. ~6 K9 D& H! N; {; f
(srvdofunc=129)8 Q6 M/ k2 n# K; L/ I+ e; N1 `6 F
(warp=1; not required, but without it you will fade from black after every use)0 d1 Q5 t5 }6 t& J0 R' e
(NOTE: vanilla imp teleport uses cltstfunc=48,cltdofunc=74 which produce cltmissilea/b on start/end)
) P$ _5 t7 x! L' `
+ E- o/ |, o- \+ {1 q1 T8 p. P7 A; q6 h! [
[Find Potion] Consume a corpse for a chance to get a healing, mana or rejuvenation potion.
% ?" Y! b* w" h+ ?: ~' w(srvstfunc=69; cltdofunc=38 only if you want the corpse to release blood droplets)
( p8 r+ W. {, y# \(searchenemynear=1,selectproc=4,targetcorpse=1; this will allow it to select specific corpses, as well as nearby corpses)
% p8 V" ]5 o& n* ?9 G+ g7 l(clc1=chance for a consumed corpse to drop a potion)
* f  V+ H/ \$ }& Y7 [(param1=chance of getting a heart; probably doesn't do anything)
" n5 x* {% b8 J8 F& R8 L; m: l2 w(param2=chance of getting a healing potion; doesn't actually matter since this is the default selection and is overridden by the other two)
, Q3 B, ]4 t1 ^& U. ~(param3=chance of getting a mana potion; this takes priority over health and rejuvenation): r5 g$ t" N' ~$ [: Q9 K
(param4=chance of getting a rejuvenation potion; this takes priority over health)
: k( A# k$ O7 E! L: y8 N4 B# @(NOTE: vanilla find potion has srvstfunc=33,cltstfunc=26, but these do not seem to do anything)
* D+ j2 F, D% `' Y8 P
5 U7 l5 A8 e: ]. I[Find Item] Consume a corpse for a chance to drop its treasureclass a second time.
2 w$ D. q2 s* V$ [6 k(srvdofunc=72; cltdofunc=40 only if you want blood droplets after use)
/ g+ b: \4 q* i: b(searchenemynear=1,selectproc=5,targetcorpse=1; this will allow it to select specific corpses, as well as nearby corpses)
5 n7 K! ^  z! f% B! L5 @5 M(clc1=chance for a consumed corpse to re-drop items)/ d4 {: U) O  m( u" u# a& b* v  R7 Q
(param1/2/3/4=supposedly change minheart/maxheart/quality/magic item drop chance, but I saw no differences in my testing)
" d/ x1 N7 s. n& Q(NOTE: vanilla find item has srvstfunc=34 and cltstfunc=28, but these do not seem to do anything)5 Z0 G9 j. Y6 x" x0 j

0 P3 l& p4 p: W* W, M$ g9 H[Mind Blast] A radial explosion that can be limited via filters. Can convert targets.
9 m7 {) h, S. f(srvdofunc=51,cltdofunc=8; cltdofunc=8 is only necessary if you want cltmissilea/b to be released over the radius)9 {( T/ |$ |  K! D+ R! z, s
(aurafilter=makes it so only those filtered for are affected by the skill)
8 }. l6 L6 v0 ~(aurarangecalc=radius of effects)) H8 ~% K+ c. y& y
(par3=conversion length min; minimum conversion duration in frames, seems to convert for at least 1 frame at absolute minimum)7 j1 ~% I1 f; T% n3 u: u7 t
(par4=conversion length random range; adds a random amount of duration)
9 Q, M5 H; H  h: x" e(par5=chance for conversion; dm56 is applied to determine conversion chance)
3 ]' a/ ?) ]! H- |9 C(par6=max chance for conversion; dm56 is applied to determine conversion chance)
( M) L! d3 @, `( T" i5 y0 S(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects; by default it is set to resultflags=9), {+ S* `; y) v9 o* i% L/ v3 Q
(mindam/maxdam,etype=,emin/emax,elen)" ~  J4 d) X7 ?4 o& F+ e( P4 [
) f  ?4 I7 |; [5 _
[RegurgitatorEat] Consumes a corpse and adds or removes life to the user.& w' }; n3 f& l0 ~
(srvdofunc=108; cltdofunc=63 is used by the vanilla skill to release cltside missiles, but it will activate even if you do not consume a corpse)
  d5 ~1 q/ S8 Y/ W+ B: H(searchopenXY=1,selectproc=1,targetcorpse=1; these should be set so that you can select a target corpse)" E$ R' d: p( m7 s% \( B' h2 S
(clc1=life gained or lost by consuming a corpse; the life change is based on the life of the corpse, including modifiers like +life% and +life and /players setting)
( h) Y. Y2 G: Y8 O7 p7 C, w7 {) d$ k4 Q6 }, {

& r6 m( k  ^$ l8 C[Baal Corpse Explode] Consumes/disappears corpses within a radius around the selected target corpse. Does not explode corpses anymore because that was removed in 1.10f, along with the fancy corpse explosion graphics. It can be returned by setting cltdofunc=82 which will call in the baalcorpseexplode missile, although it is kind of buggy so it makes sense why they didn't use it (most significantly, it can act on already-purged corpses).
1 u. Z2 A/ F6 ]1 n( j$ O$ e(srvdofunc=141)
  }( \% U; w! H: [3 [. p4 t(aurarangecalc=radius within to consume/disappear corpses)
' u9 _1 f. R" s! }/ L" v(searchopenXY=1,selectproc=1,targetcorpse=1; these should be set so that you can select a target corpse)
" g: q! d& t* q7 s$ ?- j(NOTE: vanilla baal corpse explode has cltstfunc=82, but it doesn't seem to do anything important for a player character; I'm guessing this was an accident and that they intended to add this to cltdofunc instead, or maybe they were just lazy and didn't want to fix the repeating animation)+ J1 G+ m% R: x# I# z0 ?

2 F& ^6 q6 U. z" b! ~; ?( Y[MagottDown] Creates a small, invisible block that can be flown over, and also slightly teleports the user in a northern, slightly western direction. Casting it a bunch of times in a row creates a wall.
6 ~; s, q* R# y+ z( U(srvstfunc=45,srvdofunc=86,cltstfunc=33)
  q. K) P: b7 R# ^(warp=1; set this if you do not want the screen to fade from black with each use)
+ l+ [) W' l' o8 L5 `$ Z  k0 g(clc1=heal%; heals a defined % of life, but unfortunately cannot be negative)$ _) j% A- v* p: I2 C8 u. R' o( r
(NOTE: vanilla magottdown uses cltdofunc=47, but it doesn't seem to do anything)1 e% ]7 Q7 o2 a* F/ E! ~% o

# |3 p; @& `9 @) o$ r+ \8 L[MagottUp] Cast to allow yourself to move after using MagottDown.
9 G9 |1 x5 c- Q' U, h8 Z(srvdofunc=45; cltstfunc=32 is only necessary if you want to release cltmissilea vaguely in the direction of casting)
6 h' u" O5 e+ k2 Q0 Q: `6 U3 W) m+ A/ v

7 c9 ^8 {7 c9 @4 u- f[Resurrect][Resurrect2] Resurrects the target monster's corpse. Seems to work on any monsters. The target will use ResurrectMode or ResurrectSkill upon being resurrected, although it seems that not all animmodes work well (S3 locks up on a frame, and S4 will run frames 0-10 and skip the rest). Monseqs should not be used if a monster is casting, since it will play the first frame again after the last (resulting in a stuttering up-down-up animation of the resurrected target). Bizarrely, monseqs work fine for resurrection if the player uses the skill on a monster.3 j* `8 }; \2 h! G4 V% u$ ^* _( h
(srvdofunc=97)8 Z$ e, `" P  N# @- Q
(selectproc=1,targetcorpse=1,targetally=1; recommendations for targeting all corpses)
4 s1 A# J: V6 Z0 \6 P% y(NOTE: vanilla resurrect uses cltstfunc=39, but this doesn't seem to do anything)) s6 _* F$ @) e  J& e
6 w- |8 e+ O$ V% \; G

- H, [: d% ?6 r. x. o8 o; |[ZakarumHeal][Bestow] Heals the selected target.
; Q/ w, N( \. R8 {" e0 w) I) l: K(srvdofunc=96)% M/ v2 x. ~# S% c3 J( \4 B
(clc1=the minimum percent of life healed, which cannot be greater than clc2; negative values do not seem to apply)2 D$ E% X3 c+ Z, ^0 I# |
(clc2=the maximum percent of life healed; negative values do not seem to apply)6 K8 M+ s$ N/ F: C) U8 ]

8 w6 y( M$ n: |) k6 V/ C5 f  V
* m$ s0 Y1 `8 k8 O[Siege Beast Stomp] Deals explosive damage around the player and shakes the screen. The screen shaking lasts even if you start a new session.5 h" ?+ Y9 R& f# _% g" v
(srvdofunc=134; cltdofunc=75 is only necessary if you want screen shaking)! M+ E5 ~1 V, |
(srvmissilea=; must have a valid entry from missiles.txt to deal damage, but it doesn't actually release the missile)$ m2 l0 Q3 i5 g( v; A( v
(aurarangecalc=; the radius of the explosive damage)
. R9 j# H* d4 [(param1=screen shake magnitude; strength of shaking)* k% ?2 J+ K+ {
(param2=screen shake build; how long it takes for the screen to reach peak magnitude)
# ~+ r. a6 V. n(param3=screen shake duration; how long the screen shakes at the peak magnitude)
% z: P8 q; N/ A6 L0 F: x/ W(param4=screen shake fade; how long it takes to go from peak magnitude to no shaking)
' }8 x2 I- {# X8 U- |/ ~/ k' `' u
-----2 ]/ I9 H# z2 V, N1 r+ [% p

- S2 @$ s2 p6 f9 G9 K/ z
6 E) Y0 H) d1 T* ?& I[STATES]
! G5 E% S' R( s6 y0 J, b8 H1 ]$ u

$ T" e3 Q/ [6 s5 @8 H[Inner Sight][Slow Missiles] Applies a state to targets within a radius around the user, applying only one stat./ n" h9 V/ B% o/ V  d% A
(srvdofunc=6)
4 I9 ]* K2 M3 ?5 S! L(aurafilter=,auratargetstate=,auralencalc=,aurarangecalc=,aurastat1=; aurafilter determines what will be targeted, auratargetstate determines the state applied, auralencalc is the length of the state, aurarangecalc is the radius around the player, only aurastat1 is applied)* @" F- h, m7 \# a  |! f; y0 O, \- [
) H, a5 q, q9 ^  Q8 o/ Z0 a$ }
[Blaze][SpiderLay][Energy Shield] Releases one missile per tile traveled. Also is an incredibly versatile aurastate, allowing you to control up to 11 different stats at once while duration is active as well as auraevents.# U5 L9 D! [* z5 t8 H9 i
(srv:a,clt:a/b/c,srvdofunc=23; srva must have velocity=0 or it will not spawn; clta/b/c require blaze state to be produced): l: T& F0 o- K. O1 ?2 ]7 L
(aurastate=state that must be active for missiles to be released; use blaze if you want clta/b/c to work properly)' T$ k" i, i% F' h2 h  E" M
(auralencalc=length of state)
8 c- A5 J) ^# w* p- G! Z(aurastat1-6 AND passivestat1-5 are active while the state is active; this is the only non-aura in the game that applies temporary passivestats; this is very fortunate since you might want to use an aurastat-applying missile to the produced missiles, this allows you to counteract stats gained/lost via aurastats with passivestats)
# j5 P. c7 X" X. J' o2 |8 R1 j(auraevent1-3,auraeventfunc1-3 can also be enabled for the duration)
5 v6 j' Y# r4 D4 \7 v(NOTE: the cltside missiles released per tile traveled only function properly if the skill's ID is 511 or less. If the ID is higher, then the skill will instead use cltmissilea/b/c from ID=511. If you want more than one clone of this skill past ID=511 and also want them to have different cltmissiles, then you could leave cltmissilea/b/c blank in ID=511 and try to produce graphics via spawned monsters with srvmissiles, although synchronization may or may not work well depending on what you are using this skill with.)
: v4 t' w1 W1 w7 J2 S% q2 B3 z6 ?% F. L& r! ~" h
[Amplify Damage][Dim Vision][Weaken][Terror][Life Tap][Decrepify][Lower Resist] Applies a state to targets within a radius around the selected point. Does not apply a state to monsters with mWL=0 (thanks to Riv for realizing this).
9 Y. I4 l# C* f(srvdofunc=30; cltstfunc=18,cltdofunc=30 are not necessary but recommended, given that they produce a missile from/at the location, with the missile at the location sharing the radius of the srvside function)' H% a; d3 t, E3 G' A  }' @; ?
(aurafilter=,auratargetstate=,auralencalc=,aurarangecalc=,aurastat1-6=; aurafilter determines what will be targeted, auratargetstate determines the state applied, auralencalc is the length of the state, aurarangecalc is the radius around the clicked point, all aurastats are applied to the target)
' e0 l4 t* P3 X5 z5 v- Q(NOTE: srvstfunc=18 is used by these vanilla skills, but I do not notice any differences with it gone)/ E( e2 f: B+ B* u4 z( ]$ ~3 {
3 z4 V4 P) I2 O0 Z1 [9 \

; O- U7 Y; s" {3 a' A* l! F[Confuse] Apply a 5-stat state in a radius around the selected point to targets, making them of neutral alignment (they attack and can be attacked by everything). State will not be applied to non-normal monsters.& M: [; V! j9 j% `) |; S
(srvdofunc=61; cltstfunc=18,cltdofunc=30 are not necessary but recommended, given that they produce a missile from/at the location, with the missile at the location sharing the radius of the srvside function) (aurafilter=,auratargetstate=,auralencalc=,aurarangecalc=,aurastat2-6=; aurafilter determines what will be targeted, auratargetstate determines the state applied, auralencalc is the length of the state, aurarangecalc is the radius around the clicked point, for some reason aurastat1 doesn't apply but the rest work)* Z* y- c' b, ~7 {9 X7 }' C5 v

8 H6 t3 c" m% j2 S
) B5 |; ]$ Y6 {; w4 z8 ]8 q/ X[Attract] Apply a statless state to a target which makes it of neutral alignment (it attacks and can be attacked by everything). State will not be applied to non-normal monsters.) S/ o3 q# K) R+ `; T7 }4 Y! j# h
(srvdofunc=59; cltstfunc=18,cltdofunc=30 are not necessary, but are used by the vanilla variation of the skill, with cltdofunc=30 using aurarangecalc despite the srvside function not using it, and 18 producing a graphical missile)" @9 J) [# F/ u$ {) m& G
(aurafilter=,auratargetstate=,auralencalc=; aurafilter determines what will be targeted, auratargetstate determines the state applied, auralencalc is the length of the state)$ G+ h; Q- j* w9 Y4 u' ^( a* [
(NOTE: srvstfunc=18 is used by these vanilla skills, but I do not notice any differences with it gone), V. A+ T; O  \

) \" ~: b% A, y; u1 e# P8 e% ~. h/ x$ F) X+ B; H
[Frozen Armor][Shiver Armor][Chilling Armor][Bone Armor][Cyclone Armor][Burst of Speed][Fade][Venom] Applies a state to the user.: ]) s  \! E1 U# a
(srvdofunc=18)& s9 x$ t* _$ o2 _  U- @
(aurastate=,auralencalc=,aurastat1-6=,auraevent; aurastate determines the state applied, auralencalc is the length of the state, all aurastats are applied to the target)! @) F8 o6 \& @! p- Y2 J

; q& D( s" C, u  k) m[Werewolf][Werebear][Delerium Change] Apply a state to the user which can have different overlays when activating or deactivating.
) b" i3 Y& N" X) u% V+ z(srvdofunc=116; cltstfunc=45 should be used only if you want to make use of cltoverlaya/b when activating/deactivating)
5 R) G+ a; y; A" g(cltoverlaya=,cltoverlayb=; required for activation/deactivation but only if you are using cltstfunc=45)
) {: A6 F, x5 b- w8 a3 l( k(aurastate=,auralencalc=,aurastat1-6=; aurastate determines the state applied, auralencalc is the length of the state, all aurastats are applied)
- t/ b+ g, r' E/ Q7 m
: e; f+ {! ]4 ^
. u: T! `6 V" |  W1 `[Blade Shield] This skill is described in two different sections because its function massively changes based on how you configure it, and both the srvstfunc and srvdofunc have interesting capabilities. This section describes Blade Shield's srvstfunc, which is highly unique since it applies a state to the user for a set duration without even having to use a srvdofunc.( }2 X; I, B+ {
(srvstfunc=28; srvdofunc=54 is only necessary if you want it to hit nearby monsters like Blade Shield does)3 e! K: k" N# z) n; t
(srvmissilea=; as long as it references an actual missile it will allow the state to attack). b- _' B7 G, R/ h2 N! m2 y
(aurafilter,aurastate=,auralencalc=,aurastat1-6=; aurafilter determines the monsters it will attack, aurastate determines the state applied to the user, auralencalc is the length of the state, all aurastats are applied)/ H( k2 r) o. e* G5 u) X7 w* t
(periodic=,perdelay=; periodic=1 if you want it to hit, perdelay determines how many frames must pass before it attempts to attack again)
5 }3 ^8 B% V% x! p(tohit,levtohit,tohitcalc)0 f+ R) ~+ J- L
(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects on each attack; by default, it uses 32/0/3; resultflag=32 prevents quite a few effects from being applied, like ctc on striking and crushing blow)
6 G7 U. S. _9 h0 X( m(srcdam=,mindam/maxdam,etype=,emin/emax,elen; note that mindam/maxdam is increased by damagepercent, strength/dex when applicable, etc)
* z- W. Q3 p8 V6 [, W2 _, |" ?. T& d' b' y6 X' q  e- ~

: `* ~3 s3 z! W1 T! U  }: G- K[Enchant] Applies a state to a target, either the user or a pet/ally.
* [+ A& j4 {4 r6 z(srvdofunc=25)" h& G* a2 P$ P' I
(aurastate=,auralencalc=,aurastat1-6=, auraevent; aurastate determines the state applied, auralencalc is the length of the state, all aurastats are applied to the target)
! J- q5 E6 _* P; @(targetpet=1,targetally=1; if you want it to be applicable to allies)& |) ]" W- Y& s, K0 b  w
+ ^  y, k( U; k5 K( J/ `) s

9 D7 a+ p9 Z, D* \# [; O1 |[Might][Prayer][Resist Fire][Resist Cold][Resist Lightning][Defiance][Thorns][Cleansing][Meditation][Fanaticism][Concentration][Blessed Aim][Vigor][Salvation][Barbs Aura][Wolverine Aura][Oak Sage Aura] Apply a state to yourself and/or to allies and/or enemies. Also allows you to gain passive stats, but only while the aurastate is active./ ~% _& l, c) d/ ^5 z  t
&#8226;If any aurastat=item_poisonlengthresist, then every time the aura perdelay elapses, the associated aurastatcalc value will be used to deduct from current poison and curse length (seen on Cleansing in vanilla)* d1 g7 X2 L- _9 y2 w/ B+ X9 {: e
(srvdofunc=65)
, N; e4 H' C' n. Q) v; z(aurafilter=,aurastate=,auratargetstate=,aurarangecalc=,aurastat1-6=; aurafilter determines what will be targeted, auratargetstate determines the state applied, aurarangecalc is the selection radius around the user, all aurastats are applied to the user and target)( |' [/ T9 Z' x+ `" @
(passivestat1-5=; these are applied only to the user while the aurastate is active)
) V' V0 C* \, ~$ H0 q4 R1 D$ A) f(aura=,periodic=,perdelay=; these are not required, but are usually used, aura=1 makes it so it is active as long as it is on the skill bar, and periodic allows perdelay which determines how long the aurastate and auratargetstate last as well as how often they update, in frames)
; y7 ^1 C( Z6 o# j- k% B
, S9 b& ]( c& C( v8 b; U/ L* ]3 h, V5 |
[Holy Fire][Holy Shock][Sanctuary][Conviction] Apply an aurastate and its stats to selected targets. Also allows the user to gain passive stats, but only while the aurastate is active. Also deals elemental damage within aurarangecalc every time it updates/activates; this allows it to function well even when not being used as an aura (e.g. as an area of effect explosive damage spell).
( d; N4 s/ Y5 |2 Y6 F7 w& L(srvdofunc=66)* ~9 P7 Z& V; ~2 V1 z1 X6 I
(aurafilter=,aurastate=,auratargetstate=,aurarangecalc=,aurastat1-6=; aurafilter determines what will be targeted, auratargetstate determines the state applied, aurarangecalc is the selection radius around the user for applying the auratargetstate and applying elemental damage, all aurastats are applied to the to the user and target)
/ H7 ?% O0 h; R' k" t& `* K& O1 h(passivestat1-5=; these are applied only to the user while the aurastate is active)* p9 k3 b% y' \% \
(aura=,periodic=,perdelay=; these are not required, but are usually used, aura=1 makes it so it is active as long as it is on the skill bar, and periodic allows perdelay which determines how long the aurastate and auratargetstate last as well as how often they update, in frames)
$ ]& r- _2 x  _& O+ ^  A2 z9 |(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects; by default it is set to 16385, which makes the elemental damage effects show up)  i1 F; O* p( R2 L6 B
(etype=,emin/emax,elen)% Q! i4 `9 @+ F/ a1 k! s
7 [0 a& j, i# k4 u# m' I: D
6 Y: U  A! o! {
[Holy Freeze] Apply an aurastate and its stats to selected targets. Also allows the user to gain passive stats, but only while the aurastate is active. Also deals elemental damage within aurarangecalc every time it updates/activates; this allows it to function well even when not being used as an aura (e.g. as an area of effect explosive damage spell). Unlike the above srvdofunc=66, coldeffect in monstats.txt is relevant for this, with coldeffect=0 rendering a monster immune to the auratargetstate.+ Y  Y; F# ~6 ^
(srvdofunc=81)
+ r/ r4 u' j+ G" E' b; K(aurafilter=,aurastate=,auratargetstate=,aurarangecalc=,aurastat1-6=; aurafilter determines what will be targeted, auratargetstate determines the state applied, aurarangecalc is the selection radius around the user for applying the auratargetstate and applying elemental damage, all aurastats are applied to the to the user and target)+ i- y$ U  b  R& ^1 |+ U$ g
(passivestat1-5=; these are applied only to the user while the aurastate is active)+ g* }5 r& B1 ]( ~- v3 q* K
(aura=,periodic=,perdelay=; these are not required, but are usually used, aura=1 makes it so it is active as long as it is on the skill bar, and periodic allows perdelay which determines how long the aurastate and auratargetstate last as well as how often they update, in frames)
  u/ w* Z/ s+ b(resultflags,hitflags,hitclass; can make use of these columns to apply a few different possible effects; by default it is set to 16385, which makes the elemental damage effects show up)- r; d: w% F+ E  x9 \2 \2 N
(etype=,emin/emax,elen)
3 @8 L( z9 a  F1 \6 P
6 Z5 X* V5 Z2 X" {( l& \( h3 E' K& C3 e
[Redemption] Apply an aurastate to the user along with its aurastats, as well as passivestats. Also can search for corpses and redeem them for life and mana; this deletes the corpse, both srvside and cltside, and produces cltmissilea.
- b+ e$ i3 h; a8 ?7 M(srvdofunc=82)
' f9 C+ G. o* @0 J# e; W- m& A. c(aurafilter=,auratargetstate=,aurarangecalc=,aurastat1-6=; aurafilter determines which corpses should be selected (set to 4354 by default), aurarangecalc is the selection radius around the user for selecting corpses, all aurastats are applied to the user)" j$ I  W! H) y/ _4 ?& ]
(passivestat1-5=; these are applied only to the user while the aurastate is active)% i7 i& _" c( H2 E) [$ ~
(aura=,periodic=,perdelay=; these are not required, but are usually used, aura=1 makes it so it is active as long as it is on the skill bar, and periodic allows perdelay which determines how long the aurastate lasts as well as how often it updates as well as how often corpses are selected for redeeming, in frames)" w9 \- K0 c# C! a3 ]1 l; P4 p! b
(cltmissilea=missile to release when the corpse is redeemed)5 ?; p' N1 A, D7 i7 x, ]- L
(clc1=chance of redeeming a corpse). N7 P; ?, C$ I
(clc2=amount of life gained from redeeming a corpse)
3 w9 Z8 J& n9 R$ C; C2 c(clc3=amount of mana gained from redeeming a corpse)
+ b! g, `$ K( l! s0 ?* _) W
6 F1 W% O; a' [+ o9 v% j9 v1 v" j
; R! q) @$ x5 d! n6 |9 h* [" n. U[Taunt] Apply an aurastate to a single monster, along with all of the associated aurastats.& K% F1 K7 K3 f+ |- L) |* N& n4 V
(srvdofunc=71)0 T6 ~1 B) S, [0 J
(aurafilter=,auratargetstate=,auralencalc=,aurastat1-6=; aurafilter determines what will be targeted, auratargetstate determines the state applied, auralencalc is the length of the state, aurarangecalc is the radius around the player, only aurastat1 is applied)
, X! l  X! v" r2 a' `+ {+ W4 }, P* s

8 R& O) G; r' m2 b! [[Cloak of Shadows] Apply an aurastate to the user (which provides passivestats) and an auratargetstate to all targets (which provides aurastats) within the aurafilter and range. The auratargetstate always applies blind. The auralencalc prevents you from using this skill until it runs out. Note that it only prevents casting if you have that aurastate currently, this means you can allow yourself to cast it again earlier if you replace it with an identical state of a shorter duration, and likewise you will be prevented from casting it even if you haven't cast it if you already have the state from something else. So for example, if you are a paladin and cast Cloak of Might (which gives the Might state), and then select Might (the aura) then unselect it, you will be able to cast Cloak of Might again; and if you keep Might active, then you won't be able to cast Cloak of Might.
: L+ ]% M0 p) p1 |0 t(srvdofunc=47,cltstfunc=7)
& W0 E, o5 j& F. G9 i) E(aurafilter=,aurastate=,aurarangecalc=,auralencalc=,aurastat1-6=; aurafilter determines which targets should be selected to gain auratargetstate (set to 57347 by default), aurarangecalc is the selection radius around the user for selecting targets, auralencalc determines how long the aurastate and auratargetstate last as well as how long it takes to be able to use this skill again, all aurastats are applied to the targets)
8 |1 K) Y( I; m* E(passivestats1-5=; applied to the user while aurastate is active)* v$ R* T# |5 Y/ o5 }7 C

4 l+ M, n* R1 G
# [3 Z( Q" s* _% U- ~0 `[MonCurseCast] Applies a random curse (ID=66,72,76,82,87,91; Amplify Damage, Weaken, Life Tap, and Decrepify OR Lower Resist + Iron Maiden).$ v; r& g8 ^) R
&#8226; BEFORE the change in 1.13, Iron Maiden and Lower Resist can be selected, and Decrepify is not selected* A3 {) P' t6 g& k
&#8226; AFTER the change in 1.13, Iron Maiden and Lower Resist cannot be selected (or are broken), and Decrepify can be selected but does nothing except override other curses
: f# T; x! p: f# n&#8226; Note that this skill does not read the aurastats of the given curses, it reads the params and calcs of Iron Maiden directly
6 b2 R4 r) _) I; g' V: `- e&#8226; This also means any new aurastats that the curse may give due to your modding will be ignored by this function
) k& l4 R  E' k" q( s" U&#8226; It seems that you can't change srvdofunc=30 of the respective curses, or otherwise the function won't be able to use them( a& j0 a) R( [& Y/ l4 k& o: b  N7 s
&#8226; It directly uses the aurarangecalc/auralencalc from the curses it casts
" H5 R% q& q4 _(srvdofunc=112; cltdofunc=30 is used by the vanilla skill, but it is awkward since the aurarangecalc is a single value, but the curses it casts have different aurarangecalcs which causes a desync between the apparent radius and the actual radius; cltstfunc=18 is also used by the vanilla skill, but it isn't necessary)
9 f4 X& Q; J- j4 m, O  I# e(aurarangecalc=; only relevant if you want to use cltdofunc=30)" d" }& i  _' r1 ?  v$ U
' Y9 V" Y+ U' U8 r/ a' D( Z7 ?# |

2 e  z$ _! G$ g0 d# H' N[fenris rage] Consume a corpse to gain a state with full aurastats.
5 O& d  K4 C( O(srvdofunc=137; cltstfunc=51,cltdofunc=79 if you want cltmissilea to be released from the consumed corpse)8 a4 m4 B! P1 f6 m5 y" d8 a- a% {- |
(aurastate=,auralencalc=,aurastat1-6=; aurastate determines the state applied, auralencalc is the length of the state, all aurastats are applied)
& W; A+ f" G  M9 Z# j$ ?
+ p) N* ~/ F# A5 L2 D
! O# R5 k% b5 t3 _4 w9 e  _; }[Overseer Whip] For the far majority of monsters, this applies an auratargetstate and its stats. To monsters with monstats.txt: baseid=minion1, this either applies an auratargetstate and its stats (if it succeeds) or converts them into the defined summon, turning into an equivalent monster in the respective chain (e.g. minion1=scarab1, minion2=scarab2, minion3=scarab3, etc).% Z& m- F+ `) t# k
(srvdofunc=131)- K, F7 W; ?% k/ Y. F% d
(auratargetstate=,auralencalc=,aurastat1-6=; auratargetstate determines the state applied, auralencalc is the length of the state, all aurastats are applied)
7 S7 Y$ v9 z( |& O$ v# ~: o(summon=,summode=; summon determines what monster it will convert into, spawning along the equivalent nextinclass chain; summode determines the animation upon spawning, make sure it uses an animmode that the given monster actually has, something like A1 is almost always safe)
& u: o; |$ f+ _9 H2 j$ |2 l1 E* z(clc1=chance of applying auratargetstate; if it fails, then the monster is converted into the monster in the column "summon" instead, but only if it a minion; the replacement monster is janky and dies when it gets near you, but it carries at least most of the stats, at least including monprops, of the given monster)% [" N4 a+ B6 z! |) o1 {/ e- p) U
$ E0 E5 R7 [7 n* S, x8 a; [8 h" i
[PETS]
! L3 c$ K& K2 X- T* @: M; l2 Y+ G5 |% E0 R0 w
[Unsummon] Unsummons (does not kill, the unsummoned will not trigger death effects) one of your pets.9 C6 q* B1 u( W8 p7 Z: h4 b
(srvstfunc=3,srvdofunc=4)
4 N/ Y. D6 ?$ C: y3 r) R0 o7 {(targetpet=1)8 d( K1 I7 |3 \( r1 c1 X
: I5 l# u5 V5 W( c5 z

6 b" F# q; Z+ b; A# x[Dopplezon] Summons a timed pet at the clicked point that can borrow your life; pet triggers death effects when the duration runs out.# p$ g' J2 W' ^. K
(srvdofunc=15)' t: ~5 d/ U3 J! }6 _
(aurastats1-6; applied to the summon)
% [/ t5 u7 v2 y) M(passivestats1-5; applied to the summon)
, f. O" Y% w+ ]& o(summon=,pettype=,petmax=,summode=,sumsk1-5=)* u! J$ X8 O* m: ~6 V) A& T& [: ]: b
(clc1=multiplier to base life; multiplicative with other sources of life%)
, a! ^! a7 u8 T7 B: r9 I(clc2=pet duration, in frames)
3 m' B1 E1 O. z7 t( l(clc3=the percent of life it borrows from the user for its own base life)
. d" J7 t: T, s; E) |(tohit,levtohit,tohitcalc)/ v# e5 t; q- V1 J
(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)" ~- H( J& \( W5 `* l' \+ z0 ]
  {- g  d* t% O1 w6 b; X  b
[Shadow Warrior][Shadow Master] Summons a pet at the selected location. It gains life via ln12 and limits item level based on ln78. It also is broken (thanks Ogodei and LadyIsabelle: https://d2mods.info/forum/viewtopic.php?t=66555) in that auracalc2/passivecalc2 determine the values for all the other calcs of their type; it can be fixed via hardcoding as described in the aforementioned link.
& B6 E* K( Q# g, J: X) k(srvdofunc=49), w* o$ j$ i9 \9 M0 G5 H4 A7 c/ a
(aurastat1-6,auracalc2; applied to the summon; auracalc2 is used for all aurastats)6 o5 r: _( {$ j, e' Q/ P
(passivestat1-5,passivecalc2; applied to the summon; passivecalc2 is used for all passivestats): h( s& `  t( z) H# j
(summon=,pettype=,petmax=,summode=,sumsk1-5=)
/ D7 i# H9 P" j$ ]9 S# h9 X(param1; +baselife% per level)/ }  ~7 W) v" G! o6 t
(param7,param8; ilvl of equipment on minion), z$ j( G4 r$ h. {" ^
(tohit,levtohit,tohitcalc)0 Z- \9 ]# D. k
(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)
+ `, u0 j# r$ v) {
/ T% s1 n9 U+ f+ s7 E8 G  S+ j7 \[Valkyrie] Summons a pet at the selected location that must have an inventory or suffer a crash. If you do not summon from hcldx=357 (valkyrie), then it will be invisible. No matter what it will have a glowy full set aura. Attempting to transform it into something else via a state does not seem to work.5 X, l5 Y3 x7 {# H% T
(srvdofunc=16)
. L# l6 {% X( F: L(aurastat1-6; applied to the summon)
6 e" H+ ^! B5 d' [& F9 ~! r(passivestat1-5; applied to the summon)
$ ^4 ?9 ]$ G- e2 k1 A. C(summon=,pettype=,petmax=,summode=,sumsk1-5=)
4 I# u. q$ h. z3 k$ n7 [(monstats.txt: summon must have inventory=1)" J2 I' c6 R( H; H; A
(clc1=multiplier to base life; multiplicative with other sources of life%)5 K5 c$ W! t  U5 C$ R
(clc2=ilvl of magic items; seems like it also gives a +1 bonus to the input)
  ]6 f$ t- y# n: o3 p(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)& V+ T* P7 K+ Z# }/ s6 T; |3 M
1 l+ _$ k8 O* W& Y

. E/ j$ M, Z0 ?1 C3 ]2 ], a' ^[Hydra] Creates 3 summons, with the specified summon and the two rows following it in monstats.txt. Only one of the summons can have a pet leash, more than one will cause a crash. All of the summons can be unsummoned, even if they are not aligned. Regardless of the monster alignment, the summons will be incapable of harming you (although they will still attempt and fail to harm you if they aren't aligned). Summons with monstats.txt:AI=necropet immediately die (and trigger death effects) when getting near monsters. All summons die (and trigger death effects) after clc1 runs out.
2 V' p/ Z5 N$ @4 _' N6 I9 ~(srvdofunc=144)
8 g' g" W9 |; P, p* Q(aurastat1-6; applied to the summon)* w; E4 U1 }& q' J5 _$ o3 j8 y5 K
(passivestat1-5; applied to the summon)
) s3 y( Q# G+ N" W(summon=,pettype=,petmax=,summode=,sumsk1-5=; the following two entires in monstats.txt will also be summoned alongside the entered summon; petmax counts all three of the summons, so you need at least petmax=3 to summon all three)8 _; ~% `! v0 _. A
(clc1=duration of summons, in frames): u6 L3 ~1 e$ Q8 y6 U7 A
(tohit,levtohit,tohitcalc)
) \4 o( m/ y! R0 K2 N3 n3 v(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)
2 v* [: |) q, Q/ ?* A5 _" n5 p% `0 F(NOTE: vanilla hydra uses srvstfunc=14 and cltstfunc=17 but they don't seem to do anything)- {9 k' g! A7 V: V
1 ^, M2 Y$ K! ?$ T8 ]
( S; @/ b9 g0 z8 \8 o
[Raise Skeleton][Raise Skeletal Mage] Consume a corpse to make it release a pet. Also hurts (and possibly kills) Paladins, dealing 1/8th of their max life per use. Gains +1% to all resists per value in the stat passive_summon_resist. Also: synchronizes monstats2 S4v and S5v (i.e. the necromage energy balls), makes it so the state skel_mastery upgrades monstats2 RHv, is required for AI=NecroPet to use skill1 and attack at range (i.e. for necromages) and allows for random S4v (i.e. random energy balls for necromages). Basically, necromages won't function unless you use this.
1 n, f, v4 m- Q0 {0 z# A(srvdofunc=31; cltstfunc=20,cltdofunc=31 are only needed if you want the corpse to also release cltmissilea)! s# N9 ^$ V. h3 L
(aurastat1-6; applied to the summon)
' ?0 v" c( J, _" x; [9 z) V(passivestat1-5; applied to the summon)
4 r+ B* X* X( _3 ^3 n& Z(summon=,pettype=,petmax=,summode=,sumsk1-5=)8 X1 z6 [. S7 D$ i
(selectproc=2,targetcorpse=1; required for a corpse to be targeted)9 {" a0 x! b& k* g
(clc1=multiplier to base life; multiplicative with other sources of life%)! A! l7 t0 {' g4 q" ?2 b
(tohit,levtohit,tohitcalc): F$ f" k2 P1 U$ v
(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)
- @' ]' ~# n0 w) R; o5 o- s1 G(NOTE: has srvstfunc=15, but it doesn't seem to do anything)
  H" V/ S7 j0 ^( A$ O2 g8 e9 Z
& ]9 r# S, @* s- d/ S5 {  o" a5 g( ~* O9 F
[Clay Golem][Blood Golem][Fire Golem] Summons a pet at the selected location. Gains +1% to all resists per value in the stat passive_summon_resist.; g" f$ P  v8 M: B: I
(srvdofunc=56)/ e7 J' }0 ~. v! G; m
(aurastat1-6; applied to the summon)
* F) p6 ?$ V& Y) l% y# j+ a(passivestat1-5; applied to the summon)4 D# r' d$ k1 v% J* p1 J
(summon=,pettype=,petmax=,summode=,sumsk1-5=)
8 X2 ]! a8 T; h! O4 V9 k8 Y(clc1=multiplier to base life; multiplicative with other sources of life%)" g( g/ o/ X& F+ \/ G3 t$ B
(tohit,levtohit,tohitcalc)
' }3 g) v* @3 n) Z5 ](srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)
7 `4 H8 R6 L& e3 f
9 e5 R2 H; y& I: i. T  N1 l" @2 i[Oak Sage][Summon Spirit Wolf][Heart of Wolverine][Summon Dire Wolf][Spirit of Barbs][Summon Grizzly] Summons a pet at the selected location.& W9 S! X3 n3 `2 u: u* B8 L2 D
(srvdofunc=119)3 o" }0 B; |# Y4 ~
(aurastat1-6; applied to the summon); r) k; F: [) R+ e1 q
(passivestat1-5; applied to the summon)
: H3 G* e/ I6 x(summon=,pettype=,petmax=,summode=,sumsk1-5=); m" ~1 K4 ^+ z5 B+ N* O' ^! [
(clc1=multiplier to base life; multiplicative with other sources of life%)
# \/ e2 m& _0 K) }(clc2=level of the pet; doesn't seem to change the result from ulvl clcs on the summon for things like aura/passivestats, but it definitely changes the actual level of the monster as far as hit chance is concerned)
( q9 T* C' }  j9 O) A& {(tohit,levtohit,tohitcalc)
5 M3 z  k/ }( v! @* R) I: J' [(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)/ `$ C+ `7 n/ P/ Y2 H- n7 R

; b% D- E; n4 M1 z2 G[Poison Creeper][Cycle of Life][Solar Creeper] Summons a pet at the selected location. The summon cannot display overlays (but still does receive bonuses from states) and produces vine graphics/sounds as it moves. Hit chance seems to be bugged and always set to the minimum 5%.
8 @. s. z* W2 E1 g(srvdofunc=115)
6 F0 f( D0 I( {( o$ M(aurastat1-6; applied to the summon): R% L  P5 ~- w1 k* ^0 c, G
(passivestat1-5; applied to the summon)
# ]+ Z3 U, N8 u(summon=,pettype=,petmax=,summode=,sumsk1-5=)- ^5 }6 o  [; O" L
(clc1=multiplier to base life; multiplicative with other sources of life%)
! v+ E; W3 r+ m; Q5 f(clc2=level of the pet; doesn't seem to change the result from ulvl clcs on the summon for things like aura/passivestats, but it definitely changes the actual level of the monster as far as hit chance is concerned)
: b, k* b1 A; D: @: @; A(tohit,levtohit,tohitcalc)
0 ^* i7 \9 q. `(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)
+ _0 G5 ]" F6 |& ?: p7 X0 g/ M4 e; x

- d$ H# J2 f" X" |2 n% n0 O& r3 m[Bone Wall] Release two missiles at the target location that travel in opposite directions perpendicular to the user and spawn a pet at the target location. If using the bonewallmaker missile (a missile with psrvdofunc=13 will create summon as it moves), then be sure to not use a pet with a leashed AI or it'll crash the game. If you use unaligned monsters as the summon, they will be hostile to everything, including each other. Note that the 24 second duration of Bone Wall is only applied to monsters with a monstats.txt AI=BoneWall. Also note that the summon that gets produced seems to have a broken hit calculation, always having the minimum 5% hit chance (the monster's level is equivalent to you however), as such it is recommended that if you want to make summons with this then you make them use missiles or skills that can either properly calculate hit chance or ignore hit calculations entirely. Also, the monsters summoned sort of have their normal AI behavior but with severe brain damage, so you'll probably want to make sure they use a skill that is smarter than they are (e.g. auras that hit in a radius, Guided Arrow, Bone spirit). Also, the summons share an unusual cooperation, in that if any of the pieces besides the center-most die, then all the others die; this means you can trigger ctc on death at most twice (once from the center piece, causing that piece to die, and once from a side piece, causing all the pieces to die).1 L- ^4 m. L2 u* }
(srvdofunc=60; cltdofunc=26 if you want to shoot out missiles along the length of the bone wall)
3 j) I+ \- M% U$ ^(srvmissilea; only use a missile with bonewallmaker's psrvdofunc=13 if the summon doesn't have a leash; modifying the velocity of the missile will space out the distance between each summon; if you want to make it like a hybrid between fire wall and bone wall, then use cltmissilea and cltdofunc=26)" s+ Q. e; \  Y- c, p
(aurastat1-6; applied to the summon)
1 p- {3 k8 Q( `9 P  J- n(passivestat1-5; applied to the summon)
1 G5 P7 P& }! W0 K3 ~; k(summon=,pettype=,sumsk1-5=; be sure not to use a summon with a leash if you spawn more than 1 summon; note that there is no cap to the number of pets)
5 M3 q! j5 k4 W% T, [8 h( A/ W(clc1=multiplier to base life; multiplicative with other sources of life%)
" T$ U1 L" |+ M% M. U(clc2=makes a missile with psrvdofunc=13 spawn an equal amount of summons as this clc, plus one extra that is always spawned in the middle)3 t* G3 j' Y  a% F( K
(tohit,levtohit,tohitcalc)
* p4 Q' C" x% `(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column): l) @+ {- H( I- m, ^
(NOTE: vanilla bone wall has cltstfunc=22, but it doesn't seem to do anything)
+ N0 m" {6 Y$ k$ n8 |0 p% Z! w+ `, ?* W1 t8 F* y
1 ~  Z5 x- D1 U
[Bone Prison] Seems to basically follow the same rules as Bone Wall, just without the center summon and instead producing a ring of summons.; R  R# z( t. u6 J6 a) }' _$ S
(srvdofunc=62; srvstfunc=19 is not required, it just makes it so you have to target a specific monster for it to cast)
4 ?5 i7 E7 n9 i(aurastat1-6; applied to the summon)0 x$ K. a2 @( l
(passivestat1-5; applied to the summon)! M/ Z+ h" r' v/ q- x: y
(summon=,pettype=,sumsk1-5=; be sure not to use a summon with a leash if you spawn more than 1 summon; note that there is no cap to the number of pets)' j- {: B) z; ?& R( K
(clc1=multiplier to base life; multiplicative with other sources of life%)
2 A# t# ~" t, r: g(tohit,levtohit,tohitcalc)1 i9 A& n0 V% X
(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)
7 g) A! t. C6 k% E2 y) _(NOTE: vanilla bone prison has cltstfunc=22, but it doesn't seem to do anything)% j5 G- T& e! u

! ^" s" w5 X  t2 h) O. ]
2 e' n3 y. N, E2 ^[Iron Golem] Memory is hardcoded to ID=90 and makes it impossible to fully clone Iron Golem's behavior. Also, for memory to function it requires pettype IDX=3, which in vanilla is golem. Still useful for cloning if you want to have a temporary pet that can only be spawned from metal items and adopts the stats of the used item, it won't interfere with the memory of the actual IronGolem skill either. Also can be set to only get the Fade stat when produced from an ethereal item, but only works properly if one of its aurastats has Fade=16 {ethereal fading seems to only work for the IronGolem monster, but there might be some other stuff required, e.g. Fade in monprops}.2 ^' e6 @5 O4 l. N* d8 x
(srvdofunc=57)
3 b$ P4 o$ ?( c7 F/ q! X(aurastat1-6; applied to the summon; one of these must have aurastat=fade and aurastatcalc=16 or otherwise the summon will not become faded from an ethereal item)8 l! R. w! n9 H. X
(passivestat1-5; applied to the summon)/ H/ i! }( r9 U5 o0 s, ~
(summon=,pettype=,petmax=,summode=,sumsk1-5=)
7 s# Y$ n% |  h; K(targetitem=1; required for an item to be targeted)
# w- ^! J& U4 w: m! L6 Z  T5 N" u(clc1=multiplier to base life; multiplicative with other sources of life%)
! B* _' p+ e) U(tohit,levtohit,tohitcalc)
* \, x* E( n- B! x  R+ ?1 V4 f% I(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)8 s8 [# G9 X/ ^+ G$ [$ d$ ?
(NOTE: vanilla irongolem has srvstfunc=20 and cltstfunc=23, but they don't seem to do anything)
, i( F! {, O' ]* ^* J
$ V. j! d5 t2 Z' \
  I. R) W' ?* l[Revive] Revives selected corpses and appends additional stats and skills to them. Also hurts (and possibly kills) Paladins, dealing 1/8th of their max life per use.
4 i! L3 P% @6 T5 H7 ^! s/ x(srvdofunc=58; cltstfunc=24 is only necessary if you want different cltmissiles released from the corpse based on its size in monstats2.txt, with small=0,large=0 releasing cltmissilea, small=1,large=0 releasing cltmissileb and small=0,large=1 releasing cltmissilec); u' A- g+ _6 K' T  x8 ~6 O# M
(aurastat1-6; applied to the summon)
9 S6 G# F. |7 x# e9 l0 j(passivestat1-5; applied to the summon)" Y7 g* P- }; f0 J
(pettype=,petmax=,sumsk1-5=; sumsk allows for stuff like auras to be added to all your revives)" E; A) Z2 n# }8 M3 C+ H2 H
(selectproc=2,targetcorpse=1; required for a corpse to be targeted)2 p8 g: o# i7 e! K& [9 ?
(clc1=multiplier to base life; multiplicative with other sources of life%)5 _* G" X* k7 _( e; W) f
(clc2=duration of revives, in frames)
4 E; T* S  ?3 A8 D(NOTE: vanilla revive has srvstfunc=21, but it doesn't seem to do anything)+ D/ I/ b" M" K0 z- r; K3 I
(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column of every single monster you revive, also note that these bonuses are applied to the monster even when not revived, however if you set it so that srcdam=0 and mindam/maxdam=0, then you can freely modify min/maxlevdam1-6 without making monsters any stronger, although this whole process is essentially pointless since you can just give it to them via aurastats/passivestats/sumsks)
# x( F% e( S: m; O* d+ w; X% k4 F0 c' ~+ `) y+ k: G5 L" l% v0 R- d

" d) C' s2 d7 r3 c) K) P3 [. o! A[Raven] Summons a pet at the selected location. The pet cannot be harmed and will not be targeted by enemies. Number of hits until death is not controlled by this skill function.
: ?$ g2 i3 s) L! b. H(srvdofunc=114)* G9 p4 C5 Q. _# L) Y4 ?
(aurastat1-6; applied to the summon)
$ g! z( z' i8 L9 M(passivestat1-5; applied to the summon)* K$ [/ V- o* R3 @/ V; S" \- H
(summon=,pettype=,petmax=,summode=,sumsk1-5=)- G6 p) h9 \6 e' N) M
(clc1=multiplier to base life; multiplicative with other sources of life%)
! ?$ J& D6 P# D# V2 V$ D$ }/ R(clc2=level of the pet; doesn't seem to change the result from ulvl clcs on the summon for things like aura/passivestats, but it definitely changes the actual level of the monster as far as hit chance is concerned)- f8 L/ D. v( I# g  `0 `/ w- ?1 N5 B7 ^
(tohit,levtohit,tohitcalc)
! c; L; X' Q2 c6 ^' `. e' k% O(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)7 ~- G/ v* ~& N

  k9 X' B8 @1 C0 @+ U+ ]1 l, L$ g- g, Q5 z
[Blade Sentinel] Summons a pet at the user's location. The pet will not be selected by enemies, but can be harmed and even killed by colliding with incidental missiles and explosions. This also allows for Blade Sentinel to move between the user and selected location (requires monstats.txt: AI=BladeCreeper), but otherwise Blade Sentinel's vanilla features (e.g. the way it hurts things it moves into and its duration) are not controlled by functions.
3 [$ M$ Z/ U  R1 b(srvdofunc=44)
% F$ s# c$ J/ B% E9 |& a  }" m(aurastat1-6; applied to the summon)( R. |8 K" g; V$ b& }7 c% O6 h
(passivestat1-5; applied to the summon)
/ \2 N" N/ G- |- X9 [0 R5 c$ ?# h/ x(summon=,pettype=,petmax=,sumsk1-5=)0 k  L* S3 I) z- |1 V
(tohit,levtohit,tohitcalc)
/ G. H, P2 r9 j/ \- w+ z( I/ Y  E! h; G(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)
1 ~( f$ @4 E! h  P5 [2 m4 v; d7 h$ Z- a  r6 z3 S

) E; p" N/ z+ S8 \. h5 b# j5 A0 `[Charged Bolt Sentry][Wake of Fire][Lightning Sentry][Wake of Inferno][Death Sentry] Summons a pet at the selected location. The pet will not be selected by enemies, but can be harmed and even killed by colliding with incidental missiles and explosions.
' A- {! j" J- A8 _* ?- ?1 m(srvdofunc=45)7 A) w9 U. p( t) {2 l/ Y2 `, ]
(aurastat1-6; applied to the summon)1 t+ ~6 }0 q( l1 Z! x
(passivestat1-5; applied to the summon)
  R5 p9 J4 ?& J- _- x6 i) c' \4 U8 T* j(summon=,pettype=,petmax=,summode=,sumsk1-5=)5 v4 e$ C4 v' u3 {/ W
(tohit,levtohit,tohitcalc)3 m: K* W( g/ S
(srcdam=,mindam/maxdam; srcdam is the percentage of its base damage from monstats, mindam/maxdam is added damage, but these only apply if the monstats.txt entry is linked via the "SkillDamage" column)
0 j# Q/ C, `3 K! m. b% Q8 T4 M7 o# q6 f+ ^
-----7 v0 d7 `* _  Y- S. r

  d4 p: T7 s$ h2 R
* ]. D2 g- m) r+ v/ X+ U[SUMMONS]
' b" g: S( |9 {( A0 I+ Y) p2 O5 e! \: K

3 S( n: C: Z" z% p" R[MagottLay] Spawns a summon at the user. There is an odd hinderance that occurs after each use, which requires you to move before you can summon again. You can use a sequence with multiple activation frames to summon multiple times, but it'll still lock up after using them up (until you move). Note that the summon also includes minion1/2 and min/maxgrp, so you can spawn large armies.6 }7 H5 R% `, S" [/ N
(srvdofunc=87)
! X7 {. k6 f; \' W) R0 a% m4 G(summon=,summonmode=; summon creates the monster, and summonmode controls the animation the summon plays on spawning; minion1/2 and min/maxgrp of the summon are also spawned alongside it)4 p8 d& M$ ], P+ r7 T: g& w
: i4 m% ]) w/ s
[MinionSpawner] Spawns a single defined monster, also using the monstats.txt: minion1/2,mingrp/maxgrp of the defined monster (meaning it can spawn up to 3 different monsters and also allowing you to spawn more than a single monster). The monster (but not minion1/2) cannot be selected, but can be killed by area of effect.
3 i7 w8 ~) x% I3 h2 V(srvstfunc=62,srvdofunc=135)$ ]6 S2 _7 |9 p! ~& Y
(summon=,summode=; the specific monster to create along with its minion1/2,mingrp/maxgrp columns in monstats.txt; summode determines which animation it plays on spawning)
. Q* c5 i9 t- d" ^" m+ l# B* t
2 O5 [/ r( m, l3 o2 J2 Q0 V7 T[MaggotEgg] Spawns one or more of a specific monster, also using the monstats.txt: minion1/2,mingrp/maxgrp of the defined monster (meaning it can spawn packs of up to 3 different monsters). The monsters spawned by the summon column (meaning not minion1/2) use anim S1 (so you'll want to either make sure the monsters are damaged/knocked back/etc as soon as they spawn so that they are immediately kicked out of their non-existent animation, or add in S1 animdata for those monsters).. W4 g) ^$ `+ ]1 \8 I4 b0 p( s
(srvdofunc=84; also uses srvstfunc=43 in vanilla, but it only seems to change where the summons spawn, so it may or may not be desirable over some other srvstfunc)
9 U1 y/ W1 S( F; J4 M(summon=; the specific monster to create along with its minion1/2,mingrp/maxgrp columns in monstats.txt; the specific monster always is spawned with anim S1, which most monsters do not have)
' @+ b7 H: f5 y3 a3 o- Z2 a(clc1=number of summons to spawn; limit depends on the size of the monster with a box-sized area around the user being available to fill up, anything beyond that area will not spawn, meaning smaller monsters have a higher limit)9 f6 U# `+ y  @7 v. m* D2 H
(NOTE: vanilla maggotegg uses cltdofunc=46, but it doesn't seem to do anything)
! _- E! z# x/ P' E& X0 l( z; \+ z6 _& `
[Nest] Spawns a defined monster. You get permanently stuck after doing so. Also causes crashes when the user is blinded by Cloak of Shadows, so I'd recommend replacing this entirely with MinionSpawner.
% T. ?# i8 K" x! R7 k( P- \8 r(srvstfunc=49,srvdofunc=91)
8 Z& w- w% L* L- ~" ~  Z(cltstfunc=36,cltdofunc=50)
1 z" I+ c( q) h' f(summon=,summode=; the specific monster to create along with its minion1/2,mingrp/maxgrp columns in monstats.txt; summode determines which animation it plays on spawning)
" M# {3 j. X4 e' Z7 ]" ]
- H/ p+ m! P! l[Baal Tentacle] Spawns 1-4 of the first monster in monstats.txt (in vanilla, skeleton1) that are unselectable until you move really far away from them. They are spawned around the selected target, unless there aren't any around, in which case they spawn around the user. Doesn't actually make use of the summon column.+ {" w7 d( Z! D
(srvdofunc=140)
' L1 `5 \. o, @" W( c% M: _
! d' x/ [4 T, h[Impregnate] Makes it so the afflicted monster summons one or more monsters on death; hardcoded to only use the Pregnant state (this means it can be disabled by applying the Pregnant state via some other aurastate applying means); the monster inherits all of its stats from MonStats.txt. Monsters with baseid=putriddefiler1 or baseid=painworm1 cannot be impregnated. Summoned monsters are also accompanied by min/maxgrp minion1/2. If the monsters are chained via nextinclass, then both monlvlex (the area level of levels.txt) and level (the monster level of monstats.txt) are considered: the highest level monster in the chain that is at least of an equal level to the area level will be selected. This means you can produce 99+ different summons from a single skill, making it incredibly useful.+ }* y6 U- P+ a9 M
(srvdofunc=133)+ ~- i! l/ X" N& `3 o, o/ n# m4 B
(summon=monster spawned after the death of the host; the monster is summoned according to a chain based on monster level)4 h9 _/ @7 D) T5 U2 H0 P3 d0 ?0 ^% D/ J
(summon=,summode=; the specific monster to create along with its minion1/2,mingrp/maxgrp columns in monstats.txt; summode determines which animation it plays on spawning)
) ~2 O% U* F0 Q8 T" q) H( W2 b: i0 [/ i
-----
- l. P+ U8 b) I' [; S" s
% ?6 {$ i5 K  c5 C1 z  R1 F5 |+ Y) j, u3 e
[USEFUL CLTFUNCS]0 X3 R% z$ B1 K1 A/ C

  r# u5 @3 ]1 L0 G0 o# g* o+ J# R: g! I
[Cloak of Shadows] Prevents the user from using a skill again until the aurastate runs out. This can work as a kind of softcoded skill delay to any skill that applies an aurastate controlled by auralencalc.8 j# N8 s4 p" V" i
(cltstfunc=7)
9 X/ O+ b5 h& H& r2 l2 ^) |1 g0 @! v( \& i9 }: U- f- \- @
------ Y' w( s& B: Y! L) q3 h
/ w% v( m  ~5 u( Q* c1 y* W& a
* K3 m4 v0 l) s8 S
[GENERALIZED NON-FUNCTIONS]3 E2 h9 v4 e8 x

+ w* ]' Z( F4 d  K/ w5 Q
4 i, f" P/ E; m% N3 a. K[Energy Shield] If the user gains a state, then damage can be absorbed by mana.
' ?7 S* k# a& c(aurastate=,auralencalc,auraevent,auraeventfunc; auraevent and its auraeventfunc should be absorbdamage/24)
( h6 r( {9 F3 E# n3 }(clc1=; what percent of damage is taken from mana before life, capped at 95%)
2 O! o7 d% j* @  O: E(clc2=; resistance to all non-poison damage types, with each increment being worth 6.25%, with 32 being -100% resistance, 31 being -93.75% resistance and so on; I've read on the d2mods forum that it breaks below the value of 16, but this is definitely not true, it is effective down to a value of 1, or the equivalent of 93.75% resistance; there seems to be no upper limit, I was able to get to at least 256, or -300% resistance, and it seems like it may have even worked up to 1024 but I didn't thoroughly check at that point)' {3 d- k% i) s1 t; f3 i( Y

6 |1 S* R4 u* z3 B
4 c' U- L$ K( }- L- f2 N; L% N[Raven] The limited number of hits is based on monstats.txt: skill1. Whatever skill1 is, the number of hits will be equivalent to ln56 of that skill. This only applies if using AI=Raven.: O  e- j% G! [4 q- i; X+ {
/ z# m$ c4 }5 v

2 u0 W* l$ o5 B, H* I% C" J[Charged Bolt Sentry][Wake of Fire][Lightning Sentry][Wake of Inferno][Death Sentry] The limited number of shots is based on monstats.txt: skill1. Whatever skill1 is, the number of shots will be equivalent to clc4 of that skill. This only applies if using AI=AssassinSentry.
2 ~% B0 |% e& r4 X5 S  l
- \) L- b4 a0 z0 p$ i0 {& @. s- M! t/ z" ^5 Q
[Blade Sentinel] The duration and hitting of this skill is based on monstats.txt and missiles.txt, which open up clc4 and srvmissilea to be borrowed by the summon. Srvmissilea is released only once on initial use. AI=BladeCreeper is required for any of this to work.
, |$ K0 ?, x/ o7 F7 t(srvmissilea=the missile that the summon releases; is released only once)+ q/ b( ^+ ^0 k6 ?: e  e
(clc4=duration, how long the summon lasts in frames)6 r9 f) s! p) W8 s+ {  _1 o9 S
$ N9 {& E4 M1 ]: b

" z0 j$ `8 p  Q1 F[Shadow Warrior][Shadow Master] Their power to use skills has nothing to do with the function, only AItype (see: https://d2mods.info/forum/viewtopic.php ... dow+master for a good explanation) and AI=ShadowWarrior or ShadowMaster (with ShadowWarrior using your current skills and ShadowMaster using any skills with AItype). This is very fortunate since their function (srvdofunc=49) does nothing useful, but breaks a lot of features that work for every other summon. The only reason these skills do not cast Shadow Warrior and Shadow Master in vanilla (which would cause a crash) is apparently because of hardcoding, cloning one of these skills will allow them to cast it (and crash the game). It is worth noting that ShadowMaster will only cast skills given to her via Monstats.txt Sk1-8 and with AItype that is either of no class or of the same class as the caster (so if some skills with charclass=sor have AItype and a sorceress makes the ShadowMaster, then the ShadowMaster will use those skills).
& `( G' d+ c, A# A! @; Y: E/ l( t/ v( ?/ x2 S$ F1 T+ S' O
神话战网出品,必出精品!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|神话暗黑 ( 陕ICP备18004004号-1 )

GMT+8, 2024-12-22 09:25 , Processed in 0.087433 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表