DoomPaint: sì, adesso si può giocare a DooM direttamente nel software di grafica

DoomPaint: sì, adesso si può giocare a DooM direttamente nel software di grafica

Mark Russinovich, CTO di Microsoft Azure, ha realizzato DoomPaint, un progetto che utilizza Microsoft Paint come display per Doom. Il gioco gira tramite ViZDoom, mentre ogni fotogramma viene trasferito attraverso la clipboard di Windows. L'esperimento raggiunge fino a 35 FPS come per l'originale del 1993

di pubblicata il , alle 18:23 nel canale Videogames
MicrosoftDooM
 

Microsoft Paint diventa un insolito display per Doom grazie a DoomPaint, un esperimento sviluppato da Mark Russinovich, CTO di Microsoft Azure e creatore della celebre suite Sysinternals, pubblicato su GitHub. Il progetto non rappresenta un port tradizionale del classico sparatutto di id Software: il motore di gioco resta completamente esterno all'applicazione, mentre Microsoft Paint riceve ogni fotogramma come una normale immagine incollata tramite la clipboard di Windows.

L'idea sfrutta la versione shareware originale di DOOM1.WAD insieme a ViZDoom, derivato di ZDoom nato per l'addestramento di sistemi di intelligenza artificiale. Il rendering, la simulazione, la gestione delle mappe, della fisica e dei nemici vengono elaborati da ViZDoom, mentre Paint visualizza soltanto il risultato finale. L'autore sottolinea infatti che Paint "non calcola nulla": l'applicazione svolge esclusivamente il ruolo di destinazione grafica. In sintesi, fa soltanto da telo su cui vengono proiettate le immagini per così dire.

Il trasferimento continuo delle immagini attraverso gli appunti rappresenta l'aspetto più interessante dell'intero progetto. La clipboard di Windows non nasce come canale video, ma per il trasferimento occasionale di dati tra applicazioni. DoomPaint riesce comunque a utilizzarla come collegamento grafico sincronizzato, con una frequenza che può raggiungere 35 fotogrammi al secondo, pari alla velocità originale prevista dal motore di Doom del 1993.

Per ottenere questo risultato, Russinovich non si è limitato a eseguire una sequenza di copia e incolla. Un approccio tradizionale avrebbe provocato infatti errori perché Paint elabora l'incollaggio in modo asincrono. Se il contenuto della clipboard viene sostituito troppo rapidamente, l'applicazione perde i dati ancora in lettura e restituisce il messaggio "Impossibile completare l'operazione".

La soluzione consiste nell'utilizzo della clipboard OLE. DoomPaint registra un oggetto che implementa l'interfaccia IDataObject e aggiorna direttamente i dati dell'immagine quando Paint richiede il contenuto tramite la chiamata GetData. Questo meccanismo mantiene validi i riferimenti durante la lettura e permette anche di sapere quando Paint ha effettivamente acquisito il fotogramma, evitando di inviare nuove immagini prima del momento opportuno.

Un'altra curiosità riguarda la gestione della cronologia dell'applicazione. Ogni immagine incollata viene trattata da Paint come una selezione mobile e, con l'arrivo del fotogramma successivo, l'operazione viene consolidata automaticamente. Di conseguenza, premendo CTRL+Z è possibile tornare ai fotogrammi precedenti della partita, sfruttando la normale funzione di annullamento del programma.

Anche l'input richiede un sistema dedicato. Poiché la finestra attiva rimane Paint, i comandi della tastiera potrebbero attivare menu oppure spostare la selezione invece di controllare Doom. Per questo motivo DoomPaint utilizza un hook di tastiera WH_KEYBOARD_LL, che intercetta i tasti destinati al gioco prima che raggiungano l'applicazione. I movimenti vengono affidati ai tasti W, A, S e D, mentre CTRL oppure F consentono di sparare, Spazio apre porte e attiva interruttori e MAIUSC abilita la corsa. Il tasto F rappresenta un'alternativa utile nei sistemi in cui CTRL viene intercettato da software come PowerToys, macchine virtuali o ambienti remoti.

Le prestazioni dipendono dalla risoluzione scelta. L'esecuzione a 320×200 pixel, identica a quella del Doom originale, permette di raggiungere fino a 35 FPS. Il progetto supporta anche 640×400 pixel, mentre la modalità 320×240 riproduce proporzioni più vicine ai monitor CRT dell'epoca. Oltre alla grafica, DoomPaint riproduce anche effetti sonori e musica tramite OpenAL.

Per eseguire DoomPaint basta un PC Windows con Python installato. Lo script di avvio crea automaticamente un ambiente virtuale, installa ViZDoom e le dipendenze necessarie, sostituisce la libreria OpenAL e apre Paint, che dovrà rimanere in primo piano durante tutta la sessione di gioco. Il pacchetto include già il file DOOM1.WAD shareware, quindi non è necessario possedere una copia commerciale del gioco per iniziare.

Distribuito con licenza MIT, DoomPaint rappresenta soprattutto una dimostrazione tecnica delle possibilità offerte dalle storiche API Win32 e OLE. L'esperimento mostra come sia possibile utilizzare componenti storici di Windows in modi completamente diversi rispetto allo scopo originale, trasformando la clipboard in un flusso video sincronizzato e Microsoft Paint in un insolito schermo per uno dei videogiochi più iconici della storia.

0 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info

Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".

La discussione è consultabile anche qui, sul forum.
 
^