Das kann Vice meine ich auch
Mir ging es nicht so um die genaue Darstellung, sondern dass ich durch meinen Code direkt debug-steppen kann. Läßt sich der emu64 auch fernsteuern? Ich würde da gerne auch mal einen anderen Emu anbinden.
Hallo Besucher, der Thread wurde 82k mal aufgerufen und enthält 219 Antworten
letzter Beitrag von syshack am
Project J - Wir schreiben ein C64 Spiel in mehreren Schritten
- Endurion
- Erledigt
-
-
Hi,
schreib doch mal Thorsten an. Ich glaube mich zu erinnern, das die Frage beim Vortrag auf der BCC#5 kam und er meinte, so was sei
in Arbeit oder er plane es.
Das laufende Programm an zu halten und genau in der Darstellung zu sehen wo der Rasterstrahl ist, kannte ich vom VICE nicht.Gruß Höp
-
Und noch mehr Kleinigkeiten: Score/Leben/Level-Anzeige
Da wir schon eine Text-Anzeige-Funktion haben plazieren wir einen neuen Default-Text für die Score-Anzeige mit anfänglichen 00000-Werten. Man beachte: Die Score-Werte passen nicht so ganz in ein Byte. Wir updaten nur die Zahlen (bzw. Characters) auf dem Bildschirm, der Score wird nicht noch in einer anderen Weise abgespeichert.
Das vereinfacht das Updaten ungemein. Für jeden Score-Step beginnen wir mit dem rechts-äußersten Zeichen und erhöhen es. Steht es auf dem Zeichen nach '9', setzen wir es auf '0' und wiederholen den Vorgang ein Zeichen weiter links. Um der guten alten Zeiten willen, fangen wir nicht wirklich beim letzten, sondern beim vorletzten Zeichen an (Scores erhöhen sich so mindestens um 10 Punkte, aber das macht gleich viel mehr her).
-
Keine große Aktion, aber macht gleich Einiges mehr aus: Wir statten den Spieler mit Animation und besseren Sprung-Fähigkeiten aus.
Die meiste Arbeit wurde in PlayerControl investiert. Bei jeder Bewegung wird das Sprite mit Berücksichtigung diverser Stati wie Springen, Rückstoß, Fallen, etc. upgedatet.
Für den Sprung wurde lediglich die PLAYER_JUMP_TABLE angepaßt.Und schon sieht es Ecken besser aus
-
In diesem Schritt animieren wir (endlich) auch mal die Gegner und bauen gleich einen neuen Typ ein, der einem Bewegungspfad folgt. Die Bewegungstabellen sind nach delta X und delta Y aufgeteilt. Ist das höchste Bit gesetzt, wird der Wert negativ behandelt.
Die Animation (drei Frames im Ping-Pong-Loop) wird ebenfalls in einem Table abgelegt.
Jedes Objekt bekommt einen Animationsverzögerungszähler, einen Animationsframe-Zähler und einen Bewegungspositionszähler verpaßt.
-
Diesmal nichts großartig Neues. Ein neuer Gegner, die Mumie, die langsam hin- und herwackelt. Und mehr Schüsse aushält als die Fledermäuse.
Ein neues Behaviour wird zum Table hinzugefügt, und extra Code stellt sicher, daß die Mumie nicht in Lücken tritt.
-
Noch mehr Verfeinerung von existierendem Code, dieses Mal mit mehr Einfluß auf den Spielablauf.
Zum einen muß die Schrotflinte nachgeladen werden (indem man ruhig stehen bleibt). Zum anderen haben die aufgenommenen Items jetzt auch einen Effekt, nämlich schnelleres Aufladen und Unverwundbarkeit.
-
Jetzt mal etwas technisch Interessantes:
Wir bauen einen Titel-Screen mit einem Bitmap Logo ein. Es wird ein einfacher Rasterzeileninterrupt benutzt, um das Logo in den ersten 8 Zeilen und Textmodus in den restlichen Zeilen anzuzeigen.
Für die Pingel: Ein einfache Rasterzeileninterrupt ist nicht ganz genau, d.h. es gibt da einen nicht stabilen Übergang nach den ersten 8 Zeilen. Wenn man in dem Bereich einfach nichts anzeigt, merkt man es aber nicht.Die Bitmap wurde mit einem Lua-Script aus einer PC-Grafik konvertiert (ist ja auch wahnsinnig aufwendig). Aus den erzeugten Daten wurden nur die benötigten Daten ausgeschnitten. So werden nicht die vollen 8K für die Grafik verbraten.
-
Der Titelscreen sieht etwas leer aus, nicht? Dann packen wir da mal Highscores rein. Faul wie ich bin sind die Highscore Scores und Namen in zwei Textblöcken zur Anzeige abgelegt. Dadurch lassen sich die beiden Blöcke mit der Standardroutine anzeigen.
Nach dem Spielende prüfen wir ob es für einen Eintrag reicht. Falls ja, schieben wir alle niedrigeren Einträge runter. Im Moment passiert das noch automatisch und es betrifft nur die Punkte. Die Namenseingabe folgt im nächsten Step.
-
Ich wollte nur mal kurz schreiben, wie absolut toll ich diesen Thread finde... Hab hier schon so viel gelernt...
Weiter so...
-
Highscore-Anzeige, wie toll! Aber es sind immer die selben Werte. In diesem Schritt wird die Highscore-Eingabe eingebaut. Dazu wird die Kernal-Tastaturabfrage benutzt.
Zusätzlich zum Score-Verschieben aus dem vorherigen Schritt werden jetzt auch die Namen verschoben. Der Spieler-Name wird dann direkt in den Textblock eingesetzt.
Aus äh.. taktischen Gründen findet die Eingabe derzeit noch direkt auf dem Spielfeld statt. Das wird dann auch in Kürze behoben.
-
Na toll, ich sollte nicht im Halbschlaf posten: Also, offenbar war schon der Code für diesen Step in der letzten Woche angehängt. Dafür diesmal angehängt der Code des letzten Schrittes
Und bei Step #21 handelt es sich NICHT um ein Bitmap-Logo, sondern noch um Charset. Das Bitmap-Logo ist erst nächstes Mal dran. Leider kann ich da nicht mehr rückwirkend editieren.Weiteres zum Highscore: Highscores sind gut und schön, aber sie gehören gespeichert. Mit diesem Step werden die Scores gespeichert und geladen, und zwar auf dem zuletzt benutzten Gerät (Kassette oder Disk). Beim Start wird das benutzte Device gespeichert, und ab da wird mit den Kernal-Routinen darauf zugegriffen.
Visuell daher dieses mal kein Unterschied. -
Wie schon angekündigt, diesmal wirklich ein Bitmap Logo.
Das Titellogo wird mit dem Bitmapmodus dargestellt. Es wird ein Rasterzeilen-Interrupt benutzt, um zwischen Bitmap- und Text-Modus umzuschalten.
Die Bitmap wurde mit einem Lua-Script aus einer PC-Grafik konvertiert (ist ja auch wahnsinnig aufwendig). Aus den erzeugten Daten wurden nur die benötigten Daten ausgeschnitten. So werden nicht die vollen 8K für die Grafik verbraten.
Jetzt wartet nur noch auf die Schritte, wenn Smilas Grafiken eingesetzt werden
-
Und nun wieder etwas Spiel-relevantes, ein neuer Gegner. Da bietet sich doch der allseits beliebte Zombie an.
Der Zombie taucht aus dem Boden auf und stolpert langsam vorwärts. Wird er getroffen, verschwindet er wieder im Boden. Wo er dann auch die Position ändern kann. Bis er wieder auftaucht...
-
Und noch ein Gegner, eine Fledermaus, die bei Beschuß verschwindet, um dann ganz fies den Spieler attackiert.
-
Die Level sind im Moment noch eher simpel gehalten. Um da etwas mehr Schwung reinzubringen, werden neue Level-Elemente ermöglicht:
Als Erstes ein Flächenelement (mit Zeichen, Farbe, Breite und Höhe). Dazu horizontale und vertikale Linien, die das verwendete Zeichen immer um +/- 1 abändern. Und noch ein Element für 2x2 Tiles.
-
Hi Endurion
Finde deine Arbeit hier sehr gut. Es ist leicht verständlich und gut erklärt.
Mal eine Frage:
Würdes du so was auch mal für ein Intro oder Demo machen mit allen was dazu gehört?
Ja, ich weis im Netz gibt es schon zick Erklärungen über solche Dingen. Aber die sind meisten immer kurz und bündig. Wenn man bei so einen Kurs kein Hintergrundswissen besitz, steht man ganz schön auf den Schlauch.Gruss Drachen
-
Hmm, ich hab noch nie ein Intro oder Demo gemacht, da sind ganz andere Qualitäten gefragt. Da fehlt mir ehrlich die Erfahrung dazu.
-
Hi Endurion
Schade,
Naja, werde deinen Kurs auf jeden Fall mit Spannung weiter verfolgen.Gruss
Drachen -
Und wieder ein kleiner kosmetischer Fortschritt. Wie sehr oft gesehen, ein netter bewegter Farbverlauf über den Highscore-Einträgen.
Sehr einfach umzusetzen, einfach in jedem Frame die Farb-Werte weiterschieben.