30

Sinon y'a la solution de la Jaguar II, les bugs à la carte :
9k8y
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

31

ericde45 (./20) :
j'ai l'impression que dès que le blitter lit une zone avec la valeur de fond, et que même si il ne va pas l'écraser par la valeur de la source, si la source = 00 pour ce pixel qui n'est pas a zéro sur le fond, il voit une collision
Après test, et vérification, c'est effectivement ce qui se passe.

Il y a collision si le datacomparator retourne true.
le datacomparator retourne true si (!CMPDST && (source == pattern)) || (CMPDST && (destination == pattern))
donc si on a :
Source :
00 00 00 00
00 01 01 00
00 01 01 00
00 00 00 00
Destination :
08 00 00 08
08 00 00 08
08 00 00 08
08 00 00 08
et que l'on combine source -> destination en testant le 08 comme pattern de destination, pour obtenir quelque chose comme ça :
08 00 00 08
08 01 01 08
08 01 01 08
08 00 00 08
On aura forcement une collision causée par le pixel Dest[0,0] == pattern.

Je ne vois pas de solutions pour ignorer les pixels sources inactifs tout en testant un pattern sur la destination.
Il faudra le faire donc en 2 passes : la première pour combiner, la deuxième pour chercher un pattern de collision.

C'est dommage que la comparaison ne se fasse pas sur le résultat du LFU, sinon ça aurait pu être fait en une seule passe. sad

Les coordonnées retournés par A1 et A2 sont les coordonnées du pixel suivant (X+1;Y).
Je n'ai pas vérifier dans le cas où le pixel en collision est le dernier de la ligne de voir si on a (X+1;Y) ou (X; Y+1) ou (X; Y).

tromb Fichier joint : collisions.s
avatar

32

merci de l'analyse !

je teste une solution pure GPU là.
avatar