OSDN Git Service

[Refactor] #40573 Separated mind-berserker.c/h from mind-switcher.c
authorHourier <hourier@users.sourceforge.jp>
Wed, 29 Jul 2020 11:45:20 +0000 (20:45 +0900)
committerHourier <hourier@users.sourceforge.jp>
Wed, 29 Jul 2020 11:45:20 +0000 (20:45 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/mind/mind-berserker.c [new file with mode: 0644]
src/mind/mind-berserker.h [new file with mode: 0644]
src/mind/mind-switcher.c

index fca46df..bf8b39a 100644 (file)
     <ClCompile Include="..\..\src\melee\melee-spell-flags-checker.c" />\r
     <ClCompile Include="..\..\src\melee\melee-spell-util.c" />\r
     <ClCompile Include="..\..\src\melee\melee-spell.c" />\r
+    <ClCompile Include="..\..\src\mind\mind-berserker.c" />\r
     <ClCompile Include="..\..\src\mind\mind-blue-mage.c" />\r
     <ClCompile Include="..\..\src\mind\mind-explanations-table.c" />\r
     <ClCompile Include="..\..\src\mind\mind-info.c" />\r
     <ClInclude Include="..\..\src\melee\melee-spell-flags-checker.h" />\r
     <ClInclude Include="..\..\src\melee\melee-spell-util.h" />\r
     <ClInclude Include="..\..\src\melee\melee-spell.h" />\r
+    <ClInclude Include="..\..\src\mind\mind-berserker.h" />\r
     <ClInclude Include="..\..\src\mind\mind-blue-mage.h" />\r
     <ClInclude Include="..\..\src\mind\mind-explanations-table.h" />\r
     <ClInclude Include="..\..\src\mind\mind-info.h" />\r
index 97661f6..172ea3c 100644 (file)
     <ClCompile Include="..\..\src\mind\mind-power-getter.c">
       <Filter>mind</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\mind\mind-berserker.c">
+      <Filter>mind</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\combat\shoot.h">
     <ClInclude Include="..\..\src\mind\mind-power-getter.h">
       <Filter>mind</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\mind\mind-berserker.h">
+      <Filter>mind</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index 567fa01..b171d49 100644 (file)
@@ -386,6 +386,7 @@ hengband_SOURCES = \
        melee/melee-util.c melee/melee-util.h \
        \
        mind/drs-types.h \
+       mind/mind-berserker.c mind/mind-berserker.h \
        mind/mind-blue-mage.c mind/mind-blue-mage.h \
        mind/mind-cavalry.c mind/mind-cavalry.h \
        mind/mind-explanations-table.c mind/mind-explanations-table.h \
diff --git a/src/mind/mind-berserker.c b/src/mind/mind-berserker.c
new file mode 100644 (file)
index 0000000..aa836b0
--- /dev/null
@@ -0,0 +1,84 @@
+#include "mind/mind-berserker.h"
+#include "action/movement-execution.h"
+#include "cmd-action/cmd-attack.h"
+#include "floor/geometry.h"
+#include "game-option/input-options.h"
+#include "grid/feature.h"
+#include "grid/grid.h"
+#include "player-attack/player-attack.h"
+#include "player/player-move.h"
+#include "spell-kind/earthquake.h"
+#include "system/floor-type-definition.h"
+#include "spell-kind/spells-detection.h"
+#include "target/target-getter.h"
+#include "view/display-messages.h"
+
+/*!
+ * @brief 怒りの発動 /
+ * do_cmd_cast calls this function if the player's class is 'berserker'.
+ * @param spell 発動する特殊技能のID
+ * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
+ */
+bool cast_berserk_spell(player_type *caster_ptr, int spell)
+{
+    POSITION y, x;
+    DIRECTION dir;
+
+    // todo enum化する!
+    switch (spell) {
+    case 0:
+        detect_monsters_mind(caster_ptr, DETECT_RAD_DEFAULT);
+        break;
+    case 1: {
+        if (caster_ptr->riding) {
+            msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
+            return FALSE;
+        }
+
+        if (!get_direction(caster_ptr, &dir, FALSE, FALSE) || (dir == 5))
+            return FALSE;
+
+        y = caster_ptr->y + ddy[dir];
+        x = caster_ptr->x + ddx[dir];
+        if (!caster_ptr->current_floor_ptr->grid_array[y][x].m_idx) {
+            msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+            return FALSE;
+        }
+
+        do_cmd_attack(caster_ptr, y, x, 0);
+        if (!player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0)
+            || is_trap(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat))
+            break;
+
+        y += ddy[dir];
+        x += ddx[dir];
+        if (player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0)
+            && !is_trap(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat) && !caster_ptr->current_floor_ptr->grid_array[y][x].m_idx) {
+            msg_print(NULL);
+            (void)move_player_effect(caster_ptr, y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
+        }
+
+        break;
+    }
+    case 2: {
+        if (!get_direction(caster_ptr, &dir, FALSE, FALSE))
+            return FALSE;
+
+        y = caster_ptr->y + ddy[dir];
+        x = caster_ptr->x + ddx[dir];
+        exe_movement(caster_ptr, dir, easy_disarm, TRUE);
+        break;
+    }
+    case 3:
+        earthquake(caster_ptr, caster_ptr->y, caster_ptr->x, 8 + randint0(5), 0);
+        break;
+    case 4:
+        massacre(caster_ptr);
+        break;
+    default:
+        msg_print(_("なに?", "Zap?"));
+        break;
+    }
+
+    return TRUE;
+}
diff --git a/src/mind/mind-berserker.h b/src/mind/mind-berserker.h
new file mode 100644 (file)
index 0000000..920b929
--- /dev/null
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "system/angband.h"
+
+bool cast_berserk_spell(player_type *caster_ptr, int spell);
index 5fc42dd..4afb4c6 100644 (file)
@@ -40,6 +40,7 @@
 #include "io/input-key-requester.h"
 #include "main/sound-definitions-table.h"
 #include "main/sound-of-music.h"
