summaryrefslogtreecommitdiff
path: root/npc/025-4/main.txt
blob: a0722314751846f9838576a41e241c495b408de2 (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
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
// TMW-2 Script.
// Author:
//    Jesusalva
// Notes:
//    Player Quest Finale

025-4,81,78,0	script	#MQFinHutA	NPC_HIDDEN,1,0,{
    end;

OnTouch:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    if (.@q > 22) end;
    // Cheater Detected
    if (.@q < 22) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (.@q != 22) end;
    mesc l("This hut seems to be abandoned. Do you want to explore it?");
    if (askyesno() == ASK_YES) {
        mesc l("Looking inside, it becomes clear it has been abandoned for several years.");
        next;
        mesc l("The hut appears to be a mix between a watchhouse and a lighthouse. It likely was used to support the naval operations of the expedition.");
        next;
        mesc l("You can find harpoons, a telescope, an empty weapon rack, and of course, the central light. The hut definitely wasn't assaulted by monsters, but it's hard to say what happened to its occupants.");
        if (!(.@q2 & FRAG_HASKEY)) {
            next;
            mesc l("You see several keys hanging on the wall, along small plates with numbers on them, presumably describing what they're for.");
            next;
            if (!(.@q2 & FRAG_NEEDSKEY)) {
                mesc l("You don't need any of them, so you leave them alone.");
            } else {
                mesc l("You grab the key to open the small chest.");
                setq2 General_Narrator, .@q2 | FRAG_HASKEY;
            }
        } else {
            mesc l("You are currently carrying all the keys you needed here.");
        }
    }
    close;
}

025-4,91,50,0	script	#MQFinCtrlA	NPC_HIDDEN,0,0,{
    end;

OnTouch:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    // Cheater Detected
    if (.@q < 22) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (.@q != 22) end;
    if (!(.@q2 & FRAG_EXPLOREDCAMP)) {
        slide any(90, 92), 51;
        dispbottom l("I should explore the huts before going up.");
    }
    end;
}

// The huts doors use 2 tiles, so all NPCs have a duplicate
025-4,95,52,0	script	#MQFinHutB	NPC_NO_SPRITE,{
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    // Cheater Detected
    if (.@q < 22) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (.@q != 22) end;
    mes l("You cannot enter this hut, but you can peek inside.");
    next;
    mes l("You can see a lot of weapons inside, mostly bows or crossbows. Likely their armory.");
    next;
    mes l("The distinct lack of metal weapons such as swords make you nervous, and makes impossible to say for how long it was abandoned.");
    if (!(.@q2 & FRAG_CAMP_01))
        setq2 General_Narrator, .@q2 | FRAG_CAMP_01;
    close;

