From: NHOrus Date: Wed, 5 Jul 2017 04:37:42 +0000 (+0300) Subject: Magic number elimination X-Git-Tag: takebird~22 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=8613f0b3d941cacbcfde9a0a02f1bcd8f8d4e7b8;p=open-adventure.git Magic number elimination Special state/locations for game.fixd object array --- diff --git a/actions.c b/actions.c index 59ec428..d5d6446 100644 --- a/actions.c +++ b/actions.c @@ -261,7 +261,7 @@ static int vbreak(token_t verb, token_t obj) if (TOTING(VASE)) drop(VASE, game.loc); state_change(VASE, VASE_BROKEN); - game.fixed[VASE] = -1; + game.fixed[VASE] = IS_FIXED; return GO_CLEAROBJ; } rspeak(actions[verb].message); @@ -302,8 +302,8 @@ static int vcarry(token_t verb, token_t obj) return GO_CLEAROBJ; } - if (game.fixed[obj] != 0) { - if (obj == PLANT && game.prop[PLANT] <= 0) { + if (game.fixed[obj] != IS_FREE) { + if (obj == PLANT && game.prop[PLANT] <= 0) { // FIXME: magical state assertion rspeak(DEEP_ROOTS); return GO_CLEAROBJ; } @@ -381,7 +381,7 @@ static int vcarry(token_t verb, token_t obj) if ((obj == BIRD || obj == CAGE) && (game.prop[BIRD] == BIRD_CAGED || STASHED(BIRD) == BIRD_CAGED)) - /* expression maps BIRD to CAGE and CAGE to BIRD */ + /* expression maps BIRD to CAGE and CAGE to BIRD */ carry(BIRD + CAGE - obj, game.loc); carry(obj, game.loc); if (obj == BOTTLE && LIQUID() != NO_OBJECT) @@ -407,16 +407,16 @@ static int chain(token_t verb) return GO_CLEAROBJ; } game.prop[CHAIN] = CHAIN_HEAP; - game.fixed[CHAIN] = CHAIN_HEAP; + game.fixed[CHAIN] = IS_FREE; if (game.prop[BEAR] != BEAR_DEAD) game.prop[BEAR] = CONTENTED_BEAR; switch (game.prop[BEAR]) { case BEAR_DEAD: - game.fixed[BEAR] = -1; + game.fixed[BEAR] = IS_FIXED; break; default: - game.fixed[BEAR] = 0; + game.fixed[BEAR] = IS_FREE; } rspeak(CHAIN_UNLOCKED); return GO_CLEAROBJ; @@ -435,7 +435,7 @@ static int chain(token_t verb) if (TOTING(CHAIN)) drop(CHAIN, game.loc); - game.fixed[CHAIN] = -1; + game.fixed[CHAIN] = IS_FIXED; rspeak(CHAIN_LOCKED); return GO_CLEAROBJ; @@ -506,7 +506,7 @@ static int discard(token_t verb, token_t obj, bool just_do_it) ? VASE_WHOLE : VASE_DROPPED); if (game.prop[VASE] != VASE_WHOLE) - game.fixed[VASE] = -1; + game.fixed[VASE] = IS_FIXED; } } int k = LIQUID(); @@ -660,7 +660,7 @@ static int feed(token_t verb, token_t obj) if (HERE(FOOD)) { DESTROY(FOOD); game.prop[BEAR] = SITTING_BEAR; - game.fixed[AXE] = 0; + game.fixed[AXE] = IS_FREE; game.prop[AXE] = AXE_HERE; spk = BEAR_TAMED; } @@ -689,7 +689,7 @@ int fill(token_t verb, token_t obj) } rspeak(SHATTER_VASE); game.prop[VASE] = VASE_BROKEN; - game.fixed[VASE] = -1; + game.fixed[VASE] = IS_FIXED; return (discard(verb, VASE, true)); } @@ -1168,7 +1168,7 @@ static int throw (struct command_t *command) else if (HERE(BEAR) && game.prop[BEAR] == UNTAMED_BEAR) { /* This'll teach him to throw the axe at the bear! */ drop(AXE, game.loc); - game.fixed[AXE] = -1; + game.fixed[AXE] = IS_FIXED; juggle(BEAR); state_change(AXE, AXE_LOST); return GO_CLEAROBJ; diff --git a/advent.h b/advent.h index 98a52d2..45b1c0c 100644 --- a/advent.h +++ b/advent.h @@ -30,6 +30,10 @@ #define STATE_FOUND 0 // After discovered, before messed with #define STATE_IN_CAVITY 1 // State value common to all gemstones +/* Special fixed object-state values - integers > 0 are location */ +#define IS_FIXED -1 +#define IS_FREE 0 + /* Map a state property value to a negative range, where the object cannot be * picked up but the value can be recovered later. Avoid colliding with -1, * which has its own meaning. */ diff --git a/main.c b/main.c index a0c6cbf..5edcc75 100644 --- a/main.c +++ b/main.c @@ -294,7 +294,7 @@ static bool spotted_by_pirate(int i) continue; if (!(treasure == PYRAMID && (game.loc == objects[PYRAMID].plac || game.loc == objects[EMERALD].plac))) { - if (AT(treasure) && game.fixed[treasure] == 0) + if (AT(treasure) && game.fixed[treasure] == IS_FREE) carry(treasure, game.loc); if (TOTING(treasure)) drop(treasure, game.chloc); @@ -676,8 +676,8 @@ static void playermove( int motion) * entries going through passage, which can never be used * for actual motion, but can be spotted by "go back". */ game.newloc = (game.loc == LOC_PLOVER) - ? LOC_ALCOVE - : LOC_PLOVER; + ? LOC_ALCOVE + : LOC_PLOVER; if (game.holdng > 1 || (game.holdng == 1 && !TOTING(EMERALD))) { game.newloc = game.loc; @@ -730,7 +730,7 @@ static void playermove( int motion) game.prop[CHASM] = BRIDGE_WRECKED; game.prop[TROLL] = TROLL_GONE; drop(BEAR, game.newloc); - game.fixed[BEAR] = -1; + game.fixed[BEAR] = IS_FIXED; game.prop[BEAR] = BEAR_DEAD; game.oldlc2 = game.newloc; croak(); @@ -798,9 +798,9 @@ static bool closecheck(void) if (game.prop[BEAR] != BEAR_DEAD) DESTROY(BEAR); game.prop[CHAIN] = CHAIN_HEAP; - game.fixed[CHAIN] = CHAIN_HEAP; - game.prop[AXE] = 0; - game.fixed[AXE] = 0; + game.fixed[CHAIN] = IS_FREE; + game.prop[AXE] = AXE_HERE; + game.fixed[AXE] = IS_FREE; rspeak(CAVE_CLOSING); game.clock1 = -1; game.closng = true; @@ -939,9 +939,9 @@ static void listobjects(void) } int kk = game.prop[obj]; if (obj == STEPS) - kk = (game.loc == game.fixed[STEPS]) - ? STEPS_UP - : STEPS_DOWN; + kk = (game.loc == game.fixed[STEPS]) + ? STEPS_UP + : STEPS_DOWN; pspeak(obj, look, kk, true); } } @@ -1007,7 +1007,7 @@ static bool do_command() speak(msg); if (FORCED(game.loc)) { playermove(HERE); - return true; + return true; } if (game.loc == LOC_Y2 && PCT(25) && !game.closng) rspeak(SAYS_PLUGH); @@ -1059,8 +1059,8 @@ L2600: tokenize(inputbuf, &command); - char word1[TOKLEN+1]; - char word2[TOKLEN+1]; + char word1[TOKLEN + 1]; + char word2[TOKLEN + 1]; packed_to_token(command.wd1, word1); packed_to_token(command.wd2, word2); command.id1 = get_vocab_id(word1); @@ -1095,7 +1095,7 @@ L2607: lampcheck(); if (command.id1 == ENTER && (command.id2 == STREAM || - command.id2 == PROMOTE_WORD(WATER))) { + command.id2 == PROMOTE_WORD(WATER))) { if (LIQLOC(game.loc) == WATER) { rspeak(FEET_WET); } else { @@ -1106,8 +1106,8 @@ L2607: if (command.id1 == ENTER && command.id2 != WORD_NOT_FOUND && command.id2 != WORD_EMPTY) { /* command.wd1 = command.wd2; */ /* wordclear(&command.wd2); */ - command.id1 = command.id2; - command.id2 = WORD_EMPTY; + command.id1 = command.id2; + command.id2 = WORD_EMPTY; } else { /* FIXME: Magic numbers related to vocabulary */ if (!((command.id1 != PROMOTE_WORD(WATER) && command.id1 != PROMOTE_WORD(OIL)) || @@ -1143,7 +1143,7 @@ Lookup: switch (defn / 1000) { case 0: playermove(kmod); - return true; + return true; case 1: command.part = unknown; command.obj = kmod; @@ -1179,14 +1179,14 @@ Laction: case GO_WORD2: /* Get second word for analysis. */ command.wd1 = command.wd2; - strcpy(command.raw1, command.raw2); + strcpy(command.raw1, command.raw2); wordclear(&command.wd2); - command.raw2[0] = '\0'; + command.raw2[0] = '\0'; goto L2620; case GO_UNKNOWN: /* Random intransitive verbs come here. Clear obj just in case * (see attack()). */ - command.raw1[0] = toupper(command.raw1[0]); + command.raw1[0] = toupper(command.raw1[0]); sspeak(DO_WHAT, command.raw1); command.obj = 0; goto L2600;