sabato 20 febbraio 2016

Riprodurre un video

Ciao ragazzi, eccomi qui con un tutorial dopo un pò di mesi.
Come ho spiegato nel precedente articolo, l'unico modo in cui per ora posso continuare a parlare del funzionamento di AGS è il blog.

Come avete letto dal titolo oggi si parla di come riprodurre video in AGS, una domanda che mi è stata posta molte volte.

In AGS esistono due funzioni adatte allo scopo: PlayVideo e PlayFlic.

PlayVideo serve per riprodurre file in diversi formati video (spiegherò quali nell'aritcolo), mentre PlayFlic per le animazioni Flic (formato .FLC) .

Premetto che sulle animazioni Flic non ho trovato molto, non sono abbastanza documentato, pertanto non so dirvi come possono essere create.
So che si tratta di un tipo di animazione obsoleto e utilizzato nelle avventure grafiche con Colour Depth a 8-bit, quindi molto datate. In questo tipo di giochi infatti PlayVideo non funziona.

Qualche riga sul funzionamento di PlayFlic verrà comunque spesa a fine articolo.

PlayVideo


I giochi con Colour Depth 16/32-bit possono utilizzare la funzione PlayVideo.
Vediamola nel dettaglio:

PlayVideo (string filename, VideoSkipStyle, int flags)

Questa funzione prende in input 3 parametri:
  • filename: una stringa, ovvero il nome del file da riprodurre (ad esempio "stanzarossa.avi");
  • VideoSkipStyle: una costante che ci verrà suggerita dall'editor e che rappresenta la modalità con cui al giocatore è permesso (o non permesso) di saltare il video;
  • flags: un numero intero per specificare alcuni aspetti della riproduzione del video (proporzioni e audio);

Filename


Esso altro non è che il nome del file compresa la sua estensione.
I file video devono essere inseriti nella cartella Compiled che trovate all'interno della cartella principale del gioco.

Va bene anche creare una o più sottocartelle dentro Compiled, ma, dovrete specificarla/le nel filename affinchè AGS lo possa trovare e riprodurre (ad esempio "introduzione/stanzarossa.avi" nel caso "introduzione" sia una sottocartella di Compiled).

I formati video supportati da AGS sono: AVI, MPG, OGG Theora o qualsiasi altro tipo di file supportato dal Media Player del vostro pc (su quest'ultimo punto non sono sicurissimo, ma così ho interpretato quello che l'help dinamico dice di PlayVideo).

Per quanto riguarda la compilazione del gioco (ovvero quando con F7 create l'eseguibile del vostro gioco finito), bisogna distinguere tra due tipi di formati video: gli OGG Theora e tutti gli altri tipi.

Per gli OGG Theora, AGS ha un supporto incorporato, quindi qualunque giocatore sarà in grado di vedere un video in questo formato.
I video OGG Theora sono inoltre integrati nel file EXE del gioco nel momento in cui il gioco viene compilato (accertatevi che il file abbia un estensione .OGV e sia posizionato nella cartella principale del progetto, non in Compiled).

Il secondo tipo di file che AGS può riprodurre è un qualsiasi formato supportato da Windows Media Player.
La lista include i formati AVI, MPG ed altri. Comunque, per fare in modo che questi tipi di formati vengano riprodotti, dovrete avere i codec video installati.
Per esempio, se create un video con codifica XVid, il player dovrà disporre del codec XVid installato.

A tal proposito, se già non ce l'avete, consiglio di scaricare e installare K-Lite Code Pack, pacchetto contenente codec video e audio per la riproduzione di tutti i formati video.

Attenzione però, questo tipo di video non può essere incluso nell'EXE del gioco, per cui dovrete darli al giocatore insieme all'eseguibile.

Questo significa che il giocatore avrà sia l'eseguibile che i video. Anche in questo caso, la struttura delle cartelle deve permettere ad AGS di trovare i file video che richiamate dal codice.

Ricapitolando: i video OGG Theora bisogna inserirli nella cartella principale del gioco (dove c'è anche il file .agf, non in Compiled) ed essi verranno incorporati nell'exe per cui anche a gioco compilato non avremo bisogno di una cartella apposita per i video che l'exe dovrà andare a caricare.

Gli altri formati invece devono essere inseriti in Compiled e non verranno incorporati nel gioco. Pertanto dovranno essere inseriti in una cartella apposita a gioco compilato e l'utente potrà anche aprirli volendo.

VideoSkipStyle


VideoSkipStyle definisce come il giocatore può saltare il video:
  • eVideoSkipNotAllowed: il giocatore non può saltare il video;
  • eVideoSkipEscKey: il giocatore può premere ESC per saltare il video;
  • eVideoSkipAnyKey: il giocatore può premere qualsiasi tasto per saltare il video;
  • eVideoSkipAnyKeyOrMouse: il giocatore può premere qualsiasi tasto o cliccare col mouse per saltare il video;

Flags


VideoSkipStyle definisce come il giocatore può saltare il video:
  • 0: the il video verrà riprodotto alle dimensioni originali, con audio AVI;
  • 1: il video verrà teso in altezza e larghezza a schermo intero, con le appropriate bande nere per mantenere le proporzioni e audio AVI;
  • 10: dimensioni originali, l'audio del gioco continuerà a venire riprodotto (audio AVI muto);
  • 11: teso in altezza e larghezza a schermo intero, l'audio del gioco continuerà a venire riprodotto (audio AVI muto);
Vediamo un esempio di come utilizzare questa funzione:

function room_Load()
{
  PlayVideo("stanzarossa.avi", eVideoSkipAnyKey, 0);
}


In questo caso, prima del caricamento della stanza verrà riprodotto il video chiamato "stanzarossa.avi". Il giocatore potrà saltarlo premendo un tasto qualsiasi della tastiera e verrà riprodotto alle dimensioni originali, con audio AVI;

Per comodità e ordine, nel prossimo esempio, invece di mettere il file del video semplicemente in Compiled, ho creato una cartella dentro Compiled chiamata "video".


function room_Load()
{
  PlayVideo("video/stanzarossa.avi", eVideoSkipAnyKey, 0);
}


Questo semplicemente per sottolineare che dentro Compiled possiamo creare più sottocartelle al fine di organizzare meglio il progetto.

Pensate se nel vostro gioco ci fossero decine di filmati, che guazzabuglio si verrebbe a creare considerando che in Compiled non ci sono solo i video.

Ecco un esempio di come può essere utilizzato un video.

Il codice è:

// room script file

function room_Load()
{
  PlayVideo("video/stanzarossa.avi", eVideoSkipAnyKey, 0);
}

function room_AfterFadeIn()
{
  aIce_Flow.Play();
  cEgo.Walk(200, 356, eBlock, eWalkableAreas);
}


In questo caso mi sono divertito a ricreare quell'effetto di filmato che si fonde con la grafica in-game visibile in alcuni titoli che utilizzano sfondi pre-renderizzati.

Prima del caricamento della stanza viene eseguito un filmato con l'audio (l'audio è del video, non è un file audio caricato in AGS).
Dopodichè viene caricata la stanza, che ha come sfondo l'ultimo frame del video cosicchè non si nota il passaggio dal video alla stanza.

AGS di default, carica la stanza con un effetto fade in. Se fosse stato così anche nel mio esempio, dopo il video avremmo visto il fade in della stanza, il che avrebbe rovinato l'effetto di continuità dal video al gioco.

Per togliere l'effetto fade in andate in General Settings, poi nella lista di opzioni, nella sezione Visual (verso la fine dell'elenco), cambiate l'opzione "Default transition when changing rooms" da "FadeOutAndIn" a "Instant".

Dopo il caricamento della stanza verrà riprodotta una traccia audio (questa volta caricata in AGS) e il nostro personaggio farà il suo ingresso nella stanza.

Ecco il risultato.



PlayFlic


Di questa funzione mi limiterò a riportarvi la traduzione direttamente dall'help dinamico.

PlayFlic (int flic_number, int options)

Riproduce un'animazione FLI o FLC. AGS cercherà un file nominato FLICx.FLC e FLICxFLI (dove x sta per il parametro flic_number) e se ne trova uno, lo riprodurrà.

 Il parametro options ha i seguenti significati:
  • 0: il giocatore non può saltare l'animaizone;
  • 1: il giocatore può premere ESC per saltare l'animazione;
  • 2: il giocatore può premere qualsiasi pulsante o cliccare col mouse per saltare il video;
  • +10 (es.10,11,12): non tendere in altezza e lunghezza, non ripeodurre a schermo intero, riproduci semplicemente alle dimensioni del file flc;
  • +100 non pulire lo schermo prima della riproduzione;
Il gioco andrà in pausa mentre l'animazione viene riprodotta.

Esempio:

PlayFlic(2, 1);

Riprodurrà il file flic2 e il giocatore sarà in grado di saltare l'animazione premendo ESC.

Ragazzi, anche per questa volta è tutto. Ci vedremo in futuro, purtroppo non so quando... il periodo è un pò così. Comunque sia, alla prossima!