GET ALL FROM ME - You seem to belong to yourself.

I just noticed that in both 6M62 and newer Inform, if you GET ALL FROM ME, it says ‘You seem to belong to yourself.’ And if you GET ALL FROM (someone else) it says ‘He seems to belong to (his name).’

"Test"

Lab is a room.
dad is a man in lab.

test me with "get all from me/get all from dad".

The Counterfeit Monkey fixes @Angstsmurf put together re: DROP ALL (There are none at all available! - #6 by Angstsmurf) don’t have any effect on this bug as they are. I say this because they’re in place for my 6M62 game and they’re indirectly related code that fiddles with the multiple object list, though I don’t know if the yuck messages I’ve just described come about from any interaction with that list.

I’m looking for a way to intercept both these weird replies so I can replace them with my own.

-Wade

1 Like

Here’s the block ultimately producing the error, which is part of Parser Letter I:

if (etype == NOTHING_PE) {
	if (parser_results-->ACTION_PRES == ##Remove &&
    	parser_results-->INP2_PRES ofclass Object) {
    	noun = parser_results-->INP2_PRES; ! ensure valid for messages
        if (noun has animate) { PARSER_N_ERROR_INTERNAL_RM('C', noun); new_line; }
        else if (noun hasnt container or supporter) { PARSER_N_ERROR_INTERNAL_RM('D', noun); new_line; }
        else if (noun has container && noun hasnt open)  { PARSER_N_ERROR_INTERNAL_RM('E', noun); new_line; }
        else if (children(noun)==0) { PARSER_N_ERROR_INTERNAL_RM('F', noun); new_line; }
        else parser_results-->ACTION_PRES = 0;
    }
    if (parser_results-->ACTION_PRES ~= ##Remove) {
        if (multi_wanted==100) { PARSER_N_ERROR_INTERNAL_RM('A'); new_line; }
        else                  {  PARSER_N_ERROR_INTERNAL_RM('B'); new_line; }
    }
}

The choice of error message seems to be deliberate in this case, since the whole block depends on a NOTHING_PE error status. This is an appropriate error status given the situation in your test scenario, so it’s really a matter of how you want to report it.

The standard responses used in this block come from the Standard Rules:

The parser nothing error internal rule translates into I6 as
	"PARSER_N_ERROR_INTERNAL_R" with
	"Nothing to do!" (A),
	"[There] [adapt the verb are from the third person plural] none at all available!" (B),
	"[regarding the noun][Those] [seem] to belong to [the noun]." (C),
	"[regarding the noun][Those] [can't] contain things." (D),
	"[The noun] [aren't] open." (E),
	"[The noun] [are] empty." (F).

Is there one of those that you would prefer as a parser error message?

1 Like

(I don’t have any solutions. I’m mostly agreeing that the existing responses come across weird in the sample game you (Wade) posted.)

Interesting. If I add…

dad carries a wallet.

…the response to “get all from dad” changes, and makes more sense:

>get all from dad
That seems to belong to dad.

But if I add…

The player carries a pencil.

…the response to “get all from me” becomes

>get all from me
You aren't wearing the pencil.

If I include both of these lines…

The player carries a pencil.
The player wears a hat.

…I get this response to “get all from me”:

>get all from me
You seem to belong to yourself.

If a player types “get all from dad” and dad’s not enclosing anything, I would expect a response like “There’s nothing to get from dad.”

I’m not sure what a player might mean by “get all from me.” Maybe “take everything indirectly held by the player out of any containers, so that each thing is directly held”? But if the player isn’t holding or enclosing anything, I would still expect something along the lines of “There’s nothing to get” or “You’re not holding anything” rather than an assumption that the player is trying to “get” a person.

If the player character is carrying a pencil, and the player types “get all from me,” then rather than a response like “You’re not wearing the pencil,” I might expect a response along the lines of “You already have the pencil” or “You’re already carrying the pencil.”

2 Likes

"[regarding the noun][Those] [seem] to belong to [the noun]." (C),

I’m not sure why this error message would have [Those] and [the noun] refer to the same object, though. Surely one should be the thing being taken, and the other should be the person being taken from?

Not sure whether this would backfire someplace, but…

Lab is a room.
Dad is a man in lab.

test me with "get all from me / get all from dad".

For issuing the response text of the parser nothing error internal rule response (C) when the noun is a person:
  if the noun is the player, say "[We] [have] nothing.";
  else say "[regarding the noun][They] [have] nothing."

I’d feel better if this were restricted to removing, but there’s not a convenient way to do that: at this point,action_to_be and parser_results-->ACTION_PRES are ##Wait.

One could look at whether the command verb is one of “take”, “carry”, “hold”, “get”, “remove”. (“pick up” doesn’t have a "pick up [things inside] from [something]" variant.)

To decide which snippet is the command verb: (- ((verb_wordnum * 100) + 1) -) .

As @bg has now demonstrated at length, all are bad in these people situations :grinning_face_with_smiling_eyes:

Is it because it’s the ‘nothing’ error, and so there’s only one known thing (the noun)? I’m guessing the version of this message that does make sense is elsewhere and does refer to the other thing? I mean if what I speculated here is correct, it’s obviously (and in practice we’ve seen it) a bad response. Maybe G Nelson hadn’t decided what more discriminatory response would be applicable (yet).

-Wade

Thanks Zed. This is working.

Do you mean as opposed to taking/dropping?

In my WIP, if I GET ALL and there’s nothing to get, I get my custom message set up in the multiple action processing rules. If I GET ALL in a vanilla project, I’m still getting ‘There are none at all available!’ so it doesn’t seem to have broken anything.

In my WIP, DROP ALL uses @Angstsmurf 's Counterfeit Monkey hack, so I don’t think DROP ALL is capable of tapping the default message.

-Wade

No. From the Standard Rules:

Understand "take [things inside] from [something]" as removing it from.
Understand "take [things inside] off [something]" as removing it from.
Understand the commands "carry" and "hold" as "take".

Understand "get [things inside] from [something]" as removing it from.

Understand "remove [things inside] from [something]" as removing it from.

All these are equivalent and mean the removing it from action:

  • take/carry/hold X from/off Y
  • get X from Y
  • remove X from Y

And the only rules for removing it from are…

Check an actor removing something from (this is the can't remove what's not inside rule):
        if the holder of the noun is not the second noun:
                if the actor is the player:
                        say "But [regarding the noun][they] [aren't] there now." (A);
                stop the action.

Check an actor removing something from (this is the can't remove from people rule):
        let the owner be the holder of the noun;
        if the owner is a person:
                if the owner is the actor, convert to the taking off action on the noun;
                if the actor is the player:
                        say "[regarding the noun][Those] [seem] to belong to [the owner]." (A);
                stop the action.

Check an actor removing something from (this is the convert remove to take rule):
        convert to the taking action on the noun.

i.e., after just two Check rules particular to removing it from it gets converted to a plain taking action.

I’m afraid I still don’t understand the significance of this, or of the veiled implications of doom of your preference that your tweak only apply to removing it from.

My tests on taking all from empty vessels, with the change in place, seemed to bring up no problems.

-Wade

Just explaining why I referred to removing and why my doing so wasn’t in opposition to taking/dropping. Noting that removing then gets turned into taking was just informational and not really relevant.

As to my veiled implications of doom, well, when I change things I always want to circumscribe that change’s trigger to its appropriate domain and no larger and I didn’t feel completely confident about this case.

But I was wrong about action-to-be. This works and I feel better about it:

Lab is a room.
dad is a man in lab.

To decide which action name is the action-to-be: (- action_to_be -).

test me with "get all from me/get all from dad".

For issuing the response text of the parser nothing error internal rule response (C) when the noun is a person and the action-to-be is the removing it from action:
  if the noun is the player, say "[We] [have] nothing.[run paragraph on]";
  else say "[regarding the noun][They] [have] nothing.[run paragraph on]";
2 Likes