Encyclopedias and Omniscient Trolls: About scope, disambiguation and NPC Conversation

2 views
Skip to first unread message

Magnus Olsson

unread,
Oct 26, 1997, 2:00:00 AM10/26/97
to

What follows is more of an essay than an ordinary Usenet post, mostly
a bit theoretical, but leading up to a concrete proposal for an
improvement of the Inform Library. Hope you don't find it too
long-winded - it may provide some change from the Contest discussions.


If you've been following my earlier posts in the "Skipping
disambiguation" thread, I'm looking at ways of implementing a more
convenient (for the programmer) conversation system in Inform.

This problem is of course not limited to Inform, so I'm not putting an
"[INFORM]" marker in the subject, but my practical problem right now
is how to do this in Inform. The general conclusions should be valid
for all languages that implement a "Ask troll about axe"-style
conversation.

Before we start, let me add that I'm aware of menu-driven
conversation, and its drawbacks and advantages. For reasons of my own,
I don't want such an interface. Please don't tell me that I _should_
want it :-).

=== A First Attempt at Conversation ===

A first, naive, attempt at conversation is to implement the "ask" verb
as any other verb. In Inform, the grammar line would be

verb 'ask' * creature 'about' noun -> Ask;

which, to aid the Informally challenged, means that the parser accepts
commands of the type "ask <creature> about <noun>", where <creature>
is any actor that's in scope, and <noun> is the name of any object in
scope.

This has, of course, the obvious drawback that you can only
talk about things you can see, which may add some unconscious humour
to the game, but is hardly convenient.

The next step is to change the scope definition for the "noun". In
Inform, it's easy to write a grammar line that accepts any noun in the
game, not just those in scope. This allows you to talk about things
not in sight, but it leads to another undesirable effect (supposing
that there are two axes in the game):

| > Ask troll about axe.
|
| Which axe do you mean, the troll's axe or the magic axe of Frobozz?

First, this is the parser speaking, not the troll. This may - or may
not - break mimesis.

** Question #1 to the audience: would you find it disturbing to have the
** parser interrupt your dialogue with the troll in this way?

If you think that it is disturbing, it is possible, but far from
trivial to make the Inform parser put its words in the mouth of the
troll:

| > Ask troll about axe.
|
| The troll says: "Which axe do you mean, my axe or the magic axe
| of Frobozz?"

I'm not sure this is an improvement, though, for two reasons: firstly,
the response must be personalized, so it sounds like the troll's
voice, not like Graham Nelson's (note that it says "my axe", not "the
troll's axe"). And this may be hard; adventure trolls are usually not
as grammatical as my example, so you might prefer that it mangle the
response in some way.

=== On the Problems Caused by Disambiguation ===

More seriously, we now have an omniscient troll that knows about every
object in the game. This can spoil the game (never mind the troll,
what if the _player_ isn't supposed to *know* that there is a magic
axe?). It can also lead to more unconscious comedy:

| > Ask troll about underwear.
|
| The troll says: "Which underwear do you mean, the princess' lace
| undies or your Mickey Mouse Y-fronts?"

(Again, one is lead to wonder: how does the troll know all this?)


One could of course limit the definition of scope to certain
well-defined "conversation topics" that the player is supposed to know
about, possibly including all objects that the player has already
seen. In this case, disambiguation wouldn't be running wild like
above. We'd still get questions from the parser (or from the troll):

| > Ask troll about swat.
|
| The troll asks you which "swat" you mean, the Akond of Swat or
| the special police force.

** Question #2: Would you prefer to get such disambiguation questions
** from the parser or from the troll?

I think such a system would work. However, it would require a lot of
foresight by the game author. For example, in the case of the axes
above, if the player isn't supposed to know about the Magic Axe, it
can't be defined as a conversation topic, or the disambiguator will
reveal its existence. And if the player hasn't seen the troll's axe
yet (because the troll is hiding it behind his back until he can get
close enough to decapitate the player), it shouldn't be a topic
either.

But should this mean that the player should be unable to converse
about axes in general? Probably not; so you'd have to add "abstract"
conversation topics like "axes-in-general". This could easily become
quite complicated; in the general case, we'd need to build up some
knowledge representation of what is known to the player, to the troll,
and what the troll wants to reveal to the player. Of course, realistic
NPC interaction *is* a Turing-complete problem, so we shouldn't expect
it to be easy...

=== The Case of Encyclopedias ===

There are a couple of related cases where disambiguation is more
clearly the right thing to do. Consider, for example, an encyclopedia:

| > Consult encyclopedia about London.
|
| Which London do you mean: London, England; London, Ontario; or Jack
| London?

In this case, I think it's very natural that you have a set of
"encyclopedia subjects" and that the parser disambiguates between
them. After all, this is how real-world interaction with an
encyclopedia works: once you start browsing it, you know which
subjects it contains and you have to choose which "London" to read
about. (I'm of course referring to conventional encyclopedias, not
quasi-intelligent quasi-NPC's like the Hitchhiker's Guide in the
eponymous game).

