Outils pour utilisateurs

Outils du site


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

Ceci est une ancienne révision du document !


02 - Editez 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.

Notions de base

Dans les jeux de rôle de type Cfrimer-ou Aentarsy (hste non lemitanive}, 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 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 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

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 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“:_”f de 3X0x220 pixels en basse résolution occupe 32 Koo Une image de 1600800 pixels, équivalent à un espace de 5×4 images écrans, occupe une place mémoire de 640 Ko. C'est beaucoup trop pour un 520 5T et même pour un 1040 5T, en tenant compté de la taille prise par le programme ot les autres données graphiques

Dessin avec éléments graphiques de base

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 A ou 7 {.:'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]'l de beaucoup d'élemonts différents. A la ngucur, une foréc peut S 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_':'i mémoires vidéos, les elements ont le plus souvent une taille de lôx16 pixels ou 32×32 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 16×16, une carte de 1600x8C0 pixels peut être stockée dans un tableau de 100×50 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 16×16 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 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. Clest donc une valeur limite accéptable pour fairé quelques calculs. Vous utiliserez certainement moins de 200 clements pour créer vos propres cartes. Pour la perite histoire, les premiers jeux Ultima ont été dessinés avec seulement quelques dizaines d'éléments. Le srockage de 200 éléments graphiques prend 26800 oététs. 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 (5000+ 26800), Dans notre cas particulier, le gain de place apporté par le-codage de la carte est de 20, maus saméliore considérablement a1 la carte est plus grande que 100×50 cléments ou s1 le nombre d'objets gra phique est plus petic que 200. 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.

Même un non-graphiste peut réaliser une jolie carte à partir de beaux éléments de hase.

Dessin de la carte Ultima

La portion de carte affichée par les jeux Ultima à une dimension de 176×176 pixels, et est constitué de 11×11 clements de 16×16 pixels. La position de l'équipe de personnages est visualisée par une silhouerte en noir affichee au milieu de l'écran. Lors des déplacements, l'image de la carte est redessinée de manière à cé que l'équipe soit toujours au centre de l'image visible,

Programmation d'un système de déplacement style Ultima

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. 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, mais il reste bien des questions à etudier. Comment est-ce que les éléments graphiques sont stockes dans le tableau alphanumérique? Comment afficher rapidement là carte 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'équipé sur la carte? 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'équipe, 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'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

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 @sauve elements({“ELEMENTS.BIN”) 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 !oad degas(nom$) palettef=SPACE4(32) OPEN “T”,#1,nom$ SEEK #1,2 . BGET #1 VARPTR(palette$}),37 VOID XE10S(6,L-VARPTR(palette*)) BGET #1,XB105{2},3#000 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 “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 1 N T e RR E R P PR L TR R E o e R T i CHARGEMENT DES % * ELEMENTS GRAPHIQUES * C e RE e dc d PE E E e E A R E R RS PROCEDURE saisi E__El ements 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%,py¥,px2%,pye%,elemants(n%) LOOP nb_élémentss=n ATARI MAGAZIME m BEST OF GRA BASIC RETURN

i POSITION DES n ! * ÉLEMENTS GRAPHIQUES *

def elements: DATA 1,1 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'informations et aption pour quitter lc programme. Le tout est entiérément géré à la souris, Attention: l'éditeur à besoïn d'un fichier d’éléments graphiques pour foncrionner. Exéeutéz le programme GENELEM avant d'utiliser EDITCART. Le nom du fichier d'élements graphiques est ELEMENTS.BIN par défaur, mais vous pourrez le modifier dans le code source d'EDITCART, ou ajouter une fonction permettant de charger n'imparte quel fichier d'éléments graphiques. La simplicité n'est pas de ce monde Initialement, cet éditeur a Été conçu pour être simple à utiliser et à -:-:-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 que tous les ST ne soient pas dotés de blitter). Les routinés d'affichage de EDITCART utilisent donc des techniques de programmation un peu complexes à comprendre pour un programmeur debutant. Un système d’affichage simple La première méthode qui vient à l'esprit est de réafficher entiérement 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 graphiques de base dans le tableau ELEMENTS(). La procedure Gaff carte dessine la carté sur l'écran. 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:'LËFÏ:m':,r la carte d'une position vers le bas, il faur incrementer 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'écran à la position définie 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'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 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#=xcartes colonne*=colonne carte* FOR c%=1 TO 11 numé“carte| (colonne®, ligne#) PUT posx%,posy&,elements{(numé) INC colonnes ADD posx%,16 NEXT c& INE ligne= ADD posyé,16 NEXT 1% RETURN 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 controler que le -l:ié[;];mt‘.m:m né sé fasse pas en dehors des limites de la carte. ATARI MAGAZINE H BEST OF GFA BASIC PROCEDURE aller haut IF ligne cartes==1 DEC 1igne cartes Baff carte ENDIF RETURN PROCEDURE aller bas IF ligne cartese=ligne max® INC ligne carte% Baff carte ENDLF RETURN PROCEDURE aller gauche 1F colonne cartesss-1 DEC calonne cartes Baff carte ENDIF RETURN PROCEDURE aller droite IF colonne carte*=- INC colonne cartes Gaff carte ENDT F RETURN Ce système est parfait sur le papier, mais une fois mis en ceuvre, il se 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 de base. 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 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 11, De la même manière, lors d'un déplacemient vers la dronté, 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 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 avec PUT, Cette technique fonctionne, mais présente uñ 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. C'est souvent un avantage, mais dans notre cas particuliér, c'ést 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'effectne en une seule fois et le plus rapidement possible, 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 Pécran en une setle opétration. Afin d'obrenir un résultat graphiqué encore meilleur, le programme EBITCART utilise une variante de cetté technique: il dessine la carte däns un écran virtuel, puis change 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 paire- Pour 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, l 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 Format de sauvegarde des cartes 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 et nb Tignes 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 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 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 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 (c'est l'unique moment où Péditeur utilise le clavier). ATAR| MAGAZINE m BEST OFGFA BASIC

8 EDITEUR DE CARTE ñ 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 LECLEREG # RR B b R E RR RR E R RR RR RE EF E RESERVE 100000 OPTION BASE 1 DIM element$ (200) adr tampon&=MALLOC(32255) ad?2%=[adr_tamflun%+255} AND SHFFFFFFOO adr1*=XB105{#) nb colonness=60 nb_lignes*=30 DIM carte|(200,75) Gmair VOID XBIOS(5,L:adrl%,L:adrl%,-1) CLS VOID MFREE(adr tampon%) END PROCEDURE set ecr Tog(adr ecrans) VOID X810$(5,L:adr ecrans,L:-1,-1) RETURN PROCEDURE set ecr phys([adr ecran“) VOID XBIOS(5,L:-1,L:adr ecran*,-1) 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 PROCEDURE attbclac i) EXIT IF MOUSEK=0 LOUP RETURN PROCEDURE Euurîa_fleche DEFMOUSE 0 RETURN PROCEDURE souris abeïlle GEFMOQUSE Z RETURN

‘% 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 result%=l IF xe<pxs — resu]t*=0 ENDIF IF x4=px&ttx+-1 result#0 ENDIF LF yésepys result#=0 ENDIF IF yve=pysitys-l result=eD ENDIF RETURN resuLl% ERDFUNE I B o A S ARl e B e o be ' * EFFACEMENT ECRAN

PROCEDURE cls _ ecran(e®) DEFFILL c% FBOX 0,0,319,199 RETURN # Ah b o i i E É É e i e e e S A RR AT * # AFFICHAGE CADRE GRAPHIQUE w

PROCEDURE cadre[px%, pys,tx%, tyd, f=,bé) LOCAL pxé%, pyes pxés“pxe+txe=l pyés=pyésttys-1 DEFFILL f # FEOX pxS,0V5, pad%s, pyas COLOR bé BOX px%,py%,px2%,pyd% RETURN

“ * AFFICHAGE MESSAGE * * DANS ROITE DE CLIC 1 ETENESÉ É R PROCEDURE aff boite(ptxad,% ty,f, pFésy, Déssa m,é) LOCAL pxes, pyes LOCAL xaff=,yaff4 pXx24=ox=+Lx==-1 pyeés=pyt+tys-1 xaffs=pxt+(tx5-LEN(m$}#8)/2 yaffa-pyetôt(tyt-7)/2 ATARI MAGAZIME H BEST-OF GRA BASIC w ¥ DEFFILL 3% PEOX px%,pye, prés, pyés COLOR b* EOX px* pyt, pX24 , pyd=x TEXT xa, fvafffä,*mf RETURN

! * CHARGEMENT DU FICHIER BINAIRE % ! + CONTENANT LES ELEMENTS GRAPHIQUES * I ORRÉÉÉÉTARARRE NN RR E E RRARERARA RE PROCEDURE charge elements({fichierf) LOCAL n% LOCAL palettet ; palettet=SPACE$(32} OPEN “1” ,#1,fichierf BGET #1,VARPTK(palette$),32 VOID XBIOS (6;L:VARPTR(palette$)) nb elementsi=INP{#1) FOR n%=1 TD nb_elements* element$(n%)=5PACE$ (134) BGET #1,VARPTR(element#(n#}},134 MEXT n% CLOSE #1 RETURN L EACAAUARERE S R RR E RE RV e e d d d e * * INITIALISATION DE LA CARTE *

PROCEDURE init carte ARRAYFILL carte[(),l RETURN D R e b L e R S R o ' * AFFICHAGE IMAGE EDITEUR *

PROCEDURE aff ecran @cls ecran(1) écadre(xcarte®-l,vcarte=-1,175,178,1,0) DEFTEXT O écadre(776,11,48,36,2,0) Gaff boîte(229,14,20,14,3,0,CHR$(1)) Caff boite(229,30,20,14,3,0,CHR$(4}) @aff _boite(251,14,20,14,3,0,CHRE(2)) Gaff boite(251,30,20,14,3,0,CHR543)! Eaff_bnite{195,55.11G.13.E,fl.“IHFflRHHTIflHS'] Eaffflhnite{195,33,11D,13,E,U,”GUITTEH FRG“) @aff boite(195,111,110,13,2,0,”CHARGER CARTE“) @aff boite(195,138,110,135,2,0, SAUVER CARTE”) Bcadre(223,164,54,22,2,0) Paff boite(225,166,14,18,3,0,CHR3(4)) @cadre(241,166,18,18,2,0} Gaff boite(261,166,14,18,3,0,CHRE(3)) Gaff element courant RETURN

4- CARTE YTSIBLE —# L R A R e d d e d d r d e e u B PROCEDURE aff carte LOCAL 1%,0% LOCAL Tigne% LOCAL colonnes LOCAL nums LOCAL posxs LOCAL posys posy&=ycartes lignes=-ligne cartes FOR 1%=1 TO 11 posx%=xcartés colonne“=colonne cartes FOR c%=1 TO 11 num*=carte| (colonne#, ligne#) PUT posx%,posy#,element$ (num*) INC colonne* ADD posx%,16 NEXT c% INC lignes ADD posy*,16 NEXT 1% RETURN L ANE e d E # AFFICHAGE DE * ' * ELEMENT COURANT *

PROCEDURE aff element courant LOCAL old ecr¥ oid ecri=XBI0S(3) êset ecr log(adr1%) PUT 242,167,element$(element_courant*) Bset ecr log(adr2%) | PUT 242,167,element$(element courant*) set ecr log(old ecr%) RETURN ï ä

PROCEDURE preparation ecr travail ATAR| MAGAZIME fl BESTOFGFA BASIC 1F etat%=1 ; ecr visibles-adrl® ecr travail%=adr2% ELSE ; ecr visible%-“adr?# ecr travail%=adrl% ENDIF etlat⇐-etat= üset_ecfi_ïügLflcrütraïaîîäj RETURN

b d sl ok é e dc d e d e e o Sk e e d e d d e m e A A e E PROCEDURE visualisation ecr travail Bset ccr phys(ecr travail®) VSYNC RETURN lNF o S o e e o s L RESRE ' * DEPLACEMENT VERS LE HAUT * [ L L R R R WN R e e PROCEDURE aller haut LOCAL ecrl%, xl%,yl% LOCAL ecrX2234 y,l LOCAL pxs,py4 LOCAL c%,colonne* LOCAL n IF ligne cartese=I DEC lîgne cartes HIDEM éprepareacrt tiraovanil ecrli=ecr visibles x]“=xcartes Y1%=ycartes écre4=ecr travail# Ké4=excarte y25=ycartet+lb RC COPY ecrl¥,x1%,yl%,1760,100 TÜ ecret,xé*,yés colonne#=colonne cartes px*=xcarte% pys=ycartes FOR c%=1 TO 11 nk=carte| (colonne#,ligne carte%) PUT px%,py“#,elementi{n=}) INC colonnes ADD px#,16 NEXT cÆ @visualisecar ttriavoainl SHOWM ENDIF RETURN

“* DEPLACEMENT VERS LE BAS 7 1 e E ÉÉÉF TT E EU R PROCEDURE aller bas LOCAL ecr. xll%,¥%1% LOCAL ecre%,x2y%l, LOCAL px%,pyé LOCAL c%, colanne= LÜCAL n* IF ligne carte%==nb lignes%=-10 INC Tigne carte* HIDEM éprepareacrt tiraovanil ecrl®=ecr visibles x1l&excartes yléycartes+ib ecr2%=ecr travail# X24=-xcartes vi=ycarLes HE_EÜPÏ écrl®,x1%,4v1#,176,160 TO ecrd® 2%, y2% colonne*=colonne carte prE=ncartes; pyé=ycarte=+160 FOR ¢%=1 TO 11 né=carte| (colloignne _n carete#s+1,0) PUT px%,pys,elementi{nw) INC colonne*” ADD px*,16 NEXT c% Evisualisecar ttriavoainl SHOWM ENDIF RETURN DRF e ke e e e e R R W R R e ok e e e e e o ” = DEPLACEMENT VERS LA GAUCHE = ï E E E e b c0 L b de de d A RR d E E S PROCEDURE aller gauche LOCAL ecrls,x1%,y1% LOCAL ecrz%,x2%,y2% LOCAL px=,pys LOCAL 1,ligne% LOCAL n* IF colonne cartes==1 DEC colonne cartes HIDEM Épreparation ecr travail écrls=-ecr visibles xl%=xcartée* vl&=vcarte* ecr&%=ecr travail# xés=xcarles+1b vi*=ycarte% RC COPY ecrl#,x1%,y15,160,176 TO ecrd%, x2%,yZ% ligne==ligne cartes px*=xcartew py*=vcartes ATAR| MAGAZIRE BEST OF GFA BASIC FUR 1==1 [0 11 né-cartel(colonne cartes,ligne%) BRUT #1,VARPIR(entete})1,9 FILESELECT paths,“ ” ,noms LOCAL côlonne clic® OUT #1,nb colonnes* SPUT fondd LOCAL ligne* PUT px* ,py,elements(n°) OUT #1,nb ligness IF noms==“” LOCAL colonnes INC Tignes FOR c%=1 TD nb colonness @souris abeille ; LOCAL old_element® ADD py&,l6 FOR 1%=1 TD nb lignes% OPEN “T”,#1,nomk i NEXT 15 QUT #1,carte|(e*,1%) entéte$=SPACES(14) xsxmé-xcartes Gvisualisation écr travail NEXT 1% BGET #1,VARPTR{enteted),19 Vs ymé=-vcartes SHOWM HR NEAT cæ IF entetef⇐“CARTE JdR ATARI MAG” ligne clic*=(y%/16) ENDIF CLOSE #1 CLOSE #1 colonne clic&=(x%/16) RETURN @souris fleche Bsouris Fleche ligne%=ligne clic#ligne carte* ' RETURN mi=“CE FICHIER ME CONTIENT|PAS DE CARTE® colonné#=colonne click+colonne carte* E kbR e B R M RE RL R i e E E , ALEHF fl'm5.1.” ÜË Hjh% i * * DEPLACEMENT VERS LA DROITE * E PEN ETE A E L ELSE old elément%=carte| (colonnes,ligne#) L v R Rk é é b e d r R F ÈÊÜÏEËAËÜE ÉAHÏE SUH ÜIEÛUE * PROCEDURE aller droite | #* INTERFACE UTILISATEUR A ' ok e e e B AW LOCAL Eürï%:ïlaiïl# | T T T S e E w LOCAL ecr2%,x2%,y25% PROCEQURE sauver carte nb colonnes%=INP{#1) nb lignes&=INP{(#1) FOR c==1 TO nb colonness FOR 1%=1 TO nb lignes# IF old element*=#element courant carte|(colonne%,ligne%)=ecloeumreanntt posx4=colonne clic&*l1b+xcarte# posy*=ligne chics“lb+ycartes LOCAL px*,pyt LOCAL nomb,paths carte/ (c*,1#)=INP{#1)] HIDEM LOCAL 1%, 1igne% LOCAL b% NEXT 1% * PUT posx*,posy*,element${(element courant*) LOCAL é LOCAL fFonds NEXT c% SHCWM ' ’ CLOSE #1 ENDIF 1F colonne carte*nb colonnes=-10 HIDEM ligne carte%=1 RETURN INC colonne cartes SGET fonds colonne carte%=1 | HIDEM ¥ . SHOWM Gaff carte | Rk Rk RR RESRE Bpreparation ecr travail path$=DIR#{0)+“\#.CAR” ésouris fleche * € OPTION 'QUITTER LE PRG' * ecrlis=ecr visibles FILESELECT path$,™ ”,nom$ ENDIF T AN A A d d x1%=xcartex+16 IF nomp==“” EMDT F PROCEOURE quitter programme yl=ycarte* IF EXIST{noms) RETURN LOCAL m8,t5,b% ecréé*=ecr travail% n6=“NO DE FICHIER EXISTANT. ” ; ' «Ptexcartes mé=m£+“ |CONTINUER SAUVEGARDE ? |” J bs hc e bbb e odofnl kot etk sortie==0 vax=ycarte# ALERT O,mb, 1, “OUT | MON” , b “ * INCREMENTATION ELEMENT COURANT * m$=“VOULEZ-VOUS VRAIMENT |QUITTER CE PRG ?” RC COPY ecr1%,x1%,y1%,160,176 TO ecr?5,x2%,y24 LF bx=1 C E RR SE A E E RE de A e o e e P E E RE EhuîïË=“ÜUÏ|NÜH° 1îfihe%=]igne_nartn% ËE!EE_SEHVÈT_ÇËFËEÏNÜNEÏ PROCEDURE inc element ALERT U,mb,2,choix5,bé px%=xcarte#+1650 _ ENDIF 1F element courant¥⇐nb elementss [F b%-=1 pyérycarteï | ELSE INC element courant* sortiet=l FOR 1=1 TO 11 Bexec sauver carte(noms) Baff element courant ENDIF né=carte|(colonne_carte*+10,1igne%) ENDLF ‘ Gattüelie SHÔWM PUT px%,py3,elements{n#) ENDIF ENDIF RETURN INC Tigne% HIDEM RETURN ! ADD pyè,16 SPUT fondé | | RR RE E NEXT 1% SHOUM | RR RR RIR E RR RR RR RRN RE E ! # OPTION INFORMATIONS #* Bvisualisation ecr travail RETURN ! = DECREMENTATION ELEMENT COURANT * R el R tJ E EHÜHM = i ! | kx hhdaaxéhéxbhdddmm é éh d d e e É ON pHÜEEDUHE fiff_iflfflfi ENDIF ' - PROCEDURE dec element LOCAL m§,b% RET”HH R B R e b & e b b b b L RE TR RS E RE IF ÈîËmÊflt EÜHT&HË%{?I i

RRh dc ÉÉÉ É É R ok kAR E R TRN VNA RE REN E RIR Baff É]Ë…Ëfiï courant m$=m5+“|{E] 1991 ATARI HflEflEIHE“

* SAUVEGARDE CARTE SUR DISQUE = PROCEDURE charger carte . gattOelie — mà=m3+”

“ + FONCTION SYSTEME Ë LOCAL nom$,paths ENDIF ALERT 0,m$,1,“ OK ”,b% D niede e s i ok v b A o o W o R R R A e e TR LOCAL entete} RETURN RETURN PROCEDURE exec sauver carte(nom$) LOCAL 1%,c% - . : LOCAL enteteï LOCAL b% | hhh e n v gk e d e e e e e et e e s e R W | AEAARAHRRHRRER RR A WWEK LOCAL 1%,c% LOCAL ms #* CLIC SUR UN ELEMENT DE LA CARTE #* | # GESTION ÉDITEUR * ! LOCAL fonds 1R e RRN E R E e e e cd e e hhE V E E E E E A EA @souris abejlle OPEN “O”,#1,nomb SGET, fonds entete$=“CARTE JdR ATARI MAG” path$=DIR${0}+“\#.CAR” ATARE MAGAZIME m BEST OF GFA BASIC PROCEDURE clic carte(xmé,ym) LOCAL =%y,é LOCAL ligne clich PROCEDURE gestion editeur LOCAL xmé, ym%, km% ATAR| MAGAZIME fi BEST OF GFA BASIC JEU DE ROLE EN GFA BASIC DO nb el ements==0 00 MOUSE Xm, YMéÉE , sRIF EXIT IF kmf==0 LOGH 1F @rstzone(xm®, ym*,195,83,110,13) Bguitier programme ENDIF EXIT IF sortie%=] IF Btstzaone(=m%,yms,195,56,110,13) Paff infos ENDIF 1F @tstzone(xms,yms,195,111,110,13) @chargér carte ENDIF IF @tstzone(xmè,ymt,195,138,110,13) Esauver carte ENDIF IF Gtstzoynmè,e 22(8,x14m,20é,1,4) Baller haut ENDIF IF Ctstzone(xmé,ymé,251,14,20,14) Catler bas ENDIF IF @tstzone(xmé, ymé,251,30,20,14) éaller droite ENDIF [F @tstzoynmk,e 22(9,x 30m,20é,1,4) Baller gauche ENDIF 1F Ptstzone(xm®,ymé,xcartes,ycarte*,176,176) Bclic carte(xmé,yms) ENDIF IF Btstzone(xm26s1,% 16,6y,1m4,s18,) @inc element ENDIF IF @Btstzone(x22m5,%16,6,y 1m4,s18,) Bdec_element ENCIF LOUP lîgne carte%=l colonne cartes=1 element courant=-! xcartes=6 vcartes=l= Gcharge elements (“ELEMENTS.BIN®) @init carte HIDEM GRAPHMODE 2 @aff ecran @aff carie BMOVE XBIOS(Z2),adr2%,32000 @souris fleche SHOWM etats=1 @gestion eciteur RETURN Pour finir 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

back2root/archives/jeu-de-role-en-gfa-basic/02-editez-vos-cartes-graphiques.1749658791.txt.gz · Dernière modification : de frater