;---------------------------------------------------------------------------
; States that are always executed (use statedef -2)
;---------------------------------------------------------------------------
[Statedef -2]
; Configuration section:
; This part of the file can be changed.
; Previous had var used for scaling bars, now rendered redundant.
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------

[State -2, display]
type = displaytoclipboard
trigger1 = 1
text = "werewood - A.I. var(59) = %d"
;text = "cmcft = %d,v50 = %d,v58 = %d,v59 = %d"
;params = Const(movement.crouch.friction.threshold),var(50),var(58),var(59)
params = var(59)

[State -2, Powerset] ;temp....
type = null;Powerset
trigger1 = 1
value = 1000

[State -2, varset] ;reset dizzy
type = varset
trigger1 = movetype != H && time < 200 & time > 150
v = 33
value = 0

[State -2, PalFX]
type = PalFX
trigger1 = PalNo = [7,12]
time = -1
add = 45, 45, 45
mul = 162, 178, 214
color = 22

[State -2, reset crouching light punch & kick]
type = VarSet
triggerall = stateno = [0,155]
trigger1 = stateno != [10,12]
v = 41
value = 0

[State -2, prevent infinite Shoryuken in corner]
type = VarSet
trigger1 = p2statetype != A
v = 44
value = 0

[State -2, reset 3rd Shoryuken]
type = VarSet
trigger1 = statetype != A
v = 11
value = 0

[State -2, reset Yosokyaku]
type = VarSet
trigger1 = statetype != A
v = 12
value = 0

[State -2, reset Tanden Engine]
type = VarSet
triggerall = stateno != [1200,1230]
trigger1 = p2bodydist x > 65
trigger2 = pos y < 0
v = 13
value = 0

[state -3, clear v50] ;A.I.
type = varset
trigger1 = stateno = [120,155]
trigger2 = movetype = H
v = 50
value = 0

[state -3, clear v58] ;A.I.
type = varset
trigger1 = stateno = [120,155]
trigger2 = movetype = H
v = 58
value = 0

[State -2, AssertSpecial] ;No Air Guard
type = AssertSpecial
trigger1 = 1
flag = noairguard 

[State -2, 1]
type = varset
trigger1 = Var(3)>= 36
trigger1 = time > 18
v = 36
value = 1

[State -2, 1]
type = PlaySnd
trigger1 = Var(3)>= 36
trigger1 = movetype = H
trigger1 = timemod = 13,0
channel = 5
value = 2000, 1
persistent = 0
ignorehitpause = 1

[State -2, 1]
type = StopSnd
trigger1 = Var(36) = 1
channel = 5
persistent = 1
ignorehitpause = 1

[State -2, 1]
type = varset
trigger1 = Var(3)= 75
trigger1 = time > 22
v = 37
value = 1

[State -2, 1]
type = PlaySnd
trigger1 = Var(3)= 75
trigger1 = movetype = H
trigger1 = timemod = 14,0
channel = 6
value = 2000, 2
persistent = 0
ignorehitpause = 1

[State -2, 1]
type = StopSnd
trigger1 = Var(37) = 1
channel = 6
persistent = 1
ignorehitpause = 1

;Ultra Bar summon (selects scale based on resolution in mugen.cfg)
[State -2, ultra bar helper]
type = Helper
trigger1 = !NumHelper(20)
helpertype = normal
name = "Bar"
ID = 20
stateno = 2100 ;ifelse(gameheight = 180,2000,2100)
postype = back
pos = 40,-20
bindtime = -1
removetime = -1
ignorehitpause = 1
facing = 1
ownpal = 1
size.xscale =0.25
size.yscale =0.25
persistent = 1

;Sets the ultra var at the start of each round
[State -2, ultra value at roundstate]
type = varset
trigger1 = roundstate = 1
var(3) = 0

;Limits the var to a value of 75, which is the max value
[State -2, ultra value limit]
type = varset
trigger1 = var(3)>=75
trigger1 = 1
var(3) = 75