OnInit:
    .distance=3;
    end;
}
025-4,96,52,0	duplicate(#MQFinHutB)	#MQFinHutB2	NPC_NO_SPRITE

// The huts doors use 2 tiles, so all NPCs have a duplicate
025-4,90,59,0	script	#MQFinHutC	NPC_NO_SPRITE,{
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    // Cheater Detected
    if (.@q < 22) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (.@q != 22) end;
    mes l("You cannot enter this hut, but you can peek inside.");
    next;
    mes l("You can see fishing poles, maps, and a desk in the center. It seems to be their command center.");
    next;
    mes l("The desk, however, is empty. There's no point trying to enter here.");
    if (!(.@q2 & FRAG_CAMP_02))
        setq2 General_Narrator, .@q2 | FRAG_CAMP_02;
    close;

OnInit:
    .distance=3;
    end;
}
025-4,91,59,0	duplicate(#MQFinHutC)	#MQFinHutC2	NPC_NO_SPRITE

// The huts doors use 2 tiles, so all NPCs have a duplicate
025-4,80,60,0	script	#MQFinHutD	NPC_NO_SPRITE,{
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    // Cheater Detected
    if (.@q < 22) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (.@q != 22) end;
    mes l("You cannot enter this hut, but you can peek inside.");
    next;
    mes l("You can see several navigation apparatus, and some sleeping sacks.");
    next;
    mes l("There's nothing remarkable or which could help you.");
    if (!(.@q2 & FRAG_CAMP_03))
        setq2 General_Narrator, .@q2 | FRAG_CAMP_03;
    close;

OnInit:
    .distance=3;
    end;
}
025-4,79,60,0	duplicate(#MQFinHutD)	#MQFinHutD2	NPC_NO_SPRITE

// Their central dorm
025-4,85,58,0	script	#MQFinLHut	NPC_HIDDEN,1,0,{
    end;

OnTouch:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    // Cheater Detected
    if (.@q < 22) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (.@q != 22) end;
    if (!(.@q2 & FRAG_CAMP_01) ||
        !(.@q2 & FRAG_CAMP_02) ||
        !(.@q2 & FRAG_CAMP_03)) {
        dispbottom l("There's a terrible smell inside. You should explore the other huts before braving inside this one.");
        end;
    }
    mesc l("This hut seems to be abandoned. Do you want to explore it?");
    if (askyesno() == ASK_YES) {
        mesc l("The source of the smell is quickly noticed - several dead bodies lie on the beds, which compose the presumably living quarters of this encampment.");
        next;
        mesc l("The smell, however, means the bodies are recent. While it makes no sense for the bodies to exist, they couldn't have been dead for longer than a week, or a couple of them at worst case.");
        next;
        mesc l("You're not entirely sure what to make out of this. There's nothing of importance in the room and the stench is awful, so you leave quickly.");
        next;
        closeclientdialog;
        if (!(.@q2 & FRAG_EXPLOREDCAMP))
            setq2 General_Narrator, .@q2 | FRAG_EXPLOREDCAMP;
        slide 85, 59;
    }
    close;
}

// Your parent's hut
025-4,74,21,0	script	#MQFinPHut	NPC_HIDDEN,1,0,{
    end;

