News:

MFG's Character of the Month: September 2026 Voting

Main Menu

Problems with a Helper!!

Started by Rabano, October 12, 2022, 09:15:55 PM

Previous topic - Next topic

Rabano

Hi, I have some problem with a helper, which is something Im not 100% familiar with.

Im making a POTS version of Elias from Rage of the Dragons, and Im working in one of his specials called "Magnus" where he spawns a fire pillar.



The problems are:

-It doesn't produce the fire effect on the player two like other POTS character with Fire specials do. for example my char only turn the P2 black and nothing else, meanwhile Dhalsin set the P2 on fire.





-It only causes 7 of damage and I tried to change it but nothing happens.

-It doesn't produce a "counter" effect after you counter a attack with this move

Here's the code of the Helper, if it helps to you to know what Im doing wrong.

[Statedef 1005]
type    = S
movetype= A
physics = S
juggle  = 8
ctrl = 0
anim = 1005
poweradd = 0
sprpriority = 3
velset = 0,0

[State 1001, 0]
type = Afterimage
trigger1 = Time = 0
time = 5
PalBright = 0, 0, 0
PalContrast =  138,138,138
PalAdd = -40, -40, -40
PalMul = 1,1,1
Length = 7
FrameGap = 2
Trans = add

[State 1001, 0]
type = Afterimagetime
trigger1 = 1
time = 2

[State 1005, HitDef]
type = HitDef
trigger1= !(Root, var(16)) && (Root, var(15) < 1 || Root, var(20))
attr = S,SP
hitFlag = MAF
guardFlag = MA
priority = 4, Hit
damage = ceil(ifElse(fvar(11) * ifElse(var(10) = 2, 73, ifElse(var(10), 66, 59)) < 7, 7, fvar(11) * ifElse(var(10) = 2, 73, ifElse(var(10), 66, 59)))), ifElse(var(10) >= 2, 7, 7)
getPower = ifElse(Root, var(10) = 3, 0, ifElse(!(Root, var(13)), 144, 72) * !(Root, var(20))), ifElse(Root, var(10) = 3, 0, 36 * !(Root, var(20)))
givePower = 36, 36
pauseTime = 0, ifElse((Root, var(20)), 6, 12)
guard.pauseTime = 0, ifElse((Root, var(20)), 6, 12)
animType = Hard
air.animType = Back
fall.animType = Back
ground.type = High
air.type = Low
ground.hitTime = 18
ground.slideTime = 18
guard.hitTime = 18
air.hitTime = 60
airGuard.ctrlTime = 16
ground.velocity = -10.52 + 5.40 * (var(10) > 0), -5.25 * (var(10) > 0)
ground.cornerPush.velOff = 0
guard.velocity = -10.52
guard.cornerPush.velOff = 0
air.velocity = -4.31, -7.36
air.cornerPush.velOff = 0
airGuard.velocity = -5, 0
airGuard.cornerPush.velOff = 0
yAccel = 0.58
fall = var(10) > 0
air.fall = 1
fall.recover = 1
fall.recoverTime = 22 + ifElse(var(20), 6, 12)
forceStand = 1
hitSound = -1
guardSound = -1
sparkNo = -1
guard.SparkNo = -1
sparkXY = -50, -32
palFX.time = ifElse(Root, var(20), 30, 36)
palFX.mul = 128, 128, 128
palFX.sinAdd = 96, 96, 96, 4
envShake.time = 14
envShake.ampl = 4
envShake.freq = 120
sprPriority = 3

[State 1005, HitSound]
type = PlaySnd
trigger1 = MoveContact = 1 && NumTarget
trigger1 = !(Target, HitShakeOver)
value = ifElse(MoveGuarded, 3, 2), ifElse(MoveGuarded, 0, 6)
channel = 2
ignoreHitPause = 1

[State 1005, HitSpark]
type = Helper
trigger1 = MoveContact = 1 && NumTarget
trigger1 = !(Target, HitShakeOver)
helperType = Normal
stateNo = ifElse(MoveGuarded, 8001, 8013)
ID = 8000
name = "Spark"
posType = P1
pos = 70, -50
facing = -1
ownPal = 1
size.xScale = 1
size.yScale = 1
pauseMoveTime = 65535
superMoveTime = 65535
ignoreHitPause = 1

[State 1005, Flame Particles]
type = Helper
trigger1 = !NumHelper(8150)
trigger1 = MoveHit = 1 && NumTarget
trigger1 = !(Target, HitShakeOver)
trigger1 = var(43) := (Target, ID)
helperType = Normal
stateNo = 8150
ID = 8150
name = "Flame Particles"
posType = P2
ownPal = 1
ignoreHitPause = 1

