/* File: mind.c */
-/* Purpose: Mane code */
-
/*
- * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
+ * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
*
- * This software may be copied and distributed for educational, research, and
- * not for profit purposes provided that this copyright and statement are
- * included in all such copies.
+ * This software may be copied and distributed for educational, research,
+ * and not for profit purposes provided that this copyright and statement
+ * are included in all such copies. Other copyrights may also apply.
*/
+/* Purpose: Imitation code */
+
#include "angband.h"
num = p_ptr->mane_num;
/* Build a prompt (accept all spells) */
+ (void)strnfmt(out_val, 78,
#ifdef JP
-(void) strnfmt(out_val, 78, "(%c-%c, '*'¤Ç°ìÍ÷, ESC) ¤É¤Î%s¤ò¤Þ¤Í¤Þ¤¹¤«¡©",
+ "(%c-%c, '*'¤Ç°ìÍ÷, ESC) ¤É¤Î%s¤ò¤Þ¤Í¤Þ¤¹¤«¡©",
#else
- (void)strnfmt(out_val, 78, "(%c-%c, *=List, ESC=exit) Use which %s? ",
+ "(%c-%c, *=List, ESC=exit) Use which %s? ",
#endif
-
- I2A(0), I2A(num - 1), p);
+ I2A(0), I2A(num - 1), p);
/* Get a spell from the user */
/* Prompt */
#ifdef JP
-(void) strnfmt(tmp_val, 78, "%s¤ò¤Þ¤Í¤Þ¤¹¤«¡©", monster_powers[p_ptr->mane_spell[i]].name);
+ (void) strnfmt(tmp_val, 78, "%s¤ò¤Þ¤Í¤Þ¤¹¤«¡©", monster_powers[p_ptr->mane_spell[i]].name);
#else
(void)strnfmt(tmp_val, 78, "Use %s? ", monster_powers[p_ptr->mane_spell[i]].name);
#endif
if (redraw) screen_load();
/* Show choices */
- if (show_choices)
- {
- /* Update */
- p_ptr->window |= (PW_SPELL);
+ p_ptr->window |= (PW_SPELL);
- /* Window stuff */
- window_stuff();
- }
+ /* Window stuff */
+ window_stuff();
/* Abort if needed */
if (!flag) return (FALSE);
break;
case MS_DISPEL:
{
- monster_type *m_ptr;
- char m_name[80];
+ int m_idx;
if (!target_set(TARGET_KILL)) return FALSE;
- if (!cave[target_row][target_col].m_idx) break;
- if (!los(py, px, target_row, target_col)) break;
- m_ptr = &m_list[cave[target_row][target_col].m_idx];
- monster_desc(m_name, m_ptr, 0);
- if (m_ptr->invulner)
- {
- m_ptr->invulner = 0;
-#ifdef JP
-msg_format("%s¤Ï¤â¤¦ÌµÅ¨¤Ç¤Ï¤Ê¤¤¡£", m_name);
-#else
- msg_format("%^s is no longer invulnerable.", m_name);
-#endif
- }
- if (m_ptr->fast)
- {
- m_ptr->fast = 0;
-#ifdef JP
-msg_format("%s¤Ï¤â¤¦²Ã®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
-#else
- msg_format("%^s is no longer fast.", m_name);
-#endif
- }
- if (m_ptr->slow)
- {
- m_ptr->slow = 0;
-#ifdef JP
-msg_format("%s¤Ï¤â¤¦¸ºÂ®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
-#else
- msg_format("%^s is no longer slow.", m_name);
-#endif
- }
- p_ptr->redraw |= (PR_HEALTH);
- if (p_ptr->riding == cave[target_row][target_col].m_idx) p_ptr->redraw |= (PR_HEALTH);
-
+ m_idx = cave[target_row][target_col].m_idx;
+ if (!m_idx) break;
+ if (!player_has_los_bold(target_row, target_col)) break;
+ if (!projectable(py, px, target_row, target_col)) break;
+ dispel_monster_status(m_idx);
break;
}
case MS_ROCKET:
(void)set_invuln(randint1(7) + 7, FALSE);
break;
case MS_BLINK:
- teleport_player(10);
+ teleport_player(10, 0L);
break;
case MS_TELEPORT:
- teleport_player(plev * 5);
+ teleport_player(plev * 5, 0L);
break;
case MS_WORLD:
world_player = TRUE;
case MS_TELE_TO:
{
monster_type *m_ptr;
+ monster_race *r_ptr;
char m_name[80];
if (!target_set(TARGET_KILL)) return FALSE;
if (!cave[target_row][target_col].m_idx) break;
- if (!los(py, px, target_row, target_col)) break;
+ if (!player_has_los_bold(target_row, target_col)) break;
+ if (!projectable(py, px, target_row, target_col)) break;
m_ptr = &m_list[cave[target_row][target_col].m_idx];
+ r_ptr = &r_info[m_ptr->r_idx];
monster_desc(m_name, m_ptr, 0);
+ if (r_ptr->flagsr & RFR_RES_TELE)
+ {
+ if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL))
+ {
+ if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
+#ifdef JP
+ msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", m_name);
+#else
+ msg_format("%s is unaffected!", m_name);
+#endif
+
+ break;
+ }
+ else if (r_ptr->level > randint1(100))
+ {
+ if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
+#ifdef JP
+ msg_format("%s¤Ë¤ÏÂÑÀ¤¬¤¢¤ë¡ª", m_name);
+#else
+ msg_format("%s resists!", m_name);
+#endif
+
+ break;
+ }
+ }
#ifdef JP
msg_format("%s¤ò°ú¤Ìᤷ¤¿¡£", m_name);
#else
- msg_format("You command %s to return.", m_name);
+ msg_format("You command %s to return.", m_name);
#endif
- teleport_to_player(cave[target_row][target_col].m_idx, 100);
+ teleport_monster_to(cave[target_row][target_col].m_idx, py, px, 100, TELEPORT_PASSIVE);
break;
}
case MS_TELE_AWAY:
break;
case MS_TELE_LEVEL:
{
+ int target_m_idx;
monster_type *m_ptr;
monster_race *r_ptr;
char m_name[80];
if (!target_set(TARGET_KILL)) return FALSE;
- if (!cave[target_row][target_col].m_idx) break;
- if (!los(py, px, target_row, target_col)) break;
- m_ptr = &m_list[cave[target_row][target_col].m_idx];
+ target_m_idx = cave[target_row][target_col].m_idx;
+ if (!target_m_idx) break;
+ if (!player_has_los_bold(target_row, target_col)) break;
+ if (!projectable(py, px, target_row, target_col)) break;
+ m_ptr = &m_list[target_m_idx];
r_ptr = &r_info[m_ptr->r_idx];
monster_desc(m_name, m_ptr, 0);
#ifdef JP
-msg_format("%s¤Î¤ò»Ø¤µ¤·¤¿¡£", m_name);
-#else
- msg_format("You gesture at %s's feet.", m_name);
-#endif
-
- if ((r_ptr->flags3 & RF3_RES_TELE) || (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > plev + randint1(60)))
- {
-#ifdef JP
-msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
+ msg_format("%^s¤Î¤ò»Ø¤µ¤·¤¿¡£", m_name);
#else
- msg_format("%s are unaffected!", m_name);
+ msg_format("You gesture at %^s's feet.", m_name);
#endif
- }
- else if (one_in_(2))
- {
-#ifdef JP
-msg_format("%s¤Ï¾²¤òÆͤÇˤäÆÄÀ¤ó¤Ç¤¤¤Ã¤¿¡£", m_name);
-#else
- msg_format("%s sink through the floor.", m_name);
-#endif
- delete_monster_idx(cave[target_row][target_col].m_idx);
- }
- else
+ if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) ||
+ (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > plev + randint1(60)))
{
#ifdef JP
-msg_format("%s¤ÏÅ·°æ¤òÆͤÇˤäÆÃè¤ØÉ⤤¤Æ¤¤¤Ã¤¿¡£",m_name);
+ msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
#else
- msg_format("%s rise up through the ceiling.", m_name);
+ msg_format("%^s is unaffected!", m_name);
#endif
- delete_monster_idx(cave[target_row][target_col].m_idx);
}
+ else teleport_level(target_m_idx);
break;
}
case MS_PSY_SPEAR:
energy_use = 100;
/* Window stuff */
- p_ptr->redraw |= (PR_MANE);
+ p_ptr->redraw |= (PR_IMITATION);
p_ptr->window |= (PW_PLAYER);
p_ptr->window |= (PW_SPELL);