! Omniquest ! ! Original for Commodore Basic V2 written c. 1988 ! by Chris Barden and Chris Ethridge ! Adapted to Inform by Chris Barden Constant Story "OMNIQuest"; Constant Headline "^Original for Commodore Basic V2^ written c. 1988 by Chris Barden and Chris Ethridge, ^ adapted to Inform by Chris Barden^"; Release 2; Constant MAX_CARRIED = 10; Constant MAX_SCORE = 50; Constant NO_PLACES; Global OrganPlayed = 0; Include "Parser"; Replace VersionSub; Object LibraryMessages with before [; Attack: if (noun == player) "Suicide is not the answer."; if (noun == fish) "The defenseless fish blankly accepts your pummeling."; if (noun == worm) "The defenseless worm blankly accepts your pummeling."; if (noun == samurai) if (sword in player) switch (random(10)) { 1: "The samurai knocks his weapon agains the wall, throwing sparks!"; 2: CauseDamage(25); "The samurai nicks you on the arm with his weapon. Blood is trickling down."; 3: CauseDamage(100); "The samurai neatly removes your head."; 4: "You swing with your sword. You make a clean incision in his wrist."; 5: remove noun; "The force of your blow knocks the samurai dead."; 6: CauseDamage(50); "The samurai sticks his weapon firmly into your leg and quickly pulls it out. Blood sprays everywhere."; 7: "A good attack, but it misses the samurai by a mile."; 8: "The samurai attacks, but you parry."; 9: remove noun; "The samurai staggers to the ground. He dies."; 10: CauseDamage(100); "You are knocked unconscious.^^The samurai waits: could this assailant be magically protected?^^He decides not, and puts you to death."; } else "With your bare hands? I think not."; "I've known strange people, but fighting ", (a) noun, "?"; Jump: "Having fun?"; No: "You sound rather negative."; Strong: switch(random(3)) { 1: "Watch your language."; 2: "Profanity is not the answer."; 3: "Such language in a high-class establishment such as this!"; } Swim: "You can't swim."; Wait: "Time passes..."; Yes: "You sound rather positive."; ]; Include "VerbLib"; Include "ZorkDiag"; ! ---------------------------------------------------------------------------- ! The outside world ! ---------------------------------------------------------------------------- Object ether; ! Nowhere Class AboveGround has light; Class Prop with before [; Examine: return false; default: "You don't need to worry about ", (the) self, "."; ], has scenery; AboveGround Large_Clearing "Large Clearing" with description "You are standing in a large clearing surrounded by a dense forest. There is a path to the east.", e_to Small_Path; Prop clearing "large clearing" Large_Clearing with name 'large' 'clearing'; Prop forest "dense forest" with found_in Large_Clearing Small_Path, name 'dense' 'forest'; Prop path "path" with found_in Large_Clearing Small_Path Fork_in_Path swEnd_of_Path seEnd_of_Path Endless_Beach Canyon_Path Island_Coast Sandy_Beach Intersection East_Path West_Path, name 'path' 'paths'; Object tree "tree" Large_Clearing with name 'tree', before [; Climb: <>; Examine: if (snorkel notin ether) "You see nothing special about the tree."; move snorkel to player; score = score + 5; "There is a snorkel hanging from the tree. You take it."; ], has static; Object snorkel "snorkel" ether with name 'snorkel', before [; Disrobe: if (player in Ocean) "Not a good idea."; ], has clothing; AboveGround Small_Path "Small Path" with description "The path branches here. There are paths to the west and south that continue into the forest. The path to the east appears to lead into some rather rocky territory.", w_to Large_Clearing, s_to Fork_in_Path, e_to Canyon_Entrance; Prop territory "rocky territory" Small_Path with name 'rocky' 'territory'; AboveGround Fork_in_Path "Fork in Path" with description "This path forks to the southwest and southeast.", n_to Small_Path, sw_to swEnd_of_Path, se_to seEnd_of_Path; AboveGround swEnd_of_Path "End of Path" with description "This appears to be the end of the path. There is an exit to the northeast.", ne_to Fork_in_Path; Object match "match" swEnd_of_Path, with name 'match', lit_turns 0, each_turn [; if (match.lit_turns > 0) { match.lit_turns = match.lit_turns - 1; if (match.lit_turns == 0) { remove match; "Your match has blown out. You toss it away."; } } ], before [; Burn: match.lit_turns = 5; give match light; "The match begins to burn."; ] ; AboveGround seEnd_of_Path "End of Path" with description "This appears to be the end of the path. There is an exit to the northwest.", nw_to Fork_in_Path; Object raincoat "raincoat" seEnd_of_Path, with name 'raincoat', capacity 1, before [; Insert: "It won't fit."; ], has container openable clothing; AboveGround Canyon_Entrance "Canyon Entrance" with description "This is the entrance to a canyon formed by an ancient river. The canyon is to the east. There is a sandy path to the northwest that seems to lead to a beach. There is a path leading into a forest to the west.", w_to Small_Path, nw_to Endless_Beach, e_to Canyon_Path; Prop sandy_path "path" Canyon_Entrance with name 'sandy' 'path'; Prop the_forest "forest" Canyon_Entrance with name 'forest'; Prop canyon "canyon" with found_in Canyon_Entrance Canyon_Path, name 'canyon'; Prop beach "beach" with found_in Canyon_Entrance Endless_Beach, name 'beach' 'endless'; Prop river "river" with found_in Canyon_Entrance Canyon_Path Small_Clearing, with name 'river' 'riverbed' 'ancient' 'widening'; AboveGround Canyon_Path "Canyon Path" with description "The path here is a riverbed that has long since gone dry. The river has cut several meandering passages into the canyon, forming what looks like two rather large boulders. A passage to the north appears to go around the larger boulder, while a narrow gap to the southeast seems to go around the smaller boulder. A passage to the east cuts the rock into its separate sections. And of course, the passage to the west goes back the way you came.", w_to Canyon_Entrance, n_to Small_Clearing, e_to Small_Clearing, se_to Small_Clearing; Prop boulder "boulders" with found_in Canyon_Path Small_Clearing, name 'boulder' 'boulders' 'smaller' 'larger' 'rock' 'large'; Prop the_passages "passages" with found_in Canyon_Path Twisting_Passageway, name 'passages' 'several' 'meandering'; Prop passage "passage" with found_in Canyon_Path Small_Cavern Cold_Passage Twisting_Passageway, name 'passage' 'gap'; AboveGround Small_Clearing "Small Clearing" with description "This clearing is apparently a brief widening of some ancient river. There are various small passages winding around two large boulders. These are to the north, south, and west.", n_to Canyon_Path, s_to Canyon_Path, w_to Canyon_Path; Prop the_clearing "clearing" Small_Clearing with name 'clearing'; Prop passages "small passages" with found_in Small_Clearing Small_Cavern, name 'passage' 'passages' 'small'; Object shovel "shovel" Small_Clearing, with before [; Insert: "It won't fit."; ], name 'shovel'; AboveGround Endless_Beach "Endless Beach" with description "This is a beach that seems to stretch on forever to the east and west. There is nothing particularly notable about the beach, except that it has white sand. The ocean is to the north. You see an island on the horizon. There is a path winding across the dunes to the southeast.", se_to Canyon_Entrance, w_to Endless_Beach, e_to Endless_Beach, before [; give Endless_Beach ~visited; Go: if (noun == n_obj || noun == nw_obj || noun == ne_obj) { if (snorkel notin player || snorkel hasnt worn) { deadflag = 1; "The water was a bit deeper than you expected."; } if (match in player || (match in raincoat && raincoat in player && raincoat has open)) { remove match; print "Your match is ruined. It floats away."; return false; } } ], nw_to Ocean, n_to Ocean, ne_to Ocean; Prop white_sand "white sand" Endless_Beach with name 'white' 'sand'; Prop the_ocean "ocean" with found_in Endless_Beach Ocean, name 'ocean' 'water'; Prop island "island" with found_in Endless_Beach Ocean Island_Coast, name 'island'; Prop horizon "horizon" Endless_Beach with name 'horizon'; Prop dunes "dunes" Endless_Beach with name 'dune' 'dunes'; AboveGround Ocean "Ocean" with description "The water is a bit deep, but with the snorkel on you can breathe. The shore is to the south. The island looms ahead to the north.", n_to Island_Coast, nw_to Island_Coast, ne_to Island_Coast, w_to Ocean, e_to Ocean, s_to Endless_Beach, sw_to Endless_Beach, se_to Endless_Beach; Prop shore "shore" Ocean with name 'shore'; AboveGround Island_Coast "Island Coast" with description "This is the main section of the island. The primary landmark on the island is a towering rock, which lies along the coast here. There is a path to the rest of the island to the north.", n_to Sandy_Beach, before[; Go: if (noun == nw_obj || noun == ne_obj || noun == e_obj || noun == se_obj || noun == s_obj || noun == sw_obj || noun == w_obj) { if (snorkel notin player || snorkel hasnt worn) { deadflag = 1; "The water was a bit deeper than you expected."; } if (match in player || (match in raincoat && raincoat in player && raincoat has open)) { remove match; print "Your match is ruined. It floats away."; return false; } } ], s_to Ocean, sw_to Ocean, se_to Ocean, nw_to Ocean, ne_to Ocean, w_to Ocean, e_to Ocean; Prop coast "coast" Island_Coast with name 'coast'; Object rock "rock" Island_Coast with description "The rock is towering.", name 'towering' 'large' 'rock' 'landmark' 'primary', before [; Examine: return false; Take: "The rock is far too large to pick up."; Push,Pull: print "With a great effort you move the rock. You fall through the hole that the rock was covering. Fortunately, your fall is broken by a small patch of manure. You notice someone moving the rock back over the hole.^"; PlayerTo(Cylindrical_Room); score = score + 5; return true; default: "There's no point in doing that to the rock."; ], has scenery; AboveGround Sandy_Beach "Sandy Beach" with description "This is an area with particularly soft earth. There is a path back to the main section of the island to the south.", before [; Go: if (noun == nw_obj || noun == ne_obj || noun == e_obj || noun == se_obj || noun == n_obj || noun == sw_obj || noun == w_obj) { if (snorkel notin player || snorkel hasnt worn) { deadflag = 1; "The water was a bit deeper than you expected."; } if (match in player || (match in raincoat && raincoat in player && raincoat has open)) { remove match; print "Your match is ruined. It floats away."; return false; } } Dig: if (shovel in player && (second == shovel || second == nothing)) { if (lamp in ether) { move lamp to player; "Digging reveals a lamp. You take it."; } else { "You find nothing else."; } } else { "Digging requires the proper tool."; } ], s_to Island_Coast, n_to Ocean, se_to Ocean, sw_to Ocean, nw_to Ocean, ne_to Ocean, w_to Ocean, e_to Ocean; Object earth "earth" Sandy_Beach, with name 'earth' 'soft', has scenery; Object lamp "lamp" ether, with name 'lamp', before [; Insert: "It won't fit."; SwitchOn: give lamp light; SwitchOff: give lamp ~light; ], has switchable; Object Cylindrical_Room "Cylindrical Room" with description [; print "This is a cylindrical room. The walls are smooth and unclimbable. There are no prominent features in this room, except for a torch securely fastened to the wall."; if (passageway in Cylindrical_Room) " There is an exit to the southeast."; else " There appears to be no way out of this room."; ], before [; Go: if (noun == se_obj && passageway in Cylindrical_Room) { PlayerTo(Giant_Cavern); return true; } Pull: if (noun == torch) { if (passageway in ether) { move passageway to Cylindrical_Room; "Pulling on the torch causes a secret passageway to the southeast to open."; } else "Nothing happens."; } ]; Object torch "torch" Cylindrical_Room with name 'torch', has static light scenery; Prop walls "walls" Cylindrical_Room with name 'walls'; Prop room "room" with found_in Cylindrical_Room Giant_Cavern Organ_Room Musty_Corridor Rice_Room Ice_Room Jeweled_Room, name 'room'; Prop passageway "secret passageway" ether with name 'secret' 'passageway' 'exit'; Object Giant_Cavern "Giant Cavern" with description "This is a large room which has corridors leaving the room in four different directions: northwest, northeast, west, and south.", nw_to Cylindrical_Room, w_to Cold_Passage, s_to Slimy_Passageway, ne_to Small_Cavern; Prop cavern "cavern" with found_in Giant_Cavern Small_Cavern, name 'cavern' 'caverns'; Prop corridors "corridors" Giant_Cavern with name 'corridor' 'corridors'; Object Small_Cavern "Small Cavern" with description "This is a small cavern with passages to the southeast, southwest, and north.", se_to Twisting_Passageway, n_to Organ_Room, sw_to Giant_Cavern; Object Organ_Room "Organ Room" with description "This is a large room. The majority of the room is taken up by a massive pipe organ. Thousands upon thousands of pipes fill the room. The organ appears to be in a playable condition.", s_to Small_Cavern; Object organ "pipe organ" Organ_Room with name 'massive' 'pipe' 'organ', has static scenery; Prop pipes "pipes" Organ_Room with name 'pipes'; Object Cold_Passage "Cold Passage" with description [; if (OrganPlayed == 1) "This is a passageway that used to be cold but is becoming gradually warmer.^ Vapors radiate from the spot where a wall of ice used to stand. There are fragments of the wall on the ground.^ The passage to the west is now reachable. There is an exit to the east."; else "This is a passage that is cold from the wall of ice that blocks further travel to the west. There is an exit to the east."; ], before [; Go: if (noun == w_obj && OrganPlayed == 1) { PlayerTo(Ledge); return true; } ], e_to Giant_Cavern; Prop the_passageway "passageway" with found_in Cold_Passage Twisting_Passageway, name 'passageway'; Prop vapors "vapors" ether with name 'vapors'; Prop wall_of_ice "wall of ice" Cold_Passage with name 'wall' 'ice'; Prop fragments "fragments" ether with name 'fragment' 'fragments'; Object Slimy_Passageway "Slimy Passageway" with description [; if (OrganPlayed == 1) "This is a slippery tunnel which has exits to the north and northeast. There is rubble to the southeast."; else "This is a slippery tunnel which has exits to the north, northeast, and southeast."; ], before [; Go: if (noun == se_obj && OrganPlayed == 1) "The rubble is impassible."; ], n_to Giant_Cavern, ne_to Twisting_Passageway, se_to Intersection; Object rubble "rubble" ether with name 'rubble', before [; Push,Pull: "The rubble is too heavy to move."; ], has static scenery; Prop tunnel "slippery tunnel" Slimy_Passageway with name 'slippery' 'tunnel'; Object Twisting_Passageway "Twisting Passageway", with description [; print "This passageway is rather damp and twists in all directions. All of these are dead ends except for the passages to the "; if (OrganPlayed == 1) "north, northwest, and southwest. There is rubble to the southeast."; else "north, northwest, southwest, and southeast."; ], before [; Go: if (noun == se_obj && OrganPlayed == 1) "The rubble is impassible."; ], n_to Blue_Ridge_Mountain_Sports, nw_to Small_Cavern, sw_to Slimy_Passageway, se_to Intersection; Object other_rubble "rubble" ether with name 'rubble', before [; Push,Pull: "The rubble is too heavy to move."; ], has static scenery; Object sword "sword" Twisting_Passageway, with name 'sword', before [; Insert: "It won't fit."; ]; Object Blue_Ridge_Mountain_Sports "Blue Ridge Mountain Sports" with description "This is a store that appears to be deserted. There are exits to the south and east.", s_to Twisting_Passageway, e_to Dirt_Cave; Prop store "store" Blue_Ridge_Mountain_Sports with name 'store'; Object parka "parka" Blue_Ridge_Mountain_Sports with name 'parka', before [; Insert: "It won't fit."; ], has clothing; Object Dirt_Cave "Dirt Cave" with description "This is a damp cave with moist ground. There is an exit to the west.", before [; Dig: if (shovel in player && (second == shovel || second == nothing)) { if (worm in ether) { move worm to player; score = score + 5; "Digging reveals a worm. You take it."; } else { "You find nothing else."; } } else { "Digging requires the proper tool."; } ], w_to Blue_Ridge_Mountain_Sports; Prop cave "damp cave" Dirt_Cave with name 'damp' 'dirt' 'cave'; Object ground "moist ground" Dirt_Cave with name 'moist' 'ground', has scenery; Object worm "worm" ether with name 'worm', before [; Eat: deadflag = 1; "You eat the worm. You think about how surprisingly good it tastes^ and wonder why you have never tried it before. Of course, a very^ good reason is because this worm is a deadly trichina worm, and^ that eating it has caused you to feel extreme pain, have convulsions,^ slip into a coma, and ultimately die, as well as giving you indigestion.^ Next time, try it with ketchup."; ], has edible; Object Intersection "Intersection" with description "You have come across a shimmering lake. This is an intersection with paths to the northwest, northeast, southwest, and southeast.", in_to "You've already been on one dangerous swim today, no need for another.", sw_to West_Path, se_to East_Path, nw_to Slimy_Passageway, ne_to Twisting_Passageway; Prop lake "lake" with found_in Intersection South_Lake, name 'majestic' 'shimmering' 'lake', has scenery; Prop the_intersection "intersection" Intersection with name 'intersection'; Object East_Path "East Path" with description "This is a path that came from the northwest and continues to the southwest.", sw_to South_Lake, nw_to Intersection; Object man "old man" East_Path with name 'old' 'man', initial [; print "There is an old man here.^"; if (location hasnt visited) "~I haven't had a smoke in 12 years,~ he says. ~Please, PLEASE give me a match!~"; ], before [; Attack: "~Hey! Stop doing that!~ the man exclaims. You feel ashamed and stop your violent action."; Answer: if (rod in ether) "He says he wants a match."; else "He's smoking."; ], life [; Give: if (noun == match) { remove match; move rod to player; score = score + 5; "~Thank you!!~ says the man. He lights up for the first time^ in 12 years. ~I have this fishing rod. I'd use it, but I've^ been sitting here so long that I can't get up. Since you've^ been so nice to me, you can have my rod.~ He hands it to you,^ and you take it."; } else "He politely refuses your gift."; ], has animate male; Object scroll "scroll" East_Path, with description [; <>; ], name 'scroll', before [; Consult: "The scroll reads:^ Greetings. If you have found this letter, you are obviously^ trapped down here. We, the Tamatis, need your help. The^ Diamond Wings of Destiny have been stolen. Legend has it whoever^ finds them will be able to fly. Please return them to us. You can^ find us behind the wall of ice."; ]; Object rod "fishing rod" ether with description "It's an ordinary fishing rod, complete with line and hook.", before [; Insert: "It won't fit."; Receive: if (noun == worm) "You'll bait it when the time comes."; else "Putting that on the fishing rod would achieve nothing."; ], name 'rod' 'pole' 'fishing' 'line' 'hook', has supporter; Object West_Path "West Path" with description "This is a section of the path that continues to the northeast and southeast, as well as branching to the west.", ne_to Intersection, se_to South_Lake, w_to Guardian_Chamber; Object South_Lake "South Lake" with description "This is an area south of the majestic lake. There are many exits here, such as northwest, northeast, southeast, and south.", nw_to West_Path, ne_to East_Path, se_to Chilly_Corridor, s_to Musty_Corridor; Object Chilly_Corridor "Chilly Corridor" with description [; print "There is a cool draft coming from the southeast. There are other exits to the southwest and northwest.^"; if (parka hasnt worn) print "^Since it is so cold, it might be wise to put on a jacket of some sort.^"; return true; ], before [; Go: if (noun == se_obj && parka hasnt worn) { deadflag = 1; "It is so cold that you very quickly freeze to death."; } ], se_to Ice_Room, nw_to South_Lake, sw_to Rice_Room; Prop corridor "corridor" with found_in Chilly_Corridor Musty_Corridor, name 'corridor'; Prop draft "cool draft" Chilly_Corridor with name 'cool' 'draft'; Object Musty_Corridor "Musty Corridor" with description "This somewhat non-descript room has a particularly musty odor. There are exits to the north and south.", n_to South_Lake, s_to Rice_Room; Prop odor "odor" Musty_Corridor, with description "It's musty.", name 'musty' 'odor'; Object Rice_Room "Rice Room" with description "This room smells of steaming rice. Some song is playing in the distance, and it is saying something about rice patties. Exits are to the northeast and north.", ne_to Chilly_Corridor, n_to Musty_Corridor; Object rice "rice" Rice_Room with name 'steaming' 'rice' 'patties', before [; Eat: "It's kind of bland."; ], has pluralname edible; Prop song "song" Rice_Room with description "It's saying something about rice patties.", name 'song', before [; Listen: "It's saying something about rice patties."; ]; Object Ice_Room "Ice Room" with description "This is a COLD room filled with ice. Slush fills a hole in the center of the room. There is an exit to the northwest.", before [; Fish: if (rod in player) { if (worm in player) { remove worm; move fish to player; "You bait your rod and cast.^Finally a fish! You take it."; } if (boot in ether) { move boot to player; "Of all the dumb luck! A boot! You take it anyway."; } "You find nothing."; } ], nw_to Chilly_Corridor; Prop hole "slush-filled hole" Ice_Room with name 'slush' 'hole' 'ice'; Object fish "fish" ether with name 'fish', before [; Eat: "The raw fish is good, but you never did acquire a taste for it."; ], has edible; Object boot "boot" ether with name 'boot', before [; Insert: "It won't fit."; ], description [; if (crystal in ether) { move crystal to player; "Examining the boot further reveals a crystal, which you take."; } else "I see nothing special about the boot."; ]; Object crystal "crystal" ether with name 'crystal'; Object Guardian_Chamber "Guardian Chamber" with description "This is a tall chamber with columns lining the door to the west. The exit is to the east.", before [; Go: if (noun == w_obj && samurai in Guardian_Chamber) "The samurai won't let you."; ], w_to Jeweled_Room, e_to West_Path; Prop chamber "tall chamber" Guardian_Chamber with name 'tall' 'chamber'; Prop columns "columns" Guardian_Chamber with name 'columns'; Prop the_door "door" Guardian_Chamber with name 'door'; Object samurai "samurai" Guardian_Chamber with name 'samurai', before [; Answer: "He seems to be muttering something about sushi."; ], life [; Give: if (noun == sushi) { remove samurai; remove sushi; "He says something in thanks, and begins to eat as he walks away."; } else "He politely refuses your gift."; ], has animate male; Object Jeweled_Room "Jeweled Room" with description [; print "This is an ornately decorated room with absurdly large and tacky jewels plastered to the wall.^"; if (cage in Jeweled_Room) print "In the center of the room is a diamond cage. "; "There is an exit to the east."; ], e_to Guardian_Chamber; Prop jewels "jewels" Jeweled_Room with name 'large' 'tacky' 'jewels'; Prop the_wall "wall" Jeweled_Room with name 'wall'; Object cage "diamond cage" Jeweled_Room with description "The cage has a crystal-shaped space on it.", name 'diamond' 'cage', capacity 1, before [; Unlock: if (second == crystal) { move wings to Jeweled_Room; remove crystal; remove cage; remove space; "There is a flash of light, and the cage opens, revealing...^ The Diamond Wings of Destiny!!^ The cage and crystal suddenly vanish, leaving the wings."; } else "The cage is magically protected."; Open: if (crystal in player) { move wings to Jeweled_Room; remove crystal; remove cage; remove space; "There is a flash of light, and the cage opens, revealing...^ The Diamond Wings of Destiny!!^ The cage and crystal suddenly vanish, leaving the wings."; } else "The cage is magically protected."; ], has container openable locked scenery; Object space "crystal-shaped space" Jeweled_Room with name 'space', before [; Receive: if (noun == crystal) { move wings to Jeweled_Room; remove crystal; remove cage; remove space; "There is a flash of light, and the cage opens, revealing...^ The Diamond Wings of Destiny!!^ The cage and crystal suddenly vanish, leaving the wings."; } else "It won't fit."; ], capacity 1, has container scenery open; Object wings "pair of diamond wings" cage with description "These are the storied Diamond Wings of Destiny.", name 'pair' 'diamond' 'wings' 'destiny', has clothing; Object Ledge "Ledge" with description "This is a ledge that towers above an abyss. There is a fog below, but you can see a faint light.", e_to Cold_Passage, d_to "Suicide is not the answer.", before [; Jump: deadflag = 1; "This was not a good place to try jumping."; Fly: if (wings notin player || wings hasnt worn) return false; score = score + 25; deadflag = 2; "You glide to the bottom to land in the middle of a group of Tamatis.^ They look at you and say, ~You have found the ancient Diamond Wings^ of Destiny! But we cannot find our orange. Can you help us again?~^^ And so, a new quest begins...^^ -- THE END --^^ Watch for...^^ OMNIQUEST II:^ The Search for the Purple Orange^^ COMING SOON FROM POP!"; ]; Prop the_ledge "ledge" Ledge with name 'ledge'; Prop abyss "abyss" Ledge with name 'abyss'; Prop fog "fog" Ledge with name 'fog'; Prop faint_light "faint light" Ledge with name 'faint' 'light'; Object sushi "sushi" ether with name 'sushi', before [; Eat: "The sushi is good, but you never did acquire a taste for it."; ], has pluralname edible; Object long_time with time_left, time_out "Pardon me, but aren't you taking a long time?"; ! ! Entry points and grammar ! [ Initialise; notify_mode = 0; location=Large_Clearing; StartTimer(long_time,400); "OMNIQuest^A POP Release^Parser Version 1.0^POP RULES!!^^ There's nothing to do, and you're sort of tired, so you lay on your bed and think philosophical thoughts.^ (meaning of life, end of the world, etc.) As you philosophize, you begin to doze...^^ You wake up with a horrible headache. As you glance around, you realize that you are not in Kansas anymore.^ You attempt to gain some bearing as to where you are...^^"; ]; [ DarkToDark; "Walking around in the dark is unsafe."; ]; [ PrintRank; print ", which gives you the rank of "; switch (score) { 50: "omniscient adventurer."; ! Finish the game with all tasks completed 45: "excellent adventurer."; ! Finish the game without either the worm or the sushi 40: "better than average adventurer."; ! Finish the game without the worm or the sushi (killing the samurai instead) 25: "excellent adventurer."; ! Make sushi 20: "better than average adventurer."; ! Get the worm / rod 15: "average adventurer."; ! Get the worm / rod 10: "definitely not brain-dead adventurer."; ! Get into the cylindrical room 5: "possibly not brain-dead adventurer."; ! Get the snorkel default: "brain-dead adventurer."; } ]; [ VersionSub; "OMNIQuest^ A POP Release^ Parser Version 1.0^ POP Rules!^^ Members of POP are Geomancer, Bo,^ and our newest member Parsec. Program^ and parser logic by Geomancer. Game^ theme and cursor by Parsec. OMNIQuest^ is a POP release and can be copied^ infinitely, as long as we are given^ credit.^ Later,^ Geomancer!^ PARSEC^ >>BO<<^^ Original for Commodore Basic V2 written c. 1988^ by Chris Barden and Chris Ethridge^ Adapted to Inform by Chris Barden^ Release 2"; ]; ![ TalkSub; ! if (noun == samurai) "He seems to be muttering something about sushi."; ! else "It's not very social."; !]; [ PlaySub; if (noun == organ) { if (OrganPlayed == 0) { give Cold_Passage ~visited; give Slimy_Passageway ~visited; give Twisting_Passageway ~visited; move vapors to Cold_Passage; move fragments to Cold_Passage; move rubble to Slimy_Passageway; move other_rubble to Twisting_Passageway; } OrganPlayed = 1; "The quiet of the cave is shattered by the sound of a non-musician playing the organ."; } else "That requires more creativity than I can muster."; ]; [ FlySub; if (wings in player && wings has worn) "You flitter about in the confined space, but it's a bit too small to be much fun."; else "How are you going to do that, exactly? Are you wearing wings or something?"; ]; [ ScreamSub; "Arrrrrrrrrrrgggggggggghhhhhhhhh!!!!"; ]; [ HelpSub; if (player in Large_Clearing) "You might try examining the tree."; if (player in Cylindrical_Room) "You might try pulling on the torch."; if (player in Cold_Passage) "Some loud tones might shatter the ice."; "I cannot help you at this time."; ]; [ FishSub; if (rod in player) "You can't use the fishing rod here."; else "With your bare hands? I think not."; ]; [ MakeSub; "I'm not sure how to make that."; ]; [ MakeSushiSub; if (rice in ether) "You can't."; if (fish in player && rice in player) { remove fish; remove rice; move sushi to player; score = score + 5; "You're not Julia Child, but it'll do."; } else "Sounds like a good idea. Too bad you don't have the necessary ingredients..."; ]; [ FootnoteSub; "Footnote? What footnote?"; ]; [ UseSub; "I'm not sure how to use ", (the) noun, "."; ]; [ BatmanSub; "I'm Batman."; ]; [ GrueSub; "Wrong game."; ]; [ GeomancerSub; "What about that awesome dude?"; ]; [ GeomancerRulesSub; "Tell me something I don't know..."; ]; [ GeomancerSucksSub; "No, that's PARSEC."; ]; [ GeomancerBedSub; "And how would YOU know?!?"; ]; [ POPSub; "I agree."; ]; [ PlayTheGameSub; "Stop talking to me and PLAY THE GAME!!"; ]; [ GoodQuestionSub; "Good question."; ]; Include "Grammar"; Extend only 'light' first * switchable -> SwitchOn; Extend only 'pull' * 'on' noun -> Pull; Extend only 'read' * noun -> Consult; Extend only 'speak' * 'to' noun -> Answer; Verb 'ex' * noun -> Examine; Verb 'lift' * noun -> Open; Verb 'make' * 'sushi' -> MakeSushi * topic -> Make; Verb 'fish' * -> Fish; Verb 'bait' * -> Fish * noun -> Fish; Verb 'talk' * 'to' noun -> Answer; Verb 'play' * -> Jump * 'with' noun -> Play * noun -> Play; Verb 'fly' * -> Fly; Verb 'scream' * -> Scream; Verb 'yell' * -> Scream; Verb 'help' * -> Help; Verb 'hint' * -> Help; Verb 'footnote' * -> Footnote * topic -> Footnote; Verb 'use' * 'shovel' -> Dig * 'rod' -> Fish * noun -> Use; Verb 'geomancer' * -> Geomancer * 'is' 'cool'/'great'/'awesome' -> GeomancerRules * 'is' 'great'/'awesome' 'in' 'bed' -> GeomancerBed * topic -> GeomancerSucks; Verb 'cpr' * -> POP; Verb 'cprpop' * -> POP; Verb 'pop' * -> POP; Verb 'popcpr' * -> POP; Verb 'what' * 'are' 'you' -> Batman * 'is' 'a' 'grue' -> Grue * topic -> GoodQuestion; Verb 'who' * 'are' 'you' -> Batman * 'am' 'i' -> PlayTheGame; Verb 'you' * topic -> PlayTheGame;