OSDN Git Service

[Refactor] #40014 Separated combat-types-setter.c/h from monster-lore.c
authorHourier <hourier@users.sourceforge.jp>
Fri, 12 Jun 2020 14:17:37 +0000 (23:17 +0900)
committerHourier <hourier@users.sourceforge.jp>
Fri, 12 Jun 2020 14:17:37 +0000 (23:17 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/lore/combat-types-setter.c [new file with mode: 0644]
src/lore/combat-types-setter.h [new file with mode: 0644]
src/lore/lore-util.h
src/lore/monster-lore.c

index 1e56584..f9a8ccb 100644 (file)
     <ClCompile Include="..\..\src\info-reader\race-reader.c" />\r
     <ClCompile Include="..\..\src\info-reader\skill-reader.c" />\r
     <ClCompile Include="..\..\src\info-reader\vault-reader.c" />\r
+    <ClCompile Include="..\..\src\lore\combat-types-setter.c" />\r
     <ClCompile Include="..\..\src\lore\magic-types-setter.c" />\r
     <ClCompile Include="..\..\src\lore\lore-calculator.c" />\r
     <ClCompile Include="..\..\src\lore\lore-util.c" />\r
     <ClInclude Include="..\..\src\info-reader\random-grid-effect-types.h" />\r
     <ClInclude Include="..\..\src\info-reader\skill-reader.h" />\r
     <ClInclude Include="..\..\src\info-reader\vault-reader.h" />\r
+    <ClInclude Include="..\..\src\lore\combat-types-setter.h" />\r
     <ClInclude Include="..\..\src\lore\magic-types-setter.h" />\r
     <ClInclude Include="..\..\src\lore\lore-calculator.h" />\r
     <ClInclude Include="..\..\src\lore\lore-util.h" />\r
index d90e2f0..4c2a1e7 100644 (file)
     <ClCompile Include="..\..\src\view\display-lore-drops.c">
       <Filter>view</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\lore\combat-types-setter.c">
+      <Filter>lore</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\cmd\cmd-basic.h">
     <ClInclude Include="..\..\src\view\display-lore-drops.h">
       <Filter>view</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\lore\combat-types-setter.h">
+      <Filter>lore</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index 28aa966..b1c1cf1 100644 (file)
@@ -228,6 +228,7 @@ hengband_SOURCES = \
        \
        locale/japanese.c locale/japanese.h locale/english.c locale/english.h \
        \
+       lore/combat-types-setter.c lore/combat-types-setter.h \
        lore/lore-calculator.c lore/lore-calculator.h \
        lore/lore-store.c lore/lore-store.h \
        lore/lore-util.c lore/lore-util.h \
diff --git a/src/lore/combat-types-setter.c b/src/lore/combat-types-setter.c
new file mode 100644 (file)
index 0000000..dc88b77
--- /dev/null
@@ -0,0 +1,194 @@
+#include "lore/combat-types-setter.h"
+#include "monster-attack/monster-attack-types.h"
+
+void set_monster_blow_method(lore_type *lore_ptr, int m)
+{
+    rbm_type method = lore_ptr->r_ptr->blow[m].method;
+    lore_ptr->p = NULL;
+    switch (method) {
+    case RBM_HIT:
+        lore_ptr->p = _("殴る", "hit");
+        break;
+    case RBM_TOUCH:
+        lore_ptr->p = _("触る", "touch");
+        break;
+    case RBM_PUNCH:
+        lore_ptr->p = _("パンチする", "punch");
+        break;
+    case RBM_KICK:
+        lore_ptr->p = _("蹴る", "kick");
+        break;
+    case RBM_CLAW:
+        lore_ptr->p = _("ひっかく", "claw");
+        break;
+    case RBM_BITE:
+        lore_ptr->p = _("噛む", "bite");
+        break;
+    case RBM_STING:
+        lore_ptr->p = _("刺す", "sting");
+        break;
+    case RBM_SLASH:
+        lore_ptr->p = _("斬る", "slash");
+        break;
+    case RBM_BUTT:
+        lore_ptr->p = _("角で突く", "butt");
+        break;
+    case RBM_CRUSH:
+        lore_ptr->p = _("体当たりする", "crush");
+        break;
+    case RBM_ENGULF:
+        lore_ptr->p = _("飲み込む", "engulf");
+        break;
+    case RBM_CHARGE:
+        lore_ptr->p = _("請求書をよこす", "charge");
+        break;
+    case RBM_CRAWL:
+        lore_ptr->p = _("体の上を這い回る", "crawl on you");
+        break;
+    case RBM_DROOL:
+        lore_ptr->p = _("よだれをたらす", "drool on you");
+        break;
+    case RBM_SPIT:
+        lore_ptr->p = _("つばを吐く", "spit");
+        break;
+    case RBM_EXPLODE:
+        lore_ptr->p = _("爆発する", "explode");
+        break;
+    case RBM_GAZE:
+        lore_ptr->p = _("にらむ", "gaze");
+        break;
+    case RBM_WAIL:
+        lore_ptr->p = _("泣き叫ぶ", "wail");
+        break;
+    case RBM_SPORE:
+        lore_ptr->p = _("胞子を飛ばす", "release spores");
+        break;
+    case RBM_XXX4:
+        break;
+    case RBM_BEG:
+        lore_ptr->p = _("金をせがむ", "beg");
+        break;
+    case RBM_INSULT:
+        lore_ptr->p = _("侮辱する", "insult");
+        break;
+    case RBM_MOAN:
+        lore_ptr->p = _("うめく", "moan");
+        break;
+    case RBM_SHOW:
+        lore_ptr->p = _("歌う", "sing");
+        break;
+    }
+}
+
+void set_monster_blow_effect(lore_type *lore_ptr, int m)
+{
+    rbe_type effect = lore_ptr->r_ptr->blow[m].effect;
+    lore_ptr->q = NULL;
+    switch (effect) {
+    case RBE_SUPERHURT:
+        lore_ptr->q = _("強力に攻撃する", "slaughter");
+        break;
+    case RBE_HURT:
+        lore_ptr->q = _("攻撃する", "attack");
+        break;
+    case RBE_POISON:
+        lore_ptr->q = _("毒をくらわす", "poison");
+        break;
+    case RBE_UN_BONUS:
+        lore_ptr->q = _("劣化させる", "disenchant");
+        break;
+    case RBE_UN_POWER:
+        lore_ptr->q = _("充填魔力を吸収する", "drain charges");
+        break;
+    case RBE_EAT_GOLD:
+        lore_ptr->q = _("金を盗む", "steal gold");
+        break;
+    case RBE_EAT_ITEM:
+        lore_ptr->q = _("アイテムを盗む", "steal items");
+        break;
+    case RBE_EAT_FOOD:
+        lore_ptr->q = _("あなたの食料を食べる", "eat your food");
+        break;
+    case RBE_EAT_LITE:
+        lore_ptr->q = _("明かりを吸収する", "absorb light");
+        break;
+    case RBE_ACID:
+        lore_ptr->q = _("酸を飛ばす", "shoot acid");
+        break;
+    case RBE_ELEC:
+        lore_ptr->q = _("感電させる", "electrocute");
+        break;
+    case RBE_FIRE:
+        lore_ptr->q = _("燃やす", "burn");
+        break;
+    case RBE_COLD:
+        lore_ptr->q = _("凍らせる", "freeze");
+        break;
+    case RBE_BLIND:
+        lore_ptr->q = _("盲目にする", "blind");
+        break;
+    case RBE_CONFUSE:
+        lore_ptr->q = _("混乱させる", "confuse");
+        break;
+    case RBE_TERRIFY:
+        lore_ptr->q = _("恐怖させる", "terrify");
+        break;
+    case RBE_PARALYZE:
+        lore_ptr->q = _("麻痺させる", "paralyze");
+        break;
+    case RBE_LOSE_STR:
+        lore_ptr->q = _("腕力を減少させる", "reduce strength");
+        break;
+    case RBE_LOSE_INT:
+        lore_ptr->q = _("知能を減少させる", "reduce intelligence");
+        break;
+    case RBE_LOSE_WIS:
+        lore_ptr->q = _("賢さを減少させる", "reduce wisdom");
+        break;
+    case RBE_LOSE_DEX:
+        lore_ptr->q = _("器用さを減少させる", "reduce dexterity");
+        break;
+    case RBE_LOSE_CON:
+        lore_ptr->q = _("耐久力を減少させる", "reduce constitution");
+        break;
+    case RBE_LOSE_CHR:
+        lore_ptr->q = _("魅力を減少させる", "reduce charisma");
+        break;
+    case RBE_LOSE_ALL:
+        lore_ptr->q = _("全ステータスを減少させる", "reduce all stats");
+        break;
+    case RBE_SHATTER:
+        lore_ptr->q = _("粉砕する", "shatter");
+        break;
+    case RBE_EXP_10:
+        lore_ptr->q = _("経験値を減少(10d6+)させる", "lower experience (by 10d6+)");
+        break;
+    case RBE_EXP_20:
+        lore_ptr->q = _("経験値を減少(20d6+)させる", "lower experience (by 20d6+)");
+        break;
+    case RBE_EXP_40:
+        lore_ptr->q = _("経験値を減少(40d6+)させる", "lower experience (by 40d6+)");
+        break;
+    case RBE_EXP_80:
+        lore_ptr->q = _("経験値を減少(80d6+)させる", "lower experience (by 80d6+)");
+        break;
+    case RBE_DISEASE:
+        lore_ptr->q = _("病気にする", "disease");
+        break;
+    case RBE_TIME:
+        lore_ptr->q = _("時間を逆戻りさせる", "time");
+        break;
+    case RBE_DR_LIFE:
+        lore_ptr->q = _("生命力を吸収する", "drain life");
+        break;
+    case RBE_DR_MANA:
+        lore_ptr->q = _("魔力を奪う", "drain mana force");
+        break;
+    case RBE_INERTIA:
+        lore_ptr->q = _("減速させる", "slow");
+        break;
+    case RBE_STUN:
+        lore_ptr->q = _("朦朧とさせる", "stun");
+        break;
+    }
+}
diff --git a/src/lore/combat-types-setter.h b/src/lore/combat-types-setter.h
new file mode 100644 (file)
index 0000000..9082c75
--- /dev/null
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "system/angband.h"
+#include "lore/lore-util.h"
+
+void set_monster_blow_method(lore_type *lore_ptr, int m);
+void set_monster_blow_effect(lore_type *lore_ptr, int m);
index ae0a75a..07f5f76 100644 (file)
@@ -42,6 +42,9 @@ typedef struct lore_type {
     bool magic;
     int drop_quantity;
     concptr drop_quality;
+    concptr p;
+    concptr q;
+    rbm_type method;
 } lore_type;
 
 typedef void (*hook_c_roff_pf)(TERM_COLOR attr, concptr str);
index 6ba3aa0..bd5baeb 100644 (file)
@@ -7,6 +7,7 @@
 #include "lore/monster-lore.h"
 #include "locale/english.h"
 #include "locale/japanese.h"
+#include "lore/combat-types-setter.h"
 #include "lore/lore-calculator.h"
 #include "lore/lore-util.h"
 #include "lore/magic-types-setter.h"
@@ -214,7 +215,7 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
     display_monster_concrete_immunities(lore_ptr);
     display_monster_immunities(lore_ptr);
     display_monster_alert(lore_ptr);
-    display_monster_drop(lore_ptr);
+    display_monster_drops(lore_ptr);
 
     const int max_attack_numbers = 4;
     int count = 0;
@@ -232,195 +233,11 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
             || (((lore_ptr->r_ptr->r_blows[m] == 0) && !lore_ptr->know_everything)))
             continue;
 
