;---------------------------------------------------------------------------
; States that are always executed (use statedef -2)
;---------------------------------------------------------------------------
[StateDef -2]

;==================================================================================
;======| RELACIONADO  AI - AI RELATED |===========================================
;==================================================================================

[State -2, AI Type]
type = VarSet
trigger1 = 1
var(7) = 4
; 0 = nonexistant
; 1 = weak
; 2 = medium
; 3 = tough
; 4 = boss
; 5 = Ironcommando-type cheapness
; 6 = Suicide

[State -2, EZ-combo?]
type = VarSet
trigger1 = !var(0)
trigger2 = !var(59)
var(16) = 0
; 0 = off
; 1 = on

[State -2, Child-Friendly mode?]
type = VarSet
trigger1 = 1
var(20) = 0
; 0 = off
; 1 = on

;DO NOT TOUCH ANYTHING BELOW HERE!!!

[State -2, No EZ-combo]
type = VarSet
trigger1 = var(0)
trigger2 = var(59) = 1
var(16) = 0

; Within StateDef -2, none of your own AI-related code should be placed
; above these next two controllers.

[State -2, AI Type]
type = VarSet
trigger1 = var(7)>0
trigger1 = palno = 11
var(7) = 4

[State -2, StopAI]
type = VarSet
triggerall = (var(59) > 0)
trigger1 = (RoundState != 2)
trigger2 = !Alive
var(59) = -2
IgnoreHitPause = 1

; This controller is optional.  It allows you treat the AI flag as a boolean
; value rather than an integer value, letting you trigger your AI directives
; with "var(0)" instead of "var(59)>0", and letting you make moves usable only
; by humans by using "!var(0)" instead of "var(59)<1", thus slightly improving
; the size and efficiency of your code.
; Another benefit is that it makes it much easier for users to disable your AI,
; if they so choose.

[State -2, Simplifier]
type = VarSet
trigger1 = (var(59) = 1)
trigger2 = (var(0):=0)
var(0) = 1	; Another option is to replace 1 with something like MatchNo, if
		; you want to design your AI to have varying levels of difficulty.
IgnoreHitPause = 1

[State -2, Banana reload]
type = VarAdd
trigger1 = var(6)>0
var(6) = -1

[State -2, Banana reload CHEAP AI]
type = VarSet
trigger1 = var(6)>0
trigger1 = var(0)
trigger1 = var(7)>=5
trigger2 = palno >=11
var(6) = 0

[State -2, Damage Dampener]
type = VarAdd
triggerall = movehit
triggerall = movetype = A
triggerall = var(8)<11
triggerall = var(9)<=0
trigger1 = stateno = [200,650]
var(8) = 1
ignorehitpause = 0

[State -2, Damage Dampener]
type = VarAdd
triggerall = movehit
triggerall = movetype = A
triggerall = var(8)<12
triggerall = var(9)<=0
trigger1 = stateno = 420
var(8) = 1
ignorehitpause = 0

[State -2, Damage Dampener]
type = VarAdd
triggerall = movehit
triggerall = movetype = A
triggerall = var(8)<11
triggerall = var(9)<=0
trigger1 = stateno = 700
trigger2 = stateno = 710
var(8) = 1
ignorehitpause = 0

[State -2, Damage Dampener]
type = VarSet
triggerall = var(8)<6
triggerall = var(9)<=0
trigger1 = numhelper(1011)
trigger1 = helper(1011),movehit
var(8) = 6
ignorehitpause = 0

[State -2, Damage Dampener]
type = VarSet
triggerall = movehit
trigger1 = stateno = [200,650]
trigger2 = stateno = 700
trigger3 = stateno = 710
var(9) = 1
ignorehitpause = 0

[State -2, Damage Dampener]
type = VarSet
triggerall = numenemy
trigger1 = enemynear, movetype != H
trigger2 = moveguarded
trigger3 = stateno = [703,707]
var(8) = 0
ignorehitpause = 1

[State -2, Damage Dampener]
type = VarSet
trigger1 = palno = 11
trigger2 = var(0)
trigger2 = var(7)>=5
var(8) = 0
ignorehitpause = 1

[State -2, Damage Dampener]
type = VarSet
trigger1 = stateno = 1041
trigger1 = var(8)
trigger1 = var(19)
var(8) = 0
ignorehitpause = 1

[State 0, DisplayToClipboard]
type = DisplayToClipboard
trigger1 = 1
text = "(8)= %d, (7)= %d, f(6)= %f, p2dist Y= %f, (16)= %d"
params = var(8), var(7), fvar(6), p2dist Y, var(16)
ignorehitpause = 1

