if (!(q_ptr->flags & QUEST_FLAG_SILENT))
{
+ play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_QUEST_CLEAR);
msg_print(_("クエストを達成した!", "You just completed your quest!"));
msg_print(NULL);
}
bool reward = FALSE;
object_type forge;
- object_type *q_ptr;
+ object_type *o_ptr;
/* Get the location */
y = m_ptr->fy;
for (i = 0; i < (dun_level / 15)+1; i++)
{
/* Get local object */
- q_ptr = &forge;
+ o_ptr = &forge;
/* Wipe the object */
- object_wipe(q_ptr);
+ object_wipe(o_ptr);
/* Make a great object */
- make_object(q_ptr, AM_GOOD | AM_GREAT);
+ make_object(o_ptr, AM_GOOD | AM_GREAT);
/* Drop it in the dungeon */
- (void)drop_near(q_ptr, -1, y, x);
+ (void)drop_near(o_ptr, -1, y, x);
}
}
}
int a_idx = 0;
int chance = 0;
- switch (m_ptr->r_idx)
+ for(i = 0; i < 4; i++)
{
- case MON_OBERON:
- if (one_in_(3))
- {
- a_idx = ART_JUDGE;
- chance = 33;
- }
- else
- {
- a_idx = ART_AMBER;
- chance = 50;
- }
- break;
-
- case MON_GHB:
- a_idx = ART_GHB;
- chance = 100;
- break;
-
- case MON_STORMBRINGER:
- a_idx = ART_STORMBRINGER;
- chance = 100;
- break;
-
- case MON_ECHIZEN:
- a_idx = ART_CRIMSON;
- chance = 50;
- break;
-
- case MON_GANDALF:
- a_idx = ART_ICANUS;
- chance = 20;
- break;
-
- case MON_OROCHI:
- a_idx = ART_KUSANAGI;
- chance = 25;
- break;
-
- case MON_DWORKIN:
- a_idx = ART_JUDGE;
- chance = 20;
- break;
-
- case MON_SAURON:
- if (one_in_(10))
- {
- a_idx = ART_POWER;
- chance = 100;
- }
- else
- {
- a_idx = ART_AHO;
- chance = 100;
- }
- break;
-
- case MON_BRAND:
- if (!one_in_(3))
- {
- a_idx = ART_BRAND;
- chance = 25;
- }
- else
- {
- a_idx = ART_WEREWINDLE;
- chance = 33;
- }
- break;
-
- case MON_CORWIN:
- if (!one_in_(3))
- {
- a_idx = ART_GRAYSWANDIR;
- chance = 33;
- }
- else
- {
- a_idx = ART_CORWIN;
- chance = 33;
- }
- break;
-
- case MON_SURTUR:
- if (!one_in_(3))
- {
- a_idx = ART_TWILIGHT;
- chance = 100;
- }
- else
- {
- a_idx = ART_ORB_OF_FATE;
- chance = 100;
- }
- break;
-
- case MON_SARUMAN:
- a_idx = ART_ELENDIL;
- chance = 33;
- break;
-
- case MON_FIONA:
- a_idx = ART_FIONA;
- chance = 50;
- break;
-
- case MON_JULIAN:
- a_idx = ART_JULIAN;
- chance = 45;
- break;
-
- case MON_KLING:
- a_idx = ART_DESTINY;
- chance = 40;
- break;
-
- case MON_GOEMON:
- a_idx = ART_ZANTETSU;
- chance = 100;
- break;
-
- case MON_HAGEN:
- a_idx = ART_HAGEN;
- chance = 66;
- break;
-
- case MON_CAINE:
- a_idx = ART_CAINE;
- chance = 50;
- break;
-
- case MON_BULLGATES:
- a_idx = ART_WINBLOWS;
- chance = 66;
- break;
-
- case MON_LUNGORTHIN:
- a_idx = ART_CALRIS;
- chance = 50;
- break;
-
- case MON_JACK_SHADOWS:
- a_idx = ART_JACK;
- chance = 15;
- break;
-
- case MON_DIO:
- a_idx = ART_STONEMASK;
- chance = 20;
- break;
-
- case MON_BELD:
- a_idx = ART_SOULCRUSH;
- chance = 10;
- break;
-
- case MON_PIP:
- a_idx = ART_EXCALIBUR_J;
- chance = 50;
- break;
-
- case MON_SHUTEN:
- a_idx = ART_SHUTEN_DOJI;
- chance = 33;
- break;
-
- case MON_GOTHMOG:
- a_idx = ART_GOTHMOG;
- chance = 33;
- break;
-
- case MON_FUNDIN:
- a_idx = ART_FUNDIN;
- chance = 5;
- break;
-
- case MON_ROBIN_HOOD:
- a_idx = ART_ROBIN_HOOD;
- chance = 5;
- break;
-
- case MON_KOGAN:
- a_idx = ART_NANACHO;
- chance = 80;
- break;
-
+ if(!r_ptr->artifact_id[i]) break;
+ a_idx = r_ptr->artifact_id[i];
+ chance = r_ptr->artifact_percent[i];
}
if ((a_idx > 0) && ((randint0(100) < chance) || p_ptr->wizard))
if (d_info[dungeon_type].final_artifact)
{
- int a_idx = d_info[dungeon_type].final_artifact;
+ a_idx = d_info[dungeon_type].final_artifact;
artifact_type *a_ptr = &a_info[a_idx];
if (!a_ptr->cur_num)
/* Redraw the "title" */
p_ptr->redraw |= (PR_TITLE);
+ play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FINAL_QUEST_CLEAR);
+
do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("見事に変愚蛮怒の勝利者となった!", "become *WINNER* of Hengband finely!"));
if ((p_ptr->pclass == CLASS_CHAOS_WARRIOR) || (p_ptr->muta2 & MUT2_CHAOS_GIFT))
chg_virtue (V_JUSTICE, -1);
}
- if ((r_ptr->flags3 & RF3_ANIMAL) && !(r_ptr->flags3 & RF3_EVIL) && !(r_ptr->flags4 & ~(RF4_NOMAGIC_MASK)) && !(r_ptr->flags5 & ~(RF5_NOMAGIC_MASK)) && !(r_ptr->flags6 & ~(RF6_NOMAGIC_MASK)))
+ if ((r_ptr->flags3 & RF3_ANIMAL) && !(r_ptr->flags3 & RF3_EVIL) && !(r_ptr->flags4 & ~(RF4_NOMAGIC_MASK)) && !(r_ptr->a_ability_flags1 & ~(RF5_NOMAGIC_MASK)) && !(r_ptr->a_ability_flags2 & ~(RF6_NOMAGIC_MASK)))
{
if (one_in_(4)) chg_virtue(V_NATURE, -1);
}
if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
msg_format("せっかくだから%sを殺した。", m_name);
else
-msg_format("%sを殺した。", m_name);
+ msg_format("%sを殺した。", m_name);
#else
msg_format("You have killed %s.", m_name);
#endif
/* Death by Physical attack -- non-living monster */
else if (!monster_living(r_ptr))
{
- int i;
bool explode = FALSE;
for (i = 0; i < 4; i++)
* Waiting command;
* Place the cursor on the player
*/
- if (can_save) move_cursor_relative(py, px);
+ if (can_save) move_cursor_relative(p_ptr->y, p_ptr->x);
/* Refresh */
Term_fresh();
*/
void verify_panel(void)
{
- int y = py;
- int x = px;
+ int y = p_ptr->y;
+ int x = p_ptr->x;
int wid, hgt;
int prow_min;
if (p_ptr->riding && (p_ptr->riding == m_idx)) return (TRUE);
/* Monster must be projectable */
- if (!projectable(py, px, m_ptr->fy, m_ptr->fx)) return (FALSE);
+ if (!projectable(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx)) return (FALSE);
/* XXX XXX XXX Hack -- Never target trappers */
/* if (CLEAR_ATTR && (CLEAR_CHAR)) return (FALSE); */
int da, db, kx, ky;
/* Absolute distance components */
- kx = x[a]; kx -= px; kx = ABS(kx);
- ky = y[a]; ky -= py; ky = ABS(ky);
+ kx = x[a]; kx -= p_ptr->x; kx = ABS(kx);
+ ky = y[a]; ky -= p_ptr->y; ky = ABS(ky);
/* Approximate Double Distance to the first point */
da = ((kx > ky) ? (kx + kx + ky) : (ky + ky + kx));
/* Absolute distance components */
- kx = x[b]; kx -= px; kx = ABS(kx);
- ky = y[b]; ky -= py; ky = ABS(ky);
+ kx = x[b]; kx -= p_ptr->x; kx = ABS(kx);
+ ky = y[b]; ky -= p_ptr->y; ky = ABS(ky);
/* Approximate Double Distance to the first point */
db = ((kx > ky) ? (kx + kx + ky) : (ky + ky + kx));
monster_race *ap_ra_ptr, *ap_rb_ptr;
/* The player grid */
- if (y[a] == py && x[a] == px) return TRUE;
- if (y[b] == py && x[b] == px) return FALSE;
+ if (y[a] == p_ptr->y && x[a] == p_ptr->x) return TRUE;
+ if (y[b] == p_ptr->y && x[b] == p_ptr->x) return FALSE;
/* Extract monster race */
if (ca_ptr->m_idx && ma_ptr->ml) ap_ra_ptr = &r_info[ma_ptr->ap_r_idx];
if (mode & TARGET_KILL)
{
/* Inner range */
- min_hgt = MAX((py - MAX_RANGE), 0);
- max_hgt = MIN((py + MAX_RANGE), cur_hgt - 1);
- min_wid = MAX((px - MAX_RANGE), 0);
- max_wid = MIN((px + MAX_RANGE), cur_wid - 1);
+ min_hgt = MAX((p_ptr->y - MAX_RANGE), 0);
+ max_hgt = MIN((p_ptr->y + MAX_RANGE), cur_hgt - 1);
+ min_wid = MAX((p_ptr->x - MAX_RANGE), 0);
+ max_wid = MIN((p_ptr->x + MAX_RANGE), cur_wid - 1);
}
else /* not targetting */
{
temp_x[1] = tmp;
}
}
+
void target_set_prepare_look(){
target_set_prepare(TARGET_LOOK);
}
bool target_set(int mode)
{
int i, d, m, t, bd;
- int y = py;
- int x = px;
+ int y = p_ptr->y;
+ int x = p_ptr->x;
bool done = FALSE;
char info[80];
+ char same_key;
+
cave_type *c_ptr;
int wid, hgt;
/* Cancel tracking */
/* health_track(0); */
+ if (rogue_like_commands)
+ {
+ same_key = 'x';
+ }
+ else
+ {
+ same_key = 'l';
+ }
/* Prepare the "temp" array */
target_set_prepare(mode);
/* Recalculate interesting grids */
target_set_prepare(mode);
- y = py;
- x = px;
+ y = p_ptr->y;
+ x = p_ptr->x;
}
case 'o':
default:
{
- /* Extract the action (if any) */
- d = get_keymap_dir(query);
+ if(query == same_key)
+ {
+ if (++m == temp_n)
+ {
+ m = 0;
+ if (!expand_list) done = TRUE;
+ }
+ }
+ else
+ {
+ /* Extract the action (if any) */
+ d = get_keymap_dir(query);
- if (!d) bell();
- break;
+ if (!d) bell();
+ break;
+ }
}
}
-
/* Hack -- move around */
if (d)
{
/* Recalculate interesting grids */
target_set_prepare(mode);
- y = py;
- x = px;
+ y = p_ptr->y;
+ x = p_ptr->x;
}
case 'o':
msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
- acquirement(py, px, 1, FALSE, FALSE, FALSE);
+ acquirement(p_ptr->y, p_ptr->x, 1, FALSE, FALSE, FALSE);
reward = _("上質なアイテムを手に入れた。", "a good item");
break;
case REW_GREA_OBJ:
msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
- acquirement(py, px, 1, TRUE, FALSE, FALSE);
+ acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE);
reward = _("高級品のアイテムを手に入れた。", "an excellent item");
break;
case REW_CHAOS_WP:
q_ptr->name2 = EGO_CHAOTIC;
/* Drop it in the dungeon */
- (void)drop_near(q_ptr, -1, py, px);
+ (void)drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);
reward = _("(混沌)の武器を手に入れた。", "chaos weapon");
break;
case REW_GOOD_OBS:
msg_print(_("「汝の行いは貴き報いに値せり。」", "'Thy deed hath earned thee a worthy reward.'"));
- acquirement(py, px, randint1(2) + 1, FALSE, FALSE, FALSE);
+ acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, FALSE, FALSE, FALSE);
reward = _("上質なアイテムを手に入れた。", "good items");
break;
case REW_GREA_OBS:
msg_print(_("「下僕よ、汝の献身への我が惜しみ無き報いを見るがよい。」", "'Behold, mortal, how generously I reward thy loyalty.'"));
- acquirement(py, px, randint1(2) + 1, TRUE, FALSE, FALSE);
+ acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE);
reward = _("高級品のアイテムを手に入れた。", "excellent items");
break;
case REW_TY_CURSE:
for (dummy = 0; dummy < randint1(5) + 1; dummy++)
{
- (void)summon_specific(0, py, px, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+ (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
}
reward = _("モンスターを召喚された。", "summoning hostile monsters");
break;
msg_print(_("「汝、より強き敵を必要とせり!」", "'Thou needst worthier opponents!'"));
- activate_hi_summon(py, px, FALSE);
+ activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
reward = _("モンスターを召喚された。", "summoning many hostile monsters");
break;
case REW_DO_HAVOC:
reward = _("禍々しい呪いをかけられた。", "cursing");
break;
case 2:
- activate_hi_summon(py, px, FALSE);
+ activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
reward = _("モンスターを召喚された。", "summoning hostile monsters");
break;
case 3:
{
(void)dec_stat(dummy, 10 + randint1(15), FALSE);
}
- activate_hi_summon(py, px, FALSE);
+ activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
(void)activate_ty_curse(FALSE, &count);
if (one_in_(2))
{
msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
- (void)destroy_area(py, px, 25, FALSE);
+ (void)destroy_area(p_ptr->y, p_ptr->x, 25, FALSE);
reward = _("ダンジョンが*破壊*された。", "*destruct*ing dungeon");
break;
case REW_GENOCIDE:
case REW_SER_DEMO:
msg_format(_("%sは褒美として悪魔の使いをよこした!", "%s rewards you with a demonic servant!"),chaos_patrons[p_ptr->chaos_patron]);
- if (!summon_specific(-1, py, px, dun_level, SUMMON_DEMON, PM_FORCE_PET))
+ if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET))
msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
else
reward = _("悪魔がペットになった。", "a demonic servant");
case REW_SER_MONS:
msg_format(_("%sは褒美として使いをよこした!", "%s rewards you with a servant!"),chaos_patrons[p_ptr->chaos_patron]);
- if (!summon_specific(-1, py, px, dun_level, 0, PM_FORCE_PET))
+ if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET))
msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
else
reward = _("モンスターがペットになった。", "a servant");
case REW_SER_UNDE:
msg_format(_("%sは褒美としてアンデッドの使いをよこした。", "%s rewards you with an undead servant!"),chaos_patrons[p_ptr->chaos_patron]);
- if (!summon_specific(-1, py, px, dun_level, SUMMON_UNDEAD, PM_FORCE_PET))
+ if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET))
msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
else
reward = _("アンデッドがペットになった。", "an undead servant");
if (!(in_bounds(y, x))) return (FALSE);
/* Player grid is always interesting */
- if ((y == py) && (x == px)) return (TRUE);
+ if ((y == p_ptr->y) && (x == p_ptr->x)) return (TRUE);
/* Handle hallucination */
if (p_ptr->image) return (FALSE);
/* Get size */
get_screen_size(&wid, &hgt);
- x = px;
- y = py;
+ x = p_ptr->x;
+ y = p_ptr->y;
if (expand_list)
{
if (n == temp_n) /* Loop out taget list */
{
n = 0;
- y = py;
- x = px;
+ y = p_ptr->y;
+ x = p_ptr->x;
verify_panel(); /* Move cursor to player */
/* Update stuff */