OSDN Git Service

[Refactor] #37285 Reshaped monster-race-hook.c and one-monster-placer.c
authorHourier <hourier@users.sourceforge.jp>
Mon, 19 Oct 2020 12:03:08 +0000 (21:03 +0900)
committerHourier <hourier@users.sourceforge.jp>
Mon, 19 Oct 2020 12:03:08 +0000 (21:03 +0900)
src/monster-floor/one-monster-placer.c
src/monster-race/monster-race-hook.c

index 2a81994..a650e85 100644 (file)
@@ -52,19 +52,16 @@ static bool is_friendly_idx(player_type *player_ptr, MONSTER_IDX m_idx) { return
 static bool monster_hook_tanuki(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-
-    if (r_ptr->flags1 & (RF1_UNIQUE))
-        return FALSE;
-    if (r_ptr->flags2 & RF2_MULTIPLY)
-        return FALSE;
-    if (r_ptr->flags7 & (RF7_FRIENDLY | RF7_CHAMELEON))
-        return FALSE;
-    if (r_ptr->flags7 & RF7_AQUATIC)
+    bool unselectable = (r_ptr->flags1 & RF1_UNIQUE) != 0;
+    unselectable |= (r_ptr->flags2 & RF2_MULTIPLY) != 0;
+    unselectable |= (r_ptr->flags7 & (RF7_FRIENDLY | RF7_CHAMELEON)) != 0;
+    unselectable |= (r_ptr->flags7 & RF7_AQUATIC) != 0;
+    if (unselectable)
         return FALSE;
 
-    if ((r_ptr->blow[0].method == RBM_EXPLODE) || (r_ptr->blow[1].method == RBM_EXPLODE) || (r_ptr->blow[2].method == RBM_EXPLODE)
-        || (r_ptr->blow[3].method == RBM_EXPLODE))
-        return FALSE;
+    for (int i = 0; i < 4; i++)
+        if (r_ptr->blow[i].method == RBM_EXPLODE)
+            return FALSE;
 
     return (*(get_monster_hook(player_ptr)))(player_ptr, r_idx);
 }
@@ -78,15 +75,13 @@ static bool monster_hook_tanuki(player_type *player_ptr, MONRACE_IDX r_idx)
 static MONRACE_IDX initial_r_appearance(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS generate_mode)
 {
     floor_type *floor_ptr = player_ptr->current_floor_ptr;
-    if (player_ptr->pseikaku == PERSONALITY_CHARGEMAN && (generate_mode & PM_JURAL) && !(generate_mode & (PM_MULTIPLY | PM_KAGE))) {
+    if (player_ptr->pseikaku == PERSONALITY_CHARGEMAN && (generate_mode & PM_JURAL) && !(generate_mode & (PM_MULTIPLY | PM_KAGE)))
         return MON_ALIEN_JURAL;
-    }
 
     if (!(r_info[r_idx].flags7 & RF7_TANUKI))
         return r_idx;
 
     get_mon_num_prep(player_ptr, monster_hook_tanuki, NULL);
-
     int attempts = 1000;
     DEPTH min = MIN(floor_ptr->base_level - 5, 50);
     while (--attempts) {
index 87dec24..72f53b0 100644 (file)
@@ -813,19 +813,12 @@ bool monster_can_entry_arena(player_type *player_ptr, MONRACE_IDX r_idx)
 
     HIT_POINT dam = 0;
     monster_race *r_ptr = &r_info[r_idx];
-    if (r_ptr->flags1 & (RF1_NEVER_MOVE))
-        return FALSE;
-
-    if (r_ptr->flags2 & (RF2_MULTIPLY))
-        return FALSE;
-
-    if (r_ptr->flags2 & (RF2_QUANTUM))
-        return FALSE;
-
-    if (r_ptr->flags7 & (RF7_AQUATIC))
-        return FALSE;
-
-    if (r_ptr->flags7 & (RF7_CHAMELEON))
+    bool unselectable = (r_ptr->flags1 & RF1_NEVER_MOVE) != 0;
+    unselectable |= (r_ptr->flags2 & RF2_MULTIPLY) != 0;
+    unselectable |= ((r_ptr->flags2 & RF2_QUANTUM) != 0);
+    unselectable |= (r_ptr->flags7 & RF7_AQUATIC) != 0;
+    unselectable |= (r_ptr->flags7 & RF7_CHAMELEON) != 0;
+    if (unselectable)
         return FALSE;
 
     for (int i = 0; i < 4; i++) {