ScopeWithin_O (lines 3096-3173)
Back to List
Browsing parserm.h
3096 [ ScopeWithin_O domain nosearch context i ad n;
3097
3098 ! multiexcept doesn't have second parameter in scope
3099 if (context==MULTIEXCEPT_TOKEN && domain==advance_warning) jump DontAccept;
3100
3101 ! If the scope reason is unusual, don't parse.
3102
3103 if (scope_reason~=PARSING_REASON or TALKING_REASON)
3104 { DoScopeAction(domain); jump DontAccept; }
3105
3106 ! "it" or "them" matches to the it-object only. (Note that (1) this means
3107 ! that "it" will only be understood if the object in question is still
3108 ! in context, and (2) only one match can ever be made in this case.)
3109
3110 if (match_from <= num_words) ! If there's any text to match, that is
3111 { wn=match_from;
3112 i=NounWord();
3113 if (i==1 && player==domain) MakeMatch(domain, 1);
3114
3115 if (i>=2 && i<128 && (LanguagePronouns-->i == domain))
3116 MakeMatch(domain, 1);
3117 }
3118
3119 ! Construing the current word as the start of a noun, can it refer to the
3120 ! object?
3121
3122 wn = match_from;
3123 if (TryGivenObject(domain) > 0)
3124 if (indef_nspec_at>0 && match_from~=indef_nspec_at)
3125 { ! This case arises if the player has typed a number in
3126 ! which is hypothetically an indefinite descriptor:
3127 ! e.g. "take two clubs". We have just checked the object
3128 ! against the word "clubs", in the hope of eventually finding
3129 ! two such objects. But we also backtrack and check it
3130 ! against the words "two clubs", in case it turns out to
3131 ! be the 2 of Clubs from a pack of cards, say. If it does
3132 ! match against "two clubs", we tear up our original
3133 ! assumption about the meaning of "two" and lapse back into
3134 ! definite mode.
3135
3136 wn = indef_nspec_at;
3137 if (TryGivenObject(domain) > 0)
3138 { match_from = indef_nspec_at;
3139 ResetDescriptors();
3140 }
3141 wn = match_from;
3142 }
3143
3144 .DontAccept;
3145
3146 ! Shall we consider the possessions of the current object, as well?
3147 ! Only if it's a container (so, for instance, if a dwarf carries a
3148 ! sword, then "drop sword" will not be accepted, but "dwarf, drop sword"
3149 ! will).
3150 ! Also, only if there are such possessions.
3151 !
3152 ! Notice that the parser can see "into" anything flagged as
3153 ! transparent - such as a dwarf whose sword you can get at.
3154
3155 if (child(domain)~=0 && domain ~= nosearch && IsSeeThrough(domain)==1)
3156 ScopeWithin(domain,nosearch,context);
3157
3158 ! Drag any extras into context
3159
3160 ad = domain.&add_to_scope;
3161 if (ad ~= 0)
3162 { if (UnsignedCompare(ad-->0,top_object) > 0)
3163 { ats_flag = 2+context;
3164 RunRoutines(domain, add_to_scope);
3165 ats_flag = 0;
3166 }
3167 else
3168 { n=domain.#add_to_scope;
3169 for (i=0:(2*i)<n:i++)
3170 ScopeWithin_O(ad-->i,0,context);
3171 }
3172 }
3173 ];
Last updated 27 February 2004.
This site is no longer supported; information may be out of date.
Maintained as a historical archive by the Interactive Fiction Technology Foundation.
Copyright 1993-2018 IFTF, CC-BY-SA unless otherwise noted.
This page was originally managed by Graham Nelson (graham@gnelson.demon.co.uk) assisted by C Knight.