X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=actions.c;h=aa63f6c83bfe09eafe2c61704fcfb151fd999e45;hp=29369de08c1ad87498b1b1a64dbca2b3f81ddbab;hb=a3485d2a41ae0360177c8b475972610025aec8f3;hpb=d97574d35c0532d0854b7653b47b2da7e2e305b3 diff --git a/actions.c b/actions.c index 29369de..aa63f6c 100644 --- a/actions.c +++ b/actions.c @@ -38,7 +38,8 @@ static int attack(FILE *input, long verb, token_t obj) /* Clam and oyster both treated as clam for intransitive case; * no harm done. */ if (HERE(CLAM) || HERE(OYSTER))obj=NOBJECTS*obj+CLAM; - if (obj > NOBJECTS) return GO_UNKNOWN; + if (obj > NOBJECTS) + return GO_UNKNOWN; } } if (obj == BIRD) { @@ -52,7 +53,7 @@ static int attack(FILE *input, long verb, token_t obj) game.prop[BIRD]=0; spk=BIRD_DEAD; } - if (obj == VEND) { + else if (obj == VEND) { PSPEAK(VEND,game.prop[VEND]+2); game.prop[VEND]=3-game.prop[VEND]; return GO_CLEAROBJ; @@ -78,7 +79,7 @@ static int attack(FILE *input, long verb, token_t obj) game.dseen[i]=false; } } - spk=spk+1+1/dwarves; /* FIXME: Arithmetic on message numbers */ + spk = (dwarves > 1) ? OGRE_PANIC1 : OGRE_PANIC2; } else if (obj == BEAR) /* FIXME: Arithmetic on message numbers */ @@ -167,22 +168,20 @@ static int bivalve(token_t verb, token_t obj) return GO_CLEAROBJ; } -static int blast(void) +static void blast(void) /* Blast. No effect unless you've got dynamite, which is a neat trick! */ { if (game.prop[ROD2] < 0 || !game.closed) - { RSPEAK(REQUIRES_DYNAMITE); - return GO_CLEAROBJ; + else { + game.bonus=133; + if (game.loc == LOC_NE) + game.bonus=134; + if (HERE(ROD2)) + game.bonus=135; + RSPEAK(game.bonus); + score(endgame); } - game.bonus=133; - if (game.loc == LOC_NE) - game.bonus=134; - if (HERE(ROD2)) - game.bonus=135; - RSPEAK(game.bonus); - score(endgame); - return GO_CLEAROBJ; /* pacify compiler - we never get here */ } static int vbreak(token_t verb, token_t obj) @@ -252,10 +251,12 @@ static int carry(token_t verb, token_t obj) if (!HERE(BOTTLE) || LIQUID() != obj) { if (TOTING(BOTTLE) && game.prop[BOTTLE] == 1) return(fill(verb, BOTTLE)); - if (game.prop[BOTTLE] != 1)spk=BOTTLE_FULL; - if (!TOTING(BOTTLE))spk=NO_CONTAINER; - RSPEAK(spk); - return GO_CLEAROBJ; + else { + if (game.prop[BOTTLE] != 1)spk=BOTTLE_FULL; + if (!TOTING(BOTTLE))spk=NO_CONTAINER; + RSPEAK(spk); + return GO_CLEAROBJ; + } } obj = BOTTLE; } @@ -457,7 +458,7 @@ static int extinguish(token_t verb, int obj) else if (obj == LAMP) { game.prop[LAMP]=0; RSPEAK(LAMP_OFF); - spk = DARK(game.loc) ? PITCH_DARK : ARB_0; + spk = DARK(game.loc) ? PITCH_DARK : NO_MESSAGE; } else if (obj == DRAGON || obj == VOLCAN) spk=BEYOND_POWER; @@ -624,7 +625,7 @@ static int inven(void) game.blklin=false; PSPEAK(i,-1); game.blklin=true; - spk=ARB_0; + spk=NO_MESSAGE; } if (TOTING(BEAR)) spk=TAME_BEAR; @@ -632,7 +633,7 @@ static int inven(void) return GO_CLEAROBJ; } -int light(token_t verb, token_t obj) +static int light(token_t verb, token_t obj) /* Light. Applicable only to lamp and urn. */ { int spk = ACTSPK[verb]; @@ -643,12 +644,12 @@ int light(token_t verb, token_t obj) } if (obj == URN) { - spk=URN_EMPTY; - if (game.prop[URN] == 0) - {RSPEAK(spk); return GO_CLEAROBJ;} - spk=URN_LIT; - game.prop[URN]=2; - RSPEAK(spk); + if (game.prop[URN] == 0) { + RSPEAK(URN_EMPTY); + } else { + game.prop[URN] = 2; + RSPEAK(URN_LIT); + } return GO_CLEAROBJ; } else { if (obj != LAMP) @@ -679,14 +680,14 @@ static int listen(void) if (k != 0) { RSPEAK(labs(k)); if (k < 0) return GO_CLEAROBJ; - spk=ARB_0; + spk=NO_MESSAGE; } SETPRM(1,game.zzword,0); for (int i=1; i<=NOBJECTS; i++) { if (!HERE(i) || OBJSND[i] == 0 || game.prop[i] < 0) continue; PSPEAK(i,OBJSND[i]+game.prop[i]); - spk=ARB_0; + spk=NO_MESSAGE; if (i == BIRD && OBJSND[i]+game.prop[i] == 8) DESTROY(BIRD); } @@ -813,7 +814,7 @@ static int reservoir(void) /* Z'ZZZ (word gets recomputed at startup; different each game). */ { if (!AT(RESER) && game.loc != game.fixed[RESER]-1) { - RSPEAK(RUB_NOGO); + RSPEAK(NOTHING_HAPPENS); return GO_CLEAROBJ; } else { PSPEAK(RESER,game.prop[RESER]+1); @@ -864,7 +865,6 @@ static int say(void) } RSPEAK(OKEY_DOKEY); return GO_CLEAROBJ; - } static int throw_support(long spk) @@ -921,27 +921,22 @@ static int throw(FILE *cmdin, long verb, token_t obj) } if (HERE(BEAR) && game.prop[BEAR] == 0) { /* This'll teach him to throw the axe at the bear! */ - spk=AXE_LOST; DROP(AXE,game.loc); - game.fixed[AXE]= -1; - game.prop[AXE]=1; + game.fixed[AXE] = -1; + game.prop[AXE] = 1; JUGGLE(BEAR); - {RSPEAK(spk); return GO_CLEAROBJ;} + RSPEAK(AXE_LOST); + return GO_CLEAROBJ; } return(attack(cmdin, verb, 0)); } if (randrange(NDWARVES+1) < game.dflag) { - spk=DWARF_DODGES; - return throw_support(spk); + return throw_support(DWARF_DODGES); } game.dseen[i]=false; game.dloc[i]=0; - spk=KILLED_DWARF; - ++game.dkill; - if (game.dkill == 1)spk=DWARF_SMOKE; - - return throw_support(spk); + return throw_support((++game.dkill == 1) ? DWARF_SMOKE : KILLED_DWARF); } static int vscore(void) @@ -954,13 +949,13 @@ static int vscore(void) static int wake(token_t verb, token_t obj) /* Wake. Only use is to disturb the dwarves. */ { - if (obj != DWARF || !game.closed) - { + if (obj != DWARF || !game.closed) { RSPEAK(ACTSPK[verb]); return GO_CLEAROBJ; + } else { + RSPEAK(PROD_DWARF); + return GO_DWARFWAKE; } - RSPEAK(PROD_DWARF); - return GO_DWARFWAKE; } static int wave(token_t verb, token_t obj) @@ -1016,8 +1011,8 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj) else if (obj == GRATE) { if (game.loc == LOC_START || game.loc == LOC_VALLEY || game.loc == LOC_SLIT) obj=DPRSSN; - /* FIXME: Arithmetic on location numbers */ - if (game.loc > LOC_BELOWGRATE && game.loc < LOC_MISTHALL) + if (game.loc == LOC_COBBLE || game.loc == LOC_DEBRIS || game.loc == LOC_AWKWARD || + game.loc == LOC_BIRD || game.loc == LOC_PITTOP) obj=ENTRNC; if (obj != GRATE) return GO_MOVE; @@ -1088,15 +1083,15 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj) case 19: /* INVEN */ return inven(); case 20: /* FEED */ return GO_UNKNOWN; case 21: /* FILL */ return fill(verb, obj); - case 22: /* BLAST */ return blast(); + case 22: /* BLAST */ blast(); return GO_CLEAROBJ; case 23: /* SCOR */ return vscore(); case 24: /* FOO */ return bigwords(WD1); case 25: /* BRIEF */ return brief(); case 26: /* READ */ return read(input, verb, INTRANSITIVE); case 27: /* BREAK */ return GO_UNKNOWN; case 28: /* WAKE */ return GO_UNKNOWN; - case 29: /* SUSP */ return saveresume(input, false); - case 30: /* RESU */ return saveresume(input, true); + case 29: /* SUSP */ return suspend(input); + case 30: /* RESU */ return resume(input); case 31: /* FLY */ return fly(verb, INTRANSITIVE); case 32: /* LISTE */ return listen(); case 33: /* ZZZZ */ return reservoir(); @@ -1129,7 +1124,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj) case 19: /* INVEN */ return find(verb, obj); case 20: /* FEED */ return feed(verb, obj); case 21: /* FILL */ return fill(verb, obj); - case 22: /* BLAST */ return blast(); + case 22: /* BLAST */ blast(); return GO_CLEAROBJ; case 23: /* SCOR */ {RSPEAK(spk); return GO_CLEAROBJ;} case 24: /* FOO */ {RSPEAK(spk); return GO_CLEAROBJ;} case 25: /* BRIEF */ {RSPEAK(spk); return GO_CLEAROBJ;}