2 verschiedene HDMA Codes für ein Level

geschrieben am 05.08.2013 17:08:16
( Link )
Hallo zusammen,

ich arbeite gerade an einem Level, für welches ich gerne den "Gradient Shadow Bottom" von Ice Man, sowie einen anderen (normalen) Farbverlaufs- HDMA benutzen würde.


Bearbeiteter Shadow- HDMA:

Spoiler anzeigen
LDA #$17 ;\ Everything
STA $212C ;| is on main screen
LDA #$00 ;| Nothing
STA $212D ;| is on sub screen
LDA #$A7 ;| Affect layer 1,2,3
STA $40 ;/ back enable and subtract



REP #$20 ;\ Set processor 16 bit
LDA #$3200 ;| $4330 = $2132
STA $4350 ;| $4331 = Mode 00
LDA #Gradient ;| Get gradient pointer
STA $4352 ;| low and high byte
PHK ;| Get bank
PLY ;|
STY $4354 ;| Store to address bank
SEP #$20 ;/ Set processor 8 bit

LDA #$20 ;\ Enable HDMA
TSB $0D9F ;| on channel 5
RTS ;/ Return



Gradient:
db $64,$E0
db $04,$E1
db $04,$E2
db $04,$E3
db $04,$E4
db $04,$E5
db $04,$E6
db $04,$E7
db $04,$E8
db $04,$E9
db $04,$EA
db $04,$EB
db $04,$EC
db $04,$ED
db $04,$EE
db $04,$EF
db $04,$F0
db $04,$F1
db $04,$F2
db $04,$F3
db $04,$F4
db $04,$F5
db $04,$F6
db $04,$F7
db $04,$F8
db $04,$F9
db $04,$FA
db $04,$FB
db $04,$FC
db $04,$FD
db $04,$FE
db $04,$FF
db $00




Da ich uberASM benutze, habe ich zunächst den Shadow Code bei "Level_Init_code.asm" eingefügt und für Asar so modifiziert, dass er keine xkas- Commands mehr hat (siehe Spoiler).
Das hat dann auch alles ohne Probleme funktioniert. Was mir jedoch nicht gefällt, ist, dass dieser Hdma- Code, der sich hauptsächlich auf den FG bezieht, auch den kompletten Background schwarz färbt, und das Level so zu dunkel macht.
Aus diesem Grund habe ich einen normalen (blauen) HDMA Code ebenfalls über Level_Init_Code.asm" eingefügt, direkt unter den Shadow- Code.

Spoiler anzeigen
LDA #$00
STA $4330
LDA #$02
STA $4340

LDA #$32
STA $4331
STA $4341

REP #$20
LDA.w #.Table20
STA $4332
LDA.w #.Table19
STA $4342

SEP #$20

LDA.b #.Table20>>16
STA $4334
LDA.b #.Table19>>16
STA $4344

LDA #$18
TSB $0D9F

RTS






.Table19
db $80,$20,$40
db $60,$20,$40
db $00

.Table20
db $14,$81
db $14,$82
db $14,$83
db $14,$84
db $14,$85
db $14,$86
db $14,$87
db $14,$88
db $14,$89
db $14,$8A
db $14,$8B
db $14,$8C
db $22,$8D
db $00


-> Der Code ist nur provisorisch, eventuell nehme ich einen anderen Farbverlauf.


Obwohl mir Asar keine Probleme berichtet, erscheint im Level leider immer nur der eine HDMA- Code, nämlich der erste.

Anscheinend scheint das Ganze daran zu liegen, welche HDMA- Channels benutzt werden; Bei dem ersten Code steht als Kommentar des Autors, dass dieser Channel 5 benutzen würde.

Deshalb meine Frage: Wie muss ich den zweiten Code umschreiben, damit beide Codes im Level erscheinen, oder ist das eventuell gar nicht möglich?

Ich würde mich über Hilfe freuen. =)
geschrieben am 05.08.2013 18:18:05
( Link )
Das Problem sind nicht die Channel die genutz werden (der Erste nimmt Channel 5 und der Zweite Channel 3 und 4)
die sind alle frei.Das Problem ist das beide HDMA Effeckte das Register $2132 überschreiben und somit nur die letzte
Änderung sichtbar wird (also der effeckt in channel 5) du könntest statdessen versuchen den Zweiteneffeckt auf eine
Paletten farbe anzuwenden und im BG alles was durchsichtig ist mit dieser farbe voll machen...
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->
geschrieben am 05.08.2013 18:26:48
( Link )
Erstmal danke für die schnelle Antwort.

Ich verstehe nicht ganz, was du mit "auf eine Palettenfarbe anwenden", meinst. Bedeutet dass, das ich den zweiten HDMA- Code vergessen soll, und einfach mithilfe einer
Palettenfarbe eine Art Fake- HDMA erstellen soll, oder dass ich den Code irgendwie "auf eine Farbe patche"? Wenn ja, wie soll ich genau vorgehen mit uberASM?
geschrieben am 05.08.2013 18:32:51
( Link )
ich weiß zwar nicht wo du deine HDMA code hernimmst aber es gibt auf SMW-C nen tool namens Gradient-Tool mit dem
man HDMA tables erstellen kann mit dem benötigten code dort ist auch ein beispeil code bei der eine farbe in der palette
pro "zeile" verändern kann
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->
geschrieben am 05.08.2013 19:02:54
( Link )
Das Gradient Tool habe ich sogar schonmal benutzt, werde mir gleich mal angucken, ob ich das hinbekomme

Den Code habe ich mir mit Hilfe des HDMA- Gradient Rippers generiert.

Mir kommt da gerade eine Idee... Du sagtest ja, das Problem ist, dass das gleiche Register ($2132)
von beiden Codes benutzt wird. Es gibt bei dem Gradient Ripper aber auch eine Funktion, die einen HDMA Code auch für die Register $2121 und $2122 generiert.
Könnte das Problem so gelöst werden? Theoretisch müssten dann ja Code 1 und Code 2 unterschiedliche Register, sowie Channels benutzen, und dürften sich nicht mehr überschreiben.

Ich probiers mal aus.
geschrieben am 05.08.2013 19:06:09
( Link )
die Register $2121 und $2122 sind die palette
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->
geschrieben am 05.08.2013 19:21:09
( Link )
Okay, ich hab so ziemlich null Ahnung von ASM und erschließe mir den ganzen Kram nur mehr oder weniger nach Logik.

Soll ich diese Register ($2121 und $2122) benutzen, oder verstehe ich das grad völlig falsch?

Btw, bei dem Gradient Tool gibt es die Codes:
BothScrollGradient.asm,
ScrollGradient.asm,
ScrollGradientTables.asm,
SpecifyScrollGradient.asm

Dieser Code, von dem du gesprochen hast, ist der "SpecifyScrollGradient.asm"?

Ansonsten, wenn ich das jetzt gar nicht auf die Reihe krieg, nehm ich halt nen Fake HDMA
geschrieben am 05.08.2013 19:26:43
( Link )
wenn du das Gradienttool startest kannst du unter den optionen einstellen write to: und dort die palletten farbe angeben
die verändert wird
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->
geschrieben am 05.08.2013 20:01:02
( Link )
Ahhh solangsam verstehe ich das Ganze..
Ich denke ich bekomme das jetzt hin, hab vorhin nen Test gemacht, bei dem das relativ gut geklappt hat, mit der einen Palettenfarbe.

Vielen Dank für deine Hilfe!

Falls ich doch noch für was zu blöd sein sollte, melde ich mich wieder