OSDN Git Service

[Refactor] #40014 Separated lore-calculator.c/h from monster-lore.c/h
authorHourier <hourier@users.sourceforge.jp>
Fri, 12 Jun 2020 10:30:49 +0000 (19:30 +0900)
committerHourier <hourier@users.sourceforge.jp>
Fri, 12 Jun 2020 10:30:49 +0000 (19:30 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/lore/lore-calculator.c [new file with mode: 0644]
src/lore/lore-calculator.h [new file with mode: 0644]
src/lore/monster-lore.c
src/lore/monster-lore.h
src/spell/spells3.c
src/view/display-lore.c
src/view/display-lore.h

index f7b70e3..724b284 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\lore-calculator.c" />\r
     <ClCompile Include="..\..\src\lore\lore-util.c" />\r
     <ClCompile Include="..\..\src\monster\monster-compaction.c" />\r
     <ClCompile Include="..\..\src\monster\monster-death.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\lore-calculator.h" />\r
     <ClInclude Include="..\..\src\lore\lore-util.h" />\r
     <ClInclude Include="..\..\src\mind\drs-types.h" />\r
     <ClInclude Include="..\..\src\mind\snipe-types.h" />\r
index d839d3a..2ad00bc 100644 (file)
     <ClCompile Include="..\..\src\view\display-lore.c">
       <Filter>view</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\lore\lore-calculator.c">
+      <Filter>lore</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\cmd\cmd-basic.h">
     <ClInclude Include="..\..\src\view\display-lore.h">
       <Filter>view</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\lore\lore-calculator.h">
+      <Filter>lore</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index 27e9dfa..505434f 100644 (file)
@@ -228,6 +228,7 @@ hengband_SOURCES = \
        \
        locale/japanese.c locale/japanese.h locale/english.c locale/english.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 \
        lore/monster-lore.c lore/monster-lore.h \
diff --git a/src/lore/lore-calculator.c b/src/lore/lore-calculator.c
new file mode 100644 (file)
index 0000000..9527954
--- /dev/null
@@ -0,0 +1,150 @@
+#include "lore/lore-calculator.h"
+#include "monster-race/race-flags1.h"
+#include "mspell/monster-spell.h"
+#include "mspell/mspell-damage-calculator.h"
+
+/*!
+ * @brief ダイス目を文字列に変換する
+ * @param base_damage 固定値
+ * @param dice_num ダイス数
+ * @param dice_side ダイス面
+ * @param dice_mult ダイス倍率
+ * @param dice_div ダイス除数
+ * @param msg 文字列を格納するポインタ
+ * @return なし
+ */
+void dice_to_string(int base_damage, int dice_num, int dice_side, int dice_mult, int dice_div, char *msg)
+{
+    char base[80] = "", dice[80] = "", mult[80] = "";
+
+    if (dice_num == 0) {
+        sprintf(msg, "%d", base_damage);
+        return;
+    }
+
+    if (base_damage != 0)
+        sprintf(base, "%d+", base_damage);
+
+    if (dice_num == 1)
+        sprintf(dice, "d%d", dice_side);
+    else
+        sprintf(dice, "%dd%d", dice_num, dice_side);
+
+    if (dice_mult != 1 || dice_div != 1) {
+        if (dice_div == 1)
+            sprintf(mult, "*%d", dice_mult);
+        else
+            sprintf(mult, "*(%d/%d)", dice_mult, dice_div);
+    }
+
+    sprintf(msg, "%s%s%s", base, dice, mult);
+}
+
+/*!
+ * @brief モンスターのAC情報を得ることができるかを返す / Determine if the "armor" is known
+ * @param r_idx モンスターの種族ID
+ * @return 敵のACを知る条件が満たされているならTRUEを返す
+ * @details
+ * The higher the level, the fewer kills needed.
+ */
+bool know_armour(MONRACE_IDX r_idx)
+{
+    monster_race *r_ptr = &r_info[r_idx];
+    DEPTH level = r_ptr->level;
+    MONSTER_NUMBER kills = r_ptr->r_tkills;
+
+    bool known = (r_ptr->r_cast_spell == MAX_UCHAR) ? TRUE : FALSE;
+
+    if (cheat_know || known)
+        return TRUE;
+    if (kills > 304 / (4 + level))
+        return TRUE;
+    if (!(r_ptr->flags1 & RF1_UNIQUE))
+        return FALSE;
+    if (kills > 304 / (38 + (5 * level) / 4))
+        return TRUE;
+    return FALSE;
+}
+
+/*!
+ * @brief モンスターの打撃威力を知ることができるかどうかを返す
+ * Determine if the "damage" of the given attack is known
+ * @param r_idx モンスターの種族ID
+ * @param i 確認したい攻撃手番
+ * @return 敵のダメージダイスを知る条件が満たされているならTRUEを返す
+ * @details
+ * <pre>
+ * the higher the level of the monster, the fewer the attacks you need,
+ * the more damage an attack does, the more attacks you need
+ * </pre>
+ */
+bool know_damage(MONRACE_IDX r_idx, int i)
+{
+    monster_race *r_ptr = &r_info[r_idx];
+    DEPTH level = r_ptr->level;
+    s32b a = r_ptr->r_blows[i];
+
+    s32b d1 = r_ptr->blow[i].d_dice;
+    s32b d2 = r_ptr->blow[i].d_side;
+    s32b d = d1 * d2;
+
+    if (d >= ((4 + level) * MAX_UCHAR) / 80)
+        d = ((4 + level) * MAX_UCHAR - 1) / 80;
+    if ((4 + level) * a > 80 * d)
+        return TRUE;
+    if (!(r_ptr->flags1 & RF1_UNIQUE))
+        return FALSE;
+    if ((4 + level) * (2 * a) > 80 * d)
+        return TRUE;
+
+    return FALSE;
+}
+
+/*!
+ * @brief 文字列にモンスターの攻撃力を加える
+ * @param r_idx モンスターの種族ID
+ * @param SPELL_NUM 呪文番号
+ * @param msg 表示する文字列
+ * @param tmp 返すメッセージを格納する配列
+ * @return なし
+ */
+void set_damage(player_type *player_ptr, MONRACE_IDX r_idx, monster_spell_type ms_type, char *msg, char *tmp)
+{
+    int base_damage = monspell_race_damage(player_ptr, ms_type, r_idx, BASE_DAM);
+    int dice_num = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_NUM);
+    int dice_side = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_SIDE);
+    int dice_mult = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_MULT);
+    int dice_div = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_DIV);
+    char dmg_str[80], dice_str[80];
+    dice_to_string(base_damage, dice_num, dice_side, dice_mult, dice_div, dmg_str);
+    sprintf(dice_str, "(%s)", dmg_str);
+
+    if (know_armour(r_idx))
+        sprintf(tmp, msg, dice_str);
+    else
+        sprintf(tmp, msg, "");
+}
+
+void set_drop_flags(lore_type *lore_ptr)
+{
+    if (!lore_ptr->know_everything)
+        return;
+
+    lore_ptr->drop_gold = lore_ptr->drop_item = (((lore_ptr->r_ptr->flags1 & RF1_DROP_4D2) ? 8 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_3D2) ? 6 : 0)
+        + ((lore_ptr->r_ptr->flags1 & RF1_DROP_2D2) ? 4 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_1D2) ? 2 : 0)
+        + ((lore_ptr->r_ptr->flags1 & RF1_DROP_90) ? 1 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_60) ? 1 : 0));
+
+    if (lore_ptr->r_ptr->flags1 & RF1_ONLY_GOLD)
+        lore_ptr->drop_item = 0;
+
+    if (lore_ptr->r_ptr->flags1 & RF1_ONLY_ITEM)
+        lore_ptr->drop_gold = 0;
+
+    lore_ptr->flags1 = lore_ptr->r_ptr->flags1;
+    lore_ptr->flags2 = lore_ptr->r_ptr->flags2;
+    lore_ptr->flags3 = lore_ptr->r_ptr->flags3;
+    lore_ptr->flags4 = lore_ptr->r_ptr->flags4;
+    lore_ptr->a_ability_flags1 = lore_ptr->r_ptr->a_ability_flags1;
+    lore_ptr->a_ability_flags2 = lore_ptr->r_ptr->a_ability_flags2;
+    lore_ptr->flagsr = lore_ptr->r_ptr->flagsr;
+}
diff --git a/src/lore/lore-calculator.h b/src/lore/lore-calculator.h
new file mode 100644 (file)
index 0000000..d985057
--- /dev/null
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "lore/lore-util.h"
+#include "mspell/mspell-type.h"
+#include "system/angband.h"
+
+void dice_to_string(int base_damage, int dice_num, int dice_side, int dice_mult, int dice_div, char *msg);
+bool know_armour(MONRACE_IDX r_idx);
+bool know_damage(MONRACE_IDX r_idx, int i);
+void set_damage(player_type *player_ptr, MONRACE_IDX r_idx, monster_spell_type ms_type, char *msg, char *tmp);
+void set_drop_flags(lore_type *lore_ptr);
index 7fdf546..478e808 100644 (file)
@@ -7,6 +7,7 @@
 #include "lore/monster-lore.h"
 #include "locale/english.h"
 #include "locale/japanese.h"
