Author: Joyce Haslam Date: 1998/11/27 Forum: rec.arts.int-fiction I've been sitting selfishly on this letter from Graham Nelson for a year: > I need a class of rooms that are dimly lit so that "take all" does > not work. I can suppress "you can see" and "exits are", but I don't > know how to get at the parser. I don't mind the player being able > to "take all" in brightly lit rooms, and "the dark" is fine, but in > the class of rooms with the attribute "has dimness" I want > something like > "take book" > "OK" > "take all" > "What, even the snakes and spiders?" Here's a little game which has just the code you need. I've put a few comments in, but for further explanation, see section 29 of the Designer's Manual. Note that there are two things to do -- (1) to make sure that "take all" takes nothing in dim rooms, and (2) to print a good error message when this rule has been applied. You should be able to compile this as is: then try "take all" in both rooms. ("Drop all", and other uses of "all", should be unaffected.) Graham Nelson --------------- Constant DEBUG; Constant Story "Faintly Lit"; Constant Headline "^An Interactive Answer^"; Include "Parser"; Include "VerbLib"; Class FLRoom has light; Object Bright_Room "Bright Room" with e_to Faintly_Lit_Room, description "The Bright Room. A corridor runs east.", has light; Object -> green_ball "green ball" with name "green" "ball"; Object -> red_disc "red disc" with name "red" "disc"; FLRoom Faintly_Lit_Room "Faintly-Lit Room" with w_to Bright_Room, description "The Faintly-Lit Room. A corridor runs west."; Object -> marble "marble" with name "marble"; Object -> feather "feather" with name "feather"; Object -> basket "basket" with name "basket"; [ Initialise; location = Bright_Room; "^^^^^Welcome to the...^"; ]; [ ChooseObjects obj code; if (code == 1) { ! That is: if the parser wants to include this object in ! an "all" if (action_to_be == ##Take or ##Remove && location ofclass FLRoom) { ! Force the object to be excluded. The net result is that ! the parser will be unable to have anything in a "take all" ! occurring in a faintly-lit room. return 2; } } return 0; ! Carry on, applying normal parser rules ]; [ ParserError error_code; if (error_code == NOTHING_PE) { ! The error message printed if an "all" turned out empty if (action_to_be == ##Take or ##Remove && location ofclass FLRoom) "In this faint light, it's not so easy."; } return 0; ! Print standard parser error message ]; Include "Grammar"; -- Graham Nelson | graham@gnelson.demon.co.uk | Oxford, United Kingdom -- Joyce Haslam http://www.argonet.co.uk/users/dljhaslam/ for Gateway to Karos [INFORM] Powerbase is for RiscOs only