summaryrefslogtreecommitdiff
path: root/world/map/npc/001-1/bernard.txt
blob: c152f67339c41dcac5f9a645a970349e622904b3 (plain) (blame)
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Variables used: nibble 0 of QUEST_SouthTulimshar

001-1.gat,37,44,0|script|Bernard|117,
{
    // This NPC previously used the variable TMW_Quest
    callfunc "ClearVarTMW_Quest";

    set @state, ((QUEST_SouthTulimshar & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);

    if(@state >= 4) goto L_Done2;
    if(@state == 3) goto L_Progress2;
    if(@state == 2) goto L_Done1;
    if(@state == 1) goto L_Progress;

    set @TEMP, rand(2);
    if(@TEMP == 1) goto L_Opening1;
    goto L_Opening0;

L_Opening0:
    mes "[Bernard]";
    mes "\"Tulimshar is crawling with maggots.  Hey, I need a favor, could you help me a bit?\"";
    next;
    goto L_Ask;

L_Opening1:
    mes "[Bernard]";
    mes "\"The taste of maggots in soup is...  unforgettable, they taste simply divine!  Would you help me kill some?\"";
    next;
    goto L_Ask;

L_Ask:
    menu
        "Yes.", L_Yes,
        "No.", L_Close;

L_Yes:
    set @TEMP, rand(2);
    if(@TEMP == 1) goto L_Req1;
    goto L_Req0;

L_Req0:
    mes "[Bernard]";
    mes "\"Great!  I need a Roasted Maggot for my soup.\"";
    next;
    goto L_Set;

L_Req1:
    mes "[Bernard]";
    mes "\"Bring me a Roasted Maggot.  I'll give you something if you do.\"";
    next;
    goto L_Set;

L_Set:
    set @state, 1;
    callsub S_Update_Var;
    mes "[Bernard]";
    mes "\"Please bring it to me!\"";
    goto L_Close;

L_Progress:
    if (countitem("RoastedMaggot") < 1) goto L_NotEnough;
    mes "[Bernard]";
    mes "\"Oooh, perfect! It's perfect!";
    mes "You brought me my Roasted Maggot!  Here, have some cake for your troubles.\"";
    getinventorylist;
    if (@inventorylist_count - (countitem("RoastedMaggot") == 1) > 99 - (countitem("CherryCake") == 0) ) goto L_TooMany;
    delitem "RoastedMaggot", 1;
    getexp 100, 0;
    getitem "CherryCake", 5;
    set @state, 2;
    callsub S_Update_Var;
    next;
    mes "\"Now let's see...\"";
    goto L_Close;

L_Progress2:
    if (countitem("MaggotSlime") < 3) goto L_NotEnough1;
    mes "[Bernard]";
    mes "\"Nice!  They're perfect, just perfect!";
    mes "You brought me the 3 Maggot Slimes!  Here, have some beer as reward.\"";
    getinventorylist;
    if ((@inventorylist_count - (countitem("MaggotSlime") == 3) > 99  - (countitem("Beer") == 0) )) goto L_TooMany;
    delitem "MaggotSlime", 3;
    getexp 100, 0;
    getitem "Beer", 3;
    set @state, 4;
    callsub S_Update_Var;
    goto L_Close;

L_NotEnough:
    mes "[Bernard]";
    mes "\"Oh, please hurry and bring me a Roasted Maggot.  I'm yearning for maggot soup!\"";
    goto L_Close;

L_NotEnough1:
    mes "[Bernard]";
    mes "\"Please do hurry and bring me 3 Maggot Slimes, so I can finish my soup!\"";
    goto L_Close;

L_Done1:
    mes "[Bernard]";
    mes "\"Thank you so much!\"";
    mes "\"But...  something is missing to make the soup creamy.\"";
    next;
    mes "\"I need 3 Maggot Slimes for that.\"";
    mes "\"Bring them to me, and I'll give you something nice.\"";
    set @state, 3;
    callsub S_Update_Var;
    goto L_Close;

L_Done2:
    mes "[Bernard]";
    mes "\"I didn't mention it before, but I also put beer in my soup.  I hope you like beer as much as I do, because, you see...\"";
    next;
    mes "\"Beer is life!\"";
    goto L_Close;

L_Close:
    set @TEMP, 0;
    set @state, 0;
    close;

L_TooMany:
    next;
    mes "[Bernard]";
    mes "\"You don't have room for my reward.  I'll wait until you do.\"";
    goto L_Close;

S_Update_Var:
    set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_0_MASK) | (@state << NIBBLE_0_SHIFT));
    return;
}