#include "angband.h"
#include "cmd-pet.h"
+#include "monsterrace-hook.h"
+#include "melee.h"
+#include "projection.h"
+#include "spells-summon.h"
+#include "quest.h"
+#include "avatar.h"
/*!
monster_type *m_ptr = &m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
-
monster_type *t_ptr;
if (riding_t_m_idx && player_bold(m_ptr->fy, m_ptr->fx))
}
}
/* Hack -- no fighting away from player */
- else if ((m_ptr->cdis < t_ptr->cdis) &&
- (t_ptr->cdis > p_ptr->pet_follow_distance))
+ else if ((m_ptr->cdis < t_ptr->cdis) && (t_ptr->cdis > p_ptr->pet_follow_distance))
{
continue;
}
* Hack, based on mon_take_hit... perhaps all monster attacks on other monsters should use this?
* @param m_idx 目標となるモンスターの参照ID
* @param dam ダメージ量
- * @param fear 目標となるモンスターの恐慌状態を返す参照ポインタ
+ * @param dead 目標となったモンスターの死亡状態を返す参照ポインタ
+ * @param fear 目標となったモンスターの恐慌状態を返す参照ポインタ
* @param note 目標モンスターが死亡した場合の特別メッセージ(NULLならば標準表示を行う)
* @param who 打撃を行ったモンスターの参照ID
* @return なし
*/
-void mon_take_hit_mon(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note, IDX who)
+void mon_take_hit_mon(MONSTER_IDX m_idx, HIT_POINT dam, bool *dead, bool *fear, concptr note, IDX who)
{
monster_type *m_ptr = &m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
- char m_name[160];
+ GAME_TEXT m_name[160];
bool seen = is_seen(m_ptr);
/* Can the player be aware of this attack? */
if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
}
- /* Wake it up */
(void)set_monster_csleep(m_idx, 0);
- if (p_ptr->riding && (m_idx == p_ptr->riding)) disturb(1, 1);
+ if (p_ptr->riding && (m_idx == p_ptr->riding)) disturb(TRUE, TRUE);
if (MON_INVULNER(m_ptr) && randint0(PENETRATE_INVULNERABILITY))
{
{
msg_format(_("%^sはダメージを受けない。", "%^s is unharmed."), m_name);
}
-
return;
}
}
/* Hurt it */
- m_ptr->hp -= (s16b)dam;
+ m_ptr->hp -= dam;
/* It is dead now... or is it? */
if (m_ptr->hp < 0)
else
{
/* Make a sound */
- if (!monster_living(r_ptr))
+ if (!monster_living(m_ptr->r_idx))
{
sound(SOUND_N_KILL);
}
sound(SOUND_KILL);
}
+ *dead = TRUE;
+
if (known)
{
monster_desc(m_name, m_ptr, MD_TRUE_NAME);
msg_format(_("%^s%s", "%^s%s"), m_name, note);
}
/* Death by normal attack -- nonliving monster */
- else if (!monster_living(r_ptr))
+ else if (!monster_living(m_ptr->r_idx))
{
msg_format(_("%^sは破壊された。", "%^s is destroyed."), m_name);
}
}
monster_gain_exp(who, m_ptr->r_idx);
-
- /* Generate treasure */
monster_death(m_idx, FALSE);
-
- /* Delete the monster */
delete_monster_idx(m_idx);
/* Not afraid */
}
}
+ *dead = FALSE;
+
#ifdef ALLOW_FEAR
/* Mega-Hack -- Pain cancels fear */
/* Hack -- note fear */
(*fear) = TRUE;
- /* XXX XXX XXX Hack -- Add some timed fear */
+ /* Hack -- Add some timed fear */
(void)set_monster_monfear(m_idx, (randint1(10) +
(((dam >= m_ptr->hp) && (percentage > 7)) ?
20 : ((11 - percentage) * 5))));
monster_race *r_ptr = &r_info[m_ptr->r_idx];
- u16b p_lev, m_lev;
+ PLAYER_LEVEL p_lev;
+ DEPTH m_lev;
HIT_POINT p_chp, p_mhp;
HIT_POINT m_chp, m_mhp;
u32b p_val, m_val;
{
int cost;
- /* Get the location */
y = y1 + ddy_ddd[i];
x = x1 + ddx_ddd[i];
/* Check nearby grids, diagonals first */
for (i = 7; i >= 0; i--)
{
- /* Get the location */
y = y1 + ddy_ddd[i];
x = x1 + ddx_ddd[i];
{
POSITION dis, s;
- /* Get the location */
y = fy + ddy_ddd[i];
x = fx + ddx_ddd[i];
* It is probably better to replace these arrays with code to compute
* the relevant arrays, even if the storage is pre-allocated in hard
* coded sizes. At the very least, code should be included which is
- * able to generate and dump these arrays (ala "los()"). XXX XXX XXX
+ * able to generate and dump these arrays (ala "los()").
*
- * Also, the storage needs could be halved by using bytes. XXX XXX XXX
+ * Also, the storage needs could be halved by using bytes.
*
* These arrays could be combined into two big arrays, using sub-arrays
* to hold the offsets and lengths of each portion of the sub-arrays, and
- * this could perhaps also be used somehow in the "look" code. XXX XXX XXX
+ * this could perhaps also be used somehow in the "look" code.
*/
-static sint d_off_y_0[] =
-{ 0 };
-
-static sint d_off_x_0[] =
-{ 0 };
-
-
-static sint d_off_y_1[] =
-{ -1, -1, -1, 0, 0, 1, 1, 1, 0 };
-
-static sint d_off_x_1[] =
-{ -1, 0, 1, -1, 1, -1, 0, 1, 0 };
+static POSITION d_off_y_0[] = { 0 };
+static POSITION d_off_x_0[] = { 0 };
+static POSITION d_off_y_1[] = { -1, -1, -1, 0, 0, 1, 1, 1, 0 };
+static POSITION d_off_x_1[] = { -1, 0, 1, -1, 1, -1, 0, 1, 0 };
-static sint d_off_y_2[] =
-{ -1, -1, -2, -2, -2, 0, 0, 1, 1, 2, 2, 2, 0 };
+static POSITION d_off_y_2[] = { -1, -1, -2, -2, -2, 0, 0, 1, 1, 2, 2, 2, 0 };
+static POSITION d_off_x_2[] = { -2, 2, -1, 0, 1, -2, 2, -2, 2, -1, 0, 1, 0 };
-static sint d_off_x_2[] =
-{ -2, 2, -1, 0, 1, -2, 2, -2, 2, -1, 0, 1, 0 };
+static POSITION d_off_y_3[] = { -1, -1, -2, -2, -3, -3, -3, 0, 0, 1, 1, 2, 2, 3, 3, 3, 0 };
+static POSITION d_off_x_3[] = { -3, 3, -2, 2, -1, 0, 1, -3, 3, -3, 3, -2, 2, -1, 0, 1, 0 };
+static POSITION d_off_y_4[] = { -1, -1, -2, -2, -3, -3, -3, -3, -4, -4, -4, 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 0 };
+static POSITION d_off_x_4[] = { -4, 4, -3, 3, -2, -3, 2, 3, -1, 0, 1, -4, 4, -4, 4, -3, 3, -2, -3, 2, 3, -1, 0, 1, 0 };
-static sint d_off_y_3[] =
-{ -1, -1, -2, -2, -3, -3, -3, 0, 0, 1, 1, 2, 2,
- 3, 3, 3, 0 };
-static sint d_off_x_3[] =
-{ -3, 3, -2, 2, -1, 0, 1, -3, 3, -3, 3, -2, 2,
- -1, 0, 1, 0 };
-
-
-static sint d_off_y_4[] =
-{ -1, -1, -2, -2, -3, -3, -3, -3, -4, -4, -4, 0,
- 0, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 0 };
-
-static sint d_off_x_4[] =
-{ -4, 4, -3, 3, -2, -3, 2, 3, -1, 0, 1, -4, 4,
- -4, 4, -3, 3, -2, -3, 2, 3, -1, 0, 1, 0 };
-
-
-static sint d_off_y_5[] =
+static POSITION d_off_y_5[] =
{ -1, -1, -2, -2, -3, -3, -4, -4, -4, -4, -5, -5,
-5, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5,
5, 0 };
-static sint d_off_x_5[] =
+static POSITION d_off_x_5[] =
{ -5, 5, -4, 4, -4, 4, -2, -3, 2, 3, -1, 0, 1,
-5, 5, -5, 5, -4, 4, -4, 4, -2, -3, 2, 3, -1,
0, 1, 0 };
-static sint d_off_y_6[] =
+static POSITION d_off_y_6[] =
{ -1, -1, -2, -2, -3, -3, -4, -4, -5, -5, -5, -5,
-6, -6, -6, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5,
5, 5, 6, 6, 6, 0 };
-static sint d_off_x_6[] =
+static POSITION d_off_x_6[] =
{ -6, 6, -5, 5, -5, 5, -4, 4, -2, -3, 2, 3, -1,
0, 1, -6, 6, -6, 6, -5, 5, -5, 5, -4, 4, -2,
-3, 2, 3, -1, 0, 1, 0 };
-static sint d_off_y_7[] =
+static POSITION d_off_y_7[] =
{ -1, -1, -2, -2, -3, -3, -4, -4, -5, -5, -5, -5,
-6, -6, -6, -6, -7, -7, -7, 0, 0, 1, 1, 2, 2, 3,
3, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 0 };
-static sint d_off_x_7[] =
+static POSITION d_off_x_7[] =
{ -7, 7, -6, 6, -6, 6, -5, 5, -4, -5, 4, 5, -2,
-3, 2, 3, -1, 0, 1, -7, 7, -7, 7, -6, 6, -6,
6, -5, 5, -4, -5, 4, 5, -2, -3, 2, 3, -1, 0,
1, 0 };
-static sint d_off_y_8[] =
+static POSITION d_off_y_8[] =
{ -1, -1, -2, -2, -3, -3, -4, -4, -5, -5, -6, -6,
-6, -6, -7, -7, -7, -7, -8, -8, -8, 0, 0, 1, 1,
2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
8, 8, 8, 0 };
-static sint d_off_x_8[] =
+static POSITION d_off_x_8[] =
{ -8, 8, -7, 7, -7, 7, -6, 6, -6, 6, -4, -5, 4,
5, -2, -3, 2, 3, -1, 0, 1, -8, 8, -8, 8, -7,
7, -7, 7, -6, 6, -6, 6, -4, -5, 4, 5, -2, -3,
2, 3, -1, 0, 1, 0 };
-static sint d_off_y_9[] =
+static POSITION d_off_y_9[] =
{ -1, -1, -2, -2, -3, -3, -4, -4, -5, -5, -6, -6,
-7, -7, -7, -7, -8, -8, -8, -8, -9, -9, -9, 0,
0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7,
7, 8, 8, 8, 8, 9, 9, 9, 0 };
-static sint d_off_x_9[] =
+static POSITION d_off_x_9[] =
{ -9, 9, -8, 8, -8, 8, -7, 7, -7, 7, -6, 6, -4,
-5, 4, 5, -2, -3, 2, 3, -1, 0, 1, -9, 9, -9,
9, -8, 8, -8, 8, -7, 7, -7, 7, -6, 6, -4, -5,
4, 5, -2, -3, 2, 3, -1, 0, 1, 0 };
-static sint *dist_offsets_y[10] =
+static POSITION *dist_offsets_y[10] =
{
d_off_y_0, d_off_y_1, d_off_y_2, d_off_y_3, d_off_y_4,
d_off_y_5, d_off_y_6, d_off_y_7, d_off_y_8, d_off_y_9
};
-static sint *dist_offsets_x[10] =
+static POSITION *dist_offsets_x[10] =
{
d_off_x_0, d_off_x_1, d_off_x_2, d_off_x_3, d_off_x_4,
d_off_x_5, d_off_x_6, d_off_x_7, d_off_x_8, d_off_x_9
POSITION y, x, dy, dx, d, dis, i;
POSITION gy = 0, gx = 0, gdis = 0;
- sint *y_offsets;
- sint *x_offsets;
+ POSITION *y_offsets;
+ POSITION *x_offsets;
cave_type *c_ptr;
POSITION y, x, dy, dx, d, dis, i;
POSITION gy = 0, gx = 0, gdis = 999;
- sint *y_offsets, *x_offsets;
+ POSITION *y_offsets, *x_offsets;
/* Start with adjacent locations, spread further */
for (d = 1; d < 10; d++)
* @param mm 移動方向を返す方向IDの参照ポインタ
* @return 有効方向があった場合TRUEを返す
*/
-static bool get_moves(MONSTER_IDX m_idx, int *mm)
+static bool get_moves(MONSTER_IDX m_idx, DIRECTION *mm)
{
monster_type *m_ptr = &m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
ARMOUR_CLASS ac;
DEPTH rlev;
int pt;
- char m_name[80], t_name[80];
+ GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
char temp[MAX_NLEN];
bool blinked;
- bool explode = FALSE, touched = FALSE, fear = FALSE;
- int y_saver = t_ptr->fy;
- int x_saver = t_ptr->fx;
+ bool explode = FALSE, touched = FALSE, fear = FALSE, dead = FALSE;
+ POSITION y_saver = t_ptr->fy;
+ POSITION x_saver = t_ptr->fx;
int effect_type;
bool see_m = is_seen(m_ptr);
/* Extract the effective monster level */
rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
- /* Get the monster name (or "it") */
monster_desc(m_name, m_ptr, 0);
-
- /* Get the monster name (or "it") */
monster_desc(t_name, t_ptr, 0);
/* Assume no blink */
mon_fight = TRUE;
}
- if (p_ptr->riding && (m_idx == p_ptr->riding)) disturb(1, 1);
+ if (p_ptr->riding && (m_idx == p_ptr->riding)) disturb(TRUE, TRUE);
/* Scan through all four blows */
for (ap_cnt = 0; ap_cnt < 4; ap_cnt++)
HIT_POINT power = 0;
HIT_POINT damage = 0;
- cptr act = NULL;
+ concptr act = NULL;
/* Extract the attack infomation */
int effect = r_ptr->blow[ap_cnt].effect;
/* Monster hits */
if (!effect || check_hit2(power, rlev, ac, MON_STUNNED(m_ptr)))
{
- /* Wake it up */
(void)set_monster_csleep(t_idx, 0);
if (t_ptr->ml)
case RBM_EXPLODE:
{
- if (see_either) disturb(1, 1);
+ if (see_either) disturb(TRUE, TRUE);
act = _("爆発した。", "explodes.");
explode = TRUE;
touched = FALSE;
break;
case BLOW_EFFECT_TYPE_HEAL:
- if ((monster_living(tr_ptr)) && (damage > 2))
+ if ((monster_living(m_idx)) && (damage > 2))
{
bool did_heal = FALSE;
case RBM_ENGULF:
case RBM_CHARGE:
{
- /* Wake it up */
(void)set_monster_csleep(t_idx, 0);
/* Visible monsters */
if (see_m)
{
#ifdef JP
- msg_format("%sは%^sの攻撃をかわした。", t_name,m_name);
+ msg_format("%sは%^sの攻撃をかわした。", t_name, m_name);
#else
msg_format("%^s misses %s.", m_name, t_name);
#endif
/* Cancel Invulnerability */
(void)set_monster_invulner(m_idx, 0, FALSE);
- mon_take_hit_mon(m_idx, m_ptr->hp + 1, &fear, _("は爆発して粉々になった。", " explodes into tiny shreds."), m_idx);
+ mon_take_hit_mon(m_idx, m_ptr->hp + 1, &dead, &fear, _("は爆発して粉々になった。", " explodes into tiny shreds."), m_idx);
blinked = FALSE;
}
static bool check_hp_for_feat_destruction(feature_type *f_ptr, monster_type *m_ptr)
{
return !have_flag(f_ptr->flags, FF_GLASS) ||
- (r_info[m_ptr->r_idx].flags2 & RF2_STUPID) ||
- (m_ptr->hp >= MAX(m_ptr->maxhp / 3, 200));
+ (r_info[m_ptr->r_idx].flags2 & RF2_STUPID) ||
+ (m_ptr->hp >= MAX(m_ptr->maxhp / 3, 200));
}
* fixate on opening a door even if they cannot open it. Actually,\n
* the same thing happens to normal monsters when they hit a door\n
*\n
- * XXX XXX XXX In addition, monsters which *cannot* open or bash\n
+ * In addition, monsters which *cannot* open or bash\n
* down a door will still stand there trying to open it...\n
*\n
* XXX Technically, need to check for monster in the way\n
monster_race *r_ptr = &r_info[m_ptr->r_idx];
monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
- int i, d;
- POSITION oy, ox, ny, nx;
+ int i, d;
+ POSITION oy, ox, ny, nx;
- int mm[8];
+ DIRECTION mm[8];
cave_type *c_ptr;
feature_type *f_ptr;
bool can_cross;
bool aware = TRUE;
- bool fear;
-
- bool is_riding_mon = (m_idx == p_ptr->riding);
-
- bool see_m = is_seen(m_ptr);
+ bool fear, dead;
+ bool is_riding_mon = (m_idx == p_ptr->riding);
+ bool see_m = is_seen(m_ptr);
if (is_riding_mon && !(r_ptr->flags7 & RF7_RIDING))
{
#ifdef JP
msg_print("地面に落とされた。");
#else
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, &m_list[p_ptr->riding], 0);
msg_format("You have fallen from %s.", m_name);
#endif
int tmp = p_ptr->lev*6+(p_ptr->skill_stl+10)*4;
if (p_ptr->monlite) tmp /= 3;
if (p_ptr->cursed & TRC_AGGRAVATE) tmp /= 2;
- if (r_ptr->level > (p_ptr->lev*p_ptr->lev/20+10)) tmp /= 3;
+ if (r_ptr->level > (p_ptr->lev * p_ptr->lev / 20 + 10)) tmp /= 3;
/* Low-level monsters will find it difficult to locate the player. */
if (randint0(tmp) > (r_ptr->level+20)) aware = FALSE;
}
if (see_m)
{
- char m_name[80];
-
- /* Acquire the monster name */
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, m_ptr, 0);
msg_format(_("%sは消え去った!", "%^s disappears!"), m_name);
}
if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname)
{
- char m_name[80];
-
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_LOSE_PARENT, m_name);
}
- /* Delete the monster */
delete_monster_idx(m_idx);
return;
{
bool sad = FALSE;
- if (is_pet(m_ptr) && !(m_ptr->ml))
- sad = TRUE;
+ if (is_pet(m_ptr) && !(m_ptr->ml)) sad = TRUE;
if (see_m)
{
- char m_name[80];
-
- /* Acquire the monster name */
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, m_ptr, 0);
msg_format(_("%sは消え去った!", "%^s disappears!"), m_name);
/* Generate treasure, etc */
monster_death(m_idx, FALSE);
- /* Delete the monster */
delete_monster_idx(m_idx);
-
if (sad)
{
msg_print(_("少しの間悲しい気分になった。", "You feel sad for a moment."));
if (m_ptr->r_idx == MON_SHURYUUDAN)
{
- mon_take_hit_mon(m_idx, 1, &fear, _("は爆発して粉々になった。", " explodes into tiny shreds."), m_idx);
+ mon_take_hit_mon(m_idx, 1, &dead, &fear, _("は爆発して粉々になった。", " explodes into tiny shreds."), m_idx);
+ if(dead) return;
}
if ((is_pet(m_ptr) || is_friendly(m_ptr)) && ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) && !p_ptr->inside_battle)
if (m_ptr->hp < m_ptr->maxhp/3)
{
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, m_ptr, 0);
if (is_riding_mon && riding_pinch < 2)
msg_format(_("%sは傷の痛さの余りあなたの束縛から逃れようとしている。",
"%^s seems to be in so much pain, and trying to escape from your restriction."), m_name);
riding_pinch++;
- disturb(1, 1);
+ disturb(TRUE, TRUE);
}
else
{
/* Handle non-aggravation - Still sleeping */
if (!(p_ptr->cursed & TRC_AGGRAVATE)) return;
- /* Handle aggravation */
-
/* Reset sleep counter */
(void)set_monster_csleep(m_idx, 0);
/* Notice the "waking up" */
if (m_ptr->ml)
{
- char m_name[80];
-
- /* Acquire the monster name */
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, m_ptr, 0);
-
- /* Dump a message */
msg_format(_("%^sが目を覚ました。", "%^s wakes up."), m_name);
}
gets_angry = TRUE;
/* Paranoia... no pet uniques outside wizard mode -- TY */
- if (is_pet(m_ptr) &&
- ((((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) &&
+ if (is_pet(m_ptr) && ((((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) &&
monster_has_hostile_align(NULL, 10, -10, r_ptr))
|| (r_ptr->flagsr & RFR_RES_ALL)))
{
{
if (is_pet(m_ptr) || see_m)
{
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, m_ptr, is_pet(m_ptr) ? MD_ASSUME_VISIBLE : 0);
msg_format(_("%^sは突然敵にまわった!", "%^s suddenly becomes hostile!"), m_name);
}
oy = m_ptr->fy;
ox = m_ptr->fx;
-
/* Attempt to "multiply" if able and allowed */
if ((r_ptr->flags2 & RF2_MULTIPLY) && (num_repro < MAX_REPRO))
{
- int k, y, x;
+ int k;
+ POSITION y, x;
/* Count the adjacent monsters */
for (k = 0, y = oy - 1; y <= oy + 1; y++)
{
/* Ignore locations off of edge */
if (!in_bounds2(y, x)) continue;
-
if (cave[y][x].m_idx) k++;
}
}
}
}
-
if (r_ptr->a_ability_flags2 & RF6_SPECIAL)
{
/* Hack -- Ohmu scatters molds! */
{
if (r_ptr->freq_spell && (randint1(100) <= r_ptr->freq_spell))
{
- int k, count = 0;
- int rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
- u32b p_mode = is_pet(m_ptr) ? PM_FORCE_PET : 0L;
+ int k, count = 0;
+ DEPTH rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
+ BIT_FLAGS p_mode = is_pet(m_ptr) ? PM_FORCE_PET : 0L;
- for (k = 0; k < 6; k++)
+ for (k = 0; k < A_MAX; k++)
{
- if (summon_specific(m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_MOLD, (PM_ALLOW_GROUP | p_mode)))
+ if (summon_specific(m_idx, m_ptr->fy, m_ptr->fx, rlev, SUMMON_MOLD, (PM_ALLOW_GROUP | p_mode), '\0'))
{
if (m_list[hack_m_idx_ii].ml) count++;
}
}
}
-
if (!p_ptr->inside_battle)
{
/* Hack! "Cyber" monster makes noise... */
player_has_los_bold(oy, ox) &&
projectable(oy, ox, p_ptr->y, p_ptr->x))
{
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
char monmessage[1024];
- cptr filename;
+ concptr filename;
/* Acquire the monster name/poss */
if (m_ptr->ml)
/* Give priority to counter attack? */
if (m_ptr->target_y)
{
- int t_m_idx = cave[m_ptr->target_y][m_ptr->target_x].m_idx;
+ MONSTER_IDX t_m_idx = cave[m_ptr->target_y][m_ptr->target_x].m_idx;
/* The monster must be an enemy, and projectable */
- if (t_m_idx &&
- are_enemies(m_ptr, &m_list[t_m_idx]) &&
+ if (t_m_idx && are_enemies(m_ptr, &m_list[t_m_idx]) &&
projectable(m_ptr->fy, m_ptr->fx, m_ptr->target_y, m_ptr->target_x))
{
counterattack = TRUE;
else if (is_pet(m_ptr))
{
/* Are we trying to avoid the player? */
- bool avoid = ((p_ptr->pet_follow_distance < 0) &&
- (m_ptr->cdis <= (0 - p_ptr->pet_follow_distance)));
+ bool avoid = ((p_ptr->pet_follow_distance < 0) && (m_ptr->cdis <= (0 - p_ptr->pet_follow_distance)));
/* Do we want to find the player? */
bool lonely = (!avoid && (m_ptr->cdis > p_ptr->pet_follow_distance));
did_pass_wall = FALSE;
did_kill_wall = FALSE;
-
/* Take a zero-terminated array of "directions" */
for (i = 0; mm[i]; i++)
{
/* Locked doors (not jammed) */
else
{
- /* Try to unlock it XXX XXX XXX */
+ /* Try to unlock it */
if (randint0(m_ptr->hp / 10) > f_ptr->power)
{
/* Unlock the door */
if (may_bash && (r_ptr->flags2 & RF2_BASH_DOOR) && have_flag(f_ptr->flags, FF_BASH) &&
(!is_pet(m_ptr) || (p_ptr->pet_extra_flags & PF_OPEN_DOORS)))
{
- /* Attempt to Bash XXX XXX XXX */
+ /* Attempt to Bash */
if (check_hp_for_feat_destruction(f_ptr, m_ptr) && (randint0(m_ptr->hp / 10) > f_ptr->power))
{
if (have_flag(f_ptr->flags, FF_GLASS))
msg_print(_("ドアを叩き開ける音がした!", "You hear a door burst open!"));
/* Disturb (sometimes) */
- if (disturb_minor) disturb(0, 0);
+ if (disturb_minor) disturb(FALSE, FALSE);
/* The door was bashed open */
did_bash_door = TRUE;
/* Allow movement */
do_move = TRUE;
- /* Notice */
note_spot(ny, nx);
}
}
/* Wake up the moved monster */
(void)set_monster_csleep(c_ptr->m_idx, 0);
- /* XXX XXX XXX Message */
+ /* Message */
}
}
/* Note changes to viewable region */
do_view = TRUE;
-
do_turn = TRUE;
}
y_ptr->fx = ox;
/* Update the old monster */
- update_mon(c_ptr->m_idx, TRUE);
+ update_monster(c_ptr->m_idx, TRUE);
}
/* Hack -- Update the new location */
- c_ptr->m_idx = (s16b)m_idx;
+ c_ptr->m_idx = m_idx;
/* Move the monster */
m_ptr->fy = ny;
m_ptr->fx = nx;
+ update_monster(m_idx, TRUE);
- /* Update the monster */
- update_mon(m_idx, TRUE);
-
- /* Redraw the old grid */
lite_spot(oy, ox);
-
- /* Redraw the new grid */
lite_spot(ny, nx);
}
else
(disturb_near && (m_ptr->mflag & MFLAG_VIEW) && projectable(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx)) ||
(disturb_high && ap_r_ptr->r_tkills && ap_r_ptr->level >= p_ptr->lev)))
{
- /* Disturb */
if (is_hostile(m_ptr))
- disturb(0, 1);
+ disturb(FALSE, TRUE);
}
/* Take or Kill objects on the floor */
for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
{
BIT_FLAGS flgs[TR_FLAG_SIZE], flg2 = 0L, flg3 = 0L, flgr = 0L;
- char m_name[80], o_name[MAX_NLEN];
-
- /* Acquire object */
+ GAME_TEXT m_name[MAX_NLEN], o_name[MAX_NLEN];
object_type *o_ptr = &o_list[this_o_idx];
/* Acquire next object */
/* Acquire the object name */
object_desc(o_name, o_ptr, 0);
-
- /* Acquire the monster name */
monster_desc(m_name, m_ptr, MD_INDEF_HIDDEN);
/* React to objects that hurt the monster */
/* Only give a message for "take_item" */
if (do_take && (r_ptr->flags2 & RF2_STUPID))
{
- /* Take note */
did_take_item = TRUE;
/* Describe observable situations */
if (m_ptr->ml && player_can_see_bold(ny, nx))
{
- /* Dump a message */
msg_format(_("%^sは%sを拾おうとしたが、だめだった。", "%^s tries to pick up %s, but fails."), m_name, o_name);
}
}
/* Pick up the item */
else if (do_take)
{
- /* Take note */
did_take_item = TRUE;
/* Describe observable situations */
if (player_can_see_bold(ny, nx))
{
- /* Dump a message */
msg_format(_("%^sが%sを拾った。", "%^s picks up %s."), m_name, o_name);
}
o_ptr->iy = o_ptr->ix = 0;
/* Memorize monster */
- o_ptr->held_m_idx = (s16b)m_idx;
+ o_ptr->held_m_idx = m_idx;
/* Build a stack */
o_ptr->next_o_idx = m_ptr->hold_o_idx;
/* Destroy the item if not a pet */
else if (!is_pet(m_ptr))
{
- /* Take note */
did_kill_item = TRUE;
/* Describe observable situations */
if (player_has_los_bold(ny, nx))
{
- /* Dump a message */
msg_format(_("%^sが%sを破壊した。", "%^s destroys %s."), m_name, o_name);
}
- /* Delete the object */
delete_object_idx(this_o_idx);
}
}
/* Notice changes in view */
if (do_view)
{
- /* Update some things */
p_ptr->update |= (PU_FLOW);
-
p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
}
/* Message if seen */
if (see_m)
{
- char m_name[80];
-
- /* Acquire the monster name */
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, m_ptr, 0);
-
- /* Dump a message */
msg_format(_("%^sは戦いを決意した!", "%^s turns to fight!"), m_name);
}
if (m_ptr->ml) chg_virtue(V_COMPASSION, -1);
- /* XXX XXX XXX Actually do something now (?) */
+ /* Actually do something now (?) */
}
}
monster_type *m_ptr;
monster_race *r_ptr;
- int old_monster_race_idx;
+ MONRACE_IDX old_monster_race_idx;
- u32b old_r_flags1 = 0L;
- u32b old_r_flags2 = 0L;
- u32b old_r_flags3 = 0L;
- u32b old_r_flags4 = 0L;
- u32b old_r_flags5 = 0L;
- u32b old_r_flags6 = 0L;
- u32b old_r_flagsr = 0L;
+ BIT_FLAGS old_r_flags1 = 0L;
+ BIT_FLAGS old_r_flags2 = 0L;
+ BIT_FLAGS old_r_flags3 = 0L;
+ BIT_FLAGS old_r_flags4 = 0L;
+ BIT_FLAGS old_r_flags5 = 0L;
+ BIT_FLAGS old_r_flags6 = 0L;
+ BIT_FLAGS old_r_flagsr = 0L;
- byte old_r_blows0 = 0;
- byte old_r_blows1 = 0;
- byte old_r_blows2 = 0;
- byte old_r_blows3 = 0;
+ byte old_r_blows0 = 0;
+ byte old_r_blows1 = 0;
+ byte old_r_blows2 = 0;
+ byte old_r_blows3 = 0;
- byte old_r_cast_spell = 0;
+ byte old_r_cast_spell = 0;
- int speed;
+ SPEED speed;
/* Clear monster fighting indicator */
mon_fight = FALSE;