ça y est j'ai les tiles d'avant plan qui s'affichent correctement ...
https://youtu.be/_HvDkPCm164J'ai donc écrit un convertisseur pour récupérer les données d'origine, ça aidera aussi pour les collisions.
Sur les tiles d'avant plan, les lignes intermédiaires conservent les pixels transparents, et on remplace les pixels colorés par des pixels noirs ... tout simplement :
Fichier(s) joint(s):
tileset.png [ 44.92 Kio | Vu 4164 fois ]
Les points négatifs (pour le moment) :
1. Les données d'origine comprennent des blocks en double ... dont je ne connais pas l'utilité, le tileset adonc bien grossi.
S'il s'avère qu'ils sont inutiles, je dédoublonnerai.
2. Les zones d'avant plan coutent plus cher à afficher (lignes noires intermédiaires), ça ne devrait pas être problématique car les tiles d'avant plan utiles sont en qté limité.
Sauf que dans le design original il y a de grandes zones de mur en avant plan (dans des endroits normalement inacessibles). Il va donc falloir que j'édite la map des niveaux pour repasser ces murs en arrière plan.
Mais sinon c du tout bon ;-)
Coté prog rien de spécial :
Au moment de rendre les tiles d'arriere plan depuis le buffer, si je tombe sur un tile d'avant plan je le met en file d'attente :
Code:
DBT_cloop
pulu d,x
pshs u
stb $E7E6
beq @skip
tsta
bpl @low
stb ,y+
stx ,y++
ldx <glb_screen_location_1
stx ,y++
ldx <glb_screen_location_2
stx ,y++
bra @skip
@low ldu <glb_screen_location_2
jsr ,x
@skip puls d,x,u
et après avoir rendu les sprites je dessine ces tiles d'avant plan :
Code:
DrawHighPriorityBufferedTile
ldy #tmb_hprio_tiles
@loop
ldb ,y+
stb $E7E6
beq @exit
ldx ,y++
ldu ,y++
stu <glb_screen_location_1
ldu ,y++
jsr ,x
bra @loop
@exit rts
Quand l'écran ne bouge pas, les tiles d'arrière plan ne sont plus rendus du tout (on appelle pas la routine).
Par contre on appelle la routine pour les tiles d'avant plan, qui utilise la liste avec tout de prêt dedans ...
pratique !
C'est le seul code ajouté ...
ps : il faut que je règle un petit pb de clignotement des sprites au démarrage du scroll ... c'est sur la todo list.