#include "targeting.h"
#include "view-mainwindow.h"
-#define pseudo_plev() (((p_ptr->lev + 40) * (p_ptr->lev + 40) - 1550) / 130) /*!< モンスター魔法をプレイヤーが使用する場合の換算レベル */
+ /*!
+ * @brief モンスター魔法をプレイヤーが使用する場合の換算レベル
+ * @param caster_ptr プレーヤーへの参照ポインタ
+ * @param 換算レベル
+ */
+PLAYER_LEVEL get_pseudo_monstetr_level(player_type *caster_ptr)
+{
+ PLAYER_LEVEL monster_level = caster_ptr->lev + 40;
+ return (monster_level * monster_level - 1550) / 130;
+}
/*!
};
+
/*!
* @brief モンスター魔法名テーブル
*/
};
-
/*!
* @brief 文字列に青魔導師の呪文の攻撃力を加える
* @param SPELL_NUM 呪文番号
sprintf(tmp, " %s %s", msg, dmg_str);
}
+
/*!
* @brief 受け取ったモンスター魔法のIDに応じて青魔法の効果情報をまとめたフォーマットを返す
+ * @param learner_ptr プレーヤーへの参照ポインタ
* @param p 情報を返す文字列参照ポインタ
* @param power モンスター魔法のID
* @return なし
*/
-static void learned_info(char *p, int power)
+static void learned_info(player_type *learner_ptr, char *p, int power)
{
- PLAYER_LEVEL plev = pseudo_plev();
+ PLAYER_LEVEL plev = get_pseudo_monstetr_level(learner_ptr);
strcpy(p, "");
TERM_LEN y = 1;
TERM_LEN x = 18;
PERCENTAGE minfail = 0;
- PLAYER_LEVEL plev = p_ptr->lev;
+ PLAYER_LEVEL plev = caster_ptr->lev;
PERCENTAGE chance = 0;
int ask = TRUE, mode = 0;
int spellnum[MAX_MONSPELLS];
if (repeat_pull(&code))
{
*sn = (SPELL_IDX)code;
- return (TRUE);
+ return TRUE;
}
if (use_menu)
}
for (i = 0; i < num; i++)
{
- if (p_ptr->magic_num2[spellnum[i]])
+ if (caster_ptr->magic_num2[spellnum[i]])
{
if (use_menu) menu_line = i+1;
break;
if (i == num)
{
msg_print(_("その種類の魔法は覚えていない!", "You don't know any spell of this type."));
- return (FALSE);
+ return FALSE;
}
/* Build a prompt (accept all spells) */
case '0':
{
screen_load();
- return (FALSE);
+ return FALSE;
}
case '8':
{
menu_line += (num-1);
if (menu_line > num) menu_line -= num;
- } while(!p_ptr->magic_num2[spellnum[menu_line-1]]);
+ } while(!caster_ptr->magic_num2[spellnum[menu_line-1]]);
break;
}
{
menu_line++;
if (menu_line > num) menu_line -= num;
- } while(!p_ptr->magic_num2[spellnum[menu_line-1]]);
+ } while(!caster_ptr->magic_num2[spellnum[menu_line-1]]);
break;
}
case 'L':
{
menu_line=num;
- while(!p_ptr->magic_num2[spellnum[menu_line-1]]) menu_line--;
+ while(!caster_ptr->magic_num2[spellnum[menu_line-1]]) menu_line--;
break;
}
case 'H':
{
menu_line=1;
- while(!p_ptr->magic_num2[spellnum[menu_line-1]]) menu_line++;
+ while(!caster_ptr->magic_num2[spellnum[menu_line-1]]) menu_line++;
break;
}
int need_mana;
prt("", y + i + 1, x);
- if (!p_ptr->magic_num2[spellnum[i]]) continue;
+ if (!caster_ptr->magic_num2[spellnum[i]]) continue;
/* Access the spell */
spell = monster_powers[spellnum[i]];
else chance += (spell.level - plev);
/* Reduce failure rate by INT/WIS adjustment */
- chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[A_INT]] - 1);
+ chance -= 3 * (adj_mag_stat[caster_ptr->stat_ind[A_INT]] - 1);
- chance = mod_spell_chance_1(p_ptr, chance);
+ chance = mod_spell_chance_1(caster_ptr, chance);
need_mana = mod_need_mana(caster_ptr, monster_powers[spellnum[i]].smana, 0, REALM_NONE);
/* Not enough mana to cast */
- if (need_mana > p_ptr->csp)
+ if (need_mana > caster_ptr->csp)
{
- chance += 5 * (need_mana - p_ptr->csp);
+ chance += 5 * (need_mana - caster_ptr->csp);
}
/* Extract the minimum failure rate */
- minfail = adj_mag_fail[p_ptr->stat_ind[A_INT]];
+ minfail = adj_mag_fail[caster_ptr->stat_ind[A_INT]];
/* Minimum failure rate */
if (chance < minfail) chance = minfail;
/* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
+ if (caster_ptr->stun > 50) chance += 25;
+ else if (caster_ptr->stun) chance += 15;
/* Always a 5 percent chance of working */
if (chance > 95) chance = 95;
- chance = mod_spell_chance_2(p_ptr, chance);
+ chance = mod_spell_chance_2(caster_ptr, chance);
/* Get info */
- learned_info(comment, spellnum[i]);
+ learned_info(caster_ptr, comment, spellnum[i]);
if (use_menu)
{
}
/* Totally Illegal */
- if ((i < 0) || (i >= num) || !p_ptr->magic_num2[spellnum[i]])
+ if ((i < 0) || (i >= num) || !caster_ptr->magic_num2[spellnum[i]])
{
bell();
continue;
/* Stop the loop */
flag = TRUE;
}
+
if (redraw) screen_load();
- p_ptr->window |= (PW_SPELL);
- handle_stuff();
+ caster_ptr->window |= (PW_SPELL);
+ handle_stuff(caster_ptr);
/* Abort if needed */
- if (!flag) return (FALSE);
+ if (!flag) return FALSE;
/* Save the choice */
(*sn) = spellnum[i];
repeat_push((COMMAND_CODE)spellnum[i]);
/* Success */
- return (TRUE);
+ return TRUE;
}
static bool cast_learned_spell(player_type *caster_ptr, int spell, bool success)
{
DIRECTION dir;
- PLAYER_LEVEL plev = pseudo_plev();
+ PLAYER_LEVEL plev = get_pseudo_monstetr_level(caster_ptr);
PLAYER_LEVEL summon_lev = caster_ptr->lev * 2 / 3 + randint1(caster_ptr->lev/2);
HIT_POINT damage = 0;
bool pet = success;
{
MONSTER_IDX m_idx;
- if (!target_set(TARGET_KILL)) return FALSE;
+ if (!target_set(caster_ptr, TARGET_KILL)) return FALSE;
m_idx = floor_ptr->grid_array[target_row][target_col].m_idx;
if (!m_idx) break;
if (!player_has_los_bold(caster_ptr, target_row, target_col)) break;
if (!get_aim_dir(&dir)) return FALSE;
msg_print(_("恐ろしげな幻覚を作り出した。", "You cast a fearful illusion."));
- fear_monster(dir, plev+10);
+ fear_monster(caster_ptr, dir, plev+10);
break;
case MS_BLIND:
if (!get_aim_dir(&dir)) return FALSE;
- confuse_monster(dir, plev * 2);
+ confuse_monster(caster_ptr, dir, plev * 2);
break;
case MS_CONF:
if (!get_aim_dir(&dir)) return FALSE;
msg_print(_("誘惑的な幻覚をつくり出した。", "You cast a mesmerizing illusion."));
- confuse_monster(dir, plev * 2);
+ confuse_monster(caster_ptr, dir, plev * 2);
break;
case MS_SLOW:
if (!get_aim_dir(&dir)) return FALSE;
- slow_monster(dir, plev);
+ slow_monster(caster_ptr, dir, plev);
break;
case MS_SLEEP:
if (!get_aim_dir(&dir)) return FALSE;
- sleep_monster(dir, plev);
+ sleep_monster(caster_ptr, dir, plev);
break;
case MS_SPEED:
(void)set_fast(caster_ptr, randint1(20 + plev) + plev, FALSE);
monster_race *r_ptr;
GAME_TEXT m_name[MAX_NLEN];
- if (!target_set(TARGET_KILL)) return FALSE;
+ if (!target_set(caster_ptr, TARGET_KILL)) return FALSE;
if (!floor_ptr->grid_array[target_row][target_col].m_idx) break;
if (!player_has_los_bold(caster_ptr, target_row, target_col)) break;
if (!projectable(floor_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col)) break;
(void)unlite_area(caster_ptr, 10, 3);
break;
case MS_MAKE_TRAP:
- if (!target_set(TARGET_KILL)) return FALSE;
+ if (!target_set(caster_ptr, TARGET_KILL)) return FALSE;
msg_print(_("呪文を唱えて邪悪に微笑んだ。", "You cast a spell and cackle evilly."));
trap_creation(caster_ptr, target_row, target_col);
return TRUE;
}
+
/*!
* @brief 青魔法コマンドのメインルーチン /
* do_cmd_cast calls this function if the player's class is 'Blue-Mage'.
return TRUE;
}
+
/*!
* @brief 青魔法のラーニング判定と成功した場合のラーニング処理
* @param monspell ラーニングを試みるモンスター攻撃のID
*f6 = RF6_ATTACK_MASK & ~(RF6_BOLT_MASK | RF6_BEAM_MASK | RF6_BALL_MASK | RF6_INDIRECT_MASK);
break;
}
-
- return;
}