Heute so gecodet...

  • Nicht heute, aber neulich:

    • Einen Patch fuer den Kernal64-Emulator der es mir ermoeglicht einen meiner SwinSIDs ueber den Umweg USB-Arduino-Steckbrett als Soundausgabe zu benutzen (kurzes Video hier).
      Das war das erste Mal das ich was mit Scala gemacht habe...
    • Ein kurzes FreeBasic Programm war mir unter DOS beim Booten ein zufaellig ausgewaehltes ANSI-File auf den Bildschirm ausgibt. Die Idee kam mir als ich die Sammlung bei fuel.wtf/ entdeckt habe.
      Das war auch das erste Mal das ich FreeBasic benutzt habe. Um DOS-EXEs zu erstellen eine prima Sache...
    Acht C64 haben auch 64-Bit...
  • Hier die Auflösung zum Grafikmüll, Mike war nah dran.

    Sprite -> richtig
    Farben -> 00 01 10 11 = Bitmuster richtig
    Maschinenprogramm -> richtig
    Fehlte noch der Filename -> spiegeln = Spritedaten gespiegelt.

    Das Sprite enthält die Routine zum spiegeln von Sprites.
    Habe aus Spaß mal die Routine in Ghost'n Goblins eingebaut um zu sehen wieviel Bytes dadurch eingespart werden.

    Ungepackt belegt die Tape-Rem Version 63402 Bytes.
    Exomizer ohne Routine -> 21463 Bytes = 85 Block
    Exomizer mit Routine (MOD-Version) -> 21091 Bytes = 84 Block

    Teil 2 folgt..........
  • Teil 2........

    Wollte ja eigendlich ein Sprite-Editor schreiben. Aber die Idee mit den Packen kam dazwischen.

    Zum Auffinden der gespiegelten Sprites hatte ich mir ein kleines Tool geschrieben.
    Von Hand wäre ich jetzt noch dran, die Adressen der Sprites zu finden :D

    Infos zum Tool.
    Startsprite wird gespieglt und danach werden alle Spriteblöcke durchlaufen.

    spritesuche.PNG

    Sollte dabei ein Sprite gefunden werden wird das Sprite und die Spiegelung angezeigt.

    gefunden.PNG

    F1 Sprite übernehmen.
    F3 Spiegelung übernehmen.
    F7 Müll überspringen.

    Beim durchschauen der Sprites in Ghost'n Goblins fiel mir auf das einige Sprites (Fackel/Ritter) nur eine kleine Abweichung haben.
    fackel.PNGritter.PNG

    Deshalb zeigt das Tool per Rahmenfarbe die Abweichung an.

    Grün = beide gleich.
    Hellgrün = fast gleich.
    Gelb = so gut wie.
    Orange = geht so.
    Braun = könnte besser sein.
    Hellrot = soll ich oder soll ich nicht.
    Rot = sieht hmm oder hmm häe ist noch neee doch.

    Alles darüber wird übersprungen. Dank dieser Option konnte ich noch ein paar Sprites mehr einsparen.

    Damit endet das Thema Spritespiegeln erst mal.

    Ach ja jetzt belegt GnG 82-Blöcke auf Floppy, meine damalige Version belegt stolze 188 Blöcke.
  • @acorn: Nice one! Wäre es möglich dass Du diese cost-reduced Version in die Wolke stellst?

    ...
    Habe die letzten zwei Tage damit verbracht einen d64->g64 Converter zu schreiben um damit
    a) das GCR-Format besser zu verstehen.
    b) Testfiles zu erstellen

    Hat sich lang gewehrt, aber ich hab gewonnen :P
    Als nächstes werde ich noch prg->g64 machen, auch wenn das ausser mir kein Mensch brauchen wird. :drunk:
    GREETINGS PROFESSOR FALKEN
    A STRANGE GAME.
    THE ONLY WINNING MOVE IS NOT TO PLAY.
    HOW ABOUT A NICE GAME OF CHESS?
  • Am Dirsort640 rumgeschraubt. Ich hätte nicht gedacht, dass die Portierung der 128'er Version so tückisch ist, aber dort habe ich ja auch die Möglichkeiten des Basic7 und die Features des VDC genutzt.

    Aber grundsätzlich isses was geworden.

    Gruß, Gerd
    Bilder
    • ds640.jpg

      15,01 kB, 384×272, 17 mal angesehen
    Wer andern eine Bratwurst brät braucht ein Bratwurstbratgerät.
  • Gestern mal aus Lust und Laune an einer Rename-Routine im CBM-File-Browser gebastelt. Mir ging es immer auf den Keks, wenn die Namen in der Anzeige mal wieder nicht so aussehen wie gewünscht. Dann muss man SD-Karte wieder rausziehen, zum PC, umbenennen, wieder zurück (Spezialanwendung SD2IEC)
    Vermutlich gibt's sowas sowieso schon irgendwo, aber ich wollte auch mal damit rumspielen. Umbenennen hard-codiert geht schon mal, es fehlt jetzt noch eine Eingaberoutine.

    Lesbar geht ja anders :)
    Die ersten 5 Minuten gingen auch dafür drauf, festzustellen, dass die Dateiliste im Anhang an den Code geklebt wird. Das gab anfangs erstmal Kollisionen, weil ich meine Rename-Routine raushalten wollte.
  • Hab gestern abend noch ne kleine Kompression fuer Leveldaten geschrieben, ganz simpel halt indem die Menge von aufeinanderfolgenden Tiles gezaehlt wird, die gleich sind, und dann in der Form z.B. "15x das Tile" gespeichert wird. Damit das komprimierte Level im worst case nicht doppelt so viel Speicher benoetigt, wird bei einem nur einmal vorkommenden Tile mithilfe des hoechsten Bit nur ein einziges Byte verwendet, sodass im worst case fuer das komprimierte Level exakt gleich viel Speicher verwendet wird wie bei einem unkomprimierten.

    Die Kompression selbst habe ich in Python geschrieben, das Entpacken in 6502 Assembler. Und auch wenn sich alles total einfach anhoert, hat es doch ne Weile gedauert, bis das alles mal sauber funktioniert hat :D

    Irgendwann wird auch die Kompression selbst auch noch in Assembler implementiert werden muessen, aber das hebe ich mir noch ein bisschen fuer spaeter auf :D
    SHOTGUN - 4-Player Death Match - Website / CSDb / X-Mas
    FROGS - 4-Player Frog Pond - Website / CSDb
  • Wie gross sind da denn die Savegames ungefaehr wenn ich fragen darf?

    Bei mir gehts halt hauptsaechlich darum, dass ein Level bei mir momentan 1 KB benoetigt, und ich aber gerne das Spiel als Onefiler anbieten moechte. Wenn ich die oben genannte Packmethode verwende (muesste auch RLE sein aber kein Plan, bin da nicht so der Auskenner), dann bekomme ich das oft auf 1/3 oder zumindest die Haelfte gepackt, das ist dann schon ordentlich, somit koennte ich immerhin die doppelte Menge an Levels unterbringen. Was mich nur stoert ist, dass horizontale Strukturen im Level besser, vertikale hingegen schlechter (bzw. gar nicht) gepackt werden. Habe auch schon ueberlegt mir noch was ausgefuchsteres auszudenken, aber ich belasse es vorerst mal hierbei denke ich :)
    SHOTGUN - 4-Player Death Match - Website / CSDb / X-Mas
    FROGS - 4-Player Frog Pond - Website / CSDb
  • wenn deine level eher leer sind, könntest du auch objektweise packen. Element A dann X mal senkrecht ab X,Y. Elemente und Länge passen vermutlich sogar zusammen in ein Byte.
    Alternativ hast Du zwei Entpacker. Vertikal und horizontal die per Flag gewählt werden. Dein Packer entscheidet welches besser ist.
    Oder einen echten levelpacker wie exomizer oder pucrunch oder doynamite...
  • Ja das mit dem objektweise hab ich mir auch ueberlegt. Allerdings soll das Spiel einen Leveleditor bekommen, und da kann man schlecht vorhersehen was die Leute damit anstellen, daher habe ich diese Idee dann schon wieder verworfen. Zumal dann auch das Kodieren schwieriger wird, denn aus einem fertig gebauten Level nachtraeglich die Objekte "rausfinden" ist glaube ich etwas zu viel des guten. Daher habe ich mich jetzt erstmal fuer die simpelste Variante entschieden :)

    Exomizer moechte ich dann fuers fertige Spiel verwenden, aber nur fuer einen Teil des Spiels (also die Levels) welche dann erst zur Laufzeit jeweils bei Bedarf entpackt werden sollen, da wuesste ich spontan nicht einmal wie man das dann einsetzen soll :D gehen tuts bestimmt, klar, aber ich bleibe jetzt erstmal bei der simplen Methode denke ich :D
    SHOTGUN - 4-Player Death Match - Website / CSDb / X-Mas
    FROGS - 4-Player Frog Pond - Website / CSDb
  • Man könnte das ganze auch mit 6 zu 2 Bit kodieren, da 6 Bit für den Zähler ausreicht.

    00 = Zeichen aus Zeichensatz 1 ausgeben.
    01 = 6-Bitzähler für X mal nach rechts.
    10 = 5-Bitzähler für X mal nach unten oder Farbe setzen.
    11 = Zeichen aus Zeichensatz 2 ausgeben.
  • Heute die Funkverbindung zwischen eZ430 und dem dazugehörigen Funk-USB-Stick hinbekommen (mit einer Pythonbibliothek aus dem Internet).
    Nächste Baustelle - die Daten der Beschleunigungssensoren für Spielesteuerung nutzen... und mal schauen, was man mit den Temperatur-, Druck- und Zeitdaten so anstellen kann.
    Fazit der Aktion: Python ist schon cool - ruckzuck kann man mal eben was komplett neues ausprobieren und man kann herrlich in den eingebundenen Bibliotheken stöbern. So vermehrt sich Wissen :)
    Wissen ist das einzige Gut, das sich beim Teilen vermehrt. Also seid vorsichtig damit!
  • Neu

    Ein "Startmenue" fuer Projekt DoomBox:


    Hatte ich zwar schon mal mit FreeBASIC gemacht, bloederweise haengt das Programm sich AUSSCHLIESSLICH auf dieser Kiste beim umschalten in den Grafikmodus auf. Ausser Mainboard und CPU hab ich alles getauscht, immer das Gleiche.
    Jetzt habe ich es noch mal mit C und DJGPP neu gemacht und diesmal dann auch mit Sound...
    Die Menueintraege/Bilder und die dahinterliegenden Programme werden aus einer Configdatei eingelesen. Dateinamen und SoundBlaster-Settings sind aus Haulheit hardkodiert :)
    Acht C64 haben auch 64-Bit...