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.
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 11×11 éléments graphiques mesurant chacun 16<16 pixels. Elle mesure 176×176 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 | |
(] | ||||
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 16×16 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- | 16×16 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 *
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$,l 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
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
! * CHARGEMENT IMAGE # e DEGAS ELITE L
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 11×11 é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 i 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 *
! * Paysans = g ' * Colporteur = 105 *
# 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 16×16 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:ttijk#ki*t#*t*t* « (C) 1991 ATARI MAGAZINE #. * (£} 1991 PATRICK LECLERCO = D RSSIE E ok e A o Fi RR R i 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 i | *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 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% i 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 k 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*ii*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
“ % SCROLLING VERS LE HAUT *
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*#ÿÿtttttn:i*fitt* 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 D [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 i | 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&t 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 I 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 i R e E R R E RE o e L SR | * GESTION DES ORDRES DU JOUEUR * | RRRRERTT TVREUTERI3TEEX PROCEDURE gestion programme LOCAL eyv* i cH évs-Batetv exec fonction(ev®) EXIT IF sortie=-l LUOF RETURN 1 =” 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: L E E E E e A ds TABLE I — RUINES * i #ktiitttt***###tttt*
% 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