diff options
Diffstat (limited to 'src/q_poison.cc')
-rw-r--r-- | src/q_poison.cc | 160 |
1 files changed, 118 insertions, 42 deletions
diff --git a/src/q_poison.cc b/src/q_poison.cc index a5b274b0..e7f1c71b 100644 --- a/src/q_poison.cc +++ b/src/q_poison.cc @@ -2,6 +2,7 @@ #include "cave.hpp" #include "cave_type.hpp" +#include "game.hpp" #include "hook_chardump_in.hpp" #include "hook_drop_in.hpp" #include "hook_init_quest_in.hpp" @@ -10,10 +11,11 @@ #include "messages.hpp" #include "monster2.hpp" #include "monster_race.hpp" +#include "monster_race_flag.hpp" +#include "monster_spell_flag.hpp" #include "monster_type.hpp" #include "object2.hpp" #include "player_type.hpp" -#include "quark.hpp" #include "tables.hpp" #include "util.hpp" #include "variable.hpp" @@ -31,9 +33,11 @@ static int wild_locs[4][2] = static bool_ create_molds_hook(int r_idx) { - monster_race *r_ptr = &r_info[r_idx]; + auto const &r_info = game->edit_data.r_info; - if (r_ptr->flags4 & RF4_MULTIPLY) return FALSE; + auto r_ptr = &r_info[r_idx]; + + if (r_ptr->spells & SF_MULTIPLY) return FALSE; if (r_ptr->d_char == 'm') return TRUE; else if (r_ptr->d_char == ',') return TRUE; @@ -41,15 +45,27 @@ static bool_ create_molds_hook(int r_idx) else return FALSE; } -static bool_ quest_poison_gen_hook(void *, void *, void *) +static bool quest_poison_gen_hook(void *, void *, void *) { int cy = 1, cx = 1, x, y, tries = 10000, r_idx; bool_ (*old_get_mon_num_hook)(int r_idx); - if (cquest.status != QUEST_STATUS_TAKEN) return FALSE; - if (p_ptr->wilderness_y != wild_locs[cquest.data[0]][0]) return FALSE; - if (p_ptr->wilderness_x != wild_locs[cquest.data[0]][1]) return FALSE; - if (p_ptr->wild_mode) return FALSE; + if (cquest.status != QUEST_STATUS_TAKEN) + { + return false; + } + if (p_ptr->wilderness_y != wild_locs[cquest.data[0]][0]) + { + return false; + } + if (p_ptr->wilderness_x != wild_locs[cquest.data[0]][1]) + { + return false; + } + if (p_ptr->wild_mode) + { + return false; + } /* Find a good position */ while (tries) @@ -59,7 +75,10 @@ static bool_ quest_poison_gen_hook(void *, void *, void *) cx = randint(cur_wid - 34) + 32; /* Is it a good spot ? */ - if (cave_empty_bold(cy, cx)) break; + if (cave_empty_bold(cy, cx)) + { + break; + } /* One less try */ tries--; @@ -78,15 +97,28 @@ static bool_ quest_poison_gen_hook(void *, void *, void *) /* Pick a monster, using the level calculation */ for (x = cx - 25; x <= cx + 25; x++) + { for (y = cy - 25; y <= cy + 25; y++) { - if (!in_bounds(y, x)) continue; + if (!in_bounds(y, x)) + { + continue; + } - if (distance(cy, cx, y, x) > 25) continue; + if (distance(cy, cx, y, x) > 25) + { + continue; + } - if (magik(80) && ((cave[y][x].feat == FEAT_DEEP_WATER) || (cave[y][x].feat == FEAT_SHAL_WATER))) cave_set_feat(y, x, FEAT_TAINTED_WATER); + if (magik(80) && ((cave[y][x].feat == FEAT_DEEP_WATER) || (cave[y][x].feat == FEAT_SHAL_WATER))) + { + cave_set_feat(y, x, FEAT_TAINTED_WATER); + } - if (distance(cy, cx, y, x) > 10) continue; + if (distance(cy, cx, y, x) > 10) + { + continue; + } if (magik(60)) { @@ -109,6 +141,7 @@ static bool_ quest_poison_gen_hook(void *, void *, void *) } } } + } /* Reset restriction */ get_mon_num_hook = old_get_mon_num_hook; @@ -116,16 +149,19 @@ static bool_ quest_poison_gen_hook(void *, void *, void *) /* Prepare allocation table */ get_mon_num_prep(); - return FALSE; + return false; } -static bool_ quest_poison_finish_hook(void *, void *in_, void *) +static bool quest_poison_finish_hook(void *, void *in_, void *) { struct hook_quest_finish_in *in = static_cast<struct hook_quest_finish_in *>(in_); s32b q_idx = in->q_idx; object_type forge, *q_ptr; - if (q_idx != QUEST_POISON) return FALSE; + if (q_idx != QUEST_POISON) + { + return false; + } c_put_str(TERM_YELLOW, "The water is clean again! Thank you so much.", 8, 0); c_put_str(TERM_YELLOW, "The beautiful Mallorns are safe. Take this as a proof of our gratitude.", 9, 0); @@ -139,7 +175,7 @@ static bool_ quest_poison_finish_hook(void *, void *in_, void *) object_aware(q_ptr); object_known(q_ptr); q_ptr->ident |= IDENT_STOREB; - (void)inven_carry(q_ptr, FALSE); + inven_carry(q_ptr, FALSE); /* Continue the plot */ *(quest[q_idx].plot) = QUEST_NULL; @@ -147,10 +183,10 @@ static bool_ quest_poison_finish_hook(void *, void *in_, void *) del_hook_new(HOOK_QUEST_FINISH, quest_poison_finish_hook); process_hooks_restart = TRUE; - return TRUE; + return true; } -static bool_ quest_poison_dump_hook(void *, void *in_, void *) +static bool quest_poison_dump_hook(void *, void *in_, void *) { hook_chardump_in *in = static_cast<struct hook_chardump_in *>(in_); FILE *f = in->file; @@ -159,16 +195,19 @@ static bool_ quest_poison_dump_hook(void *, void *in_, void *) { fprintf(f, "\n You saved the beautiful Mallorns of Lothlorien."); } - return (FALSE); + return false; } -static bool_ quest_poison_quest_hook(void *, void *in_, void *) +static bool quest_poison_quest_hook(void *, void *in_, void *) { struct hook_init_quest_in *in = static_cast<struct hook_init_quest_in *>(in_); s32b q_idx = in->q_idx; object_type forge, *q_ptr; - if (q_idx != QUEST_POISON) return FALSE; + if (q_idx != QUEST_POISON) + { + return false; + } q_ptr = &forge; object_prep(q_ptr, lookup_kind(TV_POTION2, SV_POTION2_CURE_WATER)); @@ -176,29 +215,48 @@ static bool_ quest_poison_quest_hook(void *, void *in_, void *) object_aware(q_ptr); object_known(q_ptr); q_ptr->ident |= IDENT_STOREB; - q_ptr->note = quark_add("quest"); - (void)inven_carry(q_ptr, FALSE); + q_ptr->inscription = "quest"; + + inven_carry(q_ptr, FALSE); del_hook_new(HOOK_INIT_QUEST, quest_poison_quest_hook); process_hooks_restart = TRUE; - return FALSE; + return false; } -static bool_ quest_poison_drop_hook(void *, void *in_, void *) +static bool quest_poison_drop_hook(void *, void *in_, void *) { struct hook_drop_in *in = static_cast<struct hook_drop_in *>(in_); s32b mcnt = 0, i, x, y; s32b o_idx = in->o_idx; object_type *o_ptr = &p_ptr->inventory[o_idx]; - if (cquest.status != QUEST_STATUS_TAKEN) return FALSE; - if (p_ptr->wilderness_y != wild_locs[cquest.data[0]][0]) return FALSE; - if (p_ptr->wilderness_x != wild_locs[cquest.data[0]][1]) return FALSE; - if (p_ptr->wild_mode) return FALSE; + if (cquest.status != QUEST_STATUS_TAKEN) + { + return false; + } + if (p_ptr->wilderness_y != wild_locs[cquest.data[0]][0]) + { + return false; + } + if (p_ptr->wilderness_x != wild_locs[cquest.data[0]][1]) + { + return false; + } + if (p_ptr->wild_mode) + { + return false; + } - if (o_ptr->tval != TV_POTION2) return FALSE; - if (o_ptr->sval != SV_POTION2_CURE_WATER) return FALSE; + if (o_ptr->tval != TV_POTION2) + { + return false; + } + if (o_ptr->sval != SV_POTION2_CURE_WATER) + { + return false; + } for (i = m_max - 1; i >= 1; i--) { @@ -206,20 +264,34 @@ static bool_ quest_poison_drop_hook(void *, void *in_, void *) monster_type *m_ptr = &m_list[i]; /* Ignore "dead" monsters */ - if (!m_ptr->r_idx) continue; + if (!m_ptr->r_idx) + { + continue; + } - if (m_ptr->status <= MSTATUS_NEUTRAL) mcnt++; + if (m_ptr->status <= MSTATUS_NEUTRAL) + { + mcnt++; + } } if (mcnt < 10) { for (x = 1; x < cur_wid - 1; x++) + { for (y = 1; y < cur_hgt - 1; y++) { - if (!in_bounds(y, x)) continue; + if (!in_bounds(y, x)) + { + continue; + } - if (cave[y][x].feat == FEAT_TAINTED_WATER) cave_set_feat(y, x, FEAT_SHAL_WATER); + if (cave[y][x].feat == FEAT_TAINTED_WATER) + { + cave_set_feat(y, x, FEAT_SHAL_WATER); + } } + } cmsg_print(TERM_YELLOW, "Well done! The water seems to be clean now."); @@ -228,24 +300,29 @@ static bool_ quest_poison_drop_hook(void *, void *in_, void *) del_hook_new(HOOK_DROP, quest_poison_drop_hook); process_hooks_restart = TRUE; - return FALSE; + return false; } else { msg_print("There are too many monsters left to cure the water."); - return TRUE; + return true; } - return FALSE; + return false; } -bool_ quest_poison_init_hook(int q_idx) +void quest_poison_init_hook() { + auto &messages = game->messages; + /* Get a place to place the poison */ if (!cquest.data[1]) { cquest.data[1] = TRUE; cquest.data[0] = rand_int(4); - if (wizard) message_add(format("Wilderness poison %d, %d", wild_locs[cquest.data[0]][0], wild_locs[cquest.data[0]][1]), TERM_BLUE); + if (wizard) + { + messages.add(format("Wilderness poison %d, %d", wild_locs[cquest.data[0]][0], wild_locs[cquest.data[0]][1]), TERM_BLUE); + } } if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED)) @@ -259,5 +336,4 @@ bool_ quest_poison_init_hook(int q_idx) add_hook_new(HOOK_INIT_QUEST, quest_poison_quest_hook, "poison_iquest", NULL); } add_hook_new(HOOK_CHAR_DUMP, quest_poison_dump_hook, "poison_dump", NULL); - return (FALSE); } |