summaryrefslogtreecommitdiff
path: root/world
diff options
context:
space:
mode:
authorJesusaves <jesusalva@themanaworld.org>2020-05-09 21:55:31 -0300
committerGitHub <noreply@github.com>2020-05-10 00:55:31 +0000
commit7ee960c62a2d2919a68f6f24925567ee417f192e (patch)
treea28cfb9eb0894690d2f46ff0fb30cc205848bf77 /world
parentff9054498564f69901ad1c48e6cf00bb7ff9023f (diff)
downloadserverdata-7ee960c62a2d2919a68f6f24925567ee417f192e.tar.gz
serverdata-7ee960c62a2d2919a68f6f24925567ee417f192e.tar.bz2
serverdata-7ee960c62a2d2919a68f6f24925567ee417f192e.tar.xz
serverdata-7ee960c62a2d2919a68f6f24925567ee417f192e.zip
WIP: 500 PRs Closed Commemorative Commit (#555)
* Mountain and Grass Snake experience +100% (per topic 20799) * Prepare the act 5 button so it have a non-null action * There's now 10% chance per clue of Tormenta showing up at 09:00 assault. Usual spot. Currently 2 clues were found, so 20% spawn chances. * Cerhan reactions for Sand Cutter (thanks for pointing this out, Ledmitz) * Alacrius Riddle (needs 300 boss points to start) * Keshlam Swamps map * News file ID 85
Diffstat (limited to 'world')
-rw-r--r--world/map/data/099-5.wlkbin0 -> 10004 bytes
-rw-r--r--world/map/data/099-6.wlkbin0 -> 19504 bytes
-rw-r--r--world/map/data/099-7.wlkbin0 -> 19604 bytes
-rw-r--r--world/map/data/resnametable.txt3
-rw-r--r--world/map/db/const-quest.txt30
-rw-r--r--world/map/db/item_db_trinket.txt1
-rw-r--r--world/map/db/mob_db_over_100.txt12
-rw-r--r--world/map/news.d/85-news-2020-05-09.txt39
-rw-r--r--world/map/npc/026-2/cerhan.txt15
-rw-r--r--world/map/npc/027-2/alacrius.txt116
-rw-r--r--world/map/npc/099-5/_import.txt6
-rw-r--r--world/map/npc/099-5/_mobs.txt3
-rw-r--r--world/map/npc/099-5/_nodes.txt4
-rw-r--r--world/map/npc/099-5/_warps.txt3
-rw-r--r--world/map/npc/099-6/_import.txt6
-rw-r--r--world/map/npc/099-6/_mobs.txt3
-rw-r--r--world/map/npc/099-6/_nodes.txt4
-rw-r--r--world/map/npc/099-6/_warps.txt3
-rw-r--r--world/map/npc/099-7/_import.txt7
-rw-r--r--world/map/npc/099-7/_mobs.txt3
-rw-r--r--world/map/npc/099-7/_nodes.txt4
-rw-r--r--world/map/npc/099-7/_warps.txt3
-rw-r--r--world/map/npc/099-7/boss.txt722
-rw-r--r--world/map/npc/_import.txt3
-rw-r--r--world/map/npc/functions/doomsday.txt58
-rw-r--r--world/map/npc/functions/global_event_handler.txt1
-rw-r--r--world/map/npc/magic/_import.txt1
-rw-r--r--world/map/npc/magic/level0-reapercry.txt244
-rw-r--r--world/map/npc/magic/level2-lightning-strike.txt2
29 files changed, 1277 insertions, 19 deletions
diff --git a/world/map/data/099-5.wlk b/world/map/data/099-5.wlk
new file mode 100644
index 00000000..01fe6f91
--- /dev/null
+++ b/world/map/data/099-5.wlk
Binary files differ
diff --git a/world/map/data/099-6.wlk b/world/map/data/099-6.wlk
new file mode 100644
index 00000000..e9acd9ea
--- /dev/null
+++ b/world/map/data/099-6.wlk
Binary files differ
diff --git a/world/map/data/099-7.wlk b/world/map/data/099-7.wlk
new file mode 100644
index 00000000..5b29001f
--- /dev/null
+++ b/world/map/data/099-7.wlk
Binary files differ
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;