YesNoOk

Show content

This section allows you to browse the content for this member. Note that you can only see content for which you have sufficient viewing permissions.

**
Tyrannosaurus rex is Offline
Contact Tyrannosaurus rex:

Tyrannosaurus rex

User

Messages by Tyrannosaurus rex

    

The Photoshop pixel art Thread

 September 08, 2020, 10:00:39 PM View in topic context
 Posted by Tyrannosaurus rex  in The Photoshop pixel art Thread (Started by Tyrannosaurus rex September 08, 2020, 10:00:39 PM
 Board: Graphics

Hey everyone,
                        I'm starting this thread for the purpose of inviting masters of pixel art and sprite animations to share their tips on Photoshop for other pixel art enthusiasts. I use Photoshop 2017 and just recently downloaded Photoshop 2020 trial version to see if their is any significant difference in capability with tools such as the much awaited rotating brush/pattern feature.

As of now, I don't see anything particularly useful in it, and more over, I see issues that didn't exist in 2017 such as rotating images. I will discuss some of my techniques later down the thread should interest pick up.

Discussion on other useful image editing software like Paint Shop pro and GIMP would also be welcomed here in regards to pixel art sprite work.

Thanks
    

Re: CyberBit Mugen

 May 21, 2018, 07:44:08 AM View in topic context
 Posted by Tyrannosaurus rex  in CyberBit Mugen (Started by Lord-S April 21, 2018, 10:41:11 PM
 Board: M.U.G.E.N Discussion

If you intend to re-write Diablo as a new updated character, I can provide you all the Primal Rage 2 sprites needed for him. You'll just need to replace the ones you have with the ones I provide you. He is always been my favorite character in that game along with Sauron, Armadon and Blizzard.
    

Re: CyberBit Mugen

 May 21, 2018, 03:00:50 AM View in topic context
 Posted by Tyrannosaurus rex  in CyberBit Mugen (Started by Lord-S April 21, 2018, 10:41:11 PM
 Board: M.U.G.E.N Discussion

Quote
Got it.

Well, I did some test with Primal Rage 2 sprite rip and notice the sprites is 256 colors, while in the original game is 64 colors (IIRC).

I don't want to  use  new PR2 sprites with the old ones, even editing it to looks like the original. I'd like to rip the whole thing again and do a proper PR2 char. But I have no plans to do it, as I have no time and patience as 16 yrs ago.

About the stage, those sprites is ready to use, there's no need to edit! The parallax effect you code in Mugen.
I'll code the stage anyway. :)

Don't worry. I intend to do it myself. All I just need is help from you on certain tasks. I actually had a few inquiries:

- Is there a way to improve the resolution? The sprites all look a bit distorted and I'm wondering what can be the best method to change resolution and improve the display (even if it means setting to full screen perpetually).
- Your talon is a bit broken in A.I and I was wondering what can be done to ease up on some attacks he keeps on spamming like that annoying Face Ripper attack. Its even very rare for him to substitute that with the jugular bite and add variety but I digress. This is about adjusting frequency of the face ripper attack, given that even the arcade version was a bit more balanced at the highest difficulty. 
- How can I implement the exploding heart and brain as helpers for each character. Could you provide me one example?
- Given that I will be adding quite a lot of material to your whole Primal Rage Mugen package, is it okay that I modify your exclusive name on the title screen/intro and character select screen to be removed to make this more of a full game project, and instead give credit to you on a credits screen?

Rare glitches:
- Diablo has a glitch, that at times when the opponent hits with a heavy attack (like ) while he is in the air, he suddenly shifts to the air and loses gravity on the ground. I will see what can be done to correct this myself,  but I just want to know what you think is causing this.
    

Re: CyberBit Mugen

 May 21, 2018, 01:58:05 AM View in topic context
 Posted by Tyrannosaurus rex  in CyberBit Mugen (Started by Lord-S April 21, 2018, 10:41:11 PM
 Board: M.U.G.E.N Discussion

    

Re: CyberBit Mugen

 May 21, 2018, 01:52:33 AM View in topic context
 Posted by Tyrannosaurus rex  in CyberBit Mugen (Started by Lord-S April 21, 2018, 10:41:11 PM
 Board: M.U.G.E.N Discussion

The reason they look blurred is because this website doesn't allow full pixel resolution. Go on the link below, and download them.

https://postimg.cc/image/btcv40vwb/

I ripped them using the primal rage 2 emulator. It would be awesome if you can update Primal Rage.
    

Re: CyberBit Mugen

 May 20, 2018, 11:23:50 PM View in topic context
 Posted by Tyrannosaurus rex  in CyberBit Mugen (Started by Lord-S April 21, 2018, 10:41:11 PM
 Board: M.U.G.E.N Discussion

Here is a sheet containing some new moves for Diablo. I was hoping you would add his stomp attack someday.

    

Re: CyberBit Mugen

 May 20, 2018, 10:28:38 PM View in topic context
 Posted by Tyrannosaurus rex  in CyberBit Mugen (Started by Lord-S April 21, 2018, 10:41:11 PM
 Board: M.U.G.E.N Discussion

    

Re: Ripping and utilizing Parallax backgrounds

 May 14, 2018, 08:43:58 PM View in topic context
 Posted by Tyrannosaurus rex  in Ripping and utilizing Parallax backgrounds (Started by Tyrannosaurus rex May 14, 2018, 01:26:54 AM
 Board: M.U.G.E.N Development Help

It looks a bit complicated but thanks. I'll try it out and post back if it works out.
    

Re: CyberBit Mugen

 May 14, 2018, 05:33:18 AM View in topic context
 Posted by Tyrannosaurus rex  in CyberBit Mugen (Started by Lord-S April 21, 2018, 10:41:11 PM
 Board: M.U.G.E.N Discussion

Awesome to see you here Lord Sinistro. I'm quite fond of your Primal Rage Characters and the entire package. I was actually doing some ripping work for them. Here is what I have so far:

- Props for Diablo's stage. All that's really needed to finish this is the floor, but I don't understand how parallax scrolling works. I can rips of them at one stationary view, but not the whole parallax distortion. 



- Background for Diablo stages. The top ones are basically encompassing the level from its full horizontal length. The bottom ones comprise of the lava animation on the volcano.



- Heart and brain explosion animation when a player dies.


    

Ripping and utilizing Parallax backgrounds

 May 14, 2018, 01:26:54 AM View in topic context
 Posted by Tyrannosaurus rex  in Ripping and utilizing Parallax backgrounds (Started by Tyrannosaurus rex May 14, 2018, 01:26:54 AM
 Board: M.U.G.E.N Development Help

Hey everyone,
                        I was looking to rip stages from Primal Rage arcade, and luckily enough for me, there were cheat scripts available to turn off stage objects and rip the foreground structures easily. The problem came when I looked on to ripping the floor. Case in point:

https://s9.postimg.cc/fvey2e4rj/0023.png
https://s9.postimg.cc/ipi3fuenj/0024.png

Here is a video of game play in action. Its not the best quality but its just to show the parallax in action.

https://www.youtube.com/watch?v=zMEWlfA8TAs

My issue is that on certain stages like Diablo's Inferno, The floor has animated lava in it and distorts according to where the players move, to stimulate a very neat looking parallax effect. Lets say I rip the animated lava with ground, I would still be confused on how I can distort it like it does on the Arcade emulator (which I suspect is handled by the engine). 

Any advice would be useful
Thank you
    

Re: TB LUCARIO LASER questions

 May 28, 2017, 08:46:38 PM View in topic context
 Posted by Tyrannosaurus rex  in TB LUCARIO LASER questions (Started by Tyrannosaurus rex May 17, 2017, 10:23:39 PM
 Board: M.U.G.E.N Development Help

Quote
One thing though... You think the right side of your image is the unnatural side?? Because just SNAPPING into position is impossible. It should look like the right side, not the left.

Because this is a laser projectile, it has to be like the left side, as lasers don't break off into pieces. The snapping in the position is probably the biggest challenge with using projectiles and not helpers. If I can get this done with projectiles, The issue is for the most part resolved. 

This is a key feature of what I'm hoping to make. I hope there is someway to achieve this.
    

Re: TB LUCARIO LASER questions

 May 27, 2017, 10:35:46 PM View in topic context
 Posted by Tyrannosaurus rex  in TB LUCARIO LASER questions (Started by Tyrannosaurus rex May 17, 2017, 10:23:39 PM
 Board: M.U.G.E.N Development Help

Alright, It been really difficult trying to make this whole thing entirely with helpers here, so I'm thinking that perhaps it should be a mix of projectile and helpers. 

I know that for player instances something like the bottom code would allow the player to change states based on the direction key and holding the attack button:

[State 2200, 18]
type = ChangeState
trigger1 = command = "holdup"
trigger1 = AnimTime = 0
value = 215
ctrl = 0

[State 2200, 18]
type = ChangeState
trigger1 = command = "holddown"
trigger1 = AnimTime = 0
value = 213
ctrl = 0

[State 2200, 18]
type = ChangeState
trigger1 = command != "hold_y"
trigger1 = AnimTime = 0
trigger2 = power < 20
value = 50
ctrl = 1


Its creating the projectile and the helper together to move in a precise stream without breaking off into unnatural pieces from changing directional states, that is becoming a real pain to resolve.




It would even work, if it is in a motion that give the illusion of being a single flame stream that moves like a snake.

These are parameters the control the primary behavior for projectiles:

type = Projectile
trigger1 = //animelem = 2
trigger2 = //animelem = 4
Projremovetime = 6
projmiSStime = 1
projhits = 5
projremove = 1
projpriority = 0
projshadow = 0,0,0
projanim = 218
projscale = .95,.10
projhitanim = 218
projremanim = 218
projcancelanim = 206
velocity = 7,-19

I stumped on what I can add there to make the projectiles go across the screen as well as move precisely to the angular direction they are directed at.
    

Re: TB LUCARIO LASER questions

 May 19, 2017, 09:05:16 PM View in topic context
 Posted by Tyrannosaurus rex  in TB LUCARIO LASER questions (Started by Tyrannosaurus rex May 17, 2017, 10:23:39 PM
 Board: M.U.G.E.N Development Help

Alright, I'll explain. Here is the code actually used in Lucario:

Code:
[Statedef 2000]
Type = S
MoveType = A
Physics = S
Juggle = 1
VelSet = 0,0
Ctrl = 0
Anim = 2000
PowerAdd = -2000
SprPriority = 2

[State 2000, NotHitBy]
Type = NotHitBy
Trigger1 = 1
Value = SCA,AA,AP,AT
Time = 1
IgnoreHitPause = 1

[State 2000, Helper]
Type = Helper
Trigger1 = Time = 0
Name = "Super Helper"
ID = 6000
StateNO = 6000
Pos = 0,0
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
SuperMoveTime = 216000

[State 2000, LifeSet]
Type = LifeSet
Trigger1 = (Helper(6000),Life) < 1000
Trigger1 = (Helper(6000),Life)
Value = (Helper(6000),Life)

[State 2000, Back Arm]
Type = Helper
Trigger1 = Time = 202
Name = "Back Arm"
ID = 2001
StateNO = 2001
Pos = 21,-81
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
SuperMoveTime = 216000

[State 2000, Front Arm]
Type = Helper
Trigger1 = Time = 202
Name = "Front Arm"
ID = 2002
StateNO = 2002
Pos = 21,-83
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
SuperMoveTime = 216000

[State 2000, VarSet]
Type = VarSet
Trigger1 = Time = 0
V = 1
Value = 0

[State 2000, SuperPause]
Type = SuperPause
Trigger1 = Time = 0
Time = 196
Anim = -1
Sound = S1000,0
Pos = 0,0
MoveTime = 196
Darken = 1
P2DefMul = 0
PowerAdd = 0
UnHittable = 1

[State 2000, Explod]
Type = Explod
Trigger1 = Time = 25
Anim = 1501
ID = 2000
Space = Stage
Pos = -130 * Facing,-255
Facing = Facing
VFacing = 1
BindID = ID
BindTime = -1
Vel = 0,0
Accel = 0,0
RemoveTime = -2
Scale = 1,1
SprPriority = 9
OnTop = 0
Shadow = 0,0,0
OwnPal = 1
RemoveOnGetHit = 1
SuperMoveTime = 216000

[State 2000, Aura Effect]
Type = Explod
Trigger1 = Time = 25
Anim = 1502 + ((PalNo = 4)*5)
ID = 2001
Space = Stage
Pos = 22 * Facing,-54
Facing = Facing
VFacing = 1
BindID = ID
BindTime = -1
Vel = 0,0
Accel = 0,0
RemoveTime = -2
Scale = 1,1
SprPriority = 8
OnTop = 0
Shadow = 0,0,0
OwnPal = 1
RemoveOnGetHit = 1
SuperMoveTime = 216000

[State 2000, Voice]
Type = PlaySnd
Trigger1 = Time = 30
Value = S2000,0
VolumeScale = 100
Channel = 0
LowPriority = 0
Freqmul = 1.0
Loop = 0
Pan = 0

[State 2000, Sound]
Type = PlaySnd
Trigger1 = Time = 49
Value = S2000,2
VolumeScale = 100
Channel = 1
LowPriority = 0
Freqmul = 1.0
Loop = 0
Pan = 0

[State 2000, Effects 1]
Type = Explod
Trigger1 = Time = 49
Anim = 2005
ID = 2002
Space = Stage
Pos = -22 * Facing,-68
Facing = Facing
VFacing = 1
BindID = ID
BindTime = -1
Vel = 0,0
Accel = 0,0
RemoveTime = -2
Scale = 0.5,0.5
SprPriority = 9
OnTop = 0
Shadow = 0,0,0
OwnPal = 1
RemoveOnGetHit = 1
SuperMoveTime = 216000

[State 2000, Effects 2]
Type = Explod
Trigger1 = Time = 49
Anim = 2006
ID = 2006
Space = Stage
Pos = -22 * Facing,-78
Facing = Facing
VFacing = 1
BindID = ID
BindTime = -1
Vel = 0,0
Accel = 0,0
RemoveTime = -2
Scale = 0.5,0.5
SprPriority = 8
OnTop = 0
Shadow = 0,0,0
OwnPal = 1
RemoveOnGetHit = 1
SuperMoveTime = 216000

[State 2000, Voice 2]
Type = PlaySnd
Trigger1 = Time = 193
Value = S2000,1
VolumeScale = 100
Channel = 0
LowPriority = 0
Freqmul = 1.0
Loop = 0
Pan = 0

[State 2000, Aura Effect 2]
Type = Explod
Trigger1 = Time = 193
Anim = 1503 + ((PalNo = 4)*5)
ID = 2004
Space = Stage
Pos = 0,0
Facing = Facing
VFacing = 1
BindID = ID
BindTime = -1
Vel = 0,0
Accel = 0,0
RemoveTime = -2
Scale = 0.5,0.5
SprPriority = 9
OnTop = 0
Shadow = 0,0,0
OwnPal = 1
RemoveOnGetHit = 1
SuperMoveTime = 216000

[State 2000, VarAdd]
Type = VarAdd
Trigger1 = !AILevel
Trigger1 = Time >= 202
Trigger1 = Command = "holdup"
Trigger1 = Var(1) < 45
V = 1
Value = 1

[State 2000, VarAdd]
Type = VarAdd
Trigger1 = !AILevel
Trigger1 = Time >= 202
Trigger1 = Command = "holddown"
Trigger1 = Var(1) > 0
V = 1
Value = -1

[State 2000, VarSet]
Type = VarSet
Trigger1 = AILevel
Trigger1 = Time >= 202
V = 2
Value = -Floor((180*ATan(P2Dist Y/IfElse(P2Dist X <= 0, 0.1, P2Dist X*1.0)))/PI)

[State 2000, VarAdd]
Type = VarAdd
Trigger1 = AILevel
Trigger1 = Time >= 202
Trigger1 = Var(1) < Var(2)
Trigger1 = Var(1) < 45
V = 1
Value = 1

[State 2000, VarAdd]
Type = VarAdd
Trigger1 = AILevel
Trigger1 = Time >= 202
Trigger1 = Var(1) > Var(2)
Trigger1 = Var(1) > 0
V = 1
Value = -1

[State 2000, Helper]
Type = Helper
Trigger1 = Time = 202
Name = "Super Aura Storm"
ID = 2003
StateNO = 2003
Pos = 20,-80
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1

[State 2000, End]
Type = ChangeState
Trigger1 = AnimTime = 0
Value = 0
Ctrl = 1

;---------------------------------------------------------------------------
; Back Arm
[Statedef 2001]
Type = S
MoveType = A
Physics = S
Juggle = 1
VelSet = 0,0
Ctrl = 0
Anim = 2001
PowerAdd = 0
SprPriority = 1

[State 2001, BindToRoot]
Type = BindToRoot
Trigger1 = 1
Time = 1
Facing = 1
Pos = 21, -81

[State 2001, AngleDraw]
Type = AngleDraw
Trigger1 = 1
Value = Root,Var(1)

[State 2001, DestroySelf]
Type = DestroySelf
Trigger1 = Root,AnimTime >= -3
Trigger2 = Root,StateNO != 2000

;---------------------------------------------------------------------------
; Front Arm
[Statedef 2002]
Type = S
MoveType = A
Physics = S
Juggle = 1
VelSet = 0,0
Ctrl = 0
Anim = 2002
PowerAdd = 0
SprPriority = 3

[State 2002, BindToRoot]
Type = BindToRoot
Trigger1 = 1
Time = 1
Facing = 1
Pos = 21, -83

[State 2002, AngleDraw]
Type = AngleDraw
Trigger1 = 1
Value = Root,Var(1)

[State 2002, DestroySelf]
Type = DestroySelf
Trigger1 = Root,AnimTime >= -3
Trigger2 = Root,StateNO != 2000

;---------------------------------------------------------------------------
; Super Aura Storm (Helper)
[Statedef 2003]
Type = S
MoveType = A
Physics = S
Juggle = 1
VelSet = 0,0
Ctrl = 0
Anim = 2003 + ((Root,PalNo = 4)*4)
PowerAdd = 0
SprPriority = 9

[State 2003, Trans]
Type = Trans
Trigger1 = Anim = 2003
Trans = Add

[State 2003, Trans]
Type = Trans
Trigger1 = Anim = 2007
Trans = Sub

[State 2003, AngleDraw]
Type = AngleDraw
Trigger1 = 1
Value = Root,Var(1)
Scale = 1.0 / CameraZoom, 1

[State 2003, Som]
Type = PlaySnd
Trigger1 = Time = 0
Value = S1500,1
VolumeScale = 100
Channel = 4
LowPriority = 0
Freqmul = 1.0
Loop = 0
Pan = 0

[State 2003, Hit]
Type = Helper
Trigger1 = !(Time%10)
Trigger1 = Time < 90
Name = "Hit"
ID = 2004
StateNO = 2004
Pos = 150-ABS(Root,Var(1)), -Root,Var(1)
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 0

[State 2003, Hit]
Type = Helper
Trigger1 = !(Time%10)
Trigger1 = Time < 90
Name = "Hit"
ID = 2004
StateNO = 2004
Pos = 150-ABS(Root,Var(1)) + (750 * Cos((Root,Var(1)*PI)/180.0) * Facing), -Root,Var(1) - (750 * Sin((Root,Var(1)*PI)/180.0))
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 750

[State 2003, Hit]
Type = Helper
Trigger1 = !(Time%10)
Trigger1 = Time < 90
Name = "Hit"
ID = 2004
StateNO = 2004
Pos = 150-ABS(Root,Var(1)) + (1500 * Cos((Root,Var(1)*PI)/180.0) * Facing), -Root,Var(1) - (1500 * Sin((Root,Var(1)*PI)/180.0))
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 1500

[State 2003, Hit]
Type = Helper
Trigger1 = Time = 90
Name = "Hit"
ID = 2005
StateNO = 2004
Pos = 150-ABS(Root,Var(1)), -Root,Var(1)
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 0

[State 2003, Hit]
Type = Helper
Trigger1 = Time = 90
Name = "Hit"
ID = 2005
StateNO = 2004
Pos = 150-ABS(Root,Var(1)) + (750 * Cos((Root,Var(1)*PI)/180.0) * Facing), -Root,Var(1) - (750 * Sin((Root,Var(1)*PI)/180.0))
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 750

[State 2003, Hit]
Type = Helper
Trigger1 = Time = 90
Name = "Hit"
ID = 2005
StateNO = 2004
Pos = 150-ABS(Root,Var(1)) + (1500 * Cos((Root,Var(1)*PI)/180.0) * Facing), -Root,Var(1) - (1500 * Sin((Root,Var(1)*PI)/180.0))
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 1500

[State 2003, BindToRoot]
Type = BindToRoot
Trigger1 = 1
Time = 1
Facing = 1
Pos = 20,-80

[State 2003, AssertSpecial]
Type = AssertSpecial
Trigger1 = 1
Flag = NoShadow

[State 2003, Sumir]
Type = DestroySelf
Trigger1 = AnimTime = 0
Trigger2 = Root,StateNO != 2000

;---------------------------------------------------------------------------
; Super Aura Storm (Helper Hit)
[Statedef 2004]
Type = S
MoveType = A
Physics = N
Juggle = 1
VelSet = 0,0
Ctrl = 0
Anim = 2004
PowerAdd = 0
SprPriority = 0

[State 2004, VarSet 1]
Type = VarSet
Trigger1 = (EnemyNear,Const(Size.Mid.Pos.Y) + EnemyNear,Pos Y) < Pos Y
Trigger1 = EnemyNear,Pos Y < 0
V = 0
Value = 1

[State 2004, VarSet 2]
Type = VarSet
Trigger1 = (EnemyNear,Const(Size.Mid.Pos.Y) + EnemyNear,Pos Y) > Pos Y
V = 0
Value = -1

[State 2004, VarSet 3]
Type = VarSet
Trigger1 = (EnemyNear,Const(Size.Mid.Pos.Y) + EnemyNear,Pos Y) = Pos Y
V = 0
Value = 0

[State 2004, VarSet 4]
Type = VarSet
Trigger1 = 1
V = 1
Value = Parent,Pos X + (150 * Facing)-ABS(Root,Var(1))

[State 2004, VarSet 5]
Type = VarSet
Trigger1 = 1
V = 2
Value = Parent,Pos Y + -Root,Var(1)

[State 2004, Hit]
Type = HitDef
Trigger1 = !MoveHit
Trigger1 = !MoveGuarded
Attr = S,HP
Damage = Floor(40.0*(Root,FVar(0))),Floor(14.0*(Root,FVar(0)))
AnimType = Hard
GuardFlag = MA
HitFlag = MAF
Priority = 5,Hit
PauseTime = 0,0
Guard.PauseTime = 0,30
SparkNO = S6001+Random%3
Guard.SparkNO = 40
SparkXY = -10,0
HitSound = S198,5
GuardSound = S199,0
Ground.Type = Low
Ground.SlideTime = 5
Ground.HitTime = 30
Ground.Velocity = -8,Cond(IsHelper(2005), -8, Var(0))
AirGuard.Velocity = -4,Cond(IsHelper(2005), -8, Var(0)/2.0)
Air.Type = Low
Air.Velocity = -8,Cond(IsHelper(2005), -8, Var(0))
Air.HitTime = 30
Ground.CornerPush.VelOff = 0
Air.CornerPush.VelOff = 0
Down.CornerPush.VelOff = 0
Guard.CornerPush.VelOff = 0
Airguard.CornerPush.VelOff = 0
GetPower = 0,0
GivePower = 0,0
Fall = Cond(IsHelper(2005), 1, 0)
Air.Fall = Cond(IsHelper(2005), 1, 0)
Fall.Recover = 1

[State 2004, TargetFacing]
Type = TargetFacing
Trigger1 = MoveHit = 1
Value = -1

[State 2004, TargetState]
Type = TargetState
Trigger1 = MoveHit = 1
Trigger1 = !IsHelper(2005)
Value = 2005

[State 2004, PosSet]
Type = PosSet
Trigger1 = 1
X = Var(1) + (((25.0 * Time) + Const(Size.Air.Back)) * Cos((Root,Var(1)*PI)/180.0)) * Facing
Y = Var(2) - (((25.0 * Time) + Const(Size.Air.Back)) * Sin((Root,Var(1)*PI)/180.0))

[State 2004, Sumir]
Type = DestroySelf
Trigger1 = Root,StateNO != 2000
Trigger2 = Time = 30

;---------------------------------------------------------------------------
; Enemy Hit by Super Aura Storm
[Statedef 2005]
Type = A
MoveType = H
Physics = N
Juggle = 1
VelSet = 0,0
Ctrl = 0
PowerAdd = 0
SprPriority = 0

[State 2005, ChangeAnim]
Type = ChangeAnim
Trigger1 = SelfAnimExist(5017)
Value = 5017

[State 2005, ChangeAnim 2]
Type = ChangeAnim
Trigger1 = !SelfAnimExist(5017)
Trigger1 = SelfAnimExist(5012)
Value = 5012

[State 2005, ChangeAnim2]
Type = ChangeAnim2
Trigger1 = !SelfAnimExist(5017)
Trigger1 = !SelfAnimExist(5012)
Value = 1506

[State 2005, VelSet]
Type = VelSet
Trigger1 = 1
X = -4
Y = GetHitVar(YVel)

[State 2005, SelfState]
Type = SelfState
Trigger1 = Time = 30
Value = Cond(Pos Y = 0, 0, Cond(Pos Y > 0, 52, 50))
Ctrl = 1



Here is a picture of the attack. The hitboxes can be noted as the "failure box" sprites. This beam can move very smoothly in its corresponding trigonometric angle when the player presses up or down.

Thing is that I'm not looking for a beam that passes through the enemy and continues across the screen. I want in essence, a projectile chain beam with the added functionality of helpers that allow angle orientation of those hitboxes. 

My first attempt involved ridding of the beam helper and only keeping the hitboxes and their behavior. It failed completely, so I figured that the beam helper is required and that I can't make the player do this directly.


So I decided to make that beam helper into a muzzle flash instead and kept the code mostly intact. Here was my latest attempt at trying to take port this code in another character.


Code:
;---------------------------------------------------------------------------
; Super Aura Storm
[Statedef 1999]
Type = S
MoveType = A
Physics = S
Juggle = 1
VelSet = 0,0
Ctrl = 0
Anim = 1100
PowerAdd = -2000
SprPriority = 2

[State 2000, NotHitBy]
Type = NotHitBy
Trigger1 = 1
Value = SCA,AA,AP,AT
Time = 1
IgnoreHitPause = 1

[State 2000, VarSet]
Type = VarSet
Trigger1 = Time = 0
V = 1
Value = 0

[State 2000, VarAdd]
Type = VarAdd
Trigger1 = !AILevel
Trigger1 = Time >= 20
Trigger1 = Command = "holdup"
Trigger1 = Var(1) < 45
V = 1
Value = 1

[State 2000, VarAdd]
Type = VarAdd
Trigger1 = !AILevel
Trigger1 = Time >= 20
Trigger1 = Command = "holddown"
Trigger1 = Var(1) > 0
V = 1
Value = -1

[State 2000, VarSet]
Type = VarSet
Trigger1 = AILevel
Trigger1 = Time >= 202
V = 2
Value = -Floor((180*ATan(P2Dist Y/IfElse(P2Dist X <= 0, 0.1, P2Dist X*1.0)))/PI)

[State 2000, VarAdd]
Type = VarAdd
Trigger1 = AILevel
Trigger1 = Time >= 202
Trigger1 = Var(1) < Var(2)
Trigger1 = Var(1) < 45
V = 1
Value = 1

[State 2000, VarAdd]
Type = VarAdd
Trigger1 = AILevel
Trigger1 = Time >= 202
Trigger1 = Var(1) > Var(2)
Trigger1 = Var(1) > 0
V = 1
Value = -1

[State 2000, Helper]
Type = Helper
Trigger1 = Time = 20
Name = "Super Aura Storm"
ID = 2003
StateNO = 2003
Pos = 20,-80
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1

[State 2000, End]
Type = ChangeState
Trigger1 = AnimTime = 0
Value = 0
Ctrl = 1

;---------------------------------------------------------------------------
; Super Aura Storm (Helper)
[Statedef 2003]
Type = S
MoveType = A
Physics = S
Juggle = 1
VelSet = 0,0
Ctrl = 0
Anim = 1110
PowerAdd = 0
SprPriority = 9


[State 2003, AngleDraw]
Type = AngleDraw
Trigger1 = 1
Value = Root,Var(1)
Scale = 1.0 / CameraZoom, 1

[State 2003, Hit]
Type = Helper
Trigger1 = !(Time%10)
Trigger1 = Time < 90
Name = "Hit"
ID = 2004
StateNO = 2004
Pos = 1-ABS(Root,Var(1)), -Root,Var(1)
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 0

[State 2003, Hit]
Type = Helper
Trigger1 = !(Time%10)
Trigger1 = Time < 90
Name = "Hit"
ID = 2004
StateNO = 2004
Pos = 1-ABS(Root,Var(1)) + (750 * Cos((Root,Var(1)*PI)/180.0) * Facing), -Root,Var(1) - (750 * Sin((Root,Var(1)*PI)/180.0))
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 750

[State 2003, Hit]
Type = Helper
Trigger1 = !(Time%10)
Trigger1 = Time < 90
Name = "Hit"
ID = 2004
StateNO = 2004
Pos = 150-ABS(Root,Var(1)) + (1500 * Cos((Root,Var(1)*PI)/180.0) * Facing), -Root,Var(1) - (1500 * Sin((Root,Var(1)*PI)/180.0))
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 1500

[State 2003, Hit]
Type = Helper
Trigger1 = Time = 90
Name = "Hit"
ID = 2005
StateNO = 2004
Pos = 1-ABS(Root,Var(1)), -Root,Var(1)
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 0

[State 2003, Hit]
Type = Helper
Trigger1 = Time = 90
Name = "Hit"
ID = 2005
StateNO = 2004
Pos = 1-ABS(Root,Var(1)) + (750 * Cos((Root,Var(1)*PI)/180.0) * Facing), -Root,Var(1) - (750 * Sin((Root,Var(1)*PI)/180.0))
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 750

[State 2003, Hit]
Type = Helper
Trigger1 = Time = 90
Name = "Hit"
ID = 2005
StateNO = 2004
Pos = 1-ABS(Root,Var(1)) + (1500 * Cos((Root,Var(1)*PI)/180.0) * Facing), -Root,Var(1) - (1500 * Sin((Root,Var(1)*PI)/180.0))
PosType = P1
Facing = 1
KeyCtrl = 0
OwnPal = 1
Size.Air.Back = 1500

[State 2003, BindToRoot]
Type = BindToRoot
Trigger1 = 1
Time = 1
Facing = 1
Pos = 0,0

[State 2003, AssertSpecial]
Type = AssertSpecial
Trigger1 = 1
Flag = NoShadow

[State 2003, Sumir]
Type = DestroySelf
Trigger1 = AnimTime = 0
Trigger2 = Root,StateNO != 1999

;---------------------------------------------------------------------------
; Super Aura Storm (Helper Hit)
[Statedef 2004]
Type = S
MoveType = A
Physics = N
Juggle = 1
VelSet = 0,0
Ctrl = 0
Anim = 1310
PowerAdd = 0
SprPriority = 0

[State 2004, VarSet 1]
Type = VarSet
Trigger1 = (EnemyNear,Const(Size.Mid.Pos.Y) + EnemyNear,Pos Y) < Pos Y
Trigger1 = EnemyNear,Pos Y < 0
V = 0
Value = 1

[State 2004, VarSet 2]
Type = VarSet
Trigger1 = (EnemyNear,Const(Size.Mid.Pos.Y) + EnemyNear,Pos Y) > Pos Y
V = 0
Value = -1

[State 2004, VarSet 3]
Type = VarSet
Trigger1 = (EnemyNear,Const(Size.Mid.Pos.Y) + EnemyNear,Pos Y) = Pos Y
V = 0
Value = 0

[State 2004, VarSet 4]
Type = VarSet
Trigger1 = 1
V = 1
Value = Parent,Pos X + (150 * Facing)-ABS(Root,Var(1))

[State 2004, VarSet 5]
Type = VarSet
Trigger1 = 1
V = 2
Value = Parent,Pos Y + -Root,Var(1)


[State 2004, Hit]
Type = HitDef
Trigger1 = !MoveHit
Trigger1 = !MoveGuarded
Attr = S,HP
Damage = Floor(40.0*(Root,FVar(0))),Floor(14.0*(Root,FVar(0)))
AnimType = Hard
GuardFlag = MA
HitFlag = MAF
Priority = 5,Hit
PauseTime = 0,0
Guard.PauseTime = 0,30
SparkNO = S4000+Random%3
guard.sparkno = S4000
SparkXY = -10,0
HitSound = S1100,1
GuardSound = S199,0
Ground.Type = Low
Ground.SlideTime = 5
Ground.HitTime = 30
Ground.Velocity = -8,Cond(IsHelper(2005), -8, Var(0))
AirGuard.Velocity = -4,Cond(IsHelper(2005), -8, Var(0)/2.0)
Air.Type = Low
Air.Velocity = -8,Cond(IsHelper(2005), -8, Var(0))
Air.HitTime = 30
Ground.CornerPush.VelOff = 0
Air.CornerPush.VelOff = 0
Down.CornerPush.VelOff = 0
Guard.CornerPush.VelOff = 0
Airguard.CornerPush.VelOff = 0
GetPower = 0,0
GivePower = 0,0
Fall = Cond(IsHelper(2005), 1, 0)
Air.Fall = Cond(IsHelper(2005), 1, 0)
Fall.Recover = 1

[State 2004, TargetFacing]
Type = TargetFacing
Trigger1 = MoveHit = 1
Value = -1

[State 2004, TargetState]
Type = TargetState
Trigger1 = MoveHit = 1
Trigger1 = !IsHelper(2005)
Value = 2005

[State 2004, PosSet]
Type = PosSet
Trigger1 = 1
X = Var(1) + (((25.0 * Time) + Const(Size.Air.Back)) * Cos((Root,Var(1)*PI)/180.0)) * Facing
Y = Var(2) - (((25.0 * Time) + Const(Size.Air.Back)) * Sin((Root,Var(1)*PI)/180.0))

[State 2004, Sumir]
Type = DestroySelf
Trigger1 = Root,StateNO != 1999
Trigger2 = Time = 30

;---------------------------------------------------------------------------
; Enemy Hit by Super Aura Storm
[Statedef 2005]
Type = A
MoveType = H
Physics = N
Juggle = 1
VelSet = 0,0
Ctrl = 0
PowerAdd = 0
SprPriority = 0

[State 2005, ChangeAnim]
Type = ChangeAnim
Trigger1 = SelfAnimExist(5017)
Value = 5017

[State 2005, ChangeAnim 2]
Type = ChangeAnim
Trigger1 = !SelfAnimExist(5017)
Trigger1 = SelfAnimExist(5012)
Value = 5012

[State 2005, ChangeAnim2]
Type = ChangeAnim2
Trigger1 = !SelfAnimExist(5017)
Trigger1 = !SelfAnimExist(5012)
Value = 1506

[State 2005, VelSet]
Type = VelSet
Trigger1 = 1
X = -4
Y = GetHitVar(YVel)

[State 2005, SelfState]
Type = SelfState
Trigger1 = Time = 30
Value = Cond(Pos Y = 0, 0, Cond(Pos Y > 0, 52, 50))
Ctrl = 1

-----------------------------------------------------------------------------------------




And unfortunately, it barely functions. It does shoot out the muzzle flash helper and the projectiles but they don't rotate and their collision stops effecting the enemy after the first hits of contact.


BTW, I managed to find the variable (2) stands for at the bottom of the cns files:


;---------------------------------------------------------------------------
; Variáveis em uso
; FVar(0) = Multiplicador de dano
; Var(0) = Seleção de Helper
; Var(1) = Ângulo do Super Aura Storm
; Var(2) = Ângulo do Super Aura Storm (AI) e do Air Aura Sphere (AI)
; Var(3) = Armazena dano recebido em supers
; Var(4) = Dector de 2 vitórias
; Var(8) = Define uso do Special Command para a AI
; Var(9) = Armazena tempo no Extreme Speed
; Var(10) = Controla Tempo dos botões no Extreme Speed
; Var(11) até Var(19) = Armazena state dos botões
; Var(20) até Var(25) = Armazena quantidade dos botões
; Var(26) = Duração do Extreme Speed (Running)
; Var(58) = AI Random
; Var(59) = Armazenagem de vitórias - Não é resetada


Thing is that var(2) is an A.I variable that is never declared anywhere on the cns file. Its simply just addressed as a varset state. I would think that it would need to be declared as a varadd before it can be set to do something, but then again, I don't know if AI components of an attack require variable declarations or not.
    

TB LUCARIO LASER questions

 May 17, 2017, 10:23:39 PM View in topic context
 Posted by Tyrannosaurus rex  in TB LUCARIO LASER questions (Started by Tyrannosaurus rex May 17, 2017, 10:23:39 PM
 Board: M.U.G.E.N Development Help

I have a query regarding the Super Auro Storm attack [Statedef 2100] done by TB's Lucario:

http://mugenguild.com/forum/topics/lucario-143719.0.html

It looks so smooth and effective, yet the most important feature that caught my attention most were the invisible helpers (Air Super Aura Storm (Helper Hit)) doing the actual damage behind the beam. I noticed that they too, can have their angles and direction adjusted directly by player's input commands if this piece of code is added in their statedef:

[State 2104, AngleDraw]
Type = AngleDraw
Trigger1 = 1
Value = Root,Var(1)
Scale = 1.0 / CameraZoom, 1


That in conjunction with providing sprites to the invisible hit actors, made the large intermediate beam visual redundant and I simply wish to remake this with redirecting the hit helpers to be spawned directly from the player when he executes that attack.

I have two issues though with trying to make use of this for my own purposes. The first are the variables v(1) and v(2). I'm sure variable 1 is a new variable declared right in the attack with the varadd state, but where was variable 2 declared? I tried looking for it and found nothing in the other CNS files. Just sysv(2), which I'm sure is not the same thing. Searching for the origins of variable 2 became a real pain so I decided to contact the creator. Unfortunately, Mr. Thunderbird has not been around to contact since two months. Needless to say, I tried my best in transferring the whole attack into simpler characters on trial and error basis but Mugen's becomes a real Pain, when it keeps spitting out errors and with arbitrary messages like "error in parsing state angledraw..." . Is there no way to track where variables are declared and root them out?

The second issue is regarding how many helpers I can be allowed to use to make a convincing beam attack that can last for a few seconds more than that special attack. I was told in a previous thread that making too many helpers on screen would cause visual glitches to occur and the fighting in itself to become prone to lag and what not. However, If I go back to using sctrl projectiles, I lose the ease of controls offered by helpers such as removing them on the fly, controlling their angles, making interesting beam locks and a whole lot of other effects not possible with them.

Its really difficult in Mugen itself, so I'm not going to try imagining how hard it would be to implement in IKEMAN. Any help would be greatly appreciated

Thank you in advance
T-rex
    

Re: Infinite stream helpers?

 May 13, 2017, 08:59:01 PM View in topic context
 Posted by Tyrannosaurus rex  in Infinite stream helpers?  (Started by Tyrannosaurus rex May 11, 2017, 02:24:38 AM
 Board: M.U.G.E.N Development Help

Thank you Cyanide. Sorry for the late response btw.
    

Infinite stream helpers?

 May 11, 2017, 02:24:38 AM View in topic context
 Posted by Tyrannosaurus rex  in Infinite stream helpers?  (Started by Tyrannosaurus rex May 11, 2017, 02:24:38 AM
 Board: M.U.G.E.N Development Help

Hey everyone. I just wanted to ask, how I can set it so that the character fires a stream of helpers that move across the screen like a stream of projectiles forming a beam for as long as either the a button is held or the animation ends?

Thank you
    

Re: Projectile questions

 November 17, 2015, 07:48:06 PM View in topic context
 Posted by Tyrannosaurus rex  in Projectile questions (Started by Tyrannosaurus rex November 13, 2015, 06:07:48 PM
 Board: M.U.G.E.N Development Help

Quote
with the proper speed vs angle you could probably do something like
y = floor(10 - (vel x) )
so that the total speed would never exceed 10.
On my missile I never bothered with trying to figure that out, I only limited the vel y within a certain range.

Not what I had in mind but thanks for the input. What I meant to say was that since its depending on var(7) to record it, I'm wondering how I can use something like tan(var) to know the X multiplier, and 1/(tan(var)) for Y multiplier. There is the parent,var(7) confusion in this as well.

Recall, that var(7) is setup like this:

Code:
[State 3000, 42-chama sobe ou desce]
type = varadd
trigger1 = command="holdup" ^^ command="holddown"
var(7) = (command="holdup")-(command="holddown")
 
[State 3000, 44-limita o angulo em 45 graus]
type = varset
trigger1 = abs(var(7)) > 45
var(7) = 45 * (var(7)/abs(var(7)))
    

Re: Projectile questions

 November 16, 2015, 06:40:42 PM View in topic context
 Posted by Tyrannosaurus rex  in Projectile questions (Started by Tyrannosaurus rex November 13, 2015, 06:07:48 PM
 Board: M.U.G.E.N Development Help

I think I'm close to resolving the issue with making the helper rotate by the action of the keyboard.

Code:
[State 3000 , 40-chama flames]
type = Helper
blah
blah
blah

[State 3000, 42-chama sobe ou desce]
type = varadd
trigger1 = command="holdup" ^^ command="holddown"
var(7) = (command="holdup")-(command="holddown")

[State 3000, 44-limita o angulo em 45 graus]
type = varset
trigger1 = abs(var(7)) > 45
var(7) = 45 * (var(7)/abs(var(7)))

[Statedef 1101]   ;beam itself
type    = S
movetype= A
physics = N
juggle  = 2
velset = 0,0
anim = 1102
ctrl = 0
sprpriority = 2

[State 3030 , 7-Facing]
type = AngleSet
trigger1 = time=0
value = 0

[State 3030 , 6]
type = Angleset
trigger1 = 1
value = parent,var(7)
 
[State 3030 , 5]
type = AngleDraw
trigger1 = 1

It does the angle adjustment by keypressing "up" or "down" correctly. However, I have two issues with this:

1, If the projectile is fired once and its direction is changed by pressing the up/down keys, the second time we use the projectile, its direction is automatically facing the previous projectile's direction instead of being straight. 

2, I'm wondering how I can setup a velocity state in which the x and y values are formulated with the correct angle.



    

Re: Projectile questions

 November 15, 2015, 09:53:13 PM View in topic context
 Posted by Tyrannosaurus rex  in Projectile questions (Started by Tyrannosaurus rex November 13, 2015, 06:07:48 PM
 Board: M.U.G.E.N Development Help

Scratch that, I have made a helper based projectile by following ynvaser's tutorial:
http://legendarysquad.smfforfree2.com/index.php?topic=18.0

Code:
;///// Helper tutorials

[State 420, Helper]         ;This summons helper
type = Helper
trigger1 = Time = 11        ;It summons when the state is at the 11th tick. Change as needed.
helpertype = normal         ;Normal, so not player XD
name = "Atomic beam" ;Give it a name, it's a good thing.
ID = 9001                   ;The indentification number of the helper
stateno = 9001              ;The helper's stateno. If you change it in the helper's state, change it here too.
pos = 50, -44               ;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 = 1                 ;Keep this at 1.
ownpal = 1                  ;This means that the parent's PalFX's won't affect the helper.


[State 1000, 3]
type = null
trigger1 = var(2) > 360
trigger1 = 0 && var(2) := 0
trigger2 = var(2) < 0
trigger2 = 0 && var(2) := 360
trigger3 = command = "holdx"
trigger3 = command = "holddown"
trigger3 = 0 && var(2) := var(2) + 1
trigger4 = command = "holdx"
trigger4 = command = "holdup"
trigger4 = 0 && var(2) := var(2) - 1

 
[State 1000, 3]
type = AngleDraw
trigger1 = 1
value = -55 - var(2)


;-Renzoku Projectile   ;I like to give them names
;(Used in StateNo 420) ;This is good to keep your helpers organized
[Statedef 9001]        ;Change the value to fit your needs
type = A
movetype = A
physics = N
anim = 9014            ;Change the anim to your projectile's anim. It must contain at least 1 clsn1 box.
velset = 0,0
ctrl = 0
poweradd = 0
juggle = 10            ;Change this to fit your char
facep2 = 0
hitdefpersist = 0
movehitpersist = 0
hitcountpersist = 0
sprpriority = 3       ;Adjust it, if you want the proj to be behind or in front of everyone.


[State 9001, PlayerPush] ;This disables the clsn2's pushing effect.
type = PlayerPush
trigger1 = 1
value = 0

[State 9005, Hitoverride];This will change your projectile into a specific state when getting hit
type = HitOverride
trigger1 = 1
attr = SCA, AA,AP,AT
time = -1
stateno = 9000;The number of your projectile's hitstate


[State 1000, SpriteAngle]
type = AngleDraw
trigger1 = 1
value = ((atan(Vel Y / (Vel X + 0.00000000000001)) + (0)) * (-180 / Pi)) + ((vel x < 0) * 180)


[State 1000, Movement1]
type = VarSet
trigger1 = !time
fvar(2) = parent,var(2) * 0.01745329

[State 1000, Movement2]
type = VelSet
trigger1 = !time
x = cos(fvar(2)) * 6
y = -(1.0 - abs(cos(fvar(2)))) * ifelse(parent,var(2) < 180, -1, 1) * 6


[State 9001, HitDef]
type = HitDef       
trigger1 = 1
attr = S, NA
hitflag   = MAFDP
guardflag = MA
animtype = Hard
priority = 7, Hit
damage = 10,5
pausetime = 5,5
guard.pausetime   = 15,20
sparkno   = S6150
guard.sparkno = S6150
sparkxy   = 0,40
hitsound = S1,12
guardsound = S1,12
ground.type = High
air.type = Trip
ground.slidetime = 25
ground.hittime = 25
air.hittime   = 25
ground.velocity   = -8
guard.velocity = -8
air.velocity = -8,-3.5
airguard.velocity = -8,-3.5
ground.cornerpush.veloff = 0
fall.xvelocity = -1
fall.yvelocity = -3
fall.recover = 0
air.fall = 1
down.velocity = -1,-2
down.bounce   = 1
id = 9001
getpower = 0
givepower = 25
palfx.time = 12
palfx.mul = 256,256,256
palfx.add = 200,50,10
palfx.sinadd = 175,25,5,4
envshake.time = 12
envshake.freq = 120
envshake.ampl = -4
persistent = 0

[State 9001, DestroySelf]              ;The finale. It destroys the helper in specific circumstances
type = DestroySelf
trigger1 = MoveContact             ;First condition. It destroys when the projectile hits.
trigger2 = FrontEdgeBodyDist < -30 ;Second condition. It destroys when the x distance from the front*
ignorehitpause = 1                       ;*vertical wall is smaller than -30 (so when the distance is -31 or smaller)


[State 9000, DestroySelf];Destroys the helper instantly
type = DestroySelf
trigger1 = Time = 0
ignorehitpause = 1


I have made changes to it like setting keyctrl = 1, because I want to be able to rotate the helper with my directional key presses. As of now, I'm not unsure about a few things regarding it:

1. How the state numbers are labelled. I'm not sure I understand how the states are meant to be labelled in a helper given how Mugen reads them.
2. Is the null type on the very top correctly in place? or does it go in the player's state?
3. Any other corrections would be greatly appreciated.

I'm still new to helpers.








    

Re: Projectile questions

 November 15, 2015, 05:49:19 PM View in topic context
 Posted by Tyrannosaurus rex  in Projectile questions (Started by Tyrannosaurus rex November 13, 2015, 06:07:48 PM
 Board: M.U.G.E.N Development Help

Quote
If you want, my "heat-seeking" missiles in Samus might help you out a lot.

Thanks, I'll look into it.

Quote
But instead of angle draw I'd say go a head and make the sprites you need, then switch to that sprite when needed.

Really? wouldn't it be more efficient to do this by code instead of excessive sprites? I mean I have them, but using draw angle may bring about some very smooth rotation animations.

Quote
1, How to make the helper remain attached to the player's attack point for each direction based animation.
and
2, How to make the helper rotate according to the player's direction based animation.

Did a bit more testing and realized that offsets control where the beam is created on the player's attack point. The second question actually brings about a fundamental issue I have with coding in Mugen.

Here are some cases of those issues:

1.

Code:
[State 1000, 3]

[State 1000, 3]
type = VarSet
trigger1 = Time = 0
v = 0
value = 0

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




First question is determining the main variable.  This is the code that controls how the player adjusts the vertical direction by holding the "a" button and holding either up or down. I don't know what P2BodyDistY and P2BodyDist X is suppose to do in this, nor do I know what v represents (is it referring to var(3) or var(10) or an unknown variable that I'm not aware of in the body of this code?

Second is how is this particular variable addressed on the projectile cases below:

Code:
[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
offset = ceil(18*const(size.xscale))+random%4,ceil(-66*const(size.yscale))
velocity = 5,-5
getpower  = 0
givepower = 0
attr = S, SP
damage = 2,3
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAFP
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
offset = ceil(20*const(size.xscale))+random%4,ceil(-66*const(size.yscale))
velocity = 6.1,-3.5
getpower  = 0
givepower = 0
attr = S, SP
damage = 2,3
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAFP
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 != 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
offset = ceil(28*const(size.xscale))+random%4,ceil(-58*const(size.yscale))
velocity = 7.1,0
getpower  = 0
givepower = 0
attr = S, SP
damage = 2,3
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAFP
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
offset = ceil(20*const(size.xscale))+random%4,ceil(-50*const(size.yscale))
velocity = 6.1,3.5
getpower  = 0
givepower = 0
attr = S, SP
damage = 2,3
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAFP
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
offset = ceil(22*const(size.xscale))+random%4,ceil(-48*const(size.yscale))
velocity = 5,5
getpower  = 0
givepower = 0
attr = S, SP
damage = 2,3
animtype = Light
pausetime = 0,0
sparkno = S1015
guard.sparkno = S4010
sparkxy = 0, 0
hitsound = S1100,1
guardsound = S100,1
hitflag = MAFP
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

I can tell that each of these projectile cases are involving a different direction to which the beam goes. However, I'm not able to tell what makes the relationship between this projectile code and the variable setup code above.

Furthermore, I looked into Cybaster's Goku Z2, who utilized a helper for his Chou Kamehameha beam. It was quite complex with a lot of material I can't understand. Therefore, I opt to do this with projectiles.

More questions on projectiles:

Q1, How do I setup an Angledraw type property to the projectiles?


Q2, Based on the earlier code used for helpers here:


Code:
[State x]
2.type = VarSet
3.trigger1 = !time
4.fvar(2) = parent,var(2) * 0.01745329
5.ignorehitpause = 1
6.
7.[State x]
8.type = VelSet
9.trigger1 = !time
10.x = cos(fvar(2)) * 6
11.y = -(1.0 - abs(cos(fvar(2)))) * ifelse(parent,var(2) < 180, -1, 1) * 6
12.ignorehitpause = 1

I would wish to use those mathematical expressions on velset on the velocity property of the projectiles, but the fvar becomes an issue along with parent,var(2) which are variables pertaining to controlling directions on the states by keyboard presses for players and distance checking for A.I. 


Once again, the main problem can be boiled down to understanding the variables that control direction and how they can form relations with the projectiles.