!% -Cu !% -~S !% $OMIT_UNUSED_ROUTINES=1 !% +include_path=./bibliotheques/english,./bibliotheques/francais !% +source_path=./ !% +Language_name=frenchU ! Encodage des caractères du fichier : UTF-8 sans BOM !=============================================================================== ! CELUI QUI VOULAIT DÉCROCHER LES ÉTOILES ! Version 4.0.0 ! Benjamin Roux (Yoruk), 2008 ; Lionel Ange (Auraes), 2019 ! Licence Creative Commons BY-SA 4.0 (CC BY-SA 4.0) ! https://creativecommons.org/licenses/by-sa/4.0/deed.fr ! ! https://ifdb.tads.org/viewgame?id=2tsa74cupbwzxvq !=============================================================================== Constant Story "Celui qui voulait décrocher les étoiles"; Constant Headline "^Écrit par Yoruk.^"; Constant NO_SCORE; Release 4; ! Mots de départ : montagne, étoile, prêtre, fromage. !------------------------------------------------------------------------------- Include "parser"; Include "verblib"; !------------------------------------------------------------------------------- Object FaceMontagne "La montagne" with description "Une immense montagne vous fait face. Vous pouvez grimper à son sommet en continuant au nord, ou bien aller au village. Pour cela, il vous faut poursuivre le petit sentier qui vous a guidé jusqu'ici, c'est-à-dire en continuant à l'est.", Before [; Climb, Enter: if (noun == sentier) rfalse; print "Vous commencez à gravir la montagne,"; Pause(); print "^Après plusieurs heures de marche, vous atteignez enfin le sommet.^"; Playerto(Sommet); rtrue; ], u_to [; << Climb FaceMontagne >>; ], n_to [; << Climb FaceMontagne >>; ], e_to PlaceVillage, cant_go "Pourquoi partir maintenant ? Vous êtes si près du but !", has light; Object sentier "sentier" FaceMontagne with name 'sentier' 'chemin', Before [; Examine: "Un sentier de terre battue, qui continue à l'est."; Enter: if (verb_word == 'aller' or 'suivre') << GO e_obj >>; "Vous feriez mieux de le suivre, il vous mènera au village."; default: << Enter sentier >>; ], has male scenery; Object montagne "montagne" with name 'montagne' 'sommet', description [; if (player in FaceMontagne) "Une gigantesque montagne. Une légende prétend que l'on peut toucher les étoiles lorsqu'on est au sommet."; "Le sommet de la montagne est en grande partie enneigé."; ], found_in FaceMontagne Sommet, has female scenery; Object Sommet "Le sommet" with description "Le sommet de la montagne est en grande partie enneigé. Vous pouvez redescendre en allant au sud.", s_to [; print "Vous redescendez au pied de la montagne"; if (boule in player) { remove boule; print ","; Pause(); print "^La boule de neige se liquéfie au creux de votre main.^"; } else print ".^"; return FaceMontagne; ], d_to [; return self.s_to(); ], before [; Listen: "Vous n'entendez que le murmure essoufflé de votre respiration."; Pray, Think, Smell: print "Vous inspirez profondément..."; Pause(1); if (action_to_be == ##Pray) " et transformez votre prière en méditation."; " en méditant sur la vacuité des êtres et des choses."; Jump: "Bien que vous sautiez haut, l'étoile reste hors d'atteinte."; ], has light; Object neige "neige" Sommet with name 'neige', description "De la neige, probablement éternelle.", Before [; Take: if (boule notin player) { move boule to player; "Vous en faites une belle boule de neige, compacte et légère."; } "Vous en avez assez d'une."; ], has female concealed; Object boule "boule de neige" with parse_name [; if (NextWord() ~= 'boule') return 0; if (NextWord() == 'de' && NextWord() == 'neige') return 3; return 1; ], before [; Examine: "Une belle boule de neige, compact et légère."; Take: rfalse; Throwat: if (second == nothing) { remove boule; "Vous faites un pas glissé et projetez la boule au-delà de l'horizon."; } rfalse; Eat, drink: remove boule; "Ce dessert glacé est rafraîchissant, mais sans grande saveur."; Drop, Insert, PutOn: "Il serait dommage de ne pas la lancer."; default: "Peut-être devriez-vous essayer de la lancer."; ], has female edible; Object etoile "étoile" Sommet with parse_name [; if (NextWord() == 'étoile') return 1; wn--; if (NextWord() == 'petite' && NextWord() == 'étoile') return 2; ], description "Une petite étoile. Elle vous suffira, si toutefois vous parvenez à la prendre...", initial "Une petite étoile brille au-dessus de vous.", before [; Thrownat: "Elle est si proche, vous pourriez la blesser."; Take: if (self has general) { give self ~general; print "Facile, pensez-vous. Vous tendez les bras en l'air.^Un petit saut... vous parvenez à peine à effleurer l'étoile. Celle-ci, probablement craintive, s'est élevée de quelques centimètres. "; } "Elle est maintenant hors d'atteinte."; Search, JumpOver, JumpOn: "Elle est hors d'atteinte."; Jump: "Bien que vous sautiez haut, l'étoile reste hors d'atteinte."; SwitchOn, SwitchOff: "Est-elle morte ou vivante ?"; ], life [; Give: if (self hasnt general) "Elle est si proche et pourtant inaccessible."; << Show noun etoile >>; Show: if (noun == fromage && fromage in player) { Deadflag = 2; remove fromage; print "^Vous tendez le fromage à l'étoile,"; Pause(); print "^Celle-ci, intéressée, s'approche de vous,"; Pause(); print "^Elle s'approche encore. Vous lui donnez finalement le fromage,"; Pause(); print "^L'étoile commence à le grignoter,"; Pause(); print "^Vous en profitez pour l'attraper ! Cela ne semble pas la déranger,"; Pause(); "^Ça y est ! Vous avez réussi à décrocher une étoile. Après avoir voyagé pendant tant de semaines, vous êtes enfin parvenu à réaliser votre rêve !^"; }; default: "Elle semble émettre un léger scintillement."; ], has female animate general; Object PlaceVillage "La place du village" with description "Vous êtes sur la place principale d'un petit village, situé à l'est de la montagne. Divers bâtiments l'entourent : une taverne au nord et une église au sud.", before [; Search: "Rendez-vous dans un lieu précis pour pouvoir effectuer des recherches."; GoIn: noun = random(Taverne, Eglise); << Go noun >>; Listen: "Tout, ici, impose le silence."; ], n_to Taverne, s_to Eglise, w_to FaceMontagne, has light; Object decor PlaceVillage with number 0, parse_name [; self.number = NextWord(); if (self.number == 'bâtiments' or 'bâtiment' or 'taverne' or 'église' or 'place' or 'village') return 1; self.number = 0; ], description "Tous ces lieux semblent abandonnés... bizarre... un village fantôme ?", Before [; Examine: if (self.number == 'place' or 'village') << Look >>; Enter: if (self.number == 'bâtiments' or 'bâtiment') << GoIn >>; if (self.number == 'taverne') << Go n_obj >>; if (self.number == 'église') << Go s_obj >>; Listen: "Un silence de mort émane de ces lieux."; default: "Essayez plutôt d'entrer dans la taverne ou dans l'église."; ], has concealed; Object Taverne "La taverne" with name 'taverne', description "Cet endroit semble abandonné depuis très longtemps. Tous les objets présents ici ont été bousculés, comme si les derniers occupants étaient partis précipitamment.", Before [; Exit: if (de_a_jouer in player) < Throwat de_a_jouer >; Smell: "Une odeur de renfermé, de poussière chaude et de houblon pourri."; ], s_to PlaceVillage, out_to PlaceVillage, has light; Object de_a_jouer "dé à jouer" with parse_name [; if (NextWord() ~= 'dé') return 0; if (NextWord() == 'à//' && NextWord() == 'jouer') return 3; return 1; ], Before [; Examine: "L'une des faces du dé est marquée d'une fleur de lys."; Throwat: remove de_a_jouer; print "Malgré l'interdit prononcé, vous lancez le dé,"; Pause(); print "^Alea jacta est,"; Pause(); "^Hasard ou nécessité, le dé disparaît à jamais."; default: "Vous devriez, peut-être, le lancer."; ], has male transparent general; Object fleur "fleur de lys" de_a_jouer with parse_name [; if (NextWord() ~= 'fleur') return 0; if (NextWord() == 'de' && NextWord() == 'lys') return 3; return 1; ], Before [; Examine: "Flétrissure au fer rouge, irrévocable et infamante."; Rub: "Pour toujours et à jamais."; default: "Vous devriez essayer de lancer le dé."; ], has female concealed; Object desordre "désordre" Taverne with name 'désordre' 'objets' 'objet' 'chaises' 'chaise' 'tables' 'table', description "Un désordre indescriptible. Mais que s'est-il donc passé ici ?", initial "Divers objets traînent ici, au milieu des chaises et des tables renversées.", before [; Search: if (fromage notin self) { if (de_a_jouer has general) { move de_a_jouer to player; give de_a_jouer ~general; "Vous trouvez un dé à jouer six faces."; } "Vous ne trouvez rien d'intéressant parmi tous ces objets."; } move fromage to player; "Parmi les divers objets qui se trouvent ici, vous parvenez à trouver un vieux morceau de fromage. Vous le prenez avec vous."; Take, Push, Pull: "Laissez ces objets à leur propre désordre."; ], has male; Object Eglise "L'église" with description "Cet endroit ressemble à tous les autres lieux de cet étrange village abandonné. Quelques bancs sont entassés derrière l'autel, et les vitraux ont été brisés.", n_to PlaceVillage, out_to PlaceVillage, before [; Enter: if (verb_word == 'asseoir' or 'coucher' or 'allonger') "Vous préférez rester debout."; Pray: print "Vous décidez de prier pour votre famille."; Pause(); "^En espérant qu'ils vont bien."; Listen: "Un silence de mort."; WaveHands: "Le prêtre lève les yeux vers vous. Il vous fixe sans ciller, mais il ne répond rien."; Smell: "Une odeur de vieille église, d'encens protecteur et purificateur."; ], has light; Object bancs "bancs" Eglise with name 'bancs' 'vitraux' 'autel' 'confessionnal' 'banc' 'vitrail', Before [; Examine: "Divers objets pieux. Tous sont en mauvais état."; default: "Tous est en trop mauvais état."; ], has scenery; Object pretre "prêtre" Eglise with name 'prêtre', description "Un prêtre. Il semble le dernier être vivant de cet étrange village...", initial "Un prêtre se tient assis près du confessionnal.", Before [; Search: "Laissez donc ce pauvre prêtre tranquille !"; ], Life [ w; Show: if (noun == fromage) "« Les étoiles adorent le fromage. »"; TalkTo: if (verb_word == 'interroger') "Si vous voulez un renseignement, interrogez-le sur quelque chose de précis."; "Le prêtre lève les yeux vers vous. Il vous fixe sans ciller, mais il ne répond rien."; Ask, Tell: wn = consult_from; while (consult_words) { w = NextWord(); switch (w) { 'montagne', 'sommet', 'légende': "« On ne vous a pas menti. La montagne permet effectivement d'atteindre les étoiles. »"; 'village', 'bâtiment', 'bâtiments', 'taverne', 'église', 'catastrophe': "« Je ne peux rien vous dire. Si vous saviez... Il est parfois préférable de ne pas connaître la vérité. »"; 'étoile', 'étoiles': "« Vous désirez attraper une étoile ? Peu de gens le savent, mais les étoiles raffolent du fromage... »"; 'fromage': if (fromage in player) "« Les étoiles adorent le fromage. Pourquoi ? Je n'en sais rien. La lune n'est-elle pas en fromage ? »"; move fromage to desordre; "« Si vous en cherchez, le meilleur endroit pour en trouver semble être la taverne. »"; } consult_words--; } "Le prêtre ne répond pas. Pourquoi ne pas l'interroger sur un autre sujet ?"; Attack, Kiss: "Laissez donc ce pauvre prêtre tranquille !"; ], has male animate; Object fromage "morceau de fromage" with parse_name [; if (NextWord() == 'fromage') return 1; wn--; if (NextWord() == 'morceau' && NextWord() == 'de' && NextWord() == 'fromage') return 3; ], description "Un beau morceau de fromage de chèvre.", before [; Throwat: if (player in Sommet && second == nothing) { give self ~concealed; move fromage to FaceMontagne; "Vous le lancez si loin qu'il retombe au pied de la montagne."; } rfalse; Eat: if (self has general) "Vous en avez envie, mais il n'est pas d'une propreté irréprochable."; give self concealed; move self to desordre; "Vous mangez le morceau de fromage. Délicieux !"; Smell: "Il sent très fort. Normal pour un vieux morceau de fromage."; Rub: give self ~general; "Vous le débarrassez de la poussière des lieux."; ], After [; Take: "Vous récupérez le morceau de fromage."; Drop, Insert, PutOn, ThrowAt: give self ~concealed; give self general; if (self in Taverne) { give self concealed; move self to desordre; "Avec tous ce désordre, cela va être difficile de le retrouver."; } "Vous vous débarrassez du fromage."; ], has male concealed edible general; !------------------------------------------------------------------------------- [ XyzzySub; "Ce jeu est dédicacé à tous ceux qui n'ont pas oublié leur âme d'enfant !"; ]; [ InfosSub i; i = i; print "Celui qui voulait décrocher les étoiles, version "; #Ifdef TARGET_ZCODE; print (HDR_GAMERELEASE-->0) & $03ff; #Ifnot; ! TARGET_GLULX; @aloads ROM_GAMERELEASE 0 i; print i; #Endif; ", a été écrit en deux heures par Yoruk (Benjamin Roux) le vendredi 25 janvier 2008.^^Note de l'auteur : « J'avais deux heures de libres dans mon après midi. J'en ai profité pour m'organiser une petite Rapid'Fiction : réaliser en deux heures un jeu fonctionnel en utilisant les mots suivants : montagne, étoile, prêtre, fromage. Deux heures plus tard, j'ai terminé ce jeu. Bon amusement ! »"; ]; [ Pause f; KeyDelay(12); if (~~f) new_line; ]; [ Initialise; inventory_style = ENGLISH_BIT+FULLINV_BIT+RECURSE_BIT; no_implicit_actions = true; location = FaceMontagne; lookmode = 2; "^Après avoir marché plusieurs jours dans des contrées lointaines, vous êtes enfin arrivé au pied de la montagne. LA montagne, celle qui est, soi-disant, tellement haute que l'on peut toucher les étoiles lorsqu'on est au sommet."; ]; !------------------------------------------------------------------------------- Include "frenchgU"; !------------------------------------------------------------------------------- [ TalkToSub; if (noun == actor) return L__M(##Tell, 1, noun); if (RunLife(noun, ##TalkTo)) return; L__M(##Tell, 2, noun); ]; Verb 'essuyer' * noun -> Rub; Verb 'suivre' * noun -> Enter; Verb 'décrocher' 'attraper' * noun -> Take; Verb 'xyzzy' * -> xyzzy; Verb 'aide' 'sos' 'manuel' 'infos' 'info' * -> Infos; Extend 'parler' first * 'à'/'au'/'aux'/'avec' creature-> TalkTo; Extend 'interroger' first * creature -> TalkTo; !---FIN DE FICHIER------