Gareth Rees has implemented a system for encyclopedias that work like
this; it's available from the IF-archive as frobozzica.inf (under
inform5.5/examples). It also handles some other problems, such as not
revealing the existence of topcis when disambiguating the _indirect_
object of "look up" (i.e. if "zork" is mentioned in a book that you
haven't seen yet, you shouldn't get disambiguation messages like "What
do you want to look up the zork in" that tell you that *some* book
mentions Zork, even though the ones you have seen don't).


=== Telling vs. Asking: the Difference in Scope ===

I also have a feeling that disambiguation may be more appropriate for
the telling than for asking. To me, it feels more natural that the
parser requires me to be specific in the case of

| > Tell troll about coin.
|
| Which coin do you mean, the gold coin or the silver coin?

than in

| > Ask troll about coin.
|
| Which coin do you mean, the gold coin, the silver coin, or the
| platinum coin in the king's pocket?

Because if you think about it, the action of telling is fundamentally
different from that of asking when it comes to scope: the scope of a
question is the entire universe of discourse, while the scope of
telling is usually limited to what you know.

In programming terms, it seems much easier to model the notion of
"subjects you know about and may want to tell people about", than
"subjects that you might want to ask people about".

** Question #3: What are your views on this? Am I just
** over-theorizing, or should there really be a difference in the
** notion of scope between "ask" and "tell"?


=== What TADS Does ===

The standard TADS parser omits the disambiguation altogether, and
simply chooses the first object in the game that matches the input. So
in our axe example, when the player types "ask troll about axe", the
troll really sees the question as either "ask troll about troll's axe"
or "ask troll about magic axe", depending on which of the objects is
first found by the parser.

This avoids all the problems with the methods I've described
previously. However, it creates two new problems.

The first problem is that the programmer can't know which of the
objects will actually be sent to the troll's "ask" code. Or perhaps he
or she can deduce it from the order words are defined, but code that
assumes anything about the order of word definitions int he internal
parser tables will be very fragile and hard to maintain - a small,
seemingly insignificant change to the code can lead to the order
between the axes being reversed.

So the only sensible way out is for the programmer to perform an
explicit "reverse disambiguation" (ambiguation?): the code will contain
lots of tests like

if (topic = troll_axe or topic = magic_axe)

which is OK if there are only two objects that have the noun "axe",
but what if the word in question is "door" and there are 69 doors in
the game? (OK, the programmer would probably have to derive all the
doors from a common base class and check the class of the topic, but
that's a bit of a hack in this context).

More seriously, the troll's actions will have to take this into
account. Even if topic = magic_axe, the player may still have *meant*
the troll's axe, so the troll can't start talking about the magic
axe.

=== What if the Troll Misunderstands You? ===

Or perhaps he can? Perhaps NPC's, just as real people, should
interpret questions as they want, not the way the questioner wants? If
you "ask troll about axe", and the troll is thinking about the magic
axe, rather than about the axe he's absent-mindedly toting around,
shouldn't the troll reply about what's occupying his mind?

| > Ask troll about axe.
|
| The troll gets an eager glint in his eyes. "Yes, the Magic Axe of
| Frobozz! I've been searching for it for years. Do you know where it
| is?"
|
| The troll suddenly seems to notice the axe in his hand. "Or did you
| mean _this_ old thing? It's good for chopping up adventurers, but
| it's not magic."

The problem with this is, unfortunately, that it won't work: If the
magic axe happens to be first in the parser's tables, "Ask troll about
magic axe" would lead to the very same message being sent to the
troll, and in that case the reply would be totally inappropriate.

So this would lead to the conclusion that the "TADS" method of
conversation isn't the ultimate solution, either. (To be fair to TADS,
there are ways of getting around this, looking at what the player
really typed, but then we're leaving the attractive simplicity of the
"no disambiguation" method far behind).

=== Deferring Disambiguation ===

A solution to this problem would be the following:

When parsing a command like "ask troll about axe", don't perform any
disambiguation, but don't cheat by just choosing the first object that
matches "axe". Instead, send the NPC a *list* of all the objects that
match the input.

In the TADS case, the troll's doAskAbout method would not receive the
single object magic_axe (or troll_axe, depending on the state of the
parser tables), but rather the list [ magic_axe, troll_axe ]. (In
Inform, which doesn't have any list datatype, one would have to use an
array instead, or a different interface altogether, but it would be
possible to solve).

The disambiguation would then be performed by the troll, rather than
by the parser. The troll's code could then do several different things:

* It could do as in current TADS and just check the first member
of the list.

* It could see if the magic axe was mentioned somewhere in the list,
and in that case (being precoocupied with magic axes for the moment)
go off on its rant, or if it isn't just say something about its own
axe.

* It could confess to being confused and ask the player.

| > Ask troll about coins.
|
| The troll looks puzzled. "Are you talking about gold or silver
| coins? Makes a lot of difference, you know."

Of course, in this last case it would be nice to be able to use the
parser's normal disambiguation routines, so that it would suffice to
say "gold" rather than rephrasing the entire question.

** Question #4: If the troll asks a dismabiguation question like this
** last example, would it be very inconvenient if you had to rephrase
** the entire question?


=== Deferring Parsing: How Inform Does It ===

The Inform Library chooses the most radical solution of all: don't
even try to parse NPC conversation, just pass the entire input on to
the NPC code. (This is not entirely true: the parser *does* parse the
first word in a question, but that's not very helpful if it is, say,
a common adjective like "big").

This solution has the obvious advantage of being maximally flexible.

It is also a major pain for the programmer, who in effect has to
write his or her own parser. And this is a non-trivial task: suppose
the Magic Axe of Frobozz has the "name" property

name 'magic' 'axe' 'of' 'frobozz'.

Then *any* combination of those words can be used to refer to it. And
objects can have parse_name routines that perform any strange
matching, and there are global entyr points that can be used to change
the way nouns are parsed.


=== Some Concrete Proposals re Inform ===

This situation would be very much simplified if the Inform parser were
user-callable. I think it would be sufficient to have a simple
predicate

MatchesInput(object)

that returned true if the object's name matched the input (or, rather,
the "consult topic" set up by the parser before sending the Ask
message to the actor), and false if it didn't.

That way, the troll object could perform its own parsing simply by
calling MatchesInput on all objects it had information about.

An alternative would be to have a function

NextMatchingObject()

that iterated over the object tree and returned the object number of
the next object that matched the input, and 0 if no more objects
matched. This would be a substitute for sending a list of matching
words.


Note: As Andrew Plotkin has pointed out (he proposed the equivalent of
the MatchesInput function in a post in the "Skipping Disambiguation"
thread), a function such as MatchesInput would not be very difficult
to write. However, I feel that such a function should really be an
official part of the Library. If nothing else, that would ensure that
when the Library changes its way of parsing words, the MatchesInput
function would change accordingly. The same holds for
NextMatchingObject, if one chooses to implement that function.

=== Conclusions ===

Above, I've looked at the pros and cons of a number of ways of
implementing NPC conversation, in particular the "ask" verb, paying
special attention to issues of scope and disambiguation. Some of the
proposed methods are clearly insufficent, while others are sufficient
but require much effort by the programmer.

I was earlier (in the "Skipping Disambiguation" thread) considering
implementing the "TADS method" of conversation in Inform. However, I
must draw the conclusion that that method is not entirely
satisfactory, and that it is better to defer disambiguation and let
the NPC object handle that.

The Inform method of leaving parsing to the NPC object is by far the
most flexible. However, in order to reduce the workload on the
programmer it would be desirable to make the internals of the parser
user-callable. Two possible interfaces for such a callable parser are
proposed.

--
Magnus Olsson (m...@df.lth.se, zeb...@pobox.com)
------ http://www.pobox.com/~zebulon ------
Not officially connected to LU or LTH.

TDLewis

unread,
Oct 26, 1997, 2:00:00 AM10/26/97
to

Magnus Olsson wrote an essay on disambiguation in which he posed some questions
and solutions.

First, some comments.

As a player, I find the parser's method of disambiguation bothersome. Yesterday
while playing one of the competition games I picked up a leaf. When I said
"examine leaf", the parser asked if I wanted the leaf I was holding or the
leaves on the trees in the forest. I know that the game programmer could have
eliminated this bothersome question by implementing ChooseObjects, but that is
a lot of work too.

(If you want an exercise in futility, include Jool's attrtest.h in Gareth's
tutorial file alice3.inf then type "attr list red queen". I have not been able
to figure out how to convince the library I mean the "red queen" and not the
"chess pieces". Furthermore, I don't have a clue how one puts disambiguation
code in a library such as attrtest.)

>** Question #1 to the audience: would you find it disturbing to have the
>** parser interrupt your dialogue with the troll in this way?

Yes.

>** Question #2: Would you prefer to get such disambiguation questions
>** from the parser or from the troll?

From the troll.

>** Question #3: What are your views on this? Am I just
>** over-theorizing, or should there really be a difference in the
>** notion of scope between "ask" and "tell"?

