<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
<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" />
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 \
--- /dev/null
+#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;
+}
--- /dev/null
+#pragma once
+
+#include "system/angband.h"
+
+bool cast_berserk_spell(player_type *caster_ptr, int spell);
#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 プレーヤーへの参照ポインタ