Il logo del progetto open source Starfall

Starfall

Sei una stella caduta sulla Terra. Ti ritrovi in una selva oscura, in cerca della luce per tornare a casa...

Indice5 min di lettura

Sei una stella caduta sulla Terra. Ti ritrovi in una selva oscura in cerca della via per risalire verso casa. Sei priva di energie e ti servono le luci per recuperare le forze e riuscire a volare.

Attenzione, però, durante il cammino i buchi neri cercheranno di assorbirti!

Starfall è un videogioco a scorrimento orizzontale - un'infinite scroll - il cui mondo evolve nel tempo. La tua capacità di volare dipende dalla luce che interiorizzi e si può ridurre se inglobi troppo buio...

Una corsa di Starfall: la stella raccoglie luci nella foresta oscura

Sviluppato con un amico in un weekend

Ho sviluppato Starfall insieme ad un amico artista e fotografo: Marco Oppici.

Un giorno Marco è venuto a trovarmi, abbiamo fatto una passeggiata, mi ha mostrato alcune foto di alberi che aveva scattato in montagna e ci è venuta l'idea: perché non resti qui tutto il weekend e proviamo a sviluppare un videogioco in tre giorni con le tue foto?

E così è stato.

Marco è un mago di strumenti di fotoritocco, ha un occhio clinico che io ancora non ho, ed intanto che scrivevo tutto il codice, lui mi preparava gli sfondi in parallasse, disegnava la stella protagonista del gioco e la animava con Spriter.

Il menù di Starfall, con la stella disegnata e animata da Marco

Un mondo capovolto per far quadrare la fisica

Quando programmi un gioco, c'è una piccola tirannia che dai per scontata: sullo schermo l'asse verticale cresce verso il basso. Lo zero è in alto, e più scendi più il numero aumenta. Per un gioco in cui il tema è risalire verso casa, è una convenzione scomoda: ogni volta che vuoi spingere la stella verso l'alto devi ragionare al contrario.

In Starfall ho deciso di capovolgere il mondo una volta sola, all'avvio. La telecamera viene costruita con il suo punto di ancoraggio sul fondo dello schermo, così che il livello del terreno diventi lo zero e salire significhi semplicemente avere coordinate negative:

this._world.y = app.screen.height;        // il container parte dal fondo
this._world.pivot.y = this._world.height; // perno ancorato a terra

Il bello è che da quel momento la fisica torna a leggersi come la pensi: la gravità è un valore positivo che tira la stella verso il suolo, l'impulso del volo è un valore negativo che la spinge verso il cielo. Niente segni invertiti sparsi nel codice da ricordare a memoria: il ribaltamento è confinato in un punto solo, e tutto il resto diventa matematica diretta e leggibile.

Una stella che attira la luce

La meccanica al cuore del gioco è la raccolta della luce, e volevo che sentire l'attrazione fosse parte del piacere di giocare. Le luci non se ne stanno semplicemente lì ad aspettare di essere toccate: quando la stella si avvicina abbastanza, vengono calamitate verso di lei.

Finché sei lontano, ogni luce fluttua con un suo dolce moto sinusoidale. Ma non appena entri nel suo raggio d'attrazione, la fisica cambia: ad ogni frame la luce colma il dieci per cento della distanza che la separa dalla stella.

const distSq = dx * dx + dy * dy;
if (distSq <= ATTRACT_DIST_SQ || this._isInAttraction) {
  this._isInAttraction = true;
  this._worldX = Numbers.lerp(this._worldX, playerCenterX, 0.1);  // colma il 10%
  this._worldY = Numbers.lerp(this._worldY, playerCenterY, 0.1);
}

Questo tipo di interpolazione (lerp) crea un magnetismo morbido: la luce non teletrasporta addosso a te in modo brusco, ma nemmeno arranca — accelera dolcemente mentre ti si avvicina, e si aggancia. È un dettaglio matematico minuscolo, ma è esattamente ciò che dà alla raccolta quella sensazione soddisfacente di essere una stella che riassorbe la propria energia. Per coerenza tematica, è anche il motivo per cui i buchi neri funzionano in modo speculare: assorbono te invece di lasciarsi assorbire.

Le funzionalità di Starfall

  • Un livello completo a difficoltà incrementale
  • Tre elementi di sfida: luci catturate, tempo di volo, tempo di gioco
  • Colonna sonora originale, composta dallo sviluppatore
  • Disegni d'autore e composizione grafica con fotografie
  • Una breve, ma significativa storia
  • Ottimizzato per l'utilizzo della batteria dello smartphone

Un videogioco gratis ed open source

Questo gioco è interamente gratis ed open source: non utilizza alcuna libreria tracciante, nessun log per monitorare l'utilizzo da parte degli utenti, nessuna pubblicità.

Inizialmente lo avevo sviluppato in C# utilizzando MonoGame (l'evoluzione dell'ex XNA di Microsoft Xbox) ed era stato rilasciato sui vari store per smartphone e PC. Successivamente, per mancanza di tempo nel mantenere aggiornate tutte quelle versioni native, ho optato per una riscrittura completa in TypeScript in modo da erogarlo comodamente sul web e renderlo giocabile su tutte le piattaforme (smartphone, tablet, PC) all'interno del browser, senza problemi di installazione.

Oggi, questa versione web utilizza le seguenti librerie:

  • PixiJs, il motore grafico 2D web
  • HowlerJs, per la gestione dell'audio

Altri progetti open-source su cui ho lavorato

Hai domande o vuoi contribuire?

Il codice di Starfall è interamente open source su GitHub ed è aperto alla collaborazione da parte di tutti!