Simple Chat by Mark Tilford Problems

I read the documentation about the extension and it seems pretty clear
to me, but when I typed it all down Inform couldn’t process all the
links or responses to the dialogue. For example, I typed:

Instead of giving link to lady_polite2: say “‘I’m [italic type]imeline
[roman type], just like you.’”
Instead of finding responses to lady_polite2: say “She smiles for a
second and nods for an even shorter time. This isn’t going well.”
Instead of finding responses to lady_polite2: link to lady_expolite;
lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Inform thinks all of it is an error. Here’s one:

Problem. You wrote ‘Instead of finding responses to lady_polite3’ ,
which seems to introduce a rule taking effect only if the action is
‘finding responses to lady_polite3’. But that did not make sense as a
description of an action. I am unable to place this rule into any
rulebook.

Also, I used to write “Deactivate link to lady_polite,” because I
looked over the source code of Fate by Victor Gijsbers, but that
didn’t work. So I changed it to “Instead of preparing lady_expolite,
lady_polite, lady_casual, lady_true1: do nothing.” But that doesn’t
work either.

I think there are other problems, but Inform doesn’t list all of them
at one time.

Can you make a minimal working example that runs using the chat extension? All of your syntax seems fine (with the exception of the discrepancy between your error message and your code, though I’m guessing that’s because you were pasting in an error message maybe not associated with your example code), so I recommend making just one chat menu, testing that to see if it works as it should, then make a second menu with links, and so on.

If you run into problems post your complete source code for that example here so we can just paste it into Inform and run it to see the same errors. Use the code tags to enclose the example.

All the dialogue I’ve typed so far:

[code]Part 1-Dialogue

Instead of talking to Lady: run a conversation from lady_intro.

lady_intro, lady_expolite, lady_polite, lady_polite1, lady_polite11, lady_polite12, lady_polite13, lady_polite31, lady_polite32, lady_casual, lady_casual1, lady_casual2, lady_casual3, lady_true1, lady_true2, lady_true3 are chat nodes.

Instead of giving text for lady_intro: say “I approach her enormous assemblage of Chanel No. 5 pheromones nervously. Somehow she manages to catch my eye through the frills and pomp, and with a whiff of her arms her ratty friends dissipate, even if just for a little while.”
Instead of finding responses to lady_intro: link to lady_expolite; lady_polite; link to lady_casual; link to lady_true1.

Instead of giving link to lady_stop: say “‘Nevermind.’”
Instead of giving text for lady_stop: say “I leave our little enclove, and the Red Sea of garish costumes closes behind me.”

Chapter 1-Extremely Polite

Instead of giving link to lady_expolite: say “‘Hello. Nice to have encountered you.’”
Instead of giving text for lady_expolite: say “‘Well, nice to have encountered you too.’ she replies, with a taut (but still!) smile. Both of us know we were 100% sure we would see each other at the party (perhaps even went just for that) but that goes unmentioned.”
Instead of finding responses to lady_expolite: link to lady_polite; link to lady_casual; link to lady_true1.

Chapter 2-Polite

Instead of giving link to lady_polite: say “‘Hello, how are you?’”
Instead of giving text for lady_polite: say “‘I’m [italic type]wunderbar[roman type]. You?’”
Instead of finding responses to lady_polite: link to lady_polite1; link to lady_polite2; link to lady_polite3; link to lady_polite4

Instead of giving link to lady_polite1: say “‘I’m extremely [italic type]goed[roman type], thank you for inquiring.’”
Instead of finding responses to lady_polite1: say “‘Oh! Good! Okay.’ The right side of her smile reaches up, but the left stays where it is. I hate to see her lopsided smiles. I hate it.”
Instead of finding responses to lady_polite1: link to lady_polite11; link to lady_polite 12; link to lady_polite 13.

