From: NHOrus Date: Sun, 2 Jul 2017 21:47:17 +0000 (+0300) Subject: Undid unspeaking of wave, fixed test again. X-Git-Tag: takebird~90 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=993194bd4dfb268bc12f73c10a36c0f4f7db6a91;p=open-adventure.git Undid unspeaking of wave, fixed test again. Changed property math to helper function. --- diff --git a/actions.c b/actions.c index 51ad0ef..d9802f6 100644 --- a/actions.c +++ b/actions.c @@ -1086,45 +1086,51 @@ static int wake(token_t verb, token_t obj) } } +static token_t birdspeak(void) +{ + switch (game.prop[BIRD]) { + case BIRD_UNCAGED: + case BIRD_FOREST_UNCAGED: + return FREE_FLY; + case BIRD_CAGED: + return CAGE_FLY; + } +} + static int wave(token_t verb, token_t obj) /* Wave. No effect unless waving rod at fissure or at bird. */ { - if ((!TOTING(obj)) && (obj != ROD || !TOTING(ROD2))) { - rspeak(ARENT_CARRYING); - return GO_CLEAROBJ; - } + int spk = actions[verb].message; + if ((!TOTING(obj)) && (obj != ROD || !TOTING(ROD2))) + spk = ARENT_CARRYING; if (obj != ROD || !TOTING(obj) || (!HERE(BIRD) && (game.closng || !AT(FISSURE)))) { - rspeak(actions[verb].message); + rspeak(spk); return GO_CLEAROBJ; } - if (game.prop[BIRD] == BIRD_UNCAGED && game.loc == game.place[STEPS] && game.prop[JADE] < 0) { + + if (HERE(BIRD)) + spk = birdspeak(); + if (spk == FREE_FLY && game.loc == game.place[STEPS] && game.prop[JADE] < 0) { drop(JADE, game.loc); game.prop[JADE] = 0; --game.tally; - rspeak(NECKLACE_FLY); + spk = NECKLACE_FLY; + rspeak(spk); return GO_CLEAROBJ; } else { if (game.closed) { - rspeak(actions[verb].message); + rspeak(spk); return GO_DWARFWAKE; } if (game.closng || !AT(FISSURE)) { - rspeak(actions[verb].message); + rspeak(spk); return GO_CLEAROBJ; } - if (HERE(BIRD)) { - switch (game.prop[BIRD]) { - case BIRD_UNCAGED: - case BIRD_FOREST_UNCAGED: - rspeak(FREE_FLY); - break; - case BIRD_CAGED: - rspeak(CAGE_FLY); - break; - } - } + if (HERE(BIRD)) + rspeak(spk); + /* FIXME: Arithemetic on property values */ game.prop[FISSURE] = 1 - game.prop[FISSURE]; pspeak(FISSURE, look, 2 - game.prop[FISSURE], true); @@ -1132,6 +1138,8 @@ static int wave(token_t verb, token_t obj) } } + + int action(struct command_t *command) /* Analyse a verb. Remember what it was, go back for object if second word * unless verb is "say", which snarfs arbitrary second word. diff --git a/tests/weirdbird.chk b/tests/weirdbird.chk index ce4c8b8..38cfa49 100644 --- a/tests/weirdbird.chk +++ b/tests/weirdbird.chk @@ -179,12 +179,20 @@ OK OK +> get rod + +OK + +> wave rod + +The bird flies agitatedly about the cage. + > attack bird The little bird is now dead. Its body disappears. -You scored 30 out of a possible 430, using 30 turns. +You scored 30 out of a possible 430, using 32 turns. You are obviously a rank amateur. Better luck next time. diff --git a/tests/weirdbird.log b/tests/weirdbird.log index 8e03ef8..bb8a491 100644 --- a/tests/weirdbird.log +++ b/tests/weirdbird.log @@ -33,4 +33,6 @@ y y drop rod take bird +get rod +wave rod attack bird