!
! A demonstration set of hints for balances.
!
! The hints are ready for AdHints 0.9x BALANCES Release 3.
!
! Last updated: February 13, 1996
!

! A couple of notes:
!
!     The short_name property is used when displaying the hint for
!     technical reasons.
!
!     All puzzles (here) have the machine name "h" so that the puzzles
!     aren't immediately visible from infodump.  Not to mention that it
!     makes for easier typing :-)
!
!     general makes a hint available, solved indicates that it has been
!     solved.
!
!     Individual hints are progressively more explicit, but the overall
!     pattern is to stop hand-holding about halfway through the game.
!     This is probably a Good Thing, and many games seem to agree that
!     this is the Way to Go.
!
!     Problems are all mine.  None are Graham Nelson's fault  :-)
!

Object  Cottage_Puzzle "h" Hints
has    general
class  HintClass
with   short_name "What to do in the cottage",
       the_hints "Maybe you should look around some."
                 "Perhaps you should even try looking at objects in the room."
                 "In fact, the furniture might be a good place to start \
                  looking.",
       hint_check [;
           if (h_box has moved) give self solved;
       ];

Object  Box_Puzzle "h" Hints
class  HintClass
with   short_name "How to open the box",
       the_hints "Hmmm, I wonder if there isn't a useful ability to unlock \
                  things."
                 "Of course, you might try looking at your spellbook."
                 "(The next hint is explicit)"
                 "Maybe the REZROV spell would be useful.",
       hint_check [;
           if (h_box has moved) give self general;
           if (h_box hasnt locked) give self solved;
       ];

Object  Horse_Puzzle "h" Hints
class  HintClass
with   short_name "Riding the horse",
       the_hints "Yes, the horse is useful."
                 "Of course, he'd be more useful if he could take you north."
                 "But then he'd have to travel fast and far."
                 "Perhaps he can?"
                 "Maybe there's even a spell which can help!"
                 "But it's not in your spellbook!"
                 "Yet."
                 "Maybe if you poke around, you can find it!"
                 "(The next hint is explicit)"
                 "Look at the oats to get the BOZBAR spell.",
       hint_check [;
           if (Valley has visited) give self general;
           if (horse has general) give self solved;
       ];

Object  Snake_Puzzle "h" Hints
class  HintClass
with   short_name "What to do about the snake",
       the_hints "Boy, he looks ferocious!"
                 "Maybe there's a way to make him less ferocious."
                 "Perhaps it would be worth one's while to find another \
                  spell.",
       hint_check [;
           if (Edge has visited) give self general;
           if (snake in nothing) give self solved;
       ];

Object  Tortoise_Puzzle "h" Hints
class  HintClass
with   short_name "What to do with the tortoise",
       the_hints "He sure looks harmless."
                 "And slow."
                 "I wonder if there's anywhere he'd like to go?"
                 "Maybe if one could read his mind, one could find out."
                 "(The next hint is explicit)"
                 "In fact, if you use YOMIN on him, you might learn what \
                  interests him most."
                 "(The next hint gives it all away)"
                 "Try casting BOZBAR on him.",
       hint_check [;
           if (Up_Road has visited) give self general;
           if (tortoise in nothing) give self solved;
       ];

Object  Grubby_Puzzle "h" Hints
class  HintClass
with   short_name "What to do with the grubby scroll",
       the_hints "Sure looks torn and tattered."
                 "Maybe it can be mended!"
                 "If you wandered around, you might be able to find something \
                  that might help."
                 "(The next hint is explicit)"
                 "Learn the CASKLY spell.",
       hint_check [;
           if (tortoise in nothing) give self general;
           if (torn_scroll has moved) give self solved;
       ];

Object  Sapphire_Puzzle "h" Hints
class  HintClass
with   short_name "What to do about the sapphire",
       the_hints "That's a pretty sapphire."
                 "Really pretty."
                 "Maybe you ought to try looking at it.",
       hint_check [;
           if (Cave_Mouth has visited) give self general;
           if (sapphire in nothing) give self solved;
       ];

Object  Door_Puzzle "h" Hints
class  HintClass
with   short_name "How to go through the door",
       the_hints "You've seen a locked door before!"
                 "It was on the box"
                 "So just do the same thing again."
                 "(The next hint is explicit)"
                 "Try REZROV on the door.",
       hint_check [;
           if (Cave_Mouth has visited) give self general;
           if (Iron_Door hasnt locked) give self solved;
       ];

