Puzzle 010

So weit, so gut???

C64 Studio

Lasst uns nun das Puzzle vorläufig abschließen. Wir haben im letzten Beitrag ja schon alles vorbereitet, sodass wir jetzt nur noch die Bildschirme fürs Weiterkommen oder Game Over anzeigen müssen.

Game Over

Kümmern wir uns zunächst ums Game Over. Wir wollen im Falle eines scheiterns, einen abschließenden Bildschirm anzeigen. Dazu entwerfen wir im Char Screen Editor unseren Game Over Bildschirm mit dem Namen „GameOver.charscreen“.

Beispiel fürs Game Over.
Beispiel fürs Game Over.

Jetzt noch die Funktion gameOver anpassen:

Wir schalten zu Beginn alle Sprites ab, die benötigen wir hier ja nicht mehr. Dann rufen wir unsere bekannte Routine drawScreen zum Anzeigen der Game Over Meldung auf. Abschließend warten wir darauf, dass der Feuerknopf gedrückt und wieder losgelassen wird, bevor wir zum Titelbild zurückspringen.

Gewonnen!

Jetzt noch etwas Ähnliches für das Lösen des Puzzles.
Auch hier zeigen wir einen Bildschirm „Solved.charscreen“ an, der den Spieler darüber informiert, dass er es geschafft hat und was als nächstes geschieht.

Gewonnen, es kann weitergehen.
Gewonnen, es kann weitergehen.

Auch hier die dazugehörige Funktion puzzleSolved anpassen:

Eigentlich ist alles so wie bei gameOver, nur das hier ein anderer Bildschirm angezeigt wird. Da noch kein weiterer Level vorhanden ist, springen wir auch hier erstmal zurück zum Startbild.

Damit unsere beiden Bildschirme gefunden werden, müssen wir die natürlich noch einbinden, wie wäre es hinter screenPuzzle:

Wenn ihr das Programm nun startet, sollten die entsprechenden Bildschirme angezeigt werden. Allerdings klappt der Neustart noch nicht so ganz.
Da durchs Spielen einige Werte geändert wurden, müssen wir diese für einen erneuten Versuch natürlich wieder auf die korrekten Startwerte zurückstellen.

Fügen wir hinter puzzleMainLoop diese neue Routine ein:

Das Meiste stammt aus puzzleMain und wird dort von uns gleich entfernt. Wir setzen die Rahmen- und Hintergrundfarbe auf schwarz und zeigen den Puzzle-Bildschirm an. Dann sorgen wir dafür, dass wir ein gelöstes Puzzle haben, bevor wir die Sprites laden und das Puzzle mischen. Dann wieder unseren Zähler für den timer auf 20 zurückstellen und die Uhrzeit im CIA1 auf Null setzen.

Wie erwähnt können wir jetzt puzzleMain bereinigen. Zwischen den beiden Sprungmarken benötigen wir nur noch den Aufruf unserer neuen Funktion (siehe Markierte Zeile).

Mäuschen mach mal Piep 😉

Eigentlich sind wir nun am fertig mit unserem ersten Spiel, aber ich möchte doch noch eine Kleinigkeit hinzufügen. So ganz ohne akustische Rückmeldung will ich das Puzzle jetzt nicht abschließen. Also lasst uns einen kleinen Ton wiedergeben, wenn ein Puzzleteil bewegt wird. Das ist jetzt wirklich nichts umwerfendes, daher verzichte ich hier auch auf einen eigenen Beitrag zum Thema Sound (der kommt später).

Wie so häufig benutze ich wieder einige Konstanten, fügt diese daher in den Source ein.

Dies sind erstmal nur die gleich von uns benötigten Konstanten, später lernen wir alle SID-Adressen kennen.

Jetzt brauchen wir noch eine kleine Routine, die unseren Sound wiedergibt. Fügt hinter checkInput die nächsten Zeilen ein:

Da unser Sound nur sehr kurz wiedergegeben wird, haben einige Register keine bzw. kaum eine Auswirkung. Wir initialisieren diese aber trotzdem.
Zu Beginn setzen wir Anschlag und Abklingen auf 0, dann die Wellenform für die erste Stimme auf Rauschen und schließlich die Frequenz. Wir beschränken uns bei der Frequenz auf das MSB und wählen eine relativ niedrige aus. Ganz am Schluß setzen wir die Lautstärke auf den Wert, den wir im X-Register an die Routine übergeben haben und schon sind wir fertig.

Natürlich muss unser Sound auch noch aufgerufen werden. Sucht in der Funktion performInput nach dem Label .refresh und fügt dort die markierten Zeilen ein:

Wir starten vor dem erneuten Zeichnen unseren Ton mit der maximalen Lautstärke. Dann wird alles neu gemalt, danach setzen wir die Lautstärke einfach auf 0. Damit wird unser Ton also während des Bewegen der Puzzleteile wiedergegeben. Da das Mischen auch diese Funktion verwendet, erhalten wir auch zum Start einen Sound.

Wir gehen hier natürlich mit der Brechstange vor. Einfach die komplette Lautstärke auf 0 zusetzen ist natürlich nicht die feine Art. Da wir nur diesen einen Ton verwenden, hat das zur Zeit aber keine negativen Auswirkungen.

Damit wären wir am Ende des Puzzlespiels.

Das Programm hätte man (evtl. sogar einfacher und schneller) auch unter BASIC entwickeln können. Hier ging es aber in erster Linie darum ein erstes, kleines, lauffähiges Programm in Assembler zu erstellen.
Natürlich läßt sich hier noch vieles verbessern z. B. wären richtige Sounds und eine Hintergrundmusik sehr schön. Auch hübschere Grafiken würden das Programm aufwerten. Man kann auch überlegen, statt mit Sprites das Puzzle nur mit dem Zeichensatz zu erzeugen. Unsere bereits erwähnte Speicherplatzvergeudung (seht euch nur die vier Bildschirme an) sollten wir durchaus noch mal überdenken.

Aber das soll uns zunächst nicht interessieren, die Planung ist ja so angelegt, dass wir nach und nach die benötigten Fertigkeiten erlernen.

Nun geht es, wie geplant, mit Level 2 – Die Landung weiter…


Schrott!!Naja...Geht so...Ganz gut...SUPER! (5 Bewertungen | Ø 5,00 von 5 | 100,00%)

Loading...


ZurückWeiter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Protected by WP Anti Spam