Wobble-Effekt für Intro-Logo

Es gibt 60 Antworten in diesem Thema, welches 14.544 mal aufgerufen wurde. Der letzte Beitrag (15. März 2015 um 17:14) ist von Xenox.AFL.

  • Yeah!! :hammer: Nach harter Arbeit habe ich es jetzt geschafft, den Wobble einzubauen. Sieht echt schon sehr toll aus :roll2:

    Bitte mal anschauen!

    Bitte melde dich an, um diesen Anhang zu sehen.

  • ja..sieht ganz gut....
    kritik?
    vielleicht etwas grösser? bei mir hackelt es etwas, ist das auch so bei dir? bzw. soll das so sein?
    was ist das für ein symbol, bzw. text unten rechts am logo? ich kann es bei bestem willen nicht erkennen.

    ansonnsten super arbeit... ich würde es nicht so schön hinbekommen, aber ich werde es mal probieren...
    :thumbsup:

  • 186 Blocks sind allerdings etwas viel dafür :)

    Der Bitte melde dich an, um diesen Link zu sehen. macht das ganze deutlich kürzer.

  • Sind ja enorm grosse 0-Bereiche im Binary.
    Also wenn Du es als intro verwenden moechtest, hilft es vermutlich, dass etwas zu straffen. Entweder "blind" per z.B. exomizer oder pucrunch oder auch selbst die bitmaps dahin schieben wo man sie spaeter braucht, bzw enger zusammen alles. Dann verbraucht es auch beim Laufen weniger RAM.
    Aber chic ist's :wink:

    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.

  • danke =) ich mach's etwas kleiner. momentan liegen die ganzen daten alle noch recht weit auseinander, das stimmt.

    Zitat

    vielleicht etwas grösser? bei mir hackelt es etwas, ist das auch so bei dir? bzw. soll das so sein?
    was ist das für ein symbol, bzw. text unten rechts am logo? ich kann es bei bestem willen nicht erkennen.

    das einfaden hakelt, weil die fadetabelle noch nicht ganz sauber ist. und das symbol unten rechts ist eine miniatur meines nicknames =p

    wo ich schon so motiviert bin fehlt noch ein dycp basierter scroller. irgendwelche tips dazu?

    und etwas mucke bräuchte ich auch mal... aber diese c64-tracker haben mich bis jetzt abgeschreckt :nixwiss:

  • noch eine kleine bemerkung zu dem wobbler.
    der ist in der letzten zeile nicht ganz sauber.
    da steht das rechte drittel der letzten logozeile still.

  • komisch. das raster hatte ich eigentlich stabil. und ich kann den fehler hier gar nicht sehen. kannst du davon irgendwie einen screenshot machen und einkreisen? :help:

  • Zumindest in vice sieht man's deutlich.
    Die Zeile bleibt rechts stehen.
    Also entweder eine kurze Luecke wie auf dem Bild oder eben ein paar Pixel Ueberlapp...

  • Das sieht doch schon mal super aus! Weiter so! :bia


  • wo ich schon so motiviert bin fehlt noch ein dycp basierter scroller. irgendwelche tips dazu?

    naja... tipps dazu hätten hier sicher eine menge leute.
    viel interessanter fände ich es, wenn du zunächst mal erzählst, was du denkst wie das funktioniert, und wie du es umsetzen würdest.
    (selber gedanken machen bringt meiner meinung nach immer mehr, als alles nur blind nachzumachen).
    ...und dann kommen die tipps stück für stück hinzu :)

  • naja einigermaßen weiss ich wie es funktioniert aber auch nicht wirklich. ich denke dass das ganze gerade wegen des y-scrollings über 2 chars je scroll-lauflänge gelöst werden muss. sprich man hat zwei chars übereinander, die man anzeigt und in so einer einheit wird ein char in y-richtung hochgescrollt, da man ja YSCROLL des VIC nicht wirklich dafür nutzen kann. innerhalb der borders würde ich es dann per sprites lösen. ich hätte eine double-irq service routine, die hingeht und versucht die chars umpositionieren. in x-richtung linear, in y-richtung per sinetable.

    oder auch das ganze per sprites, indem man versucht, multiplexing einigermaßen gescheit getimed anzuwenden ...

    die sachen die ich bis jetzt gelesen habe (in der 64er und auf cevi-hacking) haben mir zwar weitergeholfen aber der sourcecode ist noch nicht ganz verständlich für mich. insbesondere frag ich mich, wie man dann mehrere DYCPs innerhalb einer raster-ISR erzeugt. bei einer crest und auch chorus demo habe ich gesehen, dass wirklich viele dycps angezeigt werden.

  • wenn ich nochmal drüber nachdenke, wäre das viel zu langsam. ich habe jetzt in einem artikel gelesen dass man einen zeichensatz als fake-screen verwendet. indem man die zeichen @ bis e, f - k, etc. pro spalte unterbringt, hat man die möglichkeit, durch normales lineares kopieren in den zeichenram ein zeichen in einer spalte auf eine bestimmte y-position zu setzen. das ist cool =) und werde ich jetzt auch erstmal ausprobieren ....

  • ja, dass ist zumind. die variante, die ich zum anfang empfehlen würde.
    man sollte sich jedoch auch gleich gedanken darüber machen, wie man den charset (also der, wo die ausgangsbuchstaben drin sind) ablegt, damit man ihn schnell und einfach auslesen kann. Denn so wie normalweise ein charset die buchstaben ablegt, ist nicht sehr effeltiv.
    (also nicht das A von $2008-200f, das B von $2010-$2017, usw.... sondern, das A auf $2001, 2101, 2201, ...je nach höhe, und dann das B auf $2002, 2102, 2202, ...)

  • Das hier macht das :wink:

    Code
    for (i=0;i<chars;i++)
    	{
    	for (j=0;j<8;j++)
    		{
    		new_font[j*chars+i]=raw_font[i*8+j];
    		}
    	}

    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.

  • Danke erstmal soweit. Ich habe jetzt auch einen DYCP gebaut, mit Smooth Scrolling und X-Richtung und einer Sinusbewegung mit eigenem Font. War echt viel Arbeit =)

    Aber, jetzt flackert alles und ich vermute dass ich während der DYCP Routine zuviel Rasterzeit verbrauche. Gibt es neben den üblichen Optimierungstechniken wie Speed-Code noch Möglichkeiten, das zu vermeiden. Ich habe es bis jetzt so gemacht, dass ich 4 IRQs verwende:

    • Auf Rasterline 0 IRQ der den DYCP erzeugt (also alle 40 Spalten füllt, die alten DYCP-Chars löscht, die neuen zeichnet, die Offsets innerhalb der Tabellen erhöht. Zuletzt wird in den MC-Bitmap Modus geschaltet und
    • auf Rasterline 88 den IRQ gesetzt, der den Logo-Swing stabilisiert. Sprich ein Doppel-IRQ, der wiederum als nächstes
    • auf Rasterline 89 einen IRQ aufruft, der pro Logo-Scanline zum Raster synchronisiert XSCROLL anpasst, dann die Offsets in der dafür zuständigen Sinustabelle anpasst und als nächstes
    • auf Rasterline $b8 den IRQ setzt, der lediglich in den Text-Modus schaltet, $d018 mit der Adresse zum Charmem ändert, in dem sich der DYCP-Charset befindet. Und das ganze wiederholt sich dann ...

    Soweit ich gesehen habe, nutzt der DYCP doch recht viel Rasterzeit. Knapp 5 Rasterzeilen pro Spalte, was wirklich zuviel ist. Meiner Berechnung nach müsste ich das auf 1/3 optimieren.

    Daher meine Frage: Was wird in der Praxis gemacht? Optimiert, bis der Arzt kommt? Oder gibt es für einen DYCP noch ganz andere Methoden? Oder können hier Double-Buffering Methoden abhelfen? Oder sollten gewisse Sachen nur in jedem 2. Frame gemacht werden?

    Ich hoffe auf Hilfe =) :help:


  • Daher meine Frage: Was wird in der Praxis gemacht? Optimiert, bis der Arzt kommt? Oder gibt es für einen DYCP noch ganz andere Methoden? Oder können hier Double-Buffering Methoden abhelfen? Oder sollten gewisse Sachen nur in jedem 2. Frame gemacht werden?

    Ich hoffe auf Hilfe =) :help:

    Yo... Optimieren heisst das Zauberwort, wobei Speedcode - also ohne Schleifen - schon einiges bringt. Wenn das Grundkonzept allerdings schon nicht gut ist, hilft das auch nicht viel.
    Da müsstest du uns den Code schon zeigen, damit man da genaueres sagen kann.
    Es gibt auch viele Möglichkeiten einen DYCP zu machen. Bei einem kann man da auch wunderbar einen vordefinierten Charset verwenden, der alle möglichen Positionen der Buchstand enthält. So muss man "nur noch" die entsprechenden 2 Chars pro Spalte auf den Bildschirm schreiben (anstelle von meist 5 Charsetzeilen).
    Ach...und da sind wir bei einem weiteren Punkt. Wie hoch ist dein Charset? Wenn er 7 oder 8 Pixel hoch ist, braucht das natürlich mehr Zeit als ein 5 Pixel hoher Charset.
    Double-Buffering hilft, wenn der Bereich in dem der DYCP dargestellt wird auch für die Berechnung gebraucht wird. Ansonsten wird dadurch nix schneller/besser.
    Jeden 2. Frame? NEIN! Pfui, Aus! Bloss nicht dran denken....

  • Ich hoffe du kommst damit zurecht. Da sind viele Sachen aus der libc64.asm drin, die aber selbsterklärend sein sollten. Optimiert habe ich eigentlich noch nicht viel, da ich auch bis jetzt noch nicht weiss ob das Grundkonzept gut ist. Den DYCP mache ich so (Spalte für Spalte):

    • Altes Zeichen löschen mit Hilfe einer Tabelle wo die aktuellen Sinuswerte in X-Richtung gespeichert werden
    • Der nächste zu zeichende Buchstabe wird aus einer Tabelle ausgelassen, wo sich die Charsetadressen für alle Buchstaben drin befinden (für den Buchstaben A also charsetadresse + 'A' * 8 usw.)
    • Neues Zeichen (Ja, 8 Zeilen hoch) an Stelle in Spalte zeichnen
    • X-SCROLL anpassen - evtl, falls X-SCROLL 0 ist, den kompletten String um 1 nach links verschieben

    Ich finde aber ich habe das ziemlich komplex gemacht, weil ich viel auf Selfmod setze und kein durch den Loop durchlaufendes X oder Y-Register habe mit dem in der Routine arbeite.

    Naja, ist sicher auch viel Praxiserfahrung die mir fehlt =)

    P.S. an Forum-Admin: Syntax-Highlighting für 6502/ACME Code wäre nicht schlecht :winke:

  • hui... da gibts natürlich ne menge was man verbessern kann...

    VORWEG AN ALLE:
    Ein Scroller (mit eingerücktem Sideborder - wie man es normalerweise macht) braucht bloss 39 Chars.
    Der 40. Char ganz rechts ist NIE zu sehen. Denn der Bildschirm wird ja auf 38 Chars breite verkleinert,
    und der Screen kann per $D016 nur nach rechts geschoben werden (max 7 Pixel) und NICHT nach links!!!
    Das spart auch schon mal Rasterzeit, wenn man den 40. Char einfach wegläst (auch bein normalen, nicht DYCP, Scrollern)


    vorallem solltest du wie schon erwähnt den charset anders ablegen, damit du die charschreibroutine in etwa folgendermassen machen kannst.
    (Charset also z.B. nach $2000 und den DYCP Block-Charset auf $3000)

    Aktueller Buchstabe in X
    Y-Sinus Wert des Buchstaben in Y
    und dann:

    lda 2000,x
    sta (dycp_p1a),y
    iny
    lda 2100,x
    sta (dycp_p1a),y
    iny
    lda 2200,x
    sta (dycp_p1a),y
    iny
    lda 2300,x
    sta (dycp_p1a),y
    iny
    lda 2400,x
    sta (dycp_p1a),y
    iny
    lda 2500,x
    sta (dycp_p1a),y
    iny
    lda 2600,x
    sta (dycp_p1a),y
    iny
    lda 2700,x
    sta (dycp_p1a),y

    so kannst du den code noch in einer schleife für die 39 Spalten machen

    und wenn du die Schleife aufdröselst dann etwas so:

    lda 2000,x
    sta 3000,y
    lda 2100x
    sta 3001,y
    .
    .
    .
    und für die nächste spalte:

    lda 2000,x
    sta 3030,y
    lda 2100,x
    sta 3031,x
    .
    .
    .

    das bringt ne MENGE!!!

    ...und genauso fürs löschen.

    ldaBitte melde dich an, um diesen Link zu sehen.
    sta 3000,y
    sta 3001,y
    sta 3002,y

    .....