
BossConvert ist ein Modul speziell für Spiele-Entwickler. Es dient dazu, aus gemalten Bildern von Endgegnern
Sprite-Sets für Action-Spiele zu erzeugen. Ein solcher Endgegner kann bis zu 192x192 Pixel groß sein, d.h.
im Ergebnis aus bis zu 80 Einzelsprites bestehen.
BossConvert nimmt an, dass hardwarebedingt höchstens acht Sprites in einer Rasterzeile angezeigt werden
können, das sind also 8x24 Pixel Breite (192 Pixel insgesamt). Untereinander passen neun komplette Sprites auf eine
Bildschirmhöhe (9x21 Pixel gleich 189 Pixel) bzw. zehn, wenn man aus Darstellungsgründen die Sprites ein wenig
(um zwei Pixel) gegenseitig überlagert (dadurch wird ein Flimmern an den "Nahtstellen" der Sprites vermieden).
Die daraus resultierende Höhe beläuft sich auf 10x19+2 Pixel (192 Pixel, das unterste Sprite hat effektiv seine
volle Höhe von 21 Pixeln, daher "plus 2"). In Bild 3 kann man am rechten Rand die entsprechenden Markierungen
sehen: Die kurzen weißen Striche deuten die normale Spriteverteilung ohne Überlagerung an, die längeren stehen
für überlappende Sprites.
BossConvert geht von zwei klaren Voraussetzungen aus:
· Als erstes muss das Vorlagebild in einem C64-Multicolor-Fileformat
vorliegen, das von GoDot unterstützt wird. Falls das Bild auf einem PC gemalt wurde, muss es dort mit der
GoDot-Palette erstellt worden sein, da es sonst beim Einlesen in GoDot zu Farbveränderungen
kommen würde. Auch solche Bilder vom PC müssen für GoDot zunächst in ein C64-Multicolor-Format umgewandelt werden (damit
BossConvert die richtige Hintergrundfarbe erkennt und sie für die Konvertierung ausklammert).

· Zum Zweiten muss sich der Entwickler beim Malen genau der Restriktionen bei der Darstellung von Sprites
auf dem C64 bewusst sein und seine Endgegner entsprechend gestalten. Abgesehen von der Hintergrundfarbe (die nur
kosmetische Bedeutung hat, da sie bei Sprites transparent ist; zugehöriges Bitmuster %00), sollte der Endgegner aus nur zwei (Basis-) Farben bestehen.
Dies sind die beiden für alle acht gleichzeitig vom Videochip des C64 darstellbaren Sprites
gleichen Farben der VIC-Register $d025 (Bitmuster %01) und $d026 (Bitmuster %11). Zusätzlich darf pro Fläche eines
Sprites nur noch eine weitere Farbe verwendet werden (siehe Bild 3, hier sind die beiden Basisfarben dunkel- und mittelgrau,
sie werden spritekachelweise ergänzt durch hellgrau, weiß, hellrot, rot oder hellblau; entworfen von Stefan Gutsch). Diese Farbe wird im C64 über die
Register ab $d027 dem Bitmuster %10 zugeordnet. Sollen die Sprites des Endgegners sich überlappen, muss auch diese
Option beim Malen berücksichtigt werden. Bild 2 zeigt, dass die gleiche Vorlage wie in Bild 1 ohne Überlappung Farbfehler
in BossConvert hervorrufen würde ("Alert" und "7 ccl").
Bedienung

