Conversation Command Syntax Help

I am using Conversation Framework and all the related extensions by Eric Eve. I’m not sure if my question is about those per se or not though, but it might be.

I have something like the below code. I have a bunch of other stuff in the code so I tried to recreate the essentials of what is going on below. There aren’t any “real breakages” in my real code, just unexpected results with certain command syntax, so hopefully it doesn’t matter that the below isn’t the real code, it should still suffice to outline the questions I have.

A concept is a kind of thing.
The Void is a room.
The office is a room.
The player is in the office.
Your Boss is a person in the office.
Good-idea is a concept in the Void. It is familiar.
Understand "good idea" as Good-idea.
After informing Your Boss about Good-idea:
	  say "Your boss remarks, 'That's a good idea!'"

My first question is that while “Tell your boss about good idea” works, and produces the expected say result… “your boss, good idea” produces the default response, and doesn’t seem to count as informing your boss. Can the “someone, something” syntax not be used as “telling”?

Also, is what I did here, making “concept nouns” as “off camera” but familiar the best way to go about adding abstractions and ideas to topics for conversation, or is there a better way?

Is “informing it about” a custom action? Try adding the syntax “[subject]” for the action, and add a “supplying a missing noun” rule to change the actor to the player and the noun to the actor.

Whoops… I think I misunderstood what the “someone, something” syntax was for… it should be “someone, action” or “someone, action something”. Ok, that makes sense I think (if I’m right about this… someone please confirm).

If that is the case, how/where do I define custom responses for that syntax as opposed to telling?

I also don’t much like always having the syntax be “tell someone about something”, because this doesn’t always seem to make sense. For example, the following changes:

A concept is a kind of thing.
The Void is a room.
The office is a room.
The player is in the office.
Your Boss is a person in the office.
It-wasn't-me is a concept in the Void. It is familiar.
Understand "it wasn't me" as It-wasn't-me.
After informing Your Boss about It-wasn't-me:
	  say "Your boss squints at you, 'I'm watching you...'"

Here, the player would have to type “tell your boss about it wasn’t me”… this is not intuitive at all. I don’t know if I’m being too picky for IF writing and command parsing, but the word “about” here just doesn’t make sense, so could be confusing, and is not pretty. Am I missing something about how to deal with concepts instead of physical nouns as topics?

You can get rid of the “about” without too much trouble - add extra command syntax, so that “tell boss [topic]” works in addition to “tell boss about [topic]”. But that doesn’t answer the other part of this…

The syntax is “after asking [person] to try [action]”, as follows:

[code]Your boss is a person.
The conference room door is a closed openable container. [It’s an example, why not.]

After asking your boss to try opening the conference room door:
say “Your boss says, ‘Considering our respective positions, shouldn’t you be opening the door instead?’”[/code]

Trying to convert from a persuasion action (“boss, good job”) to a topic (“tell boss about good job”) is messy. I think I would do it by building a table of stored actions corresponding to topics. Then I might cry a little.

One design concern here… how are you going to cue the player with what you want them to do? Without some extensive cueing, “BOSS, IT WASN’T ME” is not something that most IF players would type onto a command line.

It looks like you’re trying to build Threaded Conversation by Chris Conley. :laughing:

This particular case shouldn’t be so bad at all. “BOSS, GOOD JOB” won’t be parsed as a persuasion action, but rather as the action “answering boss that ‘good job’”, where “good job” is a topic. So you can just redirect answering it that to telling it that and you’ll be good to go.

I think what determines whether the parser tries to turn a “Person, foo” command into answering that or a persuasion attempt is whether the first word after the comma is a verb in the dictionary like “jump” or “take.” (Or possibly a direction.) If you wanted a topic that started with a valid verb that could be a problem. “I” might be an issue here.

Well, good question. I’m not sure yet how I would cue the player nicely in either case. What clue does the player have to know “it wasn’t me” works for “tell [someone] about” either? It’s not something you can ever see. This is also something that I’ve been unable to figure out with searches or from example… how do you insert topics into a conversation. The search term “topic” indeed brings up pages of Inform 7 documentation with the word “topic”, but I have yet to understand how to include/exclude/change topics in a conversation with a character or give the player any clues about topics or the conversation in general.

So, does this extension indeed do what cvaneseltine and matt w. were discussing there? It’s massive, as are the other conversation extensions by Eric Eve. I don’t know what I’m doing with them all yet, but, assuming I can ever learn how to use them (a tenuous assumption, albeit) would I be able to add ideas/concepts to conversations with intuitive commands required of the player with these?

