* @param dam 固定値
* @return フォーマットに従い整形された文字列
*/
-concptr info_multi_damage(HIT_POINT dam)
+concptr info_multi_damage(int dam)
{
return format(_("損傷:各%d", "dam %d each"), dam);
}
* @param use_realm 魔法領域ID
* @return 失敗率(%)
*/
-static bool spell_okay(player_type *player_ptr, int spell, bool learned, bool study_pray, int use_realm)
+static bool spell_okay(PlayerType *player_ptr, int spell, bool learned, bool study_pray, int use_realm)
{
const magic_type *s_ptr;
return false;
}
- if (player_ptr->pclass == PlayerClassType::SORCERER)
- return true;
- if (player_ptr->pclass == PlayerClassType::RED_MAGE)
+ if (PlayerClass(player_ptr).is_every_magic()) {
return true;
+ }
/* Spell is learned */
if ((use_realm == player_ptr->realm2) ? (player_ptr->spell_learned2 & (1UL << spell)) : (player_ptr->spell_learned1 & (1UL << spell))) {
/* Always true */
- return (!study_pray);
+ return !study_pray;
}
/* Okay to study, not to cast */
- return (!learned);
+ return !learned;
}
/*!
* The "known" should be TRUE for cast/pray, FALSE for study
* </pre>
*/
-static int get_spell(player_type *player_ptr, SPELL_IDX *sn, concptr prompt, OBJECT_SUBTYPE_VALUE sval, bool learned, int16_t use_realm)
+static int get_spell(PlayerType *player_ptr, SPELL_IDX *sn, concptr prompt, OBJECT_SUBTYPE_VALUE sval, bool learned, int16_t use_realm)
{
int i;
SPELL_IDX spell = -1;
/* No "okay" spells */
if (!okay)
return false;
- if (((use_realm) != player_ptr->realm1) && ((use_realm) != player_ptr->realm2) && (player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE))
+
+ PlayerClass pc(player_ptr);
+ auto is_every_magic = pc.is_every_magic();
+ if (((use_realm) != player_ptr->realm1) && ((use_realm) != player_ptr->realm2) && !is_every_magic)
return false;
- if (((player_ptr->pclass == PlayerClassType::SORCERER) || (player_ptr->pclass == PlayerClassType::RED_MAGE)) && !is_magic(use_realm))
+ if (is_every_magic && !is_magic(use_realm))
return false;
- if ((player_ptr->pclass == PlayerClassType::RED_MAGE) && ((use_realm) != REALM_ARCANE) && (sval > 1))
+ if (pc.equals(PlayerClassType::RED_MAGE) && ((use_realm) != REALM_ARCANE) && (sval > 1))
return false;
/* Assume cancelled */
* @param browse_only 魔法と技能の閲覧を行うならばTRUE
* @return 魔道書を一冊も持っていないならTRUEを返す
*/
-static void confirm_use_force(player_type *player_ptr, bool browse_only)
+static void confirm_use_force(PlayerType *player_ptr, bool browse_only)
{
char which;
COMMAND_CODE code;
}
}
-static FuncItemTester get_castable_spellbook_tester(player_type *player_ptr)
+static FuncItemTester get_castable_spellbook_tester(PlayerType *player_ptr)
{
return FuncItemTester([](auto p_ptr, auto o_ptr) { return check_book_realm(p_ptr, o_ptr->tval, o_ptr->sval); }, player_ptr);
}
-static FuncItemTester get_learnable_spellbook_tester(player_type *player_ptr)
+static FuncItemTester get_learnable_spellbook_tester(PlayerType *player_ptr)
{
if (player_ptr->realm2 == REALM_NONE) {
return get_castable_spellbook_tester(player_ptr);
* and in the dark, primarily to allow browsing in stores.
* </pre>
*/
-void do_cmd_browse(player_type *player_ptr)
+void do_cmd_browse(PlayerType *player_ptr)
{
OBJECT_IDX item;
OBJECT_SUBTYPE_VALUE sval;
SPELL_IDX spells[64];
char temp[62 * 4];
- object_type *o_ptr;
+ ObjectType *o_ptr;
concptr q, s;
/* Warriors are illiterate */
- if (!(player_ptr->realm1 || player_ptr->realm2) && (player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE)) {
+ PlayerClass pc(player_ptr);
+ if (!(player_ptr->realm1 || player_ptr->realm2) && !pc.is_every_magic()) {
msg_print(_("本を読むことができない!", "You cannot read books!"));
return;
}
- PlayerClass(player_ptr).break_samurai_stance({ SamuraiStance::MUSOU });
+ pc.break_samurai_stance({ SamuraiStanceType::MUSOU });
- if (player_ptr->pclass == PlayerClassType::FORCETRAINER) {
+ if (pc.equals(PlayerClassType::FORCETRAINER)) {
if (player_has_no_spellbooks(player_ptr)) {
confirm_use_force(player_ptr, true);
return;
q = _("どの本を読みますか? ", "Browse which book? ");
s = _("読める本がない。", "You have no books that you can read.");
- o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | (player_ptr->pclass == PlayerClassType::FORCETRAINER ? USE_FORCE : 0)), item_tester);
+ o_ptr = choose_object(player_ptr, &item, q, s, USE_INVEN | USE_FLOOR | (pc.equals(PlayerClassType::FORCETRAINER) ? USE_FORCE : 0), item_tester);
if (!o_ptr) {
if (item == INVEN_FORCE) /* the_force */
* @param player_ptr プレイヤーへの参照ポインタ
* @param next_realm 変更先の魔法領域ID
*/
-static void change_realm2(player_type *player_ptr, int16_t next_realm)
+static void change_realm2(PlayerType *player_ptr, int16_t next_realm)
{
int i, j = 0;
char tmp[80];
* @brief 魔法を学習するコマンドのメインルーチン /
* Study a book to gain a new spell/prayer
*/
-void do_cmd_study(player_type *player_ptr)
+void do_cmd_study(PlayerType *player_ptr)
{
int i;
OBJECT_IDX item;
/* Spells of realm2 will have an increment of +32 */
SPELL_IDX spell = -1;
concptr p = spell_category_name(mp_ptr->spell_book);
- object_type *o_ptr;
+ ObjectType *o_ptr;
concptr q, s;
if (!player_ptr->realm1) {
return;
}
- PlayerClass(player_ptr).break_samurai_stance({ SamuraiStance::MUSOU });
+ PlayerClass(player_ptr).break_samurai_stance({ SamuraiStanceType::MUSOU });
#ifdef JP
if (player_ptr->new_spells < 10) {
* @param player_ptr プレイヤーへの参照ポインタ
* @return 詠唱したらtrue
*/
-bool do_cmd_cast(player_type *player_ptr)
+bool do_cmd_cast(PlayerType *player_ptr)
{
OBJECT_IDX item;
OBJECT_SUBTYPE_VALUE sval;
MANA_POINT need_mana;
concptr prayer;
- object_type *o_ptr;
+ ObjectType *o_ptr;
const magic_type *s_ptr;
concptr q, s;
bool over_exerted = false;
/* Require spell ability */
- if (!player_ptr->realm1 && (player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE)) {
+ PlayerClass pc(player_ptr);
+ auto is_every_magic = pc.is_every_magic();
+ if (!player_ptr->realm1 && !is_every_magic) {
msg_print(_("呪文を唱えられない!", "You cannot cast spells!"));
return false;
}
if (player_ptr->blind || no_lite(player_ptr)) {
- if (player_ptr->pclass == PlayerClassType::FORCETRAINER)
+ if (pc.equals(PlayerClassType::FORCETRAINER))
confirm_use_force(player_ptr, false);
else {
msg_print(_("目が見えない!", "You cannot see!"));
}
}
- if (player_ptr->pclass == PlayerClassType::FORCETRAINER) {
+ if (pc.equals(PlayerClassType::FORCETRAINER)) {
if (player_has_no_spellbooks(player_ptr)) {
confirm_use_force(player_ptr, false);
return true; //!< 錬気キャンセル時の処理がない
auto item_tester = get_castable_spellbook_tester(player_ptr);
- o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | (player_ptr->pclass == PlayerClassType::FORCETRAINER ? USE_FORCE : 0)), item_tester);
+ o_ptr = choose_object(player_ptr, &item, q, s, USE_INVEN | USE_FLOOR | (pc.equals(PlayerClassType::FORCETRAINER) ? USE_FORCE : 0), item_tester);
if (!o_ptr) {
if (item == INVEN_FORCE) /* the_force */
{
/* Access the item's sval */
sval = o_ptr->sval;
- if ((player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE) && (o_ptr->tval == get_realm2_book(player_ptr)))
+ if (!is_every_magic && (o_ptr->tval == get_realm2_book(player_ptr)))
increment = 32;
/* Track the object kind */
object_kind_track(player_ptr, o_ptr->k_idx);
handle_stuff(player_ptr);
- if ((player_ptr->pclass == PlayerClassType::SORCERER) || (player_ptr->pclass == PlayerClassType::RED_MAGE))
+ if (is_every_magic)
realm = tval2realm(o_ptr->tval);
else if (increment)
realm = player_ptr->realm2;
chg_virtue(player_ptr, V_CHANCE, 1);
/* A spell was cast */
- if (!(increment ? (player_ptr->spell_worked2 & (1UL << spell)) : (player_ptr->spell_worked1 & (1UL << spell))) && (player_ptr->pclass != PlayerClassType::SORCERER) && (player_ptr->pclass != PlayerClassType::RED_MAGE)) {
+ if (!(increment ? (player_ptr->spell_worked2 & (1UL << spell)) : (player_ptr->spell_worked1 & (1UL << spell))) && !is_every_magic) {
int e = s_ptr->sexp;
/* The spell worked */