Amigaïstes assidus, bonsoir.
Donc suite du moteur, au cas où cela intéresserait quelques un…
Cela va être un peu long et technique. Donc les non technophiles pourront directement aller lire le texte sous l’image ci-dessous et télécharger l’adf
Jusqu’à présent, les interactions entre la « bête » et l’environnement étaient plus que limitées. Il est donc temps de mettre en place les collisions.
Il y a deux types de collision à gérer ci: les collisions entre le « héros » et les objets (monstres…) et les collisions entre les tirs et ces mêmes objets. Comme le perso et les projectiles sont des sprites et que les autres objets sont faits avec le blitter, Amos met à disposition la commande « spritebob col » qui est dédiée à ce genre de traitement.
Donc facile je me dis. Alors test et verdict : cela ne marche pas
Oups il y a un bug. Je suspecte le scrolling mais je me renseigne quand même un peu. Il y a un excellent thread à ce sujet dans le non moins excellent forum « Amos factory ». Donc effectivement la routine « Spritebob col » oublie de prendre en compte l’offset du scrolling et donc cela donne n’importe quoi en cas de scroll. Il va falloir faire autrement.
En fait cette commande marche (quand elle marche) comme cela : pour un sprite donné, recherche de toutes les intersections des rectangles des bobs avec le rectangle du sprite. Ensuite avec le blitter, vérification de la collision effective par masque.
Pour la « beast », je n’ai pas besoin de savoir quel bob lui rentre dedans, j’ai juste besoin de l’info de collision. Par contre pour les projectiles, il faut identifier les bobs. L’utilisation du blitter n’est pas simple et impliquera une lenteur. Pour info hormis « bob », la commande qui fait travailler le blitter est la commande « screen copy ». Il y a également des commandes supplémentaires avec des extensions comme Amcaf.
Donc pour résumer, ok pour chercher les collisions par rectangle dans lesquels sont inscris les objets. Bof pour le reste.
Heureusement, le hardware de l’Amiga est fabuleux :-). Des registres (respectivement clxcon et clxdat) permettent de vérifier la collisions entre sprites et entre sprite et bitplanes. En fait il existe 2 commandes « set hardcol » et « hardcol » introduites dans Amos pro qui permettent d’utiliser ces registres. Bon la description faite dans le manuel est fausse… Heureusement le forum « Amos factory » (encore lui) contient un thread détaillant l’utilisation de ces commandes.
Mais en fait cela ne me convient toujours pas :-). En effet c’est un petit « lent » car il faut faire plusieurs appel à plusieurs commande et, plus grave, cela ne marche que pour un sprite par VBL. Pas de bol, j’en ai deux à tester.
La solution est donc d’utilser directement ces registres. En fait on peut écrire et lire lecontenu des registres Amiga avec les Doke et Deek d’amos. On peut faire par exemple deek($dff00e) pour lire la valeur du registre clxcon. Il se trouve que François Lionet, donc le créateur d’Amos himself, a écrit un article sur le sujet dans Amiga revue n°36 page 52 et 53. Dommage il ne parle que des collisions entre sprites. Les collisions entre sprite et bitplans ne sont couvertes à priori que par le n°37 de la revue. Mais je ne l’ai trouvée nulle part sur le web.
Bon pas grave, j’ai compris comme cela fonctionnait puisque l’on a la chance d’avoir la doc du hardware de l’Amiga sur le web. Donc j’ai mis en place l’algo avec lecture du registre et quelques opérations logiques. Ensuite j’effectue une intersection simple pour trouver le coupable. Cela donne cela :

En allant à droite vous avez des pics qui sortent du sol: s’ils touchent la « beast », elle clignote pendant un petit temps d’invincibilité pour montre la collision.
Si le joueur tire sur les pics, le projectile est stoppé et (généralement) les pics clignotent pour montrer la collision.
Après des petits tests avec ces pics, le joueur peut continuer à droite pour courrir comme d’hab avec le bison. Ce dernier sur un autre plan n’est pas sensible tir.
Normalement on a toujours nos chers 50 fps.
Pour tester cela avec winuae, il faut bien cocher l’émulation parfaite du 500 donc avec collision hardware. Le mieux est bien sûr d’essayer la petite demo sur un vrai Amiga. Tous les retours sont les bienvenus.
Lien vers l’adf : https://ufile.io/5b2tp
https://ufile.io/5b2tp
Ciao