Obligement - L'Amiga au maximum

Mardi 16 octobre 2018 - 01:26  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : AMOS - AMAL, le langage de l'animation
(Article écrit par François Lionet et extrait d'Amiga News Tech - novembre 1990)


Le plus simple des jeux d'arcade est déjà constitué d'un grand nombre d'objets animés en même temps sur l'écran. Déplacer au 1/50e de seconde 20 personnages à la fois est une tâche ardue pour un BASIC, même compilé. AMOS se devait d'être un outil pour la création simple de jeux rapides. Il fallait donc trouver quelque chose ! AMAL est le résultat de longues soirées de cogitations et nuits de programmation. C'est certainement l'un des points fort d'AMOS. Aujourd'hui commence une série d'articles dans lesquels j'espère vous en faire découvrir la puissance.

AMAL c'est quoi ?
  • L'abréviation de AMos Animation Langage,
  • Un véritable langage, comportant plus de 35 instructions, d'une syntaxe proche du BASIC.
  • Précompilé, volontairement simplifié pour en accélérer l'exécution et atteindre ainsi une vitesse proche du langage machine (et une compilation ultra-rapide !).
  • Exécuté en interruptions, indépendamment du programme principal, celui-ci se contente de regarder la position des personnages, et de gérer les collisions.
  • Un multi-compilateur : on peut exécuter en même temps pas moins de 64 programmes AMAL. En comptant le programme AMOS lui-même, 65 programmes tournent dans votre Amiga !
  • Un moyen de simplifier énormément la programmation d'animations complexes et répétitives.
  • L'extension des instructions d'animations du STOS.
Enfin en lisant ce qui précède, vous comprenez certainement que je suis assez content du résultat. Qu'un programmeur me jette la première pierre !

Principes généraux

Les exemples qui vont suivre doivent être tapés en mode direct. Vous devez charger une banque de sprites de la disquette DATA :

Load "AMOS_DATA:Sprites/Octopus.Abk"

Maintenant, tapez la ligne suivante pour changer la palette de couleurs :

Get Sprite Palette

Le premier programme AMAL

Les programmes sont transmis au compilateur AMAL sous la forme de chaînes de caractères, par l'instruction :

AMAL Canal,"Chaîne"

"Canal" est le numéro du canal d'animation. Nous en reparlerons plus loin. "Chaîne" est le programme d'animation lui-même.

Tapez l'exemple suivant (en mode direct, en ayant chargé la banque de sprite avant). Respectez scrupuleusement les majuscules et minuscules !

Sprite 1,160,100,1

Une pieuvre apparaît sur votre moniteur. C'est elle que nous allons faire bouger.

Amal 1,"Move 100,50,200"

Rien ne se produit en apparence, mais votre chaîne vient d'être compilée et stockée en mémoire. Pour lancer le mouvement, tapez :

Amal On

La pieuvre glisse lentement en bas à droite. Notez que vous pouvez taper du texte au clavier, ou exécuter des instructions : la pieuvre continue à se mouvoir.

La chaîne AMAL

Le programme AMAL de l'exemple précédent était réduit à une seule instruction :

"Move 100,50,200"

Voici les principaux points à connaître :
  • Le compilateur AMAL ne reconnaît que les majuscules, les chiffres et les opérateurs dans la chaîne.
  • Tous les autres caractères sont ignorés (minuscules, espaces, ponctuation, codes de contrôle...).
  • Une instruction AMAL n'est constituée que de une ou deux lettres majuscules. L'instruction utilisée dans l'exemple était "M". Notre petit programme peut s'écrire comme nous l'avons fait, mais aussi :

    "M100,50,200"
    

    Ou bien :

    "Move le beau sprite sur le bel écran, 100 en X,50 en Y,200"
    

  • D'une manière générale, pour de longues chaînes, il vaut mieux éviter les extrêmes ! N'utiliser que les majuscules rendra le programme extrêmement difficile à comprendre plus tard.
Un peu plus compliqué...

Nous allons améliorer un peu le mouvement de notre pieuvre. Tapez en mode direct :

Amal 1,"Anim 0,(1,2)(2,2)(3,2)(4,2); Move -100,-50,400"
Amal On

La pieuvre retourne à sa position initiale en agitant les bras ! Le programme AMAL produit outre la coordonnée X et Y, le numéro de l'image à afficher. C'est en faisant varier ce numéro que l'on obtient l'animation des bras.

En avant-goût du mois prochain, voici la fonction de l'instruction Move que nous utilisons beaucoup dans nos exemples.

M(ove) DX,DY,NombreDePas

"Move" initialise un mouvement entre la position actuelle du canal (X et Y) et la position finale (X+DX,Y+DY). En fait, AMAL trace une droite entre les deux points. "NombreDePas" spécifie la vitesse du mouvement :
  • M 100,100,100 : le sprite dessinera une ligne diagonale, 1 pixel chaque 1/50e de seconde, en 2 secondes.
  • M 100,100,50 : le sprite fera le même chemin en 1 seconde.
  • M 100,100,1 : le mouvement sera instantané.
DX et DY peuvent être nuls (pas de mouvement) ou négatifs (mouvements à gauche ou vers le haut).

Le canal d'animation

Nous appellerons dorénavant chaque programme AMAL un "canal d'animation". Le canal d'animation produit trois choses :
  • Une coordonnée en X.
  • Une coordonnée en Y.
  • Un numéro d'image.
AMOS permet d'exploiter au maximum les trois chiffres de chaque canal. Vous pouvez en effet choisir leur destination avec l'instruction CHANNEL.

CHANNEL canal TO SPRITE num

C'est le mode que nous avons utilisé sans le savoir dans l'exemple. Les chiffres servent à déterminer la position d'un sprite matériel.
  • "canal" est le numéro du canal d'animation (le même numéro que celui de l'instruction AMAL).
  • "num" est le numéro du sprite qui sera animé.
