» » » Guida all’uso avanzato delle variabili integrato a Plugin e Call Script (Rpg Maker MV)

Guida all’uso avanzato delle variabili integrato a Plugin e Call Script (Rpg Maker MV)

Guida all’uso avanzato delle variabili integrato a plugin e call script

Ciao ragazzi, oggi vorrei parlare un po’ con voi delle variabili e della loro potenza! 😀

Come sappiamo, le variabili sono uno degli elementi fondamentali per creare un videogioco, se non il più importante.
Con le variabili si può decidere e cambiare tutto, se sappiamo usarle in modo intelligente.
Sono anche più toste delle switch, tant’è che una switch è semplicemente una variabile che può settare i suoi valori solo su 0 e 1.
Nelle variabili, invece, possiamo memorizzare numeri positivi, numeri negativi, addirittura stringhe. E per ogni valore assegnare una condizione diversa.
Tutti i trucchetti che pubblicherò in questo post potrebbero sembrarvi cose banali, qualcuno magari lo conoscete già anche voi, ma io ci sono arrivato man mano strada facendo… e mi piacerebbe condividere tutto con voi, sperando di dare una mano a chi magari ancora non si è accorto di che strumento potente ha fra le mani.
Cominciamo!

  • Variabili per gestire il pg che parla

Uno dei momenti in cui mi è stato molto utile l’utilizzo delle variabili è per gestire il personaggio che sta parlando. In Our Hero! Hyper Sword infatti il personaggio che sta parlando, durante un dialogo, ha il suo movimento che apre e chiude la bocca, proprio per far vedere che è lui che parla!
Ecco come avrei fatto una volta:
img1.png

Ogni volta che un personaggio parlava modificavo il suo movimento, cambio di grafica (con la bocca) e animazione della camminata ON; lo stesso quando finiva il suo intervento, cambio di grafica (normale) e animazione della camminata OFF, così tornava a starsi fermo.
Capite bene che in questo modo veniva una pagina di eventi infinitamente lunga e non ci si capiva più nulla. Per ogni personaggio partecipante al dialogo, ad ogni suo messaggio un cambio grafica all’inizio e un cambio grafica alla fine!
Ecco come l’ho fatto diventare:
img2.png

Decisamente più pulito! Com’è possibile?

img3.png

Mi è bastato utilizzare una variabile (in questo caso Parla pg) per decidere quale personaggio per un certo messaggio deve cominciare a muoversi (e quindi sta parlando) assegnando ad ogni personaggio un valore differente.
A questo soldato corrisponde il valore 1, quindi, quando la variabile è settata su 1, lui comincerà a muoversi e, quando la variabile assumerà un qualsiasi altro valore diverso da 1, il soldato smetterà di muoversi (il tutto funziona perché ogni personaggio è settato su “Processo parallelo” per adeguarsi al cambio di valore della variabile).
Per l’eroe invece ho agito in modo diverso, ovvero chiamando un evento comune al momento del suo messaggio e richiamando lo stesso evento alla fine del messaggio:
img4.png

Una switch permette di variare il comportamento dell’evento comune ogni volta che lo si chiama.

  • Variabili per gestire le stringhe (plugin)

Ora passiamo ad un argomento più interessante: assegnare alle variabili delle stringhe!
Lo sapevate? Una variabile non può contenere soltanto numeri, ma anche lettere, parole, o intere frasi! Fantastico per gestire nomi di personaggi, di oggetti, di armi, o qualsiasi altra cosa che, col tempo, potrebbe venirci in mente di modificare.
Il Call Script per assegnare ad una variabile una stringa è infatti questo:

$gameVariables.setValue(1, "Ciao!");

Tra le parentesi: il numero 1 corrisponde all’ID della variabile a cui ci stiamo riferendo, mentre “Ciao!” è il “valore” che la nostra variabile di riferimento andrà ad assumere.
Ricordiamoci che per memorizzare una stringa in una variabile dovremo mettere tutta la stringa fra le “virgolette”. Per memorizzare un qualsiasi numero invece le virgolette andranno tolte:

$gameVariables.setValue(1, 52);

