• R/O
  • HTTP
  • SSH
  • HTTPS

hengbandosx: 提交

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.


Commit MetaInfo

修订版7961e5f2b040b993e78251b9798a4f7f183ca66f (tree)
时间2022-01-09 23:24:20
作者Deskull <61610939+sikabane-works@user...>
CommiterGitHub

Log Message

Merge pull request #1973 from sikabane-works/release/3.0.0Alpha50

Release/3.0.0 alpha50

更改概述

差异

--- a/doxygen/Hengband.doxyfile
+++ b/doxygen/Hengband.doxyfile
@@ -38,7 +38,7 @@ PROJECT_NAME = Hengband
3838 # could be handy for archiving the generated documentation or if some version
3939 # control system is used.
4040
41-PROJECT_NUMBER = 3.0.0Alpha49
41+PROJECT_NUMBER = 3.0.0Alpha50
4242
4343 # Using the PROJECT_BRIEF tag one can provide an optional one line description
4444 # for a project that appears at the top of each page and should give viewer a
--- a/lib/edit/r_info.txt
+++ b/lib/edit/r_info.txt
@@ -16159,7 +16159,7 @@ B:HIT:HURT:1d50
1615916159 B:HIT:HURT:1d50
1616016160 B:HIT:HURT:1d50
1616116161 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 |
1616316163 F:IM_POIS | IM_FIRE | PREVENT_SUDDEN_MAGIC | FORCE_MAXHP | NONLIVING
1616416164 S:1_IN_4 |
1616516165 S:ROCKET
@@ -26647,4 +26647,49 @@ D:一見すると愛らしいただの白い兎であるが、
2664726647 D:この兎こそが聖杯の手がかりが眠る「カルバノグの洞窟」の守護者、伝説の黒き獣にして、
2664826648 D:全てのヴォーパルバニー、殺人兎の始祖である。
2664926649 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:蜘蛛のような機械の脚を持っている敵で、脳みそのような生き物を載せている。
--- a/src/knowledge/knowledge-monsters.cpp
+++ b/src/knowledge/knowledge-monsters.cpp
@@ -290,10 +290,9 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v
290290 TERM_LEN wid, hgt;
291291 term_get_size(&wid, &hgt);
292292 std::vector<MONRACE_IDX> mon_idx(r_info.size());
293+ std::vector<IDX> grp_idx;
293294
294295 int max = 0;
295- IDX grp_cnt = 0;
296- IDX grp_idx[100];
297296 IDX mon_cnt;
298297 bool visual_list = false;
299298 TERM_COLOR attr_top = 0;
@@ -309,7 +308,7 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v
309308 max = len;
310309
311310 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);
313312 }
314313 }
315314
@@ -323,7 +322,6 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v
323322 &r_info[direct_r_idx].x_char, need_redraw);
324323 }
325324
326- grp_idx[grp_cnt] = -1;
327325 mode = visual_only ? MONSTER_LORE_RESEARCH : MONSTER_LORE_NONE;
328326 IDX old_grp_cur = -1;
329327 IDX grp_cur = 0;
@@ -365,7 +363,7 @@ void do_cmd_knowledge_monsters(PlayerType *player_ptr, bool *need_redraw, bool v
365363 if (grp_cur >= grp_top + browser_rows)
366364 grp_top = grp_cur - browser_rows + 1;
367365
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);
369367 if (old_grp_cur != grp_cur) {
370368 old_grp_cur = grp_cur;
371369 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
386384 display_visual_list(max + 3, 7, browser_rows - 1, wid - (max + 3), attr_top, char_left);
387385 }
388386
387+ prt(format(_("%d 種", "%d Races"), mon_cnt), 3, 26);
389388 prt(format(_("<方向>%s%s%s, ESC", "<dir>%s%s%s, ESC"), (!visual_list && !visual_only) ? _(", 'r'で思い出を見る", ", 'r' to recall") : "",
390389 visual_list ? _(", ENTERで決定", ", ENTER to accept") : _(", 'v'でシンボル変更", ", 'v' for visuals"),
391390 (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
450449 }
451450
452451 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);
454453
455454 break;
456455 }
--- a/src/monster-attack/monster-attack-processor.cpp
+++ b/src/monster-attack/monster-attack-processor.cpp
@@ -22,6 +22,7 @@
2222 #include "system/monster-race-definition.h"
2323 #include "system/monster-type-definition.h"
2424 #include "system/player-type-definition.h"
25+#include "util/bit-flags-calculator.h"
2526
2627 /*!
2728 * @brief モンスターが移動した結果、そこにプレイヤーがいたら直接攻撃を行う
@@ -119,15 +120,24 @@ bool process_monster_attack_to_monster(PlayerType *player_ptr, turn_flags *turn_
119120
120121 monster_race *z_ptr = &r_info[y_ptr->r_idx];
121122 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+ {
125130 return exe_monster_attack_to_monster(player_ptr, m_idx, g_ptr);
126131 }
127132
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+ {
131141 turn_flags_ptr->do_move = true;
132142 turn_flags_ptr->did_move_body = true;
133143 (void)set_monster_csleep(player_ptr, g_ptr->m_idx, 0);
--- a/src/mspell/mspell-special.cpp
+++ b/src/mspell/mspell-special.cpp
@@ -51,6 +51,9 @@ static MonsterSpellResult spell_RF6_SPECIAL_BANORLUPART(PlayerType *player_ptr,
5151 POSITION dummy_x = m_ptr->fx;
5252 BIT_FLAGS mode = 0L;
5353
54+ if (see_monster(player_ptr, m_idx) && monster_near_player(floor_ptr, m_idx, 0))
55+ disturb(player_ptr, true, true);
56+
5457 switch (m_ptr->r_idx) {
5558 case MON_BANORLUPART:
5659 dummy_hp = (m_ptr->hp + 1) / 2;
@@ -114,10 +117,18 @@ static MonsterSpellResult spell_RF6_SPECIAL_ROLENTO(PlayerType *player_ptr, POSI
114117 int count = 0, k;
115118 int num = 1 + randint1(3);
116119 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+
117126 mspell_cast_msg_blind msg(_("%^sが何か大量に投げた。", "%^s spreads something."),
118127 _("%^sは手榴弾をばらまいた。", "%^s throws some hand grenades."), _("%^sは手榴弾をばらまいた。", "%^s throws some hand grenades."));
119128
120129 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);
121132
122133 for (k = 0; k < num; k++) {
123134 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
228239 monster_type *m_ptr = &floor_ptr->m_list[m_idx];
229240 monster_race *r_ptr = &r_info[m_ptr->r_idx];
230241
231- disturb(player_ptr, true, true);
232242 switch (m_ptr->r_idx) {
233243 case MON_OHMU:
234244 return MonsterSpellResult::make_invalid();
--- a/src/mspell/mspell-status.cpp
+++ b/src/mspell/mspell-status.cpp
@@ -589,8 +589,6 @@ MonsterSpellResult spell_RF6_HEAL(PlayerType *player_ptr, MONSTER_IDX m_idx, MON
589589 char m_poss[10];
590590 monster_desc(player_ptr, m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
591591
592- disturb(player_ptr, true, true);
593-
594592 msg.to_player_true = _("%^sが何かをつぶやいた。", "%^s mumbles.");
595593 msg.to_mons_true = _("%^sは自分の傷に念を集中した。", format("%%^s concentrates on %s wounds.", m_poss));
596594 msg.to_player_false = _("%^sが自分の傷に集中した。", format("%%^s concentrates on %s wounds.", m_poss));
--- a/src/mspell/mspell-summon.cpp
+++ b/src/mspell/mspell-summon.cpp
@@ -32,6 +32,23 @@ constexpr int S_NUM_6 = 6;
3232 constexpr int S_NUM_4 = 4;
3333
3434 /*!
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+/*!
3552 * @brief 特定条件のモンスター召喚のみPM_ALLOW_UNIQUEを許可する /
3653 * @param floor_ptr 現在フロアへの参照ポインタ
3754 * @param m_idx モンスターID
@@ -84,8 +101,7 @@ static void decide_summon_kin_caster(
84101 return;
85102 }
86103
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);
89105
90106 if (player_ptr->blind) {
91107 if (mon_to_player)
@@ -123,9 +139,12 @@ MonsterSpellResult spell_RF6_S_KIN(PlayerType *player_ptr, POSITION y, POSITION
123139 monster_name(player_ptr, m_idx, m_name);
124140 monster_name(player_ptr, t_idx, t_name);
125141 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);
128144 bool known = monster_near_player(floor_ptr, m_idx, t_idx);
145+
146+ summon_disturb(player_ptr, target_type, known, see_either);
147+
129148 decide_summon_kin_caster(player_ptr, m_idx, t_idx, target_type, m_name, m_poss, known);
130149 int count = 0;
131150 switch (m_ptr->r_idx) {
@@ -213,18 +232,21 @@ MonsterSpellResult spell_RF6_S_KIN(PlayerType *player_ptr, POSITION y, POSITION
213232 */
214233 MonsterSpellResult spell_RF6_S_CYBER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
215234 {
216- int count = 0;
217235 floor_type *floor_ptr = player_ptr->current_floor_ptr;
218236 monster_type *m_ptr = &floor_ptr->m_list[m_idx];
219237 DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
220238 bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
221239 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);
222242 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
223243 _("%^sがサイバーデーモンを召喚した!", "%^s magically summons Cyberdemons!"),
224244 _("%^sがサイバーデーモンを召喚した!", "%^s magically summons Cyberdemons!"));
225245
226246 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
247+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
227248
249+ int count = 0;
228250 if (is_friendly(m_ptr) && mon_to_mon) {
229251 count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
230252 } else {
@@ -256,16 +278,20 @@ MonsterSpellResult spell_RF6_S_CYBER(PlayerType *player_ptr, POSITION y, POSITIO
256278 */
257279 MonsterSpellResult spell_RF6_S_MONSTER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
258280 {
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+
259288 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法で仲間を召喚した!", "%^s magically summons help!"),
260289 _("%^sが魔法で仲間を召喚した!", "%^s magically summons help!"));
261290
262291 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
292+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
263293
264- floor_type *floor_ptr = player_ptr->current_floor_ptr;
265294 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);
269295 for (int k = 0; k < 1; k++) {
270296 if (mon_to_player)
271297 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
299325 */
300326 MonsterSpellResult spell_RF6_S_MONSTERS(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
301327 {
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+
302335 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
303336 _("%^sが魔法でモンスターを召喚した!", "%^s magically summons monsters!"), _("%^sが魔法でモンスターを召喚した!", "%^s magically summons monsters!"));
304337
305338 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
339+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
306340
307- floor_type *floor_ptr = player_ptr->current_floor_ptr;
308341 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);
312342 for (auto k = 0; k < S_NUM_6; k++) {
313343 if (mon_to_player)
314344 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
342372 */
343373 MonsterSpellResult spell_RF6_S_ANT(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
344374 {
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+
345382 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法でアリを召喚した。", "%^s magically summons ants."),
346383 _("%^sが魔法でアリを召喚した。", "%^s magically summons ants."));
347384
348385 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
386+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
349387
350388 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);
355389 for (auto k = 0; k < S_NUM_6; k++) {
356390 count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP);
357391 }
@@ -381,16 +415,20 @@ MonsterSpellResult spell_RF6_S_ANT(PlayerType *player_ptr, POSITION y, POSITION
381415 */
382416 MonsterSpellResult spell_RF6_S_SPIDER(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
383417 {
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+
384425 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."), _("%^sが魔法でクモを召喚した。", "%^s magically summons spiders."),
385426 _("%^sが魔法でクモを召喚した。", "%^s magically summons spiders."));
386427
387428 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
429+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
388430
389431 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);
394432 for (auto k = 0; k < S_NUM_6; k++) {
395433 count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP);
396434 }
@@ -420,16 +458,20 @@ MonsterSpellResult spell_RF6_S_SPIDER(PlayerType *player_ptr, POSITION y, POSITI
420458 */
421459 MonsterSpellResult spell_RF6_S_HOUND(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
422460 {
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+
423468 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
424469 _("%^sが魔法でハウンドを召喚した。", "%^s magically summons hounds."), _("%^sが魔法でハウンドを召喚した。", "%^s magically summons hounds."));
425470
426471 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
472+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
427473
428474 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);
433475 for (auto k = 0; k < S_NUM_4; k++) {
434476 count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP);
435477 }
@@ -459,16 +501,20 @@ MonsterSpellResult spell_RF6_S_HOUND(PlayerType *player_ptr, POSITION y, POSITIO
459501 */
460502 MonsterSpellResult spell_RF6_S_HYDRA(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
461503 {
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+
462511 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
463512 _("%^sが魔法でヒドラを召喚した。", "%^s magically summons hydras."), _("%^sが魔法でヒドラを召喚した。", "%^s magically summons hydras."));
464513
465514 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
515+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
466516
467517 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);
472518 for (auto k = 0; k < S_NUM_4; k++) {
473519 count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP);
474520 }
@@ -498,12 +544,18 @@ MonsterSpellResult spell_RF6_S_HYDRA(PlayerType *player_ptr, POSITION y, POSITIO
498544 */
499545 MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
500546 {
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+
501553 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
502554 _("%^sが魔法で天使を召喚した!", "%^s magically summons an angel!"), _("%^sが魔法で天使を召喚した!", "%^s magically summons an angel!"));
503555
504556 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
557+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
505558
506- floor_type *floor_ptr = player_ptr->current_floor_ptr;
507559 monster_type *m_ptr = &floor_ptr->m_list[m_idx];
508560 monster_race *r_ptr = &r_info[m_ptr->r_idx];
509561 int num = 1;
@@ -511,7 +563,6 @@ MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITIO
511563 num += r_ptr->level / 40;
512564 }
513565
514- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
515566 int count = 0;
516567 for (int k = 0; k < num; k++) {
517568 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
525576 msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby."));
526577 }
527578
528- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
529579 if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon)
530580 floor_ptr->monster_noise = true;
531581
@@ -548,14 +598,19 @@ MonsterSpellResult spell_RF6_S_ANGEL(PlayerType *player_ptr, POSITION y, POSITIO
548598 */
549599 MonsterSpellResult spell_RF6_S_DEMON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
550600 {
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+
551607 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
552608 _("%^sは魔法で混沌の宮廷から悪魔を召喚した!", "%^s magically summons a demon from the Courts of Chaos!"),
553609 _("%^sは魔法で混沌の宮廷から悪魔を召喚した!", "%^s magically summons a demon from the Courts of Chaos!"));
554610
555611 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
612+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
556613
557- floor_type *floor_ptr = player_ptr->current_floor_ptr;
558- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
559614 int count = 0;
560615 for (int k = 0; k < 1; k++) {
561616 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
564619 if (player_ptr->blind && count)
565620 msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby."));
566621
567- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
568622 if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon)
569623 floor_ptr->monster_noise = true;
570624
@@ -587,14 +641,19 @@ MonsterSpellResult spell_RF6_S_DEMON(PlayerType *player_ptr, POSITION y, POSITIO
587641 */
588642 MonsterSpellResult spell_RF6_S_UNDEAD(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
589643 {
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+
590650 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
591651 _("%^sが魔法でアンデッドの強敵を召喚した!", "%^s magically summons an undead adversary!"),
592652 _("%sが魔法でアンデッドを召喚した。", "%^s magically summons undead."));
593653
594654 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
655+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
595656
596- floor_type *floor_ptr = player_ptr->current_floor_ptr;
597- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
598657 int count = 0;
599658 for (int k = 0; k < 1; k++) {
600659 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
603662 if (player_ptr->blind && count)
604663 msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby."));
605664
606- bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
607665 if (monster_near_player(floor_ptr, m_idx, t_idx) && !see_monster(player_ptr, t_idx) && count && mon_to_mon)
608666 floor_ptr->monster_noise = true;
609667
@@ -626,15 +684,19 @@ MonsterSpellResult spell_RF6_S_UNDEAD(PlayerType *player_ptr, POSITION y, POSITI
626684 */
627685 MonsterSpellResult spell_RF6_S_DRAGON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
628686 {
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+
629694 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
630695 _("%^sが魔法でドラゴンを召喚した!", "%^s magically summons a dragon!"), _("%^sが魔法でドラゴンを召喚した!", "%^s magically summons a dragon!"));
631696
632697 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
698+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
633699
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);
638700 int count = 0;
639701 if (mon_to_player)
640702 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
667729 */
668730 MonsterSpellResult spell_RF6_S_HI_UNDEAD(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
669731 {
670- GAME_TEXT m_name[MAX_NLEN];
671- monster_name(player_ptr, m_idx, m_name);
672-
673- disturb(player_ptr, true, true);
674-
675732 floor_type *floor_ptr = player_ptr->current_floor_ptr;
676733 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);
678735 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+
679744 int count = 0;
680745 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) {
681746 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
686751
687752 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
688753
689- DEPTH rlev = monster_level_idx(floor_ptr, m_idx);
690754 for (auto k = 0; k < S_NUM_6; k++) {
691755 if (mon_to_player)
692756 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
722786 */
723787 MonsterSpellResult spell_RF6_S_HI_DRAGON(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
724788 {
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+
725796 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
726797 _("%^sが魔法で古代ドラゴンを召喚した!", "%^s magically summons ancient dragons!"),
727798 _("%^sが魔法で古代ドラゴンを召喚した!", "%^s magically summons ancient dragons!"));
728799
729800 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
801+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
730802
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);
735803 int count = 0;
736804 for (auto k = 0; k < S_NUM_4; k++) {
737805 if (mon_to_player)
@@ -767,17 +835,21 @@ MonsterSpellResult spell_RF6_S_HI_DRAGON(PlayerType *player_ptr, POSITION y, POS
767835 */
768836 MonsterSpellResult spell_RF6_S_AMBERITES(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
769837 {
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+
770845 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
771846 _("%^sがアンバーの王族を召喚した!", "%^s magically summons Lords of Amber!"),
772847 _("%^sがアンバーの王族を召喚した!", "%^s magically summons Lords of Amber!"));
773848
774849 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
850+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
775851
776852 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);
781853 for (auto k = 0; k < S_NUM_4; k++) {
782854 count += summon_specific(player_ptr, m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
783855 }
@@ -808,17 +880,21 @@ MonsterSpellResult spell_RF6_S_AMBERITES(PlayerType *player_ptr, POSITION y, POS
808880 */
809881 MonsterSpellResult spell_RF6_S_UNIQUE(PlayerType *player_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
810882 {
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+
811890 mspell_cast_msg_blind msg(_("%^sが何かをつぶやいた。", "%^s mumbles."),
812891 _("%^sが魔法で特別な強敵を召喚した!", "%^s magically summons special opponents!"),
813892 _("%^sが魔法で特別な強敵を召喚した!", "%^s magically summons special opponents!"));
814893
815894 monspell_message(player_ptr, m_idx, t_idx, msg, TARGET_TYPE);
895+ summon_disturb(player_ptr, TARGET_TYPE, known, see_either);
816896
817- floor_type *floor_ptr = player_ptr->current_floor_ptr;
818897 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);
822898 bool uniques_are_summoned = false;
823899 int count = 0;
824900 for (auto k = 0; k < S_NUM_4; k++) {
--- a/src/system/angband-version.h
+++ b/src/system/angband-version.h
@@ -17,7 +17,7 @@
1717 #define H_VER_MAJOR 3 //!< ゲームのバージョン定義(メジャー番号)
1818 #define H_VER_MINOR 0 //!< ゲームのバージョン定義(マイナー番号)
1919 #define H_VER_PATCH 0 //!< ゲームのバージョン定義(パッチ番号)
20-#define H_VER_EXTRA 49 //!< ゲームのバージョン定義(エクストラ番号)
20+#define H_VER_EXTRA 50 //!< ゲームのバージョン定義(エクストラ番号)
2121
2222 /*!
2323 * @brief セーブファイルのバージョン(3.0.0から導入)
--- a/src/wizard/wizard-special-process.cpp
+++ b/src/wizard/wizard-special-process.cpp
@@ -647,20 +647,12 @@ void wiz_learn_items_all(PlayerType *player_ptr)
647647 */
648648 void wiz_reset_race(PlayerType *player_ptr)
649649 {
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)) {
661652 return;
653+ }
662654
663- player_ptr->prace = i2enum<PlayerRaceType>(tmp_int);
655+ player_ptr->prace = i2enum<PlayerRaceType>(val);
664656 rp_ptr = &race_info[enum2i(player_ptr->prace)];
665657
666658 player_ptr->window_flags |= PW_PLAYER;
@@ -675,23 +667,14 @@ void wiz_reset_race(PlayerType *player_ptr)
675667 */
676668 void wiz_reset_class(PlayerType *player_ptr)
677669 {
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)) {
690672 return;
673+ }
691674
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];
695678 PlayerClass(player_ptr).init_specific_data();
696679 player_ptr->window_flags |= PW_PLAYER;
697680 player_ptr->update |= PU_BONUS | PU_HP | PU_MANA | PU_SPELLS;
@@ -705,24 +688,18 @@ void wiz_reset_class(PlayerType *player_ptr)
705688 */
706689 void wiz_reset_realms(PlayerType *player_ptr)
707690 {
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)) {
714693 return;
694+ }
715695
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)) {
723698 return;
699+ }
724700
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);
726703 player_ptr->window_flags |= PW_PLAYER;
727704 player_ptr->update |= PU_BONUS | PU_HP | PU_MANA | PU_SPELLS;
728705 player_ptr->redraw |= PR_BASIC;
Show on old repository browser