» » » Tutorial al TheoAllen SBS (RPG Maker VX ACE) – Parte 1

Tutorial al TheoAllen SBS (RPG Maker VX ACE) – Parte 1

Per chi conosce i vari battle system alternativi di RPG Maker, salteranno in mente, parlando di Sideview, sistemi come il Takentai. È proprio al Takentai che si ispira il Battle System animato creato da TheoAllen, che non solo permette di creare animazioni dalle più semplici alle più elaborate, ma anche di aggiungere diversi effetti alle abilità dei battler (come colpi multipli o effetti globali) senza dovere installare script appositi.

Tuttavia, le molteplici opzioni che offre, oltre alla preparazione necessaria per adoperarlo, possono spiazzare chi non ha troppa fiducia nelle proprie competenze nel modificare script o cambiare notetag. Questa pagina si propone di spiegare a fondo le sue varie funzioni e cosa si può ottenere sfruttandole.

Il topic originale di TheoAllen, con i link di download dello script, esempi e patch, si trova qui.

Introduzione: Vanilla o TheoAllen?

Il battle system di default di tutte le versioni di RPG Maker ha battaglie con vista frontale, che presentano diversi vantaggi per chi vuole un’esperienza semplificata con il tool: l’unica grafica di cui c’è bisogno per i nemici è una semplice immagine statica per rappresentarli e il programma possiede già un’ampia galleria di animazioni per rappresentare gli effetti degli attacchi sui nemici, mentre quelli sui personaggi giocanti vengono rappresentati semplicemente con un flash a schermo. Con la giusta interfaccia e atmosfera, è possibile trattare un sistema frontale come se fosse una vera e propria visuale in prima persona dello scontro dal punto di vista del protagonista.

Il TSBS, come suggerisce il nome, è invece un sistema a vista laterale, che fornisce una visuale più “tattica” degli scontri. Mentre il gameplay è tecnicamente immutato, è possibile avere un “colpo d’occhio” della situazione vedendo da una prospettiva neutrale gli effetti degli attacchi degli eroi sui nemici e vice versa. La differenza che costituisce l’impegno maggiore tra il programmare battaglie in vista laterale è che oltre alla grafica dei nemici (che può essere animata o meno) bisogna anche creare una grafica per gli eroi, che sarà naturalmente animata.

Questo vuol dire che scegliere il sistema laterale vuol dire accettare l’impegno di creare e impostare nuove grafiche ogni volta che si vuole aggiungere un nuovo personaggio o tipo di nemico al database, e quindi dovrebbe essere riservata a progetti che si intende affrontare con serietà e della cui lunghezza si è già sicuri.

Impostare gli sprite

Se avete scaricato il progetto di esempio, noterete che nella cartella Battler sono presenti degli spritesheet.
Il modo in cui il TSBS gestisce gli sprite sheet è molto semplice: per associare degli spritesheet a un battler basta dargli il nome di quel battler seguito da un underscore (“_”) e un numero. In questo caso, i tre files dello screenshot saranno i fogli numero 1,2 e 3 del battler “Freya”.

Non c’è un limite a quanti fogli può avere uno sprite, e possono anche non essere consecutivi: ad esempio uno sprite potrebbe avere soltanto i fogli 1,2,3,5,6 e 7, e finchè il gioco non tenterà di caricare il foglio numero 4 non presenterà problemi.

Nella demo gli sprite sono disposti su una griglia 3×4: per usare fogli impostati diversamente dovete modificare le impostazioni nella sezione “Config 1” dello script, nello specifico le due righe seguenti:

