X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=actions.c;h=de888d4584d1f1528378324ff5b3f50f84e22d3c;hb=248fc90e3d2cb0c3e2bcc6cace7d11d4ff763db0;hp=fdf2319023732c79b8ea27b75d42b88468351619;hpb=a768555312f0ff1c0ddb11ae5e6212210535110c;p=open-adventure.git diff --git a/actions.c b/actions.c index fdf2319..de888d4 100644 --- a/actions.c +++ b/actions.c @@ -1,5 +1,6 @@ #include #include +#include #include "advent.h" #include "dungeon.h" @@ -481,13 +482,12 @@ static int discard(token_t verb, token_t obj, bool just_do_it) DESTROY(BIRD); return GO_CLEAROBJ; } else if (obj == BEAR && AT(TROLL)) { - rspeak(TROLL_SCAMPERS); + state_change(TROLL, TROLL_GONE); move(TROLL, LOC_NOWHERE); move(TROLL + NOBJECTS, LOC_NOWHERE); move(TROLL2, objects[TROLL].plac); move(TROLL2 + NOBJECTS, objects[TROLL].fixd); juggle(CHASM); - game.prop[TROLL] = TROLL_GONE; } else if (obj != VASE || game.loc == objects[PILLOW].plac) { rspeak(OK_MAN); @@ -942,15 +942,15 @@ static int pour(token_t verb, token_t obj) return GO_CLEAROBJ; } if (!AT(DOOR)) { - if (obj != WATER) { + if (obj == WATER) { + /* cycle through the three plant states */ + state_change(PLANT, MOD(game.prop[PLANT] + 1, 3)); + game.prop[PLANT2] = game.prop[PLANT]; + return GO_MOVE; + } else { rspeak(SHAKING_LEAVES); return GO_CLEAROBJ; - } - /* FIXME: Arithmetic on state numbers */ - pspeak(PLANT, look, game.prop[PLANT] + 3, true); - game.prop[PLANT] = MOD(game.prop[PLANT] + 1, 3); - game.prop[PLANT2] = game.prop[PLANT]; - return GO_MOVE; + } } else { state_change(DOOR, (obj == OIL) ? DOOR_UNRUSTED : @@ -1037,11 +1037,11 @@ static int rub(token_t verb, token_t obj) static int say(struct command_t *command) /* Say. Echo WD2 (or WD1 if no WD2 (SAY WHAT?, etc.).) Magic words override. */ { - long a = command->wd1, b = command->wd1x; + long a = command->wd1; if (command->wd2 > 0) { a = command->wd2; - b = command->wd2x; command->wd1 = command->wd2; + strcpy(command->raw1, command->raw2); } char word1[TOKLEN+1]; packed_to_token(command->wd1, word1); @@ -1056,7 +1056,7 @@ static int say(struct command_t *command) wordclear(&command->wd2); return GO_LOOKUP; } - rspeak(OKEY_DOKEY, a, b); + sspeak(OKEY_DOKEY, command->raw1); return GO_CLEAROBJ; }