summaryrefslogtreecommitdiff
path: root/src/q_poison.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/q_poison.c')
-rw-r--r--src/q_poison.c238
1 files changed, 0 insertions, 238 deletions
diff --git a/src/q_poison.c b/src/q_poison.c
deleted file mode 100644
index e6fed3a1..00000000
--- a/src/q_poison.c
+++ /dev/null
@@ -1,238 +0,0 @@
-#undef cquest
-#define cquest (quest[QUEST_POISON])
-
-static int wild_locs[4][2] =
-{
- { 32, 49, },
- { 32, 48, },
- { 33, 48, },
- { 34, 48, },
-};
-
-static bool_ create_molds_hook(int r_idx)
-{
- monster_race *r_ptr = &r_info[r_idx];
-
- if (r_ptr->flags4 & RF4_MULTIPLY) return FALSE;
-
- if (r_ptr->d_char == 'm') return TRUE;
- else if (r_ptr->d_char == ',') return TRUE;
- else if (r_ptr->d_char == 'e') return TRUE;
- else return FALSE;
-}
-
-bool_ quest_poison_gen_hook(char *fmt)
-{
- 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;
-
- /* Find a good position */
- while (tries)
- {
- /* Get a random spot */
- cy = randint(cur_hgt - 24) + 22;
- cx = randint(cur_wid - 34) + 32;
-
- /* Is it a good spot ? */
- if (cave_empty_bold(cy, cx)) break;
-
- /* One less try */
- tries--;
- }
-
- /* Place the baddies */
-
- /* Backup the old hook */
- old_get_mon_num_hook = get_mon_num_hook;
-
- /* Require "okay" monsters */
- get_mon_num_hook = create_molds_hook;
-
- /* Prepare allocation table */
- get_mon_num_prep();
-
- /* 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 (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 (distance(cy, cx, y, x) > 10) continue;
-
- if (magik(60))
- {
- int m_idx;
-
- r_idx = get_mon_num(30);
- m_idx = place_monster_one(y, x, r_idx, 0, FALSE, MSTATUS_ENEMY);
- if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST;
-
- /* Sometimes make it up some levels */
- if (magik(80) && m_idx)
- {
- monster_type *m_ptr = &m_list[m_idx];
-
- if (m_ptr->level < p_ptr->lev)
- {
- m_ptr->exp = MONSTER_EXP(m_ptr->level + randint(p_ptr->lev - m_ptr->level));
- monster_check_experience(m_idx, TRUE);
- }
- }
- }
- }
-
- /* Reset restriction */
- get_mon_num_hook = old_get_mon_num_hook;
-
- /* Prepare allocation table */
- get_mon_num_prep();
-
- return FALSE;
-}
-bool_ quest_poison_finish_hook(char *fmt)
-{
- object_type forge, *q_ptr;
- s32b q_idx;
-
- q_idx = get_next_arg(fmt);
-
- 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);
-
- q_ptr = &forge;
- object_prep(q_ptr, lookup_kind(TV_DRAG_ARMOR, SV_DRAGON_BLUE));
- q_ptr->found = OBJ_FOUND_REWARD;
- q_ptr->number = 1;
- q_ptr->name2 = EGO_ELVENKIND;
- apply_magic(q_ptr, 1, FALSE, FALSE, FALSE);
- object_aware(q_ptr);
- object_known(q_ptr);
- q_ptr->ident |= IDENT_STOREB;
- (void)inven_carry(q_ptr, FALSE);
-
- /* Continue the plot */
- *(quest[q_idx].plot) = QUEST_NULL;
-
- del_hook(HOOK_QUEST_FINISH, quest_poison_finish_hook);
- process_hooks_restart = TRUE;
-
- return TRUE;
-}
-bool_ quest_poison_dump_hook(char *fmt)
-{
- if (cquest.status >= QUEST_STATUS_COMPLETED)
- {
- fprintf(hook_file, "\n You saved the beautiful Mallorns of Lothlorien.");
- }
- return (FALSE);
-}
-bool_ quest_poison_quest_hook(char *fmt)
-{
- object_type forge, *q_ptr;
- s32b q_idx;
-
- q_idx = get_next_arg(fmt);
-
- if (q_idx != QUEST_POISON) return FALSE;
-
- q_ptr = &forge;
- object_prep(q_ptr, lookup_kind(TV_POTION2, SV_POTION2_CURE_WATER));
- q_ptr->number = 99;
- 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);
-
- del_hook(HOOK_INIT_QUEST, quest_poison_quest_hook);
- process_hooks_restart = TRUE;
-
- return FALSE;
-}
-bool_ quest_poison_drop_hook(char *fmt)
-{
- s32b mcnt = 0, i, x, y, o_idx;
- object_type *o_ptr;
-
- o_idx = get_next_arg(fmt);
- 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 (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--)
- {
- /* Access the monster */
- monster_type *m_ptr = &m_list[i];
-
- /* Ignore "dead" monsters */
- if (!m_ptr->r_idx) continue;
-
- 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 (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.");
-
- cquest.status = QUEST_STATUS_COMPLETED;
-
- del_hook(HOOK_DROP, quest_poison_drop_hook);
- process_hooks_restart = TRUE;
-
- return FALSE;
- }
- else
- {
- msg_print("There are too many monsters left to cure the water.");
- return TRUE;
- }
- return FALSE;
-}
-bool_ quest_poison_init_hook(int q_idx)
-{
- /* 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(MESSAGE_MSG, 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))
- {
- add_hook(HOOK_DROP, quest_poison_drop_hook, "poison_drop");
- add_hook(HOOK_WILD_GEN, quest_poison_gen_hook, "poison_gen");
- add_hook(HOOK_QUEST_FINISH, quest_poison_finish_hook, "poison_finish");
- }
- if (cquest.status < QUEST_STATUS_COMPLETED)
- {
- add_hook(HOOK_INIT_QUEST, quest_poison_quest_hook, "poison_iquest");
- }
- add_hook(HOOK_CHAR_DUMP, quest_poison_dump_hook, "poison_dump");
- return (FALSE);
-}