X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=actions.c;h=5dfb987a74f8e92ce02edd9ca36bb3defd1591b0;hb=5613b0ce36636d421cfa3002d39aeb0e2f69e389;hp=d9802f627143051a568c6b42302401cdbf87921e;hpb=993194bd4dfb268bc12f73c10a36c0f4f7db6a91;p=open-adventure.git diff --git a/actions.c b/actions.c index d9802f6..5dfb987 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; @@ -521,23 +518,25 @@ static int eat(token_t verb, token_t obj) /* Eat. Intransitive: assume food if present, else ask what. Transitive: food * ok, some things lose appetite, rest are ridiculous. */ { - int spk = actions[verb].message; if (obj == INTRANSITIVE) { if (!HERE(FOOD)) return GO_UNKNOWN; DESTROY(FOOD); - spk = THANKS_DELICIOUS; - } else { - if (obj == FOOD) { - DESTROY(FOOD); - spk = THANKS_DELICIOUS; - } - if (obj == BIRD || obj == SNAKE || obj == CLAM || obj == OYSTER || obj == - DWARF || obj == DRAGON || obj == TROLL || obj == BEAR || obj == - OGRE) - spk = LOST_APPETITE; + rspeak(THANKS_DELICIOUS); + return GO_CLEAROBJ; } - rspeak(spk); + if (obj == FOOD) { + DESTROY(FOOD); + rspeak(THANKS_DELICIOUS); + return GO_CLEAROBJ; + } + if (obj == BIRD || obj == SNAKE || obj == CLAM || obj == OYSTER || obj == + DWARF || obj == DRAGON || obj == TROLL || obj == BEAR || obj == + OGRE) { + rspeak(LOST_APPETITE); + return GO_CLEAROBJ; + } + rspeak(actions[verb].message); return GO_CLEAROBJ; } @@ -1086,50 +1085,33 @@ 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. */ { - 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(spk); + rspeak(((!TOTING(obj)) && (obj != ROD || !TOTING(ROD2))) ? ARENT_CARRYING : actions[verb].message); return GO_CLEAROBJ; } - if (HERE(BIRD)) - spk = birdspeak(); - if (spk == FREE_FLY && game.loc == game.place[STEPS] && game.prop[JADE] < 0) { + if (game.prop[BIRD] == BIRD_UNCAGED && game.loc == game.place[STEPS] && game.prop[JADE] < 0) { drop(JADE, game.loc); game.prop[JADE] = 0; --game.tally; - spk = NECKLACE_FLY; - rspeak(spk); + rspeak(NECKLACE_FLY); return GO_CLEAROBJ; } else { if (game.closed) { - rspeak(spk); + rspeak((game.prop[BIRD] == BIRD_CAGED) ? CAGE_FLY : FREE_FLY); return GO_DWARFWAKE; } if (game.closng || !AT(FISSURE)) { - rspeak(spk); + rspeak((game.prop[BIRD] == BIRD_CAGED) ? CAGE_FLY : FREE_FLY); return GO_CLEAROBJ; } if (HERE(BIRD)) - rspeak(spk); + rspeak((game.prop[BIRD] == BIRD_CAGED) ? CAGE_FLY : FREE_FLY); /* FIXME: Arithemetic on property values */ game.prop[FISSURE] = 1 - game.prop[FISSURE]; @@ -1138,8 +1120,6 @@ 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.