!------------------------------------------------------------------------! !--The-Night-of-the-Vampire-Bunnies-----------------------By-Jason Dyer--! !------------------------------------------------------------------------! !------------------------------------------------------------------------! !-----------------------------Reconstructed-in-Inform-by-Patrick-Kellum--! !----------------------------------------Release:-2-----(March-15,1997)--! !----------------------------------------Release:-3-----(March-30,1997)--! !----------------------------------------Release:-4--(December-05-1997)--! !------------------------------------------------------------------------! Message "^ The Night of the Vampire Bunnies"; Message " By Jason Dyer"; Message " Reconstructed in Inform by Patrick Kellum^"; !< "Source Notes" !------------------------------------------------------------------------! !------------------------Inform-Source-Code-Notes------------------------!! !------------------------------------------------------------------------!! ! !! ! First, this source assumes you are using Library 6/3 or later. Also, !! ! the following libraries are needed: !! ! !! ! Menus.h by Graham Nelson !! ! Center.h by L. Ross Raszewski !! ! !! ! Now, I'll try to answer a few questions I think might pop up. !! ! !! ! > What are those wierd comments !< and !> for? !! ! !! ! In the text editior I use (GoldED on the Amiga) it is posible to !! ! "fold" blocks of text into a single line called, for example !! ! "> Initialise" (using the text in quotes after the !< for the fold !! ! name). I find this to be of great use when coding. For example, if !! ! I'm not coding on the DisplayStatusLine code, I can just fold it up !! ! to get it out of my way. As of Release 1, it folds this entire !! ! source file into a total of about 335 lines. !! ! !! ! > What is Constant Comment for? !! ! !! ! This is so I can easly comment out include files that would not be !! ! found on your system. In this source, the only thing commented out !! ! in "version". I will be releasing that port of the TADS library in !! ! the future, but at the moment it bearly works. It is also a brand of !! ! tea that I rather enjoy :-) !! ! !! ! > Why do you have this code in such a strange order? !! ! !! ! Because I like it that way, even if Inform doesn't. If keeping the !! ! source organized in a way that I find easier to use means having to !! ! add a couple Replace lines, then I consider it a small price to pay. !! ! !! ! > Why don't you format your code like everyone else? !! ! !! ! Because I find everyone elses formaing style confusing. I guess it's !! ! because I was taught programming be an extreamly strict professor who !! ! would throw out any source unless it was easly understandable. I'm !! ! begining to think that everyone elses source might make more sense if !! ! I used Emacs, but since I trully despise that editior, I doubt I will !! ! ever find out. !! ! !! ! > What is "WarningBeGone"? !! ! !! ! Just what it says, it stops Inform from warning me about stuff I !! ! already know about. I doubt it is a "Good Thing", but it does what I !! ! want. !! ! !! ! > How come when I compile this code, it produces a larger file? !! ! !! ! Because I use a custom language file called BunnyTalk. This is due !! ! to how LibraryMessages works, it doesn't actually replace the !! ! messages, it just bypasses them. This results in lots of useless !! ! code in the game file that will never be called and just takes up !! ! space. I'm guilty of this myself (see WarningBeGone), but I try to !! ! keep it at a minimum. Someday, I would love to go through the !! ! libraries and create a streamlined library set. At the moment, even !! ! though Inform no longer supports V3 games, lots of checks are still !! ! done for it. There are other more important areas I would also fix !! ! (i.e. removing unused code, like the built in menu system, and !! ! removing redundent code). !! ! !! ! > When I recompile this code, it doesn't act the same. !! ! !! ! This is due to some patches I made to the InformLibrary object in !! ! Parserm.h. Because object properties cannot be patched in Inform if !! ! they are routines :-( I had to hack the library itself. None of the !! ! patches effect gameplay, they just fix some text output uglyness !! ! (with score notification) and add some key shortcuts. !! ! !! ! > Also, the credits command no longer works when I compile it. !! ! !! ! See "What is Constant Comment for?" above. !! ! !! ! > Can I use any of your code for my own use? !! ! !! ! The text and layout of the game The Night of the Vampire Bunnies is !! ! by Jason Dyer and you should give him credit if you use them. The !! ! code I modified from other sources (i.e. DisplayStatusLine and the !! ! Hint menus) can be used freely, but it would be nice if the orignal !! ! author and I get some credit somewhere in the game. The code I !! ! created with my own two hands (i.e. Bold & NoOrYes) can also be used !! ! freely, but credit would make me most happy. !! ! !! ! > What's with the ASCII windows, like this one? !! ! !! ! I was bored and I like the way they look. I thought about adding !! ! window gadgets to them, but then I figured that would be getting a !! ! little weird ;-). !! ! !! !------------------------------------------------------------------------!! !-------------------------------------------------------------------------! !> Switches d2eE1v5x; Release 4; !Serial "970315"; !Constant Debug; Constant Comment; !------------------------------------------------------------------------! !-----Setup--------------------------------------------------------------! !------------------------------------------------------------------------! ! NOTE: R2 means the code in that section has been updated for this ! revision. !< "Abbreviations - R2" Abbreviate " "; Abbreviate " "; Abbreviate " is "; Abbreviate "'t "; Abbreviate ") Fixed "; Abbreviate ") Optimized "; Abbreviate "***"; Abbreviate ", "; Abbreviate ". "; Abbreviate "a l"; Abbreviate "all"; Abbreviate "already"; Abbreviate "and "; Abbreviate "and"; Abbreviate "are in a "; Abbreviate "arsely furnished except for a thron"; Abbreviate "available"; Abbreviate "BASIC"; Abbreviate "bunny"; Abbreviate "can"; Abbreviate "e a"; Abbreviate "e b"; Abbreviate "e i"; Abbreviate "e o"; Abbreviate "e s"; Abbreviate "eas"; Abbreviate "f y"; Abbreviate "game"; Abbreviate "have"; Abbreviate "her"; Abbreviate "his"; Abbreviate "I'm lost in a "; Abbreviate " in "; Abbreviate "Inform "; Abbreviate "ing "; Abbreviate "ion"; Abbreviate " is "; Abbreviate "It is "; Abbreviate "ou "; Abbreviate "our "; Abbreviate "ource"; Abbreviate "Perhaps"; Abbreviate "raveyard"; Abbreviate "rea"; Abbreviate "SOUTH"; Abbreviate "t i"; Abbreviate "t of"; Abbreviate "t s"; Abbreviate "that "; Abbreviate "that!"; Abbreviate "The"; Abbreviate "the"; Abbreviate "This "; Abbreviate "through"; Abbreviate "tion"; Abbreviate "to "; Abbreviate "with "; Abbreviate "You"; Abbreviate " you"; Abbreviate "[ Error: Unknown Hint Number ="; Abbreviate "^ (9703"; Abbreviate "^^"; !> !< "Constants - R2" Constant story "THE NIGHT OF THE VAMPIRE BUNNIES"; Constant headline "An Interactive Adventure^ By Jason Dyer^ Reconstructed in Inform by Patrick Kellum"; Constant tasks_provided; Constant number_tasks 10; Constant max_score 60; Constant max_carried 5; Constant no_places; !> !< "Attributes - R3" Attribute drinkable; ! Drinkable item. Attribute legible; ! Can be read. !> !< "Globals - R2" Global compass_rose = 1; ! If true, use large statusline. Global font_three = 0; ! If true, allow font three. Global invisiable_statusline = 1; ! Turn off statusline if true. Global StatusType = 0; ! Status line type. !> !< "Arrays" Array task_scores -> 8 5 10 5 5 2 10 3 2 10; !> !< "Replacements - R3" Replace AfterStatusLine; Replace PrintRank; Replace PrintTaskName; !> Include "CustomReplacements"; #ifdef Comment; Include "Version"; #endif; !< "LibraryMessages" Object LibraryMessages with before [; Prompt: print "^> "; rtrue; Score: print "You have scored ", score, " out of ", max_score, " points."; new_line; new_line; rtrue; ScriptOn: switch(lm_n) { 2: "Start of a transcript of^"; } Go: switch(lm_n) { 2: "You can't go that way!"; } Jump: "Wheeeeee!"; Take: switch(lm_n) { 3, 6, 7, 10, 11: "You can't get that!"; 5: "You already have that!"; 12: "You carrying too much!"; } Drop: switch(lm_n) { 2: "You don't have that!"; } Examine: switch(lm_n) { 2: "You see nothing unusual."; } Look: switch(lm_n) { 1: print "on"; 2: print "in"; 3: print "as"; 4: print "^On ", (the) lm_o; WriteListFrom(child(lm_o), ENGLISH_BIT + RECURSE_BIT + PARTINV_BIT + ISARE_BIT + CONCEAL_BIT); "."; default: print "^You "; if(lm_n==5) print "also "; print "see "; WriteListFrom(child(parent(player)), ENGLISH_BIT + WORKFLAG_BIT + RECURSE_BIT + PARTINV_BIT + CONCEAL_BIT); " here."; } Miscellany: switch(lm_n) { 10: "What's that?"; 17: "You are in total darkness."; 20: "To repeat a command like ~bunny, jump~, just say ~again~, not ~bunny, again~."; 38: "Sorry, but I don't know that verb. When the programmer thought of it, he was either asleep, out of it, ticked off at the world, or out to lunch."; } ] ; !> Include "VerbLib"; !< "Initialise - R4" [ Initialise i; lookmode = 2; ! Start in verbose mode. turns = 0; ! No wasting turns. ChangeDefault(cant_go, ! Change cantgo text. "You can't go that way!"); move Pen to player; ! Give player the pen. move Apple to player; ! Give player the apple. location=Room5; ! Set start at Carrot Patch. new_line; new_line; ! Breathing room. Introduction(); ! The introduction. TitlePage(); ! Display the title box. invisiable_statusline=0; ! Show statusline. @split_window 3; ! Do some early splitting. @set_window 1; ! Switch to upper window. @set_font 3 i; ! Check if font_three is allowed. if(standard_interpreter && i) ! Set font_three to true if so and font_three=1; ! if it supports >0.2 @set_font 1 i; ! Reset font 1. @set_window 0; ! Switch back to lower window. new_line; new_line; ! Breathing room. print "Type ", (Italic) ! Some early help. "INFO ", "for the game manual.^"; new_line; new_line; ! Breathing room. ]; !> !------------------------------------------------------------------------! !-----Locations----------------------------------------------------------! !------------------------------------------------------------------------! !< "Room 1 - At Coffin - R3" Object Room1 "At Coffin" with name 'room1', description [; print "You are at a coffin in a graveyard, with walls to the north, east, and west. A blue mist hangs over the graveyard. "; if(Coffin has open) { if(parent(Vampire)==Coffin) "The coffin is open with a vampire in it!"; print "The coffin is open."; if(children(Coffin)>0) { print " There is "; WriteListFrom(child(Coffin), FULLINV_BIT + ENGLISH_BIT + RECURSE_BIT, 1); " in the coffin."; } new_line; rtrue; } "The coffin is closed."; ], before [; Go: switch(noun) { s_obj: if(Coffin has open && parent(Vampire)==Coffin) { deadflag=1; StopTimer(Vampire); "The vampire, unfortunately, gives you a nasty bite."; } } ], s_to Room4, has light ; Object -> Coffin "coffin" with name 'coffin', description "It is carved of marble.", capacity 5, before [; Enter: "Are you crazy?"; Take, Push, PushDir, Pull: "It is much too heavy."; Open: if(parent(Vampire)==self) { StartTimer(Vampire, 2); MoveHint(HintVampire); } Close: if(parent(Vampire)==self) StopTimer(Vampire); ], after [; Open: if(parent(Vampire)==self) "As you open the coffin, a vampire reaches out!"; Close: if(parent(Vampire)==self) "The coffin slams shut in the vampire's face."; ], has scenery container openable enterable ; !> !< "Room 2 - Graveyard - R3" Object Room2 "Graveyard" with name 'room2', description "You are in a graveyard surrounded by walls. There is fog here so dense you can barely see 2 meters in front of you. A hole in the east wall allows exit from this gloomy place.", before [; Go: switch(noun) { e_obj: <>; } ], e_to Room3, has light ; !> !< "Room 3 - Graveyard - R3" Object Room3 "Graveyard" with name 'room3', description "You are in a graveyard with a stream to the south. Walls surround the other directions, but a hole in the west wall allows passage. It is very cool here.", initial [; Achieved(7); ], before [; Go: switch(noun) { s_obj: <>; w_obj: <>; } ], s_to Room6, w_to Room2, has light ; !> !< "Room 4 - Graveyard - R3" Object Room4 "Graveyard" with name 'room4', description [; print "You are in a dark graveyard. A wall covered with moss is to the west, a coffin is in sight to the north, and an empty well lies in the middle of all the fog. "; if(self.d_obj~=0) "A rope leads down the damp well."; new_line; ], initial [; MoveHint(HintCrank); ], before [; Go: switch(noun) { d_obj: <>; } ], n_to Room1, s_to Room8, e_to Room5, d_to 0, has light ; Object -> Well "well" with name 'well', description "It has a pole connected to some rope and a wooden crank. The well is dark and empty.", before [i flag; Insert, Transfer, Receive: if(parent(noun)==player) { move noun to Room7; "Enuooooooooauuuuoooooclunk!"; } "You don't have that!"; Answer, Tell, Ask, Pray, Sing: "Echo...echo....echo......echo..."; Enter: if(Room4.d_to==0) return L__M(##Go,2); objectloop(i in player or Room7) if(i has light) flag=1; if(flag==0) "It's too dark down there."; if(children(player)>1) { deadflag=1; "As you attempt to climb down the rope, it snaps, and you plunge down the well."; } print "You make your way down the rope.^"; PlayerTo(Room7, 2); rtrue; Examine, Search: self.description(); rtrue; ], life [; Answer, Tell, Ask, Pray, Sing: "Echo...echo....echo......echo..."; ], has enterable container open scenery talkable ; Object -> Crank "crank" with name 'crank' 'wooden', description "It is cracking, but usable.", before [; Turn: if(Room4.d_to~=0) { Room4.d_to=0; "The rope rises from the well."; } Room4.d_to=Room7; MoveHint(HintRope); "The pole turns, and the rope goes down into the well."; ], has scenery ; Object -> Pole "pole" with name 'pole', description "It has many holes in it.", has scenery ; Object -> Rope "rope" with name 'rope', description "It doesn't look very sturdy.", before [; Lower: if(Room4.d_to~=0) "It already is!"; Room4.d_to=Room7; MoveHint(HintRope); "The rope goes down into the well."; Raise: if(Room4.d_to==0) "It already is!"; Room4.d_to=0; "The rope rises from the well."; Enter: <>; ], has scenery enterable ; Object -> Coffin4 "coffin" with name 'coffin', description "It is too far away to get a good look at.", capacity 5, before [; Enter: PlayerTo(Room1, 2); rtrue; Take, Push, PushDir, Pull: "It is too far away."; ], has scenery enterable ; !> !< "Room 5 - Carrot Field" Object Room5 "Carrot Field" with name 'room5', description "You are in a carrot field in the middle of a graveyard. Fog is all around you. A wall is to the north, too high to climb.", s_to Room8, e_to Room6, w_to Room4, has light ; Object -> CarrotField "field" with name 'field' 'ground' 'floor', description [; if(parent(Carrot)==self) { move Carrot to Room5; "You find a carrot."; } "You see nothing unusual."; ], has scenery ; !> !< "Room 6 - Graveyard - R3" Object Room6 "Graveyard" with name 'room6', description "You are in a foggy graveyard. A stream is to the north, a field can be seen to the west, and all the rest only fog can be seen. The stream looks shallow enough to cross.", initial [; MoveHint(HintStream); ], before [; Go: switch(noun) { n_obj: <>; } ], n_to Room3, s_to Room9, e_to Room10, w_to Room5, has light ; !> !< "Room 7 - Bottom of Well - R3" Object Room7 "Bottom of Well" with name 'room7', description "You are at the bottom of an empty well. The surrounding cracks are rather big, and a crevice to the south is big enough for you to go through. A rope hangs down allowing you to climb up.", initial [; Achieved(4); MoveHint(HintWell); ], before [; Go: switch(noun) { s_obj: <>; u_obj: <>; } ], s_to Room11, u_to Room4, ; Object -> RopeBottom "rope" with name 'rope', description "It doesn't look very sturdy.", before [; Enter: if(children(player)>1) "You're too heavy to climb up the well."; print "You climb up the rope.^"; PlayerTo(Room4, 2); rtrue; ], has scenery enterable ; Object -> WellBottom "well" with name 'well', description "It is full of cracks.", has scenery ; Object -> Crevice "crevice" with name 'crevice', description "It is big enough for you to go through.", before [; Enter: PlayerTo(Room11, 2); rtrue; ], has scenery enterable ; !> !< "Room 8 - Graveyard - R3" Object Room8 "Graveyard" with name 'room8', description [; print "You are in a walled graveyard. A black wall is to the south. "; if(self.d_to~=0) "A gaping hole is in the middle of all the gravestones. "; "Many tombstones are in this area--so many, in fact, you have to climb over some of them. "; ], before [; Go: switch(noun) { d_obj: if(self.d_to~=0) <>; } ], n_to Room5, e_to Room9, w_to Room4, d_to 0, has light ; !> !< "Room 9 - At Hole - R3" Object Room9 "At Hole" with name 'room9', description [; print "You are in a gloomy graveyard, with a wall to the south, and plenty of fog all around you. A large hole surrounded by gravestones leads down into gloom. A skeleton that was guarding the hole faces toward you, "; if(Cross has worn) "but when he sees the cross you are wearing, recoils in terror."; "and holds his stand, not allowing you to you into the hole."; ], initial [; MoveHint(HintSkeleton); ], before [; Go: switch(noun) { d_obj: if(Cross has worn) <>; "The skeleton pushes you away from the hole."; } ], n_to Room6, e_to Room10, w_to Room8, d_to Room14, has light ; !> !< "Room 10 - Graveyard" Object Room10 "Graveyard" with name 'room10', description "You are at the corner of a walled graveyard. Walls connect to the south and east, and mist hangs over the sky like a prowler. A chill runs through your back.", n_to Room6, w_to Room9, has light ; !> !< "Room 11 - Crevice" Object Room11 "Crevice" with name 'room11', description "You are in a large crevice in a well. Small amounts of water trickle down the sides. Exit can be reached to the north.", n_to Room7, has light ; !> !< "Room 13 - Maze - R3" Object Room13 "Maze" with name 'room13', description "You are in a dark maze.", initial [; MoveHint(HintMazeDark); ], before [; Go: switch(noun) { s_obj: deadflag=1; "You have a nervousness about this passage, but you trudge on, and end up getting killed in a cave-in."; } ], n_to Room16, s_to 1, e_to Room17, w_to Room17, has light ; !> !< "Room 14 - Dark Tunnel - R3" Object Room14 "Dark Tunnel" with name 'room14', description "You are in a very dark tunnel. The tunnel heads to the east, while a hole in the ceiling allows exit from the darkness.", before [; Go: switch(noun) { u_obj: <>; } ], e_to Room15, u_to Room9, has light ; !> !< "Room 15 - Dark Tunnel" Object Room15 "Dark Tunnel" with name 'room15', description "You are in a tunnel of extreme darkness. You can barely make out exits to all directions except up and down.", n_to Room15, s_to Room19, e_to Room15, w_to Room14, has light ; !> !< "Room 16 - Maze" Object Room16 "Maze" with name 'room16', description "You are in a damp maze.", initial [; MoveHint(HintMazeDamp); ], n_to Room13, s_to Room22, e_to Room20, w_to Room21, has light ; !> !< "Room 17 - Maze" Object Room17 "Maze" with name 'room17', description "You are in a dank maze.", initial [; MoveHint(HintMazeDank); ], n_to Room13, s_to Room20, e_to Room16, w_to Room16, has light ; !> !< "Room 18 - Long Corridor" Object Room18 "Long Corridor" with name 'room18', description "You are in a very long tunnel streaching endlessly to the east and west. Your feet ache as you walk down it.", initial [; Achieved(3); ], e_to Room19, w_to Room17, has light ; !> !< "Room 19 - Slimy Room - R3" Object Room19 "Slimy Room" with name 'room19', description [; print "You are in a medium-size room covered with slime from ceiling to floor. Your feet stick to the slippery ground. "; if(self.w_to==0) "Some grey ooze guards the westward corridor."; new_line; ], initial [; MoveHint(HintOoze); ], before [; Go: switch(noun) { w_obj: if(self.w_to==0) "The ooze blocks your path."; } ], n_to Room15, w_to 0, has light ; Object -> Ooze "ooze" with name 'ooze' 'grey' 'gray' 'slime' 'big' 'ugly' 'ground' 'floor' 'field', description "It is big, ugly, and slimy.", before [; JumpOver: "The ooze expands, forcing you to postpone your jump."; Empty: if(noun==Water) { deadflag=1; "The ooze dramatically grows, splattering you with a deadly force."; } Burn: if(parent(Torch)==player) { Room19.w_to=Room18; remove Torch; "The ooze dissolves the torch, lighting it instantly. The ooze melts away into nothing."; } Attack: deadflag=1; "The ooze lets out a splatter with killing force."; ], has scenery ; !> !< "Room 20 - Maze" Object Room20 "Maze" with name 'room20', description "You are in a dreary maze.", initial [; MoveHint(HintMazeDreary); ], n_to Room13, s_to Room17, e_to Room17, w_to Room16, has light ; !> !< "Room 21 - Maze" Object Room21 "Maze" with name 'room21', description "You are in a maze.", initial [; MoveHint(HintMaze); ], n_to Room16, s_to Room23, e_to Room13, w_to Room20, has light ; !> !< "Room 22 - Maze" Object Room22 "Maze" with name 'room22', description "You are in a devlish maze.", initial [; MoveHint(HintMazeDevlish); ], n_to Room17, s_to Room21, e_to Room20, w_to Room16, has light ; !> !< "Room 23 - Torch Room - R3" Object Room23 "Torch Room" with name 'room23', description [; print "You are in a large marble room with torch holders everywhere. However, pretty much all of them are empty. You can leave to the "; if(self.e_to~=0) "north, south, or east."; "south and north, but the east passage is blocked by cobwebs."; ], initial [; MoveHint(HintWebs); ], before [; switch(noun) { e_obj: if(self.e_to==0) "The cobwebs block your path."; } ], n_to Room21, s_to Room26, e_to 0, has light ; Object -> Cobwebs "cobwebs" with name 'cobwebs' 'cob' 'webs' 'web', description "The are blocking the east passage.", before [; Burn: if(second==Lamp || parent(Lamp)==player) { if(Lamp hasnt light) "It isn't lit!"; Room23.e_to=Room24; Achieved(1); remove self; "The cobwebs light and burn into dust."; } ], has scenery ; !> !< "Room 24 - Dead End - R3" Object Room24 "Dead End" with name 'room24', description [; if(self.e_to~=0) "You are in a seeminly dead end, with the only exit to the west, but a shattered mirror shows a passage to the east."; "You are in a dead end, with a large mirror covering the east wall, and an exit to the west."; ], initial [; MoveHint(HintDeadEnd); ], before [; Go: switch(noun) { e_obj: if(self.e_to~=0) StartTimer(Bunny, 2); } ], e_to 0, w_to Room23, has light ; Object -> Mirror "mirror" with name 'mirror', description [; if(Room24.e_to~=0) "It is broken into shards, and there is a passage behind it."; "It is not well polished."; ], before [; Take, Push, PushDir, Pull: "It is attached to the wall."; Attack: Room24.e_to=Room25; Achieved(0); "The mirror breaks into little pieces, revealing a passage to the east."; ], has scenery ; !> !< "Room 25 - Bunny Room - R3" Object Room25 "Bunny Room" with name 'room25', short_name "Bunny Room", description [; if(parent(Bunny)==self) "You are in a large chamber that is sparsely furnished except for a throne bolted to the east wall. Sitting next to the throne is a bunny which looks very much like the vampire bunny you are looking for. A passage exits west from this very unfriendly place."; if(self.e_to~=0) "You are in a large chamber that is sparsely furnished except for a throne bolted to the east wall. Two passages allow exit -- one to the east, one to the west."; "You are in a large chamber that is sparsely furnished except for a throne bolted to the east wall. A passage exits west from this barren place."; ], initial [; MoveHint(HintBunny); ], before [; Go: switch(noun) { e_obj: if(self.e_to~=0) { deadflag=2; self.e_to=0; self.w_to=0; self.short_name="Outside Graveyard"; DrawStatusLine(); "You go through the tunnel and end up outside the graveyard. When you realize where you are, you hurry along the path back into town, overcome with joy, shouting the news. People rush out of their houses to greet you with a hero's welcome."; } w_obj: StopTimer(Bunny); } ], e_to 0, w_to Room24, has light ; Object -> Throne "throne" with name 'throne', description "It is bolted to the east wall.", before [; Push, PushDir, Pull, Turn, Take: "It is bolted to the wall."; Enter: if(parent(Bunny)==Room25) "The bunny won't let you!"; if(Room25.e_to==0) { Room25.e_to=1; Achieved(8); "As you sit on the throne, a passage opens to the east! Since the throne is uncomfortable, you stand up again."; } "You sit on the throne and you get blown away by a....hold it....that was another adventure. Nothing happens so you stand up again."; ], has supporter scenery ; !> !< "Room 26 - Cramped Corridor - R3" Object Room26 "Cramped Corridor" with name 'room26', description "You are in a very cramped corridor going north/south. A lever is set into the west wall. The lever seems to be pretty worn from use.", initial [; MoveHint(HintLever); ], n_to Room23, s_to Room27, has light ; Object -> Lever "lever" with name 'lever', description "It is rusty, but useable.", before [; Push: if(Room27.u_to~=0) "Nothing happens."; Room27.u_to=Room8; Room8.d_to=Room27; give GraveHole ~absent; "You hear a loud `clunk' to the south."; Pull: deadflag=1; "The roof caves in on you."; ], has scenery ; !> !< "Room 27 - Sandy Room - R3" Object Room27 "Sandy Room" with name 'room27', description [; if(self.u_to~=0) "You are in a very sandy room with an exit to the north and a hole in the roof. You feel a little nervous that the ceiling will cave in on you."; "You are in a extremely sandy room with the only exit going north. You feel a little nervous that the ceiling will cave in on you."; ], before [; Go: switch(noun) { u_to: if(self.u_to~=0) <>; } ], n_to Room26, u_to 0, has light ; !> !------------------------------------------------------------------------! !-----Objects------------------------------------------------------------! !------------------------------------------------------------------------! !< "Apple - R2" Object Apple "apple" with name 'apple', description "It looks a little too wormy to be edible.", before [; Eat: if(self has general) { deadflag=1; "You take a bite of the apple and feel a strange shiver running through the body. You gasp for breath as you clutch your throut. You fall down, the apple rolling out of your limp hand."; } "You take a bite out of the apple and spit it out."; Soak: if(second==Water or Stream) { give self general; "The apple is splashed with water."; } Water: if(parent(Water)==Bucket) { remove Water; give self general; "The apple is splashed with water."; } ], has edible ; !> !< "Bucket - R3" Object Bucket "bucket" Room11 with name 'bucket', description [; if(child(self)==Water) "The bucket is filled with water."; "The bucket is empty."; ], when_open [; "There is a bucket here."; ], capacity 1, invent [; if(inventory_stage==2) { if(parent(Water)==self) print " (with water)"; rtrue; } ], before [; Fill: if(child(self)~=nothing) "It already is full!"; if(parent(player)==Room3 or Room6) { move Water to self; "The bucket fills with water."; } Empty: if(child(self)==nothing) "The bucket is empty."; remove child(self); "You empty the bucket."; EmptyT: if(child(self)==nothing) "The bucket is empty."; if(parent(Water)~=self) rfalse; switch(second) { Coffin: meta=true; "Shouldn't you be pouring this on the Vampire?"; Bunny, Skeleton, Vampire: <>; } ], has container open ; !> !< "Carrot - R2" Object Carrot "carrot" CarrotField with name 'carrot', description "It looks nice and juicy.", before [; Take: Achieved(5); Water: if(parent(Water)==Bucket) { remove Water; give self general; Achieved(9); "The carrot is splashed with water."; } Soak: if((second==Water or Stream) || (second==Bucket && parent(Water)==Bucket)) { give self general; Achieved(9); "The carrot is splashed with water."; } Eat: if(self has general) { deadflag=1; "You munch a little out of the carrot and suddenly feel your lungs bursting. You collapse on the ground, carrot clutched in your cool hand."; } ], after [; Eat: "Mmmmmnn...the carrot is delicous. You gobble the whole thing up."; ], has edible ; !> !< "Key" Object Key "key" Room18 with name 'key', description "It is fairly shiny.", ; !> !< "Lamp - R3" Object Lamp "lamp" Room2 with name 'lamp' 'light', description [; if(self has on) "The lamp lets out a light glow."; "The lamp has been turned off."; ], before [; Examine: self.description(); rtrue; ], after [; SwitchOn, Burn: give self light; "The lamp lets out a warm glow."; SwitchOff: give self ~light; "The lamp turns off with a click."; ], has switchable ; !> !< "Paper" Object Paper "scrap of paper" Room8 with name 'paper', description "It has some writing on it.", before [; Read: "It says, ~Pushing is better than pulling~."; ], has legible ; !> !< "Pen" Object Pen "quill pen" with name 'quill' 'pen', description "It does not have any ink.", ; !> !< "Silver Cross - R2" Object Cross "silver cross" with name 'silver' 'cross', description "It is rough and tarnished.", after [; Take: Achieved(6); Wear: "It fits rather nicely."; Disrobe: "You slide the cross off your neck."; ], has clothing ; !> !< "Torch - R3" Object Torch "torch" Room14 with name 'torch', description "It is burning fairly slowly.", before [; SwitchOn, Burn: "It's already lit!"; SwitchOff: "It refuses to go out."; Examine: self.description(); rtrue; ], has light switchable ; !> !------------------------------------------------------------------------! !-----Floating-Objects---------------------------------------------------! !------------------------------------------------------------------------! !< "Graves" Object Graves "tombs" with name 'graves' 'tombs', description "Many are old and rotted, and some which are blank make you shiver.", found_in Room1 Room2 Room3 Room4 Room5 Room6 Room8 Room9 Room10, has scenery ; !> !< "Ground" Object Ground "ground" with name 'ground' 'field' 'floor', description "You see nothing unusual.", found_in Room1 Room2 Room3 Room4 Room6 Room7 Room8 Room9 Room10 Room11 Room13 Room14 Room15 Room16 Room17 Room18 Room20 Room21 Room22 Room23 Room24 Room25 Room26 Room27, has scenery ; !> !< "Stream & Water - R3" Object Stream "stream" with name 'water' 'stream' 'river', description "Though it has no life in it, it looks shallow enough to cross.", found_in Room3 Room6, before [; Drink, Eat: deadflag=1; "You sip the water, and feel very sick. You lungs turn inside out, your breath stops, and you fall on the floor, dead."; JumpOver: print "You leap over the stream.^"; switch(parent(player)) { Room3: PlayerTo(Room6, 2); rtrue; Room6: PlayerTo(Room3, 2); rtrue; } Enter: deadflag=1; "As you enter the stream, your mouth gets a little water in it. Suddenly you have convulsions, choke, and drown."; ], has edible drinkable scenery enterable ; Object Water "water" with name 'water', description "It is lifeless and stale.", before [; Drink, Eat: <>; EmptyT: switch(second) { Coffin: meta=true; "Shouldn't you be pouring this on the Vampire?"; Bunny, Skeleton, Vampire: <>; } ], has edible drinkable ; !> !< "Wall" Object Wall "wall" with name 'wall' 'walls', description "There are enough of them.", found_in Room1 Room2 Room3 Room4 Room5 Room8 Room9 Room10, has scenery ; !> !< "HoleInWall - R2" Object HoleInWall "hole" with name 'hole', description [; print "It is in the "; switch(parent(player)) { Room2: print "east"; Room3: print "west"; } " wall."; ], found_in Room2 Room3, before [; Enter: switch(parent(player)) { Room2: PlayerTo(Room3, 2); rtrue; Room3: PlayerTo(Room2, 2); rtrue; } ], has enterable scenery ; !> !< "GraveHole - R2" Object GraveHole "hole" with name 'hole', description [; switch(parent(player)) { Room8: "It is surrounded by gravestones."; Room27: "It is in the roof."; } ], found_in Room8 Room27, before [; Enter: switch(parent(player)) { Room8: PlayerTo(Room27, 2); rtrue; Room27: PlayerTo(Room8, 2); rtrue; } ], has enterable scenery absent ; !> !< "SkeletonHole - R2" Object SkeletonHole "hole" with name 'hole', description [; switch(parent(player)) { Room9: "It is surrounded by gravestones."; Room14: "It allows exit from the darkness."; } ], found_in Room9 Room14, before [; Enter: switch(parent(player)) { Room9: print "The skeleton allows you to enter.^"; PlayerTo(Room14, 2); rtrue; Room14: PlayerTo(Room9, 2); rtrue; } ], has enterable scenery ; !> !------------------------------------------------------------------------! !-----Non-Player-Characters----------------------------------------------! !------------------------------------------------------------------------! !< "Bunny - R2" Object Bunny "vampire bunny" Room25 with name 'vampire' 'bunny' 'rabbit' 'hare' 'vamp', description "It looks extremely vicious for its small size.", time_left 0, time_out [; deadflag=1; "The vampire bunny nibbles a little on your leg."; ], before [; JumpOver: deadflag=1; "The bunny manages to bite your leg."; Water: if(parent(Water)==Bucket) { remove child(Bucket); "The bunny moves, avoiding the splash of water."; } "I'm not so sure about that."; Attack: deadflag=1; "The bunny bites you in defense."; ], life [; Give: if(noun~=Carrot) "The bunny refuses your offer."; remove Carrot; if(Carrot hasnt general) "The bunny gobbles up the carrot but is not satisfied."; StopTimer(self); remove self; MoveHint(HintThrone); Achieved(2); "The bunny gobbles the carrot up, makes a startled gasp, and dies. The bunny disappears into a black fog."; ], has animate neuter ; !> !< "Skeleton - R2" Object Skeleton "skeleton" Room9 with name 'skeleton', description "It looks pretty bony.", before [; Water: remove child(Bucket); "The water flies through the skeltal body."; Attack: "The skeleton repels your attack."; ], has animate neuter ; !> !< "Vampire" Object Vampire "vampire" Coffin with name 'vampire' 'vamp' 'sir', description "It looks at you with an unnerving gaze.", time_left 0, time_out [; deadflag=1; "The vampire decides to fang you."; ], before [; Attack: "The vampire ignores your attack."; Water: if(parent(Water)==Bucket) { remove child(Bucket); StopTimer(self); move Cross to Coffin; remove self; "The vampire screams and gently dissolves in the stream of water."; } "I'm not so sure about that."; ], has animate neuter ; !> !------------------------------------------------------------------------! !-----Grammer-&-Verbs----------------------------------------------------! !------------------------------------------------------------------------! Include "CustomGrammar"; ! Modified !< "Verb - Answer (modified) - R2" Extend 'answer' first * 'into'/'down' noun ->Answer * topic 'into' noun ->Answer; !> !< "Verb - Verify (modified)" [ VerifySub i; print (machinename) $1e->0; i=$1->0; if(i&1) print " Color"; print " Version ", (char) $1f->0; new_line; new_line; print "[Verifying.]^"; @verify ?Vmaybe; jump Vwrong; .Vmaybe; "A technical bunny hops on to your keyboard. ~Your game file is correct. Bye!~^ She disappears with a wink."; .Vwrong; "A technical bunny hops on to your keyboard. ~It appears that your game file did not verify as intact, and may be corrupted. Bye!~^ She disappears with a wink."; ]; !> ! New !< "Verb - Soak" Verb 'soak' * noun 'in' noun ->Soak; [ SoakSub; "You can't do that!"; ]; !> !< "Verb - Water" Verb 'water' * noun -> Water; [ WaterSub; if(Bucket in player) <>; "You don't have that!"; ]; !> !------------------------------------------------------------------------! !-----Menu---------------------------------------------------------------! !------------------------------------------------------------------------! Include "CustomMenu"; Menu ManualMenu "The Night of the Vampire Bunnies"; !< "Notes... - R3" Option "Notes" ManualMenu with description [; CenterB("*** Orignal README from the QBASIC version by Jason Dyer ***"); new_line; new_line; print " This is a text adventure I wrote a long while back in GWBASIC. It has been modified to work with QBASIC, and some of the odder bugs have been fixed. It is rather short, and has no save game. Still, I find it rather fun, even with its flaws. ^ ^ Do try to be easy on it though, I was only 10 when I wrote it. (I was an Infocom nerd, okay?) ^ ^ The parser is only mildly intelligent. It will accept multiple commands on the same line, but not multiple objects. (so no TAKE ALL BUT THE BOOK) ^ ^ You may notice when you start the game that there is no copyright. If you think you can sell it and make a million dollars, be my guest. Unfortunately, the market for GWBASIC games just isn't what it used to be. :) ^ ^ If you want hints, well, go ahead and ask, I like mail. ^ ^Jason Dyer ^jdyer@@64indirect.com ^jdyer@@64U.Arizona.EDU ^ ^"; CenterB("*** Notes about the Inform port by Patrick Kellum ***"); new_line; new_line; print " Not having QBASIC, I was rather curious how this game would play, the story reminded me of the great Bunicula childrens books that I still treasure. So, instead of tracking down QBASIC, I went through the source and slowly ported it to Inform for the world to enjoy. ^ ^ I tried to keep as much of the game text as close to the QBASIC version as I could, including system responses, but in some cases there might be some differences. I have added a few small touches here and there, but I've tried to remain faithful to the orignal source code. ^ ^ If you have any trouble with the Inform port, please feel free to email me. ^ ^Patrick Kellum - February 14, 1997 ^patrick@@64ygw.bohemianweb.com^^"; ] ; !> !< "Introduction..." Option "Introduction" ManualMenu with description [; Introduction(); ] ; !> !< "Basic commands... - R3" Option "Commands - Basic" ManualMenu with description [; print "The following commands are used in this game:^^"; print (Bold) "AGAIN", " - This will repeat your previous command. You can abbreviate ", (Bold) "AGAIN", " to ", (Bold) "G", ".^^"; print (Bold) "BRIEF", " - This command fully describes a location only the first time you enter it. On subsequent visits, only the name of the location and any objects present will be described. See also ", (Bold) "SUPERBRIEF", " and ", (Bold) "VERBOSE", " for more information.^^"; print (Bold) "INVENTORY", " - This will give you a list of what your character is carrying and wearing. You can abbreviate ", (Bold) "INVENTORY", " to ", (Bold) "I", ".^^"; print (Bold) "LOOK", " - This command will give you a full description of your location. You can abbreviate ", (Bold) "LOOK", " to ", (Bold) "L", ".^^"; print (Bold) "OOPS", " - If you mistype a word, such that the story doesn't understand it, you can correct yourself at the next prompt by typing ", (Bold) "OOPS", " and the correct word. For example, if you typed ", (Bold) "ATTACK THE DRAGOB WITH THE SWORD", " and were told ~[I don't know the word 'dragob']~ you could type ", (Bold) "OOPS DRAGON", " rather then retype the entire sentence.^^"; print (Bold) "QUIT", " - This lets you stop playing. If you want to save your position before quitting, you must use the ", (Bold) "SAVE", " command first.^^"; print (Bold) "RESTORE", " - This restores a previously saved game position.^^"; print (Bold) "RESTART", " - This stops the story and starts it over from the beginning.^^"; print (Bold) "SAVE", " - This saves a ~snapshot~ of your current position on your storage disk. You can return to a saved position in the future using the ", (Bold) "RESTORE", " command.^^"; print (Bold) "SCRIPT", " - This command tells your printer to begin making a transcript of the story. A transcript may aid your memory, but is not necessary. Many interpreters will save the transcript to your storage disk as a text file, read your interpreters instruction manual for details.^^"; print (Bold) "SCORE", " - This command gives you your score and a ranking based on that score. Note that your score and the number of moves used can also be found on your status line at the top of the screen.^^"; print (Bold) "SUPERBRIEF", " - Displays only the name of a place you have entered, even if you have never been there before. In this mode, not even objects are described. Of course, you can always get a full description of your location and the items there by typing ", (Bold) "LOOK", ". In ", (Bold) "SUPERBRIEF", " mode, the blank line between turns will be eliminated. This mode is meant for players who are familiar with the geography. See also ", (Bold) "BRIEF", " and ", (Bold) "VERBOSE", " for more information.^^"; print (Bold) "UNSCRIPT", " - This command tells your printer to stop making a transcript. If your interpreter is saving the transcript to a text file, then it will stop writing to the file.^^"; print (Bold) "VERBOSE", " - Gives a complete description of each location, and the objects in it, everytime you enter the a location, even if you've been there before. See also ", (Bold) "BRIEF", " and ", (Bold) "SUPERBRIEF", " for more information.^^"; print (Bold) "VERIFY", " - This will verify that your game file is correct. It is rather unlikely that anything could be wrong with the file itself, but it never hurts to check. You can abbreviate ", (Bold) "VERIFY", " to ", (Bold) "$VER", ".^^"; print (Bold) "VERSION", " - This command responds by showing you the release number, serial number, and other important information for your copy of the story. Please include this information if you ever report a ~bug~ in the story.^^"; print (Bold) "WAIT", " - Causes time in the story to pass. Since nothing happens untill you type a sentence and press RETURN (or ENTER), you could leave your computer, take a nap, then return to the story to find that nothing has changed. You can use ", (Bold) "WAIT", " to make time pass in the story without doing anything. For example, if you met a sorceress, you might ", (Bold) "WAIT", " to see if she will say anything; if you were aboard a flying carpet, you might ", (Bold) "WAIT", " to see where it goes. You can abbreviate ", (Bold) "WAIT", " to ", (Bold) "Z", ".^^"; CenterB("The following are abbrevations for moving around."); new_line; new_line; print (Bold) "N", " - Go north.^"; print (Bold) "S", " - Go south.^"; print (Bold) "E", " - Go east.^"; print (Bold) "W", " - Go west.^"; print (Bold) "NE", " - Go north-east.^"; print (Bold) "NW", " - Go north-west.^"; print (Bold) "SE", " - Go south-east.^"; print (Bold) "SW", " - Go south-west.^"; print (Bold) "U", " - Go up.^"; print (Bold) "D", " - Go down.^^"; CenterB("Be sure to read the ~Special Commands~ section for additional commands."); new_line; new_line; ] ; !> !< "Special commands... - R2" Option "Commands - Special" ManualMenu with description [; print "The following commands are used in this game:^^"; print (Bold) "FONT", " - This will switch the graphics font on and off.^^"; print (Bold) "HINT", " - If you have difficulty while playing the story, and you can't figure out what to do next, just type ", (Bold) "HINT", ". You will see a list of questions available at that point in the game that you can ask. Just follow the directions at the top of your screen to see the hint of your choice.^^"; print (Bold) "INTRO", " - Re-display the introduction.^^"; print (Bold) "NOTIFY", " - Normally, the game will notify you whenever your score changes. You can turn off this notification feature by using the ", (Bold) "NOTIFY", " command. Typing ", (Bold) "NOTIFY", " a second time turns the feature back on.^^"; print (Bold) "PREFS", " - This command will bring you to a preferances screen where you can set some of the game preferances.^^"; CenterB("Be sure to read the ~Basic Commands~ section for additional commands."); new_line; new_line; ] ; !> !< "Hints... - R3" HintMain HintMenu "Hints" ManualMenu with name 'hintmenu' ; HintClass HintStream "How do I cross the stream?" with name 'streamhint', maxhints 3, number 3, hints [i; switch(i) { 1: "JUMP OVER STREAM"; 2: "Too bad the water is deadly. Have you tried leaping over the stream?"; 3: "The stream does look rather shallow."; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintVampire "Help, the vampire keeps biting me!" ! - R2 with name 'vampirehint', maxhints 4, number 4, hints [i; switch(i) { 1: "POUR WATER ON VAMPIRE"; 2: "You do have something to carry water in don't you?"; 3: "Perhaps pouring some water on him might do the trick."; 4: "Doesn't running water destroy vampires?"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintCrank "How can I go down the well?" with name 'crankhint', maxhints 4, number 4, hints [i; switch(i) { 1: "TURN CRANK"; 2: "Perhaps if that rope were lowered into the well."; 3: "Have you ever used a well? Really? I haven't, but I have seen them on television a few times. Do you know how they work?"; 4: "Have you looked at everything?"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintRope "Help, I keep falling down the well!" with name 'ropehint', maxhints 3, number 3, hints [i; switch(i) { 1: "DROP ALL EXCEPT LAMP. TURN ON LAMP. DOWN"; 2: "Maybe if you were lighter, the rope wouldn't break."; 3: "Perhaps you have gained a little weight lately."; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintWell "How do I get back up the rope with my stuff?" with name 'wellhint', maxhints 3, number 3, hints [i; switch(i) { 1: "DROP LAMP next UP then DROP ALL now DOWN you should be able to figure it out from there."; 2: "Climbing up the rope with too many items would cause it to break."; 3: "The rope looks rather worn out."; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintSkeleton "The skeleton won't let me down the hole." with name 'skeletonhint', maxhints 4, number 4, hints [i; switch(i) { 1: "Wear the cross from the coffin."; 2: "If you haven't found one yet, keep looking."; 3: "Perhaps a holy symbol of some sort?"; 4: "Perhaps there is an object he is afraid of?"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintOoze "How do I get past the grey ooze?" with name 'oozehint', maxhints 2, number 2, hints [i; switch(i) { 1: "BURN OOZE WITH TORCH"; 2: "It might be flameable."; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintWebs "How do I get past the cobwebs?" with name 'webshint', maxhints 2, number 2, hints [i; switch(i) { 1: "BURN COBWEBS WITH LAMP"; 2: "Do you really need a hint for this one?"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintLever "I pulled the lever and got crushed, what happened?" ! - R2 with name 'leverhint', maxhints 3, number 3, hints [i; switch(i) { 1: "PUSH LEVER"; 2: "That which can be pulled, could also be pushed."; 3: "Did you read the paper in the graveyard?"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintDeadEnd "I've reached a dead end, now what?" ! - R2 with name 'deadendhint', maxhints 5, number 5, hints [i; switch(i) { 1: "BREAK MIRROR"; 2: "That was a hint, in case you didn't notice."; 3: "You better be careful, breaking that big mirror could lead to seven years bad luck!"; 4: "Perhaps not."; 5: "Perhaps it is really just a dead end."; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintBunny "Help, the vampire bunny keeps biting me!" ! - R2 with name 'bunnyhint', maxhints 8, number 8, hints [i; switch(i) { 1: "Or, if you have the bucket full of water, try SOAK CARROT IN BUCKET"; 2: "First SOAK CARROT IN STREAM then GIVE CARROT TO BUNNY"; 3: "Perhaps if you soaked the carrot in the stream first it would help."; 4: "That stream above ground was rather nasty wasn't it?"; 5: "He sure liked that tasty carrot didn't he. You sure are nice to the bunny."; 6: "Now, where would one find a carrot?"; 7: "He might like a nice freash carrot."; 8: "Perhaps the cute and fluffy bunny is hungry."; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintCarrot "I can't find the carrot!" HintMenu ! - R2 with name 'carrothint', maxhints 2, number 2, hints [i; switch(i) { 1: "Go to the Carrot Patch and LOOK AT FIELD"; 2: "Where does one usually find a carrot?"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintThrone "I destroied the bunny, now what?" with name 'thronehint', maxhints 2, number 2, hints [i; switch(i) { 1: "SIT ON THRONE"; 2: "I wonder why that throne is bolted to the wall?"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintMazeDark "Help, I'm lost in a dark maze!" with name 'mazedarkhint', maxhints 1, number 1, hints [i; switch(i) { 1: "WEST. WEST. SOUTH. SOUTH. SOUTH"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintMazeDamp "Help, I'm lost in a damp maze!" with name 'mazedamphint', maxhints 1, number 1, hints [i; switch(i) { 1: "SOUTH. SOUTH. SOUTH"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintMazeDank "Help, I'm lost in a dank maze!" with name 'mazedankhint', maxhints 1, number 1, hints [i; switch(i) { 1: "WEST. SOUTH. SOUTH. SOUTH"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintMazeDreary "Help, I'm lost in a dreary maze!" with name 'mazedrearyhint', maxhints 1, number 1, hints [i; switch(i) { 1: "WEST. SOUTH. SOUTH. SOUTH"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintMaze "Help, I'm lost in a maze!" with name 'mazehint', maxhints 1, number 1, hints [i; switch(i) { 1: "SOUTH"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; HintClass HintMazeDevlish "Help, I'm lost in a devlish maze!" with name 'mazedevlishhint', maxhints 1, number 1, hints [i; switch(i) { 1: "WEST. SOUTH. SOUTH. SOUTH"; default: "[ Error: Unknown Hint Number = ", i, " ]"; } ] ; !> !< "Walkthrough" Option "Walkthrough" ManualMenu with number 0, description [i; new_line; if(self.number==0) { print "Use this section only as a last resort. This is a step-by-step solution to The Night of the Vampire Bunnies. This will complete the game, but will miss many areas. It is recomended that you first try to play through the game on your own.^^"; print "Do you wish to continue? >"; i=NoOrYes(); if(i==0) return 2; new_line; new_line; } self.number=1; font off; print " LOOK AT GROUND^ GET CARROT^ E^ SOAK CARROT IN STREAM^ JUMP OVER STREAM^ W^ GET LAMP^ E^ JUMP OVER STREAM^ W^ W^ DROP ALL EXCEPT LAMP^ TURN ON LAMP^ TURN CRANK^ D^ S^ GET BUCKET^ N^ DROP LAMP^ U^ DROP BUCKET^ D^ GET LAMP^ U^ GET BUCKET, CARROT^ E^ E^ FILL BUCKET WITH WATER^ W^ W^ N^ OPEN COFFIN^ POUR WATER ON VAMPIRE^ DROP BUCKET^ WEAR CROSS^ S^ E^ E^ S^ D^ GET TORCH^ E^ S^ BURN OOZE WITH TORCH^ W^ W^ W^ S^ S^ S^ BURN WEB WITH LAMP^ E^ BREAK MIRROR^ E^ GIVE CARROT TO BUNNY^ SIT ON THRONE^ E^ "; font on; ] ; !> !< "How all the points are scored..." Option "How all the points are scored" ManualMenu with number 0, description [i; new_line; if(self.number==0) { print "Use this section only as a last resort. The information below may give away the answers to puzzles you have not yet solved.^^"; print "Do you wish to continue? >"; i=NoOrYes(); if(i==0) return 2; new_line; new_line; } self.number=1; font off; print (Bold) "Action Location Value^", "^ Breaking the mirror Dead End 8^ Burning the cobwebs Torch Room 5^ Destroying the bunny Bunny Room 10^ Entering the long corridor Long Corridor 5^ Entering the well Graveyard 5^ Finding the carrot Carrot Field 2^ Finding the cross In Coffin 10^ Jumping over the stream Graveyard 3^ Sitting in the throne Bunny Room 2^ Soaking the carrot with water Stream 10^ ^ Total: 60^ ^"; font on; ] ; !> !< "Changes... - R3" Option "Changes" ManualMenu with description [; print " I have tried to keep this port as close to the QBASIC version as I could, but seeing as how I've never compiled the QBASIC source, there might be a few differences. Below are the items that did make the port, those that didn't, and those that are of my own creation. ^ ^", (CenterB) "*** What made it into the port ***", " ^ ^ Nearly all the game text, including system responses. ^ ^ Ability to use commands such as ", (Bold) "GO TO STREAM", " to enter the stream. ^ ^", (CenterB) "*** What didn't make it into the port ***", " ^ ^ The ~New game or undo~ text when you lose. I decided to stick with the standard ~Restart, Restore, or Quit~ text. ^ ^", (CenterB) "*** What I added to the port ***", " ^ ^ Most of the additions are the result of my having already coded them up for another game. I didn't see any reason to remove them from my ~game skeleton~ as I don't belive they detract from the game. ^ ^ The larger status line based on the code by Joachim Baumann that adds a compass rose to the status line. I took this and made better use of available space then the orignal did. ^ ^ Online hints. They aren't very good, but they might be of help to someone. ^ ^ This set of menus. ^ ^ A Prefs menu. This will allow you to set some of the game prefs from a menu. It's more of a toy then a useful menu, but I found it easier to set the prefs here. About the Graphics font choice, if your interpreter supports font three, commonly referred to as the ~graphics font~, but you don't like them, you can turn them off here. ^ ^ A ~System Info~ menu. This will give you some information about your interpreter and this game file. It is at best a toy, but I thought it was interesting. ^ ^ Various other forms of Inform stuff that I can't quite remember at the moment. ^ ^ I had to make some game text where none existed in the QBASIC source. I have tried to adapt it from other game text when available. ^ ^"; ] ; !> !< "Credits..." Option CreditsMenu "Credits" ManualMenu with description [; #ifdef VersionTag; credits(); #endif; print "And special thanks to all those who sent in bug reports.^^"; ] ; !> !< "History... - R4" Option HistoryMenu "History" ManualMenu with description [; new_line; new_line; print (Bold) "Release 0 / Serial number 97xxxx", ": Beta copies, not distributed. ^ ^"; print (Bold) "Release 1 / Serial number 970226", ": First public release. Most likely full of bugs. ^ ^"; print (Bold) "Release 2 / Serial number 970315", ": Typos, bug fixes, and general cleaning up. ^ (970226) Added grammar to 'jump'. ^ (970309) Fixed 'soak' action for easier use. ^ (970309) 'look', 'verbose', 'brief', and 'superbrief' no longer waste a turn. ^ (970309) Removed 'bugreport' verb, it was rather useless (i.e. I wouldn't use it). ^ (970309) Added a hint. ^ (970309) Fixed text displayed when typing 'wear cross' before picking it up. ^ (970309) ~Press any key to continue~ now accepts any key. ^ (970309) Fixed Lamp and Torch descriptions. ^ (970309) Typos in hints fixed. ^ (970309) Fixed typo in Torch Room. ^ (970309) Display hints for Skeleton, Ooze, and Carrot sooner. ^ (970309) Typo when putting on cross. ^ (970309) Added 'intro' verb. ^ (970309) Fixed font three bug (I hope). It's still not perfect :-( ^ (970309) Fixed some code for the well that will never be reached anyway. ^ (970309) Added the 'font' verb. ^ (970309) Cleaned up source code. ^ (970312) Fixed bug in 'answer' verb. ^ (970312) Fixed bug in Dead End room description. ^ (970312) Optimized Bunny Room. ^ (970312) Fixed bug in Sandy Room description. ^ (970312) Fixed bug in Graveyard (with hole) description. ^ (970312) Fixed bug in Graveyard (with well) description. ^ (970312) Optimized hint code in some rooms. ^ (970312) Optimized Slimy Room code. ^ (970312) Fixed bug in Torch Room description. ^ (970312) Typo in Apple. ^ (970312) Optimized Carrot Field code. ^ (970312) Fixed Well code regarding light. ^ (970312) Fixed 'put object in well' code. ^ (970312) Optimized Rope code. ^ (970312) Optimized At Hole code. ^ (970312) Fixed possible bug in Bucket. ^ (970312) Optimized Stream code. ^ (970312) Merged multiple objects into single objects (i.e. holes). ^ (970314) Fixed bug in Lever description. ^ ^"; print (Bold) "Release 3 / Serial number 970330", ": More typos, bug fixes, and general cleaning up. ^ (970318) Fixed well descriptions. ^ (970318) Added 'light' verb to lamp and torch. ^ (970318) Typos in menus fixed. ^ (970318) Fixed 'font' verb text. ^ (970318) Fixed Well bug introduced in release 2. ^ (970318) Added warning for coffin. ^ (970318) Replaced the entire buggy 'pour' verb system. ^ (970319) Removed requirement for custom hack in statusline at end of game. ^ (970329) Got rid of a lot of unneeded attributes. ^ ^"; print (Bold) "Release 4 / Serial number 971205", ": Commodore 64 bug fix and email address change. ^ (971205) Fixed font 3 bug that messed up Commodore 64 interpreters. Turns out I switched two lines by mistake (oops). ^ (971205) Updated my email address in the notes menu section. ^ ^"; print (CenterB) "*** NOTE ***", " ^ ^The original QBASIC version can be found at GMD under the file name of ", (Italic) "bunny.zip", ". ^ ^The URL for the Inform source is: ^ ^ ^ ^The URL for the QBASIC source is: ^ ^ ^ ^"; ] ; !> !< "Preferances..." Menu PrefsMenu "Preferances" ManualMenu ; Option "Graphics font" PrefsMenu with short_name [; print (object) self, " "; switch(font_three) { 0: print "(text font)"; 1: print "(graphics font)"; } rtrue; ], select [; switch(font_three) { 0: font_three=1; 1: font_three=0; } return 2; ] ; Option "Notification" PrefsMenu with short_name [; print (object) self, " "; switch(notify_mode) { 0: print "(off)"; 1: print "(on)"; } rtrue; ], select [; switch(notify_mode) { 0: notify_mode=1; 1: notify_mode=0; } return 2; ] ; Option "Statusline" PrefsMenu with short_name [; print (object) self, " "; switch(compass_rose) { 0: print "(compact)"; 1: print "(large)"; } rtrue; ], select [; switch(compass_rose) { 0: compass_rose=1; 1: compass_rose=0; } return 2; ] ; Option "Verbosity" PrefsMenu with short_name [; print (object) self, " "; switch(lookmode) { 1: print "(brief)"; 2: print "(verbose)"; 3:"(superbrief)"; } rtrue; ], select [; switch(lookmode) { 1: lookmode=2; 2: lookmode=3; 3: lookmode=1; } return 2; ] ; !> !< "System info..." Option SystemMenu "System Info" ManualMenu with description [; SystemInfo(); ] ; !> !------------------------------------------------------------------------! !-----Misc-Routines------------------------------------------------------! !------------------------------------------------------------------------! Include "CustomRoutines"; !< "Introduction - R2" [ Introduction; print " The voice still echoes in your head. ~Remember--if the bunny is not dead by midnight, the countryside will be ruled by evil.~ ^ ^ You shiver as you think of the people dead in the street with bite marks on their neck. The cattle dead by the hundreds. The stories of a rampaging vampire bunny. A chill runs up your spine. ^ ^ And lastly, you remember the strangeness of the graveyard the last time you saw it. The misty fog surrounding it. And now you're in the graveyard, alone, armed only with your apple and your trusty quill pen. ^ ^"; ]; !> !< "PrintRank" [ PrintRank; print "You have reached the rank of "; switch(score) { 0 to 10: "Novice Adventurer."; 11 to 20: "Graveyard Explorer."; 21 to 30: "Adventurer."; 31 to 40: "Monster Basher."; 41 to 50: "Expert Adventurer."; 51 to 59: "Exterminator."; 60: "Bunny Slayer."; } ]; !> !< "PrintTaskName" [ PrintTaskName i; switch(i) { 0: "breaking the mirror"; 1: "burning the cobwebs"; 2: "destroying the bunny"; 3: "entering the long corridor"; 4: "entering the well"; 5: "finding the carrot"; 6: "finding the cross"; 7: "jumping over the stream"; 8: "sitting in the throne"; 9: "soaking the carrot with water"; } ]; !> !< "TitlePage" [ TitlePage; Center("[Press any key to continue]"); Pause(); @erase_window $ffff; font off; box " " "The Night of the Vampire Bunnies" " Made by Jason Dyer " " "; Center("[Press any key to continue]"); font on; Pause(); @erase_window $ffff; ]; !> !< "WarningBeGone" [ WarningBeGone; WarningBeGone(); Reverse(); Fixed(); Format(); CenterU(); PronounAcc(); PronounNom(); PronounCNom(); PronounHer(); ]; SwitchOption "SwitchOption Be Gone!"; !> Include "CustomEnding"; !------------------------------------------------------------------------! !-----End-Of-File--------------------------------------------------------! !------------------------------------------------------------------------!