home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / !BONUS / GAMES / TETR141.ZIP / HELP / TETRHELP.FRA < prev   
Text File  |  1996-01-29  |  87KB  |  1,549 lines

  1.                      TETRHEX, version 1.40 (24/01/1996)                     
  2.                      ¯¯¯¯¯¯¯ 
  3.  
  4. Ce texte contient toute la documentation de TETRHEX.  Il peut être obtenu de
  5. 3 manières différentes:  en allant lire directement le fichier TETRHELP.FRA,
  6. en choisissant l'item "Aide sur TETRHEX" (touche Help)  dans TETRHEX,  ou en
  7. tapant  "tetrhex -h"  dans un shell.  Au cas où il s'agirait  de la deuxième
  8. manière,  voici les touches utilisées:  flèches haut et bas (1 ligne),  avec
  9. Ctrl (4 lignes),  avec Shift (1 page),  avec Ctrl-Shift (4 pages),  Clr-Home
  10. (début du document), Shift-Clr-Home (fin du document), Esc (sortir).
  11.  
  12.   TETRHEX  est un jeu  SHAREWARE.  Si vous voulez avoir  la version complète
  13. (sans limitation),  vous devez vous faire enregistrer en m'envoyant 50 FF ou
  14. 20 DM (ou plus si vous voulez) à l'adresse suivante:
  15.  
  16.       Vincent Lefèvre
  17.       24 rue Louis Blanc
  18.       31400 Toulouse
  19.       FRANCE
  20.  
  21.   N'oubliez pas de me donner votre nom et votre adresse!
  22.  
  23.   Si vous avez accès à Internet,  il est préférable  de me contacter d'abord
  24. par e-mail:
  25.  
  26.       vlefevre@ens.ens-lyon.fr
  27.  
  28.   La dernière version non enregistrée est disponible à:
  29.  
  30.       http://www.ens-lyon.fr/~vlefevre/tetrhex/index_fra.html
  31.  
  32.  
  33. Table des matières
  34. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  35.     0. Disclaimer standard
  36.  
  37.     1. Introduction
  38.  
  39.     2. Configuration requise
  40.  
  41.     3. Compatibilité
  42.         3.1. Disquette ou disque dur amovible
  43.         3.2. Carte Screen Blaster
  44.         3.3. Blow-Up
  45.         3.4. Let 'em Fly
  46.         3.5. Winx (version 2.2)
  47.         3.6. NVDI (versions 2.5 et 3)
  48.         3.7. SpeedoGDOS (version 4.xx)
  49.         3.8. Outside (mémoire virtuelle)
  50.         3.9. LED Panel
  51.         3.10. Idle (protecteur d'écran)
  52.         3.11. Système autre que le TOS
  53.  
  54.     4. Lancement et configuration
  55.  
  56.     5. Jeu TETRHEX
  57.         5.1. Menu principal
  58.         5.2. Aide
  59.         5.3. Nom du joueur
  60.         5.4. Jeu
  61.         5.5. Affichage des meilleurs scores
  62.  
  63.     6. Fichiers de règle
  64.         6.1. Données utilisées lors du jeu
  65.         6.2. Actions
  66.         6.3. Signaux
  67.         6.4. Phases du jeu
  68.         6.5. Variables spéciales
  69.         6.6. Code des couleurs
  70.         6.7. Modes pause
  71.         6.8. Structure d'un fichier de règle
  72.         6.9. Langage RUL
  73.  
  74.     7. Messages
  75.  
  76.     8. Notes techniques
  77.         8.1. Flags du programme
  78.         8.2. Codes d'erreur
  79.         8.3. Déplacement de la fenêtre
  80.         8.4. Modification de la palette
  81.  
  82.     9. Limitations de la version non enregistrée
  83.  
  84.  
  85.     0. Disclaimer standard
  86.        ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  87.   Je ne suis pas  responsable  d'éventuels dommages  causés par ce logiciel.
  88. Son utilisation est entièrement à vos risques.
  89.  
  90.  
  91.     1. Introduction
  92.        ¯¯¯¯¯¯¯¯¯¯¯¯ 
  93.   TETRHEX  est  un jeu,  ou plutôt  un ensemble de jeux,  de type  Tetris ou
  94. Columns se jouant sur un tableau hexagonal, avec des cases hexagonales.  Ses
  95. principales caractéristiques sont:
  96.  
  97.   _ Possibilité  de modifier  les règles existantes  et  de définir  ses    
  98.     propres règles  dans un langage spécifique à TETRHEX.  3 règles sont    
  99.     fournies avec TETRHEX: Tetrhex, Hexcolumns et Tet'light.
  100.  
  101.   _ Pièces spéciales, qui augmentent l'intérêt du jeu.
  102.  
  103.   _ TETRHEX utilise les fonctions du GEM, sauf pour certains affichages.    
  104.     Il  est  donc  compatible  avec  de nombreux programmes système  (se    
  105.     trouvant  dans  le dossier AUTO):  NVDI,  SpeedoGDOS,  carte  Screen    
  106.     Blaster, Outside, MiNT/MultiTOS, ...
  107.  
  108.   _ TETRHEX  peut  afficher  des fontes vectorielles  si  SpeedoGDOS  ou    
  109.     NVDI 3 est présent. On peut choisir ses fontes.  TETRHEX sélectionne    
  110.     automatiquement la hauteur de fonte la plus adaptée,  en fonction de    
  111.     la fonte et du texte à afficher.
  112.  
  113.   _ Nombreuses options; configuration sur 2 niveaux sous forme d'options    
  114.     style Unix: permanente (sauvegarde dans un fichier) et au lancement.
  115.  
  116.   _ Possibilité  de jouer  en mode plein écran  ou  dans une fenêtre GEM    
  117.     (l'AES 4.1 est supporté: la fenêtre peut être iconifiée).
  118.  
  119.   _ Possibilité de mettre TETRHEX en accessoire.
  120.  
  121.   _ Liste de langues à utiliser par ordre de préférence, utile notamment    
  122.     à cause de l'aide située dans les fichiers de règle.  Par défaut, la    
  123.     langue du système est utilisée de préférence.
  124.  
  125.   _ Tableau hexagonal de taille variable (4 tailles différentes).
  126.  
  127.   _ TETRHEX  peut sauvegarder  jusqu'à 255 scores  pour  chaque règle et    
  128.     chaque taille du tableau hexagonal.
  129.  
  130.   _ Possibilité de donner à TETRHEX  des routines relogeables permettant    
  131.     de communiquer avec l'extérieur.  Applications possibles  (certaines    
  132.     routines n'existent pas encore):  possibilité de jouer au Joypad (au    
  133.     lieu du clavier) ou peut-être même par la voix (grâce au DSP), faire    
  134.     jouer  des modules .MOD  en arrière-plan  à certains moments donnés,    
  135.     afficher des images de fond, faire jouer l'ordinateur, débuggeurs de
  136.     fichiers de règle, ...
  137.  
  138.  
  139.     2. Configuration requise
  140.        ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  141.   TETRHEX  a été écrit  pour Falcon,  mais devrait pouvoir  tourner sur tout
  142. Atari (ou autre machine à base de TOS) muni d'un 680x0 avec x ≥ 2,  ayant un
  143. mode graphique  256 couleurs  ≥ 640 * 480  compatible Falcon  (i.e. dont les
  144. plans sont entrelacés),  éventuellement  avec  un système d'exploitation  de
  145. remplacement comptatible TOS/GEM.
  146.  
  147.   Sur Falcon, TETRHEX peut tourner avec n'importe quel type d'écran couleur.
  148. Cependant un moniteur VGA est conseillé;  car sur RGB,  TETRHEX doit tourner
  149. en mode entrelacé.
  150.  
  151.   TETRHEX a besoin d'environ 300 Ko de mémoire libre (ST RAM ou TT RAM) pour
  152. tourner. Un des deux timers A et D est utilisé (cf section "Lancement"); par
  153. défaut, c'est le timer D qui est choisi.
  154.  
  155.  
  156.     3. Compatibilité
  157.        ¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  158.   Contrairement  à la plupart des jeux,  TETRHEX est généralement compatible
  159. avec les programmes situés dans le dossier AUTO. Cependant il peut parfois y
  160. avoir  quelques problèmes.  Il en est de même  du point de vue hardware.  La
  161. liste des programmes/matériels testés et des problèmes rencontrés est donnée
  162. ci-dessous.
  163.  
  164.   En mode plein écran, si vous n'êtes pas dans une bonne résolution, TETRHEX
  165. essaie automatiquement  de changer de résolution.  Le principal problème est
  166. que  certains programmes  du dossier AUTO  ne le permettent pas.  Soit  vous
  167. devez désactiver ces programmes,  soit vous devez vous mettre dans une bonne
  168. résolution  avant de lancer TETRHEX.  Note:  l'ordre des programmes  dans le
  169. dossier AUTO  est très important;  il est possible que certaines indications
  170. données ci-dessous soient plus ou moins correctes, suivant tel ou tel ordre.
  171.  
  172.         3.1. Disquette ou disque dur amovible
  173.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  174.   Si  le fichier de règle  a été chargé  à partir  d'une disquette  ou  d'un
  175. disque dur amovible (SyQuest),  il ne faut pas changer de disque si la liste
  176. des scores peut être modifiée  (ce qui est généralement le cas),  surtout si
  177. le nouveau disque contient un fichier de même nom et de même chemin.
  178.  
  179.         3.2. Carte Screen Blaster
  180.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  181.   Il n'y a jamais de tentative de changement de résolution, sinon ça plante.
  182. Pour savoir si la carte Screen Blaster est présente,  on recherche le cookie
  183. OSBL.  Note:  ce cookie ne peut être enlevé  qu'après un redémarrage complet
  184. (ctrl-alt-Rshift-delete);  par conséquent,  il se peut  que le changement de
  185. résolution soit refusé  bien que la carte soit totalement désactivée  (après
  186. un redémarrage partiel).
  187.   Comme avec les autres logiciels / cartes augmentant la résolution, en mode
  188. plein écran,  seule la partie de l'écran  faisant 640 * 480  et centrée  est
  189. utilisée.
  190.  
  191.         3.3. Blow-Up
  192.              ¯¯¯¯¯¯¯ 
  193.   En mode plein écran,  TETRHEX plante  quand la résolution verticale  n'est
  194. pas un multiple de 16. Je ne sais pas pourquoi.
  195.  
  196.         3.4. Let 'em Fly
  197.              ¯¯¯¯¯¯¯¯¯¯¯ 
  198.   Si l'option "Send Redraw" est active, il y a un problème d'affichage après
  199. appel  du sélecteur de fichiers:  en mode fenêtre GEM,  un message de redraw
  200. est envoyé (cela fait juste perdre un peu de temps); en mode plein écran, la
  201. partie située sous le sélecteur de fichiers est effacée (c'est beaucoup plus
  202. gênant). Il est donc recommandé de désactiver l'option "Send Redraw" si vous
  203. avez besoin de charger différents fichiers de règle, surtout si vous êtes en
  204. mode plein écran.
  205.  
  206.         3.5. Winx (version 2.2)
  207.              ¯¯¯¯ 
  208.   Il n'y a aucun problème. En mode fenêtre GEM, il est possible de mettre la
  209. fenêtre en arrière-plan en cliquant sur la barre de titre.
  210.  
  211.         3.6. NVDI (versions 2.5 et 3)
  212.              ¯¯¯¯ 
  213.   Le changement de résolution est impossible, mais il n'y a généralement pas
  214. de plantage (il y a plantage si LED Panel est présent).
  215.   Il est recommandé  d'activer  l'option  "TOS compatibility"  si  vous avez
  216. besoin de charger différents fichiers de règle. Sinon, on a le même problème
  217. qu'avec Let 'em Fly avec option "Send Redraw" active (cf ci-dessus).
  218.   Avec la version 3 de NVDI,  vous pouvez utiliser  des fontes vectorielles.
  219. Mais ne les utilisez pas dans l'aide: ça bugge complètement.
  220.  
  221.         3.7. SpeedoGDOS (version 4.xx)
  222.              ¯¯¯¯¯¯¯¯¯¯ 
  223.   Si  SpeedoGDOS  est  installé  (ce qui est recommandé,  sauf  si vous avez
  224. NVDI 3 d'installé), vous pouvez utiliser des fontes vectorielles.
  225.   Le changement de résolution est impossible, mais il n'y a pas de plantage.
  226.   Si  au moins une chaîne écrite avec une fonte vectorielle  a été soulignée
  227. (dans l'aide),  les rectangles pleins  ne  sont  plus  affichés:  vous devez
  228. quitter. Ceci semble provenir d'un bug de SpeedoGDOS.
  229.  
  230.         3.8. Outside (mémoire virtuelle)
  231.              ¯¯¯¯¯¯¯ 
  232.   Il n'y a  aucun problème.  Les drapeaux concernant la TT-RAM  peuvent être
  233. mis à 1.
  234.  
  235.         3.9. LED Panel
  236.              ¯¯¯¯¯¯¯¯¯ 
  237.   Pour éviter  des conflits d'affichage,  on a la possibilité  de désactiver
  238. LED Panel lorsqu'on est en mode plein écran.  LED Panel est réactivé lorsque
  239. TETRHEX se termine.
  240.  
  241.         3.10. Idle (protecteur d'écran)
  242.               ¯¯¯¯ 
  243.   Lorsque  la protection  s'active,  des blocs  de mémoire  de TETRHEX  sont
  244. parfois altérés (tests effectués avec la version 2.2 d'Idle).
  245.  
  246.         3.11. Système autre que le TOS
  247.               ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  248.   Il ne faut pas  utiliser  la protection mémoire  si  la mémoire vidéo  est
  249. protégée contre la lecture/écriture.
  250.   Il ne faut pas modifier un fichier de règle chargé par TETRHEX si la liste
  251. des meilleurs scores  peut être modifiée,  car  TETRHEX ne s'en rendrait pas
  252. compte et la structure du fichier pourrait devenir mauvaise.
  253.  
  254.  
  255.     4. Lancement et configuration
  256.        ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  257.   TETRHEX peut être lancé  soit en double-cliquant sur son icone à partir du
  258. bureau, soit dans un shell (par exemple dans celui de Gemini). Dans les deux
  259. cas, on peut lui donner des options style Unix. On forme une chaîne composée
  260. du fichier de configuration TETRHEX.CFG (s'il existe),  suivi des options de
  261. la ligne de commandes  (s'il y en a);  un exemple sera donné  après la liste
  262. des options. Note: pour pouvoir entrer des options après avoir double-cliqué
  263. sur  l'icone,  il faut  remplacer  l'extension  .PRG  par  l'extension  .GTP
  264. (équivalent de .TTP  pour un programme GEM).  Les options commencent  par le
  265. caractère '-'  et  sont séparées  par des blancs  (espace  et  caractères de
  266. contrôle, i.e. caractères de code ASCII ≤ 32). La ligne de commandes ne doit
  267. pas contenir  plus de 125 caractères;  si les options  sont trop nombreuses,
  268. stockez-les  dans un fichier  et utilisez  l'option -o.  Si la syntaxe de la
  269. chaîne entière  est incorrecte,  le programme  se termine immédiatement  (et
  270. renvoie un code d'erreur non nul). Voici les options:
  271.  
  272.   -b <Ir> <Iv> <Ib> <Dr> <Dv> <Db>
  273.     Couleur du tableau hexagonal.  Cette option est suivie de 6 nombres,    
  274.     tous  compris  entre  0 et 255.  Les  3 premiers  nombres  sont  les    
  275.     intensités  des composantes  rouge, verte et bleue  du cadre.  Les 3    
  276.     nombres suivants sont les valeurs à enlever à chacune des intensités    
  277.     pour passer  à la partie du cadre  située un cran plus loin  vers le    
  278.     fond.  Le triple de chacune de ces valeurs  doit être ≤  à la valeur    
  279.     correspondante  de la partie  située au premier plan,  car il y a  3    
  280.     autres plans.  Les 6 nombres par défaut sont  240, 240, 240, 48, 48,    
  281.     48.  Si les conditions  ne sont pas respectées,  l'option  n'est pas    
  282.     prise en compte.
  283.   -cd <R> <V> <B>
  284.     [Color Date]  Couleur  de la date.  Cette option  est  suivie  de  3    
  285.     nombres  compris  entre 0 et 255:  intensité  des composantes rouge,    
  286.     verte et bleue.  Si  un nombre  n'est pas  compris  entre  0 et 255,    
  287.     l'intensité de la composante correspondante est inchangée.  Si après    
  288.     toutes les occurrences de "-cd" les 3 intensités sont nulles,  alors    
  289.     les 3 intensités sont mises à 255 (blanc).
  290.   -ch <R> <V> <B>
  291.     [Color Help] Couleur du texte d'aide. Cf option "-cd".
  292.   -ci <nombre>
  293.     [Color Icon] Index de la couleur de l'icone (à partir de l'AES 4.1),    
  294.     entre 0 et 15.
  295.   -cp <nombre>
  296.     [Color Pause] Index de la couleur de "-- PAUSE --" (mode pause de la    
  297.     fenêtre), entre 0 et 15.
  298.   -ct <R> <V> <B>
  299.     [Color Time] Couleur de l'heure. Cf option "-cd".
  300.   -da
  301.     [Display All] Affichage de la date et l'heure (comme "-dy -ds").
  302.   -dd
  303.     [Display Date] Affichage de la date sans l'année.
  304.   -dn
  305.     [Display Nothing] Ni la date, ni l'heure n'est affichée.
  306.   -ds
  307.     [Display Seconds] Affichage de l'heure avec les secondes.
  308.   -dt
  309.     [Display Time] Affichage de l'heure sans les secondes.
  310.   -dy
  311.     [Display Year] Affichage de la date avec l'année.
  312.   -e[+/-]
  313.     [Error display]  Des messages d'erreur  peuvent être envoyés  sur la    
  314.     sortie standard.  Il est conseillé  de n'utiliser  cette option  que    
  315.     dans les cas suivants:  vous êtes  sous MultiTOS  et  vous avez  une    
  316.     console,  et/ou  TETRHEX  ne marche pas  comme  vous voulez  et vous    
  317.     aimeriez savoir pourquoi.
  318.   -f+ <nombre>
  319.     Nombre qu'il faut ajouter  aux numéros des fontes vectorielles  pour    
  320.     obtenir l'index (utilisé par la VDI). Valeur par défaut: 0.  Suivant    
  321.     la version de SpeedoGDOS,  c'est habituellement 0 ou 5000.  Dans les    
  322.     options suivantes  "-f? <nombre>",  il faut faire précéder le nombre    
  323.     d'un '+' pour indiquer que la fonte est vectorielle.
  324.   -fe <nombre>
  325.     [Font mEnu] Numéro de la fonte utilisée pour afficher "Menu".
  326.   -fg <nombre>
  327.     [Font Game] Numéro de la fonte utilisée dans le jeu lui-même.
  328.   -fh <nombre>
  329.     [Font Help] Numéro de la fonte utilisée pour afficher l'aide.
  330.   -fm <nombre>
  331.     [Font Menu] Numéro de la fonte utilisée dans les menus.
  332.   -fn <nombre>
  333.     [Font Name] Numéro de la fonte utilisée pour le nom de la règle.
  334.   -fo <nombre>
  335.     [Font game Over] Numéro de la fonte utilisée pour "game over".
  336.   -fp <nombre>
  337.     [Font Pause] Numéro de la fonte utilisée pour "-- PAUSE --".
  338.   -fr <nombre>
  339.     [Font Register]  Numéro de la fonte utilisée  pour afficher le texte    
  340.     sous "Shareware".
  341.   -fs <nombre>
  342.     [Font Score] Numéro de la fonte utilisée pour les meilleurs scores.
  343.   -ft <nombre>
  344.     [Font Tetrhex] Numéro de la fonte utilisée pour "TETRHEX x.xx".
  345.   -fw <nombre>
  346.     [Font shareWare] Numéro de la fonte utilisée pour "Shareware".
  347.   -gdos
  348.     Fait comme si SpeedoGDOS était présent  (utile si le flag GDOS n'est    
  349.     pas correct).
  350.   -h ou -help
  351.     Aide: le fichier d'aide est envoyé sur la sortie standard.
  352.   -i off
  353.     Coupe le haut-parleur interne. L'état antérieur ne sera pas récupéré    
  354.     à la fin du programme.
  355.   -i on
  356.     Branche  le haut-parleur  interne.  L'état  antérieur  ne  sera  pas    
  357.     récupéré à la fin du programme.
  358.   -l <param>
  359.     Préférences des langages.  Il y a autant de paramètres que l'on veut    
  360.     (éventuellement aucun).  Chaque paramètre est soit un nombre positif    
  361.     ou nul,  indiquant  le langage  de manière absolue  (cf ci-dessous),    
  362.     soit le caractère '?', indiquant le langage donné par le cookie _AKP    
  363.     (langage utilisé par le système),  soit le caractère '*',  indiquant    
  364.     un ou plusieurs langages se rapprochant de celui du système  (il n'y    
  365.     a  que 3 groupes de langages:  {0,3}, {1,8} et {2,7}).  La chaîne de    
  366.     paramètres par défaut est "* 0 3".
  367.     Codes des pays:  0: Etats-Unis, 1: Allemagne, 2: France, 3: Royaume-    
  368.     Uni, 4: Espagne, 5: Italie, 6: Suède, 7: Suisse française, 8: Suisse    
  369.     allemande,  9: Turquie, 10: Finlande, 11: Norvège, 12: Danemark, 13:    
  370.     Arabie Saoudite, 14: Pays-Bas, 15: Tchécoslovaquie, 16: Hongrie.
  371.   -ma
  372.     [Memory Allocate]  La zone mémoire contenant l'image de fond ne sera    
  373.     jamais libérée (sauf lorsque le programme se termine), ainsi l'image    
  374.     de fond ne sera jamais recalculée.
  375.   -mf
  376.     [Memory Free]  La  zone  mémoire  contenant  l'image  de  fond  sera    
  377.     toujours libérée après l'affichage, et l'image de fond sera toujours    
  378.     recalculée quand elle devra être réaffichée.
  379.   -n <nombre>
  380.     Taille d'un côté du tableau hexagonal (entre 6 et 9).
  381.   -o <fichier>
  382.     [Options]  La liste  des  options restantes  est  remplacée  par  le    
  383.     fichier, ce qui permet d'avoir plusieurs fichiers de configuration.
  384.   -p <chaîne>
  385.     [Player]  La chaîne contient le nom du joueur,  mis entre guillemets    
  386.     ou apostrophes. Si la chaîne est vide (valeur par défaut), le joueur    
  387.     devra entrer son nom  si son score est assez élevé  pour entrer dans    
  388.     la liste des meilleurs scores.
  389.   -r <fichier>
  390.     [Rule]  Détermine le fichier de règle (extension .RUL) à charger par    
  391.     défaut.
  392.   -s <fichier>
  393.     Fichier de messages (extension .MSG), permettant de communiquer avec    
  394.     d'autres programmes (cf section "Messages").
  395.   -ta
  396.     [Timer A]  C'est le timer A  qui  sera  utilisé  (indépendemment  de    
  397.     l'état de la touche Shift-gauche).
  398.   -td
  399.     [Timer D]  C'est le timer D  qui  sera  utilisé  (indépendemment  de    
  400.     l'état de la touche Shift-gauche).
  401.   -u[+/-]
  402.     Laisse la liste des meilleurs scores inchangée.
  403.   -vhc <n0> <n1> <n2> <n3> <n4> <n5> <n6> <n7>
  404.     [Video Hex Color]  Intensités  des  8 niveaux  pour  l'affichage des    
  405.     hexagones.  Le premier nombre correspond au niveau le plus foncé, et    
  406.     le dernier correspond au niveau le plus clair.  Par exemple, pour un    
  407.     hexagone jaune,  les intensités en rouge et en vert auront la valeur    
  408.     donnée par l'option, et l'intensité en bleu sera nulle.  Les valeurs    
  409.     par défaut sont: $30, $60, $78, $90, $A8, $C8, $D8, $F8.
  410.   -vhw <n0> <n1> <n2> <n3> <n4> <n5> <n6> <n7>
  411.     [Video Hex White]  Intensités en blanc supplémentaires.  L'intensité    
  412.     indiquée  est ajoutée  à chacune  des 3 composantes  rouge, verte et    
  413.     bleue.  Si, pour une ou plusieurs composantes, la somme est > à 255,    
  414.     alors elle est ramenée à 255. Les valeurs par défaut sont: $00, $00,    
  415.     $00, $00, $10, $20, $50, $80.
  416.   -vl[+/-]
  417.     [Video LED Panel]  Désactive LED Panel en mode plein écran  (ne fait    
  418.     rien en mode fenêtre GEM). LED Panel sera remis à son état initial à    
  419.     la fin du programme.
  420.   -vr[+/-]
  421.     [Video Resolution] Interdit le changement de résolution; si celle-ci    
  422.     est incorrecte, une erreur est renvoyée.
  423.   -vs[+/-]
  424.     [Video Synchro] Effectue une synchronisation avec l'interruption VBL    
  425.     pour  certains affichages,  notamment  pour  l'affichage  des fontes    
  426.     vectorielles;  dans ce dernier cas,  cette option n'est utile que si    
  427.     l'affichage  est assez rapide.  C'est le cas de NVDI 3,  mais pas de    
  428.     SpeedoGDOS 4.
  429.   -wp <x0> <y0>
  430.     [Window Position]  Position  du point supérieur gauche de la fenêtre    
  431.     (en mode fenêtre GEM).  Si cette position est incorrecte, la fenêtre    
  432.     est placée à la position par défaut.
  433.   -wpc
  434.     [Window Position: Centered] Centre la fenêtre (en mode fenêtre GEM).
  435.   -ws
  436.     [Window Screen]  Mode plein écran. C'est l'option par défaut lorsque    
  437.     le cookie MiNT  n'est pas présent.  Il faut éviter  d'utiliser cette    
  438.     option lorsque l'on travaille en multitâches.
  439.   -wu[+/-]
  440.     [Window Update] En mode plein écran, le sémaphore d'écran est activé    
  441.     en permanence.  Ainsi les processus  tournant en arrière plan  (i.e.    
  442.     généralement les accessoires) ne peuvent plus rien afficher.
  443.   -ww
  444.     [Window Window]  Mode fenêtre GEM. C'est l'option par défaut lorsque    
  445.     le cookie MiNT est présent.
  446.  
  447.   Les nombres sont en décimal, sauf s'ils sont précédés d'un '$', auquel cas
  448. ils  sont  en  hexadécimal.  Pour  les options  "-u", "-vl", "-vr", "-vs" et
  449. "-wu", un '-' situé après signifie que l'option doit être désactivée; le '+'
  450. (facultatif)  signifie  qu'elle doit être  activée.  Au lieu  de donner  des
  451. options  dans  la ligne  de  commandes,  on  peut faire  glisser  un fichier
  452. d'options,  un fichier de règle  ou  un fichier de messages  sur l'icone  de
  453. TETRHEX. Cette opération correspond respectivement aux options "-o", "-r" et
  454. "-s". Certaines options ont des effets opposés (ta/td, -vr+/-vr-, -vs+/-vs-,
  455. ...); seule la dernière dans la chaîne d'options est prise en compte.
  456.  
  457.   Par exemple, si le fichier TETRHEX.CFG contient la chaîne "-ww -wpc -n 6",
  458. et les paramètres sont "-ws -vs",  alors  le jeu se déroulera  en mode plein
  459. écran,  avec la synchronisation vidéo et un tableau hexagonal de 6 hexagones
  460. de côté.
  461.  
  462.   Au moment du lancement,  si la touche Shift-gauche est enfoncée,  c'est le
  463. timer A qui sera utilisé  (sauf si l'option "-td" est donnée)  au lieu  du D
  464. (utile si le port série est utilisé pendant le jeu).
  465.  
  466.   A l'aide d'un player de modules en accessoire  ou/et à l'aide d'un fichier
  467. de messages, on peut faire jouer des modules en arrière-plan;  il faut alors
  468. prendre le timer D pour TETRHEX (timer par défaut). Mais sur Falcon 030 sans
  469. carte accélératrice,  on a des parasites sur l'écran lors des changements de
  470. palette  de couleurs,  i.e.  pendant la présentation  et quand on passe d'un
  471. écran à un autre.
  472.  
  473.   Il est possible de mettre TETRHEX en accessoire. Pour cela, il faut copier
  474. l'exécutable TETRHEX.PRG/GTP  dans la racine de la partition de boot (C:\ en
  475. général)  et le renommer en TETRHEX.ACC;  recopier également les fichiers de
  476. règle,  TETRHEX.CFG et TETRHEX.LNG au même endroit.  Attention!  il subsiste
  477. deux gros problèmes: d'une part un problème de gestion mémoire (l'ordinateur
  478. peut planter,  en particulier,  ne lancez pas ou ne quittez pas un programme
  479. pendant que vous être en train de faire une partie);  d'autre part,  TETRHEX
  480. utilise  un chemin courant  pour les fichiers de règle,  mais  sous TOS,  le
  481. chemin courant  n'est pas local  à l'application,  si bien que la sauvegarde
  482. d'un score  peut provoquer  une erreur.  Pour l'instant,  lorsqu'il y a  une
  483. erreur, vous ne pouvez plus utiliser l'accessoire TETRHEX. Cette possibilité
  484. de faire tourner TETRHEX en accessoire est nouvelle et pourra être améliorée
  485. par la suite.
  486.  
  487.   N.B.: le fichier de règle TETRHEX.RUL doit se trouver dans le même dossier
  488. que l'application TETRHEX.PRG/GTP/ACC.
  489.  
  490.  
  491.     5. Jeu TETRHEX
  492.        ¯¯¯¯¯¯¯¯¯¯¯ 
  493.   Après avoir lancé TETRHEX,  une fenêtre s'affiche immédiatement  si le jeu
  494. doit se dérouler dans une fenêtre GEM.  En mode plein écran,  TETRHEX essaie
  495. d'abord  de changer de résolution  si besoin est,  sauf si l'option -vr  est
  496. activée,  mais peut échouer  à cause de certains programmes  du dossier AUTO
  497. (cf  "Compatibilité");  ensuite  une courte présentation  commence,  pendant
  498. laquelle l'image de fond est calculée; appuyer sur une touche pour passer au
  499. menu principal.
  500.  
  501.   A tout moment,  on peut libérer  la mémoire  prise par l'image de fond  en
  502. appuyant sur Ctrl-F,  ou bien, si le jeu se déroule dans une fenêtre GEM, en
  503. cliquant n'importe où avec le bouton droit de la souris.
  504.  
  505.   En mode fenêtre GEM,  on peut quitter à tout moment  en fermant la fenêtre
  506. (clic sur le closer). A partir de l'AES 4.1, on peut iconifier la fenêtre en
  507. cliquant  sur l'iconifier,  ou faire passer  la fenêtre  en arrière-plan  en
  508. cliquant sur la barre de titre.  On peut  aussi  déplacer  la fenêtre,  mais
  509. celle-ci ne pourra pas sortir de l'écran, même partiellement.  Note: pendant
  510. le jeu,  le déplacement n'est effectué  qu'entre deux pièces.  Si la fenêtre
  511. passe en arrière-plan,  son contenu  est effacé,  et la chaîne "-- PAUSE --"
  512. est affichée au centre:  on dit que la fenêtre  est en mode pause  (il y a 2
  513. sortes de mode pause:  le mode pause de la fenêtre  et le mode pause du jeu;
  514. cf sous-section "Jeu").
  515.  
  516.         5.1. Menu principal
  517.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  518.   Chaque item du menu principal  peut être choisi  soit  en appuyant  sur la
  519. touche correspondante,  soit en cliquant l'item  (possible seulement en mode
  520. fenêtre GEM). La liste des items est donnée ci-dessous.  En plus du menu, le
  521. nom du fichier de règle est affiché,  ainsi que le nom du joueur s'il y en a
  522. un.
  523.  
  524.   _ Item "aide sur TETRHEX"  (touche Help):  ce fichier est affiché.  Si    
  525.     rien ne s'affiche, il faut modifier le fichier TETRHEX.LNG:  ajouter    
  526.     (ou modifier)  la ligne HELP  correspondant  à  la bonne  langue;  à    
  527.     droite de "HELP:",  écrire  le nom  de ce fichier  (chemin relatif à    
  528.     l'exécutable + nom du fichier).
  529.   _ Item "aide sur la règle" (touche Shift-Help): aide sur le fichier de    
  530.     règle chargé.  Si rien ne s'affiche,  cela signifie  qu'il n'y a pas    
  531.     d'aide.
  532.   _ Item "charger une règle"  (touche Undo):  un sélecteur  de  fichiers    
  533.     s'affiche pour permettre de choisir le nouveau fichier de règle. Cet    
  534.     item ne peut être sélectionné que s'il n'y a pas eu de changement de    
  535.     résolution.
  536.   _ Item "nom du joueur" (touche N):  cet item permet au joueur d'entrer    
  537.     son nom  (cf sous-section "Nom du joueur").  Il n'est affiché que si    
  538.     l'option -u est désactivée.
  539.   _ Item "jouer" (touche Return): cf sous-section "Jeu".
  540.   _ Item "meilleurs scores" (touches F1 à F20):  affichage des meilleurs    
  541.     scores. Un clic sur cet item équivant à l'appui sur la touche F1. Cf    
  542.     sous-section "Affichage des meilleurs scores".
  543.   _ Item "arrière-plan"  (touche Ctrl-Tab):  met la fenêtre  en arrière-    
  544.     plan,  ce qui  équivaut  à cliquer  sur la barre de titre.  Cet item    
  545.     n'est affiché qu'en mode fenêtre GEM.
  546.   _ Item "quitter" (touche Ctrl-Q):  cet item permet de quitter TETRHEX.    
  547.     Il équivaut à un clic sur le closer.
  548.  
  549.   Le fait d'appuyer  sur Ctrl et une des 4 touches du haut du pavé numérique
  550. ("(", ")", "/" et "*") permet de changer la taille du tableau hexagonal:  la
  551. k-ième touche correspond à un côté ayant k+5 hexagones.
  552.  
  553.         5.2. Aide
  554.              ¯¯¯¯ 
  555.   Qu'il s'agisse de l'aide générale  ou de l'aide sur la règle,  les touches
  556. utilisées  sont:  flèches vers le haut et vers le bas  pour faire défiler le
  557. texte d'une ligne; avec la touche Shift (gauche ou droite), le défilement se
  558. fait page par page. Si on appuie sur la touche Ctrl, on multiplie par 4.  La
  559. touche Clr-Home  permet de se positionner au début du texte;  Shift-Clr-Home
  560. permet de se positionner à la fin.  Pour sortir de l'aide et revenir au menu
  561. principal, appuyer sur Esc.
  562.  
  563.         5.3. Nom du joueur
  564.              ¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  565.   Le nom du joueur  est utilisé  lors de la sauvegarde  des scores.  Il peut
  566. être entré de 3 manières différentes: en tant qu'option lors du lancement de
  567. TETRHEX,  à partir du menu principal,  ou à la fin d'une partie  si le score
  568. doit  être  sauvegardé.  S'il  n'y a  qu'un seul joueur,  les deux premières
  569. manières  sont  les plus pratiques.  S'il y a  plusieurs joueurs,  c'est  la
  570. troisième manière  qui est la plus pratique.  On ne considèrera ici  que les
  571. deux dernières manières.
  572.  
  573.   Un rectangle s'affiche  en haut à gauche,  pour que vouz puissiez y entrer
  574. votre nom. Vous ne pouvez entrer que des caractères affichables. Vous pouvez
  575. effacer le dernier caractère  à l'aide de la touche Backspace.  Pour effacer
  576. tous les caractères,  appuyer  sur Esc.  Avec la flèche droite,  vous pouvez
  577. récupérer le dernier caractère effacé (ou éventuellement un ancien caractère
  578. qui  avait  la même position).  Avec  la flèche  vers le haut,  vous  pouvez
  579. récupérer tous les caractères effacés.  Pour valider,  appuyer sur Return ou
  580. Enter. Vous pouvez mettre fin à l'entrée et renvoyer un nom vide en appuyant
  581. sur Ctrl-C.
  582.  
  583.   Une fois  l'entrée  validée  (par Return  ou Enter)  ou  interrompue  (par
  584. Ctrl-C),  le mini-buffer  utilisé pour la récupération des caractères  n'est
  585. pas effacé,  excepté le premier caractère,  si bien qu'on peut récupérer  le
  586. dernier  nom entré  à la  prochaine  demande  (après avoir entré  le premier
  587. caractère).
  588.  
  589.   Si le nom  est entré  à partir  du menu principal  et si  un nom vide  est
  590. renvoyé,  alors  il  n'y aura pas  de nom de joueur:  si un score  doit être
  591. sauvegardé, le joueur devra entrer son nom à la fin de la partie.
  592.  
  593.   Si le nom est entré en fin de partie,  il est impossible de valider un nom
  594. vide (par Return ou Enter). En revanche, le joueur peut interrompre l'entrée
  595. à l'aide de Ctrl-C, et le score ne sera pas sauvegardé.
  596.  
  597.         5.4. Jeu
  598.              ¯¯¯ 
  599.   Les règles dépendent du fichier de règle; pour les connaître, il faut lire
  600. l'aide correspondante  (touche Shift-Help à partir du menu principal).  Mais
  601. toutes les règles ont des points communs, qui sont donnés ci-dessous.
  602.  
  603.   Le jeu se déroule dans un tableau hexagonal dont un côté peut contenir 6 à
  604. 9 cases.  Les cases  sont  hexagonales.  Soit une case est vide,  soit  elle
  605. contient un hexagone ayant appartenu à une pièce. Un hexagone peut avoir une
  606. des 6 couleurs suivantes: rouge, vert, bleu, cyan, magenta, jaune.  De plus,
  607. il peut contenir un motif, dont la signification dépend du fichier de règle.
  608. Une pièce peut contenir 1 à 4 hexagones; la forme des pièces, leur fréquence
  609. d'apparition, etc... dépendent du fichier de règle.  Les pièces apparaissent
  610. en haut, au centre.  La vitesse à laquelle elles descendent  est aussi fixée
  611. par  le fichier  de règle.  Lorsqu'une pièce  ne peut plus  descendre,  elle
  612. s'enfonce  dans le tableau,  et  un certain nombre d'hexagones  peuvent être
  613. détruits  (éventuellement en plusieurs étapes).  Quand hexagone est détruit,
  614. ceux  situés au-dessus  descendent d'une case.  Généralement,  la partie  se
  615. termine lorsque la prochaine pièce n'a pas la place d'apparaître.
  616.  
  617.   A droite  du tableau  sont affichés  un certain nombre  de nombres  (8  au
  618. maximum): score, niveau, etc...  Leur définition (texte, nombre de chiffres,
  619. position, etc...) dépend entièrement du fichier de règle.
  620.  
  621.   La pièce suivante peut ou non être affichée (radar):  ceci dépend aussi du
  622. fichier de règle.  La place réservée  à son affichage  se situe  en haut  au
  623. centre.
  624.  
  625.   En mode pause du jeu,  la chaîne  "-- PAUSE --"  est  affichée  en haut  à
  626. gauche.  Si le jeu se déroule dans une fenêtre GEM et si la fenêtre passe en
  627. arrière-plan,  alors on se retrouve en mode pause de la fenêtre.  Lorsque la
  628. fenêtre repasse en premier plan, on se retrouve en mode pause du jeu,  si le
  629. fichier de règle l'accepte  (plus précisément, un signal PAUS est envoyé, cf
  630. section "Fichiers de règle"); cela évite que le jeu reprenne immédiatement.
  631.  
  632.         5.5. Affichage des meilleurs scores
  633.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  634.   Les meilleurs scores  peuvent être affichés  par groupes de 10.  Lorsqu'on
  635. appuie sur Fn (1 ≤ n ≤ 20, F(n+10) = Shift-Fn),  les scores du rang 10n-9 au
  636. rang 10n sont affichés. Pour revenir au menu principal, appuyer sur Esc.
  637.  
  638.   Note 1: les scores dépendent évidemment de la taille du tableau hexagonal.
  639. Pour afficher les scores correspondant à une taille donnée,  il faut d'abord
  640. sélectionner cette taille à partir du menu principal  (cf sous-section "Menu
  641. principal").
  642.  
  643.   Note 2:  bien qu'ils puissent être sauvegardés,  les scores du rang 201 au
  644. rang 255 ne peuvent pas être affichés dans TETRHEX.
  645.  
  646.  
  647.     6. Fichiers de règle
  648.        ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  649.   L'une des plus intéressantes caractéristiques  de TETRHEX  est  de pouvoir
  650. créer ses propres règles (et modifier les règles existantes). TETRHEX permet
  651. donc  d'avoir  un ensemble de jeux variés  et des jeux semblables  ayant des
  652. niveaux de difficulté différents.  Les règles se trouvent  dans des fichiers
  653. séparés (extension .RUL), appelés fichiers de règle. Cette section décrit ce
  654. que contiennent ces fichiers, et leur structure exacte.
  655.  
  656.         6.1. Données utilisées lors du jeu
  657.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  658.   Cette section décrit brièvement les données intervenant dans le jeu,  i.e.
  659. les données  que contient un fichier de règle  et celles utilisées seulement
  660. à l'exécution.  Elle décrit aussi les différentes phases du jeu  (qui seront
  661. reprises  dans les autres sous-sections),  en se plaçant  à un niveau  assez
  662. général.
  663.  
  664.   Un fichier de règle contient dans son en-tête  certaines données relatives
  665. à la règle,  mais  qui n'affectent pas  la façon  dont se déroule  le jeu en
  666. question,  comme le nom de la règle, les fontes utilisées pour la règle, les
  667. couleurs,  le nombre de scores.  Le fichier de règle contient aussi une aide
  668. (éventuellement dans plusieurs langues), et à la fin, la liste des meilleurs
  669. scores pour chaque taille du tableau hexagonal.
  670.  
  671.   Une règle peut être définie  de manière à tourner  pour une taille fixe du
  672. tableau ou bien pour une taille variable de 6 à 9 hexagones de côté. Il vaut
  673. mieux avoir une taille variable, mais on peut avoir besoin d'une taille fixe
  674. si certaines tailles ne conviennent pas.
  675.  
  676.   Les règles ont certains points communs,  donnés dans la sous-section "Jeu"
  677. de la section "Jeu TETRHEX", qui n'ont évidemment pas à être définis dans un
  678. fichier de règle.  Il  reste  donc  à déterminer  la forme de la pièce,  les
  679. motifs sur les hexagones, les nombres à afficher, les signaux (cf plus loin)
  680. et  le comportement  pendant  le jeu.  Une des sections  du fichier de règle
  681. contient l'ensemble des formes possibles, chaque forme étant identifiée dans
  682. la partie "comportement" par un numéro. Idem pour les motifs.  La définition
  683. des nombres contient  le texte à afficher près du nombre,  la position de ce
  684. texte par rapport au nombre,  la taille et la couleur du texte et du nombre,
  685. le nombre de chiffres  du nombre;  la modification  de ces nombres,  qui est
  686. directement liée au comportement, est décrite plus loin.
  687.  
  688.   Le comportement est décrit à l'aide du langage RUL,  spécifique à TETRHEX.
  689. C'est  un langage  interprété  travaillant  sur des expressions  en notation
  690. préfixée; il existe cependant quelques commandes de contrôle (branchements).
  691. Une expression représente toujours un entier signé sur 32 bits. 2 structures
  692. de données supplémentaires sont utilisées: un tableau de 64 variables et une
  693. pile d'entiers 32 bits  dont la taille est donnée  dans l'en-tête du fichier
  694. de règle.  Certaines des variables ont une signification spéciale  (cf sous-
  695. section "Variables spéciales"),  les autres peuvent être utilisées librement
  696. par le programmeur;  à chaque nombre  à afficher  est  associé  une variable
  697. spéciale. Au début du jeu, toutes les variables sont initialisées à 0, et la
  698. pile est vide.
  699.  
  700.   Dans un jeu, on joue à l'aide d'un périphérique d'entrée (clavier, souris,
  701. joystick, ...),  et suivant ce que l'on fait avec ce périphérique (action du
  702. joueur), il se passe telle ou telle chose dans le jeu (action de jeu).  Dans
  703. la plupart des jeux,  il n'y a pas vraiment de différence  entre les 2 types
  704. d'actions:  parfois il n'y en a aucune; parfois, si l'on joue au clavier, on
  705. peut choisir ses touches; on peut parfois aussi choisir entre le clavier, la
  706. souris et le joystick... mais tout ceci reste assez limité.
  707.  
  708.   Dans TETRHEX, on passe par une donnée intermédiaire appelée signal, ce qui
  709. donne  2 conversions,  dans lesquelles  on peut  intervenir.  Les données en
  710. provenance des périphériques surveillés  sont d'abord converties  en signaux
  711. par TETRHEX  ou par un fichier de messages.  Puis le signal  est converti en
  712. action de jeu par le fichier de règle. L'utilisateur peut intervenir dans la
  713. première conversion en donnant un fichier de messages;  si la conversion est
  714. effectuée par TETRHEX,  alors seul le clavier est surveillé,  et les touches
  715. sont définies  dans le fichier de règle.  Le programmeur du fichier de règle
  716. intervient dans la seconde conversion.
  717.  
  718.   Un signal est identifié de manière interne  (i.e. dans les programmes RUL)
  719. par un octet non nul,  i.e.  par un entier allant de 1 à 255,  et de manière
  720. externe (i.e. dans les fichiers de messages) par un mot long (32 bits).  Une
  721. action est identifiée par un entier 32 bits signé.
  722.  
  723.   Le jeu se déroule en plusieurs phases.  Il y a au tout début du jeu (après
  724. l'initialisation des variables  à 0)  une phase d'initialisation  (phase 0);
  725. cette phase est utilisée  pour initialiser certaines données:  variables (en
  726. particulier,  certains nombres à afficher),  vitesse de descente des pièces,
  727. etc...  Avant l'apparition d'une nouvelle pièce  ou lors de l'activation  du
  728. radar (s'il n'a pas été activé deux fois de suite),  une phase permettant de
  729. déterminer cette pièce  (phase A)  est appelée:  on doit définir la pièce en
  730. mettant  des valeurs  dans  certaines  variables spéciales  (cf sous-section
  731. "Variables spéciales").  Pendant  la descente  de la pièce  ou  pendant  une
  732. pause,  la phase B  est  appelée  pour  convertir  les signaux  en  actions.
  733. Lorsqu'une pièce ne peut plus descendre,  elle s'enfonce dans le tableau  et
  734. la phase C  est  appelée;  cette phase  effectue  la destruction  éventuelle
  735. d'hexagones  (en une ou plusieurs étapes),  et met à jour  certaines données
  736. (score, niveau, ...).  Note:  les données  peuvent  aussi être  mises à jour
  737. en la phase A.  Enfin,  lorsque le joueur a perdu,  une phase de terminaison
  738. (phase S) est appelée:  elle renvoie le score du joueur.  Il existe 2 autres
  739. phases, relatives au mode pause de la fenêtre; ces phases sont décrites dans
  740. la sous-section "Modes pause".
  741.  
  742.   Il est possible  de brancher  une variable  au timer.  Cette variable  est
  743. alors décrémentée chaque seconde (fréquence de 1 Hz).
  744.  
  745.         6.2. Actions
  746.              ¯¯¯¯¯¯¯ 
  747.   On a 2 types d'actions:  les actions simples, i.e. qui ne font pas changer
  748. de pièce, qui sont identifiées par des valeurs positives, et les actions qui
  749. font passer directement en phase C ou en phase S (abandon),  identifiées par
  750. des valeurs négatives.  Lorsqu'une action n'est pas possible, elle n'est pas
  751. effectuée.  La liste des actions reconnues par cette version de TETRHEX  est
  752. donnée  ci-dessous.  Certaines  des actions  qui font passer  directement en
  753. phase C mettent une donnée supplémentaire dans V[18] (indiquée dans la liste
  754. ci-dessous).  Note: dans les futures versions de TETRHEX, il se peut qu'il y
  755. ait de nouvelles actions.
  756.  
  757.   _ 0: aucune action.
  758.   _ 1: une case vers le bas.
  759.   _ 2: une case en bas à gauche (i.e. 8h).
  760.   _ 3: une case en bas à droite (i.e. 4h).
  761.   _ 4: rotation gauche ou directe (sens trigonométrique).
  762.   _ 5: rotation droite ou indirecte (sens des aiguilles d'une montre).
  763.   _ 6: une case vers la gauche, à la même hauteur.
  764.   _ 7: une case vers la droite, à la même hauteur.
  765.   _ 8: pause / fin de pause.
  766.   _ 9: activation / désactivation du radar.
  767.   _ 10: envoi d'un message (cf section "Messages", message $0206).
  768.   _ -1: abandon. Passage en phase S (pas de phase C).
  769.   _ -2:  drop: la pièce tombe.  Le nombre de DOWN effectués est mis dans    
  770.     V[18],  ce qui correspond au nombre de cases descendues + 1,  car le    
  771.     dernier DOWN est utilisé pour l'arrêt de la pièce.
  772.   _ -3:  explosion: tous les hexagones qui sont sur le tableau hexagonal    
  773.     sont détruits.  Le nombre d'hexagones détruits (y compris ceux de la    
  774.     pièce courante) est mis dans V[18].
  775.   _ -4: destruction de la pièce courante.
  776.  
  777.   Note: lorsque la pièce se trouve en haut du tableau, les actions 6 et 7 se
  778. comportent comme les actions 2 et 3.
  779.  
  780.         6.3. Signaux
  781.              ¯¯¯¯¯¯¯ 
  782.   Les signaux sont entièrement définis  dans le fichier de règle.  Cependant
  783. il y a  des signaux standards,  qu'il vaut mieux respecter,  car ils peuvent
  784. intervenir dans les fichiers de messages.  Le fichier de règle donne en même
  785. temps  la correspondance identificateurs internes / identificateurs externes
  786. et les touches par défaut,  une touche étant identifiée  par sa position sur
  787. le clavier (scancode) et l'état des touches spéciales.
  788.  
  789.   La liste des signaux standards,  définis par les identificateurs externes,
  790. mais classés suivant les identificateurs internes, est donnée ci-dessous. Il
  791. est conseillé  de prendre  les mêmes identificateurs internes,  même si cela
  792. n'a pas d'importance pour le moment. Sont aussi données les touches choisies
  793. dans les fichiers de règle fournis avec TETRHEX (il est conseillé de prendre
  794. les mêmes),  ainsi que les actions à réaliser.  Il est important de réaliser
  795. les mêmes actions.  Note:  ici,  le terme "action"  est  différent  de celui
  796. considéré  dans la section précédente;  cependant il y a  une correspondance
  797. directe pour la plupart des actions.
  798.  
  799.   $01 : DOWN : Q.............. une case vers le bas (action 1).
  800.   $02 : LFDN : Insert......... une case en bas à gauche (action 2).
  801.   $03 : RGDN : Clr-Home....... une case en bas à droite (action 3).
  802.   $04 : ROTL : Flèche bas..... rotation gauche (action 4).
  803.   $05 : ROTR : Flèche haut.... rotation droite (action 5).
  804.   $06 : LEFT : <--............ une case vers la gauche (action 6).
  805.   $07 : RGHT : -->............ une case vers la droite (action 7).
  806.   $08 : DROP : Barre espace... drop (action -2).
  807.   $09 : STOP : Ctrl-Esc....... abandon (action -1).
  808.   $0A : PAUS : Undo........... passage en mode pause (action 8).
  809.   $0B : CONT : Return......... retour du mode pause (action 8).
  810.   $0C : NEXT : + (pavé num.).. niveau suivant (code + action 0).
  811.   $0D : PREV : - (pavé num.).. niveau précédent (code + action 0).
  812.   $0E : RDAR : Help........... activation / désactivation radar (action 9).
  813.  
  814.   Note:  suivant la règle, on peut associer à certains signaux standards une
  815. action 0 uniquement.  Par exemple, on peut avoir envie d'interdir le passage
  816. à un niveau précédent, ou au mode pause...
  817.  
  818.         6.4. Phases du jeu
  819.              ¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  820.   Le jeu comporte 7 phases,  chaque phase correspondant  à un sous-programme
  821. écrit en RUL:
  822.   _ Phase 0: phase d'initialisation, appelée au tout début du jeu.
  823.   _ Phase A: détermination de la prochaine pièce, en mettant des valeurs    
  824.     dans certaines des variables V[0] à V[8] (cf sous-section "Variables    
  825.     spéciales").  Cette phase peut être appelée alors qu'il y a déjà une    
  826.     pièce en mouvement sur le tableau, en cas d'activation du radar; les    
  827.     variables V[0] à V[8]  sont alors sauvées par TETRHEX avant l'appel,    
  828.     et  récupérées  après l'appel  (car  elles  peuvent  resservir):  le    
  829.     programmeur du fichier de règle n'a pas à s'en préoccuper.
  830.   _ Phase B: conversion des signaux en actions. L'identificateur interne    
  831.     du signal  se trouve  dans  V[9].  Le sous-programme  doit  renvoyer    
  832.     l'identificateur de l'action.  Note:  on peut connaître  les données    
  833.     sur la pièce courante  à l'aide de la commande $7C  (cf sous-section    
  834.     "Langage RUL").
  835.   _ Phase C: dans cette phase, certains hexagones peuvent être détruits;    
  836.     le score est généralement mis à jour. V[9] contient l'identificateur    
  837.     de la  dernière  action:  utile  si  certaines  actions  (parmi  les    
  838.     négatives)  rapportent des points...  V[18] peut contenir une donnée    
  839.     supplémentaire (cf sous-section "Actions").
  840.   _ Phase P (Pause):  début du mode pause de la fenêtre (cf sous-section    
  841.     "Modes pause").
  842.   _ Phase Q (Quit pause):  fin  du mode pause  de la fenêtre  (cf  sous-    
  843.     section "Modes pause").
  844.   _ Phase S (Score):  phase  de terminaison.  Le score final  doit  être    
  845.     renvoyé.
  846.  
  847.         6.5. Variables spéciales
  848.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  849.   V[0]  contient  le numéro  de la forme courante  (de 1 à 255).  Soit h  le
  850. nombre d'hexagones de cette forme.  Pour 1 ≤ k ≤ h, V[k] contient la couleur
  851. du k-ième hexagone (cf sous-section "Code des couleurs"), et V[k+4] contient
  852. le numéro du motif du k-ième hexagone  (de 1 à 255).  Pour  h < k ≤ 4,  V[k]
  853. et V[k+4]  peuvent être  utilisées  librement,  mais  peuvent être  altérées
  854. en phase A  par TETRHEX.  Les variables  définissant la pièce  doivent  être
  855. assignées  lors de la phase A,  et ne doivent pas  être  modifiées  lors des
  856. phases B, C, P et Q.
  857.  
  858.   V[9] contient  l'identificateur interne du signal (de 1 à 255)  lors de la
  859. phase B, et l'identificateur de l'action lors de la phase C.  Cette variable
  860. peut être modifiée par les routines RUL.
  861.  
  862.   Soit n le nombre de nombres affichés à droite du tableau.  Pour 1 ≤ k ≤ n,
  863. V[k+9] contient  la k-ième valeur affichée.  Si la valeur de la variable est
  864. négative, alors 0 est affiché;  si elle est supérieure à M(k) = 10^d(k) - 1,
  865. où d(k) est le nombre maximal de chiffres à afficher du k-ième nombre, alors
  866. M(k) est affiché. Pour n < k ≤ 8, V[k] peut être utilisée librement.
  867.  
  868.   V[18]  peut contenir  une donnée supplémentaire  en phase C.  Pour k > 18,
  869. V[k] peut être utilisée librement.
  870.  
  871.         6.6. Code des couleurs
  872.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  873.   Les hexagones formant les pièces  peuvent être  de 6 couleurs différentes,
  874. codées de 1 à 6:
  875.   _ 1 (001): bleu.
  876.   _ 2 (010): vert.
  877.   _ 3 (011): cyan = vert + bleu.
  878.   _ 4 (100): rouge.
  879.   _ 5 (101): magenta = rouge + bleu.
  880.   _ 6 (110): jaune = rouge + vert.
  881.  
  882.         6.7. Modes pause
  883.              ¯¯¯¯¯¯¯¯¯¯¯ 
  884.   On distingue 2 types de pauses:  le mode pause du jeu  et le mode pause de
  885. la fenêtre.
  886.  
  887.   Mode pause du jeu:  on passe  dans ce mode pause  lorsque l'action +8  est
  888. déclenchée  (normalement  lorsqu'un signal PAUS  est envoyé).  On sort de ce
  889. mode pause  en redéclenchant  l'action +8.  Les autres actions  peuvent être
  890. déclenchées en mode pause du jeu,  mais à part l'action +8 (fin de pause) et
  891. l'action -1  (abandon),  elles n'ont  aucun effet.  Attention!  même en mode
  892. pause du jeu,  on peut recevoir n'importe quel signal;  c'est au programmeur
  893. de tester s'il est en mode pause ou non avant de faire certaines opérations,
  894. comme une modification de variable.
  895.  
  896.   Mode pause de la fenêtre:  on passe dans ce mode pause  lorsque la fenêtre
  897. passe en arrière-plan (en mode fenêtre GEM).  Contrairement au mode pause du
  898. jeu,  il s'agit ici d'un mode pause forcé:  on ne peut pas l'empêcher.  A ce
  899. moment,  la phase P  est appelée;  dans cette phase,  l'éventuelle  variable
  900. branchée au timer  peut être débranchée  (non obligatoire).  Puis le jeu est
  901. complètement  arrêté  (on ne reçoit plus aucun signal),  mais  le timer  est
  902. toujours actif.  Lorsque la fenêtre repasse au premier plan,  on sort  de ce
  903. mode pause, sauf cas particulier (pas assez de mémoire par exemple);  en cas
  904. de problème, un message d'alerte est affiché.  La phase Q est alors appelée;
  905. si une variable  avait été débranchée  du timer,  elle peut être rebranchée.
  906. Puis le signal PAUS est envoyé  s'il existe,  de manière à ce que  le jeu ne
  907. reprenne pas  immédiatement.  Attention!  on peut passer en mode pause de la
  908. fenêtre à n'importe quel moment.
  909.  
  910.         6.8. Structure d'un fichier de règle
  911.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  912.   Note:  l'ordre de définition  des motifs,  des formes,  des signaux et des
  913. nombres est important, le numéro associé à la donnée considérée est attribué
  914. automatiquement par la position dans la liste.
  915.  
  916.   _ Header.  Les adresses sont définies par rapport au début du fichier.    
  917.     Les couleurs sont au format (0, R, V, B):  le premier octet est nul,    
  918.     et les 3 octets suivants  contiennent respectivement les valeurs des    
  919.     3 composantes rouge, verte et bleue entre 0 et 255.
  920.      . 1 mot long: $52554C33 ("RUL3").  Ce mot long indique qu'il s'agit    
  921.        d'un fichier de règle, version 3.
  922.      . 1 mot long: couleur de "-- PAUSE --", en mode pause du jeu.
  923.      . 1 mot long: couleur de "game over".
  924.      . 1 mot long: couleur de "Votre nom:" et du nom  (lorsque le joueur    
  925.        doit entrer son nom).
  926.      . 1 mot long: couleur du nom de la règle.
  927.      . 1 mot: hauteur par défaut du nom de la règle.
  928.      . 24 octets: nom de la règle, terminé par un octet nul.
  929.      . 1 mot:  numéro de la fonte vectorielle  utilisée pour afficher le    
  930.        nom de la règle,  ou 0  si la fonte  est fixée  par l'utilisateur    
  931.        (i.e. déterminée par l'option -fn).
  932.      . 1 mot:  numéro de la fonte vectorielle utilisée pour afficher les    
  933.        noms des nombres affichés  pendant le jeu,  ou 0  si la fonte est    
  934.        fixée par l'utilisateur (i.e. déterminée par l'option -fg).
  935.      . 1 octet: nombre de motifs (de 1 à 255).
  936.      . 1 octet: nombre de formes (de 1 à 255).
  937.      . 1 octet: nombre total de signaux (de 1 à 255).
  938.      . 1 octet: nombre n de cases dans un côté du tableau hexagonal  (de    
  939.        6 à 9), ou 0 s'il est variable.
  940.      . 1 octet: nombre de scores (de 0 à 255) pour n = 6.
  941.      . 1 octet: nombre de scores (de 0 à 255) pour n = 7.
  942.      . 1 octet: nombre de scores (de 0 à 255) pour n = 8.
  943.      . 1 octet: nombre de scores (de 0 à 255) pour n = 9.
  944.      . 1 octet: nombre maximal de scores (de 0 à 255) pour n = 6.
  945.      . 1 octet: nombre maximal de scores (de 0 à 255) pour n = 7.
  946.      . 1 octet: nombre maximal de scores (de 0 à 255) pour n = 8.
  947.      . 1 octet: nombre maximal de scores (de 0 à 255) pour n = 9.
  948.      . 1 mot long: taille de la pile.
  949.      . 1 mot long: adresse de la définition des signaux.
  950.      . 1 mot long: adresse de la définition des nombres à afficher.
  951.      . 1 mot long: adresse de la phase 0 de la règle.
  952.      . 1 mot long: adresse de la phase A de la règle.
  953.      . 1 mot long: adresse de la phase B de la règle.
  954.      . 1 mot long: adresse de la phase C de la règle.
  955.      . 1 mot long: adresse de la phase P de la règle.
  956.      . 1 mot long: adresse de la phase Q de la règle.
  957.      . 1 mot long: adresse de la phase S de la règle.
  958.      . 1 mot long: adresse du texte d'aide.  Nul s'il n'y a pas de texte    
  959.        d'aide.
  960.      . 1 mot long:  adresse des meilleurs scores  (pointe vers la fin du    
  961.        fichier s'il n'y a pas de score).
  962.  
  963.   _ Définition  des motifs.  Chaque hexagone  est  formé  de  288 pixels    
  964.     d'intensité  de 0 à 7  (0: noir, 4: couleur du fond, 7: intensité la    
  965.     plus forte). A chaque motif est associé un tableau de 288 nombres de    
  966.     3 bits, qui occupe 108 octets. Les motifs sont stockés les uns après    
  967.     les autres.
  968.  
  969.   _ Définition des formes.  Cette définition  est indépendante  de celle    
  970.     des motifs.  Les pièces doivent être connexes.  Une configuration de    
  971.     la forme  est définie  par rapport  à un hexagone de référence  (qui    
  972.     n'appartient  pas  forcément  à la pièce),  dont  la  position  sera    
  973.     donnée de manière aboslue  dans le jeu.  Une telle configuration est    
  974.     identifiée par un tableau de 4 octets (mot long),  tel que le k-ième    
  975.     octet  représente  la position  du  k-ième hexagone  par  rapport  à    
  976.     l'hexagone de référence;  si la forme  a moins  de 4 hexagones,  les    
  977.     autres octets  doivent être nuls.  L'octet  identifiant  la position    
  978.     d'un hexagone par rapport à l'hexagone de référence est défini de la    
  979.     manière suivante:  il est nul  si c'est l'hexagone de référence;  sa    
  980.     valeur est entre 1 et 6 s'il est adjacent à l'hexagone de référence:    
  981.     1 s'il est en-dessous,  puis  on tourne  dans le sens contraire  des    
  982.     aiguilles d'une montre;  sa valeur est entre 7 et 18  s'il est à une    
  983.     distance 2 de l'hexagone de référence:  7 s'il est en-dessous,  puis    
  984.     on tourne dans le sens contraire des aiguilles d'une montre.
  985.      . Pour chaque forme:
  986.         . 1 octet: nombre n d'hexagones (de 1 à 4).
  987.         . 1 octet:  0  si la forme  ne peut pas tourner,  négatif  si la    
  988.           forme  tourne autour  de l'hexagone de référence,  strictement    
  989.           positif si la forme tourne d'une autre façon.  Dans le dernier    
  990.           cas,  cet octet  contient  le nombre de positions différentes,    
  991.           compris entre 1 et 6 (note: normalement différent de 1).
  992.         . 1 mot:  offset  sur la liste  des positions de cette forme  si    
  993.           l'octet précédent est strictement positif; sinon, mot nul.
  994.         . 4 octets: position initiale des hexagones.
  995.      . Listes éventuelles des positions  (cf ci-dessus),  dans n'importe    
  996.        quel ordre,  une liste de positions  étant un tableau de tableaux    
  997.        de 4 octets.
  998.  
  999.   _ Définition  des signaux  (y  compris  les signaux  standards).  Pour    
  1000.     chaque signal, on a:
  1001.      . 1 mot long:  identificateur  externe  du signal,  qui  correspond    
  1002.        généralement  à 4 lettres.  Dans tous les cas,  ce mot long  doit    
  1003.        être strictement positif.
  1004.      . 1 mot:  scancode de la touche par défaut  correspondant au signal    
  1005.        (l'octet de poids fort contient l'état des touches spéciales).
  1006.      . 1 mot nul (réservé).
  1007.  
  1008.   _ Définition  des nombres  à afficher.  Les couleurs  sont  au  format    
  1009.     (0, R, V, B).  Pour chaque nombre,  sont affichés du texte ("Score",    
  1010.     "Niveau", etc...)  et la valeur.  Si la valeur  est négative,  0 est    
  1011.     affiché.  Il y a un nombre minimal de chiffres affichés; des "0" non    
  1012.     significatifs  sont éventuellement affichés.  Il y a aussi un nombre    
  1013.     maximal de chiffres affichés; si la valeur est trop grande, alors la    
  1014.     valeur affichée est la plus grande valeur affichable (chiffres "9").    
  1015.     Note:  les nombres  sont affichés  verticalement,  dans l'ordre dans    
  1016.     lequel ils ont été définis.
  1017.      . 1 mot: nombre n (entre 0 et 8) de nombres à afficher.
  1018.      . Tableau de n mots:  adresses  relatives  au début du tableau  des    
  1019.        définitions des nombres à afficher.
  1020.      . Pour chaque nombre:
  1021.         . 1 octet: nombre maximal de chiffres du nombre (de 1 à 8).
  1022.         . 1 octet: nombre minimal de chiffres à afficher (de 1 à 8).
  1023.         . 1 octet: hauteur du texte en pixels (de 16 à 127).
  1024.         . 1 octet: hauteur du nombre en pixels (de 16 à 127).
  1025.         . 1 mot long: couleur du texte.
  1026.         . 1 mot long: couleur des "0" non significatifs.
  1027.         . 1 mot long: couleur des chiffres significatifs.
  1028.         . 1 octet:  position du texte  par rapport  au nombre:  0  si le    
  1029.           texte doit être affiché au-dessus,  1 s'il doit être affiché à    
  1030.           gauche, -1 s'il doit être affiché à droite.
  1031.         . Pour chaque langue (il doit y en avoir au moins une):
  1032.            . 1 octet: nombre n (de 1 à 127) de caractères du texte.
  1033.            . 1 octet: code de la langue.
  1034.            . n octets: texte.
  1035.         . 1 octet nul, indiquant qu'il n'y a plus de langue.
  1036.  
  1037.   _ Règle: sous-programmes en RUL. Les 7 phases peuvent s'entrelacer. Cf    
  1038.     sous-section "Langage RUL".
  1039.  
  1040.   _ Texte d'aide (facultatif).
  1041.      . Pour chaque langue:
  1042.         . 1 mot long: offset sur la prochaine langue (ou sur le mot long    
  1043.           nul indiquant la fin de cette partie).
  1044.         . 1 octet: code de la langue.
  1045.         . 1 octet:  caractère de soulignement  (0 si pas de caractère de    
  1046.           soulignement). Cf ci-dessous.
  1047.         . 1 octet (réservé).  Sa valeur  n'est pas prise en compte  dans    
  1048.           cette version;  mais pour la compatibilité du fichier de règle    
  1049.           avec une version ultérieure de TETRHEX,  la valeur  doit  être    
  1050.           nulle.  Une valeur non nulle  pourra indiquer  l'existence  de    
  1051.           données supplémentaires.
  1052.         . Texte  dans la langue donnée ci-dessus,  terminé  par un octet    
  1053.           nul. Les caractères doivent avoir un code ASCII ≥ 32, sauf les    
  1054.           fins de ligne (CR/LF). Le texte pourra être envoyé directement    
  1055.           sur la sortie standard;  il doit donc  déjà être  formaté.  Il    
  1056.           pourra aussi  être affiché  dans la fenêtre  de TETRHEX  (item    
  1057.           "aide sur TETRHEX"  dans le menu principal);  dans ce cas,  on    
  1058.           cherchera  la largeur du texte  (i.e.  largeur maximale  d'une    
  1059.           ligne du texte),  et  les lignes  ayant  cette largeur  seront    
  1060.           justifiées.  La largeur  conseillée  est de  76 caractères.  A    
  1061.           cause de cette justification, les lignes ne sont pas affichées    
  1062.           telles quelles: il existe 2 caractères qui ont un comportement    
  1063.           spécial:  l'espace  et  le caractère  de soulignement  (défini    
  1064.           avant le texte).  Une séquence  d'espaces  située  en début de    
  1065.           ligne provoque un déplacement du début de ligne (indentation),    
  1066.           tel que  la proportion  du nombre d'espaces  par rapport  à la    
  1067.           largeur du texte  est égale à celle du déplacement par rapport    
  1068.           à la largeur  de la partie  de la fenêtre  réservée  au texte;    
  1069.           idem  pour  une séquence  d'espaces  située  en  fin  de ligne    
  1070.           justifiée.  Une séquence d'espaces située  à l'intérieur d'une    
  1071.           ligne est remplacée par un seul espace.  Les lignes uniquement    
  1072.           formées  d'espaces et de caractères de soulignement,  appelées    
  1073.           lignes  de soulignement,  ne sont pas  affichées:  elles  sont    
  1074.           prises en compte  lors de l'affichage  de la ligne précédente;    
  1075.           une séquence de caractères de soulignement  appartenant  à une    
  1076.           ligne de soulignement a pour effet de souligner la séquence de    
  1077.           caractères située juste au-dessus  exceptés les espaces situés    
  1078.           aux extrémités  de cette séquence.  Si la ligne  ne se termine    
  1079.           pas  par un caractère de soulignement,  alors  elle  est aussi    
  1080.           considérée  comme une ligne vide  (c'est le cas  des lignes de    
  1081.           soulignement  se  terminant  par  un  espace,  des  lignes  ne    
  1082.           contenant  que des espaces  et des lignes  réellement  vides).    
  1083.           N.B.: chaque ligne doit se terminer par un CR/LF, y compris la    
  1084.           dernière.  Il ne faut jamais avoir  plusieurs vraies lignes de    
  1085.           soulignement  successives  ("vraies"  signifie  que  la  ligne    
  1086.           contient au moins un caractère de soulignement),  sinon il y a    
  1087.           risque de plantage.
  1088.      . Mot long nul.
  1089.  
  1090.   _ Tableau des meilleurs scores (éventuellement vide). On a d'abord les    
  1091.     scores pour 6 hexagones, puis pour 7, 8 et 9 hexagones. Chaque score    
  1092.     occupe 32 octets:
  1093.      . 24 octets: nom du joueur + octet nul.
  1094.      . 1 mot long: score (en hexadécimal).
  1095.      . 1 mot long: date et heure au format XBIOS.
  1096.  
  1097.         6.9. Langage RUL
  1098.              ¯¯¯¯¯¯¯¯¯¯¯ 
  1099.   RUL est un langage de codes sur 8 bits formant des expressions en notation
  1100. préfixée. Une expression représente toujours un entier signé sur 32 bits. Il
  1101. y a aussi  des instructions de contrôle (branchements)  transparentes,  i.e.
  1102. elles ont pour seul effet  de modifier le compteur de programme:  d'une part
  1103. elles ne modifient pas le résultat de la dernière expression (au cas où il y
  1104. aurait un retour de fonction, cf plus loin),  d'autre part  elles ne forment
  1105. pas d'expression, i.e. elles ne modifient pas la pile d'expressions.
  1106.  
  1107.   Les expressions sont évaluées dès leur lecture. Par conséquent, lorsqu'une
  1108. opération a plusieurs opérandes, les premières opérandes sont évaluées avant
  1109. les dernières opérandes.  La première expression est notée "x",  la deuxième
  1110. est notée "y",  et la troisième  est notée "z",  sauf  indication  contraire
  1111. (caractère entre chevrons).
  1112.  
  1113.   Certaines expressions renvoient un booléen, codé par entier sur 32 bits de
  1114. la façon suivante:  "faux" est codé  par 0,  et "vrai" est codé  par -1.  Ce
  1115. codage a été choisi  de façon à ce que les instructions logiques (i.e. bit à
  1116. bit) AND, OR et NOT soient équivalentes aux instructions booléennes.
  1117.  
  1118.   Chaque case du tableau hexagonal  est identifiée par un entier non nul sur
  1119. 32 bits.  L'entier 0  identifie  les cases  inexistantes.  Il ne faut jamais
  1120. utiliser  d'autres  entiers  dans  les commandes  ayant  comme  argument  un
  1121. identificateur de case.  Il y a  un autre moyen d'identifier les cases:  par
  1122. couple  (colonne, hauteur).  Si n est  le nombre  de cases  dans un côté  du
  1123. tableau,  les colonnes sont numérotées de -(n-1) à (n-1);  la hauteur est le
  1124. nombre de cases situées au-dessous (dans la même colonne).  A chaque case du
  1125. tableau est associé un tableau de 8 bits appelés marques, initialisés à 0 au
  1126. début du jeu; lorsque le bit b est à 1, on dit que la case a la marque b.
  1127.  
  1128.   Les offsets  (pour  les branchements)  sont  sur  16 bits,  sauf  pour  le
  1129. branchement conditionnel sur 8 bits. L'adresse de branchement est relative à
  1130. celle de l'offset.
  1131.  
  1132.   Attention!  lorsqu'une commande  dont les opérandes ont des valeurs qui ne
  1133. conviennent pas  est effectuée  (comme une division par 0),  le résultat est
  1134. indéterminé ou il y a un plantage. Lorsque cela a un sens, les opérations se
  1135. font modulo 2^32 (par exemple l'addition).
  1136.  
  1137. La signification des codes est la suivante:
  1138.   _ $80 à $FF: constante x - $C0 (de -64 à 63).
  1139.   _ $00 à $3F: variable V[x].
  1140.   _ $40 <expr> <expr>: addition x + y.
  1141.   _ $41 <expr> <expr>: soustraction x - y.
  1142.   _ $42 <expr> <expr>: multiplication x * y.
  1143.   _ $43 <expr> <expr>: division entière x / y. Le quotient est défini de    
  1144.     la manière suivante:  c'est le quotient réel  approché par défaut en    
  1145.     valeur absolue.
  1146.   _ $44 <expr> <expr>: décalage à gauche x << y.  Le nombre de décalages    
  1147.     doit être compris entre 0 et 63.
  1148.   _ $45 <expr> <expr>: décalage à droite x >> y.  Le nombre de décalages    
  1149.     doit être compris entre 0 et 63.
  1150.   _ $46 <expr> <octet>: branchement relatif sur 8 bits si le résultat de    
  1151.     l'expression est non nul (instruction transparente).
  1152.   _ $47 <expr> <expr>: modulo.  On doit avoir y > 0.  La valeur renvoyée    
  1153.     est l'entier congru à x modulo y, compris entre 0 et y-1. Attention!    
  1154.     ce modulo est différent du modulo (%) du C pour x < 0.
  1155.   _ $48 <mot>: constante signée sur 16 bits.
  1156.   _ $49 <mot long>: constante sur 32 bits.
  1157.   _ $4A <expr> <expr>: x == y.
  1158.   _ $4B <expr> <expr>: x != y.
  1159.   _ $4C <expr> <expr>: x < y.
  1160.   _ $4D <expr> <expr>: x > y.
  1161.   _ $4E <expr> <expr>: x <= y.
  1162.   _ $4F <expr> <expr>: x >= y.
  1163.   _ $50 <offset>:  appel  à une fonction,  i.e.  branchement  à un sous-    
  1164.     programme qui renvoie une valeur.
  1165.   _ $51:  retour de fonction.  La valeur de la fonction  est celle de la    
  1166.     dernière expression.
  1167.   _ $52 <offset>: branchement relatif (instruction transparente).
  1168.   _ $53 <expr> <offset>:  branchement si le résultat de l'expression est    
  1169.     non nul (instruction transparente).
  1170.   _ $54 <expr>: NOT logique.
  1171.   _ $55 <expr> <expr>: AND logique.
  1172.   _ $56 <expr> <expr>: OR logique.
  1173.   _ $57 <expr> <expr>: XOR logique.
  1174.   _ $58: random signé sur 16 bits.
  1175.   _ $59: random signé sur 32 bits.
  1176.   _ $5A <expr>: V[x] (x doit être compris entre 0 et 63).
  1177.   _ $5B <expr> <expr>: affectation. La variable concernée et l'opération    
  1178.     à effectuer sont données par la valeur de la première expression: si    
  1179.     0 ≤ x ≤ 63,  il s'agit de  V[x] = y;  si -64 ≤ x ≤ -1,  il s'agit de    
  1180.     V[x+64] += y; si 64 ≤ x ≤ 127, il s'agit de V[x-64] -= y.  La valeur    
  1181.     renvoyée est la nouvelle valeur de la variable.
  1182.   _ $5C <expr>:  données concernant la pièce suivante.  Si le radar  est    
  1183.     désactivé,  0  est  toujours  renvoyé.  Dans  le cas  contraire,  si    
  1184.     0 ≤ x ≤ 8, la valeur renvoyée est celle de la variable V[x] après le    
  1185.     dernier appel  de la phase A,  i.e. V[x]  à l'apparition de la pièce    
  1186.     suivante,  et si  x < 0  ou  x > 8,  la valeur renvoyée est -1.  Une    
  1187.     opérande comme -1 permet donc de tester si le radar est activé.
  1188.   _ $5D: vrai ssi on est en mode pause du jeu.
  1189.   _ $5E <expr>:  si x ≥ 0,  la variable V[x]  est branchée  au timer  si    
  1190.     elle  ne  l'est  pas  encore  (la variable  sera décrémentée  chaque    
  1191.     seconde);  si une autre variable  était branchée au timer,  elle est    
  1192.     automatiquement débranchée.  Si x < 0, la variable branchée au timer    
  1193.     (s'il y en a une) est débranchée. La valeur renvoyée est x.
  1194.   _ $5F <expr>:  temps  approximatif  entre  deux descentes  successives    
  1195.     d'une pièce,  en millisecondes,  compris entre 1 et 8191.  La valeur    
  1196.     renvoyée est x.
  1197.   _ $60 <expr> <octet n> <mot>^n:  valeur  d'un élément  d'un tableau de    
  1198.     constantes sur 16 bits.  Cette instruction évalue l'expression,  lit    
  1199.     l'octet n,  prend  la valeur  de l'expression  modulo n,  et renvoie    
  1200.     l'élément correspondant du tableau  étendu sur 32 bits,  les indices    
  1201.     allant de 0 à n-1.
  1202.   _ $61 <expr> <octet n> <mot long>^n:  idem,  mais  avec  un tableau de    
  1203.     constantes sur 32 bits.
  1204.   _ $62 <expr> <octet n> <offset>^n: sorte de CASE;  branchement relatif    
  1205.     suivant la valeur de l'expression.
  1206.   _ $63 <expr>: empiler la valeur de l'expression, qui est renvoyée.
  1207.   _ $64: valeur du sommet de la pile (on ne dépile pas).
  1208.   _ $65: dépiler une valeur, qui est renvoyée.
  1209.   _ $66 <expr>: valeur absolue.
  1210.   _ $67 <expr>: carré. L'argument doit tenir sur un mot.
  1211.   _ $68: random sur 15 bits (entier positif ou nul).
  1212.   _ $69: random sur 31 bits (entier positif ou nul).
  1213.   _ $6A <expr> <expr>: min(x,y).
  1214.   _ $6B <expr> <expr>: max(x,y).
  1215.   _ $6C <expr> <expr> <expr>: double comparaison.  Si y ≤ x ≤ z, alors 0    
  1216.     est renvoyé; si x < y ≤ z, alors -1 est renvoyé; si y ≤ z < x, alors    
  1217.     1 est renvoyé. Si y > z, le résultat est indéterminé.
  1218.   _ $6D:  envoi d'un message (cf section "Messages", message $0207).  Si    
  1219.     on veut transmettre des données, il faut le faire par la pile, et il    
  1220.     ne faudra pas oublier  de dépiler ces données.  Le résultat de cette    
  1221.     instruction est la valeur renvoyée par le fichier de messages.
  1222.   _ $6E <x> <m>:  destruction des hexagones  situés dans les cases ayant    
  1223.     la marque m.  Si m < 0,  tous les hexagones  sont détruits.  On doit    
  1224.     toujours avoir m ≤ 7.  Note:  la première expression ne sert à rien,    
  1225.     excepté à avoir le même format que la commande $6F.
  1226.   _ $6F <x> <m>: destruction avec bouclage des hexagones situés dans les    
  1227.     cases ayant la marque m, où 0 ≤ m ≤ 7,  i.e. si au moins un hexagone    
  1228.     est détruit,  alors cette instruction est réévaluée.  Le résultat de    
  1229.     la première expression  est  ignoré,  mais  cette expression  sert à    
  1230.     positionner les marques m.
  1231.   _ $70: nombre de cases dans un côté du tableau hexagonal (de 6 à 9).
  1232.   _ $71 <c> <h>: identificateur de la case de colonne c et de hauteur h.    
  1233.     Si la case n'est pas sur le tableau (case inexistante),  alors 0 est    
  1234.     renvoyé.
  1235.   _ $72 <x>: hauteur de la case x (indéterminée si x = 0).
  1236.   _ $73 <x>: colonne de la case x (indéterminée si x = 0).
  1237.       Note: les 4 commandes suivantes permettent de faire des opérations    
  1238.     sur des ensembles de cases  (la récursivité est permise,  ce qui est    
  1239.     utile par exemple  pour rechercher des composantes connexes  ou pour    
  1240.     autre type de parcours). Ces opérations renvoient toujours la valeur    
  1241.     de l'expression évaluée pour le dernier élément, qui est toujours la    
  1242.     case inexistante (0).  Pour chaque case de l'ensemble  (y compris la    
  1243.     case  inexistante),  la case courante  est  stockée  dans  V[n],  et    
  1244.     l'expression e est évaluée.  Pour chaque cas ci-dessous,  l'ensemble    
  1245.     est donné privé de la case inexistante.
  1246.   _ $74 <n> <x> <e>:  ensemble = toutes les cases adjacentes à la case x    
  1247.     et contenant un hexagone.
  1248.   _ $75 <n> <x> <e>: ensemble = toutes les cases existantes adjacentes à    
  1249.     la case x.
  1250.   _ $76 <n> <e>: ensemble = toutes les cases contenant un hexagone.
  1251.   _ $77 <n> <e>: ensemble = toutes les cases existantes.
  1252.   _ $78 <x> <m>:  booléen  indiquant si la case x a la marque m  (m doit    
  1253.     être compris entre 0 et 7).
  1254.   _ $79 <x> <m>:  si 0 ≤ m ≤ 15, la marque (m modulo 8) de la case x est    
  1255.     inversée;  si m < 0, toutes les marques de la case x sont inversées.    
  1256.     Si  m ≤ 7,  la valeur x  est  renvoyée;  si  8 ≤ m ≤ 15,  un booléen    
  1257.     indiquant l'état de la marque m - 8 est renvoyé.
  1258.   _ $7A <x> <m>: idem, sauf que la marque est enlevée (bit mis à 0).
  1259.   _ $7B <x> <m>: idem, sauf que la marque est mise (bit mis à 1).
  1260.   _ $7C <n>:  si n < 0,  nombre d'hexagones (de 1 à 4)  dans la dernière    
  1261.     pièce  (ou  pièce courante);  si  n = 0,  identificateur  de la case    
  1262.     contenant  l'hexagone de référence  de la dernière pièce  (ou  pièce    
  1263.     courante);  si n > 0,  identificateur de la case contenant le n-ième    
  1264.     hexagone de la dernière pièce (ou pièce courante);  attention!  n ne    
  1265.     doit pas être supérieur au nombre d'hexagones de la pièce.
  1266.   _ $7D <x>:  numéro du motif de l'hexagone situé dans la case x  s'il y    
  1267.     en a un,  0 si cette case est vide,  -1 si elle est inexistante (0).    
  1268.     Le test "> 0" permet de savoir s'il y a un hexagone dans la case, le    
  1269.     test "!= 0" permet de savoir si la case existe et est vide.
  1270.   _ $7E <x>: idem pour la couleur de l'hexagone.
  1271.   _ $7F <x> <d>:  identificateur  d'une case  voisine de la case x  si x    
  1272.     existe, case inexistante si x est la case inexistante;  d indique la    
  1273.     direction. On prend la valeur de d modulo 6 (car il y a 6 directions    
  1274.     possibles). $7F <x> 0: case voisine située au-dessous, $7F <x> 1: en    
  1275.     bas à droite,  $7F <x> 2:  en haut à droite,  $7F <x> 3:  au-dessus,    
  1276.     $7F <x> 4: en haut à gauche, $7F <x> 5: en bas à gauche.
  1277.  
  1278.  
  1279.     7. Messages
  1280.        ¯¯¯¯¯¯¯¯ 
  1281.   N.B.: cette section n'est utile qu'à ceux qui ont une version enregistrée,
  1282. car dans la version non enregistrée on ne peut pas envoyer de messages.
  1283.  
  1284.   Le système de messages  permet à TETRHEX  de communiquer avec des routines
  1285. externes,  qui elles-mêmes  peuvent communiquer  avec d'autres processus.  A
  1286. l'origine,  les messages étaient faits pour envoyer et recevoir des messages
  1287. AES; mais on peut faire beaucoup plus.
  1288.  
  1289.   Des routines externes,  regroupées dans des fichiers appelés  "fichiers de
  1290. messages",  sont données à TETRHEX au lancement.  Un fichier de messages est
  1291. formé  d'une routine  composée  de sous-routines.  On peut donner  à TETRHEX
  1292. plusieurs fichiers de messages; ceux-ci forment alors une chaîne, le dernier
  1293. fichier chargé (i.e. dernier fichier dans la chaîne d'options) étant le plus
  1294. prioritaire (cf ci-dessous).  A certains moments,  TETRHEX envoie un message
  1295. (type + données), ce qui correspond à un appel de routine,  une sous-routine
  1296. est choisie en fonction du type du message,  et un résultat est renvoyé;  le
  1297. protocole d'envoi/transmission de messages  est décrit ci-dessous.  Comme il
  1298. faut qu'il y ait  au moins une routine,  notamment si l'utilisateur ne donne
  1299. aucun fichier de messages,  TETRHEX contient  un fichier de messages interne
  1300. appelé fichier terminal, qui est toujours le moins prioritaire.
  1301.  
  1302.   Protocole d'envoi/transmission de messages (en assembleur 680x0):  TETRHEX
  1303. ou une routine d'un fichier de messages  peut envoyer un message de la façon
  1304. suivante:  D0.W doit contenir le type du message,  et A0 un pointeur sur une
  1305. structure,  formée d'un mot long  qui est l'adresse de la routine du fichier
  1306. de messages le plus prioritaire (adresse du fichier + 4) et d'autres données
  1307. éventuelles  dépendant  du type  du message.  Au retour,  D0.L  contient  un
  1308. résultat, dont la signification dépend du type de message envoyé; les autres
  1309. registres ne sont pas modifiés.  Lorsqu'une routine d'un fichier de messages
  1310. reçoit un message,  il doit traîter le message s'il le peut (suivant le type
  1311. du message),  sinon il doit  le transmettre  au fichier de messages suivant;
  1312. même si le message a été traîté, il peut parfois être transmis au fichier de
  1313. messages suivant (tout dépend du traitement). N.B.: la routine de traitement
  1314. ne doit pas modifier les registres D1 à D7 et A0 à A7; donc, penser à sauver
  1315. au début  les registres qui pourront être modifiés,  et à les récupérer à la
  1316. fin.  La transmission s'effectue de la manière suivante:  D0.W, A0 et (A0).L
  1317. doivent avoir  les valeurs données lors de l'appel;  l'adresse de la routine
  1318. du fichier  suivant  se  trouve  à  l'adresse  du fichier  courant,  i.e.  à
  1319. l'adresse de la routine courante - 4;  connaissant l'adresse de la routine à
  1320. appeler,  on fait soit un branchement, soit un appel de sous-programme (pour
  1321. pouvoir modifier le résultat).  Le fichier terminal renvoie toujours 0 comme
  1322. résultat, et ne fait rien d'autre;  il est donc préférable que le traitement
  1323. d'un message renvoie 0 si et seulement si rien n'a été effectué.
  1324.  
  1325. Types de messages actuellement définis:
  1326.   _ $0000: non spécifié (dépend du fichier de messages).
  1327.   _ $0001: initialisation.  Ce message est envoyé juste après appl_init.    
  1328.     4(A0).W contient l'identificateur de l'application TETRHEX  (utilisé    
  1329.     pour envoyer des messages AES à TETRHEX).  6(A0).B: flag d'affichage    
  1330.     des messages d'erreur  (0 si l'option "-e" est inactive,  -1 si elle    
  1331.     est active);  le fichier de messages  ne peut envoyer des caractères    
  1332.     sur la sortie standard que si ce flag est actif. Si l'initialisation    
  1333.     se  déroule  sans  erreur,  ce  message  doit  obligatoirement  être    
  1334.     transmis  au fichier  de messages  suivant  (une valeur  nulle  sera    
  1335.     renvoyée par le fichier terminal). Sinon, l'initialisation doit être    
  1336.     interrompue  et une valeur non nulle doit être renvoyée;  TETRHEX se    
  1337.     termine et renvoie le mot de poids faible comme code de retour.
  1338.   _ $0002: fin du programme.  Message envoyé  juste avant appl_exit.  Il    
  1339.     doit toujours être transmis au fichier de messages suivant.
  1340.   _ $0003: début de la présentation. Ce message n'est jamais envoyé s'il    
  1341.     n'y a pas de présentation, i.e. en mode fenêtre GEM.
  1342.   _ $0004: affichage du menu; l'image de fond n'est pas encore affichée.    
  1343.     Si un nombre non nul est renvoyé,  l'image de fond est immédiatement    
  1344.     libérée, ce qui permet de la changer (cf message $0006).
  1345.   _ $0005: menu affiché (attente d'un évènement).
  1346.   _ $0006: demande de calcul de l'image de fond. Si le résultat est nul,    
  1347.     l'image doit être calculée par TETRHEX.  Dans le cas contraire, elle    
  1348.     est calculée par le fichier de messages et le résultat est l'adresse    
  1349.     de l'image. L'image, sur laquelle sera ensuite affiché (par TETRHEX)    
  1350.     le tableau hexagonal, est formée de 7 plans 624 * 416 non entrelacés    
  1351.     (format VDI),  les valeurs des pixels étant comprises entre 0 et 95,    
  1352.     i.e.  les deux bits de poids fort ne sont pas simultanément à 1.  La    
  1353.     palette (96 mots longs) se trouve juste après l'image. N.B.: le bloc    
  1354.     de mémoire contenant la nouvelle image de fond doit être réservé par    
  1355.     la routine du fichier de messages, mais il ne pourra être libéré que    
  1356.     par TETRHEX,  soit  automatiquement  (s'il ne reste plus beaucoup de    
  1357.     mémoire), soit à la demande de l'utilisateur (Ctrl-F ou clic droit),    
  1358.     soit avec un message (cf message $0004).
  1359.   _ $0007:  nouveau fichier de règle chargé.  4(A0).L contient l'adresse    
  1360.     du fichier de règle.  Ce message est envoyé par TETRHEX  juste après    
  1361.     le chargement d'un fichier de règle,  y compris  après le chargement    
  1362.     du premier fichier;  dans ce cas, il est envoyé entre $0001/$0003 et    
  1363.     $0004.
  1364.   _ $0008:  aide sur TETRHEX.  Ce message  n'est envoyé  que  si  l'aide    
  1365.     existe bien.
  1366.   _ $0009: aide sur le fichier de règle.  Ce message n'est envoyé que si    
  1367.     l'aide existe bien.
  1368.   _ $000A: entrée du nom du joueur.
  1369.   _ $000B: début du jeu. Message envoyé avant l'évaluation de la phase 0    
  1370.     de la règle.
  1371.   _ $000C: affichage des meilleurs scores.
  1372.   _ $0100:  passage  en mode pause de la fenêtre.  Message envoyé  après    
  1373.     l'évaluation éventuelle de la phase P de la règle.
  1374.   _ $0101:  fin  du  mode pause  de la  fenêtre.  Message  envoyé  avant    
  1375.     l'évaluation éventuelle de la phase Q de la règle.
  1376.   _ $0200:  non spécifié (dépend du fichier de messages).  Message ayant    
  1377.     un rapport avec le jeu.
  1378.   _ $0201:  début du jeu.  4(A0).L:  pointeur de pile  du jeu.  8(A0).L:    
  1379.     pointeur sur les variables du jeu. 12(A0).L: pointeur sur le fichier    
  1380.     de règle.  Message  envoyé  après l'évaluation  de la phase 0  de la    
  1381.     règle.
  1382.   _ $0202: fin du jeu (game over). 4(A0).L: score.  Message envoyé après    
  1383.     l'évaluation de la phase S de la règle  et avant la libération de la    
  1384.     mémoire réservée pour le jeu (variables, pile, ...).
  1385.   _ $0203:  prochaine pièce.  Les données concernant cette pièce ne sont    
  1386.     pas stockées dans la structure (A0), car elles peuvent être lues par    
  1387.     l'intermédiaire des variables du jeu.  Ce message  est envoyé  avant    
  1388.     l'affichage de la pièce.
  1389.   _ $0204: une pièce vient d'être affichée.
  1390.   _ $0205:  action.  4(A0).L: numéro de l'action.  Ce message est envoyé    
  1391.     juste après l'évaluation de la phase B de la règle et la mise à jour    
  1392.     des nombres (affichage), et avant l'exécution de l'action.
  1393.   _ $0206: message envoyé par l'action +10. 4(A0).L: pointeur de pile du    
  1394.     jeu.  Les données ont été mises dans la pile du jeu. Le sommet de la    
  1395.     la pile  contient  le nombre de données empilées  (N.B.: ce mot long    
  1396.     n'est pas compris dans les données); ces données seront dépilées par    
  1397.     TETRHEX au retour.
  1398.   _ $0207:  message  envoyé  par  l'interpréteur RUL  (cf commande $6D).    
  1399.     4(A0).L contient le pointeur de pile du jeu.
  1400.   _ $0208: message envoyé juste avant la phase A du jeu.  Si le résultat    
  1401.     est non nul,  la phase A ne sera pas exécutée et le message $0209 ne    
  1402.     sera pas envoyé.
  1403.   _ $0209: message envoyé juste après la phase A du jeu.
  1404.   _ $0300:  lecture d'un signal.  4(A0).L:  code de la touche  (état des    
  1405.     touches spéciales  +  scancode  +  code ASCII)  si une touche  a été    
  1406.     frappée,  sinon 0.  Si aucun signal  n'est détecté  et  si la touche    
  1407.     frappée n'est pas prise en compte par le fichier de message,  0 doit    
  1408.     être renvoyé  (TETRHEX prendra la touche en compte et fera passer le    
  1409.     signal éventuel  à la phase B du fichier de règle).  Si aucun signal    
  1410.     n'est détecté  et si la touche frappée  ne correspond à aucun signal    
  1411.     ou ne doit pas être prise en compte,  une valeur négative  doit être    
  1412.     renvoyée.  Si  un signal  est détecté  (dernier cas),  à cause de la    
  1413.     touche éventuelle ou d'une autre raison, l'identificateur externe du    
  1414.     signal doit être renvoyé.
  1415.   _ $0301: émulation d'une touche de fonction.  Une valeur entre 1 et 20    
  1416.     est renvoyée pour émuler la touche de fonction correspondante. Sinon    
  1417.     une valeur nulle doit être renvoyée.
  1418.   _ $0302: émulation d'un évènement dans le menu principal.  La valeur n    
  1419.     renvoyée  a la signification suivante:  0: pas d'évènement,  1: aide    
  1420.     sur TETRHEX, 2: aide sur la règle,  3: charger une règle,  4: nom du    
  1421.     joueur, 5: jouer,  6: meilleurs scores, 7: arrière-plan, 8: quitter,    
  1422.     16 à 19: tableau de n-10 cases de côté,  -1 à -20:  meilleurs scores    
  1423.     (touche de fonction F(-n)).
  1424.   _ $0303:  émulation d'un évènement  pendant l'entrée du nom du joueur.    
  1425.     Signification de la valeur n renvoyée:  0: pas d'évènement, 1 à 255:    
  1426.     caractère affichable ou non  (3: ctrl-C,  8: backspace,  13: return,    
  1427.     27: escape), -1: flèche droite, -2: flèche vers le haut.
  1428.   _ $0304:  émulation  de la  touche Esc  à la  fin  du  jeu.  La valeur
  1429.     renvoyée doit être non nulle pour revenir au menu principal.
  1430.   _ $0400: message AES de type ≥ 128 reçu par TETRHEX. 4(A0).L: pointeur    
  1431.     sur le buffer de messages (cf evnt_mesag).
  1432.   _ $0401:  touche enfoncée et non prise en compte par TETRHEX,  dans le    
  1433.     menu principal.  4(A0).W: état des touches spéciales du clavier  (cf    
  1434.     evnt_button).  6(A0).W: code de la touche enfoncée, i.e. scancode de    
  1435.     la touche  dans l'octet de poids fort  et code ASCII dans l'octet de    
  1436.     poids faible (cf evnt_keybd).
  1437.  
  1438.   Note 1:  dans le jeu,  la pile est descendante,  i.e.  quand on empile, le
  1439. pointeur de pile du jeu est décrémenté de 4  (car les éléments ont 32 bits).
  1440. Le pointeur de pile  pointe  sur le sommet de la pile,  i.e.  sur le dernier
  1441. élément empilé quand la pile n'est pas vide. Le pointeur de pile initial est
  1442. donné par le message $0201; à ce moment, la pile est vide.
  1443.  
  1444.   Note 2:  les messages de type $03xx  permettent  de faire  des calculs  en
  1445. tâche de fond (avec un système d'exploitation non préemptif).
  1446.  
  1447.  
  1448.     8. Notes techniques
  1449.        ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  1450.   Cette section  s'adresse  à ceux  qui connaissent  assez bien  le TOS/GEM,
  1451. notamment les programmeurs.
  1452.  
  1453.         8.1. Flags du programme
  1454.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  1455.   Note:  comme l'assembleur que j'utilise  n'est pas capable  de positionner
  1456. les flags de programme (PRGFLAGS) comme on veut,  il est possible que,  dans
  1457. certaines versions  de TETRHEX,  j'oublie  de  les  modifier.  Ces flags  se
  1458. trouvent à l'offset 0x16 du programme TETRHEX.GTP/PRG.
  1459.  
  1460.   Vous pouvez modifier  les bits 0 à 2  à l'aide  du CPX FileInfo  de Dieter
  1461. Fiebelkorn.
  1462.  
  1463.   _ Bit 0 (fastload):  il est préférable de le mettre à 1 pour accélérer    
  1464.     le lancement.
  1465.   _ Bits 1 (TT-RAM prg) et 2 (TT-RAM mem):  il  est  préférable  de  les    
  1466.     mettre à 1.
  1467.   _ Bit 3: inutilisé (mettre à 0).
  1468.   _ Bits 4 et 5: il est préférable de les mettre à 0.
  1469.   _ Bits 6 à 15: inutilisés (mettre à 0).
  1470.  
  1471.         8.2. Codes d'erreur
  1472.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  1473.   La  liste  des  valeurs  renvoyées  par  TETRHEX  est  donnée  ci-dessous.
  1474. Lorsqu'il y a une erreur,  celle-ci est indiquée  par une boîte d'alerte  en
  1475. plus du code de retour, si l'AES a pu être initialisé.
  1476.  
  1477.   _ 0: pas d'erreur.
  1478.   _ 1: mémoire insuffisante.
  1479.   _ 2: impossible de changer de résolution.
  1480.   _ 3: mauvais processeur (il faut au moins un 68020).
  1481.   _ 4: impossible d'ouvrir une station de travail.
  1482.   _ 5: impossible de créer une fenêtre.
  1483.   _ 6: problème de fonte.
  1484.   _ 7: fichier de règle non trouvé.
  1485.   _ 8: mauvais format de fichier de règle.
  1486.   _ 9: erreur interne.
  1487.   _ 10: chaîne d'options incorrecte.
  1488.   _ 11: mauvais format de fichier de langue.
  1489.   _ 12: fichier d'aide non trouvé.
  1490.   _ 13: mauvais format d'aide.
  1491.   _ 14: stack overflow.
  1492.   _ -1: erreur système.
  1493.  
  1494.         8.3. Déplacement de la fenêtre
  1495.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  1496.   Avec le TOS 4,  si une des 2 lignes  situées en bas  ou une des 2 colonnes
  1497. situées à droite d'une fenêtre  (utilisées pour le relief)  est en dehors de
  1498. l'écran  et si on déplace la fenêtre  vers l'intérieur de l'écran,  alors un
  1499. message de redraw est toujours envoyé  (bug du GEM).  Pour éviter ce redraw,
  1500. on interdit  à ces 2 lignes  et ces 2 colonnes  de sortir  de l'écran;  mais
  1501. comme, pour l'AES, elles ne font pas partie de la fenêtre,  on doit en tenir
  1502. compte dans les calculs.
  1503.  
  1504.         8.4. Modification de la palette
  1505.              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  1506.   En mode plein écran,  la palette  de couleurs  est modifiée  de nombreuses
  1507. fois par TETRHEX, mais elle est restituée à la fin.
  1508.  
  1509.   Mais en mode fenêtre GEM, un problème se pose,  car plusieurs applications
  1510. (ou accessoires) peuvent utiliser des palettes différentes.  Le mieux serait
  1511. de  sélectionner  la palette  de l'application  ayant la fenêtre  au premier
  1512. plan,  i.e. quand une fenêtre passe au premier plan,  la palette est changée
  1513. en même temps; mais l'AES ne permet pas de le faire.  C'est donc TETRHEX qui
  1514. effectue  le changement de palette  lorsque  la fenêtre  repasse  au premier
  1515. plan;  lorsque  la fenêtre de TETRHEX  est "détoppée",  la palette n'est pas
  1516. modifiée  par TETRHEX,  car il ne peut pas  connaître  la nouvelle  palette:
  1517. c'est à l'application qui a la fenêtre "toppée"  de changer  la palette.  Si
  1518. toutes les applications  utilisant la palette 256 couleurs  se comportent de
  1519. cette manière, il ne devrait pas y avoir de problème en général  (mais il ne
  1520. faut pas  que la fenêtre soit détoppée  avant que la palette soit modifiée).
  1521. Note:  les 16 premières couleurs  ne sont jamais modifiées  par TETRHEX  (en
  1522. mode fenêtre GEM) et ne doivent l'être par aucune autre application. Lorsque
  1523. TETRHEX est quitté, l'ancienne palette n'est évidemment pas restituée.
  1524.  
  1525.  
  1526.     9. Limitations de la version non enregistrée
  1527.        ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
  1528. La version non enregistrée présente les limitations suivantes:
  1529.   _ On ne peut pas changer de règle (touche Undo désactivée).
  1530.   _ On ne peut pas changer la taille du tableau.
  1531.   _ Les scores ne sont pas sauvegardés.
  1532.   _ Les parties sont limitées à 5 minutes environ.
  1533.   _ Après 10 parties, TETRHEX est quitté automatiquement.
  1534.   _ On ne peut pas utiliser de fichier de messages.
  1535.  
  1536.   La règle et la taille du tableau  doivent donc être choisies  au moment de
  1537. lancer TETRHEX (cf section "Lancement et configuration").
  1538.  
  1539.   En vous faisant enregistrer,  vous recevrez  une version  sans limitation,
  1540. mais  aussi  quelques fichiers de messages  avec leurs sources,  le source C
  1541. d'un mini-compilateur  permettant  de créer  beaucoup  plus  facilement  des
  1542. fichiers de règle,  ainsi  que  la documentation  nécessaire  sur  le format
  1543. (ASCII) utilisé.  Vous recevrez également  les sources des fichiers de règle
  1544. fournis avec TETRHEX,  de façon à ce que vous puissiez les modifier  et à ce
  1545. qu'ils servent d'exemples.
  1546.  
  1547.  
  1548. Vincent Lefèvre
  1549.