Was genau macht einen Bildschirm in einem typischen C64-Spiel aus?

10

Ich versuche, die Grundlagen der C64-Spieleentwicklung nach BASIC herauszufinden, und ich könnte einige Ratschläge zu etwas sehr Grundlegendem, aber Wichtigem gebrauchen: Was ist eigentlich alles auf dem Bildschirm und wie zeichnet man es?

Schauen Sie sich Katakis / Denaris an :

Katakis Screenshot

Es gibt mindestens 9 verschiedene Dinge auf dem Bildschirm:

  1. Die Score-Leiste mit verschiedenen Schriftarten
  2. Das Schiff selbst
  3. Ein am Schiff befestigter Satellit, abnehmbar
  4. Sekundärwaffengeschosse
  5. Primärwaffengeschosse
  6. Objekte bewegen (können feindliche Schiffe sein)
  7. Die Statusleiste mit einem Bild des Schiffes, der Anzahl der Leben und drei Abschnitten, die gefüllt werden können
  8. Die primäre Waffenladeleiste kann bis zum Ende gefüllt werden
  9. Ein scrollendes Sternenfeld im Hintergrund
  10. (nicht auf dem Bildschirm nummeriert) Feste Objekte wie Steine ​​oder Metallwände, die Teil des Hintergrunds sind

Der C64 unterstützt nur 8 Sprites pro horizontaler Scanlinie. Ich glaube also nicht, dass alles in der Mitte des Bildschirms ein Sprite sein kann. Ich würde annehmen, dass alles, was eine Kollision erfordert, ein Sprite ist (da ich Hardware-Kollisionserkennung mit Sprites erhalten kann), aber selbst dann habe ich schnell das Limit von 8 Sprites erreicht. Außerdem können meine Waffen viel mehr als ein Projektil abfeuern - mein Schiff, der Satellit und 6 Kugeln wären bereits 8 Sprites hintereinander (siehe ca. 50 Sekunden im Video).

Welchen Grafikmodus würde ein solches Spiel verwenden? Das Programmierhandbuch listet den Bitmap-Modus auf, der den Bildschirmspeicher im Wesentlichen direkt ändert. Ist dies der Modus, in dem ich normalerweise arbeiten sollte? Wie würde ich alle Nicht-Sprite-Elemente zusammensetzen, um sie auf den Bildschirm zu bringen?

Viele Dinge in der Score- und Statusleiste sind statisch ("Area: 01" oder "Frame"), also werde ich sie wohl nur einmal füllen, wenn das Level beginnt. Dinge, die aktualisiert werden müssen - die Punktzahl, die Ladungsbalken unten - würden aktualisiert, indem der Bildschirmspeicher mit Schwarz gefüllt und dann in jedem Frame die neue Punktzahl gezeichnet wird?

Oder muss ich auf jedem Bild den gesamten Bildschirm zeichnen?

Michael Stum
quelle

Antworten:

13

Auf c64 können Sie Sprites "multiplexen". Nachdem sie gezeichnet wurden, verschieben Sie sie an einen neuen Ort und verwenden sie wieder. Die meisten Objekte in der Mitte sind wahrscheinlich gemultiplexte Sprites. In c64 ist es sehr einfach, mehr als 8 Sprites zu verwenden, solange diese nicht dieselben horizontalen Scanlinien belegen. Außerdem können Sie bei Bedarf mithilfe von Schriftgrafiken Software-Sprites erstellen (in diesem Fall zumindest Projektile).

2, 3, 6. Das sind wahrscheinlich Sprites.

4, 5, 9. Dies sind wahrscheinlich "Sprites" von Zeichengrafiken (8 x 8 Pixel).

Das Spiel würde keinen Bitmap-Modus verwenden, es würde zu viel Verschieben eines Speichers erfordern (es sei denn, Sie machen einige VIC-Chip-Tricks ...). Der verwendete Modus wäre der Zeichengrafikmodus.

Was Sie zeichnen müssen, hängt davon ab. In diesem Fall werden bei genauem Hinsehen Mustersterne bestimmter Größe (x * y Pixel) wiederholt, sodass Sie im Grunde den Zeichenspeicher dieser Schriftarten aktualisieren, um das Scrollen des Sternenfelds zu emulieren.

Punktzahl / Status, die Sie beim Start ausfüllen, und aktualisieren Sie sie dann bei Bedarf.

Sie müssten die Sprites und ihre Position in jedem Frame aktualisieren. Sie würden auch Projektile aktualisieren. Außerdem würden Sie dieses x * y-Pixel-Sternfeldmuster aktualisieren.

Nur alter C64-Geezer
quelle
5
Ich habe mir Katakis Video genauer angesehen. Einige dieser Objekte sind tatsächlich Schriftgrafiken. Sie können tatsächlich sehen, indem Sie die verwendeten Farben betrachten. Auch Starfield ist eigentlich nicht nur X * Y Pixel, sondern etwas anders gemacht, es ist aber immer noch in Schriftgrafiken. Sie müssten gescrollte Schriftgrafiken alle 8 Pixel aktualisieren, da Hardware-Scroll-Register Grafiken nur um 8 Pixel verschieben, nachdem Software-Tricks aufgetreten sind. Außerdem möchten Sie keine Hardware-Sprite-Kollisionen verwenden. Sie können nicht unterscheiden, welche Sprites tatsächlich kollidieren, wenn mehr als 2 Sprites beteiligt sind. Nur einfache Mathematik ist bei Kollisionen nützlich.
Nur alte c64 Geezer
2

Ich habe vor einiger Zeit einen Artikel im deutschen C64 Magazine gelesen. Die Kugeln sind Charaktere, die als Sprites fungieren, wie bereits erwähnt. Schiff und Feinde sind Sprites.

Levels bestehen ebenfalls aus Charakteren, aber mit einer Wendung. Da die Levels so groß sind und der Speicher wertvoll ist, hat Trenz seine eigenen Tools geschrieben, um Charaktere in Modulen zu gruppieren.

So kann er größere Module verwenden und diese komponieren. Außerdem würde er bestimmte Patch-Module verwenden, um die Schnittmenge der Module schön und sauber zu machen.

Alles in allem handelt es sich um eine Art Komprimierung, bei der Ebenen als Bausteine ​​anstelle von Zeichen für Zeichen beschrieben werden.

Vielleicht haben Sie auch bemerkt, dass in Katakis einige Ebenen Parallaxenhintergründe haben.

Dies geschieht, indem ein Muster zum Füllen des Hintergrunds erstellt wird, das hauptsächlich aus 2x2- oder 3x3-Zeichen besteht, und es gegen die Bildlaufrichtung animiert (Bitverschiebung). Wenn der Pegel beispielsweise 2 Pixel nach links rollt, wird das Hintergrundmuster 1 Pixel nach rechts gescrollt, daher scheint es langsamer gescrollt zu werden.

Ich hoffe, das hilft

Eine weitere Sache, die Sie tatsächlich sehen können, sind die einzelnen Module und dergleichen hier https://archive.org/details/64er_1989_10/page/n27. Scrollen Sie zu Seite 24

Kastor
quelle