[State 0, AttackMulSet]
type = AttackMulSet
triggerall = movehit
triggerall = movetype = A
triggerall = stateno != [1000,1010]
trigger1 = stateno = [200,650]
trigger2 = stateno = 700
trigger3 = stateno = 710
time = 15
value = 1-(var(8)*0.08)
ignorehitpause = 1

[State 0, AttackMulSet]
type = AttackMulSet
trigger1 = var(8)<=0
time = 1
value = 1
ignorehitpause = 1

[State 0, VarAdd]
type = VarAdd
trigger1 = var(0)
trigger1 = var(11)
var(11) = -1

[State 0, HitOverride]
type = HitOverride
trigger1 = var(0)
trigger1 = var(7)>=6
attr = ,NT,ST,HT
stateno = 900

[State 0, Helper]
type = Helper
triggerall = numhelper(9001)<=0
triggerall = movetype != H
trigger1 = stateno = [1000,1030]
trigger2 = stateno = [1040,1041]
helpertype = normal
name = "speedlines1"
ID = 9001
stateno = 9001
pos = 0,0
postype = p1    ;p2,front,back,left,right
facing = 1
ownpal = 1
supermove = 1
supermovetime = 999999999999
pausemove = 1
pausemovetime = 999999999999
ignorehitpause = 1

[State 0, Helper]
type = Helper
triggerall = numhelper(9002)<=0
triggerall = movetype != H
trigger1 = stateno = 720
helpertype = normal
name = "speedlines2"
ID = 9002
stateno = 9002
pos = 0,0
postype = back
facing = 1
ownpal = 1
supermove = 1
supermovetime = 999999999999
pausemove = 1
pausemovetime = 999999999999
ignorehitpause = 1

[State 0, Helper]
type = Helper
triggerall = numhelper(9003)<=0
triggerall = movetype != H
trigger1 = stateno = [1044,1046]
helpertype = normal
name = "speedlines3"
ID = 9003
stateno = 9003
pos = 0,0
postype = back
facing = 1
ownpal = 1
supermove = 1
supermovetime = 999999999999
pausemove = 1
pausemovetime = 999999999999
ignorehitpause = 1

[State -2, Invulnerable]
type = NotHitBy
trigger1 = roundstate < 2
trigger2 = win
value = SCA,NA,SA,HA,NP,SP,HP,NT,ST,HT
time = 3

[State -2, No Raping Please]
type = NotHitBy
trigger1 = P2name = "SLIME" || P2name = "kuromaru" ;obvious
trigger2 = P4name = "SLIME" || P4name = "kuromaru" ;obvious
trigger3 = P2name = "I-NO" ;Tessa 100%
trigger3 = playerID(var(4)),animexist(2005) ;rape anims detected
trigger3 = playerID(var(4)),animexist(2007) ;rape anims detected
trigger3 = playerID(var(4)),animexist(1805) ;rape anims detected
trigger3 = playerID(var(4)),animexist(1808) ;rape anims detected
trigger4 = P4name = "I-NO" ;Tessa 100%
trigger4 = playerID(var(5)),animexist(2005) ;rape anims detected
trigger4 = playerID(var(5)),animexist(2007) ;rape anims detected
trigger4 = playerID(var(5)),animexist(1805) ;rape anims detected
trigger4 = playerID(var(5)),animexist(1808) ;rape anims detected
value = SCA,NA,SA,HA,NP,SP,HP,NT,ST,HT
time = -1

[State 0, VarSet]
type = VarAdd
trigger1 = var(14)<2
trigger1 = life<=(lifemax/3)
trigger1 = life>0
var(14) = 1
ignorehitpause = 1

[State -2, VarSet]
type = VarSet
triggerall = var(18)
trigger1 = statetype = S
var(18) = 0

[State 0, Null]
type = Trans
trigger1 = palno = 12
trans = add

[State 0, AssertSpecial]
type = AssertSpecial
trigger1 = palno = 12
flag = noshadow

[State 0, NotHitBy]
type = NotHitBy
trigger1 = palno = 12
value = ,AP,AT
time = -1

[State 0, Explod]
type = Explod
trigger1 = var(14) = 1
trigger1 = !numexplod(10000)
trigger1 = teamside = 1
anim = 10000
ID = 10000
pos = 75,50
postype = left
facing = 1
bindtime = -1
removetime = 100
sprpriority = 1000
ontop = 1
shadow = 0,0,0
ownpal = 1
ignorehitpause = 1

