Obligement - L'Amiga au maximum

Vendredi 29 mars 2024 - 17:00  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : AMOS - Défilement de texte
(Article écrit par Denis Bernard et extrait d'Amiga News - octobre 1993)


Adoptons ce mois-ci un style moins académique et aventurons-nous sur le terrain de prédilection d'AMOS, l'animation, avec une routine de défilement de texte qui ravira tous les amateurs de génériques...

Facile me direz-vous ? Eh bien non, il ne s'agit pas d'un bête défilement horizontal, mais d'un défilement vertical, en couleurs, utilisant les polices de caractères standard et qui ne s'arrête que lorsqu'il n'y a plus de texte à afficher. Si vous utilisez plus de deux couleurs, il faudra tout de même compiler le programme !

Un peu de technique

Pour produire ce genre d'effet il a deux méthodes :

1. On ouvre un écran suffisamment grand pour contenir la totalité du défilement, et on le fait défiler avec un Screen Offset. La taille maxi d'un écran AMOS étant 1008x1008, si le texte est trop long pour tenir en entier dans l'écran, on passe à la solution suivante...

2. On ouvre un écran légèrement plus grand que l'affichage, on affiche le texte dans la partie de l'écran situé hors des limites de l'affichage, et on fait défiler le tout par des copies de blocs écran.

La première possibilité est très simple de mise en oeuvre, mais elle est bien trop limitative ; et je vous rappelle au passage que l'ouverture d'un écran de 320x1008 4 couleurs nécessite plus de 80 ko de mémoire Chip continus (ce qui risque de poser quelques problèmes de mémoire sur les petites configurations). Optons donc pour la suivante, qui nous permet surtout d'afficher une quantité illimitée de texte, de quoi faire un générique pour une distribution hollywoodienne !

Essayons maintenant de comprendre le principe du défilement : dans le programme, on ouvre un écran de 320x286 et on demande un Screen Display de seulement 320x256, il reste donc une bande de 320x30 (286-256) invisible en bas de notre écran. C'est dans cette partie cachée qu'on affichera chaque ligne de texte, et pour faire défiler l'écran vers le haut, il suffit de copier une portion de l'écran et de la replacer un peu plus haut dans le même écran, le texte apparaissant ainsi progressivement.

Le programme

Il y a aura :
  • Ouverture d'un écran de 320x286.
  • Affichage de 320x256.
  • Initialisation de la palette, etc.
  • Initialisation du double tampon mémoire, sans lequel on obtiendrait un effet de "saccades" fort désagréable... (notez que le programme peut cependant fonctionner sans). Le mode "Autoback 0" indique qu'on devra soi-même faire l'échange entre l'écran physique et l'écran logique.
  • Appel de la procédure _SCROLL[] avec le premier texte affiché avec la police Diamond 20.
  • Appel de la procédure _SCROLL[] avec le second texte affiché avec la police Ruby 15. Note : le second texte est un exemple de générique pour une démo (ou autre...).
  • Fin.
Procédure _SCROLL[numéro du texte,écran du scroll,nom de la police,taille de la police,hauteur de l'affichage visible]

Note : la hauteur de l'affichage visible est la hauteur spécifiée avec la commande "Screen Display".

Nous voici au coeur du programme ! La seule difficulté réelle est l'utilisation de la boucle :

For J=0 To BPLANES-1
   Copy Phybase(J)+A,Phybase(J)+B To Logbase(J)
Next J

...qui est strictement équivalente à :

Screen Copy Physic,0,SPEED,S_WIDTH*8,S_HEIGHT+SPEED To Logic

Si vous avez une machine rapide, vous ne verrez aucune différence, mais si vous passez en 8 couleurs, vous verrez au premier coup d'oeil la faiblesse du Screen Copy.

Dans la version Copy... Phybase(J)+A est l'adresse en mémoire du point de coordonnées 0,SPEED. Phybase(J)+B est l'adresse en mémoire de point de coordonnées 0,S_HEIGHT+SPEED (dans le bitplane J). On recommence l'opération pour chaque bitplane (deux fois dans un écran 4 couleurs, trois fois dans un écran 8 couleurs, quatre fois en 16 couleurs, etc.). Remarquez que la compréhension de cette méthode de programmation par accès direct à la mémoire Chip n'est pas nécessaire si vous voulez exploiter cette routine dans vos programmes.

Vient ensuite la boucle qui suit se chargeant de lire chaque ligne de texte et d'interpréter les commandes (changement de couleur, accélérations, pauses, saute une ligne si on est en mode saut de page, etc.).

Et enfin, les lignes de Data(s) où sont placés les textes (ligne par ligne) numérotés tout simplement par des numéros de lignes BASIC :

1
Data "ligne 1","Ligne 2","Ligne 3",... <- texte 1
...
Data "\f" <- indique fin du texte

2
Data "ligne 1","Ligne 2","Ligne 3",... <- texte 2
...
Data "\f"

3
etc.

Format du texte : chaque ligne de texte est encadrée entre apostrophes (') ou entre guillemets "quotes" ("). Si le premier caractère d'une ligne est un "Back Slash" (\), celle-ci ne sera pas affichée mais interprétée comme une commande, qui agira sur l'affichage des lignes suivantes.

Commandes disponibles ("X" est un nombre entier) :
  • \sX : vitesse avec X > 0, 1 étant la vitesse la plus lente.
  • \aX : accélération/décélération. Fait varier la vitesse de +/- 1 à chaque nouvelle ligne affichée jusqu'à ce que la vitesse soit égale à X.
  • \iX : ink. Affiche les lignes suivantes avec la couleur X.
  • \pX : pause. Marque un temps de pause de X 50e de seconde.
  • \c : saut de page. Vide l'écran avant d'afficher la ligne suivante.
  • \t : attend que l'utilisateur appuie sur une touche ou un bouton de la souris.
  • \f : fin du texte. Sortie de la procédure _SCROLL[].
Procédure GT FONT[Nom police,taille]

Cette procédure recherche la police demandée dans la liste des polices disponibles (ne pas oublier de placer une commande "Get Fonts" au début de votre programme !), et la sélectionne (commande "Set Font").

Exportation, suggestions

Pour réutiliser cette routine dans vos propres programmes, il faut prévoir la hauteur maximale de police à afficher ainsi que la vitesse maximale, que nous appellerons HAUT_MAX et VIT_MAX. Ensuite, définir la hauteur de votre affichage (en général 256 lignes pour nous européens - norme PAL - ou 200 lignes outre-Atlantique - norme NTSC), que nous appellerons HAUT_AFF. On doit ouvrir soi-même l'écran dans lequel le texte va défiler (ce qui permet de l'ouvrir en mode double champ de jeu...) avec les spécifications suivantes :

Screen Open X, LARGEUR, HAUT_MAX+VIT_MAX +HAUT_AFF, NB_COULS, RESOL
Screen Display X,,,,HAUT_DISP

...avec "X" de 0 à 7 (numéro que vous transmettez à la routine par le paramètre "ECRAN"), LARGEUR : 320 de préférence, NB_COULS : 2 à 8 couleurs, et RESOL : Hires/Lores.

Dans le programme d'exemple, on a : X=0, LARGEUR=320, HAUT MAX=20, VIT MAX=10, HAUT AFF=256, NB_COULS=4, RESOL=Lores. Supposons maintenant que N_TEXTE soit le numéro du texte que vous voulez afficher (avec la police Topaz 11 par exemple), on appelle la procédure _SCROLL[] :

_SCROLL[N_TEXTE, X, "topaz", 11, HAUT_AFF]

Et voilà ! Maintenant que le générique de votre démo ou de votre jeu est fait, vous n'avez plus aucune excuse pour ne pas nous préparer de bonnes disquettes pleines de couleurs et d'animations ! Quoique... une bonne sieste...

AMOS
AMOS
AMOS
AMOS


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]