Newsgroups: rec.arts.int-fiction
Path: news.duke.edu!newsgate.duke.edu!nntp-out.monmouth.com!newspeer.monmouth.com!feed2.onemain.com!feed1.onemain.com!fr.clara.net!heighliner.fr.clara.net!newsfeed.hanau.net!newsfeed01.sul.t-online.de!t-online.de!lnewspeer00.lnd.ops.eu.uu.net!emea.uu.net!zur.uu.net!ash.uu.net!world!buzzard
From: buzzard@world.std.com (Sean T Barrett)
Subject: Re: Algorithms for Creating True NPC Interaction
Message-ID: <GEB9F4.ABH@world.std.com>
Date: Sat, 2 Jun 2001 16:21:04 GMT
References: <9f8hc2$qde$1@news.netvision.net.il>
Organization: The World Public Access UNIX, Brookline, MA
Lines: 62
Xref: news.duke.edu rec.arts.int-fiction:87930

Guy <guyhasson@hotmail.com> wrote:
>You feed whatever program you use a few hundred snippets per NPC, and the
>computer will patch them together, writing dialogues you never wrote, being
>able to deal with every situation that might arise, literally creating more
>than millions of possible turns!

After having read your page, I'd say that this sort of thing might
be interesting to play once, but I'd guess (since nobody has written
one yet) it's going to lack any real feeling of story--of beginning,
middle, and end.

The idea of tracking character state isn't new (Oz, Galatea); however,
the idea of characters interacting with each other is something we
haven't seen that much of (Pass the Banana).

I do personally think there's an overemphasis on conversation as the
thing which distinguishes NPCs in IF.

I personally disbelieve in random message generation of the sort you
describe. If the same random message gets printed several times, you're
going to notice the patterns, despite the fact that much of the language
is varied. "Hey, wait, this is the same general sequence of events we
saw before." If you're only going to print it once or twice, better to
just hand-write the two variations; easier, faster, and more
authored-sounding; and you have more knowledge of what the player
experience is like, because the players have more similar experiences.

For example, your "All right, then! All right, then!! All right, then!!!"
example sounds unique, but if another time the player saw
"All right, then! All right, then!! Have it your way!!" I don't think
the player would have any trouble noticing the pattern (and some
players would see both, even if it only printed twice, assuming you
got enough players).

On the other hand, despite disbelieving in it, some time ago I made a
modification to the Inform compiler which is very good at doing exactly
this sort of thing; however, I've never released the modification because
I never got permission from Graham to release it. For example, the
beginning of your "split random" example could be coded as:

   "Margaret's {%face {%goes|becomes|changes colors quickly, settling
   on}|fingers tighten into fists. Her {%bones turn|knuckles
   turn}}{%white|purple|green}.";

I regularly do some things than this in my games; for example,
my walkthrough comp game "Fit for a Queen" includes the code:

   if (random(70) < 40)
      "^Mildred {!struggles with the computer.|{shows some robots to
       a table, then discovers it's too small.|tells a waiting robot
       it's the computer's fault.}|studies the seating chart.|seats
       a {!small party|single robot|few robots}.|gives you a dirty
       look.|grumbles.|greets an arriving {%robot|robot party}
       {!coldly|hostilely|nastily|angrily|obnoxiously}.|types on
       the computer.|examines the reservation list.|says something
       to one of the waiting robots.}";

although the game will only execute the above code a single time
(possibly printing nothing at all) if the player follows the
walkthrough.

SeanB
