D:$ hindered.
D:遥か東の国の盗賊が身につける仕事着だ。
D:その漆黒の装いは闇に溶け込み、いかなる体の動きをも邪魔しない。
+
+N:269:『レイトウメカジキ』
+E:Frozen Swordfish
+I:23:24:2
+W:30:5:200:48000
+P:0:3d11:10:10:0
+F:STR | CHR | HIDE_TYPE | BRAND_COLD | RES_COLD | SHOW_MODS |
+D:$A frozen Swordfish wielded as a great sword. Proof of the owner's angling mastery.
+D:メカジキを凍らせたもの。最強釣り師の証でもある。分類は大剣。
ART_MILIM = 246,
ART_ROBINTON = 251,
ART_ICINGDEATH = 259,
- ART_TWINKLE = 260
+ ART_TWINKLE = 260,
+ ART_FROZEN_SWORDFISH = 269
};
if (em_ptr->who > 0)
monster_gain_exp(player_ptr, em_ptr->who, em_ptr->m_ptr->r_idx);
- monster_death(player_ptr, em_ptr->g_ptr->m_idx, false);
+ monster_death(player_ptr, em_ptr->g_ptr->m_idx, false, em_ptr->effect_type);
delete_monster_idx(player_ptr, em_ptr->g_ptr->m_idx);
if (sad)
msg_print(_("少し悲しい気分がした。", "You feel sad for a moment."));
#include "player-info/class-info.h"
#include "player-info/race-types.h"
#include "player/player-personality-types.h"
+#include "spell/spell-types.h"
#include "system/floor-type-definition.h"
#include "system/monster-race-definition.h"
#include "system/monster-type-definition.h"
*(mam_pp_ptr->dead) = true;
print_monster_dead_by_monster(player_ptr, mam_pp_ptr);
monster_gain_exp(player_ptr, mam_pp_ptr->who, mam_pp_ptr->m_ptr->r_idx);
- monster_death(player_ptr, mam_pp_ptr->m_idx, false);
+ monster_death(player_ptr, mam_pp_ptr->m_idx, false, GF_NONE);
delete_monster_idx(player_ptr, mam_pp_ptr->m_idx);
*(mam_pp_ptr->fear) = false;
return true;
continue;
}
- artifact_type *a_ptr = &a_info[a_idx];
- if (a_ptr->cur_num == 1)
- continue;
+ if (drop_single_artifact(player_ptr, md_ptr, a_idx))
+ break;
+ }
- if (create_named_art(player_ptr, a_idx, md_ptr->md_y, md_ptr->md_x)) {
- a_ptr->cur_num = 1;
- if (w_ptr->character_dungeon)
- a_ptr->floor_id = player_ptr->floor_id;
+ return a_idx;
+}
- break;
- }
+/*!
+ * @brief 特定アーティファクトのドロップ処理
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param md_ptr モンスター死亡構造体への参照ポインタ
+ * @param a_ix ドロップを試みるアーティファクトID
+ * @return ドロップするならtrue
+ */
+bool drop_single_artifact(player_type *player_ptr, monster_death_type *md_ptr, ARTIFACT_IDX a_idx)
+{
+ artifact_type *a_ptr = &a_info[a_idx];
+ if (a_ptr->cur_num == 1)
+ return false;
+ if (create_named_art(player_ptr, a_idx, md_ptr->md_y, md_ptr->md_x)) {
+ a_ptr->cur_num = 1;
+
+ if (w_ptr->character_dungeon) {
+ a_ptr->floor_id = player_ptr->floor_id;
+ }
+
if (!preserve_mode) {
a_ptr->cur_num = 1;
- break;
}
- }
- return a_idx;
+ return true;
+ }
+ return false;
}
static KIND_OBJECT_IDX drop_dungeon_final_artifact(player_type *player_ptr, monster_death_type *md_ptr, ARTIFACT_IDX a_idx)
* it drops all of its objects, which may disappear in crowded rooms.
* </pre>
*/
-void monster_death(player_type *player_ptr, MONSTER_IDX m_idx, bool drop_item)
+void monster_death(player_type *player_ptr, MONSTER_IDX m_idx, bool drop_item, EFFECT_ID effect_type)
{
monster_death_type tmp_md;
monster_death_type *md_ptr = initialize_monster_death_type(player_ptr, &tmp_md, m_idx, drop_item);
drop_corpse(player_ptr, md_ptr);
monster_drop_carried_objects(player_ptr, md_ptr->m_ptr);
decide_drop_quality(md_ptr);
- switch_special_death(player_ptr, md_ptr);
+ switch_special_death(player_ptr, md_ptr, effect_type);
drop_artifact(player_ptr, md_ptr);
int drop_numbers = decide_drop_numbers(player_ptr, md_ptr, drop_item);
coin_type = md_ptr->force_coin;
#pragma once
#include "system/angband.h"
+#include "monster-floor/monster-death-util.h"
struct player_type;
-void monster_death(player_type *player_ptr, MONSTER_IDX m_idx, bool drop_item);
+void monster_death(player_type *player_ptr, MONSTER_IDX m_idx, bool drop_item, EFFECT_ID effect_type);
+bool drop_single_artifact(player_type *player_ptr, monster_death_type *md_ptr, ARTIFACT_IDX a_idx);
concptr extract_note_dies(MONRACE_IDX r_idx);
#include "monster/smart-learn-types.h"
#include "mspell/assign-monster-spell.h"
#include "mspell/mspell.h"
+#include "spell/spell-types.h"
#include "spell-kind/spells-teleport.h"
#include "system/floor-type-definition.h"
#include "system/monster-race-definition.h"
msg_format(_("%sは消え去った!", "%^s disappears!"), m_name);
}
- monster_death(player_ptr, m_idx, false);
+ monster_death(player_ptr, m_idx, false, GF_NONE);
delete_monster_idx(player_ptr, m_idx);
if (is_pet(m_ptr) && !(m_ptr->ml))
msg_print(_("少しの間悲しい気分になった。", "You feel sad for a moment."));
#include "grid/grid.h"
#include "main/sound-definitions-table.h"
#include "main/sound-of-music.h"
+#include "monster-floor/monster-death.h"
#include "monster-floor/monster-death-util.h"
#include "monster-floor/monster-summon.h"
#include "monster-floor/place-monster-types.h"
}
}
-void switch_special_death(player_type *player_ptr, monster_death_type *md_ptr)
+static void on_dead_swordfish(player_type *player_ptr, monster_death_type *md_ptr, EFFECT_ID effect_type)
+{
+ if ((effect_type != GF_COLD) || (randint1(100) >= 10))
+ return;
+
+ drop_single_artifact(player_ptr, md_ptr, ART_FROZEN_SWORDFISH);
+}
+
+void switch_special_death(player_type *player_ptr, monster_death_type *md_ptr, EFFECT_ID effect_type)
{
switch (md_ptr->m_ptr->r_idx) {
case MON_PINK_HORROR:
case MON_CHEST_MIMIC_11:
on_dead_chest_mimic(player_ptr, md_ptr);
break;
+ case MON_SWORDFISH:
+ on_dead_swordfish(player_ptr, md_ptr, effect_type);
+ break;
default:
on_dead_mimics(player_ptr, md_ptr);
return;
#pragma once
+#include "system/angband.h"
typedef struct monster_death_type monster_death_type;
struct player_type;
-void switch_special_death(player_type *player_ptr, monster_death_type *md_ptr);
+void switch_special_death(player_type *player_ptr, monster_death_type *md_ptr, EFFECT_ID effect_type);
MON_LOUSE = 69,
MON_PIRANHA = 70,
MON_COPPER_COINS = 85,
+ MON_SWORDFISH = 88,
MON_NOV_PALADIN = 97,
MON_NOV_PRIEST_G = 109,
MON_SILVER_COINS = 117,
sound(SOUND_KILL);
this->show_kill_message(note, m_name);
this->show_bounty_message(m_name);
- monster_death(this->player_ptr, this->m_idx, true);
+ monster_death(this->player_ptr, this->m_idx, true, this->effect_type);
this->summon_special_unique();
this->get_exp_from_mon(exp_mon, exp_mon->max_maxhp * 2);
*this->fear = false;