1 #include "monster-floor/monster-death-util.h"
2 #include "monster-race/monster-race.h"
3 #include "monster-race/race-flags1.h"
4 #include "monster-race/race-indice-types.h"
5 #include "monster/monster-info.h"
6 #include "monster/smart-learn-types.h"
7 #include "system/floor-type-definition.h"
8 #include "system/monster-entity.h"
9 #include "system/monster-race-info.h"
10 #include "system/player-type-definition.h"
11 #include "util/bit-flags-calculator.h"
14 * @brief モンスターを倒した際の財宝svalを返す
15 * @param r_idx 倒したモンスターの種族ID
18 * Hack -- Return the "automatic coin type" of a monster race
19 * Used to allocate proper treasure when "Creeping coins" die
20 * Note the use of actual "monster names"
22 static OBJECT_SUBTYPE_VALUE get_coin_type(MonsterRaceId r_idx)
25 case MonsterRaceId::COPPER_COINS:
27 case MonsterRaceId::SILVER_COINS:
29 case MonsterRaceId::GOLD_COINS:
31 case MonsterRaceId::MITHRIL_COINS:
32 case MonsterRaceId::MITHRIL_GOLEM:
34 case MonsterRaceId::ADAMANT_COINS:
41 monster_death_type *initialize_monster_death_type(PlayerType *player_ptr, monster_death_type *md_ptr, MONSTER_IDX m_idx, bool drop_item)
43 auto *floor_ptr = player_ptr->current_floor_ptr;
44 md_ptr->m_idx = m_idx;
45 md_ptr->m_ptr = &floor_ptr->m_list[m_idx];
46 md_ptr->r_ptr = &monraces_info[md_ptr->m_ptr->r_idx];
47 md_ptr->do_gold = (md_ptr->r_ptr->drop_flags.has_none_of({ MonsterDropType::ONLY_ITEM, MonsterDropType::DROP_GOOD, MonsterDropType::DROP_GREAT }));
48 md_ptr->do_item = (md_ptr->r_ptr->drop_flags.has_not(MonsterDropType::ONLY_GOLD) || md_ptr->r_ptr->drop_flags.has_any_of({ MonsterDropType::DROP_GOOD, MonsterDropType::DROP_GREAT }));
49 md_ptr->cloned = md_ptr->m_ptr->mflag2.has(MonsterConstantFlagType::CLONED);
50 md_ptr->force_coin = get_coin_type(md_ptr->m_ptr->r_idx);
51 md_ptr->drop_chosen_item = drop_item && !md_ptr->cloned && !floor_ptr->inside_arena && !player_ptr->phase_out && !md_ptr->m_ptr->is_pet();