!% ! exemple inspiré de la ORLibrary !% ! *************************************************************** !% ! *** Les deux premières options ci-dessous ont été désactivées !% ! *** car elles sont déjà spécifiées dans le .bat !% ! *** A vous de les activer si vous le souhaitez. !% ! *************************************************************** !% ! Les options ci-dessous sont destinées au compilateur : !% ! +include_path=..\..\bibliotheques !% ! +language_name=French !% !-v5 ! version souhaitée : v5, v8, G, etc... !% !-s ! give statistics !% !-X ! infix (ne pas laisser dans la version publiée ; non disponible avec Glulx) !% !-D ! debug (ne pas laisser dans la version publiée) !% !-r ! imprime le contenu du jeu pour envoi vers un correcteur d'orthographe !% !+transcript_name=gametext.txt ! fichier d'arrivée !% !$MAX_SOURCE_FILES=512 !% !$MAX_INCLUSION_DEPTH=10 !% !$MAX_LABELS=50000 !% !$MAX_INDIV_PROP_TABLE_SIZE=50000 !% !$MAX_STATIC_DATA=20000 !-------------------------------------------- ! Constantes générales !-------------------------------------------- Constant Story "PLIC PLOC"; Constant Headline "^ou Mohive, saoulé des eaux^ Copyright (c) 2007 par Adrien SAURAT.^"; Release 1; Constant DEATH_MENTION_UNDO; Constant MAX_CARRIED = 3; Constant MAX_SCORE = 1; !-------------------------------------------- ! Directives de remplacement !-------------------------------------------- ! [DeathMessage; print "Game Over";]; !-------------------------------------------- ! Attributs !-------------------------------------------- !-------------------------------------------- #Include "Parser"; #Include "VerbLib"; !-------------------------------------------- !-------------------------------------------- ! Variables !-------------------------------------------- !-------------------------------------------- ! Plan des lieux (pièces, portes...) !-------------------------------------------- ! ##### DEBUT PIECE "L'ATELIER" ##### Object piece_atelier "L'atelier" with name 'atelier', description [; print "L'atelier du mage Mangartmery... une vingtaine de mètres carrés surchargés de tonnes de babioles plus ou moins inutiles. Le plafond très bas, ainsi que les hublots indiquant que vous vous trouvez sous l'eau, donnent à l'endroit un certain manque de charme. Le genre de pièce qui donnerait des envies de suicide à n'importe quel claustrophobe normalement constitué.^ Aux quatre coins de la pièce, de petits hauts-parleurs diffusent un enregistrement de la symphonie des planètes, de Gustav Holst. Vous auriez presque pu le pardonner au maître sorcier si l'enregistrement n'était pas de si mauvaise qualité.^ Un peu partout, un bordel monumental, avec de gros tas d'objets non identifiés. Le seul truc qui vous rappelle que vous êtes chez un mage ce sont ces bouquins qui traînent. Pour la reste, hum...^"; ], each_turn [i j; i = random(100); if (i < 20) { j = random(5); switch(j) { 1: print "Un étrange rat de couleur mauve gratte dans un coin de la pièce puis disparaît dans un trou.^"; 2: print "Quelques bips par-ci, quelques blips par là... Les machines du mage Mangartmery n'ont pas l'air bien utile, mais elles ont du style. Un peu.^"; 3: print "Un petit poisson vient se fracasser contre un hublot avant de repartir en zig-zaguant vers les profondeurs.^"; 4: print "Plic... Ploc... Plic... Ploc... Quelques gouttes tombent du plafond. C'est extrèmement rassurant.^"; 5: print "Un long soupir métallique s'échappe des murs de l'atelier, comme s'ils étaient prêts à tout moment à céder sous la pression marine.^"; } } ], compass_look [ obj; switch (obj) { u_obj: "Le plafond est plein de canalisations diverses et de plaques de métal rafistolées à moitié rouillées.^"; d_obj: "Malgré le foutoir, vous arrivez à constater l'existence d'un sol. Sale.^"; n_obj: "Un mur blafard affublé de quelques hublots aux reflets bleutés.^"; e_obj: "Un mur sans interêt.^"; s_obj: "Un mur blafard affublé de quelques hublots aux reflets bleutés.^"; w_obj: "Un mur blafard affublé de quelques hublots aux reflets bleutés.^"; in_obj: "Ah ben ça, pour être dedans, vous êtes dedans. Jusqu'au cou.^"; out_obj: "Comment quitter cet endroit de dingue, telle est la question.^"; } ], e_to piece_balcon, cant_go "Pas d'issue par là.^", has light; Object piece_atelier_ambiance "L'atelier" piece_atelier with react_before [; Smell: if (noun == nothing) "Un florilège d'odeurs chatouille vos narines: eau croupie, moisissure, rats... Oui, un peu comme si vous vous faisiez chatouiller par un troll, c'est vrai.^"; Taste: if (noun == nothing) "Ce n'est pas l'endroit idéal pour balader la langue.^"; Touch: if (noun == nothing) "Tout ici semble si fragile... si délicat... si prêt à vous faire périr dans d'atroces souffrances sous des milliards de tonnes d'eau.^"; Listen: if (noun == nothing) "Magnifique. Ecouter du Holst grésillant sur fond de craquements de sous-marin et de plic-ploc incessant, c'est probablement jouissif quand on a plus rien à attendre de la vie. Manque de pot, vous aimeriez bien revoir le jour et écouter les oiseaux gazouiller.^"; ], has concealed; Object piece_atelier_decor "L'atelier" piece_atelier with name 'atelier' 'trou' 'trous' 'coin' 'coins' 'sol' 'plancher' 'goutte' 'gouttes', description [; DescriptionStandard(); ], has scenery static concealed; Object hublots "hublots" piece_atelier with name 'fenetres' 'fenetre' 'lucarne' 'hublot' 'hublots', description [; print "Pas mal de hublots tous identiques. Vous pouvez voir à travers le fond de la mer, avec sa faune, sa flore, son lourd aspect menaçant... Oui oui, c'est bien la mer, vous n'êtes pas au fond d'une piscine.^"; ], has male scenery concealed pluralname; Object bordel "bordel" piece_atelier with name 'bordel' 'foutoir' 'tas' 'objets' 'amoncellement', description [; print "Incroyable, on pourrait nager dedans tellement c'est fouilli. Le seul truc qui vous marque, c'est ce petit coffret, que vous avez du mal à ouvrir. Connaissant le côté sadique du mage, c'est certainement ça qui contient la baguette magique qui vous sortira de là, hein? Hein???^"; ], before [; print "Incroyable, on pourrait nager dedans tellement c'est fouilli. Le seul truc qui vous marque, c'est ce petit coffret, que vous avez du mal à ouvrir. Connaissant le côté sadique du mage, c'est certainement ça qui contient la baguette magique qui vous sortira de là, hein? Hein???^"; return true; ], has male scenery concealed pluralname; Object livres "livres" piece_atelier with name 'livre' 'livres' 'grimoire' 'grimoires', description [; print "Des tas de bouquins traînent de partout... Le tout parle de biologie, de mécanique, d'alchimie, de magie, de blagues belges... Impossible d'apprendre tout ça maintenant!^ Dans ce foutoir, vous trouvez tout de même quelques infos qui ont été compulsées récemment, cela parle de gelules magiques:^ Gelule bleue -> respiration sous-marine^ Gelule blanche -> étherisation^ Gelule noire -> aveuglement, amélioration des autres sens^ ^ A priori rien d'autre à consulter dans l'urgence!^"; ], has male scenery concealed pluralname; Object coffret "petit coffret" piece_atelier with name 'petit' 'coffret', description "Un petit coffret. Il n'a pas de serrure mais un simple mécanisme avec une clé intégrée, impossible à retirer mais qui a du mal à tourner... ce truc est plus grippé que vous ne l'avez jamais été, même dans les pires hivers. De la rouille, de la rouille, mais il doit bien y avoir un moyen de débloquer ça!^", before [; Rub: "Il doit y avoir moyen de déverrouiller ce truc avec quelque chose de huileux ou de savonneux...^"; ], with_key mousse, has male concealed container openable lockable locked; Object gelule_bleue "gelule bleue" coffret with name 'gelule' 'bleue', description "Une simple gelule d'allure classique... bleue.^", before [; Eat, Drink: deadflag = 3; ], has female edible; Object gelule_noire "gelule noire" coffret with name 'gelule' 'noire', description "Une simple gelule d'allure classique... noire.^", before [; Eat, Drink: deadflag = 4; ], has female edible; Object gelule_blanche "gelule blanche" coffret with name 'gelule' 'blanche', description "Une simple gelule d'allure classique... blanche.^", before [; Eat, Drink: score = score + 1; deadflag = 10; ], has female edible; ! ##### FIN PIECE "L'ATELIER" ##### ! ##### DEBUT PIECE "LE BALCON" ##### Object piece_balcon "Le balcon" with name 'atelier', description [; print "Sympathique, ce... cette... cet endroit qui ressemble à un balcon mais qui au lieu de donner sur une rue donne sur une crevasse sous-marine. Vous ne connaissez pas le prix du mètre carré dans le coin, mais ça doit être assez bon marché. Quoiqu'il en soit, vous êtes protégé de la noyade -et de la dévoration par les requins- par d'épaisses plaques de plexiglas qui forment une sorte de petite véranda. Une vérandette, quoi. Avec un net avantage sur les vérandettes anglaises auquelles vous êtes habitué: ici, on peut aussi voir à travers le sol. Fait étonnant: cel ^"; ], each_turn [i j; i = random(100); if (i < 20) { j = random(5); switch(j) { 1: print "Une gigantesque baleine passe au loin. Avec difficulté, vous résistez à l'envie de lui faire de grands signes.^"; 2: print "Ce requin qui passe et repasse devant vous a-t-il vraiment souri en ricanant ou c'est votre imagination?^"; 3: print "Un gros poisson vient se coller aux vitres quelques secondes, vous essayez de lui gratter le dos mais on dirait qu'à travers le plexiglas il ne sent rien. Le bougre s'en va, déçu.^"; 4: print "Plic... Ploc... Plic... Ploc... Ah ben finalement ça fuit de partout alors. Bien.^"; 5: print "Cette fissure dans la vitre était déjà là tout à l'heure, hein? HEIN? Ouais, ouais... Tout ira bien, tout ira bien.^"; } } ], compass_look [ obj; switch (obj) { u_obj: "De l'eau, des poissons.^"; d_obj: "De l'eau, des poissons.^"; n_obj: "De l'eau, des poissons.^"; e_obj: "De l'eau, des poissons.^"; s_obj: "De l'eau, des poissons.^"; w_obj: "Par là, l'atelier.^"; in_obj: "Par là, l'atelier.^"; out_obj: "Comment quitter cet endroit de dingue, telle est la question.^"; } ], w_to piece_atelier, in_to piece_atelier, cant_go "Pas d'issue par là.^", has light; Object piece_balcon_ambiance "Le balcon" piece_balcon with react_before [; Smell: if (noun == nothing) "Un florilège d'odeurs chatouille vos narines: eau croupie, moisissure, rats... Oui, un peu comme si vous vous faisiez chatouiller par un troll, c'est vrai.^"; Taste: if (noun == nothing) "Ce n'est pas l'endroit idéal pour balader la langue.^"; Touch: if (noun == nothing) "Tout ici semble si fragile... si délicat... si prêt à vous faire périr dans d'atroces souffrances sous des milliards de tonnes d'eau.^"; Listen: if (noun == nothing) "Magnifique. Ecouter du Holst grésillant sur fond de craquements de sous-marin et de plic-ploc incessant, c'est probablement jouissif quand on a plus rien à attendre de la vie. Manque de pot, vous aimeriez bien revoir le jour et écouter les oiseaux gazouiller.^"; ], has concealed; Object piece_balcon_decor "Le balcon" piece_balcon with name 'balcon' 'terrasse' 'terasse' 'veranda' 'verranda' 'sol' 'plancher' 'goutte' 'gouttes', description [; DescriptionStandard(); ], has scenery static concealed; Object vitres "vitres" piece_balcon with name 'fenetres' 'fenetre' 'lucarne' 'hublot' 'hublots' 'plaque' 'plaques' 'vitre' 'vitres' 'verre' 'plexiglas' 'plexi' 'fissure' 'fissures', description [; print "Les plaques de plexiglas sont, il est vrai, dans un état assez pitoyable, il y a même de la mousse qui a poussé un peu partout, preuve de l'incroyable étanchéité du lieu. Mais si ça a tenu si longtemps, pourquoi ça craquerait maintenant, hein? Hein?^"; ], has male scenery concealed pluralname; Object mousse "morceau de mousse" piece_balcon with name 'mousse' 'morceau', description [; print "De la mousse bien verte, bien huileuse, bien puante.^"; ], has male concealed; ! ##### FIN PIECE "LE BALCON" ##### !-------------------------------------------- ! Modèles d'objets (déclarations de classes) !-------------------------------------------- !-------------------------------------------- ! NPCs !-------------------------------------------- !-------------------------------------------- ! Objets déplaçables !-------------------------------------------- !-------------------------------------------- ! Fins possibles !-------------------------------------------- [DeathMessage; switch (deadflag) { 3: print "Vous avalez la gélule bleue, puis attendez quelques instants...^ Des branchies finissent par se développer sur votre cou! Incroyable! Fou de joie, mais toujours prudent, vous vous saisissez d'une chaise dans l'atelier pour la jeter d'une distance respectable vers les parois du balcon, qui n'en demandaient pas plus pour se disloquer. Ivre d'auto-satisfaction, vous ne vous rendez pas compte à quel point l'encombrement de cette saleté d'atelier a de quoi provoquer d'incroyables remous, et ce n'est qu'en arrivant devant le bon Dieu que vous concluez que cette série de coups à la tête reçu pendant votre évasion vous a fait échouer à votre test."; 4: print "Vous avalez la gélule noire, puis attendez quelques instants...^ Votre vue diminue jusqu'à disparaître totalement! Peu coutumier de cet état de fait, vous commencez à tatonner en renversant tout ce qui vous tombe sous la main. Pire, chaque son est amplifié par vos oreilles devenues hyper sensibles, et le fracas qui vous entoure vous envoie la tête la première sur des tas de murs qui se font un plaisir de vous martyriser, ce jusqu'à la rencontre avec le plexiglas du balcon. Les plaques se disloquent et vous êtes immédiatement cloué au sol par un torrent d'eau même pas douce. Heureusement, au bout de quelques instants les remous se calment, permettant au requin qui rôdait par là de vous dévorer tranquillement.^ ^ Perdu...^"; 10: print "Vous avalez la gélule blanche, puis attendez quelques instants...^ Rapidement, vous ne sentez même plus votre ventre. En fait, vous ne le ~voyez~ même plus! Très vite, cette disparition se propage au reste de votre corps... Vous commencez même à vous sentir flotter dans l'air. Essayant d'attraper un objet, vous lui passez à travers! Il n'en faut pas plus pour vous décider de traverser la plafond afin de rejoindre la surface! Difficile... il vous est plus aisé de vous déplacer sur l'axe horizontal... vous passez alors à travers les plaques de plexiglas du balcon, et la rencontre avec un requin de cinq mètres de long vous permet en moins d'une demi-seconde de trouver en vous les ressources nécessaires à un vif déplacement sur le plan vertical!^ Quelques dizaines de mètres plus haut, vous rejoignez enfin la surface. Non loin de là, sur une plage de sable fin, le mage Mangartmery vous attends auprès d'un barbecue.^ ^ Vous avez réussi votre épreuve. Bravo!^"; } ]; !-------------------------------------------- ! Code !-------------------------------------------- [Initialise; player.description = "Mohive Johnson, natif de la banlieue d'Oxford, vous étiez un jeune homme promis à un avenir long et fade. Vous êtes maintenant un jeune homme pas mal engagé vers un avenir pas fade du tout, mais super court, et probablement jamais enterré dans le cimetierre d'Oxford.^"; location=piece_atelier; print "^^^^^^Votre mère vous avait bien dit de vous méfier de ces magiciens itinérants...^ Toujours à passer de cité en cité afin d'y trouver ceux qui sont ~dignes~ d'apprendre leur art. Ah, il est certain qu'une vie de sorcier vous changerait nettement de la vie d'ouvrier que vous avez commencé à mener en suivant les traces de votre père. Mais, à choisir, vous préféreriez volontiers être un ouvrier vivant plutôt qu'un élève mort.^ Malheureusement, vous avez eu ~l'honneur~ d'être remarqué par le mage Stanislaz Mangartmery, et celui-ci vient de vous téléporter dans l'un de ses ateliers, avec pour seule indication avant de partir: ~Petit, si tu arrive à sortir de cet atelier, tu deviendras mon élève! Hmm, si tu arrives à en sortir VIVANT, bien sûr! HAHAHAHAHA HAHAHAHAHAHAHA HAHAHAHAhaa... hmm... qu'est-ce que tu fais encore là? T'étais pas censé te téléporter? ... Ah ben évidemment, j'ai oublié un geste, cette fois ça devrait mar**ZZZIIIIIIIP***~^ ^^^"; return; ]; [DescriptionStandard i; i = random(10); switch(i) { 1: print "Rien d'utile dans votre cas.^"; 2: print "Inutile de s'attarder là dessus.^"; 3: print "Pas vraiment interessant.^"; 4: print "Vous pourrez vous en passer.^"; 5: print "C'est pas ça qui vous aidera à passer le ~test~... Enfin, à vous sauver la vie, déjà.^"; 6: print "Rien de particulier à en dire.^"; 7: print "Est-ce que ce truc finira un jour broyé sous le poids de l'océan? Pensez à autre chose... Penser à autre chose...^"; 8: print "Ah, si seulement... si seulement ça pouvait vous servir. Mais non.^"; 9: print "Ne pas perdre de temps... Ne pas perdre de temps...^"; 10: print "Non, à priori ça ne devrait pas aider.^"; } rtrue; ]; !-------------------------------------------- #Include "FrenchG"; !-------------------------------------------- [ XyzzySub; print "Dites-donc... Vous n'êtes pas encore sorcier!^"; ]; Verb 'xyzzy' 'plugh' 'abracadabra' 'sesame' * -> Xyzzy;