!% ! Les options ci-dessous sont destinees au compilateur :
!% ! (toutes sont desactivees dans cet exemple)
!% ! +include_path=..\..\bibliotheques
!% ! language_name=French ;
!% ! -v5 ! version souhaitee : v5, v8, G, etc...
!% ! -s ! give statistics
!% ! -X ! infix (ne pas laisser dans la version publiee ; non disponible avec Glulx)
!% ! -D ! debug (ne pas laisser dans la version publiee)
!% ! -r ! imprime le contenu du jeu pour envoi vers un correcteur d'orthographe
!% !+transcript_name=gametext.txt ! fichier d'arrivee
!% !$MAX_SOURCE_FILES=512
!% !$MAX_INCLUSION_DEPTH=10
!% !$MAX_LABELS=50000
!% !$MAX_INDIV_PROP_TABLE_SIZE=50000
!% !$MAX_STATIC_DATA=20000

!--------------------------------------------
! Constantes generales
!--------------------------------------------

Constant Story "Le temple de Feu";
Constant Headline "^Une aventure dans une vallee lointaine^^
               Copyright (c) 2005-2007 par Eric Forgeot^
               Ecrire ~aide~ pour des instructions rapides, et ~credits~ pour les instructions legales.^^";
Release 3;

! Constant DESACTIVER_IMPERATIF_DPS;
! Constant DESACTIVER_IMPERATIF_DPP;
! Constant DESACTIVER_INDICATIF_PPS; ! necessite l'IMPERATIF_DPS
! Constant DESACTIVER_IMPERATIF_PPP;

Constant MAX_CARRIED 6;
Constant MAX_SCORE 8;
Constant OBJECT_SCORE 1;
Constant ROOM_SCORE 1;
Constant SACK_OBJECT = SacDos;

Attribute nicheable ;
!Attribute vide ;

Global deboggage = 0;
!Global score = 1 ;
Global enigme = 0 ;

Global modereplay = 0;

#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
       Constant GG_MAPWIN_ROCK 210;
       Global gg_mapwin = 0;
       Global musicon = 1;
       Global gg_musicchan = 0;
       Constant theme;
       Constant fin;
       Constant outro;
       Global modeimages = 1;
#endif;


!--------------------------------------------
! Directives de remplacement
!--------------------------------------------
! [DeathMessage; print "Game Over";];

Replace RestartSub;

!--------------------------------------------
! Attributs
!--------------------------------------------

!--------------------------------------------


#Include "Parser";
#Include "VerbLib";
Include "CCPL-fr";
Include "smartcantgo-fr";
Include "infglk";
Include "dirsmap-fr";


!--------------------------------------------

[ PrintRank;
print ", vous donnant le rang ";
if (score == 8) "de maitre.";
if (score >= 7) "de sage.";
if (score >= 3) "d initie.";
"de touriste.";
];


! ---------------------------------------------------------------------------
! Ceci change le comportement du jeu quand on utilise le mot "tout"
! ou un mot ambigu
! ---------------------------------------------------------------------------


