OSDN Git Service

7f7078a82058e80897607ddf861b1a1226cbb5de
[hengband/hengband.git] / src / monster-floor / monster-death.c
1 #include "monster-floor/monster-death.h"
2 #include "art-definition/art-armor-types.h"
3 #include "art-definition/art-bow-types.h"
4 #include "art-definition/art-protector-types.h"
5 #include "art-definition/art-weapon-types.h"
6 #include "art-definition/random-art-effects.h"
7 #include "dungeon/dungeon.h"
8 #include "dungeon/quest.h"
9 #include "effect/effect-characteristics.h"
10 #include "floor/floor-object.h"
11 #include "floor/floor.h"
12 #include "io/write-diary.h"
13 #include "main/music-definitions-table.h"
14 #include "market/arena-info-table.h"
15 #include "lore/lore-store.h"
16 #include "monster-race/monster-race-hook.h"
17 #include "monster-race/race-flags1.h"
18 #include "monster-race/race-flags2.h"
19 #include "monster-race/race-flags7.h"
20 #include "monster-race/race-flags9.h"
21 #include "monster-race/race-indice-types.h"
22 #include "monster/monster-describer.h"
23 #include "monster/monster-description-types.h"
24 #include "monster/monster-flag-types.h"
25 #include "monster-floor/monster-generator.h"
26 #include "monster/monster-info.h"
27 #include "monster/monster-list.h"
28 #include "monster-floor/monster-object.h"
29 #include "monster-floor/place-monster-types.h"
30 #include "monster/smart-learn-types.h"
31 #include "object-enchant/apply-magic.h"
32 #include "object-enchant/artifact.h"
33 #include "object-enchant/item-apply-magic.h"
34 #include "object/object-generator.h"
35 #include "object/object-kind-hook.h"
36 #include "pet/pet-fall-off.h"
37 #include "player/patron.h"
38 #include "spell/process-effect.h"
39 #include "spell/spells-summon.h"
40 #include "spell/spells-type.h"
41 #include "sv-definition/sv-other-types.h"
42 #include "sv-definition/sv-protector-types.h"
43 #include "sv-definition/sv-scroll-types.h"
44 #include "sv-definition/sv-weapon-types.h"
45 #include "system/monster-type-definition.h"
46 #include "system/system-variables.h"
47 #include "world/world.h"
48
49 /*!
50  * @brief モンスターを倒した際の財宝svalを返す
51  * @param r_idx 倒したモンスターの種族ID
52  * @return 財宝のsval
53  * @details
54  * Hack -- Return the "automatic coin type" of a monster race
55  * Used to allocate proper treasure when "Creeping coins" die
56  * Note the use of actual "monster names"
57  */
58 static OBJECT_SUBTYPE_VALUE get_coin_type(MONRACE_IDX r_idx)
59 {
60     switch (r_idx) {
61     case MON_COPPER_COINS:
62         return 2;
63     case MON_SILVER_COINS:
64         return 5;
65     case MON_GOLD_COINS:
66         return 10;
67     case MON_MITHRIL_COINS:
68     case MON_MITHRIL_GOLEM:
69         return 16;
70     case MON_ADAMANT_COINS:
71         return 17;
72     }
73
74     return 0;
75 }
76
77 /*!
78  * @brief モンスターが死亡した時の処理 /
79  * Handle the "death" of a monster.
80  * @param m_idx 死亡したモンスターのID
81  * @param drop_item TRUEならばモンスターのドロップ処理を行う
82  * @return 撃破されたモンスターの述語
83  * @details
84  * <pre>
85  * Disperse treasures centered at the monster location based on the
86  * various flags contained in the monster flags fields.
87  * Check for "Quest" completion when a quest monster is killed.
88  * Note that only the player can induce "monster_death()" on Uniques.
89  * Thus (for now) all Quest monsters should be Uniques.
90  * Note that monsters can now carry objects, and when a monster dies,
91  * it drops all of its objects, which may disappear in crowded rooms.
92  * </pre>
93  */
94 void monster_death(player_type *player_ptr, MONSTER_IDX m_idx, bool drop_item)
95 {
96     floor_type *floor_ptr = player_ptr->current_floor_ptr;
97     monster_type *m_ptr = &floor_ptr->m_list[m_idx];
98     monster_race *r_ptr = &r_info[m_ptr->r_idx];
99
100     bool do_gold = (!(r_ptr->flags1 & RF1_ONLY_ITEM));
101     bool do_item = (!(r_ptr->flags1 & RF1_ONLY_GOLD));
102     bool cloned = (m_ptr->smart & SM_CLONED) ? TRUE : FALSE;
103     int force_coin = get_coin_type(m_ptr->r_idx);
104
105     bool drop_chosen_item = drop_item && !cloned && !floor_ptr->inside_arena && !player_ptr->phase_out && !is_pet(m_ptr);
106
107     if (current_world_ptr->timewalk_m_idx && current_world_ptr->timewalk_m_idx == m_idx) {
108         current_world_ptr->timewalk_m_idx = 0;
109     }
110
111     if (r_ptr->flags7 & (RF7_LITE_MASK | RF7_DARK_MASK)) {
112         player_ptr->update |= (PU_MON_LITE);
113     }
114
115     POSITION y = m_ptr->fy;
116     POSITION x = m_ptr->fx;
117
118     if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname) {
119         GAME_TEXT m_name[MAX_NLEN];
120
121         monster_desc(player_ptr, m_name, m_ptr, MD_INDEF_VISIBLE);
122         exe_write_diary(player_ptr, DIARY_NAMED_PET, 3, m_name);
123     }
124
125     for (int i = 0; i < 4; i++) {
126         if (r_ptr->blow[i].method != RBM_EXPLODE)
127             continue;
128
129         BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
130         EFFECT_ID typ = mbe_info[r_ptr->blow[i].effect].explode_type;
131         DICE_NUMBER d_dice = r_ptr->blow[i].d_dice;
132         DICE_SID d_side = r_ptr->blow[i].d_side;
133         HIT_POINT damage = damroll(d_dice, d_side);
134
135         project(player_ptr, m_idx, 3, y, x, damage, typ, flg, -1);
136         break;
137     }
138
139     if (m_ptr->mflag2 & MFLAG2_CHAMELEON) {
140         choose_new_monster(player_ptr, m_idx, TRUE, MON_CHAMELEON);
141         r_ptr = &r_info[m_ptr->r_idx];
142     }
143
144     check_quest_completion(player_ptr, m_ptr);
145
146     object_type forge;
147     object_type *q_ptr;
148     if (floor_ptr->inside_arena && !is_pet(m_ptr)) {
149         player_ptr->exit_bldg = TRUE;
150         if (player_ptr->arena_number > MAX_ARENA_MONS) {
151             msg_print(_("素晴らしい!君こそ真の勝利者だ。", "You are a Genuine Champion!"));
152         } else {
153             msg_print(_("勝利!チャンピオンへの道を進んでいる。", "Victorious! You're on your way to becoming Champion."));
154         }
155
156         if (arena_info[player_ptr->arena_number].tval) {
157             q_ptr = &forge;
158             object_prep(q_ptr, lookup_kind(arena_info[player_ptr->arena_number].tval, arena_info[player_ptr->arena_number].sval));
159             apply_magic(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
160             (void)drop_near(player_ptr, q_ptr, -1, y, x);
161         }
162
163         if (player_ptr->arena_number > MAX_ARENA_MONS)
164             player_ptr->arena_number++;
165         player_ptr->arena_number++;
166         if (record_arena) {
167             GAME_TEXT m_name[MAX_NLEN];
168             monster_desc(player_ptr, m_name, m_ptr, MD_WRONGDOER_NAME);
169             exe_write_diary(player_ptr, DIARY_ARENA, player_ptr->arena_number, m_name);
170         }
171     }
172
173     if (m_idx == player_ptr->riding && process_fall_off_horse(player_ptr, -1, FALSE)) {
174         msg_print(_("地面に落とされた。", "You have fallen from the pet you were riding."));
175     }
176
177     bool is_drop_corpse = one_in_(r_ptr->flags1 & RF1_UNIQUE ? 1 : 4);
178     is_drop_corpse &= (r_ptr->flags9 & (RF9_DROP_CORPSE | RF9_DROP_SKELETON)) != 0;
179     is_drop_corpse &= !(floor_ptr->inside_arena || player_ptr->phase_out || cloned || ((m_ptr->r_idx == today_mon) && is_pet(m_ptr)));
180     if (is_drop_corpse) {
181         bool corpse = FALSE;
182
183         if (!(r_ptr->flags9 & RF9_DROP_SKELETON))
184             corpse = TRUE;
185         else if ((r_ptr->flags9 & RF9_DROP_CORPSE) && (r_ptr->flags1 & RF1_UNIQUE))
186             corpse = TRUE;
187         else if (r_ptr->flags9 & RF9_DROP_CORPSE) {
188             if ((0 - ((m_ptr->maxhp) / 4)) > m_ptr->hp) {
189                 if (one_in_(5))
190                     corpse = TRUE;
191             } else {
192                 if (!one_in_(5))
193                     corpse = TRUE;
194             }
195         }
196
197         q_ptr = &forge;
198         object_prep(q_ptr, lookup_kind(TV_CORPSE, (corpse ? SV_CORPSE : SV_SKELETON)));
199         apply_magic(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
200         q_ptr->pval = m_ptr->r_idx;
201         (void)drop_near(player_ptr, q_ptr, -1, y, x);
202     }
203
204     monster_drop_carried_objects(player_ptr, m_ptr);
205
206     u32b mo_mode = 0L;
207     if (r_ptr->flags1 & RF1_DROP_GOOD)
208         mo_mode |= AM_GOOD;
209     if (r_ptr->flags1 & RF1_DROP_GREAT)
210         mo_mode |= AM_GREAT;
211
212     switch (m_ptr->r_idx) {
213     case MON_PINK_HORROR: {
214         if (floor_ptr->inside_arena || player_ptr->phase_out)
215             break;
216
217         bool notice = FALSE;
218         for (int i = 0; i < 2; i++) {
219             POSITION wy = y, wx = x;
220             bool pet = is_pet(m_ptr);
221             BIT_FLAGS mode = 0L;
222
223             if (pet) {
224                 mode |= PM_FORCE_PET;
225             }
226
227             if (summon_specific(player_ptr, (pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode)) {
228                 if (player_can_see_bold(player_ptr, wy, wx))
229                     notice = TRUE;
230             }
231         }
232
233         if (notice) {
234             msg_print(_("ピンク・ホラーは分裂した!", "The Pink horror divides!"));
235         }
236
237         break;
238     }
239     case MON_BLOODLETTER: {
240         if (!drop_chosen_item || (randint1(100) >= 15))
241             break;
242
243         q_ptr = &forge;
244         object_prep(q_ptr, lookup_kind(TV_SWORD, SV_BLADE_OF_CHAOS));
245         apply_magic(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART | mo_mode);
246         (void)drop_near(player_ptr, q_ptr, -1, y, x);
247         break;
248     }
249     case MON_RAAL: {
250         if (!drop_chosen_item || (floor_ptr->dun_level <= 9))
251             break;
252
253         q_ptr = &forge;
254         object_wipe(q_ptr);
255         if ((floor_ptr->dun_level > 49) && one_in_(5))
256             get_obj_num_hook = kind_is_good_book;
257         else
258             get_obj_num_hook = kind_is_book;
259
260         make_object(player_ptr, q_ptr, mo_mode);
261         (void)drop_near(player_ptr, q_ptr, -1, y, x);
262         break;
263     }
264     case MON_DAWN: {
265         if (floor_ptr->inside_arena || player_ptr->phase_out)
266             break;
267         if (one_in_(7))
268             break;
269
270         POSITION wy = y, wx = x;
271         int attempts = 100;
272         bool pet = is_pet(m_ptr);
273         do {
274             scatter(player_ptr, &wy, &wx, y, x, 20, 0);
275         } while (!(in_bounds(floor_ptr, wy, wx) && is_cave_empty_bold2(player_ptr, wy, wx)) && --attempts);
276
277         if (attempts <= 0)
278             break;
279
280         BIT_FLAGS mode = 0L;
281         if (pet)
282             mode |= PM_FORCE_PET;
283
284         if (summon_specific(player_ptr, (pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode)) {
285             if (player_can_see_bold(player_ptr, wy, wx))
286                 msg_print(_("新たな戦士が現れた!", "A new warrior steps forth!"));
287         }
288
289         break;
290     }
291     case MON_UNMAKER: {
292         BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
293         (void)project(player_ptr, m_idx, 6, y, x, 100, GF_CHAOS, flg, -1);
294         break;
295     }
296     case MON_UNICORN_ORD:
297     case MON_MORGOTH:
298     case MON_ONE_RING: {
299         if (player_ptr->pseikaku != PERSONALITY_LAZY)
300             break;
301         if (!drop_chosen_item)
302             break;
303
304         ARTIFACT_IDX a_idx = 0;
305         artifact_type *a_ptr = NULL;
306         do {
307             switch (randint0(3)) {
308             case 0:
309                 a_idx = ART_NAMAKE_HAMMER;
310                 break;
311             case 1:
312                 a_idx = ART_NAMAKE_BOW;
313                 break;
314             case 2:
315                 a_idx = ART_NAMAKE_ARMOR;
316                 break;
317             }
318
319             a_ptr = &a_info[a_idx];
320         } while (a_ptr->cur_num);
321
322         if (create_named_art(player_ptr, a_idx, y, x)) {
323             a_ptr->cur_num = 1;
324             if (current_world_ptr->character_dungeon)
325                 a_ptr->floor_id = player_ptr->floor_id;
326         } else if (!preserve_mode)
327             a_ptr->cur_num = 1;
328
329         break;
330     }
331     case MON_SERPENT: {
332         if (!drop_chosen_item)
333             break;
334
335         q_ptr = &forge;
336         object_prep(q_ptr, lookup_kind(TV_HAFTED, SV_GROND));
337         q_ptr->name1 = ART_GROND;
338         apply_magic(player_ptr, q_ptr, -1, AM_GOOD | AM_GREAT);
339         (void)drop_near(player_ptr, q_ptr, -1, y, x);
340         q_ptr = &forge;
341         object_prep(q_ptr, lookup_kind(TV_CROWN, SV_CHAOS));
342         q_ptr->name1 = ART_CHAOS;
343         apply_magic(player_ptr, q_ptr, -1, AM_GOOD | AM_GREAT);
344         (void)drop_near(player_ptr, q_ptr, -1, y, x);
345         break;
346     }
347     case MON_B_DEATH_SWORD: {
348         if (!drop_chosen_item)
349             break;
350
351         q_ptr = &forge;
352         object_prep(q_ptr, lookup_kind(TV_SWORD, randint1(2)));
353         (void)drop_near(player_ptr, q_ptr, -1, y, x);
354         break;
355     }
356     case MON_A_GOLD:
357     case MON_A_SILVER: {
358         bool is_drop_can = drop_chosen_item;
359         bool is_silver = m_ptr->r_idx == MON_A_SILVER;
360         is_silver &= r_ptr->r_akills % 5 == 0;
361         is_drop_can &= (m_ptr->r_idx == MON_A_GOLD) || is_silver;
362         if (!is_drop_can)
363             break;
364
365         q_ptr = &forge;
366         object_prep(q_ptr, lookup_kind(TV_CHEST, SV_CHEST_KANDUME));
367         apply_magic(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
368         (void)drop_near(player_ptr, q_ptr, -1, y, x);
369         break;
370     }
371
372     case MON_ROLENTO: {
373         BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
374         (void)project(player_ptr, m_idx, 3, y, x, damroll(20, 10), GF_FIRE, flg, -1);
375         break;
376     }
377     default: {
378         if (!drop_chosen_item)
379             break;
380
381         switch (r_ptr->d_char) {
382         case '(': {
383             if (floor_ptr->dun_level <= 0)
384                 break;
385
386             q_ptr = &forge;
387             object_wipe(q_ptr);
388             get_obj_num_hook = kind_is_cloak;
389             make_object(player_ptr, q_ptr, mo_mode);
390             (void)drop_near(player_ptr, q_ptr, -1, y, x);
391             break;
392         }
393         case '/': {
394             if (floor_ptr->dun_level <= 4)
395                 break;
396
397             q_ptr = &forge;
398             object_wipe(q_ptr);
399             get_obj_num_hook = kind_is_polearm;
400             make_object(player_ptr, q_ptr, mo_mode);
401             (void)drop_near(player_ptr, q_ptr, -1, y, x);
402             break;
403         }
404         case '[': {
405             if (floor_ptr->dun_level <= 19)
406                 break;
407
408             q_ptr = &forge;
409             object_wipe(q_ptr);
410             get_obj_num_hook = kind_is_armor;
411             make_object(player_ptr, q_ptr, mo_mode);
412             (void)drop_near(player_ptr, q_ptr, -1, y, x);
413             break;
414         }
415         case '\\': {
416             if (floor_ptr->dun_level <= 4)
417                 break;
418             q_ptr = &forge;
419             object_wipe(q_ptr);
420             get_obj_num_hook = kind_is_hafted;
421             make_object(player_ptr, q_ptr, mo_mode);
422             (void)drop_near(player_ptr, q_ptr, -1, y, x);
423             break;
424         }
425         case '|': {
426             if (m_ptr->r_idx == MON_STORMBRINGER)
427                 break;
428
429             q_ptr = &forge;
430             object_wipe(q_ptr);
431             get_obj_num_hook = kind_is_sword;
432             make_object(player_ptr, q_ptr, mo_mode);
433             (void)drop_near(player_ptr, q_ptr, -1, y, x);
434             break;
435         }
436         }
437     }
438     }
439
440     if (drop_chosen_item) {
441         ARTIFACT_IDX a_idx = 0;
442         PERCENTAGE chance = 0;
443         for (int i = 0; i < 4; i++) {
444             if (!r_ptr->artifact_id[i])
445                 break;
446             a_idx = r_ptr->artifact_id[i];
447             chance = r_ptr->artifact_percent[i];
448             if (randint0(100) < chance || current_world_ptr->wizard) {
449                 artifact_type *a_ptr = &a_info[a_idx];
450                 if (!a_ptr->cur_num) {
451                     if (create_named_art(player_ptr, a_idx, y, x)) {
452                         a_ptr->cur_num = 1;
453                         if (current_world_ptr->character_dungeon)
454                             a_ptr->floor_id = player_ptr->floor_id;
455                     } else if (!preserve_mode) {
456                         a_ptr->cur_num = 1;
457                     }
458                 }
459             }
460         }
461
462         if ((r_ptr->flags7 & RF7_GUARDIAN) && (d_info[player_ptr->dungeon_idx].final_guardian == m_ptr->r_idx)) {
463             KIND_OBJECT_IDX k_idx = d_info[player_ptr->dungeon_idx].final_object != 0 ? d_info[player_ptr->dungeon_idx].final_object
464                                                                                       : lookup_kind(TV_SCROLL, SV_SCROLL_ACQUIREMENT);
465
466             if (d_info[player_ptr->dungeon_idx].final_artifact != 0) {
467                 a_idx = d_info[player_ptr->dungeon_idx].final_artifact;
468                 artifact_type *a_ptr = &a_info[a_idx];
469                 if (!a_ptr->cur_num) {
470                     if (create_named_art(player_ptr, a_idx, y, x)) {
471                         a_ptr->cur_num = 1;
472                         if (current_world_ptr->character_dungeon)
473                             a_ptr->floor_id = player_ptr->floor_id;
474                     } else if (!preserve_mode) {
475                         a_ptr->cur_num = 1;
476                     }
477
478                     if (!d_info[player_ptr->dungeon_idx].final_object)
479                         k_idx = 0;
480                 }
481             }
482
483             if (k_idx != 0) {
484                 q_ptr = &forge;
485                 object_prep(q_ptr, k_idx);
486                 apply_magic(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART | AM_GOOD);
487                 (void)drop_near(player_ptr, q_ptr, -1, y, x);
488             }
489
490             msg_format(_("あなたは%sを制覇した!", "You have conquered %s!"), d_name + d_info[player_ptr->dungeon_idx].name);
491         }
492     }
493
494     int number = 0;
495     if ((r_ptr->flags1 & RF1_DROP_60) && (randint0(100) < 60))
496         number++;
497     if ((r_ptr->flags1 & RF1_DROP_90) && (randint0(100) < 90))
498         number++;
499     if (r_ptr->flags1 & RF1_DROP_1D2)
500         number += damroll(1, 2);
501     if (r_ptr->flags1 & RF1_DROP_2D2)
502         number += damroll(2, 2);
503     if (r_ptr->flags1 & RF1_DROP_3D2)
504         number += damroll(3, 2);
505     if (r_ptr->flags1 & RF1_DROP_4D2)
506         number += damroll(4, 2);
507
508     if (cloned && !(r_ptr->flags1 & RF1_UNIQUE))
509         number = 0;
510
511     if (is_pet(m_ptr) || player_ptr->phase_out || floor_ptr->inside_arena)
512         number = 0;
513
514     if (!drop_item && (r_ptr->d_char != '$'))
515         number = 0;
516
517     if ((r_ptr->flags2 & (RF2_MULTIPLY)) && (r_ptr->r_akills > 1024))
518         number = 0;
519
520     coin_type = force_coin;
521     floor_ptr->object_level = (floor_ptr->dun_level + r_ptr->level) / 2;
522
523     int dump_item = 0;
524     int dump_gold = 0;
525     for (int i = 0; i < number; i++) {
526         q_ptr = &forge;
527         object_wipe(q_ptr);
528
529         if (do_gold && (!do_item || (randint0(100) < 50))) {
530             if (!make_gold(floor_ptr, q_ptr))
531                 continue;
532             dump_gold++;
533         } else {
534             if (!make_object(player_ptr, q_ptr, mo_mode))
535                 continue;
536             dump_item++;
537         }
538
539         (void)drop_near(player_ptr, q_ptr, -1, y, x);
540     }
541
542     floor_ptr->object_level = floor_ptr->base_level;
543     coin_type = 0;
544     bool visible = (m_ptr->ml && !player_ptr->image) || ((r_ptr->flags1 & RF1_UNIQUE) != 0);
545     if (visible && (dump_item || dump_gold)) {
546         lore_treasure(player_ptr, m_idx, dump_item, dump_gold);
547     }
548
549     if (!(r_ptr->flags1 & RF1_QUESTOR))
550         return;
551     if (player_ptr->phase_out)
552         return;
553     if ((m_ptr->r_idx != MON_SERPENT) || cloned)
554         return;
555
556     current_world_ptr->total_winner = TRUE;
557     player_ptr->redraw |= (PR_TITLE);
558     play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FINAL_QUEST_CLEAR);
559     exe_write_diary(player_ptr, DIARY_DESCRIPTION, 0, _("見事に変愚蛮怒の勝利者となった!", "finally became *WINNER* of Hengband!"));
560     admire_from_patron(player_ptr);
561     msg_print(_("*** おめでとう ***", "*** CONGRATULATIONS ***"));
562     msg_print(_("あなたはゲームをコンプリートしました。", "You have won the game!"));
563     msg_print(_("準備が整ったら引退(自殺コマンド)しても結構です。", "You may retire (commit suicide) when you are ready."));
564 }
565
566 /*!
567  * @brief モンスターを撃破した際の述語メッセージを返す /
568  * Return monster death string
569  * @param r_ptr 撃破されたモンスターの種族情報を持つ構造体の参照ポインタ
570  * @return 撃破されたモンスターの述語
571  */
572 concptr extract_note_dies(MONRACE_IDX r_idx)
573 {
574     monster_race *r_ptr = &r_info[r_idx];
575     if (monster_living(r_idx))
576         return _("は死んだ。", " dies.");
577
578     for (int i = 0; i < 4; i++) {
579         if (r_ptr->blow[i].method == RBM_EXPLODE) {
580             return _("は爆発して粉々になった。", " explodes into tiny shreds.");
581         }
582     }
583
584     return _("を倒した。", " is destroyed.");
585 }