- game.wzdark=DARK(0);
- if (game.knfloc > 0 && game.knfloc != game.loc)
- game.knfloc=0;
-
- /* This is where we get a new command from the user */
- if (!GETIN(cmdin, &WD1,&WD1X,&WD2,&WD2X))
- return false;
-
- /* Every input, check "game.foobar" flag. If zero, nothing's
- * going on. If pos, make neg. If neg, he skipped a word,
- * so make it zero. */
-L2607: game.foobar=(game.foobar>0 ? -game.foobar : 0);
- ++game.turns;
- if (game.turns == game.thresh) {
- SPEAK(TTEXT[game.trndex]);
+ msg=arbitrary_messages[16];
+ }
+ if (TOTING(BEAR))RSPEAK(141);
+ newspeak(msg);
+ KMOD=1;
+ if (FORCED(game.loc)) {
+ goto L8;
+ }
+ if (game.loc == 33 && PCT(25) && !game.closng)RSPEAK(7);
+
+ /* Print out descriptions of objects at this location. If
+ * not closing and property value is negative, tally off
+ * another treasure. Rug is special case; once seen, its
+ * game.prop is 1 (dragon on it) till dragon is killed.
+ * Similarly for chain; game.prop is initially 1 (locked to
+ * bear). These hacks are because game.prop=0 is needed to
+ * get full score. */
+
+ if (DARK(game.loc)) goto L2012;
+ ++game.abbrev[game.loc];
+ i=game.atloc[game.loc];
+L2004:
+ if (i == 0)
+ goto L2012;
+ obj=i;
+ if (obj > NOBJECTS)obj=obj-NOBJECTS;
+ if (obj == STEPS && TOTING(NUGGET)) goto L2008;
+ if (game.prop[obj] >= 0) goto L2006;
+ if (game.closed) goto L2008;
+ game.prop[obj]=0;
+ if (obj == RUG || obj == CHAIN)game.prop[obj]=1;
+ --game.tally;
+ /* Note: There used to be a test here to see whether the player had blown it
+ * so badly that he could never ever see the remaining treasures, and if so
+ * the lamp was zapped to 35 turns. But the tests were too simple-minded;
+ * things like killing the bird before the snake was gone (can never see
+ * jewelry), and doing it "right" was hopeless. E.G., could cross troll
+ * bridge several times, using up all available treasures, breaking vase,
+ * using coins to buy batteries, etc., and eventually never be able to get
+ * across again. If bottle were left on far side, could then never get eggs
+ * or trident, and the effects propagate. So the whole thing was flushed.
+ * anyone who makes such a gross blunder isn't likely to find everything
+ * else anyway (so goes the rationalisation). */
+L2006:
+ KK=game.prop[obj];
+ if (obj == STEPS && game.loc == game.fixed[STEPS])KK=1;
+ PSPEAK(obj,KK);
+L2008:
+ i=game.link[i];
+ goto L2004;
+
+L2012:
+ VERB=0;
+ game.oldobj=obj;
+ obj=0;
+
+L2600:
+ checkhints(cmdin);
+
+ /* 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). */
+ if (game.closed) {
+ if (game.prop[OYSTER] < 0 && TOTING(OYSTER))
+ PSPEAK(OYSTER,1);
+ for (i=1; i<=NOBJECTS; i++) {
+ if (TOTING(i) && game.prop[i] < 0)
+ game.prop[i] = -1-game.prop[i];
+ }
+ }
+ game.wzdark=DARK(game.loc);
+ if (game.knfloc > 0 && game.knfloc != game.loc)
+ game.knfloc=0;
+
+ /* This is where we get a new command from the user */
+ if (!GETIN(cmdin, &WD1,&WD1X,&WD2,&WD2X))
+ return false;
+
+ /* Every input, check "game.foobar" flag. If zero, nothing's
+ * going on. If pos, make neg. If neg, he skipped a word,
+ * so make it zero. */
+L2607:
+ game.foobar=(game.foobar>0 ? -game.foobar : 0);
+ ++game.turns;
+ if (game.turns == game.thresh) {
+ newspeak(turn_threshold_messages[game.trndex]);