Danke Roland, ich schau mir das heute abend mal an. Und meld mich dann, wenn ich das geschafft hab
Hallo Besucher, der Thread wurde 11k mal aufgerufen und enthält 60 Antworten
letzter Beitrag von Xenox.AFL am
Wobble-Effekt für Intro-Logo
- naaina
- Erledigt
-
-
wie roland sagte...
mein erster versuch war das hier: http://noname.c64.org/csdb/release/?id=50489 .... falscher gehts kaum glaub ich
-
Woohoo. Ich bin stolz auf mich. Danke für die ganzen Tipps, es funktioniert jetzt auf jeden Fall nach harter Arbeit
-
Und das ganze jetzt nochmal mit ner Rasterbar und etwas Farbe im Scroller
So langsam macht mir das ganze echt Spass
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?
-
Sieht gut aus, aber irgendwie stört es mich, daß Du einen Group-Namen benutzt der schon vergeben ist.
-
Glückwunsch!
Schön, hier mit zu lesen. War sogar teilweise für Nicht-110%-Nerds zu verstehen.
Macht etwas Mut für den Winter, um evtl. dann doch selbst mal mit ASM anzufangen.Weiter so!
-
Der ist nicht vergeben, da fehlt nur ein Wort.
Und bis jetzt war ich zu faul, das Wort (wenn dann klein) mit drunter zu schreiben
Kommt noch!
-
Na, selbst ohne multiplexing hast Du ja noch 8 Sprites frei
Und selbst multiplex sollte sauber gehen - hast ja eh nen stabilen Raster, hehe -
Mann sieht das Mega scharf aus!
Ich wollt ich wüsste auch schon so viel über ASM, bis zu meiner Penison werde ich wohl hoffentlich auch so ein tolles Intro basteln können
Weiter so!
znarF -
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)
-
Danke sauhund. Sowas kommt dann noch rein
So jetzt die ganze Geschichte mal mit Musik!!! THX an NecroPolo
-
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! 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
-
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.
-
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:
http://www.antimon.org/dl/c64/code/dycp.txt -
Moin, danke! klappt prächtig.
Habs eben mal kleine Korrekturen für RELAUNCH64 gemacht:
Code- !to "sinus-scroll.prg",cbm
- SINUS= $CF00 ; Place for the sinus table
- CHRSET= $3800 ; Here begins the character set memory
- GFX= $3C00 ; Here we plot the dycp data
- X16= $CE00 ; values multiplicated by 16 (0,16,32..)
- D16= $CE30 ; divided by 16 (16 x 0,16 x 1 ...)
- START= $033C ; Pointer to the start of the sinus
- COUNTER= $033D ; Scroll counter (x-scroll register)
- POINTER= $033E ; Pointer to the text char
- YPOS= $0340 ; Lower 4 bits of the character y positions
- YPOSH= $0368 ; y positions divided by 16
- CHAR= $0390 ; Scroll text characters, multiplicated by eight
- ZP= $FB ; Zeropage area for indirect addressing
- ZP2= $FD
- AMOUNT= 38 ; Amount of chars to plot-1
- PADCHAR= 32 ; Code used for clearing the screen
- *= $C000
- SEI ; Disable interrupts
- LDA #$32 ; Character generator ROM to address space
- STA $01
- LDX #0
- LOOP0 LDA $D000,X ; Copy the character set
- STA CHRSET,X
- LDA $D100,X
- STA CHRSET+256,X
- DEX
- BNE LOOP0
- LDA #$37 ; Normal memory configuration
- STA $01
- LDY #31
- LOOP1 LDA #66 ; Compose a full sinus from a 1/4th of a
- CLC ; cycle
- ADC SIN,X
- STA SINUS,X
- STA SINUS+32,Y
- LDA #64
- SEC
- SBC SIN,X
- STA SINUS+64,X
- STA SINUS+96,Y
- INX
- DEY
- BPL LOOP1
- LDX #$7F
- LOOP2 LDA SINUS,X
- LSR
- CLC
- ADC #32
- STA SINUS+128,X
- DEX
- BPL LOOP2
- LDX #39
- LOOP3 TXA
- ASL
- ASL
- ASL
- ASL
- STA X16,X ; Multiplication table (for speed)
- TXA
- LSR
- LSR
- LSR
- LSR
- CLC
- ADC #>GFX
- STA D16,X ; Dividing table
- LDA #0
- STA CHAR,X ; Clear the scroll
- DEX
- BPL LOOP3
- STA POINTER ; Initialize the scroll pointer
- LDX #7
- STX COUNTER
- LOOP10 STA CHRSET,X ; Clear the @-sign..
- DEX
- BPL LOOP10
- LDA #>CHRSET ; The right page for addressing
- STA ZP2+1
- LDA #<IRQ ; Our interrupt handler address
- STA $0314
- LDA #>IRQ
- STA $0315
- LDA #$7F ; Disable timer interrupts
- STA $DC0D
- LDA #$81 ; Enable raster interrupts
- STA $D01A
- LDA #$A8 ; Raster compare to scan line $A8
- STA $D012
- LDA #$1B ; 9th bit
- STA $D011
- LDA #30
- STA $D018 ; Use the new charset
- CLI ; Enable interrupts and return
- RTS
- IRQ INC START ; Increase counter
- LDY #AMOUNT
- LDX START
- LOOP4 LDA SINUS,X ; Count a pointer for each text char and according
- AND #7 ; to it fetch a y-position from the sinus table
- STA YPOS,Y ; Then divide it to two bytes
- LDA SINUS,X
- LSR
- LSR
- LSR
- STA YPOSH,Y
- INX ; Chars are two positions apart
- INX
- DEY
- BPL LOOP4
- LDA #0
- LDX #79
- LOOP11 STA GFX,X ; Clear the dycp data
- STA GFX+80,X
- STA GFX+160,X
- STA GFX+240,X
- STA GFX+320,X
- STA GFX+400,X
- STA GFX+480,X
- STA GFX+560,X
- DEX
- BPL LOOP11
- MAKE LDA COUNTER ; Set x-scroll register
- STA $D016
- LDX #AMOUNT
- CLC ; Clear carry
- LOOP5 LDY YPOSH,X ; Determine the position in video matrix
- TXA
- ADC LINESL,Y ; Carry won't be set here
- STA ZP ; low byte
- LDA #4
- ADC LINESH,Y
- STA ZP+1 ; high byte
- LDA #PADCHAR ; First clear above and below the char
- LDY #0 ; 0. row
- STA (ZP),Y
- LDY #120 ; 3. row
- STA (ZP),Y
- TXA ; Then put consecuent character codes to the places
- ASL ; Carry will be cleared
- ORA #$80 ; Inverted chars
- LDY #40 ; 1. row
- STA (ZP),Y
- ADC #1 ; Increase the character code, Carry won't be set
- LDY #80 ; 2. row
- STA (ZP),Y
- LDA CHAR,X ; What character to plot ? (source)
- STA ZP2 ; (char is already multiplicated by eight)
- LDA X16,X ; Destination low byte
- ADC YPOS,X ; (16*char code + y-position's 3 lowest bits)
- STA ZP
- LDA D16,X ; Destination high byte
- STA ZP+1
- LDY #6 ; Transfer 7 bytes from source to destination
- LDA (ZP2),Y : STA (ZP),Y
- DEY ; This is the fastest way I could think of.
- LDA (ZP2),Y : STA (ZP),Y
- DEY
- LDA (ZP2),Y : STA (ZP),Y
- DEY
- LDA (ZP2),Y : STA (ZP),Y
- DEY
- LDA (ZP2),Y : STA (ZP),Y
- DEY
- LDA (ZP2),Y : STA (ZP),Y
- DEY
- LDA (ZP2),Y : STA (ZP),Y
- DEX
- BPL LOOP5 ; Get next char in scroll
- LDA #1
- STA $D019 ; Acknowledge raster interrupt
- DEC COUNTER ; Decrease the counter = move the scroll by 1 pixel
- BPL OUT
- LOOP12 LDA CHAR+1,Y ; Move the text one position to the left
- STA CHAR,Y ; (Y-register is initially zero)
- INY
- CPY #AMOUNT
- BNE LOOP12
- LDA POINTER
- AND #63 ; Text is 64 bytes long
- TAX
- LDA SCROLL,X ; Load a new char and multiply it by eight
- ASL
- ASL
- ASL
- STA CHAR+AMOUNT ; Save it to the right side
- DEC START ; Compensation for the text scrolling
- DEC START
- INC POINTER ; Increase the text pointer
- LDA #7
- STA COUNTER ; Initialize X-scroll
- OUT JMP $EA7E ; Return from interrupt
- SIN !byte 0,3,6,9,12,15,18,21,24,27,30,32,35,38,40,42,45
- !byte 47,49,51,53,54,56,57,59,60,61,62,62,63,63,63
- ; 1/4 of the sinus
- LINESL !byte 0,40,80,120,160,200,240,24,64,104,144,184,224
- !byte 8,48,88,128,168,208,248,32
- LINESH !byte 0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3
- SCROLL !scr "THIS@IS@AN@EXAMPLE@SCROLL@FOR@"
- !scr "COMMODORE@MAGAZINE@BY@PASI@OJALA@@"
- ; SCR will convert text to screen codes
War ja nur an gewissen Stellen die Syntax ändern. (zB BYT in !byte ... usw)
Werde mir das jetzt zu Gemüte führen.
-
Zitat
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.
-
Zu dem Wobblezeugs kannst du auch einige Beiträge vorher in dem Thread schauen. Da habe ich den Code geposted. Das Logo ist einfach im Koala Format.
-
Zitat von »Roland«
ah, so ist das
jedenfalls ist "deus ex..." ne ganz schön feiste demo, wusste bis dahin gar nicht, dass
interlace mit nem 64er möglich ist...bis denne
plxWo warst du die letzten 18 Jahre?
Geht auch noch besser, momentaner state-of-the-art in interlace hier (hidden part):
http://noname.c64.org/csdb/rel…=85721&show=hidden#hiddenDee
(auch irgendwie an Deus beteiligt... -
Aufgrund mehrfacher Nachfragen in letzter Zeit hier der Quellcode von der Intro!
http://www.localmindprovider.com/ancients-src.rar
Einfach entpacken und mit
kompilieren.