diff options
29 files changed, 1277 insertions, 19 deletions
diff --git a/world/map/data/099-5.wlk b/world/map/data/099-5.wlk Binary files differnew file mode 100644 index 00000000..01fe6f91 --- /dev/null +++ b/world/map/data/099-5.wlk diff --git a/world/map/data/099-6.wlk b/world/map/data/099-6.wlk Binary files differnew file mode 100644 index 00000000..e9acd9ea --- /dev/null +++ b/world/map/data/099-6.wlk diff --git a/world/map/data/099-7.wlk b/world/map/data/099-7.wlk Binary files differnew file mode 100644 index 00000000..5b29001f --- /dev/null +++ b/world/map/data/099-7.wlk diff --git a/world/map/data/resnametable.txt b/world/map/data/resnametable.txt index 78b6ccda..c87094c9 100644 --- a/world/map/data/resnametable.txt +++ b/world/map/data/resnametable.txt @@ -122,4 +122,7 @@ 099-2#099-2.wlk# 099-3#099-3.wlk# 099-4#099-4.wlk# +099-5#099-5.wlk# +099-6#099-6.wlk# +099-7#099-7.wlk# botcheck#botcheck.wlk# diff --git a/world/map/db/const-quest.txt b/world/map/db/const-quest.txt index 128fbfa9..0ad92636 100644 --- a/world/map/db/const-quest.txt +++ b/world/map/db/const-quest.txt @@ -113,20 +113,22 @@ MFLAG_ELANORE_OMAR 32768 // Told Omar about Elanore's involvement. MFLAG_KNOWS_UNFOCUS_RECIPE 65536 // Has been told about unfocus by Luca. // Flags set in the FLAGS variable: -FLAG_HAS_BOWLER_BURNSDAY 1 // every year's poem at burns day, shannon gives you a bowler hat -FLAG_OPENED_UNDERGROUND 2 // this flag is a replacement for variable Open_Underground_Palace_Barrier, which was used only as bool -FLAG_GOT_NAEM_GLOVES 4 // this replaces Naem_Quest_Done, which was used as a bool variable -FLAG_GOT_GRADUATIONCAP 8 // this is a bit which was to be found in Tut_var second bit -FLAG_TOWEL_HELPED 16 // gave the towel npc the stuff he wants -FLAG_TOWEL_COMPLETED 32 // got the towel from the towel npc -FLAG_ANDRA_HELPED 64 // Knows Andra and agreed to help her -FLAG_ROSSI_COMPLETED 128 // Completed the Rossi Quest -FLAG_TUTORIAL_DONE 256 // player completed tutorial (or entered the tutorial area from outside after it was added) -FLAG_SNOWMAN 512 // player gave candy to the snowman -FLAG_SANTAS_HELPER 1024 // player gave presents to Santa's helper -FLAG_HURNSMINE_CHEST 2048 // player opened the chest with the short sword in Hurnscald mines -FLAG_GOT_BEANIEHAT 4096 // player got Beanie Copter Hat from Milly -FLAG_DECLINED_BEANIEHAT 8192 // player declined Beanie Copter Hat from Milly +FLAG_HAS_BOWLER_BURNSDAY 1 // every year's poem at burns day, shannon gives you a bowler hat +FLAG_OPENED_UNDERGROUND 2 // this flag is a replacement for variable Open_Underground_Palace_Barrier, which was used only as bool +FLAG_GOT_NAEM_GLOVES 4 // this replaces Naem_Quest_Done, which was used as a bool variable +FLAG_GOT_GRADUATIONCAP 8 // this is a bit which was to be found in Tut_var second bit +FLAG_TOWEL_HELPED 16 // gave the towel npc the stuff he wants +FLAG_TOWEL_COMPLETED 32 // got the towel from the towel npc +FLAG_ANDRA_HELPED 64 // Knows Andra and agreed to help her +FLAG_ROSSI_COMPLETED 128 // Completed the Rossi Quest +FLAG_TUTORIAL_DONE 256 // player completed tutorial (or entered the tutorial area from outside after it was added) +FLAG_SNOWMAN 512 // player gave candy to the snowman +FLAG_SANTAS_HELPER 1024 // player gave presents to Santa's helper +FLAG_HURNSMINE_CHEST 2048 // player opened the chest with the short sword in Hurnscald mines +FLAG_GOT_BEANIEHAT 4096 // player got Beanie Copter Hat from Milly +FLAG_DECLINED_BEANIEHAT 8192 // player declined Beanie Copter Hat from Milly +FLAG_KESHLAM_FLAWEDLENS 16384 // player got the Flawed Lens from Keshlam's Chest +FLAG_KESHLAM_RAREDROP 32768 // player got the super rare from Keshlam's Chest // Flags for the battle caves. BATTLE_CAVE1 1 diff --git a/world/map/db/item_db_trinket.txt b/world/map/db/item_db_trinket.txt index 2b14de04..1ce7db96 100644 --- a/world/map/db/item_db_trinket.txt +++ b/world/map/db/item_db_trinket.txt @@ -20,3 +20,4 @@ 4014, SimpleRing, 5, 100000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {} 677, HeartNecklace, 5, 2500, 0, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {} 5252, GuardianWings, 5, 0, 0, 1, 0, 0, 0, 0, 0, 2, 16, 0, 0, 0, {}, {} +5253, MageRing, 5, 0, 0, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bInt, 1;} diff --git a/world/map/db/mob_db_over_100.txt b/world/map/db/mob_db_over_100.txt index 4d786a66..5a2ff015 100644 --- a/world/map/db/mob_db_over_100.txt +++ b/world/map/db/mob_db_over_100.txt @@ -8,8 +8,8 @@ 1022, JackO, JackO, 175, 10000, 0, 18130, 1241, 2, 100, 500, 40, 20, 105, 40, 85, 75, 105, 95, 1, 1, 1, 0, 20, 133, 250, 1500, 672, 480, 617, 300, 622, 400, 624, 400, 620, 400, 615, 300, 1203, 400, 1198, 10000, 616, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1023, FireSkull, FireSkull, 170, 5000, 0, 0, 721, 2, 75, 175, 35, 15, 40, 30, 30, 30, 35, 70, 1, 1, 1, 3, 23, 175, 600, 1600, 672, 480, 631, 1000, 701, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1024, PoisonSkull, PoisonSkull, 170, 5000, 0, 0, 721, 2, 75, 175, 35, 15, 40, 30, 30, 30, 35, 70, 1, 1, 1, 3, 25, 175, 600, 1600, 672, 480, 631, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 -1026, MountainSnake, MountainSnake, 130, 900, 0, 0, 63, 1, 80, 125, 4, 6, 20, 40, 10, 10, 35, 45, 1, 1, 1, 0, 20, 133, 1000, 1500, 672, 480, 532, 20, 641, 350, 715, 400, 715, 400, 711, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30 -1034, GrassSnake, GrassSnake, 140, 1000, 0, 0, 103, 1, 80, 120, 2, 10, 20, 40, 10, 10, 40, 50, 1, 1, 1, 0, 20, 133, 500, 1100, 672, 480, 716, 400, 716, 400, 712, 500, 676, 500, 660, 1600, 641, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40 +1026, MountainSnake, MountainSnake, 130, 900, 0, 1024, 63, 1, 80, 125, 4, 6, 20, 40, 10, 10, 35, 45, 1, 1, 1, 0, 20, 133, 1000, 1500, 672, 480, 532, 20, 641, 350, 715, 400, 715, 400, 711, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30 +1034, GrassSnake, GrassSnake, 140, 1000, 0, 1254, 103, 1, 80, 120, 2, 10, 20, 40, 10, 10, 40, 50, 1, 1, 1, 0, 20, 133, 500, 1100, 672, 480, 716, 400, 716, 400, 712, 500, 676, 500, 660, 1600, 641, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40 1036, Zombie, Zombie, 110, 12000, 0, 0, 1393, 2, 275, 355, 20, 15, 30, 15, 30, 3, 60, 40, 1, 1, 1, 0, 29, 133, 480, 1872, 672, 900, 631, 1000, 777, 700, 778, 500, 779, 200, 780, 150, 1198, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1042, Spectre, Spectre, 140, 6500, 0, 3978, 359, 3, 160, 220, 40, 0, 35, 70, 22, 15, 20, 70, 1, 1, 1, 0, 49, 137, 650, 1700, 800, 500, 773, 1000, 703, 150, 703, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20 1045, Fallen, Fallen, 120, 10000, 0, 7812, 1663, 2, 180, 430, 5, 20, 40, 3, 25, 5, 80, 45, 1, 1, 1, 0, 49, 133, 300, 1200, 672, 300, 775, 210, 775, 210, 776, 300, 631, 1000, 636, 3, 658, 2, 532, 35, 778, 500, 1198, 500, 0, 0, 0, 0, 0, 0, 0, 0, 4, 50 @@ -45,9 +45,11 @@ 1139, Virus, Virus, 170, 5000, 0, 0, 721, 6, 45, 75, 37, 12, 30, 30, 20, 20, 25, 60, 1, 1, 1, 3, 25, 175, 600, 1872, 672, 480, 787, 500, 743, 1100, 5236, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 1140, Tengu, Tengu, 180, 24000, 280, 45000, 5000, 2, 180, 224, 67, 9, 31, 22, 90, 97, 255, 95, 31, 30, 1, 0, 69, 181, 310, 1200, 672, 50, 649, 2, 4024, 300, 862, 800, 4005, 25, 1227, 15, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1141, Sasquatch, Sasquatch, 180, 24000, 280, 45000, 5000, 1, 420, 444, 12, 27, 31, 22, 90, 97, 255, 95, 31, 30, 1, 0, 69, 181, 310, 1200, 672, 50, 653, 2, 763, 500, 862, 800, 640, 1000, 1227, 15, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1142, Kage, ZaxDeKagen, 200, 29999, 280, 999999, 99999, 9, 90, 124, 74, 100, 199, 2, 199, 197, 255, 95, 31, 30, 1, 0, 69, 181, 210, 672, 672, 50, 760, 10000, 666, 10000, 1244, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1142, Kage, ZaxDeKagen, 200, 29999, 280, 999999, 99999, 9, 90, 124, 74, 100, 199, 2, 199, 197, 255, 175, 31, 30, 1, 0, 69, 181, 210, 672, 672, 50, 668, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1143, ManaSlayer, ManaSlayer, 180, 24000, 280, 42000, 5000, 2, 260, 274, 22, 67, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 650, 2, 828, 2400, 1227, 15, 4007, 35, 4029, 10, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1144, Dragon, GreatDragon, 250, 29999, 280, 1, 1, 3, 60, 90, 67, 67, 199, 2, 199, 197, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 759, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1145, KageGolem, KageGolem, 180, 29999, 280, 150000, 15000, 6, 140, 174, 72, 55, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 410, 1000, 672, 50, 5251, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1145, KageGolem, KageGolem, 180, 29999, 280, 150000, 15000, 6, 140, 174, 72, 55, 31, 22, 90, 127, 255, 125, 31, 30, 1, 0, 69, 181, 410, 1000, 672, 50, 5251, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1146, Flashmob, Flashmob, 181, 27000, 280, 72000, 5000, 1, 40, 60, 57, 57, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 160, 600, 672, 50, 649, 5, 650, 5, 653, 5, 1227, 35, 509, 10000, 1257, 2, 759, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1147, Koyntety, Koyntety, 181, 27000, 280, 72000, 5000, 4, 220, 240, 52, 52, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 240, 1400, 672, 50, 649, 5, 650, 5, 653, 5, 1227, 35, 509, 10000, 1257, 2, 759, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1147, Koyntety, Koyntety, 181, 27000, 280, 72000, 5000, 4, 220, 240, 52, 52, 31, 22, 90, 127, 255, 105, 31, 30, 1, 0, 69, 181, 240, 1400, 672, 50, 649, 5, 650, 5, 653, 5, 1227, 35, 509, 10000, 1257, 2, 759, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1148, DoomGolem, DoomGolem, 180, 22000, 280, 65000, 2000, 3, 160, 180, 60, 30, 31, 22, 90, 127, 255, 105, 31, 30, 1, 0, 69, 181, 320, 1000, 672, 50, 5253, 4, 666, 30, 537, 400, 779, 150, 780, 150, 777, 70, 1198, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1149, Enchanter, Enchanter, 181, 19000, 280, 55000, 2000, 8, 140, 180, 30, 60, 31, 22, 90, 127, 255, 105, 31, 30, 1, 0, 69, 181, 240, 800, 672, 50, 1227, 2, 666, 30, 537, 400, 779, 90, 780, 80, 777, 70, 1198, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 diff --git a/world/map/news.d/85-news-2020-05-09.txt b/world/map/news.d/85-news-2020-05-09.txt new file mode 100644 index 00000000..e576eea2 --- /dev/null +++ b/world/map/news.d/85-news-2020-05-09.txt @@ -0,0 +1,39 @@ +{title:Act 4 - The Great War} +{date:2020-05-09} + + +{b}Crypt Expansion{/b} + +Although it was not the planned one, the crypt received a special expansion, +with a special theme from Doomsday Event. + +It includes a new rare item for mages. The one who cries at crypt, shall give +you hints, but only if you dare, to at multiple boss glare. + +(In other words, you must have a certain amount of Boss Points to unlock this +quest). + +{b}Doomsday Event - Tormenta shows up{/b} + +Seldomly, at 09:00 sieges, Tormenta will show up at her usual place. +No need to force yourself to wake up this late, as she'll not be there always. + +{b}Doomsday Event - The Great War{/b} + +Following the events from Act 2, the foreigner +invader assembles a bigger army and prepares to move +against Hurnscald. + +Even the most magicless person should be able to sense +it arriving at Hurnscald Mines Entrance, ready to take +over The Mana World. + +Read details on {link:https://forums.themanaworld.org/viewtopic.php?p=160290#p160290} + +{b}Act 4{/b} + +This act happens at the same time as Act 3. + +Read details on {link:https://forums.themanaworld.org/viewtopic.php?p=160343#p160343} + +{author:Jesusalva} diff --git a/world/map/npc/026-2/cerhan.txt b/world/map/npc/026-2/cerhan.txt index 3104e34f..64cc723f 100644 --- a/world/map/npc/026-2/cerhan.txt +++ b/world/map/npc/026-2/cerhan.txt @@ -24,6 +24,21 @@ L_Story: L_GoodLuckWith: mes "[Cerhan]"; mes "\"If you're interested in weapons and armor, you may want to come back later.\""; + if (countitem("SandCutter") > 0) + menu + "[Leave]",L_Close, + "Actually, I exchanged my Mylarin Dust with a bunny girl.", L_SandCutter; + close; + +L_SandCutter: + mes "[Cerhan]"; + mes "\"What?! Are you mad?! Do you know how many night desert warriors the bunny girl, Ashley, even killed?!\""; + next; + mes "[Cerhan]"; + mes "\"Gosh, I fear for those whom wrong her. I hope you did not provoke her while doing this exchange.\""; + next; + mes "[Cerhan]"; + mes "\"Ugh... I really should finishing settin up my shop, but... I'm so lazy.\""; goto L_Close; L_Mylarin: diff --git a/world/map/npc/027-2/alacrius.txt b/world/map/npc/027-2/alacrius.txt index d05f9b54..3196e43e 100644 --- a/world/map/npc/027-2/alacrius.txt +++ b/world/map/npc/027-2/alacrius.txt @@ -9,5 +9,121 @@ mes "\"A very long time ago, I figured a way to cheat death and the limits of time and space. You may think it is evil, but I did it because of true love... \""; next; mes "\"The reaper kidnapped my beloved wife, and took her to the underworld. I had to find a way to stop him, and as time went by, I became what you can see now... But if you dare to cheat death, time and space you'll have to pay a high price... \""; + // Doomsday related + if (BOSS_POINTS >= 300) goto L_Quest; + close; + +L_Quest: + // Rand() is probably not the best way to do that. + if (!#CRYPT_PASSWORD) + set #CRYPT_PASSWORD, rand(4095); + next; + mes "##1--------- The Alacrius Riddle"; + mes ""; + mes "A few spells in the right place and order,"; + mes "will break Keshlam's magical border,"; + mes "but be very aware of a warder."; + next; + mes "Also know, my oh so dear friends,"; + mes "the clues differs for whoever attends."; + mes "If one fails or succeeds depends,"; + mes "on how close attention one spends!"; + next; + mes "##9 Explore the Crypt, and find the clues to solve Alacrius' Riddle."; + mes "##9 All clues, hints, and riddles you need to solve this one,"; + mes "##9 are inside this crypt. If a clue, hint, or riddle, doesn't make"; + mes "##9 immediate sense, together, they shall lend you their full meaning;"; + mes "##9 And if you're in despair, find the Lord words, they will guide your way."; + close; +} + +// Some more hints +027-2,30,78,0|script|#AlacriusClue1|400 +{ + if (!#CRYPT_PASSWORD) + goto L_Empty; + mes "For those whom search to the answers of Alacrius' Riddles."; + next; + mes "Made with stone, near Krukan's room,"; + mes "lies a forgotten chamber tomb,"; + mes "for those who fell victim to his doom."; + mes ""; + mes "Candles will part the left from the right"; + mes "and the stone sarcophagi hold a clue to the rite."; + mes "But only the ones that are still sealed tight,"; + mes "might tell you which candles you have to light."; + mes ""; + mes "And watch out for the five heroes,"; + mes "For the lord's words of wisdom,"; + mes "They carefully guard."; + close; + +L_Empty: + mes "The book pages are blank!"; close; } + +027-2,41,78,0|script|#AlacriusClue2|400 +{ + if (!#CRYPT_PASSWORD) + goto L_Empty; + mes "For those whom search to the answers of Alacrius' Riddles."; + next; + mes "Not far from Razha's hall,"; + mes "statues of stone adorn the wall,"; + mes "to honor the heroes who caused him to fall."; + mes ""; + mes "Only the ones in unfractured light,"; + mes "might hold a clue to the unholy rite,"; + mes "and tell you which candles you have to light,"; + mes "while others will tell you just lies outright."; + close; + +L_Empty: + mes "The book pages are blank!"; + close; +} + + +027-3,59,22,0|script|#AlacriusClue3|400 +{ + if (!#CRYPT_PASSWORD) + goto L_Empty; + mes "For those whom search to the answers of Alacrius' Riddles."; + next; + mes "For those who don't get astray,"; + mes "Five sealed gates block the way,"; + mes "to Terogan's vault of foul play."; + mes ""; + mes "A cite on their left or right"; + mes "holds some clues to the abysmal rite,"; + mes "that opens the path to an unspeakable site."; + mes "Do you know which candles to light?"; + close; + +L_Empty: + mes "The book pages are blank!"; + close; +} + +027-4,108,87,0|script|#AlacriusClue4|400 +{ + if (!#CRYPT_PASSWORD) + goto L_Empty; + mes "For those whom search to the answers of Alacrius' Riddles."; + next; + mes "I have nothing to say,"; + mes "But this room has no key."; + mes ""; + mes "Brute force will not get you in,"; + mes "And you don't have to, to the riddle solve."; + mes ""; + mes "But three books shall give you answers,"; + mes "Can you find all of them?"; + close; + +L_Empty: + mes "The book pages are blank!"; + close; +} + diff --git a/world/map/npc/099-5/_import.txt b/world/map/npc/099-5/_import.txt new file mode 100644 index 00000000..ba38b31c --- /dev/null +++ b/world/map/npc/099-5/_import.txt @@ -0,0 +1,6 @@ +// Map 099-5: Nu'Ram-Battle +// This file is generated automatically. All manually added changes will be removed when running the Converter. +map: 099-5 +npc: npc/099-5/_mobs.txt +npc: npc/099-5/_nodes.txt +npc: npc/099-5/_warps.txt diff --git a/world/map/npc/099-5/_mobs.txt b/world/map/npc/099-5/_mobs.txt new file mode 100644 index 00000000..0381696e --- /dev/null +++ b/world/map/npc/099-5/_mobs.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle mobs + diff --git a/world/map/npc/099-5/_nodes.txt b/world/map/npc/099-5/_nodes.txt new file mode 100644 index 00000000..22261608 --- /dev/null +++ b/world/map/npc/099-5/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle nodes + +// (no nodes) diff --git a/world/map/npc/099-5/_warps.txt b/world/map/npc/099-5/_warps.txt new file mode 100644 index 00000000..703b3ca9 --- /dev/null +++ b/world/map/npc/099-5/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle warps + diff --git a/world/map/npc/099-6/_import.txt b/world/map/npc/099-6/_import.txt new file mode 100644 index 00000000..0230b16d --- /dev/null +++ b/world/map/npc/099-6/_import.txt @@ -0,0 +1,6 @@ +// Map 099-6: Nu'Ram-Battle +// This file is generated automatically. All manually added changes will be removed when running the Converter. +map: 099-6 +npc: npc/099-6/_mobs.txt +npc: npc/099-6/_nodes.txt +npc: npc/099-6/_warps.txt diff --git a/world/map/npc/099-6/_mobs.txt b/world/map/npc/099-6/_mobs.txt new file mode 100644 index 00000000..0381696e --- /dev/null +++ b/world/map/npc/099-6/_mobs.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle mobs + diff --git a/world/map/npc/099-6/_nodes.txt b/world/map/npc/099-6/_nodes.txt new file mode 100644 index 00000000..22261608 --- /dev/null +++ b/world/map/npc/099-6/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle nodes + +// (no nodes) diff --git a/world/map/npc/099-6/_warps.txt b/world/map/npc/099-6/_warps.txt new file mode 100644 index 00000000..703b3ca9 --- /dev/null +++ b/world/map/npc/099-6/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle warps + diff --git a/world/map/npc/099-7/_import.txt b/world/map/npc/099-7/_import.txt new file mode 100644 index 00000000..5e748a47 --- /dev/null +++ b/world/map/npc/099-7/_import.txt @@ -0,0 +1,7 @@ +// Map 099-7: Nu'Ram-Battle +// This file is generated automatically. All manually added changes will be removed when running the Converter. +map: 099-7 +npc: npc/099-7/_mobs.txt +npc: npc/099-7/_nodes.txt +npc: npc/099-7/_warps.txt +npc: npc/099-7/boss.txt diff --git a/world/map/npc/099-7/_mobs.txt b/world/map/npc/099-7/_mobs.txt new file mode 100644 index 00000000..0381696e --- /dev/null +++ b/world/map/npc/099-7/_mobs.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle mobs + diff --git a/world/map/npc/099-7/_nodes.txt b/world/map/npc/099-7/_nodes.txt new file mode 100644 index 00000000..22261608 --- /dev/null +++ b/world/map/npc/099-7/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle nodes + +// (no nodes) diff --git a/world/map/npc/099-7/_warps.txt b/world/map/npc/099-7/_warps.txt new file mode 100644 index 00000000..703b3ca9 --- /dev/null +++ b/world/map/npc/099-7/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nu'Ram-Battle warps + diff --git a/world/map/npc/099-7/boss.txt b/world/map/npc/099-7/boss.txt new file mode 100644 index 00000000..9ecb3ad6 --- /dev/null +++ b/world/map/npc/099-7/boss.txt @@ -0,0 +1,722 @@ +// This script controls the Keshlam Swamps +// Made for Doomsday Event - The 070-3 and original quests were lost due this + +027-4,105,61,0|script|#KeshlamClue701|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "In memory of the left handed singer"; + if (#CRYPT_PASSWORD & 1) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At south a bright sparks."; + close; + +L_Off: + mes "A reading says: At northeast a bright sparks."; + close; +} + +027-4,91,61,0|script|#KeshlamClue702|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "In memory of the left handed lone warrior"; + if (#CRYPT_PASSWORD & 1) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At southeast a bright sparks."; + close; +} + +027-4,99,61,0|script|#KeshlamClue703|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "In memory of the left handed sailor"; + if (#CRYPT_PASSWORD & 1) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At northwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At south a bright sparks."; + close; +} + +027-4,121,61,0|script|#KeshlamClue704|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "In memory of the left handed gargoyle"; + if (#CRYPT_PASSWORD & 2) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At southeast a bright sparks."; + close; +} + + + +027-3,105,88,0|script|#KeshlamClue705|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 4) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At northwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At south a bright sparks."; + close; +} + +027-3,111,88,0|script|#KeshlamClue706|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 4) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At northeast a bright sparks."; + close; + +L_Off: + mes "A reading says: At southwest a bright sparks."; + close; +} + + + + +027-3,105,83,0|script|#KeshlamClue707|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 4) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At north a bright sparks."; + close; + +L_Off: + mes "A reading says: At west a bright sparks."; + close; +} + +027-3,111,83,0|script|#KeshlamClue708|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 8) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At east a bright sparks."; + close; + +L_Off: + mes "A reading says: At north a bright sparks."; + close; +} + + + +027-3,105,78,0|script|#KeshlamClue709|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 8) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southeast a bright sparks."; + close; + +L_Off: + mes "A reading says: At northwest a bright sparks."; + close; +} + +027-3,111,78,0|script|#KeshlamClue710|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 8) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At northeast a bright sparks."; + close; + +L_Off: + mes "A reading says: At southwest a bright sparks."; + close; +} + + + +027-3,105,73,0|script|#KeshlamClue711|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 8) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At north a bright sparks."; + close; + +L_Off: + mes "A reading says: At west a bright sparks."; + close; +} + +027-3,111,73,0|script|#KeshlamClue712|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 16) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At east a bright sparks."; + close; + +L_Off: + mes "A reading says: At north a bright sparks."; + close; +} + + + +027-3,106,59,0|script|#KeshlamClue713|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 16) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southeast a bright sparks."; + close; + +L_Off: + mes "A reading says: At northwest a bright sparks."; + close; +} + +027-3,111,59,0|script|#KeshlamClue714|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 16) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At south a bright sparks."; + close; + +L_Off: + mes "A reading says: At northeast a bright sparks."; + close; +} + + + +027-3,106,54,0|script|#KeshlamClue715|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 32) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At southeast a bright sparks."; + close; +} + +027-3,111,54,0|script|#KeshlamClue716|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 32) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At south a bright sparks."; + close; + +L_Off: + mes "A reading says: At northeast a bright sparks."; + close; +} + +/////////////////////////////////////////////////////////////////////////////// +////// Second Wing +027-4,111,61,0|script|#KeshlamClue750|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "In memory of the right handed sailor"; + if (#CRYPT_PASSWORD & 64) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At southeast a bright sparks."; + close; +} + +027-4,108,61,0|script|#KeshlamClue751|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "In memory of the right handed duo"; + if (#CRYPT_PASSWORD & 64) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At south a bright sparks."; + close; + +L_Off: + mes "A reading says: At northeast a bright sparks."; + close; +} + +027-4,115,61,0|script|#KeshlamClue752|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "In memory of the right handed Kage"; + if (#CRYPT_PASSWORD & 128) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At northwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At south a bright sparks."; + close; +} + +027-4,119,61,0|script|#KeshlamClue753|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "In memory of the right handed lone warrior"; + if (#CRYPT_PASSWORD & 128) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At southeast a bright sparks."; + close; +} + + + +027-3,118,88,0|script|#KeshlamClue754|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 256) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At northwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At south a bright sparks."; + close; +} + +027-3,124,88,0|script|#KeshlamClue755|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 256) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At northeast a bright sparks."; + close; + +L_Off: + mes "A reading says: At southwest a bright sparks."; + close; +} + + + +027-3,118,83,0|script|#KeshlamClue756|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 256) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At north a bright sparks."; + close; + +L_Off: + mes "A reading says: At west a bright sparks."; + close; +} + +027-3,124,83,0|script|#KeshlamClue757|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 256) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At east a bright sparks."; + close; + +L_Off: + mes "A reading says: At north a bright sparks."; + close; +} + + + +027-3,118,78,0|script|#KeshlamClue758|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 512) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At north a bright sparks."; + close; + +L_Off: + mes "A reading says: At west a bright sparks."; + close; +} + +027-3,124,78,0|script|#KeshlamClue759|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 512) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At east a bright sparks."; + close; + +L_Off: + mes "A reading says: At north a bright sparks."; + close; +} + + + +027-3,118,73,0|script|#KeshlamClue760|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 512) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At northeast a bright sparks."; + close; + +L_Off: + mes "A reading says: At southwest a bright sparks."; + close; +} + +027-3,124,73,0|script|#KeshlamClue761|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 512) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At south a bright sparks."; + close; + +L_Off: + mes "A reading says: At northeast a bright sparks."; + close; +} + + + +027-3,117,59,0|script|#KeshlamClue762|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 1024) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At south a bright sparks."; + close; + +L_Off: + mes "A reading says: At northeast a bright sparks."; + close; +} + +027-3,122,59,0|script|#KeshlamClue763|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 1024) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southeast a bright sparks."; + close; + +L_Off: + mes "A reading says: At northwest a bright sparks."; + close; +} + + + +027-3,117,54,0|script|#KeshlamClue764|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 2048) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At south a bright sparks."; + close; + +L_Off: + mes "A reading says: At northeast a bright sparks."; + close; +} + +027-3,122,54,0|script|#KeshlamClue765|400 +{ + if (!#CRYPT_PASSWORD) end; + if (#CRYPT_PASSWORD & 2048) goto L_On; + goto L_Off; + +L_On: + mes "A reading says: At southwest a bright sparks."; + close; + +L_Off: + mes "A reading says: At southeast a bright sparks."; + close; +} + +/////////////////////////////////////////////////////////////////////////////// +////// Gates +027-5,68,94,0|script|#KeshlamClue791|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "There's an inscription on the gate."; + next; + mes "\"Krukan reads from bottom up. Four clues.\""; + close; +} + +027-5,68,87,0|script|#KeshlamClue792|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "There's an inscription on the gate."; + next; + mes "\"The candle shall lit you, but if you mess up, a different light will show."; + mes "Alas did you knew, that Razha came before Krukan?\""; + close; +} + +027-5,68,73,0|script|#KeshlamClue793|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "There's an inscription on the gate."; + next; + mes "\"Razha likes to read from left to right. Two clues, Two clues.\""; + close; +} + +027-5,68,59,0|script|#KeshlamClue794|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "There's an inscription on the gate."; + next; + mes "\"The master's candlesticks are like the fingers of his hand."; + mes "And if it is not to kill, they will never move.\""; + close; +} + +027-5,68,46,0|script|#KeshlamClue795|400 +{ + if (!#CRYPT_PASSWORD) end; + mes "There's a bloody inscription on the gate."; + next; + mes "\"##B"+get(.invocation$, "reapercry")+"##b\""; + next; + mes "##9You hear the sounds of battle. Candle lights shines in distance."; + next; + mes "##9However, when you turn towards the source - both the light as the sound have already stopped."; + next; + mes "##9Is this a clue of some sort?"; + close; +} + +/////////////////////////////////////////////////////////////////////////////// +// Totally optional Easter Egg :> +099-7,75,49,0|script|Engraving#Keshlam|400 +{ + mes "There's an engraving on this tree."; + next; + if (countitem("FlawedLens") < 1) goto L_Tools; + mes "Thanks to the lens on your inventory, you can read this:"; + mes ""; + mes "\"Nu'rem perished here, after the fight with Jande, Tal and Di'Tal."; + mes "For this very reason, this land is plagued forever. We shall give Nu'Rem a proper burrial.\""; + next; + mes "-- The Sparron"; + close; + +L_Tools: + mes "It is too faint to read without some good lens, but you can make the following words out of the engraving:"; + next; + mes "\"Nu'rem .... here .... fight .... Jande ...."; + mes ".... land .... plagued forever. .... Nu'Rem .... proper burrial.\""; + next; + mes "-- The ...."; + close; +} + + +/////////////////////////////////////////////////////////////////////////////// +// Monster Script Control +-|script|Keshlam|32767 +{ + close; + +OnInit: + areamonster "099-7", 20, 20, 120, 120, "", 1148, 10, "Keshlam::OnDeath8"; + areamonster "099-7", 20, 20, 120, 120, "", 1149, 10, "Keshlam::OnDeath9"; + monster "099-7", 20, 105, "Grim Reaper", 1068, 1, "Keshlam::OnBoss"; + end; + +OnDeath8: + goto OnDeath; + +OnDeath9: + goto OnDeath; + +OnDeath: + // TODO: Only fire this if timer not running. Set timer to 5min + initnpctimer; + end; + +OnBoss: + initnpctimer; + // If a player is attached, give them 20 Treasure Keys + getitem "TreasureKey", 20; + end; + +OnTimer150000: + // 1148 + set $@KeshlamMc, mobcount("099-7", "Keshlam::OnDeath8")+1; + if ($@KeshlamMc < 10) + areamonster "099-7", 20, 20, 120, 120, "", 1148, 10-$@KeshlamMc, "Keshlam::OnDeath8"; + + // 1149 + set $@KeshlamMc, mobcount("099-7", "Keshlam::OnDeath9")+1; + if ($@KeshlamMc < 10) + areamonster "099-7", 20, 20, 120, 120, "", 1149, 10-$@KeshlamMc, "Keshlam::OnDeath9"; + + // Boss (TODO give boss their own timer with 5 minutes) + set $@KeshlamMc, mobcount("099-7", "Keshlam::OnBoss")+1; + if ($@KeshlamMc < 1) + monster "099-7", 20, 105, "Grim Reaper", 1068, 1, "Keshlam::OnBoss"; + + // Done + set $@KeshlamMc, 0; + stopnpctimer; + end; +} + +/////////////////////////////////////////////////////////////////////////////// +// Who wants a rare drop? +099-7,18,110,0|script|Chest#keshlam|111 +{ + if (FLAGS & FLAG_KESHLAM_RAREDROP) goto L_Finished; + mes "[Chest]"; + mes "Would you try to open it?"; + mes "##1Cost: 1000 Treasure Keys"; + next; + menu + "Yes.", L_Yes, + "No.", L_Close; + +L_Yes: + if(countitem("TreasureKey") < 1000) + goto L_Not_Enough; + getinventorylist; + if (@inventorylist_count == 100 + && countitem("TreasureKey") > 1000) + goto L_TooMany; + delitem "TreasureKey", 1000; + if (FLAGS & FLAG_KESHLAM_FLAWEDLENS) goto L_Rare; + goto L_FlawedLens; + +L_FlawedLens: + getitem "FlawedLens", 1; + mes "[Chest]"; + mes "You opened it and found...! Some flawed lens?! Meh."; + getexp 20000000, 0; + set FLAGS, FLAGS | FLAG_KESHLAM_FLAWEDLENS; + next; + mes "[Chest]"; + mes "You notice this chest has a hidden section with another lock."; + mes "You might want try that again later."; + close; + +L_Rare: + getexp 10000000, 0; + set FLAGS, FLAGS | FLAG_KESHLAM_RAREDROP; + if (rand(3) == 1) goto L_Amulet; // 33% chance + goto L_Ring; // 67% chance + +L_Amulet: + getitem "EnchantersAmulet", 1; + mes "[Chest]"; + mes "You opened it and found...! An Enchanter's Amulet! Lucky!"; + close; + +L_Ring: + getitem "MageRing", 1; + mes "[Chest]"; + mes "You opened it and found...! A Mage Ring! Lucky!"; + close; + +L_Not_Enough: + mes "It seems that this is not the right key..."; + close; + +L_Finished: + mes "[Chest]"; + mes "You already opened this chest."; + close; + +L_TooMany: + mes "[Chest]"; + mes "You don't have room for what ever is inside. Maybe you should try again later."; + close; + +L_Close: + close; +} + diff --git a/world/map/npc/_import.txt b/world/map/npc/_import.txt index 8c826165..5691767f 100644 --- a/world/map/npc/_import.txt +++ b/world/map/npc/_import.txt @@ -124,4 +124,7 @@ import: npc/099-1/_import.txt import: npc/099-2/_import.txt import: npc/099-3/_import.txt import: npc/099-4/_import.txt +import: npc/099-5/_import.txt +import: npc/099-6/_import.txt +import: npc/099-7/_import.txt import: npc/botcheck/_import.txt diff --git a/world/map/npc/functions/doomsday.txt b/world/map/npc/functions/doomsday.txt index fb3f2e0a..27498e2b 100644 --- a/world/map/npc/functions/doomsday.txt +++ b/world/map/npc/functions/doomsday.txt @@ -154,6 +154,7 @@ L_Kage: enablenpc "Wizard#7"; enablenpc "Wizard#8"; enablenpc "Arch-Wizard#9"; + set $DOOMSDAY, 3; donpcevent "Doomsday::OnJanitor"; // TODO gmlog strcharinfo(0) + " changed doomsday to Act 5: The Doomsday."; return; @@ -764,6 +765,10 @@ L_Doomsday3Bonus: set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); areamonster "003-4", 20, 20, 85, 60, "", $@doomsday_mobs[$@DD_IDX], $@DD_UNITS; + // Tormenta + if (rand(10) <= $DOOMSDAY_CLUES) + monster "057-1", 126, 64, "", 1137, 1; + set $@DD_UNITS, 0; set $@DD_IDX, 0; end; @@ -801,6 +806,10 @@ OnDD4Spawn: monster $@DD_LOC$, $@DD_XPOS[$@DD_IDX1], $@DD_YPOS[$@DD_IDX1], "", 1145, 1, "Doomsday::OnDeathAct4"; //debugmes "Success "+$@DD_LOC$+" ("+$@DD_XPOS[$@DD_IDX1]+", "+$@DD_YPOS[$@DD_IDX1]+")"; mapannounce $@DD_LOC$, "Golem : FRAIL SMALL PEOPLE, ME SMASH!!!", 0; + // Spawn a few mobs + set $@DD_INT, 0; + set $@DD_UNITS, $DOOMSDAY_CLUES*4; + callsub S_DD3ThirdSpawns; goto OnDD4Smash; // Could use a new optional skill: FRAIL NOOBS, ZAX RULES! (causes new wave of 6 monsters) @@ -1145,4 +1154,53 @@ OnInit: end; } +008-1,97,28,0|script|#Haystack|400 +{ + if ($DOOMSDAY != 3) end; + if ((gettimetick(2)-TUT_var < 5*7*86400) || (BaseLevel < 40)) //player must be created at least 5 weeks ago + goto L_EndTooYoung; + if (gettimetick(2) < #HAYSTACKTIMEPENALTY) + goto L_EndRateLimit; + set #HAYSTACKTIMEPENALTY, gettimetick(2) + 5; + message strcharinfo(0), "Haystack : What exactly are you looking for?"; + if (rand(20) == 0) getitem "BentNeedle", 1; // 5% chance (was 1% on 2010) + close; + +L_EndTooYoung: + end; + +L_EndRateLimit: + message strcharinfo(0), "Haystack : I just searched this haystack... Gimme a break."; + end; +} + +// This function controls death, both on Zax Domains as with Black Rose +function|script|DoomsdayAct5 +{ + if ($DOOMSDAY != 3) + goto L_Return; + if (countitem("BlackRose")) + goto L_WarpTo; + if (getmap() == "099-1" || getmap() == "099-2" || getmap() == "099-3" || getmap() == "099-6") + goto L_WarpOut; + goto L_Return; + +L_WarpTo: + //warp "099-1", 34, 34; + //delitem "BlackRose", 1; + return; + +L_WarpOut: + if (countitem("DarkPetal") < 1) + goto L_Failure; + delitem "DarkPetal", 1; + return; + +L_Failure: + set Class, 6; + return; + +L_Return: + return; +} diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt index fe87b380..b92967b3 100644 --- a/world/map/npc/functions/global_event_handler.txt +++ b/world/map/npc/functions/global_event_handler.txt @@ -33,6 +33,7 @@ OnPCDieEvent: addtimer 0, "Magic Timer::OnClear"; // reset magic block on death callfunc "SpawnGhost"; callfunc "MiriamExpire"; // force the speed skill quest to expire + callfunc "DoomsdayAct5"; // Doomsday Event Act 5 set @killerrid, 0; // reset killer rid end; diff --git a/world/map/npc/magic/_import.txt b/world/map/npc/magic/_import.txt index 5c82ebac..4671ac7a 100644 --- a/world/map/npc/magic/_import.txt +++ b/world/map/npc/magic/_import.txt @@ -1,6 +1,7 @@ npc: npc/magic/_procedures.txt npc: npc/magic/level0-antiprotect.txt npc: npc/magic/level0-discharge.txt +npc: npc/magic/level0-reapercry.txt npc: npc/magic/level0-wand.txt npc: npc/magic/level1-aggravate.txt npc: npc/magic/level1-experience.txt diff --git a/world/map/npc/magic/level0-reapercry.txt b/world/map/npc/magic/level0-reapercry.txt new file mode 100644 index 00000000..fd80f113 --- /dev/null +++ b/world/map/npc/magic/level0-reapercry.txt @@ -0,0 +1,244 @@ +// #reapercry +// Spell to warp to Keshlam Outskirts +// Variable: @reapercry -> Holds summon state +// +// If this was Evol2 engine, I would be able to easily use bitmasks, +// Having a custom password sequence unique per character. +// But alas, on TMWA, I can't really abuse player variables. +// So I allow you to cheat. Or not. Lemme think. Account variable... + +// Returns true if player inside candle area +// call("alacriuspos", bitwise) +function|script|alacriuspos +{ + set @alacriusp, 0; + + // Left side + if (1 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_25_53_29_56; + if (2 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_20_47_22_51; + if (4 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_22_40_25_43; + if (8 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_29_40_32_43; + if (16 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_32_47_35_50; + if (32 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_25_53_29_56; + // Left not set + if (1 == getarg(0)) + goto L_29_40_32_43; + if (2 == getarg(0)) + goto L_32_47_35_50; + if (4 == getarg(0)) + goto L_25_53_29_56; + if (8 == getarg(0)) + goto L_20_47_22_51; + if (16 == getarg(0)) + goto L_22_40_25_43; + if (32 == getarg(0)) + goto L_29_40_32_43; + // Right side + if (64 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_49_53_53_56; + if (128 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_43_47_46_51; + if (256 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_46_40_49_43; + if (512 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_53_40_56_43; + if (1024 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_56_47_58_50; + if (2048 == getarg(0) && #CRYPT_PASSWORD & getarg(0)) + goto L_49_53_53_56; + // Right side not set + if (64 == getarg(0)) + goto L_53_40_56_43; + if (128 == getarg(0)) + goto L_56_47_58_50; + if (256 == getarg(0)) + goto L_49_53_53_56; + if (512 == getarg(0)) + goto L_43_47_46_51; + if (1024 == getarg(0)) + goto L_46_40_49_43; + if (2048 == getarg(0)) + goto L_53_40_56_43; + + // Nope, all wrong + set @alacriusp, 0; + return; + +// Left Side Labels +L_29_40_32_43: + set @alacriusp, isin("027-8", 29, 40, 32, 43); + return; +L_22_40_25_43: + set @alacriusp, isin("027-8", 22, 40, 25, 43); + return; +L_20_47_22_51: + set @alacriusp, isin("027-8", 20, 47, 22, 51); + return; +L_25_53_29_56: + set @alacriusp, isin("027-8", 25, 53, 29, 56); + return; +L_32_47_35_50: + set @alacriusp, isin("027-8", 32, 47, 35, 50); + return; + +// Right Side Labels +L_53_40_56_43: + set @alacriusp, isin("027-8", 53, 40, 56, 43); + return; +L_46_40_49_43: + set @alacriusp, isin("027-8", 46, 40, 49, 43); + return; +L_43_47_46_51: + set @alacriusp, isin("027-8", 43, 47, 46, 51); + return; +L_49_53_53_56: + set @alacriusp, isin("027-8", 49, 53, 53, 56); + return; +L_56_47_58_50: + set @alacriusp, isin("027-8", 56, 47, 58, 50); + return; + +} + +-|script|reapercry|32767 +{ + if(call("magic_checks")) end; + callfunc "magic_exp"; + + // Not in Terogan's Room + if (getmap() != "027-8") end; + + // Terogan is asleep + if (!$@CRYPT_FIGHT3) end; + + // No password is set o.o + if (!#CRYPT_PASSWORD) end; + + // Switch the quest state + if (@reapercry == 0) + goto L_Check0; + if (@reapercry == 1) + goto L_Check1; + if (@reapercry == 2) + goto L_Check2; + if (@reapercry == 3) + goto L_Check3; + if (@reapercry == 4) + goto L_Check4; + if (@reapercry == 5) + goto L_Check5; + + // Something went wrong!! + end; + +////////////////////////////////////////////////////// +L_Check0: + void call("alacriuspos", 1); + if (@alacriusp) goto L_Exec0; + void call("alacriuspos", 64); + if (@alacriusp) goto L_Exec0; + + set @reapercry, 0; + misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0); + end; + +L_Exec0: + misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME + set @reapercry, 1; + end; + +////////////////////////////////////////////////////// +L_Check1: + void call("alacriuspos", 2); + if (@alacriusp) goto L_Exec1; + void call("alacriuspos", 128); + if (@alacriusp) goto L_Exec1; + + set @reapercry, 0; + misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0); + end; + +L_Exec1: + misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME + set @reapercry, 2; + end; + +////////////////////////////////////////////////////// +L_Check2: + void call("alacriuspos", 4); + if (@alacriusp) goto L_Exec2; + void call("alacriuspos", 256); + if (@alacriusp) goto L_Exec2; + + set @reapercry, 0; + misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0); + end; + +L_Exec2: + misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME + set @reapercry, 3; + end; + +////////////////////////////////////////////////////// +L_Check3: + void call("alacriuspos", 8); + if (@alacriusp) goto L_Exec3; + void call("alacriuspos", 512); + if (@alacriusp) goto L_Exec3; + + set @reapercry, 0; + misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0); + end; + +L_Exec3: + misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME + set @reapercry, 4; + end; + +////////////////////////////////////////////////////// +L_Check4: + void call("alacriuspos", 16); + if (@alacriusp) goto L_Exec4; + void call("alacriuspos", 1024); + if (@alacriusp) goto L_Exec4; + + set @reapercry, 0; + misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0); + end; + +L_Exec4: + misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME + set @reapercry, 5; + end; + +////////////////////////////////////////////////////// +L_Check5: + void call("alacriuspos", 32); + if (@alacriusp) goto L_Exec5; + void call("alacriuspos", 2048); + if (@alacriusp) goto L_Exec5; + + set @reapercry, 0; + misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0); + end; + +L_Exec5: + // This means cast sequence complete + // Maybe FX_MAGIC_BLUE_TELEPORT? (iilia's effect) + set @reapercry, 0; + misceffect FX_MAGIC_TELEPORT, strcharinfo(0); + warp "099-7", 75, 36; + end; + +////////////////////////////////////////////////////// +OnInit: + set .invocation$, chr(MAGIC_SYMBOL) + "reapercry"; // used in npcs that refer to this spell + registercmd .invocation$, strnpcinfo(0); + end; +} diff --git a/world/map/npc/magic/level2-lightning-strike.txt b/world/map/npc/magic/level2-lightning-strike.txt index 05d358e3..d454abc6 100644 --- a/world/map/npc/magic/level2-lightning-strike.txt +++ b/world/map/npc/magic/level2-lightning-strike.txt @@ -19,6 +19,8 @@ (((200 - Agi) * 3000) / 200), // delay 0, // in_rain 0; // target id (tmp) + if (getequipid(equip_misc1) == 5253 || getequipid(equip_misc2) == 5253) + set @ingravspell[3], @ingravspell[3]*8/10+1; callfunc "magic_exp"; goto L_FreeRecast; |