!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! 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 xv5s; 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^"; Release 1; Serial "961218"; 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 coupe? 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; print "^^Sorties @'evidentes: "; for (i=n_to: i<=d_to: i++) if (self.i ~= 0) c++; 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 attrapp@'e! Ils vous tirent dessus!"; } if (turns ~= 400 && turns >= 375) { print "^Vous pensez qu'ils sont pas loin... Vous entendez des bruits.^"; } ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Busy Street !______________________________________________________________________________ CiaRoom Busy_Street "Rue @`a grande circulation" with description "Vous @^etes dans une rue @`a grande circulation.", s_to Building; Object -> Building "grand immeuble de bureaux" with name "building" "immeuble", door_to Lobby, door_dir s_to, has open door static; Object Badge "Badge C.I.A" with name "badge", article "un"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Lobby !______________________________________________________________________________ CiaRoom Lobby "Hall" with description "Vous @^etes dans le hall de l'immeuble.", after [; Go: if (badge in player) { ; print "^Le garde observe votre badge et vous sort 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@'ev@'elant quelque chose de tr@`es interessant."; } ] has female; Object -> Sliding_Doors "porte coulissante" with name "porte" "coulissante", description "Il y a un bouton pr@`es de la porte.", before [; Open: "^Vous ne pouvez pas."; ], door_to Elevator, door_dir s_to, has static door female; Object -> Call_Button "bouton d'appel" with name "bouton" "appel", before [; Push: if (Sliding_Doors hasnt open) { give Sliding_Doors open; "^La porte glisse et s'ouvre faisant un leger bruit!"; } "^La porte est d@'ej@`a ouverte."; ], has static scenery hidden; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Elevator !______________________________________________________________________________ CiaRoom Elevator "Petite pi@`ece" with description "Vous @^etes dans une petite pi@`ece.", 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@'e 'premier', 'second' et 'troisi@`eme'" with name "panneau", has static; Object -> Button_1 "premier bouton" with name "bouton" "premier", before [; Push: elevator_at = 1; "^Les portes se ferment et vous avez l'impression que la pi@`ece s'est \ d@'eplac@'ee.^Soudain les portes s'ouvrent encore."; ], has static scenery hidden; Object -> Button_2 "second bouton" with name "bouton" "second", before [; Push: elevator_at = 2; "^Les portes se ferment et vous avez l'impression que la pi@`ece s'est d@'eplac@'ee.^Soudain les portes s'ouvrent encore."; ], has static scenery hidden; Object -> Button_3 "troisi@`eme bouton" with name "bouton" "troisi@`eme" "troisieme", before [; Push: elevator_at = 3; "^Les portes se ferment et vous avez l'impression que la pi@`ece s'est d@'eplac@'ee.^Soudain les portes s'ouvrent encore."; ], has static scenery hidden; Object -> Old_Key "vieille clef model@'e" with name "cl@'e" "vieille" "clef", article "une" has female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Visitor's Room !______________________________________________________________________________ CiaRoom Visitors "Salle d'attente" with description "Vous @^etes dans une salle d'attente.", e_to Lobby; Object -> VCR "magn@'etoscope" with name "magn@'etoscope" "magnetoscope" "VCR", description [; if (Battery notin self) { "^Il n'y a pas de courant."; } if (Battery in self && TV hasnt general) { "^Il n'y a pas de T.V. pour la regarder."; } ], has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Dingy Anteroom !______________________________________________________________________________ CiaRoom Dingy "Antichambre Sombre" with description "Vous @^etes 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) { give Dingy_Door open; "^O.K. Vous ouvrez la porte."; } "^Elle est v@'errouill@'ee!"; ], has static door female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! President's Office !______________________________________________________________________________ CiaRoom Pres_Office "Bureau du Directeur" with description "Vous @^etes dans le bureau du directeur.", w_to Dingy; Object -> Desk "Bureau d'acajou" with name "bureau" "acajou", description [; if (Drawer has static) "Vous pouvez voir qu'il a un tiroir sur le cot@'e."; ], has static; Object -> Drawer "tiroir" with name "tiroir", description "Cela semble fragile.", before [; Take, Push, Pull: "^Il est dans le bureau et ferm@'e."; 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@'e!"; } ], 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 @'ecrit:^ Nous avons d@'ecouvert un des mots secrets du CHAOS.^ C'est: BOND007. Doit @^etre utilis@'e dans une situation -tasteful-."; ]; 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@'etoscope."; } ] has female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Hallway !______________________________________________________________________________ CiaRoom Hallway "Vestibule" with description "Vous @^etes dans le vestibule.", s_to Elevator, w_to Security_Office, e_to Cafeteria; Object -> Coffee_Maker "machine a caf@'e" with name "machine" "caf@'e", has static female; Object -> -> Cup "tasse de caf@'e chaud" with name "tasse" "chaud" "vapeur" "caf@'e", description "Cela semble fragile.", before [; Drop: remove Cup; "^Vous posez la tasse et elle se casse en mille morceaux.^Le caf@'e 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 !______________________________________________________________________________ CiaRoom Security_Office "Bureau de s@'ecurit@'e" with description "Vous @^etes dans le bureau de s@'ecurit@'e.", e_to Hallway; Object -> TV "t@'el@'evision portable" with name "tv" "television" "portable" "correspondre", description [; if (self has general && Tape in VCR && Battery in VCR) { if (sculpture hasnt general) give sculpture openable; print "^La bande dit le message:^^ Nous avons d@'ecouvert un nombre qui vous aidera. Ce nombre est: ", combo, ". Observez s'il vous plaît les pi@`eges cach@'es. Aussi, Il y a quelque chose dans la sculpture.^"; rtrue; } "^L'@'ecran est noir."; ], before [; Tie: if (second==VCR && location == Visitors && self hasnt general) { give self general; print "^Vous connectez la TV au magnetoscope"; if (self in player) { move self to location; print " et notez cela."; rtrue; } else print "."; rtrue; } if (second == VCR && location == Visitors && self has general) { "^Vous l'avez d@'ej@`a fait."; } "^Vous ne pouvez pas connecter la TV a cela."; Take: if (self has general) { give self ~general; print "^Vous d@'econnectez la TV du magnetoscope.^"; } ] has female; Object -> Monitor1 "rang@'ee de moniteurs" with name "rangee" "moniteur" "moniteurs", description [; if (Large_Button hasnt general) { "^Vous voyez une fosse de m@'etal de 1000 pieds de profondeur sur un moniteur. De l'autre c@^ot@'e de la fosse, vous voyez un grand crochet."; } "^L'@'ecran est noir."; ], has static female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cafeteria !______________________________________________________________________________ CiaRoom Cafeteria "Caf@'et@'eria" with description "Vous @^etes dans la caf@'et@'eria.", 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) { give self open; "^O.K. Vous avez ouvert la porte."; } else "^Elle est v@'errouill@'ee!"; ], has static door female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Closet !______________________________________________________________________________ CiaRoom Closet "Cabinet" with description "Vous @^etes dans un cabinet de maintenance.", s_to Cafeteria; Object -> Bag "Sac en plastique" with name "plastique" "sac", description "c'est un sac tr@`es solide.", before [; Cut: if (Razor in player) { move Tape to location; remove self; "^Crack! Le sac se d@'echire et quelque chose tombe!"; } "^Il n'y a rien d'assez pointu."; Open: "^Vous ne pouvez pas. C'est trop solide."; ]; Object -> -> Tape "Bande vid@'eo" with name "bande" "vid@'eo", before [; Insert: if (second==VCR && VCR in location) { move Tape to VCR; "^Vous mettez la bande vid@'eo dans le magnetoscope."; } ] has female; Object -> Broom "balai" with name "balai"; Object -> Dustpan "pelle @`a poussi@`ere" with name "pelle" "poussiere", has female; Object -> Gloves "paire de gants en caoutchouc" with name "gants" "gant" "caoutchouc", has clothing female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Short Corridor !______________________________________________________________________________ CiaRoom Short_Corridor "Petit couloir" with description "Vous @^etes 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@`ere.^"; PlayerTo(Elevator, 2); rtrue; } if (Guard hasnt general && Cup in player && Cup has general) { give Guard general poisoned; remove Cup; Guard.short_name = "le garde dort"; StartDaemon(Guard); print "^Le garde prend votre caf@'e et le boit. Il tombe et s'endort de suite.^"; } ], w_to Elevator, s_to Side_Corridor, e_to Solid_Door; Object -> Solid_Door "porte blind@'ee" with name "porte" "blindee" "blind@'ee", description "Il y a une petite fente @`a c@^ot@'e de la porte.", before [; Open: "^Vous ne pouvez pas. ca ne fonctionne pas."; ], door_to Metal_Hall, door_dir e_to, has static door locked female; Object -> Guard "garde de s@'ecurit@'e" with name "garde" "s@'ecurit@'e" "securite", short_name "garde", react_before [; if (self hasnt general && self has poisoned) { deadflag = 1; "^Le garde sort son arme @`a feu et vous tue!"; } ], daemon [ t ; t = sleep_for - 1; sleep_for = t; if (t==1 && location==Short_Corridor) { print "^Vous pouvez entendre 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@'eveille!^";} } ], has animate; Object -> Slit "fente" with name "fente", has static hidden; Object -> -> Lock "Digicode @'electronique" 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!"; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Metal_Hall !______________________________________________________________________________ CiaRoom Metal_Hall "Hall de M@'etal" with description "Vous @^etes dans un couloir fait de m@'etal.", after [; Go: if (Lever hasnt general) { ; deadflag = 1; "^Le sol est plein de c@^ables @'electriques! Vous @^etes @'electrocut@'e!^"; } ], e_to Plain, w_to Short_Corridor; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Plain Room marquepage !______________________________________________________________________________ CiaRoom Plain "Pi@`ece @'eclair@'e" with description "Vous @^etes dans une petite Pi@`ece @'eclair@'e.", n_to Cubicle, w_to Metal_Hall; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cubicle !______________________________________________________________________________ CiaRoom Cubicle "Cabine" with description "Vous @^etes dans une petite cabine insonoris@'ee.", after [; Go: if (Large_Button hasnt general) { ; deadflag = 1; "^Une sir@`ene d'alarme hurle autour de Vous! Des gardes courent ^tout autour de vous et vous tire dessus. ^Vous @^etes mort!"; } ; "Une porte secr@^ete claque et se ferme derri@`ere vous!"; ]; Object -> Case "vitrine sur piedestal" with name "vitrine" "vitre" "piedestal", before [; Cut: if (Razor in player && Ruby in self) { move Ruby to player; "^Vous coupez la vitrine et vous tirez une pierre."; } "Vous essayez, mais vous n'y arrivez pas."; Look: if (Ruby in self) { "^Vous pouvez voir une pierre brillante à l'int@'erieur."; } ], has static; Object -> -> Ruby "tr@`es gros rubis" with name "gros" "rubis"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Side Corridor !______________________________________________________________________________ CiaRoom Side_Corridor "Couloir de c@^ot@'e" with description "Vous @^etes dans un couloir de c@^ot@'e.", n_to Short_Corridor, e_to Gen_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Gen_Room !______________________________________________________________________________ CiaRoom Gen_Room "Salle de g@'en@'erateur" with description "Vous @^etes dans la salle de g@'en@'erateur @'electrique.", w_to Side_Corridor; Object -> Square "petite plaque de m@'etal sur le mur." with name "plaque" "metal" "mur", before [; Push, Pull, Touch: if (Gloves hasnt worn && lever hasnt general) { deadflag = 1; "^Vous sentez une d@'echarge @'electrique qui se d@'egage de la plaque! ^Vos cheveux se dressent droit sur la tête! Vous @^etes @'electrocut@'e!"; } ], 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 clic...^ Quelque chose semble diff@'erent maintenant."; } if (self has general) { give self ~general; "^Le levier descend et vous entendez un clic....^ Quelque chose semble diff@'erent maintenant."; } deadflag = 1; "^Vous sentez une d@'echarge @'electrique qui se d@'egage du levier! ^Vos cheveux se dressent droit sur la tête! Vous @^etes @'electrocut@'e!"; ], has static; Object -> Square_Sign "signe sur la plaque" with name "signe", description "Il dit: ATTENTION DANGER!", has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Basement je n'arrive pas a inclure : has female; dans l'objet CORDE !______________________________________________________________________________ CiaRoom Basement "Sous sol" with description "Vous @^etes dans un sous sol en dessous du rapide.", 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; 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; } Swing: if (Rope has door) <>; ], door_to 0, door_dir 0; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Complex !______________________________________________________________________________ CiaRoom Complex "Entr@'ee au Complexe Secret" with description "Vous @^etes dans l'entr@'ee du complexe secret.", w_to Basement, s_to Ledge, e_to Monitoring_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Monitoring_Room !______________________________________________________________________________ CiaRoom Monitoring_Room "Salle de contr@^ole" with description "Vous @^etes dans une salle de contr@^ole secr@^ete.", w_to Complex; Object -> Bank "banque de moniteurs" with name "banque" "moniteur" "moniteurs", description "Vous y voyez une salle avec une vitrine sur un pi@'edestal.", has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Ledge ! faudrai modifier la description du crochet il appararait en tapant: r fosse ! faudrai mettre un truc comme chercher ou qu'il soit carrement visible ou autre !______________________________________________________________________________ CiaRoom Ledge "Rebord" with description "Vous @^etes sur un rebord devant une fosse de m@'etal de 1000 pieds de profondeur.", n_to Complex, in_to 0; Object -> Hook "crochet" with name "crochet", has static scenery hidden; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Other_Side of ledge. !______________________________________________________________________________ CiaRoom Other_Side "Autre C@^ot@'e" with description "Vous @^etes de l'autre c@^ot@'e de la fosse.", e_to Long_Corridor; Object -> Hook_Rope "grand crochet avec une corde accroch@'ee" with name "crochet" "corde" "grand", before [; Take, Go: "^Vous ne pouvez pas l'atteindre."; ], has static scenery; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Long Corridor !______________________________________________________________________________ CiaRoom Long_Corridor "Long Couloir" with description "Vous @^etes dans un long couloir.", w_to Other_Side, s_to Narrow, e_to Large_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Narrow !______________________________________________________________________________ CiaRoom Narrow "Couloir @'etroit" with description "Vous @^etes dans un couloir @'etroit.", n_to Long_Corridor, s_to Lab; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Lab !______________________________________________________________________________ CiaRoom Lab "Laboratoire Secret" with description "Vous @^etes dans un laboratoire secret.", e_to Narrow; Object -> Box "boite avec un petit bouton dessus" with name "boite" "bouton" "petit", before [; Push: print "^Vous poussez le bouton sur la boite et...^"; if (location == Cubicle || location == Control) { print "Il y a un flash qui aveugle!^"; if (Ruby in Player) { deadflag = 2; PlayerTo(Busy_Street,2); "^Hourra ! Vous avez retrouvez le rubis!^Vous avez gagn@'e!"; } PlayerTo(Busy_Street,2); rtrue; } "^Rien ne se passe."; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Large Room !______________________________________________________________________________ CiaRoom Large_Room "Large Salle" with description "Vous @^etes dans une large salle.", w_to Long_Corridor, s_to Cross_Exam; Object -> Painting "petite peinture" with name "petite" "painture" "chacal", description "Vous voyez une image d'un chacal souriant.", after [; Take, Push: if (Pill in self) { move Pill to location; "^Quelque chose est tomb@'ee 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@'e qui d@'egage une vapeur d'eau chaude."; } Drop: if (Cup in player) { remove Pill; give Cup general; "^vous essayez de la laisser tomber mais vous ratez la tasse!"; } ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cross_Exam !______________________________________________________________________________ CiaRoom Cross_Exam "Salle d'examen" with description "Vous @^etes dans une salle-d'examen.", n_to Large_Room, s_to Chief; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Chief !______________________________________________________________________________ CiaRoom Chief "Bureau" with description "Vous @^etes dans le bureau du chef du CHAOS.", n_to Cross_Exam, s_to Near_End, w_to Bathroom; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Bathroom !______________________________________________________________________________ CiaRoom Bathroom "Salle de bains" with description "Vous @^etes dans une petite salle de bains.", e_to Chief; Object -> Razor "lame de rasoir" with name "rasoir" "lame" has female; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Control !______________________________________________________________________________ CiaRoom Control "Salle de contr@^ole", with description "Vous @^etes dans la salle de contr@^ole 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 .....^Click! Quelque chose semble diff@'erent maintenant."; ], has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Near_End !______________________________________________________________________________ CiaRoom Near_End "Pr@`es de la fin" with description "Vous @^etes pr@`es 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 @'ecrit:^ Pour les instructions, tapez 'ordre' s'il vous pla@^it.^"; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! 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@'e dans une partie d'un projecteur ^de laser pour un projet top secret du gouvernement.^^Le rubis a @'et@'e vol@'e par un ^r@'eseau d'espion secret connu sous le nom de : CHAOS. ^Nous soupçonnons qu'ils sont cach@'es 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."; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Gramar and Verbs !______________________________________________________________________________ Include "FrenchG"; Verb "bond007" * -> Bond007; Verb "ordre" * -> Mission; Verb "connecter" * noun -> Tie * noun "au" noun -> Tie; 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 !______________________________________________________________________________