come si fa...
#1
Inviato 06 October 2008 - 14:43
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:
#2
Inviato 06 October 2008 - 14:55
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.
#3
Inviato 06 October 2008 - 15:06
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:
#4
Inviato 06 October 2008 - 15:43
williamwilson, su Oct 6 2008, 16:06, detto:
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
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.
#5
Inviato 06 October 2008 - 16:35
ok funge ma manca un trigger,
quale devo mettere x far si che questa animazione sia presente solo quando siamo nella stand?
#6
Inviato 06 October 2008 - 17:18
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
#7
Inviato 06 October 2008 - 17:25
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:
#8
Inviato 06 October 2008 - 19:33
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
#9
Inviato 06 October 2008 - 20:39
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
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...
#10
Inviato 06 October 2008 - 20:44
ad ogni modo validissima la tua alternativa :)
Saluti
Squall
#11
Inviato 06 October 2008 - 20:56
#12
Inviato 07 October 2008 - 18:35
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
#13
Inviato 07 October 2008 - 18:47
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)...
#14
Inviato 07 October 2008 - 18:49
Nobun, su Oct 7 2008, 19:47, detto:
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...
#15
Inviato 07 October 2008 - 18:53
trigger2 = roundstate > 2 && NumExplod(2000) > 0
... bho comunque è strano... e' che non potendo fare esperimenti vado un po' a scatola chiusa...

Aiuto










