Mantis Bug Tracker

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000555Core InformUnderstandingpublic2011-02-12 09:582014-05-07 07:33
Assigned Tograham 
Platformx86OSWindowsOS VersionXP
Product Version6G60 
Target VersionFixed in Version6L02 
Summary0000555: Compiler accepting Understand rules but subsequently ignoring them.
DescriptionI was trying to create a basic understanding of the reflexivity of the term "yourself". By default, it is the name of the player object, but I wanted this to be overridden while asking an NPC to try doing something, so that it would refer to the NPC.

The [DOES NOT WORK AS INTENDED - COMPILES BUT NO EFFECT] block is the approach I originally tried, which seemed straightforward. The compiler accepts these statements but invariably translates "yourself" as the player object regardless.

The [WORKS AS INTENDED - MIRACLE SOLUTION CREATED BY ZARF] is a deep magic statement that zarf came up with when I asked about this on IFMUD. It accomplishes the intended effect, but it's not 100% clear to me how. Works perfectly in a situation with one NPC present, but it has one minor side effect when multiple are present: A disambiguation line with the name of the NPC being spoken to is produced after parsing. This effect is demonstrated in the attached example. I was unable to get rid of this; the attempted "Does the player mean the person asked when asking a person to try doing anything: it is very likely." does not compile.

The [ALSO DOES NOT WORK AS INTENDED - DOES NOT COMPILE BUT WISH IT DID] is the most elegant version of the statement I could come up with. It does not compile, but it naively looks to me like it is very close to workable with some tinkering, given the effectiveness of zarf's version. Making this work would be the optimal solution.

Minimal Source Text To Reproduce
"Bug Demonstration" by Otis

Featureless Space is a room.

Joe and Bob are people in Featureless Space.

Persuasion rule for asking a person to try doing anything: rule succeeds.


Understand "yourself" as Joe while asking Joe to try doing anything.

Understand "yourself" as Bob while asking Bob to try doing anything.


Understand "yourself" as the person asked while asking someone to try doing anything.

Understand "yourself" as a person when the item described is the person asked.

test me with "joe, x bob / joe, x joe / joe, x yourself"
Additional InformationThis bug was reclassified as ``accepts invalid'' because the condition ``while asking Joe to try doing anything'' isn't something that can be safely tested during understanding, and, at least in this case, the compiler could detect that.
TagsNo tags attached.
Effect(mild) Compiler accepts invalid code
Attached Files

- Relationships

-  Notes
Poster (reporter)
2011-02-12 13:01

The underlying problem is a lack of consistency in I7 which makes such tortured prose necessary, which fights the whole mantra of "code that reads like English". The first is MUCH, MUCH clearer than the functional but magical incantation of the the third (that is, no-one will ever guess that is what they have to write in order to make the code work). Please do something about this and get rid of at least one example of the tortured prose/magical incantation aspect to I7.
jmcgrew (administrator)
2011-02-12 18:50

Poster, editorializing belongs on your blog, not on the bug tracker. Thanks.
otistdog (reporter)
2011-02-13 08:40

As an added note: With further reading, I did find a way to get rid of that side effect I mentioned...

Rule for clarifying the parser's choice of the person asked while the player's command includes "yourself" (this is the suppress parser choice for use of yourself in a command rule): say "".
EmacsUser (manager)
2011-02-13 22:48

I am not sure whether ``no effect'' source text is valid or not. Before going on to give an example much like Zarf's solution, WI 16.17 says ``...nor do we know what the action will be...,'' which would seem to imply that ``while asking Joe to try doing anything'' ought not to be a condition put on an understand line. As evidence that the action understood hasn't yet stabilized,

- - - -
Understand "yourself" as Joe while an actor doing anything and the person asked is Joe.
- - - -

works; Inform has Joe as the actor when the understand condition is checked, and the player only becomes the actor later on.

The ``wish'' solution does not work for this reason and also because ``the person asked'' is an object that varies rather than just an object. You could put in a request at UserVoice for understanding as something that varies.
otistdog (reporter)
2011-02-14 11:41

I'm still learning the details of how things get executed internally, so if my source text is invalid because of the stage of processing, I accept that. zarf also said he wasn't sure that the test made sense but didn't elaborate.

Maybe there could be a problem message indicating that the action in the test is too specific for an understand rule? At least then I would have had some indication that the original version was functionally illegal.
EmacsUser (manager)
2011-02-16 15:15

After some discussion this is being marked as accepts invalid. The compiler could probably flag the presence of a ``while <action>'' condition on an understanding line, though this wouldn't catch all cases; the check on the current action could always be buried in an arbitrarily complicated to-decide phrase:

- - - -
There is a room.
Here is a person called Joe.
Persuasion rule for asking a person to try doing anything: rule succeeds.
To decide whether the player is making a request of Joe:
    if the current action is asking Joe to try doing anything:
        decide yes;
    decide no.
Understand "yourself" as Joe when the player is making a request of Joe.
- - - -
graham (administrator)
2014-02-16 07:20

This is not really a bug, more a feature request, but I've added a problem message to trap Understand sentences where the condition depends on the current action. It won't catch all of the strange indirect ways to do this, but it'll catch a lot of mistakes.

- Issue History
Date Modified Username Field Change
2011-02-12 09:58 otistdog New Issue
2011-02-12 13:01 Poster Note Added: 0001012
2011-02-12 18:47 jmcgrew Severity serious => mild
2011-02-12 18:47 jmcgrew Status new => acknowledged
2011-02-12 18:50 jmcgrew Note Added: 0001015
2011-02-13 08:40 otistdog Note Added: 0001018
2011-02-13 22:48 EmacsUser Note Added: 0001024
2011-02-14 11:41 otistdog Note Added: 0001027
2011-02-16 15:15 EmacsUser Effect (serious/mild) Game compiles but misbehaves => (mild) Compiler accepts invalid code
2011-02-16 15:15 EmacsUser Note Added: 0001033
2011-02-16 15:15 EmacsUser Status acknowledged => confirmed
2011-02-16 15:15 EmacsUser Additional Information Updated View Revisions
2011-03-21 13:30 EmacsUser Additional Information Updated View Revisions
2014-02-16 07:20 graham Note Added: 0002513
2014-02-16 07:20 graham Status confirmed => resolved
2014-02-16 07:20 graham Resolution open => fixed
2014-02-16 07:20 graham Assigned To => graham
2014-05-07 07:32 jmcgrew Fixed in Version => 6L02
2014-05-07 07:33 jmcgrew Status resolved => closed

Copyright © 2000 - 2010 MantisBT Group
Powered by Mantis Bugtracker