Résumons un peu:
- si je veux un niveau de transparence variable pour un sprite, le seul moyen est d'utiliser un sprite en mode bitmap/direct color ((Attr 0, Bit10-11) to a value of 3) et d'utiliser le champ prévu pour le no de palette pour "personnaliser" le niveau de transparence.
- pour les sprites à palette, ce sont les mêmes registres "BLDCNT" et "BLDALPHA" qui régulent la transparence des sprites depuis le GBA.
REG_BLDCNT_SUB = BLEND_DST_BG0|BLEND_DST_BG3| BLEND_SRC_BG2|BLEND_SRC_SPRITE|BLEND_ALPHA;
permet donc d'afficher des sprites et le calque 2 transparents par-dessus BG0 et BG3 (pour autant que ces deux calques soient effectivement derrière eux, sans autre chose pour faire obstruction).
Mais comment faire pour que seuls certains sprites soient transparents?
OBJs that are defined as 'Semi-Transparent' in OAM memory are always selected as 1st Target (regardless of BLDCNT Bit 4), and are always using Alpha Blending mode (regardless of BLDCNT Bit 6-7).nous apprend-on sur gbatek.
C'est donc le rôle de
ATTR0_TYPE_BLENDED
(à utiliser à la place de ATTR0_TYPE_NORMAL
) qui sélectionne le sprite en question comme "source d'alpha-blending" indépendamment de la valeur de BLEND_SRC_SPRITE
dans le registre BLDCNT.
Cool. Je suis prêt à attaquer l'implémentation de "l'onion skin" dans AnimEDS ^_^
You can make all the sprites have some alpha-blending by turning on BLEND_SRC_SPRITE
inREG_BLDCNT_SUB
... not that useful. You're more likely to want a BG translucent that let sprites show through as well. That's withREG_BLDCNT_SUB|=BLEND_DST_SPRITE
You can selectively turn on blending of some sprites by using ATTR0_TYPE_BLENDED
. That's what I need in my editors, but the blending level will be the same for all sprites (and layers).cbitmap-type sprites use direct colors (bypassing the palettes), so the ATTR2_PALETTE()
field of GBA sprites is useless and has been recycled intoATTR2_ALPHA
. I guess you still depend onREG_BLDCNT
to tell *what* you're transparent against... Oh, and don't forget to setREG_BLDALPHA
to some value, of course.
No comments:
Post a Comment