#include "object-curse.h"
#include "monsterrace-hook.h"
#include "objectkind-hook.h"
+#include "sort.h"
#define REWARD_CHANCE 10
choice = inkey();
if ((choice >= 'a') && (choice <= 'f')) break;
}
- for(n = 0; n < 6; n++)
+ for(n = 0; n < A_MAX; n++)
if (n != choice - 'a')
prt("",n+2,14);
if (get_check(_("よろしいですか?", "Are you sure? "))) break;
* Used to allocate proper treasure when "Creeping coins" die
* Note the use of actual "monster names"
*/
-static int get_coin_type(MONRACE_IDX r_idx)
+static OBJECT_SUBTYPE_VALUE get_coin_type(MONRACE_IDX r_idx)
{
/* Analyze monsters */
switch (r_idx)
/* Make a great object */
make_object(o_ptr, AM_GOOD | AM_GREAT);
-
- /* Drop it in the dungeon */
(void)drop_near(o_ptr, -1, y, x);
}
}
if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname)
{
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
do_cmd_write_nikki(NIKKI_NAMED_PET, 3, m_name);
/* 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, object_level, AM_NO_FIXED_ART);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
p_ptr->arena_number++;
if (record_arena)
{
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
/* Extract monster name */
monster_desc(m_name, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE);
apply_magic(q_ptr, object_level, AM_NO_FIXED_ART);
q_ptr->pval = m_ptr->r_idx;
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
if (pet) mode |= PM_FORCE_PET;
- if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode))
+ if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode, '\0'))
{
if (player_can_see_bold(wy, wx)) notice = TRUE;
}
object_prep(q_ptr, lookup_kind(TV_SWORD, SV_BLADE_OF_CHAOS));
apply_magic(q_ptr, object_level, AM_NO_FIXED_ART | mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
/* Make a book */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
BIT_FLAGS mode = 0L;
if (pet) mode |= PM_FORCE_PET;
- if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode))
+ if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode, '\0'))
{
if (player_can_see_bold(wy, wx))
msg_print(_("新たな戦士が現れた!", "A new warrior steps forth!"));
/* Mega-Hack -- Actually create "Grond" */
apply_magic(q_ptr, -1, AM_GOOD | AM_GREAT);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
q_ptr = &forge;
/* Mega-Hack -- Actually create "Chaos" */
apply_magic(q_ptr, -1, AM_GOOD | AM_GREAT);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
break;
/* Prepare to make a broken sword */
object_prep(q_ptr, lookup_kind(TV_SWORD, randint1(2)));
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
object_prep(q_ptr, lookup_kind(TV_CHEST, SV_CHEST_KANDUME));
apply_magic(q_ptr, object_level, AM_NO_FIXED_ART);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
/* Make a cloak */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
/* Make a poleweapon */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
/* Make a hard armor */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
/* Make a hafted weapon */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
/* Make a sword */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
object_prep(q_ptr, k_idx);
apply_magic(q_ptr, object_level, AM_NO_FIXED_ART | AM_GOOD);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
msg_format(_("あなたは%sを制覇した!", "You have conquered %s!"),d_name+d_info[dungeon_type].name);
dump_item++;
}
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
/* It is dead now */
if (m_ptr->hp < 0)
{
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
if (r_info[m_ptr->r_idx].flags7 & RF7_TANUKI)
{
*/
void panel_bounds_center(void)
{
- int wid, hgt;
+ TERM_LEN wid, hgt;
get_screen_size(&wid, &hgt);
p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
p_ptr->update |= (PU_MONSTERS);
-
p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
handle_stuff();
*/
if (can_save) move_cursor_relative(p_ptr->y, p_ptr->x);
- /* Refresh */
Term_fresh();
}
{
POSITION y = p_ptr->y;
POSITION x = p_ptr->x;
- int wid, hgt;
+ TERM_LEN wid, hgt;
int prow_min;
int pcol_min;
-/*
- * Angband sorting algorithm -- quick sort in place
- *
- * Note that the details of the data we are sorting is hidden,
- * and we rely on the "ang_sort_comp()" and "ang_sort_swap()"
- * function hooks to interact with the data, which is given as
- * two pointers, and which may have any user-defined form.
- */
-void ang_sort_aux(vptr u, vptr v, int p, int q)
-{
- int z, a, b;
-
- /* Done sort */
- if (p >= q) return;
-
- /* Pivot */
- z = p;
-
- /* Begin */
- a = p;
- b = q;
-
- /* Partition */
- while (TRUE)
- {
- /* Slide i2 */
- while (!(*ang_sort_comp)(u, v, b, z)) b--;
-
- /* Slide i1 */
- while (!(*ang_sort_comp)(u, v, z, a)) a++;
-
- /* Done partition */
- if (a >= b) break;
-
- /* Swap */
- (*ang_sort_swap)(u, v, a, b);
-
- /* Advance */
- a++, b--;
- }
-
- /* Recurse left side */
- ang_sort_aux(u, v, p, b);
-
- /* Recurse right side */
- ang_sort_aux(u, v, b+1, q);
-}
-
-
-/*
- * Angband sorting algorithm -- quick sort in place
- *
- * Note that the details of the data we are sorting is hidden,
- * and we rely on the "ang_sort_comp()" and "ang_sort_swap()"
- * function hooks to interact with the data, which is given as
- * two pointers, and which may have any user-defined form.
- */
-void ang_sort(vptr u, vptr v, int n)
-{
- /* Sort the array */
- ang_sort_aux(u, v, 0, n-1);
-}
-
-
-
/*** Targeting Code ***/
/* Hack -- under the player */
if (player_bold(y, x))
{
- /* Description */
#ifdef JP
s1 = "あなたは";
s2 = "の上";
s3 = "にいる";
#else
s1 = "You are ";
-
- /* Preposition */
s2 = "on ";
#endif
}
{
monster_type *m_ptr = &m_list[c_ptr->m_idx];
monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
bool recall = FALSE;
/* Not boring */
boring = FALSE;
- /* Get the monster name ("a kobold") */
monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
-
- /* Hack -- track this monster race */
monster_race_track(m_ptr->ap_r_idx);
-
- /* Hack -- health bar for this monster */
health_track(c_ptr->m_idx);
handle_stuff();
/* Recall */
if (recall)
{
- /* Save */
screen_save();
/* Recall on screen */
/* Command */
query = inkey();
- /* Restore */
screen_load();
/* Normal commands */
/* Scan all objects being carried */
for (this_o_idx = m_ptr->hold_o_idx; this_o_idx; this_o_idx = next_o_idx)
{
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
object_type *o_ptr;
o_ptr = &o_list[this_o_idx];
{
if (floor_num == 1)
{
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
object_type *o_ptr;
o_ptr = &o_list[floor_list[0]];
if (o_ptr->marked & OM_FOUND)
{
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
/* Not boring */
boring = FALSE;
char query;
char info[80];
char same_key;
-
cave_type *c_ptr;
-
TERM_LEN wid, hgt;
get_screen_size(&wid, &hgt);
/* Cancel target */
target_who = 0;
-
- /* Cancel tracking */
- /* health_track(0); */
-
if (rogue_like_commands)
{
same_key = 'x';
if(query)break;
}
- /* Cancel tracking */
- /* health_track(0); */
-
/* Assume no "direction" */
d = 0;
{
/* Recenter the map around the player */
verify_panel();
-
p_ptr->update |= (PU_MONSTERS);
-
p_ptr->redraw |= (PR_MAP);
-
p_ptr->window |= (PW_OVERHEAD);
handle_stuff();
/* Nothing interesting */
else
{
- int dx = ddx[d];
- int dy = ddy[d];
+ POSITION dx = ddx[d];
+ POSITION dy = ddy[d];
/* Restore previous position */
panel_row_min = y2;
panel_bounds_center();
p_ptr->update |= (PU_MONSTERS);
-
p_ptr->redraw |= (PR_MAP);
-
p_ptr->window |= (PW_OVERHEAD);
handle_stuff();
/* Describe and Prompt (enable "TARGET_LOOK") */
while ((query = target_set_aux(y, x, mode | TARGET_LOOK, info)) == 0);
- /* Cancel tracking */
- /* health_track(0); */
-
/* Assume no direction */
d = 0;
{
/* Recenter the map around the player */
verify_panel();
-
p_ptr->update |= (PU_MONSTERS);
-
p_ptr->redraw |= (PR_MAP);
-
p_ptr->window |= (PW_OVERHEAD);
handle_stuff();
/* Handle "direction" */
if (d)
{
- int dx = ddx[d];
- int dy = ddy[d];
+ POSITION dx = ddx[d];
+ POSITION dy = ddy[d];
/* XTRA HACK MOVEFAST */
if (move_fast)
/* Recenter the map around the player */
verify_panel();
-
p_ptr->update |= (PU_MONSTERS);
-
p_ptr->redraw |= (PR_MAP);
-
p_ptr->window |= (PW_OVERHEAD);
handle_stuff();
}
else
{
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
monster_type *m_ptr = &m_list[p_ptr->riding];
monster_desc(m_name, m_ptr, 0);
}
else
{
- char m_name[80];
+ GAME_TEXT m_name[MAX_NLEN];
monster_type *m_ptr = &m_list[p_ptr->riding];
monster_desc(m_name, m_ptr, 0);
OBJECT_SUBTYPE_VALUE dummy2 = 0;
int type, effect;
cptr reward = NULL;
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
int count = 0;
q_ptr->to_d = 3 + randint1(dun_level) % 10;
one_resistance(q_ptr);
q_ptr->name2 = EGO_CHAOTIC;
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);
reward = _("(混沌)の武器を手に入れた。", "chaos weapon");
break;
for (dummy = 0; dummy < randint1(5) + 1; dummy++)
{
- (void)summon_specific(0, p_ptr->y, p_ptr->x, 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), '\0');
}
reward = _("モンスターを召喚された。", "summoning hostile monsters");
break;
msg_print(_("「汝、謙虚たることを学ぶべし!」", "'Thou needst a lesson in humility, mortal!'"));
msg_print(_("あなたは以前より弱くなった!", "You feel less powerful!"));
- for (dummy = 0; dummy < 6; dummy++)
+ for (dummy = 0; dummy < A_MAX; dummy++)
{
(void)dec_stat(dummy, 10 + randint1(15), TRUE);
}
msg_print(_("「我がささやかなる賜物を受けとるがよい!」", "'Receive this modest gift from me!'"));
- for (dummy = 0; dummy < 6; dummy++)
+ for (dummy = 0; dummy < A_MAX; dummy++)
{
(void)do_inc_stat(dummy);
}
}
break;
default:
- for (dummy = 0; dummy < 6; dummy++)
+ for (dummy = 0; dummy < A_MAX; dummy++)
{
(void)dec_stat(dummy, 10 + randint1(15), TRUE);
}
msg_print(_("「死ぬがよい、下僕よ!」", "'Die, mortal!'"));
take_hit(DAMAGE_LOSELIFE, p_ptr->lev * 4, wrath_reason, -1);
- for (dummy = 0; dummy < 6; dummy++)
+ for (dummy = 0; dummy < A_MAX; dummy++)
{
(void)dec_stat(dummy, 10 + randint1(15), FALSE);
}
msg_format(_("%sは褒美として悪魔の使いをよこした!", "%s rewards you with a demonic servant!"),chaos_patrons[p_ptr->chaos_patron]);
- if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET))
+ if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET, '\0'))
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, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET))
+ if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET, '\0'))
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, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET))
+ if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET, '\0'))
msg_print(_("何も現れなかった...", "Nobody ever turns up..."));
else
reward = _("アンデッドがペットになった。", "an undead servant");
POSITION x, y;
bool success = FALSE;
- int wid, hgt;
+ TERM_LEN wid, hgt;
get_screen_size(&wid, &hgt);
}
-/*
- * エネルギーの増加量10d5を速く計算するための関数
- */
-
-#define Go_no_JuuJou 5*5*5*5*5*5*5*5*5*5
-
-s16b gain_energy(void)
-{
- int i;
- s32b energy_result = 10;
- s32b tmp;
-
- tmp = randint0(Go_no_JuuJou);
-
- for (i = 0; i < 9; i ++){
- energy_result += tmp % 5;
- tmp /= 5;
- }
-
- return (s16b)(energy_result + tmp);
-}
-
-
/*!
* @brief 射撃武器の攻撃に必要な基本消費エネルギーを返す/Return bow energy
* @param sval 射撃武器のアイテム副分類ID
return (tmul);
}
-/*
- * Return alignment title
- */
-cptr your_alignment(void)
-{
-#ifdef JP
- if (p_ptr->align > 150) return "大善";
- else if (p_ptr->align > 50) return "中善";
- else if (p_ptr->align > 10) return "小善";
- else if (p_ptr->align > -11) return "中立";
- else if (p_ptr->align > -51) return "小悪";
- else if (p_ptr->align > -151) return "中悪";
- else return "大悪";
-#else
- if (p_ptr->align > 150) return "Lawful";
- else if (p_ptr->align > 50) return "Good";
- else if (p_ptr->align > 10) return "Neutral Good";
- else if (p_ptr->align > -11) return "Neutral";
- else if (p_ptr->align > -51) return "Neutral Evil";
- else if (p_ptr->align > -151) return "Evil";
- else return "Chaotic";
-#endif
-}
-
-
-/*
- * Return proficiency level of weapons and misc. skills (except riding)
- */
-int weapon_exp_level(int weapon_exp)
-{
- if (weapon_exp < WEAPON_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED;
- else if (weapon_exp < WEAPON_EXP_SKILLED) return EXP_LEVEL_BEGINNER;
- else if (weapon_exp < WEAPON_EXP_EXPERT) return EXP_LEVEL_SKILLED;
- else if (weapon_exp < WEAPON_EXP_MASTER) return EXP_LEVEL_EXPERT;
- else return EXP_LEVEL_MASTER;
-}
-
-
-/*
- * Return proficiency level of riding
- */
-int riding_exp_level(int riding_exp)
-{
- if (riding_exp < RIDING_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED;
- else if (riding_exp < RIDING_EXP_SKILLED) return EXP_LEVEL_BEGINNER;
- else if (riding_exp < RIDING_EXP_EXPERT) return EXP_LEVEL_SKILLED;
- else if (riding_exp < RIDING_EXP_MASTER) return EXP_LEVEL_EXPERT;
- else return EXP_LEVEL_MASTER;
-}
-
-
-/*
- * Return proficiency level of spells
- */
-int spell_exp_level(int spell_exp)
-{
- if (spell_exp < SPELL_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED;
- else if (spell_exp < SPELL_EXP_SKILLED) return EXP_LEVEL_BEGINNER;
- else if (spell_exp < SPELL_EXP_EXPERT) return EXP_LEVEL_SKILLED;
- else if (spell_exp < SPELL_EXP_MASTER) return EXP_LEVEL_EXPERT;
- else return EXP_LEVEL_MASTER;
-}
-
/*
* Display a rumor and apply its effects