*/
#include "angband.h"
+#include "object-hook.h"
+#include "object-curse.h"
+
+static void one_sustain(object_type *o_ptr);
+
static cptr const kaji_tips[5] =
{
};
/*!
+ * @brief 対象のオブジェクトにランダムな能力維持を一つ付加する。/ Choose one random sustain
+ * @details 重複の抑止はない。
+ * @param o_ptr 対象のオブジェクト構造体ポインタ
+ * @return なし
+ */
+static void one_sustain(object_type *o_ptr)
+{
+ switch (randint0(6))
+ {
+ case 0: add_flag(o_ptr->art_flags, TR_SUST_STR); break;
+ case 1: add_flag(o_ptr->art_flags, TR_SUST_INT); break;
+ case 2: add_flag(o_ptr->art_flags, TR_SUST_WIS); break;
+ case 3: add_flag(o_ptr->art_flags, TR_SUST_DEX); break;
+ case 4: add_flag(o_ptr->art_flags, TR_SUST_CON); break;
+ case 5: add_flag(o_ptr->art_flags, TR_SUST_CHR); break;
+ }
+}
+
+/*!
* @brief 床上、モンスター所持でスタックされたアイテムを削除しスタックを補完する / Excise a dungeon object from any stacks
* @param o_idx 削除対象のオブジェクト構造体ポインタ
* @return なし
*/
-void excise_object_idx(int o_idx)
+void excise_object_idx(OBJECT_IDX o_idx)
{
object_type *j_ptr;
- s16b this_o_idx, next_o_idx = 0;
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
s16b prev_o_idx = 0;
/* 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;
}
{
cave_type *c_ptr;
- int y = j_ptr->iy;
- int x = j_ptr->ix;
+ POSITION y = j_ptr->iy;
+ POSITION x = j_ptr->ix;
/* Grid */
c_ptr = &cave[y][x];
/* 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;
}
* @details
* Handle "stacks" of objects correctly.
*/
-void delete_object_idx(int o_idx)
+void delete_object_idx(OBJECT_IDX o_idx)
{
object_type *j_ptr;
/* 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 */
* @param x 削除したフロアマスのX座標
* @return なし
*/
-void delete_object(int y, int x)
+void delete_object(POSITION y, POSITION x)
{
cave_type *c_ptr;
-
- s16b this_o_idx, next_o_idx = 0;
-
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
/* Refuse "illegal" locations */
if (!in_bounds(y, x)) return;
-
/* Grid */
c_ptr = &cave[y][x];
/* Acquire next object */
next_o_idx = o_ptr->next_o_idx;
-
- /* Wipe the object */
object_wipe(o_ptr);
/* Count objects */
/* Dungeon */
else
{
- int y, x;
+ POSITION y, x;
/* Acquire location */
y = o_ptr->iy;
*/
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);
}
/* Apply the saving throw */
if (randint0(100) < chance) continue;
- /* Delete the object */
delete_object_idx(i);
/* Count it */
cave_type *c_ptr;
/* Access location */
- int y = o_ptr->iy;
- int x = o_ptr->ix;
+ POSITION y = o_ptr->iy;
+ POSITION x = o_ptr->ix;
/* Access grid */
c_ptr = &cave[y][x];
/* Hack -- see above */
c_ptr->o_idx = 0;
}
-
- /* Wipe the object */
object_wipe(o_ptr);
}
* This routine should almost never fail, but in case it does,
* we must be sure to handle "failure" of this routine.
*/
-IDX o_pop(void)
+OBJECT_IDX o_pop(void)
{
- IDX i;
-
+ OBJECT_IDX i;
/* Initial allocation */
if (o_max < max_o_idx)
/* Warn the player (except during dungeon creation) */
if (character_dungeon) msg_print(_("アイテムが多すぎる!", "Too many objects!"));
- /* Oops */
return (0);
}
* Note that if no objects are "appropriate", then this function will\n
* fail, and return zero, but this should *almost* never happen.\n
*/
-s16b get_obj_num(int level)
+OBJECT_IDX get_obj_num(DEPTH level)
{
- int i, j, p;
- int k_idx;
- long value, total;
+ int i, j, p;
+ KIND_OBJECT_IDX k_idx;
+ long value, total;
object_kind *k_ptr;
alloc_entry *table = alloc_kind_table;
if (table[i].level < table[j].level) i = j;
}
-
- /* Result */
return (table[i].index);
}
}
}
-
/*!
* @brief オブジェクトを試行済にする /
* Something has been "sampled"
k_info[o_ptr->k_idx].tried = TRUE;
}
+/*!
+* @brief 重度擬似鑑定の判断処理 / Return a "feeling" (or NULL) about an item. Method 1 (Heavy).
+* @param o_ptr 擬似鑑定を行うオブジェクトの参照ポインタ。
+* @return 擬似鑑定結果のIDを返す。
+*/
+byte value_check_aux1(object_type *o_ptr)
+{
+ /* Artifacts */
+ if (object_is_artifact(o_ptr))
+ {
+ /* Cursed/Broken */
+ if (object_is_cursed(o_ptr) || object_is_broken(o_ptr)) return FEEL_TERRIBLE;
+
+ /* Normal */
+ return FEEL_SPECIAL;
+ }
+
+ /* Ego-Items */
+ if (object_is_ego(o_ptr))
+ {
+ /* Cursed/Broken */
+ if (object_is_cursed(o_ptr) || object_is_broken(o_ptr)) return FEEL_WORTHLESS;
+
+ /* Normal */
+ return FEEL_EXCELLENT;
+ }
+
+ /* Cursed items */
+ if (object_is_cursed(o_ptr)) return FEEL_CURSED;
+
+ /* Broken items */
+ if (object_is_broken(o_ptr)) return FEEL_BROKEN;
+
+ if ((o_ptr->tval == TV_RING) || (o_ptr->tval == TV_AMULET)) return FEEL_AVERAGE;
+
+ /* Good "armor" bonus */
+ if (o_ptr->to_a > 0) return FEEL_GOOD;
+
+ /* Good "weapon" bonus */
+ if (o_ptr->to_h + o_ptr->to_d > 0) return FEEL_GOOD;
+
+ /* Default to "average" */
+ return FEEL_AVERAGE;
+}
+
+/*!
+* @brief 軽度擬似鑑定の判断処理 / Return a "feeling" (or NULL) about an item. Method 2 (Light).
+* @param o_ptr 擬似鑑定を行うオブジェクトの参照ポインタ。
+* @return 擬似鑑定結果のIDを返す。
+*/
+byte value_check_aux2(object_type *o_ptr)
+{
+ /* Cursed items (all of them) */
+ if (object_is_cursed(o_ptr)) return FEEL_CURSED;
+
+ /* Broken items (all of them) */
+ if (object_is_broken(o_ptr)) return FEEL_BROKEN;
+
+ /* Artifacts -- except cursed/broken ones */
+ if (object_is_artifact(o_ptr)) return FEEL_UNCURSED;
+
+ /* Ego-Items -- except cursed/broken ones */
+ if (object_is_ego(o_ptr)) return FEEL_UNCURSED;
+
+ /* Good armor bonus */
+ if (o_ptr->to_a > 0) return FEEL_UNCURSED;
+
+ /* Good weapon bonuses */
+ if (o_ptr->to_h + o_ptr->to_d > 0) return FEEL_UNCURSED;
+
+ /* No feeling */
+ return FEEL_NONE;
+}
/*!
* @brief 未鑑定なベースアイテムの基本価格を返す /
/* Figurines, relative to monster level */
case TV_FIGURINE:
{
- int level = r_info[o_ptr->pval].level;
+ DEPTH level = r_info[o_ptr->pval].level;
if (level < 20) return level*50L;
else if (level < 30) return 1000+(level-20)*150L;
else if (level < 40) return 2500+(level-30)*350L;
s32b flag_cost(object_type *o_ptr, int plusses)
{
s32b total = 0;
- u32b flgs[TR_FLAG_SIZE];
+ BIT_FLAGS flgs[TR_FLAG_SIZE];
s32b tmp_cost;
int count;
int i;
*\n
* Every wearable item with a "pval" bonus is worth extra (see below).\n
*/
-s32b object_value_real(object_type *o_ptr)
+PRICE object_value_real(object_type *o_ptr)
{
- s32b value;
-
- u32b flgs[TR_FLAG_SIZE];
-
+ PRICE value;
+ BIT_FLAGS flgs[TR_FLAG_SIZE];
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;
}
/* Figurines, relative to monster level */
case TV_FIGURINE:
{
- int level = r_info[o_ptr->pval].level;
+ DEPTH level = r_info[o_ptr->pval].level;
if (level < 20) value = level*50L;
else if (level < 30) value = 1000+(level-20)*150L;
else if (level < 40) value = 2500+(level-30)*350L;
* Note that discounted items stay discounted forever, even if\n
* the discount is "forgotten" by the player via memory loss.\n
*/
-s32b object_value(object_type *o_ptr)
+PRICE object_value(object_type *o_ptr)
{
- s32b value;
-
+ PRICE value;
/* Unknown items -- acquire a base value */
if (object_is_known(o_ptr))
/* Combine the pack */
p_ptr->notice |= (PN_COMBINE);
- /* Window stuff */
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- */
}
#if 0
- /* Oops */
msg_format(_("アイテムがない (%d,%d)", "No object (%d,%d)"), tval, sval);
#endif
- /* Oops */
return (0);
}
* @param k_idx 新たに作成したいベースアイテム情報のID
* @return なし
*/
-void object_prep(object_type *o_ptr, IDX k_idx)
+void object_prep(object_type *o_ptr, KIND_OBJECT_IDX k_idx)
{
object_kind *k_ptr = &k_info[k_idx];
o_ptr->ds = k_ptr->ds;
/* Default activation */
- if (k_ptr->act_idx > 0) o_ptr->xtra2 = k_ptr->act_idx;
+ if (k_ptr->act_idx > 0) o_ptr->xtra2 = (XTRA8)k_ptr->act_idx;
/* Hack -- worthless items are always "broken" */
if (k_info[o_ptr->k_idx].cost <= 0) o_ptr->ident |= (IDENT_BROKEN);
* 120 0.03 0.11 0.31 0.46 1.31 2.48 4.60 7.78 11.67 25.53 45.72\n
* 128 0.02 0.01 0.13 0.33 0.83 1.41 3.24 6.17 9.57 14.22 64.07\n
*/
-s16b m_bonus(int max, int level)
+int m_bonus(int max, DEPTH level)
{
int bonus, stand, extra, value;
/* Enforce the maximum value */
if (value > max) return (max);
-
- /* Result */
return (value);
}
static bool make_artifact_special(object_type *o_ptr)
{
IDX i;
- IDX k_idx = 0;
+ KIND_OBJECT_IDX k_idx = 0;
/*! @note 地上ではキャンセルする / No artifacts in the town */
if (!dun_level) return (FALSE);
* Hack -- note special base damage dice boosting\n
* Hack -- note special processing for weapon/digger\n
*/
-static void a_m_aux_1(object_type *o_ptr, int level, int power)
+static void a_m_aux_1(object_type *o_ptr, DEPTH level, int power)
{
- HIT_PROB tohit1 = randint1(5) + m_bonus(5, level);
- HIT_POINT todam1 = randint1(5) + m_bonus(5, level);
+ HIT_PROB tohit1 = randint1(5) + (HIT_PROB)m_bonus(5, level);
+ HIT_POINT todam1 = randint1(5) + (HIT_POINT)m_bonus(5, level);
- HIT_PROB tohit2 = m_bonus(10, level);
- HIT_POINT todam2 = m_bonus(10, level);
+ HIT_PROB tohit2 = (HIT_PROB)m_bonus(10, level);
+ HIT_POINT todam2 = (HIT_POINT)m_bonus(10, level);
if ((o_ptr->tval == TV_BOLT) || (o_ptr->tval == TV_ARROW) || (o_ptr->tval == TV_SHOT))
{
add_flag(o_ptr->art_flags, TR_RES_FEAR);
break;
case EGO_SHARPNESS:
- o_ptr->pval = m_bonus(5, level) + 1;
+ o_ptr->pval = (PARAMETER_VALUE)m_bonus(5, level) + 1;
break;
case EGO_EARTHQUAKES:
if (one_in_(3) && (level > 60))
add_flag(o_ptr->art_flags, TR_BLOWS);
else
- o_ptr->pval = m_bonus(3, level);
+ o_ptr->pval = (PARAMETER_VALUE)m_bonus(3, level);
break;
case EGO_VAMPIRIC:
if (one_in_(5))
* Hack -- note special processing for crown/helm\n
* Hack -- note special processing for robe of permanence\n
*/
-static void a_m_aux_2(object_type *o_ptr, int level, int power)
+static void a_m_aux_2(object_type *o_ptr, DEPTH level, int power)
{
- ARMOUR_CLASS toac1 = randint1(5) + m_bonus(5, level);
- ARMOUR_CLASS toac2 = m_bonus(10, level);
+ ARMOUR_CLASS toac1 = (ARMOUR_CLASS)randint1(5) + m_bonus(5, level);
+ ARMOUR_CLASS toac2 = (ARMOUR_CLASS)m_bonus(10, level);
/* Good */
if (power > 0)
o_ptr->to_d -= 6;
o_ptr->to_h -= 6;
break;
- case EGO_NAZGUL:
+ case EGO_NAZGUL:
o_ptr->to_d -= 3;
o_ptr->to_h -= 3;
if (one_in_(3)) add_flag(o_ptr->art_flags, TR_COWARDICE);
* Hack -- note special "pval boost" code for ring of speed\n
* Hack -- note that some items must be cursed (or blessed)\n
*/
-static void a_m_aux_3(object_type *o_ptr, int level, int power)
+static void a_m_aux_3(object_type *o_ptr, DEPTH level, int power)
{
/* Apply magic (good or bad) according to type */
switch (o_ptr->tval)
case SV_RING_ATTACKS:
{
/* Stat bonus */
- o_ptr->pval = m_bonus(2, level);
+ o_ptr->pval = (PARAMETER_VALUE)m_bonus(2, level);
if (one_in_(15)) o_ptr->pval++;
if (o_ptr->pval < 1) o_ptr->pval = 1;
case SV_RING_DEX:
{
/* Stat bonus */
- o_ptr->pval = 1 + m_bonus(5, level);
+ o_ptr->pval = 1 + (PARAMETER_VALUE)m_bonus(5, level);
/* Cursed */
if (power < 0)
case SV_RING_SPEED:
{
/* Base speed (1 to 10) */
- o_ptr->pval = randint1(5) + m_bonus(5, level);
+ o_ptr->pval = randint1(5) + (PARAMETER_VALUE)m_bonus(5, level);
/* Super-charge the ring */
while (randint0(100) < 50) o_ptr->pval++;
while (one_in_(4));
/* Bonus to armor class */
- o_ptr->to_a = 10 + randint1(5) + m_bonus(10, level);
+ o_ptr->to_a = 10 + randint1(5) + (ARMOUR_CLASS)m_bonus(10, level);
}
break;
case SV_RING_SEARCHING:
{
/* Bonus to searching */
- o_ptr->pval = 1 + m_bonus(5, level);
+ o_ptr->pval = 1 + (PARAMETER_VALUE)m_bonus(5, level);
/* Cursed */
if (power < 0)
case SV_RING_ELEC:
{
/* Bonus to armor class */
- o_ptr->to_a = 5 + randint1(5) + m_bonus(10, level);
+ o_ptr->to_a = 5 + randint1(5) + (ARMOUR_CLASS)m_bonus(10, level);
break;
}
o_ptr->curse_flags |= TRC_CURSED;
/* Penalize */
- o_ptr->pval = 0 - (1 + m_bonus(5, level));
+ o_ptr->pval = 0 - (1 + (PARAMETER_VALUE)m_bonus(5, level));
if (power > 0) power = 0 - power;
break;
o_ptr->curse_flags |= TRC_CURSED;
/* Penalize */
- o_ptr->to_a = 0 - (5 + m_bonus(10, level));
- o_ptr->pval = 0 - (1 + m_bonus(5, level));
+ o_ptr->to_a = 0 - (5 + (ARMOUR_CLASS)m_bonus(10, level));
+ o_ptr->pval = 0 - (1 + (PARAMETER_VALUE)m_bonus(5, level));
if (power > 0) power = 0 - power;
break;
case SV_RING_DAMAGE:
{
/* Bonus to damage */
- o_ptr->to_d = 1 + randint1(5) + m_bonus(16, level);
+ o_ptr->to_d = 1 + randint1(5) + (HIT_POINT)m_bonus(16, level);
/* Cursed */
if (power < 0)
case SV_RING_ACCURACY:
{
/* Bonus to hit */
- o_ptr->to_h = 1 + randint1(5) + m_bonus(16, level);
+ o_ptr->to_h = 1 + randint1(5) + (HIT_PROB)m_bonus(16, level);
/* Cursed */
if (power < 0)
case SV_RING_PROTECTION:
{
/* Bonus to armor class */
- o_ptr->to_a = 5 + randint1(8) + m_bonus(10, level);
+ o_ptr->to_a = 5 + randint1(8) + (ARMOUR_CLASS)m_bonus(10, level);
/* Cursed */
if (power < 0)
case SV_RING_SLAYING:
{
/* Bonus to damage and to hit */
- o_ptr->to_d = randint1(5) + m_bonus(12, level);
- o_ptr->to_h = randint1(5) + m_bonus(12, level);
+ o_ptr->to_d = randint1(5) + (HIT_POINT)m_bonus(12, level);
+ o_ptr->to_h = randint1(5) + (HIT_PROB)m_bonus(12, level);
/* Cursed */
if (power < 0)
case SV_RING_MUSCLE:
{
- o_ptr->pval = 1 + m_bonus(3, level);
+ o_ptr->pval = 1 + (PARAMETER_VALUE)m_bonus(3, level);
if (one_in_(4)) o_ptr->pval++;
/* Cursed */
case SV_AMULET_WISDOM:
case SV_AMULET_CHARISMA:
{
- o_ptr->pval = 1 + m_bonus(5, level);
+ o_ptr->pval = 1 + (PARAMETER_VALUE)m_bonus(5, level);
/* Cursed */
if (power < 0)
/* Amulet of searching */
case SV_AMULET_SEARCHING:
{
- o_ptr->pval = randint1(2) + m_bonus(4, level);
+ o_ptr->pval = randint1(2) + (PARAMETER_VALUE)m_bonus(4, level);
/* Cursed */
if (power < 0)
/* Amulet of the Magi -- never cursed */
case SV_AMULET_THE_MAGI:
{
- o_ptr->pval = randint1(5) + m_bonus(5, level);
- o_ptr->to_a = randint1(5) + m_bonus(5, level);
+ o_ptr->pval = randint1(5) + (PARAMETER_VALUE)m_bonus(5, level);
+ o_ptr->to_a = randint1(5) + (ARMOUR_CLASS)m_bonus(5, level);
/* gain one low ESP */
add_esp_weak(o_ptr, FALSE);
o_ptr->curse_flags |= (TRC_CURSED);
/* Penalize */
- o_ptr->pval = 0 - (randint1(5) + m_bonus(5, level));
- o_ptr->to_a = 0 - (randint1(5) + m_bonus(5, level));
+ o_ptr->pval = 0 - (randint1(5) + (PARAMETER_VALUE)m_bonus(5, level));
+ o_ptr->to_a = 0 - (randint1(5) + (ARMOUR_CLASS)m_bonus(5, level));
if (power > 0) power = 0 - power;
break;
case SV_AMULET_MAGIC_MASTERY:
{
- o_ptr->pval = 1 + m_bonus(4, level);
+ o_ptr->pval = 1 + (PARAMETER_VALUE)m_bonus(4, level);
/* Cursed */
if (power < 0)
if (r_ptr->flags1 & RF1_FORCE_DEPTH) return (FALSE);
if (r_ptr->flags7 & RF7_UNIQUE2) return (FALSE);
- /* Okay */
return (TRUE);
}
* @details
* Hack -- note the special code for various items
*/
-static void a_m_aux_4(object_type *o_ptr, int level, int power)
+static void a_m_aux_4(object_type *o_ptr, DEPTH level, int power)
{
object_kind *k_ptr = &k_info[o_ptr->k_idx];
case TV_CHEST:
{
- byte obj_level = k_info[o_ptr->k_idx].level;
+ DEPTH obj_level = k_info[o_ptr->k_idx].level;
/* Hack -- skip ruined chests */
if (obj_level <= 0) break;
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;
}
}
/* Hack -- apply activatin index if needed */
- if (e_ptr->act_idx) o_ptr->xtra2 = e_ptr->act_idx;
+ if (e_ptr->act_idx) o_ptr->xtra2 = (XTRA8)e_ptr->act_idx;
/* Hack -- apply extra penalties if needed */
if ((object_is_cursed(o_ptr) || object_is_broken(o_ptr)) && !(e_ptr->gen_flags & (TRG_POWERFUL)))
o_ptr->pval = 2;
}
- /* Done */
return;
}
* @param k_idx 判定したいベースアイテムのID
* @return ベースアイテムが上質ならばTRUEを返す。
*/
-static bool kind_is_good(int k_idx)
+static bool kind_is_good(KIND_OBJECT_IDX k_idx)
{
object_kind *k_ptr = &k_info[k_idx];
*/
bool make_object(object_type *j_ptr, BIT_FLAGS mode)
{
- int prob, base;
- byte obj_level;
+ PERCENTAGE prob;
+ DEPTH base;
/* Chance of "special object" */
/* 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)
}
}
- obj_level = k_info[j_ptr->k_idx].level;
- if (object_is_fixed_artifact(j_ptr)) obj_level = a_info[j_ptr->name1].level;
-
if (cheat_peek) object_mention(j_ptr);
/* Success */
*/
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];
/* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Make an object (if possible) */
/* Structure Copy */
object_copy(o_ptr, q_ptr);
- /* Location */
o_ptr->iy = y;
o_ptr->ix = x;
/* Place the object */
c_ptr->o_idx = o_idx;
- /* Notice */
note_spot(y, x);
- /* Redraw */
lite_spot(y, x);
}
else
bool make_gold(object_type *j_ptr)
{
int i;
-
s32b base;
-
/* Hack -- Pick a Treasure variety */
i = ((randint1(object_level + 2) + 2) / 2) - 1;
object_prep(j_ptr, OBJ_GOLD_LIST + i);
/* Hack -- Base coin cost */
- base = k_info[OBJ_GOLD_LIST+i].cost;
+ base = k_info[OBJ_GOLD_LIST + i].cost;
/* Determine how much the treasure is "worth" */
j_ptr->pval = (base + (8L * randint1(base)) + randint1(8));
*/
void place_gold(POSITION y, POSITION x)
{
- s16b o_idx;
+ OBJECT_IDX o_idx;
/* Acquire grid */
cave_type *c_ptr = &cave[y][x];
-
object_type forge;
object_type *q_ptr;
/* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Make some gold */
if (!make_gold(q_ptr)) return;
-
/* Make an object */
o_idx = o_pop();
/* Place the object */
c_ptr->o_idx = o_idx;
- /* Notice */
note_spot(y, x);
- /* Redraw */
lite_spot(y, x);
}
}
* @param chance ドロップの成功率(%)
* @param y 配置したいフロアのY座標
* @param x 配置したいフロアのX座標
- * @return 生成に成功したらTRUEを返す。
+ * @return 生成に成功したらオブジェクトのIDを返す。
* @details
* The initial location is assumed to be "in_bounds()".\n
*\n
* the object can combine, stack, or be placed. Artifacts will try very\n
* hard to be placed, including "teleporting" to a useful grid if needed.\n
*/
-s16b drop_near(object_type *j_ptr, int chance, int y, int x)
+OBJECT_IDX drop_near(object_type *j_ptr, PERCENTAGE chance, POSITION y, POSITION x)
{
int i, k, d, s;
int bs, bn;
- int by, bx;
- int dy, dx;
- int ty, tx = 0;
+ POSITION by, bx;
+ POSITION dy, dx;
+ POSITION ty, tx = 0;
- s16b o_idx = 0;
-
- s16b this_o_idx, next_o_idx = 0;
+ OBJECT_IDX o_idx = 0;
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
cave_type *c_ptr;
/* Handle normal "breakage" */
if (!object_is_artifact(j_ptr) && (randint0(100) < chance))
{
- /* 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(_("(破損)", "(breakage)"));
/* Ignore distant grids */
if (d > 10) continue;
- /* Location */
ty = y + dy;
tx = x + dx;
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
- msg_format("The %s disappear%s.",
- o_name, (plural ? "" : "s"));
+ msg_format("The %s disappear%s.", o_name, (plural ? "" : "s"));
#endif
/* Require floor space */
if (!cave_drop_bold(by, bx)) continue;
- /* Okay */
flag = TRUE;
}
/* No valid place! */
if (!candidates)
{
- /* Message */
#ifdef JP
msg_format("%sは消えた。", o_name);
#else
/* Success */
done = TRUE;
- /* Done */
break;
}
}
/* Failure */
if (!done && !o_idx)
{
- /* Message */
#ifdef JP
msg_format("%sは消えた。", o_name);
#else
/* Draw the spot */
lite_spot(by, bx);
- /* Sound */
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);
}
* @param known TRUEならばオブジェクトが必ず*鑑定*済になる
* @return なし
*/
-void acquirement(int y1, int x1, int num, bool great, bool special, bool known)
+void acquirement(POSITION y1, POSITION x1, int num, bool great, bool special, bool known)
{
object_type *i_ptr;
object_type object_type_body;
- u32b mode = AM_GOOD | (great || special ? AM_GREAT : 0L) | (special ? AM_SPECIAL : 0L) ;
+ 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) */
{
OBJECT_TYPE_VALUE tval;
OBJECT_SUBTYPE_VALUE sval;
- int prob;
+ PERCENTAGE prob;
byte flag;
} amuse_type;
* @param known TRUEならばオブジェクトが必ず*鑑定*済になる
* @return なし
*/
-void amusement(int y1, int x1, int num, bool known)
+void amusement(POSITION y1, POSITION x1, int num, bool known)
{
object_type *i_ptr;
object_type object_type_body;
while (num)
{
int i;
- IDX k_idx, a_idx = 0;
+ KIND_OBJECT_IDX k_idx;
+ ARTIFACT_IDX a_idx = 0;
int r = randint0(t);
bool insta_art, fixed_art;
/* 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 */
}
-#define MAX_NORMAL_TRAPS 18
-
-/* See init_feat_variables() in init2.c */
-static s16b normal_traps[MAX_NORMAL_TRAPS];
-
-/*!
- * @brief タグに従って、基本トラップテーブルを初期化する / Initialize arrays for normal traps
- * @return なし
- */
-void init_normal_traps(void)
-{
- int cur_trap = 0;
-
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_TRAPDOOR");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_PIT");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_SPIKED_PIT");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_POISON_PIT");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_TY_CURSE");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_TELEPORT");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_FIRE");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_ACID");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_SLOW");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_LOSE_STR");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_LOSE_DEX");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_LOSE_CON");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_BLIND");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_CONFUSE");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_POISON");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_SLEEP");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_TRAPS");
- normal_traps[cur_trap++] = f_tag_to_index_in_init("TRAP_ALARM");
-}
-
-/*!
- * @brief 基本トラップをランダムに選択する /
- * Get random trap
- * @return 選択したトラップのID
- * @details
- * XXX XXX XXX This routine should be redone to reflect trap "level".\n
- * That is, it does not make sense to have spiked pits at 50 feet.\n
- * Actually, it is not this routine, but the "trap instantiation"\n
- * code, which should also check for "trap doors" on quest levels.\n
- */
-s16b choose_random_trap(void)
-{
- s16b feat;
-
- /* Pick a trap */
- while (1)
- {
- /* Hack -- pick a trap */
- feat = normal_traps[randint0(MAX_NORMAL_TRAPS)];
-
- /* Accept non-trapdoors */
- if (!have_flag(f_info[feat].flags, FF_MORE)) break;
-
- /* Hack -- no trap doors on special levels */
- if (p_ptr->inside_arena || quest_number(dun_level)) continue;
-
- /* Hack -- no trap doors on the deepest level */
- if (dun_level >= d_info[dungeon_type].maxdepth) continue;
-
- break;
- }
-
- return feat;
-}
-
-/*!
- * @brief マスに存在するトラップを秘匿する /
- * Disclose an invisible trap
- * @param y 秘匿したいマスのY座標
- * @param x 秘匿したいマスのX座標
- * @return なし
- */
-void disclose_grid(int y, int x)
-{
- cave_type *c_ptr = &cave[y][x];
-
- if (cave_have_flag_grid(c_ptr, FF_SECRET))
- {
- /* No longer hidden */
- cave_alter_feat(y, x, FF_SECRET);
- }
- else if (c_ptr->mimic)
- {
- /* No longer hidden */
- c_ptr->mimic = 0;
-
- /* Notice */
- note_spot(y, x);
-
- /* Redraw */
- lite_spot(y, x);
- }
-}
-
-/*!
- * @brief マスをトラップを配置する /
- * The location must be a legal, naked, floor grid.
- * @param y 配置したいマスのY座標
- * @param x 配置したいマスのX座標
- * @return
- * Note that all traps start out as "invisible" and "untyped", and then\n
- * when they are "discovered" (by detecting them or setting them off),\n
- * the trap is "instantiated" as a visible, "typed", trap.\n
- */
-void place_trap(int y, int x)
-{
- cave_type *c_ptr = &cave[y][x];
-
- /* Paranoia -- verify location */
- if (!in_bounds(y, x)) return;
-
- /* Require empty, clean, floor grid */
- if (!cave_clean_bold(y, x)) return;
-
- /* Place an invisible trap */
- c_ptr->mimic = c_ptr->feat;
- c_ptr->feat = choose_random_trap();
-}
-
/*!
* @brief 魔道具の使用回数の残量を示すメッセージを表示する /
* Describe the charges on an item in the inventory.
* @param item 残量を表示したいプレイヤーのアイテム所持スロット
* @return なし
*/
-void inven_item_charges(int item)
+void inven_item_charges(INVENTORY_IDX item)
{
object_type *o_ptr = &inventory[item];
/* 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
* @param item 残量を表示したいプレイヤーのアイテム所持スロット
* @return なし
*/
-void inven_item_describe(int item)
+void inven_item_describe(INVENTORY_IDX item)
{
object_type *o_ptr = &inventory[item];
char 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ã\82\84ã\81\97残り所持数メッセージを表示する /
* Increase the "number" of an item in the inventory
* @param item 所持数を増やしたいプレイヤーのアイテム所持スロット
* @param num 増やしたい量
* @return なし
*/
-void inven_item_increase(int item, int num)
+void inven_item_increase(INVENTORY_IDX item, int num)
{
object_type *o_ptr = &inventory[item];
/* Combine the pack */
p_ptr->notice |= (PN_COMBINE);
- /* Window stuff */
p_ptr->window |= (PW_INVEN | PW_EQUIP);
/* Hack -- Clear temporary elemental brands if player takes off weapons */
* @param item 消去したいプレイヤーのアイテム所持スロット
* @return なし
*/
-void inven_item_optimize(int item)
+void inven_item_optimize(INVENTORY_IDX item)
{
object_type *o_ptr = &inventory[item];
/* Erase the "final" slot */
object_wipe(&inventory[i]);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
}
/* Recalculate mana XXX */
p_ptr->update |= (PU_MANA);
- /* Window stuff */
p_ptr->window |= (PW_EQUIP);
}
- /* Window stuff */
p_ptr->window |= (PW_SPELL);
}
* @param item メッセージの対象にしたいアイテム所持スロット
* @return なし
*/
-void floor_item_charges(int item)
+void floor_item_charges(INVENTORY_IDX item)
{
object_type *o_ptr = &o_list[item];
/* 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
* @param item メッセージの対象にしたいアイテム所持スロット
* @return なし
*/
-void floor_item_describe(int item)
+void floor_item_describe(INVENTORY_IDX item)
{
object_type *o_ptr = &o_list[item];
char 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(int item, int num)
+void floor_item_increase(INVENTORY_IDX item, int num)
{
object_type *o_ptr = &o_list[item];
* @param item 消去したいアイテムの所持スロット
* @return なし
*/
-void floor_item_optimize(int item)
+void floor_item_optimize(INVENTORY_IDX item)
{
object_type *o_ptr = &o_list[item];
/* 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);
}
*/
s16b inven_carry(object_type *o_ptr)
{
- int i, j, k;
- int n = -1;
+ INVENTORY_IDX i, j, k;
+ INVENTORY_IDX n = -1;
object_type *j_ptr;
/* Recalculate bonuses */
p_ptr->update |= (PU_BONUS);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
/* Success */
/* Combine and Reorder pack */
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
/* Return the slot */
* to fall to the ground.\n
* Return the inventory slot into which the item is placed.\n
*/
-s16b inven_takeoff(int item, int amt)
+INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt)
{
- int slot;
+ INVENTORY_IDX slot;
object_type forge;
object_type *q_ptr;
/* 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
* @details
* The object will be dropped "near" the current location
*/
-void inven_drop(int item, int amt)
+void inven_drop(INVENTORY_IDX item, ITEM_NUMBER amt)
{
object_type forge;
object_type *q_ptr;
-
object_type *o_ptr;
char o_name[MAX_NLEN];
/* 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 */
/* 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."));
}
/* 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 */
/* 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;
object_type forge;
object_type *q_ptr;
int sval;
- int use_realm;
+ REALM_IDX use_realm;
char o_name[MAX_NLEN];
/* 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 */
{
int spell = -1;
int num = 0;
- byte spells[64];
+ SPELL_IDX spells[64];
/* Extract spells */
for (spell = 0; spell < 32; spell++)
/* 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);
* @param max 算出した最大ダメージを返すポインタ
* @return なし
*/
-static void spell_damcalc(monster_type *m_ptr, int typ, int dam, int *max)
+static void spell_damcalc(monster_type *m_ptr, EFFECT_ID typ, HIT_POINT dam, int *max)
{
monster_race *r_ptr = &r_info[m_ptr->r_idx];
int rlev = r_ptr->level;
* @param max 算出した最大ダメージを返すポインタ
* @return なし
*/
-void spell_damcalc_by_spellnum(int spell_num, int typ, IDX m_idx, int *max)
+void spell_damcalc_by_spellnum(int spell_num, EFFECT_ID typ, MONSTER_IDX m_idx, int *max)
{
monster_type *m_ptr = &m_list[m_idx];
- int dam = monspell_damage((spell_num), m_idx, DAM_MAX);
+ HIT_POINT dam = monspell_damage((spell_num), m_idx, DAM_MAX);
spell_damcalc(m_ptr, typ, dam, max);
}
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;
+ POSITION mx, my;
cave_type *c_ptr;
char o_name[MAX_NLEN];
/* 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 (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, 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_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, 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);
}
/* Monster melee attacks */
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
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? "));
}
}
/*!
- * @brief エッセンスの付加可能な武器や矢弾かを返す
- * @param o_ptr チェックしたいオブジェクトの構造体参照ポインタ
- * @return エッセンスの付加可能な武器か矢弾ならばTRUEを返す。
- */
-static bool item_tester_hook_melee_ammo(object_type *o_ptr)
-{
- switch (o_ptr->tval)
- {
- case TV_HAFTED:
- case TV_POLEARM:
- case TV_DIGGING:
- case TV_BOLT:
- case TV_ARROW:
- case TV_SHOT:
- {
- return (TRUE);
- }
- case TV_SWORD:
- {
- if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
- }
- }
-
- return (FALSE);
-}
-
-
-/*!
* エッセンス情報の構造体 / A structure for smithing
*/
typedef struct {
int add; /* TR flag number or special essence id */
cptr add_name; /* Name of this ability */
- int type; /* Menu number */
+ ESSENCE_IDX type; /* Menu number */
int essence; /* Index for carrying essences */
int value; /* Needed value to add this ability */
} essence_type;
static void drain_essence(void)
{
int drain_value[sizeof(p_ptr->magic_num1) / sizeof(s32b)];
- int i, item;
+ int i;
+ OBJECT_IDX item;
int dec = 4;
bool observe = FALSE;
int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
TIME_EFFECT old_timeout;
- u32b old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
+ BIT_FLAGS old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
object_type *o_ptr;
cptr q, s;
POSITION iy, ix;
byte_hack marked;
ITEM_NUMBER number;
- s16b next_o_idx, weight;
+ OBJECT_IDX next_o_idx;
+ WEIGHT weight;
for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
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.");
/* Combine the pack */
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
}
* @brief 付加するエッセンスの大別を選択する
* @return 選んだエッセンスの大別ID
*/
-static int choose_essence(void)
+static COMMAND_CODE choose_essence(void)
{
- int mode = 0;
+ COMMAND_CODE mode = 0;
char choice;
- int menu_line = (use_menu ? 1 : 0);
+ COMMAND_CODE menu_line = (use_menu ? 1 : 0);
#ifdef JP
cptr menu_name[] = {
"Others"
};
#endif
- const int mode_max = 7;
+ 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();
return 0;
}
- if (isupper(choice)) choice = tolower(choice);
+ if (isupper(choice)) choice = (char)tolower(choice);
if ('a' <= choice && choice <= 'a' + (char)mode_max - 1)
mode = (int)choice - 'a' + 1;
screen_load();
}
-#ifdef ALLOW_REPEAT
repeat_push(mode);
-#endif /* ALLOW_REPEAT */
return mode;
}
* @param mode エッセンスの大別ID
* @return なし
*/
-static void add_essence(int mode)
+static void add_essence(ESSENCE_IDX mode)
{
- int item, max_num = 0;
- int i;
+ OBJECT_IDX item;
+ int max_num = 0;
+ COMMAND_CODE i;
bool flag,redraw;
char choice;
cptr q, s;
char o_name[MAX_NLEN];
int use_essence;
essence_type *es_ptr;
+ bool able[22] = { 0 };
int menu_line = (use_menu ? 1 : 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;
choice = (always_show_list || use_menu) ? ESCAPE:1;
while (!flag)
{
- bool able[22];
if( choice==ESCAPE ) choice = ' ';
else if( !get_com(out_val, &choice, FALSE) )break;
ask = (isupper(choice));
/* Lowercase */
- if (ask) choice = tolower(choice);
+ if (ask) choice = (char)tolower(choice);
/* Extract request */
i = (islower(choice) ? A2I(choice) : -1);
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_weapon_armour_ammo;
item_tester_no_ryoute = TRUE;
- /* Get an item */
q = _("どのアイテムを改良しますか?", "Improve which item? ");
s = _("改良できるアイテムがありません。", "You have nothing to improve.");
/* Combine the pack */
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
}
*/
static void erase_essence(void)
{
- int item;
+ OBJECT_IDX item;
cptr q, s;
object_type *o_ptr;
char o_name[MAX_NLEN];
- u32b flgs[TR_FLAG_SIZE];
+ 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.");
/* Combine the pack */
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
}
*/
void do_cmd_kaji(bool only_browse)
{
- int mode = 0;
+ COMMAND_CODE mode = 0;
char choice;
- int menu_line = (use_menu ? 1 : 0);
+ COMMAND_CODE menu_line = (use_menu ? 1 : 0);
if (!only_browse)
{
}
}
-#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))
{