*/
#include "angband.h"
+#include "cmd-magiceat.h"
+#include "cmd-zapwand.h"
+#include "cmd-pet.h"
-/*!
- * @brief 対象のアイテムが矢やクロスボウの矢の材料になるかを返す。/
- * Hook to determine if an object is contertible in an arrow/bolt
- * @param o_ptr オブジェクトの構造体の参照ポインタ。
- * @return 材料にできるならTRUEを返す
- */
-static bool item_tester_hook_convertible(object_type *o_ptr)
-{
- if((o_ptr->tval==TV_JUNK) || (o_ptr->tval==TV_SKELETON)) return TRUE;
-
- if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;
- /* Assume not */
- return (FALSE);
-}
+#include "object-hook.h"
/*!
* @brief レイシャル「弾/矢の製造」処理 / do_cmd_cast calls this function if the player's class is 'archer'.
q_ptr = &forge;
/* Hack -- Give the player some small firestones */
- object_prep(q_ptr, lookup_kind(TV_SHOT, m_bonus(1, p_ptr->lev) + 1));
+ object_prep(q_ptr, lookup_kind(TV_SHOT, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev) + 1));
q_ptr->number = (byte)rand_range(15,30);
object_aware(q_ptr);
object_known(q_ptr);
/**********Create arrows*********/
else if (ext == 2)
{
- int item;
+ OBJECT_IDX item;
cptr q, s;
s16b slot;
q_ptr = &forge;
/* Hack -- Give the player some small firestones */
- object_prep(q_ptr, lookup_kind(TV_ARROW, m_bonus(1, p_ptr->lev)+ 1));
+ object_prep(q_ptr, lookup_kind(TV_ARROW, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev)+ 1));
q_ptr->number = (byte)rand_range(5, 10);
object_aware(q_ptr);
object_known(q_ptr);
/**********Create bolts*********/
else if (ext == 3)
{
- int item;
+ OBJECT_IDX item;
cptr q, s;
s16b slot;
q_ptr = &forge;
/* Hack -- Give the player some small firestones */
- object_prep(q_ptr, lookup_kind(TV_BOLT, m_bonus(1, p_ptr->lev)+1));
+ object_prep(q_ptr, lookup_kind(TV_BOLT, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev)+1));
q_ptr->number = (byte)rand_range(4, 8);
object_aware(q_ptr);
object_known(q_ptr);
*/
bool gain_magic(void)
{
- int item;
+ OBJECT_IDX item;
PARAMETER_VALUE pval;
int ext = 0;
cptr q, s;
if (o_ptr->tval == TV_ROD)
{
- p_ptr->magic_num2[o_ptr->sval + ext] += o_ptr->number;
+ p_ptr->magic_num2[o_ptr->sval + ext] += (MAGIC_NUM2)o_ptr->number;
if (p_ptr->magic_num2[o_ptr->sval + ext] > 99) p_ptr->magic_num2[o_ptr->sval + ext] = 99;
}
else
gain_num = (gain_num/3 + randint0(gain_num/3)) / 256;
if (gain_num < 1) gain_num = 1;
}
- p_ptr->magic_num2[o_ptr->sval + ext] += gain_num;
+ p_ptr->magic_num2[o_ptr->sval + ext] += (MAGIC_NUM2)gain_num;
if (p_ptr->magic_num2[o_ptr->sval + ext] > 99) p_ptr->magic_num2[o_ptr->sval + ext] = 99;
p_ptr->magic_num1[o_ptr->sval + ext] += pval * 0x10000;
if (p_ptr->magic_num1[o_ptr->sval + ext] > 99 * 0x10000) p_ptr->magic_num1[o_ptr->sval + ext] = 99 * 0x10000;
*/
struct power_desc_type
{
- char name[40];
+ char name[80];
PLAYER_LEVEL level;
int cost;
int stat;
if (command == -3)
{
if (!get_aim_dir(&dir)) return FALSE;
- (void)fire_ball_hide(GF_CONTROL_LIVING, dir, p_ptr->lev, 0);
+ (void)fire_ball_hide(GF_CHARM_LIVING, dir, p_ptr->lev, 0);
}
else if (command == -4)
{
- project_hack(GF_CONTROL_LIVING, p_ptr->lev);
+ project_hack(GF_CHARM_LIVING, p_ptr->lev);
}
break;
}
case CLASS_BARD:
{
/* Singing is already stopped */
- if (!p_ptr->magic_num1[0] && !p_ptr->magic_num1[1]) return FALSE;
+ if (!SINGING_SONG_EFFECT(p_ptr) && !INTERUPTING_SONG_EFFECT(p_ptr)) return FALSE;
stop_singing();
p_ptr->energy_use = 10;
msg_format("You breathe %s.",((type == GF_NETHER) ? "nether" : "fire"));
#endif
- fire_ball(type, dir, plev * 3, -(plev / 15) - 1);
+ fire_breath(type, dir, plev * 3, (plev / 15) + 1);
break;
}
case MIMIC_VAMPIRE:
msg_print(_("あなたはニヤリとして牙をむいた...", "You grin and bare your fangs..."));
dummy = plev + randint1(plev) * MAX(1, plev / 10); /* Dmg */
- if (drain_life(dir, dummy))
+ if (hypodynamic_bolt(dir, dummy))
{
if (p_ptr->food < PY_FOOD_FULL)
/* No heal if we are "full" */
case RACE_HALF_TROLL:
msg_print(_("うがぁぁ!", "RAAAGH!"));
- (void)set_afraid(0);
- (void)set_shero(10 + randint1(plev), FALSE);
- (void)hp_player(30);
+ (void)berserk(10 + randint1(plev));
break;
case RACE_AMBERITE:
{
msg_print(_("あなたは「パターン」を心に描いてその上を歩いた...", "You picture the Pattern in your mind and walk it..."));
- (void)set_poisoned(0);
- (void)set_image(0);
- (void)set_stun(0);
- (void)set_cut(0);
- (void)set_blind(0);
- (void)set_afraid(0);
- (void)do_res_stat(A_STR);
- (void)do_res_stat(A_INT);
- (void)do_res_stat(A_WIS);
- (void)do_res_stat(A_DEX);
- (void)do_res_stat(A_CON);
- (void)do_res_stat(A_CHR);
+ (void)true_healing(0);
+ (void)restore_all_status();
(void)restore_level();
}
break;
case RACE_BARBARIAN:
msg_print(_("うぉぉおお!", "Raaagh!"));
- (void)set_afraid(0);
- (void)set_shero(10 + randint1(plev), FALSE);
- (void)hp_player(30);
+ (void)berserk(10 + randint1(plev));
break;
case RACE_HALF_OGRE:
ratial_stop_mouth();
msg_format(_("あなたは%sのブレスを吐いた。", "You breathe %s."), Type_desc);
- fire_ball(Type, dir, plev * 2,
- -(plev / 15) - 1);
+ fire_breath(Type, dir, plev * 2, (plev / 15) + 1);
}
break;
msg_print(_("あなたはニヤリとして牙をむいた...", "You grin and bare your fangs..."));
dummy = plev + randint1(plev) * MAX(1, plev / 10); /* Dmg */
- if (drain_life(dir, dummy))
+ if (hypodynamic_bolt(dir, dummy))
{
if (p_ptr->food < PY_FOOD_FULL)
/* No heal if we are "full" */
msg_format("You breathe %s.",((type == GF_NETHER) ? "nether" : "fire"));
#endif
- fire_ball(type, dir, plev * 3, -(plev / 15) - 1);
+ fire_breath(type, dir, plev * 3, (plev / 15) + 1);
}
break;
power_desc[num++].number = -1;
break;
case MIMIC_VAMPIRE:
- strcpy(power_desc[num].name, _("生命力吸収", "Drain Life"));
+ strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
power_desc[num].level = 2;
power_desc[num].cost = 1 + (lvl / 3);
power_desc[num].stat = A_CON;
power_desc[num++].number = -1;
break;
case RACE_VAMPIRE:
- strcpy(power_desc[num].name, _("生命力吸収", "Drain Life"));
+ strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
power_desc[num].level = 2;
power_desc[num].cost = 1 + (lvl / 3);
power_desc[num].stat = A_CON;
if (p_ptr->muta1 & MUT1_VAMPIRISM)
{
- strcpy(power_desc[num].name, _("吸血ドレイン", "Vampiric Drain"));
+ strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
power_desc[num].level = 2;
power_desc[num].cost = (1 + (lvl / 3));
power_desc[num].stat = A_CON;
ask = (isupper(choice));
/* Lowercase */
- if (ask) choice = tolower(choice);
+ if (ask) choice = (char)tolower(choice);
/* Extract request */
i = (islower(choice) ? A2I(choice) : -1);