1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#undef cquest
#define cquest (quest[QUEST_NARSIL])
bool_ quest_narsil_move_hook(char *fmt)
{
s32b y, x;
cave_type *c_ptr;
int i;
object_type *o_ptr;
y = get_next_arg(fmt);
x = get_next_arg(fmt);
c_ptr = &cave[y][x];
if (cquest.status != QUEST_STATUS_TAKEN) return FALSE;
/* The castle of Aragorn */
if ((c_ptr->feat != FEAT_SHOP) || (c_ptr->special != 14)) return FALSE;
/* Look out for Narsil */
for (i = 0; i < INVEN_TOTAL; i++)
{
o_ptr = get_object(i);
if (!o_ptr->k_idx) continue;
if (o_ptr->name1 == ART_NARSIL) break;
}
if (i == INVEN_TOTAL) return FALSE;
cmsg_print(TERM_YELLOW, "I heard that the broken sword had been found!");
cmsg_print(TERM_YELLOW, "I thought it was only a rumor... until now.");
cmsg_print(TERM_YELLOW, "What you have is really the sword that was broken.");
cmsg_print(TERM_YELLOW, "I will get it reforged...");
cmsg_print(TERM_L_BLUE, "Aragorn leaves for a few hours then comes back...");
cmsg_print(TERM_YELLOW, "Here it is, Anduril, the sword that was forged and is");
cmsg_print(TERM_YELLOW, "reforged again. Take it; you will surely need it for your quest.");
object_prep(o_ptr, lookup_kind(TV_SWORD, SV_LONG_SWORD));
o_ptr->name1 = ART_ANDURIL;
apply_magic(o_ptr, -1, TRUE, TRUE, TRUE);
object_aware(o_ptr);
object_known(o_ptr);
inven_item_describe(i);
inven_item_optimize(i);
/* Window stuff */
p_ptr->window |= (PW_EQUIP | PW_PLAYER | PW_INVEN);
/* Continue the plot */
cquest.status = QUEST_STATUS_FINISHED;
del_hook(HOOK_MOVE, quest_narsil_move_hook);
process_hooks_restart = TRUE;
return TRUE;
}
bool_ quest_narsil_dump_hook(char *fmt)
{
if (cquest.status >= QUEST_STATUS_COMPLETED)
{
fprintf(hook_file, "\n The sword that was broken is now reforged.");
}
return (FALSE);
}
bool_ quest_narsil_identify_hook(char *fmt)
{
if (cquest.status == QUEST_STATUS_UNTAKEN)
{
int i;
object_type *o_ptr;
s32b item;
item = get_next_arg(fmt);
o_ptr = get_object(item);
if (o_ptr->name1 == ART_NARSIL)
{
cquest.status = QUEST_STATUS_TAKEN;
for (i = 0; i < 5; i++)
{
if (quest[QUEST_NARSIL].desc[i][0] != '\0')
{
cmsg_print(TERM_YELLOW, quest[QUEST_NARSIL].desc[i]);
}
}
add_hook(HOOK_MOVE, quest_narsil_move_hook, "narsil_move");
del_hook(HOOK_IDENTIFY, quest_narsil_identify_hook);
process_hooks_restart = TRUE;
}
}
return (FALSE);
}
bool_ quest_narsil_init_hook(int q_idx)
{
if ((cquest.status >= QUEST_STATUS_TAKEN) && (cquest.status < QUEST_STATUS_FINISHED))
{
add_hook(HOOK_MOVE, quest_narsil_move_hook, "narsil_move");
}
if (cquest.status == QUEST_STATUS_UNTAKEN) add_hook(HOOK_IDENTIFY, quest_narsil_identify_hook, "narsil_id");
add_hook(HOOK_CHAR_DUMP, quest_narsil_dump_hook, "narsil_dump");
return (FALSE);
}
|