OSDN Git Service

[Refactor] #37353 externs.h から util.h への宣言移動。
[hengband/hengband.git] / src / mspells4.c
index 58cbf89..4185194 100644 (file)
@@ -7,17 +7,22 @@
 
 
 #include "angband.h"
+#include "util.h"
+
+#include "floor.h"
+#include "grid.h"
+#include "spells-summon.h"
+#include "artifact.h"
+#include "player-status.h"
+#include "realm-hex.h"
+#include "player-move.h"
+#include "monster-spell.h"
+#include "monster-status.h"
+#include "spells.h"
+#include "melee.h"
+#include "player-effects.h"
+
 
-/*!
-* @brief モンスターIDを取り、モンスター名をm_nameに代入する /
-* @param m_idx モンスターID
-* @param m_name モンスター名を入力する配列
-*/
-void monster_name(MONSTER_IDX m_idx, char* m_name)
-{
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_desc(m_name, m_ptr, 0x00);
-}
 
 /*!
 * @brief モンスター2体がプレイヤーの近くに居るかの判定 /
@@ -27,8 +32,8 @@ void monster_name(MONSTER_IDX m_idx, char* m_name)
 */
 bool monster_near_player(MONSTER_IDX m_idx, MONSTER_IDX t_idx)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        return (m_ptr->cdis <= MAX_SIGHT) || (t_ptr->cdis <= MAX_SIGHT);
 }
 
@@ -39,7 +44,7 @@ bool monster_near_player(MONSTER_IDX m_idx, MONSTER_IDX t_idx)
 */
 bool see_monster(MONSTER_IDX m_idx)
 {
-       monster_type *m_ptr = &m_list[m_idx];
+       monster_type *m_ptr = &current_floor_ptr->m_list[m_idx];
        return is_seen(m_ptr);
 }
 
@@ -50,64 +55,29 @@ bool see_monster(MONSTER_IDX m_idx)
 */
 bool spell_learnable(MONSTER_IDX m_idx)
 {
-       monster_type *m_ptr = &m_list[m_idx];
+       monster_type *m_ptr = &current_floor_ptr->m_list[m_idx];
        /* Extract the "see-able-ness" */
        bool seen = (!p_ptr->blind && m_ptr->ml);
 
        bool maneable = player_has_los_bold(m_ptr->fy, m_ptr->fx);
-       return (seen && maneable && !world_monster);
+       return (seen && maneable && !current_world_ptr->timewalk_m_idx);
 }
 
 /*!
-* @brief モンスターIDからモンスターのレベルを取得する /
-* @param m_idx モンスターID
-* @return モンスターのレベル
-*/
-int monster_level_idx(MONSTER_IDX m_idx)
-{
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-       int rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
-       return rlev;
-}
-
-/*!
-* @brief モンスターIDからPOWERFULフラグの有無を取得する /
-* @param m_idx モンスターID
-* @return POWERFULフラグがあればTRUE、なければFALSEを返す。
-*/
-bool monster_is_powerful(MONSTER_IDX m_idx)
-{
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-       bool powerful = r_ptr->flags2 & RF2_POWERFUL ? TRUE : FALSE;
-       return powerful;
-}
-
-/*!
-* @brief モンスターがユニーク召喚可能であるかを判定する /
+* @brief 特定条件のモンスター召喚のみPM_ALLOW_UNIQUEを許可する /
 * @param m_idx モンスターID
 * @return 召喚可能であればPM_ALLOW_UNIQUEを返す。
 */
-u32b monster_u_mode(MONSTER_IDX m_idx)
+BIT_FLAGS monster_u_mode(MONSTER_IDX m_idx)
 {
-       u32b u_mode = 0L;
-       monster_type    *m_ptr = &m_list[m_idx];
+       BIT_FLAGS u_mode = 0L;
+       monster_type *m_ptr = &current_floor_ptr->m_list[m_idx];
        bool pet = is_pet(m_ptr);
        if (!pet) u_mode |= PM_ALLOW_UNIQUE;
        return u_mode;
 }
 
 /*!
-* @brief モンスターを起こす /
-* @param t_idx モンスターID
-*/
-void monster_wakeup(MONSTER_IDX t_idx)
-{
-       (void)set_monster_csleep(t_idx, 0);
-}
-
-/*!
  * @brief モンスターが呪文行使する際のメッセージを処理する汎用関数 /
  * @param m_idx 呪文を唱えるモンスターID
  * @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
@@ -118,13 +88,13 @@ void monster_wakeup(MONSTER_IDX t_idx)
  * @param msg_flag_aux メッセージを分岐するためのフラグ
  * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
  */
