X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=actions.c;h=4cfcbdcd4f2b709ba538ef8a36aa51dcc02b1c79;hb=ecff53d3a8322224bafe0c2a4cffc3e32840e82a;hp=45dd8b66fe11ed0ac1bdec3a93690a9d727846d0;hpb=433e787de85c5833003790fd596d1ac2183c9eb7;p=open-adventure.git diff --git a/actions.c b/actions.c index 45dd8b6..4cfcbdc 100644 --- a/actions.c +++ b/actions.c @@ -42,7 +42,6 @@ static int attack(FILE *input, struct command_t *command) return GO_CLEAROBJ; } DESTROY(BIRD); - game.prop[BIRD] = 0; spk = BIRD_DEAD; } else if (obj == VEND) { pspeak(VEND, game.prop[VEND] + 2); @@ -242,10 +241,11 @@ static int carry(token_t verb, token_t obj) } if (obj == WATER || obj == OIL) { if (!HERE(BOTTLE) || LIQUID() != obj) { - if (TOTING(BOTTLE) && game.prop[BOTTLE] == 1) + if (TOTING(BOTTLE) && game.prop[BOTTLE] == EMPTY_BOTTLE) return (fill(verb, BOTTLE)); else { - if (game.prop[BOTTLE] != 1)spk = BOTTLE_FULL; + if (game.prop[BOTTLE] != EMPTY_BOTTLE) + spk = BOTTLE_FULL; if (!TOTING(BOTTLE))spk = NO_CONTAINER; rspeak(spk); return GO_CLEAROBJ; @@ -258,8 +258,8 @@ static int carry(token_t verb, token_t obj) if (game.holdng >= INVLIMIT) { rspeak(spk); return GO_CLEAROBJ; - } else if (obj == BIRD && game.prop[BIRD] != 1 && -1 - game.prop[BIRD] != 1) { - if (game.prop[BIRD] == 2) { + } else if (obj == BIRD && game.prop[BIRD] != BIRD_CAGED && -1 - game.prop[BIRD] != BIRD_CAGED) { + if (game.prop[BIRD] == BIRD_FOREST_UNCAGED) { DESTROY(BIRD); rspeak(BIRD_CRAP); return GO_CLEAROBJ; @@ -270,9 +270,9 @@ static int carry(token_t verb, token_t obj) rspeak(spk); return GO_CLEAROBJ; } - game.prop[BIRD] = 1; + game.prop[BIRD] = BIRD_CAGED; } - if ((obj == BIRD || obj == CAGE) && (game.prop[BIRD] == 1 || -1 - game.prop[BIRD] == 1)) + if ((obj == BIRD || obj == CAGE) && (game.prop[BIRD] == BIRD_CAGED || -1 - game.prop[BIRD] == 1)) CARRY(BIRD + CAGE - obj, game.loc); CARRY(obj, game.loc); if (obj == BOTTLE && LIQUID() != 0) @@ -356,12 +356,11 @@ static int discard(token_t verb, token_t obj, bool just_do_it) } else if (obj == COINS && HERE(VEND)) { DESTROY(COINS); DROP(BATTERY, game.loc); - pspeak(BATTERY, 0); + pspeak(BATTERY, FRESH_BATTERIES); return GO_CLEAROBJ; } else if (obj == BIRD && AT(DRAGON) && game.prop[DRAGON] == 0) { rspeak(BIRD_BURNT); DESTROY(BIRD); - game.prop[BIRD] = 0; return GO_CLEAROBJ; } else if (obj == BEAR && AT(TROLL)) { rspeak(TROLL_SCAMPERS); @@ -384,11 +383,13 @@ static int discard(token_t verb, token_t obj, bool just_do_it) if (k == obj)obj = BOTTLE; if (obj == BOTTLE && k != 0) game.place[k] = LOC_NOWHERE; - if (obj == CAGE && game.prop[BIRD] == 1)DROP(BIRD, game.loc); + if (obj == CAGE && game.prop[BIRD] == BIRD_CAGED) + DROP(BIRD, game.loc); DROP(obj, game.loc); if (obj != BIRD) return GO_CLEAROBJ; - game.prop[BIRD] = 0; - if (FOREST(game.loc))game.prop[BIRD] = 2; + game.prop[BIRD] = BIRD_UNCAGED; + if (FOREST(game.loc)) + game.prop[BIRD] = BIRD_FOREST_UNCAGED; return GO_CLEAROBJ; } @@ -402,7 +403,7 @@ static int drink(token_t verb, token_t obj) if (obj != BLOOD) { if (obj != 0 && obj != WATER)spk = RIDICULOUS_ATTEMPT; if (spk != RIDICULOUS_ATTEMPT && LIQUID() == WATER && HERE(BOTTLE)) { - game.prop[BOTTLE] = 1; + game.prop[BOTTLE] = EMPTY_BOTTLE; game.place[WATER] = LOC_NOWHERE; spk = BOTTLE_EMPTY; } @@ -444,7 +445,8 @@ static int extinguish(token_t verb, int obj) { int spk = ACTSPK[verb]; if (obj == INTRANSITIVE) { - if (HERE(LAMP) && game.prop[LAMP] == 1)obj = LAMP; + if (HERE(LAMP) && game.prop[LAMP] == LAMP_BRIGHT) + obj = LAMP; if (HERE(URN) && game.prop[URN] == 2)obj = obj * NOBJECTS + URN; if (obj == INTRANSITIVE || obj == 0 || obj > NOBJECTS) return GO_UNKNOWN; } @@ -453,7 +455,7 @@ static int extinguish(token_t verb, int obj) game.prop[URN] = game.prop[URN] / 2; spk = URN_DARK; } else if (obj == LAMP) { - game.prop[LAMP] = 0; + game.prop[LAMP] = LAMP_DARK; rspeak(LAMP_OFF); spk = DARK(game.loc) ? PITCH_DARK : NO_MESSAGE; } else if (obj == DRAGON || obj == VOLCANO) @@ -476,7 +478,6 @@ static int feed(token_t verb, token_t obj) if (obj == TROLL)spk = TROLL_VICES; if (obj == SNAKE && !game.closed && HERE(BIRD)) { DESTROY(BIRD); - game.prop[BIRD] = 0; spk = BIRD_DEVOURED; } } else if (obj == DWARF) { @@ -534,7 +535,7 @@ int fill(token_t verb, token_t obj) return GO_CLEAROBJ; } game.place[k] = LOC_NOWHERE; - game.prop[BOTTLE] = 1; + game.prop[BOTTLE] = EMPTY_BOTTLE; if (k == OIL)game.prop[URN] = 1; spk = WATER_URN + game.prop[URN]; rspeak(spk); @@ -552,7 +553,8 @@ int fill(token_t verb, token_t obj) if (LIQUID() != 0) spk = BOTTLE_FULL; if (spk == BOTTLED_WATER) { - game.prop[BOTTLE] = MOD(COND[game.loc], 4) / 2 * 2; + /* FIXME: Arithmetic on property values */ + game.prop[BOTTLE] = MOD(conditions[game.loc], 4) / 2 * 2; k = LIQUID(); if (TOTING(BOTTLE)) game.place[k] = CARRIED; @@ -636,7 +638,8 @@ static int light(token_t verb, token_t obj) { int spk = ACTSPK[verb]; if (obj == INTRANSITIVE) { - if (HERE(LAMP) && game.prop[LAMP] == 0 && game.limit >= 0)obj = LAMP; + if (HERE(LAMP) && game.prop[LAMP] == LAMP_DARK && game.limit >= 0) + obj = LAMP; if (HERE(URN) && game.prop[URN] == 1)obj = obj * NOBJECTS + URN; if (obj == INTRANSITIVE || obj == 0 || obj > NOBJECTS) return GO_UNKNOWN; } @@ -659,7 +662,7 @@ static int light(token_t verb, token_t obj) rspeak(spk); return GO_CLEAROBJ; } - game.prop[LAMP] = 1; + game.prop[LAMP] = LAMP_BRIGHT; rspeak(LAMP_ON); if (game.wzdark) return GO_TOP; @@ -671,13 +674,15 @@ static int light(token_t verb, token_t obj) static int listen(void) /* Listen. Intransitive only. Print stuff based on objsnd/locsnd. */ { - int k; + long k; int spk = ALL_SILENT; - k = LOCSND[game.loc]; - if (k != 0) { - rspeak(labs(k)); - if (k < 0) return GO_CLEAROBJ; - spk = NO_MESSAGE; + k = locations[game.loc].sound; + if (k != SILENT) { + rspeak(k); + if (locations[game.loc].loud) + return GO_CLEAROBJ; + else + spk = NO_MESSAGE; } for (int i = 1; i <= NOBJECTS; i++) { if (!HERE(i) || OBJSND[i] == 0 || game.prop[i] < 0) @@ -727,7 +732,7 @@ static int lock(token_t verb, token_t obj) if (!game.panic)game.clock2 = PANICTIME; game.panic = true; } else { - game.prop[GRATE] = (verb == LOCK) ? 0 : 1; + game.prop[GRATE] = (verb == LOCK) ? GRATE_CLOSED : GRATE_OPEN; spk = game.prop[GRATE] ? GRATE_UNLOCKED : GRATE_LOCKED; } } @@ -754,7 +759,7 @@ static int pour(token_t verb, token_t obj) } if (HERE(URN) && game.prop[URN] == 0) return fill(verb, URN); - game.prop[BOTTLE] = 1; + game.prop[BOTTLE] = EMPTY_BOTTLE; game.place[obj] = LOC_NOWHERE; spk = GROUND_WET; if (!(AT(PLANT) || AT(DOOR))) { @@ -964,7 +969,9 @@ static int wave(token_t verb, token_t obj) rspeak(spk); return GO_CLEAROBJ; } - if (HERE(BIRD))spk = FREE_FLY + MOD(game.prop[BIRD], 2); + /* FIXME: Arithemetic on proprty 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) { DROP(JADE, game.loc); game.prop[JADE] = 0;