Soundroutine
Meine Fresse: Ich habe am Wochenende die Soundroutine programmiert, so dass man mal ein paar Schussgeräusche und Einschläge in die Wänden hört und so weiter ... und ich weiß schon, warum ich das für einen ruhigeren Moment aufgespart habe: Das ist echt gar nicht so einfach. Der Atari hat zwar vier identische Soundkanäle, aber die ertönenden Geräusche muss man trotzdem irgendwie intelligent verteilen. Zudem habe ich mir die Aufgabe gestellt, für die Geräusche nur einen Kanal zu verwenden. Dann kann ich nämlich später leichter mal eine Musik auf den restlichen drei Kanälen laufen lassen. Dieses Spiel wird zwar keine Musik haben (so ist zumindest im Moment der Plan), aber dann habe ich das Problem für spätere Spiele schon mal erledigt. Außerdem habe ich so im Gefühl, dass eine dynamische Verteilung von Geräuschen auf mehrere Kanäle noch einmal komplizierter ist, als wenn man nur einen Kanal verwendet.
So, und trotzdem ich mich am Wochenende einmal wirklich völlig vergaloppiert habe - sprich: es ging gar nichts mehr - funktioniert das jetzt sehr gut. Bei Assembler-Programmierung ist es allerdings auch ziemlich einfach, so richtig Chaos zu programmieren. Es wundert mich sowieso, dass nicht zwischendurch schon mal eine Katastrophe passiert ist. Und ehrlich gesagt habe ich auch ein klein wenig Schiss, dass mir zum Schluss der Entwicklung noch ein Bug mit Anlauf in den Popo tritt, den ich bisher übersehen habe und/oder der bisher einfach nicht auftrat.
Im Moment ist das Programm genau 1911 Byte lang:
|
Quellcode
|
1
2
3
4
|
Assembly successful
Compiled 1911 bytes (~1k)
Writing raw binary image:
b000-bfff
|
Ich bin jetzt also knapp bei der Hälfte der von mir gesteckten 4-KByte-Grenze. Wenn ich bedenke, was noch alles dazu kommen soll ... es wird knapp.
Score und HiScore
Nebenbei bemerkt ist auch schon die Score- und HiScore-Routine enthalten. Das ist auch so ein Ding: In einer Hochsprache macht man sich nicht einmal im Ansatz Gedanken darüber, wenn eine Zahl auf dem Bildschirm erscheinen soll. Aber in Assembler? Da darf man die Umrechnung von Binär auf Dezimal alles per Hand machen. Zum Glück kennt der 6502-Prozessor einen sog. »Decimal Mode«, den ich dann auch nutze (was bedeutet, dass das Spiel auf der 6502-Variante des NES von Nintendo nicht laufen würde, denn der Prozessor kennt den »Decimal Mode« nicht; aber das sei nur am Rande bemerkt). Ich bin dann mal auf die Idee gekommen, dass der Score gar nicht als Binärzahl verarbeitet wird, sondern gleich als BCD (also immer zwei Dezimalzahlen pro Byte). Und dann ist der Rest gleich deutlich einfacher. Geht jedenfalls auch schon.
Es fehlt nicht mehr viel und dann ist der (zugegeben ziemlich dröge) Prototyp fertig.