I hadn't thought about this issue before, but I agree with you that "ask" and
"tell" should have different scopes.

>** Question #4: If the troll asks a dismabiguation question like this
>** last example, would it be very inconvenient if you had to rephrase
>** the entire question?

Yes. I think there should be some way to inform the parser that a
disambiguation question has been asked.

>The Inform method of leaving parsing to the NPC object is by far the
>most flexible. However, in order to reduce the workload on the
>programmer it would be desirable to make the internals of the parser
>user-callable. Two possible interfaces for such a callable parser are
>proposed.

The problem with call backs to the parser after it has finished its work is
that a lot of state information has been lost. Graham would have had to design
the parser with this in mind. I suspect that means either redesigning the
parser or a major hack. I'll leave it to Graham to comment on how plausible
such a change is.

Another alternative change is to have the parser call a creature specific scope
routine. Maybe something like:

verb 'ask' * creature 'about' scope=creature.AskScope -> Ask;

If the NPC doesn't define AskScope then the default parsing applies, but you
could then write a special routine for the troll that knows about two axes and
adjusts the scope accordingly.

I think if it's done from within the parser, it would be a lot easier to deal
with questions posed by the troll. That would still put a big burden on the
game designer so it's not a panacea either.
___________________________________________________________________
Tony Lewis (tdl...@aol.com)
"We are sorry for the inconvenience."

Will Grzanich

unread,
Oct 26, 1997, 2:00:00 AM10/26/97
to

Magnus Olsson wrote:

> | > Ask troll about axe.
> |
> | Which axe do you mean, the troll's axe or the magic axe of Frobozz?
>
> First, this is the parser speaking, not the troll. This may - or may
> not - break mimesis.
>
> ** Question #1 to the audience: would you find it disturbing to have the
> ** parser interrupt your dialogue with the troll in this way?

No more so than usual, I'd say. :)



> | > Ask troll about swat.
> |
> | The troll asks you which "swat" you mean, the Akond of Swat or
> | the special police force.
>
> ** Question #2: Would you prefer to get such disambiguation questions
> ** from the parser or from the troll?

I like the way the response is given in this example much more than in
the previous one. It leaves the details of the troll's language up to
the player's imagination. And your thoughts on restricting topics of
conversation to, say, things the player has seen seem good.

As I'm sure you've realized, there's also the fact that we may want the
player to learn of an item in the game by asking an NPC about it
generally--that is, "ask troll about axes" may lead to the troll's
telling the player about the Magic Axe of Frobozz.



> ** Question #3: What are your views on this? Am I just
> ** over-theorizing, or should there really be a difference in the
> ** notion of scope between "ask" and "tell"?

Well, with "ask," it seems to me that there are two "divisions" of
scope: things in general, and specific items; with "tell," there is just
specific items. So "ask troll about axes," "ask troll about magic axe
of frobozz," and "tell troll about magic axe of frobozz" are all valid,
while "tell troll about axes" is a bit silly unless there's a cache of
axes somewhere in the game or the player-character is a weaponsmith. :)


> === What if the Troll Misunderstands You? ===
>
> Or perhaps he can? Perhaps NPC's, just as real people, should
> interpret questions as they want, not the way the questioner wants? If
> you "ask troll about axe", and the troll is thinking about the magic
> axe, rather than about the axe he's absent-mindedly toting around,
> shouldn't the troll reply about what's occupying his mind?
>
> | > Ask troll about axe.
> |
> | The troll gets an eager glint in his eyes. "Yes, the Magic Axe of
> | Frobozz! I've been searching for it for years. Do you know where it
> | is?"
> |
> | The troll suddenly seems to notice the axe in his hand. "Or did you
> | mean _this_ old thing? It's good for chopping up adventurers, but
> | it's not magic."

This would be *extremely* neat. But, as you say, probably very
difficult. :)



> ** Question #4: If the troll asks a dismabiguation question like this
> ** last example, would it be very inconvenient if you had to rephrase
> ** the entire question?

Yes. :)

"Hey, Magnus...could you please hand me the pen?"

"Which pen do you mean? The black pen, the blue pen, or the red pen?"

"Hey, Magnus...could you please hand me the blue pen?"

By the way, Magnus...thanks for the very interesting post. :)

-Will
--
"All you need is love." | Check out my out-of-date webpage at
-John Lennon | www.cen.uiuc.edu/~grzanich!
| Aged like a fine cheese!

Magnus Olsson

unread,
Oct 26, 1997, 2:00:00 AM10/26/97
to

In article <19971026161...@ladder01.news.aol.com>,

TDLewis <tdl...@aol.com> wrote:
>Magnus Olsson wrote an essay on disambiguation in which he posed some questions
> and solutions.

>>The Inform method of leaving parsing to the NPC object is by far the


>>most flexible. However, in order to reduce the workload on the
>>programmer it would be desirable to make the internals of the parser
>>user-callable. Two possible interfaces for such a callable parser are
>>proposed.
>

>The problem with call backs to the parser after it has finished its work is
> that a lot of state information has been lost. Graham would have had to design
> the parser with this in mind. I suspect that means either redesigning the
> parser or a major hack. I'll leave it to Graham to comment on how plausible
> such a change is.

In the general casem, what you're saying is true. However, at least
the first of my proposed parser calls, the one that checks if a
specified object matches the input (or rather, the part of the input
that comes after "ask troll about"), doesn't use any of that
information. It just checks the input against the object's name and
parse_name properties. I think the second proposal (return the next
object matching the input) would need some state information; however,
it could in principle re-create that infoby starting the parsing
process over again.

But, as you say, we'd better let Graham comment on the feasability.

>Another alternative change is to have the parser call a creature specific scope
> routine. Maybe something like:
>
>verb 'ask' * creature 'about' scope=creature.AskScope -> Ask;
>
>If the NPC doesn't define AskScope then the default parsing applies, but you
> could then write a special routine for the troll that knows about two axes and
> adjusts the scope accordingly.

That, I think, is one of the solutions I presented in the essay. It's
not as flexible as leaving the parsing to the troll, but I think it
would be workable.

Adam Cadre

unread,
Oct 26, 1997, 2:00:00 AM10/26/97
to

David J Wildstrom wrote:
> Does this strike fear into anybody else's heart?
>
> >ASK TROLL ABOUT OF
> The troll asks, "Do you mean the Magic Axe of Frobozz, the Council of
> Trent, the Ace of Clubs, the case of rabies, the pile of leaves, the
> emerald the size of a plover's egg, or the Wand of Annhilation?"

Y'know, this doesn't really worry me. "ASK TROLL ABOUT OF" is really
a nonsense command. If it ruins the game by giving away too much
information or produces a nonsense response, I think that's the player's
fault for trying to be a pithy smart-ass. Which isn't to say that an
author =shouldn't= try to protect against this kind of thing, just that
I wouldn't look down on an author who didn't.