[State 1001, Kill]
type = Destroyself
trigger1 = AnimTime = 0


Gêmeos dos Jogos

Hello, how are you?

First: Put id on HitDef.
Example: id = 3005

Second: Eliminate that var(10)

Third: Don't foget this codes on helper:
[State 3005, Counter Flag]
type = VarSet
trigger1 = NumEnemy
trigger1 = MoveContact != 1
var(9) = (EnemyNear, MoveType = A)

[State 3005, Damage Dampener]
type = VarSet
trigger1 = 1
fvar(11) = (Root, fvar(10)) * IfElse(var(9), 1.2, 1)


var(9) is counter flag on CvS/POTS Characters.
We recommend creating a hitpause state. We hope to have helped.

Rabano

Quote from: Gêmeos dos Jogos on October 12, 2022, 11:23:33 PM
Hello, how are you?

First: Put id on HitDef.
Example: id = 3005

Second: Eliminate that var(10)

Third: Don't foget this codes on helper:
[State 3005, Counter Flag]
type = VarSet
trigger1 = NumEnemy
trigger1 = MoveContact != 1
var(9) = (EnemyNear, MoveType = A)

[State 3005, Damage Dampener]
type = VarSet
trigger1 = 1
fvar(11) = (Root, fvar(10)) * IfElse(var(9), 1.2, 1)


var(9) is counter flag on CvS/POTS Characters.
We recommend creating a hitpause state. We hope to have helped.



I added that, now it does the right amount of damage, but it didn't fix the fire effect and the counter.

Also, how exactly I delete the var(10), sounds dumb but I dont know how, like:

ceil(ifElse(fvar(11) * ifElse(var(10) = 2, 73, ifElse(var(10), 66, 59)) < 7, 7, fvar(11) * ifElse(var(10) = 2, 73, ifElse(var(10), 66, 59)))), ifElse(var(10) >= 2, 7, 7)

what this should looks like for example?

Gêmeos dos Jogos

#3
Put Root,Var(10) and see if it did. And the effect, create a hitpause state, like this code:
;---------------------------------------------------------------------------
;Hit Pause
[Statedef 3006]
type = A
physics = N
movetype = A
ctrl = 0
sprpriority = 3
movehitpersist = 1

[State 3006, AssertSpecial]
type = AssertSpecial
trigger1 = 1
flag = noshadow
ignorehitpause = 1
persistent = 1

[State 3006, Transparency]  ;Put this if the helper is transparent
type = Trans
trigger1 = 1
trans = AddAlpha
alpha = 256,256
ignoreHitPause = 1

[State 3006, PosFreeze]
type = PosFreeze
trigger1 = 1
value = 1

[State 3006, HitSound] ;Put the effect sounds you want
type = Playsnd
trigger1 = Movecontact = 1 && Numtarget
trigger1 = !(target,hitshakeover)
value = Ifelse(MoveGuarded, 3, 2), Ifelse(MoveGuarded, 0, 6)
channel = 2
ignorehitpause = 1

[State 3006, Spark]
type = Helper
trigger1 = Movecontact=1 && Numtarget
trigger1 = !(target,Hitshakeover)
helpertype = Normal
stateno = Ifelse(MoveGuarded, 8001, 8014) ;Put the correct hitspark.
ID = 8000
name = "Spark"
postype = p1
pos = ifelse(p2dist x<-300, -300, ifelse(p2dist x<300, ceil(p2dist x), 300)), ceil(p2dist y-70)  ;Modify this as you wish.
facing = -1
ownpal = 1
size.xscale = 1
size.yscale = 1
pausemovetime = 65535
supermovetime = 65535
ignorehitpause = 1

[State 3006, Counter FX]
type = Helper
trigger1 = movecontact=1 && numtarget && var(9)
trigger1 = !(target,hitshakeover)
helpertype = normal
stateno=8290
ID = 8290
name = "Counter FX"
postype = p1
pos = ifelse(p2dist x<-300, -300, ifelse(p2dist x<300, ceil(p2dist x), 300)), ceil(p2dist y-70)  ;Modify this as you wish.
ownpal = 1
pausemovetime = 65535
supermovetime = 65535
ignorehitpause = 1

[State 3006, Flames]
type = Helper
triggerall = !NumHelper(8150)
trigger1 = !Time
trigger1 = MoveHit && NumTarget
trigger1 = var(43) := (Target, ID)
helperType = Normal
stateNo = 8150
ID = 8150
name = "Flames"
posType = P2
size.xScale = const(size.xScale) * 0.5
size.yScale = 0.5
ownPal = 1
ignoreHitPause = 1

