Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
back2root:archives:jeu-de-role-en-gfa-basic:02-editez-vos-cartes-graphiques [2025/06/11 19:29] – frater | back2root: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: | ||
- | ===== 02 - Editez | + | ===== 02 - Éditez |
+ | |||
+ | ==== Editer vos cartes graphiques | ||
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. | 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. | ||
Ligne 9: | Ligne 11: | ||
==== Dessin de la carte ==== | ==== Dessin de la carte ==== | ||
- | L' | + | L' |
==== Dessin avec éléments graphiques de base ==== | ==== Dessin avec éléments graphiques de base ==== | ||
- | YA l.' | + | Au lieu de stocker |
- | ner avec des élements | + | |
- | 7 {.:'Ii'l: | + | Une carte est alors mémorisée sous la forme d' |
- | de beaucoup d' | + | |
- | dessine | + | Avec des éléments de 16x16, une carte de 1600x800 |
- | avec un seul élément représentant la silhouerre | + | |
- | (st le procédé utilisé par bon nombre de logiciels de jeu du com- | + | <code freebasic> |
- | FICFce, Pl" | + | OPTION |
- | mémoires vidéos, les elements | + | DIM carte|(100,50) |
- | lôx16 pixels ou 32x32 piæels, | + | </ |
- | Une carte esr alors mémorisée sous la forme d' | + | |
- | Ë' | + | L' |
- | deux dimensions, dont le type dépend du nombre d' | + | |
- | Avec moins de 256 élements, ce qui est déjà énorme, on peur | + | Un élément graphique de 16x16 pixels stocké dans une variable alphanumérique grâce à l' |
- | utiliser un tableau de vvpe BYTE (svmbole | + | |
- | n' | + | <code freebasic> |
- | Avec des éléments de 16x16, une carte de 1600x8C0 | + | |
- | stockée dans un tableau de 100x50 cléments, occupant une place | + | |
- | mémoire de 5000 octets. | + | |
- | OFTION | + | |
- | DIM carte|{100,50) | + | |
- | L' | + | |
- | à partir de l’indice 1 et non & Four calculer le gain de mémoire | + | |
- | les deux méthodes, il faur prendre en compre | + | |
- | prisé-par les éléments | + | |
- | Un élément graphique de 16x16 pixels stocké dans une variable alphanumérique | + | |
- | grâce à l' | + | |
- | ters, ce caloul | + | |
- | raille | + | |
GET 1, | GET 1, | ||
PRINT LEN(vars) | PRINT LEN(vars) | ||
- | L’expérience montre que l'on peut dessiner des cartes complètes avec | + | </ |
- | bien moins de 200 éléments différents. | + | |
- | accéptable | + | L’expérience montre que l'on peut dessiner des cartes complètes avec bien moins de 200 éléments différents. |
- | moins de 200 clements | + | |
- | histoire, les premiers jeux Ultima ont été dessinés avec seulement | + | <code freebasic> |
- | quelques dizaines d' | + | |
- | 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 | + | </ |
- | ments graphique, on arrive à un total de 31800 ocrets | + | |
- | 26800), Dans notre cas particulier, | + | En additionnant la place prise par le codage de la carte t par 200 élements |
- | de la carte est de 20, maus saméliore | + | |
- | est plus grande que 100x50 cléments ou s1 le nombre d' | + | |
- | phique | + | |
- | 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 | + | |
- | SONt CTÉES. | + | |
+ | 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. | ||
Même un non-graphiste peut réaliser une jolie carte à partir de beaux éléments de base. | Même un non-graphiste peut réaliser une jolie carte à partir de beaux éléments de base. | ||
Ligne 66: | Ligne 50: | ||
==== Dessin de la carte Ultima ==== | ==== Dessin de la carte Ultima ==== | ||
- | 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 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. |
- | Les ordres de déplacements, | + | |
+ | Lors des déplacements, | ||
==== Programmation d’un système de déplacement style Ultima ==== | ==== Programmation d’un système de déplacement style Ultima ==== | ||
+ | Pour réaliser un systéme de déplacement similaire à celui d'// | ||
+ | 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' | ||
+ | |||
+ | 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' | ||
- | Pour réaliser un système de déplacement similaire à celui d’Ultima, en GFA Basic, il faut tout d’abord définir les éléments graphiques nécessaires. Nous avons déjà vu le codage de la carte peut être stocké dans un tableau unidimensionnel. Il est possible de faire une base de données en chaîne alphabétique, | ||
==== Définition des éléments graphiques ==== | ==== Définition des éléments graphiques ==== | ||
- | On suppose que les éléments graphiques ont tous été dessinés par un graphiste avec un logiciel de dessin type Dega Elite ou équivalent. | + | On suppose que les éléments graphiques |
- | La structure du fichier est simple. Elle se compose de 32 octets contenant la palette, | + | La structure du fichier |
<code freebasic> | <code freebasic> | ||
- | ' ************************* | + | ' |
- | ' * CHARGEMENT IMAGE | + | ' * GENÉRATEUR FICHIER BINAIRE * |
- | ' * DEGA ELITE | + | ' * ELEMENTS GRAPHIQUES |
- | ' ************************* | + | ' ****************************** |
+ | RESERVE 100000 | ||
+ | DIM element$(200) | ||
+ | nb_elements%=0 | ||
+ | palette$=SPACE$(32) | ||
+ | ' | ||
+ | @load_dzgas(" | ||
+ | @saisie_elements | ||
+ | @sauve_elements({" | ||
+ | END | ||
+ | ' | ||
+ | ' ****************************** | ||
+ | ' * CHARGEMENT IMAGE * | ||
+ | ' * | ||
+ | ' | ||
+ | ' | ||
+ | ' ********************************** | ||
' * La palette est stockée dans la * | ' * La palette est stockée dans la * | ||
- | ' * variable globale palette$ | + | ' * variable globale palette$ |
- | ' ************************* | + | ' ********************************** |
PROCEDURE load_degas(nom$) | PROCEDURE load_degas(nom$) | ||
- | | + | palette$=SPACE$(32) |
- | OPEN "I",# | + | OPEN "1",# |
- | BGET #1,varptr(palette$), | + | SEEK #1,2 |
- | BGET #1,varptr(elements$),32000 | + | BGET #1,VARPTR(palette$), |
- | CLOSE #1 | + | VOID XBIOS(6, |
+ | BGET #1,XBIOS(2),3#000 | ||
+ | CLOSE #l | ||
RETURN | RETURN | ||
- | + | ' | |
- | ' ************************* | + | ' |
- | ' * GENERATION FICHIER BINAIRE | + | ' * GENERATION FICHIER BINAIRE |
- | ' * ELEMENTS GRAPHIQUES | + | ' * ELEMENTS GRAPHIQUES |
- | ' ************************* | + | ' ********************************** |
- | + | PROCEDURE sauve_elements{fichier$) | |
- | PROCEDURE sauve_elements(fichiers) | + | LOCAL i% |
- | LOCAL nb, i | + | |
- | | + | |
- | | + | OUT #1,nb_elements% |
- | FOR i=1 TO nb_elements | + | FOR i%=1 TO nb_elements% |
- | | + | |
- | NEXT i | + | NEXT i% |
CLOSE #1 | CLOSE #1 | ||
RETURN | RETURN | ||
- | + | ' | |
- | ' ************************* | + | ' |
- | ' * CHARGEMENT DES | + | ' * CHARGEMENT DES * |
- | ' * ELEMENTS GRAPHIQUES | + | ' * ELEMENTS GRAPHIQUES |
- | ' ************************* | + | ' ********************************** |
- | + | PROCEDURE | |
- | PROCEDURE | + | LOCAL n% |
+ | LOCAL px%, py% | ||
+ | LOCAL px2%,py2% | ||
+ | ' | ||
+ | n%=0 | ||
RESTORE def_elements | RESTORE def_elements | ||
- | READ nb_elements | + | |
- | DIM elements$(nb_elements) | + | |
- | + | EXIT IF pa%=-1 | |
- | FOR i=1 TO nb_elements | + | READ py% |
- | READ px1,py1,px2,py2 | + | INC n% |
- | | + | |
- | | + | |
+ | | ||
+ | | ||
+ | nb_elements%=n% | ||
RETURN | RETURN | ||
- | + | ' | |
- | ' ************************* | + | ' |
- | ' * POSITION DES | + | ' * POSITION DES * |
- | ' * ELEMENTS | + | ' * ÉLEMENTS |
- | ' ************************* | + | ' ********************************* |
def_elements: | def_elements: | ||
- | DATA 1 | + | DATA 1,1 |
- | DATA 1,1,1,1 | + | DATA 18,1 |
- | DATA 5,1,5,1 | + | DATA 35,1 |
- | DATA 8,1,8,1 | + | DATA 52,1 |
- | DATA 10,1,10,1 | + | DATA 69,1 |
- | DATA 13,1,13,1 | + | DATA 86,1 |
- | DATA 15,1,15,1 | + | DATA 1,18 |
- | DATA 18,1,18,1 | + | DATA 18,18 |
- | DATA 20,1,20,1 | + | DATA 35,18 |
- | DATA 25,18,25,18 | + | DATA 52,18 |
- | DATA 35,18,35,18 | + | DATA 69,18 |
- | DATA 69,18,69,18 | + | |
DATA -1 | DATA -1 | ||
</ | </ | ||
Ligne 150: | Ligne 160: | ||
==== Programme EDITCART ==== | ==== Programme EDITCART ==== | ||
+ | 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. | ||
+ | |||
+ | 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' | ||
- | Le programme EDITCART est un éditeur de carte virtuelle écrit entièrement en GFA Basic. Il sauve les cartes dans des fichiers binaires. Ces fichiers peuvent être ensuite réutilisés par d' | + | Attention: l'éditeur |
- | Attention : l’éditeur | + | |
- | ==== La simplicité n’est pas de ce monde ==== | + | ==== La simplicité n'est pas de ce monde ==== |
- | Initialement, | + | Initialement, |
==== Un système d’affichage simple ==== | ==== Un système d’affichage simple ==== | ||
- | La première méthode qui vient à l’esprit est de réafficher cette portion visible ligne par ligne. Dans l’exemple | + | La première méthode qui vient à l'esprit est de ré afficher entièrement l' |
- | La position du coin de la carte visible par rapport à la carte virtuelle | + | La position du morceau |
- | En mettant ligne_carte et colonne_carte à 1, le côté haut gauche de la carte est affiché | + | En mettant |
- | Pour déplacer la carte d’une position vers la droite, il faut incrémenter la variable | + | |
- | Pour déplacer la carte d’une position vers le bas, il faut incrémenter ligne_carte et exécuter | + | Pour déplacer la carte d’une position vers la droite, il faut incrémenter la variable |
- | Remarque : la position (1,1) correspond au premier indice du tableau contenant la carte, grâce à l’instruction OPTION BASE 1. Sans cette option, le tableau | + | |
- | Le morceau de carte visible est affiché à l’écran à la position définie par les variables xcarte$ et ycarte$. Étant | + | Pour déplacer la carte d'une position vers le bas, il faut incrémenter |
+ | |||
+ | 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 | ||
+ | |||
+ | Le morceau de carte visible est affiché à l'écran à la position définie par les variables xcarte% et ycarte%. Etant donné | ||
<code freebasic> | <code freebasic> | ||
Ligne 174: | Ligne 190: | ||
' | ' | ||
xcarte%=16 | xcarte%=16 | ||
- | ycarte%=50 | + | ycarte%=5 |
- | ligne_carte%=1 | + | ' |
+ | ligne carte%=30 | ||
colonne_carte%=67 | colonne_carte%=67 | ||
' | ' | ||
Ligne 182: | Ligne 199: | ||
PROCEDURE aff_carte | PROCEDURE aff_carte | ||
- | LOCAL i,ligne% | + | LOCAL l%,c% |
- | LOCAL j,col% | + | LOCAL ligne% |
+ | LOCAL colonne% | ||
+ | LOCAL num% | ||
LOCAL posx% | LOCAL posx% | ||
LOCAL posy% | LOCAL posy% | ||
- | LOCAL pos% | ||
' | ' | ||
- | | + | |
- | ligne%=ligne_carte% | + | ligne%=ligne_carte% |
+ | FOR l%=1 TO 11 | ||
posx%=xcarte% | posx%=xcarte% | ||
- | FOR j=1 TO 11 | + | |
- | | + | |
- | pos=carte1(colonne_ligne) | + | |
- | PUT posx%, | + | PUT posx%, |
- | INC col% | + | INC colonne% |
ADD posx%,16 | ADD posx%,16 | ||
- | NEXT j | + | NEXT c% |
INC ligne% | INC ligne% | ||
ADD posy%,16 | ADD posy%,16 | ||
- | NEXT i | + | NEXT l% |
RETURN | RETURN | ||
</ | </ | ||
- | SNIP-SNIP | + | Pour gérer les déplacements, |
- | + | <code freebasic> | |
- | Même un non-graphiste peut réaliser une jolie carte à partir de beaux | + | PROCEDURE |
- | éléments de hase. | + | IF ligne_carte%<>1 |
- | ==== Dessin de la carte Ultima ==== | + | DEC ligne_carte% |
- | + | | |
- | La portion de carte affichée par les jeux Ultima à une dimension de | + | ENDIF |
- | 176x176 pixels, et est constitué de 11x11 clements de 16x16 pixels. | + | |
- | La position de l' | + | |
- | en noir affichee au milieu de l' | + | |
- | Lors des déplacements, | + | |
- | cé que l' | + | |
- | ==== Programmation d'un système de déplacement style Ultima ==== | + | |
- | + | ||
- | Pour réaliser un systéme de déplacement similaire à celui d' | + | |
- | en GEA Basic, il faut résoudre un certain nombte de problémes techniques. | + | |
- | 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 | + | |
- | un tabléau alphanumérique, | + | |
- | Comment est-ce que les éléments graphiques sont stockes dans | + | |
- | le tableau alphanumérique? | + | |
- | aussi bien sur un STF que sur un STE? Comment stocker les différéntes | + | |
- | données sur disque? Comment gérer les déplacements de | + | |
- | l' | + | |
- | 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 consacrde | + | |
- | à la créition d'une carte et la seconde traite de son utilsation | + | |
- | pour gérer les déplacements de l' | + | |
- | Définition des éléments graphiques | + | |
- | On suppese que les éléments graphiques de base ont êté dessinés par | + | |
- | un graphiste avec un logiciel de dessin type Degas Elite où equivalent. | + | |
- | Nos précieux cléments sont donc stockes sur disque dans une | + | |
- | image au format Degas, Le programme GENELEM,GFA lie l' | + | |
- | 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' | + | |
- | oecupant 134 octets. La position (x,y) des éléments sur l' | + | |
- | 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(" | + | |
- | @saisie_elements | + | |
- | @sauve elements({" | + | |
- | END | + | |
- | e e 44 E RE W W E R W R R | + | |
- | * CHARGEMENT-IMAGE * | + | |
- | = DEGAS ELITE 8 | + | |
- | E T T R P e e T o E E S | + | |
- | 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 | + | |
- | PROCEDURE | + | |
- | palettef=SPACE4(32) | + | |
- | OPEN " | + | |
- | SEEK #1,2 . | + | |
- | BGET #1 VARPTR(palette$}), | + | |
- | VOID XE10S(6, | + | |
- | BGET # | + | |
- | CLOSE #l | + | |
- | RETURR | + | |
- | B o e E T e b É el RE | + | |
- | * GENERATION FICHIER BINAIRE * | + | |
- | “ ELEMENTS GRAPHIQUES & | + | |
- | d e e N AI E R RE N A | + | |
- | PROCEDURE sauve elements{fichier$) | + | |
- | LOCAL 1% | + | |
- | OPEN " | + | |
- | BPUT # | + | |
- | OUT #1,nb elements® | + | |
- | FOR i%=1 TO nb elements“ | + | |
- | BPUT #1 , | + | |
- | MEXT i% | + | |
- | CLOSE #1 | + | |
RETURN | RETURN | ||
- | 1 | + | ' |
- | N T e RR E R P PR L TR R E o e R T | + | PROCEDURE |
- | i CHARGEMENT DES % | + | IF ligne_carte%<> |
- | * ELEMENTS GRAPHIQUES * | + | INC ligne_carte% |
- | C e RE e dc d PE E E e E A R E R RS | + | |
- | PROCEDURE | + | ENDIF |
- | LOCAL ns | + | |
- | LOCAL px%, pyi | + | |
- | LOCAL px2%,py2% | + | |
- | nE=0 | + | |
- | RESTORE def elements | + | |
- | g | + | |
- | READ px% | + | |
- | EXIT IF pai==1 | + | |
- | READ pys . | + | |
- | INC n | + | |
- | pxé4a=px=+ls | + | |
- | pyess=pystis | + | |
- | GET px%, | + | |
- | LOOP | + | |
- | nb_élémentss=n | + | |
- | ATARI MAGAZIME m BEST OF GRA BASIC | + | |
RETURN | RETURN | ||
- | | HLJNE SREE | + | ' |
- | i POSITION DES n | + | PROCEDURE aller_gauche |
- | ! * ÉLEMENTS GRAPHIQUES * | + | |
- | | ETEN eE ol e o R E | + | DEC colonne_carte% |
- | def elements: | + | |
- | DATA 1,1 | + | ENDIF |
- | DATA 18,1 | + | |
- | DATA 35,1 | + | |
- | DATA 52,1 | + | |
- | DATA 69,1 | + | |
- | DATA 66,1l | + | |
- | DATA 1,18 | + | |
- | DATA 18,18 | + | |
- | DATA 35,18 | + | |
- | DATA 52,18 | + | |
- | DATA 69,18 | + | |
- | DATA -1 | + | |
- | Programme EDITCART | + | |
- | 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, | + | |
- | pouvant être relus et exploités par d'autrés programmes. | + | |
- | Ses fontions 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 | + | |
- | sraphique, affichage d'une boîte d' | + | |
- | lc programme. Le tout est entiérément géré à la souris, | + | |
- | Attention: l' | + | |
- | foncrionner. Exéeutéz le programme GENELEM avant d' | + | |
- | Le nom du fichier d' | + | |
- | par défaur, mais vous pourrez le modifier dans le code source | + | |
- | d' | + | |
- | quel fichier d' | + | |
- | La simplicité n'est pas de ce monde | + | |
- | Initialement, | + | |
- | -: | + | |
- | simples et performantes aussi bien sur STE que STF [dommage | + | |
- | que tous les ST ne soient pas dotés de blitter). Les routinés | + | |
- | d' | + | |
- | un peu complexes à comprendre pour un programmeur | + | |
- | debutant. | + | |
- | Un système d’affichage simple | + | |
- | La première méthode qui vient à l' | + | |
- | l' | + | |
- | codage de la carte est stucké dans le tableau CART E|() et les éléments | + | |
- | graphiques de base dans le tableau ELEMENTS(). La procedure | + | |
- | Gaff carte dessine la carté sur l' | + | |
- | La pésition du morceau de carte visible par rapport à la carte virtuelle | + | |
- | cst contenu dans les variables lîgne carte ec colonne_carte. | + | |
- | En mettant Tigne carte ot colonne carte à 1, lé côté haut gauche | + | |
- | de la carte est affiche sur Pecran. | + | |
- | Pour déplacer là carte d’une position vers la droite, il faut incrémenter | + | |
- | la variable colonne liane de 1 et appeler de nouveau | + | |
- | @aff carte. | + | |
- | Fnur_q:' | + | |
- | ligne carte er exécuter Baff carte. | + | |
- | Remarque: la position (1, 1) correspond au premier indice du tableau | + | |
- | conténant la carte, grice à l’instruction OPTION BASE 1 Sans celle- | + | |
- | ci, le premier indice du tableau a la position (0,0). | + | |
- | Le morceau de carte visible est affiché à l' | + | |
- | par les variables xcarte* et 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' | + | |
- | d' | + | |
- | d' | + | |
- | OFTION BASE 1 | + | |
- | scartes=16 | + | |
- | vcarté%=5 | + | |
- | ligne cartes=30 | + | |
- | cn]unng_cart& | + | |
- | éaff carte | + | |
- | END | + | |
- | PROCEDURE aff carte i | + | |
- | LOCAL 1%,c0% | + | |
- | LOCAL 1ignes | + | |
- | LOCAL colonne% | + | |
- | LOCAL nums | + | |
- | LOCAL posx | + | |
- | LOCAL posy® | + | |
- | posyesycartes | + | |
- | ligne¥=ligne cartes | + | |
- | FOR 1=1 TO 11 | + | |
- | posx# | + | |
- | colonne*=colonne carte* | + | |
- | FOR c%=1 TO 11 | + | |
- | numé“carte| (colonne®, ligne#) | + | |
- | PUT posx%, | + | |
- | INC colonnes | + | |
- | ADD posx%,16 | + | |
- | NEXT c& | + | |
- | INE ligne= | + | |
- | ADD posyé,16 | + | |
- | NEXT 1% | + | |
RETURN | RETURN | ||
- | Pour gérer les déplacements, | + | ' |
- | modifiant les variables de position en fonction de la direction de | + | PROCEDURE |
- | déplacement. Pour des misons de sécurité, ces procédures doivent | + | IF colonne_carte%<> |
- | controler que le -l: | + | INC colonne_carte% |
- | la carte. | + | |
- | ATARI MAGAZINE H BEST OF GFA BASIC | + | ENDIF |
- | PROCEDURE | + | |
- | IF ligne cartes==1 | + | |
- | DEC 1igne cartes | + | |
- | Baff carte | + | |
- | ENDIF | + | |
RETURN | RETURN | ||
- | PROCEDURE aller bas | + | </ |
- | IF ligne cartese=ligne max® | + | |
- | INC ligne carte% | + | Ce système est parfait sur le papier, mais une fois mis en oeuvre, il se révèle |
- | Baff carte | + | |
- | ENDLF | + | ==== Un redessin partiel de la carte ==== |
- | RETURN | + | |
- | PROCEDURE aller gauche | + | 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' |
- | 1F colonne cartesss-1 | + | |
- | DEC calonne cartes | + | Cette technique fonctionne, mais présente |
- | Baff carte | + | C'est souvent un avantage, mais dans notre cas particulier, c’est |
- | ENDIF | + | |
- | RETURN | + | La seule manière d' |
- | PROCEDURE aller droite | + | |
- | IF colonne carte*=- | + | La fonction |
- | INC colonne cartes | + | |
- | Gaff carte | + | <code freebasic> |
- | ENDT F | + | adr_tampon%=MALLDC(32255) |
- | RETURN | + | adr2%=(adr_tampon%+255) AND & |
- | Ce système est parfait sur le papier, mais une fois mis en ceuvre, il se | + | </ |
- | révéle | + | |
- | en informartique, | + | Les variables //adrl%// et //adr2%// contiennent l'adresse |
- | de base. | + | //adr1%//, l' |
- | Un redessin partiel de la carte | + | |
- | On peut gagner du temps en ne redessinant qu'une partie de la carte. | + | Lorsque le programme a terminé de dessiner |
- | Lors d'un déplacement vers la droite, la colonne 1 disparaît de | + | |
- | l' | + | <code freebasic> |
- | gauche, le programme ne dessine vraiment que la nouvelle | + | VOID XBIOS(5) |
- | 11, De la même manière, lors d' | + | |
- | seule la colonne 1 est nouvelle, Puisqu' | + | |
- | décalée, au licu de le redessiner, on peut la déplacer en une seulc | + | |
- | opération graphique. L'une des solutions possible est de lire la portion | + | |
- | de carte avec l' | + | |
- | avec PUT, | + | |
- | Cette technique fonctionne, mais présente | + | |
- | esthétique, | + | |
- | d' | + | |
- | C'est souvent un avantage, mais dans notre cas particuliér, c' | + | |
- | un inconvénient: | + | |
- | produit un effet graphique nuisible visible. Pour éviter cela, il faut | + | |
- | que l’affichage s' | + | |
- | La seule manière d' | + | |
- | opérations graphiques en mémoire et de les recopier rapidement sur | + | |
- | Pécran | + | |
- | encore meilleur, le programme | + | |
- | technique: il dessine la carte däns un écran virtuel, puis change | + | |
- | l’adresse de la mémoire écran par l' | + | |
- | on évité | + | |
- | La fonction | + | |
- | écran. Sur un STEE cette adresse peut être quelconque, alors que sur | + | |
- | un STE elle doit obligatoirement être un multiple de 256. L' | + | |
- | initiale de l’écran est multiple de 256. Il faut créer une zone de 32000 | + | |
- | Dclets | + | |
- | une zonc mémoure | + | |
- | à une adresse paire- Pour obtenir une adresse multiple | + | |
- | de 256, 1] faut déclarer avec MALLOC une zone de 32255 octets | + | |
- | masquer les deux derniers bits de l' | + | |
- | multiple de 256 qui ports sur une zoné mémoire de 32000 octers | + | |
- | contenus dans la zone mémoite | + | |
- | C'est un peu compliqué mais cela marche bien, | + | |
- | adr tampon#=MALLDC(32255) | + | |
- | adré#=(adr tampon%+255) AND KHFFFFFFO0 | + | |
- | Les vartables | + | |
- | La varable | + | |
- | adr?% contienr | + | |
- | se [ait en bascule. Lorsque l’adresse de la mémoire | + | |
- | tionnée | + | |
- | adr?% Lorsque l’adresse de la mémoire écran est positionnée sur | + | |
- | adrls, l' | + | |
- | Lorsque le programme a terminé de dessiner | + | |
- | l change | + | |
- | XB10S(5}. Artention: la fonction | + | |
- | moment par le programme, mais le gestionnaire d' | + | |
- | Padresse | + | |
- | dessinée, St vous urilisez | + | |
- | XBIOS(5}, seul le dernier changement de mémoire d' | + | |
- | én compré. Pour éviter ce probléme, aprés avoir wrilisé XBI0S(5), il | + | |
- | faut attendre que le gestionnaire d' | + | |
- | l' | + | |
- | bloque l' | + | |
- | l’image courante (il y à 50 images affichés par seconde). | + | |
- | vOID XBIOS(5) | + | |
VSYNC | VSYNC | ||
- | Format de sauvegarde des cartes | + | </ |
- | Les cartes | + | |
- | Four changer fa taille, 1l faut modifier les variables nb_colonnes | + | ==== Format de sauvegarde des cartes |
- | et nb Tignes | + | |
- | 700,75). | + | Les cartes |
- | Les cartes d' | + | |
- | chaîne | + | Les cartes d'' |
- | 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' | + | |
- | un fichier n‘avant pas d' | + | <code freebasic> |
- | d'érreur. Le nom d'une carte doit impérativement avoir uné excenson | + | ' ****************************** |
- | .CAR, ne l' | + | ' * EDITEUR DE CARTE * |
- | (c'est l' | + | ' * POUR JEU DE RÔLE * |
- | ATAR| MAGAZINE m BEST OFGFA BASIC | + | ' * |
- | | HÉVÉENVÉATAETETETTTENNAETEREETAEE E | + | ' ****************************** |
- | 8 EDITEUR DE CARTE ñ | + | ' * (C) 1991 ATARI MAGAZINE |
- | r POUR JEU DE RÔLE = | + | ' |
- | 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 | + | |
- | 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%+255} AND SHFFFFFFOO | + | adr_tampon%=MALLOC(32255) |
- | adr1*=XB105{#) | + | adr2%=(adr_tampon%+255) AND & |
- | nb colonness=60 | + | adr1%=XBIOS{2) |
- | nb_lignes*=30 | + | nb colonnes%=60 |
+ | nb_lignes%=30 | ||
DIM carte|(200, | DIM carte|(200, | ||
- | Gmair | + | ' |
+ | @main | ||
VOID XBIOS(5, | VOID XBIOS(5, | ||
CLS | CLS | ||
VOID MFREE(adr tampon%) | VOID MFREE(adr tampon%) | ||
END | END | ||
- | PROCEDURE | + | ' |
- | VOID X810$(5,L:adr ecrans,L:-1,-1) | + | ' ----------------------------------- |
+ | PROCEDURE | ||
+ | VOID XBIOS(5,L:adr_ecran%,L:-1,-1) | ||
RETURN | RETURN | ||
- | PROCEDURE | + | ' |
- | VOID XBIOS(5, | + | PROCEDURE |
+ | VOID XBIOS(5, | ||
RETURN | RETURN | ||
- | — — ===" c=s cs — e ] e e e e e C | + | ' |
- | A 045446 GRR A UE UE É ÉÉ R AN RE E E S | + | ' ----------------------------------- |
- | ' | + | ' |
- | 1 el e e e o e e e e e e e d Sl et e e r ol | + | ' * |
- | PROCEDURE | + | ' *********************************** |
- | i) | + | PROCEDURE |
- | EXIT IF MOUSEK=0 | + | DO |
- | LOUP | + | EXIT IF MOUSEK=0 |
+ | LOOP | ||
RETURN | RETURN | ||
- | PROCEDURE | + | ' |
- | DEFMOUSE 0 | + | PROCEDURE |
+ | DEFMOUSE 0 | ||
RETURN | RETURN | ||
- | PROCEDURE | + | ' |
- | GEFMOQUSE Z | + | PROCEDURE |
+ | | ||
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 | + | ' * |
- | FUNCTION tstzone(x*,y%,px5, pyé, txs, tyf) | + | ' ************************************ |
- | 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 | + | |
- | result#0 | + | |
- | ENDIF | + | ENDIF |
- | LF yésepys | + | IF x%>px%+tx%-1 |
- | result#=0 | + | result%=0 |
- | ENDIF | + | ENDIF |
- | IF yve=pysitys-l | + | IF y%<py% |
- | result=eD | + | result%=0 |
- | ENDIF | + | ENDIF |
- | RETURN | + | IF y%=py%+ty%-l |
- | ERDFUNE | + | result%=0 |
- | I B o A S ARl e B e o be | + | ENDIF |
- | ' * EFFACEMENT ECRAN | + | RETURN |
- | | NAAAÉERERF REÉSEREE RTEN | + | ERDFUNC |
- | PROCEDURE | + | ' |
- | DEFFILL c% | + | ' ************************************ |
- | FBOX 0,0,319,199 | + | ' * EFFACEMENT ECRAN * |
+ | ' ************************************ | ||
+ | PROCEDURE | ||
+ | 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 | + | ' |
- | | RR L e R LR S E | + | ' ************************************ |
- | PROCEDURE cadre[px%, pys,tx%, tyd, f=,bé) | + | PROCEDURE cadre(px%,py%,tx%,ty%,f%,b%) |
- | LOCAL pxé%, pyes | + | LOCAL px2%, py2% |
- | pxés" | + | ' |
- | pyés=pyésttys-1 | + | px2%=px%+tx%-1 |
- | DEFFILL f # | + | py2%=py%+ty%-1 |
- | FEOX pxS,0V5, pad%s, pyas | + | DEFFILL f% |
- | COLOR bé | + | PBOX px%,py%,px2%,py2% |
- | BOX px%, | + | COLOR b% |
+ | BOX px%, | ||
RETURN | RETURN | ||
- | | ERRRREAA TR RR AN N EEFE | + | ' |
- | “ * AFFICHAGE MESSAGE | + | ' |
- | * * DANS ROITE DE CLIC | + | ' * AFFICHAGE MESSAGE |
- | 1 ETENESÉ É R | + | ' |
- | PROCEDURE | + | ' ************************************ |
- | LOCAL pxes, pyes | + | PROCEDURE |
- | 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 | + | ' |
- | w | + | xaff%=px%+(tx%-LEN(m$}*8)/2 |
- | ¥ | + | |
- | DEFFILL | + | ' |
- | PEOX px%,pye, prés, pyés | + | DEFFILL |
- | COLOR b* | + | |
- | EOX px* pyt, pX24 , pyd=x | + | COLOR b% |
- | TEXT xa, fvafffä,*mf | + | |
+ | 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 | + | ' ************************************* |
- | LOCAL n% | + | PROCEDURE |
- | LOCAL palettet ; | + | LOCAL n% |
- | palettet=SPACE$(32} | + | LOCAL palette$ |
- | OPEN " | + | ' |
- | BGET #1,VARPTK(palette$), | + | palette$=SPACE$(32) |
- | VOID XBIOS (6; | + | OPEN " |
- | nb elementsi=INP{#1) | + | BGET #1,VARPTR(palette$), |
- | FOR n%=1 TD nb_elements* | + | VOID XBIOS (6; |
- | element$(n%)=5PACE$ (134) | + | |
- | BGET # | + | FOR n%=1 TO nb_elements% |
- | MEXT n% | + | element$(n%)=SPACE$(134) |
- | CLOSE #1 | + | BGET # |
+ | | ||
+ | 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 | + | ' |
- | ARRAYFILL carte[(),l | + | ' ************************************ |
+ | PROCEDURE | ||
+ | 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 936: | Ligne 735: | ||
xcartes=6 | xcartes=6 | ||
vcartes=l= | vcartes=l= | ||
- | Gcharge elements | + | @charge_elements |
- | @init carte | + | ' |
- | HIDEM | + | |
- | GRAPHMODE 2 | + | HIDEM |
- | @aff ecran | + | GRAPHMODE 2 |
- | @aff carie | + | @aff_ecran |
- | BMOVE XBIOS(Z2), | + | @aff_carte |
- | @souris fleche | + | BMOVE XBIOS(2), |
- | SHOWM | + | ' |
- | etats=1 | + | |
- | @gestion eciteur | + | SHOWM |
+ | etat%=1 | ||
+ | @gestion_editeur | ||
RETURN | RETURN | ||
- | Pour finir | + | </ |
- | Nous verrons le mois prochain comment | + | |
- | par EDITCART pour gérer les déplacéments d'une équipe de personnagés | + | ==== Pour finir ==== |
- | sur un monde virruel | + | |
- | carte, gestion des rencontres, interdictions | + | Nous verrons le mois prochain comment |
- | sur certaines cases, | + | |
- | sur le 3615 ATARI les listings de l’article, | + | |
- | une image Degas contenant quelques éléments de dessin. | + | |
Patrick Leclereq | Patrick Leclereq |