-static void monspell_message_base(MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg1, cptr msg2, cptr msg3, cptr msg4, bool msg_flag_aux, int TARGET_TYPE)
+static void monspell_message_base(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, concptr msg3, concptr msg4, bool msg_flag_aux, int TARGET_TYPE)
 {
        bool known = monster_near_player(m_idx, t_idx);
        bool see_either = see_monster(m_idx) || see_monster(t_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
-       char m_name[80], t_name[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
@@ -163,7 +133,7 @@ static void monspell_message_base(MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg
 * @param msg3 プレイヤーが盲目でなく、モンスター対象とする場合のメッセージ
 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
 */
-void monspell_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg1, cptr msg2, cptr msg3, int TARGET_TYPE)
+void monspell_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, concptr msg3, int TARGET_TYPE)
 {
        monspell_message_base(m_idx, t_idx, msg1, msg1, msg2, msg3, p_ptr->blind > 0, TARGET_TYPE);
 }
@@ -176,7 +146,7 @@ void monspell_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg1, cptr msg2
 * @param msg2 モンスター対象とする場合のメッセージ
 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
 */
-void simple_monspell_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg1, cptr msg2, int TARGET_TYPE)
+void simple_monspell_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, int TARGET_TYPE)
 {
        monspell_message_base(m_idx, t_idx, msg1, msg2, msg1, msg2, p_ptr->blind > 0, TARGET_TYPE);
 }
@@ -200,7 +170,7 @@ void spell_RF4_SHRIEK(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
        }
        else if (TARGET_TYPE == MONSTER_TO_MONSTER)
        {
-               monster_wakeup(t_idx);
+               set_monster_csleep(t_idx, 0);
        }
 }
 