[State 0, Explod]
type = Explod
trigger1 = var(14) = 1
trigger1 = !numexplod(10000)
trigger1 = teamside = 2
anim = 10000
ID = 10000
pos = 245,50
postype = left
facing = 1
bindtime = -1
removetime = 100
sprpriority = 1000
ontop = 1
shadow = 0,0,0
ownpal = 1
ignorehitpause = 1

[State 0, PlaySnd]
type = PlaySnd
trigger1 = var(14) = 1
value = S0,7
volume = 255
ignorehitpause = 1

[State 0, VarSet]
type = VarSet
trigger1 = var(14)
trigger1 = life>(lifemax/3)
var(14) = 0
ignorehitpause = 1

[State -2, No EZ-combo]
type = VarSet
trigger1 = var(0)
trigger2 = var(59) = 1
var(16) = 0

[State 0, PosSet]
type = PosSet
trigger1 = pos Y>0
trigger1 = movetype != H
y = 0

;==================================================================================
;DUN DUN DUNNN... CHEAP AI CRAP GOES HERE:

[State 0, CHEAP AI HitOverride]
type = HitOverride
triggerall = var(0)
trigger1 = var(7)>=6
attr = SCA,NA,SA,HA,NP,SP,HP,NT,ST,HT
stateno = 2
time = 100
ignorehitpause = 1

[State 0, CHEAP AI Invincibility]
type = Nothitby
triggerall = var(0)
trigger1 = var(7)=[6,9000]
trigger1 = movetype = A
trigger2 = var(7)>9000
trigger2 = movetype = A || stateno = [1000,2000]
value = SCA,NA,SA,HA,NP,SP,HP,NT,ST,HT
time = 2
ignorehitpause = 1

[State 196, PowerAdd]
type = PowerAdd
triggerall = var(0)
triggerall = var(7) = 6
trigger1 = stateno = 196
trigger1 = life>lifemax/3
value = (powermax/50)

[State 196, PowerAdd]
type = PowerAdd
triggerall = var(0)
triggerall = var(7) = 5
trigger1 = stateno = 196
trigger1 = life>lifemax/3
value = 4+4*(palno >= 11)

[State 196, PowerAdd]
type = PowerAdd
triggerall = var(0)
triggerall = var(7) = 5
trigger1 = stateno = 196
trigger1 = life<=lifemax/3
value = 6+6*(palno >= 11)

[State 196, PowerAdd]
type = PowerSet
triggerall = var(0)
trigger1 = var(7)>9000
value = powermax

[State 0, VarSet]
type = VarSet
triggerall = var(0)
triggerall = var(7)>9000
trigger1 = stateno != [1000,2000]
var(17) = random%3

[State 0, ChangeState]
type = ChangeState
triggerall = var(0)
triggerall = statetype != A
trigger1 = var(7)>9000
trigger1 = stateno != [1000,2000]
value = 1020+5*var(17)
ctrl = 0

;==================================================================================
;==================================================================================
;==================================================================================


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

[Statedef -3]

[State -3, fvar(3)] ;normal enemy1 x
type = VarSet
trigger1 = var(4) != 0
trigger1 = var(10) <=0
fvar(7) = (playerID(var(4)),pos x) + playerID(var(4)),Const(size.mid.pos.x)

[State -3, fvar(4)] ;normal enemy1 y
type = VarSet
trigger1 = var(4) != 0
trigger1 = var(10) <=0
trigger1 = P2name != "Biomenace Skullman"
fvar(8) = (playerID(var(4)),pos y) + (playerID(var(4)),Const(size.mid.pos.y)/ifelse((playerID(var(4)), statetype=C),2,1))

[State -3, fvar(4)] ;P2skullman y
type = VarSet
trigger1 = var(4) != 0
trigger1 = var(10) <=0
trigger1 = P2name = "Biomenace Skullman"
fvar(8) = (playerID(var(4)),pos y)-20

[State -3, fvar(3)] ;irregular enemy1 x
type = VarSet
trigger1 = var(4) != 0
trigger1 = var(10) >0
fvar(7) = (playerID(var(4)),pos x)

[State -3, fvar(4)] ;irregular enemy1 y
type = VarSet
trigger1 = var(4) != 0
trigger1 = var(10) >0
fvar(8) = (playerID(var(4)),pos y)-7

[State -3, fvar(5)] ;normal enemy2 x
type = VarSet
trigger1 = var(5) != 0
trigger1 = var(11) <=0
fvar(9) = (playerID(var(5)),pos x) + playerID(var(5)),Const(size.mid.pos.x)

