! ---------------------------------------------------------------------------- ! Advent 961209 A classic and one of the standard Inform 6 example games ! ! ! Adapted to Inform 5: 17.5.94 to 24.5.94 ! Modernised to Inform 5.5 and library 5/12 or later: 20.12.95 ! Modernised to Inform 6 and library 6/1 or later: 11.11.96 ! A few bugs removed and companion text rewritten: 9.12.96 ! Traduction en fran@ccais : 25.01.01 ! ---------------------------------------------------------------------------- Constant TEST_VERSION; Constant Story "AVENTURE"; Constant Headline "^(titre original : Adventure ou Colossal Cave)^ Par Will Crowther (1973) et Don Woods (1977)^ Reconstruit en trois @'etapes par :^ Donald Ekman, David M. Baggett (1993) et Graham Nelson (1994)^ Traduit en fran@ccais par Jean-Luc Pontico (2001)^ [In memoriam Stephen Bishop (1820?-1857): GN]^ (tapez ~aide~ pour consulter le manuel)^^"; Serial "000531"; Release 1; Constant MAX_CARRIED = 7; Constant MAX_SCORE = 350; Constant MAX_TREASURES = 15; Constant AMUSING_PROVIDED; ! Constant DESACTIVER_IMPERATIF_DPS; ! Constant DESACTIVER_IMPERATIF_DPP; ! Constant DESACTIVER_INDICATIF_PPS; ! n@'ecessite l'IMPERATIF_DPS ! Constant DESACTIVER_IMPERATIF_PPP; Include "Parser"; Include "VerbLib"; Attribute nodwarf; Attribute treasure_found; Attribute multitude; Global caves_closed; Global canyon_from; Global treasures_found; Global deaths; Global dark_warning; Global feefie_count; ! --------------------------------------------------------------------------- ! Ceci change le comportement du jeu quand on utilise le mot "tout" ! ou un mot ambigu ! (voir le manuel d'Inform page 164) ! --------------------------------------------------------------------------- [ 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; ]; ! ---------------------------------------------------------------------------- ! Rules for treasures, which will be scattered all over the game ! ---------------------------------------------------------------------------- Class Treasure with depositpoints 10, after [; Take: if (location==Inside_Building) score=score-self.depositpoints; score=score+5; if (noun hasnt treasure_found) { give noun treasure_found; treasures_found++; score=score+2; } "Ca y est !"; Drop: score=score-5; if (location==Inside_Building) { score=score+self.depositpoints; "D@'esormais en lieu s@^ur."; } ]; ! ---------------------------------------------------------------------------- ! The outside world ! ---------------------------------------------------------------------------- Class AboveGround has light nodwarf; AboveGround At_End_Of_Road "Au bout du chemin" with description "Vous @^etes au bout d'une route venant de l'ouest, pr@`es d'un petit b@^atiment de briques. La for@^et vous entoure. Un ruisseau sort de l'@'edifice et continue vers le sud.", w_to At_Hill_In_Road, u_to At_Hill_In_Road, e_to Inside_Building, d_to In_A_Valley, s_to In_A_Valley, n_to In_Forest_1, in_to Inside_Building; Object Building "b@^atiment" with name "batiment" "maison" "edifice" "petit" "petite" "brique" "briques", description "C'est un petit b@^atiment de briques. Il semble abriter une source.", found_in At_End_Of_Road At_Hill_In_Road Inside_Building, before [; Enter: if (location == At_End_Of_Road) <>; if (location == Inside_Building) "Mais vous @^etes d@'ej@`a dedans !"; if (location == At_Hill_In_Road) { ; <>; } ], has scenery; Object Stream "ruisseau" with name "ruisseau" "eau" "riviere" "culbutant" "reservoir", found_in At_End_Of_Road In_A_Valley At_Slit_In_Streambed In_Pit In_Cavern_With_Waterfall At_Reservoir Inside_Building, before [; Drink: "Vous buvez de l'eau du ruisseau. L'eau a un fort go@^ut min@'eral, mais ce n'est pas d@'eplaisant. Elle est extr@^emement froide."; Take: if (bottle notin player) "Vous n'avez pas de quoi porter de l'eau."; <>; Insert: if (second == bottle) <>; "Vous n'avez pas de quoi porter de l'eau."; Receive: if (noun == ming_vase) { remove ming_vase; move shards to location; score=score-5; "Le changement brusque de temp@'erature a fait @'eclater le vase."; } if (noun == bottle) <>; remove noun; if (noun ofclass Treasure) score=score-5; print_ret (The) noun, " ", (isorare) noun, " emport@'e", (es) noun, " par le courant."; ], has scenery; Object "route" with name "route" "chemin" "terre", description "La route est boueuse, pas de brique jaune.", found_in At_End_Of_Road At_Hill_In_Road In_Forest_2 has scenery female; Object "for@^et" with name "foret" "arbre" "arbres" "chenes" "erables" "bosquet" "pins" "epiceas" "bouleaux" "frenes" "jeunes" "buissons" "feuilles" "baies", description "Les arbres de la for@^et sont de grands ch@^enes et des @'erables, avec parfois un bosquet de pins ou d'@'epic@'eas. Il y a un peu de sous-bois, principalement des bouleaux et de jeunes fr@^enes, ainsi que des buissons de diverses sortes. A cette @'epoque de l'ann@'ee la visibilit@'e est assez limit@'ee par toutes les feuilles, mais le voyage est assez facile si vous contournez les @'epic@'eas et les buissons de baies.", found_in At_End_Of_Road At_Hill_In_Road In_A_Valley In_Forest_1 In_Forest_2 has scenery multitude female; AboveGround At_Hill_In_Road "Sur la colline" with description "Vous @^etes arriv@'e en haut d'une colline, toujours dans la for@^et. Le chemin descend vers l'autre c@^ot@'e de la colline. Au loin, un b@^atiment.", e_to At_End_Of_Road, n_to At_End_Of_Road, d_to At_End_Of_Road, s_to In_Forest_1; Object -> "colline" with description "C'est une colline ordinaire.", name "colline" "pente" has female scenery; Object -> "autre versant de la colline" with article "l'", description "Pourquoi ne l'explorez-vous pas vous-m@^eme ?", name "autre" "versant" "cote" "colline" has scenery; AboveGround Inside_Building "Dans le b@^atiment" with description "Vous @^etes dans un b@^atiment qui abrite une source abondante.", cant_go "La source s'@'ecoule par deux conduites de 30 cm de diam@`etre. La seule sortie est @`a l'ouest.", before [; Enter: if (noun==Spring or SewerPipes) "La source s'@'ecoule par deux conduites de 30 centim@`etres de diam@`etre. Il est conseill@'e d'utiliser la sortie."; if (noun==Building) "Vous @^etes d@'ej@`a dans le b@^atiment."; Xyzzy: if (In_Debris_Room hasnt visited) rfalse; PlayerTo(In_Debris_Room); rtrue; Plugh: if (At_Y2 hasnt visited) rfalse; PlayerTo(At_Y2); rtrue; ], w_to At_End_Of_Road, out_to At_End_Of_Road, in_to "Les tuyaux sont trop @'etroits."; Object -> Spring "source" with name "source" "abondante" "fontaine", description "L'eau s'@'ecoule par deux conduites de 30 cm de diam@`etre." has female scenery; Object -> SewerPipes "paire de tuyaux de 30 cm de diam@`etre" with name "paire" "tuyaux" "tuyau" "30" "cm" "trente" "centimetres" "diametre" "conduite" "conduites", description "Les tuyaux sont trop @'etroits. La seule sortie est @`a l'ouest." has female scenery; Object -> set_of_keys "trousseau de cl@'es" with description "Ce trousseau de cl@'es a l'air tout @`a fait normal.", initial "Des cl@'es sont pos@'ees sur le sol.", before [; Count: "Vous comptez une douzaine de cl@'es."; ], name "cles" "clefs" "cle" "clef" "porte" "-cles" "-clefs" "jeu" "trousseau"; Object -> tasty_food "nourriture app@'etissante" with description "Elle a vraiment l'air d@'elicieuse !", article "de la", initial "Il y a ici de la nourriture app@'etissante.", name "nourriture" "ration" "rations" "tripes" "bonne" "gouteuse" "delicieuse" "appetissante", after [; Eat: "D@'elicieux !"; ], has edible female; Object -> brass_lantern "lampe de cuivre" with name "lampe" "lanterne" "lumiere" "etincelante" "cuivre", when_off "Il y a ici une @'etincelante lampe de cuivre.", when_on "Votre lampe est ici, elle brille vivement.", power_remaining 330, replace_batteries [; if (fresh_batteries in player or location) { remove fresh_batteries; give fresh_batteries general; move old_batteries to location; self.power_remaining = 2500; "Je prends la libert@'e de remplacer les piles."; } ], daemon [ t; if (self hasnt on) { StopDaemon(self); rtrue; } t = --(self.power_remaining); if (t==0) give self ~on ~light; if (self in player || self in location) { if (t==0) { print "Votre lampe est @`a plat."; if (fresh_batteries notin player && location hasnt light) { deadflag=3; " Vous ne pouvez pas explorer la caverne sans une lampe. Alors revenez un autre jour."; } else self.replace_batteries(); new_line; rtrue; } if (t==30) { print "Votre lampe est en train de faiblir."; if (fresh_batteries has general) " Vous n'avez pas de piles de rechange. Vous feriez mieux de tout remballer."; if (fresh_batteries in VendingMachine && Dead_End_14 has visited) " Vous feriez mieux de tout remballer, @`a moins de trouver des piles neuves. Je crois me souvenir qu'il y a un distributeur dans le labyrinthe. Amenez quelques pi@`eces de monnaie avec vous."; if (fresh_batteries notin VendingMachine or player or location) " Vous feriez mieux de retourner chercher ces piles."; new_line; rtrue; } } ], before [; Examine: print "C'est une @'etincelante lampe de cuivre"; if (self hasnt on) ". Elle n'est pas allum@'ee en ce moment."; if (self.power_remaining < 30) ", brillant faiblement."; ", brillamment allum@'ee."; Burn: <>; Rub: "Frotter la lampe @'electrique n'est pas particuli@`erement gratifiant. De toute fa@ccon, rien d'excitant ne se produit."; SwitchOn: if (self.power_remaining <= 0) "Malheureusement, les piles semblent @^etre mortes."; Receive: if (noun == old_batteries) "Ces piles sont mortes ; elles ne donnent plus rien du tout."; if (noun == fresh_batteries) { self.replace_batteries(); rtrue; } "La seule chose que vous devriez r@'eussir @`a mettre dans la lampe, c'est une paire de piles neuves."; ], after [; SwitchOn: give self light; StartDaemon(self); SwitchOff: give self ~light; ], has switchable female; Object -> bottle "petite bouteille" with name "petite" "bouteille", initial "Il y a ici une bouteille vide.", before [; LetGo: if (noun in bottle) "Vous en avez d@'ej@`a (dans la bouteille)."; Receive: if (noun == stream or Oil) <>; else "La bouteille est cens@'ee contenir uniquement des liquides."; Fill: if (child(bottle) ~= nothing) "La bouteille est d@'ej@`a pleine."; if (stream in location || Spring in location) { move water_in_the_bottle to bottle; "La bouteille est @`a pr@'esent pleine d'eau."; } if (Oil in location) { move oil_in_the_bottle to bottle; "La bouteille est @`a pr@'esent pleine d'huile."; } "Il n'y a pas ici de quoi remplir la bouteille."; Empty: if (child(bottle) == nothing) "La bouteille est d@'ej@`a vide !"; remove child(bottle); "Maintenant votre bouteille est vide et le sol mouill@'e."; ], has container open female; Object water_in_the_bottle "eau" ! embouteill@'ee" inutile gr@^ace @`a la routine ! de la ligne 54 with name "embouteillee" "eau" "h2o" "ordinaire", article "de l'", before [; Drink: remove water_in_the_bottle; <>; ], description "C'est de l'eau ordinaire, @`a premi@`ere vue.", has female; Object oil_in_the_bottle "huile" ! embouteill@'ee" inutile gr@^ace @`a la routine ! de la ligne 54 with name "petrole" "huile" "embouteillee" "lubrifiant" "graisse" "ordinaire", article "de l'", before [; Drink: <>; ], description "Cela me semble @^etre de l'huile ordinaire.", has female; AboveGround In_Forest_1 "Dans la for@^et" with description "Vous @^etes dans une for@^et clairsem@'ee, au bord d'une vall@'ee profonde.", e_to In_A_Valley, d_to In_A_Valley, n_to In_Forest_1, w_to In_Forest_1, s_to In_Forest_1, initial [; if (random(2)==1) PlayerTo(In_Forest_2,1); ]; AboveGround In_Forest_2 "Dans la for@^et" with description "Vous @^etes dans une for@^et clairsem@'ee, pr@`es d'une vall@'ee et d'une route.", n_to At_End_Of_Road, e_to In_A_Valley, w_to In_A_Valley, d_to In_A_Valley, s_to In_Forest_1; AboveGround In_A_Valley "Dans une vall@'ee" with description "Vous @^etes dans une vall@'ee dans la for@^et, pr@`es d'un ruisseau culbutant dans un lit rocailleux.", n_to At_End_Of_Road, e_to In_Forest_1, w_to In_Forest_1, u_to In_Forest_1, s_to At_Slit_In_Streambed, d_to At_Slit_In_Streambed, name "vallee"; Object -> "lit" with name "lit" "rocailleux" "rocher" has scenery; AboveGround At_Slit_In_Streambed "Une fissure" with description "A vos pieds, le ruisseau tout entier s'engouffre dans une fissure de quelques centim@`etres de large. Plus au sud, le lit est @`a sec.", n_to In_A_Valley, e_to In_Forest_1, w_to In_Forest_1, s_to Outside_Grate, d_to "Vous ne pouvez pas passer par une fissure aussi @'etroite !", in_to "Vous ne pouvez pas passer par une fissure aussi @'etroite !"; Object -> "fissure @'etroite" with name "fissure" "etroite" "quelques" "centimetres" "cm" "large", description "C'est une fissure dans le rocher de quelques centim@`etres de large, par laquelle le ruisseau s'@'ecoule.", before [; Enter: "Vous ne pouvez pas passer par une fissure aussi @'etroite !"; ], has female scenery; AboveGround Outside_Grate "Devant la grille" with description "Vous @^etes dans une d@'epression de 6 m@`etres de profondeur dont le fond est recouvert de boue s@'ech@'ee. Fix@'ee dans la terre, une solide grille d'acier est mont@'ee dans du b@'eton. Un lit @`a sec m@`ene @`a la d@'epression.", e_to In_Forest_1, w_to In_Forest_1, s_to In_Forest_1, n_to At_Slit_In_Streambed, d_to [; if (Grate hasnt locked && Grate hasnt open) { print "(vous ouvrez d'abord la grille)^"; give Grate open; } return Grate; ]; Object -> "d@'epression de 6 m@`etres de profondeur" with description "Vous vous trouvez dedans.", name "depression" "boue" "six" "metres" "6" "m", has female scenery; Object -> Grate "grille d'acier" with name "grille" "porte" "portail" "metal" "acier", description "Cela ressemble @`a une grille ordinaire mont@'ee dans du b@'eton.", with_key set_of_keys, door_dir [; if (location==Below_The_Grate) return u_to; return d_to; ], door_to [; if (location==Below_The_Grate) return Outside_Grate; return Below_The_Grate; ], describe [; if (self has open) "^La grille est ouverte."; if (self hasnt locked) "^La grille est ferm@'ee, mais pas @`a clef."; rtrue; ], found_in Below_The_Grate Outside_Grate has static door openable lockable locked female; ! ---------------------------------------------------------------------------- ! Facilis descensus Averno... ! ---------------------------------------------------------------------------- Object Below_The_Grate "Sous la grille" with description "Vous @^etes dans une petite chambre, au-dessous d'une grille d'acier d'un m@`etre de c@^ot@'e. Un passage bas pav@'e de pierres rondes m@`ene @`a l'int@'erieur, vers l'ouest.", w_to In_Cobble_Crawl, u_to Grate has light; Object "pierres rondes" with description "Ce sont des pav@'es ronds ordinaires.", name "ronds" "paves" "pave" "pierres" "pierre", found_in In_Cobble_Crawl In_Debris_Room Below_The_Grate has female pluralname scenery multitude; Object In_Cobble_Crawl "Dans le passage pav@'e" with description "Vous rampez sur des pierres rondes dans un passage bas. Il y a une faible lueur @`a l'extr@'emit@'e est du passage.", e_to Below_The_Grate, w_to In_Debris_Room has light; Object -> wicker_cage "petite cage" with description "C'est une petite cage.", initial "Il y a ici une petite cage abandonn@'ee.", name "cage" "petite", after [; Open: if (little_bird notin self) rfalse; print "(lib@'erant le petit oiseau)^"; <>; ], has container open openable transparent female; Object In_Debris_Room "Dans la salle des d@'ebris" with description "Vous @^etes dans une salle remplie de d@'ebris apport@'es par les eaux depuis la surface. Le passage bas et profond tapiss@'e de pierres rondes est bouch@'e par la boue et les d@'ebris, mais un canyon peu praticable continue en montant vers l'ouest.^^ Une note sur le mur dit, ~Mot magique XYZZY.~", e_to In_Cobble_Crawl, u_to In_Awkward_Sloping_E_W_Canyon, w_to In_Awkward_Sloping_E_W_Canyon, before [; Xyzzy: PlayerTo(Inside_Building); rtrue; ], has nodwarf; Object -> "d@'ebris" with description "Beurk.", name "debris" "choses" "boue" has pluralname scenery; Object -> "note" with description "La note dit ~Mot magique XYZZY~.", name "note" has female scenery; Object -> black_rod "baguette noire avec une @'etoile rouill@'ee @`a un bout" with description "C'est une baguette noire d'un m@`etre de long avec une @'etoile rouill@'ee @`a un bout.", initial "Une baguette noire d'un m@`etre de long avec une @'etoile rouill@'ee @`a un bout tra@^ine par ici.", name "fer" "etoile" "noire" "rouillee" "baguette" "un" "1" "metre" "m", before [; Wave: if (location==West_Side_Of_Fissure or On_East_Bank_Of_Fissure) { if (caves_closed) "Etrange. Rien ne se passe."; if (CrystalBridge notin nothing) { remove CrystalBridge; give CrystalBridge absent; West_Side_Of_Fissure.e_to = 0; On_East_Bank_Of_Fissure.w_to = 0; "Le pont de cristal s'est @'evanoui !"; } else { move CrystalBridge to location; give CrystalBridge ~absent; West_Side_Of_Fissure.e_to = CrystalBridge; On_East_Bank_Of_Fissure.w_to = CrystalBridge; "Un pont de cristal enjambe @`a pr@'esent la fissure."; } } "Rien ne se produit."; ] has female; Object In_Awkward_Sloping_E_W_Canyon "Canyon est-ouest en pente" with description "Vous @^etes dans un canyon est-ouest malais@'e et en pente.", d_to In_Debris_Room, e_to In_Debris_Room, u_to In_Bird_Chamber, w_to In_Bird_Chamber has nodwarf; ! ---------------------------------------------------------------------------- ! The little bird in its natural habitat ! ---------------------------------------------------------------------------- Object In_Bird_Chamber "Chambre @`a la rivi@`ere orange" with description "Vous @^etes dans une chambre splendide de neuf m@`etres de haut. Les murs sont des rivi@`eres gel@'ees de pierre orange. Un canyon malais@'e et un bon passage m@`enent @`a l'est et @`a l'ouest de la chambre.", e_to In_Awkward_Sloping_E_W_Canyon, w_to At_Top_Of_Small_Pit has nodwarf; Object -> little_bird "petit oiseau" with name "joyeux" "triste" "petit" "oiseau", initial "Un petit oiseau joyeux est assis ici, il chante.", before [; Examine: if (self in wicker_cage) "Le petit oiseau a l'air triste dans la cage."; "Le petit oiseau chante joyeusement, assis ici."; Insert: if (second==wicker_cage) <>; else "Ne mettez pas le pauvre oiseau dans ", (the) second, " !"; Drop, Remove: if (self in wicker_cage) { print "(l'oiseau est lib@'er@'e de la cage.)^^"; <>; } Take, Catch: if (self in wicker_cage) "Vous avez d@'ej@`a le petit oiseau. Si vous le sortez de la cage il risque de s'envoler et de vous @'echapper."; if (wicker_cage notin player) "Vous pouvez attraper l'oiseau, mais vous ne pouvez pas le transporter."; if (black_rod in player) "L'oiseau n'avait pas peur quand vous @^etes entr@'e, mais lorsque vous approchez il devient inquiet et vous ne pouvez pas l'attraper."; move self to wicker_cage; give wicker_cage ~open; "Vous capturez l'oiseau et l'enfermez dans la cage."; Release: if (self notin wicker_cage) "L'oiseau n'est pas en cage en ce moment."; give wicker_cage open; move self to location; if (Snake in location) { remove Snake; "Le petit oiseau attaque le serpent vert, et en un @'eclair stup@'efiant le fait fuir."; } if (Dragon in location) { remove self; "Le petit oiseau attaque le dragon vert, et en un @'eclair stup@'efiant est r@'eduit en cendres. Les cendres sont emport@'ees par le vent."; } "Le petit oiseau s'envole, libre."; ], life [; Give: "Il n'a pas faim. (Il est fait pour les fjords.) Cependant, je le soup@cconne de pr@'ef@'erer des graines pour oiseaux."; Order, Ask, Answer: "Cui ! Cui !"; Attack: if (self in wicker_cage) "Oh, laissez donc le pauvre oiseau triste tout seul."; remove self; "Le petit oiseau est mort, @`a pr@'esent. Son corps dispara@^it."; ], has animate; Object At_Top_Of_Small_Pit "En haut d'une petite fosse" with description "A vos pieds se trouve une petite fosse d'o@`u @'emanent des lambeaux de brume blanche. Un passage @`a l'ouest finit ici, seule une petite fissure continue.^^ Des marches de pierre grossi@`eres descendent dans la fosse.", e_to In_Bird_Chamber, w_to "La fissure est de loin trop petite pour vous permettre de poursuivre.", d_to [; if (large_gold_nugget in player) { deadflag=1; "Vous @^etes en bas de la fosse avec le cou bris@'e."; } return In_Hall_Of_Mists; ], before [; Enter: if (noun==PitCrack) "La l@'ezarde est beaucoup trop petite pour vous permettre de poursuivre."; ], has nodwarf; Object -> StepsDown "marches grossi@`eres de pierre" with description "Les marches grossi@`eres de pierre descendent dans la fosse.", name "escalier" "marches" "grossieres" "pierre", has female pluralname scenery multitude; Object -> "petite fosse" with description "La fosse exhale des traces de brume blanche.", name "fosse" "petite" has female scenery; Object -> PitCrack "fissure" with description "La fissure est tr@`es petite -- beaucoup trop petite pour vous permettre de poursuivre.", name "fissure" "petite" has female scenery; Object "brume" with description "La brume est de la vapeur blanche, habituellement d'eau, vue de temps en temps dans les cavernes. Elle peut @^etre trouv@'ee partout mais est fr@'equemment le signe d'une fosse profonde menant jusqu'@`a de l'eau.", name "brume" "vapeur" "esprits" "blanche", found_in At_Top_Of_Small_Pit In_Hall_Of_Mists On_East_Bank_Of_Fissure At_Window_On_Pit_1 At_West_End_Of_Hall_Of_Mists In_Misty_Cavern In_Mirror_Canyon At_Reservoir At_Window_On_Pit_2 On_Sw_Side_Of_Chasm has female scenery; ! ---------------------------------------------------------------------------- ! The caves open up: The Hall of Mists ! ---------------------------------------------------------------------------- Object In_Hall_Of_Mists "Dans le hall des brumes" with initial [; if (self has general) rfalse; score=score+25; give self general; ], description "Vous @^etes @`a un bout d'un vaste hall s'@'etirant @`a perte de vue vers l'ouest. Il y a des ouvertures de chaque c@^ot@'e. A proximit@'e, un vaste escalier de pierre m@`ene plus bas. Le hall est rempli de lambeaux de brume blanche qui vont et viennent en oscillant presque comme s'ils @'etaient en vie. Un vent froid remonte de l'escalier. Il y a un passage en haut d'un d@^ome derri@`ere vous.^^ Des marches grossi@`eres en pierre montent vers le d@^ome.", s_to In_Nugget_Of_Gold_Room, w_to On_East_Bank_Of_Fissure, d_to In_Hall_Of_Mt_King, n_to In_Hall_Of_Mt_King, u_to [; if (large_gold_nugget in player) "Vous ne pouvez gravir le d@^ome."; return At_Top_Of_Small_Pit; ]; Object -> "vaste escalier de pierre" with description "L'escalier m@`ene plus bas.", name "escalier" "vaste" "pierre" has scenery; Object -> "marches grossi@`eres de pierre" with description "Les marches grossi@`eres de pierre montent vers le d@^ome.", name "escalier" "marches" "grossieres" "pierre", has female pluralname scenery multitude; Object -> "d@^ome" with name "dome", before [; Examine: if (large_gold_nugget in player) "Je ne suis pas s@^ur que vous serez capable de le gravir avec ce que vous portez."; "On dirait que vous pourriez le gravir."; Climb: MovePlayer(u_obj); rtrue; ], has scenery; Object In_Nugget_Of_Gold_Room "Chambre basse" with description "C'est une chambre basse avec une note crue sur le mur :^^ ~Vous ne l'emporterez pas en haut des marches~.", n_to In_Hall_Of_Mists; Object -> "note" with description "La note dit, ~Vous ne l'emporterez pas en haut des marches~.", name "note" "crue" has female scenery; Treasure -> large_gold_nugget "grosse p@'epite d'or" with description "C'est une grosse et @'etincelante p@'epite d'or !", initial "Il y a une grosse et @'etincelante p@'epite d'or ici !", name "or" "pepite" "grosse" "lourde", has female; Class FissureRoom with before [; Jump: if (CrystalBridge hasnt absent) "Je vous sugg@`ere, sauf votre respect, d'emprunter le pont au lieu de sauter."; deadflag=1; "Vous n'avez pas r@'eussi."; ], d_to "La crevasse est trop terrifiante !"; FissureRoom On_East_Bank_Of_Fissure "Sur la rive est de la crevasse" with description "Vous @^etes sur la rive est d'une crevasse tranchant net le hall en deux. La brume est assez @'epaisse ici, et la crevasse est trop large pour sauter.", e_to In_Hall_Of_Mists, w_to "La crevasse est trop large."; FissureRoom West_Side_Of_Fissure "C@^ot@'e ouest de la crevasse" with description "Vous @^etes du c@^ot@'e ouest de la crevasse dans le hall des brumes.", w_to At_West_End_Of_Hall_Of_Mists, e_to "La crevasse est trop large.", n_to At_West_End_Of_Hall_Of_Mists, before [; Go: if (location==West_Side_Of_Fissure && noun==n_obj) print "Vous avez ramp@'e @`a travers un passage large et tr@`es bas, parall@`ele au hall des brumes et au nord de celui-ci.^"; ]; Treasure -> "diamants" with article "des", !*! probablement inutile description "Il ont l'air d'@^etre de la plus haute qualit@'e !", initial "Il y a des diamants ici !", name "diamant" "diamants" "plusieurs" "haute" "qualite" has pluralname multitude; Object CrystalBridge "pont de cristal" with initial "Un pont de cristal enjambe @`a pr@'esent la crevasse.", description "Il enjambe la crevasse, vous fournissant ainsi une voie pour traverser.", door_dir [; if (location==West_Side_Of_Fissure) return e_to; return w_to; ], door_to [; if (location==West_Side_Of_Fissure) return On_East_Bank_Of_Fissure; return West_Side_Of_Fissure; ], name "cristal" "pont", found_in On_East_Bank_Of_Fissure West_Side_Of_Fissure has static door open absent; Object "crevasse" with name "large" "crevasse", description "La crevasse a l'air beaucoup trop large pour sauter.", found_in On_East_Bank_Of_Fissure West_Side_Of_Fissure has female scenery; Object At_West_End_Of_Hall_Of_Mists "A l'extr@'emit@'e ouest du hall des brumes" with description "Vous @^etes @`a l'extr@'emit@'e ouest du hall des brumes. Un boyau bas et large continue vers l'ouest et un autre va au nord. Au sud il y a un petit passage @`a un m@`etre quatre-vingt au-dessus du sol.", s_to Alike_Maze_1, u_to Alike_Maze_1, e_to West_Side_Of_Fissure, w_to At_East_End_Of_Long_Hall, n_to West_Side_Of_Fissure, before [; Go: if (noun==n_obj) print "Vous avez ramp@'e @`a travers un passage large et tr@`es bas, parall@`ele au hall des brumes et au nord de celui-ci.^"; ]; ! ---------------------------------------------------------------------------- ! Long Hall to the west of the Hall of Mists ! ---------------------------------------------------------------------------- Object At_East_End_Of_Long_Hall "A l'extr@'emit@'e est d'un long hall" with description "Vous @^etes @`a l'extr@'emit@'e est d'un hall tr@`es long apparemment d@'epourvu de chambres sur les c@^ot@'es. A l'est monte un passage large et tr@`es bas. Au nord un trou rond de 60 cm de diam@`etre descend.", e_to At_West_End_Of_Hall_Of_Mists, u_to At_West_End_Of_Hall_Of_Mists, w_to At_West_End_Of_Long_Hall, n_to Crossover, d_to Crossover; Object At_West_End_Of_Long_Hall "A l'extr@'emit@'e ouest d'un long hall" with description "Vous @^etes @`a l'extr@'emit@'e ouest d'un tr@`es long hall sans grande particularit@'e. Le hall rejoint un @'etroit passage nord-sud.", e_to At_East_End_Of_Long_Hall, s_to Different_Maze_1, n_to Crossover; Object Crossover "Croisement nord-sud et est-ouest" with description "Vous @^etes au croisement d'un passage haut nord-sud et d'un passage bas est-ouest.", w_to At_East_End_Of_Long_Hall, n_to Dead_End_7, e_to In_West_Side_Chamber, s_to At_West_End_Of_Long_Hall; Object -> "croisement" with description "Vous en savez autant que moi en ce moment.", name "croisement" has scenery; ! ---------------------------------------------------------------------------- ! Many Dead Ends will be needed for the maze below, so define a class: ! ---------------------------------------------------------------------------- Class DeadEndRoom with short_name "Cul-de-sac", description "Vous avez atteint un cul-de-sac.", cant_go "Vous allez devoir rebrousser chemin."; DeadEndRoom Dead_End_7 with s_to Crossover, out_to Crossover; ! ---------------------------------------------------------------------------- ! The Hall of the Mountain King and side chambers ! ---------------------------------------------------------------------------- Object In_Hall_Of_Mt_King "Le hall du roi de la montagne" with description "Vous @^etes dans le hall du roi de la montagne, comportant des issues dans toutes les directions.", cant_go "Eh bien, @`a vrai dire, peut-@^etre pas exactement toutes les directions.", u_to In_Hall_Of_Mists, e_to In_Hall_Of_Mists, n_to Low_N_S_Passage, s_to In_South_Side_Chamber, w_to In_West_Side_Chamber, sw_to In_Secret_E_W_Canyon, before [; Go: if (Snake in self && (noun == n_obj or s_obj or w_obj || (noun == sw_obj && random(100) <= 35))) "Le serpent vous emp@^eche de passer."; ]; Object -> Snake "serpent" with description "Je ne l'emb@^eterais pas si j'@'etais vous.", initial "Un @'enorme et f@'eroce serpent vert barre le chemin !", name "serpent" "cobra" "enorme" "feroce" "vert" "grand" "venimeux" "gros" "tueur", life [; Order, Ask, Answer: "Ssss !"; ThrowAt: if (noun==axe) <>; <>; Give: if (noun==little_bird) { remove little_bird; "Le serpent a d@'evor@'e @`a pr@'esent votre oiseau."; } "Il n'y a rien ici qu'il souhaite manger (sauf peut-@^etre vous)."; Attack: "Attaquer le serpent est @`a la fois infructueux et tr@`es dangereux."; Take: deadflag=1; "C'est lui qui vous prend. Glurp !"; ], has animate; Object Low_N_S_Passage "Passage bas nord-sud." with description "Vous @^etes dans un passage bas nord-sud pr@`es d'un trou dans le sol. Le trou descend vers un passage est-ouest.", s_to In_Hall_Of_Mt_King, d_to In_Dirty_Passage, n_to At_Y2; Treasure -> "barres d'argent" with description "Cela vaut certainement une petite fortune !", initial "Il y a des barres d'argent ici !", article "des", !*! probablement inutile name "argent" "barres", has female pluralname; Object In_South_Side_Chamber "Dans la chambre sud" with description "Vous @^etes dans la chambre sud.", n_to In_Hall_Of_Mt_King; Treasure -> "bijoux pr@'ecieux" with description "Ils sont tous assez exquis !", initial "Il y a des bijoux pr@'ecieux ici !", article "des", !*! probablement inutile name "bijou" "bijoux" "precieux" "exquis", has pluralname; Object In_West_Side_Chamber "Dans la chambre ouest" with description "Vous @^etes dans la chambre ouest du hall du roi de la montagne. Ici un passage continue en montant vers l'ouest.", w_to Crossover, u_to Crossover, e_to In_Hall_Of_Mt_King; Treasure -> rare_coins "pi@`eces rares" with description "Un r@^eve de numismate !", initial "Il y a beaucoup de pi@`eces ici !", article "beaucoup de", name "pieces" "rares" "piece", has female pluralname multitude; ! ---------------------------------------------------------------------------- ! The Y2 Rock Room and environs, slightly below ! ---------------------------------------------------------------------------- Object At_Y2 "Au ~Y2~" with description "Vous @^etes dans une grande salle, avec un passage au sud, un passage @`a l'ouest, et un mur de roche bris@'ee @`a l'est. Il y a un grand ~Y2~ sur un rocher au centre de la salle.", after [; Look: if (random(100)<=25) print "^Une voix creuse dit, ~Plugh.~^"; ], before [; Plugh: PlayerTo(Inside_Building); rtrue; Plover: if (In_Plover_Room hasnt visited) rfalse; if (egg_sized_emerald in player) { move egg_sized_emerald to In_Plover_Room; score = score - 5; } PlayerTo(In_Plover_Room); rtrue; ], s_to Low_N_S_Passage, e_to Jumble_Of_Rock, w_to At_Window_On_Pit_1; Object -> "rocher ~Y2~" with description "Il y a un grand ~Y2~ peint sur le rocher.", name "rocher" "y2" has scenery supporter; Object Jumble_Of_Rock "Fouillis de rochers" with description "Vous @^etes dans un fouillis de rochers, avec des fissures partout.", d_to At_Y2, u_to In_Hall_Of_Mists; Object At_Window_On_Pit_1 "A une fen@^etre donnant sur une fosse" with description "Vous @^etes @`a une fen@^etre donnant sur une fosse gigantesque, qui s'@'etend au-dessus @`a perte de vue. Le sol est indistinctement visible plus de 15 m@`etres en-dessous. Des traces de brume blanche couvrent le sol de la fosse, devenant plus @'epaisse @`a droite. Des marques dans la poussi@`ere autour de la fen@^etre sembleraient indiquer que quelqu'un a @'et@'e ici r@'ecemment. Directement en face de vous de l'autre c@^ot@'e de la fosse et @`a 7,5 m@`etres de distance il y a une fen@^etre similaire donnant sur une chambre @'eclair@'ee. On peut voir une silhouette vague en train de vous scruter.", before [; WaveHands: "La silhouette indistincte vous fait signe @'egalement !"; ], cant_go "Le seul passage est celui du retour @`a l'est vers Y2.", e_to At_Y2; Class PitScenery with found_in At_Window_On_Pit_1 At_Window_On_Pit_2, has scenery; PitScenery "fen@^etre" with description "Cela ressemble @`a une fen@^etre habituelle.", name "fenetre" "basse", has openable female; PitScenery "fosse gigantesque" with description "Elle est si profonde que vous pouvez @`a peine distinguer le sol en-dessous, et le haut n'est pas visible du tout.", name "fosse" "profonde" "grande" "gigantesque", has female; PitScenery "marques dans la poussi@`ere" with description "De mani@`ere @'evidente vous n'@^etes pas seul ici.", name "marques" "poussiere" has female pluralname multitude; PitScenery "silhouette indistincte" with description "La silhouette indistincte semble @^etre en train d'essayer d'attirer votre attention.", name "silhouette" "ombre" "personne" "individu" "vague" "indistincte" "mysterieuse", has female; Object In_Dirty_Passage "Passage sale" with description "Vous @^etes dans un passage sale et ab@^im@'e. A l'est se trouve un boyau, @`a l'ouest un grand passage, et au-dessus de vous un trou vers un autre passage.", e_to On_Brink_Of_Pit, u_to Low_N_S_Passage, w_to In_Dusty_Rock_Room; Object On_Brink_Of_Pit "Au bord d'une fosse" with description "Vous @^etes au bord d'une petite fosse propre et praticable. Un boyau m@`ene @`a l'ouest.", w_to In_Dirty_Passage, d_to In_Pit, in_to In_Pit; Object -> "petite fosse" with description "On dirait que vous pourriez descendre dedans.", name "fosse" "petite" "propre" "praticable", before [; Climb, Enter: MovePlayer(d_obj); rtrue; ], has female scenery; Object In_Pit "Dans la fosse" with description "Vous @^etes au fond d'une petite fosse avec un petit ruisseau, qui entre et sort @`a travers de minuscules fentes.", u_to On_Brink_Of_Pit, d_to "Vous ne pouvez pas passer par les fentes minuscules !" has nodwarf; Object -> "fentes minuscules" with description "Les fentes forment un motif complexe dans la roche.", name "fente" "fentes" "minuscule" "minuscules" has scenery female pluralname multitude; Object In_Dusty_Rock_Room "Dans la chambre aux rochers poussi@'ereux" with description "Vous @^etes dans une grande salle pleine de rochers poussi@'ereux. Il y a un grand trou dans le sol, des fissures partout, et un passage menant @`a l'est.", e_to In_Dirty_Passage, d_to At_Complex_Junction; Object -> "rochers poussi@'ereux" with description "Ce sont seulement des rochers. (Poussi@'ereux, ceci dit.)", name "rochers" "pierres" "roches" "pierre" "rocher" "roche" "poussiereux" "poussiereuse" "poussiereuses" "sale" "sales" has scenery pluralname multitude; ! ---------------------------------------------------------------------------- ! A maze of twisty little passages, all alike... ! ---------------------------------------------------------------------------- Class MazeRoom with short_name "Labyrinthe", description "Vous @^etes dans un labyrinthe compos@'e de petits passages en zigzag, tous identiques.", out_to "Plus facile @`a dire qu'@`a faire."; MazeRoom Alike_Maze_1 with u_to At_West_End_Of_Hall_Of_Mists, n_to Alike_Maze_1, e_to Alike_Maze_2, s_to Alike_Maze_4, w_to Alike_Maze_11; MazeRoom Alike_Maze_2 with w_to Alike_Maze_1, s_to Alike_Maze_3, e_to Alike_Maze_4; MazeRoom Alike_Maze_3 with e_to Alike_Maze_2, d_to Dead_End_3, s_to Alike_Maze_6, n_to Dead_End_13; MazeRoom Alike_Maze_4 with w_to Alike_Maze_1, n_to Alike_Maze_2, e_to Dead_End_1, s_to Dead_End_2, u_to Alike_Maze_14, d_to Alike_Maze_14; MazeRoom Alike_Maze_5 with e_to Alike_Maze_6, w_to Alike_Maze_7; MazeRoom Alike_Maze_6 with e_to Alike_Maze_3, w_to Alike_Maze_5, d_to Alike_Maze_7, s_to Alike_Maze_8; DeadEndRoom Dead_End_1 with w_to Alike_Maze_4, out_to Alike_Maze_4; DeadEndRoom Dead_End_2 with w_to Alike_Maze_4, out_to Alike_Maze_4; DeadEndRoom Dead_End_3 with u_to Alike_Maze_3, out_to Alike_Maze_3; MazeRoom Alike_Maze_7 with w_to Alike_Maze_5, u_to Alike_Maze_6, e_to Alike_Maze_8, s_to Alike_Maze_9; MazeRoom Alike_Maze_8 with w_to Alike_Maze_6, e_to Alike_Maze_7, s_to Alike_Maze_8, u_to Alike_Maze_9, n_to Alike_Maze_10, d_to Dead_End_12; MazeRoom Alike_Maze_9 with w_to Alike_Maze_7, n_to Alike_Maze_8, s_to Dead_End_4; DeadEndRoom Dead_End_4 with w_to Alike_Maze_9, out_to Alike_Maze_9; MazeRoom Alike_Maze_10 with w_to Alike_Maze_8, n_to Alike_Maze_10, d_to Dead_End_5, e_to At_Brink_Of_Pit; DeadEndRoom Dead_End_5 with u_to Alike_Maze_10, out_to Alike_Maze_10; Object At_Brink_Of_Pit "Au bord d'une fosse" with description "Vous @^etes au bord d'une fosse de neuf m@`etres avec une colonne massive et orange contre l'un des murs. Vous pourriez descendre par l@`a mais vous risquez de ne pouvoir remonter. Le labyrinthe continue @`a ce niveau.", d_to In_Bird_Chamber, w_to Alike_Maze_10, s_to Dead_End_6, n_to Alike_Maze_12, e_to Alike_Maze_13; Object -> "colonne orange et massive" with description "On dirait que vous pourriez descendre par l@`a.", name "colonne" "massive" "orange" "grosse" "enorme", before [; Climb: MovePlayer(d_obj); rtrue; ], has female scenery; Object -> "fosse" with description "Vous devrez descendre pour en savoir plus...", name "fosse" "neuf" "9" "metres" "m", before [; Climb: MovePlayer(d_obj); rtrue; ], has female scenery; DeadEndRoom Dead_End_6 with e_to At_Brink_Of_Pit, out_to At_Brink_Of_Pit; ! ---------------------------------------------------------------------------- ! A line of three vital junctions, east to west ! ---------------------------------------------------------------------------- Object At_Complex_Junction "A une jonction complexe" with description "Vous @^etes @`a une jonction complexe. Un passage tr@`es bas venu du nord rejoint un boyau plus haut venu de l'est pour pour donner un passage o@`u l'on peut marcher vers l'ouest. Il y a aussi une grande salle au-dessus. L'air est humide ici.", u_to In_Dusty_Rock_Room, w_to In_Bedquilt, n_to In_Shell_Room, e_to In_Anteroom; Object In_Bedquilt "Dans l'@'edredon" with description "Vous @^etes dans l'@'edredon, un long passage est-ouest avec des trous partout. Pour explorer au hasard choisissez nord, sud, haut, ou bas.", e_to At_Complex_Junction, w_to In_Swiss_Cheese_Room, s_to In_Slab_Room, u_to In_Dusty_Rock_Room, n_to At_Junction_Of_Three, d_to In_Anteroom, before [ destiny; Go: if (noun==s_obj or d_obj && random(100)<=80) destiny=1; if (noun==u_obj && random(100)<=80) destiny=1; if (noun==u_obj && random(100)<=50) destiny=In_Secret_N_S_Canyon_1; if (noun==n_obj && random(100)<=60) destiny=1; if (noun==n_obj && random(100)<=75) destiny=In_Large_Low_Room; if (destiny==1) "Vous avez ramp@'e dans des petits trous environnants et vous vous @^etes retrouv@'e @`a nouveau dans le passage principal."; if (destiny==0) rfalse; PlayerTo(destiny); rtrue; ]; Object In_Swiss_Cheese_Room "Dans la chambre-gruy@`ere" with description "Vous @^etes dans une salle dont les murs ressemblent @`a du gruy@`ere. Des passages @'evidents m@`enent @`a l'ouest, @`a l'est, au nord-est, et au nord-ouest. Une partie de la salle est occup@'ee par un grand bloc de roche m@`ere.", w_to At_East_End_Of_Twopit_Room, s_to In_Tall_E_W_Canyon, ne_to In_Bedquilt, nw_to In_Oriental_Room, e_to In_Soft_Room, before [; Go: if ((noun==s_obj && random(100) <= 80) || (noun==nw_obj && random(100) <= 50)) "Vous avez ramp@'e dans des petits trous environnants et vous vous @^etes retrouv@'e @`a nouveau dans le passage principal."; ]; Object -> "bloc de roche m@`ere" with description "C'est juste un @'enorme bloc.", name "bloc" "roche" "mere" "grand" "enorme", before [; LookUnder, Push, Pull, Take: "Vous plaisantez s@^urement."; ], has scenery; ! ---------------------------------------------------------------------------- ! The Twopit Room area ! ---------------------------------------------------------------------------- ! Possible heights for the plant: ! ---------------------------------------------------------------------------- Constant TINY_P = 0; Constant TALL_P = 1; Constant HUGE_P = 2; Object At_West_End_Of_Twopit_Room "A l'extr@'emit@'e ouest de la salle aux deux puits" with description "Vous @^etes @`a l'extr@'emit@'e ouest de la salle aux deux puits. Il y a un grand trou dans le mur au-dessus du puits @`a ce bout de la salle.", e_to At_East_End_Of_Twopit_Room, w_to In_Slab_Room, d_to In_West_Pit, u_to "C'est trop loin au-dessus pour que vous puissiez l'atteindre.", before [; Enter: if (noun==HoleAbovePit_1) "C'est trop loin au-dessus pour que vous puissiez l'atteindre."; ]; Object PlantStickingUp "plant de haricot" with found_in At_West_End_Of_Twopit_Room At_East_End_Of_Twopit_Room, name "plant" "haricot" "geant" "minuscule" "petit" "murmurant" "quatre" "metres" "haut" "braillant", describe [; if (Plant.height == TALL_P) "Le haut d'un plant de haricot de quatre m@`etres de haut pointe hors du puits ouest."; "Un plant de haricot g@'eant est en train de pousser hors du puits ouest pour atteindre le trou."; ], before [; Examine: RunRoutines(self,describe); rtrue; Climb: if (Plant.height==HUGE_P) <>; ], has absent static; Object HoleAbovePit_1 "trou au-dessus du puits" with description "Le trou est dans le mur au-dessus du puits de ce c@^ot@'e de la salle.", name "trou" "grand" "au" "-dessus", found_in In_West_Pit At_West_End_Of_Twopit_Room has scenery; Object In_West_Pit "Dans le puits ouest" with description "Vous @^etes au fond du puits ouest dans la salle aux deux puits. Il y a un grand trou dans le mur @`a environ huit m@`etres au-dessus de vous.", before [; Climb: if (noun==Plant) rfalse; if (Plant.height == TINY_P) "Il n'y a rien ici sur quoi grimper. Utilisez ~haut~ ou ~sortir~ pour quitter le puits."; ], u_to At_West_End_Of_Twopit_Room has nodwarf; Object -> Plant "plant" with height TINY_P, name "plant" "haricot" "plante" "geant" "minuscule" "petit" "murmurant" "quatre" "metres" "haut" "braillant", describe [; switch(self.height) { TINY_P: "Il y a un plant minuscule dans le puits, murmurant ~De l'eau, de l'eau, ...~"; TALL_P: "Il y a un plant de haricot de quatre m@`etres s'@'etirant vers le haut hors du puits, braillant ~De l'eau !! De l'eau !!~"; HUGE_P: "Il y a un plant gigantesque de haricot s'@'etirant vers le haut jusqu'au trou."; } ], before [; Climb: switch(self.height) { TINY_P: "C'est juste une petite plante !"; TALL_P: print "Vous avez grimp@'e le long de la plante et @^etes ainsi sorti du puits.^"; PlayerTo(At_West_End_Of_Twopit_Room); rtrue; HUGE_P: print "Vous vous hissez en haut du plant et vous vous faufilez par le trou, en haut.^"; PlayerTo(In_Narrow_Corridor); rtrue; } Take: "La plante a des racines exceptionnellement profondes et ne peut pas @^etre arrach@'ee."; Water: if (bottle notin player) "Vous n'avez rien pour arroser la plante."; switch(child(bottle)) { nothing: "La bouteille est vide."; oil_in_the_bottle: remove oil_in_the_bottle; "La plante, indign@'ee, agite ses feuilles pour enlever l'huile et demande, ~De l'eau ?~"; } remove water_in_the_bottle; switch((self.height)++) { TINY_P: print "La plante jaillit selon une croissance furieuse en quelques secondes.^^"; give PlantStickingUp ~absent; TALL_P: print "La plante grandit explosivement, remplissant presque le bas du puits.^^"; HUGE_P: print "Vous avez noy@'e la plante ! Elle se ratatine ! Elle, elle...^^"; give PlantStickingUp absent; remove PlantStickingUp; self.height = TINY_P; } <>; Oil: <>; Examine: self.describe(); rtrue; ]; Object At_East_End_Of_Twopit_Room "A l'extr@'emit@'e est de la salle aux deux puits" with description "Vous @^etes @`a l'extr@'emit@'e est de la salle aux deux puits. Le sol est ici encombr@'e de fines dalles de pierre, qui rendent facile la descente dans le puits. Il y a un chemin ici passant devant les puits pour relier des passages venant de l'est et de l'ouest. Il y a des trous au-dessus, mais le seul trou suffisamment grand, situ@'e exactement au-dessus du puits ouest, est inaccessible.", e_to In_Swiss_Cheese_Room, w_to At_West_End_Of_Twopit_Room, d_to In_East_Pit; Object -> "fines dalles de pierre" with description "Elles forment presque des marches naturelles descendant dans le puits.", name "dalles" "dalle" "pierres" "escalier" "marches" "fines" "pierre", before [; LookUnder, Push, Pull, Take: "C'est s@^ur, vous plaisantez."; ], has scenery multitude pluralname female; Object In_East_Pit "Dans le puits est" with description "Vous @^etes au fond du puits est dans la salle aux deux puits. Il y a une petite mare de p@'etrole dans un coin du puits.", u_to At_East_End_Of_Twopit_Room has nodwarf; Object -> Oil "mare de p@'etrole" with name "mare" "petrole" "huile" "petite", description "C'est du p@'etrole, ou si vous pr@'ef@'erez de l'huile min@'erale.", before [; Drink: "Certainement pas."; Take: if (bottle notin player) "Vous n'avez rien o@`u mettre le p@'etrole."; <>; Insert: if (second == bottle) <>; "Vous n'avez rien o@`u mettre le p@'etrole."; ], has scenery female; Object "trou au-dessus du puits" with description "Le trou est dans le mur au-dessus de vous.", name "trou" "grand" "au" "-dessus" "puits", found_in In_East_Pit At_East_End_Of_Twopit_Room has scenery; Object In_Slab_Room "Chambre dall@'ee" with description "Vous @^etes dans une chambre circulaire grande et basse dont le sol est une immense dalle tomb@'ee du plafond (chambre dall@'ee). A l'est et @`a l'ouest il y avait de grands passages, mais ils sont maintenant remplis de rochers. Des passages petits et bas vont au nord et au sud, et celui qui m@`ene au sud tourne rapidement vers l'ouest autour des rochers.", s_to At_West_End_Of_Twopit_Room, u_to In_Secret_N_S_Canyon_0, n_to In_Bedquilt; Object -> "dalle" with description "C'est maintenant le sol, ici.", name "dalle" "immense", before [; LookUnder, Push, Pull, Take: "C'est s@^ur, vous plaisantez."; ], has scenery female; Object -> "rochers" with description "Ce sont simplement des rochers ordinaires.", name "rochers" "rocher" "pierres" has scenery pluralname multitude; ! ---------------------------------------------------------------------------- ! A small network of Canyons, mainly Secret ! ---------------------------------------------------------------------------- Object In_Secret_N_S_Canyon_0 "Canyon secret nord-sud" with description "Vous @^etes dans un canyon secret nord-sud au-dessus d'une grande salle.", d_to In_Slab_Room, s_to In_Secret_Canyon, n_to In_Mirror_Canyon, before [; Go: if (noun==s_obj) canyon_from=self; ]; Object In_Secret_N_S_Canyon_1 "Canyon secret nord-sud" with description "Vous @^etes dans un canyon secret nord-sud au-dessus d'un passage assez grand.", n_to At_Junction_Of_Three, d_to In_Bedquilt, s_to Atop_Stalactite; Object At_Junction_Of_Three "Jonction de trois canyons secrets" with description "Vous @^etes dans un canyon secret @`a la jonction de trois canyons, qui obliquent vers le nord, le sud, et le sud-est. Celui du nord est aussi haut que les deux autres r@'eunis.", se_to In_Bedquilt, s_to In_Secret_N_S_Canyon_1, n_to At_Window_On_Pit_2; Object In_Large_Low_Room "Grande chambre basse" with description "Vous @^etes dans une grande chambre basse. Des boyaux m@`enent au nord, au sud-est et au sud-ouest.", sw_to In_Sloping_Corridor, se_to In_Oriental_Room, n_to Dead_End_Crawl; Object Dead_End_Crawl "Boyau en cul-de-sac" with description "C'est un boyau en cul-de-sac.", s_to In_Large_Low_Room, out_to In_Large_Low_Room; Object In_Secret_E_W_Canyon "Canyon secret est-ouest au-dessus d'un canyon @'etroit" with description "Vous @^etes dans un canyon secret qui ici va d'est en ouest. Il croise un canyon tr@`es @'etroit 4,5 m@`etres en dessous. Si vous descendez vous risquez de ne pouvoir remonter ensuite.", e_to In_Hall_Of_Mt_King, w_to In_Secret_Canyon, before [; Go: if (noun==w_obj) canyon_from=self; ], d_to In_N_S_Canyon; Object In_N_S_Canyon "Canyon nord-sud" with description "Vous @^etes @`a un endroit large dans un canyon nord-sud tr@`es @'etroit.", s_to Canyon_Dead_End, n_to In_Tall_E_W_Canyon; Object Canyon_Dead_End "Impasse dans le canyon" with description "Le canyon devient ici trop @'etroit pour aller plus loin vers le sud.", n_to In_N_S_Canyon; Object In_Tall_E_W_Canyon "Dans un grand canyon est-ouest" with description "Vous @^etes dans un grand canyon est-ouest. Un boyau @'etroit et bas va au nord et semble s'ouvrir au bout d'un m@`etre.", e_to In_N_S_Canyon, w_to Dead_End_8, n_to In_Swiss_Cheese_Room; Object Atop_Stalactite "En haut d'une stalactite" with description "Une grande stalactite s'@'etend depuis la vo@^ute et rejoint presque le sol en-dessous. Vous pourriez descendre par l@`a, et sauter jusqu'au sol, mais en faisant cela vous seriez incapable de l'atteindre pour remonter en arri@`ere.", n_to In_Secret_N_S_Canyon_1, d_to [; if (random(100) <= 40) return Alike_Maze_6; if (random(100) <= 50) return Alike_Maze_9; return Alike_Maze_4; ], before [; Jump, Climb: <>; ]; Object -> "stalactite" with description "Vous pourriez probablement descendre par l@`a, mais en faisant cela vous pouvez renoncer @`a revenir en arri@`ere.", name "stalactite" "stalagmite" "stalagtite" "grande", before [; LookUnder, Push, Take: "Vous plaisantez..."; ], has scenery female; ! ---------------------------------------------------------------------------- ! Here be dragons ! ---------------------------------------------------------------------------- Object In_Secret_Canyon "Canyon secret" with description "Vous @^etes dans un canyon secret qui donne vers le nord et l'est.", e_to [; if (canyon_from == In_Secret_E_W_Canyon) return canyon_from; if (Dragon in location) "Le dragon a l'air assez m@'echant. Vous feriez mieux de ne pas essayer de passer."; return In_Secret_E_W_Canyon; ], n_to [; if (canyon_from == In_Secret_N_S_Canyon_0) return canyon_from; if (Dragon in location) "Le dragon a l'air assez m@'echant. Vous feriez mieux de ne pas essayer de passer."; return In_Secret_N_S_Canyon_0; ], out_to [; return canyon_from; ], before [; if (action==##Yes && Dragon has general) { remove Dragon; move DragonCorpse to location; give Dragon ~general; "F@'elicitations ! Vous venez de vaincre un dragon @`a mains nues ! (Incroyable, n'est-ce pas ?)"; } if (action==##No && Dragon has general) { give Dragon ~general; "I should think not."; } give Dragon ~general; ]; Object -> Dragon "dragon" with description "Je ne l'emb@^eterais pas si j'@'etais vous.", name "dragon" "monstre" "bete" "lezard" "enorme" "vert" "feroce" "ecailleux" "geant", initial "Un @'enorme dragon vert et f@'eroce barre la route !", life [; Attack: give Dragon general; "Avec quoi ? Vos petits poings ?"; Give: "Le dragon est implacable."; ThrowAt: if (noun~=axe) "Vous feriez probablement mieux d'utiliser vos poings plut@^ot que @cca !"; move axe to location; "La hache rebondit, inoffensive, sur les @'ecailles @'epaisses du dragon."; ], has animate; Treasure -> "tapis persan" with name "tapis" "persan" "fin", depositpoints 14, before [; Take: if (Dragon in location) "Vous allez d'abord avoir besoin de faire d@'eplacer le dragon !"; ], describe [; if (Dragon in location) "Le dragon est @'etendu sur le tapis persan !"; "Le tapis persan est @'etendu sur le sol."; ]; Object DragonCorpse "cadavre du dragon" with initial "Le cadavre d'un @'enorme dragon vert est allong@'e sur le c@^ot@'e.", name "cadavre" "mort" "dragon" "corps", before [; Attack: "Vous avez d@'ej@`a fait assez de d@'eg@^ats comme @cca !"; ], has static; ! ---------------------------------------------------------------------------- ! And more of the Alike Maze ! ---------------------------------------------------------------------------- DeadEndRoom Dead_End_8 with description "Le canyon continue sous une masse de rochers -- cul-de-sac.", s_to In_Tall_E_W_Canyon, out_to In_Tall_E_W_Canyon; MazeRoom Alike_Maze_11 with n_to Alike_Maze_1, w_to Alike_Maze_11, s_to Alike_Maze_11, e_to Dead_End_9, ne_to Dead_End_10; DeadEndRoom Dead_End_9 with w_to Alike_Maze_11, out_to Alike_Maze_11; DeadEndRoom Dead_End_10 with s_to Alike_Maze_3, out_to Alike_Maze_3; MazeRoom Alike_Maze_12 with s_to At_Brink_Of_Pit, e_to Alike_Maze_13, w_to Dead_End_11; MazeRoom Alike_Maze_13 with n_to At_Brink_Of_Pit, w_to Alike_Maze_12, nw_to Dead_End_13; DeadEndRoom Dead_End_11 with e_to Alike_Maze_12, out_to Alike_Maze_12; DeadEndRoom Dead_End_12 with u_to Alike_Maze_8, out_to Alike_Maze_8; MazeRoom Alike_Maze_14 with u_to Alike_Maze_4, d_to Alike_Maze_4; DeadEndRoom Dead_End_13 with se_to Alike_Maze_13, out_to Alike_Maze_13, description "Ceci est l'impasse du pirate.", initial [; StopDaemon(Pirate); if (treasure_chest in self && treasure_chest hasnt moved) "Vous avez trouv@'e le coffre au tr@'esor du pirate !"; ], has nodwarf; Treasure -> treasure_chest "coffre au tr@'esor" with depositpoints 12, description "C'est le coffre au tr@'esor du pirate, rempli de richesses de toutes sortes !", initial "Le coffre au tr@'esor du pirate est ici !", name "coffre" "boite" "coffret" "tresor" "richesses" "pirate"; ! ---------------------------------------------------------------------------- ! Above the beanstalk: the Giant Room and the Waterfall ! ---------------------------------------------------------------------------- Object In_Narrow_Corridor "Dans un @'etroit corridor" with description "Vous @^etes dans un corridor long et @'etroit s'@'etirant @`a perte de vue vers l'ouest. A l'extr@'emit@'e est se trouve un trou au travers duquel vous pouvez voir une profusion de feuilles.", d_to In_West_Pit, w_to In_Giant_Room, e_to In_West_Pit, before [; Jump: deadflag=1; "Vous tombez et vous brisez le cou !"; ]; Object -> "feuilles" with description "Les feuilles semblent appartenir au plant de haricot par lequel vous @^etes arriv@'e ici.", article "des",!*! article probablement inutile name "feuille" "feuilles" "plant" "plante" "arbre" "haricot" "profusion", before [; Count: "69105."; ! (I thank Rene Schnoor for counting them) ], has female pluralname scenery; Object At_Steep_Incline "Pente raide au-dessus de la grande salle" with description "Vous @^etes au sommet d'une pente raide au-dessus d'une grande salle. Vous pourriez descendre, mais vous ne pourriez alors remonter. Il y a un passage revenant au nord.", n_to In_Cavern_With_Waterfall, d_to In_Large_Low_Room; Object In_Giant_Room "Salle g@'eante" with description "Vous @^etes dans la salle g@'eante. Le plafond ici est trop haut pour que votre lampe vous le montre. Des passages caverneux m@`enent @`a l'est, au nord, et au sud. Sur le mur ouest est gribouill@'ee l'inscription, ~Fee fie foe foo~ [sic].", s_to In_Narrow_Corridor, e_to At_Recent_Cave_In, n_to In_Immense_N_S_Passage; Object -> "inscription gribouill@'ee" with description "Elle dit, ~Fee fie foe foo [sic].~", name "inscription" "ecriture" "gribouillage" "gribouillee" has female scenery; Treasure -> golden_eggs "nid d'oeufs en or" with depositpoints 14, description "Le nid est rempli de beaux oeufs en or !", initial "Il y a un grand nid ici, plein d'oeufs en or !", name "oeuf" "oeufs" "nid" "or" "beau", has multitude; Object At_Recent_Cave_In "Effondrement r@'ecent" with description "Le passage est ici bloqu@'e par un effondrement r@'ecent.", s_to In_Giant_Room; Object In_Immense_N_S_Passage "Immense passage nord-sud" with description "Vous @^etes @`a un bout d'un immense passage nord-sud.", s_to In_Giant_Room, n_to [; if (RustyDoor has locked) <>; if (RustyDoor hasnt open) { give RustyDoor open; print "(vous ouvrez d'abord la porte, @`a grand-peine)^"; } return RustyDoor; ]; Object -> RustyDoor "porte rouill@'ee" with description "C'est juste une grande porte de fer.", name "porte" "charniere" "charnieres" "massive" "rouillee" "fer", when_closed "La voie nord est barr@'ee par une massive porte de fer, rouill@'ee.", when_open "La voie nord passe par une massive porte de fer, rouill@'ee.", door_to In_Cavern_With_Waterfall, door_dir n_to, before [; Open: if (RustyDoor has locked) "Les charni@`eres sont assez profond@'ement rouill@'ees et ne bougent pas."; Close: if (RustyDoor has open) "Avec tout le mal que cela vous a pris pour ouvrir la porte, je ne vous conseille pas de la refermer."; "Pas de probl@`eme pour @cca -- elle l'est d@'ej@`a."; Oil: if (bottle in player && oil_in_the_bottle in bottle) { remove oil_in_the_bottle; give RustyDoor ~locked openable; "L'huile a graiss@'e les charni@`eres de telle mani@`ere que la porte peut @`a nouveau bouger, bien que cela n@'ecessite un certain effort."; } else "Vous n'avez rien pour la lubrifier."; Water: if (bottle in player && water_in_the_bottle in bottle) { remove water_in_the_bottle; give RustyDoor locked ~open; "Les charni@`eres sont assez profond@'ement rouill@'ees @`a pr@'esent et ne peuvent pas bouger."; } else "Vous n'avez rien pour l'arroser."; ], after [; Open: "La porte s'ouvre en grin@ccant dans un nuage de rouille."; ], has female static door locked; Object In_Cavern_With_Waterfall "Dans une caverne avec une ch@^ute d'eau" with description "Vous @^etes dans une magnifique caverne avec un torrent, qui tombe en cascade en une ch@^ute @'etincellante pour plonger dans un tourbillon rugissant qui dispara@^it par un trou dans le sol. Des passages m@`enent au sud et @`a l'ouest.", s_to In_Immense_N_S_Passage, w_to At_Steep_Incline; Object -> "ch@^ute d'eau" with description "Je ne descendrais pas l@`a-dedans dans un tonneau !", name "chute" "eau" "tourbillon" "etincelant" has female scenery; Treasure -> trident "trident incrust@'e" with description "Le trident est couvert de fabuleux joyaux !", initial "Il y a un trident incrust@'e de diamants ici !", name "trident" "joyaux" "diamants" "incruste" "fabuleux", depositpoints 14; ! ---------------------------------------------------------------------------- ! The caves around Bedquilt ! ---------------------------------------------------------------------------- Object In_Soft_Room "Dans la chambre douce" with description "Vous @^etes dans la chambre douce. Les murs sont couverts de lourds rideaux, le sol d'un tapis @'epais. De la mousse couvre le plafond.", w_to In_Swiss_Cheese_Room; Object -> "tapis" with description "Le tapis est assez somptueux.", name "tapis" "poils" "lourd" "epais" has scenery; Object -> "rideaux" with description "Ils semblent amortir tr@`es bien les bruits.", name "rideau" "rideaux" "lourd" "epais", before [; Take: "Vous n'allez pas vous mettre @`a tout d@'echirer !"; LookUnder, Search: "Vous ne trouvez rien d'excitant derri@`ere les rideaux."; ], has pluralname scenery; Object -> "mousse" with description "Cela ressemble juste @`a votre typique mousse de tous les jours.", name "mousse" "typique", before [; Take: "Elle s'effrite dans vos mains."; ], has female scenery edible; Object -> velvet_pillow "oreiller de velours" with description "C'est juste un petit oreiller de velours.", initial "Un petit oreiller de velours est pos@'e sur le sol.", name "oreiller" "velours" "petit"; Object In_Oriental_Room "Salle orientale" with description "Ceci est la salle orientale. D'anciennes et orientales peintures rupestres couvrent les murs. Un passage en pente douce monte vers le nord, un autre passage m@`ene au sud-est, et un boyau tr@`es bas m@`ene @`a l'ouest.", w_to In_Large_Low_Room, se_to In_Swiss_Cheese_Room, u_to In_Misty_Cavern, n_to In_Misty_Cavern; Object -> "dessins anciens et orientaux" with description "Ils semblent d@'epeindre des gens et des animaux.", name "peintures" "dessins" "art" "rupestres" "anciens" "orientaux" "orientales" has pluralname scenery multitude; Treasure -> ming_vase "vase ming" with description "C'est un d@'elicat et pr@'ecieux vase ming !", name "vase" "ming" "delicat", depositpoints 14, after [; Drop: if (velvet_pillow in location) { print "(venant reposer, d@'elicatement, sur le coussin de velours)^"; rfalse; } remove ming_vase; move shards to location; "Le vase ming tombe et se brise avec un bruit d@'elicat."; ], before [; Attack: remove ming_vase; move shards to location; "Vous avez pris le vase et l'avez pr@'ecipit@'e d@'elicatement sur le sol."; Receive: "Le vase est trop fragile pour contenir quelque chose."; ]; Object shards "des tessons de potterie sans valeur" with initial "Le sol est encombr@'e de tessons de potterie sans valeur.", description "Ils semblent @^etre les restes de ce qui @'etait auparavant un beau vase. Je pense que quelque imb@'ecile a d@^u le laisser tomber.", name "poterie" "eclats" "tessons" "restes" "vase" "sansvaleur", has pluralname multitude; Object In_Misty_Cavern "Caverne brumeuse" with description "Vous suivez un large passage autour du bord ext@'erieur d'une grande caverne. Loin au-dessous, @`a travers une @'epaisse brume blanche, d'@'etranges bruits d'eau peuvent @^etre entendus. La brume s'@'el@`eve par une fissure dans le plafond. Le sentier sort par le sud et l'ouest.", s_to In_Oriental_Room, w_to In_Alcove; Object -> "fissure" with description "Vous ne pouvez pas vraiment vous approcher assez pour l'examiner.", name "fissure" "plafond" has female scenery; ! ---------------------------------------------------------------------------- ! Plovers and pyramids ! ---------------------------------------------------------------------------- Object In_Alcove "Alc@^ove" with description "Vous @^etes dans une alc@^ove. Un petit sentier au nord-ouest semble s'@'elargir apr@`es une courte distance. Un tunnel extr@^emement @'etroit m@`ene @`a l'est. On dirait un pressoir tr@`es serr@'e. Une lumi@`ere inqui@'etante peut @^etre vue @`a l'autre bout.", nw_to In_Misty_Cavern, e_to [ j; j=children(player); if (j==0 || (j==1 && egg_sized_emerald in player)) return In_Plover_Room; "Quelque chose que vous portez ne passe pas par le tunnel avec vous. Vous feriez mieux de faire l'inventaire de ce que vous avez et de laisser quelque chose."; ]; Object In_Plover_Room "La chambre du pluvier [NDT: plover en anglais]" with description "Vous @^etes dans une petite chambre @'eclair@'ee par une sinistre lumi@`ere verte. Un tunnel extr@^emement @'etroit sort vers l'ouest. Un corridor obscur m@`ene au nord-est.", ne_to In_Dark_Room, w_to [ j; j=children(player); if (j==0 || (j==1 && egg_sized_emerald in player)) return In_Alcove; "Quelque chose que vous portez ne veut pas passer par le tunnel avec vous. Vous devriez faire un inventaire et poser quelque chose."; ], before [; Plover: if (egg_sized_emerald in player) move egg_sized_emerald to In_Plover_Room; PlayerTo(At_Y2); rtrue; Go: if (noun==out_obj) <>; ], has light; Treasure -> egg_sized_emerald "@'emeraude de la taille d'un oeuf de pluvier" with depositpoints 14, article "une", !*! article probablement inutile description "A propos, les oeufs de pluvier sont assez gros.", initial "Il y a ici une @'emeraude de la taille d'un oeuf de pluvier !", name "emeraude" "oeuf" "taille" "plover" "pluvier", has female; Object In_Dark_Room "La chambre obscure" with description "Vous @^etes dans la chambre obscure. Un corridor menant au sud est la seule sortie.", s_to In_Plover_Room has nodwarf; Object -> "plaque de pierre" with initial "Une massive plaque de pierre incrust@'ee dans le mur : ~F@'elicitations pour avoir apport@'e de la lumi@`ere dans la chambre obscure !~", name "plaque" "massive" "pierre" has static female; Treasure -> "pyramide en platine" with initial "Il y a ici une pyramide en platine, de 20 cm de c@^ot@'e !", depositpoints 14, description "La pyramide en platine a 20 cm de c@^ot@'e !", name "platine" "pyramide" "pyramidale", has female; ! ---------------------------------------------------------------------------- ! North of the complex junction: a long up-down corridor ! ---------------------------------------------------------------------------- Object In_Arched_Hall "Hall vo@^ut@'e" with description "Vous @^etes dans un hall vo@^ut@'e. Un passage de corail continuait jadis depuis ici en montant vers l'est, mais il est maintenant bloqu@'e par des d@'ebris. L'air sent l'eau de mer.", d_to In_Shell_Room; Object In_Shell_Room "Salle au coquillage" with description "Vous @^etes dans une grande salle creus@'ee dans la roche s@'edimentaire. Le sol et les murs sont encombr@'es de morceaux de coquillages incrust@'es dans la pierre. Un passage peu profond continue plus bas, et un autre un peu plus raide m@`ene en haut. Un passage bas o@`u vous devrez ramper vient du sud.", u_to In_Arched_Hall, d_to In_Ragged_Corridor, s_to [; if (giant_bivalve in player) { if (giant_bivalve has open) "Vous ne pouvez pas faire passer cette hu@^itre d'un m@`etre cinquante par l@`a !"; else "Vous ne pouvez pas faire passer cette palourde d'un m@`etre cinquante par l@`a !"; } return At_Complex_Junction; ]; Object -> giant_bivalve "palourde g@'eante" with name "geante" "palourde" "huitre" "bivalve", describe [; if (self has general) "Il y a ici une @'enorme hu@^itre dont la coquille est @'etroitement ferm@'ee."; "Il y a ici une @'enorme palourde dont la coquille est @'etroitement ferm@'ee."; ], before [; Examine: if (location==At_Ne_End or At_Sw_End) "Int@'eressant. On dirait qu'il y a quelque chose d'@'ecrit sous l'hu@^itre :^^ ~Ce lieu a quelque chose d'@'etrange, l'un des mots que j'ai toujours connus a maintenant un nouvel effet.~"; "Un bivalve g@'eant de quelque esp@`ece."; Open: "Vous n'@^etes pas assez fort pour ouvrir la palourde avec vos seules mains."; Unlock: if (second~=trident) print (The) trident, " n'est pas assez fort pour ouvrir la palourde."; if (self has general) "L'hu@^itre s'ouvre en grin@ccant, ne r@'ev@'elant rien d'autre qu'une hu@^itre @`a l'int@'erieur. Elle se referme d'un claquement sec."; give self general; move pearl to In_A_Cul_De_Sac; "Une perle brillante tombe de la palourde et va rouler dans un coin. Mon Dieu, cela devait @^etre en fait une hu@^itre. (Je n'ai jamais @'et@'e tr@`es bon pour identifier les bivalves.) Quoiqu'il en soit, elle s'est @`a nouveau referm@'ee."; Attack: "La coquille est tr@`es solide et insensible aux attaques."; ], has female; Treasure pearl "perle brillante" with description "Elle est incroyablement grosse !", initial "Dans un coin se trouve une perle brillante !", name "perle" "brillante" "incroyable" "incroyablement" "grosse", depositpoints 14, has female; Object In_Ragged_Corridor "Un couloir d@'elabr@'e" with description "Vous @^etes dans un long couloir en escalier avec des murs nettement d@'elabr@'es.", u_to In_Shell_Room, d_to In_A_Cul_De_Sac; Object In_A_Cul_De_Sac "Cul-de-sac" with description "Vous @^etes dans un cul-de-sac d'environ deux m@`etres cinquante de large.", u_to In_Ragged_Corridor, out_to In_Ragged_Corridor; ! ---------------------------------------------------------------------------- ! Witt's End: Cave under construction ! ---------------------------------------------------------------------------- Object In_Anteroom "Dans l'antichambre" with description "Vous @^etes dans une antichambre menant @`a un grand passage @`a l'est. D'autres plus petits vont vers l'ouest et le haut. Les restes d'un creusement r@'ecent sont @'evidents.", u_to At_Complex_Junction, w_to In_Bedquilt, e_to At_Witts_End; Object -> "signe" with initial "Un signe en plein ciel dit ~Caverne en construction au-del@`a de ce point. Vous continuez @`a vos risques et p@'erils. [Compagnie de Construction Woffortz]~", name "signe" "woffortz" "compagnie" "construction", before [; Take: "C'est suspendu loin au-dessus de votre t@^ete."; ], has static; Object -> "num@'eros r@'ecents de ~Spelunker Today~" with name "magazines" "magazine" "numero" "numeros" "revue" "revues" "spelunker" "today", initial "Il y a ici quelques num@'eros r@'ecents du magazine ~Spelunker Today~.", description "J'ai bien peur que ces magazines ne soient @'ecrits en langage nain.", article "quelques", after [; Take: if (location==At_Witts_End) score--; Drop: if (location==At_Witts_End) { score++; "Vous @^etes vraiment au bout de vos forces."; } ], has multitude; Object At_Witts_End "Au bout de Woffortz" with description "Vous @^etes au bout de Woffortz. Des passages partent dans *toutes* les directions.", w_to "Vous avez ramp@'e un moment dans des trous @'etroits et vous avez trouv@'e votre chemin bloqu@'e par un @'eboulement r@'ecent. Vous @^etes @`a pr@'esent de retour dans le passage principal.", before [; Go: if (noun~=w_obj && random(100)<=95) "Vous avez ramp@'e un moment dans des trous @'etroits et vous vous @^etes retrouv@'e dans le passage principal."; PlayerTo(In_Anteroom); rtrue; ]; ! ---------------------------------------------------------------------------- ! North of the secret canyons, on the other side of the pit ! ---------------------------------------------------------------------------- Object In_Mirror_Canyon "Dans le canyon au miroir" with description "Vous @^etes dans un canyon nord-sud d'environ 8 m@`etres de large. Le sol est couvert de brume blanche suintant depuis le nord. Les murs continuent jusqu'@`a plus de 30 m@`etres. Suspendu @`a quelque point non visible loin au-dessus de vous, un @'enorme miroir @`a deux faces est parall@`ele @`a et @`a mi-chemin entre les murs du canyon.^^ Une petite fen@^etre peut @^etre vue dans chaque mur, quelques 15 m@`etres plus haut.", s_to In_Secret_N_S_Canyon_0, n_to At_Reservoir; Object -> "miroir suspendu" with description "Le miroir est manifestement fourni @`a l'usage des nains qui, comme vous le savez, sont extr@^emement vaniteux.", name "miroir" "massif" "enorme" "pendu" "suspendu" "deux" "faces", initial "Le miroir est manifestement fourni @`a l'usage des nains qui, comme vous le savez, sont extr@^emement vaniteux.", before [; Attack, Remove: "Vous ne pouvez pas l'atteindre d'ici."; ], has static; Object At_Window_On_Pit_2 "A une fen@^etre donnant sur une fosse" with description "Vous @^etes @`a une fen@^etre donnant sur une fosse gigantesque, qui s'@'etend au-dessus @`a perte de vue. Le sol est indistinctement visible plus de 15 m@`etres en-dessous. Des traces de brume blanche couvrent le sol de la fosse, devenant plus @'epaisse @`a gauche. Des marques dans la poussi@`ere autour de la fen@^etre sembleraient indiquer que quelqu'un a @'et@'e ici r@'ecemment. Directement en face de vous de l'autre c@^ot@'e de la fosse et @`a 7,5 m@`etres de distance il y a une fen@^etre similaire donnant sur une chambre @'eclair@'ee. On peut voir une silhouette vague en train de vous scruter.", cant_go "Le seul passage retourne vers l'ouest jusqu'@`a la jonction.", w_to At_Junction_Of_Three, before [; Jump: deadflag=1; "Vous sautez et vous vous brisez le cou !"; WaveHands: "La silhouette vague vous fait @'egalement un signe !"; ]; Object At_Reservoir "Au r@'eservoir" with description "Vous @^etes au bord d'un grand r@'eservoir souterrain. Un nuage opaque de brume blanche remplit la pi@`ece et s'@'el@`eve rapidement. Le lac est aliment@'e par un ruisseau, qui tombe d'un trou dans le mur environ 3 m@`etres au-dessus et s'@'ecrase bruyamment dans l'eau quelque part dans la brume. Le seul passage repart vers le sud.", s_to In_Mirror_Canyon, out_to In_Mirror_Canyon, before [; Swim: "L'eau est glac@'ee, et vous seriez rapidement mort de froid."; ]; ! ---------------------------------------------------------------------------- ! The Chasm and the Troll Bridge ! ---------------------------------------------------------------------------- Object In_Sloping_Corridor "Couloir en pente" with description "Vous @^etes dans un long couloir en pente menant hors de vue dans les deux directions.", d_to In_Large_Low_Room, u_to On_Sw_Side_Of_Chasm, cant_go "Le couloir est en pente raide et m@`ene en haut ou en bas."; Object On_Sw_Side_Of_Chasm "Du c@^ot@'e sud-ouest de l'ab@^ime" with description "Vous @^etes d'un c@^ot@'e d'un grand, d'un profond ab@^ime. Une @'epaisse brume blanche venue d'en dessous obscurcit toute vue du c@^ot@'e @'eloign@'e. Un sentier sud-ouest m@`ene hors de l'ab@^ime dans un couloir sinueux.", ne_to CrossRicketyBridge, sw_to In_Sloping_Corridor, d_to In_Sloping_Corridor, cant_go "Le sentier serpente vers le sud-ouest.", before [; Jump: if (RicketyBridge in self) "Sauf votre respect, je vous sugg@`ere de traverser le pont plut@^ot que de sauter."; deadflag=1; "Vous n'avez pas r@'eussi."; ]; [ CrossRicketyBridge; if (Troll has general || Troll in nothing) { give Troll ~general; if (Bear has general) { remove Bear; remove self; give Wreckage ~absent; remove RicketyBridge; give RicketyBridge absent; StopDaemon(Bear); deadflag=1; "Au moment m@^eme o@`u vous atteignez l'autre c@^ot@'e, le pont se d@'eforme sous le poids de l'ours, qui @'etait encore en train de vous suivre. Vous cherchez d@'esesp@'er@'ement une prise, mais alors que le pont s'@'ecroule vous tr@'ebuchez et tombez dans l'ab@^ime."; } return RicketyBridge; } if (Troll in location) "Le troll refuse de vous laisser traverser."; move Troll to location; "Le troll sort de dessous le pont et bloque le passage."; ]; Object -> RicketyBridge "pont branlant" with description "Cela ressemble @`a un pont ordinaire, sauf qu'il est instable.", describe [; print "Un pont de bois branlant s'@'etend en travers de l'ab@^ime, et s'@'evanouit dans la brume.^^ Un signe post@'e sur le pont dit, ~ Stop ! Payez le troll ! ~^"; if (Troll notin location) "Il n'y a pas de troll en vue."; rtrue; ], name "pont" "branlant" "instable" "corde", door_dir [; if (location==On_Sw_Side_Of_Chasm) return ne_to; return sw_to; ], door_to [; if (location==On_Sw_Side_Of_Chasm) return On_Ne_Side_Of_Chasm; return On_Sw_Side_Of_Chasm; ], found_in On_Sw_Side_Of_Chasm On_Ne_Side_Of_Chasm has static door open; Object -> -> Troll "troll robuste" with description "Les trolls sont des parents proches des rochers et ont la peau aussi dure que celle d'un rhinoc@'eros.", initial "Un troll robuste se tient devant le pont et insiste pour que vous lui laissiez un tr@'esor avant de pouvoir traverser.", name "troll" "costaud" "robuste", life [; Attack: "Le troll se moque tout haut de votre pittoyable tentative de le blesser."; ThrowAt, Give: if (noun ofclass Treasure) { remove noun; move Troll to RicketyBridge; give Troll general; score=score-5; "Le troll attrape votre tr@'esor et s'enfuit hors de vue."; } if (noun==tasty_food) "La gloutonnerie n'est pas l'un des vices du troll. L'avarice, cependant, en est un."; "Le troll attrape prestement ", (the) noun, ", l'examine attentivement, et vous le relance, d@'eclarant, ~C'est du bel ouvrage, mais ce n'est pas assez pr@'ecieux.~"; Order: "Vous auriez de la chance."; Answer, Ask: "Les trolls ont peu de conversation."; ], has animate; Object Wreckage "d@'ecombres du pont" with initial "Les d@'ecombres du pont du troll (et un ours mort) peuvent @^etre vus au fond de l'ab@^ime.", name "decombres" "ruine" "pont" "mort" "ours", before [; "Les d@'ecombres sont trop loin en dessous."; ], found_in On_Sw_Side_Of_Chasm On_Ne_Side_Of_Chasm has pluralname static absent multitude; Object On_Ne_Side_Of_Chasm "Du c@^ot@'e nord-est de l'ab@^ime" with description "Vous @^etes du c@^ot@'e @'eloign@'e de l'ab@^ime. Un sentier nord-est m@`ene hors de l'ab@^ime de ce c@^ot@'e.", sw_to CrossRicketyBridge, ne_to In_Corridor, before [; Jump: if (RicketyBridge in self) "Sauf votre respect, je vous sugg@`ere de traverser le pont plut@^ot que de sauter."; deadflag=1; "Vous n'avez pas r@'eussi."; ], has nodwarf; Object In_Corridor "Dans le corridor" with description "Vous @^etes dans un long corridor est-ouest. Un faible grondement peut @^etre entendu au loin.", w_to On_Ne_Side_Of_Chasm, e_to At_Fork_In_Path has nodwarf; ! ---------------------------------------------------------------------------- ! The Volcano ! ---------------------------------------------------------------------------- Object At_Fork_In_Path "A une bifurcation du chemin" with description "Le chemin bifurque ici. La bifurcation de gauche m@`ene au nord-est. Un grondement sourd semble devenir plus fort dans cette direction. La bifurcation de droite m@`ene au sud-est et descend en pente douce. Le corridor principal vient de l'ouest.", w_to In_Corridor, ne_to At_Junction_With_Warm_Walls, se_to In_Limestone_Passage, d_to In_Limestone_Passage has nodwarf; Object At_Junction_With_Warm_Walls "A une jonction aux murs chauds" with description "Les murs sont assez chauds ici. Venu du nord peut @^etre entendu un grondement r@'egulier, si fort que la caverne toute enti@`ere semble trembler. Un autre passage m@`ene au sud, et un autre extr@^emement bas m@`ene @`a l'est.", s_to At_Fork_In_Path, n_to At_Breath_Taking_View, e_to In_Chamber_Of_Boulders has nodwarf; Object At_Breath_Taking_View "Une vue @`a couper le souffle" with description "Vous @^etes au bord d'une vue @`a couper le souffle. Loin en dessous de vous, un volcan en activit@'e, depuis lequel de grosses gouttes de lave en fusion surgissent pour redescendre en cascade dans les profondeurs. La roche rougeoyante emplit les parties les plus @'eloign@'ees de la caverne d'un @'eclat rouge sang, donnant @`a toute chose une apparence sinistre, macabre. L'air est empli d'@'etincelles vacillantes de cendre et d'une odeur forte de pierre @`a feu. Les murs sont chauds au toucher, et le grondement du volcan recouvre tous les autres bruits. Fix@'ees au plafond d@'echiquet@'e loin au-dessus de vous, des myriades de formations tourment@'ees compos@'ees de pur alb@^atre blanc diffusent la lumi@`ere trouble en de sinistres apparitions sur les murs. D'un c@^ot@'e une gorge encaiss@'ee est remplie par un chaos bizarre de roche tortur@'ee qui semble avoir @'et@'e fa@cconn@'ee par le diable en personne. Une immense rivi@`ere de feu sort avec fracas des profondeurs du volcan, continue en br@^ulant @`a travers la gorge, et plonge dans un gouffre sans fond loin sur votre gauche. A droite, un immense geyser de vapeur br@^ulante jaillit continuellement d'une @^ile aride au centre d'un lac sulfureux qui bouillonne, mena@ccant. Le mur loin @`a droite est enflamm@'e de sa propre incandescence, ce qui pr@^ete une splendeur infernale suppl@'ementaire @`a la sc@`ene d@'ej@`a diabolique. Un passage sombre et mena@ccant m@`ene au sud.", s_to At_Junction_With_Warm_Walls, out_to At_Junction_With_Warm_Walls, d_to "Ne soyez pas ridicule !", before [; Jump: <>; ], has light; Object -> "volcan en activit@'e" with description "De grosses gouttes de lave en fusion surgissent du volcan pour redescendre en cascade dans les profondeurs. La roche rougeoyante emplit les parties les plus @'eloign@'ees de la caverne d'un @'eclat rouge-sang, donnant @`a toute chose une apparence sinistre, macabre.", name "volcan" "roche" "activite" "rougeoyant" "sang" "rouge-sang" "rouge" "sinistre" "macabre" has scenery; Object -> "@'etincelles de cendre" with description "Les @'etincelles sont trop @'eloign@'ees de vous pour que vous puissiez les observer correctement.", name "etincelle" "etincelles" "cendre" "air" has female pluralname scenery multitude; Object -> "plafond d@'echiquet@'e" with description "Fix@'ees au plafond d@'echiquet@'e loin au-dessus de vous sont des myriades de formations tourment@'ees compos@'ees de pur alb@^atre blanc, qui diffuse la lumi@`ere trouble en de sinistres apparitions sur les murs.", name "plafond" "formations" "lumiere" "apparitions" "dechiquete" "tordues" "tourmentees" "trouble" "sinistres" has scenery; Object -> "gorge encaiss@'ee" with description "La gorge est emplie d'un bizarre chaos de roche tortur@'ee qui semble avoir @'et@'e travaill@'ee par le diable en personne.", name "gorge" "chaos" "roche" "profonde" "bizarre" "torturee" "encaissee" has female scenery; Object -> "rivi@`ere de feu" with description "La rivi@`ere de feu sort avec fracas des profondeurs du volcan, continue en br@^ulant @`a travers la gorge, et plonge dans un gouffre sans fond loin sur votre gauche.", name "riviere" "feu" "profondeur" "gouffre" "brulant" "sans" "fond" has female scenery; Object -> "immense geyser" with description "Le geyser de vapeur br@^ulante jaillit continuellement d'une @^ile aride au centre d'un lac sulfureux qui bouillonne, mena@ccant.", name "geyser" "vapeur" "ile" "lac" "immense" "brulante" "aride" "sulfureux" "bouillonnant" has scenery; Object In_Chamber_Of_Boulders "Dans la chambre aux gros rochers" with description "Vous @^etes dans une petite chambre remplie de gros rochers. Les murs sont tr@`es chauds, rendant l'air dans la salle presque suffocant de chaleur. La seule sortie est un boyau menant @`a l'ouest, par lequel vous parvient un grondement bas.", w_to At_Junction_With_Warm_Walls, out_to At_Junction_With_Warm_Walls has nodwarf; Object -> "rochers" with description "Ce sont des rochers ordinaires. Ils sont chauds.", name "rocher" "rochers" "gros" has pluralname scenery multitude; Treasure -> "@'epices rares" with name "epices" "epice" "rares" "exotique", depositpoints 14, article "une s@'election d'", before [; Smell, Examine: "Elles ont une odeur merveilleusement exotique !"; ], has pluralname female multitude; Object In_Limestone_Passage "Dans le passage calcaire" with description "Vous marchez le long d'un passage nord-sud en pente douce tapiss@'e de concr@'etions calcaires aux formes bizarres.", n_to At_Fork_In_Path, u_to At_Fork_In_Path, s_to In_Front_Of_Barren_Room, d_to In_Front_Of_Barren_Room has nodwarf; Object -> "concr@'etions calcaires" with description "De temps en temps une forme particuli@`erement @'etrange attire votre attention.", name "concretions" "formations" "forme" "formes" "calcaire" "calcaires" "bizarre" "bizarres" "etrange" has female pluralname scenery multitude; ! ---------------------------------------------------------------------------- ! If you go down to the woods today... ! ---------------------------------------------------------------------------- Object In_Front_Of_Barren_Room "Devant la chambre ass@'ech@'ee" with description "Vous @^etes @`a l'entr@'ee d'une grande chambre ass@'ech@'ee. Un panneau est accroch@'e au-dessus de l'entr@'ee : ~ Attention @`a l'ours ! ~", w_to In_Limestone_Passage, u_to In_Limestone_Passage, e_to In_Barren_Room, in_to In_Barren_Room has nodwarf; Object -> "panneau d'avertissement" with description "Sur le panneau est @'ecrit : ~ Attention @`a l'ours ! ~", name "panneau" "assechee" "chambre" "attention" has scenery; Object In_Barren_Room "Dans la chambre ass@'ech@'ee" with description "Vous @^etes dans une chambre ass@'ech@'ee. Le centre de la salle est compl@`etement vide @`a l'exception d'un peu de poussi@`ere. Des marques dans la poussi@`ere m@`enent @`a l'extr@'emit@'e de la chambre la plus @'eloign@'ee. La seule sortie est par l@`a o@`u vous @^etes arriv@'e.", w_to In_Front_Of_Barren_Room, out_to In_Front_Of_Barren_Room has nodwarf; Object -> "poussi@`ere" with description "Cela ressemble @`a de la poussi@`ere ordinaire.", name "poussiere" "marques" has female scenery; Object -> Bear "grand ours des cavernes" with following_you false, angry true, describe [; if (self.following_you) "Vous @^etes suivi par un tr@`es grand ours apprivois@'e."; if (self.angry) "Un f@'eroce ours des cavernes vous observe depuis l'autre extr@'emit@'e de la pi@`ece !"; if (location==In_Barren_Room) "Un gentil ours des cavernes est assis paisiblement dans un coin."; "Un ours @`a l'air satisfait vagabonde dans les environs."; ], name "ours" "grand" "feroce" "caverne", life [; Attack: if (axe in player) <>; if (self.angry == false) "L'ours est confus ; il veut seulement @^etre votre ami."; " Comment ? A mains nues ? Contre *ses* mains d'ours ??"; ThrowAt: if (noun~=axe) <>; if (self.angry == false) "L'ours est confus ; il veut seulement @^etre votre ami."; move axe to location; give axe general; "La hache rate sa cible et atterrit pr@`es de l'ours, o@`u vous ne pouvez pas la prendre."; Give: if (noun == tasty_food) { give axe ~general; remove tasty_food; self.angry = false; "L'ours engloutit avidement votre nourriture, apr@`es quoi il semble consid@'erablement se calmer et m@^eme devenir assez amical."; } if (self.angry == false) "L'ours ne semble pas tr@`es int@'eress@'e par votre offre."; "Oh-oh -- Votre offre ne fait que rendre l'ours plus en col@`ere !"; Order, Ask, Answer: "C'est un ours avec un tr@`es petit cerveau."; ], before [; Examine: print "L'ours est extr@^emement grand, "; if (self.angry == false) "mais para@^it amical."; "et semble assez f@'eroce !"; Take, Catch: if (self.angry) "Vous plaisantez !"; if (golden_chain has locked) "L'ours est toujours encha@^in@'e au mur."; self.following_you = true; StartDaemon(Bear); "Ok, l'ours vous suit, @`a pr@'esent."; Drop, Release: if (self.following_you == false) "Quoi ?"; self.following_you = false; StopDaemon(Bear); if (Troll in location) { remove Troll; "L'ours se dirige pesamment vers le troll qui pousse un cri per@ccant et s'enfuit @`a toute allure. L'ours abandonne vite la poursuite et revient tranquillement."; } "L'ours s'@'eloigne de vous en serpentant."; ], daemon [; if (location==thedark) rfalse; if (self in location) { if (location==At_Breath_Taking_View) "^L'ours rugit de plaisir."; rfalse; } move self to location; "^L'ours chemine pesamment derri@`ere vous."; ], has animate; Treasure -> golden_chain "cha@^ine en or" with depositpoints 14, describe [; if (self has locked) "L'ours est retenu par une solide cha@^ine en or."; "Une solide cha@^ine en or est @'etal@'ee sur le sol !"; ], description "La cha@^ine a d'@'epais maillons en or massif !", name "chaine" "maillons" "entraves" "massif" "or" "epais" "chaines", with_key set_of_keys, before [; Take: if (self has locked) { if (Bear.angry) "Elle est attach@'ee @`a l'ours f@'eroce !"; "Elle est attach@'ee @`a l'ours amical."; } Unlock: if (Bear.angry) "Il n'y a pas moyen d'@'eviter l'ours pour d@'everrouiller la cha@^ine, ce qui vaut probablement mieux."; Lock: if (self hasnt locked) "Le m@'ecanisme ne se referme plus."; ], after [; Unlock: "Vous d@'everrouillez la cha@^ine et lib@'erez l'ours apprivois@'e."; ], has female lockable locked; ! ---------------------------------------------------------------------------- ! The Different Maze ! ---------------------------------------------------------------------------- Class DiffMazeRoom with short_name "Labyrinthe"; DiffMazeRoom Different_Maze_1 with description "Vous @^etes dans un labyrinthe compos@'e de petits passages en zigzag, tous diff@'erents.", s_to Different_Maze_3, sw_to Different_Maze_4, ne_to Different_Maze_5, se_to Different_Maze_6, u_to Different_Maze_7, nw_to Different_Maze_8, e_to Different_Maze_9, w_to Different_Maze_10, n_to Different_Maze_11, d_to At_West_End_Of_Long_Hall; DiffMazeRoom Different_Maze_2 with description "Vous @^etes dans un petit labyrinthe compos@'e de passages zigzaguants, tous diff@'erents.", sw_to Different_Maze_3, n_to Different_Maze_4, e_to Different_Maze_5, nw_to Different_Maze_6, se_to Different_Maze_7, ne_to Different_Maze_8, w_to Different_Maze_9, d_to Different_Maze_10, u_to Different_Maze_11, s_to Dead_End_14; DiffMazeRoom Different_Maze_3 with description "Vous @^etes dans un labyrinthe compos@'e de petits passages zigzaguants, tous diff@'erents.", w_to Different_Maze_1, se_to Different_Maze_4, nw_to Different_Maze_5, sw_to Different_Maze_6, ne_to Different_Maze_7, u_to Different_Maze_8, d_to Different_Maze_9, n_to Different_Maze_10, s_to Different_Maze_11, e_to Different_Maze_2; DiffMazeRoom Different_Maze_4 with description "Vous @^etes dans un petit labyrinthe compos@'e de passages en zigzag, tous diff@'erents.", nw_to Different_Maze_1, u_to Different_Maze_3, n_to Different_Maze_5, s_to Different_Maze_6, w_to Different_Maze_7, sw_to Different_Maze_8, ne_to Different_Maze_9, e_to Different_Maze_10, d_to Different_Maze_11, se_to Different_Maze_2; DiffMazeRoom Different_Maze_5 with description "Vous @^etes dans un labyrinthe zigzaguant compos@'e de petits passages, tous diff@'erents.", u_to Different_Maze_1, d_to Different_Maze_3, w_to Different_Maze_4, ne_to Different_Maze_6, sw_to Different_Maze_7, e_to Different_Maze_8, n_to Different_Maze_9, nw_to Different_Maze_10, se_to Different_Maze_11, s_to Different_Maze_2; DiffMazeRoom Different_Maze_6 with description "Vous @^etes dans un petit labyrinthe zigzaguant compos@'e de passages, tous diff@'erents.", ne_to Different_Maze_1, n_to Different_Maze_3, nw_to Different_Maze_4, se_to Different_Maze_5, e_to Different_Maze_7, d_to Different_Maze_8, s_to Different_Maze_9, u_to Different_Maze_10, w_to Different_Maze_11, sw_to Different_Maze_2; DiffMazeRoom Different_Maze_7 with description "Vous @^etes dans un petit labyrinthe en zigzag compos@'e de passages, tous diff@'erents.", n_to Different_Maze_1, se_to Different_Maze_3, d_to Different_Maze_4, s_to Different_Maze_5, e_to Different_Maze_6, w_to Different_Maze_8, sw_to Different_Maze_9, ne_to Different_Maze_10, nw_to Different_Maze_11, u_to Different_Maze_2; DiffMazeRoom Different_Maze_8 with description "Vous @^etes dans un labyrinthe en zigzag compos@'e de petits passages, tous diff@'erents.", e_to Different_Maze_1, w_to Different_Maze_3, u_to Different_Maze_4, sw_to Different_Maze_5, d_to Different_Maze_6, s_to Different_Maze_7, nw_to Different_Maze_9, se_to Different_Maze_10, ne_to Different_Maze_11, n_to Different_Maze_2; DiffMazeRoom Different_Maze_9 with description "Vous @^etes dans un petit labyrinthe en zigzag compos@'e de passages, tous diff@'erents.", se_to Different_Maze_1, ne_to Different_Maze_3, s_to Different_Maze_4, d_to Different_Maze_5, u_to Different_Maze_6, nw_to Different_Maze_7, n_to Different_Maze_8, sw_to Different_Maze_10, e_to Different_Maze_11, w_to Different_Maze_2; DiffMazeRoom Different_Maze_10 with description "Vous @^etes dans un labyrinthe compos@'e de petits passages zigzaguants, tous diff@'erents.", d_to Different_Maze_1, e_to Different_Maze_3, ne_to Different_Maze_4, u_to Different_Maze_5, w_to Different_Maze_6, n_to Different_Maze_7, s_to Different_Maze_8, se_to Different_Maze_9, sw_to Different_Maze_11, nw_to Different_Maze_2; DiffMazeRoom Different_Maze_11 with description "Vous @^etes dans un labyrinthe de petits passages en zigzag, tous diff@'erents.", sw_to Different_Maze_1, nw_to Different_Maze_3, e_to Different_Maze_4, w_to Different_Maze_5, n_to Different_Maze_6, d_to Different_Maze_7, se_to Different_Maze_8, u_to Different_Maze_9, s_to Different_Maze_10, ne_to Different_Maze_2; DeadEndRoom Dead_End_14 with short_name "Impasse, pr@`es du distributeur automatique", description "Vous avez atteint une impasse. Il y a un distributeur automatique imposant.", n_to Different_Maze_2, out_to Different_Maze_2 has nodwarf; Object -> "message dans la poussi@`ere" with description "Vous lisez le message : ~ Ce n'est pas le labyrinthe o@`u le pirate laisse son coffre au tr@'esor. ~", name "message" "gribouillis" "ecrit" "ecriture" "gribouille" "fleurie", initial "Hmmm... Il y a un message gribouill@'e dans la poussi@`ere dans une @'ecriture fleurie." has scenery; Object -> VendingMachine "distributeur automatique" with description "La notice du distributeur indique : ~ Ins@'erez des pi@`eces pour recevoir des batteries neuves.~", name "machine" "fente" "distributeur" "automatique" "massif" "imposant" "batterie" "batteries" "pile" "piles", before [; Receive: if (noun==rare_coins) { move fresh_batteries to location; remove rare_coins; "D@`es que vous ins@'erez les pi@`eces dans la fente, la machine @'emet un grincement et un jeu de piles neuves tombe @`a vos pieds."; } "La machine semble @^etre con@ccue pour recevoir des pi@`eces."; Attack: "La machine est assez robuste et survit @`a votre attaque sans prendre une @'egratignure."; LookUnder: "Vous ne trouvez rien sous la machine."; Search: "Vous ne pouvez entrer dans la machine."; Take: "Le distributeur est beaucoup trop lourd pour @^etre d@'eplac@'e."; ], has scenery; Object fresh_batteries "batteries neuves" VendingMachine with description "Elles ressemblent @`a des piles ordinaires. (Une voix s@'epulcrale dit : ~ Elles durent longtemps ! ~)", initial "Il y a des piles neuves.", name "batteries" "batterie" "pile" "pile" "neuve" "neuves", before [; Count: "Une paire."; ], has female pluralname; Object old_batteries "batteries us@'ees" with description "Elles ressemblent @`a des piles ordinaires.", initial "Des piles us@'ees ont @'et@'e abandonn@'ees ici.", name "batteries" "batterie" "pile" "piles" "usees" "usee", before [; Count: "Une paire."; ], has female pluralname; ! ---------------------------------------------------------------------------- ! Dwarves! ! ---------------------------------------------------------------------------- Object dwarf "petit nain mena@ccant" with name "nain" "menacant" "mauvais" "petit" "mechant" "bonhomme", description "Ce n'est probablement pas une bonne id@'ee de le regarder de trop pr@`es. Contentons-nous de remarquer que ce bonhomme est sacr@'ement agressif.", initial "Un petit nain mena@ccant se cache dans l'ombre.", number 5, daemon [; if (location==thedark) return; if (self.number==0) { StopDaemon(self); return; } if (parent(dwarf)==0) { if (location has nodwarf || location has light) return; if (random(100)<=self.number) { if (Bear in location || Troll in location) return; new_line; if (Dragon in location) { self.number--; "Un nain appara@^it, mais d'un seul souffle n@'egligeant le dragon le r@'eduit en fum@'ee !"; } move dwarf to location; "Un petit nain mena@ccant sort de l'ombre !"; } return; } if (parent(dwarf)~=location) { if (location==thedark) return; if (location has nodwarf || location has light) return; if (random(100)<=96 && parent(dwarf)~=In_Mirror_Canyon) { move dwarf to location; print "^Le nain vous suit discr@`etement...^"; } else { remove dwarf; return; } } if (random(100)<=75) { new_line; if (self hasnt general) { move axe to location; give self general; remove self; "Le nain lance une m@'echante petite hache sur vous, rate son coup, l@^ache un juron, et s'enfuit en courant."; } if (location==In_Mirror_Canyon) "Le nain s'admire dans le miroir."; print "Le nain lance un m@'echant petit couteau vers vous, "; if (random(1000)<=95) { deadflag=1; "et fait mouche !"; } "mais manque sa cible !"; } if (random(3)==1) { remove dwarf; "^Lass@'e de tout ceci, le nain se glisse hors d'ici."; } ], before [; Kick: "Vous poursuivez le nain @`a coups de pieds dans la salle. Il jure, puis se rel@`eve et se brosse. Maintenant il est plus furieux que jamais !"; ], life [; ThrowAt: if (noun==axe) { if (random(3)~=1) { remove self; move axe to location; self.number--; "Vous avez tu@'e un petit nain ! Le corps s'@'evanouit dans un nuage poisseux de fum@'ee noire."; } move axe to location; "Rat@'e ! Le petit nain esquive la hache."; } <>; Give: if (noun==tasty_food) "Malheureux, les nains ne mangent que du charbon ! Maintent vous l'avez rendu *vraiment* furieux !"; "Le nain n'est pas du tout int@'eress@'e par votre offre. (La raison @'etant, peut-@^etre, que s'il vous tue il prend tout ce que vous avez de toute fa@ccon.)"; Attack: "Pas @`a mains nues. Aucune chance."; ], has animate; Object axe "hache naine" with name "hache" "petite" "naine", initial "Il y a une petite hache ici.", description "C'est juste une petite hache.", before [; if (axe hasnt general) rfalse; Examine: "Elle se trouve @`a c@^ot@'e de l'ours."; Take: "Aucune chance. Elles se trouve @`a c@^ot@'e de l'ours f@'eroce, @`a port@'ee de griffe."; ], has female; ! ---------------------------------------------------------------------------- ! Two brushes with piracy ! ---------------------------------------------------------------------------- Object pirate with has_stolen_something false, has_been_spotted false, daemon [ obj booty_nearby; if (random(100) > 2 || location==thedark or In_Secret_Canyon || location has light || location has nodwarf) return; if (dwarf in location) "^Un pirate barbu appara@^it, aper@ccoit le nain et s'enfuit en courant."; objectloop (obj ofclass Treasure && obj in player or location) booty_nearby = true; if (booty_nearby == false) { if (self.has_been_spotted) return; self.has_been_spotted = true; if (self.has_stolen_something) StopDaemon(self); "^Il y a de faibles bruissements dans l'obscurit@'e derri@`ere vous. En vous retournant, vous voyez un pirate barbu. Il porte un grand coffre.^^ ~Mal@'ediction !~ s'@'ecrie-t-il, ~Je suis d@'ecouvert ! Je ferais mieux de me retirer dans le labyrinthe pour cacher mon tr@'esor !~^^ Sur ce, il s'@'evanouit dans l'obscurit@'e."; } if (self.has_stolen_something) return; self.has_stolen_something = true; if (self.has_been_spotted) StopDaemon(self); objectloop (obj ofclass Treasure && obj in player or location) { if (obj in player) score = score - 5; move obj to Dead_End_13; } "^Sorti de l'ombre derri@`ere vous surgit un pirate barbu ! ~Ah, ah,~ glousse-t-il. ~Je vais prendre tout ce butin et le cacher avec mon coffre au fin fond du labyrinthe !~ Il s'empare de votre tr@'esor et s'@'evanouit dans l'obscurit@'e."; ]; ! ---------------------------------------------------------------------------- ! The cave is closing now... ! ---------------------------------------------------------------------------- Object cave_closer with daemon [; if (treasures_found < MAX_TREASURES) return; StopDaemon(self); caves_closed=1; score=score + 25; remove CrystalBridge; give Grate locked ~open; remove set_of_keys; StopDaemon(dwarf); StopDaemon(pirate); remove Troll; remove Bear; remove Dragon; StartTimer(endgame_timer, 25); "^Une voix s@'epulcrale se r@'everb@'erant @`a travers la caverne dit, ~La caverne va bient@^ot fermer. Tous les aventuriers sont pri@'es de sortir imm@'ediatement par le bureau principal.~"; ]; Object endgame_timer with time_left 0, time_out [; score=score + 10; while (child(player)~=0) remove child(player); move bottle to At_Ne_End; if (child(bottle)~=0) remove child(bottle); move giant_bivalve to At_Ne_End; move brass_lantern to At_Ne_End; move black_rod to At_Ne_End; move little_bird to At_Sw_End; move velvet_pillow to At_Sw_End; print "^La voix s@'epulcrale annonce, ~La caverne est maintenant ferm@'ee.~ Alors que l'@'echo s'affaiblit, il y a un flash aveuglant de lumi@`ere (et une petite bouff@'ee de fum@'ee orange). . .^^ Alors que vos yeux se r@'eacclimatent, vous regardez autour...^"; PlayerTo(At_Ne_End); ]; ! ---------------------------------------------------------------------------- ! The End Game ! ---------------------------------------------------------------------------- Object At_Ne_End "Extr@'emit@'e nord-est de l'entrep@^ot" with description "Vous @`a l'extr@'emit@'e nord-est d'une immense salle, encore plus grande que la salle g@'eante. Elle semble @^etre un entrep@^ot du programme ~ Aventure ~. Des torches massives loin au-dessus de vous baignent la salle dans une lumi@`ere jaune enfum@'ee. En vrac peuvent @^etre vus une pile de bouteilles (toutes vides), une nurserie de jeunes plants de haricot murmurant tranquillement, un lit d'hu@^itres, un paquet de baguettes noires avec des @'etoiles rouill@'ees au bout, et une collection de lanternes en cuivre. De l'autre c@^ot@'e un grand nombre de nains dorment sur le sol, ronflant bruyamment. Un panneau indique : ~ Ne pas d@'eranger les nains ! ~", sw_to At_Sw_End has light; Object -> "miroir @'enorme" with description "Il ressemble @`a un miroir ordinaire, quoique @'enorme.", name "miroir" "enorme" "gros" "grand" "accroche" "pendu" "vanite", initial "Un immense miroir est accroche a un mur, et s'@'etend jusqu'@`a l'autre bout de la salle, o@`u divers autres objets peuvent @^etre vaguement aper@ccus au loin.", found_in At_Ne_End At_Sw_End, before [; Attack: print "Vous frappez violemment le miroir qui vole en @'eclats dans un fracas assourdissant.^^"; SleepingDwarves.wake_up(); rtrue; ], has static; Object -> "collection de mat@'eriel pour jeux d'aventures" with description "Vous avez d@'ej@`a vu tout ceci, quoique dans un contexte assez diff@'erent.", name "materiel" "torches" "objets" "aventure" "depot" "entrepot" , before [; Take: "R@'ealisant qu'en enlevant ce butin vous ruineriez le jeu pour les joueurs futurs, vous laissez le mat@'eriel de ~ Aventure ~ l@`a o@`u il est."; ], has female scenery; Object -> SleepingDwarves "nains endormis" with description "Je n'emb@^eterais pas les nains si j'@'etais vous.", name "nain" "nains" "endormis" "dormants" "ronflants", article "des centaines de ", before [; Take: "Quoi, tous les nains ?"; ], life [; WakeOther: print "Vous secouez le nain le plus proche qui s'@'eveille en grognant, vous regarde, jure et se saisit de sa hache.^^"; self.wake_up(); rtrue; Attack: self.wake_up(); rtrue; ], wake_up [; deadflag=1; "Le grabuge r@'esultant a r@'eveill@'e les nains. Il y a maintenant des douzaines de petits nains mena@ccants dans la salle ! La plupart lancent des couteaux sur vous ! Tous vous atteignent !"; ], has pluralname animate scenery multitude; Object At_Sw_End "Extr@'emit@'e sud-ouest de l'entrep@^ot" with description "Vous @^etes @`a l'extr@'emit@'e sud-ouest de l'entrep@^ot. D'un c@^ot@'e se trouve une fosse pleine de f@'eroces serpents verts, de l'autre une rang@'ee de petites cages, chacune contenant un petit oiseau maussade. Dans un coin se trouve un paquet de baguettes noires avec des traces de rouille @`a un bout. Un grand nombre d'oreillers en velours sont @'eparpill@'es sur le sol. Un grand miroir s'@'etend jusqu'au nord-est. A vos pieds se trouve une grande grille en acier, pr@`es de laquelle un panneau indique : ~ CHAMBRE FORTE DU TRESOR. Cl@'es dans le bureau principal. ~", d_to RepositoryGrate, ne_to At_Ne_End has light; Object -> RepositoryGrate "grille en acier" with name "acier" "grille", description "Cela ressemble @`a une ordinaire grille en acier.", when_open "La grille est ouverte.", when_closed "La grille est ferm@'ee.", door_dir d_to, door_to Outside_Grate, with_key 0 has female static door locked openable; Object -> "collection de mat@'eriel pour jeux d'aventures" with description "Vous avez d@'ej@`a vu tout ceci, quoique dans un contexte assez diff@'erent.", name "materiel" "objets" "fosse" "serpent" "serpents" "feroce" "feroces" "vert" "verts" "aventure" "depot" "entrepot" , before [; Take: "R@'ealisant qu'en enlevant ce butin vous ruineriez le jeu pour les joueurs futurs, vous laissez le mat@'eriel de ~ Aventure ~ l@`a o@`u il est."; ], has female scenery; Object -> black_mark_rod "baguette noire avec des traces de rouille @`a un bout" with description "C'est une baguette noire d'un m@`etre de long avec des traces de rouille @`a un bout.", initial "Une baguette noire d'un m@`etre de long avec des traces de rouille @`a un bout tra@^ine par l@`a.", name "baguette" "noire" "rouillee" "traces" "un" "metre" "m" "fer" "explosif" "dynamite" "baton", before [; Wave: "Rien ne se produit."; ], has female; ! ---------------------------------------------------------------------------- ! Some entry points ! ---------------------------------------------------------------------------- [ Initialise; location=At_End_Of_Road; score = 36; StartDaemon(dwarf); StartDaemon(pirate); StartDaemon(cave_closer); print "^^Bienvenue dans Aventure !^^"; ]; [ PrintRank; print ", ce qui vous permet de pr@'etendre au rang "; if (score >= 348) "de grand ma@^itre aventurier !"; if (score >= 330) "de ma@^itre, premi@`ere classe."; if (score >= 300) "de ma@^itre, seconde classe."; if (score >= 200) "de ma@^itre."; if (score >= 130) "d'aventurier exp@'eriment@'e."; if (score >= 100) "d'aventurier exp@'eriment@'e."; if (score >= 35) "d'aventurier."; if (score >= 10) "de novice."; "d'amateur."; ]; [ DarkToDark; if (dark_warning == false) { dark_warning = true; "Il fait noir @`a pr@'esent. Si vous avancez vous risquez de tomber dans un trou."; } if (random(4) == 1) { deadflag = 1; "Vous @^etes tomb@'e dans un trou et vous vous @^etes bris@'e tous les os de votre corps !"; } rfalse; ]; ! ---------------------------------------------------------------------------- ! Menu-driven help (not really a part of the game itself) ! ---------------------------------------------------------------------------- [ HelpMenu; if (menu_item==0) { item_width=8; item_name="A propos d'Aventure"; if (deadflag==2) return 5; else return 4; } if (menu_item==1) { item_width=6; item_name="Mode d'emploi"; } if (menu_item==2) { item_width=4; item_name="Historique"; } if (menu_item==3) { item_width=6; item_name="Authenticit@'e"; } if (menu_item==4) { item_width=7; item_name="Note du traducteur"; } if (menu_item==5) { item_width=7; item_name="Le saviez-vous..."; } ]; [ HelpInfo; if (menu_item==1) { print "Je connais des lieux, des actions et des choses. Vous pouvez me guider en utilisant des commandes sous forme de phrases compl@`etes. Pour les d@'eplacements, essayez des commandes comme ~entrer~, ~est~, ~ouest~, ~nord~, ~sud~, ~haut~, ~bas~, ~entrer b@^atiment~, ~grimper poteau~, etc.^^"; print "Je connais quelques objets sp@'eciaux, comme une baguette noire cach@'ee dans la caverne. Ces objets peuvent @^etre manipul@'es en utilisant quelques unes des commandes que je connais. Habituellement vous aurez besoin de donner un verbe suivi d'un objet (avec en plus des adjectifs descriptifs quand vous le d@'esirez), mais quelquefois je peux d@'eduire l'objet @`a partir du verbe seul. Quelques objets impliquent aussi des verbes ; en particulier, ~inventaire~ implique ~faire l'inventaire~, qui fait que je vous donne une liste de ce que vous portez. Les objets ont des effets de bord ; par exemple, la baguette effraye l'oiseau.^^"; print "Beaucoup de commandes ont des abr@'eviations. Par exemple, vous pouvez taper ~i~ au lieu d' ~inventaire~, ~x objet~ au lieu de ~examiner objet~, etc.^^"; print "Habituellement, les gens qui ont des probl@`emes pour se d@'eplacer ont simplement besoin d'essayer quelques mots de plus. Souvent les gens qui essaient sans r@'eussir de manipuler un objet essayent quelque chose au-del@`a de leurs (ou de mes !) capacit@'es et devraient essayer une direction compl@`etement diff@'erente.^^"; print "Notez que les passages de la caverne tournent beaucoup, et que quitter une salle par le nord ne garantit pas d'entrer dans la suivante depuis le sud.^^"; print "Si vous voulez terminer votre aventure plus t@^ot, tapez ~quit~. Pour suspendre votre aventure de mani@`ere @`a pouvoir continuer plus tard, tapez ~save~, et pour reprendre un jeu sauv@'e, tapez ~restore~. Pour savoir si vous vous d@'ebrouillez bien, tapez ~score~. Pour obtenir tous les points d'un tr@'esor, vous devez le laisser en s@^uret@'e dans le b@^atiment, m@^eme si vous obtenez une partie des points pour l'avoir simplement trouv@'e. Vous perdez des points quand vous vous fa@^ites tuer, ou pour quitter, bien que le premier cas vous co@^ute plus cher. Il y a aussi des points bas@'es sur le pourcentage (s'il y a lieu) de la caverne que vous avez r@'eussi @`a explorer ; en particulier, il y a un grand bonus pour @^etre simplement entr@'e (pour distinguer les d@'ebutants du reste du lot), et il y a d'autres mani@`eres pour d@'eterminer si vous avez franchi quelques unes des sections les plus p@'enibles.^^"; print "Si vous pensez avoir trouv@'e tous les tr@'esors, continuez simplement d'explorer un moment. Si rien d'int@'eressant ne se produit, vous ne les avez pas encore tous trouv@'es. Si quelque chose d'int@'eressant se produit, cela signifie que vous avez un bonus ainsi que l'opportunit@'e de gagner beaucoup d'autres points dans la section finale.^^"; "Bonne chance !"; } if (menu_item==2) { print "Le premier aventurier f@^ut sans doute un esclave mul@^atre nomm@'e Stephen Bishop, n@'e aux environs de 1820 : `mince, @'el@'egant, et tr@`es beau' ; un guide `vif, audacieux, enthousiaste' de la Caverne Mammoth [Mammouth] dans le karst du Kentucky. L'histoire de la caverne est un curieux microcosme de l'histoire am@'ericaine. Sa d@'ecouverte est l@'egendaire et remonte aux ann@'ees 1790 ; on dit qu'un chasseur, John Houchin, poursuivant un ours bless@'e jusqu'@`a une grande fosse pr@`es de Green River, "; print "tomba sur l'entr@'ee. Celle-ci @'etait envahie de chauves-souris et durant la guerre de 1812 fut intensivement exploit@'ee pour son guano, dissout dans des cuves de nitrate pour fabriquer le salp@^etre et la poudre @`a canon. Apr@`es la guerre les prix ch@^ut@`erent ; mais la caverne devint une petite attraction quand une momie indienne dess@'ech@'ee fut d@'ecouverte dans les environs, assise verticalement dans un cercueil de pierre, entour@'ee de talismans. En 1815, Fawn Hoof (Sabot de Faon), surnomm@'ee ainsi d'apr@`es l'une des amulettes, fut emport@'ee par un cirque, attirant des foules dans toute l'Am@'erique (une tourn@'ee qui rappelle assez la chanson de Don McLean : `The Legend of Andrew McCrew'). Elle termina dans le Smithsonian mais dans les ann@'ees 1820 la caverne fut appel@'ee l'une des merveilles du monde, principalement en raison de ses efforts posthumes.^^"; print "Au d@'ebut du dix-neuvi@`eme si@`ecle les cavernes europ@'eennes @'etaient de grosses attractions touristiques, mais presque personne ne visitait la Mammoth, `merveille du monde' ou pas. Elle n'@'etait pas alors non plus particuli@`erement grande (le nom vient des mineurs qui se vantaient de leur production monstrueuse de guano). En 1838, le ma@^itre de Stephen Bishop racheta la caverne. Stephen, comme on l'appelait invariablement (@'etant esclave), @'etait @`a tout point de vue un homme remarquable : auto-didacte en latin et en grec, il devint c@'el@`ebre en tant que `gouverneur en chef' de son royaume souterrain. Il "; print "explora et nomma une grande partie du r@'eseau pendant son temps libre, doublant en une ann@'ee la zone connue. La saveur particuli@`ere des noms de la caverne - mi-am@'ericain, mi-classique - date de Stephen : la rivi@`ere Styx, la salle boule de neige, l'avenue de la petite chauve-souris, le d@^ome g@'eant. Stephen trouva d'@'etranges poissons aveugles, des serpents, des grillons silencieux, les restes d'ours des cavernes (cr@'eatures sauvages et joueuses, de un m@`etre cinquante de longueur et de un m@`etre vingt de hauteur, et qui s'@'eteignirent @`a la fin de la derni@`ere Glaciation), des oeuvres indiennes vieilles d'un si@`ecle et encore d'autres cavernes. Sa carte de 1842, trac@'ee enti@`erement de m@'emoire, @'etait encore utilis@'ee quarante ans plus tard.^^"; print "En tant qu'attraction touristique (et, comme le ma@^itre de Stephen @'etait un philanthrope, bri@`evement sanatorium pour la tuberculose, en raison d'une th@'eorie m@'edicale aujourd'hui invalid@'ee) la caverne devint une affaire florissante : pendant des dizaines d'ann@'ees les cavernes environnantes furent prises d'assaut et le titre de propri@'et@'e de la caverne sans cesse contest@'e. La cha@^ine voisine, de l'autre c@^ot@'e de Houchins Valley dans Flint Ridge, ouvrit la Grande Caverne d'Onyx en 1912. Dans les ann@'ees 1920, la Guerre des Cavernes du Kentucky "; print "faisait rage. Des propri@'etaires rivaux d@'etournaient les touristes avec de faux-policiers, employaient des complices pour semer le chahut dans les visites guid@'ees du concurrent, br@^ulaient les guichets, faisaient circuler des rumeurs et des publicit@'es falsifi@'ees. L'exploration de cavernes devint si dangereuse que finallement en 1941 le Gouvernement des Etats-Unis intervint, transforma la majeure partie de la zone en Parc National et interdit l'exploration de cavernes. La ru@'ee vers l'or des touristes @'etait de toute fa@ccon en train de d@'ecliner.^^"; print "Convaincus que les cavernes Mammoth et Flint Ridge @'etaient toutes reli@'ees en une gigantesque cha@^ine, des explorateurs essay@`erent des entr@'ees secr@`etes pendant des ann@'ees, et finirent par obtenir un soutien officiel. Durant les ann@'ees 1960 toutes les connexions de Flint Ridge - des tunnels difficiles et inond@'es - se terminaient d@'esesp@'er@'ement par des @'eboulement de rochers. Une physicienne `mince comme un roseau', Patricia Crowther, fit une perc@'ee en 1972 quand elle passa par le Tight Spot et trouva un passage boueux : c'@'etait une voie cach@'ee vers la caverne Mammoth.^^"; print "Selon les termes du testament de son ma@^itre, Stephen Bishop fut affranchi en 1856, alors que la caverne s'enorgueillissait de 226 avenues, 47 d@^omes, 23 fosses et 8 ch@^utes d'eau. Il mourut un an plus tard, avant d'avoir pu racheter sa femme et son fils. Dans les ann@'ees 1970, le passage boueux de Crowther fut trouv@'e sur sa carte.^^"; print "La caverne Mammoth est gigantesque, son @'etendue r@'eelle encore un sujet de sp@'eculation (les estimations varient entre 500 et 800 kilom@`etres). Bien que ce jeu a souvent @'et@'e appel@'e ~Colossal Cave~, il est en r@'ealit@'e une simulation de la r@'egion de la caverne Bedquilt. Voici l'histoire de Will Crowther qui nous explique comment c'est arriv@'e :^^"; print "~Je participais @`a l'@'epoque @`a un jeu de r@^ole (pas sur ordinateur) appel@'e Donjons et Dragons, et j'explorais activement des cavernes - en particulier la caverne Mammoth au Kentucky. Soudain, j'ai @'et@'e impliqu@'e dans un divorce, et cela m'a laiss@'e quelque peu d@'esempar@'e. En particulier mes enfants me manquaient. Aussi les explorations s'arr@^et@`erent, parce que c'@'etait devenu peu pratique, alors j'ai d@'ecid@'e de faire l'idiot et d'@'ecrire un programme qui serait une re-cr@'eation en imagination de mes explorations, mais aussi un jeu pour les enfants, et qui rappellerait peut-@^etre quelques aspects du Donjons et Dragons auquel j'avais jou@'e.^^"; print "~Mon intention @'etait de cr@'eer un jeu sur ordinateur qui ne serait pas intimidant pour les non-informaticiens, et c'est l'une des raisons pour lesquelles j'ai fait en sorte que le joueur dirige le jeu en langage naturel, au lieu de commandes plus standardis@'ees. Mes enfants le trouv@`erent tr@`es amusant.~ [Extrait de ~Genesis II: Creation and Recreation with Computers~, Dale Peterson (1983).]^^"; print "Le programme original de Crowther @'ecrit en FORTRAN avait cinq tr@'esors tout au plus, mais pas de score @`a proprement parler. Le but @'etait vraiment d'explorer, encore qu'il y avait l'opposition du serpent par exemple. Comme la v@'eritable r@'egion du Bedquilt, la simulation de Crowther avait environ quatre niveaux de profondeur et @'etait riche en d@'etails g@'eologiques. Un bon exemple est la colonne orange qui descend vers la salle du rocher de la Rivi@`ere Orange (l@`a o@`u vit l'oiseau) : la vraie colonne est de travertin orange, un superbe min@'eral que l'on trouve dans le calcaire humide.^^"; print "Le langage du jeu est charg@'e de r@'ef@'erences @`a la sp@'el@'eologie, aux `domes' [`d@^omes'] et aux `crawls' [`boyaux']. Une `slab room' [`chambre dall@'ee'], par exemple, est une tr@`es vieille caverne dont la vo@^ute a commenc@'e @`a se fragmenter en @'ecailles aigu@:es qui jonchent le sol en un amoncellement fou. L'utilisation par le programme du mot `room' pour toutes sortes de cavernes et d'endroits semble l@'eg@`erement n@'eglig@'e dans le langage "; print "de tous les jours, mais est largement r@'epandu en am@'ericain de la sp@'el@'eologie et remonte @`a Stephen Bishop : l'usage dans les jeux d'aventure du mot `room' [`salle'] pour signifier `place' [`endroit'] pourrait donc @^etre consid@'er@'e comme h@'erit@'e de lui.^^"; print "Le jeu fit un pas d@'ecisif vers la r@'esolution d'@'enigmes quand Don Woods, un @'etudiant @`a Stanford, le d@'ebogua et l'@'etendit. Il tripla le nombre de tr@'esors et ajouta les zones non-g@'eologiques : tout depuis le pont du troll, avec la plupart des antichambres du niveau Bedquilt. Toutes les nombreuses imitations et extensions du Adventure original sont essentiellement bas@'ees sur l'@'edition deWoods @`a 350 points. (Beaucoup de versions gonfl@'ees, corrompues ou am@'elior@'ees - cela d@'epend de votre point de vue - du jeu sont en circulation sur Internet, et la mani@`ere la plus efficace de les identifier est par le score maximal possible. Beaucoup de versions permettent autour de 400 et 500, et une jusqu'@`a 1000. Woods lui-m@^eme continue de publier de nouvelles versions de son jeu ; la plupart des autres ~@'etendeurs~ n'ont pas son talent.)^^"; !*!*! print "Bien que le jeu s'est @'eloign@'e de la pure simulation, une bonne part reste r@'ealiste. Les explorateurs font vraiment demi-tour quand leur lampes "; !*! carbide print "vacillent ; il y a vraiment des signes myst@'erieux et des initiales sur les mur de la caverne, certains laiss@'es par les mineurs, d'autres par Bishop, d'autres encore par les explorateurs de 1920. Bien s@^ur il n'y a pas un volcan en activit@'e au centre du Kentucky, ni des dragons ou des nains. Mais m@^eme ces ornements sont, en un sens, d@'eriv@'es "; print "de la tradition : comme la plupart des premiers jeux de r@^oles, `Adventure' doit beaucoup au 'Hobbit' de J. R. R. Tolkien, et le passage @`a travers les montagnes et la Moria du `Seigneur des Anneaux' (probablement le passage le plus dramatique et atmosph@'erique). Tolkien lui-m@^eme, le faiseur de mythes le plus marquant du vingti@`eme si@`ecle, travailla @`a partir de l'exemple des sagas Islandaises, Finlandaises et Galloises.^^"; print "Vers 1977 des cassettes de `Adventure' circulaient @`a grande @'echelle, par le groupe d'utilisateurs Digital appel@'e DECUS, entre autres : prenant sur leurs repas et leurs week-ends si n@'ecessaire... mais c'est une autre histoire. (le livre fascinant de Tracy Kidder, `The Soul of a New Machine' [l'@^ame d'une nouvelle machine], @'evoquant du point de vue d'une journaliste un groupe de d@'eveloppement sur gros ordinateur, capte bien cette ambiance.)^^"; "Ceci est une copie de troisi@`eme ou de quatri@`eme main : d'abord l'original de Will Crowther, puis l'@'edition de Donald Woods @`a 350 points, puis le port sur PC de Donald Ekman, puis l'excellente version TADS de David M. Baggett (1993), puis celle-ci [sans oublier la traduction...].^^"; } if (menu_item==3) { print "Ce port est assez proche de l'original. Les @'enigmes, objets et lieux de la version originale en 350-points de Woods sont exactement les m@^emes ici.^^"; print "J'ai ajout@'e quelques messages utiles, tels que ~Ceci est un cul-de-sac.~, ici et l@`a : et r@'etabli quelques messages ~de d@'epart~ des objets, tels que le (assez boiteux)^ ^ Il y a de la bonne nourriture ici.^^ @`a partir de fichiers source qui sont certainement anciens mais de provenance douteuse. Ils semblent aller bien avec le reste du texte.^^"; print "le syst@`eme de score est l'original, sauf que vous ne perdez plus 4 points quand vous quittez (puisque vous n'avez pas de score quand vous quittez un jeu Inform, ceci ne change rien) et, de mani@`ere plus discutable, j'accorde 5 points pour le fait de porter un tr@'esor, comme quelques vieux ports des ann@'ees 1980. Les grades sont un peu remis en ordre. Le seul changement significatif de r@`egle est que l'on ne peut pas utiliser les mots magiques tant que leur destination n'a pas @'et@'e visit@'ee.^^"; print "Les nains sont plus simples dans leurs mouvements, mais d'un autre c@^ot@'e j'ai ajout@'e quelques messages pour les faire interagir mieux avec le reste du jeu. Les probabilit@'es sont celles du jeu original.^^"; print "Dans l'original on pouvait taper le nom d'un lieu pour le visiter : pour limiter la taille du code, j'ai omis cette caract@'eristique, mais avec quelques regrets.^^"; print "Le texte lui-m@^eme est presque partout pr@'eserv@'e intact, mais j'ai corrig@'e quelques fautes d'orthographe ou de grammaire (et chang@'e quelques remarques totalement trompeuses et gnomiques). Les instructions ont @'et@'e l@'eg@`erement chang@'ees (pour des raisons @'evidentes) mais sont basiquement conserv@'ees.^^"; "Une bonne source de d@'etails est le code source de David Baggett, qui circule sur Internet."; } if (menu_item==4) { print "Ne vous @'etonnez pas si vous n'arrivez pas @`a obtenir le score maximal de 350 points.^^"; print "En particulier, deux @'enigmes sont pratiquement infaisables. Il faut dire que je n'arrive toujours pas @`a comprendre l'une d'entre elles, m@^eme en ayant la solution sous les yeux...^^"; print "Cependant le score maximal peut bel et bien @^etre atteint !^^"; "Remarque : je me suis parfois inspir@'e d'une traduction inachev@'ee de Julien Pieraut."; } print "Saviez-vous que...^^"; print "Les cinq nains ont 96% de chances de vous suivre, sauf @`a la lumi@`ere, dans les fosses ou quand ils s'admirent : et les m@'echants petits couteaux sont pr@'ecis @`a 9.5%.^^"; print "Les dragons br@^ulent les nains (peut-@^etre parce que les nains ne mangent que du charbon).^^"; print "L'ours (qui aime le volcan) est trop lourd pour le pont... et vous pouvez revenir sur place apr@`es votre r@'esurrection.^^"; print "Vous pouvez @'eviter le serpent en vous glissant dans le canyon secret est-ouest, 35% du temps. Et marcher dans l'obscurit@'e n'est pas si horrible que @cca : vous n'avez que 25% de chances de tomber dans un trou.^^"; print "Le vase n'aime pas @^etre immerg@'e.^^"; print "Les silhouettes indistinctes peuvent se dire bonjour de la main.^^"; print "Mettre de l'eau sur les charni@`eres de la porte les rouille de nouveau.^^"; print "Quand la caverne ferme, on verrouille la grille et on jette les cl@'es, les cr@'eatures s'enfuient et le pont de cristal s'@'evanouit...^^"; print "...et un indice compl@`etement inutile est @'ecrit sur la coquille de l'hu@^itre g@'eante @`a la fin du jeu.^^"; "Le dernier point infect peut @^etre gagn@'e en... mais non. Cela serait trop facile."; !*! telling ]; [ HelpSub; if (deadflag~=2) DoMenu("De l'information est disponible sur les sujets suivants :^ ^ Mode d'emploi ^ Une pr@'eface historique ^ Quelle est l'authenticit@'e de cette @'edition ? ^ Note du traducteur^", HelpMenu, HelpInfo); else DoMenu("De l'information est disponible sur les sujets suivants :^ ^ Mode d'emploi ^ Une pr@'eface historique ^ Quelle est l'authenticit@'e de cette @'edition ? ^ Note du traducteur ^ Le saviez-vous...^", HelpMenu, HelpInfo); ]; [ Amusing; HelpSub(); ]; ! ---------------------------------------------------------------------------- ! New verbs (to add to the library stock) ! ---------------------------------------------------------------------------- [ CatchSub; "Vous ne pouvez pas attraper ", (the) noun, "."; ]; [ ReleaseSub; "Vous ne pouvez pas rel@^acher ", (the) noun, "."; ]; [ WaterSub; if (bottle in player) <>; "De l'eau ? Quelle eau ?"; ]; [ OilSub; if (bottle in player) <>; "De l'huile ? Quelle huile ?"; ]; [ OnSub; if (brass_lantern notin player) "Vous n'avez pas de lampe."; <>; ]; [ OffSub; if (brass_lantern notin player) "Vous n'avez pas de lampe."; <>; ]; [ XyzzySub; "Rien ne se passe."; ]; [ PlughSub; "Rien ne se passe."; ]; [ PloverSub; "Rien ne se passe."; ]; [ FeeSub; FthingSub(0); ]; [ FieSub; FthingSub(1); ]; [ FoeSub; FthingSub(2); ]; [ FooSub; FthingSub(3); ]; [ FthingSub i; if (feefie_count~=i) { feefie_count=0; "Appliquez-vous, voyons !"; } if (feefie_count++ == 3) { feefie_count=0; if (golden_eggs in In_Giant_Room) "Rien ne se passe."; if ((golden_eggs in player) || (golden_eggs in location)) print "Le nid d'oeufs en or s'est @'evanoui !^"; else print "C'est fait !"; if (golden_eggs in player) score=score-5; if (golden_eggs in Inside_Building) score=score-golden_eggs.depositpoints; move golden_eggs to In_Giant_Room; if (location==In_Giant_Room) "^^Un grand nid plein d'oeufs en or appara@^it soudain, venu de nulle part !"; } else "Ok."; ]; [ CountSub; if (noun has multitude) "Il y en a une multitude."; "Je vois un (1) ", (name) noun, "."; !*! ]; [ UseSub; "Vous allez devoir @^etre un tout petit peu plus pr@'ecis que cela."; ]; [ BlastWithSub; if (second~=black_mark_rod) "Faire sauter quelque chose n@'ecessite de la dynamite."; "Vous avez encore mang@'e de ces bizarres g@^ateaux au chocolat et aux noix ?"; ]; [ OldMagicSub; "Bon essai, mais c'est un vieux mot magique compl@`etement us@'e."; ]; [ KickSub; <>; ]; ! For kicking dwarves [ BlastSub; if (location~=At_Sw_End or At_Ne_End) "Frustrant, n'est-ce pas ?"; if (location==At_Sw_End && parent(black_mark_rod)==At_Ne_End) { score=score+35; deadflag=2; "Il y a une forte explosion, et un trou de six m@`etres de diam@`etre appara@^it dans le mur lointain, enterrant les nains dans les d@'ecombres. Vous marchez @`a travers le trou et vous retrouvez dans le bureau principal, o@`u une foule enthousiaste d'elfes amicaux portent en triomphe l'aventurier conqu@'erant dans les lueurs du soleil couchant."; } if (location==At_Ne_End && parent(black_mark_rod)==At_Sw_End) { score=score+20; deadflag=1; "Il y a une forte explosion, et un trou de six m@`etres de diam@`etre appara@^it dans le mur lointain, enterrant les serpents dans les d@'ecombres. Une rivi@`ere de lave en fusion se d@'everse par le trou, d@'etruisant tout sur son passage, y compris vous !"; } deadflag=1; "Il y a une forte explosion, et vous @^etes brutalement dispers@'e sur les murs de la salle."; ]; ! ---------------------------------------------------------------------------- ! Resurrection ! ---------------------------------------------------------------------------- [ AfterLife o; if (deadflag==3) { deadflag=1; rfalse; } print "^^"; if (caves_closed) "On dirait bien que vous @^etes mort. Eh bien, @'etant donn@'e que l'heure de la fermeture est proche, je pense que nous nous reverrons un autre jour."; if (deaths==0) print "Oh mon Dieu, on dirait que vous vous @^etes fait tuer. Je devrais @^etre en mesure de vous aider, mais je n'ai jamais vraiment fait cela auparavant. Voulez-vous que j'essaye de vous r@'eincarner ?^^"; if (deaths==1) print "Esp@`ece de maladroit, vous avez remis cela ! Je ne sais pas combien de temps je peux continuer. Voulez-vous que j'essaye de vous r@'eincarner @`a nouveau ?^^"; if (deaths==2) print "Cette fois-ci vous avez vraiment r@'eussi votre coup ! Je n'ai plus de fum@'ee orange ! Vous n'attendez pas de moi une r@'eincarnation d@'ecente sans fum@'ee orange, n'est-ce pas ?^^"; print "> "; if (YesOrNo() == false) { switch(deaths) { 0: "Tr@`es bien."; 1: "Probablement un choix avis@'e."; 2: "Bien s@^ur que non !"; } } switch(deaths) { 0: print "D'accord. Mais ne m'en voulez pas si quelque chose va m......^^^^ --- POUF !! ---^^ Vous @^etes englouti dans un nuage de fum@'ee orange. Toussant et haletant, vous @'emergez de la fum@'ee et remarquez que vous @^etes....^"; 1: print "Ok, o@`u ai-je mis ma fum@'ee orange ?.... >POUF!< ^^Tout dispara@^it dans un @'epais nuage de fum@'ee orange.^"; 2: "Ok, puisque vous @^etes si malin, faites-le vous-m@^eme ! Je m'en vais !"; } deaths++; score=score-10; if (location~=thedark) { while (child(player) ~= nothing) { o=child(player); move o to location; if (o ofclass Treasure) score=score-5; } } else { while (child(player) ~= nothing) move child(player) to real_location; } move brass_lantern to At_End_Of_Road; give brass_lantern ~on ~light; remove dwarf; deadflag=0; PlayerTo(Inside_Building); ]; ! ---------------------------------------------------------------------------- ! How to cheat in the test version: no dwarves or pirates, and magic words ! working from the beginning ! ---------------------------------------------------------------------------- #IFDEF TEST_VERSION; [ XdetermSub; StopDaemon(dwarf); StopDaemon(pirate); give In_Debris_Room visited; give At_Y2 visited; give In_Plover_Room visited; ]; #ENDIF; ! ---------------------------------------------------------------------------- ! Grammar: the usual grammar and some extensions ! ---------------------------------------------------------------------------- [ MyUnknownVerb word; ! fonction facultative permettant d'@'etendre UnknownVerb if (word=='capture' or 'capturons' or 'capturez') return 'capturer'; if (word=='attrape' or 'attrapons' or 'attrapez') return 'attraper'; if (word=='relache' or 'relachons' or 'relachez') return 'relacher'; if (word=='libere' or 'liberons' or 'liberez') return 'liberer'; if (word=='trempe' or 'trempons' or 'trempez') return 'tremper'; if (word=='inonde' or 'inondons' or 'inondez') return 'inonder'; if (word=='verse' or 'versons' or 'versez') return 'verser'; if (word=='arrose' or 'arrosons' or 'arrosez') return 'arroser'; if (word=='lubrifie' or 'lubrifions' or 'lubrifiez') return 'lubrifier'; if (word=='graisse' or 'graissons' or 'graissez') return 'graisser'; if (word=='huile' or 'huilons' or 'huilez') return 'huiler'; if (word=='botte' or 'bottons' or 'bottez') return 'botter'; if (word=='compte' or 'comptons' or 'comptez') return 'compter'; if (word=='utilise' or 'utilisons' or 'utilisez') return 'utiliser'; if (word=='explose' or 'explosons' or 'explosez') return 'exploser'; rfalse; ]; Include "FrenchG"; Verb "on" * -> On; Verb "off" * -> Off; Verb "attraper" "capturer" * creature -> Catch * creature "avec" held -> Catch; Verb "liberer" "relacher" * creature -> Release; Verb "verser" "inonder" "tremper" * "eau" "sur" noun -> Water * "petrole" "sur" noun -> Oil * noun -> Empty; Verb "arroser" * noun -> Water; Verb "huiler" "graisser" "lubrifier" * noun -> Oil; Verb "plugh" * -> Plugh; Verb "xyzzy" * -> Xyzzy; Verb "plover" "pluvier" * -> Plover; Verb "sesame" "shazam" "hocus" "abracadabra" "frotz" * -> OldMagic; Verb "fee" * -> Fee; Verb "fie" * -> Fie; Verb "foe" * -> Foe; Verb "foo" * -> Foo; Verb "help" "aide" "manuel" * -> Help; Verb "botter" * noun -> Kick; Verb "compter" * noun -> Count; Verb "utiliser" * -> Use; Verb "exploser" * -> Blast * noun "avec" held -> BlastWith; Extend "faire" * "exploser"/"peter"/"sauter" -> Blast * "exploser"/"peter"/"sauter" noun "avec" held -> BlastWith; [ Baguette; if (noun == black_rod or black_mark_rod) rtrue; rfalse; ]; Extend "donner" * "un" "coup" "de" noun=Baguette -> Wave * "un" "coup" "de" noun=Baguette "magique" -> Wave; #IFDEF TEST_VERSION; Verb "xdeterm" * -> Xdeterm; #ENDIF; ! ----------------------------------------------------------------------------