-----
Adam Cadre, Durham, NC
http://www.duke.edu/~adamc | http://www.retina.net/~grignr
Sites newly revamped! Play the games! Read the stories! Hear the
music! Eat the pie! (Okay, well, you'll have to find your own pie.)

David J Wildstrom

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

In article <62vede$psn$1...@bartlet.df.lth.se>,

Magnus Olsson <m...@bartlet.df.lth.se> wrote:
>name 'magic' 'axe' 'of' 'frobozz'.

Does this strike fear into anybody else's heart?

>ASK TROLL ABOUT OF
The troll asks, "Do you mean the Magic Axe of Frobozz, the Council of Trent,
the Ace of Clubs, the case of rabies, the pile of leaves, the emerald the size
of a plover's egg, or the Wand of Annhilation?"

Papa Monzano

Magnus Olsson

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

In article <erkyrathE...@netcom.com>,
Andrew Plotkin <erky...@netcom.com> wrote:
>Adam Cadre (ad...@acpub.duke.edu) wrote:

>> David J Wildstrom wrote:
>> > Does this strike fear into anybody else's heart?
>> >
>> > >ASK TROLL ABOUT OF
>> > The troll asks, "Do you mean the Magic Axe of Frobozz, the Council of
>> > Trent, the Ace of Clubs, the case of rabies, the pile of leaves, the
>> > emerald the size of a plover's egg, or the Wand of Annhilation?"
>
>> Y'know, this doesn't really worry me. "ASK TROLL ABOUT OF" is really
>> a nonsense command. If it ruins the game by giving away too much
>> information or produces a nonsense response, I think that's the player's
>> fault for trying to be a pithy smart-ass.
>
>I'd never lump those two together. If nonsense produces nonsense, that's a
>minor unevenness in the game interface -- nearly unavoidable.
>
>However, if nonsense gives away information, it's a serious bug, and I
>would expect it to be fixed. (That is, I would expect *me* to fix it if it
>were my game. :-)

Just for the record, I always declare 'of' as an adjective, not as a
name, (using the way of implementing adjectives that's shown in the
Designer's Manual), which avoids the problem, since that
implementation of adjectives doesn' allow referring to objects by
adjectives alone.

Laurel Halbany

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

m...@bartlet.df.lth.se (Magnus Olsson) wrote:

>** Question #1 to the audience: would you find it disturbing to have the
>** parser interrupt your dialogue with the troll in this way?

Depends. If I knew about both axes, then it would seem to me the
parser's way of saying "Psst! Could you please abbreviate a LITTLE bit
less?" If I didn't, then it would be disturbing.

I suppose one could prefer the troll to say "Which axe you want?" but
then you need to get into whether the troll knows about both axes,
etc.

>** Question #2: Would you prefer to get such disambiguation questions
>** from the parser or from the troll?

The parser. If you're having a dialogue, it's kind of annoying to
switch to narrative, i.e. from "Grond not know which swat you mean,"
to "The troll asks you...."

> For example, in the case of the axes
>above, if the player isn't supposed to know about the Magic Axe, it
>can't be defined as a conversation topic, or the disambiguator will
>reveal its existence.

Wouldn't it be possible to set up the conversation topics with a
routine, so that there is a before check to see if the player knows
about such-and-such before feeding back the disambiguation response?


----------------------------------------------------------
Laurel Halbany
mythago@twisty_little_maze.com
(Substitute dashes for underscores to remove spamblock)

Magnus Olsson

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

In article <34538554...@hermes.rdrop.com>,
Laurel Halbany <myt...@agora.rdrop.com> wrote:

>m...@bartlet.df.lth.se (Magnus Olsson) wrote:
>>** Question #2: Would you prefer to get such disambiguation questions
>>** from the parser or from the troll?
>
>The parser. If you're having a dialogue, it's kind of annoying to
>switch to narrative, i.e. from "Grond not know which swat you mean,"
>to "The troll asks you...."

And if the dialogue didn't switch to narrative (i.e. if the troll
asked you in direct speech which swat you meant), would you still
prefer the question to come from the parser?

>> For example, in the case of the axes
>>above, if the player isn't supposed to know about the Magic Axe, it
>>can't be defined as a conversation topic, or the disambiguator will
>>reveal its existence.
>

>Wouldn't it be possible to set up the conversation topics with a
>routine, so that there is a before check to see if the player knows
>about such-and-such before feeding back the disambiguation response?

Yes. The easiest way of doing this would be to define topics to be in
scope if and only if the player knows about them. But, as I pointed
out, then you must have special topics for "axes in general" and so
on, or the troll won't be able to answer questions abotu things you
haven't seen yet :-).

Den of Iniquity

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

Hi, excellent post...

On 26 Oct 1997, Magnus Olsson wrote:
>What follows is more of an essay than an ordinary Usenet post

[and so on. Read the original post.]

>** Question #1 to the audience: would you find it disturbing to have the
>** parser interrupt your dialogue with the troll in this way?

No, I think we're already used to it. Avoiding it as much as possible is a
good thing but in the long run, it's hardly unusual.


>| > Ask troll about swat.
>|
>| The troll asks you which "swat" you mean, the Akond of Swat or
>| the special police force.

Who, or why, or which, or _what_ is the Akond of Swat?

>** Question #2: Would you prefer to get such disambiguation questions
>** from the parser or from the troll?

Ideally the troll, but putting questions into the voice of the troll could
be difficult. As in the above case where the question comes from the
troll, but without actually quoting him, well, that would work, but if
it's a stereotypically dull troll, it does seem a little incongruous to
use grammatically correct questions. Especially if the troll had to refer
to objects with complex or polysyllabic names: "The troll asks you which
book you mean, the big red book, the spell book or the encyclopaedia of
mediaeval architecture?"

Of course, the aforementioned omniscient troll could be quite fun as a
much maligned, very misunderstood character. :)

-> ASK TROLL ABOUT AXES
-
-The troll thinks for a moment, humming and hahing to himself, then, after
-scrabbling around on the floor for a chalky stone, he proceeds to scratch
-two straight crossing lines on the south wall. "Well," he says,
-"conventionally, in two-dimensional space, we refer to the x-axis," he
-points out the horizontal line, "and the y-axis" he indicates the
-vertical line. He pauses for a moment while he produces a delicate
-pince-nez from some concealed pocket and perches it precariously on his
-snout-like nose. "These are arranged perpendicularly such that any point
-in the two-dimensional plane can be identified by its distance from a
-given origin, here..."

>But should this mean that the player should be unable to converse
>about axes in general? Probably not; so you'd have to add "abstract"
>conversation topics like "axes-in-general". This could easily become

>quite complicated [...]

On a slightly different line to the one you're heading down, topics of
conversation should be separate from the objects to which they refer.
Perhaps every NPC should have an invisible bucket of concepts which they
can talk about. If one NPC tells another (N)PC about (say) 'crown_info_1',
then a duplicate of that piece of information is added to the new (N)PC's
bucket of knowledge, which they can then copy to another (N)PC's bucket,
and so on. This would be difficult to implement smoothly, perhaps a
programmer would prefer pointers to some global knowledge-net rather than
duplicates of the information itself. The end result is a world in which
the NPC's can trade gossip.

