Forum MUGENATION: come si fa... - Forum MUGENATION

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

come si fa...

#1 L   williamwilson 

  • EvilMugen
  • Gruppo: Moderatore
  • Messaggi: 1374
  • Iscritto: 30-September 06

Inviato 06 October 2008 - 14:43

come si fa a mettere le scosse nella stand, per capirci tipo raiden o super sayan.

poi volevo sapere come si fa a copiare una mossa da un char e metterle in un altro char, soprattutto a livello di codice come faccio a capire da dove inizia il codice della suddetta mossa e dove finisce e se dipende da altro codice.

per piacere rispondete dettagliatamente in modo che non debba richiedere la stessa cosa e che la possa mettere in atto.
e ricordatevi che io nn so programmare quindi spiegate terra terra :moglie: :rotfl:
0

#2 L   Verza 

  • Guerriero Nero
  • Gruppo: Moderatore
  • Messaggi: 1547
  • Iscritto: 20-January 08

Inviato 06 October 2008 - 14:55

Per le scosse le devi disegnare(sta a te decidere se già addosso al char se le fa sempre oppure a parte se le deve fare in determinati momenti tipo dopo una trasformazione oppure premendo determinati pulsanti) e in linea di massima sono solo un explod(effetto).
Per copiare la mossa,la cose è complicata dato che devi avere la stessa animazione del char da cui la copi,la stessa sequenza di comandi e la stessa parte di cns.
In parole povere non puoi copiare un pezzo di cns,cmd e air da un char e piazzarlo in un altro.
Devi non dico farlo da capo,ma poco ci manca.
Come sempre se qualcosa è sbagliato, gli altri veri programmatori(io sono un falso programmatore :rotfl: ) mi possono smentire.
0

#3 L   williamwilson 

  • EvilMugen
  • Gruppo: Moderatore
  • Messaggi: 1374
  • Iscritto: 30-September 06

Inviato 06 October 2008 - 15:06

ma nn capisco perchè se copio il codice le animazioni e l'air, e stando attento che gli statedef e le animazioni non siano presenti nello stesso nome di qualche altra cosa... tutto non debba funzionare correttamente.... il discorso è che io non capisco bene da dove inizia una mossa e dove finisce.
cioè se voglio programmare una mossa, da dove si parte? apro il cns e butto uno state a cazzo?
e comincio a scriverci caxate? eheheh boh nn capisco la logica.

e poi anche il discorso delle scosse... dove e come dico al mugen che quelle scosse devono essere animate durante la stand?

però ripeto se qualcuno ha la pazienza e la volontà di spiegarmelo bene ok... altrimenti è inutile.

:moglie: devo imparare a programmare, vado a studiarmi la guida di squallido :moglie:
0

#4 L   Manic 

  • Art is deader than dead
  • PuntoPuntoPunto
  • Gruppo: Membro
  • Messaggi: 749
  • Iscritto: 16-February 08

Inviato 06 October 2008 - 15:43

Visualizza Messaggiwilliamwilson, su Oct 6 2008, 16:06, detto:

ma nn capisco perchè se copio il codice le animazioni e l'air, e stando attento che gli statedef e le animazioni non siano presenti nello stesso nome di qualche altra cosa... tutto non debba funzionare correttamente.... il discorso è che io non capisco bene da dove inizia una mossa e dove finisce.
cioè se voglio programmare una mossa, da dove si parte? apro il cns e butto uno state a cazzo?
e comincio a scriverci caxate? eheheh boh nn capisco la logica.

e poi anche il discorso delle scosse... dove e come dico al mugen che quelle scosse devono essere animate durante la stand?

però ripeto se qualcuno ha la pazienza e la volontà di spiegarmelo bene ok... altrimenti è inutile.

:moglie: devo imparare a programmare, vado a studiarmi la guida di squallido :moglie:


