News:

MFG's Character of the Month: October 2026 Nominations

Main Menu

Gap between helpers

Started by SaltAddict, June 14, 2016, 11:40:14 AM

Previous topic - Next topic

SaltAddict



Each of the parts of the beam (start,trail, end) is a separate helper with their own hitdefs.  When the beam hits, that happens. How can I make it so that it keeps making the trail even if it hits? I tried ignorehitpause on the helper state controller, but it doesn't work at all.

Felkazz


Noctis

Are you using a DestroySelf? Or does it have blue clsn boxes but no NotHitBy?

(Youtube) (WIP) (Mediafire) (New Anime Shop) My Manga Reviews! Personal favorite Patreon! Check her out!

"There is nothing either good or bad, but thinking makes it so."

SaltAddict

Quote from: Noctis on June 14, 2016, 03:49:43 PM
Are you using a DestroySelf? Or does it have blue clsn boxes but no NotHitBy?

I'm not using destroy self. It has both blue clsn and nothiby as well as playerpush = 0


Quote from: Thunderbert on June 14, 2016, 01:50:56 PM
Can you post your code?

Here:
Spoiler (click to show)

[Statedef 10001]        ;Change the value to fit your needs
type = A
movetype = A
physics = N
ctrl = 0
velset = 0,0
sprpriority = 3
anim =10001
juggle = 2

[State 420, Helper]         ;This summons helper
type = Helper
trigger1 = 1
persistent = 0     ;It summons when the state is at the 11th tick. Change as needed.
helpertype = normal         ;Normal, so not player XD
name = "Kamehameha Blast" ;Give it a name, it's a good thing.
ID = 100013               ;The indentification number of the helper
stateno = 100013          ;The helper's stateno. If you change it in the helper's state, change it here too.
pos = 10, 0              ;The position where the helper appears
postype = p1                ;It defines from where it counts the distance.
facing = 1                  ;1 is foward, -1 is backward. We want it foward.
keyctrl = 0                 ;Keep this at 0.
ownpal = 1                  ;This means that the parent's PalFX's won't affect the helper.

[State 4000, BindToRoot]
type = BindToRoot ; This is to ensure the proper position for the helper.
trigger1 = 1
ignorehitpause = 1
pos = 15,-27

[State 1210, NotHitBy]
type = NotHitBy
trigger1 = 1
value = SCA, NA, SA, HA, NT, ST, HT
time = 1

[State 1210, HitBy]
type = HitBy
trigger1 = 1
value = SCA, NP, SP, HP
time = 1

[State 1210, HitOverride]
type = HitOverride
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) >= 6
time = -1
attr = SCA, NP, SP, HP
slot = 1
stateno = 8101
ignorehitpause = 1

[State 1210, HitOverride]
type = HitOverride
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) < 6
time = -1
attr = SCA, NP, SP, HP
slot = 0
stateno = 10009
ignorehitpause = 1

[State 1210, VarAdd]   ; Check # of hits, successful or guarded
type = VarAdd
trigger1 = MoveContact
ignorehitpause = 1
v = 1
value = 1

[State 212100, Reset]
type = MoveHitReset
trigger1 = MoveContact
ignorehitpause = 1

[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow



[State 1210, 3]
type = HitDef
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = 1 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) < 6
id = 1000
attr = S, SP
damage = 25, 5
animtype = Hard
priority = 7,Hit
hitflag = MAF
guardflag = MA
hitsound = S1,1
guardsound = S1,0
pausetime = 6,8
sparkno = -1
guard.sparkno = -1
sparkxy = 0, 0
ground.type = High
ground.slidetime = 15
ground.hittime  = 20
ground.velocity = -6,-2
air.hittime = 20
air.type = Low
air.velocity = -6,0
air.fall = 1
fall = 1
fall.recover = 0
envshake.time = 17
envshake.freq = 30
envshake.ampl = -12


[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow

[State 1210, State]
type = changestate
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) >= 6
value = 100014

[State 1210, State]
type = changestate
trigger1 = !numhelper(100013)
value = 100014


[State 1210, Destroy]
type = DestroySelf
trigger1 = BackEdgeBodyDist <= -100
trigger2 = FrontEdgeBodyDist <= -100

[Statedef 100012]        ;Change the value to fit your needs
type = A
movetype = A
physics = N
ctrl = 0
velset = 0,0
sprpriority = 1
anim =100012
juggle = 2

[State 1210, NotHitBy]
type = NotHitBy
trigger1 = 1
value = SCA, NA, SA, HA, NT, ST, HT
time = 1

