Class HelpClass with short_name [ wd val; val = self.name_str; if (val) { print "help topic ~", (string) val, "~"; } else { wd = (self.&name)-->0; print "help topic ~", (address) wd, "~"; } rtrue; ], name_str 0; [ HelpBareSub; <>; ]; [ HelpSub; if (noun in compass) <>; new_line; PrintOrRun(noun, description); ]; [ HelpConcreteSub; if (noun in compass) <>; if (noun == player) <>; if (noun ofclass DistantMaskClass) <>; give HTBare general; print "The help system contains information about commands you can try, and other topics which are generally useful in learning to play IF. There is no information about specific objects (such as ", (the) noun, ").^^"; print "Type ", (helpcmd) "help", " for subjects you can learn about.^"; ]; [ HelpParseNameOptWords wd num notfirst; notfirst = false; wd = NextWord(); while (WordInProperty(wd, self, name) || (notfirst && WordInProperty(wd, self, name_wd))) { num++; notfirst = true; wd = NextWord(); } return num; ]; [ HelpParseNameReqWords wd num notfirst gotreq; notfirst = false; gotreq = false; wd = NextWord(); while (1) { if (WordInProperty(wd, self, name)) { } else if (notfirst && WordInProperty(wd, self, name_wd)) { gotreq = true; } else { break; } num++; notfirst = true; wd = NextWord(); } if (~~gotreq) rfalse; return num; ]; HelpClass HTBare with name 'if', ! and just 'help' description [; print "This tutorial has lots of built-in help on how to play text adventures. To read more, type ", (helpcmd) "help", " followed by whatever it is you want to get help on, and then hit enter."; if (self hasnt general && HTBasics hasnt general) { print " For example, you can type ", (helptopic) "basics", " to see the most important IF commands."; give self general; } else { print "^^Topics you can get help on:^^"; print (helptopic) "basics", ": The most important IF commands^"; print (helptopic) "commands", ": Some more common commands^"; print (helptopic) "talking", ": Commands for talking to other characters^"; print (helptopic) "system", ": Saving and loading games, quitting, and other system commands^"; print (helptopic) "special", ": Useful odds and ends (which may work differently in different games)^"; print (helptopic) "strategy", ": Figuring out what to do, when you're stuck^^"; print "All of these topics are ", (emph) "general", " information on playing IF. If you are stuck on a particular puzzle in ", (string) Story, ", type ", (helptopic) "hint", " for a single hint on what to try next."; } new_line; ], has ~general; HelpClass HTBasics with name 'basics' 'basic' 'fundamental' 'important', description [; print "These are the commands you will use most often.^^"; print (helpcmd) "look", " or ", (helpcmd) "l", ": Look around the room -- repeat the description of everything you see.^"; print (helpcmdobj) "examine", " or ", (helpcmdobj) "x", ": Look more closely at something -- learn more about it.^"; print (helpcmd) "inventory", " or ", (helpcmd) "i", ": List everything you're carrying.^"; print (helpcmd) "north", ", ", (helpcmd) "south", ", ", (helpcmd) "east", ", ", (helpcmd) "west", ", ", "etc., or ", (helpcmd) "n", ", ", (helpcmd) "s", ", ", (helpcmd) "e", ", ", (helpcmd) "w", ", ", "etc.", ": Walk in some direction.^"; print "^For more about these commands -- or any command used in this game -- type ", (helpcmd) "help", " followed by the command word. For example, ", (helptopic) "look", "."; if (self hasnt general) { give self general; print " You might want to start by looking at the help information for all of these basic commands."; print "^^For even more help topics and commands, just type ", (helpcmd) "help", "."; } else { if (Hall3 hasnt visited && self.count == false && quill in player && (~~quill.helpmode)) { self.count = true; GuideEnqueue(GuideInviteInvMessage); } } new_line; ], count false, has ~general; HelpClass HTMovement with name 'movement' 'moving' 'travel', description [; print (helpcmd) "north", ", ", (helpcmd) "south", ", ", (helpcmd) "east", ", ", (helpcmd) "west", ", ", (helpcmd) "up", ", ", (helpcmd) "down", "^"; print (helpcmd) "northeast", ", ", (helpcmd) "southeast", ", ", (helpcmd) "southwest", ", ", (helpcmd) "northwest", "^"; print "^You can abbreviate these movement commands to one or two letters: ", (helpcmd) "n", ", ", (helpcmd) "s", ", ", (helpcmd) "e", ", ", (helpcmd) "w", ", ", (helpcmd) "u", ", ", (helpcmd) "d", ", ", (helpcmd) "ne", ", ", (helpcmd) "se", ", ", (helpcmd) "sw", ", ", (helpcmd) "nw", ".^^"; print "These commands let you move around. You will walk out of the room, and into a nearby room, in the given direction.^^"; print "If the game replies ~You can't go that way,~ then there is no exit in that direction. Try ", (helpcmd) "look", " to see what directions you can go.^"; ]; HelpClass HTLook with name 'look' 'l//', description [; print (helpcmd) "look", ": Look around the room.^"; print "^(You can abbreviate this as ", (helpcmd) "l", ".)^^"; print "Take a look around. This repeats the description of the room, and lists everything you see nearby.^^"; print "If you are having trouble understanding where you are, or what's going on in the game, it never hurts to ", (helpcmd) "look", ".^^"; print "Remember, you also can ", (helpcmd) "examine", " anything you see, to inspect it in more detail.^"; ]; HelpClass HTExamine with name 'examine' 'x//', description [; print (helpcmdobj) "examine", ": Look more closely at something.^"; print "^(You can abbreviate this as ", (helpcmdobj) "x", ".)^^"; print "Inspect an object carefully. You can do this to anything you're carrying, and anything nearby -- most anything you encounter in the game.^^ You will often learn more about things if you ", (helpcmd) "examine", " them. However, if the game replies ~You see nothing special about that,~ then it's probably not important. If the game replies ~You can't see any such thing,~ then it's definitely not important.^^"; print "You can even examine yourself: ", (helpcmd) "x myself", " or ", (helpcmd) "x me", ". This may tell you more about yourself -- information to help you understand the character you are playing. Then again, it may not.^"; ]; HelpClass HTInventory with name 'inventory' 'i//' 'inv', description [; print (helpcmd) "inventory", ": List everything you're carrying.^"; print "^(You can abbreviate this as ", (helpcmd) "i", ".)^^"; print "In some games, you start out empty-handed. In others, you are already holding things when you begin. It's a good idea to look these over; they will almost certainly be important later.^^"; print "And, of course, if you forget what you're holding, you can always repeat this command, to remind yourself.^^"; print "Remember, you also can ", (helpcmd) "examine", " the objects you're carrying, to inspect them in more detail.^"; ]; HelpClass HTSystem with name 'system' 'meta', description [; print "These commands help you manage your playing experience. (They're not actions you take ", (emph) "inside", " the game world.)^^"; print "For more information on any of these commands, type ", (helpcmd) "help", " followed by the command word.^^"; print (helpcmd) "save", ": Save a file containing your current game position.^"; print (helpcmd) "restore", ": Restore a saved game; return to the saved position.^"; print (helpcmd) "quit", ": End the game.^"; print (helpcmd) "restart", ": Start the game over from the beginning.^"; print (helpcmd) "undo", ": Take back your last move.^"; print (helpcmd) "again", ": Repeat your last move.^"; print (helpcmd) "script", ": Begin saving a transcript file of your game session.^"; print (helpcmd) "script off", ": Turn off ", (helpcmd) "script", " mode.^"; ]; HelpClass HTQuit with name 'quit' 'q//', description [; print (helpcmd) "quit", ": End the game.^"; print "^(You can abbreviate this as ", (helpcmd) "q", ".)^^"; print "The game will ask you whether you mean it. (Type ", (helpcmd) "y", " or ", (helpcmd) "n", " and hit enter.) If you answer ~yes~, the game will end and the program will shut down.^^"; print "You should type ", (helpcmd) "save", " to save your progress before you ", (helpcmd) "quit", "!^"; ]; HelpClass HTRestart with name 'restart', description [; print (helpcmd) "restart", ": Start the game over from the beginning.^"; print "^The game will ask you whether you mean it. (Type ", (helpcmd) "y", " or ", (helpcmd) "n", " and hit enter.) If you answer ~yes~, the game will start over. You will find yourself back at the beginning, carrying only those items you had when the game started.^"; ]; HelpClass HTSaveLoad with name 'save' 'restore' 'load' 'saving', description [; print (helpcmd) "save", ": Save a file containing your current game position.^"; print (helpcmd) "restore", ": Restore a saved game; return to the saved position.^"; print "^When you type ", (helpcmd) "save", ", the game will prompt you to create a save file. (You can put this anywhere on your computer.) A save file contains the entire state of the game -- your position, your possessions, all the progress you have made.^^"; print "When you type ", (helpcmd) "restore", ", the game will prompt you to load a save file back in. This restores you to the exact position of the save file. You will find everything just as you left it.^^"; print "You can ", (helpcmd) "save", " as many different files as you want. You can also ", (helpcmd) "restore", " from a given file as many times as you want.^^"; print "You will probably want to ", (helpcmd) "save", " before you ", (helpcmd) "quit", " (say, if you're about to shut down your computer). You might also want to ", (helpcmd) "save", " before you try something dangerous or uncertain in a game. (If a dragon gnaws your arm off, it's nice to be able to ", (helpcmd) "restore", " a file that you saved before you walked into its lair.)^"; ]; HelpClass HTUndo with name 'undo', description [; print (helpcmd) "undo", ": Take back your last move.^"; print "^When you type ", (helpcmd) "undo", ", the game un-does your last move. Your position, your possessions, and all the rest of the game are restored just as they were before your previous command.^^"; print "Depending on the capabilities of your IF interpreter, you may not be able to ", (helpcmd) "undo", " more than one move in a row. If you want to go back to an earlier point in the game, you'll have to use ", (helpcmd) "save", " and ", (helpcmd) "restore", ", instead of ", (helpcmd) "undo", ".^"; ]; HelpClass HTAgain with name 'again' 'g//', description [; print (helpcmd) "again", ": Repeat your last move.^"; print "^(You can abbreviate this as ", (helpcmd) "g", ".)^^"; print "Repeat your last move, just as if you'd typed it again.^"; ]; HelpClass HTScript with name 'script' 'unscript' 'transcript', name_wd 'on' 'off', parse_name HelpParseNameOptWords, description [; print (helpcmd) "script", ": Begin saving a transcript file of your game session.^"; print (helpcmd) "script off", ": Turn off ", (helpcmd) "script", " mode.^"; print "^When you type ", (helpcmd) "script", ", the game will prompt you to create a transcript file. (You can put this anywhere on your computer.)^^"; print "The transcript is a text file. As you play, everything that the game displays -- your commands and the game's responses -- are logged to the transcript. (The transcript begins at the point you typed ", (helpcmd) "script", ", not at the beginning of the game.)^^"; print "Type ", (helpcmd) "script off", " to stop the logging and close the transcript file. You can then view it with any text editor.^"; ]; HelpClass HTVerbose with name 'verbose' 'brief', description [; print (helpcmd) "verbose", ": See a detailed description of each room you enter, every time.^"; print (helpcmd) "brief", ": Turn off ", (helpcmd) "verbose", ".^"; print "^Most text games start in ", (helpcmd) "brief", " mode. This means that when you enter a room for the first time, you will see a full description of the room and its contents. But if you leave the room and come back, you will only see a brief description. This consists of the room's name, and a list of portable objects -- but no description, nor major room features such as exits.^^"; print "If you want, you can type ", (helpcmd) "verbose", " to change this. In ", (helpcmd) "verbose", " mode, you will see a complete description every time you enter a room.^^"; print "(Of course, you can type ", (helpcmd) "look", " or ", (helpcmd) "l", " at any time to repeat the complete room description. But ", (helpcmd) "verbose", " is very convenient. I recommend you use it whenever you play IF.)^^"; print "The ", (helpcmd) "verbose", " mode remains in place for the rest of the game, unless you turn it off by typing ", (helpcmd) "brief", ". It is also saved in ", (helpcmd) "save", " files. However, if you ", (helpcmd) "restart", " the game, it will be turned off.^^"; print "Note that some games (though not this one) start out in ", (helpcmd) "verbose", " mode automatically.^"; ]; HelpClass HTCommands with name 'commands' 'command', description [; print "These are the most common ways of interacting with the game's world. It's usually worth trying these, in almost any situation. You never know what might happen -- or what you might learn.^^"; print "These commands do what they say. Common sense applies. There are many more possibilities -- every game has its own variations, depending on what actions make sense in a particular situation. For more information, type ", (helpcmd) "help", " followed by any command word.^^"; print (helpcmdobj) "get", ", ", (helpcmdobj) "drop", "^"; helpformat("put", 2, "in", 3); print ", "; helpformat("put", 2, "on", 3); print ", "; helpformat("throw", 2, "at", 3); print "^"; print (helpcmdobj) "push", ", ", (helpcmdobj) "pull", ", ", (helpcmdobj) "turn", "^"; print (helpcmdobj) "open", ", ", (helpcmdobj) "close", "^"; helpformat("lock", 2, "with", 3); print ", "; helpformat("unlock", 2, "with", 3); print "^"; print (helpcmdobj) "touch", ", ", (helpcmdobj) "smell", ", ", (helpcmdobj) "listen to", "^"; print (helpcmdobj) "eat", ", ", (helpcmdobj) "drink", "^"; print (helpcmdobj) "wear", ", ", (helpcmdobj) "remove", "^"; print (helpcmdobj) "search", ", ", (helpcmdobj) "look in", ", ", (helpcmdobj) "look under", ", ", (helpcmdobj) "look behind", "^"; print (helpcmdobj) "enter", ", ", (helpcmdobj) "sit on", ", ", (helpcmdobj) "climb", "^"; print (helpcmdobj) "get in", ", ", (helpcmdobj) "get off", ", ", (helpcmdobj) "get out of", "^"; print (helpcmdobj) "break", ", ", (helpcmdobj) "cut", ", ", (helpcmdobj) "crush", "^"; print (helpcmd) "wait", "^"; ]; HelpClass HTGetDrop with name 'get' 'take' 'drop', description [; print (helpcmdobj) "get", " or ", (helpcmdobj) "take", ": Pick something up.^"; print (helpcmdobj) "drop", ": Put something down.^"; print "^You will certainly encounter objects which you'll want to take with you. Every adventurer is a collector at heart. Type ", (helpcmd) "get", " (followed by the object's name) to pick it up.^^"; print "Of course, many things are anchored in place, or too large to carry.^^"; print "To put things down again, use the ", (helpcmd) "drop", " command. (This generally puts an item down on the floor. To place it somewhere special, try "; helpformat("put", 2, "in", 3); print " or "; helpformat("put", 2, "on", 3); print ".)^^"; print "To see what you're carrying, type ", (helpcmd) "inventory", ", or just ", (helpcmd) "i", ".^"; ]; HelpClass HTPutThrow with name 'put' 'throw', name_wd 'on' 'in' 'onto' 'into' 'at', parse_name HelpParseNameOptWords, description [; helpformat("put", 2, "in", 3); print ": Place something into a container.^"; helpformat("put", 2, "on", 3); print ": Place something onto a surface.^"; helpformat("throw", 2, "at", 3); print ": Hurl something at a target.^"; print "^When you discover a container, such as a sack or chest or drawer, you can say ", (helpcmd) "put object in container", " to place something into it. (Of course, if the container has a lid, you'd want to ", (helpcmd) "open", " it first.)^^"; print "For tables, pedestals, and other such pieces of flat-on-top furniture, the command ", (helpcmd) "put object on supporter", " is more appropriate.^^"; print "And for targets out of reach, you may occasionally want to try ", (helpcmd) "throw object at target", ". This is less commonly used; you tend to miss.^"; ]; HelpClass HTPushPull with name 'push' 'pull' 'turn' 'set', name_wd 'off' 'on' 'to', parse_name HelpParseNameOptWords, description [; print (helpcmdobj) "push", ": Give it a shove.^"; print (helpcmdobj) "pull", ": Give it a yank.^"; print (helpcmdobj) "turn", ": Give it a twist.^"; print "^All sorts of things can be pushed, pulled, turned, or moved. Levers, buttons, and heavy crates are for pushing. Ropes and levers can be pulled. (Yes, some levers go both ways.) Knobs and dials and wheels are frequently turned.^^"; print "Sometimes you'll want to use variations of these commands. If you find a lightswitch, you could type ", (helpcmd) "turn on switch", " or ", (helpcmd) "turn switch on", ". If a dial has numbers on it, like a combination lock, it may be helpful to say ", (helpcmd) "turn dial to 8", " or ", (helpcmd) "set dial to 8", ".^^"; print "Occasionally you find an object which is too heavy to lift, but not too heavy to be pushed around. Try ", (helpcmd) "push object north", " to direct it.^"; ]; HelpClass HTGetIn with name 'get', name_wd 'in' 'out' 'off' 'on' 'of', parse_name HelpParseNameReqWords, name_str "get in", description [; HTEnter.description(); ]; HelpClass HTEnter with name 'enter' 'sit' 'climb' 'exit' 'out', name_wd 'on', parse_name HelpParseNameOptWords, description [; print (helpcmdobj) "enter", " or ", (helpcmdobj) "get in", ": Get into, say, a car.^"; print (helpcmdobj) "sit on", ": Sit down on, for example, a chair.^"; print (helpcmdobj) "climb", ": Climb, perhaps, a ladder.^"; print (helpcmdobj) "get off", " or ", (helpcmdobj) "get out of", ": Leave, e.g., a car or a chair. Or a cage. Or a chasm. Or...^"; print "^These commands are good for moving around, if the simple directions (", (helpcmd) "north", ", ", (helpcmd) "south", ", etc.) aren't what you want.^^"; print "Don't be intimidated by the many variations. If you encounter an automobile, you can probably type ", (helpcmd) "enter car", ", ", (helpcmd) "get in car", ", ", (helpcmd) "sit in car", ", or ", (helpcmd) "climb into car", ". In a well-written text game, any of the obvious possibilities will work.^^"; print "(However, for a car or a cage, you might have to use the ", (helpcmd) "open", " command first.)^^"; print "You can often abbreviate ", (helpcmdobj) "get out of", " as ", (helpcmd) "exit", " or ", (helpcmd) "out", ".^"; ]; HelpClass HTOpenClose with name 'open' 'close', description [; print (helpcmdobj) "open", ": Open something.^"; print (helpcmdobj) "close", ": Close something.^"; print "^These commands are good for boxes, doors, wardrobes, windows, wallets, and dozens of other exciting uses.^^"; print "If you not sure whether something is opened or closed, ", (helpcmd) "examine", " it. If a container is open, you can probably ", (helpcmd) "search", " or ", (helpcmd) "look into", " it.^^"; print "In some circumstances, ", (helpcmd) "open", " will happen automatically. If there is a closed door to the north, and you type ", (helpcmd) "north", ", the game may tell you that you have opened the door and walked through. Or not -- you may have to type ", (helpcmd) "open door", ". It depends on the style of the game, the nature of the door, and the mood of the author.^^"; print "On the other hand, you may find that the door is locked. If so, consider the ", (helpcmd) "unlock", " command.^"; ]; HelpClass HTLockUnlock with name 'lock' 'unlock', name_wd 'with', parse_name HelpParseNameOptWords, description [; helpformat("lock", 2, "with", 3); print ": Secure what is free.^"; helpformat("unlock", 2, "with", 3); print ": Loose what is bound.^"; print "^Many things can be opened and closed; some can also be locked and unlocked. You will meet a lot of locked doors in adventure games. They are hazards of the course.^^"; print "Typically a lock requires a key. (Although you never know.) Usually you have to ", (helpcmd) "close", " a door or box before you ", (helpcmd) "lock", " it -- although, again, there may be exceptions. Always examine what you find, and consider well its nature.^^"; print "In some games, you can just type ", (helpcmd) "unlock door", " instead of ", (helpcmd) "unlock door with key", ". If you have the correct key, the game will probably understand that you mean to use it.^^"; print "On the other hand, if you don't ", (emph) "know", " which key is correct, the game may leave it up to you. Trial and error, too, is a hazard of the course.^"; ]; HelpClass HTTouchSmellListen with name 'touch' 'smell' 'listen' 'hear' 'taste', name_wd 'to', parse_name HelpParseNameOptWords, description [; print (helpcmdobj) "touch", ": Feel something gently.^"; print (helpcmdobj) "smell", ": Consider its scent.^"; print (helpcmdobj) "listen to", ": What does it sound like?^"; print "^A close investigation is often rewarded. You've already used ", (helpcmd) "examine", " on everything in sight; but perhaps you haven't tried ", (helpcmd) "touch", " or ", (helpcmd) "feel", " on everything in reach; or ", (helpcmd) "listen to", " on everything in earshot; or ", (helpcmd) "smell", " on everything in... er... noseblow?^^"; print "(You can even try ", (helpcmd) "taste", ", although this may wind up being the same as ", (helpcmd) "eat", ".)^^"; print "You can also try just ", (helpcmd) "listen", " or ", (helpcmd) "smell", ", with no nouns, to get a general sense of your surroundings.^"; ]; HelpClass HTEatDrink with name 'eat' 'drink', description [; print (helpcmdobj) "eat", ": Consume food.^"; print (helpcmdobj) "drink", ": Consume a beverage.^"; print "^Just what you think. Whether it's a tasty sandwich or a moldy old mushroom, you can try to ", (helpcmd) "eat", " it. (Whether this is a good idea is another question entirely. Remember what happened to Alice.)^^"; print "Similarly, you can ", (helpcmd) "drink", " a glass of water, a flagon of wine, or a vial of quintessential potion. Potions may have strange and magical effects. Then again, so may the mushrooms.^^"; print "You may have to ", (helpcmd) "get", " something before you can eat or drink it.^"; ]; HelpClass HTTakeOff with name 'take', name_wd 'off', parse_name HelpParseNameReqWords, name_str "take off", description [; HTWearRemove.description(); ]; HelpClass HTWearRemove with name 'wear' 'remove' 'don' 'doff' 'disrobe', description [; print (helpcmdobj) "wear", " or ", (helpcmdobj) "put on", ": Put on an article of clothing.^"; print (helpcmdobj) "remove", " or ", (helpcmdobj) "take off", ": Take it off again.^"; print "^Clothing is meant to be worn -- be it a dinner jacket or a space suit. Then there are items of personal adornment, like helmets, crowns, necklaces, and rings. (Magical? Who can tell?) Use the ", (helpcmd) "wear", " and ", (helpcmd) "remove", " commands. You can also ", (helpcmd) "drop", " something you're wearing, which will both remove it and drop it on the floor.^^"; print "(Type ", (helpcmd) "inventory", " or ", (helpcmd) "i", " to see if you're wearing something or just carrying it around.)^^"; print "Your ordinary everyday clothes are usually ", (emph) "not", " listed in your inventory; and you can't take them off or discard them. Don't worry about them unless the game specifically refers to them.^"; ]; HelpClass HTLookIn with name 'look' 'l//', name_wd 'in' 'under' 'through' 'behind', parse_name HelpParseNameReqWords, name_str "look in", description [; HTSearch.description(); ]; HelpClass HTSearch with name 'search', description [; print (helpcmdobj) "search", " or ", (helpcmdobj) "look in", ": Look through the contents of something.^"; print (helpcmdobj) "look under", ": Check underneath it.^"; print (helpcmdobj) "look behind", ": Check behind it.^"; print "^The ", (helpcmd) "search", " command is an extremely thorough version of ", (helpcmd) "examine", ". Searching something may reveal nothing more than examining it; but if you see a drawer full of papers, or a heap of junk, a careful ", (helpcmd) "search", " can turn up hidden secrets. It may even be worth searching several times in a row.^^"; print "The ", (helpcmd) "look under", " and ", (helpcmd) "look behind", " commands are less commonly used, but they are helpful now and then.^"; ]; HelpClass HTHit with name 'break' 'cut' 'crush' 'attack' 'hit' 'stab', name_wd 'with', parse_name HelpParseNameOptWords, description [; print (helpcmdobj) "hit", ": Employ violence.^"; helpformat("hit", 2, "with", 3); print ": Employ violence with a particular tool.^"; print "^There are many things you might want to destroy, in IF, and many reasons to destroy them. The window, to break; the rope, to cut; the magical crystal, to shatter; the foul monster, to stab and slice and attack.^^"; print "These commands vary from game to game. All the words mentioned above can work. They tend to be somewhat interchangeable: the game will not quibble about whether you want to ", (helpcmd) "fight", " or ", (helpcmd) "attack", " the troll. And you'll certainly get the same result whether you ", (helpcmd) "break", " the delicate vase or ", (helpcmd) "hit", " it.^^"; print "In some games, you may need to specify a weapon: ", (helpcmd) "hit troll with sword", ". In others, the game may assume you intend to use whatever sharp pointy thing you're carrying around. If you have none, you'd better be good with your fists.^^"; print "Sometimes, though, it matters which tool you use. ", (helpcmd) "break wall with pickaxe", " is more likely to work than ", (helpcmd) "break wall with dagger", ". If you just type ", (helpcmd) "break wall", " the game may not guess correctly. Be specific, if you think it matters.^^"; print "In some games, by the way, violence is frowned on. A warrior in a goblins' lair is going to be hitting a lot of goblins. But if the game is set in your home, you probably don't want to smash everything in sight. Look for other solutions.^"; ]; HelpClass HTWait with name 'wait' 'z//', description [; print (helpcmd) "wait", ": Do nothing.^"; print "^(You can abbreviate this as ", (helpcmd) "z", ".)^^"; print "A text adventure is played in turns. You can think (and read) for as long as you want, while you're entering your command. The game only progresses when you hit enter.^^"; print "If you want to actually ", (emph) "do nothing,", " and let the game progress on its own, type ", (helpcmd) "wait", ". One turn will pass.^^"; print "Is it ever useful to do nothing? Certainly. You may meet people, animals, or machines which act on their own. Waiting and watching may be the key to understanding how they behave.^"; ]; HelpClass HTSpecial with name 'special' 'specials', description [; print "This is a somewhat miscellaneous grab-bag of commands which help you in playing a game. Not all games will support all of them, or handle them all the same way!^^"; print "For more information on any of these commands, type ", (helpcmd) "help", " followed by the command word.^^"; print (helpcmd) "about", ": Read a brief introduction to the game.^"; print (helpcmd) "verbose", ": See a detailed description of each room you enter, every time.^"; print (helpcmd) "brief", ": Turn off ", (helpcmd) "verbose", ".^"; print (helpcmd) "score", ": Measure your progress in the game.^"; print (helpcmd) "help", ": Learn about playing interactive fiction.^"; !print (helpcmd) "hint", ! ": Get a hint on what to do right now.^"; print (helpcmd) "tutorial off", ": Stop the Tutorial Voice from giving you helpful comments as you play.^"; print (helpcmd) "tutorial on", ": Turn the Tutorial Voice back on.^"; ]; HelpClass HTAbout with name 'about', description [; print (helpcmd) "about", ": Read a brief introduction to the game.^"; print "^In some games (including this one!) typing ", (helpcmd) "about", " will give you a short blurb about the game. It might introduce the game, give a few notes from the author, or tell you about special commands which are different -- or important -- in the game.^^"; print "Even if you're familiar with IF, it's a good idea to try ", (helpcmd) "about", " when you start a game you've never played before.^"; ]; HelpClass HTScore with name 'score' 'full', description [; print (helpcmd) "score", ": Measure your progress in the game.^"; print (helpcmd) "full score", ": A detailed measurement of your progress.^"; print "^In some games, ", (helpcmd) "score", " will tell you how far you've advanced through the game. This is usually measured in points -- although different games will report your progress differently.^^"; print "Some games also let you type ", (helpcmd) "full score", " to see a detailed list of your achievements.^^"; print "(In this game, ", (helpcmd) "score", " and ", (helpcmd) "full score", " are the same.)^"; ]; HelpClass HTHelp with name 'help', description [; print (helpcmd) "help", ": Learn about playing interactive fiction.^"; print "^The ", (helpcmd) "help", " command gives you general help on playing IF. For example, typing ", (helpcmdwd) "help", " will describe the ", (helpcmd) "command", " command. For example, typing ", (helptopic) "help", " will show you this very message!^"; ! mention hint? ]; HelpClass HTTutorial with name 'tutorial' 'tutor', name_wd 'on' 'off', parse_name HelpParseNameOptWords, description [; print (helpcmd) "tutorial off", ": Stop the Tutorial Voice from giving you helpful comments as you play.^"; print (helpcmd) "tutorial on", ": Turn the Tutorial Voice back on.^"; print "^The Tutorial Voice is a feature of this game which guides you through the basics of IF. (Most games don't have this feature! It's a specialty of ", (string) Story, ".)^"; GuidePrint("When you see a message like this, it's the Tutorial Voice speaking!"); print "^If you are already familiar with IF, and you want to explore this game on your own, type ", (helpcmd) "tutorial off", ". The game will be exactly the same -- the only difference is that you won't see the guide messages.^"; ]; HelpClass HTExpert with name 'expert', name_wd 'on' 'off', parse_name HelpParseNameOptWords, description [; print (helpcmd) "expert", ": Play a more challenging version of ", (string) Story, ".^"; print "^If you type ", (helpcmd) "expert", ", you will encounter a more difficult version of this game. The underlying map and storyline will not change, but certain puzzles will be more challenging. Also, the Tutorial Voice will be turned off, and the game will not show you a score to measure your progress.^^"; print "You can only switch to Expert mode at the beginning of the game. If you have already begun exploring, you will have to type ", (helpcmd) "restart", " before you can use ", (helpcmd) "expert", ".^"; ]; HelpClass HTTalking with name 'talking' 'people' 'character' 'conversation' 'interacti' 'dialogue' 'dialog' 'communicat', description [; print "Communicating with other characters is a tricky topic. Different games handle it in different ways. One approach is to present you with a menu -- when you meet someone, you can choose what to say from a list of phrases or questions.^^"; print "Other games leave the interaction up to you. The game tells you that there's another person in the room, and then presents you with the usual command prompt. The possible commands will vary from game to game, but these are usually available:^^"; helpformat("talk to", 4); print "^"; helpformat("ask", 4, "about", 5); print "^"; helpformat("tell", 4, "about", 5); print "^"; helpformat("say", 6, "to", 4); print "^"; helpformat("ask", 4, "for", 1); print "^"; helpformat("give", 1, "to", 4); print "^"; helpformat("show", 1, "to", 4); print "^"; print "^You can also talk to a person by typing ", (helpcmd) "person, phrase", ". (The comma is important.) For example, to answer a question, you could type ", (helpcmd) "morgan, yes", " or ", (helpcmd) "morgan, no", ". Saying ", (helpcmd) "pirate, hello", " can begin an interesting conversation -- or a deadly one. To order someone around, you could use a command like ", (helpcmd) "jeeves, get my umbrella", " or ", (helpcmd) "ensign rosen, stop the ship", ". (Naturally, not everyone will be willing to obey your commands!)^"; ]; HelpClass HTTalk with name 'talk', name_wd 'to', parse_name HelpParseNameOptWords, description [; helpformat("talk to", 4); print ": Begin a conversation.^"; print "^This command indicates that you want to talk, without specifying a topic. The game may choose an inoffensive opening gambit, or it may present you with a menu of choices to talk about.^"; ]; HelpClass HTAsk with name 'ask', name_wd 'about' 'for', parse_name HelpParseNameOptWords, description [; helpformat("ask", 4, "about", 5); print ": Inquire about a topic.^"; helpformat("ask", 4, "for", 1); print ": Request a gift.^"; print "^Not all games incorporate the ", (helpcmd) "ask about", " command, but if it works, you will want to use it often. The topic can be anything you've seen, heard, or read about in the game -- anything the character might know about. You can gather a lot of information this way.^^"; print "The ", (helpcmd) "ask for", " command is different. You would use this to request a particular object which the other person is holding. (Another way to phrase this is ", (helpcmd) "person, give object to me", ".)^"; ]; HelpClass HTTell with name 'tell', name_wd 'about', parse_name HelpParseNameOptWords, description [; helpformat("tell", 4, "about", 5); print ": Impart information about a topic.^"; print "^This command lets you offer information about a topic to another character. Obviously, it should be a topic that person cares about -- something he does not know, but would want to learn. If you go around telling random things to arbitrary people, they likely won't care.^"; ]; HelpClass HTSay with name 'say' 'hello', name_wd 'to', parse_name HelpParseNameOptWords, description [; helpformat("say", 6); print " or "; helpformat("say", 6, "to", 4); print ": Say a particular word.^"; print "^This command allows you to say a specific word. You can greet someone by saying ~hello~; you can answer questions with ~yes~ or ~no~. This command is also handy for passwords, magic words, voice-activated code words, and other such speech acts.^"; ]; HelpClass HTGive with name 'give', name_wd 'to', parse_name HelpParseNameOptWords, description [; helpformat("give", 1, "to", 4); print ": Offer a gift to someone.^"; print "^This simply hands an object -- something you're holding -- over to someone else. The recipient may be delighted, disgusted, or apathetic.^^"; print "(If you want to display something, without necessarily giving it away, use the ", (helpcmd) "show", " command.)^"; ]; HelpClass HTShow with name 'show', name_wd 'to', parse_name HelpParseNameOptWords, description [; helpformat("show", 1, "to", 4); print ": Display a possession to someone.^"; print "^This lets you show off something you're holding. You're not necessarily handing it over. (Use the ", (helpcmd) "give", " command to do that.)^"; ]; HelpClass HTStrategy with name 'strategy' 'playing', description [; print "Every text adventure is different. But here are some simple ideas which will help you in nearly any game.^^"; print "* Examine everything. (Type ", (helptopic) "examine", " for more on this command.) Even if there are many things in the room, try to examine each one, at least once. Be systematic.^^"; print "* Notice which objects the game is focussing your attention on, and which seem to be background or scenery. (If it looks like the most important thing in the room, it probably is. If the game says it's not important, it probably isn't.)^^"; print "* Try to interact with things. Use common sense. If you see a button, push it. If you find a flute, play it. And ", (helpcmd) "take", " anything that you can possibly lift.^^"; print "* If you try a command on an object, and you get a distinctive response, your ears should perk up. It means you're on the right track. Maybe you have to try a related command, or change something else in the environment, or bring a second object in somehow. Maybe you won't be able to complete the action until later in the game. But it's important.^^"; print "* Notice when the game is leading you towards a specific command. If the game says ~You could probably bend the bars,~ then ", (helpcmd) "bend bars", " is worth trying.^^"; print "* Pay attention to common elements. If you find rubies and emeralds, look for red and green places to sell, put, or drop them. If a machine is made of brass, look for a brass part to add to it. If a door is barred by shimmering silver light, look for anything that magically glows with a similar light.^^"; print "* When you find something which moves by itself, hang out and watch it for a while. You may need to understand its entire range of movement.^^"; print "And remember, the game world is a ", (emph) "world", ". It has its own logic -- whimsy or dream logic perhaps, but still sense. Find the game's time and reason, and follow it. You will find a way through.^"; ]; HelpClass HTUse with name 'use', description [; print "There is no ~use~ command in most text adventures. (If there was, what would be the point in providing any other commands?) Instead, try a command which is appropriate to whatever you're doing. If you have a key, try ", (helpcmd) "unlock", " something. If you have a book, try to ", (helpcmd) "read", " it. If you find a lever, try to ", (helpcmd) "pull", " or ", (helpcmd) "push", " it.^^"; print "If you have no idea what to try, start with ", (helpcmd) "examine", ". Then ", (helpcmd) "feel", ", and perhaps ", (helpcmd) "listen to", " or ", (helpcmd) "smell", " it. If that doesn't give you any leads, it can't hurt to ", (helpcmd) "push", ", ", (helpcmd) "pull", ", or ", (helpcmd) "move", " it. Well -- it might hurt. But probably not too much.^"; ]; HelpClass HTHints with name 'hint' 'hints' 'puzzle' 'game' 'me', description [ ix; if (ImpossibleMode) "Hints are not available in Impossible mode! (What do you think ~impossible~ means, anyway?)"; if (ExpertMode) "Hints are not available in Expert mode!"; if (self hasnt general) { give self general; "Asking for a hint?^^", (string) Story, " has an extensive hint system, which covers all the puzzles in the main storyline. (There are quite a few discoveries which are left for you to make on your own! But those are all optional. You can get hints on everything which you need to reach the end of the game.)^^ If you type ", (helptopic) "hint", " again, you will get a hint on your current situation. You can use this command anywhere in the game. If there's an unsolved puzzle nearby, the hint will address it; if not, you'll be given general guidance.^^ But remember, hints always spoil the fun -- at least a little bit. You might be able to work it out yourself if you keep trying. Only type ", (helptopic) "hint", " if you really think you're stuck."; } style underline; global_italic = true; print "["; ix = ContextualHint(); print "]"; style roman; global_italic = false; new_line; if (ix > 1) { print "^Type ", (helptopic) "hint", " again for"; switch (ix) { 2: print " a more specific hint on this puzzle"; 3: print " an additional hint"; } print ".^"; } ], has ~general;