summaryrefslogtreecommitdiff
path: root/npc/032-5/episode.txt
blob: c8836335a7d7f74724b9d3e1d6b79e997d843564 (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
// TMW2 scripts.
// Authors:
//    Jesusalva
// Description:
//    Part of the Doctor's Quest.

// NOTE: Several things could be done to ensure the original owner is fighting.
// I did none.
// But if at any moment the boss is alone in the room, the fight resets (FIXME).
// Dead bodies should be warped out automagically. (FIXME)
// Reward is 400,000 experience points (almost enough to level up a Lv 61)
// But the reward is only given when cutscene is completed
// Meaning if you merely espectate/help you won't get it.
// For helpers (Everyone on map) they'll get 30,000 exp
// Therefore, experience given is 30k + 70k + 300k

032-5,37,34,0	script	#EpShow	NPC_HIDDEN,2,0,{
    end;
OnInit:
    .ctrl = false;
    .platy = 0;
    .razor = 0;
    end;

OnTouch:
    if (mobcount("032-5", "all")) end;
    if (getq(LoFQuest_EPISODE) != 15) end;
    //if (getq2(LoFQuest_EPISODE) != 2); end;
    if (.ctrl) end;

    .ctrl=true;
    initnpctimer;
    end;

OnTimer1000:
    .platy=monster("032-5", 39, 55, strmobinfo(1, RedQueen), RedQueen, 1);
    .razor=monster("032-5", 37, 57, "The Black Razor", RedFollower, 1);
    immortal(.platy);
    setunitdata(.platy, UDT_MODE, MD_BOSS|MD_PLANT|MD_NOKNOCKBACK);
    immortal(.razor);
    setunitdata(.razor, UDT_MODE, MD_BOSS|MD_PLANT|MD_NOKNOCKBACK);
    end;

OnTimer5000:
    unittalk(.razor, "Uh?");
    end;

OnTimer10000:
    unittalk(.razor, "Who are you people!");
    end;

OnTimer15000:
    unittalk(.razor, "Don't tell me... You're with Prsm!");
    end;

OnTimer20000:
    unittalk(.platy, "They think they can conspire against us.");
    end;

OnTimer25000:
    unittalk(.platy, "But I am the original queen and no one can steal this from me.");
    maptimer("032-5", 3000, "#EpShow::OnWarn1");
    end;

OnWarn1:
    dispbottom l("On your marks!");
    sleep2(1000);
    dispbottom l("Ready...");
    sleep2(1000);
    dispbottom l("FIGHT!");
    end;

OnTimer30000:
    unitwarp(.platy, "001-3-1", 19, 21);
    unitwarp(.razor, "001-3-1", 19, 21);
    sleep(25);
    unitkill(.platy);
    unitkill(.razor);
    sleep(25);
    .platy=monster("032-5", 39, 55, strmobinfo(1, RedQueen), RedQueen, 1, "#EpShow::OnPlaty");
    .razor=monster("032-5", 37, 57, "The Black Razor", RedFollower, 1, "#EpShow::OnRazor");

    // The Black Razor needs tweaks
    setunitdata(.razor, UDT_MAXHP, 24000);
    setunitdata(.razor, UDT_HP, 24000);
    setunitdata(.razor, UDT_HIT, 24000);
    setunitdata(.razor, UDT_ADELAY, 1272);
    setunitdata(.razor, UDT_DMOTION, 48);
    setunitdata(.razor, UDT_SPEED, 480);

    // The Red Queen doesn't, but we need spawns and victory conditions
    areamonster("032-5", 21, 35, 58, 77, strmobinfo(1, RedFollower), RedFollower, 12, "#EpShow::OnMini");
    areamonster("032-5", 21, 35, 58, 77, strmobinfo(1, RedFollowerF), RedFollowerF, 12, "#EpShow::OnMini");
    stopnpctimer;
    // TODO: Red Queen should grow stronger as her allies are defeated
    // TODO: Red Queen should be able to revive her allies, only once each.
    //.ctrl = false;
    end;

OnMini:
    if (.razor)
        unittalk(.razor, "My fallen comrade, you'll be avenged!");
    sleep(100);
    if (!mobcount("032-5", "all")) goto OnNext;
    end;

OnRazor:
    if (.platy)
        unittalk(.platy, "Razor, no!");
    .razor = 0;
    sleep(100);
    if (!mobcount("032-5", "all")) goto OnNext;
    end;

OnPlaty:
    if (.razor)
        unittalk(.razor, "My queen!");
    .platy = 0;
    sleep(100);
    if (!mobcount("032-5", "all")) goto OnNext;
    end;

OnWin:
    @elli=true;
    getexp 30000, 0;
    if (getq(LoFQuest_EPISODE) == 15) {
        setq LoFQuest_EPISODE, 16, 0, 0;
        getitem RedknightArmor, 1;
        getexp 70000, 0;
    }
    end;

OnSS:
    sshake();
    closeclientdialog;
    end;

OnSSX:
    sshake(8);
    sleep2(350);
    sshake(12);
    closeclientdialog;
    end;

OnNext:
    maptimer("032-5", 10, "#EpShow::OnWin");
    // TODO: Bring the boss!
    .platy=monster("032-5", 39, 55, "Soul Eater", PanthomLord, 1);
    immortal(.platy);
    setunitdata(.platy, UDT_MODE, MD_BOSS|MD_PLANT|MD_NOKNOCKBACK);
    unittalk(.platy, "...");
    sleep(5000);
    unittalk(.platy, "How...");
    maptimer("032-5", 4900, "#EpShow::OnSS");
    sleep(5000);
    unittalk(.platy, "HOW!!!");
    maptimer("032-5", 4900, "#EpShow::OnSS");
    sleep(5000);
    unittalk(.platy, "UNFORGIVABLE!!! You have ruined my disguise!");
    sleep(5000);
    unittalk(.platy, "But you underestimate me...");
    freeloop(true);
    for (.@i=0;.@i < 25;.@i++) {
        .@tmp = areamonster("032-5", 21, 35, 58, 77, strmobinfo(1, JackO), JackO, 1);
        immortal(.@tmp);
        setunitdata(.@tmp, UDT_MODE, MD_NOKNOCKBACK);
        sleep(50);
    }
    freeloop(false);
    unittalk(.platy, "...Of course every one who has fallen here serves me... And all those before!");
    sleep(2500);
    unittalk(.platy, "...And with those from past, present and future... I'll be invencible! And reign forever!");
    maptimer("032-5", 1000, "#EpShow::OnMus");
    sleep(2500);
    // TODO: Bring elli!
    enablenpc("Elli#Ep");
    .razor = getnpcid("Elli#Ep");
    sleep(500);
    unittalk(.razor, "That shall not be.");
    sleep(5000);
    unittalk(.razor, "I am Elli, one of the Originals.");
    sleep(5000);
    unittalk(.razor, "And I am here to pummel you algebraically with a(n) ginormous, frankenstein, gassy, green carnival hammer.");
    sleep(5000);
    unittalk(.razor, "Your reign of terror is over, Soul Eater. I'll destroy you and your followers...");
    sleep(5000);
    unittalk(.razor, "...Past or future. Therefore:");
    maptimer("032-5", 4900, "#EpShow::OnSSX");
    sleep(5000);
    unittalk(.razor, "COME LEGENDARY HOCUS, AND ANNIHILATE EVERYTHING!");
    sleep(500);
    disablenpc("Elli#Ep");
    maptimer("032-5", 100, "#EpShow::OnFin");
    sleep(200);
    killmonsterall("032-5");
    .ctrl = false;
    end;

OnMus:
    changeplayermusic "valkyries.ogg";
    end;

OnFin:
    if (!@elli) end;
    warp "032-1", 59, 130;
    sleep2(25);
    sendmapmask 129;
    changeplayermusic "valkyries.ogg";
    addtimer(100, "Elli::OnFin");
    @elli=false;
    end;
}

032-5,39,52,0	script	Elli#Ep	NPC_ELLI,{
    end;
OnInit:
    disablenpc(.name$);
    end;
}