I don’t think the
(for use with...) heading method you’re describing can work. You can’t control whether an extension applies to some section of the source and not other sections; you can only control whether a section compiles at all based on whether some extension is available. I think. I think that’s how it works.
But it is possible to have multiple conversation types work in a single game! I did so in this tutorial game. I think it’ll be a really clever way for a non-tutorial game to distinguish characters.
I haven’t looked at the code in years, so finding out how I did this is going to be an adventure for all of us! Let’s see…
A Journey into the Past (you can skip this part)
OH MY GOSH I COMMENTED MY CODE
Section - Making Conversation Work
[We'll see below that there are three NPCs in this game, each of whom "speaks a different language": Heather responds only to TALK TO; Casey responds to ASK/TELL; and Orchid has a choice-based conversation tree. Getting these systems to coexist can be accomplished simply (I hope) by modifying a couple of extensions.]
Include Conversation Framework by Eric Eve.
Include Quip-Based Conversation by Michael Martin.
The reject asking for talking rule is not listed in any rulebook.
The reject telling for talking rule is not listed in any rulebook.
The reject answering for talking rule is not listed in any rulebook.
The reject commanding for talking rule is not listed in any rulebook.
Instead of requesting something for something, try quizzing the noun about the second noun.
Instead of imploring something for something, try asking the noun about the topic understood instead.
So I’ve started out by including a couple of extensions and then deleting a few rules from them. The “reject” rules appear in Quip-Based Conversation and are supposed to enforce the quip-based model as the only permissible conversation mode. De-listing them is how I’m allowing multiple modes to exist, which is kind of like what you’re trying to do! Kind of!
Heather’s behavior is extremely simple, but for the sake of completeness, it goes like:
Instead of saying hello to Heather when the greeting type is explicit:
say "blah blah blah Heather talks"
So, when I don’t want the Conversation Framework stuff to kick in, I just don’t let the “saying hello to” action do what Conversation Framework wants it to do in that situation.
Instead of speaking when the noun is Heather, say "Heather only responds to 'talk to Heather'. It's not that she's a boring person; she just doesn't have a lot to say."
“Speaking” is a type of behavior defined in Conversation Framework that includes asking, telling, quizzing, etc. Conversation Framework itself doesn’t seem to do anything with this definition? But it’s useful for just this sort of situation.
Casey responds to ASK/TELL in this way:
Instead of asking Casey about a topic listed in the Table of Casey Good Topics, say "[words entry][paragraph break]".
Instead of quizzing Casey about a thing listed in the Table of Casey Good Times, say "[words entry][paragraph break]".
Instead of informing Casey about a thing listed in the Table of Casey Good Times, say "[words entry][paragraph break]".
And then there are some tables. Pretty simple. But you can see how I made sure the relevant rules apply only to him.
Orchid has a quip-based tree:
Before speaking when the noun is Orchid, say "Here there's a reminder to try TALK TO or select a conversation option." instead.
The greeting of Orchid is Orchid-greet. The litany of Orchid is the Table of Orchid Talking.
And then you have her table and her quips and everything.
Let’s see if any of this is actionable.
Obviously none of the above is copy-and-pastable into your project, but some of the techniques may translate into strategies you can apply. The main thing is, you have dig around in the source of the extension and identify the part that the extension author wanted to apply universally. And then you must somehow compel that part to apply only in certain contexts.
You can hack an extension from within your project. If the relevant rule in the extension is named, you can de-list it with a
...is not listed in any rulebook. declaration, as above. But then you might have to write a new version of that rule that does apply to the NPC you do want it to apply to…In which case sometimes it’s simpler to revise the rule, just like you can revise the Standard Rules, as explicated here.
Or sometimes you can just write a rule that circumvents an extension:
Before asking Watchett about something: do this other behavior. Which is the main thing I did above.
Sometimes it is desirable or necessary to edit an extension to a point of near-unrecognizability. In such a case, rather than including the actual extension, you can pick and choose from the source code and paste in only the parts of it that actually work for you. (Also you can change whatever you want.) And then you can credit the extension author like this:
Report requesting the story file version:
say "Plus a modified version of:[line break]Bonfires and Broomsticks by Mary Norton[line break]".
This might seem kind of skeevy but it’s totally fine. I have had to do it several times.