summaryrefslogtreecommitdiff
path: root/world/map/npc/099-5/boss.txt
diff options
context:
space:
mode:
Diffstat (limited to 'world/map/npc/099-5/boss.txt')
-rw-r--r--world/map/npc/099-5/boss.txt1620
1 files changed, 0 insertions, 1620 deletions
diff --git a/world/map/npc/099-5/boss.txt b/world/map/npc/099-5/boss.txt
deleted file mode 100644
index d36457d2..00000000
--- a/world/map/npc/099-5/boss.txt
+++ /dev/null
@@ -1,1620 +0,0 @@
-// 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
-// 1142
-// const int - ID of the visuals for Zax De'Kagen
-///////////////////////////////////////////////////////////////////
-// $@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_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
-
-// Additional mapflags
-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|32767
-{
- // Main script
- end;
-
-OnAbort:
- stopnpctimer;
- set $@DD5_STATUS, 0;
- set $@DD5_HP, 0;
- set $@DD5_PTS, 0;
- set $@DD5_BEGIN, 0;
- set $@DD5_MOBC, 0;
- set $@DD5_PRIMARY, 0;
- set $@DD5_SUPPORT, 0;
- set $@DD5_TOTALPC, 0;
- set $@DD5_RAIN, 0;
- set $@DD5_DEFCON, 0;
- set $@DD5_TALLY_, 0;
- set $@DD5_TALLY$, "";
- 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;
-
-///////////////////////////////////////////////////////////
-// Map timers, against all players
-OnMTChallenge:
- set @dd5_score, 0;
- set @dd5_timer, gettimetick(0);
- getexp 40000, 0;
- set 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
- set @dd5_score, 1200;
- set $@DD5_PTS, $@DD5_PTS+1200;
- end;
-
-// FIXME not working for some reason
-OnMTWarpTo0:
- message strcharinfo(0), "Your party was defeated.";
- warp "009-1", 54, 40;
- end;
-
-OnMTDispose:
- warp "009-1", 54, 40;
- end;
-
-////////////////////////////
-// First Stage Rewards
-OnMTReward50:
- set @dd5_share, 10000*@dd5_score/$@DD5_PTS;
- if (!@dd5_share)
- end;
- getexp @dd5_share*100, @dd5_share;
- set Zeny, Zeny + @dd5_share;
- set BOSS_POINTS, BOSS_POINTS + @dd5_share/100;
- message strcharinfo(0), "Gained "+(@dd5_share/100)+" boss points!";
- goto OnMTMusicOff;
-
-OnMTReward40:
- set @dd5_share, 10000*@dd5_score/$@DD5_PTS;
- if (!@dd5_share)
- end;
- getexp @dd5_share*10, @dd5_share/10;
- set Zeny, Zeny + @dd5_share/10;
- set BOSS_POINTS, BOSS_POINTS + @dd5_share/200;
- message strcharinfo(0), "Gained "+(@dd5_share/200)+" boss points!";
- goto OnMTMusicOff;
-
-////////////////////////////
-// Second Stage Rewards
-OnMTReward51:
- set @dd5_share, 10000*@dd5_score/$@DD5_PTS;
- if (!@dd5_share)
- end;
- getexp @dd5_share*200, @dd5_share*2;
- set Zeny, Zeny + (@dd5_share*2);
- set BOSS_POINTS, BOSS_POINTS + @dd5_share/50;
- message strcharinfo(0), "Gained "+(@dd5_share/50)+" boss points!";
- goto OnMTMusicOff;
-
-OnMTReward41:
- set @dd5_share, 10000*@dd5_score/$@DD5_PTS;
- if (!@dd5_share)
- end;
- getexp @dd5_share*20, @dd5_share/5;
- set Zeny, Zeny + @dd5_share/5;
- set BOSS_POINTS, BOSS_POINTS + @dd5_share/100;
- message strcharinfo(0), "Gained "+(@dd5_share/100)+" boss points!";
- goto OnMTMusicOff;
-
-////////////////////////////
-// Third Stage Rewards
-OnMTReward52:
- set @dd5_share, 10000*@dd5_score/$@DD5_PTS;
- if (!@dd5_share)
- end;
- getexp @dd5_share*500, @dd5_share*5;
- set Zeny, Zeny + (@dd5_share*5);
- set BOSS_POINTS, BOSS_POINTS + @dd5_share/20;
- message strcharinfo(0), "Gained "+(@dd5_share/20)+" boss points!";
- music "ghoulish-fun.ogg";
- mapmask 1;
-
- // Dispose dead bodies (BUG, should not happen)
- if (isdead())
- 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:
- set @dd5_share, 10000*@dd5_score/$@DD5_PTS;
- if (!@dd5_share)
- end;
- getexp @dd5_share*50, @dd5_share;
- set Zeny, Zeny + @dd5_share;
- set BOSS_POINTS, BOSS_POINTS + @dd5_share/50;
- message strcharinfo(0), "Gained "+(@dd5_share/50)+" boss points!";
- music "ghoulish-fun.ogg";
-
- // Warp to 099-5 or dispose dead bodies
- if (isdead())
- 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;
-
-// Blue Rose tally
-OnTally:
- if (@dd5_score > $@DD5_TALLY_)
- goto OnTallyOK;
- goto OnEpilogue1;
-
-OnTallyOK:
- set $@DD5_TALLY_, @dd5_score;
- set $@DD5_TALLY$, strcharinfo(0);
- goto OnEpilogue1;
-
-////////////////////////////
-// Fourth Fall
-OnMTFourthFall:
- misceffect 52, strcharinfo(0); // FIXME
- addtimer 3000, "#TMWFinalExam::OnFourthFall";
- end;
-
-OnFourthFall:
- //debugmes "FOURTH FALL";
-
- // High Damage
- if (sc_check(sc_raiseattackspeed0))
- goto OnFF01Y;
- goto OnFF01N;
-
-OnFF01Y:
- heal -300, -100;
- goto OnFF01N;
-
-OnFF01N:
- if (sc_check(sc_raiseattackstrength))
- goto OnFF02Y;
- goto OnFF02N;
-
-OnFF02Y:
- heal -300, -100;
- goto OnFF02N;
-
-OnFF02N:
- // Medium Damage
- if (sc_check(SC_PHYS_SHIELD))
- goto OnFF03Y;
- goto OnFF03N;
-
-OnFF03Y:
- heal -250, -50;
- goto OnFF03N;
-
-OnFF03N:
- if (sc_check(SC_MBARRIER))
- goto OnFF04Y;
- goto OnFF04N;
-
-OnFF04Y:
- heal -250, -50;
- goto OnFF04N;
-
-OnFF04N:
- // Low Damage
- if (sc_check(SC_FLYING_BACKPACK))
- goto OnFF05Y;
- goto OnFF05N;
-
-OnFF05Y:
- heal -125, -25;
- goto OnFF05N;
-
-OnFF05N:
- if (sc_check(sc_slowpoison))
- goto OnFF06Y;
- goto OnFF06N;
-
-OnFF06Y:
- heal -125, -25;
- goto OnFF06N;
-
-OnFF06N:
- //debugmes "FOURTH WALL WAS BROKEN";
- misceffect 52, strcharinfo(0); // FIXME
- end;
-
-////////////////////////////
-// Bliss Of Oblivion
-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";
- set $@DD5_DEFCON, rand(0, 8);
- // Keep a few tricks under the sleeve initially
- if ($@DD5_HP > 100000 && $@DD5_DEFCON < 4)
- set $@DD5_DEFCON, rand(4, 8);
- // Re-rolls: Start avoiding initial movements
- if ($@DD5_HP < 50000 && $@DD5_DEFCON > 3 && $@DD5_DEFCON < 7)
- set $@DD5_DEFCON, rand(0, 8);
- // If hurt badly, use invencible a bit more often (shearing is annoying)
- if ($@DD5_HP < 10000 && $@DD5_DEFCON > 2)
- set $@DD5_DEFCON, rand(0, 8);
- areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTBlissOblivion";
- setnpctimer 119000;
- end;
-
-////////////////////////////
-// Miniboss Spawning
-OnMTWarning:
- misceffect 54, strcharinfo(0);
- end;
-
-OnMTMusicOn:
- music "Dramatic.ogg";
- end;
-
-OnMTMusicOff:
- music "ghoulish-fun.ogg";
- end;
-
-///////////////////////////////////////////////////////////
-// Before the battle begins
-OnWarn0:
- announce "Doomsday : The Final Showdown will start shortly! Make way to the Master Chamber at once!", 0;
- set $@DD5_STATUS, 1;
- set $@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;
- set $@DD5_STATUS, 2;
- set $@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;
-
-///////////////////////////////////////////////////////////
-// Prologue
-OnPrologue1:
- // set the sprite (implies enablenpc)
- fakenpcname "Zax De'Kagen#0", "Zax De'Kagen#0", 1142;
- 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!";
- set $@DD5_STATUS, 3;
- set $@DD5_HP, 20000+(getmapusers("099-5")*100);
- set $@DD5_PRIMARY, 5+getmapusers("099-5");
- set $@DD5_SUPPORT, 3+getmapusers("099-4");
- set $@DD5_TOTALPC, $@DD5_PRIMARY+$@DD5_SUPPORT;
- // Spawn first assault
- areamonster "099-5", 43, 44, 56, 55, "", $@DD5MB_AVERAGE[rand(getarraysize($@DD5MB_AVERAGE))], $@DD5_TOTALPC, "#TMWFinalExam::OnKillAverage";
- areamonster "099-5", 20, 20, 75, 75, "", $@DD5MB_AVERAGE[rand(getarraysize($@DD5MB_AVERAGE))], $@DD5_PRIMARY, "#TMWFinalExam::OnKillAverage";
- areamonster "099-4", 20, 20, 75, 75, "", $@DD5MB_AVERAGE[rand(getarraysize($@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;
-
-///////////////////////////////////////////////////////////
-// First Stage
-OnRubberBat:
- if ($@DD5_STATUS != 3)
- end;
- areamonster getmap(), 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;
-
-///////////////////////////////////////////////////////////
-// Second Stage
-OnWarmedUp0:
- stopnpctimer;
- set $@DD5_STATUS, 4;
- set $@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:
- set $@DD5_STATUS, 5;
- set $@DD5_HP, 40000+(getmapusers("099-5")*100);
- set $@DD5_PRIMARY, 1+getmapusers("099-5")*15/10;
- set $@DD5_SUPPORT, 1+getmapusers("099-4")*15/10;
- set $@DD5_TOTALPC, $@DD5_PRIMARY+$@DD5_SUPPORT;
- // Spawn second wave
- areamonster "099-5", 20, 20, 75, 75, "", $@DD5MB_AVERAGE[rand(getarraysize($@DD5MB_AVERAGE))], $@DD5_PRIMARY, "#TMWFinalExam::OnKillAverage";
- areamonster "099-4", 20, 20, 75, 75, "", $@DD5MB_AVERAGE[rand(getarraysize($@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;
-
-OnRainCheck:
- set .@name$, strnpcinfo(0,@target_id);
- explode .@nearby$[0], .@name$, "#";
- if (.@nearby$[0] != "rain" && .@nearby$[1] != "rain") end;
- set $@DD5_RAIN, 1;
- end;
-
-///////////////////////////////////////////////////////////
-// Third Stage
-OnShowdown0:
- stopnpctimer;
- set $@DD5_STATUS, 6;
- set $@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:
- set $@DD5_TPASSED, (gettimetick(2)-$@DD5_BEGIN);
- set $@DD5_TSPENT$, $@DD5_TPASSED/60+" minute(s) and "+$@DD5_TPASSED%60+" second(s)";
- 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!";
-
- set $@DD5_TPASSED, 0;
- set $@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:
- set $@DD5_STATUS, 7;
- set $@DD5_HP, 115000+(getmapusers("099-5")*100);
- set $@DD5_PRIMARY, 3+getmapusers("099-5")*15/10;
- set $@DD5_SUPPORT, 3+getmapusers("099-4")*15/10;
- set $@DD5_TOTALPC, $@DD5_PRIMARY+$@DD5_SUPPORT-2;
- areamonster "099-5", 20, 20, 75, 75, "", $@DD5MB_AVERAGE[rand(getarraysize($@DD5MB_WEAK))], $@DD5_PRIMARY, "#TMWFinalExam::OnKillWeak";
- initnpctimer;
- set $@DD5_DEFCON, rand(4, 8);
- areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTBlissOblivion";
- donpcevent "Zax De'Kagen#0::OnFinal";
- end;
-
-///////////////////////////////////////////////////////////
-// Epilogue
-OnEpilogue0:
- stopnpctimer;
- set $@DD5_STATUS, 8;
- set $@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";
-
- set $@DD5_TPASSED, (gettimetick(2)-$@DD5_BEGIN);
- set $@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
- set $@DD5_TSPENT2$, $@DD5_TPASSED2/60+" minute(s)";
- set $@DD5_PRIMARY, 0;
- set $@DD5_SUPPORT, 0;
- donpcevent "Zax De'Kagen#0::OnDisable";
- end;
-
-// Unfortunately we all know that
-// MANAPLUS ALLOWS YOU TO EXPLODE THE MENUS
-// So we need a control addtimer to fire
-// if you exit this illegally
-OnEpilogue1:
- set @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;
-
- set @dd5_illegalexit, 0;
- if (getmap() == "099-5")
- goto OnEpilogue1b;
-
- // What. How? Force script to explode.
- set Hp, 0;
- heal -99999, -99999;
- end;
-
-// If you exited it when convenient, force you to restart interaction
-OnIllegalExit1:
- if (@dd5_illegalexit)
- goto OnEpilogue1;
- end;
-
-// Should we advance or warp map?
-// “Instead of using $@DD5_PRIMARY, use an areatimer
-// sum up like Candor Cave looking for a temporary variable,
-// And only if no one has the temporary variable anymore, advance.”
-
-// TODO FIXME This looks like it'll explode the first chance it gets
-OnEpilogue1b:
- set $@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)
- set $@DD5_SUPPORT, $@DD5_SUPPORT+1;
- addtimer 50, "#TMWFinalExam::OnEpilogue1d";
- end;
-
-OnEpilogue1d:
- if ($@DD5_PRIMARY)
- end;
- if ($@DD5_SUPPORT >= getmapusers("099-5"))
- goto OnEpilogue1e;
- set $@DD5_SUPPORT, 0;
- end;
-
-OnEpilogue1e:
- set $@DD5_PRIMARY, 1;
- set $@DD5_SUPPORT, 0;
- addnpctimer 300, "#TMWFinalExam::OnEpilogue2";
- close;
-
-////////////// There are no players in 099-4 now
-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:
- set $@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;
-
-
-// Conspiracy
-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;
-
-///////////////////////////////////////////////////////////
-// Spawn Subsystem
-S_DD5PrimarySpawn:
- // Receives: $@DD5_MOBC
- set $@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;
- set $@DD5_TMP, 0;
- return;
-
-///////////////////////////////////////////////////////////
-// Timer Subsystem, spawns every 30 seconds
-OnTimer40000:
- // Imperial Chamber
- areamonster "099-5", 43, 44, 56, 55, "", $@DD5MB_WEAK[rand(getarraysize($@DD5MB_WEAK))], $@DD5_PRIMARY, "#TMWFinalExam::OnKillWeak";
- // Map
- set $@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, "", $@DD5MB_AVERAGE[rand(getarraysize($@DD5MB_AVERAGE))], $@DD5_PRIMARY/3+1, "#TMWFinalExam::OnKillAverage";
- // Map
- set $@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;
-
-// Warn players about the 110s rule closing in
-// They'll have 10 seconds to prepare themselves to the mini-boss spawn!
-// AND to get ready to the boss HP regeneration (which is small but anyway)
-OnTimer104000:
- areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTWarning";
- end;
-
-OnTimer120000:
- // Imperial Chamber
- areamonster "099-5", 43, 44, 56, 55, "", $@DD5MB_STRONG[rand(getarraysize($@DD5MB_STRONG))], max(3, 1+$@DD5_PRIMARY/3), "#TMWFinalExam::OnKillStrong";
- areamonster "099-5", 43, 44, 56, 55, "", $@DD5MB_BOSSLV[rand(getarraysize($@DD5MB_BOSSLV))], $@DD5_STATUS/2, "#TMWFinalExam::OnKillStrong";
- // Map
- set $@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)
- set $@DD5_HP, $@DD5_HP+((13*$@DD5_STATUS)*3);
- initnpctimer;
- end;
-
-///////////////////////////////////////////////////////////
-// Monster Death Label
-OnKillWeak:
- set @dd5_score, @dd5_score+1;
- set $@DD5_PTS, $@DD5_PTS+1;
- end;
-
-OnKillAverage:
- set @dd5_score, @dd5_score+10;
- set $@DD5_PTS, $@DD5_PTS+10;
- end;
-
-OnKillStrong:
- set @dd5_score, @dd5_score+25;
- set $@DD5_PTS, $@DD5_PTS+25;
- end;
-
-///////////////////////////////////////////////////////////
-// Core
-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, "", $@DD5MB_WEAK[rand(getarraysize($@DD5MB_WEAK))], 3, "#TMWFinalExam::OnKillWeak";
- areamonster "099-5", 20, 20, 75, 75, "", $@DD5MB_WEAK[rand(getarraysize($@DD5MB_WEAK))], 3, "#TMWFinalExam::OnKillWeak";
- set $@DD5_MOBC, $@DD5_MOBC-1;
- return;
-}
-function|script|DD5SpawnRegular
-{
- if (rand(6) % 2 == 0)
- areamonster "099-4", 20, 20, 75, 75, "", $@DD5MB_AVERAGE[rand(getarraysize($@DD5MB_AVERAGE))], 1, "#TMWFinalExam::OnKillAverage";
- areamonster "099-5", 20, 20, 75, 75, "", $@DD5MB_AVERAGE[rand(getarraysize($@DD5MB_AVERAGE))], 2, "#TMWFinalExam::OnKillAverage";
- set $@DD5_MOBC, $@DD5_MOBC-1;
- return;
-}
-function|script|DD5SpawnPro
-{
- if (rand(6) % 2 == 0)
- areamonster "099-4", 20, 20, 75, 75, "", $@DD5MB_STRONG[rand(getarraysize($@DD5MB_STRONG))], 1, "#TMWFinalExam::OnKillStrong";
- areamonster "099-5", 20, 20, 75, 75, "", $@DD5MB_STRONG[rand(getarraysize($@DD5MB_STRONG))], 1, "#TMWFinalExam::OnKillStrong";
- set $@DD5_MOBC, $@DD5_MOBC-1;
- return;
-}
-
-/////////////////////////////////////////////////
-function|script|DD5RainCheck
-{
- set $@DD5_RAIN, 0;
-
- // Search for rain
- set .@p, get(.max_radius, "rain") + 1;
- foreach 1, getmap(), POS_X-.@p, POS_Y-.@p, POS_X+.@p, POS_Y+.@p, "#TMWFinalExam::OnRainCheck";
-
- // Not in rain - nullify damage
- if (!($@DD5_RAIN))
- set @dd5_dmg, 0;
- return;
-}
-
-/////////////////////////////////////////////////
-function|script|DD5DEFCONCheck
-{
- // Shearing magic is active?
- if (@chipchipspell[2] > 0)
- goto L_Shear;
- goto L_Loop;
-
-L_Shear:
- set @dd5_shear, 1;
- addtimer 0, "shear::OnDischarge";
- 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;
-
-// DEFCON 0 - Vulnerable
-L_DEFCON0:
- goto L_Return;
-
-// DEFCON 1 - Invulnerable
-L_DEFCON1:
- // FIXME
- if (@dd5_shear)
- goto L_Return;
- set @dd5_dmg, 0;
- goto L_Return;
-
-// DEFCON 2 - Double Defense
-L_DEFCON2:
- set @dd5_dmg, @dd5_dmg/2;
- goto L_Return;
-
-// DEFCON 3 - Potion Immunity
-L_DEFCON3:
- if (sc_check(sc_raiseattackspeed0))
- set @dd5_dmg, 0;
- if (sc_check(sc_raiseattackstrength))
- set @dd5_dmg, 0;
- goto L_Return;
-
-// DEFCON 4 - Water Vulnerable
-L_DEFCON4:
- callfunc "DD5RainCheck";
- goto L_Return;
-
-// DEFCON 5 - Ranged Invulnerable
-L_DEFCON5:
- if (ATTACKRANGE > 2)
- set @dd5_dmg, 0;
- goto L_Return;
-
-// DEFCON 6 - Bone Vulnerable
-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)
- set @dd5_dmg, 0;
- // Lame check for bows because I'm lazy
- if (getequipid(equip_arrow) == 1282 && ATTACKRANGE < 4)
- set @dd5_dmg, 0;
- goto L_Return;
-
-// DEFCON 7 - Melee Absorb
-L_DEFCON7:
- if (ATTACKRANGE < 3)
- set @dd5_dmg, 0-(@dd5_dmg);
- goto L_Return;
-
-// DEFCON 8 - GP Greed
-L_DEFCON8:
- if (Zeny < @dd5_dmg*10)
- set @dd5_dmg, 0;
- set Zeny, Zeny-(@dd5_dmg*10);
- goto L_Return;
-
-L_Return:
- set @dd5_shear, 0;
- return;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-function|script|FinalExamAttack
-{
- // Failsafe
- if ($@DD5_STATUS != 3 && $@DD5_STATUS != 5 && $@DD5_STATUS != 7)
- goto L_Return;
-
- // CD Initial failsafe
- if (!@dd5_timer)
- set @dd5_timer, 1-2147483647-1;
-
- // CD Failsafe
- if (@dd5_timer > 1 && gettimetick(0) < 1)
- set @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
- set @dd5_timer, if_then_else(sc_check(sc_raiseattackspeed0), gettimetick(0)+300, gettimetick(0)+600);
-
- // Calculate HIT and CRIT rate
- set @dd5_crit, (rand(10000) < CRIT);
- if (rand(400) > HIT && !@dd5_crit)
- goto L_Miss;
-
- // Calculate damage
- set @dd5_dmg, ATK1+BASE_ATK;
-
- // Strength Potion - DMG +50%
- if (sc_check(sc_raiseattackstrength))
- set @dd5_dmg, @dd5_dmg*15/10;
-
- // Boss defense
- set @dd5_dmg, @dd5_dmg*(11-$@DD5_STATUS)/9;
-
- // Consider criticals (no defense disregard, though)
- if (@dd5_crit)
- set @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!
- set $@DD5_HP, $@DD5_HP-@dd5_dmg;
- message strcharinfo(0), "Battle : Absorbed +"+@dd5_dmg+" HP";
- goto L_Return;
-
-L_Damage:
- // Apply the damage!
- set $@DD5_HP, $@DD5_HP-@dd5_dmg;
- set @dd5_score, @dd5_score+min(25, @dd5_dmg/50);
- set $@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";
- return;
-
-L_Slain:
- set @dd5_score, @dd5_score+100;
- set $@DD5_PTS, $@DD5_PTS+100;
- set 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!";
- return;
-
-L_Return:
- return;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Puppets
-099-5,52,35,0|script|Jande#0|426
-{
- message strcharinfo(0), "Jande : What are you waiting for?";
- end;
-OnInit:
- disablenpc strnpcinfo(0);
- end;
-}
-
-// Puppets
-099-5,47,34,0|script|Tal#0|427
-{
- message strcharinfo(0), "Tal : What are you waiting for?";
- end;
-OnInit:
- disablenpc strnpcinfo(0);
- end;
-}
-
-// Puppets
-099-5,49,35,0|script|Anon|425
-{
- message strcharinfo(0), "Anon : What are you waiting for?";
- end;
-OnInit:
- disablenpc strnpcinfo(0);
- end;
-}
-
-// Puppets
-099-5,51,33,0|script|Flying Ship|428
-{
- message strcharinfo(0), "WHAT. IN. NAME. OF. JANDE. IS. THAT. THING?!";
- end;
-OnInit:
- disablenpc strnpcinfo(0);
- end;
-}
-
-// Puppets
-099-5,51,33,0|script|Gema III|395
-{
- 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:
- set @dd5_cutscene, 1;
- // Stop rendering the map and Embark
- mapmask 1 | 2;
- music "epilogue.ogg";
- if (debug)
- addtimer 5000, "Gema III::OnDebugPrompt";
- if (!debug)
- addtimer 300, "Gema III::OnStart";
- close;
-
-OnStart:
- specialeffect2 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:
- set @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;
- set $@DD5_TALLY$, "";
- set #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:
- mes "[" + strcharinfo(0) + "]";
- mes "It is Gema III! How did they manage to bring the ship here?!";
- close;
-
-OnInit:
- disablenpc "Gema III";
- end;
-}
-/////////////////////////////////////////////////////
-// Puppets, timers for Stage 2
-099-5,50,49,0|script|Xakelbael the Dark#0|400
-{
- callfunc "FinalExamAttack";
- end;
-OnInit:
- disablenpc "Xakelbael the Dark#0";
- end;
-
-OnTimer50000:
- areatimer 0, "099-5", 20, 20, 75, 75, 10, "#TMWFinalExam::OnMTFourthFall";
- initnpctimer;
- npctalk "Xakelbael the Dark#0", "Fourth Fall!";
- end;
-OnEnable:
- initnpctimer;
- end;
-OnAdjustSweet:
- if ($@DD5_STATUS != 5)
- end;
- setnpctimer min(49000, getnpctimer(0)-rand(2500,5000));
- end;
-OnDisable:
- stopnpctimer;
- end;
-}
-
-// Puppets, the timer on this one is for Stage 1
-099-5,50,49,0|script|Zax De'Kagen#0|400
-{
- callfunc "FinalExamAttack";
- end;
-OnInit:
- disablenpc "Zax De'Kagen#0";
- end;
-
-OnTimer18000:
- if ($@DD5_STATUS != 3)
- end;
- enablenpc strnpcinfo(0);
- end;
-OnTimer24000:
- if ($@DD5_STATUS != 3)
- end;
- initnpctimer;
- disablenpc strnpcinfo(0);
- end;
-OnTimer90000:
- if ($@DD5_STATUS != 7)
- end;
- initnpctimer;
- npctalk "Zax De'Kagen#0", "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);
- 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;
-}
-