*/
#include "angband.h"
+#include "core.h"
+#include "util.h"
+#include "term.h"
+
+#include "player-status.h"
+#include "cmd-basic.h"
+#include "snipe.h"
+#include "monsterrace.h"
+#include "view-mainwindow.h"
#define MAX_SNIPE_POWERS 16
/*! スナイパー技能情報の構造体 */
struct snipe_power
{
- int min_lev;
- int mana_cost;
+ PLAYER_LEVEL min_lev;
+ MANA_POINT mana_cost;
concptr name;
};
if ((int)p_ptr->concent < (2 + (p_ptr->lev + 5) / 10)) p_ptr->concent++;
msg_format(_("集中した。(集中度 %d)", "You concentrate deeply. (lvl %d)"), p_ptr->concent);
- reset_concent = FALSE;
+ p_ptr->reset_concent = FALSE;
p_ptr->update |= (PU_BONUS | PU_MONSTERS);
p_ptr->redraw |= (PR_STATUS);
}
p_ptr->concent = 0;
- reset_concent = FALSE;
+ p_ptr->reset_concent = FALSE;
p_ptr->update |= (PU_BONUS | PU_MONSTERS);
p_ptr->redraw |= (PR_STATUS);
*/
void display_snipe_list(void)
{
- int i;
- int y = 1;
- int x = 1;
+ int i;
+ TERM_LEN y = 1;
+ TERM_LEN x = 1;
PLAYER_LEVEL plev = p_ptr->lev;
snipe_power spell;
char psi_desc[80];
/* Display a list of spells */
prt("", y, x);
-#ifdef JP
- put_str("名前", y, x + 5);
- put_str("Lv MP", y, x + 35);
-#else
- put_str("Name", y, x + 5);
- put_str("Lv Mana", y, x + 35);
-#endif
+ put_str(_("名前", "Name"), y, x + 5);
+ put_str(_("Lv MP", "Lv Mana"), y, x + 35);
- /* Dump the spells */
for (i = 0; i < MAX_SNIPE_POWERS; i++)
{
/* Access the available spell */
if (spell.min_lev > plev) continue;
if (spell.mana_cost > (int)p_ptr->concent) continue;
- /* Dump the spell */
sprintf(psi_desc, " %c) %-30s%2d %4d",
I2A(i), spell.name, spell.min_lev, spell.mana_cost);
{
COMMAND_CODE i;
int num = 0;
- int y = 1;
- int x = 20;
+ TERM_LEN y = 1;
+ TERM_LEN x = 20;
PLAYER_LEVEL plev = p_ptr->lev;
int ask;
char choice;
p, I2A(0), I2A(num), p);
}
- /* Get a spell from the user */
choice = always_show_list ? ESCAPE : 1;
while (!flag)
{
if (!redraw)
{
char psi_desc[80];
-
- /* Show list */
redraw = TRUE;
if (!only_browse) screen_save();
/* Display a list of spells */
prt("", y, x);
-#ifdef JP
- put_str("名前", y, x + 5);
- if (only_browse) put_str("Lv 集中度", y, x + 35);
-#else
- put_str("Name", y, x + 5);
- if (only_browse) put_str("Lv Pow", y, x + 35);
-#endif
+ put_str(_("名前", "Name"), y, x + 5);
+ if (only_browse) put_str(_("Lv 集中度", "Lv Pow"), y, x + 35);
/* Dump the spells */
for (i = 0; i < MAX_SNIPE_POWERS; i++)
* @param m_ptr 目標となるモンスターの構造体参照ポインタ
* @return スレイの倍率(/10倍)
*/
-int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
+MULTIPLY tot_dam_aux_snipe(MULTIPLY mult, monster_type *m_ptr, SPELL_IDX snipe_type)
{
monster_race *r_ptr = &r_info[m_ptr->r_idx];
bool seen = is_seen(m_ptr);
case SP_LITE:
if (r_ptr->flags3 & (RF3_HURT_LITE))
{
- int n = 20 + p_ptr->concent;
+ MULTIPLY n = 20 + p_ptr->concent;
if (seen) r_ptr->r_flags3 |= (RF3_HURT_LITE);
if (mult < n) mult = n;
}
}
else
{
- int n = 15 + (p_ptr->concent * 3);
+ MULTIPLY n = 15 + (p_ptr->concent * 3);
if (mult < n) mult = n;
}
break;
}
else
{
- int n = 15 + (p_ptr->concent * 3);
+ MULTIPLY n = 15 + (p_ptr->concent * 3);
if (mult < n) mult = n;
}
break;
}
else
{
- int n = 18 + (p_ptr->concent * 4);
+ MULTIPLY n = 18 + (p_ptr->concent * 4);
if (mult < n) mult = n;
}
break;
case SP_KILL_WALL:
if (r_ptr->flags3 & RF3_HURT_ROCK)
{
- int n = 15 + (p_ptr->concent * 2);
+ MULTIPLY n = 15 + (p_ptr->concent * 2);
if (seen) r_ptr->r_flags3 |= RF3_HURT_ROCK;
if (mult < n) mult = n;
}
else if (r_ptr->flags3 & RF3_NONLIVING)
{
- int n = 15 + (p_ptr->concent * 2);
+ MULTIPLY n = 15 + (p_ptr->concent * 2);
if (seen) r_ptr->r_flags3 |= RF3_NONLIVING;
if (mult < n) mult = n;
}
case SP_EVILNESS:
if (r_ptr->flags3 & RF3_GOOD)
{
- int n = 15 + (p_ptr->concent * 4);
+ MULTIPLY n = 15 + (p_ptr->concent * 4);
if (seen) r_ptr->r_flags3 |= RF3_GOOD;
if (mult < n) mult = n;
}
case SP_HOLYNESS:
if (r_ptr->flags3 & RF3_EVIL)
{
- int n = 12 + (p_ptr->concent * 3);
+ MULTIPLY n = 12 + (p_ptr->concent * 3);
if (seen) r_ptr->r_flags3 |= RF3_EVIL;
if (r_ptr->flags3 & (RF3_HURT_LITE))
{
*/
static bool cast_sniper_spell(int spell)
{
- object_type *o_ptr = &inventory[INVEN_BOW];
+ object_type *o_ptr = &p_ptr->inventory_list[INVEN_BOW];
+ SPELL_IDX snipe_type = SP_NONE;
if (o_ptr->tval != TV_BOW)
{
{
case 0: /* Concentration */
if (!snipe_concentrate()) return (FALSE);
- p_ptr->energy_use = 100;
+ take_turn(p_ptr, 100);
return (TRUE);
case 1: snipe_type = SP_LITE; break;
case 2: snipe_type = SP_AWAY; break;
}
command_cmd = 'f';
- do_cmd_fire();
- snipe_type = 0;
+ do_cmd_fire(snipe_type);
- return (is_fired);
+ return (p_ptr->is_fired);
}
/*!
void do_cmd_snipe(void)
{
COMMAND_CODE n = 0;
- bool cast;
+ bool cast;
+ if(cmd_limit_confused(p_ptr)) return;
+ if(cmd_limit_image(p_ptr)) return;
+ if(cmd_limit_stun(p_ptr)) return;
- /* not if confused */
- if (p_ptr->confused)
- {
- msg_print(_("混乱していて集中できない!", "You are too confused!"));
- return;
- }
-
- /* not if hullucinated */
- if (p_ptr->image)
- {
- msg_print(_("幻覚が見えて集中できない!", "You are too hallucinated!"));
- return;
- }
-
- /* not if stuned */
- if (p_ptr->stun)
- {
- msg_print(_("頭が朦朧としていて集中できない!", "You are too stuned!"));
- return;
- }
-
- /* get power */
if (!get_snipe_power(&n, FALSE)) return;
sound(SOUND_SHOOT);
-
- /* Cast the spell */
cast = cast_sniper_spell(n);
if (!cast) return;
p_ptr->redraw |= (PR_HP | PR_MANA);
-
p_ptr->window |= (PW_PLAYER);
p_ptr->window |= (PW_SPELL);
}
while(1)
{
- /* get power */
if (!get_snipe_power(&n, TRUE))
{
screen_load();