Tutorial Programmazione IV, Parte IV: Programmare il Codice

« Older   Newer »
  Share  
Squall LionHeart™
view post Posted on 15/11/2007, 18:09




PARTE IV: Programmare il Codice.

È consigliato seguire passo passo in modo pratico le nozioni descritte nel tutorial, per una facile e rapida comprensione.

Atto I: Esempio di codice.

Questa è la parte più “difficile” nella programmazione. È infatti l’unica vera programmazione del char.
Se si ha letto il precedente tutorial, si è compresa l’essenza degli statedef e degli states, ed ora bisogna capire come utilizzarli per rendere in game quello che vogliamo far fare al personaggio.

Iniziamo ad analizzare più a fondo lo statedef.

Come abbiamo detto, lo statedef è dotato di un numero univoco, che gli permette di essere identificato. Sotto a questa “insegna”, ci sono altre linee di codice, che determinano alcune cose.
È naturale che dipende dal tipo di statedef che si intende fare, dalla posizione e dall’effetto, che alcune righe potrebbero mancare, o altre ancora aggiungersi.
Prendiamo d’esempio il pugno debole di Uub, di mia programmazione. Analizzeremo i vari states che vi sono contenuti.

;Pugno Debole
[Statedef 200]
type = S
Movetype = A
physics = S
ctrl = 0
anim = 200
velset = 0,0
facep2 = 1

primo pezzo: statedef. Questo è lo statedef 200, e corrisponde in tutti I chars fatti bene al pugno debole.
Type = S --> descrive in che posizione il mugen deve considerare il Char quando fa il pugno debole. In questo caso, “S”, sta a indicare Stand, cioè alzato.
I vari tipi di type sono:
S = stand (alzato)
C = crouching (abbassato)
A = air (in volo)
L = liedown (steso a terra).

Movetype --> indica il tipo di azione che il char svolgerà.

A = attack (attacco)
S = stand (fermo)
H = hit ( colpito)

Physiscs --> indica un valore molto simile al Type, infatti è molto spesso uguale. Ha gli stessi valori.

Ctrl --> informa il mugen se il giocatore deve avere il controllo del personaggio per la durata dell’azione o no. Può avere solo i valori 1 e 0 (si e no).
Anim  indica il numero di animazione che deve eseguire in questa azione. Il numero è settato nel file Air. Anche se si può pensare il contrario, non tutti gli statedef hanno una animazione. Per quegli stati di controllo, che non necessitano di raffigurazioni grafiche, o ancora per quegli stati dove ci possono essere più animazioni (per una determinata condizione, l’una o l’altra).

Velset --> indica la velocità di spostamento del personaggio. Il primo valore è l’asse X (orizzontale) il secondo è l’asse Y (verticale). Un valore positivo farà muovere il char in avanti(o in alto, se l’asse Y), mentre un valore negativo farà muovere il char indietro (o in basso, se l’asse Y).

Facep2 --> questo comando dice al mugen che il Char deve essere girato a guardare l’oppo per poter tirare il pugno.

Questi sono solo alcuni dei tanti, che si imparano analizzando quanti più chars possibili, se ad esempio si nota un particolare effetto, e lo si vuole dare al proprio char, si analizza il codice per capire come è fatto, quali comandi provocano quel particolare effetto, e lo si riproduce (non copiare, n quanto copiando non si apprende nulla).

Vediamo ora i restanti states del pugno debole.

[State 200, 0]
type = PlaySnd
trigger1 = Time = 0
value = F0,0

type = diverso dal type dello statedef, indica che state è quello che si sta analizzando (o creando). Playsnd, ad esempio, dice al mugen di far partire un preciso suono presente in un archivio snd indicato in seguito. È possibile conoscere tutti i type conosciuti dal mugen, tramite il file “sctrl” presente nella cartella docs del mugen. È inoltre esistente un’ottima versione di questo file tradotto in italiano, ad opera di Nobun, Ubnacci, MadDuk.

Trigger1 --> qui c’è molto da dire. I trigger sono l’anima della programmazione. Il trigger indica la condizione (dall’inglese “grilletto”) che deve essere confermata per far si che lo state “parta” e svolga il suo effetto. Facciamo un esempio.
Nel playsnd che stiamo analizzando, dopo trigger1, vi è time = 0. questa è la condizione. Il trigger “time”, è il caso più classico per capire come funzionano. Time = 0 significa immediatamente. Per un valore > 0 si indicano i tick (si ricordi che 1 tick = 1/60 secondo) quindi se fosse stato time = 30, dopo mezzo secondo sarebbe partito il suono.
Detto questo, ora bisogna capire il perché dell’ “1” affianco alla parola trigger. Ci sono 2 fondamentali tipi di trigger:

triggerall e trigger”num” (trigger1, trigger2 ecc).

partiamo dai trigger numerati.

Abbiamo detto che i trigger sono le condizioni, ma bisogna dire al mugen, se le condizioni sono più di una, se devono essere rispettate tutte, solo una, o alcune. Per fare questo, ci sono i trigger numerati.
Se io ho due trigger1, devono essere rispettati entrambi.
Se ho un trigger1 e un trigger2, basta che uno sia confermato per attivare il controller.
Si possono avere una qualunque combinazione di trigger, e non si ha un valore massimo da dare al frigger (anche se personalmente non sono mai andato oltre il trigger12, in uno sporadico caso).

Analogamente, il triggerall, è il “capo” trigger. Se io ho un triggerall, un trigger1 e un trigger2, il conroller si attiverà solo nei seguenti casi:

rispettato: triggerall e trigger1
rispettato: triggerall e trigger2
rispettato: triggerall, trigger1, e trigger2.

Da questo si può capire, che il triggerall è il trigger più importante, che dev’essere sempre verificato, o il controller non si attiverà. Ciononostante possono esserci infiniti triggerall.

Si ricordi che un controller deve avere come minimo un trigger1. gli altri non sono indispensabili, ma senza un trigger1, anche in un solo controller, il mugen darà errore.



Value --> indica il valore del suono (il suo “nome”) all’interno dell’archivio suono. Ogni suono ha un gruppo (il primo numero) e un numero (il secondo numero). In un playsnd, l’archivio da cui si prendono i suoni è quello del char, all’interno della sua cartella. In questo caso, però, il suono viene preso dal file Fight.snd presente nella cartella data. Questo perché “F” precede i valori. Omettendo F, si riavrà l’indirizzo nella cartella del char.

[State 200, hit]
type = HitDef
trigger1 = AnimElem = 2
attr = S, NA
hitflag = MAF
guardflag = MA
animtype = Light
air.animtype = Light
priority = 3,Hit
damage = 25
pausetime = 8,8
sparkno = 0
sparkxy = 0,-86
hitsound = S0,5
guardsound = S3,0
ground.type = High
air.type = High
ground.slidetime = 10
guard.slidetime = 10
ground.hittime = 10
guard.hittime = 10
air.hittime = 10
ground.velocity = -4,0
air.velocity = -4,-2

L’hitdef è un controller particolare. Nel momento in cui si attiva (il suo trigger è animelem = 2, in questo caso, quindi non appena l’animazione in corso passa al suo secondo frame, si attiva) controlla che un cnls rosso del char con l’hit def non stia urtando un cnsl blu di un avversario. Se questo accade (quindi l’oppo è colpito), gli viene inflitto il danno indicato dal valore “damage”, e subisce altri effetti (esempio: pausetime = 8,8, vuol dire che entrambi i personaggi rimangono immobili per 8 ticks). Con i comandi air velocity e ground.velocity si indica la velocità di spostamento dell’avversario una volta colpito. Utile per far indietreggiare l’avversario dopo un colpo particolarmente forte, o per farlo sbalzare in aria dopo un uppercut.
Per il restante dei valori, sono ampliamenti discussi nel file Sctrl, quindi ritengo inutile parlarne ora.

[State 52, 4]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1

infine, un altro state importantissimo: il changestate. Questo ha l’effetto di portare da uno statedef ad un altro. Il suo trigger (animTime = 0, ma non è per forza questo), indica che alla fine dell’animazione, si attivi il controller (animtime indica il tempo in ticks dall’inizio dell’animazione. Il valore 0 rappresenta invece il termine di questa).

Il value indica lo statedef di destinazione. Lo state 0 è la stand, in tutti i chars, quindi portare un char alla stand, indica la fine dell’azione (tira il pugno, quindi ritorna in assetto da combattimento).

Il ctrl = 1, indica che nel passaggio tra questo stato e la stand vi è il controllo per il giocatore. È importante mettere sempre ctrl = 1, quando si passa alla stand.

Questo è il fondamento della programmazione, che dovrà essere ampliato con innumerevoli prove e sbagli, analisi di altri personaggi e, perché no, domande a chi ne sa più di voi.