Instead of giving link to lady_polite11: say “‘Did you know that[putsomethinghere]? I only found out yesterday, and when I did, I thought that was just absurd!.’”
Instead of finding responses to lady_polite11: say “She smiles for a second and nods for an even shorter time. This isn’t going well.”
Instead of finding responses to lady_polite11: link to lady_expolite; lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Instead of giving link to lady_polite12: say “‘Don’t smile like that. Please. You don’t have to placate me. If anyone is boring you, frown as much as you like! Show them that you’re not worth their words, because babe, you’re not - you’re worth even more than the stars.’”
Instead of finding responses to lady_polite12: say “Sometimes I find thinking up the strangest things. I shrug it off.”
Instead of finding responses to lady_polite12: link to lady_expolite; lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Instead of giving link to lady_polite13: say “Honey, if you love me won’t you please smile?”
Instead of finding responses to lady_polite13: say “That game is four decades too early, I’m afraid.”
Instead of finding responses to lady_polite13: link to lady_expolite; lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Instead of giving link to lady_polite2: say “‘I’m [italic type]imeline[roman type], just like you.’”
Instead of finding responses to lady_polite2: say “She smiles for a second and nods for an even shorter time. This isn’t going well.”
Instead of finding responses to lady_polite2: link to lady_expolite; lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Instead of giving link to lady_polite3: say “’[put something here].’”
Instead of finding responses to lady_polite3: say “‘I’m sorry, I don’t understand French.’ She stares at you petulantly, with a smiling naivete behind that straight face. 'What does that mean?”
Instead of finding responses to lady_polite3: link to lady_polite31; lady_polite32.

Instead of giving link to lady_polite31: say “‘It means whenever you come into a room I find it slightly harder to breathe and when you tell me about your dreams for the future I want to go up to Parliament and demand they let them come true. It means I don’t mind spending time with you.’”
Instead of finding responses to lady_polite31: say “That’s too much. How delusional am I? Who says such things?”
Instead of finding responses to lady_polite31: link to lady_polite32.

Instead of giving link to lady_polite32: say “‘It’s the name of a new book I’m reading. By Voltaire. It’s wonderful. You should try it.’”
Instead of finding responses to lady_polite32: say “She looks at you quizzically. She knows I know it’s not that. Don’taskDon’taskDon’task. ‘Oh. That’s interesting.’ She looks at her impeccably polished nails, and then at her shoes. This is not going well.”
Instead of finding responses to lady_polite32: link to lady_expolite; lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Instead of giving link to lady_polite 4: say “‘I’m fine as long as long as you stay beside me and you allow me to look and talk to the perfection that is you.’”
Instead of finding responses to lady_polite4: say “There is no way I’m saying that. That’s most - [italic type]too[roman type] forward of me. And there’s less extreme ways of expressing my affection towards her. No - my [italic type]friendly feelings[roman type] toward her.”
Instead of finding responses to lady_polite4: link to lady_expolite; lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Chapter 3-Casual

Instead of giving link to lady_casual: say “‘Why, salutations!’”
Instead of giving text for lady_casual: say “She grins a wonderfully candid (and toothy) smile. ‘Salutations to you too.’ She leans back on her chair, ‘How do you know Mrs. Leicester? She doesn’t seem to like men who have words to say.’”
Instead of finding responses to lady_casual: link to lady_casual1; link to lady_casual2; link to lady_casual3.

Instead of giving link to lady_casual1: say “‘What on earth she sees in me, I don’t understand either.’”
Instead of giving text for lady_casual1: say “‘Oh. Okay.’ She looks at her impeccably polished nails, and then at her shoes. This is not going well.’”
Instead of finding responses to lady_casual1: link to lady_expolite; lady_polite; link to lady_true1.
Instead of preparing lady_casual: do nothing.

Instead of giving link to lady_casual2: say “‘Put something here.’”
Instead of giving text for lady_casual2: say “‘Put something here.’”
Instead of finding responses to lady_casual2: link to lady_expolite; lady_polite; link to lady_true1.
Instead of preparing lady_casual: do nothing.

Instead of giving link to lady_casual3: say “‘Put something here.’”
Instead of giving text for lady_casual3: say “‘Put something here.’”
Instead of finding responses to lady_casual3: link to lady_expolite; lady_polite; link to lady_true1.
Instead of preparing lady_casual: do nothing.

Chapter 4-True

Instead of giving link to lady_true1: say “'You’re the most beautiful woman I have ever known. I’m willing to bet in the entire world too. Give me your fingers and we’ll leave this terrible house and set sail for the Caribbean tomorrow.”
Instead of giving text for lady_true1: say “Oh no, no, no. I cannot say that! What would she think? What would they all think? That would be most forward of me…[paragraph break] I give her a blank stare, and she stares blankly back at me.”
Instead of finding responses to lady_true1: link to link to lady_expolite; lady_polite; link to lady_casual; link to lady_true2.
Instead of preparing lady_true1: do nothing.

Instead of giving link to lady_true2: say “‘Here’s the key to the penthouse suite at the Savoy. Meet me at ten.’”
Instead of giving text for lady_true2: say “What?”
Instead of finding responses to lady_true1: link to link to lady_expolite; lady_polite; link to lady_casual; link to lady_true3.
Instead of preparing lady_true2: do nothing.

Instead of giving link to lady_true3: say “I-I-uh-I have a-uh, uh, something for you.”
Instead of giving text for lady_true3: say “‘Ooo, what could it possibly be?’ Her face glows with excitement. ‘Wait. can you talk to Peter Bowles first? He is…’ and she gestures somewhere south. ‘I need to get my magnifying glass. I can barely see things near me without it.’ She beams at you, while your heart is slowly deep-fried and eaten by hungry tourists around the Thames who think Fish and Chips is Britain’s official snack.”
Instead of finding responses to lady_true3: link to lady_true4.
Instead of preparing lady_expolite, lady_polite, lady_casual, lady_true1: do nothing.

Instead of giving link to lady_true4: say “I don’t have her magnifying glass yet.”
Instead of giving text to lady_true4: say “Peter Bowles is somewhere south - better to go quickly than leave her waiting so long.”[/code]

Thank you for your prompt response!

I suspect you added things and took things away as you were trying to get the game to work, and as a result there are a lot of errors at the moment. I’ll try to summarize the majority of them:

  • the game refers to chat nodes that don’t exist in the chat nodes you defined. Make sure you always declare something is a chat node if you refer to it later.

  • there is no talking to action in the source. ‘Instead of talking to Lady’ will fail for that reason. See the example included with the Chat extension, and paste in that talking action definition.

  • sometimes the game refers to an incorrect chat node name; for example, ‘lady_polite 4’ rather than lady_polite4.

  • Sometimes an Instead rule is defined like this: ‘Instead of preparing lady_expolite, lady_polite, lady_casual, lady_true1: do nothing.’. However in general you can’t chain chat nodes in rules like this. You would need to make these separate rules. There are ways around this but for now I suggest separate Insteads.

  • Sometimes syntax is incorrect; for example ‘Instead of finding responses to lady_intro: link to lady_expolite; lady_polite; link to lady_casual; link to lady_true1.’. Note that ‘lady_polite’ has no link to.

  • Sometimes there is bracketed text within quotes that doesn’t refer to a variable or expression (e.g. “‘Did you know that[putsomethinghere]? I only found out yesterday, and when I did, I thought that was just absurd!.’”). Brackets within quotes always mean there’s a substitution there, so you’ll get an error if it’s not defined. There are a couple of ways around this, but the simplest probably is to do ‘REPLACE’ or something like that. Brackets outside of quoted text are ok – those are comments.

  • many times simple syntax errors are repeated; I think this is probably because of cutting and pasting. Always test to make sure the code works before beginning to add a lot of content by pasting, text generation, etcetera.

  • in short, the main problems are:

    • syntax errors – typos and names
    • code organization – leaving out definitions

For this reason my best suggestion at this point is to create a very small working example. Say, three chat nodes, a room, the Lady, and get it to run. Then add things incrementally and make sure the game runs after each change. Do this until you get comfortable with things, and then you can add things in bigger chunks.

For what it’s worth here is your example which now runs. I have no idea if the conversation will work flawlessly – it probably won’t, as I deleted much of the source eliminating errors. All I did was go through each error one by one and fixed it by correcting a typo or deleting the source.

