summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2014-12-19 01:02:33 +0100
committerBardur Arantsson <bardur@scientician.net>2014-12-23 12:07:54 +0100
commit0ff3645a99ce2ba66e8309c0d34d7a7b2ad5ef51 (patch)
tree5ecec4265dbc78ed514843d4cc9b6f8b3c85ba97
parent5404247f5adcb64a67bedf8b6442c023c3802a8f (diff)
Update HOOK_MONSTER_DEATH to new-style hook
-rw-r--r--src/q_betwen.cc4
-rw-r--r--src/q_dragons.cc6
-rw-r--r--src/q_eol.cc15
-rw-r--r--src/q_evil.cc7
-rw-r--r--src/q_haunted.cc7
-rw-r--r--src/q_invas.cc15
-rw-r--r--src/q_library.cc8
-rw-r--r--src/q_main.cc29
-rw-r--r--src/q_nazgul.cc13
-rw-r--r--src/q_nirna.cc4
-rw-r--r--src/q_one.cc11
-rw-r--r--src/q_rand.cc12
-rw-r--r--src/q_shroom.cc21
-rw-r--r--src/q_spider.cc8
-rw-r--r--src/q_thrain.cc11
-rw-r--r--src/q_troll.cc15
-rw-r--r--src/q_ultrag.cc9
-rw-r--r--src/q_wight.cc15
-rw-r--r--src/q_wolves.cc6
-rw-r--r--src/types.h5
-rw-r--r--src/xtra2.cc5
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);