In quest’ultimo esempio la variabile 1 ha assunto il valore “52”.
Tutto molto bello, ma…
Se integrassimo questa funzione ad un potente plugin? Come, ad esempio, lo Iavra Localization?
Lo Iavra Localization permette di gestire tutti i testi del nostro gioco in un file .js esterno: messaggi, oggetti del database, nomi dei personaggi, elementi di sistema… tutto gestito esternamente e in un unico file, così da poter essere modificato dinamicamente in qualsiasi momento in tutto il gioco, solo in un istante! Perfetto per creare giochi multilingua e non solo.
Infatti ,il nostro messaggio di prima, da così:
img2.png

è diventato così:
img6.png

Un codice che richiamerà la corrispondente stringa dal file unico.
Allo stesso modo possiamo gestire le voci dei menu (Nuovo gioco, Continua…) o anche i nomi dei personaggi, richiamandoli tramite codice all’occorrenza. Richiamando il codice (e non un testo statico) qualsiasi nome potrà essere modificato una sola volta dal file unico ed averlo così modificato in qualsiasi punto del nostro gioco in cui avremo fatto riferimento ad esso tramite il codice!
Per ogni lingua (supportata dal nostro gioco) creeremo un file unico, dove gli stessi codici richiameranno stringhe differenti a seconda della lingua selezionata.

  • Variabili per gestire hud su schermo (plugin)

Questo trucco utilizza due plugin molto potenti: lo Iavra Localization e l’Orange Hud.
Cosa fa l’Orange Hud? Questo plugin permette di mostrare su schermo qualsiasi variabile, in qualsiasi posizione (e alla dimensione, il colore e lo stile che preferiamo).
Qualsiasi variabile?! E se le variabili possono assumere anche stringhe come valori, cosa siamo in grado di fare???
Hud dinamici, che modificano il loro testo come e quando vogliamo noi!
Questo è un esempio di utilizzo di questo trucco:

img7.png
Quello qui sopra è il menu di Our Hero! Hyper Sword e le parti cerchiate in rosso sono valori disegnati dal plugin Orange Hud. Nel primo caso vediamo sei variabili differenti, dove ognuna riporta il suo valore numerico. Nel secondo caso vediamo una stringa di testo (il nome della mappa). Per fare ciò è bastato ricorrere al primo trucchetto che abbiamo imparato, ovvero come assegnare una stringa ad una variabile e, combinando il tutto con lo Iavra Localization abbiamo ottenuto una variabile su schermo in formato stringa, che può variare quando vogliamo!
Infatti, nel momento in cui cambierò mappa nel gioco e mi trovo in una zona differente, mi basta usare il seguente Call Script:

$gameVariables.setValue(28, "#{map.castle}");

In questo modo la variabile 28 assumerà il valore corrispondente al codice richiamato tra le virgolette, che è naturalmente una stringa:
img8.png

  • Variabili per gestire la posizione della telecamera (plugin)

Un altro modo intelligente per utilizzare le variabili è fargli gestire la posizione della telecamera.
Per procedere con questo metodo avremo bisogno di uno dei plugin, a parer mio, essenziali per utilizzare al meglio Rpg Maker MV. Si tratta del plugin di Galv: Cam Control.
Questo plugin ci permette di gestire la telecamera di gioco come preferiamo: incentrata sull’eroe (standard):
img9.png

incentrata su un determinato evento:
img10.png

oppure su delle specifiche coordinate:
img11.png

Il bello viene con quest’ultima funzione: le coordinate, infatti, possono essere sì dei valori statici (0, 0), ma anche dei valori dinamici, sostituendoli con delle variabili!
Basterà assegnare a due differenti variabili (una per la coordinata X ed una per la coordinata Y) i valori che preferiamo, anche dal normale comando evento disponibile in Rpg Maker e, poi, aggiungere questo Comando Plugin:
img12.png

In questo modo diremo alla telecamera di spostarsi alla coordinata X corrispondente al valore numerico contenuto nella variabile 1, ed alla coordinata Y corrispondente al valore numerico contenuto nella variabile 2.

  • Variabili per gestire il ciclo giorno/notte e cambio tinta

