Trailer di Deckfall
Deckfall è un puzzle game in prima persona, sviluppato in Godot Engine e ispirato ad un livello di Superliminal. Il giocatore si trova su una astronave sul punto di collassare e dovrà percorrere un corridoio (quasi) infinito in cerca di una via d'uscita.
Il gioco è disponibile sia su itch.io (come build) che su github (progetto completo e build)
Deckfall gira su Windows, macOS e Linux. Per i sistemi Windows è
sufficiente scaricare e avviare il file eseguibile
deckfall.exe. Per gli altri sistemi si può avviare il
gioco all'interno dell'editor di Godot 4.4.1!
deckfall-v1.0.exeGodot_v4.4.1 e trascina il file
deckfall.zip nella finestra
installa: il motore spacchetterà e caricherà
automaticamente il gioco in qualche minuto.
F5 se sei su windows o
Command + D se sei su macOS
Il gioco è disponibile in italiano e in inglese, questa impostazione
si trova solo nel menù iniziale e non sarà modificabile a gioco
avviato. Inoltre dal menù di pausa (premi ESC) è
possibile aggiustare la sensibilità del mouse e modificare il livello
di qualità.
Il progetto è rilasciato con diverse licenze definite nel dettaglio all'interno del file LICENSE📃. Riassumendo, le licenze si dividono in:
Tutte le risorse di terze parti sono accreditate nel file CREDITS📃
Per gli elementi strutturali (muri, pavimenti, scalini, porte…) e per i dettagli (tubi, barili, monitor…) sono stati utilizzati gli asset della libreria Sci-fi "Space Station Kit" di Kenney (licenza CC0). Mentre i modelli specifici e "dinamici" come i numeri luminosi pixellati e la leva d'emergenza sono stati modellati ad hoc in Blender.
...
La creazione delle stanze è stata svolta direttamente all'interno dell'engine
Corridoio principale
Vista sul corridoio che porta verso l'uscita di sinistra
Ostacoli che bloccano la porta
stanza ad angolo con scale che danno verso il corridoio
successivo
Ponte Zero, stanza finale
Per il sottofondo musicale è stato scelto il brano
"A Few Jumps Away" di Arthur Vyncke selezionato attraverso il
sito BreakingCopyright (licenza CC BY-SA 3.0).
Il sound elettronico e la leggera melodia al
pianoforte riprende l'ambientazione sci-fi, con un ritmo ciclico
tipico dei puzzle game.
Il brano è stato adattato amplificando i volumi nell'introduzione e riducendoli nel ritornello, per creare un loop omogeneo e costante. Durante il menù di start e per tutto il primo livello, si riproducono in loop solo i primi 20 secondi, caratterizzati da un accompagnamento ritmato senza la melodia. Entrando nel livello successivo la musica continua nella seconda parte, con la melodia al pianoforte e lo sviluppo vero e proprio del brano.
Durante la cutscene iniziale si può sentire un Jingle proveniente dal monitor durante il messaggio promozionale della compagnia spaziale. I brano "Crystals" di enviromaniac2 (CC0), selezionato per il suo sound estremamente allegro, completamente in contrasto con la situazione tragica e allarmante.
▶️ Ascolta il jingle! 🔵 premi per fermare
Sul muro di fronte alle scale la scritta This Way aiuta il
giocatore a capire di doversi buttare di sotto per proseguire il
gioco. Inoltre questa prima scritta introduce la possibilità che nel
gioco esistano dei graffiti che svolgono il ruolo di suggerimento per
il giocatore.
Sul muro sopra la finestra da cui si vede lo spazio, è presente una frase incisa che recita "You're looking in the wrong direction". È un riferimento ad un graffito Torinese scritto su un muro di fronte alla Mole Antonelliana.
ATTENZIONE SPOILER! (premi per rivelare) La frase rivela la soluzione del puzzle, infatti il graffito è visibile solo dopo che il giocatore avrà sbagliato per la prima volta
Sui muri delle stanze ad angolo è riportato in tempo reale il
conteggio dei tentativi del giocatore, con una incisione nello stile
dei tally marks.
Il segnale luminoso che indica l’uscita, mostra un omino di corsa identico a quello usato dal nodo CharacterBody3D del Godot Engine. Lo stesso omino è ripreso anche nel logo del gioco e nel segnale pavimento fragile, in cui però è raffigurato mentre precipita.
Durante l'introduzione, il monitor mostra alcuni messaggi di errore e di pericolo e tra questi si nascondo alcuni riferimenti numerici.
"…REATTORI 441 E 507"
"…PROTOCOLLO DI EVACUAZIONE 850-M"
Godot 4.4.1
La freccia rossa indica sempre l'uscita corretta per raggiungere le stanze successiva. Tuttavia la prima porta che il giocatore guarda è sempre bloccata, mentre la seconda è sempre libera. Per vincere occorre sempre guardare per prima nella direzione opposta alla freccia.
Il modo più semplice per realizzarlo è posizionare da subito un ostacolo su entrambe le porte, non appena il giocatore ne guarda uno si rimuove immediatamente quello opposto.
Ma come si crea questo meccanismo?
In Godot Engine esiste un Nodo chiamato
VisibleOnScreenNotifier3D capace di emettere un segnale
quando la sua area entra o esce dal campo visivo della
Camera.
Così facile? No, perché non si tratta di un vero
campo visivo che tiene conto eventuali ostacoli o muri, ma di
una regione tridimensionale proiettata dalla camera,
anche detta Frustum View.
Quindi il Nodo VisibleOnScreenNotifier3D si considera
"visibile" quando entra nel Frustum, anche se è nascosto da un muro e
non può essere visto direttamente dal giocatore.
Un chiaro esempio di oggetti che sono all'interno del Frustum View,
ma rimangono invisibili al giocatore a causa di un ostacolo
Per risolvere questo problema basterà rilevare quando tra il giocatore
ed il Nodo VisibleOnScreenNotifier3D si trova un ostacolo
visivo.
Ma in che modo?
La scelta più immediata è quella utilizzare un nodo
RayCast3D che parte dallo stipite della porta e punta
costantemente verso il giocatore.
Se il raycast collide direttamente con il Body del giocatore significa
che non ci sono ostacoli nel mezzo e che possiamo "fidarci"
del segnale emesso dal VisibleOnScreenNotifier3D.
Raycast bloccato dal muro
Raycast che colpisce il giocatore
BUG: il Raycast punta "costantemente" verso il
giocatore con la funzione look_at(), e rileva le
collisioni attraverso la funzione get_collider(). Questo
meccanismo sembra funzionare sulla carta, ma nella pratica non è
affidabile: il raycast rischia di non aggiornare la sua direzione in
tempo quando il giocatore si muove molto velocemente. In fase di
testing è stato provato che è possibile intravedere di sfuggita la
porta senza azionare il meccanismo, rompendo di fatto la regola
principale del puzzle.
Siccome le pareti della stanza e le porte sono elementi sempre fissi,
il raycast idealmente diventa "utile" solo oltrepassata la linea tra
porta e l'angolo del muro.
Si può quindi ottenere lo stesso meccanismo con un nodo
Area3D che copre proprio questa regione. Quando il
giocatore entra nella zona significa che non ci sono ostacoli tra lui
e la porta e per tanto possiamo "fidarci" del
VisibleOnScreenNotifier3D.
Quando si "cade" dalle scale si atterra in un corridoio
identico al quello di partenza, simulando una sorta di loop infinito.
Tra i gradini e il pavimento c'è un Nodo Area3D che
rileva quando il giocatore sta cadendo, emette un segnale e il gioco
reimposta la posizione al corridoio iniziale, nello stesso punto
"relativo". Si tratta infatti di due scene identiche duplicate, con un
Marker3D posto di fronte alle scale. Durante la caduta si
prende la posizione del giocatore rispetto questo marker e si calcola
quale sarebbe la posizione partendo invece al marker del corridoio
principale.
Scale che danno sul corridoio successivo
Vista dall'alto della mappa di gioco
Vista prospettica della mappa di gioco
Il sole proietta una forte luce all'interno della nave attraverso la finestra del corridoio principale. Roteando ad una velocità lenta e costante ricrea l'effetto del classico movimento di una nave in orbita.
Il sole è in realtà una combinazione di una Mesh luminosa a forma di
sfera ed un Nodo SpotLight3D, ossia un nodo che proietta un cono di
luce. La rotazione ha come fulcro proprio il centro della finestra.
Durante questa animazione anche il cielo stellato si muove nello
stesso modo e alla stessa velocità, attraverso la rotazione del
parametro sky_rotation del nodo
WorldEnvironment.