OnTouch:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    .@q3=getq3(General_Narrator);
    if (.@q > 22) end;
    // Cheater Detected
    if (.@q < 22 || !(.@q2 & FRAG_EXPLOREDCAMP)) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (.@q != 22) end;
    mesc l("This hut is clearly different from the others. It has a bed, a small desk, a place where a weapon should have been, and a wooden door leading to the other side.");
    next;
    mesc l("...A sealed, magically reinforced door, with magical wards you've never seen before, which you can only assume to keep monsters away.");
    next;
    mesc l("With exploring the northern part as a non-option, you look at a small chest over the desk. It's locked, and there's a name plate on it.");
    next;
    // Lets make your name code
    mesc l("The name plate reads: \"%s - #%d\". Now, that's not ominous at all.", strcharinfo(0), #REG_DATE);
    next;
    if (!(.@q2 & FRAG_HASKEY)) {
        mesc l("If you had a key, you could open this chest.");
        setq2 General_Narrator, .@q2 | FRAG_NEEDSKEY;
        close;
    }

    if (getq(LoFQuest_EPISODE) < 17) {
        mesc l("You try to open the chest with the small key you took earlier, but it seems to be magically warded.");
        next;
        mesc l("Words begin to form on it, a message for you.");
        next;
        mesn l("Elli, Supreme Guardian of the Talpan Races and an Original");
        mesq l("Meet me in the past, and you shall learn the future. For the present has nothing for you yet.");
        next;
        mesc l("It seems you need to travel back in time and find this Elli before you manage to open the chest.");
        close;
    }
    // NOW we use Story Mode
    setpcblock(PCBLOCK_HARD, true);
    mesc l("STORY MODE ENABLED. Monsters won't attack you, so you can read without worries."), 1;
    mes "";
    mesc l("Carefully you open the chest, with the small key you took earlier.");
    next;

    mesc l("The chest has only a small piece of paper, a letter. You carefully unfold it, and start reading it.");
    next;

    mesn l("Your father?");
    mesq l("%s, if you're reading this, then as Ms. Elli predicted, you survived the seawreck and returned to our encampment. You might notice some things changed in these short weeks we don't see each other.", strcharinfo(0));
    next;
    mesn l("Your father?");
    mesq l("Your mother is still missing, but if the sea didn't claim her then she'll not come back here, and will find my message to her at the designated point.");
    next;
    mesn l("Your father?");
    mesq l("As your mother suspected, Benjamin Yorn betrayed us. Or rather, the Moubootaur took control over him. But you never believed that, so I have no choice but to leave this message in our old residence, risky as that may, in case the sea didn't claim your soul."); // Benjamin Yorn = B. Jorn = Bjørn :3
    next;
    mesn l("Your father?");
    mesq l("As you surely remember, there are 8 Mana Fragments, which symbolize the essence of the eight places where Soul Menhirs are: Candor, Hurnscald, Halinarzo, Lilit, Nivalis, Tulimshar, Land of Fire and Frostia. And that the Monster King collected all of them %s ago.", FuzzyTime($NIVALIS_LIBDATE));
    next;
    mesn l("Your father?");
    mesq col(l("And as you certainly know: the War between the Moubootaur and the sentient races, the Blood which was spilled, and the Inspiration it caused."), 3);
    next;
    mesn l("Your father?");
    mesq col(l("The Mana, the World, snarling Defiance at him. The Guard and the Heir, the four Originals assembled, the lesser Races which were born. The Later, and finally, the Seal of the Moubootaur."),3);
    next;
    mesn l("Your father?");
    mesq col(l("The Fragments scattered, and the War which was to come. The fate of Terranite, the story of all. AEGIS MAGNA PROTECTIVE SCUTUM."),3);
    next;
    mesn l("Your father?");
    mesq l("For the Mana Source and the Moubootaur haven't finished their struggle, the Supreme Guardian of the World giving form and source to all mana, and granting its protection to us mortals, by magic and the Aegis Scutum.");
    next;
    // AT THIS POINT, send to kill Mandragoras, set FRAG_LETTER
    // Then open the box on the upper floor where the rest the letter shall be.
    // You need to kill the Mandragoras to climb the ladder, not to open the box
    // To open the box you need to earn Lightbringer's acknowledgement, which
    // you already did to find Lalica's Magic Apple.
    if ((.@q2 & FRAG_LETTER) && .@q3 >= 5) {
        mesn l("Your father?");
        mesq b(l("Dispel the illusion on the stairs west of here, and find my final gift to you in the box. If the Mana Source approves of you, that is."));
        next;
        mesc l("You notice a simple trick; uppercase words in the Aegis Magna Protective Scutum spell which are not part of the chant: AMTMTT. Corresponding to the broken pieces on the stair, you now know how to climb it.");
        setq2 General_Narrator, .@q2 | FRAG_LADDER;
    } else {
        mesn l("Your father?");
        mesq b(l("Prove yourself by killing %d %s west of here, then come back here and read this letter again. The meaning of the words will have shifted.", 5, getmonsterlink(Mandragora)));
        setq2 General_Narrator, .@q2 | FRAG_LETTER;
    }

    next;
    setpcblock(PCBLOCK_HARD, false);
    closeclientdialog;
    end;

OnKill:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    .@q3=getq3(General_Narrator) + 1;
    if (.@q > 22) end;
    // Cheater Detected
    if (.@q < 22 || !(.@q2 & FRAG_EXPLOREDCAMP)) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (!(.@q2 & FRAG_LETTER)) end;
    if (.@q2 & FRAG_LADDER) end;
    if (.@q3 > 5) end;
    setq3 General_Narrator, .@q3;
    dispbottom l("Progress %d/%d %s", .@q3, 5, strmobinfo(1, Mandragora));
    end;
}

// The stairway has a different logic
025-4,26,56,0	script	#MQFinStairway	NPC_HIDDEN,0,0,{
    end;

OnTouch:
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    .@q3=getq3(General_Narrator);
    if (.@q > 22) end;
    // Cheater Detected
    if (.@q < 22 || !(.@q2 & FRAG_EXPLOREDCAMP)) {
        warp "Save", 0, 0;
        die();
        end;
    }
    if (!(.@q2 & FRAG_LADDER) && .@q < 23) {
        slide 25, 57;
        dispbottom l("The stair is broken; we cannot go up.");
        end;
    }

    slide 26, 51;
    end;
}




