EDIT: I think the problem is that there are two [firemen] in the room. So ‘tell fireman about burning building’ ought to cause a disambiguation question – but it doesn’t. The game just spits out a garbage response. If instead I enter X FIREMAN, I get a proper disambiguation question, “Which do you mean, Ralph or Ed?” I can tell Ralph about the burning building, or I can tell Ed, but I can’t TELL FIREMAN.
I have a CollectiveGroup, but it carefully only has the plural vocabulary, ‘firemen’. So TELL FIREMEN ABOUT BURNING BUILDING works (because the CollectiveGroup has a TellAbout action).
[pre-edit:] I’ve tried everything I can think of, and this is driving me crazy. What’s hanging me up is Eric’s idea of realistic conversations with NPCs. In this particular situation, I do not want to force the player to engage in conversation with the NPC before stating what’s on her mind. She should be able to enter the room where the fireman is (this is not a spoiler – there’s no fireman in the game) and simply “tell fireman about burning building.”
But adv3Lite responds, “You’re not talking to anyone.” The library expects the player to politely fucking greet the fireman before shouting about the burning building.
I’ve tried monkeying with conversedThisTurn. Doesn’t work. I’ve tried creating a HelloTopic or an ImpHelloTopic, which the docs seem to imply will automatically run if the player jumps straight into conversation. Doesn’t work. I’ve tried setting attentionSpan to nil, on the assumption that maybe this will cause the fireman to be awake. Doesn’t work – not even if the player has previously greeted the fireman.
I’ve searched through the Actor and ActorState classes in the Library Reference Manual. Didn’t spot anything that looked likely.
Possibly part of the problem is that there are two firemen in the room. But the game doesn’t ask me to disambiguate, so it must be choosing one of the firemen.
How do I completely bypass the greeting protocols for a given Actor?
Look in Actor.handleTopic. You can see that there’s a block checking whether to fire an implicit greeting… also note that if you have a helloTopic defined on an actor, by default it will be used as an implicit greeting too. This can be changed by removing impHelloTopicObj from the matchObj list of the HelloTopic…
Have you tried setting the TellTopic to isConversational=nil?
Or perhaps better, (telltopic).impliesGreeting=nil
Neither that nor isConversational seems to have any effect.
You could always override handlrTopic on the told actor to bypass the block that fires the implicit greeting… but I don’t know Lite so I’m confused as to why impliesGreeting does not suppress it, unless you have some other overrides going…
But there is no implicit greeting. I have a HelloTopic, but leaving it in or commenting it out has no effect. It’s never treated as implicit, though the docs suggest that it should be.
So I don’t know what effect it would have to bypass something that’s not working anyway. It appears to me that handleTopic is only reached after a topic entry has been chosen by the parser. But the parser isn’t doing that, because the conversation has not yet started.
Just checking, are we both talking about handleTopic of the actor, not the TopicEntry? It looks to me like somewhere around lines 471 or 506 in actor.t you could tamper with something…
Or are you saying that because there’s no implicit greeting, it won’t let you start a conversation at all?
Solved it. All I had to do was give one of the guards a vocabLikelihood. The library ought to have caused a disambiguation question to fire, but it didn’t, so this seems to be a subtle library bug. There being two guards (oops, I mean “firemen”) derived from the same class, all I had to do was instruct the parser to prefer one of them.
Good to hear. In adv3 when I use askForIobj in an action method, the parser will also sometimes choose a default that seems no more logical than anything else, instead of asking for disambiguating…
I have to say, this made me laugh and laugh. Having worked by my way through a lot of Eric Eve’s politely cordial and gently humorous adv3Lite documentation, I imagine that’s exactly what he would do, before telling the fireman his college rooms were ablaze.
It’s right there in Eric Eve’s Learning docs:
In real life, people don’t generally leap straight into the middle of a conversation and
then break it off arbitrarily; but in Interactive Fiction conversations can all too easily
be like that. Adv3Lite tries to avoid this by implementing a scheme of greeting
It took me a few reads of this section to realize he was using the word protocol in both the sense of data transmission and the formal conduct of polite society.
OTOH, what about greeting protocols initiated from the opposite direction ? that is, from NPC.
Jim having used firemen as example in the scope of a Naval Historian, whose default firemen are the ones turning wheels, pulling levers and reading gauges around massive boilers deep in the dimly-lit bowels of a ship, so…
… please endure this scenario: If the PC is an engineer Officer, is conceivable, nay, the excepted, that NPC firemen must initiate greeting and conversation (salute and report the status of the boilers…) without prompting. (optionally starting a boiler-related puzzle requiring cooperation between PC and NPCs)
so, the question isn’t only of greeting as initiating convo, but also of NPC greeting and initiating convo, and I guess is a subject worth of debate, not limited to adv3Lite, but also adv3 and TADS itself.
Best regards from Italy,
adv3Lite will do that. I’ve never tried it, but I seem to recall it’s mentioned in the manual.
It’s mentioned in “Part V: Actors” in the adv3Lite Library Manual under “NPC-Initiated Conversation”.