[State -3, fvar(6)] ;normal enemy2 y
type = VarSet
trigger1 = var(5) != 0
trigger1 = var(11) <=0
trigger1 = P4name != "Biomenace Skullman"
fvar(10) = (playerID(var(5)),pos y)+ (playerID(var(5)),Const(size.mid.pos.y)/ifelse((playerID(var(5)), statetype=C),2,1))

[State -3, fvar(4)] ;P4skullman y
type = VarSet
trigger1 = var(5) != 0
trigger1 = var(11) <=0
trigger1 = P4name = "Biomenace Skullman"
fvar(10) = (playerID(var(5)),pos y)-20

[State -3, fvar(5)] ;irregular enemy2 x
type = VarSet
trigger1 = var(5) != 0
trigger1 = var(11) >0
fvar(9) = (playerID(var(5)),pos x)

[State -3, fvar(6)] ;irregular enemy2 y
type = VarSet
trigger1 = var(5) != 0
trigger1 = var(11) >0
fvar(10) = (playerID(var(5)),pos y)-7

[State -3, fvar(6)];enemy 1 hp
type = VarSet
trigger1 = var(4) != 0
fvar(13) = playerID(var(4)), Life

[State -3, fvar(6)];enemy 2 hp
type = VarSet
trigger1 = var(5) != 0
fvar(14) = playerID(var(5)), Life

[State -3, fvar(15)] ;enemy 1 nearness
type = VarSet
trigger1 = var(5) != 0
fvar(15) = ifelse(Exp(0.5*ln((fvar(7) * fvar(7))+(fvar(8) * fvar(8))))<=(Exp(0.5*ln((fvar(9) * fvar(9))+(fvar(10) * fvar(10))))), 0, 1)

[State -3, fvar(16)] ; nearest enemy x
type = VarSet
trigger1 = var(5) !=0
trigger1 = fvar(14)>0
trigger1 = fvar(13)>0
fvar(16) = ifelse(fvar(15)<=0, fvar(7), fvar(9))

[State -3, fvar(16)] ; nearest enemy y
type = VarSet
trigger1 = var(5) !=0
trigger1 = fvar(14)>0
trigger1 = fvar(13)>0
fvar(17) = ifelse(fvar(15)<=0, fvar(8), fvar(10))

[State -3, fvar(16)] ; nearest enemy x
type = VarSet
trigger1 = var(5) <=0
trigger2 = fvar(14)<=0
fvar(16) = fvar(7)

[State -3, fvar(16)] ; nearest enemy y
type = VarSet
trigger1 = var(5) <=0
trigger2 = fvar(14)<=0
fvar(17) = fvar(8)

[State -3, fvar(16)] ; nearest enemy x
type = VarSet
trigger1 = var(5) !=0
trigger1 = fvar(13)<=0
fvar(16) = fvar(9)

[State -3, fvar(16)] ; nearest enemy y
type = VarSet
trigger1 = var(5) !=0
trigger1 = fvar(13)<=0
fvar(17) = fvar(10)

;==================================================================================
;======| RELACIONADO  AI - AI RELATED |===========================================
;==================================================================================

; Kamek and Luchini appear to have been the first ones to use the IsHomeTeam AI activation concept.
; Feel free to move this controller to your character's intro state for slightly better efficiency.
[State -3, SetAI]
type = VarSet
triggerall = !RoundState
triggerall = IsHomeTeam
trigger1 = (TeamSide = 2)
trigger2 = (MatchNo > 1)
var(59) = 1

; Feel free to move this controller to your character's intro state for slightly better efficiency.
; Note that it may give P2 a slight unfair advantage in simul team vs mode, so you
; may want to disable it.  But then, since when has Mugen been about fairness? =P
[State -3, Unfair]; Is this reliable?
type = VarSet
trigger1 = !RoundState
trigger1 = (var(59) != 1)
trigger1 = NumPartner
trigger1 = (ID > Partner,ID)
trigger1 = (TeamSide = 2)
var(59) = 1

[State -3, AI Helper (Compatibly Partnered Version)]
type = Helper
trigger1 = !var(59)
trigger1 = !NumHelper(9742)
trigger1 = (RoundState = 2)
trigger1 = Alive
trigger1 = NumPartner
trigger1 = Partner,SelfAnimExist(9741)
HelperType = normal
name = "AI Helper (Simul Version)"
ID = 9742
pos = 9999999,99999
StateNo = 9742
KeyCtrl = 1
PauseMoveTime = 999999999
SuperMoveTime = 999999999

