!% ! Les options ci-dessous sont destinées au compilateur : !% ! (toutes sont désactivées dans cet exemple) !% ! +include_path=..\..\bibliotheques !% ! language_name=French ; !% ! -v5 ! version souhaitée : v5, v8, G, etc... !% ! -s ! give statistics !% ! -X ! infix (ne pas laisser dans la version publiée ; non disponible avec Glulx) !% ! -D ! debug (ne pas laisser dans la version publiée) !% ! -r ! imprime le contenu du jeu pour envoi vers un correcteur d'orthographe !% !+transcript_name=gametext.txt ! fichier d'arrivée !% !$MAX_SOURCE_FILES=512 !% !$MAX_INCLUSION_DEPTH=10 !% !$MAX_LABELS=50000 !% !$MAX_INDIV_PROP_TABLE_SIZE=50000 !% !$MAX_STATIC_DATA=20000 !-------------------------------------------- ! Constantes générales !-------------------------------------------- Constant Story "Le temple de Feu"; Constant Headline "^Une aventure dans une vallée lointaine^^Copyright (c) 2005 par Eric Forgeot ^Écrire ~aide~ pour des instructions rapides, et ~credits~ pour les instructions légales.^^"; Release 2; ! Constant DESACTIVER_IMPERATIF_DPS; ! Constant DESACTIVER_IMPERATIF_DPP; ! Constant DESACTIVER_INDICATIF_PPS; ! nécessite 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 musicon = 1; Global gg_musicchan = 0; Constant theme; Constant fin; Constant outro; !-------------------------------------------- ! Directives de remplacement !-------------------------------------------- ! [DeathMessage; print "Game Over";]; !-------------------------------------------- ! 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 maître."; if (score >= 7) "de sage."; if (score >= 3) "d initié."; "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 !-------------------------------------------- !-------------------------------------------- ! Modèles d'objets (déclarations 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 feutré des esprits du temple qui se glissent le long des murs, le chant des feux allumés qui brûlent joyeusement un peu partout, le cri du vent qui pousse l'air vers le feu, et accessoirement un léger 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 plutôt -parler à-", (the) self, "." ; ], initial [; ; ], has animate proper; Class Terre (2) with name 'terre' 'poignee' 'de', short_name "poignée de terre", description "De la terre.", before [; Empty: <> ; ], has nicheable female; Terre "terre" with dansniche4 0, name 'terre' 'poignee', short_name "poignée de terre", before [ poignee; Take: poignee = Terre.create(); ! poignee.name("une poignée de terre"); if (poignee == nothing) "Il n'y en a plus."; move poignee to location; <>; ], found_in SalleTerre, has scenery female ; !-------------------------------------------- ! Plan des lieux (pièces, 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 porté ici battent encore dans le vent, et vous appréciez 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 éteints. ^Vous êtes déjà passé par cette région lorsque vous étiez enfant, mais vous n'étiez pas retourné ici depuis lors, car le voyage en est tellement long.^Vous espérez que ceux qui vous poursuivent n'auront pas le temps d'apporter ici la même désolation qui a détruit votre pays natal. Quoi qu'il en soit, ce n'est que l'avant-garde qui court après vous, le reste ayant encore fort à faire pour assoir sa domination, aussi vous avez encore un peu de temps pour trouver de l'aide et organiser votre retour, et espérer conduire à 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 disposés en cercle, d'une façon qui semblerait originale à n'importe qui de votre région. Cette disposition se retrouve ici un peu partout sauf pour les plus gros bateaux qui suivent un peu plus loin un arrangement linéaire. On peut rejoindre l'entrée des divers vaisseaux en empruntant un petit dédale de pontons parfois encombrés 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 dénaturent un peu l'atmosphère 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 passées de ce pays, où un âge d'or commençant avait procuré faste et richesses à toute la région. Ici le contraste est flagrant. Heureusement ce genre d'endroit reste très marginal dans la région, et aussitôt que vous le quitterez, vous l'oublierez bien vite.", w_to port, e_to "Vous sentez que vous n'avez rien à faire dans cette direction. De plus cela pourrait devenir trop dangereux, n'oubliez pas que vous êtes 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 intérêt, 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 entourée des plus belles constructions de la région. Leurs toits dorés reflètent toutes les facettes du ciel profond de cette journée. Tout au centre se tient un temple qui est encore plus brillant que tout le reste. Des flammes brûlent au sommet de celui-ci, bien à l'abri des trois principaux vents qui soufflent par ici.", s_to port, w_to place2, n_to place3, e_to "Il y a bien une petite activité dans cette direction également, principalement des marchands de légumes et d'épices, néanmoins vous estimez qu'il n'est pas pertinent d'aller perdre votre temps par là, même si en d'autres occasions vous auriez fait cela avec délice.", 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 échoppe en périphérie de la place.^"; self.viewed = 1 ; rtrue; } ; ], description "Vous êtes en face de l'entrée d'un magasin à moitié ouvert sur l'extérieur. Les rues spécifiquement commerçantes, et donc fort fréquentées, sont plutôt vers l'est, aussi vous estimez plus raisonnable de rester dans celle-ci. Vous pensez que si vous avez besoin de quelque chose de précis, ce genre de marchand doit avoir tout à disposition. Diverses choses indescriptibles pendent aux poutres du dehors, mais il n'y a là rien pour vous intéresser.", 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 êtes impressionné par le désordre qui règne ici.^^"; self.viewed = 1 ; rtrue; } ; ], description [; print "Cette échoppe est plutôt mal rangée, mais elle est tellement emplie de choses qu'il ne pourrait guère en être autrement. Un vieux marchand se trouve au fond de l'unique pièce, planté là comme s'il vous attendait." ; if (self.viewed == 0) { print "Vous ne pouvez passer votre temps à fouiller ici, mais vous trouverez sans doute quand même 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'êtes pas décemment habillé." ; rtrue ;],out_to [; if (HabitsNormaux has worn || HabitsPrinciers has worn) PlayerTo(place2) ; else "Vous ne pouvez pas sortir si vous n'êtes pas décemment habillé." ; 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 étant sacrée -, vous mettant ainsi un peu plus à découvert. Quelques personnes vous regardent, mais vous ne reconnaissez pas le physique particulier des assassins lancés à vos trousses. Pourtant, il vaut mieux rester paré à toutes les éventualités, et ne pas éveiller 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 allées et venues n'ont pas été suffisamment discrètes, et rapidement en passant près du temple des assassins surgissent comme de nulle part. Ils n'ont pas beaucoup de mal à finir leur triste travail.^^" ; musique_action(); deadflag=1; print " Vous terminez votre aventure ici." ; rtrue ; } ; ], description [; if (deadflag==1) rtrue ; else "Vous êtes en face de l'entrée du temple. Vu d'ici, vous pouvez voir plus d'ornementations sur les murs, ainsi que des écritures dans une langue que vous reconnaissez. Les mots que vous formez rapidement dans votre tête sont des chants et des prières traditionnels, utilisés jadis dans l'enseignement de l'histoire et de la religion. De multiples niches et ouvertures viennent caractériser encore plus l'origine de ce temple. " ;], s_to place, n_to [; if (HabitsNormaux has worn) { PlayerTo(temple1) ; rtrue ; } else "Le garde vous détaille brièvement, 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 pièce de trente pieds sur vingt est le lieu de vie du temple, là où sont célébrés les cultes publics. La peinture sur les murs est encore plus vive et complexe ici qu'ailleurs. Les motifs représentés sont la vie des dieux et des anciens rois, leurs luttes pour la sauvegarde de leur dynastie, ainsi que des images des divers prêtres qui se sont succédés à la tête de ce temple et de ceux des villes les plus proches. Au fond vous voyez des colonnades formant une forêt bien ordonnée de piliers aux troncs réguliers.", 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 êtes sur un des côtés de la grande pièce principale. Ici se retrouvent les mêmes ornementations que dans la partie principale. Des ouvertures carrés, mais relativement petites, ont été pratiquées dans le plafond, faisant entrer un peu plus de lumière ici qu'ailleurs, et permettant le contempler le ciel, et sans doute également les étoiles 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 êtes sur un des côtés de la grande pièce principale. Les histoire en mosaïques luisantes se continuent ici également", 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 balisée de colonnes imposantes.", s_to temple1, n_to entreetemple has light; temple entreetemple "Entrée du temple" with name 'entrée' '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 début vers l'entrée des lieux les plus sacrés de la région. Juste au dessus de vous se trouve la tour où est gardé le feu que vous recherchez.^"; self.viewed = 1 ; rtrue; } ;], description "Vous êtes à l'entrée du centre du temple, là où se trouvent les épreuves symboliques qui transforment l'adepte en initié. Sur les côtés se trouvent des couloirs étroits qui visiblement mènent 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'entrée du temple.^" ; move PorteEntreetemple to entreetemple ; rtrue ;] has light ; Object PorteEntreetemple "Entrée du temple" with description "Cette porte en métal est apparue à la place de l'entrée par où 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 côté.^" ; 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 creusées 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 prélude à l'aventure.^^"; self.viewed = 1 ; rtrue; } ; ], description "Au nord et à l'ouest se trouvent des chambres pour les épreuves, 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 où l'élément liquide est mis à 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 éteint votre torche, vous empêchant 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 éteint votre lampe, vous empêchant 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 pièce dans un écrin d'humidité suffocante, recréant un climat tropical presque parfait. Des bassins sont disposés aux quatre coins, et des ouvertures dans le plafond font ruisseler une pluie artificielle sur l'ensemble de la surface de cette pièce.^" ; if (self hasnt on) print "Cette pièce serait vide sans la présence de bassins aux quatre coins de la pièce, et d'humidité 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-être est-ce simplement le hasard qui vous a mis dans cette situation. Seulement vous ne pourrez passer que si vous répondez correctement à cette énigme :^^ Si loin de moi pourtant il me détruit,^ Même si je ne suis pas craintif, je fuis,^ Présent partout, et même 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 réponse 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 précédente sont immédiatement dissipées par le courant vif qui sévit 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 éteint votre torche, vous empêchant de remporter le feu avec vous.^" ; } ; ], description [; print "Cette salle se prolonge à angle droit, et elle est entièrement dépourvue de tout mobilier. Le vent omni-présent qui souffle ici vous fait frissonner.^" ; if (enigme == 1 && self.devinette == 0) { print "^Vous entendez une voix sifflante qui dit :~Vous voilà ici pour vous mesurer à moi.^N'espérez pas un contact physique : vous ne pourrez passer que si vous répondez correctement à cette énigme :^^ Mon frère le vent n'y entre guère,^ Si loin en bas se trouve sa terre,^ Froide, hostile, et inaccessible,^ Mais si proche, vue depuis vos yeux,^ J'y ai vécu, temps éphémère,^ Plein d'entrain, de joie, et très fier,^ Mais j'en suis parti, insensible,^ Lorsque j'ai voulu toucher le feu.^^ Un pont entre les continents,^ Un plan changeant au gré de mes humeurs,^ Quel est-il ?~^^~Crie-moi ta réponse humain, et si elle est fausse ou trop peu audible, crains toi aussi d'être altéré à 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 même pièce, 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 éteint votre torche, vous empêchant de remporter le feu avec vous.^ " ; give Torche ~light ~on ; } ; ], description "Cette salle complète a la forme d'un fer à cheval, facilitant la circulation des différents 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 où vous avez pu passer auparavant.^"; self.viewed = 1 ; rtrue; } ; ], description [; print "Une belle salle entièrement emplie de fleurs, plantées à même le sol.^" ; if (enigme == 1 && self.devinette == 0) { print "^Une voix caverneuse vous interpelle :~On ne peut s'affranchir ainsi des obstacles rencontrés : si un de mes pairs vous refuse le passage et que vous vous invitez ici quand même, alors un simple parterre de fleur vous interdira définitivement de poursuivre votre route. Vous ne pourrez passer que si vous arrivez à réellement les soigner de ce qui les a rendues malades.~^^ ~^Une fleur bleue et très odorante,^ Une épice rouge et enivrante,^ Les couleurs nous manquent cruellement,^ Seule nous guérira cette épice 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 où vous posez le pied sur les premières fleurs, celles-ci grossissent pour devenir aussi hautes que vous.^Elles vous attaquent avant que vous ayez eu le temps de réagir." ; 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 très chaud en approchant du seuil de la pièce qui suit.^^"; self.viewed = 1 ; } ; testtuiles() ; rtrue; ], description "La salle est entièrement peinte en rouge très foncé. Un escalier relie ce niveau à un étage 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 à l'étage." ;} ; if (self.chaleur >= 100 && self.chaleur < 120) "Il fait encore trop chaud pour monter au niveau supérieur." ; if (self.chaleur >= 80 && self.chaleur < 100) "La chaleur est moindre mais c'est encore trop chaud pour accéder au niveau supérieur." ; if (self.chaleur >= 50 && self.chaleur < 80) "C'est encore un peu chaud pour accéder au niveau supérieur." ; if (self.chaleur >= 120) "Il fait beaucoup trop chaud pour pouvoir aller au niveau supérieur." ; ] 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 pièce est peu différente de celle d'où vous venez, si ce n'est qu'elle paraît plus solennelle car elle n'est pas peinte en rouge, mais en mauve très 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 perçant." , initial [; print "Angiras est là.^"; if (Torche.sacre == 1 || Lampe.sacre == 1 ) {print "Il voit que vous avez pu récupérer une étincelle du feu sacré, celle que vous ferez grandir dans le coeur de vos pairs et qui vous mènera certainement à la victoire. Il vous félicite pour avoir réussi les épreuves, quel que soit le moyen qui vous a fait parvenir à votre but. Il vous salue bientôt car il sait que vous devez repartir au plus vite auprès des vôtres.^"; 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 été son élève de nombreuses années auparavant. C'est un grand maître 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 disparaît soudain de la pièce, 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 événements récents, la montée 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 révolte contre la passivité dans laquelle est englué votre pays. Il vous suggère de faire comme vos prédécesseurs et d'aller rechercher une partie du Feu sacré pour la rapporter dans vos contrées."; 2: print "Vous alliez commencer à parler lorsque un homme assez trapu arrive près de vous. Il a tout entendu, et commence à vous critiquez violemment, vous accusant d'être un lâche et un traître pour avoir abandonné votre pays. " ; move Brihaspati to Location ; print "Angiras vous présente cet homme comme étant Brihaspati, un membre influent siégeant au conseil du village. Angiras prend alors votre défense, expliquant que l'on ne peut connaître tous les tenants et aboutissants de cette histoire en n'ayant pas vécu la destitution qui vous est arrivée. 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 années. Ses gardiens y restent fidèles éternellement, aussi même si je leur demande ils ne vous laisseront pas passer.~"; 'gardiens', 'gardien' , 'elemental', 'elementaux' : print_ret "~Les gardiens du feu sacré font passer leur promesse avant toute chose.~"; 'promesse', 'enigmes', 'enigme' : print_ret "~Les gardiens ont promis de garder le feu sacré contre tous les étrangers. Selon la manière dont vous les provoquerez, ils réagiront avec vous de diverses façons.~"; 'epice', 'safran', 'epices' : print_ret "~On peut trouver des épices sur le marché autour du temple.~"; 'escalier', 'chaleur' : print_ret "~La chaleur de l'étage supérieur peut être détournée si on lui approche les clefs contrant son pouvoir.~"; 'tuile', 'tuiles' : print_ret "~Elles peuvent avoir diverses fonctions, à vous de trouver lesquelles.~"; 'Brihaspati', 'roux', 'conseiller' : print_ret "~Il n'est pas bien intelligent, ne vous inquiétez pas.~"; 'niche', 'niches', 'ouvertures', 'ouverture', 'alcove', 'cavite', 'alcoves', 'cavites' : print_ret "~Avez-vous bien fouillé les diverses alcôves du temple pour en récupérer les clefs ?~"; 'flammes', 'feu', 'sacre', 'torches', 'ancetres', 'tour' : print_ret "~Le feu qui baigne perpétuellement ce temple, pour fournir énergie et chaleur, n'est pas un feu sacré. Ce dernier se trouve dans la tour, accessible seulement par le coeur de cet édifice. Inaltéré, il n'a jamais cessé de brûler depuis le commencement des temps les plus anciens, c'est à dire depuis le moment où nos ancêtres sont arrivés dans cette contrée et y ont établi notre ordre.~"; 'cle', 'clefs', 'cles', 'clef' : print_ret "~Ce ne sont pas des clefs ordinaires, comme on peut le lire près de l'endroit où vous les avez trouvées.~"; 'ennemis', 'espions', 'assassins' : print_ret "~Nos ennemis n'ont eu de cesse de nous persécuter dès lors que leur pouvoir a pu grandir suffisamment, vous avez pu vous en rendre compte amèrement. Je sais que certains sont arrivés dans cette ville, aussi restez vigilant.~"; 'ordre', 'agencement', 'disposition', 'enigme', 'fonctions', 'fonction', 'arrangement' : print_ret "~Chaque disposition des clefs correspond à une fonction spécifique. Si vous voulez les substituer, faite-le avec un objet ou un élément 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 à votre encontre." , initial [; print "Brihaspati.^"; if (Brihaspati.voir_perso == 0) { Brihaspati.voir_perso = Brihaspati.voir_perso + 1 ; print " L'homme vous regarde à peine. " ; } ], times_spoken_to 0, ! pour compter les sujets de conversation life [; Attack: print "Vous frappez l'homme mais il se sauve au même 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 à votre égard, et alors que vous commençez à vous lancer dans des explications pour vous défendre, 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 à notre zone de juridiction, aussi nous n'avons rien à en dire.~"; 'hostilite', 'insultes': print_ret "~Vous m'êtes antipathique.~"; 'etranger', 'etrangers' : print_ret "~Je ne vous connais pas.~"; 'guerre' : "~C'est votre problème.~"; } print_ret "~Je n'ai rien à 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 complètement son visage. Il porte un plastron métallique et une cotte de mailles sur le reste de son buste. Il tient en main une grande hallebarde.", initial [; print "^Un garde est là.^" ; ], 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 à discuter avec le garde qui ne bouge même pas."; 2: print_ret "Pas de réponse"; default: return false;} Ask, Tell: switch (second) { 'entrer', 'ici': print_ret "~Je ne peux vous laisser entrer ainsi.~"; } print_ret "Pas de réponse."; ], has male; Personnage Marchand "Le vendeur" with name 'commerçant' 'commercant' 'employe' 'employé' '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 échanger ?~"; 2: print_ret "Ce vendeur n'est pas très 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 sacré.~"; 'habits', 'simples', 'tunique', 'robe' : print_ret "~Vous avez sans doute quelque chose qui peut m'intéresser 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 épices avec moi, même si ce n'est pas mon métier de vendre cela." ; 'aide': print_ret "~Dites-moi précisément ce que vous voulez avoir.~"; } print_ret "~Ce n'est pas à moi de vous aider pour cela, ou alors je n'ai pas bien compris votre question.~"; ], before [; Search, Look, Examine: "Ce marchand est habillé d'une succession de pièces de tissus empilées les unes sur les autres. Il a un turban au sommet de sa tête. Par certains côtés il ferait plus penser à un brahmane qu'à un marchand."; Exchange: print_ret "~Dites-moi ce que vous voulez échanger.~"; ], 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 réagi assez vite, vous voyez trois ombres se précipiter vers vous, et vous tailler en pièce." ; musique_action(); deadflag=1; print " Vous terminez votre aventure ici.^" ; rtrue ;} ; ], voir_perso 0, description "Trois assassins sont là. Leurs visages sont complètement cachés par une cagoule sombre, mais vous pouvez voir leurs yeux brûlants de haine pointant vers vous, ainsi que leurs grandes épées acérées.", initial [; StartTimer(Assassins, 3); print "^Trois assassins sont là.^" ; rtrue ; ], times_spoken_to 0, ! pour compter les sujets de conversation life [; attack: if ( Epee in Player ) { print "Vous sortez votre épée fraichement acquise, qui semble crépiter de sa nouvelle fonction. A sa vue vos ennemis reculent, mais votre arme vous entraîne rapidement au combat, un combat rude mais dont vous sortez finalement vainqueur, sans doute préfigurant 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 évite facilement et un de ses compères 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 étonnement, sans réponse"; 2: print_ret "Pas de réponse"; default: return false;} ], has male pluralname; !-------------------------------------------- ! Objets déplaçables !-------------------------------------------- !Object cle1 "clé 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', 'extérieur', 'village', 'batisses', 'maisons', 'batiments', 'batiment', 'constructions', 'toits', 'murs', 'maison','chemin','port' : self.number = 0; i++; 'paysage', 'environnement', 'région' : self.number = 1; i++; 'montages', 'collines', 'montagne' : self.number = 2; i++; 'forets', 'arbres', 'foret', 'forêt' : 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 région est un peu humide, mais fraîche en cette saison. La mousson n'est pas encore à son point le plus intense. Des forêts 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 à la douceur des teintes de l'atmosphère."; 3: "Vous ne voyez qu'une partie de la forêt en restant dans la ville, même si celle-ci se trouve dans une sorte de dépression."; 4: "Leur vie grouille un peu partout dans le port et le village, pour le commerce, le retour de la pêche et les simples curieux. Vous comprenez à peine leur langue dans ce vacarme."; 5: "Certains traits caractéristiques de ce temple vous rappellent ceux de votre pays, ou plutôt ceux qui étaient dans votre pays avant qu'ils ne soient presque tous détruits."; 6: "Les bords de mer et l'activité qui va avec ne vous emplissent pas d'autant de nostalgie que les montagnes mystérieuses et dures, mais ce spectacle est plaisant malgré tout."; } default: "Le décor 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', 'région' : self.number = 1; i++; 'montages', 'collines', 'montagne' : self.number = 2; i++; 'forets', 'arbres', 'foret', 'forêt' : 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 désormais. Vous devez maintenant vous concentrer sur l'intérieur."; 2: "Vous devez vous concentrer sur l'intérieur maintenant, et non plus sur l'extérieur."; 3: "Vous devez vous concentrer sur l'intérieur maintenant, et non plus sur l'extérieur."; 4: "Il n'y a pas de monde ici."; } default: "Le décor 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 mené 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 à quai.^"; rtrue ; ], aquai 1, name 'voilier' 'bateau' 'navire', before [; enter: if (TestScope(player, assassins) == true) print_ret "Les assassins vous bloquent l'entrée du bateau." ; if (self.aquai == 0) { print " Le voilier est déjà 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 quête.^"; 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 allumé.^"; 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 possède 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 échange.^" ; 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 éteinte.^"; ], 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 éteignez 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 éteinte.^"; ], 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 éteignez la lampe.^"; ], has female switchable ~on nicheable scored; Object Epee "épée" Echoppe with description "Une épée antique, avec une garde cuivrée et des écritures cunéiformes sur la lame.", before [; AskForVendeur: print "Vous ne pourrez la prendre que si vous êtes légitiment encouragé à cela." ; move Epee to player ; rtrue ; take: if (Torche.sacre == 1 || Lampe.sacre == 1 ) { print "Le marchand s'incline et vous donne l'épée.^"; rfalse ;} else "Vous n'avez aucun droit sur cette épée." ; ], 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 êtes 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 sacré, sur lequel brûle 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 fanées.^" ; } else "De belles fleurs colorées.^" ; ], before [; Take, Remove: "Vous n'avez pas de raison d'arracher ces fleurs, de plus elles sont trop petites."; Smell: "Avec l'odeur d'humidité de la pièce, vous ne trouvez pas d'odeur spécifique à ces fleurs."; Receive: if (noun==Safran) { salleTerre.devinette = 1 ; print "Vous saupoudrez les fleurs avec du safran. Elles reprennent immédiatement 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 recommandé 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 à 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 à main nue." ; rtrue ; ], has static ; Object bassin "bassin" with name 'bassin' 'bassins', vide 0, description [; print "Les bassins sont recouverts de mosaïques bleues représentant des entrelacs savants. Au fond vous voyez de grandes croix mauves dessinées avec de petits carreaux." ; if (self.vide == 1) print " Les bassins sont vides." ; if (bassin hasnt on) print " L'un d'eux a été déplacé." ; print "^" ; ], before [; Take, Remove: "C'est beaucoup trop lourd, et scellé dans le sol."; pull: if (self.vide == 0) "Avec toute cette eau qui emplit le bassin, vous ne pouvez rien faire." ; else print "Vous déplacez 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 à 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 à 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 déplacer à la fois le bassin et le mur qui est derrière.^" ; 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 diamètre.^" ; if (croix has on) " La croix a été tournée sur son axe." ; ], name 'croix' 'mauve' 'mauves', before [; take, remove : "C'est fixé 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 dessinée en mosaïque, 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 à manipuler." ; ], found_in place2, has pluralname static scenery; Object HabitsPrinciers "vêtements richement ouvragés" with description "Des vêtements 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 marché est accepté contre le vase.^" ; move Vase to player ; move HabitsPrinciers to PossessionsMarchand ;} else "L'échange 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 marché en échange du vase. Il dépose 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 marché contre les habits.^" ; move Vase to Player ; move HabitsPrinciers to PossessionsMarchand ; rtrue ;} else "Le vendeur ne veut pas faire cette affaire-là.^"; 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 protégez la torche en retournant le vase dessus.^"; move Torche to Vase ; return false ;} else "Ce vase n'est pas prévu 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 dessinée 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 dessiné 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 végétaux dessinés dessus.", name 'tuile' 'brune' 'brun' 'verte' , has nicheable female; Object tuile4 "tuile blanche" with tested 0, description "Une tuile blanche, avec un nuage dessiné dessus.", name 'tuile' 'blanche' , has nicheable female; Object Niche1 "niche tout en haut" couloirniches with description "La première niche, tout en haut.", capacity 1, react_before [; exchange: print "L'échange n'est pas possible ainsi.^"; rtrue ; ], before[; Receive: if (noun has nicheable ) return false ; else "Cette niche n'est pas prévue pour recevoir ", (the) noun, "."; Empty: ! move children(Niche1) to Player ; print "Plutôt 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 deuxième niche, au milieu en haut.", capacity 1, react_before [; exchange: print "L'échange n'est pas possible ainsi.^"; rtrue ; ], before[; Receive: if (noun has nicheable ) return false ; else "Cette niche n'est pas prévue pour recevoir ", (the) noun, "."; Empty: print "Plutôt 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 troisième niche, au milieu en bas.", capacity 1, react_before [; exchange: print "L'échange n'est pas possible ainsi.^"; rtrue ; ], before[; Receive: if (noun has nicheable ) return false ; else "Cette niche n'est pas prévue pour recevoir ", (the) noun, "."; Empty: print "Plutôt 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 quatrième niche, tout en bas.", capacity 1, react_before [; exchange: print "L'échange 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 prévue pour recevoir ", (the) noun, "."; Empty: print "Plutôt 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'intérieur est plus intéressant que l'extérieur.", found_in place2, has scenery; Object fake_tour "tour" with name 'tour' 'temple' 'centre' 'feu' 'flammes' 'sacré' 'contreforts' 'batisse' , description "Le temple est ceinturé par quatre tours et quatre contreforts qui viennent s'ajouter pour en renforcer la structure. C'est une belle bâtisse carrée et rassurante à regarder, mais vous êtes de plus en plus impatient d'y entrer maintenant. Une tour supplémentaire vient au dessus de ce temple, et vous pouvez voir par la lueur dégagée qu'elle renferme le feu sacré.", 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 très dures. Certaines de ces tuiles sont vernissées, et un motif mythologique représente des scènes d'un autre temps. Quelques lampes fixées dans certains de ces murs assurent d'avoir de la lumière et du feu où 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, gravée dans la roche, il y a cette phrase : ^^~Le désordre maintient l'ordre tant qu'il est préservé, ^les clefs libèrent des verrous dans les endroits réservés, ^mais l'ordre ramène le feu sacré tel qu'il est réellement conservé~.^", has scenery; Object fake_colonnes "colonnes" with name 'colonnes' 'colonne' 'colonnades' 'colonades' 'piliers' 'plantes', description "Des colonnes cannelées, si larges que vous ne pourriez en faire le tour avec vos bras. Le haut de ces colonnes représente des plantes disposées régulièrement.", 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_image_draw(gg_mainwin,5,imagealign_InlineCenter, 0); ! print "^"; #endif; ! TARGET_ Banner(); print (string) LICENSE; return 2; ]; [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 mécanisme 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 précautions qu'il nous a fallu prendre pour empêcher nos ennemis de vous repérer. Avec les vêtements que vous portiez, cela aurait été du suicide d'entrer ainsi dans le temple, leurs espions vous auraient dénoncé.~^" ; rtrue; ]; [Statufie ; print "^Au moment où vous passez la porte, vous sentez vos membres devenir très lourds. Vous ne pouvez plus bouger, et bientôt 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 après le voyage de retour vous pouvez rallumer dans votre pays la flamme jadis éteinte. Ce feu que vous n'avez pas eu à la bonne source, certains l'ont cru sacré, et grâce à cela vous avez pu reprendre un petit avantage sur vos ennemis. Néanmoins on ne peut toujours gagner en ayant un jour triché ou en n'étant pas allé au bout de son épreuve, et rapidement vous reperdez du terrain et êtes destitué de nouveau.^" ; musique_action(); deadflag = 3; print "^^Vous avez perdu." ; rtrue; ]; [Gagne ; musique_outro(); print "Vous regagnez le bateau avec du feu, et après le voyage de retour vous pouvez rallumer dans votre pays la flamme jadis éteinte. Vous menez vos troupes remises en confiance et motivées à des batailles toujours victorieuses, et elles réussissent à chasser l'envahisseur de votre pays, après des mois de conflits ouverts. ^^Félicitations.^" ; 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 créé pour la compétition 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 indiqué plus haut, éventuellement à http://ifwiki.org, mais de préférence à cette adresse : ^^ http://esclinux.tk^^ Eric Forgeot (c) droits réservés - 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 à dire que pour interagir dans cette histoire vous avez à taper toutes vos instructions. Vous pouvez voir ceci comme un jeu de rôle limité, ou un ~livre dont vous êtes le héros~ amélioré. ^^Pour les déplacements, il y a les commandes ~entrer~, ~est~, ~ouest~, ~nord~, ~sud~, ~haut~, ~bas~, ~entrer bâtiment~, mais aussi les raccourcis commes ~e~, ~n~, ~so~, ~ne~, ~h~ pour haut et ~b~ pour bas etc.^Notez aussi qu'en général en appuyant sur la flèche du haut du pavé numérique, on retrouve la dernière commande, que l'on peut modifier et relancer pour gagner du temps.^^"; print "Pour savoir où 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 êtes vraiment bloqué vous pouvez taper l'instruction ~astuces~ (hints) qui vous donnera quelques clés pour réussir l'aventure, et si vous voulez la solution détaillée tapez ~cheminement~ (walkthrough). ^ Il y a quelques musiques dans le jeu (version Glulx uniquement), notamment à l'introduction. Pour les arrêter en court de lecture, taper ~music~ / ~musique~ au moment où elles débutent et cela les stoppera immédiatement, jusqu'à la prochaine musique. Pour désactiver complètement toutes les musiques, taper ~music off~ / ~musique off~, et pour les remettre, taper ~music on~ / ~musique on~.^^" ; print "Beaucoup de commandes ont des abréviations. 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 à~ / ~questionner~ etc.^ La fonction ~chercher~ peut avoir plusieurs significations suivant s'il s'agit simplement de chercher, ou ~chercher dans~ etc. (prévoir les différentes manières de formuler une question)." ; print "Bonne chance !"; ]; [HintsSub; print ""; style bold; print "Garde^"; style roman; print "Si le garde vous empêche de rentrer dans le temple, essayez de comprendre pourquoi, par exemple s'il n'y a pas un élément que vous portez qui pourrait le gêner. Vous devriez pouvoir échanger ce qui ne va pas, sans oublier de récupérer ce qui serait précieux à vos yeux, si jamais vous l'avez perdu.^^"; print ""; style bold; print "Mécanisme^"; style roman; print " Si dans le temple vous êtes bloqué par des portes capricieuses, essayez de comprendre le mécanisme qui les régit. Notez bien que ce mécanisme peut avoir divers sens suivant l'ordre des clés qui l'actionnent.^ La croix dans le bassin est une mosaïque, par contre si l'eau est vidée, on peut déplacer le bassin et tourner une véritable croix. En remettant le bassin en place l'eau se remplit de nouveau. ^ Pour le reste, allez questionner le maître du temple qui répondra à certaines de vos interrogations. (Les éléments remplacent les tuiles qui les représentent, sauf pour l'air qui n'est remplacé par rien sauf lui-même). Si c'est toujours trop difficile vous pouvez toujours forcer une peu la porte du temple, mais d'autres énigmes vous attendront. ^^" ; print ""; style bold; print "Feu sacré^"; style roman; print "Notez bien que ces mêmes clés peuvent être utilisées dans les pièces qui sont en rapport avec elles. De plus le feu qui l'on trouve un peu partout n'est pas le même que celui qui brûle au sommet de la tour.^^" ; print ""; style bold; print "Marchand^"; style roman; print " Il ne vous vendra rien, mais échangera un vase contre un habit simple, et ensuite vous pourrez récupérer votre vase en échange de vos riches habits qui ne vous servent plus à rien.^^"; print ""; style bold; print "Enigmes^"; style roman; print " Si vous forcez la porte du temple, vous aurez des énigmes par les gardiens élémentaires du temple. Si vous trouvez des équivalences aux tuiles que vous avez prises, vous entrerez librement, mais il vous faudra trouver le mécanisme pour ressortir.^La réponse à l'énigme de l'eau est ~soleil~ et à celle de l'air est ~ocean~. Pour l'énigme de la terre, il vous faudra mettre du safran sur les fleurs fanées. Enfin, pour pouvoir accéder à l'étage de la tour, il faut avoir avec soi toutes les tuiles, qui vont annuler la chaleur qui vous empêche de pratiquer l'ascension de cette tour.^^"; ;]; [WalkthroughSub; print "Consulter de préférence les documents livrés avec ce jeu qui sont les instructions pas à pas.^ Sinon voici le cheminement simplifié :^ il faut aller chez le marchand, échanger votre vase contre des habits simples, aller dans une petite ruelle sombre pour changer vos habits, retourner chez le marchand et récupérer votre vase en échangeant vos habits riches contre celui-ci. ^ Entrer dans le temple, parler au gardien pour en savoir plus sur l'histoire, le questionner éventuellement, récupérer 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 alcôves les tuiles avec les objets correspondants (et rien pour la tuile blanche qui représente 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 apparaîtra. Redescendre chercher le vase dans les couloirs, la protection des portes étant désactivées, et remonter près de l'autel où vous pourrez allumer la torche ou la lampe au feu sacré. Protéger le feu avec le vase pour passer la salle du vent. Redescendre, aller éventuellement chez le marchand pour prendre l'épée, et retourner prendre le bateau. Fin du jeu. - Second choix : prendre le petit couloir, arriver vers les alcôves et prendre toutes les tuiles. La porte du temple se referme s'il n'y a pas les équivalents dans les alcôves. Pousser la porte, et crier soleil pour l'énigme de la salle de l'eau, océan pour la salle de l'air, et si vous passez par la salle de la terre il faut mettre du safran (trouvé chez le marchand) sur les fleurs malades. Montez dans la salle du feu du haut, allumer la torche ou la lampe au feu sacré. 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-être pouvez-vous l'échanger 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 étonne 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) { 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; if (musicon == 1) musicon = 0; print "[la musique est désactivée]^"; rtrue ; !else musicon = 1; ]; [MusicOnSub; if (musicon == 0) musicon = 1; print "[la musique est activée]^"; rtrue ; ]; [Musique_theme; 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); ! théme principal } ]; [Musique_action; 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 } ]; [Musique_temple; 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); ! théme principal } ]; [Musique_outro; 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); ! théme principal } ]; [MusicStopSub; #ifdef TARGET_ZCODE; #ifnot; ! TARGET_GLULX; gg_musicchan = glk_schannel_destroy(gg_musicchan); #endif; ! TARGET_ ]; Extend 'parler' replace * 'aux'/'a'/'à'/'au'/'avec' creature -> Parler * creature -> Parler * 'à'/'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;