[WIP] Shift Remix

  • Es gibt da dieses eine Spiel, das mich seit 28 Jahren verfolgt. Erschienen auf der Magic Disk 64 02/90 war ich von dem simplen Spielprinzip so fasziniert, dass ich es seitdem für alle möglichen Systeme, auf denen ich mal programmieren wollte, wenigstens einmal angefangen habe umzusetzen. Es ist so etwas wie mein Hello World.


    Dieses Spiel nennt sich SHIFT. Es ist wohl am ehesten eine Mischung aus Chip's Challenge und Sokoban. Ziel ist es, mit seiner Spielfigur alle Herzen eines Levels in Löcher zu verschieben. Sind alle Herzen verschwunden, wird der nächste Level gestartet. Es gibt div. Extras, die man einsammeln kann und mehrere Bonuslevel. Erschwert wird das ganze durch Einbahnstraßen, tödliche Wände, verschlossene Türen, usw.


    Das ganze sieht im ersten Level so aus:



    Ich glaube, ich kenne dieses Spiel in und auswändig. Und ehrlich gesagt, gibt es viele Dinge, die mich nerven. Es gibt div. kleinere Bugs, bspw. werden Multicolor-Chars plötzlich einfarbig, wenn sie verschoben oder eingesammelt werden. Die Bonuslevel sind auch fast unschaffbar, wenn man sie nicht auswendig kennt und die tödlichen Wände nerven zum größten Teil einfach.


    Geschrieben ist SHIFT in BASIC, wahrscheinlich verwendet es aber auch ein paar Assembler-Routinen. Die auf Dauer nervtötende Musik wurde mit dem Sound-Monitor gemacht.


    Seit einigen Wochen programmiere ich wieder auf dem C64 (bzw. nutze CBMprgStudio). Und ja, ich bastle gerade an meiner eigenen SHIFT-Version. Ich nenne sie SHIFT REMIX, weil ich div. Bugs ausmerzen und das Spielkonzept generell aufbessern möchte, ohne es zu verfälschen.


    Aktuell schreibe es auch nur in BASIC. Erste Schritte in Assembler habe ich zwar unternommen, aber ich bin noch nicht soweit zu verstehen, wie ich ein


    Code
    1. POKE 1152+(py+yy*2)*40+(px+2*xx),83

    in Assembler umsetze. Deshalb erstmal BASIC. ;)


    Oh, der lange Einführungstext soll eigentlich nur auf das folgende Bild verweisen. Den heute Abend bin ich meinem Traum ein großes Stück näher gekommen. Ich hab den Multicolor-Mode aktiviert und mein Charset wird geladen. Außerdem kann ich die Spielfigur mit meinem Joystick über den Bildschirm bewegen und Herzen verschieben.


    Und so sieht meine Version bisher aus:



    Der ein oder andere wird das lächerlich finden, aber ich bin mächtig stolz und deshalb musste ich das jetzt zeigen. Ist immerhin mein erster BASIC V2-Code seit Mitte der 90er. :D

  • Aktuell schreibe es auch nur in BASIC. Erste Schritte in Assembler habe ich zwar unternommen, aber ich bin noch nicht soweit zu verstehen, wie ich ein

    Code
    1. POKE 1152+(py+yy*2)*40+(px+2*xx),83

    in Assembler umsetze. Deshalb erstmal BASIC. ;)

    BASIC 1 zu 1 nach Assembler umzusetzen ist schwieriger als man denken würde. Mein eigenes Spiel von 1986 wollte ich in (Z80) Assembler Nachprogrammieren. Ich hatte angefangen es 1 zu 1 zu übertragen, war aber irgend wann stecken geblieben. Erst als ich mich von meiner alten Denkweise mit dem gedanklichen BASIC-Umweg getrennt hatte und Algorithmen und Berechnungen direkt in Assembler schrieb, kam ich wieder vorran.

  • BASIC 1 zu 1 nach Assembler umzusetzen ist schwieriger als man denken würde. Mein eigenes Spiel von 1986 wollte ich in (Z80) Assembler Nachprogrammieren. Ich hatte angefangen es 1 zu 1 zu übertragen, war aber irgend wann stecken geblieben. Erst als ich mich von meiner alten Denkweise mit dem gedanklichen BASIC-Umweg getrennt hatte und Algorithmen und Berechnungen direkt in Assembler schrieb, kam ich wieder vorran.

    1:1 möchte ich es gar nicht umsetzen und ich hab auch schon eine ungefähre Vorstellung, wie ich das machen würde. (mh, jetzt wo ich drüber nachdenke, könnte ich mit einem ähnlichen Verfahren sogar den BASIC-Code vereinfachen...). Ich denke, ich brauche einfach noch ein bißchen mehr Erfahrung in Assembler.


    Mit ein Grund, SHIFT REMIX in BASIC zu schreiben, war sowieso, erst einmal herauszufinden, wie der Programmierer das damals umgesetzt hat. Ich analysiere gar nicht mal den Code, sondern suche Wege, wie ich es machen würde. Mal sehen, wo mich der Weg hinführt. ^^

  • POKE 1152+(py+yy*2)*40+(px+2*xx),83


    Das sollte in etwas so gehen (nicht getestet und wie immer gibt es natürlich Raum für Optimierungen, die den Code dann aber schwerer zu verstehen machen). Beim Multiplizieren mit Konstanten in Assembler ist ein Ansatz, den Faktor in Summen und Zweierpotenzen zu zerlegen. In diesem Fall 40=8*(4+1).

    ────────────────────────────────────────────────────────────
    Time of Silence - Time of Silence 2 Development Blog
    ────────────────────────────────────────────────────────────

  • Das sollte in etwas so gehen (nicht getestet und wie immer gibt es natürlich Raum für Optimierungen, die den Code dann aber schwerer zu verstehen machen). Beim Multiplizieren mit Konstanten in Assembler ist ein Ansatz, den Faktor in Summen und Zweierpotenzen zu zerlegen. In diesem Fall 40=8*(4+1).

    Oh, dankeschön! <3 Das probiere ich heute Abend gleich mal aus. Meine Idee war, den Start der Zeilen (1152, 1192, 1232, etc.) in einer Tabelle zu speichern. Dann brauche ich den Index derselben nur hoch und runter zu zählen und kann die X-Position dazu addieren. Das sollte sogar in BASIC besser funktionieren, als mein aktuelles Konstrukt.

  • Jo, das ist wohl schneller und spart auch noch Speicher ^^

    ────────────────────────────────────────────────────────────
    Time of Silence - Time of Silence 2 Development Blog
    ────────────────────────────────────────────────────────────

  • @Hamrath
    Ich wünsche dir viel Erfolg damit. Wenn du fragen bezüglich BASIC hast, kannst du hier und auch mich per PM anschreiben. Sowas in der Art, Sokoban like, habe ich auf der +4 World schon als Idee gepostet. Meine Idee ging aber weiter, denn ich würde gern ein Sokoban mit 2 oder mehr Ebenen haben/machen. Also man muss im Stock 1 die Kisten in Löcher schieben, damit sie eine Etage (Erdgeschoss) runterfallen. Machbar ist dies in BASIC. Auch Geschwindigkeitstechnisch kann man dies sauber umsetzen. Du kannst dir gern mal mein BASIC Spiel Bombrunner 2 oder Magic Blocks ansehen. Letzteres gibt es neben dem +4 auch für den 128er.


    Ich weiss, daß das BASIC 2.0 vom C64er nicht so umfangreich ist, wie beim +4/128er, aber machbar wäre so ein Spiel. SHIFT ist ja eine Art Klon von Sokoban mit diversen Extras.
    Also, viel Erfolg und halt uns hier bitte auf den Laufenden. Wenn es sowet fertig ist, wäre ich sogar daran interessiert, es für die 264er Serie (C16/116 und +4) und evtl. 128 zu portieren.