diff options
author | Bardur Arantsson <bardur@scientician.net> | 2014-12-19 01:02:33 +0100 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2014-12-23 12:07:54 +0100 |
commit | 0ff3645a99ce2ba66e8309c0d34d7a7b2ad5ef51 (patch) | |
tree | 5ecec4265dbc78ed514843d4cc9b6f8b3c85ba97 /src | |
parent | 5404247f5adcb64a67bedf8b6442c023c3802a8f (diff) |
Update HOOK_MONSTER_DEATH to new-style hook
Diffstat (limited to 'src')
-rw-r--r-- | src/q_betwen.cc | 4 | ||||
-rw-r--r-- | src/q_dragons.cc | 6 | ||||
-rw-r--r-- | src/q_eol.cc | 15 | ||||
-rw-r--r-- | src/q_evil.cc | 7 | ||||
-rw-r--r-- | src/q_haunted.cc | 7 | ||||
-rw-r--r-- | src/q_invas.cc | 15 | ||||
-rw-r--r-- | src/q_library.cc | 8 | ||||
-rw-r--r-- | src/q_main.cc | 29 | ||||
-rw-r--r-- | src/q_nazgul.cc | 13 | ||||
-rw-r--r-- | src/q_nirna.cc | 4 | ||||
-rw-r--r-- | src/q_one.cc | 11 | ||||
-rw-r--r-- | src/q_rand.cc | 12 | ||||
-rw-r--r-- | src/q_shroom.cc | 21 | ||||
-rw-r--r-- | src/q_spider.cc | 8 | ||||
-rw-r--r-- | src/q_thrain.cc | 11 | ||||
-rw-r--r-- | src/q_troll.cc | 15 | ||||
-rw-r--r-- | src/q_ultrag.cc | 9 | ||||
-rw-r--r-- | src/q_wight.cc | 15 | ||||
-rw-r--r-- | src/q_wolves.cc | 6 | ||||
-rw-r--r-- | src/types.h | 5 | ||||
-rw-r--r-- | src/xtra2.cc | 5 |
21 files changed, 117 insertions, 109 deletions
diff --git a/src/q_betwen.cc b/src/q_betwen.cc index a4cd27ac..b51c8c6a 100644 --- a/src/q_betwen.cc +++ b/src/q_betwen.cc @@ -125,7 +125,7 @@ static bool_ quest_between_finish_hook(const char *fmt) return TRUE; } -static bool_ quest_between_death_hook(const char *fmt) +static bool_ quest_between_death_hook(void *, void *, void *) { int i, mcnt = 0; @@ -190,7 +190,7 @@ bool_ quest_between_init_hook(int q) add_hook_new(HOOK_MOVE, quest_between_move_hook, "between_move", NULL); add_hook_new(HOOK_GEN_QUEST, quest_between_gen_hook, "between_gen", NULL); add_hook (HOOK_QUEST_FINISH, quest_between_finish_hook, "between_finish"); - add_hook (HOOK_MONSTER_DEATH, quest_between_death_hook, "between_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_between_death_hook, "between_death", NULL); } add_hook_new(HOOK_CHAR_DUMP, quest_between_dump_hook, "between_dump", NULL); add_hook_new(HOOK_INIT_QUEST, quest_between_forbid_hook, "between_forbid", NULL); diff --git a/src/q_dragons.cc b/src/q_dragons.cc index d6dd69d9..604fd0ad 100644 --- a/src/q_dragons.cc +++ b/src/q_dragons.cc @@ -91,7 +91,7 @@ static bool_ quest_dragons_gen_hook(void *, void *, void *) return TRUE; } -static bool_ quest_dragons_death_hook(const char *fmt) +static bool_ quest_dragons_death_hook(void *, void *, void *) { int i, mcnt = 0; @@ -113,7 +113,7 @@ static bool_ quest_dragons_death_hook(const char *fmt) if (mcnt <= 1) { quest[p_ptr->inside_quest].status = QUEST_STATUS_COMPLETED; - del_hook (HOOK_MONSTER_DEATH, quest_dragons_death_hook); + del_hook_new(HOOK_MONSTER_DEATH, quest_dragons_death_hook); del_hook_new(HOOK_GEN_QUEST, quest_dragons_gen_hook); process_hooks_restart = TRUE; @@ -144,7 +144,7 @@ bool_ quest_dragons_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_UNTAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_dragons_death_hook, "dragons_monster_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_dragons_death_hook, "dragons_monster_death", NULL); add_hook (HOOK_QUEST_FINISH, quest_dragons_finish_hook, "dragons_finish"); add_hook_new(HOOK_GEN_QUEST, quest_dragons_gen_hook, "dragons_geb", NULL); } diff --git a/src/q_eol.cc b/src/q_eol.cc index c9dac0c0..8c0eaaa7 100644 --- a/src/q_eol.cc +++ b/src/q_eol.cc @@ -136,12 +136,11 @@ static bool_ quest_eol_fail_hook(const char *fmt) return TRUE; } -static bool_ quest_eol_death_hook(const char *fmt) +static bool_ quest_eol_death_hook(void *, void *in_, void *) { - s32b r_idx, m_idx; - - m_idx = get_next_arg(fmt); - r_idx = m_list[m_idx].r_idx; + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; + s32b r_idx = m_list[m_idx].r_idx; if (p_ptr->inside_quest != QUEST_EOL) return FALSE; @@ -149,8 +148,10 @@ static bool_ quest_eol_death_hook(const char *fmt) { cmsg_print(TERM_YELLOW, "Such a sad end..."); cquest.status = QUEST_STATUS_COMPLETED; - del_hook(HOOK_MONSTER_DEATH, quest_eol_death_hook); + + del_hook_new(HOOK_MONSTER_DEATH, quest_eol_death_hook); process_hooks_restart = TRUE; + return (FALSE); } @@ -191,7 +192,7 @@ bool_ quest_eol_init_hook(int q) { if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_eol_death_hook, "eol_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_eol_death_hook, "eol_death", NULL); add_hook_new(HOOK_GEN_QUEST, quest_eol_gen_hook, "eol_gen", NULL); add_hook_new(HOOK_STAIR, quest_eol_stair_hook, "eol_stair", NULL); add_hook (HOOK_QUEST_FAIL, quest_eol_fail_hook, "eol_fail"); diff --git a/src/q_evil.cc b/src/q_evil.cc index e21c4826..40587a77 100644 --- a/src/q_evil.cc +++ b/src/q_evil.cc @@ -56,7 +56,7 @@ static bool_ quest_evil_gen_hook(void *, void *, void *) return TRUE; } -static bool_ quest_evil_death_hook(const char *fmt) +static bool_ quest_evil_death_hook(void *, void *, void *) { int i, mcnt = 0; @@ -80,7 +80,8 @@ static bool_ quest_evil_death_hook(const char *fmt) /* TODO: change to COMPLETED and remove NULL when mayor is added */ quest[p_ptr->inside_quest].status = QUEST_STATUS_FINISHED; *(quest[p_ptr->inside_quest].plot) = QUEST_NULL; - del_hook (HOOK_MONSTER_DEATH, quest_evil_death_hook); + + del_hook_new(HOOK_MONSTER_DEATH, quest_evil_death_hook); del_hook_new(HOOK_GEN_QUEST, quest_evil_gen_hook); process_hooks_restart = TRUE; @@ -111,7 +112,7 @@ bool_ quest_evil_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_UNTAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_evil_death_hook, "evil_monster_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_evil_death_hook, "evil_monster_death", NULL); add_hook (HOOK_QUEST_FINISH, quest_evil_finish_hook, "evil_finish"); add_hook_new(HOOK_GEN_QUEST, quest_evil_gen_hook, "evil_geb", NULL); } diff --git a/src/q_haunted.cc b/src/q_haunted.cc index a57e8656..9af5f48f 100644 --- a/src/q_haunted.cc +++ b/src/q_haunted.cc @@ -88,7 +88,7 @@ static bool_ quest_haunted_gen_hook(void *, void *, void *) return TRUE; } -static bool_ quest_haunted_death_hook(const char *fmt) +static bool_ quest_haunted_death_hook(void *, void *, void *) { int i, mcnt = 0; @@ -110,7 +110,8 @@ static bool_ quest_haunted_death_hook(const char *fmt) if (mcnt <= 1) { quest[p_ptr->inside_quest].status = QUEST_STATUS_COMPLETED; - del_hook (HOOK_MONSTER_DEATH, quest_haunted_death_hook); + + del_hook_new(HOOK_MONSTER_DEATH, quest_haunted_death_hook); del_hook_new(HOOK_GEN_QUEST, quest_haunted_gen_hook); process_hooks_restart = TRUE; @@ -141,7 +142,7 @@ bool_ quest_haunted_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_UNTAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_haunted_death_hook, "haunted_monster_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_haunted_death_hook, "haunted_monster_death", NULL); add_hook (HOOK_QUEST_FINISH, quest_haunted_finish_hook, "haunted_finish"); add_hook_new(HOOK_GEN_QUEST, quest_haunted_gen_hook, "haunted_geb", NULL); } diff --git a/src/q_invas.cc b/src/q_invas.cc index 92257194..9ea5c5c8 100644 --- a/src/q_invas.cc +++ b/src/q_invas.cc @@ -127,12 +127,11 @@ static bool_ quest_invasion_dump_hook(void *, void *in_, void *) return (FALSE); } -static bool_ quest_invasion_death_hook(const char *fmt) +static bool_ quest_invasion_death_hook(void *, void *in_, void *) { - s32b r_idx, m_idx; - - m_idx = get_next_arg(fmt); - r_idx = m_list[m_idx].r_idx; + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; + s32b r_idx = m_list[m_idx].r_idx; if (p_ptr->inside_quest != QUEST_INVASION) return FALSE; @@ -140,8 +139,10 @@ static bool_ quest_invasion_death_hook(const char *fmt) { cmsg_print(TERM_YELLOW, "You did it! Gondolin will remain hidden."); cquest.status = QUEST_STATUS_COMPLETED; - del_hook(HOOK_MONSTER_DEATH, quest_invasion_death_hook); + + del_hook_new(HOOK_MONSTER_DEATH, quest_invasion_death_hook); process_hooks_restart = TRUE; + return (FALSE); } @@ -198,7 +199,7 @@ bool_ quest_invasion_init_hook(int q_idx) { add_hook (HOOK_MONSTER_AI, quest_invasion_ai_hook, "invasion_ai"); add_hook_new(HOOK_GEN_QUEST, quest_invasion_gen_hook, "invasion_gen", NULL); - add_hook (HOOK_MONSTER_DEATH, quest_invasion_death_hook, "invasion_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_invasion_death_hook, "invasion_death", NULL); add_hook_new(HOOK_STAIR, quest_invasion_stair_hook, "invasion_stair", NULL); } return (FALSE); diff --git a/src/q_library.cc b/src/q_library.cc index c3305ea9..e415edb1 100644 --- a/src/q_library.cc +++ b/src/q_library.cc @@ -377,7 +377,7 @@ static bool_ quest_library_stair_hook(void *, void *, void *) } } -static bool_ quest_library_monster_death_hook(const char *fmt) +static bool_ quest_library_monster_death_hook(void *, void *, void *) { int i, count = -1; @@ -494,9 +494,9 @@ bool_ quest_library_init_hook(int q) if ((cquest.status >= QUEST_STATUS_UNTAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook_new(HOOK_GEN_QUEST , quest_library_gen_hook , "library_gen_hook", NULL); - add_hook_new(HOOK_STAIR , quest_library_stair_hook , "library_stair_hook", NULL); - add_hook (HOOK_MONSTER_DEATH, quest_library_monster_death_hook, "library_monster_death_hook"); + add_hook_new(HOOK_GEN_QUEST , quest_library_gen_hook , "library_gen_hook", NULL); + add_hook_new(HOOK_STAIR , quest_library_stair_hook , "library_stair_hook", NULL); + add_hook_new(HOOK_MONSTER_DEATH, quest_library_monster_death_hook, "library_monster_death_hook", NULL); } /* If quest was rewarded we need to initialize the real player's spellbook. */ diff --git a/src/q_main.cc b/src/q_main.cc index 0efd41c9..0b6d19e2 100644 --- a/src/q_main.cc +++ b/src/q_main.cc @@ -31,7 +31,7 @@ static bool_ quest_main_monsters_hook(void *, void *in_, void *) return FALSE; } -static bool_ quest_morgoth_hook(const char *fmt) +static bool_ quest_morgoth_hook(void *, void *, void *) { /* Using test_monster_name() here would be a lot less ugly, but would take much more time */ monster_race *r_ptr = &r_info[862]; @@ -69,7 +69,7 @@ static bool_ quest_morgoth_hook(const char *fmt) } /* Continue the plot(maybe) */ - del_hook(HOOK_MONSTER_DEATH, quest_morgoth_hook); + del_hook_new(HOOK_MONSTER_DEATH, quest_morgoth_hook); process_hooks_restart = TRUE; /* Either ultra good if the one Ring is destroyed, or ultra evil if used */ @@ -101,14 +101,14 @@ bool_ quest_morgoth_init_hook(int q_idx) { if ((quest[QUEST_MORGOTH].status >= QUEST_STATUS_TAKEN) && (quest[QUEST_MORGOTH].status < QUEST_STATUS_FINISHED)) { - add_hook(HOOK_MONSTER_DEATH, quest_morgoth_hook, "morgort_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_morgoth_hook, "morgoth_death", NULL); } add_hook_new(HOOK_CHAR_DUMP, quest_morgoth_dump_hook, "morgoth_dump", NULL); add_hook_new(HOOK_NEW_MONSTER, quest_main_monsters_hook, "main_new_monster", NULL); return (FALSE); } -static bool_ quest_sauron_hook(const char *fmt) +static bool_ quest_sauron_hook(void *, void *, void *) { /* Using test_monster_name() here would be a lot less ugly, but would take much more time */ monster_race *r_ptr = &r_info[860]; @@ -122,8 +122,8 @@ static bool_ quest_sauron_hook(const char *fmt) quest[QUEST_MORGOTH].status = QUEST_STATUS_TAKEN; quest_describe(QUEST_MORGOTH); - del_hook(HOOK_MONSTER_DEATH, quest_sauron_hook); - add_hook(HOOK_MONSTER_DEATH, quest_morgoth_hook, "morgort_death"); + del_hook_new(HOOK_MONSTER_DEATH, quest_sauron_hook); + add_hook_new(HOOK_MONSTER_DEATH, quest_morgoth_hook, "morgort_death", NULL); *(quest[QUEST_SAURON].plot) = QUEST_MORGOTH; quest_morgoth_init_hook(QUEST_MORGOTH); @@ -132,9 +132,10 @@ static bool_ quest_sauron_hook(const char *fmt) return (FALSE); } -static bool_ quest_sauron_resurect_hook(const char *fmt) +static bool_ quest_sauron_resurect_hook(void *, void *in_, void *) { - s32b m_idx = get_next_arg(fmt); + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; monster_type *m_ptr = &m_list[m_idx]; monster_race *r_ptr = &r_info[m_ptr->r_idx]; @@ -155,14 +156,14 @@ bool_ quest_sauron_init_hook(int q_idx) { if ((quest[QUEST_SAURON].status >= QUEST_STATUS_TAKEN) && (quest[QUEST_SAURON].status < QUEST_STATUS_FINISHED)) { - add_hook(HOOK_MONSTER_DEATH, quest_sauron_hook, "sauron_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_sauron_hook, "sauron_death", NULL); } - add_hook_new(HOOK_NEW_MONSTER, quest_main_monsters_hook, "main_new_monster", NULL); - add_hook (HOOK_MONSTER_DEATH, quest_sauron_resurect_hook, "sauron_resurect_death"); + add_hook_new(HOOK_NEW_MONSTER, quest_main_monsters_hook, "main_new_monster", NULL); + add_hook_new(HOOK_MONSTER_DEATH, quest_sauron_resurect_hook, "sauron_resurect_death", NULL); return (FALSE); } -static bool_ quest_necro_hook(const char *fmt) +static bool_ quest_necro_hook(void *, void *, void *) { /* Using test_monster_name() here would be a lot less ugly, but would take much more time */ monster_race *r_ptr = &r_info[819]; @@ -179,7 +180,7 @@ static bool_ quest_necro_hook(const char *fmt) *(quest[QUEST_NECRO].plot) = QUEST_ONE; quest[*(quest[QUEST_NECRO].plot)].init(*(quest[QUEST_NECRO].plot)); - del_hook(HOOK_MONSTER_DEATH, quest_necro_hook); + del_hook_new(HOOK_MONSTER_DEATH, quest_necro_hook); process_hooks_restart = TRUE; } return (FALSE); @@ -189,7 +190,7 @@ bool_ quest_necro_init_hook(int q_idx) { if ((quest[QUEST_NECRO].status >= QUEST_STATUS_TAKEN) && (quest[QUEST_NECRO].status < QUEST_STATUS_FINISHED)) { - add_hook(HOOK_MONSTER_DEATH, quest_necro_hook, "necro_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_necro_hook, "necro_death", NULL); } add_hook_new(HOOK_NEW_MONSTER, quest_main_monsters_hook, "main_new_monster", NULL); return (FALSE); diff --git a/src/q_nazgul.cc b/src/q_nazgul.cc index b60be463..0be2e5f5 100644 --- a/src/q_nazgul.cc +++ b/src/q_nazgul.cc @@ -93,19 +93,18 @@ static bool_ quest_nazgul_forbid_hook(void *, void *in_, void *) return (FALSE); } -static bool_ quest_nazgul_death_hook(const char *fmt) +static bool_ quest_nazgul_death_hook(void *, void *in_, void *) { - s32b r_idx, m_idx; - - m_idx = get_next_arg(fmt); - r_idx = m_list[m_idx].r_idx; + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; + s32b r_idx = m_list[m_idx].r_idx; if (cquest.status != QUEST_STATUS_TAKEN) return (FALSE); if (r_idx != test_monster_name("Uvatha the Horseman")) return (FALSE); cquest.status = QUEST_STATUS_COMPLETED; - del_hook(HOOK_MONSTER_DEATH, quest_nazgul_death_hook); + del_hook_new(HOOK_MONSTER_DEATH, quest_nazgul_death_hook); process_hooks_restart = TRUE; return (FALSE); @@ -115,7 +114,7 @@ bool_ quest_nazgul_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_nazgul_death_hook, "nazgul_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_nazgul_death_hook, "nazgul_death", NULL); add_hook_new(HOOK_WILD_GEN, quest_nazgul_gen_hook, "nazgul_gen", NULL); add_hook (HOOK_QUEST_FINISH, quest_nazgul_finish_hook, "nazgul_finish"); } diff --git a/src/q_nirna.cc b/src/q_nirna.cc index 9772709c..9306ed31 100644 --- a/src/q_nirna.cc +++ b/src/q_nirna.cc @@ -80,7 +80,7 @@ static bool_ quest_nirnaeth_finish_hook(const char *fmt) return TRUE; } -static bool_ quest_nirnaeth_death_hook(const char *fmt) +static bool_ quest_nirnaeth_death_hook(void *, void *, void *) { if (p_ptr->inside_quest != QUEST_NIRNAETH) return FALSE; @@ -107,7 +107,7 @@ bool_ quest_nirnaeth_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_nirnaeth_death_hook, "nirnaeth_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_nirnaeth_death_hook, "nirnaeth_death", NULL); add_hook_new(HOOK_GEN_QUEST, quest_nirnaeth_gen_hook, "nirnaeth_gen", NULL); add_hook_new(HOOK_STAIR, quest_nirnaeth_stair_hook, "nirnaeth_stair", NULL); add_hook (HOOK_QUEST_FINISH, quest_nirnaeth_finish_hook, "nirnaeth_finish"); diff --git a/src/q_one.cc b/src/q_one.cc index 20022100..b869c429 100644 --- a/src/q_one.cc +++ b/src/q_one.cc @@ -210,14 +210,13 @@ static bool_ quest_one_identify_hook(void *, void *in_, void *) return (FALSE); } -static bool_ quest_one_death_hook(const char *fmt) +static bool_ quest_one_death_hook(void *, void *in_, void *) { - s32b r_idx, m_idx; + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; + s32b r_idx = m_list[m_idx].r_idx; bool_ ok = FALSE; - m_idx = get_next_arg(fmt); - r_idx = m_list[m_idx].r_idx; - if (a_info[ART_POWER].cur_num) return FALSE; /* Paranoia */ @@ -343,7 +342,7 @@ bool_ quest_one_init_hook(int q_idx) if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { add_hook (HOOK_LEVEL_END_GEN, quest_one_gen_hook, "one_gen"); - add_hook (HOOK_MONSTER_DEATH, quest_one_death_hook, "one_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_one_death_hook, "one_death", NULL); add_hook_new(HOOK_DROP, quest_one_drop_hook, "one_drop", NULL); add_hook (HOOK_WIELD, quest_one_wield_hook, "one_wield"); add_hook_new(HOOK_IDENTIFY, quest_one_identify_hook, "one_id", NULL); diff --git a/src/q_rand.cc b/src/q_rand.cc index c631e8b5..33764f88 100644 --- a/src/q_rand.cc +++ b/src/q_rand.cc @@ -371,13 +371,11 @@ static void hero_death(s32b m_idx, s32b r_idx) } } -static bool_ quest_random_death_hook(const char *fmt) +static bool_ quest_random_death_hook(void *, void *in_, void *) { - int r_idx; - s32b m_idx; - - m_idx = get_next_arg(fmt); - r_idx = m_list[m_idx].r_idx; + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; + int r_idx = m_list[m_idx].r_idx; if (!(dungeon_flags1 & DF1_PRINCIPAL)) return (FALSE); if ((dun_level < 1) || (dun_level >= MAX_RANDOM_QUEST)) return (FALSE); @@ -618,7 +616,7 @@ bool_ quest_random_describe(FILE *fff) bool_ quest_random_init_hook(int q_idx) { - add_hook (HOOK_MONSTER_DEATH, quest_random_death_hook, "rand_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_random_death_hook, "rand_death", NULL); add_hook (HOOK_NEW_LEVEL, quest_random_turn_hook, "rand_new_lvl"); add_hook (HOOK_LEVEL_REGEN, quest_random_turn_hook, "rand_regen_lvl"); add_hook (HOOK_LEVEL_END_GEN, quest_random_gen_hero_hook, "rand_gen_hero"); diff --git a/src/q_shroom.cc b/src/q_shroom.cc index f36b7d50..3c606e99 100644 --- a/src/q_shroom.cc +++ b/src/q_shroom.cc @@ -85,12 +85,11 @@ static bool_ quest_shroom_town_gen_hook(void *, void *in_, void *) return FALSE; } -static bool_ quest_shroom_death_hook(const char *fmt) +static bool_ quest_shroom_death_hook(void *, void *in_, void *) { - s32b r_idx, m_idx; - - m_idx = get_next_arg(fmt); - r_idx = m_list[m_idx].r_idx; + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; + s32b r_idx = m_list[m_idx].r_idx; if (cquest.status > QUEST_STATUS_COMPLETED) return FALSE; @@ -273,17 +272,17 @@ bool_ quest_shroom_init_hook(int q_idx) if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_shroom_death_hook, "shroom_death"); - add_hook_new(HOOK_GIVE, quest_shroom_give_hook, "shroom_give", NULL); + add_hook_new(HOOK_MONSTER_DEATH, quest_shroom_death_hook, "shroom_death", NULL); + add_hook_new(HOOK_GIVE, quest_shroom_give_hook, "shroom_give", NULL); add_hook_new(HOOK_WILD_GEN, quest_shroom_town_gen_hook, "shroom_town_gen", NULL); - add_hook_new(HOOK_CHAT, quest_shroom_chat_hook, "shroom_chat", NULL); - add_hook_new(HOOK_MON_SPEAK, quest_shroom_speak_hook, "shroom_speak", NULL); + add_hook_new(HOOK_CHAT, quest_shroom_chat_hook, "shroom_chat", NULL); + add_hook_new(HOOK_MON_SPEAK, quest_shroom_speak_hook, "shroom_speak", NULL); } if (cquest.status == QUEST_STATUS_UNTAKEN) { - add_hook_new(HOOK_MON_SPEAK, quest_shroom_speak_hook, "shroom_speak", NULL); + add_hook_new(HOOK_MON_SPEAK, quest_shroom_speak_hook, "shroom_speak", NULL); add_hook_new(HOOK_WILD_GEN, quest_shroom_town_gen_hook, "shroom_town_gen", NULL); - add_hook_new(HOOK_CHAT, quest_shroom_chat_hook, "shroom_chat", NULL); + add_hook_new(HOOK_CHAT, quest_shroom_chat_hook, "shroom_chat", NULL); } return (FALSE); } diff --git a/src/q_spider.cc b/src/q_spider.cc index 474d58d1..f3c2f265 100644 --- a/src/q_spider.cc +++ b/src/q_spider.cc @@ -33,7 +33,7 @@ static bool_ quest_spider_gen_hook(void *, void *, void *) return TRUE; } -static bool_ quest_spider_death_hook(const char *fmt) +static bool_ quest_spider_death_hook(void *, void *, void *) { int i, mcnt = 0; @@ -62,8 +62,10 @@ static bool_ quest_spider_death_hook(const char *fmt) } cquest.status = QUEST_STATUS_COMPLETED; - del_hook(HOOK_MONSTER_DEATH, quest_spider_death_hook); + + del_hook_new(HOOK_MONSTER_DEATH, quest_spider_death_hook); process_hooks_restart = TRUE; + return (FALSE); } @@ -105,7 +107,7 @@ bool_ quest_spider_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_spider_death_hook, "spider_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_spider_death_hook, "spider_death", NULL); add_hook_new(HOOK_GEN_QUEST, quest_spider_gen_hook, "spider_gen", NULL); add_hook (HOOK_QUEST_FINISH, quest_spider_finish_hook, "spider_finish"); } diff --git a/src/q_thrain.cc b/src/q_thrain.cc index d6cd725a..71c7bfb3 100644 --- a/src/q_thrain.cc +++ b/src/q_thrain.cc @@ -5,14 +5,13 @@ #define cquest (quest[QUEST_THRAIN]) -static bool_ quest_thrain_death_hook(const char *fmt) +static bool_ quest_thrain_death_hook(void *, void *in_, void *) { - s32b m_idx; + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; int r, x, y; monster_type *m_ptr; - m_idx = get_next_arg(fmt); - if ((cquest.status >= QUEST_STATUS_FINISHED) || (dun_level !=cquest.data[0]) || (dungeon_type != DUNGEON_DOL_GULDUR)) return (FALSE); m_ptr = &m_list[m_idx]; if ((m_ptr->r_idx != test_monster_name("Dwar, Dog Lord of Waw")) && (m_ptr->r_idx != test_monster_name("Hoarmurath of Dir"))) return (FALSE); @@ -85,7 +84,7 @@ static bool_ quest_thrain_death_hook(const char *fmt) } - del_hook(HOOK_MONSTER_DEATH, quest_thrain_death_hook); + del_hook_new(HOOK_MONSTER_DEATH, quest_thrain_death_hook); process_hooks_restart = TRUE; return (FALSE); @@ -232,7 +231,7 @@ bool_ quest_thrain_init_hook(int q) add_hook (HOOK_NEW_LEVEL, quest_thrain_turn_hook, "thrain_new_lvl"); add_hook (HOOK_BUILD_ROOM1, quest_thrain_gen_hook, "thrain_gen"); add_hook_new(HOOK_FEELING, quest_thrain_feeling_hook, "thrain_feel", NULL); - add_hook (HOOK_MONSTER_DEATH, quest_thrain_death_hook, "thrain_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_thrain_death_hook, "thrain_death", NULL); } return (FALSE); } diff --git a/src/q_troll.cc b/src/q_troll.cc index ceda1934..474a1cd1 100644 --- a/src/q_troll.cc +++ b/src/q_troll.cc @@ -117,15 +117,12 @@ static bool_ quest_troll_finish_hook(const char *fmt) return TRUE; } -static bool_ quest_troll_death_hook(const char *fmt) +static bool_ quest_troll_death_hook(void *, void *in_, void *) { + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; + s32b r_idx = m_list[m_idx].r_idx; int x, y, xstart = 2, ystart = 2; - s32b r_idx, m_idx; - ; - - m_idx = get_next_arg(fmt); - - r_idx = m_list[m_idx].r_idx; if (p_ptr->inside_quest != QUEST_TROLL) return FALSE; @@ -136,7 +133,7 @@ static bool_ quest_troll_death_hook(const char *fmt) cmsg_print(TERM_YELLOW, "Without Tom, the trolls won't be able to do much."); cquest.status = QUEST_STATUS_COMPLETED; - del_hook(HOOK_MONSTER_DEATH, quest_troll_death_hook); + del_hook_new(HOOK_MONSTER_DEATH, quest_troll_death_hook); process_hooks_restart = TRUE; return (FALSE); } @@ -175,7 +172,7 @@ bool_ quest_troll_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_troll_death_hook, "troll_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_troll_death_hook, "troll_death", NULL); add_hook_new(HOOK_GEN_QUEST, quest_troll_gen_hook, "troll_gen", NULL); add_hook (HOOK_QUEST_FINISH, quest_troll_finish_hook, "troll_finish"); } diff --git a/src/q_ultrag.cc b/src/q_ultrag.cc index 5aaa9b91..2feb16a7 100644 --- a/src/q_ultrag.cc +++ b/src/q_ultrag.cc @@ -144,9 +144,10 @@ static bool_ quest_ultra_good_recall_hook(const char *fmt) return TRUE; } -static bool_ quest_ultra_good_death_hook(const char *fmt) +static bool_ quest_ultra_good_death_hook(void *, void *in_, void *) { - s32b m_idx = get_next_arg(fmt); + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; monster_type *m_ptr = &m_list[m_idx]; @@ -175,7 +176,7 @@ static bool_ quest_ultra_good_death_hook(const char *fmt) cave_set_feat(p_ptr->py, p_ptr->px, FEAT_MORE); /* Remove now used hook */ - del_hook(HOOK_MONSTER_DEATH, quest_ultra_good_death_hook); + del_hook_new(HOOK_MONSTER_DEATH, quest_ultra_good_death_hook); process_hooks_restart = TRUE; /* End plot */ @@ -264,7 +265,7 @@ bool_ quest_ultra_good_init_hook(int q) { add_hook_new(HOOK_STAIR, quest_ultra_good_stair_hook, "ultrag_stair", NULL); add_hook (HOOK_RECALL, quest_ultra_good_recall_hook, "ultrag_recall"); - add_hook (HOOK_MONSTER_DEATH, quest_ultra_good_death_hook, "ultrag_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_ultra_good_death_hook, "ultrag_death", NULL); } if (cquest.status == QUEST_STATUS_UNTAKEN) { diff --git a/src/q_wight.cc b/src/q_wight.cc index 462e0416..573061d7 100644 --- a/src/q_wight.cc +++ b/src/q_wight.cc @@ -105,12 +105,11 @@ static bool_ quest_wight_gen_hook(void *, void *, void *) return TRUE; } -static bool_ quest_wight_death_hook(const char *fmt) +static bool_ quest_wight_death_hook(void *, void *in_, void *) { - s32b r_idx, m_idx; - - m_idx = get_next_arg(fmt); - r_idx = m_list[m_idx].r_idx; + struct hook_monster_death_in *in = static_cast<struct hook_monster_death_in *>(in_); + s32b m_idx = in->m_idx; + s32b r_idx = m_list[m_idx].r_idx; if (p_ptr->inside_quest != QUEST_WIGHT) return FALSE; @@ -122,8 +121,10 @@ static bool_ quest_wight_death_hook(const char *fmt) cave[p_ptr->py][p_ptr->px].special = 0; cquest.status = QUEST_STATUS_COMPLETED; - del_hook(HOOK_MONSTER_DEATH, quest_wight_death_hook); + + del_hook_new(HOOK_MONSTER_DEATH, quest_wight_death_hook); process_hooks_restart = TRUE; + return (FALSE); } @@ -154,7 +155,7 @@ bool_ quest_wight_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_wight_death_hook, "wight_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_wight_death_hook, "wight_death", NULL); add_hook_new(HOOK_GEN_QUEST, quest_wight_gen_hook, "wight_gen", NULL); add_hook (HOOK_QUEST_FINISH, quest_wight_finish_hook, "wight_finish"); } diff --git a/src/q_wolves.cc b/src/q_wolves.cc index 75a50aff..ef3c22ec 100644 --- a/src/q_wolves.cc +++ b/src/q_wolves.cc @@ -71,7 +71,7 @@ static bool_ quest_wolves_gen_hook(void *, void *, void *) return TRUE; } -static bool_ quest_wolves_death_hook(const char *fmt) +static bool_ quest_wolves_death_hook(void *, void *, void *) { int i, mcnt = 0; @@ -94,7 +94,7 @@ static bool_ quest_wolves_death_hook(const char *fmt) { quest[p_ptr->inside_quest].status = QUEST_STATUS_COMPLETED; - del_hook (HOOK_MONSTER_DEATH, quest_wolves_death_hook); + del_hook_new(HOOK_MONSTER_DEATH, quest_wolves_death_hook); del_hook_new(HOOK_GEN_QUEST, quest_wolves_gen_hook); process_hooks_restart = TRUE; @@ -125,7 +125,7 @@ bool_ quest_wolves_init_hook(int q_idx) { if ((cquest.status >= QUEST_STATUS_UNTAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) { - add_hook (HOOK_MONSTER_DEATH, quest_wolves_death_hook, "wolves_monster_death"); + add_hook_new(HOOK_MONSTER_DEATH, quest_wolves_death_hook, "wolves_monster_death", NULL); add_hook (HOOK_QUEST_FINISH, quest_wolves_finish_hook, "wolves_finish"); add_hook_new(HOOK_GEN_QUEST, quest_wolves_gen_hook, "wolves_geb", NULL); } diff --git a/src/types.h b/src/types.h index e3b4a289..da0e2b5a 100644 --- a/src/types.h +++ b/src/types.h @@ -2222,6 +2222,11 @@ struct hook_mon_speak_in { cptr m_name; }; +typedef struct hook_monster_death_in hook_monster_death_in; +struct hook_monster_death_in { + s32b m_idx; +}; + typedef struct hook_chat_in hook_chat_in; struct hook_chat_in { s32b m_idx; diff --git a/src/xtra2.cc b/src/xtra2.cc index d1d3e4ac..46c04453 100644 --- a/src/xtra2.cc +++ b/src/xtra2.cc @@ -2613,7 +2613,10 @@ void monster_death(int m_idx) x = m_ptr->fx; /* Process the appropriate hooks */ - process_hooks(HOOK_MONSTER_DEATH, "(d)", m_idx); + { + struct hook_monster_death_in in = { m_idx }; + process_hooks_new(HOOK_MONSTER_DEATH, &in, NULL); + } /* Per-god processing */ monster_death_gods(m_idx, m_ptr); |