-/*!
+/*!
* @brief 死の大鎌に特有の処理
* @date 2020/05/23
* @author Hourier
#include "specific-object/death-scythe.h"
#include "combat/attack-criticality.h"
-#include "core/player-redraw-types.h"
#include "core/stuff-handler.h"
#include "inventory/inventory-slot-types.h"
#include "main/sound-definitions-table.h"
#include "main/sound-of-music.h"
#include "object-enchant/tr-types.h"
-#include "object/object-flags.h"
-#include "player-attack/player-attack-util.h"
+#include "player-attack/player-attack.h"
+#include "player-base/player-class.h"
#include "player-info/race-info.h"
#include "player/player-damage.h"
#include "player/player-status-flags.h"
#include "status/element-resistance.h"
-#include "system/object-type-definition.h"
+#include "system/item-entity.h"
#include "system/player-type-definition.h"
+#include "system/redrawing-flags-updater.h"
#include "util/bit-flags-calculator.h"
#include "view/display-messages.h"
static int calc_death_scythe_reflection_magnification(PlayerType *player_ptr)
{
switch (player_ptr->mimic_form) {
- case MIMIC_NONE:
+ case MimicKindType::NONE:
return calc_death_scythe_reflection_magnification_mimic_none(player_ptr);
- case MIMIC_DEMON:
- case MIMIC_DEMON_LORD:
- case MIMIC_VAMPIRE:
+ case MimicKindType::DEMON:
+ case MimicKindType::DEMON_LORD:
+ case MimicKindType::VAMPIRE:
return 30;
default:
return 10;
*/
static void compensate_death_scythe_reflection_magnification(PlayerType *player_ptr, int *magnification, const TrFlags &death_scythe_flags)
{
- if ((player_ptr->alignment < 0) && (*magnification < 20))
+ if ((player_ptr->alignment < 0) && (*magnification < 20)) {
*magnification = 20;
+ }
- if (!(has_resist_acid(player_ptr) || is_oppose_acid(player_ptr) || has_immune_acid(player_ptr)) && (*magnification < 25))
+ if (!(has_resist_acid(player_ptr) || is_oppose_acid(player_ptr) || has_immune_acid(player_ptr)) && (*magnification < 25)) {
*magnification = 25;
+ }
- if (!(has_resist_elec(player_ptr) || is_oppose_elec(player_ptr) || has_immune_elec(player_ptr)) && (*magnification < 25))
+ if (!(has_resist_elec(player_ptr) || is_oppose_elec(player_ptr) || has_immune_elec(player_ptr)) && (*magnification < 25)) {
*magnification = 25;
+ }
- if (!(has_resist_fire(player_ptr) || is_oppose_fire(player_ptr) || has_immune_fire(player_ptr)) && (*magnification < 25))
+ if (!(has_resist_fire(player_ptr) || is_oppose_fire(player_ptr) || has_immune_fire(player_ptr)) && (*magnification < 25)) {
*magnification = 25;
+ }
- if (!(has_resist_cold(player_ptr) || is_oppose_cold(player_ptr) || has_immune_cold(player_ptr)) && (*magnification < 25))
+ if (!(has_resist_cold(player_ptr) || is_oppose_cold(player_ptr) || has_immune_cold(player_ptr)) && (*magnification < 25)) {
*magnification = 25;
+ }
- if (!(has_resist_pois(player_ptr) || is_oppose_pois(player_ptr)) && (*magnification < 25))
+ if (!(has_resist_pois(player_ptr) || is_oppose_pois(player_ptr)) && (*magnification < 25)) {
*magnification = 25;
+ }
- if ((player_ptr->pclass != PlayerClassType::SAMURAI) && (death_scythe_flags.has(TR_FORCE_WEAPON)) && (player_ptr->csp > (player_ptr->msp / 30))) {
+ if (!PlayerClass(player_ptr).equals(PlayerClassType::SAMURAI) && (death_scythe_flags.has(TR_FORCE_WEAPON)) && (player_ptr->csp > (player_ptr->msp / 30))) {
player_ptr->csp -= (1 + (player_ptr->msp / 30));
- player_ptr->redraw |= (PR_MANA);
+ RedrawingFlagsUpdater::get_instance().set_flag(MainWindowRedrawingFlag::MP);
*magnification = *magnification * 3 / 2 + 20;
}
}
*/
static void death_scythe_reflection_critial_hit(player_attack_type *pa_ptr)
{
- if (!one_in_(6))
+ if (!one_in_(6)) {
return;
+ }
int more_magnification = 2;
msg_format(_("グッサリ切り裂かれた!", "Your weapon cuts deep into yourself!"));
- while (one_in_(4))
+ while (one_in_(4)) {
more_magnification++;
+ }
- pa_ptr->attack_damage *= (HIT_POINT)more_magnification;
+ pa_ptr->attack_damage *= (int)more_magnification;
}
/*!
msg_format(_("ミス! %sにかわされた。", "You miss %s."), pa_ptr->m_name);
msg_print(_("振り回した大鎌が自分自身に返ってきた!", "Your scythe returns to you!"));
- object_type *o_ptr = &player_ptr->inventory_list[INVEN_MAIN_HAND + pa_ptr->hand];
- auto death_scythe_flags = object_flags(o_ptr);
+ auto *o_ptr = &player_ptr->inventory_list[INVEN_MAIN_HAND + pa_ptr->hand];
+ const auto death_scythe_flags = o_ptr->get_flags();
pa_ptr->attack_damage = damroll(o_ptr->dd + player_ptr->to_dd[pa_ptr->hand], o_ptr->ds + player_ptr->to_ds[pa_ptr->hand]);
int magnification = calc_death_scythe_reflection_magnification(player_ptr);
compensate_death_scythe_reflection_magnification(player_ptr, &magnification, death_scythe_flags);
- pa_ptr->attack_damage *= (HIT_POINT)magnification;
+ pa_ptr->attack_damage *= (int)magnification;
pa_ptr->attack_damage /= 10;
pa_ptr->attack_damage = critical_norm(player_ptr, o_ptr->weight, o_ptr->to_h, pa_ptr->attack_damage, player_ptr->to_h[pa_ptr->hand], pa_ptr->mode);
death_scythe_reflection_critial_hit(pa_ptr);
pa_ptr->attack_damage += (player_ptr->to_d[pa_ptr->hand] + o_ptr->to_d);
- if (pa_ptr->attack_damage < 0)
+ if (pa_ptr->attack_damage < 0) {
pa_ptr->attack_damage = 0;
+ }
take_hit(player_ptr, DAMAGE_FORCE, pa_ptr->attack_damage, _("死の大鎌", "Death scythe"));
handle_stuff(player_ptr);