X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=actions.c;h=a6f686d5115477059387e896308e65a9d498e08d;hp=51ad0ef5d432d9d020c6279df161179e9f32e775;hb=e10faf6edb02f7397149826528342d7a82362bdb;hpb=eeda78a2100cec2609a12d7cb618662e2370b870 diff --git a/actions.c b/actions.c index 51ad0ef..a6f686d 100644 --- a/actions.c +++ b/actions.c @@ -20,9 +20,6 @@ static int attack(struct command_t *command) vocab_t verb = command->verb; vocab_t obj = command->obj; - if (obj == INTRANSITIVE) { - return GO_UNKNOWN; - } long spk = actions[verb].message; if (obj == NO_OBJECT || obj == INTRANSITIVE) { int changes = 0; @@ -1086,19 +1083,26 @@ static int wake(token_t verb, token_t obj) } } +static token_t birdspeak(void) +{ + switch (game.prop[BIRD]) { + case BIRD_CAGED: + return CAGE_FLY; + default: + return FREE_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; - } if (obj != ROD || !TOTING(obj) || (!HERE(BIRD) && (game.closng || !AT(FISSURE)))) { - rspeak(actions[verb].message); + rspeak(((!TOTING(obj)) && (obj != ROD || !TOTING(ROD2))) ? ARENT_CARRYING : actions[verb].message); return GO_CLEAROBJ; } + if (game.prop[BIRD] == BIRD_UNCAGED && game.loc == game.place[STEPS] && game.prop[JADE] < 0) { drop(JADE, game.loc); game.prop[JADE] = 0; @@ -1107,24 +1111,16 @@ static int wave(token_t verb, token_t obj) return GO_CLEAROBJ; } else { if (game.closed) { - rspeak(actions[verb].message); + rspeak(birdspeak()); return GO_DWARFWAKE; } if (game.closng || !AT(FISSURE)) { - rspeak(actions[verb].message); + rspeak(birdspeak()); 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(birdspeak()); + /* FIXME: Arithemetic on property values */ game.prop[FISSURE] = 1 - game.prop[FISSURE]; pspeak(FISSURE, look, 2 - game.prop[FISSURE], true);