Billy Basso e la creazione di Animal Well

Alla GDC 2025, Billy Basso è salito sul palco per raccontare lo sviluppo di uno fra i giochi più apprezzati del 2024, Animal Well, e si è presentato dettando fin da subito il tono tra il serio e il faceto del suo talk. Prima ha elencato i suoi dieci anni di lavoro nel settore, trascorsi per lo più su giochi educativi e mobile, con passaggi in Netherrealm, Level X e Chicago Quest, poi ha mostrato l’immagine di un “cubo di diarrea”, una sua piccola creazione mai usata nel gioco ma che aveva messo assieme per un vecchio talk in cui parlava di simulazione di fluidi. E io adesso voglio un cubo di diarrea da tenere sullo scaffale qui alle mie spalle. Comunque.  

Lo sviluppo di Animal Well ha richiesto sette anni, ma nei primi quattro si trattava di un progetto portato avanti nel tempo libero, da un Basso che aveva un lavoro da ufficio. Lo sviluppo a tempo pieno è stato quindi solo negli ultimi tre anni, intrapreso quando Basso ha deciso di aver creato abbastanza e di avere messo da parte soldi a sufficienza per poterci provare sul serio. Ha sviluppato il gioco su un motore custom in C++, senza middleware o librerie di sorta, occupandosi lui stesso di tutte le conversioni sulle varie console. L'approccio di Basso allo sviluppo del gioco è nato dalla frustrazione di aver trascorso anni in grossi team nei quali sentiva di non stare creando qualcosa di suo e, allo stesso tempo, di non essere mai riuscito a concludere un suo progetto personale. Per questo, con Animal Well, ha deciso di provare a fare qualcosa che si sentisse sicuro al 100% di poter completare. Niente modelli 3D, insomma, e in generale voleva evitare di dover imparare qualcosa di nuovo che non fosse certo di poter padroneggiare. Poi, certo, l'idea era anche di creare un gioco breve, che durasse un'ora e che avrebbe sviluppato in solo sei mesi. E non è andata proprio così.

Basso ha anche mostrato alcuni dei suoi primi esperimenti che non sono andati da nessuna parte. Un gioco, Travel Mouse, con un topino che camminava su un vettore seguito dalla forza di gravità, che si adattava alla sua posizione, e che ha abbandonato perché non era un programmatore abbastanza bravo per completarlo. Un altro, Color Fight, in cui si crea arte astratta ma che è anche uno sparatutto twin stick in cui si dipinge e distrugge allo stesso tempo. O qualcosa del genere. Perfino un motore grafico 3D che Basso stesso definisce come una “pessima alternativa a Unity”. Tutti esperimenti fatti senza avere un progetto chiaro in mente ma che gli sono serviti, ha spiegato, per imparare molte cose, capire come creare sistemi e come crearsi da solo la sua tecnologia. Il lavoro di programmazione vero e proprio per Animal Well si è svolto in ambiente Visual Studio e Basso ha creato mano a mano i tool che gli servivano. Ad esempio, l’editor di livelli è integrato al gioco, attivabile e disattivabile. La grafica in pixel è stata creata tramite Aseprite, per quanto una versione modificata da Basso stesso per gestire ed esportare il suo formato di animazioni. E per l’audio ha usato Reaper. E la gestione della produzione, dei task di design, delle cose da fare? File di testo aperti in Notepad sul desktop, che neanche salvava, si limitava a tenerli aperti e ad eliminarli quando aveva finito. “Windows mi chiedeva se volevo salvare e gli dicevo di no”

Un pazzo.

L’editor per la creazione delle schermate di gioco aveva tre diversi livelli di utilizzo. Per modificare le singole schermate, c’era un tool in stile Mario Maker, in cui Basso poteva dipingere i singoli tile usando la palette di tutti gli sprite presenti nel gioco. L’editor aveva un po’ tutte le funzioni di Photoshop e pure le icone, di Photoshop, rubate dai file d’installazione. Con agile mossa, Basso poteva spostarsi sul secondo livello del suo editor, da cui assemblava il mondo muovendco in giro le singole schermate a colpi di drag & drop. Il mondo di Animal Well è un grosso quadrato da 16X16 perché “ogni stanza ha un ID, da un singolo byte, per un totale massimo possibile di 256 valori”. Una costrizione stabilita in partenza anche per avere un limite ed evitare che il gioco crescesse troppo in dimensioni, andando fuori controllo. Di contro, proprio perché aveva queste dimensioni fisse, Basso si è potuto concentrare sulle singole stanze, rendendole le più dense possibili. “Credo che i limiti siano un’ottima cosa, che ti spinge in direzioni più creative.”  

E poi c’era il terzo livello dell’editor. All’inizio dello sviluppo, Basso aveva un singolo foglio sprite che apriva e in cui andava a disegnare pixel. Poi programmava le coordinate dello sprite appena disegnato in un file C++ che indicava dove farlo apparire. A un certo punto, però, ha deciso di fare una cosa un po’ più sensata e ha programmato un editor per gli sprite. Così, invece di dover programmare le coordinate, poteva disegnare un riquadro attorno allo sprite e impostare delle flag che indicassero, per esempio, se aveva delle collisioni o se era un pezzo di pavimento solido su cui si cammina. E poi ha programmato uno sprite packer più in linea con, dice lui, quelli che sono gli standard del settore, grazie al quale può infilare tutti gli sprite in una cartella e darli in pasto a un algoritmo. Solo che c’era tutta una parte di gioco che aveva creato col metodo vecchio e non si è messo a rifare tutto da capo, quindi la gestione degli sprite di Animal Well è un mix di materiale “legacy” proveniente dal primo metodo e materiale creato con l’editor più robusto e sofisticato. E questo è un tema di tutto lo sviluppo del gioco: ogni volta che gli serviva un metodo per creare qualcosa, imparava sul campo, dapprima in maniera molto raffazzonata, poi raffinando e creando strumenti più precisi, ma lasciando dentro tutto quanto.