Allora premetto che non lo ho mai fatto ma dovrebbe essere una cosa del genere prendi il common1.cns dalla cartella data del mugen e copialo nella cartella del char dandogli un'altro nome, poi vai nel def del tuo char e nella stringa: stcommon =common1.cns sostituisci common1.cns con il nuovo nome che hai dato alla copia del file che hai messo nella cartella del char, poi apri il"nuovo" common1.cns e tra gli state della stand (quelli dopo lo statedef 0) da come sono normalmente cioè:
; Stand
[Statedef 0]
type = S
physics = S
sprpriority = 0

[State 0, 1]
type = ChangeAnim
trigger1 = Anim != 0 && Anim != 5
trigger2 = Anim = 5 && AnimTime = 0;Turn anim over
value = 0

[State 0, 2]
type = VelSet
trigger1 = Time = 0
y = 0

[State 0, 3];Stop moving if low velocity or 4 ticks pass
type = VelSet
trigger1 = abs(vel x) < 2
trigger2 = Time = 4
x = 0

[State 0, 4];Are you dead?
type = ChangeState
trigger1 = !alive
value = 5050


devi aggiungere uno state (quello con l'explod) e quindi modificare i numeri dei successivi ecco come dovrebbe venire lo statedef 0 una volta modificato:

; Stand
[Statedef 0]
type = S
physics = S
sprpriority = 0

[State 0, 1]
type = ChangeAnim
trigger1 = Anim != 0 && Anim != 5
trigger2 = Anim = 5 && AnimTime = 0;Turn anim over
value = 0

[State 0, 2]
type = VelSet
trigger1 = Time = 0
y = 0

[State 0,3]
type = explod
anim = xxx; (al posto delle x metti il numero dell'animazione delle scosse)

[State 0,4];Stop moving if low velocity or 4 ticks pass
type = VelSet
trigger1 = abs(vel x) < 2
trigger2 = Time = 4
x = 0

[State 0,5];Are you dead?
type = ChangeState
trigger1 = !alive
value = 5050


Per ora nell'explod ho messo il minimo indispensabile cioè il numero dell'animazione per vedere tutti gli altri parametri puoi guardare l'sctrl tradotto in ita da Nobun, Ubnacci e MudDuk, cmq la parte dell'explod te la copio qui:

Quote

Explod

Il comando Explod è uno strumento flessibile per visualizzare delle animazioni come fossero “spark”. La sue funzioni comprendono anche quelle del vecchio comando GameMakeAnim che ora è preferibile non usare più. Ad esempio la “tavoletta” di legno che compare nell’ intro di Kung Fu Man è stata inserita con Explod (vedi esempio in fondo alla spiegazione).

Parametri Obbligatori:

anim = [F]anim_no (int)

Qui si specifica quale azione bisogna mostrare. Il prefisso ‘F’ è opzionale: se presente, l’ animazione viene presa da fight.def!

Parametri Opzionali:

ID = id_no (int)

Specifica l’ ID number per questo explod. Utile soprattutto per il trigger NumExplod e per il comando RemoveExplod.

pos = xpos , ypos (int)

xpos ed ypos specificano le coordinate sulle quali creare l’ explod. L’ esatto funzionamento dipende da postype. Se tali parametri sono omessi, il valore predefinito per entrambi è 0.

postype = arg1 (string)

Qui si decide come interpretare i valori del parametro pos. In tutti i casi un valore positivo di y equivale ad un posizionamento più basso. I valori validi per postype sono i seguenti:

p1

pos prenderà come riferimento la posizione del giocatore 1. Un valore positivo di x implica un posizionamento di fronte al giocatore 1. (Questa è la stringa predefinita).

p2

pos prenderà come riferimento la posizione del giocatore 2. Un valore positivo di x implica un posizionamento di fronte al giocatore 2.

front

xpos prenderà come riferimento il bordo dello schermo che il giocatore 1 sta guardando, ypos prenderà come riferimento il punto più alto dello schermo. Un valore positivo di x significa un “arretramento” rispetto al centro dello schermo. Un valore negativo di x, invece, significa un “avanzamento” rispetto al centro dello schermo.

back

xpos prenderà come riferimento il bordo opposto dello schermo rispetto a quello che il giocatore 1 sta guardando, ypos prenderà come riferimento il punto più alto dello schermo. Un valore positivo di x significa un “avanzamento” rispetto al centro dello schermo. Un valore negativo di x, invece, significa un “arretramento” rispetto al centro dello schermo.

left

xpos ed ypos prenderanno come riferimento l’ angolo dello schermo in alto a sinistra. Un valore positivo di x significa la parte destra dello schermo.

right

xpos ed ypos prenderanno come riferimento l’ angolo dello schermo in alto a destra. Un valore positivo di x significa la parte sinistra dello schermo.

facing = arg1 (int)

Settalo ad 1 se vuoi che l’ explod sia rivolto nella stessa direzione dei valori positivi di x (determinati da postype). Settalo a -1 se vuoi che l’ explod sia rivolto nella direzione opposta. (valore predefinito = 1).

vfacing = arg1 (int)

Settalo ad -1 se vuoi che l’ explod venga capovolto verticalmente. Settalo ad 1 se non vuoi capovolgerlo verticalmente. (valore predefinito = 1).

bindtime = arg1 (int)

Stabilisce per quanto tempo (espresso in tick) l’ explod rimane nella posizione determinata da postype. Ad esempio, se postype = p1 e poi pos=30,-40 ed infine bindtime=5, allora l’ explod verrà disegnato per 5 ticks alla posizione 30,-40 relativamente alla posizione del giocatore 1, non importa come si muove il personaggio lungo questo arco di tempo. Una volta scaduto il tempo definito in bindtime, l’ explod non rimane più legato alla posizione determinata da postype, ma manterrà immutata la propria posizione (salvo utilizzo del parametro vel o del parametro accel). Se infine bindtime=-1 allora l’ explod sarà sempre vincolato alla posizione determinata da postype.

vel = xvel , yvel (float)

Specificano la velocità iniziale delle componenti x e y dell’ explod. Tali parametri verranno interpretati relativamente alla direzione cui l’ explod “guarda”. (valore predefinito = 0, 0).

accel = xaccel , yaccel (float)

Specificano l’ accelerazione delle componenti x e y dell’ explod. (valore predefinito = 0, 0).

random = arg1 , arg2 (int)

La posizione di partenza dell’ explod verrà determinata in maniera casuale. Arg1 stabilisce la gamma di valori possibili per lo spostamento in direzione x, mentre arg2 per la direzione y. Ad Esempio se pos=0,0 e poi random=40,80 allora la posizione x dell’ explod sarà su di un punto a caso tra -20 e 19 mentre la posizione y tra -40 e 39. Entrambi i valori, se omessi, sono predefiniti a 0.

removetime = arg1 (int)

Se removetime è positivo allora l’ explod verrà rimosso dopo essere stato visualizzato per un tempo equivalente (in tick) al valore qui espresso. Se removetime=-1 l’ explod verrà visualizzato indefinitivamente. Se invece removetime=-2 l’ explod verrà rimosso quando la sua animtime raggiungerà il valore 0. (valore predefinito = -2)

supermove = bvalue (bool) ;Parametro obsoleto: utilizza invece supermovetime.

Settalo ad 1 affinché l’ explod continui fino alla fine di una “super pause”, avendo riguardo del valore di removtime. (valore predefinito = 0)

supermovetime = move_time (int)

Specifica per quanti tick di tempo l’ explod non sarà bloccato durante una “super pause”. Molto utile se si vuole che l’ explod sia “animato” durante l’ esecuzione di una “super pause”. (valore predefinito = 0).

pausemovetime = move_time (int)

Specifica per quanti tick di tempo l’ explod non sarà bloccato durante una “Pause”. (val. predefinito = 0)

scale = xscale [, yscale ] (float)

Xscale ed yscale specificano i fattori di “scala” da applicare alla direzione orizzontale e verticale (moltiplica le componenti per i rispettivi valori). Il valore predefinito per entrambi è 1 (niente modifica).

sprpriority = arg1 (int)

Questo valore specifica il grado di priorità di questo explod. Le animazioni con priorità più alta verranno disegnate sopra le animazioni con priorità più bassa. Ad esempio se setti sprpriority=-3 l’ explod verrà rappresentato sotto molti personaggi e molti explod, che abitualmente hanno sprpriority maggiori od uguali a -2. (valore predefinito = 0).

ontop = bvalue (bool)

Settalo ad 1 per far sì che l’ explod venga disegnato sopra gli sprite e sopra i layer dei background. Questo parametro ha la precedenza su sprpriority. (valore predefinito = 0).

shadow = shad_r , shad_g , shad_b (int)

Settano le componenti RGB (rosso, verde, blu) dell’ ombra dell’ explod. Per ogni componente sono validi valori compresi tra 0 e 255. Più grande è il valore del componente e meno di quel colore verrà mostrato nell’ ombra. Per usare il colore d’ ombra dello stage setta shad_r a -1. (valore predefinito = 0, 0, 0) (niente ombra).

ownpal = bvalue (bool)

Settalo ad 1 per dare all’ explod la propria copia della propria palette. Questa opzione è consigliata nel momento in cui tu decida di cambiare temporaneamente la palette del giocatore (come ad esempio rialzarsi dopo una caduta o dopo aver usato il comando PalFX). (valore predefinito = 0).

removeongethit = bvalue (bool)

Settalo ad 1 se tu vuoi che l’ explod sparisca quando il giocatore viene colpito.

Esempio:

; Queste righe le trovi in Kung Fu Man. Questi due explod servono per far apparire la tavoletta di legno
; dell’ introduzione (wood 1 = tavoletta normale) (wood 2 = tavoletta spezzata)
;
; Provate a sostituire i valori di anim con 0 e vedrete una intro insolita.

[State 191, Wood 1]
type = Explod
trigger1 = RoundState != 0
persistent = 0
anim = 191
postype = p1
pos = 260, -90
velocity = -4.2, -7
accel = 0, .32
removetime = 48

[State 191, Wood 2]
type = Explod
trigger1 = AnimElemTime(7) = 1
anim = 192
postype = p1
pos = 60, -70
velocity = 2, -4
accel = 0, .32
removetime = 35

così facendo dovrebbe funzionare. Fammi sapere.
0

#5 L   williamwilson 

  • EvilMugen
  • Gruppo: Moderatore
  • Messaggi: 1374
  • Iscritto: 30-September 06

Inviato 06 October 2008 - 16:35

okk manic ci provooo
ok funge ma manca un trigger,
quale devo mettere x far si che questa animazione sia presente solo quando siamo nella stand?
0

#6 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 06 October 2008 - 17:18

Allora, il solo fatto che l'hai messo nello statedef della stand, implica che esso sarà presente soltanto lì.

ogni state necessita di un trigger1 come minimo, se ti da errore è per questo forse.

ad ogni modo, io solitamente con le scosse agisco diversamente, perché le metto non solo nella stand ma in tutto il char.

comunque, per come vuoi fare tu, è sufficiente mettere un trigger del genere

trigger1 = (time%TEMPO) = 0


dove TEMPO è la durata dell'animazione dei fulmini, e aggiungere questo parametro:

removetime = TEMPO


dove tempo è uguale a prima ;)

aggiungi inoltre:

removeongethit = 1


che ti farà scomparire le scosse se colpito.

Saluti

Squall
0

#7 L   williamwilson 

  • EvilMugen
  • Gruppo: Moderatore
  • Messaggi: 1374
  • Iscritto: 30-September 06

Inviato 06 October 2008 - 17:25

nn ho capito bene...
ma che centra il tempo?
non è che devono avere un tempo devono animarsi solo quando
c'è la stand ovvere animanzioni da 0,1 a 0,7 di gruppo in qualsiasi altro caso nn devono vederesi
come glielo dico? :rotfl:
(williamwilson in preda alla programmazione... ) :rotfl:
0

#8 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 06 October 2008 - 19:33

allora... contiamo che tu hai l'animazione 2000, che è composta da questi frames dei fulmini.

NELLO STATEDEF 0 (che sarebbe quello della stand) programmi quanto detto.

il tempo serve x dirgli quando partire. se tu stai in stand, devono partire appena ci vai, dopo 10 tick, mai?

ecco, a questo serve i ltmepo. dato che tu devi farli partire all'inizio della stand, metti:

trigger1 = (time%TEMPO) = 0


questo significa che l'animazione di questi fulmini viene rappresentata OGNI TEMPO ticks.

mettendo lo stesso numero anche alla durata dell'explod, ovvero il tempo in ticks dopo il quale si cancella dallo schermo l'animazione, si ha un effetto continuo di fulmini.

il TEMPO è la durata dell'animazione nell'AIR, in modo tale che compia tutta l'animazione prima di scomparire.

IMPORTANTE: non rispondermi di nuovo: ma non gli ho dettosolo nella stand XD il solo fatto di posizionarlo nello statedef che regola la stand, lo mette solo lì. se tu programmi una fireball e metti il controller per la palla di fuoco in quella tecnica, mica si vede in ogni altra animazione, no? ;)