In the Delphine Software (Graphical) Game 'Cruise For A Corpse' (was it
given a different title in other countries?) a large part of the
advancement of plot involved obtaining information from one character and
then wandering across the ship to tell another character in order to glean
some more information which must then be told to yet another person - all
by menu-driven conversation, I must add. A little tedious, I have to say,
though thankfully interspersed with standard 'hunt the pixel' scenes and
'use everything on everything else' puzzles. This is one example of such a
system, though simplistic in that the NPC's didn't seem to do much talking
to each other and the number of options was limited. I think it's fair to
say that in it's limited usage it took the idea too far.

It does solve the problem of the troll knowing about the princess' panties
or the platinum coin, and so on.


>=== The Case of Encyclopedias ===
>
>There are a couple of related cases where disambiguation is more
>clearly the right thing to do. Consider, for example, an encyclopedia:
>
>| > Consult encyclopedia about London.
>|
>| Which London do you mean: London, England; London, Ontario; or Jack
>| London?

One minor point - does anyone else think that a specially tailored answer
like the following would be a better response?

"Under 'London' the index lists the following: [...] Which would you
like to look up?"

I suppose this comes down to the 'which would you prefer, the voice of the
parser or that of the troll' question, with the book replacing the troll.

[Back to my 'idea bucket' point - the book has its own special 'ideas
container' from which any character capable of reading can draw, if you'd
want to implement that.]


>** Question #3: What are your views on this? Am I just
>** over-theorizing, or should there really be a difference in the
>** notion of scope between "ask" and "tell"?

Actually, I don't think there's much of a difference. If you can ask about
something you should be able to tell about it. If you can ask about axes
'in general' then you should be able to tell about axes in general too. An
'ask' is just a 'tell' turned upside-down. Disambiguation should work
equally for both, I feel. Of course with tell, you've got less flexibility
about where the disambiguation is coming from. It would be a bit bizarre
if, before telling the troll about the coin, he asked which one you meant,
the gold or the silver one.


>** Question #4: If the troll asks a dismabiguation question like this
>** last example, would it be very inconvenient if you had to rephrase
>** the entire question?

Yes. It's not really that hard to rephrase the question with our modern
interpreters with their command histories and cursor-compatible
insertion-editing and yet I'd be miffed if I had to use it instead of just
typing 'gold'.

=========================================================================

Slightly separate from Magnus' points then, would people benefit from a
'transferable knowledge' library (or am I ignorant of some similar
existing feature in some system; I'll admit I'm not that familiar with any
particular system, preferring theory to practice)? Has anyone worked on
such a system?

--
Den


Dave Gatewood

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

Den of Iniquity wrote:

> On a slightly different line to the one you're heading down, topics of
> conversation should be separate from the objects to which they refer.

However, it would be nice if the programmer could "associate" one or
more topics of conversation with an object, so that once the magic axe
had entered the player's scope, the topic "magic axe" would
automatically be deposited into the player's "bucket of concepts." This
would save the programmer from doing a "concept transfer" for each and
every object in the game that the player encounters. (Inevitably, when
done well, there would still be a lot of "concept movement" for the
programmer to do manually - but just the bare minimum outlined above
would be sufficient to mimic the current system.)

> Perhaps every NPC should have an invisible bucket of concepts which they
> can talk about.

This is exactly what I would like. This would give a consistent system
for checking to see if a concept is "in scope" both for the PC and the
NPC. It would then be a simple(*) matter of creating cleverly flexible
default responses for when the concept is _not_ in scope. I posted
examples of this in a reply to Magnus's original post, but the basic
idea is this:

If the concept is not in the PC's "bucket", the _parser_ shouldn't allow
either "ask" or "tell"; whereas if the concept is not in the NPC's
"bucket", the _NPC_ shouldn't allow "ask" (by replying stupidly: "I
dinna know nothin' aboot that"). (Note that an NPC doesn't need to
"have" a concept to accept a "tell" action.)

(*) Of course, setting up a realistic "buckets" system in the first
place is not so simple; I'm just saying that _if_ such a system existed,
Magnus's questions about scope would then be easily solved.

> >| > Consult encyclopedia about London.


>
> "Under 'London' the index lists the following: [...] Which would you
> like to look up?"

Once you suggest the existence of an index, you have to allow the player
to read the index, thereby giving the player a list of all of the
"consultable" topics in the encyclopedia. Often this is precisely what
you want to avoid (take, for example, The History of the Meldrewes). I
guess you might say that the flip side of the "Omniscient Troll problem"
is the "Conveniently Abridged Encyclopedia problem."