Ribadisco l’importanza del file Sctrl, che presenta all’interno tutti i type degli states, e le relative linee (ad esempio nell’hitdef ci saranno sparkno, hitsound e tutti gli altri), spiegandone il significato.
Altro documento importante, sempre presente nella cartella data, è il file “trigger”. Vi sono elencati tutti i trigger che il mugen riconosce. Utile per ampliare gli orizzonti e le possibilità.

Nella prossima parte si parlerà del file.CMD, della composizione dei comandi e dei changestate appositi.

Alla prossima

Saluti

Squall
 
Top
goten1992
view post Posted on 15/11/2007, 22:21




GRAZIEEEEEEEEEEEEEEEEE...aspettando cn impazienza la prossima... XD
 
Top
Squall LionHeart™
view post Posted on 15/11/2007, 23:08




prego XD x il prossimo non so quando... inizia a spratichirti con quello appreso...

saluti

Squall
 
Top
goten1992
view post Posted on 16/11/2007, 00:07




t volevo kiedere una cs, xò te la posso kiedere sl da msn o skipe xkè t dovrei mandare una char x vedere se la puoi fare...x te va bn?
 
Top
Squall LionHeart™
view post Posted on 16/11/2007, 13:42




se ho capito bene e la tua richiesta è ke io ti faccia un char, non posso, mi spiace...fra scuola, 2 progetti mugen, la kitarra, e un pò di vita personale non ho il tempo nemmeno x mangiare :D

cmq se ho capito male, contattami su msn all'indirizzo spoileratoXD

 
Top
goten1992
view post Posted on 16/11/2007, 16:27




t contatto da msn x farti capire meglio
 
Top
Menjoso
view post Posted on 30/11/2007, 01:08




Letto tutto. Molto semplice, hai chiarito un bel po di dubbi al povero Menjo con un solo post. Grazie tante!
Sto imparando pian piano a programmare e sono uno spriter niente male...forse fra un po vi farò compagnia nel progetto non so ancora. Voglio concludere delle faccende mugen personali prima XD

Per goten: dopo questo post dovresti aver capito come fare da solo, io credo di esserci arrivato. L'unica parte che non conosco bene è gli state nel cmd, qualcosa del cns invece la capisco ora...oggi mi sono messo a smanettare un po su Gohan e ho fatto pratica, diciamo che lo uso un po da cavia per folli esperimenti! XD

Complimenti ancora per il tutorial! :banana:
 
Top
Goku SSJ5 1993
view post Posted on 2/12/2007, 14:07




Estremamente utile! Grazie! :banana:
 
Top
goten1992
view post Posted on 7/12/2007, 23:27




menjo mi disp ma nn sn molto intuitivo in qst campo...me lo dovrà dare cn il cucchiaino cm stà facendo senò nn c capirò mai nnt... ke tristezza ke mi faccio XD
 
Top
Menjoso
view post Posted on 7/12/2007, 23:42




Io con questo tutorial ho capito praticamente tutto quello che mi serviva fin ora. Certo non descrive gli Explod (che un po conosco gia) o altri states importanti ma stanno tutti nella cartella docs del Mugen. O proprio le espansioni di quegli states sopra descritti, però le basi ci sono, purtroppo ci vuole molta intuizione per capire come usarli. E credo che me la posso cavare volendo :P


Edited by Menjoso - 23/12/2007, 11:31
 
Top
view post Posted on 26/1/2008, 21:22
Avatar

Group:
Member
Posts:
4,590

Status:


scusa ma se voglio fare solo la stand non dovrei scrivere solo così :

;Stand Anim
[Statedef 0]
type = S
Movetype = S
physics = S
ctrl = 1
anim = 0
velset = 0,0
facep2 = 1

? rispondimi ti prego
 
Top
Squall LionHeart™
view post Posted on 26/1/2008, 22:24




assolutamente no... quello è solo lo statedef, e in effetti, ti dice l'animazione e tutto... però

1) uno statedef deve possedere MINIMO 1 state (il changestate, solitamente).

2) nella stand ci sono molte cose importanti, da non mancare.

3) la stand non va programmata autonomamente. o meglio, si può anche fare, ma è bene prendere il file common1.cns dalla cartella data, e utilizzarlo come commonst. questo perchè al suo interno ha già programmato tutti i movimenti base, quali stand, camminata, scatti,salti, parate, anim da colpito ed altro.

Saluti

Squall
 
Top
11 replies since 15/11/2007, 18:09   362 views
  Share