! $Id: howtoplay.h,v 1.3 2017/10/24 13:36:34 michael Exp $
! ----------------------------------------------------------------------------
! howtoplay.h for Inform 6, by Michael J. Coyne
! How to Play text Copyright 2003 Fredrik Ramsberg
!
! ----------------------------------------------------------------------------
! Installation: add the lines:
!
! Include "Menus"; ! optional
! Include "Howtoplay";
!
! anywhere in your game AFTER the Include "VerbLib"; directive
!
! ----------------------------------------------------------------------------
! Based on the structure of Roger Firth's ccpl.h
!
! Implements a HELP verb which uses Menus.h (or any compatible menu
! package) to display a menu of Fredrik Ramsberg's "How to Play"
! instructions from "A Beginner's Guide to Playing Interactive Fiction".
! Fredrik's full text can be found at:
!
http://IFGuide.ramsberg.net
!
! Define NO_HOWTO_GRAMMAR to prevent the Help verb from being included. You
! will then have to provide an alternate means of running HowToMenu.select()
!
! If you are not using Menus, then HowToMenu.select will just dump the
! text to the screen.
!
! If you wish to include this in an existing menu in your game instead of
! just having it available through the help verb, you can do this:
!
! Menu MyMenu "My Menu Object"
! with description "Please select one of the following items.^",
! number 2;
!
! Option -> "How to Play"
! with description [;
! howtoplay.description();
! ];
!
! $Log: howtoplay.h,v $
! Revision 1.3 2017/10/24 13:36:34 michael
! Make it work properly with DMenus as found on IF Archive.
!
! Revision 1.2 2003/05/24 13:36:34 michael
! Removed DOS carriage-returns introduced by opening on DOS machine.
!
! Revision 1.1 2003/05/24 13:32:44 michael
! Initial revision.
!
! ---------------------------------------------------------------------------- !
system_file;
#ifndef MENU;
Class Menu with select [;
howtoplay.description();
];
#endif;
#ifndef OPTION;
Class Option;
#endif;
[ bf text; style bold; print (string) text; style roman; ];
Menu HowToMenu
with short_name [;
print "How to Play ", (string) Story;
rtrue;
];
Option -> howtoplay
with short_name [;
print "How to Play ", (string) Story;
rtrue;
],
description [;
print "These general instructions are an excerpt from:
~A Beginner's Guide to Playing Interactive Fiction~.
The full text can be found at
http://IFGuide.ramsberg.net",
(bf) "^^The game starts";
print "
^When you start a game, you will first see an introduction, usually
consisting of one or a few screenfuls of text, giving you some
background on who you are, where you are, and perhaps even what your
objectives in the game are. Whenever the game has printed a
screenful of text, it will wait until you press ENTER or some other
key, so that you get a chance to read everything before it scrolls
off the top of the screen.^",
(bf) "^How to interact";
print "
^When the introduction is over, you will get a prompt, usually ~>~,
but it may be a little different from game to game. The prompt means
that the game is now waiting for you to tell it what you want to do.
You do this by typing in imperative commands, as if you were
commanding someone. Let's say the introduction told you that you are
in a kitchen, and that you can see a closed glass jar standing on
the kitchen counter. Commands you could try at this point include
TAKE THE JAR, or OPEN THE JAR, or perhaps EXAMINE THE JAR
(Throughout this document, things that are written in capital
letters are complete commands that can be typed into an IF game.
They don't have to be typed in capital letters when entered into a
game). If you want to, you can skip the articles: TAKE JAR will work
just at well as TAKE THE JAR. If there are several different jars
you could mean, the game may ask you which one you mean. Just type
one or more words that uniquely identifies one of the items. For
instance, if the game says ~Which jar do you mean, the blue glass
jar or the green glass jar?~, you might reply BLUE to take the blue
one. You can also choose to ignore the question altogether, just
typing a new command.^",
(bf) "^Movement";
print "
^To go to another location, most games expect you to type in which
direction you want to go. You can type GO SOUTH, but just SOUTH will
also do the trick, as will S (which is the commonly accepted
abbreviation for SOUTH). Other directions and their abbreviations
are NORTH (N), EAST (E), WEST (W), NORTHEAST (NE), SOUTHEAST (SE),
NORTHWEST (NW), SOUTHWEST (SW), UP (U), DOWN (D), IN and OUT. If you
are aboard a ship of some kind you may also be able to use FORE,
AFT, STARBOARD and PORT.^
^Other ways to move around may include commands like ENTER CAR, GO
CAR, SIT ON MOTORCYCLE, GET ON BIKE, CLIMB ONTO SHIP, JUMP ONTO
PLATFORM, DIVE INTO LAKE, BOARD SHIP, EXIT CAR, EXIT, LEAVE, GET
OUT. Exactly which commands are ";
#ifdef DIALECT_US;
print "recognized";
#ifnot;
print "recognised";
#endif;
print " vary from game to game as well as from situation to
situation in those games. When interacting with IF games, always
try to express yourself as simply as possible.
If you have tried several ways of expressing yourself and the game
refuses to understand what you want to do, you are most probably on
the wrong track; it's time to try something completely different.^",
(bf) "^Common verbs";
print "
^As you know by now, you can use the verb TAKE to pick up items in
the game. Of course, you can also use DROP to drop items. Most
modern games actually ";
#ifdef DIALECT_US;
print "recognize";
#ifnot;
print "recognise";
#endif;
print " a hundred different verbs or more. With some of the most
used verbs, you can also use multiple items, like this: TAKE GREEN
BALL AND SCREWDRIVER or DROP ALL or PUT ALL BUT HAMMER IN BAG.
You'll find that ALL is often a very useful word, although it only
works with certain verbs, most notably TAKE and
DROP. Here are some of most important verbs, with examples:^";
font off;
print "^
LOOK or L L or LOOK AT BOB or LOOK IN JAR or LOOK UNDER BED^
TAKE TAKE KNIFE^
DROP DROP KNIFE^
EXAMINE or X EXAMINE KNIFE or X KNIFE^
SEARCH SEARCH DESK^
INVENTORY or I I^
OPEN OPEN DRAWER^
CLOSE CLOSE DRAWER^
LOCK LOCK DOOR WITH RUSTY KEY^
UNLOCK UNLOCK DOOR WITH RUSTY KEY^
ASK ASK JOHN ABOUT POLICE OFFICER^
TELL TELL JOHN ABOUT MURDER^
SAY SAY HELLO TO JOHN^
GIVE GIVE RABBIT TO BOB^
SHOW SHOW KNIFE TO POLICE OFFICER^
WAIT or Z Z^
AGAIN or G G^";
font on;
print "^Other verbs you will need from time to time include ATTACK,
BUY, COVER, DRINK, EAT, FILL, JUMP, KISS, KNOCK, LISTEN, MOVE, PULL,
PUSH, REMOVE, READ, SIT, SLEEP, STAND, THROW, TIE, TOUCH, TURN,
TYPE, UNTIE, WEAR. There are lots more. Hopefully they will seem
natural to you when you need them.^",
(bf) "^How time works";
print "
^Almost all IF games count time in turns, rather than hours and
minutes. Every time you type something and press ENTER, one turn
passes. This also means that until you press ENTER, no time passes.
You could think of a turn as being something like a minute, but how
long it actually is depends on what you do during that turn. If you
want time to pass, but don't want to perform any actions, just type
WAIT or Z. This will prove useful while waiting for someone to
arrive or something to get ready in the oven etc (in the game world,
not in the real world!).^
^There are games that use real-time instead of turn-based play, but
they are few and far between, and they will tell you about their
real-time system at the beginning of the game.^",
(bf) "^Talking to people";
print "
^The most useful ways of talking to people usually involve the verbs
ASK and TELL. When using them, try to pin down the best keyword for
what you are interested in, rather than longer constructs. For
example, TELL BOB ABOUT HOW I SAW SHEILA GIVE A STRANGE AMULET TO
ANOTHER WOMAN is not likely to yield any useful results, but TELL
BOB ABOUT AMULET or perhaps TELL BOB ABOUT SHEILA may indeed be
useful. In other words, you tell the game the subject you want to
talk about or ask about, not exactly what to say. The game will try
to make reasonable assumptions on what you want to say regarding the
subject.^";
print "^Also note that many games are quite primitive when it comes
to modelling people. The author has to put in an enormous amount of
work to make people in the game behave realistically and respond
well to conversation. In general, don't expect too much from people
in the game, but there are of course games that shine in this area
too. You'll also see that some authors prefer menu-based
conversation, to facilitate interaction.^
^To tell someone else to do something, type the name of the person,
a comma, and then a command. Example: BOB, BREAK THE JAR. Just like
in real life, most people won't automatically do something just
because you tell them to. If you think Bob knows what to do with the
jar, you can also try GIVE JAR TO BOB or SHOW JAR TO BOB.^",
(bf) "^Special verbs";
print "^All games ";
#ifdef DIALECT_US;
print "recognize";
#ifnot;
print "recognise";
#endif;
print " some verbs that don't do anything in the game world, but
tells the game something about how you want it to behave,
or some special task you want it to peform. These verbs include:^";
font off;
print "^
UNDO Takes back the last move you made.^
QUIT or Q Ends the current game.^
RESTART Starts the game over from the beginning.^
SAVE Saves your current position to a file on disk.^
RESTORE Loads a previously saved game position.^
HELP or ABOUT Shows some information about the game and its
author, in some cases even hints to some of the
puzzles.^
VERBOSE Tells the game you want a long description of every
room you enter, even if you've been there before.^
BRIEF Tells the game you want a long description the first
time you enter a room, and a short description when
you come back. This is the default mode.^
SUPERBRIEF Tells the game you always want short descriptions of
all rooms.^";
font on;
print (bf) "^Getting stuck and unstuck";
print "
^While playing IF, you will get stuck. This is part of the deal --
where there are puzzles, there will also be stuckness. If you grow
tired of being stuck in the same spot for too long, you can either
type HELP in the game to see if there are any hints available, or
you can ask other players for hints. A good place to ask for hints
is the newsgroup rec.games.int-fiction (can be reached at
http://groups.google.com/groups?group=rec.games.int-fiction ).
That's also one of the best
places to meet other IF players, discuss games you've played, get
tips on games you should play and more.^
^Oh, one last thing about playing interactive fiction. Make a map as
you play. You are very likely to need it.";
];
#Ifdef dmenus_h;
[ HowToSub; ShowMenu(HowToMenu); ];
#Ifnot dmenus_h;
[ HowToSub; HowToMenu.select(); ];
#Endif;
#IFNDEF NO_HOWTO_GRAMMAR;
Verb meta 'help' 'howto' 'instructions'
* -> HowTo;
#ENDIF;
! ---------------------------------------------------------------------------- !