Ik heb mijn zelfgeprogrammeerde BASIC-spel af!
Achtergrond

Ik heb mijn zelfgeprogrammeerde BASIC-spel af!

David Lee
10-4-2023
Vertaling: machinaal vertaald

Ik ben eindelijk klaar met mijn idiote project om een spel te maken voor de C64. Gelukkig maar. De code heeft een omvang bereikt die niet meer praktisch is.

Het is de meest verwachte wedstrijd van 2023 - voor mij. Niet voor de rest van de wereld. Eén reden is dat de rest van de wereld er niets vanaf weet. Behalve jij misschien, als je het onderstaande artikel hebt gelezen of hebt geluisterd naar aflevering 136 van de digitec podcast.

  • Achtergrond

    Een hart voor zelfgeprogrammeerde retrospelletjes

    van David Lee

Ik heb het over "Herzschmerz", een spel dat ik zelf heb geprogrammeerd. In BASIC programmeertaal. Voor de Commodore 64. Ja, ik weet het, de "WTF" factor van dit project is hoog, maar dat is wat er gebeurt als nerds nostalgisch worden. De eerste versie was eind 2022 klaar, maar een tweede, grotere versie zou volgen. Aan het einde van mijn artikel schreef ik: "Nu ik de basis heb, kan ik het relatief eenvoudig uitbreiden door meer levels toe te voegen, andere sprites te integreren en nieuwe vijanden met verschillende paden te programmeren." Dat is precies wat ik de afgelopen drie maanden heb gedaan. Maar het was allesbehalve "relatief eenvoudig".

De nieuwe versie van het spel heet "Die Heart" en bevat 20 levels in plaats van slechts acht. Voor elk derde voltooid level krijg je een extra leven - tot een maximum van zeven. Het belangrijkste is dat de vijanden gevarieerder zijn.

In de eerste versie was er maar één soort vijand: een kwaadaardig uitziend hoofd dat je achtervolgde. Er konden er hooguit twee tegelijk op het scherm verschijnen. Nu zijn er zeven soorten vijanden en het spel kan er maximaal vier in hetzelfde level aan.

Een BASIC-programma opschalen

De verscheidenheid aan vijanden en levels betekende dat ik de programmastructuur moest veranderen. Dit is vervelend in BASIC, vooral als het gaat om erg lange programma's met veel subroutines. Subroutines zijn programmaonderdelen die steeds opnieuw en vanaf verschillende plaatsen moeten worden aangeroepen. In BASIC kunnen deze geen naam krijgen; je moet het regelnummer weten waar de routine begint. Deze regelnummers veranderen ook steeds. Hierdoor heb ik besloten om subroutines te vermijden, tenzij ze absoluut noodzakelijk zijn.

In de eerste spelversie worden de bewegingen van de achtervolgers berekend in de hoofdroutine. In de tweede versie wordt het type vijand opgevraagd en dan wordt de juiste subroutine aangeroepen om de beweging te berekenen.

De individuele levels zijn al subroutines in de eerste versie. De level-subroutines roepen op hun beurt weer subroutines aan. Deze tekenen de muren en andere obstakels in de levels. Dit heeft als voordeel dat ze meerdere keren kunnen worden gebruikt en modulair met elkaar kunnen worden gecombineerd. Ik heb bijvoorbeeld een muur toegevoegd aan een bestaand veld. Hierdoor kun je niet meer bij de rand stoppen, wat het een stuk lastiger maakt.

Het programma bestaat uit ongeveer 500 regels of 16 kilobyte, waardoor het ongeveer twee keer zo groot is als de eerste versie.

Eén type vijand is me niet gelukt

Ik wilde de achtervolgers verbeteren zodat ze net als het personage muren moeten ontwijken in plaats van er doorheen te rennen. Door dit toe te voegen zouden de obstakels een grotere impact hebben op het spel en voor meer variatie zorgen. Helaas heb ik gefaald.

De berekeningen die hiervoor nodig zijn, zijn niet eenvoudig, maar na een tijdje had ik in ieder geval de basis door. Het programma herkende wanneer een tegenstander bij een obstakel kwam en van richting veranderde.

Om redenen waar ik nooit achter ben gekomen, werkte dit alleen als het spel direct in BASIC werd uitgevoerd. Zodra ik het compileerde, werden de obstakels niet meer betrouwbaar gedetecteerd. Soms wel, maar zonder waarneembare systematische aanpak.

Compileren is absoluut noodzakelijk omdat het spel veel te langzaam draait in BASIC. Daarmee was het idee dood.

Muziek? Vergeet het maar

Ik had het spel graag opgeslagen met een zelfgecomponeerde chiptune. De C64 is daar heel geschikt voor. Maar dan had ik het spel in Assembly moeten programmeren.

Hoewel het mogelijk is om muziek te maken in BASIC, is het ingewikkeld en, nog belangrijker, het kan niet op de achtergrond draaien. Ik had dus af en toe een geluid in de hoofdroutine moeten stoppen. Het zou onmogelijk zijn geweest om dit met de juiste timing voor elkaar te krijgen. Het zou de code ook onbegrijpelijk maken.

Downloaden en spelen

Als je zover hebt gelezen, wil je het spel waarschijnlijk ook proberen. Je kunt het hier downloaden. De makkelijkste manier is om het uitgepakte .d64-bestand naar het sleepveld van de online emulator te slepen. Als alternatief zijn er ook offline emulators zoals VICE.

Als je het speelt, ben ik geïnteresseerd in je feedback. Is een bepaald level te makkelijk of te moeilijk? Hoe zit het met het spel als geheel? Is het wel leuk? Zo ja, hoe lang?

Ik vond het leuk om te ontwikkelen - afgezien van de mislukte obstakeldetectie. Maar naarmate het programma groter wordt, wordt het steeds moeilijker. Daarom beschouw ik het spel nu als af - ook al kan ik het zeker nog veel verbeteren.

55 mensen vinden dit artikel leuk


User Avatar
User Avatar

Mijn belangstelling voor computers en schrijven leidde me relatief vroeg (2000) naar de technische journalistiek. Ik ben geïnteresseerd in hoe je technologie kunt gebruiken zonder gebruikt te worden. In mijn vrije tijd maak ik graag muziek waarbij ik mijn gemiddelde talent compenseer met een enorme passie. 


Deze artikelen kunnen je ook interesseren

Opmerkingen

Avatar