Conversation Framework Question

Hey all,

I’m having a bit of trouble with Erik Eve’s conversation extensions.

Basically, to make a NPC recognize a topic, I have to make that topic a person. If I make it a subject or a thing, familiar or not, the NPC won’t recognize it, even though the game acknowledges that the quizzing is successful. Quizzing about a subject or a thing, rather than a person, will redirect to the default.

Incidentally, if I write an instead rule for a subject or a thing, that will successfully intercept it.

Liberty is a familiar man. 

Equality is a subject.

Fraternity is a familiar thing.

Table of Guard's Answers
subject	response rule	response table	suggest
Liberty	Liberty rule	--	--
Equality	Equality rule	--	--
Fraternity	Fraternity rule	--	--

This is the Liberty rule:
	say "Asking about Liberty successful.";

This is the Equality rule:
	say "Asking about Equality successful.";

This is the Fraternity rule:
	say "Asking about Fraternity successful.";

Gets this response:

[i]> ask guard about liberty
[quizzing the security guard about Liberty]
Asking about Liberty successful.
[quizzing the security guard about Liberty - succeeded]

ask guard about equality
[quizzing the security guard about Equality]
He just ignores you.

[quizzing the security guard about Equality - succeeded]

ask guard about fraternity
[quizzing the security guard about Fraternity]
He just ignores you.

[quizzing the security guard about Fraternity - succeeded]

ask guard about justice
[asking the security guard about “justice”]
He just ignores you.

[asking the security guard about “justice” - failed]
[/i]

I have mucked around a bit with some other code (from the Sweeney Todd example in the recipe book) that I could possibly see causing a namespace issue with “subject”, but I’m pretty sure I went through that carefully (renamed those to Tsub).

Even so, I don’t really understand why asking about people works, but asking about things doesn’t.

Any ideas?

Jason

Just guessing, but could it have something to do with the fact that equality – the topic that didn’t behave correctly – was not familiar?

Robert Rothman

Hey Robert, thanks for answering.

I don’t think that’s the case because subjects are automatically familiar (and I’ve tried explicitly making them familiar: doesn’t work). Also Fraternity is familiar, but it doesn’t give the right behaviour either.

Anything else you can think that might be the problem?

I don’t know what’s wrong, but Dr Eve’s ‘conversation responses’ provides a much better way of doing the same thing. Instead of a table, you write rules like

Response of Bob when asked about Equality:
say “whatever”.

His ‘conversation package’ combines all of his conversation extensions into one.

Ah, thanks Blecki.

Sorry, I didn’t give the whole code. I’m actually using the tables for more (most of the responses are actually in the more complicated sequential tables from Conversation Framework/Rules), but I’ve narrowed down the problem to be among the declaring of topics, not the actual quizzing table.

A little update… I stripped it to bare bones, but it’s still not working. What am I missing?

[code]“A” by Jason Devlin

Include Conversation Rules by Eric Eve.

Love is a subject.

Hate is a familiar man.

Indifference is a subject.

Instead of quizzing Abigail about Indifference:
say “Asking about Indifference successful!”

Abigail is a woman. The quizzing table of Abigail is Table of AAnswers.

Table of AAnswers
subject response rule response table suggest
Love – Table of ALove –
Hate – Table of AHate –

Table of ALove
response
“Asking about Love succesful!”

Table of AHate
response
“Asking about hate successful!”

The Laboratory is a room. Abigail is in the Laboratory.[/code]

Tests as…

Just ignore that run-time problem - it’s because in this snippet I’m not defining the Table of Table Types, which shouldn’t interfere with my subject/person problem.

Jason

I’m afraid I’m as baffled by this as you are. Precisely the same problem afflicts the sample game that comes with the extension.

I do have a very vague recollection that this has come up before, and that someone thought that it was down to an obscure bug in Inform 7. What seems to be going on is that the game is failing to match things in the subject column of the table unless the thing is also a person, but I’ve no idea why that should be.

The problem was discussed on raif, here: “Problems with Eric Eve’s Conversation Rules extension.”

The problem can be illustrated with this minimal test game:

frobbing is an action applying to one visible thing.

Understand "frob [any thing]" as frobbing.

Angela is a woman.
The pie is a thing.

Table of Foo
gizzmo	response
Angela	"She's a woman."
pie		"Crusty!"

Report frobbing when the noun is a gizzmo listed in the Table of Foo:
    say "[response entry][line break]";
    stop the action.

Report frobbing: 
say "I don't know anything about that."

The Place is a room.

Test me with "frob pie/frob angela"

Note that the problem goes away if the pie and Angela are listed in the opposite order in the Table of Foo.

Hrm, I tried to see if it could be worked around by forcing the gizzmo column to be “a thing,” but Inform rejects it if you make the column heading “gizzmo (a thing)”. However, it does seem to be possible to work around the bug in the example game by starting the table with a blank row that specifies what kind of object the column contains:

[code]frobbing is an action applying to one visible thing.

Understand “frob [any thing]” as frobbing.

Angela is a woman.
The pie is a thing.

Table of Foo
gizzmo response (indexed text)
a thing –
Angela “She’s a woman.”
pie “Crusty!”

Report frobbing when the noun is a gizzmo listed in the Table of Foo:
say “[response entry][line break]”;
stop the action.

Report frobbing:
say “I don’t know anything about that.”

The Place is a room.

Test me with “frob pie/frob angela”[/code]

The test now works. If the presence of a blank line creates a problem I suppose one could close it up with a “when play begins” rule, though that would be super ugly.

Anyway, this might be a workaround for now.

Matt’s solution should work. There are a number of bug reports on Mantis related to this:

inform7.com/mantis/view.php?id=444
inform7.com/mantis/view.php?id=446
inform7.com/mantis/view.php?id=448

…which might help if you run into any more trouble.

–Erik

Thanks for all your help, everyone.

Even with Eric’s and Matt’s suggestions, I can’t get it to work with the conversation extension. It’s still easy enough to intercept the quizzing with Instead of rules, and I don’t have a whole lot of things that the PC needs to ask about, so I think I’ll just work around it for now. Good to know I’m not crazy though.

Thanks again!

Jason

Here’s another thread about the same problem:

https://intfiction.org/t/conversation-rules-vs-6f95/1540/1

I can’t remember the details, but I think you can avoid the problem by being careful about how you create your tables.

In the meantime, perhaps someone should ask Eric Eve to update his extensions with some hints and examples about avoiding the problem. I found an email address for him at Harris Manchester College and wrote there, but I don’t know if it’s current.

After some indirect encouragement from Eric Eve, I had another look at the problem with the Conversation Rules extension. I got “The Tribune’s Report” to work correctly by changing two things:

  1. Change the name of the “subject” table column to “subject-column.” This seems to resolve confusion between the table column and the kind defined in Epistemology.

  2. Explicitly state the kind of the subject-column in the Table of Null Response:

Table of Null Response subject-column (object) response rule response table suggest yourself default no response rule table-name 0

Eric, what do you think about this change? It would break the API for earlier versions (too bad there’s no “include version no greater than 7” directive in I7…) but since the extension is currently broken, I don’t know how serious an issue that is.

I don’t know if I’m going insane or not, but I just changed the “subject-column” name back to “subject” and The Tribune’s Report still works. It looks like merely specifying (object) for the subject column of Table of Null Response fixes everything. Can anyone else confirm this for me?