If we instead have the parser handle all questions of disambiguation
(based on the concepts in the PC's bucket), we avoid both of these
problems.

Dave

Zachery Bir

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

On Mon, 27 Oct 1997 14:51:19 -0500, Dave Gatewood <dgat...@bigfoot.com> wrote:
>> >| > Consult encyclopedia about London.

>>
>> "Under 'London' the index lists the following: [...] Which would you
>> like to look up?"
>
>Once you suggest the existence of an index, you have to allow the player
>to read the index, thereby giving the player a list of all of the
>"consultable" topics in the encyclopedia. Often this is precisely what
>you want to avoid (take, for example, The History of the Meldrewes). I
>guess you might say that the flip side of the "Omniscient Troll problem"
>is the "Conveniently Abridged Encyclopedia problem."

The cheat-sheet index could easily be solved, however, by responding:

"Your eyes soon glaze over from attempting to absorb all the tiny
type." Or some such...

Zac

Daniel Shiovitz

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

In article <62vede$psn$1...@bartlet.df.lth.se>,
Magnus Olsson <m...@bartlet.df.lth.se> wrote:
[..]

>A first, naive, attempt at conversation is to implement the "ask" verb
>as any other verb. In Inform, the grammar line would be
>
>verb 'ask' * creature 'about' noun -> Ask;
>
>which, to aid the Informally challenged, means that the parser accepts
>commands of the type "ask <creature> about <noun>", where <creature>
>is any actor that's in scope, and <noun> is the name of any object in
>scope.

Note, however, that when we say "ASK TROLL ABOUT AXE", we aren't
"really" walking up to the troll and saying "axe?" in an inquisitive
voice. At least when I imagine it, the character is doing something
more along the lines of "WALK UP TO TROLL AND SAY, "SO, FRED, WHAT
ABOUT THIS HERE AXE THEN?"". In this "expanded form", there's no
(or very little) ambiguity. "SO, FRED, WHY'S YOUR AXE SO RUSTY?" is
much different then "HEY, FRED, HAVE YOU HEARD ABOUT THE MAGIC AXE OF
FROBOZZ?" The ambiguity gets introduced because we convert these two
to a shorter form, "ASK TROLL ABOUT AXE". Similarly, "GET THE BIG BLUE
BALL" and "GET THE SMALL RED BALL" are not equivalent. It's only the
compact form, "TAKE BALL" that is, and it's the parser's job to
re-expand it to figure out what you really meant. IMO, the same thing
goes for conversation.

On the practical side, what this means for me in terms of an Ideal
Implementation is that players should be able to ask and tell about
any objects they know about. The parser should completely disambiguate
what the player means (and note that "axes" is an acceptable subject
of conversation, and is different from "the troll's axe" or "the magic
axe of frobozz"), and then give that object to the NPC. The NPC
should deal with the query based on their knowledge.

>Magnus Olsson (m...@df.lth.se, zeb...@pobox.com)
--
(Dan Shiovitz) (d...@cs.wisc.edu) (look, I have a new e-mail address)
(http://www.cs.wisc.edu/~dbs) (and a new web page also)
(the content, of course, is the same)


Julian Arnold

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

In article <3453F2...@acpub.duke.edu>, Adam Cadre

<URL:mailto:ad...@acpub.duke.edu> wrote:
> David J Wildstrom wrote:
> > Does this strike fear into anybody else's heart?
> >
> > >ASK TROLL ABOUT OF
> > The troll asks, "Do you mean the Magic Axe of Frobozz, the Council of
> > Trent, the Ace of Clubs, the case of rabies, the pile of leaves, the
> > emerald the size of a plover's egg, or the Wand of Annhilation?"
>
> Y'know, this doesn't really worry me. "ASK TROLL ABOUT OF" is really
> a nonsense command. If it ruins the game by giving away too much
> information or produces a nonsense response, I think that's the player's
> fault for trying to be a pithy smart-ass...

No. Definitely not. This is a bug which should be squashed.

Jools
--
"For small erections may be finished by their first architects; grand
ones, true ones, ever leave the copestone to posterity. God keep me
from ever completing anything." -- Herman Melville, "Moby Dick"


Lucian Paul Smith

unread,
Oct 27, 1997, 3:00:00 AM10/27/97
to

Dave Gatewood (dgat...@bigfoot.com) wrote:
: Den of Iniquity wrote:

: > Perhaps every NPC should have an invisible bucket of concepts which they
: > can talk about.

: This is exactly what I would like. This would give a consistent system


: for checking to see if a concept is "in scope" both for the PC and the
: NPC. It would then be a simple(*) matter of creating cleverly flexible
: default responses for when the concept is _not_ in scope. I posted
: examples of this in a reply to Magnus's original post, but the basic

: idea is this:

: If the concept is not in the PC's "bucket", the _parser_ shouldn't allow


: either "ask" or "tell"; whereas if the concept is not in the NPC's
: "bucket", the _NPC_ shouldn't allow "ask" (by replying stupidly: "I
: dinna know nothin' aboot that"). (Note that an NPC doesn't need to
: "have" a concept to accept a "tell" action.)

: (*) Of course, setting up a realistic "buckets" system in the first
: place is not so simple; I'm just saying that _if_ such a system existed,
: Magnus's questions about scope would then be easily solved.

Yes! This is exactly what I would like to see. And, barring that, this
is exactly what I would like to code up, and actually plan on doing, after
I recover from the competition.

My idea is to do this with flags. Like the 'moved' and 'visited' flag,
you could have a 'concept' flag which would be updated along with those
other two. (This would involve searching the library to find where this
occurs, and adding code for the new flag, too.) You can't just use
'moved' and 'visited' as they currently stand, since then you couldn't
have static or scenery objects in this new concept scope.

At any rate, if you used this system with NPC's, you'd either have to have
a flag for each of them, or implement some other sort of system. I liked
the idea someone posted earlier in the thread of having a scope routine
within the NPC. The posted method wouldn't be ideal, but could be
slightly modified to something like:

Extend first "ask"
* animate 'about' scope=AskScope ->Ask;

[AskScope;
if (noun provides SpecialAskScope)
{
noun.SpecialAskScope;
rtrue;
}
else objectloop (x has concept) PlaceInScope(x);
rtrue;
];

You could then use a clever combination of topic objects and the
ChooseObjects routine to deal with any other disambiguation problems. For
example, in the hypothetical 'axe' example, if you wanted a general
response to 'ASK TROLL ABOUT AXES', you could create an object 'axes',
place it out of the way some where, but add it to concept scope, then tell
ChooseObjects to pick it over any of the other axes if the verb was Ask,
Tell, or Say, and to not pick it if the verb was something else.

This thread will have different applications depending on what you're
talking about--writing a game, or writing a library. If you're writing a
game, all you need to account for is your particular constellation of
NPC's. If you're writing a library, you need to take into consideration
all possible constellations, and so provide 'hooks' for the programmer to
override default behavior.

-Lucian

FemaleDeer

unread,
Oct 28, 1997, 3:00:00 AM10/28/97
to

>From: Dave Gatewood <dgat...@bigfoot.com>

>However, it would be nice if the programmer could >"associate" one or more
topics of conversation with an >object, so that once the magic axe
>had entered the player's scope, the topic "magic axe" >would automatically be
deposited into the player's "bucket >of concepts." This would save the
programmer from doing >a "concept transfer" for each and
>every object in the game that the player encounters. >(Inevitably, when done
well, there would still be a lot of >"concept movement" for the programmer to
do manually - >but just the bare minimum outlined above
>would be sufficient to mimic the current system.)

Hmm, I may not know what I am talking about, but isn't this concept bucket idea
already in the Christminister source code, specifically the topics of
conversation combined with using "DecodeTopic"? I use a variation of that for
NPC conversation. I can also see associating an attribute of some kind with
the possible topics of conversation, such as "moved" meaning a player has
found it, or "known" or something, meaning the NPC knows about it. But like I
said, I probably don't know what I am talking about, because I am not sure if
that is what this thread is discussing.

FD :-)
------------------------------------------------------------------------------
Femal...@aol.com "Good breeding consists in
concealing how much we think of ourselves and how
little we think of the other person." Mark Twain

Andrew Plotkin

unread,
Oct 28, 1997, 3:00:00 AM10/28/97
to

Lucian Paul Smith (lps...@rice.edu) wrote:
> Dave Gatewood (dgat...@bigfoot.com) wrote:
> : Den of Iniquity wrote:

> : > Perhaps every NPC should have an invisible bucket of concepts which they
> : > can talk about.

> : If the concept is not in the PC's "bucket", the _parser_ shouldn't allow


> : either "ask" or "tell"; whereas if the concept is not in the NPC's
> : "bucket", the _NPC_ shouldn't allow "ask" (by replying stupidly: "I
> : dinna know nothin' aboot that"). (Note that an NPC doesn't need to
> : "have" a concept to accept a "tell" action.)

> : (*) Of course, setting up a realistic "buckets" system in the first
> : place is not so simple; I'm just saying that _if_ such a system existed,
> : Magnus's questions about scope would then be easily solved.

> Yes! This is exactly what I would like to see. And, barring that, this
> is exactly what I would like to code up, and actually plan on doing, after
> I recover from the competition.

> My idea is to do this with flags.

I think it would be safer and ultimately more flexible to have the
concept system entirely separate. Don't try to represent a concept and a
physical object with the same Inform object. Have a separate scope token
for concepts that never touches the "standard" scope system at all.

