Release 1; Constant Story "THE WEAPON"; Constant Headline "^an Interactive Misdirection ^Copyright 2001, Sean Barrett^"; Constant DEATH_MENTION_UNDO; Constant AMUSING_PROVIDED; Constant USE_INSUBSTANTIAL; Constant USE_NONLOCAL; Constant SERIAL_COMMA; ! "one, two, and three" not "one, two and three" Constant IGNORE_TAKEREMOVE_ON_ANCESTORS; Replace DrawStatusLine; Replace DoMenu; Replace LowKey_Menu; Replace TieSub; Include "stbparse"; [ Amusing i n m; n = m = 0; objectloop(i ofclass Conv) { if (i.description) { ++n; if (i has conv_seen) ++m; } } "You saw ", m, " of the ", n, " conversation fragments. Mind you, you can't see them all in one playthrough, anyway. ^^Besides exploring the conversations further, you might try: ^ ^ commanding Cheryl to use her gun ^ examining things while wearing the goggles ^ pointing at things, including the handcuffs ^ turning off the forcefield before revealing your secret ^ using the probe's first appearance as a distraction for the sequence stud ^ looking under the handcuffs ^ REPLYing instead of TALKing (only a few differences) ^^Authors might be amused at this line of code: ^ has lockable openable worn clothing locked pluralname;"; ]; [ Chatter; meta=1; "Just use TALK or REPLY to engage in idle chitchat; for non-conversational communication, see the information in ABOUT."; ]; [ PostBanner; print "^[Type ~ABOUT~ for special information about interacting with ", (string) Story, ".]^"; ]; Global duh; Global seenprompt; STBLibraryMessages LibraryMessages with before [; Prompt: if (seenprompt == 0) PostBanner(); seenprompt = 1; rfalse; Score: if (deadflag == 0) { "There is no scoring in this game, only winning and losing."; } rtrue; Yes, No: return Chatter(); Miscellany: switch (lm_n) { 3: print " You have lost "; rtrue; 19: if (duh == 0) { duh = 1; print "You glance down at your body, taking care not to let the loathing show on your face, but there is really nothing worth noticing."; if (handcuffs has worn) " Unless you count these idiotic handcuffs."; ""; } "You glance down at your body for a fresh reminder of your situation."; } Take: switch (lm_n) { 6: if (goggles has general) "Even with the goggles on, Cheryl won't let you get too close."; "It's unlikely you'll be able to wrest anything away from Cheryl by force."; } Push: switch (lm_n) { 4: "You'd love to put more distance between you, but Cheryl insists on standing close... but not too close."; } ]; [ PrintRank; ]; [ ChooseObjects obj code; if (code < 2) { if (obj has scenery || obj in cheryl) return 2; rfalse; } if (action_to_be==##Unlock or ##Lock && obj==keys) return 2; ]; Include "VerbLib"; Include "Grammar"; [ DrawStatusLine; @split_window 0; @set_window 0; style roman; ]; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! HINTS !! !! Include ">yihint.h"; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! CONVERSATION !! !! Include ">yic.h"; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! CLASSES !! !! Class Loc has light; Class Scene has scenery; Class Stat has static; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! GLOBAL VARIABLES !! !! (most global flags are 'general' flags on various objects) Global fixed=0; ! has the player fixed the generator? Global igniteturns=0; ! turns since ignition Global piped1=0; Global piped2=0; ! rectangular parallelepiped print Global endgame=0; ! Cheryl is counting down !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! THE ROOM !! !! Loc room "Yi-Lono-Mordel Control Room" with description [; print "{Most humans would probably find it the height of fashion, but t|T}his low ellipsoidal room makes you uncomfortable with its perfect symmetry"; if (goggles has worn) print ". Electro-magnetic waves and electric potentials travel in chaotic eddies along the walls, turbulently recoiling from the boundaries of the window and the doorway."; else print " and sterility. The featureless white wall is broken up only by the large elliptical window in the ceiling and the circular doorway through which you entered."; if (cluster hasnt general) print " A cluster of forms sits in the center, atop the slightly concave floor."; else if (goggles has worn) print " In the center sits a slab over which gleams of energy fields dance and shimmer, surrounded by two energy-neutral curved shapes."; else print " In the center sits a slab, two swept curves surrounding it."; print "^"; rtrue; ], before [ i; #ifdef DEBUG; Pray: meta = 1; print "Conversation objects without descriptions:^"; objectloop(i ofclass Conv) { if (i.description == 0) print "<", (name) i, "> "; } "^^Cheryl's state: ", (string) cheryl.conversation.description, "."; #ifnot; i = i; #endif; ], s_to doorway, out_to doorway; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! THE STATIC CONTENTS !! !! Object -> doorway "doorway" with name "doorway" "circle" "circular", description [; "The doorway leads out of the room, past the sentry station, and out to the rest of the installation on this ~asteroid~. Somewhere back there is the brig in which you have been for the last three months{--which does not make the idea of using the doorway very appealing|}."; ], before [; Search: <>; ], door_dir s_to, door_to room, has open door scenery; Object -> "door" with name "door", description "You can only see a doorway, not a door.", before "You can only see a doorway, not a door.", door_dir s_to, door_to room, has open door scenery nonlocal; Scene -> window "elliptical window" with name "elliptical" "window" "ceiling", description [; "Looking out the window you can only get the faintest sense of the magnitude of Yi-Lono-Mordel. The sun you now orbit is on the opposite side from this window, although you can see one star, very close. The other asteroids are in the same orbit, so they'd never appear above you{--and they would surely be too distant to be visible even if the window did face them|}."; ], before [; Search: <>; ], ; Scene -> star "star" with name "star" "close", description [; "A{n extremely|} bright point of light."; ], has nonlocal; ! general: have examined it, so alter room description Scene -> cluster "cluster of forms" with name "cluster" "forms" "form", description [; give self general; ++piped2; "The forms consist of a raised slab (in the same proportions as the ellipsoidal room, but a rectangular parallelepiped instead) and two gleaming swept curves (one on each side of the slab)."; ]; Scene -> curves "gleaming curves" with name "curve" "gleaming" "curves" "swept" "curved" "shapes" "shape" 'far' 'near', description "Though the reason they are shaped into hyperboloids is unknown to you, you are well aware that each of these metal lumps served as an energy locus for a Yi--in this environment, a work location. The two sit on either side of the slab, one on the side nearest the door, one on the far side. They would be far too awkward to serve as a chair for your body.", before [; Enter: "For a moment you consider trying, but you know from experience that you could not find any stable point on which to rest."; Touch: "Although they are seemingly metallic, no free electrons wander the surface of these shapes; you can find nothing to influence."; ]; Scene -> slab "slab" with name "slab" "raised" "parallelepiped" "rectangular", description [; if (goggles has worn) { print "Currents race through the slab, pink and purple, in intricate, unchanging eddies. Warm to the touch, it allows control over the whole of Yi-Lono-Mordel. There is a glowing notch in the top center edge."; if (controls in slab) " A crisscrossing of thin lines of energy marks the control surface covering the slab."; ""; } print "The slab, subtly off-white, is warm to the touch, and hides the sensitive Yi technological components needed to manipulate the whole of Yi-Lono-Mordel{; this much you were able to determine the last time you were here|}. In the top center edge on the side opposite the door is a small notch."; if (controls in slab) print " Extending across much of the surface of the slab is a slightly raised control surface."; if (probeslot in slab) if (probe in probeslot) print " Sticking out of a slot in the slab is an electropulse probe."; else print " There is an open slot in the slab where the probe emerged."; ""; ], each_turn [; if (ignitionstud has general) ++igniteturns; ], before [; Touch: "The slab is room-temperature and lacking in electric potential."; Receive: if (receive_action == ##Insert) { if (probeslot in slab) <>; "There is no access to the inside of the slab."; } Enter: if (c_badguy has conv_seen) "It's time to rest, sure enough, but not that way."; "There'll be time enough for resting later."; ], has supporter; Scene -> notch "notch" with name "small" "notch", description [; if (goggles has worn) "You recognize the glowing notch as a standard Yi heat-sensitive triggering device; human body temperature happens to be sufficient to activate this one."; "You recognize the notch as a standard Yi heat-sensitive triggering device; human body temperature happens to be sufficient to activate this one{, as you figured out before you were halted in your tracks on your previous attempt at conquering Yi-Lono-Mordel|}."; ], before [; Touch,Rub,Push,Activate,Deactivate: if (controls notin slab) { give cluster general; ! repeat play might skip examining slab move controls to slab; print "You touch the the notch with a minimal pressure.{ It is cooler than the rest of the slab, and you can feel the heat from your finger being drawn out momentarily.|} Where no cracks had been visible before,{ nevertheless|} sections of the top of the slab give way, and a control surface slides up and clicks into place."; if (goggles has general && notch hasnt general) { move goggles to room; give goggles ~general; print "^^Cheryl takes off the goggles."; } if (notch hasnt general) { cheryl.talked(); give notch general; } "{^^Cheryl says, ~Ok, this is interesting.~ She peers at the control surface.|}"; } else { remove controls; "You apply your finger to the notch, and the control surface slides back into the recesses of the slab, leaving no visible indication that it was ever there."; } ]; Scene -> floor "floor" with name "floor" "concave", description "The floor is such a gentle concave slope, with its lowest point at the center under the various forms, that you cannot tell whether it is elliptical, spherical, parabolic, hyperbolic, or something higher-order.", before [; LookUnder: "You can't look under that."; Enter: "You're standing on it already."; ], ; Scene -> walls "room" with name "room" "wall" "walls", description [; print "The room is about fifteen meters long, eight meters wide, and three meters tall, in the traditional Yi ratio 4:2:1, with the vertical compromised to only 2/3 its height before the{ somewhat flat|} floor intrudes."; if (goggles has worn) " Coruscations of energy play under many of the surfaces of the room."; else { if (status in room || manual in room) { print " A"; if (status in room) { print " status display"; if (manual in room) print " and a"; } if (manual in room) print "n information display"; if (status in room && manual in room) print " are"; else print " is"; " projected on one side of the room."; } } ""; ], before [; LookUnder: "You can't look under that."; Enter: "You're already there."; ], ; Scene -> icons "icons" with name "icons" "icon" "indecipherable", description [; if (viewscreen has general) <>; "They are {|still }indecipherable."; ]; Scene -> "Yi-Lono-Mordel" with name 'yi' 'lono' 'mordel' 'yi-lono-mordel', description "Easier said than done, since the whole extends across twenty star ~systems~. All that you can see of it right now is this control room and the one star out the window.", before [; SwitchOn, SwitchOff: <>; ], ; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! CHERYL !! !! Global givekeys=0; Global manualturns=0; [ DropGoggles x; move goggles to room; give goggles ~general; cheryl.talked(); if (~~x) print "^"; "Cheryl{ says, ~Show's over, huh?~ She|} takes off the goggles and tosses them on the ground beside you.{ Good thing they're sturdy enough to take a fair amount of abuse.|}"; ]; [ DoGiveKeys; cheryl.talked(); if (keys notin cheryl) "Cheryl says, ~I already gave you the key.~"; if (givekeys == 0) "Cheryl says, ~Tolan, I don't trust you further than I can throw you. Until I see a problem you can't solve with the handcuffs on, forget it.~"; move keys to room; "Cheryl says, ~Fine, but you better be on your best behavior, Tolan.~^^She tosses the key to the handcuffs onto the floor next to you."; ]; Object -> cheryl "Cheryl" with name "dig" "leader" "cheryl" "thafaled" "yourself", ! hack!!! initial [; if (manual in room && forcefield notin room) "Cheryl stands here, studying the information display."; if (goggles has general) "Cheryl stands here, wearing your electromagnetic-translating goggles."; "Cheryl{ Thadafel|} stands here, watching you closely."; ], description [; print "{Dig Leader |}Cheryl Thadafel is a tall, wiry woman in her forties{, perhaps late thirties|}. You spent the last three months looking forward to seeing her again, but now that you do, you wonder why you found her pug nose and staring eyes attractive in your memories.{ Perhaps it was just that you had little else to think about.|}"; print " Cheryl is carrying "; WriteListFrom(child(cheryl), ENGLISH_BIT); "."; ], conversation cherylstart, infotime 0, each_turn [; if (goggles has general && self.time_left == 0) { print "^Cheryl says, ~{&Is that|That|That's} it?~ She reaches up to take off the goggles.^"; } if (piped1 && piped2 && (piped1 == 1 || piped2 == 1)) { print "^(~Rectangular parallelepiped~! How can any sane creature stand to use a language with no proper word for the simplest form with parallel sides? It's a wonder humanity made it off Terra.)^"; ++piped1; ++piped2; } if (manual in room) { manualturns++; if (manualturns >= 2 && forcefield notin room) { deadflag = 1; "^Cheryl turns to face you, her laser pistol in her hand. ~Before I get too carried away, let me make sure you don't get up to any monkey business here.~ She summons the guards, then adds, ~Don't move a muscle, or I'll have to shoot you.~^^And that ends it. You never get the chance to fulfill your destiny."; } } if (probe in self) { if (probe hasnt general) { give probe general; } else { print "^Cheryl says, ~You can have this once I'm sure it's safe, Tolan.~^^She examines the probe carefully, then aims it so neither end is pointing at either of you, and fiddles with it for a moment.^"; fireprobe(); print "^Cheryl says, ~Huh. Just an electromagnetic toy.~ She sets it down on the slab.^"; move probe to slab; rtrue; } } if (handcuffs has general && forcefield notin room && manual notin room) endgame = 1; if (endgame && manual notin room) { switch(self.infotime++) { 3: self.talked(); "^Cheryl says, ~I can't believe you've gotten access to all of this stuff without finding any text for me to look at.~"; 6: self.talked(); "^Cheryl says, ~Tolan, there's got to be some text you can display for me.~"; 8: self.talked(); "^Cheryl says, ~Perhaps if I don't see some text very soon, we should just stop for the day.~"; 11: self.talked(); "^Cheryl says, ~Ok, that's it. Find me something to read now, or we'll stop.~"; 12: self.talked(); "^Cheryl says, ~I mean it. I'll give you to the count of three. One.~"; 13: self.talked(); "^Cheryl says, ~Two.~"; 14: deadflag = 1; "^Cheryl says, ~Three. That's it. I can't believe you can't find any text. The Yi loved to write things down.~ She pauses for a moment, staring at you. ~I wonder if you haven't been avoiding displaying any text intentionally.~^^She draws her laser pistol and aims it at you.^^You never get another chance."; } } if (goggles hasnt general && viewscreen has general && controls in slab && forcefield notin room) { deadflag = 1; print "^Cheryl notices the changed display on the viewscreen. ~What is that? Move away from the controls, Tolan. I want to decipher that text.~ She draws her laser pistol and points it at you."; if (transmitstud notin studs) "^^You look down at the viewscreen as you raise your hands for Cheryl and determine that this is exactly what you needed to know.^^Unfortunately, you'll never get the chance to make use of the information."; "^^Too bad you'll never get another chance."; } if (goggles hasnt general && controls in slab) self.converse(c_control); ! no conversation when she's wearing the goggles if (turns > self.number+1 && goggles hasnt general) { if (~~(self.conversation).doprint()) { self.conversation = (self.conversation).numtrig(delay, true); } } ], number 0, update_conv [ x y; if (x == self.conversation) rfalse; self.conversation = x; self.number = turns + y; rtrue; ], talked [; self.number = turns; ], try_actions [ x y res; res = (self.conversation).acttrig(x); if (res == self.conversation) res = (self.conversation).acttrig(y); return self.update_conv(res); ], answered [; if (probe notin self) return self.try_actions(##Answer,##Talk);], talkedto [; if (probe notin self) return self.try_actions(##Talk,##Answer);], converse [ x y; if (probe notin self) return self.update_conv(newconv(x,self.conversation,y),-1); ], react_before [; if (c_badguy has conv_seen) rfalse; return self.react_before_foo(); ], react_before_foo [; Go,Exit: if ((action == ##Exit && player in room) || noun == doorway or s_to) { self.talked(); "Cheryl stops you. ~You're not going anywhere, Tolan. Not until we make more progress.~"; } WaveHands: if (goggles hasnt general) self.converse(c_wave); Jump: if (goggles hasnt general) self.converse(c_jump); Sing: if (goggles hasnt general) self.converse(c_sing); Frown: if (goggles hasnt general) self.converse(c_frown); Nod: if (goggles hasnt general) self.converse(c_nod); Wink: if (goggles hasnt general) self.converse(c_wink); Smile: if (goggles hasnt general) self.converse(c_smile); Laugh: if (goggles hasnt general) self.converse(c_laugh); Wave: if (goggles hasnt general) if (noun == handcuffs) return DoGiveKeys(); ], time_left 0, time_out [; if (goggles has general) { ! test shouldn't be necessary DropGoggles(); } ], reset [; if (goggles has general) { StopTimer(self); StartTimer(self,2); } ], putongoggles [; self.talked(); give goggles ~worn; give goggles general; move goggles to cheryl; StartTimer(self, 2); "Cheryl takes the goggles from you. ~{Something interesting to see this way, Tolan?|Got something to show me?}~ She puts them on and looks around{ as if slightly disoriented|}."; ], life [; Attack: if (goggles has general) { move goggles to room; give goggles ~general; self.talked(); "Cheryl sees you moving towards her, and pulls off the goggles. She gives you a warning look as she drops them on the floor."; } if (handcuffs has worn) "You could not manage it while wearing those handcuffs."; else "You may have the handcuffs off, but Cheryl has a laser pistol."; Kiss: if (goggles has general) "Just allowing Cheryl to see deeper into the electromagnetic spectrum isn't enough to make her sufficiently attractive to you."; "{You consider just how many sacrifices you would be willing to make to achieve your goals; reflecting on it, there is really nothing you would not be willing to do. But |}Cheryl has a laser pistol."; Show: if (goggles has general || probe in self) "Cheryl isn't paying sufficiently close attention."; if (noun == handcuffs) { self.talked(); if (handcuffs has general) "Cheryl says, ~Very clever.~"; return DoGiveKeys(); } if (noun == controlrods && handcuffs has general) { self.talked(); "Cheryl says, ~Very clever.~"; } "Cheryl is not interested."; ThrowAt,Give: if (probe in cheryl) "Cheryl is busy with the probe."; if (noun == goggles) { return self.putongoggles(); } switch(action) { ##Give: if (goggles has general) "Cheryl isn't paying attention right now."; self.talked(); "Cheryl says, ~I'm not particulary interested in ", (thatorthose) noun, ".~"; ##ThrowAt: "You would prefer not to do something that might provoke Cheryl and earn you a trip straight back to the brig."; } Answer, !"Cheryl blinks in confusion."; Ask, Tell: return Chatter(); ], point_at [ obj; if (forcefield in room) return; if (goggles has general) return; if (probe in self) return; if (c_badguy has conv_seen) return; switch(obj) { doorway: self.talked();print"{^Cheryl says, ~No, you can't leave.~^|}"; curves: self.talked();print"{^Cheryl says, ~I'll stand, thanks.~^|}"; window: self.talked();print"{^Cheryl says, ~Seen it.~^|}"; handcuffs: if (handcuffs has general) { .showcuffs; self.talked(); print "{^Cheryl says, ~Yes, yes, you've turned the tables by transforming a restricting device into a tool. I get it.~^|}"; return; } print "{^Cheryl says, ~You couldn't think I'm going to put those on.~^|}"; controlrods: if (handcuffs has general) jump showcuffs; if (keys in cheryl) { self.talked(); print "{^Cheryl says, ~Don't look at me, you're the mechanist.~^|}"; return; } goggles: self.talked(); print "{^Cheryl says, ~So what do things look like through those?~^|}"; } ], shoot [ x; self.talked(); if (x == bay or contact or plasmagen or containment) { "Cheryl says, ~That looks far too dangerous.{ You may be the expert, but there are some chances I won't take.|}~"; } if (x == cheryl) "Cheryl says, ~Very funny.~"; if (x == player) { if (forcefield in room) "Cheryl says, ~I'm not that stupid, Tolan.~"; "Cheryl says, ~Trust me, Tolan, I will the minute you give me a good reason to.~"; } if (x == window) "Cheryl says, ~I'm not feeling particularly suicidal, not that it would work.~"; "Cheryl says, ~I don't think that would be a good idea.~"; ], ! orders ! [; ! return self.orders_2(); ! ], giveitaway [; switch(noun) { hologram: self.talked(); print "Cheryl says, ~{This monitor hologram is how I'm keeping tabs on you. If I don't have it, you're not going to get to do anything, anything at all|I'm using this monitor hologram to track your activities{, Tolan|. You can't have it|}}.~^"; if (parent(goggles) == nothing) { move goggles to room; "^Cheryl thinks for a moment and then speaks again. ~However, I recall we confiscated a pair of electromagnetic-sensitive goggles from you back when we... found... you here.~ She speaks into her communicator.^^Several minutes later, one of the guards stands in the doorway and tosses the goggles on the floor next to you, then leaves."; } rtrue; pistol: self.talked(); "Cheryl says, ~{You think you're amusing? If there's something that you need a laser pistol for, I think you'll just have to let me do the shooting for you.|I'm not giving it to you. If you need something shot, maybe I'll do it.}~"; keys: self.talked(); return DoGiveKeys(); probe: if (probe in self) { rtrue; } goggles: if (goggles in cheryl) { StopTimer(self); DropGoggles(1); rtrue; } } "Cheryl says, ~{You must be on artificial stimulants, Tolan.|Or are you running a fever?|You're nuttier than I remember you being.|Get it yourself.}~"; ], orders [; if (probe in cheryl) "Cheryl is busy with the probe."; if (c_badguy has conv_seen) "Cheryl says, ~Turn off that forcefield{ and we'll talk about what I can do for you|}.~"; Yes, No, Hello: return Chatter(); Go: "Cheryl says, ~{I think I'll stay right here|I'm not going anywhere}.~"; Open,Unlock,Disrobe: if (noun == handcuffs) return DoGiveKeys(); "Cheryl says, ~{Don't look at me|Do it yourself}.~"; Pull: if (noun == controlrods) { self.talked(); print "Cheryl says, ~I'd rather leave my hands free to reach for my laser{, Tolan|}."; if (keys in cheryl) { move keys to room; " But I guess you can take the handcuffs off.~^^She tosses the key to the handcuffs onto the floor next to you."; } "~"; } "Cheryl says, ~Do it yourself.~"; Shoot: return self.shoot(noun); ShootAt: if (noun == pistol) { return self.shoot(second); } "{Cheryl says, ~Uh, right.~|Cheryl looks at you oddly.}"; Wear,Take: if (noun == goggles) { self.talked(); if (goggles has worn) "Cheryl says, ~We can't both wear those.~"; if (goggles has general) "Cheryl says, ~I already have them{, Tolan|}."; return self.putongoggles(); } Give: cheryl.talked(); if (second == self) "Cheryl says, ~Umm... right.~"; return self.giveitaway(); Drop: return self.giveitaway(); Examine,Look: "Cheryl isn't particularly interested."; NotUnderstood: "Cheryl doesn't understand{ what you're saying|}."; default: "Cheryl says, ~{!I'm just an observer, here|Do it yourself|I prefer not to}.~"; ], before [; Search: "Cheryl's pretty careful about keeping her distance, so examining her at range is all you can do."; ], has animate proper female transparent; Object -> -> hologram "monitor hologram" with name "monitor" "hologram" "base" "holo" "image" 'cheryl^s', description [; if (probe in bay && botsensor has general && botsensor.time_left==0 && fixed==0) { ! botsensor.time_left = 3; StopTimer(botsensor); give botsensor ~general; "You try to get a better look at Cheryl's monitor hologram as the probe fires; it looks like you only see eleven flickers of white, but you can not be sure, and Cheryl does not look comfortable with the idea of you standing any closer."; } if (goggles has worn) print "A monochromatic"; else print "A flickering"; ++piped1; " three-dimensional image{ in the shape|} of the control room hovers over a {plain|rectangular} black base{, itself a rectangular parallelepiped|}."; ], has insubstantial; Object -> -> pistol "laser pistol" with name "laser" "pistol" "gun" 'cheryl^s', description [; if (goggles has worn) "Apparently standard issue to military officers, the spiky protrusions and powerful energies flashing over it leave no question as to the purpose of this device."; "Apparently standard issue to military officers,{ given the frequency with which you have been on the wrong end of them,|} the shiny chrome and spiky protrustions leave no question as to the purpose of this device.{ At least the Yi tend to be subtle about it.|}"; ]; Object -> -> keys "key" with name "key" "keys" 'cheryl^s', description [; "{Given that one of the guards who brought you up here gave the key to Cheryl, t|T}his elliptical disk of grey metal is almost certainly the key for a certain particularly annoying pair of handcuffs."; ], before [; Throw: if (handcuffs has worn) rfalse; if (forcefield in room) "You can't throw the key through the forcefield."; move keys to room; cheryl.talked(); print "You throw the key over by the "; if (status in room) print "blank side of the wall on which the status display appears, where the information display appeared back when you originally tried it"; else if (status.been_on) print "right half of the far wall, the side where the status display did not appear, but where the information display did back when you originally tested it"; else print "right half of the far wall, where the informationd display appeared back when you originally tested it"; ".{^^Cheryl says, ~You don't expect me to go get that for you, do you Tolan?~|}"; ], after [; Throw: if (handcuffs has worn && second == 0) "You toss the key across the room.{^^Cheryl says, ~Changed your mind?~}"; ], ; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! THE MAJOR STATIC OBJECTS !! !! ! general: whether we've described it more than once (varying strings ! can't encode text attribute changes--something I should add) Stat status "installation status display" with name "installation" "status" "display" "symbol" "symbols" "displays//p" 'indicator' 'asteroid', initial "Projected on the left half of the far wall of the room is an installation status display.", been_on 0, before [; Switchoff: <>; ], description [; if (goggles has worn) "It's a little too hard to make out the display through the visual noise of the goggles."; print "The installation status display {uses crisp, simple geometric symbols to display a|shows a symbolic} representation of the "; if (self hasnt general) style underline; print "entire"; if (self hasnt general) style roman; give self general; print " Yi-Lono-Mordel installation: "; print "the star system you are in now, with the twenty asteroids including this one orbiting it, and the twenty stars arrayed around it like the vertices of a dodecahedron, each with twenty asteroids of their own."; if (ignitionstud has general) { print " The indicator corresponding to this asteroid is "; switch (igniteturns) { 0,1,2: "bright white."; 3,4,5,6,7: "bright yellow."; 8,9: "hot pink."; } "flashing."; } else if (generator has general) " The indicator corresponding to this asteroid is glowing brighter than those for the other asteroids."; ""; ], each_turn [; if (goggles has worn) rfalse; switch (igniteturns) { 2: "^The indicator for this asteroid on the status display turns bright yellow."; 4: "^The indicators for the other asteroids around this star light up a bit brighter."; 7: "^The indicator for this asteroid on the status display turns hot pink."; 10: "^The indicator for this asteroid on the status display begins flashing."; } ], time_out [; if (self in room) "^On the installation status display, the indicator corresponding to this asteroid changes color."; ], time_left 0, has insubstantial; Stat manual "information display" with name "information" "info" "display" "large" "yi" "text" "displays//p", initial "Projected on the right half of the far wall of the room is a large display full of Yi text.", description [; if (goggles has worn) "It is difficult to make out the details through the visual noise of the electromagnetic goggles."; "It is an oblong display filled with Yi text, none of which you can read."; ], has insubstantial; ! general: generator is turned on Stat generator "white pillar" with name "white" "pillar" "elliptical" "fusion" "generator", initial [; print "In the center of the right side of the room is a white pillar."; if (bay in generator) { print " The access panel on the pillar is open, exposing a fusion generator bay."; if (probe in bay) print " An electropulse probe sticks out of the bay."; } ""; ], description [; if (goggles has worn) { if (self has general) "The pillar is aglow with dancing, swirling greens and aquas."; else print "The fusion generator is an elliptical pillar, with small amounts of energy playing over it. Energy flows in a regulated way across an access panel, which is "; } else print "This {looks to be|is} the fusion generator. It is an elliptical white pillar, almost two meters tall, one meter wide, and half a meter deep. On the long front side is an access panel, which is "; if (bay in generator) { if (probe in bay) "open; an electropulse probe sticks out of the fusion generator bay."; "open, revealing a fusion generator bay."; } else "closed."; ], before [; Search: if (bay in generator) <>; Pull,Open: <>; Switchoff: if (self hasnt general) "It's not on."; <>; Switchon : if (self has general) "It's already on."; <>; ], has transparent; ! general: after opened for first time or seen with the goggles Scene -> panel "access panel" with name "access" "panel", description [; if (bay in generator) if (probe in bay) "The access panel is open and an electropulse probe sticks out of the bay."; else "The access panel is open, revealing a fusion bay."; if (goggles has worn) { give self general; print "Visible by the subtle play of energy across it"; } else print "Visible only by a small color variation"; ", a parametrically-rectangular section of the front of the pillar seems to be an access panel.{|| It may work like the slab.}"; ], before [; Search: if (bay in generator) <>; Pull,Open: if (bay in generator) "It is already open."; "The access panel has no seams you could work your fingernails into, and nothing else you could grip."; Close,Push,Touch,Turn,Rub,Squeeze,Activate: if (bay in generator) { if (probe in bay) "The probe blocks it from closing."; remove bay; "You close the generator access panel."; } if (action == ##Close) rfalse; if (generator has general) "An interlock prevents the panel from opening while the reactor is active."; move bay to generator; cheryl.converse(c_bay); if (self hasnt general && goggles hasnt worn) { print "You touch your fingers to the access panel and immediately recognize the subtle flow of energy through the surface. How much easier this would be if you could see in the electromagnetic spectrum! "; give self general; } give self general; "After a moment of concentration, you align the energy in your fingertips against the flow{| in the panel}. The access panel swings open, revealing {a|the} fusion generator bay."; ]; Scene bay "fusion generator bay" with name "fusion" "generator" "bay", description [; print "The fusion generator bay{ is a spherical chamber which|} houses several Yi components you recognize comprise a plasma generator{--a much bigger generator than you have ever seen in your long life--|, }while the {one |}remaining mechanism must be a plasma containment system{--something you have always suspected the Yi were capable of, despite it being beyond your species' ability to produce|}. {Closer inspection of t|T}he containment system {reveals|has} twelve contact points."; move probestud to studs; if (probeslot hasnt general) { print "^^You recall noticing a tool stud which might give you something useful for analyzing the situation."; } if (probe in bay) print " The electropulse probe sticks out of the bay."; if (goggles has worn) print " There is little energy flow to be seen, since the generator is off."; ""; ], before [; Open: <>; Close: <>; Search: <>; Receive: if (noun ~= probe) "That will not fit in the fusion generator bay."; ], has container open; Scene -> contact "contact points" with name "contacts" "contact" "point" "points" "loci" "locus" "ninth" 'first' 'second' 'third' 'fourth' 'fifth' 'sixth' 'seventh' 'eighth' 'tenth' 'eleventh' 'twelvth', description [; "The twelve contacts are arranged around the edge of the plasma generation zone in perfect symmetry. They all look quite identical."; ]; Scene -> plasmagen "plasma generator" with name "plasma" "generator" "components", description "The plasma generator consists of several components whose independent functioning you are not familiar with. The overall configuration is unmistakably familiar from other Yi mechanisms you have worked with."; Scene -> containment "plasma containment system" with name "plasma" "containment" "system", description "The thing you suspect is a plasma containment system looks perfectly serviceable. The twelve contacts arranged around the bay must be the loci of some sort of magnetic field used to contain the plasma."; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! THE CONTROL STUDS !! !! Class Stud with before [; Push, Touch, Attack, Activate: return self.press(); ], has scenery; Stat controls "control surface" with name "control" "surface" 'controls', description "The control surface is covered with a large grid of studs arranged in a hexagonal packing; it also features a set-in viewscreen.", has transparent; Scene -> viewscreen "viewscreen" with name "viewscreen" "view" "screen" "set-in" "text" "list" "iconography", description [; if (goggles has worn) "It's a little hard to make out the details of the screen through the processing of the goggles."; print "The viewscreen is a small, perfectly square display set into the control surface. "; if (ignitionstud has general) { if (igniteturns > 10) { "The display seems to suggest activating the ignition stud again will fire Yi-Lono-Mordel."; } "The display is reading out some sort of indicators about an ignition sequence. It is vaguely familiar, but you do not see anything concrete."; } if (self has general) { move ignitionstud to studs; move controlstud to studs; move transmitstud to studs; seqstud.description = "Activating this toggle stud brings up a short list of the steps needed to use Yi-Lono-Mordel on the control surface viewscreen"; print "Although you can not understand the Yi writing, you can recognize a number of the control icons in the sequence: power-up, then transmit go, then control rods, then ignition."; if (generator has general) "{ Powering up you have done; no doubt there are studs to trigger the other three.|}"; ""; } "It shows some indecipherable icons."; ]; Scene -> studs "studs" with name "studs" "grid" "array" "buttons", description [; print "{Each of the thousands of studs arrayed in a regular hexagonal packing across the control surface has a color and shape, but those two together are not enough to make each unique. However, it resembles all the other Yi mechanisms you have encountered in your life; although nobody else in the galaxy might ever realize it, the third axis of encoding is in the electric potential of the stud. Although the human body is poorly suited to the task, your long study has made you sensitive to this dimension as well. With that extra information and your encyclopedic knowledge of Yi technology, you can hazard a guess about many of these controls.^^|}There are a number of studs whose {exact |}function you are fairly certain {you would recall if you studied them more closely and which seem relevant right now|of and which might prove relevant}: "; WriteListFrom(child(studs), ENGLISH_BIT); "."; ], before [; Touch: "Although you could touch more than one stud at a time, you couldn't possibly align your energies through more than one at once."; ], has pluralname supporter transparent; [ StudPush x y z; if (y) print "Timing your action carefully, y"; else print "Y"; print "ou touch your fingertip gently against ", (the) x, " and focus your mind to concentrate your energies through it.^"; if (z == 0) new_line; ]; Stud -> -> infostud "information stud" with name "info" "information" "stud" "button", description [; "Activating this stud will bring up a large display on which will be shown what you imagine must be a detailed description of the purpose behind Yi-Lono-Mordel and information on how to use it--none of which would do you any good, since you can not read Yi writing.{ You are not certain that this is the information it displays, but you did activate and then deactivate this stud several months ago, so you are quite positive about it being full of Yi text.|}"; ], press [; if (~~endgame) "This is the only stud you were able to activate when you were here before, and you are positive that it will produce the information Cheryl's looking for--which would make her bring today's session to a halt. It might be enough information for her to figure out what this place is; if so, you'd never get a chance to try again. So you better not activate it unless you've got {some|a} way to stop her."; StudPush(self); if (manual in room) { print "The projection of the information screen fades away."; if (forcefield in room && c_badguy has conv_seen) ""; print "{^^Cheryl turns to face you, anger flooding her face.|}"; remove manual; if (forcefield in room) "{ ~Damn you, Tolan, what the hell are you doing?~|}"; deadflag = 1; " ~I've had more than enough of your games, Tolan.~ She draws her laser pistol and points it at you. ~I guess it's back to the brig with you.~^^Back to the brig, and then worse, no doubt... and the end of all your plans."; } cheryl.converse(c_stall); move manual to room; print "A large display appears on the right wall of the room, filled with line after line of Yi text.{^^Cheryl notices the activity and |}"; if (goggles has general) { move goggles to room; give goggles ~general; print "takes off the goggles, then"; } "{turns to look at the display. ~That's it! You've found it. Wonderful!~ She walks over to take a closer look at it. ~Oh, Tolan, I think the first word is 'humans'! I think this might be addressed to us! The first ever communication from the Yi.~|}"; ]; Stud -> -> powerstud "powerup stud" with name "power" "powerup" "stud" "button", description [; "Activating this stud should power on and off all the major systems needed to use Yi-Lono-Mordel."; ], press [; StudPush(self); if (fixed==0) { move generatorstud to studs; if (calibratestud in studs) "Nothing happens.{ It's not going to work until you can recalibrate the ninth contact point.|}"; if (probeslot in slab) "{Nope, still not working.|Nothing happens.}"; if (generator in room) "Nothing happens."; "{Hmm... Absolutely n|N}othing happens. {Given the years of disuse, perhaps the generator is in need of minor maintenance. You search the control surface and find|You recall noticing} a generator access stud, which should give you access to the generator so you can make any repairs necessary."; } if (generator has general) { StartTimer(status, 1); give generator ~general; give ignitionstud ~general; igniteturns = 0; "The fusion generator shuts down."; } if (bay in generator) { if (turns == calibratestud.number+1) { if (probe in bay) "Well, maybe not until after you remove the probe."; "Well, maybe not until you close the access panel."; } "Nothing happens.{ It would be typical of the Yi to have a safety interlock which requires the access panel be shut.|}"; } self.description = "Activating this stud powers on and off all the major systems needed to use Yi-Lono-Mordel."; give generator general; StartTimer(status, 1); if (goggles has worn && generator in room) print "The fusion generator pillar radiates a sequence of colors: dark red, deep purple, light blue, and then builds and peaks with a very bright yellow.^^"; print "Cheryl's monitor hologram reveals significant electromagnetic activity beginning to occur within the fusion generator.^"; if (goggles has general) { cheryl.talked(); cheryl.reset(); print "^Cheryl says, ~{Huh, that's quite an intricate display|Hmm}.~^"; } else cheryl.converse(c_fusion); print "{^It looks like powering up was a good place to start; that was fairly obvious. But you have no intuition about what to do next with a mechanism on this scale; the grid of stud offers thousands of studs, any of which could plausibly be involved.^|}"; rtrue; ]; Stud -> -> statusstud "project status stud" with name "project" "status" "stud" "button", description [; "Activating this stud ought to produce some sort of more detailed display of the Yi-Lono-Mordel status.{ Knowing the way the Yi tend to compartmentalize knowledge, it will hopefully not give any detail about the point of the entire mechanism.}"; ], press [ x; StudPush(self); if (status in room) { remove status; "The installation status display fades away."; } else { if (c_badguy hasnt conv_seen) cheryl.converse(c_status); if (status.been_on == 0 && goggles has general) { move goggles to room; give goggles ~general; print "Cheryl takes off the goggles.^^"; } move status to room; self.description = "Activating this stud enables or disables a detailed display of the Yi-Lono-Mordel status."; x = status.been_on; status.been_on = 1; give status ~moved; print "{Projected on the left half of the far wall of the room, an|The} installation status display showing the current configuration of Yi-Lono-Mordel appears{|, projected on the wall}.^"; if (x && forcefield notin room) { print "{^Cheryl looks at the status display to see if there's anything new.^||{!^Cheryl glances at the status display.^|||}}"; } rtrue; } ]; Stud -> -> seqstud "sequence stud" with name "sequence" "seq" "stud" "button", description [; print "Activating this toggle stud will most likely bring up a concise listing of the steps needed to use Yi-Lono-Mordel on the control surface viewscreen"; if (generator has general && ignitionstud notin studs) print ", and you're pretty stuck for what to do next without that information"; ". It probably has text that Cheryl could decipher, but hopefully it includes symbolic instructions{; despite your bravado, Yi-Lono-Mordel is on a vastly different scope that any other Yi technology you have worked with, and you'll need help getting it going--help you can not rely on Cheryl for|, so you can figure it out on your own}.{ Unfortunately, Cheryl seems to be able to see the viewscreen pretty clearly.|}"; ], press [; StudPush(self); if (viewscreen has general) { give viewscreen ~general; "The viewscreen returns to its normal display."; } give viewscreen general; if (goggles has worn) "The viewscreen lights up, pulsing and probing energies dancing all over its surface."; "The viewscreen lights up with a list of Yi text and corresponding control iconography."; ]; Stud -> -> fieldstud "forcefield stud" with name "force" "field" "forcefield" "stud" "button", description [; "{You are no coward, but you know when you can use some help, so you always have an eye open for something like this. |}Activating this stud probably turns on a forcefield generator around the control slab{--and Yi forcefields are nearly impenetrable by human technology. This|. That} might come in handy if Cheryl was not always so close to the slab."; ], press [; if (handcuffs has worn) { "You touch your fingertip gently against the forcefield stud while focusing your mind to concentrate your energies through it. But you can not quite achieve the right electrical flow, because the handcuffs on your wrists short-circuit your hands."; } StudPush(self); if (forcefield in room) { deadflag = 1; if (c_badguy has conv_seen) "You lower the forcefield.^^ Cheryl levels her laser pistol at you. ~Tolan, I don't know what you're up to, but I'm not taking any more chances with you.~"; "You lower the forcefield. ^^ Cheryl says, ~Don't scare me like that, Tolan. We've got it all set now. We'll be famous throughout history: Cheryl Thadafel, the greatest Yi linguist ever, who decoded how to use Yi-Lono-Mordel to defeat the Lono once and for all.~ ^^ Her pistol is in her hand and pointing at you. ~Don't worry, Tolan. Your name will be right alongside mine, I imagine. I'm not sure whether the footnote will say this was your last act, or the first act of a less disreputable career; I'll leave that to the Terran Alliance to decide. They ordered me--ordered me--not to let you anywhere near this place, but I knew I could keep you in line, and of course I was right.~ ^^ Unfortunately, this was not the end you were seeking."; } if (goggles has worn) print "You watch a Yi forcefield materialize around the slab. "; if (manual in room) { self.description = "Activating this stud enables and disables a Yi forcefield around the control slab."; move forcefield to room; "Cheryl notices the activity on her hologram monitor. She turns to face you. ~Tolan, you're a dead man. I told you not to mess with anything.~ She draws her laser pistol, but hesitates. ~Hell, that's a Yi forcefield, isn't it? Well, you can't stay in there forever.~"; } deadflag = 1; print "Cheryl notices the activity on her hologram monitor. She turns to face you. ~Tolan, if I'm not mistaken, there's a forcefield around this slab... and us.~ Her laser pistol is in her hand. ~I suggest you lower that forcefield. If I'm forced to use this... well, "; style underline; print "I"; style roman; " might be trapped here for a while, but the Terran Alliance will ship the technology to break the field eventually. So why don't you make it easy on the both of us?~^^Little choice: in death there will be no second chances. Unfortunately, this has tipped them off, and you'll never get a second chance in what's left of your life, either."; ]; Stud transmitstud "transmit stud" with name "transmit" "trans" "stud" "xmit" "button" "go", description [; print "Activating this stud no doubt transmits a signal of some sort, presumably to the other asteroids in the Yi-Lono-Mordel installation."; if (controlstud hasnt general) print " {Considering their ability to miniaturize, the Yi would not need an external transmission source; the transmitter is probably right inside the slab.|Knowing the Yi, the transmitter is inside the slab.}"; "{ However, given the location and energy necessary, the signal it produces will surely be visible on Cheryl's monitor hologram or through your electromagnetic goggles.| Transmitting such a signal will be very visible on Cheryl's hologram.}"; ], press [; if (controlstud has general) "There is no point to doing that again."; if (generator hasnt general) { if (goggles hasnt general) cheryl.converse(c_didnothing); StudPush(self); "Nothing happens{--no surprise; the power is off|}."; } if (botsensor has general && botsensor.time_left == 0) { StudPush(self,1); StopTimer(botsensor); give botsensor ~general; if (probe in probeslot && probeslot in nothing) { give controlstud general; self.description = "Activating this stud transmits a signal of some sort, presumably to the other asteroids in the Yi-Lono-Mordel installation."; "Cheryl's monitor hologram lights up with a burst of radiant energy from the probe and from the transmission, both interfering with each other and masked by the surroundings of the control slab.^^An icon on the viewscreen changes subtly."; } if (goggles has worn) print "You see a large burst of electromagnetic radiation deep within the control slab at the same time there is a similarly-sized multicolored burst from the probe.^^"; if (probe in probeslot) print "Cheryl's monitor hologram lights up in two places; a blurry blue sphere within the control slab, and a larger, overlapping, multicolored sphere centered just below the surface of the slab, but not low enough to contain the other.^^"; else if (probe in slab) print "Cheryl's monitor hologram lights up in two places; a blurry blue sphere within the control slab, and a larger, partially overlapping multicolored sphere centered just above the surface of the slab.^^"; else print "Cheryl's monitor hologram lights up in two places; a multicolored sphere for the probe and a blurry blue sphere within the control slab.^^"; } else { StudPush(self); if (goggles has worn) print "You see an enormous burst of electromagnetic radiation deep within the control slab.^^"; print "A very bright blue ball appears on Cheryl's monitor hologram in the center of the control slab.^^"; } deadflag = 1; if (goggles has general) print "Cheryl takes off the goggles and"; else print "Cheryl"; " says, ~What was that? I suspect that's what a signal transmission would look like. Don't touch a thing, Tolan.~ She draws her laser pistol. ~Until I can find out what just happened, I'm sending you back to the brig.~^^Unfortunately, once she finds out what just happened, they'll probably opt for a harsher penalty than just the brig."; ]; Stud generatorstud "generator access stud" with name "generator" "gen" "access" "stud" "button", description "Activating this stud should give you access to the fusion generator used to power this facility.", press [; StudPush(self); if (bay in generator) { "Nothing happens{--presumably an interlock prevents the fusion generator from retracting while the access panel is open|}."; } if (generator in room) { remove generator; "The elliptical pillar disappears back into the floor."; } else { self.description = "Activating this stud gives you access to the fusion generator used to power this facility."; if (goggles has worn) print "You see a momentary swarming spin of energy on the floor to the right.^^"; cheryl.converse(c_pillar); print "A pale green energy appears on the monitor hologram.{ Cheryl says, ~What's that? Don't touch...~|}^^"; move generator to room; "To the right, a{|n elliptical} white pillar{ with an elliptical cross-section|} slides up out of the floor."; } ]; Stud probestud "tool stud" with name "tool" "stud" "button", description "Activating this stud will hopefully provide some sort of tool for working on the generator bay.", press [; StudPush(self); self.description = "This stud controls a probe storage mechanism."; if (parent(probeslot) == nothing) { give probeslot general; move probeslot to slab; print "A slot appears on the top of the slab{, to the left|}."; if (probe in probeslot) { print " Rising out of the slot is an electropulse probe.^"; if (probe hasnt general) { move probe to cheryl; cheryl.talked(); if (goggles has general) { give goggles ~general; move goggles to room; print "^Cheryl takes off the goggles and"; } else print "^Cheryl"; " says, ~What is that? Hands off, Tolan.~ She grabs it as it emerges."; ! Cheryl sets general on probe after a turn--general is used ! both to let her delay a turn, and to prevent her from taking ! it twice. } rtrue; } ""; } else { remove probeslot; if (probe in probeslot) "The probe sinks into the slot, which closes over it."; else "The slot through which the probe emerged closes."; } ]; Stud calibratestud "calibration stud" with name "contact" "nine" "ninth" "calibration" "calibrate" "recalibration" "recalibrate" "stud" "button", description "Activating this stud will recalibrate the ninth contact point in the fusion generator bay if the contact is appropriately stimulated at the same time.", number 0, press [; if (botsensor has general && botsensor.time_left == 0) { StudPush(self,1,1); if (probe in bay) fixed = 1; StopTimer(botsensor); give botsensor ~general; fireprobe(); if (fixed) print "{^You are confident it will power up now.^|}"; if (fixed == 1) { self.number = turns; self.description = "Activating this stud would recalibrate the ninth stud in the fusion generator bay, but that is no longer necessary."; fixed = 2; } rtrue; } if (goggles hasnt general) cheryl.converse(c_didnothing); StudPush(self); "Nothing appears to happen, but that is hardly surprising, since{ you know well|} it can't be calibrated without a{n appropriate| simultaneous electromagnetic} stimulus."; ]; ! has general if it's correct point in sequence to activate it Stud controlstud "control stud" with name "control" "stud" "button", description [; if (self has general) "Activating this stud should give access to the final control system.{ You are very fortunate that the Yi compartmentalize information displays from controls this much.|}"; "Activating this stud should give access to the final control system."; ], press [; StudPush(self); if (self hasnt general) { if (goggles hasnt general) cheryl.converse(c_didnothing); "Nothing happens."; } if (controlrods in slab) { remove controlrods; print "The control rods sink back into the surface of the slab."; if (handcuffs has general) { if (forcefield in room && keys in room) "You better not, since the cuffs will unlock, and you can't get to the key."; move handcuffs to slab; print " There is no room for the handcuffs in the slab, so they end up sitting on top of it.^"; return removecuffsfromrods(); } ""; } self.description = "This stud gives access to the final control system."; move controlrods to slab; if (goggles hasnt general) cheryl.converse(c_rods_seen); "{A|The} pair of{| control} rods slowly emerge from surface of the slab."; ]; Object endgame_obj with number 0, each_turn [; ++self.number; switch(self.number) { 2: "^A speaker at the doorway crackles to life. ~Dig Leader, some time ago we detected a transmission to the surrounding asteroids, and have just determined it came from the control room.~"; 6: "^The voice on the speaker returns. ~Also, a freighter in the area reports a signal was sent out to the neighboring stars.~"; } ], has scenery; Stud ignitionstud "ignition stud" with name "ignition" "stud" "button", description [; "Activating this stud presumably begins operation of Yi-Lono-Mordel{--and there's no way Cheryl's going to miss that|}."; ], press [; StudPush(self); if (generator hasnt general) "Nothing happens{--no surprise; the power is off|}."; if ((ignitionstud has general) && (igniteturns > 10)) { deadflag = 2; "You feel a final, tiny twinge of regret, as the energies start to course through your finger. Regret that, with the destruction of this galaxy, the Yi will have well and truly escaped the Lono forever. ^^ But the destruction of the Humans is a great thing. Since it required the Yi's Lono weapon--in addition to the weapon the Lono had considered a long shot: you--the unintentional contribution of the Yi is perhaps sufficient to justify abandoning the vow against them. ^^ Rationalization, but... ^^ the world turns white"; } if (ignitionstud has general) "Nothing happens."; if (handcuffs has general) { if (goggles has worn) { print "A"; } else { print "On Cheryl's monitor hologram, a"; } print "n enormous surge of energy flows out of the fusion generator and out in all directions around the room.^"; if (ignitionstud hasnt general && status in room) print "^The indicator corresponding to this asteroid on the installation status display turns white.^"; print "{^Cheryl looks at the monitor hologram in dismay, then turns to face you.|}"; if (forcefield in room) { give ignitionstud general; if (goggles in cheryl) { StopTimer(cheryl); print " She takes off the goggles and drops them on the floor."; give goggles ~general; move goggles to room; } move endgame_obj to room; ! what a hack! cheryl.talked(); cheryl.converse(c_winner); print "{^^Cheryl says, ~What are you up to, Tolan?~^|}"; rtrue; } if (goggles in cheryl) print " She takes off the goggles and drops them on the floor."; deadflag = 1; " Her laser pistol is in her hand, aimed quite steadily at you. ~Well, Tolan, I guess you've been making more progress here then you've been letting on. I'm afraid I'm going to have to bring a halt to your games.~ She speaks into her communicator, summoning a contingent of guards. ~I'm sorry you couldn't play by my rules, Tolan. We need the Yi-Lono-Mordel so badly, you know that. But we have to understand it before we use it. None of this recklessness.~ ^^ Unfortunately, once they understand it, you're never going to get another chance."; } "Nothing happens."; ]; !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! TOOLS AND OBJECTS !! !! [ InField x; return (x in player || IndirectlyContains(slab, x) || x == goggles || x == keys || x == forcefield || x == player || x == handcuffs); ]; Stat forcefield "forcefield" with name "force" "field" "forcefield", describe [; if (goggles has worn) "^A shimmering field of energy surrounds the slab."; rtrue; ! suppress printing anything about forcefield ], description [; if (goggles has worn) "It is a shimmering field of energy, the same as every other{ damn|} Yi force field you've encountered.{ At least it's working in your favor for once.|}"; "There is really nothing to be seen with the useless human visual system."; ], before [; Drop: <>; ], ! Man, the following is a hack. I hope it works. react_before [; Throw,Drop: if (noun == self && action == ##Drop) rfalse; "You cannot put anything outside the forcefield."; Take, Remove, Search, Touch, Pull, Push, Blow, Rub, Probe, Squeeze, Open, Close, PushDir, Transfer, Turn, Climb, Swing, Blow, Cut, JumpOver, Dig: if (~~InField(noun)) print_ret (CTheyreOrThats) noun, " outside the forcefield."; Insert,PutOn,ThrowAt, Lock, Unlock: if (~~InField(second)) print_ret (CTheyreOrThats) second, " outside the forcefield."; if (~~InField(noun)) print_ret (CTheyreOrThats) noun, " outside the forcefield."; Give: if (second == cheryl) "She is outside the forcefield."; if (~~InField(noun)) print_ret (CTheyreOrThats) noun, " outside the forcefield."; Kiss,Attack: if (noun == cheryl) "She is outside the forcefield."; if (~~InField(noun)) print_ret (CTheyreOrThats) noun, " outside the forcefield."; Go,Exit,Enter: if (noun == slab) rfalse; "You are not going anywhere with that forcefield up."; ], has insubstantial; [ RemoveCuffsFromRods; give handcuffs ~general; ! should we unlock them like traditional handcuffs? ! Yes, we should. ! Sigh, this confused a tester, though. give handcuffs ~locked; give handcuffs open; if (ignitionstud has general) { print "^The energy activity in the room drops back to the level from before you activated the ignition stud.^"; if (status in room) print "^The indicator corresponding to this asteroid on the installation status display turns grey.^"; give ignitionstud ~general; igniteturns = 0; } if (c_badguy has conv_seen) print "{^Cheryl says, ~I guess even you can change your mind.~^|}"; rtrue; ]; Stat controlrods "control rods" with article "a pair of", name "control" "rods" "pair" "of" "both" "slender", description [; print "A pair of slender {cylindrical |}control rods sticks up from the surface of the slab through a thin crack."; if (handcuffs has general) " A pair of handcuffs is holding the rods together."; else " The rods are{ about|} a meter apart.{ You have never seen anything like this in your experience with Yi equipment.|}"; ], before [; Touch,Rub: if (handcuffs has worn) { print "You touch each of the rods one at a time, but the handcuffs prevent you from touching both at the same time. "; givekeys = 1; } <>; Push: if (handcuffs has general) "The rods are being held by the handcuffs."; givekeys = 1; if (handcuffs has worn) "You try to reach and touch both of the rods at the same time, but the handcuffs prevent you."; "You push the rods, but although they do not seem immobile, they do not seem to be going anywhere.{| Perhaps they might succomb to pressure in other directions.}"; Pull: if (handcuffs has general) "The rods are being held by the handcuffs."; givekeys = 1; if (handcuffs has worn) "You try to reach and touch both of the rods at the same time, but the handcuffs prevent you."; "You pull the rods together, towards each other, and they move until they are much closer. {An icon on the viewscreen changes slightly. The rods|They} want to spring back apart, and you can not do anything else while holding them together, so you release the rods{| again| yet again}."; Receive: givekeys = 1; if (noun == handcuffs) { <>; } if (noun == goggles) { "You pull the rods together and attempt to slip the goggles on the rods, but the goggles cannot stretch far enough."; } "You cannot put ", (thatorthose) noun, " on the control rods."; LetGo: if (noun == handcuffs && forcefield in room && keys in room) "You better not, since you can't get to the key to lock them again."; ], after [; LetGo: if (noun == handcuffs) { print "You take the handcuffs off the rods, which return to their original configuration.^"; return removecuffsfromrods(); } ], has pluralname supporter; Scene -> "crack" with name 'thin' 'crack', description "The rods poke up out of this thin crack.", before [; Receive: "It's much too thin."; ] has concealed ; Stat -> controlrod "one control rod" with name "control" "rod" "one" "left" "right", description [; return controlrods.description(); ], before [; Touch,Rub: "Although the rods have a subtle electric potential, you cannot find any way to trigger them energistically."; Push,Pull: "The control rod seems to give fractionally; you try the other and get the same result."; Receive: if (noun == goggles) "You could do that, but it would not help at all."; if (noun == handcuffs) <>; ], has concealed proper; ! general: player has seen probeslot and probe Stat probeslot "slot" with name "slot", description [; if (probe in probeslot) "The probe is sticking out of the probeslot."; "This narrow rectangular slot is where the probe emerged."; ], before [; Receive: if (noun ~= probe) "That wouldn't fit in the slot that held the probe."; ], after [; Receive: "You put the ~top~ end of the probe back into the slot, leaving the sensors exposed. The probe is held in place firmly, but sticks up out of the slot."; ], has container open; ! general: cheryl has held probe for a turn Object -> probe "electropulse probe" with name "electropulse" "electro" "pulse" "probe", article "an", description [; print "A thin{, cylindrical,|} half-meter-long rod, the electropulse probe is a common Yi device for working with certain kinds of Yi technology. The subtle interplay of electric and magnetic fields found in mechanisms can be stimulated with the probe, useful for detection, analysis, or calibration. At one end are two control sensors."; if (probe in probeslot) "^^The probe is sticking out of a slot in the slab."; if (probe in bay) "^^The probe is sticking out of the fusion generator bay"; ""; ], before [; SwitchOn, SwitchOff: "There's no way to make it probe repeatedly; you'll have to use the sensors."; Throw: if (handcuffs has worn) rfalse; if (forcefield in room) "You can't throw the probe through the forcefield."; move probe to room; cheryl.talked(); print "You throw the probe over by the "; if (status in room) print "blank side of the wall on which the status display appears"; else if (status.been_on) print "right half of the far wall, opposite where the status display was"; else print "right half of the far wall"; ".{^^Cheryl says, ~You don't expect me to go get that for you, do you Tolan?~|}"; PutOn: if (second hasnt container && second hasnt enterable) <>; ], has transparent; Global last_fire; [ react; if (goggles has general) { cheryl.reset(); cheryl.talked(); print "^^Cheryl{, watching through the goggles,} says, ~{Huh. Tolan, I'd never have thought you'd be one to admire beauty.|Quite neat.|It's nice, but I've seen it before.|{!Wow.|Hmm.|Uh huh.}}~"; } ""; ]; [ fireprobe x; ! x is true if it is on a daemon if (x && turns-1 == last_fire) "^The probe fires on the delay as well, with similar results."; if (~~x) last_fire = turns; else last_fire = -1; if (goggles has worn) { if (probe in player) { "^A sharp, multi-colored burst of electromagnetic radiation pulses out of the tip of the probe."; } if (probe in bay) { move calibratestud to studs; print "^A sharp, multi-colored burst of electromagnetic radiation pulses out of the tip of the probe.^"; print "^The contact points in the fusion generator bay resonate in response"; if (fixed) "."; "--all but the ninth one, which stays utterly black. There is probably a recalibration stud for each of the contacts{ amongst the giant array of controls on the slab.^^It is a good thing you got the goggles; the probe flash tends to overwhelm the details on Cheryl's hologram anyway.|.}"; } if (probe notin probeslot || probeslot notin nothing) "^A burst of electromagnetic radiation pulses out of the probe; Cheryl's monitor hologram lights up with a shimmering multi-colored sphere which slowly fades."; } if (probe in probeslot) { if (probeslot in nothing) { cheryl.talked(); print "^Cheryl's monitor hologram lights up with a burst of radiant energy from the probe, masked by{ the surroundings of|} the control slab."; if (goggles hasnt general) print "{^^Cheryl says, ~That was a strange thing to do.~|}"; } else print "^Cheryl's monitor hologram lights up with a burst of radiant energy from the probe, just under the surface of the slab."; } else if (probe in slab) { print "^Cheryl's monitor hologram lights up with a burst of radiant energy from the probe, just at the surface of the slab."; } else { if (goggles hasnt worn) print "^Although you cannot see anything happening directly, "; print " Cheryl's monitor hologram lights up with a multi-colored iridescent sphere which slowly fades away."; if (probe in bay) { if (fixed) print " At the same time, a number of smaller points of white appear in the part of the hologram corresponding to the fusion bay, but you cannot make out the details from here."; else print " At the same time, a number of smaller points of white appear in the part of the hologram corresponding to the fusion bay, but you cannot make out the details{| from here| from here--unfortunate, since those details are just what you need to make the repairs| from here}; they are somewhat obscured by the glow of the probe."; } } return react(); ]; ! general: player has fired it at least once Scene -> -> topsensor "top sensor" with name "top" "sensor" "sensors", description "The top sensor will trigger the probe to fire immediately.", before [; Push,Touch,Rub,Activate: print "You trigger the top sensor.^"; return fireprobe(); ]; ! general: is running Scene -> -> botsensor "bottom sensor" with name "bottom" "sensor" "sensors", description "The bottom sensor triggers the probe to fire after a delay.", before [; Push,Touch,Rub,Activate: if (self has general) { StopTimer(self); give self ~general; if (goggles has worn) "You trigger the bottom sensor, and the electromagnetic activity in the probe drops significantly."; "You trigger the bottom sensor."; } give self general; StartTimer(self, 2); if (goggles has worn) "You trigger the bottom sensor, and the{ ambient|} electromagnetic activity in the probe increases significantly."; "You trigger the bottom sensor."; ], time_left 0, time_out [; fireprobe(1); give self ~general; if (goggles has worn) "^The electromagnetic activity in the probe drops to ambient levels."; ]; ! general: Cheryl is wearing them Object goggles "electromagnetic goggles" with article "a pair of", name "goggles" "em" "electromagnetic" "electro" "specs" "pair" "of" "goggle", description [; print "You've used these goggles for so long it's impossible not to think of them as a superior part of an otherwise inferior body. Even though the translation of broadband electromagnetic emissions into your visual perceptual system is limited by that selfsame perceptual system, it's better than nothing."; if (goggles has worn) " You are wearing them."; if (goggles has general) " Cheryl is wearing them."; ""; ], after [; Wear: if (generator has general && c_badguy hasnt conv_seen) cheryl.converse(c_goggles); if (handcuffs has worn) print "You clumsily struggle to"; else print "You"; " put on the electromagnetic goggles and the room suddenly bursts to life visually{. Whorls and eddies of energy play over every surface of the room but the window. Although it is a far cry from being able to directly perceive this much of the electromagnetic spectrum, it is far, far more than you have been forced to live with for some time.^^The one drawback is that it is difficult to read displays, since the display spectrum is compressed to such a narrow band, and the display circuitry itself is exposed.|, including the various displays, which become more challenging to read.}"; Disrobe: if (generator has general && c_badguy hasnt conv_seen) cheryl.converse(c_takeoff); "You take off the goggles, revealing the drab world of the natural human visual spectrum."; ], before [; LookUnder: if (goggles has worn) "That would be difficult."; if (goggles has general) "Cheryl won't let you get close enough to check."; "Nothing there."; ], has clothing pluralname; ! general: attached to the rod Object handcuffs "handcuffs" with name "handcuffs" "cuffs" "pair" "of", article "a pair of", description [; print "Military grade handcuffs{--oblong, blocky, but perfectly functional|}. You have seen them often enough in your lifetime{--almost always in similar circumstances, sadly|}."; if (self has worn) " They are securely fastened around your wrists{, although since they are locked in front of you they should not interfere too much with your work|}."; ""; ], before [; Cut: if (self has worn) "You don't have anything appropriate to do that with, and even if you did, Cheryl would probably have something to say about it."; "You don't have anything appropriate to do that with."; Attack: if (self has worn) "Cheryl would probably get annoyed with you if you tried to break out of them.{ And she has a laser pistol.|}"; "That wouldn't accomplish much."; Insert: if (self has worn && self has locked) "You cannot take the handcuffs off while they're locked."; Disrobe: if (self has worn) { if (self has locked) { if (keys in room) { print "(first taking the key)^"; keep_silent = 1; ; keep_silent = 0; if (keys notin player) rtrue; } if (keys notin player) { "{The handcuffs are locked quite securely around your wrists.|You cannot take the handcuffs off if they're locked.}"; } keep_silent = 1; print "(first unlocking the handcuffs)^"; ; keep_silent = 0; if (self has locked) rtrue; } if (self hasnt open) { print "(first opening the handcuffs)^"; keep_silent = 1; ; keep_silent = 0; } } Wear: if (self has worn) rfalse; if (endgame) "Now is not the time to be fooling around."; if (self has locked) "You can't wear them if they're already locked."; if (self hasnt open) { print "(first opening the handcuffs)^"; ; } Open: if (self has general) <>; if (self has open) rfalse; if (self has locked && keys in player) { print "(first unlocking the handcuffs)^"; ; rfalse; } Lock: if (self in player && self hasnt locked && self has open) { print "(first closing the handcuffs)^"; ; } LookUnder: if (handcuffs has worn) "The pale flesh of human wrists."; if (handcuffs has general) "They're hooked around the control rods."; "There's nothing under them."; ], after [; Close: if (self has worn) { give self locked; "You shut the handcuffs around your wrists; they lock with a snap."; } Unlock: if (handcuffs has general) { if (forcefield in room && keys in room) "You better not, since you can't get to the key to lock them again."; print "You unlock the handcuffs, and the rods pull apart, dropping the cuffs onto the slab.^"; move handcuffs to slab; return removecuffsfromrods(); } ], with_key keys, has ~open lockable openable worn clothing locked pluralname; [ Initialise; hint_menu = yi_hint_menu; thedark.description = "It is pitch black. You might not want to do this."; location = room; move handcuffs to player; print "You pass the sentry watching the doorway to the Yi control room, hardly aware of his presence, and step inside, stopping before the owner of the familiar, frowning face just inside. Your escorts come to a halt behind you.^^ ~Tolan,~ the tall, wiry woman says to you.^^ You steel yourself for the need to speak. ~Cheryl,~ you reply. ~Dig Leader Cheryl Thadafel. I knew you would have need of the greatest Mechanist in the galaxy. Again.~ The longest speech ever to cross these lips?^^ ~Tolan, this is going to be on my terms, or not at all.~^^ You turn your empty hands face-up. ~Cheryl, this is important to me. It is the "; style underline; print "Yi-Lono-Mordel"; style roman; print ". Whatever the restrictions, I cannot miss this opportunity.~^^ ~Especially if the restrictions required you be kept away from it. Enough. I don't have much else to work with here, do I?~ As she dismisses the guards, you sweep your eyes about the room.^^ Again.^^ This time you will pull it off--regardless of Cheryl's desires.^^"; ]; [ AboutSub; print "EXAMINE everything to learn what the character you're controlling knows, even tiny objects which are unlikely to have traditional descriptions. ^^The only other significant deviation of this game from typical interactive fiction is in communication with other characters:^"; font off; print "^TALK TO character; TALK; T Respond to another character's conversation ^ASK character FOR object Ask a character to supply you with an object ^character, EAT FOOD Ask a character to do something specific"; ! "^TALK TO character, TALK Say something related to your last action. It ! ^ (also 'T' or 'SPEAK') will also continue conversations with other ! ^ characters, and, lacking anything else to say, ! ^ will pick at random from some general topics. ! ^REPLY TO character Give an answer to character's last question ! ^REPLY Give an answer to last question ! ^ (also 'R' or 'ANSWER') ! ^ASK character FOR object Ask a character to supply you with an object ! ^character, EAT FOOD Ask a character to do something specific"; font on; "^^If someone threatens to incapacitate you if you don't do as they tell you, take the threat seriously. You can always UNDO if things do go wrong; the game prevents you from taking actions that would require more than one UNDO to recover from--that is, actions that put the game in an unwinnable state. ^^Hints and credits are available by typing HINT. ^^Remember, EXAMINE everything to learn what the character you're controlling knows."; ]; [ CuffSub; if (handcuffs notin player) "You don't have the handcuffs."; if (handcuffs has worn && handcuffs has locked) "You're no Houdini."; if (noun == controlrods or controlrod) { if (handcuffs has general) "The handcuffs are already holding the control rods together."; give handcuffs ~worn; give handcuffs ~open; give handcuffs locked; give handcuffs general; move handcuffs to controlrods; if (goggles hasnt general) cheryl.converse(c_rods); "You pull the rods together and slip the handcuffs on them.{ They seem to hold the rods together quite handily.} An icon on the viewscreen changes slightly."; } else if (noun == cheryl) { "Not bloody likely."; } else if (noun == player) { if (handcuffs has locked) "You can't put the handcuffs on if they're already locked."; give handcuffs worn; give handcuffs locked; give handcuffs ~open; "You put on the handcuffs and lock them securely."; } "You can't put the handcuffs on ", (thatorthose) noun, "."; ]; [ ShootAtSub; if (noun == probe) <>; "You can't shoot ", (thatorthose) noun, "."; ]; [ ShootSub; "You don't have anything to shoot with."; ]; [ StandNearSub; if (noun == cheryl) { if (forcefield in room) "The forcefield is in the way."; cheryl.talked(); "{Cheryl says, ~Don't come any closer, Tolan.~|You'd better not.}"; } "That would accomplish nothing."; ]; [ PointAtSub; if (noun == handcuffs && handcuffs has worn) "Maybe if you had more than two hands you could pull that off."; print "You point at ", (the) noun, ".^"; cheryl.point_at(noun); ]; [ TouchToSub; if (noun == probe) <>; "That would accomplish nothing."; ]; [ TieSub; if (noun notin player) "You don't have ", (the) noun, "."; if (noun has nonlocal) return L__M(##Miscellany,54,noun); if (noun has insubstantial) return L__M(##Miscellany,55,noun); if (second) { if (noun == probe) <>; if (noun == goggles && second == controlrods or controlrod) <>; if (noun == handcuffs && second == controlrods or controlrod) <>; } L__M(##Tie,1,noun); ]; [ AnswerSomeoneSub; if (~~noun.answered()) ! "That's not{ really|} something you can reply to."; ! "There's nothing for you to reply to."; "There's no good reply to make."; ]; [ TalkToSub; if (~~noun.talkedto()) { "You don't think talking right now would accomplish anything."; } ]; [ AnswerGeneralSub; <>; ]; [ TalkSub; <>; ]; [ ProbeWithSub noprobe; if (second ~= probe) "You can't probe with ", (thatorthose) second, "."; if (second notin player) { if (second in noun) { if (noprobe) "It's already there."; <>; } "You're don't have ", (the) second, "."; } if (noun == cheryl) { cheryl.talked(); "Cheryl circles the slab and gives you a look of warning."; } if (noun == bay or contact or containment or plasmagen) { ; if (probe in bay) { if (noprobe) rtrue; print "^"; <>; } rtrue; } if (noun == slab or probeslot) { if (probeslot in slab) { ; if (noprobe) rtrue; if (probe in probeslot) { print "^"; <>; } rtrue; } else { if (probe notin slab) { move probe to slab; print "You don't see any access to the innards of the slab, so first you set the probe on top of the slab.^"; if (noprobe) rtrue; print "^"; } if (noprobe) "It's already there."; <>; } } if (noprobe) "You hold the probe near ", (the) noun, "."; print "You move the probe near ", (the) noun, " and trigger the top sensor.^"; fireprobe(); rtrue; ]; [ ProbeWithMinorSub; return ProbeWithSub(1); ]; [ PointThingSub; if (noun == probe && second == bay or contact or containment or plasmagen) <>; if (noun == probe && second == slab or probeslot) { if (probeslot in slab) <>; <>; } if (noun == probe) <>; if (noun == goggles && goggles has worn) <>; if (noun == pistol) "Er, how'd you get that?"; "I'm not sure what you're trying to do."; ]; [ ProbeSub; if (noun ~= probe && probe in player) <>; if (probe in noun) <>; if (IndirectlyContains(room,probe)) "You're not holding the probe."; "You don't have anything useful to probe with."; ]; [ HelloSub; "If you want to talk to Cheryl, use TALK or REPLY."; ]; [ WinSub; "You'll have to explain just how you want to go about that."; ]; [ ThrowSub; DropSub(); ]; [ LaughSub; if (c_badguy has conv_seen) print "You cackle maniacally"; else print "You laugh"; if (noun) " at ", (the) noun, "."; else "."; ]; [ SmileSub; if (c_badguy has conv_seen) print "You smile evilly"; else print "You smile"; if (noun) " at ", (the) noun, "."; else "."; ]; [ FrownSub; if (noun) "You frown at ", (the) noun, "."; else "You frown."; ]; [ NodSub; if (noun) "You nod at ", (the) noun, "."; else "You nod."; ]; [ WinkSub; if (noun) "You wink at ", (the) noun, "."; else "You wink."; ]; [ ActivateSub; if (noun ofclass Stud || noun==topsensor or botsensor) <>; <>; ]; [ DeactivateSub; if (noun ofclass Stud || noun==topsensor or botsensor) <>; <>; ]; Verb 'laugh' 'giggle' 'chuckle' 'cackle' 'snicker' * -> Laugh * 'at' creature -> Laugh; Verb 'smile' 'grin' 'smirk' * -> Smile * 'at' creature -> Smile; Verb 'frown' 'glare' * -> Frown * 'at' creature -> Frown; Verb 'nod' * -> Nod * 'at' creature -> Nod * 'to' creature -> Nod; Verb 'wink' * -> Wink * 'at' creature -> Wink; Extend only 'throw' replace * multiheld -> Throw * multiexcept 'in'/'into'/'down' noun -> Insert * multiexcept 'on'/'onto' noun -> PutOn * held 'at'/'against'/'on'/'onto' noun -> ThrowAt; Extend 'speak' first * -> Talk * 'to' creature -> TalkTo; Verb 'talk' * -> Talk * 'to' creature -> TalkTo; Verb 't//' * -> Talk * creature -> TalkTo * 'to' creature -> TalkTo; Extend 'answer' first * -> AnswerGeneral * creature -> AnswerSomeone; Verb 'reply' 'respond' * -> AnswerGeneral * 'to' creature -> AnswerSomeone; Verb 'r//' * -> AnswerGeneral * creature -> AnswerSomeone * 'to' creature -> AnswerSomeone; Extend 'hold' * held 'near' noun -> TouchTo * multiexcept 'in' noun -> Insert; Extend 'pull' * noun 'with' held -> Insert reverse * noun 'together' -> Pull; Extend 'push' * noun 'together' -> Pull; Verb 'link' * noun 'with' held -> Insert reverse; Extend 'tie' * noun 'with' noun -> Tie reverse; Verb 'shoot' 'fire' * noun -> Shoot * noun 'with' held -> ShootAt reverse * held 'at' noun -> ShootAt; Verb 'aim' * held 'at' noun -> ShootAt; Verb 'cuff' 'handcuff' * noun -> Cuff; Extend 'stand' * 'by' noun -> StandNear * 'with' noun -> StandNear * 'near' noun -> StandNear * 'close' 'to' noun -> StandNear * 'closer' 'to' noun -> StandNear * 'next' 'to' noun -> StandNear; Verb 'approach' * noun -> StandNear; Extend 'move' * 'by' noun -> StandNear * 'near' noun -> StandNear * 'close' 'to' noun -> StandNear * 'closer' 'to' noun -> StandNear * 'next' 'to' noun -> StandNear; Extend 'touch' * held 'to' noun -> TouchTo * noun 'with' held -> TouchTo reverse; Verb 'study' = 'examine'; Verb 'point' * 'at' noun -> PointAt * held 'at' noun -> PointThing; Verb 'probe' * noun -> Probe * noun 'with' held -> ProbeWith; Verb 'hello' * -> Hello; Verb 'activate' 'trigger' * noun -> Activate; Verb 'deactivate' * noun -> Deactivate; Verb meta 'about' * -> About; Verb meta 'win' 'lose' * -> Win;