XMoonPie

Informazioni
Abbiamo creato questa piccola dimostrazione durante il secondo anno del corso di programmazione all'Accademia Italiana Videogiochi. Lo scopo dell'ultimo anno era di creare un gioco funzionante. Questo è il risultato
In questo programma abbiamo messo tutte le nostre abilità e le nozioni che abbiamo appreso: dall'architettura del software agli shaders, dal rendering alla fisica e così via. L'obiettivo del progetto non era quello di creare un motore da zero perchè un intero anno non sarebbe bastato, invece per lo scopo abbiamo usato diversi tool pre-esistenti. Imparare a integrare sistemi e librerie differenti è un'importante lezione.

Creare un gioco è dannatamente difficile, sopratutto perchè è praticamente impossibile avere un'idea veramente originale. Non importa cosa fai ti ritroverai a copiare idea da qualche parte.
Il processo di design si è incappato di diversi problemi: non avevamo asset o abilità nel creare modelli o texture. Il corso è diviso in due classi: programmazione e grafica. Ma la classe di grafica era impegnata con i loro progetti perciò abbiamo dovuto lavorare da soli. Per questo motivo abbiamo usato primitive come NPC. Il livello è stato creato da Fabrizio che ha imparato un po' di 3D Studio e ha modellato le piattaforme, le colonne e così via.

Siccome abbiamo usato primitive all'inizio il gioco era chiamato "Sfere contro Cubi" e l'idea originale prevedeva una storia drammatica di un Cubo che si innamora di una Sfera ma le rispettive famiglie sono in guerra da generazioni e non permettono il matrimonio. Quindi intraprendono un viaggio per la lotta per il loro amore. Con qualche diabolico colpo di scena finisco per suicidarsi entrambi per il loro amore... originale, non è vero?
No, per niente.

In ogni caso il gameplay era più simile a un'arena, qualcosa ispirato da Spectraball. Avevamo pensato di creare differenti NPC: gli esagoni velenosi, gli ottagoni metallizzati e così via. Avevamo pure un modello funzionante di un Tesseratto illusionista che sarebbe dovuto essere il boss finale.
Per un anno intero questo programma è stato usato per sperimentare diverse tecniche: qualsiasi idea abbiamo avuto si è poi materializzata nel gioco. Per questa ragione è cambiato radicalmente diverse volte e abbiamo perso un sacco di tempo per lavorarci.
Nelle ultime 4 settimane abbiamo deciso di partecipare all'Eurogamer Exposition per mostrare la demo alla Games Career Fair di Settembre 2011 a Londra. Poichè il tempo non era sufficiente abbiamo dovuto togliere tutto questo materiale, sfortunatamente, e il gioco in pratica è frutto di quelle 4 settimane.

Dati Tecnici
Name: XMoonPie
Sviluppatori: Marco Agricola, Fabrizio Marocchino, Enrico Moretti, Ruggero Riccobene
Lingue/Tecnologie usate: C++, Ogre3D, Nvidia Physx, CEGUI, OIS, IrrKlang, Boost, Bazaar, Doxygen, Visual Studio, Eclipse, MinGW
Piattaforme Windows Linux (tramite Wine)
Releases: 1.0
Licenza: GPLv2
(leggi sotto riguardo gli assets)
Il GIoco
È facile: devi raggiungere l'uscita. Semlice. Però c'è un cancello che ti impedisce di oltrepassare.

"Tu non puoi passare!"

Per passare il cancello devi attivare l'altare. Quando il giocatore o uno dei cubi passa attraverso di esso il cancello si spegne. Ma i cubi sono furbi (un po' quadrati di testa) ed evitano di salirci.
Il temibile altare che spaventa i cubi

Per ovviare a questo problema bisogna andare a destra ed evitare i muri di fiamme per raggiungere il power-up del Buco Nero.
Fiamme! Fiamme ovunque!
La piattaforma dove prendere il Buco Nero.

Fatto ciò bisogna usarlo nell'altare per oltrepassare il cancello.
Venite, piccoli cubi... venite a me.

