X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=actions.c;h=409e58e110eaaceb23718318dab19583f7dc7692;hb=8ec7c9d5768cae39c1b8875b9bfca00e9bbba302;hp=dd68f8e0016f1fc77440189708d25a6d0b6a5eb4;hpb=b8d86b840dad2c5e9e5412acc06c5b7a6b532dab;p=open-adventure.git diff --git a/actions.c b/actions.c index dd68f8e..409e58e 100644 --- a/actions.c +++ b/actions.c @@ -123,7 +123,7 @@ static int attack(struct command_t *command) } state_change(DRAGON, DRAGON_DEAD); game.prop[RUG] = RUG_FLOOR; - /* FIXME: Arithmentic on location values */ + /* FIXME: Arithmetic on location values */ int k = (objects[DRAGON].plac + objects[DRAGON].fixd) / 2; move(DRAGON + NOBJECTS, -1); move(RUG + NOBJECTS, 0); @@ -170,13 +170,13 @@ static int bigwords(token_t foo) } else { /* Bring back troll if we steal the eggs back from him before * crossing. */ - if (game.place[EGGS] == LOC_NOWHERE && game.place[TROLL] == LOC_NOWHERE && game.prop[TROLL] == 0) - game.prop[TROLL] = 1; - k = 2; + if (game.place[EGGS] == LOC_NOWHERE && game.place[TROLL] == LOC_NOWHERE && game.prop[TROLL] == TROLL_UNPAID) + game.prop[TROLL] = TROLL_PAIDONCE; + k = EGGS_DONE; if (HERE(EGGS)) - k = 1; + k = EGGS_VANISHED; if (game.loc == objects[EGGS].plac) - k = 0; + k = EGGS_HERE; move(EGGS, objects[EGGS].plac); pspeak(EGGS, look, k); return GO_CLEAROBJ; @@ -224,23 +224,24 @@ static void blast(void) static int vbreak(token_t verb, token_t obj) /* Break. Only works for mirror in repository and, of course, the vase. */ { - int spk = actions[verb].message; - if (obj == MIRROR) - spk = TOO_FAR; - if (obj == VASE && game.prop[VASE] == 0) { - if (TOTING(VASE)) - drop(VASE, game.loc); - game.prop[VASE] = 2; - game.fixed[VASE] = -1; - spk = BREAK_VASE; - } else { - if (obj == MIRROR && game.closed) { + if (obj == MIRROR) { + if (game.closed) { rspeak(BREAK_MIRROR); return GO_DWARFWAKE; + } else { + rspeak(TOO_FAR); + return GO_CLEAROBJ; } } - rspeak(spk); - return GO_CLEAROBJ; + if (obj == VASE && game.prop[VASE] == VASE_WHOLE) { + if (TOTING(VASE)) + drop(VASE, game.loc); + state_change(VASE, VASE_BROKEN); + game.fixed[VASE] = -1; + return GO_CLEAROBJ; + } + rspeak(actions[verb].message); + return (GO_CLEAROBJ); } static int brief(void) @@ -354,21 +355,21 @@ static int chain(token_t verb) spk = CHAIN_UNLOCKED; if (game.prop[BEAR] == UNTAMED_BEAR) spk = BEAR_BLOCKS; - if (game.prop[CHAIN] == 0) + if (game.prop[CHAIN] == CHAIN_HEAP) spk = ALREADY_UNLOCKED; if (spk != CHAIN_UNLOCKED) { rspeak(spk); return GO_CLEAROBJ; } - game.prop[CHAIN] = 0; - game.fixed[CHAIN] = 0; + game.prop[CHAIN] = CHAIN_HEAP; + game.fixed[CHAIN] = CHAIN_HEAP; if (game.prop[BEAR] != BEAR_DEAD) game.prop[BEAR] = CONTENTED_BEAR; /* FIXME: Arithmetic on state numbers */ game.fixed[BEAR] = 2 - game.prop[BEAR]; } else { spk = CHAIN_LOCKED; - if (game.prop[CHAIN] != 0) + if (game.prop[CHAIN] != CHAIN_HEAP) spk = ALREADY_LOCKED; if (game.loc != objects[CHAIN].plac) spk = NO_LOCKSITE; @@ -376,7 +377,7 @@ static int chain(token_t verb) rspeak(spk); return GO_CLEAROBJ; } - game.prop[CHAIN] = 2; + game.prop[CHAIN] = CHAIN_FIXED; if (TOTING(CHAIN)) drop(CHAIN, game.loc); game.fixed[CHAIN] = -1; @@ -443,15 +444,15 @@ static int discard(token_t verb, token_t obj, bool just_do_it) move(TROLL2, objects[TROLL].plac); move(TROLL2 + NOBJECTS, objects[TROLL].fixd); juggle(CHASM); - game.prop[TROLL] = 2; + game.prop[TROLL] = TROLL_GONE; } else if (obj != VASE || game.loc == objects[PILLOW].plac) { rspeak(OK_MAN); } else { - game.prop[VASE] = 2; + game.prop[VASE] = VASE_BROKEN; if (AT(PILLOW)) - game.prop[VASE] = 0; + game.prop[VASE] = VASE_WHOLE; pspeak(VASE, look, game.prop[VASE] + 1); - if (game.prop[VASE] != 0) + if (game.prop[VASE] != VASE_WHOLE) game.fixed[VASE] = -1; } } @@ -604,7 +605,7 @@ int fill(token_t verb, token_t obj) return GO_CLEAROBJ; } rspeak(SHATTER_VASE); - game.prop[VASE] = 2; + game.prop[VASE] = VASE_BROKEN; game.fixed[VASE] = -1; return (discard(verb, obj, true)); } else if (obj == URN) { @@ -887,11 +888,7 @@ static int pour(token_t verb, token_t obj) game.prop[PLANT2] = game.prop[PLANT]; return GO_MOVE; } else { - game.prop[DOOR] = 0; - if (obj == OIL) - game.prop[DOOR] = 1; - spk = RUSTED_HINGES + game.prop[DOOR]; - rspeak(spk); + state_change(DOOR, (obj == OIL) ? DOOR_UNRUSTED : DOOR_RUSTED); return GO_CLEAROBJ; } } @@ -1085,7 +1082,7 @@ static int wave(token_t verb, token_t obj) rspeak(spk); return GO_CLEAROBJ; } - /* FIXME: Arithemetic on proprty values */ + /* FIXME: Arithemetic on property values */ if (HERE(BIRD)) spk = FREE_FLY + MOD(game.prop[BIRD], 2); if (spk == FREE_FLY && game.loc == game.place[STEPS] && game.prop[JADE] < 0) {