*/
MonsterSpellResult spell_RF4_SHRIEK(MONSTER_IDX m_idx, player_type *player_ptr, MONSTER_IDX t_idx, int target_type)
{
- simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sがかん高い金切り声をあげた。", "%^s makes a high pitched shriek."),
- _("%^sが%sに向かって叫んだ。", "%^s shrieks at %s."), target_type);
+ mspell_cast_msg_simple msg(_("%^sがかん高い金切り声をあげた。", "%^s makes a high pitched shriek."),
+ _("%^sが%sに向かって叫んだ。", "%^s shrieks at %s."));
+
+ simple_monspell_message(player_ptr, m_idx, t_idx, msg, target_type);
auto *m_ptr = &player_ptr->current_floor_ptr->m_list[m_idx];
auto result = MonsterSpellResult::make_valid();
monster_type *t_ptr = &floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
- simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sがあなたを引き戻した。", "%^s commands you to return."),
- _("%^sが%sを引き戻した。", "%^s commands %s to return."), TARGET_TYPE);
+ mspell_cast_msg_simple msg(_("%^sがあなたを引き戻した。", "%^s commands you to return."),
+ _("%^sが%sを引き戻した。", "%^s commands %s to return."));
+
+ simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
if (TARGET_TYPE == MONSTER_TO_PLAYER) {
teleport_player_to(player_ptr, m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE);
monster_type *t_ptr = &floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
- simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sにテレポートさせられた。", "%^s teleports you away."),
- _("%^sは%sをテレポートさせた。", "%^s teleports %s away."), TARGET_TYPE);
+ mspell_cast_msg_simple msg(_("%^sにテレポートさせられた。", "%^s teleports you away."),
+ _("%^sは%sをテレポートさせた。", "%^s teleports %s away."));
+
+ simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
if (TARGET_TYPE == MONSTER_TO_PLAYER) {
if (is_echizen(player_ptr))
*/
MonsterSpellResult spell_RF6_HAND_DOOM(player_type *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sが<破滅の手>を放った!", "%^s invokes the Hand of Doom!"),
- _("%^sが%sに<破滅の手>を放った!", "%^s invokes the Hand of Doom upon %s!"), TARGET_TYPE);
+ mspell_cast_msg_simple msg(_("%^sが<破滅の手>を放った!", "%^s invokes the Hand of Doom!"),
+ _("%^sが%sに<破滅の手>を放った!", "%^s invokes the Hand of Doom upon %s!"));
+
+ simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
ProjectResult proj_res;
if (TARGET_TYPE == MONSTER_TO_PLAYER) {
*/
static MonsterSpellResult spell_RF6_SPECIAL_B(player_type *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ mspell_cast_msg_simple msg;
floor_type *floor_ptr = player_ptr->current_floor_ptr;
monster_type *m_ptr = &floor_ptr->m_list[m_idx];
monster_type *t_ptr = &floor_ptr->m_list[t_idx];
disturb(player_ptr, true, true);
if (one_in_(3) || !direct) {
- simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sは突然視界から消えた!", "You lose sight of %s!"),
- _("%^sは突然急上昇して視界から消えた!", "You lose sight of %s!"), TARGET_TYPE);
+ msg.to_player = _("%^sは突然視界から消えた!", "You lose sight of %s!");
+ msg.to_mons = _("%^sは突然急上昇して視界から消えた!", "You lose sight of %s!");
+
+ simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
teleport_away(player_ptr, m_idx, 10, TELEPORT_NONMAGICAL);
player_ptr->update |= (PU_MONSTERS);
sound(SOUND_FALL);
}
- simple_monspell_message(player_ptr, m_idx, t_idx, _("%^sがあなたを掴んで空中から投げ落とした。", "%^s snatches you, soars into the sky, and drops you."),
- _("%^sが%sを掴んで空中から投げ落とした。", "%^s snatches %s, soars into the sky, and releases its grip."), TARGET_TYPE);
+ msg.to_player = _("%^sがあなたを掴んで空中から投げ落とした。", "%^s snatches you, soars into the sky, and drops you.");
+ msg.to_mons = _("%^sが%sを掴んで空中から投げ落とした。", "%^s snatches %s, soars into the sky, and releases its grip.");
+
+ simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
bool fear, dead; /* dummy */
HIT_POINT dam = damroll(4, 8);
teleport_monster_to(player_ptr, t_idx, m_ptr->fy, m_ptr->fx, 100, i2enum<teleport_flags>(TELEPORT_NONMAGICAL | TELEPORT_PASSIVE));
if ((monster_to_player && player_ptr->levitation) || (monster_to_monster && (tr_ptr->flags7 & RF7_CAN_FLY))) {
- simple_monspell_message(player_ptr, m_idx, t_idx, _("あなたは静かに着地した。", "You float gently down to the ground."),
- _("%^sは静かに着地した。", "%^s floats gently down to the ground."), TARGET_TYPE);
+ msg.to_player = _("あなたは静かに着地した。", "You float gently down to the ground.");
+ msg.to_mons = _("%^sは静かに着地した。", "%^s floats gently down to the ground.");
} else {
- simple_monspell_message(player_ptr, m_idx, t_idx, _("あなたは地面に叩きつけられた。", "You crashed into the ground."),
- _("%^sは地面に叩きつけられた。", "%^s crashed into the ground."), TARGET_TYPE);
- dam += damroll(6, 8);
+ msg.to_player = _("あなたは地面に叩きつけられた。", "You crashed into the ground.");
+ msg.to_mons = _("%^sは地面に叩きつけられた。", "%^s crashed into the ground.");
}
+ simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
+ dam += damroll(6, 8);
+
if (monster_to_player || (monster_to_monster && player_ptr->riding == t_idx)) {
int get_damage = take_hit(player_ptr, DAMAGE_NOESCAPE, dam, m_name);
if (player_ptr->tim_eyeeye && get_damage > 0 && !player_ptr->is_dead) {
, to_mons(to_mons)
{}
+mspell_cast_msg_simple::mspell_cast_msg_simple(concptr to_player, concptr to_mons)
+ : to_player(to_player)
+ , to_mons(to_mons)
+ {}
+
/*!
* @brief プレイヤーがモンスターを見ることができるかの判定 /
* @param floor_ptr 現在フロアへの参照ポインタ
* @param player_ptr プレイヤーへの参照ポインタ
* @param m_idx 呪文を唱えるモンスターID
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
-* @param msg1 プレイヤーを対象とする場合のメッセージ
-* @param msg2 モンスター対象とする場合のメッセージ
+* @param msgs メッセージの構造体
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void simple_monspell_message(player_type* player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, int TARGET_TYPE)
+void simple_monspell_message(player_type* player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, const mspell_cast_msg_simple &msgs, int TARGET_TYPE)
{
- monspell_message_base(player_ptr, m_idx, t_idx, msg1, msg2, msg1, msg2, player_ptr->blind > 0, TARGET_TYPE);
+ monspell_message_base(player_ptr, m_idx, t_idx, mspell_cast_msg(msgs.to_player, msgs.to_mons,
+ msgs.to_player, msgs.to_mons), player_ptr->blind > 0, TARGET_TYPE);
}
concptr to_mons; /*!< 対モンスター*/
};
+struct mspell_cast_msg_simple {
+ mspell_cast_msg_simple(concptr to_player, concptr to_mons);
+ mspell_cast_msg_simple() = default;
+ concptr to_player; /*!< プレイヤー対象*/
+ concptr to_mons; /*!< モンスター対象*/
+};
+
bool see_monster(player_type *player_ptr, MONSTER_IDX m_idx);
bool monster_near_player(floor_type *floor_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx);
bool monspell_message_base(player_type *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, const mspell_cast_msg &msgs, bool msg_flag_aux, int TARGET_TYPE);
bool monspell_message(player_type *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, const mspell_cast_msg_blind &msgs, int TARGET_TYPE);
-void simple_monspell_message(player_type *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, int TARGET_TYPE);
+void simple_monspell_message(player_type *player_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, const mspell_cast_msg_simple &msgs, int TARGET_TYPE);
bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6)) {
- simple_monspell_message(player_ptr, m_idx, t_idx, _("地面から水が吹き出した!", "Water blew off from the ground!"),
- _("地面から水が吹き出した!", "Water blew off from the ground!"), TARGET_TYPE);
+ mspell_cast_msg_simple msg(_("地面から水が吹き出した!", "Water blew off from the ground!"),
+ _("地面から水が吹き出した!", "Water blew off from the ground!"));
+
+ simple_monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
if (mon_to_player)
fire_ball_hide(player_ptr, GF_WATER_FLOW, 0, 3, 8);