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 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
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
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, 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, 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.
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 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