[State 3006, HitCount]
type = ParentVarAdd
trigger1 = !Time
trigger1 = MoveContact && NumTarget
var(13) = 1

[State 3006, Juggle Points]
type = ParentVarAdd
trigger1 = !Time
trigger1 = MoveContact && NumTarget
trigger1 = !(HitDefAttr = SCA,AT)
var(15) = 1

[State 3006, ProjContact]
type = VarSet
trigger1 = MoveContact && NumTarget
var(18) = 1

[State 3006, ProjContact]
type = ParentVarSet
triggerAll = MoveContact && NumTarget
trigger1 = Root, StateNo = 1000
var(18) = 1

[State 3006, End]
type= Changestate
trigger1 = Time = IfElse(MoveGuarded, 0, 4) ;Modify this as you wish. This is the HitPauseTime.
value = 3005



Rabano

Well, not it looks like this:

[Statedef 1005]
type    = S
movetype= A
physics = S
juggle  = 8
ctrl = 0
anim = 1005
poweradd = 0
sprpriority = 3
velset = 0,0

[State 1005, 0]
type = Afterimage
trigger1 = Time = 0
time = 5
PalBright = 0, 0, 0
PalContrast =  138,138,138
PalAdd = -40, -40, -40
PalMul = 1,1,1
Length = 7
FrameGap = 2
Trans = add

[State 1005, 0]
type = Afterimagetime
trigger1 = 1
time = 2

[State 1005, HitDef]
type = HitDef
trigger1= !(Root, var(16)) && (Root, var(15) < 1 || Root, var(20))
attr = S,SP
ID = 1005
hitFlag = MAF
guardFlag = MA
priority = 4, Hit
damage = 60,60
getPower = ifElse(Root, var(10) = 3, 0, ifElse(!(Root, var(13)), 144, 72) * !(Root, var(20))), ifElse(Root, var(10) = 3, 0, 36 * !(Root, var(20)))
givePower = 36, 36
pauseTime = 0, ifElse((Root, var(20)), 6, 12)
guard.pauseTime = 0, ifElse((Root, var(20)), 6, 12)
animType = Hard
air.animType = Back
fall.animType = Back
ground.type = High
air.type = Low
ground.hitTime = 18
ground.slideTime = 18
guard.hitTime = 18
air.hitTime = 60
airGuard.ctrlTime = 16
ground.velocity = -10.52 + 5.40 * (var(10) > 0), -5.25 * (var(10) > 0)
ground.cornerPush.velOff = 0
guard.velocity = -10.52
guard.cornerPush.velOff = 0
air.velocity = -4.31, -7.36
air.cornerPush.velOff = 0
airGuard.velocity = -5, 0
airGuard.cornerPush.velOff = 0
yAccel = 0.58
fall = var(10) > 0
air.fall = 1
fall.recover = 1
fall.recoverTime = 22 + ifElse(var(20), 6, 12)
forceStand = 1
hitSound = -1
guardSound = -1
sparkNo = -1
guard.SparkNo = -1
sparkXY = -50, -32
palFX.time = ifElse(Root, var(20), 30, 36)
palFX.mul = 128, 128, 128
palFX.sinAdd = 96, 96, 96, 4
envShake.time = 14
envShake.ampl = 4
envShake.freq = 120
sprPriority = 3

[State 1106, 7]
type = Changestate
trigger1 = MoveHit
value = 3006

[State 1005, Kill]
type = Destroyself
trigger1 = AnimTime = 0

;Hit Pause
[Statedef 3006]
type = A
physics = N
movetype = A
ctrl = 0
sprpriority = 3
movehitpersist = 1

[State 3006, AssertSpecial]
type = AssertSpecial
trigger1 = 1
flag = noshadow
ignorehitpause = 1
persistent = 1

[State 3006, Transparency]  ;Put this if the helper is transparent
type = Trans
trigger1 = 1
trans = AddAlpha
alpha = 256,256
ignoreHitPause = 1

[State 3006, PosFreeze]
type = PosFreeze
trigger1 = 1
value = 1

[State 3006, HitSound] ;Put the effect sounds you want
type = Playsnd
trigger1 = Movecontact = 1 && Numtarget
trigger1 = !(target,hitshakeover)
value = Ifelse(MoveGuarded, 3, 2), Ifelse(MoveGuarded, 0, 6)
channel = 2
ignorehitpause = 1

