! Copyright (C) 2019, 2020 Jason Self ! ! This file is free software: you may copy, redistribute and/or ! modify it under the terms of the GNU Affero General Public License ! as published by the Free Software Foundation, either version 3 of ! the License, or (at your option) any later version. ! ! This file is distributed in the hope that it will be useful, but ! WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! Affero General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public ! License along with this file. If not, see https://gnu.org/licenses/ Object kitchen "Kitchen" with description "This looks like a restaurant-quality kitchen. It's small but full of natural light coming in through the large window, adding a nice sense of a warm glow. Despite the small size it has a high ceiling, and the room was set up into a rectangular shape. The layout allows for easy access. The walls are painted a buttery yellow and broken up by celery green curtains on the window. The highly polished floor ties everything together to create a feeling of comfort and elegance. It's the perfect example of well-balanced home design. The livingroom is to the east.", n_to window, cant_go "You walk smack into one of those buttery yellow walls I described.", e_to livingroom, before [; Go: if (chair in player) { print_ret "The chair is too awkward to do that while you're carrying it."; } ], has light; Object wall "wall" kitchen with name 'yellow' 'wall' 'walls', description [; if (location == kitchen) print "The walls are painted a buttery yellow and broken up by celery green curtains on the windows.^"; else print "You see nothing special about the walls.^"; ], found_in kitchen livingroom bedroom neighborkitchen neighborlivingroom, has scenery; Object chair "chair" kitchen with name 'chair' 'backrest' 'seat', description "It seems to be your average kitchen chair: Four chrome legs and a backrest with a yellow seat that matches the walls.", before [; Take: move chair to player; print_ret "As awkward as it is, you take the chair."; ], has scenery supporter enterable; Object table "table" kitchen with name 'table' 'kitchen table' 'formica', description "It looks like something right out of the 1950s: Green formica and chrome legs.", before [; Take, Pull, Push, PushDir, Turn: print_ret (The) self, " is too heavy for that."; ], has scenery supporter enterable; Object newspaper "newspaper" table with name 'newspaper' 'paper', description "It's your favorite newspaper: U.S. News And Grue Report, which also airs on TV. The headline story says ~The GUE's redesigned 100 zorkmid bill makes history today, becoming the first ever zorkmid to feature a woman on the front. The bill is set to become legal tender next year, with the decision finalized by the Governor yesterday.~ ~I have enthusiastically embraced this bold new way of designing money, showing a woman's face. I believe this landmark achievement will stimulate public confidence in our monetary system and will help build the GUE's creative capabilities,~ the Governor said. The next story talks about how a local resident has won the carrot-growing contest for the third time in a row."; Object window "window" kitchen with name 'window' 'windows', description "Framed by celery green curtains it seems almost large enough to climb through.", short_name [; if (location == kitchen) print "window to your neighbor's back yard"; else print "window to your kitchen"; return true; ], found_in kitchen backyard, door_dir [; if (location == kitchen) return n_to; else return s_to; ], door_to [; if (location == kitchen) return backyard; else return kitchen; ], before [; Search: if (curtains has open) { print "You see your neighbor's backyard.^"; return true; } else { print "The curtains are closed, and you can't see through them.^"; return true; } Open: if (window hasnt visited) { score = score + 1; give window visited; } Climb: if (window hasnt visited) { score = score + 1; give window visited; } PlayerTo(backyard); ], has scenery door openable; Object curtains "curtains" kitchen with name 'celery' 'green' 'curtain' 'curtains', description "Celery green in color, you see nothing special about the curtains.", before [; Take, Pull, Push, PushDir: print_ret "Don't you think they look nice where they are?"; ], has scenery open openable pluralname; Object legs "legs" kitchen with name 'leg' 'legs', found_in kitchen neighborkitchen, has scenery; Object livingroom "Livingroom" with description "You are in a modestly furnished living room. It's very a traditional but modern as far as the style of rooms go. It has a certain bourgeois feeling, although it doesn't seem very large. There's a couch in the middle of the room facing a television. Pictures hang from the other walls. The pictures were commissioned by your family, but a lot of people claim they painted them. You can hear the sound of vehicles driving by outside. The kitchen is to the west. The front door is to the east. Your bedroom is to the south.", before [; Listen: print "You can hear the sound of vehicles driving by outside.^"; return true; ], n_to "Since when did you get the ability to walk through walls? The kitchen is to the west. The front door is to the east. Your bedroom is to the south.", s_to bedroom, w_to kitchen, e_to frontdoor, has light; Object picture "pictures" livingroom with description "The pictures in the room consist of a landscape painting showing a strangely geometric mountain, another of a still life painting of a table laid out with a feast and the third is a portrait of an unknown man. He has a full beard, is wearing a black robe and no shoes. On his head is a large 1970s-era hard disk platter.", name 'picture' 'photo' 'photos' 'frame' 'frames' 'pictures' 'image' 'images', Before [; Take: print_ret "They look so nice, perhaps it's better to leave them where they are."; ], has scenery pluralname; Object man "man" livingroom with description "It's a painting of Richard Stallman dressed as St IGNUcius.", name 'man' 'disk' 'hard' 'platter' 'robe' 'rms' 'Richard' 'Stallman' 'robe' 'black' 'image' 'images', Before [; Take: print_ret "The painting looks so nice, perhaps it's better to leave it where it is."; ], has scenery; Object television "television" livingroom with name 'television' 'tv', description "It's big, gray, and one of those old-fashioned CRT models. It looks very heavy.", watch_count 0, before [; Listen, Examine: if (television has on) { self.watch_count = self.watch_count + 1; switch (self.watch_count) { 1: print "It's big, gray, and one of those old-fashioned CRT models. It looks very heavy.^The TV is currently switched on. Your favorite news program is on: U.S. News And Grue Report.^The news anchor is saying ~In other news, authorities continue to investigate the missing persons case.~^"; score = score + 1; return true; 2: print "The news anchor continues by saying ~We're told the that number of missing people is now up to as many as 5.~^"; score = score + 1; return true; 3: print "The news anchor concludes their coverage by saying ~We'll have more as the story continues to develop.~^"; score = score + 1; return true; default: print "It's big, gray, and one of those old-fashioned CRT models. It looks very heavy.^The TV is currently switched on. Your favorite news program is on: U.S. News And Grue Report.^"; return true; } } ; Take, Pull, Push, PushDir: print_ret (The) self, " is too heavy for that."; ], after [; SwitchOn: print "The television comes to life. Your favorite news program is on: U.S. News And Grue Report.^"; if (television hasnt visited) { score = score + 1; give television visited; } return true; ], has scenery static switchable; Object couch "couch" livingroom with name 'couch' 'sofa', description "It looks like a throwback from the 1970s but has held up very well.", before [; Take, Pull, Push, PushDir: print_ret (The) self, " is too heavy for that."; ], after [; Enter: print "The couch makes a nauseating, high-pitched groan as your weight is added.^"; return true; Exit, GetOff: print "The couch makes a muted snort as your weight is removed.^"; return true; ], has scenery static supporter enterable; Object frontdoor "front door" livingroom with name 'door' 'front', description "Cinnamon brown in color it appears to be a very solid and hefty door.", short_name [; if (location == livingroom) print "door to the outside"; else print "door to your house"; return true; ], found_in livingroom sidewalk, door_dir [; if (location == sidewalk) return w_to; else return e_to; ], door_to [; if (location == sidewalk) return livingroom; else return sidewalk; ], has scenery door openable; Object bedroom "Bedroom" with description "You walk through the door and find yourself in your own bedroom, which was once used by your grandmother. This room was designed in a renaissance style by a master decorator. It has a certain sense of extravagance, with ornate inlaid walls in a variety of complimentary colors that form exquisite patterns, with gold and marble highlights. The fully-decorated bed looks very comfortable - it projects a very light, airy feeling that's perfect for sleeping and adds to the sense of luxury. On the wall across from your bed is a large painting. The livingroom is to the north.", n_to livingroom, cant_go "Since when did you get the ability to walk through walls? Your livingroom is to the north.", has light; Object painting "painting" bedroom with description "It's a picture of Aragain Falls, the most breathtaking and awesome waterfall in the known lands.", before [; Insert: if (second == box) print_ret (The) self, " is too big to fit."; ], name 'painting' 'paint' 'picture' 'of' 'aragain' 'falls', has scenery; Object bed "bed" bedroom with name 'bed' 'twin', description "With a frame of solid wood with a golden brown finish, it's a finely crafted bed.", before [; Take, Pull, Push, PushDir: print_ret (The) self, " is too heavy for that."; ], has scenery static supporter enterable; Object box "dented steel box" bed with name 'box' 'safe' 'safety' 'deposit', description "It's a safety deposit box. Made of steel, and dented, the words ~Property Of The Bank of Zork~ are on it.", has container openable; Object directional "compass" box with name 'compass', description [; if (location == livingroom || location == sidewalk) { print "The compass is pointing west.^"; rtrue; } if (location == frontporch) { print "The compass is pointing southeast.^"; rtrue; } else print "Ordinarily you'd expect a compass to point north but this one is spinning wildly in every direction.^"; ], ; Object grandlivingroom "Grand Livingroom" with description [; if (grandlivingroom has visited) { print "This time there's no sign of the woman but the guards she called for are here. They grab & arrest you. Perhaps you should have listened.^"; } if (grandlivingroom hasnt visited) { print "Feeling a little disoriented as you enter, this doesn't seem like the same place: The interior feels very open. Walls of pine extend upward to a ceiling soaring above this two-story height livingroom with windows extending all the way up the walls, providing an abundance of sunlight for the space. The ceiling is painted with soft moss on a deep silver background creating an inviting effect. A wide doorway on the other side of the room leads to a wide balcony, providing a perfect view of the garden and pond beyond it. As you begin to take in the bold colors of this lavish room a woman comes out of one of the walkways on the other end. Dressed in a stunning red and blue gown she seems a combination of surprised and startled to see you. ~Who are you? Why are you here?~ she asks, demandingly. Not giving time for a response she yells for the guards. I don't know where we are but I think now would be a good time to leave.^"; } ], each_turn [; guardscalled = guardscalled + 1; if (guardscalled == 1) PlayerTo(neighborlivingroom); else if (guardscalled == 2) { deadflag = 3; } ], has light; Object Sidewalk "Sidewalk" with description "You are standing on the sidewalk in front of your house. The street is normally quiet, but it's been very busy and crowded today, like trying to get through a busy movie theater, and the sound of the traffic has been particularly noticeable. The traffic is a good sign of what's going on in the city as a whole today. It is barely cloudy and already hot this morning. Smaller branches of trees are in motion from the light wind, which helps to provide some relief from the heat. Your home is to the west. Your neighbor's home is to the northwest.", n_to "Some inconsiderate person parked their car on the sidewalk which blocks your path. It might be nice to call Parking Enforcement so they can get a ticket for creating an obstruction but you don't have a phone.", s_to "You arrive at an intersection. Lots of traffic drives past at high speed creating a small breeze that makes your shirt ripple. You decide it is better to not risk being run over and go back.", e_to "As you start to step out into the street a car quickly zooms by at high speed. You jump back to avoid becoming part of the pavement.", se_to "As you start to step out into the street a car honks impatiently for you to get out of the way. You go back to your old spot.", ne_to "The street is very busy. Surely you'd be hit by a moving vehicle if you went there.", nw_to frontporch, sw_to "A rock wall blocks your path.", w_to frontdoor, has light; Object street "street" sidewalk with name 'street' 'road', description "It's your typical street.", has scenery; Object rockwall "rock wall" sidewalk with name 'rock' 'wall' 'stone' 'rock' 'boulder' 'stonework' 'cobblestone' 'mortar' 'stones' 'rocks' 'walls', description "Made up of assorted stones of various sizes and shapes, with a healthy dose of mortar between them to fill and seal the irregular gaps between them, it serves as a wall separating your property from someone else's.", has scenery; Object car "car" sidewalk with name 'car' 'vehicle' 'automobile', description "It's a white two-door car. The license plate holder says FrobozzCo International.", before [; Unlock: print_ret "The car is locked, and there is apparently no key."; Open: print_ret "The car is locked, and there is apparently no key."; Climb: print_ret "I'm not sure that FrobozzCo International would appreciate people climbing on one of their cars."; Take: print_ret "I doubt that FrobozzCo International would appreciate someone taking one of their cars."; Pull, Push, PushDir, Turn: print_ret (The) self, " is too heavy for that."; ], has scenery; Object licenseplateframe "license plate holder" sidewalk with name 'license' 'plate' 'frame' 'holder', description "It says FrobozzCo International in white letters on a black frame.", Before [; Take, Pull, Push, PushDir, Turn: print_ret (The) self, " is firmly attached to the car."; ], has scenery; Object frontporch "Front Porch" with description "You are on your neighbor's front porch. It consists of a coffee brown wooden floor connected to and surrounded a parchment white wooden fence. The fence is obviously new and looks great. It's tall enough to make climbing it impossible. The design of the porch places the focus on the front door. A deep red color, the door is large, high quality and has no window. It has a shiny brass handle, which appears very sturdy. There's an opening to the southwest toward the sidewalk. Their front door is to the west.", cant_go "That parchment white wooden fence is too high to get over.", se_to sidewalk, w_to neighbordoor, has light; Object neighbordoor "front door" frontporch with name 'door' 'front' 'red', description "The door is large and high quality. A deep red color it has no window and a shiny brass handle, which appears to be very sturdy.", found_in frontporch neighborlivingroom, door_dir [; if (location == frontporch) return w_to; else return e_to; ], door_to [; if (location == frontporch) return neighborlivingroom; else return frontporch; ], has scenery door openable; Object brasshandle "brass door handle" frontporch with name 'brass' 'handle', found_in frontporch neighborlivingroom, has scenery; Object fence "wooden fence" frontporch with name 'fence' 'wooden' 'wood', found_in backyard frontporch, has scenery; Object neighborlivingroom "Neighbor's Livingroom" with description "You are in your neighbor's livingroom. It seems that no one has lived here in a long time, even though you saw your neighbor here last week. All of the furniture has been removed and the air smells stale. A large bay window enclosed by sheer cobalt blue curtains allowing light to come through. A door is to the east.^^A machine as tall as you sits in the center of their livingroom. It consists of three transparent spheres joined together containing machinery. A barrel with a small aperture comes out of the farthest sphere, pointing down and to the wall. The entire thing rests on a shiny metal platform allowing it to rotate and tilt with ease.", w_to neighborkitchen, e_to neighbordoor, before [; Go: if (bluebutton has on && poker notin machine) { machine.shoot(); rtrue; } ], has light; Object neighborwindow "window" neighborlivingroom with name 'large' 'bay' 'window' 'windows', description "A large bay window enclosed by sheer cobalt blue curtains allowing light to come through.", before [; Go: print_ret "The window is not something you can go through."; Open, Close: print_ret "This isn't the type of window that can be opened or closed."; ], has scenery; Object neighborcurtains "curtains" neighborlivingroom with name 'cobalt' 'blue' 'curtain' 'curtains', description "Cobalt blue in color, the curtains have been decorated with intricate embroidery.", before [; Take, Pull, Push, PushDir: print_ret "Don't you think they look nice where they are?"; ], has scenery openable pluralname; Object embroidery "embroidery" neighborlivingroom with name 'embroidery' 'pattern' 'patterns', has scenery; Object redbutton "red button" neighborlivingroom with name 'red' 'red button' 'button' 'buttons', before [; Push: if (bluebutton has on && poker notin machine) { print "You reach for the red button, but not in time...^ "; machine.shoot(); rtrue; } if (poker in machine) print_ret "You press the red button but it's futile because the machine's shorted out."; else { print "You push the red button. The machine makes clunky noises as machinery moves inside. A loud humming begins to emanate from it. It comes to life, spins around on its base, aims, and quickly fires a series of three bright blue sparks at you. You hear a small explosive sound as they impact your chest. You feel a little disoriented as it teleports you away.^"; move box to bed ; move directional to box ; move newspaper to table ; move letter to island ; move poker to fireplace ; PlayerTo(campsite); rtrue; } ], has scenery; Object bluebutton "blue button" neighborlivingroom with name 'blue' 'blue button' 'button' 'buttons', before [; Push: if (bluebutton has on) { if (poker notin machine) { print "You reach for the blue button, but not in time...^ "; machine.shoot(); rtrue; } else { give bluebutton ~on; print_ret "You push the blue button. The machine sounds like it powers down."; } } else { give bluebutton on; if (poker notin machine) { machine.shoot(); rtrue; } print_ret "You push the blue button."; } ], has scenery on; Object machine "machine" neighborlivingroom with name 'machine' 'machinery' 'sphere' 'spheres' 'platform' 'barrel' 'aperture' 'metal platform' 'shiny metal platform' 'shiny platform' 'shiny' 'metal', description "It consists of three transparent spheres joined together containing machinery. A barrel with a small aperture comes out of the farthest sphere, pointing down and to the wall. The entire thing rests on a shiny metal platform allowing it to rotate and tilt with ease. There is a blue button and a red button.", time_left, before [ weapon; Attack: if (noun == self) weapon = second; else weapon = noun; if (weapon ~= poker) { print "That wasn't helpful.^"; if (bluebutton has on) self.shoot(); rtrue; } self.shortout(); return true; Receive: if (noun == poker) { self.shortout(); return true; } if (bluebutton has on) self.shoot(); rtrue; ], time_out [; if (poker in self) StopTimer(machine); else if (bluebutton has on) self.shoot(); ], daemon [; if (poker in player) rfalse; if (player in parent(self) && poker notin machine) self.shoot(); ], shoot [ destination; destination = random(3); print "^A loud humming begins to emanate from the machine. It comes to life, spins around on its base, aims, and quickly fires a series of three bright blue sparks at you. You hear a small explosive sound as they impact your chest. You feel a little disoriented as it teleports you away.^"; if (destination == 1) PlayerTo(kitchen); if (destination == 2) PlayerTo(livingroom); if (destination == 3) PlayerTo(bedroom); ], shortout [; if (machine hasnt visited) { score = score + 1; give machine visited; } move poker to self; print "You put the poker into ", (the) self, ". Sparks fly wildly in every direction as it shorts out.^"; ], has scenery container open; Object backyard "Back Yard" with description "You are in your neighbor's back yard. It is barely cloudy and already hot this morning. Some shade from the sun would be nice but the closest tree is at the sidewalk, on the other side of the building and the sun is causing all of the shadows to go in the wrong direction. The healthy, dark green grass is well manicured. It looks like a nice place. You hear some dogs barking in the distance. A high wooden fence encompasses the area, painted a burnt umber. Their back door is to the east. Your kitchen window is to the south.", before [; Go: if (noun == s_obj) { print "Climbing over the fence you squeeze back through your kitchen window.^"; } ], s_to window, n_to "Their fence is too high to climb over in that direction.", e_to backdoor, w_to "Their fence is too high to climb over in that direction.", has light; Object leaves "leaves" backyard with name 'leaf' 'leaves', found_in backyard sidewalk, has scenery; Object scratches "scratches" backyard with name 'scratch' 'scratches' 'mark' 'marks' 'marking' 'markings', found_in backyard neighborkitchen, has scenery; Object house "neighbor's house" backyard with name 'neighbor' 'neighbors' 'house' 'home' 'building', found_in backyard frontporch kitchen sidewalk, has scenery; Object backdoor "back door" backyard with name 'door' 'back' 'backdoor', description "Burgundy in color it seems a solid and hefty door. It has scratches along the bottom, as if from a pet long forgotten.", short_name [; if (location == backyard) print "door to your neighbor's house"; else print "door to the back yard"; return true; ], found_in backyard neighborkitchen, door_dir [; if (location == backyard) return e_to; else return w_to; ], door_to [; if (location == backyard) return neighborkitchen; else return backyard; ], has scenery door openable; Object neighborkitchen "Kitchen" with description "You are in your neighbor's kitchen. It's a large contemporary kitchen with an open design and many flat surfaces. The color palette is very bright and in perfect harmony with the kitchen. It's timeless and beautiful. The walls look like they've been used to store things, with some faint outlines remaining that gives a lived-in look. It could have been a luxury cooking environment, though by now everything has been removed. Only the kitchen island and fireplace remain in stark contrast to the bare kitchen. The livingroom is to the east. The door to the back yard is to the west.", e_to neighborlivingroom, w_to backyard, has light; Object island "kitchen island" neighborkitchen with name 'kitchen' 'island' 'table' 'wood' 'wooden' 'top' 'wood', description "It has metal legs firmly embedded into the floor, and a wooden top. Strangely, all of the drawers have been removed.", before [; Take, Pull, Push, PushDir, Turn: print_ret "The kitchen island is firmly planted in the floor."; ], has scenery supporter enterable; Object brick "brick" neighborkitchen with name 'brick' 'bricks' 'mortar', description "You find nothing special about the bricks that make up the fireplace.", has scenery; Object fireplace "fireplace" neighborkitchen with name 'fireplace' 'fire' 'place' 'mouth', description [; print "A stain is splayed against the brick fireplace, making its curved mouth appear like a black, toothless scream. A confection of ashes occupy the fireplace"; if (poker in self) print ", and a poker hangs out which looks like it could make an effective weapon"; print "."; new_line; ], has scenery container transparent open; Object poker "poker" fireplace with name 'poker', description "This poker may have once been used to expedite the flame's envelopment, as well as the house's many stories and secrets.", before [; Take, Pull, Push, PushDir, Remove: give poker ~concealed; if (poker hasnt visited) { score = score + 1; give poker visited; } if (player in neighborlivingroom) { if (bluebutton has on) machine.shoot(); } ], has concealed; Object ashes "ashes" fireplace with name 'ash' 'ashes', description "It looks like a pile of ash.", before [; Take, Pull, Push, PushDir: print_ret "The ashes are so fine they fall between your fingers."; ], has concealed pluralname; Object stain "stain" fireplace with name 'stain', has scenery; Object mouth "mouth of the fireplace" fireplace with name 'mouth', has scenery; Object letter "letter" island with name 'letter', description "The letter reads: ~Thank you for evaluating this prototype of the Frobozz Magic Teleporter. Please refer to the enclosed manual to learn how to program destinations in to your teleporter. Pressing the red button recalls the last-used destination and teleports you there. Pressing the blue button engages Defense Mode, which instantly whisks intruders away. Use it to provide defense for any location! Please send feedback about this prototype to your local FrobozzCo International sales person. Warning: Side effects can include disorientation, loss of memory, lightheadedness, loss of appetite, nausea, vomiting, weakness, and death.~";