Programmieren und programmieren

  • Mahlzeit Leute!

    Mein jüngster Nachwuchs hat mich jetzt so lange bearbeitet, bis ich ihr zugesichert habe ein kleines Spiel zu programmieren, für welches sie die Grafiken zusteuern kann. Ich muss dazu sagen, sie ist beim zeichnen ein echtes Ass. Sie zeichnet mit Finger auf Handy ganze Animationen Bild für Bild mit Perspektivwechsel und so wo ich die Welt nicht mehr verstehe. Ich kann das mit Blender, niemals von Hand.

    Aber okay. Ich habe mich also entschieden, ein Spiel im Stil von Moonstone zu machen. Falls das jemand kennt, ist ein Amiga Spiel mit RPG und so.

    Seither baste ich da dran rum, wenn ich mal etwas Zeit habe. Habe ich eientlich nicht, aber ich knapse mir eben immer mal wieder was ab. So von 0 bis 3 oder so :rolling_on_the_floor_laughing: .

    Für mich wäre es aber jetzt dann doch zu simpel, dass nur für Linux zu programmieren. Also habe ich mich entschieden, Spiel und Engine zu trennen. So wie bei ScummVM. Aso das Spiel ist immer das Gleiche, nur die Engine muss auf verschiedenen Plattformen laufen. Da ich ein Amiganer bin war für mich sofort klar, ich schreibe das auch für das AmigaOS. Aber nicht wie viele es machen, die heute für Amiga programmieren und versuchen das auf einem Amiga500 lauffähig zu machen. Nö. Nicht mit mir. Das soll am Ende auf Linux, Windows und AmigaOS gleich aussehen und gleich laufen. Ich setze beim Amiga auch eine Grafikkarte voraus und schreibe gar keinen Part für OCS oder AGA. Es gibt mittlerweile mit der ZZ9000 eine wirklich sehr gute Grafikkarte für die Kiste und die soll dann auch gefordert werden. Wer das nicht bieten kann, der soll es eben auf Windows oder Linux spielen.

    Aber jetzt ans eigentliche Thema. Linux und Windows ist mit SDL3 schon fast langweilig. Das fühlt sich mehr an wie Baukasten kicken als wie programmieren. Aber, es funktioniert soweit super. Ich kann es auf Linux compilieren oder auf Windows und es läuft exakt gleich. Das war beim AmigaOS an Anfang eigentlich auch so. Bis mir dann aufgefallen ist, wenn ich ein Bild als Hintergrund zum Beispiel lade, wird das quasi immer auf 8 Bit runter gerechnet. Ausser ich arbeite mit Reaction, aber das ist für GUIs gedacht und damit ein Spiel bauen geht, ist aber krank.

    Also hab ich angefangen, alles von Hand auf den Picasso96 Treiber umzubauen. Das wäre wohl weniger ein Problem gewesen, wenn man dafür eine gute Dokumentation finden würde. Die pflegen aber anscheinend nur noch die Amiga OS 4 Variante und die ist nicht übertragbar. Toll.

    Was mich am Anfang total aufgeregt hat, finde ich mittlerweile extrem Grossartig. Ich hatte bisher noch nie eine Berührung mit rohen Bilddaten, hab mir nie Gedanken gemacht, was Alpha-Blending eigentlich ist und wie man eine gGafik-Engine optimiert, davon hatte ich auch keine Ahnung. Dynamische Speicherverwaltung und so etwas kenne ich schon von früher. Wie drückt man aber nun geladene Pixel-Daten in ein Fenster? Das war komplett neu für mich und so Sah das Ergebnis am Ende auch aus. Nur Hintergrund zeichnen, schon nur noch 12 FPS bei 800x600. Nicht gerade toll für ein Spiel, welches auch FullHD können soll.

    Logischer Schritt, den Hintergrund einfach nur 1x zeichnen. Der ändert sich ja nicht. Ergebnis, 60 FPS. Also Anschlag.

    Nächster Schritt, Spieler einbauen. Das ist im Moment einfach ein geladenes, rotes Rechteck. Laden und anzeigen ist ja nichts anderes wie beim Hintergrund. Das war also fix drin. Danach dann die Steuerung einbauen. Auch kein Hexenwerk. Läuft genauso wie unter Linux auch, lediglich mit anderen Funktionen. Aber das Prinzip ist das Gleiche.

    Das Ergebnis war jedoch bescheiden. Denn der Spieler hat den Hintergrund natürlich überschrieben. Also, nicht nutzbringend. Dann doch wieder den Hintergrund vor dem Spieler neu zeichnen. Yeah, 12 FPS im Stillstand, 6-9 FPS bei Bewegung. Durchgefallen. Aber okay. Wie optimiert man das jetzt? Ganz einfach. Das Hintergrundbild ist ja nach wie vor im Speicher. Also schreiben wir doch einfach nur den Bereich mit dem Hintergrund neu, wo die letzte Spielerposition war. Tada, Hintergrund, Spieler, Spieler in Bewegung, Hintergrund bereinigt, 60 FPS, Geil!

    Picasso96 frisst aber keine Alpha-Werte. Die werden zwar über die Datatypen mit PNG zum Beispiel korrekt geladen, aber eben ignoriert. Scheisse. Ich kann ja schlecht die gezeichneten Figuren meines Kindes mit einem Kasten drum rum laufen lassen. Das geht ja wohl gar nicht. Nur, wie geht das mit dem Alpha eigentlich? Ist das irgendeine Magie? Nö. Überhaupt nicht. Man kopiert einfach den Hintergrund an der Stelle, wo sich der Spieler befindet. Dann nimmt man den Spieler und zeichnet diesen über das Stück Hintergrund. Dort, wo Alpha-Werte sind, wird einfach nichts über den Hintergrund gezeichnet. Am Ende wird das Stück dann genau auf die entsprechende Position ins Fenster, Bingo. Alpha-Blendling. Also einfach in Blender in mein rotes Rechteck ein Loch eingebaut, in der Engine geladen und schau an, wird tadellos verwendet und immer noch steife 60 FPS.

    Was ich jetzt damit sagen will. Ja, mit SDL3 und so arbeiten ist schon eine coole Sache. Man kann sich um das Spiel kümmern und muss sich keine Gedanken um die Magie dahinter machen. Wenn ich aber jetzt dagegen halten, wie viel ich jetzt über Grafik, Framebuffer und so weiter gelernt habe, finde ich die Variante mit dem AmigaOS um Welten besser. Mir macht das so auch viel mehr Spass, da ich weiss was dahinter passiert. Mir macht das gerade Spass ohne Ende.

  • Dieses Thema enthält 2 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!