;Resets the ultra var when you use ultra moves, with KFM's new ultra states as examples.
[State -2, ultra reset upon ultra use]
type = varset
trigger1 = stateno = 3001 ;|| stateno = 3052
var(3) = 0

;This adds to the ultra var through conventional damage
[State -2, adding to ultra value due to damage]
type = varadd
triggerall = var(3)<=75 && movetype = H
triggerall = var(59) != 1
trigger1 = gethitvar(damage)
var(3) = gethitvar(damage)/6

[State -2, adding to ultra value due to damage]
type = varadd
triggerall = movetype = H
triggerall = var(59) != 1
trigger1 = gethitvar(damage)
var(33) = gethitvar(damage)/6

;This adds to the ultra var through custom states using lifeadd
[State -2, adding to ultra value due to lifeadd]
type = varadd
triggerall = var(59) != 1
triggerall = var(3)<=75 && movetype = H
trigger1 = !gethitvar(damage) && time = 1
var(3) = var(6)/6

;This adds to the ultra var through conventional damage
[State -2, adding to ultra value due to damage]
type = varadd
triggerall = var(3)<=75 && movetype = H
triggerall = var(59) = 1
trigger1 = gethitvar(damage)
var(3) = (gethitvar(damage)/6)/4

[State -2, adding to ultra value due to damage]
type = varadd
triggerall = movetype = H
triggerall = var(59) = 1
trigger1 = gethitvar(damage)
var(33) = (gethitvar(damage)/6)/4

;This adds to the ultra var through custom states using lifeadd
[State -2, adding to ultra value due to lifeadd]
type = varadd
triggerall = var(59) = 1
triggerall = var(3)<=75 && movetype = H
trigger1 = !gethitvar(damage) && time = 1
var(3) = (var(6)/6)/4

;These next sctrls track the changes in life total for the above sctrl
[state -2, Life measure 1]
type = varset
trigger1 = 1
var(4) = var(5)

[State -2, Life measure 2]
Type = VarSet
Trigger1 = 1
var(5) = life

[State -2, anti-life equation]
type = varset
trigger1 = 1
var(6) = var(4)-var(5)
ignorehitpause = 1

;Alright, here's the value you'll want to use in the ultra states themselves.
;To add damage according to what the ultra value was, you need to use the following
;line in your related hitdefs: damage=[Starting damage]+(var(7)/5),[Block damage]

;Records the ultra var value and stores it beyond the ultra usage.
[State -2, former ultra bar value]
type = varset
trigger1 = var(3)>0 && time = 0
var(7) = var(3)
ignorehitpause = 1

;Resets that recorded value once the ultra is over/ you've been hit out of it.
[State -2, former ultra bar value reset to normal]
type = varset
trigger1 = stateno = 3001 && !animtime || stateno = 3052 && !animtime
trigger2 = movetype = H && prevstateno = 3001 || movetype = H && prevstateno = 3052
var(7) = var(3)
ignorehitpause = 1

; Focus attack / Saving Strike code (Part A)
;The later half of this negative coding can be found under statedef -3
[State -2, Focus Attack meter reset when no longer charging]
type = VarSet
trigger1 = (stateno !=[1500,1501]) && ((stateno=[5000,5099]) && prevstateno != 1500)
trigger2 = stateno = [100,105]
fv = 9
value = 0

[State -2, life return removed if hit while refilling]
type = VarSet
trigger1 = var(21) && stateno !=1501 && movetype = H
var(21) = 0

[State -2, Life return if left alone]
type = LifeAdd
trigger1 = (stateno != [1501,1502]) && var(21) && (Gametime%6)=1
value = 1
absolute = 0

[State -2, life return if left alone]
type = VarAdd
trigger1 = (stateno != [1501,1502]) && var(21) && (Gametime%6)=1
v = 21
value = -1

;---------------------------------------------------------------------------
; States that are executed when in self's state file (use statedef -3)
;---------------------------------------------------------------------------
[Statedef -3]

