-static phase_codes_t bigwords(vocab_t id)
-/* FEE FIE FOE FOO (AND FUM). Advance to next state if given in proper order.
- * Look up foo in special section of vocab to determine which word we've got.
- * Last word zips the eggs back to the giant room (unless already there). */
-{
- if ((game.foobar == WORD_EMPTY && id == FEE) ||
- (game.foobar == FEE && id == FIE) ||
- (game.foobar == FIE && id == FOE) ||
- (game.foobar == FOE && id == FOO) ||
- (game.foobar == FOE && id == FUM)) {
+static phase_codes_t bigwords(vocab_t id) {
+/* Only called on FEE FIE FOE FOO (AND FUM). Advance to next state if given
+ * in proper order. Look up foo in special section of vocab to determine which
+ * word we've got. Last word zips the eggs back to the giant room (unless
+ * already there). */
+ int foobar = abs(game.foobar);
+
+ /* Only FEE can start a magic-word sequence. */
+ if ((foobar == WORD_EMPTY) && (id == FIE || id == FOE || id == FOO || id == FUM)) {
+ rspeak(NOTHING_HAPPENS);
+ return GO_CLEAROBJ;
+ }
+
+ if ((foobar == WORD_EMPTY && id == FEE) ||
+ (foobar == FEE && id == FIE) ||
+ (foobar == FIE && id == FOE) ||
+ (foobar == FOE && id == FOO)) {