projects
/
open-adventure.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Correct buggy behavior of sign in endgame. Add a test for this.
[open-adventure.git]
/
main.c
diff --git
a/main.c
b/main.c
index 724194df110d6f73d5434a47f4b9980e8daf8963..f59f600347381796b094d80a719398dd2f5a3270 100644
(file)
--- a/
main.c
+++ b/
main.c
@@
-188,11
+188,11
@@
static bool fallback_handler(char *buf)
* notes). */
static void checkhints(void)
{
* notes). */
static void checkhints(void)
{
- if (
COND
[game.loc] >= game.conds) {
+ if (
conditions
[game.loc] >= game.conds) {
for (int hint = 0; hint < HINT_COUNT; hint++) {
if (game.hinted[hint])
continue;
for (int hint = 0; hint < HINT_COUNT; hint++) {
if (game.hinted[hint])
continue;
- if (!CNDBIT(game.loc, hint + 1 + HBASE))
+ if (!CNDBIT(game.loc, hint + 1 +
COND_
HBASE))
game.hintlc[hint] = -1;
++game.hintlc[hint];
/* Come here if he's been long enough at required loc(s) for some
game.hintlc[hint] = -1;
++game.hintlc[hint];
/* Come here if he's been long enough at required loc(s) for some
@@
-203,7
+203,7
@@
static void checkhints(void)
switch (hint) {
case 0:
/* cave */
switch (hint) {
case 0:
/* cave */
- if (game.prop[GRATE] ==
0
&& !HERE(KEYS))
+ if (game.prop[GRATE] ==
GRATE_CLOSED
&& !HERE(KEYS))
break;
game.hintlc[hint] = 0;
return;
break;
game.hintlc[hint] = 0;
return;
@@
-303,7
+303,7
@@
static bool spotted_by_pirate(int i)
}
}
/* Force chest placement before player finds last treasure */
}
}
/* Force chest placement before player finds last treasure */
- if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == LOC_NOWHERE && HERE(LAMP) && game.prop[LAMP] ==
1
) {
+ if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == LOC_NOWHERE && HERE(LAMP) && game.prop[LAMP] ==
LAMP_BRIGHT
) {
rspeak(PIRATE_SPOTTED);
movechest = true;
}
rspeak(PIRATE_SPOTTED);
movechest = true;
}
@@
-355,7
+355,7
@@
static bool dwarfmove(void)
* means dwarves won't follow him into dead end in maze, but
* c'est la vie. They'll wait for him outside the dead
* end. */
* means dwarves won't follow him into dead end in maze, but
* c'est la vie. They'll wait for him outside the dead
* end. */
- if (game.loc == 0 || FORCED(game.loc) || CNDBIT(game.newloc, NOARRR))
+ if (game.loc == 0 || FORCED(game.loc) || CNDBIT(game.newloc,
COND_
NOARRR))
return true;
/* Dwarf activity level ratchets up */
return true;
/* Dwarf activity level ratchets up */
@@
-369,7
+369,7
@@
static bool dwarfmove(void)
* the 5 dwarves. If any of the survivors is at loc,
* replace him with the alternate. */
if (game.dflag == 1) {
* the 5 dwarves. If any of the survivors is at loc,
* replace him with the alternate. */
if (game.dflag == 1) {
- if (!INDEEP(game.loc) || (PCT(95) && (!CNDBIT(game.loc, NOBACK) || PCT(85))))
+ if (!INDEEP(game.loc) || (PCT(95) && (!CNDBIT(game.loc,
COND_
NOBACK) || PCT(85))))
return true;
game.dflag = 2;
for (int i = 1; i <= 2; i++) {
return true;
game.dflag = 2;
for (int i = 1; i <= 2; i++) {
@@
-413,7
+413,7
@@
static bool dwarfmove(void)
j >= 20 ||
game.newloc == game.dloc[i] ||
FORCED(game.newloc) ||
j >= 20 ||
game.newloc == game.dloc[i] ||
FORCED(game.newloc) ||
- (i == PIRATE && CNDBIT(game.newloc, NOARRR)) ||
+ (i == PIRATE && CNDBIT(game.newloc,
COND_
NOARRR)) ||
labs(TRAVEL[kk]) / 1000000 == 100);
if (!avoided) {
tk[j++] = game.newloc;
labs(TRAVEL[kk]) / 1000000 == 100);
if (!avoided) {
tk[j++] = game.newloc;
@@
-501,7
+501,7
@@
static void croak(void)
else {
game.place[WATER] = game.place[OIL] = LOC_NOWHERE;
if (TOTING(LAMP))
else {
game.place[WATER] = game.place[OIL] = LOC_NOWHERE;
if (TOTING(LAMP))
- game.prop[LAMP] =
0
;
+ game.prop[LAMP] =
LAMP_DARK
;
for (int j = 1; j <= NOBJECTS; j++) {
int i = NOBJECTS + 1 - j;
if (TOTING(i)) {
for (int j = 1; j <= NOBJECTS; j++) {
int i = NOBJECTS + 1 - j;
if (TOTING(i)) {
@@
-541,7
+541,7
@@
static bool playermove(token_t verb, int motion)
game.oldloc = game.loc;
k2 = 0;
if (motion == game.loc)k2 = FORGOT_PATH;
game.oldloc = game.loc;
k2 = 0;
if (motion == game.loc)k2 = FORGOT_PATH;
- if (CNDBIT(game.loc, NOBACK))k2 = TWIST_TURN;
+ if (CNDBIT(game.loc,
COND_
NOBACK))k2 = TWIST_TURN;
if (k2 == 0) {
for (;;) {
scratchloc = MOD((labs(TRAVEL[kk]) / 1000), 1000);
if (k2 == 0) {
for (;;) {
scratchloc = MOD((labs(TRAVEL[kk]) / 1000), 1000);
@@
-687,7
+687,7
@@
static bool playermove(token_t verb, int motion)
* and block him. (standard travel entries check for
* game.prop(TROLL)=0.) Special stuff for bear. */
if (game.prop[TROLL] == 1) {
* and block him. (standard travel entries check for
* game.prop(TROLL)=0.) Special stuff for bear. */
if (game.prop[TROLL] == 1) {
- pspeak(TROLL, 1);
+ pspeak(TROLL,
look,
1);
game.prop[TROLL] = 0;
MOVE(TROLL2, 0);
MOVE(TROLL2 + NOBJECTS, 0);
game.prop[TROLL] = 0;
MOVE(TROLL2, 0);
MOVE(TROLL2 + NOBJECTS, 0);
@@
-761,7
+761,7
@@
static bool closecheck(void)
* know the bivalve is an oyster. *And*, the dwarves must
* have been activated, since we've found chest. */
if (game.clock1 == 0) {
* know the bivalve is an oyster. *And*, the dwarves must
* have been activated, since we've found chest. */
if (game.clock1 == 0) {
- game.prop[GRATE] =
0
;
+ game.prop[GRATE] =
GRATE_CLOSED
;
game.prop[FISSURE] = 0;
for (int i = 1; i <= NDWARVES; i++) {
game.dseen[i] = false;
game.prop[FISSURE] = 0;
for (int i = 1; i <= NDWARVES; i++) {
game.dseen[i] = false;
@@
-799,10
+799,9
@@
static bool closecheck(void)
* objects he might be carrying (lest he have some which
* could cause trouble, such as the keys). We describe the
* flash of light and trundle back. */
* objects he might be carrying (lest he have some which
* could cause trouble, such as the keys). We describe the
* flash of light and trundle back. */
- game.prop[BOTTLE] = PUT(BOTTLE, LOC_NE,
1
);
+ game.prop[BOTTLE] = PUT(BOTTLE, LOC_NE,
EMPTY_BOTTLE
);
game.prop[PLANT] = PUT(PLANT, LOC_NE, 0);
game.prop[OYSTER] = PUT(OYSTER, LOC_NE, 0);
game.prop[PLANT] = PUT(PLANT, LOC_NE, 0);
game.prop[OYSTER] = PUT(OYSTER, LOC_NE, 0);
- OBJTXT[OYSTER] = 3;
game.prop[LAMP] = PUT(LAMP, LOC_NE, 0);
game.prop[ROD] = PUT(ROD, LOC_NE, 0);
game.prop[DWARF] = PUT(DWARF, LOC_NE, 0);
game.prop[LAMP] = PUT(LAMP, LOC_NE, 0);
game.prop[ROD] = PUT(ROD, LOC_NE, 0);
game.prop[DWARF] = PUT(DWARF, LOC_NE, 0);
@@
-813,7
+812,7
@@
static bool closecheck(void)
* Reuse sign. */
PUT(GRATE, LOC_SW, 0);
PUT(SIGN, LOC_SW, 0);
* Reuse sign. */
PUT(GRATE, LOC_SW, 0);
PUT(SIGN, LOC_SW, 0);
-
++OBJTXT[SIGN]
;
+
game.prop[SIGN] = ENDGAME_SIGN
;
game.prop[SNAKE] = PUT(SNAKE, LOC_SW, 1);
game.prop[BIRD] = PUT(BIRD, LOC_SW, 1);
game.prop[CAGE] = PUT(CAGE, LOC_SW, 0);
game.prop[SNAKE] = PUT(SNAKE, LOC_SW, 1);
game.prop[BIRD] = PUT(BIRD, LOC_SW, 1);
game.prop[CAGE] = PUT(CAGE, LOC_SW, 0);
@@
-839,7
+838,7
@@
static bool closecheck(void)
static void lampcheck(void)
/* Check game limit and lamp timers */
{
static void lampcheck(void)
/* Check game limit and lamp timers */
{
- if (game.prop[LAMP] ==
1
)
+ if (game.prop[LAMP] ==
LAMP_BRIGHT
)
--game.limit;
/* Another way we can force an end to things is by having the
--game.limit;
/* Another way we can force an end to things is by having the
@@
-848,16
+847,16
@@
static void lampcheck(void)
* here, in which case we replace the batteries and continue.
* Second is for other cases of lamp dying. Eve after it goes
* out, he can explore outside for a while if desired. */
* here, in which case we replace the batteries and continue.
* Second is for other cases of lamp dying. Eve after it goes
* out, he can explore outside for a while if desired. */
- if (game.limit <= WARNTIME && HERE(BATTERY) && game.prop[BATTERY] ==
0
&& HERE(LAMP)) {
+ if (game.limit <= WARNTIME && HERE(BATTERY) && game.prop[BATTERY] ==
FRESH_BATTERIES
&& HERE(LAMP)) {
rspeak(REPLACE_BATTERIES);
rspeak(REPLACE_BATTERIES);
- game.prop[BATTERY] =
1
;
+ game.prop[BATTERY] =
DEAD_BATTERIES
;
if (TOTING(BATTERY))
DROP(BATTERY, game.loc);
game.limit += BATTERYLIFE;
game.lmwarn = false;
} else if (game.limit == 0) {
game.limit = -1;
if (TOTING(BATTERY))
DROP(BATTERY, game.loc);
game.limit += BATTERYLIFE;
game.lmwarn = false;
} else if (game.limit == 0) {
game.limit = -1;
- game.prop[LAMP] =
0
;
+ game.prop[LAMP] =
LAMP_DARK
;
if (HERE(LAMP))
rspeak(LAMP_OUT);
} else if (game.limit <= WARNTIME) {
if (HERE(LAMP))
rspeak(LAMP_OUT);
} else if (game.limit <= WARNTIME) {
@@
-865,7
+864,8
@@
static void lampcheck(void)
game.lmwarn = true;
int spk = GET_BATTERIES;
if (game.place[BATTERY] == LOC_NOWHERE)spk = LAMP_DIM;
game.lmwarn = true;
int spk = GET_BATTERIES;
if (game.place[BATTERY] == LOC_NOWHERE)spk = LAMP_DIM;
- if (game.prop[BATTERY] == 1)spk = MISSING_BATTERYIES;
+ if (game.prop[BATTERY] == DEAD_BATTERIES)
+ spk = MISSING_BATTERIES;
rspeak(spk);
}
}
rspeak(spk);
}
}
@@
-912,7
+912,7
@@
static void listobjects(void)
int kk = game.prop[obj];
if (obj == STEPS && game.loc == game.fixed[STEPS])
kk = 1;
int kk = game.prop[obj];
if (obj == STEPS && game.loc == game.fixed[STEPS])
kk = 1;
- pspeak(obj, kk);
+ pspeak(obj,
look,
kk);
}
}
}
}
}
}
@@
-938,7
+938,7
@@
static bool do_command(FILE *cmdin)
* wants to go. If so, the dwarf's blocking his way. If
* coming from place forbidden to pirate (dwarves rooted in
* place) let him get out (and attacked). */
* wants to go. If so, the dwarf's blocking his way. If
* coming from place forbidden to pirate (dwarves rooted in
* place) let him get out (and attacked). */
- if (game.newloc != game.loc && !FORCED(game.loc) && !CNDBIT(game.loc, NOARRR)) {
+ if (game.newloc != game.loc && !FORCED(game.loc) && !CNDBIT(game.loc,
COND_
NOARRR)) {
for (size_t i = 1; i <= NDWARVES - 1; i++) {
if (game.odloc[i] == game.newloc && game.dseen[i]) {
game.newloc = game.loc;
for (size_t i = 1; i <= NDWARVES - 1; i++) {
if (game.odloc[i] == game.newloc && game.dseen[i]) {
game.newloc = game.loc;
@@
-999,7
+999,7
@@
L2600:
* tick game.clock1 unless well into cave (and not at Y2). */
if (game.closed) {
if (game.prop[OYSTER] < 0 && TOTING(OYSTER))
* tick game.clock1 unless well into cave (and not at Y2). */
if (game.closed) {
if (game.prop[OYSTER] < 0 && TOTING(OYSTER))
- pspeak(OYSTER, 1);
+ pspeak(OYSTER,
look,
1);
for (size_t i = 1; i <= NOBJECTS; i++) {
if (TOTING(i) && game.prop[i] < 0)
game.prop[i] = -1 - game.prop[i];
for (size_t i = 1; i <= NOBJECTS; i++) {
if (TOTING(i) && game.prop[i] < 0)
game.prop[i] = -1 - game.prop[i];