Skip to content

Commit

Permalink
Merge pull request #5343 from sikabane-works/merge/heng#4438
Browse files Browse the repository at this point in the history
変愚「set_target()(及びreset_target())、set_friendly() をMonsterEntity に組み込んだ #4438」のマージ
  • Loading branch information
sikabane-works authored Sep 9, 2024
2 parents 2ae6b5e + b18a203 commit 3c82faa
Show file tree
Hide file tree
Showing 16 changed files with 43 additions and 46 deletions.
2 changes: 1 addition & 1 deletion src/combat/shoot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -860,7 +860,7 @@ void exe_fire(PlayerType *player_ptr, INVENTORY_IDX i_idx, ItemEntity *j_ptr, SP
msg_format(_("%s^は恐怖して逃げ出した!", "%s^ flees in terror!"), m_name.data());
}

set_target(m_ptr, player_ptr->y, player_ptr->x);
m_ptr->set_target(player_ptr->y, player_ptr->x);

/* Sniper */
if (snipe_type == SP_RUSH) {
Expand Down
4 changes: 2 additions & 2 deletions src/effect/effect-monster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -640,15 +640,15 @@ static void postprocess_by_effected_pet(PlayerType *player_ptr, EffectMonster *e

if (is_player(em_ptr->src_idx)) {
if (!(em_ptr->flag & PROJECT_NO_HANGEKI)) {
set_target(m_ptr, monster_target_y, monster_target_x);
m_ptr->set_target(monster_target_y, monster_target_x);
}

return;
}

const auto &m_caster_ref = *em_ptr->m_caster_ptr;
if (is_monster(em_ptr->src_idx) && m_caster_ref.is_pet() && !player_ptr->is_located_at({ m_ptr->target_y, m_ptr->target_x })) {
set_target(m_ptr, m_caster_ref.fy, m_caster_ref.fx);
m_ptr->set_target(m_caster_ref.fy, m_caster_ref.fx);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/floor/floor-generator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ static void generate_gambling_arena(PlayerType *player_ptr)
for (MONSTER_IDX i = 0; i < 4; i++) {
const auto m_idx = place_specific_monster(player_ptr, 0, player_ptr->y + 8 + (i / 2) * 4, player_ptr->x - 2 + (i % 2) * 4, battle_mon_list[i], (PM_NO_KAGE | PM_NO_PET));
if (m_idx) {
set_friendly(&floor_ptr->m_list[*m_idx]);
floor_ptr->m_list[*m_idx].set_friendly();
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/melee/melee-postprocess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ void mon_take_hit_mon(PlayerType *player_ptr, MONSTER_IDX m_idx, int dam, bool *
if ((dam > 0) && !m_ptr->is_pet() && !m_ptr->is_friendly() && (mam_pp_ptr->src_idx != m_idx)) {
const auto &m_ref = floor_ptr->m_list[src_idx];
if (m_ref.is_pet() && !player_ptr->is_located_at({ m_ptr->target_y, m_ptr->target_x })) {
set_target(m_ptr, m_ref.fy, m_ref.fx);
m_ptr->set_target(m_ref.fy, m_ref.fx);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/melee/melee-spell-flags-checker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ bool check_melee_spell_set(PlayerType *player_ptr, melee_spell_type *ms_ptr)

ms_ptr->y = ms_ptr->t_ptr->fy;
ms_ptr->x = ms_ptr->t_ptr->fx;
reset_target(ms_ptr->m_ptr);
ms_ptr->m_ptr->reset_target();
ms_ptr->ability_flags.reset({ MonsterAbilityType::WORLD, MonsterAbilityType::TRAPS, MonsterAbilityType::FORGET });
if (ms_ptr->ability_flags.has(MonsterAbilityType::BR_LITE) && !los(player_ptr, ms_ptr->m_ptr->fy, ms_ptr->m_ptr->fx, ms_ptr->t_ptr->fy, ms_ptr->t_ptr->fx)) {
ms_ptr->ability_flags.reset(MonsterAbilityType::BR_LITE);
Expand Down
21 changes: 0 additions & 21 deletions src/monster-floor/monster-move.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -588,24 +588,3 @@ void process_speak_sound(PlayerType *player_ptr, MONSTER_IDX m_idx, POSITION oy,

speaking(p_ptr, monster);
}

/*!
* @brief モンスターの目標地点をセットする / Set the target of counter attack
* @param m_ptr モンスターの参照ポインタ
* @param y 目標y座標
* @param x 目標x座標
*/
void set_target(MonsterEntity *m_ptr, POSITION y, POSITION x)
{
m_ptr->target_y = y;
m_ptr->target_x = x;
}

/*!
* @brief モンスターの目標地点をリセットする / Reset the target of counter attack
* @param m_ptr モンスターの参照ポインタ
*/
void reset_target(MonsterEntity *m_ptr)
{
set_target(m_ptr, 0, 0);
}
2 changes: 0 additions & 2 deletions src/monster-floor/monster-move.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,3 @@ struct turn_flags;
void activate_explosive_rune(PlayerType *player_ptr, const Pos2D &pos, const MonsterRaceInfo &monrace);
bool process_monster_movement(PlayerType *player_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx, DIRECTION *mm, const Pos2D &pos, int *count);
void process_speak_sound(PlayerType *player_ptr, MONSTER_IDX m_idx, POSITION oy, POSITION ox, bool aware);
void set_target(MonsterEntity *m_ptr, POSITION y, POSITION x);
void reset_target(MonsterEntity *m_ptr);
4 changes: 2 additions & 2 deletions src/monster-floor/one-monster-placer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ std::optional<MONSTER_IDX> place_monster_one(PlayerType *player_ptr, MONSTER_IDX
}

m_ptr->cdis = 0;
reset_target(m_ptr);
m_ptr->reset_target();
m_ptr->nickname.clear();
m_ptr->exp = 0;

Expand All @@ -385,7 +385,7 @@ std::optional<MONSTER_IDX> place_monster_one(PlayerType *player_ptr, MONSTER_IDX
set_pet(player_ptr, m_ptr);
} else if ((is_player(src_idx) && new_monrace.behavior_flags.has(MonsterBehaviorType::FRIENDLY)) || is_friendly_idx(player_ptr, src_idx) || any_bits(mode, PM_FORCE_FRIENDLY)) {
if (!monster_has_hostile_align(player_ptr, nullptr, 0, -1, &new_monrace) && !player_ptr->current_floor_ptr->inside_arena) {
set_friendly(m_ptr);
m_ptr->set_friendly();
}
}

Expand Down
9 changes: 0 additions & 9 deletions src/monster/monster-info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,6 @@
#include "util/bit-flags-calculator.h"
#include "util/string-processor.h"

/*!
* @brief モンスターを友好的にする
* @param m_ptr モンスター情報構造体の参照ポインタ
*/
void set_friendly(MonsterEntity *m_ptr)
{
m_ptr->mflag2.set(MonsterConstantFlagType::FRIENDLY);
}

/*!
* @brief モンスターが地形を踏破できるかどうかを返す
* Check if monster can cross terrain
Expand Down
2 changes: 1 addition & 1 deletion src/monster/monster-processor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -871,7 +871,7 @@ void sweep_monster_process(PlayerType *player_ptr)
}

process_monster(player_ptr, m_idx);
reset_target(m_ptr);
m_ptr->reset_target();
if (player_ptr->no_flowed && one_in_(3)) {
m_ptr->mflag2.set(MonsterConstantFlagType::NOFLOW);
}
Expand Down
2 changes: 1 addition & 1 deletion src/monster/monster-status-setter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ bool set_monster_timewalk(PlayerType *player_ptr, MONSTER_IDX m_idx, int num, bo
}

process_monster(player_ptr, world.timewalk_m_idx);
reset_target(m_ptr);
m_ptr->reset_target();
handle_stuff(player_ptr);
if (vs_player) {
term_xtra(TERM_XTRA_DELAY, 500);
Expand Down
1 change: 0 additions & 1 deletion src/monster/monster-status-setter.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
enum class MonsterRaceId : int16_t;
class MonsterEntity;
class PlayerType;
void set_friendly(MonsterEntity *m_ptr);
void set_pet(PlayerType *player_ptr, MonsterEntity *m_ptr);
void anger_monster(PlayerType *player_ptr, MonsterEntity *m_ptr);
bool set_monster_csleep(PlayerType *player_ptr, MONSTER_IDX m_idx, int v);
Expand Down
4 changes: 2 additions & 2 deletions src/mspell/mspell-attack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ bool make_attack_spell(PlayerType *player_ptr, MONSTER_IDX m_idx)
msa_type tmp_msa(player_ptr, m_idx);
msa_type *msa_ptr = &tmp_msa;
if (msa_ptr->m_ptr->is_confused()) {
reset_target(msa_ptr->m_ptr);
msa_ptr->m_ptr->reset_target();
return false;
}

Expand All @@ -328,7 +328,7 @@ bool make_attack_spell(PlayerType *player_ptr, MONSTER_IDX m_idx)
return false;
}

reset_target(msa_ptr->m_ptr);
msa_ptr->m_ptr->reset_target();
msa_ptr->rlev = ((msa_ptr->r_ptr->level >= 1) ? msa_ptr->r_ptr->level : 1);
set_no_magic_mask(msa_ptr);
decide_lite_area(player_ptr, msa_ptr);
Expand Down
2 changes: 1 addition & 1 deletion src/spell-kind/spells-teleport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ bool teleport_away(PlayerType *player_ptr, MONSTER_IDX m_idx, POSITION dis, tele
m_ptr->fy = ny;
m_ptr->fx = nx;

reset_target(m_ptr);
m_ptr->reset_target();
update_monster(player_ptr, m_idx, true);
lite_spot(player_ptr, oy, ox);
lite_spot(player_ptr, ny, nx);
Expand Down
27 changes: 27 additions & 0 deletions src/system/monster-entity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -479,3 +479,30 @@ std::optional<bool> MonsterEntity::order_pet_hp(const MonsterEntity &other) cons

return std::nullopt;
}

/*!
* @brief モンスターの目標地点をセットする / Set the target of counter attack
* @param y 目標y座標
* @param x 目標x座標
*/
void MonsterEntity::set_target(POSITION y, POSITION x)
{
this->target_y = y;
this->target_x = x;
}

/*!
* @brief モンスターの目標地点をリセットする / Reset the target of counter attack
*/
void MonsterEntity::reset_target()
{
this->set_target(0, 0);
}

/*!
* @brief モンスターを友好的にする
*/
void MonsterEntity::set_friendly()
{
this->mflag2.set(MonsterConstantFlagType::FRIENDLY);
}
3 changes: 3 additions & 0 deletions src/system/monster-entity.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ class MonsterEntity {
void set_hostile();
void make_lore_treasure(int num_item, int num_gold) const;
void reset_chameleon_polymorph();
void set_target(POSITION y, POSITION x);
void reset_target();
void set_friendly();

private:
std::optional<bool> order_pet_named(const MonsterEntity &other) const;
Expand Down

0 comments on commit 3c82faa

Please sign in to comment.