[State -3, Prevent Crossup]
type = width
trigger1 = 1
edge = 4,0
ignorehitpause = 1

[State -3, Genocide Shot or Death Throw]
type = ChangeState
triggerall = var(59) = 1
triggerall = enemynear, numproj = 0
triggerall = var(58) != 1
triggerall = RoundState = 2
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = MoveType != A
triggerall = p2statetype != A
triggerall = P2MoveType != H
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
trigger1 = p2bodydist X <= 20
value = ifelse(random <= 499, 800, 805)
persistent = 0

[State -3, Normal Attacks]
type = ChangeState
triggerall = var(59) = 1
triggerall = enemynear, numproj = 0
triggerall = RoundState = 2
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = p2statetype != A
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
trigger1 = p2statetype != A
trigger1 = (p2bodydist X > 20) && (p2bodydist X < 80)
value = ifelse(random <= 299, 210, ifelse(random <= 800 && random >= 300, ifelse(random <= 999 && random >= 801, 240, 440), 250))
persistent = 0

[State -3, Jump in || FC || Tanden Engine]
type = ChangeState
triggerall = var(59) = 1
triggerall = RoundState = 2
triggerall = var(50) != 1
triggerall = stateno = [0,20]
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = p2statetype != A
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
trigger1 = p2bodydist X >= 80 && p2bodydist X <= 110
value = ifelse(random <= 499, 40, ifelse(random <= 750, 1500, 12200))
persistent = 0

[State -3, Vall Jump]
type = ChangeState
triggerall = var(59) = 1
triggerall = RoundState = 2
triggerall = stateno = [0,20]
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
trigger1 = p2bodydist X > 230
value = 40
persistent = 0

[State -3, FC]
type = null;ChangeState
triggerall = var(59) = 1
triggerall = RoundState = 2
triggerall = stateno = [0,20]
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
trigger1 = p2bodydist X > 110 && p2bodydist X < 150
value = 1500
persistent = 0

[State -3, Sonic Boom]
type = ChangeState
triggerall = var(59) = 1
triggerall = enemynear, numproj = 0
triggerall = RoundState = 2
triggerall = stateno = [0,20]
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
trigger1 = p2bodydist X > 110 && p2bodydist X <= 230 ;X >= 150 && p2bodydist X <= 190
value = ifelse(power >= 250, 1030, 1000)
persistent = 0

[State -3, Yoga Teleport]
type = ChangeState
triggerall = var(59) = 1
triggerall = enemynear, numproj = 0
triggerall = RoundState = 2
triggerall = stateno = [0,20]
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = p2statetype = A
triggerall = p2movetype != H
triggerall = p2bodydist X < 50
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
trigger1 = BackEdgeBodyDist <= 7
value = 18888
persistent = 0

[State -3, Yoga Teleport]
type = ChangeState
triggerall = var(59) = 1
triggerall = enemynear, numproj != 0
triggerall = RoundState = 2
triggerall = stateno = [0,20]
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
trigger1 = 1 ;p2bodydist X > 190 && p2bodydist X <= 230
value = 1888
persistent = 0

[State -3, Shoryuken]
type = ChangeState
triggerall = var(59) = 1
triggerall = enemynear, numproj = 0
triggerall = RoundState = 2
triggerall = prevstateno != 5120
triggerall = stateno = [0,20]
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
triggerall = p2statetype = A
;trigger1 = Random <= 99
trigger1 = p2statetype = A
trigger1 = P2stateno != 5050
trigger1 = p2movetype != H
trigger1 = p2bodydist X < 50
value = ifelse(power >= 250, 1130, 1100)
persistent = 0

[State -3, Shoryuken]
type = null;ChangeState
triggerall = var(59) = 1
triggerall = RoundState = 2
triggerall = prevstateno = 5120
triggerall = stateno = [0,20]
triggerall = stateno != [200,1600]
triggerall = prevstateno != [200,1600]
triggerall = statetype != A
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
;trigger1 = Random <= 99
;trigger1 = P2stateno != 5050
;trigger1 = p2movetype != H
trigger1 = p2bodydist X <= 5
value = ifelse(power >= 250, 1130, 1100)
persistent = 0

