game.newloc -= SPECIALBASE;
switch (game.newloc) {
case 1:
- /* Travel 301. Plover-alcove passage. Can carry only
+ /* Special travel 1. Plover-alcove passage. Can carry only
* emerald. Note: travel table must include "useless"
* entries going through passage, which can never be used
* for actual motion, but can be spotted by "go back". */
- /* FIXME: Arithmetic on location numbers */
- game.newloc = 99 + 100 - game.loc;
+ game.newloc = (game.loc == LOC_PLOVER)
+ ? LOC_ALCOVE
+ : LOC_PLOVER;
if (game.holdng > 1 ||
(game.holdng == 1 && !TOTING(EMERALD))) {
game.newloc = game.loc;
}
return;
case 2:
- /* Travel 302. Plover transport. Drop the
+ /* Special travel 2. Plover transport. Drop the
* emerald (only use special travel if toting
* it), so he's forced to use the plover-passage
* to get it out. Having dropped it, go back and
travel_entry = te_tmp;
continue; /* goto L12 */
case 3:
- /* Travel 303. Troll bridge. Must be done only
- * as special motion so that dwarves won't wander
- * across and encounter the bear. (They won't
- * follow the player there because that region is
- * forbidden to the pirate.) If
+ /* Special travel 3. Troll bridge. Must be done
+ * only as special motion so that dwarves won't
+ * wander across and encounter the bear. (They
+ * won't follow the player there because that
+ * region is forbidden to the pirate.) If
* game.prop(TROLL)=1, he's crossed since paying,
* so step out and block him. (standard travel
* entries check for game.prop(TROLL)=0.) Special
* problems arise from the use of negative prop numbers to suppress
* the object descriptions until he's actually moved the objects. */
{
+ /* Don't tick game.clock1 unless well into cave (and not at Y2). */
if (game.tally == 0 && INDEEP(game.loc) && game.loc != LOC_Y2)
--game.clock1;
if (game.prop[obj] < 0) {
if (game.closed)
continue;
- game.prop[obj] = 0;
+ game.prop[obj] = STATE_FOUND;
if (obj == RUG)
game.prop[RUG] = RUG_DRAGON;
if (obj == CHAIN)
* (so goes the rationalisation). */
}
int kk = game.prop[obj];
- if (obj == STEPS && game.loc == game.fixed[STEPS])
- kk = 1;
+ if (obj == STEPS)
+ kk = (game.loc == game.fixed[STEPS])
+ ? STEPS_UP
+ : STEPS_DOWN;
pspeak(obj, look, kk, true);
}
}
checkhints();
/* If closing time, check for any objects being toted with
- * game.prop < 0 and set the prop to -1-game.prop. This way
- * objects won't be described until they've been picked up
- * and put down separate from their respective piles. Don't
- * tick game.clock1 unless well into cave (and not at Y2). */
+ * game.prop < 0 and stash them. This way objects won't be
+ * described until they've been picked up and put down
+ * separate from their respective piles. */
if (game.closed) {
if (game.prop[OYSTER] < 0 && TOTING(OYSTER))
pspeak(OYSTER, look, 1, true);
for (size_t i = 1; i <= NOBJECTS; i++) {
if (TOTING(i) && game.prop[i] < 0)
- game.prop[i] = -1 - game.prop[i];
+ game.prop[i] = STASHED(i);
}
}
game.wzdark = DARK(game.loc);