+#include "lore/lore-calculator.h"
 #include "lore/lore-util.h"
 #include "monster-race/race-flags-ability1.h"
 #include "monster-race/race-flags-ability2.h"
  */
 #define plural(c, s, p) (((c) == 1) ? (s) : (p))
 
-/*!
- * @brief ダイス目を文字列に変換する
- * @param base_damage 固定値
- * @param dice_num ダイス数
- * @param dice_side ダイス面
- * @param dice_mult ダイス倍率
- * @param dice_div ダイス除数
- * @param msg 文字列を格納するポインタ
- * @return なし
- */
-void dice_to_string(int base_damage, int dice_num, int dice_side, int dice_mult, int dice_div, char *msg)
-{
-    char base[80] = "", dice[80] = "", mult[80] = "";
-
-    if (dice_num == 0) {
-        sprintf(msg, "%d", base_damage);
-        return;
-    }
-
-    if (base_damage != 0)
-        sprintf(base, "%d+", base_damage);
-
-    if (dice_num == 1)
-        sprintf(dice, "d%d", dice_side);
-    else
-        sprintf(dice, "%dd%d", dice_num, dice_side);
-
-    if (dice_mult != 1 || dice_div != 1) {
-        if (dice_div == 1)
-            sprintf(mult, "*%d", dice_mult);
-        else
-            sprintf(mult, "*(%d/%d)", dice_mult, dice_div);
-    }
-
-    sprintf(msg, "%s%s%s", base, dice, mult);
-}
-
-/*!
- * @brief モンスターのAC情報を得ることができるかを返す / Determine if the "armor" is known
- * @param r_idx モンスターの種族ID
- * @return 敵のACを知る条件が満たされているならTRUEを返す
- * @details
- * The higher the level, the fewer kills needed.
- */
-static bool know_armour(MONRACE_IDX r_idx)
-{
-    monster_race *r_ptr = &r_info[r_idx];
-    DEPTH level = r_ptr->level;
-    MONSTER_NUMBER kills = r_ptr->r_tkills;
-
-    bool known = (r_ptr->r_cast_spell == MAX_UCHAR) ? TRUE : FALSE;
-
-    if (cheat_know || known)
-        return TRUE;
-    if (kills > 304 / (4 + level))
-        return TRUE;
-    if (!(r_ptr->flags1 & RF1_UNIQUE))
-        return FALSE;
-    if (kills > 304 / (38 + (5 * level) / 4))
-        return TRUE;
-    return FALSE;
-}
-
-/*!
- * @brief モンスターの打撃威力を知ることができるかどうかを返す
- * Determine if the "damage" of the given attack is known
- * @param r_idx モンスターの種族ID
- * @param i 確認したい攻撃手番
- * @return 敵のダメージダイスを知る条件が満たされているならTRUEを返す
- * @details
- * <pre>
- * the higher the level of the monster, the fewer the attacks you need,
- * the more damage an attack does, the more attacks you need
- * </pre>
- */
-static bool know_damage(MONRACE_IDX r_idx, int i)
-{
-    monster_race *r_ptr = &r_info[r_idx];
-    DEPTH level = r_ptr->level;
-    s32b a = r_ptr->r_blows[i];
-
-    s32b d1 = r_ptr->blow[i].d_dice;
-    s32b d2 = r_ptr->blow[i].d_side;
-    s32b d = d1 * d2;
-
-    if (d >= ((4 + level) * MAX_UCHAR) / 80)
-        d = ((4 + level) * MAX_UCHAR - 1) / 80;
-    if ((4 + level) * a > 80 * d)
-        return TRUE;
-    if (!(r_ptr->flags1 & RF1_UNIQUE))
-        return FALSE;
-    if ((4 + level) * (2 * a) > 80 * d)
-        return TRUE;
-
-    return FALSE;
-}
-
-/*!
- * @brief 文字列にモンスターの攻撃力を加える
- * @param r_idx モンスターの種族ID
- * @param SPELL_NUM 呪文番号
- * @param msg 表示する文字列
- * @param tmp 返すメッセージを格納する配列
- * @return なし
- */
-static void set_damage(player_type *player_ptr, MONRACE_IDX r_idx, monster_spell_type ms_type, char *msg, char *tmp)
-{
-    int base_damage = monspell_race_damage(player_ptr, ms_type, r_idx, BASE_DAM);
-    int dice_num = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_NUM);
-    int dice_side = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_SIDE);
-    int dice_mult = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_MULT);
-    int dice_div = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_DIV);
-    char dmg_str[80], dice_str[80];
-    dice_to_string(base_damage, dice_num, dice_side, dice_mult, dice_div, dmg_str);
-    sprintf(dice_str, "(%s)", dmg_str);
-
-    if (know_armour(r_idx))
-        sprintf(tmp, msg, dice_str);
-    else
-        sprintf(tmp, msg, "");
-}
-
-static void set_drop_flags(lore_type *lore_ptr)
-{
-    if (!lore_ptr->know_everything)
-        return;
-
-    lore_ptr->drop_gold = lore_ptr->drop_item = (((lore_ptr->r_ptr->flags1 & RF1_DROP_4D2) ? 8 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_3D2) ? 6 : 0)
-        + ((lore_ptr->r_ptr->flags1 & RF1_DROP_2D2) ? 4 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_1D2) ? 2 : 0)
-        + ((lore_ptr->r_ptr->flags1 & RF1_DROP_90) ? 1 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_60) ? 1 : 0));
-
-    if (lore_ptr->r_ptr->flags1 & RF1_ONLY_GOLD)
-        lore_ptr->drop_item = 0;
-
-    if (lore_ptr->r_ptr->flags1 & RF1_ONLY_ITEM)
-        lore_ptr->drop_gold = 0;
-
-    lore_ptr->flags1 = lore_ptr->r_ptr->flags1;
-    lore_ptr->flags2 = lore_ptr->r_ptr->flags2;
-    lore_ptr->flags3 = lore_ptr->r_ptr->flags3;
-    lore_ptr->flags4 = lore_ptr->r_ptr->flags4;
-    lore_ptr->a_ability_flags1 = lore_ptr->r_ptr->a_ability_flags1;
-    lore_ptr->a_ability_flags2 = lore_ptr->r_ptr->a_ability_flags2;
-    lore_ptr->flagsr = lore_ptr->r_ptr->flagsr;
-}
-
 static void set_msex_flags(lore_type *lore_ptr)
 {
     lore_ptr->msex = MSEX_NONE;
@@ -320,28 +175,7 @@ void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS
         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
     }
 
