X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fspells2.c;h=02526dfa7006a560a1d94814eb7c1e131982b90f;hb=f6f1b8f578139332edc085ba303df5c1f3f0652e;hp=da40ea91f1e209dbfeed8595ad6db9d747762195;hpb=17ce1992d9ae3babce1a147be2eb03de89edac17;p=hengband%2Fhengband.git diff --git a/src/spells2.c b/src/spells2.c index da40ea91f..02526dfa7 100644 --- a/src/spells2.c +++ b/src/spells2.c @@ -109,52 +109,52 @@ void self_knowledge(void) 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); @@ -1821,7 +1821,7 @@ void report_magics(void) * @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; @@ -1834,7 +1834,7 @@ static bool detect_feat_flag(int range, int flag, bool known) { 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 */ @@ -1884,13 +1884,13 @@ static bool detect_feat_flag(int range, int flag, bool known) * @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) @@ -1908,11 +1908,11 @@ bool detect_traps(int range, bool known) * @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) @@ -1930,11 +1930,11 @@ bool detect_doors(int range) * @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) @@ -1952,11 +1952,11 @@ bool detect_stairs(int range) * @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) @@ -1974,10 +1974,10 @@ bool detect_treasure(int range) * @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; @@ -1999,7 +1999,7 @@ bool detect_objects_gold(int range) 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) @@ -2015,7 +2015,7 @@ bool detect_objects_gold(int range) } } - 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) @@ -2038,10 +2038,10 @@ bool detect_objects_gold(int range) * @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; @@ -2063,7 +2063,7 @@ bool detect_objects_normal(int range) 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) @@ -2079,7 +2079,7 @@ bool detect_objects_normal(int range) } } - 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) @@ -2110,7 +2110,7 @@ bool detect_objects_normal(int range) * It can probably be argued that this function is now too powerful. * */ -bool detect_objects_magic(int range) +bool detect_objects_magic(POSITION range) { int i, y, x, tv; @@ -2134,7 +2134,7 @@ bool detect_objects_magic(int range) 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; @@ -2192,9 +2192,10 @@ bool detect_objects_magic(int range) * @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; @@ -2214,7 +2215,7 @@ bool detect_monsters_normal(int range) 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) @@ -2233,7 +2234,7 @@ bool detect_monsters_normal(int range) } } - 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) @@ -2252,9 +2253,10 @@ bool detect_monsters_normal(int range) * @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; @@ -2273,7 +2275,7 @@ bool detect_monsters_invis(int range) 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) @@ -2299,7 +2301,7 @@ bool detect_monsters_invis(int range) } } - 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) @@ -2317,9 +2319,10 @@ bool detect_monsters_invis(int range) * @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; @@ -2338,7 +2341,7 @@ bool detect_monsters_evil(int range) 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) @@ -2386,10 +2389,11 @@ bool detect_monsters_evil(int range) * @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; @@ -2407,7 +2411,7 @@ bool detect_monsters_nonliving(int range) 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)) @@ -2449,9 +2453,10 @@ bool detect_monsters_nonliving(int range) * @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; @@ -2470,7 +2475,7 @@ bool detect_monsters_mind(int range) 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)) @@ -2514,9 +2519,10 @@ bool detect_monsters_mind(int range) * @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; @@ -2535,7 +2541,7 @@ bool detect_monsters_string(int range, cptr Match) 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)) @@ -2561,7 +2567,7 @@ bool detect_monsters_string(int range, cptr Match) } } - 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) @@ -2580,9 +2586,10 @@ bool detect_monsters_string(int range, cptr Match) * @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"); @@ -2602,7 +2609,7 @@ bool detect_monsters_xxx(int range, u32b match_flag) 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)) @@ -2662,7 +2669,7 @@ bool detect_monsters_xxx(int range, u32b match_flag) * @param range 効果範囲 * @return 効力があった場合TRUEを返す */ -bool detect_all(int range) +bool detect_all(POSITION range) { bool detect = FALSE; @@ -2697,7 +2704,7 @@ bool detect_all(int range) * this is done in two passes. -- JDL * */ -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; @@ -2717,7 +2724,7 @@ bool project_hack(int typ, int dam) 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); @@ -2799,7 +2806,7 @@ bool turn_undead(void) * @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) @@ -2811,7 +2818,7 @@ bool dispel_undead(int dam) * @brief 視界内の邪悪なモンスターにダメージを与える処理 / Dispel evil monsters * @return 効力があった場合TRUEを返す */ -bool dispel_evil(int dam) +bool dispel_evil(HIT_POINT dam) { return (project_hack(GF_DISP_EVIL, dam)); } @@ -2820,7 +2827,7 @@ bool dispel_evil(int 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)); } @@ -2829,7 +2836,7 @@ bool dispel_good(int 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)); } @@ -2838,7 +2845,7 @@ bool dispel_monsters(int 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)); } @@ -2847,7 +2854,7 @@ bool dispel_living(int 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)); } @@ -2866,9 +2873,9 @@ bool crusade(void) * @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; @@ -2929,7 +2936,7 @@ void aggravate_monsters(int who) * @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]; @@ -3001,7 +3008,7 @@ bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spe } /* Visual feedback */ - move_cursor_relative(py, px); + move_cursor_relative(p_ptr->y, p_ptr->x); /* Redraw */ p_ptr->redraw |= (PR_HP); @@ -3030,7 +3037,7 @@ bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spe */ bool symbol_genocide(int power, bool player_cast) { - int i; + MONSTER_IDX i; char typ; bool result = FALSE; @@ -3077,7 +3084,7 @@ bool symbol_genocide(int power, bool player_cast) */ bool mass_genocide(int power, bool player_cast) { - int i; + MONSTER_IDX i; bool result = FALSE; /* Prevent mass genocide in quest levels */ @@ -3119,7 +3126,7 @@ bool mass_genocide(int power, bool player_cast) */ bool mass_genocide_undead(int power, bool player_cast) { - int i; + MONSTER_IDX i; bool result = FALSE; /* Prevent mass genocide in quest levels */ @@ -3162,9 +3169,9 @@ bool mass_genocide_undead(int power, bool player_cast) */ 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; @@ -3233,11 +3240,9 @@ bool probing(void) #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)); @@ -3276,8 +3281,6 @@ sprintf(buf, "%s ... align:%s HP:%d/%d AC:%d speed:%s%d exp:", m_name, align, m_ /* 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)); @@ -3592,7 +3595,7 @@ bool destroy_area(int y1, int x1, int r, bool in_generate) 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); } } @@ -3628,11 +3631,12 @@ bool destroy_area(int y1, int x1, int r, bool in_generate) * This has allowed massive simplification of the "monster" code. * */ -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]; @@ -3701,8 +3705,8 @@ bool earthquake_aux(int cy, int cx, int r, int m_idx) 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; @@ -3783,7 +3787,7 @@ bool earthquake_aux(int cy, int cx, int r, int m_idx) } /* 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) @@ -3930,13 +3934,13 @@ bool earthquake_aux(int cy, int cx, int r, int m_idx) /* 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; @@ -4076,7 +4080,7 @@ bool earthquake_aux(int cy, int cx, int r, int m_idx) 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 */ @@ -4089,6 +4093,7 @@ bool earthquake_aux(int cy, int cx, int r, int m_idx) * @return 効力があった場合TRUEを返す * @param cy 中心Y座標 * @param cx 中心X座標 + * @param r 効果半径 */ bool earthquake(int cy, int cx, int r) { @@ -4101,7 +4106,7 @@ 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++) @@ -4117,7 +4122,7 @@ void discharge_minion(void) } for (i = 1; i < m_max; i++) { - int dam; + HIT_POINT dam; monster_type *m_ptr = &m_list[i]; monster_race *r_ptr; @@ -4424,7 +4429,7 @@ static void cave_temp_room_aux(int y, int x, bool only_room, bool (*pass_bold)(i 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 */ /* @@ -4454,7 +4459,7 @@ static void cave_temp_room_aux(int y, int x, bool only_room, bool (*pass_bold)(i /*! * @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) @@ -4465,7 +4470,7 @@ 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) @@ -4476,7 +4481,7 @@ 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) @@ -4488,7 +4493,7 @@ 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) @@ -4499,8 +4504,8 @@ 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) @@ -4536,15 +4541,15 @@ 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) @@ -4583,13 +4588,13 @@ 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) { @@ -4604,10 +4609,10 @@ bool lite_area(int dam, int rad) } /* 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); @@ -4616,13 +4621,13 @@ bool lite_area(int dam, int rad) /*! * @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) @@ -4631,10 +4636,10 @@ bool unlite_area(int dam, int rad) } /* 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); @@ -4656,16 +4661,16 @@ bool unlite_area(int dam, int rad) * Affect grids, objects, and monsters * */ -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()) @@ -4695,15 +4700,15 @@ bool fire_ball(int typ, int dir, int dam, int rad) * Affect grids, objects, and monsters * */ -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()) @@ -4731,15 +4736,15 @@ bool fire_rocket(int typ, int dir, int dam, int rad) * Affect grids, objects, and monsters * */ -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()) @@ -4754,30 +4759,50 @@ bool fire_ball_hide(int typ, int dir, int dam, int rad) } -/* +/*! + * @brief メテオ系スペルの発動 / Cast a meteor spell + * @param who スぺル詠唱者のモンスターID(0=プレイヤー) + * @param typ 効果属性 + * @param dam 威力 + * @param rad 半径 + * @param y 中心点Y座標 + * @param x 中心点X座標 + * @return 作用が実際にあった場合TRUEを返す + * @details + *
  * Cast a meteor spell, defined as a ball spell cast by an arbitary monster, 
  * 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.
