Bumps on the QB64 road / Cunette sulla strada del QB64


ENGLISH

I had always felt a Windows porting of Pacuvia was mandatory. That version was the least "sentimental" in my "sentimental resarch project", because contemporary Windows OSs aren't exactly a fascinating ancient machine. Still Windows PC gaming has been a significant part of my videogaming history. I also knew that not everyone is into old machines and emulators, so an easily accessible Pacuvia version could be a handy incarnation of my debut.
I programmed Pacuvia's PC DOS version with QuickBasic 4.5, so the most straightforward way to reuse that code and port the game on Windows was through QB64: the language is an expanded, modern homage to old Qbasic, after all. Turns out this close family relationship pushed me right into a trap, when I started the porting.

Setting the screen was a confusing process for me, because I was trying to reuse most of the DOS code. QB64 handles legacy statements such as "Screen 0" (text mode), "Screen 13" (VGA 320x200 mode), "Screen 7" (EGA 16 colors mode) and "Screen 1" (CGA 4 colors mode).  The problem is the original QuickBasic assumes a 4:3 monitor display, whereas QB64 in fullscreen mode doesn't feature an aspect ratio correction. I could use the "_fullscreen _squarepixels" combination to reduce the widescreen stretching of those modes, but unfortunately those old DOS resolutions featured rectangular pixels, so I was screwed. I really didn't like Pacuvia stretched and deformed on a widescreen, and the default fonts looked abysmal in 16:9 ratio. I also hated the idea of a windowed experience.
As soon as I left my DOS comfort zone and embraced the most natural way to code in QB64, all the display issues evaporated. I ditched the legacy "Screen" codes and I created a custom fullscreen mode:

myscreen = _NewImage(1280, 720, 32)
Screen myscreen
_fullscreen _squarepixels