-    if (lore_ptr->flags4 & RF4_ROCKET) {
-        set_damage(player_ptr, r_idx, (MS_ROCKET), _("ロケット%sを発射する", "shoot a rocket%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
-        lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
-        lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
-    }
-
-    if (lore_ptr->flags4 & RF4_SHOOT) {
-        for (int m = 0; m < 4; m++) {
-            if (lore_ptr->r_ptr->blow[m].method != RBM_SHOOT)
-                continue;
-
-            if (know_armour(r_idx))
-                sprintf(
-                    lore_ptr->tmp_msg[lore_ptr->vn], _("威力 %dd%d の射撃をする", "fire an arrow (Power:%dd%d)"), lore_ptr->r_ptr->blow[m].d_side, lore_ptr->r_ptr->blow[m].d_dice);
-            else
-                sprintf(lore_ptr->tmp_msg[lore_ptr->vn], _("射撃をする", "fire an arrow"));
-            lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
-            lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
-            break;
-        }
-    }
-
+    display_monster_launching(player_ptr, lore_ptr);
     if (lore_ptr->a_ability_flags2 & (RF6_SPECIAL)) {
         lore_ptr->vp[lore_ptr->vn] = _("特別な行動をする", "do something");
         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
index 5022176..59af014 100644 (file)
@@ -2,5 +2,4 @@
 
 #include "system/angband.h"
 
-void dice_to_string(int base_damage, int dice_num, int dice_side, int dice_mult, int dice_div, char *msg);
 void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS mode);
index 7112d8f..0a8ae66 100644 (file)
@@ -14,9 +14,9 @@
 #include "autopick/autopick.h"
 #include "cmd-action/cmd-attack.h"
 #include "cmd-action/cmd-spell.h"
-#include "cmd-io/cmd-dump.h"
 #include "cmd-building/cmd-building.h"
-#include "mind/mind-sniper.h"
+#include "cmd-io/cmd-dump.h"
+#include "core/speed-table.h"
 #include "core/stuff-handler.h"
 #include "dungeon/dungeon.h"
 #include "dungeon/quest.h"
 #include "io/files-util.h"
 #include "io/targeting.h"
 #include "io/write-diary.h"
+#include "lore/lore-calculator.h"
 #include "market/building-util.h"
-#include "mind/mind.h"
 #include "mind/mind-force-trainer.h"
-#include "core/speed-table.h"
+#include "mind/mind-sniper.h"
+#include "mind/mind.h"
 #include "monster-race/race-flags1.h"
 #include "monster-race/race-flags7.h"
 #include "monster/monster-describer.h"
 #include "mspell/monster-spell.h"
 #include "object-enchant/artifact.h"
 #include "object-enchant/item-feeling.h"
-#include "object/item-use-flags.h"
-#include "object/object-info.h"
-#include "perception/identification.h"
-#include "perception/object-perception.h"
 #include "object-enchant/object-boost.h"
 #include "object-enchant/object-ego.h"
+#include "object-enchant/special-object-flags.h"
+#include "object-enchant/tr-types.h"
+#include "object-enchant/trc-types.h"
+#include "object/item-use-flags.h"
 #include "object/object-flavor.h"
 #include "object/object-generator.h"
 #include "object/object-hook.h"
+#include "object/object-info.h"
 #include "object/object-kind.h"
 #include "object/object-mark-types.h"
 #include "object/object-value.h"
-#include "object-enchant/special-object-flags.h"
-#include "object-enchant/tr-types.h"
-#include "object-enchant/trc-types.h"
+#include "perception/identification.h"
+#include "perception/object-perception.h"
 #include "player/avatar.h"
 #include "player/player-class.h"
 #include "player/player-damage.h"
 #include "player/player-personalities-table.h"
 #include "player/player-skill.h"
 #include "player/player-status.h"
-#include "spell/process-effect.h"
 #include "spell-kind/earthquake.h"
 #include "spell-kind/spells-floor.h"
 #include "spell-kind/spells-launcher.h"
 #include "spell-kind/spells-sight.h"
 #include "spell-kind/spells-teleport.h"
+#include "spell/process-effect.h"
 #include "spell/spells-execution.h"
 #include "spell/spells-summon.h"
 #include "spell/spells-type.h"
index f37395c..649dd6d 100644 (file)
@@ -5,11 +5,14 @@
  */
 
 #include "view/display-lore.h"
+#include "lore/lore-calculator.h"
 #include "lore/monster-lore.h"
 #include "monster-race/race-flags1.h"
 #include "monster-race/race-flags2.h"
 #include "monster-race/race-flags3.h"
+#include "monster-race/race-flags4.h"
 #include "monster-race/race-indice-types.h"
+#include "mspell/mspell-type.h"
 #include "term/term-color-types.h"
 #include "world/world.h"
 
@@ -469,3 +472,29 @@ void display_monster_collective(lore_type *lore_ptr)
         hooked_roff(format(_("%^sは通常集団で現れる。", "%^s usually appears in groups.  "), wd_he[lore_ptr->msex]));
     }
 }