Questo trucchetto mi piace particolarmente, ed è anche l’ultimo che ho scoperto quando l’altro giorno mi sono ritrovato ad introdurre il ciclo giorno/notte nel mio gioco.
Ho tentato prima con un plugin. Ce ne sono, belli completi e sofisticati, ma avevo bisogno di qualcosa di più semplice e immediato, così ho preferito farmelo ad eventi, come al solito.
I metodi per realizzare un ciclo giorno/notte possono essere tanti e diversi, ognuno ha il suo. Basta utilizzare poche variabili, con un’attesa riferirsi allo scorrere dei secondi e ogni tot secondi conteggiare un minuto e in un ciclo, raggiunto un determinato ammontare di minuti, eseguire la transizione da un momento della giornata ad un altro, con un cambio tinta schermo.
Il problema è proprio il cambio tinta: il comando datoci a disposizione da Rpg Maker è statico, permettendoci di inserire determinati valori di colorazione (corrispondenti al R, G, B, A) per ogni comando. Ma se volessimo una transizione di colorazione dal giorno alla notte (o qualsiasi altro momento della giornata che vogliamo introdurre) più dinamico?
Dobbiamo creare trecento comandi di cambio tinta differenti?
img13.png
(è solo un’immagine a scopo d’esempio)

E anche l’attesa in frames, per ognuno di questi cambio tinta, se dopo aver creato trecento comandi diversi ci accorgiamo che è troppo lenta o troppo veloce? Dobbiamo modificare l’attesa di ogni comando uno ad uno? … Follia.
Ebbene, fortunatamente esistono i Call Script, e ne abbiamo uno anche per il cambio tinta:

$gameScreen.startTint([red,green,blue,grey], duration);

Al posto di red, green, blu e grey dovremo inserire i valori tonali della colorazione, che vanno da 0 a 255 e al posto di duration la durata in numero di frames.
img14.png

A questo punto forse avrete già capito dove sto per arrivare.
Infatti, possiamo sostituire questi 5 valori con 5 variabili! In questo modo, ognuno di questi valori (red, green, blu, grey, duration) assumerà dei valori dinamici che cambieranno con il modificare del valore assegnato a ciascuna variabile!

$gameScreen.startTint([$gameVariables.value(73),$gameVariables.value(74),$gameVariables.value(75),$gameVariables.value(76)], $gameVariables.value(72));

img15.png
E in questo modo avremo la possibilità di modificare dinamicamente il nostro comando di cambio tinta, modificando i valori contenuti nelle variabili: ad esempio, ad ogni ciclo, possiamo sottrarre un -2 al valore corrispondente al Green e aggiungere un +1 al valore corrispondente al Grey e alla fine del ciclo chiamare lo stesso Call Script, senza creare trecento comandi differenti. Lo stesso vale per la durata in frames del cambio tinta.

Prima di concludere questa parte, una piccola nota: il comando chiamato tramite Call Script non “attende la fine” come il comando normale:

img16.png

 

Dopo il Call Script del cambio tinta ci basterà aggiungere semplicemente un altro Call Script per l’attesa in frames:

this.wait( duration );

Anche qui duration può essere sostituito o da un valore o da una variabile. Abbiamo imparato che per sostituire un valore con il valore contenuto in una variabile ci basta inserire:

$gameVariables.value(n)

dove n è l’ID della nostra variabile.

  • Variabili per posizionare un evento generato (plugin)

L’Orange Custom Events è uno dei plugin che più amo.
Questo plugin ci permette di generare nuovi eventi in una mappa copiati da eventi presenti nella stessa mappa o in mappe differenti.
I nuovi eventi copiati possiamo generarli a caso in una determinata regione, riempendo un’intera regione oppure in una specifica posizione x,y.
Non sono qui per parlarvi del plugin, di cui comunque ho già aperto una discussione qui, ma di come può essere sfruttato al meglio grazie all’uso delle variabili.
Grazie a questo plugin, infatti, in Our Hero! Hyper Sword mi è bastato creare un solo ed unico evento per gestire tutti i nemici dell’intero gioco, evitando di copia e incollare centinaia di eventi diversi in ogni mappa. Quando voglio far apparire un nemico, semplicemente… lo chiamo!
L’evento appena chiamato si adeguerà alla battaglia in base al valore assegnato ad una variabile, che gestisce la tipologia dei nemici. Grazie a questa variabile, da un unico evento, potremo creare nemici differenti (utilizzando più pagine) che cambiano il loro aspetto, la quantità di PV, l’attacco o qualsiasi altro valore desideriamo in base al valore assegnato ad una variabile.
img17.png

