/*!
* @brief アイテムの強化を行う。 / Enchant item
- * @param cost 1回毎の費用
+ * @param player_ptr プレーヤーへの参照ポインタ
+ * @param cost 1回毎の費用
* @param to_hit 命中をアップさせる量
* @param to_dam ダメージをアップさせる量
* @param to_ac ACをアップさせる量
* @return 実際に行ったらTRUE
*/
-static bool enchant_item(PRICE cost, HIT_PROB to_hit, HIT_POINT to_dam, ARMOUR_CLASS to_ac)
+static bool enchant_item(player_type *player_ptr, PRICE cost, HIT_PROB to_hit, HIT_POINT to_dam, ARMOUR_CLASS to_ac)
{
int i;
OBJECT_IDX item;
bool okay = FALSE;
object_type *o_ptr;
concptr q, s;
- int maxenchant = (p_ptr->lev / 5);
+ int maxenchant = (player_ptr->lev / 5);
char tmp_str[MAX_NLEN];
clear_bldg(4, 18);
q = _("どのアイテムを改良しますか?", "Improve which item? ");
s = _("改良できるものがありません。", "You have nothing to improve.");
- o_ptr = choose_object(p_ptr, &item, q, s, (USE_INVEN | USE_EQUIP | IGNORE_BOTHHAND_SLOT), item_tester_tval);
+ o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_EQUIP | IGNORE_BOTHHAND_SLOT), item_tester_tval);
if (!o_ptr) return (FALSE);
/* Check if the player has enough money */
- if (p_ptr->au < (cost * o_ptr->number))
+ if (player_ptr->au < (cost * o_ptr->number))
{
object_desc(tmp_str, o_ptr, OD_NAME_ONLY);
msg_format(_("%sを改良するだけのゴールドがありません!", "You do not have the gold to improve %s!"), tmp_str);
{
if (o_ptr->to_h < maxenchant)
{
- if (enchant(o_ptr, 1, (ENCH_TOHIT | ENCH_FORCE)))
+ if (enchant(player_ptr, o_ptr, 1, (ENCH_TOHIT | ENCH_FORCE)))
{
okay = TRUE;
break;
{
if (o_ptr->to_d < maxenchant)
{
- if (enchant(o_ptr, 1, (ENCH_TODAM | ENCH_FORCE)))
+ if (enchant(player_ptr, o_ptr, 1, (ENCH_TODAM | ENCH_FORCE)))
{
okay = TRUE;
break;
{
if (o_ptr->to_a < maxenchant)
{
- if (enchant(o_ptr, 1, (ENCH_TOAC | ENCH_FORCE)))
+ if (enchant(player_ptr, o_ptr, 1, (ENCH_TOAC | ENCH_FORCE)))
{
okay = TRUE;
break;
#endif
/* Charge the money */
- p_ptr->au -= (cost * o_ptr->number);
+ player_ptr->au -= (cost * o_ptr->number);
- if (item >= INVEN_RARM) calc_android_exp(p_ptr);
+ if (item >= INVEN_RARM) calc_android_exp(player_ptr);
/* Something happened */
return (TRUE);
/*!
* @brief 施設の処理実行メインルーチン / Execute a building command
+ * @param player_ptr プレーヤーへの参照ポインタ
* @param bldg 施設構造体の参照ポインタ
* @param i 実行したい施設のサービステーブルの添字
* @return なし
*/
-static void bldg_process_command(building_type *bldg, int i)
+static void bldg_process_command(player_type *player_ptr, building_type *bldg, int i)
{
BACT_IDX bact = bldg->actions[i];
PRICE bcost;
/* check gold (HACK - Recharge uses variable costs) */
if ((bact != BACT_RECHARGE) &&
- (((bldg->member_costs[i] > p_ptr->au) && is_owner(bldg)) ||
- ((bldg->other_costs[i] > p_ptr->au) && !is_owner(bldg))))
+ (((bldg->member_costs[i] > player_ptr->au) && is_owner(bldg)) ||
+ ((bldg->other_costs[i] > player_ptr->au) && !is_owner(bldg))))
{
msg_print(_("お金が足りません!", "You do not have the gold!"));
return;
case BACT_KING_LEGENDS:
case BACT_ARENA_LEGENDS:
case BACT_LEGENDS:
- show_highclass(p_ptr);
+ show_highclass(player_ptr);
break;
case BACT_POSTER:
case BACT_ARENA_RULES:
break;
case BACT_ENCHANT_WEAPON:
item_tester_hook = object_allow_enchant_melee_weapon;
- enchant_item(bcost, 1, 1, 0);
+ enchant_item(player_ptr, bcost, 1, 1, 0);
break;
case BACT_ENCHANT_ARMOR:
item_tester_hook = object_is_armour;
- enchant_item(bcost, 0, 0, 1);
+ enchant_item(player_ptr, bcost, 0, 0, 1);
break;
case BACT_RECHARGE:
building_recharge();
break;
case BACT_IDENTS: /* needs work */
if (!get_check(_("持ち物を全て鑑定してよろしいですか?", "Do you pay for identify all your possession? "))) break;
- identify_pack(p_ptr);
+ identify_pack(player_ptr);
msg_print(_(" 持ち物全てが鑑定されました。", "Your possessions have been identified."));
paid = TRUE;
break;
case BACT_IDENT_ONE: /* needs work */
- paid = ident_spell(p_ptr, FALSE);
+ paid = ident_spell(player_ptr, FALSE);
break;
case BACT_LEARN:
- do_cmd_study(p_ptr);
+ do_cmd_study(player_ptr);
break;
case BACT_HEALING: /* needs work */
- paid = cure_critical_wounds(p_ptr, 200);
+ paid = cure_critical_wounds(player_ptr, 200);
break;
case BACT_RESTORE: /* needs work */
- paid = restore_all_status(p_ptr);
+ paid = restore_all_status(player_ptr);
break;
case BACT_ENCHANT_ARROWS:
item_tester_hook = item_tester_hook_ammo;
- enchant_item(bcost, 1, 1, 0);
+ enchant_item(player_ptr, bcost, 1, 1, 0);
break;
case BACT_ENCHANT_BOW:
item_tester_tval = TV_BOW;
- enchant_item(bcost, 1, 1, 0);
+ enchant_item(player_ptr, bcost, 1, 1, 0);
break;
case BACT_RECALL:
- if (recall_player(p_ptr, 1)) paid = TRUE;
+ if (recall_player(player_ptr, 1)) paid = TRUE;
break;
case BACT_TELEPORT_LEVEL:
clear_bldg(4, 20);
- paid = free_level_recall(p_ptr);
+ paid = free_level_recall(player_ptr);
break;
case BACT_LOSE_MUTATION:
- if (p_ptr->muta1 || p_ptr->muta2 || (p_ptr->muta3 & ~MUT3_GOOD_LUCK) ||
- (p_ptr->pseikaku != SEIKAKU_LUCKY && (p_ptr->muta3 & MUT3_GOOD_LUCK)))
+ if (player_ptr->muta1 || player_ptr->muta2 || (player_ptr->muta3 & ~MUT3_GOOD_LUCK) ||
+ (player_ptr->pseikaku != SEIKAKU_LUCKY && (player_ptr->muta3 & MUT3_GOOD_LUCK)))
{
- while(!lose_mutation(p_ptr, 0));
+ while(!lose_mutation(player_ptr, 0));
paid = TRUE;
}
else
case BACT_HEIKOUKA:
msg_print(_("平衡化の儀式を行なった。", "You received an equalization ritual."));
- set_virtue(p_ptr, V_COMPASSION, 0);
- set_virtue(p_ptr, V_HONOUR, 0);
- set_virtue(p_ptr, V_JUSTICE, 0);
- set_virtue(p_ptr, V_SACRIFICE, 0);
- set_virtue(p_ptr, V_KNOWLEDGE, 0);
- set_virtue(p_ptr, V_FAITH, 0);
- set_virtue(p_ptr, V_ENLIGHTEN, 0);
- set_virtue(p_ptr, V_ENCHANT, 0);
- set_virtue(p_ptr, V_CHANCE, 0);
- set_virtue(p_ptr, V_NATURE, 0);
- set_virtue(p_ptr, V_HARMONY, 0);
- set_virtue(p_ptr, V_VITALITY, 0);
- set_virtue(p_ptr, V_UNLIFE, 0);
- set_virtue(p_ptr, V_PATIENCE, 0);
- set_virtue(p_ptr, V_TEMPERANCE, 0);
- set_virtue(p_ptr, V_DILIGENCE, 0);
- set_virtue(p_ptr, V_VALOUR, 0);
- set_virtue(p_ptr, V_INDIVIDUALISM, 0);
- get_virtues(p_ptr);
+ set_virtue(player_ptr, V_COMPASSION, 0);
+ set_virtue(player_ptr, V_HONOUR, 0);
+ set_virtue(player_ptr, V_JUSTICE, 0);
+ set_virtue(player_ptr, V_SACRIFICE, 0);
+ set_virtue(player_ptr, V_KNOWLEDGE, 0);
+ set_virtue(player_ptr, V_FAITH, 0);
+ set_virtue(player_ptr, V_ENLIGHTEN, 0);
+ set_virtue(player_ptr, V_ENCHANT, 0);
+ set_virtue(player_ptr, V_CHANCE, 0);
+ set_virtue(player_ptr, V_NATURE, 0);
+ set_virtue(player_ptr, V_HARMONY, 0);
+ set_virtue(player_ptr, V_VITALITY, 0);
+ set_virtue(player_ptr, V_UNLIFE, 0);
+ set_virtue(player_ptr, V_PATIENCE, 0);
+ set_virtue(player_ptr, V_TEMPERANCE, 0);
+ set_virtue(player_ptr, V_DILIGENCE, 0);
+ set_virtue(player_ptr, V_VALOUR, 0);
+ set_virtue(player_ptr, V_INDIVIDUALISM, 0);
+ get_virtues(player_ptr);
paid = TRUE;
break;
case BACT_TELE_TOWN:
- paid = tele_town(p_ptr);
+ paid = tele_town(player_ptr);
break;
case BACT_EVAL_AC:
- paid = eval_ac(p_ptr->dis_ac + p_ptr->dis_to_a);
+ paid = eval_ac(player_ptr->dis_ac + player_ptr->dis_to_a);
break;
case BACT_BROKEN_WEAPON:
break;
}
- if (paid)
- {
- p_ptr->au -= bcost;
- }
+ if (paid) player_ptr->au -= bcost;
}
/*!
* @brief 施設入り口にプレイヤーが乗った際の処理 / Do building commands
+ * @param プレーヤーへの参照ポインタ
* @return なし
*/
-void do_cmd_bldg(void)
+void do_cmd_bldg(player_type *player_ptr)
{
int i, which;
char command;
bool validcmd;
building_type *bldg;
- if(p_ptr->wild_mode) return;
+ if(player_ptr->wild_mode) return;
- take_turn(p_ptr, 100);
+ take_turn(player_ptr, 100);
- if (!cave_have_flag_bold(p_ptr->current_floor_ptr, p_ptr->y, p_ptr->x, FF_BLDG))
+ if (!cave_have_flag_bold(player_ptr->current_floor_ptr, player_ptr->y, player_ptr->x, FF_BLDG))
{
msg_print(_("ここには建物はない。", "You see no building here."));
return;
}
- which = f_info[p_ptr->current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].feat].subtype;
+ which = f_info[player_ptr->current_floor_ptr->grid_array[player_ptr->y][player_ptr->x].feat].subtype;
bldg = &building[which];
/* Don't re-init the wilderness */
reinit_wilderness = FALSE;
- if ((which == 2) && (p_ptr->arena_number < 0))
+ if ((which == 2) && (player_ptr->arena_number < 0))
{
msg_print(_("「敗者に用はない。」", "'There's no place here for a LOSER like you!'"));
return;
}
- else if ((which == 2) && p_ptr->current_floor_ptr->inside_arena)
+ else if ((which == 2) && player_ptr->current_floor_ptr->inside_arena)
{
- if (!p_ptr->exit_bldg && p_ptr->current_floor_ptr->m_cnt > 0)
+ if (!player_ptr->exit_bldg && player_ptr->current_floor_ptr->m_cnt > 0)
{
prt(_("ゲートは閉まっている。モンスターがあなたを待っている!", "The gates are closed. The monster awaits!"), 0, 0);
}
/* Don't save the arena as saved floor */
prepare_change_floor_mode(CFM_SAVE_FLOORS | CFM_NO_RETURN);
- p_ptr->current_floor_ptr->inside_arena = FALSE;
- p_ptr->leaving = TRUE;
+ player_ptr->current_floor_ptr->inside_arena = FALSE;
+ player_ptr->leaving = TRUE;
/* Re-enter the arena */
command_new = SPECIAL_KEY_BUILDING;
/* No energy needed to re-enter the arena */
- free_turn(p_ptr);
+ free_turn(player_ptr);
}
return;
}
- else if (p_ptr->phase_out)
+ else if (player_ptr->phase_out)
{
/* Don't save the arena as saved floor */
prepare_change_floor_mode(CFM_SAVE_FLOORS | CFM_NO_RETURN);
- p_ptr->leaving = TRUE;
- p_ptr->phase_out = FALSE;
+ player_ptr->leaving = TRUE;
+ player_ptr->phase_out = FALSE;
/* Re-enter the monster arena */
command_new = SPECIAL_KEY_BUILDING;
/* No energy needed to re-enter the arena */
- free_turn(p_ptr);
+ free_turn(player_ptr);
return;
}
else
{
- p_ptr->oldpy = p_ptr->y;
- p_ptr->oldpx = p_ptr->x;
+ player_ptr->oldpy = player_ptr->y;
+ player_ptr->oldpx = player_ptr->x;
}
- forget_lite(p_ptr->current_floor_ptr);
- forget_view(p_ptr->current_floor_ptr);
+ forget_lite(player_ptr->current_floor_ptr);
+ forget_view(player_ptr->current_floor_ptr);
/* Hack -- Increase "icky" depth */
current_world_ptr->character_icky++;
command_new = 0;
show_building(bldg);
- p_ptr->leave_bldg = FALSE;
+ player_ptr->leave_bldg = FALSE;
play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BUILD);
- while (!p_ptr->leave_bldg)
+ while (!player_ptr->leave_bldg)
{
validcmd = FALSE;
prt("", 1, 0);
if (command == ESCAPE)
{
- p_ptr->leave_bldg = TRUE;
- p_ptr->current_floor_ptr->inside_arena = FALSE;
- p_ptr->phase_out = FALSE;
+ player_ptr->leave_bldg = TRUE;
+ player_ptr->current_floor_ptr->inside_arena = FALSE;
+ player_ptr->phase_out = FALSE;
break;
}
}
}
- if(validcmd) bldg_process_command(bldg, i);
+ if(validcmd) bldg_process_command(player_ptr, bldg, i);
handle_stuff();
}
- select_floor_music(p_ptr);
+ select_floor_music(player_ptr);
msg_flag = FALSE;
msg_erase();
/* Reinit wilderness to activate quests ... */
- if (reinit_wilderness)
- {
- p_ptr->leaving = TRUE;
- }
+ if (reinit_wilderness) player_ptr->leaving = TRUE;
/* Hack -- Decrease "icky" depth */
current_world_ptr->character_icky--;
Term_clear();
- p_ptr->update |= (PU_VIEW | PU_MONSTERS | PU_BONUS | PU_LITE | PU_MON_LITE);
- p_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY | PR_MAP);
- p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
+ player_ptr->update |= (PU_VIEW | PU_MONSTERS | PU_BONUS | PU_LITE | PU_MON_LITE);
+ player_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY | PR_MAP);
+ player_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
}
/* Ego-item */
o_ptr->name2 = EGO_FLAME;
- enchant(o_ptr, randint0(3) + 4, ENCH_TOHIT | ENCH_TODAM);
+ enchant(caster_ptr, o_ptr, randint0(3) + 4, ENCH_TOHIT | ENCH_TODAM);
return;
}
msg_format("%s %s shine%s!", ((item >= 0) ? "Your" : "The"), o_name, ((o_ptr->number > 1) ? "" : "s"));
#endif
o_ptr->name2 = EGO_REFLECTION;
- enchant(o_ptr, randint0(3) + 4, ENCH_TOAC);
+ enchant(caster_ptr, o_ptr, randint0(3) + 4, ENCH_TOAC);
o_ptr->discount = 99;
chg_virtue(caster_ptr, V_ENCHANT, 2);
/*!
* @brief 装備修正強化処理 /
* Enchants a plus onto an item. -RAK-
+ * @param caster_ptr プレーヤーへの参照ポインタ
* @param o_ptr 強化するアイテムの参照ポインタ
* @param n 強化基本量
* @param eflag 強化オプション(命中/ダメージ/AC)
* the larger the pile, the lower the chance of success.
* </pre>
*/
-bool enchant(object_type *o_ptr, int n, int eflag)
+bool enchant(player_type *caster_ptr, object_type *o_ptr, int n, int eflag)
{
int i, chance, prob;
bool res = FALSE;
/* Failure */
if (!res) return (FALSE);
- p_ptr->update |= (PU_BONUS | PU_COMBINE | PU_REORDER);
- p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
+ caster_ptr->update |= (PU_BONUS | PU_COMBINE | PU_REORDER);
+ caster_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
calc_android_exp(p_ptr);
/*!
* @brief 装備修正強化処理のメインルーチン /
* Enchant an item (in the inventory or on the floor)
+ * @param caster_ptr プレーヤーへの参照ポインタ
* @param num_hit 命中修正量
* @param num_dam ダメージ修正量
* @param num_ac AC修正量
* Note that "num_ac" requires armour, else weapon
* Returns TRUE if attempted, FALSE if cancelled
*/
-bool enchant_spell(HIT_PROB num_hit, HIT_POINT num_dam, ARMOUR_CLASS num_ac)
+bool enchant_spell(player_type *caster_ptr, HIT_PROB num_hit, HIT_POINT num_dam, ARMOUR_CLASS num_ac)
{
OBJECT_IDX item;
bool okay = FALSE;
#endif
/* Enchant */
- if (enchant(o_ptr, num_hit, ENCH_TOHIT)) okay = TRUE;
- if (enchant(o_ptr, num_dam, ENCH_TODAM)) okay = TRUE;
- if (enchant(o_ptr, num_ac, ENCH_TOAC)) okay = TRUE;
+ if (enchant(caster_ptr, o_ptr, num_hit, ENCH_TOHIT)) okay = TRUE;
+ if (enchant(caster_ptr, o_ptr, num_dam, ENCH_TODAM)) okay = TRUE;
+ if (enchant(caster_ptr, o_ptr, num_ac, ENCH_TOAC)) okay = TRUE;
/* Failure */
if (!okay)
/*!
* @brief 武器へのエゴ付加処理 /
* Brand the current weapon
+ * @param caster_ptr プレーヤーへの参照ポインタ
* @param brand_type エゴ化ID(e_info.txtとは連動していない)
* @return なし
*/
}
msg_format(_("あなたの%s%s", "Your %s %s"), o_name, act);
- enchant(o_ptr, randint0(3) + 4, ENCH_TOHIT | ENCH_TODAM);
+ enchant(caster_ptr, o_ptr, randint0(3) + 4, ENCH_TOHIT | ENCH_TODAM);
o_ptr->discount = 99;
chg_virtue(caster_ptr, V_ENCHANT, 2);