Mugen DEV Forum


  Reply to this topicStart new topicStart Poll

> Complete Vism
Messatsu
  Posted: Jul 3 2004, 10:03 PM
Report PostQuote Post


banneded
****

Group: Members
Posts: 310
Member No.: 4158
Joined: 10-October 03



Recording helper setup

CODE

;___________________________________________________________________
[Statedef 500];                // custom combo function
anim = 11111

[State Pos X]
type     = helper
trigger1 = !time
id       = 501
stateno  = 501

[State Pos Y]
type     = helper
trigger1 = !time
id       = 502
stateno  = 502

[State Anim]
type     = helper
trigger1 = !time
id       = 503
stateno  = 503

[State Stateno]
type     = helper
trigger1 = !time
id       = 504
stateno  = 504

[State Facing]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = fvar((floor(var(0) / 2))) := root, facing

[State Clone]
type     = varset
trigger1 = !time
var(1)   = 1

[State Next]
type     = varset
trigger1 = !time
var(2)   = 2

[State Vism]
type     = helper
trigger1 = numhelper(666) < 1
trigger1 = time > root, var(15) - 2
trigger1 = helper(504), var((var(2))) != [0, 110)
trigger1 = helper(504), var((var(1))) != helper(504), var((var(2)))
postype  = left
pos      = helper(500), pos x - helper(501), var((var(2))) + 160, helper(500), pos y - helper(502), var((var(2)))
id       = 666
facing   = floor(fvar((floor(var(2) / 2))))
stateno  = helper(504), var((var(2)))
ignorehitpause = 1

[State Modify]
type     = varadd
trigger1 = !(root, hitpausetime)
var(0)   = 1

[State Modify]
type     = varadd
trigger1 = !(root, hitpausetime)
var(1)   = 1

[State Modify]
type     = varadd
trigger1 = !(root, hitpausetime)
var(2)   = 1

[State Train]
type     = varset
trigger1 = var(0) = root, var(15)
var(0)   = 0

[State Train]
type     = varset
trigger1 = var(1) = root, var(15)
var(1)   = 0

[State Train]
type     = varset
trigger1 = var(2) = root, var(15)
var(2)   = 0

[State X_X]
type     = destroyself
trigger1 = power = 0 || root, movetype = H
ignorehitpause = 1
;___________________________________________________________________

[Statedef 501]
anim = 11111

[State 501]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = var(( helper(500), var(0) )):= floor(helper(500), pos x - root, pos x)

[State 501]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = helper(500), var(0) = [0,30)
trigger1 = fvar(( helper(500), var(0) )):= root, vel x

[State X_X]
type     = destroyself
trigger1 = numhelper(500) = 0
ignorehitpause = 1
;___________________________________________________________________

[Statedef 502]
anim = 11111

[State 502]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = var(( helper(500), var(0) )):= floor(helper(500), pos y - root, pos y)

[State 502]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = helper(500), var(0) = (29,60)
trigger1 = fvar(( helper(500), var(0) - 30 )):= root, vel x

[State X_X]
type     = destroyself
trigger1 = numhelper(500) = 0
ignorehitpause = 1
;___________________________________________________________________

[Statedef 503]
anim = 11111

[State 503]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = var(( helper(500), var(0) )):= root, anim

[State 503]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = helper(500), var(0) = [0,30)
trigger1 = fvar(( helper(500), var(0) )):= root, vel y

[State X_X]
type     = destroyself
trigger1 = numhelper(500) = 0
ignorehitpause = 1
;___________________________________________________________________

[Statedef 504]
anim = 11111

[State 504]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = var(( helper(500), var(0) )):= root, stateno

[State 504]
type     = null
trigger1 = !(root, hitpausetime)
trigger1 = helper(500), var(0) = (29,60)
trigger1 = fvar(( helper(500), var(0) - 30 )):= root, vel y

[State X_X]
type     = destroyself
trigger1 = numhelper(500) = 0
ignorehitpause = 1
;___________________________________________________________________


Note: untested on teh H4X0430 WinMugen.


--------------------
You might think that Elecbyte is dead, but this investigation has not been solved for years.
Mini ProfilePMEmail PosterUsers WebsiteAOL
Top
Messatsu
  Posted: Jul 3 2004, 10:07 PM
Report PostQuote Post


banneded
****

Group: Members
Posts: 310
Member No.: 4158
Joined: 10-October 03



Additional notes:

STATES LISTED AS -4 NEED TO BE IN EVERY STATE THAT THE CLONE CAN POSSIBLY ENTER.

Typically, custom combos have different delays.  Your initialization should reflect this by modifying root, var(15):

CODE
[State Vism]
type       = helper
triggerall = numhelper(500) = 0
trigger1   = command = "a"
trigger1   = var(15):= 12
trigger2   = command = "b"
trigger2   = var(15):= 36
trigger3   = command = "c"
trigger3   = var(15):= 60
stateno    = 500
id         = 500
postype    = p1
pos        = 0,0