Lorsque AMOS apparaît, il effectue automatiquement l'équivalent du programme suivant :

For N=0 To 63
Channel N To Sprite N
Next

Chaque canal animera le sprite de même numéro. L'exemple a utilisé le sprite 1 et le canal 1. Les lignes suivantes ne donneront aucun résultat :

Amal 2,"Move 100,100,100"
Amal On

Le canal numéro 2 est initialisé. Les coordonnées sont produites, vers le sprite 2... qui n'existe pas ! Rien ne bougera à l'écran.

CHANNEL canal TO BOB num

Certainement le plus intéressant. Cette instruction dirige la sortie du canal vers le BOB de numéro num. Comme précédemment, il faut que le BOB soit affiché pour voir un résultat. Tapez les lignes suivantes (vous devez toujours voir la première pieuvre bouger sur votre écran !) :

Bob 1,50,150,1

Tout d'abord, on affiche un BOB. Notez le flash d'une des couleurs dû au curseur.

Flash Off

...et ça ne flashe plus.

Channel 2 To Bob 1

Redirige la sortie du deuxième canal vers notre BOB. Pour l'exemple, nous n'avons pas pris des numéros identiques entre le canal et le BOB, mais dans vos programmes, je vous conseille fortement de le faire.

Amal 2,"L: Move 100,0,100; Move -100,0,100; Jump L"
Amal On

Démarre un nouveau programme dont nous verrons les instructions dans un prochain article. Vous avez maintenant deux canaux qui fonctionnent en même temps, un pour chaque pieuvre.

CHANNEL canal TO SCREEN DISPLAY num

De plus en plus amusant. Les coordonnées du canal vont servir à calculer la position de l'écran numéro num (comme l'instruction SCREEN DISPLAY). Tapez les lignes suivantes :

Channel 3 To Screen Display 0
Amal 3,"L: Move 0,25,5; Move 0,-25,5; Jump L"
Amal On