Ooops - I completely forgot about “answer”! (For OOxF, I had to write around this command and then beat it into the ground, and apparently I forgot to let it back into existence.)

Listen to matt w on this one and not me, since he has the rightness of it.

Certainly! The system is really buggy at the moment, but I and varius other people are working on improving it. Here’s how I’d write your example:

[code]The office is a room. Your boss is a person in the office.

not-me is a privately-named quip. The printed name is “it wasn’t you”. Understand “it” or “wasn’t” or “not” or “was” or “me” as not-me. It quip-supplies your boss.
The comment is “‘It wasn’t me!’ you protest.” The response is “Your boss does not seem convinced.”

accuse Bob is a performative quip. It quip-supplies your boss. It directly-follows not-me.
The comment is “‘It was Bob! I have evidence!’”. The response is “‘Really? Show me.’”[/code]

This might play out like this:

[spoiler]The office
You can see your boss here.

HELLO, BOSS
You say hello to your boss.

You could say it wasn’t you.

BOSS, IT WASN’T ME
“It wasn’t me!” you protest.

Your boss does not seem convinced.

You could accuse Bob.

ACCUSE BOB
“It was Bob! I have evidence!”

“Really? Show me.”[/spoiler]

Well, I think I’m wrong about some stuff too. Specifically, the “answering it that” action and the “telling it about” action won’t fit into your code, because they deal with the topic “it wasn’t me” rather than the it-wasn’t-me object that you’ve defined.

Uuurrrrgggh, I don’t really have time to think about this very comprehensively but I don’t want to confuse poor dootdoot any more than I can. But here’s how I understand the state of play:

The standard rules define the actions answering it that, telling it about, and asking it about. These are all actions that apply to one thing (the person you’re telling) and one topic, which is basically a text string.
The commands “Boss, good job” and “Answer boss that good job” would both trigger the action of answering the boss that “good job.”
The command “Tell boss about good job” would trigger the action of telling the boss about “good job.”
The command “Ask boss about good job” would trigger the action of asking the boss about “good job.”

I’ve never actually used Conversation Framework, but I think it defines two new actions: Informing it about and quizzing it about. These are both actions applying to two things: The person you’re talking to and the thing you’re talking about. So this is good when you want to talk about something in the game world.
The command “tell boss about rock” would trigger the action of informing the boss about the rock, if the rock is a thing you’ve defined in the game world.
The command “ask boss about rock” would trigger the action of quizzing the boss about the rock.
And if you have something that understands “stone” as the rock, then “ask boss about stone” would also trigger the action of quizzing the boss about the rock.

Now, looking at Eric Eve’s Conversation Nodes, it actually plays nicely with the answering it that action. So if you wanted your conversation to respond to “Boss, it wasn’t me,” then I think you could just write:

Response of Boss when answered that "it wasn't me":

and “Boss, good job” would trigger that. (And if you wanted the boss to understand “Tell boss it wasn’t me” then you could use cvaneseltine’s suggestion to add an understand line and then say “Response of Boss when told about “it wasn’t me”:”.) So you might not need to define a special it-wasn’t-me object.

As for the question of how to cue the player to type “it wasn’t me”; it is difficult! Nothing cvaneseltine and I have said will help with this. Threaded Conversation prints prompts like this; see the example Draconis posted above. But I don’t know much about how to code with it. (Well, I tried to hack with an earlier version of it, but I don’t remember how it worked.)

And there’s also Simple Chat by Mark Tilford, which just gives the player a multiple-choice conversation menu, if you want to go that way.

Wow, ok, I thought I had everything with the bunch of extensions with “Conversation” in the title already by Eric Eve… at least one of those is a prereq for Threaded Conversation anyway.

Your example code here, Draconis, give me some insight into how to use it, looks like there is a lot to study to make conversations possible. The quip itself is pretty neat, but add in the quip-supply feature and it is very very handy indeed. I wish there were more discrete examples of features like this! I often get lost in the large examples trying to show an entire mini-game instead of explaining one or two features, but this was very helpful.

I’m afraid I’m not following the theorycrafting on the other ways to solve the issue, but I could never even dream to make as good a solution as these published extensions, so I think I’ll fiddle with those for a while.

Thanks! I’m still learning it myself, and I’m trying to make a tutorial for it (along with ATTACK, another complicated and underdocumented extension) to help others as well.