L'uomo non ha trattato bene la Terra e l'atmosfera è al collasso!
Ambientato in una città astratta, in continuo cambiamento, INFART è un gioco CORRI E SCOREGGIA in cui dovrete mangiare il più possibile verdure, evitare gli hamburger ed i buchi nella strada che si sono creati in seguito ai cataclismi.
INFART è un videogioco a scorrimento orizzontale - un'infinite scroll - il cui mondo evolve nel tempo: salta i buchi, evita gli hamburger più che puoi, altrimenti ESPLODI! E per saltare più in alto hai un'unica, irresistibile risorsa: una scoreggia ben assestata che ti spinge verso il cielo.
Il pianeta Terra al Game Over
Il gioco ironizza volutamente sulla correlazione tra cibo, cambiamenti climatici e diritti dell'uomo. Si vuole sensibilizzare in merito ad un mondo (il 2020) in cui una parte degli esseri umani soffre di patologie legate al sovrappeso mentre l'altra parte è malnutrita.
Non solo: la supply chain del cibo, in particolare della carne - qui rappresentata dagli hamburger - è correlata direttamente con la perdita della biodiversità, l'inquinamento dell'aria, la scarsità di acqua in alcuni paesi e lo sviluppo di batteri resistenti agli antibiotici.
Molte associazioni internazionali di rilievo, tra cui OMS, FAO, Academy of Nutrition and Dietetics, suggeriscono di preferire diete green.
La città che si ricicla all'infinito
Un infinite scroll ha un problema di fondo: il mondo non può essere infinito davvero, perché la memoria di uno smartphone non lo è. La città di INFART è quindi un'illusione costruita con una manciata di sprite riciclati per sempre.
Funziona così: i palazzi non vengono mai creati e distrutti durante la partita. Esiste un piccolo gruppo fisso di blocchi e, quando uno esce dallo schermo a sinistra, viene immediatamente teletrasportato a destra, agganciato subito dopo l'ultimo della fila. La posizione di ognuno è sempre calcolata a partire da dove finisce il precedente:
const baseDistance = this._lastGrattacieloX + this._lastGrattacieloWidth;
const randomDistance = Numbers.randomBetween(0, this._maxGrattacieloPositionOffset);
grattacielo.x = baseDistance + randomDistance + extraGap;Questo riuso continuo aiuta anche a consumare meno batteria del telefono: non c'è allocazione di memoria a ogni frame, solo gli stessi oggetti che girano in tondo. Ogni blocco si muove inoltre più o meno velocemente in base a un parallaxFactor, ed è da qui che nasce la sensazione di profondità della città sullo sfondo.
E i buchi nella strada? Non sono casuali: vengono aperti con metodo. Ogni venti riposizionamenti il gioco inserisce un varco la cui larghezza viene pescata da un intervallo (larghezzaBuchi) che si allarga con il passare dei metri — assieme alla velocità di corsa. È una difficoltà che cresce in modo deterministico e mai impossibile: il buco non supera mai una soglia massima oltre la quale non saresti più in grado di saltarlo.
La fisica della scoreggia: un 3D che non c'è
La scoreggia non è solo una gag: è il sistema di propulsione del gioco, ed è anche il pezzo graficamente più curato. Ogni spinta emette una nuvola di particelle che sembra avere volume e profondità, pur essendo fatta di semplici sprite piatti in 2D.
Il trucco è dare ad ogni particella una coordinata Z fittizia e una vera proiezione prospettica. A ogni frame la particella si avvicina o si allontana lungo questo asse immaginario, e la sua dimensione viene corretta con la formula classica della prospettiva:
this._z += this._vz * dt;
const persp = this._focalLen / (this._focalLen + this._z);
scale *= persp; // più vicina alla camera = più grande
this._sprite.zIndex = (this._focalLen - this._z) | 0;Con una lunghezza focale di 600, le particelle che "volano verso di te" si ingrandiscono, quelle che si allontanano rimpiccioliscono, e lo zIndex calcolato dalla profondità le mette nell'ordine giusto l'una rispetto all'altra. Aggiungendo una dissolvenza che le fa comparire e svanire dolcemente e un blend mode in modalità screen, si ottiene uno sbuffo gassoso tridimensionale credibile senza scomodare WebGL o shader: matematica elementare al servizio di una risata.
Le caratteristiche di INFART
- Un livello completo a difficoltà incrementale
- Potenziamenti divertenti
- Un sacco di scoregge
- Colonna sonora originale, composta dallo sviluppatore
- Il personaggio principale è disegnato a mano su acquerello
- Un mondo in continuo sviluppo che viene generato casualmente
- Ottimizzato per l'utilizzo della batteria dello smartphone
- Esploderai dalle risate!
Un videogioco interamente gratis, open source, e senza pubblicità
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: