How to make a mute player character?

Is there a way to have the player character be mute? I’ve tried:

Instead of talking…
Instead of saying something…
Instead of talking to someone…
Instead of speaking…

… and all of these throw an error. I can’t find anything in the documentation on how to not talk. There must be some sort of global word for this. Can someone help me with the syntax?

I don’t believe there is a built-in concept that denominates the various actions corresponding to talking (asking someone about, answering someone that, telling someone about, maybe asking someone to try doing something and asking someone for something?) but this should be pretty easily done by creating a new kind of action that applies to all of these, then writing rules about them. See Kinds of Action in the documentation - the mimicry example also does something like this.

2 Likes

Aha. I knew there had to be something somewhere. The Mimicry example is perfect. Since I’ve never done any conversation (and won’t until my third game), I didn’t know what all the speaking possibilities were and couldn’t find them listed.

Thanks yet again!

1 Like

Mike’s answer is excellent, I just wanted to add that if you’re ever unsure what all the built-in actions are (and/or what they are called), then you can look at the “Actions Index” sub-tab under the Index tab in the IDE.
(In this case, they’d be under “Standard actions concerning other people” in the Grouped Index.)

1 Like

I looked at the index, but was so fixated on finding a global word (which I was just sure MUST exist) that I glossed right over those. It’s amazing how dumb I can be when I decide something has to be a particular way and proceed accordingly. Which is good to remember in all aspects of life, as that tendency is not confined to writing games.

It’ll be a hoot when I finally decide to let my characters converse. I’m starting my second game, and my first game had no inventory, so learning how to manage inventory has been a total trainwreck. I’m sure speaking will be no different.

Thanks!

1 Like

Hmmm. This is harder than it looks. Following Mimcry gets you pretty far…

Asking someone about something is talking.
Telling someone about something is talking.
Asking someone for something is talking.
Answering someone that something is talking.
Before talking, instead say "You cannot speak."

But this doesn’t cover the “person-name, give me berries” case (i.e., a command instead of a random topic.) And if you write a persuasion rule, there will still be implicit takes. So we can do…

This is the no talking rule: if the person asked is not the player, instead say "You cannot speak."
The no talking rule is listed before the basic visibility rule in the action-processing rules.

But we’d still get error messages referring to talking if you try talking to a non-person thing, or to someone who isn’t there. So let’s throw in

The parser error internal rule response (U) is "You cannot speak."
The parser error internal rule response (V) is "You cannot speak."
The parser error internal rule response (W) is "You cannot speak."

And then… I’m having a heck of a time trying to squish the case of it printing a choice for implicit noun if you issue an incomplete command, e.g., person-name, open.

1 Like

I can find the list of parser errors in the documentation, but not the letters that go with them. Can you link me to where I can find that (U, V, W, etc)? Writing it this way looks a lot easier than the way I’ve been dealing with parser errors.

Just enter responses 1 in a not-for-release game (or responses all to get responses from extensions beyond the Standard Rules). Or the Neutral Standard Responses extension helpfully documents all the defaults as it replaces most of them. Or you can consult the Standard Rules themselves…

Well, that’s useful. I didn’t know about any of that. Thanks!

1 Like

this is better…

For implicitly taking something when the person asked is not the player: instead say "You cannot speak."
Persuasion rule for asking people to try doing something: instead say "You cannot speak."

inching incrementally closer:

For clarifying the parser's choice of something when the person asked is not the player:  do nothing. 

[ the "person-name, go" case needs further attention]
For issuing the response text of the block vaguely going rule response (A) when the person asked is not the player (this is the no-go rule): do nothing.
For issuing the response text of the action processing internal rule response (K) when the person asked is not the player (this is the lack of instruction rule):
    instead say "You can't speak."

And it still doesn’t manage to suppress implicit choices being stated for missing nouns with two-noun actions like put or unlock. And messing with the supplying a missing noun activities doesn’t help. Looks like it would take modifying PrintInferredCommand in Parser.i6t and thus we find an end to tonight’s obstinacy.

1 Like

So I’m weak. Along with the definition of talking and the Before talking rule, these catch every case I found:


For implicitly taking something when the person asked is not the player
  (this is the NPCs don't implicitly take rule): instead say "You cannot speak."
Persuasion rule for asking people to try doing something
  (this is the unpersuasive rule): instead say "You cannot speak."

The parser error internal rule response (U) is "You cannot speak."
The parser error internal rule response (V) is "You cannot speak."
The parser error internal rule response (W) is "You cannot speak."

For clarifying the parser's choice of something when the person asked is not the player
  (this is the lack of clarification rule): do nothing.
The block vaguely going rule does nothing when the person asked is not the player.

For issuing the response text of the action processing internal rule response (K) when the person asked is not the player (this is the lack of instruction rule):
    instead say "You can't speak.[no line break]".

For issuing the response text of The parser clarification internal rule response (D) when the person asked is not the player
  (this is the don't ask whom we want the npc to do something to rule): instead say "You can't speak.[no line break]".
For issuing the response text of The parser clarification internal rule response (E) when the person asked is not the player
  (this is the don't ask what we want the npc to do something to rule): instead say "You can't speak.[no line break]".

…but so does this, and I think it’s less likely to miss cases.

After reading a command, remove commas.

Stripped a comma is a truth state that varies.

To remove commas: (- PunctuationStripping(); players_command = 100 + WordCount();  -)

For printing a parser error when stripped a comma is true:
  say "You cannot speak.";
  now stripped a comma is false.

The stripped a comma variable translates into I6 as "stripped_a_comma".
Include (-
Global stripped_a_comma = 0;
-) after "Definitions.i6t".

Include (-
[ PunctuationStripping i;
    for (i = WORDSIZE : i <= (buffer-->0)+(WORDSIZE-1) : i++) {
        if ((i ~= WORDSIZE) && (buffer->i == ',')) {
          buffer->i = ' ';
          stripped_a_comma = 1;
        }
    }
    VM_Tokenise(buffer, parse);
];
-)

(swiping some code from Punctuation Removal by Emily Short.)

Of course, that makes for a weird error message if the player types “get peas, carrots, and potatoes” but the norm, “You can’t see any such thing.”, is weird, too. And it could also make some error-cases work, like “get peas, and carrots” or “get sweater, then wear it”. It might cause horrible side-effects I’m not thinking of, though, so I’m not recommending it…

Also consider logistically: just because a person is mute and cannot speak, does not mean they won’t communicate, and likely wouldn’t get a parser/brain denial reminding them of that. It’s possible you could work with the existing syntax so that there are responses to NPC, HELLO like “You nod a greeting.” That might be better than just a flat parser denial for all communication (depending on the story/game you intend.)

Eric Eve’s “Conversation Responses” is a good one that gives full control of all kinds of situations like “Response for Bob when shown the wallet…” and “Default response for saying hello” and that extension is good at covering all the potential conversation bases, so that might be something to research.

2 Likes

My current player character is a ghost, so that won’t work for her. But in my next game, that will work great.

2 Likes

I’ve committed Speechless to the Friends of I7 Extensions repo. It collects and updates most of the code I suggested above (but not the comma-stripping approach).

I don’t expect it’ll be of much direct use, but I thought it would have value as a guide to where I7 refers to a character speaking, or responds as if the character had spoken.

2 Likes