True reflecting projectiles are impossible except in a full game environment. Up to you if you want to do the halfass but sorta reliable version.
For speed up it depends what sort of projectile it is. Whether it's a helper or a projectile
Projectiles take an Accel parameter which works like a constant veladd
accel = 0,-1
Will make the projectile accelerate upwards
Helpers use the veladd controller. This is in the docs and you can look it up.
yes, i'd like to do the "half-ass" reflecting version plz :3
also, I based off of ryu's shinku hadoken to make his jupiter thunder.
but when it hits an opponent it sometimes goes to 3-5 when it should always give 5 hits.
where did i go wrong?
Spoiler, click to toggle visibilty
;========================<JUPITER THUNDER PROJECTILE>=============================
[Statedef 3005]
type = S
physics = N
movetype = A
ctrl = 0
velset = 0, 0
sprpriority = 4
[State 3005, HitOverride]
type = hitoverride
trigger1 = 1
time = -1
attr = SCA, AA, AP, AT
stateno = ifelse(var(2) < 5, 3005, 3007)
ignorehitpause = 1
[State 3005, hitby]
type = hitby
trigger1 = 1
time = -1
value = SCA, NP, SP, HP
ignorehitpause = 1
[State 3005, Anim]
type = changeanim
trigger1 = !time && !prevstateno
value = 3005
[State 3005, hitvar]
type = varadd
trigger1 = !time
var(2) = 1
[State 1055, Counter Flag]
type = VarSet
trigger1 = NumEnemy
trigger1 = moveContact != 1
var(9) = (EnemyNear, MoveType = A)
[State 1055, Dampener]
type = VarSet
trigger1 = 1
fvar(11) = (Root, fvar(10)) * ifElse(var(9), 1.2, 1)
[State 3005, Vel]
type = VelSet
trigger1 = AnimElem = 15
x = ifelse((time < 2 && var(2) > 1), 1, 2)
[State 0, VelAdd]
type = VelAdd
trigger1 = AnimElem = 10
x = 6.3
y = 0
[State 3005, Assert]
type = trans
trigger1 = 1
trans = addalpha
alpha = 256, 256
ignorehitpause = 1
[State 3005, HitSound]
type = playsnd
trigger1 = movehit && numtarget
trigger1 = target, time = 0 && target, movetype = H
value = 2, 6
channel = 1
persistent = 0
ignorehitpause = 1
[State 3005, Hit]
type = hitdef
trigger1= Root,StateNo = 3000 && Var(2) < 5
priority = 4, Hit
attr = S, HP
damage = ceil(ifElse(fvar(11) * 28 < 7, 7, fvar(11) * 28)), 7
animtype = Back
hitflag = MAF
guardflag = M
pausetime = 4 * (var(2) < 5), 8
ground.type = High
ground.slidetime = 16
ground.hittime = 16
ground.velocity = ifelse(var(2) < 5, -10.52, -6), ifelse(var(2) < 5, 0, -6)
guard.velocity = -10.52
ground.cornerpush.veloff = 0
air.velocity = -6, -6
fall = 1
air.fall = 1
fall.recover = 0
getpower = 0
givepower = 36, 36
envshake.time = 16
envshake.freq = 120
envshake.ampl = 6
palfx.sinadd = 64, 64, 64, 4
palfx.mul = 128, 128, 128
palfx.time = 32
sprpriority = 4
yaccel = 0.5
forcestand = 1
[State 3005, Hit]
type = hitdef
trigger1= Root,StateNo = 3000 && Var(2) = 5
priority = 4, Hit
attr = S, HP
damage = ceil(ifElse(fvar(11) * 28 < 7, 7, fvar(11) * 28)), 7
animtype = Back
hitflag = MAF
guardflag = M
pausetime = 4 * (var(2) < 5), 8
ground.type = High
ground.slidetime = 16
ground.hittime = 16
ground.velocity = ifelse(var(2) < 5, -10.52, -6), ifelse(var(2) < 5, 0, -6)
guard.velocity = -10.52
ground.cornerpush.veloff = 0
air.velocity = -6, -6
fall = 1
air.fall = 1
fall.recover = 0
getpower = 0
givepower = 36, 36
envshake.time = 16
envshake.freq = 120
envshake.ampl = 6
palfx.sinadd = 64, 64, 64, 4
palfx.mul = 128, 128, 128
palfx.time = 32
sprpriority = 4
yaccel = 0.5
forcestand = 1
[State 3005, Miss]
type = hitdef
trigger1 = numenemy
trigger1 = (enemynear, stateno = [5070, 5071])
attr = S, HP
hitflag =
[State 3005, HitSound]
type = PlaySnd
trigger1 = MoveContact = 1 && NumTarget
trigger1 = !(Target, HitShakeOver)
value = ifElse(MoveGuarded, 3, 2), ifElse(MoveGuarded, 0, 6)
channel = 3
persistent = 0
ignorehitPause = 1
[State 1055, Static Particles]
type = Helper
trigger1 = !NumHelper(8156)
trigger1 = MoveHit = 1 && NumTarget
trigger1 = !(Target, HitShakeOver)
trigger1 = var(43) := (Target, ID)
helperType = Normal
stateNo = 8156
ID = 8156
name = "Static Particles"
posType = P2
ownPal = 1
ignoreHitPause = 1
[State 3005, HitSpark]
type = Helper
trigger1 = MoveContact = 1 && NumTarget
trigger1 = !(Target, HitShakeOver)
helperType = Normal
stateNo = ifElse(MoveGuarded, 8001, 8013)
ID = 8000
name = "Spark"
posType = P1
pos = ifElse(P2Dist x < 0, 0, ifElse(P2Dist x < 20, ceil(P2Dist x), 20)), 0
facing = -1
ownPal = 1
size.xScale = 1
size.yScale = 1
pauseMoveTime = 65535
superMoveTime = 65535
persistent = 0
ignoreHitPause = 1
[State 3005, 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 < 0, 0, ifElse(P2Dist x < 20, ceil(P2Dist x), 20)), 0
ownPal = 1
pauseMoveTime = 65535
superMoveTime = 65535
persistent = 0
ignoreHitPause = 1
[State 3005, HitCount]
type = ParentVarAdd
trigger1 = !Time
trigger1 = MoveContact && NumTarget
var(13) = 1
persistent = 0
[State 3005, ProjContact]
type = VarSet
trigger1 = MoveContact && NumTarget
var(18) = 1
persistent = 0
[State 3005, ProjContact]
type = ParentVarSet
trigger1 = MoveContact && NumTarget
trigger1 = Root, StateNo = 3000
var(18) = 1
persistent = 0
[State 3005, End]
type = changestate
trigger1 = movecontact
value = ifelse(var(2) < 5, 3005, 3007)
[State 3005, End]
type = changestate
trigger1 = !AnimTime
value = 3007
[State 3005, End]
type = destroyself
trigger1 = pos x != [ -240, 240]
[Statedef 3007]
type = A
physics = N
movetype = I
anim = 3007
ctrl = 0
velset = 0, 0
sprpriority = 4
[State 3007, Assert]
type = trans
trigger1 = 1
trans = addalpha
alpha = 256, 256
ignorehitpause = 1
[State 3007, End]
type = destroyself
trigger1 = !animtime