OSDN Git Service

Made changes to whitespace to match what's in the 2.2.2 refactoring branch.
[hengbandforosx/hengbandosx.git] / src / xtra2.c
index bb344df..33deb9f 100644 (file)
 #include "player-move.h"
 #include "monster-status.h"
 
-#define REWARD_CHANCE 10
-
-
-
 /*!
  * @brief コンソール上におけるマップ表示の左上位置を返す /
  * Calculates current boundaries Called below and from "do_cmd_locate()".
@@ -171,7 +167,6 @@ void verify_panel(void)
        /* Hack -- optional disturb on "panel change" */
        if (disturb_panel && !center_player) disturb(FALSE, FALSE);
 
-       /* Recalculate the boundaries */
        panel_bounds_center();
 
        p_ptr->update |= (PU_MONSTERS);
@@ -180,96 +175,8 @@ void verify_panel(void)
 }
 
 
-/*
- * Monster health description
- */
-concptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
-{
-       monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
-       bool living;
-       int perc;
-       concptr desc;
-       concptr attitude;
-       concptr clone;
-
-       /* Determine if the monster is "living" */
-       living = monster_living(m_ptr->ap_r_idx);
-
-       /* Calculate a health "percentage" */
-       perc = m_ptr->maxhp > 0 ? 100L * m_ptr->hp / m_ptr->maxhp : 0;
-
-       /* Healthy monsters */
-       if (m_ptr->hp >= m_ptr->maxhp)
-       {
-               desc = living ? _("無傷", "unhurt") : _("無ダメージ", "undamaged");
-       }
-
-       else if (perc >= 60)
-       {
-               desc = living ? _("軽傷", "somewhat wounded") : _("小ダメージ", "somewhat damaged");
-       }
-
-       else if (perc >= 25)
-       {
-               desc = living ? _("負傷", "wounded") : _("中ダメージ", "damaged");
-       }
-
-       else if (perc >= 10)
-       {
-               desc = living ? _("重傷", "badly wounded") : _("大ダメージ", "badly damaged");
-       }
-
-       else 
-       {
-               desc = living ? _("半死半生", "almost dead") : _("倒れかけ", "almost destroyed");
-       }
-
-       /* Need attitude information? */
-       if (!(mode & 0x01))
-       {
-               /* Full information is not needed */
-               attitude = "";
-       }
-       else if (is_pet(m_ptr))
-       {
-               attitude = _(", ペット", ", pet");
-       }
-       else if (is_friendly(m_ptr))
-       {
-               attitude = _(", 友好的", ", friendly");
-       }
-       else
-       {
-               attitude = _("", "");
-       }
-
-       /* Clone monster? */
-       if (m_ptr->smart & SM_CLONED)
-       {
-               clone = ", clone";
-       }
-       else
-       {
-               clone = "";
-       }
-
-       /* Display monster's level --- idea borrowed from ToME */
-       if (ap_r_ptr->r_tkills && !(m_ptr->mflag2 & MFLAG2_KAGE))
-       {
-               return format(_("レベル%d, %s%s%s", "Level %d, %s%s%s"), ap_r_ptr->level, desc, attitude, clone);
-       }
-       else 
-       {
-               return format(_("レベル???, %s%s%s", "Level ???, %s%s%s"), desc, attitude, clone);
-       }
-
-}
-
-
-
 /*** Targeting Code ***/
 
