;---------------------------------------------------------------------------
;Throw - Attempt
; CNS difficulty: medium-advanced
; Description: Throws are not difficult to make, although then can be
; tedious at times. Throw attempt states have a HitDef of a
; special format. The key parameters in a throw are p1stateno
; and p2stateno. If the HitDef successfully connects, then
; the attacker will change to the state number specified by
; p1stateno, and the opponent will be change to the state
; number assigned to p2stateno. The special thing about p2stateno
; is that the opponent will be temporarily brought into the
; attacker's state file. In this case, no matter who the
; opponent is, he will be taken to state 820 of this file (kfm.cns)
; and remain here until the end of the throw (look at his debug
; information when he is being thrown; the text changes to yellow
; to mean that he is in another player's state file).
[Statedef 800]
type = S
movetype= A
physics = S
juggle = 0
velset = 0,0
ctrl = 0
anim = 800
sprpriority = 3
; Notes: The '-' symbol in the hitflag field means that it only affects
; players who are not in a hit state. This prevents KFM from combo-ing
; into the throw. The priority should be set to a low number, such as
; 1 or 2, so that the throw does not take precedence over normal attacks.
; The type of priority must always be set to "Miss" or "Dodge" for throws,
; otherwise strange behavior can result.
[State 800, 1]
type = HitDef
Trigger1 = Time = 0
attr = S, NT ;Attributes: Standing, Normal Throw
hitflag = M- ;Affect only ground people who are not being hit
priority = 1, Miss ;Throw has low priority, must be miss or dodge type.
sparkno = -1 ;No spark
p1sprpriority = 1 ;Draw p1's sprite in front of p2
;p2's sprite priority is set to 0 by default
p1facing = 1
p2facing = 1 ;Force p2 to face KFM
p1stateno = 810 ;On success, KFM changes to state 810
p2stateno = 820 ;If hit, p2 changes to state 820 in KFM's cns
guard.dist = 0 ;This prevents p2 from going into a guard state if close
fall = 1 ;Force p2 into falling down
[State 800, 2]
type = ChangeState
Trigger1 = AnimTime = 0
value = 0
ctrl = 1
;---------------------------------------------------------------------------
;Throw - Throwing the opponent
; Description: In this state, KFM throws the opponent by binding him to
; various offsets based on his current frame of animation. For
; example, [State 810, Bind 1] binds the opponent to an offset of
; 28 pixels in front of KFM. That puts him around where KFM's hand
; is at. Is is important to keep the opponent bound using a
; TargetBind controller at all times, until you let him go. This
; is especially important if your player has a Clsn2 box that
; allows him to get hit while throwing someone. Each time a player
; gets hit, all his bound targets will be set to a fall state. If
; the opponent is not bound, then he may get stuck in his thrown
; state when his attacker is knocked out of the throw halfway.
; Notes: There is a TargetLifeAdd controller to decrease the opponent's
; life, and a TargetState controller to change his state to a
; falling state when KFM lets go of him.
[Statedef 810]
type = S
movetype= A
physics = N
anim = 810
poweradd = 0
sprpriority = 3
[State 810, NoHit]
type = NotHitBy
trigger1 = 1
value = SCA
[State 810, Grab Sound]
type = PlaySnd
trigger1 = AnimElem = 1
value = 1, 1
[State 810, Throw Sound]
type = PlaySnd
trigger1 = AnimElem = 4
value = 800, 0
[State 810, NoPush]
type = PlayerPush
trigger1 = 1
value = 0
[State 810, Bind 1]
type = TargetBind
trigger1 = AnimElemTime(2) < 0
pos = 120, -120
[State 810, Bind 2]
type = TargetBind
trigger1 = AnimElemTime(2) >= 0 && AnimElemTime(3) < 0
pos = 80, -480
[State 810, Bind 3]
type = TargetBind
trigger1 = AnimElemTime(3) >= 0 && AnimElemTime(4) < 0
pos = 30, -540
[State 810, Bind 4]
type = TargetBind
trigger1 = AnimElemTime(4) >= 0 && AnimElemTime(5) < 0
pos = -30, -590
[State 810, Bind 5]
type = TargetBind
trigger1 = AnimElemTime(5) >= 0 && AnimElemTime(6) < 0
pos = -120, -520
[State 810, Bind 6]
type = TargetBind
trigger1 = AnimElemTime(6) >= 0 && AnimElemTime(7) < 0
pos = -180, -460
[State 810, Hurt 7]
type = TargetLifeAdd
trigger1 = AnimElem = 7
value = -80
kill = IfElse(var(5)!=0, 0, 1)
[State 810, PowerAdd]
type = TargetPowerAdd
trigger1 = AnimElem = 7
value = 40
[State 810, Throw 11]
type = TargetState
trigger1 = AnimElem = 7
value = 821
[State 810, State End]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
;---------------------------------------------------------------------------
;Thrown by Kung Fu Throw
; (a custom gethit state)
; Description: This is the state that the opponent changes to after being
; hit by KFM's throw HitDef. The important thing here is to use a
; ChangeAnim2 controller. The difference between ChangeAnim2 and
; ChangeAnim is that ChangeAnim2 changes the player's animation to
; an action in the AIR file of the attacker (in this case, kfm.air),
; whereas ChangeAnim always changes the player to an action in his
; own AIR file. Look at Action 820 in kfm.air for some extra
; comments.
[Statedef 820]
type = A
movetype= H
physics = N
velset = 0,0
sprpriority = 2
[State 820, 1]
type = ChangeAnim2
Trigger1 = Time = 0
value = 820
;In case attacker loses binding on player for any reason, this controller
;guarantees that the player will never get stuck in this thrown state.
[State 820, 2]
type = SelfState
trigger1 = !gethitvar(isbound)
value = 5050
;---------------------------------------------------------------------------
;Thrown by Kung Fu Throw - thrown into the air
; (a custom gethit state)
; Description: This state has the opponent flying through the air and
; falling down onto the ground. The SelfState controller sets the
; opponent back using to his own state file when he his the ground.
; Controllers 821,2 and 821,3 allow the opponent to recover by
; hitting his recovery command when he is falling.
[Statedef 821]
type = A
movetype= H
physics = N
velset = 11.2,-28
poweradd = 40
sprpriority = 2
[State 821, 1] ;Gravity
type = VelAdd
Trigger1 = 1
y = 1.6
[State 821, 2] ; Recover near ground (use ChangeState)
type = ChangeState
triggerall = Vel Y > 0
triggerall = Pos Y >= -80
triggerall = alive
triggerall = CanRecover
trigger1 = Command = "recovery"
value = 5200 ;HITFALL_RECOVER
[State 821, 3] ; Recover in mid air (use SelfState)
type = SelfState
triggerall = Vel Y > 0
triggerall = alive
triggerall = CanRecover
trigger1 = Command = "recovery"
value = 5210 ;HITFALL_AIRRECOVER
[State 821, 4] ;Hit ground
type = SelfState
trigger1 = Vel Y > 0
trigger1 = Pos Y >= 0
value = 5110 ;Hit ground