+
+void display_monster_launching(player_type *player_ptr, lore_type *lore_ptr)
+{
+    if (lore_ptr->flags4 & RF4_ROCKET) {
+        set_damage(player_ptr, lore_ptr->r_idx, (MS_ROCKET), _("ロケット%sを発射する", "shoot a rocket%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
+        lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+        lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
+    }
+
+    if ((lore_ptr->flags4 & RF4_SHOOT) == 0)
+        return;
+
+    for (int m = 0; m < 4; m++) {
+        if (lore_ptr->r_ptr->blow[m].method != RBM_SHOOT)
+            continue;
+
+        if (know_armour(lore_ptr->r_idx))
+            sprintf(lore_ptr->tmp_msg[lore_ptr->vn], _("威力 %dd%d の射撃をする", "fire an arrow (Power:%dd%d)"), lore_ptr->r_ptr->blow[m].d_side,
+                lore_ptr->r_ptr->blow[m].d_dice);
+        else
+            sprintf(lore_ptr->tmp_msg[lore_ptr->vn], _("射撃をする", "fire an arrow"));
+        lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
+        lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
+        break;
+    }
+}
index 8bf598a..2aef0d3 100644 (file)
@@ -18,3 +18,4 @@ void display_monster_exp(player_type *player_ptr, lore_type *lore_ptr);
 void display_monster_aura(lore_type *lore_ptr);
 void display_lore_this(player_type *player_ptr, lore_type *lore_ptr);
 void display_monster_collective(lore_type *lore_ptr);
+void display_monster_launching(player_type *player_ptr, lore_type *lore_ptr);