Posts by Acorn

    Bin wieder zurück und habe als Erstes die Optimierung von Snoopy getestet und Zeile 60 und 70 geändert. Im direkten Vergleich (zwei Emulatoren ROM 920376) ist das leider deutlich langsamer.

    Code
    1. 60 IF PEEK (O+I) THEN : ELSE IF PEEK (O-L) THEN : ELSE POKE O,. : POKE O-L,$E : GOTO 1
    2. 70 IF PEEK (O+K) THEN : ELSE IF PEEK (O+L) THEN : ELSE POKE O,. : O=O+L : POKE O,$E : GOTO 1 : ELSE 1

    Dann habe ich mir Drachen sein Menü angeschaut, insgesamt gefällt mir das ganz gut. Aber die schwarzen Schrägen an den Buchstaben fallen extrem auf, die würde ich herausnehmen. Wenn alles passt, würde ich das dann mit den Zeichenfunktionen erzeugen, das dürfte Platzsparender sein.



    Jeder der will, kann hier mit machen, desto schneller wird das Spiel fertig. Egal ob Tipps und Tricks zu Basic, Optimierungen von Programmcode, Sound, Musik, Grafik.

    Muss das Projekt erstmal auf Eis legen, da ich jetzt für zwei Wochen im Urlaub bin! Deshalb kann ich auch keine Fragen beantworten.


    Der aktuelle Stand:

    Kleiner Bugfix beim Glühwürmchen, das Bewegt-Flag hatte das falsche Grafikzeichen. Auf die schnelle unten eine Status Zeile eingebaut.

    Man hat weiterhin nur ein Leben, das erzeugt einen schönen Zeitdruck, besonders im zweiten Level, wo man 75 Diamanten einsammeln muss. Achtung bei Timeout wird das Programm beendet, hehe.

    Files

    • BD-Stand.7z

      (17.25 kB, downloaded 7 times, last: )

    Ach Drachen macht dir keine Sorgen, da gibt es noch genug zu tun. Das Titelbild, Menü mit Level Anwahl und Schwierigkeitsgrad, Sound im Spiel, die Grafik muss noch umgestellt werden. Stichwort Grafik, es wäre natürlich noch viel cooler, wenn man den 64-Byte Mode verwenden könnte. Da man dann alle Zeichen ohne das Farbram verwenden kann und alles viel bunter und schöner wäre. Den Spieler könnte man durch ein Sprite ersetzen und extrem gut animieren.

    Du hast die Level nochmal neu erstellt, ist doch viel mehr Arbeit alles nochmal zu machen. Weil sich dadurch wieder Fehler einschleichen, wie bei Cave-H. Außerdem habe ich doch schon alle Daten erstellt, man muss doch nur noch die Objekte anpassen. Das geht bestimmt viel schneller und die Level (sollten) sind so weit alle Fehlerfrei.

    Ich sage ja komisch hmm bei mir stimmt das Level.

    Hier bei Cave L ist das Level auch nicht 100% korrekt.

    Hier mal der Vergleich

    Eventuell hast du aus Versehen etwas an der Routine geändert, weil bei mir alles O. K. ist.



    Ich teste gleich mal Cave H aus deiner Datei.

    Ich beschäftige mich gerade mit der Statuszeile, das ist leider mehr Arbeit als gedacht, wie immer. Man könnte jetzt meinen ein PRINT"Diamanten: "MG" " Zeit: "ZT" Punkte: "PT und fertig ist die Zeile. Aber leider gibt Print die Variablen immer mit ein Space als Platzhalter aus und die Ausgabe ist auch noch von der Anzahl der Stellen abhängig. Zu guter Letzt wird auch noch bei voller Zeilenlänge ein Zeilenvorschub ausgelöst.


    Meine jetzige Lösung ist eine Mischung aus Print mit Poke, um das Space zu kaschieren. Am Zeilenende für den Punktezähler verzichte ich komplett auf Print und setze voll auf PEEK&POKE. Alles in allem ein wildes Gefummel, nur um das ganze mit Print hinzubiegen und dann flimmert das auch noch ab und zu, gefällt mir so gar nicht. Wenn man Sleep aus Zeile 95 entfernt, sieht man das Flimmern bei Print besser.


    Gibt es vielleicht eine einfache Lösung in Basic.

    Files

    Komisch das Problem besteht bei mir nicht. Habe auch alle Bonus + Level von BD-I und II mit der Seite verglichen und keine Fehler entdeckt. Da zufällig Cave D zu testen vorhanden ist, habe ich nochmal verglichen, ob sich in der optimierten Version ein Fehler eingeschlichen hat. Aber dem Screenshot nach sieht alles korrekt aus.


    Du kannst ja nochmal aus Posting #224 die Datei testen.

    Das ist schon die zweite Cave wo der Zufall nicht ganz stimmt. Muss mal eine ander Zufallszahl nehmen.

    Dann stimmt das Level halt nicht zu 100% mit dem original überein. ^^

    Bei welchen Cave stimmt denn der Zufall nicht, das würde ich gern mal testen.

    Bei der Linie musst du beide Werte addieren, z. B. rechts runter = 1 + 4. Die Data Zeile für so eine Linie sieht dann so aus: DATA 2,13,1,1,5,10.


    Die Richtungen:

    1. rechts

    2. links

    4. runter

    8. hoch

    Was ich noch wissen möcht, welche Chars sind bei die die Magischen Mauern und die Amöbe?

    Der Ausgang hat die Objekt-Nr. 7, magische Mauer die 6 und die Amöbe liegt auf der 41.


    Hier mal die Liste aller Objekte.

    0 - Space

    1 - Sand

    2 - Dreck

    3 - Erde

    4 - Stahlwand

    5 - Mauer

    6 - Magische Mauer

    9 - Ausgang

    8 - Ausgang offen

    9 - Glibber

    10 - Mauerwerk schnell

    11 - Mauerwerk

    12 - Stein schnell

    13 - Stein liegt

    14 - Stein fällt

    15 - Stein Flag

    16 - Diamant schnell

    17 - Diamant liegt

    18 - Diamant fällt

    19 - Diamant Flag

    20 - Glühwürmchen oben

    21 - Glühwürmchen links

    22 - Glühwürmchen unten

    23 - Glühwürmchen rechts

    24 - Glühwürmchen Flag

    25 - Schmetterling oben

    26 - Schmetterling rechts

    27 - Schmetterling unten

    28 - Schmetterling links

    29 - Schmetterling Flag

    30 - Explosion Stufe 1

    31 - Explosion Stufe 2

    32 - Explosion Stufe 3

    33 - Explosion Stufe 4

    34 - Diamanten Explosion 1

    35 - Diamanten Explosion 2

    36 - Diamanten Explosion 3

    37 - Diamanten Explosion 4

    38 - Zeilen-Ende

    39 - Level-Ende

    40 - Amöbe schnell

    41 - Amöbe

    42 - Amöbe Flag

    43 - Spieler

    44 - Spieler Flag

    Flag = Objekt wurde in dieser Runde schon bewegt.

    Ich bin von deiner Engine echt begeistert. Das Spiel läuft echt sau schnell.

    Es macht echt Spass die Caves zu testen ob alles so läuft wie es laufen soll.

    Danke, die Engine in Basic ist praktisch eine 1 : 1 Umsetzung meiner Assembler-Engine. Da der Mega65 mit 40 MHz läuft, war es ein Versuch wert wie weit man mit Basic ohne Compiler kommt. Aber selbst mit den 40MHz ist die Engine um Welten langsamer als auf dem C64 in Assembler.

    Was jetzt nicht geht, wenn man zum Ausgang geht, baut er das nächste Level nicht richtig auf. Aber das hast du ja schon erwähnt das du da noch was machen musst.

    Der Wechsel zum nächsten Level sollte eigentlich funktionieren. Bei den bisherigen Levels aus BD I und II klappt das ohne Probleme. Was noch nicht geht, wenn man das Level nicht beendet, fängt das Spiel mit dem ersten Level wieder von vorne an. Da dann einfach nur ein Restore ausgeführt wird, weil die Liste dazu noch fehlt.

    Es gibt noch ein anderes Problem, und zwar mit der Statuszeile. Wenn man einfach Print verwenden würde, müsste man dafür die Zeichen 1-44 verschieben. Das hätte aber einem Riesen Riesen Nachteil, anstatt der ca. 4,4 Kb wären dann ca. 6,5 Kb mehr an Speicher für die Felder nötig. Die würde ich ungern dafür opfern und das Umstellen kostet nur unnötig viel Zeit. Außerdem kann man mit Print Variablen auf dem Bildschirm nicht mit konstanter Länge ausgeben. Deshalb werde ich die Zahlen mit Poke ausgeben und die Zeichen eben so. Als Alternativen wären auch Sprites denkbar, um die Statuszeile darzustellen.

    Das Cave-Format ist von BD-II, da sind die Daten anders angeordnet als in BD-I. Die Farben werden bei BD-II getrennt behandelt, in Basic ist das aber ein Nachteil. Deshalb würde ich die auch am Anfang zusammen mit den Cave-Daten ablegen.

    Wie handhabst du es mit der Farben von BD, die waren ja auch mit dabei

    Das Cave-Format ist von BD-II, da sind die Daten anders angeordnet als in BD-I. Die Farben werden bei BD-II getrennt behandelt, in Basic ist das aber ein Nachteil. Deshalb würde ich die auch am Anfang zusammen mit den Cave-Daten ablegen.

    Ähm noch eine Frage,

    wie stelle ich die Levels bei dir ein, um die Cave zu testen. Das konnte ich in deinen Code nicht finden.

    Ein direktes Auswählen der Level habe ich nicht eingebaut, weil das bisher nicht nötig war. Um das einzubauen, müsste man die Zeilen Nummern in ein Feld ablegen, damit man dann mit RESTORE xxxx den Level setzen kann. Du kannst aber mit Feuer-Taste Port-1 ein Level überspringen. Zum Erstellen der Level würde ich die Data Zeilen mit Renumber verschieben und dann den neuen Level oben davor hängen.

    Hier die Reihenfolge der Daten aus BD-II, deine stimmt fast bis auf Zeit und Anzahl Diamanten.


    1. Zeit magische Mauer und Amöbe langsam.

    2. Punkte für Diamant

    3. Punkte für extra Diamant

    4. Zeit bei Schwierigkeitsgrad 1

    5. Zeit bei Schwierigkeitsgrad 2

    6. Zeit bei Schwierigkeitsgrad 3

    7. Zeit bei Schwierigkeitsgrad 4

    8. Zeit bei Schwierigkeitsgrad 5

    9. Anzahl Diamanten bei Schwierigkeitsgrad 1

    10. Anzahl Diamanten bei Schwierigkeitsgrad 2

    11. Anzahl Diamanten bei Schwierigkeitsgrad 3

    12. Anzahl Diamanten bei Schwierigkeitsgrad 4

    13. Anzahl Diamanten bei Schwierigkeitsgrad 5

    14. Pseudo-Zufall Startwert -> Schwierigkeitsgrad 1

    15. Pseudo-Zufall Startwert -> Schwierigkeitsgrad 2

    16. Pseudo-Zufall Startwert -> Schwierigkeitsgrad 3

    17. Pseudo-Zufall Startwert -> Schwierigkeitsgrad 4

    18. Pseudo-Zufall Startwert -> Schwierigkeitsgrad 5

    19. Häufigkeit von Objekt 1

    20. Häufigkeit von Objekt 2

    21. Häufigkeit von Objekt 3

    22. Häufigkeit von Objekt 4

    23. Objekt 1

    24. Objekt 2

    25. Objekt 3

    26. Objekt 4

    Habe nochmal an der Engine geschraubt, es gibt ein paar Optimierungen bei der Kollisionsabfrage. Diese ist jetzt genauer als im Originalspiel, wo man sich oben einfach am Gegner vorbeibewegen kann. Bei der magischen Mauer und der Amöbe habe ich den fehlenden Timer eingebaut. Der Spieler wurde stark erweitert und der fehlende Ausgang ist jetzt vorhanden.

    Files

    • bd-engine.prg

      (18.59 kB, downloaded 13 times, last: )

    Bin auf einen sehr üblen Bug gestoßen, der mich heute beim Coden ein paar Stunden gekostet hat. Der Fehler ist in Basic-Version 361 bis 373 vorhanden, ältere Versionen habe ich nicht ausprobiert. Wenn man bei GET eine andere Variable verwendet, läuft das Programm ohne Probleme.

    Files

    • bug.prg

      (158 Byte, downloaded 10 times, last: )

    Hi Drachen, hatte gerade gesehen das du mir per E-Mail ein paar mal geschrieben hattest. In meine E-Mail schaue ich selten bis nie rein, bei Fragen am besten einfach direkt hier posten.


    Von der Dummy Grafik gibt es kein Zeichensatz, habe einfach die Zeichen nach und nach erstellt und direkt ins Basic-Programm übernommen. Die 52 Zeichen sind alle ohne Animation, habe aber ein paar herausgeworfen, da ich diese dann doch nicht gebraucht habe. Zurzeit sind es 45 Zeichen/Objekte, die ich verwende, ist aber alles noch nicht 100% fix.

    Im direkten Vergleich ist Poke schneller, nur durch die Multiplikation wird die Schleife langsamer. Bei Basic muss man umdenken, je mehr Zeichen der Interpreter einlesen muss, desto langsamer wird das ganze. Deshalb sind auch Programme mit hohen Zeilennummern langsamer. Im Grunde sollten PEEK und POKE gleich schnell sein, aber PEEK ist durch die Klammer zwei Zeichen länger und ist deshalb auch etwas langsamer. Außerdem gibt noch eine blöde Eigenheit vom Interpreter. Bei einem Sprung auf eine niedrigere Zeilennummer muss sich der Interpreter von Programmanfang bis zu der Zeile durchhangeln.

    Leider doch, weil BASICs Integer Signed Int 16 sind und nur bis 32767 gehen. Da ginge dann also schon kein POKE53280,0 mehr.

    Was spricht dagegen den Datentyp WORD einzuführen. Dann hätte man alle relevanten Datentypen für Basic drin. Bei FOR TO NEXT wäre auch direkt der ganze Adressbereich abgedeckt.