Part 1-Dialogue

Include Simple Chat by Mark Tilford

The Chamber is a room. Lady is a person in the Chamber. 

Talking to is an action applying to one visible thing. Understand "talk to [someone]" as talking to. Report talking to: say "You have nothing to say.".

Instead of talking to Lady: run a conversation from lady_intro.

lady_intro, lady_expolite, lady_polite, lady_polite1, lady_polite11, lady_polite12, lady_polite13, lady_polite31, lady_polite32, lady_casual, lady_casual1, lady_casual2, lady_casual3, lady_true1, lady_true2, lady_true3 are chat nodes.

Instead of giving text for lady_intro: say "I approach her enormous assemblage of Chanel No. 5 pheromones nervously. Somehow she manages to catch my eye through the frills and pomp, and with a whiff of her arms her ratty friends dissipate, even if just for a little while."
Instead of finding responses to lady_intro: link to lady_expolite; link to lady_polite; link to lady_casual; link to lady_true1.



Chapter 1-Extremely Polite

Instead of giving link to lady_expolite: say "'Hello. Nice to have encountered you.'"
Instead of giving text for lady_expolite: say "'Well, nice to have encountered you too.' she replies, with a taut (but still!) smile. Both of us know we were 100% sure we would see each other at the party (perhaps even went just for that) but that goes unmentioned."
Instead of finding responses to lady_expolite: link to lady_polite; link to lady_casual; link to lady_true1.

Chapter 2-Polite

Instead of giving link to lady_polite: say "'Hello, how are you?'"
Instead of giving text for lady_polite: say "'I'm [italic type]wunderbar[roman type]. You?'"
Instead of finding responses to lady_polite: link to lady_polite1

Instead of giving link to lady_polite1: say "'I'm extremely [italic type]goed[roman type], thank you for inquiring.'"
Instead of finding responses to lady_polite1: say "'Oh! Good! Okay.' The right side of her smile reaches up, but the left stays where it is. I hate to see her lopsided smiles. I hate it."
Instead of finding responses to lady_polite1: link to lady_polite11; link to lady_polite12; link to lady_polite13.

Instead of giving link to lady_polite11: say "'Did you know that *******? I only found out yesterday, and when I did, I thought that was just absurd!.'"
Instead of finding responses to lady_polite11: say "She smiles for a second and nods for an even shorter time. This isn't going well."
Instead of finding responses to lady_polite11: link to lady_expolite; link to lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Instead of giving link to lady_polite12: say "'Don't smile like that. Please. You don't have to placate me. If anyone is boring you, frown as much as you like! Show them that you're not worth their words, because babe, you're not - you're worth even more than the stars.'"
Instead of finding responses to lady_polite12: say "Sometimes I find thinking up the strangest things. I shrug it off."
Instead of finding responses to lady_polite12: link to lady_expolite; link to lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.

Instead of giving link to lady_polite13: say "Honey, if you love me won't you please smile?"
Instead of finding responses to lady_polite13: say "That game is four decades too early, I'm afraid."
Instead of finding responses to lady_polite13: link to lady_expolite; link to lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.





Instead of giving link to lady_polite31: say "'It means whenever you come into a room I find it slightly harder to breathe and when you tell me about your dreams for the future I want to go up to Parliament and demand they let them come true. It means I don't mind spending time with you.'"
Instead of finding responses to lady_polite31: say "That's too much. How delusional am I? Who says such things?"
Instead of finding responses to lady_polite31: link to lady_polite32.

Instead of giving link to lady_polite32: say "'It's the name of a new book I'm reading. By Voltaire. It's wonderful. You should try it.'"
Instead of finding responses to lady_polite32: say "She looks at you quizzically. She knows I know it's not that. Don'taskDon'taskDon'task. 'Oh. That's interesting.' She looks at her impeccably polished nails, and then at her shoes. This is not going well."
Instead of finding responses to lady_polite32: link to lady_expolite; link to lady_casual; link to lady_true1.
Instead of preparing lady_polite: do nothing.



Chapter 3-Casual

