!       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;
];

Verb meta "Help" "Hint" "hints" "clues"  "clue"
                                * "off"                         ->HelpOff
                                *                               ->Help;   
