Outils pour utilisateurs

Outils du site


back2root:archives:jeu-de-role-en-gfa-basic:02-editez-vos-cartes-graphiques

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
back2root:archives:jeu-de-role-en-gfa-basic:02-editez-vos-cartes-graphiques [2025/06/11 18:12] – créée fraterback2root:archives:jeu-de-role-en-gfa-basic:02-editez-vos-cartes-graphiques [2025/06/12 00:09] (Version actuelle) – [Programme Complet] frater
Ligne 1: Ligne 1:
-====== JEU DE ROLE EN GFA BASIC ======+===== 02 - Éditez vos cartes graphiques - WIP =====
  
-<WRAP center round info> +==== Editer vos cartes graphiques ====
-Ce texte est une reproduction des articles parus dans le magazine **Atari Magazine** dans le Hors Série **Best of GFA Basic** De Janvier 1993+
  
-Cet article est en cours de transfert depuis un OCR fait a partir de l'archive disponible sur [[https://www.abandonware-magazines.org/affiche_mag.php?mag=5&num=1134&images=oui|www.abandonware-magazines.org]], merci à eux pour le formidable travail d'archivage. +La programmation d'un jeu de rôle façon Ultima passe par la réalisation d'un éditeur capable de définir la carte d'un monde médiéval fantastique.
-</WRAP>+
  
-===== 02 - Editez vos cartes graphiques =====+==== Notions de base ====
  
-La programmation d'un jeu de rôle facon Ultima passe par la +Dans les jeux de rôle de type Ultima ou Fantaisy (liste non limitative), le joueur gère les actions d'une équipe de personnages. Celle-ci se déplace sur une grande carte représentant l’ensemble du monde de jeu. Seule une partie de la carte est affichée à l'écran. C’est une sorte de fenêtre de visualisation qui se déplace sûr là carte totale. Lorsque que les personnages se déplacent, la fenêtre montre une nouvelle position. 
-réalisation d'un éditeur capable de définir la carte d'un monde + 
-médiéval fantastique. +==== Dessin de la carte ==== 
-Notions de base ? + 
-Dans les jeux de rôle de type Cfrimer-ou Aentarsy (hste non lemitanive}, +L'univers de jeu doit être vaste pour que le joueur ait le plaisir de l'explorer. Cela nous empêche de stocker le dessin de la carte sous la forme d'une image, pour des raisons de place mémoireune image de 320x220 pixels en basse résolution occupe 32 Ko. Une image de 1600x800 pixels, équivalent à un espace de 5x4 images écrans, occupe une place mémoire de 640 Ko. C'est beaucoup trop pour un 520 ST et même pour un 1040 ST, en tenant compte de la taille prise par le programme et les autres données graphiques. 
-le Joucur gére les actions d'uné équipe de personnages. Celle-ca + 
-se déplace sur une grande carte réprésentant l’ensemble du monde de +==== Dessin avec éléments graphiques de base ==== 
-jeu. Seule une partie de la carte est affichée à l'écran. C’est une sorre + 
-de fénêtre de visualisation qui se déplace sûr là carte totale. Lorsque +Au lieu de stocker l’image de la carte en mémoire, on peut la redessiner avec des éléments de base. Une foret peut être dessinée avec ou 7 éléments, une rivière ou un plan d'eau n'ont pas non plus besoin de de beaucoup d’éléments différents. A la rigueur, une forêt peut être dessiné avec une seule petite image représentant un arbre, et la montagne avec un seul élément représentant la silhouette d'une cime. c'est le procédé utilisé par bon nombre de logiciels de jeu du commercePour des raisons techniques qui tiennent plus à l'organisation des mémoires vidéos, les éléments ont le plus souvent une taille de lôx16 pixels ou 32x32 pixels. 
-ilï_!!:i pPÉrsUnnages e ljl'l:i.'!ll‘:l.-:.'-l:l'.l'l..l IJ. funÈtru IMCHIÈTE ]i]. []ULI".-'-L‘HI_‘ ]."U'.iiliüîl. + 
-Dessin de la carte +Une carte est alors mémorisée sous la forme d'une liste d’éléments graphiquesOn peut stocker cette liste dans un tableau numérique à deux dimensions, dont le type dépend du nombre d'éléments possibles. Avec moins de 256 éléments, ce qui est déjà énorme, on peut utiliser un tableau de type BYTE (symbole |), chaque élément du tableau n'occupant qu'un octet en mémoire. 
-L'univers de jeu doit être vaste pour que le joueur ait le plaisir de + 
-l'explorer. Cela nous empêche de stocker le dessin de la carte sous la +Avec des éléments de 16x16, une carte de 1600x800 pixels peut être stockée dans un tableau de 100x50 cléments, occupant une place mémoire de 5000 octets. Sa déclaration se fait de la manière suivante: 
-fi':lr'rnf: ll'l.":l'll'l[Ï 'il_l'_l.:li_:_f".l l‘.li‘.-lfl' llll.'Ë"'. mis-;nn:—: I:]fl Fli-fll'_'l.'f mémuir&. .[.l-!'llË ['l'l'".'ii":_"+ 
-de 3X0x220 pixels en basse résolution occupe 32 Koo Une image de +<code freebasic> 
-1600800 pixels, équivalent à un espace de 5x4 images écrans, occupe +OPTION BASE 1 
-une place mémoire de 640 Ko. C'est beaucoup trop pour un 520 5T +DIM carte|(100,50) 
-et même pour un 1040 5T, en tenant compté de la taille prise par le +</code> 
-programme ot les autres données graphiques + 
-Dessin avec éléments graphiques de base +L'instruction ''OPTION BASE 1'' force le basic à numéroter ces tableaux à partir de l’indice 1 et non 0. Pour calculer le gain de mémoire entre les deux méthodes, il faut prendre en compte la place mémoire prisé par les éléments graphiques. 
-YA l.'iliiLl. I.]I_I !':ZLI'_PL'l:'i.EI.' |-.5I:]..-Ii_:l"-I: L:II'_' IH. carie Cil ].HIËIËI'I.E]'LIII-J"I::. Ch J_.i'-l:'LIL J.-'-.'I. I'L‘L'IEE:UI.' + 
-ner avec des élements de basé. Une foret peut étre dessinée avec ou +Un élément graphique de 16x16 pixels stocké dans une variable alphanumérique grâce à l'instruction ''GET'' occupe une place de 134 octets, ce calcul ayant été fait avec l'instruction ''LEN'' qui détermine la taille d'une variable alphanumérique. 
-{.:'Ii'l:ml_'“['ltil TEFIë |_i"-"ill=“|1l;': CHI] LETI l-.l:l‘r'l'l'l. I.'.ll['.fil] r:"nnt 'l-.l.'l."'. T l'l]'ll':l l."ËË'i-ÜE]'+ 
-de beaucoup d'élemonts différents. A la ngucur, une foréc peut +<code freebasic>
-dessine avec une seule petite image représentant un arbré, et la montagne +
-avec un seul élément représentant la silhouerre d'une cime. +
-(st le procédé utilisé par bon nombre de logiciels de jeu du com- +
-FICFce, Pl"l'l_l:l" I::Il:_"; |_..|.i::i|:.;'r'.:'i li_'i;hrli:.[ul;'i L]'L'l.i Li:l_'l'II-II:Tll: El. l’rjrg:hni!-:ati:m I.:Il_':'+
-mémoires vidéos, les elements ont le plus souvent une taille de +
-lôx16 pixels ou 32x32 piæels, +
-Une carte esr alors mémorisée sous la forme d'une lisre d’éléments +
-Ë'l'..'l.'l:lhiqüfl_:j I:::!Il'l TËL[E ._"'Îl'.l:'ll'_'l'i.::l- LECLE [i:-:.L-: ijfiflfi 11F Ï.EIZ_J.IOE'LI. rlurrïrl:riqu:_' ä. +
-deux dimensions, dont le type dépend du nombre d'éléments possibles. +
-Avec moins de 256 élements, ce qui est déjà énorme, on peur +
-utiliser un tableau de vvpe BYTE (svmbole |), chaque élément du tabléau +
-n'occupant qu'un bctét én mémoire. +
-Avec des éléments de 16x16, une carte de 1600x8C0 pixels peut être +
-stockée dans un tableau de 100x50 cléments, occupant une place +
-mémoire de 5000 octets. 5a déclaration se fait de la manière suivante: +
-OFTION BASE 1 +
-DIM carte|{100,50) +
-L'instruction OPTION BASE ! foree le basic à numérotér ces tableaux +
-à partir de l’indice 1 et non & Four calculer le gain de mémoire enrre +
-les deux méthodes, il faur prendre en compre la place mémoire +
-prisé-par les éléments praphigues; +
-Un élément graphique de 16x16 pixels stocké dans une variable alphanumérique +
-grâce à l'instruction GET occupe une place de 134 nc +
-ters, ce caloul ayant ête fait avec l'instruction LEN qui détermine la +
-raille d'une variable alphanumérique.+
 GET 1,1,16,16,varf GET 1,1,16,16,varf
 PRINT LEN(vars) PRINT LEN(vars)
-L’expérience montre que l'on peut dessiner des cartes complètes avec +</code> 
-bien moins de 200 éléments différents. Clest donc une valeur limite + 
-accéptable pour fairé quelques calculs. Vous utiliserez certainement +L’expérience montre que l'on peut dessiner des cartes complètes avec bien moins de 200 éléments différents. C'est donc une valeur limite acceptable pour faire quelques calculs. Vous utiliserez certainement moins de 200 élements pour créer vos propres cartes. Pour la petite histoire, les premiers jeux Ultima ont été dessinés avec seulement quelques dizaines d'éléments. Le stockage de 200 éléments graphiques prend 26800 octets. 
-moins de 200 clements pour créer vos propres cartes. Pour la perite + 
-histoire, les premiers jeux Ultima ont été dessinés avec seulement +<code freebasic>
-quelques dizaines d'éléments. Le srockage de 200 éléments graphiques +
-prend 26800 oététs.+
 DIM element$(200) DIM element$(200)
-En additionnant la place prise par le codage de la carte t par 200 éle +</code> 
-ments graphique, on arrive à un total de 31800 ocrets (5000+ + 
-26800), Dans notre cas particulier, le gain de place apporté par le-codage +En additionnant la place prise par le codage de la carte t par 200 élements graphique, on arrive à un total de 31800 octets (5000+26800), Dans notre cas particulier, le gain de place apporté par le codage de la carte est de 20, mais s'améliore considérablement si la carte est plus grande que 100x50 cléments ou si le nombre d'objets graphique est plus petit que 200. 
-de la carte est de 20, maus saméliore considérablement a1 la carte + 
-est plus grande que 100x50 cléments ou s1 le nombre d'objets gra + 
-phique est plus petic que 200. +Cette technique offre un gros avantage pour le développement d'un logiciel: la carte est facile à dessiner une fois que les éléments de base sont créés
-Cetté téchnique offre un gros avantage pour le développement d'un + 
-logiciel: la carte est facile à dessiner une fois que les éléments de base +Même un non-graphiste peut réaliser une jolie carte à partir de beaux éléments de base
-SONt CTÉES+ 
-ATARI MAGAZINE m BEST OF GRA BASIC +==== Dessin de la carte Ultima ==== 
-Même un non-graphiste peut réaliser une jolie carte à partir de beaux + 
-éléments de hase+La portion de carte affichée par les jeux //Ultima// a une dimension de 176x176 pixels, et se constitue de 11x11 éléments de 16x16 pixels.  La position de l'équipe de personnages est visualisée par une silhouette en noir affichee au milieu de l'écran. 
-Dessin de la carte Ultima + 
-La portion de carte affichée par les jeux Ultima à une dimension de +Lors des déplacements, l'image de la carte est redessinée de manière à ce que l'équipe soit toujours au centre de l'image visible. 
-176x176 pixels, et est constitué de 11x11 clements de 16x16 pixels. + 
-La position de l'équipe de personnages est visualisée par une silhouerte +==== Programmation dun système de déplacement style Ultima ==== 
-en noir affichee au milieu de l'écran. + 
-Lors des déplacements, l'image de la carte est redessinée de manière à +Pour réaliser un systéme de déplacement similaire à celui d'//Ultima// en //GFA Basic//, il faut résoudre un certain nombre de problèmes techniques. Nous avons déjà vu que le codage de la carte peut être stocké dans un tableau numérique et les éléments graphiques de base dans un tableau alphanumérique, mais il reste bien des questions à étudier. Comment est-ce que les éléments graphiques sont stockes dans le tableau alphanumérique? Comment afficher rapidement là carte 
-cé que l'équipe soit toujours au centre de l'image visible, +aussi bien sur un STF que sur un STE? Comment stocker les différentes données sur disque? Comment gérer les déplacements de l'équipé sur la carte? 
-Programmation d'un système + 
-de déplacement style Ultima +Toutes ces questions sont trop difficiles à gérer dans un seul article, c'est pourquoi ce texte est séparé en deux parties: la première est consacrée à la création d'une carte et la seconde traite de son utilisation pour gérer les déplacements de l'équipe. 
-Pour réaliser un systéme de déplacement similaire à celui d'Ultima + 
-en GEA Basic, il faut résoudre un certain nombte de problémes techniques. +==== Définition des éléments graphiques ==== 
-Nous avons déjà vu que le codage de la carte peur être stocké + 
-dans un tableam numérique et les éléments graphiques de base dans +On suppose que les éléments graphiques de base ont été dessinés par un graphiste avec un logiciel de dessin type //Degas Elite// où équivalent. Nos précieux éléments sont donc stockés sur disque dans une image au format //Degas//, Le programme ''GENELEM,GFA'' lit l'image //Degas// ''ELEMENTS.P11'' et stocke les éléments graphiques dans un fichier binaire ''ELEMENTS.BIN'' réutilisable par un autre programme. 
-un tabléau alphanumérique, mais il reste bien des questions à etudier. + 
-Comment est-ce que les éléments graphiques sont stockes dans +La structure du fichier binaire est la suivante: 32 octets contenant la palette de couleur des éléments graphiques, un octet unique contenant le nombre d’éléments du fichier et le codage des éléments, chacun occupant 134 octets. La position (x,y) des éléments sur l'image est définie dans une série de DATA à la fin du programme, la fin des données étant signalé par la valeur -l 
-le tableau alphanumérique? Comment afficher rapidement là carte + 
-aussi bien sur un STF que sur un STE? Comment stocker les différéntes +<code freebasic> 
-données sur disque? Comment gérer les déplacements de +' ****************************** 
-l'équipé sur la carte? +* GENÉRATEUR FICHIER BINAIRE * 
-Toutes ces questions sont trop difficiles à gérer dans un seul article, +' *    ELEMENTS GRAPHIQUES     * 
-c'est pourquoi ce texte est séparé en deux parties: la première est consacrde +' ****************************** 
-à la créition d'une carte et la seconde traite de son utilsation +RESERVE 100000 
-pour gérer les déplacements de l'équipe, +DIM element$(200) 
-Définition des éléments graphiques +nb_elements%=0 
-On suppese que les éléments graphiques de base ont êté dessinés par +palette$=SPACE$(32) 
-un graphiste avec un logiciel de dessin type Degas Elite où equivalent. +
-Nos précieux cléments sont donc stockes sur disque dans une +@load_dzgas("ELEMENTS.PI1")
-image au format Degas, Le programme GENELEM,GFA lie l'image Degas +
-ELEMENTS.P11 et stocke les éléments graphiques dans un fichier +
-binaire ELEMENTS . BIN réucilisable par un autre programme. +
-La structure du fichier binaire est la suivante: 32 ocrets contenant la +
-palette de couleur des éléments graphiques, un oot unique conténant +
-le nombre d'élements du Hehier et le codage des éléments, chacun +
-oecupant 134 octets. La position (x,y) des éléments sur l'image +
-est définie dans une série de DATA à la fin du programme, la fin des +
-données étant signalé par la valeur -l +
-|l HRL NR S A RN +
-* GENÉRATEUR FICHIER BINAIRE * +
-HM ELEMENTS GRAPHIQUES # +
-LRNF RE RR E RE e e +
-RÉSERVE 100000 +
-DIM element${200) +
-nb elements“%=0 +
-palette$=SPACE4(32) +
-Bload dégas("ELEMENTS.PI1*)+
 @saisie_elements @saisie_elements
-@sauve elements({"ELEMENTS.BIN")+@sauve_elements({"ELEMENTS.BIN")
 END END
-e e 44 E RE W W E R W R R +' 
-* CHARGEMENT-IMAGE * +' ****************************** 
-DEGAS ELITE 8 +* CHARGEMENT IMAGE           
-E T T R P e e T o E E S +' *    DEGAS ELITE             * 
-FRAR N A r L AR ARk AR +' ******************************  
-* La palette est stockée dans la  +
-* variable globale palettes ,j +' *********************************
-UR RIRF REN RN R Rk RE É RE +* La palette est stockée dans la * 
-PROCEDURE !oad degas(nom$) +* variable globale palette$      * 
-palettef=SPACE4(32) +' ********************************** 
-OPEN "T",#1,nom$ +PROCEDURE load_degas(nom$) 
-SEEK #1,2 . +  palette$=SPACE$(32) 
-BGET #1 VARPTR(palette$}),37 +  OPEN "1",#1,nom$ 
-VOID XE10S(6,L-VARPTR(palette*)) +  SEEK #1,2 
-BGET #1,XB105{2},3#000 +  BGET #1,VARPTR(palette$),32 
-CLOSE #l +  VOID XBIOS(6,L:VARPTR(palette$)) 
-RETURR +  BGET #1,XBIOS(2),3#000 
-B o e E T e b É el RE +  CLOSE #l
-* GENERATION FICHIER BINAIRE * +
-“ ELEMENTS GRAPHIQUES & +
-d e e N AI E R RE N A +
-PROCEDURE sauve elements{fichier$) +
-LOCAL 1% +
-OPEN "o",#1,Tichier} +
-BPUT #1,VARPTR(palettet),32 +
-OUT #1,nb elements® +
-FOR i%=1 TO nb elements“ +
-BPUT #1 ,VARPTR(element5(15)},154 +
-MEXT i% +
-CLOSE #1+
 RETURN RETURN
-1 + 
-N T e RR E R P PR L TR R E o e R T +' ********************************** 
-i CHARGEMENT DES % +' * GENERATION FICHIER BINAIRE     * 
-* ELEMENTS GRAPHIQUES * +* ELEMENTS GRAPHIQUES            
-C e RE e dc d PE E E e E A R E R RS +' ********************************** 
-PROCEDURE saisi E__El ements +PROCEDURE sauve_elements{fichier$) 
-LOCAL ns +  LOCAL i% 
-LOCAL px%, pyi +  OPEN "o",#1,fichier$ 
-LOCAL px2%,py2% +  BPUT #1,VARPTR(palette$),32 
-nE=0 +  OUT #1,nb_elements
-RESTORE def elements +  FOR i%=1 TO nb_elements% 
-+    BPUT #1 ,VARPTR(element$(1%)},134 
-READ px+  NEXT i% 
-EXIT IF pai==1 +  CLOSE #1
-READ pys . +
-INC n +
-pxé4a=px=+ls +
-pyess=pystis +
-GET px%,py¥,px2%,pye%,elemants(n%) +
-LOOP +
-nb_élémentss=n +
-ATARI MAGAZIME m BEST OF GRA BASIC+
 RETURN RETURN
-| HLJNE SREE +' 
-i POSITION DES n +' ********************************** 
-* ÉLEMENTS GRAPHIQUES * +' * CHARGEMENT DES                 * 
-| ETEN eE ol e o R E +' * ELEMENTS GRAPHIQUES            * 
-def elements:+' ********************************** 
 +PROCEDURE saisie__elements 
 +  LOCAL n% 
 +  LOCAL px%, py% 
 +  LOCAL px2%,py2% 
 +  ' 
 +  n%=0 
 +  RESTORE def_elements 
 +  DO 
 +    READ px% 
 +    EXIT IF pa%=-1 
 +    READ py% 
 +    INC n% 
 +    px2%=px%+15 
 +    py2%=py%+15 
 +    GET px%,py%,px2%,py2%,element$(n%) 
 +  LOOP 
 +  nb_elements%=n% 
 +RETURN 
 +
 +' ********************************* 
 +' * POSITION DES                  * 
 +* ÉLEMENTS GRAPHIQUES           
 +' ********************************* 
 +def_elements:
 DATA 1,1 DATA 1,1
 DATA 18,1 DATA 18,1
Ligne 192: Ligne 149:
 DATA 52,1 DATA 52,1
 DATA 69,1 DATA 69,1
-DATA 66,1l+DATA 86,1
 DATA 1,18 DATA 1,18
 DATA 18,18 DATA 18,18
Ligne 199: Ligne 156:
 DATA 69,18 DATA 69,18
 DATA -1 DATA -1
-Programme EDITCART +</code> 
-Le programime EDITCART est un éditeur de carte virtuelle écrit entiérement + 
-en (FEA Basié: Tl sauve les cartes éditées dans des hchiers binaires, +==== Programme EDITCART ==== 
-pouvant être relus et exploités par d'autrés programmes. + 
-Ses fontions sont: lecture d’une carte à partir du disque, sauvegarde +Le programime EDITCART est un éditeur de carte virtuelle écrit entièrement en //GFA Basic//Tl sauve les cartes éditées dans des fichiers binaires, pouvant être relus et exploités par d’autres programmes. 
-de la carte courante sur disque, déplacement sur la carte, modification + 
-d'un élément quelconque de la carte, sélection d'un élément +Ses fonctions sont: lecture d’une carte à partir du disque, sauvegarde de la carte courante sur disque, déplacement sur la carte, modification d'un élément quelconque de la carte, sélection d'un élément graphique, affichage d'une boîte d'informations et option pour quitter le programme. Le tout est entièrement géré à la souris
-sraphique, affichage d'une boîte d'informations et aption pour quitter + 
-lc programme. Le tout est entiérément géré à la souris, +Attention: l'éditeur à besoin d'un fichier d’éléments graphiques pour fonctionnerExécutez le programme ''GENELEM'' avant d'utiliser ''EDITCART''. Le nom du fichier d’éléments graphiques est ''ELEMENTS.BIN'' par défaut, mais vous pourrez le modifier dans le code source d'EDITCART, ou ajouter une fonction permettant de charger n'importe quel fichier d'éléments graphiques. 
-Attention: l'éditeur à besoïn d'un fichier d’éléments graphiques pour + 
-foncrionnerExéeutéz le programme GENELEM avant d'utiliser EDITCART. +==== La simplicité n'est pas de ce monde ==== 
-Le nom du fichier d'élements graphiques est ELEMENTS.BIN + 
-par défaur, mais vous pourrez le modifier dans le code source +Initialement, cet éditeur a Été conçu pour être simple à utiliser et à comprendre. Hélas, il s'est avéré impossible d'écrire des routines d’affichages simples et performantes aussi bien sur STE que STF [dommage que tous les ST ne soient pas dotés de blitter). Les routines d'affichage de EDITCART utilisent donc des techniques de programmation un peu complexes à comprendre pour un programmeur debutant. 
-d'EDITCART, ou ajouter une fonction permettant de charger n'imparte + 
-quel fichier d'éléments graphiques. +==== Un système d’affichage simple ==== 
-La simplicité n'est pas de ce monde + 
-Initialement, cet éditeur a Été conçu pour être simple à utiliser et à +La première méthode qui vient à l'esprit est de ré afficher entièrement l'écran après chaque déplacement. Dans l’exemple qui suit, le codage de la carte est stocké dans le tableau //CARTE|()// et les éléments graphiques de base dans le tableau //ELEMENT$()//. La procédure //aff_carte// dessine la carte sur l'écran. 
--:-:-mprr:nfln:. Hélas, il s'est averé impossible d'écrire des routines d’affichages + 
-simples et performantes aussi bien sur STE que STF [dommage +La position du morceau de carte visible par rapport à la carte virtuelle cst contenu dans les variables //ligne_carte// et //colonne_carte//. 
-que tous les ST ne soient pas dotés de blitter). Les routinés + 
-d'affichage de EDITCART utilisent donc des techniques de programmation +En mettant //ligne_carte// et //colonne_carte// à 1, le côté haut gauche de la carte est affiche sur l'ecran. 
-un peu complexes à comprendre pour un programmeur + 
-debutant. +Pour déplacer la carte d’une position vers la droite, il faut incrémenter la variable //colonne_carte// de 1 et appeler de nouveau //aff_carte//
-Un système d’affichage simple + 
-La première méthode qui vient à l'esprit est de réafficher entiérement +Pour déplacer la carte d'une position vers le bas, il faut incrémenter //ligne_carte// et exécuter //aff_carte//. 
-l'écran après chaque déplacement. Dans l’evemple qui suit, le + 
-codage de la carte est stucké dans le tableau CART E|() et les éléments +Remarque: la position (1, 1) correspond au premier indice du tableau contenant la carte, grâce à l’instruction OPTION BASE 1 Sans celle-ci, le premier indice du tableau a la position (0,0). 
-graphiques de base dans le tableau ELEMENTS(). La procedure + 
-Gaff carte dessine la carté sur l'écran. +Le morceau de carte visible est affiché à l'écran à la position définie par les variables xcarteet ycarte%. Etant donné là structure interne de la mémoire vidéo et la manière dont fonctionnent les instructions graphiques du //GFA Basic//, il est préférable d'utiliser une position d'affichage en x multiple de 16, afin d'accélérer la vitesse d'exécution. 
-La pésition du morceau de carte visible par rapport à la carte virtuelle + 
-cst contenu dans les variables lîgne carte ec colonne_carte. +<code freebasic> 
-En mettant Tigne carte ot colonne carte à 1, lé côté haut gauche +OPTION BASE 1 
-de la carte est affiche sur Pecran+
-Pour déplacer là carte d’une position vers la droite, il faut incrémenter +xcarte%=16 
-la variable colonne liane de 1 et appeler de nouveau +ycarte%=5 
-@aff carte+' 
-Fnur_q:'LËFÏ:m':,la carte d'une position vers le bas, il faur incrementer +ligne carte%=30 
-ligne carte er exécuter Baff carte+colonne_carte%=67 
-Remarque: la position (1, 1) correspond au premier indice du tableau +
-conténant la carte, grice à l’instruction OPTION BASE 1 Sans celle- +@aff_carte
-ci, le premier indice du tableau a la position (0,0). +
-Le morceau de carte visible est affiché à l'écran à la position définie +
-par les variables xcarteet ycarte*. Etant donnd là sccucture interne +
-de la mémoire vidéo et la manière dont fonctionnent les Instruetions +
-graphiques du GE4 Basic, il est préférable d'utiliser une position +
-d'affichage en x multiple de 16, alin d'accélérer la vitesse +
-d'exécution. +
-OFTION BASE 1 +
-scartes=16 +
-vcarté%=5 +
-ligne cartes=30 +
-cn]unng_cart&%=ñ? +
-éaff carte+
 END END
-PROCEDURE aff carte i + 
-LOCAL 1%,c0+PROCEDURE aff_carte 
-LOCAL 1ignes +  LOCAL l%,c
-LOCAL colonne% +  LOCAL ligne% 
-LOCAL nums +  LOCAL colonne% 
-LOCAL posx +  LOCAL num% 
-LOCAL posy® +  LOCAL posx% 
-posyesycartes +  LOCAL posy% 
-ligne¥=ligne cartes +  ' 
-FOR 1=1 TO 11 +  posy%=ycarte% 
-posx#=xcartes +  ligne%=ligne_carte% 
-colonne*=colonne carte* +  FOR l%=1 TO 11 
-FOR c%=1 TO 11 +    posx%=xcarte% 
-numé“carte| (colonne®, ligne#+    colonne%=colonne_carte% 
-PUT posx%,posy&,elements{(numé+    FOR c%=1 TO 11 
-INC colonnes +      num%=carte|(colonne%, ligne%
-ADD posx%,16 +      PUT posx%,posy%,element${(num%
-NEXT c& +      INC colonne% 
-INE ligne= +      ADD posx%,16 
-ADD posyé,16 +    NEXT c% 
-NEXT 1%+    INC ligne% 
 +    ADD posy%,16 
 +  NEXT l%
 RETURN RETURN
-Pour gérer les déplacements, il suffit d’avoir une série de procédures +</code> 
-modifiant les variables de position en fonction de la direction de + 
-déplacement. Pour des misons de sécurité, ces procédures doivent +Pour gérer les déplacements, il suffit d’avoir une série de procédures modifiant les variables de position en fonction de la direction de déplacement. Pour des misons de sécurité, ces procédures doivent contrôler que le déplacement ne se fasse pas en dehors des limites de la carte. 
-controler que le -l:ié[;];mt‘.m:m né sé fasse pas en dehors des limites de + 
-la carte. +<code freebasic> 
-ATARI MAGAZINE H BEST OF GFA BASIC +PROCEDURE aller_haut 
-PROCEDURE aller haut +  IF ligne_carte%<>
-IF ligne cartes==+    DEC ligne_carte% 
-DEC 1igne cartes +    @aff_carte 
-Baff carte +  ENDIF
-ENDIF+
 RETURN RETURN
-PROCEDURE aller bas +
-IF ligne cartese=ligne max® +PROCEDURE aller_bas 
-INC ligne carte+  IF ligne_carte%<>ligne_max% 
-Baff carte +    INC ligne_carte
-ENDLF+    @aff_carte 
 +  ENDIF
 RETURN RETURN
-PROCEDURE aller gauche +
-1F colonne cartesss-+PROCEDURE aller_gauche 
-DEC calonne cartes +  IF colonne_carte%<>
-Baff carte +    DEC colonne_carte% 
-ENDIF+    @aff_carte 
 +  ENDIF
 RETURN RETURN
-PROCEDURE aller droite +
-IF colonne carte*=- +PROCEDURE aller_droite 
-INC colonne cartes +  IF colonne_carte%<>1 
-Gaff carte +    INC colonne_carte% 
-ENDT F+    @aff_carte 
 +  ENDIF
 RETURN RETURN
-Ce système est parfait sur le papier, mais une fois mis en ceuvre, il se +</code> 
-révéle trop lent pour une utilisation pratique, cas de figure fréquent + 
-en informartique, La solution passe par une amélioration du principe +Ce système est parfait sur le papier, mais une fois mis en oeuvre, il se révèle trop lent pour une utilisation pratique, cas de figure fréquent en informatique. La solution passe par une amélioration du principe de base. 
-de base. + 
-Un redessin partiel de la carte +==== Un redessin partiel de la carte ==== 
-On peut gagner du temps en ne redessinant qu'une partie de la carte. + 
-Lors d'un déplacement vers la droite, la colonne 1 disparaît de +On peut gagner du temps en ne redessinant qu'une partie de la carte. Lors d'un déplacement vers la droite, la colonne 1 disparaît de l'écran et les colonnes 2 à 11 sont décalées d'une position vers la gauche, le programme ne dessine vraiment que la nouvelle colonne 11, De la même manière, lors d'un déplacement vers la droite, seule la colonne 1 est nouvelle, Puisqu'une partie de la carte est juste décalée, au lieu de le redessiner, on peut la déplacer en une seule opération graphique. L'une des solutions possible est de lire la portion de carte avec l'instruction ''GET'' et de l’afficher à sa nouvelle position avec ''PUT''.  
-l'écran et les colonnes 2 à 11 sont décalées d'une pasition vers la + 
-gauche, le programme ne dessine vraiment que la nouvelle éolônne +Cette technique fonctionne, mais présente un inconvénient d'ordre esthétique, L'oeil humain est un outil très perfectionné qui est capable d'analyser et de décomposer la structure d'un mouvement rapide.  
-11, De la même manière, lors d'un déplacemient vers la dronté, +C'est souvent un avantage, mais dans notre cas particulier, c’est un inconvénient: si la routine d'affichage travaille en deux étapes, cela produit un effet graphique nuisible visible. Pour éviter cela, il faut que l’affichage s’effectue en une seule fois et le plus rapidement possible
-seule la colonne 1 est nouvelle, Puisqu'une partie de la carte est justé + 
-décalée, au licu de le redessiner, on peut la déplacer en une seulc +La seule manière d'obtenir un affichage rapide est de réaliser les opérations graphiques en mémoire et de les recopier rapidement sur l'écran en une seule opération. Afin d’obtenir un résultat graphique encore meilleur, le programme ''EDITCART'' utilise une variante de cette technique: il dessine la carte dans un écran virtuel, puis change l’adresse de la mémoire écran par l'adresse de cet écran virtuel. Ainsi, on évite de recopier l'image sur l'écran. 
-opération graphique. L'une des solutions possible est de lire la portion + 
-de carte avec l'instruction GET er de l’afficher à sa nouvelle position +La fonction ''XBIOS(5)'' permet de changer l'adresse de la mémoire écran. Sur un STE cette adresse peut être quelconque, alors que sur un STF elle doit obligatoirement être un multiple de 256. L'adresse initiale de l’écran est multiple de 256. Il faut créer une zone de 32000 octets pour l'écran virtuel. L’instruction ''MALLOC'' permet d'allouer une zone mémoire de n octets. Cette zone mémoire commence obligatoirement à une adresse pairePour obtenir une adresse multiple de 256, il faut déclarer avec ''MALLOC'' une zone de 32255 octets et masquer les deux derniers bits de l'adresse Le résultat est une adresse multiple de 256 qui ports sur une zone mémoire de 32000 octets contenus dans la zone mémoire de 32255 octets déclarée par le programmeC'est un peu compliqué mais cela marche bien. 
-avec PUT, + 
-Cette technique fonctionne, mais présente uñ inconvénient d'ordre +<code freebasic> 
-esthétique, L'oeil humain est un outil trés perfectionné qui est capable +adr_tampon%=MALLDC(32255) 
-d'analyser et de décomposer la structure d'un mouvement rapide. +adr2%=(adr_tampon%+255) AND &HFFFFFF00 
-C'est souvent un avantage, mais dans notre cas particuliér, c'ést +</code> 
-un inconvénient: si la routine d'affichage travaille en deux étapes, cela + 
-produit un effet graphique nuisible visible. Pour éviter cela, il faut +Les variables //adrl%// et //adr2%// contiennent l'adresse des deux écrans. La variable //adr1%// contient l'adresse initiale de la mémoire écran et //adr2%// contient l'adresse de l’écran virtuel de 32000 octets. L'affichage se fait en bascule. Lorsque l’adresse de la mémoire écran est positionnée sur //adr1%//, l'image de la nouvelle carte est dessinée dans //adr2%// Lorsque l’adresse de la mémoire écran est positionnée sur 
-que l’affichage s'effectne en une seule fois et le plus rapidement possible, +//adr1%//, l'image de la nouvelle carte est dessinée dans //adr1%//
-La seule manière d'obtenir un affichage rapide est de réaliser les + 
-opérations graphiques en mémoire et de les recopier rapidement sur +Lorsque le programme a terminé de dessiner une image en mémoire, il change l'adresse de la mémoire écran grace à l’instruction ''XBIOS(5)''Attention: la fonction ''XBIOS(5)'' peut être appelée à tous moment par le programme, mais le gestionnaire d’écran ne change l'adresse de la mémoire écran que lorsque l'image courante à été entiérement dessinée, St vous utilisez trop rapidement l'instruction ''XBIOS(5)'', seul le dernier changement de mémoire d'écran sera pris en compte. Pour éviter ce probléme, aprés avoir utilisé ''XBIOS(5)'', il faut attendre que le gestionnaire d'écran ait affiché entièrement l'image écran. Ce test est réalisé avec l'instruction ''VSYNC'' Celle-ci bloque l'exécution du programme tant que le gestionnaire d'écran affiche l’image courante (il y à 50 images affichés par seconde). 
-Pécran en une setle opétration. Afin d'obrenir un résultat graphiqué + 
-encore meilleur, le programme EBITCART utilise une variante de cetté +<code freebasic> 
-technique: il dessine la carte däns un écran virtuel, puis change +VOID XBIOS(5)
-l’adresse de la mémoire écran par l'adresse de cet écran virtuel. Ainst, +
-on évité de recopier l'imagé sur l'écran. +
-La fonction XBI0S(5) permet de changer l'adresse de la mémoire +
-écran. Sur un STEE cette adresse peut être quelconque, alors que sur +
-un STE elle doit obligatoirement être un multiple de 256. L'adresse +
-initiale de l’écran est multiple de 256. Il faut créer une zone de 32000 +
-Dclets pour l'écran virtuel. L'inscruction MALLOC permet d'allouer +
-une zonc mémoure de à octéts Cette zone métnoire commence oblipatoirement +
-à une adresse pairePour obtenir une adresse multiple +
-de 256, 1] faut déclarer avec MALLOC une zone de 32255 octets ct +
-masquer les deux derniers bits de l'adresse Le résultar est une adresse +
-multiple de 256 qui ports sur une zoné mémoire de 32000 octers +
-contenus dans la zone mémoite de 32255 octets déclarée par le programme+
-C'est un peu compliqué mais cela marche bien, +
-adr tampon#=MALLDC(32255) +
-adré#=(adr tampon%+255) AND KHFFFFFFO0 +
-Les vartables adrl% et adr2% contiennent l'adrésse des deux écrans. +
-La varable adr1% contient l'adresse inimiale de la mémoire écran et +
-adr?contienr l'adresse de l’écran virtuel de 32000 octers. L'atfichagé +
-se [ait en bascule. Lorsque l’adresse de la mémoire ééran est post +
-tionnée sur adrl®, l'image de la nouvelle carte est dessinée dans +
-adr?% Lorsque l’adresse de la mémoire écran est positionnée sur +
-adrls, l'image de la nouvellé carte est dessinée dans adriér +
-Lorsque le programme a terminé de dessiner nne image en mémoire, +
-change Padresse de la mémoire écran grace à l'mnstrucrion +
-XB10S(5}Artention: la fonction XBI0S(5) peur être appélée à rous +
-moment par le programme, mais le gestionnaire d'éctan ne change +
-Padresse de la mémoireécran que lorsque l'image courante à ét éentiérement +
-dessinée, St vous urilisez trop rapidement l'instruction +
-XBIOS(5}, seul le dernier changement de mémoire d'écran sera pris +
-én compré. Pour éviter ce probléme, aprés avoir wrilisé XBI0S(5), il +
-faut attendre que le gestionnaire d'écran aic affiché entierement +
-l'image écran. Ce test est réalisé avec l'mstruction VEYNC Celle-er +
-bloque l'exécution du programme tant que le gestionnaire d'écran atfiche +
-l’image courante (il y à 50 images affichés par seconde). +
-vOID XBIOS(5)+
 VSYNC VSYNC
-Format de sauvegarde des cartes +</code> 
-Les cartes génerées par EDITCART ont une taille de 30 lignes de 60 colonnes. + 
-Four changer fa taille, 1l faut modifier les variables nb_colonnes +==== Format de sauvegarde des cartes ==== 
-et nb Tignes sans dépasser les limites du tableau carte( + 
-700,75). +Les cartes générées par ''EDITCART'' ont une taille de 30 lignes de 60 colonnes. Pour changer fa taille, 1l faut modifier les variables //nb_colonnes// et //nb_lignes// sans dépasser les limites du tableau //carte(700,75)//. 
-Les cartes d'EDITCART ont le formar suivant: 19 octers conténant la + 
-chaîne CARTE JdR ATARI MAG" un octer contenant le nombre de +Les cartes d'''EDITCART'' ont le format suivant: 19 octets contenant la chaîne "CARTE JdR ATARI MAG" un octet contenant le nombre de colonnes, un octet contenant le nombre de lignes et le codage de la carte (la taille de ce codage est égal à nb_colonnes x nb_lignes octets). La chaîne est un en-tête d'identification. 5i vous tentez de lire un fichier n‘avant pas d'en-tête, le programme affiche un message d'erreur. Le nom d'une carte doit  impérativement avoir une extension ''.CAR'', ne l'oubliez pas au moment de taper de la carte à sauver (c'est l'unique moment où l'éditeur utilise le clavier). 
-calonnes, un octet contenant le nombre de lignes et le codage de la + 
-carte (là taille de cé codage est égal à nb colonnesxnb |îgnes ot +=== Programme Complet === 
-tets). La chaîne est un en-tête d'identification. 5i vous tentez de lire + 
-un fichier n‘avant pas d'en-tête, le programme affiche un message +<code freebasic> 
-d'érreur. Le nom d'une carte doit impérativement avoir uné excenson +' ****************************** 
-.CAR, ne l'oubliez pas au moment de taper de la carte à sauver +' *       EDITEUR DE CARTE     * 
-(c'est l'unique moment où Péditeur utilise le clavier). +' *       POUR JEU DE RÔLE     * 
-ATAR| MAGAZINE m BEST OFGFA BASIC +' *        STYLE ULTIMA        
-| HÉVÉENVÉATAETETETTTENNAETEREETAEE E +' ****************************** 
-EDITEUR DE CARTE ñ +' * (C) 1991 ATARI MAGAZINE    
-POUR JEU DE RÔLE = +* (C) 1991 PATRICK LECLEREQ  * 
-st STYLE ULTIMA * +' ****************************** 
-L é d e e e 46 ok e e e e d d d e SE SE e ol e e e R +'
-“ % - (C) 1991 -ATARI MAGAZINE * +
-* (C) 1991 PATRICK LECLEREG # +
-RR B b R E RR RR E R RR RR RE EF E+
 RESERVE 100000 RESERVE 100000
 +'
 OPTION BASE 1 OPTION BASE 1
-DIM element$ (200) +DIM element$(200) 
-adr tampon&=MALLOC(32255) +
-ad?2%=[adr_tamflun%+255AND SHFFFFFFOO +adr_tampon%=MALLOC(32255) 
-adr1*=XB105{#+adr2%=(adr_tampon%+255AND &HFFFFFFOO 
-nb colonness=60 +adr1%=XBIOS{2
-nb_lignes*=30+nb colonnes%=60 
 +nb_lignes%=30
 DIM carte|(200,75) DIM carte|(200,75)
-Gmair+
 +@main
 VOID XBIOS(5,L:adrl%,L:adrl%,-1) VOID XBIOS(5,L:adrl%,L:adrl%,-1)
 CLS CLS
 VOID MFREE(adr tampon%) VOID MFREE(adr tampon%)
 END END
-PROCEDURE set ecr Tog(adr ecrans+
-VOID X810$(5,L:adr ecrans,L:-1,-1)+' ----------------------------------- 
 +PROCEDURE set_ecr_log(adr ecran%
 +  VOID XBIOS(5,L:adr_ecran%,L:-1,-1)
 RETURN RETURN
-PROCEDURE set ecr phys([adr ecran+
-VOID XBIOS(5,L:-1,L:adr ecran*,-1)+PROCEDURE set_ecr_phys([adr ecran%
 +  VOID XBIOS(5,L:-1,L:adr_ecran%,-1)
 RETURN RETURN
-— — ===" c=s cs — e ] e e e e e C +' 
-A 045446 GRR A UE UE É ÉÉ R AN RE E E S +' ----------------------------------- 
-ATTENTE ARRET CLIC SQURIS * +*********************************** 
-1 el e e e o e e e e e e e d Sl et e e r ol +' *    ATTENTE ARRET CLIC SQURIS    
-PROCEDURE attbclac +' *********************************** 
-i) +PROCEDURE attOclic 
-EXIT IF MOUSEK=0 +  DO 
-LOUP+    EXIT IF MOUSEK=0 
 +  LOOP
 RETURN RETURN
-PROCEDURE Euurîa_fleche +
-DEFMOUSE 0+PROCEDURE souris_fleche 
 +  DEFMOUSE 0
 RETURN RETURN
-PROCEDURE souris abeïlle +
-GEFMOQUSE Z+PROCEDURE souris_abeille 
 +  DEFMOUSE 2
 RETURN RETURN
-| e e e ke o i E o o RE S R ok RR RN +' 
-‘% TEST CLIC SUR ZONE ÉCRAN * +' ************************************ 
-A A A A r P e S S o d e m LT +' *    TEST CLIC SUR ZONE ÉCRAN      
-FUNCTION tstzone(x*,y%,px5pyétxstyf+' ************************************ 
-LOCAL results +FUNCTION tstzone(x%,y%,px%py%tx%ty%
-result%=l +  LOCAL result% 
-IF xe<pxs — +  ' 
-resu]t*=0 +  result%=l 
-ENDIF +  ' 
-IF x4=px&ttx+-1 +  IF x%<px% 
-result#+    result%=0 
-ENDIF +  ENDIF 
-LF yésepys +  IF x%>px%+tx%-1 
-result#=0 +    result%=
-ENDIF +  ENDIF 
-IF yve=pysitys-l +  IF y%<py% 
-result=eD +    result%=0 
-ENDIF +  ENDIF 
-RETURN resuLl+  IF y%=py%+ty%-l 
-ERDFUNE +    result%=0 
-I B o A S ARl e B e o be +  ENDIF 
-' * EFFACEMENT ECRAN +  RETURN result
-| NAAAÉERERF REÉSEREE RTEN +ERDFUNC 
-PROCEDURE cls _ ecran(+
-DEFFILL c% +' ************************************ 
-FBOX 0,0,319,199+' * EFFACEMENT ECRAN                 * 
 +' ************************************ 
 +PROCEDURE cls_ecran(c%
 +  DEFFILL c% 
 +  FBOX 0,0,319,199
 RETURN RETURN
-# +' 
-Ah b o i i E É É e i e e e S A RR AT +' ************************************ 
-AFFICHAGE CADRE GRAPHIQUE w +   AFFICHAGE CADRE GRAPHIQUE     * 
-| RR L e R LR S E +' ************************************ 
-PROCEDURE cadre[px%, pys,tx%, tyd, f=,+PROCEDURE cadre(px%,py%,tx%,ty%,f%,b%
-LOCAL pxé%, pyes +  LOCAL px2%, py2% 
-pxés"pxe+txe=l +  ' 
-pyés=pyésttys-1 +  px2%=px%+tx%-1 
-DEFFILL f # +  py2%=py%+ty%-1 
-FEOX pxS,0V5pad%spyas +  DEFFILL f% 
-COLOR  +  PBOX px%,py%,px2%,py2% 
-BOX px%,py%,px2%,pyd%+  COLOR b% 
 +  BOX px%,py%,px2%,pyd%
 RETURN RETURN
-| ERRRREAA TR RR AN N EEFE +' 
-“ * AFFICHAGE MESSAGE +************************************ 
-DANS ROITE DE CLIC +' *         AFFICHAGE MESSAGE        * 
-1 ETENESÉ É R +       DANS BOITE DE CLIC        * 
-PROCEDURE aff boite(ptxad,% ty,f, pFésyDéssa m+' ************************************ 
-LOCAL pxespyes +PROCEDURE aff_boite(px%,py%,tx%,ty%,f%,b%, m$
-LOCAL xaff=,yaff4 +  LOCAL px2%py1% 
-pXx24=ox=+Lx==-1 +  LOCAL xaff%,yaff% 
-pyeés=pyt+tys-1 +  ' 
-xaffs=pxt+(tx5-LEN(m$}#8)/2 +  px2%=px%+tx%-1 
-yaffa-pyetôt(tyt-7)/2 +  py2%=py%+ty%-1 
-ATARI MAGAZIME H BEST-OF GRA BASIC +  ' 
-+  xaff%=px%+(tx%-LEN(m$}*8)/2 
-¥ +  yaff%=py%+6+(ty%-7)/2 
-DEFFILL 3+  ' 
-PEOX px%,pyepréspyés +  DEFFILL f
-COLOR b* +  PBOX px%,py%px2%py2% 
-EOX px* pytpX24 pyd=x +  COLOR b% 
-TEXT xafvafffä,*mf+  BOX px% py%px2% py2% 
 +  TEXT xaff%,yaff%,m$
 RETURN RETURN
-| IRRFN ENF F +' 
-* CHARGEMENT DU FICHIER BINAIRE % +************************************* 
-! + CONTENANT LES ELEMENTS GRAPHIQUES * +' *   CHARGEMENT DU FICHIER BINAIRE   * 
-I ORRÉÉÉÉTARARRE NN RR E E RRARERARA RE +' * CONTENANT LES ELEMENTS GRAPHIQUES * 
-PROCEDURE charge elements({fichierf+' ************************************* 
-LOCAL n% +PROCEDURE charge_elements({fichier$
-LOCAL palettet ; +  LOCAL n% 
-palettet=SPACE$(32} +  LOCAL palette$ 
-OPEN "1" ,#1,fichierf +  ' 
-BGET #1,VARPTK(palette$),32 +  palette$=SPACE$(32) 
-VOID XBIOS (6;L:VARPTR(palette$)) +  OPEN "1" ,#1,fichier$ 
-nb elementsi=INP{#1) +  BGET #1,VARPTR(palette$),32 
-FOR n%=1 TD nb_elements* +  VOID XBIOS (6;L:VARPTR(palette$)) 
-element$(n%)=5PACE$ (134) +  nb_elements%=INP{#1) 
-BGET #1,VARPTR(element#(n#}},134 +  FOR n%=1 TO nb_elements% 
-MEXT n% +    element$(n%)=SPACE$(134) 
-CLOSE #1+    BGET #1,VARPTR(element$(n%)),134 
 +  NEXT n% 
 +  CLOSE #1
 RETURN RETURN
-L EACAAUARERE S R RR E RE RV e e d d d e +' 
-* * INITIALISATION DE LA CARTE * +
-| RE d e d e e e R e A E +************************************ 
-PROCEDURE init carte +* INITIALISATION DE LA CARTE       
-ARRAYFILL carte[(),l+' ************************************ 
 +PROCEDURE init_carte 
 +  ARRAYFILL carte|(),l
 RETURN RETURN
 +'
 D R e b L e R S R o D R e b L e R S R o
 ' * AFFICHAGE IMAGE EDITEUR * ' * AFFICHAGE IMAGE EDITEUR *
Ligne 806: Ligne 735:
 xcartes=6 xcartes=6
 vcartes=l= vcartes=l=
-Gcharge elements ("ELEMENTS.BIN®) +  @charge_elements ("ELEMENTS.BIN®) 
-@init carte +  ' 
-HIDEM +  @init_carte 
-GRAPHMODE 2 +  HIDEM 
-@aff ecran +  GRAPHMODE 2 
-@aff carie +  @aff_ecran 
-BMOVE XBIOS(Z2),adr2%,32000 +  @aff_carte 
-@souris fleche +  BMOVE XBIOS(2),adr2%,32000 
-SHOWM +  ' 
-etats=1 +  @souris_fleche 
-@gestion eciteur+  SHOWM 
 +  etat%=1 
 +  @gestion_editeur
 RETURN RETURN
-Pour finir +</code>
-Nous verrons le mois prochain comment uriliser les cartes générées +
-par EDITCART pour gérer les déplacéments d'une équipe de personnagés +
-sur un monde virruel (affichage de l'image de l'equipe sur la +
-carte, gestion des rencontres, interdictions où Autorisation de deplacements +
-sur certaines cases, e'n:] Vous trouverez én E:ËlÈ:härg,Emflnl: +
-sur le 3615 ATARI les listings de l’article, un exemplé de carte et +
-une image Degas contenant quelques éléments de dessin. +
-Patrick Leclereq +
-TOUS LES LISTINGS +
-ET IMAGES +
-DE CE +
-BEST OF +
-GFA BASIC +
-SONT +
-DISPONIBLES EN +
-TELECHARGEMENT +
-Ë +
-PROGRAMMATION +
-JEU DE ROLE (I +
-Un jeu de rôle fonctionnel +
-Voici un petit jeu de rôle type Ultima ou Fantaisy où le joueur se +
-déplace sur une carte de grande dimension et fait de +
-dangereuses rencontres. +
-- Présentation du jeu +
-Le joueur gére les déplacements d'un personnage dans un univers de +
-tvpe médiéval-lantastique Cet univers &l représenté sous la lorme +
-d'une carte de grande dimension dessine avec des éléments graphiques +
-de base (arbre, maison, montagnes, lacs, ete.) La carte est créce +
-avec lc programme EDITCART (voir jeu de rôle II). +
-La carte est trop grande pour être dessinée entière à l’écran. Le programme +
-en affiche juste une petité portion, représentant les environs +
-Ce dernier se trouve au milieu de l'image visible. Les déplacements +
-sont réalises en scrollant l'image de la carte +
-L'image de la carte est fabriqué avec 11x11 éléments graphiques mesurant +
-chacun 16<16 pixels. Elle mesure 176x176 pixels. +
-e S e et T el s e E + +
-| #mmmmmm e PE L e d l + | +
-| | | | | +
-| | I | | +
-| | Dessinde | [ Zone de | | +
-I'| la carte | | messages | | +
-| | (] | | +
-| | | | | | +
-| trmme m————m— F f-=snmmmmmmm e +
-i E n t RSP 0 r Bl e + +
-Les fleches du pave numérique servent à indiquer la direction du déplacement. +
-Le programme interdit le déplacement sur cercains types +
-de case (plans d'eau &c montagnes). +
-Lors d'un deplacement, le personnage peut faire des rencontres, Celles- +
-ci peuvent étre bénéfiques, neutres ou hostiles. Leur nature dépend +
-du cvpe de case sur laquelle se tient le personnage. La plaine est +
-bats entre le personnage et les créatures de rencontres. Voir l’article +
-jeu de rôle IV qui présente un systeme permettant de simuler un +
-combat entre le personnage et une créature quelconque Vous pours +
-rez fusionner GESCARTE er le syatème de combat pour obténir un +
-veritablé deplacernent avec rencontres ec combat, +
-Programmation de Gescarte +
-Ce logiciel à été programmé en GE4 Basic 3.5E, mais il est entièrement +
-compatible avec toutes les versions du GFÀ Basic à partir de la +
-version 3.0. Le code source fait plus de 1000 lignes de programme. +
-Ce programme urilise le graphisme, stocke des données sur disque et +
-lit des données à partir du clavier. Il n'utilise mi la souns, à les fonc- +
-'.'.i.[_]]'l.!:i L8] i (] S l'jîl S'T +
-Les données graphiques du programme +
-Le programme GESCARTE à besoin d'un certain nombre de données +
-praphiques. Comme elles ne peuvent être défimes dans le programme, +
-elles sont stockées dans des fichiers. Leur contenu est chargé en +
-mémoire au début du programme. Ces fichiers sont ELEMENTS. BIN, +
-CARTE.CAR et PERSO.HIN, +
-Le fichier graphique ELEMENTS.BIN +
-Ce fichier contient les elements graphiques de 16x16 pixels servant à +
-dessiner l'image de la carte, Ces éléments graphiques sont créées à +
-partir d'une image Depas Elite. +
-La éréation se fait avec l’utilitaire GENELEM.GFA (voir jeu de rôle IT). +
-[a structure du fichier ELEMENT .BIN est la survante : 32 octets contenant +
-la palerte de couleur des éléments, 1 octet contenant le nombre +
-d'éléments du fichier et les éléments graphiques (134 octers par éléun +
-éndroit assez calme ol la majeure parte des rencontres sont mént), La taille d'une variable alphanumérique contenant un bloc de +
-neutres. Par contre, la foret est un endroit dangereux où rodent tou- | 16x16 pixels est de 134 cetérs. Cetre taille peut être mesurée avec la +
-tes sortes de créatures ef de monstres. Le programme affiche les ren- | fonction LEN. +
-contres dans une fenêtre graphique située à droite de la carte. +
-[Jans la version actuéllé. de GESCARTE toutes les rencontres sont | GET 1,1,16,16,block +
-PRINT LEN(bloc$) +
-ATART MAGAZINE H BEST OF GRA BASIC +
-UR SUR LE | 3615 ATARI | XEN AAAAAERESE +
-: # PROCEDURE PRINCIPALE * +
-| RE TR ETEN NTRAEREF +
-PROCEDURE main +
-neutres car la place manqu.alt pour écrire un systeme gerant les com- +
-+
-ATAR| MAGATINE m BEST GF GFA BASIC j +
-La procédure @charge elements{fichier$) charge dans le cableau +
-alphanumérique element+{[) les dléments stockes dans le fichier fichierf. +
-Le nombre d’éléments changés est éerit dans la varable globale +
-nb elementss. +
-DIM element$(200) +
-PROCEDURE charge elements(Tichier§) +
-LOCAL n% +
-LOCAL palettes +
-palettef=SPACFS5(32) +
-OPEN “1" #1,fichierf +
-BGET #1,VARPTR(palette$},32 +
-VOID XBIOS(6,L:VARPTR(palette$)) +
-nb élements®=INP{#1} +
-FOR n%=1 TO nb elementss +
-element$#{n&}=SPACES (134) +
-BGET é1,VARPTR(elementS(n)),134 +
-NEXT n% +
-CLOSE #1l +
-RETURN +
-La palette de couleurs est chargée dans une chaîne aiphanumérique +
-de 32 caractères. L'instruction SPACES permet de créer une vanable +
-de taille quelconque. Les 32 ocrets de la palette sont chargés avec +
-l'instruction BGET, +
-palettes=SPACE${3#+
-BGET #1,VARPTR(palette$),32 +
-La taillé de la chaîne de catacrères doit être obligatoirement égale ouù +
-supérieure au nombre d'octets chargés en mémoire, Il peut ÿ avoir +
-n'importé quoi stocké cn mémoire après l'adresse de la chaine de caractère. +
-Un miauvais chargement peut ééraser pu modifier des variables +
-importantes. Clest une excellente méthode pour créer un +
-‘bue fuetif* très chfficile à crouver, +
-L'insceuction XBI0S(6) permer de remplacer la palétte de couleur +
-systëme par la palette de couleur des éléments graphiques, +
-VOID XRIOS(6,L:VARPTR(palette$)) +
-Le nombre d'éléments du fichier est lu grice à l'instruction INR Celle- +
-ci permer de lire la valeur d'un octet à partir d'un fichier. +
-b _elements*-INP(#1) +
--y i F] ] Lec éléments sont charvés les uns aprés les autres, La zone mémoire +
-de 134 octers nécessaire au stockage d'un élement graphiqué est +
-réservéc avec l'instructon SPACES. +
-FOR n%=1 TO nb elementss +
-elements (n%) =SPACES {134} +
-BGET #1,VARPTR(element$(n%)),134 +
-NEXT m +
-Les éléments graphiques ont été stockés en mémoiré avec l'instruc +
-tion GET. Pour afficher un élément graphique sur l’écran, 1l faur atiliser +
-l'instruction PUT. L’exemple suivant affiche l’élément numéro ! +
-du tablean element$(} à la position (10,10/+
-PUT 10,10,element${1) +
-Le fichier CARTE.CAR +
-Le fichier CARTE.BIN contient la deseription de la carte. Il est gÊnEnË +
-par l'éditeur de carte EDITCART, +
-La structure de ce fichier est la suivante un en-tête d'identification +
-de 19 caractères, un octet contenant le nombre de colonnes de la carte, +
-un octet contenant le nombre de lignes de la carte et le codage de +
-la carte proprement dit. Les éléments sont stockes ].Ïgn& 3 EgflE:. +
-l'en-tête d'idennfication est la chaîne de caractère “CARTE JdR +
-ATARI MAG* Cette chaîne peut servir à contrôler si le fichier lus +
-contient bien une cartée. +
-La carte est stockde &n mémoire dans le tableau carte|(). Ce tableau +
-est du type entier court {entier & bits). Etant donné qu'un entier +
-court ne peut prendre que 256 valeurs (de 0 à 255), il ne peut y +
-avoir que 256 éléments possibles. +
-DIM carte|(200,75) +
-Les dimensions du tableau carte|{) sont fixés arbitrairement à 200 +
-lignés de 75 éléments. 5i vous désirez avoir une carte plus grande, 1l +
-faut augtnenter les dimensions du tablean. +
-La procédure Bcharge carte[nomf) charge en mémoire la carte +
-stockée dans le fichier nom$. Les dimensions de la carte sont écrites +
-dans les variables globales nb Tignes®er nb_colonness. +
-PROCEDURE charger carte(nomt) +
-LOCAL entétet +
-LOCAL 1%,c% +
-OPEN "I",#1,noms +
-entetef=SPACE4(19) +
-BGET #1,VARPTR(entetet},19 +
-nb colonness=INP{#1) +
-nb _ lignes&=INP(#1} +
-FOR c%=1 TD nb colonnes% +
-FOR 1%=1 TO nb 1ignes% +
-carte|(c%,15)=INP(#1} +
-NEXT 1% +
-NEXT c% +
-CLOSE #1l +
-RETURN +
-Cette routine charge Iidentificateur de fichier, mais ne le teste pas. Si +
-vous désirez le faire, la modification est smple à réaliser, comme le +
-montre l'exemple suivant. +
-entétef=5FACE4(19} +
-BGET #1 ,VARPTR(entetet),19 +
-IF entetes=="CARTE JdR ATART MAG"+
-PRINT "Ce fichier ne contient pas de carte” +
-ELSE +
-ATAR] MAGAZINE æ BEST OF GFA BASIC +
-- Cfargement carte +
-ENDIF +
-Le fichier graphique PERSO.BIN +
-Le fichier PERSO.BIN concient l'image du personnage de 16xl6 pixels. +
-Cette image ese affichée sur làa carte pour visualiser la position +
-du personnage. La procédure Bcharge perso(nom$} charge en mémoite +
-l’image stockée dans le fichier nomf, T'image est mémoriséé +
-dans la variable globale persof. +
-L'image doit être affichée en superposition sur la carte. L'opérateur +
-graphique logique AND permet d'afficher une image en superposition +
-sur un décor quelconque à condition que l‘image soit dessinéé en +
-couleur Q sur un fond de couleur 15, +
-PUT px,py,perso$,+
-Cette technique d'atfichage est un affichage en ombre chanouse”, +
-Pour obtenir plus de détails sur les opérateurs graphiques logiques ct +
-leurs utilisations, vous pouvez vous rélérer à l’armicle; «Opérateur +
-graphique logiquen, +
-L'image PERSO.BIN est fabrique par le programme IMGPERSU.GFA à +
-partir d’une image Degas contenant la silhouette du personnage +
-| ÉÉTEÉI ES EN RR +
-| # SAISIE IMAGE DU PERSONNAGE # +
-l MSFN SREE ETEe e E E e E +
-RESERVE 100000 +
-@load degas("ELEMENTS.PI1"+
-GET 1,35,16,50,persot +
-OPEN “o",#1,"perso.bin" +
-BPUT #1,VARPTR(perso$),134 +
-CLOSE #1l +
-END +
-| MEFe e e e +
-! * CHARGEMENT IMAGE # +
-e DEGAS ELITE L +
-| RV RR R R LT BT +
-PROCEDURE load degas{nom$) +
-LOCAL palettet +
-palette$f=SPACE{(32} +
-OPEN "1" ,#1,nomt +
-SEEK #1,7 +
-BGET #1,VARPTR(palette5),37 +
-VOID XBIOS(6,L:VARPTR(palettei}) +
-8GET #1,X8105(2},32000 +
-CLOSE #1 +
-RETURN +
-Structure de Gescarte +
-Le programme GESCARTE est constitué d'un dértain nombre de modules. +
-Un module est un ensemble de routines qui traite un problème +
-donné. Par exemple, le module de-déplacement s'occupe de +
-gérer entièrement le déplacement sur la carte (affichage de l'image de +
-la carté, mise à jour des variables internes, tests des déplacements +
-possibles, appel du module de rencontre, etc.) Un module est composé +
-d'une où plusiéurs routines principales er de sous-routines +
-dépendant des routines principales, +
-Les modules de-GESCARTE sont: initialisation, module prineipal, interface +
-utilisateur, déplacement sur la carte, gestion des rencontres et +
-gestion de la fenêtre graphique. Il ¥ a aussi un module de foncuions +
-systèmes. Les foncrions systémes sont des procedures de base qui +
-peuvent être réutilisées dans n'importe quel type de programme. +
-Module d'initialisation +
-[ est constitué par la procédure @main, qui initialise les variables du +
-programme, charge en mémoire les données du jeu ec affiche l'image +
-de la carte. +
-Les données graphiques sont stockées sur disque et les données +
-numériques sont définis dans des lignes de DATA, l'initralisation de +
-chaque type de données est réalisé par une procédure particulière appartenant +
-à divers modules. Par exemple, la prôcédure Cinit rencontres +
-appartient au module de gestion des réncontres. +
-Une fois l'initialisarion terminée, la procédure Emain appelle la +
-procédure Égestion programme. Cette procédure est la roulne +
-principale du module prncipalé de GESCARTE +
-Module interface utilisateur +
-L'inrerface utilisateur est le module qui s'occupe de la commiunication +
-entre lé joueur et le programme. l est trés important. Une bonne +
-interface utilisatéur peur faire la différence entre un bon programme +
-agréable à utiliser cù un mauvais programme peu pratique à utl +
-ser. Plusieurs logiciels trés performants sur le plan technique ont éré +
-des échecs commerciaux à cause d'une mauvaise interface ucilisateur, +
-L'intérface urilisaceur de GESCARTE est assuree par les routines +
-Batt ev, Bguitter programme et le module de gestion de là fenètre +
-graphique, : +
-La fonction Batt ev attend que l'utilisateur presse sur une Heéche du +
-pavé numérique ou.sur la touche [Esc] pour rénvoyer un code de +
-fonctions spécilique au progranime, +
-: Flêche haute +
-: Flêche bas +
-: Fléche droite +
-: Flêche gauche +
-: Touche [Esc] +
-An 5 0 9 — +
-Si vous décidez de modifier l'interface utilisatenr de GESCARTE 1l sutfit +
-de moditier Batetv sans changer lc reste du programme, Clest +
-l'avantage d'une communication inter-routines par codes numeériques. +
-Pour rajouter de nouvellés fonctions au programme (examer +
-des possessions du personnage, sommeil, ete.), il faur définir l'action +
-correspondant à la nouvellé fonction (touche du clavier, clic souris, +
-été.) ec lui donner un code. Tous les codes supérieurs à 6 sont dispomibles, +
-La procédure @quitter programme démande à l'utilisiteur une confirmation +
-de sa décision de quittér e programme, Elle affiche une +
-ATARI MAGAZINE a BEST OF GPA BASIC +
-boîte d'alerte avec le message "Voulez-vous vraiment quitter +
-ce pra?” Si le joueur confirme sa décision, la variable globale sortie% +
-est miscal. +
-Module principal +
-Le module principal gère l'exécution du programme. +
-Il est constitué de la procédure @gestion programme et de la procédure +
-Gexec fonction. +
-PROCEDURE gestion programme +
-LOCAL evs +
-DO +
-ev“=Cait ev +
-Bexec fonction(ev®) +
-EXAIT IF sorties=l +
-LOOP +
-RETURN +
-Lä procédure Pgestion_programme contient la boucle principale du +
-programme. Cette boucle s'exécute tant que la variable globale sortie% +
-ne contient pas 1. La fonction @att_ev lui donne le code de la +
-commande sélectionnée par le joueur. +
-PROCEDURE exec fonction(ff) +
-SELECT 1% +
-CASE 1,2,3.4 +
-Bgestion deplacement(f%) +
-CASE 5 +
-Bquitter programme +
-ENDSELECT +
-RETURN +
-La fonction @exec fonction(evi) cxécure la routine associée à la +
-fonction utilisateur % C'est un système d'aiguillage qui dirige le +
-déroulement du programme vers les routines de déplacement ou +
-vers là routine gérant la sortie du programme. Si vous rajoutez des +
-fonctions à votre programme, c'est ici qu’il faut implanter les appels +
-des nouvelles procédures. +
-Par exemple, une fonction permettant d'examiner les possessions du +
-pérsonnage (numéro 6} ou une fonetion permettant de changer l'arme +
-du personnage (numéro 7), ou de boire une potion (numero §), +
-etc. +
-SELECT 1% +
-CASE 1.2,3.4 +
-Ggestion deplacement (f#) +
-CASE 5 +
-Bguitter programme +
-CASE 6 +
-Bexamen possessions +
-CASE 7 +
-Bchanger arme +
-CASE 8 +
-Éboire potion +
-ENDSELECT +
-Module de déplacement sur la carte +
-Il gêre les déplacements sur la carte. Clest le module le plus complexe +
-du programme. +
-Les fonctions apparténant à ce module sont; Pgestion_deplacement, +
-Cinit evenements, Cexéc deplacement Caller droite, +
-Galler gauche, Galler haut Baller bas, @preparation ecr_- +
-travail er @visualisation ecr travail. +
-Avant de plonger dans les détails techniques, voyons comment 5 et +
-fectuent les déplacements. Théoriquement, le personnage se déplace +
-de case en case. Ce serait simple À pérer si voutes les cases était les mémes, +
-ce qui n’est pas le cas, Le déplacement est possible sur la plupart +
-dés cases, mais pas toutes (plan d'eau par exemple). Le personnage +
-peut aussi rencontrer des créatures sur ceftaines cases. +
-Le progranime associe un numéro à -:;h:lqufi type de traitement. Le +
-numéro 0 correspond 4 une impossibilité de déplacement. Le numeto +
-1 correspond à un déplacement simple, Le numéro 2 correspond +
-à un déplacement sur une plaine. le numére 3 correspond à un +
-déplacement en forft er le numére 4 à un déplacement sur des +
-ruines. Le tableau dev_ev&(num_element#) contient le numéro de +
-traitement associé à l'élément graphique num_element®. Les associations +
-entre les numéros d'éléments graphiques et les traitements sont +
-définies dans des lignes de DATA La procédure @init_evenements +
-initialise le tableau dev ev&() avec les données des DATA +
-def evenements: +
-DATA 1,0 +
-DATA 2,0 +
-DATA 3,2 +
-DATA 4,72 +
-DATA 5,0 +
-DATA 6,0 +
-DATA 7,0 +
-DATA 8,0 +
-DÂTA 9,4 +
-DATA 10,0 +
-DATA 13,3 +
-DATA =1 +
-Les éléments graphiques 1,2,5,6,7,8 et 9 (plan d'eau, montagne, malsons, +
-villages et château) ont le numéro de traitement Q, c'est-à-dire +
-que le personnage ne peut se déplacer sur une case de la carte occupé +
-par l’un de ces éléments. +
-Le traitement 2 (déplacement sur plaine avec possibilité de rencontre) +
-correspond aux éléments graphiques 3 er 4 (dessins de plaines). +
-Lorsque le programme déplace le personnage sur une case de la carte +
-vécupée par un élément de plaine, il appelle |z routine gerant les rencontres +
-en plaine (procédure Brencontre_plaine). +
-Le traitement 3 (déplacement en forét avec possibilité de rencontre; +
-correspond à l’élément graphique 13 (dessin de forét). Le traitement +
-4 [déplacement sur ruines avec possibilité de rencontre} correspond +
-À Pélément graphique 9 (dessin de ruines/. +
-Routine @gestion__deplacement +
-La procédure @gestion deplacement{direction) sélcetionne le +
-type de déplacement en fonction du type d'élément sur lequel le pecÂTARI +
-MAGAZINE m BEST OF GFA BASIC +
-sonnage vas se déplacer. Une structure SELECT-EMOSELECT sélectionne +
-les routines à appeler en fonetion du eype de trairement. +
-* La case od veut se rendre d +
-* le personnage est définis +
-" par la position [c%,1%). +
-né=dev ev4{carte\(c*,1%)) +
-SELECT n% +
-CASE 1 +
-Bexec deplacement (direction®) +
-CASE 2 +
-Gexec deplacement (direction#+
-Érencontré plaine +
-CASE 3 +
-Bexec deplacement (direction®) +
-@rencontre foret +
-CASE à i +
-Bexec deplacement (direction*) +
-Erencontres ruines +
-ENDSELECT +
-Limitations aux bords de la carte +
-Le programme ne gère pas les déplacements sur les bords de l'écran. +
-Rien n'empêche donc le personnage de dépasser les limites de la carte, +
-Pour éviter cela, 1l faut placer une barrière d'éléments infranchis +
-sables aux limites de la carte. Ce peut etre de l'eau où des montagnes. +
-De toute façon, les bords de la carte dorvent être visualisés d'une mamièré +
-logique pour le jouëur. De nombreux programmes du commerce +
-sont limités par la mer, La carte lournie en télechargement sur +
-le serveur 3615 ATARI avec les programmes EDITCART et GESCARTE +
-(sous le nom de JEUGFAZ4.T05) est limitéé par une vasté érendue +
-d'eau sur laquelle le joueur ne peut se déplacer. +
-Routine @exec_ deplacement +
-La routine Gexec deplacement (direction*) exécute un déplace +
-ment simple dans la direction direction® C'est une fonction d'aiguillage +
-qui sélectionne la rourine de déplacement à wtiliser pour +
-gérer le déplacement dans la direction désiré +
-PROCEDURE exec deplacement (direction*) +
-SELECT direction® +
-CASE 1 +
-Paller haut +
-CASE Z +
-Baller bas +
-CASE 3 +
-Galler droite +
-CASE 4 +
-Baller gauche +
-ENDSELECT +
-RETURN +
-Les procédures Galler haut Galler bas, Galler droite er Baller +
-gauche déplacent l'image de la carte dans une direction précise. +
-Leurs scructures est assez complexe car redessimér rapidement l'image +
-de [a carte avec des routines écnites entièrement en GÉA Basic n°est +
-pas simplé. +
-1l 'est impossible de redessiner Pimage de la carte sur l'écran suffisame +
-ment rapidement pour que le jouéur ne voie pas l’opération s'effectuér. +
-Ce serait possible en Assemblezr, mais pas en GE4 Basic, Pour +
-éviter cet effet graphique désagréable à l'oeil, les routinés de déplacements +
-efféctuent les opérations graphiques dans ün ééran virtuel s» +
-tuë en mémoire +
-Une fois les opérations praphiques terminés, le programme devrait +
-recopier l'image de Îa carte sur l'écran, mais l'expérience prouve que +
-cetré technique n'est pas assez rapide pour obrénir un affichage de +
-bonne qualigé L'image flashe un peu. Pour éviter cela, le programme +
-ne recopié pas l'écran virmel dans la mémoire éran du ST, mas +
-change l'adresse de la mémoire écran par l’adresse de la mémaire virvuëlle, +
-L'écran virtuel devient alors la nouvelle mémoire écran. +
-Le programme travaille sur deux zones mémoires qui sont alternativémént +
-utilisés comme mémoire écran ct ééran victuel. Leurs rôles +
-sont inversés à chaque affichage. Les adresses de ces zones mémoire +
-sont stockérs dans les variables adri% er adr2%, L'adresse de l'écran +
-visible à l'écran est stockée dans la variable ecr visibles, L'adresse +
-de l'écran vircuel cst stockéc dans la variable ecr travaïl#+
-Lä position de la portion de carte visible par rapport 2 la carte totale +
-est stockée dans les variables 1igne carte% et colonne_cartef Les +
-routines de déplacement modifient ces variables en fonction du sens +
-de déplacement, +
-La routine @aller_ bas +
-Pour comprendre comment fonctionnent ces routinés, la meilleure +
-méthode est encore dé prendre un exemple. +
-Ce sera la routine Baller bas qui déplace Pimage de la carte vers le +
-bas. L'image de la carte est-constituée d’un ensemble de 11x11 éle +
-ments graphiques, c'est-à-cire de 11 lignes constieuées chacune de 11 +
-éléments graphiques. L'image du personnage est affichée sur la case +
-située au mifeu dé la carte (sitième ligne, sixieme colonne). +
-Le déplacement ne s'effectue que d'une ligne à la fois. Seule une partie +
-de l'image est modifiée. Les lignes 2 à 11 sont roujours affichées +
-sur l'écran, avec un décalage d'une ligne vers le haut. La ligne 2 se +
-retrouve à |a place de la ligne 1. +
-La ligne 3 se retrouve à la place de la ligne 2, ete, Senle la ligne 11 +
-doit être redessinée par le programme. Cèrte rechnique de rélfichage +
-partiel permet de gagner béaucoup de temps par rapport à un reaffir +
-chage complet. +
-La procédure @aller bas recopie dans l'écran virtuel les lignes 2 à +
-11 à la position des lignes 1 à 10. Ensuite, elle redessine l'élément du +
-miligu de la carte qui avait été altéré par l'alfichage de l'image du personnage. +
-Elle dessine ensute la nouvelle ligne, puis affiche l'image +
-dù personnage au milieu de la carte. Une fois la carre cerminée, le +
-programmé change l'acresse de la mémoire écran par l'adrésse de +
-Péeran virtuel. Le changement de Padresse écran est effectué par la +
-procédure @visualisation ecr travail. +
-Etant donné que les adresses de la mémoire écran ec de Pécran virtuel +
-sont inversés lors des déplacements, les messages qui sont affichés +
-dans la fénêtre graphique disparaissent à chaque déplacement +
-pour réapparaître au suivant. Pour éviter cela, la procédure Bco- +
-ATARI MAGAZINME E BEST OF GFA BASIC +
-nie fenetre recopie le contenu de la fénêtre graphique dans l'écran +
-virtuel juste avant l'inversion des adresses, +
-Remarque: La procédure @visualisation ecr travail change l'adresse +
-de la mémoire écran par l'adresse de l'écran virtuel (ecr tras +
-vai15), Ceue procédure utilise la procédure @set_pcr_phys qui vt +
-lise elle-même la fonction XBI0S(5). Cette instruction systéme na +
-pas umne action instantanée : elle attend que le spot vidéo ait finit de +
-dessiner l’image pour changer l'adresse de la mémoire écran. Linstruction +
-VSYNC bloque le déroulement du programme tant que le +
-spot vidéo dessine l’écran, et donc tant que la fonction XBIUS (h) ma +
-pas changée l’adresse de la mémoire écran. Cela permet d'éviter des +
-*havures vidéo” desagréables à l'reil. +
-PROCEDURE visualisation ecr travail +
-êset ecr phys(ecr travail#) +
-VSYNC +
-RETURN +
-Module de rencontres +
-Le module de rencontré gére les rencontres er les découvertes que +
-peut faire le joueur en se déplaçane sur la carté. +
-Il est constitué des routines @rencontre plaine, érencon bre-t0- +
-ret, Arencontre ruines, Btst probabilite, @tirage rençontre, +
-Binit rencontres, @tirage decouverte, @init_decouvertes +
-et @init tables découvertes. +
-Toutes les cases où peuvent apparaîcre des créatures onr une probabilité +
-de rencontre. Lorsque le personnage entré dans l’une de ces +
-cases, le programmie effectue un tirage de probabilité pour déterminer +
-s’il se produit effectivement une rencontre. +
-La fonction @tst probabilite(prob®) permer de savear s1 un +
-événement de probabilité prob se produit effectivement. Elle ren +
-voic la valéur logique vraie (TRUE) si l'événement se /produst er la valeur +
-logique fausse (FALSE) si l’événement ne se produit pas. Le tire +
-g d'une probabilité comprise entre 1 et 100 se fait avec l'instructron +
-RARDOM +
-Une fois que le programme sait qu'il se produit une rencontre, il +
-détermine la nature de la créature en utilisant une table de rencontre, +
-Une table de rencontre est une liste de créatures possédant chacune +
-une probabilité d'apparition. | +
-La fonction @tirage creature(tables) tire une créature de la +
-table dé rencontre tableï, Il existe une table de rencontre pour la +
-plaine, une pour la forêt et une pour les ruines. +
-Les routinés Érencontre plaine, @rencontre foret ec Brencontre +
-ruines gérent les 3 types de rencontres qui peuvent se produire +
-dans GESCARTE Pour comprendre comment fonctionnent ces +
-rautines, prénons l'exemple de Grencontre _ plaine. Cette procécdure +
-gère les rencontres que 12 personnage peut faire dans un environsnement +
-de plaine. +
-La probabilité de rencontre est de 10%. 5 la rencontre se produit, la +
-fénetion @tirage créature permet de déterminer le type de +
-créature rencontrée, Le programme affiche alors le nom de la eréäture +
-dans la fenêtre graphique. Lalfichage se fair avec la procédure +
-éaff Teneire, +
-PROCEDURE rencontre plaine +
-LOCAL creature% +
-LOCAL m3 +
-+
-IF @tst_probabilite(10) +
-creaturet-@tirage creature(1) +
-mb="RENCONTRE : "tcreatures(creature=) +
-Gaff fenetre(m5) +
-ENDIF +
-RETURN +
-La routinc @rencontre ruines gère les rencontres, mais ausés la +
-découverte d’un trésor. La gestion d'une découverte se fair de la +
-mème manière que la gestion d'une rencontre tésr de probabilité et +
-rable de découverte, +
-Initialisation des tables de rencontres +
-Une table de rencontre et une liste de créatures avec une probabilité +
-de rencontre. La sonime des prôbabilités d'une table doir être de +
-035, Le tableau table rencontre®() contient les différentes tables +
-de rencontre du programme. +
-[l peur mémoriser 20 tables pouvant contenir chacune jusqu'à 30 +
-prubabilités de rencontre, +
-DIM table rencontref [EÜ.ËÜgË_Ï' +
-Le tableau table rencontre%(t%,r%,1) contient la probabélité de +
-rencontre avec [a creatare 'tEhlE_l"EE ont TEÈ{OE,T“:Ë.Ë}. +
-Les tables sont définies dans des lignes de DATA sous la forme +
-numéro créature/probabilité de rencontre. La valeur -2 signifie qu’il +
-v à encore une table après la table courante, Ja valeur 1 est l'indicateur +
-de fin de données. La table 1 est la table de rencontre en plainé +
-la table 2 est la table de rencontre en forët et la table 3 est la table de +
-rencontre des ruines, +
-1T RUTRa RR T A RR s +
-# TABLE 1 * +
-, PLAINE * +
-| RE RÉRÉRRAURE ETE AL S +
-! * Paysans = g +
-' * Colporteur = 105 * +
-| # Voleurs 204 * +
-# Chiens L # +
-c2 rrs cd 5 +
-i d e e A A e e = o s b E +
-DATA 21,50 +
-DATA 22,10 +
-DATA 20,20 +
-DATA 2,10 +
-DATA 50,10 +
-DATA -2 +
-Définition des découvertes +
-Les objers que le personnage peur découvrir sont définis par une description +
-stockée dans lc tableau alphanumérique dec ouverte$(). +
-La description de ces objets est définis dans des lignes de DATA: +
-La procédure @init decouvertes initialise le rableau decouverteS(). +
-ATARI MAGAZINE m BEST-OFGFA BASIC +
-Définition des créatures +
-Les créatures que le personnage peut rencontrer sont définies uniquement +
-par leurs noms. Ceux-i sont stogkés dans le cableau creature$(). +
-Les créatures sont définies dans des hgnes de DATA. La +
-procédure Einit creatures initialise le tableau creatured () avec +
-les données stockdes en DATA Les éréatures sont définies de manière +
-“minimale”, Si vous voulez réalise* un svstème de combat, il +
-faut rajouter d'autres caractéristiques, +
-Module de gestion de la fenêtre graphique +
-La fenêtre graphique est une zone située à la droire de la carte où le +
-programme peut athicher des messages. Le programme GESCARTE +
-l'utilise pour afficher les rencontres er les découvertes de trésors. +
-Elle est situde à la position (194,12) ec mesure 118 pixels de large ct +
-178 pixels de haur. Elle peur contenir 20 lignes de 14 caractères, La +
-variable globale ligne courante¥ conmtient la position courante +
-d’athchage,+
-La procédure Bcls fenetre dessiné Pimage de la fenêtre vide. Flle +
-sert à afficher la fenêtre graphique au début du programme et à l'effacer +
-en cours de route, +
-La procédure @init fenetre affiche l'image de la fenètre ec mer la +
-variable Tigne courante=A0, +
-La procédure Gaff fenetre(message5) affiche le textc messaged +
-dans la fenêtre graphique. Le texte est mis en forme par la routine +
-@format pour ne pas dépasser les limites de la fenêtre. Chaque ligne +
-formatée est affichée par la fonction Cafft ligne, +
-La routine Baff ligne(Tigne$) affiche la ligne Tigne$ à la posr +
-tion courante de la fenêtre. La ligne est affichée à la position stockée +
-dans la variable 1igne courantes: S1 celleci contient une valéur +
-supérieuré à 19, il ne reste plus de place libre dans la lénêtre car les +
-numéros de lignes sont comprises entre 0 ec 19, Le progratume scrolle +
-alors la fenêtre graphique d’une ligne vers le haux. +
-La procédure @scro!1 fenetre scrolle le contenu de la fénêtre graphique +
-d'une ligne vers le haut. Le scrolling est réalisé en copiant les +
-lignes 1 à 19 à l'emplacement des lignes 0 à 18, La copie est faite avec +
-les instructions graphiques GET et PUT. Une fois le scrolling effecruc, +
-la dernière ligne esr effacee. +
-La procédure @copie fenetre recopie le conrenu de la fenêtré gra +
-phique de l’écran physique vers l'écran logique (ééran visible vers +
-écran de travail). Certe procéduré est utilisée par le système d'affichase +
-de la carte qui travaille en permutant les écrans physique ec logique, +
-Les fonctions systémes +
-Les fonctions systémes sont des fonctions multi-usages qui remplissent +
-des thches classiques dans toutes sortes de programmes. s ne +
-dépendent pas de GESCARTE et peuvent étre réutilisés dans toutes +
-sortes de programmies, +
-Les fonctions systèmes sont Bwaitclavien @vider clavier, +
-Bcls ecran, Bocadre, Oset ecr log, éset ecr phys et Bformat +
-La procédure Bwaitclavier amend que l'utikisateur presse sur une +
-touche. Elle ne renvoie pas le code de la touche pressée, C'est l'équivalent +
-de l'insteuction VOID INP(Z). À ceci prés qu'il est plus parlant +
-de trouver Éwai tclavier dans un listing que VOID INP(2). +
-La procédure Evider clavier efface tous les caractères stockés dans +
-le tampon clavier, Elle permet d'annuler l'eflét de la fonction d’auto- +
-répétition du clavier ST, Céla peut être ntile dans certains cas. +
-La routine Pcls ecran(c*) cfface Pécran en le remplissant avec la +
-couleur 6* Cette routine est plus pratique que l’instruction CLS qui +
-remplis uniquement l'écran avec la couleur 0. Cela permet d'avoir +
-un fond d'écran de n'importe quelle couleur. +
-La procélure Écadre(px%,pyt, tx5, tyk, R, b6) dessine un cadre +
-sraphique de dimensions (tx%,ty#) à la position (px*,pys). Le +
-fond du cadre est de la couleur % alors que les bords sont dans la +
-couléur DR Clest une sorte d’instruction PBOX amélioré +
-La rourine @set ecr log(adr ecrans) permet de changer l'adresse +
-de Pécran logique, c'ést-à-dire l'adresse de l'écran u travaillent les +
-fonctions graphiques du GFA Basic Le nouvel écran de travail doit +
-faire 32000 ocrets pour éviter les plantages systèmes. Cette routiné +
-pérmét de réaliser des opérations graphiques en mémoire sans que +
-en n'apparaisse à l'écran. +
-La procédure @set ecr phys (adr ecran%) permet de changer l'adresse +
-dé l’écran physique, c'esr-à-cire Padresse de la memoire écran, +
-C'’est une fonction dangerense qu’il faut employer avec prudencé, La +
-nouvelle mémoire écran doit faire 32000 octets et commencer à une +
-adresse multiplé de 256 (certe limitation n’existe pas sur le STE où +
-Padresse de la mémoire écran peur être fixée à n'importe quelle adresse +
-paire), En utilisant cete fonction avec Bset ecr log, on peut +
-réaliser des affichages très rapides, mais assez complexes, +
-La routine @format{m$,taille®) est une routine qui formare le’ +
-texte m en lignes ne dépassant pas taille® caractères, Le texte est +
-formaté de manière 4 ne pas couper les mots, Te texte formate est +
-stocké dans le tableau alphanumériqué lignes$(). La variable giobale +
-nb_lignes® contient le nombre de lignes lormatées présentes +
-dans le tableau Tignesi (). +
-Améliorations du programme +
-Le programme GESCARTE peut éure ameélioré de nombreuses manieres, +
-Vous pouvez ajouter de nouveaux éléments eraphiques et de +
-nouvelles rables de rencontres. Un systéme de sous-cartes peut permétire +
-au personnage d’entrer dans les maisons et d'explorer les +
-châteaux: +
-l’interface utilisateur peut être modifiés pour fonctionner entierement +
-à la souris. Des icônes peuvent réprésenter les différents options +
-du programme (déplacement, examen du personnage, somméil, +
-manipulations des objets possédés par le personnage, sauvegarde +
-de la partie, chargement d'une ancienne partie, etc.) +
-Vous pouvez prévoir une passibilité de dialogues entre le personnage +
-et les créatures qu'il rencontre pendant ses deplacéménts, +
-Pour transformer cé logiciel en véritable jeu de rôle micro, 1l faut +
-prévoir un but et des sous-buts. En général, ce but est la destruction +
-d'un puissant sorcier. Les sous-burs peuvent être la recherche d'informations, +
-d'objets magiques très puissants (armes, armures et objets +
-divers) et éventuellément de sorts. Certains endroits de la carte péuventêtre +
-extrémemert n::l:lngereuï pour Un pérsonmage débutant sans +
-expérience ec sans équipément particulier. +
-Téléchargement +
-Vous pouvez obtenir les listings de EOITCART et de GESCARTE sur le +
-ATARI MAGAZINE WAl BEST OF G4 BASIC +
-3615 ATARI Ces programmes sont accompagnées d'umages Depas +
-Elite contenant des exemples d'éléments graphiques de 16x16 pixels +
-ët un exemple de carte, +
-e e e d e e e Al e T d e R n e e S R +
-5 JEU DE ROLE STYLE EULTIMA * +
-e GFA BASIC 3.xx , +
-i:tt****ijk#ki*t**#***t***t***** +
-« (C) 1991 ATARI MAGAZINE #. +
-* (£} 1991 PATRICK LECLERCO = +
-D RSSIE E ok e A o Fi RR R +
-+
-RESERVE 100000 +
-' OPTION BASE 1 +
-DIM element$ (200) +
-OIM creature$(200) +
-DIM decouvertet(700) +
-DIM lignes$(20) +
-DIM table rencontre=(20,30,2} +
-DIM table decouvertes(20,30,2) +
-DIM def ev*(200) +
-adr Lampon#=MALLOC(32255) +
-adr2%={adr tampon*+255) AND &HFFFFFFDO +
-adrl&-XBI0S(2) +
-nb colonness=-1 +
-nb _ ligness=—1 +
-OIM carte/|(200,75) +
-gmain +
-1l u ke r r o e el e e e v e e e e e o e o e e o e e W +
-' % RETOUR AUX CONDITIONS DE DEBUT * +
-| XX EAAR bd bW AdbErETTdtbridzetat +
-@set ecr log(adrl%) +
-Bset ecr phys(adrl&+
-CLS +
-VOID MFREE(adr tampons) +
-END +
-R O R R O R E T I d e e É R RE E AN +
-! * ATTENTE PRESSION SUR UNE TOUCHE * +
-| RE E RERRRE SR E R RR Rk R de d d e +
-| * (Cette fonction ne renvoie pas 5 +
-!* Tle numëro de touche. C'est = +
-# l'équivalent de l'instruction , +
-* VOID INP(Z) ; +
-D É IATERE ETE o o RR I R E CRN R R E R +
-FROCEDURE waitclavier +
-CO +
-EXIT IF INKEY§<>"" +
-LOOP +
-RETURN +
-+
-| *mEaxxdtritdtdhdrdhdarrredttdbhhhdw +
-: F YIDER TAMPON CLAVIER * +
-Le Ro e R o S R e E +
-PROCEDURE vîder_;ïauier +
-B0 +
-EXIT 1F INKEYS="" +
-LOOP : +
-RETURN +
-PROCEDURE set ecr Togladr ecran®) +
-VOID XBIOS(5,L:adr ecran%,L:=1,-1) +
-RETURN +
-PROCEDURE set ecr phys(adr ecranf) +
-VOID X8105(5,L:—1,Lzadr ecran¥,—1) +
-RETURN +
-| ÉXTÉTTVLETTEITEFÉETEEXF +
-| # EFFACEMENT ECRAN * +
-I ETE RTAREES RE AANNA RE +
-1 A AAaaAÉÉR RR R RR R A R d R RR RE R +
-* * C% : couleur de remplissage de 1'Ecran +
-| p e e R e e e e e e é e e E +
-PROCEDURE cls ecran(c%) +
-DEFFILL % +
-PBOX 0,0,319,199 +
-RETLRN +
-+
-I kA AR EARNFAAAA A A Ak bkt +
-| * AFFICHAGE CADRE GRAPHIQUE * +
-| E e e e e e e b o e e S o A A R E E E E +
-PROCEDURE cadre(pExx,% ty,s,p f5v,b,5) +
-LOCAL px2%,pyd% +
-+
-pxcés=pxsrlxé—] +
-pvésepysttysl +
-DEFFILL % +
-PROK px%,pys, px2%, pyès +
-COLOR b% +
-BOX pxb,pys,puds,pyis +
-RETURN +
-TT E e i st ok o ol e e e E A o S +
-T # +
-! *. ROUTINES DE GESTION DE * +
-! % LA FENTRE DES MESSAGES * +
-1E - +
-| de sk E R E R E E AR RESRE RE +
-ATAR| MAGÈAZINE m BEST OFGFA BASIC +
-+
-F R n d e e e d e e e e e e é L r r e e SE +
-* FORMATAGE D'UN TEXTE * +
-SS É UE E RE RE RE E E RE S ! +
-RH HR E E d d e e RE R R N d E +
-* Cette routine découpé un texte en plusieurs lignes” +
-pour un affichage propre. le découpage se fait au * Ÿ +
-* niveau des mots. +
-* PARAMETRES ROUTINE : +
-#* +
-* mh : texte à formater +
-* taille® : nombre maximum de lettres par ligne +
-b, 1] +
-SORTIE ROUTINE : +
-# + +
-* tableau lignest(). +
-éc e ec e e e e e e e e e e d S e e e é e d e d e e e e e e É R RE E +
-+
-PROCEDURE format(m#$,taille*) +
-LOCAL Lampon$ +
-LOCAL p* +
-LOCAL €$ +
-LOCAL lignet +
-nb l{gnes*=0 +
-tamnont="" +
-lignet=""+
-FOR p&=1 T0 20 +
-lignes$(p=}="" +
-NEXT p% +
-I ÉÉ T ETE REN P AR E +
-' * BOUCLE DE DECOUPAGE * +
-| RESREsN +
-FOR p%=1 TO LEN(m$) +
-c3=MID$ (m$,p%.1) +
-IF ES{?" lï +
-tampon$=tamponitet +
-ENDIF +
-IF c3=" " +
-1F LEN(Tigne$)+1+LEN(tampon$)<=tailles +
-IF lignet="" +
-l igne$=tampons +
-tamponhe"" +
-ELSE +
-lignef=ligne{+" "+tamponi +
-tampon$="" +
-ENDTF +
-ELSE +
-INC nb Tignes% +
-lignes${nb lignes#)=ligne$ +
-lignes="" +
-IF tamponfe="" +
-Les lignes sont stockées dans le tableau lignes$(})* +
-La variable nb Tignes% contient le nb de lignes du* +
-tampon$=tampon$+"+
-ERDIF +
-ENOIF +
-ENDIF +
-NEXT p% +
-[ *wwjitt*;*****k*i**i*w +
-' * FIN DU DECOUPAGE # +
-E e o o o o e +
-IF {ligne$="") AND {tamponf<>""+
-INC nb 1igness +
-lignes$(nb 1ignesk)=tampon} +
-tflmpflHE’"" +
-ENDIF +
-IF (tampond<="")} AND (lignet=""+
-IF LEN(ligneS)+1+LEM (tamponi}<=taille% +
-INC nb ligness +
-lignes%{nb lignes#)=Tigne$+" "*tampons +
-lignes="" +
-tampon$f="" +
-ELSE +
-INC nb_lignes*# +
-lignes${nb lignes%)=lignes +
-ligne$="" +
-INC nb lignes* +
-lignes$(nb lignes*)=tampons +
-tamponf="" +
-ERDIF +
-ENDIF +
-RETURN +
-D = o o b e R R T e b R R +
-" % EFFACEMENT FEMETRE MESSAGES * +
-ï fi*fiïÿfi*%i11******##*******1##?*3* +
-PROCEDURE cls fenetre +
-Écadre(194,12,118,178,5,0) +
-RETURN +
-| ok g ol o o e A e e e e e e e e e e R +
-" % SCROLLING VERS LE HAUT * +
-| ÉÉÉ RA REN T e ek ke +
-PROCEDURE scroll fenetre +
-LOCAL scroll$ +
-GET 196,244,308, 185,scrol 1} +
-PUT 196,15,scrolls +
-cadre(196,177,112,9,5,5) +
-! Effacement derniére ligne +
-RETURN P +
-D éh BTN Sy W é RR R RR A E N E e e e e S R R A A r d d e e +
-“ AFFICHAGE D'UNE LIGNE DANS LA FENETRE * +
-1 rr e r d d e e d o e r i i e E e d e o o e e e RE E +
-PROCEDURE aff ligne(lignes) +
-ATARI MAGAZINE Ë BEST OF GFA BASIC +
-LOCAL pxé,pys +
-IF ligne courantes=19 +
-@scroll fenetre +
-ligne courantes=19 +
-ENDIF +
-px*=196 +
-py&=(1igne courantes-1)“9+73—1 +
-TEXT px%,py,1ignet +
-RETURN +
-I dh hN e e e d e c é e d d d e R R R E E +
-! * AFFICHAGE D'UN MESSAGE DANS LA FENETRE 7 +
-D R e e R e AN E R E E +
-PROCEDURE aff fenetre(message}) +
-LOCAL 1% +
-Pformat{messaged,14) +
-FOR 1=1 T0 nb_lignes% +
-INC ligne courantes +
-@aff ligne(lignes${1)) +
-NEXT 1% +
-RETURN +
-Î **;g*fl***t#*titt***tttttfi*ifi#***t* +
-V% INITIALISATION FENETRE TEXTE * +
-P éh d e A R R e é r é é d P d d d e T +
-PROCEDURE init fenetre +
-Bcls fenetre +
-ligne courante*=0 +
-RETURM +
-BT kL T e R R A d LR e d e d +
-! = COPIE FENETRE DE TEXTES DANS ECRAN DE TRAVAIL- * +
-Ë “***fiwwÿ*tflttt***:tt*****#ÿÿttttt****n:i***fi****tt* +
-PROCEDURE copie fenetre +
-RC _ COPY ecr visible*,194,12,118,178 +
-TD ecr travail®%,194,12 +
-RETURN +
-1 ook ok ok e e o RRN N R R E É EN d É e e W +
-1" % +
-' % CHARGEMENT DE FICHIERS DISQUE * +
-| xx* RR b e e e E E A e TR S E E E +
-L RE e E R E e R r S é A A A E +
-" * CHARGEMENT IMAGE DU PERSONNAGE SUR: LA CARTE = +
-S L LR e Rl ek 2t b b i N e +
-PROCEDURE charge perso(nom$) +
-perso$=#PACE$ (134) +
-OPEN "i",#1,nomd +
-BGET #1 ,VARPTR(persos),134 +
-CLOSE #1 +
-RETUEN +
-| LR S B R e e e e R +
-' = [CHARGEMENT DU FICHIER BINAIRE B +
-* # CONTENANT LES ELEMENTS GRAPHIQUES * +
-T o ST e A R A S RE I SE E RRN +
-PROCEDURE charge elements{fichier}) +
-LOCAL n +
-LOCAL palettet +
-palettek=eS5PACE%(32) +
-OPEN "1" #1,fichiers +
-BGET #1 ,VARFTR(palette5),32 +
-VOID XBIOS(6:L-VARPTR{palette#)} +
-nb elements“=INP{(#1) +
-FOR n%=1 TU nb elements* +
-element${n%)-SPACE$(134) +
-BGET #1,VARPTR(elementi{(n#)},134 +
-NEXT n* +
-CLOSE #1 +
-RETURN +
-LR S S L Ak ko 2 ÉÉ NA RR RE RE +
-' * ÉHARGER CARTE A PARTIR DU DISQUE * +
-| 4h E d e e m r A r A P d e d e E É A RN iyt +
-PROCEDURE charger carte(nom$) +
-LOCAL entetes à +
-LOCAL 1%,c% +
-DPEN "I",#1,nom} +
-entete$-SPACES (19) +
-BGET #1,VARPTR(entete$),19 +
-nb colonness=INP(#1) +
-nb_lignes*=INP(#1) +
-FOR c*=1 TÜ nb colonnes= +
-FOR 1=1 1C nb lignes= +
-carte| (c%, 1%)=INF(#1) +
-NEXT 1% +
-NEXT c% +
-CLOSE #1 +
-RETURN +
-L d d e e d c E É +
-* OPTION 'QUITTER LE PRG' 7 +
-| AI E RE TR TRN REN RS +
-| NRAEXERRÉRÉAR RRN RR E ÉÉ R RR E E +
-! « sortie#0 ==> continuer programme # +
-| = Sorties=] ==> quitter programe i +
-I ek AARAARFERESE A d d e d d e e e RN A +
-PROCEDURE guitter programme +
-LOCAL m$,t#, b5 +
-+
-5ürL1&%=Û +
-m$="VOULEZ-VDUS VRAIMENT |QUITTER CE PRG ?" +
-choix$="0UT | MON" +
-SH +
-ATAR| MAGAZIME m BEST OF GFA BASIC +
-ALERT O,m$,2,choix$,b% +
-HIDEM +
-1F b%=1 +
-sorties=l — +
-ENDIF +
-RETURN +
-EITE T PR TR RS L LR a2 bt b b d b +
-i + # +
-* * GESTIONNAIRE DE KENCONTRES * +
-1w * +
-d e é é e e e E E n E n e E E V é É OE A E +
-se m d r r r e e e e r r r e e r e e e e E N e é e e e d e e +
-* INITIALISATION DES TABLES DE RENCONTRES * +
-d d kAR e e e e e e e T e ce d e e RR RE R T D A E +
-PROCEDURE init rencontres +
-LOCAL table*,rencontre* +
-LOCAL prob%,creatures # +
-LOCAL valeur# +
-ARRAYFILL table rencontre%(),=1 +
-table*=l +
-rencontre®=l +
-RESTORE def rencontres +
-Do +
-D0 +
-READ valeur* +
-EXIT IF valeurfs-1 +
-EXIT IF valeur*-— +
-creatureé%=valeurs +
-READ probé +
-table rencontre+(tables,rencontre#,1)=probs +
-table rencontret(table%,rencontre*,2)=“creatures +
-IRC rencontres +
-LOap +
-EXIT IF valeurs=—1 +
-INC table* +
-rencontre%=1 +
-LOOF +
-RETURN +
-I ool i o R E o i e v e ook o o R e R e R o d +
-* TEST DE PROBABILITE * +
-FHREFFYARFEERTF LIRS +
-' % Cette fonction sert à tester si un évënement A +
-' % de probabilité prob% s'est produit. La routine * +
-! # ‘renvoie TRUE si | 'événément s 'est produit et F +
-| * FALSE dans le cas contraire. = +
-I RAARAARRRRRRA AN e e R RR E E e d e +
-FUNCTION tst probabilite(prob%) +
-LOCAL rep% +
-1F RANDOM(100)+1<=prob# +
-reps=TRUE +
-ELSE +
-dh d de d EEEAAEANN A AT T d ANARERRAAAAA N É +
-reps=FALSE +
-ENDIF +
-RETURN reps +
-ENDFUNC +
-26e d e e e RR MRN d DE d e E +
-« TIRAGE-D'UNE RENCONTRE # +
-R rr e e e e e E AI +
-LR RRN ATk kAR RR d RR E S E R NNN IERE +
-* Cette routine détérminé aléatoirément un numéro de +
-* créature à partir de la table de rencontré tables. +
-e A A A E T E E E CO E E E A e E CR CR d A A E E E E S +
-FUNCTION tirage rencontre(table*) +
-LOCAL tirage*,rencontres +
-LOCAL prob%,creaturss +
-LOCAL total prob% +
-“tirage==RANDOM(1001+1 +
-creatures=—l +
-total prob%=D +
-FOR rencontre*=1 TO 30 +
-probs=table rencontre%(table%,rencontre=,1) +
-IF probi==-1 +
-ADD total prob',prob# +
-IF (tirage*<=total prob%) ï +
-creatureE=table réencontte*(table%,rencontre5,2} +
-rencontre%=30 ! Sortie de la boucle +
-ERDIF +
-ENDIF +
-NEXT rencontres +
-IF creature=l +
-PRINT "ERREUR DE FORMAT DANS LES RENCONTRES" +
-FRINT "MUMERD TABLE "-tables +
-ENDTF +
-RETURN creatures +
-ENDFUNC +
-— +
-ds d d r d u R E e r e d m e r e e t e m c A r e e +
-* Æ +
-* GESTIONNAIRE DES DECOUVERTES * +
-* x +
-rrrh e e é e d e d d e é A e e d E +
-d R R e PI d RR R E E A T é e P e e RE +
-* INITIALISATION DES TABLES DE DECOUVERTES * +
-I T dh h AT T TN POV TN T EMN RR E A ÉÉ E +
-PROCEDURE init tables decouvertes +
-LOCAL table*,decouvertes +
-LOCAL prob%,tresor +
-LOCAL info% +
-ARRAYFILL tahÎE_dEEüuvertEÊ[J,wl +
-table%=1 +
-decouvertes=1 +
-RESTORE tables decouvertes +
-ATARI MAGA£INE m BEST OF GFA BASIC +
-+
-[0 +
-READ info% +
-EXIT IF infof%=—1 +
-EXIT IF info%=—2Z +
-tresor*-into® +
-READ prob# +
-tabled ecouverte*(table*,découv1e)r=tpreo*b,# +
-table decouverte“(table%,découverte*,2}=tresors +
-INC decouvertes +
-LOOP +
-EXIT IF info%=—I1 +
-INC tabie* +
-découverte%=l +
-LOOP +
-RETURN +
-Emm R d R d d e E +
-* TIRAGE D'UNE DECOUVERTE = +
-e e h e e e e e e e d d +
-A FT AR R R AR R RR E NNN e e A RR r E A d d d +
-*Cette routine détermine aléatoirement un numéro de* +
-* trésor à partir de la table de découverté tables.” +
-e d e d p e A A A r e d d e d d e e R R R B e r e e e e ok r o ol e e e SE DE +
-I ÉÉTÉTERTTNÈTE EÉ TEVRÉE +
-* * AFFICHAGE DE L& * +
-"4 CARTE VISIBLE * +
-I AW W AREF S AR A EE +
-PROCEDURE aff carte +
-LOCAL 1%,c% +
-LOCAL Tigne* +
-LOCAL colonnes +
-LOCAL rrs +
-LOCAL posx® +
-LOCAL posys +
-posyg=ycartes +
-lignes=ligne carte% +
-FOR 1%=1 TO 11 +
-posx*=xcarte* +
-colonne%=colonné cartes +
-FOR c=1 TU 11 +
-num#| -{coclonaner%.ltignee) +
-PUT posx%,posy*,elementS(num#+
-INC colonnes +
-ADD posx%1,6 +
-LOCAL ecr2%, x%.ve% +
-LOCAL pxés,pys +
-LOCAL c&,colonne= +
-LOCAL r% ‘ +
-LOCAL old elements +
-old element#=carte|(colonne carte&+5,ligne cartes+5) +
-DEC ligne carte% +
-@prepareacrt tiraovanil +
-écri*-=ecr visiblex +
-xl==xcarte% +
-vl%#vcarte% +
-ecr2%“secr travail% +
-x2%=xcartes +
-véds=ycartes+16 +
-RC COPY ecrl%,x1%,y1%,1/6,160 10 ecr24,XÉ4,yés +
-PUT xcarte*+80,ycartes+965,c}eme_ nélte$m(eont1=d} +
-cn!unne%=cu1unne_carte% +
-px*=xcartes P +
-pyv&=ycarter +
-FOR c%=1 TO 11 +
-nw=carté| (colonne*,ligne carte) +
-FUNCTION tirage decouverte(table%) +
-LOCAL tirage%, decouvertes +
-LOCAL probs,tresors +
-LOCAL total probs +
-tirages=RANDOM(100)+1 +
-tresorfs=—1 +
-total_probs=0 +
-“ FOR decouverte*=1 TO 30 +
-pruh%itahïe_üücüuverteä[tablaä,d&cauv&rt&%.l} +
-IF probfe=-l +
-ADD total prob%,prob% +
-1F (tiragek<=total prob%) +
-tresur%=tdh1e_decüuvfirteä{tahîE%.decüuverteä,ïj +
-NEXT c* PUT px*,py&,élément${n#+
-INC ligne* INC caolonne* +
-ADD posys,lb ADD px*,16 +
-NEXT 1% NEXT c% +
-PUT xcarteS+H0,ycarte*+80,perso$,1 ! Aff image perso PUT xcarte%+680,ycarte5+80,persot,l | Aff image perso +
-RETURN % Bcopie fenetre +
-) Bvisualisation ecr travail +
-| ÆxN R R T E E E FEETUËH +
-* * GESTION PERMUTATION DES ECRANS * | +
-L REN ok ek s ook e o e d E R B E RN L s +
-PROCEDURE preparation ecr travail ' * DEPLACEMENT VERS LE BAS * +
-lF Eta‘t-;'s:'l I E RR R RE clc e 96 d e e e u rrr drvaie dp dp d E E L S +
-ecr visibles=adrls PROCEDURE aller bas +
-Ecr:;rava11%=üdr2% LOCAL ecrls,x15,y15 +
-ELSE LOCAL ecr%,x2%,y2% +
-ecr visible¥=adri% LOCAL pxs,pys +
-ecr travaii*radr1% LOCAL c&,colonne# +
-decouvertés*=30 ! Sortie de la boucle ENDIF LOCAL n% ; +
-ENDIF etati=—etals LOCAL old elements +
-ENDIF Bset ecr log(ecr travail®) ' +
-NEXT decouvertes RETURN ntd_e!ementä=carte|{cüîünne_carte%+5,1îgne_tart9%+5] +
-IF tresor*=—l +
-PRINT “ERREUR DE FORMAT DANS LES DECOUVERTES® * * \ISUALISATION DE LA CARTE * +
-PRINT "NUMERO TABLE ";table% +
-ENDIF +
-RETURN tresors +
-ENDFUNC +
-I AAAAAASÉÉ A RE R ÉÉÉ RR RR R AN +
-I W +
-! * ROUTINES D'AFFICHAGE DE LA CARTE VISIBLE * +
-Lo +
-R o o o ot o b e E g E RESRE R R A RE Tk ok ke kAo +
-INC lîgne carte* +
-Épreparation ecr travail +
-ecrl&=ecr visible® +
-x1#=xcarte% +
-PROCEDURE visualisation ecr travail yl&=ycarte=+ib +
-Bset ecr phys{eer travail¥) ecr2f=ecr travail% +
-VEYNC Xx24=xcarte# +
-RETURN +
-y2x=ycarLer +
-' ' - RC COPY ecrl%.x1%.y15%5.176,160 TO ecrd%,xd%s,yds +
-| e e rr dl d e e e e r e e 0 u d d d d d6 6 06 MRE Pu; :EHTÈEÈ+HÜ.ïEûFtÈË+Ëfl,EÎE…EHÏ$[üÏd_EÎEMEfltÈ] +
-w ! = DEPLACEMENT VERS LE HAUT * celonnes=colonne cartes +
-| RR RRN RE N R A c E päâ=äÛüFLE% +
-py==ycarte++160 +
-FOR ci=1 TD 11 +
-I A e 6 R E E E e E A A dn d d d e n S +
-1 UEE R el ol NE NN A +
-- PROCEDURE aller haut +
-LOCAL ecrl%,xl%,yl% +
-ATARI MAGAZINE E BEST OF GRA BASIC +
-né-carté|(colonne&,ligne carte“+10) +
-PUT px%,py%,elements(n%) +
-INC colonne* +
-ADD px=,16 +
-NEXT €* +
-PUT xcarte*+R0,vcarte%+80,persof,l ! Aff image perso +
-Bcopie fenétré +
-@visualisecar ttriavoainl +
-RETUEN +
-+
-| d RN Ee E L +
-! * DÉPLACEMENT VERS LA GAUCHE # +
-| ORRÉEIATAARaaR RR RRN A A A E +
-PROCEDURE aller gauche +
-LOCAL ecr1l5,x15,y15 +
-LOCAL ecr?% %, v2% +
-LOCAL px,pyf +
-LOCAL 1%,11gne% +
-LOCAL n% ï +
-LOCAL old elements +
-nld_elEmEnt%=carte|{Çùlünne_carte%+5,1iqne_carteä+5] +
-DEC colonne cartes +
-Bpreparation ecr travail +
-ecrlf=ecr visioled +
-xl%=xcarte* +
-yl&=ycarte% +
-ecrZ“secr travail# +
-xPAexcartes+ib +
-veg=ycartek +
-RC COPY ecrl%,x1%,y1%,160,176 TO ecrefk, xdt, vès +
-EUT xcarte*+06,vcarte5+80,element${old element*) +
-lignes=ligné cartes +
-px4=xcartes +
-pys=ycartes +
-FOR 1%=1 TO 11 +
-nk=(ccoloanne rcartte*,elig|ne) +
-PUT px#,pys,element#{n#+
-INC ligne% +
-ADD pys1,6 +
-MEXT 1% +
-PUT xcartes+80,ycarte=+80,pér505,1 ! ATT image perso +
-Écopie fenetre +
-@visualisecar ttriavoainl +
-RETURN +
-Ï +
-I TR RRAARES E RR NNN TR RAARÉ EN +
-! # DEPLACEMENT VERS LA DROITE * +
-D A e r e e e e R c e +
-PROCEDURE a]]nr_drüîte +
-LOCAL ecrlF,x1=,y1% +
-LOCAL ecr2% , néw,yves +
-LOCAL px=,pys +
-LOCAL 1&,ligne% +
-LOCAL n +
-LOCAL old elements +
-ATARI MAGALIME Ë BEST-OF GFA BASIC +
-uîd_fllementä=carte|[cüïünne_EartE%+fi,1igfle_flarte%+5} +
-INC colonne cartés +
-Epreparation ecr travail +
-ecrl®-ecr visibles +
-xl#=xcartes+16 +
-vl&=ycartes +
-ecrŸ&=ecr travail% +
-x7*=-xcartes +
-yvék=eycartes +
-RC COPY ecrl®,x1%,y1%,160,176 TO ecrZ%,x2%,yes +
-PUT xcarte*+h4, ycartes+80,element#{(01d element#} +
-ligne&=ligne carte% +
-px5=xcarte*+160 +
-pys=ycartes +
-FOR 1%=1 TO 11 +
-n&=carte|{colonne carte*+10,ligne%) +
-PUT px*,py*,element${(n“) +
-INC lîigne* +
-ADD py&,16 +
-NEXT 1% +
-PUT xcartes+80,ycarte*+80,perso$,1 ! Aff image perso +
-Gropie fenetre +
-@visualisation ecr travail +
-RETURN +
-| RRN E RR RR RR E RRN ARÉEE L ket ddddd +
-* # FONCTIONS DE GESTIDN DES EVENEMENTS DU JEU * +
-e e e e e e A “ e e e e r o e e r A e e e e e e e o e e t e S e TE +
-+
-XE e e R R R SRR e e e e +
-* LE JOUEUR SE DEPLACE SUR LA PLAINE * +
-e e e e i i i ok o d i e d e e ok o e e e e e i ok W W R E R +
-PROCEDURE rencontre plaine +
-LOCAL éréatures +
-LOCAL messages +
-IF @tst probabilite(10) +
-creature%=@tirage rencontre(1) +
-message®="RENCONTRE : "+creaturef(creatures) +
-Baff fenetre(messaged) ‘ +
-ENDIF +
-RETURN +
-P omdkkh ke RE E RE R RR A A RR d d d dede de +
-* * LÉ JOUEUR SE DEPLACE SUR LA FORET * +
-D TRIH E R d r e d e E T A e d E +
-PROCEDURE rencuntre_fflr&+
-LOCAL creatures +
-LOCAL messaget +
-1F Ptst probabilite(15) +
-creaturet=@tirage rencontre(2) +
-méssagef="RENCONTRE : "+creature${creature*) +
-Gaff fenetre(message$) +
-ENDIF +
-RETURN +
-I AR A ARtk mdd é r d e d e e E +
-! * LE JOUEUR EXPLORE DES RUINES * +
-| L b L E S = NNN NN R S S E R RR E E +
-R . i o A A E e T R SRR E Rk S e b e b e R e E +
-w* r Il peut rencontrer des créaturés, +
-* ou trouver divers objets anciens. * +
-e R d d d d d d e d R R E b ke À +
-PROCEDURE rencontre ruines +
-LOCAL creature* +
-LOCAL decouverte* +
-LOCAL ms +
-1F @tst probabilite(16) +
-creature*=Etirage rencontre(3) +
-mé="RENCONTRE : "Fcreature$(creatures) +
-Baff fenetre(mi) +
-ENDIF +
-+
-IF êtst probabilite(5) +
-decouverte%-@tirage decouverte(i) +
-mé="0ECOUVERTE :"+decouverte}(decouvertes)] +
-Gaff fenetre(mb) +
-ENDIF +
-RETURN +
-L3 +
-E ed d d e d d E E E RR R e E +
-sé VISUALTSATION DU DEPLACEMENT * +
-" # SUR LA CARTE AFFICHEE A L'ECRAN * +
-I e d ds ds dh d d d S e 610 A A R OR R E e r e E +
-PROCEDURE exec deplacement(direction%) +
-SELECT directions +
-CASE 1 +
-Baller haut +
-CASE 2 +
-Galler bas +
-CASE 3 +
-Baller droite +
-CASE 4 +
-Baller gauche +
-ENDSELECT +
-RETURN +
-ï #i*fi****#*iliitt*fi#*;*ittfiw +
-' * ROUTINE DE DEPLACEMENT * - +
-| ENARTAETE RRR TERSISTE ERRERR E +
-PROCEDURE gestion deplacement (direction#+
-LOCAL c%,1%.n% +
-SELECT direction® +
-CASE 1 +
-ck=colonne cartests +
-1%=11gne carte=t4 +
-CASE 2 +
-ATAR] MAGAZINE m BEST OF GFA BASIC +
-(4=colonne cärte$+5 +
-14=ligne cartestb +
-CASE 3 +
-c4=colonné cartes+b P +
-1%=11gne carteï+5 +
-CASE 4 +
-c*-colonne cartes+4 +
-1%=ligñe cartes+5 +
-ENDSELECT +
-n4=def evi(carte|(c%.1%)) +
-D e e e i o A e e d e e es e e e o ol o A AN E R S O R R +
-! * EXECUTION DES EVENEMENTS DE DEPLACEMENT * +
-| ÉÉFN A +
-SELECT n= +
-CASE 1 +
-Gexec deplacement(directions) +
-CASE 2 - +
-@Exec_dep1acement(dir&ntîün%} +
-érencontre plaine +
-CASE 3 +
-gexer deplacement(direction) +
-Brencontre foret +
-CASE 4 +
-Bexec deplacement (direction#+
-Érencontre ruines +
-ENMDSELECT +
-RETURMN +
-e A e T E Wkl e R T E +
-* EXECUTION DES FONCTIONS * +
-PE e k e d d E E E E r d d d d E E E S +
-PROCEDURE exec fonction(f#+
-SELECT 1# +
-CASE 1,2.3.4 +
-Ggestion deplacement (f*) +
-CASE 5 +
-@quitter programme +
-ENDSELECT +
-RETURN +
-b B R R R L e e e d E E E E S +
-* ATTENTE EVENEMENTS CLAVIER #* +
-e e e e e e e o o o o e e i o o e e A e i i eA +
-1 : aller haut +
-2+ Aller bas +
-3 : Allér droite +
-4 : Aller gauche +
-5 : Quitler le programme +
-FUNCTION att ev +
-LOCAL c$,num ev +
-num_ev==0 +
-@vider clavier +
-D0 +
-DÉsINKEYS +
-IF chæ>"" +
-IF c§=CHR5{27] +
-rum ev*=s +
-ENDTF +
-IF LEN(eS)=2 +
-tS<ASÉ[MIDE(c$,#,1}} +
-IF t&w/72 +
-num evi=] +
-ENDIF +
-1F t%=80 +
-num evi=Z +
-ENDIF +
-[F tre/77 +
-num _evés=3 +
-ENDIF — +
-1F t%=75 +
-num_ev&=4 +
-EMDIF +
-ENOTF +
-ENDIF +
-EXIT lF num evi<=(0 +
-LODP +
-RETURN num av® +
-ENDFLNC +
-+
-R e E R R E RE o e L SR +
-| * GESTION DES ORDRES DU JOUEUR * +
-| RRRRERTT TVREUTERI3TEEX +
-PROCEDURE gestion programme +
-LOCAL eyv* +
-+
-cH +
-évs-Batetv +
-exec fonction(ev®) +
-EXIT IF sortie=-l +
-LUOF +
-RETURN +
-+
-=” +
-DR RRIRARR ÉÉÉ RR RRE E E R AN AN AESTERNF +
-- * LECTURE DES MUMEROS D'EVENEMENTS * +
-| * ASSOCIES AUX ELEMENTS DE LA CARTE * +
-lFNE R +
-PROCEDURE init evenements +
-LOCAL nums, vals +
-ARRAYFILL def ev=(),0 +
-RESTORE def evenements +
-Do +
-READ numé +
-EXIT IF num¥=—1 +
-READ val* +
-def ev&(numé)=val% +
-OGP +
-RETURN +
-ï +
-B S o e e R A E C R V o i E E +
-* * DEFINITION DES CREATURES * +
-STARI MAGAZINE Ë BEST OFGFA BASIC +
-e o R e Rk E R S +
-FROCEQURE init_creaturE£ +
-LOCAL rnumé, nomb +
-@aff_carte +
-EMOVE XBI05(21 ,adr2%, 32000 +
-etati=1 +
-DATA 22,"UN COLPORTEUR" +
-DATA 23,"DES BUCHERONS" +
-DATA 24,"UNE CARAVARE" +
-DATA 25,"DES PILLEURS DE TOMBE” +
-! * Gobelins : 10% * +
-- # Esprit % +
-| * des bois : 10% * +
-I HÉFETÉTTTHATTETEERN4TETR +
-ns=0 gestion programme ' DATA 1,30 +
-RESTORE def creatures ‘ DATA 50,"DES ORCS" DATA 3,15 +
-Do SHOWM DATA 51,"DES GOBELINS" DATA 23,10 +
-READ numé RETURN DATA 52,“UN ELFE NOIR" DATA 50,25 +
-EXIT FF fumé==1 ; DATA 53, “UN NECROMAN" DATA 51,10 +
-READ noms ' i DATA 102,10 +
-ETEEtuTEE{flHm%}=flflm5 l T X e e R RN ON R ek DATA ?Ü.“UËE ARAICNEE EEÊHÎE" DATA —2 +
-LOOP ik | ; DATA 71,"UN SERPENT GEANT® | +
-RETURN ! * DEFINITION DES DONNEES DU JEU * l | RRRRREREAAAEARARNÉRHÉÉ RESRE +
-| e Ë DATA 100, "UN DEMON* x TABLE 3 — RUINES * +
-| HS DL s f o h et gkt ek V OHHTEAAAAAAANRRA RRN vAFER ÉÉ RRN RE DATA IÜl,"UH FANTOME" | HR AR AARTA NNN LR LT LS +
-* = DEFINITION DES DECOUVERTES * e rr é DATA 102, "UN ESPRIT DES BOIS" ! # Drcs : 30 # +
-D dh e e e e e e E R RI É E E " # DEFINITION DES EVENEMENTS 7* DATA 103,"UN ESPRIT DE L'EAU" ' * ‘Gohbelins « 205 / # +
-PROCEDURE init decouvertes e e p tc e e DATA 104,"UN ESPRIT DE TERRE" * = Serpent ; P0R * +
-LOCAL num%, nom$ ' % DATA element,evenement $ DATA 105,"UN ESPRIT DE FEU" “ * Ardignée géante @ 10% * +
-' “ * DATA -1 : fin evenements " DATA 106,"UN ESPRIT DE MORT® * * Pilleurs de tombes : 10% * +
-ns | s Ll T R NNN e DHTH IÜ?,“UH ÜHËEÜH HÜEH— " * Fantome ; ÜE% * +
-RESTORE def decouvertes \ * Codages eveneéments : u DATA 108, "UN DRAGON ROUGE™ ! * Démon - 055 * +
-Do ! * 0 : déplacement impossible * DATA 109, "UN DRAGON DES ÉAUX" | RRRRRRR RRN EN E d sk hok +
-READ numré: S 1 0 déplacflment PDÉËÎÜ]Ë ; DATA —1 DATA EÜ,ËÜ +
-EXIT IF numée=l ( * 2 : Appel fonetion 2 ® | DATA 51,20 +
-READ noms OE (déplacement plaine) * LRn é RR e e R R R A d E DATA 5,20 +
-decouverte${num%)=nomt ' % 3 : Appel fonétion 3 ä ! * DEFINITION DES TAËLES DE RENCONTRE * DATA 70,10 +
-LODP # ËÜËPÏEEEMEHË fürët] = DR d c e e e e d e e e e e e E e E S ) DATA ËE.lÜ +
-RETLURN ' # 4 : Appel fonction 4 ÿ " # DATA créature, probabilité rencontre * DATA 101,5 +
-' “E (déplacement ruines} * ' * DATA —Z : passage table suivante - DATA 100,5 +
-| = = = L S e R e e E E I kdkgkkhkkdkdh RS EEEEE kA h ki dk i ÜËTÂ _1 : F1fl ÉES tflh1E5 i DHTA 4 +
-' * PROCEDURE PRINCIPALE * def_evenements: ! * REMARQUE : Le total des probabilités * ‘ +
-e T R ANE DATA 1,0 ! % doit faire absolument 100%. * I khn R RR R d e e e e e e e É E +
-FROCEDURE main DATA 2.0 I c d d dn d b e d e d rr e d e e e e e d d RE ‘ * DEFINITION DES DECOUVERTES * +
-nb_eîement5ä=ü DATA 3,2 dEf_FEflEflntrES: | d dededeae dc e e e kR E e RR A R é R A r +
-ligne carte%=l DATA 4,2 E e e oo o e ETE def decouvertes: +
-colonne carte*=1 DATA 5.0 tx TABLE 1 — PLAINE * DATA 1,"UNE PIECE D'ÔR" +
-e1ëmenfutüurantä=1 DATA 6.0 B d d L L L d DATA 2,"UNE PIECE D'ARGENT“ +
-' i DATA 7.0 ! & Paysans @ 50% * DATA 3,"UNE PIECE DE CUTVRE" +
-xcarles=E DATA 8,0 ' = Colporteur = 10% * DATA 4,"DES PIECES D'OR” +
-ycartes=12 DATA 3.4 ' * Voieurs. = 20% * DATA 5,"DES PIECES D'ARGENT" +
-@init creatures DATA 10,0 ! * Chiens = 10% * DATA 6,"DES PIECES DE CUIVRE" +
-Bcharge perso("PERSO.BIN") DATA 11,3 ' * “Ores : HE * ; +
-Bcharge elements("ELEMENTS.BIN") DATA —l | WA R E d AR E E DATA 20,"UNE PIERRE PRECIEUSE" +
-Bcharger carte(“carte.car”) ' DATA 21,50 DATA Z21,"DES PIERRES PRECIEUSES® +
-@în1t_fiï&fl&…fiflt5 | HRF iR AR R RE S &R d E DATA EE,IH i +
-Ginit_rencontres " % DEFINITION DES CREATURES ? DATA 20,70 DATA 50,"UNE VIETLLE EPEE" +
-@inît:dEEüUUETtEE d d en d d d N DRS IN DATA 2,10 DATA 51,"UN COUTEAU" +
-Ginit tables decouvertes def creatures: DATA 50,10 ' +
-i DATA 1,"DES LOUPS" DATA — DATA 90, "UNE CHAUSSURE" +
-HIDEM DATA 2,"DES CHIENS SAUVAGES" V d d d d DATA 91,"UNE POUPEE DE CHIFFONS" +
-GRAPHMODE £ DATA 3,"UN OURS" “ æ TABLE 7 — FORET # ' +
-DEFTEIT ü DflTh 4.IUH HEHAHD"' ol e o o WA e e +
-DATA 5, SERPENT" +
-DATA 100,"UNE ARME MAGIQUE” +
-“ # Loups : 305 * DATA —1 +
-@c]ls ecran(1) | -* furs “ 15> = 3 +
-Ocadre(xcarte*l,ycarte*-1,178,178,1,0} DATA 20,"DES VOLEURS" ' % Bucherons : 10% * 1 eh T 0 T e e d e e e e e N E E +
-@init fenetre DATA 21, DE3 PAYSANS * (rcs . 0ra À ! # DEFINITION TAELE DE TIRAGE DES TRESORS * +
-ATARE MAGAZIME Ë BEST OF GFÀ BASIC +
-ATARI MAGAZIME fl BEST OF GFA BASIC +
-E S A E A E S RR M E 1E E d e e E cIRc dc E CR E E d A E E CR E it +
-tables decouverites: +
-+
-E E E E e A ds +
-TABLE I — RUINES * +
-i **#ktiitttt***###tttt* +
-| RE NAMIR EN LA kAR Tk & +
-+
-Une piêce de cuivre : 305 ” +
-Des piéces de cuivre : 154 * +
-Une piéce d'argent UE % e +
-bes pièces d'argent =il * +
-Une pièce d'or L * +
-Des piéces d'or I s +
-Une pierre précieuse @ 03% * +
-Des pierres précieuses : (2% * +
-Une &pée 065 * +
-Un couteau 0655 # +
-Une chaussure s2L e TR +
-Une poupée * DA% # +
-Une arme magique 0l* * +
-Rt N E e e dc d d d d e e e A E E S +
-DATA 3,30 +
-DATA 6,15 +
-DATA 2,15 +
-DATA b, O +
-DATA 1,05 +
-DATA 4,03 +
-DATA 20,03 +
-DATA 21,02 +
-DATA 50,06 +
-DATA 51,05 +
-DATA 90,04 +
-DATA 91,04 +
-DATA 1000,1 +
-DATA =1 +
-TELECHARGEZ +
-DES CEÈITTAINES +
-DES CENTAINES +
-DE LOGICIELS +
-SUR LE +
-3615 ATARI +
-----———----"_———-----_——---l +
-. = +
-# DE L'INITIATION +
-A LA CRÉATION +
-MUSICALE +
-Vous avez un 1040 STE +
-Vous êtes un fan de musique... +
-Equipez-vous à prix réduit +
-Le clavier BONTEMPI AZ 7500 +
-Dernier-né de la gamme BOMTEMP, il e de loin le plus performant, | soura vous +
-sofidoire grôce à ses mulfiples qualités: Clender MIDI ssplitalslen « 61 g.rfindaah.n:!m s32 +
-sons «POM Digitols « 24 rythmes POM fechnologie numérique « / vois +
-d'accompagnement, polyphonique (12 notes) = 4 effets sonares intégres. Il s'harmonise +
-idéalement ervec be 1040 STE en exploitand toules ses performances sur e plen musicol. Le +
-BONTEMPL AZ 7500 est l'outil qui vous permet de metire en applicafion vos progrés +
-T PR . +
-Le logiciel BIG BOSS Piano +
-Cermier-né de la sacété RYTHM'N SOFT, BIG BOSS Piano, est le snec plus viËres des +
-logiciels musicaux: Cours de piano clossique et modeme * clavier guide = défilement des +
-parfifions en temps réel * impression des parfifions * quanisafion * c'est oussl un +
-céquenceur de 75 pistes permeftant le chargement dmuffoné de 10 morceaux, Le logicel +
-BIG BOSS Piono e une mélhade éducative smple (assistonce permanente] et rapice {10 +
-lecons pragressives] pour que le solfège ne soit plus une contreinte insurmontoible. Laissez +
-libre cours à votre inspiration &t réveiller le musicien qui somineille en vous. +
-Pour commander, remplissez lisiblement ce bon (ou une copie) et envoyez-le +
-accompagné du règlement à : +
-ARTIPRESSE - 79, avenue Louis Roche - 92230 Gennevilliers +
-[1 Je commande le clovier BONTEMP| ÀZ 7500 + le logiciel BIG 8055 Fiano +
-au prix exentionnel de 1 990 F + frais d'expédition. Ci-joint un chèque de +
-2100 F en règiement. +
-MNom pet eq p | i = f e oy T TN B R SR +
-Prénam Lt el IR ey e % ST R 1E ) D L e el B s PE | +
-Adresse e C B AR e e t ue | Sl VT LRI SR T X B SR +
-| | |y e [0S R ) el AF P [ U EN E E +
-Codepostal L1 1 | ¢ | } L L L 1 | 1 ¢ | | +
-Ville ot L Pl ( E e [ ] OO S S ) L +
-(9IRS LY |.'|î'||:|-;-'|||:- L. Cioevs b +
-lireetu vlus-si +
-— — =- — ——" o === , +
-EU DE ROLE EN GFA BASIC +
-Moi vois, moi tue +
-Nous vous présentons maintenant un programme permettant +
-de simuler le déroulement d'un combat entre un personnage +
-et une créature quelconque. +
-Combat, échange de coups +
-Le résultat ou l'êchec d‘une attaque dont être calcule en fonction des +
-caractéristiques des adversaires. Pour écrire un programme performant, +
-il faut analyser tout ce qui se passe pendant un combar et définir +
-lés caractéristiques des combattants nécéssaires à une bonne simulation:+
-Cet article vous propose deux systèmes de combat, Le premier est +
-un systéme simple, fourni à titre d'exemple. Le second est un mécafistme +
-de combac plus complexe ec plus réaliste Il est accompagné +
-d'une Inbliothèque d'obpets que vous pourréz utiliser dans vos +
-[anfifilwngfiwnnufiifirnxfi,PnflnmiflnfifitCHETUHE} +
-Systéme de combat de base +
-Le combat s'arrête lôrsqué l’un des déeux adversairés ést morc. Les +
-:rjmhflttanlfl;i sOnt di'fifii.": BT UTIC L'JFfll:i'LI'Ë l'_'l.'l: IL'I.]T[]!JG.'L! e 'L'-Ë.PË.EEI.É L!L' +
-coups gt un certain nombre de potnts de vie, +
-La capacité de combat est le pourcentage de chance que possede une +
-créature de toucher son adversaire Un combattant de bas niveau +
-péut avoir un pourcentage faible (entre 5% et 15%) alors qu’un combattant +
-de haut niveau ou une créaturé trés purssanté peuvent avoir +
-un pourcentage trés cleve (entre 70% et 90%). Pour savoir s1 uné +
-créature touche son ennemi, il faut tirer un nombre alcatoire compris +
-entre 1 et 100 (avec l'instrucrion RANDOM). 5i ce chiffre est +
-inférieur ou épal à la capacité de combat, l'arraque est réussie. +
-La capacité de coups est le nombre de points de dépâts qu’unée +
-créature peut causer à une autre Un éléphant fait néttement plus de +
-dommages qu'un écureuil, +
-Le nombre de points de vie représente la vigueur d'une créacure et sa +
-capacité à encaisser des coups. Les points de vie diminuent lorsque la +
-OE{rîafi_]]_'ll: Tl:_:l;l!_:lltl: [_].:_‘:E.; F'li:l[]'lT_"'i IÎ.].Ç {ll:_'l'l'r_l mfi.ËLÏ'.:Ë ä. EE :-:.‘uiiu I:I.IL'ITIL' Ei'r'.l:'l.qu.'L'. S'I. ]Ë +
-nombre de pounts de vie tombe à 0, la creature est morte. +
-“ vie perso* +
-Combat perso® +
-* coups persos +
-“ vie creatures +
-: points de vie Perso +
-: capacité de combat Perso +
-: Capacité de coups Perso +
-: Points de vie Créature +
-' combat creature% : Capacité de combat Créature +
-- coups creature* : Capacite de coups Creatare +
-o0 +
-I &Exxkdbdkbhbiiitittidirkiidtik +
-* * Ferso attaque Créature * +
-L o e e i e e e ol e e ool R o E E +
-IF RANDOM(100)<=copmebrsaot% +
-SUB vie creatcuouprs épesrs,o® +
-ENDIF +
-EXIT 1F vie creaturess=( +
-L o e ol sl e E o o e o e o e R O Y R +
-| # Créature attaque Perso * +
-E E e e d e e rrr d de d e SE e SE d d E E E « +
-IF RANDOM(100)<=combat creature' +
-SUB vie pèrso%,coups creatures +
-ENDIF +
-EXIT IF vie persove=0 +
-LOOP +
-+
-| o T T B N - o o b e e e e e d d E +
-| # Affichage résultat du combat * +
-DRRE E S e o REN RR RR RE e +
-IF vie_persoi==0 +
-PRINT “PERSD est mort™ +
-ELSE +
-PRINT "CREATURE est mort(e)" +
-ENDTF +
-Système de combat plus évolué +
-Le svstème de combat de base est simple à mettre en céuvré, mais +
-peu performant. Mous vous présentons maintenant un système de +
-combat sophistiqué qui permet de réaliser des combars plus réalistes. +
-Les créatures sont defimes par les caractéristiques suivantes: Porce, +
-Points de vie, Capacité de combat, Nombre d'attaques par round de +
-combat, Compétence de defense, Arme et Protection. +
-ATARI MAGAZINE E BEST OF GRA BASIC +
-Les caractéristiques Points de vie et Capacité de combat ont la même +
-signification que dans le système de combat de base. +
-Le Nombre d'attaques est le nombre de fois qu'un combartant peut +
-attaquer dans le laps de temps d'un round de combat. Une créature +
-faible ne peut attaquer qu‘une fois alors qu'une créature trés puissante +
-peut attaquer de nombreuses fois par tour. Cela dépend de l'entraînement +
-ct de la vitesse de réaction d'un combattant, voire méme +
-de sa structure physique (une pieuvre avec plusieurs beas peut exécuter +
-plusieurs attaques en même remps). +
-La Capacité de défense représente la possibilicé d'éviter une artaque, +
-Cela peut Être dû à une grande agilité, à une petite raille ou à une +
-structure physique particulière (une créaturé faice de brume qui devient +
-solide uniquement au moment de frapper est três difficrle à +
-toucher). +
-Cela peur aussi être le résultat d'un entraînement spécifique : un +
-combattant ayant appris à esquiver ou à parer une attaque peut avoir +
-une honne capacité de défense, +
-La Capacité de coups du système de base est remplacée par les caractéristiques +
-Force et Arme Le programme caleule les points de +
-dommages en tenant compte du type d'arme utilisé et de la force de +
-la créature +
-La caractéristique Protection correspond à uné éventuelle protection +
-corporelle (vêtement solide, armure, écailles, peau épaisse, ete.) Cette +
-protection diminue les dommages reçus en combat, Elle peur même +
-les annuler totalement dans certains cas. +
-Déroulement d'un combat +
-Le combar est divisé en rounds de combat. Pendant un round de +
-combat, les deux combartants frappent l'un après l'autre jusqu'à +
-épuisement de léur nombre d'attaques, Lorsque l’un des adversaires +
-est touché, le programme calcule le nombre de points de dégâts en +
-tenant compre de la force et de l’arme de l'attaquant, ainsi que de la +
-protection portée par la cible. ‘ +
-Le pourcentage de roucher une cible est csleulé en prenant la capacité +
-de combat de l'artaquant et en soustrayant la capacité de défense +
-de la cible, +
-Les désäts sont retirés aux points de vie du combattant touché, Le +
-combar cesse lorsque l'un des deux adversaires est tué c'ecc-d-dire +
-lorsque son nombre de points de vie est égal ou intérieur a0, +
-Conclusion d'un combat +
-À la fin d'un combat, le programme affiche le résulrat. 51 le personnage +
-a gagné, il reçoit le trésor éventuellement possédé par la créature +
-et des points d'expérience. +
-Les points d'expérience +
-Un personnage qui vit de nombreuses aventures acquiert de +
-l’expérience et augmente ses compétences. Pour simuler cela, un personnage +
-victorieux réçoit uñ certain nombre de points d'expérience. +
-Lorsque son total de points dépasse une certaine limite, ses compétences +
-auementent. Le nombre de points réçu dépend de la créature. +
-Vaincre un lapin rapporte peu d'expérience, alors que vaincre un dragon +
-rapporte énormément de points, à condition que le personnage +
-SUFVIVÉ; +
-Programmation du système de combat +
-La première chose à faire avant d'écrire le programme est d'étudier la +
-struéturé des objets stockés en mémoire et de décider de la méthode +
-utilisér pour definir cé ni:-j::'Lî. Ces derniers sont: les armes, les +
-moyens de protection, les trésors, les créatures et le personnage, +
-1l est très difficile de déterminer les valeurs numériques définissant +
-un objer. La tiche est simplifiée s l'on considère qu'un homme +
-moven posside une base de 10 à toute ces caractéristiques (Force de +
-10, Intelligence de 10, Vitésse de réaction de 10, 10 Ponts de vie, +
-E!l;'l'..:l Il faut i:nfiuhl'c: caleuler toutes les données du teu en tenant +
-compre de certe base, Par exemple, un chat est nettement moins tort +
-qu’un homme, mais plus qu’un lapin. On dennera 1 de force au lapin +
-et 3 de force au chat. Par contre, un lion est plus fort qu'un +
-hômme On péut ot donner une force de 14, +
-Définition des armes +
-Les armes sont des objets qui servent à causer des dégâts physiques +
-sur une cible quelconque (un être vivant le plus souvent). Les dommages +
-causés dans un combat comportent un élément aléatoire, Une +
-épée peut tout aussi bien prévoquér une blessure mineure qu'une +
-blessure grave én frappant un organe vital. Pour simuler cela, 1l faut +
-faire la distinction entre les dommages constants et les dommages varaibles, +
-Une arme est définie par un nom, un dommage constant et un dommage +
-variable, Par exemple, une épée cause 2 points de dommage +
-constant et 3 points de dommage variable Un coup d'épée peut +
-donc causer entre 2 (2+1) er 5 (2+3) points de dommage. Cela donne +
-une moyenne de 4 points de dommage. La valeur des points de +
-dommage a été définie en tenant compte qu'un homme moyen +
-possède 10 points de vie, +
-Les noms des armes sont stockés dans le tableau nom arme${(n#). +
-Les dommages constants sont mémorisés dans le rableau def_arme%{ +
-n%,1} et les variables dans le rableau def armes(n5,2}. +
-DIM nom arme$(100) +
-DIM def arme*(100,2) +
-' def arme%(n,l) = dégât constant arme n +
-' def arme%{n,2) = dégät variable arme n +
-La définition des armes est faite dans des lignes de DATA. Elles sont +
-définies sous la forme numéro, "nom”, dommage constant, dommage +
-variable. La donnée numéro est le numéro de référence de +
-l'arme. Par exemple, le nom de l'arme 12 est stocké dans le tableau +
-nom arme$(12), le dommage constant dans def arme“(12,1) et le +
-démiage variable dans def arme=(12,2}. +
-I E E e e e e e d de d de d d e é u cd d e d d E +
-* * DEFINITION DES ARMES # +
-i RU LUE ÉTETÉETTETANÉTEÉEFETTE +
-‘DATA numéro, *nom", dommage constant, dommage variable +
-armes_data: +
-DATA 1,"GRIFFES".2.2 +
-DATA 2,"CROCS",2,+
-DATA 3,"MORSURES EMPOISONNES®,1,+
-DATA 3,"TENTACULES*,1,4 | +
-ATARI MAGAZINE m BEST OF GFA RASIC +
-+
-‘ +
-+
-+
-DATA 4, SOUFFLE DE FEU*,30,40 +
-+
-BATA 10,"COUTEAU" 0,2 +
-BATA: 11, "EPEE",2,3 ¥ +
-BATA 12, "EPEE LONGUE",2,+
-DATA 13, "MASSE",2,+
-DATA 14, "HACHE",2.,+
-DATA 15,"HACHE DE GUERRE",2.4 +
-DATA 16, "FLEAU®,3,+
-DATA 17,"LANC,E1,*4 +
-DATA 18, "CIMETERE",2,+
-+
-DATA -1 +
-Ces lignes contiennent quélques exemples d'armes classiques dans +
-un environnement médiéval-fantéstique, Les premières sont des armes +
-naturelles utilisées par deverses creatures. Les suivantes sont des +
-armes manufacturées utilisées par des êtres Intelligents comme les +
-humains et les créatures plus où moins exotiques habitant les univers +
-fantastiques forques, elfes, nains, gobeling, évc.) +
-La procédure @init armes lit les informations stockées dans les +
-lignes de DATA et les accumule dans les tableaux nom arme${) ct +
-def arme=(). Elle doir être appelée en début de programme. +
-PROCEDURE init armes +
-LOCAL noms +
-LOCAL degat constants +
-LOCAL degat variable* +
-LOCAL n= +
-RESTORE armes data +
-ARRAYFILL def arme%().0 +
-+
-READ n= +
-EXIT IF m===l +
-READ nom$ +
-READ degat constants +
-READ degat variabiés +
-nom_a(rn%)m =enosm$ +
-def arme%(n%,1)=degat constant* +
-def arme%(n#,2)=degat variable% +
-LOOP +
-RETURN +
-La procédure Odommagea rme(num arme=) calculé le dommage causé +
-par l'arme num_armes, Les dommages variables sont calculés par +
-la formule RANDOM{(prob degat%+1). Fourquat cette formule? Parce +
-qué RANDO(nM) fournit un nombre aléatoire compris encre D'ern-L +
-Pour cbtenir un nombre aléatoire compris entre O ec n, il faut utiliser +
-la formule RANOOM(n#1}, +
-L gk ok e o e RE A É R E E A E N O e e u e R V PR RE +
-* # CALCUL DOMMAGE ARME num armet * +
-1 'l.".l.".i:'.'r'.'u".t:'rtt'fl:*'fl::‘rfb:‘rtt*tt**:‘r:‘:*:':t#r'i:'.'.“.'.‘**'.':'.': +
-FUNCTION dommage arme{num armes) +
-LOCAL dégat constants +
-LOCAL prob degat* +
-LOCAL degat variables +
-degat constaanrmte%(%nu=m adrmee&,f1l} +
-prob degati=def arme“(num arme#,2) +
-degat variable%*=RANDOdMe(gpatrio+1b) +
-RETURN degat constant%+degat variable* +
-ENOFUNC +
-Les protections +
-Les protections sont des vêtements ou des armures portés par les +
-créatures du jen, Elles assurent une foncrion défénsive. En terme de +
-jeu, elles diminuenc les dommages reçus par leurs utilisaléurs. +
-Une protection est définié par un nom et une valeur de protection. +
-Pour simplifier la programmation, la valeur de protection est cons +
-lante Toutefois, vous pouvez modifiér lé programme pour obtenir +
-uné protection variable, +
-DIM nom protection$(100) +
-DIM def protection%(100) +
-! def protections(n#) = nom protection n% +
-' def protection%{n%) = valeur protection n% +
-Les protections sont définies dans des lignes de DATA. La liste suivante +
-comprénd de nombreux exemplés de protection. La valeur -l ést +
-l'indicareur de fin de donnees. ' +
-| OUR ETEN ATATANAEER +
-' # DEFINITION DES PROTECTIONS * +
-U e ol e i rr e e v de o e rrr d de e e v ok oy e i e r ce +
-protections data: +
-DATA 1,"FOURRURE",+
-DATA 2,"FOURRURE EPALSSE",+
-DATA 3,"ECAILLES",+
-DATA 4,"PLAQUES D'0S",+
-DATA 5,"PEAU DE DRAGON",50 +
-DATA 6, PEAU DE DEMONT1,0 +
-DATA 20,"HABITS DE MENDIANTL"Û +
-DATA 21,"HABITS DE COLPORTELR",+
-DATA 22,"VETEMENTS ORDINAIRE",+
-DATA 23,"YETEMENTS DE CUIR",+
-DATA 24,"ROBE DE PRETRE™.O +
-DATA 25,"HABITS DE NOBLE",+
-DATA 26, "VETEMENTS DE MARCHAND®,+
-UATA 27, "ROBE MAGIQU,E4 +
-DATA 40, "ARMURE DE CUIR",+
-DATA 41,"COTTE DE MAILLES®,+
-DATA 42,"ARMURE DE PLAQUES",+
-DATA 43, "ARMURE DRACOMIQ* ,U 3E0 +
-DATA 44, "ARMURE CHAOTIQUE”1*0,+
-DATA -1 +
-La procédure @init protections change les données scockées en +
-DATA dans les tableaux nom protection$() ct def protectiont(). +
-ATARI MAGAZINME m BEST OF GFA BASIC +
-PROCEDURE init protections +
-LOCAL nomé +
-LOCAL protects +
-LOCAL n% +
-RESTORE protections data +
-ARRAYFILL def protecti on=(),0 +
-DO +
-READ n +
-EXIT 1F m==l +
-READ nom$ +
-READ protect= +
-nom protect ion${n)=nom$ +
-def protéctiont(n&)=protect® +
-OGP +
-RETURN +
-La fonction Evaleur protection(objet®) fournit le nombre de +
-points de protection fournis par l'objer objet*. +
-E E ETE E R A NN W Rc t e e de dn d 4 E E E E E E RE E E E +
-' % VALEUR DE FROTECTION D'UN OBJET = +
-|'YHETÉÉTNATAEESE É É RR RR ETE REEERXE +
-FUNCTION valeur protection{objet*) +
-RETURN üüf_prutüctiünë{nbjetäj +
-ENDFUNC +
-Au niveau rechnique, elle se contente de renvoyer la valeur de la variable +
-def protection&(objet*). Cela peut paraître stupide d'écrire +
-une fonction pour une opération aussi simple, mais cela permet +
-d'obrenir une interface entre le programmé et les données indépendantes +
-de la technique urilisée pour stocker les données. 5i vous modifiez +
-la structure de stockage’ des protections, 1l suffira dé maoditier +
-la fonction @valeur protection sans toucher au reste du programme +
-pour que tout continue de fonétionner normalement. +
-Les trésors +
-Certaines créatures intelligentes peuvent posséder des objets pré +
-cieux, 5i le personnage les tie, 1l récupère cès objets, Dans un but de +
-simplification, le programme ne gére que la description des trésors. +
-Elles sont stockées dans le tableau nom tresor$(). +
-DIM nom tresor$(1060) +
-Les descriprions des trésors sont définies dans des lignes de DATA +
-Elles sont stockees sous la forme numéro trésor, "description"”. +
-Le numéro -1 correspond 4 la [in de donnges. +
-D AR AR AR A EE LA A AT LT TR A h T, +
-“ * DEFINITIONS DES TRESORS ” +
-| ETAAREEAAAERUR e Re NE +
-| DATA type trésor, “description" +
-' DATA =1 = fin des trésors +
-treanraudata: +
-DATA 1,"QUELQUES PIECES DE CUIVRES" +
-DATA 2,"QUELQUES PIECES D'OR® +
-DATA 3,"DES CENTAINES DE PIECES D'OR" +
-DATA 4,"UN TRESOR FABULEUX" +
-DATA -1 +
-La procédure Binit tresors initialise le tabléau nom tresor$() +
-avec la description des trésors stoclcéés en DATA. +
-PROCEQURE init tresers +
-LOCAL nfl-:,treslurfu' +
-RESTORE tresors data +
-[0 +
-READ MUNF +
-EXIT 1F nums==1 +
-READ tresor$ +
-dom tresor$ (num#)=tresorh +
-OGP +
-RETURN +
-Il est 'Lmru::ss':hï-r-. de creer une fonction Bdescription tresor (tresor*) +
-renvoyant la description du trésor tresor® car le GFA Base +
-n'admer pas les fonctions renvoyant une variable alphanumérique, +
-FUNCTION description tresor(tresor) +
-RETURM nom tresor$(tresor*) +
-ENCIFUNEC +
-Certe fonction provoque l'apparition d'un message d'erreur RETURN +
-sans PROCEDURE La raison pour laquelle le système affiche un pareil +
-message d'erreur n'est pas évident à première vuc, Etant donné +
-que la syntaxe du GEA Basic ne comprend pas l'instruction RETURN +
-suivie d'une variable alphanumérique, l'interpréteur pense que le +
-RETURN est la fin d'une procédure, Et comme i1l ne trouve pas l'instruction +
-PROCEDURE correspondant à RETURN {puisque c'est une +
-FUNCTTON), il affiche un message d'erreur. Pour écrire une routine +
-renvoyant la description d'un trésor, 1 faut utiliser l'instruction VAR +
-qui permet de modifier la valeur d'un paramétré d’une procédure. +
-PROCEDURE d&äcrîptîDn_treaür{trEEÜT%,FAH tresor$) +
-tresor$=nom tresor$(tresor*) +
-RETURN +
-Pour écrire la descriprion du trésor numéro 2 dans là variable d$, 1l +
-faut utiliser la formule Gdescription tresor(Z,d$}. +
-1R T R E TIR D R E TR +
--* \AFFICHAGE- TRESOR 2 * +
-OURUR RERFEER RR A +
-@descri ptiun_’_cr&su'rl[E ,d5) +
-FRINT d$ +
-Définition des créatures +
-Les créatures sont définies par un nom, une Force, un nombre de +
-Points de vie, une Capacité de combat, un Nembre d'attaques, une +
-ATART MAGAZIME m BEST OF GFA BASIC +
-Capacité de défense, un numéro d'arme, un numero de protection, +
-un nombré dé-points d'expérience et un numtéro de crésor, Le nom +
-dés. créatures est stocké dans le tablean nom creatured() et les caractéristiques +
-dans le tableau def creature*(). +
-DIM nom creature$(100) +
-DIM def creature=(100,9) +
-+
-‘ def créatures(n#,1l) = Force +
-‘ def creature%(n#,2) = points de vie +
-&ef_cre&tur&%[n%.äj = Capacité de Combat +
-def creature=(n*,4) = Nb attaques +
-def creature%(n*,5) = Capacité de défense +
-def creature%(n%,6) = Numêro arme +
-def creature“(n&,7) = Numéro Protection +
-def creature%(n#,8) = Points expérience +
-‘ def creature%{n*,9) = Type de trésor +
-Les caractéristiques des créatures sont stockees dans des lignes de DATA +
-Chaque créature possède un numéro de référence. Les créacures 1 +
-a 19 sont des animaux. Les créatures 20 à 49 sont des créatures intelli +
-gentes. Les créarures 30 a 100 sont des créatures surnaturelles ou +
-extrémemeént puissantes. Tous les numeéros de référence ne sont pas +
-arrcibués, Il reste de le place pour vos propres monstres. Remarque, +
-s1 une créature ne possède pas de trésor, sa caractéristique trésor contient +
-la valeur 0. +
-RR e e o o b e o e e e b R NN SE +
-" * DEFINITION DES CHEATURES * +
-1 B g e B s B B - B i i 3 e e e i R +
-DATA Numéro, "Nom", Force, Points de vie +
-DATA Combat (%), Nb attaques, Défense (%) +
-DATA Arme, Pratecltion +
-DATA Points d'expériences, Trésaor +
-" DATA -1 = fin des créaturés +
-creaturés data: +
-I NHVÉREEEAAAAE +
-c18 (B | L +
-| g o ke ol ol o T ol +
-* FORCE:18; VIE:30 +
-* COMBAT:68%; — ATTAQUE:2; DEFENSE:50%; +
-ARME-Griffes: PROTECTION:Fourrure épaissé +
-EXP:1000; TRESOR:Aucun +
-DATA 1,"OURS", 18,30 +
-DATA 68,2,50 +
-DATA 1,7 +
-DATA 1000, 0 +
-| kNOR +
-L % 9. LOUP CRIS * +
-| gtk kB E et RS +
-FORCE:13; \ VIEz12 +
-* COMBAT:B0%: ATTAQUE:1l; DEFENSE:d40% +
-ARME:Crocs: PROTECTION:Fourrure épaissé +
-EXP-Z00; TRESOR:Autun +
-DATA Z, 'LOUP GRIS*,13,12 +
-DATA 80,1,40 +
-DATA 2,7 +
-DATA 200,0 +
-LR b Lok o g +
-* 335ERPENT -* +
-TIR e e e +
-FORCE+10: YIE:1B +
-COMBAT:60%; ATTAQUE:1; DEFENSE:30 +
-ARME :Morsure; PROTECTION:Fcailles; +
-* EXP-400: TRESOR:Aucun +
-DATA 3,"SERPENT",10,16 +
-DATA 60,1,30 +
-DATA 3.3 +
-DATA 400, 0 +
-L o o b o T R T T b Ak R R e o e e i B +
-* * 20 : BARBARE DU DESERT * +
-D p e d R e d r d E +
-FORCE:14; FOINTS DE VIE:13 +
-! COMBAT - 603 ATTAQUE+2+ DEFENSE:35 +
-ARME:Cimeterre; PROTECTION:Armure de cuir +
-* EXP:800; TRESOR:Moyen +
-DATA 20,"BARBARE DU DESERT",14,13 +
-DATA 60,2,35 +
-DATA 18,40 +
-DATA B0Û, 2 +
-L p E +
-# 215 QROUE” +
-o dede ke de ok & NN N W +
-FORCE:13; POINTS DE VIE:14 +
-COMBAT:62; ATTAQUE:1; DEFENSE:S50% +
-ARME :Masse; PRflTEETIDH:HrmurE_dE cuir +
-* EXP:150; TRESOR:Faible +
-DATA 21,"OROUE",13,14 +
-DATA 62,1,50 +
-DATA 13,40 +
-DATA 150,1 +
-I gktttRR +
-' Æ 22: ELFE NDIR * +
-l gl ol ol e e e ey R R o +
-FORCE:12: POINTS DE VIE:16 +
-COMBAT:90% ATTAQUE:3; DEFENSE:50 +
-* ARME:Epée longue; PROTECTION:Armure de plaques +
-" EXP:2000; TRESOR:Moyen +
-DATA #2,"ELFE NQIR",12,16 +
-DATA 90,3,50 +
-DATA 12,42 +
-DATA 2000,2 +
-I ko g ok o S E o A R W W +
-ATAR| MAGAZIME E BEST OF GFA BASIC +
-"* 50: DEMON * +
-RU ÉT R AN A +
-FORCE:20:; POINTS DE VIE:50 +
-COMBAT:90; ATTAQUE:5; DEFENSE:80 +
-ARME-Griffes; PROTECTION:Feau de démon +
-! EXP-10000; TRESOR:Aucun +
-DATA 50,"DEMON" , 20,50 +
-DATA 90,5,80 +
-DATA 1,6 +
-DATA 10000,0 +
-I Fdxxdttithraextihl +
-| * 51: CRAGON 7* +
-ÉURRRERAEÉTERERRX +
-FORCE: 30 POINTS DE VIE:500 +
-COMBAT:100 ATTAQUE:10 DEFENSE:90 +
-ARME:Souffle de feu; +
-PROTECTION: Feau de Dragon +
-' EXP:90000; TRESOR: Fabuleux +
-- c +
-DATA 51, "DRAGON" 30,500 +
-DATA 100,10,90 +
-DATA 4,5 +
-DATA 90000,4 +
-DATA -1 +
-La procédure Cinit creatures remplit le tableau def creaturek +
-() avec les créatures définies dans les lignes de DATA, +
-PROCEDURE init crealures +
-LOCAL n%,nom$, force*,points vie% +
-LOCAL combat®,nb attaques“,defénsé# +
-LOCAL arme%,protection& +
-LOCAL experiences, Lresor® +
-RESTORE creatures data +
-+
-READ n +
-EXIT IF n%=-1 +
-READ nomt +
-READ force* +
-READ points vie* +
-READ combat* +
-READ nb attaquess +
-READ defenses +
-READ armes +
-READ protéction= +
-READ experiance +
-READ tresors +
-num_;reaturui{nêjwnnmî +
-def creature%(n%,1)=forces +
-def creature=(n%,2)=poivnitcsk +
-def creature“(n‘,3)=combat# +
-def creature“{n&,4)=nb attaqués* +
-def creature%(n%,5)=defenses +
-def creature%(n*,6)-armes +
-def creature%(n#,7)=protectioné +
-def creature*%(n#,8)=experience* +
-def creature=(n%,9)=trésors +
-LOOP +
-RETURN +
-Les fonctions suivantes permettent au programme d'obtemir des informacions +
-sur vne créature sans s'occuper de la structure de stockage +
-des données, Elles simplifient la programmation éc augmentent la +
-FUNCTION force creature({creatures) +
-RETURN def creature%(creature*,1) +
-ENDFUNC +
-FUNCT ION vîe_cre&ture[creatureä] +
-, RETURN def creature%{creaturey,?2) +
-ENDFUNC +
-FUNCTION combat creature(creature*) +
-RETURN def creatures(creatures3,+
-ENCEUNC +
-FUNCTION nb attaques creature(creature*) +
-RETURN def creature*(creature%,4) +
-ENDFUNC +
-FUNCTION defense creature{creature*) +
-RETURN def creature%(creature*,5) +
-ENDFUMNC +
-FUNCTION arme creature(creatured) +
-RETURN def creature%(creature=,b) +
-ENDFUNC +
-FUNCTION protection creature(creature%) +
-RETURN OEef_;reature%[Ereature%,?+
-‘ ENDFUNC +
-ä +
-FUNCTION experience creature(creature®) +
-RETURN def creatureX(creature%,8) +
-ENDFUNC = +
-FUNCTION tresor creature(creature*) +
-RETURN def creature%(creature%,9) +
-ENDFUNT +
-Définition du personnage +
-Le personnage est péré d'uné manière lépérement différente de celle +
-des créatures, Î possède une donné supplémentaire: le nombre de +
-points de vie temporaire, Ces points de vie diminuent lorsque le personnage +
-reçoit un coup dans un combat. 5i le nombre de points de +
-vic temporaire tombe 4 0, le personnage est mort. +
-Les créatures ne possédent pas de points de vie temporaires car leurs +
-caractéristiques sont informatives, Lorsque le programme doir gérer +
-un combar entre le personnage et une créaturé, il récopie dans une +
-ATAR| MAGAZINE m BEST OF GFA BASIC +
-variable spéciale le nombre de points de vie de la créatute et décrémente +
-cette variable lorsque la créiture reçoit un coup. Ce système +
-évite de modifier la valeur des caractéristiques stockées en mémoire, +
-Si le personnage rencontre un loup peu de remps après avoir tué Un +
-premier loup, les caractéristiques du second doivent être identiques à +
-celles du premier (et tout particulièrement le nombre de points de +
-vie). +
-Le nom du personnage est stocké dans la variable nom persob. Les +
-caractéristiques sont stockées dans le tableau def perso¥(). La caractéristique +
-Expérience correspond au nombre de points d'expé +
-rence accumulé par le personnage lors de ses affrontements. Elle +
-vaut C au débue du programme. +
-nom perso$="" +
-DIM def perso=(9) +
-‘ def perso%(1) = Force +
-def perso%(2} = Points de vie max +
-def perso%(3) = Points de vie temporaire +
-def perso%(4) = Compétence de combat (%) +
-def perso®(5) = Nb attagues +
-def persot(6) - Compétence de défense (%) +
-def perso%(7) = Expérience » +
-def perso%(8) = Arme +
-def perso&(9) = Protection +
-+
-Les statistiques du personnage sont définies dans des lignes de DATA. +
-Etant donné le peric nombre de caractéristiques, elles auraient pu +
-être écrites directement dans les variables concernées, mais c'ost une +
-métheode de programmation à éviter. +
-! DATA Nom, Force, Foints de vié +
-DATA Combat (%), Nb'attaques, Défense (%) +
-DATA Arme, Protection +
-nom: KURT BRISE-CRANE +
-FORCE:13; VIE:15; +
-COMBAT:70%; ATTAQUE:1; DEFENSE:bD% +
-ARME-EPEE LONGUE; Protection: COTTE DE MAILLES +
-+
-perso data: +
-DATA "KURT BRESE-CRANE".13,13 +
-DATA 701,60 +
-DATA 12,41 +
-La procédure @init_perso initialise la variable nom_perso} et le tableau +
-def perso®() avec les informations définissant le personnage. +
-PROCEDURE init perso +
-LOCAL nomt, force*,points vies +
-LOCAL combat&,nb _attaques®,defenses +
-LOCAL armes,protectionk +
-RESTORE perso data +
-+
-READ nom$ +
-READ forces +
-READ poînts vies +
-READ combat* +
-READ nb attaques= +
-READ defenses +
-READ arme* +
-READ protéctions +
-nom pérsos=nom$ +
-def persos(1)“force* +
-def perso®%(2)=points vieq +
-def perso%(3)=points_vie% +
-def perso=(4)=combat® +
-def perso®(5)=nb_attaques* +
-def perso%{6)=defenses +
-def perso(7)=0 +
-def perso%(8)=arme% +
-def perso#(9)=protection* +
-RETURN +
-Les fonctions suivantes permettent au programme d'accéder facilement +
-aux données définissant le personnage. De la même manière +
-que les foncrions d'informations sur les créatures, elles permettent +
-d'accéder aux informations du personnage sans rien connaïtre de +
-léurs structures de stockape. +
-FUNCTION force perso +
-RETURN def persox(1) ! +
-ENDFLUNC +
-FUNCTION vie max perso +
-RETURN def perso%(2) +
-ENDFUNG +
-FUNCTION vie perso +
-RETURN def perso%(3) +
-ENDEUNL +
-FUNCTION Combat persa +
-RETURN def persos(4) +
-ENDFUNE +
-FUMÉTION nb attaques perso +
-RETURN def perso%(5) +
-ENDFUNEC +
-FUNCTION defense perso +
-RETURN üeî_perâü%[fi} +
-ENDFUNC +
-FUNCTION experience perso +
-RETURN def persoë(7) +
-ENDFUNE +
-FURCTION arme perso +
-RETURN def perso%(8) +
-ENDFLINC +
-FUNCTION protection perso +
-ATARI MAGAZINE H BEST OF GFA BASIC +
-RETURN def perso%(9) +
-ENDFUNC +
-Bonus aux dommages +
-Un homme fort fait plus de dégâts avéc une épée qu'un fréle garçon +
-utilisant la même arme. Les dégâts supplémentaires viennent de la +
-différence de force entre l'homme ct le garçon. Pour sumuler Peffer +
-de la force sur les dommages, le programme calcule le dommage d'une +
-attaque en additionnant le dommage de l'arme et une valeur +
-appelé «bonus de forces. Le bonus de force dépend de la force de l'attaquant. +
-Plus un personnage est fort, plus son bonus de dommage +
-est important. De la même manière, plus un personnage est faible, +
-moins son bonus de Force est élevé. Une créature vraiment faible +
-peut même avoir un bonus de dommage négatf, La mamere la plus +
-simple de gérer les bonus de force est de les stocker dans le tableau +
-bonus dommage%{}. Pour connaître le bonus de force de la Torce +
-f%, il suffir de lire la valeur de bonus dommage={f#). +
-DIM bonus dommages{30) +
-La valeur des bonus est stockée dans des liemes de DATA. Les bonus +
-ont été établis en tenant compte qu'un homme avéc une foice de 10 +
-tl'a aucun bonus, Is sont définis sous la forme «Force/Bonuss. La +
-valeur -1 est l'indicateur de fin de données. 51 vous voulez étendre | +
-table de bonus au-delà de 30, i1 faut augmenter la taille du tableau +
-bonus donmage*(). +
-bonus dommages data: +
-DATA 1,=6, 2,-4, 3,=-3, 42 51 +
-DAEN 61 i By 8L / 1F0 +
-DATA EE.0x - 2. B3, 18474 1655 +
-DATA 16,4, 17,5, 18,6, 19,7, 206 +
-DATA: 2105 22 dd, 2311, C les 79577 +
-DATA 26,14, 27,15, 28,1k, 29,17, 30,19 +
-DATA =1 +
-Binit bonus charge les bonus dans le tableau bonus dommages (). +
-PROCEDURE init bonus +
-LOCAL n%, bonus% +
-ARRAYFILL bonus dommage#(},+
-RESTORE bonus dommages data +
-DD +
-READ n* +
-EXIT IF n%==1 +
-READ bonuss +
-bonus dommage* (n#)=bonus® +
-LODP +
-RETURN +
-La lonction @bonus force(force®) fournit le bonus de force cor +
-respondant à la force force*, +
-( E d e RE É E e e ETE e e e e e e e e e e E S +
-- % MALEUR DU BONUS DE FORCE * +
-I UTVARINÉTÉEETTEEÉTÉÉA TR TUR RRÉE +
-FUNCTION bonus force(force*) +
-RETURM bonus dommage*(force=) +
-ENDFUNC +
-Initialisation des données du programme +
-La procédure Ginit datas inittalise les rableaux de données avec la +
-définition des différents objers du jou (armes, protéctions, trésors, +
-etc.) Elle doit impérativement être appelée en debut de programme. +
-PROCEDURE init datas +
-Pinit armes +
-Binit protections +
-Binit trésors +
-Binit bonus +
-Vinit perso +
-GInit creatures +
-RETURN +
-Exécution d'un combat +
-Pour exécuter un combat, le programme a bésoin de connaître le +
-type de la créature affrontant le personnage et son nombre de points +
-dé vie La procédure @exec combat{creatures) simule un combar +
-entre le personnage et une créature de type creature. Le type de +
-créature est stocke dans la variable gluh;ale typ ennemis et son +
-nembre de points de vic dans la vartable globale vie ennemi%, +
-Dés que l'un des combattants est mort, la routine Gexec combat aifiche +
-le résultat du combar, Si le personnage est vivant, elle affiche le +
-nombre de points de vie rescant, le nombre de points d'expérience +
-gagnés ot le type de trésor éventuellement possédé par la créature. +
-PROCEDURE exec combat(creature*) +
-LOCAL m£ +
-LOCAL tresors +
-LOCAL tresorf +
-LOCAL exp# +
-typ ennemi%=creatures +
-vie ennemis=@vie creature(creature*) +
-Ecombat +
-ÎF @mort ennemi=l +
-m$=nom créature${typ ennemi#) +
-m$=m$+" est mort” +
-FRINT +
-PRINT m£ _ +
-tresor*=-Étresor creature(typ ennemi*) +
-exp4+-Hexperience creature(typ ennemi*) +
-IF trésor&e>û +
-@Éeacriutiün_treaur{treaurä,trüäürfil +
-PRINT "TRESOR : ";tresors +
-ENDIF +
-PRINT "EXFERTENCE : "zexp® +
-PRINT “Points de vie perso : "; +
-ATAR| MAGAZIME W BEST OF GFRA BASIC +
-== +
-—_d' i +
-PRINT @vie perso: "Ry é Mmax perso +
-PRINT +
-ENDIF +
-IF @mort perso=l +
-PRINT +
-PRINT nom persof+" est mort" +
-ENDIF +
-RETURN +
-La fonction @morl ennemi reste st l'adversaire du personnage est +
-mort en regardant la valeur contenue dans la variable vie _ ennemi*, +
-Elle renvoie 1 si l'adversaire est mort ct O dans le cas contraire. +
-| HEF s L L PR S LR E R A R R IERE +
-" % TEST SI L'ADVERSAIRE DU PERSD EST MORT * +
-I kR R E R AN e R Ry ARtk d e e e e e RE AW +
-FUNCTION mort ennemi +
-LOCAL resul t® +
-LF vie ennemiz<={ +
-result#=] +
-ELSE +
-result==0 +
-ENDIF +
-RETURN results +
-ENDFUNC +
-La fonétion émort_perso teste si le personnage est mort. Elle utilise +
-la routine @vie perso pour connaître le nombre de points de vié| +
-restant du personnage. Elle retourne 1 si le personnage est mort et 0 +
-dans le cas contraire. +
-Vg g o v e o e or oo o ok o ok e e e i R RRN e RR +
-" % TEST SI LE PERSONNAGE EST MORT * +
-L T E B 1 I i o be r e e e " e r e e d +
-FUNCTION mort perso +
-LOCAL résult* +
-IF @vie perso<=0 +
-result#=1 +
-ELSE +
-resull#=[ +
-ENDIF +
-RETURN resutl% +
-ENDEUNEC +
-Gestion du combat +
-La procédure @combät gére l’enchaïnement des rounds de combat. +
-La procédure @round combat simule Pexécution d'un round. Le +
-combar ne s’arrête que lorsque l’un des combattants est mort. +
-L dc d é d E R E A P R RESRE SE t +
-! # o GESTION DU COMBAT #* +
-L E E E e E E R R E e dc d uE +
-PROCEDURE combat +
-DD +
-@round combat +
-CAIT IF Émort perso=1 +
-EXIT IF @mort ennemi=l +
-LGOP +
-RETURN +
-Exécution d'un round de combat +
-La procédure Oround combat gère l'exécution d'un round de combat, +
-Les adversaires frappent les uns apris les aucres jusqu'à épuisement +
-de leur nombre d'attaques. Le combat cesse immiédiarement st +
-l'un des combattants meurt. +
-La routine lit le nombre d'arraque de chaque combattant, puis les +
-exécute à la suite, La variable nb_att perso® contient le nombre +
-d'attaques du personnage, Le nombre d'atraques de son adversaire st +
-stocké dans la variable nb att ennemi*% Le conrenu de ces variables +
-est cdécrémenté après chaque artaque. +
-|l o o e e b e S ol E E RR SE RE +
-! * EXECUTION D'UN ROUND DE COMBAT * +
-P REREÉÉPERRERERR RRN E A A E E +
-PROCEDURE round combat +
-LOCAL nb att persox +
-LOCAL nb att ennemi% +
-nb att perso%=Enb attaques perso +
-nb att ennemi$=@nb attaques creature(typ ennemi%) +
-REFPEAT +
-IF nb att persos<=0 +
-Gattaque ennemi +
-DEC nb att persos +
-ENDIF +
-EXIT IF @mort ennemi=l +
-IF nb att_ennemis==0 +
-Pattaque perso +
-DEC mo att ennemi= +
-ENDIF +
-EXIT IF Bmort perso=l +
-UNTIL (nb att perso%=0} AND (nb_att ennemi%=0) +
-RETURN +
-La routine Ground combat utilisé la fonction @nb attaque perso +
-pour connaître le nombre d'artaques du personnage. Cetté fonchion +
-assuré l'interfäce entre le programme et une des informations definissant +
-lé pérsonnagé, +
-La routine Qattaque ennemi simule une attraqué du joueur contre +
-son adversaire, La routine daitaque perso simule une attaque de +
-l'ennemi concre le personnage. +
-Le personnage attaque son adversaire +
-La procédure @attaque ennemi gére l'attaque du personnage contre +
-son ennemi, La probabilité que le personnage couche son adversaire +
-est la compétence de combat du personnage diminuée de la +
-compétence de défense de l'ennemi, Si la probabilité dé toucher est +
-ATARI MAGAZINE D0 BESTOFGFA BASIC +
-trop faible, elle est ajustée à 5% afin qu’un combattant trop faible aie +
-quand même une chance de roucher son adversaire (même si célui<+
-est une créature fabuleusément puissante). +
-D B I e 0 o U S e e d d E +
-! * LE PERSONNAGE ATTAQUE #* +
-b SÛN ENNEMI % +
-I WA E ik s & o o RR R TR +
-PROCEDURE attaque ennemi +
-LOCAL combat perso% +
-LOCAL defense creatures +
-LOCAL pourcentages +
-LOCAL mb +
-+
-combat perso%=@combat perso +
-defenae_treature%-@defenae_creature{typ_ennemi%] +
-pourcentage%*=combat perso%-defense creature* +
-IF pourcentage*=<+
-pourcentage*%=5 +
-ENDIF +
-IF (RANDOM(100)+1)<=pourcentages +
-dommage“=Édommage creature(num _ ennemi#) +
-IF dommagete=0 +
-SUE vie ennemi®, dommage* +
-mÿ=nom creaturet(typ_ennemi %) +
-mé=m$+" reçoit "+STR}{dommage*) +
-mi=mi+" points de dommage" +
-PRINT m +
-ENDIF +
-ENDIF +
-RETURN +
-Si l’ennemi est touché, le programme affiche le nombre de points de +
-dégâts. Le programme teste la valeur des dommages pour éviter d'affichér +
-un dommage de 0 point de décâr. +
-Cela peut arriver s une créature dotéé d'une forte protection reçoit +
-un coup faible (par exemple un coup de canif contre une armure de +
-plagues). +
-Calcul des dommages causés +
-par le personnage +
-La fonction @dommage creature calcule les dégâts fait par le jouèur +
-à son ennemi. Ils sont égaux aux dommages causés par l'arme du +
-personnage, plus le bonus de force du personnage, moins la protect- +
-lfll'l'l_ dfi ]"-!:n:ru:mi- +
-Dans certains cas de figure, le dommage peut être négatif, Cela peut +
-notament arriver avec une arme faible et une grosse valeur dé protecton. +
-Pour éviter cela, les dépâts négatits sont automatiquement +
-ajustés à 0. +
-FUNCTION dommage creature(creatures} +
-LOCAL force* +
-LOCAL arme +
-LOCAL dommages: +
-LOCAL protections +
-force*=Pforce perso +
-arme*=Carme perso +
-protect{on%=@protection creature(creatures) +
-dommage%-Édommaargmee [armes) +
-ADD dommage%,@bonus force{forces) +
-SUB dommage%,Bvaleur prôtection({protections) +
-IF dommage*=<i - +
-dommage*=û +
-ENOIF +
-RETURN dommage* +
-ENDFUNC +
-L'adversaire attaque +
-le personnage +
-La procédure Pattaque perso gère l'attaque de l'ennemi contre le +
-personnage. Elle fonctionne de la même manière que la procédure +
-Battague ennemi & céci que l'attaquant et le défenseur sont in- +
-+
-VErSCS +
-| A A R E E U E S É RR R A A E E E A A RIR E S +
-°* L'ENNEMI typ creatures * +
-" * ATTAQUE LE PERSONNAGE ™ +
-| HEN ETÉEETATEREENAN +
-PROCEDURE attaque perso +
-LOCAL combat ennemis +
-LOCAL defense perso® +
-LOCAL pourcentage* +
-combat ennemi*=Éécombat creature(typ_ennemi*) +
-defense perso*-Édefense creature(typ_ennemi*) +
-pourcentage%=combat ennemi%-defense persos +
-L} +
-1F pourcentages<+
-pourcentage*=5 +
-ENDIF +
-1F (RANDOM(100)+1)<=pourcentage* +
-dommage*=Édommage perso{typ ennemi=} +
-IF dommages==0 +
-@Eec_vie_persn[duwwmge%} +
-m$=nom perso$+" perd "4STR4 {dommage* } +
-m£=m{+" points de vie." +
-PRINT mi +
-ENDIF +
-ENDIF +
-RETURN +
-Certe routine affiche le nombre de points de dégats encaissés par le +
-persontage quand i1l ést touché Un test sur cette valeur evite d'affrcher +
-un dommage de 0 point. +
-La procédure @dec vie perso(dommage&) permet de gérer facile +
-ment la perte de poinrs de vie du personnage. +
-ÉATAR| MAGAZINE W BEST OF GFA BASIC +
-Calcul des dommages recus +
-par le personnage +
-La fonction @dommage perso(creatures) calcule les dommages +
-causés par la créature crealuret contré le personnage. Leur valeur +
-est calculée en fonetion de l'arme et du bonus de force de la créature +
-Le dommage est diminué de la valeur de prorection du personnage. +
-Le principe de fonctionnement est le même que celui de la procédure +
-dommage crealure(creatures). +
-| T SRR I RE É RR R e e T EARRR E PO B o RE +
-' * CALCUL DU DOMMAGE FAIT PAR LA CREATURE o +
-! * creatureñ AU PERSONNAGE s +
-| hhh e d e e AR AR T A d e P +
-FUNCTION dommage perso(creature) +
-LOCAL forces +
-LOCAL armet +
-LOCAL dommages +
-LOCAL protections * +
-forcet=Gforce creature(creature*) +
-armes=Garme creature(creature) +
-protections=Cprotection perso +
-doimage*=Bdommage arme(arme*) +
-ADD dommage&, @honus force(force) +
-SUB dommages @valeur protection(protections) +
-IF dommage=<+
-dommage*%=0 +
-ENDIF +
-RETURN dommages +
-ENDFUNC +
-Certe routine utilise la fonction Évaleur protection(protection%) +
-qui permer de connaître le nombre de points de protection +
-assuré par l'objet protections. Les éventuels dommages négatifs +
-sont autômatiquement remis à 0. ' +
-Perte des points de vie du personnage +
-Ia fonction êdec vie perso(n#) diminue les points de vie temporaires +
-du personnage, Le nombre de points de vie temporaire ne peuvent +
-descendre en-dessous de 0. +
-PROCEDURE dec vie perso(n*) +
-SUB def persof(3),n% +
-IF def perso%{3)=<+
-def perso%{3)-0 +
-ENDIF +
-RETURN +
-Augmentation des points de vie +
-du personnage +
-Là procédure inc vie perso(n%) augmente le nombre de pounrs +
-de vie temporaire de n& points. Elle effectue un test pour s'assurer +
-que le nombre de points ne dépassé pas le nombre de points maximum +
-du personnage. +
-PROCEDURE inc vie perso{n%) +
-ADD def perso%(3),n% +
-IF def perso%(3)>0vie max perso +
-def perso%(3)=@vie max perso +
-ENDIF +
-RETURN +
-Soins médicoux +
-Après avoir perdu des points de vie dans un combat, le personnage +
-peut se rendre chez un soigneur pour reprendre des forces. Afin de +
-simuler les aléas de la réalité le personnage ne récupère pas un +
-nombre fixe de points de vie, mais vn nombre déterminé avec une +
-formule aléatoire. Un soin permer de récupérer 3 points de vie au +
-minimum & 6 points au maximuni. Le titage se fait avec l'instruetion +
-RANCOM(4)+3. La formule RANDOM(4) fournit un nombre +
-aléatoire compris entre Ü et 3, +
-PROCEDURE soins perso +
-LOCAL soins% +
-[F @vie perso=Ëvie max perso +
-PRINT "Pas bésoin de soins” +
-ELSE +
-soins*=RANDOM(4]+3 +
-IF (Bvie perso+soinsk)=@vie max perso +
-s0ins%=0vie max pérso-évie perso +
-ENDIF +
-@inc_vie perso(soins®) +
-PRINT "Le personnage récupére ; +
-PRINT STRÿ(soïns*); +
-PRINT " points de vie." +
-PRINT “Points de vie perso : "; +
-PRINT @viep erso;"/":Bvie_pmerasxo +
-ENDEF +
-FRINT +
-RETLIRN +
-La procédure Bsoins perso soigne le personnage et affiche le résultat +
-des soins. Le programme ajuste le nombre de points de soins de +
-manière à ne pas dépasser le nombre de points de vie maximal. +
-Les jeux de rôle micro offrent divers méthodes de soins : sorts de +
-guérison, potions magiques de soins, guérisseurs, herbes médicinales, +
-ete, Ces méthodes fonctionnent toute de la même manière, c'ést-é<di +
-re en augmentant lé nombre de points de vie, Mais ils peuvent varier +
-au niveau de Pefficacité, du prix et de la disponibilité +
-Pour varier les plaisirs, vous pouvez introduire dans votre jeu des +
-soins particuliers permettant de guérir des maux spécifiques (por +
-sons, maladies, malédictions, etc.) +
-ATARI MAGAZIME H BEST OF GFA BASIC +
-Structure du programme complet +
-La srrucrure du programme complet est la suivante : +
-RESERVE 100000 +
-* Déclaration des tableaux +
-Binit datas +
-Emain +
-END +
-' Code procédure main +
-' Codes des procédures du programme +
-' Definition des données en DATA +
-La procédure principale +
-La procédure @maîn est une procédure de test qui vous permet de +
-tester le système de combat. C’est une routine 'minimum' qui simule +
-le programme de jeu de rôle appelant le gestionnaire de combat. +
-PROCEQURE main +
-LOCAL c$,creat% +
-+
-PRINT "C)ombat" +
-PRINT "S)oins perso" +
-PRINT "F)in combat” +
-LY +
-cH=INKEYS +
-ch=lPPER${(ch}) +
-EXIT IF (c$="C") OR (c$="5") OR (ch~"F"+
-LODP +
-SELECT cf +
-CASE "CM, "c* +
-INEUT "Muméro créature " ,creat= +
-PRINT +
-Bexec combat(creat*) +
-CASE ||--5l.'|!|I5II +
-@soins perso +
-ENDSELECT +
-EXIT IF (c$="F") OR (c$="{"+
-EXIT IF Émort perso +
-LOOF +
-RETURN +
-Améliorations du programme +
-Le système de combat peut être amélioré de nombreuses manières. +
--Vous pouvez rajouter une caracteristique D'externite ct faire en sorte +
-que la créature ayant la plus forte dextérité frappe en premier. +
-Le personnage peéur affronter plusieurs ennemis à la fois. Les modifi- +
-La psychologie des creatures du jeu est trés sumple puisqu'elles combattent +
-jusqu'à la mort. Ce n'est pas tres realiste. Les créatures devraient +
-avoir la possibilité de fuir lorsqu'elles commencent à perdre +
-ATARI MAGAZINE Ë BEST OF GFA BASIC +
-l---'--'---------fl------------nl-l---'-- +
-- à ue E à u H à H R u H N S EN E S O S B S rs e S r S S S S B B B S S OB E S S S S S CO E S S C C r E +
-possibilité de rompre le combat. La visualisation des combars est +
-sommaire, Îl est possible d'ajouter des messages supplémentairafeisn +
-de rendre les combats plus réalistes. Aver bmaucoup de travail, vous +
-pouvez réaliser une visualisation graphique des combats. +
-Les listes d'objets (armes, protections, trésors ec creatures) ne sont +
-pas longues. Il peut être amusant de définir de nouvelles armes et de +
-riouvelles créatures, 51 vous nous cnvoyez des listes incéressantes, +
-nous les mettrons en téléchargement sur le serveur 3615 ATARL +
-PLUS DE 1 500 LOGICIELS GRATUITS! +
-TELECHARGEZ +
-[ le commande le KIT DE TELECHARGEMENT (câble de +
-loison Atori STminitel + une disquette confenont des +
-utilitaires de iéléchorgemenmte) permettant de +
-télécharger grruitement des centoines de progrommes, +
-De plus 6 disquétte contient e jau PMAVYIEL, pour jouer +
-contre des centaines d'odverairs à trovers toute o +
-France grâce au réseau minitel. +
-Prix excaptionnel: +
-95 F + & de frais d'expéditi=o1n0™1 F +
-O Je commande uniguement la disquetie du +
-léchormement, 3 pouces |/2 pour 51 ou prix ge +
-15 F + 6 F de porticipation oux frais d'expédifion=21 F +
-16F pour l'étrnger=31 F!, +
-[] le commande vniquement la disquette du +
-téléchargement, 3 pouces 172 pour PC au prix de 16 F +
-+ & F de participation aux frois d'expéaition= 22F +
-116 F pour l'étranger=32 F). +
-NE TAPEZ PLUS LES LISTING! +
-CHARGEZ-LES +
-[] e commande la disquette BEST OF GRA BASIC avec les +
-images ou prix de 70 F +
-Sl es écoipé d'in MAFGAeS To Eo BT e cébidse boson deilête complétpso +
-v cdc péateur SS brocres (non louri por Futicresset. +
-Ci-joint mon réglement da _ il F +
-par chèque bancaire ou postal (les mandats ne peuvent +
-être acceptés sauf pour les DOM/TOM =t étangers en FF] +
-à l'ordre d'ARTIPRESSE. +
-MNom 1 T ey E TG [0 . N o T bL e ) +
-Prénom e e [ el o S d r o B | +
-Adresse Éi e Pt el Él T e o | +
-| | | | | | | | | | +
-Code postal LS d b iy PE O C z vl Ps +
-Ville 0 P, RR HE R 2 Py RN Cm 0 SE ME +
-Pays [0 e e L S oy ool PE E 1S 1 E +
-Date decde L | 1+ | 1 99| +
-IMPORTANT : |l n'est pas accusé récepton des +
-commandes. l'encaissement de votre chèque signifie que +
-volre ordr& à élé enregistré dans le fichier informatique. +
-Délai d'expédition 3 semaines après encaissement. +
-(ENTURE A LA SOURIS +
-réer un vrai jeu +
-JEU D'AVENTURE EN GFA BASIC +
-Voici un petit jeu d'aventure du type Bat ou Final Command +
-fonctionnant entièrement à la souris que vous pourrez modifier et +
-compléter pour obtenir votre propre jeu. +
-Description du jeu ; +
-Un jeu d'aventure ést uné série de Heux. Le joueur peut se déplacer +
-d’un lieu à un autre, ct accomplir diverses actions. Dans ce programme, +
-à chaque lieu est associé une liste de zones d'action. Chaque fois +
-que la souris est placée sur l’une de ces zones, sa farme change, Ceree +
-nouvelle forme indique le type d'action associé à cet emplacement +
-de l'écran. Pour exécuter certe action, le joueur n'a plus qu’à cliquer. +
-Les actions du jeu +
-Lé JLeU t pprrrop oss 10 ne È permet pas beaucoup d'actions C'est un programme +
-de démonstration, ¢t non un jéu commercial. La publicæ ; +
-Ei[:lfl Ç_'l:.'ll'ls 1151 jÜLll'l:'lËll_ 1L I:ll."_"'. iml'}r:rfi[if': HITL-':.nniE:I'I.*-:, sartout au []i'i.'ffl.'ll +
-de la taille des listing. Les actions existances sont ; changer de heuw, +
-pésser une porté, exarmider un objet, converser avec UI personnage, +
-IM gÉT (8 |:|'lill.]":' +
-duit un effet. Le changement de heu permet de passer d'un endroit à +
-uD autre, tout comme le passage d'une porte. L'action ‘examen d'un +
-objet’ affiché un texte informauf sur l'obretr, L'action ‘conversanon’ +
-affiche le dislogue entre le jousur éc un personnage de l’aventure. Les +
-:.'ll:_.-t_i'[_'lTl__':i ,[nflngi.:]', it ll_':l[]"i'l_'El Ln L FIEÏ_HJ.U'-IH'L'[]'I. AL T I'_'!IFL‘:. dj*fdr Eiil. I::'E' SE +
-ra à vous de les programmer. +
-Quelques actions supplémentaires +
-Pour obtenir un jeu vraument utilisable, 1] faudrait ajoutér beaucoup +
-l:].lflgl:'l:il'_'lll'!._':.. -1||'r':llH.-'i q1:||.'::|-:'l1.[|.".=: il._"l{'rflfn ; .11_'|":L1'_j1.]:‘.T HITT P‘l._."'l"!'ilï:ll-l'l'lu".gl'_'_. "."'l:l]ÜT' RITE +
-objer, Utiliser un appareil électronique quelconque (comme dans +
-Bat), acheter divers objets, donner un objet, gérer les objets possèdes +
-par le joueur, ouveir une porte avec uné élé (ou défoncer ls porre), +
-ouvrir un tiroir, casser ume vitre, erc, +
-Vous pouvez ajouter aussi des options de deplacément comme monter +
-où descendré un escalier, monter dans un bateau (ou sur un cheval}, +
-sauter par une fenêtre, ctc. +
-Les idées d'actions ne manquent pas, Elles dépendent du type d'environnement +
-que vous avez choisis pour votre jeu, Les actions envisaÉTART +
-MAGATINE +
-geables dans la France des années 1930 ne sont pas les mêmes qu'à +
-Megapolis en 2387 ou qu’a Hangenar, 75000 ans avant notre ère, +
-Présentation du jeu +
-L'écrar est divisé en trois zones distinctes : les aptions système, le +
-dessin du lieu courane, et la description textuclle de ce heu, Les optlons +
-systèmé sont’ ds fonctions trés importantes auxquelles le +
-joueur doit pouvoir accéder en permanence. Ces options sont : l’option +
-“INFO" qui affiche diverses informations sur le logiciel, Poption +
-"SAUVER" qui permert de sauver l'état du jeu sur disquetté; l'option +
-"LECTURE"™ qui permet de relire une sauvegarde et l'option “ SORTIE +
-JEU" qui permet de quitter le programme en cours de Jeu, +
-INFO | [ SAUVEGARDE SORTIE JEU +
-Image du lieu +
-Description du lieu +
-Création d'une aventure +
-Pour créer une aventure, 1l faut commencer par étudier le scénarie, +
-Un bor scénario, c'est un rvpe d'environnement (fancastique, sciencé- +
-ficrion, héroïe-fantasy, historique, etc.), un théme (policier, espiunnng:.:, +
-;inLrip_;u:: p-;:-lfl.iqul:_. Horreur, -E:tl:..}. une bonne histoire, des +
-personnages sympathiques où inquiérants, des lieux origimaux (une +
-chapelle gothique, une cité sous-mariné, la morgue d'un hôpital spatlal +
-du 25ème siècle, la loge d'un concierge, une salle de rorture +
-médsévale, un thbunal de l'Inguisition, etc.}, +
-Décomposition de l'aventure +
-Une fois le scénario terminé, i faut passer par là phase d'analyse er +
-de décomposition. Il faut définir les lieux, les lions cxistant entre +
-eux, les images les représentant, les textes déscriptifs associes à +
-chaque endroit, les personnages, les dialogues ec les messages. Ceci +
-BEST OF GFA BASIC +
-est valable pour le système de jeu que je vous propose c1. 51 vous +
-avez rajouté des actions supplémentaires [et je vous le conseille), le +
-travail doit ausst étré [ait pour ces nouvelles actions. +
-Codage d'une aventure +
-Une fois l'aventure décomposée en ses éléments de basc, il faut passer +
-à la phase de codape. Le scénario doit être codé dans le programme. +
-La plupart des programmeurs professionnels urilisent des éditeurs +
-de données. Ces éditeurs génèrent des fichiers de données bitraires, +
-C'est une technique trop complexe à mettré en oeuvre dans le +
-cadre d’un arricle, C'est pourquoi j'ai choisi une solution simple, faéile +
-à metrre en oeuvre Les données sont écrites dans des Higmes de +
-DATA à la fin du programme source Au début de l'exécution, une +
-série de routines d'initialisation chargent ces données dans les tableaux +
-de donnéss. +
-Codage des messages +
-Les méssages sont codés dans des lignes de DATA Le début de la z0- +
-ne des messèee est répéré par la présence du label *messages. Leur +
-taille n’est pas fixe. Il faut done un indicareur de fin de message. Cet +
-indicareur est le caractère ** L'indicatéur de zone de message est +
-SE +
-I e e i i i e o e e T e E +
-' * 'EXEMPLES DE MESSAGES * +
-l'HERERAANNAVEETEEREEAAETÉT +
-messages: . +
-DATA Ceci est Te premier message du jeu. Il est +
-DATA affiché lorsque le joueur clique sur là zone +
-DATA correspondante. !l peut correspondre à la +
-DATA deacrifitifln d'un objet, ou d'un Tieu particulier. +
-DATA * +
-DATA Voici le sécond message. Il est un peu plus court +
-DATA que le prémier, mais tout aussi important. +
-DATA * +
-DATA *FIN +
-Codage des dialogues +
-Les dialogues sont aussi codés dans des lignes de DATA, Leurs structures +
-est identique à celle des messages. Ces dialogues sont Lrés un +
-plifiés, Dans un jeu commercial, il faudrait avoir des échanges verbaux +
-un peu plus éroffés. La zone de stockage de dialogues est indiquét +
-par la présence du label *dialogues”. +
-| ÉRRTTAETRÉÉEETÉETÈRERÉEEEÉÉTESE +
-# EXEMPLES DE DIALOGUES 7* +
-I xxh VNF FFNF +
-dialogues: +
-DATA Le vieil homme vous répond que la clë de la +
-DATA sagesse se trouve dans la connaissancé, et +
-DATA non dans une croyance aveugle, +
-DATA * +
-DATA Le magicien vous explique qu'il a raison. Il +
-DATA vous laisse le choix entre être de son avis, +
-ATARI MAGATINE +
-DATA ou Yeceyvoir une boule de feu. +
-DATA * +
-DATA Le jeune mercenaire vous répond qu'il est du +
-DATA coté de celui oui Tui donne le plus de piêèces +
-DATA d'or. +
-DATA * +
-DATA “FIN DIALOGUES +
-Codage des formes de souris +
-Les formes de souris sont stockées dans des lignes de DATA selon le +
-formar défini dans l'arricle Bibliothèque de formes de souris. Ellés +
-ont été fabriquées à partir d’une image Degas Elite grice au générateur +
-de souris décrit dans l'article sur les souris (source disponible en +
-téléchargéement]. +
-L& listing fourni avéc cet article comprend 8 formes de souris. Vous +
-pouvez les utiliser pour votre propre programme, oùu en rajouter +
-d'autres. Chaque souris à son numéro d'identification. Il n'y à pas +
-une forme de souris pour une action spécifique, Par exemple, les souris +
-<ALLER DROIT DEVANT=, <ENTRER PORTEZ et <DEMI-TOUR= correspondent +
-toutes à Paction <DEPLACEMENT= Pour le joueur, aller devant +
-lui, entrer par une porte ou faire demi-tour dans une rue ne +
-sont pas les mêmes actions, alors que pour le programme, 1l s'agit +
-toujours de passer dans un autre lieu. +
-: <ALLER OROIT DEVANT= +
-: <ENTRER PORTE= +
-- <PARLER= +
-- <MANGER= +
-: <BOIRE= +
-: <FRAPPER= +
-: <0EIL> (pour <EXAMEN=) +
-: <DEMI=TOUR= +
-O— OH -HS- RN 0 = +
-Codage des actions +
-Les actions sont des routines du programme. Elles ont toutes ün +
-numére d'identification. +
-Action <DEPLACEMENT= : 1 +
-Action =PARLER= 2 +
-Action =MAMGER= : 4 +
-Action <BOIRE=>+
-Action =EXAMEN= / +
-Codage des lieux +
-An niveau interne, les lieux sont définis comme une série d'informations. +
-Ces informations sont : une ifmage, un texte descriptif, et un +
-cértain nombre de zones de cliquage correspondant chacune à une +
-action réalssable dans ce lieu, : +
-COn associe à chaque action un paramètre spécifiant Pobjer avec +
-iu;'.::qul.:l. l'action doit s'elfectuer Üe numéro du nouveau liëu pour +
-<[EPLACEMENT=, la personne pour <DIALOGUEZ, le numéro de imessace +
-pour <EXAMEN=, etc.…). +
-l'image est une image dessinée avec le logiciel de dessin Degas Flite, +
-stockec sous un format binaire avec le programme GEN IMGS. La +
-BEST OF GRa BASIC +
-[ eT +
-S T +
-:t-es{:hniqu: à mettre en oeuvre pour cérte üpêrfiiün est m{pliquà: un +
-peu plus bas avec les détails sur GEN IMGS, +
-Prenons un exemple de liew H s'agit d'une pièce fermée avec une +
-seule porte. Cette porte donne sur un,long couloir. La pièce est +
-éclairée par de grandes torches. Le joueur ne peut accomplir que +
-deux actions: examiner les rorches ou passer la porte. La description +
-de ce lieu comprend : le nom du fichier binaire contenant l'image de +
-ce lien, le texte descriptif de la porté, et la définition des deux zones +
-de clics (les corches et la porte). +
-I E e e e e e e d r e d d d e e E +
-(* - EXEMPLES DE LIEU * +
-bl SO T n e e E A RR +
-lieux: +
-I OT e E r d e eA rr ced rrarr ard ecde e p d 006d0 R E +
-" * LIEU 1. ¢ SALLE AVFE TORCHES - * +
-LRN RE AN A N A E N d E e É A A E +
-DATA SALLE.BIN +
-DATA Vous vous trouvez dans une grande salle écjairée +
-DATA par d'immenses torches en métal. La seule issue +
-DATA visible est une gigantesgue porte en bronze. +
-DATA * +
-DATA 30,40,100,35,7,7,+
-DATA 100,40,30,50,2,1,+
-DATA =1 +
-La ligne 30,40,50,35,7,7,1 contient le codagé de la première zone +
-de-clic. Certe zone est positionnée à la position (30,40). Elle à une +
-largeur de 50 pixels, et une hauteur de 35 pixels. Lorsque la souris +
-passe sur cette zont, elle doir avoir la forme 7 (<EXAMEN=]. En cas de +
-clic souris cétte zone, 1l faut appélér la rourine 7 (<AFFICHAGE D'UN +
-MESSAGE=), et afficher le message numéro 1. Ce message est une description +
-assez horrible des gravures des torches. +
-La ligne 100,40,30,50,2,1,2 contient le codage de la seconde 20 +
-ne de clic, Cette zone est située à la position (100,40), Elle à une larseur +
-de 30 pixels, ¢t une hauteur de 35 pixels. Lorsque la souris passe +
-dessus, elle doit avoir la forme 2 (<PASSER PORTE=). 5i le joueur +
-clique sur certe zone, il faut appeler la rourine 1 (<DEPLACEMENT=). +
-Le nouveau lieu sera le lieu 2. +
-La fin des zones est indiquée par la ligne DATA -L La fin de tous les +
-lieux est Indiquee par la hgne DATA *FIN. +
-D e e e e e R R E RR ETEE +
-(* LIEU:2 — COULOIR * +
-| t***ttttt***t#*#tttt#+
-DATA COULOIR. BIN +
-DATA Vous vous trouvez actuel lement dans un +
-DATA gigantesque couloir. I1 semble 5 étendre +
-DATA à l'infini. 1l y à une inmense porte +
-DATA de bronze dans votre dos. +
-DATA * +
-DATA 20,80,200,10,8,1,+
-DATA =1 +
-DATA *FIN +
-Il o'y à qu’une seule zone de clic dans ce lieu. La forme de souris +
-correspondante ést la forme & (<DEMI-TOUR=). Lorsque le joueur +
-ATARI MAGAZIME +
-clique sur cétté zone, le programme lance l'exécution de la rourine +
-1 (<DEPLACEMENT=), et le joueur se retrouve dans le heu 1. La +
-ligne DATA “FIN indique qu'il n°y a pas d'autres lieux dans cette mini- +
-aventuré. +
-Astuce de commentaire +
-On ne peut pas mettre un commentaire sur la même ligne qu'une +
-instruétion DATA, car ce commentaire serait interprété comme une +
-chaîne de caractéres appartenant & cetle même instruction DATA. +
-C'est ennuyeux, car cela oblige à une répartition inesthétique des +
-commentaires. Pour éviter cela, on peut “ruser, ef mettre un commentaire +
-dans l'instruction DATA comme une chaîne alphanumérique +
-appartenant à l'instruction DATA. Au niveau technique de +
-programmiation, c'est une horreur, mais c'est quand même bien plus +
-hisible. La routine de lecture des DATA lit la chaïné de caractère du +
-commentaire, mais ne doit sUrtout pas cn tenir compie. +
-| H*ELE !:'l'lk'*:'fl".l."k'.l".l' e b bk o e e e R bkR EE E AN +
-! * DEFINITION LTEU AVEC COMMENTAIRE = +
-I Rkt h R E É E R RR A d d E +
-DATA SALLE.BIN +
-DATA Vous vous trouvez dans une grande salle +
-DATA éclairée par d'immenses torches en métal. +
-DATA La seule issue visible est une gigantésque +
-DATA porte en brônzé. +
-DATA * +
-DATA 30,40,100,35,7,7,1, 1 EXAMEN DES TORCHES +
-DATA 100,40,30,50,2,1,2, | ALLER DANS COULOTR. - +
-DATA -1 +
-Toutes les définitions dé 2one du programme doivent avoir un commentaire +
-de ce type, Attention : cé n'est pas un véritable commentaite, +
-et il faut toujours avoir le caractère Ÿ entre la fin de la ligne et le +
-début du commentaire. S°il manque un seul commentaire, la routine +
-de lecture des lieux va afficher une erreur de DATA +
-Coddeas igmagees +
-Les images sont des blocs graphiques de 308x80 pixels. Elles doivent +
-Être dessindes avec un logiciel de dessin style Depas Efite. Une fois les +
-images dessinées, elles seront converties dans un format binaire utilisable +
-par le programme de jeu, Cette conversion est faite par le programme +
-CONV IMG. +
-La conversion se fait en écrivant dans des lignes de DATA le nom des +
-images Deges Efaté, la position des dessins sur les images, et le nom +
-des fichiers binaires à génèrer. +
-Ces fichiers contiennent la palette de couleur de Pimage. Cela permet +
-d'avoir des images avec diverses palentes, Le programme de jeu +
-gèré auromatiquement les bonnes palettes. +
-1 A e e e e e e e e e e d r e d d e d É RE +
-| # EXEMPLE DE CONVERSION DEGAS/ELITE == BINAIRE * +
-|' HR RE E É r e E d e E e E n d E e E +
-DATA VILLE,PII +
-DATA VILLE.BIN +
-DATA 6,28 +
-BEST OF GFA BASIC +
-Cer exemple correspond à la conversion de l'image stockée à la position +
-(6,28) de l'image portant lë nom de VILLE.PIT en un fichier b +
-naire de nom VILLE.BIN. Les fichiers binaires ainsi générés font une +
-taille de 12842 octets. +
-Générateur d'images Degas Elite +
-Ftant donné qu'il est assez difficile d'insèrer des images ou de longs +
-fichiers binaires dans un aruiclé, j'ai écrit un programme supplémenture. +
-Ce petit programme, appele GEN IMGS, vous vénérera des 1mages +
-Depis slite. Elles devront être convertres par CONV IMG pour vous +
-donner les fichiers praphiques indispensables au programme de +
-démonstration. La séquence de travail est donc: exécution de +
-GEN IMGS, exécution de CONV IMG, puis ecécution de DEMO- JEU, +
-Dossier technique +
-Le programme a été écrit en GEA RASIC 3.0, Sa structure est classique. +
-On v trouve les différents rableaux conrenant les informations +
-dé jeu, des routines système, un modulé d'imtialisation et des routines +
-specifiques au programme. +
-Les données du programme +
-Les informations du programme sont stockées dans des rableaux de +
-données, Ces dermers sont imitialisés & purl:fr des zones de DATA par +
-les routines d'imitialisation, Les indices des tableaux commencent à ! +
-au lieu de O grice à l'instruction OPTTON BASE 1 place au début du +
-procramme. +
-Le tableau message$() contient les divers messages. Le tableau dia- +
-'l-::lgu-EE'jI:} -contient le texte des djfllugu:ä- Le tableau ‘il‘hElÉlE'ÏpÜ +
-cflnflfin[]£Immn]fl:fiinmgfisafififliéfiflu::dflfi&tnb&fitui-LEtfihkflu +
-descri${) contient les descriptions des licux. +
-Le tableau zones%() sert à mémoriser les caractéristiques des zones +
-de clics du jeu, Il v à 7 données par zone de clic, ce rableau à donc +
-deux dimensions (DIM zones&[1000,71!. +
-Codage de 1a zone n% : +
-- zoness(n%,1}) = Position X; +
-- zones#{nt,2} = Position Y; +
-- zones®{n%,3} = Largeur zone (tx): +
-- 70nes#{n#,4} = Hauteur zone (tv); +
-- zones%(n%,5) = Forme de souris; +
-- zones%{n%,6) = Numéro action: +
-- zoness(n%,7) = Paramêtre action; +
-Les zones sont enregistrées les unes après les autres dans le tableau +
-zonés$. Le tableau Tieux% () sert à associer les zones aux lieux. La +
-techniquée de codage est la survante : +
-- Tlieux*{n4,1} = Numéro de là premiêre zone du liéu n% +
-- lieux%{n%,2} = Numéro de la derniêre zone du lieu n* +
-La variable sortie* contient la condition d’arrêt du programme, Elle +
-contient habituellement 0, mais si son contenu passé à 1, lë programme +
-s'arrête. +
-Les routines systèmes +
-Les routines système sont des procédures qui permettent de gerer divers +
-petirs problèmes qui se posent cour le temps au programmeur +
-(effacement de l'écran avec.une couleur particulière, affichage d'un +
-rectangle graphique, dessin d’un cadre, atténté d'un clic souris, enc..). +
-Avair une bonne bibliothèque de fonctions système permet de réaliser +
-un gain de temps appréciable dans l'écriture de nouveaux programmes. +
-La routite de formatage de texte est une routine système comme les +
-autres, mais elle nécessite quelques exphications. Elle permet de +
-découper un texte quelconque en lignes de textes formatées en res: +
-pectant les espaces. Les mots ne sont pas coupés à la ligne comme +
-avec un affichage classique (PRINT), et restent donc entiers. +
-Les routines d'initialisation +
-Les routines d'initialisation lisent les paramétres du jeu stockés en +
-DATA, et les merent dans les divers tableaux de donnés. Ces rou- +
-Lines sont Binit messages, Cinit dialoques, Binit_souris ct +
-Ginit lieux +
-La routme Baff ecran est auss uné mutiné d'imtialisation, mais au +
-lieu de préparer les données du programme, elle prépare l'écran de +
-jeu qui séra utilisé pendant oure |a durée d'exécution du programme +
-Les routines de gestion de jeu +
-La procédure @forme souris{n%) moditie la forme de la souris, +
-Avec né=0; la souris a « forme hatituelle de fléche. Avec nése=l; la +
-souris prend là forme mémorisée dans la variable sourish (n¥). +
-La procédure Catt move souris attend un changement de position +
-de la souris, où un elié-souris (changement d’étar). +
-La fonction @tst zone permet de savoir s1 uné position (x,y) est +
-comprise dans un rectangle graphique (px,py,tx,ty). C'est l'une +
-des foncrions les plus uriles du logiciel. +
-La fonction Écherche zone permer de savoir sv une position (x,v) +
-de l'écran corrsspond à l'une des zones de clic du lieu courant. Elle +
-utilise la fonction @tst zone. +
-La fonction @cherche option permet dé savoir si une position +
-(x.#} de l'écran correspond à l'une des 4 options du jeu (infos, sauver, +
-lecture, quitter pre), Elle utilise la fonction Etst zone. +
-La procédure Batt zone clic est la routine la plus importante du +
-jeu. C'est elle qui s'accupe de changer la formé de la souris en fonetion +
-de sa position, ct de contrôler si le joueur clique dans une des +
-zones de l'écran. À chaque changement de position de la souris, elle +
-teste si la souris est sur une zone de clic. +
-En cas de réponse positive, elle s'occupe de gérer la forme de souris +
-visualisant l'actron exécutable & cet endroit de l’écran. Flle urilise les +
-routines @att move souris, @cherche zane, écherche option, +
-et ÉTOIME souris, +
-La procédure Bexec_option permet d'exécuter l'une des 4 options +
-du jeu. Elle utilise l'instruction SELECT /CASE pour lancer l'execution +
-de la routine choisie, +
-La |'r111|:|_:dur|: Gexec action permet d'exccuter l'une des nombreux +
-actions du jeu (déplacement, examen, dialogue, combat, achat, etc.) +
-Chaque action a un numére. L'instruction SELECT/CASE permet de +
-lancer l'exécution de la procédure correspondant à l’action choisie. +
-ATARI MAGAZINE fl BEST OF GFA BASIC +
-La routiné principale du jeu est la procédure Ogestion jeu, Flle artend +
-que l’utilisateur clique sur une zone guelcongue, puis appelle là +
-routine qui s'occupe d'exévuter l'action choisie. Elle boucle sur elleemême +
-tant que la variable sortie® contient C. +
-Les options systémes +
-Ces options sont des fonctions que le joueur peur utiliser en permapence, +
-Il v a la fonction infa, I sauvegarde du jeu, la lecture d'uné +
-siuveyarde, et une option permettant de sortir du jeu avec demande +
-Ë.'I.IE L ñ.l'l'l'lf.'l'l'i_'l_'!lfl. +
-Routine d'information +
-La procéduré Goption info affiche une page d'information à l’intention +
-du joueur. Certe page contient le nom du programme, le tvpe +
-de système de developpement utilisé (GFA Basic 3.5 en l'occurrence), +
-er les copyriehts du programme (l'auteur et Atari Magazine). +
--~ +
-Routine de sauvegarde +
-La procédure Boption sauver sauve sur disquette l’érat du jen. Cet +
-etat est trés simplifié puisqu'il ne comprend qu‘une seule variable : +
-le lieu courant. +
-Routine de lecture +
-La procedure Coption Tecture it les donnees sauvegardees par +
-Boption sauver Une fois le numéro du lieu courant chargé en mémoire, +
-elle utilise la routine @deplacement pour positionner le jeu +
-dans son nouvel état. +
-Routine de sortie du programme +
-La procédure Goption sortie affiche une petite boîte de dialogue +
-avec un texte (" Voulez-vous quitter ce programme 7'), er deux +
-cptions (OUT' et "NON'). 51 le joueur clique sur Yoption "NON', 1l +
-ne se passe rien et le programme quitte la routine, 81 le joueur clique +
-sur l’option "OUT", le programme met 1 dans la variable sorties +
-avant de quicrer la routine. +
-Les routines d'actions +
-Ces routines correspondent aux actions exécurables par le joueur. +
-Certaines d’entre elles modifient les variables du’ programme, +
-d'autres affichent des informations à l'écran, d'autres encore peuvent +
-maodifiér l'état du jôueur (sa position dans le jeu par exemple). +
-Ces routines ont besoin d'un paramêtre décnvant la nature de la +
-tache à effectuer. +
-Routine de déplacement +
-La procédure @deplacement (11eu%) change la position du joueur. +
-C'est une routine importante, puisque Pessence même d'un jeu d'aventure +
-est l'exploration er la découverte dé nouveaux endroits. Le +
-changement de heu se fait en modifiant la variable lieu courant*, +
-et en atfichant l'image et le texte correspondant à ce nouveau leu, +
-Routine d'examen +
-La procédure Eaffichage message(numé) aifiche le message +
-numéro Numé Le texte est stocké dans le tableau message()$. Ce +
-texte est formaté avec 36 caractéres par ligne avec la routine Bformat +
-avant d'être affiche à l’ecran. Une fois le message affiche, le programme +
-affiche une petite boîte de dialu;;uc ivec le méssage "OUK. Le +
-Joueur deut chquer dans cerre bofte pour quetter Foption " EXAMEN" +
-Routine de conversation +
-La procédure Éparler personnage(perso®) affiche le texte du dialogue +
-numéro persos Ce exte est sauvegardé dans le tableau dialogues$(). +
-Une fois le tecte affiche le programme attend que le +
-joueur clique dans une petite boîte OR qu'il dessine apres le texte, +
-Ce système de dialogue est semple. Il n°y à pas de véritable conversation, +
-Beaucoup d'anciens jeux utilisent ce principe, mais il ët possible +
-dé faire mieux et de simuler (du moins partiellement) une véritable +
-conversätiont. +
-EE R E E T RE E e r e e e e e e r e r e e e e e r e r d d rr d +
-* # CONVERSION IMAGES DEGAS ELITE => FORMAT BINAIRE * +
-A E R T E e e e T e e e ee e r e e e r e d r e r e e e e r rs rs ds dn e d +
-i e e e e r t e e e e e e e l e d e e e e rs r d e e « +
-vs ProgrCONaV mIMGm.GeFA * +
-i t*******kt:i******¥iti******iii +
-! # (C) 1990 Patrick Leclercq * +
-! # (C) 1990 ATARI MAGAZINE " +
-LRI UR e e +
-RESERVE 50000 +
-HIDEM +
-Ggen imgs +
-SHOWM +
-END +
-+
-1 kol e e e e 3 ok e e g e e e e e o o o ok e e RRN o el +
-"' % CHARGEMENT D'UNE IMAGE DEGAS ELITE * +
-DWW RR T o R A A R R R r e “ e r +
-1ol sl TR e o ol R e o o R o ol e e R SR ol e el e o R e e e e +
-| * La palette est stockée dans la variable globale* +
-\ * paletteS. Cette variable est réutilisée par la * +
-* procédure Bsauve image(). * +
-l Lk T T e e e e e r e e e e e e é e d e T e e +
-PROCEDURE Toad degas (nom$) +
-palettef=SPACER(32) ! Réservation mémoire 32 octets +
-OPEN "i",#99,nocm$ | Ouverture Fichier nom3 +
-SEEK #99. 2 1 ON SAUTE LES DEUX PREMIERS OCTETS +
-BGET #99,VARPTR({palettes),3Z | Lecture palette img +
-VOID XEI05(6,L:VARPTR{palette$}) ! Mise à jour palette +
-EGET 299 XBIO0S(2),32000 ! LECTURE IMAGE SUR ECRAN +
-CLOSE #99 | Fermeture du fichier +
-RETURN +
-ÂATARI MAGAZINE E BEST OF GRA BASIC +
-— =— — —— = e E +
-—— +
-+
-B O T E Tt RR ÉÉ kR e e e i +
-* SAUVEGARDE D'UNE IMAGE SUR DISQUETTE * +
-d d d e 5 A r r d e e e e E S S T e e o E b b b e e +
-PROCEDURE aauvewîmage{nüm_jmage$} +
-LOCAL adr& +
-taille==LEN(image5) +
-OPEN “o",#1,nom _ imaget +
-BPUT #1,VARPTR(palette$),3? ! Sauv. Palette image +
-BPUT #1,VARPTR{taille%),4 | Sauv. Taille image +
-BPUT #1,VARPTR(image$),taille&! Sauv. Zone mémoire img +
-CLOSE #1 ! Fermeture fichier +
-! Taille image +
-I Quverture fichier +
-RETURN +
-d e A d d e AI +
-* BOUCLE DE LECTURE DES IMAGES 7* +
-T RR RR RI E +
-dde eh e e E e A E DO S e e r r r e e e e e R e e R e e d e e L +
-* L'image lue est stockée dans la variable globale * +
-* imagef. d +
-d dn e d e e d R e é é d d d A e A A A d d A RE CR +
-PROCEDURE gen imgs +
-LOCAL nom degas$ +
-. LOCAL nom fichier} +
-LOCAL px%,py5s +
-LOCAL px2%,py2% +
-RESTORE donnees imgs +
-00 +
-READ nom degass +
-EXIT IF nom degas$="*FIN" +
-READ nom fichier$ +
-READ px=,pys +
-px2%=px*+307 +
-pye4=pyè+za Calcul py2% +
-#load degas(nom degas$) | Chargement image DEGAS +
-GET .px%px2,%, ppy2%y,im®age,d! Lecture image +
-Ésquve image(nom fichier$) ! Sauv, image sur disque +
-LOOP +
-Fixe pointeur DATA +
-! Test si Fin de donnees +
-Lecture position imagé +
-Calcul pxs +
-—— L — — L " L +
-RETURN +
-et B PP P LT RR RR E RRN e é E +
-* ST0CKAGE DES COORDONNEES DES IMAGES * +
-Ak kA EEEEAAAAANE TN ETE RERÉETARRER RR RUN +
-DATA Nom image DEGAS ELITE +
-DATA Nom fichier binaire +
-DATA px, py +
-DATA #FIN +
-donnees imüs: +
-DATA VILLE.PI1 +
-DATA VILLE.BIN +
-DATA 6,28 +
-Lecture nom image DEGAS +
-Lecture nom fichier img +
-DATA TAVERNE.PI1 +
-DATA TAVERNE.BIN +
-DATA 6,28 +
-BATA MARCHEL.PIl +
-OATA MARCHEL.EIN +
-DATA B,Z258 +
-DATA MARCHEZ.P11 +
-DATA MARCHEZ.BIN +
-DATA 6,28 +
-DATA GARDE.PI1 +
-DATA GARDE.BIN +
-DATA 6,28 +
-DATA PRISON.PI] +
-DATA PRISON.BIN +
-DATA 6,78 +
-+
-+
-R T Ik v e T e Re Sk +
-! * INDICATEUR DE FIN D'IMAGES #* +
-L RR E E R d e e +
-DATA *FIN +
-AhkakE A r r A e e e e e e e e d e e e d r e d d RE RE +
-* GENERATEUR D'IMAGES POUR DEMONSTRATION JEU = +
-I RR RRN TENARAAEERRÉRET IERE NNN LY TR R bk hrdrh o ® s RE +
-] ttttw**t**t**t&*#****i#ttt*fi*** +
-* * Programme GEN IMGS.GFA * +
-D e e e d e e e e R e E R e e E +
-' * (C) 1990 Patrick Leclercq * +
-* (C) 1990 Atari Magazine * +
-| RR R AT TR st RE RS +
-RESERVE 10000 +
-@def couleurs +
-Egen images +
-END +
-Éh dh RRN E R NN RE E E +
-* DEFINITION PALETTE DE COULEUR DES IMAGES * +
-dh A RE A A e e e e r r e e é d e d e +
-PROCEDURE def couleurs +
-LOCAL i% +
-LOCAL c& +
-RESTORE couleurs +
-FOR 1=0 TO 15 +
-READ c% ~ +
-VOID XBIOS(7,1%,0%) +
-NEXT i% +
-RETURN +
-ATARI MAGAZIME a BEST OF GFA BASIC +
-ñ +
-+
-D E+HARea RR R R E AN ÉÉ ER R +
-* * PALETTE DE COULEURS DES IMAGES * +
-DRh E RE RR R R c e R ke +
-couleurs: +
-DATA 4000,8700,4070,5770,4007,4707,5077,4555 +
-DATA $333,8733,4373,4773,4337,9737,5377,5777 +
-L e é T d e dh e A e de d e dh e r dn r de RE S +
-* * AFFICHAGE D'UN RECTANGLE PLEIN * +
-E RE = T A REN e e e c c E +
-PROCEDURE rect(pxä,pyb,txæ,ty, c5) +
-LOCAL px2%,py2% +
-pxés=pxatixs-l +
-pyés-pystiysl +
-DEFFILL c& +
-PROX px%,pys,pxepyse,+
-RETURN +
-+
-| SREE R AV e d e d E r e ce e d e A r R RR AAX +
-! * SAUVEGARDE D'UNE IMAGE AL FORMAT DEGAS ELITE * +
-| LFN RE RE A o il e KRF AAARE +
-PROCEDURE save degas(noms) +
-LOCAL paletted +
-LOCAL resolutiond +
-LOCAL aër pals +
-LOCAL adr resol& +
-LOCAL adr* +
-LOCAL i% +
-palettef-$PACES (32) | MEMOIRE FOUR PALETTE +
-resolutiont=SPACES (2] | MEMOIRE POUR RESOL. +
-adr pal%=VARPTR(palettef) | ADRESSE ZONE PALETTE +
-adr resol%VARPTR(resolution$)! ADRESSE ZONF RESOL. +
-INT[adr resol%;=XE105(4) | LECTURE RESOL, ECRAN +
-adr“=adr pal= +
-FOR i%=0 TO 15 ! LECTURE PALETTE COUL. +
-INT{adrs}=XBI0S(7.7%,~1)! LECTURE COULEUR 1% +
-ADD adr%,? +
-NEXT 1% +
-OPEN "a®,#99, nom$ +
-BPUT #99,adr resol%,2 +
-BPUT #99 adr pals,32 +
-BPUT #99,XBIDS(2), 32000 +
-CLOSE #99 +
-RETURN +
-OUVERTURE FICHIER +
-ECRITURE RESOLUTION +
-| ECRITURE PALETTE COUL. +
-ECRITURE DE L'IMAGE +
-FERMETURE FICHIER +
-i J.",l,':,lri'i".l':l::l:t'kt***#:‘:i::"r*'fi':fi"fi'**'fi o +
-' # DESSIN DES ZONES DE CLIC * +
-E E E E E E E E E E E E ETE E ETE +
-PROCEDURE dessin zones +
-LOCAL px6;pyt,txs, Ly +
-DU +
-READ pxs +
-EXIT LF px$=-=1 +
-READ pyë, tx%, tys +
-@rect(px*,py&,tx5,ty#,14} | Dessin zone de clic +
-LOUP +
-RETURN +
-I Test si fin de zones +
-|l o e e e ol e i e e o o e o oy e e e e RE +
-* # GENERATION DES IMAGES * +
-i 4t AR EET ektd +
-PROCEDURE gen images +
-LOCAL nom images +
-RESTORE donnees +
-û +
-READ rom imaget +
-EXIT IF nom image3="*FIN" +
-CLS +
-Grect(6,78,308,80,5) +
-Bdessin zones +
-Bsave degas(nom îimage$) +
-LOUP +
-RETURMN +
-| Dessin fond image +
-TE E +
-i RRN e ik ok o e e e e e i +
-* DONNEES DES IMAGES * +
-dh e A A A e e E R E +
-donnees: +
-DATA VILLE.PIl +
-DATA 16,48,60,40 +
-DATA 86,38,606,+
-DATA 156,48,00,40 +
-DATA 276,38,8,60 +
-DATA 244,48,60,40 +
-DATA =1 +
-DATA TAVERNE.PI1 +
-DATA 38,53,20,30 +
-DATA 90,78,80,20 +
-DATA 202,78,80,70 +
-DATA 90,38,60,25 +
-DATA 202,38,60,25 +
-DATA —1 +
-DATA MARCHEL.PI1 +
-DATA 20,91,280,15 +
-DATA 22,33.62,50 +
-DATA 100,33,42,50 +
-DATA 158,33,82,50 +
-DATA #56,33,42,50 +
-DATA —l +
-DATA MARCHEZ,PII +
-DATA 20,91,280,15 +
-DATA 53,33,40,50 +
-ATARI MAGAZINE ESIRM BESTOFGRA BASIC +
-| Dessin des zones de clic +
-DATA 140,33,40,50 +
-DATA 227,33,40,50 +
-DATA —1 +
-DATA GARDE.FTI +
-DATA §3,33,40,50 +
-DATA 120,33,40,50 +
-DATA 227,33,40,50 +
-DATA —l +
-DATA PRISON.FPII +
-DATA 34,74,40,30 +
-DATA 34,34,42,30 +
-DATA 104,34,42,50 +
-DATA 174,34,42,90 +
-DATA 244,34,42,50 +
-DATA —l +
-DATA *FIN +
-| 4R ÉRANTNEETER bbb Atk tdrerddsd +
-P JEU D'AVENTURE GRAPHIQUE ë +
-;* A +
-i RR RR R R A AR R R ek +
-| € Programmation GFA BASIC 3.5 * +
-| #* Testé sur 1090 STF & 1040 STE * +
-! * (C) 1990 Patrick Leclerca rl +
-! * (C) 1990 Atari Magazine b +
-| A i 3 TN s R W R R R s VIRNEE +
-RESERVE 100000 |RESERVWATION MEMOIRE POUR SYSTEME BASIC +
-OPTION BASE 1 — !INDICES DE TABLEAUX COMMENCANT À 1 +
-DIM souris$(100) ITABLEAU POUR LES FORMES DE SOURTS +
-nb_suurîsä=Û INOMBRE DE SOURIS DANS TABLEAL sourish +
-DIM Tieux5(100,2) !TABLEAU POUR LES LIEUX +
-DIM imaçes$(100} !Tableau pour les images de lieux +
-DIM descri$(100) !Tableau pour les descript. de lieux +
-DIM zones#(1000,7)!Tableau pour les nb de Zones par +
-lieu +
-DIM messages$(100) ! Tableau pour les messagés +
-nb _ méssages==D +
-DIM dialoqués5(100)! tableau pour les dialogues +
-nb dialoguess=0 +
-1 NOMBRE DE LIEUX EN MEMOIRE +
-| NOMBRE DE ZONES EN MEMOTRE +
-nb_|ieux-=0 +
-nb_ïünüää"Ü +
-DIM Tignest(20} ! Tableau formatage texte pour +
-affichage +
-nh lignes%=0 ! nb de lignes présentes dans ligne${) +
-fondé=SPACF{(32000)! Variablé pour mémorisation écran +
-ÂTARI MAGAZIME +
-DEFMOUS0E +
-Ginit souris +
-@init lieux +
-Cinit messages +
-Ginit dialoques +
-lieu courants=1 +
-FORME SOURIS = ABEILLE +
-INITIALISATION DES FORMES DE SOURIS +
-INITIALISATION DES LIEUX +
-INITIALISATION DES MESSAGES +
-INITIALTSATION BES DIALOGUES +
-P ey e e +
-GRAPHMODE (2) +
-[1 +
-MODE D'AFFICHAGE TRANSPARENT +
-FOUR AFFICHER LES CARACTERES SUR +
-N'IMPORTE QUEL -FOND +
-o — -— +
-+
-HIDEM +
-Baff ecran +
-Bgestiojenu +
-DEFMOUSE 1) +
-END +
-EFFACEMENT SOURTS +
-AFFICHAGE ECRAN DE JEU +
-EXECUTION DU JEU +
-| FORME SOURIS = FLECHE +
-FIN DU FROGRAMME +
-E RR A A AW R R R R AR A AR Rk f d E A +
-F ï = +
-' * ROUTINES SYSTEME DU PROGRAMME * +
-DRSN E RR R RE Ak A ke Exxddd +
-| VATTRREETERT TRISE ER RR +
-! * EFFACEMENT DE L'ECRAN * +
-I e i oo o o o o o e e d és d d W E E +
-| oo & o o 3 o o e o R R WA e R ÉF +
-"R c% “ couleur de l'écran * +
-L E E E E e E E E E c E E E +
-PROCEDURE cls ecran(es) +
-DEFFILL € +
-PROX 0,0,319,199 +
-RETURN +
-! Couleur rectangle +
-| Dessin rectangle +
-| UR RESEE R R R E E T R e e e e +
-| * AFFICHAGE D'UN RECTANGLE PLEIN * +
-D e e e m e e e e e e e e e S d e E +
-"* pxs : Pésition x du rectangle 7 +
-E pys - Position y du rectangie 7 +
-| # TX : Largeur du rectangle u +
-! # L% : Hauteur du rectangle H +
-! * c% & Cowleur du rectangle o +
-I gk ke ETE TR ki xR RE RR R R +
-PROCEDURE rect{px®tx,d,p tyvvk,h.c.k) +
-LOCAL pxess, pyes +
-puésepxertxe=l +
-pyésepyattys-1 ; +
-DEFFILL e3% - ! Couleur rectangle +
-PEOX px* pyt,pxés,pyès | Dessin rectangle +
-RETURN +
-E et ok ok o o e e e de e g o o o o o e e e e o e EN +
-BEST OF GFA BASIC - +
-* * AFFICHAGE D'UN CADRE VIDE * +
-DO ok oy o i e e RR R RE e e e RS R RN P E +
-| L L E UE AT A R e E E E E E E E E d d d e E E E SE A E d & +
-P p t : Position x du cadre e +
-14 p : Position ¥ du cadre ‘ +
-55 ¥ < : Largeur du cadre * +
-Vs E A : Hauteur du cadre Æ +
-e Fonds : Couleur fond du cadre * +
-! # cContour® : Couleur bords du cadre * +
-k E E r R uc é rr rn A e +
-PROCEDURE cadre(pxf%, pys, tx*,ty5, Tond%, contours) +
-LOCAL px2%,py2% +
-pr2i=pritixni-1 +
-pyvds=pys+tysl +
-DEFFILL fond% ! Eouleur fond +
-PEOX px%,pye,prd%,pyes | Dessin fond +
-COLOR contour* ! Couleur contour +
-BOX px* ,pyt,pxés,pyes ! Dessin contour +
-RETURN +
-+
-R L L L L H T T T TP e +
-"= TEST D'UNE ZORE GRAPHIQUE * +
-| ORRRRRRR SREE RRN RR E AN R AR T T L +
-I VV E E E E d e e S E e e e e p p +
-‘* Cette fonction teste si la position (x%.v%) +
-* est comprise dans la zone graphique +
-(pxé,pys, tx5,ty5}. 51 la position est comprise +
-dans Ta zone, Btst zone renvoit 1. +
-Dans le cas contraire, elle renvoit 0. +
-| A o L e T 8 EN E E e e m R R R E RE E E RN A +
-FUNCTION ifit_ïüne[xä,y%,px%.pï%.tx%.tïä] +
-LOCAL pxd%,pyes +
-LOCAL T +
-£ + + +
-pxésepxetixé=l +
-pyésepyetiye-l +
-r==0 +
-IF (xé>=px$} AND (x%<=px2%) +
-TF (yé==py4} AND (y¥<-py2%) +
-el +
-ENDIF +
-EMOIF +
-RETURN % +
-ENDFUNC +
-B dh dh e o o o O R e e A A o el R é E E +
-*.* ATTENTE CLIC DANS UNE ZONE 7 +
-| VVRRREEETÉTÉETTTTÉREETÉTTTERÉÉÉEE RE +
-A d d e e e é éc e é dn de ok o ok Ak P e e ke o O N R R W R E E R E R +
-‘*Cette procêdure attend que l'utilisateur clique dans* +
-‘*uné zone précise de ]'Écran. ; +
-| E E m e m e m e e e e e e v e r e e e L e e e e e f e e E e +
-PROCEDURE wait zone(px&,pyt,tx%,ty=) +
-LOCAL xmé, vméé +
-+
-00 +
-datt clic[xmé, yms) +
-EXITTF @tst zone(xmé, ymé,pais, pys, tik, tys) =1 +
-LODP +
-RETURN +
-| RRF b b Ul T T e A A SRR R AR RS R RS SRS ok d rT P PE E +
-! & ATTENTE CLIC SOURIS AVEC FOURNITURE ETAT SOURIS * +
-T & o = o S e o o e e e e e o e r g e o Tt o e e et R S +
-! = {ptte procédure attend que le joueur clique avec * +
-! = la souris. Elle fournit Ta position (x,y) de clie* +
-! * à la procédure appellante. Elle ne rend là main * +
-* # que lorsque le joueur a relaéhé le clic soûris. * +
-L RR R r e é d e e d e e e d d e e A A d d d e E +
-PROCEDURE att_ÇFifi[ïhfi x , Varé) +
-LOCAL Kms +
-+
-B0 +
-MOUSE xmés, vmés, kmés +
-EXIT IF kmée=0 +
-LOUP +
-+
-EXIT IF MOUSER=L ! Att arrêt clic +
-LOGF +
-RETURN +
-+
-l Att clic souris +
-+
-d e n d d e d nl e d +
-* ATTENTE CETC-SOURIS * +
-wtitittttt***£#t*t*****!fl +
-AERX RE R AR AR EFERA LA d e d e d e R E +
-‘*Cette procêdure attend que le joueur ait cliqué. Elle* +
-"#*np rend la main à la procédure appelante que lorsque * +
-‘*le clic a cessé. À la différence de datt clic, cétte * +
-‘*procêdure ne donne pas la position de clic. F +
-i t******+#ht******fiti**#fi************fii*fifi***#iti***** +
-PROCEDURE wait clic +
-REPEAT +
-UNTIL MOUSEK I Attente clic souris +
-REPEAT +
-UNTIL MOUSEK=0 ! Attente fin de-élie ~ +
-RETURN +
-| ARRRHARHHRRREÉRRRRRRRR ÉN AAE RR +
-| # ATTENTE ARRET CLIC SOURIS = +
-0R A E e d e d e d d d d +
-PROCEDURE attüclic +
-REPEAT +
-UMTIL MOUSEK=0 +
-RETURN +
-Ï +
-+
-[ o Sk e e e d S keL S +
-* #. COULEUR DU-TEXTE * +
-b o o o ok RR A R i e VR e e R +
-PROCEDURE texte color(c*) +
-ATARI MAGAZINE fl BEST OF GFA BASIC +
-1 A d d R b s S e SE _ | « RESTAURATION DE L'ECRAN * +
-DEFTEXT c% - "Caiéean des mts : IF (ligne$="") AND (tampon$<"") e eR +
-. | — PARAMETRES ROITINE - ‘ L ARRRAAAAERREE RS AAN AR RE RE A RE EN E E +
-RETURN INC nb lignes% +
-| ‘ d : lignes${nb lignes*)=tampons , ! * L'écran à restaurer doit d'abord avoir été stocke * +
-(S MRSyA ES S # m : texte à formater ‘ tampon$="" " ! * dans la variable globale fondi par la procédure * +
-t A e e d d R E ! * taille* : nombre maximum de lettres par ligne X ENDIF ' * @memorisation ecran. = +
-( AFFICHAGE TEXTE EN CARACTERES GRAS * * # SORTIE ROUTINE : _ f - D dh d et R e S et b L L bl RE +
-L ek ek e e e sk ok WO e ek e e e R R kR L É e E ä IF (tampont-=""} AND (lignet<="") PROCEDURE restauration ecran +
-PROCEDURE texte gras ' * Les lignes sont stackées dans le tableau Tligness().* IF LEH{11EHE$]+1+LEH[tümpgn$}ä=tfi111ËË SPUT fond$ i +
-BEETERT ù 7 \ * La variable nb lignes* contient le nb de lignes du* INC nb ligness RETURN +
-RETURN \ ® tableau lignes$(). ë 1âgneaî{nh lignes*)=1igne$+" “rtamponi ‘ +
-‘ | dedede d n d d d e e dede e de d e d e e e ce eh e r e d W 1ÎQHE$=""'— | - +
-l PROCEDURE format{mk,taille*) tampont="" rrr e e e e e d d A ETE +
-| — TÉEREANAE RE É ']."J.".l.“.fi".il".t.:l: FxEHE R RR ETEN E d LOCAL tampond ELSE ' * ROUTINES SPECIFIQUES AL PROGRAMME # +
-Lol flFF!EHAEE TEXTE EN EÈHÈETEHEE ÎÏÊLIDÜES L LflEAl p% INC nh Ïiflfl&fi% | R e RE R RR A ok ETE +
-LR E SRI RE E RE LOCAL c$ 1îgnesï{nb lignes#)=ligne$ | +
-PROCEDURE texte italigue LOCAL lignes ligneg="" | e d I d E +
-DEFTEXT ,4 ' INC nb Tignes% | # INITIALTSATION DES LIEUX * +
-RETURN nb_lignes%=0 lignes${nb lignes#)-tampont R L e d T dehehe hh fdt +
-' Lamponf="" tampunin""_- * D p d d A d e e d e e e e r ce e d RE +
-n lignef="" ENDIF * % Cette routine lit les données stockées en DATA, et ” +
-E e cé Pl ue sc E UE | ‘ ENDIF ! * les mémorise dans les tableaux correspondants * ! — AFFICHAGE TEXTE EM CARACTERES NORMAUX * FOR pt=1 T0 20 | | * (images$(), descri$(), zones&(), Tieux#(}}. Î SR R e e d R d A lignes${p=}="" RETURN 1 ec é e d d d A e d d e e d e d e e e e +
-PROCEDURE tfiïte_nufimaï +
-DEFTEXT ,Û +
-RETURN +
-L e e e d d e d e e e S E R A o e e e d d E +
-* AFFICHAGE TEXTE EN CAR. BRILLANTS * +
-b bddede e dn d d A d e d E E A R RR RESRE +
-PROCEDURE Lexte brillant +
-DEFTEXT 42 +
-RETURN +
-B E E A TR A C e e i e S ok e g dr R R AT e R +
-* AFFICHAGE TEXTE EN CAR. SOULIGNES * +
-1 L T dede dc e e e e e e m e e r e n d d h e S SÉ +
-PROCEDURE texte souligne +
-DEFTEXT ,B +
-RETURN +
-oo e e dode i ok ok ke R R el AW W R R e e o e e E RR +
-* AFFICHAGE TEXTE EN CAR. ENCADRES * +
-ol ue o e 0 Ak A e ek E e e d d d R R R e c é n E +
-PROCFOURE te:te_encadre +
-DEFTEXT ,16 +
-RETURN +
-Ë +
-D e T e e el r rr e e c0 66 d n e +
-* FORMATAGE D'UN TEXTE * +
-W E E R e A T NNN IERE +
-R E SE E E S E E R ETE E E A A E e RR E E E E E E E A A d E E A R E E R +
-* Cette routine découpe un texte en plusieurs lignes * +
-= pour un affichage propre. Le découpage sé fait au * +
-NEXT p* +
-d A é R e d k= +
-* BOUCLE DE DECOUPAGE ” +
-B e e e e ok É e e e R RR E +
-FOR p%=1 TO LEN(m$) +
-c$=MiD${mt,p#,L} +
-IF g 0 | +
-tampon$=tamponé+ct +
-ENOTT +
-[F tj=e" ” +
-IF LEN(lignet)+1+LEN(tampant)<=tailles +
-IF lignes="" +
-ligne$-tampont +
-tampon$s="" +
-ELSE +
-lignet=lignes+" "+tampont +
-tampon$="" +
-ENOITF +
-ELSE +
-INC nb lignes* +
-lignes${nb lignes#)=1igne$ +
-lignet="" +
-IF tamponi=="" +
-tarpon$*=tarmont+t"+
-EMDIF +
-ENDEF . +
-ERDIF +
-NEXT p4 +
-Sn A en r e r d d e e e e e e e E +
-* FIN DU DECOUPAGE * +
-ATARI MAGAZINE m BEST OF GRA BASIC +
-E E R E o ol E el E e e E E e e d E E E E e +
-! # AFFICHAGE DU TEXTE FORMATE * +
-| drfed i bk gk & o RO R E E ETE UR +
-|F RE RN AR R R e e ek g E E ol ke R e e e +
-* Cette routine affiche le texte mis en forme par la * +
-* routine Bformat à partir de Ta position graphique * +
-* (px*,pysl. ; +
-e d rr 02e MR A R u E R A E A U E E A A E R E E E E E bl R C R E e e E A +
-PROCEDURE aff format{(px#,pyt) +
-LOCAL 46 +
-LOCAL 15 +
-Y= Py +
-FOR 1%=1 T0 nb lignes= +
-TEXT px%,v*,lignes5{1#+
-1 Pos Ÿ pour début affichage +
-! Éoucle affichage message +
-! Affichage texte message +
-ADD y&,0 | Passage ligne suivante +
-NEXT 1% +
-RETURN +
-I Rk e o e R EN bl R e +
-* MEMORISATION DE L'ECRAN * +
-E e e ke el o e e e e e e ek e +
-P d T e e e é e d d e e e e e e e e R R R e s e e ke +
-*l 'écran est mémoôrisé dans la variable globale fondf* +
-I oA A A A AR RR E E R E A É E É R e E RR A +
-PROCEDURE memorisation ecran +
-SGET fond$ +
-‘RETURN +
-U E E E e i i e sl ded o o rr e IS W R A A A e e +
-ATARI MAGAZINE +
-PROCEDURE init lieux +
-LOCAL px% +
-LOCAL img$ +
-LOCAL mess} +
-zo| inbrees=1 +
-nb lieuxs=0 +
-nh zones#=0 +
-RESTORE Tieux +
-DG +
-READ img +
-EXIT IF img$="*FIN" +
-INC nb lieux% +
-images${nb lieux%)=img$ +
-+
-READ messt +
-EXIT IF mess$s="*" +
-méssi=" "+messi +
-descrif{nb lieuxs)=descri${nb lîeux#)+mess$ +
-LOOP +
-lieux#(nb_lieux%,1)=zone_libré* +
-+
-READ px +
-EXIT IF px%=-1 +
-sones*[zone libre#,1)=px#+
-READ zones*(zone lihre=,2) +
-READ zones%{zone libre*,3) +
-READ zones%(zone lîbres,4) +
-READ zoness{zone libres,5) +
-READ zones%(zone 1ibref%,6) +
-READ zones&({zone libres,7) +
-READ rem$ +
-INC nb zoness +
-BEST OFGFA BASIC +
-INC zone Tibres +
-LOUF +
-\teux#(nb 1ieux%,2)=nb zonask +
-LOOP +
-RETURN +
-+
-e d e é é d e d d d kA e e R e e e A e e d +
-* INITIALISATION DES MESSAGES * +
-d E T E d e A A R rc RE R d e E +
-e o o e o e e r e 7 A A e e e ok o b e R R o i e d e d e ok ok RRN N E b ok e +
-*Cette routine 1it les messages stockés en DATA, et * +
-“les mémorise dans le tableau messagesi(). La ; +
-*Variable nb messages% contient le nb de méssäges. ” +
-Kk R R e d d d R R A A RE NN RE +
-PROCEDURE init messages +
-LOCAL m3 +
-RESTORE méssages +
-nb méssages==0 +
-+
-READ mt +
-EXIT IF mi="*FIN" +
-INC nb messagess +
-messages${nb messages*)=n$ +
-L0 +
-READ mi +
-EXIT IF mb="*" +
-TI'-:$=" ""I'IIS +
-mEBSEgESÉ{fih_mEEEEQESÈ}=m935flgE$${nh_MESSHQESÊ]îmï +
-LOOP +
-LOOP +
-RETUEN +
-é éh e e d d e SE R RR A P E +
-* INITIALISATION DES DIALOGUES * +
-bh e e e e é é é o ok d d d d d d ke e R PR +
-E E E E E E E RR E E 44 4 dhbcici dh eBafedioh B RE TRk chidududeitehieh +
-*Cette routine 1it le texte des dialogues stockés en* +
-*[ATA. et les mémorise dans le tableau dialogues$() .* +
-*La variable nb dialoques* contient le nb dedialogues™ +
-*de dialogues${). u +
-i ****wwk;tttw*ww**itttttt*#wk!itt*****t:t*ik*k*#imtt** +
-PROCEDURE init dialogues +
-LOCAL messs +
-LOCAL n% +
-RESTORE dialogues +
-n#=0 +
-[H +
-READ mésst +
-EXIT IF mess$="*FIN DIALOGUES® +
-INC n5 +
-dialoquesf{n%)=messt +
-+
-READ messs +
-EXIT IF mess$="#" +
-messé=" "+messh +
-dialoques$(né)=dialoques$(n*)+mess$ +
-LOO# +
-LOOP +
-no_dialoguess=ns +
-RETURN +
-A E E A d d e e d e e d e R A R RE +
-* INITIALISATION FORMES DE SOURIS * +
-| RR RLRRRRANAAER RR A bbb ek xRN RN AT SÉ +
-PROCEQURE 1nit souris +
-LOCAL v fS +
-RESTORE souris +
-nb souris*=0 +
-D0 i +
-READ w% ! Lecturé DATA +
-EXIT IF v5=-1 | Test si fin données +
-INC nb souriss ! Une nouvelle souris +
-f$=HHIÏËv%] ! DEbut données souris +
-FOR i%=1 TÜ 36 | Début Tecture données +
-READ v ! Lecture DATA souris +
-fé=f4+MKI$[v5) | Mémorisation donnëéés souris +
-NEXT 1% | Fin Boucle lecture donnees +
-souris#(nb souris®)=f$! Souris dans sourisk() +
-LOUP +
-RETLRN +
-R A r e d e d e T e e R R é e ok e e +
-* RECHERCHE D'UNE ZONE DE CLIC * +
-PEc d d 044 d e e É RE E d d E E E é E E I E RS +
-****æ*gæitittttw*tttt:t*fl##fiktt*t***#r:**ü***#ùi:*** +
-*Cette routine cherche si la position (xm,ym) ? +
-*correspond à une des zones du lieu courant.si c ést” +
-*13 cas, fournit le numéro de cette rone. En cas de * +
-‘ * recherche négative, elle renvoit la valeur (. = +
-L LRN R RN E E S R RR A RE E +
-AR b AAEAEEEdtt bbbt +
-* umé : Position % * +
-* ymd : Position Ÿ * +
-dc d e m d A e e e d E +
-FUNCTION cherche zone(xm®, ymé) +
-LOCAL né,ré +
-LOCAL zone debut=,zone fins +
-LOCAL px pyt, LxR, Ly +
-r%=0 +
-zone debut*=l"ieux*(1ieu courant#,1) +
-zone fin%=Tieux%(1ien courant*,2) +
-FOR n&=zone debut% TO zo_n fienä +
-px*"zones#{n,1) +
-pyéezones%(né,2) +
-tx5=zones5(n#,3) +
-tyk=zonesk({n%,4) +
-ATARI MAGAZINE m BEST OF GFA BASIC +
-rrF PE :î‘ -='%hr—æ_-ir === 2 r P - = — +
-r-———_——_rrfi._—-_— c +
-IF @tst zone(xm®, ymés, pxi,pyée, txé, tyé)=1 +
-réens +
-ENOLF +
-NEXT ni +
-RETURN r% +
-ENDFUNC +
-+
-| ke d n R e d d d e R R d A E +
-' * MODIFICATION DE LA FORME DE LA SOURIS * +
-PROCEDURE forme souris{n%) +
-TF n*=0 +
-DEFMOUSE Ü +
-ELSE +
-DEFMOUSE souris$(n&) | Souris redéfinis +
-ENDEF +
-RETURN +
-| Souris flêche +
-R s T d d dn d d d R R E +
-| * ATTENTE D'UN DEPLACEMENT DE LA SQURIS * +
-| RARRRR E REN RRRR RR E RR RN E EN E RR RE HE E +
-| RE AN E 1 E e E e S n e e E e S e e e S e E +
-! * Cette routine attend que la souris change de. *. +
-| * position, ou qu'il se produise Un clic souris. * +
-| ÉAETRERAAARENE RE ÉÉ RR RE E RR RR R RRN É E x +
-PROCEDURE att move souris{VAR xmée, vmés, kmes) +
-LOCAL x0%; y0% +
-%= X +
-y0é=ymé +
-GO +
-MOUSE ms , Vm6k,ms +
-EXIT IF ((xmé<=x0%} OR (ymé<=v05) OR (kné=0)) +
-LÔOP +
-RETURH +
-+
-+
-e e e e e e e e A e ok 3t gk o e e e e 3 3 e v ok e e e 1 o R R TR +
-* = AFFICHAGE DE LA DESCRIPTION D'UN LIEU * +
-| gl b bk e e e e o ok b Al e ik e E e e e e E +
-FROCEDURE aff texte(num 1ieux%) +
-eformat (descrif{num _1ieux%),38) ! Texte 38 lettres/ligne +
-Brect(h,114,308,80,38) lEfface texte précédent +
-Baff format(8,124) lAffichäge texte formaté +
-RETURN +
-+
-|- e d e oo v g v e d d e o o e o e i i e oo o O R R S e E E +
-! *. AFFICHAGE DE L'IMAGE DU LIEU COURANT * +
-| TRL L ETEN re d E E d E +
-PROCEDURE aff image{num 1ieu%) +
-LOCAL paletted +
-LOCAL taille% +
-LOCAL nom image$ +
-ATAR| MAGAZINE +
-! Nom image |ieu +
-| Mémoire pour palette +
-nom image$=images$ (num l ieu#) +
-paletted=SPACES(32) +
-OPEN "1",#1,nom_image +
-BGET #1,VARPTR(palette$),32 +
-BGET #1,VARPTR(taille=),+
-image$=sPACES (tailles) +
-EGET ÿ1,VARPTR(image$),taille* +
-CLOSE #l +
-VOID XBIOS(6,L:VARPTR(palette$))! Modif. palette +
-PUT 6,28,images Aff image +
-Baff texte(num lieu%) | Aff description lieu +
-! Quverture fichier +
-! Lecture palette image +
-lecture taille imäge +
-Mémoire pour image +
-| Chargement image +
-Fermeture fichier +
-— rr +
-RETURN +
-+
-rr d dh e e RR A E R d e d E +
-+ AFFICHAGE DE L'ECRAN DE JEU = +
-dh e dc ce e é d e d e e e e e d e R A d d d d d A A +
-*Cette routine est utilisée au début du programmepour® +
-“afficher l'écran de jeu qui sera utilisé tout le ] +
-# =reste du temps. +
-5 R RR A A e e d e d e d e e e d e e e R e e é é d d d d d E +
-PROCEDURE aff ecran +
-@cils ecran(9) . ! Effacement écran +
-gtexte color(d) +
-Étexté gras +
-Écadre(6,6,56,15,8,0) +
-TEXT 14,16,"INFOS" +
-Acadre(79,6,64,15,8,0) +
-TEXT 87,16, "SAUVER" +
-Écadre{161,6,72,15,8,0) +
-TEXT 169,16, "LECTURE* +
-ücadre(249,6,64,15,5,0] +
-TEXT 25/,16,"SORTIE" +
-@texte normal +
-COLOR D +
-BOX 5,27,314,108 +
-BOX 5,113,314,194 +
-Cadre INFOS +
-Cadre SAUVER +
-Cadre LECTURE +
-Cadre SURTIE +
-| Cadre du dessin +
-Cadre description +
-Raff image(lieu courant*) Aff image de debut +
-RETUEN +
-FEERR R TR ETE TENTERRRERTÉRRRR E É RVU EE +
-* TEST SI CLIC SUR UNE OPTION DU JEU. 7 +
-e d r d e e r e d e e d d e e e +
-P oF b oo ol o o R e SR d RR E A RR É RR ÉÉÉ É RRN A RESRE +
-*Cette fonction teste si le joueur à cliqué surl'une* +
-*des 4 options du jeu, En cas de recherche positive,+
-*elle renvoit le numéro de l'option cliquée. En cas * +
-*de négative, elle renvoit la valeur D, ; +
-*t***?tfitt#*****ii******fit#t*##***it*******##flmfi***** +
-FUNCTION cherche option{px%,pyk) +
-LOCAL zone% +
-BEST OF GFA 8ASIC +
-zones=0 +
-‘ Test pour option INFO +
-1F Ëtat_;une{px%.py%,ñ,fi,55,15J=1 +
-zone%=l +
-ENDIF +
-! Test pour option SAUVER +
-IF @tst zone(px#,py5,79,6,64,15)=1 +
-zone#=2 +
-ENDIF +
-' Test pour option LECTURE +
-IF @tst zone(px%,py%,161,6,72,15)=1 +
-zone%=3 +
-ENDIF +
-* Test pour option SORTIE +
-IF Btst zone(px%,py%,249,6,64,15)~1 +
-zone%=4 +
-ENDIF +
-RETURN zone% +
-ENDFUNC +
-AN NI FEEEEEE kA RxwEERA RN TEE +
-* ATTENTE CLIC SUR UNE ZONE * +
-e —h dc e e e e e E E ETE s É PE e d d e E DE É RR +
-d d d e e DE A ce E d d e d e d e d d e d A e d e d e e R E e d e +
-*Cette procédure attend que 1'utilisateur clique sur* +
-*une zone de l'écran, ou sur une option joueur. Eile* +
-*gére automatiquement les changements de forme de la” +
-*souris en fonction des zones de | 'écran. & +
-TN AP R r e Spr e e d e e ol R e e e e e A ko +
-— +
-! #* Cette procédure modifie les variables globalés æ +
-! * tvp click et zone clic*. L +
-c typ;clic% = 1 => clic dans une option utilisateur * +
-| = typ click = 2 => clic sur zone écran L +
-* * zone clic* = numéro de la zone cliqué ù +
-! ttt**{;xtt******kH!itttt***t:ti**#k*#ï******üüÿfifll*** +
-PROCEDURE att zone clic +
-LOCAL Xm , YITÉS , ki +
-LOCAL num souris* +
-LOCAL num zone* +
-LOCAL zone souriss +
-LOCAL num _ options +
-1 drar e d ce d d e d dn d se e e E r e e e d e e e e d ce e d +
-! * DETERMINATION ETAT INITIAL SOURIS * +
-L d A R R R o e e É A A el i e +
-MOUSE semés , ymée , ke ILECTURE ETAT SOURIS +
-zone sourisk=Bcherche zone(xm%,ym%) RECHERCHE NUM ZONE +
-IF zone souris%=0 +
-num souris#=0 +
-ELSE +
-num sourisk=zoness{zone_ souris%,5)ILECTURE NUM SOURTS +
-ENDIF +
-@fürmg_suuris[numuauuriäëä | CHANGEMENT SOURTS +
-SHOWH 1 AFFICHAGE SOURTS +
-DU +
-@att move souris(am® , vmé,km&}1 ATT DEPLACEMENT SOURTS +
-num Euneä:@cherche_:üne[ïmä.jm%}! CHERCHE ZONE SOURTS +
-LF Înum_:uneäähznne_snuri5%] ITEST CHANGEMENT ST ZONE +
-zone souris®=num _ zone*# ! MODIF. ZONE SIMIRIS +
-IF zone souris*-0 | +
-num sourise=Ù +
-ELSE +
-num_finurî5%=znn&5%[num_:uneâ.5] | NUM SOURTS +
-ENOIF +
-@forme souris(num souris*) ! CHANGEMENT SOURTS +
-ENGIF +
-typ clic==0 +
-IF (km%=1} AND (num_zone%==0]) +
-typ clics=2 +
-zone clic&=num zones +
-ENDIF +
-num_options=@cherche_option(xns,ynrs) +
-LF (kméés=1} AND (num options=0) +
-typ clic&=l +
-zone clic*=num _ option# +
-ENDIF +
-EXIT IF typ click==0 +
-LOUP +
-RETURN +
-L E E E R P A MR RE TR e e e E r r « +
-* #* CHANGEMENT DE LIEU “ +
-L P A e E E E E E E o o E e A R E E +
-PROCEDURE dEp]flcement{num_]1Eu%} +
-HIDEM | Effacement souris +
-lieu courant&-num_l1éu% ! Nouveau Tieu courant +
-Gaff image(lieu courants) ! Aff nouveau lieu +
-SHOW# ! AfT souris +
-RETURN +
-| AARÉÉEEEE E ER E AR EN ETE +
-| * PARLER À UN PERSONNAGE * +
-I REFN AATARRREEEÉRRAÈRRER +
-PROCEDURE parler personnage(perso®} +
-fattüclic | Attente arrët clic +
-HIDEM | Effacer souris +
-Ememorisation ecran +
-fcadre{11,52,298,96,1,0) +
-Btexie gras +
-TEXT 128,64, "DIALOGUE" +
-@texte normal +
-@furmaï{di&OEügueasip&rsu%],35}! texte 36 caract./ligne +
-gaff format(16,76) ! Aff texte dialogue +
-Bcadre(l44,125,32,15,2,0) +
-@texte gras +
-TEXT 152,135;"0K" +
-Btexte normal +
-SHOWHM +
-! Aff cadre conversation +
-| Aff titre option +
-1 Cadre pour OE +
-| Aff de 0K +
-AÂTARI MAGAZINE fl BESTOF GFA BASIC +
-—— p +
-' | +
-+
-+
-+
-@wait zone{144,125,32,15) ! Attente clic sur "OK' +
-HIDEM I Effacer souris +
-@restauration ecran ; +
-SHOWM | Afficher souris +
-RETURN +
-+
-DN REEREÉRÉEEARIARATETAANANTE +
-* AFFICHAGE D'UN MESSAGE * +
-E A E e e S D DE D CR SE CR T T e e A T E E +
-PROCEDURE affichage messagé(num) +
-Battlclic i I Attente arrét clic +
-HIDEM ! Plus de souris +
-@memorisation ecran | +
-@cadre(11,52,298,965,1,0) +
-@texte gras +
-TEXT 136,64,"EXAMEN" +
-@texte normal ä +
-@format (mess(anumgs)e ,3s6}$ ! Texte 36 car/ligne +
-@aff format(16,76) ! Affichage du Lexte Tormaté +
-@cadre(144,125,32,15,2,0) +
-@LexLe gras +
-TEXF152,155, 0K +
-Étexte norma] +
-SHOWM +
-fwait zone(144,125,32,15) +
-| Cadre boite +
-! Affichage Titre option +
-| Cadre boite 'OK° +
-| Affichage souris +
-| Attente clic sur 'OK' +
-HIDEM ! Kemise de 1'&cran +
-Grestauration ecraf ! dans son état +
-SHOWM ! inffial, +
-RETURN +
-Ve e o ok RE e e e o o o W R A +
-: # EXECUTION DES ACTIONS * +
-| itk TÉEETTTETER E +
-PROCEDURE Eïec;actîün[nä,parametre%] +
-SELECT n +
-CASE 1 +
-Bdeplacement (parametre*) +
-CASE 3 +
-EparlEfi_persunnage{parametre%} +
-CASE / +
-Gaffichage message{parametre*) +
-ENDSELECT +
-RETURN +
-+
-I dededrdede = & g ok o ook e i e ol RR e e e +
-‘% OPTION INFORMATION * +
-ool e o ol ok il ol ol o e e d e ok +
-PROCEDURE option info +
-Pattlciic +
-HIDEM +
-@memorisation ecran +
-@cadre(43,59,234,82,1,0) +
-@texte gras +
-TEXT 66,69, “JEU D'AVENTURE GRAPHIQUE" +
-@texte normal _ +
-TEXT 52,89 "Programmatlion GFA BASIC 3.0 +
-@texte italique +
-TEXT 52,99,"(C) 1990 Patrick Leclercq" +
-TEXT 52,109,"(C) 1990 Atari Magazine® +
-@cadre(144,117,32,15,2,0) +
-Etexte gras +
-TEXT 152,1270K," +
-Btexte normal +
-SHOWM +
-Gwait zome(144,117,32,15) ! Attente clic sur "OK" +
-HIDEM +
-Orestauration ecran +
-SHOWM | +
-SETURN +
-DRTEEEFTE ÉÉÉ E +
-- % OPTION SAUVER JEU * +
-| b o o o o o e W E R R Y R T +
-LR A vty rdetaddrddaaidssh Rd RdR iAd d& oed +
-*Cette routine sauve le numéro du Tieu courant.Dams® +
-*le cadre d'un programme plus gros, on peut sauver * +
-*l'état du personnage (argent, points de vie,objets* +
-*possédés, etc.) 2 +
-L VVN TR SR e R T e P LR R S S 2 L L e e e S T4 L e e ks e E +
-PROCEDURE option sauver +
-LOCAL sauvet +
-+
-Battüelic +
-FILESELECT "#*.5AV", "" , sauvés +
-IF sauvet<="" +
-OPEN "o",#1,sauvet _ +
-PRINT #1,lieu courant® / +
-CLOSE #1 +
-ENDIF +
-RETURN +
-L E e E TEI PN D R C D E E R T E PR R E ETE +
-‘ # UPTION LECTURE JEU # +
-I x***hxETE +
-PROCEDURE option lecture +
-LOCAL lect$,lieu sauv& +
-Battlhclic +
-FILESELECT "*.5. ""A,lVec"th +
-IF lecti<="" +
-OPEN "i",#1,1ecth +
-INPUT #1,lieu sauvk +
-CLOSE #1 +
-Pdeplacement(slaiuev*u) +
-ENDIF +
-ATARI MAGAZIME m REST OF GFA BASIC +
-—— r S R +
-RETURN +
-de e e e e e R R Rk ok e e +
-* QPTION SORTIE JEU * +
-R T I I E 3 A e o E +
-***w***tg**wwfifi*xt:t*****kyk?ftw***t#t:**w***ti***** +
-*La condition de sortie est la variable sorties. ” +
-*Cette routine affiche deux cadres ('OUI' et ‘NON* }* +
-*et attend que le joueur clique sur l'un d'entre ; * +
-faux. 51 le clic a eu Tieu sur ‘OUI', là variable * +
-*sorties prend la valeur 1 (condition de sortie du * +
-*programme) . ¥ +
-****tttttt***kiiifi*?****#::t#***##tl*****#Hit#****** +
-PROCEDURE oplion sortie +
-LOCAL xmé, ym% +
-LOCAL clic options +
-— +
-dattüclic +
-HIDEM +
-@memorisation ecran +
-écadre(39,74,242,52,1,0) +
-TEXT 48,84," Voulez-vous vraiment sortir” +
-TEXT 48,94,"de ce programme ? " +
-Bcadre(94,101,40,16,2,0) +
-écadre(188,101,40,16,2,0) +
-@texte gras +
-TEXT 192,112, "00T" +
-TEXT 196,112, "NON" +
-Ptexte normal +
-SHOWM +
-clic options=0 +
-00 +
-Gatt_clic(xn,ymé} +
-IF &tst zone(xm#,ym#,94,101,40,16)=1 +
-clic optionssl +
-sortiessl +
-ENDIF +
-IF @tst zone{xm%,ym%,188,101,40,16)=1 +
-clic options=l +
-ENDIF +
-EXIT 1F cl_ optiionsc=-] +
-LOUP +
-HICEM +
-Brestauration ecran +
-SHOWM +
-RETLRN +
-L T ————————————————— e S +
-I *t***#kflftflt*****t#itt*******t**** +
-' * EXECUTION DES OPTIONS JOUEUR * +
-(Y PO PR RS Cpeae T o S T R R IR L T e e R É É R +
-k?ttttt****##flh#*******tHi*****##*t******#ii*******tl +
-! * Catte routine lance T'exécution de la routine F +
-! % as<sociée au numéro de l'option désirée (1 à 4). * +
-***F##ttttt*#*käiÈOEÈ?T****IÈi**fifit*****ÿ****#F******* +
-PROCEDURE Exec_nptîun{num_pptiün%} +
-SELECT num options +
-CASE 1 +
-Éoption infa +
-CASE 2 +
-Goption sauver +
-CASE 3 +
-Boption lecture +
-CASE 4 +
-Voption sortie +
-ENDSELECT +
-RETURN +
-+
-| o r et e S R +
-à CGESTION DU JEU-; * +
-V kA YANNETEEE L% +
-il flkHflw#w*ætt:wtt*****flnfit**t#t*+illww**#:ttw***ïwitt +
-| * Cette routine est la boucle d'exécution du prg. * +
-! + Elle contrôle 1a condition de sortié. w +
-| SRR Ty B S e RR RR R NNN RR RR N NNN e e e RE +
-PROCEDURE gestion jeu +
-LOCAL actions +
-LOCAL parametres +
-+
-sortie*=i +
-D0 +
-Gatt zone clic ! Attente clic joueur +
-R W T E BN B E S E A PE 4R R e e E E +
-L* Test s1 clic option joueur * +
-| VR RAR RE RR RAAERR R É NN _ +
-IF typ clrc#=l +
-Gexec option(zone click) +
-ENDIF +
-+
-| VARSRRRNE EdA m EÉNE E +
-L = Test si clic dans zoné écran 7 +
-È ::zii*fi*#fi?##*********i‘********I* +
-1F typ cliça=z +
-actionsezones%(zone clicw,6) +
-parametres=zones%(zone clic&,7) +
-Bexec action(action®,parametres) +
-ENDIF +
-EXIT 1F sortie&=1 +
-LOGR +
-RETURN +
-| Condition de sortie du prg +
-+
-L TR PO SO k e R d d d d R A d b RN A RR RS RE E E +
-' STOCKAGE DES DONNEES DU PROGRAMME = +
-tht!n:*********#fitt***tt#x!**fi*#***********tf****** +
-| A ARAAR AR TR T dd +
-: * FORMES DE SQURIS * +
-e o e e e e e e o o o RE E E +
-FORMAT DE DEFINITION : +
-ATAR| MAGAZIME OE BEST OF GFA BASIC +
-DATA Position x du point de ciic par rapport +
-au coté haut gauche de la souris +
-* DATA Position y du point de clic par rapport +
-| au coté haut gauche de la,souris +
-DATA mode d'affichage (toujours 1) +
-DATA Couleur du masque +
-DATA Couleur de la souris +
-DATA 16 entiers 16 hits pour le codage du masgue +
-DATA 16 entiers 16 bits pour le codage de là forme +
-— +
-souris: +
-| é e e e d e e e e e e é E R RE +
-| * FORME 1 : ALLER DÉVANT * +
-| RPN N IRRRRNF £ É +
-DATA 6,6,1,0,1l +
-DATA &Dflflfl,&fllED,EU?FD,ElFFH,EEFFfl,&HFFtififl?Efl,&flFFfl +
-DATA @0FFO,&1FF8,&1FF8,83FFC,R3FF8C7,FAFE7,F 2F00E0,0 +
-DATA 60000,40000,80180,607E0,81FF8,807F0,80830C70 E,0 +
-DATA ËÜ?EÜ,EÜFFÜ.5ÜFFÜ.ElFFB,ElFFË,&ïFFÉ,äÜÜÜÜ,äÜÜÜÜ +
-| VWRLREER É RE NAAA RE R A bk kR R ARk E AR +
-' * FORME 2 - ENTRER PAR UNE PORTE. * +
-| RR L PE E e E h E I E E w A A A é d E d E R R +
-DATA 8,6,1,0,1l +
-DATA R0000,601FF 6G1FF,R21FF,831FF,639FF 6FDFF,8FFFF +
-DATA SFFFE.SFDFFR3OFF,AI1FF,821FF 801FF,801FF 80000 +
-DATA 6000080000 L00FE A00FE, ROOFE, &10FE, B38FE , &7CRE +
-DATA &7CFE RI8FE,B10FE,A00FE,A00FE, ROOFE, 0000, 20000 +
-I Wk ehkkkhREREIAARey +
-' * FORME 3 : PARLER * +
-i g g gk e AR AR N A +
-DATA 8,8,1,0,1 +
-DATA SFEOO,8FÉ3E,&FEZF AFE7F,SFE7F,8FF7F,KFF7F,8FE7F +
-DATA &FE7F,4FE3E,8F8E0 &FFOD, 4FE00, ÉFEOO,&FE00,&FE00 +
-DATA &0000,&0000,83C3E, 82424 87C3E 87E22,&7E3E 87012 +
-DATA &7C3E,&7000,87000,&7000,&7C00,&7C00,57C00, 80000 +
-i w*#*1*¥r***#*##t¥t**** +
-' * FORME 4 : MANGER * +
-| XT RARREREREEEARHRTE +
-DATA 8,5,1,0,1 +
-DATA RFEOO,8FE00 8FE00.8FE00, ÉFE0O,&FFO0,&FF0U, &FEOO +
-DATA BFEOO,AFAFE,&FBFE,&F8FE, &FAFE, RFEOO,&FEOO,8FE00 +
-DATA R0000,40000,83C00, 82100 87000 A7E00,87E0U,8/C00 +
-DATA 27000,87000,87070,4707C,87000 87000, &7C00, 80000 +
-| **#flt*tt****t*h*:**** +
-| = FORME & : BOIRE * +
-1 E en rr e d de 0R e R r dc d e d +
-DATA 8,8,1,0,1 H +
-DATA &FEflfl,flFE?H.&FE?B,&FE?E.&FE?H,&FF?E,&FF?E,&FE?& +
-DATA &FE30,&FECO,&F820,8&FFF5FF1,0AF,FERFF BBFDFT7E +
-DATA EDUHD,&DGEG,&HEEH,&E43fl.&?EHD,ETEDD.&?Fflfl.fiFEflD +
-DATA 27C00,47000,88707000 8070002,, &87F/FE,0 8000000 +
-| e e o o AR A A e W AR +
-“* —FORME & : FRAFPER ? +
-I RRÉRRÉÉ RRN E IERE +
-DATA 8,5,1,0, 1 +
-DATA äüüüü,5ü1Eü.älFEE,&lFFE,&lFFE.&lFFE,a?FFE,aîFFB +
-DATA S7FFC,87FFE,87FFE,83FFE,83FF8, 63DF0, 830F0 80000 +
-DATA 60000,60000,20180,40084 80FFS, BOFFO, &1FFO, &3FFC +
-DATA 23FF0,A3FF8,23FFC,A1FFO,R18E0,81060,80000, 80000 +
-| ME AAMARRET TR RRER ÉÉ S RR A RR +
-! * FORME 7 : OEIL (PDUR EXAMEN) * +
-| t:ti*ttt****fi#t:t****iktt****##tt* +
-DATA B,8,1,0,1 | +
-DATA &FEQ,RIFFD,R3FFB,&7FFC,AFFFE,&FFFF, BFFFF, &FFEF +
-DATA RFFFE,&7FFC,R3FFE, &1FFO,E7CO, B0, &0, &D +
-DATA Efl,EFEfl.EIDID,EE?CE.&EFFfl,&EAEH,EDEEE.&HE?+
-DATA BAFE4 &P7CR,R1830,57C0,50,80,40,40 +
-PR e o W Ty CR E e e e e R e E E E +
-! — FORME 8 : DEMI-TOUR * +
-Î fifltti*****kitittt***#fl#*# +
-DATA 8,6;1,0;1 4 +
-DATA 2000080000 &3FFF,83FFF,63FFF,A3FFF,63FFF,63FFF +
-DATA R3F3F,A3F3E, L7FBF, &FFFF,A7FBF,83F3F B1E3F, 60CIF +
-DÂTA &0000.60000,0000 61FFE,B1FFÉ,81FFE,R1FFE,B1E1E +
-DATA R1E1E R1E1E,8161E,67F9E,A3F1E,R1E1E,80C1F,R0000 +
-DATA —l +
-_——-—'—-—"+
-qh dh kR e d d d e R RE É A IERE É NN +
-| € TEXTES DES DIVERS MESSAGES 7 +
-i æ + +
-| AR RRER A RR A RR E LRk +
-méssades: +
-+
-| mewaahhrdrdxEER Ak A NN RE +
-* * MESSAGE 1 : LES POTENCES * +
-1 tt**##i#ifliÿ****#::fl%ü#k**:r** +
-DATA Les potences sont un triste souvenir de l'époque +
-de +
-DATA-HELGIR LE BON. Elles rappellent aux étrangers que +
-la , +
-DATA justice de la cité est rapide et efficace. +
-DATA = +
-i www*ww**ttxt*fiwwwtttr*t*##fl#ttt*#kfltflt +
-' % MESSAGE 2 : LES TONNEAUX DE VINS 7* +
-| w*t#ttrf***t##tttââ*kwtht**#iäiût*t** +
-OATA Un marchand de verroterié tente de convaiîncre une +
-DATA jeune femme qu'elle sera plus séduisante avec un +
-DATA collier de peries de verre. Elle ne semble pas +
-DATA trés convaincue. +
-DATA * +
-[ T OE E PE A S d E A A U E R E É R A E E +
-! % MESSAGE 3 : ARMURIER * +
-| AAEÉÉÉÉ AN ol o ok e REN RRF +
-OATA Un armurier propose diverses armes. Son stock est +
-ATARI MAGAZIME BEST OF GFA BASIC +
-DATA MARCHEL.BIN _ +
-BATA Voici le célèbre marché des 5 peupliers. Cet endroit +
-DATA est trés ancien. La cdité à été construite à coté des +
-DÂTA en place publique. Il est assez content de la vie +
-DATA qu'il a mené jusqu'ici. Il s 'inquiête un peu pour +
-DATA l'avenir. +
-DATA impressionnant. Il propose un lot de couteaux de +
-DATA lancer pour un prix trés raisonnablé. +
-DATA bourreau ot ses aides ont le droit d'entrer ici (et +
-DATA les prisonniers). +
-DATA * DATA * +
-D S Ty s ol e B L R T o B o T et e ko T T e e e +
-! # MESSAGE 4 : VENDEUR DE BEIGNETS * +
-| AR EEEA EN N RR stttk E R +
-DATA Un vendeur de beignets propose sa marchandise, C'est +
-DATA appétissant, mais un peu gras. +
-DATA * +
-+
-[ + *;fl__—*-fil*'fil ds e r e e r e e e e d r d E E PE +
-! * MESSAGE 5 : VENDEUR D'HABITS * +
-1 VWTURTEETTATHARERÉEETE TR ETE RR LANE +
-DATA Un jeuné marchand à l'air aggressif vend de vieux +
-DATA habits au prix du neuf. +
-DATA = +
-L T T T o B 1 1 S e e R R RE e e RE E +
-* * MESSAGE 6 : VENQEUR DE CHEVAUX * +
-1 e e B S E e e AR e r u e E E R E +
-DATA C'est l'endroit idéal pour acheter un cheval. Vous +
-DATA pouvez y trouver aussi bien un cheval de trait, +
-DATA qu'un destrier. IL y à même des ânes (cela peut +
-DATA toujours être utile). +
-DATA * +
-I RV e i o ok e e e i g g o ok e ol o TT e e +
-'k MESSAGE 7 : EXAMEN MILICIEN * +
-| RH SRE E R A E E +
-DATA Le chef des miliciens est un sergent d'une DATA +
-quarantaine d'années, Il est trés bien arme +
-DATA et semble compétent. Son aspect guerrier est +
-DATA contrebalancé par la poupée de chiffons qu'il +
-DATA fabrique pour sa fille. : +
-DATA * +
-I r RE R E d éc d ce ckc rrérércird e dE de f EEN EEEE +
-! * MESSAGE & : JOUER AUX DES * +
-I d e E E R E E TS A RE d E e R ATk e +
-DATA L'un des joueurs de dés gagne gros. Les autrés le +
-DATA regardent avec une lueur de suspicion dans le +
-DATA regard. +
-DATA * +
-+
-L I B B B T BT T T g i e e e e TRIN ETE +
-' % MESSAGE 9 : FIN DE L'ESPACE DE JEU * +
-| RESR RL R A s Ebt b +
-DATA La ville s'étend encore plus loin dans cette +
-DATA direction. Vous ne pouvez pas aller plus loin (pour +
-DATA l'instant). +
-DATA # +
-| NAXÉÉÉEÈAENHRRR E ARAREEEAA A R +
-! * MESSAGE 10 : SALLE DE TORTURE * +
-l ÉF TV A YRR EN TERRREST s oA E RL +
-DATA Vous ne pouvez ouvrir cette porte. Le Milicien vous +
-DATA dit qu'elle mêne & là salle de torture. Seul le +
-ETE O N L TR RE S E E O E e S +
-L #% INDICATEUR DE FIN DE MESSAGES * +
-E cf d é e d e E E E E E E A T A C C e d E R E +
-DATA *FIN +
-+
-+
-LFNNAE +
-* # LES TEXTES DES DIALOGUES ” +
-l ETE REREEEEAENNNNEREREEATEFX +
-dialoques: +
-s e E RR R R e e e R RR RR E +
-! * DIALOGUE 1 : HOMME EN ARME = +
-E E E E E e d rrr d de T E N +
-DATA Vous parlez avec l'hômme en armes. C'esl un pretre +
-DATA d'un ordre querrier. Tl vous raconte les exploits +
-DATA qu'il à vécu avec ses amis aventuriers. [I est tres +
-DATA fier de son bras en métal qui doit étre une arme +
-DATA redoutable. +
-DATA * +
-+
-T & btkR RNi e e +
-* * DIALOGUE 2 : MENDIANT # +
-I NNENTE FE b +
-DATA Vous parlez pendant Un moment avec le vieux +
-DATA mendiant qui se trouve là. Il est heureux car +
-DATA i1 a assez de pièces pour se payer du pain blanc. +
-DATA C'est un jour faste. Les dieux ont êt& bon avec +
-DATA lui. +
-DATA * +
-1 d d e e e R A e e e é é d e d d e +
-* DIALOGUE 3 : GARDE PRISON * +
-| ke kel i i i v TD e e o e ke e É ol S e e E +
-DATA Le garde vous raconte qu'il monte la garde touie +
-DATA la journée. 11 est remplacé par deux colléques +
-DATA pendant la nuit. Il aime ce poste, car c'est +
-DATA assez calme. 11 plaint ses camarades qui doivent +
-DATA affronter les émeutes de la rue, +
-DATA # +
-—— +
-| LHAARRS RRN AN R N IERE +
-| # DIALOGUE & : PRISONNIER 1 * +
-| RRN VV ETE E R RE +
-DATA Le prisonnier vous explique qu‘il à été condamne +
-DATA à 3 jours de prison pour avoir volé et tuë la +
-DATA belle—mére du chef des Miliciens. +
-DATA * +
-| T T o R T i o e e e e R +
-! # DIALOGUE 5 : PRISONNIER 2 7 +
-| éx th h ek RRN ke sk e e +
-DATA Ce prisonnier attend d'être jugé pour pillage +
-DATA de tombe, mais i1 sait déja qu'il sera Écartelé +
-ATARI MAGAZINE m BEST OF GRA BASIC +
-DATA * +
-Y T TR T R T REN R d RR +
-' * FIN DES DIALOGUES * +
-| XEÉVAVVLARASEEÉAARRWRRE +
-DATA *FIN DIALOGUES +
-+
-[T T E E T F PR T E E RO E dN E E S +
-1* 4 Ÿ +
-! * DEFINITION DES LTEUX * +
-VR #* +
-1 RRh +
-leéux: +
-' DATA Mom image +
-' DATA texte descriptif du lieu +
-DATA px,py,tx,ty,souris,action,paramêtre, ! REM +
-' DATA -1 # +
-DATA *FIN +
-__—I'-——'—' +
-+
-| d d e d d d e R R RN A ARk bRk +
-"* LLEU-1': -LA PORTE DE LA CITEE * +
-| kA RA AR AR AR AANA R R R AN bk RIR +
-DATA VILLE.BIN : +
-DATA Vous voici devant Ja porte de la Cité de Randhal ou +
-DATA se trouve l'Epée Runique (d'aprés la légende) . C'est +
-DATA un endroit ol se cotoient toutés les races et toutes +
-DATA Tes cultures. +
-DATA * +
-DATA 15,48,60,40,2,1,2, +
-DATA 86,38,60,60,1,7,9, +
-DATA 156,48,60,40,1,1,3, +
-DATA 226,38,8,60,7,7.1, +
-DATA 244,48,60,40,2,1,5, +
-DATA —I +
-I f— +
-ENTRER DANS TAVERME +
-MESSAGE DE FIN DU MONDE +
-ALLER VERS MARCHE +
-EXAMEN DES POTENCES +
-ALLER VERS POSTE DE GARDE +
-i tt*******i!********##itt*******?*t******T +
-* LIEU 2 - TAVERNE DE LA LICORNE BLEU * +
-! #*it:OEwwwi**t**iHit*tt**i:iü*fitt#*#htt*** +
-DATA TAVERNE.GIN +
-DATA Vous êtes dans la Taverne de La Licorné Bleu. +
-DATA C'est un endroit célebre sur les 12 mers et les +
-DATA & océans. Quelques marchands jouent au dés dans +
-DATA un coin de la salle. Un homme en armes est assis +
-DÂTA à une petite table. +
-DATA * +
-DATA 38,53,20,30,2,1,1, +
-DATA 90,78,80,20,7,7.8, +
-DATA 202.,78,80,20,3,3,1, +
-| SORTIR DE-LA TAVERNE +
-| MESSAGE JOUER AUX DES_ +
-| PARLER (HOMME EN ARMES) +
-DATA 90,38,60,25,5,5,1, ! BDIRE +
-DATA 202,38,60,25,4,4,1, | MANGER +
-DATA =1 +
-EERÉÉRRAAEAARER N A E +
-* LIEU-3 : MARCHE T * +
-hh R ce o T e ok e r d d e e e ol +
-ATAR| MAGAZIME +
-DATA entrepôts des premiers marchands. On peut y ;rQUVEr +
-DATA à peu prés n'importe quoi (â condition d'avoir +
-DATA heaucoup de piêces d'or). +
-DATA = +
-DATA 20,93,280,10,8,1,1, ! DEMI-TOUR VERS DEBUT VILLE +
-DATA 22,33,67,50,3,3,2, ! PARLER AU MENDIANT +
-DATA 100,33,42,50,1,1,4, ! ALLER VERS MARCHE € +
-DATA 156.33,82,50,7.7,2, ! MESSAGE POUR ACHAT (CAMELOTE +
-DATA 256.33,42,50,7,7,6, ! VENDEUR DE CHEVAUX +
-DATA -1 +
-P — +
-i **t****##tttt**#**??tt* +
-( «" [1EU 4 - MARCHE 2 * +
-oAk ke R R R E RR RIUE +
-DATA MARCHEZ .BIN | +
-DATA Vous vous trouvez devant d'autres Doutigues. +
-MATA * +
-DATA 20.91,780,15,8,1,3, 1 DEMI-TOUR VERS MARCHE 1 +
-DATA 53,33.40,50,7,7,3, ! MESSAGE ARMURIER +
-DATA 140,33,90,50,7,7,4, ! MESSAGE VENDEUR DE BEIGNET +
-DATA 797,33,10,50,7,7,5, ! MESSAGE VENDEUR D'HABITS +
-DATA —1 +
-HRFN E E d d E E +
-* LIEU 5 : POSTE DE GARDE * +
-AR AR EEEERAVAE LA AW AT A ELR +
-DATA GARDE.BIK , +
-DATA Vous entrez d'un pas décidé dans le poste d garde +
-DATA de 1a Cité. Quelques miliciens s'occupent en +
-DATA discutant de leurs exploits militaires. La porte +
-DATA de la prison est ouverté. +
-GATA # +
-DATA 53,33,40,50,7, F 315 | EXAMINER CHEF MILICIEN +
-DATA 140,33,40,50,2,1,1, ! SORTIR DU POSTE DE GARDE +
-DATA 727,33,40,50,2,1,6, I ALLER VERS LA PRISON +
-DATA =1 +
-+
-| kEkEEANRAAEEEERR AR AT AR +
-< * LIEU 5 - LA PRISON * +
-L A d d dc d RE +
-DATA PRISON.BIN +
-DATA Vous êtes dans la prison. C'est un endroit lugubre. +
-DATA Un Milicien surveille deux prisonniérs. +
-DATA * +
-DATA 34,74,40,30,2,1,5, +
-DATA 39,34,42,30,3,3,35 +
-DATA 104,34,42,50,3,3,4, +
-DATA 174,34,42,50,3,3455 +
-DATA 244,34,42,50,2,/,10, +
-DATA —I +
-—— E E +
-! ALLER POSTE DE -GARDE +
-! PARLER MILICIEN +
-| PARLER PRISONNIER 1 +
-! PARLER PRISONNIER Z +
-! SALLE DE TORTURE +
-PR TR LU M e A e RR A I e+ B É AN e e +
-* INDICATEUR DE FIN DE DOMMEES * +
-***kw#:rt*****##itt****##*tt***i#+
-DATA “FIN +
-BEST OF GFA BASIC +
-GRAPHISME EN GFA BASIC +
-f:'lL-l- +
-D E | B .r. +
-__ —— e UE +
-Quelques généralités +
-Les souris mesurent 16 pixels de haut sur 16 pixels de large. Elles ne +
-peuvent être définies qu'en deux couleurs. Le même dessin peut être +
-| utilisé dans les 3 résolutions praphiques de PAtari (basse résolution +
-320x200 en 16 couleurs, movenne résolution 640x2C0 en 4 cou- +
-| leurs, haute résolution 640x400 en deux couleurs &t uniquement sur +
-Il moniteur monochrome). 11 est regrertable que les concepteurs du ST +
-n'aient pas prévu de souris adaptées aux différentes resolutions, ce +
-qui aurait permis la créacion de souris 16 couleurs en basse résolu- +
-| tion. Certains jeux utilisent de telles souris, mais pour arriver à leurs +
-fins les programmeurs écrivent entiérement leurs propres routines. +
-@ / d'E =< f TR +
-8 @ s Ok £ 98 # L +
-| | ce Nce c @ K +
-| |6v2? HUVN0® 6 L B +
-Dessin des souris +
-| Les différentes souris proposées dans cet article ont été déssinées avec +
-| le logiciel de dessin, Degas Flite. Les dessins ont ensuite été trans- +
-. formés en données numériques grice à un petit programme de con- +
-‘ i version écrit en Basic GE4. On trouve souvent des éditeurs de souris +
-| dans les journaux ou dans les livres, mais il faut savoir que les gra- +
-' |'_ phistes professionnels n'utilisent jamais ces utilitaires. Tous les des- +
-‘ ! sing des logiciels commerciaux (animations, lormes des souris, pc +
-lices de caractères, pages de présentation, ete.) sont faits avec des logi- +
-‘:: ciels graphiques classiques, puis récupérés à l'aide de petits pro- +
-N erammes astucieux, +
-+
-+
-+
-IBLIOTHEQUE +
-{MES DE SOURIS +
-Donnez du cachet à vos programmes +
-'l Cette bibliothèque offre 40 nouvelles formes de souris à utiliser à +
-| partir du GFA Basic. Vous pouvez employer ces souris dans vos +
-propres programmes pour leur donner un air plus sympathique. +
-Structure d'une souris +
-Une souris se compose d'une lorme, d'un masque-de cransparence et +
-de deux valeurs de décalage pour les clics «x et y+, La lorme est le +
-dessin de la souris. T peut ¥ avoir 2°256 formes différentes, soit +
-1,16x 10"77 souris différentes! +
-Le masque est un autre dessin indiquant au système les points de la +
-souris qui doivent être affichés à l'écran, ot ceux dé la souris qui ne +
-doivent pas l'être (c'est-à-dire les points où apparaissent lé fond), +
-Il ne faut pas confondre la souris système avec le dessin qui se déplace +
-sur l‘écran. Ce dessin visualise la position de la souris, mais ce +
-n'est pas un point, alors que la souris, clle, ne sé trouve qu’à un seul +
-endrout de l'écran. +
-Lorsque l’utilisateur presse sur un bouron de sa souris, le syswme +
-détecte le clic et fournit une position (x,y) de Pécran. Cette position +
-est considérée par défautr comme la position du point haut gauche +
-du dessin de la souris. +
-Les valeurs de décalage x et y permettent de déplacer le ventable +
-«point de clics par rapport à ce point de clic théorique En fixant la +
-valeur de décalage en x À 2, le point de clic fourni par le système sera +
-décalé de deux pixels vers la droite. +
-En prenant de bonnes valeurs de décalaue, on peur s amuser à définir +
-une nouvelle souris dont le clic ne se ferait P]LLE sur la ]:H:!il'ltt'.' de la +
-flèche mais sur l'autre côté de la souris (certains virus vrlisent ce +
-genre d'etiec), +
-Programmation en GFA Basic +
-l'instruction Defmouse (page 176 du manuel GFA Basic 3.0) permet +
-de redéfinir la forme de la souris, Les données sont mémorisées dans +
-des lignes de DATA sous forme de chiffres hexadécimaux. Cela permer +
-d'avoir dés inflormations faciles à lire et à Eaper {ËIFFËÜ Tt +
-tient plus facilement que 65456 en décimal ou 1111111110110000 +
-en binaïre): Les données mémoriséés dans les lignes de DATA sont +
-stochées dans un tableau alphanumérique. +
-La fin des informations est indiquée par la valeur <1 de la dermière , +
-ligne de DATA Ce système autorise l’ajout de nouvelles souris sans +
-probléme, +
-|:' ATARI MAGAZINE m BEST OF-GFA BASIC +
--_ +
-I AR R PR E E E E E E ETE E E ETE E A e E E E E R RR RS +
-I & +
-! # BIBLIOTHEQUE DE FORMES DE -SOURIS * +
-E % + +
-+
-L 0 TR e o e e e d d d E R AIF +
-+
-' {c) 1989 ATARI MAGAZINE & Patrick Leclercq +
-* Machine : ATARI 31 +
-* Langage : BASIC GFA 3.03 +
-' Machine de developpement et de test : ATARI 1040 STF +
-HESERVE 50000 | RESERVATION MEMOIRE POUR BASIC +
-DIM forme mouse%(50)1 TABLEAU DE FORMES DE SOURIS +
-nb mouses=0 | ME SOURIS DE TABLEAU forme moused +
-+
-+
-@lec mouse ! LECTURE DES DEFINITION DE SOURTS +
-fdemo_mouse ! DEMONSTRATION +
-END +
-| LS RRRRRAANA e o e e A R SRE A E RE S RN A e e RE +
-! = LECTURE DES FORMES DE SOURIS STOCKES EN DATA * +
-[T 1Y S e A RR RN R A A o R R ke R b E +
-PROCEDURE lec_mouse +
-LOCAL v%.mb +
-Do +
-READ v= +
-EXIT IF wis=]1 +
-INC nb_mouse* ! UME NOUVELLE SOURIS +
-mé=MKT$ (v5) | DEBUT DES DONNEES SOURIS +
-+
-+
-! LECTURE DATA +
-! TEST 51 FIN DE DONNEES +
-FOR i%=1 TO 36 ! DEBUT BOUCLE LECTURE DONNEES +
-RFAD w5 1 LECTURE DATA SOURIS +
-mé=m{+MK1${vé) 1 STOCKAGE DES DORNEES SOURTS +
-NEXT 1% ! FIN. BOUCLE LECTURE DONNÉES +
-forme mouse${nb mouse%)=m§ ! STOCKAGE SOURIS +
-LOOP +
-RETURN +
-Y Y P S S T OE TT R S e e e e E I E e A d d d d E R +
-! # DEMONSTRATION DES FORMES DE SOURIS = +
-| RE EAA TVRE REN A NNAAAREÉE RRN RE AAR R +
-PROCEDURE demo mousé +
-LOCAL 1% +
-FOR i%=1 TO nb mouses | DEBUT BOUCLE DEMO +
-DEFMOUSE forme mouse$(i=}! AFFICHAGE SOURIS NUMERO +
-! VARIABLE LOCAL +
-i% +
-1 ATTENTE D'UN CLIC SOURIS +
-! FIN GOUCLE DEMD +
-Battclic +
-NEXT 1% +
-RETUREN +
-—_—_ +
-DRh ke Atttk E E +
-* ATTENTE D'UN CLIC SOURIS * +
-i e a1 N R e e wEEEK +
-PROCEDURE attclic +
-REPEAT ! ATTENTE D'UN CLIC SOURIS +
-UNTIL MOUSEK +
-REPEAT I ATTENTE FIN DU CLIC +
-SOURLS +
-UNTIL MDUSER=0 +
-RETURN +
-+
-| e AP R R R e d É É RE +
-* BIBLIOTHEQUE DE FORMES * +
-RRN RE RR RR RE RE S +
-FORMAT DE DEFINITION : +
-DATA Position x du point de clic par rapport +
-; au cote haut gauche de la souris +
-DATA Position y du point de clic par rapport +
-au coté haut gauche de la souris +
-DATA mode d'affichage (1 =SPRITE NORMAL , +
-—] =MODE XOR)- ; +
-DATA Couleur du masque +
-DATA Couleur de la souris +
-DATA 16 entiers 16 bits pour le codage du masque +
-DATA 16 entiers 16 bits pour le codage de la forme +
-— +
-REMARQUE : Les souris sont toujours définis en +
-? couleurs, mais cela peut être n'importe quelles +
-couleurs de la palette utilisé par le système +
-' (rouge et vert par exemple). Il n'y à qu'en haute +
-résolution (640<400 sur écran monochrome) qu'uné +
-souris est toujours noir et blanc. +
-mantre: +
-DATA 7,7,1,0,1 +
-DATA fiïFH,âFFE.&FFB,älFFE,EEFFE,&îFFE.äFFFE,âFFFE +
-DATA äFFFE,ä?FFE.ë3FFE,SLFFE.ëFFE,EFFË.äFFË,ETFE +
-DATA &3FÜ,ËEÎÛ,&?FÜ.&E?H,älllfi.äÈËEE,HÆïÜfl,äEEFfl +
-DATA E#lü#.äfiflêû,&111Ë.EE?E,ä?Ffl,äEFÜ,ÈEED_äÈFÜ +
-cOeur: +
-DATA 7.7,1,0,1 +
-DATA ä1E1E,äEFFE,&?FFF,&FFFF.EFFFF,äFFFF,äFFFFùäFFFF +
-DATA STFFF.ä?FFF,äËFFE,&1FFE.&FFE.&?FÜ,ËHEÜ.ËlEÜ +
-DATA âü,ältlt,äïf?E,Efi?EF.&#FÙF,ÈQFDF,34FFF.&fiFFF +
-DATA äË?FE,äB?FE,ñIEFE,ËÜFE,ËfiFü,äËEÜ,ÈIEÜ,EEÜ +
-point interrogatiôn: +
-DATA 7,7,1,0;1 +
-DATA E?FH,&FFfJEIFFE,EHFFF,EEFEF,EEFEF,&IE?F,&FE +
-DÂTA E]FE,EEFË,ËEFÜ,&EFU,äfiFü,âïFü,&ËFü,&ïFfl +
-DATA älEÜ,EÏFË+&ËFE.&tÎ3E,älElE,âlElE,äHE,EEE +
-ÂTAR| MAGAZIME BEST OF GFA BASIC +
-DATA &BS.2170,%160,&1E0,50,51E0,4160,81E0 +
-larmes: +
-DATA 7,7,1,0,1 +
-DATA &3C00,R7EQD,&FFOO0, EFFOO0,AFF90, &FFBS, AFFBS,EFFTC +
-DATA &7EFE,&3CFE,&39FF,&70FF, 8FFFF ,&FEFE,AFETC,A7C38 +
-DATA E1800,42400,54200, 45200,858500,88510,885910, 84228 +
-DATA &3C44, 844, E10BA,&288A,86092 54444 R6C38, 63800 +
-peil: +
-DATA 7,7,1,0,1 +
-DATA BAFEQ,R1FFO,R3FFB,R7FFC,AFFFE, RFFFF ,&FFFF, &FFFF +
-DATA &FFFE,&7FFC,&3FFB,RIFFO,RTCO, &0, 50,40 +
-DATA &0,&FE0,&1010,427C8,A5FF4,4BABA, RDEBG, 80072 +
-DATA R4FE4,&27CH,&1830,A7C0, &0, 50,480, A0 +
-dragon: +
-DATA - 7,7,1,0,1 +
-DATA &1C3C,R3CIE,&7F7F ,RFFFF, &FFFF,&FFFF &FFFF,&FFFF +
-DATA &33FF,8F0F B1F9F, RI3F1F,43E7F,A3FFF,83FFF ,A1FDA +
-DATA E818,8181C,&3E3E,&7F3E,4FFFF,BFBFF, B93FF 831EF +
-DATA RICF,R38F,&FOF,&1EOB,R1C0B,81C72 , K1EDA, LFBS +
-blason: +
-DATA 7,7,1,0,1l +
-DATA AFFFF, &FFFF,EFFFF,&FFFF,&FFFF,RFFFF ,&FFFF,&FFFF +
-DATA BFFFF,&@FFFF,&FFFF,87FFE,67FFE,63FFC,&1FF8,6FFÜ +
-DATA RFFFF,EBAFF,&C5FF, B8AFF ACSFF,SSAFF,&DF55, REFAB +
-DATA &5F56,L6FAA,&7756,826FC,831FC, B1AF8,60F0, &3C0 +
-epee: +
-DATA 7,/,1,0,1 +
-DATA RF,B1F,63F,67F, 8FE,861FC,&F3F8,&F7F0 +
-DATA AEFEO,AFFCO,&FF80,87F00 &FECO,&FFEO,&FFEO,&F7C0 +
-DATA &7,89,811,022 644688 66110,8E220 +
-DATA RCA40, 4ER80,87100,43A00, 46C00,8DECO , &F7C0,46380 +
-bouclier: +
-DATA 7,7,1,0,1 +
-DATA R1FFE,R3IFFC,E7FFE,RFFFF,&FFFF ,&FFFF,&FFFF,&FFFF +
-DATA BFFFF,&FFFF,RFFFF,&FFFF,&7FFE,&3FFC, B1FFE,&7ED +
-DATA &7EQ,&18F8,833A4,55F82, 84702 ,88661,88F0Y 89F0H +
-DATA &BEOY,RBEQF,RAFAE A4F9E,&2FAC,&61FEF8,A7E0,40 +
-fleche gauche pleine; +
-DATA 1, X, 1, 051 +
-DATA &180,8380,&760,8F80,81FFF,E3FFF,&7FFF,&FFFF +
-DATA LFFFF, &7FFF,&3FFF, &1FFF,AFB0, 5780, 5380, 8180 +
-DATA RO,&100,&300,&700,4F00, 81FFE,83FFE,87FFE +
-DATA R7FFE,&3FFE,RIFFE,&FOD, &700,8300,&100, &0 +
-fleche gauche vide: +
-DATA 1, 1, 1, 0, 1 +
-DATA E0,8300, 2780 8F80,81FFFR3FFF,R9FFF,4FFFF +
-DATA AFFFF,R7FFF,R3FFF,R1FFF,RF60,8780, 5300 , 40 +
-DATA &O,&D,&300,8500,%900,&11FE, 82002, 24002 +
-DATA 24007 ,&2002,411FE, &900, &500,&300, &0, 80 +
-fleche gauche relief: +
-DATA ']: sÉ i) Es +
-DATA &0,&300,8780,&FA0,&1FFC,83FFE,67FFF,8FFFF +
-DATA &FFFF,&FFFF,&7R1FFCFF F@F,CAO,36/FC0D, BF3,0 +
-DATA £0,80,&300,&500,890052,0&061,1 6F4C00,6 +
-DATA 24006 86006 831FE&,DE01,&7980,F &3E80,, 50 +
-flgeauchce hahut veide: +
-DATA }, 414 614 D, 1 +
-DATA AFFF8,8FFF8,4FFF8 &FFF0,6FFEO,&FFEO 6FFFO6FFFH +
-DÂTA &FFFC,BFFFE AFFFF,RF3FFORE1FE,AFC,A78, 230 +
-DATA R0,87FF0,44010,24070,84040 64040 88020, 84010 +
-DATA A4008, A4C04 85707 86102, 664 848, 530, & +
-fleche qauche haut pleine: +
-DATR 14 sl -0y +
-DATA &FFFS,&FFF8,&FFFS,&FFF8,8FFFD, KFFED, &FFFO,&BFFFS +
-DATA &FFFC,&FFFE,&FFFF,&FBFF,&FIFE, &FC &7 6, &30 +
-DATA &0, &7FF0,ETFFD,RTFED, R7FCO,&TFCO, &TFED, &TFFOD +
-DATA &7FF8,R7FFC,673FE,661FE,8FC &7, 630, 60 +
-fleche haut vidé: +
-BATA 1E 1 D- 1 +
-DATA R1B0,E3CO,&7EQ,&FFO,&1FF8,A3FFC, EJFFE &TFE +
-DATA B3FFC,&FFD,AFFD,&FFO,&FFO,&FFD, &FFO,&FFD +
-DATA BO,&1E0,%240,8420, 8810, %1008, 52004, &3C3C +
-DATA R420,8470,5420, 8420, 8420,8420,87E0, &0 +
-fleche haut pleine: +
-DATA Ty }, L, 0,, 1 +
-DATA &160,R3C0 A7E0,6FF0,B1FF8,63FFCR7FFE,8FFFF +
-DATA &FFFF,&FFO,8FFO,RFFO,&FFO,&FFÜ,&FF0,8FF0 +
-DATA &0,5180 4300 87E0,&FFO,R1FFB,B3FFC,87FFE +
-DATA &7E0 8720 67E0,67E0,67FE0,87E0,87E0,60 +
-fleche haut relief: +
-DATA-L, 1, 1, 0, 1 +
-DATA &180,%3E0,E7F0, &FFB, R1FFC,&3FFE,&7FFF, &7FFF +
-DATA &7FFF,&FFF,BFFB,&FFE, BFFB, &FF8, RTFE, 83FE +
-DATA &0,%180,%260,8430,8818,&10G0C, 82006, &3C3E +
-DATA 847E,4430,8430,8430,4430,&7F0,83F0,80 +
-fleche bas vide: +
-17,1 30 1.1 1051 +
-DATA &FF0,&FFO,&FFO,AFFO, &FFO, BFFO &FFO, &TFFL +
-DATA &7FFE,&7FFE,&7FFC,E21FFB,AFFO,RTEQ, &3C0,H150 +
-DATA &0, L7EQ,R420,8420,5420,8420, 8820 ,8420) +
-DATA &3C3C,A2004,51008,5810,5420,5240,4180, k0 +
-fleche bas pleine: +
-T LU TT | +
-DATA AFFO,RFFO,&FFD,&FF0, &FFO,8FFO 6FFO,8FFFF +
-DATA EFFFF,&7FFE,&3FFC,B1FFE,&FFO,E7ED, 300, 6180 +
-DATA RO,&7EQ,B7E0,R7EQ,&7ED,&7EC, &7ED,&TVED +
-DATA &7FFE,R3FFC,R1FF6,6FF0,87E0,8300,8180, 80 +
-ATARI MAGAFIME BEST OF GFA BASIC +
-souris st: +
-DATA-1,-1, 15 O, 1 +
-DATA £C000 &E000, EF000,8F500,4FC00, &FE00,&FFO0,4FF80 +
-DATA &FFCO,AFFRO,RFEOO,REF00,&CF00,8780, 2780 8380 +
-DATA &0,84000,&6000,27000 87800, &7C00,87E00,&7F00 +
-DATA &7F80,&7000, 6000, 84600, 4600 ,5300, &300, 60 +
-Farme bizarre: +
-DATR 450 1 UP3 +
-DÂTA REQ38,LFIBC,RFFFE,&FFFF, &7FFF A3FFF &1FFF, &27FF +
-DATA E72FF,8F8FE,87FFC,R3FFC,61FFE,8FFF,8/FE,81E +
-DATA R0,R6038, 67190 63FCE,63FE6,81FC0, R7EE &2FE +
-DATA &207E,&7070,&3870,R1FFS,RFFC,&7FE,&1C, 50 +
-loupe: +
-DATA:1L,-1, 1,.0,-1 +
-DATA R1FFA,&3FFC,R7FFE,&FODF,REDST 8E047 , 8E027 . 6E007 +
-DATA REOO7 ,&FO0F,&7FFE,83FFC , K1FF8,47E0, 67 EU &/E0 +
-DATA RO,R1FFE,&3FFC,4700E,46086, &6046, 56026, 46006 +
-DÂTA &6006,&700E,R3FFC,61FF6,6240,8300,8240, 83C0 +
-transistor: +
-DATA--F, 1, 1, 0,, ! +
-DATA RAETB,A3E3C,63E78, A3EF0,53FE0,83FC0, &7 F80,8FF00 +
-DATA BFFOD,&7FR0,&3FDC,&3FFC, B3FFC, &3FFC,A3FFC, &3EFT +
-DATA RO, &ICI8,&1C30,R1C60,&1CC0O,R1DB0, &1FOO,&TEDD +
-DATA &7E00 &1F00,81D80,A1CC8, 21078 81C7B, R1CF8, 40 +
-symbole etrange: +
-DATA-1, 1, 1, 0; 1 +
-DATA RFFCF,BFFCF,&FFCF,&FFFF, &FFFF, BFFFF &FFFF,AFFFF +
-DATA RFFFF,&FFFF,&FFFF,&FFF8, &FFFE,&FFFE,&FFE, &FE0 +
-MATA &0,R7F86,&7FB6,56186,861FE,&79FE, 47986, 86186 +
-DATA &67FE,867FE,86630 87F30,87EFC,R6FC,&600, 60 +
-symbolé atari: +
-BATA 15 1, 5, B, 1 +
-DATA ETEOQ,RFFO,AFFO,&FFD,LFFO,RIFFE, &1FF8, &3FFC +
-DATA RIFFE,RFFFF,&FBDF,&FBDF,4F3CF,RE3C7,6C3C3,80 +
-DATA 20,45A0,25A0,85A0 6540 &DB0,&DB0, #1DE8 +
-DATA 83900 R790E,6718E,É718E 4661864182 &0, 60 +
-note musique: +
-DATA 1515 1 VS I +
-DATA RIEO,81E0,61F8,R1FE,61FE,81FE,R1FE,B1EE +
-DATA É1E0.61FFD,R1FEO,A7FE0,47FE0,87FC0,61F60,61F00 +
-DATA &0,2C0,&C0,8F8,8FC,RFC,8C4,8C0 +
-DATA &COLECO,&FCO,&FCO,&3FCO,AFO0, &FO0, &0 +
-disquetté: +
-DATASE, 1 14 [ | +
-DATA AFFFF,&FFFF,&FFFF,AFFFF ,AFFFF ,BFFFF, &FFFF ,&FFFF +
-DATA &FFFF,&FFFF,&FFFF,&FFFF RFFFF,AFFFF,&FFFF AFFFF +
-DATA &0,&7FFE,R7FFE,LB00G, 66FE6,66006, éBAFÉ, 6006 +
-DATS &7FFE,&7FFE,R7FO3E,&7T7BE, &7 7BE &703E,A7FFE &0 +
-ordinateur: +
-PATATL ts 0 14 +
-DATA REEEF,&FFFF,&FFFF,AFFFF, &FFFF,&FFFF,&FFFF,&FFFF +
-DATA &FFFF,&FFFF,&FFFF,AFFFF, AFFFF,AFFFF, &FFFF,LFFFF +
-DATA &0.27FFE.44002;85217 A5A3M, &5ETA, REEFA, 24002 +
-DATA &7FFE,&240,57FFE,R4002,85554, 54002, B7FFE, &0 +
-document : +
-DATA: , 19 15051 +
-DATA R7FFERIFFE,AIFFE,RIFFE , S7FFE,87FFE,R7FFE,87FFE +
-DATA &7FFE,&7FFE,&TFFE,&7FFE &7FFE, &7 FFE ATFFE, &0 +
-DATA &0,&3FFC,82004,42004,82004, 62F04, 42004, &2BF4 +
-DATA &2004, R7FFS, 2004 AZAES 582004 BIFFC &0, 50 +
-parsonnage: +
-DATAS1 il o 1 +
-DATA RFFO,RIFFC,S3FFER3FFE,A3FFE &3FFE, R3FFE,&3FFE | +
-DATA E3FFFRLFFCAIFFC,RFFC,R7FF8,67FF8,87FFO,87FE0 +
-DATA E7FO,AFFR,B1FEC,61804 8180481004 &1E3C,&1/584 +
-DATA R1104 ABPR,ADDE,&678,4700,82E10,839E0, 83800 +
-tombe: +
-DATA: T, L1, 1, U, L +
-DATA ÉTEOEFFO,AFF8,83FFÉ,67FFE,67FFF,67FFFÇ,A7FFF +
-DATA &7FFF,&3FFF,AFFF, &FFS, LFFS,LFFR, EFFE,&3F0 +
-DATA fifl;&?Efl,&¢3fl.&43U+33E3E,EEDDE,EEEEE,EEDUE +
-DATA £3C3E,843E,8430,8430,8430,A7F0,83F0,80 +
-dollard: +
-DATA 114 S ) | +
-DATA A180 67F0,8FFE,RFF8,81FF0 , RIFFO,61FCO,81FED +
-DATA RIFFO,AFFS,A7FO,EFF8,61FF8,81FF8,RI1FFO,FCD +
-DATA R0,R180,&7F0,67F0,8FF0,8E00, &EOÛ,&FCU +
-DATA &FCO,&7F0,670,670 6FFO,EFFO,&FCO 8180 +
-livre: +
-DATA 1, 1, 1,-0,; 1 +
-DATA S1E0,R3F0,6/F0,&FE0,&F00,4F00 , &F00,&F00 +
-DATA ËEFFÜ,ÊHÎFD,EËFFÜ,ËFÜÜ,ÈFFH,ÈËFFË.&ËFFE,ËÈFFË +
-DATA A0,61F0,43E0,6700,8600,&6500,A600, B60Û +
-DATA Z600.&1FEQ, &600, 600, 6600 &FFO,&1FF0,80 +
-alpha: +
-B[00 v B 4514 U, | +
-DATA 40,80 ,8F30,@1FF8,43FFB83FF0,83FC0,R3FC0 +
-DATA ËËFEÜ.ËEFFÜ,&EFFE,&3FFÈ.ËIFËË,ËEÜÜ,ËÙ.EÜ +
-DATA &0, R0,&0,8F30,81F70,819C0,419C0, 1080 +
-DATA R1080,&19C0,&1E70,R1F70,&E30,40,40,50 +
-beta: +
-DATA F, -1, 1, O, 1 +
-DATA L1EDD,&7E00,&FFCO,EFFCO, AFFCO,&FFCO,RFFCO, AFFCO +
-OATA &FECD,EFFCO,RFFCO, RFFCO,&FFCO, &FFOD,&FFO0, &FS00 +
-JATA &0.&C00,A3E00,47380, 47380, 87380, 87380, A7E00 +
-DATA &7380,47380,57380,27380,A7F00,A7600, 87000, 54000 +
-oméga: +
-Db 1E 14 US 1 +
-ATAR| MAGAZINE m BEST OF GFA BASIC +
-DATA RFOD,&3FS0,L7FCO,&FFEQ, KFFED,&FFED, KFFEQ,&FFED +
-DATA B7ECO,E7FCO,&7FCO,AFFED,AFFEQ,EFFED, &7FCO, &3FET +
-DATA &0,&F00,&3B80,470C0,57000, 87000, 47000 87000 +
-DATA R3880,43680,4E00,84540 47BC0,R78C0,&3660, 60 +
-pi: +
-DATA 1,1,1,0,1 +
-DATA RÉCSFRIFFFS3FFF A7FFF,8FFFE,&FFFC,&FFFB +
-DATA SFFFO,R6FFO,&FFO,&FF0,&FFO,&FF0,8FF0,87F0 +
-DATA 60,46,66,81FFE,61FFE,47FF8,87FF8, 86660 +
-DATA 46660.4660.8660,8660,6660,8660,&660, &0 +
-symbole gfa: +
-DATA 1,1,1,0,1l +
-DATA AFFFF,RFFFF,&FTFF,EFFFF,&FFFF ,&FFFF,&FFFF,&FFFF +
-DATA - &FFFF,&FFFF,&FFFF,&FFFF,&FFFF,&FFFF, &FFFF , &FFFF +
-DATA RO,&3E,&3F3E,&7FB0,&7FBC,&73BC. 87380, AT030 +
-DATA &7780,%779C,%73BE.&7FRA,&7FBE,&3F3E, &36, 40 +
-symbole personnel auteur: +
-DATA 1,1,1,0,1 +
-DATA &FFFF,AFFFF,&FFFF, AFFFF,RFFFF,&FFFF, &FFFF, BFFFF +
-DATA AFFFF,&FFFF,&FFFF,&FFFF,&FFFF,&FFFF,&FFFF,&FFFF +
-DATA RO, R70FE,&70FE, &70EE,%70EE, E70EE B/EE, &7OFE +
-DATA K70FE,870FE,&70E0,470E0,47EE0,87EE0, &7EEC, &0 +
-symbole chaotique: +
-DATA . 1,1,1,0,1 +
-DATA &FFFF,RFFFF,&FFFF,&FFFF,&FFFF ,&FFFF,RFFFF,&FFFF +
-DATA AFFFF,&FFFF,&FFFF,&FFFF,&FFFBFF,FF&FF, F&FFFFF,+
-DATA &0,&718E,&73CE,5799E,L1D82800,4A,D 8B7E0T,E +
-DATA &7E7&DE0E 810,88, 487997, &730CE ,&0718E4, 80 +
-DATA —l +
-| VR RE RR RRN RE RR RESRE E AN NNN ÉÉÉ É R PR E E +
-L W & +
-! = GENERATION DE FICHIERS CODE POUR FORME DE SOURIS * +
-L — — +
-| dkkkd d d d R R é R d d E R AN E A RR RE E +
-" (c) 1989 Patrick Leclercq & ATARI MAGAZINE +
-| ukh hhhadé é r E RR R A E d e d in +
-' # Cet utilitaire génére un fichier .LST de codage de * +
-! = souris à partir d‘une image DEGAS ELITE contenant * +
-" #* les formes et les masgues des souris. Les positions” +
-* % des données graphiques sont mémorisés dans des * +
-! * lignes de DATA en Tin de programme. 2 +
-1 dh R R d d d d d R RR RE +
-! * La forme de souris ét le masque doivent être 5 +
-* dessinés avec des points de couleur 1 sur un fond * +
-! * de couleur Ü. Le programme dé conversion fonctionne* +
-* * dans les 3 modes graphigues de l'ATARI. % +
-1 TV R PP e é gt e e e T S e R S d e = e e d e e e A +
-RESERVE 50000 | RESERVATION DE MEMOIRE POUR LE BASIC +
-ATARI MAGAZINE BEST OF GhA BASIC +
-@codage | APPEL ROUTINE PRINCIPALE +
-END ! FIN DU PROGRAMME +
-+
-+
-| dede i b e o ok ol e e e ol e ok ok e e e o ok e e e e e e e ok oo ol e +
-! * CHARGEMENT D'UNE IMAGE DEGAS SUR L'ECRAN * +
-E E E E E E E AN E E E E R A R e E E +
-ttttïr***gigii*t**i**gEAttw***#fiflùtttw#ttttt*iùkwwùtt +
-* * Format image DEGAS: % +
-' * — 34 octets contenant la résolution ï +
-! * et la païette de couleur: +
-! * — 12000 octets contenant l'image ¥ +
-d e d d TR e e e SR AR s S e TR d E e e R OR A RE +
-“Paramêtre: nom$ contient le nom de l'image à charger” +
-E e e e e E E E WAkt S A E RE E A E R A E A C S +
-PROCEDURE lec degas (noms) +
-OPEN “I" ,#1,nom5! DUVERTURE DU FICHIER EN LECTURE +
-SEEK #1,34 | PLACER POINTEUR FICHIER AL DEBUT IMAGE +
-BGET #1,XBIOS(2).32000 1 CHARGEMENT IMAGE DANS FCRAN +
-CLOSE #1 ! FERMETURE DU FICHIER +
-RETURN +
-B T et R A ek R d d A I A GS SE RR RE +
-! # CODAGE LIGNE DE 16 PIXEL SOUS FORME NUMERIQUE * +
-1 RRRVNAAEREER s e e S e et R E A A RR R A e b +
-| *Paramétres: px% et pyk position de la 1igne à coder.* +
-PR e RR R R A A d e e d d é R RR RE +
-FUNCTION 1ÈE_1ÎQHË{ÜEË,FÏÊJ +
-LOCAL %, v, 15 | DECLARATION VARIABLES LOCALS +
-wi=() | INITIALISATLION VALEUR +
-X¥=prE | INIT POSITION X DE TEST +
-FOR i%=15 TO O STEP =1 ! BOUCLE DE LECTURE +
-cE=POINT {x%, py%) ! LECTURE COULEUR FOINT (x%,V%) +
-IF cx==0 | TEST SI COULEUR = D +
-vi=vE#2%i% ! MISE A JOUR DE LA VALEUR NUMERIQUE +
-ENDIF +
-INÉ x% | INCREMENTATION POS X DE TEST +
-NEXT i% ! FIN BOUCLE DE LECTURE | +
-RETURN v | RENVOI DE LA VALEUR NUMERLQUE +
-EMOFUNC +
-VR d d d A RR e A A d A A E A A A RESRE +
-* CONVERSION D'UNE FORME 16X16 PIXELS EN CODAGE HEXA * +
-|****t*gfifitwt*tt***ttt****i#JIi*****##ii******#t*tt**** +
-L RR E e é d d d r e e +
-‘* Les 16 chiffres hexadécimaux représentant le codage* +
-!* de la forme sont sont générés sous la forme de deux™ +
-‘* Tignes de-DATA. ; +
-EDATA Bocex , Bcxae , Roooo, B0, oo, É , Booood Baoo * +
-*DATA Rocxioe , B, FNx , ÉSOUEX , ÉOOCCX , B, ÉUOOUX Raxxx™ +
-B d é e E R E R R A e e A A RN R R b RESRE RR e +
-'* Cette procédure utilise la foncLion lec ligne qui * +
-‘% convertis une ligne graphique de 16 pixels en un * +
-** némbre entier. R +
-; . I __._-IL +
-d e e é e d e e e e e e e e e e e e e B d SE E +
-\* Paramêtres de là routine : c x +
-'# pxk : position X de la Torme à convertir = +
-'®* pyk © position Ÿ de là forme à convertir , 3 +
-'Hflfiw*#**tttt:***##fik**hft******#****fi**ttt+fififi******** +
-\* VARIABLES LOCALES : et +
-d i% - Indice de boucle {1 à 16) .* +
-= vi : Position Ÿ de la ligne de pixel & convertir* +
-[ R T SU S E V O e R ME E T ETE E E E E e r e E E E E E I E D RE E E E S R A A R QS +
-!* REMARQUE: L"instruction HEXt(v#,4) pérmét de E +
-‘* convertir le nombre v& en une chaine hexadécimal de* +
-!* 4 caractéres (par exemple, la valeur Ü donneras = +
-'* 1a chaine "ACO00" }. 4 +
-|*¢tti“tt******tg*q*tr**#*tzrt**ifiihAAfiki*i##*#*ih***fif +
-PROCEDURE lec forme{px%,py%) +
-DCAL 1%,¥% ! DECLARATION VARIABLES LOCALS +
-PRINT #2,"DATA "3 | INSTRUCTION DATA PREMIERE LIGNE +
-yi=pyE . | INITTALISATION POS PREMIERE LIGNE +
-FOR 1%=1 TÜ 16 1 DEBUT BOUCLE +
-vi=Blec ligne(p=#,y4)! LECTURE LIGRE DE POSITION y% +
-IF [i%<>8)} AND (i%<>16) +
-PRINT #2,"R":HEX$(v%,4):",=; IECRITURE FICHIER +
-ENDIF +
-IF i%=8 | GENFRATION DE LA FIN DE LA PREMIERE LIGNE +
-PRINT #2,"à"-HEXS(v5,4) ! DERNIERE VALEUR +
-PRINT #2,"DATA "; | DATA SECONDE LIGNE +
-EMOLF +
-IF i%=16 | GENERATION DE LA FIN LIGNE 2 +
-PRINT #2."&":HEXS (v%,4) !DERNIERE VALEUR LIGNE 2 +
-PRINT #? +
-ENDLF +
-INC y* | PASSAGE A LA LIGNE DE FIXEL SUIVANTE +
-NEXT i% ! FIN BOUCLE +
-RETURN +
-i tt*t**fi*gg*tttwfiiflttittr****#ifilitttf +
-* % ROUTINE PRINCIPALE DU PROGRAMME * +
-1 *p#rttttt******#i*üü*fifiwwrrttt****flkfi +
-L Ah R RN A I d e e Sy e e d e e e e e e d E E E +
-" = WARIABLES LOCALS: * +
-* # jmaget: Mom de |'image contenant les formes de * +
-i SOUris, L +
-"* nonf : Nom du fichier .LST généré par le prg , * +
-Fs et contenant le codage BASIC des souris.” +
-' * px _ forme® : Position x de la forme de souris. +
-| # py formés : Position Ÿ de lä forme de souris. * +
-! * px masque*: Fosition X du masgue ce la souris. ” +
-* # py masque%: Position Ÿ du masque de la souris. -* +
-1 khh H e e R e d e e E E +
-PROCEDURE codage - +
-LOCAL îmage$,nom£,px formek,py formes +
-LOCAL px masquet,py masques +
-READ image} | LECTURE NOM IMAGE DEGAS ELITE +
-Ülec degas(image$) ! CHARGEMENT DE L'IMAGE +
-READ nom$ ! NOM DU FICHIER .LST À ECRIRE +
-OPEM "o",#2,nom$ ! OUVERTURE FICHIER .LST +
-0o +
-READ px_formes ILECTURE PREMIERE DONNEE SOURTS +
-EXIT IF pe formes==LITEST SI FIN DE DOMNEES +
-READ py forme*s ILECTURE POSITION Ÿ FORME SOURTS +
-READ px masques ! LECTURE POSITION X MASQUE SOURTS +
-READ py masques 1 LECTURE POSITIUN Y MASQUE SOURTS +
-ÉRINT #2,"DATA 1,1,1,0,1" ILIGNE PARAMÈTRES SOURTS +
-ÏEE_fürmflfpï_masquüà.pï_mfläqueâ} | MASQUE SOURIS +
-Jec forme(px_formes,py formes) 1 FORME SOURIS +
-PRINT #2,""" ! LIGNE REM +
-LOOP +
-CLOSE #2 ! FERMETURE DU FICHIER ECRITURE +
-RETURN ' +
-D ook e e B e e R ek o o kAl +
-! * FORMAT DES DOMMEES * +
-| VHHEN ERRSE E +
-DATA Nom image DEGAS ELITE +
-DATA Nom fichier .LST à générer +
-DATA Position X forme souris 1, Pos Ÿ forme souris 1 +
-DATA Position X masque souris 1, Pos Ÿ masque souris l +
-DATA Position X forme souris 2, Pos Ÿ forme souris 2 +
-DATA Position X masque souris 2, Pos Ÿ masque souris & +
-DATA . —- ; _— +
-DATA Position X forme souris n, Pos Y forme souris n +
-DATA Position X masque souris n, Pos Ÿ masque souris n +
-DATA -1 +
-.__I_'_I—_....-—_—“_"'+
-[ Ao E E b S e R DR R A e E E A R E R A +
-! * EMEMPLE DE DONNEES DE SOURIS * +
-p S B E E E E T e A E E E E e d e A e d d +
-DATA SOURIS.FII +
-DATA SOURIS.LST +
-DATA 5, 2 +
-DATA 5, 19 +
-DATA. 22, 2 +
-DATA 22, 19 +
-DATA =1 +
-ATARI MAGAZINE WS BEST OF GFA BASIC+
  
-=== LES FONCTIONS GRAPHIQUE DU STE(1) ===+==== Pour finir ====
  
-Maitriser le STE +Nous verrons le mois prochain comment utiliser les cartes générées par ''EDITCART'' pour gérer les déplacéments d'une équipe de personnages sur un monde virtuel (affichage de l'image de l'equipe sur la carte, gestion des rencontresinterdictions ou autorisation de deplacements sur certaines cases, etc.) Vous trouverez en téléchargement sur le **3615 ATARI** les listings de l’article, un exemple de carte et une image //Degas// contenant quelques éléments de dessin.
-Cet article en deux parties a été écrit afin de vous montrer +
-comment intégrer ses possibilités graphiques du STE dans vos +
-programmes en GFA Basic. +
-Palette de couleurs +
-Les couleurs des STF peuvent êtré choisies parmi une palerre de 512 +
-couleurs tandis que celles des STE peuvent être choises parm une +
-palette de 4096 couleurs. ' +
-Système RVE +
-Les couleurs sont fabriquées en mélangeant trois couleurs de bases. +
-Ces couleurs «élémentairess sont le rouge, le vert et le bleu (d'où le +
-nom de RVB); Chaque couleur élémentaire est divisée en un cértain +
-nombre de niveaux de couleurs. Le premier nivean correspond au +
-noir, et le dernier niveau correspond à une couleur Lrés lumimeuse. +
-Le nombre de couleurs intermédialres dépend du nombre de niveaux +
-de couleurs, Si les trois couleurs de base sont au niveau le plus faible, +
-la couleur résultante est le noir. Far contre, si ces couleurs sont à leur +
-niveau le plus fort, la couleur résultante est le blanc. +
-De 512 à 4096 couleurs +
-La palette de couleur du STF est codé sur 3 bits. Cela donne huir niveaux +
-de couleurs (8=273). Chacune des trois couleurs élémentaires +
-peur prendre huit teintes différentes. Ce qui représente 8x8x8 (512) +
-couleurs possibles. La définition d'une couleur se fait avec l'instruction +
-SETCOLOR Cerre inseruction peut être utilisée de deux manières +
-différentes: en donnant les composantes RVB de manière individuelle, +
-où en donnant un seul chiffre contenant le codage de la couleur. +
-Chaque technique posséde ses avantages et scs incorvénients, +
-SETCOLÜR c,rouge,vert,bleu +
-SETCOLOR c,mélänge +
-La formule permettant de calculer la valeur de la variable mélange +
-est la suivante mélange=rouge*256+tvert"16+bleu, +
-On obtient la couleur noire avee les trois composantes RVB à 0 +
-(SETCOLOR ¢,0,0,0). La couleur blanche est obtenue en metrant es +
-trois composantes RVB à leur valeur maximale (SETCOLOR +
-G diad sl +
-Instruction VSETCOLOR +
-Les routines graphiques du GE4 Basic ont étés derites-en utilisane les +
-fometions graphiques internes au ST (système graphique VDI), Ces +
-fonctions sont pratiques et puissantes, mais elles ont un bug trés curieux: +
-elles utilisent leur propre table de chiffres pour gérer le +
-numéro des couleurs. +
-La foncrion SETCOLOR utilise le vrai numéré dé couleur alors que les +
-autres instructions du @F4 Basic (COLOR, DEFFILL ete.} utilisent |2 +
-table de couleur spécifique au VDL Pour prendre un exemple précis, +
-si un programme change la définiton de la couleur 1 avec SETLOLOR, +
-c‘est la couleur 15 qui va être moditiée. +
-SETCOLOR 1,7,0,0 +
-L'instruction VSETCOLOR est une instruction qui corrigé le bug de +
-couleur, Flle possède sa propre table de conversion et permet de medifier +
-une couléur sans sé soucier des problèmes de transcodage de +
-couleur, - +
-VSETCOLOR 1,7,0,0 +
-Affichage de l'ancienne palette +
-Le programme suivant affiche successivement toutes les 512 couleurs +
-de Ja palete STE Il utilise Pinstruction SETCOLOR pour changez les +
-couleurs. +
-'&&ÈOE##&OE*&#**‘*** +
-" PATEITTESIF * +
-Pk S HE E el o E +
-FOR rouge==à TO 7 +
-FOR vert==0 TO 7 +
-FOR bleus=0 TU / +
-V5YNC +
-SETCOLOR 0, rouges, vert*,bleu® +
-NEXT bleu® +
-NEXT vert® +
-NEXT rouge“ +
-ATARIMAGAZINE Y] BEST OF GFA RASIC +
-PE 3 R +
-Dégradé sur 512 couleurs +
-Le programme suivant affiche un dégradé de couleur rouge, Pour obtenir +
-un rouge pur, les composantes RVB vert et bleu sonr misé à D. +
-Ce programme affiche huit bandes de couleurs d'une largueur de +
-320 pixels et d’une hanteur de & pixels. +
-FOR i%=0 TG 7 +
-VSETCOLOR i%,i%,0,0 +
-HEXT i% +
-py%-TE +
-FOR i%=0 TO 7 +
-DEFFILL i% +
-PBOX 0,py%,319,pya+7 +
-ADD py%,d +
-NEXT 1% +
-VOID INP(Z) +
-END +
-Palette de couleur étendue du STE +
-La palette de couleur du STE fonctionne selon le même principe +
-que la palette du STF, mais elle possède une structure légérement différente. +
-Les composantes RVB sont codées sur 4 bits, Cela réprésente +
-seize combinaisons différentes (2°2#16). Puisque chaque composante +
-de couleur peut prendre seize valeurs différentes, il peut ¥ avoir +
-léxléx16 couleurs, c'esr-à-dire 4096 coulcurs dillérentes. +
-Les conceptenrs du STE ont réalisé un système de codage des couleurs +
-compatible avec le codage des couleurs STE Clestadire qu'un +
-codage de couleur STF fonctionnera sur STE. Cette compatibilité +
-est réalisée en rajoutant une nuance intermédiaire entre chaque couleur +
-STE Cellé-ci 25t codée avec le quatrième bit. Il y a denc hx codages +
-RVB compatibles avec le STE et huit codages RVE non compatibles +
-STF qui sont des nuancés intermeédiaires, +
-Affichage de toutes les couleurs STE +
-L’affichage des couleurs STE se fait de la même maniére que sur le +
-STE, sauf que les codages RVB varient de 0 à 15, et non plus de Ca 7. +
-FOR rougé*=0 TQ 15 +
-FOR vert==0 TO 15 +
-FOR bleu%=0 TÜ 15 +
-V5YNC +
-SETCOLOR O,rouge*,vert#,bleufs +
-NEXT bleur +
-NEXT vert® +
-NEXT rouges +
-Affichage d'un dégradé de couleur +
-Pour réaliser un dégradé de couleur sur STE, il faut afficher les couleurs +
-dans l‘ordre de leurs nuances. À cause du codage particulier du +
-STE, il faur afficher les couleurs dans l’ordre sumant: 0, 8,01, 9, +
-5 10.43 1.4 12,583, 6 14,7, 5 +
-Le plus simple est d’utiliser l'inseruction VSETCOLOR, comme sur +
-STEpour écrire le programme simplement. Hélas, cela ne marche +
-pas sur les GEA Basic 1x (saul pour la version 3.3E qui fonetionne +
-d'une manitre un peu particulière). La raison de ce non-fonctionnement +
-nous est inconnue. Le programme suivant vous montré Ce que +
-pourrait être une routine d'affichage de dégradés si l'inscruction +
-YSETCOLOR fonctionnait correctement sur STE. La séquence des +
-codes RVB est stockde au début du programme dans des lignes de +
-DATA, +
-DATA 0,5,1,9,2,10,3,11 +
-DATA 4,17,5,13,6,14,7,15 +
-FOR col%=0 TO 15 +
-READ rouges +
-VSETCOLOR col%,rougex,0,+
-HFXT col= +
-pys=36 +
-FOR i%=0 TO 15 +
-DEFFILL 1% +
-PEOX O,py*,319, pyt+7 +
-ADD pys,6 +
-NEXT 17 +
-vOID INP(2) +
-END +
-Pour obtenir un dégradé correcr, 1l faut écrire une routine équivalents +
-à |a foncrion VSETCOLOR Pour cela, il faut créer une table numerique +
-qui permet de convertir un numéro de couleur VDI en +
-numéro de couleur réel. Danlse programme d'exemple survant, La +
-table de conversion est stockde dans le tableau couleur vdi(). Les +
-données de conversion sont définies dans des lignes de DATA, La routine +
-Set color émule sur un STE l'instruction VSETCOLOR, Atten- +
-Hon: pour utiliser correctement Set_color, il faut absolument avoir +
-initialisé la rable de conversion avec la routine init couleurs vdi, +
-| VRSR R PE +
-! * AFFICHAGE DEGRADE * +
-! # ROUGE SUR STE L +
-DIM couleur vdi(16) i +
-Binit couleurs vdi +
-deqrade: | . +
-DATA 0,8,1,9,2,10,3,11 +
-DATA 4,12,5,13,6,14,7,15 +
-couleurs wvili: +
-DATA C,15,1,6,4,6,3,+
-DATA 7,8,%9,10,12,14,11,13 +
-RESTORE degrace +
-FOR col%=0 TÜ 15 +
-READ rougé* +
-@set color(col%,rouge=,0,0) +
-REXT col% +
-ATARI MAGAZINE Wl BEST OF GFA BASIC +
-pyssib +
-FOR i%=0 TO 15 +
-DEFFILL 1% +
-PBOX O,py%, 319, pye+7 +
-ADD py*,8 +
-NEXT i% +
-VOID INP{2) +
-END +
-I el Tk e e e e e i o É e R T +
-* INITIALISATION TABLE * +
-* * CONVERSION COULEURS * +
-| ÉÉÉN ÉÉ EN EFEERAE +
-PROCEDURE init couleurs vdi +
-LOCAL 1% +
-RESTORE couleurs vdi +
-FÜR i%=0 TÜ 15 +
-READ couleur wdi{i%) +
-NEXT 1% +
-RETURN +
-L d A é A é d d +
-| * ROUTINE EQUIVALENT * +
-| # YSETCOLOR pour STE * +
-LÆhx d é é ol e e e e e ol e E RE E +
-PROCEDURE set color(ne*,r%, vi,b%) +
-LOCAL m +
-mé=r4*256+v4*164+b# +
-SETCOLOR couleur vdi{nck),mi +
-RETURN ' +
-Variations dans les dégradés +
-Les programmes d'exemples n'affichent que des dégradés de rouge +
-pur, mais vous pouvez afficher aussi des dégradés de vert ou de bleu +
-en modifiant l'appel à la routine set_color +
-* DEGRADE DE VERT +
-Éset color(col,0,1%,0) +
-' DEGRADE DE BLEU +
-üset color(col,0,0,1%) +
-En utilisant des mélanges de couleurs, vous pouvez réaliser béaucoup +
-de dégradés différents. Avec la technique présentée iéi, i peut y avoir +
-256 dégradés différents, Ce nombre est obtenu en multipliant le +
-nombre de couleurs fixes possibles (16*16=256). +
-' DEGRADE QUELCONQUE +
-@set color(coi,2,8,i%) +
-Fabrication de dégradés aléatoires +
-Ce programme d’exemple affiche une série de dégradés choisie aa hasard. +
-Les couleurs constantes sont déterminées aléatoirémént avee la +
-fonction RANDOM. La composante KVB de la couleur de dégradé varie +
-de 1 à 15, et non de 0 à 15. Cela permer d'avoir roujours le fond de +
-l'écran en foir. +
-L'affich q des barres de couleurs est réalise une fois pour TOURS, Le +
-programmie alliche un nouveau dégradé en changeant uniquement I +
-palerte de couleut grâce à la fonction XBIOS(6). Lz rourine +
-Énew color ne modifie pas directement la palette de couleur coutanté, +
-mais agit sur une palette stochée dans la zone mémoire d'adresse +
-adrpal. Le programme affiche une nouvelle palette tant que +
-lutilisateur ne presse nas sur la touche [ESCI. +
-| E e e e e r e d iRt u E +
-' # AFFICHAGE DE DEGRADES * +
-S ALEATOTRES £ +
-LHFF L L R R R Lk SE +
-DIM col wdi%({16) +
-DIM degra%{lé) +
-adrpel==MALLOC{32) +
-Ginit couleurs vdi +
-Ginit degrade +
-Bcalcul degrade +
-Baff degrace +
-B0 +
-@calcut dégrade +
-PAUSE 18 +
-EXIT IF INP(Z}=27 +
-LOOE +
-VOID MFREE(adrpal#+
-EMD +
-PROCEDURE init_degrade +
-LOCAL % +
-RESTORE degrade +
-FOR 1=0 TO 15 +
-READ degra(i) +
-NEXT 1% +
-RETURN +
-+
-| hhh dc e e e e E RE +
-| # INIIIALISATION PALETTE * +
-! # COULEUR FOUR DEGRADE 7 +
-I = & e e e É o +
-PROCEDURE calcul degrade +
-LOCAL w%,bs,rs +
-LOCAL alea% +
-+
-v&=RANDOM (15) +
-b%=RANDOM(15) +
-ré=RANDOM(15) +
-älea%=RANDOM(3)+1 +
-enew color(0,0,0,0) +
-FOR j%=1 TO 15 +
-SELECT aleaw +
-CASE 1 +
-ATAZ| pAAGAZLINE BEST OF GFA BASIC +
-Énew color(i*,rs,v5,degra=(1}} +
-CASE 2 +
-ênew color(i*,r& degra%(i),b%) +
-CASE 3 ; +
-@new color(i%,degrat(i),v%,b%] +
-ENDSELECT +
-NEXT i% | +
-VOID XEI05{6,Ltadrpal=) +
-RETURN +
-E s o ol ol oy o e ol o ol o RR VR e E +
-* * AFFICHAGE DEGRADE * +
-I A d d A e d d d d d E E +
-PROCEDURE aff dégrade +
-LOCAL py%,i% - +
-pys=36 +
-FOR i%=0 TO 15 +
-DEFFILL 1% +
-PEOX C,py#,319 pytt7 +
-ADD pyé,f +
-NEXT i% +
-RETURN| +
-degrade: +
-DATA 0,8,1,9,2,10,3,11 +
-DÂTA 4,12,5,13,6,14,7,15 +
-DATA -1 +
-PROCEDURE new color(nes,r®,v®,b#+
-LOCAL mé,adré +
-mE=206+r vik*16*+b% +
-adré=adrpal%tcol wdi%(nck) *2 +
-WORD{ adrs | =m5 +
-RETURN +
-PROCEDURE init couleurwdsi +
-LOCAL i% — +
-RESTORE couleurs vdi +
-FOR 1%=0 TO 15 +
-READ col wdi(i%) +
-NEXT i% +
-RETURN +
-couleurs vdi: +
-DATA 0,15,1,2,4,6,3,5,+
-DATA-8,0,10,12,14,11,13 +
-Gestion des couleurs en GFA Basic 3.5E +
-Le GEA Basic 3.5F est une version du GFA Basic spécialement +
-adaptée au STE. L'instruction VSETCOLOR ne foncrionne pas de la +
-méme manière que les autres version du GH4 Basic. La séquence des +
-codes RVB à été modifiée. Les codes RVR STE sont maintenant dans +
-l'ordre. Pour afficher un dégradé de couleur, il suffit d'afficher les +
-composantes KVB de 0 à 15, +
-ek ke e e e e e ok R E RE +
-! * AFFICHAGE DEGRADE ROUGE * +
-L # AVEC GFA BASIC 3.5E * +
-I ke e ke e oy e i o o o A T T R ol o E +
-FOR i%=0 TO 15 +
-VSETCOLOR 1%,1%,0,0 +
-NEXT i% +
-pys=3b +
-FOR i%=0 TO 15 +
-DEFFILL 1% +
-PEOX O,py%,319, pyit] +
-ADD py#,8 +
-NEXT i% +
-VOID INP{Z) +
-END +
-Cet exemple ne fonctionnera qu'avec le Basic GEA 3.3E alors que +
-l'exemple précédent fonctionnera sur tous les GFA Basic de série 3x +
-[}r cümPr.'l!:_lL' GEA Rasic 3.3E), +
-Scrolling vertical +
-l’image affichée sur l'écran est la transcription du contenu d’une zone +
-mémoire Cette image est redessinée 50 fois par seconde. Le dessin +
-est fait par un point lumineux (appelé spot vidéo). Au nivéau intérne, +
-le circuit électronique d'affichage lit l'adresse de la mémoire +
-écran et affiche les données contenues dans cette zone mémoire sur +
-l'écran. Cette opération s'appelle un rafraichissement vidéo. +
-La fonction XBI05(5) du GFE4 Basic permet de changer l'adresse de +
-la mémoire vidéo. En modifiant certe adresse, on peut réaliser un +
-scrolling très mpide. La mémoiré écran dé la basse résolution est organisée +
-en ligné de 160 octers, Pour décaler l'écran d'une ligne, 11 suffir +
-donc de modifier Padresse de la mémoire vidéo de 160 octers. +
-Le STE permet de positionner la mémoire vidéo à n'importe quelle +
-adresse de l'écran, Cela permet de réaliser des scrollings très fins, Le +
-ST'E ne permet de positionner |a mémoire écran que sur des adresses +
-multiples de 256, C’est inutilisable pour un scrolling ligne par ligne +
-Instruction XBIOS(5) +
-L'instruction XBI0S(5) est une inseruction qui permet de changer +
-l'adresse des derans physiques et logiques ainsi que la résolution du +
-systèmé, Sa syntaxe est la suivante: +
-VOID XBIDS(5,L:log, L:phys, res) +
-log : adresse écran logique +
-phys : adresse écran physique +
-res : résolution écran +
-La résolution ne peut pas être changée en GEA Basic, car GEM ne recomnaît +
-pas le changement de résolution. Ce changement ne peut +
-Étre réalisé qu'avec des programmes entièrement TOS, alors que le +
-GEA Basic ne génère que des programmes GEM. Attention: uù programme +
-GEM avec uné extension . PRG ne devient pas un programme +
-TOS si son extension est renommée en . T05, +
-Uadresse de l’écran physique est l'adresse de la mémoire qui sera affichée +
-sur Pécran vidéo, alors que l'adresse de l’écran logique est 1'a- +
-ATARIMAGAZIME Mbtd BEST OF GRA BASIC +
-dresse de la zone mémoire où fonctiornneront les instructions graphiques +
-du GE4 Busic. Grâce à ce système d'écran physique et Josique, +
-le ST peur très bien allicher une image pendant qu'il est en +
-train d'en dessiner une autre en mémoire. 51 un paramétre ne doit +
-pas êÊtre modifié, 1l faut lui donner la valeur -L L‘exemple suivant +
-appelle l'instruction XB105(5) sans rien modifiër. Cela ne sert à +
-rien, mais c'est un exemple aussi valable qu'un autre. +
-VôID XBIDS{5,L:=1,L:-1,-1) +
-Attention: La modification de l'adresse de la mémoire vidéo n’est +
-pas immédiate. Le système d’affichage ne change l’adresse vidéo que +
-lorsqu’il recommence une phase d’affichage, Et il o'y à que cinquante +
-affichages par seconde Si un programme modifie plusieurs fois l'adresse +
-de la mémoire vidéo alors que le système est encore en train +
-d'afficher l'ancienne page vidéa, seule |a dernière modification sera +
-prise en compte: Pour éviter cela, 1l faut attendre un réaffichage +
-vidéo après chaque changement de mémoiré écran. L'instruction +
-VSYNC est la solution à cæ problème: elle blaque l'ecécution du programme +
-tant que l'affichage de l'Écran n'est pas fini. +
-VOID XBIOS{5,L:-1,L:adr ecr,-1) +
-VSYNC +
-Remarque: La svntaxe Lewar signifie que le programme doit transmettre +
-une valeur entière 32 bits à-la fonétion XETOS. 5i vous bubliéz +
-le symbole ‘L:", vous risquez de gros ennuis, voire même de béaux +
-plantages. +
-Scrolling vertical pixel par pixel d'une image +
-Voici un exemple de réalisarion pratique du scrolling vertical par modification +
-de la mémoire écran. Le programme éréé une zone de travail +
-de 64000 octets. Cette zone est divisée cn deux zones mémoire +
-de 32000 octers. Chacune de ces deux zones mémoire a la raille d’une +
-zone étran. Lors de Pinitialisation, le programme charge une image +
-au format Depes Elite dans chaque zone mémoire, Il déclare ensus +
-te l’adresse travail commé nouvelle mémoire écran. L'image IMGI apparalt +
-immédiatement à l'écran puisqu’elle se trouve maintenant +
-dans la mémoire écran. Le programme déplace verticalement l’écran +
-d'uné ligne en incrémentant Padresse de la mémoire vidéo de 160 oetets. +
-L'utilisateur à l'impression que l’image est montée d'un pixel et +
-qu’une nouvelle ligne et apparue en bas de l'écran. Certe nouvelle +
-ligne est la première ligne de l'image IMG2 En répétant 200 fois cette +
-apération, on va voir l’image IMGI disparaître vers le haut de l'écran +
-et l'image [MG2 va apparaître à partir du bas de l'écran. Une fois la +
-première bouclé términée, la mémoire écran se trouve alors à l'adresse +
-travail+32000, c'est-à-ire à l'adresse de l'image IMG2 Timage IMG1 +
-à complétemenit disparu de l'écran. Pour inverser le processus et revepir +
-à l'image TMG1, 1l faut modifier à nouveau l'adresse de la mémoire +
-vidén. La séconde partie du programme effectue un nouveau scrolling +
-en décrémentant la mémoire vidéo par tranche de 160 octets. La +
-mémoire vidéo revient à son ancienne valeur, Le spectateur voir l'image +
-IMGZ disparaître vers lé bas et l'image IMG1 apparaître à partir +
-du haut de l'écran. +
-[ T E E V P L CT E E e S +
-4 SCROLLING = +
-# LIGNE FAK LIGNE * +
-| eh e e o e o o o o é d E +
-RESERVE 100000 +
-travail%=MALLOC (64000) +
-adri=travail% +
-@load degas("IMGL.PI1",adr%) +
-adr&=travail=#+32000 +
-Bload degas("IMG2.PI1",adr#+
-! flflngÿ**tt*à*%****j*#tt**ikt +
-| * SCROLLING VERS LE BAS * +
-LFRR E = NRR A RE +
-adriketrava1i% +
-VOID XBIDS(S,L:-1,L:adr%,-1) +
-VOID INP(2) +
-FOR i%=1 TO 200 +
-ADD adrs, 160 +
-VOID XEI05(5,L:-1,Lzadr&,-1) +
-VSYNC +
-NEXT 1% +
-VOID INP(2) +
-| dh dh e é E e o e o S e e e E C E +
-! # SCROLLING VERS LE HAUT “ +
-I RXERRRRRERNRN ARÉa ÉÉN R +
-FOR i%=1 TO 200 +
-SUE adr#,160 +
-VOID XBIOS(5,L:-1,L:adr¥,-1) +
-VSYNC +
-NEXT 1% +
-VOID MFREE(travail# +
-END | +
-I Rk d d d SE SE RE +
-! # CHARGEMENT IMAGE * +
-' # DEGAS ELITE A UME * +
-' * ADRESSE MEMCIRE % +
-| * QUELCONQUE. bj +
-l HEF RNEE +
-PROCEDURE load degas(noms , adr“) +
-LOCAL pal5 +
-pal$=SPACES (37) +
-OPEN "i",#1 ,nom$ +
-BGFT #1,VARPTR(pals),?+
-BGET #1,VARPTR(pal$) , 32 +
-VOID XBIOS(6,L:VARPTR(pal$}} —- +
-BGET #1,adr%, 32000 | +
-CLOSE #1 +
-RETURH +
-Artention: aprés l'exécution de cé programme, la mémoire écran +
-n'est plus à sa valeur initiale, [ faut la réinitialiser pour continuer à +
-travailler normalement. La solution la plus prarique est de sauver l'a- +
-ATAR| MAGAZINE fl BESTOF GRA BASIC +
-| dresse de |a mémoire écran au début du programme afin de la restaurer +
-plus tard. +
-adr video%=XBI05(2} +
-Utilisation d'un écran virtuel +
-La technique que nous venons de voir est classique, mais peu facile à +
-sérer. En examinant la sicuation avec un angle de vision mouns +
-«téchMiques, mals le n:pmt]'qu:-n, on découvre une autre methode, +
-plus simple à utiliser. +
-La zone mémoiré de 64000 octers constitue un Ééran virtuel ‘de +
-320*400 pixels, La mémoire écran est une fenêtre de 320*200 pixels +
-qui peut Être positionnée à n'importe quelle adresse mémoire grâce à +
-la fonction XBI05(5). On peut réliser une fonction Bset ligne +
-qui positionne la fenêtre de visualisation sur n'importe qbelle hgne +
-de l'écran virtuel, Certe nouvelle fonction caleule l’adresse de la fen£- +
-tre de visualisation en multipliane le numèro de la ligne | par 160 +
-(nombre d'octets par ligne en basse résolution), La lonetion +
-XBIOS(5) modifie l'adresse de la mémoire vidéo par l'adresse de la +
-fenêtre de visualisation. Attention: l'adresse de l’écran virtuel doir +
-être stockée dans la variable travail. +
-PROCFDURE set ligne(1%)} +
-LOCAL adrw +
-adr&=travail#+(15"160) +
-VOID XBIOS(S,L:-1,L:adr%,-1) +
-YSYNC +
-RETLRN +
-En déplagant la fenêtre de visualisation sur l'écran virtuel, on réalise +
-un scrolling. L'ecemplé suivant vous montre la grande simplicité +
-d'urilisation de cetté technique, +
-FOR Tigne%=0 TO 200 +
-êset ligne(lignes) +
-NEXT ligne% +
-+
-Pour réaliser un scrolling vers le hawr, il suffit de déplacer la fenérre +
-de visualisation dans le sens inrerne. +
-FOR ligne%=200 TO Q STEP -1 +
-@set ligne(liqnes) +
-NEXT lignes +
-L'exemple suivant réalise un Eümflillg haut et bas entre Z imagés. - +
-RESERVE 100000 +
-ravai 1&=MALLOC{64000) +
-adr*travail* +
-@load degas(“IMG1.PI1",adr$) +
-ATAR] MAGALINE +
-adri=travails+32000 +
-@load degas("IMGZ.PIL",adr%) +
-adr®=travai 1 +
-Bset ligne(0) +
-VOID IWP(2) - +
-FOR i%=0 TD 200 +
-Bset ligne(i) +
-NEXT 1% +
-VOID INF(2) +
-FOR i%=200 TQ D STEP -1 +
-Gset ligne(1%) +
-MEXT 1% +
-VOID MFREE(travaiT#+
-END +
-Cette techrique peut être utilisée sur des écrans virtuels de n'importc +
-quelle taille Rien ne vous empêche d'utiliser un écran virtuel de +
-320*2000 pixels {prenant 320 Ko de mémoire). +
-Avec une machine équipée de 4 Mo, on peut créer un écran virtuel +
-d'au moins 320x20 000 pixels (3,2 Mo). Avec un STE équipé de 2 +
-Mo de mémoire, nous avons réalisé un serolling vertical sur un écran +
-virtuel de 320x10000 pixels occupant 1,6 Mégas octers de mémoire. +
-Ce programme a été chargé par 50 images Degas Elste. Clest amusant, +
-même si cela ne présente pas béaucoup d'intérêt pratique. +
-Amélioration de la vitesse de scrolling +
-Le scrolling pixel par pixel &st béau, mais un peu lent. Il est possible +
-de l'améliorer en déplagant l’écran de plusieurs lignes à la fois. Avec +
-un déplacement de deux lignes à la fois, on augmente la vitesse de +
-scrolling d'un facteur de 2. Avec un déplacement de quatre lignes, +
-on augmente encore là vitesse de scrolling d'un facteur de 2, ete. La +
-qualiré visuelle du scrolling n'est pas altérde tant que le pas d'incrétmentation +
-est Inferieur à 10 +
-FOR 1igne%=0 TO 200 STEP 2 +
-@set ligne(ligne*) +
-NEXT ligne% +
-FOR 1ignex=200 TO 0 STEP -2 +
-üset ligne(lignes) +
-NEXT ligne% +
-Bug des boucles FOR-NEXT +
-Il ¥ à un problème dans les boucles FOR-NEXT avec certaines valeurs +
-d'incrémentation. Cé problème esé du au traitement de l'indice de +
-boucle, Avec une boucle simple, la vartable 1 prendra successivement +
-toutes les valeurs éntières possibles entre O er 200, +
-FOR 1%=0 TO 200 +
-PRINT 15 +
-BEST GF GFA BASIC +
-NEXT 15 +
-Âvec un pas d'incrémentation de 2, on obriendra les valeurs-0, Z, 4, +
-… 198, 200, : +
-FOR 1%=0 TO 200 STEP 2 +
-PRINT 1% +
-NEXT 1# +
-Par contre, la même boucle avec un pas d'incrémentation de 3 donnera +
-un résultät curieux: la variable 1% s'arrêcera à la valeur 158. Ce +
-la vient de la téchnique utilisée par le GEA Basic pour gérer les boucles +
-FOR-NEXT, Lorsque le programme incrémente la variable compteur +
-de la boucle, il teste si le résultat est supérieur ou égal à la valeur +
-de sortie de boucle Si ce test est posinf, 1l sort immédiaterment de la +
-boucle. Dans notre exemple, la variable de boucle est la variable 1%, +
-Lorsque celle-cr vaut 198, le programme l'incrémente de 3. Il téste +
-ensuite le résultat (198+3=201). Comme ce résulrar est supéricur à la +
-valeur maximale, il sore de la boucle. +
-FOR 1%=0 TO 200 STEP 3 +
-PRINT 1% +
-NEZT 1% +
-Le même pËJEL:U[:]Ê:nl: sé r-::'pl'ülil.lit avec la valeur 6, car c'est un multiple +
-de 3, ainst qu’avéc la valeur 7. Clest encore plus drôle avec 7, +
-car la valeur de sortie de 12 houcle est alors 196, ; +
-Si vous utilisez un pas d'incrémentation de boucle erroné, le scrolling +
-vértical ne se fera pas sur la totalité de votre écran virtuel, Pour +
-éviter céla, on peur éviter |es pas d'incrémentation dangereux ou encore +
-pesitionner systématiquement la féenêtre de visualisation à sa +
-position théorique de fin de scrotling. +
-FOR 1=0 TO 200 STEP 3 +
-@set ligne(l%) +
-NEXT 1% +
-Bset 1igne{Z00) +
-Pour éviter un affichage supplémentaire, le programme peut faire un +
-test sur la valeur de sortie de la boucle. Cela permet d'uriliser r'importe +
-quel pas de scrolling sans risque, Dans l’exemple suivant, la valeur +
-d'incrémentation de scrolling est stockée dans la variable pas. +
-FOR 1=0 TO 200 STEP pas# +
-êset ligne[l#] +
-NEXT 1% +
-IF 1%==200 +
-Gcet Tigne(200) +
-ENDIF +
-Remarque: Les problémes posés par des pas d'incrémentation positifs +
-se retrouvent aussi avéc des pas d'incrémentcation négatits, Une +
-boucle FOR-NEXT allant de 200 à O avec'un pas de -3 finira avec la +
-väleur 2, ec la même boucle avec un pas de 7 finira avec la valeur 4. +
-Scrolling en haute résolution +
-Les rechniques de scrolling vertical que nous venons de veir sont va- +
-ATARI MAGALZINE +
-lables pour la basse ec moyenne résolution, puisque ces deux résolutions +
-utilisent des lignes de 160 octets. Le cas de la haute resolution +
-est différent car ce mode graphique utilise 400 lignes de 80 octers. Il +
-faut alors modifier la routine @set Tigne_hr — +
-FOR 1%=0 TO 400 +
-@set Tigne hr{1%) +
-NEXT 1% +
-FOR 1%=400 TO O STEP -1 +
-éset ligne hr(15) +
-MEXT |4 +
-PROCEDURE set_ligne hr(1%) +
-LOCAL adr% +
-adr&travail#+(1%#86) +
-VOID XBI0S(5,L:-1,L:adr*,-11] +
-V5YNC +
-RETURN +
-Le scrolling en haute résolution est deux fois plus lent que le scrolling +
-en basse ou moyenne résolution, car 1l y a deux fois plus de +
-lignes à déplacer. Cependaite, rien ne vous empêche d'eccélèrer la viresse +
-comme nous l'avons fait plus haut. +
-Scrolling circulaire d'une image +
-Voici un exemple qui affiche une image scrollant sur elle-même. +
-Clest trés spectaculaire, mais facilé à programmer. Le programme +
-utilise un écran wirtuel de 320%400 pixels (64 000 octers). L'image est +
-chargée en mémoire à partir de la ligne Q et de la ligne 200. Elle est +
-done présente deux endroits de la mémoire. Le programme réalise +
-un scrolling vertical entre la ligne © er la ligne 200, Une fois ce scrolling +
-terminé, il repositionne la fénêtre de visualisation sur la ligne 2 +
-et recommence le cycle. À cout moment, il visualise sur l’écran une +
-partie de la première image ec une partie de la seconde image. Clest +
-le mélenge de ces deux images identiques qui donne une impression +
-Les imagc—s sont ûhargfil.:ä aux acresses mémoires adrl et adr& Atten-. +
-tiot: la routine @set lîgne calcule une adresse de ligne à partir de +
-l'adresse adrl er non Lravail comme dans les exemplés précédents. +
-| *x+xEttttédebaEae eS +
-s% SCROLLING CIRCULATIRE * +
-s D' UNE IMAGE 3 +
-i -.l:-.l.-:l.-:l:É*****##fi#kfi!ïü'ü"ü'ki“##ï +
-+
-RESERVE 100000 +
-adr1&=MAL10C(54000) +
-adré*=adr14+32000 +
-@load degas(“IMG1 .PI1",adr1%) +
-Ëload degas(“IMG1 .PI1l",acr&+
-Gset ligne(0} +
-VOTE TNP{2) +
-BEST OF GRA RASIC +
-I-"'I-II'-EIE.“"- zhl +
-Qi +
-FOR i%=0 TD 200 +
-Üset ligne(i*) +
-NEXT i% +
-LOUF +
-VOID MFREE(adr1%) +
-END +
-+
-L e B R R R +
-"% FIXATION LIGNE. * +
-" # ECRAN VIRTUEL * +
-L d E E E S +
-PROCEDURE <et ligne(!#) +
-LOCAL adrs +
-adr&=adr15+(15*160) +
-VOID XB10545,L=-1,L:adr&,-1) +
-VSYNC +
-RÉTURN +
-Ce programme n'a pas de condition d'arrêt, Si vous voulez lutiliser +
-de maniére compilée, il faut prévoir une condition d'arrëe (test avec +
-ling en inversant le sens de la boucle FOR=NEXT. +
-FOR 1%=200 TO Ü STEF -1 +
-Bset Tigne(i%) +
-“ NEXT 1 +
-Comme dans les exemples précédents, 11 est posaible d'augmenter la +
-vitesse de scrolling en augmentant le pas d'incrémentation entre +
-chaque ligne. +
-Scrolling vertical commandé par la souris +
-Le programme survant deplace une fenêtre de visualisation sur un +
-écran virtuel de 32Cx400 pixels. La position de la fenêtre de visualisation +
-est commandee par la souris. Une boucle DO-LOOP permet de +
-gérer les événements souris. Le propramme ne sort de cette boucle +
-que si la position Ÿ de [ souris varie, où si l'utilisatéur clique sur un +
-bouton souris (condition de sortie du programme). ¥ +
-Le résultat est spectaculaire: le scrolling suit tous les mouvements de ‘ +
-la souns. Un déplacement lent provoque un scrolling lent ec un +
-déplacement rapide modifie très rapidement l'écran. ' +
-DVSF e B e e g e b e e e +
-ï +
-1.8 . SCROLLING VERTICAL * +
-: * COMMANDE PAR LA SOURIS * +
-| HRE R VNN e e +
-RESERVE 100000 +
-old ecr=XBIOS(Z) +
-travails=MALLOC(64000) +
-+
-HIDEMR +
-adrS=travail= +
-Bload degas("IMG1 .PI1",adr®) +
-ATARI MAGAZIME +
-adr&=travail3+32000 +
-@load degas("IMGE.PI1",adr®) +
-MOUSE xmês, ymdés, ki +
-Bset | ignélym0r) +
-0 ; +
-D . +
-MOUSE xmes, yrrée, k' +
-EXIT TF yme=ym0s +
-EXIT IF kEmée=i +
-LODP +
-EXIT IF kmw=0 +
-ymOEs =y +
-Bset ligne(ymé) +
-LODF +
-VOID :ÆE!.I-DS{E.L:-_l,i.:nld_e:r%,-l] +
-SHOWM +
-VOID MFREF(travail%) +
-END +
-E.Emàrqug: La position Ÿ de la souris varie engre 0 et 199 alors que la +
-nosicion d'affichage de l'écran virtuel varie entre 0 et 200, La der +
-nièré ligne de la seconde image n'est donc jamais affichée sur l'écran. +
-Scrolling vertical sur un grand écran +
-On peut réaliser un scrolling sur-un écran de grandé dimension en +
-f:;.hriqu ant l'écran au fur et à mesure de Ï"::lffir_'h.‘lgù. L'écran peut Ëtre +
-construit avec des éléments graphiques de 16x16 pixels. +
-L'écran virtuel est consuitué d'une série de lignes de blocs de 16x16 +
-pisels. IL y a 320/16 blocs par lipne, c'est-à-dire vinat blocs par +
-ligne, Tes éléments graphiques de base peuvent êÊtre stockes dans un +
-tableau-alphanñumerique et athches avec l'instrauction PUT. +
-UIM dessin$(300) +
-DIM ecrant(4000,#0} | +
-Ce système permet de creer un grand écran ne prenant que peu de +
-place. L'écran basse résolution est de 320x200 pixcls, Il peur être dessiné +
-avec 20"10 éléments graphiques de base 51 le nombre +
-d'éléments graphiques ne dépasse pas 255, l’écran peur être defimi +
-avec des entiers courts & bits. La définition d'un écran prend alors +
-20"10 octets, soit 200 octets. En stockant l'espacé virtuel dans ur tableau +
-de 4000 lignes, on peut coder 200 écrans pour une taille de +
-30000 octets [4000 lignes de20 octets). En comparant la place +
-mémoire prise par 200 écrans avec les 80 000 ocrets du tableau écran, +
-on arrive à un rapport de 80, Pour faire un caléul exact, 1l faut venir +
-compte de la place mémoire prise par les éléménts graphiques. Un +
-élément de 16*16 pixels stocké dans une vartable alphanumérique +
-prend 134 octérs. Les 256 éléments (de D à 255) occupent 34304 c +
-tets, Le rapport est done de 200*32000/(80000+34304), soit 56. +
-GET 1,1,16,16,vras +
-PRINT LEN(vär$) +
-La plupart des jeux d'arcades à scrolling vertical utilisent ur systeme +
-similaire à colui-ci pour créer leurs décors de jeux. +
-BEST OF GFA BASIC +
-GRAPHISME STE EN GFA BASIC +
-SCROLLING +
-HORIZONTA +
-Faites danser votre écran +
-Nous avons vu comment gérer les 4096 couleurs du STE et +
-comment réaliser des scrollings verticaux. Cet article porte +
-sur le scrolling horizontal. +
-Scrolling horizontal +
-An point de vue du spectateur, un scrolling correspond au déplacement +
-d’une fenêtre de visualisation sur une image plus grande que +
-l'écran. I existe plusieurs techniques de programmation de scrolling, +
-Le système d'affichage du STE peut pérer facilement des scrollings +
-verticaux ét horizontaux, +
-On peut réaliser un scrolling vertical en faisan: varier l’adresse de la +
-mémoire widéo. La fonction X810S(5) permet de changer Padresse +
-de la mémoire écran à l’octet prèsErant donné qu’une ligne fair 160 +
-octéts en basse résolution, 1l suffit done de modifier l’adresse de la +
-memoire vidéo de 160 octets pour décaler l'écran d’une ligne. +
-Structure de la mémoire écran STE +
-La mémoire vidéo basse résolution d'un STF est organisé de fmanière +
-linéaire. Elle est coñsticuée de 200 lignes de 160 octets pour une talle +
-totale de 32000 octets, Les lignes sont stockées les unes après les +
-autres. +
-ligne 1 (1460 actets) +
-ligne 2 (160 octets} +
-ligne 3 (1560 octets) +
-ligne 4 (160 octets) +
-MEMOIRE VIDEO STF +
-200 LIGMES DE 160 OCTETS +
-La mémoire vidéo STE est organisée de la même mamère que la +
-mémoire écran STE, c'est-à-dire en ]iE_'.rtr. de 160 octers. Par contre, 1l +
-peut y avoir un décalage encre chaque ligne de l'écran. +
-MEMOIRE VIDEO 5TE +
-200 LIGNES DE 160 OCTETS +
-Le système d’affichage doit être averti de la valeur du décalage séparaut +
-chaque ligne afin de réaliser un affichage correct. I ne doit lire +
-que les lignes appartenant à l’écran. Ce décalage s’appelle: offset de liene. +
-Le système d'affichage lit une ligne d'écran en tenantt compte +
-de I'offset de ligne pour calculer l'adresse de la ligne suivante, +
-La variable système d'adresse EHFF8Z0F contient la valeur de l'offser +
-de ligne, Elle est mesurée en mots (1 mot = 2 octets). Si elle contient +
-la valeur O, il n°y à pas d'espace entre les lignes. La struerure de la +
-mémoire vidéo esc alors similaire à la mémoire vidéo du STE Clest +
-le cas le plus courant. Linstruction SPOKE permet de modifier le +
-contenu de la variable sysrème BHFF&20F. +
-SPOKE &HFFZe0F,+
-Effet graphique nmusufif +
-Lorsque vous modifiez la valeur de l'offser de ligne, la mémouire +
-écran doit avoir une strocture tenant compte de cet offset. 51 ce n'ést +
-pas le cas, l'effet est asez amusant. Avec vine valeur différente de 0, le +
-contrôleut vidéo saute des espaces entre chaque higne. 51 l‘écran est +
-ordinaire, le contrôleur vidéo affiché sous forme graphique le contenu +
-de la mémoire situé après la zone mémoire vidéo. +
-Si vous voulez la voir, taper SPOKE BHFFS20F ,80. Le résultat cst garanti, +
-surtout avec le bureau GEM. Les barres de l'Écran qui bougent +
-sans cesse correspondent aux zones système du ST qui sont cont+ +
-nuellement modifiées par le système d'exploitation, Pour annuler cet +
-effer vidéo, taper en aveugle SPOÉKE &HFFG20F,0. +
-Scrolling horizontal +
-Pour réaliser un scrolling horizontal, on peur déplacer une fenêtre +
-de visualisation sur un écran virtuel. D'écran doit être généré par le +
-programme, La fenêtre de visualisation est l'écran du ST. On modifie +
-le contenu de l'écran en changeant son adresse mémoire grâce aux +
-fonctions spécialisées du STE. +
-ECRAN VIRTUEL +
-ECRAN PHYSIQUE: +
-FEMETRE SUR +
-ECRAN VIRTUEL +
-ATARI MAGAZIME m BEST OF GhRa BASIC +
-À chaque position de la fenêtre de visualisation correspond une +
-adresse pour la mémoire vidéo. Pour déplacer la postion de la +
-fenêtre, il suffit donc de changer une adresse. +
-Le ST ne tient compte du changement d'adresse vidéo qu'après avoir +
-affiché l'image courante (4 la vitesse de cinquante images par secondes). +
-5t le programme Ehfl:l'.lgl: l'adresse vidéo Ph:s mpidem ent, seule la derniere +
-modification sera prise en compré. +
-Pour éviter cela, après chaque changement d'adresse, 1l faut bloquer +
-l'exécution du programme tant que le 5T n'a pas attiche l'imagc: SO +
-rante, C'est la tâche de l'insteruction VSYNC. +
-XB10S(5) 1 Changement adressé mémoire vidéo +
-VSYNC | Attente fin affichage image courante +
-Puisque le ST affiche cinquante images par seconde, la vitesse. de +
-scrolling ne peut pas dépasser cinquante décalages à la seconde. Ceci +
-dit, chaque décalage peur correspondre à autant de pixels que vous le +
-+
-Scrolling horizontal +
-16 pixels par 16 pixels +
-La structure de l'écran ST en basse résolution est telle que les pixels +
-sont stockes par groupe de 16 dans des blocs de 8 octets, Cette struerure +
-particuliere est liée au système de codage des pixels par plan de +
-couleurs. On peut réaliser un scrolling horizontal sur un écran virtuel +
-en faisant simultanément varter l'adresse de l'écran et l'offser in- +
-; térligne. Etant donné que le codage interne des pixels se fait par +
-blocs de 16 pixels (8 octets), le scrolling ne peut se faire que par +
-blocs de 16 pixels, +
-L'écran virtuel fair 64000 octets. L'offser de ligne est de 160 octets, +
-done de quatre-vingt mots, L'adresse de l'écran est modifiée avec la +
-fonction XBI0S(5). Pour réaliser un scrolling horizontal vers la +
-droite, il Faut déplacer l’adresse de Pécran logique de 8 neters à la fois, +
-Chaque déplacement dé & octéts correspond à un déplacement visuel +
-de 16 prxels. +
-adr pic*=MALLOC(64000) +
-SPOKE &HFF820F,80 +
-FOR bloc%=0 TQ 19 +
-adr&=adr pic%+block™8 +
-VOID XBIOS(5,L:-1,L:adr%,-1) +
-CVSYNC +
-NEXT bloc® +
-SPOKE 8HFF820F,+
-VOID MFREE(adr pic*) +
-END +
-Ce programme est incormplét. Il s’agit juste d'un exemple montrant +
-la téchnique de base de scrolling. L'écran virtuel est vide, Tl faut le +
-remplir avec une image qu:]r.ünqu: pour réaliser une véritable +
-démonstration. +
-Si vous voulez réaliser un programme complet, inspirez-vous du programime +
-survant. +
-ATARI MAGAZIME +
-Scrolling horizontal pixel par pixel +
-Pout réaliser un scrolling horizontal pixel par pixel, il faut positionner +
-l’écran physique par mpport à l'écran virtuel à 1 pixel prés. La +
-variable système d'adresse 8HFFB265 permer d'y arriver. +
-Elle contient une valeur que l'on appelle l’affeet de pixel, +
-T_,.:.rfiqm: le mntr-fi!:ur Tifléfl Ëlflflä'l:fi nne 1i.g|:‘!|E S I'E'I'-::.I:'.‘:'m., '|.| COTIIITICMce +
-par lire le bloc mémoire correspondant aux seize premiers pixels +
-de la ligne. L'offset de pixe! permet de préciser auquel de ces 16 pixels +
-doit commencer l'affichage, Avce un offést de pécel de 0, l'affichage +
-comménce au premier pixel du bloc. Clest le mode normal d'affichage +
-(le seul permis par le STF). +
-Pour réaliser un déplacement de pixel, 1l suffit de modirfier la valeur +
-de la variable &HFF8265. L'ecemple suivant réalise un scrolhng pixel +
-par pixel sur une longueur de 16 pixels, +
-FOR offset pixel%=0 T0 15 +
-VSYNÉ +
-SPOKE &nFF8265,offset pixels +
-NEXT offset pixel% +
-Si vous utilisez ce programme sur un écran noemal, le résultat risque +
-d’être surprenant. Pour obtenir un scrolling correct, il faut créer un +
-&space virmuel dont la largueur est supérieure à celle de Pécran. +
-L'exemple suivant utilise un écran virtuel de 336 pixels de large. Sa +
-largueur éti octers est de 168 octers. L'oifrer de figne est de E ocrers, +
-donc de quatre mots. +
-La taille ce l'écran virtuel est de 200x168 octers = 33600 octéts. +
-DUFN ettt RRN EÉ E N +
-! # SCROLLING HORIZONTAL * +
-* # SUR 16 PIXELS 1y +
-D et b T e DL o ke +
-adr_pick=MALLOC{33600) +
-VOID XBIOS(5,L:-1,L:adr pic%k,-1) +
-VSYNC +
-SPOKE AHFF8265,+
-FOR offset pixel%=0 T0 15 +
-VSYNC +
-SPOKE EhFF8265,offset pixél% +
-NEXT offset pixels +
-VOID MFREE(adr pick) +
-END +
-Si vous exécurez ce programme, vous constaterez qu'il ne fonctionne +
-pas. La raison est que l’affset de figne est variable. Lorsque l'aifsst de +
-pixel vaut 0, l'affset de figne est correet. Par contre, lorsque offset de +
-pixel est différent de 0, le contrbleur vidéo doit lire les prxels restants +
-dans le bloc de 16 pixels suivants. La valeur de l'offet vidéo doit +
-alors diminuer de la taille d’un bloc de 16 pixels, c'est-à-dire de 8 octets +
-(quatre mots). +
-Voici une version corigée du programme d'exemple. Lorsque l’affser +
-de pixel est égal à O, l'affset de ligre vaut 4. Lorsque l'affset de pixel est +
-différent de 0, l’offrez de ligne vaut 0. Le programme de scrolling ho- +
-BESTOFGFA BASIC +
-rizontal publié dans Atari Magazine N°6 donnait un scrolling saccadé +
-car l'offéer de ligne n'étant pas modifié lorsqu'il était égal à C. +
-L d i e e d e d o é d o e e o o ol +
-! # SCROLLING HORIZONTAL * +
-! * NON SACCADE A +
-' * SUR 16 PIXELS ¥ +
-| RHN É RE RR RR EEE +
-adr_pit%=HñLLÜÈË335üÜ] +
-VOID XBIOS(5,L:-1,L:adr_pick,-1) +
-VSYNC +
-SPOKE &HFF8265,+
-FOR offset pixel%=0 TO 15 +
-VSYNC +
-SPOKE EhFF8265 offset pixel +
-IF offset pixel%=0 +
-SPOKE &HFF8265,+
-ELSE +
-SPOKE AHFF8265,+
-ENDIF +
-NEXT offset pixel® +
-VOID MFREE(adr_pic*) +
-END +
-Attention: dans ce programime, l'offret de ligne vaut C si l’offser de poxel +
-est différent de 0. Clest un cas particulier qui n'est valable que +
-dans cet exemple simple. 11 ne faur pas oublier que si l'affset de pixel +
-=t différent de O, l'offéer de ligne est égal à l’offser de ligne théorique +
-moins 4 (dans l'exemple 4-4=0). _ _ +
-Si vous travaillez sur un écran virtuel constitué de deux écrans mis +
-bout à bout (160 octetsx2~320 octets, donc 160 mots), l’offset de +
-ligne vaut 80 si l'offret de ligne est égal à D er 76 (8C4) dans le cas +
-contraire, +
-Exemple de scrolling horizontal +
-pixel à pixel +
-Voici un programme de démonstration qui effectue un serolling horizontal +
-entre deux images Depas Efire. Ce scrolling est réalisé en +
-déplaçant une fenêtre sur un écran virtuel. L'écran virtuel est consritué +
-de deux images Degas Elite mises bout à bout, 5a taille est de +
-64000 octets (2x32000 octets). +
-IMAGE ! IMAGE 2 +
-Le scrolling est réalisé en déplaçant une fenêtre sur l’écran virtuel, +
-Pour positionner l'écran physique à une position quelconque de +
-l'écran virtuel, il faut calculer l’adresse du bloc de 16 pixels correspondant +
-À certe position, la valeur de l'affser de pixel et la valeur de +
-l’offier de ligne. +
-pffsét pixel%=px% MOD 16 +
-adrfiphy5%=fldrdpic%+{px% DIV 16)*8 +
-IF offset pixel%=0 +
-offset lignes=80 +
-ELSE +
-offset ligne*=-76 +
-ENDIF +
-Le numéro du bloc est obtenu en divisant la position d'affichage par +
-16. Comme un bloc correspond à 8 écters, on multiplie ensurte le +
-numéro de bloc par 8 afin d'avoir l'adresse du bloc. +
-adr_block=(px% DIV 16)*8 +
-Cette adresse t relative à la zone mémoire contenant l'image. Pour +
-obtenir une adresse absolue, il faut y additionner l'adresse de la zone +
-mémoire, +
-adr_block=adr_img%+(px%s DIV 16)*8 +
-La valeur de l'offiet de pixel est calculé avec la fonction MODULO. +
-offset pixel%-px% MOD 16 +
-La valeur de l'affrer de figne vaut 80 51 l'afféer de pixel est égal à D et 76 +
-(80-4) si l'afféer de prixel est différent de 0. +
-La procédure Éposition fenetre(px) calcule aumnmfiquemer_l: les +
-paramiètres de la fenètre correspondant à la pasition px, Une {ülîllü +
-paramètres dérerminés, elle positionne l'écran physique à la position +
-correspondant à la position px. Une fois la procédure @position +
-fenetre créée, les routines de scrolling sont particulièrement +
-slmpÈr. à realiser. Pour scroller une image vers la gauche, il suffic de +
-positionner la fenêtre sur la position O de l'écran virtuel er de déplar +
-cer cétté position vers la gauche d’un pixel à la fois. +
-@position fenetre(0) +
-FOR px%=0 TO 320 +
-éposition fenetre(px#+
-NEXT px% +
-Pour réliser un scrolling vers la droite, il faut positionner la fenêtre +
-au bout de l'écran virtuel {pr=320) et déplacer la fenéere vers le bord +
-gauche (px=0). +
-fposition fenetre(0) +
-FOR px*-320 TO D STEP -l +
-@position fenetre(px*) +
-NEXT px% +
-Le programme stocke deux images Degas Elite en mémoire et realise +
-un scrolling allant d’une image à une autre. Les images sont chargéés +
-dans la mémoite écran initizle, puis recopiées dans l'écran virtuel en +
-tenant compte de sa structure parriculière (160 ocrets de l'image 1 +
-suivis de 160 octets de l'image 2, etc.) +
-| RRRTERRÉRR RRN ETE ÉÉ RR +
-! # SCROLLING HORIZONTAL * +
-D e e AR TR PR AR T T e e L R R ok +
-ATAR| MAGAZIME E BEST OF GFA BASIC +
-RESERVE 100007 +
-HIDEM +
-adr_pict-MALLOC(64000) +
-adr sauve%=XEI05(2) +
-i A dr r rrr é d e é d drrec de dr de d d k 0 0 0 E E E E E +
-' * CHARGEMENT PREMIERE IMAGE * +
-D 1 1U 64 A A U o A RU E E E R E E e e e o R RR RS +
-@load degas{"IMAGEL.PI1®,XB10S(2)) +
-adr ecrans=XBI05(2) +
-adr memoires=adr _ pic# +
-FOR 1%=0 TO 199 +
-EMOVE adr ecrans,adr mémoires, 160 +
-ADD adr ecrans, 160 +
-ADD adr memoires,320 +
-MEXT 1% +
-BMc d d e d d é e e e e e smE A TR +
-* # CHARGEMENT SECONDE IMAGE * +
-I E d d d A 0 e e A E A e e e e e e e x +
-Bload degas("IMAGEZ.PI1",XBIOS(2}) +
-adr ecran¥=XB105(2) +
-adr memoire*=adr pic#+1b0 +
-FOR 1%=0 TO 199 +
-BMOVE adr ecran%,adr memoire= 160 +
-ADD adr ecrans,l60 +
-ADD adr memoire*, 320 +
-MEXT 1% +
-CLS +
-PRINT "Pressez une touche pour +
-PRINT "Commencer la démonstration” +
-VOID INP(2) +
-+
-I *******tfl*itwwwt*ttt*t%**#:t*ü +
-| * SCROLLING VFRS LA DROITE * +
-| AARERRAE ERERN RAA RER +
-FOR px&=0 TO 320 +
-@position fenetre(px%) +
-NEXT px% +
-ï +
-L E r d e 00 E E bl e e e d e ok ok o ok d d d d +
-! * SCROLLING VERS LA GAUCHE #* +
-1 ph d é e d e d R e d e e ek e E d +
-FOR px%=320 TO O +
-Gposition fenetre(px%) +
-NEXT px +
-VOID INP{2) +
-| RR RN uRE ÉÉ A AN A E AN N AR RERR +
-' * REMISE ECRAN DANS ETAT INITIAL +
-| HFh EEeéEE A RE e E +
-SPOKE LHFF8265,+
-SPOKE EBHFFB20F,+
-VOID XBIOS{5,L:—1,L:adr sauve#,-1) +
-VS5YNC +
-VOID MFREE(adr pick) +
-SHOWM +
-EN +
-E OE E I e RP E E TIR +
-' * AFFICHAGE DE LA FENETRE ECRAN * +
-l RE ÉN A E RE R AN A IERE +
-PROCEDURE position fenetre(px%) +
-LOCAL offset pixel% +
-LOCAL adr physs +
-LOCAL offset ligne# +
-offsét pixel&px& MOD 16 +
-adr_phys%=adr_pici+(px% DIV, 16)*8 +
-IF offset pixels=0 +
-“ offset lignes=80 +
-ELSE +
-offset ligne=76 +
-ENDIF +
-VOID XBI0S(5,L:=1,L:adr phys%,-1) +
-VSYNC +
-SPOKE EHFFB265,0ffset pixels +
-SPOKE EHFFEZOF,offset ligne% . +
-RETURN ; ; +
-I UEAAÉÉHREÉ RR kR ARt btk E RR RR E +
-! * CHARGEMENT IMAGE DEGAS ELITE * +
-PROCEDURE Toad degas(nomd,adrs) +
-LOCAL pal5 +
-Ï +
-pal$=sPACE*{32} +
-OPEN "i" #1,nom$ +
-SEEK #1.2 +
-BGET #1,VARPTR(pal#),32 +
-VOID XBIOS(6,L:VARPTR{pal#)) +
-BGET #1,adr%,32000 +
-CLOSE #1 +
-RETURN +
-La vitesse de scrolling horizontal peur être accélérée en augmentant +
-le pas d'incrémentation entré chaque pixel. +
-Avec 2 pixels, la vitesse est doublée, Avec 4 pixels, la vitesse est encore +
-doublée, +
-Remarque: le système de scrolling modifie l'adresse de la mémosre +
-vidéo. Il faut remettre l'écran dans son état initial afin d'éviter les +
-surprises désagréables. Le programme sauve l'adresse initiale dans la +
-variable adr_sauve*, +
-Scrolling horizontal , +
-commandé par la souris +
-Pour obtenir un effet spectaculaire, vous pouvez asservar le scrolling +
-1ux positions de la souris. C'est très facile à réaliser en affichant la +
-fenêtre de visualisation à la position courante de la souris. +
-ATARI MAGAZINE KIM BEST-OFGEA BASIC +
-+
-xnfs=MOUSEX +
-EXIT IF MOUSEK=>+
-Gpostition fenetre(xmé) +
-LOUP +
-Cette routine fonctionne bien, mais elle présente un défaut. La fené +
-tre de visualisation est sans cesse redessinée à l'écran. Pour éviter cela, +
-il faut écrire une rourine qui attende un déplacement de la souris +
-pour redessiner la fénêtre de visualisation. +
-x 0% =MOUSEX +
-Bposition fenetre{x0%) +
-D0 +
-[0 +
-xm*=MOUSEX +
-EXIT IF emÿe=x05 +
-EXIT IF MOUSEK==0 +
-LOOF +
-EXIT 1F MOUSEK==0 +
-@position fenetre(xm6) +
-MUFE= AIN +
-LOOP +
-La position de départ de la souris est mémorisée dans la variable +
-x. Une boucle DO-LOOP bloque l'ecécution du programme tant +
-que la souris ne change pas de position x. Etant donné qu'il y à deux +
-boucles DO-LOOP la condition de sortie (clic sur la souris) est tescéé +
-deux fois (EXIT IF kmi=<=0). +
-Pour obtenir le programme complet, il faut reprendre le programme +
-de scrolling et le modifier légérement. +
-Remarqué: dans lé programme précédent, la fenêtre de visualisation +
-est déplacée de la position © à la position 320. Etant donné que la +
-position de la souris ne peur varier qu'entre 0 et 319, la derniére colonne +
-de l'écran virtuel correspondant à la position 320 ne sera jamais +
-affichée à l'écran. +
-Utilisation simultanée des scrollings +
-verticaux et horizontaux +
-Après le scrolling vertical et le scrolling horizontal, voies mamtenant +
-un programme d’exemple qui utilise simultanément les deux modes +
-de scrolling, 11 affiche une fenétre sur un écran virtuel de 640x4C0 prxels. +
-Cet écran virtuel est remplis avec quatre images Degas Efite. La +
-fenêtre de visualisation est déplacée avec la souris. L'écran virtuel occupe +
-quatre images Degas Flite, donc 128000 octets (4x32000 octers), +
-Les lignes d'uné même image sont séparées par 160 nctets. Pour calculer +
-l'adresse de la ligne n+1 à partir de l’adresse de la ligne n, 1l faur +
-lui ajouter la valeur 320. +
-Ce chiffre correspond à la longueur de la ligne (i60 octets}, additionné +
-à Ja longueur de l’espace interligne (160 octets). On obtient +
-donc un votal de 320 octets. +
-L’imagé IMAGE 1 commence à Padresse de l'écran virtuel. L'image +
-IMAGE Z commence à l’adresse de l’écran virtuel plus 160 octets. +
-L'image IMAGE 3 commence à l'adresse de l’écran virtuel plus 32000 +
-octers. Et enfin, l'image IMAGE 4 commence à l'adresse de l'écran +
-virtuel plus 32160 octers (32000 +160). +
-IMAGE 1 IMAGE 2 +
-+
-La procédure Bfixe ecran(px,py) positionne la fenêtre de visualisation +
-à la position (px,py). Nous avons vu plus haur que la posiuon +
-de la mémoire écran est définie par une adresse, un offset de figne et +
-un offfet de pixel. Les lignes sont séparées par 80 mots (160 octets). +
-L'offser de Figne est done de 80 lorsque l’offret de pixel est égal à Q, et +
-de 76 (80-4) dans le cas inverse. L'offset de péxel est défini avec l’opéraceur +
-MODULO, +
-offset pixel&=px4 MOD 16 +
-L'adresse de l’écran est calculée à partir de la position x et de la position +
-v. La position y sert à dérerminer l'adresse de la ligne. T4 position +
-x sert à calculer l'adresse relative du débue de l'écran par rapport +
-à l’adresse de la ligne, +
-adr ligne%=adr picspy4"320 +
-adr physt“adr _ ligne%+(px# DIV 16)*8 +
-Le programme commence par remplir l'écran victuel avec les quatre +
-imapes Degas Elire. Les images sont chargées avec la procédure +
-@load degas dans une mémoire tampon, puis rméopiées à leurs +
-pla:-zç;baputtim dans l'écran wirmuel. L'utilisation d'une mémoire +
-tampon permet d'éviter l'affichage des images à l’écran lors de l'ini +
-cialisation du programme. +
-| HRN NRREREERTÉERR E R AR RE RE E +
-! * SCROLLING SUR UN ECRAN VIRTUEL * +
-* & DE 640*400 (4 IMAGES DLGAS) * +
-P RV S0 R R S T S e B S R A +
-* * () ATARI MAGAZINE 1901 = +
-! * (C) PATRICK LECLERCO 1991 ñ +
-| 4R RÉEÉ É AN RE E EN E R RE +
-! * PROGRAMMATION GFA BASIC 3.xx A +
-I +ggqt****t*#tttt***#*kik#tt*****#t** +
-RESERYE 100000 +
-HIDEM +
-adr tampont=MALLOC(32000) +
-adr_pi c%=MALLOC (128000) +
-adr sauve%*=XBTOS(2) +
-+
-I E E ME M E Ac ue d d e e A d d d d E d e e e d +
-" * CHARGEMENT PREMIERE IMAGE * +
-D RR e L e e = R S +
-E]nad_degfifi["IHflEEl,FIl".Eflrrtflmpfl"*} +
-adr ligne¥=adr tampons +
-ATARI MAGATIME BEST OF GRA BASIC +
-ddr copies=apdicr* +
-FOR 1%=1 TO 200 +
-BMOVE adr ligne%,adr copie%, 160 +
-ADD adrT igne%1,60 ; +
-ADD adr copies32,+
-NEXT 1% +
-+
-Lo e e m ETE R A Wl el R R W R +
-- * CHARGEMENT SECONDE IMAGE * +
-L r d e e d d d e A A R +
-@load degas({"IMAGEZ.PI1",adr tampon¥) +
-adr_1ignef=adr tampon¥ +
-adr coplgk=adr pics+le0 +
-FOR 1%=1 TO Z0 +
-BMOYE adr lignes,adr copies, 160 +
-ADD adr1 1gne%16,0 +
-ADD- adr copies, 320 +
-NEXT 1% +
-+
-Bl E W e e o W W W R R W +
-* * CHARGEMEWT TROTSIEME IMAGE * +
-| e d e e e kA e d e d e e e e e r d é E +
-Éload degas( "IMAGE3.PI1",adr tampons) +
-ddr |1gne%=-adr tampon% | +
-adr copies=adr pich+64000 +
-FOR- 1=1 TO 200 +
-BMOVE adr _ ligne%,adr copie%, 160 +
-ADD adr ligne%,l60 +
-ADD adr copies,s20 +
-NEKT 1% +
-l' S e r E e L L e E +
-' # CHARGEMENT QUATRIEME IMAGE * +
-| xRk A A A A A AR TR A A AT AN AT ANk +
-Bload degas("IMAGE4.PI1t"a,mpaodntr) +
-ädr ligne%=adr tampon% +
-ädr copiessadr pic&+b4000+160 +
-FOR 1%-1 TD 200 +
-BMOVE adr ligne%,adr copie%, 160 +
-ADD adr ligne%,160 +
-ADD adr copief32,+
-NEXT 1% +
-UEU AAR E R A d e d PE +
-itk INITIALISATION DE LA Ly +
-* * FENETRE DE VISUALISATION * +
-D ONÉTTAT E RRRÈ RA eA eE eE d E +
-SETMOUSE 160, 100 +
-MOUSE XiVf é, K,M +
-@fixe ecran(xm®, ym®) +
-XU SM +
-I oA AR AR A Ay Akttt +
-* Æ BOUCLE PRINCIPALE * +
-I RÉÉARHAXEREEE RE RRd +
-oo +
-Lo +
-MOUSE 0w, yis , ki +
-EXIT IF ([xmi=<=x0%) OB {ym&<=yl%) +
-EXIT IF kmis=>+
-LOOP +
-EXIT IF kmés==0 +
-Bfixe ecran(xms,ymé) +
-x0é =xn - +
-VOFS@ YMFs +
-LOUF +
-| VR S ÉÉÉ R TPEe RN +
-!* REINITIALISATION DE L'ECRAN * +
-| *****#H:Ttt*t****#*t******:‘::‘."‘:’**** +
-SPOKE RHFEFBPES,+
-SPOKE &HFF870F,+
-VOID XBIOS(5,L:-1.L:adr sauve%,-1) +
-VSYNC +
-VOID MFREEÇadr pic#) +
-VOID MFREE(adr_tampons) +
-SHOWM | +
-END +
-| Spde e g gk o ok e e e ey e ol o o ol ol +
-' * MODIFICATION POSITION * +
-se ECRAN VIRTUEL # +
-| RRRERERTATEARETEANETETETEEFEEX +
-PROCEDURE fixe ecran(px*,py#+
-LOCAL offset pixel* +
-LOCAL adr phys +
-LOCAL offset lignes +
-LOCAL adr ligne% +
-ädr Tigne*=adr pic&+py*320 +
-offset pixel%-px% MOD 16 +
-adr_phïsä=adr_1îgneäü[p:ä DIV 15)#8 +
-IF offset pixel%eD +
-offset lignes=80 +
-ELSE +
-offset ligne%=76 +
-ENDIF +
-VOID XBIOS(5,L:-1,L:adr phys%,-1) +
-VS5YNC +
-SPOKE BHFF8Zb5 ,offset pixel% +
-SPÔKE BHFFBZOF,of fset Tignes +
-RETURN +
-+
-Wy A A A e e o i e A +
-" # CHARGEMENT IMAGE * +
-v DEGAS ELITE 5 +
-D RESREF +
-PROCEDURE load degas{nom},adrs) +
-LOCAL pal$ +
-pal$=5PACE4{32) +
-OPEN "i".,#1,noms +
-SEEK: #1,2 . +
-BGET #1,VARPTR(pal#),32 +
-ATARI MAGAZINE fi BEST OF GRA BASIC +
-VOID XB105(6,L:VARPTR(pal#}) +
-BGET #1,adr%,32000 +
-CLOSE #l +
-RETURN +
-L’ucilisation d'une mémoire tampon pour le chargement des images +
-permet d’éviter leur affichage à l’écran. Le tampon prend 32000 octets +
-de mémoire. Pour éviter cela, on peut écrire une routine qui +
-cha;rgi: directement une irflfägü‘. lJegas Etite dans l'écran campon, +
-PROCEDURE charge degas(nomÿ,adr images) +
-LOCAL pall +
-LOCAL Tigne%,adr lignes +
-pal §=SPACES(32) +
-OPEN "i",#1,nomf +
-SEEK #1,7 +
-BGET #1,VARPTR(pal#),32 +
-VOID XBIOS(6,L:VARPTR(pa15}} +
-adr ligne%=adr images +
-FOR Tigne%=1 TO 200 +
-BGET #1,adr 11gne%, 160 +
-ADD adr 1igne%,320 +
-MEXT ligne* +
-CLOSE #1l +
-HEXT ligne* +
-Le Eîu:LrE;EmEnt des 'i,m:l,#!;i dans l’écran wirtuel ec maintenant Leaucoup +
-plus facile à programmer. +
-Ëcharge_fiegaa["IHAüEl.PII",adr…pic%} +
-ëcharge_degaEE"IHAEEE.PII",adr_pic%+lfiD] +
-Ücharge_degaaf“îflflü[a.Pll".adr;picä+33ÛÜÜ} +
-@charge dégas("IMAGES.PIL" ,adr pick+3Z160) +
-Artention: la routine écharge degas est une routine spécifique qui +
-ñe fonctionne qu'avec un écran virtuel d’une largeur de 640 pixels +
-(320 octers de large). +
-Pour avoir une routiné fonctionñnant avec un autré écran virtuel, 1l +
-faut modifier la ligne ADD ade 13 gnes, 320 en tonant compte de la +
-largueur du nouvel écran. +
-Déplacement souris sur un écran virtuel +
-de taille quelconque +
-F . 1 ! . i e E Les déplacements de là fénêtre de visualisation étant liés aux déplace- +
-! - = . b .\. ments de la souris, la dernière ligne et la dérnière colonne de l'écran +
-virtuel ne sont jamais affichés par le programmé, On ne peur utiliser | +
-le système précédent que pour un écran de 639x359 pixels. Pour +
-déplacer la fenêtre de visualisation avec la buris sur un écran virtue! +
-de raille quelconque (mais supérieur à l'écran visible), 1l faut gérer la +
-souris de manière differente. +
-La position X de la souris varie entre 0 ot 319, et la position Ÿ varie +
-entre O et 199 pixels. Pour obtenir un déplacement sur un écran de +
-‘dimension quelconque, if ne faut pas renir compte des déplacements +
-absolus de la souris, mais des déplacements relatifs. Pour obtéñir un +
-déplacement relatif, il faut positionner la souris à un emplacement +
-orécis de l’écran et attendré que sa position change. La valeur du deplacement +
-relatif est la différence entre la nouvelle position de la +
-souris et sa position initiale, Dès que lc déplacement relatif est caleu- +
-|, le programme doit repositionner la souris sur sa pesition initialé. +
-Après un déplacement souris, le programme doit caleuler la nouvelle +
-position de la fenêtre de visualisation. Ce calcul est effectue en additdonnant +
-le déplacement relatif avec la position courante de ls fenétre +
-de visualisation. Tl peut arriver que le çaleul du déplacement donne +
-des coordonnées en dehors de l'écran. Pour éviter cela, le programme +
-doit exercer un contrôle sur les coordonnées de la fenêtre. +
-Lec variables xmax$ et ymax% contiennent les positions extrêmes de +
-la fenêtre. Les positions minimales sont (0,0). +
-xinax#=320 +
-vmaxés=200 +
-SETMOUSE 160,100 +
-xaffr=-100 +
-vaff==100 +
-@fixe ecran(xafyfaféfs,+
-+
-Do +
-| kkdxeddR WA AR TRk RN E +
-! * ATTENTE ACTION SOURIS * +
-I #HF AAAARÉÉRRaNNVAÉRRÉÉ +
-oo +
-MOUSE e , v, ks +
-EXIT IF (xmé<=160) OR (ymé<=100) +
-EXIT IF kmé=e=0 +
-LOQP +
-EXTT IF kmfe==0. +
-+
-| ek hE Al E R RR R ettt +
-| * CALEUL POSITION X FEMETRE ” +
-P ORF T E TR R R e +
-LF =160 +
-dx*=xmé-160 +
-ADD xaff=,dx% +
-IF xaff#=0 +
-xaff*=0 +
-ENOTF +
-IF xaffa=xmax= +
-xaff#=xmaxt +
-ENDIF +
-ENDIF +
-P e e i o b e bl e b e e E E E e +
-"% CALCUL POSITION Y FENETRE * +
-E E E E E E ARV GR A SRR A +
-LF ymée=100 +
-dyf=yms-100 +
-ADD vaff*,dy4 +
-IF yaff==<+
-vaftæ=l +
-ENDIF +
-IF vaffs=ymaxt +
-ATARI MAGALINE m BEST OF GRA BASIC +
-yaffi=ymaxs +
-ENDIF +
-ENDIF +
-SETMQUSE 160,100 +
-@fixe ecran(xaffs,yatF*) +
-LOOF +
-Éémarque‘ en modifiant les valeurs de Imh'iti{m extrèmes de la sou- +
-TIS, ON peut limiter le 5r.m|]1'flg à une zone prél:'ls: de l'écran virtuel, +
-Cela peur être utile dans certaines applications, L'exemple suivant li +
-mité les déplacements de la fenêtre de visualisation entre les coordonnees +
-(50,50) et (200,150). +
-xmin#=50 +
-ymin%=50 +
-xmax%=200 +
-ymax#=150 ‘ +
-1F xaffs<xmins +
-xafft-xmin® +
-ENDIF +
-IF xaff#=xmaxs +
-xaff%=xmax +
-EMDLF +
-1F vaffä<ymins +
-yaoff==ymins +
-ENDIF +
-IF vaîf%=vmaxt +
-vatTa=ymaxs +
-ENDIF +
-Taille des écrans virtuels +
-La place mémoire prise par les écrans virtuels croit rapidement en +
-fonction de leurs tailles. Un écran virtuel de 2x2 images prend 128 +
-Ko, Un écran de 354 images prend 288 Ko. La taille d'un écran vircuel +
-doit correspondre à oertaines conditions: elle doit être supérienre +
-ou égal à la taille d’un écran normal et la largueur de l’écran coit +
-être un mulriple de 16. +
-Par exemple, On peur créer un écran virtuel de 592x257 pixels. Une +
-largueur de 592 pixels correspond à 37 blocs de 16 pixels. Les lignes +
-de cec écran ont une taille de 296 octets {un bloc de 16 pixels = 5 oetets}. +
-La taille mémoire de l'écran t de 296x257 octets, soit F6072 +
-Pour finir +
-Maintenant que vous savez gérér les 4096 couleurs et le scrolling +
-hard du STF, vous pouvez réaliser des programmes intéressants et de +
-superbes démos Envoyez-nous vos réalisations, +
-ATAR| MACAZIMNE m BEST OF GFA BASIC +
-ST, 11, FALCON et le r +
-Abonnez +
-branché +
-vous 4 +
-este +
-Start Micro +
-Mugulll‘le +
-Chaque mois: +
-« des infos, +
-+ des tests, +
-desconseils, +
-« des initiations, +
-+
-1 disquette pleine de | +
-programmes, d'images, de +
-sons, efrc. +
-Wotre abonnement vous donne +
-accès à "3615 MICROHELP” +
-Wotre abonnement vous +
-procurera des réductions +
-intéressantes sur le +
-téléchargement et l’achat de +
-disquettes de logiciels du +
-domaine public +
-vutre abonnement vous fera +
-bénéficier de tarifs +
-promotionnels sur certains +
-logiciels du commerce +
-Ahnn nez- vous et +
-économisez immédiatement +
-80 F +
-Bulletin d'abonnement page 130 +
-GRAPHISME EN GFA BASIC +
-Faites flasher vos écrans +
-Les effets vidéo permettent d'agrémenter vos applications +
-graphiques et vos jeux. Nous vous proposons quelques conseils et +
-explications pour bien en comprendre le fonctionnement. +
-Instruction BMOVE +
-Elle permet de copier très rapidement une zone mémoire (environ +
-16€0 ko à la seconde). On l'urilise surtour pour les applications +
-graphiques. +
-BMOVE adr org, adr dest, nb octets, +
-adr org : adresse de la zone mémoire d'origine, +
-adr dest : adresse de la zone mémoire de destinalion, +
-nb octets : nombre d'octets à copier. +
-Structure mémoire de l'écran ST +
-L'écran du 5T a une taille de 32000 octets. Le codage des informations +
-graphiques est différent selon le mode graphique utilisé +
-La basse résolution est organisée en 200 lignes de 320 pixels avec 16 +
-couleurs possiblés par pixel. Chaque ligne à tne taille de 160 oetets. +
-Un octet contient donc la représentation binairé de 2 puxels, C'est le +
-mode graphique le plus utilisé pour les jeux. +
-Les programmes donnés cn exemple dans cet article sont prévus +
-pour la basse résolution. +
-La moyente résolution est organisée en 200 lignes de 640 pixels avec +
-4 couleurs par pixel. Les lignes font toujours 160 pixels, mais yn octer +
-contient la représentation binaire de 4 pixels. C'est un mode graphique +
-rarement utilisé pour les jeux. Il sert pour les applications +
-professionnelles réalisées par les vtilisateurs qui n'ont pas de meori +
-teur monochrome haure résolution. +
-La haute résolution fait 400 lignes de 640 pixels en deux couleurs. +
-Les lignes ont une taille de 80 octets. Un octer contient la représentation +
-binaire de & pixels. Ce modé graphique nécessite un moniteur +
-monochrome de haute performance. La plupart des appheations +
-professionnelles utilisent la haute résolution. +
-Manipulation de l'écran avec BMOVE +
-L'instruétion BMOVE permet de copier des blocs de mémoire et donc +
-! L " ë P des parties de l'écran. On peut copier le contenu de l'écran en +
-mémoire et ensuite le reatfiéher. +
-1 dc d d d d d e d d E +
-! # SAUVEGARDE DE L'ECRAN EN MEMOIRE * +
-I RRN E e d d E LD RE +
-adr tampon# = MALLOC{32000) |RESERVATION MEMOIRE +
-BMOVE XB10S(2),adr tampon%,32000 !COPIE ECRAN MEMOIRE +
-cLS 1EFFACEMENT ECRAN +
-VOID INP(2) LATTENTE CLAVIER +
-BMOVE adr tamnon&,XEI0$(2},32000 !AFFICHAGE ECHAN +
-vo1D INP(2) LATTENTE CLAVIER +
-VOID MFREE(adr tampon#) | LIBERATION MEMOIRE +
-Certe technique fonctionne dans toutes les réolutions du ST. La +
-foncrion «File select» et les boîtes d'alerte utilisent cenre méthode (en +
-fait, élles ne sauvent pas toute l'image, mais sculement la partie mocifiée), +
-Manipulation des lignes +
-En faisant des manipulations graphiques des lignes, on obrient des +
-effets intéressants. Il faur connaître l'adresse des lignes pour pouvoir +
-les copier grace à BMOVE Le numéro des lignes varie entre O et 199 +
-pour la basse et la moyenne rétolution, et entre O et 358 pour la haute +
-résolution. +
-Adresse d'une ligne Adr 1igne = Adr ecran+Ligne*Taille ligne +
-Basse résolution: Adr Tigne = XBIDS(2)+1igne*160 +
-Movenne résolution: Adr Tigne = XBI05(2)+1igne*160 +
-Haure résolution: Adr ligne = KBIOS{2Z)+1igne*B0 +
-Exemple simple +
-On peut faire un petit programme qui copie la première ligne d'un +
-écran sur tout l'écran. +
-PROCEQURE copie ligne LOCAL adr lignels +
-LOCAL adr copie% +
-LOCAL ligne copie% +
-ATARI MAGAZINE H BEST OF GPA BASIC +
-adr Tigne(s = XETO5 (2) IADR LIGNE À COPIER +
-FOR ligne copies = 1 TO 199 +
-adr copie% = XBIOS(2}+1igne copiex*160 [ADR LIGHE +
-EMUVE adr lignel®, adr copie#, L60 ICOPIE +
-NEXT ligne copie* +
-RETURN +
-Amélioration de l'exemple +
-Au lieu de copier une seule ligne, on peut en copier plusieurs à la +
-fois, Pour cet exemple, on divise l'écran en 20 bandes de 10 lignes +
-Flles sont numérotées de 0 à 19, La routine copie la bande D sur les +
-autres bandes, +
-PROCEDURE copie bande +
-LOCAL adr orgs +
-LOCAL adr copiet +
-! ADKESSE BANDE O - +
-adr org® = XBIDS{Z) +
-FOR bande copies - 1 TO 19 +
-! CALCUL ADRESSE BANDE 2 +
-adr copie% = XBI0S(2)+10*bande copie%*160 +
-' COPIE BANDE 1 SUR. BANDE 2 +
-EMOVE adr org&, adr copiex, 1600 +
-NEXT bande copie +
-RETLIRN +
-Utilisation de plusieurs écrans en mémoire +
-Ces petits programmes sont amusants, mais peu utiles. En revanche, +
-l'intérêt est de réaliser des affichages à partir d'un où pluseurs corans +
-stochés en mémoire. +
-La place mémaire est reservée avec l'inscruction MALLOC. La routine +
-load degas permet de charger une image Deges Elte à n'importe +
-quelle adresse en mémoire On peut réaliser toures sortes d'effers +
-comme l'affichage rapide d'une image, l'affichage à partir du haut où +
-du bas de l'écran, l'inversion d'une image, l'allichage à partir du +
-centré où des bords, ete. Il faut tenir compte de l’adresse des écrans +
-dans le calcul des adresses des lignes. L'adresse de base de Pécran physique +
-(celui qui est wisible sur le moniteur de l'ordinateur), est fournie +
-par la fonction XBI05(2). Il ne faut surtour pas se tromper au n +
-veau des adresses de base des écrans. +
-Affichage rapide d’une image +
-La technique la plus simple pour afficher rapidement une image est +
-de la charger dans une mémoiré tarmpon, puis de la copier sur l'écran +
-avec EMOVE Frant donne la vitesse de EMOVE, l'affichage est instantané +
-pour l’utilisaveur (en fait, il prend à peu près 20 millisecondes). +
-Âvec une routine de chargement directement en mémoire, l'atfichage +
-et lent et saccadé. +
-Affichage à partir du bas de l'écran +
-Pour afficher une image à partir du bas de l'écran, il suffic de la charger +
-dans uné mémoire tampon, puis d'afficher les lignes les unes +
-après les auttes de la ligne 199 à la ligne 2, La routine aff bas du +
-programmé d'exemple montre que cette méthode est trés simple à +
-programmier. +
-Affichage à partir du haut de l'écran +
-Pour afficher une image À parcir du haut de l'ééran, il suthe de la +
-charger dans une mémoire tampon, puis d’afficher les lignes les unes +
-après les autrés de la ligne O à la ligne 199. La routine aff haut du +
-programme d'exemple fonctionne sur ce principe, +
-Affichage à partir du centre de l'écran +
-Pour afficher une image stockee dans la mémoire sur l'écran & partir +
-du centre, il faut afficher d'abord les lignes 99 ec 100, puis les lignes +
-98 et 101, et ainsi de suite jusqu'aux hgnes 0 e 199. L'effer est amusant. +
-La rourine aff_mil ieu du programme en exemple urilise cette +
-téchniqué, +
-Affichage à partir des bords de l'écran +
-Certe méthode est l’inverse de la précédente. T faut d'abord atficher +
-les lignes C et 199, puis 1 et 198, pour arriver finalement aux lignes +
-99 et 100. La routine af f bord illustre cette rechnique. +
-Affichage aléatoire , +
-Cette méthode consiste à afficher les lignes d'une rmage dans un +
-ordre aléaroire. Le numéro de la ligne à afficher est déterminé par +
-“ une fonction aldatoire. Il faut tenir compté des lignes déja-affichées +
-pour éviter de les réafficher. La solution la plus simple est d'ntiliser +
-un tableau ne contenant que des @. Chaque fois qu’une ligne est affichée, +
-on met Pindice du tableau correspondant à 1. Pour chercher +
-une ligne non affichée, il suffit de lire le tableau à la recherche d'un +
-nombræ 0. +
-La routiné aff aléatoire du programme d'exemple montre une +
-téalisation de cette technique Cerre routine utilise un tableau +
-tst Tigne% pour la gestion des lignes. Elle fait un affichage ligne à +
-lignemais on peut la modifier afin de travailler sur des blocs de +
-hgnes. L'affichage de l'image se fera plus vite puisqu'il ¥ aura mouns +
-d'étapes d'affichage Le rableau tst ligne prendra aussi moins de +
-place [économie de mémoiré), +
-Inversion verticale d'une image +
-Pour inverser verticalement une image, 1l suffit de la recopier en inversant +
-la position des lignes. La ligne © devient la ligne 199, la ligne +
-1 devient la ligne 198, la ligne 2 devient la ligne 197, … la ligne 199 +
-devient là ligne 0. +
-La routine inversion ecrän inverse l'image de l'écran physique &t +
-stocke le résultat dans une image tampon. Une fois l'inversion terminée, +
-elle donne le résultat en le recopiant rapidement sur Pécran +
-physique +
-Scrolling vertical d'une image +
-Pour faire seroller une image sur une zone d'écran de hauteur h, il +
-faut copier le bloc de lignes de hauteur hä partic de la ligne O de l'i- +
-ATARI MACAZINE m BEST OF GFA BASIC +
-mage, puis à partir de la ligne 1 de l'image, etc. La superposition rapide +
-des blocs donnera l'impression d'un mouvement. +
-En affichant l'image en bas de l'écran, on arrive à faire séroller un +
-bloc de 100 ligm:s de haut d'une manière parfaite sans la moindre +
-«bavures vidéo. La routine scroll du programme d’exemple fait +
-d'abord uñ scrolling vers le bas, puis vers le haur. +
-Programmes d'exemples +
-Les rourines d’affichages ont êté réalisées en GRA Basc 303, Les +
-exemples utilisent deux images Depas Efite chargees én mémoire au +
-début du programme. Le choix des images se fait grâce au sélecteur +
-de fichiers. +
-Problèmes de synchronisation vidéo +
-et instruction VSYNC +
-L'image affichée par un moniteur vidéo n’est pas une image fixe. En +
-fait, c'est un spot vidéo unique qui sé déplace & grande vitesse pour +
-dessiner l'image. Ce spor balaie l'écran 50 fois par seconde (en terme +
-technique, on dir que l'écran est rafraichi à 50 Hz). Donc, 50 fois par +
-seconde, le système d'affichage parcourt la mémoire vidéo du débur +
-à la fin (soit 32000 octets). Entre chaque balayage widéo, il ÿ à un petit +
-temps mort {le temps dé balayage est de 16 millisecondes, et le +
-cemps entre deux balayages de 4 milliseconces). +
-Lors de l'affichage d'un objet sur l'écran, celui-ci se mer parfois à clignoter, +
-l'objer peut disparaître en partie, une barre horizontale peut +
-apparaître, l'affichage peur êcre légérement brouillé, crz Ces eflers parasites +
-viennent d'une interférence encre le E}OEtëme !:l’:lFHf:hà[;& st la +
-routine graphique. 51 le programme modifie une donnée de la mémoire +
-écran au moment où le système d'affichage envoie cette donnée +
-sur l'écran, il se produit une perturbation graphique. +
-Pour éviter ce probléme, 1 faur travailler pem:l.fl.nt le temps libre entre +
-chaque balayage vidéo. La fonction Vsync arrête le déroulement +
-du programme pendant le balayage vidéo. Après l’'instruction Vsyne +
-le programme dispose d'un temps très court pour faire un affichage +
-graphique sans craindre de problème vidéo, +
-Travail en bas de l'écran +
-Le spot se déplace sur l'écran à une vitesse bien définie. Après un +
-Vsync, on dispose de peu de temps pour faire un affichage sans parasite +
-vidéo en haur de l’écran. En revanche, le temps disponible pour +
-afficher quelque chose vers le bas de l'écran est plus important, puisqu'on +
-dispose du temps entre deux balayages vidéo, plus le temps +
-pris par le système d'affichage pour arrivér en bas de Pécran. +
-La rourine de scrolling travaille en bas de l'écran pour profiter de ce +
-remps supplémentaire. Remoncez la position d'athchage, et vous verrez +
-apparaître une barre de sjït'l::l‘l.t'üf:iätiüll. +
-La vitesse de rafraîchissement vidéo est de 50 Hz pour tous les moniseurs +
-couleur et de 70 Hz pour le moniteur monochrome Atari. +
-POUR TOUTES QUESTIONS, TAPEZ 3615 ATARI +
-| VRI TTAAARÉEEEARRETTNAAETREÉ RERR +
-A 4 ; w +
-* * EFFETS GRAPHIQUES AVEC FONCTLON BMOVE * +
-L * “ +
-L RHN A RR E +
-I RRF A S E AARR E E E EAARR E +
-* * (C) 1990 Patrick Leclercq & ATARI MAGAZINE * +
-I RR E FN A N R e e T d e d e e e e e S R S e N R E E +
-' # Programmation en GFA BASIC 3.03 * +
-| Ah E R R RR e E R R d e A A E +
-RESERVE 50000 | RESERVATION MEMOIRE POUR BASIC +
-OIM tst_îîgne%{Eüü] ITABLEAU POUR AFFICHAGE ALEATOIRE +
-imagel%-MALLOC(32000) RESERVATION MEMOIRE +
-image?%=MALLOC(32000) RESERVATION MEMOIRE +
-image travail%=MALLOC(32000)! RESERVATION MEMOIRE +
-Émain +
-VOID +
-MFREE(image travail#} ! LIBERATION MEMOIRE +
-VOID MFREE{imagess) ! LIBERATION MEMOIRE +
-VOID MFREE{imagel%) ! LIBGERATION MEMOTRE +
-END | FIN DU PROGRAMME +
-——s d +
-P EN TATARRERÉÉÉTÉ ÉÉÉ E E A R ETE ETE EN E +
-* # ATTENTE D'UN EVENEMENT CLAVIER * +
-I AR AAARA ATR AE NARA bEkEt kEi RRR +
-PROCEDURE att clavier +
-VOID INP(2) +
-RETURN +
-L é A Al R e e C de de e e R Me e +
-! = CHARGEMENT D'UNE IMAGE DEGAS ELITE EN MEMOIRE * +
-| xFh haÈRARHARERÉAAARRR AN NN RE EN ÉÉ E RR RESRE +
-PROCEDURE load degas(nom$,adr“) +
-LOCAL palé +
-pal$=SPACE%(32) +
-OPEN "i",#99,nomt +
-SEEX #99,2 +
-BGET #99,VARPTR(0al$},32 +
-VOID XBI05(6,L:VARPTR{pal#)) +
-BGET #99 ,adr*,32000 +
-CLOSE #99 +
-RETURN +
-I t#***fl*itfl!!t*fl*tk*t!!tt****i*ttfiiiizt******fififl +
-!* COPIE D'UNE LIGNE D'UN FCRAN SUR UN AUTRE * +
-1 e nn e d e d e e r e R e e e r e R e é r e e e e d e D d +
-PROCEDURE copie ligne(l1l%,adr_imgl%,12%,adr_img2%) +
-LOCAL adr14 +
-LOCAL adr£% +
-ATARI MAGAZIME m BEST OF GFA BASIC +
-adrl®=adr imagels+115%*160 ! ADRESSE DE.LA LIGNE 1 +
-adréf=adr imagee=+12#*160 ! ADRESSE DE LA LIGNE 2 +
-BMOYE adrl%,adr2%,160 +
-RETURN +
-! COPLE LIGNE 1 SUR LIGNE Z +
-| ek E o e ol o e o e e e e o e e e e e e e e n S l e +
-! * AFFICHAGE D'UN BLOCK DE LIGNES SUR L'ECRAN * +
-| oo ot o g ok v v o e e e e o o o e ok AN E e d o ok b o e e e E S R RE +
-PROCEDURE aff_h1uck{1lä,nïä.adr_imglä,ïE%,adr_îmgä%} +
-LOCAL adrl% +
-LOCAL adrê% +
-LOCAL taillet +
-adrl%=]1%*160+adr imgl© +
-adr2%=12%*160+adr img2' +
-tailles=nbl*"150 +
-| ADRESSE BL@C 1 +
-| ADRESSE ELOC 2 +
-! TAILLE DU BLOC +
-VSYNC ! ATTENTE SYNCHRO VIDEU +
-EMOVE adrl%,adr2%,tailles ! COPIE DU BLOLC +
-RETURN +
-I ok hk bk E A A RE AN NN N R E i v o e e o É e e o ol i ol i ol ol ol e e o +
-* # AFFICHAGE DE L'IMAGE A PARTIR DU BAS DE L'ECKAN * +
-1 d dc e e e d e d e e e e e e d e e E e A S r E e d e é n d e e e d e +
-PROCEDURE aff bas(adr_image*} +
-LOCAL ligne*# +
-FOR ligne*=199 TO D STEP -1 +
-VSYNC +
-@EÜPÎE_ÏîgnE{lîgnE%.ûdfi_ÎMEgEÈ.ÎîgnE%,ïHIüE[E}} +
-NEXT ligne% +
-RETURN +
-+
-i e +
-e L é é è e e e T e s T TSR e L é e r e b +
-| * AFFICHAGE DE L'IMAGE A PARTIR DU HAUT DE L'ECRAN * +
-T T o E e d e e r e e e d e e D A S ol DEDE +
-PROCEDURE aff haut(adr image%) +
-LOCAL Tignes +
-+
-FOR ligne%=0 10 190 +
-VSYNC +
-@copie ligne{ligne%,adr image%,]igned,XB10S(2)) +
-MEXT ligne* +
-RETLIRN +
-I e d ércépércdr r drar d 06 d RR RE E É RE É E A d A E A A R A E d E E A R E E R E +
-' # AFFICHAGE IMAGE A PARTIR DU MILIEU DE L'ECRAN * +
-E rrn d e e d e e r e e e e e e e A r e d E +
-PROCEDURE aff milieu(adr image*) +
-LOCAL lignel% +
-LOCAL lignez# +
-LOCAL 1% +
-lignel*=99 +
-lignez%=100 +
-FOR %=1 TO 100 +
-VSYNC +
-@capîe_ïîgne{1îgnel%.adr_1mage%,11gne1%.ïHIDS[E}} +
-@cüpîg_11gne{1ignefiä.aür_îmmge%,î1gneE%.1BIü5[E}} +
-DEC lignel5 +
-INC lignez* , +
-NEXT 1% +
-RETURN +
-| e lenle ool É E E e el R R +
-! # AFFICHAGE IMAGE * +
-T T T e e ba bbb 5 3t +
-PROCEDURE aff_hflrdziafir_jmage%} +
-LOCAL lignel% +
-LOCAL lignee* +
-LOCAL 1% +
-lignel%=0 +
-ligne:*=199 +
-FOR i%=1 TO 100 +
-VSYNC +
-@cüpîe_jigne[ligflelä.adr_?m&ge%.Iigflelä.ïEIÜSEE]] +
-Écopie ligne(lignez%,adr image%,lignez*,XBI0S(2)) +
-INC lignel®% +
-DEC Tigne?¥% +
-NEXT 1% +
-RETURN +
-1 R ab é 5 i UR A E E i ok r e e e o e e o r e v o +
-| * AFFICHAGE ALEATOIRE D'UNE IMAGE * +
-| e e T P e R R d R R e RE +
-PROCEDURE aff aleatoire(adr image%) +
-LOCAL Tigne% +
-LOCAL i% +
-FOR i%=0 TO 199 ! INIT TABLEAL DE LIGNES AFFICHES +
-tst ligne“(i#)=0 +
-NEXT 1% +
-FOR i%=1 TO 200 +
-REPEAT | RECHERCHE D'UNE LIGNE NON AFFICHE +
-lione&=RANDOM(200) +
-UNTIL tst lignes{(ligne%)=0 +
-tst ligne%{ligne#)=1 ! MARQUAGE LIGNE +
-Écopie ligne(ligne%,adr image%,ligne%,XBIOS(2)) +
-NEXT i% — +
-RETURN +
-ATARI MAGAZIME H BEST OF GFA BASIC +
-| kxR dandd bbb AT Er d e d e e e e r I E +
-' # INYERSION COMPLETE DE L'ECRAN * +
-| HEFN NNN E TRk il É E +
-PROCEDURE inversion écran +
-LOCAL lignel% +
-LOCAL ligne?% +
-L} +
-ligne=%=199 +
-FOR lignel%=0 TO 199 +
-Bcopie ligne(lignel%,XBI0S(2),] 1gned%, image travail%) +
-DEC Tigne2% +
-NEXT lionel® +
-VSYNC +
-BMOVE image travail*,XBI05(2),32000 +
-RETURN +
-1 EHAETANTbE EeE E E2 E A +
-" # ROUTINE DE SCROLLING #* +
-D o e i o o TRN R e e R +
-PROCEDURE scroll(adr image%) +
-LOCAL ligne* +
-FOR ligne%=0 TO 100 STEP 1 +
-aff*hlnck[iigne%.lflfl,adr_imagE%,lflfl.EEIGS{E}} +
-NEXT lignet +
-FOR ligne&=100 TO 0 STEP — +
-@aff block{lignes,100,adr_image%,100,XE105(2)) +
-NEXT ligne% +
-RETURN +
-| ÆE TRATRÉE Rl bWk VR E A A E +
-! # DEMONSTRATION DU SCROLLING * +
-I MPE RERA RE RRN E R +
-PROCEDURE demo scroll(adr image%) +
-LOCAL i% +
-FOR i%=1 TO 2 +
-éscroll(àdr imâge*) +
-NEXT 1% +
-RETURN +
-— +
-FROCEDURE demo graph +
-Baff haut{imagels) +
-Batt clavier +
-Gaff haut(image2%) +
-@att clavier +
-Baff bas(imagels) +
-@att clavier +
-Paff bas(image2*) +
-@att clavier +
-gaff bords{imagels) +
-fatt clavier +
-Paff bords(image2*) +
-Gatt clavier +
-Gaff milieu(imagel*) +
-Batt clavier +
-Baff milieu(image?%) +
-Patt clavier +
-Binversion scran +
-Batt clavier +
-@inversion écran +
-datt clavier +
-gaff aleatoire(imagels) +
-att clavier +
-Paff aleatoire({mage25) +
-@att clavier +
-éscroll(imagel#+
-Batt clavier +
-@scroll (image#*! +
-Batt clavier +
-RETURN +
-| VRShRR +
-| # ROUTINE PRINCIPALE * +
-I xR RR RRR E v PR T E +
-PROCEDURE main +
-LOCAL fond$ +
-LOCAL f2$ +
-FILESELECT "=.PI1"," ",fonds ! SAISIF NOM IMAGE +
-@load degas(fondS,imagel&} | CHARGEMENT IMAGE +
-FILESELECT "*.PI1"," "F2S +
-@load degas{f2$, imageë*) +
-Batt clavier +
-Bdemo graph +
-+
-RETURN +
-SI VOUS N'AVEZ PAS LE +
-COURAGE DE TAPER TOUS LES +
-LISTINGS, COMMANDEZ LA +
-DISQUETTE BEST OF GFA BASIC +
-AVEC LES IMAGES AU PRIX DE +
-70 F SEULEMENT. +
-Ban de commeande en poges 5Û +
-ATARI MAGAZINE m BEST OF GFA BASIC +
-+
-- GRAPHISME EN GFA BA_'SIC +
-1096 IMAGES +
-UNE DISQUETTE +
-Economisez de la place mémoire +
-Les images des jeux d’arcades sont construites à partir d'élements +
-graphiques collés les uns contre les autres, codant ainsi une image +
-écran en quelques centaines d'octets. +
-es éléments dépendent du typé de décor. Pour dessiner un +
-temple (sujet classique des jeux d'arcades/aventures), il fauc +
-des colonnes, des murs, des symboles bizarres, des portes, des +
-éléments de décors, etc. Les colonnes peuvent être conçues de plusieurs +
-déments: un socle de base, un élément intermédiaire et un +
-élément terminal. Pour dessiner une colonne à un endroit quel- +
-“ conque, il faut d'abard mettre le socle, puis un ou deux éléments intermédiaires +
-avant de mettre l’'élément terminal. La taille de la colon +
-ne n'est déterminée que par le nombre d'éléments intermédiairés. +
-Âvwec les mêmes éléments de base, on peut avoir de grandes ou de +
-toutes petites colonnes. +
-Pour dessiner les murs, trois ou quatre éléments différents suffisent. +
-En les alternant, on peut créer un mur tout à feit valable. Pour +
-rompre la monotonie, on peut aussi insérer des éléments de décors +
-comme des vases, des autels ou des dessins étranges reproduisant les +
-traits d’une divinité quelconque +
-On peut dessiner un temple avec environ 40 éléments graphiques de +
-base. Is peuvent être utilisés pour dessiner plusieurs salles du temple. +
-Construction d'images en GFA Basic +
-Avant tout, il faut définir la taille des éléments graphiques et la raille +
-des images construites. Cet article ne traité que de la basse résolution +
-(320x200 pixels en 16 couleurs). | +
-C'est la résolution la plus ucilisée, aussi bien pour les jeux que pour +
-le graphisme pur. Les éléments font 16x16 pixels. Ce n'est pas une +
-obligation, mais c'est devenu une norme de fécto. 11 suffit de regarder +
-les images des jeux d'arcades pour en être convaincu. Avec 18x10 +
-éléments, on obtient une image de 288x160 pixels. +
-C'est un format assez courant. Pour obtenir une image prenant pratiquement +
-tout l’écran, il faut utiliser un format de 20x12 éléments +
-(320x192 pixels), mais il vaut mieux laisser de l'espace pour athcher +
-différents intervenants (décors divers, scores, nom du logiciel, * +
-nombre de vies, éle.) +
-En prenant des éléments de 1620 pixels, on peut couvrir entitrement +
-l'écran avéc un format de 20x17 cases, +
-T;:lilln d'un élément graphique +
-Un élément de 16x16 pixels (basse résolution) stocke dans une væ +
-riable alphanumérique prend 134 octets, La place mémoiré nécessaire +
-pour 256 cléments est de 34304 octets. +
-(e e 05e d e e e d n E A e e d é d d e d d e +
-* * CALCUL DE LA TAILLE MEMOIRE * +
-" # D'UN ELEMENT DE lbxl6 PIXELS * +
-1 VR i R W E o o e e R É +
-GET 1,1,16,16,var} +
-GET 1,1.16,16,var} +
-PRINT LEN{vari) +
-Stockage des éléments en mémoire +
-Les instructions graphiques du (GEA Basie (PUT et GET) stockent les +
-données praphiques dans des variables alphanumériques. Les +
-éléments graphiques sont donc stockes dans un tableau alphanumériqué. +
-Une variable nb_élements® perme: de connaitre le +
-nombre d'éléments en mémoire, +
-DIM element${256) +
-nb_elements==U +
-Pour éviter de perdre de la plact en mémoire, les tableaux commencent +
-à l’indice 1 erâce à Pinstruction OFTION BASE L +
-Sauvegarde avec l’instruction STORE +
-À prémière vue, la rechnique de sauvegarde la plus simplé serait +
-d'utiliser l'instruction STORE qui permet dé sauver un tableau alphanumérique +
-avec une seule instruction. Mais cette méthode ne fonctionne +
-pas toujours correctement. L'instruction STORE utilise les +
-codes de contrôles 10, 11 et 27 pour repérer les fins de lignes et la fin +
-du fichier, Lorsque ces codes sont présents dans une chaîne alphanumérique +
-(ce qui arrive souvent avec des données graphiques), +
-l'instruction RECALL qui doit recharger le tabléäu s2 trompe de +
-ATARI MAGAZINE RM BEST OF GFA BASIC +
-repére er charge les lignes n’importe comment. En résumé, STORE +
-n'est efficace que pour sauver des textes ASCIT normaux (codes commençant +
-à 32). +
-Sauvegarde avec l'instruction BPUT +
-L'instrucrion BPUT permer de sauver une zone de mémoire dans un +
-fichier. Grâce à cette instruction, on peut sauver les éléments graphiques +
-les uns derrière les autres dans un fichier. La procedure Save +
-element(nom$) du programme GEN_IMGS utilise ce système, Elle +
-sauve au début du fichier la palette de couleurs des éléments. Les +
-donndes graphiques sont relues avec Pinstruction BGET qui permet +
-de lire des données à partir d'un fichier. La procédure Load element +
-(nomf) du programme AFF IMES fonctionne de cette manière. +
-Stockage des images en mémoire +
-Pour mémoriser une image, il faut un tableau de 18x10 éléments, +
-5% y a moins de 256 éléments, ils peuvent être codés sur des octets +
-(symbole |}, Une image prend alors 18x10 octers =180 octets. On +
-peur avoir 720x1024/180 images sor une disqueute, soit 4096 images. +
-DIM images/|(10,18,10) +
-Le tableau images | () peut contenir 10 images. Clest un chiffre auss: +
-valable qu’un autre pour un programme de démonstration, mais céla +
-peut tour aussi bien être 50, +
-DIM images|(50, 18,10) +
-Le GEA Basic ne peut pas manipuler des tableaux de raille supérieure +
-à 32 Ko. Le rableau image|() ne peut donc contenir plus de 177 +
-images (32000/180). I est possible de les répartir sur plusieurs tableaux. +
-Si l y a plus de 256 éléments possibles, on peut les coder avec des +
-entiers courts (16 bitssymbole 6. I1 peut alors y avoir 63536 +
-éléments différents. Le codage d'une image prend 360 oecrets +
-{18x10x2}. On peut avoir 720x1024/360 images sur unc disquette, +
-soit 2048 1mages. +
-+
-DIM images&(10, 18,10) +
-[ ne peut y avour plus de 90 images dans le tableau images&() à cause +
-de la limitation de 32 K6 pour un tableau. Il faut donc stocker les +
-images sur plusieurs tableaux. +
-Affichage d'une image +
-Pour afficher une image, il faut afficher chaque élément graphique à +
-sa place. La procédure Aff_image() affiche l'image num_image* à +
-partir de la position graphique (pos _x0%,pos_y0%). On peut alfi +
-chér une image à n'importe quel endroit de l'écran. Les vanables pxs +
-et pyk contiennent la position d’affichage de l'élément courant. +
-Après l'affichage de chaque élément, on incrémente px de 16 pixels. +
-De même après l’affichage d'une ligne, on incrémente py% de 16 pixels. +
-ATARI MAGAZINE +
-| A EEEkEARRAANAAFARARAAAAN E AR h kbR R R RE RE E +
-! * AFFICHAGE IMAGE num image% A LA POSITION 3 +
-| * (pos x0*,pos yD%) * +
-I RRN d d e d d e É A e e d RRN +
-PROCEDURE Aff image (num_image®) +
-LOCAL 1x%,144 +
-LOCAL px*,py +
-| INIT POS X IMAGE +
-py*=pos y0% I INIT PAS Ÿ IMAGE +
-FOR iy%=1 T0 10 — ! BOUCLE DES LIGNES +
-FOR ix%= 1'TO 18 ! BOUCLE DES CASES +
-PUT px%, py%, imagés |(num îmage#, ix*, iv) +
-pr%=pos_x0%- +
-INC px%,10 I PASSAGE POS X SUIVANTE +
-NEXT 1x* ! FIN BOUCLE CASE +
-INC py+,16 1 PASSAGE LIGNE SUIYANTE +
-pri=pos_x0% ! RETOUR DEBUT LIGNE +
-NEAT 1y% | FIN BOUCLE LIGNES +
-RETURN [ FIN ROUTINE +
-Sauvegarde des images sur disque +
-Le tableau contenant les images est sauvé grâce à la fonction Save +
-tableau(). Certe fonction calcule l'adresse et la taille d'un tabléau +
-d'octers avant de sauver le tout dans un fichier binaire, Les informations +
-permettant de comprendre le codage des rableaux sont +
-présentes dans le manuel du GE4 Basic 3.0 au chapitre «Vartables et +
-gestion de la mémoires, +
-La fonetion Save tableau n'est valable qué pour des tableaux d'octets. +
-Pour sauver un aurre tvpe de tableay, il faut augmenter la raille +
-mémoire des cases (1 octet pour un tableau d'octet, Z'octets pour un +
-tableau d'entier court (&), 4 octets pour un tableau d'entier long (). +
-Lecture des images à partir d'un disque +
-Le rableau des images est chargé en mémoire avec la routine +
-Load tableau qui relit un tableau sauvé avec la procédure Save tableau. +
-Cétté rourine ne peut relire que des tableaux d’octets. +
-Système de construction d'images complet +
-Pour avoir un système de construction complet, il faut un ueiliraire +
-de cr@tion des éléments graphiques, un utilitaire de «fabrications +
-des images, et un système d'affichage- +
-Les programmes GEN ELEM EDIT IMG et AFF_IMGS sont des utilitaires +
-écrirs en GFA Basic 3,0. [Is remplissent chacun une fonction +
-bien précise dans la «chaîne de fabrications des images. +
-Programme GEN__ELEM +
-Ce programme est un convertisseur d'images. Il lit un ensemble +
-d'éléments graphiques stockés sur des images au [ormat praphique +
-Degas et génère un fichier binaire réutilisable par d'autres programmes. +
-Les éléments graphiques de base sont dessinés avee le logicicl +
-de dessin Degas Efite. Une fois fes images terminées, le program- +
-BEST OF GRA BASIC +
-meur stôcke la position de tous les éléments graphiques dans le programme +
-GEN ELEM grâce à l'instruction DATA, Une tois lancé, le programme +
-lit toures les images les unes après les autres, et génère le fichier +
-d'éléments graphiques. +
-Programme EDIT_IMG +
-Cet urilitraire serc à «fabriquers les images. L'utilisageur peut l'employer +
-pour les modifier à volonté 11 se présente sous la forme d’une +
-carte avec un menu (sauvegarde des images sur disque, lecture d'un +
-jeu d’images, sortic du programme) en bas à gauche, le dessin d’un +
-élément à droite, et un numéro de carre compris entre 1 ec 10 affiché +
-aussi à droité. +
-Si l'utilisateur clique sur une case de l'image, l'élément de la case ct +
-remplacé par l'élément courant. Cest ainsi qu’il est possible de placer +
-n'importe quel élément à n'importe quelle position de l'image. +
-L'éditeur permet de travailler sur 10 images à la fois, Le numéro de +
-l’image courante est affiché en bas à droité de l’écran, Le programme +
-peut être modifié pour travailler avec n'importe quel nombre +
-d'images. +
-Programme AFF__IMGS +
-Ce petit programme est une démonstration du système de construction +
-des images, Il lit un fichier d'images et les atficke les unes après +
-les autres. Pour obtenir un affichage rapide, ce programme utilise +
-une astuce courante dans la programmation des jeux: Pimage est +
-construité dans une image de travail situé en mémoire, Lorsque le +
-dessin est terminé, on récopie l'image de travail sur l’écran, L'utilisateur +
-à l’impression d’un affichage instantané, mais ce n'est qu'une 1k +
-luston. +
-B e e e i e v i e e r r e E e d e e e e r e e e e +
-| # = = +
-! * GENERATION DU FICHIER D'ELEMERTS GRAPHIQUES 7 +
-L + * +
-M e E E E E E RE E T ue A A e A F E E E R I e d e E r E i +
-Wk Rk e d é e e e Ak E AR +
-* Programme, GEN ELEM * +
-25 o ki e v e kel o o e o p e r r E +
-[ T ey e TP S e e s P L e R R R d e u e e e E +
-* (C) 1990 Patrick Leclercq & ATARI MAGAZINE 7 +
-d k e e p e r e e r e e e é e e e e e e e E E A d E E +
-de é e d r T E E N E e e e S E E +
-* Cet utilitaire génêre un fichier binaîre contenant |es +
-“ éléments grephiques à partir du nôm d'une image DEGAS, +
-“ ot de la liste des positions des éléments (stockées +
-* dans des lignes de DATA). ' & +
-e e é r d S e d SEN L LV RE R e e Ah A E +
-VARIABLES GLOBALES : +
-elament$() : Tableau contenant les éléments graphiques +
-nb elementss : Nocbre éléments dans le tableau elements{) +
-- nüä_'image.'li- : Nom image DEGAS contenant les éléments à lire +
-* nom fichiert - Mom fichier contenant les éléments graphiques +
-pal:elmentsi: palette de couleurs des éléments +
-ATAR| MAGAZISIE +
-RESERVE 50000 +
-OPTION BASE 1 +
-OIM element$(256) +
-nb elementss=0 +
-RESTORE | +
-READ mom images ILECTURE OU MOM DE IMAGE A LIRE +
-READ nom #ichiers ILECTURE NOM FICHIER BIMAIRE À GENERER +
-flÏflflfl__dlEEü![flüm__'iflfi'!]E“ 1LECTURE DE L'IMAGE DEGAS ELITE +
-Blecture elements ILECTURE ELEMENTS GRAPHIQUES IMAGE +
-Ésave elements{nom fichiers)[SAUVER DISQUE FICHIER ELEMENTS +
-En — IFIN DU PROGRANME +
-1 RESERVATION DE MEMDIRE FOUR BASIC +
-1 LES TAREFAUX COMMENCERT A 1 +
-| TARLEAU LES ELEMENTS GRAFHIQUES +
-! NOMBRE D'ELEMENTS DANS LE TAGLEAU +
-+
-| dhhéthadvaaere aé dbala éek +
-' & LECTURE IMAGE DEGAS ELITE * +
-I AERRAAE sk RE RE É b b L bR REN +
-PROCEDURE Toad degas(noms) +
-LOCAL pal$ +
-+
-palÿ=eSPACE#(2) ! RESERVATION MEMOIRE FOUR PALETTE +
-OPEN “j#1 ,n"omE | OUVERTURE DU FICEIER : +
-SEEK #1.7 | ON EVITE L'INDICATEUR RESOLUTION +
-BGET #1,VARPTR(pal$),32 | LECTURE DES 32 OCTETS DE PALETTE +
-pal element$=pals | MEMORISATION PALETTE DES ELEMENTS +
-VOID XEIOS(6,L:VARPTR{pal5)}1 MODIFICATION PALETTE SYSTEME +
-EGET #1,X6105(7),27000 | LECTURE IMAGE +
-CLOSE #l | FERMETURE DU FICHIER +
-RETURN +
-kAN R LR e e Rk T WA SE +
-| # SAUVEGARDE DES ELEMENTS GRAPHIQUES * +
-E B R E E E E E d +
-1 e e e E S R d e e e d e e É E E +
-! = FORMAT DU FICHIER GINATRE : n +
-' = — Palette couleur des éléments (32 octets); +
-* — Kombre d'éléments du fichier (1 octet); +
-' * — Elément graphique 1 {134 octets); * +
-"% — Elément graphique 2 (134 octets); * +
-! #* — Fiément graphique n (134 octets); * +
-« * — Dernier élérent graphique (134 octets); * +
-d é A bk el e sk e e e e t e e Y R dh c E E E +
-PROCEDURE save elements(nom$) +
-LOCAL i% +
-+
-OPEN “o",#1,nomf +
-BPUT #1,VARPTR(pal element$),32 +
-OUT #l,nb élements® ECRITURE NOMERE ELEMENTS +
-FOR %=1 T0 nb elements® DEBUT BOUCLE LECTURE +
-ÉPUT &1,VARPTR(element$(i%)), 1341 ECRITURE DE L'ELEMENT i% +
-NEXT 1% | FIN BOUCLE LECTURE +
-CLOSE £1 FERMETURE DU FICHIER +
-RETURN +
-OUVERTURE DU FICHIER +
-ECRITURE FALFTTE ELEMENTS +
-— — — —— +
-Ë +
-é E RR +
-* LECTURE D'UN ELFMENT GRAPHIQUE * +
-e r t e r e rr r e e e e e e e e t t r ch 0 +
-1 é e d r d e d E E r E A +
-= numx - Numéro de |l'élément a lire * +
-BEST OF GFA BASIC +
-! * posx% : Position X de l'élément # +
-! #* posye : Position Ÿ de l'élément * +
-ï *#t**#“*#%*#Hhk#i*fitt*fittfitâ##***È*i*iil +
-i *gufikiik#u*kfii*ht**t**tt**+*filiiktlkutbilirt**#i##i*#l*#tt**t +
-* % | "{pstruction GET fonctionne avec 4 paramétres : ; +
-* * xl, yl, xZ, y2. La fonction lec element doit fabriquer +
-" * les coordonnées x2 et yF à partir des position posat et * +
-! * posy#. Etant donné que les éléments graphiques ont une +
-! * taille de 16 pixels, i1 faut rajouter (16-1) à la +
-| # coordomnés de début de l'élément pour obténir la +
-! * coordonnée de fin. Pourquoi (16-1) et non 16 ? +
-! * Le premier pixel compté aussi dans la lonqueur de Ÿ +
-« * l'élément. Avec un début de 10, un élément d'une longueur * +
-!* de 16 pixels se termine au pixel 25. Les pixels 10,11, w +
-| * 19,13,..,24,25 constituent cét élément. C'est pourquoi on +
-+ * = +
-"* utilise la formule (16-1). f +
-5n dh e e e e e e e E e e e e e e e S e S SE +
-PROCEDURE lec elément (num®, posx#,posy#+
-LOCAL posx2s, posyes +
-+
-posx£*=“posx4+[16-1] +
-posyé*=posyt+{161) +
-" LECTURE ELEMENT mun +
-GET posxŸ,posys,posx2*, posy2%,element${rumé) +
-RETURN +
-—. — +
-I ek kb d e e e d e e r e e E E +
-! * LECTURE DE TOUS LES ELEMENTS GRAPHIQUES * +
-L ud e e o ok cr e ok e r e e e e e e e V F +
-PROCEDURE Tecture clexents +
-LOCAL pxt,py +
-L} +
-[X +
-READ px* +
-EXIT 1F pxs==1 +
-| LECTURE PREMIERE OONNEE +
-| TEST SI DOKNEE DE FIN 1) +
-INC nb elements' ! LIN ELEMENT GRAPHIQUE DE PLUS +
-READ pyt 1 LECTURE POSITION Y ELEMENT +
-élec element(nb elementst,px%,py#)1 LECTURE D'UN ELEMENT +
-LOGP +
-tETURN +
-I e e e d e e e e e e e rr pl d AT R E E E +
-' * DEFINITION DES ELEMENTS * +
-| e é d e E +
-' DATA Nom image DEGAS ELITE +
-" DATA Nom fichier éléments & générer +
-" DATA x.¥ +
-' DATA x,y +
-‘ DATA <L (=1 = INDICATEUR DE FIN DE DATA) +
-DATA DESSIN.PII +
-DATA ELEMENTS.ELE +
-DATA 1, 1 +
-DATA 18, 1 +
-DATA 35, 1 +
-DATA BB, 1 +
-DATA-105, 1 +
-DATA 120, +
-DATA 137, +
-DATA 154, +
-DATA 171, +
-OATA 188, +
-DATA 206, +
-DATA 222, +
-DATA 239, +
-DATA 256, +
-DATA 273, +
-DATA 250, +
-DATA —l +
-i el el R T RE TT E e e E R +
-P kR EEthdt it e m e c d d E +
-I d +
-* #* EDITEUR D'IMAGES CONSTRUITES * +
-4 r +
-e e é e e e e e A E e e E E E E +
-de m d SREENE E +
-* Programme FDIT IME * +
-ok de e dr e gkt e e e e r e e e e p g E +
-ttutrhhhekkebedéhbdde é RESRE RE É SE E +
-= (C) 1990 Patrick Leclercq & ATARI MAGAZINE * +
-! * Programration Interpréteur GFA BASIC 3.03 * +
-| LRN RE e i b o É o S e o E o ol R TR e E +
-! **i&**ttttttt*ttt**t**t*k*lû*liTtiTËÊ +
-* WARTABLES GLOBALES DU PROGRAMME = +
-D oaEEret RkRENd Rd kRakdt +
-+
-* element${) :Tableau contenant les &léments graphiques +
-' nb etementst Mh éléments graphigues dans elementd() +
-' images | () :Tableau contenant le codage des imacés +
-! ronesi() :Tableéau conterant les zones de clics +
-‘ nb zones% :Nombre de zones dans tableau zonesk() +
-\ sortiés ‘Condition de sortie du pry +
-element courant® :Num élément selectionné par utilisateur +
-| num image® :Numéro de l'îimuge én cours d'édition +
-' posx0% Position x d'affichage de l'image courante +
-! posy0 ‘Fosition y d'affichage de l'image courante +
-- clie x :Pos x dérnier clic dans zone écrän +
-“alicy :Pos y dernier ciic dans zone écran +
-RESERVE 50000 +
-OPTION BASE 1 +
-DIM images|(10,18,10) !TABLEAU POUR LES I™AGES +
-IRESERVATION DE MEMOIRE POUR LE BASIC +
-" ES INDICES DE TABLEAU COMMENCENT A 1 +
-DIM element3(2756) ITABLEAU POUR LES ELEMENTS +
-nb elements#=0 +
-DIM zone%{10,4} ITABLEAL POUR LES ZONES DE CLICS +
-nb zones+-0 +
-émair lAPPEL PROCEDURE PRINCIPALE +
-END T |FIN DU PROGRAMME +
-+
-+
-L e d r btk d r e d r +
-" * ATTENTE D'UN CLIC SOURIS * +
-T wEERTEE AT T AR Akdd +
-PROCEDURE att clic(VAR xm,yms) +
-AIARI MAGAZIME m BEST OF GFA BASIC +
-:}Efififl! =-j.ll.| .:.:: P' H dsF E = +
-+
-LOCAL Kms +
-+
-REPEAT +
-MOUSE Xmyérné s, l,em +
-UNTIL kmi=l ‘ +
-RETURN +
-T T E E A e A d E E E +
-* * ATTENTE ARRET CLIQUAGE ** +
-| PE E E A SE R AR AR R E RE +
-PROCEDURE attüclic +
-REPEAT +
-UNTIL MOUSEK=Ù +
-RETURN +
-1 wEggkdEdtkFdrrbEbdbbryr Adebbyd +
-'+ TEST SI UNE POSITION (px/py} * +
-' * EST DANS UNE ZONE (x1,v1,x2,ÿ2} * +
-| #pdmadFRd Tttt Rbd -t é é k e Aobishd +
-FUNCTION tst zone(pxh,pyt, x14, yl%,x25, y2%) +
-LOCAL r* +
-r%=FALSE +
-IF ((pxé==x15) AND (pxèe=x2%) AND (py==y1%) AND (pyd==y2%)) +
-r%=TRUE +
-ENDIF +
-RETURN r% +
-ENDFUNC +
-1 é e d e e e e e o ol SÉ D d E +
-' = SAUVEGARDE D'UN TABLEAU D'OCTETS SUR DISQUE * +
-| RH E r E ÉÉ R À E +
-PROCFDURE save tableau(nom$,VAR tab|()) +
-LÜCAL nb dinfé +
-LÜCAL nb_elemt +
-LOCAL adr data% +
-LOCAL taille datas +
-nb_dimk=INT[ARRETR(tab[-()}#41 ! NOMBRE DE DIMENSTONS +
-adr data=LONG[ARRPTR(tab{{}}} ! ADRESSE TABLEAU +
-nb_elemt=0DIM7{tab|{}) | NOMBRE ELEMENTS TABLEAU +
-taille datatenb_elemssnb dimé*s | TAILLE DU TABLEAU +
-BSAVE nom$,adr data%,taille data ! SAUVEGARDE ZONE TABLEAU +
-RETLRN +
-+
-1 Sk deddok & R ok e i ok i e i gl e s ol RE RE A ETE +
-' # LECTURE D'UN TABLEAL D'OCTETS * +
-| AA AN E É É ÉÉ E E +
-PROCEDURE Înad tableau(nom®,VAR tab]{}) +
-LOCAL adr datas +
-adr data%=LONG{ARRPTR(tab]{})} TAOR ZONE MEMOIRE TABLEAU +
-BLOAD nom$,adr datas ICHARGEMENT TABLEAU +
-RETURN +
-i **tt*tt**t**tttiiiiLtt#ti#tt*#t*tt**#t*ttt +
-* * INITIALISATION DU TABLEAU DES IMAGES * +
-ATARI MAGAZIME +
-D o e e o é T e e e e c e r e e o o R v T r +
-PROCEDURE init _images +
-LOCAL 1%, %%, 1y% +
-+
-FOR i%=1 70 10 +
-FOR ix%=1 TD 18 +
-FOR iy4=1 TO 10 +
-images | (1%,1x%, 1y5)=1 +
-NEXT 154 +
-NEXT 1X% +
-NEXT 1% +
-RETURN +
-I HR NaKEÉNTÉ TVRE TRÉ É RR E E +
-" * TMITIALISATION DES ZONES DE CLIC * +
-D ETE i R o e É L e e i i el e +
-PHOCEDURE init elic +
-LOCAL x1&, 1%, x2%,¥2% +
-nb zonest=û +
-oo +
-READ x1% +
-EXIT IF x18=<2 +
-INC nb zones* +
-READ y1% +
-READ x2% +
-READ y2% +
-zone%(nb zoness, l)=x15 +
-zoné%{nb zones%,2)=yl% +
-zone%(nb _ zones‘,3)=x2% +
-zone%(nb_zonest, 4)=y24 +
-LooË — | +
-RETURN +
-+
-I d ko s A A R A É E R R +
-' = DEFINITION DES ZONES DE CLIC * +
-1 mt e e e e bR A é e d d & +
-' DATA xi, y1, x2, y2 +
-' DATA x1, yl, xé, ¥2 +
-' DATA -1 (INDICATEUR DE FIN DE DONNEFS) +
-DATA 35 , 197, 165, 19/ +
-DATA 253, 190, 285, 197 +
-DATA 253, 16/, Z85, 174 +
-DATA 35, 16/, 165, 177 +
-DATA 35, 177, 165, 187 +
-DATA 200, 190, Z18, 197 +
-DATA 200, 147, 215, 174 +
-DATA 16, 3, 303, 162 +
-DATA -1 +
-+
-+
-T il i il o ol e o e e e el i T +
-' * LECTURE DES IMAGES * +
-| HÉÉTÉETTÉTTÉTTTTETTTeE +
-PROCEDURE lecture images +
-LOCAL nomk +
-LOCAL pathi +
-+
-pathé=D1R$(0)+"4#.IMG" +
-FILESELECT pathé," *,nom} +
-IDETERMINATION CHEMIN COURANT +
-|APPEL SELECTEUR DE FICHIERS +
-BEST OF GFA BASIC +
-IF nomf<="" ITEST SI PRESENCE D'UN MOM +
-HIDEM | EFFACER SOURTS +
-Éload tableau{nom$,images | ()} ICHARGEMENT TABLEAL IRAGES +
-num_images=1 FINIT TMAGE COURANTE +
-Baff image VAFFICHAGE IMAGE COURANTE +
-Baft num image IAFE MUMERO IMAGE COURANTE +
-SHOWM LAFFICHAGE SOURTS +
-ENDIF +
-RETURK +
-6h ok o o R R Y R A S “ +
-* * SAUVEGARDE DES IMAGES * +
-| e il e e i i e e i e o +
-PROCEDURE sauver images +
-LOCAL nomd +
-LOCAL pathd +
-pathf=0IRE (0)+"¥\, IME" +
-FILESELECT path$," ".nom3 +
-IDETERMINATION CHEMIN COURANT +
-JAPPEL SELECTEUR DE FICHIERS +
-IF nomf<="* ITEST SI NOM DE FICHIER +
-HIDEM 'EFFACER LA SOURIS +
-Bsave tableaufnom$,tmages|()) !SAUVER LE TAËBLEAU THAGES +
-SHOWM IAFFICHAGE SOURES +
-ENDIF +
-RETURM +
-1 A e A r A e E E R é E e e e e e e ke e o +
-" + ROUTINE DE LECTURE DES ELEMENTS GRAPHIQUES * +
-0 deéeede e rr e o e e d e d e e e e e é e e e e d E +
-PROCEDURE Toad elements(nomd } +
-LOCAL 1% | VARIABLE LOCALE POUR BOUCLE LECTURE +
-LOCAL pals +
-+
-OPEN “i",#1,nom$ +
-pal$=sPACE{(32} +
-BRET #1, VARPTR(pal5),32 +
-VOID XBIOS(6,L:VARETR{pal#}} +
-nb elesentst=INP(#1} +
-IOUVERTURE DU FICHIER +
-1LECTURE DE LA PALETTE . +
-IDÉCLARATION PALETTE +
-!LECTURE NOMBRE ELEMENTS +
-FOR 1%=1 TO nb elementsw IDEBUT BOUCLE LECTURE +
-element{{(i%)=5PACES(134) ! RESERVE MEMOIRE POUR ELEMENT +
-BGET #1 ,VARPTR(element${1#)), 134!LECTURE D'UN CLEMENT +
-NEXT i% 1FIN BOUCLE LECTURE +
-CLOSE #l !FERMETURE DU FICHIER +
-RETURN +
-ti**f**t**#***#****flkfl‘**!"‘*****t*** +
-' = AFFICHAGE U'UN- ELEMENT GRAFRIQUE #* +
-1 2R d e 1h E É e d e r e r - se e r s e e rh c p F +
-1 e e e r e e e e e e e e d e e e e e e e r É e +
-! * La position d'un élèment sur l'écran se calcule de * +
-!* 13 maniére suivante : ” +
-! % px& = (colonnes1}*16+posx06 # +
-! * le numéro x de l'élément varie de 1 à 18 F +
-" * Affichage élément 1 a posx+ ï +
-* * Affichage élément 2 à posx3+16 ¥ +
-B dh e gt o oy e i o e o o oo o e i e B o e e e o ke e e e e +
-PROCEDURE aff element(colonnes,]ignes) +
-LOCAL px%,py% +
-LOCAL num_el ement* +
-num elementt=images| (num image*,colonnes, | ignet) +
-pat=(colonne*-1}*16+-posx0# +
-pyt=(1ignet-1)"16+posy0t +
-PUT px*,pyk,element#{num_elément#+
-RETURK +
-| ek ok e & i il el e e kel ol i e T ok e o TR +
-! # AFFICHAGE DF L'IMAGE COURANTE * +
-D d d ki e d e e d e ik é d é e u d +
-PROCEDURE aff_image +
-LOCAL ix%,ivs +
-FOR iy*=1 TO 10 +
-FOR ix%=1 TO 18 +
-Baff element(ix%,iy%) +
-NEXT ix% +
-NEXT TY4 +
-RETURN +
-Pk WA E R R i R ki e e g e o kel e e o e R e E +
-' % AFFICHAGE DE L'ELEMENT COURANT SUR L'ECRAN * +
-1 rr e d d d e e d e e e d d e e e A É E +
-PROCEDURE aff el courant +
-PUT 201,175,elerentd [element courant*) +
-RETURN +
-L e e W e d r e e d d e ok e T 1 “ d e e e dF E +
-' * AFFICHAGE DU NUMERD D'IMAGE SUR L'ECRAN * +
-I rr e v e e e e e e e e e d o o e e d o e E e e o A d E +
-PROCEDURE àff_num image +
-PROX 254,175,284 189 'EFFACEMENT Z0KE D'AFFICHAGE +
-TEXT 264,185,num image% !AFFICHAGE NUMERO IMAGE COURANTE +
-RETURN +
-1 Rk dkEddrFEdbrddretdhddh il +
-! * AFFICHAGE ECRAN EDITION * +
-| é e É R r e d E +
-PROCEDURE aff edit +
-CLs | EFFACEMENT DE L'ECRAN +
-+
-P&ox 15,2,304,164 ! ZONE DE L'IMAGE +
-BOX 35,167,165,197 | ZONE DES COMMANDES TEXTES +
-LINE 35,177,165,177 +
-LINE 35,187,165,187 +
-TEXT 50,175, "SAUVER IMAGES" +
-TEXT 45,185, "LECTURE INAGES" +
-TEXT 46,195, SORTIE EDITEUR“ +
-BOX 200,167,217,197 ! ZONE DE L'ELEMENT COURANT +
-LINE 200,174,217,174 +
-LINE 200,191,217,191 +
-! : ! POSITION ELEMENT COURANT : 201,175 +
-EOX 253, 167,285,197 +
-LINE 253,174,285,174 +
-LINE 253,190,285,190 +
-! ZONE DE L'IMAGE COURANTE +
-Baff image ! AFFICHAGE IMAGE COURANTE +
-ATARI MAGAZINE W BEST OF GFA BasIC +
-Re Ss e +
-N - I - 5 +
-E ——lE +
-P "ïfi' +
-£ +
-Eflff_E]_EflErflfit ! AFFICHAGE ELEMENT COURANT +
-Baff_num_image ! AFFICHAGE MUMERO IMAGE COURANTE +
-RETURK +
-ë +
-e e i 3 v e o e r e e e r i e E e e e e e o e e e A ol ol e o ol i ok e +
-“ # MIDIFICATION DE LA CASE SELECTIONNE PAR L'UTILISATEUR 7 +
-*++**g***tù#lt*p**ktuflp‘fi:t**#t*tt*tt**:*#tt*ttktt*fit*ttt*ü +
-8 e e o d e rr e e gl u o el e i m o e e e e e e r e e e e r F +
-*. CALOUL POSITION CASE : " +
-4 Le calcul de 1a position de la case cliqué par $ +
-* l'utilisateur se fuil en deux temps ! S +
-= — 1} On calcule la position relative de clic par & +
-= rapport au bord de l'image (on soustrait la 4 +
-« position de l'image à Ta position de clic), l +
-; pxfexc5 i—poisxc0% et pyt=clic y=—posyls “ +
-* — 7) On divise le résultat par 16 (taïlle d'une case) * +
-= at on ajoute ! puisque le résultat de la division* +
-% vas de 0 à 17 pour les colonnes à la place de 4 +
-* 1l à 18, et de D à Ÿ pour les lignes à Ta place de* +
-F 1 à 10. e Æ +
-A Ë +
-* TEST D'ECRITURE : ï +
-* Avant de modifier le contenu d'une case de l'image, la * +
-* routine regarde si celte case ne contient pas déja la * +
-* bonne valeur. Cela évite un accès vidéo inutile. A +
-* L'affichage est plus agréable comme ça. f +
-cec ue e d e e ce d r r r e e e r e e e e e m e S e ok e R R +
-PRÜCEQURE modif case +
-+
-+
-+
-LOCAL colonne* +
-LOCAL Tignes +
-LOCAL pxs py5 +
-LOCAL element* +
-px4=clic xk-posxûs POS X RELATIVE 1 +
-py&=clic _y+-posylé L PU5 Y RELATIVE +
-colonne%=INT{px#/16}+1 ! NUM COLONNE TABLEAL +
-| NUM LIGNE TABLEAU ligne“=INT{(pys/16)+1 +
-elemen| (ntum *ima=ge*i,comlonane®g, !l eignse#) +
-IF element courant#<>elements +
-images | {num_ionnem%, al iggne%e)-c%leme,nt ccouoralnt® +
-HIDEM +
-@aff_glem&nt{:u]unne&,]igne%} +
-5 HO +
-EMDEF +
-ETURN +
-é e e e e e e e e E T e e e S e e +
-« DECREMENTATION DE L'IMAGE EN COURS D'EDITION * +
-e e e r e e e e e e e d e d +
-cè dh e e e d e r d A d E d E S AR d e E EN E +
-t Les images vont de 1 à 10. La routine vérifie 51 A +
-= l'utilisateur tenté d'actéder à une image inférieure § 1 * +
-cuc d d kR ke RN R AR AR e SRR TRk ik e r o RN +
-PROCEDURE dec_imaye +
-TF num_images=l ! TEST SI DECREMENTATION POSSIBLE +
-DEC num imaget | FASSAGE IMAGE INFERTEURE +
-HIDEM ! EFFACER LA SQURIS +
-Jaff image | AFFICHAGE MOUVELLE IMAGE +
-Saff num image ! AFFICHAGE NUMERC NOUVELLE TMAGE +
-SHOWM | AFFICHAGE SOUMIS APRES MODTF ECRAN +
-ATARI MAGALIMNE +
-ENDIF +
-RETURN +
-1T e e sy o o e i sy e s E o e E S e e e el e r e d ok E +
-* INCREMENTATION DE L'IMAGE EN COURS D'EDITION * +
-e e e E r e E S S E R e e e e e e e Q e e c v e e d +
-r r c e f E SE E é e e e E u p e e e f e +
-* Les images vont de 1 à 10. La routine vérifie s1. * +
-* l'utilisateur tente d'accéder à une image =10, 7 +
-ti*ttt*itk#tt*ttt*tt*tti*t**:tk#t**t*k****liil**ÿtï*fi* +
-PROCEDURE înc_image +
-1F num imoge=10 ITEST SI INCREMENTATION POSSIBLE FlHÈEËiifi} +
-INC num images IINCREXENTATION IMAGE +
-HLDEM LEFFACEMENT SOURLES +
-aff image JAFFICHAGE NOUVELLE IMAGE +
-Eaff num irage 'AFFICHAGE NUMERQ NOUVELLE IMAGE +
-SHCWM lAFFICHAGE SOURIS +
-ENDIF +
-RETURN +
-| wRdEREd kR E E E d kR d e d A d R E +
-| « DECREMENTATION DE L'ELEMENT COURANT * +
-L é e 3 e e e E É T o o T E 1 E +
-PROCEDURE dec_elément +
-IF element courant®==] +
-DEC element courants +
-HIDEM - 1 +
-éaff el courant +
-SHOWY . . +
-@atilclic +
-EXOTF +
-RETURR +
-I se e é d e rr dc r d e c e e e t e 6 e p e e +
-" * INCREMENTATION DE L'ELEMENT COURANT * +
-Lh e é e e e S e e A e E SE +
-PROCEDURE inc element +
-IF element courant#nb elementss: +
-INC element couraniy +
-HIDEM +
-Baff el courant +
-SHOWM +
-Fattüclic +
-ENDLF +
-RETURN +
-L h d e o e e e o e o e o e O r r Q +
-! * TEST.DE SORTIE DU PROGRAMME * +
-| e FÉ e REN E TEIETE +
-V d e e e r e r e É E d E d E it EN RE RE ket +
-* Cette routine met à jour la condition de sortie (sortiex)* +
-! * En fonction de la variable de réporse de la boife 7 +
--* c'alerte, : 2 +
-* sortie® =0 == l'utilisateur ne veut pas auitter le pra; “ +
-* sortie® =1 = l'utilisateur veut quitter le prds # +
-p e e “ e ce kAR n T E e d e d E d E R E E +
-PROCEDURE tst sortie +
-LOCAL tsth +
-LOCAL m$ +
-BEST OF GFA BASIC +
-m="Voulez—vous vraiment|quitter l'éditeur ? +
-ALERT 2,m#,1,“Mon|dui",tst* +
-IF tstw=e +
-sortie#el +
-ENDTF +
-RETURN +
-+
-=1} +
-A i e e v e A A o ke el m e o o o e E +
-* EXECUTION DES FONCTIONS DE L'EDITEUR * +
-e e e e e e e e e e e e e e e e e o o A e E +
-PROCEDURE exec fonction(evf) +
-SELECT evw +
-CASE 1 +
-éattüclic +
-Btst sortie +
-CASE Z +
-édec image +
-CASE 3 +
-@inc_image +
-CASE 4 +
-Battûclic +
-Fsauver images +
-CASE 5 +
-Battlclic +
-@lecture images +
-CASE 6 +
-Bdec element +
-CASE 7 +
-éi_ enlemecnt +
-CASE & +
-Émodif case +
-ENOSELECT +
-RETURN +
-+
-Wik e e d d RN AT R é E E R +
-* RECHERCHE DE LA 70NE DE CLIC * +
-se cr o e oy e o A o r e e e v e e e “ h d e +
-***l“kqi**t*ttt*tt*#fifiPi*tt*#tikflfi#i**tttit***ik:**#**t***# +
-* Cette routine renvoit le numéro de la zone “ +
-* correspondant aux coordonnées pxs et pys. 51 aucune zone * +
-* ne correspond aux coordonnées, elle renvoit 0. = +
-t;t*tt*k**kbi*tt**j**:**++fifiuittt*t**ti*llikit*#*##i**liilt* +
-FUNCTION chezronec (eh, peys) +
-LOCAL 1% +
-LOCAL mum_zones +
-LOCAL x1%,v1%,x2%,y2% +
-num_zona%=0 +
-FOR i%=1 10 nb_zones +
-x1%=#one*[{i#,1} 1 LECTURE x1 ZONE 1% +
-vlt=rone#(iw,7) | LECTURE %1 ZOME i% +
-w2%=zone%(i%,3) ! LECTURE %2 ZOME i% +
-véiezonet(i%,4) 1 LECTURE w2 ZOME i% +
-1F @tst zone(pk.pyk,x1%, y1%. k2%, y25) ! TEST ZONE #% +
-num zonek=ik +
-ENDIF +
-HEXT i% +
-RETURN num zone% +
-ATAR| MAGAZIME +
-ENDFUNC +
-L eh e ik AR Rk A R E RS ÉÉÉ R +
-* * ATTENTE SELECTION FONCFION EDTTEUR * +
-] *tt**;aæætw*u:*w:**#:i*#üùktt**tàtëlkiw* +
-i ***fiit*#tt*#ffl##i**ih*#'**tt**tifilikii*#ti#tt*#“*#i**lt*#t*# +
-| % Cette routine attend que l'utilisateur presse sur. une +
-' % zone de clic correspondant à une fonction de l'editeur. +
-! t*ttt#**kk:tw#tfl*tt**:t*ttt*:ifl*t**:i****Pii*t**t*##i**fiti*t +
-i : Sortie du programme +
-: CliC zone passage image inférieure +
-: Clic zone passage image supérieure +
-; €lic zone sauvegarde imagés +
-- Clic zone lecture imègés +
-+
-0ME +
-H— +
-« Ëlie-zone incrémentation élément courant +
-+
-0 U O O #= 4 3 # +
-(i position clic +
-FUNCTION att zone clic +
-LOCAL zone clic® +
-RFFEAT +
-éatt clic{clic x*,clic v | ATTENTE CLIC SOURIS +
-zune:filitfi=@nhurnhe_zflne[c11:_;#,c11:_j%} | TEST CLIC ZONE +
-UNTIL zone clic&0 | ATT CLIC ZOME +
-RETURN zone clic* | RENVOT KUMERO ZOWE DE CLIC +
-ENDFUNÉC +
-+
-+
-ok EaddERdd d rr e é d b d E +
-! = FONCTION PRINCIPALE DE L'EDITEUR * +
-| i s o el ol e T e e RR E A RE e e EN +
-PROCEOURE edit +
-LOCAL zone click +
-+
-sorties#=0 ! CONDITION DE SORTIE - Q +
-+
-zoné click~@att zome clic ! ATTENTE D'UN ORDRE +
-Eeuec_fnnctian{zune_;11cÆ:! EXECUTION DE LA FORCTION +
-EXIT IF sortie*=l ! TEST SI COWDITION DE SORTIE =1 +
-LOCP +
-RETURN +
-ï +
-1 dh d d é d d d e d S +
-' # PROGRAMME PRINCIPAL * +
-| P e S = E E E +
-PROCEDURE main +
-posx0==15 1 POSITION X DE L'IMAGE +
-posydé=3 | POSITION Ÿ DE L'IMAGE +
-num image*%=1l | INIT NUMERD IMAGE +
-element courantä=l ! INIT NUMERO ELEMENT COURANT +
-ginit clic | 1 INITIALISATION DES ZOKES DE CLIC +
-@init images 1 INTTIALISATION IMAGES DE DEBUT +
-éload elements("ELEMENTS.ELE") ! CHARGEMENT ELEMENT 5 +
-paff edit ! AFFICHAGE DE L'ECRAN D'EDITION +
-SHOMM 1 AFFICHAGE SOURLS +
-Bedit ! PROCFOURE D'EDITION +
-RFTURN +
-1 b b ik A e e o o É e e r e e e d kb +
-BEST OF GRA BASIC +
-+
-Æ +
-- Élic zone décrémentation élément courant & +
-: Clic dans l‘image. clic »% et clic y* contiennent * +
-*t**It**ttt*****i**ùfiùùlt*****iiihlkttt*tittt*k“iHt**fii*#**+ +
-e T L S +
-i e i,— +
-+
-T-" * +
-| # AFFICHAGE DES IMAGES CONSTRUITES * +
-1 = L +
-| RR ETE ok e o o e S RE E +
-dxhadthEttartEiTrEaNd bE +
-‘ © _ programme AFF IM6S * +
-En é c SE R IS ETE E E SE +
-T A A u e d e d u r R e r r e r +
-! # ) Patrick Leclercqg & ATARI MAGATINE * +
-| NN el i E ÉÉ E i e E e S E el R +
-RESERYE 50000 ! RESERVATION MEMOIRE POUR LE BASIC +
-OPTION BASE 1 +
-DIM images|(10,18,10) ! TABLEAU POUR LES IMAGES +
-DIM e ement§{256) ! TAELEAU POUR LES ELEMENTS +
-nb elements-2 ! NOMBRE ELEMENTS EN MEMOIRE +
-! LES INDICES DE TABLEAU COXMENCENT À 1 +
-ecran travall#=MALLOC(32000) ! 32000 OCTETS POUR ECRAN TRAVAIL +
-émaîn ! APPEL ROUTIME PRIRCIPALE +
-VOID MFREE(ecran travail&} ! LIBERATION RAM ECRAN TRAGAIL +
-END ! FIN DU PROGRAMME +
-I ARk EArEA ARt kR A AR R AR bR R R F R e d R d +
-* #* DEFINITION DE L'ECRAN DE TRAVAIL DU SYSTEME * +
-L e e e e e e e e e e e e e e o ol e e ol e e u " " i +
-PROCECURE def ecr log(ecran logiques) +
-VOID XBI05(5,L:ecran Togique*,L:i-1,-1) +
-RETURK +
-+
-I g ol e ol ol e e o u D e A O " +
-* * LECTURE D'UN TABLEAU D'OCTETS * +
-L RN R A U T R E RE +
-PROCEDURE 1nad tableau(nom$, VAR tab|()) +
-LOCAL adr datas +
-+
-adr datat=LONG{ARRPTR(£ab] (}}} +
-BLOAD nomt,adr datas +
-RETURIN +
-+
-1 e e dc nn e o ok e e ce ok e B h m e de b e s o e e b +
-\ # LECTURE DES CLEMENTS GRAPHIQUES. * +
-1 é É i E r e ol e É S S i D o +
-PROCEDURE load elements(nor$) +
-LOCAL 1% +
-LOCAL palf +
-+
-OPEM "i" , #1,nomi +
-palt=sPACE$(32} +
-BGET #1,VARPTR(pal51,32 +
-VOID XBI05(6,L:VARPTR(pal$}} +
-nb_elements*=INPF(#1) +
-| QUVERTURE DU FICHIER +
-1 LECTURE DE LA PALETTE +
-I DECLARATION PALETTE +
-! LECTURE MOMERE ELEMENTS +
-FOR 1%=1 TÜ rlll-_E'llîfifltfiäfi ! DEEUT BOUCLE LECTURE +
-element${i%)=5PACE$(134] ! RESERVATION MEMOTRE +
-BRET #i,VARPTR(element$41%));134 ! LECTURF ELEMENT i% +
-REXT i% | FIN BOWCLE LECTURE +
-CLOSE #l ! FERMETURE DU FICHIER +
-RETURN +
-| ÉÉN E ol o i o o o ol e o o e i +
-ATARI MAGAZINE +
-' * AFFICHAGE D'UN ELEMENT DE L'IMAGE * +
-e L Sk e e e e e c e e e e E e E +
-de e e e e o d e r e e e e e rr e e ok e r t rl ol o e e ol o o " i S E d E +
-! # imaget - Numéro de l'image à afficher “ +
-' * colonne® : Numéro de la colonne de l'élément (l à 18) * +
-' % lTlgne% : Numéro de la ligne de l'élémant (1 4 10) “ +
-1 E E d e r é s s +
-PROCEDURE aff element(image%,colonned, Jignet) +
-LOCAL pack, Dy +
-LOCAL num elements +
-+
-' LECTURE NUM ELEMENT +
-num. el ementi=images | (image%, colonnes, ligne#] +
-* CALCUL POS X ELEMENT +
-px&=[colonnes-1}*16+posx0% +
-* CALCUL POS Y ELEMENT +
-pys=({1igne#-1)"16+*posy04 +
-" AFFICHACHE ELEMENT +
-PUT px&,pyé,element${num elements) +
-RETURN +
-I drdrkabvrd i e s v ok o e e ol e s o R O +
-" * AFFICHAGE D'UNE IMAGE * +
-L ÉRTAAREd oA dodeA okR e ÉTEA +
-U ke e E e e ke E ke e o e o e g d e sl o ol el g o ol o r e el o e 0 o e ot e o i e o +
-* L'affichage ne se fait pas sur l'écran physique (l'écran” +
-* # l'Écran visible), mais sur un autre écran situé en # +
-! * mémoire (ecran travail%). Une fois 1'affichage X +
-| * complétement terminée, le programme recopie l'écran de * +
-* * travail sur l'écran physique qräce à la fonction Bmove. * +
-* * Cette méthode permet d'obtenir un affichage ultra-rapide“ +
-* * plus agréable à l'oeil. up +
-L é b b i ol e e S e e e e e o o o q e S S p e" i e e +
-PROCEDURE aff image(num images) +
-LOCAL ix%,iy4 +
-@def ecr log{ecran travail&}l| ECRAN TRAVAIL = ECRAN LOGIQUE +
-cS O ! EFFACEMENT DE L'ECRAM LOGIQUE +
-FOR iy&=1 TO 10 +
-FOR ix<=l TO 18 +
-Baff element(num imagek,ix%,iy%)! AFFICHAGE D'LN ELEMENT +
-NEXT 1X% +
-MEXT 146 +
-Édef ecr log(XBI0S{Z)) | ECRAN PHYSIQUE - ECRAN LOGTQUE +
-BMOVE ecran travail®,XET05(2),32000 ! A7F ECRAN DE TRAVAIL +
-RETURN +
-+
-+
-| ANA o e ek E E +
-' € PROGRAMNE PRINCIPAL * +
-1E 4 E R E A E E d o de 3 d E o e +
-FROCEQURE main +
-LOCAL 1% +
-+
-posxûs=lh L INIT PDO5 X IMAGE +
-posy0#=3 ! INIT FOSI Y IMAGE +
-@load elements("ELEMENTS.ELE") | CHARGEMENT ELEMENTS +
-@loëd tableau("IMAGES.IFG",images|()) ! CHARGE CODAGE IMAGES +
-FOR i%=1 TO 10 +
-Baff image{i%) +
-VOID INP(2) +
-NEXT i% +
-RETURN +
-| AFFICHAGE IMAGE 1% +
-| ATTENTE CLAVIER +
-BEST OF GPRA BASIC +
-GRAPHISME EN GFA BASIC +
-FABRICATION +
-PAR ASSEMB +
-IMAGES +
-SE SPRITES +
-Un légo informatique +
-Voici une technique permettant de dessiner des images à partir de +
-sprites qui est beaucoup utilisée par les développeurs de jeux +
-vidéo pour fabriquer des images avec peu de place mémoire. +
-Qu'est-ce qu'un sprite ? +
-Un sprite est une image pouvant s'afficher en superposition sur un +
-fond graphique quelconque. Contrairément à une image rectangulaire +
-‘affichée avec l'instruction graphique PUT, un sprite peut avoir +
-n'importe quelle forme. | +
-Les sprites peuvent être utilisés pour réaliser des animations divers +
-(monstres de jeux vidén, vaisseaux spatiaux, lettres se déplaçant sur +
-l’écran, ete.) Os peuvent aussi être utilisés pour dessiner des images à +
-partir d'éléments graphiques de base. +
-Affichage d'un sprite +
-Le GEA Basic dispose d’une instruction SPRITE mais celle-ci est tellement +
-peu PË]'EÜI'…EIHOE q'l_lpfil_ll.':. N FH-:.':;E['IT.E dl LEIL I-IHÉ'].Ë'Î- POUE TLOHIS. +
-Elle ne peut afficher que des sprites dessinés en deux couleurs et ne +
-pouvant faire plus de 16x16 pixels. Pour afficher un sprite en 16 couleurs +
-et de dimensions quelconque, il faut uriliser les opérateurs gra +
-phiques logiques. +
-Un sprite est constitué de deux images: la forme et le masque La +
-forme contient le dessin du sprite réalisé sur un fond de couleur 0. +
-Le masque est un dessin en couleur © réalisé sur un fond de couleur +
-15. Les pixels en couleur D du masque correspondent aux pixels +
-affichables de la forme. Les pixels en couleur 15 du masque correspondent +
-aux pixels non alfichables de la forme. +
-Le masque doit être affché avant la forme. Le masque est affiché +
-avec l’opérateur graphique logique AND ec la forme avec l'opérareur +
-graphique logique OR +
-L'instruction PUT peut afficher une image avec un opérateur graphique +
-logique. Le type de l'opération logique doit Être précisé apres +
-la variable alphanumérique (1 pour opérateur AND et 7 pour opérateur +
-ÜR), +
-! Opérateur AND +
-| Opérateur OR +
-PUT px,py,masque$,+
-PUT px,py; formes, ? +
-Un article présentant les Üpémt-::ur: graphiques logiques ct quüïq'.l-::-: +
-exemples d'utilisations dans ce numéro. +
-Génération d'un sprite +
-Pour avoir un sprite, il faut dessiner le masque et la forme. Le dessin +
-du masque est une opération délicate. C'est souvent la hantise des +
-sraphistes, On peut simplifier les opérations en générant le masque +
-ét la forme à partir d’une seule image. Cette image doit être dessinée +
-sur un fond de couleur 15. On dit alors que la couleur 15 est une +
-couleur transparente, puisque les pixels en couléur 15 du sprite ne seront +
-pas affichés sur l'écran. Puisque la couleur 15 n'est pas affichee +
-sur l’écran, les sprites ne sont pas dessinés en 16 couleurs, mais en 15 +
-(de la couleur Q à la couleur 14). +
-Table des couleurs VDI +
-Avant d'étudier la transformation d’une image en masque et sprite, il +
-faut étudiér la manière dont le GFA Basic gère les numéros de couleurs. +
-Les fonctions graphiques du GF4 Baste n'utilisent pas le codae +
-normal des couleurs, mais le codage couleurs des fonctions graphiques +
-VI (implantés dans les ROMS du 5T). +
-Par -E]{f:mpk, le numeéro de couleur VDI n:-:rrr-:apnud à la couleur 15, +
-Lorsqu'une fonction graphique du GÆ4 Basic dessine un pixel en +
-couleur 1, elle écrit dans la mémoire vidéo la valeur 15 cc non la valeu1r. +
-teeeee==== fussus ismit #. Fun=us=zen +-----acumem | +
-| Numéro | Muméro | | Mumëro | Numéro | +
-| Couleur | véritable | | couleur | véritable | +
-| GFM/VOI | couleur | | GEM/VDI | couleur +
-d{csuestiees Lo L t e PE e e fommmmm——— + +
-e | 0 [ £l S p 7 | +
-[t el R i, -y S|[OS +
-| 2 | ! [ B 3 | +
-| 3 æ PR = 0l | +
-1= | 4 D LR i M | +
-M5 ekl T i A = . | +
-[ | E I b T = I | +
-dl | 5 el E RE E | +
-Fau=s=——-——=- S RE + F-ponmen-- TGSS + +
-ATARI .MMGAEIHLW GESTOF GRA BASIC +
-N — —s se +
-Le çudgäç de couleur VIN n'est pas utilisé par ous e programmes +
-ST. Les logiciels de dessin graphiques (Deges Efite par exemple) urilisent +
-les vrais numéros de couleurs. Les opérateurs graphiques logiques +
-qui agissent sur les couleurs au niwau codage binaire ont besoin +
-des vrais numéros de couleurs. Pour obtenir la couleur 15 dans +
-la mémoire écran, il faur utiliser la coulsur 1 en GFA Basic. +
-Fabrication d'une forme de sprite +
-L'image de base du sprite est le dessin du sprite réalisé sur un fond de +
-couleur 15, La forme est le dessin du sprite réalisé sur un fond de +
-couleur Ü. Pour générer une forme à partir d'une image de base, il +
-faut changer tous les pixels de couleur 15 en couleur 0. Pour le GFA +
-flasic, en tenant compte du transcodage de couleur, il faur convertir +
-tous Jes pixels de couleur 1 en couleur O, +
-La procédure Ëgen forme fabrique ure forme à partir d'une image +
-de base, L'image de base est située à la position (px5,py5). Flle mesure +
-tx% pixels de lange et ty% pixels de haut +
-| ULAREHHAAARRREETE ÉÉ R SREE SREE +
-! * FABRICATION FORME SPRITE * +
-I RRFN ERETRÉEEeaa E N +
-PROCEDURE gen forme[pxs,pyt, L%, L) +
-LOCAL xpos*, ypos® +
-FOR ypost=pyt TO pyttys-] +
-FOR xpos®=px= TÜ pxi+ixs-1 +
-IF POINT(xpos%,yposs)=1 +
-COLOR 0 . +
-PLOT xposs,yposs +
-ENDIF +
-NEXT xpos +
-NEXT wposs +
-RETURN +
-Fabrication d'un masque de sprite +
-L'image de base du sprite est le dessin du sprite réalisé sur un fond de +
-couleur 15. Le masque est un dessin en couleur 0 réalisé sur un fond +
-de couleur 15. Pour générer un masque à partir d'une image de base, +
-il faue changer tous les pixels de couleur aurre que 15 en couleur O, +
-En tenant compte du codage couleur du GE4 Basic, 1l faut convertir +
-tous lés pixels de couleur autre que 1 en pixels dé couleur O, +
-La procédure Égen masque fabrique un masque de sprite à partir +
-d'une image de base située à la position (px%, py%). Elle mesure px* +
-pixels de large et py* pixels de haut. +
-1 -ll.-g:*-‘_—***lfi'k#'.l':l:t:'::':'.'::':*:fi:*:‘::‘::t‘fl"fi"fi"fi"fi'fi"fi' +
-! * FABRICATION MASQUE SPRITE * +
-I E a T TR TS CM E E e e E E A d d d A S +
-PROCEDURE gen masque{px®,pyé,tx4, ty4) +
-LOCAL xpos%,yDos%h +
-FOR ypos%=py% TO pyettys-1l +
-FOR xpos%=px= TO pxéttxs-1 +
-IF POINT(xpos*,ypos&)<=1 +
-COLOR O +
-PLOT xpost,yposs +
-ENDIF +
-NEXT xpos% +
-NEXT yposh +
-RETURN +
-Le programme GENSPRIT +
-Le programme GENSPRIT fabrique des sprites (masques et formes) +
-à pareir d’une image Deges Elite et les stocke dans un fichier disque. +
-Le contenu de ce fichier peut être utilisé par divers autres programimes. +
-d bN RR R e e REF +
-É GENERATEUR DE SFRITES p +
-e g e o o A T A R R é o d o d E RE O +
-* Programme GENSPRIT.GFA — * +
-E E ue r e r RE ETÉT TRI AXX +
-* (C) 1991 Atari Magazine * +
-* (C) 1991 Patrick Leclercg * +
-PR E E e E d3 EN +
-RESERVE 50000 +
-OPTION BASE 1 +
-DIM sprites(255,2) +
-* spriteh(né,1) = Masque sprite n% +
-“ spritef(n&,2) = Forme sprite n +
-Émain +
-END +
-R o o b Tk M B o B A e o N T +
-! * PROCEDURE PRINCIPALE * +
-| ÉF AAAARANRR RR RR RE E +
-FROCEBURE main +
-@gen sprites +
-@sauve sprites["SPRITES.BIN"+
-RETURN +
-=U E E E E S E E E E r S — rrr S +
-hhh k khh de o é ok W Wl e r d e o e e e +
-* CHARGEMEMT IMAGE DEGAS ELITE * +
-P R R E R AR R A ds d R E A AR E E E +
-FhEEA kAR ERRAAAFELF TR AR AR RE RRES E +
-* Cette procédure stocke la palette = +
-| * de couleur de l'image DEGAS dans ” +
-! % 14 variable globale palettet. r +
-D E RN W A R e e e d d ol ke d d E o E +
-PROCEDURE loäd degas(nom$) +
-palettef=SPACES(32) +
-OPEN "i",#1,nom$ +
-SEEK #1,2 +
-BGET #1,VARPTR(palettei),3? +
-VOID XETOS(6,L:VARPTR(palette#])) +
-BGET #1,XET0S(2) , 32000 +
-CLÔSE #l +
-RESERVE MEM +
-OUVRIR FICHIER +
-SAUTER ENTETE +
-CHARGE PALETTE +
-MODIF PALETTE +
-CHARGE IMAGE +
-FERMER FICHIER +
-s —— - — — ™ =— LIs +
-ATARI mmaa.äuNF BEST OF GFA BASIC +
-e B P R o e B B B e R e EE e +
-Y T T e b b L R e DL LS é r e e d e +
-' * FABRICATION MASQUE SPRITE * +
-1 e e e e d ol r e iy o e e d ok o o o e e R +
-PROCEDURE gen masque (px, pys, ta%, tys) +
-LOCAL xpos%,yposs +
-FOR ypos%=py¥ TO pyx+ty%-1 ! BOUCLE EN Ÿ +
-FOR xpos%=px% TO pa%+tx%-1 | BOUCLE EN X +
-ÏF POINT(xpos%,ypos%s)==1 ! TEST COULEUR <=15 +
-COLOR À ! FIXE COULEUR PIXEL +
-PLOT xpos%,ypos% ! TRACE PIXEL +
-ENDIF +
-NEXT xposs +
-NEXT ypos% +
-RETURN +
-— r B BE ORI T O B R UER SRR r E +
-I ek ÉN b E ket = AW +
-! * FABRICATION FORME SPRITE ”* +
-| tkhéaa e ki R R d e R A R T A ko +
-PROCEDURE gen forme(px*,pyfé, tx%, tyé) +
-LOCAL xpos%,yposs +
-FOR ypos*=pys TO pys+tys=-1 | BOUCLE EM Y +
-FOR xpos%=px% TÜ pa%+tx%-1 ! BOUCLE EN X +
-IF POINT(xpos%,ypos%)=1 | TEST SI COULEUR 15 +
-COLOR O ! FIXE COULEUR PIXEL +
-PLOT xpos%k,yposs ! TRACE PIXEL +
-ENDIF +
-NEXT xpos +
-NEXT ypos% +
-RETURN +
-P E P P E P A A TT E TT C OR R +
-| e e e e T E r V r e e e e e e e +
-' * SAISIE D'UN SPRITE SUR L'ECRAN * +
-| VRN TTAAREÉEtERREREE RR v e E RE RE +
-PROCEDURE 5&151&_5prite[nä,pnä.ÿyfi,t:ë.tï%} +
-LOCAL image$ +
-LOCAL px?%,pyes +
-pxi4=pxs+txs=1l +
-pyZE=pyi+iy%-1 +
-GET px%,py¥%s,pxe%s,pye%s, images | MEMORTSE IMAGE +
-Bgen masque(px%,pys,txs, Lyk) ! FABRIC MASQUE +
-GET pxH,pyt.px23,py2$,spritet(ns,1) ! SAISIE MASQUE +
-PUT px%,py%, image$ +
-Égen forme(px®,pyés, txés, Lyk) +
-RETURN +
-P TEI BN T L NN N SR LR +
-| RESTAURE IMAGE +
-| FABRIC FORME +
-GET pxd,pys,px?%,pyes,spriteb(n®.2) ! SAISIE FORME +
-| e e 3 & 0 RR W WO R ki o e ek +
-' # GENERATION DES SPRITES * +
-| HE TEI ER X +
-PROCEDURE gen sprites +
-LOCAL nom_image$ +
-LOCAL n% +
-LOCAL pxs pys +
-LOCAL tx%,ty +
-DO +
-READ nom_imaged LIRE NOM IMAGE +
-EXIT IF nom image$="#FIN" 1 TEST SI FIN +
-@load degas(nom imagef! | CHARGE IMAGE +
-Do +
-READ n% ! LIRE NUMERO SPRITE +
-EXIT IF n%=-1 | TEST SI FIN SPRITE +
-READ px* | LIRE POS X SPRITE +
-READ pys | LIRE POS Y SPRITE +
-READ tx* ! LIRE TX SPRITE +
-READ 1y% ! LIRE TV SPRITE +
-1 INC nb spritess UN SPRITE DE FLUS +
-Bsaisie sprite(nk,px®,pyt,txe, tyk) +
-LOOP +
-LOOP +
-RETURN +
-P ETE E E P r r M r R rr rr e R e r e e e e e e e M e M e e e +
-1 éh e E S E e e r é e e e d d e e ue e +
-' * SAUVEGARDE DES SPRITES SUR DISQUE * +
-E A kAR At e rr d e d e e 1 A R E E E RE RE +
-PROCEDURE sauve sprites(nom$) +
-LOCAL n% +
-LOCAL taille* +
-LOCAL adr_masques +
-LOCAL adr_formes +
-OPEN "o",#1,nom$ +
-EPUT #1,VARPTR(palette$),32 !5AUVER PALETTE +
-FOR n&=1 T0 255 ° +
-taille*=LEN(sprite5{n&,1}}) — !TAILLE IMAGE +
-IF taillete=0 IPRESERCE SPRITE ? +
-BPUT #1,YARPTR(n%),4 ISAUVER NUM SPRITE +
-BPUT #1,VARPTR(taille*),4 !SAUVER TAILLE +
-adr masque*=VARPTR(sprite$(n#,1)) IADR MASQUE +
-BPUT #1,adr masqueS,tailles I5AUVER MASQUE +
-adr formeS=VARPTR(spritef(n®,2)) — !ADR FORME +
-BPUT #1,adr forme%,taille* ISAUVER FORME +
-ENDIF +
-NEXT n* +
-n==0 ; | INDICE FIN DE SPRITE +
-BPUT #1,VARPTR{n%),.4 ISAUVER INDICE FIN DE SPRITE +
-CLOSE #1 ! FERMETURE FICHIER +
-RETURN +
-+
-ATARI MAGAZINE m BEST OF GFA BASIC +
-N . --““F———-_“---H________------------ +
-| RR RE AN LRk kR TR AT Ak kT oy +
-! * FORMAT DE DEFINITION DES SPRITES # +
-i h;xgttt**tt*fliE!w*flfi#*ti****iiïättt*** +
-—— - +
-DATA IMAGEI.FIl +
-DATA 1,0,0,32,20 +
-DATA 2,34,0,21,20 +
-DATA 3,61,0,9,44 +
-DATA 4,76,0,72,18 +
-DATA -1 +
-—0 N N N N N E E srr +
-DATA IMAGEZ.PI1 +
-DATA 5,158,0,33,41 +
-DATA 6,201,0,21,27 +
-DATA 7,232,0,40,47 +
-DATA -1 +
-[ ——————E +
-DATA IMAGE3.PIL +
-DATA 8,277,0,9,10 +
-DATA 9,292,0,12,17 +
-DATA -1 +
-DATA *FIN +
-Ce programme peut générer des sprites à partir de plusieurs images +
-Degas Elite. Le nom des images est stocké dans les lignes de DATA +
-avant la position des sprites. La valeur -1 indique la fin des sprites +
-de l'image couranté. La chaîne de caracrères *FIN indique qu'il n'y à +
-plus d’images à charger et donc plus de sprites. +
-Les sprites sont dessinés sur un fond de couleur 15, Is sont définis +
-dans le programme sous la forme d’un numéro, d'une position PX, +
-d'une posidon PY, d’une largeur TX et d'une hauteur TY. Le +
-numéro est le numéro de référence du sprite Les numéros de +
-rélérence n'ont pas besoin de se suivre. Il est possible de définir le +
-sprite 12 À la suite du sprite 6. Cette technique permet d'insérer un +
-mouveau sprite dans la liste sans être obligé de renuméroter tous les +
-sprites suivanits, +
-Fonctionnement de GENSPRIT +
-Les sprites sont stockés dans le tableau sprite$(). Le masque du +
-sprite n* est stocké dans la variable sprite$(n&,1} er la forme dans +
-la variable sprite$(n%,2). Le tableau sprite$(} est déclaré avec +
-255 éléments, mais peut être agrandi à volonté +
-La routine @load degas charge une image Degas Elite sur l’écran. A +
-la différence des routines de chargement présentés habituellément +
-dans cette rubrique, la palette de couleur de l'image n’est pas stockee +
-dans une variable locale, mais dans la variable globale palettes. Le +
-contenu de cette variable est utilisée par la procédure ©sauve +
-sprites. | | +
-La procédure Bgen_masquel px%, py%s, txs, t v&) fabrique un masque +
-à partir de l’image située à la position (px*, py&) et de dimensions +
-(tx%,ty%). La procédure Bgen forme(px*,py&,tx#, ty%) fabrique +
-ue forme de sprite à partir de I'image située à la position +
-(pxk,pyé) et de dimension [txs tyé). +
-La procédure Ésaisie _sprite fabrique le masque et la Fcrrmc_ld’ufu +
-sprite ec sauve le tout en mémoire, Le dessin du masque modifie l'image +
-originale du sprite, c'est pourquoi @saisie sprite sauve dans +
-image$ l’image du sprite et la réaffiche après avoir généré le masque. +
-La routine Bgen sprite supervise la fabrication des sprites, Elle +
-charge les images Degas Elite, lit les données des sprites et appelle les +
-procédures de fabrications du masque et de la forme. Clest la routine +
-la plus impartante du programme. +
-Sauvegarde des sprites +
-:n::gn fichier disque +
-La procédure Ésauve sprites(nom$) sauve les sprites dans un fichier +
-disque portant le nom nom$. Le fichier commence par 32 octets +
-contenant la palette de couleurs utilisée par les sprites, suivis du +
-stockagé des sprites. Les sprites sont scockés sous la forme du +
-numéro de sprite (4 oetets), la taille d’un élément graphique (4 octets +
-- taille du masque et de la lorme), du masque et de la forme. La fin +
-du fichier est signalée par la valeur 0 stockée sur 4 octets. +
-BPUT #1,VARPTR(n%),+
-BPUT #1,VARPTR(taille*),+
-[es variables n et taille% sont sauvées sous la forme d'unc zoné +
-mémoire de 4 octers car elles occupent 4 octets en mémoire. La fonetion +
-VARPTR{var) fournis l’adresse de la variable var (quelque soir le +
-type de variable). ; +
-Amélioration de GENSPRIT +
-1l est possible de stocker les coordonnées des sprites dans un fichier +
-texte et de modifier GENSPRIT pour qu'il extraie les informations +
-dont 1l à besoïn à partir de ce fichier. +
-Cela évite de modiliér le programme pour générer un nouveau fi +
-chier de sprites. Cela permet aussi d'avoir une version compilée de +
-GENSPRIT ne prenant que peu de place disque e s'exécutant plus - +
-pidemert que la version interprété. Le fichier texte pourrait ressembler +
-à cec +
-w A e A e ol o r o oA i e e e r ok oy E E +
--* DEFINITION SPRITES * +
-; HR g ok e ok okl e ok e e RR RE +
-IMAGE1.P[1 +
-10 037 20 +
-= 34 Q 21 20 +
-361 0 9 44 +
-4 76 0 72 18 +
-TMAGEZ . P11 +
-5 158 0 33 41 +
-é 201 0 21 27 +
-7 232 0 40 47 +
-IMAGE3.PTI1 +
-& 277 09 10 +
-à 292 0 12 17 +
-*FIN +
-- ATARI WHEWHEH OFGFA BASIC +
-Vous pouvez aussi ajoutez à GENSPRIT la possibilité de sauver des +
-sprites dans un fichier qui en contient déja, évitant ainsi de redessiner +
-des sprites déja faits. +
-Il est possible de stocker le numéro et le nombre d'octers d'un sprire +
-dans une vartable de type entier 16 bits (symbole &), Cela représente +
-une économie de 4 octers par sprites. Mais il faut fairé attention à ne +
-pas mélanger les symboles % et & dans le corps du programme. +
-EPUT n&,VARPTR(n&,) ? +
-BPUT taillek, VARPTR(taille&),+
-Si le nombre de sprites ne risque pas de dépasser 255, 1l est méme +
-possible de stocker le numéro de sprite dans une variable du type byte +
-(symbole |). Cette varable n'occupe qu'un vetet. La sauvegarde +
-de cet octet peut se faire avec l'instruction BPUT, ou avec l'instruetior +
-OUT. +
-EPUT n| ,VARPTR(n|},+
-OUT #l,n| +
-Utiliser des variables de différents types en GEA Basic est risqué, car +
-1l est facile de r_'ha.ngtr Wift '::}lml.üle k en %, ou [ en %, voire méme +
-d'oublier complètement le symbole de rype. Ce genre d'erreur est +
-toujours très difficile à repérer, Pour éviter cela, il est préférable d'utiliser +
-un type unique de vatiable et de s’y tenir. 5i l'utilisation d’une +
-variable particulière vous permet d'optimiser votre programme (gain +
-de place mémoire ou de vitesse d'ecécucion), 1l faut mettre de nombreux +
-commentaires dans votre programme, de manière à ne pas oublier +
-que cette variable est différente des autres. +
-Fabrication d'une image +
-par assemblage de sprites +
-Le programme DRAWIMG fabriqué des imagés én affichant les uns par +
-dessus les autres plusieurs sprites. Ces sprités sont chargés à partir +
-d'un fichier disque généré par le programme GENSPRIT. +
-DE ok b AN RE E N e D d e é r B +
-L CONSTRUCTTON D* IMAGES * +
-N A FARTIR DE SPRITES 7 +
-| deded o ok s ke o de ko ok ok e e W e i e T E +
-| * Programme DRAWIMG.GFA 5 +
-! '.t'.l.-l.tttt***tt*tfl'*'fl"fi*#It*t**#*fi! +
-x (C) 1991 Atari Magazine ; +
-* (C) 1991 Patrick Leclerca * +
-I HFEERP R e ce e e S e e e e e S e C +
-RESERVE 100000 +
-OPTION BASE 1 +
-o s e r e i o e -t - e e e i S P - e e e e Ty +
-i —HRR RR E +
-' * MEMORISATION DES SPRITES * +
-DR E R E N E A RE +
-DIM sprite5(200,2) +
-' spritef(n#,1} = Masque sprite n% +
-| sprites(n*,2) Forme sprite n% +
-— E S E E E S E E — — — ——— — S E E +
-U o o e e RR R e e e ol o o ke bR e A ETE +
-! = MEMORISATION DES IMAGES * +
-R TRR E E S +
-DIM image%(50,40,3) +
-DIM taille image*(50) +
-| image%(img®,n#,1) = Num sprite n% +
-* imagé%(imgé,n#,£) +
-+
-Emain +
-END +
-1NA AN YW REER +
-' # PROCEDURE PRINCIPALE * +
-I o ol L d e e e de 056 o r i e r r i d e e EN +
-PROCEDURE main +
-Bcharge sprites("SPRITES.BIN"+
-Binit_images +
-Bdemo images +
-RETURN +
-- image img® +
-Pos À sprite n% - image img® +
-* image%(img%,n%,3) = Pos Ÿ sprite n%- image img% +
-= ——R R S S B O S S r sC E R N A OE . +
-O R é e L e e e é r é é d d e e d E +
-: # DEMONSTRATION CONSTRUCTION IMAGES = +
-| XE EARÉÉETEEÉEREÉ AÉRT RAS R&RA TN &ÉR +
-PROCEDURE demo images +
-CLS +
-UJR +
-LOCATE 1,1 +
-INPUT "Mum image (0 pour fin) ",img% +
-EXIT IF img#=0 +
-CLS +
-PRINT img# +
-@draw imaçe{img#, 100,100) +
-LOOP +
-RETURM +
-| RAAHRETEEEEATERAAARREÉÉÉRRRE +
-' # AFFICHAGE D'UN SPRITE ?* +
-\* DU TABLEAU sprite$() * +
-I VRRRERERTEETTTERTERTEERrTENFRE +
-# n : Numéro sprite # +
-E px% : Pos X sprite ¥ +
-|* ps : Pos Y sprite # +
-l'VRRRAERTRER NETER E TE E TEETTE +
-PROCEDURE aff sprite(n%,px%,py#+
-PUT px%,py&,spritet#(n&,1},+
-PUT px%,pyé,spritef(n&,#),+
-RETUREN +
-PE g vy E E e e E E e e e g RE S +
-I AT E E E d d d E E e d d EN +
-\* AFFICHAGE DE L'IMAGE img& * +
-ATAR| MAGAZINE mEEÈÏ OFGRA BASIC +
-| AFFICHAGE MASQUE +
-| AFFICHAGE FORME +
-+
-+
-+
-+
-+
-+
-=—e ; +
-=— +
-= = +
-.--I.:| el | ! +
-+
-Ë +
-0 e e r e Tt et e e e “ f e e e e e S E +
-* img5 : Numêrô image 7 +
-* posx* : Position X affichage * +
-* posys : Position Y affichage *, +
-e e v v e e e d e i iy o i i e d A A E +
-PROCEDURE draw_image [1mg%,posx%, posys) +
-LOCAL n% +
-LOCAL sporites +
-LOCAL px#,py +
-FOR n&=1 T0 taille image%(img%) +
-spritet=image*(img#,n#,1l) ! NUMERO SPRITE +
-pxk=images (img%,n%,2)+posx% | PX SPRITE +
-pys=image%(imgs,nw,3)+posy* ! PY SPRITE +
-Gaff spri te(spritex,pxé,py&) ! AFF SPRITE +
-MEXT n% +
-RETURN +
-SE E T E E A r r r r r r e r r r e e e M e e +
-f e d e e d d e e e e e r e d r é e e e d e +
-* CHARGEMENT DES SFRITES * +
-u À PARTIR DU DISQUE w +
-< de-de de et A A e e e r e e e é f R E SE +
-* Les sprites sont lus à * +
-* partir du fichier nom$ * +
-I s e W W W ko oo o o o ol o el i o e e e +
-PROCEDURE charge sprites(noms) +
-LOCAL pal} +
-LOCAL n% +
-LOCAL taïlle% +
-LOCAL adr masques +
-LOCAL adr formes +
-OPEN "1" ,#1,nomk +
-pal$=SPACES(32) +
-BGET #1,VARPTR(pal$),32 +
-! QUVERTURE FICHIER +
-| RESERVE 32 OCTETS +
-| CHARGE PALETTE +
-VOID XBIOS(6,L:VARPTR(pal%)) ! CHANGE PALETTE +
-CO +
-BRET #1,VARPTR(né, )4 +
-EXIT IF n%=0 +
-BGET #1,VARPTR{taille%).4 +
-| CHARGE NUM SPRITE +
-| TEST FIN FICHIER +
-| CHARGE TAILLE SPRITE +
-spritef(n&,1)=SPACES(taille%) ! RESERVE MEM MASQUE +
-spritet{n#,2)=SPACE$ (taille%) ! RESERVE MEM FORME +
-adr masque%=VARPTR(sprite$(n#,1}} ! ADR MASQUE +
-adr forme*=VARPTR(sprite$(n&,2}) +
-BGET #1,adr masques,tailles +
-BGET #1,adr formes,taille# +
-LOOP +
-+
-CLOSE #l +
-RETURN +
-_._l_r-|_|_|.u|_|-"-----———h------—----- +
-D e e oy e e e o ol d o e ok o e el e A O O T o CC +
-\ * INITIALISATION DES IMAGES * +
-] ADR FORME +
-! CHARGE MASQUE +
-! CHARGE FORME +
-! FERMETURE FICHIER +
-ATARI MAGAZINE +
-L RR RR AI R NNN A É E RRN +
-FROCEDURE init_imagés +
-LOCAL num image% +
-LOCAL nb_sprites% +
-LOCAL n%,px%,pys +
-RESTORE def_images +
-Do +
-READ num image* +
-EXIT IF num imaget=0 +
-nb spritess=0 +
-Do +
-READ n +
-EXIT IF n%=-1 +
-READ px%,py% +
-INC nb spritesk +
-imagek (num image%,nb_sprites%,1)=n% +
-image%{num image%,nb_sprites%,2)=px% +
-image%(num image%,nb_sprites%,3)=py% +
-LOOP +
-taille image%(num image%)=nb_sprites* +
-LODP +
-RETURK +
-o e e R e e o e N N B +
-i ***1**titt****fli!iittt***** +
-* DEFINITION DES IMAGES = +
-g e g o e e e T R R o o R RE +
-DATA num sprite,px,py +
-DATA num sprite,px,py +
-DATA =1 +
-def images: +
-| ol i Wk ik o e dr e e e i +
-* * PREMIERE IMAGE * +
-TLRSU US ok REN +
-DATA 1 +
-DATA 1,10,10 +
-DATA 2,20,20 +
-DATA 3,40,40 +
-DATA -1 +
-— +
-| AN AAEEEERH +
-! * SECONDE IMAGE * +
-E TT o ok ol e ol ol e RE RR A A A S +
-DATA 2 +
-DATA 4,10,10 +
-DATA 5,16,15 +
-DATA 6,30,30 +
-DATA -1 +
-| RENAAATE +
-| * TROISIEME IMAGE * +
-| whRr Rkr ki L +
-DATA 3 +
-DATA 2,0,0 +
-DATA 7,3,3 +
-DATA B,28,37 +
-BEST OF GFA BASIC +
-DATA 9,20,:0 +
-DATA -1 +
-| dededede i @ ok o o b ke oo e o o o ol kel +
-' * QUATRIEME IMAGE * +
-| T o T e ÉÉ RE +
-DATA 4 +
-DATA 2.0.0 +
-DATA 7,5,5 +
-DATA 1,2,7 +
-DATA -1 +
-ï +
-g A d d de 0 ol o o A e S +
-| * FIN DE DONNES ™ +
-S whEEEETdktdthk kAW +
-DATA © +
-Chaque image est définie par une série de sprites. Ceux-ci sont +
-eux-même définis par un numéro de référence ct uné position d'athchage. +
-Ils sont affichés dans l'ordre d'appararition: le premier sprite +
-est affiché en premier, suivi du second, etc, La position d'atfichage +
-est relarive au bord de l'imageL'image peut être affichée à n’importe +
-quel endroir de l’écran. La valeur -1 signale la fin d'une image. La valeur +
-O signale que la dernière image vient d'êcre définie, Les numéros +
-des sprites sont les numéros de références qui ont Été assignés aux +
-sprites dans les instructions DATA du programme GENSPRIT, +
-Fonctionnement de DRAWIMG +
-Les sprites sont stockés dans le programme DRAWIMG de la même manière +
-que dans le programme GENSPRIT, c'est-àdire dans le tableau +
-sprite$(). La procédure Bcharge sprites(nom$) charge les +
-sprites du fichier nom$ dans le tableau sprite$(). La valeur © est le +
-signe de fin de fichier. La taille et le numéro des sprites qui sont stockés +
-sous la forme de 4 octets sont lus avec l'instrucoon B6ET, +
-PROCEDURE charge sprites(nom$) +
-LOCAL pal$ +
-LOCAL n# +
-LOCAL taille® +
-LOCAL adr masque* +
-LOCAL adr _formes +
-+
-OPEN "1" ,#1,nomk +
-pal$=SPACE$(32) +
-BGET #1,VARPTR{pal%).3? +
-VOID XBI0S(6,L=VARPTR(pal5)} +
-Do +
-BGET #1,VARPTR{n%),+
-EXIT IF n%=0 +
-BGET #1,VARPTR(taille%.)4 +
-spritef{n*,1)=SPACE$(taille%)} +
-spritef(n*,2)=SPACE$(taille*) +
-adr_maquE%;UAHPTH{SpthE$[n%,ljj +
-BGET #1,adr masque%,taillew +
-adr_forme%=VARPTR{sprite{n%,2)] +
-BGET #1,adr forme%,tailles +
-LOOP +
-CLOSE #1 +
-RETURN +
-La procédure ouvre le fichier en lecture, charge les 32 octets de la palette +
-de couleur des sprites, puis utilise la fonction système +
-XBIOS(6) pour remplacer la palerte l’écran par la palette des sprités. +
-La procédure @init_images charge la définition des images à partir +
-des DATA, Les images sont stockées dans le rableau image=(}. Le tableau +
-tai ! le image%(img%) contient le nombre de sprites de l'image +
-img% La routine Éinit images utilise une double boucle +
-D0-LO0P La boucle interne s'oceupe de lire la position des spntes +
-définissant une image. La sortie de la boucle est assurée par une inst +
-ruction EXIT IF lorsque le programme rencontre la valeur -1 sigralant +
-la fin de l'image courante, +
-La rourine @draw image affiche l'image img& à la position posxs et +
-posy&. Elle lit les donnés définissant le sprite et utilise la procédure +
-Gaff sprite qui affiche un sprité à une position quelconque de +
-l'écran. Leur position d'affichage sur l'écran est calculée en ajoutant +
-la position relative du sprice et sa position d'affichage sur l’écran. +
-PROCEDURE draw image(img®,posx®, posy#) +
-LOCAL n% ; +
-LOCAL spritez +
-LOCAL px%.py% +
-FOR %=1 T0 taille imagek(img¥) +
-spritet=image%{img&,n#,1) +
-pxi=image%(img&,nt,#)+posx* +
-py*=image%{(img®,n#,3}+posys +
-Baff sprite(sprites, px* , py&) +
-NEXT n +
-RETURN +
-La procédure @demo images est une procédure de démonstration +
-qui permet de visualiser les images existantes. Flle demande un +
-numéro d'image à Putilisateur et dessine celle-ci. 51 lutilisateur +
-frappe sur la touche [0], le programme s'arrête, Cette procédure n'a +
-pas grande importance. Ce n'est qu’un banc d'essai vous permettant +
-de tester le générateur d'image et l'utilisation de la fonction +
-Bdraw_image. +
-Amélioration de DRAWIMG +
-Le programme DRANIMG peut être grandement amelioré au niveau de +
-la création des images. Au lieu d'écrire des numéros de sprites dans +
-des DATA, 1l serait préférable d'avoir un éditeur permettant de séléctonner +
-et de positionner les sprites À la souris. L'auteur de ces lignes +
-à réalisé l y a qL;E-iquas' années un programme de ce type en TURBC +
-Ü C'est parfaitement réalisable en GFA Basic en moins de 100 +
-lignes. : +
-Les informations définissant les sprites peuvent êtré stockées dans un +
-fichier disque. Cela permet d'économiser de la place mémoire si les +
-images sont dessinées avec de nombreux sprites. +
-ATARI HA:}AHHEOEEES‘I OF GFA BASIC +
-Erant donné que les positions des sprites sont définis de manière relarive +
-à la position d'affichage de Pimage, les variables stockant ces +
-positions d'affichages peuvent être du type byte (symbole |} Cela +
-permet d'économiser 3 octets par variables, done & octets par sprites, +
-Le scul inconvénient de certe technique, c'est qu'un sprite ne peut +
-être affiché à plus de 255 pixels du bord haut gauche de l'image, +
-C'est un défaut plutôt mineur! +
-Si le nombre de sprites cst inférieur à 255, on peut aussi mémorisér +
-les numéros de sprites dans des variables de type |. Cela permet +
-d’économiser encore 3 ocrets par sprite. La taille mémoire nécessaire +
-pour mémoriser un sprite est de 3 octets, alors que DRAWIMG gutilisé +
-12 octers pour faire la même chose. Si le nombre de sprites est +
-compris entre 255 et 65535, on peut utiliser une variable de cype & +
-{l ::H.‘Ll:l:s} pour mémoriser un numéro de spritr_ La place mémoire +
-prise par la définition d’un sprite est alors de 4 octéts. +
-Le codage des images peut être mémorisé dans une zone binaire et +
-non dans un tableau. Cela permet d'utiliser juste la quantité de +
-mémoiré nécessaire à une image. La plupart des programmeurs de +
-jeux utilisent des données stockées directement en mémoire et non +
-dans des tableaux numériques. +
-Le programme DRAWIMG stocke un fichier graphique dans un seul rableau +
-alphanumérique, mais rien ne vous empêche de charger plusieurs +
-blocs de sprites dans différents tableaux. Vous pourrez avoir +
-par exemple un tableau contenant des éléments de visages, un ta +
-bleau contemant des éléments de votures, et un tableau contenant +
-des élements d'animaux. +
-Performances +
-Cette technique permet de dessiner des images avec Irés peu de +
-mémoire, +
-Frant donné que le codage d'une image ne contient que des +
-références de sprites, la taille de l'image n’a pas de rapport avec son +
-occupation mémoire. Une image de grande dimension dessinée avec +
-peu de sprites peut n'occuper que quélques dizaines d'octets, alors +
-gu'une petite image dessinée avec beaucoup de sprites peut oceuper +
-une centaine d'octets. +
-S l’on ne considère pas la taille mémoire prisé par les éléments graphiques +
-de base, il est possible de coder un nombre gigantesque +
-d'images sur une disquerte ou en mémoire. En considérant qu'une +
-image moyenne est fabriqué avec 30 sprites (ce qui est déja beaucoup), +
-le codage de cette image occupe 121 octers (4x30 octets pour +
-les sprites et 1 octet pour le nombre de sprites). On peur mettre +
-6093 images de 30 sprites sur une disquette double face. Cer exemple +
-est théorique, car les images ne seront pas toutes dessings avec 30 +
-éléments, mais il met en évidence le gain de mémoire permus par cette +
-technique. +
-Applications +
-La technique consistant à dessiner des images par assemblage (ou collage) +
-de sprites peut êÊtre urilisés dans de nombreux cas de figures. +
-Voici quelques exemples: dessin d'animaux fantastiques, fabrication +
-de visages, habillements de personnages, dessin de ruelles médiévalés +
-Vous pouvez vous amuser À dessiner des animaux fantastiques à partir +
-d'éléments simples (cornes, faces bestiales, têtés de démons, corps +
-hideux, jambes de cheval, etc.) Un éditeur de créatures fantastiques +
-ATAR| MAGAZINE +
-fonctionnant en haute résolution et réalisé en 3 jours à eu un grand +
-succes pendant la fête d'une école primaire. +
-On peur déssiner des visages en prenant des formes de visages ct en Ÿ +
-rajoutant des éléments de bases. Ces éléments sont; cheveux, yeux, +
-nez, bouches, mentons. On peut aussi y rajourer des éléments divers +
-comme des handeaux, des lunettes, des monocles, quelques cicatrices, +
-etc. Awec une cinquantaine d'éléments graphiques occupant environ +
-60 Ko, on peut creer plusieurs centaines de visages différents. +
-On jouant sur certains éléments comme les veux ou la bouche, il est +
-même possible de faire varier l'expression d'un visage (amusement, +
-colère, peur, eté..). +
-Âvec une quarantaine de sprites représentant des murs, des toits, des +
-chemindés, des portes et des fenêtre, il est possible de dessiner un +
-grand nombre de maisons différentes, et même des rues. +
-Pour la petite histoire, tous les éléments graphiques du jeu de rôle +
-DONJON MASTER (murs, créarures, portes, écritures sur les muts, +
-ete..) sont dessinés entièrement avec des sprites. +
-Pour finir +
-Les programmes de cet article sont disponibles en téléchargement +
-sur le 3615 ATART, Tls sont livrés dans un fichier binaire compacté +
-autodécompactable et ne coûrent que quelques francs de téléchargément. +
-TELECHARGEZ +
-DES CENTAINES +
-DE LOGICIELS +
-SUR LE +
-3615 +
-ATARI +
-BEST OF GGFA BASIC +
-GRPHISME EN GFA BASIC +
-INSTRUCTION +
-Copie rapide’ +
-COPY +
-310CS +
-+
-L'instruction RC COPY est une instruction gruphique du GFA Basic +
-3.0 permettant de réaliser des affichages rapides et des effets +
-spéciaux graphiques. La voila disséquée pour vous. +
-Copie de blocs +
-RC_COPY permet de copier des blocs de pixels d'un écran à un autre, +
-Les écrans d'origine et de destination peuvent être les mêmes. Elle +
-fonctionne dans les 3 résolutions graphiques du ST et est environ 7 +
-fois plus rapide sur une machine équipée d’un blittér que sur un STF +
-de base. Sa syntaxe est la suivanté: +
-AC COPY ecranl, x1, yl, tx, ty TO ecrand, x2, y?@ +
-ecranl:Adresse de l'écran d'origine +
-x1:Position X du bloc de pixel +
-yl:Position Y du bloc de pixel +
-Lx:Largeur du bloc de pixel +
-ty:Hauteur du bloc de pixel +
-ectran:Adresse de l'écran de destination +
-x#:Position X de destination +
-y2:Position Y de destination +
-Création d'un écran en mémoire +
-Un écran est une zone mémoire de 32000 octers. Cette zont mémor +
-re peut être créée en déclarant une variable alphanumérique de 32000 +
-octets. +
-ecran$=SPACES (32000) adr ecri=VARPTR(ecran3) +
-L'adresse des variables alphanumériques peut varier à la suite d'une +
-restructuration mémoire {garbage collection). Il faur denc recalculer +
-fréquemment l'adresse du tampon mémoire Pour elfacer +
-l'écran, il suffira de mettre une chaîne vide dans ecran§, ou d'effacer +
-la variable ecran$ avec l'instruction ERASE +
-On peut aussi réserver de la mémoire grâce à l'inscruction MALLOC, +
-La zone mémoire ainsi déclarée sera fixe. En général, les allocations +
-de mémoire sont réalisées au début des programmes. L'instruction +
-MFREE permet de désallouer une zone mémoire créée par MALLOL. +
-adr écr4=MALLOC(32000) VOID MFREE(adr _ecr®) +
-Remarque: l’instruction MALLOC renvoie la valeur © si la reservation +
-mémoite n'a pu avoir lieu (manque de mémoire disponible). +
-Copie d'écran +
-On peur copier un écran sur un sutré grâce à BMOVE, une mstruction +
-de copie de mémoire. L'exemple suivant copie 32 000 octets de +
-Fadresse ecranl® à l’adresse ecran?%, Les 32 000 octets se trouvant +
-l’adresse ecran?% sont effacés par l'opération de copie. +
-BMOVE ecranl%, ecran£*, 32000 +
-L'adresse de l’écran physique (celui qui est affiché à l'écran) peur être +
-decerminée avec la fonction XBI0S(2). On peur donc copier le contenu +
-de l’écran physique en mémoiré et vice-versa. +
-EMOVE XBIOS(2), adr ecr&, 32000 BMOVE adr ecr%, +
-xBIOS(2), 32000 +
-Fabrication d'un écran aléatoire +
-Paur tester des routines graphiques, il faut avoir une image de test. +
-Celle-ci peut etre chargée à partir d'un disque, ou fabriquée sur place. +
-Nous vous propasant ici une petite routine fabriquant une image +
-_ aléaroire. Elle s'adapte automatiquement à la résolution de l'écran, +
-grâce à la fonction XB105(4) qui indique la résolution courante du +
-sySbèmme. +
-PROCEDURE gen ecran +
-LOCAL 1%,c$,nb car% +
-SELFCT XBIOS(&+
-CASE D +
-nb_cars=40 +
-CASE 1 +
-nbk cars=a( +
-CASE 2 +
-nb_cars=al +
-ATARI MAG.#EIHEW BEST OF GRA BASIC +
-+
-ENDSELECTS +
-FOR 1%=1 TO 24 +
-c{=CHR$ (RANDOM(26)+65} +
-PRINT STRINGS(nb car%,c#); +
-NEXT 1% +
-c$=CHRÉ{RANDOM(26)+65) +
-PRINT STRING${nb car%-1,€$); +
-RETURN +
-La procédure GEN_ECRAN affiche 25 lignes de caractères, Le dernier +
-caractère de la dernière ligne n'est pas affiché afin de ne pas déclencher +
-un serolling d'écran qui effaccrait la prermière ligne. +
-Affichage d'un morceau d'écran +
-Le programme suivant charge unc image aléatoire dans un écran virtuel +
-À l’adresse adr ecr& Un morceau de cetre image est cnsuite recopié +
-sur l'écran physique avec l'instruction RC_COPY. +
-RESERVE 100000 +
-adr ecr%=MALLOC(32000} +
-BGEN ECRAN +
-EMOVE XBIOS(2), adr ecr%, 32000 +
-CLS +
-VoTD INP(2) +
-RC COPY adr ecr%,0,0,100,100 TO XBI0S(2),0,+
-VoID INP(2) +
-VOID MFREE [ali'r'_üf::l“iä] +
-END +
-L'écran virtuel est erdé avec l'instruetion MALLOC. La mémaire prise +
-est libérée en fin de programme par l'inseruction MFREE Le programmé +
-fonctionne dans les 3 résolutions. +
-Copie de blocs de pixels +
-directement sur l'écran +
-L'instruction RC COPY peur être urilisée pour copier des blocs de piwels +
-directement sur l’écran physique. Ces blocs ne doivent évidemment +
-pas éofméider, +
-RC COPY XBIDS(2),0,0,32,32 TO XBI0S(2),100,100 +
-C'est plus rapide et cela prend moins de mémaire que la combinaison +
-classique des instructions GET et PUT. +
-GET 0,0,31,31, IMGS PUT 100,100, IMGS +
-Affichage d'une image ligne à ligne +
-Linstruction RC COPY permet d'afficher une image hgne 2 ligne. +
-Pour des raisons de simplicité, nous allons commencer par étudier +
-l’affichage ligne à ligne uniquement en basse résolution. L'écran ast +
-divisé en 20 lignes. Etant donné qu'il y à 200 pixels de haur, chaque +
-ligne à une hauteur de 10 pixels (200/20=1C). Les lignes sont +
-mumérotées de 1 à 20, +
-ATART MAGAZINE +
-PROCEDURE aff ligne (ligne%) +
-LOCAL ylä +
-y1% = (1igne%-1)*10 +
-RC COPY adr ecr%,0,y1%,320,10 TO XBI05(Z),0,¥1% +
-RETURN +
-Pour affichér une image à partir du haut de Pécran, il faut afficher +
-les lignes dans un ordre croissant. La procédure AFF_HAUT affiche +
-une image 4 partir du haut. Cet exemple est incompler. 1l manque +
-linitialisation de l’écran virtuel (avec SPACES ou MALLOC), et la tabre +
-cation de l'image de test (avec GEN ECRAN), +
-PROCEDURE aff haut +
-FOR 1%=1 TO 20 +
-Gaff ligne (1%) +
-PAUSE 2 +
-MEXT 1% +
-RETURN +
-Pour afficher une image à partir du bas, il faut afficher les lignes +
-dans un ordre décroissant. La procédure AFF_BAS affiche unc image +
-à partir du has de l'écran. +
-PROCEDURE. aff bas +
-FOR 1%=20 TO 1 STEP -1 +
-- Baff_Tigne(1%) +
-PAUSE 2 +
-NEXT 1% +
-RETURN +
-L'instruction PAUSE Z sert à fixer un délai de temponsation entre +
-l’affichage des lipnes. En augmentant ou en diminuant le paramètre +
-de temporisation, vous ferez varier la vitesse d'affichage de I'image. +
-Affichage ligne à ligne multi-résolution +
-Programmer une routine multi-résolution pose toujours quelques +
-problèmes. Ül faut déterminer les paramétres qui dépendent de la +
-résolution et écrire une routine d'initialisarion. +
-Dans le cas présent, les paramétres dépendant de la résolution sont la +
-largeur d’une ligne (variable x1%), et la hauteur d’une ligne {variable +
-y14). La routine DEF LIGNE caleule leur valeur en fanction du môde +
-sräphique. Flle doit impérativement être appelée au début du programme +
-sous peine de mauvais fonctonnement. +
-PROCEDURE def ligne +
-SELECT XBIOS[(4) +
-CASE 0 +
-x1%5=320 +
-y1%=10 +
-CASE 1 +
-x1%=640 +
-y1#=10 +
-CASE 2 +
-X1%=b40 +
-y1*=20 +
-BEST OF GRA BASIC +
-ENDSELECT +
-RETURN +
-PROCEDURE aff ligne(lignes) +
-LOCAL py* +
-pyé=(1ignet-1}#y1% +
-RC COPY adr ecr,0,pys,x1%,y1% TO XBI0S(2),0,py* +
-RETURN +
-Les procédures AFF_HAUT, et AFF_BAS du paragraphe précédent fonctionnent +
-parfaitement avec la nouvelle procedure AFF LIGNE Il est +
-amusant de voir la mème routine graphique fonetionner dans les 3 +
-résolutions du ST, En anticipant un petit peu, On pourrait imaginer +
-des routines graphiques lonctionnant dans tous les modes graphiques +
-5T &c TT. +
-La plupart des programmes professionnels sur IM PC et comparibles +
-urilisent un système graphique similaire à célui que nous venons +
-d'étudier. Il existe tellement de cartes graphiques diffcrentes sur +
-IBM PC que c'est une obligation pour les programmeurs. +
-Affichage d'une ligne sur deux +
-On peut obienir un bel effet graphique en affichant les li;g:n:ï impaires, +
-puis les lignes paires, L'exemple suivant fait apparaître une +
-image à partir du haut, mais le principe fonctionne aussi pour un affichage +
-à partir du bas, +
-PROCEDURE aff haut? +
-FOR 1%=1 TO 19 STEP 2 +
-Paff ligne (1%) +
-PAUSE & +
-NEXT 1% +
-FOR 1%= 2 TO 20 STEP Z +
-Gaff ligne (1%) +
-FAUSE 2 +
-NEXT 1% +
-RETURN +
-Cette technique d'affichage peut être utilisée avec d'autres écarts de +
-ligne. Afficher une ligne sur 4 donne un trés bel effer. +
-Affichage des lignes à partir des bords de +
-l'écran +
-Avec cerre technique, l'imagé apparaît à partir du haut et du bas. Les +
-lignes 1ignel% et lignez# sont affichés quasi-simultanément par la +
-routine. L'instraction PAUSE 1 impose un petit délai d'artenté entre +
-les différentes étapes d'affichagelignel%= +
-1l +
-lignez*=20 +
-FOR i 1 TO 10 +
-Baff ligne(lignels) +
-Baff ligne(lignez#+
-PAUSE 1 +
-INC lignes +
-DEC 11gness +
-NEXT i% +
-En inversant le sens d'affichage des lignes, vous pouvez afficher une +
-imagé à partir du milieu de l'écran. +
-Jignel%=10 +
-ligne2%-11 +
-FOR 1%=1 TO 10 +
-Gaff ligne(lignel%) +
-Ëaff_]1gne{lîgnEÈ%} +
-PAUSE 1 +
-DEC lignel% +
-INC ligne£z* +
-NEXT 1% +
-Affichage d'une image +
-colonne par colonne +
-De la même manière que l'on affiche une image ligne à ligne, on +
-peut afficher une image colonne par colonne. Le principe est le +
-méme, seul le sens d'affichage diffère. +
-L’écran est divisé en 20 colonnes, En basse résolution, les colonnes +
-ont une largeut de 16 pixels (320/20) er une hauteur de 200 pm::ls +
-En movenne résolution, les colonnes ont une largeur de 32 pr +
-xels {HÆHËÜ_‘] et une hauteur de 200 pixels. En haute résolution, les +
-colonnes ont une largeur de 32 pixels (640/20) er une hauteur de 400 +
-pixels, +
-PROCEDURE def colonne +
-SELECT XETOS5(4) +
-CASE O +
-xchks16 +
-ycs=2UU0 +
-CASE l +
-xcis=i; +
-vc===00 +
-CASE & . +
-k=32 +
-yc#=400 +
-ENDSELECT +
-RETURN +
-La procédure DEF COLONNE initialise les variables xc% et ¥c% en +
-fonction de la résolution du sysetme. Elle doit être appelée avant d'utiliser +
-la procédure AFF_COLONNE Le plus simple est de l'uciliser au +
-début du programme. +
-PROCEDURE aff colon ne(colonne%) +
-LOCAL px* +
-pxé=(colonnes-1}*xc% +
-RC COPY adr ecr&,pxé,0,xc*,yc# TD ABIOS(2) ,px%.0 +
-RETURN +
-La procédure AFF_COLONNE affiche la colonne colonnet en tenant +
-compte de la résolution. Les colonnes sont numérorées de 1 à 20. En +
-ATARI MÈGÆINEm BEST OF GFA BASIC +
-+
-affichant les colonnes dans un ordre croissant, l’image s'atfiche à partir +
-de la gauche. +
-PROCEDURE aff gauché ! +
-LOCAL c% +
-FOR c%=1 TO 20 +
-; Baff colonne(c®) +
-PAUSE 2 - +
-NEKT c% +
-RETURN +
-En affichant les colonnes dans uh ordre décroissant à partir de 20, +
-l'image s'affiche à partir de la droité de l'écran. +
-PROCEDURE aff droite +
-; LOCAL c% +
-FOR c%=20 10 1 STEP -1 3 +
-Gaff colonne(c*+
-, PAUSE 2 +
-NEXT c% +
-RETURN +
-Affichage d'une colonne sur deux +
-De la même manière que l'on peut afficher une ligne sur deux, on +
-peut afficher une colonne sur deux. Lexemple suivant affiche les colonnes +
-impaires, puis les colonnés paires. +
-PROCEDURE aff qauchez +
-LOCAL c% +
-FOR c%=1 TO 19 STEP Z +
-@aff colonne(c“) +
-PAUSE 2 +
-MEXT €* +
-FOR c&=2 TO 20 STEP Z +
-Baff colonne(c*) +
-PAUSE 2 +
-NEXT c* +
-RETURN +
-Vous pouvez aussi afficher une image colonne par colonne à prartllr +
-des bords nu du centre de l'écran. Inspirez-vous des techniques daffichages +
-ligne à ligne. +
-Découpage d'une image en petits rectangles +
-Au lieu de découper l'écran en lignes et colonnes, on péur I +
-découper en petits rectangles. Cela permet de créér n:læ: nouveaux el +
-fets graphiques, Afin d maintenir une compatibilité avec IEIE programmes +
-précédents, l'écran est découpé en 20x20 blocs (soit 400 +
-blocs). +
-En basse résolution, un bloc graphique fait 16x10 pixels. En moyenne +
-résolution, uñ bloc graphique fait 32x10 pixels. En haute résobution, +
-un bloc graphique fait 32x20 pixels. La procédure DEF ELOC +
-initialise les vatiablés Xb% et ybé# en fonction de la résolution du +
-système. Elle doit être exécutée au débur des programmes. +
-PROCEDURE def bloc +
-SELECT X8105(4) +
-CASE Ü +
-xb==16 +
-yhiz=10 +
-CASE 1 +
-xb%=32 +
-vb*=10 +
-CASE Z +
-xb%=37 +
-yh%=20 +
-ENDSELECT +
-RETURN +
-La procédure AFF_BLOC copie un bloc graphique de l’image stockée à +
-l'adresse adr_ecr% sur l'écran physique. Les lignes et les colonnes +
-définissant la position des blocs sont numérotées de 1 à 20. +
-PROCEDURE aff bloc(Tigne%,colonnes) +
-LOCAL px*, pys +
-pxs= (colonnes-1}*xb# +
-py&={1igne-1}*ybw ‘ +
-C COPY adr_ecr%_pïä,pfi,ïb%,ïbä TO XBIOS(2) px , py +
-RETURN +
-La routine AFF BLOC peur être utilisée pour réaliser des affichages sophistiqués +
-comme l’affichage aléatoire, ou l’affichage en diagonale. +
-Affichage aléatoire +
-L'ordre d'affichäge des blocs est détermine au hasard, Le programme +
-doit garder la trace des blocs déjà affichés atin de ne pas nî'Fichn.îr +
-deux fois le même. Le tableau bloc%() contient la liste des blocs déja +
-affichés à l'écran. Au début, les cases de ce tableau contiennent +
-toutes 0. Lorsque le programme affiche un bloc sur I scran, il met lla +
-valeur 1 dans la case correspondant au bloe affiché La routine de tr +
-rage aléatoire sait qu’un bloc n'est pas encore affiche si la case équivalente +
-de blocs () contient la valeur 0. +
-DIM block(20,20) +
-ARRAYFILL bloc%(),0 +
-FOR j&=1 TO 400 +
-RÉPEAT +
-c*=RAMD(20}+1 +
-|&«RAND[(20)+1 +
-UNTIL blocs(15,c%)=0 +
-Gaff bloc(1%,c%) +
-block(1%,c%)=1 +
-NEXT 1% +
-L'instruction ARRAYFTLL bleck(),0 met là valeur O LE_:I.I'.I.E routes les +
-cases du tableau bloc%(}. L'instruction RAND(n) fournit un nombre +
-aléatoire compris entre Ü et n-l. La formule RAND(n) +1 donne doné: +
-ATARI MAGAZINE RLF BEST OF GFA BASIC +
-nn nombre aléatoire compris entre 1 ec n. Associé à la procédure +
-DEF BLOC, ce programme permet de réaliser une routine d'affichage +
-aléaroire fonctionnant dans les 3 résolutions du ST. +
-Amélioration de l'affichage aléatoire +
-Si vous avez exécuré la routine d’affichage aléatoire, vous avez dû remarquer +
-que l’affichage des derniers blocs st un peu lent. Le programme +
-peine un peu pour trouver les 5 ou 6 derniers blocs non affichés +
-parmi les 400 blocs possibles. Ceci dis, le GE4 Basic est tellement +
-rapide qu'il met moins d'une seconde à trouver le dernier bloc +
-{en version interprétée). +
-Pour éviter ce petit ralencissement, il faut arrêter le calçul aléatoire +
-des blocs avant la fin, et afficher rapidement les derniers blocs resrant. +
-On peut, par exemple, n’afficher que 395 blocs et utiliser une +
-routine supplémentaire utilisant le tabléau b oc%() pour connaître +
-les blocs non affichés. +
-nb blocs*#=395 +
-FOR i%=1 TÜ nb blocs* +
-*. , AFFICHAGE ALEATOIRE +
-NEXT i% +
-FOR c%=1 TO 20 +
-FOR 1%=1 TÜ 20 +
-IF block(1%,c%)=0 +
-Baff bloc(1%,c%) +
-block(1%,c%)=1 +
-PAUSE 1 +
-ENDIF +
-NEXT 1% +
-NEXT c% +
-L'instruction PAUSE 1 évite que les derniers blocs ne soient atfiches +
-trop rapidement, Vous pouvez la retirer si vous trouvez qu'elle ne +
-sert à rien. Vous pouvez faire varier le nombre de blocs affichés +
-aléatoirement, en modifiant la variable nb_blocs% (elle contient 395 +
-dans le programme d'exemples). +
-Affichage d'une image en diagonale +
-Les routines d'affichage en diagonale donnent toujours un résultat +
-agréable à regarder, mais elles sont un peu plus difficiles à programmer +
-que les autres. +
-Nous avons vu que l'écran est divisé en 400 blocs. Ces blocs sont +
-organisés en 20 lignes et en 20 colonnes. C'est une situation idéale +
-qui simplifie considérablement la programmation. Les diagonales +
-sont à 45 deprés. Pour tracer une diagonale, il faut partir d’un bloc +
-graphique, puis décrémenter régulièrement la position du bloc courant +
-avant d'arriver au bord de l'écran. La diagonale commençant au +
-bloc (10,10) est constituée des blocs (10,10), (9,9), (8,8), ... (1.1). +
-PROCEDURE diagonale(1%,c%) +
-REPEAT +
-Baff bloc(l%,c¥) +
-DEC c% +
-DEC 1% +
-UNTIL (c*<1) OR (1%=1) +
-RETURN +
-La procédure DIAGONALE cesse le dessin lorsque le bloë à afficher +
-sort des limites de l’écran, c'est-à-dire lorsque le numéro de ligne devient +
-inférieur à 1, ou lorsque le numéro de colonne devient +
-inférieur à 1. Cette technique trace une diagonale en direction du +
-coin haut gauche de l'écran. On peut tracer des diagonales suivant +
-d'autres directions (vers le coin haut droit, vers le coin bas gauche, +
-ou encore vers le coin bas dront de l’écran), +
-A titre d’exemple, [a rourine DTAGO BIS trace une diagonale ën direction +
-du coin haut droir de l'écran, Cette nouvelle routine s'arrêre +
-lorsque le bloc à afficher est hors de l'écran, c'est-à-dire lorsque le +
-numéro de ligne est inférieur à 1, ou lorsque le numéro de colonne +
-st supérieur à 20. +
-PROCEDURE diagû_bîa{Ï%.c%} +
-REPEAT +
-@aff bloc{1%,c%) +
-INC c% +
-DEC 1% +
-UNTIL (c*=20) OR [1%<1) +
-RETURN +
-Affichage d'une diagonale particulière +
-1l y a 39 diagonales sur un écran. La diagonale 1 est située en bas et à +
-gauche de l'écran. La diagonale 39 est située en haut ét à draite de +
-l'écran. Pour réaliser diverses routines d'affichage, 1l faut pouvoir afficher +
-sélectivement n'importe quelle diagonale, +
-La routine AFF DIAGONAL est capable d'afficher une diagonale de +
-l'écran à partir de son numéro, ‘ +
-PROCEDURE aff diagonal (numé) +
-LOCAL ligne% +
-LOCAL colonne* +
-1F num%<=20 +
-ligne*=20 +
-colonne*#=num +
-ELSE +
-ligne%=40-nums +
-colonne*=20 +
-ENDIF +
-Pdiagonale(lignet,colonnes} +
-RETURN +
-Cette routine reconstitue la position du bloc de départ à partic du +
-numéro de diagonale, - +
-Affichage en diagonale +
-de la gauche vers la droite +
-La procédure IMG DIAGONALE] affiche une image en diagonale en +
-partant de la gauche, Elle affiche les différentes diagonales les unis +
-après les autres. La routine est trés simple, car le travail à été décomposé +
-niveau par miveau,. : +
-ATARI …HEW BEST OF GFA BASIC +
-=] +
-+
-|'|l' +
-PROCEBURE img diagonalel +
-LOCAL d% +
-FOR d%=1 TO 39 +
-Gaff diagonal (d%) +
-FAUSE 1 +
-NEXT d +
-RETURN +
-Affichage en diagonale +
-de la droite vers la gauche +
-La prü«._“'È;ÏLu'E ÏHE_ÛI:ÜLÉÜHÈLEË affiche wne imvage en dëfigfllnnït en +
-partant de la droite, La diagonale 39 est affichée en premier. +
-PROCECURE img diagonalel +
-LOCAL d% +
-FOR d%=39 TO 1 STEP -1 +
-Gaff diagonal (d%) +
-PAUSE 1 +
-NEXT d% +
-RETUEN +
-Affichage d'une diagonale sur deux +
-En affichant une diagonale sur deux, on obtient un effet graphique +
-assez joli. La procédure AFF_20TAGONALE affiche une image à partir +
-de la gauche. Elle a été écrite en modifiant la procédure IMG_DIAGDNALEL +
-Vous pourrez modifier de la même manière la procédure +
-IMG DIAGOMALEZ pour obtenir un affichage à partir de la droité. +
-PROCEDURE aff 2diagonale +
-LOCAL d% +
-FOR d%=1 TO 39 STEP 2 +
-Baff diagonal(d%) +
-PAUSE 1 +
-REXT d% +
-FOR d%= 2 TO 38.5TEP Z +
-Gaff diagonal (d%) +
-PAUSE 1 +
-NEXT d +
-RETURN +
-Bibliothèque d'images +
-Vous pouvez utiliser RC_COPY pour créer une petite bibliothèque +
-d'images. Le principe de base est de dessiner des images avec un logiciel +
-de dessin type Degas Elite, puis de charger en mémoire l'image +
-écran générée par le logiciel graphique. 11 suffira ensuite d'utiliser +
-RC COPY pour recopier les images sur l’écran physique. +
-La procédure LOAD IMAGE charge l'image nom$ à l'adresse adr_ecr +
-$i / cette variable ne contient pas l'adresse d'une zoné mémoire de +
-32000 octets préparée avec MALLOC ou VARPTR, vous risquez de provoquér +
-Un Sup-E:rh-E; p'flIll:argn: de la machine. +
-ATARI MAGATINE +
-PROCEDURE load images(ncmé) +
-OPEN "T1*,#1,nom$ +
-SEEK #1,34 +
-BGET #1,adr ecr%,32000 +
-CLOSE #1 +
-RETURN +
-La position et la taille des images doivent Être mémorisées dans un +
-tableau numérique. Ces données doivent être chargées dans le & +
-blean au début du programme. Ce peut être fait avec des Instructions +
-DATA, où én lisant le contenu d'un fichier. +
-DIM image%(100,4) +
-! image%(n,1) = position X +
-' image“{n,&) = position y +
-* image%(n,3} = largeur {t;} +
-' image%({n,4} = hauteur (ty) +
-La procédure AFF_IMAGE affiche à la position (X%,y#) de l'écran, +
-l'image numéro n& L'image Degas Elite doit être chargée en mémoire +
-à l'adresse adr ecr +
-FROCEDURE aff_îmage{xä,yä,nàj +
-LOCAL pxt, pré +
-LOCAL Tx%, Lys +
-ox% = image%{n#,1) +
-pyk = image%(n%,7) +
-tx = image%(n#,3) +
-tys = image%(n%,4) +
-RC COPY Eü?_gtrë,pxä.pyä,tlä,ty% TO XRIOS(8),x%, ¥5% +
-RETURN +
-Extension de la bibliothèque d'images +
-Le système de gestion de bibliothèque d’images que nous venons de +
-voir ne peut pas en gérer beaucaup. On est vite limité par la taille +
-maximale d'une image. On peut avoir davantage d'images en travaillant +
-sur plusieurs fichiers Degas Flite. LOAD IMAGE doit être modifiée +
-pour charger une image Degas à une adresse particulière. +
-PROCEDURE load images(nom$,adr_img*) +
-OPEN "1",#1,nom$ +
-SEEK #1,34 +
-BGET #1,adr img*, 32000 +
-CLOSE #1 +
-RETURN +
-Le tableau image%() doit contenir une case supplémentaire pour +
-contenir le numéro d’écran de l'image n% L'exemple déclare un Lableau +
-de 100 images, mais il peut être beauconp plus grand avec ce +
-système d’écrans multiples (1 000 images par exemple). +
-DIM image=(100,5} +
-Les nouveaux écrans doivent être créés au début du programme. Les +
-adresses peuvent être mémorisées dans un tableau. La réservation de +
-BEST OF GrA BASIC +
-zone mémoire se fait avec l’inseruccion MALLOC. L'ecemple suivant +
-réserve de la place mémoire pour 4 images. +
-DIM adr ecran%(4) +
-FOR i%=1 T0 4 +
-adr_ecran(i%)=MALLOC(32000) +
-NEXT 1% +
-Attention: 4 écrans de 32000 octets représentent 128 000 octets, Il est +
-possible que le système manque dé mémoire (surtout sur 520) si la +
-mémoiré est déja bien encombrée (programme important, tabléaux +
-de grande taille, nombreux accessoires, programmes résidents, ctc.) +
-Pour plus de sécurité, il faut contrôler la bonne exécution des rèservations +
-mémoirc, +
-FOR i%=1 TÜ 4 +
-adris=MALLOC({32000) +
-[F adrk=0 +
-PRINT "Erreur mémoire” +
-END +
-ENDIF +
-adr_ecran*(i%}=adr& +
-HEXT i% +
-Une fois le programme terminé, la mémaire réservée doit être libérée. +
-Cetté opération se fait avéc l’instructon MFREE +
-FOR i%=1 T0 4 +
-VOID MFREE(adr ecran%(i%)) +
-NEXT 1% Ë +
-La procédure AFF_IMAGE s’utilise toujours de la même manière pour +
-le programmeur. Par contre, il y à une différence importante au niveau +
-interne: la routine détermine l'adresse de l'umage DEGAS ELITE +
-avant d'appeler 'instruction RC COPY, +
-PROCEDURE aff image(x%,v%,n%) +
-LOCAL px=, pys +
-LOCAL tx%, tys +
-LOCAL num _image*# +
-LOCAL adr img# +
-px = image%(n%,1) +
-pys = image%(n%,2) +
-tx* = image%(n%,3) +
-ty% = image%(n#,4) +
-num _ imge = imâge%(n#,5) +
-adr img%-adr ecrant{num_imgé) +
-RC COPY adr imgé,px*,pys, L%, 1y TO XÉIOS(4),x#, y5 +
-RETUEW +
-Une image est définie par 5 paramétres: position X, position Y, largeur +
-(tx), hauteur (ty) et numéro de l'image Degus contenant cette +
-1MMmAge, +
-Les positions des images peuvent être définies en mémoire dans des +
-lignes de DATA +
-La valeur À sert d'indicateur de fin de donnéés. +
-images: +
-DATA px,py,tx, Ly,num image +
-DATA 10,10,32,32,+
-DATA 80,10,12,17,1l +
-DATA 10,10,32,32,+
-DATA -1 +
-La routine INIT IMAGES lit les informations stockées dans les lignes +
-de DATA et les stocke dans le tableau image%(). La variable +
-nb_images% contient le nombre d'images lues. +
-PROCEDURE init_images +
-LOCAL px%, pys, tx%, tys +
-LOCAL num_img% +
-LOCAnL% +
-n&=0 +
-RESTORE images +
-BQ +
-READ px® +
-EXIT IF pu%=-1 +
-INC nf% +
-READ py5,tx%L,+
-READ num_img% +
-image%{(n%,1)=px* +
-imageX(n%,=p2y)% +
-images(n%,3)=tx% +
-image#{n%,4)=ty4 +
-image%(n*,5}=num_i mgé +
-LOOP +
-nb_imagess-ns +
-RETURN +
-Le chargement des images Degas doit se faire au debut du _ programme, +
-mais aprés la réservation mémoire. L'exemple charge une bibliochèque +
-d'images utilisée par un min-jeu de rôle. +
-Bload ecran("OBJETS.PI1", adr ecrans(1}) +
-@load ecran("ARMES.PI1", adr ecrans(2)) +
-@load ecran("MONSTRE.PI1", adr_ecran%(3)) +
-@load ecran("VILLE.PI1", adr_ecran%(4)) +
-Scrolling d'une zone de l'écran +
-Une routine de scrolling permer de simuler le déplacement d'une +
-fenêtre virtuelle sur une image de grande dimension: Au point de +
-vué téchnique, il s’agit d’un affichage rapide de bloc d'images. L'instruction +
-RC_COPY permet de réaliser cela facilement, +
-Il faut travailler très rapidement pour obtenir un scrolling de grande +
-dimension parfaitement fluide. Clest impossible à realiser avec +
-AC COPY sur uh STE, car la routine est trop lente. On ne peut obtepir +
-que des scrollines de toutes petites dimensions. Lexemple +
-présenté dans eer article ne fonctionne correctement que suf Un +
-STEou un MEGA ST avec blicter actif. +
-La routine AFF_ZONE affiche au milieu de l'écran un bloc graphique +
-de 192x64 pixels. Ce bloc graphique provient d'un écran virtuel s1- +
-ATARI …ÏIHEW BEST OF GFA BASIC +
-mué à l'adresse adr ecr% La routine prend le bloc situé à la posttion +
-(0x%, pyé) de l'écran virtuel et le copie à la position (64,68) de +
-l'écran visible, Afin d'éviter des bavures vidéo, AFF_ZONE arcend que +
-la barre synchronisation vidéo ne soit pas spr l'écran pour résliser le +
-transfert de pixels (grâce à l'instruction V5YNC), +
-PROCEDURE aff;;uneipm#,py%} +
-VSYNC +
-RC COPY adr ecrs,px%,.py%,192,64 TO XBIOS(Z),64,68 +
-RE TURE +
-L'exemplé suivant efféctue un scrolling vertical (du haur vers le bas) +
-de 101 pixels, 1l est réalisé en recopiant 101 fois une partie de l'écran +
-ädr ecr® sur l'écran en changeant à chaque fois la position du bloc +
-graphique d'un pixel. +
-L'instruction 80X affiche un rectangle graphique autour de la zone +
-de scrolling. Ce rectangle n'a pas de réélle wilité pour le scrolling, 11 +
-est juste là pour des raisons esthétiques. L'esthétisme est une chose +
-importante en informatique, quoi qu'en pensent beaucoup de proËTE.[ +
-E] ITIÉLIT S, +
-COLOR 2 BOX 63,67,256,132 +
-FOR pyé=0 TO 100 +
-Gaff zone(100,py5) +
-NEXT pys +
-Pour réaliser un scrolling du bas fi…rs le bas, il faut afficher les blocs +
-graphiques dans le sens mverse, +
-FOR py%=100 TO Ü STEP -1 +
-paff zone(100,py%) +
-NEXT pyF +
-La vitesse de scrolling dépend du pas d'incrémentation des pixels. Le +
-pas d’incrémentation est le nombre ajouté à une position d'affichage +
-pour obtenir une nouvelle position, Il était de 1 dans les exemples +
-précédents. Vous pouvez augmenter la vitesse de scrolling en augmentant +
-le pas d'incrémentation. Lexemple suivant urilise un pas +
-d'incrémentation de 2, afin de doubler la vitesse de scrolling, +
-FOR pyx=1 TO 100 STEP 2 +
-Gaff zone{100,py%) +
-NEXT py% +
-Vous pouvéz aussi vous amuser à réaliser un scrolling double en modifiant +
-simultanément les positions X et Ÿ du bloc graphique. +
-nxw={] +
-pyé=l +
-FOR i%= 0 T0 199 +
-Gaff zone{px%,py%) +
-INC px% +
-INC pyi +
-NEXT i% +
-Encore plus fort: faites un scrolling double avec des pas d'incrémentation +
-différents pour les deux axes. +
-px==0 +
-=0 +
-FOR i%= 0 TO 150 +
-Baff zone(px&,pyé) +
-ABD pxt,é +
-INC pys +
-NEXT i% +
-Que vous utilisiez un blitter ou non, il est impossible de réaliser un +
-scrolling plein écran suffisamment mpide avec l'insrruction RC_COPY, +
-Cela ne vous en empêche pas de l’utilisér pour réaliser divers petits +
-effers g[fl;-ll.'li-læufiä.- Le nom d'un logiciel accompagné d'un petit dessin +
-peut apparaîtré en scrollant dans une petite fenêtre, Un long rexte +
-peut être visualisé par petits bouts dans une fenêtre Une série +
-d'icônes peuvent défiler sur l'écran. Certains jeux d'aventure utilr +
-sent une routine dé sctollings pour faire défiler doucement leurs di- +
-Vers textés. +
-Rafraïchissement de fenêtres graphiques +
-Lorsque vous modifiez les caractéristiques d'une fenêtre graphique +
-GFM (taille, position, déplacement dans la fendtre avec les ascenscurs, +
-ctc.), la fenêtre est redessinée. Cette opération (redraw dans la +
-terminologie GEM, redessin, ou encore rafraîchissement) peut Erre +
-réalisée par l'instruction RC_ COPT +
-Une fenêtre graphique est définie par ces paramètres écran (position - +
-de la f‘enêtre sur l'écran, caille de la fenêtre visible), et par un paramiétre +
-interne (position de la lenétre visible par rapport à la fenêtre +
-virtuelle). La fenêtre virtuelle est stockée quelque part en mémoire. +
-fenetre - Adresse mémoire de la fenêtre virtuelle +
-xpos — : Position X de la fenêtre visible par rapport à la fenêtre +
-virtuelle +
-ypos — : Position Y de la fenêtre visible par rapport à la fenêtre +
-virtuelle; +
-Lx : Largeur de la fenêtre visible: +
-ty : Hauteur de la fenêtre visible: +
-px : Position X de la fénêtre visible sur l’écran: +
-py : Position Ÿ de la fenêtre visible sur l'écran. +
-RC COPY fenetre, xpos, ypos, tx, ty TO XBIOS(Z), px, py +
-TELECHARGEZ +
-DES CENTAINES +
-DE LOGICIELS SUR +
-LE 3615 ATARI +
-ATARI MAGAEIHEH BEST OF GFA BASIC +
-GRAPHISME EN GFA BASIC +
-TEURS +
-LOGIQUES +
-Manipulez les pixels +
-Les fonctions graphiques logiques du GFA Basic permettent de +
-réaliser de nombreux effets graphiques (affichage de sprites, +
-vidéo inverse, effets spéciaux, etc.) Découvrons-les ensemble. +
-Fonctions graphiques de base +
-Le GF Basic peut stocker en mémoire et afficher des blocs graphiques +
-grâce aux instructions GET et PUT. L'instruction GET permet +
-de stocker un bloc graphique dans une variable alphanumériqué, +
-alors que PUT permer d'afficher le contenu graphique de la vanable +
-n'importé où sur l'écran. +
-GET x1,y1,x2,y2,img} +
-PUT x,y,imgt +
-L'instruction PUT recopie intégralement sur l'écran les pixels mémorisés +
-dans la variable imy}. On peut aussi mélanger ces pixels de +
-l’image avec ceux de l'écran. Ce mélange peut se faire de différentes +
-manières grice à ce que l'on appelle des opéraceurs graphiques logiques. +
-+
-Les opérateurs graphiques logiques +
-Les opérateurs graphiques logiques sont des fonctions grapaiques qui +
-peuvent faire «fusionners plusicurs pixels entre eux au niveau des +
-couleurs. Les opérateurs graphiques logiques sont des fonctions qui +
-servent à mélanger deux images entre elles, Le résultar obrenu dépend +
-des images, mais aussi du type d'opérateurs graphiques utilisé +
-Le mélange se fair pixel par pixel. Pour chaque pixel, la couleur +
-résultante dépend de la couleur initiale, de la nouvelle couleur et de +
-l'opérateur logique. Les opérations entre couleurs de pixels se font au +
-piveau binaire, c'est-à-dire qué les opérateurs graphiques logiques Lravaillene +
-bit à bit, Les opérateurs binaires les plus utilisés sont AND, +
-OR, XOR et NOT. +
-Opérateur graphique logique AND +
-Lersqu'on applique Popérateur AND à deux bits, le résulrat ne vaut +
-1 que s1 les 2 brts sont à 1. +
-Û +
-+
-0 AND O +
-G AND 1 +
-1 ANDO +
-1 AND1 +
-Û +
-+
-Lorsque l'opérateur graphique logique AND est appliqué à 2 pixels, +
-le résultat dépend du codage binaire de la conleur des pixels, +
-Par exemple, en appliquant l'opérateur graphique AIND sur un pixel +
-de couleur 13 et un [l-'iït_:] de couleur 6, on obtient un pi:{tl de couleur +
-4. +
-1101 (13 en décimal) +
-0110 (06 en décimal) +
----- AND +
-0100 (04 en décimal) +
-Mise en oeuvre de l'opérateur logique AND +
-Pour eflectuer une opération graphique logique AND entre deux +
-images, 1l faur stocker l'une des images dans une variable alphamumérique +
-avec l’inscruction GET, puis l'afficher sur l'autre image +
-avec l'instruction PUT en spécifiant le parametre supplémentaire 1. +
-GET x1l,ÿ1,x2,ye, 1mg8 +
-PUT px,py,img$,1l +
-Ce petit programme fait une opération logique AND entre l'image +
-définie par les points (x1,y1,x2,52) et l'image commençant aux coordonnées +
-(px,pv). Après son exécution, l'Image commençant aux coordonnées +
-(px.py) est la résultante des ? images de départ. +
-Intérêt de l'opérateur logique AND +
-L'opérateur AND est Lrès pratique pour réaliser des affichages en +
-ombre chinoise- Prenons une image basse résolution faite urique +
-ment avec des pixels de couleur 0 et 15. En affichant cette image sur +
-l'écran avec l'opérateur graphique logique AND, on observe un +
-phénomène très umportant: les pixels de couleurs 0 sont bien visibles +
-sur l’écran, mais ceux de couleur 15 ont disparu. +
-La couleur 15 se code 1111 en binaire, et la couleur © se code 0000 +
-ALARI .‘-MGAEIMEE BEST OF GFA BASIC +
-3 @ 2Eh +
-en binaire. Lorsque la routine d'affichage à fait un AND logique entre +
-les pixels de l'écran ec ceux de l'image de test, tous les pixels +
-ANTDés avec la couleur O se sont retrouvés 2 0, alors que tous les +
-ANDés avec |z couleur 15 n'ont pas été modifiés. +
-n AND 0000 = D (0000 = 0 en décimal) +
-n AND 1111 = n (1111 - 15 én décimal) +
-On appelle certe technique affichage en ombre chinoise car elle ne +
-permet d'afficher que des images d'une seule couleur. +
-Fm%rumme de démonstration +
-de l'opérateur logique AND +
-Avant d'Étudier le programme de démonstration de l’opérateur graphique +
-logique AND, il faut savoir que le GAA Basic utilisé sa propre +
-table de couleurs, En elfet, après une instruction DEFFILL 2 1 +
-tracera des rectangles graphiques de couleur 1, et non 2. Ve la +
-table de conversion couleurs récls/couleurs GE4 Bastc: - +
-Couleurs réelles 01234567 89 1011 12 13 14 15 +
-Couleurs GFA Basic 0 2 3 6 4 75 89 10 11 14 12 15 13 1 +
-Les seules couleurs qui ne sont pas modifiées sont les couleurs 0,4 et +
-12. En fait, il he s'agic pas d’un bug du GFA Baste, mais du système +
-graphique VDI présent dans les ROMs du STE. II faut utiliser la +
-couleur 1 pour obtenir à l'écran la couleur 15. Arrention: les logiciels +
-de dessin graphiques travaillent avee les véricables numéros de couleurs, +
-c'esc-à-dire que les pixels traces avec la couleur 15 sont en couleur +
-15, +
-Le programme de démonstration affiche une petite image conslituée +
-d’une bande de couleur © ¢t d'une bande de couleur 15 (couleur 1 +
-pour le GF4 Basic). Cette image est stockée dans la variable alphanumérique +
-image$. Elle est affichée à la position (100,10) grâce à +
-Finstruction FUT. Elle est ensuite affichée avcc l'opérateur logique +
-AND à la posimon (200,10). +
-DEFFILL 2,6,2 +
-PEOX 0,0,319,199 +
-DEFFILL 0,1 +
-PEOX 10,10,60,60 +
-DEFFILL 1 +
-PBOX 20,20,50,50 +
-DEFFILL O +
-PBOX 30,30,40,40 +
-GET 10,10,60,60,imaget +
-VOID INP(2) +
-PUT 100,10, images +
-VOID INP(Z) +
-PUT 200,10,imaget,+
-VOID INP{2) +
-ERD +
-En &xécutant ce programme, vous pourrez vénfier que les pixels de +
-couleur O sonr affichés sur l'écran ec que les pixels de couleur 13 ont +
-disparu. Cette rechnique fonctionne aussi en moyenne et haute résolution, +
-mais les numéros de couleurs changent. Etant donné que les +
-couleurs en moyente résolurion sont codés sur 2 bits, il fauc travail +
-ler avec les couleurs © er 3 {0 et 6 en tenant compte de la bug des +
-couleurs VDI). De même pour la haure résolution, il faut travailler +
-avec les couleurs 0 et 1 (D et Z pour tenir compte de la bug des couleurs- +
-VDT). +
-Opérateur graphique logique OR +
-Lorsqu’on applique l'opérateur OR à deux bits, le résultat ne vaut 1 +
-que si au moins l’un des deux bits &t à 1. +
-Ü OR Q = +
-UUR 1= +
-1 U@R) = +
-1 U1R = +
-En appliquant l'opérateur graphique OR sur un pixel de couleur 13 +
-et un autre de couleur 6, on obtient un pixel de couleur 15. +
-1101 (13 en décimal) +
-0110 (Dh en décimal) +
----- DR +
-1111 {15 en décimal) +
-Les propriétés importantes de l‘opérateur graphique logique OR +
-sont les suivantes: +
-n OR 0000 +
-n OR 1111 +
-+
-1111 +
-Démonstration de l’opérateur logique OR +
-L'opétareur graphique logique OR est obrenu de la mamière survante: +
-PUT px,py, imagef,7. Le même programme de démonstration que +
-AND donne le résulrar suivant: tous les pixels de couleurs 15 sont +
-visibles après l’affichage en mode OR, alors que tous les pixels de +
-couleurs © ont disparu. C'est un résultat inverse de celui obtenu avec +
-l’opérateur logique AN +
-DEFFILL 2,2,7 +
-PBOX 0,0,319,199 +
-DEFFILL 0,1 +
-P&0X 10,10,60,60 +
-DEFFILL 1 +
-PEOX 20,20,50,50 +
-DEFFILL Q +
-PEOX 30,30,40,40 +
-GET 10,10,60,60, image$ +
-VOID INP(2] +
-PUT 100,10,image$ +
-ATAR mmzwffi BEST OF GFA BASIC +
-VOID INP(Z) +
-PUT 200,10,imaget,+
-VOID INP(2) +
-END +
-De la même manière que pour l'opérateur AND, on peur uriliser +
-Popératenr OR en moyenne et haute résolution en changeant le +
-numéro des couleurs. +
-Opérateur logique XOR +
-Lorsqu'on applique l’opérateur XOR à deux bits, le résultat ne vaut +
-1 que s1 seulement l'un dés deux bits esc à 1. +
-0 0R 0 = +
-0 0R 1 = +
-10 0*" +
-10R ] " +
-e e T +
-En appliquant l’opérateur graphique OR sur un pixel de couleur 13 +
-et un de couleur 6, on obtient un pixel de couleur 11. +
-1101 (13 en décimal) +
-0110 (06 en décimal) +
----= H +
-1011 (11 en décimal) +
-L'opérateur graphique logique XOR est réversible, c'est-à-dire que +
-l'on permute une opération logique pour revenir aux données de +
-départ (13 XOR 6 = 1Let11 XOR 6 = 13). +
-n XDR a +
-b XOR a +
-Utilisation de l'opérateur logique XOR +
-L'intérêt de XOR est de pouvoir afficher un objét sur 'éeran, et de +
-revenir à l’image initiale en réaffichant l’objet une seconde fois. Cela +
-peut paraître curieux, mais fonctionne bien. Le programme de +
-démonstration suivant vous convainera. ' +
-DEFFILL Z,2,2 +
-P8OX 0.0,319,199 +
-DEFFILL 0,1 +
-PEOX 10,10,60,60 +
-DEFFILL 1 +
-PEOX #0,20,50,50 +
-DEFFILL O +
-PEOX 30,30,40,40 +
-GET 10,10,60,60, imageï +
-VOID INP(2) +
-PUT 100,10, image$ +
-vVOID INP(2) +
-+
-|'WÉETÉT ÉR ETRE REE E +
-! * AFFICHAGE MODE XOR * +
-1E E R RR R UR A R N d d E E SE E +
-PUT 200,10,image$,+
-VOID INP(2) +
-1 khe e d kL +
-: * REAFFICHAGE MODE XAOR * +
-1 Ph R R R R E s E É UEU e d +
-PUT 200,10, image$,6 +
-VOID INP(2) +
-END +
-Les premiers jeux d'arcades sur micro-ordinateur urilisatent le mode +
-graphique XOR pour afficher leurs sprités. Le résultat était plutôt +
-Curieux au niveau des couleurs, mais cela fonctionnait rapidement et +
-les urtilisareurs de l'époque n'én demandaient pas plus. +
-Opérateur logique NOT +
-L'opérateur logique NOT est un peu particulier, puisqu'il ne travaille +
-que sur un seul nombre Les bits du nombre sont inversés (les 0 +
-deviennent des 1, et les 1 deviennent des C). +
-NOT 1 = 0 +
-NOT O. = 1 +
-1101 (13 en décimal) +
-—- NÛT +
-0010 (Z en décimal) +
-On obrient le mode logique NOT en donnant le paramêtre supplémentaire +
-12 à l’instruction graphique PUT. +
-PUT px,py,image$,12 +
-L'opérateur logique NOTI sert notamment à inverser les couleurs +
-d'une image. Cela peut être utile pour alficher des zones d'écran en +
-vidéo inverse. Le programme de démonstration suivant Invérsé une +
-image de test, +
-DEFFILL 2,2,2 +
-PBOX 0,0,319,199 +
-DEFFILL 0,1 +
-PBOX 10,10,60,60 +
-DEFFILL 1 +
-PREOY 20,20,50,50 +
-DEFFILL À +
-PROX 30,30,40,40 +
-GET 10,10,60,60, images +
-VOID INP{Z) +
-PUT 100,10, images +
-ATARI MÆË:ÆliHEË BEST OF GFA BASIC +
-VOID INP(2) +
-PUT 700,10,image$,12 +
-VOID INP(2) . +
-END +
-Les autres opérateurs graphiques logiques +
-Le GFA posside 16 opérateurs graphiques logiques. Nous n'avons +
-présenté que les 4 principaux, Vous pourrez rouver la description +
-des 12 autres modes à la page 196 du manuel du GÆd Basee 3.0, +
-Applications des opérateurs graphiques logiques +
-Flles sont très nombreuses. INous allons vous en présenter plusieurs +
-que vous pourrez réutiliser dans vos programmes, +
-Visualisation d'une icône en vidéo inverse +
-La vidéo inverse æst un moyen pratique de visuäliær une option ou +
-une commande en cours d'exécution. Par exemple, le burcau de +
-GEM visualise en vidéo inverse le fichier courant, c'est-à-cire le f1- +
-chier sur lequel l’utilisateur vient de cliquer. Vous pouvez faire la +
-même chose en utilisant l'opérateur graphique logique NOT. +
-La vidéo inverse peut être urilisée pour visualiser une action en +
-cours. Supposons que vous aycs pmgmmmë LI pfitit soft de g-r:l:t[nn +
-utilisant un système de commande à base d'icônes. Lorsque l'iatilisateur +
-clique sur une icône, celle-ci passe en vidéo inverse et ne revient +
-en vidéo normale que lorsque le craitement est termuné. +
-Le propramme suivant montre comment ce système peut fonctionner, +
-Lorsqu'une routine de traitement est exécutée, elle efface la souris, +
-saisit le dessin de l'icône dans une variable alphanumérique et +
-réaffiche ce dessin en vidéo inverse grâce à l'opérateur graphique logique +
-NOT. Une fois le traitement achevé, Ia routine réaffiche +
-l'icôné normale avec PUT, +
-PROCEDURE exec impression +
-HIDFF +
-GET xl,yl,x2,y2,iconef +
-PUT xi,yl,icone$,17 +
-IIIIII +
-IIIIII +
-PUT x1,y1,icone$ +
-SHOWM +
-RETURN +
-Cependant, au lieu d'afficher l'icône en vidéo inverse, vous pouvez +
-vous amuser à afficher une petite image visualisant le tratement en +
-cours. Pour une impression, ce peut êtré une plume et du papier. +
-Pour un tri, un facteur regardant une énorme pile de papier d’un air +
-découragé, etc. +
-Affichage d'une police de caractères +
-L'opérateur graphique AND permst de programmer une routine +
-d'affichage de curactères. On peut ainsi créer de nouveaux câractéres +
-de n'importe quellé taille e les unhiser dans les programmes en GFA +
-Basic. +
-MNous avons vu que l'opérateur graphique AND peut äfficher des +
-dessins dont seuls les pixels en couleur O sont visibles. 51 ces pixels +
-visibles forment la matrice d'un dessin, 1 suffit alors d'afficher le +
-dessin d'un caractère en mode AND) pour voir apparaître celui-ci. La +
-matrice du caractère doit être dessiné dans la couleur O, et les autres +
-pixels doivent être en couleur 15. +
-PUT 100,100,caracteres,+
-Les difflérentes matrices doivent êtres stockées dans un tableau alphanumériqué. +
-Pour afficher le caractère n, il suffit d'afficher le dessin +
-mumérg 1. +
-DIM car$(255} +
-PUT 100,100,car${n) +
-Les caractères sont toujours affichés avec la couleur 0. Cela peut paraftre +
-contraignant, mais il n'en est rien, Comme par hasard, bezucoup +
-de logiciels commercialisés n'affichent que des catactères en +
-couleur @ {ou en couleur 15). +
-La meilleure manière de créer vos nouveaux caractères ost d'utiliser +
-un logiciel de dessin type Degas Fitte, Une fois les caractères dessines, +
-il faut utiliser un programme de saisie générant un fichier binaire. +
-| RR ÉÉ NN NEAEEE - +
-A GENERATEUR DE * +
-! = POLICE DE CARACTERES * +
-L RR R RR R OE ÉÉ RE RE À +
-RESERVE 50000 +
-DIM cark(255) +
-@charge degas("POLICE.PI1"+
-ésaisie car +
-Ésauve police("POLICE.CAR"+
-END +
-| HR TAA deh ek RR N VS +
-! # POSITION DES CARACTERES * +
-Lo g o e d r À d e o E +
-" DATA px, p¥. num car +
-' =1 = fin de DATA +
-DATA 0,0,65 +
-DATA 8,0,66 +
-DATA 16,0,67 +
-DATA 24,0,68 +
-DATA 32,0,69 +
-DATA -1 +
-PROCEDURE saisié car +
-LOCAL px,py,n +
-4] +
-READ px +
-EXIT IF px=-1 +
-READ py +
-FOEHHJflÈEfiIHüEIIËiËIEEËTEËHÊEËEHËE +
-READ MN +
-GET px,py,px+7,py+7,car${n) +
-LOOP +
-RETURN +
-PROCEDURE sauve police(nom$) +
-LOCAL i, +
-OPEN "o",#1,nom$ +
-FÜR 1=0 TO 255 +
-1=LEN(car$(1}) +
-IF [=0 +
-OUT #1,0 +
-ELSE +
-OUT #1,1 +
-BPUT #1,VARPTR{cars(i)),+
-ENDIF +
-NEXT 1 +
-RETURN +
-Le programme suivant charge la police de caractères POLICE. CAR en +
-T ol e e o e ol ol e o e Y T T f S +
-ok AFFICHAGE . +
-' * POLICE DE CARACTERES * +
-RESERVE 50000 +
-DIM car$(255) +
-Ëcharge police("POLICE.CAR"+
-DEFFILL Z +
-PEUX 0,0,319,199 +
-Bafftext(30,30,"HELLO WORLD™) +
-VOID INP(Z) +
-END +
-PROCEDURE afftext(px,pv,m$) +
-LOCAL i,xaff,n +
-xatf=px +
-OR i=1 TO LEN(m$) +
-cS=MID${(m#,1,1) +
-n=ASC{c$} +
-IF LEN{car${n)}==0 +
-PUT xaff,py,car$(n},1l +
-ENDTF +
-ADD xaff,8 +
-MEXT 1 +
-RETLIRN +
-PROCEDURE charge police(nomf) +
-LOCAL 1,1 +
-OPEN "i",#1,nom$ +
-FOR 1=0 TO 255 +
-1=INP(#1) +
-1F 1=={ +
-carf(i)=SPACES$(1) +
-BGET #1,VARPTR{car$(i)),+
-ENDIF +
-NEXT 1 +
-RETURN +
-L'affichage d'iun message complet se fait caractère par caractère, La +
-routine AFF MESSAGE affiche un message à la position (px*,py%). I +
-peut arcmver que le programme tente d'afficher un caractére qui n'a +
-pas été redéfini. La routiné d'affichage reste done la caille de cer$(n) +
-pour vérifier si le dessin du caractère n'existe Cere routine d’affichage +
-fonctionne avec des caractères d’une largueur de & pixels, mais +
-rien ne vous empêche de la modifier pour des caractères plus larges. +
-Police de caractères de couleur 15 +
-En affichant les caractères avec l'opérateur graphiqué logique AND, on +
-obrient des caractères de couleur C En urilisant l'opérateur graphique +
-logique OR, on peut obtenir des caractères de couleur 15, Il +
-faut alors modifier le dessin des caractères, Les matrices dorvent être +
-dessinées en couleur 15 sur un tond dé couléur O. +
-Affichage dans n'importe quel sens +
-La routine AFFTEXT présenté plus haur affiche les rextes de la gauche +
-vers la droite. Vous pouvez la modifier pour qu'elle affiche les textes +
-vers le bas ou vers le haut en incrementant ou décrémentant la position +
-py d'affichage. La routine AFFTEXTZ affiche le rexte en direction +
-du bas. Après chaque affichage, la position courante d'affichage est +
-augmentée de & pixels, +
-PROCEDURE afftext?{px,py.m$) +
-LOCAL 1 +
-LOCAL xaff +
-LOCAL yaff +
-LOCAL n +
-xaff=px +
-yaff=py +
-FOR i=1 TD LEN{m%) +
-c4=MID$(m#,i,1) +
-n=ASC(c#h) +
-IF LEN(car#(n}}<=0 +
-PUT xaff,yaff,carf(n),+
-ENDIF +
-ADD yafîf,8 +
-NEXT 1 . +
-RETURN +
-La routine AFFTEXT3 affiche le texte en direction du haut de l’écran. +
-Après chaque affichage, la position y d'affichage est diminuée de B +
-pixels. +
-PROCEDURE afftext3({px,py,m#+
-LOCAL 1 +
-LOCAL xaff +
-ATARE MAGAZIN Efi BEST OF GFA BASIC +
-LOCAL yaff +
-LOCAL n +
-xdff=px — A +
-yaff=py +
-FOR i=1 TO LEM(m$) +
-c$=MID4 (m#,i,1} +
-n=ASC{c}) +
-IF LEN{car}{n})==0 +
-PUT xaff,vaff,cart{(n),;+
-ENDIF +
-SUB yaïît,8 +
-MEXT 1 +
-RETURN +
-Une variable SENS AFFICHAGE peur contenir le type courant d’fii-‘ +
-chage. La routine générale d'affichage peut sélectionner une routine +
-d'affichage spécifique en fonction du contenu de SENS_AFFICHAGE +
-PROCEDURE affmessage(x,y,m#+
-SELECT sens affichage +
-CASE 1 +
-Gafftext(x,y,m5) +
-CASE 2 +
-Gafftext#[x,y,mé) +
-CASE 3 +
-GafFtext3{x,y,m$) +
-ENDSELECT +
-RETURN +
-En utilisant des méthodes plus complexes, on peut afficher des textes +
-en suivant une forme géométrique, ou le bord d'une image. Le problèmé +
-est de déterminer Palgorithme caleulant la position d'une lettre +
-quélconque. +
-Disparition progressive d'une image +
-En urilisant l'opérateur graphique logique AND, il est possible de faire +
-disparaître progressivement une image. En affichant un masque fait +
-de 2 couleurs (0 et 15) avec l'opérateur AND sur l’écran, on cache certaines +
-parties dé l'écran. Pour effacer progressivement une 1mage, il +
-faut afficher une séric de masques avec de plus en plus de pixels de +
-couleurs 0. Le dernier masque doit être entièrément en couleur 0. +
-PUT px,py,masquelf,+
-PAUSE L% +
-PUT px,py,masque2b,+
-PAUSE t% +
-PUT px,py,masque3h,1l +
-PAUSE t% +
-PUT px,py,mesque45,+
-Lés instruetions PAUSE servent à diminuer la vitesse d'effacement de +
-l'imaisé, Säns ces temporisations, Peffacement se ferait trop rapidement +
-pour être visible. Les masques d'effacement peuvent être générés +
-de manière aléatoire par une routine spécifiqué, mais aussi dessinés +
-avec un logiciel graphique. +
-L'imagé est progressivement envahic par la couleur C. Ce procéidé +
-d’effacement n'est donc valable que sur un fond de couleur 0. En +
-remplagant l'opérateur graphique logique AND par l'opérateur graphique +
-logique OR on obtient un effacement progressif en couleur 15. +
-Cette autre technique n'est valable que sur un fond de couleur 15. +
-Apparition progressive d'une image +
-En inversant le processus, il est possible de faire apparaître progressivement +
-une image. C'est une techtique très utilisée par les programmeurs +
-de jeu pour afficher les titres de leurs logiciels. En général, ces +
-ticres sont affichés sur un fond de couleur 0, donc avec l’opérateur +
-graphique AN +
-L’affichage est plus difficile à réaliser que l'effacement car il doit être +
-réalisé dans un écran virtuel afin d'obtenir un bel effer visuel. Le programme +
-suivant recopie l'écran dans un écran virtuel d'adresse +
-adr ecr®, L'affichage sur l'écran physique est réalisé avec l'instruetion +
-EMOVE On peur aussi utiliser l'instruction RC_COPY +
-L4=2 ! +
-adr ecri=MALLOC{32000) +
-BMOVE XBIOS(2e)cr,k,a 3d20r00 +
-VOID XBIOS(5,L:adr ecr®,L'XBI0S(2),-1) +
-PUT px,py,imagel +
-PUT pï,pï,masquE1È,+
-BMOVE adr ecr%,XBIOS(Z),32000 +
-PAUSE t4 +
-PUT px,py,images +
-PUT px,py,masquel$,1l +
-BMOVE adr ecr%,KBI05(2),32000 +
-PAUSE t% +
-PUT px,py,images +
-PUT px,py,masquel$,+
-EMCVE adr_ecrä,ïfilüä[fi},ï?Üüfl +
-PAUSE t# +
-PUT px,py,images +
-PUT px,py,masquel$,+
-BMOVE adr ecr“%, XBIOS(322)00,+
-VOID XBIOS(5,L:XBI05(2),L:XBI05(2},-1) +
-On peut aussi remplacer les masques aléatoires par des masques +
-péométriques pénérés par programme, On peut ainsi allicher une +
-image sous la forme de petirs cercles ou de petits rectangles s'agrandissant +
-pour reconstituer l'image complère. Cela peut aussi sérvir +
-pour les effacements d'images. Avec des masques assez grands, on +
-peut même faire une image qui s'affiche à partir d'un nom. Cela permét +
-de faire un effet trés spectaculaire, mais qui prend bésucoup de +
-place mémoure. +
-Affichage de sprites de dimensions quelconques +
-Un sprite est une image qui peut s'afficher sur un fond quelconque. +
-Contrairement à l’affichage en ombre chinoise, les sprites doivent +
-ATARI MAGAZIN E BEST OF GFA BASIC +
-être de plusieurs couleurs. On ne peut afficher un sprite avec un seul +
-opérateur logique. Il faut faire deux opérations graphiques logiques à +
-]fl Eiui'l.l'.'+
-Un sprite est constitué d'un masque et d'une forme. La forme contient +
-le dessin proprement dit du sprite, et le masque contient les informations +
-sur les pixels de la forme devant être affichée. Le dessin +
-du sprite est fait sur un fond de couleur 0. Le masque est un dessin +
-de couleur O sur un fond de couleur 15. Les pixels én couleur O du +
-masque correspondent à ceux de la forme devant être affichée. +
-La technique à mettre en oeuvre est la suivante: l’image résultante +
-doit être de la couleur de la forme si le masque est à G, et de la couleur +
-du fond si le masque est à 15. L'affichage d'un sprite se fait pixel +
-par pixel. Le principe est toujours le méme: si le pixél de masque est +
-à 0, le pixel de forme est affiché: et si le pixel de masque est à 15, le +
-pixel de l'écran n'est pas modific. On arrive à ce résultat en deux +
-étapes: le masque est d’abord affiché avec l'opérateur logique AND, +
-puis la forme est affichée avec l’opérateur logique OR L'affichage du +
-masque se fait avec le mode logique AND. Les pixels de l'écran qui se +
-trouvent en interaction avec les pixcls du masque de couleur & se +
-changent en conleur O (puisque n AND O = Q), Les pixels de l'écran +
-qui entrent en interaction avec les pixels en couleur 15 du masque ne +
-changent pas de couleurs (puisque n AND 15 = n} On 2 alors une +
-image en ombre chinoise de la forme à afficher. L'affichage de la forme +
-se fait ensuite avéc le mode logique OR +
-Les pixels de l'écran qui se trouvent en interaction avéc les pixels de +
-couleur O de l'image restent inchangés (puisque & OR n = n). Les p& +
-xels de l'ombre chinoise prennent automatiquement la couleur des +
-pixels de la forme (puisque n OR 0 =n). +
-PUT px,py,masque$,+
-PUT px,py,forme,/ +
-Fabrication automatique des masque +
-et des formes - +
-Il n’est pas très facile de dessiner les formes et les masques des sprites. +
-Pour éviter cela, le plus simple est de dessiner une seulc image et +
-d'écrire un petit programme générant automatiquement la forme et +
-le masque du sprite. Cette tachnique est celle de la couleur transparenté. +
-Le sprite est dessiné avec un logiciel graphique. L'uné des couleurs +
-(généralement la couleur 15) est dite transparente, c'est-à-dire +
-qu'elle ne sera pas affiché à l’écran et correspond aux pixels de l'écran +
-qui ne doivent pas être modifiés par l'affichage du sprite. +
-Une fois le sprite dessiné avec une couleur transparenté, il faur +
-générer le masque et la forme. Le masque est généré en remplagant la +
-couleur transparente par 15, et les autres couleurs par 0. La forme est +
-générée en remplaçant la couleur cransparente par 0. Le programme +
-suivant fabrique un masque ct une forme à partir d'une image avec +
-couleur transparente, Remarque: en raison du bug de couleurs du +
-VDI, ce programme utilisé la couleur 1 et non la couleur 15, +
-x1=10 +
-yl=10 +
-x2=4{ +
-y2=d{) +
-trans=s1 +
-+
-GET xl,yl,x2,yZ2,images +
-Bgen masque +
-GET xl,y1,x2,y2,masque$ +
-PUT xl,vl, image$ +
-@gen Torme +
-GET x1,v1,x2,y2, formet +
-END +
-PROCEDURE gen masque +
-LOCAL px,py +
-FOR py=vl TO y2 +
-FOR px=x1 TÜ x2 +
-IF POINT(px,py)=trans* +
-PLOT px,py,l +
-ELSE +
-PLOT px,py,0 +
-ENDIF +
-NEXT px +
-NEXT py +
-RETURN +
-PROCEDURE gen forme +
-LOCAL px,py +
-FOR py=yl TO y£ +
-FOR pxexl TO x2 +
-IF POINT(px,py)=trans* +
-PLOT px,py,0 +
-ENDIF +
-NEXT px +
-NEXT py +
-RETURN +
-Une fois le masque et la forme stockes dans les variables masque$ et +
-formes, il ne reste plus qu'à les afficher ou à les sauver dans un fichier +
-binaire pour une utilisation ultérieure, +
-Des sprites dans n'importe +
-quelle résolution +
-On peut afficher des sprites dans n'importe quelle résolution à condition +
-d'adapter le numéros des couléurs. +
-En moyenne résolution, les masques doivent être de couleur © sur +
-un fond de couleur 3, et les formes sont dessinées sur un fond de +
-couleur 0. En haute résolution, les masques dorvent être dessinés en +
-couleur 0 sur un fond de couleur 1 et les formes sur un fond de cou- +
-Icur 0. +
-En créant un sprite avec une couleur transparente, on perd cérte couleur +
-qui ne peut Être utilisée dans le dessin du sprite. +
-Cc n'est pas très génant en basse résolution, puisqu'il reste encore +
-quinze couleurs. Par contre, il ne reste que trois couleurs en moyenne +
-résolution, et 1 couleur en haute résolution. Il est donc préférable +
-dé dessiner les masques des sprites à la iriain (c'est-à-dire avec un logrciel +
-graphique) pour la moyenne et la haute résolution. On évite ainsi +
-de perdre une couleur. +
-ATARI mmszE BEST OF GFA BASIC +
-Au lieu de perdre +
-du temps à taper +
-les listings des +
-programmes, +
-simplifiez-vous +
-la vieen +
-commandant +
-la disquette +
-BEST OF GFA, +
-contenant tous les +
-listings de ce +
-numéro et des +
-images Degas Elite +
-utilisabalveecs les +
-programmes +
-graphiques. +
-Voir bon de commande en page 50 +
-Le contenu de cette disquette est également +
-disponible en téléchargement sur le serveur +
-3615 ATARI, sous la forme d'un fichier portant +
-le nom de BESTGFA.TOS. +
-Des avanfages +
-supplémentaires +
-exclusivement réservés +
-aux abonnés de +
-Start micro +
-magazine +
-Wotre abonnement vous donne +
-accès à " 3615 MICROHELP" +
-Wotre abonnement vous +
-procurera des réductions +
-intéressantes sur le +
-téléchargement et l’achat de +
-disquettes de logiciels du +
-domaine public +
-Wotre abonnement vous fera +
-bénéficier de tarifs +
-promotionnels sur certains +
-logiciels du commerce +
-Ahnnne:-vuus et +
-économisez immédiatement +
-30 F +
-Bulletin d'abonnement au verso +
-O OUI, je m'abonne à START +
-MICRO MAGAZINE pour un an à +
-partir du numéro à paraitre +
-(11 numéros dont un double en +
-juillet/août) au prix exceptionnel de +
-360 F au lieu de 440 F (prix au +
-numéro) +
-J'ai bien noté que je bénéficierai du +
-service exclusif d'assistance télématique +
-3615 MICROHELP. +
-Ci-joint un chèque bancaire ou postal +
-(exclusivement, pas de mandat) libellé +
-à l'ordre de FC PRESS. +
-Mes modalités de foncäonnement du service ons que voire +
-code d'oceks personnel vous seront communiqués dès +
-l'ouverture du serveur. +
-Toffra wolchle pour la France seulement. Etranger nous +
-consulier. +
-Attention : +
-envoyer ce bulletin et votre chèque à : +
-FC PRESS +
-57, rue Danton +
-92300 LEVALLOIS-PERRET +
-Nom i tl 5oy én e L] o T T l R L +
-Prénom Aty MY A A e < R +
-Adresse é ek e 0o TC Ll P L LA | e el SR ol +
-e d e S e [ ) RE L o RE RS +
-Codepostal | | 1 i gy 1 L. 1 1 | +
-Ville P T N TP fs e T R . [ e ä.<.-----.___.…..----..----.--.-.----..'.---._-....-.---...---.......-..---..--…---.-.-----.---.......….... +
-DOSSIER FALCON +
-Présentation du Falean 030 +
-Multimédia pour fous +
-TOS 4.0 et MULTITOS +
-505 COURRIER +
-Les réponses h vos questions +
-ESSAI LOGICIEL +
-L'onti-virus Ulhmate Virus Killer +
-Le fraitement de texte Papyrus +
-. GRAPHISME +
-aqiciel de royirocin P DKBTRACE ° +
-La couleur de À & / +
-TABLEURS +
-Tronsférer vos données +
-entre 5T ¢ PC +
-MUSIQUE +
-Les messages AIDH +
-ACTUALITE +
-De nombreuses news Falcon +
-505 COURRIER +
-Las réponses à vos questions +
-MUSIQUE +
-Les messages MIDI suite.. +
-PORTFOLIO +
-Interface Midi Pocket Music +
-EUREAUTIQUE +
-Le tableur Groal Cale 3 +
-EDUCATION +
-L’ordinateur +
-est un jeu d'enfant +
-SYNTHESE D'IMAGES +
-Espaces de |1.|m|E|n:+
-Lagiciet rup ique +
-vber Shadows +
-Les nouveautés graphiques +
-PHISME +
-Logiciel Persistence of Vision 1.0 +
-Mode d'emploi +
-de Néochrome Master +
-:'l n.” +
-+
-EDUCATIF +
-Vive l'école +
-COMPARATIF +
-Conscles de jeu portables +
-JEUX +
-Les jeux de rôle +
-INITIATION +
-Les différentes lypes de virus +
-PROGRAMMATION +
-3 nouvellés palices +
-de caractères en Gfo Basic +
-TELEMATIQUE +
-Les nouvéautés du +
-téléchargement +
-LA DISQUETTE DU MOIS +
-49 accessoires +
-indispensables +
-JEUX +
-Jeux d'erventures sur Micro +
-TEST MATERIEL +
-Fax Modem SUFÉEM-Pé2é +
-DOMAINE PUBLIC +
-Sélection de 56 programmes à +
-posséder absolument. +
-TELEMATIQUE +
-Les nouveautés en +
-téléchargement +
-Les jeux PC en téléchargement +
-Flflfifl.fimflfl'fl +
-Ecrivez “un logiciel d-:rl'l'+
-vous êles le héros” +
-Animation d%n amique +
-én asic +
-Fichiers à accés directs en +
-Omikron +
-Effets spéciqux Ëru phiques +
-en AssemD'eur +
-. DISQUETTE DU MOIS +
-Le lagiciel de dessin Néochrome +
-Master 2.27 +
-Une biblicthéque d'imeges +
-Pour commander, remplissez lisiblement ce bon (ou une Eä +
-envoyez- \e accompagné du réglement à : +
-FC PRESS- 57, rue Danton- 92300 Levallois-Perret +
-Je commande le n°1 O, le n°2 © à 38 F le numéro. +
-T | numéro(s) à 38 F = Lecssvans F + 15 F de frais de part et +
-d'embollage (30 F pour I'étranger et les DOMTOM) por chèque & +
-l'ordre de FC PRESS. +
-Nom T R u e e e P E S +
-Prénom e Sl E 6 t e m e tL n srrr e +
-Adresse é CR T C P £ gy e i d e | e +
-| S O R S P 1 e +
-Codepostall 1161* 15 pogo Lop 1 ). | +
-Ville e o S - Y (] Y e S PS +
-Pays T e e T SE E S +
-Start +
-LA MODELISATION +
-DES +
-OBJETS 3D +
-d 'Hitcon| +
-SLokr | +
-UL +
-LE MULTIMEDIA +
-A LA MAISON +
-JOURNAL +
-L'ALTERNATIVE FANZINE +
-INITIATION +
-SAUVEGARDEZ VOS FICHIERS +
-TEST LOGICIEL +
-PARALLELE 3D +
-LES REPONSES A +
-VOS QUESTIONS SO +
-' o +
-.fi- +
-L" +
-+
-.hfi.. +
-+
-' . | +
-— LS [ UE [ __'\-- +
-e PE R e L +
-T Lo1 tMLU E -__\-_ll-"_d'î_,._!'.'r'l- +
-EZ +
-PE T I_::l:!:'ldul'l"l-ll_llll +
-+
-/ PE +
-A 0R +
-| j‘h“— +
-"n . [ ï * +
-F r |' TPEF tdéwE i +
-Fhx ; PE ; +
-.l- +
-. = +
-e e E +
-L e +
-ms F +
-; - +
-; ; | +
-ETE A e r +
-e o 8 +
-Prenez les commandes cIEE_ +
-3 meilleurs logiciels de simulation: +
-10 Vroom, F19 Stealth Fighter, +
-ùs Silent Service !!! n .. +
-(avec la super commande Zoomer) +
-rl = — - +
-+
-+
-(, +
-I"-.r -:"-.-_- +
-— É +
-1 - +
-Π+
-L - +
-J Ë +
-+
-+
-Il_.-" +
-B= +
-+
-=x +
-"+
  
 +Patrick Leclereq
back2root/archives/jeu-de-role-en-gfa-basic/02-editez-vos-cartes-graphiques.1749658351.txt.gz · Dernière modification : de frater