! HINTS Invisiclues-style Help menu
! "tool kit" fot Inform 5.5 or later by
! L. Ross Raszewski
!
! This file is not a hint generator, but it does provide some functions to
! help make a hint file. It performs the Infocom courtesy of offering the
! opertunity to disable the hints, and automatically displays hints that
! have already been read. This was tailored after some avid study of the
! invisiclues included with several Infocom games, and having made some
! changes for the sake of not needing to replace DoMenu.
! Before Inclusion, create an array Clues--> where Clues-->n is one less
! than the number of clues for the nth clue in your file.
! Create a function Main_Menu() to draw the first level of your hint system
! (using DoMenu, or such)
! Give your clue-giving functions three local variables (hint, cluesleft, flag)
! For each clue, have some code along the lines of: (n is the same as above, i
! is the literal value of Clues-->n. You'd use real numbers, but I won't)
!
! hint="The first hint";
! flag=1;
! for(cluesleft=i:GiveHint(n,hint,cluesleft,flag)==0:cluesleft--)
! { flag=0;
! switch(cluesleft)
! {i: hint="The second hint to be revealed";
! i-1: hint="and so on down to";
! 1: hint="The Last Clue";
! };};Clues-->n=Clues-->n+1;
!
! Just insert a piece like this into your code and GiveHint will produce text
! like:
! (Press Q to quit, or any other key for another hint)
!
! The First hint (i left)
! Pressing any key other than q or escape will print
! The second hint to be revealed (i-1 left)
! down to
! The Last Clue
! [That's All, Folks]
!
! If you exit the hint menu and then return, all previously revealed hints
! will be displayed as well.
!
! Set Clues-->0 to an initial value of 0, as it's used for internal purposes.
! This can probably be integrated into an adaptive hint system, though I
! haven't tried it.
!
System_file;
[ HelpSub;
If (Clues-->0==0)
{print "[Warning: It is recognized that the temptation for help \
may at times be so exceedingly strong that you might fetch hints \
prematurely. Therefore, you may at any time during the story type \
HINTS OFF, and this will disallow the seeking out of help for the \
present session of the story. If you still want a hint now, indicate \
HINT.]";
Clues-->0=1;
rtrue;}
If (Clues-->0==2)
print_ret "Hints have been disabled.";
Main_Menu();
];
[ HelpOffSub;
print "HINTS disabled.";
Clues-->0=2;
rtrue;
];
[ GiveHint h hint Clues_left flag keypress;
if (flag==1) print "(Press Q to quit, any other key for another hint.)^^^^";
print (string) hint;
if (Clues_left ~= 0) {print " (", Clues_left, " hint";
if (Clues_left > 1) print "s";
print " left.)";};
if (Clues_left==0) print "^^[That's all, folks]";
new_line;
if (Clues_left~=Clues-->h) rfalse;
Clues-->h=Clues-->h-1;
@read_char 1 0 0 keypress;
if (keypress == 'Q' or 'q' or 27 || Clues_left==0) rtrue;
rfalse;
];