1 Punkte von GN⁺ 2024-02-26 | 1 Kommentare | Auf WhatsApp teilen

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:
    1. Der Coprozessor (copper) arbeitet parallel zur CPU und kann angewiesen werden, an bestimmten Bildschirmzeilen Hardware-Register zu ändern.
    2. Der Screen-Speicher kann an beliebige Stellen im Chip RAM umgeschaltet werden, indem in den Hardware-Registern die Screen-Pointer gesetzt werden.

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

 
GN⁺ 2024-02-26
Hacker-News-Kommentare
  • Zusammenfassung eines Kommentars zu „Racing the beam“:

    • Ein Nutzer erinnert sich, dass er sich mit der Technik des „Beam Racing“ gut auskannte und sie nutzte, um die CPU-Zeit pro Frame zu berechnen.
    • Er erwähnt, dass er mit der Adresse $dff180 die Farbe am Bildschirmrand setzte und diese Technik nicht über das Internet, sondern durch mündliche Weitergabe gelernt habe.
    • Er fragt sich, ob es heute noch Menschen gibt, die versuchen, das Beste aus diesem Chipsatz herauszuholen, und welche Profile die Leute haben, die Spiele für den Amiga entwickeln.
    • Er bedankt sich dafür, das Interesse am Amiga geteilt zu haben.
  • Zusammenfassung eines Kommentars zur Speicherkonfiguration des Amiga 500:

    • Ein Nutzer weist darauf hin, dass der Amiga 500 standardmäßig über 512 kB Chip-RAM verfügte und viele Nutzer ihn um zusätzliche 512 kB Fast RAM erweiterten.
    • Er erklärt, dass dieser erweiterte Speicher von der Grafik-Hardware nicht direkt angesprochen werden konnte und langsamer als echtes Fast RAM war.
  • Zusammenfassung eines Kommentars zum Potenzial japanischer Konsolenspiele auf dem Amiga:

    • Ein Nutzer fragt sich, wie japanische Konsolenspiele auf dem Amiga ausgesehen hätten, und ob dem Amiga die Leistung fehlte oder ihm einfach das Design der meisten Spiele nicht gefiel.
    • Er nennt als Beispiel die von Factor 5 erstellte Portierung von Bonk und lobt sie als zauberhafte Entwickler.
  • Zusammenfassung eines Kommentars zur Faszination des Programmierens unter Einschränkungen:

    • Ein Nutzer sagt, dass das Programmieren unter Einschränkungen sehr reizvoll sei.
  • Zusammenfassung eines Kommentars zu persönlichen Erfahrungen mit dem Amiga und zum Teilen von Methoden zur Animationserstellung:

    • Ein Nutzer sagt, dass sich der von ihm genutzte Amiga anders angefühlt habe als das, was andere erlebt hätten, und erwähnt im Vergleich zum Nintendo NES, dass er nicht besonders nostalgisch sei.
    • Trotzdem erkennt er an, dass es sehr cool ist, zu zeigen, wie solche Animationen gemacht wurden.