Win Mugen: Push Push Code - IT

Cover Tutorial Win Mugen: Push Push Code - IT

Push Push Code - IT

Media Difficoltà

Creative Commons License
Questo/a opera è pubblicato sotto una Licenza Creative Commons.

PushPushpushpush1Il pushpush mode ( o challange mode ) è un'idea della SNK Playmore, sviluppata per il gioco Samurai Spirit ( o Samurai Shodown ). In questo gioco quando due avversari facevano lo stesso tipo di attacco ( pugno forte o colpo con la spada forte ) entrambe i giocatori entravano nel pushpush mode.. chi vinceva poteva colpire il nemico che disolito perdeva pure l'arma eheheh
Il mio codice non funziona allo stesso modo del gioco originale ma posso affermare che vi è molto vicino.

La prima versione del mio codice è stata usata dall' Hokuto Project!

Per far funzionare il pushpush mode abbiamo bisogno di uno starter.. di un punto ( in questo caso un' attacco ) di partenza.

CNS per il vostro personaggio ( Vi suggerisco di scaricare il mio evilsoul e di usare come base il file che trovate dentro il file rar di evilsoul - il file è esppc.cns ).
Per evitare che il gameplay venga spezzato dall'entrata in scena del pushpush mode... ho deciso di suare una variabile ( settata in maniera casuale ) e solo se questa variabile assume un valore uguale o maggiore a 9 allora si entra nella nostra modalità.
[State 280, VarRan]
type = VarRandom
trigger1 = time = 1
v = 4
range = 1,10

;Questo hitdef viene usato solo nel caso in cui il nemico non sia abilitato al pushpush code o che la variabile ( var(4) ) sia minore a 9 ( quindi non è attivabile il pushpush )
[State 280, hd]
type = HitDef
triggerall = animelem = 2
trigger1 = enemy,var(0) = 0
trigger2 = enemy,var(0) = 59 && var(4) <= 8 && enemy, selfanimexist(28000)=1
attr = S, NA
animtype  = Medium
damage    = 57,5
guardflag = MA
pausetime = 12,12
sparkno = 1
sparkxy = -10,-83
hitsound   = 5,2
guardsound = 6,0
ground.type = High
ground.slidetime = 12
ground.hittime  = 13
ground.velocity = -5.5
air.velocity = -2.5,-4
priority = 4, hit

Hitdef  che viene usato dal mugen solo quando la variabile ( var(4) ) ci permette di attivare il pushpush
[State 280, hd]
type = HitDef
triggerall = enemy,var(0) = 59 && var(4) >= 9 && enemy, selfanimexist(28000)=1
trigger1 = AnimElem = 2
attr = S, NA
animtype  = Medium
damage    = 0
guardflag = MA
pausetime = 12,12
sparkno = 1
sparkxy = -10,-83
hitsound   = 5,2
guardsound = 6,0
ground.type = High
ground.slidetime = 12
ground.hittime  = 13
ground.velocity = -5.5
air.velocity = -2.5,-4
priority = 7, hit
p1stateno = 28000
p2stateno = 28001
p1facing = 1
p2facing = 1
kill=0

28000 <-lo statedef del pushpush mode
28001 <- uno stato di transizione per il nemico da un custmon state ad un selfstate

;Pushpush the tru code
[Statedef 28000]
type    = S
movetype= A
physics = S
juggle  = 4
poweradd= 65
ctrl = 0
velset = 0,0
anim = 28000  <-- animazione di base non deve avere nessun collition box
sprpriority = -1

Queste due variabili ( var(1) e var(2) vengono settate per sapere poter poi decidere chi è il vincitore e chi no, si attivano in relazione a dove guarda il nostro personaggio

[state 28000, vs1]
type = varset
triggerall = facing = 1
trigger1 = time = 0
var(1) = 0

[state 28000, vs2]
type = varset
triggerall = facing = -1
trigger1 = time = 0
var(2) = 0

Questo serve ad un maggiore effetto scenico.
Eliminiamo  la barra dell' energia e blocchiamo il timer in modo tale che non scada il tempo durante il pushpush.
Ho usato il "trigger" IsHomeTeam per evitare che entrambe i personaggi utilizzino il codice nello stesso momento cosi il mugen e il pc non viene caricato eccessivamente.
[state 28000, AssertSpecial]
type = AssertSpecial
triggerall = IsHomeTeam
trigger1 = time <= 200
flag = nobardisplay
flag2 = timerfreeze

Come sopra un semplice effetto grafico niente di speciale.
[State 28000, bgpfx]
type = BGPalfx
triggerall = IsHomeTeam
trigger1 = Time = 0
invertall = 1
time = 200
mul = 100,100,100

Qui decidiamo dove si devono posizionare i nostri personaggi durante il pushhpush... partendo dal centro dello schermo il p1 e il p2 si posizioneranno l'uno di fronte all'altro ad una distranza dal centro di 80 pixels.

[state 28000, PosSet]
type = Posset
trigger1 = 1
x =  IfElse(facing=1,-80,80)
y = 0

Qui decidiamo semplicemente chi deve posizionarsi più vicino allo schermo niente di che!
[state 28000, 1a]
type = SprPriority
trigger1 = AnimElem = 1
value = IfElse(IsHomeTeam,10,9)

A questo punto potete mettere pure un vostro codice di sonoro ( tipo la voce del vostro personaggio ) oppure degli fx per caratterizare la mossa del vostro personaggio.
E poi...

Questo explod è l'animazione del dito che preme il bottone... classico di questo tipo di special ( SNK insegna eheheh )
Posizionato al centro dello schermo 8 asse x ) e ad una altezza di 80 pixel.
[state 28000, Explod]
type = Explod
triggerall = IsHomeTeam
trigger1 = time = 0
anim = 28002
ID = 28002
pos = 160,80
postype = left
facing = 1
vfacing = 1
bindtime = 1
removetime = 200
scale = 0.8,0.8
ontop = 1
ownpal = 1

Il big portrait ( diverso da quello di selezione del personaggio ) serve come abbellimento ed identificazione
;big protrait left and/or right
[state 28000, Explod]
type = Explod
trigger1 = time = 0
anim = 28001
ID =  28001
pos = ifelse(facing=1,20,180),0
postype = left  ;p2,front,back,left,right
facing = 1
vfacing = 1
bindtime = 10
removetime = 200
scale = 1,1
sprpriority = 0
ontop = 0
shadow = 0,0,0
ownpal = 0
removeongethit = 1

pushpush2 La chiamata di questi helper è la modifica principale di questo codice rispetto a quello vecchio rilasciato un paio ( e forse più ) d' anni per l' Hokuto Project.
Serve per visualizzare su schermo il numero delle volte che si è piggiato il bottone ( o comando ) per il pushpush, sia per chi sta a destra sia per chi sta a sinistra dello schermo ( p1 e p2 )
[state 28000, Helper1]
type = Helper
triggerall = facing=1 ;IsHometeam
trigger1 = time = 0 && numhelper(28010)=0
helpertype = normal
name = "unità"
ID =28010
stateno = 28010
pos = 50,-20
postype = left
facing = 1
keyctrl = 0
ownpal = 1
sprpriority = 10

[state 28000, Helper2]
type = Helper
triggerall = facing=1 ;IsHometeam
trigger1 = time = 0 &&numhelper(28011)=0
helpertype = normal
name = "decimali"
ID =28011
stateno = 28011
pos = 40,-20
postype = left
facing = 1
keyctrl = 0
ownpal = 1
sprpriority = 10

[state 28000, Helper1a]
type = Helper
triggerall = facing= -1 ;!IsHometeam
trigger1 = time = 0 && numhelper(28010)=0
helpertype = normal ;player
name = "unità"
ID =28010
stateno = 28010
pos = -40,-20
postype =right
facing = 1
keyctrl = 0
ownpal = 1
sprpriority = 10

[state 28000, Helper2a]
type = Helper
triggerall = facing= -1 ;!IsHometeam
trigger1 = time = 0 && numhelper(28011)=0
helpertype = normal ;player
name = "decimali"
ID =28011
stateno = 28011
pos = -50,-20
postype =right
facing = 1
keyctrl = 0
ownpal = 1
sprpriority = 10

Vele ricordate le variabili di prima vero?
Ecco ora qui le modifichiamo in relazione del comando... se l'utente.. il giocatore preme uno di questi comandi la variabile aumenta di una sola unità
[state 28000, 3a]
type = varadd
triggerall = IsHomeTeam
trigger1 = command = "a"
trigger2 = command = "b"
trigger3 = command = "c"
trigger4 = command = "x"
trigger5 = command = "y"
trigger6 = command = "z"
var(1) = 1

[state 28000, 3b]
type = varadd
triggerall = !IsHomeTeam
trigger1 = command = "a"
trigger2 = command = "b"
trigger3 = command = "c"
trigger4 = command = "x"
trigger5 = command = "y"
trigger6 = command = "z"
var(2)=1

Tutti questi change state servono per quando si deve decidere se si ha:
28003 = si vince
28002 = si perde
120 = pareggio

[state 28000, 4vince]
type = ChangeState
triggerall = IsHomeTeam
triggerall = time >= 200
trigger1 = var(1) > enemy,var(2)
value = 28003
ctrl = 0

[state 28000, 4perde]
type = ChangeState
triggerall = IsHomeTeam
triggerall = time >= 200
trigger1 = var(1) < enemy,var(2)
value = 28002
ctrl = 0

[state 28000, 4pareggia]
type = ChangeState
triggerall = IsHomeTeam
triggerall = time >= 200
trigger1 = var(1) = enemy,var(2)
value = 120
ctrl = 1

[state 28000, 4vince]
type = ChangeState
triggerall = !IsHomeTeam
triggerall = time >= 200
trigger1 = var(2) > enemy,var(1)
value = 28003
ctrl = 0

[state 28000, 4perde]
type = ChangeState
triggerall = !IsHomeTeam
triggerall = time >= 200
trigger1 = var(2) < enemy,var(1)
value = 28002
ctrl = 1

[state 28000, 4pareggia]
type = ChangeState
triggerall = !IsHomeTeam
triggerall = time >= 200
trigger1 = var(2) = enemy,var(1)
value = 120
ctrl = 1

Questo è lo state in cui si manda il nostro avversario se colpito dalla nostra mossa starter ( vedi sopra per capire meglio )
In pratica lo si manda da un custmon state ( 28001 ) ad un selfstate ( 28000 ) che è quello del pushpush
;P2 tmp
[Statedef 28001]
type    = S
movetype= H
physics = N
velset = 0,0

[State 28001 2]
type = SelfState
trigger1 = time = 1
value = 28000

Come detto prima questo è il lose state.... qui il nostro char userà l'animazione di base 5300 ( dizzy, stordito ) per 300 gametick, se non è presente l'animazione 5300 verrà usata l'animazione della stand
;LOSE state
[Statedef 28002]
type    = S
movetype= H
physics = N
velset = 0,0

[State 28002, ChangeAnim]
type = ChangeAnim
trigger1 = selfanimexist(5300)=1
value = 5300

[State 28002, ChangeAnim]
type = ChangeAnim
trigger1 = selfanimexist(5300)=0
value = 0

[State 28002, end]
type = SelfState
trigger1 = time >= 300
value = 5100

Lo statedef 28003 lo potete fare come meglio credete...

Questo è uno degli helper che servono da contatore... infatti l'effetto visivo del conteggio delle pressioni del bottone è lasciato ad due helper questo per le unità ( da 0 a 9 ) e uno per le decine ( 10, 20, 30 etcetcetc...)
;helper per contatore
;unità
[StateDef 28010]
type = S
movetype= I
physics = S
anim = 28500
velset = 0,0
sprpriority = 10

[State 28010, VarSet]
type = VarSet
trigger1 = time = 0
v = 30
value = 0

[State 28010, Varadd]
type = Varadd
trigger1 = parent, command = "a"
trigger2 = parent, command = "b"
trigger3 = parent, command = "c"
trigger4 = parent, command = "x"
trigger5 = parent, command = "y"
trigger6 = parent, command = "z"
v = 30
value = 1

[State 28010, VarSet]
type = Varset
trigger1 =  var(30)>=10
v = 30
value = 0

[State 28010, ChangeAnim]
type = ChangeAnim
trigger1 = parent, command = "a"
trigger2 = parent, command = "b"
trigger3 = parent, command = "c"
trigger4 = parent, command = "x"
trigger5 = parent, command = "y"
trigger6 = parent, command = "z"
value = 28500+var(30)

[State 28010, end]
type = destroyself
trigger1 = parent,stateno !=28000

pushpush3 Questo è l'helper per le decine... semplice matematica nulla di straordinario
[StateDef 28011]
type = S
movetype= I
physics = S
velset = 0,0
anim = 28500
sprpriority = 10

[State 28011, VarSet]
type = VarSet
trigger1 = time = 0
v = 40
value = 0

[State 28011, Varadd]
type = Varadd
trigger1 = parent, command = "a"
trigger2 = parent, command = "b"
trigger3 = parent, command = "c"
trigger4 = parent, command = "x"
trigger5 = parent, command = "y"
trigger6 = parent, command = "z"
v = 40
value = 1

[State 28011, ChangeAnim]
type = ChangeAnim
trigger1 = var(40) = 10
trigger2 = var(40) = 20
trigger3 = var(40) = 30
trigger4 = var(40) = 40
trigger5 = var(40) = 50
trigger6 = var(40) = 60
trigger7 = var(40) = 70
trigger8 = var(40) = 80
trigger9 = var(40) = 90
trigger10 = var(40) = 100
value = 28500+(var(40)/10)

[State 28011, end]
type = destroyself
trigger1 = parent,stateno !=28000

Ecco cosa vi serve per poter effettuare o inserire il pushpush mode nel vostro personaggio.
il file:
esppc.cns <- in questo file ci sono già gli state necessari, modificate lo statedef 280, modificate solo alcune cose dello statedef 28000 ho messo delle indicazioni per questo motivo.

AIR:

28000 animazione del pushpush
[Begin Action 28000]
230,0, 0,0, 5
230,1, 0,0, 5
230,2, 0,0, 5
230,0, 0,0, 5
etc....

28001 big portrait
[Begin Action 28001]
9000,2, 0,0, 5

28002  animazione del dito che preme il bottone
[Begin Action 28002]
6001,0, 0,0, 5
6001,1, 0,9, 5

28500 fino a 28509 numeri per il contatore
[begin action 28500]
6000,0, 0,0, 1

pushpush4 Nello statedef -2 del vostro personaggio inserite questo codice per meglio identificarlo come persoanggio abilitato al pushpush.
[State -2, vs]
type = varset
trigger1 = 1
var(0) = 59

Ho creato "CAVIA" con dentro anche le pcx dei numeri e l'animazione del dito cosi vi sarà più facile iniziare.

Spero che vi divertitate....
Forse questo codice lo useremo pure nel Masters Project chi losà spero di si eheheheh
By
Kain the supreme

Potete vedere in azione il codice su:
Personaggi:
(andate nella sezione Mugen / Character )
EvilSoul by kain the supreme
Ken Washio by kain the supreme
Jun Shiratori by kain the supreme
Spider Girl by kain the supreme

Giochi completi:
Hokuto Project
 

Aggiornamento del 30-08-2019, il sito dell'Hokuto Project non esiste più. crying