• R/O
  • HTTP
  • SSH
  • HTTPS

hengband: コミット

変愚蛮怒のメインリポジトリです


コミットメタ情報

リビジョンb01d30ce834d4dc5cac22246efca3867f129c10f (tree)
日時2002-08-28 00:02:14
作者(no author) <(no author)@0568...>
コミッター(no author)

ログメッセージ

This commit was manufactured by cvs2svn to create tag
'hengband-1-2-0'.

変更サマリ

差分

--- a/autopick.txt
+++ b/autopick.txt
@@ -24,6 +24,10 @@
2424 # ^I : 持ち物/装備からアイテムを選んでその名前を挿入します。
2525 # ^S : カーソル位置のアイテムの 拾う/破壊/放置 の切り換え
2626 # ^U : 未鑑定/*未鑑定*/鑑定済み/*鑑定*済み の制限の切り換え
27+# ^L : 最後に自動破壊したアイテムの名前を挿入。
28+# '/' : 検索。続けて ^I か ^L を押すと直接指定したアイテムを検索します。
29+# 'n' : 次にマッチする行を検索。(条件分岐を考慮しません)
30+# 'N' : 前にマッチする行を検索。(条件分岐を考慮しません)
2731 #
2832 # 設定は全て変愚蛮怒ディレクトリの中の lib\user\ の下か
2933 # ~/.angband/Hengband/ の下に「picktype-(名前).prf」 という名前の
--- a/autopick_eng.txt
+++ b/autopick_eng.txt
@@ -23,6 +23,10 @@
2323 # ^I : Choose an item from inventry/equipment, then insert its name
2424 # ^S : Rotates action (pick up / destroy / leave on floor)
2525 # ^U : Rotates idendify state (identified / unidentified / ...)
26+# ^L : Insert name of the last auto-destroyed item.
27+# '/' : Search string, or search an item specified by ^I or ^L.
28+# 'n' : Search next
29+# 'N' : Search previous
2630 #
2731 # The preference will be saved in a file named
2832 # "pickpref-<<name>>.prf" in your user directory; This will be
--- a/configure.in
+++ b/configure.in
@@ -3,7 +3,7 @@ AC_INIT(src/main.c)
33
44 AM_CONFIG_HEADER(src/autoconf.h)
55
6-AM_INIT_AUTOMAKE(hengband, 1.1.0b)
6+AM_INIT_AUTOMAKE(hengband, 1.2.0)
77
88 AC_ARG_WITH(setgid,
99 [ --with-setgid=NAME install hengband as group NAME],
--- a/lib/edit/d_info_j.txt
+++ b/lib/edit/d_info_j.txt
@@ -66,7 +66,7 @@ F:MONSTER_DIV_64
6666
6767 N:2:イークの洞穴
6868 E:Yeek cave
69-D:$the entrace to the cave leading to the Yeek's den
69+D:$the entrance to the cave leading to the Yeek's den
7070 D:イークの住みかへと続く小さな洞穴
7171 P:48:5
7272 W:1:13:1:0:14:240:75:20:0x0000:0x0000
--- a/lib/edit/r_info_j.txt
+++ b/lib/edit/r_info_j.txt
@@ -18542,7 +18542,7 @@ I:110:10d15:20:34:50
1854218542 W:21:2:0:100:800:415
1854318543 B:HIT:SUPERHURT:4d8
1854418544 B:HIT:SUPERHURT:4d8
18545-F:RAND_25 | DROP_90 | OPEN_DOOR | BASH_DOOR | DROP_CORPSE | EVIL | MOVE_BODY
18545+F:RAND_25 | DROP_90 | OPEN_DOOR | BASH_DOOR | DROP_CORPSE | EVIL | GIANT | MOVE_BODY
1854618546 F:WILD_WASTE
1854718547 D:$It is a massive ogre in metal armour, a champion of its kind.
1854818548 D:金属の鎧に身を包んだ力強いオーガであり、同族の中で最も強力だ。
--- a/lib/file/news.txt
+++ b/lib/file/news.txt
@@ -1,6 +1,6 @@
11
22 ****************************************
3- ** Hengband 1.1.0b **
3+ ** Hengband 1.2.0 **
44 ****************************************
55
66 Based on Moria: Copyright (c) 1985 Robert Alan Koeneke
--- a/lib/file/news_j.txt
+++ b/lib/file/news_j.txt
@@ -1,6 +1,6 @@
11
22 ***************************************
3- ** 変愚蛮怒 1.1.0b **
3+ ** 変愚蛮怒 1.2.0 **
44 ***************************************
55
66 Based on Moria: Copyright (c) 1985 Robert Alan Koeneke
--- a/lib/help/birth.txt
+++ b/lib/help/birth.txt
@@ -109,9 +109,9 @@ of magical means.
109109
110110 Each character has spell points, or mana, which represents how many
111111 spells a character can cast. Your spell points (sometimes called
112-mana) are derived from your class, level and a primary stat of your
113-class. Spell points may be regained by resting, or by a few magical
114-means.
112+mana) are derived from your class, level, a primary stat of your
113+class, and race modifier of that stat. Spell points may be regained
114+by resting, or by a few magical means.
115115
116116 --- Character Skills ---
117117
--- a/lib/help/commdesc.txt
+++ b/lib/help/commdesc.txt
@@ -655,9 +655,13 @@ Edit auto-picker/destroyer pref (_)
655655 'q' : Quit the editor (command mode only)
656656 'hjkl2468' : Move cursor (command mode only)
657657 ^B ^N ^P ^F : Move cursor (always)
658- ^I : Choose an item from inventry/equipment, then insert its name
658+ ^I : Choose an item from inventry/equipment, then insert its name.
659659 ^S : Rotates action (pick up / destroy / leave on floor)
660660 ^U : Rotates idendify state (identified / unidentified / ...)
661+ ^L : Insert name of the last auto-destroyed item.
662+ '/' : Search string, or search an item specified by ^I or ^L.
663+ 'n' : Search next
664+ 'N' : Search previous
661665
662666
663667 ***** <Help>
--- a/lib/help/jbirth.txt
+++ b/lib/help/jbirth.txt
@@ -98,9 +98,9 @@
9898 --- マジックポイント (マナ) ---
9999
100100 マジックポイント(またはマナ、以下MP)はキャラクタが唱えられる呪文(祈
101-り)の量を表しています。MPは職業、レベル、そして職業によって決められた
102-1つの主要能力値によって決まります。MPは休息、その他魔法的な方法で回復
103-できます。
101+り)の量を表しています。MPは職業、レベル、職業によって決められた1つの
102+主要能力値と、その種族補正値によって決まります。MPは休息、その他魔法的
103+な方法で回復できます。
104104
105105 --- キャラクターの技能 ---
106106
--- a/lib/help/jcommdesc.txt
+++ b/lib/help/jcommdesc.txt
@@ -627,8 +627,12 @@
627627 'hjkl2468' : カーソルを移動します。(コマンドモードのみ)
628628 ^B ^N ^P ^F : カーソルを移動します。(いつでも使えます)
629629 ^I : 持ち物/装備からアイテムを選んでその名前を挿入します。
630- ^S : カーソル位置のアイテムの 拾う/破壊/放置 の切り換え
631- ^U : 未鑑定/*未鑑定*/鑑定済み/*鑑定*済み の制限の切り換え
630+ ^S : カーソル位置のアイテムの 拾う/破壊/放置 の切り換え。
631+ ^U : 未鑑定/*未鑑定*/鑑定済み/*鑑定*済み の制限の切り換え。
632+ ^L : 最後に自動破壊したアイテムの名前を挿入。
633+ '/' : 検索。続けて ^I か ^L を押すと直接指定したアイテムを検索します。
634+ 'n' : 次にマッチする行を検索。(条件分岐を考慮しません)
635+ 'N' : 前にマッチする行を検索。(条件分岐を考慮しません)
632636
633637
634638 ***** <Help>
--- a/lib/help/jversion.txt
+++ b/lib/help/jversion.txt
@@ -6,6 +6,43 @@
66 バージョン履歴
77 --------------
88
9+2002/08/28 Ver. 1.3.0 (開発版ブランチ)
10+ 新しい部屋:罠ピットを追加。
11+ アイテムのフラグの内部仕様変更:
12+ モンスターの種類別のESP導入(UnangbandやToMEより)。追加能力で付く事がある。
13+ *スレイ*フラグ各種を実装。エゴや★に付加。
14+ 'C'コマンドで、ESPや*スレイ*やその他のフラグを新しい4ページ目に表示。
15+ 鍛冶師が各種*スレイ*と各種ESPを付けられるようにした。
16+ モンスターの思い出を2個所で改行して見易くした。
17+ アンドロイドの経験値を「強化度」という名前で表示するようにした。
18+ 自動拾いエディタ起動中にはプレイ時間のカウントが進まないようにした。
19+ キャラクターダンプにクエストの達成状況を追加。
20+ サイコメトリーの直後に自動破壊を適用する。
21+ 確認メッセージの後に自動拾いする設定(';'記号)を導入した。
22+ オプション設定中とキャラ作成中に'?'キーで現在の状況に応じたヘルプを表示。
23+
24+2002/08/28 Ver. 1.2.0 (安定版ブランチ)
25+ 山のダンジョンの主としてソロンドールを配置。大鷲系モンスターは全て強化。
26+ 簡易鑑定や普通の鑑定を後で自動破壊を適用するかどうかをオプションで設定。
27+ 値切りを初期オプションにしてゲーム中に変更できなくした。
28+ 自動拾いエディタ(「_」キーで起動)を改良:
29+ 自動拾いエディタの行の説明文に % や %all 等の説明追加。
30+ 検索コマンド"/"実装。"/^I"や"/^L"で選択したアイテムに一致する行検索。
31+ "n"で次を検索。"N"で後方を検索。
32+ コマンドモードで複数の行の自動拾い設定を切り変えるコマンド:"!","~",";","("導入。
33+ "^K"で空行を含む複数行をカットして"^Y"でペーストすると空行も含めて張り付ける。
34+ picktype.prfだけを使っているとき勝手にpicktype-<名前>.prfを作らないようにした。
35+ エディタ起動時にゲームを自動セーブする。
36+ 鏡が壊れたら前の地形になるようにした.
37+ 魔道具術師もBrowseコマンドで呪文(魔法道具)の説明を見られるようにした。
38+ 1.1.0から光と暗闇の魔法の範囲が広かったが、暗闇生成は1.1.0RC2までの範囲に戻した。
39+ アイテム選択時に'('と')'で1つ目と最後のアイテムを選択するようにした。
40+ ')'コマンドの画面写真をキャンセル可能にした。
41+ 階段で地上に出るときはダンジョンの時とメッセージを変える。
42+ ドルジの経験値が多過ぎるので半減。
43+ ヘルプの性格の説明に、ヒットポイントと呪文の失敗率への影響についての説明を追加。
44+ 大量にバグ修正。
45+
946 2002/06/15 Ver. 1.1.0
1047 ライトエリアは広い場所では大きく照らす
1148 バグ修正やバランス調整などを行って正式版に
--- a/lib/help/raceclas.txt
+++ b/lib/help/raceclas.txt
@@ -470,7 +470,7 @@ command("U"/"O").
470470
471471 Priest can select from Life, Death, Daemon, or Crusade as a first
472472 realm, and choose second realm almost freely. But pairs of a good
473- magic and a bad magic from these four realms are are not allowed.
473+ magic and an evil magic from these four realms are not allowed.
474474 Priests can learn all spells in the selected realms, even if not
475475 as efficiently as mages. However, when learning spells, priests
476476 cannot voluntarily decide which spells to study: they are rewarded
@@ -1217,4 +1217,4 @@ the 50th level.
12171217
12181218
12191219 --
1220-Updated : Hengband 1.1.0
1220+Updated : Hengband 1.2.0
--- a/lib/help/version.txt
+++ b/lib/help/version.txt
@@ -1,4 +1,55 @@
1-=== History of Hengband from 1.0.7 to 1.1.0 ===
1+=== History of Hengband from 1.0.7 to 1.3.0 ===
2+
3+ Aug. 28th, 2002 hengband 1.3.0 (Development branch) released.
4+
5+- Added a new room type; trapped monster pit.
6+- Added object flags of various ESPs. (from Unangband and ToME)
7+- Every slay flags now have corresponding *slay* flags.
8+- The 'C' command display ESPs, Slays and 'other' flags on a new page.
9+- Now Weaponsmiths can attach ESPs and *slay*s on equipments.
10+- Inserted new-lines after first two paragraphs of monster-recall.
11+- 'Experience' of Andoroid is now displayed as construction point.
12+- Counting of play time will stop within the auto-picker editor.
13+- Wrote quest information in character dump file.
14+- Apply auto-destroy just after using Psychometry.
15+- Added new command letter ';' of auto-picker/destroyer which forces
16+ the game to ask if you want to pick the item up. (Thanks to Kieron)
17+- The '?' key shows you contextual help while option setting and
18+ character making.(from Eyangband)
19+
20+
21+ Aug. 28th, 2002 hengband 1.2.0 (Stable branch) released.
22+
23+- Fixed many bugs
24+- Splited version tree into two branch;
25+ development version: 1.3.x and stable version: 1.2.x.
26+- Introduced save-file-version which is independent from actual
27+ version number of the game.
28+- Placed Thorondor at level 50 of the Mountain dungeon as a master.
29+- Strengthened all greater eagles very much.
30+- Added new options: destroy_feeling and destroy_identify which
31+ control whether auto-destroy will be applied just after pseudo
32+ identify or identify.
33+- Moved manual_haggle option into birth option from game option.
34+- A mirror made by mirror-master will change back to original terrain
35+ when the mirror is broken.
36+- Added description of every spells of Magic-eater.
37+- Area of Darkness spell was changed back to same as 1.1.0RC2.
38+- You can use '(' and ')' key as first or last item on item selection.
39+- Changed message text at climbing up to surface level.
40+- Halved experience of drujs.
41+- Added more descriptions of personalities on help file and character
42+ making screen.
43+
44+Modifications for auto-picker/destroyer editor:
45+- Added descriptions about function of {%} and {%all}.
46+- Added search commands '/', 'n', 'N' on the editor.
47+- New commands '~', '!', ';', '(' which repeatedly add or remove
48+ corresponding command letter.
49+- The game no longer creates pickpref-<player's name>.prf when
50+ pickpref.prf is already exist.
51+- Do auto-save the game at starting the editor.
52+
253
354 Jun. 15th, 2002 hengband 1.1.0 released.
455
@@ -883,4 +934,4 @@ Angband Version 2.7 : 1/1/95 Ben Harrison
883934 Original : (??)
884935 Updated : (??)
885936 Updated : Zangband DevTeam
886-Updated : Hengband 1.0.11
937+Updated : Hengband 1.3.0
--- a/lib/pref/pickpref.prf
+++ b/lib/pref/pickpref.prf
@@ -1,5 +1,5 @@
11 #
2-# Sample preference of the Object Auto-picker/Destroyer
2+# Sample Preference of the Object Auto-picker/Destroyer
33 #
44 # Important commands
55 # a i ^Q : Insert mode
@@ -10,6 +10,10 @@
1010 # ^I : Choose from inventry/equipment
1111 # ^S : pick up / destroy / leave on floor
1212 # ^U : identified / unidentified / ...
13+# ^L : Insert name of the last auto-destroyed item.
14+# '/' : Search string, or search an item specified by ^I or ^L.
15+# 'n' : Search next
16+# 'N' : Search previous
1317 #
1418
1519 wanted corpse
--- a/lib/pref/picktype.prf
+++ b/lib/pref/picktype.prf
@@ -10,6 +10,10 @@
1010 # ^I : 持ち物/装備から選んで名前を挿入
1111 # ^S : 拾う/破壊/放置 の切り換え
1212 # ^U : 未鑑定/*未鑑定*/鑑定済み/*鑑定*済み
13+# ^L : 最後に自動破壊したアイテムの名前を挿入。
14+# '/' : 検索。続けて ^I か ^L を押すと直接指定したアイテムを検索します。
15+# 'n' : 次にマッチする行を検索。(条件分岐を考慮しません)
16+# 'N' : 前にマッチする行を検索。(条件分岐を考慮しません)
1317 #
1418
1519 賞金首の死体
--- a/src/autopick.c
+++ b/src/autopick.c
@@ -67,7 +67,17 @@ static object_type autopick_last_destroyed_object;
6767 #ifdef JP
6868
6969 #define KEY_ALL "すべての"
70+
71+#ifdef MAC_MPW
72+/*
73+ * MEGA HACK -- MPWのバグ除け。
74+ * pre-process中に「収」の字の2バイト目が勝手に消えてしまう。
75+ */
76+#define KEY_COLLECTING "\x8e\xfb集中の"
77+#else
7078 #define KEY_COLLECTING "収集中の"
79+#endif
80+
7181 #define KEY_UNIDENTIFIED "未鑑定の"
7282 #define KEY_IDENTIFIED "鑑定済みの"
7383 #define KEY_STAR_IDENTIFIED "*鑑定*済みの"
@@ -387,7 +397,7 @@ bool autopick_new_entry(autopick_type *entry, cptr str)
387397 /* Skip empty line */
388398 if (*buf == 0) return FALSE;
389399
390- ptr = buf;
400+ ptr = prev_ptr = buf;
391401 old_ptr = NULL;
392402
393403 while (old_ptr != ptr)
@@ -412,7 +422,7 @@ bool autopick_new_entry(autopick_type *entry, cptr str)
412422 while (' ' == *ptr) ptr++;
413423
414424 /* Read number */
415- while (isdigit(*ptr))
425+ while ('0' <= *ptr && *ptr <= '9')
416426 {
417427 entry->dice = 10 * entry->dice + (*ptr - '0');
418428 ptr++;
@@ -438,7 +448,7 @@ bool autopick_new_entry(autopick_type *entry, cptr str)
438448 while (' ' == *ptr) ptr++;
439449
440450 /* Read number */
441- while (isdigit(*ptr))
451+ while ('0' <= *ptr && *ptr <= '9')
442452 {
443453 entry->bonus = 10 * entry->bonus + (*ptr - '0');
444454 ptr++;
@@ -575,7 +585,7 @@ static bool is_autopick_aux(object_type *o_ptr, autopick_type *entry, cptr o_nam
575585 }
576586 }
577587
578- /*** Weapons whic dd*ds is more than nn ***/
588+ /*** Weapons which dd*ds is more than nn ***/
579589 if (IS_FLG(FLG_MORE_THAN))
580590 {
581591 if (o_ptr->dd * o_ptr->ds < entry->dice)
@@ -2305,6 +2315,48 @@ void init_autopicker(void)
23052315 }
23062316
23072317
2318+
2319+/*
2320+ * Process line for auto picker/destroyer.
2321+ */
2322+errr process_pickpref_file_line(char *buf)
2323+{
2324+ autopick_type entry;
2325+ int i;
2326+
2327+ if (max_autopick == MAX_AUTOPICK)
2328+ return 1;
2329+
2330+ /* Nuke illegal char */
2331+ for(i = 0; buf[i]; i++)
2332+ {
2333+#ifdef JP
2334+ if (iskanji(buf[i]))
2335+ {
2336+ i++;
2337+ continue;
2338+ }
2339+#endif
2340+ if (isspace(buf[i]) && buf[i] != ' ')
2341+ break;
2342+ }
2343+ buf[i] = 0;
2344+
2345+ if (!autopick_new_entry(&entry, buf)) return 0;
2346+
2347+ /* Already has the same entry? */
2348+ for(i = 0; i < max_autopick; i++)
2349+ if(!strcmp(entry.name, autopick_list[i].name)
2350+ && entry.flag[0] == autopick_list[i].flag[0]
2351+ && entry.flag[1] == autopick_list[i].flag[1]
2352+ && entry.dice == autopick_list[i].dice
2353+ && entry.bonus == autopick_list[i].bonus) return 0;
2354+
2355+ autopick_list[max_autopick++] = entry;
2356+ return 0;
2357+}
2358+
2359+
23082360 /*
23092361 * Get a trigger key and insert ASCII string for the trigger
23102362 */
@@ -3554,7 +3606,7 @@ void do_cmd_edit_autopick(void)
35543606 break;
35553607 }
35563608
3557- for (i = j = 0; lines_list[cy][i] && i < cx; i++)
3609+ for (i = j = k = 0; lines_list[cy][i] && i < cx; i++)
35583610 {
35593611 k = j;
35603612 #ifdef JP
--- a/src/cave.c
+++ b/src/cave.c
@@ -1940,7 +1940,7 @@ void note_spot(int y, int x)
19401940 if ((c_ptr->feat <= FEAT_INVIS) || (c_ptr->feat == FEAT_DIRT) || (c_ptr->feat == FEAT_GRASS))
19411941 {
19421942 /* Option -- memorize all torch-lit floors */
1943- if (view_torch_grids && (c_ptr->info & (CAVE_LITE)))
1943+ if (view_torch_grids && (c_ptr->info & (CAVE_LITE | CAVE_MNLT)))
19441944 {
19451945 /* Memorize */
19461946 c_ptr->info |= (CAVE_MARK);
@@ -1962,7 +1962,7 @@ void note_spot(int y, int x)
19621962 }
19631963
19641964 /* Memorize torch-lit walls */
1965- else if (c_ptr->info & (CAVE_LITE))
1965+ else if (c_ptr->info & (CAVE_LITE | CAVE_MNLT))
19661966 {
19671967 /* Memorize */
19681968 c_ptr->info |= (CAVE_MARK);
--- a/src/cmd1.c
+++ b/src/cmd1.c
@@ -1246,9 +1246,9 @@ static void hit_trap(bool break_trap)
12461246
12471247 dam = damroll(4, 6);
12481248 #ifdef JP
1249- fire_dam(dam, "炎のトラップ", -1);
1249+ (void)fire_dam(dam, "炎のトラップ", -1);
12501250 #else
1251- fire_dam(dam, "a fire trap", -1);
1251+ (void)fire_dam(dam, "a fire trap", -1);
12521252 #endif
12531253
12541254 break;
@@ -1264,9 +1264,9 @@ static void hit_trap(bool break_trap)
12641264
12651265 dam = damroll(4, 6);
12661266 #ifdef JP
1267- acid_dam(dam, "酸のトラップ", -1);
1267+ (void)acid_dam(dam, "酸のトラップ", -1);
12681268 #else
1269- acid_dam(dam, "an acid trap", -1);
1269+ (void)acid_dam(dam, "an acid trap", -1);
12701270 #endif
12711271
12721272 break;
@@ -2874,6 +2874,8 @@ msg_format("
28742874 }
28752875 k += (p_ptr->to_d[hand] + o_ptr->to_d);
28762876
2877+ if (k < 0) k = 0;
2878+
28772879 #ifdef JP
28782880 take_hit(DAMAGE_FORCE, k, "死の大鎌", -1);
28792881 #else
--- a/src/cmd6.c
+++ b/src/cmd6.c
@@ -3723,17 +3723,6 @@ static bool item_tester_hook_activate(object_type *o_ptr)
37233723 /* Check activation flag */
37243724 if (f3 & (TR3_ACTIVATE)) return (TRUE);
37253725
3726- if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
3727- {
3728- switch(o_ptr->xtra3)
3729- case ESSENCE_TMP_RES_ACID:
3730- case ESSENCE_TMP_RES_ELEC:
3731- case ESSENCE_TMP_RES_FIRE:
3732- case ESSENCE_TMP_RES_COLD:
3733- case ESSENCE_EARTHQUAKE:
3734- return (TRUE);
3735- }
3736-
37373726 /* Assume not */
37383727 return (FALSE);
37393728 }
--- a/src/defines.h
+++ b/src/defines.h
@@ -46,8 +46,8 @@
4646 /* Added for ZAngband */
4747 #define FAKE_VERSION 0
4848 #define FAKE_VER_MAJOR 11
49-#define FAKE_VER_MINOR 1
50-#define FAKE_VER_PATCH 1
49+#define FAKE_VER_MINOR 2
50+#define FAKE_VER_PATCH 0
5151
5252 #define ANGBAND_2_8_1
5353 #define ZANGBAND
@@ -3098,7 +3098,8 @@
30983098 TRC_CALL_DEMON | TRC_CALL_DRAGON | TRC_TELEPORT)
30993099
31003100 #define TRC_P_FLAG_MASK \
3101- (TRC_TY_CURSE | TRC_DRAIN_EXP | TRC_ADD_L_CURSE | TRC_ADD_H_CURSE | \
3101+ (TRC_TELEPORT_SELF | TRC_CHAINSWORD | \
3102+ TRC_TY_CURSE | TRC_DRAIN_EXP | TRC_ADD_L_CURSE | TRC_ADD_H_CURSE | \
31023103 TRC_CALL_ANIMAL | TRC_CALL_DEMON | TRC_CALL_DRAGON | TRC_COWARDICE | \
31033104 TRC_TELEPORT | TRC_DRAIN_HP | TRC_DRAIN_MANA)
31043105
@@ -3539,6 +3540,19 @@
35393540
35403541
35413542 /*
3543+ * Hack -- 'ball' spells with radius 4 that may hurt friends
3544+ */
3545+#define RF4_BIG_BALL_MASK \
3546+ (RF4_BA_CHAO)
3547+
3548+#define RF5_BIG_BALL_MASK \
3549+ (RF5_BA_LITE | RF5_BA_DARK | RF5_BA_WATE | RF5_BA_MANA)
3550+
3551+#define RF6_BIG_BALL_MASK \
3552+ 0L
3553+
3554+
3555+/*
35423556 * Hack -- 'breath' spells that may hurt friends
35433557 */
35443558 #define RF4_BREATH_MASK \
--- a/src/dungeon.c
+++ b/src/dungeon.c
@@ -3395,7 +3395,8 @@ if (!get_rnd_line("chainswd_j.txt", 0, noise))
33953395 (void)activate_ty_curse(FALSE, &count);
33963396 }
33973397 /* Handle experience draining */
3398- if ((p_ptr->cursed & TRC_DRAIN_EXP) && one_in_(4))
3398+ if (p_ptr->prace != RACE_ANDROID &&
3399+ ((p_ptr->cursed & TRC_DRAIN_EXP) && one_in_(4)))
33993400 {
34003401 p_ptr->exp -= (p_ptr->lev+1)/2;
34013402 if (p_ptr->exp < 0) p_ptr->exp = 0;
@@ -5775,10 +5776,7 @@ static void dungeon(bool load_game)
57755776 character_xtra = TRUE;
57765777
57775778 /* Window stuff */
5778- p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER);
5779-
5780- /* Window stuff */
5781- p_ptr->window |= (PW_MONSTER);
5779+ p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER | PW_MONSTER | PW_OVERHEAD | PW_DUNGEON);
57825780
57835781 /* Redraw dungeon */
57845782 p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_EQUIPPY);
@@ -5786,14 +5784,14 @@ static void dungeon(bool load_game)
57865784 /* Redraw map */
57875785 p_ptr->redraw |= (PR_MAP);
57885786
5789- /* Window stuff */
5790- p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5791-
57925787 /* Update stuff */
57935788 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
57945789
5795- /* Calculate torch radius */
5796- p_ptr->update |= (PU_TORCH);
5790+ /* Update lite/view */
5791+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE | PU_TORCH);
5792+
5793+ /* Update monsters */
5794+ p_ptr->update |= (PU_MONSTERS | PU_DISTANCE | PU_FLOW);
57975795
57985796 /* Update stuff */
57995797 update_stuff();
@@ -5804,16 +5802,6 @@ static void dungeon(bool load_game)
58045802 /* Redraw stuff */
58055803 window_stuff();
58065804
5807- /* Update stuff */
5808- p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_DISTANCE | PU_MON_LITE);
5809- p_ptr->update |= (PU_MONSTERS);/*自分で光っているモンスターの為 */
5810-
5811- /* Update stuff */
5812- update_stuff();
5813-
5814- /* Redraw stuff */
5815- redraw_stuff();
5816-
58175805 /* Leave "xtra" mode */
58185806 character_xtra = FALSE;
58195807
@@ -6537,7 +6525,11 @@ prt("
65376525
65386526
65396527 /* Hack -- Enter wizard mode */
6540- if (arg_wizard && enter_wizard_mode()) p_ptr->wizard = TRUE;
6528+ if (arg_wizard)
6529+ {
6530+ if (enter_wizard_mode()) p_ptr->wizard = TRUE;
6531+ else if (p_ptr->is_dead) quit("Already dead.");
6532+ }
65416533
65426534 /* Initialize the town-buildings if necessary */
65436535 if (!dun_level && !p_ptr->inside_quest)
--- a/src/effects.c
+++ b/src/effects.c
@@ -4261,6 +4261,9 @@ bool dec_stat(int stat, int amount, int permanent)
42614261 p_ptr->stat_cur[stat] = cur;
42624262 p_ptr->stat_max[stat] = max;
42634263
4264+ /* Redisplay the stats later */
4265+ p_ptr->redraw |= (PR_STATS);
4266+
42644267 /* Recalculate bonuses */
42654268 p_ptr->update |= (PU_BONUS);
42664269 }
@@ -4284,6 +4287,9 @@ bool res_stat(int stat)
42844287 /* Recalculate bonuses */
42854288 p_ptr->update |= (PU_BONUS);
42864289
4290+ /* Redisplay the stats later */
4291+ p_ptr->redraw |= (PR_STATS);
4292+
42874293 /* Success */
42884294 return (TRUE);
42894295 }
--- a/src/externs.h
+++ b/src/externs.h
@@ -525,6 +525,7 @@ extern void optimize_inventry_auto_destroy(void);
525525 extern void auto_pickup_items(cave_type *c_ptr);
526526 extern void autopick_entry_from_object(autopick_type *entry, object_type *o_ptr);
527527 extern void init_autopicker(void);
528+extern errr process_pickpref_file_line(char *buf);
528529 extern void do_cmd_edit_autopick(void);
529530
530531 /* birth.c */
@@ -1083,10 +1084,10 @@ extern int set_elec_destroy(object_type *o_ptr);
10831084 extern int set_fire_destroy(object_type *o_ptr);
10841085 extern int set_cold_destroy(object_type *o_ptr);
10851086 extern int inven_damage(inven_func typ, int perc);
1086-extern void acid_dam(int dam, cptr kb_str, int monspell);
1087-extern void elec_dam(int dam, cptr kb_str, int monspell);
1088-extern void fire_dam(int dam, cptr kb_str, int monspell);
1089-extern void cold_dam(int dam, cptr kb_str, int monspell);
1087+extern int acid_dam(int dam, cptr kb_str, int monspell);
1088+extern int elec_dam(int dam, cptr kb_str, int monspell);
1089+extern int fire_dam(int dam, cptr kb_str, int monspell);
1090+extern int cold_dam(int dam, cptr kb_str, int monspell);
10901091 extern bool rustproof(void);
10911092 extern bool curse_armor(void);
10921093 extern bool curse_weapon(bool force, int slot);
--- a/src/files.c
+++ b/src/files.c
@@ -1040,46 +1040,6 @@ static cptr process_pref_file_expr(char **sp, char *fp)
10401040
10411041
10421042 /*
1043- * Process line for auto picker/destroyer.
1044- */
1045-static errr process_pickpref_file_line(char *buf)
1046-{
1047- autopick_type entry;
1048- int i;
1049-
1050- if (max_autopick == MAX_AUTOPICK)
1051- return 1;
1052-
1053- /* Nuke illegal char */
1054- for(i = 0; buf[i]; i++)
1055- {
1056-#ifdef JP
1057- if (iskanji(buf[i]))
1058- {
1059- i++;
1060- continue;
1061- }
1062-#endif
1063- if (isspace(buf[i]) && buf[i] != ' ')
1064- break;
1065- }
1066- buf[i] = 0;
1067-
1068- if (!autopick_new_entry(&entry, buf)) return 0;
1069-
1070- /* Already has the same entry? */
1071- for(i = 0; i < max_autopick; i++)
1072- if(!strcmp(entry.name, autopick_list[i].name)
1073- && entry.flag[0] == autopick_list[i].flag[0]
1074- && entry.flag[1] == autopick_list[i].flag[1]) return 0;
1075-
1076- autopick_list[max_autopick++] = entry;
1077- return 0;
1078-}
1079-
1080-
1081-
1082-/*
10831043 * Open the "user pref file" and parse it.
10841044 */
10851045 static errr process_pref_file_aux(cptr name, bool read_pickpref)
--- a/src/generate.c
+++ b/src/generate.c
@@ -169,6 +169,9 @@ static bool alloc_stairs(int feat, int num, int walls)
169169 /* Require a certain number of adjacent walls */
170170 if (next_to_walls(y, x) < walls) continue;
171171
172+ /* No hidden trap on stairs */
173+ c_ptr->info &= ~CAVE_TRAP;
174+
172175 /* Clear previous contents, add stairs */
173176 if (i < more_num) c_ptr->feat = feat+0x07;
174177 else c_ptr->feat = feat;
--- a/src/load.c
+++ b/src/load.c
@@ -1952,6 +1952,9 @@ static errr rd_dungeon(void)
19521952 {
19531953 for (y = 0; y < ymax; y++) for (x = 0; x < xmax; x++)
19541954 {
1955+ /* Access the cave */
1956+ c_ptr = &cave[y][x];
1957+
19551958 /* Very old */
19561959 if (c_ptr->feat == FEAT_INVIS)
19571960 {
--- a/src/melee1.c
+++ b/src/melee1.c
@@ -1196,7 +1196,7 @@ bool make_attack_normal(int m_idx)
11961196
11971197
11981198 /* Special damage */
1199- acid_dam(damage, ddesc, -1);
1199+ get_damage += acid_dam(damage, ddesc, -1);
12001200
12011201 /* Learn about the player */
12021202 update_smart_learn(m_idx, DRS_ACID);
@@ -1219,7 +1219,7 @@ bool make_attack_normal(int m_idx)
12191219
12201220
12211221 /* Special damage */
1222- elec_dam(damage, ddesc, -1);
1222+ get_damage += elec_dam(damage, ddesc, -1);
12231223
12241224 /* Learn about the player */
12251225 update_smart_learn(m_idx, DRS_ELEC);
@@ -1242,7 +1242,7 @@ bool make_attack_normal(int m_idx)
12421242
12431243
12441244 /* Special damage */
1245- fire_dam(damage, ddesc, -1);
1245+ get_damage += fire_dam(damage, ddesc, -1);
12461246
12471247 /* Learn about the player */
12481248 update_smart_learn(m_idx, DRS_FIRE);
@@ -1265,7 +1265,7 @@ bool make_attack_normal(int m_idx)
12651265
12661266
12671267 /* Special damage */
1268- cold_dam(damage, ddesc, -1);
1268+ get_damage += cold_dam(damage, ddesc, -1);
12691269
12701270 /* Learn about the player */
12711271 update_smart_learn(m_idx, DRS_COLD);
--- a/src/monster2.c
+++ b/src/monster2.c
@@ -3124,7 +3124,7 @@ msg_print("
31243124 #ifdef JP
31253125 color = "紫色に";
31263126 #else
3127- color = "perple";
3127+ color = "purple";
31283128 #endif
31293129 else if (r_ptr->level > p_ptr->lev + 5)
31303130 #ifdef JP
--- a/src/mspells2.c
+++ b/src/mspells2.c
@@ -170,9 +170,6 @@ bool monst_spell_monst(int m_idx)
170170
171171 u32b f4, f5, f6;
172172
173- /* Expected ball spell radius */
174- int rad = (r_ptr->flags2 & RF2_POWERFUL) ? 3 : 2;
175-
176173 bool wake_up = FALSE;
177174 bool fear = FALSE;
178175
@@ -318,12 +315,23 @@ bool monst_spell_monst(int m_idx)
318315 /* Prevent collateral damage */
319316 if (!(p_ptr->pet_extra_flags & PF_BALL_SPELL) && pet && (m_idx != p_ptr->riding))
320317 {
321- if(distance(py, px, y, x) <= rad)
318+ int dist = distance(py, px, y, x);
319+
320+ /* Expected breath radius */
321+ int rad = (r_ptr->flags2 & RF2_POWERFUL) ? 3 : 2;
322+
323+ if (dist <= 2)
322324 {
323325 f4 &= ~(RF4_BALL_MASK);
324326 f5 &= ~(RF5_BALL_MASK);
325327 f6 &= ~(RF6_BALL_MASK);
326328 }
329+ else if(dist <= 4)
330+ {
331+ f4 &= ~(RF4_BIG_BALL_MASK);
332+ f5 &= ~(RF5_BIG_BALL_MASK);
333+ f6 &= ~(RF6_BIG_BALL_MASK);
334+ }
327335
328336 if (((f4 & RF4_BEAM_MASK) ||
329337 (f5 & RF5_BEAM_MASK) ||
--- a/src/mutation.c
+++ b/src/mutation.c
@@ -1021,76 +1021,82 @@ msg_print("
10211021 {
10221022 chg_virtue(V_CHANCE, 1);
10231023
1024- if (p_ptr->prace == RACE_VAMPIRE &&
1025- !(p_ptr->muta1 & MUT1_HYPN_GAZE) &&
1026- (randint1(10) < 7))
1027- {
1028- muta_class = &(p_ptr->muta1);
1029- muta_which = MUT1_HYPN_GAZE;
1024+ /*
1025+ some races are apt to gain specified mutations
1026+ This should be allowed only if "choose_mut" is 0.
1027+ --- henkma
1028+ */
1029+ if(!choose_mut){
1030+ if (p_ptr->prace == RACE_VAMPIRE &&
1031+ !(p_ptr->muta1 & MUT1_HYPN_GAZE) &&
1032+ (randint1(10) < 7))
1033+ {
1034+ muta_class = &(p_ptr->muta1);
1035+ muta_which = MUT1_HYPN_GAZE;
10301036 #ifdef JP
10311037 muta_desc = "眼が幻惑的になった...";
10321038 #else
1033- muta_desc = "Your eyes look mesmerizing...";
1039+ muta_desc = "Your eyes look mesmerizing...";
10341040 #endif
10351041
1036- }
1042+ }
10371043
1038- else if (p_ptr->prace == RACE_IMP &&
1039- !(p_ptr->muta2 & MUT2_HORNS) &&
1040- (randint1(10) < 7))
1041- {
1042- muta_class = &(p_ptr->muta2);
1043- muta_which = MUT2_HORNS;
1044+ else if (p_ptr->prace == RACE_IMP &&
1045+ !(p_ptr->muta2 & MUT2_HORNS) &&
1046+ (randint1(10) < 7))
1047+ {
1048+ muta_class = &(p_ptr->muta2);
1049+ muta_which = MUT2_HORNS;
10441050 #ifdef JP
10451051 muta_desc = "角が額から生えてきた!";
10461052 #else
1047- muta_desc = "Horns pop forth into your forehead!";
1053+ muta_desc = "Horns pop forth into your forehead!";
10481054 #endif
10491055
1050- }
1056+ }
10511057
1052- else if (p_ptr->prace == RACE_YEEK &&
1053- !(p_ptr->muta1 & MUT1_SHRIEK) &&
1054- (randint1(10) < 7))
1055- {
1056- muta_class = &(p_ptr->muta1);
1057- muta_which = MUT1_SHRIEK;
1058+ else if (p_ptr->prace == RACE_YEEK &&
1059+ !(p_ptr->muta1 & MUT1_SHRIEK) &&
1060+ (randint1(10) < 7))
1061+ {
1062+ muta_class = &(p_ptr->muta1);
1063+ muta_which = MUT1_SHRIEK;
10581064 #ifdef JP
10591065 muta_desc = "声質がかなり強くなった。";
10601066 #else
1061- muta_desc = "Your vocal cords get much tougher.";
1067+ muta_desc = "Your vocal cords get much tougher.";
10621068 #endif
10631069
1064- }
1070+ }
10651071
1066- else if (p_ptr->prace == RACE_BEASTMAN &&
1067- !(p_ptr->muta1 & MUT1_POLYMORPH) &&
1068- (randint1(10) < 2))
1069- {
1070- muta_class = &(p_ptr->muta1);
1071- muta_which = MUT1_POLYMORPH;
1072+ else if (p_ptr->prace == RACE_BEASTMAN &&
1073+ !(p_ptr->muta1 & MUT1_POLYMORPH) &&
1074+ (randint1(10) < 2))
1075+ {
1076+ muta_class = &(p_ptr->muta1);
1077+ muta_which = MUT1_POLYMORPH;
10721078 #ifdef JP
10731079 muta_desc = "あなたの肉体は変化できるようになった、";
10741080 #else
1075- muta_desc = "Your body seems mutable.";
1081+ muta_desc = "Your body seems mutable.";
10761082 #endif
10771083
1078- }
1084+ }
10791085
1080- else if (p_ptr->prace == RACE_MIND_FLAYER &&
1081- !(p_ptr->muta2 & MUT2_TENTACLES) &&
1082- (randint1(10) < 7))
1083- {
1084- muta_class = &(p_ptr->muta2);
1085- muta_which = MUT2_TENTACLES;
1086+ else if (p_ptr->prace == RACE_MIND_FLAYER &&
1087+ !(p_ptr->muta2 & MUT2_TENTACLES) &&
1088+ (randint1(10) < 7))
1089+ {
1090+ muta_class = &(p_ptr->muta2);
1091+ muta_which = MUT2_TENTACLES;
10861092 #ifdef JP
10871093 muta_desc = "邪悪な触手が口の周りに生えた。";
10881094 #else
1089- muta_desc = "Evil-looking tentacles sprout from your mouth.";
1095+ muta_desc = "Evil-looking tentacles sprout from your mouth.";
10901096 #endif
10911097
1098+ }
10921099 }
1093-
10941100 #ifdef JP
10951101 msg_print("突然変異した!");
10961102 #else
--- a/src/object1.c
+++ b/src/object1.c
@@ -167,18 +167,22 @@ void object_flags(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3)
167167 else if (o_ptr->xtra3 == ESSENCE_TMP_RES_ACID)
168168 {
169169 (*f2) |= TR2_RES_ACID;
170+ (*f3) |= TR3_ACTIVATE;
170171 }
171172 else if (o_ptr->xtra3 == ESSENCE_TMP_RES_ELEC)
172173 {
173174 (*f2) |= TR2_RES_ELEC;
175+ (*f3) |= TR3_ACTIVATE;
174176 }
175177 else if (o_ptr->xtra3 == ESSENCE_TMP_RES_FIRE)
176178 {
177179 (*f2) |= TR2_RES_FIRE;
180+ (*f3) |= TR3_ACTIVATE;
178181 }
179182 else if (o_ptr->xtra3 == ESSENCE_TMP_RES_COLD)
180183 {
181184 (*f2) |= TR2_RES_COLD;
185+ (*f3) |= TR3_ACTIVATE;
182186 }
183187 else if (o_ptr->xtra3 == ESSENCE_SH_FIRE)
184188 {
@@ -199,6 +203,10 @@ void object_flags(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3)
199203 {
200204 (*f2) |= (TR2_RES_ACID | TR2_RES_ELEC | TR2_RES_FIRE | TR2_RES_COLD);;
201205 }
206+ else if (o_ptr->xtra3 == ESSENCE_EARTHQUAKE)
207+ {
208+ (*f3) |= TR3_ACTIVATE;
209+ }
202210 }
203211 }
204212
@@ -4427,7 +4435,8 @@ int show_inven(int target_item)
44274435
44284436 if (get_tag(&index, c))
44294437 {
4430- inven_spellbook_label[i] = ' ';
4438+ if (inven_spellbook_label[i] == c)
4439+ inven_spellbook_label[i] = ' ';
44314440 inven_spellbook_label[index] = c;
44324441 }
44334442 }
--- a/src/object2.c
+++ b/src/object2.c
@@ -6371,7 +6371,7 @@ bool process_frakir(int xx, int yy)
63716371 #ifdef JP
63726372 msg_format("%sが鋭く震えた!", o_name);
63736373 #else
6374- msg_format("%s pulsates sharply!", o_name);
6374+ msg_format("Your %s pulsates sharply!", o_name);
63756375 #endif
63766376 disturb(0,0);
63776377 #ifdef JP
@@ -6392,7 +6392,7 @@ bool process_frakir(int xx, int yy)
63926392 #ifdef JP
63936393 msg_format("%sが震えた!", o_name);
63946394 #else
6395- msg_format("%s pulsates!", o_name);
6395+ msg_format("Your %s pulsates!", o_name);
63966396 #endif
63976397 disturb(0,0);
63986398 #ifdef JP
@@ -6632,7 +6632,7 @@ static essence_type essence_info[MAX_ESSENCE] = {
66326632 {"","resist cold activation", 52, 5, 50},
66336633 {"","fiery sheath", 0, 5, 30},
66346634 {"","electric sheath", 0, 5, 30},
6635-{"","coldly sheath", 0, 5, 30},
6635+{"","sheath of coldness", 0, 5, 30},
66366636 {"","resistance", 0, 2, 150},
66376637 {"","elements proof", 0, 6, 10},
66386638 {"","gauntlets of slay", 97, 1, 200},
@@ -6679,7 +6679,7 @@ static void display_essence(void)
66796679 for (i = 0; i < MAX_ESSENCE; i++)
66806680 {
66816681 if (!essence_info[i].drain_name[0]) continue;
6682- prt(format("%-11s %5d", essence_info[i].drain_name, p_ptr->magic_num1[i]), 2+num%20, 8+num/20*22);
6682+ prt(format("%-11s %5d", essence_info[i].drain_name, p_ptr->magic_num1[i]), 2+num%21, 8+num/21*22);
66836683 num++;
66846684 }
66856685 #ifdef JP
--- a/src/save.c
+++ b/src/save.c
@@ -1665,9 +1665,6 @@ bool load_player(void)
16651665 /* Player is dead */
16661666 if (p_ptr->is_dead)
16671667 {
1668- /* Player is no longer "dead" */
1669- p_ptr->is_dead = FALSE;
1670-
16711668 /* Cheat death */
16721669 if (arg_wizard)
16731670 {
@@ -1678,6 +1675,9 @@ bool load_player(void)
16781675 return (TRUE);
16791676 }
16801677
1678+ /* Player is no longer "dead" */
1679+ p_ptr->is_dead = FALSE;
1680+
16811681 /* Count lives */
16821682 sf_lives++;
16831683
--- a/src/spells1.c
+++ b/src/spells1.c
@@ -6501,8 +6501,8 @@ if (fuzzy) msg_print("
65016501 #else
65026502 if (fuzzy) msg_print("You are hit by acid!");
65036503 #endif
6504-
6505- acid_dam(dam, killer, monspell);
6504+
6505+ get_damage = acid_dam(dam, killer, monspell);
65066506 break;
65076507 }
65086508
@@ -6515,7 +6515,7 @@ if (fuzzy) msg_print("
65156515 if (fuzzy) msg_print("You are hit by fire!");
65166516 #endif
65176517
6518- fire_dam(dam, killer, monspell);
6518+ get_damage = fire_dam(dam, killer, monspell);
65196519 break;
65206520 }
65216521
@@ -6528,7 +6528,7 @@ if (fuzzy) msg_print("
65286528 if (fuzzy) msg_print("You are hit by cold!");
65296529 #endif
65306530
6531- cold_dam(dam, killer, monspell);
6531+ get_damage = cold_dam(dam, killer, monspell);
65326532 break;
65336533 }
65346534
@@ -6541,7 +6541,7 @@ if (fuzzy) msg_print("
65416541 if (fuzzy) msg_print("You are hit by lightning!");
65426542 #endif
65436543
6544- elec_dam(dam, killer, monspell);
6544+ get_damage = elec_dam(dam, killer, monspell);
65456545 break;
65466546 }
65476547
--- a/src/spells2.c
+++ b/src/spells2.c
@@ -2175,7 +2175,7 @@ info[i++] = "
21752175 #ifdef JP
21762176 info[i++] = "あなたは冷気のオーラに包まれている。";
21772177 #else
2178- info[i++] = "You are surrounded with a coldly aura.";
2178+ info[i++] = "You are surrounded with an aura of coldness.";
21792179 #endif
21802180
21812181 }
@@ -6058,10 +6058,7 @@ static void cave_temp_room_aux(int y, int x, bool only_room)
60586058 if (only_room) return;
60596059
60606060 /* Verify */
6061- if (!in_bounds(y, x)) return;
6062-
6063- /* If a wall, exit */
6064- if (!cave_floor_bold(y, x)) return;
6061+ if (!in_bounds2(y, x)) return;
60656062
60666063 /* Do not exceed the maximum spell range */
60676064 if (distance(py, px, y, x) > MAX_RANGE) return;
@@ -6075,7 +6072,8 @@ static void cave_temp_room_aux(int y, int x, bool only_room)
60756072 * properly.
60766073 * This leaves only a check for 6 bounding walls!
60776074 */
6078- if ((next_to_walls_adj(y, x) == 6) && (next_to_open(y, x) <= 1)) return;
6075+ if (in_bounds(y, x) && cave_floor_bold(y, x) &&
6076+ (next_to_walls_adj(y, x) == 6) && (next_to_open(y, x) <= 1)) return;
60796077 }
60806078
60816079 /* Paranoia -- verify space */
--- a/src/spells3.c
+++ b/src/spells3.c
@@ -5049,8 +5049,9 @@ msg_format("%s
50495049 /*
50505050 * Hurt the player with Acid
50515051 */
5052-void acid_dam(int dam, cptr kb_str, int monspell)
5052+int acid_dam(int dam, cptr kb_str, int monspell)
50535053 {
5054+ int get_damage;
50545055 int inv = (dam < 30) ? 1 : (dam < 60) ? 2 : 3;
50555056 bool double_resist = (p_ptr->oppose_acid || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU));
50565057
@@ -5058,7 +5059,7 @@ void acid_dam(int dam, cptr kb_str, int monspell)
50585059 if (p_ptr->immune_acid || (dam <= 0))
50595060 {
50605061 learn_spell(monspell);
5061- return;
5062+ return 0;
50625063 }
50635064
50645065 /* Vulnerability (Ouch!) */
@@ -5077,19 +5078,21 @@ void acid_dam(int dam, cptr kb_str, int monspell)
50775078 if (minus_ac()) dam = (dam + 1) / 2;
50785079
50795080 /* Take damage */
5080- take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
5081+ get_damage=take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
50815082
50825083 /* Inventory damage */
50835084 if (!(double_resist && p_ptr->resist_acid))
50845085 inven_damage(set_acid_destroy, inv);
5086+ return get_damage;
50855087 }
50865088
50875089
50885090 /*
50895091 * Hurt the player with electricity
50905092 */
5091-void elec_dam(int dam, cptr kb_str, int monspell)
5093+int elec_dam(int dam, cptr kb_str, int monspell)
50925094 {
5095+ int get_damage;
50935096 int inv = (dam < 30) ? 1 : (dam < 60) ? 2 : 3;
50945097 bool double_resist = (p_ptr->oppose_elec || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU));
50955098
@@ -5097,7 +5100,7 @@ void elec_dam(int dam, cptr kb_str, int monspell)
50975100 if (p_ptr->immune_elec || (dam <= 0))
50985101 {
50995102 learn_spell(monspell);
5100- return;
5103+ return 0;
51015104 }
51025105
51035106 /* Vulnerability (Ouch!) */
@@ -5114,19 +5117,22 @@ void elec_dam(int dam, cptr kb_str, int monspell)
51145117 (void)do_dec_stat(A_DEX);
51155118
51165119 /* Take damage */
5117- take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
5120+ get_damage=take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
51185121
51195122 /* Inventory damage */
51205123 if (!(double_resist && p_ptr->resist_elec))
51215124 inven_damage(set_elec_destroy, inv);
5125+
5126+ return get_damage;
51225127 }
51235128
51245129
51255130 /*
51265131 * Hurt the player with Fire
51275132 */
5128-void fire_dam(int dam, cptr kb_str, int monspell)
5133+int fire_dam(int dam, cptr kb_str, int monspell)
51295134 {
5135+ int get_damage;
51305136 int inv = (dam < 30) ? 1 : (dam < 60) ? 2 : 3;
51315137 bool double_resist = (p_ptr->oppose_fire || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU));
51325138
@@ -5134,7 +5140,7 @@ void fire_dam(int dam, cptr kb_str, int monspell)
51345140 if (p_ptr->immune_fire || (dam <= 0))
51355141 {
51365142 learn_spell(monspell);
5137- return;
5143+ return 0;
51385144 }
51395145
51405146 /* Vulnerability (Ouch!) */
@@ -5151,19 +5157,22 @@ void fire_dam(int dam, cptr kb_str, int monspell)
51515157 (void)do_dec_stat(A_STR);
51525158
51535159 /* Take damage */
5154- take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
5160+ get_damage=take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
51555161
51565162 /* Inventory damage */
51575163 if (!(double_resist && p_ptr->resist_fire))
51585164 inven_damage(set_fire_destroy, inv);
5165+
5166+ return get_damage;
51595167 }
51605168
51615169
51625170 /*
51635171 * Hurt the player with Cold
51645172 */
5165-void cold_dam(int dam, cptr kb_str, int monspell)
5173+int cold_dam(int dam, cptr kb_str, int monspell)
51665174 {
5175+ int get_damage;
51675176 int inv = (dam < 30) ? 1 : (dam < 60) ? 2 : 3;
51685177 bool double_resist = (p_ptr->oppose_cold || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU));
51695178
@@ -5171,7 +5180,7 @@ void cold_dam(int dam, cptr kb_str, int monspell)
51715180 if (p_ptr->immune_cold || (dam <= 0))
51725181 {
51735182 learn_spell(monspell);
5174- return;
5183+ return 0;
51755184 }
51765185
51775186 /* Vulnerability (Ouch!) */
@@ -5187,11 +5196,13 @@ void cold_dam(int dam, cptr kb_str, int monspell)
51875196 (void)do_dec_stat(A_STR);
51885197
51895198 /* Take damage */
5190- take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
5199+ get_damage=take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
51915200
51925201 /* Inventory damage */
51935202 if (!(double_resist && p_ptr->resist_cold))
51945203 inven_damage(set_cold_destroy, inv);
5204+
5205+ return get_damage;
51955206 }
51965207
51975208
--- a/src/util.c
+++ b/src/util.c
@@ -4464,28 +4464,50 @@ static bool insert_str(char *buf, cptr target, cptr insert)
44644464 */
44654465 int get_keymap_dir(char ch)
44664466 {
4467- cptr act, s;
44684467 int d = 0;
44694468
4470- if (rogue_like_commands)
4469+ /* Already a direction? */
4470+ if (isdigit(ch))
44714471 {
4472- act = keymap_act[KEYMAP_MODE_ROGUE][(byte)ch];
4472+ d = D2I(ch);
44734473 }
44744474 else
44754475 {
4476- act = keymap_act[KEYMAP_MODE_ORIG][(byte)ch];
4477- }
4476+ int mode;
4477+ cptr act, s;
44784478
4479- if (act)
4480- {
4481- /* Convert to a direction */
4482- for (s = act; *s; ++s)
4479+ /* Roguelike */
4480+ if (rogue_like_commands)
4481+ {
4482+ mode = KEYMAP_MODE_ROGUE;
4483+ }
4484+
4485+ /* Original */
4486+ else
4487+ {
4488+ mode = KEYMAP_MODE_ORIG;
4489+ }
4490+
4491+ /* Extract the action (if any) */
4492+ act = keymap_act[mode][(byte)(ch)];
4493+
4494+ /* Analyze */
4495+ if (act)
44834496 {
4484- /* Use any digits in keymap */
4485- if (isdigit(*s)) d = D2I(*s);
4497+ /* Convert to a direction */
4498+ for (s = act; *s; ++s)
4499+ {
4500+ /* Use any digits in keymap */
4501+ if (isdigit(*s)) d = D2I(*s);
4502+ }
44864503 }
44874504 }
4488- return d;
4505+
4506+ /* Paranoia */
4507+ if (d == 5) d = 0;
4508+
4509+ /* Return direction */
4510+ return (d);
44894511 }
44904512
44914513
--- a/src/xtra1.c
+++ b/src/xtra1.c
@@ -5570,19 +5570,22 @@ void update_stuff(void)
55705570 update_flow();
55715571 }
55725572
5573- if (p_ptr->update & (PU_MON_LITE))
5574- {
5575- p_ptr->update &= ~(PU_MON_LITE);
5576- update_mon_lite();
5577- }
5578-
55795573 if (p_ptr->update & (PU_DISTANCE))
55805574 {
55815575 p_ptr->update &= ~(PU_DISTANCE);
5582- p_ptr->update &= ~(PU_MONSTERS);
5576+
5577+ /* Still need to call update_monsters(FALSE) after update_mon_lite() */
5578+ /* p_ptr->update &= ~(PU_MONSTERS); */
5579+
55835580 update_monsters(TRUE);
55845581 }
55855582
5583+ if (p_ptr->update & (PU_MON_LITE))
5584+ {
5585+ p_ptr->update &= ~(PU_MON_LITE);
5586+ update_mon_lite();
5587+ }
5588+
55865589 if (p_ptr->update & (PU_MONSTERS))
55875590 {
55885591 p_ptr->update &= ~(PU_MONSTERS);
--- a/src/xtra2.c
+++ b/src/xtra2.c
@@ -516,7 +516,7 @@ msg_print("
516516 p_ptr->inside_quest = 0;
517517 }
518518
519- if (!quest[i].flags & QUEST_FLAG_SILENT)
519+ if (!(quest[i].flags & QUEST_FLAG_SILENT))
520520 {
521521 #ifdef JP
522522 msg_print("クエストを達成した!");
@@ -551,7 +551,7 @@ msg_print("
551551 quest[i].status = QUEST_STATUS_COMPLETED;
552552 quest[i].complev = (byte)p_ptr->lev;
553553
554- if (!quest[i].flags & QUEST_FLAG_SILENT)
554+ if (!(quest[i].flags & QUEST_FLAG_SILENT))
555555 {
556556 #ifdef JP
557557 msg_print("クエストを達成した!");
旧リポジトリブラウザで表示