-/*!
+/*!
* @file cave.c
- * @brief ¥À¥ó¥¸¥ç¥ó¤Î´ðÁÃÉôʬ¼ÂÁõ(¼ç¤Ë¥Þ¥¹¤Î¼ÂÁõ) / low level dungeon routines -BEN-
+ * @brief ダンジョンの基礎部分実装(主にマスの実装) / low level dungeon routines -BEN-
* @date 2013/12/30
* @author
* Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
* Support for Adam Bolt's tileset, lighting and transparency effects\n
* by Robert Ruehlmann (rr9@angband.org)\n
* \n
- * 2013 Deskull Doxygen¸þ¤±¤Î¥³¥á¥ó¥ÈÀ°Íý\n
+ * 2013 Deskull Doxygen向けのコメント整理\n
*/
#include "angband.h"
+#include "world.h"
+#include "projection.h"
-static byte display_autopick; /*!< ¼«Æ°½¦¤¤¾õÂÖ¤ÎÀßÄê¥Õ¥é¥° */
+static byte display_autopick; /*!< è\87ªå\8b\95æ\8b¾ã\81\84ç\8a¶æ\85\8bã\81®è¨å®\9aã\83\95ã\83©ã\82° */
static int match_autopick;
-static object_type *autopick_obj; /*!< ³Æ¼ï¼«Æ°½¦¤¤½èÍý»þ¤Ë»È¤¦¥ª¥Ö¥¸¥§¥¯¥È¥Ý¥¤¥ó¥¿ */
-static int feat_priority; /*!< ¥Þ¥Ã¥×½Ì¾®É½¼¨»þ¤Ëɽ¼¨¤¹¤Ù¤ÃÏ·Á¤ÎÍ¥ÀèÅÙ¤òÊݴɤ¹¤ë */
+static object_type *autopick_obj; /*!< å\90\84種è\87ªå\8b\95æ\8b¾ã\81\84å\87¦ç\90\86æ\99\82ã\81«ä½¿ã\81\86ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\83\9dã\82¤ã\83³ã\82¿ */
+static int feat_priority; /*!< マップ縮小表示時に表示すべき地形の優先度を保管する */
/*!
- * @brief 2ÅÀ´Ö¤Îµ÷Î¥¤ò¥Ë¥å¡¼¥È¥ó¡¦¥é¥×¥½¥óË¡¤Ç»»½Ð¤¹¤ë / Distance between two points via Newton-Raphson technique
- * @param y1 1ÅÀÌܤÎyºÂɸ
- * @param x1 1ÅÀÌܤÎxºÂɸ
- * @param y2 2ÅÀÌܤÎyºÂɸ
- * @param x2 2ÅÀÌܤÎxºÂɸ
- * @return 2ÅÀ´Ö¤Îµ÷Î¥
+ * @brief 2点間の距離をニュートン・ラプソン法で算出する / Distance between two points via Newton-Raphson technique
+ * @param y1 1点目のy座標
+ * @param x1 1点目のx座標
+ * @param y2 2点目のy座標
+ * @param x2 2点目のx座標
+ * @return 2点間の距離
*/
-int distance (int y1, int x1, int y2, int x2)
+POSITION distance (POSITION y1, POSITION x1, POSITION y2, POSITION x2)
{
- int dy = (y1 > y2) ? (y1 - y2) : (y2 - y1);
- int dx = (x1 > x2) ? (x1 - x2) : (x2 - x1);
+ POSITION dy = (y1 > y2) ? (y1 - y2) : (y2 - y1);
+ POSITION dx = (x1 > x2) ? (x1 - x2) : (x2 - x1);
/* Squared distance */
- int target = (dy * dy) + (dx * dx);
+ POSITION target = (dy * dy) + (dx * dx);
/* Approximate distance: hypot(dy,dx) = max(dy,dx) + min(dy,dx) / 2 */
- int d = (dy > dx) ? (dy + (dx>>1)) : (dx + (dy>>1));
+ POSITION d = (dy > dx) ? (dy + (dx>>1)) : (dx + (dy>>1));
- int err;
+ POSITION err;
/* Simple case */
if (!dy || !dx) return d;
}
/*!
- * @brief ÃÏ·Á¤¬æ«»ý¤Á¤Ç¤¢¤ë¤«¤ÎȽÄê¤ò¹Ô¤¦¡£ / Return TRUE if the given feature is a trap
- * @param feat ÃÏ·Á¾ðÊó¤ÎID
- * @return æ«»ý¤Á¤ÎÃÏ·Á¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
+ * @brief 地形が罠持ちであるかの判定を行う。 / Return TRUE if the given feature is a trap
+ * @param feat 地形情報のID
+ * @return 罠持ちの地形ならばTRUEを返す。
*/
-bool is_trap(int feat)
+bool is_trap(FEAT_IDX feat)
{
return have_flag(f_info[feat].flags, FF_TRAP);
}
/*!
- * @brief ¥Þ¥¹¤Ë´ÇÇ˺ѤߤÎ櫤¬¤¢¤ë¤«¤ÎȽÄê¤ò¹Ô¤¦¡£ / Return TRUE if the given grid is a known trap
- * @param c_ptr ¥Þ¥¹¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
- * @return ´ÇÇ˺ѤߤÎ櫤¬¤¢¤ë¤Ê¤éTRUE¤òÊÖ¤¹¡£
+ * @brief マスに看破済みの罠があるかの判定を行う。 / Return TRUE if the given grid is a known trap
+ * @param c_ptr ã\83\9eã\82¹æ§\8bé\80 ä½\93ã\81®å\8f\82ç\85§ã\83\9dã\82¤ã\83³ã\82¿
+ * @return 看破済みの罠があるならTRUEを返す。
*/
bool is_known_trap(cave_type *c_ptr)
{
}
/*!
- * @brief ÃÏ·Á¤¬ÊĤ¸¤¿¥É¥¢¤Ç¤¢¤ë¤«¤ÎȽÄê¤ò¹Ô¤¦¡£ / Return TRUE if the given grid is a closed door
- * @param feat ÃÏ·Á¾ðÊó¤ÎID
- * @return ÊĤ¸¤¿¥É¥¢¤Î¤¢¤ëÃÏ·Á¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
+ * @brief 地形が閉じたドアであるかの判定を行う。 / Return TRUE if the given grid is a closed door
+ * @param feat 地形情報のID
+ * @return 閉じたドアのある地形ならばTRUEを返す。
*/
-bool is_closed_door(int feat)
+bool is_closed_door(FEAT_IDX feat)
{
feature_type *f_ptr = &f_info[feat];
}
/*!
- * @brief ¥Þ¥¹¤Ë±£¤µ¤ì¤¿¥É¥¢¤¬¤¢¤ë¤«¤ÎȽÄê¤ò¹Ô¤¦¡£ / Return TRUE if the given grid is a hidden closed door
- * @param c_ptr ¥Þ¥¹¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
- * @return ±£¤µ¤ì¤¿¥É¥¢¤¬¤¢¤ë¤Ê¤éTRUE¤òÊÖ¤¹¡£
+ * @brief マスに隠されたドアがあるかの判定を行う。 / Return TRUE if the given grid is a hidden closed door
+ * @param c_ptr ã\83\9eã\82¹æ§\8bé\80 ä½\93ã\81®å\8f\82ç\85§ã\83\9dã\82¤ã\83³ã\82¿
+ * @return 隠されたドアがあるならTRUEを返す。
*/
bool is_hidden_door(cave_type *c_ptr)
{
}
/*!
- * @brief LOS(Line Of Sight / »ëÀþ¤¬Ä̤äƤ¤¤ë¤«)¤ÎȽÄê¤ò¹Ô¤¦¡£
- * @param y1 »ÏÅÀ¤ÎyºÂɸ
- * @param x1 »ÏÅÀ¤ÎxºÂɸ
- * @param y2 ½ªÅÀ¤ÎyºÂɸ
- * @param x2 ½ªÅÀ¤ÎxºÂɸ
- * @return LOS¤¬Ä̤äƤ¤¤ë¤Ê¤éTRUE¤òÊÖ¤¹¡£
- * @detail
+ * @brief LOS(Line Of Sight / 視線が通っているか)の判定を行う。
+ * @param y1 始点のy座標
+ * @param x1 始点のx座標
+ * @param y2 終点のy座標
+ * @param x2 終点のx座標
+ * @return LOSが通っているならTRUEを返す。
+ * @details
* A simple, fast, integer-based line-of-sight algorithm. By Joseph Hall,\n
* 4116 Brewster Drive, Raleigh NC 27606. Email to jnh@ecemwl.ncsu.edu.\n
*\n
*\n
* Use the "update_view()" function to determine player line-of-sight.\n
*/
-bool los(int y1, int x1, int y2, int x2)
+bool los(POSITION y1, POSITION x1, POSITION y2, POSITION x2)
{
/* Delta */
- int dx, dy;
+ POSITION dx, dy;
/* Absolute */
- int ax, ay;
+ POSITION ax, ay;
/* Signs */
- int sx, sy;
+ POSITION sx, sy;
/* Fractions */
- int qx, qy;
+ POSITION qx, qy;
/* Scanners */
- int tx, ty;
+ POSITION tx, ty;
/* Scale factors */
- int f1, f2;
+ POSITION f1, f2;
/* Slope, or 1/Slope, of LOS */
- int m;
+ POSITION m;
/* Extract the offset */
return TRUE;
}
-#define COMPLEX_WALL_ILLUMINATION /*!< ¾ÈÌÀ¾õÂÖ¤òÊɤˤè¤ê±Æ¶Á¤ò¼õ¤±¤ë¡¢¤è¤êÊ£»¨¤ÊȽÄê¤ËÀÚ¤êÂؤ¨¤ë¥Þ¥¯¥í */
+#define COMPLEX_WALL_ILLUMINATION /*!< 照明状態を壁により影響を受ける、より複雑な判定に切り替えるマクロ */
/*!
- * @brief »ØÄꤵ¤ì¤¿ºÂɸ¤Î¥Þ¥¹¤¬¸½ºß¾È¤é¤µ¤ì¤Æ¤¤¤ë¤«¤òÊÖ¤¹¡£ / Check for "local" illumination
- * @param y yºÂɸ
- * @param x xºÂɸ
- * @return »ØÄꤵ¤ì¤¿ºÂɸ¤Ë¾ÈÌÀ¤¬¤«¤«¤Ã¤Æ¤¤¤ë¤Ê¤éTRUE¤òÊÖ¤¹¡£¡£
+ * @brief 指定された座標のマスが現在照らされているかを返す。 / Check for "local" illumination
+ * @param y y座標
+ * @param x x座標
+ * @return 指定された座標に照明がかかっているならTRUEを返す。。
*/
-static bool check_local_illumination(int y, int x)
+static bool check_local_illumination(POSITION y, POSITION x)
{
/* Hack -- move towards player */
- int yy = (y < py) ? (y + 1) : (y > py) ? (y - 1) : y;
- int xx = (x < px) ? (x + 1) : (x > px) ? (x - 1) : x;
+ POSITION yy = (y < p_ptr->y) ? (y + 1) : (y > p_ptr->y) ? (y - 1) : y;
+ POSITION xx = (x < p_ptr->x) ? (x + 1) : (x > p_ptr->x) ? (x - 1) : x;
/* Check for "local" illumination */
}
-/*! ÂоݺÂɸ¤Î¥Þ¥¹¤Î¾ÈÌÀ¾õÂÖ¤ò¹¹¿·¤¹¤ëºÝ¤ÎÊä½õ½èÍý¥Þ¥¯¥í */
+/*! 対象座標のマスの照明状態を更新する際の補助処理マクロ */
#define update_local_illumination_aux(Y, X) \
{ \
if (player_has_los_bold((Y), (X))) \
{ \
/* Update the monster */ \
- if (cave[(Y)][(X)].m_idx) update_mon(cave[(Y)][(X)].m_idx, FALSE); \
+ if (cave[(Y)][(X)].m_idx) update_monster(cave[(Y)][(X)].m_idx, FALSE); \
\
/* Notice and redraw */ \
note_spot((Y), (X)); \
}
/*!
- * @brief »ØÄꤵ¤ì¤¿ºÂɸ¤Î¾ÈÌÀ¾õÂÖ¤ò¹¹¿·¤¹¤ë / Update "local" illumination
- * @param y yºÂɸ
- * @param x xºÂɸ
- * @return ¤Ê¤·
+ * @brief 指定された座標の照明状態を更新する / Update "local" illumination
+ * @param y y座標
+ * @param x x座標
+ * @return なし
*/
-void update_local_illumination(int y, int x)
+void update_local_illumination(POSITION y, POSITION x)
{
- int i, yy, xx;
+ int i;
+ POSITION yy, xx;
if (!in_bounds(y, x)) return;
#ifdef COMPLEX_WALL_ILLUMINATION /* COMPLEX_WALL_ILLUMINATION */
- if ((y != py) && (x != px))
+ if ((y != p_ptr->y) && (x != p_ptr->x))
{
- yy = (y < py) ? (y - 1) : (y + 1);
- xx = (x < px) ? (x - 1) : (x + 1);
+ yy = (y < p_ptr->y) ? (y - 1) : (y + 1);
+ xx = (x < p_ptr->x) ? (x - 1) : (x + 1);
update_local_illumination_aux(yy, xx);
update_local_illumination_aux(y, xx);
update_local_illumination_aux(yy, x);
}
- else if (x != px) /* y == py */
+ else if (x != p_ptr->x) /* y == p_ptr->y */
{
- xx = (x < px) ? (x - 1) : (x + 1);
+ xx = (x < p_ptr->x) ? (x - 1) : (x + 1);
for (i = -1; i <= 1; i++)
{
yy = y + i;
yy = y + 1;
update_local_illumination_aux(yy, x);
}
- else if (y != py) /* x == px */
+ else if (y != p_ptr->y) /* x == p_ptr->x */
{
- yy = (y < py) ? (y - 1) : (y + 1);
+ yy = (y < p_ptr->y) ? (y - 1) : (y + 1);
for (i = -1; i <= 1; i++)
{
xx = x + i;
#else /* COMPLEX_WALL_ILLUMINATION */
- if ((y != py) && (x != px))
+ if ((y != p_ptr->y) && (x != p_ptr->x))
{
- yy = (y < py) ? (y - 1) : (y + 1);
- xx = (x < px) ? (x - 1) : (x + 1);
+ yy = (y < p_ptr->y) ? (y - 1) : (y + 1);
+ xx = (x < p_ptr->x) ? (x - 1) : (x + 1);
update_local_illumination_aux(yy, xx);
}
- else if (x != px) /* y == py */
+ else if (x != p_ptr->x) /* y == p_ptr->y */
{
- xx = (x < px) ? (x - 1) : (x + 1);
+ xx = (x < p_ptr->x) ? (x - 1) : (x + 1);
for (i = -1; i <= 1; i++)
{
yy = y + i;
update_local_illumination_aux(yy, xx);
}
}
- else if (y != py) /* x == px */
+ else if (y != p_ptr->y) /* x == p_ptr->x */
{
- yy = (y < py) ? (y - 1) : (y + 1);
+ yy = (y < p_ptr->y) ? (y - 1) : (y + 1);
for (i = -1; i <= 1; i++)
{
xx = x + i;
/*!
- * @brief »ØÄꤵ¤ì¤¿ºÂɸ¤ò¥×¥ì¥¤¥ä¡¼¤¬»ë³Ð¤Ë¼ý¤á¤é¤ì¤ë¤«¤òÊÖ¤¹¡£ / Can the player "see" the given grid in detail?
- * @param y yºÂɸ
- * @param y xºÂɸ
- * @return »ë³Ð¤Ë¼ý¤á¤é¤ì¤ë¾õÂ֤ʤéTRUE¤òÊÖ¤¹
+ * @brief 指定された座標をプレイヤーが視覚に収められるかを返す。 / Can the player "see" the given grid in detail?
+ * @param y y座標
+ * @param x x座標
+ * @return 視覚に収められる状態ならTRUEを返す
* @details
* He must have vision, illumination, and line of sight.\n
* \n
* "glowing" grid. This prevents the player from being able to "see" the\n
* walls of illuminated rooms from a corridor outside the room.\n
*/
-bool player_can_see_bold(int y, int x)
+bool player_can_see_bold(POSITION y, POSITION x)
{
cave_type *c_ptr;
/* Blind players see nothing */
if (p_ptr->blind) return FALSE;
- /* Access the cave grid */
c_ptr = &cave[y][x];
/* Note that "torch-lite" yields "illumination" */
}
/*!
- * @brief »ØÄꤵ¤ì¤¿ºÂɸ¤ò¥×¥ì¥¤¥ä¡¼¼ý¤á¤é¤ì¤Æ¤¤¤Ê¤¤¾õÂÖ¤«¤É¤¦¤« / Returns true if the player's grid is dark
- * @param y yºÂɸ
- * @param x xºÂɸ
- * @return »ë³Ð¤Ë¼ý¤á¤é¤ì¤Æ¤¤¤Ê¤¤¤Ê¤éTRUE¤òÊÖ¤¹
- * @details player_can_see_bold()´Ø¿ô¤ÎÊÖ¤êÃͤÎÈÝÄê¤òÊÖ¤·¤Æ¤¤¤ë¡£
+ * @brief 指定された座標をプレイヤー収められていない状態かどうか / Returns true if the player's grid is dark
+ * @return 視覚に収められていないならTRUEを返す
+ * @details player_can_see_bold()関数の返り値の否定を返している。
*/
bool no_lite(void)
{
- return (!player_can_see_bold(py, px));
+ return (!player_can_see_bold(p_ptr->y, p_ptr->x));
}
/*!
- * @brief »ØÄꤵ¤ì¤¿ºÂɸ¤¬ÃϿ̤䳬ÃÊÀ¸À®¤ÎÂоݤȤʤë¥Þ¥¹¤«¤òÊÖ¤¹¡£ / Determine if a given location may be "destroyed"
- * @param y yºÂɸ
- * @param x xºÂɸ
- * @return ³Æ¼ï¤ÎÊѹ¹¤¬²Äǽ¤Ê¤éTRUE¤òÊÖ¤¹¡£
+ * @brief 指定された座標が地震や階段生成の対象となるマスかを返す。 / Determine if a given location may be "destroyed"
+ * @param y y座標
+ * @param x x座標
+ * @return 各種の変更が可能ならTRUEを返す。
* @details
- * ¾ò·ï¤Ï±Êµ×ÃÏ·Á¤Ç¤Ê¤¯¡¢¤Ê¤ª¤«¤Ä³ºÅö¤Î¥Þ¥¹¤Ë¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤¬Â¸ºß¤·¤Ê¤¤¤«¡¢¤Ç¤¢¤ë¡£±Ñ¸ì¤Îµì¥³¥á¥ó¥È¤ËÈ¿¤·¤Æ¡öÇ˲õ¡ö¤ÎÍÞ»ßȽÄê¤Ë¤Ï¸½ºß»È¤ï¤ì¤Æ¤¤¤Ê¤¤¡£
+ * 条件は永久地形でなく、なおかつ該当のマスにアーティファクトが存在しないか、である。英語の旧コメントに反して*破壊*の抑止判定には現在使われていない。
*/
-bool cave_valid_bold(int y, int x)
+bool cave_valid_bold(POSITION y, POSITION x)
{
cave_type *c_ptr = &cave[y][x];
-
- s16b this_o_idx, next_o_idx = 0;
-
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
/* Forbid perma-grids */
if (cave_perma_grid(c_ptr)) return (FALSE);
for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
{
object_type *o_ptr;
-
- /* Acquire object */
o_ptr = &o_list[this_o_idx];
/* Acquire next object */
/*!
- * °ìÈÌŪ¤Ë¥â¥ó¥¹¥¿¡¼¥·¥ó¥Ü¥ë¤È¤·¤Æ°·¤ï¤ì¤ëµ¹æ¤òÄêµÁ¤¹¤ë(¸¸³Ð½èÍý¸þ¤±) / Hack -- Legal monster codes
+ * 一般的にモンスターシンボルとして扱われる記号を定義する(幻覚処理向け) / Hack -- Legal monster codes
*/
static char image_monster_hack[] = \
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
/*!
- * °ìÈÌŪ¤Ë¥ª¥Ö¥¸¥§¥¯¥È¥·¥ó¥Ü¥ë¤È¤·¤Æ°·¤ï¤ì¤ëµ¹æ¤òÄêµÁ¤¹¤ë(¸¸³Ð½èÍý¸þ¤±) / Hack -- Legal object codes
+ * 一般的にオブジェクトシンボルとして扱われる記号を定義する(幻覚処理向け) / Hack -- Legal object codes
*/
static char image_object_hack[] = "?/|\\\"!$()_-=[]{},~";
/*!
- * @brief ¥â¥ó¥¹¥¿¡¼¤Îɽ¼¨¤ò¸¸³Ð¾õÂ֤˺¹¤·Âؤ¨¤ë / Mega-Hack -- Hallucinatory monster
- * @param ap ËÜÍè¤Î¿§
- * @param cp ËÜÍè¤Î¥·¥ó¥Ü¥ë
- * @return ¤Ê¤·
+ * @brief モンスターの表示を幻覚状態に差し替える / Mega-Hack -- Hallucinatory monster
+ * @param ap 本来の色
+ * @param cp 本来のシンボル
+ * @return なし
*/
-static void image_monster(byte *ap, char *cp)
+static void image_monster(TERM_COLOR *ap, SYMBOL_CODE *cp)
{
/* Random symbol from set above */
if (use_graphics)
}
/*!
- * @brief ¥ª¥Ö¥¸¥§¥¯¥È¤Îɽ¼¨¤ò¸¸³Ð¾õÂ֤˺¹¤·Âؤ¨¤ë / Hallucinatory object
- * @param ap ËÜÍè¤Î¿§
- * @param cp ËÜÍè¤Î¥·¥ó¥Ü¥ë
- * @return ¤Ê¤·
+ * @brief オブジェクトの表示を幻覚状態に差し替える / Hallucinatory object
+ * @param ap 本来の色
+ * @param cp 本来のシンボル
+ * @return なし
*/
-static void image_object(byte *ap, char *cp)
+static void image_object(TERM_COLOR *ap, SYMBOL_CODE *cp)
{
if (use_graphics)
{
/*!
- * @brief ¥ª¥Ö¥¸¥§¥¯¥È¡õ¥â¥ó¥¹¥¿¡¼¤Îɽ¼¨¤ò¸¸³Ð¾õÂ֤˺¹¤·Âؤ¨¤ë / Hack -- Random hallucination
- * @param ap ËÜÍè¤Î¿§
- * @param cp ËÜÍè¤Î¥·¥ó¥Ü¥ë
- * @return ¤Ê¤·
+ * @brief オブジェクト&モンスターの表示を幻覚状態に差し替える / Hack -- Random hallucination
+ * @param ap 本来の色
+ * @param cp 本来のシンボル
+ * @return なし
*/
-static void image_random(byte *ap, char *cp)
+static void image_random(TERM_COLOR *ap, SYMBOL_CODE *cp)
{
/* Normally, assume monsters */
if (randint0(100) < 75)
}
/*!
- * ¾ÈÌÀ¤Îɽ¸½¤ò¹Ô¤¦¤¿¤á¤Î¿§¹ç¤¤¤Î´Ø·¸¤ò{°Å°Ç»þ, ¾ÈÌÀ»þ} ¤ÇÄêµÁ¤¹¤ë /
+ * 照明の表現を行うための色合いの関係を{暗闇時, 照明時} で定義する /
* This array lists the effects of "brightness" on various "base" colours.\n
*\n
* This is used to do dynamic lighting effects in ascii :-)\n
};
/*!
- * @brief Ä´ººÃæ
- * @todo ¥³¥á¥ó¥È¤òÉղ乤뤳¤È
+ * @brief 調査中
+ * @todo コメントを付加すること
*/
-void apply_default_feat_lighting(byte f_attr[F_LIT_MAX], byte f_char[F_LIT_MAX])
+void apply_default_feat_lighting(TERM_COLOR f_attr[F_LIT_MAX], SYMBOL_CODE f_char[F_LIT_MAX])
{
- byte s_attr = f_attr[F_LIT_STANDARD];
- byte s_char = f_char[F_LIT_STANDARD];
+ TERM_COLOR s_attr = f_attr[F_LIT_STANDARD];
+ SYMBOL_CODE s_char = f_char[F_LIT_STANDARD];
int i;
if (is_ascii_graphics(s_attr)) /* For ASCII */
/*!
- * ¥â¥ó¥¹¥¿¡¼¤Ë¤è¤ê¾ÈÌÀ¤¬¾Ã¤µ¤ì¤Æ¤¤¤ëÃÏ·Á¤«Èݤ«¤òȽÄꤹ¤ë¡£ / Is this grid "darkened" by monster?
+ * モンスターにより照明が消されている地形か否かを判定する。 / Is this grid "darkened" by monster?
*/
#define darkened_grid(C) \
((((C)->info & (CAVE_VIEW | CAVE_LITE | CAVE_MNLT | CAVE_MNDK)) == (CAVE_VIEW | CAVE_MNDK)) && \
/*!
- * @brief M¥³¥Þ¥ó¥É¤Ë¤è¤ë½Ì¾®¥Þ¥Ã¥×¤Îɽ¼¨¤ò¹Ô¤¦ / Extract the attr/char to display at the given (legal) map location
+ * @brief Mコマンドによる縮小マップの表示を行う / Extract the attr/char to display at the given (legal) map location
* @details
* Basically, we "paint" the chosen attr/char in several passes, starting\n
* with any known "terrain features" (defaulting to darkness), then adding\n
* "x_ptr->xxx", is quicker than "x_info[x].xxx", if this is incorrect\n
* then a whole lot of code should be changed... XXX XXX\n
*/
-void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp)
+void map_info(POSITION y, POSITION x, TERM_COLOR *ap, char *cp, TERM_COLOR *tap, SYMBOL_CODE *tcp)
{
/* Get the cave */
cave_type *c_ptr = &cave[y][x];
- s16b this_o_idx, next_o_idx = 0;
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
/* Feature code (applying "mimic" field) */
- s16b feat = get_feat_mimic(c_ptr);
+ FEAT_IDX feat = get_feat_mimic(c_ptr);
/* Access floor */
feature_type *f_ptr = &f_info[feat];
- byte a;
+ TERM_COLOR a;
byte c;
/* Boring grids (floors, etc) */
for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
{
object_type *o_ptr;
-
- /* Acquire object */
o_ptr = &o_list[this_o_idx];
/* Acquire next object */
/* Hack -- hallucination */
if (p_ptr->image) image_object(ap, cp);
- /* Done */
break;
}
}
if (player_bold(y, x))
{
monster_race *r_ptr = &r_info[0];
-
- /* Get the "player" attr */
*ap = r_ptr->x_attr;
-
- /* Get the "player" char */
*cp = r_ptr->x_char;
-
feat_priority = 31;
}
}
/*
* Place an attr/char pair at the given map coordinate, if legal.
*/
-void print_rel(char c, byte a, int y, int x)
+void print_rel(SYMBOL_CODE c, TERM_COLOR a, TERM_LEN y, TERM_LEN x)
{
/* Only do "legal" locations */
if (panel_contains(y, x))
* optimized primarily for the most common cases, that is, for the
* non-marked floor grids.
*/
-void note_spot(int y, int x)
+void note_spot(POSITION y, POSITION x)
{
cave_type *c_ptr = &cave[y][x];
-
- s16b this_o_idx, next_o_idx = 0;
-
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
/* Blind players see nothing */
if (p_ptr->blind) return;
if (view_torch_grids &&
((c_ptr->info & (CAVE_LITE | CAVE_MNLT)) || p_ptr->see_nocto))
{
- /* Memorize */
c_ptr->info |= (CAVE_MARK);
}
/* Option -- memorize all perma-lit floors */
else if (view_perma_grids && ((c_ptr->info & (CAVE_GLOW | CAVE_MNDK)) == CAVE_GLOW))
{
- /* Memorize */
c_ptr->info |= (CAVE_MARK);
}
}
/* Memorize normal grids */
else if (have_flag(f_ptr->flags, FF_LOS))
{
- /* Memorize */
c_ptr->info |= (CAVE_MARK);
}
/* Memorize torch-lit walls */
else if (c_ptr->info & (CAVE_LITE | CAVE_MNLT))
{
- /* Memorize */
c_ptr->info |= (CAVE_MARK);
}
/* Memorize walls seen by noctovision of Ninja */
else if (p_ptr->see_nocto)
{
- /* Memorize */
c_ptr->info |= (CAVE_MARK);
}
/* Memorize certain non-torch-lit wall grids */
else if (check_local_illumination(y, x))
{
- /* Memorize */
c_ptr->info |= (CAVE_MARK);
}
}
void display_dungeon(void)
{
- int x, y;
- byte a;
- char c;
+ TERM_LEN x, y;
+ TERM_COLOR a;
+ SYMBOL_CODE c;
- byte ta;
- char tc;
+ TERM_COLOR ta = 0;
+ SYMBOL_CODE tc = '\0';
- for (x = px - Term->wid / 2 + 1; x <= px + Term->wid / 2; x++)
+ for (x = p_ptr->x - Term->wid / 2 + 1; x <= p_ptr->x + Term->wid / 2; x++)
{
- for (y = py - Term->hgt / 2 + 1; y <= py + Term->hgt / 2; y++)
+ for (y = p_ptr->y - Term->hgt / 2 + 1; y <= p_ptr->y + Term->hgt / 2; y++)
{
if (in_bounds2(y, x))
{
}
/* Hack -- Queue it */
- Term_queue_char(x - px + Term->wid / 2 - 1, y - py + Term->hgt / 2 - 1, a, c, ta, tc);
+ Term_queue_char(x - p_ptr->x + Term->wid / 2 - 1, y - p_ptr->y + Term->hgt / 2 - 1, a, c, ta, tc);
}
else
{
c = f_ptr->x_char[F_LIT_STANDARD];
/* Hack -- Queue it */
- Term_queue_char(x - px + Term->wid / 2 - 1, y - py + Term->hgt / 2 - 1, a, c, ta, tc);
+ Term_queue_char(x - p_ptr->x + Term->wid / 2 - 1, y - p_ptr->y + Term->hgt / 2 - 1, a, c, ta, tc);
}
}
}
*
* This function should only be called on "legal" grids
*/
-void lite_spot(int y, int x)
+void lite_spot(POSITION y, POSITION x)
{
/* Redraw if on screen */
if (panel_contains(y, x) && in_bounds2(y, x))
{
- byte a;
- char c;
+ TERM_COLOR a;
+ SYMBOL_CODE c;
- byte ta;
- char tc;
+ TERM_COLOR ta;
+ SYMBOL_CODE tc;
/* Examine the grid */
map_info(y, x, &a, &c, &ta, &tc);
*/
void prt_map(void)
{
- int x, y;
- int v;
+ POSITION x, y;
+ int v;
/* map bounds */
- s16b xmin, xmax, ymin, ymax;
+ POSITION xmin, xmax, ymin, ymax;
- int wid, hgt;
+ TERM_LEN wid, hgt;
- /* Get size */
Term_get_size(&wid, &hgt);
/* Remove map offset */
/* Scan the columns of row "y" */
for (x = xmin; x <= xmax; x++)
{
- byte a;
- char c;
+ TERM_COLOR a;
+ SYMBOL_CODE c;
- byte ta;
- char tc;
+ TERM_COLOR ta;
+ SYMBOL_CODE tc;
/* Determine what is there */
map_info(y, x, &a, &c, &ta, &tc);
}
/* Display player */
- lite_spot(py, px);
+ lite_spot(p_ptr->y, p_ptr->x);
/* Restore the cursor */
(void)Term_set_cursor(v);
/*
* print project path
*/
-void prt_path(int y, int x)
+void prt_path(POSITION y, POSITION x)
{
int i;
int path_n;
u16b path_g[512];
- int default_color = TERM_SLATE;
+ byte_hack default_color = TERM_SLATE;
if (!display_path) return;
if (-1 == project_length)
return;
/* Get projection path */
- path_n = project_path(path_g, (project_length ? project_length : MAX_RANGE), py, px, y, x, PROJECT_PATH|PROJECT_THRU);
+ path_n = project_path(path_g, (project_length ? project_length : MAX_RANGE), p_ptr->y, p_ptr->x, y, x, PROJECT_PATH|PROJECT_THRU);
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Redraw stuff */
- redraw_stuff();
+ handle_stuff();
/* Draw path */
for (i = 0; i < path_n; i++)
{
- int ny = GRID_Y(path_g[i]);
- int nx = GRID_X(path_g[i]);
+ POSITION ny = GRID_Y(path_g[i]);
+ POSITION nx = GRID_X(path_g[i]);
cave_type *c_ptr = &cave[ny][nx];
if (panel_contains(ny, nx))
{
- byte a = default_color;
+ TERM_COLOR a = default_color;
char c;
- byte ta;
- char tc;
+ TERM_COLOR ta = default_color;
+ char tc = '*';
if (c_ptr->m_idx && m_list[c_ptr->m_idx].ml)
{
}
-static cptr simplify_list[][2] =
+static concptr simplify_list[][2] =
{
#ifdef JP
- {"¤ÎËâË¡½ñ", ""},
+ {"の魔法書", ""},
{NULL, NULL}
#else
{"^Ring of ", "="},
char buf[MAX_NLEN];
char *c = buf;
int len = 0;
- byte attr;
+ TERM_COLOR attr;
object_desc(buf, o_ptr, (OD_NO_FLAVOR | OD_OMIT_PREFIX | OD_NAME_ONLY));
attr = tval_to_attr[o_ptr->tval % 128];
if (p_ptr->image)
{
attr = TERM_WHITE;
-#ifdef JP
- strcpy(buf, "²¿¤«´ñ̯¤Êʪ");
-#else
- strcpy(buf, "something strange");
-#endif
+ strcpy(buf, _("何か奇妙な物", "something strange"));
}
for (c = buf; *c; c++)
int i;
for (i = 0; simplify_list[i][1]; i++)
{
- cptr org_w = simplify_list[i][0];
+ concptr org_w = simplify_list[i][0];
if (*org_w == '^')
{
if (!strncmp(c, org_w, strlen(org_w)))
{
char *s = c;
- cptr tmp = simplify_list[i][1];
+ concptr tmp = simplify_list[i][1];
while (*tmp)
*s++ = *tmp++;
tmp = c + strlen(org_w);
c = buf;
len = 0;
- /* Ⱦ³Ñ 12 ʸ»úʬ¤ÇÀÚ¤ë */
+ /* 半角 12 文字分で切る */
while(*c)
{
#ifdef JP
{
int i, j, x, y;
- byte ta;
- char tc;
+ TERM_COLOR ta;
+ SYMBOL_CODE tc;
byte tp;
- byte **bigma;
- char **bigmc;
+ TERM_COLOR **bigma;
+ SYMBOL_CODE **bigmc;
byte **bigmp;
- byte **ma;
- char **mc;
+ TERM_COLOR **ma;
+ SYMBOL_CODE **mc;
byte **mp;
/* Save lighting effects */
bool old_view_special_lite = view_special_lite;
bool old_view_granite_lite = view_granite_lite;
- int hgt, wid, yrat, xrat;
+ TERM_LEN hgt, wid, yrat, xrat;
int **match_autopick_yx;
object_type ***object_autopick_yx;
- /* Get size */
Term_get_size(&wid, &hgt);
hgt -= 2;
wid -= 14;
view_granite_lite = FALSE;
/* Allocate the maps */
- C_MAKE(ma, (hgt + 2), byte_ptr);
+ C_MAKE(ma, (hgt + 2), TERM_COLOR *);
C_MAKE(mc, (hgt + 2), char_ptr);
C_MAKE(mp, (hgt + 2), byte_ptr);
C_MAKE(match_autopick_yx, (hgt + 2), sint_ptr);
for (y = 0; y < (hgt + 2); y++)
{
/* Allocate one row each array */
- C_MAKE(ma[y], (wid + 2), byte);
+ C_MAKE(ma[y], (wid + 2), TERM_COLOR);
C_MAKE(mc[y], (wid + 2), char);
C_MAKE(mp[y], (wid + 2), byte);
C_MAKE(match_autopick_yx[y], (wid + 2), int);
}
/* Allocate the maps */
- C_MAKE(bigma, (cur_hgt + 2), byte_ptr);
+ C_MAKE(bigma, (cur_hgt + 2), TERM_COLOR *);
C_MAKE(bigmc, (cur_hgt + 2), char_ptr);
C_MAKE(bigmp, (cur_hgt + 2), byte_ptr);
for (y = 0; y < (cur_hgt + 2); y++)
{
/* Allocate one row each array */
- C_MAKE(bigma[y], (cur_wid + 2), byte);
+ C_MAKE(bigma[y], (cur_wid + 2), TERM_COLOR);
C_MAKE(bigmc[y], (cur_wid + 2), char);
C_MAKE(bigmp[y], (cur_wid + 2), byte);
{
for (j = 0; j < cur_hgt; ++j)
{
- /* Location */
x = i / xrat + 1;
y = j / yrat + 1;
map_info(j, i, &ta, &tc, &ta, &tc);
/* Extract the priority */
- tp = feat_priority;
+ tp = (byte_hack)feat_priority;
if(match_autopick!=-1
&& (match_autopick_yx[y][x] == -1
{
for (i = 0; i < cur_wid; ++i)
{
- /* Location */
x = i / xrat + 1;
y = j / yrat + 1;
}
/* Player location */
- (*cy) = py / yrat + 1 + ROW_MAP;
+ (*cy) = p_ptr->y / yrat + 1 + ROW_MAP;
if (!use_bigtile)
- (*cx) = px / xrat + 1 + COL_MAP;
+ (*cx) = p_ptr->x / xrat + 1 + COL_MAP;
else
- (*cx) = (px / xrat + 1) * 2 + COL_MAP;
+ (*cx) = (p_ptr->x / xrat + 1) * 2 + COL_MAP;
/* Restore lighting effects */
view_special_lite = old_view_special_lite;
for (y = 0; y < (hgt + 2); y++)
{
/* Free one row each array */
- C_KILL(ma[y], (wid + 2), byte);
- C_KILL(mc[y], (wid + 2), char);
+ C_KILL(ma[y], (wid + 2), TERM_COLOR);
+ C_KILL(mc[y], (wid + 2), SYMBOL_CODE);
C_KILL(mp[y], (wid + 2), byte);
C_KILL(match_autopick_yx[y], (wid + 2), int);
C_KILL(object_autopick_yx[y], (wid + 2), object_type *);
}
/* Free each line map */
- C_KILL(ma, (hgt + 2), byte_ptr);
+ C_KILL(ma, (hgt + 2), TERM_COLOR *);
C_KILL(mc, (hgt + 2), char_ptr);
C_KILL(mp, (hgt + 2), byte_ptr);
C_KILL(match_autopick_yx, (hgt + 2), sint_ptr);
for (y = 0; y < (cur_hgt + 2); y++)
{
/* Free one row each array */
- C_KILL(bigma[y], (cur_wid + 2), byte);
- C_KILL(bigmc[y], (cur_wid + 2), char);
+ C_KILL(bigma[y], (cur_wid + 2), TERM_COLOR);
+ C_KILL(bigmc[y], (cur_wid + 2), SYMBOL_CODE);
C_KILL(bigmp[y], (cur_wid + 2), byte);
}
/* Free each line map */
- C_KILL(bigma, (cur_hgt + 2), byte_ptr);
+ C_KILL(bigma, (cur_hgt + 2), TERM_COLOR *);
C_KILL(bigmc, (cur_hgt + 2), char_ptr);
C_KILL(bigmp, (cur_hgt + 2), byte_ptr);
}
/*
* Display a "small-scale" map of the dungeon for the player
*
- * Currently, the "player" is displayed on the map. XXX XXX XXX
+ * Currently, the "player" is displayed on the map.
*/
void do_cmd_view_map(void)
{
int cy, cx;
-
- /* Save the screen */
screen_save();
- /* Note */
-#ifdef JP
-prt("¤ªÂÔ¤Á²¼¤µ¤¤...", 0, 0);
-#else
- prt("Please wait...", 0, 0);
-#endif
+ prt(_("お待ち下さい...", "Please wait..."), 0, 0);
- /* Flush */
Term_fresh();
-
- /* Clear the screen */
Term_clear();
display_autopick = 0;
Term_get_size(&wid, &hgt);
row_message = hgt - 1;
-#ifdef JP
- put_str("²¿¤«¥¡¼¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤('M':½¦¤¦ 'N':ÊüÃÖ 'D':M+N 'K':²õ¤¹¥¢¥¤¥Æ¥à¤òɽ¼¨)", row_message, 1);
-#else
- put_str(" Hit M, N(for ~), K(for !), or D(same as M+N) to display auto-picker items.", row_message, 1);
-#endif
+ put_str(_("何かキーを押してください('M':拾う 'N':放置 'D':M+N 'K':壊すアイテムを表示)",
+ " Hit M, N(for ~), K(for !), or D(same as M+N) to display auto-picker items."), row_message, 1);
/* Hilite the player */
move_cursor(cy, cx);
}
else
{
-#ifdef JP
- put_str("²¿¤«¥¡¼¤ò²¡¤¹¤È¥²¡¼¥à¤ËÌá¤ê¤Þ¤¹", 23, 30);
-#else
- put_str("Hit any key to continue", 23, 30);
-#endif /* Hilite the player */
+ put_str(_("何かキーを押すとゲームに戻ります", "Hit any key to continue"), 23, 30);
+ /* Hilite the player */
move_cursor(cy, cx);
/* Get any key */
inkey();
}
-
- /* Restore the screen */
screen_load();
}
/* Forget "LITE" flag */
cave[y][x].info &= ~(CAVE_LITE);
- /* Redraw */
/* lite_spot(y, x); Perhaps don't need? */
}
/*
- * XXX XXX XXX
- *
* This macro allows us to efficiently add a grid to the "lite" array,
* note that we are never called for illegal grids, or for grids which
* have already been placed into the "lite" array, and we are never
/* forget_lite(); Perhaps don't need? */
/* Add it to later visual update */
- cave_redraw_later(&cave[py][px], py, px);
+ cave_redraw_later(&cave[p_ptr->y][p_ptr->x], p_ptr->y, p_ptr->x);
}
#endif
if (p >= 1)
{
/* Player grid */
- cave_lite_hack(py, px);
+ cave_lite_hack(p_ptr->y, p_ptr->x);
/* Adjacent grid */
- cave_lite_hack(py+1, px);
- cave_lite_hack(py-1, px);
- cave_lite_hack(py, px+1);
- cave_lite_hack(py, px-1);
+ cave_lite_hack(p_ptr->y+1, p_ptr->x);
+ cave_lite_hack(p_ptr->y-1, p_ptr->x);
+ cave_lite_hack(p_ptr->y, p_ptr->x+1);
+ cave_lite_hack(p_ptr->y, p_ptr->x-1);
/* Diagonal grids */
- cave_lite_hack(py+1, px+1);
- cave_lite_hack(py+1, px-1);
- cave_lite_hack(py-1, px+1);
- cave_lite_hack(py-1, px-1);
+ cave_lite_hack(p_ptr->y+1, p_ptr->x+1);
+ cave_lite_hack(p_ptr->y+1, p_ptr->x-1);
+ cave_lite_hack(p_ptr->y-1, p_ptr->x+1);
+ cave_lite_hack(p_ptr->y-1, p_ptr->x-1);
}
/* Radius 2 -- lantern radius */
if (p >= 2)
{
/* South of the player */
- if (cave_los_bold(py + 1, px))
+ if (cave_los_bold(p_ptr->y + 1, p_ptr->x))
{
- cave_lite_hack(py+2, px);
- cave_lite_hack(py+2, px+1);
- cave_lite_hack(py+2, px-1);
+ cave_lite_hack(p_ptr->y+2, p_ptr->x);
+ cave_lite_hack(p_ptr->y+2, p_ptr->x+1);
+ cave_lite_hack(p_ptr->y+2, p_ptr->x-1);
}
/* North of the player */
- if (cave_los_bold(py - 1, px))
+ if (cave_los_bold(p_ptr->y - 1, p_ptr->x))
{
- cave_lite_hack(py-2, px);
- cave_lite_hack(py-2, px+1);
- cave_lite_hack(py-2, px-1);
+ cave_lite_hack(p_ptr->y-2, p_ptr->x);
+ cave_lite_hack(p_ptr->y-2, p_ptr->x+1);
+ cave_lite_hack(p_ptr->y-2, p_ptr->x-1);
}
/* East of the player */
- if (cave_los_bold(py, px + 1))
+ if (cave_los_bold(p_ptr->y, p_ptr->x + 1))
{
- cave_lite_hack(py, px+2);
- cave_lite_hack(py+1, px+2);
- cave_lite_hack(py-1, px+2);
+ cave_lite_hack(p_ptr->y, p_ptr->x+2);
+ cave_lite_hack(p_ptr->y+1, p_ptr->x+2);
+ cave_lite_hack(p_ptr->y-1, p_ptr->x+2);
}
/* West of the player */
- if (cave_los_bold(py, px - 1))
+ if (cave_los_bold(p_ptr->y, p_ptr->x - 1))
{
- cave_lite_hack(py, px-2);
- cave_lite_hack(py+1, px-2);
- cave_lite_hack(py-1, px-2);
+ cave_lite_hack(p_ptr->y, p_ptr->x-2);
+ cave_lite_hack(p_ptr->y+1, p_ptr->x-2);
+ cave_lite_hack(p_ptr->y-1, p_ptr->x-2);
}
}
if (p > 14) p = 14;
/* South-East of the player */
- if (cave_los_bold(py + 1, px + 1))
+ if (cave_los_bold(p_ptr->y + 1, p_ptr->x + 1))
{
- cave_lite_hack(py+2, px+2);
+ cave_lite_hack(p_ptr->y+2, p_ptr->x+2);
}
/* South-West of the player */
- if (cave_los_bold(py + 1, px - 1))
+ if (cave_los_bold(p_ptr->y + 1, p_ptr->x - 1))
{
- cave_lite_hack(py+2, px-2);
+ cave_lite_hack(p_ptr->y+2, p_ptr->x-2);
}
/* North-East of the player */
- if (cave_los_bold(py - 1, px + 1))
+ if (cave_los_bold(p_ptr->y - 1, p_ptr->x + 1))
{
- cave_lite_hack(py-2, px+2);
+ cave_lite_hack(p_ptr->y-2, p_ptr->x+2);
}
/* North-West of the player */
- if (cave_los_bold(py - 1, px - 1))
+ if (cave_los_bold(p_ptr->y - 1, p_ptr->x - 1))
{
- cave_lite_hack(py-2, px-2);
+ cave_lite_hack(p_ptr->y-2, p_ptr->x-2);
}
/* Maximal north */
- min_y = py - p;
+ min_y = p_ptr->y - p;
if (min_y < 0) min_y = 0;
/* Maximal south */
- max_y = py + p;
+ max_y = p_ptr->y + p;
if (max_y > cur_hgt-1) max_y = cur_hgt-1;
/* Maximal west */
- min_x = px - p;
+ min_x = p_ptr->x - p;
if (min_x < 0) min_x = 0;
/* Maximal east */
- max_x = px + p;
+ max_x = p_ptr->x + p;
if (max_x > cur_wid-1) max_x = cur_wid-1;
/* Scan the maximal box */
{
for (x = min_x; x <= max_x; x++)
{
- int dy = (py > y) ? (py - y) : (y - py);
- int dx = (px > x) ? (px - x) : (x - px);
+ int dy = (p_ptr->y > y) ? (p_ptr->y - y) : (y - p_ptr->y);
+ int dx = (p_ptr->x > x) ? (p_ptr->x - x) : (x - p_ptr->x);
/* Skip the "central" grids (above) */
if ((dy <= 2) && (dx <= 2)) continue;
static bool mon_invis;
-static s16b mon_fy, mon_fx;
+static POSITION mon_fy, mon_fx;
/*
* Add a square to the changes array
*/
-static void mon_lite_hack(int y, int x)
+static void mon_lite_hack(POSITION y, POSITION x)
{
cave_type *c_ptr;
- int midpoint, dpf, d;
+ int dpf, d;
+ POSITION midpoint;
/* We trust this grid is in bounds */
/* if (!in_bounds2(y, x)) return; */
/* Hack -- Prevent monster lite leakage in walls */
/* Horizontal walls between player and a monster */
- if (((y < py) && (y > mon_fy)) || ((y > py) && (y < mon_fy)))
+ if (((y < p_ptr->y) && (y > mon_fy)) || ((y > p_ptr->y) && (y < mon_fy)))
{
- dpf = py - mon_fy;
+ dpf = p_ptr->y - mon_fy;
d = y - mon_fy;
- midpoint = mon_fx + ((px - mon_fx) * ABS(d)) / ABS(dpf);
+ midpoint = mon_fx + ((p_ptr->x - mon_fx) * ABS(d)) / ABS(dpf);
/* Only first wall viewed from mid-x is lit */
if (x < midpoint)
}
/* Vertical walls between player and a monster */
- if (((x < px) && (x > mon_fx)) || ((x > px) && (x < mon_fx)))
+ if (((x < p_ptr->x) && (x > mon_fx)) || ((x > p_ptr->x) && (x < mon_fx)))
{
- dpf = px - mon_fx;
+ dpf = p_ptr->x - mon_fx;
d = x - mon_fx;
- midpoint = mon_fy + ((py - mon_fy) * ABS(d)) / ABS(dpf);
+ midpoint = mon_fy + ((p_ptr->y - mon_fy) * ABS(d)) / ABS(dpf);
/* Only first wall viewed from mid-y is lit */
if (y < midpoint)
/*
* Add a square to the changes array
*/
-static void mon_dark_hack(int y, int x)
+static void mon_dark_hack(POSITION y, POSITION x)
{
cave_type *c_ptr;
int midpoint, dpf, d;
/* Hack -- Prevent monster dark lite leakage in walls */
/* Horizontal walls between player and a monster */
- if (((y < py) && (y > mon_fy)) || ((y > py) && (y < mon_fy)))
+ if (((y < p_ptr->y) && (y > mon_fy)) || ((y > p_ptr->y) && (y < mon_fy)))
{
- dpf = py - mon_fy;
+ dpf = p_ptr->y - mon_fy;
d = y - mon_fy;
- midpoint = mon_fx + ((px - mon_fx) * ABS(d)) / ABS(dpf);
+ midpoint = mon_fx + ((p_ptr->x - mon_fx) * ABS(d)) / ABS(dpf);
/* Only first wall viewed from mid-x is lit */
if (x < midpoint)
}
/* Vertical walls between player and a monster */
- if (((x < px) && (x > mon_fx)) || ((x > px) && (x < mon_fx)))
+ if (((x < p_ptr->x) && (x > mon_fx)) || ((x > p_ptr->x) && (x < mon_fx)))
{
- dpf = px - mon_fx;
+ dpf = p_ptr->x - mon_fx;
d = x - mon_fx;
- midpoint = mon_fy + ((py - mon_fy) * ABS(d)) / ABS(dpf);
+ midpoint = mon_fy + ((p_ptr->y - mon_fy) * ABS(d)) / ABS(dpf);
/* Only first wall viewed from mid-y is lit */
if (y < midpoint)
int i, rad;
cave_type *c_ptr;
- s16b fx, fy;
- void (*add_mon_lite)(int, int);
+ POSITION fx, fy;
+ void (*add_mon_lite)(POSITION, POSITION);
int f_flag;
s16b end_temp;
}
/* Add to end of temp array */
- temp_x[temp_n] = (byte)fx;
- temp_y[temp_n] = (byte)fy;
+ temp_x[temp_n] = fx;
+ temp_y[temp_n] = fy;
temp_n++;
}
/* Mega-Hack -- Visual update later */
p_ptr->update |= (PU_DELAY_VIS);
- p_ptr->monlite = (cave[py][px].info & CAVE_MNLT) ? TRUE : FALSE;
+ p_ptr->monlite = (cave[p_ptr->y][p_ptr->x].info & CAVE_MNLT) ? TRUE : FALSE;
if (p_ptr->special_defense & NINJA_S_STEALTH)
{
{
if (p_ptr->monlite)
{
-#ifdef JP
- msg_print("±Æ¤Îʤ¤¤¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
-#else
- msg_print("Your mantle of shadow become thin.");
-#endif
+ msg_print(_("影の覆いが薄れた気がする。", "Your mantle of shadow become thin."));
}
else
{
-#ifdef JP
- msg_print("±Æ¤Îʤ¤¤¤¬Ç»¤¯¤Ê¤Ã¤¿¡ª");
-#else
- msg_print("Your mantle of shadow restored its original darkness.");
-#endif
+ msg_print(_("影の覆いが濃くなった!", "Your mantle of shadow restored its original darkness."));
}
}
}
/* Clear them all */
for (i = 0; i < view_n; i++)
{
- int y = view_y[i];
- int x = view_x[i];
-
- /* Access the grid */
+ POSITION y = view_y[i];
+ POSITION x = view_x[i];
c_ptr = &cave[y][x];
/* Forget that the grid is viewable */
*
* This function assumes that (y,x) is legal (i.e. on the map).
*
- * Grid (y1,x1) is on the "diagonal" between (py,px) and (y,x)
- * Grid (y2,x2) is "adjacent", also between (py,px) and (y,x).
+ * Grid (y1,x1) is on the "diagonal" between (p_ptr->y,p_ptr->x) and (y,x)
+ * Grid (y2,x2) is "adjacent", also between (p_ptr->y,p_ptr->x) and (y,x).
*
* Note that we are using the "CAVE_XTRA" field for marking grids as
* "easily viewable". This bit is cleared at the end of "update_view()".
*
* This function now returns "TRUE" if vision is "blocked" by grid (y,x).
*/
-static bool update_view_aux(int y, int x, int y1, int x1, int y2, int x2)
+static bool update_view_aux(POSITION y, POSITION x, POSITION y1, POSITION x1, POSITION y2, POSITION x2)
{
bool f1, f2, v1, v2, z1, z2, wall;
/* Totally blocked by "unviewable neighbors" */
if (!v1 && !v2) return (TRUE);
-
- /* Access the grid */
c_ptr = &cave[y][x];
/* Hack -- check line of sight */
- if (los(py, px, y, x))
+ if (los(p_ptr->y, p_ptr->x, y, x))
{
cave_view_hack(c_ptr, y, x);
*/
void update_view(void)
{
- int n, m, d, k, y, x, z;
+ int n, m, d, k, z;
+ POSITION y, x;
int se, sw, ne, nw, es, en, ws, wn;
int full, over;
- int y_max = cur_hgt - 1;
- int x_max = cur_wid - 1;
+ POSITION y_max = cur_hgt - 1;
+ POSITION x_max = cur_wid - 1;
cave_type *c_ptr;
{
y = view_y[n];
x = view_x[n];
-
- /* Access the grid */
c_ptr = &cave[y][x];
/* Mark the grid as not in "view" */
/*** Step 1 -- adjacent grids ***/
/* Now start on the player */
- y = py;
- x = px;
-
- /* Access the grid */
+ y = p_ptr->y;
+ x = p_ptr->x;
c_ptr = &cave[y][x];
/* Assume the player grid is easily viewable */
{
y = view_y[n];
x = view_x[n];
-
- /* Access the grid */
c_ptr = &cave[y][x];
/* Clear the "CAVE_XTRA" flag */
{
y = temp_y[n];
x = temp_x[n];
-
- /* Access the grid */
c_ptr = &cave[y][x];
/* No longer in the array */
{
y = redraw_y[i];
x = redraw_x[i];
-
- /* Access the grid */
c_ptr = &cave[y][x];
/* Update only needed grids (prevent multiple updating) */
/* If required, note */
if (c_ptr->info & CAVE_NOTE) note_spot(y, x);
- /* Redraw */
lite_spot(y, x);
/* Hack -- Visual update of monster on this grid */
- if (c_ptr->m_idx) update_mon(c_ptr->m_idx, FALSE);
+ if (c_ptr->m_idx) update_monster(c_ptr->m_idx, FALSE);
/* No longer in the array */
c_ptr->info &= ~(CAVE_NOTE | CAVE_REDRAW);
*/
void forget_flow(void)
{
- int x, y;
+ POSITION x, y;
/* Check the entire dungeon */
for (y = 0; y < cur_hgt; y++)
* it everytime the player moves out of LOS of the last
* "way-point".
*/
-static u16b flow_x = 0;
-static u16b flow_y = 0;
+static POSITION flow_x = 0;
+static POSITION flow_y = 0;
*/
void update_flow(void)
{
- int x, y, d;
+ POSITION x, y, d;
int flow_head = 1;
int flow_tail = 0;
}
/* Save player position */
- flow_y = py;
- flow_x = px;
+ flow_y = p_ptr->y;
+ flow_x = p_ptr->x;
/* Add the player's grid to the queue */
- temp_y[0] = py;
- temp_x[0] = px;
+ temp_y[0] = p_ptr->y;
+ temp_x[0] = p_ptr->x;
/* Now process the queue */
while (flow_head != flow_tail)
for (d = 0; d < 8; d++)
{
int old_head = flow_head;
- int m = cave[ty][tx].cost + 1;
- int n = cave[ty][tx].dist + 1;
+ byte_hack m = cave[ty][tx].cost + 1;
+ byte_hack n = cave[ty][tx].dist + 1;
cave_type *c_ptr;
/* Child location */
*/
void update_smell(void)
{
- int i, j;
- int y, x;
+ POSITION i, j;
+ POSITION y, x;
/* Create a table that controls the spread of scent */
const int scent_adjust[5][5] =
cave_type *c_ptr;
/* Translate table to map grids */
- y = i + py - 2;
- x = j + px - 2;
+ y = i + p_ptr->y - 2;
+ x = j + p_ptr->x - 2;
/* Check Bounds */
if (!in_bounds(y, x)) continue;
/*
* Hack -- map the current panel (plus some) ala "magic mapping"
*/
-void map_area(int range)
+void map_area(POSITION range)
{
- int i, x, y;
- cave_type *c_ptr;
- s16b feat;
- feature_type *f_ptr;
+ int i;
+ POSITION x, y;
+ cave_type *c_ptr;
+ FEAT_IDX feat;
+ feature_type *f_ptr;
if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3;
{
for (x = 1; x < cur_wid - 1; x++)
{
- if (distance(py, px, y, x) > range) continue;
+ if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
c_ptr = &cave[y][x];
}
}
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
}
*/
void wiz_lite(bool ninja)
{
- int i, y, x;
- s16b feat;
+ OBJECT_IDX i;
+ POSITION y, x;
+ FEAT_IDX feat;
feature_type *f_ptr;
/* Memorize objects */
/* Scan all neighbors */
for (i = 0; i < 9; i++)
{
- int yy = y + ddy_ddd[i];
- int xx = x + ddx_ddd[i];
+ POSITION yy = y + ddy_ddd[i];
+ POSITION xx = x + ddx_ddd[i];
/* Get the grid */
c_ptr = &cave[yy][xx];
}
}
- /* Update the monsters */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
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);
}
}
*/
void wiz_dark(void)
{
- int i, y, x;
-
+ OBJECT_IDX i;
+ POSITION y, x;
/* Forget every grid */
for (y = 1; y < cur_hgt - 1; y++)
/* Forget travel route when we have forgotten map */
forget_travel_flow();
- /* Mega-Hack -- Forget the view and lite */
p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
-
- /* Update the view and lite */
p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
-
- /* Update the monsters */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
}
-
-
-
-
/*
* Change the "feat" flag for a grid, and notice/redraw the grid
*/
-void cave_set_feat(int y, int x, int feat)
+void cave_set_feat(POSITION y, POSITION x, FEAT_IDX feat)
{
cave_type *c_ptr = &cave[y][x];
feature_type *f_ptr = &f_info[feat];
/* Hack -- glow the GLOW terrain */
if (have_flag(f_ptr->flags, FF_GLOW) && !(d_info[dungeon_type].flags1 & DF1_DARKNESS))
{
- int i, yy, xx;
+ DIRECTION i;
+ POSITION yy, xx;
for (i = 0; i < 9; i++)
{
/* Check for change to boring grid */
if (!have_flag(f_ptr->flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+ if (c_ptr->m_idx) update_monster(c_ptr->m_idx, FALSE);
- /* Update the monster */
- if (c_ptr->m_idx) update_mon(c_ptr->m_idx, FALSE);
-
- /* Notice */
note_spot(y, x);
- /* Redraw */
lite_spot(y, x);
/* Check if los has changed */
/* Hack -- glow the GLOW terrain */
if (have_flag(f_ptr->flags, FF_GLOW) && !(d_info[dungeon_type].flags1 & DF1_DARKNESS))
{
- int i, yy, xx;
+ DIRECTION i;
+ POSITION yy, xx;
cave_type *cc_ptr;
for (i = 0; i < 9; i++)
if (player_has_los_grid(cc_ptr))
{
- /* Update the monster */
- if (cc_ptr->m_idx) update_mon(cc_ptr->m_idx, FALSE);
+ if (cc_ptr->m_idx) update_monster(cc_ptr->m_idx, FALSE);
- /* Notice */
note_spot(yy, xx);
- /* Redraw */
lite_spot(yy, xx);
}
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);
}
}
}
-int conv_dungeon_feat(int newfeat)
+FEAT_IDX conv_dungeon_feat(FEAT_IDX newfeat)
{
feature_type *f_ptr = &f_info[newfeat];
* Take a feature, determine what that feature becomes
* through applying the given action.
*/
-int feat_state(int feat, int action)
+FEAT_IDX feat_state(FEAT_IDX feat, int action)
{
feature_type *f_ptr = &f_info[feat];
int i;
* Takes a location and action and changes the feature at that
* location through applying the given action.
*/
-void cave_alter_feat(int y, int x, int action)
+void cave_alter_feat(POSITION y, POSITION x, int action)
{
/* Set old feature */
- int oldfeat = cave[y][x].feat;
+ FEAT_IDX oldfeat = cave[y][x].feat;
/* Get the new feat */
- int newfeat = feat_state(oldfeat, action);
+ FEAT_IDX newfeat = feat_state(oldfeat, action);
/* No change */
if (newfeat == oldfeat) return;
if (found && character_dungeon && player_can_see_bold(y, x))
{
-#ifdef JP
- msg_print("²¿¤«¤òȯ¸«¤·¤¿¡ª");
-#else
- msg_print("You have found something!");
-#endif
+ msg_print(_("何かを発見した!", "You have found something!"));
}
}
/* Remove a mirror */
-void remove_mirror(int y, int x)
+void remove_mirror(POSITION y, POSITION x)
{
cave_type *c_ptr = &cave[y][x];
{
c_ptr->info &= ~(CAVE_GLOW);
if (!view_torch_grids) c_ptr->info &= ~(CAVE_MARK);
-
- /* Update the monster */
- if (c_ptr->m_idx) update_mon(c_ptr->m_idx, FALSE);
+ if (c_ptr->m_idx) update_monster(c_ptr->m_idx, FALSE);
update_local_illumination(y, x);
}
- /* Notice */
note_spot(y, x);
- /* Redraw */
lite_spot(y, x);
}
* Calculate "incremental motion". Used by project() and shoot().
* Assumes that (*y,*x) lies on the path from (y1,x1) to (y2,x2).
*/
-void mmove2(int *y, int *x, int y1, int x1, int y2, int x2)
+void mmove2(POSITION *y, POSITION *x, POSITION y1, POSITION x1, POSITION y2, POSITION x2)
{
- int dy, dx, dist, shift;
+ POSITION dy, dx, dist, shift;
/* Extract the distance travelled */
dy = (*y < y1) ? y1 - *y : *y - y1;
*
* This is slightly (but significantly) different from "los(y1,x1,y2,x2)".
*/
-bool projectable(int y1, int x1, int y2, int x2)
+bool projectable(POSITION y1, POSITION x1, POSITION y2, POSITION x2)
{
- int y, x;
+ POSITION y, x;
int grid_n = 0;
u16b grid_g[512];
*
* Currently the "m" parameter is unused.
*/
-void scatter(int *yp, int *xp, int y, int x, int d, int m)
+void scatter(POSITION *yp, POSITION *xp, POSITION y, POSITION x, POSITION d, BIT_FLAGS mode)
{
- int nx, ny;
-
- /* Unused */
- m = m;
+ POSITION nx, ny;
/* Pick a location */
while (TRUE)
/* Ignore "excessively distant" locations */
if ((d > 1) && (distance(y, x, ny, nx) > d)) continue;
- /* Require "line of projection" */
- if (projectable(y, x, ny, nx)) break;
+ if (mode & PROJECT_LOS)
+ {
+ if(los(y, x, ny, nx)) break;
+ }
+ else
+ {
+ if(projectable(y, x, ny, nx)) break;
+ }
+
}
/* Save the location */
/*
* Track a new monster
*/
-void health_track(int m_idx)
+void health_track(MONSTER_IDX m_idx)
{
/* Mount monster is already tracked */
if (m_idx && m_idx == p_ptr->riding) return;
/*
* Hack -- track the given monster race
*/
-void monster_race_track(int r_idx)
+void monster_race_track(MONRACE_IDX r_idx)
{
/* Save this monster ID */
p_ptr->monster_race_idx = r_idx;
- /* Window stuff */
p_ptr->window |= (PW_MONSTER);
}
/*
* Hack -- track the given object kind
*/
-void object_kind_track(int k_idx)
+void object_kind_track(KIND_OBJECT_IDX k_idx)
{
/* Save this monster ID */
p_ptr->object_kind_idx = k_idx;
- /* Window stuff */
p_ptr->window |= (PW_OBJECT);
}
*
* All disturbance cancels repeated commands, resting, and running.
*/
-void disturb(int stop_search, int stop_travel)
+void disturb(bool stop_search, bool stop_travel)
{
#ifndef TRAVEL
/* Unused */
*/
void glow_deep_lava_and_bldg(void)
{
- int y, x, i, yy, xx;
+ POSITION y, x, yy, xx;
+ DIRECTION i;
cave_type *c_ptr;
/* Not in the darkness dungeon */
/* Update the view and lite */
p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
}
+
+/*!
+* @brief 指定されたマスがモンスターのテレポート可能先かどうかを判定する。
+* @param m_idx モンスターID
+* @param y 移動先Y座標
+* @param x 移動先X座標
+* @param mode オプション
+* @return テレポート先として妥当ならばtrue
+*/
+bool cave_monster_teleportable_bold(MONSTER_IDX m_idx, POSITION y, POSITION x, BIT_FLAGS mode)
+{
+ monster_type *m_ptr = &m_list[m_idx];
+ cave_type *c_ptr = &cave[y][x];
+ feature_type *f_ptr = &f_info[c_ptr->feat];
+
+ /* Require "teleportable" space */
+ if (!have_flag(f_ptr->flags, FF_TELEPORTABLE)) return FALSE;
+
+ if (c_ptr->m_idx && (c_ptr->m_idx != m_idx)) return FALSE;
+ if (player_bold(y, x)) return FALSE;
+
+ /* Hack -- no teleport onto glyph of warding */
+ if (is_glyph_grid(c_ptr)) return FALSE;
+ if (is_explosive_rune_grid(c_ptr)) return FALSE;
+
+ if (!(mode & TELEPORT_PASSIVE))
+ {
+ if (!monster_can_cross_terrain(c_ptr->feat, &r_info[m_ptr->r_idx], 0)) return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*!
+* @brief 指定されたマスにプレイヤーがテレポート可能かどうかを判定する。
+* @param y 移動先Y座標
+* @param x 移動先X座標
+* @param mode オプション
+* @return テレポート先として妥当ならばtrue
+*/
+bool cave_player_teleportable_bold(POSITION y, POSITION x, BIT_FLAGS mode)
+{
+ cave_type *c_ptr = &cave[y][x];
+ feature_type *f_ptr = &f_info[c_ptr->feat];
+
+ /* Require "teleportable" space */
+ if (!have_flag(f_ptr->flags, FF_TELEPORTABLE)) return FALSE;
+
+ /* No magical teleporting into vaults and such */
+ if (!(mode & TELEPORT_NONMAGICAL) && (c_ptr->info & CAVE_ICKY)) return FALSE;
+
+ if (c_ptr->m_idx && (c_ptr->m_idx != p_ptr->riding)) return FALSE;
+
+ /* don't teleport on a trap. */
+ if (have_flag(f_ptr->flags, FF_HIT_TRAP)) return FALSE;
+
+ if (!(mode & TELEPORT_PASSIVE))
+ {
+ if (!player_can_enter(c_ptr->feat, 0)) return FALSE;
+
+ if (have_flag(f_ptr->flags, FF_WATER) && have_flag(f_ptr->flags, FF_DEEP))
+ {
+ if (!p_ptr->levitation && !p_ptr->can_swim) return FALSE;
+ }
+
+ if (have_flag(f_ptr->flags, FF_LAVA) && !p_ptr->immune_fire && !IS_INVULN())
+ {
+ /* Always forbid deep lava */
+ if (have_flag(f_ptr->flags, FF_DEEP)) return FALSE;
+
+ /* Forbid shallow lava when the player don't have levitation */
+ if (!p_ptr->levitation) return FALSE;
+ }
+
+ }
+
+ return TRUE;
+}
+
+/*!
+ * @brief 地形は開くものであって、かつ開かれているかを返す /
+ * Attempt to open the given chest at the given location
+ * @param feat 地形ID
+ * @return 開いた地形である場合TRUEを返す / Return TRUE if the given feature is an open door
+ */
+bool is_open(FEAT_IDX feat)
+{
+ return have_flag(f_info[feat].flags, FF_CLOSE) && (feat != feat_state(feat, FF_CLOSE));
+}