The master and develop branches track hengband.
OS X development happens on the macos-1-6-2, macos-2-2-1, and macos-develop branches.
修订版 | 7961e5f2b040b993e78251b9798a4f7f183ca66f (tree) |
---|---|
时间 | 2022-01-09 23:24:20 |
作者 | Deskull <61610939+sikabane-works@user...> |
Commiter | GitHub |
Merge pull request #1973 from sikabane-works/release/3.0.0Alpha50
Release/3.0.0 alpha50
@@ -38,7 +38,7 @@ PROJECT_NAME = Hengband | ||
38 | 38 | # could be handy for archiving the generated documentation or if some version |
39 | 39 | # control system is used. |
40 | 40 | |
41 | -PROJECT_NUMBER = 3.0.0Alpha49 | |
41 | +PROJECT_NUMBER = 3.0.0Alpha50 | |
42 | 42 | |
43 | 43 | # Using the PROJECT_BRIEF tag one can provide an optional one line description |
44 | 44 | # for a project that appears at the top of each page and should give viewer a |
@@ -16159,7 +16159,7 @@ B:HIT:HURT:1d50 | ||
16159 | 16159 | B:HIT:HURT:1d50 |
16160 | 16160 | B:HIT:HURT:1d50 |
16161 | 16161 | F:RAND_25 | EVIL | DEMON | |
16162 | -F:DROP_2D2 | DROP_GOOD | ONLY_ITEM | RES_TELE | | |
16162 | +F:DROP_3D2 | DROP_GOOD | ONLY_ITEM | RES_TELE | | |
16163 | 16163 | F:IM_POIS | IM_FIRE | PREVENT_SUDDEN_MAGIC | FORCE_MAXHP | NONLIVING |
16164 | 16164 | S:1_IN_4 | |
16165 | 16165 | S:ROCKET |
@@ -26647,4 +26647,49 @@ D:一見すると愛らしいただの白い兎であるが、 | ||
26647 | 26647 | D:この兎こそが聖杯の手がかりが眠る「カルバノグの洞窟」の守護者、伝説の黒き獣にして、 |
26648 | 26648 | D:全てのヴォーパルバニー、殺人兎の始祖である。 |
26649 | 26649 | D:その前歯は無謀にも近づく多くの騎士と愚か者を屠ってきた。 その前歯を恐れよ! |
26650 | -D:(モンティ・パイソン・アンド・ホーリー・グレイル,1975) | |
\ No newline at end of file | ||
26650 | +D:(モンティ・パイソン・アンド・ホーリー・グレイル,1975) | |
26651 | + | |
26652 | +N:1348:カコデーモン | |
26653 | +E:Cacodemon | |
26654 | +G:u:R | |
26655 | +I:110:27d19:25:70:15 | |
26656 | +W:30:1:0:250:0:0 | |
26657 | +B:BITE:HURT:6d4 | |
26658 | +B:BITE:HURT:6d4 | |
26659 | +B:BITE:HURT:6d4 | |
26660 | +F:DROP_60 | ONLY_ITEM | DROP_CORPSE | EVIL | DEMON | POWERFUL | |
26661 | +F:RIDING | IM_FIRE | RES_PLAS | BASH_DOOR | CAN_FLY | WILD_OCEAN | |
26662 | +F:WILD_VOLCANO | WILD_MOUNTAIN | WILD_TOWN | WILD_ALL | |
26663 | +S:1_IN_8 | |
26664 | +S:BO_FIRE | |
26665 | +D:$It is floating and one-eyed demon. | |
26666 | +D:$It is very round, and has six spines on upper body and two on lower. | |
26667 | +D:$It breathes a plasma ball from its wide mouth. | |
26668 | +D:それはとても丸っこくて体の上部に6本、下部に2本のトゲがあり、浮遊する一つ目の悪魔だ。 | |
26669 | +D:その裂けたような口からプラズマの弾を発射してくる。 | |
26670 | + | |
26671 | +N:1349:マンキュバス | |
26672 | +E:Mancubus | |
26673 | +G:U:U | |
26674 | +I:110:45d50:15:90:10 | |
26675 | +W:39:2:0:2000:0:0 | |
26676 | +F:DROP_1D2 | ONLY_ITEM | DROP_CORPSE | EVIL | DEMON | NEVER_BLOW | FORCE_MAXHP | |
26677 | +F:POWERFUL | IM_FIRE | RES_TELE | BASH_DOOR | WILD_VOLCANO | WILD_TOWN | |
26678 | +F:WILD_ALL | |
26679 | +S:1_IN_2 | |
26680 | +S:BA_FIRE | |
26681 | +D:$This is fatso has twin gun-arms. | |
26682 | +D:$Its fire balls are just nightmare. | |
26683 | +D:この両腕に砲がある太っちょが出す火の弾は悪夢そのものだ。 | |
26684 | + | |
26685 | +N:1350:アラクノトロン | |
26686 | +E:Arachnotron | |
26687 | +G:S:U | |
26688 | +I:115:40d30:10:100:0 | |
26689 | +W:45:3:0:10000:0:0 | |
26690 | +F:DROP_1D2 | DROP_60 | DROP_90 | ONLY_ITEM | DROP_GOOD | DROP_CORPSE | EVIL | DEMON | NEVER_BLOW | |
26691 | +F:FORCE_MAXHP | NO_FEAR | RES_PLAS | BASH_DOOR | KILL_BODY | |
26692 | +S:1_IN_1 | |
26693 | +S:BO_PLAS | |
26694 | +D:$It has spider-like machine legs and carries a monster that looks brain-like. | |
26695 | +D:蜘蛛のような機械の脚を持っている敵で、脳みそのような生き物を載せている。 |
@@ -290,10 +290,9 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v | ||
290 | 290 | TERM_LEN wid, hgt; |
291 | 291 | term_get_size(&wid, &hgt); |
292 | 292 | std::vector<MONRACE_IDX> mon_idx(r_info.size()); |
293 | + std::vector<IDX> grp_idx; | |
293 | 294 | |
294 | 295 | int max = 0; |
295 | - IDX grp_cnt = 0; | |
296 | - IDX grp_idx[100]; | |
297 | 296 | IDX mon_cnt; |
298 | 297 | bool visual_list = false; |
299 | 298 | TERM_COLOR attr_top = 0; |
@@ -309,7 +308,7 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v | ||
309 | 308 | max = len; |
310 | 309 | |
311 | 310 | if ((monster_group_char[i] == ((char *)-1L)) || collect_monsters(player_ptr, i, mon_idx.data(), mode)) { |
312 | - grp_idx[grp_cnt++] = i; | |
311 | + grp_idx.push_back(i); | |
313 | 312 | } |
314 | 313 | } |
315 | 314 |
@@ -323,7 +322,6 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v | ||
323 | 322 | &r_info[direct_r_idx].x_char, need_redraw); |
324 | 323 | } |
325 | 324 | |
326 | - grp_idx[grp_cnt] = -1; | |
327 | 325 | mode = visual_only ? MONSTER_LORE_RESEARCH : MONSTER_LORE_NONE; |
328 | 326 | IDX old_grp_cur = -1; |
329 | 327 | IDX grp_cur = 0; |
@@ -365,7 +363,7 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v | ||
365 | 363 | if (grp_cur >= grp_top + browser_rows) |
366 | 364 | grp_top = grp_cur - browser_rows + 1; |
367 | 365 | |
368 | - display_group_list(0, 6, max, browser_rows, grp_idx, monster_group_text, grp_cur, grp_top); | |
366 | + display_group_list(0, 6, max, browser_rows, grp_idx.data(), monster_group_text, grp_cur, grp_top); | |
369 | 367 | if (old_grp_cur != grp_cur) { |
370 | 368 | old_grp_cur = grp_cur; |
371 | 369 | mon_cnt = collect_monsters(player_ptr, grp_idx[grp_cur], mon_idx.data(), mode); |
@@ -386,6 +384,7 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v | ||
386 | 384 | display_visual_list(max + 3, 7, browser_rows - 1, wid - (max + 3), attr_top, char_left); |
387 | 385 | } |
388 | 386 | |
387 | + prt(format(_("%d 種", "%d Races"), mon_cnt), 3, 26); | |
389 | 388 | prt(format(_("<方向>%s%s%s, ESC", "<dir>%s%s%s, ESC"), (!visual_list && !visual_only) ? _(", 'r'で思い出を見る", ", 'r' to recall") : "", |
390 | 389 | visual_list ? _(", ENTERで決定", ", ENTER to accept") : _(", 'v'でシンボル変更", ", 'v' for visuals"), |
391 | 390 | (attr_idx || char_idx) ? _(", 'c', 'p'でペースト", ", 'c', 'p' to paste") : _(", 'c'でコピー", ", 'c' to copy")), |
@@ -450,7 +449,7 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v | ||
450 | 449 | } |
451 | 450 | |
452 | 451 | default: { |
453 | - browser_cursor(ch, &column, &grp_cur, grp_cnt, &mon_cur, mon_cnt); | |
452 | + browser_cursor(ch, &column, &grp_cur, grp_idx.size(), &mon_cur, mon_cnt); | |
454 | 453 | |
455 | 454 | break; |
456 | 455 | } |
@@ -22,6 +22,7 @@ | ||
22 | 22 | #include "system/monster-race-definition.h" |
23 | 23 | #include "system/monster-type-definition.h" |
24 | 24 | #include "system/player-type-definition.h" |
25 | +#include "util/bit-flags-calculator.h" | |
25 | 26 | |
26 | 27 | /*! |
27 | 28 | * @brief モンスターが移動した結果、そこにプレイヤーがいたら直接攻撃を行う |
@@ -119,15 +120,24 @@ bool process_monster_attack_to_monster(PlayerType *player_ptr, turn_flags *turn_ | ||
119 | 120 | |
120 | 121 | monster_race *z_ptr = &r_info[y_ptr->r_idx]; |
121 | 122 | turn_flags_ptr->do_move = false; |
122 | - if ((((r_ptr->flags2 & RF2_KILL_BODY) != 0) && ((r_ptr->flags1 & RF1_NEVER_BLOW) == 0) && (r_ptr->mexp * r_ptr->level > z_ptr->mexp * z_ptr->level) | |
123 | - && can_cross && (g_ptr->m_idx != player_ptr->riding)) | |
124 | - || are_enemies(player_ptr, m_ptr, y_ptr) || monster_confused_remaining(m_ptr)) { | |
123 | + | |
124 | + bool do_kill_body = any_bits(r_ptr->flags2, RF2_KILL_BODY) && none_bits(r_ptr->flags1, RF1_NEVER_BLOW); | |
125 | + do_kill_body &= (r_ptr->mexp * r_ptr->level > z_ptr->mexp * z_ptr->level); | |
126 | + do_kill_body &= (g_ptr->m_idx != player_ptr->riding); | |
127 | + | |
128 | + if (do_kill_body || are_enemies(player_ptr, m_ptr, y_ptr) || monster_confused_remaining(m_ptr)) | |
129 | + { | |
125 | 130 | return exe_monster_attack_to_monster(player_ptr, m_idx, g_ptr); |
126 | 131 | } |
127 | 132 | |
128 | - if (((r_ptr->flags2 & RF2_MOVE_BODY) != 0) && ((r_ptr->flags1 & RF1_NEVER_MOVE) == 0) && (r_ptr->mexp > z_ptr->mexp) && can_cross | |
129 | - && (g_ptr->m_idx != player_ptr->riding) | |
130 | - && monster_can_cross_terrain(player_ptr, player_ptr->current_floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].feat, z_ptr, 0)) { | |
133 | + bool do_move_body = any_bits(r_ptr->flags2, RF2_MOVE_BODY) && none_bits(r_ptr->flags1, RF1_NEVER_MOVE); | |
134 | + do_move_body &= (r_ptr->mexp > z_ptr->mexp); | |
135 | + do_move_body &= can_cross; | |
136 | + do_move_body &= (g_ptr->m_idx != player_ptr->riding); | |
137 | + do_move_body &= monster_can_cross_terrain(player_ptr, player_ptr->current_floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].feat, z_ptr, 0); | |
138 | + | |
139 | + if (do_move_body) | |
140 | + { | |
131 | 141 | turn_flags_ptr->do_move = true; |
132 | 142 | turn_flags_ptr->did_move_body = true; |
133 | 143 | (void)set_monster_csleep(player_ptr, g_ptr->m_idx, 0); |
@@ -51,6 +51,9 @@ static MonsterSpellResult spell_RF6_SPECIAL_BANORLUPART(PlayerType *player_ptr, | ||
51 | 51 | POSITION dummy_x = m_ptr->fx; |
52 | 52 | BIT_FLAGS mode = 0L; |
53 | 53 | |
54 | + if (see_monster(player_ptr, m_idx) && monster_near_player(floor_ptr, m_idx, 0)) | |
55 | + disturb(player_ptr, true, true); | |
56 | + | |
54 | 57 | switch (m_ptr->r_idx) { |
55 | 58 | case MON_BANORLUPART: |
56 | 59 | dummy_hp = (m_ptr->hp + 1) / 2; |
@@ -114,10 +117,18 @@ static MonsterSpellResult spell_RF6_SPECIAL_ROLENTO(PlayerType *player_ptr, POSI | ||
114 | 117 | int count = 0, k; |
115 | 118 | int num = 1 + randint1(3); |
116 | 119 | BIT_FLAGS mode = 0L; |
120 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
121 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
122 | + bool mon_to_mon = TARGET_TYPE == MONSTER_TO_MONSTER; | |
123 | + bool mon_to_player = TARGET_TYPE == MONSTER_TO_PLAYER; | |
124 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
125 | + | |
117 | 126 | mspell_cast_msg_blind msg(_("%^sが何か大量に投げた。", "%^s spreads something."), |
118 | 127 | _("%^sは手榴弾をばらまいた。", "%^s throws some hand grenades."), _("%^sは手榴弾をばらまいた。", "%^s throws some hand grenades.")); |
119 | 128 | |
120 | 129 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
130 | + if (mon_to_player || (mon_to_mon && known && see_either)) | |
131 | + disturb(player_ptr, true, true); | |
121 | 132 | |
122 | 133 | for (k = 0; k < num; k++) { |
123 | 134 | count += summon_named_creature(player_ptr, m_idx, y, x, MON_GRENADE, mode); |
@@ -228,7 +239,6 @@ MonsterSpellResult spell_RF6_SPECIAL(PlayerType *player_ptr, POSITION y, POSITIO | ||
228 | 239 | monster_type *m_ptr = &floor_ptr->m_list[m_idx]; |
229 | 240 | monster_race *r_ptr = &r_info[m_ptr->r_idx]; |
230 | 241 | |
231 | - disturb(player_ptr, true, true); | |
232 | 242 | switch (m_ptr->r_idx) { |
233 | 243 | case MON_OHMU: |
234 | 244 | return MonsterSpellResult::make_invalid(); |
@@ -589,8 +589,6 @@ MonsterSpellResult spell_RF6_HEAL(PlayerType *player_ptr, MONSTER_IDX m_idx, MON | ||
589 | 589 | char m_poss[10]; |
590 | 590 | monster_desc(player_ptr, m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE); |
591 | 591 | |
592 | - disturb(player_ptr, true, true); | |
593 | - | |
594 | 592 | msg.to_player_true = _("%^sが何かをつぶやいた。", "%^s mumbles."); |
595 | 593 | msg.to_mons_true = _("%^sは自分の傷に念を集中した。", format("%%^s concentrates on %s wounds.", m_poss)); |
596 | 594 | msg.to_player_false = _("%^sが自分の傷に集中した。", format("%%^s concentrates on %s wounds.", m_poss)); |
@@ -32,6 +32,23 @@ constexpr int S_NUM_6 = 6; | ||
32 | 32 | constexpr int S_NUM_4 = 4; |
33 | 33 | |
34 | 34 | /*! |
35 | + * @brief モンスターが召喚呪文を使った際にプレイヤーの連続行動を止める処理 / | |
36 | + * @param player_ptr プレイヤーへの参照ポインタ | |
37 | + * @param target_type プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER | |
38 | + * @param known モンスターが近くにいる場合TRUE | |
39 | + * @param see_either モンスターを視認可能な場合TRUE | |
40 | + */ | |
41 | +static void summon_disturb(PlayerType *player_ptr, int target_type, bool known, bool see_either) | |
42 | +{ | |
43 | + bool mon_to_mon = target_type == MONSTER_TO_MONSTER; | |
44 | + bool mon_to_player = target_type == MONSTER_TO_PLAYER; | |
45 | + if (mon_to_player || (mon_to_mon && known && see_either)) { | |
46 | + disturb(player_ptr, true, true); | |
47 | + } | |
48 | +} | |
49 | + | |
50 | + | |
51 | +/*! | |
35 | 52 | * @brief 特定条件のモンスター召喚のみPM_ALLOW_UNIQUEを許可する / |
36 | 53 | * @param floor_ptr 現在フロアへの参照ポインタ |
37 | 54 | * @param m_idx モンスターID |
@@ -84,8 +101,7 @@ static void decide_summon_kin_caster( | ||
84 | 101 | return; |
85 | 102 | } |
86 | 103 | |
87 | - if (mon_to_player || (mon_to_mon && known && see_either)) | |
88 | - disturb(player_ptr, true, true); | |
104 | + summon_disturb(player_ptr, target_type, known, see_either); | |
89 | 105 | |
90 | 106 | if (player_ptr->blind) { |
91 | 107 | if (mon_to_player) |
@@ -123,9 +139,12 @@ MonsterSpellResult spell_RF6_S_KIN(PlayerType *player_ptr, POSITION y, POSITION | ||
123 | 139 | monster_name(player_ptr, m_idx, m_name); |
124 | 140 | monster_name(player_ptr, t_idx, t_name); |
125 | 141 | monster_desc(player_ptr, m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE); |
126 | - | |
127 | - disturb(player_ptr, true, true); | |
142 | + | |
143 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
128 | 144 | bool known = monster_near_player(floor_ptr, m_idx, t_idx); |
145 | + | |
146 | + summon_disturb(player_ptr, target_type, known, see_either); | |
147 | + | |
129 | 148 | decide_summon_kin_caster(player_ptr, m_idx, t_idx, target_type, m_name, m_poss, known); |
130 | 149 | int count = 0; |
131 | 150 | switch (m_ptr->r_idx) { |
@@ -213,18 +232,21 @@ MonsterSpellResult spell_RF6_S_KIN(PlayerType *player_ptr, POSITION y, POSITION | ||
213 | 232 | */ |
214 | 233 | MonsterSpellResult spell_RF6_S_CYBER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
215 | 234 | { |
216 | - int count = 0; | |
217 | 235 | floor_type *floor_ptr = player_ptr->current_floor_ptr; |
218 | 236 | monster_type *m_ptr = &floor_ptr->m_list[m_idx]; |
219 | 237 | DEPTH rlev = monster_level_idx(floor_ptr, m_idx); |
220 | 238 | bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); |
221 | 239 | bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); |
240 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
241 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
222 | 242 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
223 | 243 | _("%^sがサイバーデーモンを召喚した!", "%^s magically summons Cyberdemons!"), |
224 | 244 | _("%^sがサイバーデーモンを召喚した!", "%^s magically summons Cyberdemons!")); |
225 | 245 | |
226 | 246 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
247 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
227 | 248 | |
249 | + int count = 0; | |
228 | 250 | if (is_friendly(m_ptr) && mon_to_mon) { |
229 | 251 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP)); |
230 | 252 | } else { |
@@ -256,16 +278,20 @@ MonsterSpellResult spell_RF6_S_CYBER(PlayerType *player_ptr, POSITION y, POSITIO | ||
256 | 278 | */ |
257 | 279 | MonsterSpellResult spell_RF6_S_MONSTER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
258 | 280 | { |
281 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
282 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
283 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
284 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
285 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
286 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
287 | + | |
259 | 288 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法で仲間を召喚した!", "%^s magically summons help!"), |
260 | 289 | _("%^sが魔法で仲間を召喚した!", "%^s magically summons help!")); |
261 | 290 | |
262 | 291 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
292 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
263 | 293 | |
264 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
265 | 294 | int count = 0; |
266 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
267 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
268 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
269 | 295 | for (int k = 0; k < 1; k++) { |
270 | 296 | if (mon_to_player) |
271 | 297 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); |
@@ -299,16 +325,20 @@ MonsterSpellResult spell_RF6_S_MONSTER(PlayerType *player_ptr, POSITION y, POSIT | ||
299 | 325 | */ |
300 | 326 | MonsterSpellResult spell_RF6_S_MONSTERS(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
301 | 327 | { |
328 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
329 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
330 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
331 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
332 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
333 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
334 | + | |
302 | 335 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
303 | 336 | _("%^sが魔法でモンスターを召喚した!", "%^s magically summons monsters!"), _("%^sが魔法でモンスターを召喚した!", "%^s magically summons monsters!")); |
304 | 337 | |
305 | 338 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
339 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
306 | 340 | |
307 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
308 | 341 | int count = 0; |
309 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
310 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
311 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
312 | 342 | for (auto k = 0; k < S_NUM_6; k++) { |
313 | 343 | if (mon_to_player) |
314 | 344 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_NONE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); |
@@ -342,16 +372,20 @@ MonsterSpellResult spell_RF6_S_MONSTERS(PlayerType *player_ptr, POSITION y, POSI | ||
342 | 372 | */ |
343 | 373 | MonsterSpellResult spell_RF6_S_ANT(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
344 | 374 | { |
375 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
376 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
377 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
378 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
379 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
380 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
381 | + | |
345 | 382 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法でアリを召喚した。", "%^s magically summons ants."), |
346 | 383 | _("%^sが魔法でアリを召喚した。", "%^s magically summons ants.")); |
347 | 384 | |
348 | 385 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
386 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
349 | 387 | |
350 | 388 | int count = 0; |
351 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
352 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
353 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
354 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
355 | 389 | for (auto k = 0; k < S_NUM_6; k++) { |
356 | 390 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP); |
357 | 391 | } |
@@ -381,16 +415,20 @@ MonsterSpellResult spell_RF6_S_ANT(PlayerType *player_ptr, POSITION y, POSITION | ||
381 | 415 | */ |
382 | 416 | MonsterSpellResult spell_RF6_S_SPIDER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
383 | 417 | { |
418 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
419 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
420 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
421 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
422 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
423 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
424 | + | |
384 | 425 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法でクモを召喚した。", "%^s magically summons spiders."), |
385 | 426 | _("%^sが魔法でクモを召喚した。", "%^s magically summons spiders.")); |
386 | 427 | |
387 | 428 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
429 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
388 | 430 | |
389 | 431 | int count = 0; |
390 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
391 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
392 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
393 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
394 | 432 | for (auto k = 0; k < S_NUM_6; k++) { |
395 | 433 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP); |
396 | 434 | } |
@@ -420,16 +458,20 @@ MonsterSpellResult spell_RF6_S_SPIDER(PlayerType *player_ptr, POSITION y, POSITI | ||
420 | 458 | */ |
421 | 459 | MonsterSpellResult spell_RF6_S_HOUND(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
422 | 460 | { |
461 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
462 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
463 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
464 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
465 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
466 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
467 | + | |
423 | 468 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
424 | 469 | _("%^sが魔法でハウンドを召喚した。", "%^s magically summons hounds."), _("%^sが魔法でハウンドを召喚した。", "%^s magically summons hounds.")); |
425 | 470 | |
426 | 471 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
472 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
427 | 473 | |
428 | 474 | int count = 0; |
429 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
430 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
431 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
432 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
433 | 475 | for (auto k = 0; k < S_NUM_4; k++) { |
434 | 476 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP); |
435 | 477 | } |
@@ -459,16 +501,20 @@ MonsterSpellResult spell_RF6_S_HOUND(PlayerType *player_ptr, POSITION y, POSITIO | ||
459 | 501 | */ |
460 | 502 | MonsterSpellResult spell_RF6_S_HYDRA(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
461 | 503 | { |
504 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
505 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
506 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
507 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
508 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
509 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
510 | + | |
462 | 511 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
463 | 512 | _("%^sが魔法でヒドラを召喚した。", "%^s magically summons hydras."), _("%^sが魔法でヒドラを召喚した。", "%^s magically summons hydras.")); |
464 | 513 | |
465 | 514 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
515 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
466 | 516 | |
467 | 517 | int count = 0; |
468 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
469 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
470 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
471 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
472 | 518 | for (auto k = 0; k < S_NUM_4; k++) { |
473 | 519 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP); |
474 | 520 | } |
@@ -498,12 +544,18 @@ MonsterSpellResult spell_RF6_S_HYDRA(PlayerType *player_ptr, POSITION y, POSITIO | ||
498 | 544 | */ |
499 | 545 | MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
500 | 546 | { |
547 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
548 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
549 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
550 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
551 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
552 | + | |
501 | 553 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
502 | 554 | _("%^sが魔法で天使を召喚した!", "%^s magically summons an angel!"), _("%^sが魔法で天使を召喚した!", "%^s magically summons an angel!")); |
503 | 555 | |
504 | 556 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
557 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
505 | 558 | |
506 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
507 | 559 | monster_type *m_ptr = &floor_ptr->m_list[m_idx]; |
508 | 560 | monster_race *r_ptr = &r_info[m_ptr->r_idx]; |
509 | 561 | int num = 1; |
@@ -511,7 +563,6 @@ MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITIO | ||
511 | 563 | num += r_ptr->level / 40; |
512 | 564 | } |
513 | 565 | |
514 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
515 | 566 | int count = 0; |
516 | 567 | for (int k = 0; k < num; k++) { |
517 | 568 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP); |
@@ -525,7 +576,6 @@ MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITIO | ||
525 | 576 | msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby.")); |
526 | 577 | } |
527 | 578 | |
528 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
529 | 579 | if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon) |
530 | 580 | floor_ptr->monster_noise = true; |
531 | 581 |
@@ -548,14 +598,19 @@ MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITIO | ||
548 | 598 | */ |
549 | 599 | MonsterSpellResult spell_RF6_S_DEMON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
550 | 600 | { |
601 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
602 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
603 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
604 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
605 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
606 | + | |
551 | 607 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
552 | 608 | _("%^sは魔法で混沌の宮廷から悪魔を召喚した!", "%^s magically summons a demon from the Courts of Chaos!"), |
553 | 609 | _("%^sは魔法で混沌の宮廷から悪魔を召喚した!", "%^s magically summons a demon from the Courts of Chaos!")); |
554 | 610 | |
555 | 611 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
612 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
556 | 613 | |
557 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
558 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
559 | 614 | int count = 0; |
560 | 615 | for (int k = 0; k < 1; k++) { |
561 | 616 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP); |
@@ -564,7 +619,6 @@ MonsterSpellResult spell_RF6_S_DEMON(PlayerType *player_ptr, POSITION y, POSITIO | ||
564 | 619 | if (player_ptr->blind && count) |
565 | 620 | msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby.")); |
566 | 621 | |
567 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
568 | 622 | if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon) |
569 | 623 | floor_ptr->monster_noise = true; |
570 | 624 |
@@ -587,14 +641,19 @@ MonsterSpellResult spell_RF6_S_DEMON(PlayerType *player_ptr, POSITION y, POSITIO | ||
587 | 641 | */ |
588 | 642 | MonsterSpellResult spell_RF6_S_UNDEAD(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
589 | 643 | { |
644 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
645 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
646 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
647 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
648 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
649 | + | |
590 | 650 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
591 | 651 | _("%^sが魔法でアンデッドの強敵を召喚した!", "%^s magically summons an undead adversary!"), |
592 | 652 | _("%sが魔法でアンデッドを召喚した。", "%^s magically summons undead.")); |
593 | 653 | |
594 | 654 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
655 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
595 | 656 | |
596 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
597 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
598 | 657 | int count = 0; |
599 | 658 | for (int k = 0; k < 1; k++) { |
600 | 659 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP); |
@@ -603,7 +662,6 @@ MonsterSpellResult spell_RF6_S_UNDEAD(PlayerType *player_ptr, POSITION y, POSITI | ||
603 | 662 | if (player_ptr->blind && count) |
604 | 663 | msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby.")); |
605 | 664 | |
606 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
607 | 665 | if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon) |
608 | 666 | floor_ptr->monster_noise = true; |
609 | 667 |
@@ -626,15 +684,19 @@ MonsterSpellResult spell_RF6_S_UNDEAD(PlayerType *player_ptr, POSITION y, POSITI | ||
626 | 684 | */ |
627 | 685 | MonsterSpellResult spell_RF6_S_DRAGON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
628 | 686 | { |
687 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
688 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
689 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
690 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
691 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
692 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
693 | + | |
629 | 694 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
630 | 695 | _("%^sが魔法でドラゴンを召喚した!", "%^s magically summons a dragon!"), _("%^sが魔法でドラゴンを召喚した!", "%^s magically summons a dragon!")); |
631 | 696 | |
632 | 697 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
698 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
633 | 699 | |
634 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
635 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
636 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
637 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
638 | 700 | int count = 0; |
639 | 701 | if (mon_to_player) |
640 | 702 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); |
@@ -667,15 +729,18 @@ MonsterSpellResult spell_RF6_S_DRAGON(PlayerType *player_ptr, POSITION y, POSITI | ||
667 | 729 | */ |
668 | 730 | MonsterSpellResult spell_RF6_S_HI_UNDEAD(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
669 | 731 | { |
670 | - GAME_TEXT m_name[MAX_NLEN]; | |
671 | - monster_name(player_ptr, m_idx, m_name); | |
672 | - | |
673 | - disturb(player_ptr, true, true); | |
674 | - | |
675 | 732 | floor_type *floor_ptr = player_ptr->current_floor_ptr; |
676 | 733 | monster_type *m_ptr = &floor_ptr->m_list[m_idx]; |
677 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
734 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
678 | 735 | bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); |
736 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
737 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
738 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
739 | + | |
740 | + GAME_TEXT m_name[MAX_NLEN]; | |
741 | + monster_name(player_ptr, m_idx, m_name); | |
742 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
743 | + | |
679 | 744 | int count = 0; |
680 | 745 | if (((m_ptr->r_idx == MON_MORGOTH) || (m_ptr->r_idx == MON_SAURON) || (m_ptr->r_idx == MON_ANGMAR)) && ((r_info[MON_NAZGUL].cur_num + 2) < r_info[MON_NAZGUL].max_num) && mon_to_player) { |
681 | 746 | count += summon_NAZGUL(player_ptr, y, x, m_idx); |
@@ -686,7 +751,6 @@ MonsterSpellResult spell_RF6_S_HI_UNDEAD(PlayerType *player_ptr, POSITION y, POS | ||
686 | 751 | |
687 | 752 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
688 | 753 | |
689 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
690 | 754 | for (auto k = 0; k < S_NUM_6; k++) { |
691 | 755 | if (mon_to_player) |
692 | 756 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); |
@@ -722,16 +786,20 @@ MonsterSpellResult spell_RF6_S_HI_UNDEAD(PlayerType *player_ptr, POSITION y, POS | ||
722 | 786 | */ |
723 | 787 | MonsterSpellResult spell_RF6_S_HI_DRAGON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
724 | 788 | { |
789 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
790 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
791 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
792 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
793 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
794 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
795 | + | |
725 | 796 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
726 | 797 | _("%^sが魔法で古代ドラゴンを召喚した!", "%^s magically summons ancient dragons!"), |
727 | 798 | _("%^sが魔法で古代ドラゴンを召喚した!", "%^s magically summons ancient dragons!")); |
728 | 799 | |
729 | 800 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
801 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
730 | 802 | |
731 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
732 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
733 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
734 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
735 | 803 | int count = 0; |
736 | 804 | for (auto k = 0; k < S_NUM_4; k++) { |
737 | 805 | if (mon_to_player) |
@@ -767,17 +835,21 @@ MonsterSpellResult spell_RF6_S_HI_DRAGON(PlayerType *player_ptr, POSITION y, POS | ||
767 | 835 | */ |
768 | 836 | MonsterSpellResult spell_RF6_S_AMBERITES(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
769 | 837 | { |
838 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
839 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
840 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
841 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
842 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
843 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
844 | + | |
770 | 845 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
771 | 846 | _("%^sがアンバーの王族を召喚した!", "%^s magically summons Lords of Amber!"), |
772 | 847 | _("%^sがアンバーの王族を召喚した!", "%^s magically summons Lords of Amber!")); |
773 | 848 | |
774 | 849 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
850 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
775 | 851 | |
776 | 852 | int count = 0; |
777 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
778 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
779 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
780 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
781 | 853 | for (auto k = 0; k < S_NUM_4; k++) { |
782 | 854 | count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); |
783 | 855 | } |
@@ -808,17 +880,21 @@ MonsterSpellResult spell_RF6_S_AMBERITES(PlayerType *player_ptr, POSITION y, POS | ||
808 | 880 | */ |
809 | 881 | MonsterSpellResult spell_RF6_S_UNIQUE(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE) |
810 | 882 | { |
883 | + floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
884 | + DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
885 | + bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
886 | + bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
887 | + bool see_either = see_monster(player_ptr, m_idx) || see_monster(player_ptr, t_idx); | |
888 | + bool known = monster_near_player(floor_ptr, m_idx, t_idx); | |
889 | + | |
811 | 890 | mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), |
812 | 891 | _("%^sが魔法で特別な強敵を召喚した!", "%^s magically summons special opponents!"), |
813 | 892 | _("%^sが魔法で特別な強敵を召喚した!", "%^s magically summons special opponents!")); |
814 | 893 | |
815 | 894 | monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE); |
895 | + summon_disturb(player_ptr, TARGET_TYPE, known, see_either); | |
816 | 896 | |
817 | - floor_type *floor_ptr = player_ptr->current_floor_ptr; | |
818 | 897 | monster_type *m_ptr = &floor_ptr->m_list[m_idx]; |
819 | - DEPTH rlev = monster_level_idx(floor_ptr, m_idx); | |
820 | - bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER); | |
821 | - bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER); | |
822 | 898 | bool uniques_are_summoned = false; |
823 | 899 | int count = 0; |
824 | 900 | for (auto k = 0; k < S_NUM_4; k++) { |
@@ -17,7 +17,7 @@ | ||
17 | 17 | #define H_VER_MAJOR 3 //!< ゲームのバージョン定義(メジャー番号) |
18 | 18 | #define H_VER_MINOR 0 //!< ゲームのバージョン定義(マイナー番号) |
19 | 19 | #define H_VER_PATCH 0 //!< ゲームのバージョン定義(パッチ番号) |
20 | -#define H_VER_EXTRA 49 //!< ゲームのバージョン定義(エクストラ番号) | |
20 | +#define H_VER_EXTRA 50 //!< ゲームのバージョン定義(エクストラ番号) | |
21 | 21 | |
22 | 22 | /*! |
23 | 23 | * @brief セーブファイルのバージョン(3.0.0から導入) |
@@ -647,20 +647,12 @@ void wiz_learn_items_all(PlayerType *player_ptr) | ||
647 | 647 | */ |
648 | 648 | void wiz_reset_race(PlayerType *player_ptr) |
649 | 649 | { |
650 | - char ppp[80]; | |
651 | - sprintf(ppp, "Race (0-%d): ", MAX_RACES - 1); | |
652 | - | |
653 | - char tmp_val[160]; | |
654 | - sprintf(tmp_val, "%d", enum2i(player_ptr->prace)); | |
655 | - | |
656 | - if (!get_string(ppp, tmp_val, 2)) | |
657 | - return; | |
658 | - | |
659 | - int tmp_int = atoi(tmp_val); | |
660 | - if (tmp_int < 0 || tmp_int >= MAX_RACES) | |
650 | + int val = enum2i<PlayerRaceType>(player_ptr->prace); | |
651 | + if (!get_value("RaceID", 0, MAX_RACES - 1, &val)) { | |
661 | 652 | return; |
653 | + } | |
662 | 654 | |
663 | - player_ptr->prace = i2enum<PlayerRaceType>(tmp_int); | |
655 | + player_ptr->prace = i2enum<PlayerRaceType>(val); | |
664 | 656 | rp_ptr = &race_info[enum2i(player_ptr->prace)]; |
665 | 657 | |
666 | 658 | player_ptr->window_flags |= PW_PLAYER; |
@@ -675,23 +667,14 @@ void wiz_reset_race(PlayerType *player_ptr) | ||
675 | 667 | */ |
676 | 668 | void wiz_reset_class(PlayerType *player_ptr) |
677 | 669 | { |
678 | - char ppp[80]; | |
679 | - sprintf(ppp, "Class (0-%d): ", PLAYER_CLASS_TYPE_MAX - 1); | |
680 | - | |
681 | - char tmp_val[160]; | |
682 | - auto short_pclass = enum2i(player_ptr->pclass); | |
683 | - sprintf(tmp_val, "%d", short_pclass); | |
684 | - | |
685 | - if (!get_string(ppp, tmp_val, 2)) | |
686 | - return; | |
687 | - | |
688 | - int tmp_int = atoi(tmp_val); | |
689 | - if (tmp_int < 0 || tmp_int >= PLAYER_CLASS_TYPE_MAX) | |
670 | + int val = enum2i<PlayerClassType>(player_ptr->pclass); | |
671 | + if (!get_value("ClassID", 0, PLAYER_CLASS_TYPE_MAX - 1, &val)) { | |
690 | 672 | return; |
673 | + } | |
691 | 674 | |
692 | - player_ptr->pclass = i2enum<PlayerClassType>(tmp_int); | |
693 | - cp_ptr = &class_info[short_pclass]; | |
694 | - mp_ptr = &m_info[short_pclass]; | |
675 | + player_ptr->pclass = i2enum<PlayerClassType>(val); | |
676 | + cp_ptr = &class_info[val]; | |
677 | + mp_ptr = &m_info[val]; | |
695 | 678 | PlayerClass(player_ptr).init_specific_data(); |
696 | 679 | player_ptr->window_flags |= PW_PLAYER; |
697 | 680 | player_ptr->update |= PU_BONUS | PU_HP | PU_MANA | PU_SPELLS; |
@@ -705,24 +688,18 @@ void wiz_reset_class(PlayerType *player_ptr) | ||
705 | 688 | */ |
706 | 689 | void wiz_reset_realms(PlayerType *player_ptr) |
707 | 690 | { |
708 | - char ppp[80]; | |
709 | - char tmp_val[160]; | |
710 | - | |
711 | - sprintf(ppp, "1st Realm (None=0, 1-%d): ", MAX_REALM - 1); | |
712 | - sprintf(tmp_val, "%d", player_ptr->realm1); | |
713 | - if (!get_string(ppp, tmp_val, 2)) | |
691 | + int val1 = player_ptr->realm1; | |
692 | + if (!get_value("1st Realm (None=0)", 0, MAX_REALM - 1, &val1)) { | |
714 | 693 | return; |
694 | + } | |
715 | 695 | |
716 | - player_ptr->realm1 = static_cast<int16_t>(atoi(tmp_val)); | |
717 | - | |
718 | - PlayerClass(player_ptr).init_specific_data(); | |
719 | - | |
720 | - sprintf(ppp, "2st Realm (None=0, 1-%d): ", MAX_REALM - 1); | |
721 | - sprintf(tmp_val, "%d", player_ptr->realm2); | |
722 | - if (!get_string(ppp, tmp_val, 2)) | |
696 | + int val2 = player_ptr->realm2; | |
697 | + if (!get_value("2nd Realm (None=0)", 0, MAX_REALM - 1, &val2)) { | |
723 | 698 | return; |
699 | + } | |
724 | 700 | |
725 | - player_ptr->realm2 = static_cast<int16_t>(atoi(tmp_val)); | |
701 | + player_ptr->realm1 = static_cast<int16_t>(val1); | |
702 | + player_ptr->realm2 = static_cast<int16_t>(val2); | |
726 | 703 | player_ptr->window_flags |= PW_PLAYER; |
727 | 704 | player_ptr->update |= PU_BONUS | PU_HP | PU_MANA | PU_SPELLS; |
728 | 705 | player_ptr->redraw |= PR_BASIC; |