-
 /*
  * Determine is a monster makes a reasonable target
  *
@@ -345,133 +252,6 @@ bool target_okay(void)
 
 
 /*
- * Sorting hook -- comp function -- by "distance to player"
- *
- * We use "u" and "v" to point to arrays of "x" and "y" positions,
- * and sort the arrays by double-distance to the player.
- */
-static bool ang_sort_comp_distance(vptr u, vptr v, int a, int b)
-{
-       POSITION *x = (POSITION*)(u);
-       POSITION *y = (POSITION*)(v);
-
-       POSITION da, db, kx, ky;
-
-       /* Absolute distance components */
-       kx = x[a]; kx -= p_ptr->x; kx = ABS(kx);
-       ky = y[a]; ky -= p_ptr->y; ky = ABS(ky);
-
-       /* Approximate Double Distance to the first point */
-       da = ((kx > ky) ? (kx + kx + ky) : (ky + ky + kx));
-
-       /* Absolute distance components */
-       kx = x[b]; kx -= p_ptr->x; kx = ABS(kx);
-       ky = y[b]; ky -= p_ptr->y; ky = ABS(ky);
-
-       /* Approximate Double Distance to the first point */
-       db = ((kx > ky) ? (kx + kx + ky) : (ky + ky + kx));
-
-       /* Compare the distances */
-       return (da <= db);
-}
-
-
-/*
- * Sorting hook -- comp function -- by importance level of grids
- *
- * We use "u" and "v" to point to arrays of "x" and "y" positions,
- * and sort the arrays by level of monster
- */
-static bool ang_sort_comp_importance(vptr u, vptr v, int a, int b)
-{
-       POSITION *x = (POSITION*)(u);
-       POSITION *y = (POSITION*)(v);
-       grid_type *ca_ptr = &current_floor_ptr->grid_array[y[a]][x[a]];
-       grid_type *cb_ptr = &current_floor_ptr->grid_array[y[b]][x[b]];
-       monster_type *ma_ptr = &current_floor_ptr->m_list[ca_ptr->m_idx];
-       monster_type *mb_ptr = &current_floor_ptr->m_list[cb_ptr->m_idx];
-       monster_race *ap_ra_ptr, *ap_rb_ptr;
-
-       /* The player grid */
-       if (y[a] == p_ptr->y && x[a] == p_ptr->x) return TRUE;
-       if (y[b] == p_ptr->y && x[b] == p_ptr->x) return FALSE;
-
-       /* Extract monster race */
-       if (ca_ptr->m_idx && ma_ptr->ml) ap_ra_ptr = &r_info[ma_ptr->ap_r_idx];
-       else ap_ra_ptr = NULL;
-       if (cb_ptr->m_idx && mb_ptr->ml) ap_rb_ptr = &r_info[mb_ptr->ap_r_idx];
-       else ap_rb_ptr = NULL;
-
-       if (ap_ra_ptr && !ap_rb_ptr) return TRUE;
-       if (!ap_ra_ptr && ap_rb_ptr) return FALSE;
-
-       /* Compare two monsters */
-       if (ap_ra_ptr && ap_rb_ptr)
-       {
-               /* Unique monsters first */
-               if ((ap_ra_ptr->flags1 & RF1_UNIQUE) && !(ap_rb_ptr->flags1 & RF1_UNIQUE)) return TRUE;
-               if (!(ap_ra_ptr->flags1 & RF1_UNIQUE) && (ap_rb_ptr->flags1 & RF1_UNIQUE)) return FALSE;
-
-               /* Shadowers first (あやしい影) */
-               if ((ma_ptr->mflag2 & MFLAG2_KAGE) && !(mb_ptr->mflag2 & MFLAG2_KAGE)) return TRUE;
-               if (!(ma_ptr->mflag2 & MFLAG2_KAGE) && (mb_ptr->mflag2 & MFLAG2_KAGE)) return FALSE;
-
-               /* Unknown monsters first */
-               if (!ap_ra_ptr->r_tkills && ap_rb_ptr->r_tkills) return TRUE;
-               if (ap_ra_ptr->r_tkills && !ap_rb_ptr->r_tkills) return FALSE;
-
-               /* Higher level monsters first (if known) */
-               if (ap_ra_ptr->r_tkills && ap_rb_ptr->r_tkills)
-               {
-                       if (ap_ra_ptr->level > ap_rb_ptr->level) return TRUE;
-                       if (ap_ra_ptr->level < ap_rb_ptr->level) return FALSE;
-               }
-
-               /* Sort by index if all conditions are same */
-               if (ma_ptr->ap_r_idx > mb_ptr->ap_r_idx) return TRUE;
-               if (ma_ptr->ap_r_idx < mb_ptr->ap_r_idx) return FALSE;
-       }
-
-       /* An object get higher priority */
-       if (current_floor_ptr->grid_array[y[a]][x[a]].o_idx && !current_floor_ptr->grid_array[y[b]][x[b]].o_idx) return TRUE;
-       if (!current_floor_ptr->grid_array[y[a]][x[a]].o_idx && current_floor_ptr->grid_array[y[b]][x[b]].o_idx) return FALSE;
-
-       /* Priority from the terrain */
-       if (f_info[ca_ptr->feat].priority > f_info[cb_ptr->feat].priority) return TRUE;
-       if (f_info[ca_ptr->feat].priority < f_info[cb_ptr->feat].priority) return FALSE;
-
-       /* If all conditions are same, compare distance */
-       return ang_sort_comp_distance(u, v, a, b);
-}
-
-
-/*
- * Sorting hook -- swap function -- by "distance to player"
- *
- * We use "u" and "v" to point to arrays of "x" and "y" positions,
- * and sort the arrays by distance to the player.
- */
-static void ang_sort_swap_distance(vptr u, vptr v, int a, int b)
-{
-       POSITION *x = (POSITION*)(u);
-       POSITION *y = (POSITION*)(v);
-
-       POSITION temp;
-
-       /* Swap "x" */
-       temp = x[a];
-       x[a] = x[b];
-       x[b] = temp;
-
-       /* Swap "y" */
-       temp = y[a];
-       y[a] = y[b];
-       y[b] = temp;
-}
-
-
-
-/*
  * Hack -- help "select" a location (see below)
  */
 static POSITION_IDX target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx)
