summaryrefslogtreecommitdiff
path: root/npc/000-2-1/alige.txt
blob: 68754d1e452b3579d47c5cc4f8370be74b5c4dfd (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
// Evol scripts.
// Authors:
//    Ablu
//    Alige
//    Qwerty Dragon
//    Reid
//    Vasily_Makarov
// Description:
//    Hidden in a ship's hole.
// 2 bits array:
//    ShipQuests
// Variable:
//    ShipQuests_Alige
// Values:
//    0   Never talk.
//    1   First talk.
//    2   Accept the task.
//    3   Bring first food.

000-2-1,43,32,0	script	AligeTrigger	NPC_HIDDEN,1,1,{

OnTouch:
    if (getareausers() <= 1)
    {
        setnpcdir "Alige", 2;
        stopnpctimer;
        initnpctimer;
    }

    if (getq(ShipQuests_Alige) > 0) close;
    doevent "Alige::OnFirstEncounter";

    close;

OnUnTouch:
    if (getareausers() == 0)
    {
        setnpcdir "Alige", 4;
        stopnpctimer;
        initnpctimer;
    }
    close;

OnTimer190:
    stopnpctimer;

    if (getnpcdir("Alige") == 2) setnpcdir "Alige", 6;
    if (getnpcdir("Alige") == 4) setnpcdir "Alige", 8;

    end;
}

000-2-1,43,31,0	script	Alige	NPC_ALIGE,{
    .@q = getq(ShipQuests_Alige);
    if (.@q > 1) goto L_AskForFood;

    goto OnFirstEncounter;

OnFirstEncounter:
    setq ShipQuests_Alige, 1;

    setcamnpc;
    mesn "Hidden Person";
    mesq l("Hey, psst! You're not a sailor, right?");
    next;
    restorecam;

    menu
        lg("I am, who are you?"), -,
        lg("Indeed, I am not."), L_NeedHelp;

    mes "";
    mesn "Narrator";
    mesc(l("The stowaway doesn't answer."), 9);

    close;

L_NeedHelp:
    setcamnpc;
    mes "";
    mesn "Hidden Person";
    mesq l("Good, good... Hey, could you help me please? I beg you, please, pleeeease...");
    next;
    restorecam;

    menu
        l("Why not, but who are you, and what kind of help do you need?"), L_CanHelp;
        l("Sorry but I have no time for this."), -;

    closeclientdialog;
    close;

L_CanHelp:
    setcamnpc;
    mes "";
    mesn;
    mesq l("My name is Alige, I've been hiding here for weeks. All I have to eat are these berries... berries... berries...");
    next;
    mesq l("I'm losing my mind here, I need something else to eat!");
    next;
    mesq l("Could you please bring me something which isn't a berry, and I'm not big on vegetables either. I need proteins!");
    next;
    restorecam;

    menu
        l("Sure, but what will you give me in exchange?"), L_AboutReward,
        l("Why don't you come out?"), -;

L_ExplainHiding:
    setcamnpc;
    mes "";
    mesn;
    mesq l("No, I can't. I won't! All I wanted was to travel across the seas for fun, growl... sniff. And in this hole in the floor, as you can see, I have lots of fun.");
    next;
    mesq l("Oh... um... actually... all I wanted was to get to Artis. Err... but I didn't, uhm... have enough money to pay for the ferry!");
    next;
    mesq l("Please don't tell people you saw me. I don't want to be decapitated or get thrown into the sea as food for sharks, or get my hair mussed!");
    next;
    restorecam;

    if (getq(ShipQuests_Alige) == 2) goto L_SoAskForFood;
    goto L_Accept;

L_AboutReward:
    setcamnpc;
    mes "";
    mesn;
    mesq l("I'll share my berries with you if you help me.");
    next;
    restorecam;

L_Accept:
    menu
        l("Understood, I will help you."), L_FirstAccepted,
        l("What is Artis?"), L_Artis,
        l("I think I should report you to the crew members."), -;

    setcamnpc;
    mesq lg("Growl, sniff, grr! You'd better not tell anyone you saw me!");

    close;

L_Artis:
    setcamnpc;
    mes "";
    mesn;
    mesq l("It's a commercial port of Andorra, it's weird that you don't know about it since it is one of the most famous cities throughout the whole world. But hey, back to me. Remember me telling you that I'm hun...grrr...eee!");
    next;
    restorecam;

    if (.@q == 2) goto L_SoAskForFood;
    goto L_Accept;

L_FirstAccepted:
    if (getq(ShipQuests_Alige) >= 2) goto L_Accepted;
    setq ShipQuests_Alige, 2;

    goto L_Accepted;

L_Accepted:
    setcamnpc;
    mes "";
    mesn;
    mesq lg("Great, what food do you have for me today?");
    next;
    restorecam;

L_GiveFood:
    mes "";

    mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
    .@id = requestitem();
    if (.@id <= 0) goto L_Quit; // Quit message.
    if (countitem(.@id) == 0) goto L_Quit; // If don't have the food

    if (array_find(.vegetables, .@id) >= 0) goto L_NoReward; // In case of wrong food.
    if (array_find(.poisonable, .@id) >= 0) goto L_Poison; // In case of poisoned food (or food with effects).
    if (.@id == Piberries) goto L_NoMore; // In case of Piberries.
    if (.@id == RedPlushWine) goto L_Drunk; // In case of Alcohol.

    // Default message for non food
    if (array_find(.commonfood, .@id) == -1) goto L_NoFood;

    inventoryplace Piberries, 3;
    delitem .@id, 1;

    setcamnpc;
    mes "";
    mesn;
    mesq l("Thank you so much! Here, have some of my berries.");

    setq ShipQuests_Alige, 3;
    getitem Piberries, rand(1, 3);
    next;

    goto L_ReturnMenu;

L_NoReward:
    setcamnpc;
    mes "";
    mesn;
    mesq l("You don't expect me to eat that, do you? Give me something else!");
    next;
    restorecam;

    goto L_GiveFood;

L_Drunk:
    setcamnpc;
    speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
        l("I asked for food but... *hips* Ah, that'll do!");
    restorecam;

    goto L_GiveFood;

L_NoFood:
    setcamnpc;
    // We must first determine if it is at least edible (IT_HEALING)
    if (getiteminfo(.@id, ITEMINFO_TYPE) == IT_HEALING)
    {
        speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
            l("That looks too exotic for me to eat!");
    }
    else
    {
        speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
            l("That doesn't looks edible to me!");
    }
    restorecam;

    goto L_GiveFood;

L_ReturnMenu:
    setcamnpc;
    mesq l("Do you have anything else for me?");
    next;
    restorecam;

    goto L_GiveFood;

L_NoMore:
    setcamnpc;
    mes "";
    mesn;
    mesq l("Grr, don't give me more berries! I don't want them, stupid berries, stupid... Stupid... Stupid!");
    next;

    goto L_ReturnMenu;

L_Poison:
    setcamnpc;
    mes "";
    mesn;
    mesq l("Don't try to poison me! I know what that does!");
    next;
    restorecam;
    goto L_ReturnMenu;

L_SoAskForFood:
    setcamnpc;
    mesn;
    mesq l("So, do you have anything for me today?");
    next;
    restorecam;
    goto L_IntroMenu;

L_AskForFood:
    setcamnpc;
    mesn;
    mesq l("Do you have anything for me today?");
    next;
    restorecam;

L_IntroMenu:
    menu
        l("Yes."), L_GiveFood,
        l("Where can I find some food?"), L_FindFood,
        l("Why are you hiding?") + " " + l("Why don't you come out?"), L_ExplainHiding,
        l("What is Artis?"), L_Artis,
        l("I think I should report you to the crew members."), -;

    setcamnpc;
    mesq lg("Growl, sniff, grr! You'd better not tell anyone you saw me!");

    close;

L_FindFood:
    setcamnpc;
    mes "";
    mesn;
    mesq l("There are some flying yellow plushes around you. They're called pious. Getting a roasted leg of one of them would be perfect.");
    next;
    mesq l("I'd like to catch one of them, but they fly away when I try.");
    next;
    mesq l("Walking around a bit, it'll be easy for you to catch one, I bet. Impale one of them for me please.");
    next;
    restorecam;
    mesn "Narrator";
    mesc(l("You can attack a monster by clicking on it, or from your keyboard you can press the 'A' key to select the monster followed by 'Ctrl' to attack it."), 9);
    next;
    mesc(l("Once the monster is dead, click on the dropped items to add them to your inventory. You can also use the 'Z' key to claim the drops."), 9);

    close;

L_Quit:
    setcamnpc;
    mes "";
    mesn;
    mesq l("Too bad... Come back when you'll have some nice food for me. Growl... grumble... grumble.");

    close;

OnInit:
    .bodytype = BODYTYPE_3;
    .distance = 2;

    // Array of foods (remember to update in 001-2-22 as well)
    setarray .commonfood, Bread, Fungus, Cheese, PiouLegs, Aquada, HalfCroconut, Plushroom, PumpkinJuice, Manana, Curshroom, Carrot, CarpSandwich, PioulegSandwich;
    setarray .vegetables, Acorn, LettuceLeaf, Croconut, MananaSandwich;
    setarray .poisonable, SeaDrops, PinkBlobime, PumpkinSeeds, UrchinMeat, EasterEgg;
    end;
}