Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
back2root:archives:jeu-de-role-en-gfa-basic:02-editez-vos-cartes-graphiques [2025/06/11 22:44] – 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 168: | Ligne 168: | ||
==== La simplicité n'est pas de ce monde ==== | ==== La simplicité n'est pas de ce monde ==== | ||
- | Initialement, | + | Initialement, |
- | -: | + | |
- | simples et performantes aussi bien sur STE que STF [dommage | + | ==== Un système d’affichage simple |
- | que tous les ST ne soient pas dotés de blitter). Les routinés | + | |
- | d' | + | La première méthode qui vient à l' |
- | un peu complexes à comprendre pour un programmeur | + | |
- | debutant. | + | La position |
- | Un système d’affichage simple | + | |
- | La première méthode qui vient à l' | + | En mettant |
- | l' | + | |
- | codage de la carte est stucké | + | Pour déplacer |
- | graphiques de base dans le tableau | + | |
- | Gaff carte dessine la carté | + | Pour déplacer |
- | La pésition | + | |
- | cst contenu dans les variables | + | Remarque: la position (1, 1) correspond au premier indice du tableau |
- | En mettant | + | |
- | de la carte est affiche sur Pecran. | + | Le morceau de carte visible est affiché à l' |
- | Pour déplacer | + | |
- | la variable | + | <code freebasic> |
- | @aff carte. | + | OPTION |
- | Fnur_q:' | + | ' |
- | ligne carte er exécuter | + | xcarte%=16 |
- | Remarque: la position (1, 1) correspond au premier indice du tableau | + | ycarte%=5 |
- | conténant | + | ' |
- | ci, le premier indice du tableau a la position (0,0). | + | ligne carte%=30 |
- | Le morceau de carte visible est affiché à l' | + | colonne_carte%=67 |
- | par les variables xcarte* et ycarte*. Etant donnd là sccucture | + | ' |
- | de la mémoire vidéo et la manière dont fonctionnent les Instruetions | + | @aff_carte |
- | graphiques du GE4 Basic, il est préférable d' | + | |
- | d' | + | |
- | d' | + | |
- | OFTION | + | |
- | scartes=16 | + | |
- | vcarté%=5 | + | |
- | ligne cartes=30 | + | |
- | cn]unng_cart& | + | |
- | éaff carte | + | |
END | END | ||
- | PROCEDURE | + | |
- | LOCAL 1%,c0% | + | PROCEDURE |
- | 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 | + | ' |
- | FOR 1=1 TO 11 | + | posy%=ycarte% |
- | posx#=xcartes | + | |
- | 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% | + | |
+ | ADD posy%,16 | ||
+ | NEXT l% | ||
RETURN | RETURN | ||
- | Pour gérer les déplacements, | + | </ |
- | 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, |
- | controler | + | |
- | la carte. | + | <code freebasic> |
- | ATARI MAGAZINE H BEST OF GFA BASIC | + | PROCEDURE |
- | PROCEDURE | + | IF ligne_carte%<> |
- | IF ligne cartes==1 | + | DEC ligne_carte% |
- | DEC 1igne cartes | + | |
- | Baff carte | + | ENDIF |
- | ENDIF | + | |
RETURN | RETURN | ||
- | PROCEDURE | + | ' |
- | IF ligne cartese=ligne max® | + | PROCEDURE |
- | INC ligne carte% | + | IF ligne_carte%<> |
- | Baff carte | + | INC ligne_carte% |
- | ENDLF | + | |
+ | ENDIF | ||
RETURN | RETURN | ||
- | PROCEDURE | + | ' |
- | 1F colonne cartesss-1 | + | PROCEDURE |
- | DEC calonne cartes | + | IF colonne_carte%<> |
- | Baff carte | + | DEC colonne_carte% |
- | ENDIF | + | |
+ | ENDIF | ||
RETURN | RETURN | ||
- | PROCEDURE | + | ' |
- | IF colonne carte*=- | + | PROCEDURE |
- | INC colonne cartes | + | IF colonne_carte%<> |
- | Gaff carte | + | INC colonne_carte% |
- | ENDT F | + | |
+ | ENDIF | ||
RETURN | RETURN | ||
- | Ce système est parfait sur le papier, mais une fois mis en ceuvre, il se | + | </ |
- | révéle | + | |
- | en informartique, | + | Ce système est parfait sur le papier, mais une fois mis en oeuvre, il se révèle |
- | 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' |
- | l' | + | |
- | gauche, le programme ne dessine vraiment que la nouvelle | + | Cette technique fonctionne, mais présente |
- | 11, De la même manière, lors d' | + | C'est souvent un avantage, mais dans notre cas particulier, c’est |
- | seule la colonne 1 est nouvelle, Puisqu' | + | |
- | décalée, au licu de le redessiner, on peut la déplacer en une seulc | + | La seule manière d' |
- | opération graphique. L'une des solutions possible est de lire la portion | + | |
- | de carte avec l' | + | La fonction |
- | avec PUT, | + | |
- | Cette technique fonctionne, mais présente | + | <code freebasic> |
- | esthétique, | + | adr_tampon%=MALLDC(32255) |
- | d' | + | adr2%=(adr_tampon%+255) AND & |
- | 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 | + | Les variables //adrl%// et //adr2%// contiennent l'adresse |
- | que l’affichage s' | + | //adr1%//, l' |
- | La seule manière d' | + | |
- | opérations graphiques en mémoire et de les recopier rapidement sur | + | Lorsque le programme a terminé de dessiner |
- | Pécran | + | |
- | encore meilleur, le programme | + | <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' | + | |
- | 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 759: | 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 |