Tenete a mente che ci sono due versioni diverse di Config nella versione 1.4 dello script: una in Indonesiano ed una in Inglese. Se volete usare quella in Inglese dovete disattivare le parti indonesiane (mettendo un cancelletto # davanti al titolo) e attivare (togliendo il cancelletto) quelle in inglese.

Infine, avrete anche notato che all’interno della cartella Battlers vi è la sottocartella “actors”. Lo script di Theo permette di organizzare i battler in sottocartelle per una migliore organizzazione: se il battler di un personaggio o nemico non si trova nella cartella Battlers basta aggiungere il tag <folder: nome> alle sue note.

Facciamo subito un esempio importando un battler dal MV e adattandolo in uno spritesheet:

Adesso che c’è uno spritesheet bisogna animarlo.

Creare sequenze di animazione

Nel progetto di default già è impostata una animazione di default per gran parte delle sequenze principali, ma per questo tutorial immaginiamo che non ce ne siano e che stiamo rifacendo tutte le animazioni da zero.

Questa parte in Config 2 permette di impostare le sequenze predefinite. Quella indicata in Default_Idle sarà la sequenza che eseguiranno tutti i battler nel loro stato normale.

Per creare nuove sequenze, si può semplicemente creare una nuova sezione nello script sotto “Moveset Addons” e copiare questo codice:

module TSBS
  New_Sequence = {
 }
  AnimLoop.merge!(New_Sequence)
end

 

Tra le parentesi graffe andranno tutte le nuove sequenze che vorrete aggiungere allo script.

Una sequenza è formattata in questo modo:

“Nome” => [
[impostazioni],
[comando],
[comando],
],
  • Nome: Il nome della sequenza. Deve essere unico; due sequenze con lo stesso nome si sovrascriveranno per esempio “Palla_di_fuoco”. Ricordate di includerlo tra virgolette.
  • Impostazioni: Tra le parentesi quadre dovrete mettere tre opzioni true o false, separate da virgole. La prima determinerà se l’animazione andrà in loop, ma funziona soltanto sulle animazioni continue (come quelle idle o legate a determinati stati). La seconda determinerà se all’inizio della sequenza il battler avrà un effetto Afterimage (una “scia”). L’afterimage può comunque essere attivata o disattivata durante la sequenza stessa. Il terzo valore infine determinerà se il battler verrà girato nella direzione opposta all’inizio della sequenza. Ad esempio, [false, true, false] sarà un’animazione che non verrà mai loopata e inizierà con l’effetto Afterimage sul battler.
  • Comando:  Le sequenze consistono in una serie di comandi che vengono eseguiti uno dopo l’altro. Più avanti verranno spiegate le funzioni di ciascuno.

Comandi Pose, Wait e Autopose

Il comando pose è il più basico per animare i battler:la sua funzione è quella di cambiare il frame dell’animazione corrente.

La sintassi del comando è:

[:pose, foglio, posa, attesa, icona]
  • Al posto di “foglio” e “posa”, inserite il numero del foglio e del frame da mostrare. I frame vengono contati da sinistra a destra e dall’alto verso il basso, iniziando dallo zero.

  • Attesa è il numero di frames (60 frames = 1 secondo normalmente) che passeranno prima che venga eseguito il comando seguente.
  • Icona rappresenta l’ID dell’icona del personaggio. Questo verrà spiegato più avanti. Se il parametro viene omesso, l’icona non verrà cambiata.

Ora, per fare un’animazione idle semplice possiamo animare il battler in modo che cicli tra le pose 0, 1 e 2.

In questo caso, la sequenza sarebbe:

  “K-idle” => [
  [true,false, false],
  [:pose, 1, 0, 10],
  [:pose, 1, 1, 10],
  [:pose, 1, 2, 10],
  [:pose, 1, 1, 10],
  ],

 

Tuttavia, la versione TheoAllen v 1.4 introduce un nuovo comando: autopose, che permette di far susseguire tra loro le pose di una riga orizzontale dello sprite sheet.

La sintassi è:

[:autopose, foglio, riga, tempo]
  • Foglio è, di nuovo, il foglio dello spritesheet da caricare
  • Riga è la riga dello sheet da animare. In questo caso, la numerazione parte da 1.
  • Tempo è il numero di frame che passeranno da una posa all’altra. Nonostante nello script sia indicato come wait, mentre l’autopose è attiva lo script non attenderà prima di eseguire i comandi successivi

Per evitare che la sequenza loopi subito dopo aver attivato l’autopose, bisogna farlo seguire da un comando wait.

La sintassi è:

[:wait, tempo]

Questo comando arresterà temporaneamente l’esecuzione dei comandi della seguenza per il numero di frame indicato nel parametro tempo, mentre i comandi precedenti continueranno a risolversi.

I comandi verranno eseguiti tutti contemporaneamente finchè non incontrano un comando “wait” o un comando che abbia un parametro “wait”.

La sequenza a questo punto dovrebbe essere qualcosa del genere:

  “K-idle” => [
  [true,false, false],
  [:autopose, 1, 1, 10],
  [:wait, 30],
  [:pose,1,1,10],
  ],

 

Questo è il risultato:

Animazioni personalizzate per battler specifici

Creiamo uno spritesheet per un nemico, adesso.

Mettiamo di voler creare adesso l’animazione che l’eroe, e soltanto l’eroe, eseguirà quando è ferito.

Dato che ci basta ciclare tra le pose della terza riga, basta questo:

  “K-pinch” => [
[true, false, false],
[:pose, 1, 6, 10],
[:pose, 1, 7, 10],
[:pose, 1, 8, 10],
[:pose, 1, 7, 10],
],

Ma ecco il problema: se mettiamo K-hurt come sequenza predefinita, anche i nemici la useranno quando avranno i PS bassi.

Questo può risultare una bella seccatura per chi deve occuparsi degli spritesheet, visto che tutti i nemici dovranno avere tutte le pose. Ma anche per chi non vuole mettere più animazioni ai nemici, per stile o costrizioni di tempo.

Per evitare questo problema, basta sostituire nelle impostazioni le animazioni di default con quella idle:

E, nel Database, assegnare all’eroe la sequenza K-pinch creata come sequenza default con PS bassi.

<sideview: Eric>
critical: K-pinch
</sideview>

Il tag sideview permette di assegnare uno spritesheet a un eroe o nemico (in questo caso, l’eroe utilizzerà gli spritesheet nominati “Eric”) e di assegnargli sequenze diverse da quelle di default. In questo caso, tutti useranno la normale posa di Idle quando hanno i PS bassi, ma l’eroe userà la sequenza K-pinch.

Questo è il risultato: sia l’eroe che il nemico sono in condizioni critiche, ma solo l’eroe ha cambiato sequenza.

Icon Sequence

Il TheoAllen permette di usare le icone del database come sprite durante le battaglie.

In questa parte della sezione Config 2 potete definire delle “Icon Sequence”, ovvero impostare delle semplici posizioni in cui far apparire successivamente le icone. La sintassi è quella mostrata nello screenshot.

  • Key è un nome univoco da dare alla sequenza.
  • Origin è il punto di “ancoraggio” dell’icona, ovvero il punto intorno al quale viene fatta ruotare. 0 corrisponde al centro, da 1 a 4 corrispondono ai quattro angoli (rispettivamente superiore sinistro, superiore destro, inferiore sinistro e inferiore destro).
  • x e y sono le coordinate del punto di origine dell’icona rispetto allo sprite del battler.
  • z può essere true o false: se true, l’icona verrà mostrata davanti al battler, se false dietro.
  • start, end e dur permettono di animare l’icona facendola ruotare intorno al punto d’origine. Start indica la rotazione iniziale, End quella finale e Dur il numero di frames che impiegherà il movimento. Se non volete che l’icona si muova, date a Start e End lo stesso valore.
  • index, infine, è il numero dell’icona da mostrare. Se è -1 o -2 l’icona sarà quella della prima o della seconda arma equipaggiata dal battler. Se inserite una stringa di testo verrà interpretata con un eval, quindi potete usare anche variabili.

In questo caso c’è già la sequenza Swing, che fa apparire l’arma in mano al battler ruotata di 60 gradi in senso antiorario e nell’arco di 6 frame la fa ruotare di 130 gradi in senso orario. L’aspetto è questo:

Di per sè non è male, il passo seguente è aggiungere più dinamismo facendo sì che l’eroe si avvicini effettivamente al nemico per colpirlo.

I comandi di movimento

Per spostare i battler, TheoAllen mette a disposizione svariati comandi:

[:move, x, y, dur, jump, (height)]  Sposta il battler alle coordinate indicate
[:slide, x, y, dur, jump, (height)] Sposta il battler in orizzontale e/o in verticale della distanza indicata
[:goto_oripost, dur, jump] Riporta il battler al punto di partenza
[:move_to_target, x, y, dur, jump, (height)] Fa arrivare il battler alle coordinate indicate, relative al bersaglio
[:target_move, x, y, dur, jump, (height)] Uguale a move, ma sposta il bersaglio
[:target_slide, x, y, dur, jump, (height)] Uguale a slide, ma sposta il bersaglio.
[:target_reset, dur, jump] Uguale a goto_oripost, ma sposta il bersaglio.

Tutti questi comandi condividono parametri simili:

  • x e y sono le coordinate a cui spostare il battler, assolute o relative a seconda del comando.
  • dur è la durata del movimento in frames
  • Se jump è diverso da 0, il battler si muoverà con una traiettoria ad arco, come se stesse facendo un salto. Il valore determina la velocità iniziale, e l’apice del salto sarà sempre a metà del movimento. Questo vuol dire che l’altezza massima del salto dipende anche dalla durata.
  • height è un parametro che darà al battler un effetto pseudo-tridimensionale, disegnando la sua ombra quel numero di pixel più in basso e considerando quel punto per definire quali sprite verranno disegnati davanti o dietro di esso.

Per l’attacco dell’eroe quindi, creiamo una semplice sequenza usando un movimento e una sequenza icona.

  “Attacco” => [
  [false, false, false],
  [:move_to_target, 40, 0, 20, 10],
  [:wait, 24],
  [:pose, 3, 1, 0],
  [:icon, “Swing”],
  [:wait, 25],
  ]

E il risultato è questo:

Sembra soddisfacente, ma manca qualcosa. Nello specifico, il nemico non subisce danno dall’attacco!

I comandi target_damage e show_anim

I danni e gli effetti di attacchi, skill e item nelle sequenze del TheoAllen non sono inflitti automaticamente. Questo permette di infliggere danni ed effetti in un momento specifico della sequenza, ad esempio quando l’arma colpisce il nemico, o addirittura di infliggerli più volte durante la stessa sequenza.

Il comando per infliggere l’effetto della skill in uso al nemico è target_damage, e la sintassi è

[:target_damage, danno]

Il parametro danno è facoltativo: se viene omesso, verrà inflitto il danno di base della skill. Tuttavia è possibile sostituirlo in diversi modi:

  • Inserendovi un numero con il punto decimale, il danno verrà moltiplicato di quel numero. Per esempio [:target_damage, 0.6] infliggerà il 60% del danno normale.
  • Inserendo un numero senza il punto decimale, infliggerà danni ed effetti della skill che ha quell’ID nel database. Per esempio [:target_damage, 15] userà il danno della skill numero 15.
  • Inserendo una stringa (Una funzione tra virgolette) il danno sarà il risultato di quella stringa. È possibile inserire una formula di danno (Per esempio, “a.atk * 4 – b.def”) o anche un numero fisso (Ad esempio “100”)

Noterete che la sequenza non ha neanche eseguito automaticamente nessuna animazione. Per fare ciò si usa il comando show_anim:

[:show_animation, anim, flip, ignore_guard]

 

  • anim è l’ID dell’animazione da eseguire sul bersaglio. Se non viene specificato, verrà eseguita l’animazione di default della skill.
  • flip dev’essere true o false e determina se l’animazione verrà riflessa orizzontalmente
  • ignore_guard è anch’esso true o false e determina se l’animazione sovrascrive l’animazione di guardia. Di questa verrà parlato nella sezione dedicata agli stati.

Quindi, modifichiamo la nostra sequenza di azione con questi nuovi comandi:

  “Attacco” => [
[false, false, false],
[:move_to_target, 40, 0, 20, 10],
[:wait, 24],
[:pose, 3, 1, 0],
[:icon, “Swing”],
[:show_anim],
[:target_damage],
[:wait, 25],
]

E il risultato è:

Abbiamo creato una sequenza di attacco con i comandi di base: l’eroe cambia posa, si muove verso il nemico, agita la sua arma, esegue l’animazione ed infligge danno. Nelle sezioni successive del tutorial ci sarà un’occhiata più approfondita all’uso degli altri comandi e delle altre funzione del TheoAllen.

Leave a Comment