| !*************************************************************************** | |
| !** | |
| !** Test For Echo | |
| !** | |
| !** This short Inform "game" gives an example of using the BeforeParsing() | |
| !** entry point to simulate a room where commands are echoed back to | |
| !** the player, much like Zork I's Loud Room. | |
| !** | |
| !** Users are free to use this code anyway they like, and may modify it to | |
| !** suit their needs. | |
| !** | |
| !** John Menichelli (menichel@cox.net) | |
| !** | |
| !*************************************************************************** | |
| Constant Story "Test For Echo"; | |
| Constant Headline "^A sample game (with apologies to Rush) | |
| by John Menichelli^^"; | |
| Release 1; | |
| Include "Parser"; | |
| Include "Verblib"; | |
| !*************************************************************************** | |
| !** | |
| !** The Loud Room has the attribute "general" when the echo effect has | |
| !** been canceled. | |
| !** | |
| !*************************************************************************** | |
| Object LoudRoom "Loud Room" | |
| with name "Loud Room", | |
| description [; | |
| print "This is a large room with a ceiling which cannot be | |
| detected from the ground. A narrow passage leads east and west. "; | |
| if (self has general) | |
| "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."; | |
| ], | |
| e_to EastRoom, | |
| w_to WestRoom, | |
| has light; | |
| !*************************************************************************** | |
| !** | |
| !** The obligatory platinum bar which can't be picked up until the echo | |
| !** effect has been canceled. | |
| !** | |
| !*************************************************************************** | |
| Object -> PlatBar "platinum bar" | |
| with name "platinum" "bar", | |
| ; | |
| Object EastRoom "East Room" | |
| with name "East Room", | |
| description "This is a room with an exit to the west.", | |
| w_to LoudRoom, | |
| has light; | |
| Object WestRoom "West Room" | |
| with name "West Room", | |
| description "This is a room with an exit to the east.", | |
| e_to LoudRoom, | |
| has light; | |
| [ BeforeParsing ; | |
| if (player notin LoudRoom) rfalse; | |
| if (player in LoudRoom && LoudRoom has general) rfalse; | |
| ! Allow certain system verbs | |
| if (parse-->1 == 'restore' or 'restart' or 'save' or 'q//' or 'quit') rfalse; | |
| ! Test for east or west movement and allow it | |
| if (parse-->1 == 'go' && (parse-->3 == 'e//' || parse-->3 == 'w//')) rfalse; | |
| if (parse-->1 == 'go' && (parse-->3 == 'east' || parse-->3 == 'west')) rfalse; | |
| if (parse-->1 == 'go' && parse->1 == 1) rfalse; | |
| if (parse-->1 == 'e//' or 'w//') rfalse; | |
| if (parse-->1 == 'east' or 'west') rfalse; | |
| ! "Bug" response | |
| if (parse-->1 == 'bug') rfalse; | |
| ! Print the last word in the input stream twice | |
| PrintRawInputWord(parse->1); | |
| print " "; | |
| PrintRawInputWord(parse->1); | |
| print " ...^"; | |
| ! Test for the word "echo" and cause it's effect | |
| ! Gives the Loud Room general and cancels the echo effect | |
| if (parse-->1 == 'echo') | |
| { | |
| print "^The acoustics of the room change subtly.^^"; | |
| give LoudRoom general; | |
| parse->1 = 1; | |
| parse-->1 = 'cth'; | |
| << Examine LoudRoom >>; | |
| } | |
| ! Modify the parse table and continue execution. This prevents returning | |
| ! a response to the command the player types. | |
| else | |
| { | |
| parse->1 = 1; | |
| parse-->1 = 'cth'; | |
| } | |
| ]; | |
| !*************************************************************************** | |
| !** | |
| !** Print word num from the raw input stream | |
| !** | |
| !*************************************************************************** | |
| [ PrintRawInputWord num i ; | |
| ! Print non-dictionary word | |
| for (i = 0: i < WordLength(num): i++) | |
| print (char) WordAddress(num)->i; | |
| ]; | |
| !*************************************************************************** | |
| !** | |
| !** Initialise | |
| !** | |
| !*************************************************************************** | |
| [Initialise ; | |
| location = EastRoom; | |
| ]; | |
| Include "Grammar"; | |
| [ EchoSub ; | |
| "echo echo ..."; | |
| ]; | |
| Verb 'echo' | |
| * -> Echo; | |
| !*************************************************************************** | |
| !** | |
| !** Dummy action when no response is desired. "Cth" was chosen because | |
| !** it's not a command most players would use. This is a crude hack; if | |
| !** anyone knows a better way, please let me know. | |
| !** | |
| !*************************************************************************** | |
| [ CthSub ; | |
| ]; | |
| Verb 'cth' | |
| * -> Cth; | |
| [ BugSub ; | |
| "That's only your opinion."; | |
| ]; | |
| Verb 'bug' | |
| * -> Bug; | |
Xet Storage Details
- Size:
- 4.48 kB
- Xet hash:
- cf1347747d8d91b7b8995d863e49674765c32cfdaf0bba411bd38ab35142fb9a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.