#include "system/player-type-definition.h"
#include "view/display-messages.h"
-static void aura_fire_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_fire_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!has_sh_fire(player_ptr) || !monap_ptr->alive || player_ptr->is_dead)
return;
}
}
-static void aura_elec_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_elec_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!has_sh_elec(player_ptr) || !monap_ptr->alive || player_ptr->is_dead)
return;
}
}
-static void aura_cold_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_cold_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!has_sh_cold(player_ptr) || !monap_ptr->alive || player_ptr->is_dead)
return;
}
}
-static void aura_shards_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_shards_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!player_ptr->dustrobe || !monap_ptr->alive || player_ptr->is_dead)
return;
teleport_player(player_ptr, 10, TELEPORT_SPONTANEOUS);
}
-static void aura_holy_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_holy_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!player_ptr->tim_sh_holy || !monap_ptr->alive || player_ptr->is_dead)
return;
r_ptr->r_flags3 |= RF3_EVIL;
}
-static void aura_force_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_force_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!player_ptr->tim_sh_touki || !monap_ptr->alive || player_ptr->is_dead)
return;
}
}
-static void aura_shadow_by_monster_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static void aura_shadow_by_monster_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!SpellHex(player_ptr).is_spelling_specific(HEX_SHADOW_CLOAK) || !monap_ptr->alive || player_ptr->is_dead)
return;
}
}
-void process_aura_counterattack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_aura_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!monap_ptr->touched)
return;
#pragma once
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
class PlayerType;
-void process_aura_counterattack(PlayerType *player_ptr, monap_type *monap_ptr);
+void process_aura_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
* @param player_ptr プレイヤーへの参照ポインタ
* @param pa_ptr 直接攻撃構造体への参照ポインタ
*/
-void musou_counterattack(PlayerType *player_ptr, monap_type *monap_ptr)
+void musou_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if ((!player_ptr->counter && !PlayerClass(player_ptr).samurai_stance_is(SamuraiStanceType::MUSOU)) || !monap_ptr->alive || player_ptr->is_dead || !monap_ptr->m_ptr->ml
|| (player_ptr->csp <= 7))
#include "combat/combat-options-type.h"
#include "object-enchant/tr-flags.h"
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
struct monster_type;
struct player_attack_type;
class PlayerType;
bool choose_samurai_stance(PlayerType* player_ptr);
int calc_attack_quality(PlayerType *player_ptr, player_attack_type *pa_ptr);
void mineuchi(PlayerType *player_ptr, player_attack_type *pa_ptr);
-void musou_counterattack(PlayerType *player_ptr, monap_type *monap_ptr);
+void musou_counterattack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
#include "system/angband.h"
#include "system/monster-type-definition.h"
-static void show_jaian_song(monap_type *monap_ptr)
+static void show_jaian_song(MonsterAttackPlayer *monap_ptr)
{
#ifdef JP
switch (randint1(15)) {
#endif
}
-static void monster_attack_show(monap_type *monap_ptr)
+static void monster_attack_show(MonsterAttackPlayer *monap_ptr)
{
#ifdef JP
monap_ptr->abbreviate = -1;
sound(SOUND_SHOW);
}
-void describe_monster_attack_method(monap_type *monap_ptr)
+void describe_monster_attack_method(MonsterAttackPlayer *monap_ptr)
{
switch (monap_ptr->method) {
case RaceBlowMethodType::HIT: {
#pragma once
-typedef struct monap_type monap_type;
-void describe_monster_attack_method(monap_type *monap_ptr);
+class MonsterAttackPlayer;
+void describe_monster_attack_method(MonsterAttackPlayer *monap_ptr);
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
* @details 10% (毒の一次耐性があれば4%、二重耐性ならば1.6%)の確率で耐久が低下し、更に1/10の確率で永久低下する
*/
-void calc_blow_disease(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_disease(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_resist_pois(player_ptr))
monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-void calc_blow_lose_strength(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_strength(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_sustain_str(player_ptr))
monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-void calc_blow_lose_intelligence(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_intelligence(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_sustain_int(player_ptr))
monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-void calc_blow_lose_wisdom(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_wisdom(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_sustain_wis(player_ptr))
monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-void calc_blow_lose_dexterity(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_dexterity(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_sustain_dex(player_ptr))
monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-void calc_blow_lose_constitution(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_constitution(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_sustain_con(player_ptr))
monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-void calc_blow_lose_charisma(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_charisma(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_sustain_chr(player_ptr))
monap_ptr->get_damage = monap_ptr->get_damage * (randint1(4) + 4) / 9;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-void calc_blow_lose_all(PlayerType *player_ptr, monap_type *monap_ptr)
+void calc_blow_lose_all(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
int damage_ratio = 100;
if (has_sustain_str(player_ptr))
#pragma once
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
class PlayerType;
-void calc_blow_disease(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_strength(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_intelligence(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_wisdom(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_dexterity(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_constitution(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_charisma(PlayerType *player_ptr, monap_type *monap_ptr);
-void calc_blow_lose_all(PlayerType *player_ptr, monap_type *monap_ptr);
+void calc_blow_disease(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_strength(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_intelligence(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_wisdom(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_dexterity(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_constitution(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_charisma(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void calc_blow_lose_all(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
#include "util/bit-flags-calculator.h"
#include "view/display-messages.h"
-static bool check_no_blow(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool check_no_blow(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
auto *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
if (r_ptr->behavior_flags.has(MonsterBehaviorType::NEVER_BLOW)) {
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
* @return 攻撃続行ならばTRUE、打ち切りになったらFALSE
*/
-static bool check_monster_continuous_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool check_monster_continuous_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!monster_is_valid(monap_ptr->m_ptr) || (monap_ptr->method == RaceBlowMethodType::NONE)) {
return false;
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
* @return briefに書いた条件+確率が満たされたらTRUE、それ以外はFALSE
*/
-static bool effect_protecion_from_evil(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool effect_protecion_from_evil(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
auto *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
if ((player_ptr->protevil <= 0) || none_bits(r_ptr->flags3, RF3_EVIL) || (player_ptr->lev < monap_ptr->rlev) || ((randint0(100) + player_ptr->lev) <= 50)) {
return true;
}
-static void describe_silly_attacks(monap_type *monap_ptr)
+static void describe_silly_attacks(MonsterAttackPlayer *monap_ptr)
{
if (monap_ptr->act == nullptr) {
return;
* @brief 切り傷と朦朧が同時に発生した時、片方を無効にする
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void select_cut_stun(monap_type *monap_ptr)
+static void select_cut_stun(MonsterAttackPlayer *monap_ptr)
{
if ((monap_ptr->do_cut == 0) || (monap_ptr->do_stun == 0)) {
return;
}
}
-static void calc_player_cut(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_player_cut(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (monap_ptr->do_cut == 0) {
return;
* 2%の確率で朦朧蓄積ランクを1上げる.
* 肉体のパラメータが合計80を超える水準に強化されていたら朦朧蓄積ランクを1下げる.
*/
-static void process_player_stun(PlayerType *player_ptr, monap_type *monap_ptr)
+static void process_player_stun(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (monap_ptr->do_stun == 0) {
return;
}
}
-static void monster_explode(PlayerType *player_ptr, monap_type *monap_ptr)
+static void monster_explode(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!monap_ptr->explode) {
return;
}
}
-static void describe_attack_evasion(PlayerType *player_ptr, monap_type *monap_ptr)
+static void describe_attack_evasion(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!monap_ptr->m_ptr->ml) {
return;
#endif
}
-static void gain_armor_exp(PlayerType *player_ptr, monap_type *monap_ptr)
+static void gain_armor_exp(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
const auto o_ptr_mh = &player_ptr->inventory_list[INVEN_MAIN_HAND];
const auto o_ptr_sh = &player_ptr->inventory_list[INVEN_SUB_HAND];
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
* @details 最大4 回/モンスター/ターン、このルーチンを通る
*/
-static bool process_monster_attack_hit(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool process_monster_attack_hit(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
disturb(player_ptr, true, true);
if (effect_protecion_from_evil(player_ptr, monap_ptr)) {
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void process_monster_attack_evasion(PlayerType *player_ptr, monap_type *monap_ptr)
+static void process_monster_attack_evasion(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
switch (monap_ptr->method) {
case RaceBlowMethodType::HIT:
* 非自明な類の打撃については、そのダメージが 0 ならば基本的に知識が増えない.
* 但し、既に一定以上の知識があれば常に知識が増える(何をされたのか察知できる).
*/
-static void increase_blow_type_seen(PlayerType *player_ptr, monap_type *monap_ptr, const int ap_cnt)
+static void increase_blow_type_seen(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const int ap_cnt)
{
if (!is_original_ap_and_seen(player_ptr, monap_ptr->m_ptr) || monap_ptr->do_silly_attack) {
return;
* @brief モンスターからプレイヤーへの打撃処理本体
* @return 打撃に反応してプレイヤーがその場から離脱したかどうか
*/
-static bool process_monster_blows(PlayerType *player_ptr, monap_type *monap_ptr)
+static bool process_monster_blows(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
auto *r_ptr = &r_info[monap_ptr->m_ptr->r_idx];
for (auto ap_cnt = 0; ap_cnt < MAX_NUM_BLOWS; ap_cnt++) {
return false;
}
-static void postprocess_monster_blows(PlayerType *player_ptr, monap_type *monap_ptr)
+static void postprocess_monster_blows(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
SpellHex spell_hex(player_ptr, monap_ptr);
spell_hex.store_vengeful_damage(monap_ptr->get_damage);
*/
void make_attack_normal(PlayerType *player_ptr, short m_idx)
{
- monap_type tmp_monap;
- monap_type *monap_ptr = initialize_monap_type(player_ptr, &tmp_monap, m_idx);
+ MonsterAttackPlayer tmp_monap;
+ MonsterAttackPlayer *monap_ptr = initialize_MonsterAttackPlayer(player_ptr, &tmp_monap, m_idx);
if (!check_no_blow(player_ptr, monap_ptr)) {
return;
}
#include "timed-effect/timed-effects.h"
#include "view/display-messages.h"
-void process_blind_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_blind_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_resist_blind(player_ptr) || check_multishadow(player_ptr)) {
return;
monap_ptr->obvious = true;
}
-void process_terrify_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_terrify_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (check_multishadow(player_ptr)) {
return;
}
}
-void process_paralyze_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_paralyze_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (check_multishadow(player_ptr)) {
return;
}
}
-void process_lose_all_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_lose_all_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (do_dec_stat(player_ptr, A_STR)) {
monap_ptr->obvious = true;
}
}
-void process_stun_attack(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_stun_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_resist_sound(player_ptr) || check_multishadow(player_ptr)) {
return;
* @param player_ptr プレイヤーへの参照ポインタ
* @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
*/
-static void describe_disability(PlayerType *player_ptr, monap_type *monap_ptr)
+static void describe_disability(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
int stat = randint0(6);
switch (stat) {
}
}
-void process_monster_attack_time(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_monster_attack_time(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_resist_time(player_ptr) || check_multishadow(player_ptr)) {
return;
#include "system/angband.h"
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
class PlayerType;
-void process_blind_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_terrify_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_paralyze_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_lose_all_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_stun_attack(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_monster_attack_time(PlayerType *player_ptr, monap_type *monap_ptr);
+void process_blind_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_terrify_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_paralyze_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_lose_all_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_stun_attack(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_monster_attack_time(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
* @details 減衰の計算式がpoisではなくnukeなのは仕様 (1/3では減衰が強すぎると判断したため)
*/
-static void calc_blow_poison(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_poison(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (monap_ptr->explode)
return;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_disenchant(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_disenchant(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (monap_ptr->explode)
return;
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
* @detals 魔道具使用能力向上フラグがあれば、吸収対象のアイテムをスキャンされる回数が半分で済む
*/
-static void calc_blow_un_power(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_un_power(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
int damage_ratio = 1000;
if (has_dec_mana(player_ptr))
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_blind(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_blind(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_resist_blind(player_ptr))
monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_confusion(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_confusion(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (monap_ptr->explode) {
return;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_fear(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_fear(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_resist_fear(player_ptr))
monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_paralysis(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_paralysis(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (has_free_act(player_ptr))
monap_ptr->damage = monap_ptr->damage * (randint1(4) + 3) / 8;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_drain_exp(PlayerType *player_ptr, monap_type *monap_ptr, const int drain_value, const int hold_exp_prob)
+static void calc_blow_drain_exp(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const int drain_value, const int hold_exp_prob)
{
int32_t d = damroll(drain_value, 6) + (player_ptr->exp / 100) * MON_DRAIN_LIFE;
monap_ptr->obvious = true;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_time(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_time(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (monap_ptr->explode)
return;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_drain_life(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_drain_life(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
int32_t d = damroll(60, 6) + (player_ptr->exp / 100) * MON_DRAIN_LIFE;
monap_ptr->obvious = true;
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-static void calc_blow_drain_mana(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_drain_mana(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
monap_ptr->obvious = true;
int damage_ratio = 100;
update_smart_learn(player_ptr, monap_ptr->m_idx, DRS_MANA);
}
-static void calc_blow_inertia(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_inertia(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if ((player_ptr->fast > 0) || (player_ptr->pspeed >= 130))
monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9;
/*!
* @brief 空腹進行度を計算する (急速回復があれば+100%、遅消化があれば-50%)
*/
-static void calc_blow_hungry(PlayerType *player_ptr, monap_type *monap_ptr)
+static void calc_blow_hungry(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (player_ptr->regenerate)
monap_ptr->damage = monap_ptr->damage * 2;
process_monster_attack_hungry(player_ptr, monap_ptr);
}
-void switch_monster_blow_to_player(PlayerType *player_ptr, monap_type *monap_ptr)
+void switch_monster_blow_to_player(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
switch (monap_ptr->effect) {
case RaceBlowEffectType::NONE:
#pragma once
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
class PlayerType;
-void switch_monster_blow_to_player(PlayerType *player_ptr, monap_type *monap_ptr);
+void switch_monster_blow_to_player(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
#include "system/monster-type-definition.h"
#include "system/player-type-definition.h"
-monap_type *initialize_monap_type(PlayerType *player_ptr, monap_type *monap_ptr, MONSTER_IDX m_idx)
+MonsterAttackPlayer *initialize_MonsterAttackPlayer(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, MONSTER_IDX m_idx)
{
#ifdef JP
monap_ptr->abbreviate = 0;
#include "monster-attack/monster-attack-types.h"
#include "system/angband.h"
-/* MONster-Attack-Player、地図のMAPと紛らわしいのでmonapとした */
struct monster_type;
struct object_type;
-typedef struct monap_type {
+class MonsterAttackPlayer {
+public:
#ifdef JP
int abbreviate; // 2回目以降の省略表現フラグ.
#endif
ARMOUR_CLASS ac;
bool alive;
bool fear;
-} monap_type;
+};
class PlayerType;
-monap_type *initialize_monap_type(PlayerType *player_ptr, monap_type *monap_ptr, MONSTER_IDX m_idx);
+MonsterAttackPlayer *initialize_MonsterAttackPlayer(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, MONSTER_IDX m_idx);
#include "view/display-messages.h"
#include "world/world-object.h"
-void process_eat_gold(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_eat_gold(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (!player_ptr->paralyzed && (randint0(100) < (adj_dex_safe[player_ptr->stat_index[A_DEX]] + player_ptr->lev))) {
msg_print(_("しかし素早く財布を守った!", "You quickly protect your money pouch!"));
* @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
* @return 盗まれたらTRUE、何も盗まれなかったらFALSE
*/
-bool check_eat_item(PlayerType *player_ptr, monap_type *monap_ptr)
+bool check_eat_item(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (monster_confused_remaining(monap_ptr->m_ptr))
return false;
* @param player_ptr プレイヤーへの参照ポインタ
* @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
*/
-static void move_item_to_monster(PlayerType *player_ptr, monap_type *monap_ptr, const OBJECT_IDX o_idx)
+static void move_item_to_monster(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const OBJECT_IDX o_idx)
{
if (o_idx == 0)
return;
* @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
* @details eatとあるがお金や食べ物と違ってなくならない、盗んだモンスターを倒せば取り戻せる
*/
-void process_eat_item(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_eat_item(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
for (int i = 0; i < 10; i++) {
OBJECT_IDX o_idx;
}
}
-void process_eat_food(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_eat_food(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
for (int i = 0; i < 10; i++) {
INVENTORY_IDX i_idx = (INVENTORY_IDX)randint0(INVEN_PACK);
}
}
-void process_eat_lite(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_eat_lite(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if ((monap_ptr->o_ptr->xtra4 <= 0) || monap_ptr->o_ptr->is_fixed_artifact())
return;
* @details 魔道具使用能力向上フラグがあれば、吸収量は全部ではない
* 詳細はOSDN #40911の議論を参照のこと
*/
-bool process_un_power(PlayerType *player_ptr, monap_type *monap_ptr)
+bool process_un_power(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (((monap_ptr->o_ptr->tval != ItemKindType::STAFF) && (monap_ptr->o_ptr->tval != ItemKindType::WAND)) || (monap_ptr->o_ptr->pval == 0))
return false;
}
}
-void process_drain_life(PlayerType *player_ptr, monap_type *monap_ptr, const bool resist_drain)
+void process_drain_life(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const bool resist_drain)
{
if ((monap_ptr->damage <= 5) || resist_drain)
return;
msg_format(_("%sは体力を回復したようだ。", "%^s appears healthier."), monap_ptr->m_name);
}
-void process_drain_mana(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_drain_mana(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if (check_multishadow(player_ptr)) {
msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", "The attack hits Shadow, but you are unharmed!"));
* @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
* @details 空腹、衰弱の一歩手前で止める優しさは残す。
*/
-void process_monster_attack_hungry(PlayerType *player_ptr, monap_type *monap_ptr)
+void process_monster_attack_hungry(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
msg_format(_("あなたは腹が減った!", "You feel hungry!"));
auto subtracted_food = static_cast<int16_t>(player_ptr->food - monap_ptr->damage);
#include "system/angband.h"
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
class PlayerType;
-void process_eat_gold(PlayerType *player_ptr, monap_type *monap_ptr);
-bool check_eat_item(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_eat_item(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_eat_food(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_eat_lite(PlayerType *player_ptr, monap_type *monap_ptr);
+void process_eat_gold(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+bool check_eat_item(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_eat_item(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_eat_food(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_eat_lite(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
-bool process_un_power(PlayerType *player_ptr, monap_type *monap_ptr);
+bool process_un_power(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
bool check_drain_hp(PlayerType *player_ptr, const int32_t d);
-void process_drain_life(PlayerType *player_ptr, monap_type *monap_ptr, const bool resist_drain);
-void process_drain_mana(PlayerType *player_ptr, monap_type *monap_ptr);
-void process_monster_attack_hungry(PlayerType *player_ptr, monap_type *monap_ptr);
+void process_drain_life(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr, const bool resist_drain);
+void process_drain_mana(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
+void process_monster_attack_hungry(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
* @param player_ptr プレイヤーへの参照ポインタ
* @param monap_ptr モンスターからプレイヤーへの直接攻撃構造体への参照ポインタ
*/
-void check_fall_off_horse(PlayerType *player_ptr, monap_type *monap_ptr)
+void check_fall_off_horse(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
{
if ((player_ptr->riding == 0) || (monap_ptr->damage == 0))
return;
#include "system/angband.h"
-typedef struct monap_type monap_type;
+class MonsterAttackPlayer;
class PlayerType;
-void check_fall_off_horse(PlayerType *player_ptr, monap_type *monap_ptr);
+void check_fall_off_horse(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
bool process_fall_off_horse(PlayerType *player_ptr, HIT_POINT dam, bool force);
}
}
-SpellHex::SpellHex(PlayerType *player_ptr, monap_type *monap_ptr)
+SpellHex::SpellHex(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr)
: player_ptr(player_ptr)
, monap_ptr(monap_ptr)
{
REVENGE = 2,
};
-struct monap_type;
+class MonsterAttackPlayer;
class PlayerType;
struct spell_hex_data_type;
class SpellHex {
public:
SpellHex(PlayerType *player_ptr);
- SpellHex(PlayerType *player_ptr, monap_type *monap_ptr);
+ SpellHex(PlayerType *player_ptr, MonsterAttackPlayer *monap_ptr);
virtual ~SpellHex() = default;
bool stop_spells_with_selection();
private:
PlayerType *player_ptr;
std::vector<int> casting_spells;
- monap_type *monap_ptr = nullptr;
+ MonsterAttackPlayer *monap_ptr = nullptr;
std::shared_ptr<spell_hex_data_type> spell_hex_data;
std::tuple<bool, bool, char> select_spell_stopping(char *out_val);