Hallo Besucher, der Thread wurde 18k mal aufgerufen und enthält 69 Antworten

letzter Beitrag von Phoenix0870 am

LocoBasic vs. Basic 3.5/7.0

  • Wenn das Spiel tatsächlich in einem 20x25 Textmodus mit umdefinierten Zeichen läuft, wäre der VC-20 die geeignetste Plattform für eine Umsetzung: mit

    Code
    1. POKE36864,14:POKE36865,34:POKE36866,148:POKE36867,50

    macht der VIC ebenfalls ein 20x25 Format (diese POKEs gelten so für PAL und ohne Speichererweiterung - bzw. max. +3K -, für NTSC und/oder größere Speichererweiterungen müssen diese POKEs angepaßt werden).


    Die meisten Konstrukte im Listing lassen sich auch in V2 ohne große Verrenkungen abbilden und das Array ra(x,y) wird gar nicht benötigt, da sich der Zustand auch aus dem Bildschirmspeicher auslesen läßt. :)


  • Die meisten Konstrukte im Listing lassen sich auch in V2 ohne große Verrenkungen abbilden und das Array ra(x,y) wird gar nicht benötigt, da sich der Zustand auch aus dem Bildschirmspeicher auslesen läßt. :)

    Ohne Array könnte auch in Loco funktionieren. Zumindest bei einem einfarbigen Zeichen, wenn man eine Funktion direkt aus dem Betriessystem verwendet.
    Dürfte CALL &BB60 sein. Genaueres müßte ich raussuchen, weil in meinen CPC 464 Firmware Buch diese Seite (auch beim Kauf) fehlt.

  • Gibt es das evtl. auch in maschinenlesbar?

    Ja, hier. Musste mich etwas einlesen. Habe kein lauffähiges Tool gefunden, welches BAS Listings in ASCII automatisch konvertiert (bzw. waren mir zu kompliziert oder funzten nicht).
    Es gibt ein BASList, aber das fand ich nicht als EXE.
    Aber hier werden die manuelle Schritte beschrieben (in Französisch).


    1. CPC Emulator starten. Welcher Emulator ist egal.
    2. Kopie des DSK Images "FruttyMan.DSK" als Diskette einlegen (DSK File beim Autor nachfragen)
    3. LOAD"FRUTTY.BAS" <Enter> im Emulator eingeben
    4. SAVE"FRUTTY.TXT",A <Enter> im Emulator eingeben
    5. CPC Emulator beenden (weil sonst das DSK Image gelockt ist)
    6. mit einem DSK Editor, z.B. ManageDSK auf Windows, das "FruttyMan.DSK" öffnen ("Read DSK")
    7. Export der "FRUTTY.TXT" Datei ohne Header, siehe Screenshot
    8. Müllzeilen, die sich ganz am Schluss wiederholen, entfernen, siehe Screenshot
    9. Überprüfen, ob der Patch schon drin ist. Der Patch ist ein Tippfehler in der Zeile 2680, siehe Screenshot.


    FRUTTYWithoutHeader.TXT


  • Tausend Dank, sys! Der Beitrag ist einen eigenen Thread wert - über dieses Problem stolpert man ja regelmäßig.

    Ich habe noch mit RipADSK rumgefummelt, aber bei mir hat es nix extrahiert. War mir dann zu doof.
    Für einzelne, wenige Files ist der oben beschrieben Weg schnell durchgeführt.
    Man muss natürlich auf der virtuellen Disk genügend Platz haben, oder man erstellt eine zweite leere Disk B: und schreibt das TXT File dorthin als Ziel.


    Im CPC Emulator kann man auch einen virtuellen Printer als TXT-Datei ins Host-Filesystem einrichten, wie bei VICE auch mit Gerät #4.
    Aber ich wusste nicht, wie ich das geladene Listing ausdrucken innderhalb der Emulation muss.


    Aber eigentlich wäre das doch alles Master Odos Fachgebiet..... :bgdev

  • Ich nutze cpcxfs


    http://www.cpcwiki.eu/forum/applications/cpcxfs/


    zum Extrahieren und Injizieren aus/in DSK-Dateien. Evtl. auch für das Sprite Thema "Up, up and away".


    Das mit dem TXT ist natürlich die Erlösung. War mir selber nicht recht klar, obwohl ich TXTs schön öfter auf DSKs entdeckt hatte.


    Ich habe immer nur mit WinCPC und Autotype Text in den Emulator rein bekommen. Raus dachte ich ging nicht wegen Grafikbildschirm.

  • C16 - ich bin noch am suchen - ich meine, ich hätte das mal mit GSHAPE gemacht, was in Basic elend langsam ist.

    Es gibt noch eine Lösung, die so etwas wie Sprites oder Shapes für den C16/Plus4 (auch C128) bereitstellen, neben veränderten Zeichensatz und Shapes ist es möglich sowas als reines Zeichenobjekt im Grafikmodus zu erstellen. Der Draw Befehl (und Box) sind grafische Darstellungen die sehr schnell erzeugt werden, die Befehle haben auch eine Löschfunktion die es möglich macht die alte Position der Darstellung zu löschen und dann eine neue darzustellen.


    Ich bastle gerade an einem Spiel was so funktioniert, hier mal der Link dazu: https://www.facebook.com/wcbx.…a/videos/569487059882414/


    @Eloy_Dorian du kannst Text auch Pixelgenau setzen aber nur im Grafikmodus (Char-Befehl) allerdings geht dann der Zeichensatz flöten ;) !!

  • Habe jetzt das Frutty Man mal angespielt ich find es richtig gut.
    Oobdoo, hast du mit dem Programmieren vor vielen Jahren aufgehört und bist seitdem aus Zeitgründen nicht mehr richtig wieder ins Thema gekommen? Du scheinst ja auch Abstand davon zu nehmen auch jetzt neue Projekte anzufangen, was völlig ok ist, wenn Real Life vorgeht.


    Es ist nur schade drum weil in Dir mehr steckt als mancher vielleicht im ersten Moment denkt.

  • :thnks:
    Zeile 900 enthält eine eckige Klammer:

    Code
    1. 900 ggx=gx:ggy=gy:gy=gy[gs:SOUND 2,284,10,15,1,1

    Aus dem Kontext (Monster rauf/runter) schließe ich, dass da eigentlich ein Pluszeichen hingehört. Kommt da kein Laufzeitfehler? Oder ist der Fehler erst nach dem Konvertieren entstanden?
    Die Zeilen 2690 und 2840 werden nie erreicht, da jeweils vorher ein RETURN ausgeführt wird. oobdoo: Ist das Absicht?


    Für Portierungsinteressierte hier ein erster Schritt auf dem Weg zur Entspaghettifizierung: Mehr Spaces, eingerückt, nur die nötigsten Zeilennummern.

  • Habe jetzt das Frutty Man mal angespielt ich find es richtig gut.
    Oobdoo, hast du mit dem Programmieren vor vielen Jahren aufgehört und bist seitdem aus Zeitgründen nicht mehr richtig wieder ins Thema gekommen? Du scheinst ja auch Abstand davon zu nehmen auch jetzt neue Projekte anzufangen, was völlig ok ist, wenn Real Life vorgeht.


    Es ist nur schade drum weil in Dir mehr steckt als mancher vielleicht im ersten Moment denkt.

    ich fand es unspielbar schwierig vor ein paar Monaten... :schande:



    :thnks:Zeile 900 enthält eine eckige Klammer:

    Code
    1. 900 ggx=gx:ggy=gy:gy=gy[gs:SOUND 2,284,10,15,1,1

    Aus dem Kontext (Monster rauf/runter) schließe ich, dass da eigentlich ein Pluszeichen hingehört. Kommt da kein Laufzeitfehler? Oder ist der Fehler erst nach dem Konvertieren entstanden?
    Die Zeilen 2690 und 2840 werden nie erreicht, da jeweils vorher ein RETURN ausgeführt wird. oobdoo: Ist das Absicht?

    ich müsste im DSK schauen wegen der Klammer.


    Wegen dem Image müsste es Odo hier anhängen, ich weiss nicht ob ich es tun darf. Auf der Webseite ist der Link ja nicht mehr dort.


    <Edit> Ob richtig oder falsch: Die Klammer ist im DSK Image so drin:




    <EDIT2>: Tatsäschlich hat der Autor sein eigenes Listing falsch eingetippt. Es sollte ein + sein, wie MacB richtig vermutet hat, hier aus dem Scan:

  • Zitat von Syshack

    ich fand es unspielbar schwierig vor ein paar Monaten..

    Auch ich hänge noch in Level 1 fest.
    Und klar, Gameplay gehört mit zu einem guten Spiel.


    Aber rein technisch hat oobdoo vor 30 Jahren geliefert. Es gibt eine (unerbittliche) KI, ein bewegliches Spieler-Sprite, angepasste Chars für die Level-Elemente/Hindernisse etc. Und tausendfach sterben bis man den richtigen Weg raus hat gehört zur Philosophie der Spiele aus dieser Zeit. Ich spiele z.B. Henry's House am Atari 800XL Emulator öfter in der Mittagspause. Da ist alles Timing und man stirbt ständig. Man ist aber motiviert weiter zu machen. Ebenfalls angenehm: Kein Zeitlimit. Ich hasse Zeitlimits. :-)

  • Doch noch gefunden:


    Drucken eines Listings ist ähnlich wie am C64: Listing auf Drucker ausgeben (im Emulator einstellen: TXT Datei im Filesystem ausgeben) mit Stream Device #8:
    LIST #8


    #8 = Stream Device für Drucker



    Info hier gefunden:



    LIST


    LIST [<Zeilenbereich>][, #<Stream>]


    LIST 100-1000, #1


    KOMMANDO: Listet Programmzeilen im angegebenen Bildschirmbereich
    (Stream) auf. Wird der Parameter nicht angegeben, wird Stream #0
    angenommen. Stream #8 ist der Drucker. Durch einmaliges Drücken der
    [ESC]-Taste kann das L I S Ten unterbrochen und durch die Leertaste wieder
    fortgesetzt werden. Zweimaliges Drücken von [ESC] bricht die Auflistung ab und
    schaltet auf Direktmodus um.


    Die erste oder letzte Nummer des <Zeilenbereichs> kann weggelassen werden,
    wenn das gesamte Programm bis zu einer bestimmten Zeile:


    LIST -200


    ...bzw. ab einer bestimmten Zeile:


    LIST 50 -

  • Ich mache jetzt kein normales Quoting, weil der WYSIWYG-Editor vom Forum einige Macken hat und das Umschalten auf den anderen Modus nur bei kürzeren Texten hilfreich ist.


    @Bytebreaker
    Ich habe das Programmieren nie eingestellt, höchstens das aktualisieren meiner Webseite.


    http://oobdoo.de/programmieren/programmieren.html


    Es gibt sogar eine neue Version von Frutty Man, in 100% Z80 Assembler, aber nur zu 98% fertig.


    @Mac Bacon
    Das hast Du richtig erkannt mit der Zeile 900. Das war ein Abtippfehler im letzten Jahr, als ich das nach Z80 konvertieren wollte und eine lauffähige BASIC Version haben wollte.
    Die Zeilen 2690 und 2840 werden nie erreicht? Gut möglich. Du mußt bedenken das ich das vor 30 Jahren programmiert hatte. Das wären dann offiziell zwei weitere Bugs im Spiel.


    @syshack
    Unspielbar? Nö, Du bist einfach nur alt :P


    Aber natürlich kannst Du das DSK hier im Forum veröffentlichen. Das DSK ist mir irgendwann ahhanden gekommen, darum hatte ich den Link auf der Webseite entfernt.


    Und natürlich habe ich einige Abtippfehler gemacht. Ein CPC hat nunmal eine andere Tastaturbelegung, da muß ich im Emulator immer erst suchen :D

  • Die Zeilen 2690 und 2840 werden nie erreicht? Gut möglich. Du mußt bedenken das ich das vor 30 Jahren programmiert hatte. Das wären dann offiziell zwei weitere Bugs im Spiel.

    Ob unerreichbarer Code ein Bug ist, ist Definitionssache. :D
    Zeile 2690 setzt lediglich alle Farben auf Null, diese Funktionalität ist aber auch ab Zeile 2830 vorhanden. Es ist also bedeutungslos, dass Zeile 2690 nie erreicht wird, sie ist lediglich überflüssig.
    Zeile 2840 ist interessanter, denn die wird nur deshalb nie erreicht, weil jemand eine Zeile 2835 (mit dem Inhalt RETURN) eingefügt hat. Das ist die einzige Zeile, deren Zeilennummer nicht auf Null endet, und im Heftlisting ist diese Zeile gar nicht vorhanden. Hast Du die evtl. aus Debugzwecken während der Z80-Umsetzung eingebaut?

    Und natürlich habe ich einige Abtippfehler gemacht.

    Ja, ich hab gerade noch einen in Zeile 2380 gefunden: Da wird 2 in das Array geschrieben, obwohl es 4 sein müsste...

  • Ob unerreichbarer Code ein Bug ist, ist Definitionssache. :D Zeile 2690 setzt lediglich alle Farben auf Null, diese Funktionalität ist aber auch ab Zeile 2830 vorhanden. Es ist also bedeutungslos, dass Zeile 2690 nie erreicht wird, sie ist lediglich überflüssig.
    Zeile 2840 ist interessanter, denn die wird nur deshalb nie erreicht, weil jemand eine Zeile 2835 (mit dem Inhalt RETURN) eingefügt hat. Das ist die einzige Zeile, deren Zeilennummer nicht auf Null endet, und im Heftlisting ist diese Zeile gar nicht vorhanden. Hast Du die evtl. aus Debugzwecken während der Z80-Umsetzung eingebaut?

    Ja, ich hab gerade noch einen in Zeile 2380 gefunden: Da wird 2 in das Array geschrieben, obwohl es 4 sein müsste...

    Ja soo kenne ich unseren MacB. :love:
    Der findet alle Bugs. 8o


    Du hast recht, die Zeile 2835 ist überflüssig und wurde von mir zum Debuggen eingebaut. Ist ja doof, wenn das Programm aussteigt und alle Farben auf schwarz stehen. :D


    Es dürften noch einige 'Merkwürdigkeiten' im BASIC Source vorhanden sein. Es ist ja schon über ein Jahr her wo ich die Z80 Version angefangen hatte. Und da war ich über ein paar Dinge gestolpert, die ich in Assembler anders gelöst hatte. Und ein Level müßte einen Fehler haben, so das man ihn nicht richtig lösen konnte.


    Ich war jung und brauchte das Geld. :thumbsup:


    Für alle die mit dem CPC in BASIC rumspielen wollen. Eine fehlende Rundklammer wird vom BASIC 1.0 im 464 nicht beanstandet, wohl aber im BASIC 1.1 vom 664/6128.

  • @Eloy_Dorian du kannst Text auch Pixelgenau setzen aber nur im Grafikmodus (Char-Befehl) allerdings geht dann der Zeichensatz flöten !!

    Kannst Du mir mal einen Codeschnippsel dazu posten bitte - ich stehe gerade auf dem Schlauch.


    Wenn der Zeichensatz flöten geht, dann betrifft dies ja im Prinzip auch umdefinierte Zeichen oder?

  • Wenn wir schon beim Grundsätzlichen sind, wie funktioniert das Amstrad Basic, was kann man wie machen, etc. hier ein paar essentielle Links.


    Amstrad Must Haves:


    http://www.cpcwiki.eu/index.php/User_Manual
    http://www.cpcwiki.eu/index.php/Main_Page
    http://www.cpcwiki.eu/forum/
    http://www.cpcwiki.eu/index.php/Locomotive_BASIC
    http://www.wincpc.ch/?topic=projects-wincpc



    Mein Einstieg war das Original CPC464 Benutzerhandbuch auf Englisch (erster Link).
    Der Rest Google. Man findet noch 1.000 Sachen mehr, z.B. Cross-C-Programmierung von Demo-Effekten und Spielen.


    Man ziehe sich auch diese aktuelle Megademo rein:
    http://www.pouet.net/prod.php?which=67656


    Und natürlich das hier:
    http://www.pouet.net/prod.php?which=56761


    Die Amstrad Community hat einige deutschsprachige Leute, aber die sind im CPC Wiki Forum mit drin, es gibt auch eine deutschsprachige Sektion, aber die meisten Deutschen posten englisch mit allen Nationen zusammen.
    Hier bei uns ist es andersrum. Im Forum64 sind Deutschsprachige in der Überzahl und es nutzt der ein oder andere aus dem Ausland sein Schul-Deutsch oder er nutzt die englischsprachige Sektion um hier vom Wissen aller zu profitieren.

  • Ach vergiss es @Eloy_Dorian, ich labere gerade Müll mit Char kannst du ja auch nur Spalte und Zeile definieren, Pixelgenau geht garnicht. Hast recht wenn man das so machen möchte, kann man das mit einem Shape aber wie du schon sagtest, ist das sehr langsam.


    Oh schade! Wäre toll gewesen.



    Gesendet von meinem CBM 3032 mit gemischten Gefühlen.