Fra le varie feature ideate da Basso per creare la grafica del gioco c’è per esempio un sistema di animazioni proprietario, in parte legato alla decisione di non avere alcun tipo di stringa testuale nel gioco ed evitare il data mining, fra le altre cose appoggiandosi molto anche sulle animazioni procedurali. Per esempio, ha mostrato come alcune creature siano composte da animazioni fatte a mano per le zampe anteriori e posteriori, unite fra loro da una sorta di tubo che viene animato dinamicamente. Ma gran parte del lavoro nel definire il look di Animal Well lo fanno i filtri visivi. In questo senso, l’aspetto interessante è che non c’è un singolo filtro che crei da solo la resa finale del gioco, è più un mix di decine e decine di accorgimenti, tant’è che nel suo talk Basso ne ha approfonditi solo alcuni. 

Per esempio ci sono le ombre dinamiche, generate in vari modi e su strati diversi, con un massimo di sedici punti di proiezione che mescolano fondali, parti in primo piano, sprite in movimento, unendo tutto per ottenere l’effetto definitivo. E ancora, l’uso del blur sugli oggetti, filtrato da rumore video, o da un effetto di dithering, il normal mapping applicato a tutti gli elementi dei fondali, le fonti di luce… e il bello, spiega Basso, è che essendo tutto dinamico e generato in tempo reale, le risorse occupate sono minime.  

Un altro effetto che molti hanno apprezzato è quello dell’acqua, che in realtà, ha spiegato Basso, è molto semplice: “In ogni schermata, c’è una variabile che definisce il livello dell’acqua. Ed è un byte. La risoluzione del gioco è 320X180, quindi il livello dell’acqua non è mai più di 180”. Per ogni singola schermata, Basso ha impostato quella variabile, dopodiché viene renderizzata la schermata senza acqua, poi una seconda passata di render in cui viene creata la stessa schermata capovolta a partire dal livello dell’acqua e infine si applica un po’ di matematica per distorcere le coordinate UV, con un effetto di dissolvenza mano a mano che ci si sposta verso il basso. Tutto qui. Più complesso, invece, il sistema dei fluidi usato per cose come il fumo e gli spruzzi della cascate. Si tratta di una simulazione Navier-Stokes in 2D, che Basso ci fa sapere essere spiegata molto bene nel libro GPU Gems Volume 1, del 2004. “Quindi, insomma, non è esattamente tecnologia all’avanguardia”.

Una caratteristica di come è strutturato Animal Well, poi, sta nel fatto che l'intero gioco viene caricato in RAM, in modo da evitare qualsiasi genere di caricamento durante il gameplay. L'unico caricamento è in avvio, a causa della necessità di decomprimere l'audio, e viene comunque fatto appoggiandosi sui thread, in modo da rendere la cosa più veloce possibile e dare la sensazione di un vecchio gioco su cartuccia. Inoltre, gli asset sono crittografati in una maniera molto specifica, al fine di impedire il data mining. Il tipo di crittografia utilizzato da Basso è la AES, che ha la comodità di essere supportata via hardware da praticamente qualsiasi CPU moderna. I file di Animal Well vengono crittografati offline, mentre il gioco è in fase di compilazione, e la chiave per la decrittazione prende la forma del giocatore che risolve gli enigmi del gioco. Le varie azioni del giocatore, essere passato da questa o quella parte, aver usato o meno il tal oggetto, vengono interpretate dal sistema come password da utilizzare per decrittare gli asset. Va detto che all'atto pratico evitare il data mining non è comunque servito a far "durare" molto il gioco: sono comunque bastati pochi giorni perché l'hive mind di internet risolvesse completamente Animal Well. Ma perlomeno non è accaduto tramite ingegneria inversa.

L'ultimo argomento toccato da Basso nel suo talk è quello delle dimensioni del gioco, che hanno stupito un sacco di gente: appena 33 MB, com'è possibile? In realtà, spiega Basso, non è nulla di sconvolgente: "Quando crei il tuo motore senza appoggiarti su librerie esterne, le dimensioni rimangono contenute". Il fattore forse più decisivo è stato l'utilizzo di pixel art a bassa risoluzione, perché le texture diventano davvero minuscole. "In 320X180. Una texture è infinitesimamente più piccola di una texture a 4K." L'audio è invece costituito da file Vorbis compressi, ma la musica è relativamente poca, si tratta soprattutto di musica d'ambiente. Inoltre, aggiunge, "Ho lavorato molto con la creazione dinamica, sfruttando quindi tantissimo gli asset presenti nel gioco." E ancora, non c'è testo e tutto, quando possibile, è in formato binario. A conti fatti, "Se avessi saputo che questa cosa avrebbe colpito così tanto la gente, mi sarei sforzato di farlo ancora più piccolo. Nell'eseguibile ci sono alcuni asset inutilizzati e levandoli sarei magari potuto scendere a 25 MB."

Pubblicato il: 17/04/2025

Abbonati al Patreon di FinalRound

Il tuo supporto serve per fare in modo che il sito resti senza pubblicità e garantisca un compenso etico ai collaboratori

2 commenti

Gioco fantastico, e fantastico anche poter rivivere con lo sviluppatore le scelte e il percorso intrapresi per arrivare a questo risultato

info@finalround.it

Privacy Policy
Cookie Policy

FinalRound.it © 2022
RoundTwo S.r.l. Partita Iva: 03905980128