Constant Story "Escape the Eternal Tower"; Constant Headline "^^by Michael Choppa^^^"; Include "parser"; Include "verblib"; [ Initialise; location = Starting_Cell; print "^^^^^You awaken with a bump on your head and find yourself locked up in this cell. You can't seem to remember how you got here, but you know that no one is going to let you out anytime soon.^^"; player.description = "Your clothes are nasty looking and bland, and you look as if the life is slowly being sucked away from you."; ]; [ DeathMessage; print "YOU SCREWED UP PRETTY BADLY"; ]; !===================================================================================== ! C L A S S E S !===================================================================================== class Room has light; class DoorObject has door; !===================================================================================== ! E X T R A G R A M M A R !===================================================================================== Include "grammar"; extend 'pick' * noun 'with' held-> unlock; verb 'kick' * noun -> attack; verb 'talk' * 'to' noun -> tell; verb 'use' * held 'on' noun -> use; extend 'attack' * noun 'with' held -> attack; extend 'put' * held 'over' noun -> drop; [useSub; "Use? Let's try and be a bit more specific."; ]; extend 'tell' * noun -> tell; verb 'zero' '0' 'one' '1' 'two' '2' 'four' '4' 'five' '5' 'six' '6' 'seven' '7' 'eight' '8' 'nine' '9' 'ten' '10' * -> other; verb 'three' '3' * -> three; [otherSub; if(location == Last_room) { if(sphinx hasnt general) { give sphinx general; "The statue laughs. ^~You're smart enough to come this far. Maybe you'll think of a way out yourself.~^"; } else { "the statue doesn't respond"; } } ]; [threeSub; if(location == Last_room) { if(figurine has general) { if(sphinx hasnt general) { give sphinx general; "^~Very well. I shall give you this advice. You are wherever you put yourself.~ He laughs. ~Now take that useless advice, and rot in your cell, while your life continues to whither away.~^ What a disappointment."; } else { "The statue doesn't respond"; } } } ]; !===================================================================================== ! R O O M O B J E C T S !===================================================================================== Room Starting_Cell "Your Cell" with name "start", description "The cell is very dusty and barren. It appears from the decaying corpse that no one really cares about anyone in this cell, and of course the cell door to the north is securely locked. Without a way out, it could very well be your permanent resting place.", n_to Cell_Door, out_to Cell_Door; Room Other_Cell "Other Cell" with name "cell", description "This cell is very similar to yours, except that it has been cleaned. There is no sign of any dirt, except maybe one brick with some sort of odd scratches, though the scratches are very small. Even more strange is the ghostly howl that seems to come from this cell`s walls, although it is very quiet.", n_to Cell_Door2, nw_to Cell_Door2, out_to Cell_Door2; Room Painting_Room "Large Room" with name "room", description "This room is fairly large, containing two cells. One of the cells is the one you just stepped out of. There is a stone outline of a door on the Eastern wall, with a peculiar looking keyhole in the shape of a person. On the West wall there is a painting of your house. There is a hallway to the North.", s_to Cell_Door, n_to Giant_Hall, sw_to Cell_Door2; Room Giant_Hall "Hallway" with name "hall" "hallway", description[; if(giant in self) "The hallway seems to be the source of lighting for this area. Lanterns are scattered around the walls, illuminating the area. Unfortunately they are extremely close to the ceiling, out of reach. To the East there seems to be a barracks of some sort, maybe 6 beds in that room. To the west you see a very large bed. It must be about 15 feet long. To your north, you find the man able to occupy the bed, holding a large club, playing with his teeth, and conveniently blocking a set of stairs."; else "The hallway seems to be the source of lighting for this area. Lanterns are scattered around the walls, illuminating the area. Unfortunately they are extremely close to the ceiling, out of reach. To the East there seems to be a barracks of some sort, maybe 6 beds in that room. To the west you see a very large bed. It must be about 15 feet long. To your north, you see a set of stairs going down."; ], before[; go: if ((noun == n_to || noun == d_to)&& giant in giant_hall) { "You cannot fit behind the giant, nor does it seem like he'll let you try"; } ], after[; go: if(noun == s_to || noun == u_to) { print "^Climbing these stairs, you realize it's much more difficult to go up the stairs than it is to go down the stairs. Hopefully this doesn't happen again.^^"; return false; } ], e_to giant_room, w_to Barracks, s_to painting_room, n_to Floor2_entry, d_to Floor2_entry; Room Giant_Room "Giant's room" with name "room" "large", description[; if (giant in self) "This must be the giant's bedroom, because the giant is sitting on the bed playing with his new, shiny quarter."; else "Now this is a nice sized room. It must be to hold that incredibly large bed, complete with a pillow, and massive sheets and blankets."; ], w_to giant_hall; Room Barracks "Barracks" with name "barracks" "barrack", description "This room must be the sleeping quarters for several people. You count about six beds here. None of them would fit the giant; they're too small. A large chest sits by one of the beds. It has a giant keyhole in the lock.", e_to giant_hall; Room Floor2_entry "Second floor" with name "room", description "This room isn't much of a room at all. The stairs leading back up are behind you to the south, a passage twists both east and west (both turning sharp to the north), and there's a passage to the north with a set of stairs going down.", after[; go: if (noun == n_to || noun == d_to) { print "^What a travel! The stairs are are quite a workout. Maybe the only one stupid enough to climb them is the giant.^^"; return false; } ], s_to giant_hall, e_to construction_mess, w_to fork_near_kitchen, n_to Floor3_entry, d_to Floor3_entry, u_to giant_hall; Room fork_near_kitchen "Intersection" with name "fork", description "You come to an intersection. To the east leads to the stairs back up. To the west there seems to be nothing more than a series of spiderwebs. To the north looks to be a kitchen.", e_to Floor2_entry, n_to Kitchen; Room kitchen "kitchen" with name "kitchen", description "This is the remains of a kitchen. All that is left is some cabinets that are opened, revealing some jars that may have been used to hold dry food goods. The stove is damaged and broken, as well as the sink. You can see a bed past the eastern hallway.", e_to bedroom, s_to fork_near_kitchen; Room bedroom "bedroom" with name "bedroom", description "All that remains in this room is a bed. Whoever was staying here has moved. Paint is peeling off the walls, and the bed is covered in dust. A small note is placed on the pillow of the bed", w_to kitchen; Room construction_mess "Messy room" with name "mess" "nails" "junk", description "Yikes! There is a huge mess of glass, rusty nails, and just about anything else you can think of that is difficult to pick up in a large quantity, yet dangerous enough to cut your feet all up and poke several holes in your shoes at the same time. Further north you can see a wall made with just a series of boards. Something is laying in front of the boarded wall, but you are too far away to see what it is.", before[; go: if (noun == n_to) { if(boots has worn) { print "A lot of crunching is heard, but thanks to those nice, thick boots, your feet are completely safe."; return false; } else { print "You try to step foward, but the thought of a rusty nail going through your foot in a place like this makes you jerk back quickly. You'll have to think of something else."; return true; } } take: "The mess is piled in such a way that if you pull to take something, the mess will topple all over you, and that is definitely not a good thing."; ], w_to Floor2_entry, n_to Boarded_Wall_Room; Room Boarded_Wall_Room "Boarded up wall" with name "board wall", description "The wall on the north is boarded up completely, and yet someone was nice enough to leave a claw hammer right here on the ground.", before[; go: if (noun == s_to) { if (boots hasnt worn) { "You may want to put those thick boots back on"; } } ], s_to construction_mess; Room Floor3_entry "Third floor" with name "room" "3", description "The stairs leading back up and the door to the north are very close in this room. Not much else to say about it.", after[; go: if(noun == n_to || noun == d_to) { print "Finally! An easy climb of stairs! Straight down, with a hint of a twist here and there, but easy enough!^"; } ], s_to Floor2_entry, u_to Floor2_entry, n_to Heidi_Door; Room Heidi_room "Lady's room" with name "Last", description "This room is decorated with a bunch of Billy Ray Cyrus posters. To the north is one of the strangest things you may see in a long time. A large lion statue with wings sits on the other side of the room, and in front of the statue is a miniature figurine, and that figurine looks exactly like you. Well, that is the you that you remember before you entered here. Unfortunately, there's a huge pit right before the statues. You guess maybe 6 feet across. You cannot see the bottom.", before[; go: if(noun == n_to) { if(parent(boards) ~= self) { "Umm..I think you forgot about the bottomless pit"; } } ], s_to Heidi_Door, n_to Last_Room; Room Last_Room "Sphinx Shrine" with name "shrine", description [; if(parent(figurine) == self) "Crossing over the board carefully, you reach the large lion statue. The figurine of yourself sits in front of it"; else "Crossing over the board carefully, you reach the large lion statue."; ], s_to Heidi_room; !===================================================================================== ! D O O R S !===================================================================================== DoorObject Cell_Door "Familiar Cell Door" with name "Lock" "Cell" "Door" "Cell Door" "familiar" "familiar cell" "familiar cell door" "familiar door", description[; if (self has locked) "The cell door has vertical bars not easily passable through by squeezing. The door is securely locked, with a giant keyhole you assume would take giant keys to open."; else "The cell door has vertical bars not easily passable through by squeezing."; ], found_in Starting_Cell Painting_Room, door_dir [; if (location == Starting_Cell) return n_to; else return s_to; ], door_to [; if (location == Starting_Cell) return Painting_Room; else return Starting_Cell; ], after [; unlock: if (second == bobby_pin) { print "^You manage to pop the lock, but the pin breaks as well^"; remove bobby_pin; return false; } else { print "If only it was that easy..."; return true; } ], with_key bobby_pin, has scenery openable lockable locked; DoorObject Cell_Door2 "Other Cell Door" with name "Cell" "Door" "Other" "OtherCell" "OtherDoor" "OtherCellDoor" "Other Cell" "Other Cell Door" "Other Door", description[; if (self has locked) "The cell door has vertical bars which are also not easily passable through. The door is securely locked, with a giant keyhole you assume would take giant keys to open."; else "The cell door has vertical bars not easily passable through by squeezing."; ], found_in Other_Cell Painting_Room, door_dir [; if (location == Painting_Room) return sw_to; else return n_to; ], door_to [; if (location == Painting_Room) return Other_Cell; else return Painting_Room; ], with_key giant_keys, has scenery openable lockable locked; DoorObject Heidi_Door "Room Door" with name "Door", description "The door is constructed of solid metal, but it doesn't appear to be locked", found_in Floor3_entry Heidi_room, before[; open: if (Heidi_Room hasnt general) "You open the door, and you see a beautiful lady whirl around and point a shotgun at you.^ ~Ye best be gittin back te yer cell, er ah'll 'ave te shoot yer 'ead off~^ You instinctly close the door, and you can hear the lady laughing at you. ^~..and stay out, ye ninny!~"; ], door_dir [; if (location == Floor3_entry) return n_to; else return s_to; ], door_to [; if (location == Floor3_entry) return Heidi_room; else return Floor3_entry; ], has scenery openable; !===================================================================================== ! "P E O P L E" !===================================================================================== Object giant "giant" Giant_Hall with name "giant", description "He is very large, intimidating, and he's holding a large club. He seems to be playing with his mouth.", bugging 0, !for counting how many times the giant is bugged life [; give: if (noun == quarter) { print "The giant jumps up a down excitedly, and runs to his room, hoping the tooth fairy left him more quarters. In his excitement, he drops a large key ring."; move giant_keys to Giant_Hall; move self to giant_room; remove quarter; return true; } else if (noun == figurine) { "~Dat us chu. chu keeps dat. If me hads wittle me, den me keeps me.~"; } else { print "-Fank_oos- The giant pockets ", (the) noun; self.bugging = self.bugging - 1; return true; } Tell,Ask,Answer: if(self in Giant_Hall) { if (self.bugging == 0) { print "^It's hard to tell if he even cares what you said, but he answers you. ^~Me am waifs for duh toof feh wee.~^ He smiles, and you notice a few teeth missing."; self.bugging = self.bugging + 1; return true; } else if (self.bugging == 1) { print "^He points at his teeth, nothing getting through his skull. ^~DUH TOOF FEH WEE! HER GIBPHS ME MUNNEES!!~^"; self.bugging = self.bugging + 1; return true; } else if (self.bugging == 2) { print "^His face is wrinkling with anger ~SHOO NO LISSUHNS! ME SAY TOOF FEH WEE!~ I think you better find something to calm him down."; self.bugging = self.bugging + 1; return true; } else { print "^~LISSUHNS!~^ He raises his club up, and bashes you in the head.^ ~THOOPIDS!~"; deadflag = 3; return true; } } else print "The giant ignores you, playing with his new shiny quarter"; attack: print "With one quick motion, you see the giant raise his club, and that's all you can remember."; deadflag = 3; return true; ], has animate static; Object ghost "ghost" with name "ghost" "howl" "voice", description "You don't see any of those.", found_in other_cell, life[; Tell,answer,ask: if(self hasnt general) { print "You hear a howl, and the whispering voice. ~Leave here, do not follow me into the wall! Just go home!~"; give self general; return true; } else print "The voice returns once again. ~Hooome. You must get ooouuut!~ Wow. The supernatural are so helpful sometimes."; return true; ], has animate concealed static; Object sphinx "Lion statue (sphinx)" with name "statue" "sphinx" "lion", desription "The statue stands proudly. Its presence inspires a great amount of awe. Its wings are enormous. It is a very large, lionlike creature.", found_in Last_Room, before[; attack: print "It seems it wasn't just a statue. It opens its mouth, and sharp fangs rush at you. You jump backward to dodge them, and you did. However, you realize that jumping back while a pit is behind you is a bad thing. You hear laughter on your way down, and close your eyes, hoping this is a bad dream..."; deadflag = 3; ], has static; !===================================================================================== ! M I S C. O B J E C T S !===================================================================================== Object stairs "set of stairs" with name "stairs" "stair", description[; if(location == Giant_Hall) "The stairs seem to spiral down for quite some time"; else if (location == Floor2_entry || location == Floor3_entry) "The stairs are very nice compared to the first set of stairs, and there is no spiral."; else "it's hard to see what set of stairs you are talking about"; ], found_in Giant_Hall Floor2_entry Floor3_entry, has scenery; Object bobby_pin "Bobby pin" Starting_Cell with name "pin" "bobby", description "It`s a small pin used to hold a lady's hair in place.", before[; puton: if(noun == corpse && location == Starting_Cell) { ; "you put the pin back on the corpse. She looks lovely once again"; } ], has concealed; Object corpse "Lady`s Corpse" Starting_Cell with name "corpse" "Lady", description "This corpse is long dead. There is a small bobby pin in its hair, and you think it may have been a lady.", before[; take: "Nasty! You shudder out of digust. You hope you have a better idea soon."; ], has scenery supporter; Object giant_keys "Giant Keys" with name "giant" "key" "keys" "giant keys" "giant key", description "These keys are HUGE! They are definitely the giant's keys.", has pluralname; Object giant_pillow with name "pillow", description "Wow! This pillow is massive! Know you actually can see what a couple pounds of feathers must weigh!", before[; LookUnder: if (self hasnt general) { print "You raise the massive pillow, and find a quarter. You're rich! You take the quarter out of greed and cheepness."; move quarter to player; give self general; return true; } else { print "You raise the massive pillow. An incredible workout!"; return true; } Push,Pull,Take: print "You try to move the pillow, and probably budge it an inch before you realize you'd best just leave it on the bed."; return true; ], found_in giant_room, has static concealed; Object quarter "quarter" with name "coin" "quarter", description "It's a US quarter. 1998, minted in Colorado."; Object foot_locker "Foot Locker" with name "chest" "foot" "locker" "lock" "foot locker", description "The chest is large, metal, and also has a large lock, with a giant keyhole.", before[; unlock: if (parent(giant_keys) == player) print "You shove the giant key in a twist with all of your might, until a `snick` is heard. The lock pops open.^"; return false; take: "It's just too darn heavy, and would be a pain to carry anyway."; ], found_in barracks, with_key giant_keys, has lockable locked container openable scenery; Object boots "Boots" foot_locker with name "boots", description "These boots are thick, steel toed boots. Finely built, and offer great protection to your feet", has clothing pluralname; Object spiderweb "Spider web" Fork_near_kitchen with name "web" "spiderweb", description[; if (self hasnt general) "The web looks as if it is unfinished, but getting there. You find the web-spinner trying to complete the task. The spider ignores you, concentrating on his task at hand. Perhaps you could learn a thing or two from it."; else "What web, you barbarian? You ruined it!"; ], before[; take: give self general; "You attempt to take the web, and your hand passes through, and rips the webbing apart. Wow...what a pissed off spider! It runs around franticly, wondering why someone would shred his home, which is a complete work of art, for no reason what so ever."; Receive: if(noun ~= spider || noun ~= figurine) "That's not very likely"; ], has concealed container supporter open; Object spider "spider" fork_near_kitchen with name "spider", description "Looking at it too long makes you squeemish, but it's just an ordinary house spider.", life[; give: if (noun == figurine) { print "You attempt to give the spider the figurine, and you suddenly look back, as you hear a loud hiss behind you. A large creature with several eyes and eight legs shoots strands of webs at you, and you are spun up in a thick, steel like threading. There is absolutely no way out."; deadflag = 3; return true; } ], before[; drop: if (boards has general && player in Boarded_wall_room) { print "The spider heads down the crack, and after a fly buzzing in the room.^~That durn fly! If ah 'ave te shoot at th li'l... ^^^AHHHHHHH! A Spideh! Git it aweh from me!~^^^ You see the lady run out off to the north."; remove spider; give Heidi_Room general; return true; } else if (parent(spider) == jar) { move spider to parent(player); "dropped"; } take: if (parent(jar) ~= player) { "You have nothing to hold the spider in"; } else { move spider to player; move spider to jar; print "You scoop up the spider in the jar.^^"; return true; } attack: remove spider; "Squish. Wow, you must be proud."; puton,insert: if (noun == spiderweb && location == fork_near_kitchen) { if(spiderweb hasnt general) { ; "You put the spider back in its web. It's happy now."; } else { ; "You put the spider back on what is left of the web. At least you tried to be nice, but I think it is a bit insulting to it."; } } ], has concealed animate; Object jar "Jar" kitchen with name "jar" "jars", description[; if(parent(spider) == player) "It's an ordinary jar with your spider friend in it"; else "It's an ordinary glass jar"; ], before[; drop: ; print "The spider scampers out of the jar^"; attack: if(second == hammer) { remove jar; print "The jar breaks, and becomes useless, as well as its contents."; } receive: if(noun ~= spider || noun ~= note || noun ~= figurine) { "You try to put the board in the jar, and realize that physics still apply here."; } ], has container open transparent; Object note "note" bedroom with name "paper" "letter" "note", description "It is a plain piece of paper with something scribbled on it hurriedly. It reads:^^^~Maintenance,^until you get rid of them creepy little vermin, I am not sleeping here!^^ -Heidi~^", has concealed; Object hammer "hammer" Boarded_Wall_Room with name "hammer", description "Craftsman. Life time warranty. No need to worry about that now. There isn't a Sears anywhere nearby.", before[; use: if(second == boards && hammer hasnt general) { print "You rip the boards off the wall with the hammer, and reveal a strange looking wall. The wall has an outline of a small person on it, similar to the one you saw back near your cell, however the outline is just an outline. There is no indentation in this wall, as opposed to the one in the room with your cell.^^ You feel a draft as well, and looking down through the crack in the floor you can see a lady standing, a shotgun over her shoulder. She's rather attractive, but you can't really see the rest of the room. She must also be deaf, as she didn't seem to hear you tear down the boards."; give boards general; give hammer general; return true; } else if(second == pit) { remove hammer; "You toss the hammer into the pit"; } ]; Object boards "board" with name "board" "boards", description "This board is made of strong wood. It's obvious someone was trying to keep something blocked up", before[; take: if(location == last_room) { "You'd better not. You won't be able to get back across"; } else if(self hasnt general) { "Sounds like a decent idea, except the boards are still fastened to the wall"; } puton: if(location == Heidi_room) { ; return false; } drop: if(location == heidi_room) { print "You put the board across the pit^"; return false; } ], found_in Boarded_wall_room last_room, has concealed; Object pit "pit" with name "pit", description "You can't see the bottom", before[; jump: deadflag = 3; "I guess you couldn't jump that far. On the way down, you do find out where the very attractive lady went. She's at the bottom.^"; receive: if(noun == figurine) { print "You toss the figurine in the pit, and forget to let go or something, because you find yourself tumbling down that pit after it."; deadflag = 3; } remove noun; return true; ], found_in Heidi_room Last_Room has container open scenery; Object figurine "Small figurine of yourself" Last_Room with name "figurine" "miniatue" "figure" "doll", description "If you look in a mirror, you'd see a large version of this figurine, though the current you doesn't look as healthy.", before[; Insert: if(second == painting) { print "You focus on the painting, as you try and place the figurine into the house. Wow, would it be great to be home right now. You can hear your friends cheering you on your arrival. Wait a minute, you don't recognize those cheers. You looks around, and can only see part of the room, but you see a ghostly figure of a beautiful woman smiling. A bobby pin is holding her hair in place. You see the giant flipping his quarter. Six people, who are either carpenters, maintenance workers, or engineers are cheering you on. The attractive girl with the shotgun is blowing you a kiss, and the lion statue is smiling. You hear its loud, booming voice. ~Well Done!~^^ You turn back around, and see you halfway in your front door. You look in your living room, and there is a new painting that must've been bought while you were out. It was a portrait of yourself, locked away in a dark, dusty cell. You notice your image slowly fade from the painting.^^^"; deadflag = 2; return true; } else if(second == bad_door) { print "You place youserlf in the small indentation. The room trembles slightly, and you hear a ghostly howl from the other cell. ^~NO! DON'T FOLLOW ME! NOOOOO!~^^ You look back, and start heading to where the howl is, but you can't move. Looking at yourself, you see just brick, and the indentation of a person in your stone abdomin disappears. You try to cry out, but it only comes out as a ghostly howl...^"; deadflag = 3; return true; } else if(second == spiderweb) { print "You place the figurine in the spider web, and attempt to turn around, but realize you are stuck to the floor. You quickly snatch the figurine back."; } else if(second == jar) { print "You place the figurine in the jar. It vanishes. You shrug, and proceed to walk, but some sort of force is blocking your movement. You try another direction, and you get the same reaction. Oh well. Perhaps you'll be content with your new home."; deadflag = 3; return true; } attack: print "You go to strike the figurine. All of your emotions fade, and you feel paralyzed, unable to move. The room starts to expand. Your eyes roll upward to watch the room expand, but a large object is suddenly dropped on your head by a giant, shadowy figure with a crazed look in his eye."; deadflag = 3; return true; ], after[; take: print "When you take the figurine, the lion statue begins to move. It looks at you, and begins to speak.^^ ~Well. You have managed to get by my giant, and my southern bell, Heidi. You must be very smart. Let's test how smart. If you can figure out this riddle, I will give you some good advice.~^ He pauses briefly. ^~Heidi came up to me one day. I spoke the number 12, and she replied with a 6. She was given my advice. The one that rots in your cell approached me before her demise. I spoke the number 8, and her answer should have been 5, but she failed. Now I give you a number, and you tell me which follows. The number I give you is 10.~^^You step back slightly, figurine in hand.^^"; give self general; return false; ], has concealed; Object painting "painting" Painting_Room with name "painting" "picture" "house", description "The door is wide open in the painting, and it looks very inviting, as if you would like to just step right into the painting.", before[; take: "It won't budge!"; ], has scenery container open; Object bad_door "Stone door" Painting_Room with name "stone" "outline" "door" "stone door" "stone door" "indentation" "outline", description "It's merely a chalk outline of the door, with an indentation of a tiny person.", has scenery; Object bed "bed" with name "bed" "beds", description[; if(location == giant_room) "It's a bed of giant size. The sheets are not made."; else if(location == barracks) "The beds are, interestingly, stripped of pillows, blankets, and coverings. All six of them."; else if(location == bedroom) "The bed is very dusty. It hasn't been used for a long time."; ], found_in giant_room barracks bedroom, has scenery;