Instead of giving link to lady_casual: say "'Why, salutations!'"
Instead of giving text for lady_casual: say "She grins a wonderfully candid (and toothy) smile. 'Salutations to you too.' She leans back on her chair, 'How do you know Mrs. Leicester? She doesn't seem to like men who have words to say.'"
Instead of finding responses to lady_casual: link to lady_casual1; link to lady_casual2; link to lady_casual3.

Instead of giving link to lady_casual1: say "'What on earth she sees in me, I don't understand either.'"
Instead of giving text for lady_casual1: say "'Oh. Okay.' She looks at her impeccably polished nails, and then at her shoes. This is not going well.'"
Instead of finding responses to lady_casual1: link to lady_expolite; link to lady_polite; link to lady_true1.
Instead of preparing lady_casual: do nothing.

Instead of giving link to lady_casual2: say "'Put something here.'"
Instead of giving text for lady_casual2: say "'Put something here.'"
Instead of finding responses to lady_casual2: link to lady_expolite; link to lady_polite; link to lady_true1.
Instead of preparing lady_casual: do nothing.

Instead of giving link to lady_casual3: say "'Put something here.'"
Instead of giving text for lady_casual3: say "'Put something here.'"
Instead of finding responses to lady_casual3: link to lady_expolite; link to lady_polite; link to lady_true1.
Instead of preparing lady_casual: do nothing.

Chapter 4-True

Instead of giving link to lady_true1: say "'You're the most beautiful woman I have ever known. I'm willing to bet in the entire world too. Give me your fingers and we'll leave this terrible house and set sail for the Caribbean tomorrow."
Instead of giving text for lady_true1: say "Oh no, no, no. I cannot say that! What would she think? What would they all think? That would be most forward of me...[paragraph break] I give her a blank stare, and she stares blankly back at me."
Instead of finding responses to lady_true1: link to lady_expolite; link to lady_polite; link to lady_casual; link to lady_true2.
Instead of preparing lady_true1: do nothing.

Instead of giving link to lady_true2: say "'Here's the key to the penthouse suite at the Savoy. Meet me at ten.'"
Instead of giving text for lady_true2: say "What?"
Instead of finding responses to lady_true1: link to lady_expolite; link to lady_polite; link to lady_casual; link to lady_true3.
Instead of preparing lady_true2: do nothing.

Instead of giving link to lady_true3: say "I-I-uh-I have a-uh, uh, something for you."
Instead of giving text for lady_true3: say "'Ooo, what could it possibly be?' Her face glows with excitement. 'Wait. can you talk to Peter Bowles first? He is...' and she gestures somewhere south. 'I need to get my magnifying glass. I can barely see things near me without it.' She beams at you, while your heart is slowly deep-fried and eaten by hungry tourists around the Thames who think Fish and Chips is Britain's official snack."

So, just to repeat myself – always get a small example working first! Don’t add tons of text right away – it’ll only make finding errors more difficult. Good luck!

Hi!

I have a different problem now, I’m afraid. I inputted the code you suggested, and Inform was able to process it. Unfortunately, after lady_intro, I can only access lady_expolite. It doesn’t link to lady_polite, lady_casual, or lady_true1. I have tried again and again, and I have no idea what the problem is.

Also, you mentioned how “there is no talking to action in the source. ‘Instead of talking to Lady’ will fail for that reason.” I looked up the extension example, and it stated, “Instead of talking to larry: run a conversation from hello larry.” It seems the same to me.

Thank you for your help!

Yes, the source I quoted above is incomplete. To get it to run I deleted much of the example because of the errors I mentioned. It runs, but the conversations will have to be added to so that it will really work.

The problem here is that ‘Instead’ is not an action, it is a rule. The talking to action looks like this:

Talking to is an action applying to one visible thing. Understand "talk to [someone]" as talking to. Report talking to: say "You have nothing to say.".

In other words, there is no ‘talking to’ action defined in Inform. You need to define it yourself.

In the Simple Chat extension example you’ll see that action definition; the original problem was that it was missing from the Lady source, only the instead rule was included.

I worked it out, and now I get it! Thank you!