Plugin ottimo per creare eventi che in tutto il gioco sono sempre uguali e non vogliamo ricopiarli continuamente come, ad esempio: trappole, luci, massi e chi più ne ha più ne metta.
Ma ora arriviamo al punto principale: come facciamo a posizionare questi eventi a delle coordinate x,y che noi non conosciamo e potrebbero variare di volta in volta?
Ormai lo sappiamo bene. Basta questo codice per chiamare il valore contenuto in una variabile:

$gameVariables.value(n)

e, come ora sappiamo, possiamo inserire questo codice in qualsiasi Call Script, anche di plugin esterni.
Quindi, se per posizionare un evento in una specifica posizione x,y con l’Orange Custom Events useremo il Call Script:

$gameMap.copyEventFrom(5, 1, 15, 20, true)

dove 5 è l’ID della mappa dalla quale prenderemo l’evento da copiare, 1 è l’ID dell’evento che stiamo andando a clonare e 15 e 20 sono rispettivamente le coordinate x e y in cui si andrà a posizionare il nostro nuovo evento clonato nella mappa attuale.
Sì, possiamo sostituire ogni valore con i valori contenuti all’interno di variabili:

$gameMap.copyEventFrom(5, 1, $gameVariables.value(1), $gameVariables.value(2), true)

Nell’esempio qui sopra ho deciso di rendere variabili solo le coordinate x e y, ma possiamo sostituire anche il valore che si riferisce alla mappa (la Spawn Map) o quello che si riferisce all’ID dell’evento che stiamo copiando.

  • Variabili locali (plugin)

Concludo questa guida con uno dei plugin più interessanti di sempre: YEP.113 Self Switches & Variables.
Ommioddio sì, variabili locali, finalmente! E anche Self Switches infinite piuttosto che limitarci alle solite quattro (A, B, C, D) okay… ma se abbiamo già delle variabili locali che possono assumere migliaia di valori diversi che ce ne facciamo più delle Switch Loc… Vabe’!
Il giorno in cui ho scoperto questo plugin di Yanfly sono stato così contento che vorrei aver detto a Yanfly “Tieni, prendi tutti i miei soldi!”. Avere delle variabili locali è fantastico! Soprattutto se hai da gestire centinaia di nemici su mappa tutti diversi e generati da un solo ed unico evento (eheh ^^).
Quest’ultima parte non tratta di un trucchetto in particolare vero e proprio, ma desideravo concludere parlandovi di questo plugin, sia perché lo ritengo un plugin fantastico e sia perché devo concludere ciò che vi ho introdotto poco fa, con la generazione dei nemici da un unico evento e in tante mappe diverse.
Clonando eventi per il gioco, infatti, se questi eventi sono gestiti dalle variabili standard di Rpg Maker, non avremo alcuna possibilità di avere eventi che modificano il loro aspetto o i loro PV o qualsiasi altra cosa in modo diverso l’un dall’altro in base al valore assegnato ad una variabile.
Perché? Cloniamo 10 nemici dalla mappa 5 e ora impostiamo una variabile per determinare i PV del nemico: “Enemy PV = 100”, per esempio.
Così facendo tutti i nemici appena generati avranno i loro PV settati su 100. E come facciamo se in battaglia invece ci ritroviamo nemici di tipo 1, nemici di tipo 2 e nemici di tipo 3? Ogni tipo di nemico ha i suoi diversi PV, perché qualcuno è più forte e qualcuno più debole.
Grazie alle variabili locali possiamo fare tutto ciò. Con le variabili locali, infatti, ogni nuovo nemico generato avrà la sua variabile locale e sarà gestito esclusivamente da questa.
Il valore della variabile locale può essere modificato in base ad una variabile standard di cui modificheremo il suo valore in tempi diversi, per assegnare alle variabili locali valori diversi.
Questo è tutto! L’esempio del mio caso specifico (con i nemici) l’ho riportato solo per farvi capire le potenzialità offerte dal plugin Self Switches & Variables.

La guida ai trucchetti è conclusa! Spero che comprendiate tutto quanto e sicuramente che possa esservi utile in tanti modi diversi! Se qualcosa non vi è chiaro non preoccupatevi, chiedete spiegazioni e dettagli e, se conoscete qualche altro trucchetto anche voi, riportatelo pure che fa sicuramente piacere! 🙂

Link utili:

RMMV Script Calls
File JSON d’esempio Iavra Localization

Follow Ste's Project Team:

Latest posts from

Leave a Comment