*/
#include "angband.h"
+#include "object-hook.h"
static void one_sustain(object_type *o_ptr);
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);
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;
/* Make some gold */
if (!make_gold(q_ptr)) return;
-
/* Make an object */
o_idx = o_pop();
* @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;
#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)"));
* @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;
* @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;
}
-#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.
}
/*!
- * @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 {
char o_name[MAX_NLEN];
int use_essence;
essence_type *es_ptr;
+ bool able[22] = { 0 };
int menu_line = (use_menu ? 1 : 0);
choice = (always_show_list || use_menu) ? ESCAPE:1;
while (!flag)
{
- bool able[22] = {0};
if( choice==ESCAPE ) choice = ' ';
else if( !get_com(out_val, &choice, FALSE) )break;