OSDN Git Service

[Refactor] #1511 「プレーヤー」表記を全て「プレイヤー」に変更した (日本語版のみ、ほぼDoxygenコメント)
[hengbandforosx/hengbandosx.git] / src / mspell / mspell-particularity.cpp
1 /*!
2  * @brief ボルトでもボールでもブレスでもなく、ダメージを与える特殊なスペルの実行 /
3  * Performing special spells that take damage, not bolts, balls or breaths
4  * @date 2020/05/16
5  * @author Hourier
6  * @details 肥大化しやすいファイル名なので、関数の追加時は共通部分を別ファイルに抜き出せるか検討すること /
7  * This is a filename that tends to be bloated.
8  * So when adding a function, please consider whether you can extract the common part to another file.
9  */
10
11 #include "mspell/mspell-particularity.h"
12 #include "effect/effect-processor.h"
13 #include "mind/drs-types.h"
14 #include "monster-race/race-ability-flags.h"
15 #include "monster/monster-update.h"
16 #include "mspell/mspell-checker.h"
17 #include "mspell/mspell-damage-calculator.h"
18 #include "mspell/mspell-util.h"
19 #include "mspell/mspell.h"
20 #include "spell/spell-types.h"
21 #include "system/player-type-definition.h"
22
23 /*!
24  * @brief RF4_ROCKETの処理。ロケット。 /
25  * @param player_ptr プレイヤーへの参照ポインタ
26  * @param y 対象の地点のy座標
27  * @param x 対象の地点のx座標
28  * @param m_idx 呪文を唱えるモンスターID
29  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
30  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
31  *
32  * プレイヤーに当たったらラーニング可。
33  */
34 MonsterSpellResult spell_RF4_ROCKET(player_type *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
35 {
36     monspell_message(player_ptr, m_idx, t_idx, _("%^sが何かを射った。", "%^s shoots something."), _("%^sがロケットを発射した。", "%^s fires a rocket."),
37         _("%^sが%sにロケットを発射した。", "%^s fires a rocket at %s."), TARGET_TYPE);
38
39     const auto dam = monspell_damage(player_ptr, RF_ABILITY::ROCKET, m_idx, DAM_ROLL);
40     const auto proj_res = breath(player_ptr, y, x, m_idx, GF_ROCKET, dam, 2, false, TARGET_TYPE);
41     if (TARGET_TYPE == MONSTER_TO_PLAYER)
42         update_smart_learn(player_ptr, m_idx, DRS_SHARD);
43
44     auto res = MonsterSpellResult::make_valid(dam);
45     res.learnable = proj_res.affected_player;
46
47     return res;
48 }
49
50 /*!
51  * @brief RF6_HAND_DOOMの処理。破滅の手。 /
52  * @param player_ptr プレイヤーへの参照ポインタ
53  * @param y 対象の地点のy座標
54  * @param x 対象の地点のx座標
55  * @param m_idx 呪文を唱えるモンスターID
56  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
57  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
58  *
59  * プレイヤーに当たったらラーニング可。
60  */
61 MonsterSpellResult spell_RF6_HAND_DOOM(player_type *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
62 {
63     simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sが<破滅の手>を放った!", "%^s invokes the Hand of Doom!"),
64         _("%^sが%sに<破滅の手>を放った!", "%^s invokes the Hand of Doom upon %s!"), TARGET_TYPE);
65
66     ProjectResult proj_res;
67     if (TARGET_TYPE == MONSTER_TO_PLAYER) {
68         const auto dam = monspell_damage(player_ptr, RF_ABILITY::HAND_DOOM, m_idx, DAM_ROLL);
69         proj_res = breath(player_ptr, y, x, m_idx, GF_HAND_DOOM, dam, 0, false, MONSTER_TO_PLAYER);
70     } else if (TARGET_TYPE == MONSTER_TO_MONSTER) {
71         const auto dam = 20; /* Dummy power */
72         proj_res = breath(player_ptr, y, x, m_idx, GF_HAND_DOOM, dam, 0, false, MONSTER_TO_MONSTER);
73     }
74
75     auto res = MonsterSpellResult::make_valid();
76     res.learnable = proj_res.affected_player;
77
78     return res;
79 }
80
81 /*!
82  * @brief RF6_PSY_SPEARの処理。光の剣。 /
83  * @param y 対象の地点のy座標
84  * @param x 対象の地点のx座標
85  * @param m_idx 呪文を唱えるモンスターID
86  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
87  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
88  *
89  * プレイヤーに当たったらラーニング可。
90  */
91 MonsterSpellResult spell_RF6_PSY_SPEAR(player_type *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
92 {
93     monspell_message(player_ptr, m_idx, t_idx, _("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが光の剣を放った。", "%^s throw a Psycho-Spear."),
94         _("%^sが%sに向かって光の剣を放った。", "%^s throw a Psycho-spear at %s."), TARGET_TYPE);
95
96     const auto dam = monspell_damage(player_ptr, RF_ABILITY::PSY_SPEAR, m_idx, DAM_ROLL);
97     const auto proj_res = beam(player_ptr, m_idx, y, x, GF_PSY_SPEAR, dam, MONSTER_TO_PLAYER);
98
99     auto res = MonsterSpellResult::make_valid(dam);
100     res.learnable = proj_res.affected_player;
101
102     return res;
103 }