I think I have found a (rather minor) error with the parse_name routine.
On page 209, the DM4 states: But the word marker's position is not reset after returning -1 as it should.
In TryGivenObject (parserm.h), the local variable j is used to keep track of the start of parsing
with parse_name and is only used to recalculate wn after a match.
In my opinion, a line should be inserted here after line 4032: This might not be an issue --
none of the parse_names in the DM4 exercises that return -1 move the word marker,
and usually, as in Zarf's parse_name variants, all the parsing is done in
parse_name and the return value is zero. But in my case I have read a word with NextWord() which I want to process further.
The routine looks a bit like that: Here, CheckArticle is a way of checking whether an article was used and if so,
assure that it matches a certain gender.
If there is no article or a correct one, match.
If there's an article but it doesn't match the gender, fail.
In all other cases, look at the other synonyms*.
Of course I could move the word marker back by one,
but wouldn't it be more consistent to reset wn after returning -1 anyway? ________
* As a brief explanation: "Schild" as a male noun means shield,
as a neuter noun it means sign,
so if the player refers to "das Schild" I don't want the disambiguation question to come up,
since using the correct article, the object is already uniquely described. As described above.
About Patches
Issue L61123 [previous patch]
Minor problem with parse_name
Submitted by: Martin Oehm
Appeared in: Library 6/11 or before
Fixed in: -
Problem
"It [parse_name] should return:
0 if the text didn't make any sense at all,
k if k words in a row of the text seem to refer to the object, or
-1 to tell the parser it doesn't want to decide after all.
The word marker wn can be left anywhere afterwards." 4004 if (obj.parse_name ~= 0) {
4005 parser_action = NULL; j=wn;
4006 k = RunRoutines(obj, parse_name);
... ! ... handle parse_name result
4029 MakeMatch(obj, k);
4030 return k;
4031 }
4032 if (k == 0) jump NoWordsMatch;
>>>> wn = j;
4033 }
parse_name [;
if (NextWord() == 'schild') {
! handle special case
if (CheckArticle(male)) return 1;
return 0;
} ! wn has moved by 1
return -1; ! look at the unambigous synonyms
! given in the name property
], ...
Solution
Last updated 17 April 2013.
This site is no longer supported; information may be out of date.
Maintained as a historical archive by the Interactive Fiction Technology Foundation.
Copyright 1993-2018 IFTF, CC-BY-SA unless otherwise noted.
This page was originally managed by Roger Firth.