summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2014-12-21 14:38:46 +0100
committerBardur Arantsson <bardur@scientician.net>2014-12-23 12:07:55 +0100
commitc1a907e0bf6acc94e77f5af50cd8099977a9ab30 (patch)
tree96d2249613810c12ba3d59b56af05d10846cca37
parent5cab4125d9447928f04d1e4f42c3b58efc485dbf (diff)
Update HOOK_MONSTER_AI to new-style hook
-rw-r--r--src/melee2.cc8
-rw-r--r--src/q_invas.cc19
-rw-r--r--src/types.h12
3 files changed, 26 insertions, 13 deletions
diff --git a/src/melee2.cc b/src/melee2.cc
index d4f2e9ff..f3dc1301 100644
--- a/src/melee2.cc
+++ b/src/melee2.cc
@@ -5119,10 +5119,12 @@ static bool_ get_moves(int m_idx, int *mm)
/* Let quests redefine AI */
if (r_ptr->flags7 & RF7_AI_SPECIAL)
{
- if (process_hooks_ret(HOOK_MONSTER_AI, "dd", "(d)", m_idx))
+ struct hook_monster_ai_in in = { m_idx, &m_list[m_idx] };
+ struct hook_monster_ai_out out = { 0, 0 };
+ if (process_hooks_new(HOOK_MONSTER_AI, &in, &out))
{
- y2 = process_hooks_return[0].num;
- x2 = process_hooks_return[1].num;
+ y2 = out.y;
+ x2 = out.x;
}
}
diff --git a/src/q_invas.cc b/src/q_invas.cc
index 03281ba6..983e84fb 100644
--- a/src/q_invas.cc
+++ b/src/q_invas.cc
@@ -46,13 +46,12 @@ static bool_ quest_invasion_gen_hook(void *, void *, void *)
return TRUE;
}
-static bool_ quest_invasion_ai_hook(const char *fmt)
+static bool_ quest_invasion_ai_hook(void *, void *in_, void *out_)
{
- monster_type *m_ptr;
- s32b m_idx;
-
- m_idx = get_next_arg(fmt);
- m_ptr = &m_list[m_idx];
+ struct hook_monster_ai_in *in = static_cast<struct hook_monster_ai_in *>(in_);
+ struct hook_monster_ai_out *out = static_cast<struct hook_monster_ai_out *>(out_);
+ monster_type *m_ptr = in->m_ptr;
+ s32b m_idx = in->m_idx;
if (p_ptr->inside_quest != QUEST_INVASION) return FALSE;
@@ -77,8 +76,8 @@ static bool_ quest_invasion_ai_hook(const char *fmt)
}
else
{
- process_hooks_return[0].num = cquest.data[0];
- process_hooks_return[1].num = cquest.data[1];
+ out->y = cquest.data[0];
+ out->x = cquest.data[1];
return (TRUE);
}
}
@@ -198,8 +197,8 @@ bool_ quest_invasion_init_hook(int q_idx)
add_hook_new(HOOK_CHAR_DUMP, quest_invasion_dump_hook, "invasion_dump", NULL);
if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED))
{
- 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_new(HOOK_MONSTER_AI, quest_invasion_ai_hook, "invasion_ai", NULL);
+ add_hook_new(HOOK_GEN_QUEST, quest_invasion_gen_hook, "invasion_gen", NULL);
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);
}
diff --git a/src/types.h b/src/types.h
index b2f40124..32615672 100644
--- a/src/types.h
+++ b/src/types.h
@@ -2227,6 +2227,18 @@ struct hook_monster_death_in {
s32b m_idx;
};
+typedef struct hook_monster_ai_in hook_monster_ai_in;
+struct hook_monster_ai_in {
+ s32b m_idx;
+ monster_type *m_ptr;
+};
+
+typedef struct hook_monster_ai_out hook_monster_ai_out;
+struct hook_monster_ai_out {
+ s32b y;
+ s32b x;
+};
+
typedef struct hook_chat_in hook_chat_in;
struct hook_chat_in {
s32b m_idx;