Der erste Vorgang ist das Laden der Endgegnervorlage mit dem Lader für das entsprechende Fileformat (z.B. Koala).
Vor der Bearbeitung mit BossConvert muss das Bild gerendert werden (Display im Hauptbildschirm).
Nun startet man BossConvert und erhält ein Fenster ähnlich wie in Bild 1 (die Zahlenangaben rechts zu Höhe, Breite und Gesamtzahl
der Sprites stehen dann noch auf Null). Wer sich einen ersten Überblick verschaffen will, klickt im Sprite-Fenster auf das angezeigte erste Sprite.
Die gesamte Grafik erscheint, der Mauszeiger erhält rechts einen Winkel, der die rechte untere Ecke eines Sprites markiert.
Dieser Winkel bewegt sich in Spritegröße-Schritten weiter, wenn man die Maus bewegt (Bild 3). Mit der STOP-Taste
kehrt man zurück ins BossConvert-Fenster.
Mit Define legt man im nächsten Schritt fest, wie groß der Endgegner sein soll. Dazu klickt man die rechte untere Ecke des
Endgegners an, so dass alle Teile des Objekts innerhalb eines gedachten Rahmens um das Objekt liegen. Je nachdem, ob Overlap dabei auf
Yes oder No steht, berechnet BossConvert nun die entsprechende Breite und Höhe des Endgegners in Sprites (Width und Height) und die darin
enthaltene Anzahl an Sprites (Total).
Jeder Klick auf die Anzeige hinter Overlap stellt den Modus um auf überlappende bzw. nicht überlappende Sprites. Gleichzeitig wird der Define-Modus
aktiviert, man braucht nicht extra auf den Define-Knopf zu klicken. Will man jedoch die bestehende Definition eines Endgegners ändern,
ohne den Überlappungsmodus mitzubeeinflussen, klickt man auf Define.
Der dritte Schritt sollte darin bestehen, zu überprüfen, ob alle Sprites des geladenen Endgegners korrekt gemalt wurden. Dazu dient der
Check-Knopf. Wird er betätigt, arbeitet BossConvert alle Sprites im eingestellten Overlap-Modus durch und zählt die im jeweiligen
Bereich vorkommenden Farben. Sind dort zu viele enthalten, meldet Check einen Alert. Nach Ende des Vorgangs wird auch die Gesamtanzahl der
Alerts ausgegeben (s. Bild 2, dort zählte BossConvert "7 ccl", wobei ccl für "color clash" steht). Werden keine Farbfehler
entdeckt, ist alles in Ordnung und der Endgegner könnte so abgespeichert werden. Während dieses Vorgangs erkennt BossConvert auch die beiden
schon angesprochenen festen Basis-Spritefarben und hält sie fürs Speichern bereit.
Sollten jedoch Fehler angezeigt werden, kann man mit den Pfeil-Knöpfen neben der Sprite-Anzeige den Endgegner nach der fehlerhaften
Stelle absuchen. Normalerweise bewegt man sich dabei waagerecht durch die Sprites des Sprite-Sets. Möchte man senkrecht hin und her wandern,
klickt man auf den Richtungsknopf "Dir⇒". Stößt man nun auf ein Sprite, das einen Farbfehler enthält, erscheint ein weiteres Mal
die Alert-Meldung. Ein Klick auf das dazu angezeigte (und wahrscheinlich unschön aussehende) Sprite schaltet um auf die Grafik
und setzt den Anzeige-Winkel auf die zugehörige Stelle im Endgegner. Man soll dadurch in die Lage versetzt werden, die problematische Stelle
im Editor (mod.PixelEdit) leichter wiederzufinden. Die zum Farbfehler führende Ursache muss man allerdings selbst
herausfinden, meist sind nur ein oder zwei Pixel irrtümlich in einer vierten Farbe verblieben, was mit PixelEdit leicht behebbar ist.

