Having looked at the code a little more, the prognosis is bad, at least as far as me getting anything done goes. The relevant part of DC seems to be this:
[code]! Now, if there’s more than one choice, let’s see if we can do better
number_of_classes=0;
if (number_matched > 1)
{
(+list-outcomes+) = false; ! we set the list-writer to false and see if the outcomes can make it true again
! Now we run Adjudicate, which in turn runs ChooseObjects and the I7 routines
! these routines will score the options, and delete inappropriate ones
i=Adjudicate(context);
! Did we fail to get anything from Adjudicate?
if (i == -1)
{
! If we're guessing, then there was nothing valid. So let's ask the player to explain themselves.
if (guessing)
{
if (indef_possambig)
{
if (parser_trace == 5)
print " [Failed to find anything using an ambiguous input.]^";
rfalse;
}
jump Incomplete;
}
! otherwise, if we weren't guessing, then what the player typed made no sense after all, so fail the line.
rfalse;
}
if (i==1) ! A multiple object was matched.
{
! If we're not looking for a multiple noun, then we have a fundamental problem
if (~~MultiContext(context))
print "[BUG in Disambiguation: Multiple object made it out of Adjudicate!]^";
rtrue;
}
}[/code]
where UGI has this:
! Now look for a good choice, if there's more than one choice...
number_of_classes = 0;
if (number_matched == 1) {
i = match_list-->0;
if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) {
if (context == MULTI_TOKEN or MULTIHELD_TOKEN or
MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN or
NOUN_TOKEN or HELD_TOKEN or CREATURE_TOKEN) {
BeginActivity(DECIDING_WHETHER_ALL_INC_ACT, i);
if ((ForActivity(DECIDING_WHETHER_ALL_INC_ACT, i)) &&
(RulebookFailed())) rfalse;
EndActivity(DECIDING_WHETHER_ALL_INC_ACT, i);
}
}
}
if (number_matched > 1) {
i = true;
if (number_matched > 1)
for (j=0 : j<number_matched-1 : j++)
if (Identical(match_list-->j, match_list-->(j+1)) == false)
i = false;
if (i) dont_infer = true;
i = Adjudicate(context);
if (i == -1) rfalse;
if (i == 1) rtrue; ! Adjudicate has made a multiple
! object, and we pass it on
}
But to do exactly what Disambiguation Control does there, we need list-objects defined in I7, and we need some modifications that it makes to Adjudicate I think; which just seems awfully complicated. Looking around in Parser.i6t it sort of seems like a routine called BestGuess might be the thing that’s doing what we want to stop–at least, it’s the one that’s getting called after this comment:
! When the player is really vague, or there's a single collection of
! indistinguishable objects to choose from, choose the one the player
! most recently acquired, or if the player has none of them, then
! the one most recently put where it is.
but now I’m wondering why my living room is full of worms and razor wire.