Il mio gioco Basic autoprogrammato: mi arrendo!
Il mio folle progetto di creare un gioco per il C64 è finalmente terminato. Va bene così. Il codice ha raggiunto dimensioni che non sono più fattibili.
Per me è il gioco più atteso del 2023. Per il resto del mondo no. Anche perché il resto del mondo non ne sa nulla. Tranne forse tu, se hai letto l'articolo qui sotto o ascoltato la puntata numero 136 del podcast digitec.
Sto parlando del gioco «Herzschmerz», che ho programmato io stesso nel linguaggio di programmazione Basic per il Commodore 64. Sì, lo so: il fattore «WTF» del progetto è elevato, ma è quello che succede quando i nerd diventano nostalgici. Alla fine del 2022 la prima versione era finita, ma ne sarebbe seguita una seconda, più grande. Nella conclusione del mio articolo ho scritto: «Ora che ho le basi, posso espanderlo con relativa facilità: aggiungere altri livelli, incorporare altri sprite e programmare nuovi nemici con percorsi diversi». Negli ultimi tre mesi ho fatto esattamente questo. Tuttavia, la «relativa facilità» è stata relativamente difficile.
La nuova versione del gioco si chiama «Die Heart» e comprende venti livelli anziché solo otto. Per ogni terzo livello completato, si ottiene una vita in più, fino a un massimo di sette. Soprattutto, però, gli avversari sono più vari.
Nella prima versione, c'era un solo tipo di nemico: una testa dall'aspetto malvagio che ti inseguiva. Al massimo due di esse potevano apparire sullo schermo contemporaneamente. Ora ci sono sette tipi di avversari e il gioco può gestire fino a quattro avversari nello stesso livello.
Il programma Basic degenerato
Il gran numero di avversari e di livelli mi ha costretto a modificare la struttura del programma. Questo in Basic è laborioso, soprattutto per programmi molto lunghi con molte subroutine. Le subroutine sono parti del programma che devono essere richiamate più volte e da punti diversi. In Basic non è possibile dare un nome a questi elementi, ma è necessario conoscere il numero di riga da cui inizia la routine. Anche questi numeri di riga cambiano continuamente. Questo mi spinge a evitare le subroutine, a meno che non siano assolutamente necessarie.
Nella prima versione del gioco, i movimenti degli inseguitori sono calcolati direttamente nella routine principale. Nella seconda versione, viene prima riconosciuto il tipo di avversario e poi viene richiamata la subroutine corrispondente per calcolare il movimento.
I singoli livelli sono già delle subroutine nella prima versione. Ora le subroutine di livello richiamano a loro volta delle subroutine. Queste disegnano le pareti e gli altri ostacoli dei livelli. Il vantaggio è che possono essere utilizzate più volte e combinate tra loro secondo il principio modulare. Per fare un esempio: ho aggiunto un muro a un livello esistente. Ciò significa che non ci si può più fermare sul bordo, il che rende le cose un po' più complicate.
Il programma comprende circa 500 righe o 16 kilobyte ed è quindi grande circa il doppio della versione 1.
L'avversario che ha avuto la meglio
Volevo migliorare gli inseguitori in modo che non corressero più attraverso i muri, ma dovessero evitarli come il personaggio. Gli ostacoli avrebbero così un impatto maggiore sul gioco e fornirebbero una maggiore varietà. Purtroppo non ci sono riuscito.
I calcoli necessari non sono facili, ma dopo un po' ho capito almeno le basi. Il programma riconosceva quando un avversario si avvicinava a un ostacolo e cambiava direzione.
Per ragioni che non ho mai scoperto, questo funzionava solo quando il gioco veniva eseguito direttamente in Basic. Non appena l'ho compilato, gli ostacoli non venivano più rilevati in modo affidabile. A volte sì, a volte no, apparentemente senza un sistema.
Una compilazione è assolutamente necessaria perché il gioco gira troppo lentamente in Basic. Con questo, l'idea è morta.
Ma un po' di musica? Anche no
Mi sarebbe piaciuto aggiungere al gioco un chiptune composto da me. Dopotutto, il C64 è adatto a questo scopo. Ma per questo avrei dovuto programmare il gioco in Assembler.
È possibile creare musica in Basic, ma è complicato e soprattutto non può essere riprodotta in background. Quindi avrei dovuto inserire la creazione di un suono nella routine principale. Sarebbe stato impossibile farlo con il ritmo giusto. Inoltre, avrebbe reso il codice incomprensibile.
Scarica e gioca
Già che hai letto fin qui, probabilmente vorrai provare il gioco. Lo puoi scaricare qui. Puoi trascinare il file .d64 decompresso nel campo Drag-and-Drop dell'emulatore online, oppure utilizzi un emulatore offline come VICE.
Se ci giochi, mi piacerebbe sentire cosa ne pensi. Un particolare livello è troppo facile o troppo difficile? O il gioco nel suo complesso? È divertente? Se sì, per quanto tempo?
Mi sono divertito a svilupparlo, a parte il fail con il rilevamento degli ostacoli. Tuttavia, con l'aumentare delle dimensioni del programma, diventa sempre più impegnativo. Ecco perché ora considero il gioco finito, anche se potrei certamente migliorarlo molto.
Il mio interesse per il mondo IT e lo scrivere mi hanno portato molto presto a lavorare nel giornalismo tecnologico (2000). Mi interessa come possiamo usare la tecnologia senza essere usati a nostra volta. Fuori dall'ufficio sono un musicista che combina un talento mediocre con un entusiamso eccessivo.