Visiblement, tu veux créer 6 sprites en plus du fond.
Tu fais également une confusion entre les objets sprites (oeil, ball1, ...) et les descripteur de sprites (objets de type SCB) qui leur seront associés (edit : il faut dire que mon post explicatif précédent a du t'induire en erreur au niveau des noms, désolé).
Rien ne t'oblige à avoir 1 SCB par objet (sauf si tu veux chainer les objets pour des raisons de performance).
1 seul SCB opaque (le fond, déclaré en $c0) et un transparent (déclaré en $c7) peuvent suffire.
Mais il faut dans ce cas :
afficher le fond avec DrawSprite
associer le sprite 1 au SCB transparent (avec SCBDATA)
afficher le SCB avec DrawSprite
associer le sprite 2 au SCB transparent (avec SCBDATA)
afficher le SCB avec DrawSprite
associer le sprite 2 au SCB transparent (avec SCBDATA)
afficher le SCB avec DrawSprite
De la manière dont tu es parti (en chainant les SCB), tu dois déclarer les 6 structures (en C avec une déclaration de tableau extern char... + en assembleur pour charger le tableau)
Là, tu déclares une structure SCBs et en assembleur les 6 controlleurs avec des noms différents (qui en plus sont ceux de tes objets, donc tu effaces tes sprites.
Tu dois donc remplacer
extern char SCBs[];
par
extern char SCBoeil[];
extern char SCBball1[];
extern char SCBball2[];
extern char SCBball3[];
extern char SCBball4[];
extern char SCBball5[];
(mets bien SCB pour les distinguer devant sinon, c'est le même nom que tes objets)
Dans la partie assembleur; tu devrais avoir ça :
#asm _SCBoeil dc.b $c7,$10,$20 dc.w _SCBball1,_oeil dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBball1 dc.b $c7,$10,$20 dc.w _SCBball2,ball1 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBball2 dc.b $c7,$10,$20 dc.w _SCBball3,ball2 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBball3 dc.b $c7,$10,$20 dc.w _SCBball4,ball3 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBball4 dc.b $c7,$10,$20 dc.w _SCBball3,ball4 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBball5 dc.b $c7,$10,$20 dc.w 0,_ball5 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm
Ensuite, dans le corps du programme :
tu ne dois plus faire référence à SCBs qui n'existe plus mais à SCBoeil, SCBball1, ...
Note : vu que dans ta déclaration assembleur, tu as déjà associé SCBoeil l'objet oeil, c'est inutile de faire un SCBDATA().
SCBX(SCBoeil) = 50;
SCBY(SCBoeil) = 50;
idem pour SCBball1, SCBball2, ...
Pour les DrawSprite, tu dois seulement faire le:
DrawSprite(SCB); // affiche le fond
DrawSprite(SCBoeil); // affiche tous les sprites vu qu'ils sont chainés
Voilà, j'espère que c'est plus clair. C'est vrai que la gestion de la mémoire en C est assez différente du GFA (moins masquée dirons nous)