OSDN Git Service

[Refactor] #37285 Reshaped summonning monster functions
authorHourier <hourier@users.sourceforge.jp>
Fri, 25 Sep 2020 11:17:45 +0000 (20:17 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Wed, 11 Nov 2020 21:53:50 +0000 (06:53 +0900)
(cherry picked from commit a603aebe48409c7474ffc94855d3b27b7b5e41b3)

src/monster/monster-util.c
src/monster/monster-util.h
src/mspell/summon-checker.c
src/spell/summon-types.h

index 3a44977..642d3ea 100644 (file)
@@ -40,7 +40,7 @@ int chameleon_change_m_idx = 0;
  * @brief 召喚条件を指定するグローバル変数 / Hack -- the "type" of the current "summon specific"
  * @todo summon_specific_typeグローバル変数の除去と関数引数への代替を行う
  */
-int summon_specific_type = 0;
+summon_type summon_specific_type = SUMMON_NONE;
 
 static monsterrace_hook_type get_mon_num_hook;
 static monsterrace_hook_type get_mon_num2_hook;
index 4bd0aec..896f883 100644 (file)
@@ -7,7 +7,8 @@ typedef bool (*monsterrace_hook_type)(player_type *, MONRACE_IDX);
 extern MONSTER_IDX hack_m_idx;
 extern MONSTER_IDX hack_m_idx_ii;
 extern int chameleon_change_m_idx;
-extern int summon_specific_type;
+typedef enum summon_type summon_type;
+extern summon_type summon_specific_type;
 
 monsterrace_hook_type get_monster_hook(player_type *player_ptr);
 monsterrace_hook_type get_monster_hook2(player_type *player_ptr, POSITION y, POSITION x);
index c714fff..d39dc53 100644 (file)
@@ -24,14 +24,13 @@ bool check_summon_specific(player_type *player_ptr, MONRACE_IDX summoner_idx, MO
 {
     monster_race *r_ptr = &r_info[r_idx];
     bool is_match = FALSE;
-
     switch (summon_specific_type) {
     case SUMMON_ANT: {
-        is_match = (r_ptr->d_char == 'a');
+        is_match = r_ptr->d_char == 'a';
         break;
     }
     case SUMMON_SPIDER: {
-        is_match = (r_ptr->d_char == 'S');
+        is_match = r_ptr->d_char == 'S';
         break;
     }
     case SUMMON_HOUND: {
@@ -39,27 +38,27 @@ bool check_summon_specific(player_type *player_ptr, MONRACE_IDX summoner_idx, MO
         break;
     }
     case SUMMON_HYDRA: {
-        is_match = (r_ptr->d_char == 'M');
+        is_match = r_ptr->d_char == 'M';
         break;
     }
     case SUMMON_ANGEL: {
-        is_match = (r_ptr->d_char == 'A' && ((r_ptr->flags3 & RF3_EVIL) || (r_ptr->flags3 & RF3_GOOD)));
+        is_match = (r_ptr->d_char == 'A') && (((r_ptr->flags3 & RF3_EVIL) != 0) || ((r_ptr->flags3 & RF3_GOOD) != 0));
         break;
     }
     case SUMMON_DEMON: {
-        is_match = (r_ptr->flags3 & RF3_DEMON);
+        is_match = (r_ptr->flags3 & RF3_DEMON) != 0;
         break;
     }
     case SUMMON_UNDEAD: {
-        is_match = (r_ptr->flags3 & RF3_UNDEAD);
+        is_match = (r_ptr->flags3 & RF3_UNDEAD) != 0;
         break;
     }
     case SUMMON_DRAGON: {
-        is_match = (r_ptr->flags3 & RF3_DRAGON);
+        is_match = (r_ptr->flags3 & RF3_DRAGON) != 0;
         break;
     }
     case SUMMON_HI_UNDEAD: {
-        is_match = ((r_ptr->d_char == 'L') || (r_ptr->d_char == 'V') || (r_ptr->d_char == 'W'));
+        is_match = (r_ptr->d_char == 'L') || (r_ptr->d_char == 'V') || (r_ptr->d_char == 'W');
         break;
     }
     case SUMMON_HI_DRAGON: {
@@ -67,31 +66,31 @@ bool check_summon_specific(player_type *player_ptr, MONRACE_IDX summoner_idx, MO
         break;
     }
     case SUMMON_HI_DEMON: {
-        is_match = (((r_ptr->d_char == 'U') || (r_ptr->d_char == 'H') || (r_ptr->d_char == 'B')) && (r_ptr->flags3 & RF3_DEMON)) ? TRUE : FALSE;
+        is_match = ((r_ptr->d_char == 'U') || (r_ptr->d_char == 'H') || (r_ptr->d_char == 'B')) && ((r_ptr->flags3 & RF3_DEMON) != 0);
         break;
     }
     case SUMMON_AMBERITES: {
-        is_match = (r_ptr->flags3 & (RF3_AMBERITE)) ? TRUE : FALSE;
+        is_match = (r_ptr->flags3 & RF3_AMBERITE) != 0;
         break;
     }
     case SUMMON_UNIQUE: {
-        is_match = (r_ptr->flags1 & (RF1_UNIQUE)) ? TRUE : FALSE;
+        is_match = (r_ptr->flags1 & RF1_UNIQUE) != 0;
         break;
     }
     case SUMMON_MOLD: {
-        is_match = (r_ptr->d_char == 'm');
+        is_match = r_ptr->d_char == 'm';
         break;
     }
     case SUMMON_BAT: {
-        is_match = (r_ptr->d_char == 'b');
+        is_match = r_ptr->d_char == 'b';
         break;
     }
     case SUMMON_QUYLTHULG: {
-        is_match = (r_ptr->d_char == 'Q');
+        is_match = r_ptr->d_char == 'Q';
         break;
     }
     case SUMMON_COIN_MIMIC: {
-        is_match = (r_ptr->d_char == '$');
+        is_match = r_ptr->d_char == '$';
         break;
     }
     case SUMMON_MIMIC: {
@@ -103,18 +102,12 @@ bool check_summon_specific(player_type *player_ptr, MONRACE_IDX summoner_idx, MO
         break;
     }
     case SUMMON_CYBER: {
-        is_match = ((r_ptr->d_char == 'U') && (r_ptr->flags4 & RF4_ROCKET));
+        is_match = (r_ptr->d_char == 'U') && ((r_ptr->flags4 & RF4_ROCKET) != 0);
         break;
     }
     case SUMMON_KIN: {
-        SYMBOL_CODE summon_kin_type;
-        if (summoner_idx) {
-            summon_kin_type = r_info[summoner_idx].d_char;
-        } else {
-            summon_kin_type = get_summon_symbol_from_player(player_ptr);
-        }
-
-        is_match = ((r_ptr->d_char == summon_kin_type) && (r_idx != MON_HAGURE));
+        SYMBOL_CODE summon_kin_type = summoner_idx > 0 ? r_info[summoner_idx].d_char : get_summon_symbol_from_player(player_ptr);
+        is_match = (r_ptr->d_char == summon_kin_type) && (r_idx != MON_HAGURE);
         break;
     }
     case SUMMON_DAWN: {
@@ -140,11 +133,11 @@ bool check_summon_specific(player_type *player_ptr, MONRACE_IDX summoner_idx, MO
         break;
     }
     case SUMMON_PHANTOM: {
-        is_match = (r_idx == MON_PHANTOM_B || r_idx == MON_PHANTOM_W);
+        is_match = (r_idx == MON_PHANTOM_B) || (r_idx == MON_PHANTOM_W);
         break;
     }
     case SUMMON_BLUE_HORROR: {
-        is_match = (r_idx == MON_BLUE_HORROR);
+        is_match = r_idx == MON_BLUE_HORROR;
         break;
     }
     case SUMMON_TOTEM_MOAI: {
@@ -152,47 +145,46 @@ bool check_summon_specific(player_type *player_ptr, MONRACE_IDX summoner_idx, MO
         break;
     }
     case SUMMON_ELEMENTAL: {
-        is_match = (r_ptr->d_char == 'E');
+        is_match = r_ptr->d_char == 'E';
         break;
     }
     case SUMMON_VORTEX: {
-        is_match = (r_ptr->d_char == 'v');
+        is_match = r_ptr->d_char == 'v';
         break;
     }
     case SUMMON_HYBRID: {
-        is_match = (r_ptr->d_char == 'H');
+        is_match = r_ptr->d_char == 'H';
         break;
     }
     case SUMMON_BIRD: {
-        is_match = (r_ptr->d_char == 'B');
+        is_match = r_ptr->d_char == 'B';
         break;
     }
     case SUMMON_KAMIKAZE: {
-        int i;
-        for (i = 0; i < 4; i++)
+        for (int i = 0; i < 4; i++)
             if (r_ptr->blow[i].method == RBM_EXPLODE)
                 is_match = TRUE;
+
         break;
     }
     case SUMMON_KAMIKAZE_LIVING: {
-        int i;
-
-        for (i = 0; i < 4; i++)
+        for (int i = 0; i < 4; i++)
             if (r_ptr->blow[i].method == RBM_EXPLODE)
                 is_match = TRUE;
-        is_match = (is_match && monster_living(r_idx));
+
+        is_match &= monster_living(r_idx);
         break;
     }
     case SUMMON_MANES: {
-        is_match = (r_idx == MON_MANES);
+        is_match = r_idx == MON_MANES;
         break;
     }
     case SUMMON_LOUSE: {
-        is_match = (r_idx == MON_LOUSE);
+        is_match = r_idx == MON_LOUSE;
         break;
     }
     case SUMMON_GUARDIANS: {
-        is_match = (r_ptr->flags7 & RF7_GUARDIAN);
+        is_match = (r_ptr->flags7 & RF7_GUARDIAN) != 0;
         break;
     }
     case SUMMON_KNIGHTS: {
@@ -201,19 +193,19 @@ bool check_summon_specific(player_type *player_ptr, MONRACE_IDX summoner_idx, MO
         break;
     }
     case SUMMON_EAGLES: {
-        is_match = (r_ptr->d_char == 'B' && (r_ptr->flags8 & RF8_WILD_MOUNTAIN) && (r_ptr->flags8 & RF8_WILD_ONLY));
+        is_match = (r_ptr->d_char == 'B') && ((r_ptr->flags8 & RF8_WILD_MOUNTAIN) != 0) && ((r_ptr->flags8 & RF8_WILD_ONLY) != 0);
         break;
     }
     case SUMMON_PIRANHAS: {
-        is_match = (r_idx == MON_PIRANHA);
+        is_match = r_idx == MON_PIRANHA;
         break;
     }
     case SUMMON_ARMAGE_GOOD: {
-        is_match = (r_ptr->d_char == 'A' && (r_ptr->flags3 & RF3_GOOD));
+        is_match = (r_ptr->d_char == 'A') && ((r_ptr->flags3 & RF3_GOOD) != 0);
         break;
     }
     case SUMMON_ARMAGE_EVIL: {
-        is_match = ((r_ptr->flags3 & RF3_DEMON) || (r_ptr->d_char == 'A' && (r_ptr->flags3 & RF3_EVIL)));
+        is_match = ((r_ptr->flags3 & RF3_DEMON) != 0) || ((r_ptr->d_char == 'A') && ((r_ptr->flags3 & RF3_EVIL) != 0));
         break;
     }
     }
index 679e6a8..e28e910 100644 (file)
@@ -2,6 +2,7 @@
 
 /* summon_specific\82Å\8eæ\82è\88µ\82í\82ê\82é\81A\8f¢\8a«\82Ì\8eí\95Ê\92è\8b` / Legal restrictions for "summon_specific()" */
 typedef enum summon_type {
+    SUMMON_NONE = 0,
        SUMMON_ANT = 11,  /*!< \8f¢\8a«\83^\83C\83v: \83A\83\8a */
     SUMMON_SPIDER = 12, /*!< \8f¢\8a«\83^\83C\83v: \92\81 */
     SUMMON_HOUND = 13, /*!< \8f¢\8a«\83^\83C\83v: \83n\83E\83\93\83h */