Be explicitely intransitive

This commit is contained in:
NHOrus 2017-07-06 18:11:02 +03:00
parent ca7ac4063f
commit adab8e2190

View file

@ -15,8 +15,7 @@ static int attack(struct command_t *command)
vocab_t verb = command->verb; vocab_t verb = command->verb;
obj_t obj = command->obj; obj_t obj = command->obj;
if (obj == NO_OBJECT || if (obj == INTRANSITIVE) {
obj == INTRANSITIVE) {
int changes = 0; int changes = 0;
if (atdwrf(game.loc) > 0) { if (atdwrf(game.loc) > 0) {
obj = DWARF; obj = DWARF;
@ -43,7 +42,7 @@ static int attack(struct command_t *command)
++changes; ++changes;
} }
/* check for low-priority targets */ /* check for low-priority targets */
if (obj == NO_OBJECT) { if (obj == INTRANSITIVE) {
/* Can't attack bird or machine by throwing axe. */ /* Can't attack bird or machine by throwing axe. */
if (HERE(BIRD) && verb != THROW) { if (HERE(BIRD) && verb != THROW) {
obj = BIRD; obj = BIRD;
@ -153,7 +152,7 @@ static int attack(struct command_t *command)
} }
switch (obj) { switch (obj) {
case NO_OBJECT: case INTRANSITIVE:
rspeak(NO_TARGET); rspeak(NO_TARGET);
break; break;
case CLAM: case CLAM:
@ -527,7 +526,7 @@ static int drink(token_t verb, obj_t obj)
/* Drink. If no object, assume water and look for it here. If water is in /* Drink. If no object, assume water and look for it here. If water is in
* the bottle, drink that, else must be at a water loc, so drink stream. */ * the bottle, drink that, else must be at a water loc, so drink stream. */
{ {
if (obj == NO_OBJECT && LIQLOC(game.loc) != WATER && if (obj == INTRANSITIVE && LIQLOC(game.loc) != WATER &&
(LIQUID() != WATER || !HERE(BOTTLE))) { (LIQUID() != WATER || !HERE(BOTTLE))) {
return GO_UNKNOWN; return GO_UNKNOWN;
} }
@ -539,7 +538,7 @@ static int drink(token_t verb, obj_t obj)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
if (obj != NO_OBJECT && obj != WATER) { if (obj != INTRANSITIVE && obj != WATER) {
rspeak(RIDICULOUS_ATTEMPT); rspeak(RIDICULOUS_ATTEMPT);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
@ -726,11 +725,11 @@ int fill(token_t verb, obj_t obj)
game.place[k] = LOC_NOWHERE; game.place[k] = LOC_NOWHERE;
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
if (obj != NO_OBJECT && obj != BOTTLE) { if (obj != INTRANSITIVE && obj != BOTTLE) {
speak(actions[verb].message); speak(actions[verb].message);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
if (obj == NO_OBJECT && !HERE(BOTTLE)) if (obj == INTRANSITIVE && !HERE(BOTTLE))
return GO_UNKNOWN; return GO_UNKNOWN;
if (HERE(URN) && game.prop[URN] != URN_EMPTY) { if (HERE(URN) && game.prop[URN] != URN_EMPTY) {
@ -989,7 +988,7 @@ static int pour(token_t verb, obj_t obj)
* special tests for pouring water or oil on plant or rusty door. */ * special tests for pouring water or oil on plant or rusty door. */
{ {
if (obj == BOTTLE || if (obj == BOTTLE ||
obj == NO_OBJECT) obj == INTRANSITIVE)
obj = LIQUID(); obj = LIQUID();
if (obj == NO_OBJECT) if (obj == NO_OBJECT)
return GO_UNKNOWN; return GO_UNKNOWN;
@ -1180,7 +1179,7 @@ static int throw (struct command_t *command)
state_change(AXE, AXE_LOST); state_change(AXE, AXE_LOST);
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
command->obj = NO_OBJECT; command->obj = INTRANSITIVE;
return (attack(command)); return (attack(command));
} }
@ -1353,13 +1352,14 @@ int action(struct command_t *command)
return GO_CLEAROBJ; return GO_CLEAROBJ;
} }
case ATTACK: case ATTACK:
command->obj = INTRANSITIVE;
return attack(command); return attack(command);
case POUR: case POUR:
return pour(command->verb, command->obj); return pour(command->verb, INTRANSITIVE);
case EAT: case EAT:
return eat(command->verb, INTRANSITIVE); return eat(command->verb, INTRANSITIVE);
case DRINK: case DRINK:
return drink(command->verb, command->obj); return drink(command->verb, INTRANSITIVE);
case RUB: case RUB:
return GO_UNKNOWN; return GO_UNKNOWN;
case THROW: case THROW:
@ -1373,7 +1373,7 @@ int action(struct command_t *command)
case FEED: case FEED:
return GO_UNKNOWN; return GO_UNKNOWN;
case FILL: case FILL:
return fill(command->verb, command->obj); return fill(command->verb, INTRANSITIVE);
case BLAST: case BLAST:
blast(); blast();
return GO_CLEAROBJ; return GO_CLEAROBJ;