[State 1210, HitBy]
type = HitBy
trigger1 = 1
value = SCA, NP, SP, HP
time = 1

[State 1210, HitOverride]
type = HitOverride
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) >= 6
time = -1
attr = SCA, NP, SP, HP
slot = 1
stateno = 8101
ignorehitpause = 1

[State 1210, HitOverride]
type = HitOverride
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) < 6
time = -1
attr = SCA, NP, SP, HP
slot = 0
stateno = 10009
ignorehitpause = 1

[State 1210, VarAdd]   ; Check # of hits, successful or guarded
type = ParentVarAdd
trigger1 = MoveContact
ignorehitpause = 1
v = 1
value = 1

[State 1210, VarAdd]   ; Check # of hits, successful or guarded
type = VarAdd
trigger1 = MoveContact
ignorehitpause = 1
v = 1
value = 1

[State 212100, Reset]
type = MoveHitReset
trigger1 = MoveContact
ignorehitpause = 1

[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow



[State 1210, 3]
type = HitDef
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = 1 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) < 6
id = 1000
attr = S, SP
damage = 25, 5
animtype = Hard
priority = 7,Hit
hitflag = MAF
guardflag = MA
hitsound = S1,1
guardsound = S1,0
pausetime = 6,8
sparkno = -1
guard.sparkno = -1
sparkxy = 0, 0
ground.type = High
ground.slidetime = 15
ground.hittime  = 20
ground.velocity = -6,-2
air.hittime = 20
air.type = Low
air.velocity = -6,0
air.fall = 1
fall = 1
fall.recover = 0
envshake.time = 17
envshake.freq = 30
envshake.ampl = -12


[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow

[State 1000, 7]
type = playerpush
trigger1 = 1
value = 0



[State 1210, State]
type = changestate
trigger1 = !numhelper(100013)  ; # of hit/guard hits successful
trigger2 = !numhelper(10001)  ; # of hit/guard hits successful
value = 100015

[State 1210, State]
type = changestate
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) >= 6
value = 100015

[Statedef 100013]        ;Change the value to fit your needs
type = A
movetype = A
physics = N
ctrl = 0
velset = 0,0
sprpriority = 5
anim =100013
juggle = 2

[State 1210, NotHitBy]
type = velset
trigger1 = 1
x = ifelse((time<2 && var(2)>1),1,16)


[State 420, Helper]         ;This summons helper
type = Helper
trigger1 = 1
persistent = 1     ;It summons when the state is at the 11th tick. Change as needed.
helpertype = normal         ;Normal, so not player XD
name = "Kamehameha Trail" ;Give it a name, it's a good thing.
ID = 100012               ;The indentification number of the helper
stateno = 100012           ;The helper's stateno. If you change it in the helper's state, change it here too.
pos = 0, 0              ;The position where the helper appears
postype = p1                ;It defines from where it counts the distance.
facing = 1                  ;1 is foward, -1 is backward. We want it foward.
keyctrl = 0                 ;Keep this at 0.
ownpal = 1                  ;This means that the parent's PalFX's won't affect the helper.



[State 1210, NotHitBy]
type = NotHitBy
trigger1 = 1
value = SCA, NA, SA, HA, NT, ST, HT
time = 1

[State 1210, HitBy]
type = HitBy
trigger1 = 1
value = SCA, NP, SP, HP
time = 1

[State 1210, HitOverride]
type = HitOverride
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) >= 6
time = -1
attr = SCA, NP, SP, HP
slot = 1
stateno = 8101
ignorehitpause = 1

[State 1210, HitOverride]
type = HitOverride
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) < 6
time = -1
attr = SCA, NP, SP, HP
slot = 0
stateno = 10009
ignorehitpause = 1

[State 1210, VarAdd]   ; Check # of hits, successful or guarded
type = VarAdd
trigger1 = MoveContact
ignorehitpause = 1
v = 1
value = 1

[State 212100, Reset]
type = MoveHitReset
trigger1 = MoveContact
ignorehitpause = 1

[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow



[State 1210, 3]
type = HitDef
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = 1 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) < 6
id = 1000
attr = S, SP
damage = 25, 5
animtype = Hard
priority = 7,Hit
hitflag = MAF
guardflag = MA
hitsound = S1,1
guardsound = S1,0
pausetime = 6,8
sparkno = -1
guard.sparkno = -1
sparkxy = 0, 0
ground.type = High
ground.slidetime = 15
ground.hittime  = 20
ground.velocity = -6,-2
air.hittime = 20
air.type = Low
air.velocity = -6,0
air.fall = 1
fall = 1
fall.recover = 0
envshake.time = 17
envshake.freq = 30
envshake.ampl = -12


