Coding des animierten „Woosh“-Screens auf dem Amiga
(dansalva.to)Coding des animierten „Woosh“-Screens auf dem Amiga
- Der Amiga war bei seiner Einführung im Jahr 1985 eine grafische und akustische Sensation.
- Das Darstellen farbenfroher Bilder auf dem Amiga ist einfach, bringt aber im Kontext einer Game Engine viele Herausforderungen mit sich.
Herausforderung 1: RAM-Anforderungen
- Ein typischer Amiga 500 verfügt über 512 KB „Chip RAM“ und 512 KB Erweiterungs-RAM.
- Nur Chip RAM kann für die Darstellung von Grafik und Sound verwendet werden und ist daher wertvoller.
- Eine Vollbild-Character-Grafik (CG) ist eine 320x240-Bitmap mit 32 Farben und belegt unkomprimiert 48 KB RAM.
- Um Asset-Kompression zu unterstützen, wurde das ZX0-Kompressionsformat hinzugefügt; damit schrumpft die CG auf 8 KB und wird praktikabel.
- Wenn die Level-Assets geladen werden, wird die komprimierte CG in das Erweiterungs-RAM geladen und erst direkt vor der Anzeige in Chip RAM dekomprimiert.
- Statt 48 KB Chip RAM neu zu finden, werden andere Teile des Screen-Speichers wiederverwendet.
Herausforderung 2: Der „Screen-Split“-Effekt
- Zunächst wurde ein vertikaler Wipe als Bildschirmübergang in Betracht gezogen.
- Damit er jedoch gut aussieht, wäre ein Gradient-Wipe nötig, der bei jeder Scanline die Farbpalette anpasst.
- Der Screen-Split-Effekt ist einfacher umzusetzen und sieht für normale Betrachter sogar eindrucksvoller aus.
- Zwei besondere Funktionen des Amiga arbeiten zusammen, um diesen Effekt zu ermöglichen:
- Der Coprozessor (
copper) arbeitet parallel zur CPU und kann angewiesen werden, an bestimmten Bildschirmzeilen Hardware-Register zu ändern. - Der Screen-Speicher kann an beliebige Stellen im Chip RAM umgeschaltet werden, indem in den Hardware-Registern die Screen-Pointer gesetzt werden.
- Der Coprozessor (
Herausforderung 3: „Motion Lines“
- Um den Animationseffekt zu vollenden, werden im Hintergrund „wooshende“ Linien benötigt.
- Zum Zeichnen der Linien sind Sprites eine gute Wahl, weil sie unabhängig vom Screen-Speicher gezeichnet und bewegt werden können.
- Amiga-Sprites sind jedoch stark eingeschränkt und kompliziert.
Sprite-Farben
- Sprites teilen sich Bitplanes und Farbpalette, daher sollen möglichst wenige Farben verwendet werden.
- Die Sprites verwenden nur 3 Farben, sodass 28 Farben für die CG und 1 Farbe für den Hintergrund übrig bleiben.
- Unterschiedliche Sprites verwenden unterschiedliche Farben aus der Palette.
Wiederverwendung von Sprite-Grafiken
- Die ersten 4 Byte der Sprite-Grafik sind „Control Bits“, die Position und Höhe des Sprites angeben.
- Das ist ein Problem, wenn dieselbe Grafik an mehreren Positionen gezeichnet werden soll.
- Stattdessen werden 8 Fake-Sprites erzeugt, die nur aus Control Bits bestehen, und die Sprite-Pointer werden auf diese Fake-Sprites gesetzt.
Sprites werden nicht gezeichnet, wenn die Bitplanes deaktiviert sind
- Bevor die CG den oberen Bildschirmbereich erreicht, gibt es viel leeren Raum zwischen dem oberen Rand des Screens und dem Beginn der CG.
- Wenn die Bitplanes in dieser Zeit aktiv sind, wird Datenmüll auf den Bildschirm gezeichnet.
- Wenn die Bitplanes deaktiviert werden, werden auch die Sprites nicht gezeichnet.
- Die Lösung besteht darin, genau 1 Bitplane aktiviert zu lassen und die Screen-Pointer auf leere Daten zu setzen.
Fazit
- Anfangs war unklar, ob CGs wegen der RAM-Anforderungen überhaupt ins Spiel aufgenommen werden sollten.
- Die implementierte Datenkompression zeigt jedoch, dass der Overhead sehr vernünftig ist.
- Besonders interessant ist die Nutzung der einzigartigen Eigenschaften der Amiga-Hardware.
GN⁺-Meinung:
- Dieser Artikel zeigt anschaulich die Grafikfähigkeiten des Amiga und Techniken zur Speicheroptimierung während der Spieleentwicklung.
- Er erklärt, wie sich mit Datenkompression und speziellen Hardware-Funktionen trotz begrenzter Ressourcen eindrucksvolle Effekte umsetzen lassen.
- Das Verständnis und die Nutzung der Hardware klassischer Computer wie des Amiga ist ein sehr spannendes Thema für Retro-Game-Entwickler oder Menschen mit Interesse an Computergeschichte.
1 Kommentare
Hacker-News-Kommentare
Zusammenfassung eines Kommentars zu „Racing the beam“:
$dff180die Farbe am Bildschirmrand setzte und diese Technik nicht über das Internet, sondern durch mündliche Weitergabe gelernt habe.Zusammenfassung eines Kommentars zur Speicherkonfiguration des Amiga 500:
Zusammenfassung eines Kommentars zum Potenzial japanischer Konsolenspiele auf dem Amiga:
Zusammenfassung eines Kommentars zur Faszination des Programmierens unter Einschränkungen:
Zusammenfassung eines Kommentars zu persönlichen Erfahrungen mit dem Amiga und zum Teilen von Methoden zur Animationserstellung: