Forum MUGENATION: Tutorial Stage by Nobun - Forum MUGENATION

Salta al contenuto

  • 2 Pagine +
  • 1
  • 2
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

Tutorial Stage by Nobun

#1 L   Nobun 

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

Inviato 10 April 2009 - 20:45

Tutorial Stage - Parte I:
Livello = 1/10

Pre-Requisiti:
- come sono fatte le animazioni(necessarie per i layer animati, in questa prima parte però non verranno menzionate)

Cosa si utilizzerà:
- una copia del file .def dello stage di Kfm
- un editor di testo
- il programma Fighter Factory

Molti si chiedono come programmare uno stage.
E' in realtà piuttosto semplice. L'unica cosa che si richiede come re-requisito è sapere, in grandi linee, come è fatta una animazione AIR (Esclusi i Clsn Boxes che qui NON servono).
Se non lo sapete vi rinvio al file AIR.txt contenuto nella cartella "docs" della vostra release Mugen. Date un'occhiata alla traduzione di Oy ;)

Fatta questa dovuta introduzione spieghiamo come è strutturato questo tutorial:
Esso è strutturato in due livelli. Il primo livello spiega passo passo uno stage di base costruito su un solo layer.
Il secondo livello si occupa di approfondire di più la programmazione dei layers che sono poi il fulcro vero e proprio degli stage, dando per presupposta la conoscenza di ciò che è stato spiegato nel primo livello (e quindi viene omessa ogni spiegazione su come si completa la prima parte del .DEF, spiegata in questa prima parte del tutorial)

Possiamo, infatti, dividere idealmente lo stage .DEF in due parti.
La prima parte consiste in tutte le informazioni base dello stage (tutte le istruzioni fino alle istruzioni [BGDef …] comprese)
La seconda parte consiste nelle istruzioni di tutti i layer (livelli di disegno) che compongono lo stage. Le due parti non sono tra loro slegate, ma qui daremo prevalenza alla prima parte (accenneremo solo alla seconda parte per quello che ci serve in funzione della prima).

Il nostro primo obiettivo, quindi, è realizzare uno stage semplice, fatto solo di una immagine o di una animazione che determina, da sé, tutto l'aspetto dello stage (es. lo stage è il disegno di una casa con alberi ed è composto solo dall'immagine di una casa con alberi).

#----

Ipotizziamo quindi che il nostro stage sarà fatto di una immagine unica (di dimensioni 400x300) che raffiguri una casa con un cielo e degli alberi (una immagine unica e statica). Come possiamo rendere questa immagine uno stage giocabile?

