summaryrefslogtreecommitdiff
path: root/world/map/npc
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/map/npc
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/map/npc')
-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
21 files changed, 1211 insertions, 0 deletions
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;