!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! CIA Adventure - Original Author Unknown ! Ported from CPMNET BBS to GWBASIC by Pete Wohlmut in 1982 ! Ported to Inform by J. Kevin Thomas in 1996 (jkthomas@unity.ncsu.edu) ! ! See the end of this source for porter's notes. !______________________________________________________________________________ Switches v5; Constant Story "C.I.A. Aventure"; Constant Headline "^Auteur Original Inconnu.^ Version TRS-80 sur CPMNET BBS de GWBASIC par Pete Wohlmut (1982)^ De Inform par J. Kevin Thomas (jkthomas@@64unity.ncsu.edu)^ Traduit en Français par Sabine Gorecki avec la collaboration de Jean-Luc Pontico^ Quelques corrections et finitions par Samuel Verschelde (Stormi)^"; Release 2; Constant MAX_CARRIED 5; ! Constant DEBUG; Include "Parser"; Include "VerbLib"; global elevator_at = 1; ! Etage ou est place l'elevateur. global combo; ! combinaison nombre pour la serrure. global sleep_for; ! Le garde sera endormi pour beaucoup de ces tournures. Attribute hidden; ! Objet cache dans CiaRoom (like 'concealed'). Attribute poisoned; ! Garde boit la tasse? On, yes. Off, no. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! CiaRoom class, which was taken from Graham Nelson's ScottRoom class in his ! port of Adventureland, with some minor changes of my own. !______________________________________________________________________________ Class CiaRoom with initial [; give self ~visited; ], describe [ i c d; print (string) self.description; objectloop (i in self) if (i ~= player) { c++; give i concealed; } if (c~=0) { objectloop (i in self) if (i ~= player) { if (i hasnt hidden) print "^Vous pouvez voir ", (a) i, "."; } } c=0; d=0; for (i=n_to: i<=d_to: i++) if (self.i ~= 0) c++; if (c>1) print "^^Sorties évidentes : "; else print "^^Sortie évidente : "; if (c==0) print "Aucune !"; else { for (i=n_to: i<=d_to: i++) if (self.i ~= 0) { if (d++>0) print " "; if (i==n_to) print "Nord"; if (i==s_to) print "Sud"; if (i==e_to) print "Est"; if (i==w_to) print "Ouest"; if (i==u_to) print "Haut"; if (i==d_to) print "Bas"; } print "."; } new_line; ], each_turn [; if (turns==400) { deadflag = 1; "^Oh Non ! Ils vous ont attrapé ! Ils vous tirent dessus !"; } if (turns ~= 400 && turns >= 375) { print "^Vous pensez qu'ils sont pas loin... Vous entendez des bruits.^"; } ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Busy Street !______________________________________________________________________________ Object Busy_Street "Rue à grande circulation" class CiaRoom with description "Vous êtes dans une rue à grande circulation.", s_to Building; Object -> Building "grand immeuble de bureaux" with name "building" "immeuble" "bureau" "bureaux", door_to Lobby, door_dir s_to, has open door static; Object Badge "badge de la C.I.A." with name "badge" "CIA"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Lobby !______________________________________________________________________________ Object Lobby "Hall" class CiaRoom with description "Vous êtes dans le hall de l'immeuble.", after [; Go: if (badge in player) { ; print "^Le portier regarde votre badge et vous jette dehors.^"; PlayerTo(Busy_Street, 2); rtrue; } ], n_to Busy_Street, e_to Dingy, w_to Visitors, s_to Sliding_Doors; ! This /has/ to be the silliest puzzle of the game - giving you an object ! and forcing you to drop it on your first turn. Crazy. Object -> Sculpture "sculpture" with name "sculpture", before [; Open: if (self has openable && self hasnt general) { move Quarter to location; move Blank_Card to location; give self ~openable general; "Vous ouvrez la sculpture, et deux objets en tombent !"; } "Vous essayez, mais vous n'y arrivez pas."; ], has static female; Object -> -> Quarter "jeton" with name "jeton", before [; Insert: if (second==Coffee_Maker && self in player) { move Cup to location; remove self; "Pop ! Une tasse de café sort de la machine."; } ]; Object -> -> Blank_Card "carte blanche" with name "blanche" "carte", before [; Insert: if (Guard in location && guard hasnt general) { "Le garde ne vous laissera pas faire !"; } if (Slit in location && second == Slit) { move Lock to location; remove Blank_Card; "Coup sec ! Une section du mur s'ouvre... ^Révélant quelque chose de très interessant."; } ], has female; Object -> Sliding_Doors "portes coulissantes" with name "porte" "portes" "coulissante" "coulissantes", description "Il y a un bouton près des portes.", before [; Open: "Vous n'y arrivez pas."; Close: "Aucun intérêt."; ], door_to Elevator, door_dir s_to, has static door female pluralname; Object -> Call_Button "bouton d'appel" with name "bouton" "appel", before [; Push: if (Sliding_Doors hasnt open) { give Sliding_Doors open; "Les portes glissent sur les côtés et s'ouvrent avec un léger bruit !"; } "Les portes sont déjà ouvertes."; ], has static scenery hidden; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Elevator !______________________________________________________________________________ Object Elevator "Petite pièce" class CiaRoom with description "Vous êtes dans une petite pièce.", n_to [; if (elevator_at==1) return Lobby; if (elevator_at==2) return Hallway; if (elevator_at==3) return Short_Corridor; ]; Object -> Button_Panel "panneau de boutons marqués 'premier', 'second' et 'troisième'" with name "panneau", has static; Object -> Button_1 "premier bouton" with name "bouton" "premier" "un", before [; Push: if (elevator_at == 1) "Vous appuyez sur le bouton, mais rien ne se produit."; elevator_at = 1; "Les portes se ferment et vous avez l'impression que la pièce se déplace.^Soudain les portes s'ouvrent à nouveau."; ], has static scenery hidden; Object -> Button_2 "second bouton" with name "bouton" "second" "deuxieme" "deux", before [; Push: if (elevator_at == 2) "Vous appuyez sur le bouton, mais rien ne se produit."; elevator_at = 2; "Les portes se ferment et vous avez l'impression que la pièce se déplace.^Soudain les portes s'ouvrent à nouveau."; ], has static scenery hidden; Object -> Button_3 "troisième bouton" with name "bouton" "troisieme" "trois", before [; Push: if (elevator_at == 3) "Vous appuyez sur le bouton, mais rien ne se produit."; elevator_at = 3; "Les portes se ferment et vous avez l'impression que la pièce se déplace.^Soudain les portes s'ouvrent à nouveau."; ], has static scenery hidden; Object -> Old_Key "vieille clef" with name "clé" "vieille" "clef", has female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Visitor's Room !______________________________________________________________________________ Object Visitors "Salle d'attente" class CiaRoom with description "Vous êtes dans une salle d'attente.", e_to Lobby; Object -> VCR "magnétoscope" with name "magnetoscope" "magneto" "VCR", description [; if (Battery notin self) { "Il n'est pas alimenté en électricité."; } if (Battery in self && TV hasnt general) { "Il n'est connecté à aucune télévision."; } "Le magnétoscope est maintenant connecté à la télévision."; ], before [; Tie: if (second == TV) <>; if (second == false) "Il n'y a pas de prise de courant."; ], has static transparent; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Dingy Anteroom !______________________________________________________________________________ Object Dingy "Antichambre Sombre" class CiaRoom with description "Vous êtes dans l'antichambre.", w_to Lobby, e_to Dingy_Door; Object -> Dingy_Door "porte" with name "porte", door_dir e_to, door_to Pres_Office, before [; Unlock: <>; Open: if (Old_Key in player) { if (self has open) "Elle est déjà ouverte."; give Dingy_Door open; "O.K. Vous ouvrez la porte."; } "Elle est verrouillée !"; Close: "Aucun intérêt."; ], has static door female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! President's Office !______________________________________________________________________________ Object Pres_Office "Bureau du Directeur" class CiaRoom with description "Vous êtes dans le bureau du directeur.", w_to Dingy; Object -> Desk "bureau d'acajou" with name "bureau" "acajou", description [; if (Drawer has static) "Vous remarquez qu'il a un tiroir sur le côté."; "Rien de particulier concernant le bureau d'acajou."; ], has static; Object -> Drawer "tiroir" with name "tiroir", description [; if (self hasnt static) "Le tiroir est ouvert."; "Cela semble fragile."; ], before [; Take, Push, Pull: if (self hasnt static) "Il est un peu trop encombrant et sans utilité."; "Il est dans le bureau et fermé."; Attack: if (Weight in player && Drawer has static) { move Notebook to location; move Battery to location; give self ~static ~hidden; "C'est dur... Mais vous le cassez. Deux choses tombent."; } "Vous essayez, mais vous n'y arrivez pas."; Open: if (self has hidden) "C'est coincé !"; "Il est déjà ouvert"; Close : "Aucun intérêt."; ], has static hidden; Object -> Weight "presse papier" with name "presse" "papier", description "Cela semble lourd."; Object -> -> Notebook "calepin" with name "calepin", description [; if (self hasnt general) give self general; "Il est écrit : ~Nous avons découvert un des mots secrets du CHAOS. C'est : BOND007. Doit être utilisé dans une situation -de goût-.~"; ]; Object -> -> Battery "large batterie" with name "batterie" "large", before [; Insert: if (second==VCR && VCR in location) { move self to VCR; "Vous mettez la batterie dans le magnétoscope."; } Take, Remove: if (self in VCR) "La batterie est plus utile dans le magnétoscope."; ], has female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Hallway !______________________________________________________________________________ Object Hallway "Vestibule" class CiaRoom with description "Vous êtes dans le vestibule.", s_to Elevator, w_to Security_Office, e_to Cafeteria; Object -> Coffee_Maker "machine à café" with name "machine" "café", has static female; Object -> -> Cup "tasse de café chaud" with name "tasse" "chaud" "vapeur" "café", description "Cela semble fragile.", before [; Drop: remove Cup; "Vous posez la tasse et elle se casse en mille morceaux.^Le café imbibe le sol."; ], has female; ! The cup originally had no description, but I added the 'fragile' part ! to make the 'dropping the cup' rule more fair. Always helpful to have ! hints. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Security Office !______________________________________________________________________________ Object Security_Office "Bureau de la sécurité" class CiaRoom with description "Vous êtes dans le bureau de la sécurité.", e_to Hallway; Object -> TV "télévision portable" with name "tv" "tele" "television" "portable", description [; if (self has general && Tape in VCR && Battery in VCR) { if (sculpture hasnt general) give sculpture openable; "La bande déroule le message suivant:^^~Nous avons découvert un nombre qui vous aidera. Ce nombre est: ", combo, ". Attention aux pièges cachés. Par ailleurs, il y a quelque chose dans la sculpture.~"; } "L'écran est noir."; ], before [; Tie: if (second==VCR or false && location==Visitors && self hasnt general) { give self general; print "Vous connectez la TV au magnetoscope"; if (self in player) { move self to location; print " puis vous la posez.^"; rtrue; } else print ".^"; rtrue; } if (second == VCR or false && location == Visitors && self has general) { "Vous l'avez déjà fait."; } if (second ~= false) "Vous ne pouvez pas connecter la TV a cela."; Take: if (self has general) { give self ~general; print "Vous déconnectez la TV du magnetoscope.^"; } ], has female; Object -> Monitor1 "rangée de moniteurs" with name "rangee" "moniteur" "moniteurs", description [; if (Large_Button hasnt general) { "Sur un des moniteurs, vous voyez une fosse de métal de 1000 pieds de profondeur. De l'autre côté de la fosse, vous voyez un grand crochet."; } "L'écran est noir."; ], has static female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cafeteria !______________________________________________________________________________ Object Cafeteria "Cafétéria" class CiaRoom with description "Vous êtes dans la cafétéria.", n_to Closet_Door, w_to Hallway; Object -> Closet_Door "porte" with name "porte", door_dir w_to, door_to Closet, before [; Unlock: <>; Open: if (Old_Key in player) { if (self has open) "Elle est déjà ouverte."; give self open; "O.K. Vous avez ouvert la porte."; } else "Elle est verrouillée!"; Close: "Aucun intérêt."; ], has static door female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Closet !______________________________________________________________________________ Object Closet "Cabinet" class CiaRoom with description "Vous êtes dans un cabinet de maintenance.", s_to Cafeteria; Object -> Bag "sac en plastique" with name "plastique" "sac", description "C'est un sac très solide. Il est fermé.", before [; Cut: if (Razor in player) { move Tape to location; remove self; "Crac ! Le sac se déchire et quelque chose en tombe !"; } "Vous n'avez rien d'assez acéré."; Open, Attack: "Vous ne pouvez pas. C'est trop solide."; ]; Object -> -> Tape "bande vidéo" with name "bande" "video", before [; Insert: if (second==VCR && VCR in location) { move Tape to VCR; "Vous mettez la bande vidéo dans le magnetoscope."; } Take: if (self in VCR) { "La bande est plus utile dans le magnétoscope."; } ], has female; Object -> Broom "balai" with name "balai"; Object -> Dustpan "pelle à poussière" with name "pelle" "poussiere", has female; Object -> Gloves "paire de gants en caoutchouc" with name "gants" "gant" "caoutchouc" "paire" "en", has clothing female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Short Corridor !______________________________________________________________________________ Object Short_Corridor "Petit couloir" class CiaRoom with description "Vous êtes dans un petit couloir.", after [; Go: if (Guard hasnt general && ID_Card notin player) { ; print "Le garde vous regarde soupçonneusement et vous rejette ensuite en arrière.^"; PlayerTo(Elevator, 2); rtrue; } if (Guard hasnt general && Cup in player && Cup has general) { give Guard general poisoned; remove Cup; Guard.short_name = "garde endormi"; StartDaemon(Guard); "Le garde prend votre café et le boit. Il s'endort sur le champ."; } ! Ajout de Samuel : pas de raison qu'il ne boive pas la tasse ! quand elle n'est pas empoisonnée, en revanche on accélère la ! venue de la fin du jeu if (Guard hasnt general && Cup in player) { remove Cup; turns = 373; "Le garde prend votre café et le boit."; } ], w_to Elevator, s_to Side_Corridor, e_to Solid_Door; Object -> Solid_Door "porte blindée" with name "porte" "blindee" "blindée", description "Il y a une petite fente à côté de la porte.", before [; Open: "Vous n'y arrivez pas. Cela ne fonctionne pas."; Close: "Aucun intérêt."; ], door_to Metal_Hall, door_dir e_to, has static door locked female; Object -> Guard "garde de sécurité" with name "garde" "sécurité" "securite", short_name "garde", react_before [; if (self hasnt general && self has poisoned) { deadflag = 1; "Le garde sort son arme à feu et vous tue !"; } ], daemon [ t ; t = sleep_for - 1; sleep_for = t; if (t==1 && location==Short_Corridor) { print "^Vous entendez quelqu'un qui baille.^"; } if (t==0) { StopDaemon(self); give self ~general; Guard.short_name = "garde"; if (location==Short_Corridor) {print "^Le garde se réveille !^";} } ], has animate; Object -> Slit "fente" with name "fente", has static hidden female; Object -> -> Lock "digicode électronique" with name "digicode" "electronique" "serrure", before [; SetTo: print "Vous composez ", second, ".^"; if (second == combo) { remove Lock; give Solid_Door open ~locked; "^La porte s'ouvre lentement..."; } "Votre combinaison n'est pas bonne!"; ], has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Metal_Hall !______________________________________________________________________________ Object Metal_Hall "Hall de Métal" class CiaRoom with description "Vous êtes dans un couloir fait de métal.", after [; Go: if (Lever hasnt general) { ; deadflag = 1; "Le sol est alimenté en électricité ! Vous êtes électrocuté !"; } ], e_to Plain, w_to Short_Corridor; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Plain Room marquepage !______________________________________________________________________________ Object Plain "Pièce éclairé" class CiaRoom with description "Vous êtes dans une petite Pièce éclairé.", n_to Cubicle, w_to Metal_Hall; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cubicle !______________________________________________________________________________ Object Cubicle "Cabine" class CiaRoom with description "Vous êtes dans une petite cabine insonorisée.", after [; Go: if (Large_Button hasnt general) { ; deadflag = 1; "Une sirène d'alarme hurle autour de vous ! Des gardes vous encerclent et vous tirent dessus !"; } ; "Une porte secrète claque et se ferme derrière vous !"; ]; Object -> Case "boîte en verre sur un piedestal" with name "boite" "verre" "piedestal" "conteneur", description [; if (Ruby in self) "Vous pouvez voir une pierre brillante à l'intérieur."; "La boîte est vide."; ], before [; Cut: if (Razor in player && Ruby in self) { move Ruby to player; "Vous coupez le verre et retirez une pierre brillante de son conteneur : c'est un gros rubis !"; } "Vous essayez, mais vous n'y arrivez pas."; Open : if (Ruby in self) "Il n'y a aucune ouverture."; "Vous y avez déjà fait un trou."; ! Samuel : ajout d'un indice pour le joueur pour l'énigme du rasoir Attack: if (Ruby in self) "Il doit s'agir d'un matériau spécial car vous ne parvenez pas à le casser en frappant. En revanche vous remarquez que vos tentatives ont laissé de légères entailles. Peut-être est-il possible d'y parvenir autrement ?"; "Vous y avez déjà fait un trou."; ], has static female; Object -> -> Ruby "très gros rubis" with name "gros" "rubis"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Side Corridor !______________________________________________________________________________ Object Side_Corridor "Couloir de côté" class CiaRoom with description "Vous êtes dans un couloir de côté.", n_to Short_Corridor, e_to Gen_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Gen_Room !______________________________________________________________________________ Object Gen_Room "Salle de générateur" class CiaRoom with description "Vous êtes dans la salle de générateur électrique.", w_to Side_Corridor; Object -> Square "petite plaque de métal sur le mur." with name "plaque" "metal" "mur", before [; Push, Pull, Touch: if (Gloves hasnt worn && lever hasnt general) { deadflag = 1; "Vous recevez une forte décharge électrique en touchant la plaque ! ^Vos cheveux se dressent droit sur votre tête ! Vous êtes électrocuté !"; } ], has static female; Object -> Lever "levier sur la plaque" with name "levier", before [; Push, Pull: if (Gloves has worn && self hasnt general) { give self general; "Le levier monte et vous entendez un déclic... ^Quelque chose semble différent maintenant."; } if (self has general) { give self ~general; "Le levier descend et vous entendez un déclic... ^Quelque chose semble différent maintenant."; } deadflag = 1; "Vous recevez une forte décharge électrique en touchant le levier ! ^Vos cheveux se dressent droit sur votre tête ! Vous êtes électrocuté !"; ], has static; Object -> Square_Sign "inscription sur la plaque" with name "inscription" "message", description "L'inscription dit : ATTENTION DANGER!", has static female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Basement !______________________________________________________________________________ Object Basement "Sous sol" class CiaRoom with description "Vous êtes dans un sous-sol.", e_to Complex; Object -> Rope "corde de nylon solide" with name "corde" "nylon" "solide", before [; ThrowAt: if (second==Hook && location==Ledge) { move Rope to Ledge; give Rope door open; Ledge.in_to=Rope; Ledge.s_to=Rope; self.door_dir=in_to; self.door_to=Other_Side; "Vous jetez la corde et elle s'accroche sur le crochet."; } Take: if (Rope has door) { give Rope ~door ~open; Rope.door_dir=0; self.door_to=0; Ledge.in_to=0; Ledge.s_to=0; } Swing, Climb : if (Rope has door) <>; ], door_to 0, door_dir 0, has female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Complex !______________________________________________________________________________ Object Complex "Entrée du Complexe Secret" class CiaRoom with description "Vous êtes dans l'entrée du complexe secret.", w_to Basement, s_to Ledge, e_to Monitoring_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Monitoring_Room !______________________________________________________________________________ Object Monitoring_Room "Salle de contrôle" class CiaRoom with description "Vous êtes dans une salle de contrôle secrète.", w_to Complex; Object -> Bank "banque de moniteurs" with name "banque" "moniteur" "moniteurs", description "Vous y voyez une salle qui contient un piédestal supportant une boîte en verre.", has static female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Ledge ! faudrait modifier la description du crochet il appararait en tapant: r fosse ! faudrait mettre un truc comme chercher ou qu'il soit carrement visible ou autre ! Samuel : cela fait partie de l'énigme qu'il soit caché. ! J'ai ajouté cependant une description explicative sur le crochet !______________________________________________________________________________ Object Ledge "Rebord" class CiaRoom with description "Vous êtes sur un rebord devant une fosse de métal de 1000 pieds de profondeur.", n_to Complex, in_to 0, s_to 0; Object -> Hook "crochet" with name "crochet", description [; "Peu visible depuis votre position, vous ne distinguez le crochet que parce que vous connaissez son existence."; ], before [; Take: "Vous ne pouvez pas l'atteindre."; ], has static scenery hidden; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Other_Side of ledge. !______________________________________________________________________________ Object Other_Side "Autre Côté" class CiaRoom with description "Vous êtes de l'autre côté de la fosse.", e_to Long_Corridor; Object -> Hook_Rope "grand crochet auquel une corde est accrochée" with name "crochet" "corde" "grand", before [; Take, Go: "Vous ne pouvez pas l'atteindre."; ], has static scenery; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Long Corridor !______________________________________________________________________________ Object Long_Corridor "Long Couloir" class CiaRoom with description "Vous êtes dans un long couloir.", w_to Other_Side, s_to Narrow, e_to Large_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Narrow !______________________________________________________________________________ Object Narrow "Couloir étroit" class CiaRoom with description "Vous êtes dans un couloir étroit.", n_to Long_Corridor, s_to Lab; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Lab !______________________________________________________________________________ Object Lab "Laboratoire Secret" class CiaRoom with description "Vous êtes dans un laboratoire secret.", n_to Narrow; Object -> Box "boîte avec un petit bouton dessus" with name "boite" "bouton" "petit", before [; Push: print "Vous poussez le bouton sur la boîte et...^"; if (location == Cubicle || location == Control) { print "Il se produit un flash aveuglant !^"; PlayerTo(Busy_Street,2); if (Ruby in Player) { deadflag = 2; "^^Hourra ! Vous avez retrouvé le rubis !"; } rtrue; } "Rien ne se passe."; ], has female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Large Room !______________________________________________________________________________ Object Large_Room "Large Salle" class CiaRoom with description "Vous êtes dans une large salle.", w_to Long_Corridor, s_to Cross_Exam; Object -> Painting "petite peinture" with name "petite" "peinture" "chacal", description "C'est l'image d'un chacal souriant.", after [; Take, Push: if (Pill in self) { move Pill to location; "Quelque chose est tombé du cadre !"; } ], has female; Object -> -> Pill "petite pilule" with name "capsule" "petite" "pilule", before [; Insert: if (second==Cup && Pill in player) { remove Pill; give Cup general; "Vous mettez la petite pilule dans la tasse de café fumant."; } Drop: if (Cup in player) { remove Pill; give Cup general; "Vous essayez de la laisser tomber mais elle tombe dans la tasse de café !"; } ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cross_Exam !______________________________________________________________________________ Object Cross_Exam "Salle de contre-interrogatoire" class CiaRoom with description "Vous êtes dans une salle de contre-interrogatoire.", n_to Large_Room, s_to Chief; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Chief !______________________________________________________________________________ Object Chief "Bureau" class CiaRoom with description "Vous êtes dans le bureau du chef du CHAOS.", n_to Cross_Exam, s_to Near_End, w_to Bathroom; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Bathroom !______________________________________________________________________________ Object Bathroom "Salle de bains" class CiaRoom with description "Vous êtes dans une petite salle de bains.", e_to Chief; Object -> Razor "lame de rasoir" with name "rasoir" "lame", has female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Control !______________________________________________________________________________ Object Control "Salle de contrôle" class CiaRoom with description "Vous êtes dans la salle de contrôle du CHAOS.", e_to Near_End; Object -> Large_Button "gros bouton sur le mur" with name "gros" "bouton", before [; Push: if (self hasnt general) give self general; else give self ~general; "Vous poussez le bouton sur le mur ...^Clic ! Quelque chose semble différent maintenant."; ], has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Near_End !______________________________________________________________________________ Object Near_End "Près de la fin" class CiaRoom with description "Vous êtes près de la fin du complexe.", n_to Chief, w_to Control; Object -> ID_Card "CHAOS ID carte" with name "chaos" "id" "carte"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Game Routines and such forth. !______________________________________________________________________________ [ Initialise; location=Busy_Street; move Badge to player; give player light; while (combo < 1000) combo=random(9999); sleep_for = 5 + random(10); "^^Sur un mur est écrit:^ Pour les instructions, tapez 'ordres' s'il vous plaît.^"; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! GamePostRoutine - Also taken from Graham Nelson's port of Adventureland !______________________________________________________________________________ [ GamePostRoutine i; if (action==##Look) objectloop (i in location) if (i ~= player && i has concealed) give i ~concealed; rfalse; ]; [ MissionSub; "Votre mission est de retrouver un rubis qui est utilisé dans un projet top secret du gouvernement, en tant que composant pour un projecteur laser. ^^Le rubis a été volé par un réseau d'espions secret connu sous le nom de : CHAOS. ^Nous soupçonnons qu'ils sont cachés quelque part dans ce voisinage. ^Bonne chance !"; ]; [ Bond007Sub; if (player in Cafeteria && notebook has general) { print "WooOOAAH! Une trappe s'ouvre au dessous de vous et vous tombez !^"; PlayerTo(Basement, 2); elevator_at = 1; ! Tidy, tidy. rtrue; } "Rien ne se passe."; ]; [ PasBesoinSub; "Ce verbe n'est pas nécessaire dans le jeu."; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Gramar and Verbs !______________________________________________________________________________ Include "FrenchG"; Verb "bond007" * -> Bond007; Verb "ordre" "ordres" "mission" * -> Mission; ! Désactivation de verbes inutiles Extend "allumer" replace * topic -> PasBesoin; Extend "eteindre" replace * topic -> PasBesoin; Extend "fouiller" replace * topic -> PasBesoin; end; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Porter's Notes: !------------------------------------------------------------------------------ ! I first came across this game on a BBS while looking for text adventure ! materials in 1994. It was written in GWBASIC by Pete Wohlmut. I originally ! ported it to MicroSoft's QuickBasic because of a personal loathing to the ! GWBASIC environment. A simple text game of approximately an hour's ! diversion, I believed it would help me learn more about Inform if I tried ! porting it. And it has. I'm now working on a game of my own. ! ! The game is originally a simple two word parser, and some of the more ! complex actions (such as inserting things) were achieved with a follow-up ! query. The text is simplistic, and originally was written in a first person ! point-of-view. I took the liberty of sprucing up the text as well as ! changing the point-of-view to second person. I tried to preserve the ! simplistic nature of the text, however. ! ! Special thanks to Graham Nelson for bringing us Inform, as well as for the ! use of his ScottRoom class. ! ! Also thanks to Gareth Rees for his fine tutorial and excellent examples ! (and the wonderful game of "Christminster"). ! ! J. Kevin Thomas ! email: jkthomas@unity.ncsu.edu !______________________________________________________________________________