+ * 
*/ -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 typ 効果属性 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dd 威力ダイス数 + * @param ds 威力ダイス目 + * @param num 基本回数 + * @param dev 回数分散 + * @return 作用が実際にあった場合TRUEを返す + */ bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev) { int ly, lx, ld; 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; @@ -4785,8 +4810,8 @@ bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev) /* 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" */ @@ -4795,11 +4820,11 @@ bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev) 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++) @@ -4824,8 +4849,10 @@ bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev) } -/* - * Switch position with a monster. +/*! + * @brief モンスターとの位置交換処理 / Switch position with a monster. + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @return 作用が実際にあった場合TRUEを返す */ bool teleport_swap(int dir) { @@ -4841,8 +4868,8 @@ bool teleport_swap(int dir) } 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]; @@ -4860,7 +4887,7 @@ bool teleport_swap(int dir) 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.")); @@ -4893,10 +4920,15 @@ bool teleport_swap(int dir) } -/* - * Hack -- apply a "projection()" in a direction (or at the target) +/*! + * @brief 指定方向に飛び道具を飛ばす(フラグ任意指定) / Hack -- apply a "projection()" in a direction (or at the target) + * @param typ 効果属性 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @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; @@ -4904,8 +4936,8 @@ bool project_hook(int typ, int dir, int dam, int flg) 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()) @@ -4919,35 +4951,59 @@ bool project_hook(int typ, int dir, int dam, int flg) } -/* - * Cast a bolt spell. +/*! + * @brief ボルト系スペルの発動 / Cast a bolt spell. + * @param typ 効果属性 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + * @details + *
  * Stop if we hit a monster, as a "bolt".
  * Affect monsters and grids (not objects).
