Walking Sprite

There are 18 replies in this Thread which has previously been viewed 3,791 times. The latest Post (January 7, 2024 at 10:05 PM) was by kibo.

  • Hallo Leute

    hoffe es macht euch nichts aus das ich hier jetzt auf deutsch schreibe.

    Ich war ja lange damit beschäftigt wie Sprite-Daten aus anderen Banken vom Mega65 einliest. Auf Discord und auch hier wurden mir immer sehr gut geholfen wie man das machen kann.

    Aber erst die kleine Einleseroutine von bubbob42 gab mir das Werkzeug in die Hand die ich brauchte.

    Habe heute auf die schnell mal ein kleines Basicprogramm geschrieben wo ein Männchen immer rechts und links läuft.

    Das ist jetzt nicht sonderlich großartig. Aber darauf kam es mir ja nicht an. Sondern auf die Anzahl der Sprites, hier sind es 12 Sprites die bei Bank 4 ab $40000 liegen. Der Sprite Pointer fängt bei $1000 an.

    Abgefragt werden sie so:

    Code
    WPOKE $40000,$1000

    Bild:

    Please login to see this attachment.


    Und hier die Disk-Image:

    Please login to see this attachment.

    Die Endung txt Bitte entfernen

    So mit diesen Wissen kann ich mich nun dran machen Basic-Games zu entwicklen.

  • Gefällt mir gut! :thumbup:

    Das Programm zeigt mir aber mal wieder, dass BASIC 65 in dem Bereich noch Schwächen hat. Ein Sprite von links nach rechts laufen zu lassen, sollte eigentlich ohne ein POKE oder PEEK möglich sein, ist es aber offensichtlich nicht. :/

  • Hi Snoopy

    ist so nicht ganz richtig. Wenn du in Bank 0 bleibst, brauchst du keine Pokes. Da greifen die Sprite-Befehle auf den Standartwert zurück.

    Aber weil ich ja meine meine Sprite-Daten in die Bank 4 gelegt habe, brauchen wir die Pokes um den Sprite Pointer neu zu setzten, leider.

    Aber so bleibt Bank 0 frei für das Basic Programm. :D

  • Wenn du in Bank 0 bleibst, brauchst du keine Pokes.

    Dann hat man aber dafür wenig Platz. ;)

    Mir schwebt ja in Gedanken sowas wie ein "Game-BASIC 65" vor, das dem Spieleprogrammierer hier auf dem MEGA65 kräftigt unter die Arme greift. Ganz ohne POKE und PEEK. Aber bräuchte ja alles Zeit und so ...

    Umso mehr Respekt für dein Programm! Macht echt Spaß, dem Männchen beim Laufen zuzuschauen! :)

  • Kurze Frage ... warum dreht sich das Sprite wenn es nach Links läuft alle paar Sekunden um ? Als wenn da kurz ein falsches Sprite vom nach-rechts-laufen eingeblendet wird :gruebel

    Hab den Sleep Wert für links mal erhöht, kann man denke ich ganz gut erkennen (jede 6. Sprite Animation) ...

    Please login to see this media element.

    "Werter Pöbel, wertes Gesocks ... aus dem Arsche zieht euch den Stock ..."

    Edited 2 times, last by SkulleateR (January 8, 2023 at 6:38 PM).

  • Jo, das habe ich auch festgestellt. Aber ich konnte das nicht richtig ausbügeln. wenn ich eine Animationsphase weg lasse. Sieht es auch blöd aus.

    Vielleicht hat hier jemand eine Idee wie das noch flüssiger laufen kann.

    Und weis jemand wie das mit dem Befehl Colison funktioniert. Bin da irgendwie nicht durchgestiegen wie man das mit der Hintergrundkollision macht.

    Denn es gibt ja nur Sprite - Spritekollision, Sprite - Daten-Kollision und der Lichtgriffel. Ist mit Sprite - Datenkollision der Hintergrund gemeint ?

  • Hmmm, womit hast du die Sprites denn erstellt ? Ist da nicht evtl. nur eine der Animationen "verrutscht" ?(

    "Werter Pöbel, wertes Gesocks ... aus dem Arsche zieht euch den Stock ..."

  • Ich lade hier mal die Sprites hoch. Einfach C64 Stude importieren.

    Bild

    Please login to see this attachment.

    Hier die Datei:

    Please login to see this attachment.

    Und wie immer die Endung TXT entfernen. :)

    Ich vermute es liegt an der If Then Else Abfrage in Zeile 110. Die sollte ich vielleicht anders machen

  • So Leute

    habe mein kleines Programm etwas geändert. Den Sleep-Befehl heraus genommen. Statt dessen einen Zähler verwendet.

    Habe auch herausgefunden warum mein Sprite zuckte. Habe den Sprite-Pointer mit falschen Zahlen gefüttert. :schande:

    Also hier nocheinmal das Progrämmchen

    Please login to see this attachment.

    Werde mich nun mal mich mit dem Befehl Collision beschäftigen.

    Hat das schon jemand gemacht ?

    Mir geht es hauptsächlich Sprite Hintergrundkollission

  • Drachen, Danke für die Info :)

    Hatte mir auch überlegt, die Sprites an ganz anderer Stelle zu parken. Aber kam bisher auf keinen grünen Zweig.
    Ich glaube ohne deine Hilfe, hätte ich das Handtuch geschmissen.

    Ist zwar schon ein paar Tage her seit dem Post ... ja, "Sprite-Data" ist Hintergrund.
    Aber ich denke du hast es mittlerweise selbst schon herausgefunden :)

  • Werde mich nun mal mich mit dem Befehl Collision beschäftigen.

    Hat das schon jemand gemacht ?

    Mir geht es hauptsächlich Sprite Hintergrundkollission

    Wie heute Please login to see this link. festgestellt, macht genau das auf einem MEGA65 Probleme. Mit dem Emulator geht es.

  • Werde mich nun mal mich mit dem Befehl Collision beschäftigen.

    Hat das schon jemand gemacht ?

    Mir geht es hauptsächlich Sprite Hintergrundkollission

    Wie heute Please login to see this link. festgestellt, macht genau das auf einem MEGA65 Probleme. Mit dem Emulator geht es.

    So am Wochenende habe mal wieder etwas Zeit mich damit zu beschäftigen. Bin gespannt auf was für Problemich noch zusätzlich stoßen werde.

    Aber vielen Dank für die Infos hier, habe sie mit wachsamen Augen verfolgt. :)

  • Ich blicke da nicht ganz durch! ?(

    In $D06C-$D06E wird die Adresse $40000 abgespeichert und dort (bei $40000) werden

    die Nummern der Sprites hochgezählt (WPOKE $40000,$1000+PL)?

    Ich versuche gerade Dein ( Drachen ) Programm für den "normalen" Speicher (ohne Bank-Switching)

    umzuschreiben.

    Benötige ich dann trotzdem die Adresse $D06C-$D06E?

    Wie setzt sich die Zahl 128 + 4 in Zeile 20040 zusammen bzw. was bedeutet SPRPTR16?

    Und ist 128 nicht BIT 8 bzw. die Zahl 4 BIT 3? Wo ist mein Denkfehler?

    Sehe ich das richtig dass man -um Sprites zu animieren- durch mehrere Sprites durchschaltet?

    Also müsste ich meine Sprites ab Position $600 positionieren und entsprechend ansprechen oder?

  • Hi Mr. Jones,

    damit wirst du dann eventuell Probleme bekommen. Wenn du auf Bank 0 bleibst, hast du nur Platz für 8 Sprites bei der Standarteinstellung vom Mega65.

    Nämlich von $0600-$07FF - 512 bytes sprite definition area.

    Deswegen liegen ja meine Sprites ja bei $40000

    Jop und für eine Animation schalte ich die Spritepointer durch.

    Hoffe es hilft dir ein wenig, denn ich habe in letzter Zeit nicht mehr viel gemacht mit dem Mega65.

  • Ich brauche nochmal ein wenig Hilfe bei animierten Sprites.

    Ich dachte die Pointer für die Sprites liegen bei $FF8 und $FF9. Ich poke also bei $FF8 von 24 auf 25 bzw. $18 auf $19.

    Dann wird aus Sprite 0, Sprite 1. Das klappt aber nur im 80 Zeichen Modus.

    Liegt der Pointer im 40 Zeichen Modus woanders?

  • Liegt der Pointer im 40 Zeichen Modus woanders?

    Die Spritepointer findest du in den Adressen $d06c bis $d06e (dez. 53356-53358). Einfach mal den Screen umschalten und gucken ob sich da etwas ändert.

    Mehr dazu steht in der Chipset Reference auf Seite 30.

    C64 + TC64-2 / C128 + 1MB REU + RTC + TAPECART / 1541 / 1541-II / 1570 / 1571 / 1581 / SD2IEC

  • Der Sprite-Pointer wandert je nach "Größe" des Bildschirms. Man kann den aber auch selber an eine bestimmte Adresse pflanzen (WIMRE)

    C64Studio: Please login to see this link. - Please login to see this link. --- C64Studio WIP: Please login to see this link. - Please login to see this link. --- Please login to see this link.

  • Die Spritepointer findest du in den Adressen $d06c bis $d06e (dez. 53356-53358).

    Das ist echt merkwürdig.

    Im Emulator klappt es mit der "Bewegung" wunderbar aber mein echter M65 streikt und zeigt nur ein Sprite.

    Der M65 und der Emulator geben mir bei 53356 jeweils eine 248 aus.

    Wenn ich nun im Emulator eine 249 poke, dann wird das Sprite von Position 1 auf 0 verschoben.

    Bei den M65 passiert allerdings gar nichts.

  • Die Liste mit den Sprite Pointern musste glaube ich an einer Adresse liegen, die ein Vielfaches von 16 ist. Evtl. ist der Emulator hier toleranter als die echte Hardware. Falls das das Problem löst, sollten wir diese Info noch ins Handbuch packen.