Chapter 3 - "Novice Mode"
Section 1 - Training Wheels
[It has been observed that very untrained players, confronting a game for the first time, have some difficulty understanding how to communicate with the game, and in particular what sorts of interaction are expected of them. This novice mode provides two kinds of help: one, it highlights the names of everything interesting in room descriptions, to draw attention to useful nouns; and two, it lists commands that the player might want to try, based on what is currently available in the room. This functionality can be turned off at any time through the command line or the menu.]
After printing the banner text:
if novice mode is unset
begin;
say "[line break]Have you played interactive fiction before? >";
if the player consents
begin;
now novice mode is dead;
say "[line break]If you have not played Bronze before, you may still want to type HELP to learn about special commands unique to this game."; [1]
otherwise;
now novice mode is functioning;
say "[line break]Some extra command help is provided, though you may turn it off at any time.";
end if;
end if.
Setting is a kind of value. The settings are unset, functioning and dead.
Novice mode is a setting that varies. Novice mode is unset. Stopping novice mode is an action out of world. Starting novice mode is an action out of world. Understand "novice mode off" as stopping novice mode. Understand "novice off" as stopping novice mode. Understand "novice mode on" as starting novice mode. Understand "novice on" as starting novice mode. Carry out stopping novice mode: now novice mode is dead. Carry out starting novice mode: now novice mode is functioning. Report stopping novice mode: say "Novice mode is now off. You may still consult HELP at any time, or use THINK ABOUT specific puzzles." Report starting novice mode: say "Novice mode is now on."
Include Complex Listing by Emily Short. [2]
Before reading a command when novice mode is functioning:
say "[line break]Some options to try (to play without guidance, type [bold type]novice mode off[roman type]): ";
if not looking and not going, say "[line break] [bold type]look[roman type]";
if the player wears the helmet, say "[line break] [bold type]listen[roman type]";
if the player carries something and we are not taking inventory, say "[line break] [bold type]inventory[roman type] (I)";
if the player carries something and a free-standing supporter is relevant
begin;
prepare a list of free-standing relevant supporters;
say "[line break] [bold type]put[roman type] something [bold type]on[roman type] [the prepared list delimited in disjunctive style]";
end if;
if a gettable thing is relevant
begin;
prepare a list of relevant gettable things;
say "[line break] [bold type]take[roman type] [the prepared list delimited in disjunctive style]";
end if;
if an unexamined thing is relevant
begin;
prepare a list of relevant unexamined things;
say "[line break] [bold type]examine[roman type] (X) [the prepared list delimited in disjunctive style]";
end if;
if a relevant thing is worth entering
begin;
prepare a list of relevant worth entering things;
say "[line break] [bold type]enter[roman type] [the prepared list delimited in disjunctive style]";
end if;
if an unlocked openable thing is relevant
begin;
prepare a list of relevant worth entering things;
say "[line break] [bold type]open[roman type] or [bold type]close[roman type] [the prepared list delimited in disjunctive style]";
end if;
if a closed lockable thing is relevant
begin;
prepare a list of closed lockable relevant things;
say "[line break] [bold type]lock[roman type] or [bold type]unlock[roman type] [the prepared list delimited in disjunctive style]";
end if;
if the player carries an edible relevant thing
begin;
prepare a list of edible relevant things;
say "[line break] [bold type]eat[roman type] [the prepared list delimited in disjunctive style]";
end if;
if the player carries a wear-worthy thing
begin;
prepare a list of the wear-worthy things carried by the player;
say "[line break] [bold type]wear[roman type] [the prepared list delimited in disjunctive style]";
end if;
if a device is relevant, say "[line break] [bold type]turn on[roman type] or [bold type]turn off[roman type] [the list of relevant devices]";
if a room is adjacent, say "[line break] [bold type]go[roman type][exit list][if in darkness] or try other directions in the dark[otherwise] or [bold type]go to[roman type] any room you've visited[end if]";
if an open door is relevant
begin;
prepare a list of the relevant open doors;
say "[line break] [bold type]go through[roman type] [the prepared list delimited in disjunctive style]";
end if;
if another person is relevant, say "[line break] [bold type]kiss[roman type] or [bold type]wake[roman type] [the list of relevant other people][if the player carries something], or [bold type]give[roman type] things [bold type]to[roman type] him[end if]";
if the cord is relevant, say "[line break] [bold type]pull[roman type] [the cord]";
if the player carries a ringer
begin;
prepare a list of the ringers carried by the player;
say "[line break] [bold type]ring[roman type] [the prepared list delimited in disjunctive style]";
end if;
if the player is in an active room and the inscription is examined, say "[line break] [bold type]wait[roman type] (Z)";
if the fountain is relevant, say "[line break] [bold type]fill[roman type] a container";
if the player can see the contract book and the contract book is examined and the player is in the Translation Room and the candle is visible, say "[line break] [bold type]look up[roman type] someone [bold type]in[roman type] the contract book";
say "[line break] [bold type]think about[roman type] a specific room or object to get a clue";
say "[line break] [bold type]help[roman type] to see a more complete set of instructions";
say "[paragraph break]";
Definition: a thing is wear-worthy if it is not the shackle and it is wearable and it is relevant.
Definition: a person is other if it is not the player. Definition: a person is another if it is other.
Definition: a thing is free-standing if it is in a room.
After taking inventory when novice mode is functioning:
if the player is carrying something
begin;
say "To get rid of any of these objects, [bold type]drop[roman type] it, or [bold type]take off[roman type] anything you are wearing.";
otherwise;
if the player is wearing something, say "You can always [bold type]take off[roman type] anything you are wearing.";
otherwise say "To acquire an inventory, [bold type]take[roman type] such portable objects as you find lying around.";
end if.
Before printing the name of something (called the target): if novice mode is functioning, say "[bold type]". After printing the name of something: say "[roman type]".
To say exit list:
let place be location;
let count be 0;
repeat with way running through directions
begin;
let place be the room way from the location;
if place is a discernible room, now way is marked for special listing;
end repeat;
register things marked for listing;
say " [a prepared list delimited in disjunctive style]".
Definition: a thing is gettable:
if it is scenery, no;
if it is fixed in place, no;
if it is a person, no;
if the player is carrying it, no;
if the player is wearing it, no;
if the player can touch it, yes;
no.
Definition: a thing is relevant if it is visible and it is seen.
Definition: a supporter is worth entering:
if the player carries it, no;
if it is enterable, yes.
Definition: a container is worth entering:
if the player carries it, no;
if it is enterable and it is open, yes.
Notes
[1]. These remarks added because beta-testers thought it was a little unfriendly to have the game not acknowledge the player's response to this question. Originally we said nothing, but went straight into play.
[2]. This allows us to list things with inserted 'or' rather than 'and' (and also to do a number of considerably more challenging things, but we won't need most of them right away).