+ * 
*/ -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)); } -/* - * Cast a beam spell. +/*! + * @brief ビーム系スペルの発動 / Cast a beam spell. + * @param typ 効果属性 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + * @details + *
  * Pass through monsters, as a "beam".
  * Affect monsters, grids and objects.
+ * 
*/ -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)); } -/* - * Cast a bolt spell, or rarely, a beam spell +/*! + * @brief 確率に応じたボルト系/ビーム系スペルの発動 / Cast a bolt spell, or rarely, a beam spell. + * @param prob ビーム化する確率(%) + * @param typ 効果属性 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + * @details + *
+ * Pass through monsters, as a "beam".
+ * Affect monsters, grids and objects.
+ * 
*/ -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) { @@ -4959,179 +5015,282 @@ bool fire_bolt_or_beam(int prob, int typ, int dir, int dam) } } - -/* - * Some of the old functions +/*! + * @brief LITE_WEAK属性による光源ビーム処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @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)); } - -bool drain_life(int dir, int dam) +/*! + * @brief 吸血ボルト処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + */ +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)); } - -bool wall_to_mud(int dir, int dam) +/*! + * @brief 岩石溶解処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + */ +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)); } - +/*! + * @brief 魔法の施錠処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief ドア破壊処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief トラップ解除処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - -bool heal_monster(int dir, int dam) +/*! + * @brief モンスター回復処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + */ +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)); } - +/*! + * @brief モンスター加速処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param power 効力 + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief モンスター減速処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param power 効力 + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief モンスター催眠処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param power 効力 + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief モンスター拘束(STASIS)処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @return 作用が実際にあった場合TRUEを返す + * @details 威力はプレイヤーレベル*2に固定 + */ bool stasis_monster(int dir) { return (fire_ball_hide(GF_STASIS, dir, p_ptr->lev*2, 0)); } - +/*! + * @brief 邪悪なモンスター拘束(STASIS)処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @return 作用が実際にあった場合TRUEを返す + * @details 威力はプレイヤーレベル*2に固定 + */ bool stasis_evil(int dir) { return (fire_ball_hide(GF_STASIS_EVIL, dir, p_ptr->lev*2, 0)); } - +/*! + * @brief モンスター混乱処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param plev プレイヤーレベル(=効力) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief モンスター朦朧処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param plev プレイヤーレベル(=効力) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief チェンジモンスター処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param power 効力 + * @return 作用が実際にあった場合TRUEを返す + */ 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); return(tester); } - +/*! + * @brief クローンモンスター処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief モンスター恐慌処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param plev プレイヤーレベル(=効力) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief 死の光線処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param plev プレイヤーレベル(効力はplev*200) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief モンスター用テレポート処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param distance 移動距離 + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } -/* - * Hooks -- affect adjacent grids (radius 1 ball attack) +/*! + * @brief ドア生成処理(プレイヤー中心に周囲1マス) / Hooks -- affect adjacent grids (radius 1 ball attack) + * @return 作用が実際にあった場合TRUEを返す */ 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)); } - +/*! + * @brief トラップ生成処理(起点から周囲1マス) + * @param y 起点Y座標 + * @param x 起点X座標 + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief 森林生成処理(プレイヤー中心に周囲1マス) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief 魔法のルーン生成処理(プレイヤー中心に周囲1マス) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } - +/*! + * @brief 壁生成処理(プレイヤー中心に周囲1マス) + * @return 作用が実際にあった場合TRUEを返す + */ 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); @@ -5142,33 +5301,54 @@ bool wall_stone(void) return dummy; } - +/*! + * @brief ドア破壊処理(プレイヤー中心に周囲1マス) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } +/*! + * @brief トラップ解除処理(プレイヤー中心に周囲1マス) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } +/*! + * @brief スリープモンスター処理(プレイヤー中心に周囲1マス) + * @return 作用が実際にあった場合TRUEを返す + */ 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)); } -bool animate_dead(int who, int y, int x) +/*! + * @brief 死者復活処理(起点より周囲5マス) + * @param who 術者モンスターID(0ならばプレイやー) + * @param y 起点Y座標 + * @param x 起点X座標 + * @return 作用が実際にあった場合TRUEを返す + */ +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)); } - +/*! + * @brief 混沌招来処理 + * @return 作用が実際にあった場合TRUEを返す + */ void call_chaos(void) { int Chaos_type, dummy, dir; @@ -5180,7 +5360,7 @@ void call_chaos(void) 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, @@ -5217,17 +5397,22 @@ void call_chaos(void) } } - -/* - * Activate the evil Topi Ylinen curse +/*! + * @brief TY_CURSE処理発動 / Activate the evil Topi Ylinen curse + * @param stop_ty 再帰処理停止フラグ + * @param count 発動回数 + * @return 作用が実際にあった場合TRUEを返す + * @details + *
  * rr9: Stop the nasty things when a Cyberdemon is summoned
  * or the player gets paralyzed.
+ * 
*/ bool activate_ty_curse(bool stop_ty, int *count) { 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 { @@ -5237,15 +5422,15 @@ bool activate_ty_curse(bool stop_ty, int *count) 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; } @@ -5254,7 +5439,7 @@ bool activate_ty_curse(bool stop_ty, int *count) { 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: @@ -5262,7 +5447,7 @@ bool activate_ty_curse(bool stop_ty, int *count) 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; @@ -5270,10 +5455,10 @@ bool activate_ty_curse(bool stop_ty, int *count) 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...")); @@ -5307,7 +5492,7 @@ bool activate_ty_curse(bool stop_ty, int *count) */ 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; } @@ -5330,13 +5515,19 @@ bool activate_ty_curse(bool stop_ty, int *count) return stop_ty; } - -int activate_hi_summon(int y, int x, bool can_pet) +/*! + * @brief HI_SUMMON(上級召喚)処理発動 + * @param y 召喚位置Y座標 + * @param x 召喚位置X座標 + * @param can_pet プレイヤーのペットとなる可能性があるならばTRUEにする + * @return 作用が実際にあった場合TRUEを返す + */ +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) @@ -5413,13 +5604,19 @@ int activate_hi_summon(int y, int x, bool can_pet) } -/* ToDo: check */ -int summon_cyber(int who, int y, int x) +/*! + * @brief サイバーデーモンの召喚 + * @param who 召喚主のモンスターID(0ならばプレイヤー) + * @param y 召喚位置Y座標 + * @param x 召喚位置X座標 + * @return 作用が実際にあった場合TRUEを返す + */ +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) @@ -5438,18 +5635,21 @@ int summon_cyber(int who, int y, int x) return count; } - +/*! + * @brief 周辺破壊効果(プレイヤー中心) + * @return 作用が実際にあった場合TRUEを返す + */ 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; @@ -5461,7 +5661,7 @@ void wall_breaker(void) } else if (randint1(100) > 30) { - earthquake(py, px, 1); + earthquake(p_ptr->y, p_ptr->x, 1); } else { @@ -5471,7 +5671,7 @@ void wall_breaker(void) { 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; } @@ -5483,62 +5683,76 @@ void wall_breaker(void) } -/* - * Confuse monsters +/*! + * @brief パニック・モンスター効果(プレイヤー視界範囲内) / Confuse monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ -bool confuse_monsters(int dam) +bool confuse_monsters(HIT_POINT dam) { return (project_hack(GF_OLD_CONF, dam)); } -/* - * Charm monsters +/*! + * @brief チャーム・モンスター効果(プレイヤー視界範囲内) / Charm monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ -bool charm_monsters(int dam) +bool charm_monsters(HIT_POINT dam) { return (project_hack(GF_CHARM, dam)); } -/* - * Charm animals +/*! + * @brief 動物魅了効果(プレイヤー視界範囲内) / Charm Animals + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ -bool charm_animals(int dam) +bool charm_animals(HIT_POINT dam) { return (project_hack(GF_CONTROL_ANIMAL, dam)); } -/* - * Stun monsters +/*! + * @brief モンスター朦朧効果(プレイヤー視界範囲内) / Stun monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ -bool stun_monsters(int dam) +bool stun_monsters(HIT_POINT dam) { return (project_hack(GF_STUN, dam)); } -/* - * Stasis monsters +/*! + * @brief モンスター停止効果(プレイヤー視界範囲内) / Stasis monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ -bool stasis_monsters(int dam) +bool stasis_monsters(HIT_POINT dam) { return (project_hack(GF_STASIS, dam)); } -/* - * Mindblast monsters +/*! + * @brief モンスター精神攻撃効果(プレイヤー視界範囲内) / Mindblast monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ -bool mindblast_monsters(int dam) +bool mindblast_monsters(HIT_POINT dam) { return (project_hack(GF_PSI, dam)); } -/* - * Banish all monsters +/*! + * @brief モンスター追放効果(プレイヤー視界範囲内) / Banish all monsters + * @param dist 効力(距離) + * @return 作用が実際にあった場合TRUEを返す */ bool banish_monsters(int dist) { @@ -5546,68 +5760,102 @@ bool banish_monsters(int dist) } -/* - * Turn evil +/*! + * @brief 邪悪退散効果(プレイヤー視界範囲内) / Turn evil + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ -bool turn_evil(int dam) +bool turn_evil(HIT_POINT dam) { return (project_hack(GF_TURN_EVIL, dam)); } -/* - * Turn everyone +/*! + * @brief 全モンスター退散効果(プレイヤー視界範囲内) / Turn everyone + * @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; @@ -5626,8 +5874,8 @@ bool kawarimi(bool success) return FALSE; } - y = py; - x = px; + y = p_ptr->y; + x = p_ptr->x; teleport_player(10 + randint1(90), 0L); @@ -5656,9 +5904,10 @@ bool kawarimi(bool success) } -/* - * "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) { @@ -5676,8 +5925,8 @@ 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()) @@ -5688,15 +5937,15 @@ bool rush_attack(bool *mdeath) 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++) @@ -5772,8 +6021,10 @@ bool rush_attack(bool *mdeath) } -/* - * Remove all mirrors in this floor +/*! + * @brief 全鏡の消去 / Remove all mirrors in this floor + * @param explode 爆発処理を伴うならばTRUE + * @return なし */ void remove_all_mirrors(bool explode) {