Newsgroups: rec.arts.int-fiction
Path: news.duke.edu!newsgate.duke.edu!nntp-out.monmouth.com!newspeer.monmouth.com!news.maxwell.syr.edu!cpk-news-hub1.bbnplanet.com!news.gtei.net!nntp.abs.net!uunet!dca.uu.net!ash.uu.net!dfw.uu.net!ffx.uu.net!world!buzzard
From: buzzard@world.std.com (Sean T Barrett)
Subject: Re: [inform] conversation menus
Message-ID: <G613CA.68L@world.std.com>
Date: Sat, 23 Dec 2000 16:04:58 GMT
References: <G5z7M8.7o7@world.std.com> <3A439394.77F8@adamcadre.ac> <G5zHox.4Ay@world.std.com>
Organization: The World Public Access UNIX, Brookline, MA
Lines: 57
Xref: news.duke.edu rec.arts.int-fiction:81682

Sean Barrett wrote:
> Does anyone have any recommendations for a system to do
> menu-driven conversations in the style of Rameses or BAP?

Ok, never mind, I rolled my own.

If anybody would like an object-hierarchy-based menu-driven
conversation system for smoochiecomp, send me email and I
can give you a prerelease version (i.e. I'll officially release
it post-smoochiecomp; I *will* provide support for the
prerelease version, but I'd rather restrict that support
to people who need it *now*).

=-=-=

Description and feature list:
   conversation "objects" which each topic/response in its own child object
   can move and remove topic/responses, or hide them with an attribute
   convenient syntax for changing the conversation for TALK TO during
       responses (or change a different character's TALK TO)
   repeated conversations can omit previously chosen topics, or not
   repeated conversations can be blocked entirely
   can easily test if a particular conversation has ever occurred, or if a
       particular choice was ever selected
   can disable '0 to say nothing' on a per-conversation basis (e.g. to
       allow non-player-initiated conversations that must occur)
   can automatically trigger another conversation, creating menu mazes/CYOA
   result can run code instead of printing a string

On the simplest level, I'm talking about something that
looks like this:

Convmenu c_next;
Object -> "Here's a choice." with description "And a response.";
Object -> "Here's another choice." with description "And another response.";
Object -> "Here's a third choice." with description "And a third response.";

A more sophisticated use would be this:

Convmenu c_next has repeatable with chain c_next;
Choice -> "Here's a choice." with description "And a response.";
Choice -> "Here's another choice." with description "And another response.";
Choice -> "Here's a third choice." with description "And a third response.";

"repeatable" means if you encounter it more than once, go ahead and
print it again; "chain c_next" means jump to conversation c_next after
the response [unless the response overrides], without returning to
a prompt; and the 'Choice' type defaults to 'if you come back to
this menu again, don't repeat this choice if you've selected it already'.
Thus, when this conversation is triggered, the player gets three
choices, picks one, and the conversation immediately runs again, since
it chains to itself, but this time with only two choices; repeat, but this
time with only one choice; then once the count reaches zero
it automatically stops running the conversation and returns to
the prompt.

SeanB
