Collab: Entwicklung eines TSB-Puzznic-Klons

Es gibt 1.089 Antworten in diesem Thema, welches 110.292 mal aufgerufen wurde. Der letzte Beitrag (1. November 2024 um 23:56) ist von Omega.

  • Tastaturbuffer mit RUN 30 füllen und ausführen

    YouTube Kanäle über Basic, den C128 und den VDC-Chip
    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.
    Commodore 8-Bit Projekte
    auf Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. zu Commodore 8-bit Hardware
    auf printables.com
  • EgonOlsen71 Sind die Micro-Compiler Programme eigentlich relokatibel? Also kann ich die hinladen wo ich will? Ne, oder? D.h. wenn ich mein Prg nach 32243 haben will, dann muss ich das mit dem MC auch genau so erzeugen. Richtig?

  • GoDot: Nehmen wir mal an, ich habe zwei Maschinenprogramme auf Diskette:

    1. fallen.mc - Größe 525 Bytes
    2. aufloes.mc - Größe 906 Bytes

    Nun möchte ich diese beiden Dinger in TSB reinladen. "fallen.mc" soll ans Ende des Basic-Speichers. Und "aufloes.mc" soll nach 49152 ($c000).

    Ist dafür der folgende Programmanfang richtig?

    Könnte man das auch irgendwie mitten im TSB-Programm realisieren?

    Mit scrld geht das ja nicht, oder? Da wird ja immer mindestens eine ganze Page (256 Bytes) vollgemacht. Und das will ich ja gar nicht.

    Code
    10 if a=0 then a=1:d!poke 55,32768-525:load"fallen.mc",0,0,32768-525
    20 if b=0 then b=1:load"aufloes.mc",0,0,49152
    30 ...

    EDIT: Hups. Ich hatte die erste Zeile noch falsch.

  • EgonOlsen71 Sind die Micro-Compiler Programme eigentlich relokatibel? Also kann ich die hinladen wo ich will? Ne, oder? D.h. wenn ich mein Prg nach 32243 haben will, dann muss ich das mit dem MC auch genau so erzeugen. Richtig?

    Ja, dann musst du die neu kompilieren.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Hey. Moment mal... :gruebel

    Nimm OLD statt NEW... (oder lade mit SCRLD, wobei du da beachten musst, dass SCRLD immer ganze Pages füllt). Ansonsten so wie oben in deinem Post.

    Arndt

    PS: Meine MC-Version von "Auflösen" hat bis jetzt 222 Bytes (funktioniert aber noch nicht)

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Werden die Startadressen mit dem Micro-Compiler nicht mitgeben beim erzeugen der Datei. Damit man das Programm mit 8,1 laden kann und sie genau dort landen.

    Oder verstehe ich da was nicht?

  • PS: Meine MC-Version von "Auflösen" hat bis jetzt 222 Bytes (funktioniert aber noch nicht)

    Ha, ich wette ich krieg eine kürzere Version hin, die nicht funktioniert :D!

    ────────────────────────────────────────────────────────────
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    ────────────────────────────────────────────────────────────

  • PS: Meine MC-Version von "Auflösen" hat bis jetzt 222 Bytes (funktioniert aber noch nicht)

    Meine MC-Version von "Auflösen" scannt das Spielfeld und schreibt die Koordinaten der Teile, die aufgelöst werden müssen, in den Kassettenpuffer. Den Rest erledigt dann das TSB-Programm.

    Übrigens: Ich schreibe jetzt neuerdings MC-Programme. Ihr könnt mich ruhig alle Paps nennen. :bandit

    Werden die Startadressen mit dem Micro-Compiler nicht mitgeben beim erzeugen der Datei. Damit man das Programm mit 8,1 laden kann und sie genau dort landen.

    Oder verstehe ich da was nicht?

    Ja, stimmt eigentlich. Man könnte auch load"bla",8,1 benutzen.

  • PS: Meine MC-Version von "Auflösen" hat bis jetzt 222 Bytes (funktioniert aber noch nicht)

    Wenn du was besseres zu bieten hast als ich, dann nehme ich das auch gerne.

    EDIT: Aber nur, wenn es meine strengen Vorgaben erfüllt. :)

  • Übrigens: Ich schreibe jetzt neuerdings MC-Programme. Ihr könnt mich ruhig alle Paps nennen. :bandit

    Siehste!

    Bitte melde dich an, um diesen Anhang zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Was meinst du, wo die Kabel hingehen. GoDot braucht Energie!

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Ich denke mal die 906 Bytes lade ich nach $c000,

    Meine (jetzt funktionierende :D ) Version vom Plopp hat inzwischen 310 Byte. Auf der Demodisk (hängt hier dran, Endung ".bin" entfernen!) von Omega hab ich das mal eingebaut. Wenn TSB gestartet ist, muss man das "demonblock"-PRG laden und starten. Das obere Kreuz links am Rand verhält sich etwas merkwürdig, Omega , hast du eine Idee, warum?

    Arndt

    Edit: Sorry, die Disk war fehlerhaft!

    Dateien

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

    2 Mal editiert, zuletzt von GoDot (23. Februar 2024 um 17:38)

  • GoDot: Ich verstehe nicht ganz. In dem Programm "demonblock006" wird weder die "scan.ext" geladen noch ist da ein SYS oder ein neuer Befehl drin. Eigentlich sehe ich da überhaupt keine Änderungen. Außerdem fehlt die Sprite-Datei auf der Diskette. V006 ist auch nicht die aktuelle Version.

    Ich hänge hier nochmal eine vollständige Version der Disk an.

    Bei "demonblock007" fallen die Steine in der Quellspalte (da wo man den Stein hergezogen hat) schon automatisch TSB-gesteuert runter.

    Bei "demonblock008" habe ich das wieder rausgenommen.

    Ich denke aber, ich werde die Entwicklung mit V007 fortsetzen.

    PS.: Ich möchte, dass beim Auflösen der Steine eine kleine Animation (3 Frames) angezeigt wird.

  • Ich verstehe nicht ganz.

    Die Disk ist inzwischen ausgetauscht, war fehlerhaft abgespeichert.

    PS.: Ich möchte, dass beim Auflösen der Steine eine kleine Animation (3 Frames) angezeigt wird.

    Die Steine 11 bis 13?

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Das obere Kreuz links am Rand verhält sich etwas merkwürdig, Omega , hast du eine Idee, warum?

    Inwiefern verhält es sich merkwürdig? Kannst du das mal etwas näher beschreiben? (Technische Zeichnungen, Videos, PowerPoint-Präsentationen und improvisierte Theaterstücke sind hilfreich.)

    Übrigens: Diese Version V006 hat noch einen Bug. Da ist ein unerlaubter Spielzug möglich. Das habe ich erst mit V007 und V008 gefixed.

  • Es ist übrigens besser, wenn du deinen SYS in die Prozedur zugausf einbaust. Und zwar vor das mob on 0. Dann brauchst du den Aufruf deiner MC-Routine nur einmal in das Programm einzubauen. Und nicht zweimal.

    EDIT: Jetzt kommen wir langsam da hin, wo ich von Anfang an hin wollte. Hüa!:zorro:

    EDIT2: Ich brauche noch mehr: Die Auflösen-Routine muss in einer Speicherstelle zurückgeben, wieviele Spielsteine aufgelöst wurden. Alternativ wäre es auch hilfreich, wenn sie in einer Speicherstelle mitteilen würde, ob der Level bereits gelöst ist (=keine Spielsteine mehr vorhanden). Das könnte auch die Fallen-Routine übernehmen.

  • Inwiefern verhält es sich merkwürdig? Kannst du das mal etwas näher beschreiben?

    Der dritte Stein von unten am linken Rand lässt sich zwar mit dem Cursor markieren (der wird grün). Aber nicht bewegen (er wird nämlich gleich wieder weiß). Darum fällt der Stein auch nicht, wenn unter ihm der cyane Kasten wegploppt. Ich hab auch andere Steine an diese Stelle manövriert: gleiches Symptom, es liegt also nicht am Stein, sondern an der Position.

    Ich brauche noch mehr: Die Auflösen-Routine muss in einer Speicherstelle zurückgeben, wieviele Spielsteine aufgelöst wurden.

    Das geht natürlich. Wenn dabei Null rauskommt, ist der Tisch gerade bereinigt. Was nicht so einfach geht, ist, bei jedem Plopp eine Animation einzubauen, die müsste höchstens in die Routine selbst mit eingebunden werden. Wo hättest du's denn gern zurückgeliefert bekommen?

    Es ist übrigens besser, wenn du deinen SYS in die Prozedur zugausf einbaust.

    Ich wollte deinen Code nicht gleich ganz durchanalysieren. :S

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Der dritte Stein von unten am linken Rand lässt sich zwar mit dem Cursor markieren (der wird grün). Aber nicht bewegen (er wird nämlich gleich wieder weiß). Darum fällt der Stein auch nicht, wenn unter ihm der cyane Kasten wegploppt.

    Ja, das ist klar. Ein Stein, der mitten in der Luft hängt, kann nicht ausgewählt werden, weil es so eine Situation im fertigen Spiel niemals geben darf.

    Du hast da noch etwas Grundsätzliches nicht verstanden. In der bisherigen TSB-only Version des Spiels fallen die Steine nur in der Startspalte (da wo du den Stein hergenommen hast) und in der Zielspalte (da wo du den Stein hinschiebst). Ansonsten fallen die Steine nicht. - Das ist deshalb so, weil das vollständige, spielfeldübergreifende Fallen der Steine nicht mit reinem Basic/TSB möglich ist. Dazu muss das ganze Spielfeld abgescannt werden.

    Deshalb wird neben dem "Auflösen" noch eine zweite Assembler-Routine benötigt. Diese muss das Spielfeld von unten links nach oben rechts abscannen. Es reicht wenn man das in der vorletzten Zeile beginnt. Dann muss bei jedem einzelnen Feld folgendes geprüft werden:

    • Handelt es sich bei dem aktuellen Feld um Teilenr. 1-9? UND ist das darunterliegende Feld leer?
      • Wenn JA: Verschiebe den Spielstein vom aktuellen Feld auf das darunterliegende Feld und lösche das aktuelle Feld.

    Dieser ganze Vorgang muss zweimal durchgeführt werden weil es Situationen gibt, wo Steine zwei Felder tief fallen. Das ist eigentlich simpel. Simpler als das Auflösen jedenfalls.

    Es ist aber ganz wichtig, dass so eine Routine existiert! Solange du diese zweite Routine nicht erstellt hast, kann das Spiel beim besten Willen nicht korrekt funktionieren.

    Die anderen Details können wir später besprechen.

    EDIT: Wenn du diese zweite Assembler-Routine erstellt hast, dann ist es wahrscheinlich auch nicht mehr nötig, dass das TSB-Programm die Steine in der Startspalte fallen lässt. Das kann man dann schneller und eleganter mit dem oben beschriebenen Assembler-Programm erledigen. Es wäre übrigens ganz gut, wenn du beide Dinger in den $c000-Bereich basteln könntest. Dann brauchen wir den Basic-Speicher nicht zu verkleinern.