Serpenti, serpenti e ancora serpenti!

Il 10 aprile sarà il termine ultimo per partecipare alla Retro Snake Game Jam, sfida di retro-programmazione organizzata dal gruppo Retro Programmers Inside in collaborazione con Phaze101 e ospitata sulla piattaforma itch.io. Lo scopo della sfida è la realizzazione di un gioco in cui vi sia un serpentello, non importa che sia il protagonista del gioco o il “cattivo” da evitare o da sconfiggere. Sono ammessi giochi per computer e console a 8/16 bit basati sulle CPU appartenenti alle “famiglie” Z80, 6502 e Motorola 68K.

baSnake

Ho quindi pensato bene di candidare il mio baSnake, realizzato ormai 6 anni fa in BASIC per lo ZX Spectrum, proprio in occasione di un’altra game jam su itch.io e successivamente arricchito per sfruttare alcune caratteristiche dello ZX Spectrum Next. Per poter partecipare, ho dovuto preparare una versione ad hoc, contenente il messaggio “Partecipante alla Retro Programmers Inside (RPI) and Phaze101 Game Jam“, come richiesto dal regolamento della Retro Snake Game Jam. Tale versione è disponibile, insieme alle precedenti, sulla pagina itch.io di baSnake.

baSnake in esecuzione sullo ZX Spectrum Next

YAS

baSnake non è stato l’unico progetto in cui ho avuto a che fare con serpentelli pixellosi. Nel 2015, infatti, mentre mi dilettavo con lo sviluppo di CHIP-OTTO, il mio interprete CHIP-8 per ZX Spectrum e di WEB-OTTO, la controparte per browser web, ho realizzato un clone di Snake proprio per questa piattaforma, chiamato – guarda un pò – YAS – Yet Another Snake (ancora un altro serpente). Sebbene scritti in linguaggi completamente diversi, baSnake eredita da YAS la possibilità di selezionare lo scenario in cui giocare.

Recentemente, ho appreso con piacere che YAS è stato incluso nella distribuzione ufficiale di EMMA02, emulatore multipiattaforma in grado di eseguire l’interprete CHIP-8 originariamente sviluppato per i computer della serie Cosmac.

Video che mostra YAS in azione sul port per ZX Spectrum Next di CHIP-OTTO

ZNAKE

Non è ancora tutto: per arrivare alla mia prima implementazione di un gioco in stile Snake, occorre andare ancora più indietro nel tempo, per l’esattezza al 2005. In quell’anno, infatti, realizzai ZNAKE, il mio primo progetto completo (seppur minimale) di videogioco per retrocomputer.

ZNAKE è infatti un semplice giochino in stile Snake, Worm, Nibbles, etc… per Sinclair ZX Spectrum. Lo scopo del gioco è pilotare il serpente (nelle direzioni alto / basso / sinistra / destra ) in modo che possa mangiare le mele che appaiono sullo schermo, evitando di urtare i muri o il serpente stesso. Per ogni mela ingerita, il giocatore guadagna punti, ma il corpo del serpente si allunga, rendendo così più difficile la partita.

Caricamento di Znake nell’emulatore RealSpectrum, su Windows XP

ZNAKE nasceva dal desiderio di realizzare un gioco, seppur semplice, per il celebre computer ZX Spectrum, al quale sono particolarmente affezionato. Già da tempo avevo avuto modo di conoscere il fantastico Z88DK, ma non ero mai andato oltre qualche semplice prova finchè un giorno, nel 2005, ispirato da un tutorial (purtroppo ho perso il riferimento, si parla di troppi anni fa) sul sistema a finestre X, decisi di implementare il serpentello come lista concatenata. Giocando così con malloc e putchar, ho implementato ZNAKE quasi completamente in C, utilizzando un minimo di Assembly. Non pago, per completare l’opera ho poi provveduto a trasferire ZNAKE su nastro, in modo da poterlo giocare sul vero Spectrum, oltre che sugli emulatori.

Successivamente, grazie all’emulatore Qaop, avevo anche creato un widget di Dashboard (che adesso chiameremmo “app“) per MacOSX e una versione per qualche desktop di Linux.

ZNAKE è quindi un progetto doppiamente retro, in quanto si tratta di un gioco per retrocomputer, realizzato quasi 20 anni fa (l’iBook G4 che utilizzavo all’epoca è ormai un retrocomputer esso stesso!). Tuttavia, giocando a ZNAKE, si può già avere un’idea di quale sarà lo stile di baSnake.

Dopo questo tuffo nel passato, ho pensato che anche ZNAKE avrebbe potuto partecipare alla Retro Snake Game Jam, previo inserimento del succitato messaggio. Il programma originale non è compatibile con le versioni recenti di z88dk, per cui ho dovuto fare alcune modifiche, cogliendo l’occasione per migliorare il codice, eliminando parti scritte da me a favore delle funzioni presenti nelle librerie fornite con z88dk. Il risultato è quindi, come al solito, disponibile per il download o per giocare tramite browser web (grazie all’emulatore JSSpeccy3) sulla pagina dedicata nella piattaforma itch.io.

Video che mostra il gameplay di ZNAKE

Direi, quindi, che 3 implementazioni di Snake bastano e avanzano!
Anche se una versione BASIC 10 Liner, magari… 🙂

Link e riferimenti

English version

Rettangoli colorati con ugBASIC

Screenshot che mostra i rettangoli colorati sullo ZX Spectrum

Da tempo desideravo provare ugBASIC, linguaggio isomorfo compilato, che permette di produrre programmi per una moltitudine di piattaforme (computer e console) a 8 bit a partire da un unico codice sorgente. A rendere ancora più accattivante il tutto è ugBASIC IDE, un ambiente integrato per Windows che permette di installare le toolchain per le piattaforme desiderate e scrivere, compilare ed eseguire programmi mediante gli appositi emulatori con pochissimi click.