Saluti

Squall
0

#9 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 06 October 2008 - 20:39

Squall, permettimi di suggerire un'alternativa alla tua soluzione...

Poniamo che i fulmini siano tutti in un'unica animazione (es. 2000)

nell'explod NON specificare il parametro removetime (lascia che termini al termine della animazione).
Metti invece questi parametri

ID = 2000 ;consiglio l'ID = numero animazione
trigger1 = NumExplod(2000) = 0

-------

Per poi rimuovere l'Explod APPENA il personaggio fuoriesce dallo state 0 devi aggiungere nello [StateDef -2] (se non presente aggiungerlo) questo codice

[State -2, Rimuovi Explod Standing quando esci da state 0]
type = RemoveExplod
id = 2000 ;Id usato
trigger1 = stateno != 0 && NumExplod(2000) > 0

questo perché il passaggio dallo state 0 ad altri state non è totalmente controllato dal CNS, ma è in parte gestito direttamente dal Mugen... quindi è quasi obbligatorio ricorrere allo state -2 (codice che viene letto IN qualunque momento ed in qualunque condizione).

Quote

poi volevo sapere come si fa a copiare una mossa da un char e metterle in un altro char, soprattutto a livello di codice come faccio a capire da dove inizia il codice della suddetta mossa e dove finisce e se dipende da altro codice.