This means that many significant objects will have parallel objects in
the scope system. But this isn't really any extra code; it just divides
things up a little more than you'd like. The new properties you're
already defining wind up in a different object.

Naturally, every physical object can have a "concept_is" property, which
points to a concept object. When the physical object is in scope, the
library checks "obj.concept_is" and turns on its "seen" attribute. Two
different axes (for example) might well point ot the same axe concept
object. A dozen gold coins would definitely all point at the "money"
concept. Contrariwise, a lot of objects would have no related concept at
all, signifying that their concept is "nothing interesting."

The scope token would need one unique property: if the input words don't
match any object in concept-scope, it would match a "nothing interesting"
scope object, as opposed to saying "I don't know about any such thing."
(Or maybe not.) In any case, I think this is as easy as always putting
"nothing interesting" in scope and using ChooseObjects to give it a
low weight.

This system makes a lot of the problems that have been discussed
evaporate. It doesn't solve the naive version of the problem, which is to
be able to ask the troll about every rock, door, and tree you've
encountered in the game. But I don't think anyone really wanted that in
the first place. :)

--Z


--

"And Aholibamah bare Jeush, and Jaalam, and Korah: these were the
borogoves..."

Daniel Shiovitz

unread,
Oct 28, 1997, 3:00:00 AM10/28/97
to

In article <erkyrathE...@netcom.com>,
Andrew Plotkin <erky...@netcom.com> wrote:
[..]

>I think it would be safer and ultimately more flexible to have the
>concept system entirely separate. Don't try to represent a concept and a
>physical object with the same Inform object. Have a separate scope token
>for concepts that never touches the "standard" scope system at all.
>
>This means that many significant objects will have parallel objects in
>the scope system. But this isn't really any extra code; it just divides
>things up a little more than you'd like. The new properties you're
>already defining wind up in a different object.
>
>Naturally, every physical object can have a "concept_is" property, which
>points to a concept object. When the physical object is in scope, the
>library checks "obj.concept_is" and turns on its "seen" attribute. Two
>different axes (for example) might well point ot the same axe concept
>object. A dozen gold coins would definitely all point at the "money"
>concept. Contrariwise, a lot of objects would have no related concept at
>all, signifying that their concept is "nothing interesting."

I'm not sure how useful it would be, but it would be kinda cool if
classes could also have associated concept objects, perhaps for
plurals:

>ASK TROLL ABOUT FIRE CROWN
"Ooh, the mystic fire crown of frobozz! That hot!"

>ASK TROLL ABOUT ICE CROWN
"Ooh, the mystic ice crown of frobozz! That cold!"

>ASK TROLL ABOUT MYSTIC CROWNS
"Og heard of many mystic crowns. They neat-o."

I suppose you could also do this with a secondary plural_concept_is
property, and then you wouldn't have people asking about classes. Hmm.

[..]
>--Z

Magnus Olsson

unread,
Oct 28, 1997, 3:00:00 AM10/28/97
to

In article <ant27200...@arnod.demon.co.uk>,

Julian Arnold <jo...@arnod.demon.co.uk> wrote:
>In article <3453F2...@acpub.duke.edu>, Adam Cadre
><URL:mailto:ad...@acpub.duke.edu> wrote:
>> David J Wildstrom wrote:
>> > Does this strike fear into anybody else's heart?
>> >
>> > >ASK TROLL ABOUT OF
>> > The troll asks, "Do you mean the Magic Axe of Frobozz, the Council of
>> > Trent, the Ace of Clubs, the case of rabies, the pile of leaves, the
>> > emerald the size of a plover's egg, or the Wand of Annhilation?"
>>
>> Y'know, this doesn't really worry me. "ASK TROLL ABOUT OF" is really
>> a nonsense command. If it ruins the game by giving away too much
>> information or produces a nonsense response, I think that's the player's
>> fault for trying to be a pithy smart-ass...
>
>No. Definitely not. This is a bug which should be squashed.

Ahem. One of the points I made in my original post was that *if* the
ordinary disambiguation method is to be used for "ask troll about
foo", *then* the scope for topics must be defined so as to not give
away information.

And, of course, I think that Inform's way of treating all "name" words
on an equal footing is overly crude: the word "of" by itself certainly
shouldn't match any objects that just happen to have "of" as a part of
their names.

It's a different thing, of course, if the word "of" itself
is a conversation topic:

| > Ask troll about "of"
|
| "It's a two-letter word."

Dennis Smith

unread,
Oct 28, 1997, 3:00:00 AM10/28/97
to

On Mon, 27 Oct 1997, Dave Gatewood wrote:

> whereas if the concept is not in the NPC's "bucket", the _NPC_ shouldn't
>allow "ask" (by replying stupidly: "I dinna know nothin' aboot that").

The 'mad Scotsman' form of expressing ignorance? :)

>> "Under 'London' the index lists the following: [...] Which would you
>> like to look up?"
>

>Once you suggest the existence of an index, you have to allow the player
>to read the index, thereby giving the player a list of all of the
>"consultable" topics in the encyclopedia.

Ah, good point. Then: "The book has the following entries on London: [...]


Which would you like to look up?"

I wonder if you could exploit disambiguation to achieve the effect of
giving the player a 'fortuitous' clue. If when looking up 'London,
England', one is presented with the opportunity to learn about Jack
London, seemingly totally irrelevant, who wouldn't look it up anyway, out
of curiosity? Then the entry for Jack London could contain a clue to
another problem.

Does anyone besides me think that this would be cool? :)

Of course it wouldn't work in all cases, such as the reverse, in which you
might initially specify 'Jack' and thereby eliminate the need for
disambiguation.

--
Den


Magnus Olsson

unread,
Oct 28, 1997, 3:00:00 AM10/28/97
to

In article <Pine.SGI.3.95L.97102...@ebor.york.ac.uk>,

Dennis Smith <dms...@york.ac.uk> wrote:
>I wonder if you could exploit disambiguation to achieve the effect of
>giving the player a 'fortuitous' clue. If when looking up 'London,
>England', one is presented with the opportunity to learn about Jack
>London, seemingly totally irrelevant, who wouldn't look it up anyway, out
>of curiosity? Then the entry for Jack London could contain a clue to
>another problem.
>
>Does anyone besides me think that this would be cool? :)

Cool, yes, but hard to get right.

And some players might think it unfair and a bug rather than a feature -
they wouldn't know that it was intentional, and would get teh impression
that the only way of solving the puzzle was through a bug in scoping.
Pity, because it's a cool idea...

Lucian Paul Smith

unread,
Oct 28, 1997, 3:00:00 AM10/28/97
to

Dennis Smith (dms...@york.ac.uk) wrote:

: On Mon, 27 Oct 1997, Dave Gatewood wrote:

: I wonder if you could exploit disambiguation to achieve the effect of
: giving the player a 'fortuitous' clue. If when looking up 'London,
: England', one is presented with the opportunity to learn about Jack
: London, seemingly totally irrelevant, who wouldn't look it up anyway, out
: of curiosity? Then the entry for Jack London could contain a clue to
: another problem.