Per prima cosa dobbiamo fare una copia del .Def dello stage di kfm (si trova in Mugen\Stages) e lo chiamiamo "casa.def" (potete ovviamente dargli un altro nome, cercate di capire l'esempio per quello che è).

Ora noi sappiamo (cosa fondamentale) quanto è grande esattamente il nostro stage. In questo caso è molto semplice perché la dimensione corrisponde alla dimensione dell'unica immagine della nostra fantomatica casa (400x300). Comunque, anche negli stage più complessi, di norma, c'è una immagine che fa da sfondo generale e che ci permette di sapere con esattezza la dimensione dello stage.

Altra cosa importante: la schermata del Mugen è grande 320x240 (si parla del Mugen classico, il tutorial si basa su quello) e quindi gli stage devono essere almeno grandi quanto quelle dimensioni, senza esagerare in altezza.

Cominciamo quindi a modificare il nostro file casa.def (e leggiamo i commenti che sono utilissimi, seppure in inglese).

[Info]
name = "Casa con gli alberi"


Questo è il nome dello stage (va racchiuso tra virgolette). Questo nome, in particolare, apparirà quando il Mugen ti permette di scegliere lo stage che vuoi utilizzare mostrandoti i nomi degli stage inseriti.

[Camera]

In questa sezione settiamo i movimenti della "telecamera" (lo stage scorre, mentre i nostri eroi combattenti si muovono in esso, seguendo i movimenti dei nostri personaggi in gioco)

startx = 0
starty = 0


Normalmente questi parametri (startx e starty)vanno lasciati così. L'unica cosa che succede cambiandoli è di avere un effetto di camera che, da un punto diverso dalla posizione dei combattenti si muove (VELOCEMENTE) verso i combattenti. Al 99% dei casi tali parametri vanno lasciati così come sono

boundleft = -40
boundright = 40


Tendenzialmente, quando uno stage ha dimensioni pari (come nel nostro caso perché la lunghezza dello stage è 400 pixel … ed è la regola che uno stage sia di lunghezza pari) i due parametri boundleft e boundright sono uguali. L'unica differenza è che boundleft è un valore negativo, mentre boundright è positivo.
Partendo dal presupposto che l'immagine è di dimensione pari (in questo caso 400 è un numero pari) e sapendo quanto è lunga, possiamo calcolare con esattezza questi valori.

boundright = (LUNGHEZZA_IMMAGINE / 2) - 160
boundright = (400 / 2) - 160 ;abbiamo detto che la nostra casa è "lunga" 400 pixel
boundright = 200 - 160
boundright = 40

Come abbiamo detto, essendo l'immagine di dimensione pari il valore di boundleft è lo stesso, solo che sarà un valore negativo, e quindi sarà -40

Cosa sono boundleft e boundright? molto semplicemente i parametri che ci dicono quanto spazio rimane ai giocatori da camminare andando a destra o a sinistra dello schermo.

boundhigh = -60
boundlow = 0


Manca solo da calcolare lo scorrimento verticale determinato da boundhigh e boundlow.
boundlow è molto facile da settare: il suo valore DEVE essere sempre 0 (non chiedetemi perché il Mugen ha voluto imporre un parametro che non è opportuno cambiare).
Per calcolare boundhigh (che, come potete vedere, è SEMPRE un valore NEGATIVO) abbiamo anche qui una formula

boundhigh = - (ALTEZZA_IMMAGINE - 240)
boundhigh = - (300-240) ;la nostra casa è "alta" 300 pixel
boundhigh = - (60)
boundhigh = -60

verticalfollow = .2
floortension = 0
tension = 60


Gli ultimi 3 parametri della telecamera servono per determinare la velocità di scorrimento verticale dello stage (più veloce se uno stage è molto alto e lo si vuole "mostrare" tutto, più lento se uno stage è più "basso").
Per settare questi parametri si va un po' a tentativi. Generalmente ho visto che gioca tutto su floortension e verticalfollow (io in particolare gioco su verticalfollow), mentre tendenzialmente il valore di tension l'ho sempre tenuto a 60. Comunque, come ho detto qui, per determinare i valori si va a tentativi. Quindi per ora si lasciano quelli che ci sono per poi cambiarli quando si prova lo stage fino a che non si è soddisfatti del risultato.

Altre (intere) sezioni che possiamo (e per alcuni parametri DOBBIAMO) lasciare completamente inalterate:
[PlayerInfo]
[Scaling]
[Bound]


Io non ho mai modificato alcun parametro in queste 3 sezioni e non è praticamente mai necessario farlo. Si va quindi alla sezione successiva

[StageInfo]
;Z offset for drawing
;Adjust this value to move the ground level up/down in the screen.
;It's the position where the players stand at.
;Up - smaller, Down - larger
;***
zoffset = 200

;Leave this at 1. It makes the players face each other
autoturn = 1

;Set the following to 1 to have the background be reset between
;rounds.
resetBG = 0


I commenti si spiegano da soli. Nella sezione [StageInfo] dobbiamo tendenzialmente modificare solo il parametro zoffset. autoturn DEVE essere lasciato ad 1. resetBG può essere settato anche ad 1 anziché a 0 ma, tendenzialmente, va lasciato a 0 (vedere commento: trad: "Imposta il seguente valore ad 1 per far ripartire le animazioni dello sfondo nel passaggio tra i vari round").

Ora quindi settiamo zoffset. Zoffset determina la linea di suolo. Il valore nello stage di kfm è 200, ma va modificato (a tentativi) fino a quando i personaggi stanno alla giusta altezza (toccando coi piedi il suolo). Come si può leggere dal commento, più alto è il numero e più in basso sarà posizionata la linea di suolo in cui i personaggi cammineranno.

 [Shadow]
;This is the shadow color given in r,g,b. Valid values for each
;range from 0 (lightest) to 255 (darkest).
;Defaults to 92,92,92 if omitted.
color = 32,32,32

;This is the scale factor of the shadow. Use a big scale factor
;to make the shadow longer. You can use a NEGATIVE scale factor
;to make the shadow fall INTO the screen.
;Defaults to 0.4 if omitted.
yscale = -.1

;Set to 1 to draw "reflection" shadows. Defaults to 0.
reflect = 1


Ora dobbiamo determinare come è fatta l'ombra. Color mi dà il colore (in RGB) della stessa (tendenzialmente va bene 32,32,32 che è un grigio molto scuro praticamente nero). Il valore scale determina la "grandezza" dell'ombra che viene determinata da una operazione di riduzione in scala. I commenti spiegano tutto, ma per i non anglofoni lo traduco

"Questo è il valore in scala dell'ombra. Usa un valore alto per rendere l'ombra più lunga. Puoi usare un valore NEGATIVO per far sì che l'ombra cada NELLO schermo"

In poche parole un valore negativo fa sé che l'ombra, anziché essere inclinata verso il basso sia inclinata verso l'alto. Tenete conto che un valore di 1 produrrebbe un'ombra grande quanto il vostro char (cosa del tutto innaturale) quindi il valore tendenzialmente è un valore che nemmeno si avvicina ad 1 (0.5 è già un valore che comincia ad essere grandicello).

Infine abbiamo "reflect" che, se impostato ad 1, produce un effetto di riflessione a specchio nel pavimento (come accade nel pavimento dello stage di KFM). Se questo tipo di effetto nel vostro stage stona (es. nello stage di Nobunaga ci starebbe come un cavolo a merenda, visto che si vede che il pavimento non deve essere riflettente) basta impostare il valore di reflect a 0.

[Music]
bgmusic = sound/casa.mp3
bgvolume = 255


Bhe, mi pare chiaro. Qui si dice quale musica va suonata quando si utilizza il nostro stage. Nell'esempio ipotizziamo di avere un file "casa.mp3" e di averlo copiato nella sotto-cartella "sound" del nostro mugen.
É infatti una buona pratica raccogliere le musiche nella cartella "sound" del Mugen
bgvolume è il volume della musica (valore massimo: 255). Visto che il Mugen abbassa di molto il volume tendenzialmente consiglio il valore massimo (255).

[BGdef]
spr = casa.sff
debugbg = 1


Qui termina la prima parte del file .DEF dei parametri generali. Dopo questa sezione comincia la seconda parte dello stage, quella dei layers.
In BGdef troviamo due parametri.

Il primo serve per sapere come si chiama il file .sff (su cui ci soffermeremo tra poco) che contiene le immagini dello stage (nel nostro caso il file .sff conterrà UNA SOLA IMMAGINE, grande 400x300 pixel e con disegnata una casa con alberi).

Noi il file .sff non l'abbiamo ancora creato ma sappiamo già che si chiamerà "casa.sff" quindi intanto completiamo il parametro.

La riga debugbg = 1 e' IMPORTANTISSIMA in questa fase di realizzazione dello stage. Infatti essa permette di sostituire gli eventuali "pezzi vuoti di stage" con dei pixel di colore rosa. Questo ci permetterà di individuare facilmente la presenza di eventuali "buchi" (che NON DEVONO esserci) nello stage. Una volta che lo stage è DEFINITIVAMENTE terminato e che siamo SICURI che non vi siano "buchi" e che tutto è a posto, possiamo tranquillamente ELIMINARE questa riga (disattivando la relativa funzione ed alleggerendo quindi il caricamento del nostro stage). Ora, in uno stage come il nostro (fatto di una sola immagine) è più difficile che ci sia una eventualità del genere, ma in stage più complessi può diventare vitale poter verificare subito ed in maniera immediata se sono rimasti o meno dei "buchi".

#----

Ora manca solo di programmare il nostro layer e di fare il nostro file .sff
Dobbiamo però occuparci prima del file .sff
Salviamo quindi le nostre modifiche e creiamo il nostro file .sff
Io spiego il metodo con Fighter Factory perché è più semplice per i neofiti, ma personalmente (poiché come vedremo sapremo già ESATTAMENTE come posizionare gli assi) io di solito utilizzo direttamente sprmaker perché ci vuole decisamente meno tempo.

Per creare il file .sff abbiamo bisogno della immagine della casa (deve essere in formato .PCX a 256 colori o, solo se usiamo Fighter Factory, può essere anche in formato .BMP a 256 colori) Ipotizziamo di avere quindi l'immagine "casa.pcx" grande 400x300 pixel.

Apriamo Fighter Factory -> andiamo nella sezione .SFF
Qui scegliamo di creare un nuovo file .SFF che chiamiamo "casa.sff"
Aggiungiamo l'immagine "casa.pcx" al gruppo 0, immagine 0 (palette individuale).
Posizioniamo l'immagine "casa.pcx" alle coordinate 200, 60 impostando direttamente i parametri degli assi, senza usare il mouse per far scorrere l'immagine.
Salviamo il file .sff

Non vi allarmate: ora vi spiego come si arriva a determinare che il disegno della casa debba essere posizionato ai valori 200, 60.

Se avete seguito il metodo fino a qui avrete capito che noi ci stiamo basando sulla dimensione dello schermo del Mugen (320x240) e sulla dimensione della immagine (400x300). Sappiamo (anche se non l'ho detto, ma non era indispensabile dirvelo avendovi dato io le formule di calcolo già pronte) che lo stage va messo "in mezzo" in maniera tale da poter essere "scorso" sia a destra che a sinistra. Sapendo queste informazioni, così come abbiamo potuto prima calcolare (nel .DEF) i valori di boundleft, boundright e boundhigh, ora possiamo calcolare la posizione degli assi nel file .sff
Qui sotto i valori per determinare i valori dell'asse x e dell'asse y da adottare nel file .sff quando si inserisce l'immagine principale dello sfondo dello stage


SFF: asse x = LUNGHEZZA_IMMAGINE / 2
SFF: asse y = ALTEZZA_IMMAGINE - 240


asse x = 400 / 2 = 200
asse y = 300 - 240 = 60

Ecco quindi perché la coordinata per l'asse x avrà valore di 200 e la coordinata per l'asse y avrà valore di 60.

Ora abbiamo salvato il file .sff e sappiamo che la nostra immagine è stata salvata come immagine 0,0 (numero gruppo, numero immagine).
Come sappiamo (e se non lo sapete datevi una occhiata ai tutorial Mugen) nel file SFF ogni immagine viene individuata NON da un nome di file, ma da una coppia unica di valori (in questo caso 0,0). Negli stage la scelta dei gruppi e dei numeri immagini è del tutto libera, ma si consiglia di utilizzare un gruppo per ogni diverso layer e una numerazione progressiva dei numeri immagine. In tal caso ci sarà più ordine.

Se ad esempio il nostro stage fosse composto da 3 layer (es. l'immagine "principale" dello stage, le nuvole e i lampi) ognuno dei quali risultasse essere una animazione composta da 3 immagini, sarebbe stata buona norma usare:
- un gruppo per l'immagine "principale" (es. gruppo 1)
- un gruppo per le nuvole (es. gruppo 2)
- un gruppo per i lampi (es. gruppo 3).
e quindi le immagini 1,1 1,2 e 1,3 saranno i 3 frames del primo layer (immagine principale)
le immagini 2,1 2,2 e 2,3 saranno i 3 frames del secondo layer (nuvole)
le immagine 3,1 3,2 e 3,3 saranno i 3 frames del terzo layer (lampi)

#------

Ma ora torniamo al nostro esempio di partenza.
Abbiamo completato la prima parte del file .def (fino a [BGdef] compreso), abbiamo pronto il file .sff (casa.sff) il quale contiene il disegno della casa e memorizzata nell'sff come immagine 0,0.

Dobbiamo ora inserire ora i layer. Questo nostro stage è fatto di una sola immagine (la casa) che racchiude tutti gli elementi dello stage. Abbiamo quindi un unico layer da programmare.

Riapriamo quindi il file .def e lo scorriamo fino alla fine delle istruzioni [BGdef].
Come vedete, subito dopo le righe [BGdef] abbiamo un sacco di istruzioni che iniziano con [BG qualcosa], ognuna delle quali rappresenta un layer dello stage che abbiamo usato come base di programmazione (quindi sono i layer che appartenevano allo stage di KFM).

Tutta questa roba, quindi, con il nostro stage non c'entra nulla. Ora dobbiamo inserire i nostri layer (nel nostro caso IL nostro layer).

Cancelliamo quindi TUTTE le istruzioni seguenti a [BGdef] e i suoi due parametri (spr e debugbg).

Una volta fatto questo aggiungiamo il nostro layer, che nello specifico sarà programmato così

[BG Casa]
type = normal
start = 0,0
spriteno = 0,0
mask = 0
delta = 1,1
layerno = 0


Salviamo il file .def ed il nostro stage sarà pronto.

Ci occuperemo più a fondo di cosa sono i layer e di come si programmano nella seconda parte del tutorial. Ora ci limiteremo a spiegare brevemente cosa abbiamo scritto.

[BG Casa]

Ogni layer inizia con una etichetta [BG qualcosa] dove "qualcosa" può essere qualunque stringa o anche un numero progressivo (es. [BG 0]). Non importa cosa si scrive esattamente al posto di "qualcosa"... Generalmente consiglio di scrivere una cosa che faccia capire a noi cosa stiamo disegnando con una descrizione breve, ma non è assolutamente un obbligo. Diciamo solo che il mio consiglio è finalizzato ad individuare più facilmente i punti che possano necessitare di correzioni in fase di prova.

type = normal
Il nostro layer è costituito da una sola immagine fissa. Quindi è un layer "normal" (un solo disegno fisso). Sui tipi di layer ci soffermeremo nella seconda parte del tutorial.

start = 0,0
La nostra immagine che "copre" tutta l'area dello stage, determinandolo, l'abbiamo già accuratamente posizionata calcolando gli assi nell'SFF. Quindi non abbiamo bisogno di fare ulteriori spostamenti. Il parametro "start" serve per sapere dove posizionare il disegno rispetto agli assi SFF. In questo caso non abbiamo bisogno di spostamenti ulteriori, quindi lo mettiamo a 0,0. In altri casi, per stage complessi composti da più layers, invece, sarà necessario per alcuni layer andare a tentativi per un perfetto posizionamento e quindi bisogna provare fino a quando non si arriva al valore di start che ci serve. Non è però il nostro caso.

spriteno = 0,0
Il nostro layer è fatto di una sola immagine che, nel file SFF, abbiamo salvato come immagine 0,0. Quindi settiamo spriteno (che richiama una singola immagine) con la coppia di valori che individua l'immagine nell'sff (nel nostro caso l'abbiamo salvata come immagine 0,0 e quindi mettiamo 0,0).

delta = 1,1
questo dice la velocità di scorrimento. 1,1 significa che la velocità è di un 1 pixel in lunghezza e 1 pixel in larghezza per ogni pixel di spostamento dei char (in poche parole va di pari passo con i personaggi).
Generalmente i layer a velocità normale vengono settati sempre con delta = 1,1.
Di norma layer che richiedono una velocità diversa possono essere ad esempio i layer in secondo piano (che sono più lenti) o quelli in primo piano (che sono più veloci) quando si vuole dare una sorta di impressione di visione prospettica.

layerno = 0
Negli stage questo può assumere il valore di 0 se il layer (come in questo caso) deve stare dietro al char. Invece va impostato ad 1 se il layer deve stare davanti al char (es. una colonna su cui i chars devono "passare dietro" quando la attraversano).

mask = 0
Serve per disegnare anche il colore 0 che normalmente non andrebbe disegnato. In questo caso l'abbiamo messo a 0, ma nella normalità dei casi andrà messo ad 1. NOTA: questo parametro ha effetto solo sui layer fissi e non sulle animazioni.

#-----

FINE PRIMA PARTE.

Note: Le formule che vi ho dato me le sono ricavate da me e sono state "verificate sul campo" dal sottoscritto ;)
0

#2 L   Nobun 

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

Inviato 10 April 2009 - 20:48

Tutorial Stage - Parte II:
Livello: 3/10

Pre-requisiti:
- sapere come è fatta una animazione AIR
- aver letto ed assimilato la prima parte del tutorial
- leggere anche il tutorial ufficiale "bgs" (questa seconda parte risulta molto carente se paragonata alla prima. Questo perché il tutorial "bgs" risulta molto chiaro ed esplicativo e non necessita ulteriori ripetizioni).

Consigliato:
- Avere gli stage di Nobunaga (NobunPal) e KingLion (LionPal)

Cosa tratteremo:
- Cosa sono i layer (con l'esempio pratico dello stage di Nobunaga)
- Una breve spiegazione sui vari tipi di layer e le loro caratteristiche generali
- alcune cose che NON troverete nel tutorial ufficiale bgs (tipo come mettere nell'ordine corretto i layers)
- verrà approfondito il layer "dummy" (su cui le informazioni nel tutorial "bgs" sono scarne e non aiutano bene a capirlo)
- un breve rinvio ai BGCtrl (controlli avanzati dei layers)

Questa seconda parte sarà molto più breve e molto meno analitica della prima, essendoci un tutorial apposta del Mugen (il tutorial "bgs") a cui rinvia. In particolare il tutorial "bgs" (si trova nella cartella "docs" del vostro Mugen) ci spiega i vari parametri disponibili (base e avanzati) per i vari tipi di layer. Del tutorial "bgs" vi rinvio alla lettura solo di parte di esso, e precisamente la parte III (che descrive i parametri disponibili per i vari tipi di layer) e la parte IV (sui controlli avanzati BGCtrl che, nella maggior parte dei casi, NON vi serviranno).

----

Dopo aver compilato la prima parte del nostro .def, dobbiamo programmare tutti i layer che lo compongono. Nella maggior parte dei casi il nostro stage sarà composto di più layers e non di un unico layer come nell'esempio che vi ho fatto nella prima parte. Per farvi capire cosa è un layer e perché spesso servono più layers (ovvero più livelli di disegno) vi porto l'esempio dello stage di Nobunaga.
Se guardate lo stage di Nobunaga, esso è così composto


1 Layer: è lo sfondo generale (il pavimento che si illumina, la mega-statua etc) ed è una animazione composta da 8 frames che ha una sua velocità

2 Layers: sono le state a forma di (testa di leone?) che si trovano ai due lati dello stage (uno a destra in un senso, uno a sinistra nell'altro senso). Queste statue sono formate da soli 4 frames (non da 8 come il pavimento) e la loro velocità di illuminazione è diversa dal pavimento (più veloce). Ecco perché sono "separati" dal contesto... hanno una sincronizzazione diversa e quindi sono disegni a parte

1 Layer: i fulmini che ogni tanto appaiono nel cilindrone: anche loro (perché non risultino noiosi) hanno una loro tempistica che non coincide con quella di tutti gli altri layers e sono formati da vari frames.

Vary Layers: le "candele in primo piano". Qui le "candele" sono davanti a noi, e i personaggi devono passarci "dietro". Quindi devono stare per conto loro (senza contare che anche loro hanno una tempistica autonoma). In questo caso la stessa animazione (le candele sono tra loro uguali) viene utilizzata per più volte per formare diversi layers (uno per candela).

2 Layers: quelli che ho chiamato i "pioli" e che sono nella stessa linea delle "candele". Anch'essi sono in primo piano, ma sono statici.


Per ottenere tutti gli effetti desiderati non sarebbe stato possibile ricorrere ad un'unica immagine o animazione, perché ogni elemento ha una propria tempistica autonoma, slegata da quella degli altri elementi (i motivi possono essere anche diversi, ma cerco di farvi capire alcune delle ragioni che portano ad usare più animazioni).

Ognuna delle cose che vi ho descritto, (ogni oggetto) è un layer. Ci sono due piani per i layer. Ciò che sta davanti ai char (layerno = 1: in NobunPal sono i pioli e le candele su cui i personaggi "passano dietro") e ciò che sta dietro ai char (layerno = 0: tutto il resto).

La prima domanda è: come far sì che tutto appaia corretto? (ovvero che lo sfondo stia sotto tutto, mentre i fulmini e le statue vengano disegnati sopra?) Se infatti lo sfondo avesse priorità maggiore, esso coprirebbe tutti gli altri elementi (statue e fumini) che invece devono stargli sopra e apparire anch'essi. Sono tutti layer con layerno = 0 e non abbiamo altri parametri per settare le priorità. Come fare?

Molto semplice, vanno messi - nell'ordine - PRIMA i layer che devono stare "sotto" e poi quelli che devono stare "sopra" (quindi lo sfondo principale viene messo come primo comando, poi seguono le statue che devono essere messe sopra lo sfondo principale, idem per i fulmini).

Quindi ricordatevi questa regola: prima vanno programmati i layer che devono avere minore priorità (nel nostro sfondo) e poi i vari layer che si devono porre in priorità maggiore (quelli che "stanno sopra")

------

Chiarita questa cosa, dovremmo aver capito cosa è un layer (un disegno fisso o una animazione che fa parte dello stage) e l'ordine corretto in cui vanno messi (prima i layerno = 0. Di questi vanno messi prima quelli che "stanno sotto" e poi quelli che si devono "sovrapporre" in ordine di priorità).
(dopo di che i layer di tipo layerno = 1. Anche qui stesso principio enunciato sopra).

Ora analizziamo brevemente i vari tipi di layer.
Esistono 4 tipi di layer:
normal, anim, parallax, dummy.

I layer parallax consiglio di lasciarli perdere: non servono praticamente a nulla e sono terribilmente brutti. Si utilizzano in prevalenza i layers normal e parallax. (per ora tralasciamo il layer dummy che è un caso particolare).

type = normal

Il layer normal (che abbiamo usato nella prima parte del tutorial) "disegna" uno sprite fisso. Nello stage di Nobunaga viene utilizzato per i pioli (che sono sempre uguali a se stessi). Il disegno da mostrare è determinato dal parametro spriteno = x, y (dove x e y sono i valori SFF che individuano lo sprite). Il layer normal ha anche un parametro mask che se messo a 0 farà sì che venga disegnato anche il colore dello sfondo (colore 0) normalmente utilizzato per le parti da non disegnare.
Per gli altri parametri si rinvia al tutorial bgs

type = anim

Il layer anim invece mostra una animazione. Nello stage di Nobunaga viene usato per moltissimi layer es. i fulmini nel cilindrone che ogni tanto appaiono sono una animazione). L'animazione da mostrare viene decisa dal parametro actionno = x (dove x è il valore di una animazione che deve poi essere programmata all'interno del nostro .DEF dello stage).
Se ad esempio mettiamo actionno = 1 il nostro stage dovrà definire l'animazione 1 all'interno del .DEF come mostrato in questo esempio dimostrativo:

;un esempio di animazione
[Begin Action 1];viene definita l'animazione 1
1,1, 0,0, 4
1,2, 0,0, 4
1,3, 0,0, 4
1,4, 0,0, 4


Ovviamente la vostra animazione potrebbe essere molto più lunga o molto diversa.

Il parametro "mask" qui non ha effetto, perché nelle animazioni lo sfondo non viene MAI disegnato.
Per gli altri parametri e le altre funzioni si rinvia al tutorial "bgs"

------------------

Alla fine il nostro stage sarà un insieme di layers (normali o animati) che comporranno lo scenario complessivo. Personalmente suggerisco (vedete il file .DEF dello stage di Nobunaga) di tenere separati, da una parte, i layers, e dall'altra la definizione delle animazioni necessarie per i layer animati (io metto un ;---------- per separare i layer dalle animazioni e metto le animazioni in ordine numerico). In tal modo il tutto viene più ordinato e semplice da leggere.

-------------------

E il layer dummy? vi chiederete. Perché non l'abbiamo scartato come il parallax?
Perché il layer dummy ha una funzione e un impiego molto particolare: serve per impostare l'oscillazione della linea di suolo.

Questo serve solo se vogliamo programmare uno stage stile "imbarcazione", dove la nostra barca sarà mossa sopra e sotto dalle onde del mare. Di conseguenza anche la linea di suolo su cui i nostri eroi poggiano i piedi deve oscillare in sincronia con il movimento della barca (andando in alto ed in basso).

Il layer dummy potete posizionarlo dove vi pare (NON ha alcun disegno NE' alcuna animazione. Serve per determinare come oscillerà la linea di suolo). Ecco come va usato il layer dummy (attenzione: le seguenti righe non sono da me state testate e quindi potrebbero essere necessarie modifiche):

[BG Oscillazione della linea di suolo]
type = dummy
id = 1
sin.y = 4.5, 6.0, 0


Quando usiamo il layer dummy è FONDAMENTALE inserire un id che non sia stato utilizzato da nessun altro layer (nel mio esempio ho messo id=1 ma potete mettere il valore che preferite).
Nel layer dummy dobbiamo programmare l'oscillazione. I movimenti periodici (come le oscillazioni) sono movimenti sinusoidali e vengono dati da sin.x (per l'asse x) e sin.y (per l'asse y).
Normalmente il movimento della barca sarà un movimento che andrà dall'alto in basso e viceversa, quindi tendenzialmente ci servirà solo il parametro sin.y
Sin.y, come vediamo, ha 3 parametri separati da una virgola:
Il primo determina l'ampiezza (di quanto si sposta verso l'alto e verso il basso rispetto al punto centrale del movimento), il secondo la velocità di "galleggiamento" (in tick di tempo), il terzo parametro ci dice la posizione di partenza (normalmente 0 = al punto centrale rispetto al moto di galleggiamento).

Bisogna cambiare questi parametri fino a che non si trova la combinazione ideale.

ATTENZIONE NON ABBIAMO FINITO.
Se lasciamo le cose come stanno il layer dummy non ha alcun effetto. Perché la linea di suolo segua sul serio il movimento (sinusoidale) di galleggiamento determinato dal layer dummy dobbiamo aggiungere ancora una riga.
Dobbiamo "tornare indietro" nel nostro .def e ritornare alla sezione [StageInfo].
La sezione StageInfo, normalmente contiene 3 parametri: zoffset, autoturn e resetbg.
Quando dobbiamo determinare un galleggiamento, determinato da un layer dummy, dobbiamo aggiungere un quarto parametro

zoffsetlink = ID
Dove l'ID è il valore di "id" del layer dummy (nel nostro esempio al posto di ID scriveremo 1).

COME VERRA' interpretato il tutto:
il valore "zoffset" rappresenterà il punto centrale del galleggiamento. La parte più alta e più bassa dell'oscillazione invece dipenderà da come abbiamo settato sin.y nel layer dummy. La linea di suolo "seguirà" i movimenti del layer dummy facendo sì che i nostri eroi poggieranno sempre a terra seguendo il moto ondulatorio della barca.

COME HO DETTO TUTTO CIO' NON E' STATO TESTATO. POTREBBERO ESSERE NECESSARIE ULTERIORI ACCORTEZZE. SE DECIDETE DI PROVARLO ED AVETE COSE DA SEGNALARMI (es. omissioni) FATEMELO SAPERE RISPONDENDO IN QUESTA DISCUSSIONE

-----

I BgCtrl (sez. IV tutotial bgs) si usano in casi rari e tendenzialmente non servono. Si usano quando è necessario ricorrere a degli effetti particolari. L'unico mio stage che fa ricorso ai BgCtrl è quello di KingLion. Se avete mai usato quello stage avrete notato che, quando lo stage diventa scuro appaiono dietro alle finestre, delle nuvole che scorrono. Questo effetto è determinato dai BgCtrl. Infatti il layer delle nuvole che stanno dietro la finestra viene disabilitato quando il palazzo è chiaro, mentre viene riabilitato quando il palazzo è scuro per la caduta di un lampo. Questa abilitazione/disabilitazione viene fatta tramite i BgCtrl.
Per maggiori dettagli guardate il tutorial "bgs"

-------

Considerazioni finali:

1) Nella prima parte abbiamo visto come si centra il disegno principale dello stage (tramite un calcolo). come vedete, nello stage di Nobunaga, lo sfondo è centrato con quello stesso calcolo, ma gli altri layer no. Ecco come ho centrato gli altri.

SFF:
Le statue: Per comodità le ho messe a 0,0 - notando che - scorrendo le immagini nell'SFF - l'animazione veniva bene
Le candele: come vedete le ho centrate "al centro" e "sui piedi" della candela. In tal modo, scorrendo le immagini, vedevo che l'animazione veniva mostrata correttamente, mentre utilizzando altri punti di riferimento no.
I fulmini: ho usato un criterio simile a quello dello sfondo centrale (ma non lo spiego che ci sto troppo).

Come vedete, quindi, i vari layer possono necessitare un posizionamento particolare. Nel caso specifico, per sapere come centrare le candele, ho dovuto utilizzare MCM (ma ancora meglio è usare Fighter Factory: all'epoca non esisteva)


2) I valori di scorrimento delta (spiegato nella prima parte del tutorial) sono sempre stati = 1,1 tranne che per le candele in primo piano che sono più veloci (quindi hanno un valore maggiore per dare un effetto di prospettiva). Cambiando "delta" anche il posizionamento ne risente (vedete i valori "start" delle candele e dei pioli - tali valori sono stati ricavati andando a tentativi).
0

#3 L   matt_ 

  • Chan
  • Punto
  • Gruppo: Membro
  • Messaggi: 96
  • Iscritto: 01-August 08

Inviato 11 April 2009 - 10:37

Complimenti, hai una capacità espositiva formidabile. Come tutorial è molto semplice da capire, naturalmente per chi come hai detto tu conosce un minimo di basi. Non avevo mai creato stage prima di adesso e seguendo il tuo tutorial ne ho creato uno per la prima volta in soli 15 minuti. Grazie mille e complimenti ancora.
0

#4 L   Nobun 

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

Inviato 12 April 2009 - 00:17

Ti ringrazio per il commento sulla prima parte del tutorial. Ora ho scritto anche la seconda parte. E' molto "tirata via" perché tutte le altre informazioni che non ho messo (che forse sono il cuore della programmazione dei layer) si capiscono facilmente leggendo il tutorial "bgs".
Mi sono limitato a dare un inquadramento generale e spiegare meglio quelle poche cose che nel tutorial "bgs" o NON vengono spiegate (tipo l'ordine dei layers) o sono spiegate in maniera difficilmente comprensibile (tipo come si usa il layer dummy su cui non a caso mi sono soffermato più a lungo - anche se con qualche riserva visto che ciò che ho scritto non è stato del tutto testato. Potrebbe essere necessario, in particolare, specificare il parametro "start" anche per il layer dummy. Non avendo mai testato un tale codice non posso dare garanzie al 100%, ma dovrebbe in linea di massima essere giusto).
0

#5 L   Squall LionHeart™ 

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

Inviato 12 April 2009 - 12:03

Davvero ben fatto, Nobun, complimenti vivissimi :D un tutorial completo sulla programmazione di stages mancava davvero, per coloro i quali approcciano per la prima volta a questo tipo di programmazione :D

ancora complimenti

Saluti

Squall
0

#6 L   kirby_p-chan 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 413
  • Iscritto: 19-August 08

Inviato 12 April 2009 - 23:10

Un tutorial così completo e ben chiaro ci voleva.
Complimenti, quando ho tempo proverò ad eseguirlo. ;)
0

#7 L   williamwilson 

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

Inviato 15 April 2009 - 16:49

come funziona il discorso trasparenza in uno stage?
0

#8 L   Nobun 

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

Inviato 15 April 2009 - 17:11

Le trasparenze devono essere programmate tramite le animazioni. Consultare il tutorial AIR.txt per maggiori dettagli.

es:

[BG layer con trasparenze]
type = anim
actionno = 1
start = 0,0
delta = 1,1
layerno = 0

[Begin Action 1]
1,0, 0,0, 3, , A1 ;-> con A1 si applica una trasparenza; per le altre trasparenze vedere tutorial AIR.txt

---

E' una cosa che non ho spiegato perché non è tecnicamente inerente agli stage, ma alle animazioni (che devono essere conosciute prima di affrontare uno stage).
0

#9 L   Squall LionHeart™ 

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

Inviato 15 April 2009 - 22:24

Se invece intendevi (scusa se mi intrometto, Nobun) la trasparenza dello sfondo, quello funziona come nei chars. cioé è i colore posizionato per utilmo nella paletta ;)

Saluti

Squall
0

#10 L   demongorne 

  • Senpai
  • PuntoPuntoPunto
  • Gruppo: Membro
  • Messaggi: 533
  • Iscritto: 07-November 06

Inviato 21 April 2009 - 14:40

Ottimo tutorial nn se ne potrebbe aprire uno anke sulla creazione (o l'edit)dei lifebar?
ho dei life bar cvs pro x la vekkia versione mugen e cosi vorrei editarlne una x winmugen
0

#11 L   Nobun 

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

Inviato 13 May 2009 - 22:22

Non so come dovrei leggere questo commento... O_o

Comunque si.... il mondo del Mugen l'ho abbandonato, ma era un tutorial che dovevo scrivere da parecchio tempo e appena ho avuto un attimo libero l'ho scritto.

Così come scriverò un (breve) tutorial su come correggere i font che non si vedono.

Prossimamente pubblicherò un mio vecchio tutorial sulla programmazione, MAI pubblicato perché MOLTO incompleto (progetto mastodontico nelle intenzioni) ma non ho tempo di scrivere oltre. I membri speciali l'hanno visto in anteprima.

Devo però riuscire a trovarlo...
0

#12 L   Squall LionHeart™ 

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

Inviato 14 May 2009 - 13:23

asd io non sono membro speciale, ma ne ho avuto l'onore :D

Saluti

Squall
0

#13 L   Squall LionHeart™ 

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

Inviato 15 June 2009 - 23:51

Nobun ho notato che nel tuo tutorial manca un punto, che non so se è regolabile o meno, quindi chiedo :P

ho programmato uno stage basso. è tipo una caverna, quindi mi serve che i chars oltre una certa altezza non possano andare (tipo devono "tozzare" sotto il soffitto).

come impostare l'altezza massima dello stage? io riesco a impostare lo spostamento della telecamera in alto, ma non l'ampiezza effettiva dello stage (poi, volando i miei chars, scompaiono proprio dallo schermo).

come fare?

grazie per l'eventuale rispsota :)

Saluti

Squall
0

#14 L   Squall LionHeart™ 

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

Inviato 22 June 2009 - 23:13

Uppo questo topic, perché sono passati 3 giorni dal mio ultimo post.

ritengo che per cause straneXD nobun non abbia visto il mio post, e purtroppo sono un pò a stretto di tempo, quindi non posso aspettare più di tanto per la risposta XD sperando che in fine settimana nobun veda il topi XD

Saluti

Squall
0

#15 L   SlayerGatsu 

  • Sensei. Squadra dei Falchi
  • PuntoPuntoPuntoPunto
  • Gruppo: Membro
  • Messaggi: 5545
  • Iscritto: 26-December 04

Inviato 24 June 2009 - 14:24

squall ci sta' un opzione per l'altezza dello stage tra quelle che dicono di NON cambiare...
nn ricordo quale e', devi giocare con i valori finche nn lo trovi.

se nn e' cosi' allora mi pare che boundhigh possa farlo, basta settarlo a tipo 30 e mi pare che sia circa meta schermo ?
prova con quello...

Nobun ha da fare ripassa in settimana B)
0

#16 L   Squall LionHeart™ 

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

Inviato 24 June 2009 - 14:27

proverò, grazie ;)



EDIT: niente da fare. l'univco valore che poteva servirmi era Topbound. ma è settato a 0, e nessuna modifica che possa applicargli modifica lo stato dello stage in gioco. ho provato sia con numeri negativi che con positivi. piccoli ed enormi.

boundhigh, invece, setta solo la telecamera. i miei chars volano, quindi non mi importa che non segue, mi importa che oltre tot spazio debbano "cozzare". lo stage è una sorta di caverna, quindi dev'essere impossibile oltrepassare quella linea.

Saluti

Squall
0

#17 L   SlayerGatsu 

  • Sensei. Squadra dei Falchi
  • PuntoPuntoPuntoPunto
  • Gruppo: Membro
  • Messaggi: 5545
  • Iscritto: 26-December 04

Inviato 24 June 2009 - 21:12

Scusa ma essendo all'interno di un gico completo...
programma l'interazione per ogni char con lo stage e aggiungila come prerequisito falso per il trigger del volo...
e' molto + complicato che trovare il valore giusto, MA e' molto + istruttivo :P
se ti serve sapere come si fa chiedi :)