+#include "mind/mind-berserker.h"
 #include "mind/mind-explanations-table.h"
 #include "mind/mind-force-trainer.h"
 #include "mind/mind-info.h"
 #include "view/display-messages.h"
 
 /*!
- * @brief 怒りの発動 /
- * do_cmd_cast calls this function if the player's class is 'berserker'.
- * @param spell 発動する特殊技能のID
- * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
- */
-static bool cast_berserk_spell(player_type *caster_ptr, int spell)
-{
-    POSITION y, x;
-    DIRECTION dir;
-
-    // todo enum化する!
-    switch (spell) {
-    case 0:
-        detect_monsters_mind(caster_ptr, DETECT_RAD_DEFAULT);
-        break;
-    case 1: {
-        if (caster_ptr->riding) {
-            msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
-            return FALSE;
-        }
-
-        if (!get_direction(caster_ptr, &dir, FALSE, FALSE) || (dir == 5))
-            return FALSE;
-
-        y = caster_ptr->y + ddy[dir];
-        x = caster_ptr->x + ddx[dir];
-        if (!caster_ptr->current_floor_ptr->grid_array[y][x].m_idx) {
-            msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
-            return FALSE;
-        }
-
-        do_cmd_attack(caster_ptr, y, x, 0);
-        if (!player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0)
-            || is_trap(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat))
-            break;
-
-        y += ddy[dir];
-        x += ddx[dir];
-        if (player_can_enter(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat, 0)
-            && !is_trap(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].feat) && !caster_ptr->current_floor_ptr->grid_array[y][x].m_idx) {
-            msg_print(NULL);
-            (void)move_player_effect(caster_ptr, y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
-        }
-
-        break;
-    }
-    case 2: {
-        if (!get_direction(caster_ptr, &dir, FALSE, FALSE))
-            return FALSE;
-
-        y = caster_ptr->y + ddy[dir];
-        x = caster_ptr->x + ddx[dir];
-        exe_movement(caster_ptr, dir, easy_disarm, TRUE);
-        break;
-    }
-    case 3:
-        earthquake(caster_ptr, caster_ptr->y, caster_ptr->x, 8 + randint0(5), 0);
-        break;
-    case 4:
-        massacre(caster_ptr);
-        break;
-    default:
-        msg_print(_("なに?", "Zap?"));
-        break;
-    }
-
-    return TRUE;
-}
-
-/*!
  * @brief 忍術の発動 /
  * do_cmd_cast calls this function if the player's class is 'ninja'.
  * @param caster_ptr プレーヤーへの参照ポインタ