// 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; }