Category: Uncategorized

game development

7 Tips and Tricks fondamentali per qualsiasi Rpg Maker

C’è sempre da imparare, e facendo giochi per diversi anni si imparano diverse cose, tra cui efficaci trucchi o semplici suggerimenti del proprio programma preferito, che è bene sempre tenere mente quando si sviluppa un videogioco.

Oggi vi elencherò una serie di trucchi per Rpg Maker, engine che ho utilizzato per creare tutti i giochi presenti sul sito fino ad ora. Forse alcuni li conoscerai già, forse altri no, o magari ne conosci altri che non ho riportato nell’elenco o di cui non sono nemmeno a conoscenza. Se così fosse, sentiti pure libero di contribuire condividendo i tuoi “tips and tricks” in questo post. Sarò felice di aggiungerli all’elenco. Ma ora… cominciamo!

 

Eliminare la trasparenza dalle immagini.

  • Eliminare la trasparenza dalle immagini.

Le immagini pesano e la trasparenza (anche se è invisibile) ha il suo valore. La cosa migliore quindi è ridurre la trasparenza di un’immagine al minimo. Se ad esempio vogliamo importare un’immagine per mostrare una barra dell’energia  che misura 100×20 pixel, è sconsigliattissimo importare l’immagine grande quanto l’intero schermo con la nostra barra dell’energia posizionata in alto a sinistra (ad esempio). Questo causerà un notevole lag durante tutto il gioco, perché è come se avessimo una (o più) immagini disegnate costantemente sul nostro schermo. Meglio invece salvare solo la barra in un’immagine di 100×20 pixel e poi posizionarla nel punto desiderato definendo le sue coordinate x e y sullo schermo.

 

Delegare i comandi agli eventi comuni.

  • Delegare i comandi agli eventi comuni.

