// 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:
// Make Black Razor stronger
if (.razor) {
unittalk(.razor, "My fallen comrade, you'll be avenged!");
.@ad=getunitdata(.razor, UDT_ADELAY);
setunitdata(.razor, UDT_ADELAY, .@ad-25);
}
// Make Platyna stronger
if (.platy) {
.@ad=getunitdata(.platy, UDT_ADELAY);
setunitdata(.platy, UDT_ADELAY, .@ad-25);
}
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;
}
specialeffect(FX_FANFARE, SELF, getcharid(3));
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;
}