/*!
* @brief ランダムアーティファクト生成のメインルーチン
* @details 既に生成が済んでいるオブジェクトの構造体を、アーティファクトとして強化する。
+ * @param player_ptr プレーヤーへの参照ポインタ
* @param o_ptr 対象のオブジェクト構造体ポインタ
* @param a_scroll アーティファクト生成の巻物上の処理。呪いのアーティファクトが生成対象外となる。
* @return 常にTRUE(1)を返す
*/
-bool become_random_artifact(object_type *o_ptr, bool a_scroll)
+bool become_random_artifact(player_type *player_ptr, object_type *o_ptr, bool a_scroll)
{
GAME_TEXT new_name[1024];
PARAMETER_VALUE has_pval = 0;
if (a_scroll && one_in_(4))
{
- switch (p_ptr->pclass)
+ switch (player_ptr->pclass)
{
case CLASS_WARRIOR:
case CLASS_BERSERKER:
GAME_TEXT dummy_name[MAX_NLEN] = "";
concptr ask_msg = _("このアーティファクトを何と名付けますか?", "What do you want to call the artifact? ");
- object_aware(o_ptr);
+ object_aware(player_ptr, o_ptr);
object_known(o_ptr);
/* Mark the item as fully known */
}
}
sprintf(new_name, _("《%s》", "'%s'"), dummy_name);
- chg_virtue(p_ptr, V_INDIVIDUALISM, 2);
- chg_virtue(p_ptr, V_ENCHANT, 5);
+ chg_virtue(player_ptr, V_INDIVIDUALISM, 2);
+ chg_virtue(player_ptr, V_ENCHANT, 5);
}
else
{
msg_format_wizard(CHEAT_OBJECT, _("パワー %d で 価値%ld のランダムアーティファクト生成 バイアスは「%s」",
"Random artifact generated - Power:%d Value:%d Bias:%s."), max_powers, total_flags, artifact_bias_name[o_ptr->artifact_bias]);
- p_ptr->window |= (PW_INVEN | PW_EQUIP);
+ player_ptr->window |= (PW_INVEN | PW_EQUIP);
return TRUE;
}
extern ARTIFACT_IDX max_a_idx;
/* artifact.c */
-extern bool become_random_artifact(object_type *o_ptr, bool a_scroll);
+extern bool become_random_artifact(player_type *player_ptr, object_type *o_ptr, bool a_scroll);
extern int activation_index(object_type *o_ptr);
extern const activation_type* find_activation_info(object_type *o_ptr);
extern void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr);
{
s16b slot;
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
object_known(o_ptr);
slot = inven_carry(creature_ptr, o_ptr);
object_prep(q_ptr, lookup_kind(TV_FLASK, SV_ANY));
/* Fuel with oil (move pval to xtra4) */
- apply_magic(q_ptr, 1, AM_NO_FIXED_ART);
+ apply_magic(creature_ptr, q_ptr, 1, AM_NO_FIXED_ART);
q_ptr->number = (ITEM_NUMBER)rand_range(7, 12);
add_outfit(creature_ptr, q_ptr);
}
-
/*!
* 賞金首の報酬テーブル / List of prize object
*/
{TV_SCROLL, SV_SCROLL_ARTIFACT},
};
+
/*!
* @brief 賞金首の引き換え処理 / Get prize
* @return 各種賞金首のいずれかでも換金が行われたか否か。
*/
-static bool kankin(void)
+static bool kankin(player_type *player_ptr)
{
INVENTORY_IDX i;
int j;
/* Loop for inventory and right/left arm */
for (i = 0; i <= INVEN_LARM; i++)
{
- o_ptr = &p_ptr->inventory_list[i];
+ o_ptr = &player_ptr->inventory_list[i];
/* Living Tsuchinoko worthes $1000000 */
if ((o_ptr->tval == TV_CAPTURE) && (o_ptr->pval == MON_TSUCHINOKO))
if (get_check(buf))
{
msg_format(_("賞金 %ld$を手に入れた。", "You get %ldgp."), (long int)(1000000L * o_ptr->number));
- p_ptr->au += 1000000L * o_ptr->number;
- p_ptr->redraw |= (PR_GOLD);
+ player_ptr->au += 1000000L * o_ptr->number;
+ player_ptr->redraw |= (PR_GOLD);
vary_item(i, -o_ptr->number);
}
change = TRUE;
for (i = 0; i < INVEN_PACK; i++)
{
- o_ptr = &p_ptr->inventory_list[i];
+ o_ptr = &player_ptr->inventory_list[i];
/* Corpse of Tsuchinoko worthes $200000 */
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE) && (o_ptr->pval == MON_TSUCHINOKO))
if (get_check(buf))
{
msg_format(_("賞金 %ld$を手に入れた。", "You get %ldgp."), (long int)(200000L * o_ptr->number));
- p_ptr->au += 200000L * o_ptr->number;
- p_ptr->redraw |= (PR_GOLD);
+ player_ptr->au += 200000L * o_ptr->number;
+ player_ptr->redraw |= (PR_GOLD);
vary_item(i, -o_ptr->number);
}
change = TRUE;
for (i = 0; i < INVEN_PACK; i++)
{
- o_ptr = &p_ptr->inventory_list[i];
+ o_ptr = &player_ptr->inventory_list[i];
/* Bones of Tsuchinoko worthes $100000 */
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON) && (o_ptr->pval == MON_TSUCHINOKO))
if (get_check(buf))
{
msg_format(_("賞金 %ld$を手に入れた。", "You get %ldgp."), (long int)(100000L * o_ptr->number));
- p_ptr->au += 100000L * o_ptr->number;
- p_ptr->redraw |= (PR_GOLD);
+ player_ptr->au += 100000L * o_ptr->number;
+ player_ptr->redraw |= (PR_GOLD);
vary_item(i, -o_ptr->number);
}
change = TRUE;
for (i = 0; i < INVEN_PACK; i++)
{
- o_ptr = &p_ptr->inventory_list[i];
+ o_ptr = &player_ptr->inventory_list[i];
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE) && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name)))
{
char buf[MAX_NLEN+20];
if (get_check(buf))
{
msg_format(_("賞金 %ld$を手に入れた。", "You get %ldgp."), (long int)((r_info[today_mon].level * 50 + 100) * o_ptr->number));
- p_ptr->au += (r_info[today_mon].level * 50 + 100) * o_ptr->number;
- p_ptr->redraw |= (PR_GOLD);
+ player_ptr->au += (r_info[today_mon].level * 50 + 100) * o_ptr->number;
+ player_ptr->redraw |= (PR_GOLD);
vary_item(i, -o_ptr->number);
}
change = TRUE;
for (i = 0; i < INVEN_PACK; i++)
{
- o_ptr = &p_ptr->inventory_list[i];
+ o_ptr = &player_ptr->inventory_list[i];
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON) && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name)))
{
if (get_check(buf))
{
msg_format(_("賞金 %ld$を手に入れた。", "You get %ldgp."), (long int)((r_info[today_mon].level * 30 + 60) * o_ptr->number));
- p_ptr->au += (r_info[today_mon].level * 30 + 60) * o_ptr->number;
- p_ptr->redraw |= (PR_GOLD);
+ player_ptr->au += (r_info[today_mon].level * 30 + 60) * o_ptr->number;
+ player_ptr->redraw |= (PR_GOLD);
vary_item(i, -o_ptr->number);
}
change = TRUE;
/* Need reverse order --- Positions will be changed in the loop */
for (i = INVEN_PACK-1; i >= 0; i--)
{
- o_ptr = &p_ptr->inventory_list[i];
+ o_ptr = &player_ptr->inventory_list[i];
if ((o_ptr->tval == TV_CORPSE) && (o_ptr->pval == current_world_ptr->bounty_r_idx[j]))
{
char buf[MAX_NLEN+20];
#if 0 /* Obsoleted */
msg_format(_("賞金 %ld$を手に入れた。", "You get %ldgp."), (r_info[current_world_ptr->bounty_r_idx[j]].level + 1) * 300 * o_ptr->number);
- p_ptr->au += (r_info[current_world_ptr->bounty_r_idx[j]].level+1) * 300 * o_ptr->number;
- p_ptr->redraw |= (PR_GOLD);
+ player_ptr->au += (r_info[current_world_ptr->bounty_r_idx[j]].level+1) * 300 * o_ptr->number;
+ player_ptr->redraw |= (PR_GOLD);
vary_item(i, -o_ptr->number);
- chg_virtue(p_ptr, V_JUSTICE, 5);
+ chg_virtue(player_ptr, V_JUSTICE, 5);
current_world_ptr->bounty_r_idx[j] += 10000;
change = TRUE;
/* Hand it first */
vary_item(i, -o_ptr->number);
- chg_virtue(p_ptr, V_JUSTICE, 5);
+ chg_virtue(player_ptr, V_JUSTICE, 5);
current_world_ptr->bounty_r_idx[j] += 10000;
/* Count number of unique corpses already handed */
/* Prepare to make a prize */
object_prep(&forge, lookup_kind(prize_list[num-1].tval, prize_list[num-1].sval));
- apply_magic(&forge, p_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic(player_ptr, &forge, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
- object_aware(&forge);
+ object_aware(player_ptr, &forge);
object_known(&forge);
/*
* Since a corpse is handed at first,
* there is at least one empty slot.
*/
- item_new = inven_carry(p_ptr, &forge);
+ item_new = inven_carry(player_ptr, &forge);
object_desc(o_name, &forge, 0);
msg_format(_("%s(%c)を貰った。", "You get %s (%c). "), o_name, index_to_label(item_new));
msg_print(NULL);
return FALSE;
}
+
return TRUE;
}
break;
case BACT_KANKIN:
- kankin();
+ kankin(player_ptr);
break;
case BACT_HEIKOUKA:
/* The player is now aware of the object */
if (ident && !object_is_aware(o_ptr))
{
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
gain_exp(creature_ptr, (lev + (creature_ptr->lev >> 1)) / creature_ptr->lev);
}
/* An identification was made */
if (ident && !object_is_aware(q_ptr))
{
- object_aware(q_ptr);
+ object_aware(creature_ptr, q_ptr);
gain_exp(creature_ptr, (lev + (creature_ptr->lev >> 1)) / creature_ptr->lev);
}
/* An identification was made */
if (ident && !object_is_aware(o_ptr))
{
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
gain_exp(creature_ptr, (lev + (creature_ptr->lev >> 1)) / creature_ptr->lev);
}
if (o_ptr->tval == TV_DRAG_ARMOR) o_ptr->timeout = old_timeout;
if (item >= 0) creature_ptr->total_weight += (o_ptr->weight*o_ptr->number - weight * number);
o_ptr->ident |= (IDENT_MENTAL);
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
object_known(o_ptr);
object_flags(o_ptr, new_flgs);
/* An identification was made */
if (ident && !object_is_aware(o_ptr))
{
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
gain_exp(creature_ptr, (lev + (creature_ptr->lev >> 1)) / creature_ptr->lev);
}
/* Successfully determined the object function */
if (ident && !object_is_aware(o_ptr))
{
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
gain_exp(creature_ptr, (lev + (creature_ptr->lev >> 1)) / creature_ptr->lev);
}
/* Apply identification */
if (ident && !object_is_aware(o_ptr))
{
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
gain_exp(creature_ptr, (lev + (creature_ptr->lev >> 1)) / creature_ptr->lev);
}
}
/* Apply magic (no messages, no artifacts) */
- apply_magic(o_ptr, floor_ptr->base_level, AM_NO_FIXED_ART | AM_GOOD);
+ apply_magic(player_ptr, o_ptr, floor_ptr->base_level, AM_NO_FIXED_ART | AM_GOOD);
drop_here(floor_ptr, o_ptr, *y, *x);
}
if (!o_ptr->k_idx) continue;
/* Aware and Known */
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
object_known(o_ptr);
}
if (!o_ptr->k_idx) continue;
/* Aware and Known */
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
object_known(o_ptr);
}
}
int dump_gold = 0;
int number = 0;
- monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
+ // todo ここをplayer_type に差し替えれば少しは楽ができる
+ floor_type *floor_ptr = p_ptr->current_floor_ptr;
+ monster_type *m_ptr = &floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
bool visible = ((m_ptr->ml && !p_ptr->image) || (r_ptr->flags1 & RF1_UNIQUE));
object_type forge;
object_type *q_ptr;
- bool drop_chosen_item = drop_item && !cloned && !p_ptr->current_floor_ptr->inside_arena
+ bool drop_chosen_item = drop_item && !cloned && !floor_ptr->inside_arena
&& !p_ptr->phase_out && !is_pet(m_ptr);
/* The caster is dead? */
check_quest_completion(p_ptr, m_ptr);
/* Handle the possibility of player vanquishing arena combatant -KMW- */
- if (p_ptr->current_floor_ptr->inside_arena && !is_pet(m_ptr))
+ if (floor_ptr->inside_arena && !is_pet(m_ptr))
{
p_ptr->exit_bldg = TRUE;
/* Prepare to make a prize */
object_prep(q_ptr, lookup_kind(arena_info[p_ptr->arena_number].tval, arena_info[p_ptr->arena_number].sval));
- apply_magic(q_ptr, p_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic(p_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
(void)drop_near(p_ptr, q_ptr, -1, y, x);
}
/* Drop a dead corpse? */
if (one_in_(r_ptr->flags1 & RF1_UNIQUE ? 1 : 4) &&
(r_ptr->flags9 & (RF9_DROP_CORPSE | RF9_DROP_SKELETON)) &&
- !(p_ptr->current_floor_ptr->inside_arena || p_ptr->phase_out || cloned || ((m_ptr->r_idx == today_mon) && is_pet(m_ptr))))
+ !(floor_ptr->inside_arena || p_ptr->phase_out || cloned || ((m_ptr->r_idx == today_mon) && is_pet(m_ptr))))
{
/* Assume skeleton */
bool corpse = FALSE;
/* Prepare to make an object */
object_prep(q_ptr, lookup_kind(TV_CORPSE, (corpse ? SV_CORPSE : SV_SKELETON)));
- apply_magic(q_ptr, p_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic(p_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
q_ptr->pval = m_ptr->r_idx;
(void)drop_near(p_ptr, q_ptr, -1, y, x);
{
case MON_PINK_HORROR:
/* Pink horrors are replaced with 2 Blue horrors */
- if (!(p_ptr->current_floor_ptr->inside_arena || p_ptr->phase_out))
+ if (!(floor_ptr->inside_arena || p_ptr->phase_out))
{
bool notice = FALSE;
/* Prepare to make a Blade of Chaos */
object_prep(q_ptr, lookup_kind(TV_SWORD, SV_BLADE_OF_CHAOS));
- apply_magic(q_ptr, p_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART | mo_mode);
+ apply_magic(p_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART | mo_mode);
(void)drop_near(p_ptr, q_ptr, -1, y, x);
}
break;
case MON_RAAL:
- if (drop_chosen_item && (p_ptr->current_floor_ptr->dun_level > 9))
+ if (drop_chosen_item && (floor_ptr->dun_level > 9))
{
q_ptr = &forge;
object_wipe(q_ptr);
/* Activate restriction */
- if ((p_ptr->current_floor_ptr->dun_level > 49) && one_in_(5))
+ if ((floor_ptr->dun_level > 49) && one_in_(5))
get_obj_num_hook = kind_is_good_book;
else
get_obj_num_hook = kind_is_book;
* Mega^3-hack: killing a 'Warrior of the Dawn' is likely to
* spawn another in the fallen one's place!
*/
- if (!p_ptr->current_floor_ptr->inside_arena && !p_ptr->phase_out)
+ if (!floor_ptr->inside_arena && !p_ptr->phase_out)
{
if (!one_in_(7))
{
do
{
- scatter(p_ptr->current_floor_ptr, &wy, &wx, y, x, 20, 0);
- } while (!(in_bounds(p_ptr->current_floor_ptr, wy, wx) && cave_empty_bold2(p_ptr->current_floor_ptr, wy, wx)) && --attempts);
+ scatter(floor_ptr, &wy, &wx, y, x, 20, 0);
+ } while (!(in_bounds(floor_ptr, wy, wx) && cave_empty_bold2(floor_ptr, wy, wx)) && --attempts);
if (attempts > 0)
{
q_ptr->name1 = ART_GROND;
/* Mega-Hack -- Actually create "Grond" */
- apply_magic(q_ptr, -1, AM_GOOD | AM_GREAT);
+ apply_magic(p_ptr, q_ptr, -1, AM_GOOD | AM_GREAT);
(void)drop_near(p_ptr, q_ptr, -1, y, x);
q_ptr = &forge;
q_ptr->name1 = ART_CHAOS;
/* Mega-Hack -- Actually create "Chaos" */
- apply_magic(q_ptr, -1, AM_GOOD | AM_GREAT);
+ apply_magic(p_ptr, q_ptr, -1, AM_GOOD | AM_GREAT);
(void)drop_near(p_ptr, q_ptr, -1, y, x);
break;
/* Prepare to make a Can of Toys */
object_prep(q_ptr, lookup_kind(TV_CHEST, SV_CHEST_KANDUME));
- apply_magic(q_ptr, p_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic(p_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
(void)drop_near(p_ptr, q_ptr, -1, y, x);
}
break;
switch (r_ptr->d_char)
{
case '(':
- if (p_ptr->current_floor_ptr->dun_level > 0)
+ if (floor_ptr->dun_level > 0)
{
q_ptr = &forge;
object_wipe(q_ptr);
break;
case '/':
- if (p_ptr->current_floor_ptr->dun_level > 4)
+ if (floor_ptr->dun_level > 4)
{
q_ptr = &forge;
object_wipe(q_ptr);
break;
case '[':
- if (p_ptr->current_floor_ptr->dun_level > 19)
+ if (floor_ptr->dun_level > 19)
{
q_ptr = &forge;
object_wipe(q_ptr);
break;
case '\\':
- if (p_ptr->current_floor_ptr->dun_level > 4)
+ if (floor_ptr->dun_level > 4)
{
q_ptr = &forge;
object_wipe(q_ptr);
/* Prepare to make a reward */
object_prep(q_ptr, k_idx);
- apply_magic(q_ptr, p_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART | AM_GOOD);
+ apply_magic(p_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART | AM_GOOD);
(void)drop_near(p_ptr, q_ptr, -1, y, x);
}
msg_format(_("あなたは%sを制覇した!", "You have conquered %s!"), d_name + d_info[p_ptr->dungeon_idx].name);
if (cloned && !(r_ptr->flags1 & RF1_UNIQUE))
number = 0; /* Clones drop no stuff unless Cloning Pits */
- if (is_pet(m_ptr) || p_ptr->phase_out || p_ptr->current_floor_ptr->inside_arena)
+ if (is_pet(m_ptr) || p_ptr->phase_out || floor_ptr->inside_arena)
number = 0; /* Pets drop no stuff */
if (!drop_item && (r_ptr->d_char != '$')) number = 0;
coin_type = force_coin;
/* Average dungeon and monster levels */
- p_ptr->current_floor_ptr->object_level = (p_ptr->current_floor_ptr->dun_level + r_ptr->level) / 2;
+ floor_ptr->object_level = (floor_ptr->dun_level + r_ptr->level) / 2;
/* Drop some objects */
for (j = 0; j < number; j++)
}
/* Reset the object level */
- p_ptr->current_floor_ptr->object_level = p_ptr->current_floor_ptr->base_level;
+ floor_ptr->object_level = floor_ptr->base_level;
/* Reset "coin" type */
coin_type = 0;
extern void one_ability(object_type *o_ptr);
extern void one_activation(object_type *o_ptr);
extern void one_lordly_high_resistance(object_type *o_ptr);
-
-
-extern void apply_magic_weapon(object_type *o_ptr, DEPTH level, int power);
-
+extern void apply_magic_weapon(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power);
extern OBJECT_IDX o_pop(floor_type *floor_ptr);
extern OBJECT_IDX get_obj_num(player_type *o_ptr, DEPTH level, BIT_FLAGS mode);
extern void object_known(object_type *o_ptr);
-extern void object_aware(object_type *o_ptr);
+extern void object_aware(player_type *owner_ptr, object_type *o_ptr);
extern void object_tried(object_type *o_ptr);
/*
#define AM_SPECIAL 0x00000008 /*!< Generate artifacts (for debug mode only) */
#define AM_CURSED 0x00000010 /*!< Generate cursed/worthless items */
#define AM_FORBID_CHEST 0x00000020 /*!< 箱からさらに箱が出現することを抑止する */
-extern void apply_magic(object_type *o_ptr, DEPTH lev, BIT_FLAGS mode);
+extern void apply_magic(player_type *owner_type, object_type *o_ptr, DEPTH lev, BIT_FLAGS mode);
extern OBJECT_SUBTYPE_VALUE coin_type;
value = value - table[i].prob3;
}
-
/* Power boost */
p = randint0(100);
* @param o_ptr *鑑定*済にするオブジェクトの構造体参照ポインタ
* @return なし
*/
-void object_aware(object_type *o_ptr)
+void object_aware(player_type *owner_ptr, object_type *o_ptr)
{
bool mihanmei = !object_is_aware(o_ptr);
k_info[o_ptr->k_idx].aware = TRUE;
if (mihanmei && !(k_info[o_ptr->k_idx].gen_flags & TRG_INSTA_ART) && record_ident &&
- !p_ptr->is_dead && ((o_ptr->tval >= TV_AMULET && o_ptr->tval <= TV_POTION) || (o_ptr->tval == TV_FOOD)))
+ !owner_ptr->is_dead && ((o_ptr->tval >= TV_AMULET && o_ptr->tval <= TV_POTION) || (o_ptr->tval == TV_FOOD)))
{
object_type forge;
object_type *q_ptr;
q_ptr->number = 1;
object_desc(o_name, q_ptr, OD_NAME_ONLY);
- exe_write_diary(p_ptr, NIKKI_HANMEI, 0, o_name);
+ exe_write_diary(owner_ptr, NIKKI_HANMEI, 0, o_name);
}
}
/*!
* @brief デバッグ時にアイテム生成情報をメッセージに出力する / Cheat -- describe a created object for the user
+ * @param owner_ptr プレーヤーへの参照ポインタ
* @param o_ptr デバッグ出力するオブジェクトの構造体参照ポインタ
* @return なし
*/
-static void object_mention(object_type *o_ptr)
+static void object_mention(player_type *owner_ptr, object_type *o_ptr)
{
GAME_TEXT o_name[MAX_NLEN];
- object_aware(o_ptr);
+ object_aware(owner_ptr, o_ptr);
object_known(o_ptr);
/* Mark the item as fully known */
/*!
* @brief 武器系オブジェクトに生成ランクごとの強化を与えるサブルーチン
* Apply magic to an item known to be a "weapon"
+ * @param owner_ptr プレーヤーへの参照ポインタ
* @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
* @param level 生成基準階
* @param power 生成ランク
* Hack -- note special base damage dice boosting\n
* Hack -- note special processing for weapon/digger\n
*/
-void apply_magic_weapon(object_type *o_ptr, DEPTH level, int power)
+void apply_magic_weapon(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power)
{
HIT_PROB tohit1 = randint1(5) + (HIT_PROB)m_bonus(5, level);
HIT_POINT todam1 = randint1(5) + (HIT_POINT)m_bonus(5, level);
if (power > 1)
{
if (one_in_(30) || (power > 2)) /* power > 2 is debug only */
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
else
/* Special Ego-item */
o_ptr->name2 = EGO_DIGGING;
{
if (one_in_(40) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
while (1)
{
if (one_in_(20) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
o_ptr->name2 = get_random_ego(INVEN_BOW, TRUE);
{
if (power > 2) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
/*!
* @brief 防具系オブジェクトに生成ランクごとの強化を与えるサブルーチン
* Apply magic to an item known to be "armor"
+ * @param owner_ptr プレーヤーへの参照ポインタ
* @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
* @param level 生成基準階
* @param power 生成ランク
* 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, DEPTH level, int power)
+static void a_m_aux_2(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power)
{
ARMOUR_CLASS toac1 = (ARMOUR_CLASS)randint1(5) + m_bonus(5, level);
ARMOUR_CLASS toac2 = (ARMOUR_CLASS)m_bonus(10, level);
case TV_DRAG_ARMOR:
{
if (one_in_(50) || (power > 2)) /* power > 2 is debug only */
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
if (one_in_(20) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
{
if (one_in_(20) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
{
if (one_in_(20) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
o_ptr->name2 = get_random_ego(INVEN_HANDS, TRUE);
{
if (one_in_(20) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
o_ptr->name2 = get_random_ego(INVEN_FEET, TRUE);
{
if (one_in_(20) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
while (1)
{
if (one_in_(20) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
while (1)
{
if (one_in_(20) || (power > 2)) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
break;
}
o_ptr->name2 = get_random_ego(INVEN_OUTER, TRUE);
break;
}
}
-
}
/*!
* @brief 装飾品系オブジェクトに生成ランクごとの強化を与えるサブルーチン
* Apply magic to an item known to be a "ring" or "amulet"
+ * @param owner_ptr プレーヤーへの参照ポインタ
* @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
* @param level 生成基準階
* @param power 生成ランク
* 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, DEPTH level, int power)
+static void a_m_aux_3(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power)
{
/* Apply magic (good or bad) according to type */
switch (o_ptr->tval)
{
o_ptr->pval = MIN(o_ptr->pval, 4);
/* Randart amulet */
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
}
else if ((power == 2) && one_in_(2))
{
{
o_ptr->pval = MIN(o_ptr->pval, 4);
/* Randart amulet */
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
}
else if ((power == 2) && one_in_(2))
{
/*!
* @brief その他雑多のオブジェクトに生成ランクごとの強化を与えるサブルーチン
* Apply magic to an item known to be "boring"
- * @param floo_ptr 現在フロアへの参照ポインタ
+ * @param owner_ptr プレーヤーへの参照ポインタ
* @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
* @param level 生成基準階
* @param power 生成ランク
* @details
* Hack -- note the special code for various items
*/
-static void a_m_aux_4(object_type *o_ptr, DEPTH level, int power)
+static void a_m_aux_4(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power)
{
object_kind *k_ptr = &k_info[o_ptr->k_idx];
(void)level;
/* Apply magic (good or bad) according to type */
+ floor_type *floor_ptr = owner_ptr->current_floor_ptr;
switch (o_ptr->tval)
{
case TV_WHISTLE:
if (power > 2) /* power > 2 is debug only */
{
- become_random_artifact(o_ptr, FALSE);
+ become_random_artifact(owner_ptr, o_ptr, FALSE);
}
else if ((power == 2) || ((power == 1) && one_in_(3)))
{
case TV_CAPTURE:
{
o_ptr->pval = 0;
- object_aware(o_ptr);
+ object_aware(owner_ptr, o_ptr);
object_known(o_ptr);
break;
}
r_ptr = &r_info[i];
- check = (p_ptr->current_floor_ptr->dun_level < r_ptr->level) ? (r_ptr->level - p_ptr->current_floor_ptr->dun_level) : 0;
+ check = (floor_ptr->dun_level < r_ptr->level) ? (r_ptr->level - 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(p_ptr->current_floor_ptr->dun_level);
+ i = get_mon_num(floor_ptr->dun_level);
r_ptr = &r_info[i];
- check = (p_ptr->current_floor_ptr->dun_level < r_ptr->level) ? (r_ptr->level - p_ptr->current_floor_ptr->dun_level) : 0;
+ check = (floor_ptr->dun_level < r_ptr->level) ? (r_ptr->level - floor_ptr->dun_level) : 0;
/* Ignore dead monsters */
if (!r_ptr->rarity) continue;
o_ptr->pval = i;
-
- object_aware(o_ptr);
+ object_aware(owner_ptr, o_ptr);
object_known(o_ptr);
break;
}
{
msg_format(_("%sの像", "Statue of %s"), r_name + r_ptr->name);
}
- object_aware(o_ptr);
+
+ object_aware(owner_ptr, o_ptr);
object_known(o_ptr);
break;
o_ptr->pval = randint1(obj_level);
if (o_ptr->sval == SV_CHEST_KANDUME) o_ptr->pval = 6;
- o_ptr->xtra3 = p_ptr->current_floor_ptr->dun_level + 5;
+ o_ptr->xtra3 = floor_ptr->dun_level + 5;
/* Never exceed "difficulty" of 55 to 59 */
if (o_ptr->pval > 55) o_ptr->pval = 55 + (byte)randint0(5);
* "good" and "great" arguments are false. As a total hack, if "great" is\n
* true, then the item gets 3 extra "attempts" to become an artifact.\n
*/
-void apply_magic(object_type *o_ptr, DEPTH lev, BIT_FLAGS mode)
+void apply_magic(player_type *owner_ptr, object_type *o_ptr, DEPTH lev, BIT_FLAGS mode)
{
int i, rolls, f1, f2, power;
- if (p_ptr->pseikaku == SEIKAKU_MUNCHKIN) lev += randint0(p_ptr->lev / 2 + 10);
+ if (owner_ptr->pseikaku == SEIKAKU_MUNCHKIN) lev += randint0(owner_ptr->lev / 2 + 10);
/* Maximum "level" for various things */
if (lev > MAX_DEPTH - 1) lev = MAX_DEPTH - 1;
f1 = lev + 10;
/* Maximal chance of being "good" */
- if (f1 > d_info[p_ptr->dungeon_idx].obj_good) f1 = d_info[p_ptr->dungeon_idx].obj_good;
+ if (f1 > d_info[owner_ptr->dungeon_idx].obj_good) f1 = d_info[owner_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[p_ptr->dungeon_idx].obj_great))
- f2 = d_info[p_ptr->dungeon_idx].obj_great;
+ if ((owner_ptr->pseikaku != SEIKAKU_MUNCHKIN) && (f2 > d_info[owner_ptr->dungeon_idx].obj_great))
+ f2 = d_info[owner_ptr->dungeon_idx].obj_great;
- if (p_ptr->muta3 & MUT3_GOOD_LUCK)
+ if (owner_ptr->muta3 & MUT3_GOOD_LUCK)
{
f1 += 5;
f2 += 2;
}
- else if (p_ptr->muta3 & MUT3_BAD_LUCK)
+ else if (owner_ptr->muta3 & MUT3_BAD_LUCK)
{
f1 -= 5;
f2 -= 2;
{
/* Roll for an artifact */
if (make_artifact(o_ptr)) break;
- if ((p_ptr->muta3 & MUT3_GOOD_LUCK) && one_in_(77))
+ if ((owner_ptr->muta3 & MUT3_GOOD_LUCK) && one_in_(77))
{
if (make_artifact(o_ptr)) break;
}
}
-
/* Hack -- analyze artifacts */
if (object_is_fixed_artifact(o_ptr))
{
/* Hack -- Memorize location of artifact in saved floors */
if (current_world_ptr->character_dungeon)
- a_ptr->floor_id = p_ptr->floor_id;
+ a_ptr->floor_id = owner_ptr->floor_id;
/* Extract the other fields */
o_ptr->pval = a_ptr->pval;
if (o_ptr->name1 == ART_MILIM)
{
- if (p_ptr->pseikaku == SEIKAKU_SEXY)
+ if (owner_ptr->pseikaku == SEIKAKU_SEXY)
{
o_ptr->pval = 3;
}
case TV_ARROW:
case TV_BOLT:
{
- if (power) apply_magic_weapon(o_ptr, lev, power);
+ if (power) apply_magic_weapon(owner_ptr, o_ptr, lev, power);
break;
}
case TV_POLEARM:
{
- if (power && !(o_ptr->sval == SV_DEATH_SCYTHE)) apply_magic_weapon(o_ptr, lev, power);
+ if (power && !(o_ptr->sval == SV_DEATH_SCYTHE)) apply_magic_weapon(owner_ptr, o_ptr, lev, power);
break;
}
case TV_SWORD:
{
- if (power && !(o_ptr->sval == SV_DOKUBARI)) apply_magic_weapon(o_ptr, lev, power);
+ if (power && !(o_ptr->sval == SV_DOKUBARI)) apply_magic_weapon(owner_ptr, o_ptr, lev, power);
break;
}
((o_ptr->tval == TV_SHIELD) && (o_ptr->sval == SV_DRAGON_SHIELD)) ||
((o_ptr->tval == TV_GLOVES) && (o_ptr->sval == SV_SET_OF_DRAGON_GLOVES)) ||
((o_ptr->tval == TV_BOOTS) && (o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE)))
- a_m_aux_2(o_ptr, lev, power);
+ a_m_aux_2(owner_ptr, o_ptr, lev, power);
#else
if (power) a_m_aux_2(o_ptr, lev, power);
#endif
case TV_AMULET:
{
if (!power && (randint0(100) < 50)) power = -1;
- a_m_aux_3(o_ptr, lev, power);
+ a_m_aux_3(owner_ptr, o_ptr, lev, power);
break;
}
default:
{
- a_m_aux_4(o_ptr, lev, power);
+ a_m_aux_4(owner_ptr, o_ptr, lev, power);
break;
}
}
if ((o_ptr->tval == TV_SOFT_ARMOR) &&
(o_ptr->sval == SV_ABUNAI_MIZUGI) &&
- (p_ptr->pseikaku == SEIKAKU_SEXY))
+ (owner_ptr->pseikaku == SEIKAKU_SEXY))
{
o_ptr->pval = 3;
add_flag(o_ptr->art_flags, TR_STR);
}
/* Apply magic (allow artifacts) */
- apply_magic(j_ptr, floor_ptr->object_level, mode);
+ apply_magic(owner_ptr, j_ptr, floor_ptr->object_level, mode);
/* Hack -- generate multiple spikes/missiles */
switch (j_ptr->tval)
}
}
- if (cheat_peek) object_mention(j_ptr);
+ if (cheat_peek) object_mention(owner_ptr, j_ptr);
return TRUE;
}
/* Hack -- Give the player some small firestones */
object_prep(q_ptr, lookup_kind(TV_SHOT, (OBJECT_SUBTYPE_VALUE)m_bonus(1, creature_ptr->lev) + 1));
q_ptr->number = (byte)rand_range(15, 30);
- object_aware(q_ptr);
+ object_aware(creature_ptr, q_ptr);
object_known(q_ptr);
- apply_magic(q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
+ apply_magic(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
slot = inven_carry(creature_ptr, q_ptr);
/* Hack -- Give the player some small firestones */
object_prep(q_ptr, lookup_kind(TV_ARROW, (OBJECT_SUBTYPE_VALUE)m_bonus(1, creature_ptr->lev) + 1));
q_ptr->number = (byte)rand_range(5, 10);
- object_aware(q_ptr);
+ object_aware(creature_ptr, q_ptr);
object_known(q_ptr);
- apply_magic(q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
+ apply_magic(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
/* Hack -- Give the player some small firestones */
object_prep(q_ptr, lookup_kind(TV_BOLT, (OBJECT_SUBTYPE_VALUE)m_bonus(1, creature_ptr->lev) + 1));
q_ptr->number = (byte)rand_range(4, 8);
- object_aware(q_ptr);
+ object_aware(creature_ptr, q_ptr);
object_known(q_ptr);
- apply_magic(q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
+ apply_magic(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
/* Auto-inscription */
if (slot >= 0) autopick_alter_item(slot, FALSE);
}
+
return TRUE;
}
/* 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);
+ apply_magic(creature_ptr, i_ptr, 1, AM_NO_FIXED_ART);
if (amuse_info[i].flag & AMS_NO_UNIQUE)
{
if (known)
{
- object_aware(i_ptr);
+ object_aware(creature_ptr, i_ptr);
object_known(i_ptr);
}
if (known)
{
- object_aware(i_ptr);
+ object_aware(caster_ptr, i_ptr);
object_known(i_ptr);
}
floor_item_increase(0 - item, 1 - (o_ptr->number));
}
}
- okay = become_random_artifact(o_ptr, TRUE);
+
+ okay = become_random_artifact(caster_ptr, o_ptr, TRUE);
}
if (!okay)
chg_virtue(owner_ptr, V_KNOWLEDGE, 1);
}
- object_aware(o_ptr);
+ object_aware(owner_ptr, o_ptr);
object_known(o_ptr);
o_ptr->marked |= OM_TOUCHED;
object_prep(q_ptr, i);
/* Apply some "low-level" magic (no artifacts) */
- apply_magic(q_ptr, level, AM_NO_FIXED_ART);
+ apply_magic(player_ptr, q_ptr, level, AM_NO_FIXED_ART);
/* Require valid object */
if (!store_will_buy(q_ptr)) continue;
store_prt_gold();
/* Hack -- buying an item makes you aware of it */
- object_aware(j_ptr);
+ object_aware(player_ptr, j_ptr);
/* Hack -- clear the "fixed" flag from the item */
j_ptr->ident &= ~(IDENT_FIXED);
case 'w': case 'W':
{
object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_GREAT | AM_CURSED);
+ apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_GREAT | AM_CURSED);
break;
}
/* Apply bad magic, but first clear object */
case 'c': case 'C':
{
object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_CURSED);
+ apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_CURSED);
break;
}
/* Apply normal magic, but first clear object */
case 'n': case 'N':
{
object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART);
+ apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART);
break;
}
/* Apply good magic, but first clear object */
case 'g': case 'G':
{
object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD);
+ apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD);
break;
}
/* Apply great magic, but first clear object */
case 'e': case 'E':
{
object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_GREAT);
+ apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_GREAT);
break;
}
/* Apply special magic, but first clear object */
case 's': case 'S':
{
object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_GOOD | AM_GREAT | AM_SPECIAL);
+ apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_GOOD | AM_GREAT | AM_SPECIAL);
/* Failed to create artifact; make a random one */
- if (!object_is_artifact(q_ptr)) become_random_artifact(q_ptr, FALSE);
+ if (!object_is_artifact(q_ptr)) become_random_artifact(owner_ptr, q_ptr, FALSE);
break;
}
}
q_ptr = &forge;
object_prep(q_ptr, k_idx);
- apply_magic(q_ptr, caster_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART);
+ apply_magic(caster_ptr, q_ptr, caster_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART);
/* Drop the object from heaven */
(void)drop_near(caster_ptr, q_ptr, -1, caster_ptr->y, caster_ptr->x);
/*!
* @brief 全ベースアイテムを鑑定済みにする /
* Become aware of a lot of objects
+ * @param caster_ptr プレーヤーへの参照ポインタ
* @return なし
*/
-static void do_cmd_wiz_learn(void)
+static void do_cmd_wiz_learn(player_type *caster_ptr)
{
/* Scan every object */
object_type forge;
{
q_ptr = &forge;
object_prep(q_ptr, i);
- object_aware(q_ptr);
+ object_aware(caster_ptr, q_ptr);
}
}
}
/*!
* @brief 現在のフロアに合ったモンスターをランダムに召喚する /
* Summon some creatures
+ * @param caster_ptr プレーヤーへの参照ポインタ
* @param num 生成処理回数
* @return なし
*/
/* Learn about objects */
case 'l':
- do_cmd_wiz_learn();
+ do_cmd_wiz_learn(creature_ptr);
break;
/* Magic Mapping */