Una delle cose che più può aiutarci e semplificare il lavoro è delegare i comandi di un evento ad un evento comune. L’evento comune è una serie di comandi da noi definita che può essere chiamato in qualsiasi momento da qualsiasi evento nel gioco. Ciò significa che se vogliamo collocare diversi eventi nel nostro gioco che, ad esempio, al tocco del giocatore fanno spawnare dei nemici, è ottimo gestire questo processo tramite un evento comune. Nell’evento su mappa lasciamo solo le cose specifiche di quel preciso evento (ad esempio una variabile in cui definiamo quanti nemici e quale tipologia di nemici spawnare. Anche il comportamento dei nemici è consigliato gestirlo tramite eventi comuni, oppure cosa far accadere quando si apre un forziere o si raccoglie un determinato oggetto. In questo modo, se in futuro volessimo apportare delle modifiche ai nostri comandi, ci basterà modificare l’evento comune per cambiare automaticamente tutti gli eventi che lo richiamano nel gioco. Delegate agli eventi comuni il più possibile.

 

Fare attenzione agli ID degli eventi.

  • Fare attenzione agli ID degli eventi.

Gli eventi pesano e avere tanti eventi sulla mappa può far laggare notevolmente il nostro gioco. Inoltre, la gestione degli eventi di Rpg Maker non aiuta. Fate attenzione all’ID dei vostri eventi. Se avete solo due eventi su mappa, uno con ID 001 e uno con ID 250, per Rpg Maker è come se ci fossero altri 248 eventi sulla mappa, oltre ai nostri due effettivi. Questo può a volte succedere se, ad esempio, in un primo momento ci eravamo serviti di un elevato numero di eventi sulla nostra mappa, per poi renderci conto che molti di questi non ci servivano e potevano essere cancellati. Se questi eventi eliminati avevano un ID compreso nel mezzo tra il primo evento e l’ultimo evento che avevamo posizionato, sulla mappa potrebbero essere rimasti degli eventi con un ID elevato, che fanno laggare inutilmente il gioco. Un modo per risolvere questo inconveniente è tagliare l’evento (ctrl + x sull’evento) e incollarlo (ctrl + v) ovvero riposizionarlo nuovamente. In questo modo l’ID del nostro evento sarà aggiornato al primo ID più basso libero.

 

Utilizzare le pagine evento.

  • Utilizzare le pagine evento.

Come abbiamo già detto gli eventi pesano, quindi potrebbe essere vantaggioso per noi cercare di avere il minor numero di eventi possibile sulla nostra mappa. Per fare questo possono venirci in aiuto le pagine dell’evento. Nell’ultima versione di Rpg Maker, Rpg Maker MV, ogni evento può avere un massimo di 20 pagine evento. Il limite nelle altre versioni potrebbe essere simile o variare, in ogni caso 20 pagine sono abbastanza e più che sufficienti. Se ad esempio abbiamo una mappa in cui verranno richiamate diverse cutscene nel corso della storia, sarà buona pratica gestire le diverse cutscene tutte nello stesso evento, attraverso diverse pagine, piuttosto che disseminare la nostra mappa di decine di eventi diversi. Le pagine dell’evento potranno di volta in volta attivarsi o con l’attivazione di differenti switch o al raggiugimento di un determinato valore di un’eventuale variabile “progresso” che tiene traccia della nostra progressione nella storia. Utilizzate al massimo ogni singolo evento sfruttando le sue pagine e ridurrete notevolmente il peso delle mappe e il lag di gioco.

 

Importare spritesheets nel modo appropriato.

  • Importare spritesheets nel modo appropriato.

Di default, uno spritesheets importato in Rpg Maker con un nome qualsiasi viene suddiviso in una griglia che contiene altre 4 griglie in lunghezza e 2 in altezza, ottenendo così un’immagine che può avere al suo interno un totale di 8 spritesheets, ognuno avente 3 riquadri (per il movimento) in lunghezza e 4 riquadri (per la direzione) in altezza. Se questo però non ci sta bene, abbiamo la possibilità di importare uno spritesheet singolarmente. Per farlo ci basterà aggiungere il simbolo del dollaro ($) all’inizio del nome dello sprite (ad esempio, “$hero1.png”). Inoltre, di norma, tutti gli eventi posizionati in Rpg Maker sono leggermente più in alto rispetto alla posizione della griglia. Se vogliamo che un evento venga invece posizionato in linea con la griglia, ci basterà importarlo aggiungendo un punto esclamativo (!) all’inizio del suo nome (ad esempio, “!chest.png”).

 

Posizionare tileset tenendo premuto SHIFT.

  • Posizionare tileset tenendo premuto SHIFT.

Non tutti sanno che gli autotile, ovvero quei tileset che quando posizionati hanno un comportamento automatico (come i tileset A1, A2, A3, A4), possono essere posizionati senza che vengano automaticamente aggiunti i bordi o contorni del tile. Per farlo sarà sufficiente posizionare sulla mappa i tiles tenendo premuto il tasto shift.

 

Copiare pezzi di mappa.

  • Copiare porzioni di mappa.

Può esserci d’aiuto ogni tanto copiare delle porzioni di mappe già realizzate per posizionarle da qualsiasi altra parte. Per fare questo basterà selezionare dalla griglia la porzione di mappa che vogliamo clonare tenendo premuto il tasto destro del mouse. Possiamo copiare un singolo tile oppure un’intera porzione di mappa.

 

E tu conosci altri trucchetti per Rpg Maker?

Scrivi i trucchi che conosci e vuoi condividere, li aggiungerò alla lista!

Uncategorized

Rpg Maker MV vs Unity: due engine molto differenti…

Come alcuni di voi avranno saputo, da circa una settimana ho deciso di chiudere il mio capitolo con Rpg Maker e iniziarne uno nuovo con Unity. Anche Our Hero! Hyper Sword, il mio ultimo gioco in sviluppo che ha ricevuto il Greenlight su Steam, sarà sospeso e completamente rifatto in Unity.

Dopo dieci anni di sviluppo videogiochi in cui ho esclusivamente utilizzato Rpg Maker (passandomeli tutti, dal 2k, all’XP, al VX, Vx Ace ed MV per concludere) si esplorano nuove strade e nuove possibilità, cosa che il più delle volte blocca e spaventa.

> Scopri di più su Rpg Maker e Unity, due engine per creare videogiochi.

Ma da cosa è nata questa forte necessità di cambiare? Perché l’ho sentito così necessario? Quali sono le caratteristiche di questi due engine, molto diversi fra loro e dagli scopi altrettanto diversi? Ora, che mi trovo ancora nella fase di cambiamento in corso e ho una visione generale di entrambi i tool, mi piacerebbe spendere due parole a riguardo di questo particolare argomento.

La conclusione a cui sono arrivato è davvero incredibile e non posso fare a meno di parlarne (a fine articolo).

Perché cambiare engine?

Rpg Maker, come è noto, grazie alla sua semplicità permette di avvicinare tantissime persone al mondo dello sviluppo dei videogiochi. Un gran bene, considerando che si può ritenere come un ottimo punto di partenza per fare di una passione una possibile futura professione. Risorse grafiche e audio già pronte, un editor di mappe semplice e un sistema ad eventi facile da padroneggiare, affiancato dalla possibilità di espandere le sue funzionalità grazie all’integrazione di plugin (o RGSS script nelle versioni precedenti ad MV). La possibilità di esportare per browser e mobile (con l’ultima versione) l’ha inoltre reso finalmente un po’ più al passo coi tempi.

Nonostante questo, come è noto, Rpg Maker, proprio per la sua caratteristica di essere alla portata di tutti, ha alcune limitazioni che negli anni si è sempre portato dietro e ha dovuto rispettare. Una, è che è strettamente orientato a sviluppare giochi di ruolo; un’altra, è che il proprio gioco non potrà che avere esclusivamente una visuale “ortografica” (con visione dell’alto, in stile Suikoden 2 o Pokémon, per intenderci).

Abbiamo già parlato di come si possano ampliare le funzionalità dell’engine, aggiungendo script e plugin propri, oppure realizzati da terze parti. Tuttavia, questo spesso potrebbe non essere abbastanza (risulta difficile in Rpg Maker sviluppare giochi platform 2D, o comunque con oggetti molto dinamici che rispettino le leggi della fisica). Anzi, il più delle volte potrebbe essere controproducente, se non addirittura deleterio. Continua a leggere e capirai meglio cosa sto cercando di dire.

Unity, un ambiente di sviluppo orientato agli oggetti

Unity, ovviamente, si differenzia da Rpg Maker per diversi aspetti, ma forse una delle caratteristiche principali è che tutto quello che facciamo in Unity è gestito da Oggetti (ovvero, un qualsiasi elemento di gioco, che sia il nostro personaggio, un alleato, un bottone di un menu, la telecamera di gioco, è un oggetto), a differenza di Rpg Maker, dove ogni cosa è un Evento. Qual è la differenza principale?

Gli eventi sono contenitori in cui ci possiamo buttare dentro una serie di comandi da eseguire in sequenza ad una determinata condizione.

Gli oggetti sono invece elementi di gioco, a cui possono essere associati dei componenti (Components) per “caratterizzarli” e qualsiasi funzione vogliamo che venga svolta su o da quell’oggetto. Se vi sembra interessante, spieghiamoci meglio ed entriamo un po’ più nel dettaglio, analizzando le finestre principali che abbiamo davanti quando installiamo ed avviamo Unity per la prima volta (così che non ci spaventino più troppo).

NOTA: l’interfaccia di Unity è completamente personalizzabile: possiamo spostare le finestre dove più ci piace, chiuderle, riaprirle, aprirne nuove e addirittura aggiungere Assets che espandono il nostro ambiente di sviluppo e integrano dei veri e proprio piccoli “programmini” all’interno dell’editor. Un esempio, possiamo aggiungere un Asset per integrare un tileset editor stile Rpg Maker (dato che di base una cosa di questo genere non c’è in Unity. Un’alternativa è utilizzare software esterni come Tiled e poi importare la “mappa” come immagine/i sprite in Unity).

NOTA 2: di Assets (gratuiti o a pagamento sull’Asset Store) ce ne sono davvero un milione. Questo non ci deve spaventare (provando a mettermi nei panni di chiunque e confrontando la mia prima esperienza, uno dei miei primi pensieri è stato “oddio quanti assets, non troverò mai quello giusto che fa per me e non saprò mai tutti gli assets di cui ho bisogno per fare il mio gioco”). La verità è che gli assets vanno visti solo come dei “miglioramenti” e spesso sono più materiali utili a chi sviluppa videogiochi in 3D. Il più delle volte, quindi, Unity da solo (ovviamente) è già in grado di fare tutto ciò di cui abbiamo bisogno, soprattutto se siamo nuovi e vogliamo innanzitutto cimentarci in progetti non troppo ambiziosi per imparare l’arte.

L’interfaccia default di Unity, quando ancora tutte le finestre sono alla loro posizione originale.

La Hierarchy

Appena dentro l’editor, sulla sinistra, vediamo la Hierarchy. La Hierarchy (gerarchia) è essenzialmente la lista di tutti gli oggetti che sono presenti nella nostra Scena. Nel nostro progetto possiamo creare tutte le scene che vogliamo (ad esempio per creare più livelli per il nostro gioco) e, al momento della build, starà a noi decidere quali scene includerci all’interno. In ogni caso, la nostra scena è infinita: potremmo creare il nostro intero gioco in un’unica scena (anche se probabilmente la performance ne risentirebbe, quindi non è proprio un’ottima idea!)

La Hierarchy è una delle finestre più importanti: qui possiamo infatti prendere gli oggetti e trascinarli nella scena o nella finestra Project, dove c’è la nostra cartella delle risorse. Trascinandoli nella cartella della risorse creeremo un nuovo Prefab, una delle cose più belle e utili in Unity.

Inoltre, trascinando un oggetto sopra un altro lo collegheremo all’oggetto principale, cioè sigfnifica che abbiamo reso Child l’oggetto minore che ora fa parte di un “gruppo di oggetti”. Questo ci è utile per raggruppare insieme più oggetti di uno stesso tipo (ad esempio i singoli tiles per costruire una mappa possono essere raggruppati sotto l’oggetto “Map 1”, come fossero file di una cartella), oppure per creare un Prefab costituito da più oggetti! Spostando un gruppo di oggetti nella cartella risorse creeremo infatti un singolo Prefab costituito da quell’insieme di oggetti e che ora potrà essere trattato come oggetto unico (ad esempio i nostri tiles per creare la mappa “Map 1” diventeranno una singola immagine). Mi soffermo ora un attimo per spiegare in sostanza cosa sono i Prefab e perché possono facilitarci sicuramente lo sviluppo del gioco.

Cosa sono i Prefab?

I Prefab sono oggetti comuni, che possiamo decidere di rendere Prefab. I Prefab diventano quindi oggetti che possono essere duplicati inserendoli nelle nostre scene, per creare oggetti dello stesso tipo che condividono le stesse identiche caratteristiche fra di loro (ad esempio, possiamo creare un Prefab “Enemy” per gestire tutti i nemici del nostro gioco, dato che probabilmente condivideranno caratteristiche comuni, come il movimento o un eventuale script per calcolare il danno quando attaccano l’eroe). Il punto forte è che quando avremo bisogno di apportare una modifica a tutti quegli oggetti, potremo agire direttamente sul Prefab: le modifiche si trasferiranno su tutti i nostri oggetti già presenti nelle scene del gioco! Non solo, possiamo creare cloni di un oggetto principale (il Prefab) che condivide quindi le medesime caratteristiche con tanti altri oggetti, ma a cui possiamo anche apportare noi modifiche specifiche solo su quel determinato oggetto (ad esempio se abbiamo bisogno di modificare il colore o la dimensione di un solo determinato nemico).

La Scene

La finestra Scene è la grande finestra centrale che abbiamo nel bel mezzo di Unity. Consiste, in poche parole, dell’ambiente in cui costruiremo il gioco, ovvero dove andremo a collocare gli oggetti, come la telecamera di gioco, il player, eventuali nemici, mappe (sia che siano costituite da singoli tiles sia che si tratti di una sola unica grande immagine), ma anche, ad esempio, animazioni. Le animazioni infatti sono elementi particolari da richiamare ad una determinata condizione su un oggetto (ad esempio l’animazione di camminata del nostro personaggio, o di attacco nel momento in cui premiamo un determinato tasto) e che non dovrebbero essere quindi di principio presenti nella scena, se non nel caso di animazioni di oggetti statici (come, ad esempio, un fuoco). Per creare una nuova animazione possiamo infatti selezionare (dalla finestra delle risorse) la sequenza di sprites che costituiscono l’animazione di un determinato oggetto e trascinarle nelle scena per creare l’animazione vera e propria.

Nel menu in alto, selezionando GameObject, potremo comunque visualizzare tutti gli oggetti di gioco che possiamo inserire all’interno di una scena. Un oggetto particolare da prendere in considerazione sono, ad esempio, le UI. Le UI sono immagini, testi, bottoni o qualsiasi altro elemento che apparirà sullo schermo in “primo piano” fisse e indipendemente dalla posizione in cui si trova la nostra Camera nella scena. Per avere un riferimento, sono le Pictures di Rpg Maker, ma più potenti. Abbiamo infatti la possibilità di collocare testi dinamici (che cambiano coi contenuti che vogliamo noi, tramite script) e immagini o qualsiasi altro elemento per creare efficaci menu e interfacce di gioco (come barre dell’energia, contatori di punti, menu di gioco ecc).

Di fianco alla Scene abbiamo la finestra Game: è qui che, quando avvieremo il test del nostro gioco, daremo vita e potremo vedere e provare tutto quello che abbiamo creato e messo in scena.

La finestra Project

In Project, di default situato in basso, vediamo tutte le cartelle e le risorse che creiamo o buttiamo dentro alla nostra cartella principale del progetto. Vediamo di default la cartella Assets, in cui è buona norma creare delle sottocartelle in cui dividere i vari elementi che costituiranno il nostro gioco (ad esempio, una cartella “Resources” per i file grafici, una cartella “Scripts”, una per i file audio, una per le animazioni, una per i prefab, ecc).

La Console

Sempre in basso, proprio di fianco a Project, abbiamo la Console. La Console ci restituirà qualsiasi errore derivante dall’attività del nostro gioco, come ad esempio errori negli script. Possiamo anche usare la Console per stampare valori o testo nel momento in cui stiamo creando i nostri script (ad esempio un Debug.Log(“Hello World!”); ci scriverà nella Console il testo Hello World!. Ci risulterà molto utile consultarla e averla sempre a portata di mano.

L’Inspector

Eccoci arrivati alla finestra più a destra nell’editor e fra le più importanti: l’Inspector. L’Inspector è il luogo in cui vedremo eventuali opzioni di settaggio (come le impostazioni di audio, di grafica, di input ecc. relative al nostro gioco), ma non solo; è anche il luogo in cui soprattutto vedremo tutte le caratteristiche di un oggetto e tutte le componenti che lo caratterizzano nel momento in cui lo andremo a selezionare. Cosa significa “tutte le componenti che lo caratterizzano”?

Gli oggetti, come abbiamo detto, sono gli elementi principali che compongono il nostro gioco in Unity. Un oggetto, di base, senza componenti che lo caratterizzano sarebbe indistinguibile, uguale identico a qualsiasi altro oggetto. Aggiungendo ad un oggetto dei Components diremo all’oggetto di essere in un certo modo e di comportarsi in un certo modo. Ciò significa che se, ad esempio, volessimo creare l’oggetto Player (per rappresentare il nostro giocatore in game) potremmo volergli assegnare due Components principali: un RigidBody e un Collider (a forma di Box, Circle, Polygon…). Il RigidBody renderà il nostro oggetto (nel nostro caso il Player) soggetto alle leggi della fisica, mentre il Collider gli darà la facoltà di interagire (tramite interazione) con qualsiasi altro oggetto di gioco. Ottimo! Un’altra buona idea sarebbe aggiungergli alcuni script, come ad esempio uno per farlo camminare con la pressione di determinati tasti. Già, perché tutto ciò che vogliamo far accadere in Unity bisogna scriverlo nel nostro programma (il gioco) tramite script.

Perché non conoscere la programmazione non ci deve spaventare?

Alcune settimane fa, nel momento in cui ho deciso di lasciare perdere Rpg Maker e passare a Unity (essenzialmente perché in Rpg Maker era ormai una lotta continua a superare i limiti del tool e a risolvere malfunzionamenti derivanti da questo approccio, più che un avere il piacere di creare il gioco) non conoscevo neanche un po’ la programmazione (o comunque molto poco). In teoria, io pensavo questo e così sarebbe dovuto essere. In pratica, “programmavo” già da anni, tramite il semplicistico sistema di eventi di Rpg Maker: già solo per creare un menu ad eventi, un title personalizzato, o un sistema di battaglia personalizzato, c’era dietro la cosa principale: la logica, e anche in un certo modo un uso base della sintassi (come l’uso di if, cicli e variabili). Questa è, in sostanza, la programmazione: logica e conoscere la sintassi del determinato linguaggio che si sta utilizzando. Nonostante questa sia un’ottima base per capire che non è nulla di completamente sconosciuto a noi, è opportuno conoscere qualcosa di più.

Unity come linguaggi di scripting utilizza il C# e il Javascript. Oggi il C# è di gran lunga più utilizzato e troverete una marea di tutorial a riguardo su come fare cose in Unity che utilizzano il C#. Io, personalmente, ho deciso di cominciare a studiarmi il C#. Conoscere il linguaggio di programmazione di cui fa uso il proprio engine di sviluppo è importante per capire e per sviluppare quella mentalità che ci permette di ragionare e fare tutto ciò che desideriamo fare nel modo migliore e più efficace possibile relazionato alla nostra personale situazione.

Ciò che conforta è che per essere in grado di fare un buon gioco non c’è bisogno di conoscere la programmazione approfonditamente: quello di cui necessiteremo, la maggior parte delle volte, sarà avere ben chiaro come chiamare i metodi di cui abbiamo bisogno. Un esempio veloce potremmo farlo analizzando come far muovere un oggetto in Unity: sapendo che ogni oggetto che andremo a creare in Unity avrà obbligatoriamente un componente fisso: il componente Transform. Il Transform gestisce tre parametri fondamentali posseduti da ogni oggetto: la sua posizione nella scena, la sua -eventuale- rotazione e la sua scala (grandezza/dimensione).

Il componente Transform, presente in ogni oggetto di Unity.

Se vogliamo quindi far muovere un oggetto, come ad esempio il nostro giocatore, dovremmo andare ad agire sulla sua Position ogni volta che premiamo un tasto. Se premiamo il tasto per farlo spostare verso sinistra, dovremo togliere valori dall’asse X, se vogliamo muoverlo verso destra dovremo invece aggiungerne, premendo i tasti per farlo muovere verso l’alto e verso il basso dovremo rispettivamente sottrarre e aggiungere valori all’asse Y. Questi “valori” possono essere rappresentati da una variabile che conterrà un numero: a logica, più questo numero sarà alto, più sarà rapido il movimento (lo spostamento sull’asse da un punto all’altro).

Non c’è nessun concetto paranormale o così complicato da capire, è solo opportuno imparare una “nuova lingua”, quella del linguaggio di programmazione, che comunica attraverso classi, chiamate ai metodi (o funzioni), var, if, else, while, ecc (oltre l’inglese, abbastanza fondamentale).

Conclusione

Finalmente, dopo tanti dilungamenti (non pensavo che mi sarei soffermato così tanto su Unity, ma mi è piaciuto fare un quadro abbastanza dettagliato di cosa offre il programma) sono giunto a ciò a cui principalmente volevo arrivare con questo articolo.

Imparare un nuovo engine può spaventare, è giusto, essendo un’ambiente del tutto nuovo (e sapendo che non muovendoci ci aspetta il nostro confortante programma che già conosciamo bene), ma esiste un paradosso che ho trovato straordinario: sono tre settimane che giorno dopo giorno guardo tutorial di Unity, faccio i passaggi che propongono, consulto la documentazione ufficiale e sperimento su Unity (facendo queste cose imparerete sostanzialmente bene ad usare Unity, e probabilmente funzionerà anche per apprendere altre cose e altri programmi; inoltre, se proprio volete esagerare, potete fare come me e acquistare uno splendido corso dedicato su Udemy). Quindi, imparare ad utilizzare un programma così completo come Unity richiede un po’ di tempo e impegno iniziale, questo è vero. Il bello però arriva poi: dopo l’impegno iniziale c’è la libertà, la libertà di creare il gioco che più piace ed esattamente come si vuole. Questo renderà lo sviluppo del gioco addirittura più semplice e soprattutto piacevole, piuttosto al cercare di aggirare le limitazioni di un programma. Invece che cercare il modo di superare i limiti imposti dall’engine (in questo caso sto chiaramente riferendomi ad Rpg Maker), avrete modo di andare diretti a fare esattamente ciò che desiderate fare. Questo, almeno per me (ma spero che potrà esserlo anche per voi), ha reso più semplice utilizzare Unity piuttosto che Rpg Maker. Questo è ciò di cui mi sono accorto e che ho trovato incredibilmente bello (e per arrivare a questo mi sono impegnato tanto da scrivere un articolo di 2829 parole!)

Okay, questo era partito come un normale articolo, ma è diventato un romanzo. Nonostante ciò, spero davvero tanto che questo articolo vi sia piaciuto, vi abbia coinvolto e, chissà, possa esservi stato in qualche modo d’aiuto e d’ispirazione.

Buon Making! 🙂

Uncategorized

Cosa sono le variabili in Rpg Maker e come…

Cosa sono le variabili in Rpg Maker e come utilizzarle

Ciao amici! Oggi vorrei parlarvi di uno dei comandi più essenziali nella programmazione di un videogioco: le variabili!

In questo specifico tutorial ne parlerò nell’ambito di Rpg Maker, il tool di sviluppo che utilizzo e conosco maggiormente, ma probabilmente è una guida che potrà essere utile e potrete applicarla in qualsiasi altro ambito in cui vengano utilizzate le variabili.

Troppo spesso si trovano creatori che si avvicinano al mondo della creazione dei videogiochi, imparano una decina di funzioni principali ma le variabili… le variabili sono sempre lasciate per ultime! Anch’io, devo ammetterlo, è stato uno degli ultimi comandi che ho cominciato ad utilizzare in Rpg Maker. Col tempo ho cominciato ad utilizzarle sempre più seriamente e per fare ogni cosa, ma perché immediatamente abbiamo questo rifiuto verso la scoperta della funzione delle variabili?

Il problema, probabilmente, è che consideriamo l’apprendimento di questo comando come una cosa di secondo piano, non necessaria. Il trasporto lo sappiamo fare, sappiamo far muovere l’eroe, sappiamo far visualizzare una picture, un’animazione… a posto! Ahia, ma se solo avessimo saputo prima che utilizzando una variabile il nostro evento sarebbe risultato più dinamico, personalizzato e… sì, che faceva esattamente così, come volevamo noi!

Bene, proseguiamo la lettura chiedendoci, innanzitutto, cosa sono queste variabili, per poi proseguire con alcune idee di come utilizzarle al meglio per semplificarci la vita.

Che cosa sono le variabili?

  • Le variabili sono dei contenitori.
  • Questi contenitori possono assumere svariati valori (numeri, decimali, frasi, parole…)
  • Il valore di questi contenitori può essere modificato o sovrascritto in qualsiasi momento.

Già qui ci è permessa una riflessione: se le variabili possono contenere valori, possiamo trattarli esattamente anche come fossero interruttori: dopo aver assegnato un valore ad una variabile con una condizione IF posso eseguire il comando:

La variabile X è = a 1?

Se sì… succede una cosa

Se non lo è (la variabile X è diversa da 1)… succede un’altra cosa

 

Questo comando è lo stesso identico di:

L’interruttore X è ON?

Se sì… succede una cosa

Se non lo è (l’interruttore è spento/OFF)… succede un’altra cosa

 

Una cosa abbastanza banale, ma non sempre ovvia.

dai un nome alla tua variabile

Un’altra cosa utile da imparare è che alle variabili possiamo assegnare qualsiasi nome noi desideriamo. Una variabile la possiamo chiamarle in qualsiasi modo, questo non influisce sulle operazioni che si andranno a compiere su di essa. Il nome della variabile interessa solo noi. Possiamo decidere il nome di una variabile in base a dei criteri: per ritrovarla facilmente in un secondo momento, per raggrupparle seguendo una logica, o per qualsiasi altro motivo.

 

 

 

Cosa ci facciamo con le variabili?

Abbiamo detto che ad una variabile X (dove X è il nome personalizzato che abbiamo scelto di attribuire alla variabile) possiamo assegnare un valore. Perfetto, questa è la prima cosa da fare! Scopriamo innanzitutto come assegnare un valore alla nostra variabile e poi scopriremo cosa possiamo farci, dopo che le avremo assegnato un valore.

In Rpg Maker: creiamo un nuovo evento. Per farlo facciamo doppio-click in un punto qualsiasi della nostra mappa, in modalità Evento. Ora facciamo un’altra volta doppio-click all’interno della lista “Contenuti” e selezioniamo l’apposito comando per la gestione delle variabili.

 

 

Questa è la nostra finestra di controllo delle variabili. Da qui potremo assegnare alla nostra variabili quasi tutti i valori a nostra disposizione.

  1. Clicchiamo qui per selezionare la variabile sulla quale vogliamo agire. L’elenco aprirà la lista delle variabili, dal quale potremo immediatamente e in qualsiasi momento crearne una nuova, assegnadole un nome specifico. Nel momento in cui digitiamo un nome ad una variabile (identificata da un id numerico) la variabile è -diciamo- creata.
  2. In questo campo, chiamato “Raggio”, possiamo definire un range di più variabili sul quale desideriamo agire simultaneamente. Se, ad esempio, vogliamo impostare le variabili con id 1, 2, 3, 4 e 5 ad un valore = 10, selezioneremo questo campo (invece che una singola variabile) e defineremo il raggio 1 ∼ 5. Ricordiamoci che le variabili di un range di variabili devono essere tutte vicine fra di loro, per essere selezionate insieme.
  3. Qui definiamo l’operazione da effettuare sulla nostra variabile. Imposta ha il significato di “uguale” ( = ): ci consente di impostare in modo assoluto la variabile a quel determinato valore. Ciò significa che se la variabile X avesse memorizzato al suo interno il valore “145”, ma noi decidiamo di impostare il valore = a 1, la variabile X assumerà il valore 1. Niente storie! Aggiungi è la comune addizione ( + ): seleziona questa operazione per addizionare il valore presente nella nostra variabile X ad un altro valore (che defineremo nel punto 4). Sottrai ci consente, invece, di sottrarre un determinato valore alla nostra variabile ( – ). Moltipla è l’operazione di moltiplicazione. Dividi è l’operazione di divisione. Fin qui capitan ovvio, scopriamo ora cosa fa l’unica funzione che potrebbe essere un po’ dubbia: il Mod. Il Mod ci permette di memorizzare all’interno della nostra variabile il valore ottenuto equivalente al resto di una divisione. Ciò significa che, se il valore della variabile X è 14 e noi facciamo Mod con un valore di 3… otterremo il risultato di 2 all’interno della nostra variabile X. Infatti: 14/3 = 4 con resto di 2. Ricordiamoci che il valore ottenuto dall’operazione di una variabile sarà sempre registrato all’interno della variabile che abbiamo selezionato all’inizio (o delle variabili, nel caso di un range di variabili).
  4. Abbiamo parlato di variabili e operazioni, ma in base a quali valori eseguiamo un calcolo? L’operando ci consente di scegliere il secondo valore con cui poter effettivamente elaborare un calcolo. Possiamo selezionare: un valore costante (un numero qualsiasi, definito da noi); un valore variabile (scegliendo come operando un’altra variabile significa che questo valore può cambiare o essere cambiato in qualsiasi momento, così da creare operazioni dinamiche, che variano al variare di una seconda variabile); un valore casuale, definito all’interno di un range di valori (un range da 3 a 11, prenderà un valore a caso compreso tra 3 e 11). Concentriamoci ora, in modo più approfondito, alle ultime due interessanti funzioni che ci troviamo fra gli operandi: Dati di gioco e Script.

Dati di gioco

I Dati di gioco ci consentono di fare svariate operazioni. Partendo dall’alto: possiamo impostare come valore dell’operando il numero di oggetti posseduti di un determinato oggetto; lo stesso possiamo fare con una determinata arma, poco più sotto, e con una specifica armatura, scendendo al terzo comando. Selezionando “Attore” o “Nemico” possiamo scegliere uno dei nostri eroi (o nemici) e di questo sceglierne un parametro da cui attingere il valore desiderato, come ad esempio il livello del personaggio, la quantità di esperienza, il numero dei PV e così via. Qualsiasi valore contenuto in questi dati di gioco diventerà il nostro operando, ovvero il nostro secondo valore con cui effettuare l’operazione con la prima variabile, selezionata inizialmente.

L’opzione “Personaggio” è una delle più importanti: dalla lista possiamo scegliere se prendere i valori del Player oppure quelli di un qualsiasi altro evento (la lista degli eventi si riferirà alla mappa in cui ci troviamo in questo momento). I valori che possiamo registrare sono:

Mappa X e Mappa Y, per prendere le coordinate sulla mappa di quel giocatore/evento. Queste coordinate si riferiscono alla posizione sulla mappa in Tile;

Direzione, per registrare con un valore numerico la posizione verso cui è rivolto il giocatore/evento: se il giocatore è rivolto verso il basso registrerà come valore -> 2, verso sinistra -> 4, verso destra -> 6, verso l’alto -> 8

Schermata X e Schermata Y, per prendere le coordinate sulla mappa di quel giocatore/evento. Queste coordinate si riferiscono alla posizione sulla mappa in Pixel; per scoprire la quantità di pixel della vostra mappa moltiplicate il valore dei tile in larghezza e in altezza della mappa per la misura di un singolo tile (se utilizzate Rpg Maker XP/VX/Ace è x32, se utilizzate Rpg Maker MV è x48)

L’opzione “Altro” è anch’essa importante: qui possiamo trovare utilissimi dati di cui prenderne il valore come:

l’ID della mappa in cui ci troviamo, il numero di membri nel nostro gruppo (party), la quantità di oro a nostra disposizione, i passi totali percorsi, il tempo di gioco, il valore di un eventuale timer, il conteggio totale dei salvataggi effettuati, delle battaglie, delle vincite e delle fughe.

 

Script

Questa funzionalità ci permette di inserire una riga di codice come operando per la nostra operazione. Per maggiori informazioni fare riferimento alla Guida all’uso avanzato delle variabili integrato a Plugin e Call Script.

Dove utilizzare le variabili?

Abbiamo visto nel dettaglio cosa sono le variabili e, soprattutto, che chiunque è in grado di utilizzarle al meglio. Iniziando ad esplorare i comandi di Rpg Maker scopriremo che le variabili possono essere utilizzate in molte occasioni:

  • Nelle pagine evento, per determinare una condizione di avvio SE una determinata variabile X è maggiore o uguale ( ≥ ) ad un determinato valore numerico;
  • Nei messaggi, per visualizzare il valore di una determinata variabile. Questo è possibile inserendo il codice \v[n] all’interno di un messaggio di testo. Visualizza la lista dei codici disponibili;
  • Nell’inserisci numero, per permettere al giocatore di digitare il valore da registrare in una determinata variabile, selezionando il numero di cifre consentite;
  • Nel blocco condizionale (condizione IF/SE), per eseguire un comando che si chiede se una determinata variabile X è: uguale / maggiore / minore / maggiore o uguale / minore o uguale / diversa rispetto ad un valore costante o ad un’altra variabile Y (ricorda che questa è una delle operazioni più importanti);
  • Nel modificare l’oro, gli oggetti, le armi e le armature durante il gioco;
  • Nel modificare PV, PM, Exp, Stati, Livelli, Parametri, Abilità;
  • Nel trasporto, per impostare una posizione variabile (anzichè statica sulla mappa) dopo aver opportunamente registrato delle variabili che stabiliscono una posizione X, una posizione Y e un ID della mappa in cui trasportare il giocatore;
  • Nell’impostare la posizione di un veicolo o un evento, stabilendo (come nel caso del trasporto) due variabili che definiranno: una il valore della posizione X ed un’altra il valore della posizione Y;
  • Nel mostrare o spostare un’immagine/picture, per visualizzarla o spostarla ad una posizione X ed Y in base a dei valori variabili definiti da noi (un’altra delle operazioni più importanti);
  • Nell’ottenere informazioni sulla posizione (non disponibile in Rpg Maker VX), per registrare informazioni all’interno di una variabile che possono riguardare: l’etichetta terreno (i terrain tag, definiti in Database-> Tileset), l’ID di un evento, di un tileset o l‘ID di una regione (operazione importantissima da integrare con i blocchi condizionali);
  • Nel modificare i PV ed i PM di un nemico in battaglia.

Tutte queste operazioni sono disponibili fra i comandi di Rpg Maker! Cercatele, studiatele e, con un pizzico di ingegno, vi stupirete di quello che vi permetteranno di fare!

Per approfondire gli svariati metodi di utilizzo delle variabili consulta la mia Guida all’uso avanzato delle variabili integrato a Plugin e Call Script.

Call Script utili con le variabili (Rpg Maker MV)

Assegnare una stringa ad una variabile (1 è l’ID della variabile selezionata):

$gameVariables.setValue(1, “Testo da registrare nella variabile 1”);

 

Assegnare un valore ad una variabile (1 è l’ID della variabile selezionata, 13 il valore):

$gameVariables.setValue(1, 13);

 

Condizione SE tramite call scipt di una variabile (1 è l’ID della variabile selezionata):

$gameVariables.value(1) == 0
Uncategorized

Guida all’uso avanzato delle variabili integrato a Plugin e…

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