#include "angband.h"
+#include "cmd-pet.h"
+#include "object-curse.h"
+#include "monsterrace-hook.h"
+#include "objectkind-hook.h"
+#include "sort.h"
#define REWARD_CHANCE 10
bool level_mutation = FALSE;
bool level_inc_stat = FALSE;
bool android = (p_ptr->prace == RACE_ANDROID ? TRUE : FALSE);
- int old_lev = p_ptr->lev;
+ PLAYER_LEVEL old_lev = p_ptr->lev;
/* Hack -- lower limit */
if (p_ptr->exp < 0) p_ptr->exp = 0;
/* Redraw experience */
p_ptr->redraw |= (PR_EXP);
-
- /* Handle stuff */
handle_stuff();
{
/* Lose a level */
p_ptr->lev--;
-
- /* Update some stuff */
p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
-
- /* Redraw some stuff */
p_ptr->redraw |= (PR_LEV | PR_TITLE);
-
- /* Window stuff */
p_ptr->window |= (PW_PLAYER);
-
- /* Handle stuff */
handle_stuff();
}
do_cmd_write_nikki(NIKKI_LEVELUP, p_ptr->lev, NULL);
}
- /* Sound */
sound(SOUND_LEVEL);
- /* Message */
-#ifdef JP
-msg_format("レベル %d にようこそ。", p_ptr->lev);
-#else
- msg_format("Welcome to level %d.", p_ptr->lev);
-
-#endif
+ msg_format(_("レベル %d にようこそ。", "Welcome to level %d."), p_ptr->lev);
- /* Update some stuff */
p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
-
- /* Redraw some stuff */
p_ptr->redraw |= (PR_LEV | PR_TITLE | PR_EXP);
-
- /* Window stuff */
p_ptr->window |= (PW_PLAYER | PW_SPELL | PW_INVEN);
/* HPとMPの上昇量を表示 */
level_up = 1;
-
- /* Handle stuff */
handle_stuff();
level_up = 0;
int n;
char tmp[32];
-#ifdef JP
- cnv_stat(p_ptr->stat_max[0], tmp);
- prt(format(" a) 腕力 (現在値 %s)", tmp), 2, 14);
- cnv_stat(p_ptr->stat_max[1], tmp);
- prt(format(" b) 知能 (現在値 %s)", tmp), 3, 14);
- cnv_stat(p_ptr->stat_max[2], tmp);
- prt(format(" c) 賢さ (現在値 %s)", tmp), 4, 14);
- cnv_stat(p_ptr->stat_max[3], tmp);
- prt(format(" d) 器用 (現在値 %s)", tmp), 5, 14);
- cnv_stat(p_ptr->stat_max[4], tmp);
- prt(format(" e) 耐久 (現在値 %s)", tmp), 6, 14);
- cnv_stat(p_ptr->stat_max[5], tmp);
- prt(format(" f) 魅力 (現在値 %s)", tmp), 7, 14);
- prt("", 8, 14);
- prt(" どの能力値を上げますか?", 1, 14);
-#else
cnv_stat(p_ptr->stat_max[0], tmp);
- prt(format(" a) Str (cur %s)", tmp), 2, 14);
+ prt(format(_(" a) 腕力 (現在値 %s)", " a) Str (cur %s)"), tmp), 2, 14);
cnv_stat(p_ptr->stat_max[1], tmp);
- prt(format(" b) Int (cur %s)", tmp), 3, 14);
+ prt(format(_(" b) 知能 (現在値 %s)", " a) Int (cur %s)"), tmp), 3, 14);
cnv_stat(p_ptr->stat_max[2], tmp);
- prt(format(" c) Wis (cur %s)", tmp), 4, 14);
+ prt(format(_(" c) 賢さ (現在値 %s)", " a) Wis (cur %s)"), tmp), 4, 14);
cnv_stat(p_ptr->stat_max[3], tmp);
- prt(format(" d) Dex (cur %s)", tmp), 5, 14);
+ prt(format(_(" d) 器用 (現在値 %s)", " a) Dex (cur %s)"), tmp), 5, 14);
cnv_stat(p_ptr->stat_max[4], tmp);
- prt(format(" e) Con (cur %s)", tmp), 6, 14);
+ prt(format(_(" e) 耐久 (現在値 %s)", " a) Con (cur %s)"), tmp), 6, 14);
cnv_stat(p_ptr->stat_max[5], tmp);
- prt(format(" f) Chr (cur %s)", tmp), 7, 14);
+ prt(format(_(" f) 魅力 (現在値 %s)", " a) Chr (cur %s)"), tmp), 7, 14);
+
prt("", 8, 14);
- prt(" Which stat do you want to raise?", 1, 14);
-#endif
+ prt(_(" どの能力値を上げますか?", " Which stat do you want to raise?"), 1, 14);
+
while(1)
{
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;
level_reward = FALSE;
}
- /* Update some stuff */
p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
-
- /* Redraw some stuff */
p_ptr->redraw |= (PR_LEV | PR_TITLE);
-
- /* Window stuff */
p_ptr->window |= (PW_PLAYER | PW_SPELL);
-
- /* Handle stuff */
handle_stuff();
}
* @details
* Hack -- Return the "automatic coin type" of a monster race
* Used to allocate proper treasure when "Creeping coins" die
- * XXX XXX XXX Note the use of actual "monster names"
+ * 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)
}
-/*!
- * @brief オブジェクトがクロークかどうかを判定する /
- * Hack -- determine if a template is Cloak
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトがクロークならばTRUEを返す
- */
-static bool kind_is_cloak(KIND_OBJECT_IDX k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item type */
- if (k_ptr->tval == TV_CLOAK)
- {
- return (TRUE);
- }
-
- /* Assume not good */
- return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが竿状武器かどうかを判定する /
- * Hack -- determine if a template is Polearm
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが竿状武器ならばTRUEを返す
- */
-static bool kind_is_polearm(KIND_OBJECT_IDX k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item type */
- if (k_ptr->tval == TV_POLEARM)
- {
- return (TRUE);
- }
-
- /* Assume not good */
- return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが剣かどうかを判定する /
- * Hack -- determine if a template is Sword
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが剣ならばTRUEを返す
- */
-static bool kind_is_sword(KIND_OBJECT_IDX k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item type */
- if ((k_ptr->tval == TV_SWORD) && (k_ptr->sval > 2))
- {
- return (TRUE);
- }
-
- /* Assume not good */
- return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが魔法書かどうかを判定する /
- * Hack -- determine if a template is Book
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが魔法書ならばTRUEを返す
- */
-static bool kind_is_book(KIND_OBJECT_IDX k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item type */
- if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK))
- {
- return (TRUE);
- }
-
- /* Assume not good */
- return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトがベースアイテム時点でGOODかどうかを判定する /
- * Hack -- determine if a template is Good book
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトがベースアイテム時点でGOODなアイテムならばTRUEを返す
- */
-static bool kind_is_good_book(KIND_OBJECT_IDX k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item type */
- if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1))
- {
- return (TRUE);
- }
-
- /* Assume not good */
- return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが鎧かどうかを判定する /
- * Hack -- determine if a template is Armor
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが鎧ならばTRUEを返す
- */
-static bool kind_is_armor(KIND_OBJECT_IDX k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item type */
- if (k_ptr->tval == TV_HARD_ARMOR)
- {
- return (TRUE);
- }
-
- /* Assume not good */
- return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが打撃武器かどうかを判定する /
- * Hack -- determine if a template is hafted weapon
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが打撃武器ならばTRUEを返す
- */
-static bool kind_is_hafted(KIND_OBJECT_IDX k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item type */
- if (k_ptr->tval == TV_HAFTED)
- {
- return (TRUE);
- }
-
- /* Assume not good */
- return (FALSE);
-}
/*!
* @brief クエストを達成状態にする /
* @param quest_num 達成状態にしたいクエストのID
* @return なし
*/
-void complete_quest(int quest_num)
+void complete_quest(QUEST_IDX quest_num)
{
quest_type* const q_ptr = &quest[quest_num];
* @brief 現在フロアに残っている敵モンスターの数を返す /
* @return 現在の敵モンスターの数
*/
-static int count_all_hostile_monsters(void)
+static MONSTER_NUMBER count_all_hostile_monsters(void)
{
- int x, y;
- int number_mon = 0;
+ POSITION x, y;
+ MONSTER_NUMBER number_mon = 0;
for (x = 0; x < cur_wid; ++ x)
{
if (m_idx > 0 && is_hostile(&m_list[m_idx]))
{
- ++ number_mon;
+ ++number_mon;
}
}
}
void check_quest_completion(monster_type *m_ptr)
{
POSITION y, x;
-
- int quest_num;
+ QUEST_IDX quest_num;
bool create_stairs = FALSE;
bool reward = FALSE;
object_type forge;
object_type *o_ptr;
- /* Get the location */
y = m_ptr->fy;
x = m_ptr->fx;
/* Inside a quest */
- quest_num = p_ptr->inside_quest;
+ quest_num = p_ptr->inside_quest;
/* Search for an active quest on this dungeon level */
if (!quest_num)
{
- int i;
+ QUEST_IDX i;
- for (i = max_quests - 1; i > 0; i--)
+ for (i = max_q_idx - 1; i > 0; i--)
{
quest_type* const q_ptr = &quest[i];
for (i = 0; i < (dun_level / 15)+1; i++)
{
- /* Get local object */
o_ptr = &forge;
-
- /* Wipe the object */
object_wipe(o_ptr);
/* 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);
}
}
*/
void check_find_art_quest_completion(object_type *o_ptr)
{
- int i;
+ QUEST_IDX i;
/* Check if completed a quest */
- for (i = 0; i < max_quests; i++)
+ for (i = 0; i < max_q_idx; i++)
{
- if ((quest[i].type == QUEST_TYPE_FIND_ARTIFACT) &&
- (quest[i].status == QUEST_STATUS_TAKEN) &&
- (quest[i].k_idx == o_ptr->name1))
+ if((quest[i].type == QUEST_TYPE_FIND_ARTIFACT) &&
+ (quest[i].status == QUEST_STATUS_TAKEN) &&
+ (quest[i].k_idx == o_ptr->name1))
{
complete_quest(i);
}
* @param r_ptr 撃破されたモンスターの種族情報を持つ構造体の参照ポインタ
* @return 撃破されたモンスターの述語
*/
-cptr extract_note_dies(monster_race *r_ptr)
+concptr extract_note_dies(MONRACE_IDX r_idx)
{
+ monster_race *r_ptr = &r_info[r_idx];
/* Some monsters get "destroyed" */
- if (!monster_living(r_ptr))
+ if (!monster_living(r_idx))
{
int i;
*/
void monster_death(MONSTER_IDX m_idx, bool drop_item)
{
- int i, j, y, x;
+ int i, j;
+ POSITION y, x;
int dump_item = 0;
int dump_gold = 0;
-
int number = 0;
monster_type *m_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));
p_ptr->update |= (PU_MON_LITE);
}
- /* Get the location */
y = m_ptr->fy;
x = m_ptr->fx;
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);
if (r_ptr->blow[i].method == RBM_EXPLODE)
{
BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
- int typ = mbe_info[r_ptr->blow[i].effect].explode_type;
+ EFFECT_ID typ = mbe_info[r_ptr->blow[i].effect].explode_type;
DICE_NUMBER d_dice = r_ptr->blow[i].d_dice;
DICE_SID d_side = r_ptr->blow[i].d_side;
HIT_POINT damage = damroll(d_dice, d_side);
if (arena_info[p_ptr->arena_number].tval)
{
- /* Get local object */
q_ptr = &forge;
/* 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);
if (!one_in_(5)) corpse = TRUE;
}
}
-
- /* Get local object */
q_ptr = &forge;
/* Prepare to make an object */
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);
}
for (i = 0; i < 2; i++)
{
- int wy = y, wx = x;
+ POSITION wy = y, wx = x;
bool pet = is_pet(m_ptr);
BIT_FLAGS mode = 0L;
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;
+ if (player_can_see_bold(wy, wx)) notice = TRUE;
}
}
- if (notice)
- msg_print(_("ピンク・ホラーは分裂した!", "The Pink horror divides!"));
+ if (notice) msg_print(_("ピンク・ホラーは分裂した!", "The Pink horror divides!"));
}
break;
/* Bloodletters of Khorne may drop a blade of chaos */
if (drop_chosen_item && (randint1(100) < 15))
{
- /* Get local object */
q_ptr = &forge;
/* Prepare to make a Blade of Chaos */
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;
case MON_RAAL:
if (drop_chosen_item && (dun_level > 9))
{
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Activate restriction */
/* 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!"));
/* Reward for "lazy" player */
if (p_ptr->pseikaku == SEIKAKU_NAMAKE)
{
- int a_idx = 0;
+ ARTIFACT_IDX a_idx = 0;
artifact_type *a_ptr = NULL;
if (!drop_chosen_item) break;
case MON_SERPENT:
if (!drop_chosen_item) break;
-
- /* Get local object */
q_ptr = &forge;
/* Mega-Hack -- Prepare to make "Grond" */
/* 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);
-
- /* Get local object */
q_ptr = &forge;
/* Mega-Hack -- Prepare to make "Chaos" */
/* 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;
case MON_B_DEATH_SWORD:
if (drop_chosen_item)
{
- /* Get local object */
q_ptr = &forge;
/* 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;
if (drop_chosen_item && ((m_ptr->r_idx == MON_A_GOLD) ||
((m_ptr->r_idx == MON_A_SILVER) && (r_ptr->r_akills % 5 == 0))))
{
- /* Get local object */
q_ptr = &forge;
/* Prepare to make a Can of Toys */
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;
case '(':
if (dun_level > 0)
{
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Activate restriction */
/* Make a cloak */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
case '/':
if (dun_level > 4)
{
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Activate restriction */
/* Make a poleweapon */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
case '[':
if (dun_level > 19)
{
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Activate restriction */
/* Make a hard armor */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
case '\\':
if (dun_level > 4)
{
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Activate restriction */
/* Make a hafted weapon */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
case '|':
if (m_ptr->r_idx != MON_STORMBRINGER)
{
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Activate restriction */
/* Make a sword */
make_object(q_ptr, mo_mode);
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
break;
/* Mega-Hack -- drop fixed items */
if (drop_chosen_item)
{
- int a_idx = 0;
+ ARTIFACT_IDX a_idx = 0;
int chance = 0;
for(i = 0; i < 4; i++)
if ((r_ptr->flags7 & RF7_GUARDIAN) && (d_info[dungeon_type].final_guardian == m_ptr->r_idx))
{
- IDX k_idx = d_info[dungeon_type].final_object ? d_info[dungeon_type].final_object
+ KIND_OBJECT_IDX k_idx = d_info[dungeon_type].final_object ? d_info[dungeon_type].final_object
: lookup_kind(TV_SCROLL, SV_SCROLL_ACQUIREMENT);
if (d_info[dungeon_type].final_artifact)
if (k_idx)
{
- /* Get local object */
q_ptr = &forge;
/* Prepare to make a reward */
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);
/* Drop some objects */
for (j = 0; j < number; j++)
{
- /* Get local object */
q_ptr = &forge;
-
- /* Wipe the object */
object_wipe(q_ptr);
/* Make Gold */
/* Make some gold */
if (!make_gold(q_ptr)) continue;
- /* XXX XXX XXX */
dump_gold++;
}
/* Make an object */
if (!make_object(q_ptr, mo_mode)) continue;
- /* XXX XXX XXX */
dump_item++;
}
-
- /* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
}
/* Special penalty for rest_and_shoot exp scum */
- if ((m_ptr->dealt_damage > (u32b)m_ptr->max_maxhp) && (m_ptr->hp >= 0))
+ if ((m_ptr->dealt_damage > m_ptr->max_maxhp) && (m_ptr->hp >= 0))
{
int over_damage = m_ptr->dealt_damage / m_ptr->max_maxhp;
if (over_damage > 32) over_damage = 32;
* Made name, sex, and capitalization generic -BEN-
* As always, the "ghost" processing is a total hack.
* Hack -- we "delay" fear messages by passing around a "fear" flag.
- * XXX XXX XXX Consider decreasing monster experience over time, say,
+ * Consider decreasing monster experience over time, say,
* by using "(m_exp * m_lev * (m_lev)) / (p_lev * (m_lev + n_killed))"
* instead of simply "(m_exp * m_lev) / (p_lev)", to make the first
* monster worth more than subsequent monsters. This would also need
* to induce changes in the monster recall code.
* </pre>
*/
-bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
+bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note)
{
- monster_type *m_ptr = &m_list[m_idx];
- monster_race *r_ptr = &r_info[m_ptr->r_idx];
-
- monster_type exp_mon;
+ monster_type *m_ptr = &m_list[m_idx];
+ monster_race *r_ptr = &r_info[m_ptr->r_idx];
+ monster_type exp_mon;
/* Innocent until proven otherwise */
- bool innocent = TRUE, thief = FALSE;
- int i;
- int expdam;
- int dealt_damage;
+ bool innocent = TRUE, thief = FALSE;
+ int i;
+ HIT_POINT expdam;
(void)COPY(&exp_mon, m_ptr, monster_type);
if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
- /* Wake it up */
(void)set_monster_csleep(m_idx, 0);
/* Hack - Cancel any special player stealth magics. -LM- */
/* Genocided by chaos patron */
if (!m_idx) return TRUE;
- /* Remember dealt_damage before this attack*/
- dealt_damage = m_ptr->dealt_damage;
-
- /* Hurt it */
m_ptr->hp -= dam;
-
m_ptr->dealt_damage += dam;
- if(m_ptr->dealt_damage > (u32b)m_ptr->max_maxhp * 100) m_ptr->dealt_damage = m_ptr->max_maxhp * 100;
+
+ if(m_ptr->dealt_damage > m_ptr->max_maxhp * 100) m_ptr->dealt_damage = m_ptr->max_maxhp * 100;
+
if (p_ptr->wizard)
{
- msg_format( _("合計%d/%dのダメージを与えた。","You do %d (out of %d) damage."),
- m_ptr->dealt_damage, m_ptr->maxhp);
+ msg_format( _("合計%d/%dのダメージを与えた。","You do %d (out of %d) damage."), m_ptr->dealt_damage, m_ptr->maxhp);
}
/* 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)
{
if (r_ptr->flags2 & RF2_CAN_SPEAK)
{
char line_got[1024];
-
- /* Dump a message */
if (!get_rnd_line(_("mondeath_j.txt", "mondeath.txt"), m_ptr->r_idx, line_got))
-
+ {
msg_format("%^s %s", m_name, line_got);
+ }
#ifdef WORLD_SCORE
if (m_ptr->r_idx == MON_SERPENT)
{
- /* Make screen dump */
screen_dump = make_screen_dump();
}
#endif
chg_virtue(V_COMPASSION, -1);
}
- if ((r_ptr->flags3 & RF3_GOOD) &&
- ((r_ptr->level) / 10 + (3 * dun_level) >= randint1(100)))
+ if ((r_ptr->flags3 & RF3_GOOD) && ((r_ptr->level) / 10 + (3 * dun_level) >= randint1(100)))
chg_virtue(V_UNLIFE, 1);
if (r_ptr->d_char == 'A')
{
if (r_ptr->flags1 & RF1_UNIQUE)
chg_virtue(V_JUSTICE, 3);
- else if (1+((r_ptr->level) / 10 + (2 * dun_level))
- >= randint1(100))
+ else if (1+((r_ptr->level) / 10 + (2 * dun_level)) >= randint1(100))
chg_virtue(V_JUSTICE, 1);
}
else if (innocent)
if ((r_ptr->flags1 & RF1_UNIQUE) && record_destroy_uniq)
{
char note_buf[160];
-#ifdef JP
- sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? "(クローン)" : "");
-#else
- sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? "(Clone)" : "");
-#endif
+ sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? _("(クローン)", "(Clone)") : "");
do_cmd_write_nikki(NIKKI_UNIQUE, 0, note_buf);
}
}
/* Death by Physical attack -- non-living monster */
- else if (!monster_living(r_ptr))
+ else if (!monster_living(m_ptr->r_idx))
{
bool explode = FALSE;
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 destroyed %s.", m_name);
#endif
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 slain %s.", m_name);
#endif
monster_death(m_idx, TRUE);
/* Mega hack : replace IKETA to BIKETAL */
- if ((m_ptr->r_idx == MON_IKETA) &&
- !(p_ptr->inside_arena || p_ptr->inside_battle))
+ if ((m_ptr->r_idx == MON_IKETA) && !(p_ptr->inside_arena || p_ptr->inside_battle))
{
- int dummy_y = m_ptr->fy;
- int dummy_x = m_ptr->fx;
+ POSITION dummy_y = m_ptr->fy;
+ POSITION dummy_x = m_ptr->fx;
BIT_FLAGS mode = 0L;
-
if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
-
- /* Delete the monster */
delete_monster_idx(m_idx);
-
if (summon_named_creature(0, dummy_y, dummy_x, MON_BIKETAL, mode))
{
msg_print(_("「ハァッハッハッハ!!私がバイケタルだ!!」", "Uwa-hahaha! *I* am Biketal!"));
}
else
{
- /* Delete the monster */
delete_monster_idx(m_idx);
}
* Run (sometimes) if at 10% or less of max hit points,
* or (usually) when hit for half its current hit points
*/
- if ((randint1(10) >= percentage) ||
- ((dam >= m_ptr->hp) && (randint0(100) < 80)))
+ if ((randint1(10) >= percentage) || ((dam >= m_ptr->hp) && (randint0(100) < 80)))
{
/* Hack -- note fear */
(*fear) = TRUE;
- /* XXX XXX XXX Hack -- Add some timed fear */
+ /* Hack -- Add some timed fear */
(void)set_monster_monfear(m_idx, (randint1(10) +
(((dam >= m_ptr->hp) && (percentage > 7)) ?
20 : ((11 - percentage) * 5))));
#endif
-#if 0
- if (p_ptr->riding && (p_ptr->riding == m_idx) && (dam > 0))
- {
- char m_name[80];
-
- /* Extract monster name */
- monster_desc(m_name, m_ptr, 0);
-
- if (m_ptr->hp > m_ptr->maxhp/3) dam = (dam + 1) / 2;
- if (rakuba((dam > 200) ? 200 : dam, FALSE))
- {
- msg_format(_("%^sに振り落とされた!", "%^s has thrown you off!"), m_name);
- }
- }
-#endif
-
/* Not dead yet */
return (FALSE);
}
* @param hgt_p コンソールの表示行数を返す
* @return なし
*/
-void get_screen_size(int *wid_p, int *hgt_p)
+void get_screen_size(TERM_LEN *wid_p, TERM_LEN *hgt_p)
{
Term_get_size(wid_p, hgt_p);
*hgt_p -= ROW_MAP + 2;
*/
void panel_bounds_center(void)
{
- int wid, hgt;
+ TERM_LEN wid, hgt;
- /* Get size */
get_screen_size(&wid, &hgt);
panel_row_max = panel_row_min + hgt - 1;
verify_panel();
- /* Update stuff */
p_ptr->update |= (PU_TORCH | PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
-
- /* Forget lite/view */
p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
-
- /* Update lite/view */
p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
-
- /* Update monsters */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw everything */
p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY);
- /* Hack -- update */
handle_stuff();
-
- /* Redraw */
Term_redraw();
/*
*/
if (can_save) move_cursor_relative(p_ptr->y, p_ptr->x);
- /* Refresh */
Term_fresh();
}
/* Only if the dungeon exists */
if (!character_dungeon) return;
- /* Window stuff */
p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER);
-
- /* Window stuff */
p_ptr->window |= (PW_MESSAGE | PW_OVERHEAD | PW_DUNGEON | PW_MONSTER | PW_OBJECT);
- /* Hack -- update */
handle_stuff();
-
- /* Redraw */
Term_redraw();
}
* Also used in do_cmd_locate
* @return 実際に再描画が必要だった場合TRUEを返す
*/
-bool change_panel(int dy, int dx)
+bool change_panel(POSITION dy, POSITION dx)
{
- int y, x;
- int wid, hgt;
+ POSITION y, x;
+ TERM_LEN wid, hgt;
- /* Get size */
get_screen_size(&wid, &hgt);
/* Apply the motion */
/* Recalculate the boundaries */
panel_bounds_center();
- /* Update stuff */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Handle stuff */
handle_stuff();
/* Success */
* Also used in do_cmd_locate
* @return 実際に再描画が必要だった場合TRUEを返す
*/
-bool change_panel_xy(int y, int x)
+static bool change_panel_xy(POSITION y, POSITION x)
{
- int dy = 0, dx = 0;
- int wid, hgt;
+ POSITION dy = 0, dx = 0;
+ TERM_LEN wid, hgt;
- /* Get size */
get_screen_size(&wid, &hgt);
if (y < panel_row_min) dy = -1;
*/
void verify_panel(void)
{
- int y = p_ptr->y;
- int x = p_ptr->x;
- int wid, hgt;
+ POSITION y = p_ptr->y;
+ POSITION x = p_ptr->x;
+ TERM_LEN wid, hgt;
int prow_min;
int pcol_min;
int max_prow_min;
int max_pcol_min;
- /* Get size */
get_screen_size(&wid, &hgt);
max_prow_min = cur_hgt - hgt;
panel_col_min = pcol_min;
/* Hack -- optional disturb on "panel change" */
- if (disturb_panel && !center_player) disturb(0, 0);
+ if (disturb_panel && !center_player) disturb(FALSE, FALSE);
/* Recalculate the boundaries */
panel_bounds_center();
- /* Update stuff */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
}
/*
* Monster health description
*/
-cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
+concptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
{
monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
- bool living;
- int perc;
- cptr desc;
- cptr attitude;
- cptr clone;
+ bool living;
+ int perc;
+ concptr desc;
+ concptr attitude;
+ concptr clone;
/* Determine if the monster is "living" */
- living = monster_living(ap_r_ptr);
+ living = monster_living(m_ptr->ap_r_idx);
/* Calculate a health "percentage" */
- perc = 100L * m_ptr->hp / m_ptr->maxhp;
+ perc = m_ptr->maxhp > 0 ? 100L * m_ptr->hp / m_ptr->maxhp : 0;
/* Healthy monsters */
if (m_ptr->hp >= m_ptr->maxhp)
{
- /* No damage */
-#ifdef JP
- desc = living ? "無傷" : "無ダメージ";
-#else
- desc = living ? "unhurt" : "undamaged";
-#endif
-
+ desc = living ? _("無傷", "unhurt") : _("無ダメージ", "undamaged");
}
else if (perc >= 60)
{
-#ifdef JP
- desc = living ? "軽傷" : "小ダメージ";
-#else
- desc = living ? "somewhat wounded" : "somewhat damaged";
-#endif
-
+ desc = living ? _("軽傷", "somewhat wounded") : _("小ダメージ", "somewhat damaged");
}
else if (perc >= 25)
{
-#ifdef JP
- desc = living ? "負傷" : "中ダメージ";
-#else
- desc = living ? "wounded" : "damaged";
-#endif
-
+ desc = living ? _("負傷", "wounded") : _("中ダメージ", "damaged");
}
else if (perc >= 10)
{
-#ifdef JP
- desc = living ? "重傷" : "大ダメージ";
-#else
- desc = living ? "badly wounded" : "badly damaged";
-#endif
-
+ desc = living ? _("重傷", "badly wounded") : _("大ダメージ", "badly damaged");
}
else
{
-#ifdef JP
- desc = living ? "半死半生" : "倒れかけ";
-#else
- desc = living ? "almost dead" : "almost destroyed";
-#endif
+ desc = living ? _("半死半生", "almost dead") : _("倒れかけ", "almost destroyed");
}
-
/* Need attitude information? */
if (!(mode & 0x01))
{
attitude = _("", "");
}
-
/* Clone monster? */
if (m_ptr->smart & SM_CLONED)
{
{
return format(_("レベル???, %s%s%s", "Level ???, %s%s%s"), desc, attitude, clone);
}
-}
-
-
-
-/*
- * 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);
}
/* Monster must be projectable */
if (!projectable(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx)) return (FALSE);
- /* XXX XXX XXX Hack -- Never target trappers */
+ /* Hack -- Never target trappers */
/* if (CLEAR_ATTR && (CLEAR_CHAR)) return (FALSE); */
/* Assume okay */
/*
* Hack -- help "select" a location (see below)
*/
-static s16b target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx)
+static POSITION_IDX target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx)
{
- int i, v;
-
- int x2, y2, x3, y3, x4, y4;
-
- int b_i = -1, b_v = 9999;
+ POSITION_IDX i, v;
+ POSITION x2, y2, x3, y3, x4, y4;
+ POSITION_IDX b_i = -1, b_v = 9999;
/* Scan the locations */
/* Approximate Double Distance */
v = ((x4 > y4) ? (x4 + x4 + y4) : (y4 + y4 + x4));
- /* XXX XXX XXX Penalize location */
+ /* Penalize location */
/* Track best */
if ((b_i >= 0) && (v >= b_v)) continue;
/* Track best */
b_i = i; b_v = v;
}
-
- /* Result */
return (b_i);
}
/*
* Hack -- determine if a given location is "interesting"
*/
-static bool target_set_accept(int y, int x)
+static bool target_set_accept(POSITION y, POSITION x)
{
cave_type *c_ptr;
-
- s16b this_o_idx, next_o_idx = 0;
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
/* Bounds */
if (!(in_bounds(y, x))) return (FALSE);
/* Player grid is always interesting */
if (player_bold(y, x)) return (TRUE);
-
/* Handle hallucination */
if (p_ptr->image) return (FALSE);
-
/* Examine the grid */
c_ptr = &cave[y][x];
for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
{
object_type *o_ptr;
-
- /* Acquire object */
o_ptr = &o_list[this_o_idx];
/* Acquire next object */
if (have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_NOTICE)) return TRUE;
}
- /* Nope */
return (FALSE);
}
*
* Return the number of target_able monsters in the set.
*/
-static void target_set_prepare(int mode)
+static void target_set_prepare(BIT_FLAGS mode)
{
- int y, x;
- int min_hgt, max_hgt, min_wid, max_wid;
+ POSITION y, x;
+ POSITION min_hgt, max_hgt, min_wid, max_wid;
if (mode & TARGET_KILL)
{
* recall info and the health bar info to track that monster.
*
* Eventually, we may allow multiple objects per grid, or objects
- * and terrain features in the same grid. XXX XXX XXX
+ * and terrain features in the same grid.
*
* This function must handle blindness/hallucination.
*/
-static int target_set_aux(int y, int x, int mode, cptr info)
+static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, concptr info)
{
cave_type *c_ptr = &cave[y][x];
- s16b this_o_idx, next_o_idx = 0;
- cptr s1 = "", s2 = "", s3 = "", x_info = "";
+ OBJECT_IDX this_o_idx, next_o_idx = 0;
+ concptr s1 = "", s2 = "", s3 = "", x_info = "";
bool boring = TRUE;
- s16b feat;
+ FEAT_IDX feat;
feature_type *f_ptr;
- int query = '\001';
+ char query = '\001';
char out_val[MAX_NLEN+80];
-
-#ifdef ALLOW_EASY_FLOOR
- int floor_list[23], floor_num = 0;
+ OBJECT_IDX floor_list[23];
+ ITEM_NUMBER floor_num = 0;
/* Scan all objects in the grid */
if (easy_floor)
}
}
-#endif /* ALLOW_EASY_FLOOR */
-
/* Hack -- under the player */
if (player_bold(y, x))
{
- /* Description */
#ifdef JP
s1 = "あなたは";
s2 = "の上";
s3 = "にいる";
#else
s1 = "You are ";
-
- /* Preposition */
s2 = "on ";
#endif
}
/* Hack -- hallucination */
if (p_ptr->image)
{
- cptr name = _("何か奇妙な物", "something strange");
+ concptr name = _("何か奇妙な物", "something strange");
/* Display a message */
#ifdef JP
{
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);
-
- /* Hack -- handle stuff */
handle_stuff();
/* Interact */
/* 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;
-
- /* Acquire object */
o_ptr = &o_list[this_o_idx];
/* Acquire next object */
/* Obtain an object description */
object_desc(o_name, o_ptr, 0);
- /* Describe the object */
#ifdef JP
sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info);
#else
#endif
}
-
-#ifdef ALLOW_EASY_FLOOR
if (floor_num)
{
int min_width = 0;
{
if (floor_num == 1)
{
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
object_type *o_ptr;
-
- /* Acquire object */
o_ptr = &o_list[floor_list[0]];
- /* Describe the object */
object_desc(o_name, o_ptr, 0);
- /* Message */
#ifdef JP
- sprintf(out_val, "%s%s%s%s[%s]",
- s1, o_name, s2, s3, info);
+ sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info);
#else
- sprintf(out_val, "%s%s%s%s [%s]",
- s1, s2, s3, o_name, info);
+ sprintf(out_val, "%s%s%s%s [%s]", s1, s2, s3, o_name, info);
#endif
prt(out_val, 0, 0);
{
/* Display rough information about items */
#ifdef JP
- sprintf(out_val, "%s %d個のアイテム%s%s ['x'で一覧, %s]",
- s1, floor_num, s2, s3, info);
+ sprintf(out_val, "%s %d個のアイテム%s%s ['x'で一覧, %s]", s1, (int)floor_num, s2, s3, info);
#else
- sprintf(out_val, "%s%s%sa pile of %d items [x,%s]",
- s1, s2, s3, floor_num, info);
+ sprintf(out_val, "%s%s%sa pile of %d items [x,%s]", s1, s2, s3, (int)floor_num, info);
#endif
prt(out_val, 0, 0);
while (1)
{
int i;
- IDX o_idx;
-
- /* Save screen */
+ OBJECT_IDX o_idx;
screen_save();
/* Display */
/* Prompt */
#ifdef JP
- sprintf(out_val, "%s %d個のアイテム%s%s [Enterで次へ, %s]",
- s1, floor_num, s2, s3, info);
+ sprintf(out_val, "%s %d個のアイテム%s%s [Enterで次へ, %s]", s1, (int)floor_num, s2, s3, info);
#else
- sprintf(out_val, "%s%s%sa pile of %d items [Enter,%s]",
- s1, s2, s3, floor_num, info);
+ sprintf(out_val, "%s%s%sa pile of %d items [Enter,%s]", s1, s2, s3, (int)floor_num, info);
#endif
prt(out_val, 0, 0);
-
- /* Wait */
query = inkey();
-
- /* Load screen */
screen_load();
/* Exit unless 'Enter' */
/* NOTREACHED */
}
-#endif /* ALLOW_EASY_FLOOR */
-
/* Scan all objects in the grid */
for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
{
object_type *o_ptr;
-
- /* Acquire object */
o_ptr = &o_list[this_o_idx];
/* Acquire next object */
next_o_idx = o_ptr->next_o_idx;
- /* Describe it */
if (o_ptr->marked & OM_FOUND)
{
- char o_name[MAX_NLEN];
+ GAME_TEXT o_name[MAX_NLEN];
/* Not boring */
boring = FALSE;
/* Obtain an object description */
object_desc(o_name, o_ptr, 0);
- /* Describe the object */
#ifdef JP
sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info);
#else
/* Terrain feature if needed */
if (boring || have_flag(f_ptr->flags, FF_REMEMBER))
{
- cptr name;
+ concptr name;
/* Hack -- special handling for quest entrances */
if (have_flag(f_ptr->flags, FF_QUEST_ENTER))
(have_flag(f_ptr->flags, FF_BLDG) && !p_ptr->inside_arena) ||
have_flag(f_ptr->flags, FF_ENTRANCE))
{
-#ifdef JP
- s2 = "の入口";
-#else
- s3 = "";
-#endif
+ s2 = _("の入口", "");
}
#ifndef JP
else if (have_flag(f_ptr->flags, FF_FLOOR) ||
if (c_ptr->mimic) sprintf(f_idx_str, "%d/%d", c_ptr->feat, c_ptr->mimic);
else sprintf(f_idx_str, "%d", c_ptr->feat);
#ifdef JP
- sprintf(out_val, "%s%s%s%s[%s] %x %s %d %d %d (%d,%d) %d", s1, name, s2, s3, info, c_ptr->info, f_idx_str, c_ptr->dist, c_ptr->cost, c_ptr->when, y, x, travel.cost[y][x]);
+ sprintf(out_val, "%s%s%s%s[%s] %x %s %d %d %d (%d,%d) %d", s1, name, s2, s3, info, (unsigned int)c_ptr->info, f_idx_str, c_ptr->dist, c_ptr->cost, c_ptr->when, (int)y, (int)x, travel.cost[y][x]);
#else
- sprintf(out_val, "%s%s%s%s [%s] %x %s %d %d %d (%d,%d)", s1, s2, s3, name, info, c_ptr->info, f_idx_str, c_ptr->dist, c_ptr->cost, c_ptr->when, y, x);
+ sprintf(out_val, "%s%s%s%s [%s] %x %s %d %d %d (%d,%d)", s1, s2, s3, name, info, c_ptr->info, f_idx_str, c_ptr->dist, c_ptr->cost, c_ptr->when, (int)y, (int)x);
#endif
}
else
*
* All locations must be on the current panel. Consider the use of
* "panel_bounds()" to allow "off-panel" targets, perhaps by using
- * some form of "scrolling" the map around the cursor. XXX XXX XXX
+ * some form of "scrolling" the map around the cursor.
* That is, consider the possibility of "auto-scrolling" the screen
* while the cursor moves around. This may require changes in the
- * "update_mon()" code to allow "visibility" even if off panel, and
+ * "update_monster()" code to allow "visibility" even if off panel, and
* may require dynamic recalculation of the "temp" grid set.
*
* Hack -- targeting/observing an "outer border grid" may induce
* This command will cancel any old target, even if used from
* inside the "look" command.
*/
-bool target_set(int mode)
+bool target_set(BIT_FLAGS mode)
{
- int i, d, m, t, bd;
+ int i, d, m, t, bd;
POSITION y = p_ptr->y;
POSITION x = p_ptr->x;
- bool done = FALSE;
- bool flag = TRUE;
- char query;
- char info[80];
- char same_key;
-
- cave_type *c_ptr;
-
- int wid, hgt;
+ bool done = FALSE;
+ bool flag = TRUE;
+ char query;
+ char info[80];
+ char same_key;
+ cave_type *c_ptr;
+ TERM_LEN wid, hgt;
- /* Get size */
get_screen_size(&wid, &hgt);
/* Cancel target */
target_who = 0;
-
- /* Cancel tracking */
- /* health_track(0); */
-
if (rogue_like_commands)
{
same_key = 'x';
{
strcpy(info, _("q止 p自 o現 +次 -前", "q,p,o,+,-,<dir>"));
}
+
+ if (cheat_sight)
+ {
+ char cheatinfo[30];
+ sprintf(cheatinfo, " LOS:%d, PROJECTABLE:%d",
+ los(p_ptr->y, p_ptr->x, y, x), projectable(p_ptr->y, p_ptr->x, y, x));
+ strcat(info, cheatinfo);
+ }
/* Describe and Prompt */
while (TRUE){
if(query)break;
}
- /* Cancel tracking */
- /* health_track(0); */
-
/* Assume no "direction" */
d = 0;
{
/* Recenter the map around the player */
verify_panel();
-
- /* Update stuff */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD);
-
- /* Handle stuff */
handle_stuff();
/* Recalculate interesting grids */
if (d)
{
/* Modified to scroll to monster */
- int y2 = panel_row_min;
- int x2 = panel_col_min;
+ POSITION y2 = panel_row_min;
+ POSITION x2 = panel_col_min;
/* Find a new monster */
i = target_pick(temp_y[m], temp_x[m], ddy[d], ddx[d]);
/* 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_col_min = x2;
panel_bounds_center();
- /* Update stuff */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD);
-
- /* Handle stuff */
handle_stuff();
/* Recalculate interesting grids */
/* Default prompt */
strcpy(info, _("q止 t決 p自 m近 +次 -前", "q,t,p,m,+,-,<dir>"));
+ if (cheat_sight)
+ {
+ char cheatinfo[30];
+ sprintf(cheatinfo, " LOS:%d, PROJECTABLE:%d",
+ los(p_ptr->y, p_ptr->x, y, x),
+ projectable(p_ptr->y, p_ptr->x, y, x));
+ strcat(info, cheatinfo);
+ }
+
/* 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();
-
- /* Update stuff */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD);
-
- /* Handle stuff */
handle_stuff();
/* Recalculate interesting grids */
/* 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();
-
- /* Update stuff */
p_ptr->update |= (PU_MONSTERS);
-
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
-
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD);
-
- /* Handle stuff */
handle_stuff();
/* Failure to set target */
{
DIRECTION dir;
char command;
- cptr p;
+ concptr p;
+ COMMAND_CODE code;
- /* Initialize */
(*dp) = 0;
/* Global direction */
/* Hack -- auto-target if requested */
if (use_old_target && target_okay()) dir = 5;
-#ifdef ALLOW_REPEAT /* TNB */
-
- if (repeat_pull(dp))
+ if (repeat_pull(&code))
{
/* Confusion? */
/* Verify */
- if (!(*dp == 5 && !target_okay()))
+ if (!(code == 5 && !target_okay()))
{
/* return (TRUE); */
- dir = *dp;
+ dir = (DIRECTION)code;
}
}
-
-#endif /* ALLOW_REPEAT -- TNB */
+ *dp = (DIRECTION)code;
/* Ask until satisfied */
while (!dir)
/* Check for confusion */
if (p_ptr->confused)
{
- /* XXX XXX XXX */
/* Random direction */
dir = ddd[randint0(8)];
}
/* Save direction */
(*dp) = dir;
-#ifdef ALLOW_REPEAT /* TNB */
-
/* repeat_push(dir); */
- repeat_push(command_dir);
-
-#endif /* ALLOW_REPEAT -- TNB */
+ repeat_push((COMMAND_CODE)command_dir);
/* A "valid" direction was entered */
return (TRUE);
}
-
-/*
- * Request a "movement" direction (1,2,3,4,6,7,8,9) from the user,
- * and place it into "command_dir", unless we already have one.
- *
- * This function should be used for all "repeatable" commands, such as
- * run, walk, open, close, bash, disarm, spike, tunnel, etc, as well
- * as all commands which must reference a grid adjacent to the player,
- * and which may not reference the grid under the player. Note that,
- * for example, it is no longer possible to "disarm" or "open" chests
- * in the same grid as the player.
- *
- * Direction "5" is illegal and will (cleanly) abort the command.
- *
- * This function tracks and uses the "global direction", and uses
- * that as the "desired direction", to which "confusion" is applied.
- */
-bool get_rep_dir(DIRECTION *dp, bool under)
+bool get_direction(DIRECTION *dp, bool allow_under, bool with_steed)
{
DIRECTION dir;
- cptr prompt;
+ concptr prompt;
+ COMMAND_CODE code;
- /* Initialize */
(*dp) = 0;
/* Global direction */
dir = command_dir;
-#ifdef ALLOW_REPEAT /* TNB */
-
- if (repeat_pull(dp))
+ if (repeat_pull(&code))
{
- dir = *dp;
-/* return (TRUE); */
+ dir = (DIRECTION)code;
+ /* return (TRUE); */
}
+ *dp = (DIRECTION)code;
-#endif /* ALLOW_REPEAT -- TNB */
-
- if (under)
+ if (allow_under)
{
prompt = _("方向 ('.'足元, ESCで中断)? ", "Direction ('.' at feet, Escape to cancel)? ");
}
{
prompt = _("方向 (ESCで中断)? ", "Direction (Escape to cancel)? ");
}
-
+
/* Get a direction */
while (!dir)
{
if (!get_com(prompt, &ch, TRUE)) break;
/* Look down */
- if ((under) && ((ch == '5') || (ch == '-') || (ch == '.')))
+ if ((allow_under) && ((ch == '5') || (ch == '-') || (ch == '.')))
{
dir = 5;
}
/* Look up the direction */
dir = get_keymap_dir(ch);
- /* Oops */
if (!dir) bell();
}
}
/* Prevent weirdness */
- if ((dir == 5) && (!under)) dir = 0;
+ if ((dir == 5) && (!allow_under)) dir = 0;
/* Aborted */
if (!dir) return (FALSE);
dir = ddd[randint0(8)];
}
}
- else if (p_ptr->riding)
+ else if (p_ptr->riding && with_steed)
{
monster_type *m_ptr = &m_list[p_ptr->riding];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
}
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);
/* Save direction */
(*dp) = dir;
-#ifdef ALLOW_REPEAT /* TNB */
-
-/* repeat_push(dir); */
- repeat_push(command_dir);
-
-#endif /* ALLOW_REPEAT -- TNB */
+ /* repeat_push(dir); */
+ repeat_push((COMMAND_CODE)command_dir);
/* Success */
return (TRUE);
}
-
-bool get_rep_dir2(DIRECTION *dp)
+/*
+ * @brief 進行方向を指定する(騎乗対象の混乱の影響を受ける) / Request a "movement" direction (1,2,3,4,6,7,8,9) from the user,
+ * and place it into "command_dir", unless we already have one.
+ *
+ * This function should be used for all "repeatable" commands, such as
+ * run, walk, open, close, bash, disarm, spike, tunnel, etc, as well
+ * as all commands which must reference a grid adjacent to the player,
+ * and which may not reference the grid under the player. Note that,
+ * for example, it is no longer possible to "disarm" or "open" chests
+ * in the same grid as the player.
+ *
+ * Direction "5" is illegal and will (cleanly) abort the command.
+ *
+ * This function tracks and uses the "global direction", and uses
+ * that as the "desired direction", to which "confusion" is applied.
+ */
+bool get_rep_dir(DIRECTION *dp, bool under)
{
DIRECTION dir;
+ concptr prompt;
+ COMMAND_CODE code;
- /* Initialize */
(*dp) = 0;
/* Global direction */
dir = command_dir;
-#ifdef ALLOW_REPEAT /* TNB */
-
- if (repeat_pull(dp))
+ if (repeat_pull(&code))
{
- dir = *dp;
+ dir = (DIRECTION)code;
/* return (TRUE); */
}
+ *dp = (DIRECTION)code;
-#endif /* ALLOW_REPEAT -- TNB */
-
+ if (under)
+ {
+ prompt = _("方向 ('.'足元, ESCで中断)? ", "Direction ('.' at feet, Escape to cancel)? ");
+ }
+ else
+ {
+ prompt = _("方向 (ESCで中断)? ", "Direction (Escape to cancel)? ");
+ }
+
/* Get a direction */
while (!dir)
{
char ch;
/* Get a command (or Cancel) */
- if (!get_com(_("方向 (ESCで中断)? ", "Direction (Escape to cancel)? "), &ch, TRUE)) break;
+ if (!get_com(prompt, &ch, TRUE)) break;
- /* Look up the direction */
- dir = get_keymap_dir(ch);
+ /* Look down */
+ if ((under) && ((ch == '5') || (ch == '-') || (ch == '.')))
+ {
+ dir = 5;
+ }
+ else
+ {
+ /* Look up the direction */
+ dir = get_keymap_dir(ch);
- /* Oops */
- if (!dir) bell();
+ if (!dir) bell();
+ }
}
/* Prevent weirdness */
- if (dir == 5) dir = 0;
+ if ((dir == 5) && (!under)) dir = 0;
/* Aborted */
if (!dir) return (FALSE);
dir = ddd[randint0(8)];
}
}
+ else if (p_ptr->riding)
+ {
+ monster_type *m_ptr = &m_list[p_ptr->riding];
+ monster_race *r_ptr = &r_info[m_ptr->r_idx];
+
+ if (MON_CONFUSED(m_ptr))
+ {
+ /* Standard confusion */
+ if (randint0(100) < 75)
+ {
+ /* Random direction */
+ dir = ddd[randint0(8)];
+ }
+ }
+ else if ((r_ptr->flags1 & RF1_RAND_50) && (r_ptr->flags1 & RF1_RAND_25) && (randint0(100) < 50))
+ {
+ /* Random direction */
+ dir = ddd[randint0(8)];
+ }
+ else if ((r_ptr->flags1 & RF1_RAND_50) && (randint0(100) < 25))
+ {
+ /* Random direction */
+ dir = ddd[randint0(8)];
+ }
+ }
/* Notice confusion */
if (command_dir != dir)
{
- /* Warn the user */
- msg_print(_("あなたは混乱している。", "You are confused."));
+ if (p_ptr->confused)
+ {
+ /* Warn the user */
+ msg_print(_("あなたは混乱している。", "You are confused."));
+ }
+ else
+ {
+ GAME_TEXT m_name[MAX_NLEN];
+ monster_type *m_ptr = &m_list[p_ptr->riding];
+
+ monster_desc(m_name, m_ptr, 0);
+ if (MON_CONFUSED(m_ptr))
+ {
+ msg_format(_("%sは混乱している。", "%^s is confusing."), m_name);
+ }
+ else
+ {
+ msg_format(_("%sは思い通りに動いてくれない。", "You cannot control %s."), m_name);
+ }
+ }
}
/* Save direction */
(*dp) = dir;
-#ifdef ALLOW_REPEAT /* TNB */
-
/* repeat_push(dir); */
- repeat_push(command_dir);
-
-#endif /* ALLOW_REPEAT -- TNB */
+ repeat_push((COMMAND_CODE)command_dir);
/* Success */
return (TRUE);
OBJECT_TYPE_VALUE dummy = 0;
OBJECT_SUBTYPE_VALUE dummy2 = 0;
int type, effect;
- cptr reward = NULL;
- char o_name[MAX_NLEN];
+ concptr reward = NULL;
+ GAME_TEXT o_name[MAX_NLEN];
int count = 0;
type--;
-#ifdef JP
-sprintf(wrath_reason, "%sの怒り",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- sprintf(wrath_reason, "the Wrath of %s",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
-
+ sprintf(wrath_reason, _("%sの怒り", "the Wrath of %s"), chaos_patrons[p_ptr->chaos_patron]);
effect = chaos_rewards[p_ptr->chaos_patron][type];
if (one_in_(6) && !chosen_reward)
{
-#ifdef JP
-msg_format("%^sは褒美としてあなたを突然変異させた。",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("%^s rewards you with a mutation!",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
-
+ msg_format(_("%^sは褒美としてあなたを突然変異させた。", "%^s rewards you with a mutation!"), chaos_patrons[p_ptr->chaos_patron]);
(void)gain_random_mutation(0);
reward = _("変異した。", "mutation");
}
{
switch (chosen_reward ? chosen_reward : effect)
{
+
case REW_POLY_SLF:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「汝、新たなる姿を必要とせり!」", "'Thou needst a new form, mortal!'"));
do_poly_self();
reward = _("変異した。", "polymorphing");
break;
+
case REW_GAIN_EXP:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「汝は良く行いたり!続けよ!」", "'Well done, mortal! Lead on!'"));
if (p_ptr->prace == RACE_ANDROID)
reward = _("経験値を得た", "experience");
}
break;
+
case REW_LOSE_EXP:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「下僕よ、汝それに値せず。」", "'Thou didst not deserve that, slave.'"));
if (p_ptr->prace == RACE_ANDROID)
reward = _("経験値を失った。", "losing experience");
}
break;
+
case REW_GOOD_OBJ:
#ifdef JP
-msg_format("%sの声がささやいた:",
+ msg_format("%sの声がささやいた:",
chaos_patrons[p_ptr->chaos_patron]);
#else
msg_format("The voice of %s whispers:",
acquirement(p_ptr->y, p_ptr->x, 1, FALSE, FALSE, FALSE);
reward = _("上質なアイテムを手に入れた。", "a good item");
break;
+
case REW_GREA_OBJ:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'"));
acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE);
reward = _("高級品のアイテムを手に入れた。", "an excellent item");
break;
+
case REW_CHAOS_WP:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「汝の行いは貴き剣に値せり。」", "'Thy deed hath earned thee a worthy blade.'"));
-
- /* Get local object */
q_ptr = &forge;
dummy = TV_SWORD;
switch (randint1(p_ptr->lev))
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;
+
case REW_GOOD_OBS:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「汝の行いは貴き報いに値せり。」", "'Thy deed hath earned thee a worthy reward.'"));
acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, FALSE, FALSE, FALSE);
reward = _("上質なアイテムを手に入れた。", "good items");
break;
+
case REW_GREA_OBS:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「下僕よ、汝の献身への我が惜しみ無き報いを見るがよい。」", "'Behold, mortal, how generously I reward thy loyalty.'"));
acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE);
reward = _("高級品のアイテムを手に入れた。", "excellent items");
break;
+
case REW_TY_CURSE:
#ifdef JP
-msg_format("%sの声が轟き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
+ msg_format("%sの声が轟き渡った:", chaos_patrons[p_ptr->chaos_patron]);
#else
- msg_format("The voice of %s thunders:",
- chaos_patrons[p_ptr->chaos_patron]);
+ msg_format("The voice of %s thunders:", chaos_patrons[p_ptr->chaos_patron]);
#endif
msg_print(_("「下僕よ、汝傲慢なり。」", "'Thou art growing arrogant, mortal.'"));
(void)activate_ty_curse(FALSE, &count);
reward = _("禍々しい呪いをかけられた。", "cursing");
break;
+
case REW_SUMMON_M:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「我が下僕たちよ、かの傲慢なる者を倒すべし!」", "'My pets, destroy the arrogant mortal!'"));
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;
+
+
case REW_H_SUMMON:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「汝、より強き敵を必要とせり!」", "'Thou needst worthier opponents!'"));
activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
reward = _("モンスターを召喚された。", "summoning many hostile monsters");
break;
+
+
case REW_DO_HAVOC:
#ifdef JP
-msg_format("%sの声が響き渡った:",
+ msg_format("%sの声が響き渡った:",
chaos_patrons[p_ptr->chaos_patron]);
#else
msg_format("The voice of %s booms out:",
call_chaos();
reward = _("カオスの力が渦巻いた。", "calling chaos");
break;
+
+
case REW_GAIN_ABL:
#ifdef JP
-msg_format("%sの声が鳴り響いた:",
+ msg_format("%sの声が鳴り響いた:",
chaos_patrons[p_ptr->chaos_patron]);
#else
msg_format("The voice of %s rings out:",
do_inc_stat(randint0(6));
reward = _("能力値が上がった。", "increasing a stat");
break;
+
+
case REW_LOSE_ABL:
#ifdef JP
-msg_format("%sの声が響き渡った:",
+ msg_format("%sの声が響き渡った:",
chaos_patrons[p_ptr->chaos_patron]);
#else
msg_format("The voice of %s booms out:",
(void)do_dec_stat(randint0(6));
reward = _("能力値が下がった。", "decreasing a stat");
break;
+
+
case REW_RUIN_ABL:
+
#ifdef JP
-msg_format("%sの声が轟き渡った:",
+ msg_format("%sの声が轟き渡った:",
chaos_patrons[p_ptr->chaos_patron]);
#else
msg_format("The voice of %s thunders:",
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);
}
reward = _("全能力値が下がった。", "decreasing all stats");
break;
+
case REW_POLY_WND:
- msg_format(_("%sの力が触れるのを感じた。", "You feel the power of %s touch you."),
+ msg_format(_("%sの力が触れるのを感じた。", "You feel the power of %s touch you."),
chaos_patrons[p_ptr->chaos_patron]);
do_poly_wounds();
reward = _("傷が変化した。", "polymorphing wounds");
break;
+
case REW_AUGM_ABL:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
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);
}
reward = _("全能力値が上がった。", "increasing all stats");
break;
+
case REW_HURT_LOT:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「苦しむがよい、無能な愚か者よ!」", "'Suffer, pathetic fool!'"));
fire_ball(GF_DISINTEGRATE, 0, p_ptr->lev * 4, 4);
take_hit(DAMAGE_NOESCAPE, p_ptr->lev * 4, wrath_reason, -1);
reward = _("分解の球が発生した。", "generating disintegration ball");
break;
- case REW_HEAL_FUL:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
- msg_print(_("「甦るがよい、我が下僕よ!」", "'Rise, my servant!'"));
-
- restore_level();
- (void)set_poisoned(0);
- (void)set_blind(0);
- (void)set_confused(0);
- (void)set_image(0);
- (void)set_stun(0);
- (void)set_cut(0);
- hp_player(5000);
- for (dummy = 0; dummy < 6; dummy++)
- {
- (void)do_res_stat(dummy);
- }
+ case REW_HEAL_FUL:
+
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
+ (void)restore_level();
+ (void)restore_all_status();
+ (void)true_healing(5000);
reward = _("体力が回復した。", "healing");
break;
+
case REW_CURSE_WP:
- if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM)) break;
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM)) break;
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「汝、武器に頼ることなかれ。」", "'Thou reliest too much on thy weapon.'"));
dummy = INVEN_RARM;
(void)curse_weapon(FALSE, dummy);
reward = format(_("%sが破壊された。", "destroying %s"), o_name);
break;
+
case REW_CURSE_AR:
- if (!inventory[INVEN_BODY].k_idx) break;
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ if (!inventory[INVEN_BODY].k_idx) break;
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「汝、防具に頼ることなかれ。」", "'Thou reliest too much on thine equipment.'"));
object_desc(o_name, &inventory[INVEN_BODY], OD_NAME_ONLY);
reward = format(_("%sが破壊された。", "destroying %s"), o_name);
break;
case REW_PISS_OFF:
-#ifdef JP
-msg_format("%sの声がささやいた:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s whispers:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声がささやいた:", "The voice of %s whispers:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「我を怒りしめた罪を償うべし。」", "'Now thou shalt pay for annoying me.'"));
switch (randint1(4))
}
break;
default:
- for (dummy = 0; dummy < 6; dummy++)
+ for (dummy = 0; dummy < A_MAX; dummy++)
{
(void)dec_stat(dummy, 10 + randint1(15), TRUE);
}
break;
}
break;
+
case REW_WRATH:
- msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"),
- chaos_patrons[p_ptr->chaos_patron]);
+ msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]);
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);
}
}
if (one_in_(2)) (void)curse_armor();
break;
+
case REW_DESTRUCT:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'"));
(void)destroy_area(p_ptr->y, p_ptr->x, 25, FALSE);
reward = _("ダンジョンが*破壊*された。", "*destruct*ing dungeon");
break;
+
case REW_GENOCIDE:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'"));
-
(void)symbol_genocide(0, FALSE);
reward = _("モンスターが抹殺された。", "genociding monsters");
break;
+
case REW_MASS_GEN:
-#ifdef JP
-msg_format("%sの声が響き渡った:",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("The voice of %s booms out:",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'"));
(void)mass_genocide(0, FALSE);
reward = _("モンスターが抹殺された。", "genociding nearby monsters");
break;
+
case REW_DISPEL_C:
-#ifdef JP
-msg_format("%sの力が敵を攻撃するのを感じた!",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("You can feel the power of %s assault your enemies!",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sの力が敵を攻撃するのを感じた!", "You can feel the power of %s assault your enemies!"), chaos_patrons[p_ptr->chaos_patron]);
(void)dispel_monsters(p_ptr->lev * 4);
break;
+
case REW_IGNORE:
-#ifdef JP
-msg_format("%sはあなたを無視した。",
- chaos_patrons[p_ptr->chaos_patron]);
-#else
- msg_format("%s ignores you.",
- chaos_patrons[p_ptr->chaos_patron]);
-#endif
+ msg_format(_("%sはあなたを無視した。", "%s ignores you."), chaos_patrons[p_ptr->chaos_patron]);
break;
+
case REW_SER_DEMO:
+
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");
break;
+
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");
break;
+
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");
break;
+
default:
msg_format(_("%sの声がどもった:", "The voice of %s stammers:"),
if (cave_have_flag_grid(c_ptr, FF_QUEST_EXIT)) return (TRUE);
}
- /* Nope */
return (FALSE);
}
POSITION x, y;
bool success = FALSE;
- int wid, hgt;
+ TERM_LEN wid, hgt;
- /* Get size */
get_screen_size(&wid, &hgt);
x = p_ptr->x;
x = p_ptr->x;
verify_panel(); /* Move cursor to player */
- /* Update stuff */
p_ptr->update |= (PU_MONSTERS);
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD);
-
- /* Handle stuff */
handle_stuff();
}
else /* move cursor to next stair and change panel */
/* Recenter the map around the player */
verify_panel();
- /* Update stuff */
p_ptr->update |= (PU_MONSTERS);
- /* Redraw map */
p_ptr->redraw |= (PR_MAP);
- /* Window stuff */
p_ptr->window |= (PW_OVERHEAD);
-
- /* Handle stuff */
handle_stuff();
*x_ptr = x;
bool get_hack_dir(DIRECTION *dp)
{
DIRECTION dir;
- cptr p;
+ concptr p;
char command;
- /* Initialize */
(*dp) = 0;
/* Global direction */
/* Check for confusion */
if (p_ptr->confused)
{
- /* XXX XXX XXX */
/* Random direction */
dir = ddd[randint0(8)];
}
}
-/*
- * エネルギーの増加量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);
-}
-
-
-/*
- * Return bow energy
+/*!
+ * @brief 射撃武器の攻撃に必要な基本消費エネルギーを返す/Return bow energy
+ * @param sval 射撃武器のアイテム副分類ID
+ * @return 消費する基本エネルギー
*/
-s16b bow_energy(OBJECT_SUBTYPE_VALUE sval)
+ENERGY bow_energy(OBJECT_SUBTYPE_VALUE sval)
{
- int energy = 100;
+ ENERGY energy = 10000;
/* Analyze the launcher */
switch (sval)
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
return (IDX)atoi(zz);
}
-cptr rumor_bind_name(char *base, cptr fullname)
+concptr rumor_bind_name(char *base, concptr fullname)
{
char *s, *v;
void display_rumor(bool ex)
{
- bool err;
+ errr err;
int section = 0;
char Rumor[1024];
if (strncmp(Rumor, "R:", 2) == 0)
{
char *zz[4];
- cptr rumor_msg = NULL;
- cptr rumor_eff_format = NULL;
+ concptr rumor_msg = NULL;
+ concptr rumor_eff_format = NULL;
char fullname[1024] = "";
if (tokenize(Rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) == 3)
r_ptr->r_sights++;
}
}
- else if (strcmp(zz[0], "DUNGEON") == 0)
+ else if (strcmp(zz[0], "DUNGEON") == 0)
{
- int d_idx;
+ DUNGEON_IDX d_idx;
dungeon_info_type *d_ptr;
while (1)