E libertà, finalmente!
Puoi continuare al prossimo livello!
Libertà, finalmente
(Non c'è alcun livello successivo, ma non ditello alla Sfera...)

Durante il gioco i cubi tenteranno di colpirti e farti perdere punti vita (la barra verde che attorciglia il drago a destra, sulla sinistra). Poichè questa è una dimostrazione non si può morire quandi raggiungi i 0 punti ferita ma è possibile morire cadendo dal livello, quando ciò accate questo si resetta: perdi l'abilità del Buco Nero se l'hai ottenuta, riottieni tutti i tuoi punti ferita e punti mana e riparti al centro dell'livello.
Quando un cubo viene colpito dall'abilità Laser o cade fuori dal livello esso muore donando parte della sua energia come punti Mana, viene quindi incodato per riapparire (tutti i cubi riappaiono dopo un breve intervallo).

Abilità
In questa lotta per la sopravvivenza la Sfera ha imparato qualche trucco da usare contro i cubi malvagi. Tutte le abilità usano Mana (la barra blu che avvolge il drago di sinistra, a sinistra) e quando raggiungi 0 di Mana non puoi più usare le abilità.
Quando un cubo muore ricarica il tuo mana.
Tutte le abilità hanno un cooldown di qualche secondo.
Nome Costo e Tempo di Ricarica Descrizione Screenshot
Onda RepulsivaUn'invisibile forza di concussione 3 secs
10 Mana
L'abilità Repulsione spingerà via qualsiasi nemico. Usata bene può far cadere via i cubi dalle piattaforme. L'Onda Repulsiva in azione.
Luce Incandescente(Laser)Un cono di luce incandescente 5 secs
30 Mana
Dopo qualche secondo un cono di luce apparirà nella posizione della sfera e brucerà tutto ciò che incontra. Questa abilità può uccidere i cubi (che però rispunteranno dopo un breve intervallo). Il cono di luce illumina la tua via... e brucia la loro.
Balzo della Tigre(Dash)Balza veloce come un felino. 3 secs
3 Mana
Il balzo permette alla Sfera di muoversi rapidamente in avanti per superare qualsiasi ostacolo.
Quest'abilità non è un teletrasporto ma rende la Sfera velocissima per un breve periodo di tempo.
n/a (scarica il gioco o guarda il filmato)
Il Buco NeroL'oscurità più profonda. 12 secs
20 Mana
Questa abilità rilascia una bomba pulsante che crea un Buco Nero dopo 6 secondi. Il vortice nero attrarrà al suo interno qualsiasi cosa anche se in questa versione non infligge danno.
Questa abilità può catturare la Sfera. Il giocatore deve ottenere quest'abilità per completare il livello.
un vortice nero che attrae qualsiasi cosa.
Sviluppo
Come ho scritto questo è un progetto didattico. Lo scopo era quello di imparare le tecnologie, gestire l'architettura del software e le tecniche comuni per lo sviluppo dei videogiochi.
Il ciclo di sviluppo ha avuto di bisogno di un'intero ma il gioco è stato praticamente riscritto più volte e solo gli ultimi 3 mesi sono stati veramente produttivi. Non avevamo un leader prendendo tutte le decisioni assieme ma, scusate la mancaza di modestia, mi sono occupato io di tutte le cose carognose..

Il progetto è stato scritto da quattro persone perciò la prima cosa da fare è stato di settare a dovere un sistema di controllo versione. Siccome solo io avevo esperienza nel campo ho deciso e configurato un server (mio, personale) con Bazaar. Mi piace Bazaar
I miei colleghi si sono lamentati tanto per la sua complessità ma alla fine hanno capito quanto è potente. Il progetto ha avuto diverse evoluzioni, come ho scritto poco più sopra e ho cercato di tenere il codice pulito e in ordine quanto più possibile.
L'altro problema era Visual Studio. Non ho seguito la sua evoluzione ma benchè per il C# è l'unica reale opzione per il C++ questo programma è appena un giocattolo. Ho configurato il progetto per funzionare con Eclipse (da Ganymede) e Visual Studio. Eclipse è anni avanti a Visual Studio, non c'è storia.
Ma Eclipse non può lavorare col debugger e il compilatore di Visual Studio (ho visto qualche tentativo di far funzionare il compilatore, tramite nmake, ma non ho avuto il tempo di seguire questa strada) perchè il compilatore Microsoft ha il suo modo di gestire le cose. Per questa ragione il progetto è stato configurato per funzionare con MinGW. Sono stato in grado di fare qualche hack per far compilare Physx e Ogre col MinGW ma ho avuto qualche problema con le librerie standard per qualche strana interazione fra Ogre3D e il MingW.
Alla fine ho usato sia Eclipse che Visual Studio: Eclipse per scrivere il codice e Visual Studio solo come compilatore e debugger. Qualuno può pensare che è troppo lavoro ma è mia opinione che scrivere e progettare codice con Eclipse è troppo veloce rispetto a Visual Studio.
I miei amici hanno usato solo Visual Studio che io sappia.

Ho usato lo spettacolare Doxygen per generare una documentazione fatt a dovere dei commenti del codice e ho costretto i miei amici a usare i commenti fatti bene, alla fine abbiamo avuto un codice mediamente elegante.
Abbiamo usato altri strumenti, qualcuno specifico per una data libreria. Il nostro grande problema sono stati gli shader: imparare gli shader non è facile, usarli tanto meno e Ogre usa il suo sistema di shader che complica le cose. Adesso però ne capisco l'utilità, non è tanto dissime da quello che fa Unity3D col suo sistema di shaders.

Altro problema è stata la GUI: CEGUI è una libreria fantastica, una delle migliori che abbia mai usato fin'ora ma manca di strumenti funzionanti. Durante lo sviluppo dovevo usare due editor, di cui uno in beta e in ogni caso rivedere l'XML risultante a mano.

Insomma, abbiamo avuto il nostro da fare.

Risorse
Il gioco è disponibile qui (come archivio auto-estraente). Richiede le DirectX 9.0c (da Jun 2010), Microsoft VC++ Redistributable e Nvidia Physx.
Il codice sorgente è disponibile nel pacchetto completo comprensivo di tutte le librerie necessarie qui (archivio 7zip).

Un filmato di gameplay è disponibile su Youtube qui.

Licenza per gli Assets
Alcuni degli assets sono stati creati da noi (per lo più da Fabrizio) ma qualcuno è stato preso da Internet. Abbiamo perso i link originali da dove abbiamo scaricato i files ma abbiamo cercato solo file con licenza commercailmente libera o Creative Commons.
Se sei l'autore di qualche file e ci siamo sbagliati con la licenza per favore contattami: la rimuoverò dal sito.

Add new comment

Comment Text

  • Allowed HTML tags: <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
To prevent automated spam submissions leave this field empty.
CAPTCHA
Answer the question and don't bother me with spam.