	TADS: crez votre jeu d'aventures
	*********************************

	Vous tes comme moi incapable de pondre un graphisme mme moyen et
le summum de vos crations sonore est le son de cloche du bureau.
Pourtant, vous vous sentez l'me du scnariste et les millers d'ides qui
peuplent votre esprit restent congeles faute d'avoir pu leur donner vie.
TADS est fait pour vous!

TADS, qu'est-ce?
----------------

	Si je voulais vous faire peur, je dirai que c'est un langage
orient objet, trs semblable au C++ en apparence mais dont le but est de
crer des jeux d'aventures. TADS lui-mme signifie: "text adventure
development system", autant dire "systme de dveloppement d'aventures
textes". Mais, comme je ne veux effrayer personne, je dirai que c'est un
langage extrmement simple qui permet de dcrire les lieux, les
personnages et les objets formant une histoire interactive.
	Par la suite, ds que vous tes familiaris avec les objets de
base, vous aurez certainement envie d'utiliser la puissance du "Orient
Objet" pour affiner vous aventures.
	Cela reste je crois, le meilleur moyen d'aborder ce type de
programmation car pour une fois on manipule de vrais objets!

Allez, un petit exemple
-----------------------
	Nous allons crer un univers sommaire compos d'une chambre et
d'un extrieur communiquant par un seul passage nord-sud.

#include <adv.t>
#include <std.t>

	Deux lignes indispensables qui chargent les librairies de base
dcrivant les objets courants tels que les portes, les cls, les
interrupteurs, etc...

startroom: room
    sdesc = "chambre"
    ldesc = "Vous etes dans une chambre contenant un simple lit.
            Par le fenetre, vous pouvez voir qu'il neige. La sortie
            est au Nord"
    north = exterieur
    ;

    	C'tait la description de la chambre. Son nom de code sera
'startroom', c'est un nom oblig pour la pice de dpart. Ca pourrait tre
l'quivalent de la procdure main() du C. Le mot cl "room" indique que
c'est un objet "room", c'est  dire un lieu dans lequel le hros peut se
tenir. Les lignes sdesc et ldesc fournissent une description courte (short
description) et une description longue de la pice. La description longue
ne vous est donne que lors de votre premire visite ou lorsque vous
demandez expressment de regarder autour de vous.
	La ligne "north" indique que si je vais au nord, c'est vers la
pice "exterieur". Il me faut donc crer ce second lieu:

exterieur: room
    sdesc = "exterieur"
    ldesc = "Il fait terriblement froid, une chambre se trouve au Sud."
    south = startroom
    ;

	Vous comprenez facilement que si je vais au sud, je retombe dans
la chambre, la startroom.
	Voil, c'est fini! Je n'ai plus qu' sauver ce texte sous
