★ CODING ★ PERFECTIONNEMENT A L'ASSEMBLEUR, Le Flipping ★ |
Perfectionnement à L'assembleur : Le Flipping | Cours et initiation du Fanzine Ghouls Fanz |
Cette fois-ci, je vais vous initier aux techniques du Flipping. Cette technique repose sur la permutation d'écrans. Nous allons en avoir besoin tout au long de cet article... (voir article "initiation à l'assembleur"). Si vous avez deja lu l'article "design", je parlais à l'interieur de la technique utilisée pour faire bouger un énorme logo en utilisant une simple rupture. Je vais vous apprendre à bouger un gros logo au word près (tous les 2 octets). Vous devez afficher votre logo sur un écran (comme un écran normal). Le principe est de modifier l'offset de votre écran par l'intermédiaire des registres 12 et 13. En effet, si l'on met dans le registre 13 la valeur 1, l'écran se décale entiérement de 2 octets (si l'on considere que le registre 13 contenait la valeur 0 initialement) vers la gauche. Du coup, on en déduit que si l'on s'amuse à faire varier la valeur du registre 13 avec des valeurs regulières, on peut faire bouger notre écran horizontalement... ou plutot notre soi-disant gros logo, si vous voyez ce que je veux dire ! Bon mais comme je le dis dans la rubrique "design", une telle animation est rapide, et ce n'est pas très beau à voir. Alors il existe une technique simple pour avoir un déplacement de notre logo à l'octet près... Vous devez recopier 2 fois votre logo en mémoire avec 1 octet de décalage.Le premier logo représente l'écran A, et le second logo l'écran B. Imaginez une animation du type ECRAN A, ECRAN B, ECRAN A-1,ECRAN B-1, ECRAN B-2, etc... avec comme valeur initiale 20 dans le registre 13 (pour l'écran A), alors notre logo bouge vers la droite. Je sais, c'est assez dur à comprendre au debut, mais en fait c'est vraiment simple. Le seul probleme de cette technique est que le logo prend 2 fois plus de mémoire-video puisque l'on a recopié 2 fois notre logo à l'écran. Mais bon, ne vaut-il pas mieux avoir ce petit gaspillage de mémoire et avoir un beau logo qui bouge horizontalement et fluidement ? A chacun son avis... On va attaquer un autre effet qui rend pas trop mal etqui a l'avantage de n'utiliser que très peu de temps-machine, tout comme le logo qui bouge de gauche à droite. Cet effet, je l'ai vu dans la Dracula's Night Demo (diffusée dans la PowerSystem Megademo), mais aussi dans l'intro de la Digital Orgasm. Cet effet utilise de la rupture ligne à ligne, en prenant compte que chaques écrans fassent 8 lignes de hauteur (on ne modifie pas le registre 9, on met seulement la valeur 0 dans le registre 4). Le principe repose là-encore sur le basculement de plusieurs écrans: il y en a 8, avec pour chacuns une animation différentede 1 pixel verticalement. Nous aurons donc besoin de modifier les registres 12 et 13 pour avoir une animation fluide. L'avantage de la rupture ligne à ligne (dans ce cas, on appelle ca plutot "rupture écran par écran) est que notre écran affiché se répete tout seul.Ainsi, on peut faire une animation qui prenne la hauteur quel'on veut... Sans perdre de temps-machine. Pour cela, le truc utilisé est d'avoir un sprite qui se répete sur 2 lignes (par exemple, on a un sprite CPC en haut, et exactement le meme en bas de ce sprite). Ainsi, une fois que vous avez votre sprite en mémoire, il vous suffit d'afficher votre sprite à la ligne selectionnée, puis lorsque vous selectionnez la suivante, vous additionnez la largeur de votre sprite d'origine à l'adresse de votre sprite en mémoire,et ainsi de suite... C'est assez dur à expliquer (et chiant coté programmation) alors j'espere que vous avez compris. Un autre effet sympa qui est la combinaison des 2 techniques vues précedemment: les scrollings différentiels. Regardez juste la première partie de la Dark Age Maxidemo ou la partie de Pict dans The Demo pour savoir ce que c'est... Le principe est simple: on fait un sprite que l'on répete sur 8 lignes et que l'on décale à chaques fois d'un pixel (en mode 1). Pourquoi pas 4 ? Parce que je vous le rappelle on fait varier le registre 12 et 13 qui ne peuvent varier qu'au word près, soit 2 octets, soit 8 pixels en mode 1... On utilise également de la rupture ligne à ligne pour avoir nos écrans toutes les 8 lignes. Aprés tout cela compris, le reste est relativement simple: on fait varier les registres 12 et 13 de cette facon (pour 3scrollings différentiels par exemple): — scroll 1: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 Les chiffres donnés reprensentent les écrans (les déplacements de notre sprite que nous avons précalculés au début). Le flipping c'est quoi ? Cette technique repose sur la permutation de 2 écrans. En effet, avec la technique décrite plus haut, si vous affichez un sprite qui possede une hauteur de 40 lignes par exemple, et bien vous aurez de fortes chances pourque votre sprite apparaisse de manière saccadée, "coupée". Pourquoi ? Parce que tout simplement le canon à électron "passe"sur votre animation ! Cela provoque un décalage de temps de l'ordre de 1/50eme de seconde, mais cela suffit à ce que l'œilhumain puisse voir le bug... L'avantage de cette routine est que l'on peut mettre beaucoup de temps à construire notre écran. Ce qui veut dire que nous ne sommes pas limités à 1/50 de seconde pour remplir notre écran ! On peut encore avoir une animation fluide à 2/50 deseconde. Quand aux jeux, ils tournent à environ 5/50 de seconde(cela dépend tout de meme du type de jeu). L'inconvénient de cette routine - car il y a un inconvénient - est de devoir utiliser 2 écrans au lieu d'un seul. Cette technique n'est pas utilisable si l'on veut utiliserde l'overscan total (plein écran) (enfin si c'est possible mais il faudrait alors utiliser de la rupture, et la zone de jeu serait assez petite en hauteur (la moitié de l'écran au maximum)). Sur des écrans deformés, la technique peut devenir interessante ! En effet, imaginez un écran en overscan vertical coupé de moitié en hauteur, on pourrait utiliser un seul écran (par exemple en #C000 pour avoir une routine BC26 qui fonce !). C'est d'ailleurs une des principales raisons du pourquoi du comment que pas mal de jeux possedent des écrans reconfigurés. En attendant, il est tout à fait possible de faire du Flipping sur des écrans normaux (pas d'overscan), il suffit de permute rentre l'écran en #C000 et celui en #4000 (pour simplifier les choses)... Voici un exemple de ce à quoi la routine pourrait ressembler: ORG #9000 |
|