Ho quindi colto l’occasione offerta dalla sfida della settimana, indetta lo scorso venerdì sul gruppo Facebook RetroProgramming Italia, per cimentarmi con ugBASIC. Lo scopo della sfida è realizzare un programma (in qualsiasi linguaggio e per qualsiasi macchina a 8/16 bit) per disegnare rettangoli colorati in modo molto veloce.

Screenshot C64 che mostra l'obiettivo della sfida
Immagine rappresentativa dell’obiettivo della sfida della settimana
(text mode standard del Commodore 64)

L’animazione dei rettangoli colorati ha immediatamente richiamato alla mia mente il programma dimostrativo BGIDemo, incluso nelle distribuzioni Turbo Pascal degli anni ’80 per mostrare le potenzialità delle librerie grafiche di Borland e che in gioventù ammiravo con stupore. Che nostalgia!

Screenshot del programma BGIDemo per Turmo Pascal
Random bars – dal programma BGIDemo per Turbo Pascal 5 di Borland

Ho quindi buttato giù il seguente programmino, per disegnare i rettangoli mediante stringhe formate da spazi vuoti, utilizzando posizione, dimensione e colore casuali.

BITMAP ENABLE
sc = SCREEN COLUMNS: sr = SCREEN ROWS: pc = PAPER COLORS
CLS
LOCATE 0, sr-1
PRINT "COLS:";sc;" ROWS:";sr;" COLORS:";pc;
s$ = "": FOR i=1 TO sc: s$ = s$ + " ": NEXT
DO
	PAPER RND(pc)
	x = RND(sc)
  	y = RND(sr - 1)
  	w = 1 + RND(sc - x)
  	h = 1 + RND(sr - 1 - y)
  	ss$ = LEFT$(s$, w)
  	FOR yy = y TO y+h-1
  		LOCATE x, yy
  		PRINT ss$;
  	NEXT
LOOP

Ho poi compilato il programma utilizzando lo ZX Spectrum come target, riscontrando però un paio di anomalie, che si possono osservare in questo video. L’istruzione PAPER, infatti, oltre allo sfondo alterava anche il colore del bordo. Inoltre, mentre nonostante il numero di colori restituito PAPER COLORS fosse 16, in output erano visibili solo gli 8 colori senza l’attributo bright.

Ho segnalato i problemi all’autore di ugBASIC Marco Spedaletti, il quale, dopo solo poche ore, ha rilasciato un COLDFIX che ha risolto entrambi i bug. Se solo il supporto di [inserisci qui il nome di una qualsiasi azienda fornitrice di energia/servizi telefonici] fosse altrettanto solerte, si vivrebbe in un mondo migliore, ma questa è un’altra storia…

Dopo un aggiornamento dei compilatori direttamente in ugBASIC IDE, sono riuscito ad ottenere una versione corretta dell’eseguibile, come si può osservare in questo video:

I rettangoli colorati sullo ZX Spectrum (emulatore Fuse)

Infine, dato che ugBASIC nasce come ambiente di sviluppo multipiattaforma, ho compilato una versione del programma per MSX e qui si può osservare il risultato:

I rettangoli colorati su MSX (emulatore openMSX)

Link e Riferimenti

Screenshot che mostra i rettangoli colorati sullo ZX Spectrum
I rettangoli colorati sullo ZX Spectrum

Un giorno alle corse degli animali

A Day At The Animal Races è una versione per Sinclair ZX Spectrum 16/48K del videogioco di scommesse su corse di animali VIP Animal Race.

A Day At The Animal Races in esecuzione a 14 MHz sullo ZX Spectrum Next (emulato con #CSpect)

Il gioco originale fu sviluppato da Brian Astle per l’interprete CHIP-8 fornito con il computer COSMAC VIP e pubblicato nel RCA COSMAC VIP Game Manual nel 1978. Nel video seguente, puoi osservare il gioco in azione sullo ZX Spectrum Next, grazie a CHIP-OTTO, la macchina virtuale CHIP-8 di mia realizzazione.

VIP Animal Race in esecuzione su CHIP-OTTO per ZX Spectrum Next (emulato con #CSpect)

A Day At The Animal Races è il mio secondo gioco (il primo è Squash Trainer) in gara per la 12a edizione (2023) del BASIC 10 Liner Contest, categoria PUR-80. Puoi scaricarlo o giocare online accedendo alla pagina retrobits.itch.io/animalrace10l. Il download include il listato del programma e la documentazione dettagliata.

Come giocare

Cinque diversi animali gareggiano l’uno contro l’altro e tu hai la possibilità di mettere alla prova la tua abilità nel scegliere il vincitore.

Aspetta che gli animali siano pronti per partire, quindi seleziona un animale e decidi quanto vuoi scommettere (fino a un limite di $9). Al termine della gara, le tue vincite o perdite verranno calcolate e verrà visualizzato il nuovo totale. Puoi vincere il gioco accumulando $256 o più.

Tutti gli animali si muovono all’incirca alla stessa velocità, ma partono da posizioni diverse. Le probabilità di vincita per ogni animale sono correlate alla posizione di partenza ma includono un elemento casuale. Alcune corse favoriscono il giocatore e dovresti scommettere fino al limite. Altre sono sfavorevoli e dovresti scommettere con attenzione.

Gameplay di A Day At The Animal Races
Gameplay di A Day At The Animal Races

Link e riferimenti

Schermata di A Day At The Animal Races
Ho vinto! 🙂
English version