Per fare i liveli multipli si usa questo parametro...

zoffsetlink = BG_ID ;(optional)

If this parameter is specified, it links the zoffset value to the y-position of a background element with ID number BG_ID. For example, you can link the value to a dummy element (refer to "Other background element types" in section III: Description of background elements) with a sin.y parameter to make the characters bob up and down in a sinusoidal fashion.

Notare anche questa nota...

A dummy element's position is affected just like any other element type. Currently, the only use for a dummy element is to serve as a placeholder for the effect of the "zoffsetlink" parameter in [StageInfo] of the stage settings.

-- Il sopra citato va modificato per fare 2 piani differenti, Ma in teoria permette all pavimento di vibrare con I chars attaccati sopra, "Sinusoidal" significa come un onda... ed e' la teoria dell' oscillazione...
ma nn vi serve di sapere cio', solo di trovare come usarlo :P



--- ora continuo a guardare per sqallido :P --

Ok, lunica cosa STRANA che ho notato e' questa...

Quote

;========================================================
;--------------------------------------------------------
; Background definition
; ***
;-------------------------------------
; [BG x]
; type = ? "Normal"/"Parallax"/"Height" (def: "normal")


dice che "Height" e' un parametro valido, ma non trovo l'uso da nessuna parte...
pero' potrebbe essere quello che ti serve a te, O quello che serve agli altri per fare i livelli differenti...

