// Evol script
// Author:
// Jesusalva
// Description:
// 099-5 FINAL EXAM
// The epic final showdown of The Mana World: Legacy
/////////////////////////////////////////////////////////////////////////////////
// $@DD5_STATUS - Status of the battle
// 0 - Idle
// 1 - Timer running
// 2 - Started, first cutscene
// 3 - First Stage
// 4 - Started, second cutscene
// 5 - Second Stage
// 6 - Started, third cutscene
// 7 - Third Stage
// 8 - Epilogue running
// 9 - Epilogue OK
///////////////////////////////////////////////////////////////////
// $@DD5_HP - Real HitPoints bar of the NPC
// int
// $@DD5_PTS - Total participation points distributed
// int
// $@DD5_BEGIN - Time where the battle begun
// time
// $@DD5_MOBC - Amount of monsters to spawn
// int
// $@DD5MB_WEAK, $@DD5MB_AVERAGE, $@DD5MB_STRONG, $@DD5MB_BOSSLV
// int array - Contains lists of monsters to be used
///////////////////////////////////////////////////////////////////
// $@DD5_PRIMARY
// int - 3x the challengers in boss room
// $@DD5_SUPPORT
// int - 3x the challengers in waiting room
// $@DD5_TOTALPC
// int - Primary + Support, used to ramp up difficulty
///////////////////////////////////////////////////////////////////
// $@DD5_RAIN - Is Xakelbael in rain?
// bool
// $@DD5_ATK - Are attacks allowed?
// bool
// $@DD5_DEFCON - Defensive mode of Zax De'Kagen
// 0 - Defenseless (#------- TRANSPARENT)
// 1 - Invencible (except to shearing) (#CC79A7 PURPLE)
// 2 - All damage is halved (#E69F00 ORANGE)
// 3 - Immune to potion'ed attackers (#D55E00 BROWN)
// 4 - Vulnerable only when wet (#56B4E9 CYAN)
// 5 - Vulnerable only to melee (#999999 GRAY)
// 6 - Vulnerable to Bone Knife/Bone Arrow (#FFFFFF W.@hitE)
// 7 - Regenerate from melee (#009E7E GREEN)
// 8 - Requires 10 GP per Damage (#F0E442 YELLOW)
// 9 - (#0072B2 BLUE)
// @dd5_dmg
// int - Calculated damage
// @dd5_shear
// bool - Damage is from shearing skill (FIXME)
///////////////////////////////////////////////////////////////////
// $@DD5_TALLY_ - Max Individual Score at tally time
// $@DD5_TALLY$ - Player with highest tally
// Tally is conducted at first epilogue scene
// Reward is handed out at last epilogue scene
// If player leaves in-between, reward will be forsaken
// Players who already got the reward (#DD5_TALLY = True)
// will not participate on the tally sequence.
// Tally will not be conducted on Vanilla mode.
///////////////////////////////////////////////////////////////////
// mapmask
// 1 - Show tiles
// 128 - Epilogue Mode
// 256 - DEFCON 1 INVENCIBLE
// 512 - DEFCON 2 DOUBLE DEFENSE
// 1024 - DEFCON 3 POTION IMMUNITY
// 2048 - DEFCON 4 WATER VULNERABLE
// 4096 - DEFCON 5 RANGED INVULNERABILITY
// 8192 - DEFCON 6 BONE VULNERABLE
// 16384 - DEFCON 7 MELEE REGEN
// 32768 - DEFCON 8 GP COST
// NOTE: Personal score overflows at 214,000 points
099-5 mapflag nosave 099-4,50,49
//099-5 mapflag resave 009-1,52,40
099-4 mapflag nosave 009-1,52,40
//099-4 mapflag resave 009-1,52,40
099-6 mapflag nosave 099-7,95,52
//099-6 mapflag resave 099-7,95,52
099-3 mapflag nosave 099-7,95,52
//099-3 mapflag resave 099-7,95,52
099-2 mapflag nosave 099-7,95,52
//099-2 mapflag resave 099-7,95,52
099-1 mapflag nosave 099-7,95,52
//099-1 mapflag resave 099-7,95,52
/* The Dooomsday Mapzone inheirs MMO and allows @storage */
099-6 mapflag zone Doomsday
099-5 mapflag zone Doomsday
099-4 mapflag zone Doomsday
099-3 mapflag zone Doomsday
099-2 mapflag zone Doomsday
099-1 mapflag zone Doomsday
099-5,0,0,0 script #TMWFinalExam NPC32767,{
// Main script
end;
OnZax:
debugmes "OnZax";
callfunc "FinalExamAttack", "Zax";
end;
OnXak:
debugmes "OnXak";
callfunc "FinalExamAttack", "Xak";
end;
OnAbort:
stopnpctimer;
$@DD5_STATUS = 0;
$@DD5_HP = 0;
$@DD5_PTS = 0;
$@DD5_BEGIN = 0;
$@DD5_MOBC = 0;
$@DD5_PRIMARY = 0;
$@DD5_SUPPORT = 0;
$@DD5_TOTALPC = 0;
$@DD5_RAIN = 0;
$@DD5_DEFCON = 0;
$@DD5_TALLY_ = 0;
$@DD5_TALLY$ = "";
$@DD5_ATK=false;
killmonster "099-5", "all";
killmonster "099-4", "all";
setmapmask "099-4", 1;
setmapmask "099-5", 1;
setnpcdisplay "Zax De'Kagen#0", NPC432;
disablenpc "Gema III";
disablenpc "Flying Ship";
disablenpc "Jande#0";
disablenpc "Tal#0";
disablenpc "Anon";
disablenpc "Zax De'Kagen#0";
disablenpc "Xakelbael the Dark#0";
donpcevent "Zax De'Kagen#0::OnAbort";
end;
OnMTChallenge:
@dd5_score = 0;
@dd5_timer = gettimetick(0);
getexp 40000, 0;
BOSS_POINTS = BOSS_POINTS + 5;
message strcharinfo(0), l("This battle experience distribution is different, and death is final. Be careful!");
// Give everyone some participation points simply for continued survival
@dd5_score = 1200;
$@DD5_PTS = $@DD5_PTS+1200;
end;
OnMTWarpTo0:
message strcharinfo(0), l("Your party was defeated.");
warp "009-1", 54, 40;
end;
OnMTDispose:
warp "009-1", 54, 40;
end;
OnMTReward50:
@dd5_share = 10000*@dd5_score/$@DD5_PTS;
if (!@dd5_share)
end;
getexp @dd5_share*50, @dd5_share;
Zeny = Zeny + @dd5_share;
BOSS_POINTS = BOSS_POINTS + @dd5_share/200;
message strcharinfo(0), "Gained "+(@dd5_share/200)+" boss points!";
goto OnMTMusicOff;
OnMTReward40:
@dd5_share = 10000*@dd5_score/$@DD5_PTS;
if (!@dd5_share)
end;
getexp @dd5_share*10, @dd5_share/10;
Zeny = Zeny + @dd5_share/10;
BOSS_POINTS = BOSS_POINTS + @dd5_share/400;
message strcharinfo(0), "Gained "+(@dd5_share/400)+" boss points!";
goto OnMTMusicOff;
OnMTReward51:
@dd5_share = 10000*@dd5_score/$@DD5_PTS;
if (!@dd5_share)
end;
getexp @dd5_share*100, @dd5_share*3/2;
Zeny = Zeny + (@dd5_share*2);
BOSS_POINTS = BOSS_POINTS + @dd5_share/100;
message strcharinfo(0), "Gained "+(@dd5_share/100)+" boss points!";
goto OnMTMusicOff;
OnMTReward41:
@dd5_share = 10000*@dd5_score/$@DD5_PTS;
if (!@dd5_share)
end;
getexp @dd5_share*20, @dd5_share/5;
Zeny = Zeny + @dd5_share/5;
BOSS_POINTS = BOSS_POINTS + @dd5_share/200;
message strcharinfo(0), "Gained "+(@dd5_share/200)+" boss points!";
goto OnMTMusicOff;
OnMTReward52:
@dd5_share = 10000*@dd5_score/$@DD5_PTS;
if (!@dd5_share)
end;
getexp @dd5_share*250, @dd5_share*5/2;
Zeny = Zeny + (@dd5_share*5);
BOSS_POINTS = BOSS_POINTS + @dd5_share/50;
message strcharinfo(0), "Gained "+(@dd5_share/50)+" boss points!";
changemusic "099-5","ghoulish-fun.ogg";
mapmask 1; // Reset map mask for you
// Dispose dead bodies (BUG, should not happen)
if (ispcdead())
goto OnMTDispose;
// Tally rewards
if (getq(Quest_Doomsday) < 3)
goto OnTally;
goto OnEpilogue1;
OnMTReward42:
@dd5_share = 10000*@dd5_score/$@DD5_PTS;
if (!@dd5_share)
end;
getexp @dd5_share*50, @dd5_share;
Zeny = Zeny + @dd5_share;
BOSS_POINTS = BOSS_POINTS + @dd5_share/100;
message strcharinfo(0), "Gained "+(@dd5_share/100)+" boss points!";
changemusic "099-4","ghoulish-fun.ogg";
// Warp to 099-5 or dispose dead bodies
if (ispcdead())
goto OnMTDispose;
warp "099-5", rand(53, 59), rand(37, 41);
// Tally rewards
// FIXME TODO Use a bitwise to save space? See above
if (getq(Quest_Doomsday) < 3)
goto OnTally;
goto OnEpilogue1;
OnTally:
compareandsetq Quest_Doomsday, 1, 2;
if (@dd5_score > $@DD5_TALLY_)
goto OnTallyOK;
goto OnEpilogue1;
OnTallyOK:
$@DD5_TALLY_ = @dd5_score;
$@DD5_TALLY$ = strcharinfo(0);
goto OnEpilogue1;
OnMTFourthFall:
misceffect 52, strcharinfo(0); // FIXME
addtimer 3000, "#TMWFinalExam::OnFourthFall";
end;
OnFourthFall:
//debugmes "FOURTH FALL";
// NOTE: Fourth Fall DOES NOT affects the SCs given by Kirin
// aka. SC_INCMHPRATE and SC_INCMSPRATE
// High Damage
if (sc_check(SC_ATTHASTE_POTION1))
heal -300, -100;
if (sc_check(SC_PLUSATTACKPOWER))
heal -300, -100;
// Medium Damage
if (sc_check(SC_INCDEFRATE))
heal -250, -50;
if (sc_check(SC_PHYSICAL_SHIELD))
heal -250, -50;
if (sc_check(SC_MDEFSET))
heal -250, -50;
// Low Damage
if (sc_check(SC_S_LIFEPOTION))
heal -125, -25;
if (sc_check(SC_SLOWPOISON))
heal -125, -25;
//debugmes "FOURTH WALL WAS BROKEN";
misceffect 52, strcharinfo(0); // FIXME
end;
OnMTBlissOblivion:
misceffect 51, strcharinfo(0);
misceffect 52, strcharinfo(0); // FIXME
// Poison
sc_start SC_POISON, 1, 80;
// Adjust Map Mask
// WARNING: FIXME - Removes weather effects
if ($@DD5_DEFCON == 0)
setmapmask "099-5", 1;
if ($@DD5_DEFCON == 1)
setmapmask "099-5", 1 | 256;
if ($@DD5_DEFCON == 2)
setmapmask "099-5", 1 | 512;
if ($@DD5_DEFCON == 3)
setmapmask "099-5", 1 | 1024;
if ($@DD5_DEFCON == 4)
setmapmask "099-5", 1 | 2048;
if ($@DD5_DEFCON == 5)
setmapmask "099-5", 1 | 4096;
if ($@DD5_DEFCON == 6)
setmapmask "099-5", 1 | 8192;
if ($@DD5_DEFCON == 7)
setmapmask "099-5", 1 | 16384;
if ($@DD5_DEFCON == 8)
setmapmask "099-5", 1 | 32768;
end;
OnBlissOblivion:
killmonster "099-5", "all";
killmonster "099-4", "all";
spawndummy("099-5", 50, 49, Kage, "Zax De'Kagen", "#TMWFinalExam::OnZax");
$@DD5_DEFCON = rand(0, 8);
// Keep a few tricks under the sleeve initially
if ($@DD5_HP > 100000 && $@DD5_DEFCON < 4)
$@DD5_DEFCON = rand(4, 8);
// Re-rolls: Start avoiding initial movements
if ($@DD5_HP < 50000 && $@DD5_DEFCON > 3 && $@DD5_DEFCON < 7)
$@DD5_DEFCON = rand(0, 8);
// If hurt badly, use invencible a bit more often (shearing is annoying)
if ($@DD5_HP < 10000 && $@DD5_DEFCON > 2)
$@DD5_DEFCON = rand(0, 8);
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTBlissOblivion";
setnpctimer 119000;
end;
OnMTWarning:
misceffect 54, strcharinfo(0);
end;
OnMTMusicOn:
changemusic "099-5","Dramatic.ogg";
end;
OnMTMusicOff:
changemusic "099-5","ghoulish-fun.ogg";
end;
OnWarn0:
announce "Doomsday : The Final Showdown will start shortly! Make way to the Master Chamber at once!", 0;
$@DD5_STATUS = 1;
$@DD5_PTS = 0;
// FIXME DEBUG DEBUG DEBUG FIXME
if (debug || $@GM_OVERRIDE)
addnpctimer 15000, "#TMWFinalExam::OnBegin";
else
addnpctimer 90000, "#TMWFinalExam::OnWarn1";
end;
OnWarn1:
announce "Doomsday : Doors to Zax De'Kagen domains will seal shut in ##1##B5 minutes##b##0, so prepare yourselves!", 0;
addnpctimer 120000, "#TMWFinalExam::OnWarn2";
end;
OnWarn2:
announce "Doomsday : Doors to Zax De'Kagen domains will seal shut in ##1##B3 minutes##b##0, so prepare yourselves!", 0;
addnpctimer 120000, "#TMWFinalExam::OnWarn3";
end;
OnWarn3:
announce "Doomsday : Doors to Zax De'Kagen domains will seal shut in ##1##B1 minute##b##0, last call for challengers!", 0;
addnpctimer 60000, "#TMWFinalExam::OnBegin";
end;
OnBegin:
announce "Doomsday : Final Showdown: BEGIN!", 0;
$@DD5_STATUS = 2;
$@DD5_BEGIN = gettimetick(2);
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTChallenge";
addnpctimer 2000, "#TMWFinalExam::OnPrologue1";
donpcevent "#099-2_Prestart::OnJanitor";
end;
OnPrologue1:
// set the sprite (implies enablenpc)
// FIXME - Can we still use mobid here? Also: fakenpcname() deprecated!
enablenpc "Zax De'Kagen#0";
setnpcdisplay "Zax De'Kagen#0", NPC432;
mapannounce "099-5", "Zax De'Kagen : What is that, a bunch of Talpans in my domains?" , 0;
mapannounce "099-4", "Zax De'Kagen : What is that, a bunch of Talpans in my domains?" , 0;
npctalk "What is that, a bunch of Talpans in my domains?", "Zax De'Kagen#0";
addnpctimer 5000, "#TMWFinalExam::OnPrologue2";
end;
OnPrologue2:
mapannounce "099-5", "Zax De'Kagen : Don't make me laugh. Do you really think you have what it takes to stop ME?!" , 0;
mapannounce "099-4", "Zax De'Kagen : Don't make me laugh. Do you really think you have what it takes to stop ME?!" , 0;
npctalk "Don't make me laugh. Do you really think you have what it takes to stop ME?!", "Zax De'Kagen#0";
addnpctimer 10000, "#TMWFinalExam::OnPrologue3";
end;
OnPrologue3:
mapannounce "099-5", "Zax De'Kagen : Hmpf! We will see about that. Therefore..." , 0;
mapannounce "099-4", "Zax De'Kagen : Hmpf! We will see about that. Therefore..." , 0;
npctalk "Hmpf! We will see about that. Therefore...", "Zax De'Kagen#0";
addnpctimer 5000, "#TMWFinalExam::OnPrologue4";
end;
OnPrologue4:
mapannounce "099-5", "Zax De'Kagen : Catch me if you can!" , 0;
mapannounce "099-4", "Zax De'Kagen : Catch me if you can!" , 0;
npctalk "Catch me if you can!", "Zax De'Kagen#0";
spawndummy("099-5", 50, 49, Kage, "Zax De'Kagen", "#TMWFinalExam::OnZax");
$@DD5_ATK=true;
$@DD5_STATUS = 3;
$@DD5_HP = 20000+(getmapusers("099-5")*100);
$@DD5_PRIMARY = 5+getmapusers("099-5");
$@DD5_SUPPORT = 3+getmapusers("099-4");
$@DD5_TOTALPC = $@DD5_PRIMARY+$@DD5_SUPPORT;
// Spawn first assault
areamonster "099-5", 43, 44, 56, 55, "", any_of($@DD5MB_AVERAGE), $@DD5_TOTALPC, "#TMWFinalExam::OnKillAverage";
areamonster "099-5", 20, 20, 75, 75, "", any_of($@DD5MB_AVERAGE), $@DD5_PRIMARY, "#TMWFinalExam::OnKillAverage";
areamonster "099-4", 20, 20, 75, 75, "", any_of($@DD5MB_AVERAGE), $@DD5_SUPPORT, "#TMWFinalExam::OnKillAverage";
areamonster "099-5", 20, 20, 75, 75, "", VoidFlower, $@DD5_TOTALPC, "#TMWFinalExam::OnKillAverage";
// Begin timers!
initnpctimer;
donpcevent "Zax De'Kagen#0::OnEnable";
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTMusicOn";
areatimer 0, "099-4", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTMusicOn";
end;
OnWarmedUp0:
stopnpctimer;
$@DD5_STATUS = 4;
$@DD5_HP = 0;
killmonster "099-5", "all";
killmonster "099-4", "all";
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTReward50";
areatimer 0, "099-4", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTReward40";
mapannounce "099-5", "Zax De'Kagen : Hahaha! Not bad, not bad at all!" , 0;
mapannounce "099-4", "Zax De'Kagen : Hahaha! Not bad, not bad at all!" , 0;
npctalk "Hahaha! Not bad, not bad at all!", "Zax De'Kagen#0";
addnpctimer 5000, "#TMWFinalExam::OnWarmedUp1";
donpcevent "Zax De'Kagen#0::OnDisable";
end;
OnWarmedUp1:
mapannounce "099-5", "Zax De'Kagen : However..." , 0;
mapannounce "099-4", "Zax De'Kagen : However..." , 0;
npctalk "However...", "Zax De'Kagen#0";
addnpctimer 5000, "#TMWFinalExam::OnWarmedUp2";
end;
OnWarmedUp2:
mapannounce "099-5", "Zax De'Kagen : This was only warm up!" , 0;
mapannounce "099-4", "Zax De'Kagen : This was only warm up!" , 0;
npctalk "This was only warm up!", "Zax De'Kagen#0";
addnpctimer 10000, "#TMWFinalExam::OnWarmedUp3";
end;
OnWarmedUp3:
mapannounce "099-5", "Zax De'Kagen : Look and behold, the form I took on this rewrite..." , 0;
mapannounce "099-4", "Zax De'Kagen : Look and behold, the form I took on this rewrite..." , 0;
npctalk "Look and behold, the form I took on this rewrite...", "Zax De'Kagen#0";
addnpctimer 10000, "#TMWFinalExam::OnWarmedUp4";
end;
OnWarmedUp4:
mapannounce "099-5", "Zax De'Kagen : The name which I am known is..." , 0;
mapannounce "099-4", "Zax De'Kagen : The name which I am known is..." , 0;
npctalk "The name which I am known is...", "Zax De'Kagen#0";
addnpctimer 10000, "#TMWFinalExam::OnWarmedUp5";
end;
OnWarmedUp5:
disablenpc "Zax De'Kagen#0";
enablenpc "Xakelbael the Dark#0";
// FIXME
//fakenpcname "Xakelbael the Dark#0", "Xakelbael the Dark#0", 1161;
mapannounce "099-5", "Xakelbael the Dark : ...Xakelbael the Dark! PERISH!" , 0;
mapannounce "099-4", "Xakelbael the Dark : ...Xakelbael the Dark! PERISH!" , 0;
npctalk "...Xakelbael the Dark! PERISH!", "Xakelbael the Dark#0";
addnpctimer 3000, "#TMWFinalExam::OnWarmedUp6";
end;
OnWarmedUp6:
$@DD5_STATUS = 5;
$@DD5_HP = 40000+(getmapusers("099-5")*100);
$@DD5_PRIMARY = 1+getmapusers("099-5")*15/10;
$@DD5_SUPPORT = 1+getmapusers("099-4")*15/10;
$@DD5_TOTALPC = $@DD5_PRIMARY+$@DD5_SUPPORT;
spawndummy("099-5", 50, 49, Xakelbael, "Xakelbael the Dark", "#TMWFinalExam::OnXak");
disablenpc "Xakelbael the Dark#0";
$@DD5_ATK=true;
// Spawn second wave
areamonster "099-5", 20, 20, 75, 75, "", any_of($@DD5MB_AVERAGE), $@DD5_PRIMARY, "#TMWFinalExam::OnKillAverage";
areamonster "099-4", 20, 20, 75, 75, "", any_of($@DD5MB_AVERAGE), $@DD5_SUPPORT, "#TMWFinalExam::OnKillAverage";
// Begin timers
initnpctimer;
donpcevent "Xakelbael the Dark#0::OnEnable";
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTMusicOn";
areatimer 0, "099-4", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTMusicOn";
end;
OnShowdown0:
stopnpctimer;
$@DD5_STATUS = 6;
$@DD5_HP = 0;
killmonster "099-5", "all";
killmonster "099-4", "all";
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTReward51";
areatimer 0, "099-4", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTReward41";
disablenpc "Xakelbael the Dark#0";
enablenpc "Zax De'Kagen#0";
setnpcdisplay "Zax De'Kagen#0", NPC432;
mapannounce "099-5", "Zax De'Kagen : Hah...! That was a good workout!" , 0;
mapannounce "099-4", "Zax De'Kagen : Hah...! That was a good workout!" , 0;
npctalk2 "Zax De'Kagen#0", "Hah...! That was a good workout!";
addnpctimer 5000, "#TMWFinalExam::OnShowdown1";
donpcevent "Xakelbael the Dark#0::OnDisable";
end;
OnShowdown1:
mapannounce "099-5", "Zax De'Kagen : It was totally worth it! I was incredibly bored!" , 0;
mapannounce "099-4", "Zax De'Kagen : It was totally worth it! I was incredibly bored!" , 0;
npctalk2 "Zax De'Kagen#0", "It was totally worth it! I was incredibly bored!";
addnpctimer 5000, "#TMWFinalExam::OnShowdown2";
end;
OnShowdown2:
.@DD5_TPASSED = (gettimetick(2)-$@DD5_BEGIN);
.@DD5_TSPENT$ = $@DD5_TPASSED/60+" minute(s) and "+$@DD5_TPASSED%60+" second(s)";
// FIXME: Use FuzzyTime()
mapannounce "099-5", "Zax De'Kagen : Well, we still have time! Only "+.@DD5_TSPENT$+" passed!" , 0;
mapannounce "099-4", "Zax De'Kagen : Well, we still have time! Only "+.@DD5_TSPENT$+" passed!" , 0;
npctalk2 "Zax De'Kagen#0", "Well, we still have time! Only "+.@DD5_TSPENT$+" passed!";
.@DD5_TPASSED = 0;
.@DD5_TSPENT$ = "";
addnpctimer 10000, "#TMWFinalExam::OnShowdown3";
end;
OnShowdown3:
setnpcdisplay "Zax De'Kagen#0", NPC434;
mapannounce "099-5", "Zax De'Kagen : I will now acknowledge your strength and fight for realz." , 0;
mapannounce "099-4", "Zax De'Kagen : I will now acknowledge your strength and fight for realz." , 0;
npctalk2 "Zax De'Kagen#0", "I will now acknowledge your strength and fight for realz.";
addnpctimer 10000, "#TMWFinalExam::OnShowdown4";
end;
OnShowdown4:
mapannounce "099-5", "Zax De'Kagen : Don't blame me if you die!" , 0;
mapannounce "099-4", "Zax De'Kagen : Don't blame me if you die!" , 0;
npctalk2 "Zax De'Kagen#0", "Don't blame me if you die!";
addnpctimer 10000, "#TMWFinalExam::OnShowdown5";
end;
OnShowdown5:
mapannounce "099-5", "Zax De'Kagen : Do your best to entretain me!" , 0;
mapannounce "099-4", "Zax De'Kagen : Do your best to entretain me!" , 0;
npctalk2 "Zax De'Kagen#0", "Do your best to entretain me!";
addnpctimer 3000, "#TMWFinalExam::OnShowdown6";
end;
OnShowdown6:
$@DD5_STATUS = 7;
$@DD5_HP = 115000+(getmapusers("099-5")*100);
$@DD5_PRIMARY = 3+getmapusers("099-5")*15/10;
$@DD5_SUPPORT = 3+getmapusers("099-4")*15/10;
$@DD5_TOTALPC = $@DD5_PRIMARY+$@DD5_SUPPORT-2;
$@DD5_ATK=true;
spawndummy("099-5", 50, 49, Kage, "Zax De'Kagen", "#TMWFinalExam::OnZax");
areamonster "099-5", 20, 20, 75, 75, "", any_of($@DD5MB_WEAK), $@DD5_PRIMARY, "#TMWFinalExam::OnKillWeak";
initnpctimer;
$@DD5_DEFCON = rand(4, 8);
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTBlissOblivion";
donpcevent "Zax De'Kagen#0::OnFinal";
end;
OnEpilogue0:
stopnpctimer;
$@DD5_STATUS = 8;
$@DD5_HP = 0;
killmonster "099-5", "all";
killmonster "099-4", "all";
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTReward52";
areatimer 0, "099-4", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTReward42";
enablenpc "Flying Ship";
$@DD5_TPASSED = (gettimetick(2)-$@DD5_BEGIN);
$@DD5_TSPENT$ = $@DD5_TPASSED/60+" minute(s) and "+$@DD5_TPASSED%60+" second(s)";
set $@DD5_TPASSED2, 2100+$@DD5_TPASSED; // 35 minutes, The Big Bad, Watchmen
$@DD5_TSPENT2$ = $@DD5_TPASSED2/60+" minute(s)";
$@DD5_PRIMARY = 0;
$@DD5_SUPPORT = 0;
donpcevent "Zax De'Kagen#0::OnDisable";
end;
OnEpilogue1:
@dd5_illegalexit = 1;
addtimer 10, "#TMWFinalExam::OnIllegalExit1";
mes "[Zax De'Kagen]";
mes l("Thanks for the %s of fun you gave me!", $@DD5_TSPENT$);
next;
mes "[Zax De'Kagen]";
mes l("This was not in the plan, but was fun nonetheless. Worth the detour.");
next;
mes "[Zax De'Kagen]";
mes l("However, now I need to go. Unlike you, I do not want to be late.");
next;
menu
l("We just killed you?"), L_Epilogue1Part1,
l("Late? What do you mean?"), L_Epilogue1Part1;
L_Epilogue1Part1:
mes "[Zax De'Kagen]";
mes l("You know villains never lie. Did you notice how I did not attack any of you directly?");
next;
mes "[Zax De'Kagen]";
mes l("I already finished my plans %s ago, otherwise I would not be bothering myself with you.", $@DD5_TSPENT2$);
next;
mes "[Zax De'Kagen]";
mes l("I hope you did not expected to kill me. Wait. You actually did?!");
next;
mes "[Zax De'Kagen]";
mes l("HAHAHAHAHAHAHAHA!!");
next;
mes "[Zax De'Kagen]";
mes l("Thanks for this, I don't recall laughing so hard the past five years.");
next;
mes "[Zax De'Kagen]";
mes l("Tell me... Enumerate me... Which beings on The Mana World remains dead after being killed?");
next;
mes "[Zax De'Kagen]";
mes l("Think a bit! Monsters respawn... Adventurers appear near the Soul Menhir...");
next;
mes "[Zax De'Kagen]";
mes l("...Or used to, at least; I don't know why that's not true anymore... anyway...");
next;
mes "[Zax De'Kagen]";
mes l("Did you really thought you could simply defeat me in combat and expect this to solve all your problems?");
next;
menu
l("I did"), L_Epilogue1Part21,
l("I didn't"), L_Epilogue1Part22;
L_Epilogue1Part21:
mes "[Zax De'Kagen]";
mes l("HAHAHAHAHAHAHAHA!!");
next;
goto L_Epilogue1Part2;
L_Epilogue1Part22:
mes "[Zax De'Kagen]";
mes l("So I assume you thought in a way to seal me? Not that it matters anymore.");
next;
goto L_Epilogue1Part2;
L_Epilogue1Part2:
mes "[Zax De'Kagen]";
mes l("I'm not even close to fainting yet.");
next;
mes "[Zax De'Kagen]";
mes l("Besides, only a handful of mana beings know how to erase something of existence.");
next;
mes "[Zax De'Kagen]";
mes l("Anyway, just look! My ride arrived.");
next;
@dd5_illegalexit = 0;
if (getmapname() == "099-5")
goto OnEpilogue1b;
// What. How? Force script to explode.
Hp = 0;
heal -99999, -99999;
end;
OnIllegalExit1:
if (@dd5_illegalexit)
goto OnEpilogue1;
end;
OnEpilogue1b:
$@DD5_SUPPORT = 0;
// Would this timer ever run if player is on dialog?
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnEpilogue1c";
close;
OnEpilogue1c:
if ($@DD5_PRIMARY)
end;
if (!@dd5_illegalexit)
$@DD5_SUPPORT = $@DD5_SUPPORT+1;
addtimer 50, "#TMWFinalExam::OnEpilogue1d";
end;
OnEpilogue1d:
if ($@DD5_PRIMARY)
end;
if ($@DD5_SUPPORT >= getmapusers("099-5"))
goto OnEpilogue1e;
$@DD5_SUPPORT = 0;
end;
OnEpilogue1e:
$@DD5_PRIMARY = 1;
$@DD5_SUPPORT = 0;
addnpctimer 300, "#TMWFinalExam::OnEpilogue2";
close;
OnEpilogue2:
mapannounce "099-5", "Zax De'Kagen : Now that I know where Nu'Rem is burried, nothing can stop me." , 0;
npctalk2 "Zax De'Kagen#0", "Now that I know where Nu'Rem is burried, nothing can stop me.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue3";
end;
OnEpilogue3:
mapannounce "099-5", "Zax De'Kagen : Good bye, mortal adventurers." , 0;
npctalk2 "Zax De'Kagen#0", "Good bye, mortal adventurers.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue4";
end;
OnEpilogue4:
mapannounce "099-5", "Zax De'Kagen : Heh, not like I wasn't one too, back then..." , 0;
npctalk2 "Zax De'Kagen#0", "Heh, not like I wasn't one too, back then...";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue5";
end;
OnEpilogue5:
setnpcdisplay "Zax De'Kagen#0", NPC432;
disablenpc "Zax De'Kagen#0";
disablenpc "Flying Ship";
addnpctimer 10000, "#TMWFinalExam::OnEpilogue6";
end;
OnEpilogue6:
enablenpc "Gema III";
enablenpc "Jande#0";
enablenpc "Tal#0";
enablenpc "Anon";
mapannounce "099-5", "Jande : With Zax gone, I could finally arrive here." , 0;
npctalk2 "Jande#0", "With Zax gone, I could finally arrive here.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue7";
end;
OnEpilogue7:
mapannounce "099-5", "Tal : I believe some introductions are in order. I am Tal, the Great Dragon of Water." , 0;
npctalk2 "Tal#0", "Tal : I believe some introductions are in order. I am Tal, the Great Dragon of Water.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue8";
end;
OnEpilogue8:
mapannounce "099-5", "Tal : I also consider myself the creator of the Tritan race. Jande called me to help." , 0;
npctalk2 "Tal#0", "Tal : I also consider myself the creator of the Tritan race. Jande called me to help.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue9";
end;
OnEpilogue9:
mapannounce "099-5", "Tal : While I do not like this idea myself, we have an enemy in common." , 0;
npctalk2 "Tal#0", "Tal : While I do not like this idea myself, we have an enemy in common.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue10";
end;
OnEpilogue10:
mapannounce "099-5", "Anon : We prepared another ship, Gema III. This ship will bring you to the damned island." , 0;
npctalk2 "Anon", "We prepared another ship, Gema III. This ship will bring you to the damned island.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue11";
end;
OnEpilogue11:
mapannounce "099-5", "Anon : Be careful, though. It is the final resting place of the Great Dragon of Air." , 0;
npctalk2 "Anon", "Be careful, though. It is the final resting place of the Great Dragon of Air.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue12";
end;
OnEpilogue12:
mapannounce "099-5", "Anon : There is no telling on the horrors you'll find there." , 0;
npctalk2 "Anon", "There is no telling on the horrors you'll find there.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue13";
end;
OnEpilogue13:
mapannounce "099-5", "Jande : A ship is not so fast as a flying one, but I am sure you can make in time." , 0;
npctalk2 "Jande#0", "A ship is not so fast a flying one, but I am sure you can make in time.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue14";
end;
OnEpilogue14:
mapannounce "099-5", "Jande : Whatever happens, DO NOT let Zax De'Kagen reach the great dragon body. Remember: Zax is wounded!" , 0;
npctalk2 "Jande#0", "Whatever happens, DO NOT let Zax De'Kagen reach the great dragon body. Remember: Zax is wounded!";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue15";
end;
OnEpilogue15:
$@DD5_STATUS = 9;
mapannounce "099-5", "##1(Talk to Gema III to embark)" , 0;
npctalk "Gema III", "##1(Talk to Gema III to embark)";
addnpctimer 30000, "#TMWFinalExam::OnEpilogue16";
end;
OnEpilogue16:
npctalk2 "Jande#0", "(*whisper* Tal, do you think they'll make it?)";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue17";
end;
OnEpilogue17:
npctalk2 "Tal#0", "Tal : (*whisper* I would be surprised if they survived the trip alone.)";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue18";
end;
OnEpilogue18:
npctalk2 "Jande#0", "(*whisper* For now, let's hope for the best. I don't want another rewrite...)";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue19";
end;
OnEpilogue19:
npctalk2 "Tal#0", "Tal : (*whisper* You worry too much. Di'Tal already put measures in place.)";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue20";
end;
OnEpilogue20:
npctalk2 "Tal#0", "Tal : (*whisper* The same incident from years ago will not repeat itself.)";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue21";
end;
OnEpilogue21:
npctalk2 "Tal#0", "Tal : (*whisper* Besides, shall they fail - they won't remember any of this.)";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue22";
end;
OnEpilogue22:
npctalk2 "Jande#0", "(*whisper* We will have a good room to maneuver undercover, then.)";
addnpctimer 15000, "#TMWFinalExam::OnEpilogue23";
end;
OnEpilogue23:
npctalk2 "Anon", "What are you waiting for? You're running against the clock.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue24";
end;
OnEpilogue24:
npctalk2 "Anon", "You know Jande and Tal cannot get close to that... that thing.";
addnpctimer 5000, "#TMWFinalExam::OnEpilogue25";
end;
OnEpilogue25:
npctalk2 "Anon", "We will do what we can to support you from sidelines. Now go!";
end;
S_DD5PrimarySpawn:
// Receives: $@DD5_MOBC
$@DD5_TMP = rand(270) / 100;
if ($@DD5_TMP == 0)
goto L_DD5PSN;
if ($@DD5_TMP == 1)
goto L_DD5PSR;
if ($@DD5_TMP == 2)
goto L_DD5PSP;
goto L_DD5PSResume;
L_DD5PSN:
callfunc "DD5SpawnNoob";
goto L_DD5PSResume;
L_DD5PSR:
callfunc "DD5SpawnRegular";
goto L_DD5PSResume;
L_DD5PSP:
callfunc "DD5SpawnPro";
goto L_DD5PSResume;
L_DD5PSResume:
if ($@DD5_MOBC)
goto S_DD5PrimarySpawn;
$@DD5_TMP = 0;
return;
OnTimer40000:
// Imperial Chamber
areamonster "099-5", 43, 44, 56, 55, "", any_of($@DD5MB_WEAK), $@DD5_PRIMARY/2, "#TMWFinalExam::OnKillWeak";
// Map
$@DD5_MOBC = $@DD5_TOTALPC/2+1;
callsub S_DD5PrimarySpawn;
// Prologue mobs
if ($@DD5_STATUS == 3)
areamonster "099-5", 20, 20, 75, 75, "", VoidFlower, $@DD5_TOTALPC, "#TMWFinalExam::OnKillAverage";
end;
OnTimer75000:
// Imperial Chamber
areamonster "099-5", 43, 44, 56, 55, "", any_of($@DD5MB_AVERAGE), $@DD5_PRIMARY/6+1, "#TMWFinalExam::OnKillAverage";
// Map
$@DD5_MOBC = $@DD5_TOTALPC/3+1;
callsub S_DD5PrimarySpawn;
// Prologue mobs
if ($@DD5_STATUS == 3)
areamonster "099-5", 20, 20, 75, 75, "", VoidFlower, $@DD5_TOTALPC, "#TMWFinalExam::OnKillAverage";
end;
OnTimer104000:
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTWarning";
end;
OnTimer120000:
// Imperial Chamber
areamonster "099-5", 43, 44, 56, 55, "", any_of($@DD5MB_STRONG), max(3, 1+$@DD5_PRIMARY/5), "#TMWFinalExam::OnKillStrong";
areamonster "099-5", 43, 44, 56, 55, "", any_of($@DD5MB_BOSSLV), $@DD5_STATUS/2, "#TMWFinalExam::OnKillStrong";
// Map
$@DD5_MOBC = $@DD5_TOTALPC/3+1;
callsub S_DD5PrimarySpawn;
// Prologue mobs
if ($@DD5_STATUS == 3)
areamonster "099-5", 20, 20, 75, 75, "", VoidFlower, $@DD5_TOTALPC, "#TMWFinalExam::OnKillAverage";
// Boss regeneration, which may overflow into infinity.
// A regular tick takes 7s - so ~13 cycles of regen
// It'll regen STATUS Hp per tick, so: 39, 65 and 91 HP every 90s
// Which is a ridiculously low amount, so I buffed it in 3
// A base healing of 3 HP per tick - So 117, 195 and 273 HP (still low)
$@DD5_HP = $@DD5_HP+((13*$@DD5_STATUS)*3);
initnpctimer;
end;
OnKillWeak:
if (!playerattached()) end;
@dd5_score = @dd5_score+1;
$@DD5_PTS = $@DD5_PTS+1;
end;
OnKillAverage:
if (!playerattached()) end;
@dd5_score = @dd5_score+10;
$@DD5_PTS = $@DD5_PTS+10;
end;
OnKillStrong:
if (!playerattached()) end;
@dd5_score = @dd5_score+25;
$@DD5_PTS = $@DD5_PTS+25;
end;
OnInit:
setarray $@DD5MB_WEAK, VoidBat, VoidMaggot, VoidBat, VoidMaggot, VoidBat, VoidMaggot, VoidMouboo;
setarray $@DD5MB_AVERAGE, VoidScorpion, VoidShroom, VoidScorpion, VoidShroom, VoidScorpion, VoidShroom, VoidSoldier, VoidMouboo;
setarray $@DD5MB_STRONG, VoidArchant, VoidSlime, VoidSnake, VoidArchant, VoidSlime, VoidSnake, VoidArchant, VoidSlime, VoidSnake;
setarray $@DD5MB_BOSSLV, Flashmob, Koyntety, Tengu, Sasquatch, ManaSlayer, Enchanter, DoomGolem, Tengu;
// In theory, pattern ID must be between 1~9
// To set $@p1$~$@p9$ with the PERL expression
// But as we're only using $@p0$ (full string)
// the value itself is meaningless
.pid=getnpcid();
debugmes "Doomsday: Pattern %d", .pid;
//I'm not going to learn PERL just for that
defpattern(.pid, "^(.*)$", "OnTalkNearby");
activatepset(.pid);
end;
OnTalkNearby:
// not very obvious stuff by gumi, $@p0$ contains the whole string
// so we must cut it. Could use $@p1$ if perl was proper but... meh.
.@no_nick$ = strip(substr($@p0$, getstrlen(strcharinfo(PC_NAME)) + 3, getstrlen($@p0$) - 1));
.@message$ = strtoupper(.@no_nick$);
// Only react if the message is what we want to hear
if (.@message$ != "MITEYO")
end;
if ($@DD5_HP < 1)
end;
message strcharinfo(0), "Estimated boss HP: "+($@DD5_HP+rand(-100, 100));
end;
}
function script DD5SpawnNoob {
areamonster "099-4", 20, 20, 75, 75, "", any_of($@DD5MB_WEAK), any(1,2), "#TMWFinalExam::OnKillWeak";
areamonster "099-5", 20, 20, 75, 75, "", any_of($@DD5MB_WEAK), any(2,3), "#TMWFinalExam::OnKillWeak";
$@DD5_MOBC = $@DD5_MOBC-1;
return;
}
function script DD5SpawnRegular {
if (rand(6) % 2 == 0)
areamonster "099-4", 20, 20, 75, 75, "", any_of($@DD5MB_AVERAGE), 1, "#TMWFinalExam::OnKillAverage";
areamonster "099-5", 20, 20, 75, 75, "", any_of($@DD5MB_AVERAGE), any(1, 2), "#TMWFinalExam::OnKillAverage";
$@DD5_MOBC = $@DD5_MOBC-1;
return;
}
function script DD5SpawnPro {
if (rand(6) % 2 == 0)
areamonster "099-4", 20, 20, 75, 75, "", any_of($@DD5MB_STRONG), 1, "#TMWFinalExam::OnKillStrong";
areamonster "099-5", 20, 20, 75, 75, "", any_of($@DD5MB_STRONG), 1, "#TMWFinalExam::OnKillStrong";
$@DD5_MOBC = $@DD5_MOBC-1;
return;
}
function script DD5RainCheck {
$@DD5_RAIN="#WeatherCore"::weather(MASK_RAIN, "099-5");
// Not in rain - nullify damage
if (!($@DD5_RAIN))
@dd5_dmg = 0;
return;
}
function script DD5DEFCONCheck {
.@atkrange=readparam2(UDT_ATKRANGE);
// Shearing magic is active? FIXME
if (@chipchipspell[2] > 0)
goto L_Shear;
goto L_Loop;
L_Shear:
@dd5_shear = 1;
//addtimer 0, "shear::OnDischarge"; // FIXME
goto L_Loop;
L_Loop:
if ($@DD5_DEFCON == 0)
goto L_DEFCON0;
if ($@DD5_DEFCON == 1)
goto L_DEFCON1;
if ($@DD5_DEFCON == 2)
goto L_DEFCON2;
if ($@DD5_DEFCON == 3)
goto L_DEFCON3;
if ($@DD5_DEFCON == 4)
goto L_DEFCON4;
if ($@DD5_DEFCON == 5)
goto L_DEFCON5;
if ($@DD5_DEFCON == 6)
goto L_DEFCON6;
if ($@DD5_DEFCON == 7)
goto L_DEFCON7;
if ($@DD5_DEFCON == 8)
goto L_DEFCON8;
debugmes "ERROR INVALID DEFCON: "+$@DD5_DEFCON;
goto L_Return;
L_DEFCON0:
goto L_Return;
L_DEFCON1:
// FIXME
if (@dd5_shear)
goto L_Return;
@dd5_dmg = 0;
goto L_Return;
L_DEFCON2:
@dd5_dmg = @dd5_dmg/2;
goto L_Return;
L_DEFCON3:
if (sc_check(SC_ATTHASTE_POTION1))
@dd5_dmg = 0;
if (sc_check(SC_PLUSATTACKPOWER))
@dd5_dmg = 0;
goto L_Return;
L_DEFCON4:
callfunc "DD5RainCheck";
goto L_Return;
L_DEFCON5:
if (.@atkrange > 2)
@dd5_dmg = 0;
goto L_Return;
L_DEFCON6:
// Shearing is immune to DEFCON 6
if (@dd5_shear)
goto L_Return;
// Not using the allowed equips
if (!isequippedcnt(BoneArrows, BoneKnife, BoneDarts))
@dd5_dmg = 0;
// Lame check for bows because I'm lazy
if (isequipped(BoneArrows) && .@atkrange < 4)
@dd5_dmg = 0;
goto L_Return;
L_DEFCON7:
if (.@atkrange < 3)
@dd5_dmg = 0-(@dd5_dmg);
goto L_Return;
L_DEFCON8:
if (Zeny < @dd5_dmg*5)
@dd5_dmg = 0;
Zeny = Zeny-(@dd5_dmg*5);
goto L_Return;
L_Return:
@dd5_shear = 0;
return;
}
function script FinalExamAttack {
// Failsafe
if ($@DD5_STATUS != 3 && $@DD5_STATUS != 5 && $@DD5_STATUS != 7)
return;
if (!$@DD5_ATK)
return;
if (!playerattached())
goto L_Return;
// CD Initial failsafe
if (!@dd5_timer)
@dd5_timer = 1-2147483647-1;
// CD Failsafe
if (@dd5_timer > 1 && gettimetick(0) < 1)
@dd5_timer = gettimetick(0);
// Cooldown
if (gettimetick(0) < @dd5_timer)
goto L_Return;
// Set variables
.@atkrange=readparam2(UDT_ATKRANGE);
.@crit=readparam2(UDT_CRIT);
.@hit=readparam2(UDT_HIT);
// Verify range
if (!(isin("099-5", 50-.@atkrange, 49-.@atkrange, 50+.@atkrange, 49+.@atkrange)))
goto L_Return;
// Assign attack speed delay - 300ms with pots, 600ms without
@dd5_timer = if_then_else(sc_check(SC_ATTHASTE_POTION1), gettimetick(0)+300, gettimetick(0)+600);
// Calculate .@hit and .@crit rate
@dd5_crit = (rand(10000) < .@crit);
if (.@hit < rand(350) && !@dd5_crit)
goto L_Miss;
// Calculate damage
@dd5_dmg = rand2(readparam2(UDT_ATKMIN), readparam2(UDT_ATKMAX)+1);
// Strength Potion - DMG +50%
if (sc_check(SC_PLUSATTACKPOWER))
@dd5_dmg = @dd5_dmg*15/10;
// Boss defense
@dd5_dmg = @dd5_dmg*(11-$@DD5_STATUS)/9;
// Consider criticals (no defense disregard, though)
if (@dd5_crit)
@dd5_dmg = @dd5_dmg*2;
// Adjust to Stages
if ($@DD5_STATUS == 5)
goto L_Rainy;
if ($@DD5_STATUS == 7)
goto L_Defcon;
goto L_Damage;
L_Rainy:
callfunc "DD5RainCheck";
if (!($@DD5_RAIN))
goto L_Miss;
goto L_Damage;
L_Defcon:
callfunc "DD5DEFCONCheck";
if (@dd5_dmg == 0)
goto L_Miss;
if (@dd5_dmg < 1)
goto L_Absorb;
goto L_Damage;
L_Absorb:
// Ops! Zax appreciates the heal!
$@DD5_HP = $@DD5_HP-@dd5_dmg;
message strcharinfo(0), "Battle : Absorbed +"+@dd5_dmg+" HP";
goto L_Return;
L_Damage:
// Apply the damage!
$@DD5_HP = $@DD5_HP-@dd5_dmg;
@dd5_score = @dd5_score+min(25, @dd5_dmg/50);
$@DD5_PTS = $@DD5_PTS+min(25, @dd5_dmg/50);
message strcharinfo(0), "Battle : Damage -"+@dd5_dmg+" HP";
// Fire events if HP < 0
if ($@DD5_HP <= 0)
goto L_Slain;
goto L_Return;
L_Miss:
message strcharinfo(0), "Battle : Miss";
goto L_Return;
L_Slain:
@dd5_score = @dd5_score+100;
$@DD5_PTS = $@DD5_PTS+100;
BOSS_POINTS = BOSS_POINTS + ($@DD5_STATUS * 5);
if ($@DD5_STATUS == 3)
donpcevent "#TMWFinalExam::OnWarmedUp0";
if ($@DD5_STATUS == 5)
donpcevent "#TMWFinalExam::OnShowdown0";
if ($@DD5_STATUS == 7)
donpcevent "#TMWFinalExam::OnEpilogue0";
message strcharinfo(0), l("You gained %d Boss Points!", ($@DD5_STATUS * 5));
$@DD5_ATK=false;
return;
L_Return:
.@s$=getarg(0);
.@n$=(.@s$ == "Zax" ? "Zax De'Kagen" : "Xakelbael the Dark");
.@id=(.@s$ == "Zax" ? Kage : Xakelbael);
spawndummy("099-5", 50, 49, .@id, .@n$, "#TMWFinalExam::On"+.@s$);
return;
}
099-5,52,35,0 script Jande#0 NPC426,{
message strcharinfo(0), "Jande : What are you waiting for?"; // npctalk3 ?
end;
OnInit:
disablenpc strnpcinfo(0);
end;
}
099-5,47,34,0 script Tal#0 NPC427,{
message strcharinfo(0), "Tal : What are you waiting for?";
end;
OnInit:
disablenpc strnpcinfo(0);
end;
}
099-5,49,35,0 script Anon NPC425,{
message strcharinfo(0), "Anon : What are you waiting for?";
end;
OnInit:
disablenpc strnpcinfo(0);
end;
}
099-5,51,33,0 script Flying Ship NPC428,{
message strcharinfo(0), l("WHAT. IN. NAME. OF. JANDE. IS. THAT. THING?!");
end;
OnInit:
disablenpc strnpcinfo(0);
end;
}
099-5,51,33,0 script Gema III NPC395,{
if ($@DD5_STATUS != 9)
goto L_TooEarly;
if (@dd5_cutscene)
end;
mesc l("Embark on Gema III in pursuit?");
mes l("You may be unable to return here!");
next;
menu
l("Yes"),L_Yes,
l("No"),L_No;
L_No:
closeclientdialog;
close;
L_Yes:
@dd5_cutscene = 1;
// Stop rendering the map and Embark - Player effect only
mapmask 1 | 128;
changemusic "099-5","epilogue.ogg";
addtimer 300, "Gema III::OnStart";
closeclientdialog;
close;
OnStart:
selfeffect 53;
message strcharinfo(0), l("But it might be too late.");
addtimer 2300, "Gema III::OnFPS01";
end;
OnFPS01:
message strcharinfo(0), l("Brave adventurers from all around the world,");
addtimer 2500, "Gema III::OnFPS02";
end;
OnFPS02:
message strcharinfo(0), l("Marches toward that unknown island,");
addtimer 2100, "Gema III::OnFPS03";
end;
OnFPS03:
message strcharinfo(0), l("Said to have the key to stop Zax De'Kagen's ambitions.");
addtimer 4300, "Gema III::OnFPS04";
end;
OnFPS04:
message strcharinfo(0), l("Unbeknownst to them, Zax already made his move.");
addtimer 3200, "Gema III::OnFPS05";
end;
OnFPS05:
message strcharinfo(0), l("Before anyone can even reach him, he executes the plan,");
addtimer 3600, "Gema III::OnFPS06";
end;
OnFPS06:
message strcharinfo(0), l("Carefully written for over a decade.");
addtimer 3100, "Gema III::OnFPS07";
end;
OnFPS07:
message strcharinfo(0), l("Using Nu'Rem's body as a catalyst,");
addtimer 2000, "Gema III::OnFPS08";
end;
OnFPS08:
message strcharinfo(0), l("The Ether Spirit of Air is finally compromised.");
addtimer 2900, "Gema III::OnFPS09";
end;
OnFPS09:
message strcharinfo(0), l("Half from the Etheral Powers of Air,");
addtimer 2300, "Gema III::OnFPS10";
end;
OnFPS10:
message strcharinfo(0), l("Are absorbed by The Mana Seal.");
addtimer 2100, "Gema III::OnFPS11";
end;
OnFPS11:
message strcharinfo(0), l("The other half collides with the Earth Spirit,");
addtimer 2400, "Gema III::OnFPS12";
end;
OnFPS12:
message strcharinfo(0), l("And a new element is born.");
addtimer 2200, "Gema III::OnFPS13";
end;
OnFPS13:
message strcharinfo(0), l("History begins to rewrite itself,");
addtimer 2200, "Gema III::OnFPS14";
end;
OnFPS14:
message strcharinfo(0), l("Who's Zax? Something is not right.");
addtimer 3600, "Gema III::OnFPS15";
end;
OnFPS15:
message strcharinfo(0), l("But what will be of our brave adventurers,");
addtimer 3400, "Gema III::OnFPS16";
end;
OnFPS16:
message strcharinfo(0), l("lost midst all this cataclysm?");
addtimer 2800, "Gema III::OnFPS17";
end;
OnFPS17:
message strcharinfo(0), l("Will they reach Nu'Rem's grave?");
addtimer 2400, "Gema III::OnFPS18";
end;
OnFPS18:
message strcharinfo(0), l("Will they put a stop to Zax's evil ambitions?");
addtimer 3000, "Gema III::OnFPS19";
end;
OnFPS19:
message strcharinfo(0), l("Follow their journey, and take back the world, in");
addtimer 3600, "Gema III::OnFPS20";
end;
OnFPS20:
message strcharinfo(0), col(b(l("THE MANA WORLD: REVOLT")), 2);
//if (debug)
addtimer 5000, "Gema III::OnDebugPrompt";
//if (!debug)
// addtimer 5000, "Gema III::OnPrompt";
end;
OnPrompt:
mes ".:: THE MANA WORLD - REVOLT ::.";
mes "";
mes "Server Name: ##BThe Mana World##b";
mes "Server Address: ##Bserver.themanaworld.org##b";
mes "Server Port: ##BXXXX##b";
mes "Server Type: ##BEvol2##b";
mes "Server Description: ##BMain Server for The Mana World##b";
mes "";
mes "##BCOMING SOON##b";
mes "##BMONTH DAY, 18:00 UTC##b";
next;
mes "##BPre-register##b here:";
mes "[@@https://vault.themanaworld.org/|@@]";
mes "Max. 1 account per player.";
next;
goto L_MissionComplete;
OnDebugPrompt:
mes ".:: THE MANA WORLD - REVOLT ::.";
mes "";
mes "##BCOMING SOON##b";
mes "";
mes "Thanks for playing!";
mes "Stay tuned for updates!";
mes "";
mes "-- The Mana World Team";
next;
goto L_MissionComplete;
L_MissionComplete:
@dd5_cutscene = 0;
warp "009-1", 52, 40;
getexp 1000000, 0;
if (strcharinfo(0) == $@DD5_TALLY$)
goto L_Winner;
close;
L_Winner:
getitem SaviorArmor, 1;
$@DD5_TALLY$ = "";
setq Quest_Doomsday, 3;
getvaultexp(250); // This is TMW's main quest, worth 50% of the EXP bar
mesc l("You were the MVP with %s points!", fnum($@DD5_TALLY_)), 2;
close;
L_TooEarly:
mesn strcharinfo(0);
mes l("It is Gema III! How did they manage to bring the ship here?!");
close;
OnInit:
disablenpc "Gema III";
end;
}
099-5,50,49,0 script Xakelbael the Dark#0 NPC433,{
end;
OnInit:
disablenpc "Xakelbael the Dark#0";
end;
OnTimer50000:
areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTFourthFall";
initnpctimer;
npctalk "Fourth Fall!";
end;
OnEnable:
initnpctimer;
end;
OnDisable:
stopnpctimer;
end;
}
099-5,50,49,0 script Zax De'Kagen#0 NPC432,{
end;
OnInit:
disablenpc "Zax De'Kagen#0";
end;
OnTimer18000:
if ($@DD5_STATUS != 3)
end;
$@DD5_ATK=true;
killmonster("099-5", "#TMWFinalExam::OnZax");
spawndummy("099-5", 50, 49, Kage, strnpcinfo(1), "#TMWFinalExam::OnZax");
end;
OnTimer24000:
if ($@DD5_STATUS != 3)
end;
initnpctimer;
$@DD5_ATK=false;
killmonster("099-5", "#TMWFinalExam::OnZax");
end;
OnTimer90000:
if ($@DD5_STATUS != 7)
end;
initnpctimer;
npctalk "Bliss Of Oblivion!";
donpcevent "#TMWFinalExam::OnBlissOblivion";
end;
OnAdjustPotion:
if ($@DD5_STATUS != 7)
end;
setnpctimer max(0, min(75000, getnpctimer(0)-rand(5000, 15000)));
// If it is me testing then it forwards >.>
if (debug && strcharinfo(0) == "Jesusalva")
setnpctimer 75000;
end;
OnEnable:
disablenpc "Zax De'Kagen#0";
initnpctimer;
end;
OnDisable:
enablenpc strnpcinfo(0); // FIXME
stopnpctimer;
end;
OnFinal:
initnpctimer;
end;
OnAbort:
stopnpctimer;
areatimer 0, "099-4", 20, 20, 75, 75, 1000, "#TMWFinalExam::OnMTWarpTo0";
donpcevent "Xakelbael the Dark#0::OnDisable";
end;
}