[State -3, Tanden Stream]
type = ChangeState
triggerall = var(59) = 1
triggerall = var(3) >= 36
triggerall = RoundState = 2
triggerall = stateno != [200,5900]
triggerall = prevstateno != [200,5900]
triggerall = statetype = S
triggerall = movetype != H
triggerall = MatchOver = 0
triggerall = ctrl = 1
triggerall = alive
triggerall = p2life > 1
triggerall = Win = 0
triggerall = life <= 400
;trigger1 = Random <= 99
trigger1 = 1
value = 3001

[State -3, get hit voices]
type = VarRandom
trigger1 = 1
v = 52
range = 13,15

[State -3, get hit voices]
type = VarRandom
trigger1 = 1
v = 53
range = 16,18

[State -3, get hit voices]
type = VarRandom
trigger1 = 1
v = 54
range = 19,21

; Focus attack / Saving Attack code (Part B)
;-----------------------------
[state -3, animelem set frame 1]
type = varset
trigger1 = stateno = 1500 && time = 1
var(22) = 1

[state -3, animelem set frame 2]
type = varset
trigger1 = stateno = 1500 && animelem = 2
var(22) = 2

[state -3, animelem set frame 3]
type = varset
trigger1 = stateno = 1500 && animelem = 3
var(22) = 3

[State -3, Change to second state]
type = HitOverride
trigger1 = stateno = 1500
attr = SCA,NA,SA,HA,NP,SP,HP
slot = 0
stateno = 1501
time = 1
forceair = 0
ignorehitpause = 1
persistent = 1

[state -3, varset for first state]
type = varset
trigger1 = stateno = 1500
var(20) = 1

[state -3, varset for second state]
type = varset
trigger1 = stateno = 1501
var(20) = 0

[state -3, lost health tally in second state]
type = varset
trigger1 = stateno = 1501 && time = 0
var(21) = (gethitvar(damage))

[State -3, health removal in second state]
type = LifeAdd
trigger1 = stateno = 1501
value = -(gethitvar(damage))
kill = 1

[State -3, Dash forward]
type = PlaySnd
triggerall = Time = 1
trigger1 = stateno = 100 ;
value = 40, 1

[State -3, Dash back]
type = PlaySnd
triggerall = Time = 1
trigger1 = stateno = 105 ;
value = 40, 0

[State -3, run spark]
type = Explod
triggerall = !numexplod(10001)
trigger1 = stateno = 100 && time = 1
anim = 10001
ID = 10001
pos = 0,0
postype = p1
facing = 1
bindtime = 1
removetime = -2
scale = 0.25,0.25
sprpriority = 2
ontop = 0
shadow = 0,0,0
ownpal = 1
removeongethit = 0
ignorehitpause = 1
pausemovetime = -1
supermovetime = -1
persistent = 1

[State -3, Cheap KO] ;POTS' Ryu
type = changestate
triggerall = !alive && (stateno = [5000,5010]) && (stateno != 5130)
trigger1 = (p2stateno = [200,209]) || (p2stateno = [230,239]) || (p2stateno = [230,239]) || (p2stateno = [400,409]) || (p2stateno = [430,439])
trigger2 = (p2stateno = [600,609]) || (p2stateno = [630,639])
trigger3 = (prevstateno = [130,131]) || (prevstateno = [140,141]) || (prevstateno = [150,153])
value = 1504
ignorehitpause = 1

[State -3, attack up for ai]
type = AttackMulSet
trigger1 = var(59) != 1
value = 1.65
persistent = 0
ignorehitpause = 1

[State -3, defense up for ai] ;;;;;;;;;;;;;;broken...........
type = null;DefenceMulSet
trigger1 = var(59) != 1
value = 0.0000000001
persistent = 0
ignorehitpause = 1