[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow

[State 1210, State]
type = destroySelf
trigger1 = !numhelper(10001)  ; # of hit/guard hits successful
ignorehitpause = 1

[State 1210, State]
type = changestate
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) >= 6
value = 100016

[State 1210, Destroy]
type = DestroySelf
trigger1 = BackEdgeBodyDist <= -100
trigger2 = FrontEdgeBodyDist <= -100

[Statedef 100014]        ;Change the value to fit your needs
type = A
movetype = A
physics = N
ctrl = 0
velset = 0,0
sprpriority = 3
anim =100014
juggle = 2


[State 4000, BindToRoot]
type = BindToRoot ; This is to ensure the proper position for the helper.
trigger1 = 1
ignorehitpause = 1
pos = 15,-27




[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow





[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow


[State 1210, State]
type = destroySelf
trigger1 = time = 2


[State 1210, Destroy]
type = DestroySelf
trigger1 = BackEdgeBodyDist <= -100
trigger2 = FrontEdgeBodyDist <= -100

[Statedef 100015]        ;Change the value to fit your needs
type = A
movetype = A
physics = N
ctrl = 0
velset = 0,0
sprpriority = 1
anim =100015
juggle = 2


[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow

[State 212100, Reset]
type = assertspecial
trigger1 = 1
flag = noshadow

[State 1210, State]
type = destroyself
trigger1 = time = 2

[Statedef 100016]        ;Change the value to fit your needs
type = A
movetype = A
physics = N
ctrl = 0
velset = 0,0
sprpriority = 5
anim =100016
juggle = 2

[State 1210, NotHitBy]
type = velset
trigger1 = 1
x = ifelse((time<2 && var(2)>1),1,16)


[State 420, Helper]         ;This summons helper
type = Helper
trigger1 = 1
persistent = 1     ;It summons when the state is at the 11th tick. Change as needed.
helpertype = normal         ;Normal, so not player XD
name = "Kamehameha Trail" ;Give it a name, it's a good thing.
ID = 100012               ;The indentification number of the helper
stateno = 100012           ;The helper's stateno. If you change it in the helper's state, change it here too.
pos = 0, 0              ;The position where the helper appears
postype = p1                ;It defines from where it counts the distance.
facing = 1                  ;1 is foward, -1 is backward. We want it foward.
keyctrl = 0                 ;Keep this at 0.
ownpal = 1                  ;This means that the parent's PalFX's won't affect the helper.


[State 1210, NotHitBy]
type = NotHitBy
trigger1 = 1
value = SCA, NA, SA, HA, NT, ST, HT
time = 1

[State 1210, HitBy]
type = HitBy
trigger1 = 1
value = SCA, NP, SP, HP
time = 1



[State 1210, Destroy]
type = DestroySelf
trigger1 = time = 2

[Statedef 10009]
type       = A
movetype   = I
physics      = A
anim      = -1
velset = 0,0
ctrl      = 0
poweradd   = 0
juggle      = 0
facep2      = 0
sprpriority   = -4

[State 1210, HitOverride]
type = HitOverride
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) >= 6
time = -1
attr = SCA, NP, SP, HP
slot = 1
stateno = 8101
ignorehitpause = 1

[State 1210, HitOverride]
type = HitOverride
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1 = Time <= 0 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) < 6
time = -1
attr = SCA, NP, SP, HP
slot = 0
stateno = 10009
ignorehitpause = 1

[State 1210, VarAdd]   ; Check # of hits, successful or guarded
type = VarAdd
trigger1 = time = 0
ignorehitpause = 1
v = 1
value = 1

[State State]
type= changestate
triggerall = numhelper(10001) && numhelper(100012) && numhelper(100013)
trigger1= time = 2 && helper(10001), var(1) + helper(100012), var(1) + helper(100013), var(1) < 6
value = 8101

[State Shrink State]
type= changestate
trigger1= prevstateno = 10001 && time = 2
value = 10001

[State Shrink State]
type= changestate
trigger1= prevstateno = 100012 && time = 2
value = 100012

[State Shrink State]
type= changestate
trigger1= prevstateno = 100013 && time = 2
value = 100013


XGargoyle

Please take no offense from what I'm going to tell you, but this is probably one of the worse code snippets I've ever seen in my life.

In state 10001:
Quote[State 420, Helper]         ;This summons helper
type = Helper
trigger1 = 1
persistent = 0     ;It summons when the state is at the 11th tick. Change as needed.

helpertype = normal         ;Normal, so not player XD
name = "Kamehameha Blast" ;Give it a name, it's a good thing.
ID = 100013               ;The indentification number of the helper
stateno = 100013          ;The helper's stateno. If you change it in the helper's state, change it here too.
pos = 10, 0              ;The position where the helper appears
postype = p1                ;It defines from where it counts the distance.
facing = 1                  ;1 is foward, -1 is backward. We want it foward.
keyctrl = 0                 ;Keep this at 0.
ownpal = 1                  ;This means that the parent's PalFX's won't affect the helper.

The bolded part means that you will create a new helper every gametick and then use persistent=0 so that only happens once. TO do this it's better to simply put trigger1 = !time, or if you want to activate on the 11th tick, use trigger1 = time=11 or trigger1 = AnimElemTime(x)=y, if you want to trigger on a specific frame&tick

What's worse, in states 100013 and 100015, you have this:
Quote[State 420, Helper]         ;This summons helper
type = Helper
trigger1 = 1
persistent = 1 
   ;It summons when the state is at the 11th tick. Change as needed.
helpertype = normal         ;Normal, so not player XD
name = "Kamehameha Trail" ;Give it a name, it's a good thing.
ID = 100012               ;The indentification number of the helper
stateno = 100012           ;The helper's stateno. If you change it in the helper's state, change it here too.
pos = 0, 0              ;The position where the helper appears
postype = p1                ;It defines from where it counts the distance.
facing = 1                  ;1 is foward, -1 is backward. We want it foward.
keyctrl = 0                 ;Keep this at 0.
ownpal = 1                  ;This means that the parent's PalFX's won't affect the helper.

You have a persistent=1, this means you are creating the same helper again and again, one new helper per tick. In less than a second, you will normally hit the maximum limit of helpers allowed by Mugen (defined in mugen.cfg), and the older Helpers will start removing themselves to make room for the new ones, resulting in these gaps in the kamehameha trail.

Also, the use of multiple helper variables to manage the nothitby and hitdef, is at least awkward and cumbersome, there are better ways to handle it, but that's another story


XGargoyle: Battle posing since 1979
http://xgargoyle.mgbr.net
http://www.pandorabots.com/pandora/talk?botid=e71c0d43fe35093a  <-- Please click that link
http://paypal.me/XGargoyle  <-- Donations welcome!

SaltAddict

Quote from: XGargoyle on June 14, 2016, 05:08:23 PM
Please take no offense from what I'm going to tell you, but this is probably one of the worse code snippets I've ever seen in my life.

In state 10001:
Quote[State 420, Helper]         ;This summons helper
type = Helper
trigger1 = 1
persistent = 0     ;It summons when the state is at the 11th tick. Change as needed.

helpertype = normal         ;Normal, so not player XD
name = "Kamehameha Blast" ;Give it a name, it's a good thing.
ID = 100013               ;The indentification number of the helper
stateno = 100013          ;The helper's stateno. If you change it in the helper's state, change it here too.
pos = 10, 0              ;The position where the helper appears
postype = p1                ;It defines from where it counts the distance.
facing = 1                  ;1 is foward, -1 is backward. We want it foward.
keyctrl = 0                 ;Keep this at 0.
ownpal = 1                  ;This means that the parent's PalFX's won't affect the helper.

The bolded part means that you will create a new helper every gametick and then use persistent=0 so that only happens once. TO do this it's better to simply put trigger1 = !time, or if you want to activate on the 11th tick, use trigger1 = time=11 or trigger1 = AnimElemTime(x)=y, if you want to trigger on a specific frame&tick

What's worse, in states 100013 and 100015, you have this:
Quote[State 420, Helper]         ;This summons helper
type = Helper
trigger1 = 1
persistent = 1 
   ;It summons when the state is at the 11th tick. Change as needed.
helpertype = normal         ;Normal, so not player XD
name = "Kamehameha Trail" ;Give it a name, it's a good thing.
ID = 100012               ;The indentification number of the helper
stateno = 100012           ;The helper's stateno. If you change it in the helper's state, change it here too.
pos = 0, 0              ;The position where the helper appears
postype = p1                ;It defines from where it counts the distance.
facing = 1                  ;1 is foward, -1 is backward. We want it foward.
keyctrl = 0                 ;Keep this at 0.
ownpal = 1                  ;This means that the parent's PalFX's won't affect the helper.

You have a persistent=1, this means you are creating the same helper again and again, one new helper per tick. In less than a second, you will normally hit the maximum limit of helpers allowed by Mugen (defined in mugen.cfg), and the older Helpers will start removing themselves to make room for the new ones, resulting in these gaps in the kamehameha trail.

Also, the use of multiple helper variables to manage the nothitby and hitdef, is at least awkward and cumbersome, there are better ways to handle it, but that's another story

Yes, I know the code is really messy. For the last part, I need to create a trail every tick because of the speed the beam moves at. It works fine as long as it doesn't hit the opponent, the gaps only happen if it hits.

Noctis

You need to try what we suggest. You're creating too many helpers too fast. Put a limit on it or something. Like trigger1 = time%1=0 && time >= 11
and remove the persistent altogether.
Fix that and then we'll see if the problem still persists. When it does, we'll move on from there.

(Youtube) (WIP) (Mediafire) (New Anime Shop) My Manga Reviews! Personal favorite Patreon! Check her out!

"There is nothing either good or bad, but thinking makes it so."

SaltAddict

Quote from: Noctis on June 15, 2016, 12:07:09 AM
You need to try what we suggest. You're creating too many helpers too fast. Put a limit on it or something. Like trigger1 = time%1=0 && time >= 11
and remove the persistent altogether.
Fix that and then we'll see if the problem still persists. When it does, we'll move on from there.

I changed the trigger to time > 2, then I changed it again to the trigger you posted. It still happens with both of them.

Cyanide

Doing beams like this is OLD, and in the case of the way you're managing it... difficult. Helpers have a limit of 56 at once, and if memory serves, shared between p1 and p2 because it's a mugen limit rather than a player one (i could be wrong about this)

I've done this with projectiles which is actually far easier from a "collision" point of view and you can have more on screen at once, they're just way less flexible. Even then you run into limitations.

Your gaps are partly caused because you have pausetime = 6,8 on your hitdefs, and the velsets are set without ignorehitpause at all, so they'll abide by that.

[State 1210, NotHitBy]
type = velset
trigger1 = 1
x = ifelse((time<2 && var(2)>1),1,16)

This is rather silly too. I mean, it needs the ignorehitpause if you want to keep it moving (tbh your pausetime for any beam should be 0 for the thing doing the hitting) But you never set var(2) anywhere. It's just x = 16. Variables are unique on a per helper basis. As you don't set var(2) anywhere in state 10013, it's never anything other than 0. A lot could be done with this to make it A: Work and B: easier to read.


In M.U.G.E.N there is no magic button

They say a little knowledge is a dangerous thing, but it's not one half so bad as a lot of ignorance.

Noctis

Quote from: Cyanide on June 15, 2016, 08:27:15 AM
Doing beams like this is OLD, and in the case of the way you're managing it... difficult. Helpers have a limit of 56 at once, and if memory serves, shared between p1 and p2 because it's a mugen limit rather than a player one (i could be wrong about this)

It's shared. I also think everything relating to that is shared. Explods, SysExplods, AfterImages, etc.
I used to have issues with the Explod limit, but it could've just been my inexperience.

(Youtube) (WIP) (Mediafire) (New Anime Shop) My Manga Reviews! Personal favorite Patreon! Check her out!

"There is nothing either good or bad, but thinking makes it so."

SaltAddict

Quote from: Cyanide on June 15, 2016, 08:27:15 AM
Doing beams like this is OLD, and in the case of the way you're managing it... difficult. Helpers have a limit of 56 at once, and if memory serves, shared between p1 and p2 because it's a mugen limit rather than a player one (i could be wrong about this)

I've done this with projectiles which is actually far easier from a "collision" point of view and you can have more on screen at once, they're just way less flexible. Even then you run into limitations.

Your gaps are partly caused because you have pausetime = 6,8 on your hitdefs, and the velsets are set without ignorehitpause at all, so they'll abide by that.

[State 1210, NotHitBy]
type = velset
trigger1 = 1
x = ifelse((time<2 && var(2)>1),1,16)

This is rather silly too. I mean, it needs the ignorehitpause if you want to keep it moving (tbh your pausetime for any beam should be 0 for the thing doing the hitting) But you never set var(2) anywhere. It's just x = 16. Variables are unique on a per helper basis. As you don't set var(2) anywhere in state 10013, it's never anything other than 0. A lot could be done with this to make it A: Work and B: easier to read.

Even with ignorehitpause and pausetime = 0 it still happens. I didn't know it was an old way of doing it. Where can I see how this is done with projectiles? And is there a new, better way of doing it with helpers?