#include "angband.h"
#include "object-hook.h"
+#include "object-curse.h"
+#include "artifact.h"
+#include "player-status.h"
+#include "feature.h"
static void one_sustain(object_type *o_ptr);
-static cptr const kaji_tips[5] =
+static concptr const kaji_tips[5] =
{
#ifdef JP
"現在持っているエッセンスの一覧を表示する。",
*/
static void one_sustain(object_type *o_ptr)
{
- switch (randint0(6))
+ switch (randint0(A_MAX))
{
case 0: add_flag(o_ptr->art_flags, TR_SUST_STR); break;
case 1: add_flag(o_ptr->art_flags, TR_SUST_INT); break;
{
object_type *j_ptr;
- s16b this_o_idx, next_o_idx = 0;
-
- s16b prev_o_idx = 0;
-
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
+ OBJECT_IDX prev_o_idx = 0;
/* Object */
j_ptr = &o_list[o_idx];
for (this_o_idx = m_ptr->hold_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 */
next_o_idx = o_ptr->next_o_idx;
- /* Done */
if (this_o_idx == o_idx)
{
/* No previous */
/* Forget next pointer */
o_ptr->next_o_idx = 0;
- /* Done */
break;
}
/* Dungeon */
else
{
- cave_type *c_ptr;
+ grid_type *g_ptr;
POSITION y = j_ptr->iy;
POSITION x = j_ptr->ix;
- /* Grid */
- c_ptr = &cave[y][x];
+ g_ptr = ¤t_floor_ptr->grid_array[y][x];
/* Scan all objects in the grid */
- for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
+ for (this_o_idx = g_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 */
next_o_idx = o_ptr->next_o_idx;
- /* Done */
if (this_o_idx == o_idx)
{
/* No previous */
if (prev_o_idx == 0)
{
/* Remove from list */
- c_ptr->o_idx = next_o_idx;
+ g_ptr->o_idx = next_o_idx;
}
/* Real previous */
/* Forget next pointer */
o_ptr->next_o_idx = 0;
- /* Done */
break;
}
/* Dungeon floor */
if (!(j_ptr->held_m_idx))
{
- int y, x;
+ POSITION y, x;
- /* Location */
y = j_ptr->iy;
x = j_ptr->ix;
/* Visual update */
lite_spot(y, x);
}
-
- /* Wipe the object */
object_wipe(j_ptr);
/* Count objects */
*/
void delete_object(POSITION y, POSITION x)
{
- cave_type *c_ptr;
+ grid_type *g_ptr;
OBJECT_IDX this_o_idx, next_o_idx = 0;
/* Refuse "illegal" locations */
if (!in_bounds(y, x)) return;
- /* Grid */
- c_ptr = &cave[y][x];
+ g_ptr = ¤t_floor_ptr->grid_array[y][x];
/* Scan all objects in the grid */
- for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
+ for (this_o_idx = g_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 */
next_o_idx = o_ptr->next_o_idx;
-
- /* Wipe the object */
object_wipe(o_ptr);
/* Count objects */
}
/* Objects are gone */
- c_ptr->o_idx = 0;
+ g_ptr->o_idx = 0;
/* Visual update */
lite_spot(y, x);
* @param i2 整理したい配列の終点
* @return なし
*/
-static void compact_objects_aux(IDX i1, IDX i2)
+static void compact_objects_aux(OBJECT_IDX i1, OBJECT_IDX i2)
{
- IDX i;
- cave_type *c_ptr;
+ OBJECT_IDX i;
+ grid_type *g_ptr;
object_type *o_ptr;
/* Do nothing */
if (i1 == i2) return;
-
/* Repair objects */
for (i = 1; i < o_max; i++)
{
- /* Acquire object */
o_ptr = &o_list[i];
/* Skip "dead" objects */
o_ptr->next_o_idx = i2;
}
}
-
-
- /* Acquire object */
o_ptr = &o_list[i1];
-
/* Monster */
if (o_ptr->held_m_idx)
{
/* Dungeon */
else
{
- int y, x;
+ POSITION y, x;
/* Acquire location */
y = o_ptr->iy;
x = o_ptr->ix;
/* Acquire grid */
- c_ptr = &cave[y][x];
+ g_ptr = ¤t_floor_ptr->grid_array[y][x];
/* Repair grid */
- if (c_ptr->o_idx == i1)
+ if (g_ptr->o_idx == i1)
{
/* Repair */
- c_ptr->o_idx = i2;
+ g_ptr->o_idx = i2;
}
}
-
/* Structure copy */
o_list[i2] = o_list[i1];
*/
void compact_objects(int size)
{
- IDX i;
- int y, x, num, cnt;
+ OBJECT_IDX i;
+ POSITION y, x;
+ int num, cnt;
int cur_lev, cur_dis, chance;
object_type *o_ptr;
-
/* Compact */
if (size)
{
- /* Message */
msg_print(_("アイテム情報を圧縮しています...", "Compacting objects..."));
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
}
/* Acquire monster */
m_ptr = &m_list[o_ptr->held_m_idx];
- /* Get the location */
y = m_ptr->fy;
x = m_ptr->fx;
/* Dungeon */
else
{
- /* Get the location */
y = o_ptr->iy;
x = o_ptr->ix;
}
/* Apply the saving throw */
if (randint0(100) < chance) continue;
- /* Delete the object */
delete_object_idx(i);
/* Count it */
* Delete all the items when player leaves the level
* @note we do NOT visually reflect these (irrelevant) changes
* @details
- * Hack -- we clear the "c_ptr->o_idx" field for every grid,
+ * Hack -- we clear the "g_ptr->o_idx" field for every grid,
* and the "m_ptr->next_o_idx" field for every monster, since
* we know we are clearing every object. Technically, we only
* clear those fields for grids/monsters containing objects,
/* Dungeon */
else
{
- cave_type *c_ptr;
+ grid_type *g_ptr;
/* Access location */
POSITION y = o_ptr->iy;
POSITION x = o_ptr->ix;
/* Access grid */
- c_ptr = &cave[y][x];
+ g_ptr = ¤t_floor_ptr->grid_array[y][x];
/* Hack -- see above */
- c_ptr->o_idx = 0;
+ g_ptr->o_idx = 0;
}
-
- /* Wipe the object */
object_wipe(o_ptr);
}
for (i = 1; i < o_max; i++)
{
object_type *o_ptr;
-
- /* Acquire object */
o_ptr = &o_list[i];
/* Skip live objects */
/* Warn the player (except during dungeon creation) */
if (character_dungeon) msg_print(_("アイテムが多すぎる!", "Too many objects!"));
- /* Oops */
return (0);
}
OBJECT_IDX get_obj_num(DEPTH level)
{
int i, j, p;
- int k_idx;
+ KIND_OBJECT_IDX k_idx;
long value, total;
object_kind *k_ptr;
alloc_entry *table = alloc_kind_table;
if (level > MAX_DEPTH - 1) level = MAX_DEPTH - 1;
/* Boost level */
- if ((level > 0) && !(d_info[dungeon_type].flags1 & DF1_BEGINNER))
+ if ((level > 0) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_BEGINNER))
{
/* Occasional "boost" */
if (one_in_(GREAT_OBJ))
if (table[i].level < table[j].level) i = j;
}
-
- /* Result */
return (table[i].index);
}
{
object_type forge;
object_type *q_ptr;
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
q_ptr = &forge;
object_copy(q_ptr, o_ptr);
* @param o_ptr 未鑑定価格を確認したいオブジェクトの構造体参照ポインタ
* @return オブジェクトの未鑑定価格
*/
-static s32b object_value_base(object_type *o_ptr)
+static PRICE object_value_base(object_type *o_ptr)
{
/* Aware item -- use template cost */
if (object_is_aware(o_ptr)) return (k_info[o_ptr->k_idx].cost);
* @param plusses フラグに与える価格の基本重み
* @return オブジェクトのフラグ価格
*/
-s32b flag_cost(object_type *o_ptr, int plusses)
+PRICE flag_cost(object_type *o_ptr, int plusses)
{
- s32b total = 0;
- u32b flgs[TR_FLAG_SIZE];
- s32b tmp_cost;
+ PRICE total = 0;
+ BIT_FLAGS flgs[TR_FLAG_SIZE];
+ PRICE tmp_cost;
int count;
int i;
object_kind *k_ptr = &k_info[o_ptr->k_idx];
*/
value += (value * o_ptr->pval / o_ptr->number / (k_ptr->pval * 2));
- /* Done */
break;
}
case TV_STAFF:
*/
value += (value * o_ptr->pval / (k_ptr->pval * 2));
- /* Done */
break;
}
/* Give credit for bonuses */
value += ((o_ptr->to_h + o_ptr->to_d + o_ptr->to_a) * 200L);
- /* Done */
break;
}
/* Give credit for bonuses */
value += (((o_ptr->to_h - k_ptr->to_h) + (o_ptr->to_d - k_ptr->to_d)) * 200L + (o_ptr->to_a) * 100L);
- /* Done */
break;
}
value += (o_ptr->dd - k_ptr->dd) * o_ptr->ds * 250L;
value += (o_ptr->ds - k_ptr->ds) * o_ptr->dd * 250L;
- /* Done */
break;
}
value += (o_ptr->dd - k_ptr->dd) * o_ptr->ds * 5L;
value += (o_ptr->ds - k_ptr->ds) * o_ptr->dd * 5L;
- /* Done */
break;
}
value = object_value_base(o_ptr);
}
-
/* Apply discount (if any) */
if (o_ptr->discount) value -= (value * o_ptr->discount / 100L);
-
/* Return the final value */
return (value);
}
/* We have "felt" it (again) */
o_ptr->ident |= (IDENT_SENSE);
-
- /* Combine the pack */
- p_ptr->notice |= (PN_COMBINE);
-
- /* Window stuff */
+ p_ptr->update |= (PU_COMBINE);
p_ptr->window |= (PW_INVEN | PW_EQUIP);
- /* Done */
return FALSE;
}
/* Hack -- blend "feelings" */
if (j_ptr->feeling) o_ptr->feeling = j_ptr->feeling;
- /* Hack -- could average discounts XXX XXX XXX */
- /* Hack -- save largest discount XXX XXX XXX */
+ /* Hack -- could average discounts */
+ /* Hack -- save largest discount */
if (o_ptr->discount < j_ptr->discount) o_ptr->discount = j_ptr->discount;
/* Hack -- if rods are stacking, add the pvals (maximum timeouts) and current timeouts together. -LM- */
* @param sval 検索したいベースアイテムのsval
* @return なし
*/
-IDX lookup_kind(OBJECT_TYPE_VALUE tval, OBJECT_SUBTYPE_VALUE sval)
+KIND_OBJECT_IDX lookup_kind(OBJECT_TYPE_VALUE tval, OBJECT_SUBTYPE_VALUE sval)
{
- IDX k;
+ KIND_OBJECT_IDX k;
int num = 0;
- IDX bk = 0;
+ KIND_OBJECT_IDX bk = 0;
/* Look for it */
for (k = 1; k < max_k_idx; k++)
}
#if 0
- /* Oops */
msg_format(_("アイテムがない (%d,%d)", "No object (%d,%d)"), tval, sval);
#endif
- /* Oops */
return (0);
}
/* Enforce the maximum value */
if (value > max) return (max);
-
- /* Result */
return (value);
}
*/
static void object_mention(object_type *o_ptr)
{
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
object_aware(o_ptr);
object_known(o_ptr);
/* Mark the item as fully known */
o_ptr->ident |= (IDENT_MENTAL);
-
- /* Description */
object_desc(o_name, o_ptr, 0);
msg_format_wizard(CHEAT_OBJECT, _("%sを生成しました。", "%s was generated."), o_name);
}
-/*!
- * @brief INSTA_ART型の固定アーティファクトの生成を確率に応じて試行する。
- * Mega-Hack -- Attempt to create one of the "Special Objects"
- * @param o_ptr 生成に割り当てたいオブジェクトの構造体参照ポインタ
- * @return 生成に成功したらTRUEを返す。
- * @details
- * We are only called from "make_object()", and we assume that\n
- * "apply_magic()" is called immediately after we return.\n
- *\n
- * Note -- see "make_artifact()" and "apply_magic()"\n
- */
-static bool make_artifact_special(object_type *o_ptr)
-{
- IDX i;
- IDX k_idx = 0;
-
- /*! @note 地上ではキャンセルする / No artifacts in the town */
- if (!dun_level) return (FALSE);
-
- /*! @note get_obj_num_hookによる指定がある場合は生成をキャンセルする / Themed object */
- if (get_obj_num_hook) return (FALSE);
-
- /*! @note 全固定アーティファクト中からIDの若い順に生成対象とその確率を走査する / Check the artifact list (just the "specials") */
- for (i = 0; i < max_a_idx; i++)
- {
- artifact_type *a_ptr = &a_info[i];
-
- /*! @note アーティファクト名が空の不正なデータは除外する / Skip "empty" artifacts */
- if (!a_ptr->name) continue;
-
- /*! @note 既に生成回数がカウントされたアーティファクト、QUESTITEMと非INSTA_ARTは除外 / Cannot make an artifact twice */
- if (a_ptr->cur_num) continue;
- if (a_ptr->gen_flags & TRG_QUESTITEM) continue;
- if (!(a_ptr->gen_flags & TRG_INSTA_ART)) continue;
-
- /*! @note アーティファクト生成階が現在に対して足りない場合は高確率で1/(不足階層*2)を満たさないと生成リストに加えられない /
- * XXX XXX Enforce minimum "depth" (loosely) */
- if (a_ptr->level > object_level)
- {
- /* @note / Acquire the "out-of-depth factor". Roll for out-of-depth creation. */
- int d = (a_ptr->level - object_level) * 2;
- if (!one_in_(d)) continue;
- }
-
- /*! @note 1/(レア度)の確率を満たさないと除外される / Artifact "rarity roll" */
- if (!one_in_(a_ptr->rarity)) continue;
-
- /*! @note INSTA_ART型固定アーティファクトのベースアイテムもチェック対象とする。ベースアイテムの生成階層が足りない場合1/(不足階層*5) を満たさないと除外される。 /
- * Find the base object. XXX XXX Enforce minimum "object" level (loosely). Acquire the "out-of-depth factor". Roll for out-of-depth creation. */
- k_idx = lookup_kind(a_ptr->tval, a_ptr->sval);
- if (k_info[k_idx].level > object_level)
- {
- int d = (k_info[k_idx].level - object_level) * 5;
- if (!one_in_(d)) continue;
- }
-
- /*! @note 前述の条件を満たしたら、後のIDのアーティファクトはチェックせずすぐ確定し生成処理に移す /
- * Assign the template. Mega-Hack -- mark the item as an artifact. Hack: Some artifacts get random extra powers. Success. */
- object_prep(o_ptr, k_idx);
-
- o_ptr->name1 = i;
- random_artifact_resistance(o_ptr, a_ptr);
- return (TRUE);
- }
-
- /*! @note 全INSTA_ART固定アーティファクトを試行しても決まらなかった場合 FALSEを返す / Failure */
- return (FALSE);
-}
-
-
-/*!
- * @brief 非INSTA_ART型の固定アーティファクトの生成を確率に応じて試行する。
- * Mega-Hack -- Attempt to create one of the "Special Objects"
- * @param o_ptr 生成に割り当てたいオブジェクトの構造体参照ポインタ
- * @return 生成に成功したらTRUEを返す。
- * @details
- * Attempt to change an object into an artifact\n
- * This routine should only be called by "apply_magic()"\n
- * Note -- see "make_artifact_special()" and "apply_magic()"\n
- */
-static bool make_artifact(object_type *o_ptr)
-{
- IDX i;
-
-
- /* No artifacts in the town */
- if (!dun_level) return (FALSE);
-
- /* Paranoia -- no "plural" artifacts */
- if (o_ptr->number != 1) return (FALSE);
-
- /* Check the artifact list (skip the "specials") */
- for (i = 0; i < max_a_idx; i++)
- {
- artifact_type *a_ptr = &a_info[i];
-
- /* Skip "empty" items */
- if (!a_ptr->name) continue;
-
- /* Cannot make an artifact twice */
- if (a_ptr->cur_num) continue;
-
- if (a_ptr->gen_flags & TRG_QUESTITEM) continue;
-
- if (a_ptr->gen_flags & TRG_INSTA_ART) continue;
-
- /* Must have the correct fields */
- if (a_ptr->tval != o_ptr->tval) continue;
- if (a_ptr->sval != o_ptr->sval) continue;
-
- /* XXX XXX Enforce minimum "depth" (loosely) */
- if (a_ptr->level > dun_level)
- {
- /* Acquire the "out-of-depth factor" */
- int d = (a_ptr->level - dun_level) * 2;
-
- /* Roll for out-of-depth creation */
- if (!one_in_(d)) continue;
- }
-
- /* We must make the "rarity roll" */
- if (!one_in_(a_ptr->rarity)) continue;
-
- /* Hack -- mark the item as an artifact */
- o_ptr->name1 = i;
-
- /* Hack: Some artifacts get random extra powers */
- random_artifact_resistance(o_ptr, a_ptr);
-
- /* Success */
- return (TRUE);
- }
-
- /* Failure */
- return (FALSE);
-}
-
/*!
* @brief アイテムのエゴをレア度の重みに合わせてランダムに選択する
break;
}
}
- /* Uncurse it */
o_ptr->curse_flags = 0L;
}
else if ((power == -2) && one_in_(2))
}
}
}
- /* Uncurse it */
o_ptr->curse_flags = 0L;
}
else if ((power == -2) && one_in_(2))
if (r_ptr->flags1 & RF1_FORCE_DEPTH) return (FALSE);
if (r_ptr->flags7 & RF7_UNIQUE2) return (FALSE);
- /* Okay */
return (TRUE);
}
r_ptr = &r_info[i];
- check = (dun_level < r_ptr->level) ? (r_ptr->level - dun_level) : 0;
+ check = (current_floor_ptr->dun_level < r_ptr->level) ? (r_ptr->level - current_floor_ptr->dun_level) : 0;
/* Ignore dead monsters */
if (!r_ptr->rarity) continue;
/* Pick a random non-unique monster race */
while (1)
{
- i = get_mon_num(dun_level);
+ i = get_mon_num(current_floor_ptr->dun_level);
r_ptr = &r_info[i];
- check = (dun_level < r_ptr->level) ? (r_ptr->level - dun_level) : 0;
+ check = (current_floor_ptr->dun_level < r_ptr->level) ? (r_ptr->level - current_floor_ptr->dun_level) : 0;
/* Ignore dead monsters */
if (!r_ptr->rarity) continue;
o_ptr->pval = randint1(obj_level);
if (o_ptr->sval == SV_CHEST_KANDUME) o_ptr->pval = 6;
- o_ptr->xtra3 = dun_level + 5;
+ o_ptr->xtra3 = current_floor_ptr->dun_level + 5;
/* Never exceed "difficulty" of 55 to 59 */
if (o_ptr->pval > 55) o_ptr->pval = 55 + (byte)randint0(5);
f1 = lev + 10;
/* Maximal chance of being "good" */
- if (f1 > d_info[dungeon_type].obj_good) f1 = d_info[dungeon_type].obj_good;
+ if (f1 > d_info[p_ptr->dungeon_idx].obj_good) f1 = d_info[p_ptr->dungeon_idx].obj_good;
/* Base chance of being "great" */
f2 = f1 * 2 / 3;
/* Maximal chance of being "great" */
- if ((p_ptr->pseikaku != SEIKAKU_MUNCHKIN) && (f2 > d_info[dungeon_type].obj_great))
- f2 = d_info[dungeon_type].obj_great;
+ if ((p_ptr->pseikaku != SEIKAKU_MUNCHKIN) && (f2 > d_info[p_ptr->dungeon_idx].obj_great))
+ f2 = d_info[p_ptr->dungeon_idx].obj_great;
if (p_ptr->muta3 & MUT3_GOOD_LUCK)
{
if (a_ptr->gen_flags & (TRG_RANDOM_CURSE1)) o_ptr->curse_flags |= get_curse(1, o_ptr);
if (a_ptr->gen_flags & (TRG_RANDOM_CURSE2)) o_ptr->curse_flags |= get_curse(2, o_ptr);
- /* Done */
return;
}
-
- /* Apply magic */
switch (o_ptr->tval)
{
case TV_DIGGING:
o_ptr->pval = 2;
}
- /* Done */
return;
}
/* Generate a special object, or a normal object */
if (!one_in_(prob) || !make_artifact_special(j_ptr))
{
- IDX k_idx;
+ KIND_OBJECT_IDX k_idx;
/* Good objects */
if ((mode & AM_GOOD) && !get_obj_num_hook)
*/
void place_object(POSITION y, POSITION x, BIT_FLAGS mode)
{
- IDX o_idx;
+ OBJECT_IDX o_idx;
/* Acquire grid */
- cave_type *c_ptr = &cave[y][x];
+ grid_type *g_ptr = ¤t_floor_ptr->grid_array[y][x];
object_type forge;
object_type *q_ptr;
if (!cave_drop_bold(y, x)) return;
/* Avoid stacking on other objects */
- if (c_ptr->o_idx) return;
+ if (g_ptr->o_idx) return;
-
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Make an object (if possible) */
if (o_idx)
{
object_type *o_ptr;
-
- /* Acquire object */
o_ptr = &o_list[o_idx];
/* Structure Copy */
object_copy(o_ptr, q_ptr);
- /* Location */
o_ptr->iy = y;
o_ptr->ix = x;
/* Build a stack */
- o_ptr->next_o_idx = c_ptr->o_idx;
+ o_ptr->next_o_idx = g_ptr->o_idx;
/* Place the object */
- c_ptr->o_idx = o_idx;
+ g_ptr->o_idx = o_idx;
- /* Notice */
note_spot(y, x);
- /* Redraw */
lite_spot(y, x);
}
else
OBJECT_IDX o_idx;
/* Acquire grid */
- cave_type *c_ptr = &cave[y][x];
+ grid_type *g_ptr = ¤t_floor_ptr->grid_array[y][x];
object_type forge;
object_type *q_ptr;
if (!cave_drop_bold(y, x)) return;
/* Avoid stacking on other objects */
- if (c_ptr->o_idx) return;
-
+ if (g_ptr->o_idx) return;
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Make some gold */
if (o_idx)
{
object_type *o_ptr;
-
- /* Acquire object */
o_ptr = &o_list[o_idx];
/* Copy the object */
o_ptr->ix = x;
/* Build a stack */
- o_ptr->next_o_idx = c_ptr->o_idx;
+ o_ptr->next_o_idx = g_ptr->o_idx;
/* Place the object */
- c_ptr->o_idx = o_idx;
+ g_ptr->o_idx = o_idx;
- /* Notice */
note_spot(y, x);
- /* Redraw */
lite_spot(y, x);
}
}
OBJECT_IDX o_idx = 0;
OBJECT_IDX this_o_idx, next_o_idx = 0;
- cave_type *c_ptr;
+ grid_type *g_ptr;
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
bool flag = FALSE;
bool done = FALSE;
/* Handle normal "breakage" */
if (!object_is_artifact(j_ptr) && (randint0(100) < chance))
{
- /* Message */
#ifdef JP
msg_format("%sは消えた。", o_name);
#else
/* Ignore distant grids */
if (d > 10) continue;
- /* Location */
ty = y + dy;
tx = x + dx;
if (!projectable(y, x, ty, tx)) continue;
/* Obtain grid */
- c_ptr = &cave[ty][tx];
+ g_ptr = ¤t_floor_ptr->grid_array[ty][tx];
/* Require floor space */
if (!cave_drop_bold(ty, tx)) continue;
k = 0;
/* Scan objects in that grid */
- for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
+ for (this_o_idx = g_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 */
by = ty;
bx = tx;
- /* Okay */
flag = TRUE;
}
}
/* Handle lack of space */
if (!flag && !object_is_artifact(j_ptr))
{
- /* Message */
#ifdef JP
msg_format("%sは消えた。", o_name);
#else
/* Require floor space */
if (!cave_drop_bold(by, bx)) continue;
- /* Okay */
flag = TRUE;
}
{
int candidates = 0, pick;
- for (ty = 1; ty < cur_hgt - 1; ty++)
+ for (ty = 1; ty < current_floor_ptr->height - 1; ty++)
{
- for (tx = 1; tx < cur_wid - 1; tx++)
+ for (tx = 1; tx < current_floor_ptr->width - 1; tx++)
{
/* A valid space found */
if (cave_drop_bold(ty, tx)) candidates++;
/* No valid place! */
if (!candidates)
{
- /* Message */
#ifdef JP
msg_format("%sは消えた。", o_name);
#else
/* Choose a random one */
pick = randint1(candidates);
- for (ty = 1; ty < cur_hgt - 1; ty++)
+ for (ty = 1; ty < current_floor_ptr->height - 1; ty++)
{
- for (tx = 1; tx < cur_wid - 1; tx++)
+ for (tx = 1; tx < current_floor_ptr->width - 1; tx++)
{
if (cave_drop_bold(ty, tx))
{
}
- /* Grid */
- c_ptr = &cave[by][bx];
+ g_ptr = ¤t_floor_ptr->grid_array[by][bx];
/* Scan objects in that grid for combination */
- for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
+ for (this_o_idx = g_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 */
/* Check for combination */
if (object_similar(o_ptr, j_ptr))
{
- /* Combine the items */
object_absorb(o_ptr, j_ptr);
/* Success */
done = TRUE;
- /* Done */
break;
}
}
- /* Get new object */
if (!done) o_idx = o_pop();
/* Failure */
if (!done && !o_idx)
{
- /* Message */
#ifdef JP
msg_format("%sは消えた。", o_name);
#else
- msg_format("The %s disappear%s.",
- o_name, (plural ? "" : "s"));
+ msg_format("The %s disappear%s.", o_name, (plural ? "" : "s"));
#endif
-
/* Debug */
if (p_ptr->wizard) msg_print(_("(アイテムが多過ぎる)", "(too many objects)"));
j_ptr->held_m_idx = 0;
/* Build a stack */
- j_ptr->next_o_idx = c_ptr->o_idx;
+ j_ptr->next_o_idx = g_ptr->o_idx;
/* Place the object */
- c_ptr->o_idx = o_idx;
+ g_ptr->o_idx = o_idx;
/* Success */
done = TRUE;
}
- /* Note the spot */
note_spot(by, bx);
-
- /* Draw the spot */
lite_spot(by, bx);
-
sound(SOUND_DROP);
/* Mega-Hack -- no message if "dropped" by player */
msg_print(_("何かが足下に転がってきた。", "You feel something roll beneath your feet."));
}
- /* XXX XXX XXX */
-
- /* Result */
return (o_idx);
}
-
-/*!
- * @brief 獲得ドロップを行う。
- * Scatter some "great" objects near the player
- * @param y1 配置したいフロアのY座標
- * @param x1 配置したいフロアのX座標
- * @param num 獲得の処理回数
- * @param great TRUEならば必ず高級品以上を落とす
- * @param special TRUEならば必ず特別品を落とす
- * @param known TRUEならばオブジェクトが必ず*鑑定*済になる
- * @return なし
- */
-void acquirement(POSITION y1, POSITION x1, int num, bool great, bool special, bool known)
-{
- object_type *i_ptr;
- object_type object_type_body;
- BIT_FLAGS mode = AM_GOOD | (great || special ? AM_GREAT : 0L) | (special ? AM_SPECIAL : 0L) ;
-
- /* Acquirement */
- while (num--)
- {
- /* Get local object */
- i_ptr = &object_type_body;
-
- /* Wipe the object */
- object_wipe(i_ptr);
-
- /* Make a good (or great) object (if possible) */
- if (!make_object(i_ptr, mode)) continue;
-
- if (known)
- {
- object_aware(i_ptr);
- object_known(i_ptr);
- }
-
- /* Drop the object */
- (void)drop_near(i_ptr, -1, y1, x1);
- }
-}
-
-/*
- * Scatter some "amusing" objects near the player
- */
-
-#define AMS_NOTHING 0x00 /* No restriction */
-#define AMS_NO_UNIQUE 0x01 /* Don't make the amusing object of uniques */
-#define AMS_FIXED_ART 0x02 /* Make a fixed artifact based on the amusing object */
-#define AMS_MULTIPLE 0x04 /* Drop 1-3 objects for one type */
-#define AMS_PILE 0x08 /* Drop 1-99 pile objects for one type */
-
-typedef struct
-{
- OBJECT_TYPE_VALUE tval;
- OBJECT_SUBTYPE_VALUE sval;
- PERCENTAGE prob;
- byte flag;
-} amuse_type;
-
-amuse_type amuse_info[] =
-{
- { TV_BOTTLE, SV_ANY, 5, AMS_NOTHING },
- { TV_JUNK, SV_ANY, 3, AMS_MULTIPLE },
- { TV_SPIKE, SV_ANY, 10, AMS_PILE },
- { TV_STATUE, SV_ANY, 15, AMS_NOTHING },
- { TV_CORPSE, SV_ANY, 15, AMS_NO_UNIQUE },
- { TV_SKELETON, SV_ANY, 10, AMS_NO_UNIQUE },
- { TV_FIGURINE, SV_ANY, 10, AMS_NO_UNIQUE },
- { TV_PARCHMENT, SV_ANY, 1, AMS_NOTHING },
- { TV_POLEARM, SV_TSURIZAO, 3, AMS_NOTHING }, //Fishing Pole of Taikobo
- { TV_SWORD, SV_BROKEN_DAGGER, 3, AMS_FIXED_ART }, //Broken Dagger of Magician
- { TV_SWORD, SV_BROKEN_DAGGER, 10, AMS_NOTHING },
- { TV_SWORD, SV_BROKEN_SWORD, 5, AMS_NOTHING },
- { TV_SCROLL, SV_SCROLL_AMUSEMENT, 10, AMS_NOTHING },
-
- { 0, 0, 0 }
-};
-
-/*!
- * @brief 誰得ドロップを行う。
- * @param y1 配置したいフロアのY座標
- * @param x1 配置したいフロアのX座標
- * @param num 誰得の処理回数
- * @param known TRUEならばオブジェクトが必ず*鑑定*済になる
- * @return なし
- */
-void amusement(POSITION y1, POSITION x1, int num, bool known)
-{
- object_type *i_ptr;
- object_type object_type_body;
- int n, t = 0;
-
- for (n = 0; amuse_info[n].tval != 0; n++)
- {
- t += amuse_info[n].prob;
- }
-
- /* Acquirement */
- while (num)
- {
- int i;
- IDX k_idx, a_idx = 0;
- int r = randint0(t);
- bool insta_art, fixed_art;
-
- for (i = 0; ; i++)
- {
- r -= amuse_info[i].prob;
- if (r <= 0) break;
- }
-
- /* Get local object */
- i_ptr = &object_type_body;
-
- /* Wipe the object */
- object_wipe(i_ptr);
-
- /* Wipe the object */
- k_idx = lookup_kind(amuse_info[i].tval, amuse_info[i].sval);
-
- /* Paranoia - reroll if nothing */
- if (!k_idx) continue;
-
- /* Search an artifact index if need */
- insta_art = (k_info[k_idx].gen_flags & TRG_INSTA_ART);
- fixed_art = (amuse_info[i].flag & AMS_FIXED_ART);
-
- if (insta_art || fixed_art)
- {
- for (a_idx = 1; a_idx < max_a_idx; a_idx++)
- {
- if (insta_art && !(a_info[a_idx].gen_flags & TRG_INSTA_ART)) continue;
- if (a_info[a_idx].tval != k_info[k_idx].tval) continue;
- if (a_info[a_idx].sval != k_info[k_idx].sval) continue;
- if (a_info[a_idx].cur_num > 0) continue;
- break;
- }
-
- if (a_idx >= max_a_idx) continue;
- }
-
- /* Make an object (if possible) */
- object_prep(i_ptr, k_idx);
- if (a_idx) i_ptr->name1 = a_idx;
- apply_magic(i_ptr, 1, AM_NO_FIXED_ART);
-
- if (amuse_info[i].flag & AMS_NO_UNIQUE)
- {
- if (r_info[i_ptr->pval].flags1 & RF1_UNIQUE) continue;
- }
-
- if (amuse_info[i].flag & AMS_MULTIPLE) i_ptr->number = randint1(3);
- if (amuse_info[i].flag & AMS_PILE) i_ptr->number = randint1(99);
-
- if (known)
- {
- object_aware(i_ptr);
- object_known(i_ptr);
- }
-
- /* Paranoia - reroll if nothing */
- if (!(i_ptr->k_idx)) continue;
-
- /* Drop the object */
- (void)drop_near(i_ptr, -1, y1, x1);
-
- num--;
- }
-}
-
-
/*!
* @brief 魔道具の使用回数の残量を示すメッセージを表示する /
* Describe the charges on an item in the inventory.
/* Multiple charges */
if (o_ptr->pval != 1)
{
- /* Print a message */
msg_format("You have %d charges remaining.", o_ptr->pval);
}
/* Single charge */
else
{
- /* Print a message */
msg_format("You have %d charge remaining.", o_ptr->pval);
}
#endif
void inven_item_describe(INVENTORY_IDX item)
{
object_type *o_ptr = &inventory[item];
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
- /* Get a description */
object_desc(o_name, o_ptr, 0);
- /* Print a message */
#ifdef JP
/* "no more" の場合はこちらで表示する */
if (o_ptr->number <= 0)
}
/*!
- * @brief ã\82¢ã\82¤ã\83\86ã\83 ã\81®残り所持数メッセージを表示する /
+ * @brief ã\82¢ã\82¤ã\83\86ã\83 ã\82\92å¢\97æ¸\9bã\81\95ã\81\9b残り所持数メッセージを表示する /
* Increase the "number" of an item in the inventory
* @param item 所持数を増やしたいプレイヤーのアイテム所持スロット
* @param num 増やしたい量
* @return なし
*/
-void inven_item_increase(INVENTORY_IDX item, int num)
+void inven_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
{
object_type *o_ptr = &inventory[item];
else if (num < 0) num = 0;
/* Un-apply */
- num -= (ITEM_NUMBER)o_ptr->number;
+ num -= o_ptr->number;
/* Change the number and weight */
if (num)
/* Add the weight */
p_ptr->total_weight += (num * o_ptr->weight);
-
- /* Recalculate bonuses */
p_ptr->update |= (PU_BONUS);
/* Recalculate mana XXX */
p_ptr->update |= (PU_MANA);
-
- /* Combine the pack */
- p_ptr->notice |= (PN_COMBINE);
-
- /* Window stuff */
+ p_ptr->update |= (PU_COMBINE);
p_ptr->window |= (PW_INVEN | PW_EQUIP);
/* Hack -- Clear temporary elemental brands if player takes off weapons */
{
if ((item == INVEN_RARM) || (item == INVEN_LARM))
{
- if (!buki_motteruka(INVEN_RARM + INVEN_LARM - item))
+ if (!has_melee_weapon(INVEN_RARM + INVEN_LARM - item))
{
/* Clear all temporary elemental brands */
set_ele_attack(0, 0);
/* Erase the "final" slot */
object_wipe(&inventory[i]);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
}
/* Erase the empty slot */
object_wipe(&inventory[item]);
-
- /* Recalculate bonuses */
p_ptr->update |= (PU_BONUS);
/* Recalculate torch */
/* Recalculate mana XXX */
p_ptr->update |= (PU_MANA);
- /* Window stuff */
p_ptr->window |= (PW_EQUIP);
}
- /* Window stuff */
p_ptr->window |= (PW_SPELL);
}
/* Multiple charges */
if (o_ptr->pval != 1)
{
- /* Print a message */
msg_format("There are %d charges remaining.", o_ptr->pval);
}
/* Single charge */
else
{
- /* Print a message */
msg_format("There is %d charge remaining.", o_ptr->pval);
}
#endif
void floor_item_describe(INVENTORY_IDX item)
{
object_type *o_ptr = &o_list[item];
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
- /* Get a description */
object_desc(o_name, o_ptr, 0);
- /* Print a message */
#ifdef JP
/* "no more" の場合はこちらで表示を分ける */
if (o_ptr->number <= 0)
* @param num 増やしたいアイテムの数
* @return なし
*/
-void floor_item_increase(INVENTORY_IDX item, int num)
+void floor_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
{
object_type *o_ptr = &o_list[item];
else if (num < 0) num = 0;
/* Un-apply */
- num -= (int)o_ptr->number;
+ num -= o_ptr->number;
/* Change the number */
- o_ptr->number += (ITEM_NUMBER)num;
+ o_ptr->number += num;
}
/* Only optimize empty items */
if (o_ptr->number) return;
- /* Delete the object */
delete_object_idx(item);
}
if (object_similar(j_ptr, o_ptr)) return (TRUE);
}
- /* Nope */
return (FALSE);
}
/* Check if the two items can be combined */
if (object_similar(j_ptr, o_ptr))
{
- /* Combine the items */
object_absorb(j_ptr, o_ptr);
- /* Increase the weight */
p_ptr->total_weight += (o_ptr->number * o_ptr->weight);
-
- /* Recalculate bonuses */
p_ptr->update |= (PU_BONUS);
-
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
/* Success */
/* Player touches it, and no longer marked */
j_ptr->marked = OM_TOUCHED;
- /* Increase the weight */
p_ptr->total_weight += (j_ptr->number * j_ptr->weight);
/* Count the items */
inven_cnt++;
-
- /* Recalculate bonuses */
- p_ptr->update |= (PU_BONUS);
-
- /* Combine and Reorder pack */
- p_ptr->notice |= (PN_COMBINE | PN_REORDER);
-
- /* Window stuff */
+ p_ptr->update |= (PU_BONUS | PU_COMBINE | PU_REORDER);
p_ptr->window |= (PW_INVEN);
/* Return the slot */
object_type *o_ptr;
- cptr act;
+ concptr act;
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
/* Get the item to take off */
/* Verify */
if (amt > o_ptr->number) amt = o_ptr->number;
-
- /* Get local object */
q_ptr = &forge;
/* Obtain a local object */
/* Modify quantity */
q_ptr->number = amt;
- /* Describe the object */
object_desc(o_name, q_ptr, 0);
/* Took off weapon */
/* Carry the object */
slot = inven_carry(q_ptr);
- /* Message */
#ifdef JP
msg_format("%s(%c)%s。", o_name, index_to_label(slot), act);
#else
object_type *q_ptr;
object_type *o_ptr;
- char o_name[MAX_NLEN];
-
+ GAME_TEXT o_name[MAX_NLEN];
/* Access original object */
o_ptr = &inventory[item];
/* Not too many */
if (amt > o_ptr->number) amt = o_ptr->number;
-
/* Take off equipment */
if (item >= INVEN_RARM)
{
o_ptr = &inventory[item];
}
-
- /* Get local object */
q_ptr = &forge;
/* Obtain local object */
/* Describe local object */
object_desc(o_name, q_ptr, 0);
- /* Message */
msg_format(_("%s(%c)を落とした。", "You drop %s (%c)."), o_name, index_to_label(item));
/* Drop it near the player */
void combine_pack(void)
{
int i, j, k;
- object_type *o_ptr;
+ object_type *o_ptr;
object_type *j_ptr;
bool flag = FALSE, combined;
/* Combine the pack (backwards) */
for (i = INVEN_PACK; i > 0; i--)
{
- /* Get the item */
o_ptr = &inventory[i];
/* Skip empty items */
{
int max_num;
- /* Get the item */
j_ptr = &inventory[j];
/* Skip empty items */
}
}
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
/* Take note */
combined = TRUE;
- /* Done */
break;
}
}
}
while (combined);
- /* Message */
if (flag) msg_print(_("ザックの中のアイテムをまとめ直した。", "You combine some items in your pack."));
}
s32b o_value;
object_type forge;
object_type *q_ptr;
- object_type *o_ptr;
+ object_type *o_ptr;
bool flag = FALSE;
/* Mega-Hack -- allow "proper" over-flow */
if ((i == INVEN_PACK) && (inven_cnt == INVEN_PACK)) break;
- /* Get the item */
o_ptr = &inventory[i];
/* Skip empty slots */
/* Take note */
flag = TRUE;
-
- /* Get local object */
q_ptr = &forge;
/* Save a copy of the moving item */
/* Insert the moving item */
object_copy(&inventory[j], q_ptr);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
}
- /* Message */
if (flag) msg_print(_("ザックの中のアイテムを並べ直した。", "You reorder some items in your pack."));
}
* @details
* Include list of usable spells for readible books
*/
-void display_koff(IDX k_idx)
+void display_koff(KIND_OBJECT_IDX k_idx)
{
int y;
int sval;
REALM_IDX use_realm;
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
/* Erase the window */
/* No info */
if (!k_idx) return;
-
- /* Get local object */
q_ptr = &forge;
/* Prepare the object */
object_prep(q_ptr, k_idx);
-
- /* Describe */
object_desc(o_name, q_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY | OD_STORE));
/* Mention the object name */
/* Search Inventory */
for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
{
- u32b flgs[TR_FLAG_SIZE];
+ BIT_FLAGS flgs[TR_FLAG_SIZE];
object_type *o_ptr = &inventory[i];
object_flags(o_ptr, flgs);
if (blow_ptr->method != RBM_EXPLODE)
{
- int ac = p_ptr->ac + p_ptr->to_a;
+ ARMOUR_CLASS ac = p_ptr->ac + p_ptr->to_a;
switch (blow_ptr->effect)
{
* @param yy 危険性を調査するマスのY座標
* @return 警告を無視して進むことを選択するかか問題が無ければTRUE、警告に従ったならFALSEを返す。
*/
-bool process_warning(int xx, int yy)
+bool process_warning(POSITION xx, POSITION yy)
{
- int mx, my;
- cave_type *c_ptr;
- char o_name[MAX_NLEN];
+ POSITION mx, my;
+ grid_type *g_ptr;
+ GAME_TEXT o_name[MAX_NLEN];
#define WARNING_AWARE_RANGE 12
int dam_max = 0;
if (!in_bounds(my, mx) || (distance(my, mx, yy, xx) > WARNING_AWARE_RANGE)) continue;
- c_ptr = &cave[my][mx];
+ g_ptr = ¤t_floor_ptr->grid_array[my][mx];
- if (!c_ptr->m_idx) continue;
+ if (!g_ptr->m_idx) continue;
- m_ptr = &m_list[c_ptr->m_idx];
+ m_ptr = &m_list[g_ptr->m_idx];
if (MON_CSLEEP(m_ptr)) continue;
if (!is_hostile(m_ptr)) continue;
/* Monster spells (only powerful ones)*/
if (projectable(my, mx, yy, xx))
{
- u32b f4 = r_ptr->flags4;
- u32b f5 = r_ptr->a_ability_flags1;
- u32b f6 = r_ptr->a_ability_flags2;
+ BIT_FLAGS f4 = r_ptr->flags4;
+ BIT_FLAGS f5 = r_ptr->a_ability_flags1;
+ BIT_FLAGS f6 = r_ptr->a_ability_flags2;
- if (!(d_info[dungeon_type].flags1 & DF1_NO_MAGIC))
+ if (!(d_info[p_ptr->dungeon_idx].flags1 & DF1_NO_MAGIC))
{
- if (f4 & RF4_BA_CHAO) spell_damcalc_by_spellnum(MS_BALL_CHAOS, GF_CHAOS, c_ptr->m_idx, &dam_max0);
- if (f5 & RF5_BA_MANA) spell_damcalc_by_spellnum(MS_BALL_MANA, GF_MANA, c_ptr->m_idx, &dam_max0);
- if (f5 & RF5_BA_DARK) spell_damcalc_by_spellnum(MS_BALL_DARK, GF_DARK, c_ptr->m_idx, &dam_max0);
- if (f5 & RF5_BA_LITE) spell_damcalc_by_spellnum(MS_STARBURST, GF_LITE, c_ptr->m_idx, &dam_max0);
- if (f6 & RF6_HAND_DOOM) spell_damcalc_by_spellnum(MS_HAND_DOOM, GF_HAND_DOOM, c_ptr->m_idx, &dam_max0);
- if (f6 & RF6_PSY_SPEAR) spell_damcalc_by_spellnum(MS_PSY_SPEAR, GF_PSY_SPEAR, c_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BA_CHAO) spell_damcalc_by_spellnum(MS_BALL_CHAOS, GF_CHAOS, g_ptr->m_idx, &dam_max0);
+ if (f5 & RF5_BA_MANA) spell_damcalc_by_spellnum(MS_BALL_MANA, GF_MANA, g_ptr->m_idx, &dam_max0);
+ if (f5 & RF5_BA_DARK) spell_damcalc_by_spellnum(MS_BALL_DARK, GF_DARK, g_ptr->m_idx, &dam_max0);
+ if (f5 & RF5_BA_LITE) spell_damcalc_by_spellnum(MS_STARBURST, GF_LITE, g_ptr->m_idx, &dam_max0);
+ if (f6 & RF6_HAND_DOOM) spell_damcalc_by_spellnum(MS_HAND_DOOM, GF_HAND_DOOM, g_ptr->m_idx, &dam_max0);
+ if (f6 & RF6_PSY_SPEAR) spell_damcalc_by_spellnum(MS_PSY_SPEAR, GF_PSY_SPEAR, g_ptr->m_idx, &dam_max0);
}
- if (f4 & RF4_ROCKET) spell_damcalc_by_spellnum(MS_ROCKET, GF_ROCKET, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_ACID) spell_damcalc_by_spellnum(MS_BR_ACID, GF_ACID, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_ELEC) spell_damcalc_by_spellnum(MS_BR_ELEC, GF_ELEC, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_FIRE) spell_damcalc_by_spellnum(MS_BR_FIRE, GF_FIRE, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_COLD) spell_damcalc_by_spellnum(MS_BR_COLD, GF_COLD, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_POIS) spell_damcalc_by_spellnum(MS_BR_POIS, GF_POIS, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_NETH) spell_damcalc_by_spellnum(MS_BR_NETHER, GF_NETHER, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_LITE) spell_damcalc_by_spellnum(MS_BR_LITE, GF_LITE, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_DARK) spell_damcalc_by_spellnum(MS_BR_DARK, GF_DARK, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_CONF) spell_damcalc_by_spellnum(MS_BR_CONF, GF_CONFUSION, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_SOUN) spell_damcalc_by_spellnum(MS_BR_SOUND, GF_SOUND, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_CHAO) spell_damcalc_by_spellnum(MS_BR_CHAOS, GF_CHAOS, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_DISE) spell_damcalc_by_spellnum(MS_BR_DISEN, GF_DISENCHANT, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_NEXU) spell_damcalc_by_spellnum(MS_BR_NEXUS, GF_NEXUS, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_TIME) spell_damcalc_by_spellnum(MS_BR_TIME, GF_TIME, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_INER) spell_damcalc_by_spellnum(MS_BR_INERTIA, GF_INERTIAL, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_GRAV) spell_damcalc_by_spellnum(MS_BR_GRAVITY, GF_GRAVITY, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_SHAR) spell_damcalc_by_spellnum(MS_BR_SHARDS, GF_SHARDS, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_PLAS) spell_damcalc_by_spellnum(MS_BR_PLASMA, GF_PLASMA, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_WALL) spell_damcalc_by_spellnum(MS_BR_FORCE, GF_FORCE, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_MANA) spell_damcalc_by_spellnum(MS_BR_MANA, GF_MANA, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_NUKE) spell_damcalc_by_spellnum(MS_BR_NUKE, GF_NUKE, c_ptr->m_idx, &dam_max0);
- if (f4 & RF4_BR_DISI) spell_damcalc_by_spellnum(MS_BR_DISI, GF_DISINTEGRATE, c_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_ROCKET) spell_damcalc_by_spellnum(MS_ROCKET, GF_ROCKET, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_ACID) spell_damcalc_by_spellnum(MS_BR_ACID, GF_ACID, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_ELEC) spell_damcalc_by_spellnum(MS_BR_ELEC, GF_ELEC, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_FIRE) spell_damcalc_by_spellnum(MS_BR_FIRE, GF_FIRE, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_COLD) spell_damcalc_by_spellnum(MS_BR_COLD, GF_COLD, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_POIS) spell_damcalc_by_spellnum(MS_BR_POIS, GF_POIS, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_NETH) spell_damcalc_by_spellnum(MS_BR_NETHER, GF_NETHER, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_LITE) spell_damcalc_by_spellnum(MS_BR_LITE, GF_LITE, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_DARK) spell_damcalc_by_spellnum(MS_BR_DARK, GF_DARK, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_CONF) spell_damcalc_by_spellnum(MS_BR_CONF, GF_CONFUSION, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_SOUN) spell_damcalc_by_spellnum(MS_BR_SOUND, GF_SOUND, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_CHAO) spell_damcalc_by_spellnum(MS_BR_CHAOS, GF_CHAOS, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_DISE) spell_damcalc_by_spellnum(MS_BR_DISEN, GF_DISENCHANT, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_NEXU) spell_damcalc_by_spellnum(MS_BR_NEXUS, GF_NEXUS, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_TIME) spell_damcalc_by_spellnum(MS_BR_TIME, GF_TIME, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_INER) spell_damcalc_by_spellnum(MS_BR_INERTIA, GF_INERTIAL, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_GRAV) spell_damcalc_by_spellnum(MS_BR_GRAVITY, GF_GRAVITY, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_SHAR) spell_damcalc_by_spellnum(MS_BR_SHARDS, GF_SHARDS, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_PLAS) spell_damcalc_by_spellnum(MS_BR_PLASMA, GF_PLASMA, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_WALL) spell_damcalc_by_spellnum(MS_BR_FORCE, GF_FORCE, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_MANA) spell_damcalc_by_spellnum(MS_BR_MANA, GF_MANA, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_NUKE) spell_damcalc_by_spellnum(MS_BR_NUKE, GF_NUKE, g_ptr->m_idx, &dam_max0);
+ if (f4 & RF4_BR_DISI) spell_damcalc_by_spellnum(MS_BR_DISI, GF_DISINTEGRATE, g_ptr->m_idx, &dam_max0);
}
/* Monster melee attacks */
- if (!(r_ptr->flags1 & RF1_NEVER_BLOW) && !(d_info[dungeon_type].flags1 & DF1_NO_MELEE))
+ if (!(r_ptr->flags1 & RF1_NEVER_BLOW) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_NO_MELEE))
{
if (mx <= xx + 1 && mx >= xx - 1 && my <= yy + 1 && my >= yy - 1)
{
strcpy(o_name, _("体", "body")); /* Warning ability without item */
msg_format(_("%sが鋭く震えた!", "Your %s pulsates sharply!"), o_name);
- disturb(0, 1);
+ disturb(FALSE, TRUE);
return get_check(_("本当にこのまま進むか?", "Really want to go ahead? "));
}
}
else old_damage = old_damage / 2;
- c_ptr = &cave[yy][xx];
- if (((!easy_disarm && is_trap(c_ptr->feat))
- || (c_ptr->mimic && is_trap(c_ptr->feat))) && !one_in_(13))
+ g_ptr = ¤t_floor_ptr->grid_array[yy][xx];
+ if (((!easy_disarm && is_trap(g_ptr->feat))
+ || (g_ptr->mimic && is_trap(g_ptr->feat))) && !one_in_(13))
{
object_type *o_ptr = choose_warning_item();
else
strcpy(o_name, _("体", "body")); /* Warning ability without item */
msg_format(_("%sが鋭く震えた!", "Your %s pulsates sharply!"), o_name);
- disturb(0, 1);
+ disturb(FALSE, TRUE);
return get_check(_("本当にこのまま進むか?", "Really want to go ahead? "));
}
*/
typedef struct {
int add; /* TR flag number or special essence id */
- cptr add_name; /* Name of this ability */
+ concptr add_name; /* Name of this ability */
ESSENCE_IDX type; /* Menu number */
int essence; /* Index for carrying essences */
int value; /* Needed value to add this ability */
* エッセンス名テーブル / Essense names for Weapon smith
*/
#ifdef JP
-cptr essence_name[] =
+concptr essence_name[] =
{
"腕力",
"知能",
#else
-cptr essence_name[] =
+concptr essence_name[] =
{
"strength",
"intelligen.",
TIME_EFFECT old_timeout;
BIT_FLAGS old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
object_type *o_ptr;
- cptr q, s;
+ concptr q, s;
POSITION iy, ix;
byte_hack marked;
ITEM_NUMBER number;
drain_value[i] = 0;
item_tester_hook = object_is_weapon_armour_ammo;
- item_tester_no_ryoute = TRUE;
- /* Get an item */
q = _("どのアイテムから抽出しますか?", "Extract from which item? ");
s = _("抽出できるアイテムがありません。", "You have nothing you can extract from.");
- if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
-
- /* Get the item (in the pack) */
- if (item >= 0)
- {
- o_ptr = &inventory[item];
- }
-
- /* Get the item (on the floor) */
- else
- {
- o_ptr = &o_list[0 - item];
- }
+ o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT));
+ if (!o_ptr) return;
if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
{
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
if (!get_check(format(_("本当に%sから抽出してよろしいですか?", "Really extract from %s? "), o_name))) return;
}
- p_ptr->energy_use = 100;
+ take_turn(p_ptr, 100);
object_flags(o_ptr, old_flgs);
if (have_flag(old_flgs, TR_KILL_DRAGON)) add_flag(old_flgs, TR_SLAY_DRAGON);
/* Apply autodestroy/inscription to the drained item */
autopick_alter_item(item, TRUE);
-
- /* Combine the pack */
- p_ptr->notice |= (PN_COMBINE | PN_REORDER);
-
- /* Window stuff */
+ p_ptr->update |= (PU_COMBINE | PU_REORDER);
p_ptr->window |= (PW_INVEN);
}
COMMAND_CODE menu_line = (use_menu ? 1 : 0);
#ifdef JP
- cptr menu_name[] = {
+ concptr menu_name[] = {
"武器属性",
"耐性",
"能力",
"その他"
};
#else
- cptr menu_name[] = {
+ concptr menu_name[] = {
"Brand weapon",
"Resistance",
"Ability",
#endif
const COMMAND_CODE mode_max = 7;
-#ifdef ALLOW_REPEAT
if (repeat_pull(&mode) && 1 <= mode && mode <= mode_max)
return mode;
mode = 0;
-#endif /* ALLOW_REPEAT */
-
if (use_menu)
{
screen_save();
screen_load();
}
-#ifdef ALLOW_REPEAT
repeat_push(mode);
-#endif /* ALLOW_REPEAT */
return mode;
}
COMMAND_CODE i;
bool flag,redraw;
char choice;
- cptr q, s;
+ concptr q, s;
object_type *o_ptr;
int ask = TRUE;
char out_val[160];
int num[22];
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
int use_essence;
essence_type *es_ptr;
bool able[22] = { 0 };
num[max_num++] = i;
}
-#ifdef ALLOW_REPEAT
if (!repeat_pull(&i) || i<0 || i>=max_num)
{
-#endif /* ALLOW_REPEAT */
-
/* Nothing chosen yet */
flag = FALSE;
/* Show list */
redraw = TRUE;
-
- /* Save the screen */
if (!use_menu) screen_save();
for (y = 1; y < 24; y++)
{
/* Hide list */
redraw = FALSE;
-
- /* Restore the screen */
screen_load();
}
/* Stop the loop */
flag = TRUE;
}
-
- /* Restore the screen */
if (redraw) screen_load();
if (!flag) return;
-#ifdef ALLOW_REPEAT
repeat_push(i);
}
-#endif /* ALLOW_REPEAT */
-
es_ptr = &essence_info[num[i]];
if (es_ptr->add == ESSENCE_SLAY_GLOVE)
item_tester_hook = object_is_armour;
else
item_tester_hook = object_is_weapon_armour_ammo;
- item_tester_no_ryoute = TRUE;
- /* Get an item */
q = _("どのアイテムを改良しますか?", "Improve which item? ");
s = _("改良できるアイテムがありません。", "You have nothing to improve.");
- if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
-
- /* Get the item (in the pack) */
- if (item >= 0)
- {
- o_ptr = &inventory[item];
- }
-
- /* Get the item (on the floor) */
- else
- {
- o_ptr = &o_list[0 - item];
- }
+ o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT));
+ if (!o_ptr) return;
if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(o_ptr)))
{
if ((o_ptr->to_h >= p_ptr->lev/5+5) && (o_ptr->to_d >= p_ptr->lev/5+5))
{
msg_print(_("改良に失敗した。", "You failed to enchant."));
- p_ptr->energy_use = 100;
+ take_turn(p_ptr, 100);
return;
}
else
if (o_ptr->to_a >= p_ptr->lev/5+5)
{
msg_print(_("改良に失敗した。", "You failed to enchant."));
- p_ptr->energy_use = 100;
+ take_turn(p_ptr, 100);
return;
}
else
}
}
- p_ptr->energy_use = 100;
+ take_turn(p_ptr, 100);
#ifdef JP
- msg_format("%sに%sの能力を付加しました。", o_name, es_ptr->add_name);
+ msg_format(_("%sに%sの能力を付加しました。", "You have added ability of %s to %s."), o_name, es_ptr->add_name);
#else
- msg_format("You have added ability of %s to %s.", es_ptr->add_name, o_name);
+ msg_format(, es_ptr->add_name, o_name);
#endif
-
- /* Combine the pack */
- p_ptr->notice |= (PN_COMBINE | PN_REORDER);
-
- /* Window stuff */
+ p_ptr->update |= (PU_COMBINE | PU_REORDER);
p_ptr->window |= (PW_INVEN);
}
static void erase_essence(void)
{
OBJECT_IDX item;
- cptr q, s;
+ concptr q, s;
object_type *o_ptr;
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
BIT_FLAGS flgs[TR_FLAG_SIZE];
item_tester_hook = object_is_smith;
- /* Get an item */
q = _("どのアイテムのエッセンスを消去しますか?", "Remove from which item? ");
s = _("エッセンスを付加したアイテムがありません。", "You have nothing to remove essence.");
- if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
-
- /* Get the item (in the pack) */
- if (item >= 0)
- {
- o_ptr = &inventory[item];
- }
-
- /* Get the item (on the floor) */
- else
- {
- o_ptr = &o_list[0 - item];
- }
+ o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
+ if (!o_ptr) return;
object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
if (!get_check(format(_("よろしいですか? [%s]", "Are you sure? [%s]"), o_name))) return;
- p_ptr->energy_use = 100;
+ take_turn(p_ptr, 100);
- if (o_ptr->xtra3 == 1+ESSENCE_SLAY_GLOVE)
+ if (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE)
{
o_ptr->to_h -= (o_ptr->xtra4>>8);
o_ptr->to_d -= (o_ptr->xtra4 & 0x000f);
object_flags(o_ptr, flgs);
if (!(have_pval_flags(flgs))) o_ptr->pval = 0;
msg_print(_("エッセンスを取り去った。", "You removed all essence you have added."));
-
- /* Combine the pack */
- p_ptr->notice |= (PN_COMBINE | PN_REORDER);
-
- /* Window stuff */
+ p_ptr->update |= (PU_COMBINE | PU_REORDER);
p_ptr->window |= (PW_INVEN);
}
if (!only_browse)
{
- if (p_ptr->confused)
- {
- msg_print(_("混乱していて作業できない!", "You are too confused!"));
- return;
- }
+ if (cmd_limit_confused(p_ptr)) return;
if (p_ptr->blind)
{
msg_print(_("目が見えなくて作業できない!", "You are blind!"));
}
}
-#ifdef ALLOW_REPEAT
if (!(repeat_pull(&mode) && 1 <= mode && mode <= 5))
{
-#endif /* ALLOW_REPEAT */
-
if (only_browse) screen_save();
do {
if (!only_browse) screen_save();
{
while (!mode)
{
+ prt(_(" a) エッセンス一覧", " a) List essences"), 2, 14);
+ prt(_(" b) エッセンス抽出", " b) Extract essence"), 3, 14);
+ prt(_(" c) エッセンス消去", " c) Remove essence"), 4, 14);
+ prt(_(" d) エッセンス付加", " d) Add essence"), 5, 14);
+ prt(_(" e) 武器/防具強化", " e) Enchant weapon/armor"), 6, 14);
#ifdef JP
- prt(" a) エッセンス一覧", 2, 14);
- prt(" b) エッセンス抽出", 3, 14);
- prt(" c) エッセンス消去", 4, 14);
- prt(" d) エッセンス付加", 5, 14);
- prt(" e) 武器/防具強化", 6, 14);
if (!get_com(format("どの能力を%sますか:", only_browse ? "調べ" : "使い"), &choice, TRUE))
#else
- prt(" a) List essences", 2, 14);
- prt(" b) Extract essence", 3, 14);
- prt(" c) Remove essence", 4, 14);
- prt(" d) Add essence", 5, 14);
- prt(" e) Enchant weapon/armor", 6, 14);
if (!get_com("Command :", &choice, TRUE))
#endif
{
}
if (!only_browse) screen_load();
} while (only_browse);
-#ifdef ALLOW_REPEAT
repeat_push(mode);
}
-#endif /* ALLOW_REPEAT */
-
switch(mode)
{
case 1: display_essence();break;
* @param flgs 特別に追加するフラグを返す参照ポインタ
* @return なし
*/
-void torch_flags(object_type *o_ptr, u32b *flgs)
+void torch_flags(object_type *o_ptr, BIT_FLAGS *flgs)
{
if ((o_ptr->tval == TV_LITE) && (o_ptr->sval == SV_LITE_TORCH))
{
* @param ds 特別なダイス面数を返す参照ポインタ
* @return なし
*/
-void torch_dice(object_type *o_ptr, int *dd, int *ds)
+void torch_dice(object_type *o_ptr, DICE_NUMBER *dd, DICE_SID *ds)
{
if ((o_ptr->tval == TV_LITE) && (o_ptr->sval == SV_LITE_TORCH))
{