OSDN Git Service

This commit was manufactured by cvs2svn to create tag
[hengbandforosx/hengbandosx.git] / src / effects.c
index 0c6f61a..a97a2ec 100644 (file)
@@ -1,26 +1,28 @@
 /* File: effects.c */
 
-/* Purpose: effects of various "objects" */
-
 /*
- * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
+ * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
  *
- * This software may be copied and distributed for educational, research, and
- * not for profit purposes provided that this copyright and statement are
- * included in all such copies.
+ * This software may be copied and distributed for educational, research,
+ * and not for profit purposes provided that this copyright and statement
+ * are included in all such copies.  Other copyrights may also apply.
  */
 
+/* Purpose: effects of various "objects" */
+
 #include "angband.h"
 
 void set_action(int typ)
 {
-       if (typ == p_ptr->action)
+       int prev_typ = p_ptr->action;
+
+       if (typ == prev_typ)
        {
                return;
        }
        else
        {
-               switch(p_ptr->action)
+               switch (prev_typ)
                {
                        case ACTION_SEARCH:
                        {
@@ -92,14 +94,17 @@ void set_action(int typ)
 
        p_ptr->action = typ;
 
-       switch(p_ptr->action)
+       /* If we are requested other action, stop singing */
+       if (prev_typ == ACTION_SING) stop_singing();
+
+       switch (p_ptr->action)
        {
                case ACTION_SEARCH:
                {
 #ifdef JP
                        msg_print("Ãí°Õ¿¼¤¯Ê⤭»Ï¤á¤¿¡£");
 #else
-                       msg_print("You began to walk carefully.");
+                       msg_print("You begin to walk carefully.");
 #endif
                        p_ptr->redraw |= (PR_SPEED);
                        break;
@@ -109,7 +114,7 @@ void set_action(int typ)
 #ifdef JP
                        msg_print("³Ø½¬¤ò»Ï¤á¤¿¡£");
 #else
-                       msg_print("You began Learning");
+                       msg_print("You begin Learning");
 #endif
                        break;
                }
@@ -118,7 +123,7 @@ void set_action(int typ)
 #ifdef JP
                        msg_print("¿åÌ̤˻å¤ò¿â¤é¤·¤¿¡¥¡¥¡¥");
 #else
-                       msg_print("You began fishing...");
+                       msg_print("You begin fishing...");
 #endif
                        break;
                }
@@ -127,7 +132,7 @@ void set_action(int typ)
 #ifdef JP
                        msg_print("­¤¬±©¤Î¤è¤¦¤Ë·Ú¤¯¤Ê¤Ã¤¿¡£");
 #else
-                       msg_print("You began to walk extremely fast.");
+                       msg_print("You begin to walk extremely fast.");
 #endif
                        break;
                }
@@ -171,9 +176,12 @@ void reset_tim_flags(void)
        p_ptr->tim_regen = 0;       /* Timed -- Regeneration */
        p_ptr->tim_stealth = 0;     /* Timed -- Stealth */
        p_ptr->tim_esp = 0;
+       p_ptr->wraith_form = 0;     /* Timed -- Wraith Form */
        p_ptr->tim_ffall = 0;
        p_ptr->tim_sh_touki = 0;
        p_ptr->tim_sh_fire = 0;
+       p_ptr->tim_sh_holy = 0;
+       p_ptr->tim_eyeeye = 0;
        p_ptr->resist_magic = 0;
        p_ptr->tsuyoshi = 0;
        p_ptr->kabenuke = 0;
@@ -193,7 +201,8 @@ void reset_tim_flags(void)
        p_ptr->oppose_cold = 0;     /* Timed -- oppose cold */
        p_ptr->oppose_pois = 0;     /* Timed -- oppose poison */
 
-       p_ptr->word_recall = FALSE;
+       p_ptr->word_recall = 0;
+       p_ptr->alter_reality = 0;
        p_ptr->sutemi = FALSE;
        p_ptr->counter = FALSE;
        p_ptr->ele_attack = 0;
@@ -201,7 +210,7 @@ void reset_tim_flags(void)
        p_ptr->special_attack = 0L;
        p_ptr->special_defense = 0L;
 
-       while(p_ptr->energy > 99) p_ptr->energy -= 100;
+       while(p_ptr->energy_need < 0) p_ptr->energy_need += ENERGY_NEED();
        world_player = FALSE;
 
        if (prace_is_(RACE_DEMON) && (p_ptr->lev > 44)) p_ptr->oppose_fire = 1;
@@ -234,7 +243,7 @@ bool set_mimic(int v, int p, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -243,14 +252,14 @@ bool set_mimic(int v, int p, bool do_dec)
                {
                        if (p_ptr->tim_mimic > v) return FALSE;
                }
-                else if ((!p_ptr->tim_mimic) || (p_ptr->mimic_form != p))
+               else if ((!p_ptr->tim_mimic) || (p_ptr->mimic_form != p))
                {
 #ifdef JP
-                        msg_print("¼«Ê¬¤ÎÂΤ¬ÊѤï¤Ã¤Æ¤æ¤¯¤Î¤ò´¶¤¸¤¿¡£");
+                       msg_print("¼«Ê¬¤ÎÂΤ¬ÊѤï¤Ã¤Æ¤æ¤¯¤Î¤ò´¶¤¸¤¿¡£");
 #else
-                        msg_print("You feel that your body change.");
+                       msg_print("You feel that your body changes.");
 #endif
-                        p_ptr->mimic_form=p;
+                       p_ptr->mimic_form=p;
                        notice = TRUE;
                }
        }
@@ -258,22 +267,22 @@ bool set_mimic(int v, int p, bool do_dec)
        /* Shut */
        else
        {
-                if (p_ptr->tim_mimic)
+               if (p_ptr->tim_mimic)
                {
 #ifdef JP
-                        msg_print("ÊѿȤ¬²ò¤±¤¿¡£");
+                       msg_print("ÊѿȤ¬²ò¤±¤¿¡£");
 #else
-                        msg_print("You are no longer transformed.");
+                       msg_print("You are no longer transformed.");
 #endif
                        if (p_ptr->mimic_form == MIMIC_DEMON) set_oppose_fire(0, TRUE);
-                        p_ptr->mimic_form=0;
+                       p_ptr->mimic_form=0;
                        notice = TRUE;
                        p = 0;
                }
        }
 
        /* Use the value */
-        p_ptr->tim_mimic = v;
+       p_ptr->tim_mimic = v;
 
        /* Nothing to notice */
        if (!notice)
@@ -283,11 +292,11 @@ bool set_mimic(int v, int p, bool do_dec)
        if (disturb_state)
                disturb(0, 0);
 
-        /* Redraw title */
-        p_ptr->redraw |= (PR_BASIC | PR_STATUS);
+       /* Redraw title */
+       p_ptr->redraw |= (PR_BASIC | PR_STATUS);
 
        /* Recalculate bonuses */
-        p_ptr->update |= (PU_BONUS | PU_HP);
+       p_ptr->update |= (PU_BONUS | PU_HP);
 
        handle_stuff();
 
@@ -310,7 +319,7 @@ bool set_blind(int v)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -378,7 +387,7 @@ msg_print("
        if (disturb_state) disturb(0, 0);
 
        /* Fully update the visuals */
-       p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE | PU_VIEW | PU_LITE | PU_MONSTERS);
+       p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE | PU_VIEW | PU_LITE | PU_MONSTERS | PU_MON_LITE);
 
        /* Redraw map */
        p_ptr->redraw |= (PR_MAP);
@@ -404,7 +413,7 @@ bool set_confused(int v)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -417,6 +426,18 @@ msg_print("
                        msg_print("You are confused!");
 #endif
 
+                       if (p_ptr->action == ACTION_LEARN)
+                       {
+#ifdef JP
+                               msg_print("³Ø½¬¤¬Â³¤±¤é¤ì¤Ê¤¤¡ª");
+#else
+                               msg_print("You cannot continue Learning!");
+#endif
+                               new_mane = FALSE;
+
+                               p_ptr->redraw |= (PR_STATE);
+                               p_ptr->action = ACTION_NONE;
+                       }
                        if (p_ptr->action == ACTION_KAMAE)
                        {
 #ifdef JP
@@ -496,7 +517,7 @@ bool set_poisoned(int v)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -558,7 +579,7 @@ bool set_afraid(int v)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -637,7 +658,7 @@ bool set_paralyzed(int v)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -705,7 +726,7 @@ bool set_image(int v)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
 
        /* Open */
@@ -779,7 +800,7 @@ bool set_fast(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -788,7 +809,7 @@ bool set_fast(int v, bool do_dec)
                {
                        if (p_ptr->fast > v) return FALSE;
                }
-               else if (!p_ptr->fast && !p_ptr->lightspeed)
+               else if (!IS_FAST() && !p_ptr->lightspeed)
                {
 #ifdef JP
 msg_print("ÁÇÁ᤯ư¤±¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡ª");
@@ -805,7 +826,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->fast && !p_ptr->lightspeed && ((p_ptr->pclass != CLASS_BARD) || ((p_ptr->magic_num1[0] != MUSIC_SPEED) && (p_ptr->magic_num1[0] != MUSIC_SHERO))))
+               if (p_ptr->fast && !p_ptr->lightspeed && !music_singing(MUSIC_SPEED) && !music_singing(MUSIC_SHERO))
                {
 #ifdef JP
 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
@@ -847,7 +868,7 @@ bool set_lightspeed(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -861,7 +882,7 @@ bool set_lightspeed(int v, bool do_dec)
 #ifdef JP
 msg_print("Èó¾ï¤ËÁÇÁ᤯ư¤±¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡ª");
 #else
-                       msg_print("You feel yourself moving faster!");
+                       msg_print("You feel yourself moving extremely faster!");
 #endif
 
                        notice = TRUE;
@@ -915,7 +936,7 @@ bool set_slow(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -981,7 +1002,7 @@ bool set_shield(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1051,7 +1072,7 @@ bool set_tsubureru(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1065,7 +1086,7 @@ bool set_tsubureru(int v, bool do_dec)
 #ifdef JP
 msg_print("²£¤Ë¿­¤Ó¤¿¡£");
 #else
-                       msg_print("You have expand horizontally.");
+                       msg_print("Your body expands horizontally.");
 #endif
 
                        notice = TRUE;
@@ -1080,7 +1101,7 @@ msg_print("
 #ifdef JP
 msg_print("¤â¤¦²£¤Ë¿­¤Ó¤Æ¤¤¤Ê¤¤¡£");
 #else
-                       msg_print("You are no longer expanded.");
+                       msg_print("Your body returns to normal.");
 #endif
 
                        notice = TRUE;
@@ -1121,7 +1142,7 @@ bool set_magicdef(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1135,7 +1156,7 @@ bool set_magicdef(int v, bool do_dec)
 #ifdef JP
                        msg_print("ËâË¡¤ÎËɸæÎϤ¬Áý¤·¤¿¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
 #else
-                       msg_print("You feel your magical vulnerability diminish.");
+                       msg_print("You feel more resistant to magic.");
 #endif
 
                        notice = TRUE;
@@ -1150,7 +1171,7 @@ bool set_magicdef(int v, bool do_dec)
 #ifdef JP
                        msg_print("ËâË¡¤ÎËɸæÎϤ¬¸µ¤ËÌá¤Ã¤¿¡£");
 #else
-                       msg_print("Your magical defences fall to their normal values.");
+                       msg_print("You feel less resistant to magic.");
 #endif
 
                        notice = TRUE;
@@ -1191,7 +1212,7 @@ bool set_blessed(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1200,7 +1221,7 @@ bool set_blessed(int v, bool do_dec)
                {
                        if (p_ptr->blessed > v) return FALSE;
                }
-               else if (!p_ptr->blessed)
+               else if (!IS_BLESSED())
                {
 #ifdef JP
 msg_print("¹â·é¤Êµ¤Ê¬¤Ë¤Ê¤Ã¤¿¡ª");
@@ -1215,7 +1236,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->blessed && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_BLESS)))
+               if (p_ptr->blessed && !music_singing(MUSIC_BLESS))
                {
 #ifdef JP
 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
@@ -1260,7 +1281,7 @@ bool set_hero(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1269,7 +1290,7 @@ bool set_hero(int v, bool do_dec)
                {
                        if (p_ptr->hero > v) return FALSE;
                }
-               else if (!p_ptr->hero)
+               else if (!IS_HERO())
                {
 #ifdef JP
 msg_print("¥Ò¡¼¥í¡¼¤Ë¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡ª");
@@ -1284,7 +1305,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->hero && ((p_ptr->pclass != CLASS_BARD) || ((p_ptr->magic_num1[0] != MUSIC_HERO) && (p_ptr->magic_num1[0] != MUSIC_SHERO))))
+               if (p_ptr->hero && !music_singing(MUSIC_HERO) && !music_singing(MUSIC_SHERO))
                {
 #ifdef JP
 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
@@ -1332,7 +1353,7 @@ bool set_shero(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        if (p_ptr->pclass == CLASS_BERSERKER) v = 1;
        /* Open */
@@ -1405,7 +1426,7 @@ bool set_protevil(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1470,7 +1491,7 @@ bool set_wraith_form(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1566,7 +1587,7 @@ bool set_invuln(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1575,7 +1596,7 @@ bool set_invuln(int v, bool do_dec)
                {
                        if (p_ptr->invuln > v) return FALSE;
                }
-               else if (!p_ptr->invuln)
+               else if (!IS_INVULN())
                {
 #ifdef JP
 msg_print("̵Ũ¤À¡ª");
@@ -1604,7 +1625,7 @@ msg_print("̵Ũ
        /* Shut */
        else
        {
-               if (p_ptr->invuln && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_INVULN)))
+               if (p_ptr->invuln && !music_singing(MUSIC_INVULN))
                {
 #ifdef JP
 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
@@ -1623,7 +1644,7 @@ msg_print("̵Ũ
                        /* Window stuff */
                        p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
 
-                       p_ptr->energy -= 100;
+                       p_ptr->energy_need += ENERGY_NEED();
                }
        }
 
@@ -1660,7 +1681,7 @@ bool set_tim_esp(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1669,7 +1690,7 @@ bool set_tim_esp(int v, bool do_dec)
                {
                        if (p_ptr->tim_esp > v) return FALSE;
                }
-               else if (!p_ptr->tim_esp)
+               else if (!IS_TIM_ESP())
                {
 #ifdef JP
 msg_print("°Õ¼±¤¬¹­¤¬¤Ã¤¿µ¤¤¬¤¹¤ë¡ª");
@@ -1684,7 +1705,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->tim_esp && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_MIND)))
+               if (p_ptr->tim_esp && !music_singing(MUSIC_MIND))
                {
 #ifdef JP
 msg_print("°Õ¼±¤Ï¸µ¤ËÌá¤Ã¤¿¡£");
@@ -1732,7 +1753,7 @@ bool set_tim_invis(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1804,7 +1825,7 @@ bool set_tim_infra(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1818,7 +1839,7 @@ bool set_tim_infra(int v, bool do_dec)
 #ifdef JP
 msg_print("Ìܤ¬¥é¥ó¥é¥ó¤Èµ±¤­»Ï¤á¤¿¡ª");
 #else
-                       msg_print("Your eyes began to tingle!");
+                       msg_print("Your eyes begin to tingle!");
 #endif
 
                        notice = TRUE;
@@ -1876,7 +1897,7 @@ bool set_tim_regen(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1890,7 +1911,7 @@ bool set_tim_regen(int v, bool do_dec)
 #ifdef JP
 msg_print("²óÉüÎϤ¬¾å¤¬¤Ã¤¿¡ª");
 #else
-                       msg_print("You began to regenerate quicker!");
+                       msg_print("You feel yourself regenerating quickly!");
 #endif
 
                        notice = TRUE;
@@ -1905,7 +1926,7 @@ msg_print("
 #ifdef JP
 msg_print("ÁÇÁ᤯²óÉü¤¹¤ë´¶¤¸¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£");
 #else
-                       msg_print("You no longer regenerate quicker.");
+                       msg_print("You feel yourself regenerating slowly.");
 #endif
 
                        notice = TRUE;
@@ -1945,7 +1966,7 @@ bool set_tim_stealth(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -1954,12 +1975,12 @@ bool set_tim_stealth(int v, bool do_dec)
                {
                        if (p_ptr->tim_stealth > v) return FALSE;
                }
-               else if (!p_ptr->tim_stealth)
+               else if (!IS_TIM_STEALTH())
                {
 #ifdef JP
 msg_print("­²»¤¬¾®¤µ¤¯¤Ê¤Ã¤¿¡ª");
 #else
-                       msg_print("You began to walk silently!");
+                       msg_print("You begin to walk silently!");
 #endif
 
                        notice = TRUE;
@@ -1969,7 +1990,7 @@ msg_print("­
        /* Shut */
        else
        {
-               if (p_ptr->tim_stealth && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_STEALTH)))
+               if (p_ptr->tim_stealth && !music_singing(MUSIC_STEALTH))
                {
 #ifdef JP
 msg_print("­²»¤¬Â礭¤¯¤Ê¤Ã¤¿¡£");
@@ -2008,7 +2029,7 @@ bool set_superstealth(bool set)
 {
        bool notice = FALSE;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (set)
@@ -2083,7 +2104,7 @@ bool set_tim_ffall(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2097,7 +2118,7 @@ bool set_tim_ffall(int v, bool do_dec)
 #ifdef JP
 msg_print("ÂΤ¬Ãè¤ËÉ⤭»Ï¤á¤¿¡£");
 #else
-                       msg_print("You began to fly!");
+                       msg_print("You begin to fly!");
 #endif
 
                        notice = TRUE;
@@ -2112,7 +2133,7 @@ msg_print("
 #ifdef JP
 msg_print("¤â¤¦Ãè¤ËÉ⤫¤Ù¤Ê¤¯¤Ê¤Ã¤¿¡£");
 #else
-                       msg_print("You no longer flying.");
+                       msg_print("You stop flying.");
 #endif
 
                        notice = TRUE;
@@ -2152,7 +2173,7 @@ bool set_tim_sh_touki(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2166,7 +2187,7 @@ bool set_tim_sh_touki(int v, bool do_dec)
 #ifdef JP
 msg_print("ÂΤ¬Æ®µ¤¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
 #else
-                       msg_print("You have enveloped by energy aura!");
+                       msg_print("You have enveloped by the aura of the Force!");
 #endif
 
                        notice = TRUE;
@@ -2181,7 +2202,7 @@ msg_print("
 #ifdef JP
 msg_print("Æ®µ¤¤¬¾Ã¤¨¤¿¡£");
 #else
-                       msg_print("Aura of Force disappeared.");
+                       msg_print("Aura of the Force disappeared.");
 #endif
 
                        notice = TRUE;
@@ -2218,7 +2239,7 @@ bool set_tim_sh_fire(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2278,6 +2299,146 @@ msg_print("
 
 
 /*
+ * Set "p_ptr->tim_sh_holy", notice observable changes
+ */
+bool set_tim_sh_holy(int v, bool do_dec)
+{
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
+
+       if (p_ptr->is_dead) return FALSE;
+
+       /* Open */
+       if (v)
+       {
+               if (p_ptr->tim_sh_holy && !do_dec)
+               {
+                       if (p_ptr->tim_sh_holy > v) return FALSE;
+               }
+               else if (!p_ptr->tim_sh_holy)
+               {
+#ifdef JP
+msg_print("ÂΤ¬À»¤Ê¤ë¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
+#else
+                       msg_print("You have enveloped by holy aura!");
+#endif
+
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (p_ptr->tim_sh_holy)
+               {
+#ifdef JP
+msg_print("À»¤Ê¤ë¥ª¡¼¥é¤¬¾Ã¤¨¤¿¡£");
+#else
+                       msg_print("Holy aura disappeared.");
+#endif
+
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       p_ptr->tim_sh_holy = v;
+
+       /* Redraw status bar */
+       p_ptr->redraw |= (PR_STATUS);
+
+       /* Nothing to notice */
+       if (!notice) return (FALSE);
+
+       /* Disturb */
+       if (disturb_state) disturb(0, 0);
+
+       /* Recalculate bonuses */
+       p_ptr->update |= (PU_BONUS);
+
+       /* Handle stuff */
+       handle_stuff();
+
+       /* Result */
+       return (TRUE);
+}
+
+
+
+/*
+ * Set "p_ptr->tim_eyeeye", notice observable changes
+ */
+bool set_tim_eyeeye(int v, bool do_dec)
+{
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
+
+       if (p_ptr->is_dead) return FALSE;
+
+       /* Open */
+       if (v)
+       {
+               if (p_ptr->tim_eyeeye && !do_dec)
+               {
+                       if (p_ptr->tim_eyeeye > v) return FALSE;
+               }
+               else if (!p_ptr->tim_eyeeye)
+               {
+#ifdef JP
+msg_print("Ë¡¤Î¼é¤ê¼ê¤Ë¤Ê¤Ã¤¿µ¤¤¬¤·¤¿¡ª");
+#else
+                       msg_print("You feel like a keeper of commandments!");
+#endif
+
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (p_ptr->tim_eyeeye)
+               {
+#ifdef JP
+msg_print("Ĩȳ¤ò¼¹¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤Ã¤¿¡£");
+#else
+                       msg_print("You no longer feel like a keeper.");
+#endif
+
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       p_ptr->tim_eyeeye = v;
+
+       /* Redraw status bar */
+       p_ptr->redraw |= (PR_STATUS);
+
+       /* Nothing to notice */
+       if (!notice) return (FALSE);
+
+       /* Disturb */
+       if (disturb_state) disturb(0, 0);
+
+       /* Recalculate bonuses */
+       p_ptr->update |= (PU_BONUS);
+
+       /* Handle stuff */
+       handle_stuff();
+
+       /* Result */
+       return (TRUE);
+}
+
+
+
+/*
  * Set "p_ptr->resist_magic", notice observable changes
  */
 bool set_resist_magic(int v, bool do_dec)
@@ -2287,7 +2448,7 @@ bool set_resist_magic(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2356,7 +2517,7 @@ bool set_tim_reflect(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2425,7 +2586,7 @@ bool set_multishadow(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2494,7 +2655,7 @@ bool set_dustrobe(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2563,7 +2724,7 @@ bool set_kabenuke(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2626,7 +2787,7 @@ bool set_tsuyoshi(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2763,16 +2924,16 @@ bool set_ele_attack(u32b attack_type, int v)
                             ((attack_type == ATTACK_ACID) ? "»À" :
                              ((attack_type == ATTACK_ELEC) ? "ÅÅ·â" :
                               ((attack_type == ATTACK_FIRE) ? "²Ð±ê" : 
-                               ((attack_type == ATTACK_COLD) ? "Î䵤" : 
-                                ((attack_type == ATTACK_POIS) ? "ÆÇ" : 
+                               ((attack_type == ATTACK_COLD) ? "Î䵤" : 
+                                ((attack_type == ATTACK_POIS) ? "ÆÇ" : 
                                        "(¤Ê¤·)"))))));
 #else
                msg_format("For a while, the blows you deal will %s",
                             ((attack_type == ATTACK_ACID) ? "melt with acid!" :
                              ((attack_type == ATTACK_ELEC) ? "shock your foes!" :
                               ((attack_type == ATTACK_FIRE) ? "burn with fire!" : 
-                               ((attack_type == ATTACK_COLD) ? "chill to the bone!" : 
-                                ((attack_type == ATTACK_POIS) ? "poison your enemies!" : 
+                               ((attack_type == ATTACK_COLD) ? "chill to the bone!" : 
+                                ((attack_type == ATTACK_POIS) ? "poison your enemies!" : 
                                        "do nothing special."))))));
 #endif
        }
@@ -2862,16 +3023,16 @@ bool set_ele_immune(u32b immune_type, int v)
                             ((immune_type == DEFENSE_ACID) ? "»À" :
                              ((immune_type == DEFENSE_ELEC) ? "ÅÅ·â" :
                               ((immune_type == DEFENSE_FIRE) ? "²Ð±ê" : 
-                               ((immune_type == DEFENSE_COLD) ? "Î䵤" : 
-                                ((immune_type == DEFENSE_POIS) ? "ÆÇ" : 
+                               ((immune_type == DEFENSE_COLD) ? "Î䵤" : 
+                                ((immune_type == DEFENSE_POIS) ? "ÆÇ" : 
                                        "(¤Ê¤·)"))))));
 #else
                msg_format("For a while, You are immune to %s",
                             ((immune_type == DEFENSE_ACID) ? "acid!" :
                              ((immune_type == DEFENSE_ELEC) ? "electricity!" :
                               ((immune_type == DEFENSE_FIRE) ? "fire!" : 
-                               ((immune_type == DEFENSE_COLD) ? "cold!" : 
-                                ((immune_type == DEFENSE_POIS) ? "poison!" : 
+                               ((immune_type == DEFENSE_COLD) ? "cold!" : 
+                                ((immune_type == DEFENSE_POIS) ? "poison!" : 
                                        "do nothing special."))))));
 #endif
        }
@@ -2901,7 +3062,7 @@ bool set_oppose_acid(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2910,7 +3071,7 @@ bool set_oppose_acid(int v, bool do_dec)
                {
                        if (p_ptr->oppose_acid > v) return FALSE;
                }
-               else if (!p_ptr->oppose_acid)
+               else if (!IS_OPPOSE_ACID())
                {
 #ifdef JP
 msg_print("»À¤Ø¤ÎÂÑÀ­¤¬¤Ä¤¤¤¿µ¤¤¬¤¹¤ë¡ª");
@@ -2925,7 +3086,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->oppose_acid && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_RESIST)) && !(p_ptr->special_defense & KATA_MUSOU))
+               if (p_ptr->oppose_acid && !music_singing(MUSIC_RESIST) && !(p_ptr->special_defense & KATA_MUSOU))
                {
 #ifdef JP
 msg_print("»À¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
@@ -2967,7 +3128,7 @@ bool set_oppose_elec(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -2976,7 +3137,7 @@ bool set_oppose_elec(int v, bool do_dec)
                {
                        if (p_ptr->oppose_elec > v) return FALSE;
                }
-               else if (!p_ptr->oppose_elec)
+               else if (!IS_OPPOSE_ELEC())
                {
 #ifdef JP
 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ­¤¬¤Ä¤¤¤¿µ¤¤¬¤¹¤ë¡ª");
@@ -2991,7 +3152,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->oppose_elec && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_RESIST)) && !(p_ptr->special_defense & KATA_MUSOU))
+               if (p_ptr->oppose_elec && !music_singing(MUSIC_RESIST) && !(p_ptr->special_defense & KATA_MUSOU))
                {
 #ifdef JP
 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
@@ -3033,7 +3194,7 @@ bool set_oppose_fire(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        if ((prace_is_(RACE_DEMON) && (p_ptr->lev > 44)) || (p_ptr->mimic_form == MIMIC_DEMON)) v = 1;
        /* Open */
@@ -3043,7 +3204,7 @@ bool set_oppose_fire(int v, bool do_dec)
                {
                        if (p_ptr->oppose_fire > v) return FALSE;
                }
-               else if (!p_ptr->oppose_fire)
+               else if (!IS_OPPOSE_FIRE())
                {
 #ifdef JP
 msg_print("²Ð¤Ø¤ÎÂÑÀ­¤¬¤Ä¤¤¤¿µ¤¤¬¤¹¤ë¡ª");
@@ -3058,7 +3219,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->oppose_fire && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_RESIST)) && !(p_ptr->special_defense & KATA_MUSOU))
+               if (p_ptr->oppose_fire && !music_singing(MUSIC_RESIST) && !(p_ptr->special_defense & KATA_MUSOU))
                {
 #ifdef JP
 msg_print("²Ð¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
@@ -3100,7 +3261,7 @@ bool set_oppose_cold(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -3109,7 +3270,7 @@ bool set_oppose_cold(int v, bool do_dec)
                {
                        if (p_ptr->oppose_cold > v) return FALSE;
                }
-               else if (!p_ptr->oppose_cold)
+               else if (!IS_OPPOSE_COLD())
                {
 #ifdef JP
 msg_print("Î䵤¤Ø¤ÎÂÑÀ­¤¬¤Ä¤¤¤¿µ¤¤¬¤¹¤ë¡ª");
@@ -3124,7 +3285,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->oppose_cold && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_RESIST)) && !(p_ptr->special_defense & KATA_MUSOU))
+               if (p_ptr->oppose_cold && !music_singing(MUSIC_RESIST) && !(p_ptr->special_defense & KATA_MUSOU))
                {
 #ifdef JP
 msg_print("Î䵤¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
@@ -3167,7 +3328,7 @@ bool set_oppose_pois(int v, bool do_dec)
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
        if ((p_ptr->pclass == CLASS_NINJA) && (p_ptr->lev > 44)) v = 1;
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -3176,7 +3337,7 @@ bool set_oppose_pois(int v, bool do_dec)
                {
                        if (p_ptr->oppose_pois > v) return FALSE;
                }
-               else if (!p_ptr->oppose_pois)
+               else if (!IS_OPPOSE_POIS())
                {
 #ifdef JP
 msg_print("ÆǤؤÎÂÑÀ­¤¬¤Ä¤¤¤¿µ¤¤¬¤¹¤ë¡ª");
@@ -3191,7 +3352,7 @@ msg_print("
        /* Shut */
        else
        {
-               if (p_ptr->oppose_pois && ((p_ptr->pclass != CLASS_BARD) || (p_ptr->magic_num1[0] != MUSIC_RESIST)) && !(p_ptr->special_defense & KATA_MUSOU))
+               if (p_ptr->oppose_pois && !music_singing(MUSIC_RESIST) && !(p_ptr->special_defense & KATA_MUSOU))
                {
 #ifdef JP
 msg_print("ÆǤؤÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
@@ -3237,7 +3398,7 @@ bool set_stun(int v)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        if (prace_is_(RACE_GOLEM) || ((p_ptr->pclass == CLASS_BERSERKER) && (p_ptr->lev > 34))) v = 0;
 
@@ -3326,7 +3487,7 @@ msg_print("Ƭ
                        break;
                }
 
-               if (randint(1000) < v || one_in_(16))
+               if (randint1(1000) < v || one_in_(16))
                {
 #ifdef JP
 msg_print("³ä¤ì¤ë¤è¤¦¤ÊƬÄˤ¬¤¹¤ë¡£");
@@ -3425,7 +3586,7 @@ bool set_cut(int v)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        if ((p_ptr->prace == RACE_GOLEM ||
            p_ptr->prace == RACE_SKELETON ||
@@ -3610,7 +3771,7 @@ msg_print("
                /* Notice */
                notice = TRUE;
 
-               if (randint(1000) < v || one_in_(16))
+               if (randint1(1000) < v || one_in_(16))
                {
                        if (!p_ptr->sustain_chr)
                        {
@@ -3908,7 +4069,7 @@ msg_print("
                {
                        p_ptr->wilderness_x = px;
                        p_ptr->wilderness_y = py;
-                       p_ptr->energy = 100;
+                       p_ptr->energy_need = 0;
                        change_wild_mode();
                }
 
@@ -3957,7 +4118,7 @@ bool inc_stat(int stat)
                /* Gain one (sometimes two) points */
                if (value < 18)
                {
-                       gain = ((rand_int(100) < 75) ? 1 : 2);
+                       gain = ((randint0(100) < 75) ? 1 : 2);
                        value += gain;
                }
 
@@ -3971,7 +4132,7 @@ bool inc_stat(int stat)
                        if (gain < 1) gain = 1;
 
                        /* Apply the bonus */
-                       value += randint(gain) + gain / 2;
+                       value += randint1(gain) + gain / 2;
 
                        /* Maximal value */
                        if (value > (p_ptr->stat_max_max[stat]-1)) value = p_ptr->stat_max_max[stat]-1;
@@ -4053,7 +4214,7 @@ bool dec_stat(int stat, int amount, int permanent)
                        if (loss < 1) loss = 1;
 
                        /* Randomize the loss */
-                       loss = ((randint(loss) + loss) * amount) / 100;
+                       loss = ((randint1(loss) + loss) * amount) / 100;
 
                        /* Maximal loss */
                        if (loss < amount/2) loss = amount/2;
@@ -4095,7 +4256,7 @@ bool dec_stat(int stat, int amount, int permanent)
                        /* and one-half of the stat bonus times the percentage, with a */
                        /* minimum damage of half the percentage. -CWS */
                        loss = (((max-18) / 2 + 1) / 2 + 1);
-                       loss = ((randint(loss) + loss) * amount) / 100;
+                       loss = ((randint1(loss) + loss) * amount) / 100;
                        if (loss < amount/2) loss = amount/2;
 
                        /* Lose some points */
@@ -4119,6 +4280,9 @@ bool dec_stat(int stat, int amount, int permanent)
                p_ptr->stat_cur[stat] = cur;
                p_ptr->stat_max[stat] = max;
 
+               /* Redisplay the stats later */
+               p_ptr->redraw |= (PR_STATS);
+
                /* Recalculate bonuses */
                p_ptr->update |= (PU_BONUS);
        }
@@ -4142,6 +4306,9 @@ bool res_stat(int stat)
                /* Recalculate bonuses */
                p_ptr->update |= (PU_BONUS);
 
+               /* Redisplay the stats later */
+               p_ptr->redraw |= (PR_STATS);
+
                /* Success */
                return (TRUE);
        }
@@ -4323,7 +4490,7 @@ bool do_dec_stat(int stat)
        }
 
        /* Sustain */
-       if (sust && (!ironman_nightmare || rand_int(13)))
+       if (sust && (!ironman_nightmare || randint0(13)))
        {
                /* Message */
 #ifdef JP
@@ -4339,7 +4506,7 @@ msg_format("%s
        }
 
        /* Attempt to reduce the stat */
-       if (dec_stat(stat, 10, (ironman_nightmare && !rand_int(13))))
+       if (dec_stat(stat, 10, (ironman_nightmare && !randint0(13))))
        {
                /* Message */
 #ifdef JP
@@ -4571,7 +4738,7 @@ msg_print("
 
        chg_virtue(V_CHANCE, 1);
 
-       if ((power > rand_int(20)) && one_in_(3) && (p_ptr->prace != RACE_ANDROID))
+       if ((power > randint0(20)) && one_in_(3) && (p_ptr->prace != RACE_ANDROID))
        {
                char effect_msg[80] = "";
                int new_race, expfact, goalexpfact, h_percent;
@@ -4579,7 +4746,7 @@ msg_print("
                /* Some form of racial polymorph... */
                power -= 10;
 
-               if ((power > rand_int(5)) && one_in_(4))
+               if ((power > randint0(5)) && one_in_(4))
                {
                        /* sex change */
                        power -= 2;
@@ -4608,7 +4775,7 @@ sprintf(effect_msg, "
                        }
                }
 
-               if ((power > rand_int(30)) && one_in_(5))
+               if ((power > randint0(30)) && one_in_(5))
                {
                        int tmp = 0;
 
@@ -4619,14 +4786,14 @@ sprintf(effect_msg, "
                        {
                                if (one_in_(2))
                                {
-                                       (void)dec_stat(tmp, randint(6) + 6, one_in_(3));
+                                       (void)dec_stat(tmp, randint1(6) + 6, one_in_(3));
                                        power -= 1;
                                }
                                tmp++;
                        }
 
                        /* Deformities are discriminated against! */
-                       (void)dec_stat(A_CHR, randint(6), TRUE);
+                       (void)dec_stat(A_CHR, randint1(6), TRUE);
 
                        if (effect_msg[0])
                        {
@@ -4651,7 +4818,7 @@ sprintf(effect_msg, "
                        }
                }
 
-               while ((power > rand_int(20)) && one_in_(10))
+               while ((power > randint0(20)) && one_in_(10))
                {
                        /* Polymorph into a less mutated form */
                        power -= 10;
@@ -4672,11 +4839,11 @@ msg_print("
                if (power < 0)
                        goalexpfact = 100;
                else
-                       goalexpfact = 100 + 3 * rand_int(power);
+                       goalexpfact = 100 + 3 * randint0(power);
 
                do
                {
-                       new_race = rand_int(MAX_RACES);
+                       new_race = randint0(MAX_RACES);
                        expfact = race_info[new_race].r_exp;
                }
                while (((new_race == p_ptr->prace) && (expfact > goalexpfact)) || (new_race == RACE_ANDROID));
@@ -4707,7 +4874,7 @@ msg_print("
                }
                else
                {
-                       p_ptr->old_race2 = 1L << (p_ptr->prace-32);
+                       p_ptr->old_race2 |= 1L << (p_ptr->prace-32);
                }
                p_ptr->prace = new_race;
                rp_ptr = &race_info[p_ptr->prace];
@@ -4755,7 +4922,7 @@ msg_print("
                lite_spot(py, px);
        }
 
-       if ((power > rand_int(30)) && one_in_(6))
+       if ((power > randint0(30)) && one_in_(6))
        {
                int tmp = 0;
 
@@ -4770,24 +4937,24 @@ msg_format("%s
 
                while (tmp < 6)
                {
-                       (void)dec_stat(tmp, randint(6) + 6, one_in_(3));
+                       (void)dec_stat(tmp, randint1(6) + 6, one_in_(3));
                        tmp++;
                }
                if (one_in_(6))
                {
 #ifdef JP
-msg_print("¸½ºß»Ñ¤ÇÀ¸¤­¤Æ¤¤¤¯¤Î¤Ïº¤Æñ¤Ê¤è¤¦¤À¡ª");
-take_hit(DAMAGE_LOSELIFE, damroll(randint(10), p_ptr->lev), "Ã×̿Ū¤ÊÆÍÁ³ÊÑ°Û", -1);
+                       msg_print("¸½ºß¤Î»Ñ¤ÇÀ¸¤­¤Æ¤¤¤¯¤Î¤Ïº¤Æñ¤Ê¤è¤¦¤À¡ª");
+                       take_hit(DAMAGE_LOSELIFE, damroll(randint1(10), p_ptr->lev), "Ã×̿Ū¤ÊÆÍÁ³ÊÑ°Û", -1);
 #else
                        msg_print("You find living difficult in your present form!");
-                       take_hit(DAMAGE_LOSELIFE, damroll(randint(10), p_ptr->lev), "a lethal mutation", -1);
+                       take_hit(DAMAGE_LOSELIFE, damroll(randint1(10), p_ptr->lev), "a lethal mutation", -1);
 #endif
 
                        power -= 10;
                }
        }
 
-       if ((power > rand_int(20)) && one_in_(4))
+       if ((power > randint0(20)) && one_in_(4))
        {
                power -= 10;
 
@@ -4795,13 +4962,13 @@ take_hit(DAMAGE_LOSELIFE, damroll(randint(10), p_ptr->lev), "
                do_cmd_rerate(FALSE);
        }
 
-       while ((power > rand_int(15)) && one_in_(3))
+       while ((power > randint0(15)) && one_in_(3))
        {
                power -= 7;
                (void)gain_random_mutation(0);
        }
 
-       if (power > rand_int(5))
+       if (power > randint0(5))
        {
                power -= 5;
                do_poly_wounds();
@@ -4825,7 +4992,7 @@ take_hit(DAMAGE_LOSELIFE, damroll(randint(10), p_ptr->lev), "
  * the game when he dies, since the "You die." message is shown before
  * setting the player to "dead".
  */
-bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
+int take_hit(int damage_type, int damage, cptr hit_from, int monspell)
 {
        int old_chp = p_ptr->chp;
 
@@ -4835,7 +5002,7 @@ bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
        int warning = (p_ptr->mhp * hitpoint_warn / 10);
 
        /* Paranoia */
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return 0;
 
        if (p_ptr->sutemi) damage *= 2;
        if (p_ptr->special_defense & KATA_IAI) damage += (damage + 4) / 5;
@@ -4857,7 +5024,7 @@ bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
        /* Mega-Hack -- Apply "invulnerability" */
        if ((damage_type != DAMAGE_USELIFE) && (damage_type != DAMAGE_LOSELIFE))
        {
-               if ((p_ptr->invuln || ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] == MUSIC_INVULN))) && (damage < 9000))
+               if (IS_INVULN() && (damage < 9000))
                {
                        if (damage_type == DAMAGE_FORCE)
                        {
@@ -4877,10 +5044,10 @@ bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
                        }
                        else
                        {
-                               return FALSE;
+                               return 0;
                        }
                }
+
                /* Multishadow effects is determined by turn */
                if (p_ptr->multishadow && (turn & 1))
                {
@@ -4899,10 +5066,10 @@ bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
 #else
                                msg_print("The attack hits Shadow, you are unharmed!");
 #endif
-                               return FALSE;
+                               return 0;
                        }
                }
-                   
+
                if (p_ptr->wraith_form)
                {
                        if (damage_type == DAMAGE_FORCE)
@@ -4920,7 +5087,7 @@ bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
                        }
                }
 
-               if ((p_ptr->special_defense & KATA_MUSOU))
+               if (p_ptr->special_defense & KATA_MUSOU)
                {
                        damage /= 2;
                        if ((damage == 0) && one_in_(2)) damage = 1;
@@ -4931,6 +5098,7 @@ bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
        p_ptr->chp -= damage;
        if(damage_type == DAMAGE_GENO && p_ptr->chp < 0)
        {
+               damage += p_ptr->chp;
                p_ptr->chp = 0;
        }
 
@@ -4951,11 +5119,10 @@ bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
        /* Dead player */
        if (p_ptr->chp < 0)
        {
-               char buf[10];
                bool android = (p_ptr->prace == RACE_ANDROID ? TRUE : FALSE);
 
 #ifdef JP       /* »à¤ó¤À»þ¤Ë¶¯À©½ªÎ»¤·¤Æ»à¤ò²óÈò¤Ç¤­¤Ê¤¯¤·¤Æ¤ß¤¿ by Habu */
-               if (!munchkin_death)
+               if (!cheat_save)
                        if(!save_player()) msg_print("¥»¡¼¥Ö¼ºÇÔ¡ª");
 #endif
 
@@ -4968,62 +5135,98 @@ bool take_hit(int damage_type, int damage, cptr hit_from, int monspell)
                p_ptr->leaving = TRUE;
 
                /* Note death */
-               death = TRUE;
+               p_ptr->is_dead = TRUE;
 
                if (p_ptr->inside_arena)
                {
+                       cptr m_name = r_name+r_info[arena_info[p_ptr->arena_number].r_idx].name;
 #ifdef JP
-msg_format("¤¢¤Ê¤¿¤Ï%s¤ÎÁ°¤ËÇÔ¤ìµî¤Ã¤¿¡£", r_name+r_info[arena_monsters[p_ptr->arena_number]].name);
+                       msg_format("¤¢¤Ê¤¿¤Ï%s¤ÎÁ°¤ËÇÔ¤ìµî¤Ã¤¿¡£", m_name);
 #else
-msg_format("You are beaten by %s.", r_name+r_info[arena_monsters[p_ptr->arena_number]].name);
+                       msg_format("You are beaten by %s.", m_name);
 #endif
                        msg_print(NULL);
+                       if (record_arena) do_cmd_write_nikki(NIKKI_ARENA, -1 - p_ptr->arena_number, m_name);
                }
                else
                {
+                       int q_idx = quest_number(dun_level);
+                       bool seppuku = streq(hit_from, "Seppuku");
+                       bool winning_seppuku = p_ptr->total_winner && seppuku;
+
 #ifdef WORLD_SCORE
                        /* Make screen dump */
                        screen_dump = make_screen_dump();
 #endif
 
                        /* Note cause of death */
-                       (void)strcpy(died_from, hit_from);
-
-                       if (p_ptr->image) strcat(died_from,"(?)");
+                       if (seppuku)
+                       {
+                               strcpy(p_ptr->died_from, hit_from);
+#ifdef JP
+                               if (!winning_seppuku) strcpy(p_ptr->died_from, "ÀÚÊ¢");
+#endif
+                       }
+                       else
+                       {
+                               char dummy[1024];
+#ifdef JP
+                               sprintf(dummy, "%s%s%s", !p_ptr->paralyzed ? "" : p_ptr->free_act ? "ĦÁü¾õÂÖ¤Ç" : "Ëãáã¾õÂÖ¤Ç", p_ptr->image ? "¸¸³Ð¤ËÏĤó¤À" : "", hit_from);
+#else
+                               sprintf(dummy, "%s%s", hit_from, !p_ptr->paralyzed ? "" : " while helpless");
+#endif
+                               my_strcpy(p_ptr->died_from, dummy, sizeof p_ptr->died_from);
+                       }
 
                        /* No longer a winner */
-                       total_winner = FALSE;
+                       p_ptr->total_winner = FALSE;
 
-                       if (p_ptr->inside_arena)
+                       if (winning_seppuku)
+                       {
 #ifdef JP
-                               strcpy(buf,"¥¢¥ê¡¼¥Ê");
+                               do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "¾¡Íø¤Î¸åÀÚÊ¢¤·¤¿¡£");
 #else
-                               strcpy(buf,"in the Arena");
+                               do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "did Seppuku after the winning.");
 #endif
-                       else if (!dun_level)
+                       }
+                       else
+                       {
+                               char buf[10];
+
+                               if (p_ptr->inside_arena)
 #ifdef JP
-                               strcpy(buf,"ÃϾå");
+                                       strcpy(buf,"¥¢¥ê¡¼¥Ê");
 #else
-                               strcpy(buf,"on The surface");
+                                       strcpy(buf,"in the Arena");
 #endif
-                       else if (quest_number(dun_level) && ((quest_number(dun_level) < MIN_RANDOM_QUEST) && !(quest_number(dun_level) == QUEST_OBERON || quest_number(dun_level) == QUEST_SERPENT)))
+                               else if (!dun_level)
 #ifdef JP
-                               strcpy(buf,"¥¯¥¨¥¹¥È");
+                                       strcpy(buf,"ÃϾå");
 #else
-                               strcpy(buf,"in a quest");
+                                       strcpy(buf,"on the surface");
 #endif
-                       else
+                               else if (q_idx && (is_fixed_quest_idx(q_idx) &&
+                                        !((q_idx == QUEST_OBERON) || (q_idx == QUEST_SERPENT))))
 #ifdef JP
-                               sprintf(buf,"%d³¬", dun_level);
+                                       strcpy(buf,"¥¯¥¨¥¹¥È");
 #else
-                               sprintf(buf,"level %d", dun_level);
+                                       strcpy(buf,"in a quest");
 #endif
+                               else
 #ifdef JP
-                       sprintf(tmp,"%s¤Ç%s¤Ë»¦¤µ¤ì¤¿¡£",buf, died_from);
+                                       sprintf(buf,"%d³¬", dun_level);
 #else
-                       sprintf(tmp,"killed by %s %s.", died_from, buf);
+                                       sprintf(buf,"level %d", dun_level);
 #endif
-                       do_cmd_write_nikki(NIKKI_BUNSHOU, 0, tmp);
+
+#ifdef JP
+                               sprintf(tmp, "%s¤Ç%s¤Ë»¦¤µ¤ì¤¿¡£", buf, p_ptr->died_from);
+#else
+                               sprintf(tmp, "killed by %s %s.", p_ptr->died_from, buf);
+#endif
+                               do_cmd_write_nikki(NIKKI_BUNSHOU, 0, tmp);
+                       }
+
 #ifdef JP
                        do_cmd_write_nikki(NIKKI_GAMESTART, 1, "-------- ¥²¡¼¥à¥ª¡¼¥Ð¡¼ --------");
 #else
@@ -5034,11 +5237,10 @@ msg_format("You are beaten by %s.", r_name+r_info[arena_monsters[p_ptr->arena_nu
                        flush();
 
 #ifdef JP
-if (get_check("²èÌ̤òÊݸ¤·¤Þ¤¹¤«¡©"))
+                       if (get_check_strict("²èÌ̤òÊݸ¤·¤Þ¤¹¤«¡©", CHECK_NO_HISTORY))
 #else
-                       if (get_check("Dump the screen? "))
+                       if (get_check_strict("Dump the screen? ", CHECK_NO_HISTORY))
 #endif
-
                        {
                                do_cmd_save_screen();
                        }
@@ -5049,7 +5251,7 @@ if (get_check("
                        if (!last_words)
                        {
 #ifdef JP
-msg_format("¤¢¤Ê¤¿¤Ï%s¤Þ¤·¤¿¡£", android ? "²õ¤ì" : "»à¤Ë");
+                               msg_format("¤¢¤Ê¤¿¤Ï%s¤Þ¤·¤¿¡£", android ? "²õ¤ì" : "»à¤Ë");
 #else
                                msg_print(android ? "You are broken." : "You die.");
 #endif
@@ -5058,10 +5260,10 @@ msg_format("
                        }
                        else
                        {
-                               if (streq(died_from, "Seppuku"))
+                               if (winning_seppuku)
                                {
 #ifdef JP
-                                 get_rnd_line("seppuku_j.txt", 0, death_message);
+                                       get_rnd_line("seppuku_j.txt", 0, death_message);
 #else
                                        get_rnd_line("seppuku.txt", 0, death_message);
 #endif
@@ -5069,13 +5271,13 @@ msg_format("
                                else
                                {
 #ifdef JP
-get_rnd_line("death_j.txt", 0, death_message);
+                                       get_rnd_line("death_j.txt", 0, death_message);
 #else
                                        get_rnd_line("death.txt", 0, death_message);
 #endif
                                }
 #ifdef JP
-                               while (!get_string(streq(died_from, "Seppuku") ? "¼­À¤¤Î¶ç: " : "ÃÇËöËâ¤Î¶«¤Ó: ", death_message, 1024)) ;
+                               while (!get_string(winning_seppuku ? "¼­À¤¤Î¶ç: " : "ÃÇËöËâ¤Î¶«¤Ó: ", death_message, 1024)) ;
 #else
                                while (!get_string("Last word: ", death_message, 1024)) ;
 #endif
@@ -5087,59 +5289,68 @@ get_rnd_line("death_j.txt", 0, death_message);
                                        strcpy(death_message, android ? "You are broken." : "You die.");
 #endif
                                }
-                               if (streq(died_from, "Seppuku"))
-                               {
+
 #ifdef JP
-                                 int i, len;
-                                 int w = Term->wid;
-                                 int h = Term->hgt;
-                                 int msg_pos_x[9] = {  5,  7,  9, 12,  14,  17,  19,  21, 23};
-                                 int msg_pos_y[9] = {  3,  4,  5,  4,   5,   4,   5,   6,  4};
-                                 cptr str;
-                                 char* str2;
-
-                                 Term_clear();
-
-                                 /* ºù»¶¤ë */
-                                 for (i = 0; i < 40; i++) 
-                                   Term_putstr(rand_int(w / 2) * 2, rand_int(h), 2, TERM_VIOLET, "¦Ô");
-
-                                 str = death_message;
-                                 if (strncmp(str, "¡Ö", 2) == 0) str += 2;
-
-                                 str2 = strstr_j(str, "¡×");
-                                 if (str2 != NULL) str2 = '\0';
-
-                                 i = 0;
-                                 while (i < 9)
-                                 {
-                                   str2 = strstr_j(str, " ");
-                                   if (str2 == NULL) len = strlen(str);
-                                   else len = str2 - str;
-
-                                   if (len != 0)
-                                   {
-                                     Term_putstr_v(w * 3 / 4 - 2 - msg_pos_x[i] * 2, msg_pos_y[i], len,
-                                                 TERM_WHITE, str);
-                                     if (str2 == NULL) break;
-                                     i++;
-                                   }
-                                   str = str2 + 1;
-                                   if (*str == 0) break;
-                                 }
-                                 flush();
-                                 (void)inkey();
-#else
-                                       msg_print(death_message);
+                               if (winning_seppuku)
+                               {
+                                       int i, len;
+                                       int w = Term->wid;
+                                       int h = Term->hgt;
+                                       int msg_pos_x[9] = {  5,  7,  9, 12,  14,  17,  19,  21, 23};
+                                       int msg_pos_y[9] = {  3,  4,  5,  4,   5,   4,   5,   6,  4};
+                                       cptr str;
+                                       char* str2;
+
+                                       Term_clear();
+
+                                       /* ºù»¶¤ë */
+                                       for (i = 0; i < 40; i++)
+                                               Term_putstr(randint0(w / 2) * 2, randint0(h), 2, TERM_VIOLET, "¦Ô");
+
+                                       str = death_message;
+                                       if (strncmp(str, "¡Ö", 2) == 0) str += 2;
+
+                                       str2 = strstr_j(str, "¡×");
+                                       if (str2 != NULL) *str2 = '\0';
+
+                                       i = 0;
+                                       while (i < 9)
+                                       {
+                                               str2 = strstr_j(str, " ");
+                                               if (str2 == NULL) len = strlen(str);
+                                               else len = str2 - str;
+
+                                               if (len != 0)
+                                               {
+                                                       Term_putstr_v(w * 3 / 4 - 2 - msg_pos_x[i] * 2, msg_pos_y[i], len,
+                                                       TERM_WHITE, str);
+                                                       if (str2 == NULL) break;
+                                                       i++;
+                                               }
+                                               str = str2 + 1;
+                                               if (*str == 0) break;
+                                       }
+
+                                       /* Hide cursor */
+                                       Term_putstr(w-1, h-1, 1, TERM_WHITE, " ");
+
+                                       flush();
+#ifdef WORLD_SCORE
+                                       /* Make screen dump */
+                                       screen_dump = make_screen_dump();
 #endif
+
+                                       /* Wait a key press */
+                                       (void)inkey();
                                }
                                else
+#endif
                                        msg_print(death_message);
                        }
                }
 
                /* Dead */
-               return TRUE;
+               return damage;
        }
 
        /* Hitpoint warning */
@@ -5152,8 +5363,15 @@ get_rnd_line("death_j.txt", 0, death_message);
 
                if (record_danger && (old_chp > warning))
                {
+                       if (p_ptr->image && damage_type == DAMAGE_ATTACK)
 #ifdef JP
-                       sprintf(tmp,"%s¤Ë¤è¤Ã¤Æ¥Ô¥ó¥Á¤Ë´Ù¤¤¤Ã¤¿¡£",hit_from);
+                               hit_from = "²¿¤«";
+#else
+                               hit_from = "something";
+#endif
+
+#ifdef JP
+                       sprintf(tmp,"%s¤Ë¤è¤Ã¤Æ¥Ô¥ó¥Á¤Ë´Ù¤Ã¤¿¡£",hit_from);
 #else
                        sprintf(tmp,"A critical situation because of %s.",hit_from);
 #endif
@@ -5180,10 +5398,10 @@ msg_print("*** 
        {
                p_ptr->wilderness_x = px;
                p_ptr->wilderness_y = py;
-               p_ptr->energy = 100;
+               p_ptr->energy_need = 0;
                change_wild_mode();
        }
-       return TRUE;
+       return damage;
 }
 
 
@@ -5192,7 +5410,7 @@ msg_print("*** 
  */
 void gain_exp(s32b amount)
 {
-       if (death) return;
+       if (p_ptr->is_dead) return;
 
        if (p_ptr->prace == RACE_ANDROID) return;
 
@@ -5215,7 +5433,7 @@ void calc_android_exp(void)
 {
        int i;
        u32b total_exp = 0;
-       if (death) return;
+       if (p_ptr->is_dead) return;
 
        if (p_ptr->prace != RACE_ANDROID) return;
 
@@ -5235,15 +5453,40 @@ void calc_android_exp(void)
 
                object_copy(q_ptr, o_ptr);
                q_ptr->discount = 0;
-               q_ptr->ident &= ~(IDENT_CURSED);
-               q_ptr->art_flags3 &= ~(TR3_CURSED | TR3_HEAVY_CURSE | TR3_PERMA_CURSE | TR3_TY_CURSE);
+               q_ptr->curse_flags = 0L;
 
                if (o_ptr->name1)
                {
                        level = (level + MAX(a_info[o_ptr->name1].level - 8, 5)) / 2;
-                       level += MIN(20, a_info[o_ptr->name1].rarity/(a_info[o_ptr->name1].flags3 & TR3_INSTA_ART ? 10 : 3));
+                       level += MIN(20, a_info[o_ptr->name1].rarity/(a_info[o_ptr->name1].gen_flags & TRG_INSTA_ART ? 10 : 3));
                }
-               else if (o_ptr->name2) level += MAX(3, (e_info[o_ptr->name2].rating - 5)/2);
+               else if (o_ptr->name2)
+               {
+                       level += MAX(3, (e_info[o_ptr->name2].rating - 5)/2);
+               }
+               else if (o_ptr->art_name)
+               {
+                       s32b total_flags = flag_cost(o_ptr, o_ptr->pval);
+                       int fake_level;
+
+                       if (o_ptr->tval >= TV_BOOTS)
+                       {
+                               /* For armors */
+                               if (total_flags < 15000) fake_level = 10;
+                               else if (total_flags < 35000) fake_level = 25;
+                               else fake_level = 40;
+                       }
+                       else
+                       {
+                               /* For weapons */
+                               if (total_flags < 20000) fake_level = 10;
+                               else if (total_flags < 45000) fake_level = 25;
+                               else fake_level = 40;
+                       }
+
+                       level = MAX(level, (level + MAX(fake_level - 8, 5)) / 2 + 3);
+               }
+
                value = object_value_real(q_ptr);
 
                if (value <= 0) continue;
@@ -5300,6 +5543,51 @@ void lose_exp(s32b amount)
        check_experience();
 }
 
+
+/*
+ * Drain experience
+ * If resisted to draining, return FALSE
+ */
+bool drain_exp(s32b drain, s32b slip, int hold_life_prob)
+{
+       /* Androids and their mimics are never drained */
+       if (p_ptr->prace == RACE_ANDROID) return FALSE;
+
+       if (p_ptr->hold_life && (randint0(100) < hold_life_prob))
+       {
+               /* Hold experience */
+#ifdef JP
+               msg_print("¤·¤«¤·¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¼é¤ê¤­¤Ã¤¿¡ª");
+#else
+               msg_print("You keep hold of your life force!");
+#endif
+               return FALSE;
+       }
+
+       /* Hold experience failed */
+       if (p_ptr->hold_life)
+       {
+#ifdef JP
+               msg_print("À¸Ì¿ÎϤò¾¯¤·µÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª");
+#else
+               msg_print("You feel your life slipping away!");
+#endif
+               lose_exp(slip);
+       }
+       else
+       {
+#ifdef JP
+               msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª");
+#else
+               msg_print("You feel your life draining away!");
+#endif
+               lose_exp(drain);
+       }
+
+       return TRUE;
+}
+
+
 bool set_ultimate_res(int v, bool do_dec)
 {
        bool notice = FALSE;
@@ -5307,7 +5595,7 @@ bool set_ultimate_res(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -5372,7 +5660,7 @@ bool set_tim_res_nether(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -5437,7 +5725,7 @@ bool set_tim_res_time(int v, bool do_dec)
        /* Hack -- Force good values */
        v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
 
-       if (death) return FALSE;
+       if (p_ptr->is_dead) return FALSE;
 
        /* Open */
        if (v)
@@ -5558,15 +5846,15 @@ bool choose_ele_attack(void)
        choice = inkey();
 
        if ((choice == 'a') || (choice == 'A')) 
-               set_ele_attack(ATTACK_FIRE, p_ptr->lev/2 + randint(p_ptr->lev/2));
+               set_ele_attack(ATTACK_FIRE, p_ptr->lev/2 + randint1(p_ptr->lev/2));
        else if (((choice == 'b') || (choice == 'B')) && (num >= 2))
-               set_ele_attack(ATTACK_COLD, p_ptr->lev/2 + randint(p_ptr->lev/2));
+               set_ele_attack(ATTACK_COLD, p_ptr->lev/2 + randint1(p_ptr->lev/2));
        else if (((choice == 'c') || (choice == 'C')) && (num >= 3))
-               set_ele_attack(ATTACK_POIS, p_ptr->lev/2 + randint(p_ptr->lev/2));
+               set_ele_attack(ATTACK_POIS, p_ptr->lev/2 + randint1(p_ptr->lev/2));
        else if (((choice == 'd') || (choice == 'D')) && (num >= 4))
-               set_ele_attack(ATTACK_ACID, p_ptr->lev/2 + randint(p_ptr->lev/2));
+               set_ele_attack(ATTACK_ACID, p_ptr->lev/2 + randint1(p_ptr->lev/2));
        else if (((choice == 'e') || (choice == 'E')) && (num >= 5))
-               set_ele_attack(ATTACK_ELEC, p_ptr->lev/2 + randint(p_ptr->lev/2));
+               set_ele_attack(ATTACK_ELEC, p_ptr->lev/2 + randint1(p_ptr->lev/2));
        else
        {
 #ifdef JP