X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=actions.c;h=fdb5f85bfae1b49a71f2b31620b2f484266157ec;hb=1b5ab6c80848dd7241469a18f33b6b4ed6d515e9;hp=6cd73b562d218bf489abc5269d0e7bd54332ffea;hpb=a86c67c2ab269eb638cbcb6029e6b07afd4824c9;p=open-adventure.git diff --git a/actions.c b/actions.c index 6cd73b5..fdb5f85 100644 --- a/actions.c +++ b/actions.c @@ -70,49 +70,47 @@ static int attack(FILE *input, long verb, token_t obj) RSPEAK(spk); RSPEAK(KNIFE_THROWN); DSTROY(OGRE); - int k=0; + int dwarves=0; for (int i=1; i < PIRATE; i++) { if (game.dloc[i] == game.loc) { - ++k; + ++dwarves; game.dloc[i] = LOC_LONGWEST; game.dseen[i]=false; } } - spk=spk+1+1/k; /* FIXME: Arithmetic on message numbers */ - RSPEAK(spk); - return GO_CLEAROBJ; + spk=spk+1+1/dwarves; /* FIXME: Arithmetic on message numbers */ } - - if (obj == BEAR) + else if (obj == BEAR) /* FIXME: Arithmetic on message numbers */ spk = BEAR_HANDS+(game.prop[BEAR]+1)/2; - if (obj != DRAGON || game.prop[DRAGON] != 0) { - RSPEAK(spk); - return GO_CLEAROBJ; - } - /* Fun stuff for dragon. If he insists on attacking it, win! - * Set game.prop to dead, move dragon to central loc (still - * fixed), move rug there (not fixed), and move him there, - * too. Then do a null motion to get new description. */ - RSPEAK(BARE_HANDS_QUERY); - GETIN(input,&WD1,&WD1X,&WD2,&WD2X); - if (WD1 != MAKEWD(25) && WD1 != MAKEWD(250519)) - return GO_CHECKFOO; - PSPEAK(DRAGON,3); - game.prop[DRAGON]=1; - game.prop[RUG]=0; - int k=(PLAC[DRAGON]+FIXD[DRAGON])/2; - MOVE(DRAGON+NOBJECTS,-1); - MOVE(RUG+NOBJECTS,0); - MOVE(DRAGON,k); - MOVE(RUG,k); - DROP(BLOOD,k); - for (obj=1; obj<=NOBJECTS; obj++) { - if (game.place[obj] == PLAC[DRAGON] || game.place[obj] == FIXD[DRAGON]) - MOVE(obj,k); + else if (obj == DRAGON && game.prop[DRAGON] == 0) { + /* Fun stuff for dragon. If he insists on attacking it, win! + * Set game.prop to dead, move dragon to central loc (still + * fixed), move rug there (not fixed), and move him there, + * too. Then do a null motion to get new description. */ + RSPEAK(BARE_HANDS_QUERY); + GETIN(input,&WD1,&WD1X,&WD2,&WD2X); + if (WD1 != MAKEWD(25) && WD1 != MAKEWD(250519)) + return GO_CHECKFOO; + PSPEAK(DRAGON,3); + game.prop[DRAGON]=1; + game.prop[RUG]=0; + int k=(PLAC[DRAGON]+FIXD[DRAGON])/2; + MOVE(DRAGON+NOBJECTS,-1); + MOVE(RUG+NOBJECTS,0); + MOVE(DRAGON,k); + MOVE(RUG,k); + DROP(BLOOD,k); + for (obj=1; obj<=NOBJECTS; obj++) { + if (game.place[obj] == PLAC[DRAGON] || game.place[obj] == FIXD[DRAGON]) + MOVE(obj,k); + } + game.loc=k; + return GO_MOVE; } - game.loc=k; - return GO_MOVE; + + RSPEAK(spk); + return GO_CLEAROBJ; } static int bigwords(long foo) @@ -183,7 +181,7 @@ static int blast(void) if (HERE(ROD2)) game.bonus=135; RSPEAK(game.bonus); - score(0); + score(endgame); return GO_CLEAROBJ; /* pacify compiler - we never get here */ } @@ -614,7 +612,7 @@ static int fly(token_t verb, token_t obj) return GO_TERMINATE; } -static int inven(token_t obj) +static int inven(void) /* Inventory. If object, treat same as find. Else report on current burden. */ { int spk=NO_CARRY; @@ -777,7 +775,7 @@ static int quit(FILE *input) /* Quit. Intransitive only. Verify intent and exit if that's what he wants. */ { if (YES(input,REALLY_QUIT,OK_MAN,OK_MAN)) - score(1); + score(quitgame); return GO_CLEAROBJ; } @@ -949,7 +947,7 @@ static int throw(FILE *cmdin, long verb, token_t obj) static int vscore(void) /* Score. Call scoring routine but tell it to return. */ { - score(-1); + score(scoregame); return GO_CLEAROBJ; } @@ -1087,7 +1085,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj) case 16: /* TOSS */ return GO_UNKNOWN; case 17: /* QUIT */ return quit(input); case 18: /* FIND */ return GO_UNKNOWN; - case 19: /* INVEN */ return inven(obj); + case 19: /* INVEN */ return inven(); case 20: /* FEED */ return GO_UNKNOWN; case 21: /* FILL */ return fill(verb, obj); case 22: /* BLAST */ return blast();