I still had to define a 4:3 area inside that widescreen display, to retain the original 40 columns text formatting, but that was easy (as you'll see in the source code). Of course, a custom screen needed custom fonts, so I chose a free set I liked from Fontsquirrell. ;-) So, I learnt a valuable lesson: I won't fool myself again into believing a code can ben easily reused in another enviroment!
I redesigned my intro/outro graphical panels in 1280x720x32bit color depth... and I also realized a tragically simple truth: the more you up the detail, the more your lousy artistic skills will be evident. Whatever, that's just another lesson learned!!! :-D
But I managed to program a nice fade-in / fade-out: that's one visual thing the Windows and Amiga versions have in common!

Theoretically, sound effects playback under QB64 should've been the easiest thing I could handle in this whole endeavour. And yet...  I couldn't understand why the game kept crashing when playing them! I hadn't converted the original sfxs from Freesound.org as I did for the Amiga version, because I assumed a modern PC could handle the playback blindfolded.  I wish I could offer an explanation for what happened, but I discovered QB64 didn't like my wav files at all! QB64 does support that format, so I really don't know why I had this strange issue. Anyway, after I converted all the effects into the OGG format, everything went smooth. Go figure.

Once I overcame those couple of bumps, Pacuvia's Windows version was ready to go, and only required some minor tinkering/testing to be wrapped up. I wish I didn't loose so much time into forcing the DOS code to live under Windows. Shortcuts aren't always the fastest route, can you believe that? ;-)


ITALIANO

Ho sempre pensato che una versione Windows di Pacuvia fosse obbligatoria. Era la versione meno "sentimentale" del mio "progetto di ricerca sentimentale", perché i sistemi operativi Windows contemporanei non sono una piattaforma antica. Eppure giocare su Windows è stata una parte significativa della mia storia videoludica. Sapevo anche che non tutti erano appassionati di vecchie macchine o degli emulatori, quindi una versione accessibile di Pacuvia poteva essere un'incarnazione comoda per il mio debutto. Avevo programmato la versione PC DOS di Pacuvia con il QuickBasic 4.5, quindi il modo più diretto di riutilizzare quel codice e trasferire il gioco su Windows era buttarsi sul QB64: il linguaggio è dopotutto pensato come un omaggio moderno ed espanso al vecchio QBasic. Alla fine però proprio quella stretta parentela si è rivelata una sorta di trabocchetto, quando ho iniziato la conversione. 

Impostare lo schermo è stato per me un processo confuso, perché cercavo di riutilizzare la maggior parte del codice DOS. Il QB64 gestisce i comandi "legacy" come "Screen 0" (modalità testo), "Screen 13" (modo VGA 320x200), "Screen 7" (modo EGA a 16 colori) e "Screen 1" (modo CGA a 4 colori). Il problema è che il Quickbasic originale presuppone l'uso di un monitor 4:3, mentre il QB64 in fullscreen non supporta una correzione dell'aspect ratio. Potevo usare la combinazione "_fullscreen _squarepixels" per ridurre lo stiracchiamento sul widescreen di quelle modalità, ma sfortunatamente quelle vecchie risoluzioni DOS avevano pixel rettangolari, quindi ero fregato. Non mi piaceva Pacuvia stiracchiato e deformato in widescreen, e i font di default avevano un aspetto orrido in 16:9. Odiavo anche l'idea di puntare su un'esperienza in finestra. Non appena ho lasciato la mia comfort zone DOS e ho abbracciato il modo più naturale di programmare in QB64, tutte le problematiche legate alla visualizzazione sono evaporate. Mi sono lasciato alle spalle le modalità "legacy" e ho creato una modalità fullscreen customizzata:

mioschermo = _NewImage(1280, 720, 32)
Screen mioschermo
_fullscreen _squarepixels

Dovevo comunque definire un'area 4:3 all'interno del display widescreen, per mantenere l'originale formattazione del testo sulle 40 colonne, ma quello è stato facile (come potete constatare dal codice sorgente). Naturalmente uno schermo custom necessitava di font custom, quindi ho scelto alcuni gratuiti da Fontsquirrel. ;-) Insomma, ho imparato una lezione preziosa: non mi prenderò ancora in giro, non crederò mai più che un codice possa essere facilmente riutilizzato in un altro ambiente!
Ho riprogettato i miei pannelli grafici di intro/outro in 1280x720 a 32bit di colore, e ho anche realizzato una tragicamente semplice verità: più aumenti il dettaglio di un'immagine, più è evidente quanto tu faccia pena come artista. Pazienza, un'altra lezione da tesaurizzare!!! :-D
Ma sono riuscito a programmare delle belle dissolvenze in apertura e chiusura: è un elemento visivo che accomuna le versioni Windows e Amiga!

Teoricamente la riproduzione degli effetti sonori sotto QB64 doveva essere la cosa più facile da gestire di tutto il progetto, eppure... non riuscivo a capire come mai il gioco continuasse a crashare quando li mandavo in play! Non avevo convertito gli effetti digitali originali di Freesound.org, come avevo invece fatto per la versione Amiga, perché davo per scontato che un PC moderno potesse gestirne la riproduzione a occhi chiusi. Mi piacerebbe darvi una spiegazione per quello che è successo, ma ho scoperto che il QB64 non gradiva affatto i miei effetti sonori in wav!!! Eppure QB64 supporta quel formato, quindi non so proprio perché mi si sia presentato questo strano problema. Ad ogni modo, dopo che ho convertito tutti gli effetti in OGG, tutto è andato alla grande. Chissà perché. 

Una volta superate queste cunette, la versione Windows di Pacuvia è stata tutta in discesa, ha richiesto solo alcuni piccoli ritocchi e testing per essere chiusa. Vorrei non aver perso così tanto tempo nel forzare il codice DOS sotto Windows. Le scorciatoie non sono sempre la via più breve: chi l'avrebbe mai detto? ;-)

Get The Daring Rescue of Pacuvia the Sheep

Leave a comment

Log in with itch.io to leave a comment.