Section - Passwords
The tree-password is indexed text that varies. The tree-password is "not.hing". The rebel-password is indexed text that varies. The rebel-password is "noth.ing". The machinery-password is indexed text that varies. The machinery-password is "no.thing". To decide whether tree-password is set: if tree-password is not "not.hing", decide yes; decide no. To decide whether rebel-password is set: if rebel-password is not "noth.ing", decide yes; decide no. To decide whether tree-password is unset: if tree-password is set, decide no; decide yes. To decide whether rebel-password is unset: if rebel-password is set, decide no; decide yes.
Defining a password is an action applying to one thing and one topic. Understand "setkey [any thing] [text]" as defining a password.
Rule for asking which do you mean while defining a password: do nothing; now disambiguation_flag is true. [ If we type a word that matches an object, the parser tries to disambiguate.]
Passwords is a thing. [ For debugging. ]
To decide whether (passage - an indexed text) is blank:
if passage matches the text "no.thing", decide yes; decide no.
To decide whether (passage - an indexed text) is not blank: if passage is blank, decide no; decide yes.
[ Check defining a password:
if not valid player password, do nothing instead.]
To decide whether (trial - indexed text) is an invalid password:
if passwords is being debugged, say "// Passwords: deciding whether [trial] is an invalid password.";
if a meta command matches trial, decide yes;
if the number of characters in trial is less than 2 begin;
speak as the parser "The word you choose must be more than 1 character.";
decide yes;
otherwise if the number of characters in trial is greater than 15;
speak as the parser "The word you choose must have no more than 15 characters.";
decide yes;
otherwise if the number of words in trial is greater than 1;
speak as the parser "You must choose a single word.";
decide yes;
otherwise if final release mode is false and trial exactly matches the text "tree";
speak as the parser "{Since TREE is a testing command, you can't use that as a password in the beta.}";
decide yes;
end if;
decide no.
To decide whether a meta command matches (trial - indexed text) :
if trial exactly matches the text "undo" or trial exactly matches the text "save" or trial exactly matches the text "restore" or trial exactly matches the text "oops" or trial exactly matches the text "quit" or trial exactly matches the text "restart":
decide yes;
decide no.
[ A procedural rule when defining a password: ignore the basic accessibility rule. ]
[AAR4]The my-basic-accessibility rule is listed instead of The basic accessibility rule in the action-processing rulebook. This is the my-basic-accessibility rule: if not defining a password and not discussing and not exhausting and not remembering and not examining by name, abide by the basic accessibility rule.
tree1pw is a thing. verjpw is a thing. machpw is a thing.
Carry out defining a password:
if passwords is being debugged, say "// Passwords: Carry out defining a password for [noun].";
if noun is tree1pw begin;
change the tree-password to the topic understood;
rule succeeds;
otherwise if noun is Verjpw;
change the rebel-password to the topic understood;
rule succeeds;
otherwise if noun is machpw;
change the machinery-password to the topic understood;
rule succeeds;
otherwise;
if passwords is being debugged, say "// Passwords: ERROR: invalid password destination specified.";
end if.
[ Testers often tried to type their passwords in different contexts, such as the Echo Chamber or while calibrating the seiver, so we go to some lengths to understand the passwords typed alone or after "say." ]
First smarter parser rule (this is the understand passwords rule):
if input contains the tree-password or input contains the rebel-password:
now the rejected command is "try#pw";
rule succeeds.
Password-trying is an action applying to nothing. Understand "try#pw" as password-trying.
Check password-trying:
if location is Echo Chamber, say "You say the word and it echoes and distorts weirdly through the cave, the strange formations twisting the syllables around into different orders and shapes, but as the sounds slowly die away nothing further seems to happen." instead.
Carry out password-trying:
say "You speak the word aloud, but nothing happens.".
The Smarter Parser trying harder to understand rule is not listed in any rulebook. Before printing a parser error (this is the Blue Lacuna trying harder to understand rule):
now the original rejected command is the player's command;
now the rejected command is the player's command;
follow the Smarter Parser rules;
if the rule succeeded:
if rejected command is not original rejected command:
unless rejected command is "try#pw", follow the announcing new command rule;
now sp reparse flag is true;
otherwise if the rule failed:
now suppress parser error is true.