-        rbm_type method = lore_ptr->r_ptr->blow[m].method;
-        int effect = lore_ptr->r_ptr->blow[m].effect;
+        set_monster_blow_method(lore_ptr, m);
+        set_monster_blow_effect(lore_ptr, m);
         int d1 = lore_ptr->r_ptr->blow[m].d_dice;
         int d2 = lore_ptr->r_ptr->blow[m].d_side;
 
-        concptr p = NULL;
-        switch (method) {
-        case RBM_HIT:
-            p = _("殴る", "hit");
-            break;
-        case RBM_TOUCH:
-            p = _("触る", "touch");
-            break;
-        case RBM_PUNCH:
-            p = _("パンチする", "punch");
-            break;
-        case RBM_KICK:
-            p = _("蹴る", "kick");
-            break;
-        case RBM_CLAW:
-            p = _("ひっかく", "claw");
-            break;
-        case RBM_BITE:
-            p = _("噛む", "bite");
-            break;
-        case RBM_STING:
-            p = _("刺す", "sting");
-            break;
-        case RBM_SLASH:
-            p = _("斬る", "slash");
-            break;
-        case RBM_BUTT:
-            p = _("角で突く", "butt");
-            break;
-        case RBM_CRUSH:
-            p = _("体当たりする", "crush");
-            break;
-        case RBM_ENGULF:
-            p = _("飲み込む", "engulf");
-            break;
-        case RBM_CHARGE:
-            p = _("請求書をよこす", "charge");
-            break;
-        case RBM_CRAWL:
-            p = _("体の上を這い回る", "crawl on you");
-            break;
-        case RBM_DROOL:
-            p = _("よだれをたらす", "drool on you");
-            break;
-        case RBM_SPIT:
-            p = _("つばを吐く", "spit");
-            break;
-        case RBM_EXPLODE:
-            p = _("爆発する", "explode");
-            break;
-        case RBM_GAZE:
-            p = _("にらむ", "gaze");
-            break;
-        case RBM_WAIL:
-            p = _("泣き叫ぶ", "wail");
-            break;
-        case RBM_SPORE:
-            p = _("胞子を飛ばす", "release spores");
-            break;
-        case RBM_XXX4:
-            break;
-        case RBM_BEG:
-            p = _("金をせがむ", "beg");
-            break;
-        case RBM_INSULT:
-            p = _("侮辱する", "insult");
-            break;
-        case RBM_MOAN:
-            p = _("うめく", "moan");
-            break;
-        case RBM_SHOW:
-            p = _("歌う", "sing");
-            break;
-        }
-
-        concptr q = NULL;
-        switch (effect) {
-        case RBE_SUPERHURT:
-            q = _("強力に攻撃する", "slaughter");
-            break;
-        case RBE_HURT:
-            q = _("攻撃する", "attack");
-            break;
-        case RBE_POISON:
-            q = _("毒をくらわす", "poison");
-            break;
-        case RBE_UN_BONUS:
-            q = _("劣化させる", "disenchant");
-            break;
-        case RBE_UN_POWER:
-            q = _("充填魔力を吸収する", "drain charges");
-            break;
-        case RBE_EAT_GOLD:
-            q = _("金を盗む", "steal gold");
-            break;
-        case RBE_EAT_ITEM:
-            q = _("アイテムを盗む", "steal items");
-            break;
-        case RBE_EAT_FOOD:
-            q = _("あなたの食料を食べる", "eat your food");
-            break;
-        case RBE_EAT_LITE:
-            q = _("明かりを吸収する", "absorb light");
-            break;
-        case RBE_ACID:
-            q = _("酸を飛ばす", "shoot acid");
-            break;
-        case RBE_ELEC:
-            q = _("感電させる", "electrocute");
-            break;
-        case RBE_FIRE:
-            q = _("燃やす", "burn");
-            break;
-        case RBE_COLD:
-            q = _("凍らせる", "freeze");
-            break;
-        case RBE_BLIND:
-            q = _("盲目にする", "blind");
-            break;
-        case RBE_CONFUSE:
-            q = _("混乱させる", "confuse");
-            break;
-        case RBE_TERRIFY:
-            q = _("恐怖させる", "terrify");
-            break;
-        case RBE_PARALYZE:
-            q = _("麻痺させる", "paralyze");
-            break;
-        case RBE_LOSE_STR:
-            q = _("腕力を減少させる", "reduce strength");
-            break;
-        case RBE_LOSE_INT:
-            q = _("知能を減少させる", "reduce intelligence");
-            break;
-        case RBE_LOSE_WIS:
-            q = _("賢さを減少させる", "reduce wisdom");
-            break;
-        case RBE_LOSE_DEX:
-            q = _("器用さを減少させる", "reduce dexterity");
-            break;
-        case RBE_LOSE_CON:
-            q = _("耐久力を減少させる", "reduce constitution");
-            break;
-        case RBE_LOSE_CHR:
-            q = _("魅力を減少させる", "reduce charisma");
-            break;
-        case RBE_LOSE_ALL:
-            q = _("全ステータスを減少させる", "reduce all stats");
-            break;
-        case RBE_SHATTER:
-            q = _("粉砕する", "shatter");
-            break;
-        case RBE_EXP_10:
-            q = _("経験値を減少(10d6+)させる", "lower experience (by 10d6+)");
-            break;
-        case RBE_EXP_20:
-            q = _("経験値を減少(20d6+)させる", "lower experience (by 20d6+)");
-            break;
-        case RBE_EXP_40:
-            q = _("経験値を減少(40d6+)させる", "lower experience (by 40d6+)");
-            break;
-        case RBE_EXP_80:
-            q = _("経験値を減少(80d6+)させる", "lower experience (by 80d6+)");
-            break;
-        case RBE_DISEASE:
-            q = _("病気にする", "disease");
-            break;
-        case RBE_TIME:
-            q = _("時間を逆戻りさせる", "time");
-            break;
-        case RBE_DR_LIFE:
-            q = _("生命力を吸収する", "drain life");
-            break;
-        case RBE_DR_MANA:
-            q = _("魔力を奪う", "drain mana force");
-            break;
-        case RBE_INERTIA:
-            q = _("減速させる", "slow");
-            break;
-        case RBE_STUN:
-            q = _("朦朧とさせる", "stun");
-            break;
-        }
-
 #ifdef JP
         if (attack_numbers == 0) {
             hooked_roff(format("%^sは", wd_he[lore_ptr->msex]));
@@ -431,23 +248,23 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
             hooked_roff("のダメージで");
         }
 
