alekmaul a écrit : ↑sam. 11 août 2018 10:41
Hum, si je rajoute les variables, c'est super lent entre chaque transitions ... étonnant.
Faut copier le truc juste avant le 1er #asm dans la fonction fade_out,je remets toute la routine ce sera plus simple .
Code : Tout sélectionner
char nb_bg_pals,
nb_spr_pals,
speed,
fin_fade;
int bg_pal_deb,
spr_pal_deb;
void fade_palette_out( unsigned int _bg_pal_deb, unsigned char _nb_bg_pals, unsigned int _spr_pal_deb, unsigned char _nb_spr_pals , unsigned char _speed )
{
bg_pal_deb = _bg_pal_deb;
spr_pal_deb = _spr_pal_deb;
nb_bg_pals = _nb_bg_pals;
nb_spr_pals = _nb_spr_pals;
speed = _speed;
#asm
lda #7
sta _fin_fade
.start_fade:
lda _nb_spr_pals
and #%0000_1111
sta _nb_spr_pals
lda LOW_BYTE _bg_pal_deb
sta $402 ; // Séléction de la palette dans le VCE
sta <__ax
lda HIGH_BYTE _bg_pal_deb
sta $403
sta <__ax + 1
lda _nb_bg_pals
sta <__cl
lda _speed
jsr wait_vsync
.init_fade:
clx
.palette_fade:
ldy $404
tya ; // Récupère la composante BLEU 1
and #%0000_0111
beq .pas_dec_blue
dec A
.pas_dec_blue:
sta <__bl
tya
and #%0011_1000 ; // Récupère la composante ROUGE 1
beq .pas_dec_red
sec
sbc #8
.pas_dec_red:
sta <__bh
lda $405 ; // Lecture du bit 9 dans le VCE
lsr A ; // Mise du bit 9 dans la carry
tya
and #%1100_0000 ; // Récupère la composante VERTE 1
ror A ; // Récupération du bit 9 dans REG A
beq .end_fade
sec
sbc #32
asl A ; // Remise du bit 9 dans la carry
rol _pals + 1 , X ; // Récupération du bit 9 dans la palette provisoire
.end_fade: ; // Dans REG A on a déjà la val de _g
; // On reforme la couleur avec les 3 vals RVB
ora <__bl
ora <__bh
sta _pals , X
inx
inx
; // On teste si fin de palette X = 32
cpx #32
lbne .palette_fade
; // On met en place la palette courante
stw <__ax , $402 ; // Séléction de la palette dans le VCE
tia _pals , $404 , 32 ; // Copie palette courante dans le VCE
addw #16 , <__ax
dec <__cl
lbne .init_fade
.init_spr_fade_pals:
; // Gestion du fade des palettes des sprites
lda _nb_spr_pals
beq .pas_fade_spr_pals
bmi .pas_fade_spr_pals
sta <__cl
ora #128
sta _nb_spr_pals
lda LOW_BYTE _spr_pal_deb
sta $402 ; // Séléction de la palette dans le VCE
sta <__ax
lda HIGH_BYTE _spr_pal_deb
sta $403
sta <__ax + 1
jmp .init_fade ; // On relance le fade des pals des sprites
.pas_fade_spr_pals:
dec _fin_fade
lbne .start_fade
#endasm
}
Au fait pour la fonction set_dark, tu veux la même mais en ASM ou de pouvoir y passer des params ??
Pour le moment voilà la trad ASM de ta fonction,il faut la copier dans le même fichier que la fade_out.
Code : Tout sélectionner
void set_dark()
{
#asm
stw #BG_PAL1 , $402 ; // Init du VCE sur palette 0 du BG
stw #BG_PAL1 , <__ax
stb #4 , <__cl
lda #1
sta _nb_spr_pals
lda #2
jsr wait_vsync
.init_colors_black:
; // BG & SPR
clx
.init_pal:
ldy $404
; // Récupère la composante BLEU
tya
and #%0000_0111
lsr A
lsr A
sta <__bl
; // Récupère la composante ROUGE
tya
and #%0011_1000
lsr A
lsr A
and #%0011_1000
sta <__bh
; // Récupère la composante VERTE
lda $405 ; // Lecture du bit 9 dans le VCE
lsr A
tya
ror A
lsr A
and #%1100_0000 ; // Récupère la composante VERTE 1
; // On reforme la couleur avec les 3 vals RVB
ora <__bl
ora <__bh
sta _pals , X
stz _pals + 1 , X
inx
inx
; // On teste si fin de palette X = 32
cpx #32
bne .init_pal
; // On met en place la palette courante
stw <__ax , $402 ; // Séléction de la palette dans le VCE
tia _pals , $404 , 32 ; // Copie palette courante dans le VCE
addw #16 , <__ax
dec <__cl
bne .init_colors_black
; // On assombri la palette des sprites
lda _nb_spr_pals
beq .pas_black_spr_pals
bmi .pas_black_spr_pals
sta <__cl
ora #128
sta _nb_spr_pals
lda LOW_BYTE #SPR_PAL0
sta $402 ; // Séléction de la palette dans le VCE
sta <__ax
lda HIGH_BYTE #SPR_PAL0
sta $403
sta <__ax + 1
jmp .init_colors_black ; // On relance le fade des pals des sprites
.pas_black_spr_pals:
#endasm
}