E' una bella domanda... ma non è scontata la risposta...
in un caso "lineare" potresti trovare, nello statedef -1 del CMD l'inizio della mossa desiderata

[State -1, "Hyper"]
type = ChangeState
value = 3000
ctrl = 0
trigger1 = command = "hyper"
trigger1 = power >= 1000
trigger1 = ctrl
trigger1 = statetype != A


Qui sai che la mossa "hyper", che si lancia con il comando "hyper", partirà, a livello di codice dallo statedef 3000.

Poi proseguirai e potresti trovare, nello state 3000, altri changestate (es. la mossa è suddivisa in parti) che ti descrivono i passaggi di state delle varie fasi della mossa, fino a trovare, un changestate a 0 che termina il tutto.

Semplice? NO!

Purtroppo questa è una delle tante possibilità (la più frequente, comunque), ma ci sono combinazioni molto più complesse (per fortuna un po' meno frequenti).
Ad es. alcune mosse hanno in sè degli Helper... quando c'è un Helper, si richiama un altro state (o successione di state) che funzionano CONTEMPORANEAMENTE al personaggio principale.

Altre volte la mossa si può ramificare... i changestate possono passare diversi valori a seconda delle diverse situazioni (per le mosse più complesse da realizzare)

Inoltre ci possono essere parti di una mossa che sono programmate negli statedef negativi (-1, -2, -3) che hanno la particolarità di essere eseguiti in continuazione a prescindere dallo state effettivo in cui ti trovi (il -1 ed il -3 NON vengono letti se sei in un custom state; il -2 viene letto IN OGNI CASO ; l'ordine di lettura è: -3, -2, -1, [state effettivo])

Morale della favola... fai molto prima a fare un char da solo senza guardare gli altri... ti incasini molto meno e soprattutto molti dei problemi li risolvi perché tu sai benissimo come hai distribuito il codice.

PS: Tu che sei un membro speciale hai anche accesso allo StateDef index di Ranmaru...
0

#10 L   Squall LionHeart™ 

  • Programmatore M.U.G.E.N.
  • Gruppo: Moderatore
  • Messaggi: 1097
  • Iscritto: 23-July 07

Inviato 06 October 2008 - 20:44

Asd Nobun per una volta sono io quello che ha "risparmiato" codice, usando un singolo controller :P XD

ad ogni modo validissima la tua alternativa :)

Saluti

Squall
0

#11 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 06 October 2008 - 20:56

Il codice dello statedef -2 è una pignoleria (evitare che l'explod perduri anche solo un attimo in più dopo il cambio di state)... se la si vuole rispettare sarebbe da applicare pure nel tuo codice... 0:)
0

#12 L   williamwilson 

  • EvilMugen
  • Gruppo: Moderatore
  • Messaggi: 1374
  • Iscritto: 30-September 06

Inviato 07 October 2008 - 18:35

1 - allora ho provato, (grazie a verza che ora è diventato amico mio :rotfl: ) sia la soluzione di nobun che quella di squall, entrambe sembrano funzionare però stranamente nella soluzione proposta da nobun, il char sembra incantarsi un pò prima di passare alla winpose, cosa che non avviene invece col metodo di squall. io giustamente nn posso capire come mai e da che dipende.

2 - poi, altra cosa stranissima... che avviene in tutte e due le soluzioni:
durante l'annunciazione del round (per capirci "round one fight!!" ), queste scariche si vedono nel primo round, mentre negli altri round si vedono solo dopo che il round è stato annunciato :o

edit:

ho aggiunto lo state -2 anche al metodo di squall ed è proprio quello che fa lo strano scherzetto del punto 1
0

#13 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 07 October 2008 - 18:47

Bho, strano... non dovrebbe bloccare la winpose...
prova ad aggiungere

1) nel comando dello state 0 questo trigger

trigger1 = roundstate < 3

2) nel comando dello state -2 questo trigger