Kommt kein Farbfehler mehr vor, kann man mit Save zum Speichern des Endgegners schreiten. Ein neues Fenster überlagert den unteren Teil
der bisherigen BossConvert-Oberfläche. Ganz links werden hier die beiden gefundenen Basis-Farben angezeigt, wobei die obere dem Bitmuster %01
zugeordnet ist ($d025) und die untere dem Bitmuster %11 ($d026), siehe Bild 4. Wer die Zuordnung umdrehen möchte, klickt auf das
Gadget mit den beiden Pfeilen ("⇓⇑"). Anm.: Es ändert sich tatsächlich nur die Zuordnung der Bitmuster zu den Farben, nicht die
Verteilung der Farben im Bild. Sinnvollerweise gibt man seinem Endgegner noch einen aussagekräftigen Namen (maximal 12 Zeichen) und überschreibt
dabei den Vorgabenamen ("Boss01"). Schließlich kann man mit Save den Endgegner endgültig abspeichern. Der Name erhält
dabei automatisch das Präfix "SPS." (Sprite-Set). Wer nur mal schauen wollte, welche Farben BossConvert ermittelt hat, verlässt ohne
weitere Maßnahmen mit Leave das Save-Fenster. Übrigens erfolgt bei seinem Aufruf ein automatischer Farben-Check. Wird dieser
nicht erfolgreich abgeschlossen, erscheint das Save-Fenster nicht.

In Bild 5 sieht man, dass nicht nur Abstufungen von Grau für die Endgegner sinnvoll sein müssen (hier: grün).
Aussichten
Das SPS-Fileformat eröffnet bereits die nächste Stufe der Endgegner-Erstellung: das Animieren des Endgegners. Aus einer Serie von
Endgegner-Vorlagen entsteht dabei eine Serie von Sprite-Sets, wobei zusammengehörige Animationsframes alle in einem einzigen File
abgespeichert werden sollen. Für GoDot werden im Laufe der nächsten Monate die entsprechenden Tools programmiert: Frame-Builder, Animator,
Optimizer.
SPS-Fileformat
File- Inhalt Beschreibung
Offset
----------------------------------
0000 $47 $4f $44 Kennung: "god"
0003 $37 Filetyp: "7" (Spriteset, Filenamenspräfix: "sps.")
0004 $00 Breite in Anzahl Sprites (max. 8)
0005 $00 Höhe in Anzahl Sprites (je nach Überlappung max. 9 oder 10)
0006 $01 Grafikmodus, 0 = Hires, 1 = Multicolor
0007 $00 2 Pixel Überlappung, 0 = aus, 1 = ein
0008 $00 Hintergrundfarbe, Bitmuster %00
0009 $00 Sprite-Multicolor 0 ($d025), Bitmuster %01
0010 $00 Sprite-Multicolor 1 ($d026), Bitmuster %11
0011 $00 Ausrichtung, 0 = nebeneinander, 1 = untereinander
0012 $00 Kompression, 0 = aus, 1 = ein
0013 $00 Anzahl Animations-Frames, 0 = keine Animation
1 = Animation in Spritegröße, ein Sprite = ein Frame
2 und größer: es folgt eine Optimierungstabelle, die
in je zwei Bytes (Frame#/ Sprite#) festhält, welches
Sprite an dieser Stelle eingesetzt werden soll, die
Tabelle enthält für jeden Frame bis zu zweimal 80 Bytes
Spriteverweise.
0014 ... erster Frame... (enthält Breite x Höhe Sprites à 64 Bytes)
Im 64. Byte jedes Sprites befindet sich die noch fehlende
dritte Farbe des Sprites ($d027 und folgende, Bitmuster %10)
nnnn $ad File-Ende
Voreingestellte Werte sind fett gedruckt. Zum gegenwärtigen Zeitpunkt (August 2008) wird nur der Multicolormodus (Flag an Offset 6) unterstützt. Die Ausrichtung der Sprites im Spriteset ist Sache des einlesenden Programms, das Flag an Offset 11 sagt nur, wie es sein soll. Die Kompression ist die von GoDot verwendete: auf das Indikatorbyte $ad folgt ein Zähler für die Anzahl der Wiederholungen des dritten Bytes. Ein Zähler von $00 steht dabei für 256 Wiederholungen: $ad $00 $ff = 256 mal $ff.
Korrespondierende Module:
ldr.SPSto4Bit (zum Rückwandeln eines Spritesets in Grafik)
Arndt Dettke
support@godot64.de
Copyright © 2008, Arndt Dettke, letzte Änderung - 24.08.08