diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
commit | a7c45a192268da2601cef47a4cdba987ae2327ca (patch) | |
tree | c5fb5b97db109fe7106496dd96498c475881046b /npc/029-9 | |
download | serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2 serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip |
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/029-9')
-rw-r--r-- | npc/029-9/_import.txt | 5 | ||||
-rw-r--r-- | npc/029-9/_mobs.txt | 3 | ||||
-rw-r--r-- | npc/029-9/_warps.txt | 23 | ||||
-rw-r--r-- | npc/029-9/boss.txt | 555 |
4 files changed, 586 insertions, 0 deletions
diff --git a/npc/029-9/_import.txt b/npc/029-9/_import.txt new file mode 100644 index 0000000..f93728f --- /dev/null +++ b/npc/029-9/_import.txt @@ -0,0 +1,5 @@ +// Map 029-9: Woodland mining camp +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/029-9/_mobs.txt", +"npc/029-9/_warps.txt", +"npc/029-9/boss.txt", diff --git a/npc/029-9/_mobs.txt b/npc/029-9/_mobs.txt new file mode 100644 index 0000000..46f1c8d --- /dev/null +++ b/npc/029-9/_mobs.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 029-9: Woodland mining camp mobs +029-9,129,34,5,7 monster Mana Piou 1155,8,35000,270000 diff --git a/npc/029-9/_warps.txt b/npc/029-9/_warps.txt new file mode 100644 index 0000000..0cba23e --- /dev/null +++ b/npc/029-9/_warps.txt @@ -0,0 +1,23 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 029-9: Woodland mining camp warps +029-9,97,49,0 warp #029-9_97_49 5,0,029-8,174,78 +029-9,103,48,0 script #029-9_103_48 NPC_HIDDEN,1,0,{ + end; +OnTouch: + slide 136,40; end; +} +029-9,91,26,0 script #029-9_91_26 NPC_HIDDEN,1,0,{ + end; +OnTouch: + slide 34,24; end; +} +029-9,34,23,0 script #029-9_34_23 NPC_HIDDEN,1,0,{ + end; +OnTouch: + slide 90,25; end; +} +029-9,137,41,0 script #029-9_137_41 NPC_HIDDEN,1,0,{ + end; +OnTouch: + slide 102,47; end; +} diff --git a/npc/029-9/boss.txt b/npc/029-9/boss.txt new file mode 100644 index 0000000..86e27b6 --- /dev/null +++ b/npc/029-9/boss.txt @@ -0,0 +1,555 @@ +// TMW2 scripts. +// Author: +// Jesusalva +// Description: +// Fires of Steam: The Death of Andrei Sakar +/* ***************************************** +$@FIRESOFSTEAM_BOSS +0 = Off; 1 = Moubootaur summoning; 2 = Moubootaur summoned +$@FIRESOFSTEAM_DIFF +Level of difficulty setting (100/130/160/190/220) +***************************************** */ + +////////////////////////////////////////// +// Boss Room +029-9,96,22,0 script Book#FoS NPC_NO_SPRITE,{ + if (!is_staff() && strcharinfo(0) != $MOST_HEROIC$) end; + if ($@FIRESOFSTEAM_BOSS) end; + select + l("Ignore this book"), + l("Begin classic mode"), + rif(is_staff() && $FIRESOFSTEAM >= 10, l("Skip prologue")); + mes ""; + $@FIRESOFSTEAM_BOSS=(@menu-1); + if ($@FIRESOFSTEAM_BOSS == 0) close; + select + l("Easy Mode"), + rif($FIRESOFSTEAM >= 10, l("Crazy Mode")), + rif($FIRESOFSTEAM >= 10, l("Cadis Mode")), + rif($FIRESOFSTEAM >= 10, l("Crazy Cadis Ultimate Pandorica Mode")), + rif($FIRESOFSTEAM >= 10, l("Portable Apocalypse")); + mes ""; + $@FIRESOFSTEAM_DIFF=70+(@menu*30); + switch (@menu) { + case 1: .@d$="##2Easy"; break; + case 2: .@d$="##3Crazy"; break; + case 3: .@d$="##5Cadis"; break; + case 4: .@d$="##6Crazy Cadis Ultimate Pandorica"; break; + case 5: .@d$="##1Portable Apocalypse"; break; + default: .@d$="Unknown"; + } + mapannounce("029-9", "Difficulty Selected: ##B"+.@d$+"##b", 0); + changemusic("029-9", "mythica.ogg"); + closeclientdialog; + // Dispose of the GM + warp "029-8", 175, 80; + sleep(200); + // PC no longer attached + // Start the event + mapwarp("029-9", "029-9", 96, 41); + sleep(200); + .@c = getunits(BL_PC|BL_MER|BL_HOM, .@players, MAX_CYCLE_PC, "029-9"); + for (.@i = 0; .@i < .@c; .@i++) { + sc_start(SC_STUN, 18000, 1, 10000, + SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@players[.@i]); + } + sleep(100); + // Cleanup previous data (if any) + $@FOS_ISB=0; + $@FOS_MOB=0; + $@FOS_AND=0; + .Support1=0; + .Support2=0; + .Support3=0; + .Support4=0; + .Support5=0; + // Lockdown + disablenpc "#029-9_97_49"; // Exit + disablenpc "#029-9_103_48"; // To Storage + disablenpc "#029-9_91_26"; // To Moubootaur + disablenpc "#029-9_34_23"; // From Moubootaur + disablenpc "#029-9_137_41"; // From Storage + // Summon Andrei, and handle prologue skips + $@FOS_AND=monster("029-9", 96, 35, "Andrei Sakar", AndreiSakar, 1); + if ($@FIRESOFSTEAM_BOSS == 2) goto OnProlEnd; + // Spawn Isbamuth and his support + $@FOS_ISB=monster("029-9", 96, 32, "Isbamuth", Isbamuth, 1, "Book#FoS::OnProlEnd"); + .Support1=monster("029-9", 95, 31, "Hooded Assassin", HoodedAssassin, 1); + .Support2=monster("029-9", 97, 31, "Hooded Assassin", HoodedAssassin, 1); + .Support3=monster("029-9", 95, 27, "Assassin", Assassin, 1); + .Support4=monster("029-9", 96, 27, "Assassin", Assassin, 1); + .Support5=monster("029-9", 97, 27, "Assassin", Assassin, 1); + // Freeze everyone! + sc_start(SC_STUN, 18000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, $@FOS_AND); + sc_start(SC_STUN, 18000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, $@FOS_ISB); + sc_start(SC_STUN, 18000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .Support1); + sc_start(SC_STUN, 18000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .Support2); + sc_start(SC_STUN, 18000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .Support3); + sc_start(SC_STUN, 18000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .Support4); + sc_start(SC_STUN, 18000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .Support5); + // Boost Isbamuth stats + .@avg=$@FIRESOFSTEAM_DIFF; + // Reconfigure the monster + setunitdata($@FOS_ISB, UDT_LEVEL, .@avg); + setunitdata($@FOS_ISB, UDT_STR, 1+.@avg/2); + setunitdata($@FOS_ISB, UDT_AGI, 1+.@avg/2); + setunitdata($@FOS_ISB, UDT_VIT, 1+.@avg/2); + setunitdata($@FOS_ISB, UDT_INT, 1+.@avg/2); + setunitdata($@FOS_ISB, UDT_DEX, 1+.@avg/2); + setunitdata($@FOS_ISB, UDT_LUK, 1+.@avg/2); + setunitdata($@FOS_ISB, UDT_ADELAY, 1072); + setunitdata($@FOS_ISB, UDT_ATKRANGE, 4); + // Battle Status + setunitdata($@FOS_ISB, UDT_MAXHP, .@avg*700); + setunitdata($@FOS_ISB, UDT_HP, .@avg*700); + setunitdata($@FOS_ISB, UDT_ATKMIN, .@avg*6); + setunitdata($@FOS_ISB, UDT_ATKMAX, .@avg*8); + setunitdata($@FOS_ISB, UDT_DEF, 4+.@avg); + setunitdata($@FOS_ISB, UDT_MDEF, 1+.@avg); + setunitdata($@FOS_ISB, UDT_HIT, .@avg*12); // Advised: x18 + setunitdata($@FOS_ISB, UDT_FLEE, .@avg*4); // Advised: x5 + setunitdata($@FOS_ISB, UDT_CRIT, 20+.@avg); + // Reconfigure the AI + .@opt=getunitdata($@FOS_ISB, UDT_MODE); + // Disable looting + if (.@opt & MD_LOOTER) + .@opt=.@opt^MD_LOOTER; + // Add knockback immunity + .@opt=.@opt|MD_NOKNOCKBACK; + // Mark as boss + .@opt=.@opt|MD_BOSS; + // Mark as aggressive + .@opt=.@opt|MD_AGGRESSIVE; + .@opt=.@opt|MD_ANGRY; + // Make it crazy + .@opt=.@opt|MD_RANDOMTARGET; + setunitdata($@FOS_ISB, UDT_MODE, .@opt); + + // Begin Isbamuth's monologue + unittalk($@FOS_ISB, "You are too late! I did it!! Muahahaha!"); + sleep(1000); + unittalk(.Support1, "Yeah, you did it!"); + sleep(400); + unittalk(.Support2, "Yeah, you are the best!"); + sleep(600); + unittalk($@FOS_ISB, "Silence!"); + sleep(1000); + unittalk($@FOS_ISB, "You did well tracking me down... However the rite is almost complete."); + sleep(3000); + unittalk($@FOS_ISB, "The power of the Moubootaur will be mine..."); + sleep(2000); + unittalk($@FOS_ISB, "And you no longer can stop me!! Muahahahaha!"); + sleep(1000); + unittalk(.Support1, "Yeah, that's our boss!"); + sleep(600); + unittalk(.Support2, "Yeah, none is like boss!"); + sleep(400); + unittalk($@FOS_AND, "Your evil plans shall never prevail, Isbamuth!"); + sleep(2500); + unittalk($@FOS_AND, "Adventurers! I'll go ahead, you shall buy me time!"); + maptimer2("029-9", 200, "Book#FoS::OnMFAndreiMagic"); + sleep(500); + sc_end(SC_STUN, $@FOS_AND); + unitwalk($@FOS_AND, 96, 24); + sleep(1000); + unitwalk($@FOS_AND, 96, 24); + sleep(1000); + unittalk($@FOS_AND, "I'm sure Isbamuth will be no match for all of you!"); + unitwalk($@FOS_AND, 90, 26); + sleep(1500); + unitwarp($@FOS_AND, "029-9", 39, 21); + unittalk($@FOS_ISB, "Hahaha... YOU THINK YOU CAN DEFEAT ME??"); + sc_start(SC_STUN, INT_MAX, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, $@FOS_AND); + sleep(1000); + unittalk($@FOS_ISB, "We will see! Engarde!!"); + initnpctimer; + changemusic("029-9", "let_the_battles_begin.ogg"); + end; + +////////////// Prologue End ////////////// +OnProlEnd: + if (playerattached()) + getexp 200000, 50000; + changemusic("029-9", "steam.ogg"); + mapannounce("029-9", "##1##BA huge sound is heard from the basement.", 0); + $@FIRESOFSTEAM_BOSS=2; + enablenpc "#029-9_91_26"; // To Moubootaur + // Cleanup previous data (if any) + $@FOS_ISB=0; + $@FOS_MOB=0; + .Support1=0; + .Support2=0; + .Support3=0; + .Support4=0; + .Support5=0; + maptimer2("029-9", 10000, "Book#FoS::OnMFMark"); + maptimer2("029-9", 18000, "Book#FoS::OnMFScene"); + // Ensure Andrei Sakar is at his place and stunned + unitwarp($@FOS_AND, "029-9", 39, 21); + sc_start(SC_STUN, INT_MAX, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, $@FOS_AND); + // Bring on the Gemini Assassins + .Support1=monster("029-9", 38, 21, "Valia", Sagratha, 1); + .Support2=monster("029-9", 40, 21, "Luvia", Luvia, 1); + sc_start(SC_STUN, INT_MAX, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .Support1); + sc_start(SC_STUN, INT_MAX, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .Support2); + setunitdata($@FOS_AND, UDT_MAXHP, 999999); + setunitdata($@FOS_AND, UDT_HP, 999999); + setunitdata(.Support1, UDT_MAXHP, 999999); + setunitdata(.Support1, UDT_HP, 999999); + setunitdata(.Support2, UDT_MAXHP, 999999); + setunitdata(.Support2, UDT_HP, 999999); + sleep(18000+100); // Wait for cutscene to start + latebloomers + .@c = getunits(BL_PC|BL_MER|BL_HOM, .@players, MAX_CYCLE_PC, "029-9"); + for (.@i = 0; .@i < .@c; .@i++) { + sc_start(SC_STUN, 18000, 1, 10000, + SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@players[.@i]); + } + sleep(100); + ////////////////////////////////////////////////////////////// + unittalk(.Support1, "...I'm sorry!"); + sleep(1000); + unittalk(.Support2, "...But Isbamuth told us to kill you!"); + sleep(1000); + unittalk(.Support1, "...Die for us!"); + sleep(1000); + unitkill($@FOS_AND); // DEAD + $@FOS_AND=0; + maptimer2("029-9", 3000, "Book#FoS::OnMFShake"); + sleep(3200); // Dramatic Silence + mapannounce("029-9", "##1##BGRRRRRRRRR!!!!", 0); + sleep(800); + mapannounce("029-9", "##1##BHUMANS!!!!", 0); + sleep(2000); + unittalk(.Support2, "Sister, we should go."); + sleep(3000); + unittalk(.Support1, "...Yes, sister, let's go!"); + sleep(3000); + unitwarp(.Support1, "029-9", 130, 32); + unitwarp(.Support2, "029-9", 131, 32); + sleep(1000); // Dramatic Silence + unitkill(.Support1); + unitkill(.Support2); + $@FOS_MOB=monster("029-9", 39, 36, "Moubootaur (Sealed)", MobMoubootaur, 1, "Book#FoS::OnEventEnd"); + sc_start(SC_STUN, 31000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, $@FOS_MOB); + sleep(1000); // Dramatic Silence + unittalk($@FOS_MOB, "##1Who dares awake me from my slumber..."); + sleep(3000); + unittalk($@FOS_MOB, "##1It was just a few nights since I turned a nearby town in Mouboos for their insolence..."); + sleep(5000); + maptimer2("029-9", 2000, "Book#FoS::OnMFShake"); + sleep(2000); + unittalk($@FOS_MOB, "##1AND YOU DARE TO NOT LEARN YOUR LESSON?? %%e"); + sleep(2000); + unittalk($@FOS_MOB, "##1USELESS, UNWORTHY CREATURES!! %%e"); + sleep(6000); + unittalk($@FOS_MOB, "##1I SHALL TURN THIS WHOLE WORLD INTO MOUBOOS..."); + sleep(6000); + unittalk($@FOS_MOB, "##1THE PROPHECY... OF MY RETURN... IS FULFILLED AT LEAST!!"); + .@avg=$@FIRESOFSTEAM_DIFF*13/10; // Moubootaur: +30% bonus (+30~60 lvls) + // Reconfigure the monster (otherwise it is night immortal) + setunitdata($@FOS_MOB, UDT_LEVEL, .@avg); + setunitdata($@FOS_MOB, UDT_STR, 1+.@avg*3/4); + setunitdata($@FOS_MOB, UDT_AGI, 1+.@avg*3/4); + setunitdata($@FOS_MOB, UDT_VIT, 1+.@avg*3/4); + setunitdata($@FOS_MOB, UDT_INT, 1+.@avg*3/4); + setunitdata($@FOS_MOB, UDT_DEX, 1+.@avg*3/4); + setunitdata($@FOS_MOB, UDT_LUK, 1+.@avg*3/4); + setunitdata($@FOS_MOB, UDT_ADELAY, 1472); + setunitdata($@FOS_MOB, UDT_ATKRANGE, 4); + // Battle Status + setunitdata($@FOS_MOB, UDT_MAXHP, .@avg*1350); + setunitdata($@FOS_MOB, UDT_HP, .@avg*1350); + setunitdata($@FOS_MOB, UDT_ATKMIN, .@avg*6); + setunitdata($@FOS_MOB, UDT_ATKMAX, .@avg*8); + setunitdata($@FOS_MOB, UDT_DEF, 12+.@avg*5/3); + setunitdata($@FOS_MOB, UDT_MDEF, 1+.@avg); + setunitdata($@FOS_MOB, UDT_HIT, .@avg*18); // Advised: x18 + setunitdata($@FOS_MOB, UDT_FLEE, .@avg*4); // Advised: x5 + setunitdata($@FOS_MOB, UDT_CRIT, 60+.@avg*4/3); + // Reconfigure the AI + .@opt=getunitdata($@FOS_MOB, UDT_MODE); + // Disable looting + if (.@opt & MD_LOOTER) + .@opt=.@opt^MD_LOOTER; + // Add knockback immunity + .@opt=.@opt|MD_NOKNOCKBACK; + // Mark as boss + .@opt=.@opt|MD_BOSS; + // Mark as aggressive + .@opt=.@opt|MD_AGGRESSIVE; + .@opt=.@opt|MD_ANGRY; + // Make it more op + .@opt=.@opt|MD_DETECTOR; + .@opt=.@opt|MD_CASTSENSOR_CHASE; + .@opt=.@opt|MD_CASTSENSOR_IDLE; + .@opt=.@opt|MD_CHANGECHASE; + .@opt=.@opt|MD_CHANGETARGET_MELEE; + .@opt=.@opt|MD_CHANGETARGET_CHASE; + setunitdata($@FOS_MOB, UDT_MODE, .@opt); + sleep(1000); + mapannounce("029-9", "##1##BON YOUR MARKS...", 0); + sleep(2000); + mapannounce("029-9", "##1##B3...", 0); + sleep(1000); + mapannounce("029-9", "##1##B2...", 0); + sleep(1000); + mapannounce("029-9", "##1##B1...", 0); + sleep(1000); + mapannounce("029-9", "##1##BBEGIN!!", 0); + .Support3=monster("029-9", 25, 29, "Magic Commander", Moubi, 1); + .Support4=monster("029-9", 53, 29, "Army Commander", BloodyMouboo, 1); + .Support5=monster("029-9", 39, 45, "Mouboo Governor", AlphaMouboo, 1); + setunitdata(.Support3, UDT_MAXHP, .@avg*300); + setunitdata(.Support3, UDT_HP, .@avg*300); + setunitdata(.Support4, UDT_MAXHP, .@avg*300); + setunitdata(.Support4, UDT_HP, .@avg*300); + setunitdata(.Support5, UDT_MAXHP, .@avg*300); + setunitdata(.Support5, UDT_HP, .@avg*300); + setunitdata(.Support3, UDT_RACE, RC_Legendary); + setunitdata(.Support4, UDT_RACE, RC_Legendary); + setunitdata(.Support5, UDT_RACE, RC_Legendary); + initnpctimer; + changemusic("029-9", "Arabesque.ogg"); + end; + +////////////// Player's Victory ////////////// +OnEventEnd: + stopnpctimer; + changemusic("029-9", "Misty_Shrine.ogg"); + enablenpc "#029-9_97_49"; // Exit + enablenpc "#029-9_103_48"; // To Storage + enablenpc "#029-9_34_23"; // From Moubootaur + enablenpc "#029-9_137_41"; // From Storage + maptimer2("029-9", 10, "Book#FoS::OnMFSurvive"); + mapannounce("029-9", "Moubootaur : ##1##BThis is not the place...", 0); + sleep(2000); + mapannounce("029-9", "Moubootaur : ##1##BMy powers are weak here...", 0); + sleep(2000); + mapannounce("029-9", "Moubootaur : ##1##BHowever... I know where I must go.", 0); + sleep(3000); + mapannounce("029-9", "Moubootaur : ##1##BThe prophecy... LIVES!", 0); + sleep(3000); + // XXX Reward cycle XXX + // This can be slow, beware + .@c = getunits(BL_PC, .@players, MAX_CYCLE_PC); + for (.@i = 0; .@i < .@c; .@i++) { + attachrid(.@players[.@i]); + if ($FIRESOFSTEAM >= 10) { + getexp 50000+($@FIRESOFSTEAM_DIFF*10), 5000+$@FIRESOFSTEAM_DIFF; + } else { + getexp 1000000, 250000; + getitem StrangeCoin, 200; + Mobpt+=500000; + Zeny+=250000; + } + dispbottom l("Congratulations! You've received participation rewards due to the Moubootaur Death."); + detachrid(); + } + if ($FIRESOFSTEAM < 10) { + kamibroadcast("The Moubootaur has been awakened. The gears of destiny are on motion.", "Jesusalva"); + sleep(5000); + kamibroadcast("Great calamity shall soon befall upon this world.", "Jesusalva"); + sleep(5000); + kamibroadcast("But if we all fight together, we might have a chance!", "Saulc"); + sleep(5000); + kamibroadcast("At due time... The Secret of Mana will be revealed.", "Jesusalva"); + sleep(5000); + kamibroadcast("May the apocalypse begin: The revelation of this world!", "Jesusalva"); + kamibroadcast("MOUBOOTAUR LEGENDS, FIFTH ACT - THE WORLD'S CURSE"); + $FIRESOFSTEAM=10; + $GAME_STORYLINE=4; + $MANA_BLVL-=5; // Set level to 15~25 + $MANA_JLVL-=5; // Set job level to 10 + $MANA_BINT-=10; // Drop min. int for minimum magic + disablenpc "Andrei Sakar"; + setnpcdisplay("Andrei Sakar#FoS290", "Elora#FoS290", NPC_HUMAN_FEMALE_NOOB); + setnpcdisplay("Andrei Sakar#FoS298", "Elora#FoS298", NPC_HUMAN_FEMALE_NOOB); + disablenpc "Elora"; + } + $@FIRESOFSTEAM_BOSS=0; + $@FIRESOFSTEAM_DIFF=0; + end; + +////////////// Map Broadcast ////////////// +OnMFAndreiMagic: + .@stat=max(1, 5-((100-$@FIRESOFSTEAM_DIFF)/30)); + dispbottom col(l("Enemies stunned!"), 3); + dispbottom col(l("All Stats temporarily raised!"), 2); + dispbottom l("Andrei Sakar used magic: %s", b(l("Triumph of the Eternals"))); + sc_start(SC_INCALLSTATUS, .boostime, .@stat, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK); + end; + +OnMFMark: + dispbottom col(l("On your marks..."), 1); + end; + +OnMFScene: + if (!isin("029-9", 20, 20, 60, 50)) + warp "029-9", rand2(33,34), rand2(24,26); + end; + +OnMFShake: + sshake(); + closeclientdialog; + sleep2(1000); + sshake(); + sshake(); + closeclientdialog; + end; + +OnMFDispose: + if (ispcdead() && getq(General_Narrator) >= 20) warp("025-2", 100, 27); + end; + +OnMFSurvive: + dispbottom l("Mission accomplished. Well played!"); + getitem StrangeCoin, max(1, 1+(($@FIRESOFSTEAM_DIFF-100)/30)); + if (!MOUBOOTAUR_WINNER) + MOUBOOTAUR_WINNER=gettimetick(2); + specialeffect(FX_FANFARE, AREA, getcharid(3)); + end; + +////////////// Heartbeat ////////////// +OnTimer15000: + maptimer2("029-9", 10, "Book#FoS::OnMFDispose"); + sleep(30); + if (getmapusers("029-9") < 1) goto L_Defeat; + // Main cycle + if ($@FIRESOFSTEAM_BOSS == 1) { + monster("029-9", 102, 47, "Assassin", Assassin, 1); + } else if ($@FIRESOFSTEAM_BOSS == 2) { + // Handle Moubootaur Magic + // But only if .Support3 was defined (control variable) + if (!.Support3) {initnpctimer; end;} + // Spawn a fiend + .@m=monster("029-9", 39, 36, "Mouboo", Mouboo, 1); + setunitdata(.@m, UDT_RACE, RC_Legendary); + .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/80; + .@op=getunitdata(.@m, UDT_MODE); + .@op=.@op|MD_AGGRESSIVE; + setunitdata(.@m, UDT_MAXHP, .@hp); + setunitdata(.@m, UDT_HP, .@hp); + setunitdata(.@m, UDT_MODE, .@op); + // Select random magic from arsenal + .@r=rand2(16); + switch (.@r) { + case 1: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Bleeding", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_BLOODING, BL_PC, 1); + break; + case 2: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Blind", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_BLIND, BL_PC, 1); + break; + case 3: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Lag", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_CONFUSION, BL_PC, 1); + break; + case 4: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Curse", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_CURSE, BL_PC, 1); + break; + case 5: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Poison", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_POISON, BL_PC, 1); + break; + case 6: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Sleep", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_SLEEP, BL_PC, 1); + break; + case 7: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Deadly Poison", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_DPOISON, BL_PC, 1); + break; + case 8: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Chilling", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_COLD, BL_PC, 1); + break; + case 9: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Burning", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_BURNING, BL_PC, 1); + break; + case 10: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Fear", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_FEAR, BL_PC, 1); + break; + case 11: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Obliterate", 0); + rectharm($@FOS_MOB, 7, 7, rand2(700, 900), HARM_MISC, Ele_Holy, "filter_always", BL_PC | BL_MER | BL_HOM); + break; + case 12: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Disarm Homun", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_STUN, BL_HOM, 1); + break; + case 13: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Exterminate Lesserform", 0); + rectharm($@FOS_MOB, 7, 7, rand2(800, 1400), HARM_MISC, Ele_Holy, "filter_always", BL_MER | BL_HOM); + break; + case 14: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Summon Reinforcement", 0); + for (.@i=0;.@i <= rand2(4);.@i++) { + .@m=monster("029-9", rand2(35,43), rand2(35,38), "Reinforcement", + any(AlphaMouboo, Moubi, BloodyMouboo, Moubi), 1); + setunitdata(.@m, UDT_RACE, RC_Legendary); + .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/60; + setunitdata(.@m, UDT_MAXHP, .@hp); + setunitdata(.@m, UDT_HP, .@hp); + } + break; + case 15: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Wizcat", 0); + for (.@i=0;.@i <= 2+rand2(7);.@i++) { + .@m=monster("029-9", rand2(35,43), rand2(35,38), + "Reinforcement", BlackCat, 1); + setunitdata(.@m, UDT_RACE, RC_Legendary); + .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/70; + setunitdata(.@m, UDT_MAXHP, .@hp); + setunitdata(.@m, UDT_HP, .@hp); + } + break; + case 16: + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Nuke", 0); + rectharm($@FOS_MOB, 14, 14, rand2(450, 750), HARM_MISC, Ele_Holy, "filter_always", BL_PC | BL_MER | BL_HOM); + break; + default: // case 0 + mapannounce("029-9", "Moubootaur : ##BAncient Magic: Seal", 0); + areasc2("029-9", 40, 35, 20, 15000, SC_SILENCE, BL_PC, 1); + break; + } + sleep(rand2(45000)); // Wait a bit longer between magic (random) + } + initnpctimer; + end; + +////////////// Player's Defeat ////////////// +OnDefeat: +L_Defeat: + $@FIRESOFSTEAM_BOSS=0; + $@FIRESOFSTEAM_DIFF=0; + $@FOS_ISB=0; + $@FOS_MOB=0; + $@FOS_AND=0; + .Support1=0; + .Support2=0; + .Support3=0; + .Support4=0; + .Support5=0; + killmonsterall("029-9"); + kamibroadcast("The players were defeated at Fires of Steam Showdown.", "Fires of Steam"); + enablenpc "#029-9_97_49"; // Exit + enablenpc "#029-9_91_26"; // To Moubootaur + enablenpc "#029-9_103_48"; // To Storage + enablenpc "#029-9_34_23"; // From Moubootaur + enablenpc "#029-9_137_41"; // From Storage + stopnpctimer; + end; + +OnInit: + .boostime = 900000; + .subitime = 47000; + .distance = 5; + .sex = G_OTHER; + end; +} + + |