ad ogni modo, dopo questa rapida scansione, ti conviene fare come ho detto e far interagire gli stage con tutti i chars...
0

#18 L   Nobun 

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

Inviato 24 June 2009 - 22:41

Scusa la tua domanda non l'avevo vista.
Allora, non mi pare di aver dimenticato nessun parametro. Vado a memoria perché non voglio farti attendere troppo una risposta.

Allora MI SEMBRA che, all'interno di uno stage, non sia contemplato l'effetto che tu vuoi realizzare (che non sia possibile superare per i char una certa altezza dello stage quando non c'è uno scrolling dello stage.

Insomma, non credo si possa fare un effetto tipo "sbattere la testa sul soffitto" per intenderci

Però, visto che il tuo stage è una caverna, posso suggerirti di mettere la parte alta della grotta (le stalagmiti) a layerno = 1. In questo modo i personaggi ci passeranno "dietro", dando in questo modo maggiormente l'impressione di essere all'interno di una grotta.

----

Detto questo non escludo sia possibile fare qualcosa a livello CNS come suggerito da Slay... io sono però più per le soluzioni semplici e "codarde" :rotfl: :rotfl: :rotfl:
0

#19 L   cloud_strife94 

  • Kohai
  • PuntoPunto
  • Gruppo: Membro
  • Messaggi: 233
  • Iscritto: 11-July 08

Inviato 25 June 2009 - 09:42

Visualizza Messaggimax-ryu, su May 13 2009, 21:57, detto:

NON AVEVI ABBANDONATO IL MONDO DEL MUGEN? DIO POVEROOOOOOOOOOOO!!!!!!!!!!!!!

"il mondo del mugen" non il forum :rotfl:
è diversa la situazione ;)
0

#20 L   Squall LionHeart™ 

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

Inviato 25 June 2009 - 13:20

Ok, grazie ad entrambi per le risposte ;)

@ Slayer: si, so farlo, non c'è problema ;)

@ Nobun: dovrei vedere di trovarle queste stalagmiti XD comunque, grazie lo stesso :)

Saluti

Squall
0

Condividi questa discussione:


  • 2 Pagine +
  • 1
  • 2
  • 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