[State 3006, Spark]
type = Helper
trigger1 = Movecontact=1 && Numtarget
trigger1 = !(target,Hitshakeover)
helpertype = Normal
stateno = Ifelse(MoveGuarded, 8001, 8014) ;Put the correct hitspark.
ID = 8000
name = "Spark"
postype = p1
pos = ifelse(p2dist x<-300, -300, ifelse(p2dist x<300, ceil(p2dist x), 300)), ceil(p2dist y-70)  ;Modify this as you wish.
facing = -1
ownpal = 1
size.xscale = 1
size.yscale = 1
pausemovetime = 65535
supermovetime = 65535
ignorehitpause = 1

[State 3006, Counter FX]
type = Helper
trigger1 = movecontact=1 && numtarget && var(9)
trigger1 = !(target,hitshakeover)
helpertype = normal
stateno=8290
ID = 8290
name = "Counter FX"
postype = p1
pos = ifelse(p2dist x<-300, -300, ifelse(p2dist x<300, ceil(p2dist x), 300)), ceil(p2dist y-70)  ;Modify this as you wish.
ownpal = 1
pausemovetime = 65535
supermovetime = 65535
ignorehitpause = 1

[State 3006, Flames]
type = Helper
triggerall = !NumHelper(8150)
trigger1 = !Time
trigger1 = MoveHit && NumTarget
trigger1 = var(43) := (Target, ID)
helperType = Normal
stateNo = 8150
ID = 8150
name = "Flames"
posType = P2
size.xScale = const(size.xScale) * 0.5
size.yScale = 0.5
ownPal = 1
ignoreHitPause = 1

[State 3006, HitCount]
type = ParentVarAdd
trigger1 = !Time
trigger1 = MoveContact && NumTarget
var(13) = 1

[State 3006, Juggle Points]
type = ParentVarAdd
trigger1 = !Time
trigger1 = MoveContact && NumTarget
trigger1 = !(HitDefAttr = SCA,AT)
var(15) = 1

[State 3006, ProjContact]
type = VarSet
trigger1 = MoveContact && NumTarget
var(18) = 1

[State 3006, ProjContact]
type = ParentVarSet
triggerAll = MoveContact && NumTarget
trigger1 = Root, StateNo = 1000
var(18) = 1

[State 1005, Kill]
type = Destroyself
trigger1 = AnimTime = 0


and it changed absolutely nothing, no flames, no counter, nothing.

Rabano

I don't know what Im doing wrong, as I said I dont understand nothing about helpers

Odb718

Do you have an animation for the fire yet?

Think of a helper as a state that's on autopilot. Like if you made a move for your character that was 8 moves long and it just went and did the combo every time you pressed X. Or it's a homing missile. Or a fireball that goes straight out. Or a background character that follows P2 around the screen.
A helper is just a way to get a sprite to move around and do things more complex than an explod or a projectile. It's exactly like your character in it has a statedef, it can play sounds, hit P2 if you want it to. It's not as confusing as you first think. It just HELPS you do something a little more complex.

Kinda like a custom state helps P2 get hit in the way you want instead of the basic hit animations. You assign a sprite to a helper, or it can be invisible. It's just another State to set up a chain reaction.

Look at your stateNo 8150. Make sure you have everything in that state to make it work. Check the animations and sound.

You could add
Spoiler (click to show)

[State 3006, Flames]
type = Helper
triggerall = !NumHelper(8150)
trigger1 = !Time
trigger1 = MoveHit && NumTarget
trigger1 = var(43) := (Target, ID)
helperType = Normal
stateNo = 8150
ID = 8150
name = "Flames"
posType = P2
size.xScale = const(size.xScale) * 0.5
size.yScale = 0.5
ownPal = 1
ignoreHitPause = 1
to state 200 or any other move that's super easy to activate. This way you know if it's the Flames helper or the state that's trying to get it to work.
vVv Gouken718 vVv SabreTooth718 vVv


Rabano

I'll try it, to see if its not the flames effects that is not working, because I created another move wich its a projectile with the same problem, that doesn't turn the p2 on fire.

and the move "Magnus" the one that I hav the problem looks like this



its doesn't move like a projectile, it's similar to one of Terry's power wave

Rabano

I just checked out adding the flames effects to a normal (LP) and doesn't work either, the Flames helper doesn't work, I should see how can I fix that

Odb718

Do you have state 8150? If not, which ever character you're copying from you can open your char and that char. Then import animation from the char you're copying from, and check the box to import the sprites. That'll get you the animation. Then all you need to do is copy over the state. It might use a sound you don't have. But that's easy to save as a file and then add to your char.
vVv Gouken718 vVv SabreTooth718 vVv


Rabano

Okay so I checked out and for some reason I didn't have the animation for the flames, idk why, I use the same template for pots character and this didn't happen with my other chars.

so anyways, I finally manage to fix the special move and now it works as it should. Thanks you.