diff --git a/src/action/mutation-execution.cpp b/src/action/mutation-execution.cpp index f3d374f4ad..3faf1cf43c 100644 --- a/src/action/mutation-execution.cpp +++ b/src/action/mutation-execution.cpp @@ -186,7 +186,7 @@ bool exe_mutation_power(PlayerType *player_ptr, PlayerMutationType power) return alchemy(player_ptr); case PlayerMutationType::GROW_MOLD: for (DIRECTION i = 0; i < 8; i++) { - summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, lvl, SUMMON_MOLD, PM_FORCE_PET); + summon_specific(player_ptr, player_ptr->y, player_ptr->x, lvl, SUMMON_MOLD, PM_FORCE_PET); } return true; diff --git a/src/blue-magic/blue-magic-summon.cpp b/src/blue-magic/blue-magic-summon.cpp index 9daddcfa9a..c2a54b35a8 100644 --- a/src/blue-magic/blue-magic-summon.cpp +++ b/src/blue-magic/blue-magic-summon.cpp @@ -32,7 +32,7 @@ bool cast_blue_summon_cyber(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("サイバーデーモンを召喚した!", "You summon a Cyberdemon!")); for (int k = 0; k < 1; k++) { - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_CYBER, bmc_ptr->p_mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_CYBER, bmc_ptr->p_mode)) { if (!bmc_ptr->pet) { msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon is angry!")); } @@ -48,7 +48,7 @@ bool cast_blue_summon_monster(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("仲間を召喚した。", "You summon help.")); for (int k = 0; k < 1; k++) { - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_NONE, bmc_ptr->p_mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_NONE, bmc_ptr->p_mode)) { if (!bmc_ptr->pet) { msg_print(_("召喚されたモンスターは怒っている!", "The summoned monster is angry!")); } @@ -64,7 +64,7 @@ bool cast_blue_summon_monsters(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("モンスターを召喚した!", "You summon monsters!")); for (int k = 0; k < bmc_ptr->plev / 15 + 2; k++) { - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_NONE, (bmc_ptr->p_mode | bmc_ptr->u_mode))) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_NONE, (bmc_ptr->p_mode | bmc_ptr->u_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚されたモンスターは怒っている!", "The summoned monsters are angry!")); } @@ -80,7 +80,7 @@ bool cast_blue_summon_ant(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("アリを召喚した。", "You summon ants.")); if (summon_specific( - player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_ANT, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) { + player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_ANT, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚されたアリは怒っている!", "The summoned ants are angry!")); } @@ -95,7 +95,7 @@ bool cast_blue_summon_spider(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("蜘蛛を召喚した。", "You summon spiders.")); if (summon_specific( - player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_SPIDER, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) { + player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_SPIDER, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚された蜘蛛は怒っている!", "The summoned spiders are angry!")); } @@ -110,7 +110,7 @@ bool cast_blue_summon_hound(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("ハウンドを召喚した。", "You summon hounds.")); if (summon_specific( - player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HOUND, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) { + player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HOUND, (PM_ALLOW_GROUP | bmc_ptr->p_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚されたハウンドは怒っている!", "The summoned hounds are angry!")); } @@ -125,7 +125,7 @@ bool cast_blue_summon_hydra(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("ヒドラを召喚した。", "You summon a hydras.")); if (summon_specific( - player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HYDRA, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { + player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HYDRA, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚されたヒドラは怒っている!", "The summoned hydras are angry!")); } @@ -140,7 +140,7 @@ bool cast_blue_summon_angel(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("天使を召喚した!", "You summon an angel!")); if (summon_specific( - player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_ANGEL, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { + player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_ANGEL, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚された天使は怒っている!", "The summoned angel is angry!")); } @@ -155,7 +155,7 @@ bool cast_blue_summon_demon(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("混沌の宮廷から悪魔を召喚した!", "You summon a demon from the Courts of Chaos!")); if (summon_specific( - player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_DEMON, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { + player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_DEMON, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon is angry!")); } @@ -170,7 +170,7 @@ bool cast_blue_summon_undead(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("アンデッドの強敵を召喚した!", "You summon an undead adversary!")); if (summon_specific( - player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_UNDEAD, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { + player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_UNDEAD, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead is angry!")); } @@ -185,7 +185,7 @@ bool cast_blue_summon_dragon(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("ドラゴンを召喚した!", "You summon a dragon!")); if (summon_specific( - player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_DRAGON, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { + player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_DRAGON, (bmc_ptr->g_mode | bmc_ptr->p_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon is angry!")); } @@ -199,7 +199,7 @@ bool cast_blue_summon_dragon(PlayerType *player_ptr, bmc_type *bmc_ptr) bool cast_blue_summon_high_undead(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("強力なアンデッドを召喚した!", "You summon a greater undead!")); - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_UNDEAD, + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_UNDEAD, (bmc_ptr->g_mode | bmc_ptr->p_mode | bmc_ptr->u_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!")); @@ -214,7 +214,7 @@ bool cast_blue_summon_high_undead(PlayerType *player_ptr, bmc_type *bmc_ptr) bool cast_blue_summon_high_dragon(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("古代ドラゴンを召喚した!", "You summon an ancient dragon!")); - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_DRAGON, + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_DRAGON, (bmc_ptr->g_mode | bmc_ptr->p_mode | bmc_ptr->u_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon is angry!")); @@ -229,7 +229,7 @@ bool cast_blue_summon_high_dragon(PlayerType *player_ptr, bmc_type *bmc_ptr) bool cast_blue_summon_amberite(PlayerType *player_ptr, bmc_type *bmc_ptr) { msg_print(_("アンバーの王族を召喚した!", "You summon a Lord of Amber!")); - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_AMBERITES, + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_AMBERITES, (bmc_ptr->g_mode | bmc_ptr->p_mode | bmc_ptr->u_mode))) { if (!bmc_ptr->pet) { msg_print(_("召喚されたアンバーの王族は怒っている!", "The summoned Lord of Amber is angry!")); @@ -246,7 +246,7 @@ bool cast_blue_summon_unique(PlayerType *player_ptr, bmc_type *bmc_ptr) int count = 0; msg_print(_("特別な強敵を召喚した!", "You summon a special opponent!")); for (int k = 0; k < 1; k++) { - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_UNIQUE, + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_UNIQUE, (bmc_ptr->g_mode | bmc_ptr->p_mode | PM_ALLOW_UNIQUE))) { count++; if (!bmc_ptr->pet) { @@ -256,7 +256,7 @@ bool cast_blue_summon_unique(PlayerType *player_ptr, bmc_type *bmc_ptr) } for (int k = count; k < 1; k++) { - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_UNDEAD, + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_HI_UNDEAD, (bmc_ptr->g_mode | bmc_ptr->p_mode | PM_ALLOW_UNIQUE))) { count++; if (!bmc_ptr->pet) { @@ -277,7 +277,7 @@ bool cast_blue_summon_dead_unique(PlayerType *player_ptr, bmc_type *bmc_ptr) BIT_FLAGS mode = bmc_ptr->g_mode | bmc_ptr->p_mode | PM_ALLOW_UNIQUE | PM_CLONE; msg_print(_("特別な強敵を蘇らせた!", "You summon a special dead opponent!")); - if (summon_specific(player_ptr, (bmc_ptr->pet ? -1 : 0), player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_DEAD_UNIQUE, mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, bmc_ptr->summon_lev, SUMMON_DEAD_UNIQUE, mode)) { if (!bmc_ptr->pet) { msg_print(_("蘇生されたユニーク・モンスターは怒っている!", "The summoned special dead opponent is angry!")); } diff --git a/src/cmd-action/cmd-mane.cpp b/src/cmd-action/cmd-mane.cpp index e867c359c6..1bb9be4103 100644 --- a/src/cmd-action/cmd-mane.cpp +++ b/src/cmd-action/cmd-mane.cpp @@ -1052,7 +1052,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) max_cyber = 4; } for (k = 0; k < max_cyber; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_CYBER, mode); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_CYBER, mode); } break; } @@ -1063,7 +1063,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("仲間を召喚した。", "You summon help.")); for (k = 0; k < 1; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_NONE, (mode | u_mode)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_NONE, (mode | u_mode)); } break; } @@ -1074,7 +1074,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("モンスターを召喚した!", "You summon monsters!")); for (k = 0; k < 6; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_NONE, (mode | u_mode)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_NONE, (mode | u_mode)); } break; } @@ -1085,7 +1085,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("アリを召喚した。", "You summon ants.")); for (k = 0; k < 6; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_ANT, mode); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_ANT, mode); } break; } @@ -1096,7 +1096,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("蜘蛛を召喚した。", "You summon spiders.")); for (k = 0; k < 6; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_SPIDER, mode); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_SPIDER, mode); } break; } @@ -1107,7 +1107,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("ハウンドを召喚した。", "You summon hounds.")); for (k = 0; k < 4; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_HOUND, mode); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_HOUND, mode); } break; } @@ -1118,7 +1118,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("ヒドラを召喚した。", "You summon hydras.")); for (k = 0; k < 4; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_HYDRA, mode); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_HYDRA, mode); } break; } @@ -1129,7 +1129,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("天使を召喚した!", "You summon an angel!")); for (k = 0; k < 1; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_ANGEL, mode); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_ANGEL, mode); } break; } @@ -1140,7 +1140,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("混沌の宮廷から悪魔を召喚した!", "You summon a demon from the Courts of Chaos!")); for (k = 0; k < 1; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_DEMON, (mode | u_mode)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_DEMON, (mode | u_mode)); } break; } @@ -1151,7 +1151,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("アンデッドの強敵を召喚した!", "You summon an undead adversary!")); for (k = 0; k < 1; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_UNDEAD, (mode | u_mode)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_UNDEAD, (mode | u_mode)); } break; } @@ -1162,7 +1162,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("ドラゴンを召喚した!", "You summon a dragon!")); for (k = 0; k < 1; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_DRAGON, (mode | u_mode)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_DRAGON, (mode | u_mode)); } break; } @@ -1173,7 +1173,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("強力なアンデッドを召喚した!", "You summon greater undead!")); for (k = 0; k < 6; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode)); } break; } @@ -1184,7 +1184,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("古代ドラゴンを召喚した!", "You summon ancient dragons!")); for (k = 0; k < 4; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_HI_DRAGON, (mode | u_mode)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_HI_DRAGON, (mode | u_mode)); } break; } @@ -1195,7 +1195,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("アンバーの王族を召喚した!", "You summon Lords of Amber!")); for (k = 0; k < 4; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE)); } break; } @@ -1206,12 +1206,12 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("特別な強敵を召喚した!", "You summon special opponents!")); for (k = 0; k < 4; k++) { - if (summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE))) { + if (summon_specific(player_ptr, target_row, target_col, plev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE))) { count++; } } for (k = count; k < 4; k++) { - summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode)); + summon_specific(player_ptr, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode)); } break; } @@ -1222,7 +1222,7 @@ static bool use_mane(PlayerType *player_ptr, MonsterAbilityType spell) } msg_print(_("特別な強敵を蘇生した!", "You summon special dead opponents!")); for (auto k = 0; k < 4; k++) { - if (summon_specific(player_ptr, -1, target_row, target_col, plev, SUMMON_DEAD_UNIQUE, (mode | PM_ALLOW_UNIQUE | PM_CLONE))) { + if (summon_specific(player_ptr, target_row, target_col, plev, SUMMON_DEAD_UNIQUE, (mode | PM_ALLOW_UNIQUE | PM_CLONE))) { count++; } } diff --git a/src/cmd-item/cmd-usestaff.cpp b/src/cmd-item/cmd-usestaff.cpp index 3726ce0a5a..fd121b1936 100644 --- a/src/cmd-item/cmd-usestaff.cpp +++ b/src/cmd-item/cmd-usestaff.cpp @@ -90,7 +90,7 @@ int staff_effect(PlayerType *player_ptr, int sval, bool *use_charge, bool powerf case SV_STAFF_SUMMONING: { const int times = randint1(powerful ? 8 : 4); for (k = 0; k < times; k++) { - if (summon_specific(player_ptr, 0, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_NONE, + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET))) { ident = true; } diff --git a/src/grid/trap.cpp b/src/grid/trap.cpp index 5cb4d4db7b..194a31764f 100644 --- a/src/grid/trap.cpp +++ b/src/grid/trap.cpp @@ -441,7 +441,7 @@ void hit_trap(PlayerType *player_ptr, bool break_trap) msg_print(_("何かがピカッと光った!", "There is a flash of shimmering light!")); const auto num = 2 + randint1(3); for (auto i = 0; i < num; i++) { - (void)summon_specific(player_ptr, 0, p_pos.y, p_pos.x, player_ptr->current_floor_ptr->dun_level, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(player_ptr, p_pos.y, p_pos.x, player_ptr->current_floor_ptr->dun_level, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } if (player_ptr->current_floor_ptr->dun_level > randint1(100)) /* No nasty effect for low levels */ @@ -586,11 +586,11 @@ void hit_trap(PlayerType *player_ptr, bool break_trap) continue; } - if (auto m_idx = summon_specific(player_ptr, 0, y1, x1, lev, SUMMON_ARMAGE_EVIL, (PM_NO_PET))) { + if (auto m_idx = summon_specific(player_ptr, y1, x1, lev, SUMMON_ARMAGE_EVIL, (PM_NO_PET))) { evil_idx = *m_idx; } - if (auto m_idx = summon_specific(player_ptr, 0, y1, x1, lev, SUMMON_ARMAGE_GOOD, (PM_NO_PET))) { + if (auto m_idx = summon_specific(player_ptr, y1, x1, lev, SUMMON_ARMAGE_GOOD, (PM_NO_PET))) { good_idx = *m_idx; } @@ -618,7 +618,7 @@ void hit_trap(PlayerType *player_ptr, bool break_trap) /* Summon Piranhas */ const auto num = 1 + player_ptr->current_floor_ptr->dun_level / 20; for (auto i = 0; i < num; i++) { - (void)summon_specific(player_ptr, 0, p_pos.y, p_pos.x, player_ptr->current_floor_ptr->dun_level, SUMMON_PIRANHAS, (PM_ALLOW_GROUP | PM_NO_PET)); + (void)summon_specific(player_ptr, p_pos.y, p_pos.x, player_ptr->current_floor_ptr->dun_level, SUMMON_PIRANHAS, (PM_ALLOW_GROUP | PM_NO_PET)); } break; } diff --git a/src/inventory/inventory-curse.cpp b/src/inventory/inventory-curse.cpp index 839b2f525d..78a12d644a 100644 --- a/src/inventory/inventory-curse.cpp +++ b/src/inventory/inventory-curse.cpp @@ -331,7 +331,7 @@ static void curse_call_monster(PlayerType *player_ptr) const int obj_desc_type = OD_OMIT_PREFIX | OD_NAME_ONLY; auto *floor_ptr = player_ptr->current_floor_ptr; if (player_ptr->cursed.has(CurseTraitType::CALL_ANIMAL) && one_in_(2500)) { - if (summon_specific(player_ptr, 0, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_ANIMAL, call_type)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_ANIMAL, call_type)) { const auto item_name = describe_flavor(player_ptr, choose_cursed_obj_name(player_ptr, CurseTraitType::CALL_ANIMAL), obj_desc_type); msg_format(_("%sが動物を引き寄せた!", "Your %s has attracted an animal!"), item_name.data()); disturb(player_ptr, false, true); @@ -339,7 +339,7 @@ static void curse_call_monster(PlayerType *player_ptr) } if (player_ptr->cursed.has(CurseTraitType::CALL_DEMON) && one_in_(1111)) { - if (summon_specific(player_ptr, 0, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_DEMON, call_type)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_DEMON, call_type)) { const auto item_name = describe_flavor(player_ptr, choose_cursed_obj_name(player_ptr, CurseTraitType::CALL_DEMON), obj_desc_type); msg_format(_("%sが悪魔を引き寄せた!", "Your %s has attracted a demon!"), item_name.data()); disturb(player_ptr, false, true); @@ -347,7 +347,7 @@ static void curse_call_monster(PlayerType *player_ptr) } if (player_ptr->cursed.has(CurseTraitType::CALL_DRAGON) && one_in_(800)) { - if (summon_specific(player_ptr, 0, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_DRAGON, call_type)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_DRAGON, call_type)) { const auto item_name = describe_flavor(player_ptr, choose_cursed_obj_name(player_ptr, CurseTraitType::CALL_DRAGON), obj_desc_type); msg_format(_("%sがドラゴンを引き寄せた!", "Your %s has attracted a dragon!"), item_name.data()); disturb(player_ptr, false, true); @@ -355,7 +355,7 @@ static void curse_call_monster(PlayerType *player_ptr) } if (player_ptr->cursed.has(CurseTraitType::CALL_UNDEAD) && one_in_(1111)) { - if (summon_specific(player_ptr, 0, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_UNDEAD, call_type)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_UNDEAD, call_type)) { const auto item_name = describe_flavor(player_ptr, choose_cursed_obj_name(player_ptr, CurseTraitType::CALL_UNDEAD), obj_desc_type); msg_format(_("%sが死霊を引き寄せた!", "Your %s has attracted an undead!"), item_name.data()); disturb(player_ptr, false, true); diff --git a/src/main-win/main-win-exception.cpp b/src/main-win/main-win-exception.cpp index f0eedc1750..90d929c7cd 100644 --- a/src/main-win/main-win-exception.cpp +++ b/src/main-win/main-win-exception.cpp @@ -1,4 +1,5 @@ #include "main-win/main-win-exception.h" +#include "locale/japanese.h" #include "main-win/main-win-utils.h" #include "net/report-error.h" #include @@ -15,7 +16,13 @@ void handle_unexpected_exception(const std::exception &e) { constexpr auto caption = _(L"予期しないエラー!", L"Unexpected error!"); - const std::string msg = e.what(); + std::string msg = e.what(); +#ifdef JP + // 例外メッセージがUTF-8の場合一旦SJISに変換する(SJISの場合はそのまま) + const auto msg_len = guess_convert_to_system_encoding(msg.data(), msg.size()); + msg.erase(msg_len); +#endif + const auto first_line = msg.substr(0, msg.find('\n')); #if !defined(DISABLE_NET) diff --git a/src/mind/mind-force-trainer.cpp b/src/mind/mind-force-trainer.cpp index 2a3853a200..7e581e5118 100644 --- a/src/mind/mind-force-trainer.cpp +++ b/src/mind/mind-force-trainer.cpp @@ -345,7 +345,7 @@ bool cast_force_spell(PlayerType *player_ptr, MindForceTrainerType spell) case MindForceTrainerType::SUMMON_GHOST: { bool success = false; for (int i = 0; i < 1 + boost / 100; i++) { - if (summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, plev, SUMMON_PHANTOM, PM_FORCE_PET)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, plev, SUMMON_PHANTOM, PM_FORCE_PET)) { success = true; } } diff --git a/src/monster-floor/monster-generator.cpp b/src/monster-floor/monster-generator.cpp index b42e674179..7ce2601e0c 100644 --- a/src/monster-floor/monster-generator.cpp +++ b/src/monster-floor/monster-generator.cpp @@ -436,7 +436,7 @@ bool alloc_horde(PlayerType *player_ptr, POSITION y, POSITION x, summon_specific POSITION cx = x; for (auto attempts = randint1(10) + 5; attempts > 0; attempts--) { scatter(player_ptr, &cy, &cx, y, x, 5, PROJECT_NONE); - (void)(*summon_specific)(player_ptr, m_idx, cy, cx, floor.dun_level + 5, SUMMON_KIN, PM_ALLOW_GROUP); + (void)(*summon_specific)(player_ptr, cy, cx, floor.dun_level + 5, SUMMON_KIN, PM_ALLOW_GROUP, m_idx); y = cy; x = cx; } diff --git a/src/monster-floor/monster-generator.h b/src/monster-floor/monster-generator.h index 1317e799d5..e943d69008 100644 --- a/src/monster-floor/monster-generator.h +++ b/src/monster-floor/monster-generator.h @@ -6,7 +6,7 @@ enum summon_type : int; enum class MonsterRaceId : int16_t; class PlayerType; -using summon_specific_pf = std::optional(PlayerType *, MONSTER_IDX, POSITION, POSITION, DEPTH, summon_type, BIT_FLAGS); +using summon_specific_pf = std::optional(PlayerType *, POSITION, POSITION, DEPTH, summon_type, BIT_FLAGS, std::optional); bool mon_scatter(PlayerType *player_ptr, MonsterRaceId r_idx, POSITION *yp, POSITION *xp, POSITION y, POSITION x, POSITION max_dist); std::optional multiply_monster(PlayerType *player_ptr, MONSTER_IDX m_idx, bool clone, BIT_FLAGS mode); diff --git a/src/monster-floor/monster-summon.cpp b/src/monster-floor/monster-summon.cpp index 1aa04038e8..6affee52f1 100644 --- a/src/monster-floor/monster-summon.cpp +++ b/src/monster-floor/monster-summon.cpp @@ -22,12 +22,12 @@ /*! * @brief モンスターが召喚の基本条件に合っているかをチェックする / Hack -- help decide if a monster race is "okay" to summon * @param r_idx チェックするモンスター種族ID - * @param summon_who 召喚主のモンスター情報ID * @param type 召喚種別 - * @param is_unique_allowed ユニークモンスターを召喚対象に含めるかどうか + * @param mode 生成オプション + * @param summoner_m_idx モンスターの召喚による場合、召喚者のモンスターID * @return 召喚対象にできるならばTRUE */ -static bool summon_specific_okay(PlayerType *player_ptr, MonsterRaceId r_idx, MONSTER_IDX summon_who, summon_type type, bool is_unique_allowed) +static bool summon_specific_okay(PlayerType *player_ptr, MonsterRaceId r_idx, summon_type type, BIT_FLAGS mode, std::optional summoner_m_idx) { auto *r_ptr = &monraces_info[r_idx]; if (!mon_hook_dungeon(player_ptr, r_idx)) { @@ -35,18 +35,18 @@ static bool summon_specific_okay(PlayerType *player_ptr, MonsterRaceId r_idx, MO } auto &floor = *player_ptr->current_floor_ptr; - if (summon_who > 0) { - auto *m_ptr = &floor.m_list[summon_who]; + if (summoner_m_idx) { + auto *m_ptr = &floor.m_list[*summoner_m_idx]; if (monster_has_hostile_align(player_ptr, m_ptr, 0, 0, r_ptr)) { return false; } - } else if (summon_who < 0) { + } else if (any_bits(mode, PM_FORCE_PET)) { if (monster_has_hostile_align(player_ptr, nullptr, 10, -10, r_ptr) && !one_in_(std::abs(player_ptr->alignment) / 2 + 1)) { return false; } } - if (!is_unique_allowed && (r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || (r_ptr->population_flags.has(MonsterPopulationType::NAZGUL)))) { + if (none_bits(mode, PM_ALLOW_UNIQUE) && (r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || (r_ptr->population_flags.has(MonsterPopulationType::NAZGUL)))) { return false; } @@ -55,7 +55,7 @@ static bool summon_specific_okay(PlayerType *player_ptr, MonsterRaceId r_idx, MO } const auto is_like_unique = r_ptr->kind_flags.has(MonsterKindType::UNIQUE) || (r_ptr->population_flags.has(MonsterPopulationType::NAZGUL)); - if ((summon_who < 0) && is_like_unique && monster_has_hostile_align(player_ptr, nullptr, 10, -10, r_ptr)) { + if (any_bits(mode, PM_FORCE_PET) && is_like_unique && monster_has_hostile_align(player_ptr, nullptr, 10, -10, r_ptr)) { return false; } @@ -63,8 +63,8 @@ static bool summon_specific_okay(PlayerType *player_ptr, MonsterRaceId r_idx, MO return true; } - if (summon_who > 0) { - auto *m_ptr = &floor.m_list[summon_who]; + if (summoner_m_idx) { + auto *m_ptr = &floor.m_list[*summoner_m_idx]; return check_summon_specific(player_ptr, m_ptr->r_idx, r_idx, type); } else { return check_summon_specific(player_ptr, MonsterRaceId::PLAYER, r_idx, type); @@ -105,15 +105,15 @@ DEPTH get_dungeon_or_wilderness_level(PlayerType *player_ptr) /*! * @brief モンスターを召喚により配置する / Place a monster (of the specified "type") near the given location. Return TRUE if a monster was actually summoned. * @param player_ptr プレイヤーへの参照ポインタ - * @param src_idx 召喚主のモンスター情報ID * @param y1 目標地点y座標 * @param x1 目標地点x座標 * @param lev 相当生成階 * @param type 召喚種別 * @param mode 生成オプション + * @param summoner_m_idx モンスターの召喚による場合、召喚者のモンスターID * @return 召喚に成功したらモンスターID、失敗したらstd::nullopt */ -std::optional summon_specific(PlayerType *player_ptr, MONSTER_IDX src_idx, POSITION y1, POSITION x1, DEPTH lev, summon_type type, BIT_FLAGS mode) +std::optional summon_specific(PlayerType *player_ptr, POSITION y1, POSITION x1, DEPTH lev, summon_type type, BIT_FLAGS mode, std::optional summoner_m_idx) { auto *floor_ptr = player_ptr->current_floor_ptr; if (floor_ptr->inside_arena) { @@ -125,8 +125,8 @@ std::optional summon_specific(PlayerType *player_ptr, MONSTER_IDX s return std::nullopt; } - auto summon_specific_hook = [src_idx, type, is_unique_allowed = (mode & PM_ALLOW_UNIQUE) != 0](PlayerType *player_ptr, MonsterRaceId r_idx) { - return summon_specific_okay(player_ptr, r_idx, src_idx, type, is_unique_allowed); + auto summon_specific_hook = [type, mode, summoner_m_idx](PlayerType *player_ptr, MonsterRaceId r_idx) { + return summon_specific_okay(player_ptr, r_idx, type, mode, summoner_m_idx); }; get_mon_num_prep(player_ptr, std::move(summon_specific_hook), get_monster_hook2(player_ptr, y, x), type); @@ -140,17 +140,16 @@ std::optional summon_specific(PlayerType *player_ptr, MONSTER_IDX s mode |= PM_NO_KAGE; } - const auto summon_who = is_monster(src_idx) ? std::make_optional(src_idx) : std::nullopt; - auto summoned_m_idx = place_specific_monster(player_ptr, src_idx, y, x, r_idx, mode, summon_who); + auto summoned_m_idx = place_specific_monster(player_ptr, summoner_m_idx.value_or(0), y, x, r_idx, mode, summoner_m_idx); if (!summoned_m_idx) { return std::nullopt; } bool notice = false; - if (!is_monster(src_idx)) { + if (!summoner_m_idx) { notice = true; } else { - auto *m_ptr = &player_ptr->current_floor_ptr->m_list[src_idx]; + auto *m_ptr = &player_ptr->current_floor_ptr->m_list[*summoner_m_idx]; if (m_ptr->is_pet()) { notice = true; } else if (is_seen(player_ptr, m_ptr)) { diff --git a/src/monster-floor/monster-summon.h b/src/monster-floor/monster-summon.h index 8eb27d5772..95a5d1ffcd 100644 --- a/src/monster-floor/monster-summon.h +++ b/src/monster-floor/monster-summon.h @@ -1,9 +1,10 @@ #pragma once #include "system/angband.h" +#include enum summon_type : int; enum class MonsterRaceId : int16_t; class PlayerType; -std::optional summon_specific(PlayerType *player_ptr, MONSTER_IDX src_idx, POSITION y1, POSITION x1, DEPTH lev, summon_type type, BIT_FLAGS mode); +std::optional summon_specific(PlayerType *player_ptr, POSITION y1, POSITION x1, DEPTH lev, summon_type type, BIT_FLAGS mode, std::optional summoner_m_idx = std::nullopt); std::optional summon_named_creature(PlayerType *player_ptr, MONSTER_IDX src_idx, POSITION oy, POSITION ox, MonsterRaceId r_idx, BIT_FLAGS mode); diff --git a/src/monster-floor/special-death-switcher.cpp b/src/monster-floor/special-death-switcher.cpp index 80b1ea8a64..f06ad4ba9c 100644 --- a/src/monster-floor/special-death-switcher.cpp +++ b/src/monster-floor/special-death-switcher.cpp @@ -79,7 +79,6 @@ static void summon_self(PlayerType *player_ptr, MonsterDeath *md_ptr, summon_typ POSITION wy = md_ptr->md_y; POSITION wx = md_ptr->md_x; int attempts = 100; - bool pet = md_ptr->m_ptr->is_pet(); do { scatter(player_ptr, &wy, &wx, md_ptr->md_y, md_ptr->md_x, radius, PROJECT_NONE); } while (!(in_bounds(floor_ptr, wy, wx) && is_cave_empty_bold2(player_ptr, wy, wx)) && --attempts); @@ -89,7 +88,7 @@ static void summon_self(PlayerType *player_ptr, MonsterDeath *md_ptr, summon_typ } BIT_FLAGS mode = dead_mode(md_ptr); - if (summon_specific(player_ptr, (pet ? -1 : md_ptr->m_idx), wy, wx, 100, type, mode) && player_can_see_bold(player_ptr, wy, wx)) { + if (summon_specific(player_ptr, wy, wx, 100, type, mode) && player_can_see_bold(player_ptr, wy, wx)) { msg_print(message); } } @@ -105,9 +104,8 @@ static void on_dead_pink_horror(PlayerType *player_ptr, MonsterDeath *md_ptr) for (int i = 0; i < blue_horrors; i++) { POSITION wy = md_ptr->md_y; POSITION wx = md_ptr->md_x; - bool pet = md_ptr->m_ptr->is_pet(); BIT_FLAGS mode = dead_mode(md_ptr); - if (summon_specific(player_ptr, (pet ? -1 : md_ptr->m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode) && player_can_see_bold(player_ptr, wy, wx)) { + if (summon_specific(player_ptr, wy, wx, 100, SUMMON_BLUE_HORROR, mode) && player_can_see_bold(player_ptr, wy, wx)) { notice = true; } } diff --git a/src/monster/monster-processor.cpp b/src/monster/monster-processor.cpp index 4873b41fa9..dd4a9ff0fc 100644 --- a/src/monster/monster-processor.cpp +++ b/src/monster/monster-processor.cpp @@ -454,7 +454,7 @@ void process_special(PlayerType *player_ptr, MONSTER_IDX m_idx) BIT_FLAGS p_mode = m_ptr->is_pet() ? PM_FORCE_PET : PM_NONE; for (int k = 0; k < A_MAX; k++) { - if (auto summoned_m_idx = summon_specific(player_ptr, m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_MOLD, (PM_ALLOW_GROUP | p_mode))) { + if (auto summoned_m_idx = summon_specific(player_ptr, m_ptr->fy, m_ptr->fx, rlev, SUMMON_MOLD, (PM_ALLOW_GROUP | p_mode), m_idx)) { if (player_ptr->current_floor_ptr->m_list[*summoned_m_idx].ml) { count++; } diff --git a/src/mspell/mspell-summon.cpp b/src/mspell/mspell-summon.cpp index 2cb6863d10..0a61c5141e 100644 --- a/src/mspell/mspell-summon.cpp +++ b/src/mspell/mspell-summon.cpp @@ -76,7 +76,7 @@ static MONSTER_NUMBER summon_Kin(PlayerType *player_ptr, POSITION y, POSITION x, { int count = 0; for (int k = 0; k < 4; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_KIN, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_KIN, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } return count; @@ -251,9 +251,9 @@ MonsterSpellResult spell_RF6_S_CYBER(PlayerType *player_ptr, POSITION y, POSITIO int count = 0; if (m_ptr->is_friendly() && mon_to_mon) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP), m_idx) ? 1 : 0; } else { - count += summon_cyber(player_ptr, m_idx, y, x); + count += summon_cyber(player_ptr, y, x, m_idx); } if (player_ptr->effects()->blindness().is_blind() && count && mon_to_player) { @@ -299,11 +299,11 @@ MonsterSpellResult spell_RF6_S_MONSTER(PlayerType *player_ptr, POSITION y, POSIT int count = 0; for (int k = 0; k < 1; k++) { if (mon_to_player) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } if (mon_to_mon) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_NONE, (monster_u_mode(floor_ptr, m_idx))) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_NONE, (monster_u_mode(floor_ptr, m_idx)), m_idx) ? 1 : 0; } } @@ -350,11 +350,11 @@ MonsterSpellResult spell_RF6_S_MONSTERS(PlayerType *player_ptr, POSITION y, POSI int count = 0; for (auto k = 0; k < S_NUM_6; k++) { if (mon_to_player) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } if (mon_to_mon) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | monster_u_mode(floor_ptr, m_idx))) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | monster_u_mode(floor_ptr, m_idx)), m_idx) ? 1 : 0; } } @@ -400,7 +400,7 @@ MonsterSpellResult spell_RF6_S_ANT(PlayerType *player_ptr, POSITION y, POSITION int count = 0; for (auto k = 0; k < S_NUM_6; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count && mon_to_player) { @@ -445,7 +445,7 @@ MonsterSpellResult spell_RF6_S_SPIDER(PlayerType *player_ptr, POSITION y, POSITI int count = 0; for (auto k = 0; k < S_NUM_6; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count && mon_to_player) { @@ -490,7 +490,7 @@ MonsterSpellResult spell_RF6_S_HOUND(PlayerType *player_ptr, POSITION y, POSITIO int count = 0; for (auto k = 0; k < S_NUM_4; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count && mon_to_player) { @@ -535,7 +535,7 @@ MonsterSpellResult spell_RF6_S_HYDRA(PlayerType *player_ptr, POSITION y, POSITIO int count = 0; for (auto k = 0; k < S_NUM_4; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count && mon_to_player) { @@ -586,7 +586,7 @@ MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITIO int count = 0; for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } const auto is_blind = player_ptr->effects()->blindness().is_blind(); @@ -638,7 +638,7 @@ MonsterSpellResult spell_RF6_S_DEMON(PlayerType *player_ptr, POSITION y, POSITIO int count = 0; for (int k = 0; k < 1; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count) { @@ -683,7 +683,7 @@ MonsterSpellResult spell_RF6_S_UNDEAD(PlayerType *player_ptr, POSITION y, POSITI int count = 0; for (int k = 0; k < 1; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count) { @@ -728,11 +728,11 @@ MonsterSpellResult spell_RF6_S_DRAGON(PlayerType *player_ptr, POSITION y, POSITI int count = 0; if (mon_to_player) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } if (mon_to_mon) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP | monster_u_mode(floor_ptr, m_idx))) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP | monster_u_mode(floor_ptr, m_idx)), m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count) { @@ -784,11 +784,11 @@ MonsterSpellResult spell_RF6_S_HI_UNDEAD(PlayerType *player_ptr, POSITION y, POS for (auto k = 0; k < S_NUM_6; k++) { if (mon_to_player) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } if (mon_to_mon) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | monster_u_mode(floor_ptr, m_idx))) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | monster_u_mode(floor_ptr, m_idx)), m_idx) ? 1 : 0; } } } @@ -837,11 +837,11 @@ MonsterSpellResult spell_RF6_S_HI_DRAGON(PlayerType *player_ptr, POSITION y, POS int count = 0; for (auto k = 0; k < S_NUM_4; k++) { if (mon_to_player) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } if (mon_to_mon) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | monster_u_mode(floor_ptr, m_idx))) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | monster_u_mode(floor_ptr, m_idx)), m_idx) ? 1 : 0; } } @@ -888,7 +888,7 @@ MonsterSpellResult spell_RF6_S_AMBERITES(PlayerType *player_ptr, POSITION y, POS int count = 0; for (auto k = 0; k < S_NUM_4; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count && mon_to_player) { @@ -936,7 +936,7 @@ MonsterSpellResult spell_RF6_S_UNIQUE(PlayerType *player_ptr, POSITION y, POSITI bool uniques_are_summoned = false; int count = 0; for (auto k = 0; k < S_NUM_4; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } if (count) { @@ -951,7 +951,7 @@ MonsterSpellResult spell_RF6_S_UNIQUE(PlayerType *player_ptr, POSITION y, POSITI } for (auto k = count; k < S_NUM_4; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count && mon_to_player) { @@ -998,7 +998,7 @@ MonsterSpellResult spell_RF6_S_DEAD_UNIQUE(PlayerType *player_ptr, POSITION y, P auto count = 0; for (auto k = 0; k < S_NUM_4; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_DEAD_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_CLONE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_DEAD_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_CLONE), m_idx) ? 1 : 0; } if (player_ptr->effects()->blindness().is_blind() && count && mon_to_player) { diff --git a/src/mspell/specified-summon.cpp b/src/mspell/specified-summon.cpp index fb849de5df..fddb3c5ab6 100644 --- a/src/mspell/specified-summon.cpp +++ b/src/mspell/specified-summon.cpp @@ -30,7 +30,7 @@ MONSTER_NUMBER summon_EAGLE(PlayerType *player_ptr, POSITION y, POSITION x, int int count = 0; int num = 4 + randint1(3); for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_EAGLES, PM_ALLOW_GROUP | PM_ALLOW_UNIQUE) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_EAGLES, PM_ALLOW_GROUP | PM_ALLOW_UNIQUE, m_idx) ? 1 : 0; } return count; @@ -88,7 +88,7 @@ MONSTER_NUMBER summon_guardian(PlayerType *player_ptr, POSITION y, POSITION x, i int count = 0; for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), m_idx) ? 1 : 0; } return count; @@ -127,7 +127,7 @@ MONSTER_NUMBER summon_LOUSE(PlayerType *player_ptr, POSITION y, POSITION x, int int count = 0; int num = 2 + randint1(3); for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_LOUSE, PM_ALLOW_GROUP) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_LOUSE, PM_ALLOW_GROUP, m_idx) ? 1 : 0; } return count; @@ -138,7 +138,7 @@ MONSTER_NUMBER summon_MOAI(PlayerType *player_ptr, POSITION y, POSITION x, int r int count = 0; int num = 3 + randint1(3); for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_SMALL_MOAI, PM_NONE) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_SMALL_MOAI, PM_NONE, m_idx) ? 1 : 0; } return count; @@ -234,7 +234,7 @@ MONSTER_NUMBER summon_APOCRYPHA(PlayerType *player_ptr, POSITION y, POSITION x, int num = 4 + randint1(4); summon_type followers = one_in_(2) ? SUMMON_APOCRYPHA_FOLLOWERS : SUMMON_APOCRYPHA_DRAGONS; for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, 200, followers, PM_ALLOW_UNIQUE) ? 1 : 0; + count += summon_specific(player_ptr, y, x, 200, followers, PM_ALLOW_UNIQUE, m_idx) ? 1 : 0; } return count; @@ -245,7 +245,7 @@ MONSTER_NUMBER summon_HIGHEST_DRAGON(PlayerType *player_ptr, POSITION y, POSITIO int count = 0; int num = 4 + randint1(4); for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, 100, SUMMON_APOCRYPHA_DRAGONS, PM_ALLOW_UNIQUE) ? 1 : 0; + count += summon_specific(player_ptr, y, x, 100, SUMMON_APOCRYPHA_DRAGONS, PM_ALLOW_UNIQUE, m_idx) ? 1 : 0; } return count; @@ -256,7 +256,7 @@ MONSTER_NUMBER summon_PYRAMID(PlayerType *player_ptr, POSITION y, POSITION x, in int count = 0; int num = 2 + randint1(3); for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_PYRAMID, PM_NONE) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_PYRAMID, PM_NONE, m_idx) ? 1 : 0; } return count; @@ -278,7 +278,7 @@ MONSTER_NUMBER summon_VESPOID(PlayerType *player_ptr, POSITION y, POSITION x, in int count = 0; int num = 2 + randint1(3); for (int k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_VESPOID, PM_NONE) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_VESPOID, PM_NONE, m_idx) ? 1 : 0; } return count; @@ -289,7 +289,7 @@ MONSTER_NUMBER summon_THUNDERS(PlayerType *player_ptr, POSITION y, POSITION x, i auto count = (MONSTER_NUMBER)0; auto num = 11; for (auto k = 0; k < num; k++) { - count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_ANTI_TIGERS, PM_NONE) ? 1 : 0; + count += summon_specific(player_ptr, y, x, rlev, SUMMON_ANTI_TIGERS, PM_NONE, m_idx) ? 1 : 0; } return count; diff --git a/src/mutation/mutation-processor.cpp b/src/mutation/mutation-processor.cpp index bb529212a7..b1c3858eba 100644 --- a/src/mutation/mutation-processor.cpp +++ b/src/mutation/mutation-processor.cpp @@ -222,7 +222,7 @@ void process_world_aux_mutation(PlayerType *player_ptr) mode |= (PM_ALLOW_UNIQUE | PM_NO_PET); } - if (summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_DEMON, mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_DEMON, mode)) { msg_print(_("あなたはデーモンを引き寄せた!", "You have attracted a demon!")); disturb(player_ptr, false, true); } @@ -301,7 +301,7 @@ void process_world_aux_mutation(PlayerType *player_ptr) mode |= (PM_ALLOW_UNIQUE | PM_NO_PET); } - if (summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_ANIMAL, mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_ANIMAL, mode)) { msg_print(_("動物を引き寄せた!", "You have attracted an animal!")); disturb(player_ptr, false, true); } @@ -388,7 +388,7 @@ void process_world_aux_mutation(PlayerType *player_ptr) mode |= (PM_ALLOW_UNIQUE | PM_NO_PET); } - if (summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_DRAGON, mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_DRAGON, mode)) { msg_print(_("ドラゴンを引き寄せた!", "You have attracted a dragon!")); disturb(player_ptr, false, true); } diff --git a/src/object-activation/activation-switcher.cpp b/src/object-activation/activation-switcher.cpp index 488b2ae424..4fb63bf428 100644 --- a/src/object-activation/activation-switcher.cpp +++ b/src/object-activation/activation-switcher.cpp @@ -163,11 +163,11 @@ bool switch_activation(PlayerType *player_ptr, ItemEntity **o_ptr_ptr, const Ran case RandomArtActType::CHARM_OTHERS: return activate_charm_others(player_ptr); case RandomArtActType::SUMMON_ANIMAL: - (void)summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, player_ptr->lev, SUMMON_ANIMAL_RANGER, PM_ALLOW_GROUP | PM_FORCE_PET); + (void)summon_specific(player_ptr, player_ptr->y, player_ptr->x, player_ptr->lev, SUMMON_ANIMAL_RANGER, PM_ALLOW_GROUP | PM_FORCE_PET); return true; case RandomArtActType::SUMMON_PHANTOM: msg_print(_("幻霊を召喚した。", "You summon a phantasmal servant.")); - (void)summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_PHANTOM, PM_ALLOW_GROUP | PM_FORCE_PET); + (void)summon_specific(player_ptr, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_PHANTOM, PM_ALLOW_GROUP | PM_FORCE_PET); return true; case RandomArtActType::SUMMON_ELEMENTAL: return cast_summon_elemental(player_ptr, (player_ptr->lev * 3) / 2); @@ -180,7 +180,7 @@ bool switch_activation(PlayerType *player_ptr, ItemEntity **o_ptr_ptr, const Ran return cast_summon_hound(player_ptr, (player_ptr->lev * 3) / 2); case RandomArtActType::SUMMON_DAWN: msg_print(_("暁の師団を召喚した。", "You summon the Legion of the Dawn.")); - (void)summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_DAWN, PM_ALLOW_GROUP | PM_FORCE_PET); + (void)summon_specific(player_ptr, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_DAWN, PM_ALLOW_GROUP | PM_FORCE_PET); return true; case RandomArtActType::SUMMON_OCTOPUS: return cast_summon_octopus(player_ptr); diff --git a/src/object-use/read/scroll-read-executor.cpp b/src/object-use/read/scroll-read-executor.cpp index 3719f4ef88..c2814bb1c2 100644 --- a/src/object-use/read/scroll-read-executor.cpp +++ b/src/object-use/read/scroll-read-executor.cpp @@ -100,7 +100,7 @@ bool ScrollReadExecutor::read() } case SV_SCROLL_SUMMON_MONSTER: for (auto k = 0; k < randint1(3); k++) { - if (summon_specific(this->player_ptr, 0, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, + if (summon_specific(this->player_ptr, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)) { this->ident = true; } @@ -109,7 +109,7 @@ bool ScrollReadExecutor::read() break; case SV_SCROLL_SUMMON_UNDEAD: for (auto k = 0; k < randint1(3); k++) { - if (summon_specific(this->player_ptr, 0, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_UNDEAD, + if (summon_specific(this->player_ptr, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_UNDEAD, PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)) { this->ident = true; } @@ -118,7 +118,7 @@ bool ScrollReadExecutor::read() break; case SV_SCROLL_SUMMON_PET: if (summon_specific( - this->player_ptr, -1, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, PM_ALLOW_GROUP | PM_FORCE_PET)) { + this->player_ptr, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, PM_ALLOW_GROUP | PM_FORCE_PET)) { this->ident = true; } diff --git a/src/player/patron.cpp b/src/player/patron.cpp index 7e36b818dd..3b388016dd 100644 --- a/src/player/patron.cpp +++ b/src/player/patron.cpp @@ -251,7 +251,7 @@ void Patron::gain_level_reward(PlayerType *player_ptr_, int chosen_reward) msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), this->name.data()); msg_print(_("「我が下僕たちよ、かの傲慢なる者を倒すべし!」", "'My pets, destroy the arrogant mortal!'")); for (int i = 0, summon_num = randint1(5) + 1; i < summon_num; i++) { - (void)summon_specific(this->player_ptr, 0, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, + (void)summon_specific(this->player_ptr, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } @@ -469,7 +469,7 @@ void Patron::gain_level_reward(PlayerType *player_ptr_, int chosen_reward) break; case REW_SER_DEMO: msg_format(_("%sは褒美として悪魔の使いをよこした!", "%s rewards you with a demonic servant!"), this->name.data()); - if (!summon_specific(this->player_ptr, -1, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_DEMON, PM_FORCE_PET)) { + if (!summon_specific(this->player_ptr, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_DEMON, PM_FORCE_PET)) { msg_print(_("何も現れなかった...", "Nobody ever turns up...")); } else { reward = _("悪魔がペットになった。", "a demonic servant"); @@ -478,7 +478,7 @@ void Patron::gain_level_reward(PlayerType *player_ptr_, int chosen_reward) break; case REW_SER_MONS: msg_format(_("%sは褒美として使いをよこした!", "%s rewards you with a servant!"), this->name.data()); - if (!summon_specific(this->player_ptr, -1, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, PM_FORCE_PET)) { + if (!summon_specific(this->player_ptr, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, PM_FORCE_PET)) { msg_print(_("何も現れなかった...", "Nobody ever turns up...")); } else { reward = _("モンスターがペットになった。", "a servant"); @@ -487,7 +487,7 @@ void Patron::gain_level_reward(PlayerType *player_ptr_, int chosen_reward) break; case REW_SER_UNDE: msg_format(_("%sは褒美としてアンデッドの使いをよこした。", "%s rewards you with an undead servant!"), this->name.data()); - if (!summon_specific(this->player_ptr, -1, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_UNDEAD, PM_FORCE_PET)) { + if (!summon_specific(this->player_ptr, this->player_ptr->y, this->player_ptr->x, floor_ptr->dun_level, SUMMON_UNDEAD, PM_FORCE_PET)) { msg_print(_("何も現れなかった...", "Nobody ever turns up...")); } else { reward = _("アンデッドがペットになった。", "an undead servant"); diff --git a/src/realm/realm-arcane.cpp b/src/realm/realm-arcane.cpp index 7b71c59912..055ccb569c 100644 --- a/src/realm/realm-arcane.cpp +++ b/src/realm/realm-arcane.cpp @@ -341,7 +341,7 @@ std::optional do_arcane_spell(PlayerType *player_ptr, SPELL_IDX spe case 25: { if (cast) { - if (!summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET))) { + if (!summon_specific(player_ptr, player_ptr->y, player_ptr->x, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET))) { msg_print(_("エレメンタルは現れなかった。", "No elementals arrive.")); } } diff --git a/src/realm/realm-craft.cpp b/src/realm/realm-craft.cpp index c329da44f2..a24a936042 100644 --- a/src/realm/realm-craft.cpp +++ b/src/realm/realm-craft.cpp @@ -294,7 +294,7 @@ std::optional do_craft_spell(PlayerType *player_ptr, SPELL_IDX spel case 22: { if (cast) { - if (summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET)) { msg_print(_("ゴーレムを作った。", "You make a golem.")); } else { msg_print(_("うまくゴーレムを作れなかった。", "You couldn't make a golem.")); diff --git a/src/realm/realm-crusade.cpp b/src/realm/realm-crusade.cpp index f1ac9ef38e..4b70b37f19 100644 --- a/src/realm/realm-crusade.cpp +++ b/src/realm/realm-crusade.cpp @@ -350,7 +350,7 @@ std::optional do_crusade_spell(PlayerType *player_ptr, SPELL_IDX sp flg |= PM_ALLOW_GROUP; } - if (summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg)) { if (pet) { msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'")); } else { @@ -471,7 +471,7 @@ std::optional do_crusade_spell(PlayerType *player_ptr, SPELL_IDX sp continue; } - summon_specific(player_ptr, -1, my, mx, plev, SUMMON_KNIGHTS, PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE); + summon_specific(player_ptr, my, mx, plev, SUMMON_KNIGHTS, PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE); } set_hero(player_ptr, randint1(base) + base, false); diff --git a/src/realm/realm-demon.cpp b/src/realm/realm-demon.cpp index 75d838397f..9cddd8ecfa 100644 --- a/src/realm/realm-demon.cpp +++ b/src/realm/realm-demon.cpp @@ -118,7 +118,7 @@ std::optional do_daemon_spell(PlayerType *player_ptr, SPELL_IDX spe case 5: { if (cast) { - if (!summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET))) { + if (!summon_specific(player_ptr, player_ptr->y, player_ptr->x, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET))) { msg_print(_("古代の死霊は現れなかった。", "No Manes arrive.")); } } diff --git a/src/realm/realm-nature.cpp b/src/realm/realm-nature.cpp index e12f004741..df40ad0d92 100644 --- a/src/realm/realm-nature.cpp +++ b/src/realm/realm-nature.cpp @@ -268,7 +268,7 @@ std::optional do_nature_spell(PlayerType *player_ptr, SPELL_IDX spe case 14: { if (cast) { - if (!(summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET)))) { + if (!(summon_specific(player_ptr, player_ptr->y, player_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET)))) { msg_print(_("動物は現れなかった。", "No animals arrive.")); } break; diff --git a/src/specific-object/chest.cpp b/src/specific-object/chest.cpp index abbf317fe7..672aa6e4e7 100644 --- a/src/specific-object/chest.cpp +++ b/src/specific-object/chest.cpp @@ -180,7 +180,7 @@ void Chest::fire_trap(const Pos2D &pos, short item_idx) if (randint1(100) < this->player_ptr->current_floor_ptr->dun_level) { activate_hi_summon(this->player_ptr, this->player_ptr->y, this->player_ptr->x, false); } else { - (void)summon_specific(this->player_ptr, 0, pos.y, pos.x, mon_level, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(this->player_ptr, pos.y, pos.x, mon_level, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } } } @@ -189,7 +189,7 @@ void Chest::fire_trap(const Pos2D &pos, short item_idx) if (trap.has(ChestTrapType::E_SUMMON)) { msg_print(_("宝を守るためにエレメンタルが現れた!", "Elemental beings appear to protect their treasures!")); for (auto i = 0; i < randint1(3) + 5; i++) { - (void)summon_specific(this->player_ptr, 0, pos.y, pos.x, mon_level, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(this->player_ptr, pos.y, pos.x, mon_level, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } } @@ -202,7 +202,7 @@ void Chest::fire_trap(const Pos2D &pos, short item_idx) } for (auto i = 0; i < randint1(5) + o_ptr->pval / 5; i++) { - (void)summon_specific(this->player_ptr, 0, pos.y, pos.x, mon_level, SUMMON_BIRD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(this->player_ptr, pos.y, pos.x, mon_level, SUMMON_BIRD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } } @@ -213,7 +213,7 @@ void Chest::fire_trap(const Pos2D &pos, short item_idx) msg_print(_("炎と硫黄の雲の中に悪魔が姿を現した!", "Demons materialize in clouds of fire and brimstone!")); for (auto i = 0; i < randint1(3) + 2; i++) { (void)fire_meteor(this->player_ptr, -1, AttributeType::FIRE, pos.y, pos.x, 10, 5); - (void)summon_specific(this->player_ptr, 0, pos.y, pos.x, mon_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(this->player_ptr, pos.y, pos.x, mon_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } } @@ -221,7 +221,7 @@ void Chest::fire_trap(const Pos2D &pos, short item_idx) else if (one_in_(3)) { msg_print(_("暗闇にドラゴンの影がぼんやりと現れた!", "Draconic forms loom out of the darkness!")); for (auto i = 0; i < randint1(3) + 2; i++) { - (void)summon_specific(this->player_ptr, 0, pos.y, pos.x, mon_level, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(this->player_ptr, pos.y, pos.x, mon_level, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } } @@ -229,7 +229,7 @@ void Chest::fire_trap(const Pos2D &pos, short item_idx) else if (one_in_(2)) { msg_print(_("奇妙な姿の怪物が襲って来た!", "Creatures strange and twisted assault you!")); for (auto i = 0; i < randint1(5) + 3; i++) { - (void)summon_specific(this->player_ptr, 0, pos.y, pos.x, mon_level, SUMMON_HYBRID, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(this->player_ptr, pos.y, pos.x, mon_level, SUMMON_HYBRID, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } } @@ -237,7 +237,7 @@ void Chest::fire_trap(const Pos2D &pos, short item_idx) else { msg_print(_("渦巻が合体し、破裂した!", "Vortices coalesce and wreak destruction!")); for (auto i = 0; i < randint1(3) + 2; i++) { - (void)summon_specific(this->player_ptr, 0, pos.y, pos.x, mon_level, SUMMON_VORTEX, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(this->player_ptr, pos.y, pos.x, mon_level, SUMMON_VORTEX, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); } } } diff --git a/src/spell-kind/blood-curse.cpp b/src/spell-kind/blood-curse.cpp index 6c3cf0b015..47ae334d90 100644 --- a/src/spell-kind/blood-curse.cpp +++ b/src/spell-kind/blood-curse.cpp @@ -105,7 +105,7 @@ void blood_curse_to_enemy(PlayerType *player_ptr, MONSTER_IDX m_idx) } const auto level = pet ? player_ptr->lev * 2 / 3 + randint1(player_ptr->lev / 2) : player_ptr->current_floor_ptr->dun_level; - count += summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, level, SUMMON_NONE, mode) ? 1 : 0; + count += summon_specific(player_ptr, player_ptr->y, player_ptr->x, level, SUMMON_NONE, mode) ? 1 : 0; if (!one_in_(6)) { break; } diff --git a/src/spell-kind/spells-random.cpp b/src/spell-kind/spells-random.cpp index 951f682405..480ba93f4d 100644 --- a/src/spell-kind/spells-random.cpp +++ b/src/spell-kind/spells-random.cpp @@ -175,7 +175,7 @@ bool activate_ty_curse(PlayerType *player_ptr, bool stop_ty, int *count) case 8: case 9: case 18: - (*count) += summon_specific(player_ptr, 0, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)) ? 1 : 0; + (*count) += summon_specific(player_ptr, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)) ? 1 : 0; if (!one_in_(6)) { break; } @@ -226,7 +226,7 @@ bool activate_ty_curse(PlayerType *player_ptr, bool stop_ty, int *count) [[fallthrough]]; case 25: if ((floor_ptr->dun_level > 65) && !stop_ty) { - (*count) += summon_cyber(player_ptr, -1, player_ptr->y, player_ptr->x); + (*count) += summon_cyber(player_ptr, player_ptr->y, player_ptr->x); stop_ty = true; break; } @@ -334,7 +334,7 @@ void wild_magic(PlayerType *player_ptr, int spell) case 35: for (int counter = 0; counter < 8; counter++) { (void)summon_specific( - player_ptr, 0, player_ptr->y, player_ptr->x, (floor_ptr->dun_level * 3) / 2, i2enum(type), (PM_ALLOW_GROUP | PM_NO_PET)); + player_ptr, player_ptr->y, player_ptr->x, (floor_ptr->dun_level * 3) / 2, i2enum(type), (PM_ALLOW_GROUP | PM_NO_PET)); } break; @@ -343,7 +343,7 @@ void wild_magic(PlayerType *player_ptr, int spell) activate_hi_summon(player_ptr, player_ptr->y, player_ptr->x, false); break; case 38: - (void)summon_cyber(player_ptr, -1, player_ptr->y, player_ptr->x); + (void)summon_cyber(player_ptr, player_ptr->y, player_ptr->x); break; default: { int count = 0; diff --git a/src/spell-realm/spells-trump.cpp b/src/spell-realm/spells-trump.cpp index 444ba9e15f..dd98a34ec8 100644 --- a/src/spell-realm/spells-trump.cpp +++ b/src/spell-realm/spells-trump.cpp @@ -76,7 +76,7 @@ void cast_shuffle(PlayerType *player_ptr) if (die < 14) { msg_print(_("なんてこった!《悪魔》だ!", "Oh no! It's the Devil!")); - summon_specific(player_ptr, 0, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + summon_specific(player_ptr, player_ptr->y, player_ptr->x, floor_ptr->dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); return; } diff --git a/src/spell/spells-summon.cpp b/src/spell/spells-summon.cpp index f57480aedd..d69ed1aed7 100644 --- a/src/spell/spells-summon.cpp +++ b/src/spell/spells-summon.cpp @@ -55,7 +55,6 @@ bool trump_summoning(PlayerType *player_ptr, int num, bool pet, POSITION y, POSI lev = plev * 2 / 3 + randint1(plev / 2); } - MONSTER_IDX src_idx; if (pet) { /* Become pet */ mode |= PM_FORCE_PET; @@ -67,20 +66,14 @@ bool trump_summoning(PlayerType *player_ptr, int num, bool pet, POSITION y, POSI mode &= ~PM_ALLOW_UNIQUE; } } - - /* Player is who summons */ - src_idx = -1; } else { /* Prevent taming, allow unique monster */ mode |= PM_NO_PET; - - /* Behave as if they appear by themselfs */ - src_idx = 0; } bool success = false; for (int i = 0; i < num; i++) { - if (summon_specific(player_ptr, src_idx, y, x, lev, type, mode)) { + if (summon_specific(player_ptr, y, x, lev, type, mode)) { success = true; } } @@ -105,7 +98,7 @@ bool cast_summon_demon(PlayerType *player_ptr, int power) flg |= PM_ALLOW_GROUP; } - if (!summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, power, SUMMON_DEMON, flg)) { + if (!summon_specific(player_ptr, player_ptr->y, player_ptr->x, power, SUMMON_DEMON, flg)) { return true; } @@ -134,7 +127,7 @@ bool cast_summon_undead(PlayerType *player_ptr, int power) mode |= (PM_ALLOW_UNIQUE | PM_NO_PET); } - if (summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, power, type, mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, power, type, mode)) { msg_print(_("冷たい風があなたの周りに吹き始めた。それは腐敗臭を運んでいる...", "Cold winds begin to blow around you, carrying with them the stench of decay...")); if (pet) { @@ -156,7 +149,7 @@ bool cast_summon_hound(PlayerType *player_ptr, int power) mode |= PM_NO_PET; } - if (summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, power, SUMMON_HOUND, mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, power, SUMMON_HOUND, mode)) { if (pet) { msg_print(_("ハウンドがあなたの下僕として出現した。", "A group of hounds appear as your servants.")); } else { @@ -180,7 +173,7 @@ bool cast_summon_elemental(PlayerType *player_ptr, int power) mode |= PM_NO_PET; } - if (summon_specific(player_ptr, (pet ? -1 : 0), player_ptr->y, player_ptr->x, power, SUMMON_ELEMENTAL, mode)) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, power, SUMMON_ELEMENTAL, mode)) { msg_print(_("エレメンタルが現れた...", "An elemental materializes...")); if (pet) { msg_print(_("あなたに服従しているようだ。", "It seems obedient to you.")); @@ -225,7 +218,7 @@ bool cast_summon_greater_demon(PlayerType *player_ptr) } const auto summon_lev = player_ptr->lev * 2 / 3 + o_ptr->get_monrace().level; - if (summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET))) { + if (summon_specific(player_ptr, player_ptr->y, player_ptr->x, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET))) { msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone.")); msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'")); vary_item(player_ptr, i_idx, -1); @@ -251,24 +244,24 @@ bool summon_kin_player(PlayerType *player_ptr, DEPTH level, POSITION y, POSITION if (!pet) { mode |= PM_NO_PET; } - return summon_specific(player_ptr, (pet ? -1 : 0), y, x, level, SUMMON_KIN, mode).has_value(); + return summon_specific(player_ptr, y, x, level, SUMMON_KIN, mode).has_value(); } /*! * @brief サイバーデーモンの召喚 * @param player_ptr プレイヤーへの参照ポインタ - * @param src_idx 召喚主のモンスターID(0ならばプレイヤー) * @param y 召喚位置Y座標 * @param x 召喚位置X座標 + * @param summoner_m_idx モンスターの召喚による場合、召喚者のモンスターID * @return 作用が実際にあった場合TRUEを返す */ -int summon_cyber(PlayerType *player_ptr, MONSTER_IDX src_idx, POSITION y, POSITION x) +int summon_cyber(PlayerType *player_ptr, POSITION y, POSITION x, std::optional summoner_m_idx) { /* Summoned by a monster */ BIT_FLAGS mode = PM_ALLOW_GROUP; auto *floor_ptr = player_ptr->current_floor_ptr; - if (is_monster(src_idx)) { - auto *m_ptr = &floor_ptr->m_list[src_idx]; + if (summoner_m_idx) { + auto *m_ptr = &floor_ptr->m_list[*summoner_m_idx]; if (m_ptr->is_pet()) { mode |= PM_FORCE_PET; } @@ -281,7 +274,7 @@ int summon_cyber(PlayerType *player_ptr, MONSTER_IDX src_idx, POSITION y, POSITI int count = 0; for (int i = 0; i < max_cyber; i++) { - count += summon_specific(player_ptr, src_idx, y, x, 100, SUMMON_CYBER, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, 100, SUMMON_CYBER, mode, summoner_m_idx) ? 1 : 0; } return count; @@ -373,71 +366,71 @@ int activate_hi_summon(PlayerType *player_ptr, POSITION y, POSITION x, bool can_ switch (randint1(25) + (dungeon_level / 20)) { case 1: case 2: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_ANT, mode) ? 1 : 0; break; case 3: case 4: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_SPIDER, mode) ? 1 : 0; break; case 5: case 6: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_HOUND, mode) ? 1 : 0; break; case 7: case 8: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_HYDRA, mode) ? 1 : 0; break; case 9: case 10: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_ANGEL, mode) ? 1 : 0; break; case 11: case 12: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_UNDEAD, mode) ? 1 : 0; break; case 13: case 14: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_DRAGON, mode) ? 1 : 0; break; case 15: case 16: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_DEMON, mode) ? 1 : 0; break; case 17: if (can_pet) { break; } - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE)) ? 1 : 0; break; case 18: case 19: if (can_pet) { break; } - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE)) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE)) ? 1 : 0; break; case 20: case 21: if (!can_pet) { mode |= PM_ALLOW_UNIQUE; } - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_HI_UNDEAD, mode) ? 1 : 0; break; case 22: case 23: if (!can_pet) { mode |= PM_ALLOW_UNIQUE; } - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, summon_lev, SUMMON_HI_DRAGON, mode) ? 1 : 0; break; case 24: - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, 100, SUMMON_CYBER, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, 100, SUMMON_CYBER, mode) ? 1 : 0; break; default: if (!can_pet) { mode |= PM_ALLOW_UNIQUE; } - count += summon_specific(player_ptr, (pet ? -1 : 0), y, x, pet ? summon_lev : (((summon_lev * 3) / 2) + 5), SUMMON_NONE, mode) ? 1 : 0; + count += summon_specific(player_ptr, y, x, pet ? summon_lev : (((summon_lev * 3) / 2) + 5), SUMMON_NONE, mode) ? 1 : 0; } } @@ -480,7 +473,7 @@ void cast_invoke_spirits(PlayerType *player_ptr, DIRECTION dir) if (die < 8) { msg_print(_("なんてこった!あなたの周りの地面から朽ちた人影が立ち上がってきた!", "Oh no! Mouldering forms rise from the earth around you!")); - (void)summon_specific(player_ptr, 0, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_UNDEAD, + (void)summon_specific(player_ptr, player_ptr->y, player_ptr->x, player_ptr->current_floor_ptr->dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); chg_virtue(player_ptr, Virtue::UNLIFE, 1); } else if (die < 14) { diff --git a/src/spell/spells-summon.h b/src/spell/spells-summon.h index 971560a873..921dfe96be 100644 --- a/src/spell/spells-summon.h +++ b/src/spell/spells-summon.h @@ -1,6 +1,7 @@ #pragma once #include "system/angband.h" +#include enum summon_type : int; @@ -15,6 +16,6 @@ bool cast_summon_octopus(PlayerType *player_ptr); bool cast_summon_greater_demon(PlayerType *player_ptr); bool summon_kin_player(PlayerType *player_ptr, DEPTH level, POSITION y, POSITION x, BIT_FLAGS mode); void mitokohmon(PlayerType *player_ptr); -int summon_cyber(PlayerType *player_ptr, MONSTER_IDX src_idx, POSITION y, POSITION x); +int summon_cyber(PlayerType *player_ptr, POSITION y, POSITION x, std::optional summoner_m_idx = std::nullopt); int activate_hi_summon(PlayerType *player_ptr, POSITION y, POSITION x, bool can_pet); void cast_invoke_spirits(PlayerType *player_ptr, DIRECTION dir); diff --git a/src/wizard/wizard-spells.cpp b/src/wizard/wizard-spells.cpp index efc451ed35..f7d1daf4f6 100644 --- a/src/wizard/wizard-spells.cpp +++ b/src/wizard/wizard-spells.cpp @@ -214,7 +214,7 @@ void wiz_summon_random_monster(PlayerType *player_ptr, int num) const auto y = player_ptr->y; const auto x = player_ptr->x; for (auto i = 0; i < num; i++) { - if (!summon_specific(player_ptr, 0, y, x, level, SUMMON_NONE, flags)) { + if (!summon_specific(player_ptr, y, x, level, SUMMON_NONE, flags)) { msg_print_wizard(player_ptr, 1, "Monster isn't summoned correctly..."); return; }