Miscellany32 seems triggered when before_implicit == 3 or ‘no_implicit_actions = true’ (to object that “You aren’t holding that!”). When before_implicit == 2 and ‘no_implicit_actions = false’ (to proceed with the requested action without attempting the TAKE) LanguageLM ##Verb seems triggered. (Except for Insert & PutOn.)
I’m confused with no_implicit_actions and before_implicit 2 or 3.
‘no_implicit_actions = true’ seems equivalent to ‘before_implicit 3’. With no_implicit_actions = true, before_implicit 2 is broken. Is it a choice?
Maybe no_implicit_actions should not be equal to true or false but 2 or 3 to reproduce the behavior of before_implicit. Or not!?
in ReleaseNotes.html:
Mmm… someting is wrong: i can PuTon or Insert an Object with before_implicit 3. I should not be able to do that. In 6/11, i can’t.
Include "parser.h";
Object LibraryMessages !lm_n lm_o lm_s
with
before [; Miscellany: print "(", lm_n, ") "; ];
Include "verblib.h"; Include "grammar";
[ Initialise; location = theroom; ];
Object theroom "The Room"
with description "This is just a plain room like any other.",
has light;
Object -> Hat "hat"
with name 'hat',
before_implicit 3,
has clothing;
Object -> ring "ring"
with name 'ring',
before_implicit 2,
has clothing;
Object -> Table "table"
with name 'table',
has supporter;
Object -> box "box"
with name 'box',
has container open;
Object -> george "george"
with name 'george',
has animate proper;
Release 1 / Serial number 140830 / Inform v6.33 Library 6/12-beta1 SD
The Room
This is just a plain room like any other.
You can see a hat, a ring, a table, a box (which is empty) and george here.
>wear hat
(32) You aren't holding that!
>wear ring
You're not holding that!
>put ring on table
(32) You aren't holding that! (In 6/11: You need to be holding the ring before you can put it on top of something else.)
>put hat on table
You put the hat on the table. (In 6/11: You need to be holding the hat before you can put it on top of something else.)
!Wrong, i don't have it
As for LanguageLM: Search, It would be good to have for LanguageLM: Open, a particular message when Object container is empty. (It’s just a problem of translation.)
There’s something wrong with grammar (in 6/12 & 6/11): Verb ‘take’ * ‘off’ worn -> Disrobe. If a clothing Object of a NPC has attribute worn, i can disrobe it with take off but not with disrobe or remove.
Include "parser.h"; Include "verblib"; Include "grammar";
[ Initialise; location = theroom; ];
Object theroom "The Room"
with description "This is just a plain room like any other.",
has light;
Object -> julia "julia"
with name 'julia',
has animate female proper transparent;
Object -> -> Hat "hat"
with name 'hat',
has clothing worn;[/code][code]Verb 'disrobe'
* held -> Disrobe
Verb 'remove'
* held -> Disrobe
Verb 'take'
* 'off' worn -> Disrobe
Release 1 / Serial number 140902 / Inform v6.33 Library 6/12-beta1 SD
The Room
This is just a plain room like any other.
You can see julia here.
>disrobe hat
(first taking the hat)
The hat seems to belong to julia.
>remove hat
(first taking the hat)
The hat seems to belong to julia.
>take off hat
You take off the hat. ! (Wrong)
>
I’m not sure if I fully understand you, but in written English the word “I” is always capitalized, whether it begins a sentence or not. It’s a relic from when books were copied out by hand, and a lowercase i on its own tended to look like a comma. Eventually a dot was added to the letter in response to the same problem, but by then the capitalization rule had caught on.
This rule is slowly falling out of favor, but to most people it still looks better to capitalize the pronoun.
I fixed part of this problem – in verblibm.h in ImplicitTake(), ImplicitOpen(), etc. They weren’t checking for before_implicit being greater than 2.
As you subtley pointed out, there is another problem: Instead of saying “You need to be holding the rock before you can put it on top of something else.”, the game simply says “You aren’t holding that!”. This problem seems to have to do with the fact Parser__parse() is doing things before PutOnSub() has a chance to act. There’s a seperate ticket for that one.
Fixed. Fixed awkward wording in the responses to the PC pushing himself/herself when using third-person narrative voice. Added comments about how ridiculous you look waving the hat at the dog (for instance). Previously it would only complain that you look ridiculous waving the hat.
I understand that it makes more sense to be checking i (as in India) instead of l (as in Lima), but I could see no misbehavior because of this. Did you notice anything like that? I don’t see how this would be related to http://inform7.com/mantis/view.php?id=1395
I have not been clear. This is not a problem of variable name but you put NextWord() in i (as in India) and after you test l (as in Lima)? Put NextWord() in i and test i not l !?[code]i = NextWord();
if (l == THEN1__WD or THEN2__WD or THEN3__WD or comma_word or AND1__WD) { ! (WRONG i but test l)
var = NextWord();
if (var == THEN1__WD or THEN2__WD or THEN3__WD or comma_word or AND1__WD) {[/code]
Nothing; there is a specific message when container is empty: all is well. But LanguageLM: Open has no specific message when is empty. It does not matter, it just a translation problem. Forgot that.
>TAKE COOKIE THEN EAT IT
l=11015 THEN1=11015 THEN2=11015 THEN3=11015 comma_word=8693 AND1=8360
Taken.
You eat the cookie. Not bad.
This tells me that by chance, that comparing gibberish was causing the if to always be true. This made me wonder if that if statement is really necessary in the first place. I thought something like “TAKE COOKIE SMELL IT” would cause the properly-written if statement to not execute and thus go to
best_etype = UPTO_PE;
jump GiveError;
which is at the end of Parser__parse. I put a print in the above code to let me know that THAT chunk of code was executing. Instead that set and jump is made somewhere earlier. Can you think of a command that would cause Parser__parse() to jump to LookForMore when it doesn’t contain “then”, “and” or a comma?
if (wn > num_words) rtrue;
i = NextWord();
if (i == THEN1__WD or THEN2__WD or THEN3__WD or comma_word) {[/code] i & i, not i & l (var & something_else.)
Include "parser.h"; Include "verblib.h"; Include "grammar.h";
[ Initialise; location = theroom; ];
Object theroom "The Room" with description "This is just a plain room like any other.", has light;
Object -> apple "apple" with name 'apple' has edible;
With i & l (WRONG):
Release 1 / Serial number 140914 / Inform v6.33 Library 6/12-beta1 SD
The Room
This is just a plain room like any other.
You can see an apple here.
>n and eat apple
I only understood you as far as wanting to n.
>
With i & i:
Release 1 / Serial number 140914 / Inform v6.33 Library 6/12-beta1 SD
The Room
This is just a plain room like any other.
You can see an apple here.
>n and eat apple
You can't go that way.
(first taking the apple)
You eat the apple. Not bad.
>
I just look at the two jump LookForMore;
(This seems like a copy and past error!)