Si può giocare a Minecraft in Doom?
Quando le meccaniche di gioco permettono di creare giochi nei giochi.
Si può giocare a Doom in Minecraft? O ancora meglio, è possibile giocare a Minecraft in Doom? E a flappy bird in Super Mario World? Giocare al primo Super Mario Bros. in Pokemon Giallo? O simulare un computer in campo minato? La risposta ad ogni domanda è sì, più o meno.
Ma com’è possibile?
I motivi grazie ai quali tutto questo può avvenire sono principalmente due:
Le meccaniche di gioco “permettono di creare porte logiche”
Si può effettuare una “esecuzione arbitraria di codice” in game
Entrambe le espressioni risultano a prima vista intimidatorie, ma in realtà sono molto più semplici di quello che sembrano e in questo articolo ci si concentrerà sul punto numero 1.
Dalle porte logiche ai computer
In questa istanza non ha senso tirare in ballo la completezza di Turing1 e tutte le sue definizioni annesse, quindi tutti questi concetti possono essere nascosti sotto un tappeto e con un pizzico di semplificazione si può tenere in mente soltanto un semplice “teorema”:
Se le meccaniche di gioco permettono la creazione porte logiche allora, in condizioni ideali, è possibile simulare all’interno di esso un computer (o un qualsiasi programma).
È necessario, quindi, chiarire alcuni concetti prima di proseguire: cosa sono le porte logiche, perché vale quel “teorema” e che cosa significhi “in condizioni ideali”. Partendo con ordine, le porte logiche sono meccanismi (di qualunque tipo, per esempio circuiti elettrici o meccanismi “idraulici”) che eseguono operazioni logiche. Le operazioni logiche sono operazioni che hanno come input 1 o 0 e come output 0 o 1. Ad esempio, l’operazione AND ritorna come output 1 se e solo se entrambi gli input sono 1. In tutti gli altri tre casi ritorna 0. Per capire intuitivamente le porte logiche, consiglio un video di Numberphile nel quale vengono utilizzate le tessere di domino:
Essere in condizioni ideali significa semplicemente non dare conto alla componente temporale e spaziale che richiedono le porte logiche. Se ci mettiamo in queste condizioni, un circuito grosso quanto Roma e che impiega 1 anno per fare una somma logica, è equivalente a uno piccolo quanto una moneta da 1 centesimo che impiega qualche nanosecondo ad operare. Ora rimane da capire il motivo per cui valga quel teorema sopra enunciato. La mia impostazione da studente di matematica mi impone di dover dimostrare in modo più o meno rigoroso ogni teorema:
Ogni computer è composto da circuiti elettronici, ogni azione richiesta al computer viene fatta da questi circuiti e questi circuiti operano soltanto effettuando mere operazioni logiche. Quindi ogni computer quando guardato nelle sue più microscopiche componenti, non fa altro che performare operazioni logiche di uni e zeri (presenza di corrente, assenza di corrente). Ergo, se all’interno di un videogioco si riescono a creare porte logiche, allora combinandole si possono ottenere gli stessi effetti di un computer reale al netto delle prestazioni in spazio e tempo. □
Quindi, se è possibile ricreare quelle stesse operazioni -che sono AND e OR (o qualunque altra combinazione permetta di ricavare queste due) - mediante le meccaniche di gioco, è anche potenzialmente possibile combinarle per ottenere una simulazione di un calcolatore, di un programma, o di uno stesso computer. Perciò, come visibile nel video sopra riportato, poiché anche le “meccaniche fisiche del domino” permettono la creazione di porte logiche, sarà possibile costruire un computer fatto solo di tessere del domino. Naturalmente è stato fatto.
Guardando il video, è lampante cosa significhi veramente “in condizioni ideali”: avere abbastanza spazio e tempo. Per creare un calcolatore, con tessere del domino, che facesse la somma di due numeri (piccoli, tra 0 a 7) è servito, in termini di spazio, l’equivalente di un monolocale e una ventina di secondi, in termini di tempo. Allo stesso modo, saranno questi due fattori: lo spazio nel gioco (e in memoria) e il tempo di esecuzione che renderanno difficile o, in alcuni casi, impossibile l’effettiva programmazione di computer (o videogiochi) “utilizzabili” in game.
Computer Minecraftistico
Minecraft è certamente uno dei casi che ci si può aspettare di trovare un po’ ovunque. Infatti, anche se non si ha giocato a questo titolo, si sa che le possibilità che ci para davanti sono veramente elevate. Può venire naturale, quindi, credere che sia possibile costruire un computer in Minecraft.
Realmente semplice è creare porte logiche usando la redstone.2 La meccanica redstone è un sistema simile ai circuiti del mondo reale che coinvolge vari componenti che il giocatore può combinare per creare vari tipi di circuiti. La redstone è una specie di blocco-polvere che ha due stati: on (arancio) e off (rosso scuro). Può essere attivata con leve e pulsati e utilizzando altri componenti come torce di redstone, ripetitori e comparatori (ad oggi sono molti di più di quelli elencati, grazie ai quali si costruiscono circuiti complessi e compatti) si possono creare porte logiche in molti modi differenti. Qui ne riporto uno. Le leve rappresentano gli input (leva su per 1 e giù per 0) e la lampada l’output (accesa 1 e spenta 0).
Proprio grazie alla compattezza di questi circuiti è stato fin dai primi albori nel 2010 possibile sperare di creare circuiti sempre più complessi che potessero magari lontanamente simulare qualche tipo di CPU. Con il passare degli anni Minecraft è andato incontro ad aggiornamenti e sono stati introdotti altri nuovi componenti redstone che hanno permesso, insieme alle conoscenze sempre maggiori di queste meccaniche, di creare “simulacri” di computer.3 Dal 2010, quando è stato creato il primo computer programmabile (lentissimo, gigantesco e molto limitato), i computer in Minecraft si sono sviluppati seguendo, più o meno, la loro controparte reale: da giganteschi, lenti e poco potenti a “meno giganteschi”, “meno lenti” e “poco più performanti”.
L’ultimo prototipo, che al momento si può constatare sull’internet, è il CHUNGUS II (Computational Humongous Unconventional Number and Graphics Unit creato da Sammyuri). Tralasciando il nome, si tratta del computer in Minecraft più imponente ad oggi -un anno fa- mai realizzato. Il punto centrale su cui conviene porre l’attenzione è il fatto che sia programmabile. Ovvero, mediante un programma esterno, è possibile scrivere righe di codice (in Assembly) che verranno convertite in codice per il computer CHUNGUS II -relativamente oggetti all’interno di chest-. Questi fungeranno da vere e proprie righe di codice eseguibili dal computer CHUNGUS II. Riporto, per chi ne capisse e fosse interessato, le specifiche di questo computer Minecraftistico:
CPU specs - 8 bit data, 16 bit fixed size instruction length - 1Hz clock speed, 4 stage instruction pipeline (fetch - decode - execute - writeback) - 64 byte automatic 8-way associative data cache and 256 bytes RAM - Up to 256 addressable I/O ports - 7 general purpose registers - Over 40 ALU functions, including a hardware barrel shifter, multiplier, divider and square rooter - 32x128 byte program pages for a total of 4KiB program storage
Proprio il fatto di essere programmabile fa si che qualunque programma a nostro piacimento, che possa stare nella instruction memory, venga eseguito. Con questa modalità è stato fatto Tetris, Snake, Breakout e persino una calcolatrice grafica.
Ora però va fatta anche una precisazione: il computer CHUNGUS II, se fatto lavorare in una versione Vanilla (base) di Minecraft, impiegherebbe un tempo troppo lungo. Per questo si deve ricorrere ad una mod che velocizzi da x1.000 fino a x10.000 i tick in game. Con questo accorgimento, i tempi di esecuzione di un programma abbastanza computazionalmente importante possono rientrare in un tempo abbordabile.
A questo punto, con intenzioni quasi prometeiche, hanno tentato di giocare a Minecraft dentro Minecraft. Il risultato, seppur non riuscito fino in fondo, è a mio avviso ad ogni modo intrigante.4
C’è ancora un aspetto di Minecraft che non rientra a tutti gli effetti nelle meccaniche di gioco Vanilla che sono i command_block. Per questo motivo saranno trattati nella seconda parte, in quanto li vedo più affini ad una esecuzione di codice. Con questi blocchi sarà possibile, come vedremo, giocare interamente a Pokémon Giallo senza bisogno di alcuna mod.
(è notizia di questi giorni che sia in programma un aggiornamento con un nuovo blocco, Copper Bulb, avente delle potenzialità incredibili per il redstone computing)
Can Doom run Doom?
Un meme che si è trascinato durante il corso degli anni passati è il “It Runs Doom” che consiste, traducendo dalla pagina knowyourmeme:
"It Runs Doom" è un'espressione che indica che un dispositivo è in grado di eseguire lo sparatutto in prima persona del 1993 Doom, che è stato esportato con successo su una varietà di gadget elettronici progettati per scopi diversi dal gioco.
Il primo pioniere del porting estremo ha giocato Doom sul Nintendo DS. Da quel momento la strada è stata in discesa: si è passati a giocarlo su un ATM, poi sulla barra del MacBook, su una calcolatrice, su un oscilloscopio, su un iPod e persino su un tester di gravidanza (per chi non mi credesse sono linkati i video). A questo punto la domanda lecita da porsi è:
Si può giocare a Doom dentro Doom?
La risposta è in teoria sì, in pratica no.
Come detto precedentemente, se un gioco può costruire porte logiche allora, potenzialmente, può eseguire qualunque programma. Doom può costruire porte logiche ma le sue limitazioni sono talmente elevate che il massimo che si è aspirato a fare è una somma di solo 0 o 1 (half-adder). Un computer dentro Doom può sperare di fare addizioni a 4 bit ma non di più. Ma come si può costruire porte logiche in Doom? Semplice. Ehm… no, non è proprio semplice, però è facile a dirsi: i mostri sono in grado di fare tre cose: aprire porte, usare teletrasporti e attivare ascensori (oltre allo spawnare e a morire). Combinando in modo ingegnoso queste azioni è possibile creare porte logiche.5
Se credete che sia davvero troppo poco per un gioco come Doom e che si meriti molto di più, allora non datevi per vinti. Infatti in Doom 2 sarà possibile, come vedremo, tramite esecuzione arbitraria di codice giocare a Doom originale.
Terraria, Factorio e Super Mario Maker
Altri giochi che permettono di creare al loro interno computer programmabili sono Terraria e Factorio.
In Terraria è stato creato questo computer a 32-bit che, come mostrato nel video, permette persino di fare una specie di render 3D in tempo reale. La scure della realtà si abbatte anche in questo caso ed è necessario implementare una mod che, come per Minecraft, acceleri i tick in game e alleggerisca le meccaniche che permettono al computer dentro Terraria di funzionare.
Factorio, possedendo meccaniche di gioco proprie di un gestionale, offre la possibilità di trasmettere informazioni e fare operazioni con esse in poco tempo e poco spazio. Diviene possibile, allora, creare veri e propri computer in molti modi. Uno dei progetti interessanti che si possono trovare sull’internet è un programma di raycasting che permette di simulare in tempo reale un rendering 3D. È stato anche creata una simil-riproduzione delle mappe di Doom.
L'ultimo gioco che voglio menzionare è Super Mario Maker. In entrambi i titoli (S.M.M.1 e S.M.M.2), è possibile creare porte logiche combinando in modo ingegnoso vari blocchi e nemici.6 Sfruttando questa funzionalità, è addirittura possibile costruire un livello che simuli una calcolatrice: il giocatore può selezionare i numeri rompendo appositi blocchi, per poi scegliere l'operazione di addizione o sottrazione. Infine, dopo un intricato percorso nel livello, delle bombe rompono dei blocchi specifici per rivelare il risultato dell'operazione.
Conclusioni
Per concludere, molti altri sono i giochi che permettono, teoricamente, costruzioni simili (tra cui ad esempio Zelda Tears of the Kingdom7 ) ma con essi è veramente impossibile creare qualcosa di interessante. La ragione di ciò risiede nella distinzione fondamentale: nei casi precedenti, le meccaniche del gioco fungevano da “esecutori materiali” del computer, mentre con l'esecuzione arbitraria si può direttamente forzare il gioco ad eseguire quello che si desidera.
Rimando, per coloro che fossero interessati, alla seconda parte dell’articolo sull’esecuzione arbitraria di codice. (quando uscirà)
Le fonti non già citate:
Turing-Complete Video Games. People have been testing the limits of… | by Olivia Sorensen | Medium
Immagine in copertina generata con AI
Per chi conoscesse la teoria dietro alle macchine di Turing, anche campo minato lo è. Infatti, come viene mostrato in questo paper esistono infinite versioni Turing Complete di campo minato. Questo significa che a livello teorico è possibile "simulare" qualunque videogioco all’interno. A tal proposito, è stato anche dimostrato che il gioco di carte Magic può simulare una macchina di Turing ed è, quindi, indecidibile i.e. non si può determinare a priori, in tutte le casistiche, se la partita terminerà (a meno che non ci sia un cap di turni). Come corollario, non si può determinare a priori una "winning strategy". Qui il link al paper e un video sull’argomento.
In realtà, anche agli albori di Minecraft, quando non esisteva ancora la redstone, era possibile costruire porte logiche (immense) grazie a carrelli e porte.
Per chi volesse saperne di più sulla storia dei computer in Minecraft lascio qui il link al video:
Per chi volesse cimentarsi nella costruzione di un computer in Minecraft lascio tutorial: Tutorials/Redstone computers – Minecraft Wiki e
Questa è la pagina web a cui fare riferimento.
Logic Gates, Computer Logic and Calculators in Super Mario Maker ! (youtube.com)
Zelda è Turing completo: Is Legend of Zelda Turing Complete? (youtube.com) by physics for birds