"EXEMPLE.T" et  le compiler avec TC.TTP en lui donnant comme paramtre
EXEMPLE.T (ou EXEMPLE car le T est l'extension par dfaut). Si aucune
erreur n'est signale, vous obtenez en sortie le fichier EXEMPLE.GAM,
votre jeu.
	Pour y jouer, je lance TR.PRG et je charge EXEMPLE.GAM. La
description de la chambre s'affiche et TADS attends une instruction. Si je
tape "n [ENTER]", il ira au nord et je me trouve alors  l'extrieur. Si
je tape "s [ENTER]" il revient au sud dans ma chambre. Pour sortir, je
tape "quit [ENTER]".

O trouver TADS?
----------------

	Avant de d'aller plus loin, vous aurez certainement envie de
"tripatouiller". TADS est un systme vieux de plus de 10 ans, mis au point
par un certain Mickael J. Roberts qui continue d'amliorer son produit. Si
il tait commercial au dpart, il est devenu libre aujourd'hui. Le
programme d'origine tourne sous DOS pour les versions 1.x et 2.x et sous
Windows depuis la version 3. Le portage, ralis par des passionns, a
fait natre des cousins TADS pour Macintosh, Linux, Amiga et Atari!
	Pour ceux ayant un accs Internet, voici les adresses
intressantes:
	http://www.duke.edu/~srg3/IFprogramming/tads.html
	Cette page vous donnera accs au diffrentes versions de TADS
(sauf celle pour l'Atari),  pas mal d'infos ainsi qu'aux documentations
HTML qui sont une description complte du langage avec exemples  l'appui.
Pour obtenir la version Atari, allez sur:
	ftp://ftp.gmd.de/if-archive/programming/tads/
	On y trouve un fichier dont j'ai oubli le nom exact, mais qui
commence par ATARI et finit par l'extension ARC. Entre les deux il doit y
avoir quelques chiffres. Il vous faudra ARC.TTP pour le dcompresser, on
le trouve avec TWOinONE. Cette archive correspond  une version 2.2 de TADS
qui est dj bien complte.
	Pour ceux qui n'auraient pas Internet, j'ai aussi trouv TADS sur
le CD-Rom Atari Gemini dans le rpoertoire \files\games\adventr\tads. Il
s'agit ici d'une version 1.1  laquelle manquent certaines facilits.
	Les fichiers importants sont:
	TC.TTP: le compilateur TADS qui cre les *.GAM
	TR.TTP/PRG: l'interprteur de GAM qui vous fait jouer.
	ADV.T: fichier texte contenant les dfinitions des objets et
	verbes de base
	STD.T: quelques routines supplmentaires de dfinition que, par
	rapport  celles de ADV.T, vous voudrez certainement personnaliser
	(la routine INIT de dmarrage, le nom de la pice de dpart,
	etc...).

	Selon les packages, le jeu DITCH.T peut vous tre offert
galement. C'est un bon exemple et une source d'inspiration (ou de
copier/coller) importante pour vos jeux.

	La prsence de TADS sur nos machines est due au travail de deux
amricains Dave Leary et David Bagget. Passionns par les jeux, ils ont
port la version 1.1 et 2.2 sur Atari en utilisant le compilateur GCC sur
un simple 520ST mont  4Mo. Ils ont galement crit plusieurs aventures
dont "Unnkulian Underworld" qui se trouve aussi sur le CD Gemini en deux
pisodes. Regroups sous le nom de "Adventions Company", leurs travaux se
sont tals de 1990  1994, date  laquelle est sortie leur dernire
cration "The legend lives!". Depuis, plus rien... C'est ainsi que nous ne
pouvons pas bnficier des versions suprieures  la 2.2. Sous DOS, on
pousse jusqu' la 2.54. Pour ceux qui suivent mes articles, la version DOS
2.54 tourne trs bien avec le Supercharger...

	Pour la petite histoire, David Bagget en particulier eut un autre
projet: celui de crer une librairie facilitant l'criture de jeux en
langage C. Les versions bta de cette librairie assembleur nomme Game
Workbench (co-crite par Neil Forsyth)  ont servi de support pour HACMAN
II par exemple. Le march Atari tant devenu ce qu'il est, David a laiss
tomber ces projets d'en faire un produit commercial.

Avanons un peu...
------------------

	Retournons sur la description des deux pices: l'une contient la
mthode north et l'autre contient la mthode south. Mais, que se passe
t-il si dans la chambre je veux aller au Sud? Rien n'est prvu en
apparence. Ici intervient la puissance de la POO (programmation oriente
objet). Le fait d'avoir dclar la chambre comme tant une "room" fait
qu'elle hrite de toutes les mthodes propres aux "rooms". Et par dfaut,
elles ont toutes une mthode north, south, east, west qui se contente de
vous dire que vous ne pouvez pas aller par-l. En crivant "north =
exterieur" j'ai simplement remplac la mthode gnrale par une mthode
particulire  ma chambre, qui elle, a bien une sortie.
	Mais la mthode north peut tre plus complique que a et inclure
tout un bout de programme. Il suffit qu'en sortie elle me renvoie le nom
d'un pice ou "nil" qui signifie qu'on ne peux pas bouger. Par exemple,
remplacez la mthode north de la chambre par:
	north = { "Malgr la neige, vous dcidez de sortir.";
		return(exterieur);
		}

	Ds que vous allez au Nord, le petit message s'affiche et vous
sortez effectivement. Essayez alors ceci:
	east = { "Vous vous cognez contre un mur.";
		return(nil);
		}

	Si vous voulez aller  l'Est, vous n'aurez plus le message par
dfaut, mais un nouveau. Notez le return(nil) qui fait que vous restez
dans votre chambre.

Ajoutons des objets
-------------------

	Pour mettre un peu de sel dans cette aventure (c'est vrai que,
jusque l, elle est un peu plate), nous allons ajouter un lit sur lequel
sera dpos un manteau. De plus, nous refuserons la sortie au hros si il
n'a pas mis son manteau (ben oui, manquerait plus qu'il attrape froid).
Voici les ajouts:

lit: fixeditem, surface
    location = startroom
    noun = 'lit'
    sdesc = "lit"
    ldesc = "C'est votre lit, mal fait comme toujours"
  ;

	Le lit est un objet fixe (mot cl fixeditem), ce qui fait que par
dfaut vous ne pouvez pas le prendre. On aurait pu en faire un item normal
et crire nous mmes la mthode qui ragit au verbe prendre (take), mais 
quoi bon se fatiguer... Il est situ dans la chambre (location =
startroom). Le lit est galement une surface, ce qui fait qu'on peut y
dposer des objets dessus, c'est exactement ce dont j'ai besoin pour y
mettre mon manteau.

manteau: clothingItem
    location = lit
    noun = 'manteau'
    sdesc = "manteau"
    ldesc = "Il semble fait pour les grands froids. "
  ;

	Le manteau est un objet vtement (clothingItem). Sa seule
diffrence par rapport  un objet standard c'est qu'il ragit au verbe
"wear" (porter, enfiler) en mettant sa proprit "isworn" (est port) 
"true" (vrai). Ce qui me permet de tester cet indicateur ailleurs dans le
jeu. Si manteau.isworn est gal  true, je sais que le hros porte le
manteau, si manteau.isworn est gal  nil, je sais que le hros ne porte
pas le manteau.
	Voici donc la nouvelle dfinition de la mthode north pour la
chambre:

north = { if (manteau.isworn=true)
    		{ "Grace au manteau, vous pouvez sortir sans crainte.";
    		  return(exterieur);
    		 }
    	      else
    	      	{ "Il fait trop froid dehors, vous mourrez avant d'avoir
    	      	 parcouru 100 metres!";
    	      	  return(nil);
    	      	}
    	     }

	Le passage du hros vers le Nord est conditionn par le port du
manteau. Voici finalement la "soluce" pour aller au bout de ce jeu:

take manteau
wear manteau
north

	Vous remarquerez que la ldesc (description longue) des objets
n'est pas affiche. Il faut la demander expressment:
look at lit
look at manteau

Quelques prcisions techniques
------------------------------

	Sachez que le compilateur TC.TTP est "case sensitive" comme on
dit. C'est  dire qu'il attache de l'importance aux majuscules et
minuscules. C'est ainsi que true n'est pas gal  True et que clothingitem
n'est pas gal  clothingItem. Si vous ne faites pas attention  ce
dtail, vous risquez de recevoir quelques pages d'erreurs  la
compilation...
	Autre limitation, jusqu'ici TADS supporte mal les accents,
restez-en donc aux lettres du code ASCII standard.

L'anglais et moi, a fait deux!
-------------------------------

	Vous avez remarqu que les commandes sont  donner en anglais. Si
vous matrisez la langue, crivez toute l'aventure en anglais, a sera
plus homogne.
	Dans le cas contraire, faites des descriptions en franais mais
sachez qu' l'utilisation il faudra accepter un peu de yaourt du genre
"take parapluie" ou "open porte". C'est la solution que j'ai retenue pour
cet article.

	Dernire possibilit, vous vous lancez dans la traduction complte
de ADV.T et STD.T. J'ai commenc avec la version 1.1 et on obtient des
rsulats plutot satisfaisants avec des phrases presque naturelles. Mais
pour arriver  un rsultat parfait, le travail est assez consquent. Pour
la version 2.2, il sera double puisque le fichier ADV a doubl...

De la puissance sous le capot
-----------------------------

	Sachez que TADS va trs loin dans la simulation de la ralit.
Vous pourrez crer des personnages qui se dplacent tous seuls selon un
itinraire prvu ou selon un itinraire alatoire. Vous pouvez par exemple
crer un garde qui dpose son trousseau de cls dans chaque pice qu'il
visite. Comme il est mobile, ses cls ne vous sont accessibles que si vous
le rattrapez.
	Vous pouvez crer des "daemons": ce sont des procdures qui
s'excutent  chaque tour de jeu. Le daemon classique est celui qui gre
votre faim: vous pouvez dcider que tous les 50 tours, il vous faudra
quelque chose  grignotter, sinon, le hros meurt. Le principe est le mme
pour le sommeil.
	Vous pouvez dfinir des "fuses" (fusibles) qui sont des procdures
qui s'excutent une seule fois au bout d'un temps donn. Par exemple, si
le hros enclanche une bombe  retardement, vous pouvez crer un fuse qui
dclanchera la bombe dans 20 tours. Ou si vous tes pig dans une fosse
qui s'emplit d'eau, vous pouvez dcider que le hros n'a que 10 tours de
jeu pour s'en sortir avant que la fosse ne soit pleine. Ceci s'adapte aux
clairages par minuterie dans les endroits sombres, au temps de
dplacement d'un ascenseur, etc...

En attendant la suite...
------------------------

	Procurez-vous au plus vite les excutable de TADS. Je peux aussi
vous les fournir, mais comme toujours ce sera contre une disquette et un
timbre  4F50.
	Dans le prochain article, nous crirons un jeu plus consquent.
Pour cela, j'utiliserai une trame fournie dans les Docs HTML de TADS que
je me contenterai de complter et de vous expliquer. Ce sera l'occasion de
voir les objets containers, de voir les cls et portes, les
interrupteurs, etc...

	Guillaume Tello
	240 rue Estienvrin
	49260 Montreuil Bellay
	gtello@wanadoo.fr