-        if (!p)
-            p = "何か奇妙なことをする";
+        if (!lore_ptr->p)
+            lore_ptr->p = "何か奇妙なことをする";
 
         /* XXしてYYし/XXしてYYする/XXし/XXする */
-        if (q != NULL)
-            jverb(p, lore_ptr->jverb_buf, JVERB_TO);
+        if (lore_ptr->q != NULL)
+            jverb(lore_ptr->p, lore_ptr->jverb_buf, JVERB_TO);
         else if (attack_numbers != count - 1)
-            jverb(p, lore_ptr->jverb_buf, JVERB_AND);
+            jverb(lore_ptr->p, lore_ptr->jverb_buf, JVERB_AND);
         else
-            strcpy(lore_ptr->jverb_buf, p);
+            strcpy(lore_ptr->jverb_buf, lore_ptr->p);
 
         hooked_roff(lore_ptr->jverb_buf);
-        if (q) {
+        if (lore_ptr->q) {
             if (attack_numbers != count - 1)
-                jverb(q, lore_ptr->jverb_buf, JVERB_AND);
+                jverb(lore_ptr->q, lore_ptr->jverb_buf, JVERB_AND);
             else
-                strcpy(lore_ptr->jverb_buf, q);
+                strcpy(lore_ptr->jverb_buf, lore_ptr->q);
             hooked_roff(lore_ptr->jverb_buf);
         }
 
@@ -462,12 +279,13 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
             hooked_roff(", and ");
         }
 
-        if (!p)
-            p = "do something weird";
-        hooked_roff(p);
-        if (q) {
+        if (lore_ptr->p == NULL)
+            lore_ptr->p = "do something weird";
+
+        hooked_roff(lore_ptr->p);
+        if (lore_ptr->q != NULL) {
             hooked_roff(" to ");
-            hooked_roff(q);
+            hooked_roff(lore_ptr->q);
             if (d1 && d2 && (lore_ptr->know_everything || know_damage(r_idx, m))) {
                 hooked_roff(" with damage");
                 hooked_roff(format(" %dd%d", d1, d2));