@@ -496,7 +276,6 @@ static POSITION_IDX target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION
                if (dx && (x3 * dx <= 0)) continue;
                if (dy && (y3 * dy <= 0)) continue;
 
-               /* Absolute distance */
                x4 = ABS(x3);
                y4 = ABS(y3);
 
@@ -508,11 +287,7 @@ static POSITION_IDX target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION
                v = ((x4 > y4) ? (x4 + x4 + y4) : (y4 + y4 + x4));
 
                /* Penalize location */
-
-               /* Track best */
                if ((b_i >= 0) && (v >= b_v)) continue;
-
-               /* Track best */
                b_i = i; b_v = v;
        }
        return (b_i);
@@ -527,16 +302,13 @@ static bool target_set_accept(POSITION y, POSITION x)
        grid_type *g_ptr;
        OBJECT_IDX this_o_idx, next_o_idx = 0;
 
-       /* Bounds */
        if (!(in_bounds(y, x))) return (FALSE);
 
        /* Player grid is always interesting */
        if (player_bold(y, x)) return (TRUE);
 
-       /* Handle hallucination */
        if (p_ptr->image) return (FALSE);
 
-       /* Examine the grid */
        g_ptr = &current_floor_ptr->grid_array[y][x];
 
        /* Visible monsters */
@@ -630,20 +402,13 @@ static void target_set_prepare(BIT_FLAGS mode)
        /* Set the sort hooks */
        if (mode & (TARGET_KILL))
        {
-               /* Target the nearest monster for shooting */
-               ang_sort_comp = ang_sort_comp_distance;
-               ang_sort_swap = ang_sort_swap_distance;
+               ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n, ang_sort_comp_distance, ang_sort_swap_distance);
        }
        else
        {
-               /* Look important grids first in Look command */
-               ang_sort_comp = ang_sort_comp_importance;
-               ang_sort_swap = ang_sort_swap_distance;
+               ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n, ang_sort_comp_importance, ang_sort_swap_distance);
        }
 
-       /* Sort the positions */
-       ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n);
-
        if (p_ptr->riding && target_pet && (tmp_pos.n > 1) && (mode & (TARGET_KILL)))
        {
                POSITION tmp;
@@ -1985,7 +1750,7 @@ bool get_direction(DIRECTION *dp, bool allow_under, bool with_steed)
                        monster_desc(m_name, m_ptr, 0);
                        if (MON_CONFUSED(m_ptr))
                        {
-                               msg_format(_("%sは混乱している。", "%^s is confusing."), m_name);
+                               msg_format(_("%sは混乱している。", "%^s is confused."), m_name);
                        }
                        else
                        {
@@ -2130,7 +1895,7 @@ bool get_rep_dir(DIRECTION *dp, bool under)
                        monster_desc(m_name, m_ptr, 0);
                        if (MON_CONFUSED(m_ptr))
                        {
-                               msg_format(_("%sは混乱している。", "%^s is confusing."), m_name);
+                               msg_format(_("%sは混乱している。", "%^s is confused."), m_name);
                        }
                        else
                        {
@@ -2158,16 +1923,13 @@ static bool tgt_pt_accept(POSITION y, POSITION x)
 {
        grid_type *g_ptr;
 
-       /* Bounds */
        if (!(in_bounds(y, x))) return (FALSE);
 
        /* Player grid is always interesting */
        if ((y == p_ptr->y) && (x == p_ptr->x)) return (TRUE);
 
-       /* Handle hallucination */
        if (p_ptr->image) return (FALSE);
 
-       /* Examine the grid */
        g_ptr = &current_floor_ptr->grid_array[y][x];
 
        /* Interesting memorized features */
@@ -2214,12 +1976,8 @@ static void tgt_pt_prepare(void)
                }
        }
 
-       /* Target the nearest monster for shooting */
-       ang_sort_comp = ang_sort_comp_distance;
-       ang_sort_swap = ang_sort_swap_distance;
-
        /* Sort the positions */
-       ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n);
+       ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n, ang_sort_comp_distance, ang_sort_swap_distance);
 }
 
 /*