X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmonster1.c;h=0f46a4df890baad64fb1c7357d669cde06657da4;hb=26526abb3cf778918ac5d776df72639745136ad4;hp=09492efc491207e97bd158af1dee8c03dbad3e9f;hpb=ee2d61e2b52b0e3384363ffac9c175e5c1b85368;p=hengband%2Fhengband.git diff --git a/src/monster1.c b/src/monster1.c index 09492efc4..0f46a4df8 100644 --- a/src/monster1.c +++ b/src/monster1.c @@ -11,18 +11,32 @@ */ #include "angband.h" +#include "util.h" +#include "term.h" + +#include "cmd-dump.h" +#include "bldg.h" #include "cmd-pet.h" -#include "monsterrace-hook.h" +#include "floor.h" #include "objectkind-hook.h" -#include "projection.h" +#include "player-personality.h" #include "monster.h" #include "monster-spell.h" +#include "monsterrace-hook.h" #include "spells-summon.h" #include "patron.h" #include "quest.h" #include "artifact.h" #include "avatar.h" #include "wild.h" +#include "spells.h" +#include "dungeon.h" +#include "world.h" +#include "melee.h" +#include "japanese.h" +#include "view-mainwindow.h" +#include "player-class.h" +#include "english.h" /* @@ -68,17 +82,9 @@ static bool know_armour(MONRACE_IDX r_idx) bool known = (r_ptr->r_cast_spell == MAX_UCHAR)? TRUE: FALSE; if (cheat_know || known) return (TRUE); - - /* Normal monsters */ if (kills > 304 / (4 + level)) return (TRUE); - - /* Skip non-uniques */ if (!(r_ptr->flags1 & RF1_UNIQUE)) return (FALSE); - - /* Unique monsters */ if (kills > 304 / (38 + (5 * level) / 4)) return (TRUE); - - /* Assume false */ return (FALSE); } @@ -109,14 +115,8 @@ static bool know_damage(MONRACE_IDX r_idx, int i) s32b d = d1 * d2; if (d >= ((4+level)*MAX_UCHAR)/80) d = ((4+level)*MAX_UCHAR-1)/80; - - /* Normal monsters */ if ((4 + level) * a > 80 * d) return (TRUE); - - /* Skip non-uniques */ if (!(r_ptr->flags1 & RF1_UNIQUE)) return (FALSE); - - /* Unique monsters */ if ((4 + level) * (2 * a) > 80 * d) return (TRUE); /* Assume false */ @@ -428,8 +428,6 @@ static void roff_aux(MONRACE_IDX r_idx, BIT_FLAGS mode) /* Start a new line */ hooked_roff("\n"); } - - /* Normal monsters */ else { /* Killed some this life */ @@ -553,7 +551,6 @@ static void roff_aux(MONRACE_IDX r_idx, BIT_FLAGS mode) if (speed != 110) hooked_roff(_("、かつ", ", and")); } - /* Speed */ if (speed > 110) { if (speed > 139) hook_c_roff(TERM_RED, _("信じ難いほど", " incredibly")); @@ -2222,7 +2219,6 @@ void set_friendly(monster_type *m_ptr) */ void set_pet(monster_type *m_ptr) { - /* Check for quest completion */ check_quest_completion(m_ptr); m_ptr->smart |= SM_PET; @@ -2238,7 +2234,7 @@ void set_pet(monster_type *m_ptr) */ void set_hostile(monster_type *m_ptr) { - if (p_ptr->inside_battle) return; + if (p_ptr->phase_out) return; m_ptr->smart &= ~SM_PET; m_ptr->smart &= ~SM_FRIENDLY; } @@ -2252,7 +2248,7 @@ void set_hostile(monster_type *m_ptr) */ void anger_monster(monster_type *m_ptr) { - if (p_ptr->inside_battle) return; + if (p_ptr->phase_out) return; if (is_friendly(m_ptr)) { GAME_TEXT m_name[MAX_NLEN]; @@ -2262,10 +2258,10 @@ void anger_monster(monster_type *m_ptr) set_hostile(m_ptr); - chg_virtue(V_INDIVIDUALISM, 1); - chg_virtue(V_HONOUR, -1); - chg_virtue(V_JUSTICE, -1); - chg_virtue(V_COMPASSION, -1); + chg_virtue(p_ptr, V_INDIVIDUALISM, 1); + chg_virtue(p_ptr, V_HONOUR, -1); + chg_virtue(p_ptr, V_JUSTICE, -1); + chg_virtue(p_ptr, V_COMPASSION, -1); } } @@ -2411,7 +2407,7 @@ bool are_enemies(monster_type *m_ptr, monster_type *n_ptr) monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_race *s_ptr = &r_info[n_ptr->r_idx]; - if (p_ptr->inside_battle) + if (p_ptr->phase_out) { if (is_pet(m_ptr) || is_pet(n_ptr)) return FALSE; return TRUE; @@ -2545,7 +2541,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) object_type *q_ptr; bool drop_chosen_item = drop_item && !cloned && !p_ptr->inside_arena - && !p_ptr->inside_battle && !is_pet(m_ptr); + && !p_ptr->phase_out && !is_pet(m_ptr); /* The caster is dead? */ if (current_world_ptr->timewalk_m_idx && current_world_ptr->timewalk_m_idx == m_idx) current_world_ptr->timewalk_m_idx = 0; @@ -2564,7 +2560,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE); - do_cmd_write_nikki(NIKKI_NAMED_PET, 3, m_name); + exe_write_diary(p_ptr, NIKKI_NAMED_PET, 3, m_name); } /* Let monsters explode! */ @@ -2589,7 +2585,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) r_ptr = &r_info[m_ptr->r_idx]; } - /* Check for quest completion */ check_quest_completion(m_ptr); /* Handle the possibility of player vanquishing arena combatant -KMW- */ @@ -2624,7 +2619,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) monster_desc(m_name, m_ptr, MD_WRONGDOER_NAME); - do_cmd_write_nikki(NIKKI_ARENA, p_ptr->arena_number, m_name); + exe_write_diary(p_ptr, NIKKI_ARENA, p_ptr->arena_number, m_name); } } @@ -2639,7 +2634,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Drop a dead corpse? */ if (one_in_(r_ptr->flags1 & RF1_UNIQUE ? 1 : 4) && (r_ptr->flags9 & (RF9_DROP_CORPSE | RF9_DROP_SKELETON)) && - !(p_ptr->inside_arena || p_ptr->inside_battle || cloned || ((m_ptr->r_idx == today_mon) && is_pet(m_ptr)))) + !(p_ptr->inside_arena || p_ptr->phase_out || cloned || ((m_ptr->r_idx == today_mon) && is_pet(m_ptr)))) { /* Assume skeleton */ bool corpse = FALSE; @@ -2687,7 +2682,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) { case MON_PINK_HORROR: /* Pink horrors are replaced with 2 Blue horrors */ - if (!(p_ptr->inside_arena || p_ptr->inside_battle)) + if (!(p_ptr->inside_arena || p_ptr->phase_out)) { bool notice = FALSE; @@ -2699,7 +2694,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (pet) mode |= PM_FORCE_PET; - if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode, '\0')) + if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode)) { if (player_can_see_bold(wy, wx)) notice = TRUE; } @@ -2746,7 +2741,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) * Mega^3-hack: killing a 'Warrior of the Dawn' is likely to * spawn another in the fallen one's place! */ - if (!p_ptr->inside_arena && !p_ptr->inside_battle) + if (!p_ptr->inside_arena && !p_ptr->phase_out) { if (!one_in_(7)) { @@ -2764,7 +2759,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) BIT_FLAGS mode = 0L; if (pet) mode |= PM_FORCE_PET; - if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode, '\0')) + if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode)) { if (player_can_see_bold(wy, wx)) msg_print(_("新たな戦士が現れた!", "A new warrior steps forth!")); @@ -2811,13 +2806,12 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) a_ptr = &a_info[a_idx]; } while (a_ptr->cur_num); - /* Create the artifact */ if (create_named_art(a_idx, y, x)) { a_ptr->cur_num = 1; /* Hack -- Memorize location of artifact in saved floors */ - if (character_dungeon) a_ptr->floor_id = p_ptr->floor_id; + if (current_world_ptr->character_dungeon) a_ptr->floor_id = p_ptr->floor_id; } else if (!preserve_mode) a_ptr->cur_num = 1; } @@ -2984,13 +2978,12 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (!a_ptr->cur_num) { - /* Create the artifact */ if (create_named_art(a_idx, y, x)) { a_ptr->cur_num = 1; /* Hack -- Memorize location of artifact in saved floors */ - if (character_dungeon) a_ptr->floor_id = p_ptr->floor_id; + if (current_world_ptr->character_dungeon) a_ptr->floor_id = p_ptr->floor_id; } else if (!preserve_mode) a_ptr->cur_num = 1; } @@ -3008,13 +3001,12 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (!a_ptr->cur_num) { - /* Create the artifact */ if (create_named_art(a_idx, y, x)) { a_ptr->cur_num = 1; /* Hack -- Memorize location of artifact in saved floors */ - if (character_dungeon) a_ptr->floor_id = p_ptr->floor_id; + if (current_world_ptr->character_dungeon) a_ptr->floor_id = p_ptr->floor_id; } else if (!preserve_mode) a_ptr->cur_num = 1; @@ -3048,7 +3040,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (cloned && !(r_ptr->flags1 & RF1_UNIQUE)) number = 0; /* Clones drop no stuff unless Cloning Pits */ - if (is_pet(m_ptr) || p_ptr->inside_battle || p_ptr->inside_arena) + if (is_pet(m_ptr) || p_ptr->phase_out || p_ptr->inside_arena) number = 0; /* Pets drop no stuff */ if (!drop_item && (r_ptr->d_char != '$')) number = 0; @@ -3067,21 +3059,14 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) q_ptr = &forge; object_wipe(q_ptr); - /* Make Gold */ if (do_gold && (!do_item || (randint0(100) < 50))) { - /* Make some gold */ if (!make_gold(q_ptr)) continue; - dump_gold++; } - - /* Make Object */ else { - /* Make an object */ if (!make_object(q_ptr, mo_mode)) continue; - dump_item++; } (void)drop_near(q_ptr, -1, y, x); @@ -3103,7 +3088,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Only process "Quest Monsters" */ if (!(r_ptr->flags1 & RF1_QUESTOR)) return; - if (p_ptr->inside_battle) return; + if (p_ptr->phase_out) return; /* Winner? */ if ((m_ptr->r_idx == MON_SERPENT) && !cloned) @@ -3116,7 +3101,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_FINAL_QUEST_CLEAR); - do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("見事に変愚蛮怒の勝利者となった!", "become *WINNER* of Hengband finely!")); + exe_write_diary(p_ptr, NIKKI_BUNSHOU, 0, _("見事に変愚蛮怒の勝利者となった!", "become *WINNER* of Hengband finely!")); admire_from_patron(p_ptr);