summaryrefslogtreecommitdiff
path: root/npc/099-5/boss.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/099-5/boss.txt')
-rw-r--r--npc/099-5/boss.txt1509
1 files changed, 1509 insertions, 0 deletions
diff --git a/npc/099-5/boss.txt b/npc/099-5/boss.txt
new file mode 100644
index 00000000..cb4d9dac
--- /dev/null
+++ b/npc/099-5/boss.txt
@@ -0,0 +1,1509 @@
+// 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
+///////////////////////////////////////////////////////////////////
+// 1151
+// const int - ID of the Void Flower (s1 only)
+// 1155
+// const int - ID of the Void Bat
+///////////////////////////////////////////////////////////////////
+// $@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 WHITE)
+// 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
+///////////////////////////////////////////////////////////////////
+// $@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
+// 2 - Epilogue Mode
+// 4 - DEFCON 1 INVENCIBLE
+// 8 - DEFCON 2 DOUBLE DEFENSE
+// 16 - DEFCON 3 POTION IMMUNITY
+// 32 - DEFCON 4 WATER VULNERABLE
+// 64 - DEFCON 5 RANGED INVULNERABILITY
+// 128 - DEFCON 6 BONE VULNERABLE
+// 256 - DEFCON 7 MELEE REGEN
+// 512 - DEFCON 8 GP COST
+// 1024 - DEFCON
+// NOTE: Personal score overflows at 214,000 points
+
+099-5 mapflag nosave 009-1,52,40
+//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-3 mapflag nosave 099-7,75,36
+//099-3 mapflag resave 099-7,75,36
+099-2 mapflag nosave 099-7,75,36
+//099-2 mapflag resave 099-7,75,36
+099-1 mapflag nosave 099-7,75,36
+//099-1 mapflag resave 099-7,75,36
+
+099-5,0,0,0 script #TMWFinalExam NPC32767,{
+ // Main script
+ 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";
+ 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), "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), "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*100, @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*200, @dd5_share*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*500, @dd5_share*5;
+ 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;
+
+ // Dispose dead bodies (BUG, should not happen)
+ if (ispcdead())
+ goto OnMTDispose;
+
+ // Tally rewards
+ // FIXME TODO Use a bitwise to save space, this is TMWA
+ if (!#DD5_TALLY && !$DOOMSDAY_VANILLA)
+ 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, this is TMWA
+ if (!#DD5_TALLY && !$DOOMSDAY_VANILLA)
+ goto OnTally;
+ goto OnEpilogue1;
+
+OnTally:
+ 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";
+
+ // FIXME SC IDs changed
+ // High Damage
+ if (sc_check(sc_raiseattackspeed0))
+ heal -300, -100;
+
+ if (sc_check(sc_raiseattackstrength))
+ heal -300, -100;
+
+ // Medium Damage
+ if (sc_check(SC_PHYS_SHIELD))
+ heal -250, -50;
+
+ if (sc_check(SC_MBARRIER))
+ heal -250, -50;
+
+ // Low Damage
+ if (sc_check(SC_FLYING_BACKPACK))
+ 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
+ if ($@DD5_DEFCON == 0)
+ mapmask 1;
+ if ($@DD5_DEFCON == 1)
+ mapmask 1 | 4;
+ if ($@DD5_DEFCON == 2)
+ mapmask 1 | 8;
+ if ($@DD5_DEFCON == 3)
+ mapmask 1 | 16;
+ if ($@DD5_DEFCON == 4)
+ mapmask 1 | 32;
+ if ($@DD5_DEFCON == 5)
+ mapmask 1 | 64;
+ if ($@DD5_DEFCON == 6)
+ mapmask 1 | 128;
+ if ($@DD5_DEFCON == 7)
+ mapmask 1 | 256;
+ if ($@DD5_DEFCON == 8)
+ mapmask 1 | 512;
+ end;
+
+OnBlissOblivion:
+ killmonster "099-5", "All";
+ killmonster "099-4", "All";
+ $@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)
+ 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!
+ 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 "Zax De'Kagen#0", "What is that, a bunch of Talpans in my domains?";
+ 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 "Zax De'Kagen#0", "Don't make me laugh. Do you really think you have what it takes to stop ME?!";
+ 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 "Zax De'Kagen#0", "Hmpf! We will see about that. Therefore...";
+ 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 "Zax De'Kagen#0", "Catch me if you can!";
+ spawndummy("099-5", 50, 49, Kage, "Zax De'Kagen", strnpcinfo(0)+"::OnMain");
+ $@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($@DD5MB_AVERAGE), $@DD5_TOTALPC, "#TMWFinalExam::OnKillAverage";
+ areamonster "099-5", 20, 20, 75, 75, "", any($@DD5MB_AVERAGE), $@DD5_PRIMARY, "#TMWFinalExam::OnKillAverage";
+ areamonster "099-4", 20, 20, 75, 75, "", any($@DD5MB_AVERAGE), $@DD5_SUPPORT, "#TMWFinalExam::OnKillAverage";
+ areamonster "099-5", 20, 20, 75, 75, "", 1151, $@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;
+
+OnRubberBat:
+ if ($@DD5_STATUS != 3)
+ end;
+ areamonster getmapname(), getx()-5, gety()-5, getx()+5, gety()+5, "", 1155, rand(1,2), "#TMWFinalExam::OnKillWeak";
+ addtimer 10, "Zax De'Kagen#0::OnAdjustBat";
+ end;
+
+OnPickledBeets:
+ if ($@DD5_STATUS != 3)
+ end;
+ addtimer 10, "Zax De'Kagen#0::OnAdjustBeets";
+ 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 "Zax De'Kagen#0", "Hahaha! Not bad, not bad at all!";
+
+ 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 "Zax De'Kagen#0", "However...";
+
+ 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 "Zax De'Kagen#0", "This was only warm up!";
+
+ 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 "Zax De'Kagen#0", "Look and behold, the form I took on this rewrite...";
+
+ 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 "Zax De'Kagen#0", "The name which I am known is...";
+
+ addnpctimer 10000, "#TMWFinalExam::OnWarmedUp5";
+ end;
+
+OnWarmedUp5:
+ disablenpc "Zax De'Kagen#0";
+ 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#0", "...Xakelbael the Dark! PERISH!";
+
+ 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, Kage, "Xakelbael the Dark", strnpcinfo(0)+"::OnMain");
+ $@DD5_ATK=true;
+ // Spawn second wave
+ areamonster "099-5", 20, 20, 75, 75, "", any($@DD5MB_AVERAGE), $@DD5_PRIMARY, "#TMWFinalExam::OnKillAverage";
+ areamonster "099-4", 20, 20, 75, 75, "", any($@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";
+
+ 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;
+ npctalk "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;
+ npctalk "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;
+ npctalk "Zax De'Kagen#0", "Well, we still have time! Only "+$@DD5_TSPENT$+" passed!";
+
+ $@DD5_TPASSED = 0;
+ $@DD5_TSPENT$ = "";
+ addnpctimer 10000, "#TMWFinalExam::OnShowdown3";
+ end;
+
+OnShowdown3:
+ 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;
+ npctalk "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;
+ npctalk "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;
+ npctalk "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", strnpcinfo(0)+"::OnMain");
+ areamonster "099-5", 20, 20, 75, 75, "", any($@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 "Thanks for the "+$@DD5_TSPENT$+" of fun you gave me!";
+ next;
+ if (debug) goto L_Epilogue1Part22;
+ mes "[Zax De'Kagen]";
+ mes "This was not in the plan, but was fun nonetheless. Worth the detour.";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "However, now I need to go. Unlike you, I do not want to be late.";
+ next;
+ menu
+ "We just killed you?", L_Epilogue1Part1,
+ "Late? What do you mean?", L_Epilogue1Part1;
+
+L_Epilogue1Part1:
+ mes "[Zax De'Kagen]";
+ mes "You know villains never lie. Did you notice how I did not attack any of you directly?";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "I already finished my plans "+$@DD5_TSPENT2$+" ago, otherwise I would not be bothering myself with you.";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "I hope you did not hoped to kill me. Wait. You actually did?!";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "HAHAHAHAHAHAHAHA!!";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "Thanks for this, I don't recall laughing so hard the past five years.";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "Tell me... Enumerate me... Which beings on The Mana World remains dead after being killed?";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "Think a bit! Monsters respawn... Adventurers appear near the Soul Menhir...";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "...Or used to, at least; I don't know why that's not true anymore... anyway...";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "Did you really thought you could simply defeat me in combat and expect this to solve all your problems?";
+ next;
+ menu
+ "I did", L_Epilogue1Part21,
+ "I didn't", L_Epilogue1Part22;
+
+L_Epilogue1Part21:
+ mes "[Zax De'Kagen]";
+ mes "HAHAHAHAHAHAHAHA!!";
+ next;
+ goto L_Epilogue1Part2;
+L_Epilogue1Part22:
+ mes "[Zax De'Kagen]";
+ mes "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 "I'm not even close to fainting yet.";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "Besides, only a handful of mana beings know how to erase something of existence.";
+ next;
+ mes "[Zax De'Kagen]";
+ mes "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;
+ npctalk "Zax De'Kagen#0", "Now that I know where Nu'Rem is burried, nothing can stop me.";
+
+ // FIXME DEBUG DEBUG DEBUG FIXME
+ if (debug)
+ addnpctimer 2000, "#TMWFinalExam::OnEpilogue5";
+ else
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue3";
+ end;
+
+OnEpilogue3:
+ mapannounce "099-5", "Zax De'Kagen : Good bye, mortal adventurers." , 0;
+ npctalk "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;
+ npctalk "Zax De'Kagen#0", "Heh, not like I wasn't one too, back then...";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue5";
+ end;
+
+OnEpilogue5:
+ 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;
+ npctalk "Jande#0", "With Zax gone, I could finally arrive here.";
+
+ // FIXME DEBUG DEBUG DEBUG FIXME
+ if (debug)
+ addnpctimer 2000, "#TMWFinalExam::OnEpilogue15";
+ else
+ 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;
+ npctalk "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;
+ npctalk "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;
+ npctalk "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;
+ npctalk "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;
+ npctalk "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;
+ npctalk "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;
+ npctalk "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;
+ npctalk "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)";
+ // FIXME DEBUG DEBUG DEBUG FIXME
+ if (debug)
+ addnpctimer 2000, "#TMWFinalExam::OnEpilogue25";
+ else
+ addnpctimer 30000, "#TMWFinalExam::OnEpilogue16";
+ end;
+
+
+OnEpilogue16:
+ npctalk "Jande#0", "(*whisper* Tal, do you think they'll make it?)";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue17";
+ end;
+OnEpilogue17:
+ npctalk "Tal#0", "Tal : (*whisper* I would be surprised if they survived the trip alone.)";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue18";
+ end;
+OnEpilogue18:
+ npctalk "Jande#0", "(*whisper* For now, let's hope for the best. I don't want another rewrite...)";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue19";
+ end;
+OnEpilogue19:
+ npctalk "Tal#0", "Tal : (*whisper* You worry too much. Di'Tal already put measures in place.)";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue20";
+ end;
+OnEpilogue20:
+ npctalk "Tal#0", "Tal : (*whisper* The same incident from years ago will not repeat itself.)";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue21";
+ end;
+OnEpilogue21:
+ npctalk "Tal#0", "Tal : (*whisper* Besides, shall they fail - they won't remember any of this.)";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue22";
+ end;
+OnEpilogue22:
+ npctalk "Jande#0", "(*whisper* We will have a good room to maneuver undercover, then.)";
+ addnpctimer 15000, "#TMWFinalExam::OnEpilogue23";
+ end;
+
+OnEpilogue23:
+ npctalk "Anon", "What are you waiting for? You're running against the clock.";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue24";
+ end;
+OnEpilogue24:
+ npctalk "Anon", "You know Jande and Tal cannot get close to that... that thing.";
+ addnpctimer 5000, "#TMWFinalExam::OnEpilogue25";
+ end;
+OnEpilogue25:
+ npctalk "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($@DD5MB_WEAK), $@DD5_PRIMARY, "#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, "", 1151, $@DD5_TOTALPC, "#TMWFinalExam::OnKillAverage";
+ end;
+
+OnTimer75000:
+ // Imperial Chamber
+ areamonster "099-5", 43, 44, 56, 55, "", any($@DD5MB_AVERAGE), $@DD5_PRIMARY/3+1, "#TMWFinalExam::OnKillAverage";
+ // Map
+ $@DD5_MOBC = $@DD5_TOTALPC/2;
+ callsub S_DD5PrimarySpawn;
+ // Prologue mobs
+ if ($@DD5_STATUS == 3)
+ areamonster "099-5", 20, 20, 75, 75, "", 1151, $@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($@DD5MB_STRONG), max(3, 1+$@DD5_PRIMARY/3), "#TMWFinalExam::OnKillStrong";
+ areamonster "099-5", 43, 44, 56, 55, "", any($@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, "", 1151, $@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:
+ @dd5_score = @dd5_score+1;
+ $@DD5_PTS = $@DD5_PTS+1;
+ end;
+
+OnKillAverage:
+ @dd5_score = @dd5_score+10;
+ $@DD5_PTS = $@DD5_PTS+10;
+ end;
+
+OnKillStrong:
+ @dd5_score = @dd5_score+25;
+ $@DD5_PTS = $@DD5_PTS+25;
+ end;
+
+OnInit:
+ setarray $@DD5MB_WEAK, 1155, 1156, 1155, 1156, 1155, 1156, 1158;
+ setarray $@DD5MB_AVERAGE, 1159, 1160, 1159, 1160, 1159, 1160, 1157, 1158;
+ setarray $@DD5MB_STRONG, 1152, 1153, 1154, 1152, 1153, 1154, 1152, 1153, 1154;
+ setarray $@DD5MB_BOSSLV, 1146, 1147, 1140, 1141, 1143, 1149, 1148, 1140;
+ // Flower 1151, Mouboo 1158
+ end;
+
+OnMiteyo:
+ if ($DOOMSDAY != 3)
+ 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($@DD5MB_WEAK), 2, "#TMWFinalExam::OnKillWeak";
+ areamonster "099-5", 20, 20, 75, 75, "", any($@DD5MB_WEAK), 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($@DD5MB_AVERAGE), 1, "#TMWFinalExam::OnKillAverage";
+ areamonster "099-5", 20, 20, 75, 75, "", any($@DD5MB_AVERAGE), 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($@DD5MB_STRONG), 1, "#TMWFinalExam::OnKillStrong";
+ areamonster "099-5", 20, 20, 75, 75, "", any($@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 {
+ // Shearing magic is active?
+ 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_raiseattackspeed0))
+ @dd5_dmg = 0;
+ if (sc_check(sc_raiseattackstrength))
+ @dd5_dmg = 0;
+ goto L_Return;
+
+L_DEFCON4:
+ callfunc "DD5RainCheck";
+ goto L_Return;
+
+L_DEFCON5:
+ if (ATTACKRANGE > 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 (getequipid(equip_arrow) != 1282 && getequipid(equip_hand1) != 570)
+ @dd5_dmg = 0;
+ // Lame check for bows because I'm lazy
+ if (getequipid(equip_arrow) == 1282 && ATTACKRANGE < 4)
+ @dd5_dmg = 0;
+ goto L_Return;
+
+L_DEFCON7:
+ if (ATTACKRANGE < 3)
+ @dd5_dmg = 0-(@dd5_dmg);
+ goto L_Return;
+
+L_DEFCON8:
+ if (Zeny < @dd5_dmg*10)
+ @dd5_dmg = 0;
+ Zeny = Zeny-(@dd5_dmg*10);
+ 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;
+
+ // Verify range
+ if (!(isin("099-5", 50-ATTACKRANGE, 49-ATTACKRANGE, 50+ATTACKRANGE, 49+ATTACKRANGE)))
+ goto L_Return;
+
+ // Assign attack speed delay - 300ms with pots, 600ms without
+ @dd5_timer = if_then_else(sc_check(sc_raiseattackspeed0), gettimetick(0)+300, gettimetick(0)+600);
+
+ // Calculate HIT and CRIT rate
+ @dd5_crit = (rand(10000) < CRIT);
+ if (rand(400) > HIT && !@dd5_crit)
+ goto L_Miss;
+
+ // Calculate damage
+ @dd5_dmg = ATK1+BASE_ATK;
+
+ // Strength Potion - DMG +50%
+ if (sc_check(sc_raiseattackstrength))
+ @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 + 25;
+ if ($@DD5_STATUS == 3)
+ donpcevent "#TMWFinalExam::OnWarmedUp0";
+ if ($@DD5_STATUS == 5)
+ donpcevent "#TMWFinalExam::OnShowdown0";
+ if ($@DD5_STATUS == 7)
+ donpcevent "#TMWFinalExam::OnEpilogue0";
+ message strcharinfo(0), "You gained 25 Boss Points!";
+ $@DD5_ATK=false;
+ return;
+
+L_Return:
+ spawndummy("099-5", 50, 49, Kage, strnpcinfo(2), strnpcinfo(0)+"::OnMain");
+ return;
+}
+
+099-5,52,35,0 script Jande#0 NPC426,{
+ message strcharinfo(0), "Jande : What are you waiting for?";
+ 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), "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;
+ mes "##1Embark on Gema III in pursuit?##0";
+ mes "You may be unable to return here!";
+ next;
+ menu
+ "Yes",L_Yes,
+ "No",L_No;
+
+L_No:
+ close;
+
+L_Yes:
+ @dd5_cutscene = 1;
+ // Stop rendering the map and Embark
+ mapmask 1 | 2;
+ changemusic "099-5","epilogue.ogg";
+ if (debug)
+ addtimer 5000, "Gema III::OnDebugPrompt";
+ if (!debug)
+ addtimer 300, "Gema III::OnStart";
+ close;
+
+OnStart:
+ selfeffect 53;
+ message strcharinfo(0), "But it might be too late.";
+ addtimer 2300, "Gema III::OnFPS01";
+ end;
+
+OnFPS01:
+ message strcharinfo(0), "Brave adventurers from all around the world,";
+ addtimer 2500, "Gema III::OnFPS02";
+ end;
+
+OnFPS02:
+ message strcharinfo(0), "Marches toward that unknown island,";
+ addtimer 2100, "Gema III::OnFPS03";
+ end;
+
+OnFPS03:
+ message strcharinfo(0), "Said to have the key to stop Zax De'Kagen's ambitions.";
+ addtimer 4300, "Gema III::OnFPS04";
+ end;
+
+OnFPS04:
+ message strcharinfo(0), "Unbeknownst to them, Zax already made his move.";
+ addtimer 3200, "Gema III::OnFPS05";
+ end;
+
+OnFPS05:
+ message strcharinfo(0), "Before anyone can even reach him, he executes the plan,";
+ addtimer 3600, "Gema III::OnFPS06";
+ end;
+
+OnFPS06:
+ message strcharinfo(0), "Carefully written for over a decade.";
+ addtimer 3100, "Gema III::OnFPS07";
+ end;
+
+OnFPS07:
+ message strcharinfo(0), "Using Nu'Rem's body as a catalyst,";
+ addtimer 2000, "Gema III::OnFPS08";
+ end;
+
+OnFPS08:
+ message strcharinfo(0), "The Ether Spirit of Air is finally compromised.";
+ addtimer 2900, "Gema III::OnFPS09";
+ end;
+
+OnFPS09:
+ message strcharinfo(0), "Half from the Etheral Powers of Air,";
+ addtimer 2300, "Gema III::OnFPS10";
+ end;
+
+OnFPS10:
+ message strcharinfo(0), "Are absorbed by The Mana Seal.";
+ addtimer 2100, "Gema III::OnFPS11";
+ end;
+
+OnFPS11:
+ message strcharinfo(0), "The other half collides with the Earth Spirit,";
+ addtimer 2400, "Gema III::OnFPS12";
+ end;
+
+OnFPS12:
+ message strcharinfo(0), "And a new element is born.";
+ addtimer 2200, "Gema III::OnFPS13";
+ end;
+
+OnFPS13:
+ message strcharinfo(0), "History begins to rewrite itself,";
+ addtimer 2200, "Gema III::OnFPS14";
+ end;
+
+OnFPS14:
+ message strcharinfo(0), "Who's Zax? Something is not right.";
+ addtimer 3600, "Gema III::OnFPS15";
+ end;
+
+OnFPS15:
+ message strcharinfo(0), "But what will be of our brave adventurers,";
+ addtimer 3400, "Gema III::OnFPS16";
+ end;
+
+OnFPS16:
+ message strcharinfo(0), "lost midst all this cataclysm?";
+ addtimer 2800, "Gema III::OnFPS17";
+ end;
+
+OnFPS17:
+ message strcharinfo(0), "Will they reach Nu'Rem's grave?";
+ addtimer 2400, "Gema III::OnFPS18";
+ end;
+
+OnFPS18:
+ message strcharinfo(0), "Will they put a stop to Zax's evil ambitions?";
+ addtimer 3000, "Gema III::OnFPS19";
+ end;
+
+OnFPS19:
+ message strcharinfo(0), "Follow their journey, and take back the world, in";
+ addtimer 3600, "Gema III::OnFPS20";
+ end;
+
+OnFPS20:
+ message strcharinfo(0), "##2##BTHE MANA WORLD: REVOLT##b##0";
+ //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$ = "";
+ #DD5_TALLY = 1;
+ mes "##2You were the MVP with "+$@DD5_TALLY_+" points!##0";
+ //mes "##2Exchange this blue rose with a Game Master!##0";
+ close;
+
+L_TooEarly:
+ mesn strcharinfo(0);
+ mes "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 NPC400,{
+OnMain:
+ callfunc "FinalExamAttack";
+ 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;
+OnAdjustSweet:
+ if ($@DD5_STATUS != 5)
+ end;
+ setnpctimer min(49000, getnpctimer(0)-rand(2500,5000));
+ end;
+OnDisable:
+ stopnpctimer;
+ end;
+}
+
+099-5,50,49,0 script Zax De'Kagen#0 NPC400,{
+OnMain:
+ callfunc "FinalExamAttack";
+ end;
+OnInit:
+ disablenpc "Zax De'Kagen#0";
+ end;
+
+OnTimer18000:
+ if ($@DD5_STATUS != 3)
+ end;
+ enablenpc strnpcinfo(0); // FIXME
+ $@DD5_ATK=true;
+ killmonster("099-5", strnpcinfo(0)+"::OnMain");
+ spawndummy("099-5", 50, 49, Kage, strnpcinfo(2), strnpcinfo(0)+"::OnMain");
+ end;
+OnTimer24000:
+ if ($@DD5_STATUS != 3)
+ end;
+ initnpctimer;
+ disablenpc strnpcinfo(0); // FIXME
+ $@DD5_ATK=false;
+ killmonster("099-5", strnpcinfo(0)+"::OnMain");
+ end;
+OnTimer90000:
+ if ($@DD5_STATUS != 7)
+ end;
+ initnpctimer;
+ npctalk "Bliss Of Oblivion!";
+ donpcevent "#TMWFinalExam::OnBlissOblivion";
+ end;
+
+OnAdjustBat:
+ if (getnpctimer(0) < 18000)
+ setnpctimer max(17000, getnpctimer(0)+rand(1000,2500));
+ end;
+OnAdjustBeets:
+ if (getnpctimer(0) > 18000)
+ setnpctimer min(18000, getnpctimer(0)-rand(3000,5000));
+ 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;
+}
+