projects
/
open-adventure.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Clear login in bvreak
[open-adventure.git]
/
actions.c
diff --git
a/actions.c
b/actions.c
index 1aa70ac2916115d0ad9a65d5cb2a7a4388daff48..5cf1fae0a77bbe7cd0f44081d08622217c5d8983 100644
(file)
--- a/
actions.c
+++ b/
actions.c
@@
-15,8
+15,7
@@
static int attack(struct command_t *command)
vocab_t verb = command->verb;
obj_t obj = command->obj;
vocab_t verb = command->verb;
obj_t obj = command->obj;
- if (obj == NO_OBJECT ||
- obj == INTRANSITIVE) {
+ if (obj == INTRANSITIVE) {
int changes = 0;
if (atdwrf(game.loc) > 0) {
obj = DWARF;
int changes = 0;
if (atdwrf(game.loc) > 0) {
obj = DWARF;
@@
-43,7
+42,7
@@
static int attack(struct command_t *command)
++changes;
}
/* check for low-priority targets */
++changes;
}
/* check for low-priority targets */
- if (obj ==
NO_OBJECT
) {
+ if (obj ==
INTRANSITIVE
) {
/* Can't attack bird or machine by throwing axe. */
if (HERE(BIRD) && verb != THROW) {
obj = BIRD;
/* Can't attack bird or machine by throwing axe. */
if (HERE(BIRD) && verb != THROW) {
obj = BIRD;
@@
-113,12
+112,12
@@
static int attack(struct command_t *command)
state_change(DRAGON, DRAGON_DEAD);
game.prop[RUG] = RUG_FLOOR;
/* Hardcoding LOC_SECRET5 as the dragon's death location is ugly.
state_change(DRAGON, DRAGON_DEAD);
game.prop[RUG] = RUG_FLOOR;
/* Hardcoding LOC_SECRET5 as the dragon's death location is ugly.
- * The way it was computed before was w
i
rse; it depended on the
+ * The way it was computed before was w
o
rse; it depended on the
* two dragon locations being LOC_SECRET4 and LOC_SECRET6 and
* LOC_SECRET5 being right between them.
*/
* two dragon locations being LOC_SECRET4 and LOC_SECRET6 and
* LOC_SECRET5 being right between them.
*/
- move(DRAGON + NOBJECTS,
-1
);
- move(RUG + NOBJECTS,
LOC_NOWHER
E);
+ move(DRAGON + NOBJECTS,
IS_FIXED
);
+ move(RUG + NOBJECTS,
IS_FRE
E);
move(DRAGON, LOC_SECRET5);
move(RUG, LOC_SECRET5);
drop(BLOOD, LOC_SECRET5);
move(DRAGON, LOC_SECRET5);
move(RUG, LOC_SECRET5);
drop(BLOOD, LOC_SECRET5);
@@
-153,7
+152,7
@@
static int attack(struct command_t *command)
}
switch (obj) {
}
switch (obj) {
- case
NO_OBJECT
:
+ case
INTRANSITIVE
:
rspeak(NO_TARGET);
break;
case CLAM:
rspeak(NO_TARGET);
break;
case CLAM:
@@
-231,15
+230,16
@@
static int bigwords(long id)
static void blast(void)
/* Blast. No effect unless you've got dynamite, which is a neat trick! */
{
static void blast(void)
/* Blast. No effect unless you've got dynamite, which is a neat trick! */
{
- if (game.prop[ROD2]
< 0
||
+ if (game.prop[ROD2]
== STATE_NOTFOUND
||
!game.closed)
rspeak(REQUIRES_DYNAMITE);
else {
!game.closed)
rspeak(REQUIRES_DYNAMITE);
else {
- game.bonus = VICTORY_MESSAGE;
- if (game.loc == LOC_NE)
- game.bonus = DEFEAT_MESSAGE;
if (HERE(ROD2))
game.bonus = SPLATTER_MESSAGE;
if (HERE(ROD2))
game.bonus = SPLATTER_MESSAGE;
+ else if (game.loc == LOC_NE)
+ game.bonus = DEFEAT_MESSAGE;
+ else
+ game.bonus = VICTORY_MESSAGE;
rspeak(game.bonus);
terminate(endgame);
}
rspeak(game.bonus);
terminate(endgame);
}
@@
-248,23
+248,26
@@
static void blast(void)
static int vbreak(vocab_t verb, obj_t obj)
/* Break. Only works for mirror in repository and, of course, the vase. */
{
static int vbreak(vocab_t verb, obj_t obj)
/* Break. Only works for mirror in repository and, of course, the vase. */
{
- if (obj == MIRROR) {
+ switch (obj) {
+ case MIRROR:
if (game.closed) {
rspeak(BREAK_MIRROR);
return GO_DWARFWAKE;
} else {
rspeak(TOO_FAR);
if (game.closed) {
rspeak(BREAK_MIRROR);
return GO_DWARFWAKE;
} else {
rspeak(TOO_FAR);
-
return GO_CLEAROBJ
;
+
break
;
}
}
+ case VASE:
+ if (game.prop[VASE] == VASE_WHOLE) {
+ if (TOTING(VASE))
+ drop(VASE, game.loc);
+ state_change(VASE, VASE_BROKEN);
+ game.fixed[VASE] = IS_FIXED;
+ break;
+ }
+ default:
+ speak(actions[verb].message);
}
}
- if (obj == VASE && game.prop[VASE] == VASE_WHOLE) {
- if (TOTING(VASE))
- drop(VASE, game.loc);
- state_change(VASE, VASE_BROKEN);
- game.fixed[VASE] = IS_FIXED;
- return GO_CLEAROBJ;
- }
- speak(actions[verb].message);
return (GO_CLEAROBJ);
}
return (GO_CLEAROBJ);
}
@@
-493,7
+496,7
@@
static int discard(token_t verb, obj_t obj)
} else if (obj == BEAR && AT(TROLL)) {
state_change(TROLL, TROLL_GONE);
move(TROLL, LOC_NOWHERE);
} else if (obj == BEAR && AT(TROLL)) {
state_change(TROLL, TROLL_GONE);
move(TROLL, LOC_NOWHERE);
- move(TROLL + NOBJECTS,
LOC_NOWHER
E);
+ move(TROLL + NOBJECTS,
IS_FRE
E);
move(TROLL2, objects[TROLL].plac);
move(TROLL2 + NOBJECTS, objects[TROLL].fixd);
juggle(CHASM);
move(TROLL2, objects[TROLL].plac);
move(TROLL2 + NOBJECTS, objects[TROLL].fixd);
juggle(CHASM);
@@
-527,7
+530,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
* the bottle, drink that, else must be at a water loc, so drink stream. */
{
/* 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. */
{
- if (obj ==
NO_OBJECT
&& LIQLOC(game.loc) != WATER &&
+ if (obj ==
INTRANSITIVE
&& LIQLOC(game.loc) != WATER &&
(LIQUID() != WATER || !HERE(BOTTLE))) {
return GO_UNKNOWN;
}
(LIQUID() != WATER || !HERE(BOTTLE))) {
return GO_UNKNOWN;
}
@@
-539,7
+542,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);
return GO_CLEAROBJ;
}
rspeak(RIDICULOUS_ATTEMPT);
return GO_CLEAROBJ;
}
@@
-726,11
+729,11
@@
int fill(token_t verb, obj_t obj)
game.place[k] = LOC_NOWHERE;
return GO_CLEAROBJ;
}
game.place[k] = LOC_NOWHERE;
return GO_CLEAROBJ;
}
- if (obj !=
NO_OBJECT
&& obj != BOTTLE) {
+ if (obj !=
INTRANSITIVE
&& obj != BOTTLE) {
speak(actions[verb].message);
return GO_CLEAROBJ;
}
speak(actions[verb].message);
return GO_CLEAROBJ;
}
- if (obj ==
NO_OBJECT
&& !HERE(BOTTLE))
+ if (obj ==
INTRANSITIVE
&& !HERE(BOTTLE))
return GO_UNKNOWN;
if (HERE(URN) && game.prop[URN] != URN_EMPTY) {
return GO_UNKNOWN;
if (HERE(URN) && game.prop[URN] != URN_EMPTY) {
@@
-989,7
+992,7
@@
static int pour(token_t verb, obj_t obj)
* special tests for pouring water or oil on plant or rusty door. */
{
if (obj == BOTTLE ||
* special tests for pouring water or oil on plant or rusty door. */
{
if (obj == BOTTLE ||
- obj ==
NO_OBJECT
)
+ obj ==
INTRANSITIVE
)
obj = LIQUID();
if (obj == NO_OBJECT)
return GO_UNKNOWN;
obj = LIQUID();
if (obj == NO_OBJECT)
return GO_UNKNOWN;
@@
-1150,7
+1153,7
@@
static int throw (struct command_t *command)
/* Snarf a treasure for the troll. */
drop(command->obj, LOC_NOWHERE);
move(TROLL, LOC_NOWHERE);
/* Snarf a treasure for the troll. */
drop(command->obj, LOC_NOWHERE);
move(TROLL, LOC_NOWHERE);
- move(TROLL + NOBJECTS,
LOC_NOWHER
E);
+ move(TROLL + NOBJECTS,
IS_FRE
E);
drop(TROLL2, objects[TROLL].plac);
drop(TROLL2 + NOBJECTS, objects[TROLL].fixd);
juggle(CHASM);
drop(TROLL2, objects[TROLL].plac);
drop(TROLL2 + NOBJECTS, objects[TROLL].fixd);
juggle(CHASM);
@@
-1170,9
+1173,9
@@
static int throw (struct command_t *command)
return throw_support(DRAGON_SCALES);
if (AT(TROLL))
return throw_support(TROLL_RETURNS);
return throw_support(DRAGON_SCALES);
if (AT(TROLL))
return throw_support(TROLL_RETURNS);
-
else
if (AT(OGRE))
+ if (AT(OGRE))
return throw_support(OGRE_DODGE);
return throw_support(OGRE_DODGE);
-
else
if (HERE(BEAR) && game.prop[BEAR] == UNTAMED_BEAR) {
+ if (HERE(BEAR) && game.prop[BEAR] == UNTAMED_BEAR) {
/* This'll teach him to throw the axe at the bear! */
drop(AXE, game.loc);
game.fixed[AXE] = IS_FIXED;
/* This'll teach him to throw the axe at the bear! */
drop(AXE, game.loc);
game.fixed[AXE] = IS_FIXED;
@@
-1180,7
+1183,7
@@
static int throw (struct command_t *command)
state_change(AXE, AXE_LOST);
return GO_CLEAROBJ;
}
state_change(AXE, AXE_LOST);
return GO_CLEAROBJ;
}
- command->obj =
NO_OBJECT
;
+ command->obj =
INTRANSITIVE
;
return (attack(command));
}
return (attack(command));
}
@@
-1289,10
+1292,10
@@
int action(struct command_t *command)
else if ((LIQUID() == command->obj && HERE(BOTTLE)) ||
command->obj == LIQLOC(game.loc))
/* FALL THROUGH */;
else if ((LIQUID() == command->obj && HERE(BOTTLE)) ||
command->obj == LIQLOC(game.loc))
/* FALL THROUGH */;
- else if (command->obj == OIL && HERE(URN) && game.prop[URN] !=
0
) {
+ else if (command->obj == OIL && HERE(URN) && game.prop[URN] !=
URN_EMPTY
) {
command->obj = URN;
/* FALL THROUGH */;
command->obj = URN;
/* FALL THROUGH */;
- } else if (command->obj == PLANT && AT(PLANT2) && game.prop[PLANT2] !=
0
) {
+ } else if (command->obj == PLANT && AT(PLANT2) && game.prop[PLANT2] !=
PLANT_THIRSTY
) {
command->obj = PLANT2;
/* FALL THROUGH */;
} else if (command->obj == KNIFE && game.knfloc == game.loc) {
command->obj = PLANT2;
/* FALL THROUGH */;
} else if (command->obj == KNIFE && game.knfloc == game.loc) {
@@
-1353,13
+1356,14
@@
int action(struct command_t *command)
return GO_CLEAROBJ;
}
case ATTACK:
return GO_CLEAROBJ;
}
case ATTACK:
+ command->obj = INTRANSITIVE;
return attack(command);
case POUR:
return attack(command);
case POUR:
- return pour(command->verb,
command->obj
);
+ return pour(command->verb,
INTRANSITIVE
);
case EAT:
return eat(command->verb, INTRANSITIVE);
case DRINK:
case EAT:
return eat(command->verb, INTRANSITIVE);
case DRINK:
- return drink(command->verb,
command->obj
);
+ return drink(command->verb,
INTRANSITIVE
);
case RUB:
return GO_UNKNOWN;
case THROW:
case RUB:
return GO_UNKNOWN;
case THROW:
@@
-1373,7
+1377,7
@@
int action(struct command_t *command)
case FEED:
return GO_UNKNOWN;
case FILL:
case FEED:
return GO_UNKNOWN;
case FILL:
- return fill(command->verb,
command->obj
);
+ return fill(command->verb,
INTRANSITIVE
);
case BLAST:
blast();
return GO_CLEAROBJ;
case BLAST:
blast();
return GO_CLEAROBJ;