// Pandorica's Box
025-4,32,41,0	script	#MQFinBox	NPC_NO_SPRITE,{
    .@q=getq(General_Narrator);
    .@q2=getq2(General_Narrator);
    .@q3=getq3(General_Narrator);
    if (.@q >= 23) end;
    // Cheater Detected
    if (.@q < 22 || .@q2 != 255) {
        warp "Save", 0, 0;
        die();
        end;
    }
    setpcblock(PCBLOCK_HARD, true);
    mesc l("STORY MODE ENABLED. Monsters won't attack you, so you can read without worries."), 1;
    mes "";
    mesn l("Your father?");
    mesq l("Everything the Moubootaur does, he does for this one moment. And everything the Mana Source does, is for the same moment. And everything Elli does, is for her own amusement. Naturally.");
    next;
    mesn l("Your father?");
    mesq l("All the monsters pledge to the Moubootaur, so we knew he was involved the moment the Monster King started collecting the Fragments. As soon as the ritual is conducted in the Holy Site of Kolev, where Artis was built upon, the final moves on this dance will begin."); // Fires of Steam. Time-accurate.
    next;
    mesn l("Your father?");
    mesq l("I have no doubts that once the ritual is conducted, the Moubootaur will start discarding the pieces he no longer needs, such as the expedition leader, Ben Yorn. Unfortunately, these will not revive, they shall face permanent death."); // Ben Yorn = Benjamin Yorn = B. Jorn = Bjørn :3 The Moubootaur takes the souls for himself, like the Soul Eater. Without a soul, you suffer permanent death.
    next;
    mesn l("Your father?");
    mesq l("The families which brought the Soul Menhirs to the world were fated to become Terranites, a shadow of the once great Savior civilization. But in time, you may also ascend to the Savior race yourself. No victory was ever gained without sacrifice.");
    next;
    mesn l("Your father?");
    mesq l("If you managed to open this box, then you've met the Mana Source itself, and was approved by it. If you read the previous letter, then you've met Elli, and was also approved by her."); // You acquired Mana Source's approval during Barbara's scene
    next;
    mesn l("Your father?");
    mesq l("So come, the one whose deeds impressed even the Originals, my child, %s! Witness how I live, and witness how I die! Tell our tales to the future generations, how we fought an Original and prevailed.", strcharinfo(0));
    next;
    mesn l("Your father?");
    mesq l("You were just a nobody when your ship wrecked, and if you remained as such, I would have no interest in you. Being a hero is a choice I made, and being a hero is also a choice you made, if you came this far.");
    next;
    mesn l("Your father?");
    mesq l("Find where the Seal used to be. The Lightbringer, as the Mana Source's avatar, shall light the way. And if they leave the others behind, then surely the Mana Source shall abandon them. Wield its will, or follow the one whom does.");
    next;
    mesn l("Your father?");
    mesq l("Once you do so, be you good or be you evil, challenge the Moubootaur and engrave your name in history, or fail the fight and face permanent death. In this box, you shall find my will to you. Use it well."); // The Final Showdown might inflict permanent death, maybe, I don't know, I'm not in charge of doing it.
    next;
    inventoryplace SunnyCrystal, 1;
    mesc l("You find a %s inside. Holding it, you can feel it - The Lightbringer, source of mana and supreme guardian of the world, blessing your journey. You can now choose a new trait. This concludes the player quest.", getitemlink(SunnyCrystal));
    next;
    do { mesc l("You must choose a trait now, or the opportunity will be forfeit."), 1; next; } while (!ChooseTrait());
    setq General_Narrator, 23, 0, 0;
    getitem SunnyCrystal, 1;

    //// Endtrail
    //mes "";
    //mesc l("@@ You need to wait further releases to continue this quest!", b(l("WARNING:"))), 1;
    next;
    setpcblock(PCBLOCK_HARD, false);
    closeclientdialog;
    end;

OnInit:
    .distance=1;
    end;
}