[ChooseObjects obj code;
if (code<2) { if (obj has scenery) return 2; rfalse; }
if (action_to_be==##Eat && obj has edible) return 3;
if (obj hasnt scenery) return 2;
return 1;
];

!--------------------------------------------
! Variables
!--------------------------------------------


!--------------------------------------------
! Routines
! -------------------------------------------

[Attend;
   if (modereplay == 0)
       KeyCharPrimitive();
];

[Pause;
   if (modereplay == 0)
       KeyDelay(40);
];

[Gras; ! style Gras
   #ifdef TARGET_ZCODE;
   #ifnot; ! TARGET_GLULX;
   glk_set_style(style_Emphasized);
   #endif; ! TARGET_
];

[Italique; ! Italique
   #ifdef TARGET_ZCODE;
   #ifnot; ! TARGET_GLULX;
   glk_set_style(style_Note);
   #endif; ! TARGET_
];

[Normal; ! style normal
   #ifdef TARGET_ZCODE;
   #ifnot; ! TARGET_GLULX;
   glk_set_style(style_Normal);
   #endif; ! TARGET_
];



!--------------------------------------------
! Modeles d'objets (declarations de classes)
!--------------------------------------------

Class Village
       with
                cant_go [; SmartCantGo(); ],
                before [;
                         Listen: print "Le vent fait vibrer les nombreux arbres alentours.^"; return true;
                         Disrobe:
                                               if ( Location ~= Ruelles1 && (HabitsPrinciers has worn || HabitsNormaux has worn ))
                                                { print "Vous ne pouvez changer vos habits devant tout le monde. ^"; rtrue; } ;
                       Go:
                                               if ( HabitsPrinciers has worn || HabitsNormaux has worn )
                                                rfalse;
                                               else { print "Vous ne pouvez aller au dehors sans habits sur vous. ^"; rtrue; }
                        ],
       has scenery light ;


Class temple
       with
                cant_go [; SmartCantGo(); ],
                before [;
                         Listen: print "Vous entendez le bruit feutre des esprits du temple qui se glissent le long des murs, le chant des feux allumes qui brulent joyeusement un peu partout, le cri du vent qui pousse l'air vers le feu, et accessoirement un leger bruit de gouttes d'eau qui percutent le sol.^"; return true;
                         Disrobe:
                                               if ( Location ~= Ruelles1 && (HabitsPrinciers has worn || HabitsNormaux has worn ))
                                                { print "Vous ne pouvez changer vos habits devant tout le monde. ^"; rtrue; } ; ],
       has scenery light ;


Class Personnage
       with life [;
       ! Answer,Ask,Order,Tell:
       ! print_ret "Utilisez plutot -parler a-", (the) self, "." ;
                         ],
       initial [;
       ; ],
       has animate proper;


Class Terre (2)
       with
                name 'terre' 'poignee' 'de',
                short_name "poignee de terre",
                description "De la terre.",
                before [;
                         Empty: <<drop self>> ;
                          ],
       has nicheable female;


Terre "terre"
       with
               dansniche4 0,
               name 'terre' 'poignee',
               short_name "poignee de terre",
               before [ poignee;
                       Take:
                       poignee = Terre.create();
                       ! poignee.name("une poignee de terre");
                       if (poignee == nothing)
                       "Il n'y en a plus.";
                       move poignee to location;
                       <<Take poignee>>;
                       ],
               found_in SalleTerre,
       has scenery female ;


!--------------------------------------------
! Plan des lieux (pieces, portes...)
!--------------------------------------------

Village Port "Le port de Vahishnali"
       with
                name 'port' 'quai' 'quais' 'berges',
                viewed 0,
                initial
                [;
                if (Torche has on || Lampe has on ) bateau.aquai = 1 ;
                if (Torche.sacre == 1 || Lampe.sacre == 1)  move assassins to Port ;
                if (self.viewed == 0)    { print "^

               _____________________________________________________^^^^

                Les voiles multicolores du bateau qui vous a porte ici battent encore dans le vent, et vous appreciez ce dernier d'autant plus qu'il ne charrie pas comme dans votre pays des odeurs de sang, de mort, de terreur, ou d'incendies tout juste eteints. ^Vous etes deja passe par cette region lorsque vous etiez enfant, mais vous n'etiez pas retourne ici depuis lors, car le voyage en est tellement long.^Vous esperez que ceux qui vous poursuivent n'auront pas le temps d'apporter ici la meme desolation qui a detruit votre pays natal. Quoi qu'il en soit, ce n'est que l'avant-garde qui court apres vous, le reste ayant encore fort a faire pour assoir sa domination, aussi vous avez encore un peu de temps pour trouver de l'aide et organiser votre retour, et esperer conduire a la victoire un peuple libre et enthousiaste, votre peuple, vos pairs !^"; self.viewed = 1 ; rtrue; } ; ],
                description
                         "Le port est empli de monde. Les quais sont disposes en cercle, d'une facon qui semblerait originale a n'importe qui de votre region. Cette disposition se retrouve ici un peu partout sauf pour les plus gros bateaux qui suivent un peu plus loin un arrangement lineaire. On peut rejoindre l'entree des divers vaisseaux en empruntant un petit dedale de pontons parfois encombres de camelots ambulants.",
                n_to place, e_to Ruelles1
       has light;


Village Ruelles1 "Ruelles sombres"
       with
                name 'ruelles' 'rue' 'sombre' 'sombres',
                description
                       "Vous arrivez dans un ensemble de ruelles sombres et sordides qui denaturent un peu l'atmosphere de cette ville. Les chemins et les maisons ne sont pourtant pas trop sales dans ce quartier, mais ils n'inspirent pas confiance. Il n'y a rien qui vous rappelle les splendeurs passees de ce pays, ou un age d'or commencant avait procure faste et richesses a toute la region. Ici le contraste est flagrant. Heureusement ce genre d'endroit reste tres marginal dans la region, et aussitot que vous le quitterez, vous l'oublierez bien vite.",
                w_to port, e_to "Vous sentez que vous n'avez rien a faire dans cette direction. De plus cela pourrait devenir trop dangereux, n'oubliez pas que vous etes poursuivi."
       has light;


Village place "Place du village"
       with
               name 'place' 'du' 'village',
               viewed 0,
               initial
               [; if (self.viewed == 0)          {
               #ifdef TARGET_ZCODE;
               #ifnot; ! TARGET_GLULX;
                               ! templefeux2x.png
                       glk_image_draw(gg_mainwin,6,imagealign_InlineCenter, 0);
                musique_theme();
                         print "^";
               #endif; ! TARGET_
               print "Vous passez par quelques rues sans interet, emplies de voyageurs et d'habitants, pour rapidement aboutir au centre du village.^^";
                       self.viewed = 1 ; rtrue; } ; ],
               description
                       "La place de cette toute petite ville est entouree des plus belles constructions de la region. Leurs toits dores refletent toutes les facettes du ciel profond de cette journee. Tout au centre se tient un temple qui est encore plus impressionnant que tout le reste. Des flammes brulent au sommet de celui-ci, bien a l'abri des trois principaux vents qui soufflent dans ce pays.",
                s_to port, w_to place2, n_to place3, e_to "Il y a bien une petite activite dans cette direction egalement, principalement des marchands de legumes et d'epices, neanmoins vous estimez qu'il n'est pas pertinent d'aller perdre votre temps par la, meme si en d'autres occasions vous auriez fait cela avec delice.",
       has light;


Village place2 "Place du village"
       with
               name 'place' 'du' 'village',
               viewed 0,
               initial
                [; if (self.viewed == 0)         { print "^^Vous vous approchez d'une petite echoppe en peripherie de la place.^"; self.viewed = 1 ; rtrue; } ; ],
               description
                       "Vous etes en face de l'entree d'un magasin a moitie ouvert sur l'exterieur. Les rues specifiquement commercantes, et donc fort frequentees, sont plutot vers l'est, aussi vous estimez plus raisonnable de rester dans celle-ci. Vous pensez que si vous avez besoin de quelque chose de precis, ce genre de marchand doit avoir tout a disposition. Diverses choses indescriptibles pendent aux poutres du dehors, mais il n'y a la rien pour vous interesser.",
               e_to place, n_to echoppe, in_to echoppe,
       has light;


Village echoppe "Echoppe"
       with
                name 'echoppe' 'magasin' 'bazar',
                viewed 0,
                initial
                [; if (self.viewed == 0)         { print "Lorsque vous entrez vous etes impressionne par le desordre qui regne ici.^^"; self.viewed = 1 ; rtrue; } ; ],
                description
                       [; print "Cette echoppe est plutot mal rangee, mais elle est tellement emplie de choses qu'il ne pourrait guere en etre autrement. Un vieux marchand se trouve au fond de l'unique piece, plante la comme s'il vous attendait." ;
                       if (self.viewed == 0) { print "Vous ne pouvez passer votre temps a fouiller ici, mais vous trouverez sans doute quand meme quelques motifs d'achat.^^"; self.viewed = 1 ; rtrue; } ; ],
                s_to [; if (HabitsNormaux has worn || HabitsPrinciers  has worn) PlayerTo(place2) ;
                         else "Vous ne pouvez pas sortir si vous n'etes pas decemment habille." ; rtrue ;],out_to [; if (HabitsNormaux has worn || HabitsPrinciers  has worn) PlayerTo(place2) ;
                         else "Vous ne pouvez pas sortir si vous n'etes pas decemment habille." ; rtrue ;],
       has light;


Village place3 "Place de la tour"
       with
               name 'place' 'de' 'la' 'tour',
               viewed 0,
               initial
                       [; if (self.viewed == 0)          { print "^^Vous vous approchez de la tour. Il y a un peu moins de monde ici - cette place etant sacree -, vous mettant ainsi un peu plus a decouvert. Quelques personnes vous regardent, mais vous ne reconnaissez pas le physique particulier des assassins lances a vos trousses. Pourtant, il vaut mieux rester pare a toutes les eventualites, et ne pas eveiller trop l'attention.^"; self.viewed = 1 ; rtrue; }
                               if (self.viewed > 0 && self.viewed < 5) {++self.viewed ;  rfalse ; }
                               if (self.viewed > 4 && HabitsNormaux hasnt worn) {
                                       print "^^Vos allees et venues n'ont pas ete suffisamment discretes, et rapidement en passant pres du temple des assassins surgissent comme de nulle part. Ils n'ont pas beaucoup de mal a finir leur triste travail.^^" ; musique_action(); deadflag=1; print " Vous terminez votre aventure ici." ; rtrue ; }
                 ; ],
               description [;
               if (deadflag==1) rtrue ;
               else
                       "Vous etes en face de l'entree du temple. Vu d'ici, vous pouvez voir plus d'ornementations sur les murs, ainsi que des ecritures dans une langue que vous reconnaissez. Les mots que vous formez rapidement dans votre tete sont des chants et des prieres traditionnels, utilises jadis dans l'enseignement de l'histoire et de la religion. De multiples niches et ouvertures viennent caracteriser encore plus l'origine de ce temple. " ;],
               s_to place, n_to [; if (HabitsNormaux has worn) { PlayerTo(temple1) ; rtrue ; } else "Le garde vous detaille brievement, mais ne vous laisse pas entrer."; rtrue ;], in_to [; if (HabitsNormaux has worn) { PlayerTo(temple1) ; rtrue ; } else "Le garde ne semble pas vouloir vous laisser entrer ainsi." ; rtrue ;]
       has light;


temple temple1 "Temenos"
       with
               viewed 0,
               initial
                       [; if (self.viewed == 0)
                               { print "^^Vous arrivez dans la salle principale du temple.^"; musique_temple(); self.viewed = 1 ; rtrue; } ; ],
               description
                       "Cette grande piece de trente pieds sur vingt est le lieu de vie du temple, la ou sont celebres les cultes publics. La peinture sur les murs est encore plus vive et complexe ici qu'ailleurs. Les motifs representes sont la vie des dieux et des anciens rois, leurs luttes pour la sauvegarde de leur dynastie, ainsi que des images des divers pretres qui se sont succedes a la tete de ce temple et de ceux des villes les plus proches. Au fond vous voyez des colonnades formant une foret bien ordonnee de piliers aux troncs reguliers.",
               s_to place3, out_to place3, n_to temple2, e_to temple1b, w_to temple1a
       has light scored;


temple temple1a "Temenos"
       with
               viewed 0,
               initial
                [; if (self.viewed == 0)         { print ""; self.viewed = 1 ; rtrue; } ; ],
               description
                       "Vous etes sur un des cotes de la grande piece principale. Ici se retrouvent les memes ornementations que dans la partie principale. Des ouvertures carres, mais relativement petites, ont ete pratiquees dans le plafond, faisant entrer un peu plus de lumiere ici qu'ailleurs, et permettant le contempler le ciel, et sans doute egalement les etoiles durant la nuit.",
               e_to temple1
       has light;


temple temple1b "Temenos"
       with
               viewed 0,
               initial
                [; if (self.viewed == 0)         { print ""; self.viewed = 1 ; rtrue; } ; ],
               description "Vous etes sur un des cotes de la grande piece principale. Les histoire en mosaiques luisantes se continuent ici egalement",
               w_to temple1
       has light;

temple temple2 "Les colonnes"
       with
               viewed 0,
               initial
                [; if (self.viewed == 0)         { print "^"; self.viewed = 1 ; rtrue; } ; ],
               description
                       "La sortie de cette grande salle est balisee de colonnes imposantes.",
               s_to temple1, n_to entreetemple
       has light;

temple entreetemple "Entree du temple"
       with
               name 'entree' 'du' 'temple',
               viewed 0,
               initial
                       [; if (Torche has on || Lampe has on ) bateau.aquai = 1 ;
                       if (self.viewed == 0)
                               { bateau.aquai = 0 ; print "^^Cette partie du temple est le debut vers l'entree des lieux les plus sacres de la region. Juste au dessus de vous se trouve la tour ou est garde le feu que vous recherchez.^"; self.viewed = 1 ; rtrue; }
                       ;],
               description
                       "Vous etes a l'entree du centre du temple, la ou se trouvent les epreuves symboliques qui transforment l'adepte en initie. Sur les cotes se trouvent des couloirs etroits qui visiblement menent vers des lieux moins solennels.",
               s_to temple2,
               w_to couloir1,
               e_to couloir4,
               n_to [ x count ;
                       objectloop(x in Niche3)
                               if (x ofclass Terre)
                       count++;
                       if ((tuile1 in Niche1 || Torche in Niche1  || Lampe in Niche1) || (tuile2 in Niche2 || Vase in Niche2 || croix has on) || (tuile3 in Niche3 || terre in Niche3 ||(count == 1) || (tuile4 in Niche4 || child(Niche4) == tuile4)))
                               { PlayerTo(vestibule) ; move PorteEntreetemple to thedark; rtrue ; }
                       else print "Un porte bloque l'entree du temple.^" ; move PorteEntreetemple to entreetemple ; rtrue ;]
       has light ;

Object PorteEntreetemple "Entree du temple"
       with
               description "Cette porte en metal est apparue a la place de l'entree par ou vous comptiez passer.",
               name 'porte' 'entree' ,
               before [;
                       push, attack : print "Vous poussez de toute vos forces cette porte obstruant le passage. Elle pivote, et vous vous retrouvez finalement de l'autre cote.^" ; PlayerTo(vestibule) ; score = score - 3 ; enigme = 1 ; move Feu2 to salleFeu2 ; salleFeu2.autel = 1 ; rtrue ;
                       ],
       has female scenery;


temple couloir1 "Couloir du temple"
       with viewed 0,
               initial
                [; if (self.viewed == 0)         { print "^^^"; self.viewed = 1 ; rtrue; } ; ],
               description "Un couloir sombre.",
               n_to couloir2, e_to entreetemple
       has light ;

temple couloir2 "Couloir du temple"
       with viewed 0,
               origine 0,
               initial
               [; if (self.viewed == 0) { print "^^^"; self.viewed = 1 ; rtrue; } ; ],
               description
               [; self.origine = 1 ; "Un couloir sombre." ; ],
               s_to couloir1, e_to couloirniches
       has light;

Object couloirniches "Couloir du temple"
       with viewed 0,
               initial
               [; if (self.viewed == 0)         { print "^^^Lorsque vous passez dans ce couloir, vous remarquez un ensemble de niches creusees dans le mur.^"; self.viewed = 1 ; rtrue; } ; ],
               description
                       [; if (couloir2.origine == 1)
                               {print "Vous continuez dans le couloir. Sur votre gauche il y a des ouvertures dans le murs.^" ; couloir2.origine = 0 ; }
                       if (couloir3.origine == 1)
                               {print "Vous continuez dans le couloir. Sur votre droite il y a des ouvertures dans le murs.^" ; couloir3.origine = 0 ; } ;],
               w_to couloir2, e_to couloir3
       has light;

temple couloir3 "Couloir du temple"
       with
               viewed 0,
               origine 0,
               initial
                       [; if (self.viewed == 0)          { print "^^^"; self.viewed = 1 ; rtrue; } ; ],
               description
                       [; self.origine = 1 ; "Un couloir sombre." ; ],
               s_to couloir4, w_to couloirniches
       has light;

temple couloir4 "Couloir du temple"
       with
               viewed 0,
               initial
                       [; if (self.viewed == 0)          { print "^^^"; self.viewed = 1 ; rtrue; } ; ],
               description "Un couloir sombre.",
               n_to couloir3, w_to entreetemple
       has light;

temple vestibule "Vestibule"
       with
               viewed 0,
               initial
                       [; if (self.viewed == 0)          { print "Cette partie forme comme un vestibule, un prelude a l'aventure.^^"; self.viewed = 1 ; rtrue; } ; ],
               description
                       "Au nord et a l'ouest se trouvent des chambres pour les epreuves, tandis qu'au sud il y a la sortie vers le monde des hommes.",
               n_to [; if ((salleEau has on) || (salleFeu2.autel == 1) ) PlayerTo(salleTerre) ; else "Un mur barre l'ouverture" ; rtrue ;],
               w_to [; if (salleEau has on || tuile2 in Niche2 || (salleFeu2.autel == 1)) PlayerTo(salleEau) ; else "Un mur barre l'ouverture" ; rtrue ;],
               s_to entreetemple
       has light;

temple salleEau "Salle de l'eau"
       with
               devinette 0,
               viewed 0,
               initial
                       [;

                       if (self.viewed == 0)     { print "^^Vous entrez dans une salle ou l'element liquide est mis a l'honneur.^"; self.viewed = 1 ; } ;
                       if ((TestScope(Torche, Player) == true)
                                       && (Torche has on) && (self has on) && (Torche notin Vase))
                                               { give Torche ~light ~on; print "Un gardien invisible eteint votre torche, vous empechant de garder le feu avec vous.^" ; };
                       if ((TestScope(Lampe, Player) == true)
                                       && (Lampe has on) && (self has on) && (Lampe notin Vase))
                                               { give Lampe ~light ~on; print "Un gardien invisible eteint votre lampe, vous empechant de garder le feu avec vous.^" ; };
                       if ((child(Niche2) == Vase) || (salleFeu2.autel == 1)){ give salleEau ~on ; bassin.vide = 1 ; give fake_eau absent ;} ;
                       ;],
               description [;
       if (self has on)
               print "Un genre de bruine enveloppe toute la piece dans un ecrin d'humidite suffocante, recreant un climat tropical presque parfait. Des bassins sont disposes aux quatre coins, et des ouvertures dans le plafond font ruisseler une pluie artificielle sur l'ensemble de la surface de cette piece.^" ;
       if (self hasnt on)
               print "Cette piece serait vide sans la presence de bassins aux quatre coins de la piece, et d'humidite sur le sol.^" ;
       if (enigme == 1 && self.devinette == 0) {
                       print "^Vous entendez une voix profonde qui dit : ~Vous avez choisi la force pour entrer ici, ou bien peut-etre est-ce simplement le hasard qui vous a mis dans cette situation. Seulement vous ne pourrez passer que si vous repondez correctement a cette enigme :^^
                       Si loin de moi pourtant il me detruit,^
                       Meme si je ne suis pas craintif, je fuis,^
                       Present partout, et meme bien visible,^
                       S'il s'absente, ah ! je me fige sur place,^
                       Et le monde entre dans l'hiver terrible,^
                       Fait de peur, de terreur et de glaces.^    Quel est-il ?~^^~Crie-moi ta reponse humain, et si elle est fausse ou trop peu audible, crains toi aussi de rester de glace !~^" ;} ; ],
               n_to [; if (enigme == 0) {PlayerTo(salleAir) ; } else if (self.devinette == 0) {Statufie() ; rtrue ;} else  PlayerTo(salleAir) ; ], e_to [; if ((bassin.vide == 0) || (salleFeu2.autel == 1)) PlayerTo(vestibule) ; else "Un mur barre l'ouverture" ; rtrue ;]
       has light on switchable;

temple salleAir "Salle de l'air"
       with
               devinette 0,
               viewed 0,
               initial
                       [;
                       if (self.viewed == 0 && salleTerre.viewed == 0)         { print "^^Les vapeurs de la salle precedente sont immediatement dissipees par le courant vif qui sevit dans cette salle.^"; self.viewed = 1 ; } ;
                       if ((TestScope(Torche, Player) == true)
                                       && (Torche has on) && (self has on) && (Torche notin Vase))
                                               { give Torche ~light ~on ; print "Un gardien invisible eteint votre torche, vous empechant de remporter le feu avec vous.^" ;
                                                }
                       ; ],
               description
                       [; print "Cette salle se prolonge a angle droit, et elle est entierement depourvue de tout mobilier. Le vent omni-present qui souffle ici vous fait frissonner.^" ;
                               if (enigme == 1 && self.devinette == 0) { print "^Vous entendez une voix sifflante qui dit :~Vous voila ici pour vous mesurer a moi.^N'esperez pas un contact physique : vous ne pourrez passer que si vous repondez correctement a cette enigme :^^
                       Mon frere le vent n'y entre guere,^
                       Si loin en bas se trouve sa terre,^
                       Froide, hostile, et inaccessible,^
                       Mais si proche, vue depuis vos yeux,^
                       J'y ai vecu, temps ephemere,^
                       Plein d'entrain, de joie, et tres fier,^
                       Mais j'en suis parti, insensible,^
                       Lorsque j'ai voulu toucher le feu.^^

                       Un pont entre les continents,^
                       Un plan changeant au gre de mes humeurs,^    Quel est-il ?~^^~Crie-moi ta reponse humain, et si elle est fausse ou trop peu audible, crains toi aussi d'etre altere a cause de mon humeur !~^";} ; ],
               s_to salleEau, e_to salleTerre, ne_to  [; if (enigme == 0) {PlayerTo(salleAir2) ; } else if (self.devinette == 0) {Statufie() ; rtrue ;} else  PlayerTo(salleAir2) ; ]
       has light on switchable;

temple salleAir2 "Salle de l'air"
       with
               viewed 0,
               initial
                       [; if (self.viewed == 0)          { print "^^Vous continuez dans la meme piece, bravant les bourrasques infernales.^"; self.viewed = 1 ; }
                       if ((TestScope(Torche, Player) == true)
                                       && (Torche has on) && (self has on) && (Torche notin Vase))
                                               { print "^Un gardien invisible eteint votre torche, vous empechant de remporter le feu avec vous.^ " ;
                                               give Torche ~light ~on ; }
                       ; ],
               description
                       "Cette salle complete a la forme d'un fer a cheval, facilitant la circulation des differents vents qui vous agressent en s'engouffrant dans ce grand couloir..",
               s_to [; if ((salleFeu has on) || (salleFeu2.autel == 1)) PlayerTo(salleFeu) ; else "Un mur barre l'ouverture" ; rtrue ;], sw_to salleAir, w_to salleAir
       has light on switchable;


temple salleTerre "Salle de la terre"
       with
               devinette 0,
               viewed 0,
               initial
                         [; if (self.viewed == 0)         { print "^^Cette nouvelle salle contraste avec celles par ou vous avez pu passer auparavant.^"; self.viewed = 1 ; rtrue; } ; ],
                description [; print "Une belle salle entierement emplie de fleurs, plantees a meme le sol.^" ;
                if (enigme == 1 && self.devinette == 0) { print "^Une voix caverneuse vous interpelle :~On ne peut s'affranchir ainsi des obstacles rencontres : si un de mes pairs vous refuse le passage et que vous vous invitez ici quand meme, alors un simple parterre de fleur vous interdira definitivement de poursuivre votre route. Vous ne pourrez passer que si vous arrivez a reellement les soigner de ce qui les a rendues malades.~^^
                       ~^Une fleur bleue et tres odorante,^
                       Une epice rouge et enivrante,^
                       Les couleurs nous manquent cruellement,^
                       Seule nous guerira cette epice qui nous hante,^
                       Et alors notre place nous reprendrons sagement.^
                       ~^";} ; ],
                s_to [; if ((salleEau has on) || (salleFeu2.autel == 1)) PlayerTo(vestibule) ;
                         else print "Un mur barre l'ouverture.^" ; rtrue ;],
                w_to [;
                       if (enigme == 0)
                               {PlayerTo(salleAir) ; rtrue ;}
                       else if (self.devinette == 0)
                                       { print "^Au moment ou vous posez le pied sur les premieres fleurs, celles-ci grossissent pour devenir aussi hautes que vous.^Elles vous attaquent avant que vous ayez eu le temps de reagir." ; musique_action(); deadflag = 1; print "^^Vous avez perdu." ;rtrue ;}
                               else  PlayerTo(salleAir) ; ],
has light on switchable;


temple salleFeu "Salle du feu"
       with
                viewed 0,
                chaleur 120,
                initial
                         [; if (Torche has on || Lampe has on) bateau.aquai = 1 ;
                          if ((salleFeu2.autel == 0) || (enigme == 1) ) testfeu();
                               if (self.viewed == 0) { print "L'air devient rapidement tres chaud en approchant du seuil de la piece qui suit.^^"; self.viewed = 1 ; } ; testtuiles() ;  rtrue; ],
                description "La salle est entierement peinte en rouge tres fonce. Un escalier relie ce niveau a un etage au dessus.",
                n_to [; if ((salleFeu has on) || (salleFeu2.autel == 1)) PlayerTo(salleAir2) ;
                                  else "Un mur barre l'ouverture" ; rtrue ;],
                u_to [; if (self.chaleur < 50) { PlayerTo(salleFeu2) ; "Il fait maintenant un peu moins chaud pour monter a l'etage." ;} ;
                                 if (self.chaleur >= 100 && self.chaleur < 120) "Il fait encore trop chaud pour monter au niveau superieur." ;
                                 if (self.chaleur >= 80 && self.chaleur < 100) "La chaleur est moindre mais c'est encore trop chaud pour acceder au niveau superieur." ;
                                 if (self.chaleur >= 50 && self.chaleur < 80) "C'est encore un peu chaud pour acceder au niveau superieur." ;
                                 if (self.chaleur >= 120) "Il fait beaucoup trop chaud pour pouvoir aller au niveau superieur." ;
                                 ]
       has light on switchable scored ;

Object salleFeu2 "Salle du feu"
       with
                viewed 0,
                autel 0,
                initial
                         [;  if (Torche has on || Lampe has on) bateau.aquai = 1 ;
                                if ((salleFeu2.autel == 0)   || (enigme == 1)) testfeu();
                                if (self.viewed == 0) { print "Vous montez dans la tour qui se trouve au dessus du temple.^^"; self.viewed = 1 ; rtrue; } ; ],
                description "Cette piece est peu differente de celle d'ou vous venez, si ce n'est qu'elle parait plus solennelle car elle n'est pas peinte en rouge, mais en mauve tres soutenu, quasi-royal.",
                d_to [; if ((salleFeu has on) || (salleFeu2.autel == 1)) PlayerTo(salleFeu) ;
                                  else "Un mur barre l'ouverture" ; rtrue ;]
       has light on switchable scored;



!--------------------------------------------
! NPCs
!--------------------------------------------


Personnage Angiras "Angiras" temple1b
       with
               name 'Angiras' 'maitre' 'pretre' 'homme',
               voir_perso 0,
               description  "Il est grand, avec des cheveux noirs et un regard percant." ,
               initial [;
                       print "Angiras est la.^";
                       if (Torche.sacre == 1 || Lampe.sacre == 1 )
                               {print "Il voit que vous avez pu recuperer une etincelle du feu sacre, celle que vous ferez grandir dans le coeur de vos pairs et qui vous menera certainement a la victoire. Il vous felicite pour avoir reussi les epreuves, quel que soit le moyen qui vous a fait parvenir a votre but. Il vous salue bientot car il sait que vous devez repartir au plus vite aupres des votres.^"; rfalse ;}
                       if (Angiras.voir_perso == 0) {
                               Angiras.voir_perso = Angiras.voir_perso + 1 ;
                               print " L'homme s'approche de vous et vous salue. Vous le reconnaissez pour avoir ete son eleve de nombreuses annees auparavant. C'est un grand maitre reconnu." ; Accueiltemple(); }
               ],
               times_spoken_to 0, ! pour compter les sujets de conversation
       life [;
       Attack: print "Vous frappez l'homme mais il esquive votre coup. Il disparait soudain de la piece, vous laissant seul avec votre conscience."; remove Angiras; rtrue ;
       Parler: self.times_spoken_to = self.times_spoken_to + 1;
               switch (self.times_spoken_to) {
                       1: print_ret "Vous parlez des evenements recents, la montee au pouvoir de la nouvelle religion et de ses fanatiques qui vous pourchassent, la destitution de vos lieutenants spirituels puis politiques. Angiras vous apporte son soutien moral, et vous exprime sa revolte contre la passivite dans laquelle est englue votre pays. Il vous suggere de faire comme vos predecesseurs et d'aller rechercher une partie du Feu sacre pour la rapporter dans vos contrees.";
                       2: print "Vous alliez commencer a parler lorsque un homme assez trapu arrive pres de vous. Il a tout entendu, et commence a vous critiquez violemment, vous accusant d'etre un lache et un traitre pour avoir abandonne votre pays. " ; move Brihaspati to Location ; print "Angiras vous presente cet homme comme etant Brihaspati, un membre influent siegeant au conseil du village. Angiras prend alors votre defense, expliquant que l'on ne peut connaitre tous les tenants et aboutissants de cette histoire en n'ayant pas vecu la destitution qui vous est arrivee. Il vous renouvelle son support en vue de retrouver le chemin de votre royaume.  ^" ;rtrue ;
                       3: print_ret "~Que voulez-vous savoir ?~";
       default: return false;}
       Ask, Tell: switch (second) {
               'temple', 'ici', 'village', 'Vahishnali' :
                       print_ret "~Ce temple fut construit il y a de nombreuses annees. Ses gardiens y restent fideles eternellement, aussi meme si je leur demande ils ne vous laisseront pas passer.~";
               'gardiens', 'gardien' , 'elemental', 'elementaux' :
                       print_ret "~Les gardiens du feu sacre font passer leur promesse avant toute chose.~";
               'promesse', 'enigmes', 'enigme' :
                       print_ret "~Les gardiens ont promis de garder le feu sacre contre tous les etrangers. Selon la maniere dont vous les provoquerez, ils reagiront avec vous de diverses facons.~";
               'epice', 'safran', 'epices' :
                       print_ret "~On peut trouver des epices sur le marche autour du temple.~";
               'escalier', 'chaleur' :
                       print_ret "~La chaleur de l'etage superieur peut etre detournee si on lui approche les clefs contrant son pouvoir.~";
               'tuile', 'tuiles' :
                       print_ret "~Elles peuvent avoir diverses fonctions, a vous de trouver lesquelles.~";
               'Brihaspati', 'roux', 'conseiller' :
                       print_ret "~Il n'est pas bien intelligent, ne vous inquietez pas.~";
               'niche', 'niches', 'ouvertures', 'ouverture', 'alcove', 'cavite', 'alcoves', 'cavites' :
                       print_ret "~Avez-vous bien fouille les diverses alcoves du temple pour en recuperer les clefs ?~";
               'flammes', 'feu', 'sacre', 'torches', 'ancetres', 'tour' :
                       print_ret "~Le feu qui baigne perpetuellement ce temple, pour fournir energie et chaleur, n'est pas un feu sacre. Ce dernier se trouve dans la tour, accessible seulement par le coeur de cet edifice. Inaltere, il n'a jamais cesse de bruler depuis le commencement des temps les plus anciens, c'est a dire depuis le moment ou nos ancetres sont arrives dans cette contree et y ont etabli notre ordre.~";
               'cle', 'clefs', 'cles', 'clef' :
                       print_ret "~Ce ne sont pas des clefs ordinaires, comme on peut le lire pres de l'endroit ou vous les avez trouvees.~";
               'ennemis', 'espions', 'assassins' :
                       print_ret "~Nos ennemis n'ont eu de cesse de nous persecuter des lors que leur pouvoir a pu grandir suffisamment, vous avez pu vous en rendre compte amerement. Je sais que certains sont arrives dans cette ville, aussi restez vigilant.~";
               'ordre', 'agencement', 'disposition', 'enigme', 'fonctions', 'fonction', 'arrangement' :
                       print_ret "~Chaque disposition des clefs correspond a une fonction specifique. Si vous voulez les substituer, faite-le avec un objet ou un element analogue, si besoin est.~";
               }
               print_ret "~Je ne peux vous en dire plus.~";
               ],
       has proper;


Personnage Brihaspati "Brihaspati"
       with
               name 'Brihaspati' 'conseiller' 'homme' 'trapu' 'roux',
               voir_perso 0,
               description
                       "Il a une carrure massive, des cheveux roux et une allure hostile a votre encontre." ,
       initial [;
               print "Brihaspati.^";
               if (Brihaspati.voir_perso == 0) {
                       Brihaspati.voir_perso = Brihaspati.voir_perso + 1 ;
               print " L'homme vous regarde a peine. " ; }
               ],
               times_spoken_to 0, ! pour compter les sujets de conversation
               life [;
                       Attack: print "Vous frappez l'homme mais il se sauve au meme moment."; remove Brihaspati; rtrue ;
                       Parler: self.times_spoken_to = self.times_spoken_to + 1;
       switch (self.times_spoken_to) {
               1: print_ret "L'homme est visiblement hostile a votre egard, et alors que vous commencez a vous lancer dans des explications pour vous defendre, il vous coupe encore pour vous insulter.";
               2: remove Brihaspati; print_ret "Il dit souhaiter repartir.";
       default: return false;}

        Ask, Tell: switch (second) {
               'temple', 'ici':
                       print_ret "~Ce temple n'appartient pas a notre zone de juridiction, aussi nous n'avons rien a en dire.~";
               'hostilite', 'insultes':
                       print_ret "~Vous m'etes antipathique.~";
               'etranger', 'etrangers' :
                       print_ret "~Je ne vous connais pas.~";
               'guerre' :
                       "~C'est votre probleme.~";
                       }
               print_ret "~Je n'ai rien a vous dire.~";
               ],
       has proper;


Personnage Garde "garde" place3
       with name 'garde' 'molosse' 'armure' 'plastron' 'hallebarde' 'cotte' 'mailles',
       voir_perso 0,
       description
               "Le garde est grand, avec un heaume qui masque completement son visage. Il porte un plastron metallique et une cotte de mailles sur le reste de son buste. Il tient en main une grande hallebarde.",
       initial [;
               print "^Un garde est la.^" ;
       ],
       times_spoken_to 0, ! pour compter les sujets de conversation
       life [;
       attack: print "Vous frappez le garde, il accuse le coup mais vous rend votre attaque, vous tuant net sous le choc."; musique_action(); deadflag=1; print " Vous terminez votre aventure ici." ; rtrue ;
       Parler: self.times_spoken_to = self.times_spoken_to + 1;
               switch (self.times_spoken_to) {
                       1: print_ret "Vous commencez a discuter avec le garde qui ne bouge meme pas.";
                       2: print_ret "Pas de reponse";
               default: return false;}
        Ask, Tell: switch (second) {
               'entrer', 'ici':
                       print_ret "~Je ne peux vous laisser entrer ainsi.~";
               }
               print_ret "Pas de reponse.";
               ],
       has male;



Personnage Marchand "Le vendeur"
       with
               name 'commercant' 'commercant' 'employe' 'employe' 'vendeur' 'magasinier' 'quincailler' 'boutiquier' 'marchand' 'turban' 'tissu',
               voir_perso 0,
               description "Un marchand.",
               initial [;
                       print " ";
                       ],
               times_spoken_to 0, ! pour compter les sujets de conversation
               life [;
                       Kiss: print "Vous vous y refusez.^" ; rtrue;
                       Parler:
                               self.times_spoken_to = self.times_spoken_to + 1;
                               switch (self.times_spoken_to) {
                               1: print_ret "~Que voulez-vous acheter ou echanger ?~";
                               2: print_ret "Ce vendeur n'est pas tres locace.";
                               default: return false;
                               }
               AskForVendeur,Tell: switch (second) {
               'torche', 'corde', 'lanterne' :
                       print_ret "~Je ne vends pas cela.~";
               'temple', 'feu', 'sacre', 'spirituel' :
                       print_ret "~Je ne m'occupe plus des affaires du sacre.~";
               'habits', 'simples', 'tunique', 'robe' :
                       print_ret "~Vous avez sans doute quelque chose qui peut m'interesser en retour.~";
               'achat', 'achats', 'argent', 'affaires':
                       print_ret "~Vous ne ferez jamais de mauvaises affaires chez moi, quoi que vous puissiez croire.~";
               'safran', 'epice':
                       give Safran ~concealed ; print_ret "~J'ai effectivement quelques epices avec moi, meme si ce n'est pas mon metier de vendre cela." ;
               'aide':
                       print_ret "~Dites-moi precisement ce que vous voulez avoir.~";
               }
               print_ret "~Ce n'est pas a moi de vous aider pour cela, ou alors je n'ai pas bien compris votre question.~";
               ],
       before [;
       Search, Look, Examine: "Ce marchand est habille d'une succession de pieces de tissus empilees les unes sur les autres. Il a un turban au sommet de sa tete. Par certains cotes il ferait plus penser a un brahmane qu'a un marchand.";
        Exchange:
               print_ret "~Dites-moi ce que vous voulez echanger.~";
       ],
       found_in echoppe
       has male proper ;


Personnage assassins "assassins"
       with name 'assassins' 'assassin' 'ennemis',
               time_left 3,
               time_out
                       [;
                       if (TestScope(player, assassins) == true)
                       { print "^N'ayant pas reagi assez vite, vous voyez trois ombres se precipiter vers vous, et vous tailler en piece." ; musique_action(); deadflag=1; print " Vous terminez votre aventure ici.^" ; rtrue ;} ;
                       ],
       voir_perso 0,
       description
               "Trois assassins sont la. Leurs visages sont completement caches par une cagoule sombre, mais vous pouvez voir leurs yeux brulants de haine pointant vers vous, ainsi que leurs grandes epees acerees.",
       initial [; StartTimer(Assassins, 3);
               print "^Trois assassins sont la.^" ; rtrue ;
       ],
       times_spoken_to 0, ! pour compter les sujets de conversation
       life [;
       attack:
                if ( Epee in Player )
                       { print "Vous sortez votre epee fraichement acquise, qui semble crepiter de sa nouvelle fonction. A sa vue vos ennemis reculent, mais votre arme vous entraine rapidement au combat, un combat rude mais dont vous sortez finalement vainqueur, sans doute prefigurant vos futures victoires.^Les corps tombent dans l'eau dans un bouillonnement sordide.^" ; remove assassins ; rtrue ;
                       }
                else print "Vous essayez de frapper l'un des assassins, mais il vous evite facilement et un de ses comperes vous plante son arme dans le dos."; musique_action(); deadflag=1; print " Vous terminez votre aventure ici." ; rtrue ;
       Parler: self.times_spoken_to = self.times_spoken_to + 1;
               switch (self.times_spoken_to) {
                       1: print_ret "Ils vous regardent comme avec etonnement, sans reponse";
                       2: print_ret "Pas de reponse";
               default: return false;}
               ],
       has male pluralname;

!--------------------------------------------
! Objets deplacables
!--------------------------------------------

!Object cle1 "cle en or"
!       with name 'cle' 'or',
!       has female nicheable;

Object ObjVillage "objets divers"
   with
       number 0,
       parse_name [ i ;
           self.number = 0;
           while (true) {
           switch (NextWord()) {
           'alentours', 'alentour', 'environs', 'place', 'exterieur', 'village', 'batisses', 'maisons', 'batiments', 'batiment', 'constructions', 'toits', 'murs', 'maison','chemin','port' : self.number = 0; i++;
           'paysage', 'environnement', 'region' : self.number = 1; i++;
           'montages', 'collines', 'montagne' : self.number = 2; i++;
           'forets', 'arbres', 'foret', 'foret' : self.number = 3; i++;
           'femmes', 'hommes', 'monde', 'gens' : self.number = 4; i++;
           'ouvertures', 'entree', 'ecritures', 'niches', 'ornementations' : self.number = 5; i++;
           'bateau', 'bateaux', 'quais', 'pontons', 'camelots', 'vaisseaux', 'mer', 'dedale' : self.number = 6; i++;
           default: return (i);
               }
           }
       ],
       description [;
           Look, Examine, Search:
               switch (self.number) {
                   0: << Look >>;
                   1: "La region est un peu humide, mais fraiche en cette saison. La mousson n'est pas encore a son point le plus intense. Des forets immenses entourent la ville, et des montagnes lointaines bordent celles-ci.";
                   2: "Les montagnes sont de la couleur des fleurs de lilas, et leurs formes arrondies ajoutent a la douceur des teintes de l'atmosphere.";
                   3: "Vous ne voyez qu'une partie de la foret en restant dans la ville, meme si celle-ci se trouve dans une sorte de depression.";
                   4: "Leur vie grouille un peu partout dans le port et le village, pour le commerce, le retour de la peche et les simples curieux. Vous comprenez a peine leur langue dans ce vacarme.";
                   5: "Certains traits caracteristiques de ce temple vous rappellent ceux de votre pays, ou plutot ceux qui etaient dans votre pays avant qu'ils ne soient presque tous detruits.";
                   6: "Les bords de mer et l'activite qui va avec ne vous emplissent pas d'autant de nostalgie que les montagnes mysterieuses et dures, mais ce spectacle est plaisant malgre tout.";
                    }
               default: "Le decor de l'aventure.";
               ],
       name 'description' 'du' 'village',
       found_in [; return (location ofclass Village);] ,
   has pluralname scenery;


Object Objtemple "objets divers"
   with
       number 0,
       parse_name [ i ;
           self.number = 0;
           while (true) {
           switch (NextWord()) {
           'alentours', 'alentour', 'environs', 'ici', 'temple', 'salle', 'entree', 'maisons', 'port' : self.number = 0; i++;
           'paysage', 'environnement', 'region' : self.number = 1; i++;
           'montages', 'collines', 'montagne' : self.number = 2; i++;
           'forets', 'arbres', 'foret', 'foret' : self.number = 3; i++;
           'femmes', 'hommes', 'monde', 'gens' : self.number = 4; i++;
           default: return (i);
               }
           }
       ],
       description [;
           Look, Examine, Search:
               switch (self.number) {
                   0: << Look >>;
                   1: "Tout ceci est dehors desormais. Vous devez maintenant vous concentrer sur l'interieur.";
                   2: "Vous devez vous concentrer sur l'interieur maintenant, et non plus sur l'exterieur.";
                   3: "Vous devez vous concentrer sur l'interieur maintenant, et non plus sur l'exterieur.";
                   4: "Il n'y a pas de monde ici.";
                    }
               default: "Le decor de l'aventure.";
               ],
       name 'description' 'du' 'temple',
       found_in [; return (location ofclass temple);] ,
   has pluralname scenery;


Object bateau "voilier" port
       with
               description [;
                       print "C'est un beau bateau aux voiles multicolores, aux armes de ce pays. Il vous a mene ici, et c'est sans doute lui qui vous reconduira chez vous.^";
                       if (self.aquai == 0)
                               { print " Le voilier est au loin.^"; }
                       else print " Le bateau est a quai.^"; rtrue ;
       ],
               aquai 1,
               name 'voilier' 'bateau' 'navire',
               before [;
                       enter:
                               if (TestScope(player, assassins) == true)
                                       print_ret "Les assassins vous bloquent l'entree du bateau." ;
                               if (self.aquai == 0)
                                       { print " Le voilier est deja au loin."; rtrue ; }
                               if ((self.aquai == 1) && (Torche has on || Lampe has on))
                                       {       if (Torche.sacre == 0  || Lampe.sacre == 0) { FeuTriche(); rtrue ;}
                                               if (Torche.sacre == 1 || Lampe.sacre == 1) { Gagne() ; rtrue ;}
                                               }
                               else print " Vous ne pouvez pas repartir ainsi, alors qu'il vous manque l'objet de votre quete.^"; rtrue ; ],
       has static  ;




Object SacDos "sac de toile"
       with
               description "Un sac de toile.",
               name 'sac' 'de' 'en' 'toile' 'a dos' 'dos' 'sacoche',
               before[;
                       Receive:
                               if ((noun == Torche && (Torche has light)) ||
                                   (noun == Lampe && (Lampe has light))
                                       )
                               {print "^Vous ne pouvez mettre un objet dans le sac s'il est allume.^"; rtrue ;}
               ],
               capacity 25,
               invent [;
                       ! When listing objects in the player's inventory
                       if (c_style&FULLINV_BIT) rfalse;

                       ! When listing objects at the end of a room description
                       if (inventory_stage == 1) switch (children(self)) {
                       0: print "un sac";
                       1: print "un sac contenant ", (a) child(self);
                       default: print "un sac";
                       }
               rtrue;
               ],
       has clothing container openable open;

Object PossessionsMarchand "possessions du marchand" echoppe
       with description "Ce que possede le marchand.",
               name 'possessions' 'marchand',
       has pluralname transparent container open;



Object HabitsNormaux "tunique" PossessionsMarchand
       with
               description "Une robe simple.",
               name 'habits' 'simples' 'standards' 'tunique' 'robe' 'simple' 'normaux' 'haillons',
               before [;
                       take:
                               if (noun in PossessionsMarchand) { print "Le marchand ne veut pas vous donner cela, mais il vous propose de faire un echange.^" ; rtrue ;}
                               else rfalse ;
                       buy:
                               "Comment faire sans argent ?^";
                       wear:
                               if ( Location ~= Ruelles1)
                                                { print "Vous ne pouvez changer vos habits devant tout le monde. ^"; rtrue; } ;
                                       ],
       has female clothing scored;



Object Torche "torche" temple1a
       with
               description "une torche.",
               sacre 2,
               name 'torche',
               time_left 41,
               time_out
                       [;
                               give Torche ~light ~on;
                               self.sacre == 2 ;
                               if (TestScope(Torche, Player) == true)
                                       print "La torche s'est eteinte.^";
                       ],
               before [;
                       SwitchOn:
                               if ((TestScope(Torche, Feu) == true) ||
                                       (TestScope(Torche, Feu2) == true))
                                       {give Torche light; give Torche on ;
                                       StartTimer(Torche, 38);
                                        bateau.aquai = 1 ;
                                       print "Vous allumez la torche en la mettant dans le feu.^";
                                       if (location == salleFeu2)
                                               self.sacre = 1;
                                               else self.sacre = 0;
                                       rtrue ;}
                               else print "Vous n'avez rien pour l'allumer.^" ; rtrue ;
                       SwitchOff:
                               give Torche ~light; give Torche ~on ;
                               self.sacre = 2;
                               "Vous eteignez la torche.^";
                               ],
       has female switchable ~on nicheable scored;


Object Lampe "lampe" temple1b
       with
               description "une lampe en cuivre.",
               sacre 2,
               name 'lampe',
               time_left 45,
               time_out
                       [;
                               give Lampe ~light ~on;
                               self.sacre == 2 ;
                               if (TestScope(Lampe, Player) == true)
                                       print "La lampe s'est eteinte.^";
                       ],
               before [;
                       SwitchOn:
                               if ((TestScope(Lampe, Feu) == true) ||
                                       (TestScope(Lampe, Feu2) == true))
                                       {give Lampe light; give Lampe on ;
                                       StartTimer(Lampe, 38);
                                       bateau.aquai = 1 ;
                                       print "Vous allumez la lampe en l'approchant du feu.^";
                                       if (location == salleFeu2)
                                               self.sacre = 1;
                                               else self.sacre = 0;
                                       rtrue ;}
                               else print "Vous n'avez rien pour l'allumer.^" ; rtrue ;
                       SwitchOff:
                               give Lampe ~light; give Lampe ~on ;
                               self.sacre = 2;
                               "Vous eteignez la lampe.^";
                               ],
       has female switchable ~on nicheable scored;


Object Epee "epee" Echoppe
   with
       description "Une epee antique, avec une garde cuivree et des ecritures cuneiformes sur la lame.",
       before [;
               AskForVendeur:
                       print "Vous ne pourrez la prendre que si vous etes legitiment encourage a cela." ; move Epee to player ; rtrue ;
               take:
                       if (Torche.sacre == 1  ||  Lampe.sacre == 1  )
                               { print "Le marchand s'incline et vous donne l'epee.^"; rfalse ;}
                       else "Vous n'avez aucun droit sur cette epee." ;
                        ],
       name 'epee' 'sabre' 'cuneiformes' 'ecritures',
   has female scored;


Object Safran "safran" Echoppe
   with
       description "Un sachet de safran.",
       article "du",
       before [;
               AskForVendeur:
                       print "J'ai effectivement cela. Comme vous etes un bon client je vous le donne." ; give self ~concealed ; move self to player ; rtrue ;
               take:
                       if (enigme == 1)
                               { print "Le marchand s'incline et vous donne un petit sachet avec du safran."; give self ~concealed ; move self to player ; rtrue ;}
                       else "Vous n'avez pas besoin de cela." ;
                        ],
       name 'epice' 'safran' 'epices' 'sachet',
   has scored concealed ;

Object Feu "le feu"
   with
       name 'feu',
       description "du feu.",
       found_in [; return (location ofclass temple);],
   has light proper scenery;

Object Feu2 "feu"
   with
!       article 'du',
       name 'feu' 'autel',
       description "Un autel sacre, sur lequel brule un feu joyeux et rapide.",
   has light;

Object Fleurs "des fleurs"
   with
       name 'fleurs' 'fleurs',
       description [;
       if (enigme == 1 && salleTerre.devinette == 0)
               { print "Les fleurs sur le sol sont toutes fanees.^" ; }
                       else "De belles fleurs colorees.^" ; ],
       before [;
           Take, Remove:
               "Vous n'avez pas de raison d'arracher ces fleurs, de plus elles sont trop petites.";
           Smell:
               "Avec l'odeur d'humidite de la piece, vous ne trouvez pas d'odeur specifique a ces fleurs.";
           Receive:
               if (noun==Safran)
                       { salleTerre.devinette = 1 ; print "Vous saupoudrez les fleurs avec du safran. Elles reprennent immediatement leurs belles couleurs d'origine.^" ; rtrue;}
                       else "Cela n'est pas le but." ;
                ],
       found_in salleTerre,
   has scenery pluralname;

Object fake_eau "eau" Port
       with
                name 'eau',
                description "De l'eau.",
                before [;
                         Take, Remove:
                          if ( Vase in Player )
                                  { print "Vous prenez un peu d'eau dans votre vase.^" ; move Eau to Vase ;}
                                  else print "Vous n'avez rien pour porter cette eau.^" ; rtrue ;],
       found_in salleEau Port,
       has scenery concealed static ;

Object fake_eau2 "eau"
       with
                name 'eau',
                description "De l'eau.",
                before [;
                         Take, Remove:
                          if ( Vase in Player )
                                  { print "Vous prenez un peu d'eau.^" ; move Eau2 to Vase ;}
                                  else print "Vous n'avez rien pour porter cette eau." ; rtrue ;],
       found_in Port,
       has scenery concealed static ;



Object Eau "eau"
       with
                name 'eau',
                article "de l'",
                description "De l'eau.",
                before [;
                       Receive:
                               if (noun == tuile1 || noun == tuile2)
                               {print ""; rfalse ;}
                               else "Ce n'est pas recommande de le faire ainsi." ;
                         Empty:
                                  if ( Vase in Player && Eau in Vase)
                                               { print "Vous videz l'eau contenue dans le vase." ; remove Eau ;}
                                               else print "Cela ne peut s'appliquer ici." ; rtrue ;
                         Take, Remove:
                                  print "Vous ne pouvez la prendre a main nue." ; rtrue ;
],
       has static container transparent scored;

Object Eau2 "eau"
       with
                name 'eau',
                article "de l'",
                description "De l'eau.",
                before [;
                         Empty:
                                  if ( Vase in Player && Eau2 in Vase)
                                               { print "Vous videz l'eau contenue dans le vase." ; remove Eau2 ;}
                                               else print "Cela ne peut s'appliquer ici." ; rtrue ;
                         Take, Remove:
                                  print "Vous ne pouvez la prendre a main nue." ; rtrue ;
],
       has static ;


Object bassin "bassin"
       with
                name 'bassin' 'bassins',
                vide 0,
                description [;
                print "Les bassins sont recouverts de mosaiques bleues representant des entrelacs savants. Au fond vous voyez de grandes croix mauves dessinees avec de petits carreaux." ;
                if (self.vide == 1) print " Les bassins sont vides." ;
                if (bassin hasnt on) print " L'un d'eux a ete deplace." ;
                print "^" ;
                 ],
                before [;
                         Take, Remove:
                                  "C'est beaucoup trop lourd, et scelle dans le sol.";
                         pull:
                                       if (self.vide == 0)
                                               "Avec toute cette eau qui emplit le bassin, vous ne pouvez rien faire." ;
                                       else print "Vous deplacez un des bassins vers vous.^" ; give bassin ~on ; move croix to salleEau ; remove fake_croix ; rtrue ;
                         push:
                                       if (bassin hasnt on) { print "Vous remettez le bassin a sa place.^" ; give bassin on ; move fake_croix to salleEau ; remove croix ; }
                                       if (croix has on && (tuile2 in Niche2 || Vase in Niche2)) { print "Vous entendez un clic et ensuite le bassin commence a se remplir.^" ; give fake_eau ~absent ; give croix ~on ; give salleEau on ; self.vide = 0 ; rtrue ;}
                                       if (bassin.vide == 0) { print "Vous n'avez pas assez de force pour deplacer a la fois le bassin et le mur qui est derriere.^" ; rtrue ;} ;
                         ],
       found_in salleEau,
       has scenery container open on;

Object croix "croix mauve dans le sol"
       with
                description [; print "Une belle croix mauve, qui fait un pied de diametre.^" ; if (croix has on) " La croix a ete tournee sur son axe." ; ],
                name 'croix' 'mauve' 'mauves',
                before [;
                       take, remove : "C'est fixe dans le sol par un axe central." ;
                       turn, pull, push : give self on ; "La croix tourne sur son axe d'un quart de tour." ; ],
       has female ~on static;

Object fake_croix "croix mauve" salleEau
       with
                description [; print "Une croix dessinee en mosaique, au fond du bassin.^" ;  ],
                name 'croix' 'mauve' 'dessin' 'mauves' 'carreaux' 'mosaique',
                before [;
                       take, remove : "C'est juste une image." ;
                       turn, pull, push : give self on ; "Ce n'est qu'une image." ; ],
       has female ~on static;


Object fake_objets_marchands "objets"
       with
                description [; print "Des choses sans importance.^" ;  ],
                name 'poutres' 'bibelots',
                before [;
                       take, remove : "Vous n'avez pas besoin d'essayer de prendre cela." ;
                       turn, pull, push : give self on ; "Ce n'est pas a manipuler." ; ],
               found_in place2,
       has pluralname  static scenery;

Object HabitsPrinciers "vetements richement ouvrages"
       with
                description "Des vetements princiers, confortables et riches, mais peu discrets.",
                name 'prince' 'riches' 'riche' 'richement' 'ouvrages' 'princier' 'princiers' 'vetements' 'vetement',
                before [;
                         take:
                                  if (self in PossessionsMarchand) { print "Le marchand ne veut pas vous donner cela.^" ; rtrue ;}
                         exchange:
                                  if ( HabitsPrinciers in Player && second == Vase)
                                               { print "Ce marche est accepte contre le vase.^" ; move Vase to player ; move HabitsPrinciers to PossessionsMarchand ;}
                                               else "L'echange n'est pas possible.^"; rtrue ;
                       buy:
                               "Comment faire sans argent ?^";
        ],
       has pluralname clothing;

Object Vase "vase" Port
       with
                description "Un beau vase de votre pays, la seule chose que vous avez pu sauver lors de votre fuite.",
                capacity 2,
                before [;
                         exchange:
                                  if ( Vase in Player && second == HabitsNormaux)
                                               { print "Le vendeur accepte ce marche en echange du vase. Il depose les habits devant vous et prend votre bien.^" ; move Vase to PossessionsMarchand ; move HabitsNormaux to Player ; rtrue ;}
                                  if ( Vase in PossessionsMarchand && second == HabitsPrinciers)
                                               { print "Le vendeur accepte ce marche contre les habits.^" ; move Vase to Player ; move HabitsPrinciers to PossessionsMarchand ; rtrue ;}
                                               else "Le vendeur ne veut pas faire cette affaire-la.^"; rtrue ;
                         take:
                                  if (self in PossessionsMarchand) { print "Le marchand ne veut pas vous donner ce qui lui appartient.^" ; rtrue ;}
                                               Receive:
                                       if (noun == Eau)
                                               {print "Vous remplissez le vase d'eau.^"; move Eau to Vase ; return false ;}
                                       if (noun == Torche)
                                               {print "Vous protegez la torche en retournant le vase dessus.^"; move Torche to Vase ; return false ;}
                                               else "Ce vase n'est pas prevu pour recevoir ", (the) noun, ".";
                       Fill:
                                       if (TestScope(fake_eau, Vase) == true)
                                               { move Eau to Vase ; "Vous emplissez le vase avec de l'eau." ;} ;
                       Empty:
                                  if ( Vase in Player && Eau in Vase)
                                               {print "Vous videz le vase." ; remove Eau ;}
                                               else print "Ce vase est vide." ; rtrue ;
                         ; ],
       name 'vase',
       has open container nicheable;

Object tuile1 "tuile rouge"
       with
               tested 0,
               description "Une tuile rouge, avec une plante dessinee dessus.",
               name 'tuile' 'rouge' 'plante',
               before [;
                       take : print "Cette tuile est chaude au toucher."; rfalse;
                       drop: if (salleFeu2.autel == 0) testfeu(); testtuiles() ; rfalse ;
                       ],
       has nicheable female scored;

Object tuile2 "tuile bleue"
       with
               tested 0,
               description "Une tuile bleue, avec un poisson dessine dessus.",
               name 'tuile' 'bleue' 'bleu'  ,
               after [;
                       take: bassin.vide = 1 ; rfalse ; ],
       has nicheable female;

Object tuile3 "tuile brune"
       with
               tested 0,
               description "Une tuile brune, avec des vegetaux dessines dessus.",
               name 'tuile' 'brune' 'brun' 'verte'  ,
       has nicheable female;

Object tuile4 "tuile blanche"
       with
               tested 0,
               description "Une tuile blanche, avec un nuage dessine dessus.",
               name 'tuile' 'blanche' ,
       has nicheable female;



Object Niche1 "niche tout en haut" couloirniches
       with
               description "La premiere niche, tout en haut.",
               capacity 1,
               react_before [;
                         exchange:
                         print "L'echange n'est pas possible ainsi.^"; rtrue ;
                         ],
                before[;
                         Receive:
                 if (noun has nicheable )
                 return false ;
                else
                "Cette niche n'est pas prevue pour recevoir ", (the) noun, ".";
                 Empty:
               !          move children(Niche1) to Player ;
               print "Plutot que de vider la niche, prenez l'objet qui est dedans" ; rtrue ;
       ],
       name 'niche' 'tout' 'en' 'du' 'haut' 'un' 'premiere' 'ouverture' 'ouvertures' 'alcove' 'cavite',
       has open container scenery female;

Object Niche2 "niche au milieu en haut" couloirniches
   with
       name 'niche' 'du' 'au' 'milieu' 'en' 'haut' 'deux' 'seconde' 'deuxieme' 'ouverture' 'ouvertures' 'alcove' 'cavite',
       description "La deuxieme niche, au milieu en haut.",
       capacity 1,
       react_before [;
           exchange: print "L'echange n'est pas possible ainsi.^"; rtrue ;
            ],
       before[;
           Receive:
               if (noun has nicheable )
                   return false ;
               else "Cette niche n'est pas prevue pour recevoir ", (the) noun, ".";
           Empty: print "Plutot que de vider la niche, prenez l'objet qui est dedans" ; rtrue ;
],
   has open container scenery female;

Object Niche3 "niche au milieu en bas" couloirniches
       with
               name 'niche' 'au' 'du' 'milieu' 'en' 'bas' 'trois' 'troisieme' 'ouverture' 'ouvertures' 'alcove' 'cavite',
               description "La troisieme niche, au milieu en bas.",
               capacity 1,
               react_before [;
                       exchange: print "L'echange n'est pas possible ainsi.^"; rtrue ;
                       ],
               before[;
                       Receive:
                               if (noun has nicheable )
                                       return false ;
                               else "Cette niche n'est pas prevue pour recevoir ", (the) noun, ".";
                       Empty: print "Plutot que de vider la niche, prenez l'objet qui est dedans" ; rtrue ;
                       ],
       has open container scenery female;

Object Niche4 "niche tout en bas" couloirniches
       with
               name 'niche' 'tout' 'en' 'bas' 'quatre' 'quatrieme' 'ouverture' 'ouvertures' 'alcove' 'cavite',
               description "La quatrieme niche, tout en bas.",
               capacity 1,
               react_before [;
                       exchange: print "L'echange n'est pas possible ainsi.^"; rtrue ;
                       ],
               before[;
                       Receive:
                               if (noun == terre) {
                       terre.dansniche4 = 1 ; rfalse ;} ;
                               if (noun has nicheable )
                                       return false ;
                               else "Cette niche n'est pas prevue pour recevoir ", (the) noun, ".";
                       Empty: print "Plutot que de vider la niche, prenez l'objet qui est dedans" ; rtrue ;
                       ],
       has open container scenery female;


Object fake_echoppe "Echoppe"
       with
               name 'echoppe' 'magasin' 'bazar' 'bazaar' 'magazin' ,
               description "L'interieur est plus interessant que l'exterieur.",
               found_in place2,
       has scenery;


Object fake_tour "tour"
       with
               name 'tour' 'temple' 'centre' 'feu' 'flammes' 'sacre' 'contreforts' 'batisse' ,
               description "Le temple est ceinture par quatre tours et quatre contreforts qui viennent s'ajouter pour en renforcer la structure. C'est une belle batisse carree et rassurante a regarder, mais vous etes de plus en plus impatient d'y entrer maintenant. Une tour supplementaire vient au dessus de ce temple, et vous pouvez voir par la lueur degagee qu'elle renferme le feu sacre.",
               found_in place place2 place3,
       has scenery;

Object fake_murs "mur"
       with
               name 'murs' 'mur' 'temple' 'muraille' 'murailles' 'peinture' 'peintures' 'motifs' 'mythologiques' 'plafond' 'mosaiques' 'lampes' 'motif' 'mythologique' 'scenes' 'scene' 'ouvertures',
               description "Les murs et plafonds sont en briques tres dures. Certaines de ces tuiles sont vernissees, et un motif mythologique represente des scenes d'un autre temps. Quelques lampes fixees dans certains de ces murs assurent d'avoir de la lumiere et du feu ou que l'on se trouve.",
               found_in [; return (location ofclass temple);] ,
       has scenery;

Object Escalier "escalier"
       with
               description "Un escalier en briques.",
               name 'escalier' ,
               before [;
                       climb: print "Il vous suffit de ~monter~ ou ~descendre~ ." ; rtrue ; ],
               found_in salleFeu salleFeu2,
       has scenery ;

Object mur1 "mur" couloirniches
       with
               name 'murs' 'mur' 'temple' 'muraille' 'murailles' 'peinture' 'peintures' 'motifs' 'mythologiques' 'motif' 'mythologique' 'scenes' 'scene',
               description "^Sur le mur, gravee dans la roche, il y a cette phrase : ^^~Le desordre maintient l'ordre tant qu'il est preserve, ^les clefs liberent des verrous dans les endroits reserves, ^mais l'ordre ramene le feu sacre tel qu'il est reellement conserve~.^",
       has scenery;

Object fake_colonnes "colonnes"
       with
               name 'colonnes' 'colonne' 'colonnades' 'colonades' 'piliers' 'plantes',
               description "Des colonnes cannelees, si larges que vous ne pourriez en faire le tour avec vos bras. Le haut de ces colonnes represente des plantes disposees regulierement.",
               found_in [; return (location ofclass temple);] ,
       has scenery pluralname;

!--------------------------------------------
! Code
!--------------------------------------------

#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
       [ InitGlkWindow winrock;
       switch (winrock) {

       GG_MAINWIN_ROCK:

       !glk_window_set_background_color(winrock,0x00E4ECE4);
!       glk_stylehint_set(wintype_TextBuffer, style_User1, stylehint_Oblique, true);
!       glk_stylehint_set(wintype_TextBuffer, style_User2, stylehint_ReverseColor, true);
!       glk_stylehint_set(wintype_TextBuffer,style_Normal,styleHint_BackColor,$d8d8d0 );
!       glk_stylehint_set(wintype_TextBuffer,style_Normal, stylehint_TextColor,$111711 );
!       glk_stylehint_set(wintype_TextBuffer,style_Normal, stylehint_Justification,stylehint_just_LeftRight );
!       glk_stylehint_set(wintype_TextBuffer,style_Normal, stylehint_Indentation,2 );
!       glk_stylehint_set(wintype_TextBuffer,style_Normal, stylehint_Proportional,0 );
!
!       glk_stylehint_set(wintype_TextGrid,style_Normal,styleHint_BackColor,$3b4038 );
!       glk_stylehint_set(wintype_TextGrid,style_Normal, stylehint_TextColor,$d8d8d0 );
!
!       glk_stylehint_set(wintype_TextBuffer,style_Header,styleHint_BackColor,$d8d8d0 );
!       glk_stylehint_set(wintype_TextBuffer,style_Header, stylehint_TextColor,$111711 );
!       glk_stylehint_set(wintype_TextBuffer,style_Subheader,styleHint_BackColor,$d8d8d0 );
!       glk_stylehint_set(wintype_TextBuffer,style_Subheader, stylehint_TextColor,$111711 );
!       glk_stylehint_set(wintype_TextBuffer,style_Input,styleHint_BackColor,$d8d8d0 );
!       glk_stylehint_set(wintype_TextBuffer,style_Input, stylehint_TextColor,$111711 );
!       glk_stylehint_set(wintype_TextBuffer,style_Input, stylehint_Proportional,0 );

       }

       rfalse; ! leaving out this line will lead to a messy crash!
];
#endif; ! TARGET_




[Initialise;
               location=port;
               lookmode = 2; ! mode long
               move HabitsPrinciers to player; give HabitsPrinciers worn ; move Vase to SacDos ; move SacDos to player;
               move tuile1 to Niche1; move tuile2 to Niche2; move tuile3 to Niche3; move tuile4 to Niche4;
               if (deboggage == 1)
                       { move Torche to player ; move HabitsNormaux to player ;} ;
                print "^^^^^^^^";
                #ifdef TARGET_ZCODE;
               #ifnot; ! TARGET_GLULX;
               ! couverture.png
               ! musique_action();


       glk_window_clear(gg_mainwin);
           glk_image_draw(gg_mainwin,5,imagealign_InlineCenter, 25); ! Splash screen
               ! glk_image_draw(gg_mainwin,3,0,0);
           !gwin_image_draw_auto(13,13,13,gg_mainwin,3,3,3);
           attend();
           glk_window_clear(gg_mainwin);
           gg_mapwin = glk_window_open(gg_mainwin,
           (winmethod_Left+winmethod_Fixed),100,
           wintype_Graphics, GG_MAPWIN_ROCK);
               glk_image_draw(gg_mapwin,9, 0, 0); ! marge motif

       !                         print "^";
               #endif; ! TARGET_
          Banner(); print (string) LICENSE; Pause();

                ];


[testtuiles x count ;
       objectloop(x in Niche3)
       if (x ofclass Terre)
       count++;
!       if ((tuile1 in salleFeu2) && (torche in Niche1)
!       && (tuile2 in salleEau) && (Vase in Niche3) && (tuile3 in salleTerre)
!       && ((terre in Niche4)   || (count == 1))
!       && (tuile4 in salleAir)
!       && (child(Niche2) == nothing)

       if ((tuile1 in salleFeu2) && ((Torche in Niche1)  || (Lampe in Niche1))
       && (tuile2 in salleEau) && (Vase in Niche2)
       && (tuile3 in salleTerre) && ((terre in Niche3)         || (count == 1))
       && ((tuile4 in salleAir) || (tuile4 in salleAir2) ) && (child(Niche4) == nothing)
       )
               { move Feu2 to salleFeu2 ; salleFeu2.autel = 1 ; give salleEau on ; give salleTerre on ;print "Vous entendez un mecanisme qui s'enclenche, et le bruit du frottement de la roche le long d'un mur. " ; rtrue ;}
!                                else " ne fonctionne pas" ;
                               else "" ;
];

[testfeu ;
       if (tuile1.tested == 1)
               {if (tuile1 in bassin && bassin.vide == 0)
                       {tuile1.tested = 0; salleFeu.chaleur = salleFeu.chaleur + 30 ;}
                       }
               if (tuile1.tested == 0)
               {if (tuile1 in bassin && bassin.vide == 0)
                       {tuile1.tested = 1; salleFeu.chaleur = salleFeu.chaleur - 30 ;}
                       }
       if (tuile2.tested == 1)
               {if (TestScope(tuile2, salleFeu) == true)
                       {tuile2.tested = 0; salleFeu.chaleur = salleFeu.chaleur + 30 ;}
                       }
               if (tuile2.tested == 0)
               {if (TestScope(tuile2, salleFeu) == true)
                       {tuile2.tested = 1; salleFeu.chaleur = salleFeu.chaleur - 30 ;}
                       }

       if (tuile3.tested == 1)
               {if (TestScope(tuile3, salleFeu) == true)
                       {tuile3.tested = 0; salleFeu.chaleur = salleFeu.chaleur + 30 ;}
                       }
               if (tuile3.tested == 0)
               {if (TestScope(tuile3, salleFeu) == true)
                       {tuile3.tested = 1; salleFeu.chaleur = salleFeu.chaleur - 30 ;}
                       }
       if (tuile4.tested == 1)
               {if (TestScope(tuile4, salleFeu) == true)
                       {tuile4.tested = 0; salleFeu.chaleur = salleFeu.chaleur + 30 ;}
                       }
               if (tuile4.tested == 0)
               {if (TestScope(tuile4, salleFeu) == true)
                       {tuile4.tested = 1; salleFeu.chaleur = salleFeu.chaleur - 30 ;}
                       }

];


[Accueiltemple ;
       print "^^Angiras vous parle :^^~Veuillez nous excuser pour les precautions qu'il nous a fallu prendre pour empecher nos ennemis de vous reperer. Avec les vetements que vous portiez, cela aurait ete du suicide d'entrer ainsi dans le temple, leurs espions vous auraient denonce.~^" ; rtrue;
];


[Statufie ;
       print "^Au moment ou vous passez la porte, vous sentez vos membres devenir tres lourds. Vous ne pouvez plus bouger, et bientot vous sombrez dans l'inconscience, sans vous rendre compte de ce qui vous arrive.^^" ; musique_action(); deadflag=1; "^^Vous avez perdu." ;
];

[FeuTriche ;
       print "Vous regagnez le bateau avec du feu, et apres le voyage de retour vous pouvez rallumer dans votre pays la flamme jadis eteinte. Ce feu que vous n'avez pas eu a la bonne source, certains l'ont cru sacre, et grace a cela vous avez pu reprendre un petit avantage sur vos ennemis. Neanmoins on ne peut toujours gagner en ayant un jour triche ou en n'etant pas alle au bout de son epreuve, et rapidement vous reperdez du terrain et etes destitue de nouveau.^" ; musique_action(); deadflag = 3; print "^^Vous avez perdu." ; rtrue;
];

[Gagne ;
       musique_outro();
       print "Vous regagnez le bateau avec du feu, et apres le voyage de retour vous pouvez rallumer dans votre pays la flamme jadis eteinte. Vous menez vos troupes remises en confiance et motivees a des batailles toujours victorieuses, et elles reussissent a chasser l'envahisseur de votre pays, apres des mois de conflits ouverts. ^^Felicitations.^" ; deadflag = 2;
               #ifdef TARGET_ZCODE;
               #ifnot; ! TARGET_GLULX;
                       glk_image_draw(gg_mainwin,4,imagealign_InlineCenter, 0);
               #endif; ! TARGET_
rtrue;
];

!--------------------------------------------
#Include "FrenchG";
!--------------------------------------------

!--------------------------------------------
! Verbes (extension de FrenchG.h)
!--------------------------------------------

[InfoSub;
print "^^Jeu cree pour la competition http://ifiction.free.fr. Ceci est la version de publication. Vous pouvez trouver le code source ainsi que plus d'informations sur ce jeu sur le site indique plus haut, eventuellement a http://ifwiki.org, mais de preference a cette adresse : ^^     http://esclinux.tk^^
Eric Forgeot (c) droits reserves - 2005^^
^^^^

^" ;
                #ifdef TARGET_ZCODE;
               #ifnot; ! TARGET_GLULX;
                               musique_temple();
               ! couverture.png
                                 glk_image_draw(gg_mainwin,4,imagealign_InlineCenter, 0);
               #endif; ! TARGET_
];

[ HelpSub;
print "Ceci est une aventure textuelle, c'est a dire que pour interagir dans cette histoire vous avez a taper toutes vos instructions. Vous pouvez voir ceci comme un jeu de role limite, ou un ~livre dont vous etes le heros~ ameliore. ^^Pour les deplacements, il y a les commandes ~entrer~, ~est~, ~ouest~,
       ~nord~, ~sud~, ~haut~, ~bas~, ~entrer batiment~, mais aussi les raccourcis commes ~e~, ~n~, ~so~, ~ne~, ~h~ pour haut et ~b~ pour bas etc.^Notez aussi qu'en general en appuyant sur la fleche du haut du pave numerique, on retrouve la derniere commande, que l'on peut modifier et relancer pour gagner du temps.^^";

print "Pour savoir ou en sont vos possessions, tapez ~inventaire~, ou ~i~.^
       Pour avoir des descriptions courtes ou longues, tapez ~mode court~ ~mode long~ ou ~mode normal~.^^
";

       print "Si vous etes vraiment bloque vous pouvez taper l'instruction ~astuces~ (hints) qui vous donnera quelques cles pour reussir l'aventure, et si vous voulez la solution detaillee tapez ~cheminement~ (walkthrough). ^
       Il y a quelques musiques dans le jeu (version Glulx uniquement), notamment a l'introduction. Pour les arreter en court de lecture, taper ~music~ / ~musique~  au moment ou elles debutent et cela les stoppera immediatement, jusqu'a la prochaine musique. Pour desactiver completement toutes les musiques, taper ~music off~ / ~musique off~, et pour les remettre, taper ~music on~ / ~musique on~.^^" ;

print "Beaucoup de commandes ont des abreviations. Par exemple, vous pouvez
       taper ~i~ au lieu d' ~inventaire~, ~x objet~ au lieu de
       ~examiner objet~, ~x att~ pour examiner attentivement un objet, ~q~ au lieu de ~parler a~ / ~questionner~ etc.^
La fonction ~chercher~ peut avoir plusieurs significations suivant s'il s'agit simplement de chercher, ou ~chercher dans~ etc. (prevoir les differentes manieres de formuler une question)." ;
  print     "Bonne chance !";
];


[HintsSub;
print ""; style bold; print "Garde^"; style roman; print "Si le garde vous empeche de rentrer dans le temple, essayez de comprendre pourquoi, par exemple s'il n'y a pas un element que vous portez qui pourrait le gener. Vous devriez pouvoir echanger ce qui ne va pas, sans oublier de recuperer ce qui serait precieux a vos yeux, si jamais vous l'avez perdu.^^";
print ""; style bold; print "Mecanisme^"; style roman; print "
Si dans le temple vous etes bloque par des portes capricieuses, essayez de comprendre le mecanisme qui les regit. Notez bien que ce mecanisme peut avoir divers sens suivant l'ordre des cles qui l'actionnent.^
La croix dans le bassin est une mosaique, par contre si l'eau est videe, on peut deplacer le bassin et tourner une veritable croix. En remettant le bassin en place l'eau se remplit de nouveau. ^
Pour le reste, allez questionner le maitre du temple qui repondra a certaines de vos interrogations. (Les elements remplacent les tuiles qui les representent, sauf pour l'air qui n'est remplace par rien sauf lui-meme). Si c'est toujours trop difficile vous pouvez toujours forcer une peu la porte du temple, mais d'autres enigmes vous attendront.
^^" ;
print ""; style bold; print "Feu sacre^"; style roman; print "Notez bien que ces memes cles peuvent etre utilisees dans les pieces qui sont en rapport avec elles. De plus le feu qui l'on trouve un peu partout n'est pas le meme que celui qui brule au sommet de la tour.^^" ;
print ""; style bold; print "Marchand^"; style roman; print "
Il ne vous vendra rien, mais echangera un vase contre un habit simple, et ensuite vous pourrez recuperer votre vase en echange de vos riches habits qui ne vous servent plus a rien.^^";
print ""; style bold; print "Enigmes^"; style roman; print "
Si vous forcez la porte du temple, vous aurez des enigmes par les gardiens elementaires du temple. Si vous trouvez des equivalences aux tuiles que vous avez prises, vous entrerez librement, mais il vous faudra trouver le mecanisme pour ressortir.^La reponse a l'enigme de l'eau est ~soleil~ et a celle de l'air est ~ocean~. Pour l'enigme de la terre, il vous faudra mettre du safran sur les fleurs fanees. Enfin, pour pouvoir acceder a l'etage de la tour, il faut avoir avec soi toutes les tuiles, qui vont annuler la chaleur qui vous empeche de pratiquer l'ascension de cette tour.^^";
;];

[WalkthroughSub;
print "Consulter de preference les documents livres avec ce jeu qui sont les instructions pas a pas.^
Sinon voici le cheminement simplifie :^
il faut aller chez le marchand, echanger votre vase contre des habits simples, aller dans une petite ruelle sombre pour changer vos habits, retourner chez le marchand et recuperer votre vase en echangeant vos habits riches contre celui-ci. ^
Entrer dans le temple, parler au gardien pour en savoir plus sur l'histoire, le questionner eventuellement, recuperer la lampe ou la torche, et aller vers le coeur du temple. Ensuite deux choix sont possibles :^
- Premier choix : entrer dans le coeur, aller dans la salle de l'eau et prendre de l'eau dans le vase. Prendre de la terre dans la salle avec les fleurs. Retourner dans le petit couloir, et remplacer dans les alcoves les tuiles avec les objets correspondants (et rien pour la tuile blanche qui represente l'air). Aller dans la salle du feu et monter les escaliers avec les 4 tuiles sur soi, ce qui diminue la chaleur (action de l'air, de la terre, de l'eau, et de la tuile analogue du feu). Redescendre et mettre la tuile bleue dans la salle de l'eau, la tuile brune ou verte dans la salle de la terre, la tuile blanche dans l'une des salles de l'air, et la tuile rouge dans la salle du feu en haut. L'autel apparaitra. Redescendre chercher le vase dans les couloirs, la protection des portes etant desactivees, et remonter pres de l'autel ou vous pourrez allumer la torche ou la lampe au feu sacre. Proteger le feu avec le vase pour passer la salle du vent. Redescendre, aller eventuellement chez le marchand pour prendre
l'epee, et retourner prendre le bateau. Fin du jeu.
- Second choix : prendre le petit couloir, arriver vers les alcoves et prendre toutes les tuiles. La porte du temple se referme s'il n'y a pas les equivalents dans les alcoves. Pousser la porte, et crier soleil pour l'enigme de la salle de l'eau, ocean pour la salle de l'air, et si vous passez par la salle de la terre il faut mettre du safran (trouve chez le marchand) sur les fleurs malades. Montez dans la salle du feu du haut, allumer la torche ou la lampe au feu sacre. Retourner au bateau. Fin du jeu."
;];


[TricheSub;
move tuile1 to Player ; move Torche to Niche1 ; move tuile2 to salleEau ; move HabitsNormaux to player ; move Vase to Niche3 ; move tuile3 to salleTerre ; move Terre to Niche4 ; move tuile4 to salleAir  ; enigme = 1 ; move epee to player ; move assassins to Port ;
];

[AskForVendeurSub;
print "Si vous ne pouvez l'acheter, peut-etre pouvez-vous l'echanger contre quelque chose d'autre ?^";
];

[ExchangeSub;
       print_ret "Apparemment cela ne fonctionne pas ainsi.";
];

![DemanderSub;
!       print_ret "Ce n'est pas possible." ;
!];

[ParlerSub;
       if (noun == player) print_ret "Cela ne vous etonne pas d'apprendre cela.";
       if (actor == Angiras ) print_ret "Il n'est pas ici.";
       if (actor == Brihaspati ) print_ret "Il n'est pas ici.";
       if (RunLife(noun,##Parler) ~= false) return; ! consult life[; Parler: ]
       print_ret " Vous ne savez pas quoi dire.";
];

[CrierSoleilSub;
       if (location == salleEau) { salleEau.devinette = 1 ; print_ret "Vous criez un mot."; } else "Vous criez un mot.";];

[CrierAirSub;
       if (location == salleAir) { salleAir.devinette = 1 ; print_ret "Vous criez un mot."; } else "Vous criez un mot.";];

[CrierSub;
       print "Vous criez un mot.^"; rtrue ;];


[MusicPlaySub topic;
 #ifdef TARGET_ZCODE;
print  "Pas de musique dans cette version.";
   #ifnot; ! TARGET_GLULX;
       gg_musicchan = glk_schannel_destroy(gg_musicchan);
switch (topic) {
       !TODO special : gg_musicchan = glk_schannel_create(0); glk_schannel_play_ext(gg_musicchan, 2, 2, 0);
       theme : gg_musicchan = glk_schannel_create(0); glk_schannel_play_ext(gg_musicchan, 1, 1, 0);
       outro : gg_musicchan = glk_schannel_create(0); glk_schannel_play_ext(gg_musicchan, 3, 1, 0);
}
print_ret "morceaux disponibles : ~musique~ + theme, outro ...";
#endif; ! TARGET_
];

[MusicOffSub;
#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
if  (musicon == 1)  musicon = 0;
print "[la musique est desactivee]^"; rtrue ;
!else  musicon = 1;
#endif;
];

[MusicOnSub;
#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
if  (musicon == 0)  musicon = 1;
print  "[la musique est activee]^"; rtrue ;
#endif;
];

[Musique_theme;
#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
       if (musicon == 1)         {
                       gg_musicchan = glk_schannel_destroy(gg_musicchan);
                       gg_musicchan = glk_schannel_create(0);
                       glk_schannel_play_ext(gg_musicchan, 1, 1, 0); ! theme principal
               }
#endif;
];

[Musique_action;
#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
       if (musicon == 1)       {
                       gg_musicchan = glk_schannel_destroy(gg_musicchan);
                       gg_musicchan = glk_schannel_create(0);
                       glk_schannel_play_ext(gg_musicchan, 2, 1, 0); ! musique action
       }
#endif;
];

[Musique_temple;
#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
       if (musicon == 1)         {
                       gg_musicchan = glk_schannel_destroy(gg_musicchan);
                       gg_musicchan = glk_schannel_create(0);
                       glk_schannel_play_ext(gg_musicchan, 8, 1, 0); ! musique du temple
               !       glk_schannel_play_ext(gg_musicchan, 1, 1, 0); ! theme principal
               }
#endif;
];

[Musique_outro;
#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
       if (musicon == 1)         {
                       gg_musicchan = glk_schannel_destroy(gg_musicchan);
                       gg_musicchan = glk_schannel_create(0);
                       glk_schannel_play_ext(gg_musicchan, 3, 1, 0); ! musique du temple
               !       glk_schannel_play_ext(gg_musicchan, 1, 1, 0); ! theme principal
               }
#endif;
];


[MusicStopSub;
               #ifdef TARGET_ZCODE;
               #ifnot; ! TARGET_GLULX;
       gg_musicchan = glk_schannel_destroy(gg_musicchan);
               #endif; ! TARGET_

];


Extend 'parler' replace
               * 'aux'/'a'/'a'/'au'/'avec' creature -> Parler
               * creature -> Parler
               * 'a'/'a'/'au'/'aux'/'avec' creature 'de'/'du'/'des'/'l^' topic -> Tell
               * creature 'de'/'du'/'des'/'l^' topic -> Tell
               * creature topic -> Tell;

!Extend 'demander' replace
!* noun 'au' creature -> Demander reverse ;

Extend "demander" first
               * 'torche'                      ->AskForVendeur
               * 'habits'                      ->AskForVendeur
               * 'epee'                        ->AskForVendeur
               * 'habits' 'standards'                  ->AskForVendeur
               * 'habits' 'a'/'au' creature    -> AskForVendeur;

Extend "crier" first
               * 'soleil'                      ->CrierSoleil
               * 'ocean'                       ->CrierAir
               *  topic                        ->Crier;

Verb 'echanger' 'echange' 'change' 'changer'
               * held 'avec'/'contre' noun -> Exchange
               * noun 'avec'/'contre' held -> Exchange reverse
               * 'avec' noun -> Exchange;


Verb 'p//' = 'parler';

Verb 'info' 'credits' 'credit'
               *                -> Info;


Verb 'triche'
               *                -> Triche;


Verb "load"
               *                                -> Restore;

Verb "Restore"
               *                                -> Restore;


Verb "help" "aide" "manuel"
               *                                -> Help;

Verb 'music' 'musique'
               *                      -> MusicStop
               * 'stop'                -> MusicStop
               * 'off'                -> MusicOff
               * 'on'                 -> MusicOn
               * topic                -> MusicPlay;

Verb "astuces" "astuce" "hints"
               *                                       -> Hints;

Verb "cheminement" "walkthrough" "solution"
               *                                       -> Walkthrough;




[ RestartSub;
       L__M(##Restart,1);
       if (YesOrNo() ~= 0) {
#ifdef TARGET_ZCODE;
#ifnot; ! TARGET_GLULX;
       <MusicStop>;   ! pour arreter la musique
       if (modeimages ~= 0)
               { glk_window_close(gg_mapwin,0);}
!       modeimages = 1 ;
#endif; ! TARGET_
       @restart;
       L__M(##Restart, 2);
}
];


Extend 'recommencer' replace
       *                       -> Restart;



! PLAN

!     +------------------------------------+
!     |                                    |
!     |   +----------------------------+   |
!     |   |                            |   |
!     |   |         salle air          |   |
!     |   |      +---------------.     |   |
!     |   |      |               |     |   |
!     |   |         salle terre  |     |   |
!     |   |      |               |     |   |
!     |   +--  --+----+    +-----+--  -+   |
!     |   |           |    |           |   |
!     |   |           |    |           |   |
!     |   |           |    |           |   |
!     |   | salle          |  salle    |   |
!     |   |   eau     |    |    feu    |   |
!     |   |           |    |           |   |
!     |   +-----------+    +-----------+   |
!     |                                    |
!     +---------------+    +---------------+