: Does anyone besides me think that this would be cool? :)

Zork Zero did this, actually, in a slightly different way.

***Spoilers below!*******


For one puzzle, it was obvious that you had to look up 'jester' in the
Encyclopedia Frobozzica. However, when you did, the picture of the jester
was ripped out, and you could see a partial text for something about
'jerrimore' on the next page. If you looked up 'jerrimore', you got a
clue for a completely different puzzle in the game.

-Lucian

Michael Straight

unread,
Oct 28, 1997, 3:00:00 AM10/28/97
to


On Sun, 26 Oct 1997, Adam Cadre wrote:

> David J Wildstrom wrote:
> > Does this strike fear into anybody else's heart?
> >
> > >ASK TROLL ABOUT OF
> > The troll asks, "Do you mean the Magic Axe of Frobozz, the Council of
> > Trent, the Ace of Clubs, the case of rabies, the pile of leaves, the
> > emerald the size of a plover's egg, or the Wand of Annhilation?"
>
> Y'know, this doesn't really worry me. "ASK TROLL ABOUT OF" is really
> a nonsense command.

Or an easy typo.

> If it ruins the game by giving away too much
> information or produces a nonsense response, I think that's the player's
> fault for trying to be a pithy smart-ass.

"Smart-ass players thinking they're ready for IF when they can't even type
yet! Go back to Mavis you loosers!"

SMTIRCAHIAGEHLT


Kenneth Fair

unread,
Oct 29, 1997, 3:00:00 AM10/29/97
to

In article <erkyrathE...@netcom.com>, erky...@netcom.com (Andrew
Plotkin) wrote:

[snip]

>Naturally, every physical object can have a "concept_is" property, which
>points to a concept object. When the physical object is in scope, the
>library checks "obj.concept_is" and turns on its "seen" attribute. Two
>different axes (for example) might well point ot the same axe concept
>object. A dozen gold coins would definitely all point at the "money"
>concept. Contrariwise, a lot of objects would have no related concept at
>all, signifying that their concept is "nothing interesting."

What about objects that fall into several concepts? A red cone might
fall into the redness concept, the cone concept, and the "blocks in
the Playroom" concept.

If the player typed, "ASK TROLL ABOUT CONE," would you look at the
cone objects first, or would you first look through the concept list
to see if there was a "cone" concept?

--
KEN FAIR - U. Chicago Law | <http://student-www.uchicago.edu/users/kjfair>
Of Counsel, U. of Ediacara | Power Mac! | CABAL(tm) | I'm w/in McQ - R U?

"I've spent half my career without any trousers on." - Charleton Heston

Andrew Plotkin

unread,
Oct 29, 1997, 3:00:00 AM10/29/97
to

Kenneth Fair (kjf...@midway.uchicago.edu.REMOVEME) wrote:
> In article <erkyrathE...@netcom.com>, erky...@netcom.com (Andrew
> Plotkin) wrote:

> > [an off-the-top-of-Zarf's-head proposal]


> >
> >Naturally, every physical object can have a "concept_is" property, which
> >points to a concept object. When the physical object is in scope, the
> >library checks "obj.concept_is" and turns on its "seen" attribute. Two
> >different axes (for example) might well point ot the same axe concept
> >object. A dozen gold coins would definitely all point at the "money"
> >concept. Contrariwise, a lot of objects would have no related concept at
> >all, signifying that their concept is "nothing interesting."

> What about objects that fall into several concepts? A red cone might
> fall into the redness concept, the cone concept, and the "blocks in
> the Playroom" concept.

The concept_is property can be a list:

concept_is redconcept coneconcept blockconcept,

or a procedure:

concept_is [;
MarkAsSeen(coneconcept);
if (colorblind == 0)
MarkAsSeen(redconcept);
],

This is all in line with the usual Inform library conventions.

> If the player typed, "ASK TROLL ABOUT CONE," would you look at the
> cone objects first, or would you first look through the concept list
> to see if there was a "cone" concept?

That grammar line uses the scope token I'm talking about. It *never*
looks through physical objects; it only deals with concept objects.
That's the whole point. If you want to be able to talk about a specific
physical object, you make a parallel concept object.

The only time is_concept is used is the once-per-turn scan, where all
physical objects in scope have their concepts marked "seen".

Will Grzanich

unread,
Oct 29, 1997, 3:00:00 AM10/29/97
to

Edan Harel wrote:
>
> But what if the troll saw a swat that the player hasn't seen and the
> player's seen a swat that the troll hasn't?

I don't quite see what you're getting at here--if the player's seen it
and the troll hasn't, then the troll should be ignorant and confused
(giving an "I don't know what you're talking about" response), and if
the troll's seen it and the player hasn't--well, then, the player hasn't
much business asking trolls about it, has he?

Edan Harel

unread,
Oct 29, 1997, 3:00:00 AM10/29/97
to

Will Grzanich <grza...@uiuc.edu> writes:

>I like the way the response is given in this example much more than in
>the previous one. It leaves the details of the troll's language up to
>the player's imagination. And your thoughts on restricting topics of
>conversation to, say, things the player has seen seem good.

But what if the troll saw a swat that the player hasn't seen and the
player's seen a swat that the troll hasn't? But of course, you could
always:

>Tell troll about swat

You tell the troll about the fly swat.
You tell the troll about the police swat team.

or just

>tell troll about fly swat

--
Edan Harel edh...@remus.rutgers.edu McCormick 6201
Research Assistant Math and Comp Sci Major Computer Consultant
USACS Member Math Club Secretary

Brock Kevin Nambo

unread,
Oct 31, 1997, 3:00:00 AM10/31/97
to

Will Grzanich wrote in message <3457FC2F...@uiuc.edu>...

>Edan Harel wrote:
>>
>> But what if the troll saw a swat that the player hasn't seen and the
>> player's seen a swat that the troll hasn't?
>
>I don't quite see what you're getting at here--if the player's seen it
>and the troll hasn't, then the troll should be ignorant and confused
>(giving an "I don't know what you're talking about" response), and if
>the troll's seen it and the player hasn't--well, then, the player hasn't
>much business asking trolls about it, has he?


I think what Edan meant was (oh boy here we go with the interpreting other
people again)...

If the player has seen the Amazing Swat of Sunshine, and the Troll has seen
the Horrible Swat of Darkness, and the player--

**
>ASK TROLL ABOUT SWAT
**
then the player will be thinking "maybe I will learn about the Amazing Swat
of Sunshine", except the troll will then spout out something along the lines
of--

**
"The Horrible Swat of Darkness is an essential ingredient in Turkish
Delight. Yum."
**
leaving the player unsatisfied. Basically, the concept is a
"misunderstanding."

>>BKNambo "don't take me seriously, it's just TOO MUCH PRESSURE!!"
http://come.to/brocks.place badger @ innocent.com
...and stuph

Reply all
Reply to author
Forward
0 new messages