Et voilà notre troisième canal en fonction. Impressionnant, non ? Notez que le BOB suit l'écran, et que le sprite reste indépendant. Un sprite matériel "survole" le terrain de jeu. Cette faculté peut être extrêmement utile dans certains jeux (par exemple le vaisseau du joueur dans un clone de Defender).

CHANNEL canal TO SCREEN OFFSET num

Idéal pour faire des défilements. Les coordonnées produites par le canal d'animation ont le même effet que l'instruction SCREEN OFFSET. Les lignes suivantes vont rendre l'affichage encore plus insupportable :

Channel 4 To Screen Offset 0
Amal 4,"L: Move 320,0,20; Move -320,0,20; Jump L"
Amal On

Excusez-moi, je vais chercher un cachet d'aspirine pour observer le résultat ! Nous en sommes à quatre canaux simultanés.

CHANNEL canal TO RAINBOW num

AMOS peut facilement produire des dégradés de couleurs avec le Copper. On peut les animer avec un canal d'animation. Dans ce cas :
  • La coordonnée en X est affectée à la base de "l'arc-en-ciel".
  • La coordonnée en Y est la ligne d'écran où commencera l'effet.
  • Le numéro d'image change la hauteur de l'arc-en-ciel.
Et hop, ajoutons encore un canal à notre exemple :

Set Rainbow 0,0,64,"(1,1,15)(1,-1,15)","",""
Rainbow 0,56,1,255

Et apparaissent les couleurs !

Channel 5 To Rainbow 0
Amal 5,"L: For R0=0 To 63; Let X=R0; Next R0; Jump L"
Amal On

Et les couleurs défilent. Remarquez au passage que l'on peut faire des boucles For/Next en AMAL. Nous les détaillerons plus tard.

Nous avons terminé l'exploration des instructions CHANNEL. Il ne reste plus qu'une chose à voir avant de terminer, une variante de l'instruction AMAL qui ouvre de nouvelles perspectives :

AMAL canal,"Chaîne" TO adresse

En spécifiant une adresse mémoire après la chaîne de caractères, on indique à AMAL un endroit où stocker les coordonnées. Cette adresse doit être paire, et dans un espace mémoire réservé à cet effet. Le mieux est de réserver une petite banque de mémoire :

Réserve As Work 10,16, puis
Amal canal,"Chaine" To Start(10)

Attention : n'utilisez pas une chaîne de caractères comme espace de travail. Les adresses des chaînes sont souvent déplacées en mémoire : l'adresse fournie à l'instruction AMAL peut être changée au moment même où le canal d'animation stocke les coordonnées. Le plantage total de la machine serait alors fort probable !

Vous pouvez ensuite récupérer les coordonnées du canal l'animation avec DEEK. Dans notre exemple :

Start(10):	Drapeau:	Bit 0 indique que X est modifié
				Bit 1 indique que Y est modifié
				Bit 2 indique que l'image est modifiée
Start(10)+2:	X
Start(10)+4:	Y
Start(10)+6:	Image

Je pense que vous avez assez admiré les exemples que nous avons tapés jusqu'à maintenant. Appuyez sur "Esc" pour revenir sous l'éditeur et entrez le programme suivant :

AMOS

Quelques remarques :
  • Le programme précédent est bien entendu complètement nul. Le résultat est totalement désastreux (c'est un émulateur ZX81 pour ceux qui ont connu !), mais c'est un excellent exemple de récupération des coordonnées produites par un canal d'animation.
  • Il faut absolument arrêter le canal à la fin du programme : les banques de mémoire sont effacées avant les canaux d'animation. Avec un peu de malchance, les coordonnées seront stockées en mémoire entre l'effacement de la banque et l'arrêt du canal, d'où plantage possible. Cela vient justement de m'arriver. Hum...
Voilà, c'est tout pour aujourd'hui. Le mois prochain nous verrons en détail les principales instructions d'AMAL. Vous pouvez en attendant explorer les exemples se trouvant sur la disquette Langage de l'AMOS et concernant AMAL:dossier Manual/Chapter_14/. D'ici là, bon AMOS et bon AMAL !


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