#include "angband.h"
#include "util.h"
+#include "term.h"
+#include "core.h"
+#include "cmd-dump.h"
+#include "cmd-magiceat.h"
#include "floor.h"
#include "floor-events.h"
#include "floor-save.h"
#include "artifact.h"
#include "cmd-spell.h"
#include "rumor.h"
-#include "player-status.h"
#include "spells.h"
+#include "spells-object.h"
#include "spells-status.h"
#include "realm-hex.h"
#include "dungeon-file.h"
#include "files.h"
+#include "player-status.h"
#include "player-effects.h"
+#include "player-class.h"
+#include "player-personality.h"
+#include "player-inventory.h"
#include "scores.h"
#include "shoot.h"
#include "view-mainwindow.h"
*/
building_type building[MAX_BLDG];
+MONRACE_IDX battle_mon[4];
+u32b mon_odds[4];
+int battle_odds;
+PRICE kakekin;
+int sel_monster;
+
+bool reinit_wilderness = FALSE;
+MONSTER_IDX today_mon;
/*!
* @brief 闘技場のモンスターID及び報酬アイテムテーブル
msg_print(NULL);
p_ptr->exit_bldg = FALSE;
- reset_tim_flags();
+ reset_tim_flags(p_ptr);
/* Save the surface floor as saved floor */
prepare_change_floor_mode(CFM_SAVE_FLOORS);
else
{
p_ptr->exit_bldg = FALSE;
- reset_tim_flags();
+ reset_tim_flags(p_ptr);
/* Save the surface floor as saved floor */
prepare_change_floor_mode(CFM_SAVE_FLOORS);
{
msg_print(_("「今回は儲けたな!でも次はこっちが勝ってやるからな、絶対に!」",
"You came out a winner! We'll win next time, I'm sure."));
- chg_virtue(V_CHANCE, 3);
+ chg_virtue(p_ptr, V_CHANCE, 3);
}
else
{
msg_print(_("「金をスッてしまったな、わはは!うちに帰った方がいいぜ。」", "You lost gold! Haha, better head home."));
- chg_virtue(V_CHANCE, -3);
+ chg_virtue(p_ptr, V_CHANCE, -3);
}
}
msg_print(NULL);
int mon_level;
int power[4];
bool tekitou;
- bool old_inside_battle = p_ptr->inside_battle;
+ bool old_inside_battle = p_ptr->phase_out;
- for (i = 0; i < max_d_idx; i++)
+ for (i = 0; i < current_world_ptr->max_d_idx; i++)
if (max_dl < max_dlv[i]) max_dl = max_dlv[i];
mon_level = randint1(MIN(max_dl, 122)) + 5;
while (1)
{
get_mon_num_prep(monster_can_entry_arena, NULL);
- p_ptr->inside_battle = TRUE;
+ p_ptr->phase_out = TRUE;
r_idx = get_mon_num(mon_level);
- p_ptr->inside_battle = old_inside_battle;
+ p_ptr->phase_out = old_inside_battle;
if (!r_idx) continue;
if ((r_info[r_idx].flags1 & RF1_UNIQUE) || (r_info[r_idx].flags7 & RF7_UNIQUE2))
if (r_ptr->flagsr & RFR_RES_ALL) power[i] *= 100000;
if (r_ptr->arena_ratio) power[i] = power[i] * r_ptr->arena_ratio / 100;
-
total += power[i];
}
for (i = 0; i < 4; i++)
{
+ if (power[i] <= 0) break;
power[i] = total * 60 / power[i];
if (tekitou && ((power[i] < 160) || power[i] > 1500)) break;
if ((power[i] < 160) && randint0(20)) break;
char out_val[160], tmp_str[80];
concptr p;
- if ((current_world_ptr->game_turn - old_battle) > TURNS_PER_TICK * 250)
+ if ((current_world_ptr->game_turn - current_world_ptr->arena_start_turn) > TURNS_PER_TICK * 250)
{
update_gambling_monsters();
- old_battle = current_world_ptr->game_turn;
+ current_world_ptr->arena_start_turn = current_world_ptr->game_turn;
}
screen_save();
battle_odds = MAX(wager+1, wager * battle_odds / 100);
kakekin = wager;
p_ptr->au -= wager;
- reset_tim_flags();
+ reset_tim_flags(p_ptr);
/* Save the surface floor as saved floor */
prepare_change_floor_mode(CFM_SAVE_FLOORS);
- p_ptr->inside_battle = TRUE;
+ p_ptr->phase_out = TRUE;
p_ptr->leaving = TRUE;
-
p_ptr->leave_bldg = TRUE;
+
screen_load();
return (TRUE);
inven_item_increase(i, -o_ptr->number);
inven_item_describe(i);
inven_item_optimize(i);
- chg_virtue(V_JUSTICE, 5);
+ chg_virtue(p_ptr, V_JUSTICE, 5);
current_world_ptr->bounty_r_idx[j] += 10000;
change = TRUE;
inven_item_describe(i);
inven_item_optimize(i);
- chg_virtue(V_JUSTICE, 5);
+ chg_virtue(p_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, current_floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic(&forge, p_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
object_aware(&forge);
object_known(&forge);
return FALSE;
}
msg_print(_("バーテンはいくらかの食べ物とビールをくれた。", "The barkeep gives you some gruel and a beer."));
- (void)set_food(PY_FOOD_MAX - 1);
+ (void)set_food(p_ptr, PY_FOOD_MAX - 1);
break;
case BACT_REST: /* Rest for the night */
extract_day_hour_min(&prev_day, &prev_hour, &prev_min);
if ((prev_hour >= 6) && (prev_hour <= 17))
- do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("宿屋に泊まった。", "stay over daytime at the inn."));
+ exe_write_diary(p_ptr, NIKKI_BUNSHOU, 0, _("宿屋に泊まった。", "stay over daytime at the inn."));
else
- do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("宿屋に泊まった。", "stay over night at the inn."));
+ exe_write_diary(p_ptr, NIKKI_BUNSHOU, 0, _("宿屋に泊まった。", "stay over night at the inn."));
current_world_ptr->game_turn = (current_world_ptr->game_turn / (TURNS_PER_TICK * TOWN_DAWN / 2) + 1) * (TURNS_PER_TICK * TOWN_DAWN / 2);
if (current_world_ptr->dungeon_turn < current_world_ptr->dungeon_turn_limit)
prevent_turn_overflow();
- if ((prev_hour >= 18) && (prev_hour <= 23)) do_cmd_write_nikki(NIKKI_HIGAWARI, 0, NULL);
+ if ((prev_hour >= 18) && (prev_hour <= 23)) exe_write_diary(p_ptr, NIKKI_HIGAWARI, 0, NULL);
p_ptr->chp = p_ptr->mhp;
if (ironman_nightmare)
/* Have some nightmares */
while(1)
{
- sanity_blast(NULL, FALSE);
+ sanity_blast(p_ptr, NULL, FALSE);
if (!one_in_(3)) break;
}
msg_print(_("あなたは絶叫して目を覚ました。", "You awake screaming."));
- do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("悪夢にうなされてよく眠れなかった。", "be troubled by a nightmare."));
+ exe_write_diary(p_ptr, NIKKI_BUNSHOU, 0, _("悪夢にうなされてよく眠れなかった。", "be troubled by a nightmare."));
}
else
{
- set_blind(0);
- set_confused(0);
+ set_blind(p_ptr, 0);
+ set_confused(p_ptr, 0);
p_ptr->stun = 0;
p_ptr->chp = p_ptr->mhp;
p_ptr->csp = p_ptr->msp;
if ((prev_hour >= 6) && (prev_hour <= 17))
{
msg_print(_("あなたはリフレッシュして目覚め、夕方を迎えた。", "You awake refreshed for the evening."));
- do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("夕方を迎えた。", "awake refreshed."));
+ exe_write_diary(p_ptr, NIKKI_BUNSHOU, 0, _("夕方を迎えた。", "awake refreshed."));
}
else
{
msg_print(_("あなたはリフレッシュして目覚め、新たな日を迎えた。", "You awake refreshed for the new day."));
- do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("すがすがしい朝を迎えた。", "awake refreshed."));
+ exe_write_diary(p_ptr, NIKKI_BUNSHOU, 0, _("すがすがしい朝を迎えた。", "awake refreshed."));
}
}
}
clear_bldg(4, 18);
/* Current quest of the building */
- q_index = current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].special;
+ q_index = p_ptr->current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].special;
/* Is there a quest available at the building? */
if (!q_index)
concptr q, s;
TERM_LEN row = 2;
TERM_LEN wid = 38, mgn = 2;
- bool old_character_xtra = character_xtra;
+ bool old_character_xtra = current_world_ptr->character_xtra;
char ch;
PRICE total = 0;
PRICE cost = 0; /* First time no price */
q = _("第一の武器は?", "What is your first weapon? ");
s = _("比べるものがありません。", "You have nothing to compare.");
- o_ptr[0] = choose_object(&item, q, s, (USE_EQUIP | USE_INVEN | IGNORE_BOTHHAND_SLOT));
+ o_ptr[0] = choose_object(p_ptr, &item, q, s, (USE_EQUIP | USE_INVEN | IGNORE_BOTHHAND_SLOT), 0);
if (!o_ptr[0])
{
screen_load();
item_tester_hook = item_tester_hook_orthodox_melee_weapons;
/* Hack -- prevent "icky" message */
- character_xtra = TRUE;
+ current_world_ptr->character_xtra = TRUE;
/* Diaplay selected weapon's infomation */
for (i = 0; i < n; i++)
p_ptr->update |= PU_BONUS;
handle_stuff();
- character_xtra = old_character_xtra;
+ current_world_ptr->character_xtra = old_character_xtra;
#ifdef JP
put_str(format("[ 比較対象: 's'で変更 ($%d) ]", cost), 1, (wid + mgn));
s = _("比べるものがありません。", "You have nothing to compare.");
/* Get the second weapon */
- o_ptr[1] = choose_object(&item2, q, s, (USE_EQUIP | USE_INVEN | IGNORE_BOTHHAND_SLOT));
+ o_ptr[1] = choose_object(p_ptr, &item2, q, s, (USE_EQUIP | USE_INVEN | IGNORE_BOTHHAND_SLOT), 0);
if (!o_ptr[1]) continue;
total += cost;
/* Only forge broken weapons */
item_tester_hook = item_tester_hook_broken_weapon;
- o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_EQUIP));
+ o_ptr = choose_object(p_ptr, &item, q, s, (USE_INVEN | USE_EQUIP), 0);
if (!o_ptr) return (0);
/* It is worthless */
/* Only forge broken weapons */
item_tester_hook = item_tester_hook_orthodox_melee_weapons;
- mo_ptr = choose_object(&mater, q, s, (USE_INVEN | USE_EQUIP));
+ mo_ptr = choose_object(p_ptr, &mater, q, s, (USE_INVEN | USE_EQUIP), 0);
if (!mo_ptr) return (0);
if (mater == item)
{
o_ptr->discount = 99;
p_ptr->total_weight += o_ptr->weight;
- calc_android_exp();
+ calc_android_exp(p_ptr);
/* Decrease material object */
inven_item_increase(mater, -1);
q = _("どのアイテムを改良しますか?", "Improve which item? ");
s = _("改良できるものがありません。", "You have nothing to improve.");
- o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_EQUIP | IGNORE_BOTHHAND_SLOT));
+ o_ptr = choose_object(p_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 */
/* Charge the money */
p_ptr->au -= (cost * o_ptr->number);
- if (item >= INVEN_RARM) calc_android_exp();
+ if (item >= INVEN_RARM) calc_android_exp(p_ptr);
/* Something happened */
return (TRUE);
q = _("どのアイテムに魔力を充填しますか? ", "Recharge which item? ");
s = _("魔力を充填すべきアイテムがない。", "You have nothing to recharge.");
- o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
+ o_ptr = choose_object(p_ptr, &item, q, s, (USE_INVEN | USE_FLOOR), 0);
if (!o_ptr) return;
k_ptr = &k_info[o_ptr->k_idx];
/* Scan the monster memory */
while (notpicked)
{
- /* Extract a race */
r_idx = who[i];
/* Hack -- Begin the prompt */
/* Interact */
while (1)
{
- /* Recall */
if (recall)
{
/*** Recall on screen ***/
old_i = i;
}
- /* Command */
query = inkey();
/* Normal commands */
if (query != 'r') break;
- /* Toggle recall */
recall = !recall;
}
paid = ident_spell(FALSE);
break;
case BACT_LEARN:
- do_cmd_study();
+ do_cmd_study(p_ptr);
break;
case BACT_HEALING: /* needs work */
- paid = cure_critical_wounds(200);
+ paid = cure_critical_wounds(p_ptr, 200);
break;
case BACT_RESTORE: /* needs work */
- paid = restore_all_status();
+ paid = restore_all_status(p_ptr);
break;
case BACT_ENCHANT_ARROWS:
item_tester_hook = item_tester_hook_ammo;
if (p_ptr->muta1 || p_ptr->muta2 || (p_ptr->muta3 & ~MUT3_GOOD_LUCK) ||
(p_ptr->pseikaku != SEIKAKU_LUCKY && (p_ptr->muta3 & MUT3_GOOD_LUCK)))
{
- while(!lose_mutation(0));
+ while(!lose_mutation(p_ptr, 0));
paid = TRUE;
}
else
case BACT_HEIKOUKA:
msg_print(_("平衡化の儀式を行なった。", "You received an equalization ritual."));
- set_virtue(V_COMPASSION, 0);
- set_virtue(V_HONOUR, 0);
- set_virtue(V_JUSTICE, 0);
- set_virtue(V_SACRIFICE, 0);
- set_virtue(V_KNOWLEDGE, 0);
- set_virtue(V_FAITH, 0);
- set_virtue(V_ENLIGHTEN, 0);
- set_virtue(V_ENCHANT, 0);
- set_virtue(V_CHANCE, 0);
- set_virtue(V_NATURE, 0);
- set_virtue(V_HARMONY, 0);
- set_virtue(V_VITALITY, 0);
- set_virtue(V_UNLIFE, 0);
- set_virtue(V_PATIENCE, 0);
- set_virtue(V_TEMPERANCE, 0);
- set_virtue(V_DILIGENCE, 0);
- set_virtue(V_VALOUR, 0);
- set_virtue(V_INDIVIDUALISM, 0);
- get_virtues();
+ 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);
paid = TRUE;
break;
return;
}
- which = f_info[current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].feat].subtype;
+ which = f_info[p_ptr->current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].feat].subtype;
bldg = &building[which];
}
else if ((which == 2) && p_ptr->inside_arena)
{
- if (!p_ptr->exit_bldg && current_floor_ptr->m_cnt > 0)
+ if (!p_ptr->exit_bldg && p_ptr->current_floor_ptr->m_cnt > 0)
{
prt(_("ゲートは閉まっている。モンスターがあなたを待っている!", "The gates are closed. The monster awaits!"), 0, 0);
}
return;
}
- else if (p_ptr->inside_battle)
+ else if (p_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->inside_battle = FALSE;
+ p_ptr->phase_out = FALSE;
/* Re-enter the monster arena */
command_new = SPECIAL_KEY_BUILDING;
p_ptr->oldpx = p_ptr->x;
}
- forget_lite();
+ forget_lite(p_ptr->current_floor_ptr);
forget_view();
/* Hack -- Increase "icky" depth */
- character_icky++;
+ current_world_ptr->character_icky++;
command_arg = 0;
command_rep = 0;
{
p_ptr->leave_bldg = TRUE;
p_ptr->inside_arena = FALSE;
- p_ptr->inside_battle = FALSE;
+ p_ptr->phase_out = FALSE;
break;
}
handle_stuff();
}
- select_floor_music();
+ select_floor_music(p_ptr);
msg_flag = FALSE;
msg_erase();
}
/* Hack -- Decrease "icky" depth */
- character_icky--;
+ current_world_ptr->character_icky--;
Term_clear();
void determine_today_mon(bool conv_old)
{
int max_dl = 3, i;
- bool old_inside_battle = p_ptr->inside_battle;
+ bool old_inside_battle = p_ptr->phase_out;
monster_race *r_ptr;
if (!conv_old)
{
- for (i = 0; i < max_d_idx; i++)
+ for (i = 0; i < current_world_ptr->max_d_idx; i++)
{
if (max_dlv[i] < d_info[i].mindepth) continue;
if (max_dl < max_dlv[i]) max_dl = max_dlv[i];
}
else max_dl = MAX(max_dlv[DUNGEON_ANGBAND], 3);
- p_ptr->inside_battle = TRUE;
+ p_ptr->phase_out = TRUE;
get_mon_num_prep(NULL, NULL);
while (1)
}
p_ptr->today_mon = 0;
- p_ptr->inside_battle = old_inside_battle;
+ p_ptr->phase_out = old_inside_battle;
}