I have this character who has this beam attack. The beam attack is quite unique and I'am trying to play with the code for enhancing the beam's destructive force. The beam attack works like this:
player punches a combination of keys:
character executes beam attack. the attack button used for execution is held for keeping the beam going.
player presses up or down the manuever the beam upwards or downwards.
The beam is drawn as three seperately animated sprite segments: the tail, the middle and the front tip, all combining to illustrate a single beam fired in one direction. Needless to say, there are three such animated segments for aiming upwards and downwards.
Here are the constants (taken from Fighter factory) used:
;------------------------------------------
[Statedef 1000]
type = S
movetype= A
physics = S
juggle = 4
velset = 0,0
anim = 1000
ctrl = 0
sprpriority = 2
[State 1000, 3]
type = VarSet
trigger1 = Time = 0
v = 0
value = 0
[State 1000, 3]
type = VarAdd
triggerall = Var(0) > -2
triggerall = Time%4 = 0
triggerall = Time > 12
triggerall = Time < 63
trigger1 = command = "holda"
trigger1 = command = "holdup"
trigger2 = Var(10) > 0
trigger2 = P2BodyDist X <= 75
trigger2 = P2BodyDist X >= 0
trigger2 = P2BodyDist Y <= -50
trigger2 = P2BodyDist Y >= -100
v = 0
value = -1
[State 1000, 3]
type = VarAdd
triggerall = Var(0) < 2
triggerall = Time%4 = 0
triggerall = Time > 12
triggerall = Time < 63
trigger1 = command = "holddown"
trigger1 = command = "holda"
trigger2 = Var(10) > 0
trigger2 = P2BodyDist X <= 25
trigger2 = P2BodyDist X >= 0
trigger2 = P2BodyDist Y >= 0
v = 0
value = 1
[State 1000, 7]
type = ChangeAnim
triggerall = Time > 12
triggerall = Time < 63
trigger1 = anim != 1005
trigger1 = command = "holda"
trigger1 = Var(0) = 0
trigger2 = anim != 1005
trigger2 = Var(10) > 0
trigger2 = Var(0) = 0
value = 1003
[State 1000, 7]
type = ChangeAnim
triggerall = Time > 12
triggerall = Time < 63
trigger1 = anim != 1005
trigger1 = command = "holda"
trigger1 = Var(0) < 0
trigger2 = anim != 1005
trigger2 = Var(10) > 0
trigger2 = Var(0) < 0
value = 1001
[State 1000, 7]
type = ChangeAnim
triggerall = Time > 12
triggerall = Time < 63
trigger1 = anim != 1005
trigger1 = command = "holda"
trigger1 = Var(0) > 0
trigger2 = anim != 1005
trigger2 = Var(10) > 0
trigger2 = Var(0) > 0
value = 1002
[State 1000, 1]
type = PlaySnd
triggerall = anim != 1005
triggerall = Time > 12
triggerall = Time < 63
triggerall = Time%8 = 0
trigger1 = command = "holda"
trigger2 = Var(10) > 0
value = 1000, 0
[State 1000, 10]
type = Projectile
triggerall = Var(0) = -2
trigger1 = anim != 1005
trigger1 = command = "holda"
trigger1 = Time > 12
trigger1 = Time < 63
trigger2 = anim != 1005
trigger2 = Var(10) > 0
trigger2 = Time > 12
trigger2 = Time < 63
projanim = 1011
;projhitanim = 1015
projremovetime = 15+Var(2)
offset = 18+random%2, -66
velocity = 5,-5
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = High
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2,-2
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 10]
type = Projectile
triggerall = Var(0) = -1
trigger1 = anim != 1005
trigger1 = command = "holda"
trigger1 = Time > 12
trigger1 = Time < 63
trigger2 = anim != 1005
trigger2 = Var(10) > 0
trigger2 = Time > 12
trigger2 = Time < 63
projanim = 1013
projremovetime = 15+Var(2)
offset = 20+random%2, -66
velocity = 5,-2.5
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = High
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2,-1
palfx.time = 2
palfx.mul = 80, 80, 200
/// (low beam straight)
[State 1000, 10]
type = Projectile
triggerall = Var(0) = 0
trigger1 = anim != 1005
trigger1 = command = "holda"
trigger1 = Time > 12
trigger1 = Time < 63
trigger2 = anim != 1005
trigger2 = Var(10) > 0
trigger2 = Time > 12
trigger2 = Time < 63
projanim = 1010
projremovetime = 15+Var(2)
offset = 28+random%2, -58
velocity = 5,0
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = High
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 10]
type = Projectile
triggerall = Var(0) = 1
trigger1 = anim != 1005
trigger1 = command = "holda"
trigger1 = Time > 12
trigger1 = Time < 63
trigger2 = anim != 1005
trigger2 = Var(10) > 0
trigger2 = Time > 12
trigger2 = Time < 63
projanim = 1014
projremovetime = 15+Var(2)
offset = 20+random%2, -50
velocity = 5,2.5
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = Low
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2,1
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 10]
type = Projectile
triggerall = Var(0) = 2
trigger1 = anim != 1005
trigger1 = command = "holda"
trigger1 = Time > 12
trigger1 = Time < 63
trigger2 = anim != 1005
trigger2 = Var(10) > 0
trigger2 = Time > 12
trigger2 = Time < 63
projanim = 1012
projremovetime = 15+Var(2)
offset = 22+random%2, -48
velocity = 5,5
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = Low
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2,2
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 7]
type = ChangeAnim
trigger1 = Time = 63
trigger2 = command != "holda"
trigger2 = Time > 12
trigger2 = anim != 1005
trigger2 = Var(10) = 0
value = 1005
[State 1000, 7]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
;------------------------------------------
;------------------------------------------
[Statedef 1050]
type = S
movetype= A
physics = S
juggle = 4
velset = 0,0
anim = 1050
ctrl = 0
sprpriority = 2
[State 1000, 3]
type = VarSet
trigger1 = Time = 0
v = 0
value = 0
[State 1000, 3]
type = VarAdd
triggerall = Var(0) > -2
triggerall = Time > 20
triggerall = Time < 121
triggerall = Time%4 = 0
trigger1 = command = "holdx"
trigger1 = command = "holdup"
trigger2 = Var(10) > 0
trigger2 = P2BodyDist X <= 50
trigger2 = P2BodyDist X >= 0
trigger2 = P2BodyDist Y <= -50
trigger2 = P2BodyDist Y >= -100
v = 0
value = -1
[State 1000, 3]
type = VarAdd
triggerall = Var(0) < 2
triggerall = Time > 20
triggerall = Time < 121
triggerall = Time%4 = 0
trigger1 = command = "holdx"
trigger1 = command = "holddown"
trigger2 = Var(10) > 0
trigger2 = P2BodyDist X <= 25
trigger2 = P2BodyDist X >= 0
trigger2 = P2BodyDist Y <= 0
v = 0
value = 1
[State 1000, 7]
type = ChangeAnim
triggerall = Time > 20
triggerall = Time < 121
trigger1 = command = "holdx"
trigger1 = Var(0) = 0
trigger1 = anim != 1006
trigger2 = Var(10) > 0
trigger2 = Var(0) = 0
trigger2 = anim != 1006
value = 1003
[State 1000, 7]
type = ChangeAnim
triggerall = Time > 20
triggerall = Time < 121
trigger1 = command = "holdx"
trigger1 = Var(0) < 0
trigger1 = anim != 1006
trigger2 = Var(10) > 0
trigger2 = Var(0) < 0
trigger2 = anim != 1006
value = 1001
[State 1000, 7]
type = ChangeAnim
triggerall = Time > 20
triggerall = Time < 121
trigger1 = command = "holdx"
trigger1 = Var(0) > 0
trigger1 = anim != 1006
trigger2 = Var(10) > 0
trigger2 = Var(0) > 0
trigger2 = anim != 1006
value = 1002
[State 1000, 1]
type = PlaySnd
triggerall = anim != 1006
triggerall = Time > 20
triggerall = Time < 121
triggerall = Time%8 = 0
trigger1 = command = "holdx"
trigger2 = Var(10) > 0
value = 1000, 0
[State 1000, 10]
type = Projectile
triggerall = Var(0) = -2
trigger1 = anim != 1006
trigger1 = command = "holdx"
trigger1 = Time > 20
trigger1 = Time < 121
trigger2 = anim != 1006
trigger2 = Var(10) > 0
trigger2 = Time > 20
trigger2 = Time < 121
projanim = 1011
;projhitanim = 1015
projremovetime = 15+Var(2)
offset = 18+random%2, -66
velocity = 5,-5
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = High
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2,-2
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 10]
type = Projectile
triggerall = Var(0) = -1
trigger1 = anim != 1006
trigger1 = command = "holdx"
trigger1 = Time > 20
trigger1 = Time < 121
trigger2 = anim != 1006
trigger2 = Var(10) > 0
trigger2 = Time > 20
trigger2 = Time < 121
projanim = 1013
projremovetime = 15+Var(2)
offset = 20+random%2, -66
velocity = 5,-2.5
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = High
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2,-1
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 10]
type = Projectile
triggerall = Var(0) = 0
trigger1 = anim != 1006
trigger1 = command = "holdx"
trigger1 = Time > 20
trigger1 = Time < 121
trigger2 = anim != 1006
trigger2 = Var(10) > 0
trigger2 = Time > 20
trigger2 = Time < 121
projanim = 1010
projremovetime = 15+Var(2)
offset = 28+random%2, -58
velocity = 5,0
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = High
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 10]
type = Projectile
triggerall = Var(0) = 1
trigger1 = anim != 1006
trigger1 = command = "holdx"
trigger1 = Time > 20
trigger1 = Time < 121
trigger2 = anim != 1006
trigger2 = Var(10) > 0
trigger2 = Time > 20
trigger2 = Time < 121
projanim = 1014
projremovetime = 15+Var(2)
offset = 20+random%2, -50
velocity = 5,2.5
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = Low
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2,1
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 10]
type = Projectile
triggerall = Var(0) = 2
trigger1 = anim != 1006
trigger1 = command = "holdx"
trigger1 = Time > 20
trigger1 = Time < 121
trigger2 = anim != 1006
trigger2 = Var(10) > 0
trigger2 = Time > 20
trigger2 = Time < 121
projanim = 1012
projremovetime = 15+Var(2)
offset = 22+random%2, -48
velocity = 5,5
getpower = 0
givepower = 0
attr = S, SP
damage = 1
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAF
guardflag = MA
ground.type = Low
ground.slidetime = 0
ground.hittime = 0
ground.velocity = -2
air.velocity = -2,2
palfx.time = 2
palfx.mul = 80, 80, 200
[State 1000, 7]
type = ChangeAnim
trigger1 = Time = 121
trigger2 = command != "holdx"
trigger2 = Time > 20
trigger2 = anim != 1006
trigger2 = Var(10) = 0
value = 1006
[State 1000, 7]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
;------------------------------------------
The actions used in the animations relevant to this code are as follows:
1010: aiming beam straightwards
1011: aiming beam diagnolly upwards
1012: aiming beam diagnolly downwards
1013: transition from straight to downwards
1014: transition from straight to upwards
1015: Spark effect caused by the beam hitting an opponent
1006 and 1005:player is finished firing the beam.
I'am still studying the definitions of each variable used here. I'am a novice, but I figured somethings out by testing the code with different values used.
The first thing that I noticed is, that when the beam is fired at an enemy it strikes him rapidly and pushes him back. The attack collision box is repeatedly generated to mimic the effect of a scorching beam at a very quick hit per microsecond rate. I was wondering if there is a way to make it so that when the beam touches the enemy there is atleast a one second delay before the next hit is registered.
The second thing I'am trying to figure out is that how I can make it so that when the beam is aimed downwards and the collision box touches the ground, it creates all the effects exactly like the same way the beam reacts when hitting an opponent.
Lastly how do I make the screen flash white entirely when a collision box registers a hit to either player or the ground.
P.S:I'am manipulating the values of the variable Var but they seem to have no effect to the overall attack. What is the function of Var in this piece of code.