! ---------------------------------------------------------------------------- ! 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çais : 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 étapes par :^ Donald Ekman, David M. Baggett (1993) et Graham Nelson (1994)^ Traduit en français 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écessite 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ésormais en lieu sûr."; } ]; ! ---------------------------------------------------------------------------- ! The outside world ! ---------------------------------------------------------------------------- Class AboveGround has light nodwarf; AboveGround At_End_Of_Road "Au bout du chemin" with description "Vous êtes au bout d'une route venant de l'ouest, près d'un petit bâtiment de briques. La forêt vous entoure. Un ruisseau sort de l'édifice 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âtiment" with name "batiment" "maison" "edifice" "petit" "petite" "brique" "briques", description "C'est un petit bâtiment 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 êtes déjà 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ût minéral, mais ce n'est pas déplaisant. Elle est extrêmement 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érature a fait éclater le vase."; } if (noun == bottle) <>; remove noun; if (noun ofclass Treasure) score=score-5; print_ret (The) noun, " ", (isorare) noun, " emporté", (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êt" with name "foret" "arbre" "arbres" "chenes" "erables" "bosquet" "pins" "epiceas" "bouleaux" "frenes" "jeunes" "buissons" "feuilles" "baies", description "Les arbres de la forêt sont de grands chênes et des érables, avec parfois un bosquet de pins ou d'épicéas. Il y a un peu de sous-bois, principalement des bouleaux et de jeunes frênes, ainsi que des buissons de diverses sortes. A cette époque de l'année la visibilité est assez limitée par toutes les feuilles, mais le voyage est assez facile si vous contournez les épicéas 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 êtes arrivé en haut d'une colline, toujours dans la forêt. Le chemin descend vers l'autre côté de la colline. Au loin, un bâtiment.", 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ême ?", name "autre" "versant" "cote" "colline" has scenery; AboveGround Inside_Building "Dans le bâtiment" with description "Vous êtes dans un bâtiment qui abrite une source abondante.", cant_go "La source s'écoule par deux conduites de 30 cm de diamètre. La seule sortie est à l'ouest.", before [; Enter: if (noun==Spring or SewerPipes) "La source s'écoule par deux conduites de 30 centimètres de diamètre. Il est conseillé d'utiliser la sortie."; if (noun==Building) "Vous êtes déjà dans le bâtiment."; 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 étroits."; Object -> Spring "source" with name "source" "abondante" "fontaine", description "L'eau s'écoule par deux conduites de 30 cm de diamètre." has female scenery; Object -> SewerPipes "paire de tuyaux de 30 cm de diamètre" with name "paire" "tuyaux" "tuyau" "30" "cm" "trente" "centimetres" "diametre" "conduite" "conduites", description "Les tuyaux sont trop étroits. La seule sortie est à l'ouest." has female scenery; Object -> set_of_keys "trousseau de clés" with description "Ce trousseau de clés a l'air tout à fait normal.", initial "Des clés sont posées sur le sol.", before [; Count: "Vous comptez une douzaine de clés."; ], name "cles" "clefs" "cle" "clef" "porte" "-cles" "-clefs" "jeu" "trousseau"; Object -> tasty_food "nourriture appétissante" with description "Elle a vraiment l'air délicieuse !", article "de la", initial "Il y a ici de la nourriture appétissante.", name "nourriture" "ration" "rations" "tripes" "bonne" "gouteuse" "delicieuse" "appetissante", after [; Eat: "Délicieux !"; ], has edible female; Object -> brass_lantern "lampe de cuivre" with name "lampe" "lanterne" "lumiere" "etincelante" "cuivre", when_off "Il y a ici une étincelante 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é 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 à 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, à moins de trouver des piles neuves. Je crois me souvenir qu'il y a un distributeur dans le labyrinthe. Amenez quelques pièces 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 étincelante lampe de cuivre"; if (self hasnt on) ". Elle n'est pas allumée en ce moment."; if (self.power_remaining < 30) ", brillant faiblement."; ", brillamment allumée."; Burn: <>; Rub: "Frotter la lampe électrique n'est pas particulièrement gratifiant. De toute façon, rien d'excitant ne se produit."; SwitchOn: if (self.power_remaining <= 0) "Malheureusement, les piles semblent être 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éussir à 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éjà (dans la bouteille)."; Receive: if (noun == stream or Oil) <>; else "La bouteille est censée contenir uniquement des liquides."; Fill: if (child(bottle) ~= nothing) "La bouteille est déjà pleine."; if (stream in location || Spring in location) { move water_in_the_bottle to bottle; "La bouteille est à présent pleine d'eau."; } if (Oil in location) { move oil_in_the_bottle to bottle; "La bouteille est à présent pleine d'huile."; } "Il n'y a pas ici de quoi remplir la bouteille."; Empty: if (child(bottle) == nothing) "La bouteille est déjà vide !"; remove child(bottle); "Maintenant votre bouteille est vide et le sol mouillé."; ], has container open female; Object water_in_the_bottle "eau" ! embouteillée" inutile grâce à 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, à première vue.", has female; Object oil_in_the_bottle "huile" ! embouteillée" inutile grâce à la routine ! de la ligne 54 with name "petrole" "huile" "embouteillee" "lubrifiant" "graisse" "ordinaire", article "de l'", before [; Drink: <>; ], description "Cela me semble être de l'huile ordinaire.", has female; AboveGround In_Forest_1 "Dans la forêt" with description "Vous êtes dans une forêt clairsemée, au bord d'une vallée 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êt" with description "Vous êtes dans une forêt clairsemée, près d'une vallée 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ée" with description "Vous êtes dans une vallée dans la forêt, près 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ètres de large. Plus au sud, le lit est à 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 étroite !", in_to "Vous ne pouvez pas passer par une fissure aussi étroite !"; Object -> "fissure étroite" with name "fissure" "etroite" "quelques" "centimetres" "cm" "large", description "C'est une fissure dans le rocher de quelques centimètres de large, par laquelle le ruisseau s'écoule.", before [; Enter: "Vous ne pouvez pas passer par une fissure aussi étroite !"; ], has female scenery; AboveGround Outside_Grate "Devant la grille" with description "Vous êtes dans une dépression de 6 mètres de profondeur dont le fond est recouvert de boue séchée. Fixée dans la terre, une solide grille d'acier est montée dans du béton. Un lit à sec mène à la dépression.", 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épression de 6 mètres 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 à une grille ordinaire montée dans du béton.", 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ée, mais pas à 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 êtes dans une petite chambre, au-dessous d'une grille d'acier d'un mètre de côté. Un passage bas pavé de pierres rondes mène à l'intérieur, vers l'ouest.", w_to In_Cobble_Crawl, u_to Grate has light; Object "pierres rondes" with description "Ce sont des pavés 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é" with description "Vous rampez sur des pierres rondes dans un passage bas. Il y a une faible lueur à l'extrémité 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ée.", name "cage" "petite", after [; Open: if (little_bird notin self) rfalse; print "(libérant le petit oiseau)^"; <>; ], has container open openable transparent female; Object In_Debris_Room "Dans la salle des débris" with description "Vous êtes dans une salle remplie de débris apportés par les eaux depuis la surface. Le passage bas et profond tapissé de pierres rondes est bouché par la boue et les débris, 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ébris" 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 étoile rouillée à un bout" with description "C'est une baguette noire d'un mètre de long avec une étoile rouillée à un bout.", initial "Une baguette noire d'un mètre de long avec une étoile rouillée à un bout traîne 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 évanoui !"; } 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 à présent la fissure."; } } "Rien ne se produit."; ] has female; Object In_Awkward_Sloping_E_W_Canyon "Canyon est-ouest en pente" with description "Vous êtes dans un canyon est-ouest malaisé 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 à la rivière orange" with description "Vous êtes dans une chambre splendide de neuf mètres de haut. Les murs sont des rivières gelées de pierre orange. Un canyon malaisé et un bon passage mènent à l'est et à 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éré de la cage.)^^"; <>; } Take, Catch: if (self in wicker_cage) "Vous avez déjà le petit oiseau. Si vous le sortez de la cage il risque de s'envoler et de vous échapper."; 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 êtes entré, 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 éclair stupéfiant le fait fuir."; } if (Dragon in location) { remove self; "Le petit oiseau attaque le dragon vert, et en un éclair stupéfiant est réduit en cendres. Les cendres sont emportées 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çonne de préférer 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, à présent. Son corps disparaît."; ], 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ù émanent des lambeaux de brume blanche. Un passage à l'ouest finit ici, seule une petite fissure continue.^^ Des marches de pierre grossières 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 êtes en bas de la fosse avec le cou brisé."; } return In_Hall_Of_Mists; ], before [; Enter: if (noun==PitCrack) "La lézarde est beaucoup trop petite pour vous permettre de poursuivre."; ], has nodwarf; Object -> StepsDown "marches grossières de pierre" with description "Les marches grossières 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ès 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 être trouvée partout mais est fréquemment le signe d'une fosse profonde menant jusqu'à 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 êtes à un bout d'un vaste hall s'étirant à perte de vue vers l'ouest. Il y a des ouvertures de chaque côté. A proximité, un vaste escalier de pierre mène plus bas. Le hall est rempli de lambeaux de brume blanche qui vont et viennent en oscillant presque comme s'ils étaient en vie. Un vent froid remonte de l'escalier. Il y a un passage en haut d'un dôme derrière vous.^^ Des marches grossières en pierre montent vers le dôme.", 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ôme."; return At_Top_Of_Small_Pit; ]; Object -> "vaste escalier de pierre" with description "L'escalier mène plus bas.", name "escalier" "vaste" "pierre" has scenery; Object -> "marches grossières de pierre" with description "Les marches grossières de pierre montent vers le dôme.", name "escalier" "marches" "grossieres" "pierre", has female pluralname scenery multitude; Object -> "dôme" with name "dome", before [; Examine: if (large_gold_nugget in player) "Je ne suis pas sûr 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épite d'or" with description "C'est une grosse et étincelante pépite d'or !", initial "Il y a une grosse et étincelante pépite d'or ici !", name "or" "pepite" "grosse" "lourde", has female; Class FissureRoom with before [; Jump: if (CrystalBridge hasnt absent) "Je vous suggère, sauf votre respect, d'emprunter le pont au lieu de sauter."; deadflag=1; "Vous n'avez pas réussi."; ], d_to "La crevasse est trop terrifiante !"; FissureRoom On_East_Bank_Of_Fissure "Sur la rive est de la crevasse" with description "Vous êtes sur la rive est d'une crevasse tranchant net le hall en deux. La brume est assez épaisse 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ôté ouest de la crevasse" with description "Vous êtes du côté 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é à travers un passage large et très bas, parallèle au hall des brumes et au nord de celui-ci.^"; ]; Treasure -> "diamants" with article "des", !*! probablement inutile description "Il ont l'air d'être de la plus haute qualité !", 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 à présent 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émité ouest du hall des brumes" with description "Vous êtes à l'extrémité 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 à un mètre 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é à travers un passage large et très bas, parallèle 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émité est d'un long hall" with description "Vous êtes à l'extrémité est d'un hall très long apparemment dépourvu de chambres sur les côtés. A l'est monte un passage large et très bas. Au nord un trou rond de 60 cm de diamètre 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émité ouest d'un long hall" with description "Vous êtes à l'extrémité ouest d'un très long hall sans grande particularité. Le hall rejoint un étroit 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 êtes 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 êtes dans le hall du roi de la montagne, comportant des issues dans toutes les directions.", cant_go "Eh bien, à vrai dire, peut-être 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êche de passer."; ]; Object -> Snake "serpent" with description "Je ne l'embêterais pas si j'étais vous.", initial "Un énorme et féroce 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évoré à présent votre oiseau."; } "Il n'y a rien ici qu'il souhaite manger (sauf peut-être vous)."; Attack: "Attaquer le serpent est à la fois infructueux et très 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 êtes dans un passage bas nord-sud près 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 êtes dans la chambre sud.", n_to In_Hall_Of_Mt_King; Treasure -> "bijoux précieux" with description "Ils sont tous assez exquis !", initial "Il y a des bijoux précieux ici !", article "des", !*! probablement inutile name "bijou" "bijoux" "precieux" "exquis", has pluralname; Object In_West_Side_Chamber "Dans la chambre ouest" with description "Vous êtes 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èces rares" with description "Un rêve de numismate !", initial "Il y a beaucoup de pièces 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 êtes dans une grande salle, avec un passage au sud, un passage à l'ouest, et un mur de roche brisée à 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 êtes 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être donnant sur une fosse" with description "Vous êtes à une fenêtre donnant sur une fosse gigantesque, qui s'étend au-dessus à perte de vue. Le sol est indistinctement visible plus de 15 mètres en-dessous. Des traces de brume blanche couvrent le sol de la fosse, devenant plus épaisse à droite. Des marques dans la poussière autour de la fenêtre sembleraient indiquer que quelqu'un a été ici récemment. Directement en face de vous de l'autre côté de la fosse et à 7,5 mètres de distance il y a une fenêtre similaire donnant sur une chambre éclairée. On peut voir une silhouette vague en train de vous scruter.", before [; WaveHands: "La silhouette indistincte vous fait signe également !"; ], cant_go "Le seul passage est celui du retour à 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être" with description "Cela ressemble à une fenêtre habituelle.", name "fenetre" "basse", has openable female; PitScenery "fosse gigantesque" with description "Elle est si profonde que vous pouvez à 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ère" with description "De manière évidente vous n'êtes pas seul ici.", name "marques" "poussiere" has female pluralname multitude; PitScenery "silhouette indistincte" with description "La silhouette indistincte semble être 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 êtes dans un passage sale et abîmé. A l'est se trouve un boyau, à 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 êtes au bord d'une petite fosse propre et praticable. Un boyau mène à 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 êtes au fond d'une petite fosse avec un petit ruisseau, qui entre et sort à 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éreux" with description "Vous êtes dans une grande salle pleine de rochers poussiéreux. Il y a un grand trou dans le sol, des fissures partout, et un passage menant à l'est.", e_to In_Dirty_Passage, d_to At_Complex_Junction; Object -> "rochers poussiéreux" with description "Ce sont seulement des rochers. (Poussiéreux, 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 êtes dans un labyrinthe composé de petits passages en zigzag, tous identiques.", out_to "Plus facile à dire qu'à 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 êtes au bord d'une fosse de neuf mètres avec une colonne massive et orange contre l'un des murs. Vous pourriez descendre par là mais vous risquez de ne pouvoir remonter. Le labyrinthe continue à 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à.", 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 êtes à une jonction complexe. Un passage très bas venu du nord rejoint un boyau plus haut venu de l'est pour pour donner un passage où 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'édredon" with description "Vous êtes dans l'édredon, 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é dans des petits trous environnants et vous vous êtes retrouvé à nouveau dans le passage principal."; if (destiny==0) rfalse; PlayerTo(destiny); rtrue; ]; Object In_Swiss_Cheese_Room "Dans la chambre-gruyère" with description "Vous êtes dans une salle dont les murs ressemblent à du gruyère. Des passages évidents mènent à l'ouest, à l'est, au nord-est, et au nord-ouest. Une partie de la salle est occupée par un grand bloc de roche mère.", 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é dans des petits trous environnants et vous vous êtes retrouvé à nouveau dans le passage principal."; ]; Object -> "bloc de roche mère" with description "C'est juste un énorme bloc.", name "bloc" "roche" "mere" "grand" "enorme", before [; LookUnder, Push, Pull, Take: "Vous plaisantez sûrement."; ], 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émité ouest de la salle aux deux puits" with description "Vous êtes à l'extrémité ouest de la salle aux deux puits. Il y a un grand trou dans le mur au-dessus du puits à 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ètres de haut pointe hors du puits ouest."; "Un plant de haricot géant 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ôté 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 êtes au fond du puits ouest dans la salle aux deux puits. Il y a un grand trou dans le mur à environ huit mètres 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ètres s'étirant vers le haut hors du puits, braillant ~De l'eau !! De l'eau !!~"; HUGE_P: "Il y a un plant gigantesque de haricot s'étirant 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é le long de la plante et êtes 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 être arrachée."; 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ée, 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é 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émité est de la salle aux deux puits" with description "Vous êtes à l'extrémité est de la salle aux deux puits. Le sol est ici encombré 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é 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ûr, vous plaisantez."; ], has scenery multitude pluralname female; Object In_East_Pit "Dans le puits est" with description "Vous êtes au fond du puits est dans la salle aux deux puits. Il y a une petite mare de pétrole dans un coin du puits.", u_to At_East_End_Of_Twopit_Room has nodwarf; Object -> Oil "mare de pétrole" with name "mare" "petrole" "huile" "petite", description "C'est du pétrole, ou si vous préférez de l'huile minérale.", before [; Drink: "Certainement pas."; Take: if (bottle notin player) "Vous n'avez rien où mettre le pétrole."; <>; Insert: if (second == bottle) <>; "Vous n'avez rien où mettre le pétrole."; ], 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ée" with description "Vous êtes dans une chambre circulaire grande et basse dont le sol est une immense dalle tombée du plafond (chambre dallée). A l'est et à 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ène 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ûr, 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 êtes 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 êtes 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 êtes dans un canyon secret à 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éunis.", 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 êtes dans une grande chambre basse. Des boyaux mènent 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 étroit" with description "Vous êtes dans un canyon secret qui ici va d'est en ouest. Il croise un canyon très étroit 4,5 mètres 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 êtes à un endroit large dans un canyon nord-sud très étroit.", 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 étroit 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 êtes dans un grand canyon est-ouest. Un boyau étroit et bas va au nord et semble s'ouvrir au bout d'un mètre.", 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'étend depuis la voûte et rejoint presque le sol en-dessous. Vous pourriez descendre par là, et sauter jusqu'au sol, mais en faisant cela vous seriez incapable de l'atteindre pour remonter en arrière.", 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à, mais en faisant cela vous pouvez renoncer à revenir en arrière.", 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 êtes 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échant. 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échant. 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élicitations ! Vous venez de vaincre un dragon à 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êterais pas si j'étais vous.", name "dragon" "monstre" "bete" "lezard" "enorme" "vert" "feroce" "ecailleux" "geant", initial "Un énorme dragon vert et féroce 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ôt que ça !"; move axe to location; "La hache rebondit, inoffensive, sur les écailles épaisses 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éplacer le dragon !"; ], describe [; if (Dragon in location) "Le dragon est étendu sur le tapis persan !"; "Le tapis persan est étendu sur le sol."; ]; Object DragonCorpse "cadavre du dragon" with initial "Le cadavre d'un énorme dragon vert est allongé sur le côté.", name "cadavre" "mort" "dragon" "corps", before [; Attack: "Vous avez déjà fait assez de dégâts comme ça !"; ], 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é le coffre au trésor du pirate !"; ], has nodwarf; Treasure -> treasure_chest "coffre au trésor" with depositpoints 12, description "C'est le coffre au trésor du pirate, rempli de richesses de toutes sortes !", initial "Le coffre au trésor 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 étroit corridor" with description "Vous êtes dans un corridor long et étroit s'étirant à perte de vue vers l'ouest. A l'extrémité 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 êtes arrivé 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 êtes 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éante" with description "Vous êtes dans la salle géante. Le plafond ici est trop haut pour que votre lampe vous le montre. Des passages caverneux mènent à l'est, au nord, et au sud. Sur le mur ouest est gribouillée 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ée" 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écent" with description "Le passage est ici bloqué par un effondrement récent.", s_to In_Giant_Room; Object In_Immense_N_S_Passage "Immense passage nord-sud" with description "Vous êtes à 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, à grand-peine)^"; } return RustyDoor; ]; Object -> RustyDoor "porte rouillée" with description "C'est juste une grande porte de fer.", name "porte" "charniere" "charnieres" "massive" "rouillee" "fer", when_closed "La voie nord est barrée par une massive porte de fer, rouillée.", when_open "La voie nord passe par une massive porte de fer, rouillée.", door_to In_Cavern_With_Waterfall, door_dir n_to, before [; Open: if (RustyDoor has locked) "Les charnières sont assez profondément rouillées 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ème pour ça -- elle l'est déjà."; Oil: if (bottle in player && oil_in_the_bottle in bottle) { remove oil_in_the_bottle; give RustyDoor ~locked openable; "L'huile a graissé les charnières de telle manière que la porte peut à nouveau bouger, bien que cela nécessite 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ères sont assez profondément rouillées à présent et ne peuvent pas bouger."; } else "Vous n'avez rien pour l'arroser."; ], after [; Open: "La porte s'ouvre en grinçant dans un nuage de rouille."; ], has female static door locked; Object In_Cavern_With_Waterfall "Dans une caverne avec une chûte d'eau" with description "Vous êtes dans une magnifique caverne avec un torrent, qui tombe en cascade en une chûte étincellante pour plonger dans un tourbillon rugissant qui disparaît par un trou dans le sol. Des passages mènent au sud et à l'ouest.", s_to In_Immense_N_S_Passage, w_to At_Steep_Incline; Object -> "chûte d'eau" with description "Je ne descendrais pas là-dedans dans un tonneau !", name "chute" "eau" "tourbillon" "etincelant" has female scenery; Treasure -> trident "trident incrusté" with description "Le trident est couvert de fabuleux joyaux !", initial "Il y a un trident incrusté 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 êtes dans la chambre douce. Les murs sont couverts de lourds rideaux, le sol d'un tapis épais. 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ès bien les bruits.", name "rideau" "rideaux" "lourd" "epais", before [; Take: "Vous n'allez pas vous mettre à tout déchirer !"; LookUnder, Search: "Vous ne trouvez rien d'excitant derrière les rideaux."; ], has pluralname scenery; Object -> "mousse" with description "Cela ressemble juste à 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é 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ène au sud-est, et un boyau très bas mène à 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épeindre 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élicat et précieux vase ming !", name "vase" "ming" "delicat", depositpoints 14, after [; Drop: if (velvet_pillow in location) { print "(venant reposer, délicatement, sur le coussin de velours)^"; rfalse; } remove ming_vase; move shards to location; "Le vase ming tombe et se brise avec un bruit délicat."; ], before [; Attack: remove ming_vase; move shards to location; "Vous avez pris le vase et l'avez précipité délicatement 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é de tessons de potterie sans valeur.", description "Ils semblent être les restes de ce qui était auparavant un beau vase. Je pense que quelque imbécile a dû 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érieur d'une grande caverne. Loin au-dessous, à travers une épaisse brume blanche, d'étranges bruits d'eau peuvent être entendus. La brume s'élève 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ôve" with description "Vous êtes dans une alcôve. Un petit sentier au nord-ouest semble s'élargir après une courte distance. Un tunnel extrêmement étroit mène à l'est. On dirait un pressoir très serré. Une lumière inquiétante peut être vue à 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 êtes dans une petite chambre éclairée par une sinistre lumière verte. Un tunnel extrêmement étroit sort vers l'ouest. Un corridor obscur mène 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 "émeraude 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 émeraude 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 êtes 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ée dans le mur : ~Félicitations pour avoir apporté de la lumière 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ôté !", depositpoints 14, description "La pyramide en platine a 20 cm de côté !", name "platine" "pyramide" "pyramidale", has female; ! ---------------------------------------------------------------------------- ! North of the complex junction: a long up-down corridor ! ---------------------------------------------------------------------------- Object In_Arched_Hall "Hall voûté" with description "Vous êtes dans un hall voûté. Un passage de corail continuait jadis depuis ici en montant vers l'est, mais il est maintenant bloqué par des débris. L'air sent l'eau de mer.", d_to In_Shell_Room; Object In_Shell_Room "Salle au coquillage" with description "Vous êtes dans une grande salle creusée dans la roche sédimentaire. Le sol et les murs sont encombrés de morceaux de coquillages incrustés dans la pierre. Un passage peu profond continue plus bas, et un autre un peu plus raide mène en haut. Un passage bas où 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ître d'un mètre cinquante par là !"; else "Vous ne pouvez pas faire passer cette palourde d'un mètre cinquante par là !"; } return At_Complex_Junction; ]; Object -> giant_bivalve "palourde géante" with name "geante" "palourde" "huitre" "bivalve", describe [; if (self has general) "Il y a ici une énorme huître dont la coquille est étroitement fermée."; "Il y a ici une énorme palourde dont la coquille est étroitement fermée."; ], before [; Examine: if (location==At_Ne_End or At_Sw_End) "Intéressant. On dirait qu'il y a quelque chose d'écrit sous l'huître :^^ ~Ce lieu a quelque chose d'étrange, l'un des mots que j'ai toujours connus a maintenant un nouvel effet.~"; "Un bivalve géant de quelque espèce."; Open: "Vous n'êtes 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ître s'ouvre en grinçant, ne révélant rien d'autre qu'une huître à l'intérieur. 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 être en fait une huître. (Je n'ai jamais été très bon pour identifier les bivalves.) Quoiqu'il en soit, elle s'est à nouveau refermée."; Attack: "La coquille est très 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élabré" with description "Vous êtes dans un long couloir en escalier avec des murs nettement délabrés.", u_to In_Shell_Room, d_to In_A_Cul_De_Sac; Object In_A_Cul_De_Sac "Cul-de-sac" with description "Vous êtes dans un cul-de-sac d'environ deux mètres 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 êtes dans une antichambre menant à un grand passage à l'est. D'autres plus petits vont vers l'ouest et le haut. Les restes d'un creusement récent sont évidents.", 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à de ce point. Vous continuez à vos risques et périls. [Compagnie de Construction Woffortz]~", name "signe" "woffortz" "compagnie" "construction", before [; Take: "C'est suspendu loin au-dessus de votre tête."; ], has static; Object -> "numéros récents de ~Spelunker Today~" with name "magazines" "magazine" "numero" "numeros" "revue" "revues" "spelunker" "today", initial "Il y a ici quelques numéros récents du magazine ~Spelunker Today~.", description "J'ai bien peur que ces magazines ne soient écrits en langage nain.", article "quelques", after [; Take: if (location==At_Witts_End) score--; Drop: if (location==At_Witts_End) { score++; "Vous êtes vraiment au bout de vos forces."; } ], has multitude; Object At_Witts_End "Au bout de Woffortz" with description "Vous êtes au bout de Woffortz. Des passages partent dans *toutes* les directions.", w_to "Vous avez rampé un moment dans des trous étroits et vous avez trouvé votre chemin bloqué par un éboulement récent. Vous êtes à présent de retour dans le passage principal.", before [; Go: if (noun~=w_obj && random(100)<=95) "Vous avez rampé un moment dans des trous étroits et vous vous êtes retrouvé 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 êtes dans un canyon nord-sud d'environ 8 mètres de large. Le sol est couvert de brume blanche suintant depuis le nord. Les murs continuent jusqu'à plus de 30 mètres. Suspendu à quelque point non visible loin au-dessus de vous, un énorme miroir à deux faces est parallèle à et à mi-chemin entre les murs du canyon.^^ Une petite fenêtre peut être vue dans chaque mur, quelques 15 mètres plus haut.", s_to In_Secret_N_S_Canyon_0, n_to At_Reservoir; Object -> "miroir suspendu" with description "Le miroir est manifestement fourni à l'usage des nains qui, comme vous le savez, sont extrêmement vaniteux.", name "miroir" "massif" "enorme" "pendu" "suspendu" "deux" "faces", initial "Le miroir est manifestement fourni à l'usage des nains qui, comme vous le savez, sont extrêmement vaniteux.", before [; Attack, Remove: "Vous ne pouvez pas l'atteindre d'ici."; ], has static; Object At_Window_On_Pit_2 "A une fenêtre donnant sur une fosse" with description "Vous êtes à une fenêtre donnant sur une fosse gigantesque, qui s'étend au-dessus à perte de vue. Le sol est indistinctement visible plus de 15 mètres en-dessous. Des traces de brume blanche couvrent le sol de la fosse, devenant plus épaisse à gauche. Des marques dans la poussière autour de la fenêtre sembleraient indiquer que quelqu'un a été ici récemment. Directement en face de vous de l'autre côté de la fosse et à 7,5 mètres de distance il y a une fenêtre similaire donnant sur une chambre éclairée. On peut voir une silhouette vague en train de vous scruter.", cant_go "Le seul passage retourne vers l'ouest jusqu'à 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 également un signe !"; ]; Object At_Reservoir "Au réservoir" with description "Vous êtes au bord d'un grand réservoir souterrain. Un nuage opaque de brume blanche remplit la pièce et s'élève rapidement. Le lac est alimenté par un ruisseau, qui tombe d'un trou dans le mur environ 3 mètres au-dessus et s'écrase 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ée, et vous seriez rapidement mort de froid."; ]; ! ---------------------------------------------------------------------------- ! The Chasm and the Troll Bridge ! ---------------------------------------------------------------------------- Object In_Sloping_Corridor "Couloir en pente" with description "Vous êtes 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ène en haut ou en bas."; Object On_Sw_Side_Of_Chasm "Du côté sud-ouest de l'abîme" with description "Vous êtes d'un côté d'un grand, d'un profond abîme. Une épaisse brume blanche venue d'en dessous obscurcit toute vue du côté éloigné. Un sentier sud-ouest mène hors de l'abîme 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ère de traverser le pont plutôt que de sauter."; deadflag=1; "Vous n'avez pas réussi."; ]; [ 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ême où vous atteignez l'autre côté, le pont se déforme sous le poids de l'ours, qui était encore en train de vous suivre. Vous cherchez désespérément une prise, mais alors que le pont s'écroule vous trébuchez et tombez dans l'abîme."; } 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 à un pont ordinaire, sauf qu'il est instable.", describe [; print "Un pont de bois branlant s'étend en travers de l'abîme, et s'évanouit dans la brume.^^ Un signe posté 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éros.", initial "Un troll robuste se tient devant le pont et insiste pour que vous lui laissiez un trésor 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ésor 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éclarant, ~C'est du bel ouvrage, mais ce n'est pas assez précieux.~"; Order: "Vous auriez de la chance."; Answer, Ask: "Les trolls ont peu de conversation."; ], has animate; Object Wreckage "décombres du pont" with initial "Les décombres du pont du troll (et un ours mort) peuvent être vus au fond de l'abîme.", name "decombres" "ruine" "pont" "mort" "ours", before [; "Les décombres 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ôté nord-est de l'abîme" with description "Vous êtes du côté éloigné de l'abîme. Un sentier nord-est mène hors de l'abîme de ce côté.", sw_to CrossRicketyBridge, ne_to In_Corridor, before [; Jump: if (RicketyBridge in self) "Sauf votre respect, je vous suggère de traverser le pont plutôt que de sauter."; deadflag=1; "Vous n'avez pas réussi."; ], has nodwarf; Object In_Corridor "Dans le corridor" with description "Vous êtes dans un long corridor est-ouest. Un faible grondement peut être 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ène au nord-est. Un grondement sourd semble devenir plus fort dans cette direction. La bifurcation de droite mène 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 être entendu un grondement régulier, si fort que la caverne toute entière semble trembler. Un autre passage mène au sud, et un autre extrêmement bas mène à 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 à couper le souffle" with description "Vous êtes au bord d'une vue à couper le souffle. Loin en dessous de vous, un volcan en activité, 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 éloignées de la caverne d'un éclat rouge sang, donnant à toute chose une apparence sinistre, macabre. L'air est empli d'étincelles vacillantes de cendre et d'une odeur forte de pierre à feu. Les murs sont chauds au toucher, et le grondement du volcan recouvre tous les autres bruits. Fixées au plafond déchiqueté loin au-dessus de vous, des myriades de formations tourmentées composées de pur albâtre blanc diffusent la lumière trouble en de sinistres apparitions sur les murs. D'un côté une gorge encaissée est remplie par un chaos bizarre de roche torturée qui semble avoir été façonnée par le diable en personne. Une immense rivière de feu sort avec fracas des profondeurs du volcan, continue en brûlant à travers la gorge, et plonge dans un gouffre sans fond loin sur votre gauche. A droite, un immense geyser de vapeur brûlante jaillit continuellement d'une île aride au centre d'un lac sulfureux qui bouillonne, menaçant. Le mur loin à droite est enflammé de sa propre incandescence, ce qui prête une splendeur infernale supplémentaire à la scène déjà diabolique. Un passage sombre et menaçant mène 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é" 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 éloignées de la caverne d'un éclat rouge-sang, donnant à toute chose une apparence sinistre, macabre.", name "volcan" "roche" "activite" "rougeoyant" "sang" "rouge-sang" "rouge" "sinistre" "macabre" has scenery; Object -> "étincelles de cendre" with description "Les étincelles sont trop éloignées de vous pour que vous puissiez les observer correctement.", name "etincelle" "etincelles" "cendre" "air" has female pluralname scenery multitude; Object -> "plafond déchiqueté" with description "Fixées au plafond déchiqueté loin au-dessus de vous sont des myriades de formations tourmentées composées de pur albâtre blanc, qui diffuse la lumière trouble en de sinistres apparitions sur les murs.", name "plafond" "formations" "lumiere" "apparitions" "dechiquete" "tordues" "tourmentees" "trouble" "sinistres" has scenery; Object -> "gorge encaissée" with description "La gorge est emplie d'un bizarre chaos de roche torturée qui semble avoir été travaillée par le diable en personne.", name "gorge" "chaos" "roche" "profonde" "bizarre" "torturee" "encaissee" has female scenery; Object -> "rivière de feu" with description "La rivière de feu sort avec fracas des profondeurs du volcan, continue en brûlant à 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ûlante jaillit continuellement d'une île aride au centre d'un lac sulfureux qui bouillonne, menaçant.", 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 êtes dans une petite chambre remplie de gros rochers. Les murs sont très chauds, rendant l'air dans la salle presque suffocant de chaleur. La seule sortie est un boyau menant à 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 -> "épices rares" with name "epices" "epice" "rares" "exotique", depositpoints 14, article "une sélection 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é de concrétions 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étions calcaires" with description "De temps en temps une forme particulièrement étrange 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échée" with description "Vous êtes à l'entrée d'une grande chambre asséchée. Un panneau est accroché au-dessus de l'entrée : ~ Attention à 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 écrit : ~ Attention à l'ours ! ~", name "panneau" "assechee" "chambre" "attention" has scenery; Object In_Barren_Room "Dans la chambre asséchée" with description "Vous êtes dans une chambre asséchée. Le centre de la salle est complètement vide à l'exception d'un peu de poussière. Des marques dans la poussière mènent à l'extrémité de la chambre la plus éloignée. La seule sortie est par là où vous êtes arrivé.", w_to In_Front_Of_Barren_Room, out_to In_Front_Of_Barren_Room has nodwarf; Object -> "poussière" with description "Cela ressemble à de la poussière 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 êtes suivi par un très grand ours apprivoisé."; if (self.angry) "Un féroce ours des cavernes vous observe depuis l'autre extrémité de la pièce !"; if (location==In_Barren_Room) "Un gentil ours des cavernes est assis paisiblement dans un coin."; "Un ours à 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 être 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 être votre ami."; move axe to location; give axe general; "La hache rate sa cible et atterrit près de l'ours, où 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ès quoi il semble considérablement se calmer et même devenir assez amical."; } if (self.angry == false) "L'ours ne semble pas très intéressé par votre offre."; "Oh-oh -- Votre offre ne fait que rendre l'ours plus en colère !"; Order, Ask, Answer: "C'est un ours avec un très petit cerveau."; ], before [; Examine: print "L'ours est extrêmement grand, "; if (self.angry == false) "mais paraît amical."; "et semble assez féroce !"; Take, Catch: if (self.angry) "Vous plaisantez !"; if (golden_chain has locked) "L'ours est toujours enchaîné au mur."; self.following_you = true; StartDaemon(Bear); "Ok, l'ours vous suit, à présent."; 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çant et s'enfuit à toute allure. L'ours abandonne vite la poursuite et revient tranquillement."; } "L'ours s'éloigne 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ère vous."; ], has animate; Treasure -> golden_chain "chaîne en or" with depositpoints 14, describe [; if (self has locked) "L'ours est retenu par une solide chaîne en or."; "Une solide chaîne en or est étalée sur le sol !"; ], description "La chaîne a d'épais 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ée à l'ours féroce !"; "Elle est attachée à l'ours amical."; } Unlock: if (Bear.angry) "Il n'y a pas moyen d'éviter l'ours pour déverrouiller la chaîne, ce qui vaut probablement mieux."; Lock: if (self hasnt locked) "Le mécanisme ne se referme plus."; ], after [; Unlock: "Vous déverrouillez la chaîne et libérez l'ours apprivoisé."; ], has female lockable locked; ! ---------------------------------------------------------------------------- ! The Different Maze ! ---------------------------------------------------------------------------- Class DiffMazeRoom with short_name "Labyrinthe"; DiffMazeRoom Different_Maze_1 with description "Vous êtes dans un labyrinthe composé de petits passages en zigzag, tous différents.", 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 êtes dans un petit labyrinthe composé de passages zigzaguants, tous différents.", 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 êtes dans un labyrinthe composé de petits passages zigzaguants, tous différents.", 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 êtes dans un petit labyrinthe composé de passages en zigzag, tous différents.", 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 êtes dans un labyrinthe zigzaguant composé de petits passages, tous différents.", 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 êtes dans un petit labyrinthe zigzaguant composé de passages, tous différents.", 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 êtes dans un petit labyrinthe en zigzag composé de passages, tous différents.", 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 êtes dans un labyrinthe en zigzag composé de petits passages, tous différents.", 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 êtes dans un petit labyrinthe en zigzag composé de passages, tous différents.", 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 êtes dans un labyrinthe composé de petits passages zigzaguants, tous différents.", 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 êtes dans un labyrinthe de petits passages en zigzag, tous différents.", 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ès 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ère" with description "Vous lisez le message : ~ Ce n'est pas le labyrinthe où le pirate laisse son coffre au trésor. ~", name "message" "gribouillis" "ecrit" "ecriture" "gribouille" "fleurie", initial "Hmmm... Il y a un message gribouillé dans la poussière dans une écriture fleurie." has scenery; Object -> VendingMachine "distributeur automatique" with description "La notice du distributeur indique : ~ Insérez des pièces 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ès que vous insérez les pièces dans la fente, la machine émet un grincement et un jeu de piles neuves tombe à vos pieds."; } "La machine semble être conçue pour recevoir des pièces."; Attack: "La machine est assez robuste et survit à votre attaque sans prendre une égratignure."; LookUnder: "Vous ne trouvez rien sous la machine."; Search: "Vous ne pouvez entrer dans la machine."; Take: "Le distributeur est beaucoup trop lourd pour être déplacé."; ], has scenery; Object fresh_batteries "batteries neuves" VendingMachine with description "Elles ressemblent à des piles ordinaires. (Une voix sépulcrale 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ées" with description "Elles ressemblent à des piles ordinaires.", initial "Des piles usées ont été abandonnées ici.", name "batteries" "batterie" "pile" "piles" "usees" "usee", before [; Count: "Une paire."; ], has female pluralname; ! ---------------------------------------------------------------------------- ! Dwarves! ! ---------------------------------------------------------------------------- Object dwarf "petit nain menaçant" with name "nain" "menacant" "mauvais" "petit" "mechant" "bonhomme", description "Ce n'est probablement pas une bonne idée de le regarder de trop près. Contentons-nous de remarquer que ce bonhomme est sacrément agressif.", initial "Un petit nain menaçant 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ît, mais d'un seul souffle négligeant le dragon le réduit en fumée !"; } move dwarf to location; "Un petit nain menaçant 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ètement...^"; } 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échante petite hache sur vous, rate son coup, lâche 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échant petit couteau vers vous, "; if (random(1000)<=95) { deadflag=1; "et fait mouche !"; } "mais manque sa cible !"; } if (random(3)==1) { remove dwarf; "^Lassé de tout ceci, le nain se glisse hors d'ici."; } ], before [; Kick: "Vous poursuivez le nain à coups de pieds dans la salle. Il jure, puis se relève 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é un petit nain ! Le corps s'évanouit dans un nuage poisseux de fumée noire."; } move axe to location; "Raté ! 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éressé par votre offre. (La raison étant, peut-être, que s'il vous tue il prend tout ce que vous avez de toute façon.)"; Attack: "Pas à 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 à côté de l'ours."; Take: "Aucune chance. Elles se trouve à côté de l'ours féroce, à portée 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ît, aperçoit 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é derrière vous. En vous retournant, vous voyez un pirate barbu. Il porte un grand coffre.^^ ~Malédiction !~ s'écrie-t-il, ~Je suis découvert ! Je ferais mieux de me retirer dans le labyrinthe pour cacher mon trésor !~^^ Sur ce, il s'évanouit dans l'obscurité."; } 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ère 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ésor et s'évanouit dans l'obscurité."; ]; ! ---------------------------------------------------------------------------- ! 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épulcrale se réverbérant à travers la caverne dit, ~La caverne va bientôt fermer. Tous les aventuriers sont priés de sortir immédiatement 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épulcrale annonce, ~La caverne est maintenant fermée.~ Alors que l'écho s'affaiblit, il y a un flash aveuglant de lumière (et une petite bouffée de fumée orange). . .^^ Alors que vos yeux se réacclimatent, vous regardez autour...^"; PlayerTo(At_Ne_End); ]; ! ---------------------------------------------------------------------------- ! The End Game ! ---------------------------------------------------------------------------- Object At_Ne_End "Extrémité nord-est de l'entrepôt" with description "Vous à l'extrémité nord-est d'une immense salle, encore plus grande que la salle géante. Elle semble être un entrepôt du programme ~ Aventure ~. Des torches massives loin au-dessus de vous baignent la salle dans une lumière jaune enfumée. En vrac peuvent être vus une pile de bouteilles (toutes vides), une nurserie de jeunes plants de haricot murmurant tranquillement, un lit d'huîtres, un paquet de baguettes noires avec des étoiles rouillées au bout, et une collection de lanternes en cuivre. De l'autre côté un grand nombre de nains dorment sur le sol, ronflant bruyamment. Un panneau indique : ~ Ne pas déranger les nains ! ~", sw_to At_Sw_End has light; Object -> "miroir énorme" with description "Il ressemble à un miroir ordinaire, quoique énorme.", name "miroir" "enorme" "gros" "grand" "accroche" "pendu" "vanite", initial "Un immense miroir est accroche a un mur, et s'étend jusqu'à l'autre bout de la salle, où divers autres objets peuvent être vaguement aperçus au loin.", found_in At_Ne_End At_Sw_End, before [; Attack: print "Vous frappez violemment le miroir qui vole en éclats dans un fracas assourdissant.^^"; SleepingDwarves.wake_up(); rtrue; ], has static; Object -> "collection de matériel pour jeux d'aventures" with description "Vous avez déjà vu tout ceci, quoique dans un contexte assez différent.", name "materiel" "torches" "objets" "aventure" "depot" "entrepot" , before [; Take: "Réalisant qu'en enlevant ce butin vous ruineriez le jeu pour les joueurs futurs, vous laissez le matériel de ~ Aventure ~ là où il est."; ], has female scenery; Object -> SleepingDwarves "nains endormis" with description "Je n'embêterais pas les nains si j'étais 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'éveille 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ésultant a réveillé les nains. Il y a maintenant des douzaines de petits nains menaçants dans la salle ! La plupart lancent des couteaux sur vous ! Tous vous atteignent !"; ], has pluralname animate scenery multitude; Object At_Sw_End "Extrémité sud-ouest de l'entrepôt" with description "Vous êtes à l'extrémité sud-ouest de l'entrepôt. D'un côté se trouve une fosse pleine de féroces serpents verts, de l'autre une rangée de petites cages, chacune contenant un petit oiseau maussade. Dans un coin se trouve un paquet de baguettes noires avec des traces de rouille à un bout. Un grand nombre d'oreillers en velours sont éparpillés sur le sol. Un grand miroir s'étend jusqu'au nord-est. A vos pieds se trouve une grande grille en acier, près de laquelle un panneau indique : ~ CHAMBRE FORTE DU TRESOR. Clés 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 à une ordinaire grille en acier.", when_open "La grille est ouverte.", when_closed "La grille est fermée.", door_dir d_to, door_to Outside_Grate, with_key 0 has female static door locked openable; Object -> "collection de matériel pour jeux d'aventures" with description "Vous avez déjà vu tout ceci, quoique dans un contexte assez différent.", name "materiel" "objets" "fosse" "serpent" "serpents" "feroce" "feroces" "vert" "verts" "aventure" "depot" "entrepot" , before [; Take: "Réalisant qu'en enlevant ce butin vous ruineriez le jeu pour les joueurs futurs, vous laissez le matériel de ~ Aventure ~ là où il est."; ], has female scenery; Object -> black_mark_rod "baguette noire avec des traces de rouille à un bout" with description "C'est une baguette noire d'un mètre de long avec des traces de rouille à un bout.", initial "Une baguette noire d'un mètre de long avec des traces de rouille à un bout traîne par là.", 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étendre au rang "; if (score >= 348) "de grand maître aventurier !"; if (score >= 330) "de maître, première classe."; if (score >= 300) "de maître, seconde classe."; if (score >= 200) "de maître."; if (score >= 130) "d'aventurier expérimenté."; if (score >= 100) "d'aventurier expérimenté."; if (score >= 35) "d'aventurier."; if (score >= 10) "de novice."; "d'amateur."; ]; [ DarkToDark; if (dark_warning == false) { dark_warning = true; "Il fait noir à présent. Si vous avancez vous risquez de tomber dans un trou."; } if (random(4) == 1) { deadflag = 1; "Vous êtes tombé dans un trou et vous vous êtes brisé 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é"; } 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ètes. Pour les déplacements, essayez des commandes comme ~entrer~, ~est~, ~ouest~, ~nord~, ~sud~, ~haut~, ~bas~, ~entrer bâtiment~, ~grimper poteau~, etc.^^"; print "Je connais quelques objets spéciaux, comme une baguette noire cachée dans la caverne. Ces objets peuvent être manipulés 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ésirez), mais quelquefois je peux déduire l'objet à 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éviations. 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èmes pour se déplacer ont simplement besoin d'essayer quelques mots de plus. Souvent les gens qui essaient sans réussir de manipuler un objet essayent quelque chose au-delà de leurs (ou de mes !) capacités et devraient essayer une direction complètement différente.^^"; 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ôt, tapez ~quit~. Pour suspendre votre aventure de manière à pouvoir continuer plus tard, tapez ~save~, et pour reprendre un jeu sauvé, tapez ~restore~. Pour savoir si vous vous débrouillez bien, tapez ~score~. Pour obtenir tous les points d'un trésor, vous devez le laisser en sûreté dans le bâtiment, même si vous obtenez une partie des points pour l'avoir simplement trouvé. Vous perdez des points quand vous vous faîtes tuer, ou pour quitter, bien que le premier cas vous coûte plus cher. Il y a aussi des points basés sur le pourcentage (s'il y a lieu) de la caverne que vous avez réussi à explorer ; en particulier, il y a un grand bonus pour être simplement entré (pour distinguer les débutants du reste du lot), et il y a d'autres manières pour déterminer si vous avez franchi quelques unes des sections les plus pénibles.^^"; print "Si vous pensez avoir trouvé tous les trésors, continuez simplement d'explorer un moment. Si rien d'intéressant ne se produit, vous ne les avez pas encore tous trouvés. Si quelque chose d'intéressant se produit, cela signifie que vous avez un bonus ainsi que l'opportunité de gagner beaucoup d'autres points dans la section finale.^^"; "Bonne chance !"; } if (menu_item==2) { print "Le premier aventurier fût sans doute un esclave mulâtre nommé Stephen Bishop, né aux environs de 1820 : `mince, élégant, et très 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éricaine. Sa découverte est légendaire et remonte aux années 1790 ; on dit qu'un chasseur, John Houchin, poursuivant un ours blessé jusqu'à une grande fosse près de Green River, "; print "tomba sur l'entrée. Celle-ci était envahie de chauves-souris et durant la guerre de 1812 fut intensivement exploitée pour son guano, dissout dans des cuves de nitrate pour fabriquer le salpêtre et la poudre à canon. Après la guerre les prix chûtèrent ; mais la caverne devint une petite attraction quand une momie indienne desséchée fut découverte dans les environs, assise verticalement dans un cercueil de pierre, entourée de talismans. En 1815, Fawn Hoof (Sabot de Faon), surnommée ainsi d'après l'une des amulettes, fut emportée par un cirque, attirant des foules dans toute l'Amérique (une tournée qui rappelle assez la chanson de Don McLean : `The Legend of Andrew McCrew'). Elle termina dans le Smithsonian mais dans les années 1820 la caverne fut appelée l'une des merveilles du monde, principalement en raison de ses efforts posthumes.^^"; print "Au début du dix-neuvième siècle les cavernes européennes étaient de grosses attractions touristiques, mais presque personne ne visitait la Mammoth, `merveille du monde' ou pas. Elle n'était pas alors non plus particulièrement grande (le nom vient des mineurs qui se vantaient de leur production monstrueuse de guano). En 1838, le maître de Stephen Bishop racheta la caverne. Stephen, comme on l'appelait invariablement (étant esclave), était à tout point de vue un homme remarquable : auto-didacte en latin et en grec, il devint célèbre en tant que `gouverneur en chef' de son royaume souterrain. Il "; print "explora et nomma une grande partie du réseau pendant son temps libre, doublant en une année la zone connue. La saveur particulière des noms de la caverne - mi-américain, mi-classique - date de Stephen : la rivière Styx, la salle boule de neige, l'avenue de la petite chauve-souris, le dôme géant. Stephen trouva d'étranges poissons aveugles, des serpents, des grillons silencieux, les restes d'ours des cavernes (créatures sauvages et joueuses, de un mètre cinquante de longueur et de un mètre vingt de hauteur, et qui s'éteignirent à la fin de la dernière Glaciation), des oeuvres indiennes vieilles d'un siècle et encore d'autres cavernes. Sa carte de 1842, tracée entièrement de mémoire, était encore utilisée quarante ans plus tard.^^"; print "En tant qu'attraction touristique (et, comme le maître de Stephen était un philanthrope, brièvement sanatorium pour la tuberculose, en raison d'une théorie médicale aujourd'hui invalidée) la caverne devint une affaire florissante : pendant des dizaines d'années les cavernes environnantes furent prises d'assaut et le titre de propriété de la caverne sans cesse contesté. La chaîne voisine, de l'autre côté de Houchins Valley dans Flint Ridge, ouvrit la Grande Caverne d'Onyx en 1912. Dans les années 1920, la Guerre des Cavernes du Kentucky "; print "faisait rage. Des propriétaires rivaux détournaient les touristes avec de faux-policiers, employaient des complices pour semer le chahut dans les visites guidées du concurrent, brûlaient les guichets, faisaient circuler des rumeurs et des publicités falsifiées. 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ée vers l'or des touristes était de toute façon en train de décliner.^^"; print "Convaincus que les cavernes Mammoth et Flint Ridge étaient toutes reliées en une gigantesque chaîne, des explorateurs essayèrent des entrées secrètes pendant des années, et finirent par obtenir un soutien officiel. Durant les années 1960 toutes les connexions de Flint Ridge - des tunnels difficiles et inondés - se terminaient désespérément par des éboulement de rochers. Une physicienne `mince comme un roseau', Patricia Crowther, fit une percée en 1972 quand elle passa par le Tight Spot et trouva un passage boueux : c'était une voie cachée vers la caverne Mammoth.^^"; print "Selon les termes du testament de son maître, Stephen Bishop fut affranchi en 1856, alors que la caverne s'enorgueillissait de 226 avenues, 47 dômes, 23 fosses et 8 chûtes d'eau. Il mourut un an plus tard, avant d'avoir pu racheter sa femme et son fils. Dans les années 1970, le passage boueux de Crowther fut trouvé sur sa carte.^^"; print "La caverne Mammoth est gigantesque, son étendue réelle encore un sujet de spéculation (les estimations varient entre 500 et 800 kilomètres). Bien que ce jeu a souvent été appelé ~Colossal Cave~, il est en réalité une simulation de la région de la caverne Bedquilt. Voici l'histoire de Will Crowther qui nous explique comment c'est arrivé :^^"; print "~Je participais à l'époque à un jeu de rôle (pas sur ordinateur) appelé Donjons et Dragons, et j'explorais activement des cavernes - en particulier la caverne Mammoth au Kentucky. Soudain, j'ai été impliqué dans un divorce, et cela m'a laissé quelque peu désemparé. En particulier mes enfants me manquaient. Aussi les explorations s'arrêtèrent, parce que c'était devenu peu pratique, alors j'ai décidé de faire l'idiot et d'écrire un programme qui serait une re-création en imagination de mes explorations, mais aussi un jeu pour les enfants, et qui rappellerait peut-être quelques aspects du Donjons et Dragons auquel j'avais joué.^^"; print "~Mon intention était de créer 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ées. Mes enfants le trouvèrent très amusant.~ [Extrait de ~Genesis II: Creation and Recreation with Computers~, Dale Peterson (1983).]^^"; print "Le programme original de Crowther écrit en FORTRAN avait cinq trésors tout au plus, mais pas de score à proprement parler. Le but était vraiment d'explorer, encore qu'il y avait l'opposition du serpent par exemple. Comme la véritable région du Bedquilt, la simulation de Crowther avait environ quatre niveaux de profondeur et était riche en détails géologiques. Un bon exemple est la colonne orange qui descend vers la salle du rocher de la Rivière Orange (là où vit l'oiseau) : la vraie colonne est de travertin orange, un superbe minéral que l'on trouve dans le calcaire humide.^^"; print "Le langage du jeu est chargé de références à la spéléologie, aux `domes' [`dômes'] et aux `crawls' [`boyaux']. Une `slab room' [`chambre dallée'], par exemple, est une très vieille caverne dont la voûte a commencé à se fragmenter en écailles aiguës 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égèrement négligé dans le langage "; print "de tous les jours, mais est largement répandu en américain de la spéléologie et remonte à Stephen Bishop : l'usage dans les jeux d'aventure du mot `room' [`salle'] pour signifier `place' [`endroit'] pourrait donc être considéré comme hérité de lui.^^"; print "Le jeu fit un pas décisif vers la résolution d'énigmes quand Don Woods, un étudiant à Stanford, le débogua et l'étendit. Il tripla le nombre de trésors et ajouta les zones non-géologiques : 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ées sur l'édition deWoods à 350 points. (Beaucoup de versions gonflées, corrompues ou améliorées - cela dépend de votre point de vue - du jeu sont en circulation sur Internet, et la manière la plus efficace de les identifier est par le score maximal possible. Beaucoup de versions permettent autour de 400 et 500, et une jusqu'à 1000. Woods lui-même continue de publier de nouvelles versions de son jeu ; la plupart des autres ~étendeurs~ n'ont pas son talent.)^^"; !*!*! print "Bien que le jeu s'est éloigné de la pure simulation, une bonne part reste réaliste. Les explorateurs font vraiment demi-tour quand leur lampes "; !*! carbide print "vacillent ; il y a vraiment des signes mystérieux et des initiales sur les mur de la caverne, certains laissés par les mineurs, d'autres par Bishop, d'autres encore par les explorateurs de 1920. Bien sûr il n'y a pas un volcan en activité au centre du Kentucky, ni des dragons ou des nains. Mais même ces ornements sont, en un sens, dérivés "; print "de la tradition : comme la plupart des premiers jeux de rôles, `Adventure' doit beaucoup au 'Hobbit' de J. R. R. Tolkien, et le passage à travers les montagnes et la Moria du `Seigneur des Anneaux' (probablement le passage le plus dramatique et atmosphérique). Tolkien lui-même, le faiseur de mythes le plus marquant du vingtième siècle, travailla à partir de l'exemple des sagas Islandaises, Finlandaises et Galloises.^^"; print "Vers 1977 des cassettes de `Adventure' circulaient à grande échelle, par le groupe d'utilisateurs Digital appelé DECUS, entre autres : prenant sur leurs repas et leurs week-ends si nécessaire... mais c'est une autre histoire. (le livre fascinant de Tracy Kidder, `The Soul of a New Machine' [l'âme d'une nouvelle machine], évoquant du point de vue d'une journaliste un groupe de développement sur gros ordinateur, capte bien cette ambiance.)^^"; "Ceci est une copie de troisième ou de quatrième main : d'abord l'original de Will Crowther, puis l'édition de Donald Woods à 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 énigmes, objets et lieux de la version originale en 350-points de Woods sont exactement les mêmes ici.^^"; print "J'ai ajouté quelques messages utiles, tels que ~Ceci est un cul-de-sac.~, ici et là : et rétabli quelques messages ~de départ~ des objets, tels que le (assez boiteux)^ ^ Il y a de la bonne nourriture ici.^^ à partir de fichiers source qui sont certainement anciens mais de provenance douteuse. Ils semblent aller bien avec le reste du texte.^^"; print "le système 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ère plus discutable, j'accorde 5 points pour le fait de porter un trésor, comme quelques vieux ports des années 1980. Les grades sont un peu remis en ordre. Le seul changement significatif de règle est que l'on ne peut pas utiliser les mots magiques tant que leur destination n'a pas été visitée.^^"; print "Les nains sont plus simples dans leurs mouvements, mais d'un autre côté j'ai ajouté quelques messages pour les faire interagir mieux avec le reste du jeu. Les probabilités 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éristique, mais avec quelques regrets.^^"; print "Le texte lui-même est presque partout préservé intact, mais j'ai corrigé quelques fautes d'orthographe ou de grammaire (et changé quelques remarques totalement trompeuses et gnomiques). Les instructions ont été légèrement changées (pour des raisons évidentes) mais sont basiquement conservées.^^"; "Une bonne source de détails est le code source de David Baggett, qui circule sur Internet."; } if (menu_item==4) { print "Ne vous étonnez pas si vous n'arrivez pas à obtenir le score maximal de 350 points.^^"; print "En particulier, deux énigmes sont pratiquement infaisables. Il faut dire que je n'arrive toujours pas à comprendre l'une d'entre elles, même en ayant la solution sous les yeux...^^"; print "Cependant le score maximal peut bel et bien être atteint !^^"; "Remarque : je me suis parfois inspiré d'une traduction inachevée de Julien Pieraut."; } print "Saviez-vous que...^^"; print "Les cinq nains ont 96% de chances de vous suivre, sauf à la lumière, dans les fosses ou quand ils s'admirent : et les méchants petits couteaux sont précis à 9.5%.^^"; print "Les dragons brûlent les nains (peut-être 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ès votre résurrection.^^"; print "Vous pouvez éviter le serpent en vous glissant dans le canyon secret est-ouest, 35% du temps. Et marcher dans l'obscurité n'est pas si horrible que ça : vous n'avez que 25% de chances de tomber dans un trou.^^"; print "Le vase n'aime pas être immergé.^^"; print "Les silhouettes indistinctes peuvent se dire bonjour de la main.^^"; print "Mettre de l'eau sur les charnières de la porte les rouille de nouveau.^^"; print "Quand la caverne ferme, on verrouille la grille et on jette les clés, les créatures s'enfuient et le pont de cristal s'évanouit...^^"; print "...et un indice complètement inutile est écrit sur la coquille de l'huître géante à la fin du jeu.^^"; "Le dernier point infect peut être gagné 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éface historique ^ Quelle est l'authenticité de cette édition ? ^ Note du traducteur^", HelpMenu, HelpInfo); else DoMenu("De l'information est disponible sur les sujets suivants :^ ^ Mode d'emploi ^ Une préface historique ^ Quelle est l'authenticité de cette édition ? ^ 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âcher ", (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 évanoui !^"; 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ît 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 être un tout petit peu plus précis que cela."; ]; [ BlastWithSub; if (second~=black_mark_rod) "Faire sauter quelque chose nécessite de la dynamite."; "Vous avez encore mangé de ces bizarres gâteaux au chocolat et aux noix ?"; ]; [ OldMagicSub; "Bon essai, mais c'est un vieux mot magique complètement usé."; ]; [ 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ètres de diamètre apparaît dans le mur lointain, enterrant les nains dans les décombres. Vous marchez à travers le trou et vous retrouvez dans le bureau principal, où une foule enthousiaste d'elfes amicaux portent en triomphe l'aventurier conquérant 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ètres de diamètre apparaît dans le mur lointain, enterrant les serpents dans les décombres. Une rivière de lave en fusion se déverse par le trou, détruisant tout sur son passage, y compris vous !"; } deadflag=1; "Il y a une forte explosion, et vous êtes brutalement dispersé sur les murs de la salle."; ]; ! ---------------------------------------------------------------------------- ! Resurrection ! ---------------------------------------------------------------------------- [ AfterLife o; if (deadflag==3) { deadflag=1; rfalse; } print "^^"; if (caves_closed) "On dirait bien que vous êtes mort. Eh bien, étant donné 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 êtes fait tuer. Je devrais être en mesure de vous aider, mais je n'ai jamais vraiment fait cela auparavant. Voulez-vous que j'essaye de vous réincarner ?^^"; if (deaths==1) print "Espèce de maladroit, vous avez remis cela ! Je ne sais pas combien de temps je peux continuer. Voulez-vous que j'essaye de vous réincarner à nouveau ?^^"; if (deaths==2) print "Cette fois-ci vous avez vraiment réussi votre coup ! Je n'ai plus de fumée orange ! Vous n'attendez pas de moi une réincarnation décente sans fumée orange, n'est-ce pas ?^^"; print "> "; if (YesOrNo() == false) { switch(deaths) { 0: "Très bien."; 1: "Probablement un choix avisé."; 2: "Bien sûr que non !"; } } switch(deaths) { 0: print "D'accord. Mais ne m'en voulez pas si quelque chose va m......^^^^ --- POUF !! ---^^ Vous êtes englouti dans un nuage de fumée orange. Toussant et haletant, vous émergez de la fumée et remarquez que vous êtes....^"; 1: print "Ok, où ai-je mis ma fumée orange ?.... >POUF!< ^^Tout disparaît dans un épais nuage de fumée orange.^"; 2: "Ok, puisque vous êtes si malin, faites-le vous-même ! 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'étendre 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; ! ----------------------------------------------------------------------------