; If you want to use the Guard mode, Dummy mode, Distance, or Button jam dummy control
; options in Training mode without activating the dummy's AI while working on your
; character, then all you need to do is temporarily disable this controller.
; Or, if you want to permanently disable this controller in Training mode,
; then you could use the Training mode detection code available on my site
; ( http://www.shinmugen.net/winane/ ), and then just add a "(var(59)&63)>30"
; triggerall to this controller.
[State -3, AI Helper]
type = Helper
triggerall = !var(59)
triggerall = !NumHelper(9741)
triggerall = (RoundState = 2)
triggerall = Alive
trigger1 = !NumPartner
trigger2 = !(Partner,SelfAnimExist(9741))
HelperType = normal
name = "AI Helper"
ID = 9741
pos = 9999999,99999
StateNo = 9741
KeyCtrl = 1
PauseMoveTime = 999999999
SuperMoveTime = 999999999

[State -3, TurnBackOnAI]
type = VarSet
trigger1 = (var(59) = -2)
trigger1 = (RoundState = 2)
trigger1 = Alive
var(59) = 1

[State -3, HitPauseTime Helper]
type = Helper
triggerall = var(59)!=1
triggerall = !NumHelper(9743)
triggerall = (RoundState = 2)
triggerall = Alive
trigger1 = (MatchNo = 1)
trigger2 = NumPartner
trigger2 = (ID > Partner,ID)
HelperType = normal
name = "HitPauseTime"
ID = 9743
pos = 9999999,99999
StateNo = 9743
PauseMoveTime = 999999999
SuperMoveTime = 999999999

; It is very important that this controller NOT be moved to State -2, as putting
; it there would defeat the entire purpose of the controller, allowing the
; helper method or the XOR method to erroneously set the AI variable.
; And within State -3, don't put any ChangeState controllers before this
; controller, lest you unnecessarily delay your character's AI activation.
[State -3, GameTimeVar]
type = VarSet
trigger1 = 1
var(57) = GameTime
IgnoreHitPause = 1

; Within StateDef -3, none of your own AI-related code should come after the code
; provided here (and putting it before the code is also generally a bad idea).
; It's better to use State -1 (or, in special circumstances, State -2) instead.

;==================================================================================
;==================================================================================
;==================================================================================

;This controller plays a sound everytime the player lands from a jump, or
;from a back-dash.

[State -3, Landing Sound]
type = PlaySnd
triggerall = Time = 1
trigger1 = stateno = 40
value = 40, (random%4)+1
volume = 255

[State -3, Landing Sound]
type = PlaySnd
triggerall = Time = 1
trigger1 = stateno = 52 ;Jump land
trigger2 = stateno = 106 ;Run-back land
value = 40, 0
;-------------- Generated by Fighter Factory -------------

;--------------------- Variable List ----------------------

; Var(0) - StateDef -2
; Var(1) - StateDef 232, 1011, 9001, 9741, 9742, 9743
; Var(2) - StateDef 1011, 9002, 9741, 9742
; Var(3) - StateDef 5900, 9741, 9742
; Var(4) - StateDef 5900, 9741, 9742
; Var(5) - StateDef 5900
; Var(6) - StateDef -2, 201, 211, 1010, 1020, 9742
; Var(7) - StateDef -2, 9742
; Var(8) - StateDef -2, 242, 441, 9742
; Var(9) - StateDef -2, 200, 210, 212, 220, 224, 230, 240, 242, 250, 252, 400, 410, 420, 430, 440, 441, 450, 600, 610, 620, 630, 640, 650, 700, 710, 711, 721, 1011, 9741, 9742
; Var(10) - StateDef 250, 450, 700, 702, 705, 710, 711, 836, 5900
; Var(11) - StateDef -2, 5900
; Var(12) - StateDef 5900
; Var(13) - StateDef 5900
; Var(14) - StateDef -2
; Var(15) - StateDef 1033
; Var(16) - StateDef -2
; Var(17) - StateDef -2
; Var(20) - StateDef -2
; Var(21) - StateDef 821
; Var(56) - StateDef 59011, 59010
; Var(57) - StateDef -3
; Var(59) - StateDef -2, -3, 9741

;--------------------- Float Variable List ----------------------

; fVar(1) - StateDef 206
; fVar(2) - StateDef 9002
; fVar(4) - StateDef 245, 606
; fVar(5) - StateDef 245, 606
; fVar(6) - StateDef 245, 606, 1032
; fVar(7) - StateDef -3
; fVar(8) - StateDef -3
; fVar(9) - StateDef -3
; fVar(10) - StateDef -3
; fVar(13) - StateDef -3
; fVar(14) - StateDef -3
; fVar(15) - StateDef -3
; fVar(16) - StateDef -3
; fVar(17) - StateDef -3
