X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fspells2.c;h=e0559f55374574bb1b8739d6654bb5c6b12fd85d;hb=7358da8a134c7f9911e69e1ec6162e51aed82ed0;hp=a235213e3dfa2bf47efe70f49051ca9b7baff168;hpb=54f8e038011f781490518d2220c278040a5a907e;p=hengband%2Fhengband.git diff --git a/src/spells2.c b/src/spells2.c index a235213e3..e0559f553 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,7 +1884,7 @@ 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); @@ -1908,7 +1908,7 @@ 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); @@ -1930,7 +1930,7 @@ 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); @@ -1952,7 +1952,7 @@ 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); @@ -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) @@ -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) @@ -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) @@ -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) @@ -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)) @@ -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; @@ -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); @@ -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; @@ -2920,10 +2927,16 @@ void aggravate_monsters(int who) } -/* - * Delete a non-unique/non-quest monster +/*! + * @brief モンスターへの単体抹殺処理サブルーチン / Delete a non-unique/non-quest monster + * @param m_idx 抹殺するモンスターID + * @param power 抹殺の威力 + * @param player_cast プレイヤーの魔法によるものならば TRUE + * @param dam_side プレイヤーへの負担ダメージ量(1d(dam_side)) + * @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]; @@ -2995,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); @@ -3016,12 +3029,15 @@ bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spe } -/* - * Delete all non-unique/non-quest monsters of a given "type" from the level +/*! + * @brief モンスターへのシンボル抹殺処理ルーチン / Delete all non-unique/non-quest monsters of a given "type" from the level + * @param power 抹殺の威力 + * @param player_cast プレイヤーの魔法によるものならば TRUE + * @return 効力があった場合TRUEを返す */ bool symbol_genocide(int power, bool player_cast) { - int i; + MONSTER_IDX i; char typ; bool result = FALSE; @@ -3060,12 +3076,15 @@ bool symbol_genocide(int power, bool player_cast) } -/* - * Delete all nearby (non-unique) monsters +/*! + * @brief モンスターへの周辺抹殺処理ルーチン / Delete all nearby (non-unique) monsters + * @param power 抹殺の威力 + * @param player_cast プレイヤーの魔法によるものならば TRUE + * @return 効力があった場合TRUEを返す */ bool mass_genocide(int power, bool player_cast) { - int i; + MONSTER_IDX i; bool result = FALSE; /* Prevent mass genocide in quest levels */ @@ -3099,13 +3118,15 @@ bool mass_genocide(int power, bool player_cast) } - -/* - * Delete all nearby (non-unique) undead +/*! + * @brief アンデッド・モンスターへの周辺抹殺処理ルーチン / Delete all nearby (non-unique) undead + * @param power 抹殺の威力 + * @param player_cast プレイヤーの魔法によるものならば TRUE + * @return 効力があった場合TRUEを返す */ bool mass_genocide_undead(int power, bool player_cast) { - int i; + POSITION i; bool result = FALSE; /* Prevent mass genocide in quest levels */ @@ -3142,9 +3163,9 @@ bool mass_genocide_undead(int power, bool player_cast) } - -/* - * Probe nearby monsters +/*! + * @brief 周辺モンスターを調査する / Probe nearby monsters + * @return 効力があった場合TRUEを返す */ bool probing(void) { @@ -3219,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)); @@ -3262,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)); @@ -3303,13 +3320,20 @@ sprintf(buf, "%s ... align:%s HP:%d/%d AC:%d speed:%s%d exp:", m_name, align, m_ -/* - * The spell of destruction - * +/*! + * @brief *破壊*処理を行う / The spell of destruction + * @param y1 破壊の中心Y座標 + * @param x1 破壊の中心X座標 + * @param r 破壊の半径 + * @param in_generate ダンジョンフロア生成中の処理ならばTRUE + * @return 効力があった場合TRUEを返す + * @details + *
  * This spell "deletes" monsters (instead of "killing" them).
  *
  * Later we may use one function for both "destruction" and
  * "earthquake" by using the "full" to select "destruction".
+ * 
*/ bool destroy_area(int y1, int x1, int r, bool in_generate) { @@ -3571,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); } } @@ -3580,8 +3604,16 @@ bool destroy_area(int y1, int x1, int r, bool in_generate) } -/* +/*! + * @brief 地震処理(サブルーチン) / * Induce an "earthquake" of the given radius at the given location. + * @return 効力があった場合TRUEを返す + * @param cy 中心Y座標 + * @param cx 中心X座標 + * @param r 効果半径 + * @param m_idx 地震を起こしたモンスターID(0ならばプレイヤー) + * @details + *
  *
  * This will turn some walls into floors and some floors into walls.
  *
@@ -3597,12 +3629,14 @@ bool destroy_area(int y1, int x1, int r, bool in_generate)
  * Note that as of now (2.7.8) no monster may occupy a "wall" grid, even
  * for a single turn, unless that monster can pass_walls or kill_walls.
  * 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]; @@ -3671,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; @@ -3753,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) @@ -3900,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; @@ -4046,22 +4080,33 @@ 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 */ return (TRUE); } +/*! + * @brief 地震処理(プレイヤーの中心発動) / + * Induce an "earthquake" of the given radius at the given location. + * @return 効力があった場合TRUEを返す + * @param cy 中心Y座標 + * @param cx 中心X座標 + * @param r 効果半径 + */ bool earthquake(int cy, int cx, int r) { return earthquake_aux(cy, cx, r, 0); } - +/*! + * @brief ペット爆破処理 / + * @return なし + */ void discharge_minion(void) { - int i; + MONSTER_IDX i; bool okay = TRUE; for (i = 1; i < m_max; i++) @@ -4114,20 +4159,21 @@ void discharge_minion(void) } -/* +/*! + * @brief 部屋全体を照らすサブルーチン + * @return なし + * @details + *
  * This routine clears the entire "temp" set.
- *
  * This routine will Perma-Lite all "temp" grids.
- *
  * This routine is used (only) by "lite_room()"
- *
  * Dark grids are illuminated.
- *
  * Also, process all affected monsters.
  *
  * SMART monsters always wake up when illuminated
  * NORMAL monsters wake up 1/4 the time when illuminated
  * STUPID monsters wake up 1/10 the time when illuminated
+ * 
*/ static void cave_temp_room_lite(void) { @@ -4203,16 +4249,17 @@ static void cave_temp_room_lite(void) -/* +/*! + * @brief 部屋全体を暗くするサブルーチン + * @return なし + * @details + *
  * This routine clears the entire "temp" set.
- *
  * This routine will "darken" all "temp" grids.
- *
  * In addition, some of these grids will be "unmarked".
- *
  * This routine is used (only) by "unlite_room()"
- *
  * Also, process all affected monsters
+ * 
*/ static void cave_temp_room_unlite(void) { @@ -4287,8 +4334,12 @@ static void cave_temp_room_unlite(void) } -/* - * Determine how much contiguous open space this grid is next to +/*! + * @brief 周辺に関数ポインタの条件に該当する地形がいくつあるかを計算する / Determine how much contiguous open space this grid is next to + * @param cy Y座標 + * @param cx X座標 + * @param pass_bold 地形条件を返す関数ポインタ + * @return 該当地形の数 */ static int next_to_open(int cy, int cx, bool (*pass_bold)(int, int)) { @@ -4324,7 +4375,13 @@ static int next_to_open(int cy, int cx, bool (*pass_bold)(int, int)) return (MAX(len, blen)); } - +/*! + * @brief 周辺に関数ポインタの条件に該当する地形がいくつあるかを計算する / Determine how much contiguous open space this grid is next to + * @param cy Y座標 + * @param cx X座標 + * @param pass_bold 地形条件を返す関数ポインタ + * @return 該当地形の数 + */ static int next_to_walls_adj(int cy, int cx, bool (*pass_bold)(int, int)) { int i; @@ -4345,8 +4402,13 @@ static int next_to_walls_adj(int cy, int cx, bool (*pass_bold)(int, int)) } -/* - * Aux function -- see below +/*! + * @brief 部屋内にある一点の周囲に該当する地形数かいくつあるかをグローバル変数temp_nに返す / Aux function -- see below + * @param y 部屋内のy座標1点 + * @param x 部屋内のx座標1点 + * @param only_room 部屋内地形のみをチェック対象にするならば TRUE + * @param pass_bold 地形条件を返す関数ポインタ + * @return 該当地形の数 */ static void cave_temp_room_aux(int y, int x, bool only_room, bool (*pass_bold)(int, int)) { @@ -4367,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 */ /* @@ -4394,32 +4456,45 @@ static void cave_temp_room_aux(int y, int x, bool only_room, bool (*pass_bold)(i temp_n++; } -/* - * Aux function -- see below +/*! + * @brief 指定のマスが光を通すか(LOSフラグを持つか)を返す。 / Aux function -- see below + * @param y 指定Y座標 + * @param x 指定X座標 + * @return 光を通すならばtrueを返す。 */ static bool cave_pass_lite_bold(int y, int x) { return cave_los_bold(y, x); } -/* - * Aux function -- see below +/*! + * @brief 部屋内にある一点の周囲がいくつ光を通すかをグローバル変数temp_nに返す / Aux function -- see below + * @param y 指定Y座標 + * @param x 指定X座標 + * @return なし */ static void cave_temp_lite_room_aux(int y, int x) { cave_temp_room_aux(y, x, FALSE, cave_pass_lite_bold); } -/* - * Aux function -- see below +/*! + * @brief 指定のマスが光を通さず射線のみを通すかを返す。 / Aux function -- see below + * @param y 指定Y座標 + * @param x 指定X座標 + * @return 射線を通すならばtrueを返す。 */ static bool cave_pass_dark_bold(int y, int x) { return cave_have_flag_bold(y, x, FF_PROJECT); } -/* - * Aux function -- see below + +/*! + * @brief 部屋内にある一点の周囲がいくつ射線を通すかをグローバル変数temp_nに返す / Aux function -- see below + * @param y 指定Y座標 + * @param x 指定X座標 + * @return なし */ static void cave_temp_unlite_room_aux(int y, int x) { @@ -4427,10 +4502,11 @@ static void cave_temp_unlite_room_aux(int y, int x) } - - -/* - * Illuminate any room containing the given location. +/*! + * @brief 指定された部屋内を照らす / Illuminate any room containing the given location. + * @param y1 指定Y座標 + * @param x1 指定X座標 + * @return なし */ void lite_room(int y1, int x1) { @@ -4465,13 +4541,16 @@ 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); } } -/* - * Darken all rooms containing the given location +/*! + * @brief 指定された部屋内を暗くする / Darken all rooms containing the given location + * @param y1 指定Y座標 + * @param x1 指定X座標 + * @return なし */ void unlite_room(int y1, int x1) { @@ -4507,9 +4586,11 @@ void unlite_room(int y1, int x1) -/* - * Hack -- call light around the player - * Affect all monsters in the projection radius +/*! + * @brief プレイヤー位置を中心にLITE_WEAK属性を通じた照明処理を行う / Hack -- call light around the player Affect all monsters in the projection radius + * @param dam 威力 + * @param rad 効果半径 + * @return 作用が実際にあった場合TRUEを返す */ bool lite_area(int dam, int rad) { @@ -4528,19 +4609,21 @@ 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); } -/* - * Hack -- call darkness around the player - * Affect all monsters in the projection radius +/*! + * @brief プレイヤー位置を中心にLITE_DARK属性を通じた消灯処理を行う / Hack -- call light around the player Affect all monsters in the projection radius + * @param dam 威力 + * @param rad 効果半径 + * @return 作用が実際にあった場合TRUEを返す */ bool unlite_area(int dam, int rad) { @@ -4553,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); @@ -4564,11 +4647,19 @@ bool unlite_area(int dam, int rad) -/* - * Cast a ball spell +/*! + * @brief ボール系スペルの発動 / Cast a ball spell + * @param typ 効果属性 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @param rad 半径 + * @return 作用が実際にあった場合TRUEを返す + * @details + *
  * Stop if we hit a monster, act as a "ball"
  * Allow "target" mode to pass over monsters
  * Affect grids, objects, and monsters
+ * 
*/ bool fire_ball(int typ, int dir, int dam, int rad) { @@ -4578,8 +4669,8 @@ bool fire_ball(int typ, int dir, int dam, int rad) 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()) @@ -4594,11 +4685,20 @@ bool fire_ball(int typ, int dir, int dam, int rad) } -/* - * Cast a ball spell + +/*! + * @brief ロケット系スペルの発動(詳細な差は確認中) / Cast a ball spell + * @param typ 効果属性 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @param rad 半径 + * @return 作用が実際にあった場合TRUEを返す + * @details + *
  * Stop if we hit a monster, act as a "ball"
  * Allow "target" mode to pass over monsters
  * Affect grids, objects, and monsters
+ * 
*/ bool fire_rocket(int typ, int dir, int dam, int rad) { @@ -4607,8 +4707,8 @@ bool fire_rocket(int typ, int dir, int dam, int rad) int 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()) @@ -4622,11 +4722,19 @@ bool fire_rocket(int typ, int dir, int dam, int rad) } -/* - * Cast a ball spell +/*! + * @brief ボール(ハイド)系スペルの発動 / Cast a ball spell + * @param typ 効果属性 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @param rad 半径 + * @return 作用が実際にあった場合TRUEを返す + * @details + *
  * Stop if we hit a monster, act as a "ball"
  * Allow "target" mode to pass over monsters
  * Affect grids, objects, and monsters
+ * 
*/ bool fire_ball_hide(int typ, int dir, int dam, int rad) { @@ -4635,8 +4743,8 @@ bool fire_ball_hide(int typ, int dir, int dam, int rad) int 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()) @@ -4651,13 +4759,23 @@ 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) { @@ -4668,6 +4786,16 @@ bool fire_meteor(int who, int typ, int y, int x, int dam, int rad) } +/*! + * @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; @@ -4682,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" */ @@ -4692,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++) @@ -4721,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) { @@ -4738,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]; @@ -4757,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.")); @@ -4790,8 +4920,13 @@ 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) { @@ -4801,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()) @@ -4816,10 +4951,17 @@ 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) { @@ -4829,10 +4971,17 @@ bool fire_bolt(int typ, int dir, int dam) } -/* - * 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) { @@ -4841,8 +4990,18 @@ bool fire_beam(int typ, int dir, int dam) } -/* - * 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) { @@ -4856,9 +5015,11 @@ 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) { @@ -4866,96 +5027,163 @@ bool lite_line(int dir, int dam) return (project_hook(GF_LITE_WEAK, dir, dam, flg)); } - +/*! + * @brief 吸血ボルト処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + */ bool drain_life(int dir, int dam) { int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_OLD_DRAIN, dir, dam, flg)); } - +/*! + * @brief 岩石溶解処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + */ bool wall_to_mud(int dir, int dam) { int 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; 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; 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; return (project_hook(GF_KILL_TRAP, dir, 0, flg)); } - +/*! + * @brief モンスター回復処理 + * @param dir 方向(5ならばグローバル変数 target_col/target_row の座標を目標にする) + * @param dam 威力 + * @return 作用が実際にあった場合TRUEを返す + */ bool heal_monster(int dir, int dam) { int 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; 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; 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; 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; 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; 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; @@ -4965,70 +5193,104 @@ bool poly_monster(int dir, int power) 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; 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; 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; 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; 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)); + 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; 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)); + 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)); + 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; - 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); @@ -5039,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)); + 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)); + 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)); + 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; return (project(who, 5, y, x, 0, GF_ANIM_DEAD, flg, -1)); } - +/*! + * @brief 混沌招来処理 + * @return 作用が実際にあった場合TRUEを返す + */ void call_chaos(void) { int Chaos_type, dummy, dir; @@ -5077,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, @@ -5114,11 +5397,16 @@ 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) { @@ -5134,7 +5422,7 @@ 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: @@ -5142,7 +5430,7 @@ bool activate_ty_curse(bool stop_ty, int *count) { int 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; } @@ -5151,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: @@ -5159,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; @@ -5167,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...")); @@ -5204,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; } @@ -5227,12 +5515,18 @@ 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; + DEPTH summon_lev; u32b mode = PM_ALLOW_GROUP; bool pet = FALSE; @@ -5310,8 +5604,14 @@ 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)); @@ -5335,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; @@ -5358,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 { @@ -5368,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; } @@ -5380,8 +5683,10 @@ void wall_breaker(void) } -/* - * Confuse monsters +/*! + * @brief パニック・モンスター効果(プレイヤー視界範囲内) / Confuse monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ bool confuse_monsters(int dam) { @@ -5389,8 +5694,10 @@ bool confuse_monsters(int dam) } -/* - * Charm monsters +/*! + * @brief チャーム・モンスター効果(プレイヤー視界範囲内) / Charm monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ bool charm_monsters(int dam) { @@ -5398,8 +5705,10 @@ bool charm_monsters(int dam) } -/* - * Charm animals +/*! + * @brief 動物魅了効果(プレイヤー視界範囲内) / Charm Animals + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ bool charm_animals(int dam) { @@ -5407,8 +5716,10 @@ bool charm_animals(int dam) } -/* - * Stun monsters +/*! + * @brief モンスター朦朧効果(プレイヤー視界範囲内) / Stun monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ bool stun_monsters(int dam) { @@ -5416,8 +5727,10 @@ bool stun_monsters(int dam) } -/* - * Stasis monsters +/*! + * @brief モンスター停止効果(プレイヤー視界範囲内) / Stasis monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ bool stasis_monsters(int dam) { @@ -5425,8 +5738,10 @@ bool stasis_monsters(int dam) } -/* - * Mindblast monsters +/*! + * @brief モンスター精神攻撃効果(プレイヤー視界範囲内) / Mindblast monsters + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ bool mindblast_monsters(int dam) { @@ -5434,8 +5749,10 @@ bool mindblast_monsters(int dam) } -/* - * Banish all monsters +/*! + * @brief モンスター追放効果(プレイヤー視界範囲内) / Banish all monsters + * @param dist 効力(距離) + * @return 作用が実際にあった場合TRUEを返す */ bool banish_monsters(int dist) { @@ -5443,8 +5760,10 @@ bool banish_monsters(int dist) } -/* - * Turn evil +/*! + * @brief 邪悪退散効果(プレイヤー視界範囲内) / Turn evil + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ bool turn_evil(int dam) { @@ -5452,8 +5771,10 @@ bool turn_evil(int dam) } -/* - * Turn everyone +/*! + * @brief 全モンスター退散効果(プレイヤー視界範囲内) / Turn everyone + * @param dam 効力 + * @return 作用が実際にあった場合TRUEを返す */ bool turn_monsters(int dam) { @@ -5461,50 +5782,80 @@ bool turn_monsters(int 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; 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; 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; 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; 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; return (project_hook(GF_CONTROL_LIVING, dir, plev, flg)); } - +/*! + * @brief 変わり身処理 + * @param success 判定成功上の処理ならばTRUE + * @return 作用が実際にあった場合TRUEを返す + */ bool kawarimi(bool success) { object_type forge; @@ -5523,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); @@ -5553,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) { @@ -5573,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()) @@ -5585,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++) @@ -5669,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) {