From a018507fe4e8226d860ab260205eb95204918d92 Mon Sep 17 00:00:00 2001 From: dis- Date: Sat, 22 Feb 2014 01:32:18 +0900 Subject: [PATCH] refactor: extract monst_spell_monst --- src/externs.h | 60 ++--- src/mspells1.c | 117 +-------- src/mspells2.c | 419 +------------------------------ src/mspells4.c | 774 ++++++++++++++++++++++++++++++++++++++++++--------------- 4 files changed, 594 insertions(+), 776 deletions(-) diff --git a/src/externs.h b/src/externs.h index b78a66e66..06a36d78a 100644 --- a/src/externs.h +++ b/src/externs.h @@ -1573,6 +1573,17 @@ extern void beam(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int extern void bolt(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type); extern void breath(int y, int x, int m_idx, int typ, int dam_hp, int rad, bool breath, int monspell, int target_type); +/* mspells1.c */ +extern bool clean_shot(int y1, int x1, int y2, int x2, bool is_friend); +extern bool summon_possible(int y1, int x1); +extern bool raise_possible(monster_type *m_ptr); +extern bool dispel_check(int m_idx); +extern bool spell_is_inate(u16b spell); +extern bool make_attack_spell(int m_idx); +extern void beam(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type); +extern void bolt(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type); +extern void breath(int y, int x, int m_idx, int typ, int dam_hp, int rad, bool breath, int monspell, int target_type); + /* mspells2.c */ extern void get_project_point(int sy, int sx, int *ty, int *tx, int flg); extern bool monst_spell_monst(int m_idx); @@ -1584,52 +1595,9 @@ extern void set_rf_masks(s32b *f4, s32b *f5, s32b *f6, int mode); /* mspells4.c */ extern bool spell_learnable(int m_idx); -extern void spell_RF4_SHRIEK(int m_idx, int t_idx, int TARGET_TYPE);; -extern void spell_RF4_DISPEL(int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF4_ROCKET(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF4_SHOOT(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF4_BREATH(int GF_TYPE, int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF4_BA_NUKE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF4_BA_CHAO(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_ACID(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_ELEC(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_FIRE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_COLD(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_POIS(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_NETH(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_WATE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_MANA(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_DARK(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_DRAIN_MANA(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_MIND_BLAST(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BRAIN_SMASH(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_CAUSE_1(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_CAUSE_2(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_CAUSE_3(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_CAUSE_4(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_ACID(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_ELEC(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_FIRE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_COLD(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BA_LITE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_NETH(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_WATE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_MANA(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_PLAS(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_BO_ICEE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern int spell_RF5_MISSILE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE); -extern void spell_RF5_SCARE(int y, int x, int m_idx); -extern void spell_RF5_BLIND(int y, int x, int m_idx); -extern void spell_RF5_CONF(int y, int x, int m_idx); -extern void spell_RF5_SLOW(int y, int x, int m_idx); -extern void spell_RF5_HOLD(int y, int x, int m_idx); -extern void spell_RF6_HASTE(int m_idx); -extern int spell_RF6_HAND_DOOM(int y, int x, int m_idx); -extern void spell_RF6_HEAL(int m_idx); -extern void spell_RF6_INVULNER(int m_idx); -extern void spell_RF6_BLINK(int m_idx); -extern void spell_RF6_TPORT(int m_idx); -extern int spell_RF6_WORLD(int m_idx); +extern int monspell_to_player(int SPELL_NUM, int y, int x, int m_idx); +extern int monspell_to_monster(int SPELL_NUM, int y, int x, int m_idx, int t_idx); + extern int spell_RF6_SPECIAL(int y, int x, int m_idx); extern void spell_RF6_TELE_TO(int m_idx); extern void spell_RF6_TELE_AWAY(int m_idx); diff --git a/src/mspells1.c b/src/mspells1.c index a83758fb4..3bd78c566 100644 --- a/src/mspells1.c +++ b/src/mspells1.c @@ -507,7 +507,7 @@ bool clean_shot(int y1, int x1, int y2, int x2, bool is_friend) * @param typ ¸ú²Ì°À­ID * @param dam_hp °ÒÎÏ * @param monspell ¥â¥ó¥¹¥¿¡¼ËâË¡¤ÎID - * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¥ì¥¤¥ä¡¼¤Ê¤éMONSTER_TO_PLAYER + * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¡¦E¤¥ä¡¼¤Ê¤¡¦ONSTER_TO_PLAYER * @return ¤Ê¤· */ void bolt(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type) @@ -538,7 +538,7 @@ void bolt(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target * @param typ ¸ú²Ì°À­ID * @param dam_hp °ÒÎÏ * @param monspell ¥â¥ó¥¹¥¿¡¼ËâË¡¤ÎID - * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¥ì¥¤¥ä¡¼¤Ê¤éMONSTER_TO_PLAYER + * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¡¦E¤¥ä¡¼¤Ê¤¡¦ONSTER_TO_PLAYER * @return ¤Ê¤· */ void beam(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type) @@ -570,9 +570,9 @@ void beam(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target * @param typ ¸ú²Ì°À­ID * @param dam_hp °ÒÎÏ * @param rad Ⱦ·Â - * @param breath TRUE¤Ê¤é¤Ð¥Ö¥ì¥¹½èÍý¡¢FALSE¤Ê¤é¤Ð¥Ü¡¼¥ë½èÍý + * @param breath TRUE¤Ê¤é¤Ð¥Ö¡¦E¹½èÍ¡¦¡¥ALSE¤Ê¤é¤Ð¥Ü¡¼¡¦EèÍ * @param monspell ¥â¥ó¥¹¥¿¡¼ËâË¡¤ÎID - * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¥ì¥¤¥ä¡¼¤Ê¤éMONSTER_TO_PLAYER + * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¡¦E¤¥ä¡¼¤Ê¤¡¦ONSTER_TO_PLAYER * @return ¤Ê¤· */ void breath(int y, int x, int m_idx, int typ, int dam_hp, int rad, bool breath, int monspell, int target_type) @@ -1871,112 +1871,9 @@ bool make_attack_spell(int m_idx) } } - /* Cast the spell. */ - switch (thrown_spell) - { - case 96 + 0: spell_RF4_SHRIEK(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_SHRIEK */ - case 96 + 1: break; /* RF4_XXX1 */ - case 96 + 2: spell_RF4_DISPEL(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_DISPEL */ - case 96 + 3: dam = spell_RF4_ROCKET(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_ROCKET */ - case 96 + 4: dam = spell_RF4_SHOOT(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_SHOOT */ - case 96 + 5: break; /* RF4_XXX2 */ - case 96 + 6: break; /* RF4_XXX3 */ - case 96 + 7: break; /* RF4_XXX4 */ - case 96 + 8: dam = spell_RF4_BREATH(GF_ACID, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_ACID */ - case 96 + 9: dam = spell_RF4_BREATH(GF_ELEC, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_ELEC */ - case 96 + 10: dam = spell_RF4_BREATH(GF_FIRE, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_FIRE */ - case 96 + 11: dam = spell_RF4_BREATH(GF_COLD, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_COLD */ - case 96 + 12: dam = spell_RF4_BREATH(GF_POIS, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_POIS */ - case 96 + 13: dam = spell_RF4_BREATH(GF_NETHER, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_NETH */ - case 96 + 14: dam = spell_RF4_BREATH(GF_LITE, y_br_lite, x_br_lite, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_LITE */ - case 96 + 15: dam = spell_RF4_BREATH(GF_DARK, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_DARK */ - case 96 + 16: dam = spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_CONF */ - case 96 + 17: dam = spell_RF4_BREATH(GF_SOUND, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_SOUN */ - case 96 + 18: dam = spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_CHAO */ - case 96 + 19: dam = spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_DISE */ - case 96 + 20: dam = spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_NEXU */ - case 96 + 21: dam = spell_RF4_BREATH(GF_TIME, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_TIME */ - case 96 + 22: dam = spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_INER */ - case 96 + 23: dam = spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_GRAV */ - case 96 + 24: dam = spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_SHAR */ - case 96 + 25: dam = spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_PLAS */ - case 96 + 26: dam = spell_RF4_BREATH(GF_FORCE, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_WALL */ - case 96 + 27: dam = spell_RF4_BREATH(GF_MANA, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_MANA */ - case 96 + 28: dam = spell_RF4_BA_NUKE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BA_NUKE */ - case 96 + 29: dam = spell_RF4_BREATH(GF_NUKE, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_NUKE */ - case 96 + 30: dam = spell_RF4_BA_CHAO(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BA_CHAO */ - case 96 + 31: dam = spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_BR_DISI */ - case 128 + 0: dam = spell_RF5_BA_ACID(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_ACID */ - case 128 + 1: dam = spell_RF5_BA_ELEC(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_ELEC */ - case 128 + 2: dam = spell_RF5_BA_FIRE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_FIRE */ - case 128 + 3: dam = spell_RF5_BA_COLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_COLD */ - case 128 + 4: dam = spell_RF5_BA_POIS(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_POIS */ - case 128 + 5: dam = spell_RF5_BA_NETH(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_NETH */ - case 128 + 6: dam = spell_RF5_BA_WATE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_WATE */ - case 128 + 7: dam = spell_RF5_BA_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_MANA */ - case 128 + 8: dam = spell_RF5_BA_DARK(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_DARK */ - case 128 + 9: dam = spell_RF5_DRAIN_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_DRAIN_MANA */ - case 128 + 10: dam = spell_RF5_MIND_BLAST(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_MIND_BLAST */ - case 128 + 11: dam = spell_RF5_BRAIN_SMASH(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_MIND_BLAST */ - case 128 + 12: dam = spell_RF5_CAUSE_1(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_CAUSE_1 */ - case 128 + 13: dam = spell_RF5_CAUSE_2(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_CAUSE_2 */ - case 128 + 14: dam = spell_RF5_CAUSE_3(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_CAUSE_3 */ - case 128 + 15: dam = spell_RF5_CAUSE_4(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_CAUSE_4 */ - case 128 + 16: dam = spell_RF5_BO_ACID(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_ACID */ - case 128 + 17: dam = spell_RF5_BO_ELEC(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_ELEC */ - case 128 + 18: dam = spell_RF5_BO_FIRE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_FIRE */ - case 128 + 19: dam = spell_RF5_BO_COLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_COLD */ - case 128 + 20: dam = spell_RF5_BA_LITE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BA_LITE */ - case 128 + 21: dam = spell_RF5_BO_NETH(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_NETH */ - case 128 + 22: dam = spell_RF5_BO_WATE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_WATE */ - case 128 + 23: dam = spell_RF5_BO_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_MANA */ - case 128 + 24: dam = spell_RF5_BO_PLAS(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_PLAS */ - case 128 + 25: dam = spell_RF5_BO_ICEE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BO_ICEE */ - case 128 + 26: dam = spell_RF5_MISSILE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_MISSILE */ - case 128 + 27: spell_RF5_SCARE(y, x, m_idx); break; /* RF5_SCARE */ - case 128 + 28: spell_RF5_BLIND(y, x, m_idx); break; /* RF5_BLIND */ - case 128 + 29: spell_RF5_CONF(y, x, m_idx); break; /* RF5_CONF */ - case 128 + 30: spell_RF5_SLOW(y, x, m_idx); break; /* RF5_SLOW */ - case 128 + 31: spell_RF5_HOLD(y, x, m_idx); break; /* RF5_HOLD */ - case 160 + 0: spell_RF6_HASTE(m_idx); break; /* RF6_HASTE */ - case 160 + 1: dam = spell_RF6_HAND_DOOM(y, x, m_idx); break; /* RF6_HAND_DOOM */ - case 160 + 2: spell_RF6_HEAL(m_idx); break; /* RF6_HEAL */ - case 160 + 3: spell_RF6_INVULNER(m_idx); break; /* RF6_INVULNER */ - case 160 + 4: spell_RF6_BLINK(m_idx); break; /* RF6_BLINK */ - case 160 + 5: spell_RF6_TPORT(m_idx); break; /* RF6_TPORT */ - case 160 + 6: dam = spell_RF6_WORLD(m_idx); break; /* RF6_WORLD */ - - /* RF6_SPECIAL */ - case 160 + 7: - dam = spell_RF6_SPECIAL(y, x, m_idx); - if (dam < 0) return FALSE; - break; - - case 160 + 8: spell_RF6_TELE_TO(m_idx); break; /* RF6_TELE_TO */ - case 160 + 9: spell_RF6_TELE_AWAY(m_idx); break; /* RF6_TELE_AWAY */ - case 160 + 10: spell_RF6_TELE_LEVEL(m_idx); break; /* RF6_TELE_LEVEL */ - case 160 + 11: spell_RF6_PSY_SPEAR(y, x, m_idx); break; /* RF6_PSY_SPEAR */ - case 160 + 12: spell_RF6_DARKNESS(m_idx); break; /* RF6_DARKNESS */ - case 160 + 13: spell_RF6_TRAPS(y, x, m_idx); break; /* RF6_TRAPS */ - case 160 + 14: spell_RF6_FORGET(m_idx); break; /* RF6_FORGET */ - case 160 + 15: spell_RF6_RAISE_DEAD(m_idx); break; /* RF6_RAISE_DEAD */ - case 160 + 16: spell_RF6_S_KIN(y, x, m_idx); break; /* RF6_S_KIN */ - case 160 + 17: spell_RF6_S_CYBER(y, x, m_idx); break; /* RF6_S_CYBER */ - case 160 + 18: spell_RF6_S_MONSTER(y, x, m_idx); break; /* RF6_S_MONSTER */ - case 160 + 19: spell_RF6_S_MONSTERS(y, x, m_idx); break; /* RF6_S_MONSTER */ - case 160 + 20: spell_RF6_S_ANT(y, x, m_idx); break; /* RF6_S_ANT */ - case 160 + 21: spell_RF6_S_SPIDER(y, x, m_idx); break; /* RF6_S_SPIDER */ - case 160 + 22: spell_RF6_S_HOUND(y, x, m_idx); break; /* RF6_S_HOUND */ - case 160 + 23: spell_RF6_S_HYDRA(y, x, m_idx); break; /* RF6_S_HYDRA */ - case 160 + 24: spell_RF6_S_ANGEL(y, x, m_idx); break; /* RF6_S_ANGEL */ - case 160 + 25: spell_RF6_S_DEMON(y, x, m_idx); break; /* RF6_S_DEMON */ - case 160 + 26: spell_RF6_S_UNDEAD(y, x, m_idx); break; /* RF6_S_UNDEAD */ - case 160 + 27: spell_RF6_S_DRAGON(y, x, m_idx); break; /* RF6_S_DRAGON */ - case 160 + 28: spell_RF6_S_HI_UNDEAD(y, x, m_idx); break; /* RF6_S_HI_UNDEAD */ - case 160 + 29: spell_RF6_S_HI_DRAGON(y, x, m_idx); break; /* RF6_S_HI_DRAGON */ - case 160 + 30: spell_RF6_S_AMBERITES(y, x, m_idx); break; /* RF6_S_AMBERITES */ - case 160 + 31: spell_RF6_S_UNIQUE(y, x, m_idx); break; /* RF6_S_UNIQUE */ - } + /* Cast the spell. */ + dam = monspell_to_player(thrown_spell, y, x, m_idx); + if (dam < 0) return FALSE; if ((p_ptr->action == ACTION_LEARN) && thrown_spell > 175) { diff --git a/src/mspells2.c b/src/mspells2.c index 0779e9e9b..4f0608251 100644 --- a/src/mspells2.c +++ b/src/mspells2.c @@ -733,422 +733,11 @@ bool monst_spell_monst(int m_idx) can_remember = is_original_ap_and_seen(m_ptr); - switch (thrown_spell) - { - case 96 + 0: spell_RF4_SHRIEK(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_SHRIEK */ - case 96 + 1: return FALSE; /* RF4_XXX1 */ - case 96 + 2: spell_RF4_DISPEL(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_DISPEL */ - case 96 + 3: dam = spell_RF4_ROCKET(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_ROCKET */ - case 96 + 4: dam = spell_RF4_SHOOT(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_SHOOT */ - case 96 + 5: return FALSE; /* RF4_XXX2 */ - case 96 + 6: return FALSE; /* RF4_XXX3 */ - case 96 + 7: return FALSE; /* RF4_XXX4 */ - case 96 + 8: dam = spell_RF4_BREATH(GF_ACID, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_ACID */ - case 96 + 9: dam = spell_RF4_BREATH(GF_ELEC, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_ELEC */ - case 96 + 10: dam = spell_RF4_BREATH(GF_FIRE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_FIRE */ - case 96 + 11: dam = spell_RF4_BREATH(GF_COLD, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_COLD */ - case 96 + 12: dam = spell_RF4_BREATH(GF_POIS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_POIS */ - case 96 + 13: dam = spell_RF4_BREATH(GF_NETHER, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_NETH */ - case 96 + 14: dam = spell_RF4_BREATH(GF_LITE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_LITE */ - case 96 + 15: dam = spell_RF4_BREATH(GF_DARK, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_DARK */ - case 96 + 16: dam = spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_CONF */ - case 96 + 17: dam = spell_RF4_BREATH(GF_SOUND, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_SOUN */ - case 96 + 18: dam = spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_CHAO */ - case 96 + 19: dam = spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_DISE */ - case 96 + 20: dam = spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_NEXU */ - case 96 + 21: dam = spell_RF4_BREATH(GF_TIME, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_TIME */ - case 96 + 22: dam = spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_INER */ - case 96 + 23: dam = spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_GRAV */ - case 96 + 24: dam = spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_SHAR */ - case 96 + 25: dam = spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_PLAS */ - case 96 + 26: dam = spell_RF4_BREATH(GF_FORCE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_WALL */ - case 96 + 27: dam = spell_RF4_BREATH(GF_MANA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_MANA */ - case 96 + 28: dam = spell_RF4_BA_NUKE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BA_NUKE */ - case 96 + 29: dam = spell_RF4_BREATH(GF_NUKE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_NUKE */ - case 96 + 30: dam = spell_RF4_BA_CHAO(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BA_CHAO */ - case 96 + 31: dam = spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_DISI */ - case 128 + 0: dam = spell_RF5_BA_ACID(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_ACID */ - case 128 + 1: dam = spell_RF5_BA_ELEC(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_ELEC */ - case 128 + 2: dam = spell_RF5_BA_FIRE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_FIRE */ - case 128 + 3: dam = spell_RF5_BA_COLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_COLD */ - case 128 + 4: dam = spell_RF5_BA_POIS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_POIS */ - case 128 + 5: dam = spell_RF5_BA_NETH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_NETH */ - case 128 + 6: dam = spell_RF5_BA_WATE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_WATE */ - case 128 + 7: dam = spell_RF5_BA_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_MANA */ - case 128 + 8: dam = spell_RF5_BA_DARK(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_DARK */ - case 128 + 9: dam = spell_RF5_DRAIN_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_DRAIN_MANA */ - case 128 + 10: dam = spell_RF5_MIND_BLAST(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_MIND_BLAST */ - case 128 + 11: dam = spell_RF5_BRAIN_SMASH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BRAIN_SMASH */ - case 128 + 12: dam = spell_RF5_CAUSE_1(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CAUSE_1 */ - case 128 + 13: dam = spell_RF5_CAUSE_2(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CAUSE_2 */ - case 128 + 14: dam = spell_RF5_CAUSE_3(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CAUSE_3 */ - case 128 + 15: dam = spell_RF5_CAUSE_4(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CAUSE_4 */ - case 128 + 16: dam = spell_RF5_BO_ACID(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_ACID */ - case 128 + 17: dam = spell_RF5_BO_ELEC(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_ELEC */ - case 128 + 18: dam = spell_RF5_BO_FIRE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_FIRE */ - case 128 + 19: dam = spell_RF5_BO_COLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_COLD */ - case 128 + 20: dam = spell_RF5_BA_LITE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_LITE */ - case 128 + 21: dam = spell_RF5_BO_NETH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_NETH */ - case 128 + 22: dam = spell_RF5_BO_WATE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_WATE */ - case 128 + 23: dam = spell_RF5_BO_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_MANA */ - case 128 + 24: dam = spell_RF5_BO_PLAS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_PLAS */ - case 128 + 25: dam = spell_RF5_BO_ICEE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_ICEE */ - case 128 + 26: dam = spell_RF5_MISSILE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_MISSILE */ - - /* RF5_SCARE */ - case 128+27: - if (known) - { - if (see_either) - { - msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", - "%^s casts a fearful illusion in front of %s."), m_name, t_name); - } - else - { - mon_fight = TRUE; - } - } - - if (tr_ptr->flags3 & RF3_NO_FEAR) - { - if (see_t) msg_format(_("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", - "%^s refuses to be frightened."), t_name); - - } - else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10) - { - if (see_t) msg_format(_("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", - "%^s refuses to be frightened."), t_name); - } - else - { - if (set_monster_monfear(t_idx, MON_MONFEAR(t_ptr) + randint0(4) + 4)) fear = TRUE; - } - - wake_up = TRUE; - - break; - - /* RF5_BLIND */ - case 128+28: - if (known) - { - if (see_either) - { - _(msg_format("%s¤Ï¼öʸ¤ò¾§¤¨¤Æ%s¤ÎÌܤò¾Æ¤­ÉÕ¤«¤»¤¿¡£", m_name, t_name), - msg_format("%^s casts a spell, burning %s%s eyes.", m_name, t_name, - (streq(t_name, "it") ? "s" : "'s"))); - - } - else - { - mon_fight = TRUE; - } - } - - /* Simulate blindness with confusion */ - if (tr_ptr->flags3 & RF3_NO_CONF) - { - if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name); - } - else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10) - { - if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name); - } - else - { - if (see_t) msg_format(_("%^s¤ÏÌܤ¬¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¡ª ", "%^s is blinded!"), t_name); - - (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4)); - } - - wake_up = TRUE; - - break; - - /* RF5_CONF */ - case 128+29: - if (known) - { - if (see_either) - { - msg_format(_("%^s¤¬%s¤ÎÁ°¤Ë¸¸ÏÇŪ¤Ê¸¸¤ò¤Ä¤¯¤ê½Ð¤·¤¿¡£", - "%^s casts a mesmerizing illusion in front of %s."), m_name, t_name); - } - else - { - mon_fight = TRUE; - } - } - - if (tr_ptr->flags3 & RF3_NO_CONF) - { - if (see_t) msg_format(_("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£", - "%^s disbelieves the feeble spell."), t_name); - } - else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10) - { - if (see_t) msg_format(_("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£", - "%^s disbelieves the feeble spell."), t_name); - } - else - { - if (see_t) msg_format(_("%^s¤Ïº®Í𤷤¿¤è¤¦¤À¡£", - "%^s seems confused."), t_name); - - (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4)); - } - - wake_up = TRUE; - - break; - - /* RF5_SLOW */ - case 128+30: - if (known) - { - if (see_either) - { - _(msg_format("%s¤¬%s¤Î¶ÚÆù¤«¤éÎϤòµÛ¤¤¤È¤Ã¤¿¡£", m_name, t_name), - msg_format("%^s drains power from %s%s muscles.", m_name, t_name, - (streq(t_name, "it") ? "s" : "'s"))); - } - else - { - mon_fight = TRUE; - } - } - - if (tr_ptr->flags1 & RF1_UNIQUE) - { - if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", - "%^s is unaffected."), t_name); - } - else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10) - { - if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", - "%^s is unaffected."), t_name); - } - else - { - if (set_monster_slow(t_idx, MON_SLOW(t_ptr) + 50)) - { - if (see_t) msg_format(_("%s¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£", - "%^s starts moving slower."), t_name); - } - } - - wake_up = TRUE; - - break; - - /* RF5_HOLD */ - case 128+31: - if (known) - { - if (see_either) - { - msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡£", "%^s stares intently at %s."), m_name, t_name); - } - else - { - mon_fight = TRUE; - } - } + dam = monspell_to_monster(thrown_spell, y, x, m_idx, t_idx); + if (dam < 0)return FALSE; - if ((tr_ptr->flags1 & RF1_UNIQUE) || - (tr_ptr->flags3 & RF3_NO_STUN)) - { - if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name); - } - else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10) - { - if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name); - } - else - { - if (see_t) msg_format(_("%^s¤ÏËãá㤷¤¿¡ª", "%^s is paralyzed!"), t_name); - - (void)set_monster_stunned(t_idx, MON_STUNNED(t_ptr) + randint1(4) + 4); - } - - wake_up = TRUE; - - break; - - - /* RF6_HASTE */ - case 160+0: - if (known) - { - if (see_m) - { - msg_format(_("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), m_name); - } - else - { - mon_fight = TRUE; - } - } - - /* Allow quick speed increases to base+10 */ - if (set_monster_fast(m_idx, MON_FAST(m_ptr) + 100)) - { - if (see_m) msg_format(_("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving faster."), m_name); - } - break; - - /* RF6_HAND_DOOM */ - case 160+1: - if (known) - { - if (see_m) - { - msg_format(_("%^s¤¬%s¤Ë<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom upon %s!"), m_name, t_name); - } - else - { - mon_fight = TRUE; - } - } - - dam = 20; /* Dummy power */ - breath(y, x, m_idx,GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, MONSTER_TO_MONSTER); - - break; - - /* RF6_HEAL */ - case 160+2: - if (known) - { - if (see_m) - { - msg_format(_("%^s¤Ï¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), m_name); - } - else - { - mon_fight = TRUE; - } - } - - /* Heal some */ - m_ptr->hp += (rlev * 6); - - /* Fully healed */ - if (m_ptr->hp >= m_ptr->maxhp) - { - /* Fully healed */ - m_ptr->hp = m_ptr->maxhp; - - if (known) - { - if (see_m) - { - msg_format(_("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"), m_name); - } - else - { - mon_fight = TRUE; - } - } - } - - /* Partially healed */ - else if (known) - { - if (see_m) - { - msg_format(_("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."), m_name); - } - else - { - mon_fight = TRUE; - } - } - - /* Redraw (later) if needed */ - if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH); - if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH); - - /* Cancel fear */ - if (MON_MONFEAR(m_ptr)) - { - /* Cancel fear */ - (void)set_monster_monfear(m_idx, 0); - - /* Message */ - if (see_m) msg_format(_("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", "%^s recovers %s courage."), m_name); - } - - break; - - /* RF6_INVULNER */ - case 160+3: - if (known) - { - if (see_m) - { - disturb(1, 1); - msg_format(_("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."), m_name); - } - else - { - mon_fight = TRUE; - } - } - - if (!MON_INVULNER(m_ptr)) (void)set_monster_invulner(m_idx, randint1(4) + 4, FALSE); - break; - - /* RF6_BLINK */ - case 160+4: - if (teleport_barrier(m_idx)) - { - if (see_m) - { - msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", "Magic barrier obstructs teleporting of %^s."), m_name); - } - } - else - { - if (see_m) - { - msg_format(_("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", "%^s blinks away."), m_name); - } - teleport_away(m_idx, 10, 0L); - } - break; - - /* RF6_TPORT */ - case 160+5: - if (teleport_barrier(m_idx)) - { - if (see_m) - { - msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", "Magic barrier obstructs teleporting of %^s."), m_name); - } - } - else - { - if (see_m) - { - msg_format(_("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", "%^s teleports away."), m_name); - } - teleport_away_followable(m_idx); - } - break; - - /* RF6_WORLD */ - case 160+6: -#if 0 - int who = 0; - if(m_ptr->r_idx = MON_DIO) who == 1; - else if(m_ptr->r_idx = MON_WONG) who == 3; - dam = who; - if(!process_the_world(randint1(2)+2, who, player_has_los_bold(m_ptr->fy, m_ptr->fx))) return (FALSE); -#endif - return FALSE; + switch (thrown_spell) + { /* RF6_SPECIAL */ case 160+7: diff --git a/src/mspells4.c b/src/mspells4.c index 91e64d602..2ac376f6a 100644 --- a/src/mspells4.c +++ b/src/mspells4.c @@ -47,7 +47,22 @@ bool monster_is_powerful(int m_idx) return (r_ptr->flags2 & RF2_POWERFUL); } -void monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, int TARGET_TYPE) +void monster_wakeup(int t_idx) +{ + (void)set_monster_csleep(t_idx, 0); +} + +void monster_fear_message(int t_idx) +{ + char t_name[80]; + monster_name(t_idx, t_name); + if (see_monster(t_idx)) + { + msg_format(_("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", "%^s flees in terror!"), t_name); + } +} + +void monspell_message_base(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, cptr msg4, bool msg_flag, int TARGET_TYPE) { bool known = monster_near_player(m_idx, t_idx); bool see_either = see_monster(m_idx) || see_monster(t_idx); @@ -57,24 +72,25 @@ void monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, int monster_name(m_idx, m_name); monster_name(t_idx, t_name); - if (mon_to_player || (mon_to_mon && known && see_either)) disturb(1, 1); - if (p_ptr->blind) + if (msg_flag) { - if (mon_to_player || (mon_to_mon && known && see_either)) + if (mon_to_player) msg_format(msg1, m_name); + else if (mon_to_mon && known && see_either) + msg_format(msg2, m_name); } else { if (mon_to_player) { - msg_format(msg2, m_name); + msg_format(msg3, m_name); } else if (mon_to_mon && known && see_either) { - msg_format(msg3, m_name, t_name); + msg_format(msg4, m_name, t_name); } } @@ -82,34 +98,30 @@ void monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, int mon_fight = TRUE; } +void monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, int TARGET_TYPE) +{ + monspell_message_base(m_idx, t_idx, msg1, msg1, msg2, msg3, p_ptr->blind, TARGET_TYPE); +} + +void simple_monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, int TARGET_TYPE) +{ + monspell_message_base(m_idx, t_idx, msg1, msg1, msg2, msg2, p_ptr->blind, TARGET_TYPE); +} + void spell_RF4_SHRIEK(int m_idx, int t_idx, int TARGET_TYPE) { - bool known = monster_near_player(m_idx, t_idx); - bool see_m = see_monster(m_idx); - char m_name[80], t_name[80]; - monster_name(m_idx, m_name); - monster_name(t_idx, t_name); + simple_monspell_message(m_idx, t_idx, + _("%^s¤¬¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£", "%^s makes a high pitched shriek."), + _("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¶«¤ó¤À¡£", "%^s shrieks at %s."), + TARGET_TYPE); - if (TARGET_TYPE == MONSTER_TO_MONSTER) + if (TARGET_TYPE == MONSTER_TO_PLAYER) { - if (known) - { - if (see_m) - { - msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¶«¤ó¤À¡£", "%^s shrieks at %s."), m_name, t_name); - } - else - { - mon_fight = TRUE; - } - } - (void)set_monster_csleep(t_idx, 0); + aggravate_monsters(m_idx); } - else if (TARGET_TYPE == MONSTER_TO_PLAYER) + else if (TARGET_TYPE == MONSTER_TO_MONSTER) { - disturb(1, 1); - msg_format(_("%^s¤¬¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£", "%^s makes a high pitched shriek."), m_name); - aggravate_monsters(m_idx); + monster_wakeup(t_idx); } } @@ -121,34 +133,14 @@ void spell_RF4_DISPEL(int m_idx, int t_idx, int TARGET_TYPE) monster_name(m_idx, m_name); monster_name(t_idx, t_name); + monspell_message(m_idx, t_idx, + _("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), + _("%^s¤¬ËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a dispel magic."), + _("%^s¤¬%s¤ËÂФ·¤ÆËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a dispel magic at %s."), + TARGET_TYPE); - if (TARGET_TYPE == MONSTER_TO_MONSTER) - { - if (known) - { - if (see_m) - { - msg_format(_("%^s¤¬%s¤ËÂФ·¤ÆËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", - "%^s invokes a dispel magic at %s."), m_name, t_name); - } - else - { - mon_fight = TRUE; - } - } - - if (t_idx == p_ptr->riding) dispel_player(); - dispel_monster_status(t_idx); - } - else if (TARGET_TYPE == MONSTER_TO_PLAYER) + if (TARGET_TYPE == MONSTER_TO_PLAYER) { - disturb(1, 1); - - if (p_ptr->blind) - msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name); - else - msg_format(_("%^s¤¬ËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a dispel magic."), m_name); - dispel_player(); if (p_ptr->riding) dispel_monster_status(p_ptr->riding); @@ -157,6 +149,11 @@ void spell_RF4_DISPEL(int m_idx, int t_idx, int TARGET_TYPE) learn_spell(MS_DISPEL); } + else if (TARGET_TYPE == MONSTER_TO_MONSTER) + { + if (t_idx == p_ptr->riding) dispel_player(); + dispel_monster_status(t_idx); + } } int spell_RF4_ROCKET(int y, int x, int m_idx, int t_idx, int TARGET_TYPE) @@ -757,7 +754,6 @@ void spell_RF5_CAUSE(int GF_TYPE, int dam, int y, int x, int m_idx, int t_idx, c monster_name(m_idx, m_name); monster_name(t_idx, t_name); - if (TARGET_TYPE == MONSTER_TO_PLAYER) { disturb(1, 1); @@ -1058,187 +1054,355 @@ int spell_RF5_MISSILE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE) return dam; } -void spell_RF5_SCARE(int y, int x, int m_idx) +void spell_badstatus_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, cptr msg4, bool resist, bool saving_throw, int TARGET_TYPE) { - int rlev = monster_level_idx(m_idx); - char m_name[80]; + 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]; monster_name(m_idx, m_name); - disturb(1, 1); - - - if (p_ptr->blind) - msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢¶²¤í¤·¤²¤Ê²»¤¬Ê¹¤³¤¨¤¿¡£", "%^s mumbles, and you hear scary noises."), m_name); - else - msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", "%^s casts a fearful illusion."), m_name); + monster_name(t_idx, t_name); - if (p_ptr->resist_fear) - { - msg_print(_("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You refuse to be frightened.")); - } - else if (randint0(100 + rlev / 2) < p_ptr->skill_sav) + if (TARGET_TYPE == MONSTER_TO_PLAYER) { - msg_print(_("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You refuse to be frightened.")); + disturb(1, 1); + if (p_ptr->blind) + msg_format(msg1, m_name); + else + msg_format(msg2, m_name); + + if (resist) + { + msg_print(msg3); + } + else if (saving_throw) + { + msg_print(msg4); + } } - else + else if (TARGET_TYPE == MONSTER_TO_MONSTER) { - (void)set_afraid(p_ptr->afraid + randint0(4) + 4); + if (known) + { + if (see_either) + { + msg_format(msg1, m_name, t_name); + } + else + { + mon_fight = TRUE; + } + } + + if (resist) + { + if (see_t) msg_format(msg2, t_name); + } + else if (saving_throw) + { + if (see_t) msg_format(msg3, t_name); + } + else + { + if (see_t) msg_format(msg4, t_name); + } + monster_wakeup(t_idx); } - learn_spell(MS_SCARE); - update_smart_learn(m_idx, DRS_FEAR); } -void spell_RF5_BLIND(int y, int x, int m_idx) +void spell_RF5_SCARE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE) { + monster_type *t_ptr = &m_list[t_idx]; + monster_race *tr_ptr = &r_info[t_ptr->r_idx]; int rlev = monster_level_idx(m_idx); - char m_name[80]; - monster_name(m_idx, m_name); - - disturb(1, 1); - - if (p_ptr->blind) - msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name); - else - msg_format(_("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¤¢¤Ê¤¿¤ÎÌܤò¤¯¤é¤Þ¤·¤¿¡ª", - "%^s casts a spell, burning your eyes!"), m_name); + bool resist, saving_throw; - if (p_ptr->resist_blind) - { - msg_print(_("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!")); - } - else if (randint0(100 + rlev / 2) < p_ptr->skill_sav) + if (TARGET_TYPE == MONSTER_TO_PLAYER) { - msg_print(_("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!")); + resist = p_ptr->resist_fear; + saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav); + spell_badstatus_message(m_idx, t_idx, + _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢¶²¤í¤·¤²¤Ê²»¤¬Ê¹¤³¤¨¤¿¡£", "%^s mumbles, and you hear scary noises."), + _("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", "%^s casts a fearful illusion."), + _("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You refuse to be frightened."), + _("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You refuse to be frightened."), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + (void)set_afraid(p_ptr->afraid + randint0(4) + 4); + } + learn_spell(MS_SCARE); + update_smart_learn(m_idx, DRS_FEAR); } - else + else if (TARGET_TYPE == MONSTER_TO_MONSTER) { - (void)set_blind(12 + randint0(4)); + resist = tr_ptr->flags3 & RF3_NO_FEAR; + saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); + + spell_badstatus_message(m_idx, t_idx, + _("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", "%^s casts a fearful illusion in front of %s."), + _("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", "%^s refuses to be frightened."), + _("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", "%^s refuses to be frightened."), + _("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", "%^s flees in terror!"), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + set_monster_monfear(t_idx, MON_MONFEAR(t_ptr) + randint0(4) + 4); + } } - learn_spell(MS_BLIND); - update_smart_learn(m_idx, DRS_BLIND); } -void spell_RF5_CONF(int y, int x, int m_idx) +void spell_RF5_BLIND(int y, int x, int m_idx, int t_idx, int TARGET_TYPE) { + monster_type *t_ptr = &m_list[t_idx]; + monster_race *tr_ptr = &r_info[t_ptr->r_idx]; int rlev = monster_level_idx(m_idx); - char m_name[80]; - monster_name(m_idx, m_name); - - disturb(1, 1); - - if (p_ptr->blind) - msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢Æ¬¤òǺ¤Þ¤¹²»¤¬¤·¤¿¡£", - "%^s mumbles, and you hear puzzling noises."), m_name); - else - msg_format(_("%^s¤¬Í¶ÏÇŪ¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", - "%^s creates a mesmerising illusion."), m_name); + bool resist, saving_throw; - if (p_ptr->resist_conf) - { - msg_print(_("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You disbelieve the feeble spell.")); - } - else if (randint0(100 + rlev / 2) < p_ptr->skill_sav) + if (TARGET_TYPE == MONSTER_TO_PLAYER) { - msg_print(_("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You disbelieve the feeble spell.")); + resist = p_ptr->resist_blind; + saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav); + spell_badstatus_message(m_idx, t_idx, + _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), + _("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¤¢¤Ê¤¿¤ÎÌܤò¤¯¤é¤Þ¤·¤¿¡ª", "%^s casts a spell, burning your eyes!"), + _("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"), + _("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + (void)set_blind(12 + randint0(4)); + } + learn_spell(MS_BLIND); + update_smart_learn(m_idx, DRS_BLIND); } - else + else if (TARGET_TYPE == MONSTER_TO_MONSTER) { - (void)set_confused(p_ptr->confused + randint0(4) + 4); + cptr msg1; + char t_name[80]; + monster_name(t_idx, t_name); + + if (streq(t_name, "it")) + { + msg1 = _("%s¤Ï¼öʸ¤ò¾§¤¨¤Æ%s¤ÎÌܤò¾Æ¤­ÉÕ¤«¤»¤¿¡£", "%^s casts a spell, burning %ss eyes."); + } + else + { + msg1 = _("%s¤Ï¼öʸ¤ò¾§¤¨¤Æ%s¤ÎÌܤò¾Æ¤­ÉÕ¤«¤»¤¿¡£", "%^s casts a spell, burning %s's eyes."); + } + + resist = tr_ptr->flags3 & RF3_NO_CONF; + saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); + + spell_badstatus_message(m_idx, t_idx, + msg1, + _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), + _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), + _("%^s¤ÏÌܤ¬¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¡ª ", "%^s is blinded!"), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4)); + } } - learn_spell(MS_CONF); - update_smart_learn(m_idx, DRS_CONF); } -void spell_RF5_SLOW(int y, int x, int m_idx) +void spell_RF5_CONF(int y, int x, int m_idx, int t_idx, int TARGET_TYPE) { + monster_type *t_ptr = &m_list[t_idx]; + monster_race *tr_ptr = &r_info[t_ptr->r_idx]; int rlev = monster_level_idx(m_idx); - char m_name[80]; - monster_name(m_idx, m_name); + bool resist, saving_throw; - disturb(1, 1); - - msg_format(_("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª", - "%^s drains power from your muscles!"), m_name); - - if (p_ptr->free_act) - { - msg_print(_("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!")); - } - else if (randint0(100 + rlev / 2) < p_ptr->skill_sav) + if (TARGET_TYPE == MONSTER_TO_PLAYER) { - msg_print(_("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!")); + resist = p_ptr->resist_conf; + saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav); + spell_badstatus_message(m_idx, t_idx, + _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢Æ¬¤òǺ¤Þ¤¹²»¤¬¤·¤¿¡£", "%^s mumbles, and you hear puzzling noises."), + _("%^s¤¬Í¶ÏÇŪ¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", "%^s creates a mesmerising illusion."), + _("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You disbelieve the feeble spell."), + _("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You disbelieve the feeble spell."), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + (void)set_confused(p_ptr->confused + randint0(4) + 4); + } + learn_spell(MS_CONF); + update_smart_learn(m_idx, DRS_CONF); } - else + else if (TARGET_TYPE == MONSTER_TO_MONSTER) { - (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE); + resist = tr_ptr->flags3 & RF3_NO_CONF; + saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); + + spell_badstatus_message(m_idx, t_idx, + _("%^s¤¬%s¤ÎÁ°¤Ë¸¸ÏÇŪ¤Ê¸¸¤ò¤Ä¤¯¤ê½Ð¤·¤¿¡£", "%^s casts a mesmerizing illusion in front of %s."), + _("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£", "%^s disbelieves the feeble spell."), + _("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£", "%^s disbelieves the feeble spell."), + _("%^s¤Ïº®Í𤷤¿¤è¤¦¤À¡£", "%^s seems confused."), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4)); + } } - learn_spell(MS_SLOW); - update_smart_learn(m_idx, DRS_FREE); } -void spell_RF5_HOLD(int y, int x, int m_idx) + +void spell_RF5_SLOW(int y, int x, int m_idx, int t_idx, int TARGET_TYPE) { + monster_type *t_ptr = &m_list[t_idx]; + monster_race *tr_ptr = &r_info[t_ptr->r_idx]; int rlev = monster_level_idx(m_idx); - char m_name[80]; - monster_name(m_idx, m_name); - disturb(1, 1); + bool resist, saving_throw; - if (p_ptr->blind) - msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name); - else - msg_format(_("%^s¤¬¤¢¤Ê¤¿¤ÎÌܤò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡ª", "%^s stares deep into your eyes!"), m_name); + if (TARGET_TYPE == MONSTER_TO_PLAYER) + { + resist = p_ptr->resist_conf; + saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav); + spell_badstatus_message(m_idx, t_idx, + _("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª", "%^s drains power from your muscles!"), + _("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª", "%^s drains power from your muscles!"), + _("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"), + _("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"), + resist, saving_throw, TARGET_TYPE); - if (p_ptr->free_act) + if (!resist && !saving_throw) + { + (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE); + } + learn_spell(MS_SLOW); + update_smart_learn(m_idx, DRS_FREE); + } + else if (TARGET_TYPE == MONSTER_TO_MONSTER) { - msg_print(_("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!")); + cptr msg1; + char t_name[80]; + monster_name(t_idx, t_name); + + if (streq(t_name, "it")) + { + msg1 = _("%s¤¬%s¤Î¶ÚÆù¤«¤éÎϤòµÛ¤¤¤È¤Ã¤¿¡£", "%^s drains power from %ss muscles."); + } + else + { + msg1 = _("%s¤¬%s¤Î¶ÚÆù¤«¤éÎϤòµÛ¤¤¤È¤Ã¤¿¡£", "%^s drains power from %s's muscles."); + } + + resist = tr_ptr->flags1 & RF1_UNIQUE; + saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); + + spell_badstatus_message(m_idx, t_idx, + msg1, + _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), + _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), + _("%s¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving slower."), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + set_monster_slow(t_idx, MON_SLOW(t_ptr) + 50); + } } - else if (randint0(100 + rlev / 2) < p_ptr->skill_sav) +} + +void spell_RF5_HOLD(int y, int x, int m_idx, int t_idx, int TARGET_TYPE) +{ + monster_type *t_ptr = &m_list[t_idx]; + monster_race *tr_ptr = &r_info[t_ptr->r_idx]; + int rlev = monster_level_idx(m_idx); + bool resist, saving_throw; + + if (TARGET_TYPE == MONSTER_TO_PLAYER) { - msg_format(_("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!")); + resist = p_ptr->free_act; + saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav); + spell_badstatus_message(m_idx, t_idx, + _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), + _("%^s¤¬¤¢¤Ê¤¿¤ÎÌܤò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡ª", "%^s stares deep into your eyes!"), + _("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"), + _("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4); + } + learn_spell(MS_SLEEP); + update_smart_learn(m_idx, DRS_FREE); } - else + else if (TARGET_TYPE == MONSTER_TO_MONSTER) { - (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4); + resist = (tr_ptr->flags1 & RF1_UNIQUE) || (tr_ptr->flags3 & RF3_NO_STUN); + saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10); + + spell_badstatus_message(m_idx, t_idx, + _("%^s¤Ï%s¤ò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡£", "%^s stares intently at %s."), + _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), + _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), + _("%^s¤ÏËãá㤷¤¿¡ª", "%^s is paralyzed!"), + resist, saving_throw, TARGET_TYPE); + + if (!resist && !saving_throw) + { + (void)set_monster_stunned(t_idx, MON_STUNNED(t_ptr) + randint1(4) + 4); + } } - learn_spell(MS_SLEEP); - update_smart_learn(m_idx, DRS_FREE); } -void spell_RF6_HASTE(int m_idx) +void spell_RF6_HASTE(int m_idx, int 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_name(m_idx, m_name); - disturb(1, 1); - if (p_ptr->blind) - { - msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name); - } - else - { - msg_format(_("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), m_name); - } + + monspell_message_base(m_idx, t_idx, + _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), + _("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), + _("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), + _("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), + p_ptr->blind, TARGET_TYPE); /* Allow quick speed increases to base+10 */ if (set_monster_fast(m_idx, MON_FAST(m_ptr) + 100)) { - msg_format(_("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving faster."), m_name); + if (TARGET_TYPE == MONSTER_TO_PLAYER || + (TARGET_TYPE == MONSTER_TO_MONSTER && see_m)) + msg_format(_("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving faster."), m_name); } } -int spell_RF6_HAND_DOOM(int y, int x, int m_idx) +int spell_RF6_HAND_DOOM(int y, int x, int m_idx, int t_idx, int TARGET_TYPE) { - monster_type *m_ptr = &m_list[m_idx]; int dam; - char m_name[80]; - monster_name(m_idx, m_name); - disturb(1, 1); - msg_format(_("%^s¤¬<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom!"), m_name); - dam = (((s32b)((40 + randint1(20)) * (p_ptr->chp))) / 100); - breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, MONSTER_TO_PLAYER); + + simple_monspell_message(m_idx, t_idx, + _("%^s¤¬<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom!"), + _("%^s¤¬%s¤Ë<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom upon %s!"), + TARGET_TYPE); + + if (TARGET_TYPE == MONSTER_TO_PLAYER) + { + dam = (((s32b)((40 + randint1(20)) * (p_ptr->chp))) / 100); + breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, MONSTER_TO_PLAYER); + } + else if (TARGET_TYPE == MONSTER_TO_MONSTER) + { + dam = 20; /* Dummy power */ + breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, MONSTER_TO_MONSTER); + } return dam; } -void spell_RF6_HEAL(int m_idx) +void spell_RF6_HEAL(int m_idx, int t_idx, int TARGET_TYPE) { monster_type *m_ptr = &m_list[m_idx]; int rlev = monster_level_idx(m_idx); @@ -1249,10 +1413,12 @@ void spell_RF6_HEAL(int m_idx) disturb(1, 1); /* Message */ - if (p_ptr->blind) - msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name); - else - msg_format(_("%^s¤¬¼«Ê¬¤Î½ý¤Ë½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), m_name); + monspell_message_base(m_idx, t_idx, + _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), + _("%^s¤Ï¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), + _("%^s¤¬¼«Ê¬¤Î½ý¤Ë½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), + _("%^s¤Ï¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), + p_ptr->blind, TARGET_TYPE); /* Heal some */ m_ptr->hp += (rlev * 6); @@ -1264,20 +1430,24 @@ void spell_RF6_HEAL(int m_idx) m_ptr->hp = m_ptr->maxhp; /* Message */ - if (seen) - msg_format(_("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"), m_name); - else - msg_format(_("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¤è¤¦¤À¡ª", "%^s sounds completely healed!"), m_name); + monspell_message_base(m_idx, t_idx, + _("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¤è¤¦¤À¡ª", "%^s sounds completely healed!"), + _("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¤è¤¦¤À¡ª", "%^s sounds completely healed!"), + _("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"), + _("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"), + !seen, TARGET_TYPE); } /* Partially healed */ else { /* Message */ - if (seen) - msg_format(_("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."), m_name); - else - msg_format(_("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s sounds healthier."), m_name); + monspell_message_base(m_idx, t_idx, + _("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s sounds healthier."), + _("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s sounds healthier."), + _("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."), + _("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."), + !seen, TARGET_TYPE); } /* Redraw (later) if needed */ @@ -1291,59 +1461,70 @@ void spell_RF6_HEAL(int m_idx) (void)set_monster_monfear(m_idx, 0); /* Message */ - msg_format(_("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", "%^s recovers %s courage."), m_name); + if (see_monster(m_idx)) + msg_format(_("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", "%^s recovers %s courage."), m_name); } } -void spell_RF6_INVULNER(int m_idx) +void spell_RF6_INVULNER(int m_idx, int t_idx, int TARGET_TYPE) { monster_type *m_ptr = &m_list[m_idx]; bool seen = (!p_ptr->blind && m_ptr->ml); - char m_name[80]; - monster_name(m_idx, m_name); - disturb(1, 1); /* Message */ - if (!seen) - msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name); - else - msg_format(_("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."), m_name); + monspell_message_base(m_idx, t_idx, + _("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), + _("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), + _("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."), + _("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."), + !seen, TARGET_TYPE); if (!MON_INVULNER(m_ptr)) (void)set_monster_invulner(m_idx, randint1(4) + 4, FALSE); } -void spell_RF6_BLINK(int m_idx) +void spell_RF6_BLINK(int m_idx, int TARGET_TYPE) { char m_name[80]; monster_name(m_idx, m_name); + + if (TARGET_TYPE==MONSTER_TO_PLAYER) + disturb(1, 1); - disturb(1, 1); if (teleport_barrier(m_idx)) { - msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", - "Magic barrier obstructs teleporting of %^s."), m_name); + if(see_monster(m_idx)) + msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", + "Magic barrier obstructs teleporting of %^s."), m_name); } else { - msg_format(_("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", "%^s blinks away."), m_name); + if(see_monster(m_idx)) + msg_format(_("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", "%^s blinks away."), m_name); + teleport_away(m_idx, 10, 0L); - p_ptr->update |= (PU_MONSTERS); + + if (TARGET_TYPE==MONSTER_TO_PLAYER) + p_ptr->update |= (PU_MONSTERS); } } -void spell_RF6_TPORT(int m_idx) +void spell_RF6_TPORT(int m_idx, int TARGET_TYPE) { char m_name[80]; monster_name(m_idx, m_name); - - disturb(1, 1); + + if (TARGET_TYPE==MONSTER_TO_PLAYER) + disturb(1, 1); if (teleport_barrier(m_idx)) { - msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", - "Magic barrier obstructs teleporting of %^s."), m_name); + if(see_monster(m_idx)) + msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", + "Magic barrier obstructs teleporting of %^s."), m_name); } else { - msg_format(_("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", "%^s teleports away."), m_name); + if(see_monster(m_idx)) + msg_format(_("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", "%^s teleports away."), m_name); + teleport_away_followable(m_idx); } } @@ -2216,3 +2397,186 @@ void spell_RF6_S_UNIQUE(int y, int x, int m_idx) } } + +int monspell_to_player(int SPELL_NUM, int y, int x, int m_idx) +{ + switch (SPELL_NUM) + { + case 96 + 0: spell_RF4_SHRIEK(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_SHRIEK */ + case 96 + 1: break; /* RF4_XXX1 */ + case 96 + 2: spell_RF4_DISPEL(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_DISPEL */ + case 96 + 3: return spell_RF4_ROCKET(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_ROCKET */ + case 96 + 4: return spell_RF4_SHOOT(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_SHOOT */ + case 96 + 5: break; /* RF4_XXX2 */ + case 96 + 6: break; /* RF4_XXX3 */ + case 96 + 7: break; /* RF4_XXX4 */ + case 96 + 8: return spell_RF4_BREATH(GF_ACID, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_ACID */ + case 96 + 9: return spell_RF4_BREATH(GF_ELEC, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_ELEC */ + case 96 + 10: return spell_RF4_BREATH(GF_FIRE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_FIRE */ + case 96 + 11: return spell_RF4_BREATH(GF_COLD, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_COLD */ + case 96 + 12: return spell_RF4_BREATH(GF_POIS, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_POIS */ + case 96 + 13: return spell_RF4_BREATH(GF_NETHER, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_NETH */ + case 96 + 14: return spell_RF4_BREATH(GF_LITE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_LITE */ + case 96 + 15: return spell_RF4_BREATH(GF_DARK, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_DARK */ + case 96 + 16: return spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_CONF */ + case 96 + 17: return spell_RF4_BREATH(GF_SOUND, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_SOUN */ + case 96 + 18: return spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_CHAO */ + case 96 + 19: return spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_DISE */ + case 96 + 20: return spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_NEXU */ + case 96 + 21: return spell_RF4_BREATH(GF_TIME, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_TIME */ + case 96 + 22: return spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_INER */ + case 96 + 23: return spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_GRAV */ + case 96 + 24: return spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_SHAR */ + case 96 + 25: return spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_PLAS */ + case 96 + 26: return spell_RF4_BREATH(GF_FORCE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_WALL */ + case 96 + 27: return spell_RF4_BREATH(GF_MANA, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_MANA */ + case 96 + 28: return spell_RF4_BA_NUKE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BA_NUKE */ + case 96 + 29: return spell_RF4_BREATH(GF_NUKE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_NUKE */ + case 96 + 30: return spell_RF4_BA_CHAO(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BA_CHAO */ + case 96 + 31: return spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_DISI */ + case 128 + 0: return spell_RF5_BA_ACID(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_ACID */ + case 128 + 1: return spell_RF5_BA_ELEC(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_ELEC */ + case 128 + 2: return spell_RF5_BA_FIRE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_FIRE */ + case 128 + 3: return spell_RF5_BA_COLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_COLD */ + case 128 + 4: return spell_RF5_BA_POIS(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_POIS */ + case 128 + 5: return spell_RF5_BA_NETH(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_NETH */ + case 128 + 6: return spell_RF5_BA_WATE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_WATE */ + case 128 + 7: return spell_RF5_BA_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_MANA */ + case 128 + 8: return spell_RF5_BA_DARK(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_DARK */ + case 128 + 9: return spell_RF5_DRAIN_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_DRAIN_MANA */ + case 128 + 10: return spell_RF5_MIND_BLAST(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MIND_BLAST */ + case 128 + 11: return spell_RF5_BRAIN_SMASH(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MIND_BLAST */ + case 128 + 12: return spell_RF5_CAUSE_1(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_CAUSE_1 */ + case 128 + 13: return spell_RF5_CAUSE_2(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_CAUSE_2 */ + case 128 + 14: return spell_RF5_CAUSE_3(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_CAUSE_3 */ + case 128 + 15: return spell_RF5_CAUSE_4(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_CAUSE_4 */ + case 128 + 16: return spell_RF5_BO_ACID(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ACID */ + case 128 + 17: return spell_RF5_BO_ELEC(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ELEC */ + case 128 + 18: return spell_RF5_BO_FIRE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_FIRE */ + case 128 + 19: return spell_RF5_BO_COLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_COLD */ + case 128 + 20: return spell_RF5_BA_LITE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_LITE */ + case 128 + 21: return spell_RF5_BO_NETH(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_NETH */ + case 128 + 22: return spell_RF5_BO_WATE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_WATE */ + case 128 + 23: return spell_RF5_BO_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_MANA */ + case 128 + 24: return spell_RF5_BO_PLAS(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_PLAS */ + case 128 + 25: return spell_RF5_BO_ICEE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ICEE */ + case 128 + 26: return spell_RF5_MISSILE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MISSILE */ + case 128 + 27: spell_RF5_SCARE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_SCARE */ + case 128 + 28: spell_RF5_BLIND(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BLIND */ + case 128 + 29: spell_RF5_CONF(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_CONF */ + case 128 + 30: spell_RF5_SLOW(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_SLOW */ + case 128 + 31: spell_RF5_HOLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_HOLD */ + case 160 + 0: spell_RF6_HASTE(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_HASTE */ + case 160 + 1: return spell_RF6_HAND_DOOM(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF6_HAND_DOOM */ + case 160 + 2: spell_RF6_HEAL(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_HEAL */ + case 160 + 3: spell_RF6_INVULNER(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_INVULNER */ + case 160 + 4: spell_RF6_BLINK(m_idx, MONSTER_TO_PLAYER); break; /* RF6_BLINK */ + case 160 + 5: spell_RF6_TPORT(m_idx, MONSTER_TO_PLAYER); break; /* RF6_TPORT */ + case 160 + 6: return spell_RF6_WORLD(m_idx); break; /* RF6_WORLD */ + case 160 + 7: return spell_RF6_SPECIAL(y, x, m_idx); /* RF6_SPECIAL */ + case 160 + 8: spell_RF6_TELE_TO(m_idx); break; /* RF6_TELE_TO */ + case 160 + 9: spell_RF6_TELE_AWAY(m_idx); break; /* RF6_TELE_AWAY */ + case 160 + 10: spell_RF6_TELE_LEVEL(m_idx); break; /* RF6_TELE_LEVEL */ + case 160 + 11: spell_RF6_PSY_SPEAR(y, x, m_idx); break; /* RF6_PSY_SPEAR */ + case 160 + 12: spell_RF6_DARKNESS(m_idx); break; /* RF6_DARKNESS */ + case 160 + 13: spell_RF6_TRAPS(y, x, m_idx); break; /* RF6_TRAPS */ + case 160 + 14: spell_RF6_FORGET(m_idx); break; /* RF6_FORGET */ + case 160 + 15: spell_RF6_RAISE_DEAD(m_idx); break; /* RF6_RAISE_DEAD */ + case 160 + 16: spell_RF6_S_KIN(y, x, m_idx); break; /* RF6_S_KIN */ + case 160 + 17: spell_RF6_S_CYBER(y, x, m_idx); break; /* RF6_S_CYBER */ + case 160 + 18: spell_RF6_S_MONSTER(y, x, m_idx); break; /* RF6_S_MONSTER */ + case 160 + 19: spell_RF6_S_MONSTERS(y, x, m_idx); break; /* RF6_S_MONSTER */ + case 160 + 20: spell_RF6_S_ANT(y, x, m_idx); break; /* RF6_S_ANT */ + case 160 + 21: spell_RF6_S_SPIDER(y, x, m_idx); break; /* RF6_S_SPIDER */ + case 160 + 22: spell_RF6_S_HOUND(y, x, m_idx); break; /* RF6_S_HOUND */ + case 160 + 23: spell_RF6_S_HYDRA(y, x, m_idx); break; /* RF6_S_HYDRA */ + case 160 + 24: spell_RF6_S_ANGEL(y, x, m_idx); break; /* RF6_S_ANGEL */ + case 160 + 25: spell_RF6_S_DEMON(y, x, m_idx); break; /* RF6_S_DEMON */ + case 160 + 26: spell_RF6_S_UNDEAD(y, x, m_idx); break; /* RF6_S_UNDEAD */ + case 160 + 27: spell_RF6_S_DRAGON(y, x, m_idx); break; /* RF6_S_DRAGON */ + case 160 + 28: spell_RF6_S_HI_UNDEAD(y, x, m_idx); break; /* RF6_S_HI_UNDEAD */ + case 160 + 29: spell_RF6_S_HI_DRAGON(y, x, m_idx); break; /* RF6_S_HI_DRAGON */ + case 160 + 30: spell_RF6_S_AMBERITES(y, x, m_idx); break; /* RF6_S_AMBERITES */ + case 160 + 31: spell_RF6_S_UNIQUE(y, x, m_idx); break; /* RF6_S_UNIQUE */ + } + return 0; +} + +int monspell_to_monster(int SPELL_NUM, int y, int x, int m_idx, int t_idx) +{ + switch (SPELL_NUM) + { + case 96 + 0: spell_RF4_SHRIEK(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_SHRIEK */ + case 96 + 1: return -1; /* RF4_XXX1 */ + case 96 + 2: spell_RF4_DISPEL(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_DISPEL */ + case 96 + 3: return spell_RF4_ROCKET(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_ROCKET */ + case 96 + 4: return spell_RF4_SHOOT(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_SHOOT */ + case 96 + 5: return -1; /* RF4_XXX2 */ + case 96 + 6: return -1; /* RF4_XXX3 */ + case 96 + 7: return -1; /* RF4_XXX4 */ + case 96 + 8: return spell_RF4_BREATH(GF_ACID, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_ACID */ + case 96 + 9: return spell_RF4_BREATH(GF_ELEC, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_ELEC */ + case 96 + 10: return spell_RF4_BREATH(GF_FIRE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_FIRE */ + case 96 + 11: return spell_RF4_BREATH(GF_COLD, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_COLD */ + case 96 + 12: return spell_RF4_BREATH(GF_POIS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_POIS */ + case 96 + 13: return spell_RF4_BREATH(GF_NETHER, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_NETH */ + case 96 + 14: return spell_RF4_BREATH(GF_LITE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_LITE */ + case 96 + 15: return spell_RF4_BREATH(GF_DARK, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_DARK */ + case 96 + 16: return spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_CONF */ + case 96 + 17: return spell_RF4_BREATH(GF_SOUND, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_SOUN */ + case 96 + 18: return spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_CHAO */ + case 96 + 19: return spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_DISE */ + case 96 + 20: return spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_NEXU */ + case 96 + 21: return spell_RF4_BREATH(GF_TIME, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_TIME */ + case 96 + 22: return spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_INER */ + case 96 + 23: return spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_GRAV */ + case 96 + 24: return spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_SHAR */ + case 96 + 25: return spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_PLAS */ + case 96 + 26: return spell_RF4_BREATH(GF_FORCE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_WALL */ + case 96 + 27: return spell_RF4_BREATH(GF_MANA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_MANA */ + case 96 + 28: return spell_RF4_BA_NUKE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BA_NUKE */ + case 96 + 29: return spell_RF4_BREATH(GF_NUKE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_NUKE */ + case 96 + 30: return spell_RF4_BA_CHAO(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BA_CHAO */ + case 96 + 31: return spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_DISI */ + case 128 + 0: return spell_RF5_BA_ACID(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_ACID */ + case 128 + 1: return spell_RF5_BA_ELEC(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_ELEC */ + case 128 + 2: return spell_RF5_BA_FIRE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_FIRE */ + case 128 + 3: return spell_RF5_BA_COLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_COLD */ + case 128 + 4: return spell_RF5_BA_POIS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_POIS */ + case 128 + 5: return spell_RF5_BA_NETH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_NETH */ + case 128 + 6: return spell_RF5_BA_WATE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_WATE */ + case 128 + 7: return spell_RF5_BA_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_MANA */ + case 128 + 8: return spell_RF5_BA_DARK(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_DARK */ + case 128 + 9: return spell_RF5_DRAIN_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_DRAIN_MANA */ + case 128 + 10: return spell_RF5_MIND_BLAST(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_MIND_BLAST */ + case 128 + 11: return spell_RF5_BRAIN_SMASH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BRAIN_SMASH */ + case 128 + 12: return spell_RF5_CAUSE_1(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_CAUSE_1 */ + case 128 + 13: return spell_RF5_CAUSE_2(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_CAUSE_2 */ + case 128 + 14: return spell_RF5_CAUSE_3(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_CAUSE_3 */ + case 128 + 15: return spell_RF5_CAUSE_4(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_CAUSE_4 */ + case 128 + 16: return spell_RF5_BO_ACID(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_ACID */ + case 128 + 17: return spell_RF5_BO_ELEC(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_ELEC */ + case 128 + 18: return spell_RF5_BO_FIRE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_FIRE */ + case 128 + 19: return spell_RF5_BO_COLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_COLD */ + case 128 + 20: return spell_RF5_BA_LITE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BA_LITE */ + case 128 + 21: return spell_RF5_BO_NETH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_NETH */ + case 128 + 22: return spell_RF5_BO_WATE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_WATE */ + case 128 + 23: return spell_RF5_BO_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_MANA */ + case 128 + 24: return spell_RF5_BO_PLAS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_PLAS */ + case 128 + 25: return spell_RF5_BO_ICEE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_ICEE */ + case 128 + 26: return spell_RF5_MISSILE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_MISSILE */ + case 128 + 27: spell_RF5_SCARE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_SCARE */ + case 128 + 28: spell_RF5_BLIND(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BLIND */ + case 128 + 29: spell_RF5_CONF(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CONF */ + case 128 + 30: spell_RF5_SLOW(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_SLOW */ + case 128 + 31: spell_RF5_HOLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_HOLD */ + case 160 + 0: spell_RF6_HASTE(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_HASTE */ + case 160 + 1: return spell_RF6_HAND_DOOM(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF6_HAND_DOOM */ + case 160 + 2: spell_RF6_HEAL(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_HEAL */ + case 160 + 3: spell_RF6_INVULNER(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_INVULNER */ + case 160 + 4: spell_RF6_BLINK(m_idx, MONSTER_TO_MONSTER); break; /* RF6_BLINK */ + case 160 + 5: spell_RF6_TPORT(m_idx, MONSTER_TO_MONSTER); break; /* RF6_TPORT */ + case 160 + 6: return -1; break; /* RF6_WORLD */ + } + return 0; +} \ No newline at end of file -- 2.11.0