int vn = 0;
byte color[96];
cptr vp[96];
- char shoot_power[96];
+ char tmp_msg[96][96];
bool know_everything = FALSE;
/* Collect inate attacks */
vn = 0;
if (flags4 & RF4_SHRIEK) { vp[vn] = _("ÈáÌĤǽõ¤±¤òµá¤á¤ë", "shriek for help"); color[vn++] = TERM_L_WHITE; }
- if (flags4 & RF4_ROCKET) { vp[vn] = _("¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë", "shoot a rocket"); color[vn++] = TERM_UMBER; }
+ if (flags4 & RF4_ROCKET)
+ {
+ int dam = monspell_race_damage(monspell_num(RF4_SPELL_START, RF4_ROCKET), r_idx, DAM_MAX);
+ sprintf(tmp_msg[vn], _("¥í¥±¥Ã¥È(%d)¤òȯ¼Í¤¹¤ë", "shoot a rocket(%d)"), dam);
+ vp[vn] = tmp_msg[vn];
+ color[vn++] = TERM_UMBER;
+ }
+
if (flags4 & RF4_SHOOT)
{
for (r = 0, m = 0; m < 4; m++)
{
if (r_ptr->blow[m].method == RBM_SHOOT)
{
- sprintf(shoot_power, _("°ÒÎÏ %dd%d ¤Î¼Í·â¤ò¤¹¤ë","fire an arrow (Power:%dd%d)"), r_ptr->blow[m].d_side, r_ptr->blow[m].d_dice);
- vp[vn] = shoot_power; color[vn++] = TERM_UMBER;
+ sprintf(tmp_msg[vn], _("°ÒÎÏ %dd%d ¤Î¼Í·â¤ò¤¹¤ë","fire an arrow (Power:%dd%d)"), r_ptr->blow[m].d_side, r_ptr->blow[m].d_dice);
+ vp[vn] = tmp_msg[vn]; color[vn++] = TERM_UMBER;
break;
}
}
/*!
* @brief ¥â¥ó¥¹¥¿¡¼¤Î»È¤¦¼öʸ¤Î°ÒÎϤòÊÖ¤¹ /
-* @param m_idx ¼öʸ¤ò¾§¤¨¤ë¥â¥ó¥¹¥¿¡¼ID
+* @param SPELL_NUM ¼öʸÈÖ¹æ
+* @param hp ¼öʸ¤ò¾§¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ÎÂÎÎÏ
+* @param rlev ¼öʸ¤ò¾§¤¨¤ë¥â¥ó¥¹¥¿¡¼¤Î¥ì¥Ù¥ë
+* @param powerful ¼öʸ¤ò¾§¤¨¤ë¥â¥ó¥¹¥¿¡¼¤Îpowerful¥Õ¥é¥°
+* @param r_ptr ¼öʸ¤ò¾§¤¨¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²¥Ý¥¤¥ó¥¿
* @param TYPE DAM_MAX¤ÇºÇÂçÃͤòÊÖ¤·¡¢DAM_MIN¤ÇºÇ¾®ÃͤòÊÖ¤¹¡£DAM_ROLL¤Ï¥À¥¤¥¹¤ò¿¶¤Ã¤ÆÃͤò·èÄꤹ¤ë¡£
* @return ¹¶·â¼öʸ¤Î¥À¥á¡¼¥¸¤òÊÖ¤¹¡£¹¶·â¼öʸ°Ê³°¤Ï-1¤òÊÖ¤¹¡£
*/
-int monspell_damage(int SPELL_NUM, int m_idx, int TYPE)
+int monspell_damage_base(int SPELL_NUM, int hp, int rlev, bool powerful, monster_race* r_ptr, int TYPE)
{
- monster_type *m_ptr = &m_list[m_idx];
- monster_race *r_ptr = &r_info[m_ptr->r_idx];
- int hp, dam = 0, dice_num = 0, dice_side = 0, mult = 1, div = 1;
- int rlev = monster_level_idx(m_idx);
-
- if (TYPE == DAM_MAX)
- {
- hp = m_ptr->max_maxhp;
- }
- else if (TYPE == DAM_ROLL)
- {
- hp = m_ptr->hp;
- }
+ int dam = 0, dice_num = 0, dice_side = 0, mult = 1, div = 1;
switch (SPELL_NUM)
{
/* RF4_BA_NUKE */
case RF4_SPELL_START + 28:
- mult = monster_is_powerful(m_idx) ? 2 : 1;
+ mult = powerful ? 2 : 1;
dam = rlev * (mult / div);
dice_num = 10;
dice_side = 6;
/* RF4_BA_CHAO */
case RF4_SPELL_START + 30:
- dam = (monster_is_powerful(m_idx) ? (rlev * 3) : (rlev * 2));
+ dam = (powerful ? (rlev * 3) : (rlev * 2));
dice_num = 10;
dice_side = 10;
break;
/* RF5_BA_ACID */
case RF5_SPELL_START + 0:
- if (monster_is_powerful(m_idx))
+ if (powerful)
{
dam = (rlev * 4) + 50;
dice_num = 10;
/* RF5_BA_ELEC */
case RF5_SPELL_START + 1:
- if (monster_is_powerful(m_idx))
+ if (powerful)
{
dam = (rlev * 4) + 50;
dice_num = 10;
/* RF5_BA_FIRE */
case RF5_SPELL_START + 2:
- if (monster_is_powerful(m_idx))
+ if (powerful)
{
dam = (rlev * 4) + 50;
dice_num = 10;
/* RF5_BA_COLD */
case RF5_SPELL_START + 3:
- if (monster_is_powerful(m_idx))
+ if (powerful)
{
dam = (rlev * 4) + 50;
dice_num = 10;
/* RF5_BA_POIS */
case RF5_SPELL_START + 4:
- mult = monster_is_powerful(m_idx) ? 2 : 1;
+ mult = powerful ? 2 : 1;
dice_num = 12;
dice_side = 2;
break;
/* RF5_BA_NETH */
case RF5_SPELL_START + 5:
- dam = 50 + (rlev * (monster_is_powerful(m_idx) ? 2 : 1));
+ dam = 50 + (rlev * powerful ? 2 : 1);
dice_num = 10;
dice_side = 10;
break;
case RF5_SPELL_START + 6:
dam = 50;
dice_num = 1;
- dice_side = (monster_is_powerful(m_idx) ? (rlev * 3) : (rlev * 2));
+ dice_side = powerful ? (rlev * 3) : (rlev * 2);
break;
/* RF5_BA_MANA */
/* RF5_BO_ACID */
case RF5_SPELL_START + 16:
- mult = monster_is_powerful(m_idx) ? 2 : 1;
+ mult = powerful ? 2 : 1;
dam = rlev / 3 * (mult / div);
dice_num = 7;
dice_side = 8;
/* RF5_BO_ELEC */
case RF5_SPELL_START + 17:
- mult = monster_is_powerful(m_idx) ? 2 : 1;
+ mult = powerful ? 2 : 1;
dam = rlev / 3 * (mult / div);
dice_num = 4;
dice_side = 8;
/* RF5_BO_FIRE */
case RF5_SPELL_START + 18:
- mult = monster_is_powerful(m_idx) ? 2 : 1;
+ mult = powerful ? 2 : 1;
dam = rlev / 3 * (mult / div);
dice_num = 9;
dice_side = 8;
/* RF5_BO_COLD */
case RF5_SPELL_START + 19:
- mult = monster_is_powerful(m_idx) ? 2 : 1;
+ mult = powerful ? 2 : 1;
dam = rlev / 3 * (mult / div);
dice_num = 6;
dice_side = 8;
/* RF5_BO_NETH */
case RF5_SPELL_START + 21:
- dam = 30 + (rlev * 4) / (monster_is_powerful(m_idx) ? 2 : 3);
+ dam = 30 + (rlev * 4) / (powerful ? 2 : 3);
dice_num = 5;
dice_side = 5;
break;
/* RF5_BO_WATE */
case RF5_SPELL_START + 22:
- dam = (rlev * 3 / (monster_is_powerful(m_idx) ? 2 : 3));
+ dam = (rlev * 3 / (powerful ? 2 : 3));
dice_num = 10;
dice_side = 10;
break;
/* RF5_BO_PLAS */
case RF5_SPELL_START + 24:
- dam = 10 + (rlev * 3 / (monster_is_powerful(m_idx) ? 2 : 3));
+ dam = 10 + (rlev * 3 / (powerful ? 2 : 3));
dice_num = 8;
dice_side = 7;
break;
/* RF5_BO_ICEE */
case RF5_SPELL_START + 25:
- dam = (rlev * 3 / (monster_is_powerful(m_idx) ? 2 : 3));
+ dam = (rlev * 3 / (powerful ? 2 : 3));
dice_num = 6;
dice_side = 6;
break;
/* RF6_PSY_SPEAR */
case RF6_SPELL_START + 11:
- dam = monster_is_powerful(m_idx) ? 150 : 100;
+ dam = powerful ? 150 : 100;
dice_num = 1;
- dice_side = monster_is_powerful(m_idx) ? (rlev * 2) : (rlev * 3 / 2);
+ dice_side = powerful ? (rlev * 2) : (rlev * 3 / 2);
break;
case RF6_SPELL_START + 12: return -1; /* RF6_DARKNESS */
return dam;
}
+
+
+/*!
+* @brief ¥â¥ó¥¹¥¿¡¼¤Î»È¤¦¼öʸ¤Î°ÒÎϤòÊÖ¤¹ /
+* @param SPELL_NUM ¼öʸÈÖ¹æ
+* @param m_idx ¼öʸ¤ò¾§¤¨¤ë¥â¥ó¥¹¥¿¡¼ID
+* @param TYPE DAM_MAX¤ÇºÇÂçÃͤòÊÖ¤·¡¢DAM_MIN¤ÇºÇ¾®ÃͤòÊÖ¤¹¡£DAM_ROLL¤Ï¥À¥¤¥¹¤ò¿¶¤Ã¤ÆÃͤò·èÄꤹ¤ë¡£
+* @return ¹¶·â¼öʸ¤Î¥À¥á¡¼¥¸¤òÊÖ¤¹¡£¹¶·â¼öʸ°Ê³°¤Ï-1¤òÊÖ¤¹¡£
+*/
+int monspell_damage(int SPELL_NUM, int m_idx, int TYPE)
+{
+ monster_type *m_ptr = &m_list[m_idx];
+ monster_race *r_ptr = &r_info[m_ptr->r_idx];
+ int hp;
+ int rlev = monster_level_idx(m_idx);
+
+ if (TYPE == DAM_MAX)
+ {
+ hp = m_ptr->max_maxhp;
+ }
+ else if (TYPE == DAM_ROLL)
+ {
+ hp = m_ptr->hp;
+ }
+ return monspell_damage_base(SPELL_NUM, hp, rlev, monster_is_powerful(m_idx), r_ptr, TYPE);
+}
+
+/*!
+* @brief ¥â¥ó¥¹¥¿¡¼¤Î»È¤¦¼öʸ¤Î°ÒÎϤòÊÖ¤¹ /
+* @param SPELL_NUM ¼öʸÈÖ¹æ
+* @param r_idx ¼öʸ¤ò¾§¤¨¤ë¥â¥ó¥¹¥¿¡¼¤Î¼ï²ID
+* @param TYPE DAM_MAX¤ÇºÇÂçÃͤòÊÖ¤·¡¢DAM_MIN¤ÇºÇ¾®ÃͤòÊÖ¤¹¡£DAM_ROLL¤Ï¥À¥¤¥¹¤ò¿¶¤Ã¤ÆÃͤò·èÄꤹ¤ë¡£
+* @return ¹¶·â¼öʸ¤Î¥À¥á¡¼¥¸¤òÊÖ¤¹¡£¹¶·â¼öʸ°Ê³°¤Ï-1¤òÊÖ¤¹¡£
+*/
+int monspell_race_damage(int SPELL_NUM, int r_idx, int TYPE)
+{
+ monster_race *r_ptr = &r_info[r_idx];
+ int rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
+ bool powerful = r_ptr->flags2 & RF2_POWERFUL;
+ u32b hp = r_ptr->hdice * (ironman_nightmare ? 2 : 1) * r_ptr->hside;
+
+ return monspell_damage_base(SPELL_NUM, MIN(30000, hp), rlev, powerful, r_ptr, TYPE);
+}
\ No newline at end of file