Il logo del progetto open source Mark in DeDark

Mark in DeDark

Solo con una candela, abbandonato davanti ad un castello buio per una prova di coraggio per diventare adulto...

Indice6 min di lettura

Mio padre mi ha stretto la mano troppo forte... come al solito. Poi mi ha lasciato lì, davanti al portone di un castello buio, con in mano una sola candela: è la prova di coraggio che farà di Mark un adulto.

Mark in DeDark è un gioco stealth dall'alto: ti muovi nell'ombra, eviti i nemici che pattugliano le sale, trovi la chiave e raggiungi l'uscita prima di essere scoperto. Tutto succede al buio, e l'unica cosa di cui ti puoi fidare è la fiamma che tieni in mano.

Una sala buia di Mark in DeDark illuminata solo dalla candela del protagonista

La storia di Mark

All'ultimo anno di università dovevamo realizzare un progetto per l'esame di Reti. Avevo già sviluppato il videogioco INFART, e mi sembrò molto più stimolante cimentarmi con qualcosa di nuovo: un videogioco multiplayer. L'idea era semplice: due giocatori partono agli estremi opposti di un labirinto, e vince chi raggiunge per primo l'uscita.

Scrissi il gioco ex novo e poi, attorno, tutta l'infrastruttura di rete: una lobby per scoprire gli altri giocatori sulla stessa LAN e un protocollo di sincronizzazione su UDP, con un payload che mi ero inventato per comunicare di continuo ad entrambi i client la posizione dell'avversario sulla mappa condivisa. Scelsi UDP proprio perché in un gioco in tempo reale la latenza conta più dell'affidabilità del singolo pacchetto: meglio una posizione leggermente datata che un movimento che arriva in ritardo. Fu l'unico esame in cui meritai 30 e lode.

Il menù di gioco di Mark in DeDark

Nell'oscurità: candela, chiavi e mostri

Il cuore del gioco è la candela che Mark tiene sempre in mano: illumina il suo intorno, è inesauribile e non si spegne mai da sola. È il suo unico punto fermo nel buio.

Le candele che si trovano sparse nei livelli, invece, servono a tutt'altro: si piazzano a terra come esca, per attirare, distrarre o bloccare i nemici e creare un varco. Sono centellinate apposta — se le sprechi, ti tocca ricominciare — e ogni livello parte sempre a inventario vuoto, come un piccolo sistema chiuso da risolvere.

Per uscire bisogna prima trovare la chiave che apre il portone di fine livello. Il buio non è mai un labirinto cieco da setacciare a tentoni: è uno strumento di tensione, sempre attraversabile, con i bracieri ad accendere i punti di riferimento e i bivi importanti. Il vero gioco è leggere le mostruosità che lo abitano e capire come scivolare oltre.

La candela di Mark proietta un cono di luce nel buio, con una candela-esca posata a terra

Il bestiario

Ogni nemico ha una sua personalità e un suo punto debole: imparare a leggerli è metà del gioco.

  • Zombie — pattuglia lento e meccanico, avanti e indietro, senza mai deviare. Non ti vede: basta studiare il ritmo dei suoi passi e attraversare al momento giusto.
  • Scheletro — ti insegue se ti scorge in linea retta, orizzontale o verticale. Passa quando è di spalle; se ti vede, esci dalla sua linea di vista e se ne andrà.
  • Taurus — un guardiano che carica in linea retta e sfonda i muri rompibili sulla sua traiettoria. Lo si può usare a proprio favore: indirizzalo contro un muro, una trappola, o addirittura contro gli altri nemici.
  • Ghostattraversa i muri e attacca solo se ti muovi: quando ti sta per oltrepassare, resta immobile e ti passerà attraverso senza farti nulla.
  • Bubu — il suo scopo nella non-vita è spegnerti le candele. Ha però paura dei bracieri grossi: attiralo verso uno e bloccalo dall'altra parte mentre passi.
  • Goblin — conosce sempre la tua posizione e ti insegue senza tregua. Peggio: diventa più veloce ogni volta che usi una candela.

Diversi nemici di Mark in DeDark, ognuno con la propria luce colorata

La pipeline di rendering: un 2D che finge il 3D

Questo è il videogioco che, ad oggi (2026), per me è stato il più complesso da sviluppare: cerca di renderizzare un mondo in 2D fingendo il 3D, e la gestione di luci e ombre è stata la parte più impegnativa.

L'immagine finale nasce dalla sovrapposizione di tre layer: il pavimento, una lightmap di sole ombre, e gli oggetti (muri, pilastri, personaggi). Ogni layer è illuminato con il normal mapping: una mappa delle normali dà volume e rilievo alle superfici, così muri e personaggi sembrano scolpiti dalla luce anche se sono semplici sprite piatti.

Le ombre morbide vengono proiettate in tempo reale dalla candela e da ogni altra sorgente, eredi della magnifica libreria Penumbra — che nella versione originale usavo per MonoGame e che ho riscritto e rielaborato per il mondo TypeScript. Il tocco finale è che ogni entità emette la propria luce colorata e animata: il viola dello scheletro, il rosso acceso del Taurus quando carica, il verde menta del ghost. È il dettaglio che, più di ogni altro, dà al castello la sua atmosfera.

Il potere dell'amicizia

Ho sviluppato questo gioco insieme ad un amico architetto, fotografo e artista: Marco Oppici, che ha curato in toto la direzione artistica e ha disegnato a mano ogni singolo asset. È stato un periodo di confronto tanto bello quanto impegnativo: la sfida più grande è stata conciliare la sua ambizione visiva fatta di normal map, illuminazione dinamica, ombre proiettate, con i tempi di sviluppo e la voglia di pubblicare il gioco prima di diventare nonni. Ogni asset grafico, in fondo, è anche un requisito tecnico per la pipeline di rendering: dietro ogni texture che vedete c'è stata una trattativa tra ciò che era bello e ciò che era sostenibile da realizzare.

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:

  • 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 Mark in DeDark è interamente open source su GitHub ed è aperto alla collaborazione da parte di tutti!