info[i++] = buf[1];
for (v_nr = 0; v_nr < 8; v_nr++)
{
- char v_name [20];
+ char vir_name [20];
char vir_desc[80];
int tester = p_ptr->virtues[v_nr];
- strcpy(v_name, virtue[(p_ptr->vir_types[v_nr])-1]);
+ strcpy(vir_name, virtue[(p_ptr->vir_types[v_nr])-1]);
- sprintf(vir_desc, _("おっと。%sの情報なし。", "Oops. No info about %s."), v_name);
+ sprintf(vir_desc, _("おっと。%sの情報なし。", "Oops. No info about %s."), vir_name);
if (tester < -100)
sprintf(vir_desc, _("[%s]の対極 (%d)", "You are the polar opposite of %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < -80)
sprintf(vir_desc, _("[%s]の大敵 (%d)", "You are an arch-enemy of %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < -60)
sprintf(vir_desc, _("[%s]の強敵 (%d)", "You are a bitter enemy of %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < -40)
sprintf(vir_desc, _("[%s]の敵 (%d)", "You are an enemy of %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < -20)
sprintf(vir_desc, _("[%s]の罪者 (%d)", "You have sinned against %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < 0)
sprintf(vir_desc, _("[%s]の迷道者 (%d)", "You have strayed from the path of %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester == 0)
sprintf(vir_desc, _("[%s]の中立者 (%d)", "You are neutral to %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < 20)
sprintf(vir_desc, _("[%s]の小徳者 (%d)", "You are somewhat virtuous in %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < 40)
sprintf(vir_desc, _("[%s]の中徳者 (%d)", "You are virtuous in %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < 60)
sprintf(vir_desc, _("[%s]の高徳者 (%d)", "You are very virtuous in %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < 80)
sprintf(vir_desc, _("[%s]の覇者 (%d)", "You are a champion of %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else if (tester < 100)
sprintf(vir_desc, _("[%s]の偉大な覇者 (%d)", "You are a great champion of %s (%d)."),
- v_name, tester);
+ vir_name, tester);
else
sprintf(vir_desc, _("[%s]の具現者 (%d)", "You are the living embodiment of %s (%d)."),
- v_name, tester);
+ vir_name, tester);
strcpy(v_string[v_nr], vir_desc);
* @param known 地形から危険フラグを外すならTRUE
* @return 効力があった場合TRUEを返す
*/
-static bool detect_feat_flag(int range, int flag, bool known)
+static bool detect_feat_flag(POSITION range, int flag, bool known)
{
int x, y;
bool detect = FALSE;
{
for (x = 1; x <= cur_wid - 1; x++)
{
- int dist = distance(py, px, y, x);
+ int dist = distance(p_ptr->y, p_ptr->x, y, x);
if (dist > range) continue;
/* Access the grid */
* @param known 感知外範囲を超える警告フラグを立てる場合TRUEを返す
* @return 効力があった場合TRUEを返す
*/
-bool detect_traps(int range, bool known)
+bool detect_traps(POSITION range, bool known)
{
bool detect = detect_feat_flag(range, FF_TRAP, known);
if (known) p_ptr->dtrap = TRUE;
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 0) detect = FALSE;
/* Describe */
if (detect)
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_doors(int range)
+bool detect_doors(POSITION range)
{
bool detect = detect_feat_flag(range, FF_DOOR, TRUE);
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 0) detect = FALSE;
/* Describe */
if (detect)
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_stairs(int range)
+bool detect_stairs(POSITION range)
{
bool detect = detect_feat_flag(range, FF_STAIRS, TRUE);
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 0) detect = FALSE;
/* Describe */
if (detect)
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_treasure(int range)
+bool detect_treasure(POSITION range)
{
bool detect = detect_feat_flag(range, FF_HAS_GOLD, TRUE);
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 6) detect = FALSE;
/* Describe */
if (detect)
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_objects_gold(int range)
+bool detect_objects_gold(POSITION range)
{
int i, y, x;
- int range2 = range;
+ POSITION range2 = range;
bool detect = FALSE;
x = o_ptr->ix;
/* Only detect nearby objects */
- if (distance(py, px, y, x) > range2) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range2) continue;
/* Detect "gold" objects */
if (o_ptr->tval == TV_GOLD)
}
}
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 6) detect = FALSE;
/* Describe */
if (detect)
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_objects_normal(int range)
+bool detect_objects_normal(POSITION range)
{
int i, y, x;
- int range2 = range;
+ POSITION range2 = range;
bool detect = FALSE;
x = o_ptr->ix;
/* Only detect nearby objects */
- if (distance(py, px, y, x) > range2) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range2) continue;
/* Detect "real" objects */
if (o_ptr->tval != TV_GOLD)
}
}
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 6) detect = FALSE;
/* Describe */
if (detect)
* It can probably be argued that this function is now too powerful.
* </pre>
*/
-bool detect_objects_magic(int range)
+bool detect_objects_magic(POSITION range)
{
int i, y, x, tv;
x = o_ptr->ix;
/* Only detect nearby objects */
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
/* Examine the tval */
tv = o_ptr->tval;
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_monsters_normal(int range)
+bool detect_monsters_normal(POSITION range)
{
- int i, y, x;
+ MONSTER_IDX i;
+ POSITION y, x;
bool flag = FALSE;
x = m_ptr->fx;
/* Only detect nearby monsters */
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
/* Detect all non-invisible monsters */
if (!(r_ptr->flags2 & RF2_INVISIBLE) || p_ptr->see_inv)
}
}
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE;
/* Describe */
if (flag)
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_monsters_invis(int range)
+bool detect_monsters_invis(POSITION range)
{
- int i, y, x;
+ MONSTER_IDX i;
+ POSITION y, x;
bool flag = FALSE;
if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
x = m_ptr->fx;
/* Only detect nearby monsters */
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
/* Detect invisible monsters */
if (r_ptr->flags2 & RF2_INVISIBLE)
}
}
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE;
/* Describe */
if (flag)
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_monsters_evil(int range)
+bool detect_monsters_evil(POSITION range)
{
- int i, y, x;
+ MONSTER_IDX i;
+ POSITION y, x;
bool flag = FALSE;
if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
x = m_ptr->fx;
/* Only detect nearby monsters */
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
/* Detect evil monsters */
if (r_ptr->flags3 & RF3_EVIL)
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_monsters_nonliving(int range)
+bool detect_monsters_nonliving(POSITION range)
{
- int i, y, x;
- bool flag = FALSE;
+ MONSTER_IDX i;
+ POSITION y, x;
+ bool flag = FALSE;
if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
x = m_ptr->fx;
/* Only detect nearby monsters */
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
/* Detect non-living monsters */
if (!monster_living(r_ptr))
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_monsters_mind(int range)
+bool detect_monsters_mind(POSITION range)
{
- int i, y, x;
+ MONSTER_IDX i;
+ POSITION y, x;
bool flag = FALSE;
if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
x = m_ptr->fx;
/* Only detect nearby monsters */
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
/* Detect non-living monsters */
if (!(r_ptr->flags2 & RF2_EMPTY_MIND))
* @param Match 対応シンボルの混じったモンスター文字列(複数指定化)
* @return 効力があった場合TRUEを返す
*/
-bool detect_monsters_string(int range, cptr Match)
+bool detect_monsters_string(POSITION range, cptr Match)
{
- int i, y, x;
+ MONSTER_IDX i;
+ POSITION y, x;
bool flag = FALSE;
if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
x = m_ptr->fx;
/* Only detect nearby monsters */
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
/* Detect monsters with the same symbol */
if (my_strchr(Match, r_ptr->d_char))
}
}
- if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE;
+ if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE;
/* Describe */
if (flag)
* @param match_flag 感知フラグ
* @return 効力があった場合TRUEを返す
*/
-bool detect_monsters_xxx(int range, u32b match_flag)
+bool detect_monsters_xxx(POSITION range, u32b match_flag)
{
- int i, y, x;
+ MONSTER_IDX i;
+ POSITION y, x;
bool flag = FALSE;
cptr desc_monsters = _("変なモンスター", "weird monsters");
x = m_ptr->fx;
/* Only detect nearby monsters */
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
/* Detect evil monsters */
if (r_ptr->flags3 & (match_flag))
* @param range 効果範囲
* @return 効力があった場合TRUEを返す
*/
-bool detect_all(int range)
+bool detect_all(POSITION range)
{
bool detect = FALSE;
* this is done in two passes. -- JDL
* </pre>
*/
-bool project_hack(int typ, int dam)
+bool project_hack(int typ, HIT_POINT dam)
{
int i, x, y;
int flg = PROJECT_JUMP | PROJECT_KILL | PROJECT_HIDE;
x = m_ptr->fx;
/* Require line of sight */
- if (!player_has_los_bold(y, x) || !projectable(py, px, y, x)) continue;
+ if (!player_has_los_bold(y, x) || !projectable(p_ptr->y, p_ptr->x, y, x)) continue;
/* Mark the monster */
m_ptr->mflag |= (MFLAG_TEMP);
* @brief 視界内のアンデッド・モンスターにダメージを与える処理 / Dispel undead monsters
* @return 効力があった場合TRUEを返す
*/
-bool dispel_undead(int dam)
+bool dispel_undead(HIT_POINT dam)
{
bool tester = (project_hack(GF_DISP_UNDEAD, dam));
if (tester)
* @brief 視界内の邪悪なモンスターにダメージを与える処理 / Dispel evil monsters
* @return 効力があった場合TRUEを返す
*/
-bool dispel_evil(int dam)
+bool dispel_evil(HIT_POINT dam)
{
return (project_hack(GF_DISP_EVIL, dam));
}
* @brief 視界内の善良なモンスターにダメージを与える処理 / Dispel good monsters
* @return 効力があった場合TRUEを返す
*/
-bool dispel_good(int dam)
+bool dispel_good(HIT_POINT dam)
{
return (project_hack(GF_DISP_GOOD, dam));
}
* @brief 視界内のあらゆるモンスターにダメージを与える処理 / Dispel all monsters
* @return 効力があった場合TRUEを返す
*/
-bool dispel_monsters(int dam)
+bool dispel_monsters(HIT_POINT dam)
{
return (project_hack(GF_DISP_ALL, dam));
}
* @brief 視界内の生命のあるモンスターにダメージを与える処理 / Dispel 'living' monsters
* @return 効力があった場合TRUEを返す
*/
-bool dispel_living(int dam)
+bool dispel_living(HIT_POINT dam)
{
return (project_hack(GF_DISP_LIVING, dam));
}
* @brief 視界内の悪魔系モンスターにダメージを与える処理 / Dispel 'living' monsters
* @return 効力があった場合TRUEを返す
*/
-bool dispel_demons(int dam)
+bool dispel_demons(HIT_POINT dam)
{
return (project_hack(GF_DISP_DEMON, dam));
}
* @param who 怒らせる原因を起こしたモンスター(0ならばプレイヤー)
* @return なし
*/
-void aggravate_monsters(int who)
+void aggravate_monsters(MONSTER_IDX who)
{
- int i;
+ MONSTER_IDX i;
bool sleep = FALSE;
bool speed = FALSE;
* @param spell_name 抹殺効果を起こした魔法の名前
* @return 効力があった場合TRUEを返す
*/
-bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spell_name)
+bool genocide_aux(MONSTER_IDX m_idx, int power, bool player_cast, int dam_side, cptr spell_name)
{
int msec = delay_factor * delay_factor * delay_factor;
monster_type *m_ptr = &m_list[m_idx];
}
/* Visual feedback */
- move_cursor_relative(py, px);
+ move_cursor_relative(p_ptr->y, p_ptr->x);
/* Redraw */
p_ptr->redraw |= (PR_HP);
*/
bool symbol_genocide(int power, bool player_cast)
{
- int i;
+ MONSTER_IDX i;
char typ;
bool result = FALSE;
*/
bool mass_genocide(int power, bool player_cast)
{
- int i;
+ MONSTER_IDX i;
bool result = FALSE;
/* Prevent mass genocide in quest levels */
*/
bool mass_genocide_undead(int power, bool player_cast)
{
- int i;
+ MONSTER_IDX i;
bool result = FALSE;
/* Prevent mass genocide in quest levels */
*/
bool probing(void)
{
- int i, speed;
- int cu, cv;
- bool probe = FALSE;
+ int i, speed;
+ bool_hack cu, cv;
+ bool probe = FALSE;
char buf[256];
cptr align;
#endif
/* Describe the monster */
-#ifdef JP
-sprintf(buf,"%s ... 属性:%s HP:%d/%d AC:%d 速度:%s%d 経験:", m_name, align, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
-#else
-sprintf(buf, "%s ... align:%s HP:%d/%d AC:%d speed:%s%d exp:", m_name, align, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
-#endif
+ sprintf(buf,_("%s ... 属性:%s HP:%d/%d AC:%d 速度:%s%d 経験:", "%s ... align:%s HP:%d/%d AC:%d speed:%s%d exp:"),
+ m_name, align, (int)m_ptr->hp, (int)m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed);
+
if (r_ptr->next_r_idx)
{
strcat(buf, format("%d/%d ", m_ptr->exp, r_ptr->next_exp));
/* Learn everything about this monster */
if (lore_do_probe(m_ptr->r_idx))
{
- char buf[80];
-
/* Get base name of monster */
strcpy(buf, (r_name + r_ptr->name));
if (p_ptr->special_defense & NINJA_S_STEALTH)
{
- if (cave[py][px].info & CAVE_GLOW) set_superstealth(FALSE);
+ if (cave[p_ptr->y][p_ptr->x].info & CAVE_GLOW) set_superstealth(FALSE);
}
}
* This has allowed massive simplification of the "monster" code.
* </pre>
*/
-bool earthquake_aux(int cy, int cx, int r, int m_idx)
+bool earthquake_aux(int cy, int cx, int r, MONSTER_IDX m_idx)
{
int i, t, y, x, yy, xx, dy, dx;
int damage = 0;
- int sn = 0, sy = 0, sx = 0;
+ int sn = 0;
+ POSITION sy = 0, sx = 0;
bool hurt = FALSE;
cave_type *c_ptr;
bool map[32][32];
for (i = 0; i < 8; i++)
{
/* Access the location */
- y = py + ddy_ddd[i];
- x = px + ddx_ddd[i];
+ y = p_ptr->y + ddy_ddd[i];
+ x = p_ptr->x + ddx_ddd[i];
/* Skip non-empty grids */
if (!cave_empty_bold(y, x)) continue;
}
/* Important -- no wall on player */
- map[16+py-cy][16+px-cx] = FALSE;
+ map[16+p_ptr->y-cy][16+p_ptr->x-cx] = FALSE;
/* Take some damage */
if (damage)
/* Hack -- Escape from the rock */
if (sn)
{
- int m_idx = cave[yy][xx].m_idx;
+ IDX m_idx_aux = cave[yy][xx].m_idx;
/* Update the old location */
cave[yy][xx].m_idx = 0;
/* Update the new location */
- cave[sy][sx].m_idx = m_idx;
+ cave[sy][sx].m_idx = m_idx_aux;
/* Move the monster */
m_ptr->fy = sy;
if (p_ptr->special_defense & NINJA_S_STEALTH)
{
- if (cave[py][px].info & CAVE_GLOW) set_superstealth(FALSE);
+ if (cave[p_ptr->y][p_ptr->x].info & CAVE_GLOW) set_superstealth(FALSE);
}
/* Success */
* @return 効力があった場合TRUEを返す
* @param cy 中心Y座標
* @param cx 中心X座標
+ * @param r 効果半径
*/
bool earthquake(int cy, int cx, int r)
{
*/
void discharge_minion(void)
{
- int i;
+ MONSTER_IDX i;
bool okay = TRUE;
for (i = 1; i < m_max; i++)
}
for (i = 1; i < m_max; i++)
{
- int dam;
+ HIT_POINT dam;
monster_type *m_ptr = &m_list[i];
monster_race *r_ptr;
if (!in_bounds2(y, x)) return;
/* Do not exceed the maximum spell range */
- if (distance(py, px, y, x) > MAX_RANGE) return;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > MAX_RANGE) return;
/* Verify this grid */
/*
/*!
* @brief 指定のマスが光を通すか(LOSフラグを持つか)を返す。 / Aux function -- see below
* @param y 指定Y座標
- * @param y 指定X座標
+ * @param x 指定X座標
* @return 光を通すならばtrueを返す。
*/
static bool cave_pass_lite_bold(int y, int x)
/*!
* @brief 部屋内にある一点の周囲がいくつ光を通すかをグローバル変数temp_nに返す / Aux function -- see below
* @param y 指定Y座標
- * @param y 指定X座標
+ * @param x 指定X座標
* @return なし
*/
static void cave_temp_lite_room_aux(int y, int x)
/*!
* @brief 指定のマスが光を通さず射線のみを通すかを返す。 / Aux function -- see below
* @param y 指定Y座標
- * @param y 指定X座標
+ * @param x 指定X座標
* @return 射線を通すならばtrueを返す。
*/
static bool cave_pass_dark_bold(int y, int x)
/*!
* @brief 部屋内にある一点の周囲がいくつ射線を通すかをグローバル変数temp_nに返す / Aux function -- see below
* @param y 指定Y座標
- * @param y 指定X座標
+ * @param x 指定X座標
* @return なし
*/
static void cave_temp_unlite_room_aux(int y, int x)
/*!
* @brief 指定された部屋内を照らす / Illuminate any room containing the given location.
- * @param y 指定Y座標
- * @param y 指定X座標
+ * @param y1 指定Y座標
+ * @param x1 指定X座標
* @return なし
*/
void lite_room(int y1, int x1)
if (p_ptr->special_defense & NINJA_S_STEALTH)
{
- if (cave[py][px].info & CAVE_GLOW) set_superstealth(FALSE);
+ if (cave[p_ptr->y][p_ptr->x].info & CAVE_GLOW) set_superstealth(FALSE);
}
}
/*!
* @brief 指定された部屋内を暗くする / Darken all rooms containing the given location
- * @param y 指定Y座標
- * @param y 指定X座標
+ * @param y1 指定Y座標
+ * @param x1 指定X座標
* @return なし
*/
void unlite_room(int y1, int x1)
/*!
* @brief プレイヤー位置を中心にLITE_WEAK属性を通じた照明処理を行う / Hack -- call light around the player Affect all monsters in the projection radius
- * @param y 指定Y座標
- * @param y 指定X座標
+ * @param dam 威力
+ * @param rad 効果半径
* @return 作用が実際にあった場合TRUEを返す
*/
-bool lite_area(int dam, int rad)
+bool lite_area(HIT_POINT dam, int rad)
{
- int flg = PROJECT_GRID | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_KILL;
if (d_info[dungeon_type].flags1 & DF1_DARKNESS)
{
}
/* Hook into the "project()" function */
- (void)project(0, rad, py, px, dam, GF_LITE_WEAK, flg, -1);
+ (void)project(0, rad, p_ptr->y, p_ptr->x, dam, GF_LITE_WEAK, flg, -1);
/* Lite up the room */
- lite_room(py, px);
+ lite_room(p_ptr->y, p_ptr->x);
/* Assume seen */
return (TRUE);
/*!
* @brief プレイヤー位置を中心にLITE_DARK属性を通じた消灯処理を行う / Hack -- call light around the player Affect all monsters in the projection radius
- * @param y 指定Y座標
- * @param y 指定X座標
+ * @param dam 威力
+ * @param rad 効果半径
* @return 作用が実際にあった場合TRUEを返す
*/
-bool unlite_area(int dam, int rad)
+bool unlite_area(HIT_POINT dam, int rad)
{
- int flg = PROJECT_GRID | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_KILL;
/* Hack -- Message */
if (!p_ptr->blind)
}
/* Hook into the "project()" function */
- (void)project(0, rad, py, px, dam, GF_DARK_WEAK, flg, -1);
+ (void)project(0, rad, p_ptr->y, p_ptr->x, dam, GF_DARK_WEAK, flg, -1);
/* Lite up the room */
- unlite_room(py, px);
+ unlite_room(p_ptr->y, p_ptr->x);
/* Assume seen */
return (TRUE);
* Affect grids, objects, and monsters
* </pre>
*/
-bool fire_ball(int typ, int dir, int dam, int rad)
+bool fire_ball(int typ, int dir, HIT_POINT dam, int rad)
{
int tx, ty;
- int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
if (typ == GF_CONTROL_LIVING) flg|= PROJECT_HIDE;
/* Use the given direction */
- tx = px + 99 * ddx[dir];
- ty = py + 99 * ddy[dir];
+ tx = p_ptr->x + 99 * ddx[dir];
+ ty = p_ptr->y + 99 * ddy[dir];
/* Hack -- Use an actual "target" */
if ((dir == 5) && target_okay())
* Affect grids, objects, and monsters
* </pre>
*/
-bool fire_rocket(int typ, int dir, int dam, int rad)
+bool fire_rocket(int typ, int dir, HIT_POINT dam, int rad)
{
int tx, ty;
- int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
/* Use the given direction */
- tx = px + 99 * ddx[dir];
- ty = py + 99 * ddy[dir];
+ tx = p_ptr->x + 99 * ddx[dir];
+ ty = p_ptr->y + 99 * ddy[dir];
/* Hack -- Use an actual "target" */
if ((dir == 5) && target_okay())
* Affect grids, objects, and monsters
* </pre>
*/
-bool fire_ball_hide(int typ, int dir, int dam, int rad)
+bool fire_ball_hide(int typ, int dir, HIT_POINT dam, int rad)
{
int tx, ty;
- int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_HIDE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_HIDE;
/* Use the given direction */
- tx = px + 99 * ddx[dir];
- ty = py + 99 * ddy[dir];
+ tx = p_ptr->x + 99 * ddx[dir];
+ ty = p_ptr->y + 99 * ddy[dir];
/* Hack -- Use an actual "target" */
if ((dir == 5) && target_okay())
* @brief メテオ系スペルの発動 / Cast a meteor spell
* @param who スぺル詠唱者のモンスターID(0=プレイヤー)
* @param typ 効果属性
- * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする)
* @param dam 威力
* @param rad 半径
+ * @param y 中心点Y座標
+ * @param x 中心点X座標
* @return 作用が実際にあった場合TRUEを返す
* @details
* <pre>
* player, or outside source, that starts out at an arbitrary location, and
* leaving no trail from the "caster" to the target. This function is
* especially useful for bombardments and similar. -LM-
- *
* Option to hurt the player.
* </pre>
*/
-bool fire_meteor(int who, int typ, int y, int x, int dam, int rad)
+bool fire_meteor(MONSTER_IDX who, EFFECT_ID typ, POSITION y, POSITION x, HIT_POINT dam, POSITION rad)
{
- int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
/* Analyze the "target" and the caster. */
return (project(who, rad, y, x, dam, typ, flg, -1));
/*!
* @brief ブラスト系スペルの発動 / Cast a blast spell
- * @param who スぺル詠唱者のモンスターID(0=プレイヤー)
* @param typ 効果属性
* @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする)
* @param dd 威力ダイス数
int ty, tx, y, x;
int i;
- int flg = PROJECT_FAST | PROJECT_THRU | PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID;
+ BIT_FLAGS flg = PROJECT_FAST | PROJECT_THRU | PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID;
/* Assume okay */
bool result = TRUE;
/* Use the given direction */
if (dir != 5)
{
- ly = ty = py + 20 * ddy[dir];
- lx = tx = px + 20 * ddx[dir];
+ ly = ty = p_ptr->y + 20 * ddy[dir];
+ lx = tx = p_ptr->x + 20 * ddx[dir];
}
/* Use an actual "target" */
tx = target_col;
ty = target_row;
- lx = 20 * (tx - px) + px;
- ly = 20 * (ty - py) + py;
+ lx = 20 * (tx - p_ptr->x) + p_ptr->x;
+ ly = 20 * (ty - p_ptr->y) + p_ptr->y;
}
- ld = distance(py, px, ly, lx);
+ ld = distance(p_ptr->y, p_ptr->x, ly, lx);
/* Blast */
for (i = 0; i < num; i++)
}
else
{
- tx = px + ddx[dir];
- ty = py + ddy[dir];
+ tx = p_ptr->x + ddx[dir];
+ ty = p_ptr->y + ddy[dir];
}
c_ptr = &cave[ty][tx];
return FALSE;
}
- if ((c_ptr->info & CAVE_ICKY) || (distance(ty, tx, py, px) > p_ptr->lev * 3 / 2 + 10))
+ if ((c_ptr->info & CAVE_ICKY) || (distance(ty, tx, p_ptr->y, p_ptr->x) > p_ptr->lev * 3 / 2 + 10))
{
msg_print(_("失敗した。", "Failed to swap."));
* @param flg フラグ
* @return 作用が実際にあった場合TRUEを返す
*/
-bool project_hook(int typ, int dir, int dam, int flg)
+bool project_hook(int typ, int dir, HIT_POINT dam, BIT_FLAGS flg)
{
int tx, ty;
flg |= (PROJECT_THRU);
/* Use the given direction */
- tx = px + ddx[dir];
- ty = py + ddy[dir];
+ tx = p_ptr->x + ddx[dir];
+ ty = p_ptr->y + ddy[dir];
/* Hack -- Use an actual "target" */
if ((dir == 5) && target_okay())
* Affect monsters and grids (not objects).
* </pre>
*/
-bool fire_bolt(int typ, int dir, int dam)
+bool fire_bolt(int typ, int dir, HIT_POINT dam)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_GRID;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_GRID;
if (typ != GF_ARROW) flg |= PROJECT_REFLECTABLE;
return (project_hook(typ, dir, dam, flg));
}
* Affect monsters, grids and objects.
* </pre>
*/
-bool fire_beam(int typ, int dir, int dam)
+bool fire_beam(int typ, int dir, HIT_POINT dam)
{
- int flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM;
+ BIT_FLAGS flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM;
return (project_hook(typ, dir, dam, flg));
}
* Affect monsters, grids and objects.
* </pre>
*/
-bool fire_bolt_or_beam(int prob, int typ, int dir, int dam)
+bool fire_bolt_or_beam(int prob, int typ, int dir, HIT_POINT dam)
{
if (randint0(100) < prob)
{
* @param dam 威力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool lite_line(int dir, int dam)
+bool lite_line(int dir, HIT_POINT dam)
{
- int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_KILL;
return (project_hook(GF_LITE_WEAK, dir, dam, flg));
}
* @param dam 威力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool drain_life(int dir, int dam)
+bool drain_life(int dir, HIT_POINT dam)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_DRAIN, dir, dam, flg));
}
* @param dam 威力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool wall_to_mud(int dir, int dam)
+bool wall_to_mud(int dir, HIT_POINT dam)
{
- int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
return (project_hook(GF_KILL_WALL, dir, dam, flg));
}
*/
bool wizard_lock(int dir)
{
- int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
return (project_hook(GF_JAM_DOOR, dir, 20 + randint1(30), flg));
}
*/
bool destroy_door(int dir)
{
- int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
+ BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
return (project_hook(GF_KILL_DOOR, dir, 0, flg));
}
*/
bool disarm_trap(int dir)
{
- int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
+ BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM;
return (project_hook(GF_KILL_TRAP, dir, 0, flg));
}
* @param dam 威力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool heal_monster(int dir, int dam)
+bool heal_monster(int dir, HIT_POINT dam)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_HEAL, dir, dam, flg));
}
*/
bool speed_monster(int dir, int power)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_SPEED, dir, power, flg));
}
*/
bool slow_monster(int dir, int power)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_SLOW, dir, power, flg));
}
*/
bool sleep_monster(int dir, int power)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_SLEEP, dir, power, flg));
}
*/
bool confuse_monster(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_CONF, dir, plev, flg));
}
*/
bool stun_monster(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_STUN, dir, plev, flg));
}
*/
bool poly_monster(int dir, int power)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
bool tester = (project_hook(GF_OLD_POLY, dir, power, flg));
if (tester)
chg_virtue(V_CHANCE, 1);
*/
bool clone_monster(int dir)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_OLD_CLONE, dir, 0, flg));
}
*/
bool fear_monster(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_TURN_ALL, dir, plev, flg));
}
*/
bool death_ray(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE;
return (project_hook(GF_DEATH_RAY, dir, plev * 200, flg));
}
*/
bool teleport_monster(int dir, int distance)
{
- int flg = PROJECT_BEAM | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_BEAM | PROJECT_KILL;
return (project_hook(GF_AWAY_ALL, dir, distance, flg));
}
*/
bool door_creation(void)
{
- int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
- return (project(0, 1, py, px, 0, GF_MAKE_DOOR, flg, -1));
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
+ return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_MAKE_DOOR, flg, -1));
}
/*!
*/
bool trap_creation(int y, int x)
{
- int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
return (project(0, 1, y, x, 0, GF_MAKE_TRAP, flg, -1));
}
*/
bool tree_creation(void)
{
- int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
- return (project(0, 1, py, px, 0, GF_MAKE_TREE, flg, -1));
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
+ return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_MAKE_TREE, flg, -1));
}
/*!
*/
bool glyph_creation(void)
{
- int flg = PROJECT_GRID | PROJECT_ITEM;
- return (project(0, 1, py, px, 0, GF_MAKE_GLYPH, flg, -1));
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM;
+ return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_MAKE_GLYPH, flg, -1));
}
/*!
*/
bool wall_stone(void)
{
- int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
- bool dummy = (project(0, 1, py, px, 0, GF_STONE_WALL, flg, -1));
+ bool dummy = (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_STONE_WALL, flg, -1));
/* Update stuff */
p_ptr->update |= (PU_FLOW);
*/
bool destroy_doors_touch(void)
{
- int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
- return (project(0, 1, py, px, 0, GF_KILL_DOOR, flg, -1));
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
+ return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_KILL_DOOR, flg, -1));
}
/*!
*/
bool disarm_traps_touch(void)
{
- int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
- return (project(0, 1, py, px, 0, GF_KILL_TRAP, flg, -1));
+ BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE;
+ return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_KILL_TRAP, flg, -1));
}
/*!
*/
bool sleep_monsters_touch(void)
{
- int flg = PROJECT_KILL | PROJECT_HIDE;
- return (project(0, 1, py, px, p_ptr->lev, GF_OLD_SLEEP, flg, -1));
+ BIT_FLAGS flg = PROJECT_KILL | PROJECT_HIDE;
+ return (project(0, 1, p_ptr->y, p_ptr->x, p_ptr->lev, GF_OLD_SLEEP, flg, -1));
}
* @param x 起点X座標
* @return 作用が実際にあった場合TRUEを返す
*/
-bool animate_dead(int who, int y, int x)
+bool animate_dead(MONSTER_IDX who, POSITION y, POSITION x)
{
- int flg = PROJECT_ITEM | PROJECT_HIDE;
+ BIT_FLAGS flg = PROJECT_ITEM | PROJECT_HIDE;
return (project(who, 5, y, x, 0, GF_ANIM_DEAD, flg, -1));
}
GF_ELEC, GF_POIS, GF_ACID, GF_COLD,
GF_FIRE, GF_MISSILE, GF_ARROW, GF_PLASMA,
GF_HOLY_FIRE, GF_WATER, GF_LITE, GF_DARK,
- GF_FORCE, GF_INERTIA, GF_MANA, GF_METEOR,
+ GF_FORCE, GF_INERTIAL, GF_MANA, GF_METEOR,
GF_ICE, GF_CHAOS, GF_NETHER, GF_DISENCHANT,
GF_SHARDS, GF_SOUND, GF_NEXUS, GF_CONFUSION,
GF_TIME, GF_GRAVITY, GF_ROCKET, GF_NUKE,
{
int i = 0;
- int flg = (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP);
+ BIT_FLAGS flg = (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP);
do
{
if (!(*count))
{
msg_print(_("地面が揺れた...", "The ground trembles..."));
- earthquake(py, px, 5 + randint0(10));
+ earthquake(p_ptr->y, p_ptr->x, 5 + randint0(10));
if (!one_in_(6)) break;
}
case 30: case 31:
if (!(*count))
{
- int dam = damroll(10, 10);
+ HIT_POINT dam = damroll(10, 10);
msg_print(_("純粋な魔力の次元への扉が開いた!", "A portal opens to a plane of raw mana!"));
- project(0, 8, py, px, dam, GF_MANA, flg, -1);
+ project(0, 8, p_ptr->y, p_ptr->x, dam, GF_MANA, flg, -1);
take_hit(DAMAGE_NOESCAPE, dam, _("純粋な魔力の解放", "released pure mana"), -1);
if (!one_in_(6)) break;
}
{
msg_print(_("周囲の空間が歪んだ!", "Space warps about you!"));
teleport_player(damroll(10, 10), TELEPORT_PASSIVE);
- if (randint0(13)) (*count) += activate_hi_summon(py, px, FALSE);
+ if (randint0(13)) (*count) += activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
if (!one_in_(6)) break;
}
case 34:
wall_breaker();
if (!randint0(7))
{
- project(0, 7, py, px, 50, GF_KILL_WALL, flg, -1);
+ project(0, 7, p_ptr->y, p_ptr->x, 50, GF_KILL_WALL, flg, -1);
take_hit(DAMAGE_NOESCAPE, 50, _("エネルギーのうねり", "surge of energy"), -1);
}
if (!one_in_(6)) break;
aggravate_monsters(0);
if (!one_in_(6)) break;
case 4: case 5: case 6:
- (*count) += activate_hi_summon(py, px, FALSE);
+ (*count) += activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
if (!one_in_(6)) break;
case 7: case 8: case 9: case 18:
- (*count) += summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+ (*count) += summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
if (!one_in_(6)) break;
case 10: case 11: case 12:
msg_print(_("経験値が体から吸い取られた気がする!", "You feel your experience draining away..."));
*/
if ((dun_level > 65) && !stop_ty)
{
- (*count) += summon_cyber(-1, py, px);
+ (*count) += summon_cyber(-1, p_ptr->y, p_ptr->x);
stop_ty = TRUE;
break;
}
* @param can_pet プレイヤーのペットとなる可能性があるならばTRUEにする
* @return 作用が実際にあった場合TRUEを返す
*/
-int activate_hi_summon(int y, int x, bool can_pet)
+int activate_hi_summon(POSITION y, POSITION x, bool can_pet)
{
int i;
int count = 0;
- int summon_lev;
- u32b mode = PM_ALLOW_GROUP;
+ DEPTH summon_lev;
+ BIT_FLAGS mode = PM_ALLOW_GROUP;
bool pet = FALSE;
if (can_pet)
* @param x 召喚位置X座標
* @return 作用が実際にあった場合TRUEを返す
*/
-int summon_cyber(int who, int y, int x)
+int summon_cyber(MONSTER_IDX who, POSITION y, POSITION x)
{
int i;
int max_cyber = (easy_band ? 1 : (dun_level / 50) + randint1(2));
int count = 0;
- u32b mode = PM_ALLOW_GROUP;
+ BIT_FLAGS mode = PM_ALLOW_GROUP;
/* Summoned by a monster */
if (who > 0)
void wall_breaker(void)
{
int i;
- int y, x;
+ POSITION y = 0, x = 0;
int attempts = 1000;
if (randint1(80 + p_ptr->lev) < 70)
{
while (attempts--)
{
- scatter(&y, &x, py, px, 4, 0);
+ scatter(&y, &x, p_ptr->y, p_ptr->x, 4, 0);
if (!cave_have_flag_bold(y, x, FF_PROJECT)) continue;
}
else if (randint1(100) > 30)
{
- earthquake(py, px, 1);
+ earthquake(p_ptr->y, p_ptr->x, 1);
}
else
{
{
while (1)
{
- scatter(&y, &x, py, px, 10, 0);
+ scatter(&y, &x, p_ptr->y, p_ptr->x, 10, 0);
if (!player_bold(y, x)) break;
}
/*!
* @brief パニック・モンスター効果(プレイヤー視界範囲内) / Confuse monsters
- * @dam 効力
+ * @param dam 効力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool confuse_monsters(int dam)
+bool confuse_monsters(HIT_POINT dam)
{
return (project_hack(GF_OLD_CONF, dam));
}
/*!
* @brief チャーム・モンスター効果(プレイヤー視界範囲内) / Charm monsters
- * @dam 効力
+ * @param dam 効力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool charm_monsters(int dam)
+bool charm_monsters(HIT_POINT dam)
{
return (project_hack(GF_CHARM, dam));
}
/*!
* @brief 動物魅了効果(プレイヤー視界範囲内) / Charm Animals
- * @dam 効力
+ * @param dam 効力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool charm_animals(int dam)
+bool charm_animals(HIT_POINT dam)
{
return (project_hack(GF_CONTROL_ANIMAL, dam));
}
/*!
* @brief モンスター朦朧効果(プレイヤー視界範囲内) / Stun monsters
- * @dam 効力
+ * @param dam 効力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool stun_monsters(int dam)
+bool stun_monsters(HIT_POINT dam)
{
return (project_hack(GF_STUN, dam));
}
/*!
* @brief モンスター停止効果(プレイヤー視界範囲内) / Stasis monsters
- * @dam 効力
+ * @param dam 効力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool stasis_monsters(int dam)
+bool stasis_monsters(HIT_POINT dam)
{
return (project_hack(GF_STASIS, dam));
}
/*!
* @brief モンスター精神攻撃効果(プレイヤー視界範囲内) / Mindblast monsters
- * @dam 効力
+ * @param dam 効力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool mindblast_monsters(int dam)
+bool mindblast_monsters(HIT_POINT dam)
{
return (project_hack(GF_PSI, dam));
}
/*!
* @brief モンスター追放効果(プレイヤー視界範囲内) / Banish all monsters
- * @dist 効力(距離)
+ * @param dist 効力(距離)
* @return 作用が実際にあった場合TRUEを返す
*/
bool banish_monsters(int dist)
/*!
* @brief 邪悪退散効果(プレイヤー視界範囲内) / Turn evil
- * @dam 効力
+ * @param dam 効力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool turn_evil(int dam)
+bool turn_evil(HIT_POINT dam)
{
return (project_hack(GF_TURN_EVIL, dam));
}
/*!
* @brief 全モンスター退散効果(プレイヤー視界範囲内) / Turn everyone
- * @dam 効力
+ * @param dam 効力
* @return 作用が実際にあった場合TRUEを返す
*/
-bool turn_monsters(int dam)
+bool turn_monsters(HIT_POINT dam)
{
return (project_hack(GF_TURN_ALL, dam));
}
-/*
- * Death-ray all monsters (note: OBSCENELY powerful)
+/*!
+ * @brief 死の光線(プレイヤー視界範囲内) / Death-ray all monsters (note: OBSCENELY powerful)
+ * @return 作用が実際にあった場合TRUEを返す
*/
bool deathray_monsters(void)
{
return (project_hack(GF_DEATH_RAY, p_ptr->lev * 200));
}
-
+/*!
+ * @brief チャーム・モンスター(1体)
+ * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする)
+ * @param plev パワー
+ * @return 作用が実際にあった場合TRUEを返す
+ */
bool charm_monster(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL;
return (project_hook(GF_CHARM, dir, plev, flg));
}
-
+/*!
+ * @brief アンデッド支配(1体)
+ * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする)
+ * @param plev パワー
+ * @return 作用が実際にあった場合TRUEを返す
+ */
bool control_one_undead(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL;
return (project_hook(GF_CONTROL_UNDEAD, dir, plev, flg));
}
-
+/*!
+ * @brief 悪魔支配(1体)
+ * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする)
+ * @param plev パワー
+ * @return 作用が実際にあった場合TRUEを返す
+ */
bool control_one_demon(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL;
return (project_hook(GF_CONTROL_DEMON, dir, plev, flg));
}
-
+/*!
+ * @brief 動物支配(1体)
+ * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする)
+ * @param plev パワー
+ * @return 作用が実際にあった場合TRUEを返す
+ */
bool charm_animal(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL;
return (project_hook(GF_CONTROL_ANIMAL, dir, plev, flg));
}
-
+/*!
+ * @brief 生物支配(1体)
+ * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする)
+ * @param plev パワー
+ * @return 作用が実際にあった場合TRUEを返す
+ */
bool charm_living(int dir, int plev)
{
- int flg = PROJECT_STOP | PROJECT_KILL;
+ BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL;
return (project_hook(GF_CONTROL_LIVING, dir, plev, flg));
}
-
+/*!
+ * @brief 変わり身処理
+ * @param success 判定成功上の処理ならばTRUE
+ * @return 作用が実際にあった場合TRUEを返す
+ */
bool kawarimi(bool success)
{
object_type forge;
return FALSE;
}
- y = py;
- x = px;
+ y = p_ptr->y;
+ x = p_ptr->x;
teleport_player(10 + randint1(90), 0L);
}
-/*
- * "Rush Attack" routine for Samurai or Ninja
- * Return value is for checking "done"
+/*!
+ * @brief 入身処理 / "Rush Attack" routine for Samurai or Ninja
+ * @param mdeath 目標モンスターが死亡したかを返す
+ * @return 作用が実際にあった場合TRUEを返す / Return value is for checking "done"
*/
bool rush_attack(bool *mdeath)
{
if (!get_aim_dir(&dir)) return FALSE;
/* Use the given direction */
- tx = px + project_length * ddx[dir];
- ty = py + project_length * ddy[dir];
+ tx = p_ptr->x + project_length * ddx[dir];
+ ty = p_ptr->y + project_length * ddy[dir];
/* Hack -- Use an actual "target" */
if ((dir == 5) && target_okay())
if (in_bounds(ty, tx)) tm_idx = cave[ty][tx].m_idx;
- path_n = project_path(path_g, project_length, py, px, ty, tx, PROJECT_STOP | PROJECT_KILL);
+ path_n = project_path(path_g, project_length, p_ptr->y, p_ptr->x, ty, tx, PROJECT_STOP | PROJECT_KILL);
project_length = 0;
/* No need to move */
if (!path_n) return TRUE;
/* Use ty and tx as to-move point */
- ty = py;
- tx = px;
+ ty = p_ptr->y;
+ tx = p_ptr->x;
/* Project along the path */
for (i = 0; i < path_n; i++)
}
-/*
- * Remove all mirrors in this floor
+/*!
+ * @brief 全鏡の消去 / Remove all mirrors in this floor
+ * @param explode 爆発処理を伴うならばTRUE
+ * @return なし
*/
void remove_all_mirrors(bool explode)
{