Switches xv5; Constant TASKS_PROVIDED; Constant NO_PLACES; Constant NO_CHATTER; Constant TRANSFER_DIRECTION; ! Constant ZDEBUG; Constant Story "INHUMANE"; Release 2; Property return_to 0; Attribute outdoors; Replace Banner; Replace DigSub; Replace ScoreSub; Replace FullScoreSub; Replace NotifyTheScore; Constant NUMBER_TASKS 10; Constant MAX_SCORE 90; Global task_scores initial 0 10 10 10 10 10 10 10 10 10; Global death_mode = 0; Include "Parser"; Object LibraryMessages "lib_messages" with before [; Prompt: if (lm_n==2) "All right, be that way."; Miscellany: if (lm_n==9) { deadflag = 1; "^It is very dark. Before you can do anything, something begins \ gnawing on you."; } FullScore: if (lm_n==4) { print "in total.^"; } rtrue; Inv: if (lm_n==1) "You are holding nothing."; print "You are holding"; rtrue; Take: if (lm_n==10 || lm_n==11) "A wimp like you will never get that done."; PutOn: if (lm_n==3) { print "You can't put anything on "; DefArt(lm_o); "."; } Examine: if (lm_n==2) { print "You see nothing interesting about "; Defart(lm_o); "."; } Open: if (lm_n==1) "You must be quite a brain to get that one open."; if (lm_n==3) "It is open, shmuck."; Jump: "Wheeee! That was fun. Let's do it again sometime."; Turn: "You must have had a moronicity spell cast on you."; Push: "That won't push."; PushDir: if (lm_n==1) { if (noun has scenery || noun has static) "That won't push."; else "Why don't you just pick it up?"; } Close: if (lm_n==1) "You're not likely to get that closed, O massive mental moron."; if (lm_n==2) "It is shut!"; Wait: "Time passes... Waiting... Waiting... Dozing..."; ]; Include "VerbLib"; Object grue "##grue##" with name "gruedaemon", description "It is very dark. Before you can do anything, something begins \ gnawing on you.", daemon [; if (location == thedark) { give thedark ~visited; deadflag = 1; } ]; ! ----------------- Object InYourTent "In Your Tent" with name "sanity" "tent" "flap", description "You are in your tent in the encampment. The tent appears to have been \ completely cleaned out. It is very hot in here and getting hotter. The \ tent flap to the south is open.", s_to CenterOfCamp, has light; Nearby amulet "jeweled amulet" with name "jeweled" "amulet", return_to nothing, describe [; "On the ground is the ancient jeweled amulet that you ~borrowed~ from Mr. Meshugge."; ]; ! general means you know about the toilet Object CenterOfCamp "Center of Camp" with name "sanity" "tent" "tents" "desert", description "This is the center of your camp. The entire place seems to be completely \ deserted. You can see Roboff's tent to the south and the storage tent \ west. East is open desert.", n_to InYourTent, w_to StorageTent, s_to RoboffsTent, e_to [; print "You venture out onto the sands and rapidly lose sight of camp.^"; InTheDesert.number = 2; return InTheDesert; ], has light outdoors; Object StorageTent "Storage Tent" with name "sanity" "tent" "chest" "chests", description "This is where the party kept all its supplies. However Roboff seems to \ have cleaned everything out that was of any use. Several arrows of \ Da-Glo paint on the wall attract your attention to the empty food and \ water chests.", e_to CenterOfCamp, has light; Nearby torch "torch" with name "brass" "electric" "torch", return_to selfobj, describe [; "Lying on the ground is a brass torch of the ~self-igniting~ type. \ The ignite button is on the handle."; ], description "It is an ordinary electric torch with \ an auto-ignite button on the handle.", has transparent; Nearby shovel "shovel" with name "shovel", return_to RoundRoom, describe [; "There is a shovel lying here."; ]; Object torchbutton "torch button" torch with name "brass" "auto" "ignite" "auto-ignite" "button", before [; Push: give torch light; "The torch flickers a few times and then glows steadily."; ]; Object RoboffsTent "Roboff's Tent" with name "sanity" "tent", description [; print "You are in Francisco Roboff's tent. The place is bare except for the \ emergency signal radio and Roboff's toilet in one corner. There is a \ note taped to the tent wall.^"; if (toilet has general) { print "The toilet is open. A hole goes down the bowl into darkness.^"; } rtrue; ], n_to CenterOfCamp, d_to [; if (toilet has general) { print "You clamber into the toilet \ bowl and climb down through the roof of the buried pyramid. You \ drop to the floor.^"; return RoundRoom; } return 0; ], has light; Nearby toilet "Roboff's toilet" with name "Roboff's" "toilet", before [; Examine: <>; Open: if (amulet hasnt general) { "Ecchhh! You don't have a reason to do anything like that."; } give self general; "You have stooped to a new low by \ snooping around toilet bowls. However, when you raise the lid, you \ find a dark hole going down."; ], has scenery proper; ! general means open Nearby radio "signal radio" with name "emergency" "signal" "radio", description "The radio has only one button, which \ will start a distress/locator beacon.", has scenery transparent; Nearby note "note" with name "note", description [; print "~Hi. Sorry about running off \ so suddenly but you know how it is... With luck, you will die, but I want \ you to have something to do while you starve so I'll "; print "tell you how to find the \ pyramid. Oh, I didn't mention that I found it two weeks ago? I never got \ in because the door is opened by putting that amulet of yours "; print "into a little slot. Anyway, go \ to the middle of camp and go east four times and north once. Dig \ there. Have fun!^ -F. Roboff~^"; rtrue; ], has scenery; Object radiobutton "radio button" radio with name "signal" "button", before [; Push: "You can't radio the plane now! You don't even have the coffin yet!"; ]; Object InTheDesert "In the Desert" with name "sanity" "sand" "sunlight" "light", description "All you can see in any direction is sand and sunlight. You are sweating \ like a pig.", e_to [; self.number = self.number + 2; if (self.number == 0) { print "You have stumbled over the encampment. Sheer accident.^"; return CenterOfCamp; } return self; ], w_to [; self.number = self.number - 2; if (self.number == 0) { print "You have stumbled over the encampment. Sheer accident.^"; return CenterOfCamp; } return self; ], n_to [; self.number = self.number + 5; if (self.number == 0) { print "You have stumbled over the encampment. Sheer accident.^"; return CenterOfCamp; } return self; ], s_to [; self.number = self.number - 5; if (self.number == 0) { print "You have stumbled over the encampment. Sheer accident.^"; return CenterOfCamp; } return self; ], before [; Drop: remove noun; "It falls and is lost forever in the sands."; ], after [; Go: give self ~visited; rfalse; ], number 0, ! desert-lost index has light outdoors; Object BottomOfAHole "Bottom of a Hole" with name "sanity", description "You are at the bottom of the hole you just dug. The floor of the hole is \ a stone slab with a little slot in it. You can nearly smell the riches \ that must be buried beneath your feet!", u_to "What?! Leave when the riches of the pyramid await you?", has light outdoors; Nearby amuletslot "little slot" with name "little" "slab" "slot", description "You see nothing interesting about the little slot.", before [; Receive: if (noun ~= amulet) { "It won't fit into the slot."; }; print "Ok. As it slips \ in, the stone slab moves aside, dumping you into a pit. You look up and \ see the amulet falling into a machine that \ wraps it, addresses it to F. Roboff, and takes off on jets.^"; remove amulet; give amulet general; ! so further digging fails PlayerTo(InAPit); rtrue; ], has scenery container; Object InAPit "In a Pit" with name "sanity" "walls", description "This is a sandy pit with stone walls. You are not likely to be able to \ climb out. The only thing here is a note taped to the wall.", u_to "Fat chance.", has light outdoors; Nearby pitnote "note" with name "note", before [; Examine: print "~Thanks for the amulet! It only \ took me a few days to make this little set-up. If you really want to get \ to the pyramid, retrace your steps back to camp after "; print "the pit caves in (which should \ happen soon) and open my toilet. You see, I really found the \ pyramid with a mass sensor when we moved in and I built my "; print "tent over it. The toilet \ conceals a secret passage down into the pyramid, which I have been \ looting for weeks. Most of the easy stuff is in my private safe in "; print "Miami by now, but I left you a \ few goodies. Including the gold coffin, which I never found. \ When you get tired of poking around you can use the "; print "emergency radio in my tent. \ It'll call a plane to pick you up. Have fun!^ -Roboff.~^^"; print "You hear a rumbling and look \ up as the sides of the pit collapse. You manage to stay on top, and you \ end up in the desert again.^"; InTheDesert.number = 13; PlayerTo(InTheDesert); rtrue; ], has scenery; Object RoundRoom "Round Room" with name "sanity" "stairways" "stairway" "stair" "stairs", description [; if (self hasnt general) { "This room is at the peak of the pyramid. It is perfectly conical. In the \ center is a tall stone obelisk that you could probably use to get back \ up to the fake toilet. There are four stairways leaving the room at the \ four compass points."; } else { "This room is a conic surface with \ exits at even multiples of 90 degrees. In the center is a regular \ square pyramid with a narrow vertex angle."; } ], u_to [; print "You scramble up the obelisk and manage to \ crawl into the hole. After some more squirming, you reach the \ toilet.^"; return RoboffsTent; ], w_to TeeE, e_to TeeW, n_to Landing, s_to CorridorAtAlcoves, d_to "Stairways go down to the north, south, \ east, and west. Which way do you want to go?", daemon [ dummy; if (coffin in RoundRoom) { print "^The obelisk suddenly glows and a great voice speaks out \ of it (not the voice that you've been talking to already.) \ ~Ahhh-ha! A gold rectangular solid! "; print "Measurements -- 3 feet by 4 feet by 9 feet! Volume -- 108 \ cubic feet! Surface area -- 150 square feet! Lateral area -- 78 square \ feet! Diagonals of faces -- 5 feet, square root "; print "of 97 feet, and 3 times square root of 10 feet! Diagonal \ of solid...~^^"; print "About this point, your mind goes numb. You feel \ RAHNgons growing in your blood-stream. You collapse on the ground, \ thinking only...^^"; style bold; print "I love geometry...^I love geometry...^^"; style roman; print "--end of session--^"; new_line; read_char 1 0 0 dummy; quit; } ], has light; ! general means Rahnified Nearby obelisk "stone obelisk" with name "tall" "stone" "obelisk" "pyramid", before [; Examine: print "The obelisk is a monument to the great RAHN. The inscription starts:^"; print "~For RAHN hath given us the postulates "; print "and the theorems; we shalt thank \ RAHN. For RAHN hath said 'Between any two points there shalt be \ but one line'; and he found it good. For RAHN hath said "; print "'If two planes intersecteth, they \ shalt form but one straight line'; and he found it good. For RAHN \ hath said...~^It goes on like this for a long time.^"; print "When you manage to break the trance, \ your mind is numbed and full of RAHN's strange commandments.^"; give RoundRoom general; give RoundRoom ~visited; PlayerTo(RoundRoom); rtrue; ], has scenery; Object TeeE "T-Intersection" with name "sanity", description "The east/west corridor branches to the south here.", e_to RoundRoom, u_to RoundRoom, w_to EOfPit, s_to SouthBranch; Object EOfPit "Corridor Near Pit" with name "sanity", description "West is a large round pit about 65 feet deep. Running down the center of the \ pit is an axle with a platform attached at the level of this hall. The platform is \ swinging around the wall of the pit. You see another hall west across the pit.", e_to TeeE, w_to [; if (SwingPlatform.number == 2) { print "You step onto the swinging platform.^"; return SwingPlatform; } else { print "You step out of the \ hallway. However, the platform is to the "; ShowSwingDir(); print " right now, so you plummet 65 feet and splat. What a mess.^"; deadflag = 1; return; } ], each_turn [; print "^The platform is to the "; ShowSwingDir(); print " of the axle.^"; ]; Object SwingPlatform "On the Platform" with name "sanity", description "You are standing on a wooden platform swinging clockwise around the pit wall. The \ floor is 65 feet down but halls leave the pit at this level on the east and west \ sides.", e_to [; if (self.number == 2) { print "You step off the platform to the east hall.^"; return EOfPit; } return SwingMove(2); ], w_to [; if (self.number == 6) { print "You step off the platform to the west hall.^"; return WOfPit; } return SwingMove(6); ], n_to [; return SwingMove(0); ], s_to [; return SwingMove(4); ], w_to WOfPit, daemon [; self.number = self.number + 1; if (self.number == 8) self.number = 0; if (location == self && self.number == 1) { print "^The platform is to the "; ShowSwingDir(); print " of the axle.^^"; print "There seems to be an invisible \ bar sticking out of the northeast wall of the pit. It sweeps you \ off the platform into the pit."; deadflag = 1; death_mode = 1; } ], each_turn [; print "^The platform is to the "; ShowSwingDir(); print " of the axle.^"; ], number 0; ! direction of platform [ SwingMove walldir; walldir = walldir - SwingPlatform.number; if (walldir == -7 || walldir == -1 || walldir == 0 || walldir == 1 || walldir == 7) { print "You bang your nose on the pit wall.^"; } else { deadflag = 1; print "You step off the \ platform into empty space. You plummet 65 feet and splat into the \ pit floor.^"; } rtrue; ]; [ ShowSwingDir ; if (SwingPlatform.number == 0) print "north"; if (SwingPlatform.number == 1) print "northeast"; if (SwingPlatform.number == 2) print "east"; if (SwingPlatform.number == 3) print "southeast"; if (SwingPlatform.number == 4) print "south"; if (SwingPlatform.number == 5) print "southwest"; if (SwingPlatform.number == 6) print "west"; if (SwingPlatform.number == 7) print "northwest"; ]; Object WOfPit "West of the Pit" with name "sanity", description "The pit with the swinging platform is east of this intersection. Halls go north \ and south.", n_to KeyRoom, s_to BlackRoom, e_to [; if (SwingPlatform.number == 6) { print "You step onto the swinging platform.^"; return SwingPlatform; } else { print "You step out of the \ hallway. However, the platform is to the "; ShowSwingDir(); print " right now, so you plummet 65 feet and splat. What a mess.^"; deadflag = 1; return; } ], each_turn [; print "^The platform is to the "; ShowSwingDir(); print " of the axle.^"; ]; Object KeyRoom "Key Room" with name "sanity", description "In the center of this room is a stone block. There is a stone disk on the top \ surface of the block. Directly above the disk is suspended a glass globe just full \ of spiders and little snakes and scorpions. Exits are north and south.", s_to WOfPit, n_to DemonRoom; Nearby globe "glass globe" with name "glass" "globe" "spiders" "snakes" "scorpions", description "The contents look nasty.", has scenery; Nearby keydisk "stone disk" with name "stone" "disk" "disc", describe [; if (children(keydisk) ~= 0) { print "Sitting on the disk is:^"; WriteListFrom(child(keydisk), INDENT_BIT + NEWLINE_BIT + FULLINV_BIT + RECURSE_BIT, 1); } rtrue; ], before [; Receive: if (noun == ironkey) "The key won't stay down."; if (children(keydisk) >= 2) { deadflag = 1; "Ok. The disk sinks several feet down its shaft. This uncovers \ a small hole that sprays out gas."; } LetGo: if (noun == ironkey) { if (children(keydisk) > 1) { remove ironkey; ! it'll be back print "The key is \ stuck to the disk with a dot of wax, which you pull off. Odd -- the \ key seems to have negative weight! With the lift of the key removed, \ and the extra weight of "; WriteListFrom(child(keydisk), ENGLISH_BIT + DEFART_BIT); print ", the disk sinks several feet \ down its shaft. This uncovers a small hole that sprays out gas.^"; deadflag = 1; rtrue; } } ], after [; LetGo: if (noun == ironkey) { "The key is stuck to the \ disk with a dot of wax, which you pull it off of. Odd -- the key seems \ to have negative weight. With the lift of the key removed, the \ disk sinks a few inches. \ However, there is no other effect. You have actually survived a \ trap!"; } "Ok. The disk rises a few inches as you remove the weight."; Receive: "Ok. The disk dips a few inches under the extra weight."; ], has static supporter; Object ironkey "iron key" keydisk with name "iron" "key", describe [; "There is an ornate iron key stuck to the ceiling here just within reach."; ], before [; Insert: "The key won't stay down."; Drop: if (location has outdoors) { "That wouldn't be a good idea out here."; } ], after [; Drop: "The key rises to the ceiling."; ], return_to keydisk; Object DemonRoom "Demon Room" with name "sanity" "fresco" "frescos", description "This room is full of carved demons and devils doing nasty thing to innocent \ people. There is quite a bit of gold-leaf fresco and bas-relief. Very nice if you \ don't mind the subject matter. The only exit is south.", s_to KeyRoom; Nearby figure "golden figure of a demon" with name "golden" "gold" "figure" "figurine" "demon", describe [; "There is a small figure of a demon in carved gold here!"; ], return_to DemonRoom; Object BlackRoom "Black Room" with name "sanity", description "This room is decorated in various textures of black stone. A hall leads north. \ Carved on the floor is an ornate pentacle. This room is very depressing.", n_to WOfPit; Nearby pentacle "ornate pentacle" with name "ornate" "pentacle" "pentagram", describe [; if (children(pentacle) ~= 0) { print "The pentacle contains:^"; WriteListFrom(child(pentacle), INDENT_BIT + NEWLINE_BIT + FULLINV_BIT + RECURSE_BIT, 1); } rtrue; ], has container open static; Object sphere "faceted obsidian sphere" pentacle with name "faceted" "obsidian" "sphere", describe [; "There is a sphere of polished and faceted obsidian here!"; ], return_to pentacle; Object SouthBranch "South Branch" with name "sanity" "floor", description "The hall ends in an alcove to the south. The intersection is north. Odd... The \ floor feels a bit shaky here. Nothing to worry about though.", n_to [; if (goldbrick in player || silvercube in player) { deadflag = 1; death_mode = 6; "The weight of the various bricks and \ cubes you are holding overbalances a hidden pivot in the floor. \ You are dumped into a pit full of snakes."; }; return TeeE; ], s_to SouthAlcove; Object SouthAlcove "Alcove at End of Corridor" with name "sanity" "block", description [; print "At the south wall is a large stone block with three stone disks embedded on top. \ The disks appear to be slidable up and down. Above the disks is suspended a glass \ tube stretching from wall to wall.^"; ], n_to SouthBranch; Nearby pebble "small pebble" with name "small" "tiny" "stone" "pebble", describe [; "There is a tiny pebble on the floor."; ], return_to SouthAlcove; Nearby tube "glass tube" with name "glass" "tube", description "It seems to be filled with green gas.", has scenery; Nearby leftdisk "left disk" with name "left" "first" "disk" "disc", describe [; if (children(self) ~= 0) { print "Sitting on the left disk is:^"; WriteListFrom(child(self), INDENT_BIT + NEWLINE_BIT + FULLINV_BIT + RECURSE_BIT, 1); } rtrue; ], before [; Receive: if (noun == ironkey) "The key won't stay down."; deadflag = 1; "You shouldn't have done that. The \ impact on the left disk sets both side disks swinging, until one \ smashes the tube. The gas inside pours out."; LetGo: if (children(middledisk) == 0) { deadflag = 1; "With the weight on the left disk gone, and no extra weight on the \ middle disk, the disk on the right shoots up and smashes the tube. \ Green gas pours out."; } ], after [; LetGo: "The disks unbalance \ briefly, but the pebble weighs down the whole system so the tube is \ not touched."; ], has static supporter; Nearby middledisk "middle disk" with name "middle" "center" "second" "disk" "disc", describe [; if (children(self) ~= 0) { print "Sitting on the middle disk is:^"; WriteListFrom(child(self), INDENT_BIT + NEWLINE_BIT + FULLINV_BIT + RECURSE_BIT, 1); } rtrue; ], before [; Receive: if (noun == ironkey) "The key won't stay down."; if (noun ~= pebble) { deadflag = 1; print "The weight of "; DefArt(noun); print " is too \ much. The middle disk drops down, and the side disks shoot up \ and smash the tube. Gas sprays out.^"; rtrue; } LetGo: if (children(leftdisk)==0 || children(rightdisk)==0) { deadflag = 1; "That was \ not smart. With the extra weight of the pebble removed, the empty \ side disk shoots up and smashes the tube. Gas pours out."; } ], after [; Receive: "Ok. The pebble's small weight moves the center disk down slightly."; LetGo: "The disks return to their original positions."; ], has static supporter; Nearby rightdisk "right disk" with name "right" "third" "disk" "disc", describe [; if (children(self) ~= 0) { print "Sitting on the right disk is:^"; WriteListFrom(child(self), INDENT_BIT + NEWLINE_BIT + FULLINV_BIT + RECURSE_BIT, 1); } rtrue; ], before [; Receive: if (noun == ironkey) "The key won't stay down."; deadflag = 1; "You shouldn't have done that. The \ impact on the right disk sets both side disks swinging, until one \ smashes the tube. The gas inside pours out."; LetGo: if (children(middledisk) == 0) { deadflag = 1; "With the weight on the right disk gone, and no extra weight on the \ middle disk, the disk on the right shoots up and smashes the tube. \ Green gas pours out."; } ], after [; LetGo: "The disks unbalance \ briefly, but the pebble weighs down the whole system so the tube is \ not touched."; ], has static supporter; Object goldbrick "solid gold brick" leftdisk with name "solid" "gold" "brick", describe [; "There is a solid gold brick lying here!"; ], return_to leftdisk; Object silvercube "solid silver cube" rightdisk with name "solid" "silver" "cube", describe [; "There is a cube of solid silver lying here!"; ], return_to rightdisk; Object CorridorAtAlcoves "Corridor at Alcoves" with name "sanity", description "The corridor goes north to the stairs and south from here. There are alcoves to \ the east and west. In the floor between the alcoves is a quartz window.", n_to RoundRoom, u_to RoundRoom, s_to OutsideChestRoom, e_to EastAlcove, w_to WestAlcove; Nearby window "quartz window" with name "quartz" "window", description "You can dimly see into a tiny room \ under this corridor. In the tiny room rests a huge glittering diamond!", has scenery; Object EastAlcove "East Alcove" with name "sanity", description "This alcove is empty but the floor has a separate stone platform set in it. \ The platform moves slightly when stepped on but does not move up or down. Directly \ above the platform is a hole in the ceiling.", w_to CorridorAtAlcoves; Object WestAlcove "West Alcove" with name "sanity", description "This alcove has a stone platform set in the floor. The platform shifts a little \ but does not move when you step on it. Sticking out of the platform is an iron \ crank.", e_to CorridorAtAlcoves; Nearby crank "iron crank" with name "iron" "crank", found_in WestAlcove CrankPlatform, before [; Turn: if (location == WestAlcove) { print "The platform slowly moves \ down a shaft below it. In the other alcove the other platform slowly \ moves up, counterbalancing the one you are on.^"; PlayerTo(CrankPlatform); rtrue; } if (location == CrankPlatform) { print "The platform moves back up to the \ alcove level. In the other alcove, you see the other platform moving \ back down until both of the platforms are even.^"; PlayerTo(WestAlcove); print "^As the other platform moves down from \ the hole in the ceiling, you see a small robot standing on it. When it \ gets down to the floor, it looks at you, says "; print "~Ex-trrr-mnnn-ate~, points an arm at \ you, and turns you into a small pile of monatomic dust.^"; deadflag = 1; death_mode = 9; rtrue; } ], has scenery; Object CrankPlatform "On Platform" with name "sanity", description "You are on the crank platform at the bottom of the shaft under the alcove. There \ is an opening to the east.", e_to InTinyRoom; Object InTinyRoom "In Tiny Room" with name "sanity", description "This is a tiny room. The only exit is back west. You can see the quartz window directly above your head.", w_to CrankPlatform; Object diamond "huge glittering diamond" InTinyRoom with name "huge" "glittering" "diamond", describe [; "There is a huge diamond lying on the ground!"; ], return_to InTinyRoom; Object OutsideChestRoom "Outside Door" with name "sanity", description "You are at the end of the hall. To the south is a wooden door with a steel knob on \ it.", n_to CorridorAtAlcoves, s_to chestdoor; Nearby chestdoor "wooden door" with name "wooden" "door", describe [; if (self has open) { print "The door is open."; if (location == ChestRoom && children(self) ~= 0) { print " You see something glimmering \ behind the door. You'll have to close the door to get it."; } } else { print "The door is closed."; } new_line; rtrue; ], before [; Open: if (location == ChestRoom && self hasnt open && chest hasnt open) { "Leaving so soon? Before you open the chest?"; } ], after [; Open: if (location == OutsideChestRoom) { "The door \ slams open. It is apparently on a very strong spring. If you were on \ the other side, you would have been slammed into the \ wall. As it is, the steel door-knob slams into the inside wall."; } else { deadflag = 1; death_mode = 2; "The door slams open. You \ barely avoid the swinging knob. Instead, the steel knob hits the \ wall with a bang.^^The wall seems to be made of flint."; } Close: if (location == OutsideChestRoom) { "You reach inside the \ room, grab the steel doorknob, and pull. The spring is strong, but \ you eventually manage to get the door shut."; } else { while (child(self) ~= 0) { move child(self) to ChestRoom; } "After much tugging, you \ manage to get the door shut. Behind it is a brass needle that you \ might use to unlock the chest."; } ], door_to [; if (location == OutsideChestRoom) return ChestRoom; if (location == ChestRoom) return OutsideChestRoom; return 0; ], door_dir [; if (location == OutsideChestRoom) return s_to; if (location == ChestRoom) return n_to; return 0; ], found_in OutsideChestRoom ChestRoom, has static door openable; Object needle "brass needle" chestdoor with name "brass" "needle", describe [; "On the ground is a long brass needle."; ], return_to chestdoor; Object ChestRoom "Room With Chest" with name "sanity", description "This room is empty except for a small chest at one end. The only exit is the door \ to the north.", n_to chestdoor; Nearby chest "small chest" with name "small" "chest", describe [; if (self hasnt open) "The chest is closed and locked."; print "The chest is open.^"; if (children(chest) ~= 0) { print "The chest contains:^"; WriteListFrom(child(chest), INDENT_BIT + NEWLINE_BIT + FULLINV_BIT + RECURSE_BIT, 1); } rtrue; ], before [; Close: if (self has open) "The hinge seems to be stuck."; ], after [; Unlock: give chest open; "There is a click and the chest lid \ pops open. Inside is a priceless dorkmid! As you stare at it, you \ notice the smell of coal gas leaking out."; ], with_key needle, has container ~open openable lockable locked static; Object dorkmid "priceless dorkmid" chest with name "priceless" "invaluable" "dorkmid", describe [; "There is an invaluable dorkmid here!"; ], return_to chest; Object TeeW "T-Intersection" with name "sanity", description "To the hall goes east from here. To the west is the stairway to the round room. A \ narrow passage leads south.", w_to RoundRoom, u_to RoundRoom, e_to OutsideGadgetRoom, s_to AtChasm; Object AtChasm "Narrow Passage at Chasm" with name "sanity" "chasm" "bridge", description "A wide chasm crosses the passage at this point. Fortunately someone has built a \ wooden bridge across it. The narrow passage continues south past the bridge and \ north to the intersection.", before [; Jump: print "You jump over the weak spot in the \ center, landing on the other side of the chasm.^^"; print "Hmmm... The other rim seems to be made \ of a peculiar type of rock. Some type of talc or damp plaster. You \ slide back into the pit.^^"; deadflag = 1; death_mode = 7; rtrue; ], n_to TeeW, s_to [; deadflag = 1; "The bridge appears to have a small \ weak spot in the middle, about two feet wide. You break through it and \ plummet. Next time try jumping or something."; ]; Object OutsideGadgetRoom "Corridor at Doorway" with name "sanity", description "The hall goes east and west from here and there is a doorway to the north.", w_to TeeW, e_to [; print "Yuk! You have fallen into a pit full of gray sticky glue.^"; return GluePit; ], n_to GadgetRoom; Object GadgetRoom "Room Full of Gadgets" with name "sanity", description "This is the south end of a long room. The walls and floor and ceiling are covered \ with thousands of metal gadgets that you might want to examine more carefully. \ There is a path free of gadgets to the north end of the room.", n_to NorthGadgetRoom, s_to OutsideGadgetRoom; Object gadget "metal gadgets" GadgetRoom with name "strange" "metal" "gadget" "dart" "gadgets" "darts", description [; "Each gadget has a large \ triggerplate and two darts sticking out. As you look it over, you brush \ the plate and the darts zock you in the hand. Ouch!"; ], before [; Touch, Rub, Push, Pull, Take, Attack: "Each gadget has a large \ triggerplate and two darts sticking out. When you touch \ the plate, the darts zock you in the hand. Ouch!"; ], found_in NorthGadgetRoom GadgetRoom, has scenery; Object NorthGadgetRoom "North Gadget Room" with name "sanity", description "The room stretches away back south. The metal gadgets are clustered even more \ densely here.", s_to GadgetRoom; Nearby bowl "cut-crystal bowl" with name "cut" "crystal" "cut-crystal" "bowl", describe [; print "Sitting on the floor in a clear space is a cut-crystal bowl.^"; print "The bowl contains:^"; WriteListFrom(child(bowl), INDENT_BIT + NEWLINE_BIT + FULLINV_BIT + RECURSE_BIT, 1); return; ], before [; LetGo, Receive, Take, Push, Pull, Attack: deadflag = 1; death_mode = 5; "As you do, several of the \ quartz chips spill onto the floor. Some hit metal gadgets, \ triggering them. Darts fly. Some darts hit more gadgets. More \ darts fly. After a few seconds of \ this, you have been punctured several million times."; ], return_to NorthGadgetRoom, has container open; Object ruby "large perfect ruby" bowl with name "large" "perfect" "ruby", return_to bowl; Object chips "hundreds of quartz chips" bowl with name "quartz" "chip" "chips", return_to bowl; Object GluePit "Glue Pit" with name "sanity" "glue" "handholds" "handhold", description "You are in a deep pit up to your chin in sticky grayish glue. You can \ probably climb out using a rough set of handholds on the east wall. (Probably \ carved by a previous sucker.)", w_to "There's no way up on that side.", u_to [; print "You climb out of the pit, dripping goop. You are coated with glue.^"; return OutsideFurDoor; ], e_to [; print "You climb out of the pit, dripping goop. You are coated with glue.^"; return OutsideFurDoor; ]; Object OutsideFurDoor "Outside Door" with name "sanity" "pit" "glue", description "The hall ends in a door to the east. To the west is that pit of glue.", w_to [; print "Yuk! You have fallen into a pit full of gray sticky glue.^"; return GluePit; ], e_to furdoor; Nearby furdoor "door" with name "door", describe [; if (self has open) { "The door is open. A cascade of fur spills through."; } else { "The door is closed."; } ], before [; Close: if (self has open) { "You can't close it for the fur."; } ], after [; Open: "The door \ swings open. A cascade of fur pours out, completely covering you and \ sticking to the glue."; ], door_to [; if (location == OutsideFurDoor) return FurHall; if (location == FurHall) return OutsideFurDoor; return 0; ], door_dir [; if (location == OutsideFurDoor) return e_to; if (location == FurHall) return w_to; return 0; ], found_in OutsideFurDoor FurHall, has static door openable; Object FurHall "Hall Full of Fur" with name "sanity", description "You are wading through knee-deep piles of the fur that is stuck all over you. The \ door is to the west is jammed open by more of the stuff. The hall continues east.", e_to GlassHall, w_to furdoor; Object GlassHall "Glass Hall" with name "sanity", description "The walls of this east/west corridor are thick panes of glass over the \ normal stone blocks. So is the floor which makes it hard to walk on your furry \ feet.", w_to FurHall, e_to GlassHallEnd; Object GlassHallEnd "End of Glass Hall" with name "sanity", description "The hall ends in another glass-covered wall. On this wall is an iron shelf bolted \ onto the glass. (Actually the bolts go through the glass into the stone wall.) ", w_to GlassHall; Nearby shelf "iron shelf" with name "iron" "shelf", describe [; if (children(self) ~= 0) { print "Sitting on the shelf is:^"; WriteListFrom(child(self), INDENT_BIT + NEWLINE_BIT + FULLINV_BIT + RECURSE_BIT, 1); } return; ], before [; Touch: deadflag = 1; death_mode = 8; print "If you hadn't noticed, you've been \ walking on glass with furry feet. This will produce a large static \ charge. The metal shelf \ is grounded into the stone wall. And \ iron conducts electricity...^^"; ">><>>><>zzzzap!><>><<>>"; ], has static supporter; Object necklace "beautiful silver necklace" shelf with name "beautiful" "silver" "necklace", before [; Touch, Take: deadflag = 1; death_mode = 8; print "If you hadn't noticed, you've been \ walking on glass with furry feet. This will produce a large static \ charge. The necklace is sitting on a metal shelf which \ is grounded into the stone wall. And \ silver conducts electricity...^^"; ">><>>><>zzzzap!><>><<>>"; ], return_to shelf; Object Landing "Landing" with name "sanity", description "This is a landing on the stairway. You can go down to the north or up to the \ south. A passage leads east.", s_to RoundRoom, u_to RoundRoom, e_to TeeN, n_to BottomOfShaft; Object BottomOfShaft "Bottom of Shaft" with name "sanity", description "You are at the bottom of a ladder that goes up a shaft from here. To the south is \ the stairway up.", u_to [; print "You climb up the ladder to a hole at the top of the shaft.^"; WheelRoom.number = 0; return WheelRoom; ], s_to Landing; Nearby coinbag "small leather coin-bag" with name "small" "leather" "coinbag" "coin-bag" "bag", return_to BottomOfShaft, describe [; "On the floor is a small coin-bag made of leather. It appears to have something in it."; ], description [; print "It is a bag for a matching set of fourteen \ 23-zorkmid coins. However, the set is worthless when incomplete \ and the bag only has ", self.number, " coins in it.^"; rtrue; ], before [; Open: <>; ], number 2; ! number of coins Object WheelRoom "Exercise-Wheel Room" with name "sanity", description [; print "This room is laid out like an exercise wheel for rats except that it is 40 ft. \ across. You can turn the wheel by walking north or south. "; print "Equally spaced around the rim are \ twelve coin-holders. Some have gold coins in them. "; ShowWheelPos(); rtrue; ], d_to [; if (self.number == 0) { print "The hole is aligned with the \ shaft, so you climb through it and down the ladder.^"; return BottomOfShaft; } "You have rotated the wheel so that the \ hole is not aligned with the shaft. You can't go down."; ], n_to [; self.number = self.number - 1; if (self.number < 0) self.number = self.number + 12; print "The wheel rotates under \ your feet. You stay at the bottom, but the hole in the rim that you \ entered by has moved.^^"; ShowWheelPos(); rtrue; ], s_to [; self.number = self.number + 1; if (self.number >= 12) self.number = self.number - 12; print "The wheel rotates under \ your feet. You stay at the bottom, but the hole in the rim that you \ entered by has moved.^^"; ShowWheelPos(); rtrue; ], number 0; ! wheel rotation Global coinflags initial 1 1 1 1 1 1 1 1 1 1 1 1; Nearby coinholder "coin-holder" with name "coin" "holder", before [; Take: if (coinflags->(WheelRoom.number) == 0) { "You've already taken the coin at this position."; } if (coinbag notin player) { "You're not holding the coin bag to put the coin into."; } coinflags->(WheelRoom.number) = 0; coinbag.number = coinbag.number + 1; "You pick up the coin and put it in your bag."; ], has scenery; [ ShowWheelPos; if (coinflags->(WheelRoom.number) ~= 0) { print "The coin-holder at your feet has a coin in it. "; } else { print "The coin-holder at your feet is empty. "; } if (WheelRoom.number == 0) "The hole is at the bottom of the wheel. Below it is the shaft \ that you entered this room by."; if (WheelRoom.number == 1) "The hole is slightly up the north side."; if (WheelRoom.number == 2) "The hole is less than half-way up the north side."; if (WheelRoom.number == 3) "The hole is half-way up the north side."; if (WheelRoom.number == 4) "The hole is more than half-way up the north side."; if (WheelRoom.number == 5) { deadflag = 1; death_mode = 4; "The hole is almost to the top on the north side. Behind it is a hole \ from which water is pouring very fast. \ The water turns the wheel back to its original position, then pours \ down the hole. You are taken with it."; } if (WheelRoom.number == 6) "The hole is at the top of the wheel."; if (WheelRoom.number == 7) "The hole is almost to the top on the south side."; if (WheelRoom.number == 8) "The hole is more than half-way up the south side."; if (WheelRoom.number == 9) "The hole is half-way up the south side."; if (WheelRoom.number == 10) "The hole is less than half-way up the south side."; if (WheelRoom.number == 11) "The hole is slightly up the south side."; ]; Object TeeN "T Intersection" with name "sanity", description "The hallway goes east and west here with a branch north.", w_to Landing, e_to OutsideGreatDoor, n_to DoorNearBlades; Object DoorNearBlades "Door Near Blades" with name "sanity" "blades" "blade", description "The north hall ends at a door. Stretched from wall to wall and floor to roof in \ the hall are long thin metal blades that you have to worm between very carefully.", s_to TeeN, n_to bladedoor; Nearby bladedoor "door" with name "door", describe [; if (self has open) { print "The door is swinging closed."; } else { print "The door is closed."; } new_line; rtrue; ], after [; Open: give self general; "The door is apparently on a very weak spring. You open it, but \ it begins swinging shut the moment you release it."; ], daemon [; if (location == DoorNearBlades) give self ~locked; if (self has general) { give self ~general; return; } if (self has open) { give self ~open; if (location == DoorNearBlades) { print "^The door has swung shut.^"; } if (location == StalagmiteRoom || location == NorthStalagmiteRoom) { print "^The door has swung shut and locked behind you.^"; give self locked; } } ], door_to [; if (location == StalagmiteRoom) return DoorNearBlades; if (location == DoorNearBlades) return StalagmiteRoom; return 0; ], door_dir [; if (location == StalagmiteRoom) return s_to; if (location == DoorNearBlades) return n_to; return 0; ], found_in StalagmiteRoom DoorNearBlades, has static door openable; ! general means about to shut Object StalagmiteRoom "Stalagmite Room" with name "sanity", description "You are at the south end of a room. There is a door to the south. The \ floor is covered with hundreds of stalagmites.", n_to [; print "In walking, you have bumped \ into and broken some stalagmites. They are hollow and water starts \ pouring out, slowly filling the room.^"; return NorthStalagmiteRoom; ], s_to bladedoor; Nearby stalagmites "stalagmites" with name "stalagmites", found_in StalagmiteRoom NorthStalagmiteRoom, has scenery; Object NorthStalagmiteRoom "North Stalagmite Room" with name "sanity", description "This is the north end of the stalagmite room. On the north wall is a button \ with something written on it. The only way out is back south.", s_to [; print "In walking, you have bumped \ into and broken some stalagmites. They are hollow and water starts \ pouring out, slowly filling the room.^"; return StalagmiteRoom; ]; Nearby panicbutton "labelled button" with name "labelled" "writing" "button", description [; "It reads ~Panic Button: Push in case of flood to exit.~"; ], before [; Push: deadflag = 1; death_mode = 3; "Click. Fear gas sprays \ out of the walls, causing you to panic and run for the locked door. \ You break most of the stalagmites in the rush, so the water is \ up to your chest by the \ time you reach the door. When you hit it, you break through. The \ water washes you down the hall and through the blades."; ], has scenery; Object OutsideGreatDoor "Great Door" with name "sanity", description "You are outside an ornate door with an ornate iron lock. The hieroglyphics on the \ door seems to indicate that it leads into the central tomb where the gold coffin \ is!", w_to TeeN, e_to greatdoor; Nearby greatdoor "Great Door" with name "great" "ornate" "tomb" "door", describe [; if (self has open) { "The Great Door is open."; } else { "The Great Door is closed."; } ], after [; Open: "You turn the \ iron key and the tomb door swings open. The musty smell of old \ comic books pours out."; ], door_to [; if (location == OutsideGreatDoor) return InTheTomb; if (location == InTheTomb) return OutsideGreatDoor; return 0; ], door_dir [; if (location == OutsideGreatDoor) return e_to; if (location == InTheTomb) return w_to; return 0; ], with_key ironkey, found_in OutsideGreatDoor InTheTomb, has static door openable locked lockable; Object InTheTomb "In the Tomb" with name "sanity", description "This is the antechamber to the crypt where legends say the many bodies of \ the Great Lord are buried. There is a brightly painted fresco running around the \ chamber. The Great Door is west and the sacred crypt is south.", s_to InTheCrypt, w_to greatdoor; Nearby tombfresco "fresco" with name "bright" "brightly" "painted" "fresco", description "The fresco depicts the \ pharaoh stepping into a tall blue box, carefully inspecting a large \ machine and a pile of trash, eating a pizza, and laughing his head \ off at someone who looks very much like you.", has scenery; Object InTheCrypt "In the Crypt" with name "sanity", description "At last! The tomb of the many bodies! Scattered around the room are frescos \ that must represent the different bodies. The whole room is shockingly \ valuable.", n_to InTheTomb; Nearby cryptfresco "fresco" with name "bright" "brightly" "painted" "fresco" "frescos", description "The bodies depicted seems to \ decrease in age. The first is an old geezer, the second is rather \ younger, the third is quite young and wearing a scarf and a coat, \ etc.", has scenery; Nearby coffin "gold coffin" with name "solid" "gold" "coffin", return_to InTheCrypt, describe [; "On the floor is the solid-gold coffin that contains the bodies of the \ Lord -- and all his riches! All you have to do is get it back to the encampment!"; ], before [; Open: "Absolutely not! All you want to do is get it back to the encampment."; Take: "It's too heavy to pick up. Perhaps you could push it around."; Push, Pull: "Which way do you want to push the coffin?"; PushDir: AllowPushDir(); rtrue; ], after [; PushDir: "You lean on the coffin, and it scrapes along the floor."; ]; ! ----------------- [ Initialise ; location = InYourTent; StartDaemon(grue); thedark.description = grue.description; StartDaemon(SwingPlatform); StartDaemon(bladedoor); StartDaemon(RoundRoom); remove sw_obj; remove se_obj; remove ne_obj; remove nw_obj; new_line; new_line; print "You awaken in your tent, lying on the floor, with a \ hangover like you wouldn't believe. As you lever yourself up, you \ notice that there is complete silence instead of the usual morning \ complaints "; print "of the workers and Roboff's usual shouting. This can only \ mean one thing - Roboff must have finally run off on you. Panicked, \ you look around and see your amulet lying on the floor. At least "; print "Roboff had the sense to not trigger off your alarm. Knowing \ him, he also had the sense to take the emergency radio. How the \ megakrip are you going to get out of this one?^^"; ]; [ Banner; style bold; print_paddr #Story; style roman; print ": An Infralogic Massacre. Copyright (C) by Info"; style bold; style reverse; print "b"; style roman; print "om^"; print "Inhumane and Infobom are trademarks of Sadistic Software, Ins.^"; print "Revision ", (0-->1) & $03ff, " / Serial Number 31415926"; !for (i=18:i<24:i++) print_char 0->i; print " / Inform v"; inversion; print " Library "; print_paddr #LibRelease; #ifdef DEBUG; print " D"; #endif; new_line; style underline; print "First-time players should type ~about~.^"; style roman; ]; [ AboutSub; DoMenu("Select a topic:^\ ^ Why Inhumane sucks\ ^ The history of Infobom\ ^ Rating\ ^ Credits^", #r$AboutMenu, #r$AboutInfo); ]; [ AboutMenu; if (menu_item == 0) { item_name = "About Inhumane"; item_width = 7; return 4; } if (menu_item == 1) { item_name = "Why Inhumane Sucks"; item_width = 9; return; } if (menu_item == 2) { item_name = "The History of Infobom"; item_width = 11; return; } if (menu_item == 3) { item_name = "Rating"; item_width = 3; return; } if (menu_item == 4) { item_name = "Credits"; item_width = 3; return; } item_name = "BUG CITY"; item_width = 4; return; ]; [ AboutInfo; if (menu_item == 1) { print "Not to put too fine a point on it, I wrote this when I was about \ fifteen. In BASIC. "; style underline; print "Inhumane"; style roman; print " is shoddy and I will make no apologies.^^"; print "Furthermore, the game abounds with in-jokes so obscure that even I probably \ don't recognize all of them any more. Some of them are publically accessible; \ some less so. (Let's just say that a certain friend of mine was deeply, \ er, moved by eighth-grade geometry class.)^^"; print "In doing this Inform port, I have manfully resisted the urge to improve \ the game. \ Spelling and punctuation errors have been fixed, but \ no descriptive text has been added. I didn't quite have the \ nerve to cripple Graham's Inform library, so the parser does not suck, \ but just about everything else you could want in a game is lacking here. \ Just about every movable object has no description. Synonyms are sparse. \ Variety of text is a lost cause. Get the idea?^^"; print "Enough castigation.^^"; return; } if (menu_item == 2) { print "Infobom was conceived one fine day by a friend of mine, Dave Argentar. \ (If you know him, feel free to tease him unmercifully.) His was the idea \ to create a fake sequel to "; style underline; print "Enchanter."; style roman; print " We would then give a ~pirated~ copy of this new treasure to our \ friends, crawl back into our basements, and snicker mightily."; print " You may get some idea of when this \ occurred by noting that we decided to call the ~sequel~ "; style underline; print "Enchanter II."; style roman; new_line; new_line; print "(Part of our cover story was that the ~pirated~ disk was a bad copy -- \ a few bytes had been corrupted. And, indeed, the \ introductory message had a few random characters of punctuation scattered \ through it, and some inverse letters (as random bytes were liable to become \ in the Apple II display hardware.) Nothing important -- \ except that the ~C~ in ~Infocom~ had coincidentally turned to a flashing ~B~. \ Heh heh.^^"; print "Unfortunately, I no longer have a copy of "; style underline; print "Enchanter II."; style roman; print " It began plausibly (or so youthful memory tells me -- probably it's \ actually as embarrassing as this game.) I imitated Infocom's Apple II \ interpreter rather well, I think, considering that I was using BASIC. \ The player began by being sent back to the ruined castle of Krill to \ destroy something in need of destruction. There was a hidden stairway \ under the altar in that nasty temple, which led down to a few underground rooms. \ A little more exploration turned up a scroll labelled ~Travel through time~...^^"; print "When you succumb and cast the spell, a tall blue box with a flashing \ light on top appears in mid-air, drops on you, and squashes you.^^"; print "At that point, of course, everything fell apart. Your hunger and thirst \ (which had been growing earlier, in keeping with "; style underline; print "Enchanter"; style roman; print ") became a sudden need to take a leak. (Keep in mind that I was perhaps \ fourteen.) More rooms opened up. Silly things happened, of which I cannot \ recall a single one. In the end, you acquired a ~resignation code,~ located a \ shop, and found that the item you needed had a price equal to that code number. \ When you typed that number as part of the purchase command, the game dropped into \ the distinctive losing display of "; style underline; print "The Prisoner,"; style roman; print " a deeply disturbed Apple II game of the time. (Actually, it's a deeply \ disturbed game for any time. I wish I still had a copy.) The closing message, \ ~You may have lost -- but we have gained,~ turned into Dave's name and mine, and \ that was the end of "; style underline; print "Enchanter II."; style roman; new_line; new_line; print "Time passed and more Infocom games appeared. Dave and I started drawing up \ plans for a new Infobom title, a parody of "; style underline; print "Suspended,"; style roman; print " to be entitled "; style underline; print "Expelled."; style roman; print " The player was a controlling intelligence on a starship of some sort, \ who could influence the world only through an array of robots and computers -- \ those being Artoo Detoo, Tron, the Master Control Program (from the movie "; style underline; print "Tron"; style roman; print "), HAL 9000, and TECO (a particularly atrocious text editor which Dave \ had been forced to use for some reason.) \ Naturally, Artoo only ever \ said ~Beep chirp trweeee~ and so on; Tron and MCP had it in for each other; \ HAL 9000 was fatally obsessed by the mysterious black monolith you found in \ one room; TECO was downright hostile; \ and you, as it turned out, were nothing but a garbage-processing \ computer which had accidentally gotten into some AI routines. In the end \ someone repairs you and you spend the rest of your life processing garbage. \ (Whatever keys you typed after that point, \ the letters appearing at the prompt always spelled out ~TAKE GARBAGE \ PROCESS GARBAGE TAKE GARBAGE ...~ I was rather proud of that \ effect.)^^"; print "Well, "; style underline; print "Expelled"; style roman; print " never really got off the ground. BASIC and my programming skills were not \ up to the task of a "; style underline; print "Suspended"; style roman; print "-style interface, with several different descriptions for each room and object. \ (Or maybe I was just overwhelmed by the prospect of coming up with a different \ combination of ~beep~s and ~boop~s for everything Artoo saw.) However, more or \ less simultanously, I was working on a parody of "; style underline; print "Infidel,"; style roman; print " to be titled "; style underline; print "Inhumane."; style roman; print " This was inspired both by the unique character of "; style underline; print "Infidel"; style roman; print " (where you play a nasty and unlikable character) and by the first two \ books of "; style underline; print "Grimtooth's Traps,"; style roman; print " a role-playing supplement which you can probably still find in gaming \ stores. I had invented a decent collection of embarrassingly fatal dungeon traps, \ so I figured I might as well implement them...^^"; print "This is the result.^^"; print "Those were the only text-game parodies we actually worked on. Naturally, \ we had a much longer list of Infobom "; style underline; print "titles,"; style roman; print " which you may peruse below...^^"; print "Dork 0, 1, 2, 3^Depanter, Sousederer, Nosebreaker^\ Deadhead, Witless, and (the two logical extensions \ of Infocom's own mystery titles!) Murderer, and Victim^"; print "Starcrass^A Mind Forever Stoned^"; print "^(You can see at what point we more or less grew out of it.)^^"; print "Come to think of it, I think I designed most of "; style underline; print "Sousederer"; style roman; print " as well. Shows what I remember.^"; return; } if (menu_item == 3) { print "Surprisingly, this game is almost "; style underline; print "merciful"; style roman; print " by the Zarfian Interactive Fiction Rating System. It is possible to get \ stuck, but only in one place, very early in the game. However, for reasons \ which will become clear, I can't promise that you'll never die....^^"; } if (menu_item == 4) { print "Well, there's Graham Nelson. You've probably heard of him by now.^^"; print "There's the IF Archive at ftp.gmd.de. You've probably heard of that too.^^"; print "There's Richard Merryman, \ who found me the Apple II disk image of this game years \ after I lost my original, and also dug the source code and data out \ and into a sensible format.^^"; return; } ]; [ AfterLife ix; print "^^ ***"; if (deadflag==1) L__M(##Miscellany,3); if (deadflag==2) L__M(##Miscellany,4); if (deadflag>2) { print " "; DeathMessage(); print " "; } print "***^^^"; if (task_done->0 == 0) { Achieved(0); ! died at all print "You are floating disembodied in \ absolute blackness. Time passes at a strange, relative rate. After an \ infinite/infinitesmal time, you sense a presence near "; print "you. A voice speaks, resounding in \ your head as in a hollow gourd...^^"; print "~Ah! Another of those wimpy delvers "; print "come to steal my treasure. How \ boring. Most of it was taken by that other guy who had the sense to \ avoid the nastier traps... But I am getting pretty tired "; print "of guarding what's left. I don't \ suppose that you have any chance of thinking your way through my \ traps, of course. But I'll let you try, and I won't even "; print "vaporize you when you try to leave. \ In fact, I'll make you a deal. If you prove to me that you are an \ incompetent Harry Sullivan by getting yourself killed by "; print "every single one of my deathtraps, \ after getting as far towards solving it as possible, then I'll give \ up and let you "; print "take the coffin.^^~That sound good? I thought so.^^"; } else { print "You are back in the infinite blackness. \ Eventually the voice returns, senses you disgustedly, and \ speaks. "; } if (death_mode == 0) { print "~That hardly counts as being killed by a trap, you know. \ Even you could have gotten farther into that situation.^^"; } else { if (task_done->death_mode ~= 0) { print "~You already got frotzed that way \ once. How about something more original?^^" } else { Achieved(death_mode); if (death_mode == 1) print "~Never go anywhere until you're sure of being able to get back.^^"; if (death_mode == 2) print "~Sparks in a room full of natural gas is not really \ a smart thing to do.^^"; if (death_mode == 3) print "~Don't panic... Don't panic... Don't panic... It's not good for you...^^"; if (death_mode == 4) print "~Don't you know how lab rats eventually end up?^^"; if (death_mode == 5) print "~When standing inside a mass \ of uranium, it is not usually a good idea to drop a neutron.^^"; if (death_mode == 6) print "~And you thought that you had successfully beaten that \ trap, didn't you?^^"; if (death_mode == 7) print "~Of course, the bridge must be avoided at all costs...^^"; if (death_mode == 8) print "~Good... I would have thought you knew your eighth grade science.^^"; if (death_mode == 9) print "~Giving nasties a free ride down to where you are seems a \ little stupid.^^"; } } PrintRank(); for (ix=selfobj+1 : ix<=top_object : ix++) { if (ix.&return_to ~= 0) { if (ix notin ix.return_to) { move ix to ix.return_to; !print "### moving "; PrintShortName(ix); print " to "; PrintShortName(ix.return_to); print ".^"; } else { ! it's already there !print "### "; PrintShortName(ix); print " already in "; PrintShortName(ix.return_to); print ".^"; } } } ! close all the doors give chestdoor ~open; give chest ~open locked; give furdoor ~open; deadflag = 0; death_mode = 0; PlayerTo(RoundRoom); ]; [ FullScoreSub i; ScoreSub(); if (score==0 || TASKS_PROVIDED==1) rfalse; new_line; L__M(##FullScore,1); for (i=1:ii==1) { PANum(task_scores->i); PrintTaskName(i); } ! print "^ -----^"; new_line; PANum(score); L__M(##FullScore,4); ]; [ ScoreSub; if (task_done->0 ~= 0) { print "The voice that you heard when you died speaks. \ ~Score? You mean how well you've done? "; PrintRank(1); } else { PrintRank(); } ]; [ PrintRank noquoteflag ix tdone; if (task_done->0 == 0) { "Your score is 0 out of a possible \ 300. This gives you the rank of Novice Adventurer." } tdone = 0; for (ix=1 : ix < NUMBER_TASKS : ix++) { if (task_done->ix ~= 0) tdone++; } if (noquoteflag == 0) print "~"; if (tdone==0) "You don't seem to have really gotten \ fooled by any traps yet. Maybe there is hope for you.~"; if (tdone==1) "You've only gotten killed by one trap. Not bad.~"; if (tdone==2) "You've been killed by two traps. That isn't really so bad.~"; if (tdone==3) "Three deathtraps have zocked you so far. You're beginning to seem rather dumb.~"; if (tdone==4) "You've stumbled into four traps. You're not looking very good.~"; if (tdone==5) "You've been killed by five deathtraps so far. You're getting pretty good at \ dying, aren't you?~"; if (tdone==6) "Six traps have killed you. I am forced to the \ conclusion that you are a high-grade moron at best.~"; if (tdone==7) "All right, you've set off seven out of nine traps. Make \ that a low-grade moron who is stoned on nitrolabe.~"; if (tdone==8) "All right, that makes eight traps. If you manage to \ kill yourself on the last one, I'll give you the key.~"; if (tdone==9) { if (ironkey hasnt general) { give ironkey general; move ironkey to RoundRoom; ironkey.return_to = RoundRoom; "That does it. I give up. You are a complete \ Sullivan of an imbecile. There is no hope for you. Here is that #%$@# \ key; take the coffin and get out!~"; } else { "You've proved yourself a hopeless \ imbecile. Take that #$%#% coffin and leave.~"; } } ]; [ PrintTaskName mode; if (mode == 1) print "being scraped"; if (mode == 2) print "being flambed"; if (mode == 3) print "being scared"; if (mode == 4) print "being exercised"; if (mode == 5) print "being chain-reacted"; if (mode == 6) print "being snaked"; if (mode == 7) print "being plastered"; if (mode == 8) print "being zapped"; if (mode == 9) print "being exterminated"; new_line; ]; [ NotifyTheScore ; ]; [ DigSub; if (noun == 0) { if (shovel notin player) "You don't have a shovel, genius."; } else { if (noun ~= shovel) "Useless."; } if (location ~= InTheDesert) "The ground is too hard for digging here."; if (amulet has general) { "Why? There's nothing down there, \ remember, genius? Remember Roboff's toilet? Hmmm?"; } if (InTheDesert.number ~= 13) { "You dig for about two hours, making a \ big hole. The hole is completely empty, so you spend another two \ hours filling it in."; } print "You begin digging. After about two hours you strike stone! \ You rapidly clear off a stone slab about 10 feet down from \ the surface.^"; PlayerTo(BottomOfAHole); ]; Include "Grammar"; Verb meta "help" * -> About; Verb meta "about" "rating" "info" * -> About; Extend "dig" replace * -> Dig * "with" held -> Dig; #IFDEF ZDEBUG; [ ZapSub; if (noun == amulet) { give amulet general; remove amulet; "The amulet zaps into the slot."; } if (noun == player) { move torch to player; give torch light; move shovel to player; if (location == RoundRoom) PlayerTo(WOfPit); else PlayerTo(RoundRoom); } if (noun == torch) { remove torch; "The torch vanishes in a puff of logic."; } ]; Verb "zap" * noun -> Zap; #ENDIF;