Merge branch 'master' into magic-number
authorPeje Nilsson <peje66@gmail.com>
Mon, 19 Jun 2017 21:44:48 +0000 (23:44 +0200)
committerPeje Nilsson <peje66@gmail.com>
Mon, 19 Jun 2017 21:44:48 +0000 (23:44 +0200)
13 files changed:
actions.c
advent.h
init.c
main.c
misc.c
tests/drinkfail.chk [new file with mode: 0644]
tests/drinkfail.log [new file with mode: 0644]
tests/fillfail.chk [new file with mode: 0644]
tests/fillfail.log [new file with mode: 0644]
tests/illformed.chk
tests/illformed.log
tests/intransitivecarry.chk [new file with mode: 0644]
tests/intransitivecarry.log [new file with mode: 0644]

index 6cdc61dbb9cd857207f4b355ce3bfb693f8669f4..2a223bc9a9e40b42626530ee93d8820937d1d0db 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -1054,7 +1054,8 @@ int action(FILE *input, enum speechpart part, token_t verb, token_t obj)
 
     switch (part) {
     case intransitive:
-        if (WD2 > 0 && verb != SAY) return (2800);
+        if (WD2 > 0 && verb != SAY)
+           return GO_WORD2;
         if (verb == SAY)obj = WD2;
         if (obj == 0 || obj == INTRANSITIVE) {
             /*  Analyse an intransitive verb (ie, no object given yet). */
index f199489e7034939236b463fcddf7157c2d34c83a..ff62476379a7f16dda8212109ef28a52cbc02cb5 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -91,6 +91,9 @@ extern void* xmalloc(size_t size);
 extern char* xstrdup(const char*);
 extern void packed_to_token(long, char token[]);
 extern void speak(const char*);
+extern bool wordeq(token_t, token_t);
+extern bool wordempty(token_t);
+extern void wordclear(token_t *);
 extern void PSPEAK(vocab_t, int);
 extern void RSPEAK(vocab_t);
 extern void SETPRM(long, long, long);
diff --git a/init.c b/init.c
index 36f00b198e4f3986591c68d7a20019d35a79155c..0e52a32c5ce3d66b35f0cf3743d0675c07e32d3a 100644 (file)
--- a/init.c
+++ b/init.c
  *     apply to players whose scores are higher than the previous N but not
  *     higher than this N.  Note that these scores probably change with every
  *     modification (and particularly expansion) of the program.
- *  SECTION 11: Hints.  Each line contains a hint number (add 10 to get cond
+ *  Section 11: Hints.  Each line contains a hint number (add 10 to get cond
  *     bit; see section 9), the number of turns he must be at the right loc(s)
  *     before triggering the hint, the points deducted for taking the hint,
  *     the message number (section 6) of the question, and the message number
diff --git a/main.c b/main.c
index 92ee30391dfb7e9bf349fc906a76d5052ffeb8c4..b830d89ce187d94735f7041864563d48b0293380 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1060,8 +1060,9 @@ L2607:
         if (V1 == ENTER && WD2 > 0) {
             WD1 = WD2;
             WD1X = WD2X;
-            WD2 = 0;
+            wordclear(&WD2);
         } else {
+           /* FIXME: Magic numbers */
             if (!((V1 != 1000 + WATER && V1 != 1000 + OIL) ||
                   (V2 != 1000 + PLANT && V2 != 1000 + DOOR))) {
                 if (AT(V2 - 1000))
@@ -1071,12 +1072,12 @@ L2607:
                 WD1 = MAKEWD(WORD_CATCH);
         }
 L2620:
-        if (WD1 == MAKEWD(WORD_WEST)) {
+        if (wordeq(WD1, MAKEWD(WORD_WEST))) {
             ++game.iwest;
             if (game.iwest == 10)
                 RSPEAK(W_IS_WEST);
         }
-        if (WD1 == MAKEWD(WORD_GO) && WD2 != 0) {
+        if (wordeq(WD1, MAKEWD(WORD_GO)) && !wordempty(WD2)) {
             if (++igo == 10)
                 RSPEAK(GO_UNNEEDED);
         }
@@ -1133,7 +1134,7 @@ Laction:
             /* Get second word for analysis. */
             WD1 = WD2;
             WD1X = WD2X;
-            WD2 = 0;
+            wordclear(&WD2);
             goto L2620;
         case GO_UNKNOWN:
             /*  Random intransitive verbs come here.  Clear obj just in case
diff --git a/misc.c b/misc.c
index ee2ac25cd95a90a07b559548240959359f7391bd..ba834fdffd44b84cef98268a2e2cbadc8dea63b2 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -50,6 +50,23 @@ void packed_to_token(long packed, char token[6])
     }
 }
 
+/* Hide the fact that wods are corrently packed longs */
+
+bool wordeq(token_t a, token_t b)
+{
+    return a == b;
+}
+
+bool wordempty(token_t a)
+{
+    return a == 0;
+}
+
+void wordclear(token_t *v)
+{
+    *v = 0;
+}
+
 /*  I/O routines (SPEAK, PSPEAK, RSPEAK, SETPRM, GETIN, YES) */
 
 void speak(const char* msg)
diff --git a/tests/drinkfail.chk b/tests/drinkfail.chk
new file mode 100644 (file)
index 0000000..43f9e2c
--- /dev/null
@@ -0,0 +1,37 @@
+
+Welcome to Adventure!!  Would you like instructions?
+
+> n
+
+You are standing at the end of a road before a small brick building.
+Around you is a forest.  A small stream flows out of the building and
+down a gully.
+
+> in
+
+You are inside a building, a well house for a large spring.
+
+There are some keys on the ground here.
+
+There is a shiny brass lamp nearby.
+
+There is food here.
+
+There is a bottle of water here.
+
+> xyzzy
+
+>>Foof!<<
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> drink
+
+Drink what?
+
+
+You scored 32 out of a possible 430, using 3 turns.
+
+You are obviously a rank amateur.  Better luck next time.
+
+To achieve the next higher rating, you need 14 more points.
diff --git a/tests/drinkfail.log b/tests/drinkfail.log
new file mode 100644 (file)
index 0000000..7beb35b
--- /dev/null
@@ -0,0 +1,5 @@
+## Drink unknown
+n
+in
+xyzzy
+drink
diff --git a/tests/fillfail.chk b/tests/fillfail.chk
new file mode 100644 (file)
index 0000000..48835ed
--- /dev/null
@@ -0,0 +1,57 @@
+
+Welcome to Adventure!!  Would you like instructions?
+
+> n
+
+You are standing at the end of a road before a small brick building.
+Around you is a forest.  A small stream flows out of the building and
+down a gully.
+
+> in
+
+You are inside a building, a well house for a large spring.
+
+There are some keys on the ground here.
+
+There is a shiny brass lamp nearby.
+
+There is food here.
+
+There is a bottle of water here.
+
+> carry lamp
+
+OK
+
+> carry bottle
+
+OK
+
+> fill bottle
+
+Your bottle is already full.
+
+> drink
+
+The bottle of water is now empty.
+
+> xyzzy
+
+>>Foof!<<
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> fill lamp
+
+You can't fill that.
+
+> fill bottle
+
+There is nothing here with which to fill the bottle.
+
+
+You scored 32 out of a possible 430, using 8 turns.
+
+You are obviously a rank amateur.  Better luck next time.
+
+To achieve the next higher rating, you need 14 more points.
diff --git a/tests/fillfail.log b/tests/fillfail.log
new file mode 100644 (file)
index 0000000..5fa485d
--- /dev/null
@@ -0,0 +1,10 @@
+## Attempt to fill lamp, attempt to fill bottle with no source
+n
+in
+carry lamp
+carry bottle
+fill bottle
+drink
+xyzzy
+fill lamp
+fill bottle
\ No newline at end of file
index 51639719d5223f1a5f627c94e922371247a77b02..73d1bb5e246eaecd17c62be9633161e9d585fae6 100644 (file)
@@ -31,6 +31,54 @@ Seed set to 1801426495
 
 You're in front of building.
 
+> in
+
+You are inside a building, a well house for a large spring.
+
+There are some keys on the ground here.
+
+There is a shiny brass lamp nearby.
+
+There is food here.
+
+There is a bottle of water here.
+
+> nothing food
+
+OK
+
+> calm food
+
+I'm game.  Would you care to explain how?
+
+> walk food
+
+Where?
+
+> score food
+
+Huh?
+
+> foo food
+
+I don't know how.
+
+> brief food
+
+On what?
+
+> suspend food
+
+Huh?
+
+> resume food
+
+Huh?
+
+> out
+
+You're in front of building.
+
 > stream
 
 You are in a valley in the forest beside a stream tumbling along a
@@ -75,7 +123,9 @@ Carry what?
 
 I am unsure how you are facing.  Use compass points or nearby objects.
 
-You're in front of building.
+You are standing at the end of a road before a small brick building.
+Around you is a forest.  A small stream flows out of the building and
+down a gully.
 
 > eat
 
@@ -106,7 +156,7 @@ OK
 
 > in
 
-You are inside a building, a well house for a large spring.
+You're inside building.
 
 There are some keys on the ground here.
 
@@ -381,7 +431,7 @@ Okay, "BOO".
 
 > score
 
-You have garnered 27 out of a possible 430 points, using 74 turns.
+You have garnered 27 out of a possible 430 points, using 84 turns.
 
 > quit keys
 
@@ -395,7 +445,7 @@ Do you really want to quit now?
 
 OK
 
-You scored 27 out of a possible 430, using 76 turns.
+You scored 27 out of a possible 430, using 86 turns.
 
 You are obviously a rank amateur.  Better luck next time.
 
index 4a0443c09758f393c24ae25b4c82ce23e38f8b06..448403c73a2b8f26f2ccedf05e05fc2926652798 100644 (file)
@@ -2,6 +2,16 @@
 foo
 y
 seed 1801426495
+in
+nothing food
+calm food
+walk food
+score food
+foo food
+brief food
+suspend food
+resume food
+out
 stream
 lock
 take water
diff --git a/tests/intransitivecarry.chk b/tests/intransitivecarry.chk
new file mode 100644 (file)
index 0000000..510a9bd
--- /dev/null
@@ -0,0 +1,43 @@
+
+Welcome to Adventure!!  Would you like instructions?
+
+> n
+
+You are standing at the end of a road before a small brick building.
+Around you is a forest.  A small stream flows out of the building and
+down a gully.
+
+> in
+
+You are inside a building, a well house for a large spring.
+
+There are some keys on the ground here.
+
+There is a shiny brass lamp nearby.
+
+There is food here.
+
+There is a bottle of water here.
+
+> carry lamp
+
+OK
+
+> out
+
+You're in front of building.
+
+> drop lamp
+
+OK
+
+> carry
+
+OK
+
+
+You scored 32 out of a possible 430, using 5 turns.
+
+You are obviously a rank amateur.  Better luck next time.
+
+To achieve the next higher rating, you need 14 more points.
diff --git a/tests/intransitivecarry.log b/tests/intransitivecarry.log
new file mode 100644 (file)
index 0000000..640a296
--- /dev/null
@@ -0,0 +1,7 @@
+## Carry when only one object is present
+n
+in
+carry lamp
+out
+drop lamp
+carry