trigger2 = roundstate > 2

-------

in realtà NON è strano che la scossa NON parta all'inizio dei round successivi PRIMA del fight (mentre nel primo round sì)...

per darti la soluzione devo andarmi a spulcare il common1.cns (così a memoria non ricordo il codice dello state 5900)...
0

#14 L   williamwilson 

  • EvilMugen
  • Gruppo: Moderatore
  • Messaggi: 1374
  • Iscritto: 30-September 06

Inviato 07 October 2008 - 18:49

Visualizza MessaggiNobun, su Oct 7 2008, 19:47, detto:

Bho, strano... non dovrebbe bloccare la winpose...
prova ad aggiungere

1) nel comando dello state 0 questo trigger

trigger1 = roundstate < 3

2) nel comando dello state -2 questo trigger

trigger2 = roundstate > 2

-------

in realtà NON è strano che la scossa NON parta all'inizio dei round successivi PRIMA del fight (mentre nel primo round sì)...

per darti la soluzione devo andarmi a spulcare il common1.cns (così a memoria non ricordo il codice dello state 5900)...



ho editato il mess mentre rispondevi... nel caso non avessi letto a proposito dello state - 2 cmq provo ad aggiungere questo cose anche...
0

#15 L   Nobun 

  • Horse Rider Skull Phantom. Rarely Here.
  • Gruppo: SuperModeratore
  • Messaggi: 4898
  • Iscritto: 11-July 04

Inviato 07 October 2008 - 18:53

scusa... se non funziona prova quest'altro trigger2 (nello state -2)

trigger2 = roundstate > 2 && NumExplod(2000) > 0

... bho comunque è strano... e' che non potendo fare esperimenti vado un po' a scatola chiusa...
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

1 utenti stanno leggendo questa discussione
0 utenti, 1 ospiti, 0 utenti anonimi