Il 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 funziona allo stesso modo ma ovviamente realizzato per il winmugen.
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.
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
[State 280, hd]
type = HitDef
triggerall = animelem = 2
trigger1 = enemy,var(0) = 0
trigger2 = enemy,var(0) = 1 && 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
[State 280, hd]
type = HitDef
triggerall = enemy,var(0) = 1 && 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 boz
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
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 priam questo è il losestate.... qui il nostro char userà l'animazione di base 5300 ( dizzy, stordito ) per 100 gametick
;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
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
Nello statedef -2 del vostro persoanggio inserite questo.
[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