Object  Balances_Puzzle "h" Hints
class  HintClass
with   short_name "How to get the scroll in the cave",
       the_hints "If you take the scroll, the balances rise."
                 "If the balances aren't level, you can't leave."
                 "If the balances are too light, you can't leave."
                 "You really need that scroll."
                 "Maybe there's a useless item you can put in place \
                 of the scroll?"
                 "(The next hint is explicit)"
                 "There's a feather that's about the right weight...",
       hint_check [;
           if (In_Cave has visited) give self general;
           if (feather in left_pan) give self solved;
       ];

! Note that the first hints are very detailed, and they have been losing
! detail.  This is probably a good pattern to follow!  The remainder of
! the hints have no explicit spoilers.

Object  Carpet_Puzzle "h" Hints
class  HintClass
with   short_name "What to do with the carpet",
       the_hints "Wow, what a pretty carpet."
                 "Maybe the design on it is of some significance?"
                 "(The next hint is explicit)"
                 "It flies, if you use it right.",
       hint_check [;
           if (Footpath has visited) give self general;
           if (Bazaar has visited) give self solved;
       ];

Object  Bazaar_Puzzle "h" Hints
class  HintClass
with   short_name "What to do in the bazaar",
       the_hints "The barker has a featureless cube!"
                 "And you need it."
                 "So maybe you'd better play his game."
                 "But it's a hard lottery!"
                 "Cheating some would help.",
       hint_check [;
           if (Bazaar has visited) give self general;
! Note that pcube is removed when the barker_cube is given to the
! player.  This could also be 'if (barker_cube has moved)'
           if (parent(pcube)==nothing) give self solved;
       ];

Object  Last_Cube_Puzzle "h" Hints
class  HintClass
with   short_name "How to get the final cube",
       the_hints "You need to bring several elements together."
                 "One is the pink elephant."
                 "One is a spell in Helistar's grimoire."
                 "And the final is a spell recently learned.",
       hint_check [;
! The original hint_check checked to see if the three cubes were in the
! player, but that's sort of dumb and misses the case of the cubes being
! gathered but dropped somewhere and never held at the same time.  This
! is more general.
           if (snakes_cube has moved &&
               cave_cube has moved &&
               barker_cube has moved) give self general;
           if (parent(cyclops)~=nothing) give self solved;
       ];

Object  Cyclops_Puzzle "h" Hints
class  HintClass
with   short_name "How to defeat the cyclops",
       the_hints "Wow, what a dangerous fellow!"
                 "More precisely, he isn't the real danger."
                 "What he uses to smash you is the REAL danger.",
       hint_check [;
! as soon as the cyclops appears, no matter where, it shows up!
           if (parent(cyclops)~=nothing) give self general;
           if (mace in nothing) give self solved;
       ];

Object  Temple_Puzzle "h" Hints
class  HintClass
with   short_name "How to enter the temple",
       the_hints "You should have all the cubes first!"
                 "Maybe a really careful sensory exploration of the temple \
                 can help."
                 "And there's a spell that helps."
                 "Which will, in turn, lead to another spell to get you in.",
       hint_check [;
           if (Track has visited) give self general;
           if (Balance_Room has visited) give self solved;
       ];

Object  Podium_Puzzle "h" Hints
class  HintClass
with   short_name "What to do with the podium",
       the_hints "The podium is very important, that's obvious"
                 "But it's such a mess!"
                 "This place could really use a cleaning.",
       hint_check [;
           if (Balance_Room has visited) give self general;
           if (dusty_podium in nothing) give self solved;
       ];

Object  Final_Puzzle "h" Hints
class  HintClass
with   short_name "The last thing to do.....",
       the_hints "The podium has some neat sockets."
                 "Do something with them."
                 "Sorry, that's all the help you're going to get!",
       hint_check [;
           if (dusty_podium in nothing) give self general;
! The hints can't be looked at after this puzzle is solved, so there is
! no reason to mark it when solved.
!
! If one wishes to hook the HINTS in as the amusing function, then it
! might not hurt to arrange for it, perhaps like so:
!           if (deadflag==2) give self solved;
       ];