Wobble-Effekt für Intro-Logo


  • naaina
  • 5090 Aufrufe 60 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Und das ganze jetzt nochmal mit ner Rasterbar und etwas Farbe im Scroller :hammer:

    So langsam macht mir das ganze echt Spass :thumbsup:

    Bitte mal anschauen und kommentieren. Wie ist denn das mit der Musik? Womit macht man die am besten? Welcher Player erzeugt eine Routine die möglichst wenig Rasterzeit verschwendet? Soviel habe ich nicht mehr übrig....

    Oder hat jemand Lust, mir dafür Musik zu geben/machen?
    Bilder
    • screen.png

      3,93 kB, 384×271, 67 mal angesehen
    Dateien
    • ancients5.d64

      (174,85 kB, 62 mal heruntergeladen, zuletzt: )
    3xC64 / 1xC128 / 1xMMC-Replay / 1xA1200+Indivision AGA+Apollo 1260 :freude
  • yay, sieht doch schon super aus :)

    was mir dazu spontan einfällt.... derartige sinus-basierte effekte wie du sie da benutzt lassen sich relativ leicht, aber dafür recht effektvoll aufpeppen ... in dem du nicht nur eine einzelne sinuswelle sondern mehrere benutzt (zwei reichen schon meisst). also zb für die bewegung der dycp nicht:

    yoffs=sinus(framecounter+(xpos*xstep))

    sondern etwas in der form

    yoffs=sinus1(framecounter1+(xpos*xstep1))+sinus2(framecounter2+(xpos*xstep2))

    dabei kann man viel rumspielen was die tabellen, schrittweiten, zähler etc angeht und so interessantere bewegungsmuster erreichen. (tip: für die schrittweiten irgendwelcher counter primzahlen nehmen - dann gibts schön lange perioden bei der resultierenden funktion)
  • Es war noch Platz für eine rotierende Rasterbar und den Zusatz für das Logo (weil ja oft angemerkt wurde, dass ich einen fremden Groupnamen verwende). Das zweite Wort ist jetzt also auch drin ;)

    Schauts euch nochmal an! :winke: Das ist jetzt also fast die finale Version.

    Danke auf jeden Fall schonmal für all die super Unterstützung hier, insb. bei Roland! Ich habe echt viel gelernt =)
    Bilder
    • screen.png

      4,19 kB, 384×271, 74 mal angesehen
    Dateien
    • ancients7.d64

      (174,85 kB, 73 mal heruntergeladen, zuletzt: )
    3xC64 / 1xC128 / 1xMMC-Replay / 1xA1200+Indivision AGA+Apollo 1260 :freude
  • Ein kleiner Kritikpunkt (habe ich zu Beginn meiner DYCP Programmierung auch falsch gemacht).
    Ist dir aufgefallen, dass der DYCP nicht sehr flüssig ist? Der "springt" zwischendurch immer so.

    Woran liegt das?
    Es ist ja so, dass du jeden Buchstaben in einer fortlaufenden Sinuswelle auf und ab bewegen willst.
    Die Buchstaben sind untereinander 8 Bytes in der Sinuswelle verschoben.
    Der Ausgangspointer der Sinuswelle wird jeden Frame um 4 Bytes verringert (auf $c080).
    Soweit ist noch alles OK.
    Doch nun kommt noch das Scrolling hinzu. Du scrollst mit einer Geschwindigkeit von 1 Pixel (auf $c088 ).
    Wenn der Screen nun um 8 Pixel verschoben wurde, erhöhst du den Scrolltextzeiger ($c08c).

    UND JETZT KOMMT DER FEHLER.

    Wenn du die Buchstaben quasi um eine Position nach links verschiebst, musst du natürlich auch den Pointer der Sinuswelle mit verschieben.
    Sonst bekommt plötzlich der Buchstabe die falsche Sinushöhe. Nämlich die von seinem Vorgänger.
    Also muss da der Sinus-Pointer um 8 Bytes angepasst (in deinem Fall um 8 Bytes erhöht) werden.
    Ich hab das mal mit einem JSR auf $c08c realisiert (und das Rücksetzen des $D016 Zeigers von $0a auf #07 auch in die neue Routine platziert).

    Jetzt ist der DYCP schön flüssig.
    Dateien
    • ancients7.d64

      (174,85 kB, 77 mal heruntergeladen, zuletzt: )
  • Liegt zwar schon länger zurück der Thread... aber mich würde mal interessieren, wie man so einen "Sinus-Scroller" (hoffe das Ding heißt so) realisiert?

    Ebenso würd ich gerne wissen, in was für einem Format so ein Logo am besten vorliegen sollte...und mit welchem Proggie am C64 man das am besten macht,
    habe bisher nur Erfahrungen mit Koala Painter und vor allem Drazpaint.. (also Multicolor)
  • Zu dem Wobble-Kram/Logos kann ich nix sagen. Auf Richard's Seite wird IIRC viel über dieses ominöse Logo-Format fabuliert.

    Für diese Art von Scrolling (kann man sicher Sinus Scrolling nennen) gibt es einen schönen Source von Pasi Ojala auf dem Silbertablett:
    antimon.org/dl/c64/code/dycp.txt
    Es sind keine anzeigbaren Aktivitäten vorhanden.
  • Moin, danke! klappt prächtig.

    Habs eben mal kleine Korrekturen für RELAUNCH64 gemacht:

    Quellcode

    1. !to "sinus-scroll.prg",cbm
    2. SINUS= $CF00 ; Place for the sinus table
    3. CHRSET= $3800 ; Here begins the character set memory
    4. GFX= $3C00 ; Here we plot the dycp data
    5. X16= $CE00 ; values multiplicated by 16 (0,16,32..)
    6. D16= $CE30 ; divided by 16 (16 x 0,16 x 1 ...)
    7. START= $033C ; Pointer to the start of the sinus
    8. COUNTER= $033D ; Scroll counter (x-scroll register)
    9. POINTER= $033E ; Pointer to the text char
    10. YPOS= $0340 ; Lower 4 bits of the character y positions
    11. YPOSH= $0368 ; y positions divided by 16
    12. CHAR= $0390 ; Scroll text characters, multiplicated by eight
    13. ZP= $FB ; Zeropage area for indirect addressing
    14. ZP2= $FD
    15. AMOUNT= 38 ; Amount of chars to plot-1
    16. PADCHAR= 32 ; Code used for clearing the screen
    17. *= $C000
    18. SEI ; Disable interrupts
    19. LDA #$32 ; Character generator ROM to address space
    20. STA $01
    21. LDX #0
    22. LOOP0 LDA $D000,X ; Copy the character set
    23. STA CHRSET,X
    24. LDA $D100,X
    25. STA CHRSET+256,X
    26. DEX
    27. BNE LOOP0
    28. LDA #$37 ; Normal memory configuration
    29. STA $01
    30. LDY #31
    31. LOOP1 LDA #66 ; Compose a full sinus from a 1/4th of a
    32. CLC ; cycle
    33. ADC SIN,X
    34. STA SINUS,X
    35. STA SINUS+32,Y
    36. LDA #64
    37. SEC
    38. SBC SIN,X
    39. STA SINUS+64,X
    40. STA SINUS+96,Y
    41. INX
    42. DEY
    43. BPL LOOP1
    44. LDX #$7F
    45. LOOP2 LDA SINUS,X
    46. LSR
    47. CLC
    48. ADC #32
    49. STA SINUS+128,X
    50. DEX
    51. BPL LOOP2
    52. LDX #39
    53. LOOP3 TXA
    54. ASL
    55. ASL
    56. ASL
    57. ASL
    58. STA X16,X ; Multiplication table (for speed)
    59. TXA
    60. LSR
    61. LSR
    62. LSR
    63. LSR
    64. CLC
    65. ADC #>GFX
    66. STA D16,X ; Dividing table
    67. LDA #0
    68. STA CHAR,X ; Clear the scroll
    69. DEX
    70. BPL LOOP3
    71. STA POINTER ; Initialize the scroll pointer
    72. LDX #7
    73. STX COUNTER
    74. LOOP10 STA CHRSET,X ; Clear the @-sign..
    75. DEX
    76. BPL LOOP10
    77. LDA #>CHRSET ; The right page for addressing
    78. STA ZP2+1
    79. LDA #<IRQ ; Our interrupt handler address
    80. STA $0314
    81. LDA #>IRQ
    82. STA $0315
    83. LDA #$7F ; Disable timer interrupts
    84. STA $DC0D
    85. LDA #$81 ; Enable raster interrupts
    86. STA $D01A
    87. LDA #$A8 ; Raster compare to scan line $A8
    88. STA $D012
    89. LDA #$1B ; 9th bit
    90. STA $D011
    91. LDA #30
    92. STA $D018 ; Use the new charset
    93. CLI ; Enable interrupts and return
    94. RTS
    95. IRQ INC START ; Increase counter
    96. LDY #AMOUNT
    97. LDX START
    98. LOOP4 LDA SINUS,X ; Count a pointer for each text char and according
    99. AND #7 ; to it fetch a y-position from the sinus table
    100. STA YPOS,Y ; Then divide it to two bytes
    101. LDA SINUS,X
    102. LSR
    103. LSR
    104. LSR
    105. STA YPOSH,Y
    106. INX ; Chars are two positions apart
    107. INX
    108. DEY
    109. BPL LOOP4
    110. LDA #0
    111. LDX #79
    112. LOOP11 STA GFX,X ; Clear the dycp data
    113. STA GFX+80,X
    114. STA GFX+160,X
    115. STA GFX+240,X
    116. STA GFX+320,X
    117. STA GFX+400,X
    118. STA GFX+480,X
    119. STA GFX+560,X
    120. DEX
    121. BPL LOOP11
    122. MAKE LDA COUNTER ; Set x-scroll register
    123. STA $D016
    124. LDX #AMOUNT
    125. CLC ; Clear carry
    126. LOOP5 LDY YPOSH,X ; Determine the position in video matrix
    127. TXA
    128. ADC LINESL,Y ; Carry won't be set here
    129. STA ZP ; low byte
    130. LDA #4
    131. ADC LINESH,Y
    132. STA ZP+1 ; high byte
    133. LDA #PADCHAR ; First clear above and below the char
    134. LDY #0 ; 0. row
    135. STA (ZP),Y
    136. LDY #120 ; 3. row
    137. STA (ZP),Y
    138. TXA ; Then put consecuent character codes to the places
    139. ASL ; Carry will be cleared
    140. ORA #$80 ; Inverted chars
    141. LDY #40 ; 1. row
    142. STA (ZP),Y
    143. ADC #1 ; Increase the character code, Carry won't be set
    144. LDY #80 ; 2. row
    145. STA (ZP),Y
    146. LDA CHAR,X ; What character to plot ? (source)
    147. STA ZP2 ; (char is already multiplicated by eight)
    148. LDA X16,X ; Destination low byte
    149. ADC YPOS,X ; (16*char code + y-position's 3 lowest bits)
    150. STA ZP
    151. LDA D16,X ; Destination high byte
    152. STA ZP+1
    153. LDY #6 ; Transfer 7 bytes from source to destination
    154. LDA (ZP2),Y : STA (ZP),Y
    155. DEY ; This is the fastest way I could think of.
    156. LDA (ZP2),Y : STA (ZP),Y
    157. DEY
    158. LDA (ZP2),Y : STA (ZP),Y
    159. DEY
    160. LDA (ZP2),Y : STA (ZP),Y
    161. DEY
    162. LDA (ZP2),Y : STA (ZP),Y
    163. DEY
    164. LDA (ZP2),Y : STA (ZP),Y
    165. DEY
    166. LDA (ZP2),Y : STA (ZP),Y
    167. DEX
    168. BPL LOOP5 ; Get next char in scroll
    169. LDA #1
    170. STA $D019 ; Acknowledge raster interrupt
    171. DEC COUNTER ; Decrease the counter = move the scroll by 1 pixel
    172. BPL OUT
    173. LOOP12 LDA CHAR+1,Y ; Move the text one position to the left
    174. STA CHAR,Y ; (Y-register is initially zero)
    175. INY
    176. CPY #AMOUNT
    177. BNE LOOP12
    178. LDA POINTER
    179. AND #63 ; Text is 64 bytes long
    180. TAX
    181. LDA SCROLL,X ; Load a new char and multiply it by eight
    182. ASL
    183. ASL
    184. ASL
    185. STA CHAR+AMOUNT ; Save it to the right side
    186. DEC START ; Compensation for the text scrolling
    187. DEC START
    188. INC POINTER ; Increase the text pointer
    189. LDA #7
    190. STA COUNTER ; Initialize X-scroll
    191. OUT JMP $EA7E ; Return from interrupt
    192. SIN !byte 0,3,6,9,12,15,18,21,24,27,30,32,35,38,40,42,45
    193. !byte 47,49,51,53,54,56,57,59,60,61,62,62,63,63,63
    194. ; 1/4 of the sinus
    195. LINESL !byte 0,40,80,120,160,200,240,24,64,104,144,184,224
    196. !byte 8,48,88,128,168,208,248,32
    197. LINESH !byte 0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3
    198. SCROLL !scr "THIS@IS@AN@EXAMPLE@SCROLL@FOR@"
    199. !scr "COMMODORE@MAGAZINE@BY@PASI@OJALA@@"
    200. ; SCR will convert text to screen codes
    Alles anzeigen


    War ja nur an gewissen Stellen die Syntax ändern. (zB BYT in !byte ... usw)

    Werde mir das jetzt zu Gemüte führen.
  • Zu dem Wobble-Kram/Logos kann ich nix sagen.


    im einfachsten fall.... nur jede rasterzeile $D016 (also X-Scroll) verändern. da eine kleine sinustabelle durchlaufen lassen und es kommt sowas wie zb im ikari crack intro dabei raus.