]> granicus.if.org Git - nethack/commitdiff
Make m_move return defines instead of magic numbers
authorPasi Kallinen <paxed@alt.org>
Sat, 26 Feb 2022 15:40:17 +0000 (17:40 +0200)
committerPasi Kallinen <paxed@alt.org>
Sat, 26 Feb 2022 15:40:17 +0000 (17:40 +0200)
include/hack.h
src/dogmove.c
src/monmove.c
src/uhitm.c

index a0277508b0da67aa9ffa1b14284afc4f3008172e..34752e603992e89fce9940fc537b9f9289efc1d7 100644 (file)
@@ -398,6 +398,12 @@ typedef struct sortloot_item Loot;
 #define TEST_TRAV 2 /* test a future travel location */
 #define TEST_TRAP 3 /* check if a future travel loc is a trap */
 
+/* m_move return values */
+#define MMOVE_NOTHING 0
+#define MMOVE_MOVED   1 /* monster moved */
+#define MMOVE_DIED    2 /* monster died */
+#define MMOVE_DONE    3 /* monster used up all actions */
+
 /*** some utility macros ***/
 #define yn(query) yn_function(query, ynchars, 'n')
 #define ynq(query) yn_function(query, ynqchars, 'q')
index 486f5b38feb5f35c5f26ed6a924f4d7e4ebb0fc4..b6b4efabc365da58f7cdd078d14c69f1cb930022 100644 (file)
@@ -901,19 +901,19 @@ dog_move(register struct monst *mtmp,
     omx = mtmp->mx;
     omy = mtmp->my;
     if (has_edog && dog_hunger(mtmp, edog))
-        return 2; /* starved */
+        return MMOVE_DIED; /* starved */
 
     udist = distu(omx, omy);
     /* Let steeds eat and maybe throw rider during Conflict */
     if (mtmp == u.usteed) {
         if (Conflict && !resist_conflict(mtmp)) {
             dismount_steed(DISMOUNT_THROWN);
-            return 1;
+            return MMOVE_MOVED;
         }
         udist = 1;
     } else if (!udist)
         /* maybe we tamed him while being swallowed --jgm */
-        return 0;
+        return MMOVE_NOTHING;
 
     nix = omx; /* set before newdogpos */
     niy = omy;
@@ -923,7 +923,7 @@ dog_move(register struct monst *mtmp,
     if (has_edog) {
         j = dog_invent(mtmp, edog, udist);
         if (j == 2)
-            return 2; /* died */
+            return MMOVE_DIED; /* died */
         else if (j == 1)
             goto newdogpos; /* eating something */
 
@@ -934,7 +934,7 @@ dog_move(register struct monst *mtmp,
     appr = dog_goal(mtmp, has_edog ? edog : (struct edog *) 0, after, udist,
                     whappr);
     if (appr == -2)
-        return 0;
+        return MMOVE_NOTHING;
 
     if (Conflict && !resist_conflict(mtmp)) {
         if (!has_edog) {
@@ -942,7 +942,7 @@ dog_move(register struct monst *mtmp,
              * it disappears, angrily, and sends in some nasties
              */
             lose_guardian_angel(mtmp);
-            return 2; /* current monster is gone */
+            return MMOVE_DIED; /* current monster is gone */
         }
     }
 #if 0 /* [this is now handled in dochug()] */
@@ -1018,14 +1018,14 @@ dog_move(register struct monst *mtmp,
                 continue;
 
             if (after)
-                return 0; /* hit only once each move */
+                return MMOVE_NOTHING; /* hit only once each move */
 
             g.notonhead = 0;
             mstatus = mattackm(mtmp, mtmp2);
 
             /* aggressor (pet) died */
             if (mstatus & MM_AGR_DIED)
-                return 2;
+                return MMOVE_DIED;
 
             if ((mstatus & MM_HIT) && !(mstatus & MM_DEF_DIED) && rn2(4)
                 && mtmp2->mlstmv != g.moves
@@ -1034,9 +1034,9 @@ dog_move(register struct monst *mtmp,
                 && monnear(mtmp2, mtmp->mx, mtmp->my)) {
                 mstatus = mattackm(mtmp2, mtmp); /* return attack */
                 if (mstatus & MM_DEF_DIED)
-                    return 2;
+                    return MMOVE_DIED;
             }
-            return 3;
+            return MMOVE_DONE;
         }
         if ((info[i] & ALLOW_MDISP) && MON_AT(nx, ny)
             && better_with_displacing && !undesirable_disp(mtmp, nx, ny)) {
@@ -1045,8 +1045,8 @@ dog_move(register struct monst *mtmp,
 
             mstatus = mdisplacem(mtmp, mtmp2, FALSE); /* displace monster */
             if (mstatus & MM_DEF_DIED)
-                return 2;
-            return 0;
+                return MMOVE_DIED;
+            return MMOVE_NOTHING;
         }
 
         {
@@ -1152,7 +1152,7 @@ dog_move(register struct monst *mtmp,
 
             if (mtarg == &g.youmonst) {
                 if (mattacku(mtmp))
-                    return 2;
+                    return MMOVE_DIED;
                 /* Treat this as the pet having initiated an attack even if it
                  * didn't, so it will lose its move.  This isn't entirely fair,
                  * but mattacku doesn't distinguish between "did not attack"
@@ -1165,7 +1165,7 @@ dog_move(register struct monst *mtmp,
 
                 /* Shouldn't happen, really */
                 if (mstatus & MM_AGR_DIED)
-                    return 2;
+                    return MMOVE_DIED;
 
                 /* Allow the targeted nasty to strike back - if
                  * the targeted beast doesn't have a ranged attack,
@@ -1182,7 +1182,7 @@ dog_move(register struct monst *mtmp,
                     if (mtarg->mcansee && haseyes(mtarg->data)) {
                         mstatus = mattackm(mtarg, mtmp);
                         if (mstatus & MM_DEF_DIED)
-                            return 2;
+                            return MMOVE_DIED;
                     }
                 }
             }
@@ -1197,7 +1197,7 @@ dog_move(register struct monst *mtmp,
              *    will return MM_MISS.
              */
             if (mstatus != MM_MISS)
-                return 3;
+                return MMOVE_DONE;
         }
     }
 
@@ -1212,12 +1212,12 @@ dog_move(register struct monst *mtmp,
                 m_unleash(mtmp, FALSE);
             }
             (void) mattacku(mtmp);
-            return 3;
+            return MMOVE_DONE;
         }
         if (!m_in_out_region(mtmp, nix, niy))
-            return 1;
+            return MMOVE_MOVED;
         if (m_digweapon_check(mtmp, nix,niy))
-            return 0;
+            return MMOVE_NOTHING;
 
         /* insert a worm_move() if worms ever begin to eat things */
         wasseen = canseemon(mtmp);
@@ -1245,7 +1245,7 @@ dog_move(register struct monst *mtmp,
          */
         if (do_eat) {
             if (dog_eat(mtmp, obj, omx, omy, FALSE) == 2)
-                return 2;
+                return MMOVE_DIED;
         }
     } else if (mtmp->mleashed && distu(omx, omy) > 4) {
         /* an incredible kludge, but the only way to keep pooch near
@@ -1275,13 +1275,13 @@ dog_move(register struct monst *mtmp,
         cc.y = mtmp->my;
  dognext:
         if (!m_in_out_region(mtmp, nix, niy))
-            return 1;
+            return MMOVE_MOVED;
         remove_monster(mtmp->mx, mtmp->my);
         place_monster(mtmp, cc.x, cc.y);
         newsym(cc.x, cc.y);
         set_apparxy(mtmp);
     }
-    return 1;
+    return MMOVE_MOVED;
 }
 
 /* check if a monster could pick up objects from a location */
index 9e9f9bd245e2c041fa90a9b8dec80aa4cd2d2d01..c3a8742623a5098799fc5093da75d4bf8313771f 100644 (file)
@@ -437,7 +437,7 @@ int
 dochug(register struct monst* mtmp)
 {
     register struct permonst *mdat;
-    register int tmp = 0;
+    register int tmp = MMOVE_NOTHING;
     int inrange, nearby, scared, res;
     struct obj *otmp;
 
@@ -688,7 +688,7 @@ dochug(register struct monst* mtmp)
                 if (a->aatyp == AT_MAGC
                     && (a->adtyp == AD_SPEL || a->adtyp == AD_CLRC)) {
                     if (castmu(mtmp, a, FALSE, FALSE)) {
-                        tmp = 3; /* bypass m_move() */
+                        tmp = MMOVE_DONE; /* bypass m_move() */
                         break;
                     }
                 }
@@ -697,12 +697,12 @@ dochug(register struct monst* mtmp)
 
         if (!tmp)
             tmp = m_move(mtmp, 0);
-        if (tmp != 2)
+        if (tmp != MMOVE_DIED)
             distfleeck(mtmp, &inrange, &nearby, &scared); /* recalc */
 
         switch (tmp) { /* for pets, cases 0 and 3 are equivalent */
-        case 0: /* no movement, but it can still attack you */
-        case 3: /* absolutely no movement */
+        case MMOVE_NOTHING: /* no movement, but it can still attack you */
+        case MMOVE_DONE: /* absolutely no movement */
             /* vault guard might have vanished */
             if (mtmp->isgd && (DEADMONSTER(mtmp) || mtmp->mx == 0))
                 return 1; /* behave as if it died */
@@ -712,7 +712,7 @@ dochug(register struct monst* mtmp)
             if (Hallucination)
                 newsym(mtmp->mx, mtmp->my);
             break;
-        case 1: /* monster moved */
+        case MMOVE_MOVED: /* monster moved */
             /* Maybe it stepped on a trap and fell asleep... */
             if (mtmp->msleeping || !mtmp->mcanmove)
                 return 0;
@@ -732,7 +732,7 @@ dochug(register struct monst* mtmp)
                     unstuck(mtmp);
             }
             return 0;
-        case 2: /* monster died */
+        case MMOVE_DIED: /* monster died */
             return 1;
         }
     }
@@ -740,7 +740,7 @@ dochug(register struct monst* mtmp)
     /*  Now, attack the player if possible - one attack set per monst
      */
 
-    if (tmp != 3 && (!mtmp->mpeaceful
+    if (tmp != MMOVE_DONE && (!mtmp->mpeaceful
                      || (Conflict && !resist_conflict(mtmp)))) {
         if (inrange && !scared && !noattacks(mdat)
             /* [is this hp check really needed?] */
@@ -762,7 +762,7 @@ dochug(register struct monst* mtmp)
         cuss(mtmp);
 
     /* note: can't get here when tmp==2 so this always returns 0 */
-    return (tmp == 2);
+    return (tmp == MMOVE_DIED);
 }
 
 static NEARDATA const char practical[] = { WEAPON_CLASS, ARMOR_CLASS,
@@ -1015,7 +1015,7 @@ m_move(register struct monst* mtmp, register int after)
     boolean sawmon = canspotmon(mtmp); /* before it moved */
     struct permonst *ptr;
     struct monst *mtoo;
-    schar mmoved = 0; /* not strictly nec.: chi >= 0 will do */
+    schar mmoved = MMOVE_NOTHING; /* not strictly nec.: chi >= 0 will do */
     long info[9];
     long flag;
     int omx = mtmp->mx, omy = mtmp->my;
@@ -1025,10 +1025,10 @@ m_move(register struct monst* mtmp, register int after)
 
         if (i == Trap_Killed_Mon) {
             newsym(mtmp->mx, mtmp->my);
-            return 2;
+            return MMOVE_DIED;
         } /* it died */
         if (i == Trap_Caught_Mon)
-            return 0; /* still in trap, so didn't move */
+            return MMOVE_NOTHING; /* still in trap, so didn't move */
     }
     ptr = mtmp->data; /* mintrap() can change mtmp->data -dlc */
 
@@ -1036,10 +1036,10 @@ m_move(register struct monst* mtmp, register int after)
         mtmp->meating--;
         if (mtmp->meating <= 0)
             finish_meating(mtmp);
-        return 3; /* still eating */
+        return MMOVE_DONE; /* still eating */
     }
     if (hides_under(ptr) && OBJ_AT(mtmp->mx, mtmp->my) && rn2(10))
-        return 0; /* do not leave hiding place */
+        return MMOVE_NOTHING; /* do not leave hiding place */
 
     /* Where does 'mtmp' think you are?  Not necessary if m_move() called
        from this file, but needed for other calls of m_move(). */
@@ -1061,22 +1061,30 @@ m_move(register struct monst* mtmp, register int after)
 
     /* likewise for shopkeeper */
     if (mtmp->isshk) {
-        mmoved = shk_move(mtmp);
-        if (mmoved == -2)
-            return 2;
-        if (mmoved >= 0)
+        int xm = shk_move(mtmp);
+        switch (xm) {
+        case -2: return MMOVE_DIED;
+        case -1: mmoved = MMOVE_NOTHING; break; /* follow hero outside shop */
+        case 0: mmoved = MMOVE_NOTHING; goto postmov;
+        case 1: mmoved = MMOVE_MOVED; goto postmov;
+        default: impossible("unknown shk_move return value (%i)", xm);
+            mmoved = MMOVE_NOTHING;
             goto postmov;
-        mmoved = 0; /* follow player outside shop */
+        }
     }
 
     /* and for the guard */
     if (mtmp->isgd) {
-        mmoved = gd_move(mtmp);
-        if (mmoved == -2)
-            return 2;
-        if (mmoved >= 0)
+        int xm = gd_move(mtmp);
+        switch (xm) {
+        case -2: return MMOVE_DIED;
+        case -1: mmoved = MMOVE_NOTHING; break;
+        case 0: mmoved = MMOVE_NOTHING; goto postmov;
+        case 1: mmoved = MMOVE_MOVED; goto postmov;
+        default: impossible("unknown gd_move return value (%i)", xm);
+            mmoved = MMOVE_NOTHING;
             goto postmov;
-        mmoved = 0;
+        }
     }
 
     /* and the acquisitive monsters get special treatment */
@@ -1092,21 +1100,25 @@ m_move(register struct monst* mtmp, register int after)
             && (intruder != mtmp)) {
             g.notonhead = (intruder->mx != tx || intruder->my != ty);
             if (mattackm(mtmp, intruder) == 2)
-                return 2;
-            mmoved = 1;
+                return MMOVE_DIED;
+            mmoved = MMOVE_MOVED;
         } else
-            mmoved = 0;
+            mmoved = MMOVE_NOTHING;
         goto postmov;
     }
 
     /* and for the priest */
     if (mtmp->ispriest) {
-        mmoved = pri_move(mtmp);
-        if (mmoved == -2)
-            return 2;
-        if (mmoved >= 0)
+        int xm = pri_move(mtmp);
+        switch (xm) {
+        case -2: return MMOVE_DIED;
+        case -1: mmoved = MMOVE_NOTHING; break;
+        case 0: mmoved = MMOVE_NOTHING; goto postmov;
+        case 1: mmoved = MMOVE_MOVED; goto postmov;
+        default: impossible("unknown pri_move return value (%i)", xm);
+            mmoved = MMOVE_NOTHING;
             goto postmov;
-        mmoved = 0;
+        }
     }
 
 #ifdef MAIL_STRUCTURES
@@ -1114,7 +1126,7 @@ m_move(register struct monst* mtmp, register int after)
         if (!Deaf && canseemon(mtmp))
             verbalize("I'm late!");
         mongone(mtmp);
-        return 2;
+        return MMOVE_DIED;
     }
 #endif
 
@@ -1125,12 +1137,12 @@ m_move(register struct monst* mtmp, register int after)
             (void) rloc(mtmp, RLOC_MSG);
         else
             mnexto(mtmp, RLOC_MSG);
-        mmoved = 1;
+        mmoved = MMOVE_MOVED;
         goto postmov;
     }
  not_special:
     if (u.uswallow && !mtmp->mflee && u.ustuck != mtmp)
-        return 1;
+        return MMOVE_MOVED;
     omx = mtmp->mx;
     omy = mtmp->my;
     gx = mtmp->mux;
@@ -1284,7 +1296,7 @@ m_move(register struct monst* mtmp, register int after)
                             gx = otmp->ox;
                             gy = otmp->oy;
                             if (gx == omx && gy == omy) {
-                                mmoved = 3; /* actually unnecessary */
+                                mmoved = MMOVE_DONE; /* actually unnecessary */
                                 goto postmov;
                             }
                         }
@@ -1365,7 +1377,7 @@ m_move(register struct monst* mtmp, register int after)
                 niy = ny;
                 nidist = ndist;
                 chi = i;
-                mmoved = 1;
+                mmoved = MMOVE_MOVED;
             }
  nxti:
             ;
@@ -1375,11 +1387,11 @@ m_move(register struct monst* mtmp, register int after)
     if (mmoved) {
         register int j;
 
-        if (mmoved == 1 && (u.ux != nix || u.uy != niy) && itsstuck(mtmp))
-            return 3;
+        if (mmoved == MMOVE_MOVED && (u.ux != nix || u.uy != niy) && itsstuck(mtmp))
+            return MMOVE_DONE;
 
-        if (mmoved == 1 && m_digweapon_check(mtmp, nix,niy))
-            return 3;
+        if (mmoved == MMOVE_MOVED && m_digweapon_check(mtmp, nix,niy))
+            return MMOVE_DONE;
 
         /* If ALLOW_U is set, either it's trying to attack you, or it
          * thinks it is.  In either case, attack this spot in preference to
@@ -1400,7 +1412,7 @@ m_move(register struct monst* mtmp, register int after)
         if (u_at(nix, niy)) {
             mtmp->mux = u.ux;
             mtmp->muy = u.uy;
-            return 0;
+            return MMOVE_NOTHING;
         }
         /* The monster may attack another based on 1 of 2 conditions:
          * 1 - It may be confused.
@@ -1418,14 +1430,14 @@ m_move(register struct monst* mtmp, register int after)
             mtmp2 = m_at(nix, niy);
             mstatus = mdisplacem(mtmp, mtmp2, FALSE);
             if ((mstatus & MM_AGR_DIED) || (mstatus & MM_DEF_DIED))
-                return 2;
+                return MMOVE_DIED;
             if (mstatus & MM_HIT)
-                return 1;
-            return 3;
+                return MMOVE_MOVED;
+            return MMOVE_DONE;
         }
 
         if (!m_in_out_region(mtmp, nix, niy))
-            return 3;
+            return MMOVE_DONE;
 
         /* move a normal monster; for a long worm, remove_monster() and
            place_monster() only manipulate the head; they leave tail as-is */
@@ -1444,7 +1456,7 @@ m_move(register struct monst* mtmp, register int after)
     } else {
         if (is_unicorn(ptr) && rn2(2) && !tele_restrict(mtmp)) {
             (void) rloc(mtmp, RLOC_MSG);
-            return 1;
+            return MMOVE_MOVED;
         }
         /* for a long worm, shrink it (by discarding end of tail) when
            it has failed to move */
@@ -1452,11 +1464,11 @@ m_move(register struct monst* mtmp, register int after)
             worm_nomove(mtmp);
     }
  postmov:
-    if (mmoved == 1 || mmoved == 3) {
+    if (mmoved == MMOVE_MOVED || mmoved == MMOVE_DONE) {
         boolean canseeit = cansee(mtmp->mx, mtmp->my),
                 didseeit = canseeit;
 
-        if (mmoved == 1) {
+        if (mmoved == MMOVE_MOVED) {
             /* normal monster move will already have <nix,niy>,
                but pet dog_move() with 'goto postmov' won't */
             nix = mtmp->mx, niy = mtmp->my;
@@ -1680,7 +1692,7 @@ m_move(register struct monst* mtmp, register int after)
                 if (uses_items)
                     picked |= mpickstuff(mtmp, (char *) 0);
                 if (picked)
-                    mmoved = 3;
+                    mmoved = MMOVE_DONE;
             }
 
             if (mtmp->minvis) {
@@ -1731,7 +1743,7 @@ m_move_aggress(struct monst* mtmp, xchar x, xchar y)
     mstatus = mattackm(mtmp, mtmp2);
 
     if (mstatus & MM_AGR_DIED) /* aggressor died */
-        return 2;
+        return MMOVE_DIED;
 
     if ((mstatus & MM_HIT) && !(mstatus & MM_DEF_DIED) && rn2(4)
         && mtmp2->movement >= NORMAL_SPEED) {
@@ -1739,9 +1751,9 @@ m_move_aggress(struct monst* mtmp, xchar x, xchar y)
         g.notonhead = 0;
         mstatus = mattackm(mtmp2, mtmp); /* return attack */
         if (mstatus & MM_DEF_DIED)
-            return 2;
+            return MMOVE_DIED;
     }
-    return 3;
+    return MMOVE_DONE;
 }
 
 void
index 11c04b89f886df65b6eabcf239b68516b4be8793..120fb7a2feaef792f1df0bd1730464a29f62347e 100644 (file)
@@ -487,7 +487,7 @@ do_attack(struct monst *mtmp)
     /* Is the "it died" check actually correct? */
     if (mdat->mlet == S_LEPRECHAUN && !mtmp->mfrozen && !mtmp->msleeping
         && !mtmp->mconf && mtmp->mcansee && !rn2(7)
-        && (m_move(mtmp, 0) == 2 /* it died */
+        && (m_move(mtmp, 0) == MMOVE_DIED /* it died */
             || mtmp->mx != u.ux + u.dx
             || mtmp->my != u.uy + u.dy)) { /* it moved */
         You("miss wildly and stumble forwards.");