| !--------------------------------------------------------------------------- | |
| ! | |
| ! HUGO ZORK | |
| ! A Hugo Port of Infocom's Zork I | |
| ! Zork I is copyright by Activision and is used without permission | |
| ! Source code written by John Menichelli | |
| ! | |
| ! Modified for Hugo v2.4, v2.5 | |
| ! by K. Tessman | |
| !--------------------------------------------------------------------------- | |
| #version 2.5 ! KT | |
| ! #set DEBUG ! include HugoFix library and grammar | |
| #set VERBSTUBS ! include verb stub routines | |
| #set USE_VEHICLES ! from OBJLIB.H | |
| #set USE_ATTACHABLES ! | |
| #set NO_AUX_MATH ! don't need advanced math routines | |
| #switches -ls ! print statistics to HZ.LST | |
| !---------------------------------------------------------------------------- | |
| ! NEW ACTION VERBS | |
| !---------------------------------------------------------------------------- | |
| verb "board" | |
| * (magic_boat) DoEnter | |
| verb "launch" | |
| * DoLaunch | |
| verb "land" | |
| * DoLand | |
| verb "count" | |
| * DoVague | |
| * object DoCount | |
| verb "fly" | |
| * DoVague | |
| * object DoFly | |
| verb "ulysses", "odysseus" | |
| * DoSailor | |
| verb "lift" | |
| * DoVague | |
| * object DoLift | |
| verb "jump" | |
| * DoJump | |
| verb "turn" "flip" | |
| * DoVague | |
| * object DoTurn | |
| * object "with" xobject DoTurn | |
| verb "find" | |
| * DoVague | |
| * object DoFind | |
| verb "raise", "lift" | |
| * DoVague | |
| * object DoRaise | |
| verb "lower" | |
| * DoVague | |
| * object DoLower | |
| verb "ring" | |
| * DoVague | |
| * held DoRing | |
| verb "burn", "light", "incinerate" | |
| * DoVague | |
| * object DoBurn | |
| * object "with" xobject DoBurn | |
| * object "with" held DoBurn | |
| verb "extinguish" "douse" | |
| * DoVague | |
| * object DoExtinguish | |
| verb "push", "shove" | |
| * DoVague | |
| * object "with" xobject DoPushWith | |
| * "on" object DoPush | |
| * object DoPush | |
| verb "pump" "inflate" | |
| * DoVague | |
| * "up" object "with" xobject DoPump | |
| * object "with" xobject DoPump | |
| * "up" object DoPump | |
| * object DoPump | |
| verb "deflate" | |
| * DoVague | |
| * object DoDeflate | |
| verb "poke" "puncture" | |
| * DoVague | |
| * object "with" xobject DoPoke | |
| * object DoPoke | |
| verb "patch" "repair" "glue" | |
| * DoVague | |
| * object "with" xobject DoPatch | |
| * object DoPatch | |
| verb "wind" | |
| * "up" DoVague | |
| * DoVague | |
| * "up" object DoWind | |
| * object DoWind | |
| verb "dig", "burrow" | |
| * DoVague | |
| * "in"/"into" object DoDig | |
| * object DoDig | |
| * "in"/"into" object "with" xobject DoDig | |
| * object "with" xobject DoDig | |
| verb "throw", "hurl", "toss" | |
| * held "in"/"into" xobject DoThrowIn | |
| * DoVague | |
| * held DoThrowAt | |
| * held "at" xobject DoThrowAt | |
| verb "go", "walk" | |
| * "around" DoWalkAround | |
| * "around" object DoWalkAround | |
| * "on" object DoWalkOn | |
| * "to"/"in"/"into"/"inside"/"through" object DoEnter | |
| * "out" object DoGo | |
| * "out"/"outside" DoExit | |
| * object DoGo | |
| verb "cross" | |
| * DoVague | |
| * object DoWalkOn | |
| verb "kill", "murder", "fight" | |
| * DoVague | |
| * object DoHit | |
| * object "with" held DoHit | |
| verb "diagnose" | |
| * DoDiagnose | |
| verb "read" "skim" "peruse" | |
| * DoVague | |
| * "from" readable DoRead | |
| * readable DoRead | |
| verb "squeeze" | |
| * DoVague | |
| * object DoSqueeze | |
| verb "echo" | |
| * DoEcho | |
| verb "treasure" | |
| * DoTreasure | |
| verb "temple" | |
| * DoTemple | |
| verb "pray" | |
| * DoPray | |
| verb "zork" | |
| * DoZork | |
| verb "xyzzy", "plugh" | |
| * DoFool | |
| verb "chomp", "barf" | |
| * DoChomp | |
| verb "win" | |
| * DoWin | |
| verb "repent" | |
| * DoRepent | |
| verb "bug" | |
| * DoBug | |
| verb "mumble", "sigh" | |
| * DoMumble | |
| verb "damn" "fuck" "shit" | |
| * DoCurse | |
| * object DoCurse | |
| verb "frobozz" | |
| * DoFrobozz | |
| verb "smell", "sniff", "inhale", "breathe" | |
| * DoVague | |
| * object DoSmell | |
| verb "molest" "rape" | |
| * DoVague | |
| * object DoMolest | |
| verb "fill" | |
| * DoVague | |
| * object DoFill | |
| verb "pour" "spill" | |
| * DoVague | |
| * object DoPour | |
| * object "on" xobject DoPour | |
| verb "touch", "feel", "rub" | |
| * DoVague | |
| * object DoTouch | |
| verb "shake" | |
| * DoVague | |
| * object DoShake | |
| verb "what" | |
| * "is" object DoLook | |
| verb "oil" "grease" "lubricate" | |
| * DoVague | |
| * object DoOil | |
| * object "with" xobject DoOil | |
| !---------------------------------------------------------------------------- | |
| ! NEW NON-ACTION VERB | |
| !---------------------------------------------------------------------------- | |
| xverb "help" | |
| * DoHelp | |
| * "me" DoHelp | |
| #include "verblib.g" ! KT ! normal game grammar | |
| !---------------------------------------------------------------------------- | |
| #ifset PRECOMPILED_LIBRARY | |
| #link "hugolib.hlb" | |
| #endif | |
| #ifclear PRECOMPILED_LIBRARY | |
| #include "hugolib.h" ! standard library routines | |
| #endif | |
| !---------------------------------------------------------------------------- | |
| !---------------------------------------------------------------------------- | |
| ! NEW GLOBALS, PROPERTIES AND ATTRIBUTES | |
| !---------------------------------------------------------------------------- | |
| global reservoir_status | |
| global reservoir_level | |
| global maint_room_level | |
| global rank | |
| global match_count | |
| global ceremony_1 | |
| global ceremony_2 | |
| global candle_life | |
| global hole_depth | |
| global wound_level | |
| global turns_to_heal | |
| global current_hit_points | |
| global max_hit_points | |
| global lives_used | |
| global current_threat_level | |
| global old_threat_level | |
| global dark_warning | |
| global combat_result | |
| global damage | |
| global old_thief_location | |
| property no_weapon | |
| property knocked_out | |
| property take_damage | |
| property hit_points | |
| property take_points ! for picking up treasure | |
| property deposit_points ! for putting the treasure into the trophy case | |
| property room_points ! for entering certain rooms | |
| property threat_level ! 0 = Sword not glowing | |
| ! 1 = Sword is glowing faintly | |
| ! 2 = Sword is glowing brightly | |
| attribute unconscious | |
| attribute stunned | |
| attribute disarmed | |
| attribute burnable | |
| attribute found | |
| attribute deposited | |
| attribute valuable | |
| attribute room_scored | |
| attribute heat_source | |
| attribute broken | |
| attribute thief_free | |
| attribute water_location | |
| attribute ghost | |
| attribute hostile | |
| attribute weapon | |
| attribute sharp | |
| !---------------------------------------------------------------------------- | |
| ! INIT | |
| !---------------------------------------------------------------------------- | |
| routine init | |
| { | |
| MAX_SCORE = 350 | |
| ranking[0] = "Beginner" | |
| ranking[1] = "Amateur Adventurer" | |
| ranking[2] = "Novice Adventurer" | |
| ranking[3] = "Junior Adventurer" | |
| ranking[4] = "Adventurer" | |
| ranking[5] = "Master" | |
| ranking[6] = "Wizard" | |
| ranking[7] = "Master Adventurer" | |
| counter = -1 ! 1 turn before turn 0 | |
| STATUSTYPE = 1 ! score/turns | |
| TEXTCOLOR = WHITE | |
| BGCOLOR = BLUE | |
| SL_TEXTCOLOR = BLUE | |
| SL_BGCOLOR = WHITE | |
| FORMAT = NOINDENT_F + LIST_F | |
| AFTER_PERIOD = " " | |
| DEFAULT_FONT = PROP_ON ! KT | |
| Font(DEFAULT_FONT) | |
| prompt = ">" | |
| color TEXTCOLOR, BGCOLOR | |
| cls | |
| "HUGO ZORK: The Great Underground Empire" | |
| "A Port of Infocom's Zork I to Hugo" | |
| "Beta Release 1" | |
| "Hugo Zork written by John Menichelli" | |
| "\"Zork I\" is copyright by Activision and is used without permission" | |
| print BANNER | |
| Font(BOLD_ON) | |
| "(New players should type \"help\")" | |
| Font(BOLD_OFF) | |
| player = you | |
| location = west_of_house | |
| old_location = location | |
| move player to location ! initialize player location | |
| FindLight(location) ! whether the player can see | |
| DescribePlace(location) ! the appropriate description | |
| location is visited | |
| CalculateHolding(player) ! total size of player contents | |
| Activate(ChirpingBird) ! Displays "chirping bird" messages | |
| Activate(HealPlayer) ! Heals player if injured | |
| Activate(ThiefDaemon) ! Moves the thief around | |
| reservoir_status = 1 ! 1 = reservoir full | |
| ! 2 = reservoir drained | |
| ! 3 = reservoir draining | |
| ! 4 = reservoir filling | |
| reservoir_level = 9 ! reservoir is full | |
| maint_room_level = 0 ! level of water in maintenance room | |
| match_count = 5 ! For the matches in the Dam Lobby | |
| score = 0 | |
| candle_life = 75 ! For the candles in the Altar Room | |
| hole_depth = 0 ! At Sandy Cave | |
| wound_level = 0 ! How wounded the character is | |
| turns_to_heal = 0 ! How long it takes for the player | |
| ! to completely heal | |
| current_hit_points = 2 | |
| max_hit_points = 2 | |
| lives_used = 0 ! Out of three | |
| current_threat_level = 0 ! For the "glowing sword" messages | |
| old_threat_level = 0 | |
| rank = 0 ! For scoring | |
| dark_warning = 0 ! For the DarkWarning routine | |
| } | |
| #ifset PRECOMPILED_LIBRARY | |
| replace main | |
| { | |
| #endif | |
| #ifclear PRECOMPILED_LIBRARY | |
| routine main | |
| { | |
| #endif | |
| counter++ | |
| PrintStatusLine | |
| run location.each_turn | |
| runevents | |
| RunScripts | |
| if speaking not in location ! in case the character being spoken | |
| speaking = 0 ! to leaves | |
| } | |
| player_character you "you" | |
| { | |
| long_desc | |
| { | |
| "That's difficult unless your eyes are prehensile." | |
| } | |
| before | |
| { | |
| actor | |
| { | |
| if not FindLight(location) | |
| { | |
| if (verbroutine = &DoGet or | |
| verbroutine = &DoTouch) and | |
| not Contains(player, object) | |
| { | |
| "It's too dark to see!" | |
| return true | |
| } | |
| } | |
| if player is not ghost | |
| { | |
| return false | |
| } | |
| elseif verbroutine = &DoScore | |
| { | |
| "You're dead! How can you think of your | |
| score?" | |
| return true | |
| } | |
| elseif verbroutine = &DoEat, &DoDrink, &DoOpen, | |
| &DoClose, &DoTurn, &DoBurn, &DoTouch, | |
| &DoExtinguish | |
| { | |
| "Even such an action is beyond your | |
| capabilities." | |
| return true | |
| } | |
| elseif verbroutine = &DoPump, &DoDeflate, &DoTie, | |
| &DoUntie, &DoMove, &DoPull | |
| { | |
| "Even such an action is beyond your | |
| capabilities." | |
| return true | |
| } | |
| elseif verbroutine = &DoSwitchOn | |
| { | |
| "You need no light to guide you." | |
| return true | |
| } | |
| elseif verbroutine = &DoInventory | |
| { | |
| "You have no possessions." | |
| return true | |
| } | |
| elseif verbroutine = &DoDiagnose | |
| { | |
| "You are dead." | |
| return true | |
| } | |
| elseif verbroutine = &DoLookAround, &DoLookIn, | |
| &DoLookThrough, &DoLookUnder | |
| { | |
| if location is not light | |
| { | |
| "Although there is no light, the room | |
| seems dimly illuminated." | |
| return false | |
| } | |
| else | |
| { | |
| "The room looks strange and unearthly"; | |
| if children(location) > 1 | |
| { | |
| " and objects appear | |
| indistinct." | |
| } | |
| else | |
| { | |
| "." | |
| } | |
| return false | |
| } | |
| } | |
| elseif verbroutine = &DoPray | |
| { | |
| if location = altar_room | |
| { | |
| "From the distance the sound of a | |
| lone trumpet is heard. The room | |
| becomes very bright and you feel | |
| disembodied. In a moment, the brightness | |
| fades and you find yourself rising as if | |
| from a long sleep, deep in the woods. In | |
| the distance you can faintly hear a | |
| songbird and the sounds of the forest." | |
| player is not ghost | |
| player is not light | |
| trap_door is special | |
| Activate(ThiefDaemon) | |
| MovePlayer(forest1) | |
| } | |
| else | |
| { | |
| "Your prayers are not heard." | |
| return true | |
| } | |
| } | |
| elseif verbroutine = &DoHit | |
| { | |
| "All such attacks are vain in your | |
| condition." | |
| return true | |
| } | |
| elseif verbroutine = &DoGet, &DoPush | |
| { | |
| "Your hand passes through the object." | |
| return true | |
| } | |
| elseif verbroutine = &DoEnter | |
| { | |
| "You cannot enter in your condition." | |
| return true | |
| } | |
| elseif verbroutine = &DoWait | |
| { | |
| "Might as well. You've got an eternity." | |
| return true | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoFind | |
| { | |
| "You're around here somewhere..." | |
| } | |
| object DoGet | |
| { | |
| "How romantic!" | |
| } | |
| object DoEat | |
| { | |
| "Auto-cannibalism is not the answer." | |
| } | |
| object DoHit | |
| { | |
| "If you insist.... Poof, you're dead!" | |
| NotDeadYet | |
| } | |
| } | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! NEW ROOM TYPES | |
| !---------------------------------------------------------------------------- | |
| room DarkRoom | |
| { | |
| is not light, not thief_free | |
| room_points 0 | |
| threat_level 0 | |
| after | |
| { | |
| AnyVerb(location) | |
| { | |
| old_threat_level = current_threat_level | |
| current_threat_level = self.threat_level | |
| if current_threat_level ~= old_threat_level and | |
| Contains(player, sword) | |
| { | |
| "Your sword "; | |
| select current_threat_level | |
| case 0 | |
| { | |
| "is no longer glowing." | |
| } | |
| case 1 | |
| { | |
| "is glowing with a faint blue glow." | |
| } | |
| case 2 | |
| { | |
| "has begun to glow very brightly." | |
| } | |
| } | |
| if self is not room_scored | |
| { | |
| score += self.room_points | |
| self is room_scored | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| room LightRoom | |
| { | |
| is light, not thief_free | |
| room_points 0 | |
| threat_level 0 | |
| after | |
| { | |
| AnyVerb(location) | |
| { | |
| old_threat_level = current_threat_level | |
| current_threat_level = self.threat_level | |
| if current_threat_level ~= old_threat_level and | |
| Contains(player, sword) | |
| { | |
| "Your sword "; | |
| select current_threat_level | |
| case 0 | |
| { | |
| "is no longer glowing." | |
| } | |
| case 1 | |
| { | |
| "is glowing with a faint blue glow." | |
| } | |
| case 2 | |
| { | |
| "has begun to glow very brightly." | |
| } | |
| } | |
| if self is not room_scored | |
| { | |
| score += self.room_points | |
| self is room_scored | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| room MazeRoom | |
| { | |
| is not light, not thief_free | |
| threat_level 0 | |
| long_desc | |
| { | |
| "This is part of a maze of twisty little passages, | |
| all alike." | |
| } | |
| after | |
| { | |
| AnyVerb(location) | |
| { | |
| old_threat_level = current_threat_level | |
| current_threat_level = self.threat_level | |
| if current_threat_level ~= old_threat_level and | |
| Contains(player, sword) | |
| { | |
| "Your sword "; | |
| select current_threat_level | |
| case 0 | |
| { | |
| "is no longer glowing." | |
| } | |
| case 1 | |
| { | |
| "is glowing with a faint blue glow." | |
| } | |
| case 2 | |
| { | |
| "has begun to glow very brightly." | |
| } | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| room Dead_End_Room | |
| { | |
| is not light, not thief_free | |
| long_desc | |
| { | |
| "You have come to a dead end in the maze." | |
| } | |
| } | |
| room CoalRoom | |
| { | |
| is not light, thief_free | |
| long_desc | |
| { | |
| "This is a non-descript part of a coal mine." | |
| } | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! NEW CLASSES | |
| !---------------------------------------------------------------------------- | |
| class treasure | |
| { | |
| take_points 10 ! points awarded when item is picked up | |
| deposit_points 10 ! points awarded when item is put into | |
| ! trophy case | |
| before | |
| { | |
| object DoGet | |
| { | |
| if self is not found | |
| { | |
| score += self.take_points | |
| self is found | |
| } | |
| return false | |
| } | |
| } | |
| is valuable | |
| } | |
| class boat | |
| { | |
| type vehicle | |
| prep "in", "out" | |
| vehicle_move true | |
| is enterable, container, open, not static, burnable | |
| } | |
| class creature | |
| { | |
| type character | |
| pronouns "he", "him", "his", "himself" | |
| capacity 50 | |
| holding 0 | |
| is living, transparent, static, unfriendly | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! FUSES AND DAEMONS | |
| !---------------------------------------------------------------------------- | |
| daemon LampDaemon | |
| {} | |
| event LampDaemon | |
| { | |
| local t | |
| self = lamp | |
| self.misc-- | |
| t = self.misc | |
| if t <= 0 | |
| { | |
| self.misc = 0 | |
| t = 0 | |
| self is not switchedon | |
| self is not light | |
| } | |
| if FindObject(self, location) | |
| { | |
| select t | |
| case 195 | |
| { | |
| event_flag = true | |
| "The lamp appears a bit dimmer." | |
| } | |
| case 95 | |
| { | |
| event_flag = true | |
| "The lamp is definitely dimmer now." | |
| } | |
| case 25 | |
| { | |
| event_flag = true | |
| "The lamp is nearly out." | |
| } | |
| case 0 | |
| { | |
| event_flag = true | |
| "You'd better have more light than from the brass | |
| lantern." | |
| Deactivate(LampDaemon) | |
| self is not switchedon | |
| } | |
| } | |
| } | |
| daemon ChirpingBird | |
| {} | |
| event ChirpingBird | |
| { | |
| if location = forest_path or | |
| location = forest1 or | |
| location = forest2 or | |
| location = forest3 or | |
| location = forest4 or | |
| location = up_a_tree | |
| { | |
| if random(10) <= 2 | |
| { | |
| event_flag = true | |
| "You hear in the distance the chirping of a | |
| song bird." | |
| } | |
| } | |
| } | |
| daemon FillDam | |
| {} | |
| event FillDam | |
| { | |
| reservoir_level++ | |
| if reservoir_level < 9 | |
| { | |
| reservoir_status = 4 ! reservoir is filling | |
| loud_room is special ! It's quiet | |
| if location = reservoir and | |
| parent(player) ~= magic_boat | |
| { | |
| event_flag = true | |
| "You notice that the water level here is rising | |
| rapidly. The currents are also becoming stronger. | |
| Staying here seems quite perilous!" | |
| } | |
| } | |
| elseif reservoir_level = 9 | |
| { | |
| reservoir_status = 1 ! reservoir is full | |
| Deactivate(FillDam) | |
| remove trunk_of_jewels | |
| reservoir is water_location | |
| loud_room is not special | |
| if location = reservoir_south | |
| { | |
| event_flag = true | |
| "You notice that the water level has risen to the | |
| point that it is impossible to cross." | |
| } | |
| elseif location = loud_room | |
| { | |
| event_flag = true | |
| "All of a sudden, an alarmingly loud roaring sound | |
| fills the room. Filled with fear, you scramble | |
| away." | |
| DoTooLoud | |
| } | |
| elseif location = deep_canyon | |
| { | |
| event_flag = true | |
| "A sound, like that of flowing water, starts to come | |
| from below." | |
| } | |
| elseif location = reservoir and | |
| parent(player) = magic_boat | |
| { | |
| event_flag = true | |
| "The boat lifts gently out of the mud and is now | |
| floating on the reservoir." | |
| } | |
| elseif location = reservoir | |
| { | |
| event_flag = true | |
| "You are lifted up by the rising river! You try to | |
| swim, but the currents are too strong. You come | |
| closer, closer to the awesome structure of Flood | |
| Control Dam #3. The dam beckons to you. The roar of | |
| the water nearly deafens you, but you remain | |
| conscious as you tumble over the dam toward your | |
| certain doom among the rocks at its base." | |
| NotDeadYet | |
| } | |
| } | |
| } | |
| daemon EmptyDam | |
| {} | |
| event EmptyDam | |
| { | |
| reservoir_level-- | |
| if reservoir_level > 0 | |
| { | |
| reservoir_status = 3 ! reservoir is draining | |
| loud_room is not special ! It's loud | |
| } | |
| elseif reservoir_level = 0 | |
| { | |
| reservoir_status = 2 ! reservoir is drained | |
| reservoir is not water_location | |
| Deactivate(EmptyDam) | |
| move trunk_of_jewels to reservoir | |
| if location = reservoir_south | |
| { | |
| event_flag = true | |
| "The water level is now quite low here and you could | |
| easily cross over to the other side." | |
| } | |
| elseif location = deep_canyon | |
| { | |
| event_flag = true | |
| "The roar of rushing water is quieter now." | |
| } | |
| elseif location = reservoir and | |
| parent(player) = magic_boat | |
| { | |
| event_flag = true | |
| "The water level has dropped to the point at which | |
| the boat can no longer stay afloat. It sinks into | |
| the mud." | |
| } | |
| } | |
| } | |
| daemon FillMaintRoom | |
| {} | |
| event FillMaintRoom | |
| { | |
| maint_room_level++ | |
| if location = maintenance_room and | |
| maint_room_level < 14 | |
| { | |
| event_flag = true | |
| "The water level here is now up to your "; | |
| select maint_room_level | |
| case 0, 1 | |
| "ankles." | |
| case 2, 3 | |
| "shin." | |
| case 4, 5 | |
| "knees." | |
| case 6, 7 | |
| "hips." | |
| case 8, 9 | |
| "waist." | |
| case 10, 11 | |
| "chest." | |
| case 12, 13 | |
| "neck." | |
| } | |
| if maint_room_level = 14 | |
| { | |
| Deactivate(FillMaintRoom) | |
| } | |
| if location = maintenance_room and | |
| maint_room_level = 14 | |
| { | |
| event_flag = true | |
| "I'm afraid you have done drowned yourself." | |
| NotDeadYet | |
| } | |
| } | |
| fuse HotBell ! When the brass bell is rung, it takes 20 turns for it | |
| {} ! to cool down. | |
| event HotBell | |
| { | |
| if not self.tick | |
| { | |
| remove red_hot_bell | |
| move brass_bell to entrance_to_hades | |
| if red_hot_bell in location | |
| { | |
| event_flag = true | |
| "The bell appears to have cooled down." | |
| } | |
| } | |
| } | |
| fuse Match | |
| {} | |
| event Match | |
| { | |
| if not self.tick | |
| { | |
| event_flag = true | |
| "The match has gone out." | |
| matchbook is not light | |
| matchbook is not heat_source | |
| } | |
| } | |
| fuse Ceremony | |
| {} | |
| event Ceremony | |
| { | |
| if not self.tick | |
| { | |
| if player in entrance_to_hades | |
| { | |
| event_flag = true | |
| "\nThe tension of this ceremony is broken, and the | |
| wraiths, amused but shaken at your clumsy attempt, | |
| resume their hideous jeering." | |
| } | |
| ceremony_1 = 0 ! resets the ceremony | |
| ceremony_2 = 0 | |
| } | |
| } | |
| daemon Candle | |
| {} | |
| event Candle | |
| { | |
| ! This only reduces candle life if the player is carrying | |
| ! lit candles or the lit candles are in the player's location | |
| if Contains(player, candles) or | |
| Contains(location, candles) | |
| { | |
| candle_life-- | |
| select candle_life | |
| case 35 | |
| { | |
| event_flag = true | |
| "The candles grow shorter." | |
| } | |
| case 15 | |
| { | |
| event_flag = true | |
| "The candles are becoming quite short." | |
| } | |
| case 5 | |
| { | |
| event_flag = true | |
| "The candles won't last long now." | |
| } | |
| case 0 | |
| { | |
| event_flag = true | |
| "You'd better have more light than from the | |
| pair of candles." | |
| candles is not light | |
| candles is not heat_source | |
| Deactivate(Candle) | |
| FindLight(location) | |
| } | |
| } | |
| } | |
| fuse RiverCurrent | |
| {} | |
| event RiverCurrent | |
| { | |
| if not self.tick | |
| { | |
| event_flag = true | |
| "The flow of the river carries you downstream." | |
| select location | |
| case river1 | |
| { | |
| move magic_boat to river2 | |
| location = river2 | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| Activate(RiverCurrent, 4) | |
| Break | |
| } | |
| case river2 | |
| { | |
| move magic_boat to river3 | |
| location = river3 | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| Activate(RiverCurrent, 3) | |
| Break | |
| } | |
| case river3 | |
| { | |
| move magic_boat to river4 | |
| location = river4 | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| Activate(RiverCurrent, 2) | |
| Break | |
| } | |
| case river4 | |
| { | |
| move magic_boat to river5 | |
| location = river5 | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| Activate(RiverCurrent, 1) | |
| Break | |
| } | |
| case river5 | |
| { | |
| "\nUnfortunately, the magic boat doesn't provide | |
| protection from the rocks and boulders one meets | |
| at the bottom of waterfalls. Including this one." | |
| Deactivate(RiverCurrent) | |
| NotDeadYet | |
| } | |
| } | |
| } | |
| daemon HealPlayer | |
| {} | |
| event HealPlayer | |
| { | |
| if player is stunned | |
| { | |
| player is not stunned | |
| } | |
| CalculateRank | |
| max_hit_points = (rank/2) + 2 | |
| if max_hit_points > current_hit_points and | |
| turns_to_heal = 0 | |
| { | |
| current_hit_points = max_hit_points | |
| } | |
| if turns_to_heal > 0 | |
| { | |
| turns_to_heal-- | |
| select turns_to_heal | |
| case 0 | |
| { | |
| wound_level = 0 | |
| current_hit_points = max_hit_points | |
| } | |
| case 30 | |
| { | |
| wound_level = 1 | |
| current_hit_points++ | |
| } | |
| case 60 | |
| { | |
| wound_level = 2 | |
| current_hit_points++ | |
| } | |
| case 90 | |
| { | |
| wound_level = 3 | |
| current_hit_points++ | |
| } | |
| case 120 | |
| { | |
| wound_level = 4 | |
| current_hit_points++ | |
| } | |
| } | |
| } | |
| ! This daemon moves the thief around the dungeon. It doesn't move the | |
| ! thief on a fixed track, since that would allow the player to catch up | |
| ! to him. | |
| daemon ThiefDaemon | |
| {} | |
| event ThiefDaemon | |
| { | |
| local a, b, c, d, i, j, dest, diff | |
| self = thief | |
| if self in location and | |
| self is hostile | |
| { | |
| if contains(player, sword) | |
| { | |
| "Your sword has begun to glow very brightly." | |
| } | |
| event_flag = true | |
| Jump ThiefAttacks | |
| } | |
| ! If the thief is hostile, skip this part | |
| ! The longer the game goes on, the more likely the thief will come | |
| ! to visit | |
| a = 350 - counter | |
| if a < 10 | |
| a = 10 | |
| b = random(a) | |
| if b = 1 and | |
| location is not thief_free | |
| { | |
| move self to location | |
| old_thief_location = location | |
| } | |
| else | |
| { | |
| do | |
| { | |
| a = random(45) | |
| select a | |
| case 1 | |
| dest = maze1 | |
| case 2 | |
| dest = maze2 | |
| case 3 | |
| dest = maze3 | |
| case 4 | |
| dest = maze4 | |
| case 5 | |
| dest = maze5 | |
| case 6 | |
| dest = maze6 | |
| case 7 | |
| dest = maze7 | |
| case 8 | |
| dest = maze8 | |
| case 9 | |
| dest = maze9 | |
| case 10 | |
| dest = maze10 | |
| case 11 | |
| dest = maze11 | |
| case 12 | |
| dest = maze12 | |
| case 13 | |
| dest = maze13 | |
| case 14 | |
| dest = maze14 | |
| case 15 | |
| dest = maze15 | |
| case 16 | |
| dest = dead_end1 | |
| case 17 | |
| dest = dead_end2 | |
| case 18 | |
| dest = dead_end3 | |
| case 19 | |
| dest = dead_end4 | |
| case 20 | |
| dest = east_west_passage | |
| case 21 | |
| dest = round_room | |
| case 22 | |
| dest = narrow_passage | |
| case 23 | |
| dest = mirror_south | |
| case 24 | |
| dest = winding_passage | |
| case 25 | |
| dest = cave | |
| case 26 | |
| dest = engravings_cave | |
| case 27 | |
| dest = damp_cave | |
| case 28 | |
| dest = north_south_passage | |
| case 29 | |
| dest = chasm | |
| case 30 | |
| dest = deep_canyon | |
| case 31 | |
| dest = reservoir_south | |
| case 32 | |
| dest = stream_view | |
| case 33 | |
| dest = reservoir_north | |
| case 34 | |
| dest = atlantis_room | |
| case 35 | |
| dest = cave2 | |
| case 36 | |
| dest = twisting_passage | |
| case 37 | |
| dest = mirror_north | |
| case 38 | |
| dest = cold_passage | |
| case 39 | |
| dest = slide_room | |
| case 40 | |
| dest = mine_entrance | |
| case 41 | |
| dest = squeaky_room | |
| case 42 | |
| dest = coal_mine1 | |
| case 43 | |
| dest = coal_mine2 | |
| case 44 | |
| dest = coal_mine3 | |
| case 45 | |
| dest = coal_mine4 | |
| } | |
| while old_thief_location = dest | |
| move self to dest | |
| old_thief_location = dest | |
| } | |
| if self not in location | |
| { | |
| for i in old_thief_location | |
| { | |
| if i is moved | |
| { | |
| c++ | |
| } | |
| } | |
| if c > 0 | |
| { | |
| while c > 0 | |
| { | |
| for i in old_thief_location | |
| { | |
| if i is moved | |
| { | |
| j = i | |
| } | |
| } | |
| move j to thiefs_bag | |
| c-- | |
| } | |
| } | |
| } | |
| elseif self in location and | |
| self is not hostile | |
| { | |
| ! Several options: take everything from the room, or from | |
| ! the player, both, take a light source, or take nothing. | |
| ! First, determine is the player and/or the room have | |
| ! anything in them | |
| for i in location | |
| { | |
| if i is valuable and | |
| i not in player | |
| { | |
| b++ | |
| } | |
| } | |
| for i in player | |
| { | |
| if i is valuable | |
| { | |
| c++ | |
| } | |
| } | |
| for i in player | |
| { | |
| if i is light | |
| { | |
| d++ | |
| } | |
| } | |
| ! Now choose the thief's action | |
| a = random(5) | |
| select a | |
| case 1 | |
| { | |
| Jump RobRoom | |
| } | |
| case 2 | |
| { | |
| Jump RobPlayer | |
| } | |
| case 3 | |
| { | |
| Jump RobBoth | |
| } | |
| case 4 | |
| { | |
| Jump RobLight | |
| } | |
| case 5 | |
| { | |
| Jump RobNothing | |
| } | |
| :RobRoom | |
| if b > 0 and ! Valuable item(s) in room (only) | |
| c = 0 | |
| { | |
| while b > 0 | |
| { | |
| for i in location | |
| { | |
| if i is not living and | |
| i is valuable | |
| { | |
| j = i | |
| } | |
| } | |
| move j to thiefs_bag | |
| b-- | |
| } | |
| "The thief just left, still carrying his large | |
| bag. You may not have noticed that he | |
| appropriated the valuables in the room." | |
| Jump ThiefEnd | |
| } | |
| else | |
| { | |
| Jump RobNothing | |
| } | |
| :RobPlayer | |
| if c > 0 and ! Valuable item(s) in player (only) | |
| b = 0 | |
| { | |
| while c > 0 | |
| { | |
| for i in player | |
| { | |
| if i is valuable | |
| { | |
| j = i | |
| } | |
| } | |
| move j to thiefs_bag | |
| c-- | |
| } | |
| "The thief just left, still carrying his large | |
| bag. You may not have noticed that he robbed you | |
| blind first." | |
| Jump ThiefEnd | |
| } | |
| else | |
| { | |
| Jump RobNothing | |
| } | |
| :RobBoth | |
| if c > 0 and ! Valuable item(s) in player and location | |
| b > 0 | |
| { | |
| c += b | |
| while c > 0 | |
| { | |
| for i in player | |
| { | |
| if i is valuable | |
| { | |
| j = i | |
| } | |
| } | |
| for i in location | |
| { | |
| if i is not living and | |
| i is valuable | |
| { | |
| j = i | |
| } | |
| } | |
| move j to thiefs_bag | |
| c-- | |
| } | |
| "A seedy-looking individual with a large bag | |
| just wandered through the room. On the way | |
| through, he quietly abstracted some valuables | |
| from the room and from your possession, | |
| mumbling something about \"Doing unto others | |
| before...\"" | |
| Jump ThiefEnd | |
| } | |
| else | |
| { | |
| Jump RobNothing | |
| } | |
| :RobLight | |
| if d > 0 | |
| { | |
| while d > 0 | |
| { | |
| for i in player | |
| { | |
| if i is light | |
| { | |
| j = i | |
| if j = lamp | |
| { | |
| Deactivate(LampDaemon) | |
| lamp is not switchedon | |
| lamp is not light | |
| } | |
| } | |
| } | |
| move j to thiefs_bag | |
| d-- | |
| } | |
| "The thief seems to have left you in the dark." | |
| Jump ThiefEnd | |
| } | |
| else | |
| { | |
| Jump RobNothing | |
| } | |
| :RobNothing | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "The thief, finding nothing of value, left disgusted." | |
| } | |
| case 2 | |
| { | |
| "Someone carrying a large bag is casually leaning | |
| against one of the walls here. He does not speak, | |
| but it is clear from his aspect that the bag will | |
| be taken only over his dead body." | |
| } | |
| :ThiefEnd | |
| return true | |
| } | |
| else | |
| { | |
| :ThiefAttacks | |
| if self is living and | |
| self is hostile and | |
| self in location and | |
| self is not unconscious and | |
| self is not stunned and | |
| self is not disarmed | |
| { | |
| CalculateRank | |
| diff = 6 - rank | |
| ResolveAttack(diff) | |
| select combat_result | |
| case 0 | |
| { | |
| a = random(4) | |
| select a | |
| case 1 | |
| { | |
| "The thief stabs nonchalantly with | |
| his stiletto and misses." | |
| } | |
| case 2 | |
| { | |
| "You dodge as the thief comes in low." | |
| } | |
| case 3 | |
| { | |
| "You parry a lightning thrust, and | |
| the thief salutes you with a grim nod." | |
| } | |
| case 4 | |
| { | |
| "The thief tries to sneak past your | |
| guard, but you twist away." | |
| } | |
| return true | |
| } | |
| case 1 | |
| { | |
| :Instead3 | |
| player is stunned | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "The butt of his stiletto cracks you | |
| on the skull, and you stagger back." | |
| } | |
| case 2 | |
| { | |
| "The thief rams the haft of his blade | |
| into your stomach, leaving you out of | |
| breath." | |
| } | |
| case 3 | |
| { | |
| "The thief attacks, and you fall back | |
| desperately." | |
| } | |
| return true | |
| } | |
| case 2 | |
| { | |
| if xobject and | |
| xobject is weapon and | |
| xobject in player | |
| { | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "A long, theatrical slash. | |
| You catch it on your "; | |
| print xobject.name; | |
| ", but the thief twists his | |
| knife, and the "; | |
| print xobject.name; | |
| " goes flying." | |
| } | |
| case 2 | |
| { | |
| "The thief neatly flips your "; | |
| print xobject.name; | |
| " out of your hands, and it | |
| drops to the floor." | |
| } | |
| case 3 | |
| { | |
| "You parry a low thrust, and | |
| your "; | |
| print xobject.name; | |
| " slips out of your hand." | |
| } | |
| move xobject to location | |
| } | |
| elseif object and | |
| object is weapon and | |
| object in player | |
| { | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "A long, theatrical slash. | |
| You catch it on your "; | |
| print object.name; | |
| ", but the thief twists his | |
| knife, and the "; | |
| print object.name; | |
| " goes flying." | |
| } | |
| case 2 | |
| { | |
| "The thief neatly flips your "; | |
| print object.name; | |
| " out of your hands, and it | |
| drops to the floor." | |
| } | |
| case 3 | |
| { | |
| "You parry a low thrust, and | |
| your "; | |
| print object.name; | |
| " slips out of your hand." | |
| } | |
| move object to location | |
| } | |
| else | |
| { | |
| Jump Instead3 | |
| } | |
| } | |
| case 3 | |
| { | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "Shifting in the midst of a thrust, | |
| the thief knocks you unconscious | |
| with the haft of his stiletto." | |
| } | |
| case 2 | |
| { | |
| "The thief knocks you out." | |
| } | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "The thief, forgetting his | |
| essentially genteel upbringing, cuts | |
| your throat." | |
| } | |
| case 2 | |
| { | |
| "The thief, a pragmatist, dispatches | |
| you as a threat to his livelihood." | |
| } | |
| NotDeadYet | |
| } | |
| case 4 | |
| { | |
| current_hit_points-- | |
| turns_to_heal += 30 | |
| if current_hit_points <= 0 | |
| { | |
| Jump PlayerDead3 | |
| } | |
| else | |
| { | |
| a = random(4) | |
| select a | |
| case 1 | |
| { | |
| "A quick thrust pinks your | |
| left arm, and blood starts | |
| to trickle down." | |
| } | |
| case 2 | |
| { | |
| "The thief draws blood, | |
| raking his stiletto across | |
| your arm." | |
| } | |
| case 3 | |
| { | |
| "The stiletto flashes faster | |
| than you can follow, and | |
| blood wells from your leg." | |
| } | |
| case 4 | |
| { | |
| "The thief slowly approaches, | |
| strikes like a snake, and | |
| leaves you wounded." | |
| } | |
| return true | |
| } | |
| } | |
| case 5 | |
| { | |
| current_hit_points -= 2 | |
| turns_to_heal += 60 | |
| if current_hit_points <= 0 | |
| { | |
| Jump PlayerDead3 | |
| } | |
| else | |
| { | |
| a = random(4) | |
| select a | |
| case 1 | |
| { | |
| "The thief strikes like a snake! | |
| The resulting wound is serious." | |
| } | |
| case 2 | |
| { | |
| "The thief stabs a deep cut | |
| in your upper arm." | |
| } | |
| case 3 | |
| { | |
| "The stiletto touches your | |
| forehead, and the blood | |
| obscures your vision." | |
| } | |
| case 4 | |
| { | |
| "The thief strikes at your | |
| wrist, and suddenly your grip | |
| is slippery with blood." | |
| } | |
| return true | |
| } | |
| } | |
| case 6 | |
| { | |
| :PlayerDead3 | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "Finishing you off, the thief inserts | |
| his blade into your heart." | |
| } | |
| case 2 | |
| { | |
| "The thief comes in from the side, | |
| feints, and inserts the blade into | |
| your ribs." | |
| } | |
| case 3 | |
| { | |
| "The thief bows formally, raises | |
| his stiletto, and with a wry grin, | |
| ends the battle and your life." | |
| } | |
| NotDeadYet | |
| } | |
| } | |
| elseif self is living and | |
| self is stunned | |
| { | |
| self is not stunned | |
| "The thief, a man of superior breeding, pauses for a | |
| moment to consider the propriety of finishing you off." | |
| return true | |
| } | |
| elseif self is living and | |
| self is not unconscious and | |
| self is disarmed | |
| { | |
| if FindObject(stiletto, location) and | |
| random(10) < 6 | |
| { | |
| "The robber, somewhat surprised at this turn | |
| of events, nimbly retrieves his stiletto." | |
| move stiletto to self | |
| stiletto is hidden | |
| self is not disarmed | |
| return true | |
| } | |
| else | |
| { | |
| "Your opponent, determining discretion to be | |
| the better part of valor, decides to | |
| terminate this little contretemps. With a | |
| rueful nod of his head, he steps backward | |
| into the gloom and disappears." | |
| RemoveThief(0) | |
| } | |
| } | |
| } | |
| return true | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! | |
| ! EVENTS | |
| ! | |
| !---------------------------------------------------------------------------- | |
| event troll | |
| { | |
| local a, b | |
| self = troll | |
| ! 10% chance to spontaneously attack. | |
| if self is not hostile and | |
| random(10) = 1 | |
| { | |
| self is hostile | |
| } | |
| if self is hostile and | |
| self is living and | |
| self is not unconscious and | |
| self is not stunned and | |
| self is not disarmed | |
| { | |
| ResolveAttack(-1) | |
| combat_result-- | |
| if combat_result < 0 | |
| { | |
| combat_result = 0 | |
| } | |
| select combat_result | |
| case 0 | |
| { | |
| a = random(4) | |
| select a | |
| case 1 | |
| { | |
| "The troll swings his axe, but it misses." | |
| } | |
| case 2 | |
| { | |
| "The troll's axe barely misses your ear." | |
| } | |
| case 3 | |
| { | |
| "The axe sweeps past as you jump aside." | |
| } | |
| case 4 | |
| { | |
| "The axe crashes against the rock, throwing sparks!" | |
| } | |
| return true | |
| } | |
| case 1 | |
| { | |
| :Instead1 | |
| player is stunned | |
| a = random(4) | |
| select a | |
| case 1 | |
| { | |
| "The troll hits you with a glancing blow, | |
| and you are momentarily stunned." | |
| } | |
| case 2 | |
| { | |
| "The troll swings; the blade turns on your | |
| armor but crashes broadside into your head." | |
| } | |
| case 3 | |
| { | |
| "You stagger back under a hail of axe | |
| strokes." | |
| } | |
| case 4 | |
| { | |
| "The troll's mighty blow drops you to your | |
| knees." | |
| } | |
| return true | |
| } | |
| case 2 | |
| { | |
| if xobject and | |
| xobject is weapon and | |
| xobject in player | |
| { | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "The axe hits your "; | |
| print xobject.name; | |
| " and knocks it spinning." | |
| } | |
| case 2 | |
| { | |
| "The troll swings, you parry, but | |
| the force of his blow knocks your "; | |
| print xobject.name; | |
| " away." | |
| } | |
| case 3 | |
| { | |
| "The axe knocks your "; | |
| print xobject.name; | |
| " out of your hand. It falls to the | |
| floor." | |
| } | |
| move xobject to location | |
| } | |
| elseif object and | |
| object is weapon and | |
| object in player | |
| { | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "The axe hits your "; | |
| print xobject.name; | |
| " and knocks it spinning." | |
| } | |
| case 2 | |
| { | |
| "The troll swings, you parry, but | |
| the force of his blow knocks your "; | |
| print xobject.name; | |
| " away." | |
| } | |
| case 3 | |
| { | |
| "The axe knocks your "; | |
| print xobject.name; | |
| " out of your hand. It falls to the | |
| floor." | |
| } | |
| move object to location | |
| } | |
| else | |
| { | |
| Jump Instead1 | |
| } | |
| } | |
| case 3 | |
| { | |
| "The flat of the troll's axe hits you delicately on | |
| the head, knocking you out." | |
| "Conquering his fears, the troll puts you to death." | |
| NotDeadYet | |
| } | |
| case 4 | |
| { | |
| current_hit_points-- | |
| turns_to_heal += 30 | |
| if current_hit_points <= 0 | |
| { | |
| Jump PlayerDead1 | |
| } | |
| else | |
| { | |
| a = random(5) | |
| select a | |
| case 1 | |
| { | |
| "The axe gets you right in the side. | |
| Ouch!" | |
| } | |
| case 2 | |
| { | |
| "The flat of the troll's axe skins | |
| across your forearm." | |
| } | |
| case 3 | |
| { | |
| "The troll's swing almost knocks you | |
| over as you barely parry in time." | |
| } | |
| case 4 | |
| { | |
| "The troll swings his axe, and it | |
| nicks your arm as you dodge." | |
| } | |
| case 5 | |
| { | |
| "The troll charges, and his axe | |
| slashes you on your "; | |
| b = random(2) | |
| select b | |
| case 1 | |
| { | |
| "left"; | |
| } | |
| case 2 | |
| { | |
| "right"; | |
| } | |
| " arm." | |
| } | |
| return true | |
| } | |
| } | |
| case 5 | |
| { | |
| current_hit_points -= 2 | |
| turns_to_heal += 60 | |
| if current_hit_points <= 0 | |
| { | |
| Jump PlayerDead1 | |
| } | |
| else | |
| { | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "An axe stroke makes a deep wound in | |
| your leg." | |
| } | |
| case 2 | |
| { | |
| "The troll's axe swings down, gashing | |
| your shoulder." | |
| } | |
| return true | |
| } | |
| } | |
| case 6 | |
| { | |
| :PlayerDead1 | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "The troll neatly removes your head." | |
| } | |
| case 2 | |
| { | |
| "The troll's axe stroke cleaves you | |
| from the nave to the chops." | |
| } | |
| case 3 | |
| { | |
| "The troll's axe removes your head." | |
| } | |
| NotDeadYet | |
| } | |
| } | |
| elseif self is living and | |
| self is stunned | |
| { | |
| self is not stunned | |
| if axe is hidden ! hidden = troll is carrying the axe | |
| { | |
| "The troll hesitates, fingering his axe." | |
| } | |
| else | |
| { | |
| "The troll scratches his head ruminatively: | |
| Might you be magically protected, he | |
| wonders?" | |
| } | |
| return true | |
| } | |
| elseif self is living and | |
| self is not unconscious and | |
| self is disarmed | |
| { | |
| if FindObject(axe, location) and | |
| random(10) < 6 | |
| { | |
| "The troll, angered and humiliated, recovers his | |
| weapon. He appears to have an axe to grind with you." | |
| move axe to self | |
| axe is hidden | |
| self is not disarmed | |
| return true | |
| } | |
| else | |
| { | |
| "The troll, disarmed, cowers in terror, pleading for | |
| his life in the guttural tongue of the trolls." | |
| return true | |
| } | |
| } | |
| } | |
| event cyclops | |
| { | |
| local a, diff | |
| self = cyclops | |
| if self is hostile and | |
| self is living and | |
| self is not unconscious and | |
| self is not stunned | |
| { | |
| CalculateRank | |
| diff = 6 - rank | |
| ResolveAttack(diff) | |
| select combat_result | |
| case 0 | |
| { | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "The Cyclops misses, but the backwash almost | |
| knocks you over." | |
| } | |
| case 2 | |
| { | |
| "The Cyclops rushes you, but runs into the | |
| wall." | |
| } | |
| return true | |
| } | |
| case 1 | |
| { | |
| :Instead2 | |
| "The Cyclops lands a punch that knocks the wind out | |
| of you." | |
| player is stunned | |
| return true | |
| } | |
| case 2 | |
| { | |
| if xobject and | |
| xobject is weapon and | |
| xobject in player | |
| { | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "The Cyclops grabs your "; | |
| print xobject.name; | |
| ", tastes it, and throws it to the | |
| ground in disgust." | |
| } | |
| case 2 | |
| { | |
| "The monster grabs you on the wrist, | |
| squeezes, and you drop your "; | |
| print xobject.name; | |
| " in pain." | |
| } | |
| move xobject to location | |
| } | |
| elseif object and | |
| object is weapon and | |
| object in player | |
| { | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "The Cyclops grabs your "; | |
| print object.name; | |
| ", tastes it, and throws it to the | |
| ground in disgust." | |
| } | |
| case 2 | |
| { | |
| "The monster grabs you on the wrist, | |
| squeezes, and you drop your "; | |
| print object.name; | |
| " in pain." | |
| } | |
| move object to location | |
| } | |
| else | |
| { | |
| Jump Instead2 | |
| } | |
| } | |
| case 3 | |
| { | |
| "The Cyclops sends you crashing to the floor, | |
| unconscious." | |
| "The Cyclops, no sportsman, dispatches his | |
| unconscious victim." | |
| NotDeadYet | |
| } | |
| case 4 | |
| { | |
| current_hit_points-- | |
| turns_to_heal += 30 | |
| if current_hit_points <= 0 | |
| { | |
| Jump PlayerDead2 | |
| } | |
| else | |
| { | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "A quick punch, but it was only a | |
| glancing blow." | |
| } | |
| case 2 | |
| { | |
| "A glancing blow from the Cyclops' | |
| fist." | |
| } | |
| return true | |
| } | |
| } | |
| case 5 | |
| { | |
| current_hit_points -= 2 | |
| turns_to_heal += 60 | |
| if current_hit_points <= 0 | |
| { | |
| Jump PlayerDead2 | |
| } | |
| else | |
| { | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "The monster smashes his huge fist | |
| into your chest, breaking several | |
| ribs." | |
| } | |
| case 2 | |
| { | |
| "Heedless of your weapons, the | |
| Cyclops tosses you against the rock | |
| wall of the room." | |
| } | |
| return true | |
| } | |
| } | |
| case 6 | |
| { | |
| :PlayerDead2 | |
| "The Cyclops breaks your neck with a massive smash." | |
| NotDeadYet | |
| } | |
| } | |
| elseif self is living and | |
| self is stunned | |
| { | |
| self is not stunned | |
| "The Cyclops seems unable to decide whether to broil | |
| or stew his dinner." | |
| return true | |
| } | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! | |
| ! Scenery Items - These items are always in the player's location | |
| ! | |
| !---------------------------------------------------------------------------- | |
| scenery grue "lurking grue" | |
| { | |
| noun "grue" | |
| adjective "lurking" | |
| article "a" | |
| found_in {return location} | |
| long_desc | |
| { | |
| "The grue is a sinister, lurking presence in the dark places | |
| of the earth. Its favorite diet is adventurers, but its | |
| insatiable appetite is tempered by its fear of light. No grue | |
| has ever been seen by the light of day, and few have survived | |
| its fearsome jaws to tell the tale." | |
| } | |
| before | |
| { | |
| object DoFind | |
| { | |
| "There is no grue here, but I'm sure there is at | |
| least one lurking in the darkness nearby. I wouldn't | |
| let my light go out if I were you!" | |
| } | |
| object DoListen | |
| { | |
| "It makes no sound but is always lurking in the | |
| darkness nearby." | |
| } | |
| } | |
| } | |
| scenery zorkmid "zorkmid" | |
| { | |
| noun "zorkmid" | |
| article "a" | |
| found_in {return location} | |
| long_desc | |
| { | |
| "The zorkmid is the unit of currency of the Great Underground | |
| Empire." | |
| } | |
| before | |
| { | |
| object DoFind | |
| { | |
| "The best way to find zorkmids is to go out and | |
| look for them." | |
| } | |
| } | |
| } | |
| scenery teeth "set of teeth" | |
| { | |
| noun "teeth" | |
| adjective "set" | |
| article "a" | |
| found_in {return location} | |
| before | |
| { | |
| object DoFind | |
| { | |
| "You find it." | |
| } | |
| } | |
| } | |
| scenery hands "pair of hands" | |
| { | |
| noun "hands" | |
| adjectives "pair" "bare" | |
| article "the" | |
| found_in {return location} | |
| before | |
| { | |
| object DoFind | |
| { | |
| "Within six feet of your head, assuming you haven't | |
| left that somewhere." | |
| } | |
| } | |
| } | |
| scenery sailor "sailor" | |
| { | |
| noun "sailor" | |
| article "the" | |
| found_in {return location} | |
| } | |
| scenery blessings "blessings" | |
| { | |
| noun "blessings" | |
| article "my" | |
| found_in {return location} | |
| before | |
| { | |
| object DoCount | |
| { | |
| "Well, for one, you are playing Hugo Zork..." | |
| } | |
| } | |
| } | |
| scenery way "way" | |
| { | |
| nouns "way" "path" | |
| article "the" | |
| found_in {return location} | |
| } | |
| scenery ground "ground" | |
| { | |
| nouns "ground" "dirt" "sand" | |
| article "the" | |
| found_in {return location} | |
| before | |
| { | |
| object DoDig | |
| { | |
| if xobject = shovel or | |
| xobject = hands | |
| { | |
| "The ground is too hard for digging here." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| scenery surrounding_wall "surrounding wall" | |
| { | |
| noun "wall" | |
| adjective "surrounding" | |
| article "the" | |
| found_in {return location} | |
| } | |
| scenery air "blast of air" | |
| { | |
| noun "air" | |
| adjective "blast" | |
| article "a" | |
| found_in {return location} | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! CHARACTERS | |
| !---------------------------------------------------------------------------- | |
| creature troll "troll" | |
| { | |
| noun "troll" | |
| adjective "nasty" | |
| article "a" | |
| in troll_room | |
| room_points 5 ! OK, so he's not a room... | |
| hit_points 2 | |
| short_desc | |
| { | |
| if self is not unconscious and | |
| self is not disarmed | |
| { | |
| "A nasty-looking troll, brandishing a bloody axe, | |
| blocks all passages out of the room." | |
| } | |
| elseif self is unconscious | |
| { | |
| "An unconscious troll is sprawled on the floor. All | |
| passages out of the room are open." | |
| } | |
| else | |
| { | |
| "A pathetically babbling troll is here." | |
| } | |
| } | |
| long_desc | |
| { | |
| if self is not unconscious and | |
| self is not disarmed | |
| { | |
| "A nasty-looking troll, brandishing a bloody axe, | |
| blocks all passages out of the room." | |
| } | |
| elseif self is unconscious | |
| { | |
| "An unconscious troll is sprawled on the floor. All | |
| passages out of the room are open." | |
| } | |
| else | |
| { | |
| "A pathetically babbling troll is here." | |
| } | |
| } | |
| knocked_out | |
| { | |
| self is unconscious | |
| if troll is not room_scored | |
| { | |
| score += troll.room_points | |
| troll is room_scored | |
| } | |
| troll_room.threat_level = 0 | |
| cellar.threat_level = 0 | |
| move axe to location | |
| axe is not hidden | |
| self is disarmed | |
| KnockOutMessage(troll) | |
| } | |
| no_weapon | |
| { | |
| self is disarmed | |
| move axe to location | |
| axe is not hidden | |
| DisarmedMessage(troll) | |
| } | |
| take_damage | |
| { | |
| self.hit_points -= damage | |
| if self is unconscious or | |
| self is disarmed | |
| { | |
| Jump TrollDead | |
| } | |
| elseif self.hit_points <= 0 | |
| { | |
| DeadMessage(troll) | |
| :TrollDead | |
| "Almost as soon as "; | |
| print The(self); | |
| " breathes his last breath, a cloud | |
| of sinister black fog envelops him, | |
| and when the fog lifts, the carcass | |
| has disappeared." | |
| remove self | |
| self is not living | |
| if self is not room_scored | |
| { | |
| score += self.room_points | |
| self is room_scored | |
| } | |
| troll_room.threat_level = 0 | |
| cellar.threat_level = 0 | |
| axe is not hidden | |
| move axe to location | |
| } | |
| else | |
| { | |
| MinorWoundMessage(troll) | |
| } | |
| } | |
| before | |
| { | |
| object DoWakeCharacter | |
| { | |
| if self is not unconscious | |
| { | |
| Already_done | |
| } | |
| else | |
| { | |
| self is not unconscious | |
| troll_room.threat_level = 2 | |
| cellar.threat_level = 1 | |
| if FindObject(axe, location) | |
| { | |
| move axe to self | |
| axe is hidden | |
| self is not disarmed | |
| "The troll stirs, quickly resuming a | |
| fighting stance." | |
| return true | |
| } | |
| else | |
| { | |
| "The troll, disarmed, cowers in | |
| terror, pleading for his life in the | |
| guttural tongue of the trolls." | |
| return true | |
| } | |
| } | |
| } | |
| object DoListen | |
| { | |
| if self is not unconscious and | |
| self is not disarmed | |
| { | |
| "Every so often the troll says something, | |
| probably uncomplimentary, in his guttural | |
| tongue." | |
| return true | |
| } | |
| elseif self is not unconscious and | |
| self is disarmed | |
| { | |
| "The troll, disarmed, cowers in | |
| terror, pleading for his life in the | |
| guttural tongue of the trolls." | |
| return true | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoAsk, DoTell, DoAskQuestion, DoTalk, DoHello | |
| { | |
| if self is not unconscious | |
| { | |
| "The troll isn't much of a | |
| conversationalist." | |
| return true | |
| } | |
| else | |
| { | |
| "Unfortunately, the troll can't hear you." | |
| } | |
| } | |
| object DoGet | |
| { | |
| if self is not unconscious | |
| { | |
| "The troll spits in your face, saying | |
| \"Better luck next time\"." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| xobject DoGive, DoThrowAt | |
| { | |
| if object = axe | |
| { | |
| "The troll scratches his head in confusion, | |
| then takes the axe." | |
| axe is hidden | |
| self is not disarmed | |
| return true | |
| } | |
| if verbroutine = &DoGive | |
| { | |
| "The troll, who is not overly proud, | |
| graciously accepts the gift"; | |
| } | |
| else | |
| { | |
| "The troll, who is remarkably coordinated, | |
| catches "; | |
| print The(object); | |
| } | |
| if object = sword | |
| { | |
| " and eats it hungrily. Poor troll, he dies | |
| from an internal hemorrhage and his carcass | |
| disappears in a sinister black fog." | |
| remove troll | |
| troll is not living | |
| axe is not hidden | |
| remove sword | |
| if self is not room_scored | |
| { | |
| score += self.room_points | |
| self is room_scored | |
| } | |
| troll_room.threat_level = 0 | |
| cellar.threat_level = 0 | |
| } | |
| elseif object = nasty_knife | |
| { | |
| " and, being for the moment sated, throws it | |
| back. Fortunately, the troll has poor control, | |
| and the knife falls to the floor. He does | |
| not look pleased." | |
| self is hostile | |
| move nasty_knife to location | |
| } | |
| else | |
| { | |
| " and not having the most discriminating | |
| tastes, gleefully eats it." | |
| remove object | |
| FindLight(location) ! Just in case the player | |
| ! fed him the lamp | |
| } | |
| } | |
| } | |
| } | |
| object axe "bloody axe" | |
| { | |
| noun "axe" | |
| adjective "bloody" | |
| article "a" | |
| in troll | |
| is hidden, weapon, sharp | |
| before | |
| { | |
| object DoGet | |
| { | |
| if self in troll | |
| { | |
| "The troll swings it out of your reach." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| creature cyclops "cyclops" | |
| { | |
| noun "cyclops" | |
| adjective "hungry" | |
| article "a" | |
| in cyclops_room | |
| hit_points 4 | |
| initial_desc | |
| { | |
| if self is not unconscious | |
| { | |
| "A cyclops, who looks prepared to eat horses (much | |
| less mere adventurers), blocks the staircase. From | |
| his state of health, and the bloodstains on the | |
| walls, you gather that he is not very friendly, | |
| though he likes people." | |
| } | |
| else | |
| { | |
| "The cyclops is sleeping like a baby, albeit a very | |
| ugly one." | |
| } | |
| } | |
| long_desc | |
| { | |
| "A hungry cyclops is standing at the foot of the stairs." | |
| } | |
| knocked_out | |
| { | |
| self is unconscious | |
| cyclops_room.threat_level = 0 | |
| maze15.threat_level = 0 | |
| KnockOutMessage(cyclops) | |
| } | |
| no_weapon | |
| { | |
| DazeMessage(cyclops) ! The cyclops doesn't need a weapon | |
| } | |
| take_damage | |
| { | |
| self.hit_points -= damage | |
| if self is unconscious | |
| { | |
| Jump CyclopsDead | |
| } | |
| elseif self.hit_points <= 0 | |
| { | |
| DeadMessage(cyclops) | |
| :CyclopsDead | |
| "Almost as soon as "; | |
| print The(self); | |
| " breathes his last breath, a cloud | |
| of sinister black fog envelops him, | |
| and when the fog lifts, the carcass | |
| has disappeared." | |
| remove self | |
| self is not living | |
| cyclops_room.threat_level = 0 | |
| maze15.threat_level = 0 | |
| } | |
| elseif damage = 1 | |
| { | |
| MinorWoundMessage(cyclops) | |
| } | |
| else | |
| { | |
| SeriousWoundMessage(cyclops) | |
| } | |
| } | |
| before | |
| { | |
| xobject DoGive | |
| { | |
| if self is unconscious | |
| { | |
| "The cyclops is sleeping like a baby, albeit | |
| a very ugly one." | |
| } | |
| elseif object = lunch | |
| { | |
| "The cyclops says \"Mmm Mmm. I love hot | |
| peppers! But oh, could I use a drink. Perhaps | |
| I could drink the blood of that thing.\" | |
| From the gleam in his eye, it could be | |
| surmised that you are \"that thing\"." | |
| } | |
| elseif object = water or object = bottle | |
| { | |
| if bottle is open | |
| { | |
| "The cyclops takes the bottle, checks | |
| that it's open, and drinks the water. | |
| A moment later, he lets out a yawn | |
| that nearly blows you over, and then | |
| falls fast asleep (what did you put | |
| in that drink, anyway?)." | |
| self is unconscious | |
| } | |
| else | |
| { | |
| "The cyclops apparently is not | |
| thirsty and refuses your generous | |
| offer." | |
| } | |
| } | |
| elseif object is sharp or | |
| object is weapon | |
| { | |
| "The cyclops is not so stupid as to eat | |
| THAT!" | |
| } | |
| else | |
| { | |
| "The cyclops may be hungry, but there is a | |
| limit." | |
| } | |
| } | |
| xobject DoThrowAt | |
| { | |
| if self is not unconscious | |
| { | |
| "\"Do you think I'm as stupid as my father | |
| was?\", he says, dodging." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| xobject DoTie | |
| { | |
| "You cannot tie the cyclops, though he is fit to be | |
| tied." | |
| } | |
| object DoListen | |
| { | |
| "You can hear his stomach rumbling." | |
| } | |
| object DoAsk, DoTell, DoAskQuestion, DoTalk, DoHello | |
| { | |
| if self is not unconscious | |
| { | |
| "The cyclops prefers eating to making | |
| conversation." | |
| } | |
| else | |
| { | |
| "No use talking to him. He's fast asleep." | |
| } | |
| } | |
| object DoWake | |
| { | |
| if self is unconscious | |
| { | |
| "The cyclops yawns and stares at the thing | |
| that woke him up." | |
| self is not unconscious | |
| cyclops_room.threat_level = 2 | |
| maze15.threat_level = 1 | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoGet | |
| { | |
| if self is not unconscious | |
| { | |
| "The cyclops shrugs but otherwise ignores | |
| your pitiful attempt." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| creature thief "thief" | |
| { | |
| nouns "thief" "robber" "man" "character" "eyes" | |
| adjectives "slippery" | |
| article "the" | |
| in nothing | |
| hit_points 4 | |
| long_desc | |
| { | |
| "The thief is a slippery character with beady eyes that | |
| flit back and forth. He carries, along with an unmistakable | |
| arrogance, a large bag over his shoulder and a vicious | |
| stiletto, whose blade is aimed menacingly in your direction. | |
| I'd watch out if I were you." | |
| } | |
| knocked_out | |
| { | |
| self is unconscious | |
| treasure_room.threat_level = 0 | |
| move stiletto to location | |
| stiletto is not hidden | |
| self is disarmed | |
| KnockOutMessage(thief) | |
| } | |
| no_weapon | |
| { | |
| self is disarmed | |
| move stiletto to location | |
| stiletto is not hidden | |
| DisarmedMessage(thief) | |
| } | |
| take_damage | |
| { | |
| self.hit_points -= damage | |
| if self is unconscious or | |
| self is disarmed | |
| { | |
| Jump ThiefDead | |
| } | |
| elseif self.hit_points <= 0 | |
| { | |
| DeadMessage(thief) | |
| :ThiefDead | |
| "Almost as soon as "; | |
| print The(self); | |
| " breathes his last breath, a cloud | |
| of sinister black fog envelops him, | |
| and when the fog lifts, the carcass | |
| has disappeared." | |
| RemoveThief(1) | |
| } | |
| elseif damage = 1 | |
| { | |
| MinorWoundMessage(thief) | |
| } | |
| else | |
| { | |
| SeriousWoundMessage(thief) | |
| } | |
| } | |
| before | |
| { | |
| object DoGet | |
| { | |
| "Once you got him, what would you do with him?" | |
| } | |
| object DoListen | |
| { | |
| "The thief is a strong, silent type." | |
| } | |
| object DoAsk, DoTell, DoAskQuestion, DoTalk, DoHello | |
| { | |
| if self is not unconscious | |
| { | |
| "The thief says nothing, as you have not | |
| been formally introduced." | |
| } | |
| else | |
| { | |
| "The thief, being temporarily incapacitated, | |
| is unable to acknowledge your greeting with | |
| his usual graciousness." | |
| } | |
| } | |
| object DoWake | |
| { | |
| if self is unconscious | |
| { | |
| "Your proposed victim suddenly recovers | |
| consciousness." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| xobject DoThrowAt | |
| { | |
| if self is unconscious | |
| { | |
| return false | |
| } | |
| elseif object = nasty_knife | |
| { | |
| "You missed. The thief makes no attempt to | |
| take the knife, though it would be a fine | |
| addition to the collection in his bag. He | |
| does seem angered by your attempt." | |
| move nasty_knife to location | |
| thief is hostile | |
| } | |
| else | |
| { | |
| "You missed." | |
| thief is hostile | |
| } | |
| } | |
| xobject DoGive | |
| { | |
| if self is unconscious | |
| { | |
| return false | |
| } | |
| elseif object is valuable | |
| { | |
| "The thief is taken aback by your unexpected | |
| generosity, but accepts "; | |
| print The(object); | |
| " and stops to admire its beauty." | |
| thief is not hostile | |
| move object to thiefs_bag | |
| } | |
| else | |
| { | |
| "The thief places "; | |
| print The(object); | |
| " in his bag and thanks you politely." | |
| thief is not hostile | |
| move object to thiefs_bag | |
| } | |
| } | |
| } | |
| } | |
| object stiletto "stiletto" | |
| { | |
| noun "stiletto" | |
| adjectives "sharp" "viscious" | |
| article "a" | |
| is weapon, sharp, hidden | |
| in thief | |
| size 10 | |
| } | |
| object thiefs_bag "thief's bag" | |
| { | |
| nouns "bag" "sack" | |
| adjective "large" | |
| article "the" | |
| is container, hidden | |
| capacity 500 | |
| in thief | |
| before | |
| { | |
| object DoGet | |
| { | |
| if thief is unconscious | |
| { | |
| "Sadly for you, the robber collapsed on top | |
| of the bag. Trying to take it would wake | |
| him." | |
| } | |
| else | |
| { | |
| "The bag will be taken over his dead body." | |
| } | |
| } | |
| object DoLookIn | |
| { | |
| if thief is unconscious | |
| { | |
| "The bag is underneath the thief, so one | |
| can't say what, if anything, is inside." | |
| } | |
| else | |
| { | |
| "Getting close enough would be a good trick." | |
| } | |
| } | |
| } | |
| } | |
| object canvas "useless piece of canvas" | |
| { | |
| noun "canvas" | |
| adjective "useless" "piece" | |
| article "a" | |
| in nothing | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! ABOVE GROUND AREAS | |
| !---------------------------------------------------------------------------- | |
| LightRoom west_of_house "West of House" | |
| { | |
| long_desc | |
| { | |
| "You are standing in an open field west of a white | |
| house, with a boarded front door."; | |
| if ancient_map in nothing | |
| { | |
| "" | |
| } | |
| else | |
| { | |
| " A secret path leads southwest into the forest." | |
| } | |
| } | |
| is thief_free | |
| sw_to | |
| { | |
| if ancient_map in nothing | |
| { | |
| return false | |
| } | |
| else | |
| { | |
| return stone_barrow | |
| } | |
| } | |
| n_to north_of_house | |
| s_to south_of_house | |
| w_to forest1 | |
| e_to | |
| { | |
| "The door is boarded and you can't remove the boards." | |
| } | |
| } | |
| scenery house "house" | |
| { | |
| nouns "house" "home" | |
| adjectives "colonial" "beautiful" "white" | |
| article "the" | |
| long_desc | |
| { | |
| "The house is a beautiful colonial house which is | |
| painted white. It is clear that the owners must have | |
| been extremely wealthy." | |
| } | |
| found_in west_of_house, north_of_house, behind_house, south_of_house | |
| before | |
| { | |
| object DoFind | |
| { | |
| "It's right here! Are you blind or something?" | |
| } | |
| object DoEnter | |
| { | |
| if location = behind_house and | |
| kitchen_window is not open | |
| { | |
| "The window is closed." | |
| } | |
| elseif location = behind_house and | |
| kitchen_window is open | |
| { | |
| MovePlayer(kitchen) | |
| } | |
| else | |
| { | |
| "I can't see how to get in from here." | |
| } | |
| } | |
| } | |
| } | |
| scenery boards "boards" | |
| { | |
| nouns "board" "boards" | |
| adjectives "wood" "wooden" "white" | |
| article "the" | |
| in house | |
| before | |
| { | |
| object DoGet, DoLook | |
| { | |
| "The boards are securely fastened." | |
| } | |
| } | |
| } | |
| scenery house1 "house" | |
| { | |
| nouns "house" "home" | |
| adjectives "colonial" "beautiful" "white" | |
| article "the" | |
| long_desc | |
| { | |
| "You're not at the house." | |
| } | |
| found_in forest1, forest2, forest3, forest4, forest_path, up_a_tree \ | |
| clearing, clearing1 | |
| before | |
| { | |
| object DoFind | |
| { | |
| if location = clearing | |
| { | |
| "It seems to be to the west." | |
| } | |
| else | |
| { | |
| "It was here just a minute ago...." | |
| } | |
| } | |
| object DoEnter | |
| { | |
| "You're not at the house." | |
| } | |
| } | |
| } | |
| object mailbox "small mailbox" | |
| { | |
| in west_of_house | |
| nouns "mailbox" "box" | |
| adjective "small" | |
| article "a" | |
| is static, container, openable, not open | |
| capacity 5 | |
| long_desc | |
| { | |
| "The small mailbox is "; | |
| if self is not open | |
| "closed." | |
| else | |
| { | |
| "open." | |
| WhatsIn(object) | |
| } | |
| } | |
| after | |
| { | |
| object DoOpen | |
| { | |
| WhatsIn(object) | |
| } | |
| } | |
| } | |
| object leaflet "leaflet" | |
| { | |
| in mailbox | |
| noun "leaflet" | |
| article "a" | |
| is burnable | |
| long_desc | |
| { | |
| "\"WELCOME TO HUGO ZORK!\n\n | |
| HUGO ZORK is a game of adventure, danger, and low cunning. | |
| In it you will explore some of the most amazing territory | |
| ever seen by mortals. No computer should be without one!\"" | |
| } | |
| is readable | |
| } | |
| LightRoom stone_barrow "Stone Barrow" | |
| { | |
| long_desc | |
| { | |
| "You are standing in front of a massive barrow of stone. | |
| In the east face is a huge stone door which is open. You | |
| cannot see into the dark of the tomb." | |
| } | |
| is thief_free | |
| w_to inside_the_barrow | |
| ne_to west_of_house | |
| } | |
| LightRoom inside_the_barrow "Inside The Barrow" | |
| { | |
| long_desc | |
| { | |
| "As you enter the barrow, the door closes inexorably | |
| behind you. Around you it is dark, but ahead is an | |
| enormous cavern, brightly lit. Through its center runs | |
| a wide stream. Spanning the stream is a small wooden | |
| footbridge, and beyond a path leads into a dark tunnel. | |
| Above the bridge, floating in the air, is a large sign. | |
| It reads: All ye who stand before this bridge have | |
| completed a great and perilous adventure which has tested | |
| your wit and courage. You have mastered the first part of | |
| the (Hugo) ZORK trilogy. Those who pass over this bridge must | |
| be prepared to undertake an even greater adventure that will | |
| severely test your skill and bravery!" | |
| "\nThe ZORK trilogy continues with \"ZORK II: The Wizard of | |
| Frobozz\" and is completed in \"ZORK III: The Dungeon | |
| Master.\"" | |
| "\nAuthor's note: I'm not making any promises, but maybe | |
| someday I'll port Zork II and Zork III over to Hugo." | |
| endflag = 3 | |
| } | |
| is thief_free | |
| } | |
| LightRoom north_of_house "North of House" | |
| { | |
| long_desc | |
| { | |
| "You are facing the north side of a white house. There is | |
| no door here, and all the windows are boarded up. To the | |
| north a narrow path winds through the trees." | |
| } | |
| is thief_free | |
| n_to forest_path | |
| s_to | |
| { | |
| "The windows are all boarded." | |
| } | |
| w_to west_of_house | |
| e_to behind_house | |
| } | |
| LightRoom south_of_house "South of House" | |
| { | |
| long_desc | |
| { | |
| "You are facing the south side of a white house. There is | |
| no door here and all the windows are boarded." | |
| } | |
| is thief_free | |
| n_to | |
| { | |
| "The windows are all boarded." | |
| } | |
| w_to west_of_house | |
| e_to behind_house | |
| s_to forest3 | |
| } | |
| LightRoom behind_house "Behind House" | |
| { | |
| long_desc | |
| { | |
| "You are behind the white house. A path leads into the | |
| forest to the east. In one corner of the house is a small | |
| window which is "; | |
| if kitchen_window is open | |
| "open." | |
| else | |
| "slightly ajar." | |
| } | |
| is thief_free | |
| n_to north_of_house | |
| s_to south_of_house | |
| e_to clearing | |
| w_to | |
| { | |
| if kitchen_window is not open | |
| { | |
| print CThe(kitchen_window); " is closed." | |
| } | |
| else | |
| { | |
| return kitchen_window.door_to | |
| } | |
| } | |
| in_to | |
| { | |
| if kitchen_window is not open | |
| { | |
| print CThe(kitchen_window); " is closed." | |
| } | |
| else | |
| { | |
| return kitchen_window.door_to | |
| } | |
| } | |
| } | |
| door kitchen_window "window" | |
| { | |
| noun "window" | |
| adjective "small" | |
| article "the" | |
| between kitchen, behind_house | |
| is static, transparent, not open | |
| long_desc | |
| { | |
| "The window is "; | |
| if self is not open | |
| { | |
| "slightly ajar, but not enough to allow entry." | |
| } | |
| else | |
| { | |
| "open, but I can't tell what's beyond it." | |
| } | |
| } | |
| before | |
| { | |
| object DoOpen | |
| { | |
| if self is open | |
| { | |
| Already_done | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoClose | |
| { | |
| if self is not open | |
| { | |
| Already_done | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoLookThrough | |
| { | |
| if location = behind_house | |
| { | |
| "You can see what appears to be a kitchen." | |
| } | |
| else | |
| { | |
| "You can see a clear area leading towards | |
| a forest." | |
| } | |
| } | |
| } | |
| after | |
| { | |
| object DoOpen | |
| { | |
| "With great effort, you open the window far | |
| enough to allow entry." | |
| } | |
| object DoClose | |
| { | |
| "The window closes (more easily than it opened)." | |
| } | |
| } | |
| } | |
| LightRoom clearing "Clearing" | |
| { | |
| long_desc | |
| { | |
| "You are in a small clearing in a well marked forest path | |
| that extends to the east and west." | |
| } | |
| is thief_free | |
| w_to behind_house | |
| e_to canyon_view | |
| n_to forest2 | |
| s_to forest3 | |
| } | |
| LightRoom canyon_view "Canyon View" | |
| { | |
| long_desc | |
| { | |
| "You are at the top of the Great Canyon on its west wall. | |
| From here there is a marvelous view of the canyon and parts | |
| of the Frigid River upstream. Across the canyon, the walls of | |
| the White Cliffs join the mighty ramparts of the Flathead | |
| Mountains to the east. Following the Canyon upstream to the | |
| north, Aragain Falls may be seen, complete with rainbow. The | |
| mighty Frigid River flows out from a great dark cavern. To the | |
| west and south can be seen an immense forest, stretching for | |
| miles around. A path leads northwest. It is possible to climb down | |
| into the canyon from here." | |
| } | |
| is thief_free | |
| nw_to clearing | |
| d_to rocky_ledge | |
| before | |
| { | |
| location DoJump | |
| { | |
| "Nice view, lousy place to jump." | |
| NotDeadYet | |
| } | |
| } | |
| } | |
| LightRoom rocky_ledge "Rocky Ledge" | |
| { | |
| long_desc | |
| { | |
| "You are on a ledge about halfway up the wall of the river | |
| canyon. You can see from here that the main flow from Aragain | |
| Falls twists along a passage which it is impossible for you | |
| to enter. Below you is the canyon bottom. Above you is more | |
| cliff, which appears climbable." | |
| } | |
| is thief_free | |
| u_to canyon_view | |
| d_to canyon_bottom | |
| } | |
| LightRoom canyon_bottom "Canyon Bottom" | |
| { | |
| long_desc | |
| { | |
| "You are beneath the walls of the river canyon which may be | |
| climbable here. The lesser part of the runoff of Aragain | |
| Falls flows by below. To the north is a narrow path." | |
| } | |
| is thief_free | |
| u_to rocky_ledge | |
| n_to end_of_rainbow | |
| } | |
| LightRoom end_of_rainbow "End of Rainbow" | |
| { | |
| long_desc | |
| { | |
| "You are on a small, rocky beach on the continuation of the | |
| Frigid River past the Falls. The beach is narrow due to the | |
| presence of the White Cliffs. The river canyon opens here | |
| and sunlight shines in from above. A rainbow crosses over | |
| the falls to the east and a narrow path continues to the | |
| southwest." | |
| } | |
| is thief_free | |
| sw_to canyon_bottom | |
| e_to | |
| { | |
| if rainbow is special | |
| { | |
| MovePlayer(on_the_rainbow) | |
| } | |
| else | |
| { | |
| "You can't go that way." | |
| } | |
| } | |
| u_to | |
| { | |
| if rainbow is special | |
| { | |
| MovePlayer(on_the_rainbow) | |
| } | |
| else | |
| { | |
| "You can't go that way." | |
| } | |
| } | |
| } | |
| scenery rainbow "rainbow" | |
| { | |
| noun "rainbow" | |
| adjective "dazzling" | |
| article "a" | |
| found_in end_of_rainbow, on_the_rainbow, aragain_falls | |
| before | |
| { | |
| object DoLookUnder | |
| { | |
| "The Frigid River flows under the rainbow." | |
| } | |
| object DoWalkOn | |
| { | |
| if rainbow is not special | |
| { | |
| "Can you walk on water vapor?" | |
| } | |
| elseif location = on_the_rainbow | |
| { | |
| "You'll have to say which way..." | |
| } | |
| elseif location = end_of_rainbow | |
| { | |
| MovePlayer(aragain_falls) | |
| } | |
| else | |
| { | |
| MovePlayer(end_of_rainbow) | |
| } | |
| } | |
| object DoClimb | |
| { | |
| if (location = end_of_rainbow or | |
| location = aragain_falls) | |
| { | |
| if rainbow is special | |
| { | |
| MovePlayer(on_the_rainbow) | |
| } | |
| else | |
| { | |
| "You can't go that way." | |
| } | |
| } | |
| else | |
| { | |
| "You can't do that." | |
| } | |
| } | |
| } | |
| } | |
| treasure pot_of_gold "pot of gold" | |
| { | |
| noun "gold" | |
| adjective "pot" | |
| article "a" | |
| take_points 10 | |
| deposit_points 10 | |
| in nothing | |
| initial_desc | |
| { | |
| "At the end of the rainbow is a pot of gold." | |
| } | |
| } | |
| LightRoom forest_path "Forest Path" | |
| { | |
| long_desc | |
| { | |
| "This is a path winding through a dimly lit forest. The path | |
| heads north-south here. One particularly large tree with | |
| some low branches stands at the edge of the path." | |
| } | |
| is thief_free | |
| n_to clearing1 | |
| s_to north_of_house | |
| e_to forest2 | |
| w_to forest1 | |
| u_to up_a_tree | |
| } | |
| scenery tree "tree" | |
| { | |
| noun "tree" | |
| adjective "large" | |
| article "a" | |
| found_in forest_path, up_a_tree | |
| before | |
| { | |
| object DoClimb | |
| { | |
| if location = forest_path | |
| { | |
| MovePlayer(up_a_tree) | |
| } | |
| else | |
| { | |
| "You cannot climb any higher." | |
| } | |
| } | |
| } | |
| } | |
| LightRoom up_a_tree "Up a Tree" | |
| { | |
| long_desc | |
| { | |
| "You are about 10 feet above the ground nestled among | |
| some large branches. The nearest branch above you is above | |
| your reach." | |
| } | |
| is thief_free | |
| d_to forest_path | |
| u_to { | |
| "You cannot climb any higher." | |
| } | |
| before | |
| { | |
| object DoClimb | |
| { | |
| "You cannot climb any higher." | |
| } | |
| } | |
| } | |
| object birdnest "bird's nest" | |
| { | |
| noun "nest" | |
| adjective "bird's" | |
| article "a" | |
| is burnable | |
| initial_desc | |
| { | |
| "Beside you on the branch is a small bird's nest." | |
| } | |
| contains_desc | |
| { | |
| "In the bird's nest is"; | |
| } | |
| is container | |
| capacity 10 | |
| in up_a_tree | |
| before | |
| { | |
| object DoGet | |
| { | |
| if child(birdnest) = egg | |
| { | |
| egg is moved | |
| } | |
| return false | |
| } | |
| object DoDrop | |
| { | |
| if location = up_a_tree and | |
| child(birdnest) = egg and | |
| egg is not open | |
| { | |
| "The nest falls to the ground, and the egg | |
| spills out of it, seriously damaged." | |
| DoBreakEgg | |
| move birdnest to forest_path | |
| move broken_canary to egg | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| treasure egg "jewel-encrusted egg" | |
| { | |
| noun "egg" | |
| adjectives "jewel-encrusted", 0, 0 | |
| article "a" | |
| take_points 5 | |
| deposit_points 5 | |
| capacity 5 | |
| in birdnest | |
| is container, openable, not open, lockable, locked | |
| long_desc | |
| { | |
| if self is not broken | |
| { | |
| "This is a large egg encrusted with precious jewels, | |
| apparently scavenged by a childless songbird. The egg | |
| is covered with fine gold inlay, and ornamented in | |
| lapis lazuli and mother-of-pearl. Unlike most eggs, | |
| this one is hinged and closed with a delicate looking | |
| clasp. The egg appears extremely fragile." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| short_desc | |
| { | |
| if self is not broken | |
| { | |
| "There is a jewel-encrusted egg here." | |
| } | |
| else | |
| { | |
| "There is a somewhat ruined egg here." | |
| } | |
| } | |
| contains_desc | |
| { | |
| "Inside the egg is"; | |
| } | |
| before | |
| { | |
| object DoDrop | |
| { | |
| if location = up_a_tree | |
| { | |
| "The egg falls to the ground and springs | |
| open, seriously damaged. There is a golden | |
| clockwork canary nestled in the egg. It | |
| seems to have recently had a bad experience. | |
| The mountings for its jewel-like eyes are | |
| empty, and its silver beak is crumpled. | |
| Through a cracked crystal window below its | |
| left wing you can see the remains of | |
| intricate machinery. It is not clear what | |
| result winding it would have, as the | |
| mainspring seems sprung." | |
| DoBreakEgg | |
| move egg to forest_path | |
| move broken_canary to egg | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoOpen | |
| { | |
| if self is not broken and | |
| self is locked | |
| { | |
| "You have neither the tools nor | |
| the expertise." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoHit | |
| { | |
| if not xobject or | |
| xobject = hands | |
| { | |
| "I doubt you could do that without damaging | |
| it." | |
| } | |
| elseif object is sharp | |
| { | |
| "The egg is now open, but the clumsiness | |
| of your attempt has seriously compromised | |
| its esthetic appeal." | |
| DoBreakEgg | |
| move broken_canary to egg | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| treasure canary "golden clockwork canary" | |
| { | |
| noun "canary" | |
| adjectives "clockwork" "golden" | |
| article "a" | |
| take_points 6 | |
| deposit_points 4 | |
| size 5 | |
| in nothing | |
| before | |
| { | |
| object DoWind | |
| { | |
| if self is not special and | |
| (location = forest_path or | |
| location = up_a_tree) | |
| { | |
| "The canary chirps, slightly off-key, an | |
| aria from a forgotten opera. From out of | |
| the greenery flies a lovely songbird. It | |
| perches on a limb just over your head and | |
| opens its beak to sing. As it does so a | |
| beautiful brass bauble drops from its mouth, | |
| bounces off the top of your head, and lands | |
| glimmering in the grass. As the canary winds | |
| down, the songbird flies away." | |
| self is special | |
| move bauble to forest_path | |
| } | |
| else | |
| { | |
| "The canary chirps blithely, if somewhat | |
| tinnily, for a short time." | |
| } | |
| } | |
| } | |
| } | |
| object broken_canary "broken clockwork canary" | |
| { | |
| noun "canary" | |
| adjectives "clockwork" "broken" | |
| article "a" | |
| in nothing | |
| size 5 | |
| initial_desc | |
| { | |
| "There is a golden clockwork canary nestled in the egg. It | |
| seems to have recently had a bad experience. The mountings | |
| for its jewel-like eyes are empty, and its silver beak is | |
| crumpled. Through a cracked crystal window below its left | |
| wing you can see the remains of intricate machinery. It is | |
| not clear what result winding it would have, as the | |
| mainspring seems sprung." | |
| } | |
| before | |
| { | |
| object DoWind | |
| { | |
| "There is an unpleasant grinding noise from | |
| inside the canary." | |
| } | |
| } | |
| } | |
| treasure bauble "brass bauble" | |
| { | |
| noun "bauble" | |
| adjective "brass" | |
| article "a" | |
| in nothing | |
| take_points 1 | |
| deposit_points 1 | |
| } | |
| LightRoom clearing1 "Clearing" | |
| { | |
| long_desc | |
| { | |
| "You are in a clearing, with a forest surrounding you on | |
| all sides. A path leads south." | |
| if grating is open | |
| { | |
| "There is an open grating, descending into | |
| darkness." | |
| } | |
| elseif grating is not open and | |
| pile_of_leaves is moved | |
| { | |
| "There is a grating securely fastened into the | |
| ground." | |
| } | |
| } | |
| is thief_free | |
| d_to | |
| { | |
| if grating is not open and | |
| pile_of_leaves is not moved | |
| { | |
| "You can't go that way." | |
| } | |
| else | |
| { | |
| return grating.door_to | |
| } | |
| } | |
| s_to forest_path | |
| n_to | |
| { | |
| "The forest becomes impenetrable to the north." | |
| } | |
| w_to forest1 | |
| e_to forest2 | |
| } | |
| object pile_of_leaves "pile of leaves" | |
| { | |
| noun "leaves" | |
| adjectives "pile" "of" | |
| article "a" | |
| in clearing1 | |
| is burnable, plural | |
| size 10 | |
| short_desc | |
| { | |
| "On the ground is a pile of leaves." | |
| } | |
| before | |
| { | |
| object DoCount | |
| { | |
| "There are 69,105 leaves here." | |
| return true | |
| } | |
| object DoMove, DoPull | |
| { | |
| "Done." | |
| "In disturbing the pile of leaves, a grating is | |
| revealed." | |
| pile_of_leaves is moved | |
| return true | |
| } | |
| object DoLookUnder | |
| { | |
| "Underneath the pile of leaves is a grating. As you | |
| release the leaves, the grating is once again | |
| concealed from view." | |
| } | |
| } | |
| after | |
| { | |
| object DoGet | |
| { | |
| "In disturbing the pile of leaves, a grating is | |
| revealed." | |
| return false | |
| } | |
| } | |
| } | |
| door grating "grating" | |
| { | |
| noun "grating" "grate" | |
| article "a" | |
| between clearing1, grating_room | |
| is static, not transparent, not open, lockable, locked | |
| key_object skeleton_key | |
| long_desc | |
| { | |
| if location = clearing1 and | |
| pile_of_leaves is not moved | |
| { | |
| "You haven't seen anything like that." | |
| } | |
| else | |
| { | |
| "The grating is "; | |
| if self is open | |
| { | |
| "open, but I can't tell what's beyond it." | |
| } | |
| else | |
| "closed." | |
| } | |
| } | |
| before | |
| { | |
| object DoLookThrough | |
| { | |
| if location = clearing1 and | |
| pile_of_leaves is not moved | |
| { | |
| "You haven't seen anything like that." | |
| } | |
| elseif grating is open | |
| { | |
| "The grating is open, but I can't tell | |
| what's beyond it." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoOpen | |
| { | |
| if pile_of_leaves is not moved and | |
| location = clearing1 | |
| { | |
| "You can't see any grating here!" | |
| object = pile_of_leaves | |
| return true | |
| } | |
| return false | |
| } | |
| } | |
| after | |
| { | |
| object DoOpen | |
| { | |
| trap_door is special | |
| if location = grating_room | |
| { | |
| "The grating opens to reveal trees above | |
| you." | |
| } | |
| else | |
| { | |
| "The grating opens." | |
| } | |
| if pile_of_leaves is not moved and | |
| location = grating_room | |
| { | |
| "A pile of leaves falls onto your head | |
| and to the ground." | |
| move pile_of_leaves to grating_room | |
| pile_of_leaves is moved | |
| } | |
| } | |
| } | |
| } | |
| LightRoom forest1 "Forest" | |
| { | |
| long_desc | |
| { | |
| "This is a forest, with trees in all directions. To the | |
| east, there appears to be sunlight." | |
| } | |
| is thief_free | |
| s_to forest3 | |
| n_to clearing1 | |
| e_to forest_path | |
| w_to | |
| { | |
| "You would need a machete to go further west." | |
| } | |
| } | |
| LightRoom forest2 "Forest" | |
| { | |
| long_desc | |
| { | |
| "This is a dimly lit forest, with large trees all around." | |
| } | |
| is thief_free | |
| e_to forest4 | |
| w_to forest_path | |
| s_to clearing | |
| } | |
| LightRoom forest3 "Forest" | |
| { | |
| long_desc | |
| { | |
| "This is a dimly lit forest, with large trees all around." | |
| } | |
| is thief_free | |
| n_to clearing | |
| s_to | |
| { | |
| "Storm-tossed trees block your way." | |
| } | |
| e_to | |
| { | |
| "The rank undergrowth prevents eastward movement." | |
| } | |
| w_to forest1 | |
| nw_to south_of_house | |
| } | |
| LightRoom forest4 "Forest" | |
| { | |
| long_desc | |
| { | |
| "The forest thins out, revealing impassable mountains." | |
| } | |
| is thief_free | |
| e_to | |
| { | |
| "The mountains are impassable." | |
| } | |
| w_to forest2 | |
| n_to forest2 | |
| s_to forest2 | |
| } | |
| scenery forest "forest" | |
| { | |
| nouns "forest" "trees" "pines" "hemlocks" | |
| article "a" | |
| found_in forest1, forest2, forest3, forest4, forest_path, up_a_tree \ | |
| clearing, clearing1 | |
| long_desc | |
| { | |
| "You cannot see the forest for the trees." | |
| } | |
| before | |
| { | |
| object DoListen | |
| { | |
| "The pines and the hemlocks seem to be murmuring." | |
| } | |
| } | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! AREAS INSIDE HOUSE | |
| !---------------------------------------------------------------------------- | |
| LightRoom kitchen "Kitchen" | |
| { | |
| long_desc | |
| { "You are in the kitchen of the white house. A table | |
| seems to have been used recently for the preparation | |
| of food. A passage leads to the west and a dark | |
| staircase can be seen leading upward. A dark chimney | |
| leads down and to the east is a small window which is "; | |
| if kitchen_window is not open | |
| "slightly ajar." | |
| else | |
| { | |
| "open." | |
| } | |
| } | |
| is thief_free | |
| room_points 10 | |
| w_to living_room | |
| u_to attic | |
| d_to | |
| { | |
| "Only Santa Claus climbs down chimneys." | |
| } | |
| e_to | |
| { | |
| if kitchen_window is not open | |
| { | |
| "The kitchen window is closed." | |
| } | |
| else | |
| { | |
| return kitchen_window.door_to | |
| } | |
| } | |
| out_to | |
| { | |
| if kitchen_window is not open | |
| { | |
| "The kitchen window is closed." | |
| } | |
| else | |
| { | |
| return kitchen_window.door_to | |
| } | |
| } | |
| } | |
| scenery table "table" | |
| { | |
| noun "table" | |
| adjective "kitchen" | |
| article "the" | |
| in kitchen | |
| is platform | |
| capacity 50 | |
| contains_desc | |
| { | |
| "On the kitchen table you can see"; | |
| } | |
| } | |
| object sack "sack" | |
| { | |
| nouns "sack" "bag" | |
| adjectives "elongated" "brown" | |
| article "a" | |
| in kitchen | |
| is container, openable, not open, burnable | |
| capacity 10 | |
| initial_desc | |
| { | |
| "On the table is an elongated brown sack, smelling of | |
| hot peppers." | |
| } | |
| long_desc | |
| { | |
| "The sack is "; | |
| if self is open | |
| { | |
| "open." | |
| } | |
| else | |
| { | |
| "closed." | |
| } | |
| } | |
| before | |
| { | |
| object DoSmell | |
| { | |
| "It smells of hot peppers." | |
| } | |
| } | |
| } | |
| object lunch "lunch" | |
| { | |
| nouns "lunch" "sandwich" | |
| adjectives "hot" "pepper" | |
| article "a" | |
| in sack | |
| size 5 | |
| before | |
| { | |
| object DoEat | |
| { | |
| "Thank you very much. It really hit the spot." | |
| remove lunch | |
| } | |
| } | |
| after | |
| { | |
| object DoGet | |
| { | |
| lunch.name = "hot pepper sandwich" | |
| return false | |
| } | |
| } | |
| } | |
| object garlic "clove of garlic" | |
| { | |
| noun "garlic" | |
| adjective "clove" | |
| article "a" | |
| in sack | |
| size 5 | |
| before | |
| { | |
| object DoEat | |
| { | |
| "What the heck! You won't make friends this way, but | |
| nobody around here is too friendly anyhow. Gulp!" | |
| remove garlic | |
| } | |
| } | |
| } | |
| object bottle "bottle" | |
| { | |
| noun "bottle" | |
| adjective "glass" | |
| article "a" | |
| in kitchen | |
| is container, transparent, openable, not open | |
| capacity 5 | |
| initial_desc | |
| { | |
| "A bottle is sitting on the table." | |
| } | |
| long_desc | |
| { | |
| if child(self) > 0 | |
| { | |
| "The bottle contains a quantity of water." | |
| } | |
| else | |
| { | |
| "The bottle is empty." | |
| } | |
| } | |
| before | |
| { | |
| object DoFill | |
| { | |
| if self is not open | |
| { | |
| "The bottle is closed." | |
| } | |
| else | |
| { | |
| if child(bottle) ~= 0 | |
| { | |
| "The bottle is full already." | |
| } | |
| elseif FindObject(river, location) or | |
| FindObject(lake, location) or | |
| FindObject(water_in_stream, location) | |
| { | |
| move water to bottle | |
| "The bottle is now full of water." | |
| } | |
| else | |
| { | |
| "There is nothing here with which to | |
| fill the bottle." | |
| } | |
| } | |
| } | |
| object DoOpen | |
| { | |
| "The bottle is now open." | |
| self is open | |
| return true | |
| } | |
| object DoPour | |
| { | |
| if self is not open | |
| { | |
| "The bottle is closed." | |
| } | |
| else | |
| { | |
| Perform(&DoPour, water) | |
| } | |
| } | |
| } | |
| } | |
| object water "water" | |
| { | |
| noun "water" | |
| article "a quantity of" | |
| in bottle | |
| size 5 | |
| long_desc | |
| { | |
| "It looks like ordinary water to me." | |
| } | |
| before | |
| { | |
| object DoGet | |
| { | |
| if bottle is not open | |
| { | |
| "It's in the bottle. Perhaps you should | |
| take that instead." | |
| } | |
| else | |
| { | |
| "The water slips through your fingers." | |
| } | |
| } | |
| object DoDrink | |
| { | |
| if bottle is not open | |
| { | |
| "You'll have to open the bottle first." | |
| } | |
| else | |
| { | |
| "Thank you very much. I was rather thirsty | |
| (from all this talking, probably)." | |
| remove water | |
| } | |
| } | |
| object DoPour | |
| { | |
| if bottle is not open | |
| { | |
| "The bottle is closed." | |
| } | |
| elseif not xobject or | |
| xobject = ground | |
| { | |
| "The water spills to the floor and evaporates | |
| immediately." | |
| remove water | |
| } | |
| elseif xobject = candles and | |
| candles is light | |
| { | |
| remove water | |
| Perform(&DoExtinguish, candles) | |
| } | |
| elseif xobject = red_hot_bell | |
| { | |
| "The water cools the bell and is evaporated." | |
| remove water | |
| remove red_hot_bell | |
| move brass_bell to entrance_to_hades | |
| Deactivate(HotBell) | |
| } | |
| elseif xobject = ivory_torch | |
| { | |
| "The water evaporates before it gets close." | |
| remove water | |
| } | |
| elseif xobject = surrounding_wall or | |
| xobject = granite_wall | |
| { | |
| "The water splashes on the walls and | |
| evaporates immediately." | |
| remove water | |
| } | |
| else | |
| { | |
| "The water spills over "; | |
| print The(xobject); | |
| ", to the floor, and evaporates." | |
| remove water | |
| } | |
| } | |
| } | |
| } | |
| LightRoom living_room "Living Room" | |
| { | |
| long_desc | |
| { | |
| "You are in the living room. There is a doorway to the | |
| east"; | |
| if wooden_door is special | |
| { | |
| ". To the west is a cyclops-shaped opening in an old | |
| wooden door, above which is some strange gothic | |
| lettering, "; | |
| } | |
| else | |
| { | |
| ", a wooden door with strange gothic lettering to the | |
| west, which appears to be nailed shut, "; | |
| } | |
| "a trophy case, "; | |
| if rug is not moved | |
| { | |
| "and a large oriental rug in the center of the room." | |
| } | |
| elseif rug is moved and | |
| trap_door is not open | |
| { | |
| "and a closed trap door at your feet." | |
| } | |
| else | |
| { | |
| "and a rug lying beside an open trap door." | |
| } | |
| } | |
| is thief_free | |
| w_to | |
| { | |
| if wooden_door is not special | |
| { | |
| "The door is nailed shut." | |
| } | |
| else | |
| { | |
| return strange_passage | |
| } | |
| } | |
| e_to kitchen | |
| d_to | |
| { | |
| if rug is not moved | |
| { | |
| "You can't go that way." | |
| } | |
| elseif trap_door is not open | |
| { | |
| "The trap door is closed." | |
| } | |
| else | |
| { | |
| if trap_door is not special | |
| { | |
| "The trap door crashes shut, and you hear | |
| someone barring it." | |
| trap_door is not open | |
| } | |
| return cellar | |
| } | |
| } | |
| } | |
| scenery wooden_door "wooden door" | |
| { | |
| nouns "door" "lettering" "words" | |
| adjectives "wooden" "strange" "gothic" | |
| article "a" | |
| in living_room | |
| is openable, not open, readable | |
| long_desc | |
| { | |
| "The engravings translate to \"This space intentionally | |
| left blank.\"" | |
| } | |
| before | |
| { | |
| object DoOpen | |
| { | |
| "The door cannot be opened." | |
| } | |
| } | |
| } | |
| scenery nails "nails" | |
| { | |
| nouns "nail" "nails" | |
| article "the" | |
| in living_room | |
| } | |
| scenery trophy_case "trophy case" | |
| { | |
| noun "case" | |
| adjective "trophy" | |
| article "the" | |
| in living_room | |
| is container, transparent, openable, not open | |
| capacity 1000 | |
| contains_desc | |
| { | |
| "Your collection of treasures consists of"; | |
| } | |
| before | |
| { | |
| object DoGet | |
| { | |
| "The trophy case is securely fastened to the wall." | |
| return true | |
| } | |
| object DoLook, DoLookIn | |
| { | |
| if children(self) = 0 | |
| { | |
| "The trophy case is empty." | |
| return true | |
| } | |
| return false | |
| } | |
| xobject DoPutIn | |
| { | |
| if object is valuable and | |
| object is not deposited and | |
| self is open | |
| { | |
| score += object.deposit_points | |
| object is deposited | |
| } | |
| return false | |
| } | |
| } | |
| after | |
| { | |
| xobject DoPutIn | |
| { | |
| local c, i | |
| for i in trophy_case | |
| { | |
| if i is valuable | |
| { | |
| c++ | |
| } | |
| } | |
| if c = 19 and | |
| ancient_map in nothing | |
| { | |
| "An almost inaudible voice whispers in | |
| your ear, \"Look to your treasures for the | |
| final secret.\"" | |
| move ancient_map to trophy_case | |
| return true | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| object ancient_map "ancient map" | |
| { | |
| noun "map" "parchment" | |
| adjective "ancient" | |
| article "an" | |
| in nothing | |
| is readable | |
| initial_desc | |
| { | |
| "In the trophy case is an ancient parchment which appears | |
| to be a map." | |
| } | |
| long_desc | |
| { | |
| "The map shows a forest with three clearings. The largest | |
| clearing contains a house. Three paths leave the large | |
| clearing. One of these paths, leading southwest, is marked | |
| \"To Stone Barrow\"." | |
| } | |
| } | |
| scenery rug "rug" | |
| { | |
| nouns "carpet" "rug" | |
| adjectives "large" "oriental" | |
| article "a" | |
| in living_room | |
| before | |
| { | |
| object DoLift | |
| { | |
| if self is moved | |
| { | |
| "The rug is extremely heavy and cannot be | |
| carried." | |
| } | |
| else | |
| { | |
| "The rug is extremely heavy and cannot be | |
| carried, but in trying to take it you have | |
| noticed an irregularity beneath it." | |
| } | |
| } | |
| object DoGet | |
| { | |
| "The rug is extremely heavy and cannot be carried." | |
| } | |
| object DoEnter | |
| { | |
| "As you sit, you notice an irregularity underneath | |
| it. Rather than be uncomfortable, you stand up again." | |
| } | |
| object DoMove, DoPull | |
| { | |
| if self is moved | |
| { | |
| "Having moved the carpet previously, you find | |
| it impossible to move it again." | |
| } | |
| else | |
| { | |
| "With a great effort, the rug is moved to one | |
| side of the room, revealing the dusty cover | |
| of a closed trap door." | |
| self is moved | |
| trap_door.between #1 = living_room | |
| trap_door.between #2 = cellar | |
| } | |
| } | |
| object DoFly | |
| { | |
| "I suppose you think it's a magic carpet?" | |
| } | |
| object DoLookUnder | |
| { | |
| if self is moved | |
| { | |
| return false | |
| } | |
| else | |
| { | |
| "Underneath the rug is a closed trap door. As | |
| you drop the corner of the rug, the trap door | |
| is once again concealed from view." | |
| } | |
| } | |
| } | |
| } | |
| door trap_door "trap door" | |
| { | |
| noun "door" | |
| adjectives "dusty" "trap" | |
| article "a" | |
| between 0, 0 | |
| is static, not open | |
| long_desc | |
| { | |
| "The trap door is "; | |
| if self is open | |
| { | |
| "open." | |
| } | |
| else | |
| { | |
| "closed." | |
| } | |
| } | |
| after | |
| { | |
| object DoOpen | |
| { | |
| "The door reluctantly opens to reveal a | |
| rickety staircase descending into darkness." | |
| } | |
| object DoClose | |
| { | |
| "The door swings shut and closes." | |
| } | |
| } | |
| } | |
| object sword "sword" | |
| { | |
| noun "sword" | |
| adjectives "elvish" | |
| article "a" | |
| is weapon, sharp | |
| in living_room | |
| size 10 | |
| initial_desc | |
| { | |
| "Above the trophy case hangs an elvish sword of great | |
| antiquity." | |
| } | |
| long_desc | |
| { | |
| select current_threat_level | |
| case 0 | |
| { | |
| return false | |
| } | |
| case 1 | |
| { | |
| "Your sword is glowing with a faint blue glow." | |
| } | |
| case 2 | |
| { | |
| "Your sword is glowing very brightly." | |
| } | |
| } | |
| } | |
| object lamp "brass lantern" | |
| { | |
| nouns "lamp" "lantern" "light" | |
| adjectives "battery-powered" "brass" | |
| article "a" | |
| is switchable | |
| in living_room | |
| misc 395 | |
| size 10 | |
| initial_desc | |
| { | |
| "A battery-powered brass lantern is on the trophy case." | |
| } | |
| long_desc | |
| { | |
| "The lamp "; | |
| if self.misc = 0 | |
| { | |
| "has burned out." | |
| } | |
| elseif self is switchedon | |
| { | |
| "is on." | |
| } | |
| else | |
| { | |
| "is off." | |
| } | |
| } | |
| before | |
| { | |
| object DoThrowAt | |
| { | |
| "The lamp has smashes into the floor, and the | |
| light goes out." | |
| remove lamp | |
| move broken_lantern to location | |
| } | |
| object DoSwitchOn | |
| { | |
| if self.misc = 0 | |
| { | |
| "You can't turn that on." | |
| return true | |
| } | |
| return false | |
| } | |
| object DoSwitchOff | |
| { | |
| if self.misc = 0 | |
| { | |
| "You can't turn that off." | |
| return true | |
| } | |
| return false | |
| } | |
| } | |
| after | |
| { | |
| object DoSwitchOn | |
| { | |
| self is light | |
| Activate(LampDaemon) | |
| if self in player or | |
| self in location | |
| { | |
| "The brass lantern is now on. " | |
| FindLight(location) | |
| if location is not visited | |
| { | |
| DescribePlace(location) | |
| location is visited | |
| } | |
| } | |
| } | |
| object DoSwitchOff | |
| { | |
| self is not light | |
| Deactivate(LampDaemon) | |
| if self in player or | |
| self in location | |
| { | |
| "The brass lantern is now off. " | |
| if not FindLight(location) | |
| { | |
| "It is now pitch dark." | |
| } | |
| } | |
| } | |
| } | |
| } | |
| object broken_lantern "broken lantern" | |
| { | |
| nouns "lamp" "lantern" | |
| adjectives "broken" "brass" | |
| article "a" | |
| in nothing | |
| size 10 | |
| } | |
| DarkRoom attic "Attic" | |
| { | |
| long_desc | |
| { | |
| "This is the attic. The only exit is a stairway | |
| leading down." | |
| } | |
| is thief_free | |
| d_to kitchen | |
| } | |
| scenery table1 "table" | |
| { | |
| noun "table" | |
| article "a" | |
| in attic | |
| is platform | |
| capacity 50 | |
| contains_desc | |
| { | |
| "On the table you can see"; | |
| } | |
| } | |
| attachable rope "rope" | |
| { | |
| noun "rope" | |
| article "a" | |
| in attic | |
| initial_desc | |
| { | |
| "A large coil of rope is lying in the corner." | |
| } | |
| long_desc | |
| { | |
| if railing is special | |
| { | |
| "The rope is tied to the wooden railing." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| attach_verbs "tie", "attach" | |
| detach_verbs "untie", "detach" | |
| attached_to 0 | |
| attachable_to railing | |
| attach_drop is true | |
| before | |
| { | |
| object DoClimb | |
| { | |
| if railing is special | |
| { | |
| MovePlayer(torch_room) | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoDrop | |
| { | |
| if location = dome_room | |
| { | |
| "The rope drops gently to the floor below." | |
| move rope to torch_room | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoTie | |
| { | |
| if xobject = railing and | |
| railing is not special | |
| { | |
| "The rope drops over the side and comes | |
| within ten feet of the floor." | |
| railing is special | |
| rope is hidden | |
| } | |
| return false | |
| } | |
| } | |
| after | |
| { | |
| object DoUntie, DoGet | |
| { | |
| if railing is special | |
| { | |
| railing is not special | |
| rope is not hidden | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| object nasty_knife "nasty knife" | |
| { | |
| noun "knife" | |
| adjective "nasty" | |
| article "a" | |
| is weapon, sharp | |
| in attic | |
| initial_desc | |
| { | |
| "On a table is a nasty-looking knife." | |
| } | |
| after | |
| { | |
| object DoGet | |
| { | |
| table1 is not hidden | |
| return false | |
| } | |
| } | |
| } | |
| !--------------------------------------------------------------------------- | |
| ! UNDERGROUND LOCATIONS | |
| !--------------------------------------------------------------------------- | |
| DarkRoom cellar "Cellar" | |
| { | |
| long_desc | |
| { | |
| "You are in a dark and damp cellar with a narrow | |
| passageway leading north, and a crawlway to the south. | |
| On the west is the bottom of a steep metal ramp which | |
| is unclimbable." | |
| } | |
| is thief_free | |
| room_points 25 | |
| threat_level 1 | |
| u_to | |
| { | |
| if trap_door is not open | |
| { | |
| "The trap door is closed." | |
| } | |
| else | |
| { | |
| return trap_door.door_to | |
| } | |
| } | |
| s_to east_of_chasm | |
| n_to troll_room | |
| w_to | |
| { | |
| "You try to ascend the ramp, but it is impossible, and | |
| you slide back down." | |
| } | |
| } | |
| DarkRoom east_of_chasm "East of Chasm" | |
| { | |
| long_desc | |
| { | |
| "You are on the east edge of a chasm, the bottom of which | |
| cannot be seen. A narrow passage goes north, and the path | |
| you are on continues to the east." | |
| } | |
| before | |
| { | |
| location DoJump | |
| { | |
| "This was not a very safe place to try jumping." | |
| JumpMessage | |
| NotDeadYet | |
| } | |
| } | |
| is thief_free | |
| n_to cellar | |
| e_to gallery | |
| } | |
| scenery chasm_item "chasm" | |
| { | |
| noun "chasm" | |
| article "the" | |
| is container, open | |
| found_in east_of_chasm, chasm | |
| capacity 100 | |
| before | |
| { | |
| xobject DoThrowIn | |
| { | |
| print CThe(object); | |
| " drops out of sight into the chasm." | |
| remove object | |
| } | |
| } | |
| } | |
| DarkRoom gallery "Gallery" | |
| { | |
| long_desc | |
| { | |
| "This is an art gallery. Most of the paintings have been | |
| stolen by vandals with exceptional taste. The vandals left | |
| through either the north or west exits." | |
| } | |
| is thief_free | |
| n_to studio | |
| w_to east_of_chasm | |
| } | |
| treasure painting "beautiful painting" | |
| { | |
| nouns "painting" "picture" | |
| adjective "beautiful" | |
| article "a" | |
| in gallery | |
| is burnable | |
| take_points 4 | |
| deposit_points 6 | |
| initial_desc | |
| { | |
| "Fortunately, there is still one chance for you to be a | |
| vandal, for on the far wall is a painting of unparalleled | |
| beauty." | |
| } | |
| short_desc | |
| { | |
| "A painting by a neglected genius is here." | |
| } | |
| before | |
| { | |
| object DoCut | |
| { | |
| if xobject is weapon | |
| { | |
| "Congratulations! Unlike the other vandals, | |
| who merely stole the artist's masterpieces, | |
| you have destroyed one." | |
| remove painting | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoBurn | |
| { | |
| if xobject is heat_source | |
| { | |
| "Congratulations! Unlike the other vandals, | |
| who merely stole the artist's masterpieces, | |
| you have destroyed one." | |
| remove painting | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| DarkRoom studio "Studio" | |
| { | |
| long_desc | |
| { | |
| "This appears to have been an artist's studio. The walls and | |
| floors are splattered with paints of 69 different colors. | |
| Strangely enough, nothing of value is hanging here. At the | |
| south end of the room is an open door (also covered with | |
| paint). A dark and narrow chimney leads up from a fireplace; | |
| although you might be able to get up it, it seems unlikely | |
| you could get back down." | |
| } | |
| is thief_free | |
| u_to | |
| { | |
| local x | |
| x = children(player) | |
| if x = 0 | |
| { | |
| "Going up empty-handed is a bad idea." | |
| } | |
| elseif x > 2 or | |
| (x <= 2 and not ObjectisLight(player)) | |
| { | |
| "You can't get up there with what you're carrying." | |
| } | |
| elseif ObjectisLight(player) and | |
| x <= 2 | |
| { | |
| MovePlayer(kitchen) | |
| } | |
| } | |
| s_to gallery | |
| } | |
| object piece_of_paper "ZORK owner's manual" | |
| { | |
| nouns "paper" "zork" "manual" | |
| adjectives "owner's" "piece" | |
| article "a" | |
| is readable, burnable | |
| in studio | |
| initial_desc | |
| { | |
| "Loosely attached to a wall is a small piece of paper." | |
| } | |
| long_desc | |
| { | |
| "Congratulations!\n" | |
| "You are the privileged owner of HUGO ZORK I: The Great | |
| Underground Empire, a self-contained and self-maintaining | |
| universe. If used and maintained in accordance with normal | |
| operating practices for small universes, HUGO ZORK will | |
| provide many months of trouble-free operation." | |
| } | |
| } | |
| DarkRoom troll_room "Troll Room" | |
| { | |
| long_desc | |
| { | |
| "This is a small room with passages to the east and south | |
| and a forbidding hole leading west. Bloodstains and deep | |
| scratches (perhaps made by an axe) mar the walls." | |
| } | |
| is thief_free | |
| threat_level 2 | |
| s_to cellar | |
| w_to | |
| { | |
| if troll is not unconscious and | |
| troll in location | |
| { | |
| "The troll fends you off with a menacing gesture." | |
| } | |
| else | |
| { | |
| return maze1 | |
| } | |
| } | |
| e_to | |
| { | |
| if troll is not unconscious and | |
| troll in location | |
| { | |
| "The troll fends you off with a menacing gesture." | |
| } | |
| else | |
| { | |
| return east_west_passage | |
| } | |
| } | |
| } | |
| DarkRoom grating_room "Grating Room" | |
| { | |
| long_desc | |
| { | |
| "You are in a small room near the maze. There are twisty | |
| passages in the immediate vicinity." | |
| if grating is not open | |
| { | |
| "Above you is a grating with a skull and | |
| crossbones lock." | |
| } | |
| else | |
| { | |
| "Above you is an open grating with sunlight pouring | |
| in." | |
| } | |
| } | |
| u_to grating | |
| sw_to maze11 | |
| } | |
| !--------------------------------------------------------------------------- | |
| ! The Maze (Oh, The Horror!) | |
| !--------------------------------------------------------------------------- | |
| MazeRoom maze1 "Maze" | |
| { | |
| n_to maze1 | |
| s_to maze2 | |
| e_to troll_room | |
| w_to maze4 | |
| } | |
| MazeRoom maze2 "Maze" | |
| { | |
| s_to maze1 | |
| e_to maze3 | |
| d_to { | |
| "You won't be able to get back up to the tunnel you are | |
| going through when it gets to the next room." | |
| MovePlayer(maze4) | |
| } | |
| } | |
| MazeRoom maze3 "Maze" | |
| { | |
| n_to maze4 | |
| w_to maze2 | |
| u_to maze5 | |
| } | |
| MazeRoom maze4 "Maze" | |
| { | |
| n_to maze1 | |
| e_to dead_end1 | |
| w_to maze3 | |
| } | |
| MazeRoom maze5 "Maze" | |
| { | |
| long_desc | |
| { | |
| "This is part of a maze of twisty little passages, all | |
| alike. A skeleton, probably the remains of a luckless | |
| adventurer, lies here." | |
| } | |
| n_to maze3 | |
| sw_to maze6 | |
| e_to dead_end3 | |
| } | |
| object skeleton "skeleton" | |
| { | |
| nouns "skeleton" "remains" "adventurer" | |
| adjective "luckless" | |
| article "a" | |
| is hidden | |
| in maze5 | |
| before | |
| { | |
| object DoGet | |
| { | |
| ! This section of code was borrowed from | |
| ! colossal.hug | |
| local c, i, j | |
| "A ghost appears in the room and is appalled at your | |
| desecration of the remains of a fellow adventurer. He | |
| casts a curse on your valuables and banishes them to | |
| the Land of the Living Dead. The ghost leaves, | |
| muttering obscenities." | |
| for i in player | |
| { | |
| if i is valuable | |
| { | |
| c++ | |
| } | |
| } | |
| for i in location | |
| { | |
| if i is valuable | |
| { | |
| c++ | |
| } | |
| } | |
| if c = 0 | |
| { | |
| return true | |
| } | |
| else | |
| { | |
| while c > 0 | |
| { | |
| for i in player | |
| { | |
| if i is valuable | |
| { | |
| j = i | |
| } | |
| } | |
| for i in location | |
| { | |
| if i is valuable | |
| { | |
| j = i | |
| } | |
| } | |
| move j to land_of_the_dead | |
| c-- | |
| } | |
| } | |
| } | |
| } | |
| } | |
| object rusty_knife "rusty knife" | |
| { | |
| noun "knife" | |
| adjective "rusty" | |
| article "a" | |
| is weapon, sharp | |
| in maze5 | |
| initial_desc | |
| { | |
| "Beside the skeleton is a rusty knife." | |
| } | |
| before | |
| { | |
| object DoGet | |
| { | |
| if Contains(player, sword) | |
| { | |
| "As you touch the rusty knife, your sword | |
| gives a single pulse of blinding blue light." | |
| return false | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| xobject DoHit | |
| { | |
| if object is living | |
| { | |
| "As the knife approaches its victim, your | |
| mind is submerged by an overmastering will. | |
| Slowly, your hand turns, until the rusty | |
| blade is an inch from your neck. The knife | |
| seems to sing as it savagely slits your | |
| throat." | |
| NotDeadYet | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| object burned_out_lantern "burned-out lantern" | |
| { | |
| nouns "lamp" "lantern" | |
| adjective "burned-out" | |
| article "a" | |
| in maze5 | |
| is switchable | |
| size 10 | |
| initial_desc | |
| { | |
| "The deceased adventurer's useless lantern is here." | |
| } | |
| before | |
| { | |
| object DoSwitchOn | |
| { | |
| "A burned-out lamp won't light." | |
| } | |
| object DoSwitchOff | |
| { | |
| "The lamp has already burned out." | |
| } | |
| } | |
| } | |
| object skeleton_key "skeleton key" | |
| { | |
| noun "key" | |
| article "a" | |
| size 10 | |
| in maze5 | |
| } | |
| treasure coins "bag of coins" | |
| { | |
| nouns "coins" "bag" | |
| article "a" | |
| is container, not openable, not open | |
| in maze5 | |
| take_points 10 | |
| deposit_points 5 | |
| initial_desc | |
| { | |
| "An old leather bag, bulging with coins, is here." | |
| } | |
| long_desc | |
| { | |
| "There are lots of coins in there." | |
| } | |
| before | |
| { | |
| object DoOpen | |
| { | |
| "The coins are safely inside; there's no need to | |
| do that." | |
| } | |
| } | |
| } | |
| MazeRoom maze6 "Maze" | |
| { | |
| e_to maze7 | |
| w_to maze6 | |
| u_to maze9 | |
| d_to maze5 | |
| } | |
| MazeRoom maze7 "Maze" | |
| { | |
| d_to { "You won't be able to get back up to the tunnel you are | |
| going through when it gets to the next room." | |
| MovePlayer(dead_end1) | |
| } | |
| s_to maze15 | |
| e_to maze8 | |
| w_to maze6 | |
| u_to maze14 | |
| } | |
| MazeRoom maze8 "Maze" | |
| { | |
| ne_to maze7 | |
| se_to dead_end4 | |
| w_to maze8 | |
| } | |
| MazeRoom maze9 "Maze" | |
| { | |
| n_to maze6 | |
| nw_to maze9 | |
| w_to maze12 | |
| s_to maze13 | |
| e_to maze10 | |
| d_to maze11 | |
| } | |
| MazeRoom maze10 "Maze" | |
| { | |
| e_to maze9 | |
| w_to maze13 | |
| u_to maze11 | |
| } | |
| MazeRoom maze11 "Maze" | |
| { | |
| d_to maze10 | |
| sw_to maze12 | |
| nw_to maze13 | |
| ne_to grating_room | |
| } | |
| MazeRoom maze12 "Maze" | |
| { | |
| d_to | |
| { | |
| "You won't be able to get back up to the tunnel you are | |
| going through when it gets to the next room." | |
| MovePlayer(maze5) | |
| } | |
| u_to maze9 | |
| e_to maze13 | |
| n_to dead_end2 | |
| sw_to maze11 | |
| } | |
| MazeRoom maze13 "Maze" | |
| { | |
| s_to maze10 | |
| w_to maze11 | |
| e_to maze9 | |
| d_to maze12 | |
| } | |
| MazeRoom maze14 "Maze" | |
| { | |
| nw_to maze14 | |
| w_to maze15 | |
| s_to maze7 | |
| ne_to maze7 | |
| } | |
| MazeRoom maze15 "Maze" | |
| { | |
| threat_level 1 | |
| w_to maze14 | |
| s_to maze7 | |
| se_to cyclops_room | |
| } | |
| Dead_End_Room dead_end1 "Dead End" | |
| { | |
| s_to maze4 | |
| } | |
| Dead_End_Room dead_end2 "Dead End" | |
| { | |
| s_to maze12 | |
| } | |
| Dead_End_Room dead_end3 "Dead End" | |
| { | |
| w_to maze5 | |
| } | |
| Dead_End_Room dead_end4 "Dead End" | |
| { | |
| n_to maze8 | |
| } | |
| !--------------------------------------------------------------------------- | |
| ! Cyclops Room and Immediate Area | |
| !--------------------------------------------------------------------------- | |
| DarkRoom cyclops_room "Cyclops Room" | |
| { | |
| long_desc | |
| { | |
| "This room has an exit on the northwest, and a staircase | |
| leading up." | |
| } | |
| is thief_free | |
| threat_level 2 | |
| nw_to maze15 | |
| u_to | |
| { | |
| if cyclops in location and | |
| cyclops is not unconscious | |
| { | |
| "The cyclops doesn't look like he'll let you past." | |
| } | |
| elseif player is not ghost and | |
| thief is living | |
| { | |
| "You hear a scream of anguish as you violate the | |
| robber's hideaway. Using passages unknown to you, | |
| he rushes to its defense." | |
| "The thief gestures mysteriously, and the treasures | |
| in the room suddenly vanish." | |
| move silver_chalice to thiefs_bag | |
| move thief to treasure_room | |
| thief is hostile | |
| return treasure_room | |
| } | |
| else | |
| { | |
| return treasure_room | |
| } | |
| } | |
| e_to | |
| { | |
| if cyclops in location and | |
| cyclops is not unconscious | |
| { | |
| "The cyclops doesn't look like he'll let you past." | |
| } | |
| else | |
| { | |
| return strange_passage | |
| } | |
| } | |
| } | |
| DarkRoom treasure_room "Treasure Room" | |
| { | |
| long_desc | |
| { | |
| "This is a large room, whose east wall is solid granite. A | |
| number of discarded bags, which crumble at your touch, are | |
| scattered about on the floor. There is an exit down a | |
| staircase." | |
| } | |
| room_points 25 | |
| d_to cyclops_room | |
| e_to | |
| { | |
| "The east wall is solid granite here." | |
| } | |
| } | |
| treasure silver_chalice "silver chalice" | |
| { | |
| noun "chalice" | |
| adjective "chalice" | |
| article "a" | |
| in treasure_room | |
| take_points 10 | |
| deposit_points 5 | |
| initial_desc | |
| { | |
| "There is a silver chalice, intricately engraved, here." | |
| } | |
| before | |
| { | |
| object DoGet | |
| { | |
| if thief is not unconscious | |
| { | |
| "You'd be stabbed in the back first." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| DarkRoom strange_passage "Strange Passage" | |
| { | |
| long_desc | |
| { | |
| "This is a long passage. To the west is one entrance. On | |
| the east there is an old wooden door, with a large opening | |
| in it (about cyclops sized)." | |
| } | |
| is thief_free | |
| w_to cyclops_room | |
| e_to living_room | |
| } | |
| DarkRoom east_west_passage "East-West Passage" | |
| { | |
| long_desc | |
| { | |
| "This is a narrow east-west passageway. There is a narrow | |
| stairway leading down at the north end of the room." | |
| } | |
| w_to troll_room | |
| e_to round_room | |
| n_to chasm | |
| d_to chasm | |
| } | |
| DarkRoom round_room "Round Room" | |
| { | |
| long_desc | |
| { | |
| "This is a circular stone room with passages in all | |
| directions. Several of them have unfortunately been blocked | |
| by cave-ins." | |
| } | |
| w_to east_west_passage | |
| e_to loud_room | |
| n_to north_south_passage | |
| s_to narrow_passage | |
| se_to engravings_cave | |
| } | |
| DarkRoom loud_room "Loud Room" | |
| { | |
| long_desc | |
| { | |
| "This is a large room with a ceiling which cannot be | |
| detected from the ground. There is a narrow passage from | |
| east to west and a stone stairway leading upward. "; | |
| if self is special | |
| { | |
| "The room is eerie in its quietness." | |
| } | |
| else | |
| { | |
| "The room is deafeningly loud with an undetermined | |
| rushing sound. The sound seems to reverberate from | |
| all of the walls, making it difficult even to think." | |
| } | |
| } | |
| is thief_free ! Keeps the thief from stealing the platinum bar | |
| before | |
| { | |
| location DoEcho | |
| { | |
| if self is not special | |
| { | |
| "The acoustics of the room change subtly." | |
| self is special | |
| DescribePlace(loud_room, 1) | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| location | |
| { | |
| if (word[1] = "go" or | |
| word[1] = "walk") and | |
| word[2] ~= "" | |
| { | |
| word[1] = word[2] | |
| } | |
| if self is special or | |
| word[1] = "e" or | |
| word[1] = "east" or | |
| word[1] = "w" or | |
| word[1] = "west" or | |
| word[1] = "u" or | |
| word[1] = "up" or | |
| verbroutine = &DoSave or | |
| verbroutine = &DoRestore or | |
| verbroutine = &DoQuit | |
| { | |
| return false | |
| } | |
| else | |
| { | |
| if word[1] = "bug" | |
| { | |
| "That's only your opinion." | |
| } | |
| else | |
| { | |
| print word[words]; | |
| " "; | |
| print word[words]; | |
| " ..." | |
| words = 0 | |
| word[1] = "" | |
| } | |
| } | |
| } | |
| } | |
| after | |
| { | |
| location | |
| { | |
| if reservoir_status = 3 | |
| { | |
| "It is unbearably loud here, with an | |
| ear-splitting roar seeming to come from all | |
| around you. There is a pounding in your head | |
| which won't stop. With a tremendous effort, | |
| you scramble out of the room." | |
| DoTooLoud | |
| } | |
| return false | |
| } | |
| } | |
| w_to round_room | |
| e_to damp_cave | |
| u_to deep_canyon | |
| } | |
| treasure platinum_bar "platinum bar" | |
| { | |
| noun "bar" | |
| adjectives "large" "platinum" | |
| article "a" | |
| in loud_room | |
| take_points 10 | |
| deposit_points 5 | |
| initial_desc | |
| { | |
| "On the ground is a large platinum bar." | |
| } | |
| } | |
| DarkRoom damp_cave "Damp Cave" | |
| { | |
| long_desc | |
| { | |
| "This cave has exits to the west and east, and narrows to a | |
| crack toward the south. The earth is particularly damp here." | |
| } | |
| w_to loud_room | |
| e_to beach_north | |
| } | |
| DarkRoom beach_north "White Cliffs Beach" | |
| { | |
| long_desc | |
| { | |
| "You are on a narrow strip of beach which runs along the | |
| base of the White Cliffs. There is a narrow path heading | |
| south along the Cliffs and a tight passage leading west | |
| into the cliffs themselves." | |
| } | |
| is thief_free | |
| w_to damp_cave | |
| s_to | |
| { | |
| if Contains(player, magic_boat) | |
| { | |
| "The path is too narrow." | |
| } | |
| else | |
| { | |
| return beach_south | |
| } | |
| } | |
| } | |
| DarkRoom beach_south "White Cliffs Beach" | |
| { | |
| long_desc | |
| { | |
| "You are on a rocky, narrow strip of beach beside the Cliffs. | |
| A narrow path leads north along the shore." | |
| } | |
| is thief_free | |
| n_to | |
| { | |
| if Contains(player, magic_boat) | |
| { | |
| "The path is too narrow." | |
| } | |
| else | |
| { | |
| return beach_north | |
| } | |
| } | |
| } | |
| DarkRoom river1 "Frigid River" | |
| { | |
| long_desc | |
| { | |
| "You are on the Frigid River in the vicinity of the Dam. | |
| The river flows quietly here. There is a landing on the | |
| west shore." | |
| } | |
| is water_location, thief_free | |
| w_to dam_base | |
| } | |
| DarkRoom river2 "Frigid River" | |
| { | |
| long_desc | |
| { | |
| "The river turns a corner here making it impossible to see | |
| the Dam. The White Cliffs loom on the east bank and large | |
| rocks prevent landing on the west." | |
| } | |
| is water_location, thief_free | |
| } | |
| DarkRoom river3 "Frigid River" | |
| { | |
| long_desc | |
| { | |
| "The river descends here into a valley. There is a narrow | |
| beach on the west shore below the cliffs. In the distance | |
| a faint rumbling can be heard." | |
| } | |
| is water_location, thief_free | |
| w_to beach_north | |
| } | |
| DarkRoom river4 "Frigid River" | |
| { | |
| long_desc | |
| { | |
| "The river is running faster here and the sound ahead | |
| appears to be that of rushing water. On the east shore | |
| is a sandy beach. A small area of beach can also be seen | |
| below the cliffs on the west shore." | |
| } | |
| is water_location, thief_free | |
| w_to beach_south | |
| e_to sandy_beach | |
| } | |
| object red_buoy "red buoy" | |
| { | |
| noun "buoy" | |
| adjectives "red" "warning" | |
| article "a" | |
| in river4 | |
| is container, openable, not open | |
| capacity 10 | |
| initial_desc | |
| { | |
| "There is a red buoy here (probably a warning)." | |
| } | |
| before | |
| { | |
| object DoTouch | |
| { | |
| "You notice something funny about the feel of | |
| the buoy." | |
| } | |
| } | |
| } | |
| treasure large_emerald "large emerald" | |
| { | |
| noun "emerald" | |
| adjective "large" | |
| article "a" | |
| take_points 5 | |
| deposit_points 10 | |
| in red_buoy | |
| } | |
| DarkRoom river5 "Frigid River" | |
| { | |
| long_desc | |
| { | |
| "The sound of rushing water is nearly unbearable here. | |
| On the east shore is a large landing area." | |
| } | |
| is water_location, thief_free | |
| e_to shore | |
| } | |
| scenery river "river" | |
| { | |
| noun "river" | |
| adjective "frigid" | |
| article "the" | |
| is container, open | |
| found_in dam_base, river1, river2, river3, river4, river5 \ | |
| sandy_beach, shore, beach_north, beach_south | |
| capacity 100 | |
| before | |
| { | |
| xobject DoThrowIn | |
| { | |
| print CThe(object); | |
| " floats for a moment, then sinks." | |
| remove object | |
| } | |
| } | |
| } | |
| DarkRoom sandy_cave "Sandy Cave" | |
| { | |
| long_desc | |
| { | |
| "This is a sand-filled cave whose exit is to the | |
| southwest." | |
| } | |
| is thief_free | |
| sw_to sandy_beach | |
| before | |
| { | |
| location DoDig | |
| { | |
| if object = ground and | |
| xobject = shovel | |
| { | |
| hole_depth++ | |
| select hole_depth | |
| case 1 | |
| { | |
| "You seem to be digging a hole here." | |
| } | |
| case 2 | |
| { | |
| "The hole is getting deeper, but | |
| that's about it." | |
| } | |
| case 3 | |
| { | |
| "You are surrounded by a wall of | |
| sand on all sides." | |
| } | |
| case 4 | |
| { | |
| "You can see a scarab here in the | |
| sand." | |
| move scarab to location | |
| } | |
| case 5 | |
| { | |
| "The hole collapses, smothering you." | |
| NotDeadYet | |
| } | |
| } | |
| elseif object = ground and | |
| xobject = hands | |
| { | |
| "Digging with the pair of hands is slow | |
| and tedious." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| treasure scarab "beautiful jeweled scarab" | |
| { | |
| noun "scarab" | |
| adjectives "beautiful" "jeweled" | |
| article "a" | |
| in nothing | |
| take_points 5 | |
| deposit_points 5 | |
| initial_desc | |
| { | |
| "You can see a scarab here in the sand." | |
| } | |
| } | |
| DarkRoom sandy_beach "Sandy Beach" | |
| { | |
| long_desc | |
| { | |
| "You are on a large sandy beach on the east shore of the | |
| river, which is flowing quickly by. A path runs beside the | |
| river to the south here, and a passage is partially buried | |
| in sand to the northeast." | |
| } | |
| is thief_free | |
| ne_to sandy_cave | |
| s_to shore | |
| } | |
| object shovel "shovel" | |
| { | |
| noun "shovel" | |
| article "a" | |
| in sandy_beach | |
| } | |
| DarkRoom shore "Shore" | |
| { | |
| long_desc | |
| { | |
| "You are on the east shore of the river. The water here | |
| seems somewhat treacherous. A path travels from north to | |
| south here, the south end quickly turning around a sharp | |
| corner." | |
| } | |
| is thief_free | |
| n_to sandy_beach | |
| s_to aragain_falls | |
| } | |
| DarkRoom aragain_falls "Aragain Falls" | |
| { | |
| long_desc | |
| { | |
| "You are at the top of Aragain Falls, an enormous | |
| waterfall with a drop of about 450 feet. The only | |
| path here is on the north end." | |
| if rainbow is special | |
| { | |
| "A solid rainbow spans the falls." | |
| } | |
| else | |
| { | |
| "A beautiful rainbow can be seen over the | |
| falls and to the west." | |
| } | |
| } | |
| is thief_free | |
| n_to shore | |
| w_to | |
| { | |
| if rainbow is special | |
| { | |
| MovePlayer(on_the_rainbow) | |
| } | |
| else | |
| { | |
| "You can't go that way." | |
| } | |
| } | |
| u_to | |
| { | |
| if rainbow is special | |
| { | |
| MovePlayer(on_the_rainbow) | |
| } | |
| else | |
| { | |
| "You can't go that way." | |
| } | |
| } | |
| before | |
| { | |
| object DoClimb | |
| { | |
| if rainbow is special | |
| { | |
| MovePlayer(on_the_rainbow) | |
| } | |
| else | |
| { | |
| "You can't go that way." | |
| } | |
| } | |
| } | |
| } | |
| LightRoom on_the_rainbow "On The Rainbow" | |
| { | |
| long_desc | |
| { | |
| "You are on top of a rainbow (I bet you never thought you | |
| would walk on a rainbow), with a magnificent view of the | |
| Falls. The rainbow travels east-west here." | |
| } | |
| is thief_free | |
| e_to aragain_falls | |
| w_to end_of_rainbow | |
| } | |
| DarkRoom narrow_passage "Narrow Passage" | |
| { | |
| long_desc | |
| { | |
| "This is a long and narrow corridor where a long north-south | |
| passageway briefly narrows even further." | |
| } | |
| n_to round_room | |
| s_to mirror_south | |
| } | |
| DarkRoom mirror_south "Mirror Room" | |
| { | |
| long_desc | |
| { | |
| "You are in a large square room with tall ceilings. On | |
| the south wall is an enormous mirror which fills the entire | |
| wall. There are exits on the other three sides of the room." | |
| if mirror is special | |
| { | |
| "Unfortunately, the mirror has been destroyed by your | |
| recklessness." | |
| } | |
| } | |
| n_to narrow_passage | |
| w_to winding_passage | |
| e_to cave | |
| } | |
| scenery mirror "mirror" | |
| { | |
| noun "mirror" | |
| adjectives "enormous" "large" | |
| article "a" | |
| found_in mirror_south, mirror_north | |
| before | |
| { | |
| object DoGet | |
| { | |
| "The mirror is many times your size. Give up." | |
| } | |
| object DoLook | |
| { | |
| if self is not special | |
| { | |
| "There is an ugly person staring back at you." | |
| } | |
| else | |
| { | |
| "The mirror is broken into many pieces." | |
| } | |
| } | |
| object DoTouch | |
| { | |
| if self is not special | |
| { | |
| "There is a rumble from deep within the earth | |
| and the room shakes." | |
| if location = mirror_south | |
| { | |
| MovePlayer(mirror_north) | |
| } | |
| else | |
| { | |
| MovePlayer(mirror_south) | |
| } | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoHit | |
| { | |
| if self is not special | |
| { | |
| "You have broken the mirror. I hope you have | |
| a seven years' supply of good luck handy." | |
| self is special | |
| } | |
| else | |
| { | |
| "Haven't you done enough damage already?" | |
| } | |
| } | |
| } | |
| } | |
| DarkRoom winding_passage "Winding Passage" | |
| { | |
| long_desc | |
| { | |
| "This is a winding passage. It seems that there are only | |
| exits on the east and north." | |
| } | |
| n_to mirror_south | |
| e_to cave | |
| } | |
| DarkRoom cave "Cave" | |
| { | |
| long_desc | |
| { | |
| "This is a tiny cave with entrances west and north, and a | |
| dark, forbidding staircase leading down." | |
| } | |
| after | |
| { | |
| location | |
| { | |
| if Contains(player, candles) and | |
| candles is light | |
| { | |
| "A gust of wind blows out your candles!" | |
| candles is not light | |
| candles is not heat_source | |
| Deactivate(Candle) | |
| FindLight(location) | |
| } | |
| } | |
| } | |
| n_to mirror_south | |
| w_to winding_passage | |
| d_to entrance_to_hades | |
| } | |
| DarkRoom entrance_to_hades "Entrance to Hades" | |
| { | |
| long_desc | |
| { | |
| "You are outside a large gateway, on which is inscribed\n" | |
| "\_ Abandon every hope all ye who enter here!\n" | |
| "The gate is open; through it you can see a desolation, with | |
| a pile of mangled bodies in one corner. Thousands of voices, | |
| lamenting some hideous fate, can be heard." | |
| if black_book is not special | |
| { | |
| "The way through the gate is barred by evil spirits, | |
| who jeer at your attempts to pass." | |
| } | |
| } | |
| u_to cave | |
| s_to | |
| { | |
| if black_book is not special | |
| { | |
| "Some invisible force prevents you from passing | |
| through the gate." | |
| } | |
| else | |
| { | |
| return land_of_the_dead | |
| } | |
| } | |
| } | |
| DarkRoom land_of_the_dead "Land of the Dead" | |
| { | |
| long_desc | |
| { | |
| "You have entered the Land of the Living Dead. Thousands of | |
| lost souls can be heard weeping and moaning. In the corner | |
| are stacked the remains of dozens of previous adventurers | |
| less fortunate than yourself. A passage exits to the north." | |
| } | |
| n_to entrance_to_hades | |
| } | |
| treasure skull "crystal skull" | |
| { | |
| noun "skull" | |
| adjective "crystal" "carved" | |
| article "a" | |
| in land_of_the_dead | |
| take_points 10 | |
| deposit_points 10 | |
| initial_desc | |
| { | |
| "Lying in one corner of the room is a beautifully carved | |
| crystal skull. It appears to be grinning at you rather | |
| nastily." | |
| } | |
| } | |
| scenery pile_of_bodies "pile of bodies" | |
| { | |
| nouns "bodies" "remains" | |
| adjective "pile" | |
| article "a" | |
| is plural | |
| in land_of_the_dead | |
| } | |
| DarkRoom engravings_cave "Engravings Cave" | |
| { | |
| long_desc | |
| { | |
| "You have entered a low cave with passages leading northwest | |
| and east." | |
| } | |
| nw_to round_room | |
| e_to | |
| { | |
| if player is ghost | |
| { | |
| "As you enter the dome you feel a strong pull as if | |
| from a wind drawing you over the railing and down." | |
| return torch_room | |
| } | |
| else | |
| { | |
| return dome_room | |
| } | |
| } | |
| } | |
| object engravings "engravings" | |
| { | |
| noun "engravings" | |
| adjective "old" | |
| article "the" | |
| is plural, static, readable | |
| in engravings_cave | |
| initial_desc | |
| { | |
| "There are old engravings on the walls here." | |
| } | |
| long_desc | |
| { | |
| "The engravings were incised in the living rock of the cave | |
| wall by an unknown hand. They depict, in symbolic form, the | |
| beliefs of the ancient Zorkers. Skillfully interwoven with | |
| the bas reliefs are excerpts illustrating the major religious | |
| tenets of that time. Unfortunately, a later age seems to have | |
| considered them blasphemous and just as skillfully excised | |
| them." | |
| } | |
| } | |
| DarkRoom dome_room "Dome Room" | |
| { | |
| long_desc | |
| { | |
| "You are at the periphery of a large dome, which forms | |
| the ceiling of another room below. Protecting you from a | |
| precipitous drop is a wooden railing which circles the dome." | |
| if railing is special | |
| { | |
| "Hanging down from the railing is a rope which ends | |
| about ten feet from the floor below." | |
| } | |
| } | |
| is thief_free | |
| w_to engravings_cave | |
| d_to | |
| { | |
| if railing is not special | |
| { | |
| "You cannot go down without fracturing many bones." | |
| } | |
| else | |
| { | |
| MovePlayer(torch_room) | |
| } | |
| } | |
| } | |
| scenery railing "wooden railing" | |
| { | |
| noun "railing" | |
| adjectives "wood" "wooden" | |
| article "a" | |
| in dome_room | |
| } | |
| DarkRoom torch_room "Torch Room" | |
| { | |
| long_desc | |
| { | |
| "This is a large room with a prominent doorway leading | |
| to a down staircase. Above you is a large dome. Up around | |
| the edge of the dome (20 feet up) is a wooden railing. In | |
| the center of the room sits a white marble pedestal." | |
| if railing is special | |
| { | |
| "A piece of rope descends from the railing above, | |
| ending some five feet above your head." | |
| } | |
| } | |
| is thief_free | |
| s_to temple | |
| d_to temple | |
| u_to | |
| { | |
| if railing is special | |
| { | |
| "You cannot reach the rope." | |
| } | |
| else | |
| { | |
| "You can't go that way." | |
| } | |
| } | |
| } | |
| scenery pedestal "pedestal" | |
| { | |
| noun "pedestal" | |
| adjectives "white" "marble" | |
| article "a" | |
| is platform | |
| } | |
| treasure ivory_torch "ivory torch" | |
| { | |
| noun "torch" | |
| adjective "ivory" | |
| article "an" | |
| take_points 14 | |
| deposit_points 6 | |
| is light, heat_source | |
| in torch_room | |
| initial_desc | |
| { | |
| "Sitting on the pedestal is a flaming torch, made of ivory." | |
| } | |
| before | |
| { | |
| object DoExtinguish | |
| { | |
| "You nearly burn your hand trying to extinguish the | |
| flame." | |
| } | |
| } | |
| } | |
| DarkRoom temple "Temple" | |
| { | |
| long_desc | |
| { | |
| "This is the north end of a large temple. On the east wall | |
| is an ancient inscription, probably a prayer in a | |
| long-forgotten language. Below the prayer is a staircase | |
| leading down. The west wall is solid granite. The exit to the | |
| north end of the room is through huge marble pillars." | |
| } | |
| is thief_free | |
| n_to torch_room | |
| u_to torch_room | |
| s_to altar_room | |
| w_to | |
| { | |
| "The west wall is solid granite here." | |
| } | |
| e_to egyptian_room | |
| d_to egyptian_room | |
| } | |
| scenery granite_wall "granite wall" | |
| { | |
| noun "wall" | |
| adjective "granite" | |
| article "the" | |
| found_in treasure_room, temple | |
| } | |
| scenery inscriptions "inscriptions" | |
| { | |
| noun "inscriptions" "prayer" "language" | |
| adjective "long-forgotten" | |
| article "the" | |
| is readable | |
| long_desc | |
| { | |
| "The prayer is inscribed in an ancient script, rarely used | |
| today. It seems to be a philippic against small insects, | |
| absent-mindedness, and the picking up and dropping of small | |
| objects. The final verse consigns trespassers to the land of | |
| the dead. All evidence indicates that the beliefs of the | |
| ancient Zorkers were obscure." | |
| } | |
| } | |
| object brass_bell "brass bell" | |
| { | |
| noun "bell" | |
| adjective "brass" | |
| article "a" | |
| in temple | |
| before | |
| { | |
| object DoRing | |
| { | |
| if location = entrance_to_hades and | |
| Contains(player, brass_bell) | |
| { | |
| "The bell suddenly becomes red hot and falls | |
| to the ground. The wraiths, as if paralyzed, | |
| stop their jeering and slowly turn to face | |
| you. On their ashen faces, the expression of | |
| a long-forgotten terror takes shape." | |
| remove brass_bell | |
| move red_hot_bell to location | |
| ceremony_1 = 1 | |
| Activate(HotBell, 20) | |
| Activate(Ceremony, 5) | |
| if Contains(player, candles) | |
| { | |
| "In your confusion, the candles drop | |
| to the ground (and they are out)." | |
| move candles to location | |
| candles is not light | |
| candles is not heat_source | |
| Deactivate(Candle) | |
| FindLight(location) | |
| } | |
| } | |
| else | |
| { | |
| "Ding, dong." | |
| } | |
| } | |
| } | |
| } | |
| object red_hot_bell "red hot brass bell" | |
| { | |
| noun "bell" | |
| adjectives "brass" "red" "hot" | |
| article "a" | |
| in nothing | |
| long_desc | |
| { | |
| "On the ground is a red hot bell." | |
| } | |
| before | |
| { | |
| object DoGet | |
| { | |
| "The bell is very hot and cannot be taken." | |
| } | |
| object DoTouch | |
| { | |
| "The bell is too hot to touch." | |
| } | |
| object DoRing | |
| { | |
| "The bell is too hot to reach." | |
| } | |
| } | |
| } | |
| DarkRoom altar_room "Altar" | |
| { | |
| long_desc | |
| { | |
| "This is the south end of a large temple. In front of you is | |
| what appears to be an altar. In one corner is a small hole in | |
| the floor which leads into darkness. You probably could not | |
| get back up it." | |
| } | |
| is thief_free | |
| n_to temple | |
| d_to | |
| { | |
| if Contains(player, coffin) | |
| { | |
| "You haven't a prayer of getting the coffin down | |
| there." | |
| } | |
| else | |
| { | |
| MovePlayer(cave) | |
| } | |
| } | |
| before | |
| { | |
| location | |
| { | |
| ! Starts the candle burn-down timer when the | |
| ! player first enter the room | |
| if self is not special | |
| { | |
| Activate(Candle) | |
| self is special | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| scenery altar "altar" | |
| { | |
| noun "altar" | |
| article "an" | |
| is platform | |
| capacity 10 | |
| in altar_room | |
| } | |
| object black_book "black book" | |
| { | |
| nouns "book" "prayer" | |
| adjectives "large" "black" "page" "pages" "569" | |
| article "a" | |
| is readable, container, openable, open | |
| size 10 | |
| in altar_room | |
| initial_desc | |
| { | |
| "On the altar is a large black book, open to page 569." | |
| } | |
| long_desc | |
| { | |
| if Ceremony_1 and | |
| Ceremony_2 | |
| { | |
| "Each word of the prayer reverberates through the | |
| hall in a deafening confusion. As the last word | |
| fades, a voice, loud and commanding, speaks: | |
| \"Begone, fiends!\" A heart-stopping scream fills the | |
| cavern, and the spirits, sensing a greater power, | |
| flee through the walls." | |
| Deactivate(Ceremony) | |
| self is special | |
| } | |
| else | |
| { | |
| "Commandment #12592\n" | |
| "Oh ye who go about saying unto each: \"Hello sailor\":" | |
| "Dost thou know the magnitude of thy sin before the gods?" | |
| "Yea, verily, thou shalt be ground between two stones." | |
| "Shall the angry gods cast thy body into the whirlpool?" | |
| "Surely, thy eye shall be put out with a sharp stick!" | |
| "Even unto the ends of the earth shalt thou wander and" | |
| "Unto the land of the dead shalt thou be sent at last." | |
| "Surely thou shalt repent of thy cunning." | |
| } | |
| } | |
| before | |
| { | |
| object DoClose | |
| { | |
| "As hard as you try, the book cannot be closed." | |
| } | |
| object DoOpen | |
| { | |
| "The book is already open to page 569." | |
| } | |
| object DoTurn | |
| { | |
| "Beside page 569, there is only one other page with | |
| any legible printing on it. Most of it is unreadable, | |
| but the subject seems to be the banishment of evil. | |
| Apparently, certain noises, lights, and prayers are | |
| efficacious in this regard." | |
| } | |
| object DoBurn | |
| { | |
| if xobject is heat_source | |
| { | |
| "A booming voice says \"Wrong, cretin!\" and | |
| you notice that you have turned into a pile | |
| of dust. How, I can't imagine." | |
| NotDeadYet | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| object candles "pair of candles" | |
| { | |
| nouns "candles" "candle" | |
| adjectives "pair" | |
| article "a" | |
| is plural, light, heat_source | |
| in altar_room | |
| initial_desc | |
| { | |
| if candles is light | |
| { | |
| "On the two ends of the altar are burning candles." | |
| } | |
| else | |
| { | |
| "On the two ends of the altar are a pair of | |
| candles." | |
| } | |
| } | |
| long_desc | |
| { | |
| "The candles are "; | |
| if self is light | |
| { | |
| "burning." | |
| } | |
| else | |
| { | |
| "out." | |
| } | |
| } | |
| before | |
| { | |
| object DoExtinguish | |
| { | |
| "The flame is extinguished." | |
| candles is not light | |
| candles is not heat_source | |
| Deactivate(Candle) | |
| FindLight(location) | |
| } | |
| object DoCount | |
| { | |
| "Let's see, how many objects in a pair? Don't | |
| tell me, I'll get it." | |
| } | |
| object DoBurn | |
| { | |
| if xobject = ivory_torch and | |
| candles is not light | |
| { | |
| "The heat from the torch is so intense that | |
| the candles are vaporized." | |
| remove candles | |
| } | |
| elseif xobject = ivory_torch and | |
| candles is light | |
| { | |
| "You realize, just in time, that the candles | |
| are already lighted." | |
| } | |
| elseif xobject = matchbook and | |
| matchbook is light and | |
| candles is not light and | |
| location = entrance_to_hades and | |
| Ceremony_1 = 1 and | |
| Contains(player, candles) and | |
| candle_life > 0 | |
| { | |
| "The flames flicker wildly and appear | |
| to dance. The earth beneath your feet | |
| trembles, and your legs nearly buckle | |
| beneath you. The spirits cower at your | |
| unearthly power." | |
| candles is light | |
| candles is heat_source | |
| Activate(Candle) | |
| Ceremony_2 = 1 | |
| } | |
| elseif xobject = matchbook and | |
| matchbook is light and | |
| candles is not light and | |
| candle_life > 0 | |
| { | |
| "The candles are lit." | |
| candles is light | |
| Activate(Candle) | |
| } | |
| elseif xobject = matchbook and | |
| matchbook is light and | |
| candles is light | |
| { | |
| "The candles are already lit." | |
| } | |
| elseif xobject = matchbook and | |
| matchbook is light and | |
| candle_life = 0 | |
| { | |
| "Alas, there's not much left of the candles. | |
| Certainly not enough to burn." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| after | |
| { | |
| object DoGet | |
| { | |
| if candles is light and | |
| location = entrance_to_hades and | |
| Ceremony_1 = 1 | |
| { | |
| "The flames flicker wildly and appear | |
| to dance. The earth beneath your feet | |
| trembles, and your legs nearly buckle | |
| beneath you. The spirits cower at your | |
| unearthly power." | |
| candles is light | |
| Ceremony_2 = 1 | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| DarkRoom egyptian_room "Egyptian Room" | |
| { | |
| long_desc | |
| { | |
| "This is a room which looks like an Egyptian tomb. There is | |
| an ascending staircase to the west." | |
| } | |
| is thief_free | |
| w_to temple | |
| u_to temple | |
| } | |
| treasure coffin "gold coffin" | |
| { | |
| noun "coffin" | |
| adjectives "gold" "solid-gold" | |
| article "a" | |
| is container, openable | |
| capacity 50 | |
| size 60 | |
| in egyptian_room | |
| take_points 10 | |
| deposit_points 15 | |
| initial_desc | |
| { | |
| "The solid-gold coffin used for the burial of Ramses II | |
| is here." | |
| } | |
| contains_desc | |
| { | |
| "Inside the coffin is"; | |
| } | |
| } | |
| treasure sceptre "sceptre" | |
| { | |
| nouns "sceptre" "scepter" "enamel" | |
| adjectives "sharp" "colored" | |
| article "a" | |
| is sharp | |
| in coffin | |
| take_points 4 | |
| deposit_points 6 | |
| initial_desc | |
| { | |
| "A sceptre, possibly that of ancient Egypt itself, is in | |
| the coffin. The sceptre is ornamented with colored enamel, | |
| and tapers to a sharp point." | |
| } | |
| short_desc | |
| { | |
| "An ornamented sceptre, tapering to a sharp point, is here." | |
| } | |
| before | |
| { | |
| object DoWave | |
| { | |
| if (location = aragain_falls or | |
| location = end_of_rainbow) and | |
| rainbow is not special | |
| { | |
| "Suddenly, the rainbow appears to become | |
| solid and, I venture, walkable (I think | |
| the giveaway was the stairs and bannister)." | |
| rainbow is special | |
| if pot_of_gold in nothing and | |
| location = end_of_rainbow | |
| { | |
| "A shimmering pot of gold appears at | |
| the end of the rainbow." | |
| move pot_of_gold to end_of_rainbow | |
| } | |
| } | |
| elseif (location = aragain_falls or | |
| location = end_of_rainbow) and | |
| rainbow is special | |
| { | |
| "The rainbow seems to have become somewhat | |
| run-of-the-mill." | |
| rainbow is not special | |
| } | |
| elseif location = on_the_rainbow | |
| { | |
| "The structural integrity of the rainbow is | |
| severely compromised, leaving you hanging in | |
| mid-air, supported only by water vapor. Bye." | |
| rainbow is not special | |
| NotDeadYet | |
| } | |
| else | |
| { | |
| "A dazzling display of color briefly | |
| emanates from the sceptre." | |
| } | |
| } | |
| } | |
| } | |
| DarkRoom north_south_passage "North-South Passage" | |
| { | |
| long_desc | |
| { | |
| "This is a high north-south passage, which forks to the | |
| northeast." | |
| } | |
| n_to chasm | |
| s_to round_room | |
| ne_to deep_canyon | |
| } | |
| DarkRoom chasm "Chasm" | |
| { | |
| long_desc | |
| { | |
| "A chasm runs southwest to northeast and the path follows it. | |
| You are on the south side of the chasm, where a crack opens | |
| into a passage." | |
| } | |
| before | |
| { | |
| location DoJump | |
| { | |
| "This was not a very safe place to try jumping." | |
| JumpMessage | |
| NotDeadYet | |
| } | |
| } | |
| s_to north_south_passage | |
| sw_to east_west_passage | |
| u_to east_west_passage | |
| ne_to reservoir_south | |
| } | |
| DarkRoom deep_canyon "Deep Canyon" | |
| { | |
| long_desc | |
| { | |
| "You are on the south edge of a deep canyon. Passages | |
| lead off to the east, northwest and southwest. A stairway | |
| leads down."; | |
| if reservoir_status = 3 | |
| { | |
| " You can hear a loud roaring sound, like that of | |
| rushing water, from below." | |
| } | |
| else | |
| { | |
| "" | |
| } | |
| } | |
| e_to dam | |
| sw_to north_south_passage | |
| d_to loud_room | |
| nw_to reservoir_south | |
| } | |
| LightRoom dam "Dam" | |
| { | |
| long_desc | |
| { | |
| "You are standing on the top of the Flood Control Dam | |
| #3, which was quite a tourist attraction in times far | |
| distant. There are paths to the north, south, and west, | |
| and a scramble down." | |
| ! 1 = reservoir full | |
| ! 2 = reservoir drained | |
| ! 3 = reservoir draining | |
| ! 4 = reservoir filling | |
| select reservoir_status | |
| case 1 | |
| { | |
| "The sluice gates on the dam are closed. Behind the | |
| dam, there can be seen a wide reservoir. Water is | |
| pouring over the top of the now abandoned dam." | |
| } | |
| case 2 | |
| { | |
| "The water level behind the dam is low: The sluice | |
| gates have been opened. Water rushes through the dam | |
| and downstream." | |
| } | |
| case 3 | |
| { | |
| "The sluice gates are open, and water rushes through | |
| the dam. The water level behind the dam is still high." | |
| } | |
| case 4 | |
| { | |
| "The sluice gates are closed. The water level in the | |
| reservoir is quite low, but the level is rising | |
| quickly." | |
| } | |
| } | |
| n_to dam_lobby | |
| s_to deep_canyon | |
| e_to dam_base | |
| d_to dam_base | |
| w_to reservoir_south | |
| } | |
| scenery sluice_gate "sluice gate" | |
| { | |
| nouns "dam" "gate" "gates" | |
| adjective "sluice" | |
| article "the" | |
| in dam | |
| } | |
| object control_panel "control panel" | |
| { | |
| nouns "panel" "box" | |
| adjective "control" | |
| article "a" | |
| is static | |
| in dam | |
| initial_desc | |
| { | |
| "There is a control panel here, on which a large metal | |
| bolt is mounted. Directly above the bolt is a small green | |
| plastic bubble"; | |
| if yellow_button is special | |
| { | |
| " which is glowing serenely"; | |
| } | |
| "." | |
| } | |
| } | |
| scenery bolt "bolt" | |
| { | |
| noun "bolt" | |
| adjectives "large" "metal" | |
| article "a" | |
| in control_panel | |
| before | |
| { | |
| object DoTurn | |
| { | |
| if not xobject | |
| { | |
| return false | |
| } | |
| elseif xobject ~= wrench | |
| { | |
| "The bolt won't turn using "; | |
| print The(xobject); | |
| "." | |
| return true | |
| } | |
| elseif xobject = wrench and | |
| yellow_button is not special | |
| { | |
| "The bolt won't turn with your best effort." | |
| return true | |
| } | |
| elseif xobject = wrench and | |
| sluice_gate is special and ! special = open | |
| yellow_button is special | |
| { | |
| "The sluice gates close and water | |
| starts to collect behind the dam." | |
| reservoir_status = 4 | |
| sluice_gate is not special | |
| Deactivate(EmptyDam) | |
| Activate(FillDam) | |
| return true | |
| } | |
| elseif xobject = wrench and | |
| sluice_gate is not special and | |
| yellow_button is special | |
| { | |
| "The sluice gates open and water | |
| pours through the dam." | |
| Deactivate(FillDam) | |
| Activate(EmptyDam) | |
| reservoir_status = 3 | |
| sluice_gate is special | |
| return true | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| object wrench "wrench" | |
| { | |
| noun "wrench" | |
| adjective "large" | |
| article "a" | |
| in maintenance_room | |
| long_desc | |
| { | |
| "Wrench." | |
| } | |
| } | |
| LightRoom dam_base "Dam Base" | |
| { | |
| long_desc | |
| { | |
| "You are at the base of Flood Control Dam #3, which looms | |
| above you and to the north. The river Frigid is flowing by | |
| here. Along the river are the White Cliffs which seem to | |
| form giant walls stretching from north to south along the | |
| shores of the river as it winds its way downstream." | |
| } | |
| is thief_free | |
| n_to dam | |
| u_to dam | |
| } | |
| object pile_of_plastic "pile of plastic" | |
| { | |
| nouns "plastic" "valve" "boat" | |
| adjective "pile" | |
| article "a" | |
| is burnable | |
| in dam_base | |
| short_desc | |
| { | |
| "There is a folded pile of plastic here which has a small | |
| valve attached." | |
| } | |
| before | |
| { | |
| object DoPump | |
| { | |
| if Contains(player, pile_of_plastic) | |
| { | |
| "The boat must be on the ground to be | |
| inflated." | |
| } | |
| elseif xobject = air_pump | |
| { | |
| "The boat inflates and appears seaworthy." | |
| remove pile_of_plastic | |
| move magic_boat to location | |
| move tan_label to magic_boat | |
| WhatsIn(magic_boat) | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoCut | |
| { | |
| if xobject is not weapon | |
| { | |
| return false | |
| } | |
| else | |
| { | |
| "You skillfully slice "; | |
| print The(object); | |
| " into innumerable slivers which | |
| blow away." | |
| remove pile_of_plastic | |
| } | |
| } | |
| } | |
| } | |
| object punctured_boat "punctured boat" | |
| { | |
| noun "boat" | |
| adjective "punctured" | |
| article "a" | |
| is burnable | |
| in nothing | |
| before | |
| { | |
| object DoPump | |
| { | |
| if xobject = air_pump | |
| { | |
| "No chance. Some moron punctured it." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoPatch | |
| { | |
| if xobject = viscous_material | |
| { | |
| "Well done. The boat is repaired." | |
| viscous_material is special | |
| } | |
| } | |
| object DoCut | |
| { | |
| if xobject is not weapon | |
| { | |
| return false | |
| } | |
| else | |
| { | |
| "You skillfully slice "; | |
| print The(object); | |
| " into innumerable slivers which | |
| blow away." | |
| remove punctured_boat | |
| } | |
| } | |
| } | |
| } | |
| boat magic_boat "magic boat" | |
| { | |
| noun "boat" | |
| adjective "magic" "seaworthy" | |
| article "a" | |
| in nothing | |
| capacity 100 | |
| reach magic_boat, river4 ! so player can reach the buoy | |
| before | |
| { | |
| parent(player) DoGo | |
| { | |
| if location is not water_location | |
| { | |
| "You'll have to get out of the magic boat | |
| first." | |
| return true | |
| } | |
| if word[1] = "go" and | |
| word[2] ~= "" | |
| { | |
| word[1] = word[2] | |
| } | |
| if (word[1] = "e" or | |
| word[1] = "east") | |
| { | |
| if location = stream | |
| { | |
| move magic_boat to reservoir | |
| location = reservoir | |
| DescribePlace(location, 1) | |
| } | |
| elseif location = river2 | |
| { | |
| "The White Cliffs prevent your | |
| landing here." | |
| return true | |
| } | |
| elseif location = river4 | |
| { | |
| move magic_boat to sandy_beach | |
| location = sandy_beach | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| } | |
| elseif location = river5 | |
| { | |
| move magic_boat to shore | |
| location = shore | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| elseif (word[1] = "w" or | |
| word[1] = "west") | |
| { | |
| if location = stream | |
| { | |
| "The channel is too narrow." | |
| return true | |
| } | |
| elseif location = reservoir | |
| { | |
| if reservoir_status ~= 1 | |
| { | |
| return false | |
| } | |
| else | |
| { | |
| move magic_boat to stream | |
| location = stream | |
| DescribePlace(location, 1) | |
| } | |
| } | |
| elseif location = river1 | |
| { | |
| move magic_boat to dam_base | |
| location = dam_base | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| } | |
| elseif location = river2 | |
| { | |
| "Just in time you steer away from | |
| the rocks." | |
| return true | |
| } | |
| elseif location = river3 | |
| { | |
| move magic_boat to beach_north | |
| location = beach_north | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| } | |
| elseif location = river4 | |
| { | |
| move magic_boat to beach_south | |
| location = beach_south | |
| DescribePlace(location, 1) | |
| Deactivate(RiverCurrent) | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| elseif (word[1] = "n" or | |
| word[1] = "north") | |
| { | |
| if location = reservoir | |
| { | |
| move magic_boat to reservoir_north | |
| location = reservoir_north | |
| DescribePlace(location, 1) | |
| } | |
| else | |
| { | |
| "Read the label for the boat's | |
| instructions." | |
| return true | |
| } | |
| } | |
| elseif (word[1] = "s" or | |
| word[1] = "south") | |
| { | |
| if location = reservoir | |
| { | |
| move magic_boat to reservoir_south | |
| location = reservoir_south | |
| DescribePlace(location, 1) | |
| } | |
| elseif location = stream | |
| { | |
| move magic_boat to stream_view | |
| location = stream_view | |
| DescribePlace(location, 1) | |
| } | |
| else | |
| { | |
| "Read the label for the boat's | |
| instructions." | |
| return true | |
| } | |
| } | |
| elseif verbroutine = &DoGo | |
| { | |
| "Read the label for the boat's | |
| instructions." | |
| return true | |
| } | |
| } | |
| object DoPump | |
| { | |
| if xobject = air_pump | |
| { | |
| "Inflating it further would probably | |
| burst it." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoDeflate | |
| { | |
| if parent(player) = self | |
| { | |
| "You can't deflate the boat while you're | |
| in it." | |
| } | |
| elseif Contains(player, magic_boat) | |
| { | |
| "The boat must be on the ground to be | |
| deflated." | |
| } | |
| else | |
| { | |
| "The boat deflates." | |
| remove magic_boat | |
| move pile_of_plastic to location | |
| remove tan_label | |
| } | |
| } | |
| object DoCut | |
| { | |
| if xobject is not weapon | |
| { | |
| return false | |
| } | |
| else | |
| { | |
| if parent(player) = self | |
| { | |
| "Not a bright idea, especially since | |
| you're in it." | |
| } | |
| else | |
| { | |
| "You skillfully slice "; | |
| print The(object); | |
| " into innumerable slivers which | |
| blow away." | |
| remove magic_boat | |
| } | |
| } | |
| } | |
| object DoClimb | |
| { | |
| Perform(&DoEnter, self) | |
| } | |
| object DoEnter | |
| { | |
| local c, i | |
| for i in player | |
| { | |
| if i is sharp | |
| { | |
| c++ | |
| } | |
| } | |
| if Contains(player, magic_boat) | |
| { | |
| "You'll have to put it down first." | |
| return true | |
| } | |
| elseif c > 0 | |
| { | |
| "Oops! Something sharp seems to have slipped | |
| and punctured the boat. The boat deflates to | |
| the sounds of hissing, sputtering, and | |
| cursing." | |
| remove magic_boat | |
| move punctured_boat to location | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| object DoPoke | |
| { | |
| if xobject is sharp | |
| { | |
| DoDrown | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| object tan_label "tan label" | |
| { | |
| noun "label" | |
| adjective "tan" | |
| article "a" | |
| in nothing | |
| is readable | |
| long_desc | |
| { | |
| "\_ !!!! FROBOZZ MAGIC BOAT COMPANY !!!!\n" | |
| "Hello, Sailor!\n" | |
| "Instructions for use:\n" | |
| "\_ To get into a body of water, say \"Launch\"." | |
| "\_ To get to shore, say \"Land\" or the direction in | |
| which you want to maneuver the boat.\n" | |
| "Warranty:\n" | |
| "\_ This boat is guaranteed against all defects for a period | |
| of 76 milliseconds from date of purchase or until first | |
| used, whichever comes first.\n" | |
| "Warning:" | |
| "\_ This boat is made of thin plastic." | |
| "\_ Good Luck!" | |
| } | |
| } | |
| LightRoom dam_lobby "Dam Lobby" | |
| { | |
| long_desc | |
| { | |
| "This room appears to have been the waiting room for groups | |
| touring the dam. There are open doorways here to the north | |
| and east marked \"Private\", and there is a path leading south | |
| over the top of the dam." | |
| } | |
| is thief_free | |
| s_to dam | |
| n_to | |
| { | |
| if maint_room_level = 14 | |
| { | |
| "The room is full of water and cannot be entered." | |
| } | |
| else | |
| { | |
| MovePlayer(maintenance_room) | |
| } | |
| } | |
| e_to | |
| { | |
| if maint_room_level = 14 | |
| { | |
| "The room is full of water and cannot be entered." | |
| } | |
| else | |
| { | |
| MovePlayer(maintenance_room) | |
| } | |
| } | |
| } | |
| object guidebook "guidebook" | |
| { | |
| noun "guidebook" "guidebooks" "book" "books" | |
| adjective "guide" | |
| article "a" | |
| is plural, readable, burnable | |
| in dam_lobby | |
| initial_desc | |
| { | |
| "Some guidebooks entitled \"Flood Control Dam #3\" are on | |
| the reception desk." | |
| } | |
| long_desc | |
| { | |
| "\"\_ Flood Control Dam #3\n" | |
| "FCD#3 was constructed in year 783 of the Great Underground | |
| Empire to harness the mighty Frigid River. This work was | |
| supported by a grant of 37 million zorkmids from your | |
| omnipotent local tyrant Lord Dimwit Flathead the Excessive. | |
| This impressive structure is composed of 370,000 cubic feet | |
| of concrete, is 256 feet tall at the center, and 193 feet | |
| wide at the top. The lake created behind the dam has a volume | |
| of 1.7 billion cubic feet, an area of 12 million square feet, | |
| and a shore line of 36 thousand feet.\n" | |
| "We will now point out some of the more interesting features | |
| of FCD#3 as we conduct you on a guided tour of the | |
| facilities:\n" | |
| "\_ 1) You start your tour here in the Dam Lobby. You | |
| will notice on your right that....\"" | |
| } | |
| } | |
| object matchbook "matchbook" | |
| { | |
| nouns "matchbook" "matches" "match" | |
| article "a" | |
| in dam_lobby | |
| is readable, container, openable, not open | |
| initial_desc | |
| { | |
| "There is a matchbook whose cover says \"Visit Beautiful | |
| FCD#3\" here." | |
| } | |
| long_desc | |
| { | |
| "The matchbook isn't very interesting, except for what's | |
| written on it." | |
| } | |
| before | |
| { | |
| object DoOpen | |
| { | |
| if match_count > 0 | |
| { | |
| "You have "; | |
| print number match_count; | |
| if match_count = 1 | |
| " match." | |
| else | |
| " matches." | |
| } | |
| else | |
| { | |
| "You have no matches." | |
| } | |
| } | |
| object DoBurn | |
| { | |
| if match_count > 0 and | |
| location = timber_room | |
| { | |
| "This room is drafty, and the match goes | |
| out instantly." | |
| match_count-- | |
| } | |
| elseif match_count > 0 and | |
| location = gas_room | |
| { | |
| "How sad for an aspiring adventurer to light | |
| a match in a room which reeks of gas. | |
| Fortunately, there is justice in the | |
| world.\n" | |
| "\_ ** BOOOOOOOOOOOM **" | |
| match_count-- | |
| NotDeadYet | |
| } | |
| elseif match_count > 0 | |
| { | |
| "One of the matches starts to burn." | |
| match_count-- | |
| self is light | |
| self is heat_source | |
| Activate(Match, 2) | |
| } | |
| else | |
| { | |
| "I'm afraid that you have run out of | |
| matches." | |
| } | |
| } | |
| object DoRead | |
| { | |
| "(Close cover before striking)\n" | |
| "YOU too can make BIG MONEY in the exciting field of | |
| PAPER SHUFFLING!\n" | |
| "Mr. Anderson of Muddle, Mass. says: \"Before I took | |
| this course I was a lowly bit twiddler. Now with what | |
| I learned at GUE Tech I feel really important and can | |
| obfuscate and confuse with the best.\"\n" | |
| "Dr. Blank had this to say: \"Ten short days ago all | |
| I could look forward to was a dead-end job as a | |
| doctor. Now I have a promising future and make really | |
| big Zorkmids.\"\n" | |
| "GUE Tech can't promise these fantastic results to | |
| everyone. But when you earn your degree from GUE | |
| Tech, your future will be brighter." | |
| } | |
| } | |
| } | |
| DarkRoom maintenance_room "Maintenance Room" | |
| { | |
| long_desc | |
| { | |
| "This is what appears to have been the maintenance room for | |
| Flood Control Dam #3. Apparently, this room has been | |
| ransacked recently, for most of the valuable equipment is | |
| gone. On the wall in front of you is a group of buttons | |
| colored blue, yellow, brown, and red. There are doorways to | |
| the west and south." | |
| } | |
| is thief_free | |
| s_to dam_lobby | |
| w_to dam_lobby | |
| } | |
| scenery blue_button "blue button" | |
| { | |
| noun "button" | |
| adjective "blue" | |
| article "a" | |
| in maintenance_room | |
| before | |
| { | |
| object DoPush | |
| { | |
| if self is not special | |
| { | |
| "There is a rumbling sound and a stream of | |
| water appears to burst from the east wall of | |
| the room (apparently, a leak has occurred in | |
| a pipe)." | |
| self is special | |
| move leak to maintenance_room | |
| Activate(FillMaintRoom) | |
| } | |
| else | |
| { | |
| "The blue button appears to be jammed." | |
| } | |
| } | |
| object DoPatch | |
| { | |
| if xobject = viscous_material | |
| { | |
| "By some miracle of Zorkian technology, you | |
| have managed to stop the leak in the dam." | |
| viscous_material is special | |
| Deactivate(FillMaintRoom) | |
| return true | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| scenery leak "leak" | |
| { | |
| nouns "pipe" "leak" | |
| adjective "water" | |
| article "the" | |
| in nothing | |
| } | |
| scenery yellow_button "yellow button" | |
| { | |
| noun "button" | |
| adjective "yellow" | |
| article "a" | |
| in maintenance_room | |
| before | |
| { | |
| object DoPush | |
| { | |
| "Click." | |
| self is special ! Turns on control panel | |
| } | |
| } | |
| } | |
| scenery brown_button "brown button" | |
| { | |
| noun "button" | |
| adjective "brown" | |
| article "a" | |
| in maintenance_room | |
| before | |
| { | |
| object DoPush | |
| { | |
| "Click." | |
| yellow_button is not special ! Turns off control panel | |
| } | |
| } | |
| } | |
| scenery red_button "red button" | |
| { | |
| noun "button" | |
| adjective "red" | |
| article "a" | |
| in maintenance_room | |
| before | |
| { | |
| object DoPush | |
| { | |
| "Click." | |
| "The lights within the room "; | |
| if self is light | |
| { | |
| "shut off." | |
| self is not light | |
| } | |
| else | |
| { | |
| "come on." | |
| self is light | |
| } | |
| FindLight(location) | |
| } | |
| } | |
| } | |
| object screwdriver "screwdriver" | |
| { | |
| noun "screwdriver" | |
| article "a" | |
| in maintenance_room | |
| } | |
| object tube "tube" | |
| { | |
| noun "tube" | |
| article "a" | |
| in maintenance_room | |
| is readable, container, openable, not open | |
| initial_desc | |
| { | |
| "There is an object which looks like a tube of | |
| toothpaste here." | |
| } | |
| long_desc | |
| { | |
| "---> Frobozz Magic Gunk Company <---" | |
| "\_ All-Purpose Gunk" | |
| } | |
| before | |
| { | |
| object DoSqueeze | |
| { | |
| if tube is open and | |
| children(tube) = 1 | |
| { | |
| "The viscous material oozes into your hand." | |
| move viscous_material to you | |
| } | |
| elseif tube is not open | |
| { | |
| "The tube is closed." | |
| } | |
| elseif children(tube) = 0 | |
| { | |
| "The tube is apparently empty." | |
| } | |
| } | |
| xobject DoPutIn | |
| { | |
| { | |
| "The tube refuses to accept anything." | |
| } | |
| } | |
| } | |
| } | |
| object viscous_material "viscous material" | |
| { | |
| nouns "material" "gunk" | |
| adjectives "viscous" "all-purpose" | |
| article "the" | |
| in tube | |
| before | |
| { | |
| xobject DoOil | |
| { | |
| if self is special ! special = player knows it is glue | |
| { | |
| "The all-purpose gunk isn't a lubricant." | |
| } | |
| else | |
| { | |
| "Hmm. It appears the tube contained glue, | |
| not oil. Turning the bolt won't get any | |
| easier...." | |
| } | |
| } | |
| } | |
| } | |
| object toolchests "group of tool chests" | |
| { | |
| nouns "chest" "chests" | |
| adjectives "tool" "group" | |
| article "a" | |
| is plural, container, not open | |
| in maintenance_room | |
| capacity 10 | |
| long_desc | |
| { | |
| "The chests are all empty." | |
| } | |
| before | |
| { | |
| object DoOpen, DoPutIn, DoGet, DoTouch | |
| { | |
| "The chests are so rusty and corroded that | |
| they crumble when you touch them." | |
| remove toolchests | |
| } | |
| } | |
| } | |
| DarkRoom reservoir_south "Reservoir South" | |
| { | |
| long_desc | |
| { | |
| ! 1 = reservoir full | |
| ! 2 = reservoir drained | |
| ! 3 = reservoir draining | |
| ! 4 = reservoir filling | |
| select reservoir_status | |
| case 1 | |
| { | |
| "You are in a long room on the south shore of a large | |
| lake, far too deep and wide for crossing." | |
| } | |
| case 2 | |
| { | |
| "You are in a long room, to the north of which was | |
| formerly a lake. However, with the water level | |
| lowered, there is merely a wide stream running | |
| through the center of the room." | |
| } | |
| case 3 | |
| { | |
| "You are in a long room. To the north is a large lake, | |
| too deep to cross. You notice, however, that the water | |
| level appears to be dropping at a rapid rate. Before | |
| long, it might be possible to cross to the other side from | |
| here." | |
| } | |
| case 4 | |
| { | |
| "You are in a long room, to the north of which is a | |
| wide area which was formerly a reservoir, but now is | |
| merely a stream. You notice, however, that the level | |
| of the stream is rising quickly and that before long | |
| it will be impossible to cross here." | |
| } | |
| "There is a path along the stream to the east or west, a | |
| steep pathway climbing southwest along the edge of a chasm, | |
| and a path leading into a canyon to the southeast." | |
| } | |
| e_to dam | |
| w_to stream_view | |
| n_to | |
| { | |
| if reservoir_status = 1 or | |
| reservoir_status = 3 | |
| { | |
| "You'd drown." | |
| } | |
| else | |
| { | |
| MovePlayer(reservoir) | |
| } | |
| } | |
| sw_to chasm | |
| se_to deep_canyon | |
| } | |
| DarkRoom stream_view "Stream View" | |
| { | |
| long_desc | |
| { | |
| "You are standing on a path beside a gently flowing stream. | |
| The path follows the stream, which flows from west to east." | |
| } | |
| e_to reservoir_south | |
| } | |
| DarkRoom stream "Stream" | |
| { | |
| long_desc | |
| { | |
| "You are on the gently flowing stream. The upstream route is | |
| too narrow to navigate, and the downstream route is invisible | |
| due to twisting walls. There is a narrow beach to land on." | |
| } | |
| is water_location, thief_free | |
| s_to stream_view | |
| e_to reservoir | |
| } | |
| scenery water_in_stream "stream" | |
| { | |
| nouns "stream" | |
| article "the" | |
| found_in stream, stream_view | |
| } | |
| DarkRoom reservoir "Reservoir" | |
| { | |
| long_desc | |
| { | |
| if reservoir_status = 1 or | |
| reservoir_status = 3 | |
| { | |
| "You are on the lake. Beaches can be seen north and | |
| south. Upstream a small stream enters the lake | |
| through a narrow cleft in the rocks. The dam can | |
| be seen downstream." | |
| } | |
| else | |
| { | |
| "You are on what used to be a large lake, but which | |
| is now a large mud pile. There are \"shores\" to the | |
| north and south." | |
| } | |
| } | |
| is water_location, thief_free | |
| w_to | |
| { | |
| "You can't go there without a vehicle." | |
| } | |
| s_to reservoir_south | |
| n_to reservoir_north | |
| } | |
| scenery lake "lake" | |
| { | |
| nouns "lake" "reservoir" | |
| article "the" | |
| found_in reservoir_south, reservoir_north, reservoir | |
| long_desc | |
| { | |
| if reservoir_status = 2 ! Drained | |
| { | |
| "There's not much lake left...." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| treasure trunk_of_jewels "trunk of jewels" | |
| { | |
| nouns "trunk" "jewels" "chest" | |
| article "a" | |
| take_points 15 | |
| deposit_points 5 | |
| in nothing | |
| is container, not openable, not open | |
| initial_desc | |
| { | |
| "Lying half buried in the mud is an old trunk, bulging with | |
| jewels." | |
| } | |
| short_desc | |
| { | |
| "There is an old trunk here, bulging with assorted jewels." | |
| } | |
| before | |
| { | |
| object DoOpen | |
| { | |
| "The jewels are safely inside; there's no need to | |
| do that." | |
| } | |
| object DoLook, DoLookIn | |
| { | |
| "There are lots of jewels in there." | |
| } | |
| } | |
| } | |
| DarkRoom reservoir_north "Reservoir North" | |
| { | |
| long_desc | |
| { | |
| ! 1 = reservoir full | |
| ! 2 = reservoir drained | |
| ! 3 = reservoir draining | |
| ! 4 = reservoir filling | |
| select reservoir_status | |
| case 1 | |
| { | |
| "You are in a large cavernous room, north of a large | |
| lake." | |
| } | |
| case 2 | |
| { | |
| "You are in a large cavernous room, the south of | |
| which was formerly a lake. However, with the water | |
| level lowered, there is merely a wide stream running | |
| through there." | |
| } | |
| case 3 | |
| { | |
| "You are in a large cavernous area. To the south is | |
| a wide lake, whose water level appears to be falling | |
| rapidly." | |
| } | |
| case 4 | |
| { | |
| "You are in a cavernous area, to the south of which | |
| is a very wide stream. The level of the stream is | |
| rising rapidly, and it appears that before long it | |
| will be impossible to cross to the other side." | |
| } | |
| "There is a slimy stairway leaving the room to the north." | |
| } | |
| n_to atlantis_room | |
| s_to | |
| { | |
| if reservoir_status = 1 or | |
| reservoir_status = 3 | |
| { | |
| "You'd drown." | |
| } | |
| else | |
| { | |
| MovePlayer(reservoir) | |
| } | |
| } | |
| } | |
| object air_pump "hand-held air pump" | |
| { | |
| noun "pump" | |
| adjectives "hand-held" "air" | |
| article "a" | |
| in reservoir_north | |
| } | |
| DarkRoom atlantis_room "Atlantis Room" | |
| { | |
| long_desc | |
| { | |
| "This is an ancient room, long under water. There is an exit | |
| to the south and a staircase leading up." | |
| } | |
| u_to cave2 | |
| s_to reservoir_north | |
| } | |
| treasure trident "crystal trident" | |
| { | |
| noun "trident" | |
| adjective "crystal" | |
| article "a" | |
| in atlantis_room | |
| take_points 4 | |
| deposit_points 11 | |
| initial_desc | |
| { | |
| "On the shore lies Poseidon's own crystal trident." | |
| } | |
| } | |
| DarkRoom cave2 "Cave" | |
| { | |
| long_desc | |
| { | |
| "This is a tiny cave with entrances west and north, and a | |
| staircase leading down." | |
| } | |
| s_to atlantis_room | |
| d_to atlantis_room | |
| n_to mirror_north | |
| w_to twisting_passage | |
| } | |
| DarkRoom twisting_passage "Twisting Passage" | |
| { | |
| long_desc | |
| { | |
| "This is a winding passage. It seems that there are only | |
| exits on the east and north." | |
| } | |
| n_to mirror_north | |
| e_to cave2 | |
| } | |
| DarkRoom mirror_north "Mirror Room" | |
| { | |
| long_desc | |
| { | |
| "You are in a large square room with tall ceilings. On | |
| the south wall is an enormous mirror which fills the entire | |
| wall. There are exits on the other three sides of the room." | |
| if mirror is special | |
| { | |
| "Unfortunately, the mirror has been destroyed by your | |
| recklessness." | |
| } | |
| } | |
| n_to cold_passage | |
| w_to twisting_passage | |
| e_to cave2 | |
| } | |
| DarkRoom cold_passage "Cold Passage" | |
| { | |
| long_desc | |
| { | |
| "This is a cold and damp corridor where a long east-west | |
| passageway turns into a southward path." | |
| } | |
| s_to mirror_north | |
| w_to slide_room | |
| } | |
| DarkRoom slide_room "Slide Room" | |
| { | |
| long_desc | |
| { | |
| "This is a small chamber, which appears to have been part of | |
| a coal mine. On the south wall of the chamber the letters | |
| \"Granite Wall\" are etched in the rock. To the east is a | |
| long passage, and there is a steep metal slide twisting | |
| downward. To the north is a small opening." | |
| } | |
| n_to mine_entrance | |
| e_to cold_passage | |
| d_to cellar | |
| } | |
| scenery slide "slide" | |
| { | |
| nouns "slide" "chute" | |
| adjectives "metal" "steep" | |
| article "the" | |
| is container, open | |
| door_to cellar | |
| found_in slide_room | |
| capacity 100 | |
| before | |
| { | |
| xobject DoThrowIn, DoPutIn | |
| { | |
| print CThe(object); | |
| " falls into the slide and is gone." | |
| move object to cellar | |
| } | |
| } | |
| } | |
| scenery fake_granite "granite wall" | |
| { | |
| noun "wall" | |
| adjective "granite" | |
| article "the" | |
| in slide_room | |
| long_desc | |
| { | |
| local a | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "It only SAYS \"Granite Wall\"." | |
| } | |
| case 2 | |
| { | |
| "The wall isn't granite." | |
| } | |
| } | |
| } | |
| DarkRoom mine_entrance "Mine Entrance" | |
| { | |
| long_desc | |
| { | |
| "You are standing at the entrance of what might have been a | |
| coal mine. The shaft enters the west wall, and there is | |
| another exit on the south end of the room." | |
| } | |
| s_to slide_room | |
| w_to squeaky_room | |
| } | |
| DarkRoom squeaky_room "Squeaky Room" | |
| { | |
| long_desc | |
| { | |
| "You are in a small room. Strange squeaky sounds may be heard | |
| coming from the passage at the north end. You may also escape | |
| to the east." | |
| } | |
| threat_level 1 | |
| n_to bat_room | |
| e_to mine_entrance | |
| } | |
| DarkRoom bat_room "Bat Room" | |
| { | |
| long_desc | |
| { | |
| "You are in a small room which has doors only to the east | |
| and south." | |
| } | |
| is thief_free | |
| threat_level 2 | |
| s_to squeaky_room | |
| e_to shaft_room | |
| after | |
| { | |
| location | |
| { | |
| if bat is not special | |
| { | |
| local i, f | |
| for (i=0; i<3; i++) | |
| { | |
| "\_ Fweep!" | |
| } | |
| "\n\nThe bat grabs you by the scruff of your | |
| neck and lifts you away...." | |
| f = random(7) | |
| select f | |
| case 1 | |
| { | |
| MovePlayer(mine_entrance) | |
| } | |
| case 2 | |
| { | |
| MovePlayer(shaft_room) | |
| } | |
| case 3 | |
| { | |
| MovePlayer(coal_mine1) | |
| } | |
| case 4 | |
| { | |
| MovePlayer(coal_mine2) | |
| } | |
| case 5 | |
| { | |
| MovePlayer(coal_mine3) | |
| } | |
| case 6 | |
| { | |
| MovePlayer(coal_mine4) | |
| } | |
| case 7 | |
| { | |
| MovePlayer(ladder_top) | |
| } | |
| } | |
| if f = 2 | |
| { | |
| current_threat_level = 1 | |
| old_threat_level = 0 | |
| } | |
| else | |
| { | |
| current_threat_level = 0 | |
| } | |
| return false | |
| } | |
| } | |
| } | |
| object bat "bat" | |
| { | |
| noun "bat" | |
| adjective "vampire" | |
| article "a" | |
| in bat_room | |
| is living | |
| short_desc | |
| { | |
| if garlic in player or | |
| garlic in bat_room | |
| { | |
| "In the corner of the room on the ceiling | |
| is a large vampire bat who is obviously | |
| deranged and holding his nose." | |
| self is special | |
| } | |
| else | |
| { | |
| "A large vampire bat, hanging from the | |
| ceiling, swoops down at you!" | |
| self is not special | |
| } | |
| } | |
| before | |
| { | |
| object DoGet, DoHit | |
| { | |
| "You can't reach him; he's on the ceiling." | |
| } | |
| object DoTalk | |
| { | |
| local i | |
| for (i=0; i<5; i++) | |
| { | |
| "\_ Fweep!" | |
| } | |
| "\n\nThe bat pauses for a moment, perhaps thinking | |
| that you should re-read the manual." | |
| } | |
| } | |
| } | |
| treasure jade_figurine "exquisite jade figurine" | |
| { | |
| nouns "figurine" "figure" "statue" | |
| adjectives "jade" "exquisite" | |
| article "an" | |
| in bat_room | |
| take_points 5 | |
| deposit_points 5 | |
| initial_desc | |
| { | |
| "There is an exquisite jade figurine here." | |
| } | |
| } | |
| DarkRoom shaft_room "Shaft Room" | |
| { | |
| long_desc | |
| { | |
| "This is a large room, in the middle of which is a small | |
| shaft descending through the floor into darkness below. To | |
| the west and the north are exits from this room. Constructed | |
| over the top of the shaft is a metal framework to which a | |
| heavy iron chain is attached." | |
| } | |
| is thief_free | |
| threat_level 1 | |
| w_to bat_room | |
| n_to smelly_room | |
| } | |
| scenery chain "iron chain" | |
| { | |
| noun "chain" | |
| adjective "iron" | |
| article "the" | |
| found_in shaft_room, drafty_room | |
| long_desc | |
| { | |
| "The chain secures a basket within the shaft." | |
| } | |
| before | |
| { | |
| object DoGet, DoPull | |
| { | |
| "The chain is secure." | |
| } | |
| object DoRaise, DoLower | |
| { | |
| "Perhaps you should do that to the basket." | |
| } | |
| } | |
| } | |
| object real_cage "basket" | |
| { | |
| nouns "cage" "basket" | |
| adjective "iron" | |
| article "the" | |
| in shaft_room | |
| is static, container | |
| capacity 40 | |
| initial_desc | |
| { | |
| "At the end of the chain is a basket." | |
| } | |
| long_desc | |
| { | |
| if children(real_cage) = 0 | |
| { | |
| "The cage is empty." | |
| } | |
| else | |
| { | |
| WhatsIn(real_cage) | |
| } | |
| } | |
| before | |
| { | |
| object DoGet | |
| { | |
| "The cage is securely fastened to the iron chain." | |
| } | |
| object DoRaise | |
| { | |
| Already_done | |
| } | |
| object DoLower | |
| { | |
| if self is not special | |
| { | |
| "The basket is lowered to the bottom of the | |
| shaft." | |
| move real_cage to drafty_room | |
| move dummy_cage to shaft_room | |
| FindLight(location) | |
| } | |
| } | |
| } | |
| } | |
| scenery dummy_cage "basket" | |
| { | |
| nouns "cage" "basket" | |
| adjective "iron" | |
| article "the" | |
| in nothing | |
| is container | |
| long_desc | |
| { | |
| "The basket is at the other end of the chain." | |
| } | |
| before | |
| { | |
| xobject DoPutIn | |
| { | |
| "The basket is at the other end of the chain." | |
| } | |
| object DoGet | |
| { | |
| "The basket is at the other end of the chain." | |
| } | |
| object DoRaise | |
| { | |
| "The basket is raised to the top of the shaft." | |
| move real_cage to shaft_room | |
| remove dummy_cage | |
| FindLight(location) | |
| } | |
| object DoLower | |
| { | |
| Already_done | |
| } | |
| } | |
| } | |
| DarkRoom smelly_room "Smelly Room" | |
| { | |
| long_desc | |
| { | |
| "This is a small non-descript room. However, from the | |
| direction of a small descending staircase a foul odor can | |
| be detected. To the south is a narrow tunnel." | |
| } | |
| is thief_free | |
| s_to shaft_room | |
| d_to gas_room | |
| } | |
| DarkRoom gas_room "Gas Room" | |
| { | |
| long_desc | |
| { | |
| "This is a small room which smells strongly of coal gas. | |
| There is a short climb up some stairs and a narrow tunnel | |
| leading east." | |
| } | |
| is thief_free | |
| u_to smelly_room | |
| e_to coal_mine1 | |
| after | |
| { | |
| location | |
| { | |
| local c, i | |
| for i in player | |
| { | |
| if i is heat_source | |
| { | |
| c++ | |
| } | |
| } | |
| if c > 0 | |
| { | |
| "Oh dear. It appears that the smell coming | |
| from this room was coal gas. I would have | |
| thought twice about carrying flaming objects | |
| in here.\n" | |
| "\_ ** BOOOOOOOOOOOM **" | |
| NotDeadYet | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| } | |
| treasure bracelet "sapphire-encrusted bracelet" | |
| { | |
| noun "bracelet" | |
| adjectives "sapphire" "sapphire-encrusted" | |
| article "a" | |
| in gas_room | |
| take_points 5 | |
| deposit_points 5 | |
| initial_desc | |
| { | |
| "There is a sapphire-encrusted bracelet here." | |
| } | |
| } | |
| CoalRoom coal_mine1 "Coal Mine" | |
| { | |
| n_to gas_room | |
| ne_to coal_mine2 | |
| e_to coal_mine1 | |
| } | |
| CoalRoom coal_mine2 "Coal Mine" | |
| { | |
| n_to coal_mine2 | |
| s_to coal_mine1 | |
| se_to coal_mine3 | |
| } | |
| CoalRoom coal_mine3 "Coal Mine" | |
| { | |
| s_to coal_mine3 | |
| e_to coal_mine2 | |
| sw_to coal_mine4 | |
| } | |
| CoalRoom coal_mine4 "Coal Mine" | |
| { | |
| n_to coal_mine3 | |
| d_to ladder_top | |
| w_to coal_mine4 | |
| } | |
| DarkRoom ladder_top "Ladder Top" | |
| { | |
| long_desc | |
| { | |
| "This is a very small room. In the corner is a rickety wooden | |
| ladder, leading downward. It might be safe to descend. There | |
| is also a staircase leading upward." | |
| } | |
| u_to coal_mine4 | |
| d_to ladder_bottom | |
| } | |
| DarkRoom ladder_bottom "Ladder Bottom" | |
| { | |
| long_desc | |
| { | |
| "This is a rather wide room. On one side is the bottom of a | |
| narrow wooden ladder. To the west and the south are passages | |
| leaving the room." | |
| } | |
| u_to ladder_top | |
| w_to timber_room | |
| s_to mine_dead_end | |
| } | |
| DarkRoom mine_dead_end "Dead End" | |
| { | |
| long_desc | |
| { | |
| "You have come to a dead end in the mine." | |
| } | |
| n_to ladder_bottom | |
| } | |
| object coal "small pile of coal" | |
| { | |
| noun "coal" | |
| adjectives "small" "pile" | |
| article "a" | |
| in mine_dead_end | |
| is burnable | |
| initial_desc | |
| { | |
| "There is a small pile of coal here." | |
| } | |
| } | |
| DarkRoom timber_room "Timber Room" | |
| { | |
| long_desc | |
| { | |
| "This is a long and narrow passage, which is cluttered with | |
| broken timbers. A wide passage comes from the east and turns | |
| at the west end of the room into a very narrow passageway. | |
| From the west comes a strong draft." | |
| } | |
| is thief_free | |
| e_to ladder_bottom | |
| w_to | |
| { | |
| if children(player) > 0 | |
| { | |
| "You cannot fit through this passage with that | |
| load." | |
| } | |
| else | |
| { | |
| MovePlayer(drafty_room) | |
| } | |
| } | |
| } | |
| object timber "broken timber" | |
| { | |
| noun "timber" | |
| adjective "broken" | |
| article "a" | |
| in timber_room | |
| initial_desc | |
| { | |
| "There is a broken timber here." | |
| } | |
| } | |
| DarkRoom drafty_room "Drafty Room" | |
| { | |
| long_desc | |
| { | |
| "This is a small drafty room in which is the bottom of a long | |
| shaft. To the south is a passageway and to the east a very | |
| narrow passage. In the shaft can be seen a heavy iron chain." | |
| } | |
| is thief_free | |
| room_points 13 | |
| e_to | |
| { | |
| if children(player) > 0 | |
| { | |
| "You cannot fit through this passage with that | |
| load." | |
| } | |
| else | |
| { | |
| MovePlayer(timber_room) | |
| } | |
| } | |
| s_to machine_room | |
| } | |
| DarkRoom machine_room "Machine Room" | |
| { | |
| long_desc | |
| { | |
| "This is a large, cold room whose sole exit is to the | |
| north. In one corner there is a machine which is reminiscent | |
| of a clothes dryer. On its face is a switch which is labelled | |
| \"START\". The switch does not appear to be manipulable by | |
| any human hand (unless the fingers are about 1/16 by 1/4 | |
| inch). On the front of the machine is a large lid, which is "; | |
| if machine is open | |
| { | |
| "open." | |
| } | |
| else | |
| { | |
| "closed." | |
| } | |
| } | |
| is thief_free | |
| n_to drafty_room | |
| } | |
| scenery machine "machine" | |
| { | |
| nouns "machine" "lid" | |
| adjective "large" | |
| article "a" | |
| is container, openable, not open | |
| capacity 10 | |
| in machine_room | |
| } | |
| scenery start_switch "switch" | |
| { | |
| nouns "button" "switch" | |
| adjective "start" | |
| article "a" | |
| in machine_room | |
| before | |
| { | |
| object DoPush, DoPushWith | |
| { | |
| "Pushing the switch doesn't seem to work." | |
| } | |
| object DoTurn | |
| { | |
| if not xobject | |
| { | |
| return false | |
| } | |
| elseif xobject = screwdriver and | |
| (children(machine) = 0 or | |
| machine is open) | |
| { | |
| "The machine doesn't seem to want to do | |
| anything." | |
| } | |
| elseif xobject = screwdriver and | |
| children(machine) > 0 | |
| { | |
| "The machine comes to life (figuratively) | |
| with a dazzling display of colored lights | |
| and bizarre noises. After a few moments, the | |
| excitement abates." | |
| if Contains(machine, coal) | |
| { | |
| remove coal | |
| move diamond to machine | |
| } | |
| else | |
| { | |
| remove child(machine) | |
| move slag to machine | |
| } | |
| } | |
| elseif xobject = hands | |
| { | |
| "You can't turn it with your hands..." | |
| } | |
| elseif xobject ~= screwdriver | |
| { | |
| "It seems that "; | |
| print The(xobject); | |
| " won't do." | |
| } | |
| else | |
| { | |
| return false | |
| } | |
| } | |
| } | |
| after | |
| { | |
| object DoOpen | |
| { | |
| "The lid opens"; | |
| if children(machine) = 1 | |
| { | |
| ", revealing "; | |
| print The(child(machine)); | |
| } | |
| "." | |
| } | |
| object DoClose | |
| { | |
| "The lid closes." | |
| } | |
| } | |
| } | |
| treasure diamond "huge diamond" | |
| { | |
| noun "diamond" | |
| adjective "huge" | |
| article "a" | |
| take_points 10 | |
| deposit_points 10 | |
| in nothing | |
| } | |
| object slag "small piece of vitreous slag" | |
| { | |
| noun "slag" | |
| adjectives "small" "piece" "vitreous" | |
| article "a" | |
| in nothing | |
| before | |
| { | |
| object DoGet, DoTouch | |
| { | |
| "The slag was rather insubstantial, and crumbles | |
| into dust at your touch." | |
| remove slag | |
| } | |
| } | |
| } | |
| !--------------------------------------------------------------------------- | |
| ! HELP SYSTEM | |
| !--------------------------------------------------------------------------- | |
| replace DoHelp | |
| { | |
| local m | |
| while true | |
| { | |
| menuitem[0] = "Hugo Zork Help System" | |
| menuitem[1] = "Introduction" | |
| menuitem[2] = "Instructions For Playing" | |
| menuitem[3] = "About This Hugo Adaptation" | |
| menuitem[4] = "Credits" | |
| menuitem[5] = "For Your Amusement/Words To Try" | |
| menuitem[6] = "Step-by-Step Walkthru" | |
| m = Menu(6) | |
| select m | |
| case 1: help_intro | |
| case 2: help_instructions | |
| case 3: help_about | |
| case 4: help_credits | |
| case 5: help_amuse | |
| case 6: help_walkthru | |
| case 0 | |
| { | |
| window 0 ! by KT | |
| cls ! | |
| PrintStatusline | |
| DescribePlace(location, true) | |
| return | |
| } | |
| } | |
| } | |
| routine help_intro | |
| { | |
| CenterTitle("Introduction") | |
| "\"Hugo Zork\" was written as a programming exercise. I love text | |
| adventures and computer programming, but lack the imagination to | |
| write a completely original game. So, I took Infocom's \BZork I\b | |
| and rewrote it using Hugo - mainly to see if I could do it. The | |
| result is the game you are playing now.\n" | |
| "If you find any bugs or errors, please send e-mail to John | |
| Menichelli (menichel@pixi.com)\n" | |
| "Zork I is copyright by Activision. This work does not in any way | |
| challenge that copyright status.\n" | |
| pause | |
| } | |
| routine help_instructions | |
| { | |
| CenterTitle("Communicating With Hugo Zork") | |
| "\nAside from the standard Interactive Fiction commands (such as | |
| BRIEF, VERBOSE, LOOK (or L), EXAMINE (or X), TAKE, DROP and | |
| so on), Hugo Zork also understands the word DIAGNOSE. This will | |
| give you a report of the player's condition." | |
| pause | |
| } | |
| routine help_about | |
| { | |
| CenterTitle("About Hugo Zork") | |
| "The source code for this game was developed by playing the original | |
| Zork I, seeing what certain actions did, then coding the effect in | |
| Hugo.\n" | |
| "If that sounds painful, it was! It was a great learning experience | |
| though. The most difficult object to code was the magic boat, | |
| followed closely by the Loud Room.\n" | |
| "As you examine the source code, you will probably notice that it is | |
| not the most efficient thing you've ever read. I'm working on | |
| tightening it up, but my first effort was aimed at getting something | |
| that worked out the door.\n" | |
| pause | |
| } | |
| routine help_credits | |
| { | |
| CenterTitle("Credits") | |
| "Hugo Zork owes its existence to, of course, Infocom's Zork I | |
| and Kent Tessman's Hugo Text Adventure programnming language.\n" | |
| "The source code for Hugo Zork is freeware. Since it uses the | |
| actual text from Zork I, those parts are copyright by Activision | |
| and are used without their permission.\n" | |
| "The Hugo Compiler and Engine are copyright (c) 1995-1996 by | |
| Kent Tessman.\n" | |
| "I would like to thank Kent Tessman for his assistance and patience | |
| answering all my questions. Without him I would never have finished | |
| this project.\n" | |
| "When I was approximately 75% complete, I discovered the source | |
| code to the TADS port of Dungeon, the precursor to Zork. While | |
| reading the source code I discovered many things I had not thought | |
| of (such as what objects fit where, how some objects interact | |
| with others, and so on.) Many thanks to Darin Johnson | |
| (tdjohnson@cs.ucsd.edu) for the work he did on the TADS version | |
| of Dungeon.\n" | |
| "Some sections of code were taken from the Colossal Cave | |
| Adventure (colossal.hug) and are copyright by Kent Tessman.\n" | |
| "The text for Hugo Zork came from Zork I, Revision 88, Serial | |
| Number 840726, which is available on The Lost Treasures of | |
| Infocom, Volume I and also on The Classic Text Adventure | |
| Masterpieces of Infocom.\n" | |
| "Even though I built upon the work of others, any errors or | |
| omissions are my fault. Please direct all bug reports to | |
| menichel@pixi.com." | |
| pause | |
| } | |
| routine help_amuse | |
| { | |
| CenterTitle("For Your Amusement") | |
| "Have you ever:\n" | |
| "\_ ...opened the grating from beneath while the leaves were still | |
| on it?" | |
| "\_ ...tried swearing at ZORK I?" | |
| "\_ ...waved the sceptre while standing on the rainbow?" | |
| "\_ ...tried anything nasty with the bodies in Hades?" | |
| "\_ ...burned the black book?" | |
| "\_ ...damaged the painting?" | |
| "\_ ...lit the candles with the torch?" | |
| "\_ ...read the matchbook?" | |
| "\_ ...tried to take yourself (or the Thief, Troll, or Cyclops)?" | |
| "\_ ...tried cutting things with the knife or sword?" | |
| "\_ ...poured water on something burning?" | |
| "\_ ...said WAIT or SCORE while dead (as a spirit)?" | |
| "\nPress any key for more..." | |
| pause | |
| CenterTitle("Words To Try") | |
| "Words you may not have tried:\n" | |
| "\_ HELLO (to Troll, Thief, Cyclops)" | |
| "\_ ZORK" | |
| "\_ OIL (lubricate)" | |
| "\_ XYZZY" | |
| "\_ WALK AROUND (in forest or outside house)" | |
| "\_ PLUGH" | |
| "\_ FIND (especially with house, hands, teeth, me)" | |
| "\_ CHOMP (or BARF)" | |
| "\_ COUNT (candles, leaves, matches, blessings)" | |
| "\_ WIN" | |
| "\_ MUMBLE (or SIGH)" | |
| "\_ LISTEN (especially to the Troll, Thief, or Cyclops)" | |
| "\_ REPENT" | |
| "\_ WHAT IS (grue, zorkmid, ...)" | |
| "\_ YELL (or SCREAM)" | |
| "\_ SMELL" | |
| pause | |
| } | |
| routine help_walkthru | |
| { | |
| local m | |
| while true | |
| { | |
| menuitem[0] = "Hugo Zork Walkthru" | |
| menuitem[1] = "Warning! Warning!" | |
| menuitem[2] = "Part 1" | |
| menuitem[3] = "Part 2" | |
| menuitem[4] = "Part 3" | |
| menuitem[5] = "Part 4" | |
| menuitem[6] = "Part 5" | |
| menuitem[7] = "Part 6" | |
| menuitem[8] = "Part 7" | |
| menuitem[9] = "Part 8" | |
| m = Menu(9) | |
| select m | |
| case 1: help_warning | |
| case 2: help_part1 | |
| case 3: help_part2 | |
| case 4: help_part3 | |
| case 5: help_part4 | |
| case 6: help_part5 | |
| case 7: help_part6 | |
| case 8: help_part7 | |
| case 9: help_part8 | |
| case 0: return | |
| } | |
| } | |
| routine help_warning | |
| { | |
| CenterTitle("Warning! Warning!") | |
| "There has been much talk on rec.games.int-fiction lately about | |
| whether or not hints and/or walkthrus should be included with a | |
| game. I am of the opinion that hints at the very least should come | |
| with a game." | |
| "\nAnyway, throwing caution to the wind, I've included this complete | |
| walkthru for Hugo Zork. It is divided into eight parts to make it | |
| easier to follow and so that less of the game is revealed at any one | |
| time." | |
| "\nThis walkthru may not work exactly as shown, because the thief | |
| may take some of your items." | |
| "\nRemember, when in doubt, save!" | |
| pause | |
| } | |
| routine help_part1 | |
| { | |
| CenterTitle("Walkthru - Part 1") | |
| "South, East\n | |
| Open window\n | |
| Enter house\n | |
| West\n | |
| Get lamp\n | |
| Move rug\n | |
| Open trap door\n | |
| Turn on the lamp\n | |
| Down, South, East\n | |
| Get painting\n | |
| North, Up, Up\n | |
| Get knife and rope\n | |
| Down, West\n | |
| Open case\n | |
| Put painting in case\n | |
| Drop knife\n | |
| Get sword\n | |
| Open trap door\n | |
| Down." | |
| "\nNow would be a good time to save." | |
| pause | |
| } | |
| routine help_part2 | |
| { | |
| CenterTitle("Walkthru - Part 2") | |
| "North\n | |
| Kill troll with sword (repeat as necessary)\n | |
| Drop sword\n | |
| East, East, Southeast, East\n | |
| Tie rope to railing\n | |
| Climb down rope\n | |
| South, East\n | |
| Get coffin\n | |
| West, South\n | |
| Pray\n | |
| Turn off the lamp\n | |
| South, North, East, Down, Down, North\n | |
| Open coffin\n | |
| Get sceptre\n | |
| Wave scepter\n | |
| Get gold and coffin\n | |
| Southwest, Up, Up, Northwest, West\n | |
| Enter house\n | |
| Open bag\n | |
| Get garlic\n | |
| West\n | |
| Put coffin, scepter, and gold in case" | |
| pause | |
| } | |
| routine help_part3 | |
| { | |
| CenterTitle("Walkthru - Part 3") | |
| "Open trap door\n | |
| Turn on lamp\n | |
| Down, North, East, North, Northeast, East, North\n | |
| Get matches\n | |
| North\n | |
| Get wrench and screwdriver\n | |
| Push yellow button\n | |
| South, South\n | |
| Turn the bolt with the wrench\n | |
| West, Southwest, South, South, Southeast, East\n | |
| Climb down rope\n | |
| Get the torch\n | |
| Turn off lamp\n | |
| South\n | |
| Get the bell\n | |
| South\n | |
| Get book and candles\n | |
| Down, Down\n | |
| Ring bell\n | |
| Light match\n | |
| Light the candles with the match\n | |
| Get candles\n | |
| Read the book\n | |
| Drop candles\n | |
| South\n | |
| Get skull\n | |
| North, Up, North\n | |
| Rub mirror\n | |
| North, West, North, West, North, East\n | |
| Put torch in basket\n | |
| Turn on lamp\n | |
| North, Down" | |
| pause | |
| } | |
| routine help_part4 | |
| { | |
| CenterTitle("Walkthru - Part 4") | |
| "Be careful - this maze is tricky!\n" | |
| "East, Northeast, Southeast, Southwest, Down, Down, South\n | |
| Get coal\n | |
| North, Up, Up, North, East, South, North, Up, South\n | |
| Put coal and screwdriver in basket\n | |
| Lower basket\n | |
| North, Down, East, Northeast, Southeast, Southwest, Down, Down, West\n | |
| Drop all\n | |
| West\n | |
| Get coal, torch and screwdriver\n | |
| South\n | |
| Open lid\n | |
| Put coal into machine\n | |
| Close the lid\n | |
| Turn switch with screwdriver\n | |
| Opem the lid\n | |
| Get diamond\n | |
| Drop screwdriver\n | |
| North\n | |
| Put torch and diamond in the basket\n | |
| East\n | |
| Get skull, lamp and garlic\n | |
| East, Up, Up, North, East, South, North\n | |
| Get bracelet\n | |
| Up, South\n | |
| Raise basket\n | |
| Get torch and diamond\n | |
| Turn off lamp\n | |
| West\n | |
| Get figurine\n | |
| South, East, South, Down, Up\n | |
| Put skull, diamond, figurine, bracelet and torch in case\n | |
| Drop garlic" | |
| pause | |
| } | |
| routine help_part5 | |
| { | |
| CenterTitle("Walkthru - Part 5") | |
| "Turn on lamp\n | |
| North, East, North, Northeast, North\n | |
| Get trunk\n | |
| North\n | |
| Get air pump\n | |
| North\n | |
| Get trident\n | |
| South, South, South, East, East\n | |
| Inflate boat with pump\n | |
| Drop pump\n | |
| Get in boat\n | |
| Launch\n | |
| \"Wait\" until you see a buoy\n | |
| Get buoy\n | |
| East\n | |
| Get out of boat\n | |
| Get shovel\n | |
| Northeast" | |
| pause | |
| } | |
| routine help_part6 | |
| { | |
| CenterTitle("Walkthru - Part 6") | |
| "\"Dig sand with shovel\" until the scarab appears.\n | |
| Drop the shovel\n | |
| Get scarab\n | |
| Southwest\n | |
| Drop buoy\n | |
| Open buoy\n | |
| Get emerald\n | |
| South, South, West, West\n | |
| Turn off lamp\n | |
| Southwest, Up, Up, Northwest, West\n | |
| Enter house\n | |
| West\n | |
| Put scarab, emerald, chest and trident in case\n | |
| East, East, North, North\n | |
| Climb up tree\n | |
| Get egg\n | |
| Down, South, East, West, West\n | |
| Turn on lamp\n | |
| Down, North" | |
| pause | |
| } | |
| routine help_part7 | |
| { | |
| CenterTitle("Walkthru - Part 7") | |
| "West, South, East, Up\n | |
| Take coins and key\n | |
| Southwest, East, South, Southeast\n | |
| Ulysses (or Odysseus)\n | |
| Up\n | |
| Give egg to thief\n | |
| Down, East, East\n | |
| Put coins in case\n | |
| Get knife\n | |
| West, West\n" | |
| pause | |
| } | |
| routine help_part8 | |
| { | |
| CenterTitle("Walkthru - Part 8") | |
| "Up\n | |
| \"Kill thief with knife\" until he's dead\n | |
| Get all\n | |
| Down, Northwest, South, West, Up, Down, Northeast\n | |
| Unlock grate\n | |
| Open grate\n | |
| Up, South\n | |
| Wind canary\n | |
| Get bauble\n | |
| South, East, West, West\n | |
| Get canary\n | |
| Put egg, canary and bauble in case\n | |
| Down, North, East, East, East\n | |
| Echo\n | |
| Get bar\n | |
| West, West, West, South, Up\n | |
| Put bar in case\n | |
| Get map\n | |
| East, East, North, West\n | |
| Look\n | |
| Southwest, West\n" | |
| "Congratulations! You completed Hugo Zork!" | |
| pause | |
| } | |
| !------------------------------------------------------------------------- | |
| ! REPLACEMENT MESSAGES | |
| !------------------------------------------------------------------------- | |
| replace NewOMessages(obj, num, a, b) | |
| { | |
| select obj | |
| case vehicle | |
| { | |
| select num | |
| case 1 | |
| { | |
| "To walk, you'll have to get "; | |
| print self.prep #2; | |
| " of "; | |
| print The(self); | |
| "." | |
| return true | |
| } | |
| } | |
| } | |
| replace NewMessages(r, num, a, b) | |
| { | |
| select r | |
| case &DoSuperBrief: | |
| { | |
| print "Super-brief descriptions." | |
| return true | |
| } | |
| case &DoVerbose: | |
| { | |
| print "Maximum verbosity." | |
| return true | |
| } | |
| case &DescribePlace | |
| { | |
| select num | |
| case 1 | |
| { | |
| print "It is pitch black. You are likely to | |
| be eaten by a grue." | |
| return true | |
| } | |
| case 2 | |
| { | |
| print "There"; IsorAre(a, true); " "; Art(a); \ | |
| " here." | |
| return true | |
| } | |
| } | |
| case &DoLook | |
| { | |
| select num | |
| case 1 | |
| { | |
| print "It is pitch black. You are likely to | |
| be eaten by a grue." | |
| return true | |
| } | |
| case 2 | |
| { | |
| print CThe(object); " look"; MatchSubject(object); \ | |
| " just like you'd expect." | |
| return true | |
| } | |
| } | |
| case &DoLookUnder | |
| { | |
| "There is nothing but dust there." | |
| return true | |
| } | |
| case &DoHello | |
| { | |
| local d | |
| d = random(4) | |
| select d | |
| case 1 | |
| { | |
| "Hello." | |
| return true | |
| } | |
| case 2 | |
| { | |
| "Good day." | |
| return true | |
| } | |
| case 3 | |
| { | |
| "Nice weather we've been having lately." | |
| return true | |
| } | |
| case 4 | |
| { | |
| "Goodbye." | |
| return true | |
| } | |
| } | |
| case &DoGet | |
| { | |
| select num | |
| case 1 | |
| { | |
| print "You already have that." | |
| return true | |
| } | |
| case 2 | |
| { | |
| print "This is not progress you are making." | |
| return true | |
| } | |
| case 3 | |
| { | |
| print CThe(object); " probably wouldn't be too big | |
| on that idea." | |
| return true | |
| } | |
| case 4 | |
| { | |
| print CThe(parent(object)); | |
| if parent(object) is plural | |
| print " don't"; | |
| else | |
| print " doesn't"; | |
| print " want to give "; The(object); " to you." | |
| return true | |
| } | |
| case 5 | |
| { | |
| print CThe(parent(object)); \ | |
| IsOrAre(parent(object), true); " closed." | |
| return true | |
| } | |
| case 6 | |
| { | |
| print "You can't take "; The(object); " while | |
| you're "; | |
| if object.prep: print object.prep; | |
| elseif object is platform: print "in"; | |
| else: print "on"; | |
| if object is plural: print " them." | |
| else: print " it." | |
| return true | |
| } | |
| case 7 | |
| { | |
| local c | |
| c = random(4) | |
| select c | |
| case 1 | |
| { | |
| "A valiant attempt." | |
| } | |
| case 2 | |
| { | |
| "You can't be serious." | |
| } | |
| case 3 | |
| { | |
| "An interesting idea..." | |
| } | |
| case 4 | |
| { | |
| "What a concept!" | |
| } | |
| return true | |
| } | |
| case 8 | |
| { | |
| print "Taken." | |
| return true | |
| } | |
| case 9 | |
| { | |
| print "You're carrying too much to take that." | |
| return true | |
| } | |
| } | |
| case &DoGo | |
| { | |
| select num | |
| case 1 | |
| { | |
| print CThe(obstacle); " stop"; \ | |
| MatchSubject(obstacle); " you from going anywhere." | |
| return true | |
| } | |
| case 2 | |
| { | |
| print "You can't go that way." | |
| return true | |
| } | |
| case 3 | |
| { | |
| print "You'll have to get "; | |
| if parent(player).prep #2 | |
| { | |
| print parent(player).prep #2; " "; | |
| } | |
| else | |
| { | |
| print "out "; | |
| } | |
| print "of "; The(parent(player)); " first." | |
| return true | |
| } | |
| } | |
| } | |
| replace DarkWarning | |
| { | |
| if player is ghost | |
| { | |
| DescribePlace(location) | |
| location is visited | |
| return false | |
| } | |
| "You have moved into a dark place." | |
| if (dark_warning = 0) | |
| { | |
| dark_warning = 1 | |
| NewMessages(&DescribePlace, 1) | |
| } | |
| elseif random(3) = 1 | |
| { | |
| "Oh, no! You have walked into the slavering fangs of | |
| a lurking grue!" | |
| NotDeadYet | |
| } | |
| } | |
| !------------------------------------------------------------------------- | |
| ! NEW ROUTINES | |
| !------------------------------------------------------------------------- | |
| routine DoCount | |
| { | |
| "You have lost your mind." | |
| } | |
| routine DoFly | |
| { | |
| "You'll have to explain that one to me." | |
| } | |
| routine Already_done | |
| { | |
| local a | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "Too late for that." | |
| return true | |
| } | |
| case 2 | |
| { | |
| "Have your eyes checked." | |
| return true | |
| } | |
| case 3 | |
| { | |
| "Look around." | |
| return true | |
| } | |
| } | |
| routine DoSailor | |
| { | |
| if Contains(location, cyclops) | |
| { | |
| "The cyclops, hearing the name of his father's | |
| deadly nemesis, flees the room by knocking down | |
| the wall on the east of the room." | |
| remove cyclops | |
| wooden_door is special | |
| trap_door is special | |
| cyclops_room.threat_level = 0 | |
| maze15.threat_level = 0 | |
| } | |
| else | |
| { | |
| "Wasn't he a sailor?" | |
| return true | |
| } | |
| } | |
| routine DoLift | |
| { | |
| "Playing in this way with "; | |
| print the(object); | |
| " has no effect." | |
| } | |
| routine DoEcho | |
| { | |
| "echo echo ..." | |
| return true | |
| } | |
| routine JumpMessage | |
| { | |
| local a | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "You should have looked before you leaped." | |
| } | |
| case 2 | |
| { | |
| "In the movies, your life would be passing before your eyes." | |
| } | |
| case 3 | |
| { | |
| "Geronimo..." | |
| } | |
| } | |
| routine DoTurn | |
| { | |
| if not xobject | |
| { | |
| "What do you want to turn "; | |
| print The(object); | |
| " with?" | |
| } | |
| else | |
| { | |
| "You can't turn that!" | |
| } | |
| } | |
| routine DoTreasure | |
| { | |
| if location = temple | |
| { | |
| MovePlayer(treasure_room) | |
| } | |
| elseif location = treasure_room | |
| { | |
| MovePlayer(temple) | |
| } | |
| else | |
| { | |
| "Nothing happens." | |
| } | |
| } | |
| routine DoTemple | |
| { | |
| if location = temple | |
| { | |
| MovePlayer(treasure_room) | |
| } | |
| elseif location = treasure_room | |
| { | |
| MovePlayer(temple) | |
| } | |
| else | |
| { | |
| "Nothing happens." | |
| } | |
| } | |
| routine DoPray | |
| { | |
| if location = altar_room | |
| { | |
| trap_door is special | |
| MovePlayer(forest1) | |
| } | |
| else | |
| { | |
| "If you pray enough, your prayers may be answered." | |
| } | |
| } | |
| routine DoZork | |
| { | |
| "At your service!" | |
| } | |
| routine DoFool | |
| { | |
| "A hollow voice says \"Fool.\"" | |
| } | |
| routine DoChomp | |
| { | |
| "Preposterous!" | |
| } | |
| routine DoWin | |
| { | |
| "Naturally!" | |
| } | |
| routine DoRepent | |
| { | |
| "It could very well be too late!" | |
| } | |
| routine CalculateRank | |
| { | |
| if score = 350 | |
| rank = 7 | |
| elseif score > 330 | |
| rank = 6 | |
| elseif score > 300 | |
| rank = 5 | |
| elseif score > 200 | |
| rank = 4 | |
| elseif score > 100 | |
| rank = 3 | |
| elseif score > 50 | |
| rank = 2 | |
| elseif score > 25 | |
| rank = 1 | |
| else | |
| rank = 0 | |
| return true | |
| } | |
| routine DoBug | |
| { | |
| "Bug? Not in a flawless program like this! (Cough, cough)." | |
| } | |
| routine DoFind | |
| { | |
| "You don't see any "; | |
| print object.noun; | |
| " here!" | |
| } | |
| routine DoMumble | |
| { | |
| "You'll have to speak up if you expect me to hear you!" | |
| } | |
| routine DoRaise | |
| { | |
| "Playing in this way with "; | |
| print The(object); | |
| " isn't notably helpful." | |
| } | |
| routine DoLower | |
| { | |
| "Playing in this way with "; | |
| print The(object); | |
| " isn't notably helpful." | |
| } | |
| routine DoRing | |
| { | |
| "Playing in this way with "; | |
| print The(object); | |
| " isn't notably helpful." | |
| } | |
| routine DoPushWith | |
| { | |
| "You can't push the "; | |
| print The(object); | |
| " with "; | |
| print The(xobject) | |
| } | |
| routine DoExtinguish | |
| { | |
| "You can't extinguish "; | |
| print The(object); | |
| "." | |
| } | |
| routine DoPump | |
| { | |
| if not xobject | |
| { | |
| "What do you want to inflate "; | |
| print The(object); | |
| " with?" | |
| } | |
| else | |
| { | |
| "How can you inflate that?" | |
| } | |
| } | |
| routine DoDeflate | |
| { | |
| "Come on, now!" | |
| } | |
| routine DoPoke | |
| { | |
| if not xobject | |
| { | |
| "What do you want to puncture "; | |
| print The(object); | |
| "with?" | |
| } | |
| else | |
| { | |
| "Trying to destroy "; | |
| print The(object); | |
| " with "; | |
| print Art(xobject); | |
| " is futile." | |
| } | |
| } | |
| routine DoPatch | |
| { | |
| if not xobject | |
| { | |
| "What do you want to patch "; | |
| print The(object); | |
| "with?" | |
| } | |
| else | |
| { | |
| "With "; | |
| print Art(xobject); | |
| "?" | |
| } | |
| } | |
| routine DoTooLoud | |
| { | |
| ! Hack alert: if word[1] is "d" or "down" (such as when you move from | |
| ! the Deep Canyon to the Loud Room), the routine which moves the player | |
| ! to a random room will not work. If anyone has any idea why this is, | |
| ! *please* let me know. It's probably something stupid I overlooked, | |
| ! but it did take me 6 hours to discover this "solution". | |
| ! P.S. I also found that when word[1] is "l" or "look", the same problem | |
| ! occurs. I changed the routine to change word[1] to "e" if it wasn't | |
| ! already. | |
| ! #BeginHack | |
| if (word[1] = "go" or | |
| word[1] = "walk") and | |
| word[2] ~= "" | |
| { | |
| word[1] = word[2] | |
| } | |
| if word[1] ~= "e" or | |
| word[1] ~= "east" | |
| { | |
| word[1] = "e" | |
| } | |
| ! #EndHack | |
| local a | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| MovePlayer(round_room) | |
| } | |
| case 2 | |
| { | |
| MovePlayer(damp_cave) | |
| } | |
| case 3 | |
| { | |
| MovePlayer(deep_canyon) | |
| } | |
| return true | |
| } | |
| routine DoWind | |
| { | |
| "You cannot wind up "; | |
| print Art(object); | |
| "." | |
| } | |
| routine DoBreakEgg | |
| { | |
| egg is broken | |
| egg is open | |
| egg is moved | |
| egg.adjective #1 = "jewel-encrusted" | |
| egg.adjective #2 = "broken" | |
| egg.adjective #3 = "ruined" | |
| egg.name = "broken jewel-encrusted egg" | |
| } | |
| routine DoWalkOn | |
| { | |
| "You can't walk on "; | |
| print The(object); | |
| "." | |
| } | |
| routine DoCurse | |
| { | |
| if not object | |
| { | |
| "Such language in a high-class establishment like this!" | |
| } | |
| elseif object = you | |
| { | |
| "Insults of this nature won't help you." | |
| } | |
| else | |
| { | |
| "What a loony!" | |
| } | |
| } | |
| routine DoFrobozz | |
| { | |
| "The FROBOZZ Corporation created, owns, and operates this | |
| dungeon." | |
| } | |
| routine DoThrowIn | |
| { | |
| if not xobject | |
| { | |
| "You'll have to be a little more specific about what | |
| you'd like to throw "; | |
| print The(object); " in." | |
| } | |
| elseif xobject is not living | |
| { | |
| "What exactly are you hoping for?" | |
| } | |
| else | |
| { | |
| "You ultimately decide that throwing "; | |
| print The(object); | |
| " at "; | |
| print The(xobject); | |
| " isn't such a great idea." | |
| } | |
| return true | |
| } | |
| routine DoDiagnose | |
| { | |
| wound_level = max_hit_points - current_hit_points | |
| if wound_level > 4 | |
| { | |
| wound_level = 4 | |
| } | |
| "You "; | |
| select wound_level | |
| case 0 | |
| { | |
| "are in perfect health." | |
| } | |
| case 1 | |
| { | |
| "have a light wound, "; | |
| } | |
| case 2 | |
| { | |
| "have a serious wound, "; | |
| } | |
| case 3 | |
| { | |
| "have several wounds, "; | |
| } | |
| case 4 | |
| { | |
| "have several serious wounds, "; | |
| } | |
| if turns_to_heal > 0 | |
| { | |
| "which will be cured after "; | |
| print number turns_to_heal; | |
| if turns_to_heal = 1 | |
| { | |
| " move." | |
| } | |
| else | |
| { | |
| " moves." | |
| } | |
| } | |
| select current_hit_points | |
| case 1 | |
| { | |
| "You can be killed by one more light wound." | |
| } | |
| case 2 | |
| { | |
| "You can be killed by a serious wound." | |
| } | |
| case 3 | |
| { | |
| "You can survive one serious wound." | |
| } | |
| case 4, 5 | |
| { | |
| "You are strong enough to take several wounds." | |
| } | |
| if lives_used > 0 | |
| { | |
| "You have been killed "; | |
| if lives_used = 1 | |
| { | |
| "once." | |
| } | |
| else | |
| { | |
| "twice." | |
| } | |
| } | |
| return true | |
| } | |
| routine ResolveAttack(diff) | |
| { | |
| local chance, roll | |
| select diff ! chance * 10 = % chance to hit | |
| case 3, 4, 5 | |
| chance = 9 | |
| case 0, 1, 2 | |
| chance = 5 | |
| case -1, -2, -3 | |
| chance = 3 | |
| case -3, -4, -5, -6 | |
| chance = 1 | |
| roll = random(10) | |
| if roll <= chance ! OK, now that the target is hit, what happened? | |
| { | |
| combat_result = random(6) | |
| if combat_result = 4 | |
| { | |
| damage = 1 | |
| } | |
| elseif combat_result = 5 | |
| { | |
| damage = 2 | |
| } | |
| elseif combat_result = 6 | |
| { | |
| damage = 10 | |
| } | |
| ! 1 = Stun | |
| ! 2 = Disarm | |
| ! 3 = KO | |
| ! 4 = Light Wound | |
| ! 5 = Serious Wound | |
| ! 6 = Kill | |
| } | |
| else | |
| { | |
| combat_result = 0 ! Miss | |
| } | |
| } | |
| routine DoRead | |
| { | |
| Perform(&DoLook, object) | |
| } | |
| routine DoLaunch | |
| { | |
| local v, moveto | |
| if player in location | |
| { | |
| OMessage(vehicle, 2) ! "You aren't in anything." | |
| return false | |
| } | |
| v = parent(player) ! the vehicle | |
| if v.before: return true | |
| select location | |
| case dam_base | |
| { | |
| moveto = river1 | |
| Activate (RiverCurrent, 5) | |
| } | |
| case beach_north | |
| { | |
| moveto = river3 | |
| Activate (RiverCurrent, 3) | |
| } | |
| case beach_south | |
| { | |
| moveto = river4 | |
| Activate (RiverCurrent, 2) | |
| } | |
| case sandy_beach | |
| { | |
| moveto = river4 | |
| Activate (RiverCurrent, 2) | |
| } | |
| case shore | |
| { | |
| moveto = river5 | |
| Activate (RiverCurrent, 1) | |
| } | |
| case river1, river2, river3, river4, river5 | |
| { | |
| "You are on the river, or have you forgotten?" | |
| return true | |
| } | |
| case reservoir | |
| { | |
| "You are on the lake, or have you forgotten?" | |
| return true | |
| } | |
| case stream_view | |
| { | |
| moveto = stream | |
| } | |
| case reservoir_north | |
| { | |
| moveto = reservoir | |
| } | |
| case reservoir_south | |
| { | |
| moveto = reservoir | |
| } | |
| case else | |
| { | |
| "You can't do that here." | |
| return true | |
| } | |
| if ObjectisAttached(v, location, moveto) | |
| return false | |
| ! Finally, the vehicle can move | |
| move v to moveto | |
| v is moved | |
| old_location = location | |
| location = moveto | |
| MoveAllAttachables(v, old_location, location) | |
| if not FindLight(location) | |
| { | |
| DarkWarning | |
| } | |
| else | |
| { | |
| DescribePlace(location) | |
| location is visited | |
| } | |
| run parent(player).after | |
| return true | |
| } | |
| routine DoLand | |
| { | |
| local v, moveto | |
| if player in location | |
| { | |
| OMessage(vehicle, 2) ! "You aren't in anything." | |
| return false | |
| } | |
| v = parent(player) ! the vehicle | |
| if v.before: return true | |
| if word[1] = "land" | |
| { | |
| select location | |
| case river1 | |
| { | |
| "The magic boat comes to rest on the shore." | |
| moveto = dam_base | |
| } | |
| case river2 | |
| { | |
| "There is no safe landing spot here." | |
| return true | |
| } | |
| case river3 | |
| { | |
| "The magic boat comes to rest on the shore." | |
| moveto = beach_north | |
| } | |
| case river4 | |
| { | |
| "You need to specify a direction." | |
| return true | |
| } | |
| case river5 | |
| { | |
| "The magic boat comes to rest on the shore." | |
| moveto = shore | |
| } | |
| case stream | |
| { | |
| "The magic boat comes to rest on the shore." | |
| moveto = stream_view | |
| } | |
| case else | |
| { | |
| "You can't go that way." | |
| return true | |
| } | |
| Deactivate(RiverCurrent) | |
| } | |
| if ObjectisAttached(v, location, moveto) | |
| return false | |
| ! Finally, the vehicle can move | |
| move v to moveto | |
| v is moved | |
| old_location = location | |
| location = moveto | |
| MoveAllAttachables(v, old_location, location) | |
| if not FindLight(location) | |
| { | |
| DarkWarning | |
| } | |
| else | |
| { | |
| DescribePlace(location) | |
| location is visited | |
| } | |
| run parent(player).after | |
| return true | |
| } | |
| routine NotDeadYet | |
| { | |
| "\n\_ **** You have died ****" | |
| score -= 10 | |
| lives_used++ | |
| current_hit_points = max_hit_points | |
| turns_to_heal = 0 | |
| if lives_used < 3 and | |
| altar_room is not visited | |
| { | |
| "\nNow, let's take a look here... Well, you probably | |
| deserve another chance. I can't quite fix you up | |
| completely, but you can't have everything." | |
| ScatterPossessions | |
| MovePlayer(forest1) | |
| } | |
| elseif lives_used < 3 and | |
| altar_room is visited | |
| { | |
| "\nAs you take your last breath, you feel relieved of your | |
| burdens. The feeling passes as you find yourself before | |
| the gates of Hell, where the spirits jeer at you and deny | |
| you entry. Your senses are disturbed. The objects in the | |
| dungeon appear indistinct, bleached of color, even unreal." | |
| player is ghost | |
| player is light | |
| Deactivate(ThiefDaemon) | |
| remove thief | |
| ScatterPossessions | |
| MovePlayer(entrance_to_hades) | |
| } | |
| else | |
| { | |
| "\nYou clearly are a suicidal maniac. We don't allow | |
| psychotics in the cave, since they may harm other | |
| adventurers. Your remains will be installed in the | |
| Land of the Living Dead, where your fellow adventurers | |
| may gloat over them." | |
| endflag = 3 | |
| } | |
| } | |
| routine ScatterPossessions | |
| { | |
| ! If the player is carrying valuable items, move them to random | |
| ! maze locations. Non-valuable items are scattered above ground, | |
| ! near the house. | |
| if Contains(player, lamp) | |
| { | |
| move lamp to living_room | |
| Perform(&DoSwitchOff, lamp) | |
| } | |
| if Contains(player, coffin) | |
| { | |
| move coffin to egyptian_room | |
| coffin is not open | |
| } | |
| local a, c, i, j, dest | |
| c = children(player) | |
| while c > 0 | |
| { | |
| for i in player | |
| { | |
| if i is valuable | |
| { | |
| a = random(7) | |
| select a | |
| case 1 | |
| { | |
| dest = maze1 | |
| } | |
| case 2 | |
| { | |
| dest = maze2 | |
| } | |
| case 3 | |
| { | |
| dest = maze3 | |
| } | |
| case 4 | |
| { | |
| dest = maze4 | |
| } | |
| case 5 | |
| { | |
| dest = maze5 | |
| } | |
| case 6 | |
| { | |
| dest = dead_end1 | |
| } | |
| case 7 | |
| { | |
| dest = dead_end3 | |
| } | |
| } | |
| else | |
| { | |
| a = random(6) | |
| select a | |
| case 1 | |
| { | |
| dest = south_of_house | |
| } | |
| case 2 | |
| { | |
| dest = behind_house | |
| } | |
| case 3 | |
| { | |
| dest = kitchen | |
| } | |
| case 4 | |
| { | |
| dest = forest_path | |
| } | |
| case 5 | |
| { | |
| dest = forest2 | |
| } | |
| case 6 | |
| { | |
| dest = clearing | |
| } | |
| } | |
| j = i | |
| move j to dest | |
| c-- | |
| } | |
| } | |
| } | |
| routine DoSqueeze | |
| { | |
| if object is living | |
| { | |
| print CThe(object); | |
| " does not understand this." | |
| } | |
| else | |
| { | |
| "How singularly useless." | |
| } | |
| } | |
| routine DoDrown | |
| { | |
| "It seems that "; | |
| print The(object); | |
| " didn't agree with the boat, as evidenced by the loud hissing | |
| noise issuing therefrom. With a pathetic sputter, the boat deflates, | |
| leaving you without." | |
| select location | |
| case river1, river2, river3, river4, river5 | |
| { | |
| "\nIn other words, fighting the fierce currents of the Frigid | |
| River. You manage to hold your own for a bit, but then you | |
| are carried over a waterfall and into some nasty rocks. | |
| Ouch!" | |
| NotDeadYet | |
| } | |
| case reservoir, stream | |
| { | |
| "\nAnother pathetic sputter, this time from you, heralds | |
| your drowning." | |
| NotDeadYet | |
| } | |
| } | |
| routine DoMolest | |
| { | |
| "What a (ahem!) strange idea." | |
| } | |
| routine DoFill | |
| { | |
| "There's nothing to fill "; | |
| print The(object); | |
| " with." | |
| } | |
| routine DoPour | |
| { | |
| Perform(&DoDrop, object) | |
| } | |
| routine DoWalkAround | |
| { | |
| if not object | |
| { | |
| "What do you want to walk around?" | |
| } | |
| elseif object = house | |
| { | |
| select location | |
| case west_of_house | |
| { | |
| MovePlayer(north_of_house) | |
| } | |
| case north_of_house | |
| { | |
| MovePlayer(behind_house) | |
| } | |
| case behind_house | |
| { | |
| MovePlayer(south_of_house) | |
| } | |
| case south_of_house | |
| { | |
| MovePlayer(west_of_house) | |
| } | |
| } | |
| elseif object = forest | |
| { | |
| select location | |
| case forest1 | |
| { | |
| MovePlayer(forest_path) | |
| } | |
| case forest_path | |
| { | |
| MovePlayer(forest2) | |
| } | |
| case forest2 | |
| { | |
| MovePlayer(clearing1) | |
| } | |
| case clearing1 | |
| { | |
| MovePlayer(forest1) | |
| } | |
| } | |
| else | |
| { | |
| "Use compass directions for movement." | |
| } | |
| } | |
| routine DoShake | |
| { | |
| if object is container and | |
| children(object) > 0 | |
| { | |
| "It sounds like there is something inside "; | |
| print The(object); | |
| "." | |
| } | |
| elseif object is container and | |
| children(object) = 0 | |
| { | |
| print CThe(object); | |
| " sounds empty." | |
| } | |
| else | |
| { | |
| "Shaken." | |
| } | |
| } | |
| routine RemoveThief(flag) | |
| { | |
| local a, i, j | |
| self = thief | |
| remove self | |
| Deactivate(ThiefDaemon) | |
| self is not living | |
| self is unconscious | |
| treasure_room.threat_level = 0 | |
| if not Contains(player, stiletto) | |
| { | |
| move stiletto to location | |
| stiletto is not hidden | |
| } | |
| if location = treasure_room and | |
| flag = 1 | |
| { | |
| "As the thief dies, the power of his magic decreases, and | |
| his treasure reappears." | |
| } | |
| move silver_chalice to location | |
| for i in thiefs_bag | |
| { | |
| a++ | |
| } | |
| if a > 0 | |
| { | |
| "\nHis booty remains." | |
| while a > 0 | |
| { | |
| for i in thiefs_bag | |
| { | |
| j = i | |
| if j = egg and | |
| egg is not broken | |
| { | |
| egg is not lockable | |
| egg is open | |
| move egg to location | |
| move canary to egg | |
| } | |
| else | |
| { | |
| move j to location | |
| } | |
| } | |
| a-- | |
| } | |
| } | |
| remove thiefs_bag | |
| move canvas to location | |
| if Contains(player, sword) | |
| { | |
| "Your sword is no longer glowing." | |
| } | |
| } | |
| routine MissMessage(enemy) | |
| { | |
| local a, b | |
| if enemy = cyclops | |
| { | |
| a = 5 | |
| } | |
| else | |
| { | |
| a = 6 | |
| } | |
| b = random(a) | |
| select b | |
| case 1 | |
| { | |
| print "You miss "; The(enemy); " by an inch." | |
| } | |
| case 2 | |
| { | |
| print "A good slash, but it misses "; The(enemy); | |
| " by a mile." | |
| } | |
| case 3 | |
| { | |
| print "You charge, but "; The(enemy); " jumps nimbly aside." | |
| } | |
| case 4 | |
| { | |
| print "A quick stroke, but "; The(enemy); " is on guard." | |
| } | |
| case 5 | |
| { | |
| print "A good stroke, but it's too slow; "; The(enemy); | |
| " dodges." | |
| } | |
| case 6 | |
| { | |
| print "Clang! Crash! "; CThe(enemy); " parries." | |
| } | |
| return true | |
| } | |
| routine DazeMessage(enemy) | |
| { | |
| local a | |
| a = random(5) | |
| select a | |
| case 1 | |
| { | |
| print CThe(enemy); | |
| " is staggered, and drops to his knees." | |
| } | |
| case 2 | |
| { | |
| print CThe(enemy); | |
| " is momentarily disoriented and can't fight back." | |
| } | |
| case 3 | |
| { | |
| "The force of your blow knocks "; | |
| print The(enemy); | |
| " back, stunned." | |
| } | |
| case 4 | |
| { | |
| print CThe(enemy); | |
| " is confused and can't fight back." | |
| } | |
| case 5 | |
| { | |
| "A savage blow on the thigh! " | |
| print CThe(enemy); | |
| " is stunned but can still fight!" | |
| } | |
| } | |
| routine KnockOutMessage(enemy) | |
| { | |
| local a | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| print CThe(enemy); | |
| " is battered into unconsciousness." | |
| } | |
| case 2 | |
| { | |
| "A furious exchange, and "; | |
| print The(enemy); | |
| " is knocked out!" | |
| } | |
| case 3 | |
| { | |
| "The haft of your weapon knocks out "; | |
| print The(enemy); | |
| "." | |
| } | |
| } | |
| routine DisarmedMessage(enemy) | |
| { | |
| local a | |
| a = random(2) | |
| select a | |
| case 1 | |
| { | |
| "The quickness of your thrust knocks "; | |
| print The(enemy); | |
| "'s weapon to the floor, leaving him unarmed." | |
| } | |
| case 2 | |
| { | |
| print CThe(enemy); | |
| " is disarmed by a subtle feint past his guard." | |
| } | |
| } | |
| routine MinorWoundMessage(enemy) | |
| { | |
| local a | |
| a = random(4) | |
| select a | |
| case 1 | |
| { | |
| print CThe(enemy); | |
| " is struck on the arm; blood begins to | |
| trickle down." | |
| } | |
| case 2 | |
| { | |
| "Your weapon pinks "; | |
| print The(enemy); | |
| " on the wrist, but it's not serious." | |
| } | |
| case 3 | |
| { | |
| "Your stroke lands, but it was only the flat of the blade." | |
| } | |
| case 4 | |
| { | |
| "The blow lands, making a shallow gash in "; | |
| print The(enemy); | |
| "'s arm!" | |
| } | |
| } | |
| routine SeriousWoundMessage(enemy) | |
| { | |
| local a | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| print CThe(enemy); | |
| " receives a deep gash in his side." | |
| } | |
| case 2 | |
| { | |
| "Slash! Your blow lands! That one hit an artery, it could | |
| be serious!" | |
| } | |
| case 3 | |
| { | |
| "Slash! Your stroke connects! This could be serious!" | |
| } | |
| } | |
| routine DeadMessage(enemy) | |
| { | |
| local a | |
| a = random(3) | |
| select a | |
| case 1 | |
| { | |
| "It's curtains for "; | |
| print The(enemy); | |
| " as you remove his head." | |
| } | |
| case 2 | |
| { | |
| "The fatal blow strikes "; | |
| print The(enemy); | |
| " square in the heart: He dies." | |
| } | |
| case 3 | |
| { | |
| print CThe(enemy); | |
| " takes a fatal blow and slumps to the floor dead." | |
| } | |
| } | |
| routine DoOil | |
| { | |
| if not xobject | |
| { | |
| "What do you want to oil "; | |
| print The(object); | |
| " with?" | |
| } | |
| else | |
| { | |
| "You probably put spinach in your gas tank, too." | |
| } | |
| } | |
| !------------------------------------------------------------------------- | |
| ! REPLACEMENT ROUTINES | |
| !------------------------------------------------------------------------- | |
| replace DoBurn | |
| { | |
| if not xobject | |
| { | |
| "What do you want to burn "; | |
| print The(object); | |
| " with?" | |
| return true | |
| } | |
| elseif xobject is heat_source | |
| { | |
| if object is not burnable | |
| { | |
| "You can't burn "; | |
| print Art(object); | |
| "." | |
| } | |
| elseif Contains(player, object) | |
| { | |
| print CThe(object); | |
| " catches fire. Unfortunately, you were "; | |
| if parent(player) = magic_boat | |
| { | |
| "in"; | |
| } | |
| else | |
| { | |
| "holding"; | |
| } | |
| if object is plural | |
| { | |
| " them"; | |
| } | |
| else | |
| { | |
| " it"; | |
| } | |
| " at the time." | |
| remove object | |
| object is moved | |
| NotDeadYet | |
| } | |
| else | |
| { | |
| print CThe(object); | |
| " catches fire and is consumed." | |
| remove object | |
| object is moved | |
| } | |
| } | |
| else | |
| { | |
| "With "; | |
| print Art(xobject); | |
| "??!?" | |
| } | |
| return true | |
| } | |
| replace DoYell | |
| { | |
| "Aaaarrrrgggghhhh!" | |
| return true | |
| } | |
| replace DoJump | |
| { | |
| local a | |
| a = random(4) | |
| select a | |
| case 1 | |
| { | |
| "Very good. Now you can go to the second grade." | |
| } | |
| case 2 | |
| { | |
| "Are you enjoying yourself?" | |
| } | |
| case 3 | |
| { | |
| "Wheeeeeeeeee!!!!!" | |
| } | |
| case 4 | |
| { | |
| "Do you expect me to applaud?" | |
| } | |
| return true | |
| } | |
| replace PrintScore(end_of_game) | |
| { | |
| if end_of_game: print "" | |
| "Your score is "; | |
| print number score; | |
| " (total of "; | |
| print number MAX_SCORE; | |
| " points), in "; | |
| print number counter; | |
| if counter = 1 | |
| { | |
| " move." | |
| } | |
| else | |
| { | |
| " moves." | |
| } | |
| CalculateRank | |
| "This gives you the rank of "; | |
| print ranking[rank]; | |
| "." | |
| } | |
| replace DoDig | |
| { | |
| if not xobject | |
| { | |
| "What do you want to dig "; | |
| print The(object); | |
| " with?" | |
| } | |
| else | |
| { | |
| "You can't dig "; | |
| print The(object); | |
| " with "; | |
| print The(xobject); | |
| "." | |
| } | |
| } | |
| replace DoSmell | |
| { | |
| "It smells like "; | |
| print Art(object); | |
| "." | |
| } | |
| replace DoHit | |
| { | |
| if player is stunned | |
| { | |
| player is not stunned | |
| "You are still recovering from that last blow, so your | |
| attack is ineffective." | |
| return true | |
| } | |
| elseif xobject and | |
| xobject ~= hands and | |
| not Contains(player, xobject) | |
| { | |
| "You aren't even holding "; | |
| print The(xobject); | |
| "." | |
| return true | |
| } | |
| if object is not living | |
| { | |
| "I've known strange people, but fighting "; | |
| print Art(object); | |
| "?" | |
| } | |
| else | |
| { | |
| if children(player) = 0 or | |
| xobject = hands | |
| { | |
| "Trying to attack "; | |
| print Art(object); | |
| " with your bare hands is suicidal." | |
| } | |
| elseif not xobject | |
| { | |
| "What do you want to fight "; | |
| print The(object); | |
| " with?" | |
| } | |
| elseif xobject is not weapon | |
| { | |
| "Trying to attack "; | |
| print The(object); | |
| " with "; | |
| print Art(xobject); | |
| " is suicidal." | |
| } | |
| elseif xobject is weapon | |
| { | |
| local a, diff, target | |
| CalculateRank | |
| select object | |
| case troll | |
| { | |
| a = 0 | |
| target = troll | |
| } | |
| case cyclops | |
| { | |
| a = 6 | |
| target = cyclops | |
| } | |
| case thief | |
| { | |
| a = 6 | |
| target = thief | |
| } | |
| if target is unconscious | |
| { | |
| "The unconscious "; | |
| print target.name; | |
| " cannot defend himself: He dies." | |
| damage = 10 | |
| run target.take_damage | |
| return true | |
| } | |
| elseif target is disarmed | |
| { | |
| "The unarmed "; | |
| print target.name; | |
| " cannot defend himself: He dies." | |
| damage = 10 | |
| run target.take_damage | |
| return true | |
| } | |
| else | |
| { | |
| target is hostile | |
| if xobject = nasty_knife | |
| { | |
| rank++ | |
| } | |
| elseif xobject = stiletto | |
| { | |
| rank += 2 | |
| } | |
| diff = rank - a | |
| ResolveAttack(diff) | |
| select combat_result | |
| case 0 | |
| { | |
| MissMessage(target) | |
| } | |
| case 1 | |
| { | |
| target is stunned | |
| DazeMessage(target) | |
| } | |
| case 2 | |
| { | |
| run target.no_weapon | |
| } | |
| case 3 | |
| { | |
| run target.knocked_out | |
| } | |
| case else | |
| { | |
| run target.take_damage | |
| } | |
| } | |
| } | |
| } | |
| return true | |
| } | |
| replace DoCut | |
| { | |
| if not xobject | |
| { | |
| "What do you want cut "; | |
| print The(object); | |
| " with?" | |
| } | |
| else | |
| { | |
| if xobject is weapon | |
| { | |
| "Strange concept, cutting "; | |
| print The(object); | |
| "." | |
| } | |
| else | |
| { | |
| "The \"cutting edge\" of "; | |
| print Art(xobject); | |
| " is hardly adequate." | |
| } | |
| } | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! | |
| ! PrintStatusline | |
| ! Replaces the old StatusLine routine - this one prints out the words | |
| ! "Score:" and "Moves:" on the status line | |
| ! | |
| ! v2.4 revision by KT | |
| ! | |
| !---------------------------------------------------------------------------- | |
| replace PrintStatusline | |
| { | |
| local temp_it_obj | |
| temp_it_obj = it_obj | |
| if display.linelength < 80 | |
| display.statusline_height = 2 | |
| Font(BOLD_OFF | ITALIC_OFF | UNDERLINE_OFF | PROP_OFF) | |
| window display.statusline_height | |
| { | |
| color SL_TEXTCOLOR, SL_BGCOLOR | |
| cls | |
| locate 1, 1 | |
| if not light_source | |
| print "In the dark"; | |
| else | |
| { | |
| print "\_"; | |
| print capital location.name; | |
| if player not in location | |
| { | |
| if parent(player).prep | |
| print ", "; parent(player).prep; " "; | |
| else | |
| print ", "; IN_WORD; " "; | |
| print Art(parent(player)); | |
| } | |
| } | |
| if display.statusline_height = 1 | |
| print to 50; | |
| else | |
| { | |
| locate 2, 2 | |
| } | |
| print "Score: "; number score; | |
| ! Print to 65 or 15 | |
| print to ((display.statusline_height = 1)*50 + 15); | |
| print "Moves: "; number counter; | |
| } | |
| color TEXTCOLOR, BGCOLOR | |
| Font(DEFAULT_FONT) | |
| it_obj = temp_it_obj | |
| } | |
| replace ParseError(errornumber, obj) | |
| { | |
| if location = loud_room and | |
| loud_room is not special and | |
| errornumber = 1 | |
| { | |
| print parse$; | |
| " "; | |
| print parse$; | |
| " ..." | |
| words = 0 | |
| word[1] = "" | |
| return true | |
| } | |
| if location = loud_room and | |
| loud_room is not special and | |
| errornumber = 6 | |
| { | |
| ". . ..." | |
| words = 0 | |
| word[1] = "" | |
| return true | |
| } | |
| if errornumber >= 100 | |
| { | |
| CustomError(errornumber, obj) | |
| word[1] = "" ! force ParseError(0) | |
| words = 0 | |
| customerror_flag = true | |
| return true | |
| } | |
| if customerror_flag | |
| { | |
| customerror_flag = 0 ! CustomError already printed error | |
| return true | |
| } | |
| select errornumber | |
| case 6 | |
| print "That doesn't make any sense." | |
| case 9 | |
| { | |
| print "Nothing to "; | |
| if verbroutine | |
| print parse$; "." | |
| else: print "do." | |
| } | |
| case 10 | |
| { | |
| print "You haven't seen "; | |
| if obj is living | |
| print "anybody"; | |
| else: print "anything"; | |
| print " like that." | |
| } | |
| case 11 | |
| { | |
| if not ObjectisKnown(obj) | |
| ParseError(10, obj) | |
| elseif obj is living | |
| { | |
| CThe(obj) | |
| if obj is plural | |
| print " aren't"; | |
| else: print " isn't"; | |
| print " here." | |
| } | |
| else | |
| { | |
| print "You don't see "; | |
| if obj is plural | |
| print "those." | |
| else: print "that." | |
| } | |
| } | |
| case 12 | |
| print "You can't do that with "; The(obj) ; "." | |
| case 14 | |
| { | |
| if xobject is living | |
| print CThe(xobject); \ | |
| " doesn't have "; The(obj); "." | |
| else | |
| print "You don't see "; The(obj); " there." | |
| } | |
| case 15 | |
| { | |
| print "You aren't holding "; | |
| if obj is plural | |
| print "those." | |
| else: print "that." | |
| } | |
| case else: return false ! print the default message | |
| return true ! message already printed | |
| } | |
| replace DoExit | |
| { | |
| local p | |
| if not object and | |
| parent(player) = magic_boat and | |
| location is water_location | |
| { | |
| "You realize that getting out here would be fatal." | |
| return true | |
| } | |
| if object = nothing or object = location | |
| { | |
| if player in location | |
| {word[1] = "out" | |
| word[2] = "" | |
| return Perform(&DoGo)} | |
| } | |
| p = parent(player) | |
| if object and player not in object | |
| Message(&DoExit, 1) ! "You aren't in that." | |
| elseif p is openable, not open | |
| Message(&DoLookIn, 1) ! "X is closed." | |
| else | |
| { | |
| if object = nothing | |
| object = p | |
| move player to location | |
| if not object.after | |
| Message(&DoExit, 2) ! "You get out.." | |
| } | |
| return true | |
| } | |
| replace DoTouch | |
| { | |
| "Fiddling with "; | |
| The(object) | |
| " probably isn't the best use of your time at the moment." | |
| return true | |
| } | |
| replace DoSwim | |
| { | |
| if FindObject(river, location) or | |
| FindObject(lake, location) or | |
| FindObject(water_in_stream, location) | |
| { | |
| "Swimming isn't usually allowed in the dungeon." | |
| } | |
| else | |
| { | |
| "Go jump in a lake!" | |
| } | |
| } | |
| ! This routine replaces "~all" with "grue" - if "~all" is passed through | |
| ! while in a dark location or while the player is a ghost, multiple | |
| ! "It's too dark to see!" or "Your hand passes through the object." messages | |
| ! will be printed; one for each object in the location. I replaced it with | |
| ! "grue" because the grue is a scenery item that is always in the player's | |
| ! location and thus can always be referred to. | |
| replace PreParse | |
| { | |
| if (not FindLight(location) or | |
| player is ghost) and | |
| word[1] ~= "drop" | |
| { | |
| if word[2] = "~all" | |
| { | |
| word[2] = "grue" | |
| } | |
| elseif word[3] = "~all" | |
| { | |
| word[3] = "grue" | |
| } | |
| } | |
| return false | |
| } | |
| !---------------------------------------------------------------------------- | |
| ! DescribePlace(location, [optional parameter]) | |
| ! prints the location name, followed by the location description, if | |
| ! required | |
| ! | |
| ! DescribePlace(location, true) | |
| ! forces a location description | |
| ! | |
| ! This routine changes the standard Hugo routine so that the name of | |
| ! each location is not printed in bold print. | |
| ! | |
| !---------------------------------------------------------------------------- | |
| replace DescribePlace(place, long) | |
| { | |
| local obj, count, notlisted, tempformat | |
| ! Since, for example, a room description following entering via | |
| ! DoGo does not trigger before/after properties tied to looking | |
| ! around: | |
| ! | |
| if verbroutine ~= &DoLookAround | |
| { | |
| if place is not visited and verbosity ~= 1 | |
| return Perform(&DoLookAround) | |
| elseif long = true or verbosity = 2 | |
| return Perform(&DoLookAround) | |
| } | |
| if not light_source | |
| {Message(&DescribePlace, 1) ! "It's too dark to see..." | |
| return} | |
| place is known | |
| ! Print the name of the location as a heading | |
| ! Font(BOLD_ON) | |
| print "\n"; capital place.name; | |
| ! Print ", in <something>" if necessary | |
| if location = place and player not in place | |
| { | |
| if parent(player).prep | |
| print ", "; parent(player).prep; " "; | |
| else | |
| print ", "; IN_WORD; " "; | |
| print Art(parent(player)) | |
| } | |
| print newline | |
| ! Font(BOLD_OFF) | |
| override_indent = false | |
| if place is not visited and verbosity ~= 1 | |
| { | |
| if &place.initial_desc or &place.long_desc | |
| Indent | |
| if not place.initial_desc | |
| run place.long_desc | |
| } | |
| elseif long = true or verbosity = 2 | |
| { | |
| if &place.long_desc | |
| Indent | |
| run place.long_desc | |
| } | |
| if &place.list_contents and FORMAT & DESCFORM_F | |
| print "" ! for double-space-after-heading formatting | |
| ! A location may contain an overriding listing routine, as may any | |
| ! parent, in the list_contents property | |
| ! | |
| if not place.list_contents | |
| { | |
| list_nest = 0 | |
| ! For double-space-after-heading formatting: | |
| if FORMAT & DESCFORM_F: | |
| { | |
| for obj in place | |
| { | |
| if obj is not hidden and | |
| (player not in obj or children(obj) > 1): | |
| { | |
| print "" | |
| break | |
| } | |
| } | |
| } | |
| ! List contents of chair, vehicle, etc. player is in | |
| if player not in location | |
| WhatsIn(Parent(player)) | |
| ! List all characters, if any | |
| count = 0 | |
| for obj in place | |
| { | |
| if obj is hidden or obj is not living or | |
| player in obj: | |
| obj is already_listed | |
| else | |
| { | |
| obj is not already_listed | |
| ShortDescribe(obj) | |
| if obj is not already_listed | |
| count++ | |
| } | |
| } | |
| list_count = count | |
| count = 0 | |
| if list_count ! if characters are to be listed | |
| { | |
| tempformat = FORMAT | |
| FORMAT = FORMAT | FIRSTCAPITAL_F | ISORAREHERE_F | |
| FORMAT = FORMAT | USECHARNAMES_F | |
| if FORMAT & LIST_F | |
| { | |
| FORMAT = FORMAT & ~LIST_F ! clear it | |
| FORMAT = FORMAT | TEMPLIST_F | |
| } | |
| Indent | |
| list_nest = 0 | |
| ListObjects(place) | |
| FORMAT = tempformat | |
| } | |
| for obj in place | |
| { | |
| #ifset USE_ATTACHABLES | |
| ! Exclude all attachables for now (and characters) | |
| if obj is living or obj.type = attachable or | |
| player in obj | |
| #else | |
| if obj is living or player in obj | |
| #endif | |
| obj is already_listed | |
| else | |
| obj is not already_listed | |
| } | |
| for obj in place | |
| { | |
| #ifset USE_PLURAL_OBJECTS | |
| ! ...And don't list identical objects yet, either | |
| if (obj.identical_to).type = identical_class | |
| { | |
| if obj is not hidden | |
| count++ | |
| } | |
| elseif player not in obj | |
| #else | |
| if player not in obj | |
| #endif | |
| { | |
| if obj is not already_listed and | |
| obj is not hidden: | |
| { | |
| ShortDescribe(obj) | |
| if obj is not already_listed | |
| notlisted++ | |
| } | |
| } | |
| } | |
| if notlisted or count | |
| { | |
| list_count = notlisted + count | |
| tempformat = FORMAT | |
| FORMAT = FORMAT | FIRSTCAPITAL_F | ISORAREHERE_F | |
| if FORMAT & LIST_F | |
| { | |
| FORMAT = FORMAT & ~LIST_F ! clear it | |
| FORMAT = FORMAT | TEMPLIST_F | |
| } | |
| Indent | |
| list_nest = 0 | |
| ListObjects(place) | |
| FORMAT = tempformat | |
| } | |
| #ifclear NO_OBJLIB | |
| #ifset USE_ATTACHABLES | |
| for obj in place | |
| { | |
| ! Print attachables last | |
| if obj.type = attachable and obj is not hidden | |
| { | |
| ShortDescribe(obj) | |
| if obj is not already_listed | |
| Message(&DescribePlace, obj, 2) | |
| } | |
| } | |
| #endif | |
| print newline | |
| override_indent = false | |
| ! Finally, list contents of scenery objects (unless we've | |
| ! already done so as the parent of the player | |
| ! | |
| for obj in place | |
| { | |
| if obj.type = scenery and player not in obj | |
| WhatsIn(obj) | |
| } | |
| #endif ! ifclear NO_OBJLIB | |
| } | |
| } | |
Xet Storage Details
- Size:
- 354 kB
- Xet hash:
- f2594a3b8cfa71aecbcf5ffb29563daf40f4f753b8b4b564e5a1db05deb5b1e3
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.