[ ContextualHint val obj; SuppressHintNext(6); if (location provides hinto) { obj = location.hinto; if (obj == nothing) obj = NoHintProxy; switch (metaclass(obj)) { String: val = 1; print (string) obj; Routine: val = obj(); Object: if (obj provides hint_suppress && obj.hint_suppress()) val = 0; else val = PrintOrRun(obj, description); default: print "[BUG] unknown hinto reference"; } if (val) return val; } ! sorry... if (GuideOfferHintProxy.initial == HintoTelescope) { if (HintoTelescope.hint_suppress()) val = 0; else val = PrintOrRun(HintoTelescope, description); if (val) return val; } if (Hall3 hasnt visited) { val = HintoBeginning(); if (val) return val; } if (MaskNumSeen < 7) { val = HintoSearching.description(); if (val) return val; } if (MaskNumGotten < 7) { val = HintoFinding.description(); if (val) return val; } if (~~Enlightened) { val = HintoUsing.description(); if (val) return val; } if (~~FlaskIsInk()) { val = HintoLab.description(); if (val) return val; } print "Now that you have the pen, the ink, and the knowledge of what to draw, it is time to complete the task you began with."; ]; [ NoHintProxy; rfalse; ]; [ OfferHint obj thres; thres = 1; if (metaclass(obj) == Object) { if (obj provides hint_suppress && obj.hint_suppress()) return; if (obj provides hint_threshold) thres = obj.hint_threshold; } if (GuideOfferHintProxy.initial ~= obj) { GuideOfferHintProxy.initial = obj; GuideOfferHintProxy.count = 0; GuideOfferHintProxy.number = thres; if (GuideOfferHintProxy.number > 0) { return; } } else { if (GuideOfferHintProxy.number > 0) { return; } GuideOfferHintProxy.count++; switch (GuideOfferHintProxy.count) { 1: GuideOfferHintProxy.number = 2; 2: GuideOfferHintProxy.number = 3; default: GuideOfferHintProxy.number = 4; } } GuideOfferHintProxy.hintmode = obj; GuideEnqueue(GuideOfferHintProxy); ]; [ SuppressHintNext turns; GuideOfferHintProxy.number = turns; ]; Object GuideOfferHintProxy with initial nothing, count 0, number 0, hintmode 0, description [ obj obj2; print "If you want a hint on "; obj = self.hintmode; switch (metaclass(obj)) { String: print (string) obj; Routine: obj(); Object: obj2 = obj.hint_name; if (obj2 ofclass MaskClass || obj2 ofclass DistantMaskClass) { print "getting ", (the) obj2; } else { PrintOrRun(obj, hint_name, 1); } default: print "[BUG] unknown hinto reference"; } print ", type ", (helpcmd) "help hint", "."; if (self hasnt general) { give self general; print "^^If you want the Tutorial Voice to stop popping up to offer hints, you can type ", (helpcmd) "tutorial off", ". The hints themselves will still be available via the ", (helpcmd) "help hint", " command."; } ], has ~general; Constant HintoArtifactArea "This part of the game is for you to explore on your own. It is optional; you do not need anything from here in order to win."; Object HintoSearching with count 0, description [ val; ! white, black, blue, gold all visible without puzzle-solving if (MaskNumSeen < 2) { print "There is a great deal to explore in this game, now that you've gotten past the sitting room door. Take a look around. You don't have to solve every puzzle you find the moment you find it; it's perfectly reasonable to come back later. In fact, some puzzles might not be solvable until later."; rtrue; } if (self.count & $1 == 0) { self.count = self.count | $1; print "You have now seen ", (EnglishNumber) MaskNumSeen, " different paper masks. It seems to be a theme. So keep exploring, and keep an eye out for more of them."; rtrue; } val = (Arboretum has visited) + (OrreryNorth has visited) + (CavePassage has visited) + (HarpRoom has visited) + (Atelier has visited) + (MosaicRoom has visited) + (Shed has visited) + (StellariumEast has visited); if (val < 5) { if (self.count & $2 == 0) { self.count = self.count | $2; print "Have you explored every archway off the Curving Hall? There are nine, counting the one that leads back to the Sitting Room."; rtrue; } print "Have you explored every archway off the Curving Hall? Keep in mind that the Curving Hall has four segments, each with two or three archways. If the layout is confusing you, it may help to sketch a map."; rtrue; } if (Garden hasnt visited) { if (Shed hasnt visited) { print "You've missed at least one room off the Curving Hallway."; rtrue; } if (self.count & $4 == 0) { self.count = self.count | $4; print "You never went all the way up the stairs from the Shed."; rtrue; } print "The Shed is adjacent to the south end of the Curving Hall. Yes, the stairs leading up from the Shed are long. But they do end in a few moves."; rtrue; } if (CatwalkSouth hasnt visited) { if (StellariumNorth hasnt visited && StellariumEast hasnt visited) { print "You've missed at least one room off the Curving Hallway."; rtrue; } if (Lighthouse hasnt visited && OrrerySouth hasnt visited) { print "You haven't explored the ladder leading up and down from the Dark Dome."; rtrue; } if (Lighthouse hasnt visited) { print "You haven't tried climbing the ladder that leads up from the Dark Dome."; rtrue; } print "You've explored the ladder that leads up from the Dark Dome to the Translucent Dome. But you may have missed the fact that it continues farther up from there."; rtrue; } if (HarpRoom hasnt visited) { print "You've missed at least one room off the Curving Hallway."; rtrue; } if (CentralCave hasnt visited) { if (CavePassage hasnt visited) { print "You've missed at least one room off the Curving Hallway."; rtrue; } if (Darkness hasnt visited && (self.count & $8 == 0)) { self.count = self.count | $8; print "You haven't fully explored the Natural Passage, which is north of the Curving Hall (at the pedestal)."; rtrue; } print "The Natural Passage leads north into darkness. You will need a light source if you want to explore there"; if (self.count & $10 == 0) { self.count = self.count | $10; print " -- which you certainly do."; } else { print ".^^If you want a hint about finding a light source, go to the Natural Passage and type ", (helpcmd) "help hint", "."; } rtrue; } if (self.count & $20 == 0) { self.count = self.count | $20; print "You've seen ", (EnglishNumber) MaskNumSeen, " masks so far. It's time to ", (emph) "thoroughly", " explore the game and make sure you've located all of them."; rtrue; } if (~~goldmask.witnessed) { if (location == Garden or GardenCenter or GardenWarm or GardenCool or GardenBalcony) print "Explore every path here in the Garden."; else print "Go up to the Garden and explore every path."; rtrue; } if (~~blackmask.witnessed) { if (location ofclass CatwalkClass) print "Explore all the way around the Catwalk."; else print "Go up to the Catwalk, above the Translucent Dome, and explore all the way around."; rtrue; } if (~~bluemask.witnessed) { print "Go take a look at the area below the Dark Dome. (You can also get there by going south from the West End of the Curving Hall.)"; rtrue; } if (~~brownmask.witnessed) { if (~~IndirectlyContains(Atelier, mountainpainting)) { print "Did you ever take a close look at the mountain landscape you found?"; rtrue; } if (Atelier hasnt visited) { if (location == Hall3) print "Explore northeast of this spot."; else print "Go to the Curving Hall -- where you first entered from the Sitting Room -- and explore northeast."; rtrue; } if (location ~= Atelier) { print "Go back to the Atelier (northeast of the Curving Hall) and investigate thoroughly."; rtrue; } print "Have you taken a close look at the mountain landscape?"; rtrue; } if (~~greenmask.witnessed) { if (self.count & $40 == 0) { self.count = self.count | $40; print "Have you thoroughly explored the dark cavern area?"; rtrue; } print "Explore west from the Vaulting Cavern."; rtrue; } if (~~redmask.witnessed) { if (CisternWest hasnt visited) { if (self.count & $40 == 0) { self.count = self.count | $40; print "Have you thoroughly explored the dark cavern area?"; rtrue; } print "Explore northeast from the Vaulting Cavern."; rtrue; } if (~~(location ofclass CisternRoom)) { print "Go back to the Cistern (northeast of the Vaulting Cavern) and investigate thoroughly."; rtrue; } print "Have you taken a close look at the catwalk above you?"; rtrue; } if (~~whitemask.witnessed) { if (self.count & $100 == 0) { self.count = self.count | $100; print "You walked past a mask right at the beginning of the game, without knowing it."; rtrue; } if (location ~= Study) { print "A mask is hidden in the Crowded Study."; rtrue; } print "A mask is hidden here. Investigate various things."; rtrue; } print "[BUG] Mask seen count is wrong."; rtrue; ]; Object HintoFinding with count 0, description [; if (~~goldmask.acquired) { print "You have not yet gotten the gold mask, which you saw at the Marble Balcony in the Garden."; rtrue; } if (~~bluemask.acquired) { print "You have not yet gotten the blue mask, which you saw in the Orrery, below the Dark Dome."; rtrue; } if (~~brownmask.acquired) { if (self.count & $1 == 0) { self.count = self.count | $1; print "You have not yet gotten the brown mask, which you saw in the mountain landscape painting"; if (mountainpainting in Atelier) print " in the Atelier"; print "."; rtrue; } print "If you want a hint about getting the brown mask, go to the Atelier and type ", (helpcmd) "help hint", "."; rtrue; } if (~~blackmask.acquired) { print "You have not yet gotten the black mask, which you saw at the north side of the Catwalk above the Translucent Dome."; rtrue; } if (~~greenmask.acquired) { print "You have not yet gotten the green mask, which you saw across the underground river, west of the Vaulting Cavern."; rtrue; } if (~~redmask.acquired) { print "You have not yet gotten the red mask, which you saw up on the catwalk in the Cistern, which is northeast of the Vaulting Cavern."; rtrue; } if (~~whitemask.acquired) { print "You have not yet gotten the white mask, which you found in the Crowded Study."; rtrue; } print "[BUG] Mask acquired count is wrong."; rtrue; ];