Improved behavior when magic words are said before they're seen.

Note: there is a tiny risk that this could break savefile
compatibility, as I swiped an unused int member in the game structure
and turned it into a bool. int and bool *should* be the same sixe...
This commit is contained in:
Eric S. Raymond 2023-04-05 19:49:38 -04:00
parent 4ce4de190e
commit fe378b9e13
7 changed files with 15 additions and 3 deletions

View file

@ -231,7 +231,10 @@ static phase_codes_t bigwords(vocab_t id)
}
} else {
/* Magic-word sequebce was started but is incorrect */
rspeak(START_OVER);
if (settings.oldstyle || game.seenbigwords)
rspeak(START_OVER);
else
rspeak(WELL_POINTLESS);
game.foobar = WORD_EMPTY;
return GO_CLEAROBJ;
}

View file

@ -178,7 +178,7 @@ struct game_t {
int saved; // point penalty for saves
int tally; // count of treasures gained
int thresh; // current threshold for endgame scoring tier
turn_t trndex; // FIXME: not used, remove on next format bump
bool seenbigwords; // have we red the grafitti in the Giant's Room?
turn_t trnluz; // # points lost so far due to turns used
turn_t turns; // counts commands given (ignores yes/no)
char zzword[TOKLEN + 1]; // randomly generated magic word from bird

View file

@ -3016,6 +3016,7 @@ arbitrary_messages: !!omap
black smoke.
- SHELL_IMPERVIOUS: 'The shell is very strong and is impervious to attack.'
- START_OVER: 'What''s the matter, can''t you read? Now you''d best start over.'
- WELL_POINTLESS: 'Well, that was remarkably pointless!'
- DRAGON_SCALES: 'The axe bounces harmlessly off the dragon''s thick scales.'
- NASTY_DRAGON: 'The dragon looks rather nasty. You''d best not try to get by.'
- BIRD_BURNT: |-

2
main.c
View file

@ -935,6 +935,8 @@ static void listobjects(void)
game.prop[RUG] = RUG_DRAGON;
if (obj == CHAIN)
game.prop[CHAIN] = CHAINING_BEAR;
if (obj == EGGS)
game.seenbigwords = true;
--game.tally;
/* Note: There used to be a test here to see whether the
* player had blown it so badly that he could never ever see

View file

@ -53,6 +53,11 @@ Bug fixes:
* Response to an attempt to unlock the oyster while carrying it was incorrect.
* Behavior when saying the giant's magic words before having seen them wasn't
quite correct - the game responded as though the player had already
read them ("...can't you read?"). The new message is "Nothing happens."
The -o option reverts this change.
* Attempting to extinguish an unlit urn caused it to lose its oil.
* "A crystal bridge now spans the fissure." (progressive present) was

View file

@ -67,7 +67,7 @@ OK
> say fum
What's the matter, can't you read? Now you'd best start over.
Well, that was remarkably pointless!
> z

View file

@ -6,5 +6,6 @@ sed \
-e '/bridge now spans the fissure/s//bridge spans the fissure/' \
-e '/ground/s//surface/' \
-e '/floor/s//surface/' \
-e "/Well, that was remarkably pointless!/s//What's the matter, can't you read? Now you'd best start over./" \
# end