;___________________________________________________________________
Disable all afterimage controllers by using a numhelper(500) = 0 triggerall except for one like this in the player's initialization state:

CODE
[State Chaser]
type     = afterimage
trigger1 = numhelper(500) = 1 && !ishelper
time     = 99999999
length   = var(15)
timegap  = 1
framegap = floor(var(15) / 3)
palcontrast = 144, 0, 256



;___________________________________________________________________
Palfx cannot apply to helpers so you can leave the clone the same color as the player but adjust the sprpriority in the statedef shortcut somewhat like this:

CODE
[Statedef 666]
...
sprpriority = ifelse(ishelper, -1, 2)


Or to apply a fake palfx that has the clone visually delayed by 1 tick:

CODE
[State -4]
type     = assertspecial
trigger1 = ishelper
flag     = invisible

[State -4]
type     = afterimage
trigger1 = ishelper
time     = 999999
length   = 2
timegap  = 1
framegap = 1
palcontrast = 96, 96, 256



;___________________________________________________________________
The clone cannot be hit by anything:

CODE
[State -4]
type     = nothitby
trigger1 = ishelper
time     = 2
value    = AA, AP, AT



;___________________________________________________________________
This allows for the clone to combo:

CODE
[State -4]
type     = changestate
trigger1 = ishelper
trigger1 = helper(666), stateno != helper(504), var(( helper(500), var(2) ))
trigger1 = helper(504), var(( helper(500), var(2) )) != [0,110)
value    = helper(504), var(( helper(500), var(2) ))


There will result in a slight error from the helper missing an attack where the player made contact resulting in a completely different position for the clone.  To fix this and use a changestate, you need to apply constant position adjustment:

CODE
[State -4]
type     = posset
trigger1 = ishelper
postype  = p1
x        = helper(500), pos x - helper(501), var((var(1))) + 160
y        = helper(500), pos y - helper(502), var((var(1)))


Alternatively, you can use a destroyself using similar restrictions to the changestate and allow the respawning in the correct position to be handled by the helper, 500.  I have found this fairly unreliable so far, but would be more efficient.


;___________________________________________________________________
Aerial states need to have their velocity adjusted.  Otherwise they start with nothing and sink to the ground.

CODE
[State -4]
type     = velset
trigger1 = ishelper && !time
trigger1 = helper(500), var(2) = [0,30)
X        = helper(501), fvar( helper(500), var(2) )
Y        = helper(503), fvar( helper(500), var(2) )

[State -4]
type     = velset
trigger1 = ishelper && time = 0
trigger1 = helper(500), var(2) = (29,60)
X        = helper(502), fvar( helper(500), var(2) - 30 )
Y        = helper(504), fvar( helper(500), var(2) - 30 )



;___________________________________________________________________
When two states are followed by each other, the second state won't be entered by the clone.  To avoid this, make the states wheel, if in state 200, then go to the exact same state 201 (only difference in 200 and 201 is stateno) given conditions to go into a state.


;___________________________________________________________________
States 0 and 11 need destroyselfs set.

This post has been edited by Messatsu on Jul 3 2004, 11:14 PM


--------------------
You might think that Elecbyte is dead, but this investigation has not been solved for years.
Mini ProfilePMEmail PosterUsers WebsiteAOL
Top
Messatsu
  Posted: Jul 3 2004, 10:08 PM
Report PostQuote Post


banneded
****

Group: Members
Posts: 310
Member No.: 4158
Joined: 10-October 03



Necessary properties of Vism that I won't cover in this tutorial:

-The player cannot block during this time period
-Hit velocity doubles for fairness.
-Normals chain MVC style.
-Specials can limitlessly cancel into specials except into the same attack.
-Charging attacks no longer need to be charged.
-Projectile of the helper doesn't affect the spawning of the player's projectiles. For example, Shin Gouki in SFZ3U can throw four aerial hadokens on the screen.
-More than half of a full power bar is necessary to initialize.
-Power is drained every tick.
-You cannot perform a super attack.


--------------------
You might think that Elecbyte is dead, but this investigation has not been solved for years.
Mini ProfilePMEmail PosterUsers WebsiteAOL
Top
Messatsu
  Posted: Jul 3 2004, 10:16 PM
Report PostQuote Post


banneded
****

Group: Members
Posts: 310
Member No.: 4158
Joined: 10-October 03



Known issues:
-Y position is off at times. Mostly following a jumping attack.
-The clone has a one tick lag if you want them colored correctly.
-Sprpriority of the clone is shifty during hits or other situations.


--------------------
You might think that Elecbyte is dead, but this investigation has not been solved for years.
Mini ProfilePMEmail PosterUsers WebsiteAOL
Top

Topic Options Reply to this topicStart new topicStart Poll

 


- M.U.G.E.N Development Forum - Contact an admin - ELECBYTE - Shin Mugen -