diff options
author | jsm <jsm@NetBSD.org> | 2000-09-23 19:23:57 +0000 |
---|---|---|
committer | jsm <jsm@NetBSD.org> | 2000-09-23 19:23:57 +0000 |
commit | ed51e2ee8c47dbb4c8041637e215fab3dac5bc06 (patch) | |
tree | f0754b91491885c992dfec97463662771c64eb3e /battlestar | |
parent | d89b56558a1f45934500212b523bd084ad39752c (diff) | |
download | bsdgames-darwin-ed51e2ee8c47dbb4c8041637e215fab3dac5bc06.tar.gz bsdgames-darwin-ed51e2ee8c47dbb4c8041637e215fab3dac5bc06.tar.zst bsdgames-darwin-ed51e2ee8c47dbb4c8041637e215fab3dac5bc06.zip |
Use a lookup table to identify whether objects are plural or singular,
instead of testing the final character against 's' in each place.
Avoids oddities about "pot of jewels" and "compass".
Diffstat (limited to 'battlestar')
-rw-r--r-- | battlestar/com2.c | 10 | ||||
-rw-r--r-- | battlestar/com3.c | 9 | ||||
-rw-r--r-- | battlestar/com4.c | 26 | ||||
-rw-r--r-- | battlestar/extern.h | 7 | ||||
-rw-r--r-- | battlestar/globals.c | 15 |
5 files changed, 41 insertions, 26 deletions
diff --git a/battlestar/com2.c b/battlestar/com2.c index ec0e4592..07634da4 100644 --- a/battlestar/com2.c +++ b/battlestar/com2.c @@ -1,4 +1,4 @@ -/* $NetBSD: com2.c,v 1.14 2000/09/22 08:19:21 jsm Exp $ */ +/* $NetBSD: com2.c,v 1.15 2000/09/23 19:23:57 jsm Exp $ */ /* * Copyright (c) 1983, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)com2.c 8.2 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: com2.c,v 1.14 2000/09/22 08:19:21 jsm Exp $"); +__RCSID("$NetBSD: com2.c,v 1.15 2000/09/23 19:23:57 jsm Exp $"); #endif #endif /* not lint */ @@ -47,7 +47,6 @@ __RCSID("$NetBSD: com2.c,v 1.14 2000/09/22 08:19:21 jsm Exp $"); int wearit() { /* synonyms = {sheathe, sheath} */ - int n; int firstnumber, value; firstnumber = wordnumber; @@ -57,7 +56,6 @@ wearit() value = wordvalue[wordnumber]; if (objsht[value] == NULL) break; - for (n = 0; objsht[value][n]; n++); switch (value) { case -1: @@ -65,7 +63,7 @@ wearit() return (firstnumber); default: - printf("You can't wear%s%s!\n", (objsht[value][n - 1] == 's' ? " " : " a "), objsht[value]); + printf("You can't wear%s%s!\n", (is_plural_object(value) ? " " : " a "), objsht[value]); return (firstnumber); case KNIFE: @@ -94,7 +92,7 @@ wearit() encumber -= objcumber[value]; ourtime++; printf("You are now wearing %s %s.\n", - (objsht[value][n - 1] == 's' ? "the" + (is_plural_object(value) ? "the" : "a"), objsht[value]); } else if (testbit(wear, value)) diff --git a/battlestar/com3.c b/battlestar/com3.c index 86b2e9c1..ea6d122b 100644 --- a/battlestar/com3.c +++ b/battlestar/com3.c @@ -1,4 +1,4 @@ -/* $NetBSD: com3.c,v 1.9 2000/09/22 08:19:21 jsm Exp $ */ +/* $NetBSD: com3.c,v 1.10 2000/09/23 19:23:58 jsm Exp $ */ /* * Copyright (c) 1983, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)com3.c 8.2 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: com3.c,v 1.9 2000/09/22 08:19:21 jsm Exp $"); +__RCSID("$NetBSD: com3.c,v 1.10 2000/09/23 19:23:58 jsm Exp $"); #endif #endif /* not lint */ @@ -194,7 +194,6 @@ int shoot() { int firstnumber, value; - int n; firstnumber = wordnumber; if (!testbit(inven, LASER)) @@ -204,11 +203,11 @@ shoot() while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) { value = wordvalue[wordnumber]; printf("%s:\n", objsht[value]); - for (n = 0; objsht[value][n]; n++); if (testbit(location[position].objects, value)) { clearbit(location[position].objects, value); ourtime++; - printf("The %s explode%s\n", objsht[value], (objsht[value][n - 1] == 's' ? (objsht[value][n - 2] == 's' ? "s." : ".") : "s.")); + printf("The %s explode%s\n", objsht[value], + (is_plural_object(value) ? "." : "s.")); if (value == BOMB) die(); } else diff --git a/battlestar/com4.c b/battlestar/com4.c index a29cb4df..72442cb4 100644 --- a/battlestar/com4.c +++ b/battlestar/com4.c @@ -1,4 +1,4 @@ -/* $NetBSD: com4.c,v 1.13 2000/09/22 12:38:10 jsm Exp $ */ +/* $NetBSD: com4.c,v 1.14 2000/09/23 19:23:58 jsm Exp $ */ /* * Copyright (c) 1983, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)com4.c 8.2 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: com4.c,v 1.13 2000/09/22 12:38:10 jsm Exp $"); +__RCSID("$NetBSD: com4.c,v 1.14 2000/09/23 19:23:58 jsm Exp $"); #endif #endif /* not lint */ @@ -49,7 +49,6 @@ take(from) unsigned int from[]; { int firstnumber, heavy, bulky, value; - int n; firstnumber = wordnumber; if (wordnumber < wordcount && wordvalue[wordnumber + 1] == OFF) { @@ -61,7 +60,6 @@ take(from) while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) { value = wordvalue[wordnumber]; printf("%s:\n", objsht[value]); - for (n = 0; objsht[value][n]; n++); heavy = (carrying + objwt[value]) <= WEIGHT; bulky = (encumber + objcumber[value]) <= CUMBER; if ((testbit(from, value) || wiz || tempwiz) && heavy && bulky && !testbit(inven, value)) { @@ -77,13 +75,18 @@ take(from) if (value == MEDALION) win--; } else if (testbit(inven, value)) - printf("You're already holding%s%s.\n", (objsht[value][n - 1] == 's' ? " " : " a "), objsht[value]); + printf("You're already holding%s%s.\n", + (is_plural_object(value) ? " " : " a "), + objsht[value]); else if (!testbit(from, value)) printf("I dont see any %s around here.\n", objsht[value]); else if (!heavy) - printf("The %s %s too heavy.\n", objsht[value], (objsht[value][n - 1] == 's' ? "are" : "is")); + printf("The %s %s too heavy.\n", objsht[value], + (is_plural_object(value) ? "are" : "is")); else - printf("The %s %s too cumbersome to hold.\n", objsht[value], (objsht[value][n - 1] == 's' ? "are" : "is")); + printf("The %s %s too cumbersome to hold.\n", + objsht[value], + (is_plural_object(value) ? "are" : "is")); if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND) wordnumber++; else @@ -343,6 +346,8 @@ eat() wordnumber++; while (wordnumber <= wordcount) { value = wordvalue[wordnumber]; + if (wordtype[wordnumber] != OBJECT) + value = -1; switch (value) { case -1: @@ -351,11 +356,8 @@ eat() default: printf("You can't eat%s%s!\n", - wordtype[wordnumber] == OBJECT && - objsht[value] - [strlen(objsht[value]) - 1] == 's' ? - " " : " a ", - words[wordnumber]); + is_plural_object(value) ? " " : " a ", + objsht[value]); return (firstnumber); case PAPAYAS: diff --git a/battlestar/extern.h b/battlestar/extern.h index 81ffa9c3..3257bfd7 100644 --- a/battlestar/extern.h +++ b/battlestar/extern.h @@ -1,4 +1,4 @@ -/* $NetBSD: extern.h,v 1.21 2000/09/21 17:44:34 jsm Exp $ */ +/* $NetBSD: extern.h,v 1.22 2000/09/23 19:23:58 jsm Exp $ */ /* * Copyright (c) 1983, 1993 @@ -227,6 +227,9 @@ #define MAXWEIGHT 60 #define MAXCUMBER 10 +/* Flags for objects. */ +#define OBJ_PLURAL 1 + struct room { const char *name; int link[8]; @@ -251,6 +254,8 @@ extern const char *const objsht[NUMOFOBJECTS]; extern const char *const ouch[NUMOFINJURIES]; extern const int objwt[NUMOFOBJECTS]; extern const int objcumber[NUMOFOBJECTS]; +extern const int objflags[NUMOFOBJECTS]; +#define is_plural_object(n) (objflags[(n)] & OBJ_PLURAL) /* current input line */ #define WORDLEN 15 diff --git a/battlestar/globals.c b/battlestar/globals.c index 5805cf96..379cd70a 100644 --- a/battlestar/globals.c +++ b/battlestar/globals.c @@ -1,4 +1,4 @@ -/* $NetBSD: globals.c,v 1.13 2000/09/21 17:44:34 jsm Exp $ */ +/* $NetBSD: globals.c,v 1.14 2000/09/23 19:23:58 jsm Exp $ */ /* * Copyright (c) 1983, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)globals.c 8.2 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: globals.c,v 1.13 2000/09/21 17:44:34 jsm Exp $"); +__RCSID("$NetBSD: globals.c,v 1.14 2000/09/23 19:23:58 jsm Exp $"); #endif #endif /* not lint */ @@ -220,6 +220,17 @@ const int objcumber[NUMOFOBJECTS] = { 10, 8, 8, 10, 10, 3, 1, 2 }; +const int objflags[NUMOFOBJECTS] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, OBJ_PLURAL, 0, OBJ_PLURAL, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, OBJ_PLURAL, 0, 0, 0, + 0, 0, 0, 0, OBJ_PLURAL, 0, 0, OBJ_PLURAL, + 0, 0, OBJ_PLURAL, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 +}; + int win = 1; int matchcount = 20; int followgod = -1; |