#include "object/object-kind.h"
#include "pet/pet-util.h"
#include "player/player-race-types.h"
+#include "player/player-race.h"
#include "system/artifact-type-definition.h"
#include "system/floor-type-definition.h"
#include "system/system-variables.h"
*/
void init_turn(player_type *creature_ptr)
{
- if ((creature_ptr->prace == RACE_VAMPIRE) || (creature_ptr->prace == RACE_SKELETON) || (creature_ptr->prace == RACE_ZOMBIE) || (creature_ptr->prace == RACE_SPECTRE)) {
+ if (player_race_life(creature_ptr) == PlayerRaceLife::UNDEAD) {
current_world_ptr->game_turn = (TURNS_PER_TICK * 3 * TOWN_DAWN) / 4 + 1;
current_world_ptr->game_turn_limit = TURNS_PER_TICK * TOWN_DAWN * MAX_DAYS + TURNS_PER_TICK * TOWN_DAWN * 3 / 4;
} else {
#ifdef JP
static bool is_player_undead(player_type *customer_ptr)
{
- bool is_player_undead = is_specific_player_race(customer_ptr, RACE_SKELETON) ||
- is_specific_player_race(customer_ptr, RACE_ZOMBIE) ||
- is_specific_player_race(customer_ptr, RACE_VAMPIRE) ||
- is_specific_player_race(customer_ptr, RACE_SPECTRE);
- return is_player_undead;
+ return player_race_life(customer_ptr, true) == PlayerRaceLife::UNDEAD;
}
#endif
if (creature_ptr->food < PY_FOOD_ALERT) /* Hungry */
msg_print(_("あなたの飢えは新鮮な血によってのみ満たされる!", "Your hunger can only be satisfied with fresh blood!"));
- } else if (is_specific_player_race(creature_ptr, RACE_GOLEM) || is_specific_player_race(creature_ptr, RACE_ZOMBIE)
- || is_specific_player_race(creature_ptr, RACE_ENT) || is_specific_player_race(creature_ptr, RACE_BALROG)
- || is_specific_player_race(creature_ptr, RACE_ANDROID) || is_specific_player_race(creature_ptr, RACE_SPECTRE)
+ } else if (player_race_life(creature_ptr) != PlayerRaceLife::LIVING
|| (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING)) {
msg_print(_("生者の食物はあなたにとってほとんど栄養にならない。", "The food of mortals is poor sustenance for you."));
set_food(creature_ptr, creature_ptr->food + ((o_ptr->pval) / 20));
take_hit(creature_ptr, DAMAGE_NOESCAPE, dam, _("致命傷", "a fatal wound"));
}
- if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || (creature_ptr->mimic_form == MIMIC_VAMPIRE)) {
+ if (player_race_life(creature_ptr) == PlayerRaceLife::UNDEAD && player_race_has_flag(creature_ptr, TR_VUL_LITE)) {
if (!is_in_dungeon(creature_ptr) && !has_resist_lite(creature_ptr) && !is_invuln(creature_ptr) && is_daytime()) {
if ((creature_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].info & (CAVE_GLOW | CAVE_MNDK)) == CAVE_GLOW) {
msg_print(_("日光があなたのアンデッドの肉体を焼き焦がした!", "The sun's rays scorch your undead flesh!"));
HIT_POINT damage;
if ((r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->riding].r_idx].flags2 & RF2_AURA_FIRE) && !has_immune_fire(creature_ptr)) {
damage = r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->riding].r_idx].level / 2;
- if (is_specific_player_race(creature_ptr, RACE_ENT))
+ if (player_race_has_flag(creature_ptr, TR_VUL_FIRE))
damage += damage / 3;
if (has_resist_fire(creature_ptr))
damage = damage / 3;
}
if ((r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->riding].r_idx].flags2 & RF2_AURA_ELEC) && !has_immune_elec(creature_ptr)) {
damage = r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->riding].r_idx].level / 2;
- if (is_specific_player_race(creature_ptr, RACE_ANDROID))
+ if (player_race_has_flag(creature_ptr, TR_VUL_ELEC))
damage += damage / 3;
if (has_resist_elec(creature_ptr))
damage = damage / 3;
}
if ((r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->riding].r_idx].flags3 & RF3_AURA_COLD) && !has_immune_cold(creature_ptr)) {
damage = r_info[creature_ptr->current_floor_ptr->m_list[creature_ptr->riding].r_idx].level / 2;
+ if (player_race_has_flag(creature_ptr, TR_VUL_COLD))
+ damage += damage / 3;
if (has_resist_cold(creature_ptr))
damage = damage / 3;
if (is_oppose_cold(creature_ptr))
ep_ptr->dam = ep_ptr->dam * calc_lite_damage_rate(target_ptr, CALC_RAND) / 100;
- if (is_specific_player_race(target_ptr, RACE_VAMPIRE) || (target_ptr->mimic_form == MIMIC_VAMPIRE)) {
+ if (player_race_life(target_ptr) == PlayerRaceLife::UNDEAD && player_race_has_flag(target_ptr, TR_VUL_LITE)) {
if (!check_multishadow(target_ptr))
msg_print(_("光で肉体が焦がされた!", "The light scorches your flesh!"));
}
if (msr_ptr->smart.has_not(SM::RES_DARK))
return;
- if (is_specific_player_race(target_ptr, RACE_VAMPIRE)) {
+ if (player_race_has_flag(target_ptr, TR_IM_DARK)) {
msr_ptr->ability_flags.reset(RF_ABILITY::BR_DARK);
msr_ptr->ability_flags.reset(RF_ABILITY::BA_DARK);
return;
TR_BERS_RAGE = 149, //!< 狂戦士化の発作
TR_BRAND_MAGIC = 150, //!< 魔術属性
TR_IMPACT = 151, //!< クリティカル率アップ / Increase critical hit ratio
+ TR_VUL_ACID = 152, //!< 酸弱点
+ TR_VUL_COLD = 153, //!< 冷気弱点
+ TR_VUL_ELEC = 154, //!< 電撃弱点
+ TR_VUL_FIRE = 155, //!< 火炎弱点
+ TR_VUL_LITE = 156, //!< 閃光弱点
+ TR_IM_DARK = 157, //!< 暗黒免疫
- TR_FLAG_MAX = 152,
+ TR_FLAG_MAX = 158,
};
case GF_DARK:
dam = dam * calc_dark_damage_rate(target_ptr, CALC_MAX) / 100;
- if (is_specific_player_race(target_ptr, RACE_VAMPIRE) || (target_ptr->mimic_form == MIMIC_VAMPIRE) || target_ptr->wraith_form)
+ if (has_immune_dark(target_ptr) || target_ptr->wraith_form)
ignore_wraith_form = TRUE;
break;
void set_element_resistance_info(player_type* creature_ptr, self_info_type* self_ptr)
{
- if (has_immune_acid(creature_ptr)) {
+ if (has_immune_acid(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは酸に対する完全なる免疫を持っている。", "You are completely immune to acid.");
- } else if (has_resist_acid(creature_ptr) && is_oppose_acid(creature_ptr)) {
+ else if (has_resist_acid(creature_ptr) && is_oppose_acid(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは酸への強力な耐性を持っている。", "You resist acid exceptionally well.");
- } else if (has_resist_acid(creature_ptr) || is_oppose_acid(creature_ptr)) {
+ else if (has_resist_acid(creature_ptr) || is_oppose_acid(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは酸への耐性を持っている。", "You are resistant to acid.");
- }
- if (has_immune_elec(creature_ptr)) {
+ if (player_race_has_flag(creature_ptr, TR_VUL_ACID) && !has_immune_acid(creature_ptr))
+ self_ptr->info[self_ptr->line++] = _("あなたは酸に弱い。", "You are susceptible to damage from acid.");
+
+ if (has_immune_elec(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは電撃に対する完全なる免疫を持っている。", "You are completely immune to lightning.");
- } else if (has_resist_elec(creature_ptr) && is_oppose_elec(creature_ptr)) {
+ else if (has_resist_elec(creature_ptr) && is_oppose_elec(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは電撃への強力な耐性を持っている。", "You resist lightning exceptionally well.");
- } else if (has_resist_elec(creature_ptr) || is_oppose_elec(creature_ptr)) {
+ else if (has_resist_elec(creature_ptr) || is_oppose_elec(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは電撃への耐性を持っている。", "You are resistant to lightning.");
- }
- if (is_specific_player_race(creature_ptr, RACE_ANDROID) && !has_immune_elec(creature_ptr)) {
+
+ if (player_race_has_flag(creature_ptr, TR_VUL_ELEC) && !has_immune_elec(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは電撃に弱い。", "You are susceptible to damage from lightning.");
- }
- if (has_immune_fire(creature_ptr)) {
+ if (has_immune_fire(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは火に対する完全なる免疫を持っている。", "You are completely immune to fire.");
- } else if (has_resist_fire(creature_ptr) &&is_oppose_fire(creature_ptr)) {
+ else if (has_resist_fire(creature_ptr) && is_oppose_fire(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは火への強力な耐性を持っている。", "You resist fire exceptionally well.");
- } else if (has_resist_fire(creature_ptr) || is_oppose_fire(creature_ptr)) {
+ else if (has_resist_fire(creature_ptr) || is_oppose_fire(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは火への耐性を持っている。", "You are resistant to fire.");
- }
- if (is_specific_player_race(creature_ptr, RACE_ENT) && !has_immune_fire(creature_ptr)) {
+ if (player_race_has_flag(creature_ptr, TR_VUL_FIRE) && !has_immune_fire(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは火に弱い。", "You are susceptible to damage from fire.");
- }
- if (has_immune_cold(creature_ptr)) {
+ if (has_immune_cold(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは冷気に対する完全なる免疫を持っている。", "You are completely immune to cold.");
- } else if (has_resist_cold(creature_ptr) && is_oppose_cold(creature_ptr)) {
+ else if (has_resist_cold(creature_ptr) && is_oppose_cold(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは冷気への強力な耐性を持っている。", "You resist cold exceptionally well.");
- } else if (has_resist_cold(creature_ptr) || is_oppose_cold(creature_ptr)) {
+ else if (has_resist_cold(creature_ptr) || is_oppose_cold(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは冷気への耐性を持っている。", "You are resistant to cold.");
- }
- if (has_resist_pois(creature_ptr) && is_oppose_pois(creature_ptr)) {
+ if (player_race_has_flag(creature_ptr, TR_VUL_COLD) && !has_immune_cold(creature_ptr))
+ self_ptr->info[self_ptr->line++] = _("あなたは冷気に弱い。", "You are susceptible to damage from cold.");
+
+ if (has_resist_pois(creature_ptr) && is_oppose_pois(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは毒への強力な耐性を持っている。", "You resist poison exceptionally well.");
- } else if (has_resist_pois(creature_ptr) || is_oppose_pois(creature_ptr)) {
+ else if (has_resist_pois(creature_ptr) || is_oppose_pois(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは毒への耐性を持っている。", "You are resistant to poison.");
- }
}
void set_high_resistance_info(player_type *creature_ptr, self_info_type *self_ptr)
if (has_resist_lite(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは閃光への耐性を持っている。", "You are resistant to bright light.");
- if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || is_specific_player_race(creature_ptr, RACE_S_FAIRY)
- || (creature_ptr->mimic_form == MIMIC_VAMPIRE))
+ if (has_vuln_lite(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは閃光に弱い。", "You are susceptible to damage from bright light.");
- if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || (creature_ptr->mimic_form == MIMIC_VAMPIRE) || creature_ptr->wraith_form)
+ if (has_immune_dark(creature_ptr) || creature_ptr->wraith_form)
self_ptr->info[self_ptr->line++] = _("あなたは暗黒に対する完全なる免疫を持っている。", "You are completely immune to darkness.");
else if (has_resist_dark(creature_ptr))
self_ptr->info[self_ptr->line++] = _("あなたは暗黒への耐性を持っている。", "You are resistant to darkness.");
}
see_eldritch_horror(m_name, r_ptr);
- if (is_specific_player_race(creature_ptr, RACE_IMP) || is_specific_player_race(creature_ptr, RACE_BALROG)
- || (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON) || current_world_ptr->wizard)
+ switch (player_race_life(creature_ptr)) {
+ case PlayerRaceLife::DEMON:
return;
-
- if (is_specific_player_race(creature_ptr, RACE_SKELETON) || is_specific_player_race(creature_ptr, RACE_ZOMBIE)
- || is_specific_player_race(creature_ptr, RACE_VAMPIRE) || is_specific_player_race(creature_ptr, RACE_SPECTRE)
- || (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_UNDEAD)) {
+ case PlayerRaceLife::UNDEAD:
if (saving_throw(25 + creature_ptr->lev))
return;
+ break;
+ default:
+ break;
}
} else if (!necro) {
monster_race *r_ptr;
}
feel_eldritch_horror(desc, r_ptr);
- if (!creature_ptr->mimic_form) {
- switch (creature_ptr->prace) {
- case RACE_IMP:
- case RACE_BALROG:
- if (saving_throw(20 + creature_ptr->lev))
- return;
- break;
- case RACE_SKELETON:
- case RACE_ZOMBIE:
- case RACE_SPECTRE:
- case RACE_VAMPIRE:
- if (saving_throw(10 + creature_ptr->lev))
- return;
- break;
-
- default:
- break;
- }
- } else {
- if (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON) {
- if (saving_throw(20 + creature_ptr->lev))
- return;
- } else if (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_UNDEAD) {
- if (saving_throw(10 + creature_ptr->lev))
- return;
- }
+ switch (player_race_life(creature_ptr)) {
+ case PlayerRaceLife::DEMON:
+ if (saving_throw(20 + creature_ptr->lev))
+ return;
+ break;
+ case PlayerRaceLife::UNDEAD:
+ if (saving_throw(10 + creature_ptr->lev))
+ return;
+ break;
+ default:
+ break;
}
} else {
msg_print(_("ネクロノミコンを読んで正気を失った!", "Your sanity is shaken by reading the Necronomicon!"));
0, 0, 0, 0,
0,
0x000000,
+ PlayerRaceLife::LIVING,
{ },
},
{
0, 0, 0, 0,
5,
0x000003,
+ PlayerRaceLife::DEMON,
{
{ TR_RES_FIRE },
{ TR_RES_NETHER },
0, 0, 0, 0,
20,
0x000003,
+ PlayerRaceLife::DEMON,
{
{ TR_IM_FIRE },
{ TR_RES_COLD },
0, 0, 0, 0,
5,
0x000005,
+ PlayerRaceLife::UNDEAD,
{
{ TR_RES_COLD },
{ TR_RES_POIS },
- { TR_RES_DARK },
+ { TR_VUL_LITE },
+ { TR_IM_DARK },
{ TR_RES_NETHER },
{ TR_SEE_INVIS },
{ TR_HOLD_EXP },
add_flag(flags, cond.type);
}
}
+
+/*!
+ * @brief 種族の生命形態を返す
+ * @param creature_ptr プレイヤー情報への参照ポインタ
+ * @return 生命形態
+ */
+PlayerRaceLife player_race_life(player_type *creature_ptr, bool base_race)
+{
+ auto race_ptr = get_player_race_info(creature_ptr, base_race);
+ return race_ptr->life;
+}
#define MIMIC_IS_DEMON 0x00000002
#define MIMIC_IS_UNDEAD 0x00000004
+/*!
+ * プレイヤー種族の生命形態
+ */
+enum class PlayerRaceLife {
+ LIVING = 0, //生きている
+ UNDEAD = 1, //不死
+ DEMON = 2, //悪魔
+ NONLIVING = 3, //生きてない
+ MAX
+};
+
struct player_race_condition {
tr_type type{};
PLAYER_LEVEL level{};
byte infra{}; //!< 赤外線視力 / Infra-vision range
u32b choice{}; //!< 似つかわしい職業(ミミック時はミミック種族属性) / Legal class choices
+ PlayerRaceLife life{}; //!< 生命の形態
std::vector<player_race_condition> extra_flags;
};
bool is_specific_player_race(player_type *creature_ptr, player_race_type prace);
bool player_race_has_flag(player_type *creature_ptr, tr_type flag, bool base_race = false);
void add_player_race_flags(player_type *creature_ptr, BIT_FLAGS *flags, bool base_race = false);
+PlayerRaceLife player_race_life(player_type *creature_ptr, bool base_race = false);
return check_equipment_flags(creature_ptr, tr_flag);
case TR_IMPACT:
return has_impact(creature_ptr);
+ case TR_VUL_ACID:
+ return has_vuln_acid(creature_ptr);
+ case TR_VUL_COLD:
+ return has_vuln_cold(creature_ptr);
+ case TR_VUL_ELEC:
+ return has_vuln_elec(creature_ptr);
+ case TR_VUL_FIRE:
+ return has_vuln_fire(creature_ptr);
+ case TR_VUL_LITE:
+ return has_vuln_lite(creature_ptr);
+ case TR_IM_DARK:
+ return has_immune_dark(creature_ptr);
case TR_FLAG_MAX:
break;
BIT_FLAGS has_vuln_acid(player_type *creature_ptr)
{
BIT_FLAGS result = 0L;
+
if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
result |= FLAG_CAUSE_MUTATION;
}
+ if (player_race_has_flag(creature_ptr, TR_VUL_ACID))
+ result |= FLAG_CAUSE_RACE;
+
if (creature_ptr->special_defense & KATA_KOUKIJIN) {
result |= FLAG_CAUSE_BATTLE_FORM;
}
result |= FLAG_CAUSE_MUTATION;
}
- if (is_specific_player_race(creature_ptr, RACE_ANDROID)) {
+ if (player_race_has_flag(creature_ptr, TR_VUL_ELEC))
result |= FLAG_CAUSE_RACE;
- }
if (creature_ptr->special_defense & KATA_KOUKIJIN) {
result |= FLAG_CAUSE_BATTLE_FORM;
BIT_FLAGS has_vuln_fire(player_type *creature_ptr)
{
BIT_FLAGS result = 0L;
+
if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
result |= FLAG_CAUSE_MUTATION;
}
- if (is_specific_player_race(creature_ptr, RACE_ENT)) {
+ if (player_race_has_flag(creature_ptr, TR_VUL_FIRE))
result |= FLAG_CAUSE_RACE;
- }
if (creature_ptr->special_defense & KATA_KOUKIJIN) {
result |= FLAG_CAUSE_BATTLE_FORM;
BIT_FLAGS has_vuln_cold(player_type *creature_ptr)
{
BIT_FLAGS result = 0L;
+
if (creature_ptr->muta.has(MUTA::VULN_ELEM)) {
result |= FLAG_CAUSE_MUTATION;
}
+ if (player_race_has_flag(creature_ptr, TR_VUL_COLD))
+ result |= FLAG_CAUSE_RACE;
+
if (creature_ptr->special_defense & KATA_KOUKIJIN) {
result |= FLAG_CAUSE_BATTLE_FORM;
}
BIT_FLAGS has_vuln_lite(player_type *creature_ptr)
{
BIT_FLAGS result = 0L;
- if (is_specific_player_race(creature_ptr, RACE_S_FAIRY) || is_specific_player_race(creature_ptr, RACE_VAMPIRE)
- || (creature_ptr->mimic_form == MIMIC_VAMPIRE)) {
+
+ if (player_race_has_flag(creature_ptr, TR_VUL_LITE))
result |= FLAG_CAUSE_RACE;
- }
if (creature_ptr->wraith_form) {
result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
{
BIT_FLAGS result = 0L;
- if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || (creature_ptr->mimic_form == MIMIC_VAMPIRE)) {
+ if (player_race_has_flag(creature_ptr, TR_IM_DARK))
result |= FLAG_CAUSE_RACE;
- }
if (creature_ptr->wraith_form) {
result |= FLAG_CAUSE_MAGIC_TIME_EFFECT;
result |= FLAG_CAUSE_PERSONALITY;
}
- if (creature_ptr->mimic_form == MIMIC_VAMPIRE) {
- result |= FLAG_CAUSE_RACE;
- }
-
- if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_VAMPIRE)
+ if (player_race_has_flag(creature_ptr, TR_LITE_1))
result |= FLAG_CAUSE_RACE;
if (creature_ptr->ult_res) {
PERCENTAGE calc_lite_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode)
{
PERCENTAGE per = 100;
- if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || (creature_ptr->mimic_form == MIMIC_VAMPIRE)) {
- per *= 2;
- } else if (is_specific_player_race(creature_ptr, RACE_S_FAIRY)) {
- per = per * 4 / 3;
+
+ if (player_race_has_flag(creature_ptr, TR_VUL_LITE)) {
+ switch (player_race_life(creature_ptr)) {
+ case PlayerRaceLife::UNDEAD:
+ per *= 2;
+ break;
+ default:
+ per = per * 4 / 3;
+ break;
+ }
}
if (has_resist_lite(creature_ptr)) {
{
PERCENTAGE per = 100;
- if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || (creature_ptr->mimic_form == MIMIC_VAMPIRE) || creature_ptr->wraith_form) {
+ if (has_immune_dark(creature_ptr))
return 0;
- }
if (has_resist_dark(creature_ptr)) {
per *= 400;
66, 4, 150, 20,
0,
0x1FFFFFFF,
+ PlayerRaceLife::LIVING,
{},
},
{
62, 6, 100, 10,
2,
0x1E77E7FF,
+ PlayerRaceLife::LIVING,
{},
},
{
54, 4, 80, 6,
3,
0x1E77E75B,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_LITE },
},
33, 3, 50, 3,
4,
0x1F6FFC0B,
+ PlayerRaceLife::LIVING,
{
{ TR_HOLD_EXP },
},
39, 3, 75, 3,
4,
0x1F67D60F,
+ PlayerRaceLife::LIVING,
{
{ TR_FREE_ACT },
},
46, 3, 120, 10,
5,
0x11890005,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_BLIND },
},
62, 1, 120, 5,
3,
0x1DD8818D,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_DARK },
},
84, 8, 225, 40,
3,
0x00880005,
+ PlayerRaceLife::LIVING,
{
{ TR_SUST_STR },
{ TR_REGEN, 15 },
78, 6, 180, 15,
0,
0x1FFFF7FF,
+ PlayerRaceLife::LIVING,
{
{ TR_SUST_CON },
{ TR_REGEN },
82, 10, 180, 15,
4,
0x1F77E75B,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_LITE },
{ TR_SEE_INVIS },
78, 6, 190, 15,
0,
0x05C0A09D,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_FEAR },
},
80, 8, 235, 60,
3,
0x10A80407,
+ PlayerRaceLife::LIVING,
{
{ TR_SUST_STR },
{ TR_RES_DARK },
80, 10, 240, 64,
3,
0x08880011,
+ PlayerRaceLife::LIVING,
{
{ TR_SUST_STR },
{ TR_RES_SHARDS },
99, 11, 250, 86,
0,
0x123D4727,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_CHAOS },
},
80, 8, 235, 60,
1,
0x00888005,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_SOUND },
},
50, 3, 75, 3,
2,
0x1667360F,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_ACID },
{ TR_IM_ACID, 20 },
54, 3, 70, 4,
2,
0x004D8011,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_ACID },
{ TR_RES_CONF },
55, 1, 100, 5,
3,
0x1444A009,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_POIS },
},
40, 3, 78, 3,
5,
0x1569040F,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_DARK },
{ TR_RES_DISEN },
54, 4, 80, 6,
5,
0x1E77C7DF,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_DARK },
{ TR_SEE_INVIS, 20 },
72, 1, 130, 5,
2,
0x07FFE757,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_FIRE, 5 },
{ TR_RES_COLD, 10 },
63, 6, 112, 10,
4,
0x12334746,
+ PlayerRaceLife::LIVING,
{
{ TR_SUST_INT },
{ TR_SUST_WIS },
64, 1, 120, 5,
3,
0x1DB537CB,
+ PlayerRaceLife::DEMON,
{
{ TR_RES_FIRE },
{ TR_SEE_INVIS, 10 },
62, 1, 180, 6,
4,
0x00800001,
+ PlayerRaceLife::NONLIVING,
{
{ TR_RES_POIS },
{ TR_SEE_INVIS },
66, 4, 50, 5,
2,
0x0234070F,
+ PlayerRaceLife::UNDEAD,
{
{ TR_RES_COLD, 10 },
{ TR_RES_POIS },
66, 4, 100, 20,
2,
0x00800001,
+ PlayerRaceLife::UNDEAD,
{
{ TR_RES_COLD, 5 },
{ TR_RES_POIS },
66, 4, 150, 20,
5,
0x067DC7FF,
+ PlayerRaceLife::UNDEAD,
{
- // { TR_VUL_LITE }, (予定)
- // { TR_IM_DARK }, (予定)
{ TR_RES_COLD },
{ TR_RES_POIS },
- { TR_RES_DARK },
+ { TR_VUL_LITE },
+ { TR_IM_DARK },
{ TR_RES_NETHER },
{ TR_HOLD_EXP },
{ TR_LITE_1, 1, CLASS_NINJA, true },
66, 4, 100, 20,
5,
0x0631474A,
+ PlayerRaceLife::UNDEAD,
{
{ TR_RES_COLD },
{ TR_RES_POIS },
29, 2, 65, 2,
4,
0x1623F65E,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_LITE },
{ TR_LEVITATION },
61, 6, 120, 15,
0,
0x057887CF,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_CONF },
{ TR_RES_SOUND },
99, 11, 250, 45,
0,
0x10010005,
+ PlayerRaceLife::LIVING,
{
- // { TR_VUL_FIRE } (予定)
+ { TR_VUL_FIRE }
},
},
{
78, 6, 180, 15,
3,
0x1779F777,
+ PlayerRaceLife::LIVING,
{
{ TR_SEE_INVIS },
{ TR_LEVITATION },
80, 10, 240, 64,
5,
0x07EDC4DB,
+ PlayerRaceLife::DEMON,
{
{ TR_RES_FIRE },
{ TR_RES_NETHER },
78, 6, 180, 15,
0,
0x1FFFF7FF,
+ PlayerRaceLife::LIVING,
{
{ TR_SUST_CON },
},
73, 8, 80, 15,
4,
0x1E33C7DF,
+ PlayerRaceLife::LIVING,
{
- // { TR_VUL_LITE }, (予定)
+ { TR_VUL_LITE },
{ TR_LEVITATION },
},
},
44, 4, 130, 20,
0,
0x0C18B7AD,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_CONF },
},
66, 12, 220, 64,
0,
0x00800001,
+ PlayerRaceLife::NONLIVING,
{
- // { TR_VUL_ELEC }, (予定)
+ { TR_VUL_ELEC },
{ TR_RES_POIS },
{ TR_FREE_ACT },
{ TR_HOLD_EXP },
62, 6, 100, 10,
2,
0x1E77E7FF,
+ PlayerRaceLife::LIVING,
{
{ TR_RES_WATER },
},
if (is_specific_player_race(creature_ptr, RACE_SPECTRE))
add_flag(flags, TR_RES_NETHER);
- if (creature_ptr->mimic_form == MIMIC_VAMPIRE || is_specific_player_race(creature_ptr, RACE_VAMPIRE))
+ if (player_race_has_flag(creature_ptr, TR_IM_DARK))
add_flag(flags, TR_RES_DARK);
if (creature_ptr->pclass == CLASS_ELEMENTALIST) {
add_flag(flags, TR_RES_COLD);
}
- if (is_specific_player_race(creature_ptr, RACE_ANDROID))
- add_flag(flags, TR_RES_ELEC);
- if (is_specific_player_race(creature_ptr, RACE_ENT))
- add_flag(flags, TR_RES_FIRE);
- if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || is_specific_player_race(creature_ptr, RACE_S_FAIRY) ||
- (creature_ptr->mimic_form == MIMIC_VAMPIRE))
- add_flag(flags, TR_RES_LITE);
+ if (player_race_has_flag(creature_ptr, TR_VUL_ACID))
+ add_flag(flags, TR_RES_ACID);
+ if (player_race_has_flag(creature_ptr, TR_VUL_COLD))
+ add_flag(flags, TR_RES_COLD);
+ if (player_race_has_flag(creature_ptr, TR_VUL_ELEC))
+ add_flag(flags, TR_RES_ELEC);
+ if (player_race_has_flag(creature_ptr, TR_VUL_FIRE))
+ add_flag(flags, TR_RES_FIRE);
+ if (player_race_has_flag(creature_ptr, TR_VUL_LITE))
+ add_flag(flags, TR_RES_LITE);
}
if (cast) {
lite_area(caster_ptr, damroll(dice, sides), rad);
- if ((is_specific_player_race(caster_ptr, RACE_VAMPIRE) || (caster_ptr->mimic_form == MIMIC_VAMPIRE)) && !has_resist_lite(caster_ptr)) {
+ if (player_race_life(caster_ptr) == PlayerRaceLife::UNDEAD && player_race_has_flag(caster_ptr, TR_VUL_LITE) && !has_resist_lite(caster_ptr)) {
msg_print(_("日の光があなたの肉体を焦がした!", "The daylight scorches your flesh!"));
take_hit(caster_ptr, DAMAGE_NOESCAPE, damroll(2, 2), _("日の光", "daylight"));
}
chg_virtue(caster_ptr, V_ENLIGHTEN, 1);
wiz_lite(caster_ptr, FALSE);
- if ((is_specific_player_race(caster_ptr, RACE_VAMPIRE) || (caster_ptr->mimic_form == MIMIC_VAMPIRE)) && !has_resist_lite(caster_ptr)) {
+ if (player_race_life(caster_ptr) == PlayerRaceLife::UNDEAD && player_race_has_flag(caster_ptr, TR_VUL_LITE) && !has_resist_lite(caster_ptr)) {
msg_print(_("日光があなたの肉体を焦がした!", "The sunlight scorches your flesh!"));
take_hit(caster_ptr, DAMAGE_NOESCAPE, 50, _("日光", "sunlight"));
}