@@ -212,7 +182,7 @@ void spell_RF4_SHRIEK(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  */
 void spell_RF4_DISPEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       char m_name[80], t_name[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
@@ -229,6 +199,11 @@ void spell_RF4_DISPEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
                if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
                        msg_print(_("やりやがったな!", ""));
+               else if ((p_ptr->pseikaku == SEIKAKU_CHARGEMAN))
+               {
+                       if (randint0(2) == 0) msg_print(_("ジュラル星人め!", ""));
+                       else msg_print(_("弱い者いじめは止めるんだ!", ""));
+               }
 
                learn_spell(MS_DISPEL);
        }
@@ -304,14 +279,14 @@ HIT_POINT spell_RF4_SHOOT(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX
 HIT_POINT spell_RF4_BREATH(int GF_TYPE, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        HIT_POINT dam, ms_type, drs_type = 0;
-       cptr type_s;
+       concptr type_s;
        bool smart_learn_aux = TRUE;
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
        bool known = monster_near_player(m_idx, t_idx);
        bool see_either = see_monster(m_idx) || see_monster(t_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
-       char m_name[80], t_name[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
@@ -622,7 +597,7 @@ HIT_POINT spell_RF5_BA_ELEC(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 HIT_POINT spell_RF5_BA_FIRE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        HIT_POINT dam, rad;
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
 
        if (m_ptr->r_idx == MON_ROLENTO)
        {
@@ -749,7 +724,7 @@ HIT_POINT spell_RF5_BA_WATE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
        bool see_either = see_monster(m_idx) || see_monster(t_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
-       char t_name[80];
+       GAME_TEXT t_name[MAX_NLEN];
        monster_name(t_idx, t_name);
 
 
@@ -836,7 +811,7 @@ HIT_POINT spell_RF5_BA_DARK(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 HIT_POINT spell_RF5_DRAIN_MANA(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        HIT_POINT dam;
-       char m_name[80], t_name[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
@@ -870,10 +845,10 @@ HIT_POINT spell_RF5_DRAIN_MANA(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTE
 */
 HIT_POINT spell_RF5_MIND_BLAST(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
        bool seen = (!p_ptr->blind && m_ptr->ml);
        HIT_POINT dam;
-       char m_name[80], t_name[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
@@ -907,10 +882,10 @@ HIT_POINT spell_RF5_MIND_BLAST(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTE
 */
 HIT_POINT spell_RF5_BRAIN_SMASH(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type *m_ptr = &m_list[m_idx];
+       monster_type *m_ptr = &current_floor_ptr->m_list[m_idx];
        bool seen = (!p_ptr->blind && m_ptr->ml);
        HIT_POINT dam;
-       char m_name[80], t_name[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
@@ -948,9 +923,9 @@ HIT_POINT spell_RF5_BRAIN_SMASH(POSITION y, POSITION x, MONSTER_IDX m_idx, MONST
 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
 * @return ダメージ量を返す。
 */
-void spell_RF5_CAUSE(int GF_TYPE, HIT_POINT dam, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg1, cptr msg2, cptr msg3, int MS_TYPE, int TARGET_TYPE)
+void spell_RF5_CAUSE(int GF_TYPE, HIT_POINT dam, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, concptr msg3, int MS_TYPE, int TARGET_TYPE)
 {
-       char m_name[80], t_name[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
@@ -987,7 +962,7 @@ void spell_RF5_CAUSE(int GF_TYPE, HIT_POINT dam, POSITION y, POSITION x, MONSTER
 */
 HIT_POINT spell_RF5_CAUSE_1(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       cptr msg1, msg2, msg3;
+       concptr msg1, msg2, msg3;
        HIT_POINT dam;
        dam = monspell_damage((MS_CAUSE_1), m_idx, DAM_ROLL);
 
@@ -1010,7 +985,7 @@ HIT_POINT spell_RF5_CAUSE_1(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 */
 HIT_POINT spell_RF5_CAUSE_2(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       cptr msg1, msg2, msg3;
+       concptr msg1, msg2, msg3;
        HIT_POINT dam;
        dam = monspell_damage((MS_CAUSE_2), m_idx, DAM_ROLL);
 
@@ -1033,7 +1008,7 @@ HIT_POINT spell_RF5_CAUSE_2(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 */
 HIT_POINT spell_RF5_CAUSE_3(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       cptr msg1, msg2, msg3;
+       concptr msg1, msg2, msg3;
        HIT_POINT dam;
        dam = monspell_damage((MS_CAUSE_3), m_idx, DAM_ROLL);
 
@@ -1056,7 +1031,7 @@ HIT_POINT spell_RF5_CAUSE_3(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 */
 HIT_POINT spell_RF5_CAUSE_4(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       cptr msg1, msg2, msg3;
+       concptr msg1, msg2, msg3;
        HIT_POINT dam;
        dam = monspell_damage((MS_CAUSE_4), m_idx, DAM_ROLL);
 
@@ -1393,12 +1368,12 @@ HIT_POINT spell_RF5_MISSILE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 * @param saving_throw 抵抗に成功したか判別するフラグ
 * @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
 */
-void spell_badstatus_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg1, cptr msg2, cptr msg3, cptr msg4, bool resist, bool saving_throw, int TARGET_TYPE)
+void spell_badstatus_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1, concptr msg2, concptr msg3, concptr msg4, bool resist, bool saving_throw, int TARGET_TYPE)
 {
        bool see_either = see_monster(m_idx) || see_monster(t_idx);
        bool see_t = see_monster(t_idx);
        bool known = monster_near_player(m_idx, t_idx);
-       char m_name[80], t_name[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
@@ -1445,7 +1420,7 @@ void spell_badstatus_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg1, cp
                {
                        if (see_t) msg_format(msg4, t_name);
                }
-               monster_wakeup(t_idx);
+               set_monster_csleep(t_idx, 0);
        }
 }
 
@@ -1457,9 +1432,9 @@ void spell_badstatus_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, cptr msg1, cp
  */
 void spell_RF5_SCARE(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool resist, saving_throw;
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
@@ -1507,9 +1482,9 @@ void spell_RF5_SCARE(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  */
 void spell_RF5_BLIND(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool resist, saving_throw;
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
@@ -1532,8 +1507,8 @@ void spell_RF5_BLIND(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
        }
        else if (TARGET_TYPE == MONSTER_TO_MONSTER)
        {
-               cptr msg1;
-               char t_name[80];
+               concptr msg1;
+               GAME_TEXT t_name[MAX_NLEN];
                monster_name(t_idx, t_name);
                
                if (streq(t_name, "it"))
@@ -1570,9 +1545,9 @@ void spell_RF5_BLIND(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  */
 void spell_RF5_CONF(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool resist, saving_throw;
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
@@ -1620,9 +1595,9 @@ void spell_RF5_CONF(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  */
 void spell_RF5_SLOW(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool resist, saving_throw;
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
@@ -1645,8 +1620,8 @@ void spell_RF5_SLOW(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
        }
        else if (TARGET_TYPE == MONSTER_TO_MONSTER)
        {
-               cptr msg1;
-               char t_name[80];
+               concptr msg1;
+               GAME_TEXT t_name[MAX_NLEN];
                monster_name(t_idx, t_name);
 
                if (streq(t_name, "it"))
@@ -1683,9 +1658,9 @@ void spell_RF5_SLOW(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  */
 void spell_RF5_HOLD(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool resist, saving_throw;
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
@@ -1734,8 +1709,8 @@ void spell_RF5_HOLD(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 void spell_RF6_HASTE(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        bool see_m = see_monster(m_idx);
-       monster_type    *m_ptr = &m_list[m_idx];
-       char m_name[80];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
 
        monspell_message_base(m_idx, t_idx,
@@ -1793,10 +1768,10 @@ HIT_POINT spell_RF6_HAND_DOOM(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
 */
 void spell_RF6_HEAL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
-       int rlev = monster_level_idx(m_idx);
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       DEPTH rlev = monster_level_idx(m_idx);
        bool seen = (!p_ptr->blind && m_ptr->ml);
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
 
        disturb(TRUE, TRUE);
@@ -1859,7 +1834,7 @@ void spell_RF6_HEAL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 */
 void spell_RF6_INVULNER(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
        bool seen = (!p_ptr->blind && m_ptr->ml);
 
        monspell_message_base(m_idx, t_idx,
@@ -1879,7 +1854,7 @@ void spell_RF6_INVULNER(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 */
 void spell_RF6_BLINK(MONSTER_IDX m_idx, int TARGET_TYPE)
 {
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        
        if (TARGET_TYPE==MONSTER_TO_PLAYER)
@@ -1910,7 +1885,7 @@ void spell_RF6_BLINK(MONSTER_IDX m_idx, int TARGET_TYPE)
 */
 void spell_RF6_TPORT(MONSTER_IDX m_idx, int TARGET_TYPE)
 {      
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        
        if (TARGET_TYPE==MONSTER_TO_PLAYER)
@@ -1936,15 +1911,15 @@ void spell_RF6_TPORT(MONSTER_IDX m_idx, int TARGET_TYPE)
 */
 HIT_POINT spell_RF6_WORLD(MONSTER_IDX m_idx)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
        MONSTER_IDX who = 0;
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
 
        disturb(TRUE, TRUE);
        if (m_ptr->r_idx == MON_DIO) who = 1;
        else if (m_ptr->r_idx == MON_WONG) who = 3;
-       if (!process_the_world(randint1(2) + 2, who, TRUE)) return (FALSE);
+       if (!set_monster_timewalk(randint1(2) + 2, who, TRUE)) return (FALSE);
        return who;
 }
 
@@ -1954,7 +1929,7 @@ HIT_POINT spell_RF6_WORLD(MONSTER_IDX m_idx)
 */
 HIT_POINT spell_RF6_SPECIAL_BANORLUPART(MONSTER_IDX m_idx)
 {
-       monster_type *m_ptr = &m_list[m_idx];
+       monster_type *m_ptr = &current_floor_ptr->m_list[m_idx];
        HIT_POINT dummy_hp, dummy_maxhp;
        MONSTER_IDX k;
        POSITION dummy_y = m_ptr->fy;
@@ -1970,13 +1945,13 @@ HIT_POINT spell_RF6_SPECIAL_BANORLUPART(MONSTER_IDX m_idx)
                        if (p_ptr->inside_arena || p_ptr->inside_battle || !summon_possible(m_ptr->fy, m_ptr->fx)) 
                                return -1;
 
-                       delete_monster_idx(cave[m_ptr->fy][m_ptr->fx].m_idx);
+                       delete_monster_idx(current_floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].m_idx);
                        summon_named_creature(0, dummy_y, dummy_x, MON_BANOR, mode);
-                       m_list[hack_m_idx_ii].hp = dummy_hp;
-                       m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
+                       current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
+                       current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
                        summon_named_creature(0, dummy_y, dummy_x, MON_LUPART, mode);
-                       m_list[hack_m_idx_ii].hp = dummy_hp;
-                       m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
+                       current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
+                       current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
 
                        msg_print(_("『バーノール・ルパート』が分裂した!","Banor=Rupart splits in two person!"));
                        break;
@@ -1991,21 +1966,21 @@ HIT_POINT spell_RF6_SPECIAL_BANORLUPART(MONSTER_IDX m_idx)
 
                        for (k = 1; k < m_max; k++)
                        {
-                               if (m_list[k].r_idx == MON_BANOR || m_list[k].r_idx == MON_LUPART)
+                               if (current_floor_ptr->m_list[k].r_idx == MON_BANOR || current_floor_ptr->m_list[k].r_idx == MON_LUPART)
                                {
-                                       dummy_hp += m_list[k].hp;
-                                       dummy_maxhp += m_list[k].maxhp;
-                                       if (m_list[k].r_idx != m_ptr->r_idx)
+                                       dummy_hp += current_floor_ptr->m_list[k].hp;
+                                       dummy_maxhp += current_floor_ptr->m_list[k].maxhp;
+                                       if (current_floor_ptr->m_list[k].r_idx != m_ptr->r_idx)
                                        {
-                                               dummy_y = m_list[k].fy;
-                                               dummy_x = m_list[k].fx;
+                                               dummy_y = current_floor_ptr->m_list[k].fy;
+                                               dummy_x = current_floor_ptr->m_list[k].fx;
                                        }
                                        delete_monster_idx(k);
                                }
                        }
                        summon_named_creature(0, dummy_y, dummy_x, MON_BANORLUPART, mode);
-                       m_list[hack_m_idx_ii].hp = dummy_hp;
-                       m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
+                       current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
+                       current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
 
                        msg_print(_("『バーノール』と『ルパート』が合体した!", "Banor and Rupart combine into one!"));
                        break;
@@ -2057,13 +2032,13 @@ HIT_POINT spell_RF6_SPECIAL_ROLENTO(POSITION y, POSITION x, MONSTER_IDX m_idx, M
 HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        HIT_POINT dam = -1;
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
        bool monster_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        bool monster_to_monster = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool direct = player_bold(y, x);
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
 
        disturb(TRUE, TRUE);
@@ -2122,7 +2097,7 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
                        get_damage = take_hit(DAMAGE_NOESCAPE, dam, m_name, -1);
                        if (p_ptr->tim_eyeeye && get_damage > 0 && !p_ptr->is_dead)
                        {
-                               char m_name_self[80];
+                               GAME_TEXT m_name_self[80];
                                /* hisself */
                                monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
 
@@ -2134,7 +2109,7 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
                }
 
                if(monster_to_player && p_ptr->riding)
-                       mon_take_hit_mon(p_ptr->riding, dam, &dead, &fear, extract_note_dies(real_r_idx(&m_list[p_ptr->riding])), m_idx);
+                       mon_take_hit_mon(p_ptr->riding, dam, &dead, &fear, extract_note_dies(real_r_idx(&current_floor_ptr->m_list[p_ptr->riding])), m_idx);
 
                if(monster_to_monster)
                        mon_take_hit_mon(t_idx, dam, &dead, &fear, extract_note_dies(real_r_idx(t_ptr)), m_idx);
@@ -2153,7 +2128,7 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
 */
 HIT_POINT spell_RF6_SPECIAL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
 
        disturb(TRUE, TRUE);
@@ -2193,8 +2168,8 @@ HIT_POINT spell_RF6_SPECIAL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 */
 void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
 
        simple_monspell_message(m_idx, t_idx,
@@ -2210,7 +2185,7 @@ void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
        else if (TARGET_TYPE == MONSTER_TO_MONSTER)
        {
                bool resists_tele = FALSE;
-               char t_name[80];
+               GAME_TEXT t_name[MAX_NLEN];
                monster_name(t_idx, t_name);
 
                if (tr_ptr->flagsr & RFR_RES_TELE)
@@ -2242,7 +2217,8 @@ void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
                        else 
                                teleport_monster_to(t_idx, m_ptr->fy, m_ptr->fx, 100, TELEPORT_PASSIVE);
                }
-               monster_wakeup(t_idx);
+
+               set_monster_csleep(t_idx, 0);
        }
 }
 
@@ -2255,7 +2231,7 @@ void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 */
 void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
 
        simple_monspell_message(m_idx, t_idx,
@@ -2267,14 +2243,19 @@ void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
        {
                if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
                        msg_print(_("くっそ~", ""));
-               
+               else if ((p_ptr->pseikaku == SEIKAKU_CHARGEMAN))
+               {
+                       if (randint0(2) == 0) msg_print(_("ジュラル星人め!", ""));
+                       else msg_print(_("弱い者いじめは止めるんだ!", ""));
+               }
+
                learn_spell(MS_TELE_AWAY);
                teleport_player_away(m_idx, 100);
        }
        else if (TARGET_TYPE == MONSTER_TO_MONSTER)
        {
                bool resists_tele = FALSE;
-               char t_name[80];
+               GAME_TEXT t_name[MAX_NLEN];
                monster_name(t_idx, t_name);
 
                if (tr_ptr->flagsr & RFR_RES_TELE)
@@ -2306,7 +2287,8 @@ void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
                        else 
                                teleport_away(t_idx, MAX_SIGHT * 2 + 5, TELEPORT_PASSIVE);
                }
-               monster_wakeup(t_idx);
+
+               set_monster_csleep(t_idx, 0);
        }
 }
 
@@ -2319,9 +2301,9 @@ void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 */
 void spell_RF6_TELE_LEVEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool resist, saving_throw;
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
@@ -2396,13 +2378,13 @@ HIT_POINT spell_RF6_PSY_SPEAR(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
 */
 void spell_RF6_DARKNESS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_type    *t_ptr = &m_list[t_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       monster_type    *t_ptr = &current_floor_ptr->m_list[t_idx];
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
        bool can_use_lite_area = FALSE;
        bool monster_to_monster = TARGET_TYPE == MONSTER_TO_MONSTER;
        bool monster_to_player = TARGET_TYPE == MONSTER_TO_PLAYER;
-       char t_name[80];
+       GAME_TEXT t_name[MAX_NLEN];
        monster_name(t_idx, t_name);
 
        if ((p_ptr->pclass == CLASS_NINJA) &&
@@ -2476,7 +2458,7 @@ void spell_RF6_DARKNESS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
 */
 void spell_RF6_TRAPS(POSITION y, POSITION x, MONSTER_IDX m_idx)
 {
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
        disturb(TRUE, TRUE);
 
@@ -2497,8 +2479,8 @@ void spell_RF6_TRAPS(POSITION y, POSITION x, MONSTER_IDX m_idx)
 */
 void spell_RF6_FORGET(MONSTER_IDX m_idx)
 {
-       int rlev = monster_level_idx(m_idx);
-       char m_name[80];
+       DEPTH rlev = monster_level_idx(m_idx);
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
 
        disturb(TRUE, TRUE);
@@ -2526,7 +2508,7 @@ void spell_RF6_FORGET(MONSTER_IDX m_idx)
 */
 void spell_RF6_RAISE_DEAD(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type *m_ptr = &m_list[m_idx];
+       monster_type *m_ptr = &current_floor_ptr->m_list[m_idx];
 
        monspell_message(m_idx, t_idx,
                _("%^sが何かをつぶやいた。", "%^s mumbles."),
@@ -2552,7 +2534,7 @@ MONSTER_NUMBER summon_EAGLE(POSITION y, POSITION x, int rlev, MONSTER_IDX m_idx)
        int num = 4 + randint1(3);
        for (k = 0; k < num; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_EAGLES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_EAGLES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
        }
        return count;
 }
@@ -2609,7 +2591,7 @@ MONSTER_NUMBER summon_Guardian(POSITION y, POSITION x, int rlev, MONSTER_IDX m_i
 
        for (k = 0; k < num; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
        }
        return count;
 }
@@ -2649,7 +2631,7 @@ MONSTER_NUMBER summon_LOUSE(POSITION y, POSITION x, int rlev, MONSTER_IDX m_idx)
        int num = 2 + randint1(3);
        for (k = 0; k < num; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, PM_ALLOW_GROUP, '\0');
        }
        return count;
 }
@@ -2665,13 +2647,12 @@ MONSTER_NUMBER summon_LOUSE(POSITION y, POSITION x, int rlev, MONSTER_IDX m_idx)
 MONSTER_NUMBER summon_Kin(POSITION y, POSITION x, int rlev, MONSTER_IDX m_idx)
 {
        int k, count = 0;
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-       summon_kin_type = r_ptr->d_char; /* Big hack */
+       monster_type *m_ptr = &current_floor_ptr->m_list[m_idx];
+       monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
        for (k = 0; k < 4; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, PM_ALLOW_GROUP, r_ptr->d_char);
        }
        return count;
 }
@@ -2691,11 +2672,11 @@ void spell_RF6_S_KIN(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
        bool see_either = see_monster(m_idx) || see_monster(t_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        int count = 0;
-       char m_name[80], t_name[80], m_poss[80];
+       GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN], m_poss[80];
        monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
        monster_desc(m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
@@ -2781,8 +2762,8 @@ void spell_RF6_S_KIN(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
 void spell_RF6_S_CYBER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0;
-       monster_type    *m_ptr = &m_list[m_idx];
-       int rlev = monster_level_idx(m_idx);
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        
@@ -2794,7 +2775,7 @@ void spell_RF6_S_CYBER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
 
        if (is_friendly(m_ptr) && mon_to_mon)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP), '\0');
        }
        else
        {
@@ -2820,7 +2801,7 @@ void spell_RF6_S_CYBER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
 void spell_RF6_S_MONSTER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        
@@ -2833,10 +2814,10 @@ void spell_RF6_S_MONSTER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX
        for (k = 0; k < 1; k++)
        {
                if(mon_to_player)
-                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
 
                if(mon_to_mon)
-                       count += summon_specific(m_idx, y, x, rlev, 0, (monster_u_mode(m_idx)));
+                       count += summon_specific(m_idx, y, x, rlev, 0, (monster_u_mode(m_idx)), '\0');
        }
 
        if (p_ptr->blind && count && mon_to_player)
@@ -2858,7 +2839,7 @@ void spell_RF6_S_MONSTER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX
 void spell_RF6_S_MONSTERS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        
@@ -2871,10 +2852,10 @@ void spell_RF6_S_MONSTERS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX
        for (k = 0; k < S_NUM_6; k++)
        {
                if(mon_to_player)
-                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
 
                if(mon_to_mon)
-                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | monster_u_mode(m_idx)));
+                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | monster_u_mode(m_idx)), '\0');
        }
 
        if (p_ptr->blind && count && mon_to_player)
@@ -2896,7 +2877,7 @@ void spell_RF6_S_MONSTERS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX
 void spell_RF6_S_ANT(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        
@@ -2908,7 +2889,7 @@ void spell_RF6_S_ANT(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
        
        for (k = 0; k < S_NUM_6; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP, '\0');
        }
 
        if (p_ptr->blind && count && mon_to_player)
@@ -2932,7 +2913,7 @@ void spell_RF6_S_SPIDER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
        int count = 0, k;
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        
        monspell_message(m_idx, t_idx,
                _("%^sが何かをつぶやいた。", "%^s mumbles."),
@@ -2942,7 +2923,7 @@ void spell_RF6_S_SPIDER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
        
        for (k = 0; k < S_NUM_6; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP, '\0');
        }
 
        if (p_ptr->blind && count && mon_to_player)
@@ -2964,7 +2945,7 @@ void spell_RF6_S_SPIDER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
 void spell_RF6_S_HOUND(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        
@@ -2976,7 +2957,7 @@ void spell_RF6_S_HOUND(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
        
        for (k = 0; k < S_NUM_4; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP, '\0');
        }
 
        if (p_ptr->blind && count && mon_to_player)
@@ -2998,7 +2979,7 @@ void spell_RF6_S_HOUND(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
 void spell_RF6_S_HYDRA(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        
@@ -3010,7 +2991,7 @@ void spell_RF6_S_HYDRA(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
        
        for (k = 0; k < S_NUM_4; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP, '\0');
        }
 
        if (p_ptr->blind && count && mon_to_player)
@@ -3033,9 +3014,9 @@ void spell_RF6_S_ANGEL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
 {
        int count = 0, k;
        int num = 1;
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        
        monspell_message(m_idx, t_idx,
@@ -3051,7 +3032,7 @@ void spell_RF6_S_ANGEL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
        
        for (k = 0; k < num; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP, '\0');
        }
        
        if (count < 2)
@@ -3081,7 +3062,7 @@ void spell_RF6_S_ANGEL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
 void spell_RF6_S_DEMON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        
        monspell_message(m_idx, t_idx,
@@ -3092,7 +3073,7 @@ void spell_RF6_S_DEMON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
        
        for (k = 0; k < 1; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP, '\0');
        }
        
        if (p_ptr->blind && count)
@@ -3114,7 +3095,7 @@ void spell_RF6_S_DEMON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
 void spell_RF6_S_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        
        monspell_message(m_idx, t_idx,
@@ -3125,7 +3106,7 @@ void spell_RF6_S_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
        
        for (k = 0; k < 1; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP, '\0');
        }
        
        if (p_ptr->blind && count)
@@ -3147,7 +3128,7 @@ void spell_RF6_S_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
 void spell_RF6_S_DRAGON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        
        monspell_message(m_idx, t_idx,
@@ -3158,7 +3139,7 @@ void spell_RF6_S_DRAGON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
        
        for (k = 0; k < 1; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, PM_ALLOW_GROUP);
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, PM_ALLOW_GROUP, '\0');
        }
        
        if (p_ptr->blind && count)
@@ -3181,7 +3162,7 @@ MONSTER_NUMBER summon_NAZGUL(POSITION y, POSITION x, MONSTER_IDX m_idx)
        int count = 0, k;
        POSITION cy = y;
        POSITION cx = x;
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
 
        if (p_ptr->blind)
@@ -3239,10 +3220,10 @@ void spell_RF6_S_HI_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
 {
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
-       monster_type    *m_ptr = &m_list[m_idx];
-       int rlev = monster_level_idx(m_idx);
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       DEPTH rlev = monster_level_idx(m_idx);
        int k, count = 0;
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_name(m_idx, m_name);
 
        disturb(TRUE, TRUE);
@@ -3264,10 +3245,10 @@ void spell_RF6_S_HI_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
                for (k = 0; k < S_NUM_6; k++)
                {
                        if(mon_to_player)
-                               count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+                               count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
 
                        if(mon_to_mon)
-                               count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | monster_u_mode(m_idx)));
+                               count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | monster_u_mode(m_idx)), '\0');
                }
        }
        if (p_ptr->blind && count && mon_to_player)
@@ -3291,7 +3272,7 @@ void spell_RF6_S_HI_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
 void spell_RF6_S_HI_DRAGON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        
@@ -3304,10 +3285,10 @@ void spell_RF6_S_HI_DRAGON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
        for (k = 0; k < S_NUM_4; k++)
        {       
                if(mon_to_player)
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
 
                if(mon_to_mon)
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | monster_u_mode(m_idx)));
+                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | monster_u_mode(m_idx)), '\0');
        }
        
        if (p_ptr->blind && count && mon_to_player)
@@ -3331,7 +3312,7 @@ void spell_RF6_S_HI_DRAGON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
 void spell_RF6_S_AMBERITES(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        
@@ -3343,7 +3324,7 @@ void spell_RF6_S_AMBERITES(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
        
        for (k = 0; k < S_NUM_4; k++)
        {       
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
        }
        
        if (p_ptr->blind && count && mon_to_player)
@@ -3367,8 +3348,8 @@ void spell_RF6_S_AMBERITES(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
 void spell_RF6_S_UNIQUE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
        int count = 0, k;
-       monster_type    *m_ptr = &m_list[m_idx];
-       int rlev = monster_level_idx(m_idx);
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
+       DEPTH rlev = monster_level_idx(m_idx);
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
        bool uniques_are_summoned = FALSE;
@@ -3382,7 +3363,7 @@ void spell_RF6_S_UNIQUE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
        
        for (k = 0; k < S_NUM_4; k++)
        {       
-               count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
        }
        
        if (count) uniques_are_summoned = TRUE;
@@ -3394,7 +3375,7 @@ void spell_RF6_S_UNIQUE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
 
        for (k = count; k < S_NUM_4; k++)
        {
-               count += summon_specific(m_idx, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+               count += summon_specific(m_idx, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0');
        }
 
        if (p_ptr->blind && count && mon_to_player)
@@ -4092,10 +4073,10 @@ HIT_POINT monspell_damage_base(int SPELL_NUM, int hp, int rlev, bool powerful, i
 */
 HIT_POINT monspell_damage(int SPELL_NUM, MONSTER_IDX m_idx, int TYPE)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
+       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
        int hp;
-       int rlev = monster_level_idx(m_idx);
+       DEPTH rlev = monster_level_idx(m_idx);
        int shoot_dd = r_ptr->blow[0].d_dice;
        int shoot_ds = r_ptr->blow[0].d_side;
 
@@ -4142,8 +4123,8 @@ HIT_POINT monspell_bluemage_damage(int SPELL_NUM, PLAYER_LEVEL plev, int TYPE)
        int shoot_dd = 1, shoot_ds = 1, shoot_base = 0;
        object_type *o_ptr = NULL;
 
-       if (buki_motteruka(INVEN_RARM)) o_ptr = &inventory[INVEN_RARM];
-       else if (buki_motteruka(INVEN_LARM)) o_ptr = &inventory[INVEN_LARM];
+       if (has_melee_weapon(INVEN_RARM)) o_ptr = &inventory[INVEN_RARM];
+       else if (has_melee_weapon(INVEN_LARM)) o_ptr = &inventory[INVEN_LARM];
 
        if (o_ptr)
        {