Преглед на файлове

Initial release of morse cave instance (#3173)

* Initial release of morse cave instance
* Implemented NPC_JACKFROST skill

Thanks to @laziem, @ecdarreola, @Questune09 and https://www.divine-pride.net !
Atemo преди 7 години
родител
ревизия
d388a7122b
променени са 12 файла, в които са добавени 1325 реда и са изтрити 14 реда
  1. 1 1
      db/pre-re/skill_db.txt
  2. 1 1
      db/re/instance_db.txt
  3. 11 11
      db/re/mob_db.txt
  4. 74 0
      db/re/mob_skill_db.txt
  5. 4 0
      db/re/quest_db.txt
  6. 2 0
      db/re/skill_cast_db.txt
  7. 1 1
      db/re/skill_db.txt
  8. 1225 0
      npc/re/instances/MorseCave.txt
  9. 1 0
      npc/re/scripts_athena.conf
  10. 1 0
      src/map/battle.cpp
  11. 3 0
      src/map/skill.cpp
  12. 1 0
      src/map/status.cpp

+ 1 - 1
db/pre-re/skill_db.txt

@@ -863,7 +863,7 @@
 717,0,6,1,0,0xD2,18,10,1,no,0,0x2,0,misc,0,0x0,		NPC_MAXPAIN_ATK,Max Pain Attack
 //718,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_DEATHSUMMON,Death Summon
 //719,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_HELLBURNING,Hell Burning
-//720,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_JACKFROST,Jack Frost 2
+720,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	NPC_JACKFROST,Jack Frost 2
 //721,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDEWEB,Wide Web
 //722,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDESUCK,Wide Suck
 //723,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_STORMGUST2,Storm Gust 2

+ 1 - 1
db/re/instance_db.txt

@@ -30,7 +30,7 @@
 // 23,Wave Mode - Sky,3600,300,1@def02,29,35
 // 24,Nightmarish Jitterbug,3600,300,1@jtb,16,17
 25,Isle of Bios,3600,300,1@dth1,17,93,1@dth2,1@dth3
-// 26,Morse's Cave,3600,300,1@rev,26,181
+26,Morse's Cave,3600,300,1@rev,26,181
 // 27,Temple of the Demon God,3600,300,1@eom,101,16
 28,Central Laboratory,3600,300,1@lab,120,30
 29,Last room,3600,300,1@uns,145,35

+ 11 - 11
db/re/mob_db.txt

@@ -2155,17 +2155,17 @@
 2995,XM_TEDDY_BEAR,Abandoned Teddy Bear,Abandoned Teddy Bear,148,180000,1,6666,7332,1,1347,1924,106,44,44,166,44,44,166,44,10,12,0,6,69,0x2003295,150,512,780,504,0,0,0,0,0,0,0,7317,1900,615,150,12074,100,12734,1000,12738,100,0,0,0,0,0,0,0,0,31022,1
 2996,XM_CELINE_KIMI,Celine Kimi,Celine Kimi,160,66666666,1,4444444,4033332,2,5636,8303,479,444,144,166,44,444,166,166,10,12,2,1,28,0x6283695,100,768,1056,480,444444,616,10000,617,10000,22534,10000,22534,4000,18549,4000,7642,4000,19701,100,13442,100,712,10000,0,0,0,0,0,0,0,0
 2997,G_XM_CELINE_KIMI,Kimi's Phantom,Kimi's Phantom,160,66666666,1,0,0,2,6666,13332,479,444,144,166,44,444,166,166,10,12,2,1,28,0x6203695,100,768,1056,480,0,0,0,0,0,0,0,6683,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-//2998,EP14_MORS_EVENT
-//2999,EP14_MORS_BOSSA
-//3000,EP14_MORS_BOSSB
-//3001,EP14_MORS_MOB1
-//3002,EP14_MORS_MOB2
-//3003,EP14_MORS_MOB3
-//3004,EP14_MORS_MOB4
-//3005,EP14_MORS_MOB5
-//3006,EP14_MORS_MOB6
-//3007,EP14_MORS_DUMMY
-//3008,EP14_MORS_HIDDEN
+2998,EP14_MORS_EVENT,Weakened Morroc,Weakened Morroc,158,1771440,1,12390,16104,1,1872,2772,113,45,87,51,45,88,106,50,12,12,2,6,60,0x6200085,200,2612,824,440,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,0
+2999,EP14_MORS_BOSSA,Morocc Necromancer,Morocc Necromancer,158,4000000,1,2106000,1336500,1,700,700,215,555,165,190,142,146,299,93,12,12,1,7,60,0x6280085,100,300,384,288,0,0,0,0,0,0,0,607,2000,603,200,604,200,0,0,0,0,0,0,522,200,0,0,0,0,0,0
+3000,EP14_MORS_BOSSB,Morocc Necromancer,Morocc Necromancer,101,80000000,1,2310750,1465200,12,700,701,1,1,1,1,1,180,1,1,12,12,1,7,82,0x6280085,2000,2700,384,288,0,0,0,0,0,0,0,607,2000,603,200,604,200,22537,10000,22537,10000,0,0,522,200,0,0,0,0,0,0
+3001,EP14_MORS_MOB1,Morroc's Ghoul,Morroc's Ghoul,158,295240,1,1239,1610,1,1872,2772,113,45,87,51,45,88,106,50,12,12,1,6,60,0x6200085,1000,2612,824,440,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,0
+3002,EP14_MORS_MOB2,Morroc's Osiris,Morroc's Osiris,158,442860,1,1239,1610,1,1872,2772,113,45,87,51,45,88,106,50,12,12,1,6,60,0x6200085,200,2612,824,440,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,0
+3003,EP14_MORS_MOB3,Morroc's Archer Skeleton,Morroc's Archer Skeleton,158,295240,1,1239,1610,7,1872,2772,113,45,87,51,45,88,106,50,12,12,1,6,60,0x6200085,200,300,824,440,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,0
+3004,EP14_MORS_MOB4,Morroc's Wraith,Morroc's Wraith,158,100000,1,1239,1610,1,90,180,13,45,87,51,45,88,106,50,12,12,2,6,60,0x6200085,600,300,824,440,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,0
+3005,EP14_MORS_MOB5,Morroc's Verit,Morroc's Verit,158,442860,1,1239,1610,1,1872,2772,113,45,87,51,45,88,106,50,12,12,1,6,60,0x6200085,100,76,824,440,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,0
+3006,EP14_MORS_MOB6,Morroc's Lude,Morroc's Lude,158,885720,1,1239,1610,3,113,226,113,45,87,51,45,88,299,50,12,12,0,6,60,0x6200085,100,76,824,440,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,0
+3007,EP14_MORS_DUMMY,Death Soul,Death Soul,158,99999999,1,0,0,1,1872,2772,113,45,87,51,45,88,106,50,12,12,0,6,60,0x6370000,195,76,824,440,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,0
+3008,EP14_MORS_HIDDEN,Morroc Hidden,Morroc Hidden,158,295240,1,0,0,1,1,2,113,45,1,51,45,255,106,50,12,12,0,6,60,0x620008C,2000,2000,824,440,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,0
 //3009,EP14_3_DEATH_BOSS
 3010,EP14_3_DEATH_A_MOB1,Corrupt Orc Baby,Corrupt Orc Baby,158,250000,1,12390,16104,1,1036,1415,240,50,120,85,80,60,88,50,10,12,0,7,42,0x0000085,150,864,400,150,0,0,0,0,0,0,0,607,10,603,20,604,20,715,20,717,20,716,20,522,20,0,0,0,0,0,0
 3011,EP14_3_DEATH_A_MOB2,Corrupt Baby Desert Wol,Corrupt Baby Desert Wol,158,232890,1,12390,16104,1,1016,1395,240,45,100,85,100,88,120,50,10,12,0,2,43,0x0000085,150,864,400,150,0,0,0,0,0,0,0,607,10,603,20,604,20,715,20,717,20,716,20,522,20,0,0,0,0,0,0

+ 74 - 0
db/re/mob_skill_db.txt

@@ -11077,6 +11077,80 @@
 2997,Kimi's Phantom@NPC_MAXPAIN,attack,716,3,10000,3000,50000,no,self,myhpltmaxrate,10,,,,,,,
 2997,Kimi's Phantom@NPC_POWERUP,attack,349,1,10000,0,50000,no,self,myhpltmaxrate,5,,,,,,6,
 
+// Episode 14.3: Morse cave
+2999,Morocc Necromancer@MG_SIGHT,idle,10,1,2000,0,5000,no,self,always,0,,,,,,,
+2999,Morocc Necromancer@MG_SIGHT,idle,10,1,10000,0,5000,no,self,skillused,137,,,,,,,
+2999,Morocc Necromancer@AL_TELEPORT,idle,26,1,10000,0,0,no,self,rudeattacked,,,,,,,,
+2999,Morocc Necromancer@AL_TELEPORT,walk,26,1,5000,0,5000,no,self,rudeattacked,,,,,,,,
+2999,Morocc Necromancer@MG_FROSTDIVER,idle,15,40,10000,1000,10000,yes,randomtarget,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_JUPITEL,idle,84,28,10000,1000,10000,yes,randomtarget,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FIREBALL,idle,17,44,10000,500,10000,yes,randomtarget,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FROSTDIVER,chase,15,40,10000,1000,10000,yes,target,skillused,18,,,,,,,
+2999,Morocc Necromancer@WZ_JUPITEL,chase,84,28,10000,1000,10000,yes,target,skillused,18,,,,,,,
+2999,Morocc Necromancer@MG_FIREBALL,chase,17,44,10000,500,10000,yes,target,skillused,18,,,,,,,
+2999,Morocc Necromancer@MG_FROSTDIVER,attack,15,40,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FROSTDIVER,chase,15,40,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@HW_GANBANTEIN,attack,483,1,10000,500,7000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@HW_NAPALMVULCAN,chase,400,5,2000,1000,2000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_JUPITEL,attack,84,28,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_JUPITEL,chase,84,28,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_THUNDERSTORM,attack,21,20,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_THUNDERSTORM,chase,21,20,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_COLDBOLT,attack,14,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_COLDBOLT,chase,14,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FIREBALL,attack,17,44,3000,500,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FIREBALL,chase,17,44,3000,500,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_SIGHTRASHER,attack,81,10,3000,0,10000,no,self,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_QUAGMIRE,chase,92,5,3000,0,10000,no,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_SAFETYWALL,attack,12,10,3000,0,10000,no,self,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FIREBOLT,chase,19,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FIREBOLT,attack,19,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FIREWALL,chase,18,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_FIREWALL,attack,18,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_LIGHTNINGBOLT,chase,20,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@MG_LIGHTNINGBOLT,attack,20,10,3000,1000,10000,yes,target,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_FROSTNOVA,chase,88,10,3000,1000,10000,yes,self,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_FROSTNOVA,attack,88,10,3000,1000,10000,yes,self,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_EARTHSPIKE,chase,90,5,3000,0,10000,no,target,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_EARTHSPIKE,attack,90,5,3000,0,10000,no,target,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_HEAVENDRIVE,chase,91,5,3000,0,10000,no,target,always,0,,,,,,,
+2999,Morocc Necromancer@WZ_HEAVENDRIVE,attack,91,5,3000,0,10000,no,target,always,0,,,,,,,
+3000,Morocc Necromancer@NPC_CRITICALWOUND,attack,673,2,500,0,5000,no,target,always,0,,,,,,,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,5000,0,5000,no,randomtarget,always,0,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,3000,0,5000,no,self,always,0,,,,,,9,
+3000,Morocc Necromancer@WZ_METEOR,attack,83,11,5000,0,5000,no,target,always,0,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,attack,720,5,3000,0,5000,no,self,always,0,,,,,,9,
+3000,Morocc Necromancer@WZ_FIREPILLAR,idle,80,7,2000,0,5000,no,around2,always,0,,,,,,,
+3000,Morocc Necromancer@WZ_FIREPILLAR,attack,80,7,2000,0,5000,no,around2,always,0,,,,,,,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,10000,0,10000,no,randomtarget,skillused,18,,,,,,9,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,10000,0,10000,no,randomtarget,skillused,89,,,,,,9,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,10000,0,10000,no,randomtarget,skillused,21,,,,,,9,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,10000,0,10000,no,randomtarget,skillused,28,,,,,,9,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,10000,0,10000,no,randomtarget,skillused,79,,,,,,9,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,10000,0,10000,no,randomtarget,skillused,83,,,,,,9,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,10000,0,10000,no,target,longrangeattacked,,,,,,,9,
+3000,Morocc Necromancer@WZ_METEOR,idle,83,11,10000,0,10000,no,target,casttargeted,,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,10000,0,10000,no,self,skillused,18,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,10000,0,10000,no,self,skillused,89,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,10000,0,10000,no,self,skillused,21,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,10000,0,10000,no,self,skillused,28,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,10000,0,10000,no,self,skillused,79,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,10000,0,10000,no,self,skillused,83,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,10000,0,10000,no,self,longrangeattacked,,,,,,,9,
+3000,Morocc Necromancer@NPC_JACKFROST,idle,720,5,10000,0,10000,no,self,casttargeted,,,,,,,9,
+3004,Morroc's Wraith@NPC_SELFDESTRUCTION,attack,173,1,10000,1700,0,yes,self,always,0,,,,,,,
+3006,Morroc's Lude@NPC_POISON,attack,176,5,2000,0,0,yes,target,always,0,,,,,,,
+3006,Morroc's Lude@NPC_BLINDATTACK,attack,177,5,2000,0,0,yes,target,always,0,,,,,,,
+3006,Morroc's Lude@NPC_SILENCEATTACK,attack,178,5,5000,0,0,yes,target,always,0,,,,,,,
+3006,Morroc's Lude@NPC_STUNATTACK,attack,179,5,5000,0,0,yes,target,always,0,,,,,,,
+3006,Morroc's Lude@NPC_PETRIFYATTACK,attack,180,5,2000,0,0,yes,target,always,0,,,,,,,
+3006,Morroc's Lude@NPC_CURSEATTACK,attack,181,5,5000,0,0,yes,target,always,0,,,,,,,
+3006,Morroc's Lude@NPC_SLEEPATTACK,attack,182,5,2000,0,0,yes,target,always,0,,,,,,,
+3006,Morroc's Lude@NPC_HALLUCINATION,attack,207,5,2000,0,0,yes,target,always,0,,,,,,,
+3006,Morroc's Lude@NPC_BLEEDING,attack,660,5,2000,0,0,yes,target,always,0,,,,,,,
+3008,Morroc Hidden@AL_HEAL,attack,28,9,10000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,,
+3008,Morroc Hidden@AL_HEAL,idle,28,9,10000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,,
+
 3026,Fire Pit@NPC_DEATHSUMMON,dead,718,3,10000,0,10000,no,self,always,0,3027,3027,3027,,,,
 
 // Episode 14.3: Isle of Bios

+ 4 - 0
db/re/quest_db.txt

@@ -1983,6 +1983,10 @@
 9315,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
 9316,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
 
+// EP14.3 Morse's Cave
+9318,0,3000,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Pursuing Hiding Morroc"
+9319,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Pursuing Hiding Morroc Continues"
+
 //9327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
 //9328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
 //9329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""

+ 2 - 0
db/re/skill_cast_db.txt

@@ -1047,6 +1047,8 @@
 706,0,0,0,3000,0,0,-1
 //-- NPC_MAXPAIN
 716,0,0,0,10000,0,0,0
+//-- NPC_JACKFROST
+720,0,0,0,12500:17500:22500:27500:32500,0,0,-1
 
 //===== 2nd Jobs Quest Skills ==============
 //-- KN_CHARGEATK

+ 1 - 1
db/re/skill_db.txt

@@ -863,7 +863,7 @@
 717,0,6,1,0,0xD2,18,10,1,no,0,0x2,0,misc,0,0x0,		NPC_MAXPAIN_ATK,Max Pain Attack
 718,0,0,4,0,0x1,0,10,1,no,0,0x2,0,magic,0,0x0,	NPC_DEATHSUMMON,Death Summon
 //719,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_HELLBURNING,Hell Burning
-//720,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_JACKFROST,Jack Frost 2
+720,0,8,4,1,0x2,5:6:7:8:9,5,-5,no,0,0,0,magic,0,0x0,	NPC_JACKFROST,Jack Frost 2
 //721,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDEWEB,Wide Web
 //722,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDESUCK,Wide Suck
 //723,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_STORMGUST2,Storm Gust 2

+ 1225 - 0
npc/re/instances/MorseCave.txt

@@ -0,0 +1,1225 @@
+//===== rAthena Script =======================================
+//= Morse Cave
+//===== Description: =========================================
+//= [Walkthrough Conversion]
+//= Morse Cave Instance
+//===== Changelogs: ==========================================
+//= 1.0 First version. [Capuche]
+//============================================================
+
+moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
+	if (ep14_3_isle == 0) {
+		mes "[Senior Tracker]";
+		mes "This is our advance base";
+		mes "to stop Morroc.";
+		mes "I'm a tracker";
+		mes "charged with leading my army";
+		mes "to Morroc's lair.";
+		close;
+	}
+	switch( checkquest(9319,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "[Senior Tracker]";
+		mes "We're nowhere near close";
+		mes "to stopping Morroc's resurrection.";
+		mes "I can't sleep at night,";
+		mes "knowing Morroc is doing everything he can";
+		mes "to recover his strength.";
+		mes "Could you come back tomorrow?";
+		close;
+	case 2:
+		break;
+	}
+	switch( isbegin_quest(9318) ) {
+	case 0:
+		mes "[Senior Tracker]";
+		mes "This is our advance base";
+		mes "to stop Morroc.";
+		mes "I'm a tracker";
+		mes "charged with leading my army";
+		mes "to Morroc's lair.";
+		next;
+		mes "[Senior Tracker]";
+		mes "After a painstaking search,";
+		mes "I've located";
+		mes "the place with the highest chance of";
+		mes "hiding Morroc inside.";
+		next;
+		mes "[Senior Tracker]";
+		mes "According to my intel,";
+		mes "Morroc is hiding out in this place,";
+		mes "trying to recover";
+		mes "his full strength.";
+		next;
+		mes "[Senior Tracker]";
+		mes "Even though I've located this place myself,";
+		mes "I have to admit";
+		mes "that I'm not equipped to";
+		mes "explore it by myself.";
+		mes "I'm a tracker after all, not a fighter.";
+		next;
+		mes "[Senior Tracker]";
+		mes "You look like";
+		mes "a warrior spoiling for";
+		mes "a good fight with Morroc,";
+		mes "and I think";
+		mes "you have a chance at winning it.";
+		next;
+		mes "[Senior Tracker]";
+		mes "How'd you like to";
+		mes "enter Morroc's lair,";
+		mes "defeat him,";
+		mes "and become the hero";
+		mes "who saved the world from evil?";
+		next;
+		if (getcharid(1) < 1 || getcharid(0) != getpartyleader(getcharid(1),2)) {
+			mes "[Senior Tracker]";
+			mes "If you're interested in my proposition,";
+			mes "let me talk to your party leader.";
+			mes "We'll discuss more details together.";
+			close;
+		}
+		mes "[Senior Tracker]";
+		mes "Morroc may not have recovered his full strength, but fighting him still";
+		break;
+	case 1:
+		mes "[Senior Tracker]";
+		mes "Finally you're back!";
+		mes "What happened in there?";
+		next;
+		mes "- You relay";
+		mes "your experience in the Red Flower. -";
+		next;
+		mes "[Senior Tracker]";
+		mes "So Morroc got away.";
+		mes "That's a shame.";
+		next;
+		if (checkquest(9318,HUNTING) == 2) {
+			mes "[Senior Tracker]";
+			mes "At least";
+			mes "you wiped out";
+			mes "his army.";
+			mes "That's an accomplishment in itself.";
+			next;
+		}
+		mes "[Senior Tracker]";
+		mes "At least we know";
+		mes "where he is.";
+		mes "Could you come back tomorrow";
+		mes "and help me track";
+		mes "him down again?";
+		mes "I'll be waiting here.";
+		if (checkquest(9318,HUNTING) == 2)
+			getitem 6684,1;	// TokenOfHero
+		completequest 9318;// Pursuing Hiding Morroc
+		setquest 9319;// Pursuing Hiding Morroc Continues
+		close;
+	case 2:
+		mes "[Senior Tracker]";
+		mes "I knew you'd return.";
+		mes "You look well-rested.";
+		next;
+		mes "[Senior Tracker]";
+		mes "According to my intel,";
+		mes "Morroc is hiding out in this place,";
+		mes "recovering his strength.";
+		next;
+		mes "[Senior Tracker]";
+		mes "Fighting Morroc";
+		break;
+	}
+	mes "takes more than a few warriors, no matter how strong they are.";
+	mes "I recommend you join forces with";
+	mes "as many comrades as you can find.";
+	mes "Are you ready to enter the Red Flower";
+	mes "where Morroc is believed to be hiding?";
+	if (getcharid(1) > 0 && getcharid(0) == getpartyleader(getcharid(1),2)) {
+		next;
+		if (select( "No.", "Yes." ) == 1) {
+			mes "[Senior Tracker]";
+			mes "Come back";
+			mes "if you change your mind.";
+			close;
+		}
+		mes "[Senior Tracker]";
+		mes "The entrance to the Red Flower";
+		mes "has opened.";
+		mes "It will only stay open for a while.";
+		mes "You'd better use it";
+		mes "while you can.";
+		if (instance_create("Morse's Cave") >= 0)
+			'party_id = getcharid(1);
+	}
+	close;
+}
+
+moro_cav,57,69,3	script	Red Flower#a1	CLEAR_NPC,{
+	if (ep14_3_isle == 0) {
+		mes "[Senior Tracker]";
+		mes "This is our advance base";
+		mes "to stop Morroc.";
+		mes "I'm a tracker";
+		mes "charged with leading my army";
+		mes "to Morroc's lair.";
+		close;
+	}
+	if (isbegin_quest(9318) == 1) {
+		mes "- The Red Flower is closed.";
+		mes "You cannot enter it yet. -";
+		close;
+	}
+	switch( checkquest(9319,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "- The Red Flower is closed.";
+		mes "You cannot enter it yet. -";
+		close;
+	case 2:
+		break;
+	}
+	if (select( "Do not enter the Red Flower.", "Enter the Red Flower." ) == 1) {
+		mes "- You can sense some sinister energy. -";
+		close;
+	}
+	switch( instance_enter("Morse's Cave") ) {
+	case IE_OTHER:
+		mes "An unknown error occurred.";
+		close;
+	case IE_NOINSTANCE:
+		mes "The Memorial dungeon Morse's Cave does not exist.";
+		mes "Your party leader has not yet created the Memorial dungeon.";
+		close;
+	case IE_NOMEMBER:
+		mes "Only party members can enter this Memorial dungeon.";
+		close;
+	case IE_OK:
+		mapannounce 'map_rev$, getpartyname( getcharid(1) ) + " party's " + strcharinfo(0) + " is entering Morse's Cave.", bc_map,0xFF99;
+		if (isbegin_quest(9319) > 0)
+			erasequest 9319;// Pursuing Hiding Morroc Continues
+		if (isbegin_quest(9318) > 0)
+			erasequest 9318;
+		setquest 9318;// Pursuing Hiding Morroc
+		// warp "1@rev",26,181;
+		end;
+	}
+	end;
+
+OnInit:
+	while(true) {
+		sleep 15000;
+		specialeffect 239;
+	}
+	end;
+}
+
+// Entrance
+1@rev,27,181,0	script	#RZ Memorial Start	HIDDEN_WARP_NPC,4,4,{
+	end;
+OnTouch:
+	// note : party member can also trigger this event
+	disablenpc instance_npcname("#RZ Memorial Start");
+	'soul_name$ = strcharinfo(0);	// name displayed on soul is defined at entrance
+	mes "";
+	sleep2 500;
+	mapannounce 'map_rev$, "Morroc: Who dares to disrupt my sleep?!", bc_map,0xEBFF;
+	unittalk getcharid(3), "" + strcharinfo(0) + " : We came to the right place!";
+	sleep2 3000;
+	unittalk getcharid(3), "" + strcharinfo(0) + " : Wait! There's something ahead of us!";
+	sleep2 3000;
+	specialeffect2 EF_LOCKON;
+	unittalk getcharid(3), "" + strcharinfo(0) + " : Are these hideous monsters Morroc's lackeys?";
+	donpcevent instance_npcname("#RZ Event_1") + "::OnStart";
+	end;
+}
+
+// 1@rev,31,181,0	script	#RZ Event_1	HIDDEN_WARP_NPC,5,5,{
+1@rev,1,1,0	script	#RZ Event_1	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#RZ Event_1");
+	.@label$ = instance_npcname("#RZ Event_1") + "::OnMobDead";
+	monster 'map_rev$,38,180,"Morroc's Ghoul",3001,1, .@label$;	// EP14_MORS_MOB1
+	monster 'map_rev$,38,181,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,38,182,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,54,180,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,54,181,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,54,182,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,70,180,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,70,181,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,70,182,"Morroc's Ghoul",3001,1, .@label$;
+	end;
+OnMobDead:
+	if (mobcount( 'map_rev$, instance_npcname("#RZ Event_1") + "::OnMobDead" ) < 1) {
+		donpcevent instance_npcname("Reaper Yanku#RZ Event_2") + "::OnStart";
+		disablenpc instance_npcname("#RZ Event_1");
+	}
+	end;
+}
+
+1@rev,64,181,4	script	Reaper Yanku#RZ Event_2	3029,{
+	end;
+OnStart:
+	enablenpc instance_npcname("Reaper Yanku#RZ Event_2");
+	npctalk "Reaper Yanku: *Chuckle* We meet again!";
+	sleep 3000;
+	npctalk "Reaper Yanku: You shouldn't have come. You're interrupting Lord Morroc from recovering his strength.";
+	sleep 3000;
+	npctalk "Reaper Yanku: This world resides in his mind.";
+	sleep 3000;
+	npctalk "Reaper Yanku: You can't do anything against his will. *Chuckle*";
+	sleep 3000;
+	npctalk "Reaper Yanku: Lord Morroc is expecting you. Let me take you to him. *Chuckle*";
+	sleep 3000;
+	disablenpc instance_npcname("Reaper Yanku#RZ Event_2");
+	enablenpc instance_npcname("#RZ Event_3");
+	sleep 3000;
+	/* Officials scripts
+	enablenpc instance_npcname("#RZ Move_30");
+	enablenpc instance_npcname("#RZ Move_31");
+	enablenpc instance_npcname("#RZ Move_32");
+	*/
+	mapwarp 'map_rev$,'map_rev$,103,177;	// note: officially players are warped when the next event start - player entering can't access to the current event
+	end;
+}
+
+// Weakened Morroc Room
+1@rev,104,176,0	script	#RZ Event_3	HIDDEN_WARP_NPC,4,4,{
+	end;
+OnTouch:	// note : party member can also trigger this event
+	mes "";	// fix me
+	disablenpc instance_npcname("#RZ Event_3");
+	enablenpc instance_npcname("Weakened Morroc#RZ1");
+	unittalk getcharid(3), "" + strcharinfo(0) + " : Finally, here we are, Morroc.";
+	sleep2 3000;
+	unittalk getcharid(3), "" + strcharinfo(0) + " : It's been almost too easy to find you,";
+	sleep2 3000;
+	unittalk getcharid(3), "" + strcharinfo(0) + " : but it doesn't matter; you'll die today!";
+	sleep2 3000;
+	specialeffect2 EF_LOCKON;
+	donpcevent instance_npcname("Weakened Morroc#RZ1") + "::OnTalk1";
+	end;
+}
+
+1@rev,111,178,4	script	Weakened Morroc#RZ1	1916,{
+	end;
+OnTalk1:
+	npctalk "Weakened Morroc: I should punish you for disturbing my slumber.";
+	sleep 3000;
+	npctalk "Weakened Morroc: Do you really think you can stop me?";
+	sleep 3000;
+	npctalk "Weakened Morroc: I'll make you regret ever coming here.";
+	sleep 3000;
+	npctalk "Weakened Morroc: I may have not recovered my full strength,";
+	specialeffect EF_ENERGYCOAT;
+	sleep 3000;
+	npctalk "Weakened Morroc: but I still can take down a bunch of you easily.";
+	sleep 3000;
+	npctalk "Weakened Morroc: Death is your only escape!";
+	specialeffect EF_VOLCANO;
+	sleep 3000;
+	disablenpc instance_npcname("Weakened Morroc#RZ1");
+	donpcevent instance_npcname("Weakened Morroc#control") + "::OnStart";
+	end;
+OnTalk2:
+	enablenpc instance_npcname("Weakened Morroc#RZ1");
+	npctalk "Weakened Morroc: I'm sorry, but I haven't recovered my full strength.";
+	sleep 3000;
+	npctalk "Weakened Morroc: I'll have to leave you to my soldiers for now.";
+	sleep 3000;
+	npctalk "Weakened Morroc: Do your worst to get out of my world!";
+	sleep 3000;
+	npctalk "Weakened Morroc: In the end, you'll learn the meaning of helplessness in the most painful way!";
+	sleep 3000;
+	npctalk "Weakened Morroc: And your souls will be mine! Mwah hah hah!";
+	sleep 3000;
+	disablenpc instance_npcname("Weakened Morroc#RZ1");
+	sleep 3000;
+	/* Officials scripts use WARPNPC
+	enablenpc instance_npcname("#RZ Move_1");
+	enablenpc instance_npcname("#RZ Move_2");
+	enablenpc instance_npcname("#RZ Move_3");
+	enablenpc instance_npcname("#RZ Move_4");
+	*/
+	enablenpc instance_npcname("#Battle_1RZ1");
+	enablenpc instance_npcname("#Battle_1RZ2");
+	for ( .@i = 1; .@i <= 12; .@i++ )
+		enablenpc instance_npcname( "#Pause Effect RZ" + .@i );
+	for ( .@i = 1; .@i <= 8; .@i++ )
+		enablenpc instance_npcname( "#RZ Debuff_" + .@i );
+
+	getpartymember 'party_id, 1, .@char_id;
+	getpartymember 'party_id, 2, .@account_id;
+	for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
+		if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
+			continue;
+		if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$) {
+			if ((.@count % 2) == 0)	// Right
+				warp 'map_rev$, rand(33,36), rand(117,118), .@char_id[.@i];
+			else	// Left
+				warp 'map_rev$, rand(112,114), rand(116,118), .@char_id[.@i];
+			.@count++;
+		}
+	}
+	end;
+}
+
+1@rev,1,1,0	script	Weakened Morroc#control	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("Weakened Morroc#control");
+	monster 'map_rev$,111,178,"Weakened Morroc",2998,1, instance_npcname("Weakened Morroc#control") + "::OnMobDead";	// EP14_MORS_EVENT
+	end;
+OnMobDead:
+	donpcevent instance_npcname("Weakened Morroc#RZ1") + "::OnTalk2";
+	disablenpc instance_npcname("Weakened Morroc#control");
+	end;
+}
+
+
+1@rev,34,126,4	script	Reaper Yanku#RZ Event_3		3029,{ end; }
+1@rev,112,126,4	duplicate(Reaper Yanku#RZ Event_3)	Reaper Yanku#RZ Event_4	3029
+1@rev,34,55,4	duplicate(Reaper Yanku#RZ Event_3)	Reaper Yanku#RZ Event_5	3029
+1@rev,112,48,4	duplicate(Reaper Yanku#RZ Event_3)	Reaper Yanku#RZ Event_6	3029
+
+
+// Battle 1 - waves, event A - left side
+// 1@rev,35,119,0	script	#Battle_1RZ1	HIDDEN_WARP_NPC,10,10,{
+1@rev,35,119,0	script	#Battle_1RZ1	HIDDEN_WARP_NPC,2,2,{
+	end;
+OnTouch:
+	pcblockmove 0, true;
+	if ('status_battle[0] == 0) {
+		'status_battle[0] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
+		mapannounce 'map_rev$, "Morroc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: Your bodies are mine to control!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: Your souls are food for my resurrection!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+	}
+	end;
+}
+
+// Event B - right side
+// 1@rev,112,126,0	script	#Battle_1RZ2	HIDDEN_WARP_NPC,10,10
+1@rev,112,116,0	script	#Battle_1RZ2	HIDDEN_WARP_NPC,2,2,{
+	end;
+OnTouch:
+	pcblockmove 0, true;
+	if ('status_battle[1] == 0) {
+		'status_battle[1] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
+	}
+	end;
+}
+
+1@rev,1,1,0	script	#morse_cave_wave_1	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#morse_cave_wave_1");
+	sleep 5000;
+	callsub( S_Spawn,0 );
+	sleep 20000;
+	callsub( S_Spawn,0 );
+	sleep 20000;
+	callsub( S_Spawn,0 );
+	mapannounce 'map_rev$, "Morroc: My soldiers, make them suffer! Feast on their bodies and souls!", bc_map,0xEBFF;
+	sleep 20000;
+	callsub( S_Spawn,0 );
+	sleep 20000;
+	callsub( S_Spawn,0 );
+	mapannounce 'map_rev$, "Morroc: Not enough. Make them feel terror!", bc_map,0xEBFF;
+	sleep 20000;
+	callsub( S_Spawn,0 );
+	sleep 20000;
+	callsub( S_Spawn,0 );
+	mapannounce 'map_rev$, "Morroc: Resist me! Fight to the death!", bc_map,0xEBFF;
+	sleep 20000;
+	callsub( S_Spawn,0 );
+	sleep 15000;
+	callsub( S_Spawn,1 );
+	mapannounce 'map_rev$, "Morroc: Mwa hah hah, I can feel my power returning!", bc_map,0xEBFF;
+	sleep 10000;
+	callsub( S_Spawn,2 );
+	sleep 12000;
+	.@count[0] = mobcount( 'map_rev$, instance_npcname("#morse_cave_wave_1") + "::OnMobDead" );
+	.@count[1] = mobcount( 'map_rev$, instance_npcname("#morse_cave_wave_1") + "::OnMobDead2" );
+	killmonster 'map_rev$, instance_npcname("#morse_cave_wave_1") + "::OnMobDead";
+	killmonster 'map_rev$, instance_npcname("#morse_cave_wave_1") + "::OnMobDead2";
+	disablenpc instance_npcname("#Battle_1RZ1");
+	disablenpc instance_npcname("#Battle_1RZ2");
+	for ( .@i = 1; .@i <= 12; .@i++ )
+		donpcevent instance_npcname( "#Pause Effect RZ" + .@i ) + "::OnStop";
+	sleep 3000;
+	if (.@count[0] > 19 || .@count[1] > 19) {
+		.@reaper$[0] = instance_npcname("Reaper Yanku#RZ Event_3");
+		.@reaper$[1] = instance_npcname("Reaper Yanku#RZ Event_4");
+		enablenpc .@reaper$[0];
+		enablenpc .@reaper$[1];
+		npctalk "You're pathetic.", .@reaper$[0];
+		npctalk "You're pathetic.", .@reaper$[1];
+		sleep 3000;
+		npctalk "Weaklings like you aren't enough food for Lord Morroc", .@reaper$[0];
+		npctalk "Weaklings like you aren't enough food for Lord Morroc", .@reaper$[1];
+		sleep 3000;
+		npctalk "to get the energy he needs for a full recovery.", .@reaper$[0];
+		npctalk "to get the energy he needs for a full recovery.", .@reaper$[1];
+		sleep 3000;
+		npctalk "I'll give you one chance to leave. NOW!", .@reaper$[0];
+		npctalk "I'll give you one chance to leave. NOW!", .@reaper$[1];
+		sleep 3000;
+		disablenpc .@reaper$[0];
+		disablenpc .@reaper$[1];
+		sleep 5000;
+		/* Officials scripts
+		enablenpc instance_npcname("#RZ Move_5a");// warp to prontera,97,167
+		enablenpc instance_npcname("#RZ Move_6a");
+		enablenpc instance_npcname("#RZ Move_7a");
+		enablenpc instance_npcname("#RZ Move_8a");
+		enablenpc instance_npcname("#RZ Move_9a");
+		enablenpc instance_npcname("#RZ Move_10a");
+		enablenpc instance_npcname("#RZ Move_11a");
+		enablenpc instance_npcname("#RZ Move_12a");
+		*/
+		getpartymember 'party_id, 1, .@char_id;
+		getpartymember 'party_id, 2, .@account_id;
+		for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
+			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
+				continue;
+			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
+				pcblockmove .@account_id[.@i], false;
+		}
+		mapwarp 'map_rev$,"prontera",97,167;
+	}
+	else {
+		mapannounce 'map_rev$, "Morroc: You're more resilient than I thought.", bc_map,0xEBFF;
+		sleep 2000;
+		mapannounce 'map_rev$, "Morroc: But enough is enough.", bc_map,0xEBFF;
+		sleep 5000;
+		/* Officials scripts
+		enablenpc instance_npcname("#RZ Move_5");// warp to 1@rev,31,50
+		enablenpc instance_npcname("#RZ Move_6");
+		enablenpc instance_npcname("#RZ Move_7");
+		enablenpc instance_npcname("#RZ Move_8");
+		enablenpc instance_npcname("#RZ Move_9");
+		enablenpc instance_npcname("#RZ Move_10");
+		enablenpc instance_npcname("#RZ Move_11");
+		enablenpc instance_npcname("#RZ Move_12");
+		*/
+		for ( .@i = 9; .@i <= 15; .@i++ )
+			enablenpc instance_npcname( "#RZ Debuff_" + .@i );
+		enablenpc instance_npcname("#Battle_2RZ1");
+		for ( .@i = 1; .@i <= 12; .@i++ )
+			enablenpc instance_npcname( "#Pause Effecto RZ" + .@i );
+		warpparty 'map_rev$,31,50, 'party_id, 'map_rev$,1,1;
+	}
+	for ( .@i = 1; .@i <= 8; .@i++ )
+		disablenpc instance_npcname( "#RZ Debuff_" + .@i );
+	disablenpc instance_npcname("#morse_cave_wave_1");
+	donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStop";
+	donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStop";
+	end;
+
+S_Spawn:
+	.@additionnal_monster = getarg(0);
+	.@label$ = instance_npcname("#morse_cave_wave_1") + "::OnMobDead";
+	monster 'map_rev$,33,128,"Morroc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
+	monster 'map_rev$,42,120,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,34,111,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,25,119,"Morroc's Ghoul",3001,1, .@label$;
+	if (.@additionnal_monster == 1)
+		monster 'map_rev$,33,111,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	else if (.@additionnal_monster == 2)
+		monster 'map_rev$,32,128,"Morroc's Archer Skeleton",3003,1, .@label$;
+
+	if ('status_battle[1] == true) {
+		.@label$ = instance_npcname("#morse_cave_wave_1") + "::OnMobDead2";
+		monster 'map_rev$,112,126,"Morroc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
+		monster 'map_rev$,120,118,"Morroc's Ghoul",3001,1, .@label$;
+		monster 'map_rev$,112,109,"Morroc's Ghoul",3001,1, .@label$;
+		monster 'map_rev$,103,117,"Morroc's Ghoul",3001,1, .@label$;
+		if (.@additionnal_monster == 1)
+			monster 'map_rev$,103,118,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+		else if (.@additionnal_monster == 2)
+			monster 'map_rev$,120,117,"Morroc's Archer Skeleton",3003,1, .@label$;
+	}
+	return;
+
+OnMobDead:
+OnMobDead2:
+	end;
+}
+
+// display icewall every 30s
+1@rev,33,117,0	script	#Pause Effect RZ1	HIDDEN_WARP_NPC,1,1,{
+	end;
+OnTouch:
+	if (countstr( strnpcinfo(0), "Effecto" ) == 0)
+		.@num = atoi( replacestr( strnpcinfo(2), "Pause Effect RZ", "" ) );
+	else
+		.@num = atoi( replacestr( strnpcinfo(2), "Pause Effecto RZ", "" ) ) + 20;
+	if ('pause_effect[.@num] == 0) {
+		'pause_effect[.@num] = 1;
+		specialeffect EF_ICEWALL;
+		initnpctimer;
+	}
+	pcblockmove 0, true;
+	if (.@num < 7 && 'status_battle[0] == 0) {
+		mes "";	// fix me
+		'status_battle[0] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
+		mapannounce 'map_rev$, "Morroc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: Your bodies are mine to control!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: Your souls are food for my resurrection!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+	}
+	else if (.@num >= 7 && .@num < 13 && 'status_battle[1] == 0) {
+		'status_battle[1] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
+	}
+	else if (.@num >= 21 && .@num < 33 && 'status_battle[2] == 0) {
+		mes "";	// fix me
+		'status_battle[2] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
+		mapannounce 'map_rev$, "Morroc: This world of mine is evolving.", bc_map,0xEBFF;
+		sleep2 2000;
+		mapannounce 'map_rev$, "Morroc: My power is returning!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: Your bodies and souls are under my command!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		donpcevent instance_npcname("#morse_cave_wave_2") + "::OnStart";
+	}
+	end;
+OnTimer30000:
+	specialeffect EF_ICEWALL;
+	initnpctimer;
+	end;
+OnStop:
+	stopnpctimer;
+	disablenpc instance_npcname( strnpcinfo(0) );
+	end;
+}
+1@rev,36,118,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ2	HIDDEN_WARP_NPC,1,1
+1@rev,36,121,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ3	HIDDEN_WARP_NPC,1,1
+1@rev,34,122,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ4	HIDDEN_WARP_NPC,1,1
+1@rev,31,121,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ5	HIDDEN_WARP_NPC,1,1
+1@rev,31,118,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ6	HIDDEN_WARP_NPC,1,1
+
+// Event B - right side
+1@rev,112,116,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ7	HIDDEN_WARP_NPC,1,1
+1@rev,114,117,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ8	HIDDEN_WARP_NPC,1,1
+1@rev,114,120,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ9	HIDDEN_WARP_NPC,1,1
+1@rev,111,121,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ10	HIDDEN_WARP_NPC,1,1
+1@rev,109,120,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ11	HIDDEN_WARP_NPC,1,1
+1@rev,109,117,0	duplicate(#Pause Effect RZ1)	#Pause Effect RZ12	HIDDEN_WARP_NPC,1,1
+
+// Battle 2 - waves
+1@rev,31,50,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ1	HIDDEN_WARP_NPC,1,1
+1@rev,36,49,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ2	HIDDEN_WARP_NPC,1,1
+1@rev,37,45,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ3	HIDDEN_WARP_NPC,1,1
+1@rev,30,45,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ4	HIDDEN_WARP_NPC,1,1
+1@rev,29,47,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ5	HIDDEN_WARP_NPC,1,1
+1@rev,33,51,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ6	HIDDEN_WARP_NPC,1,1
+1@rev,38,49,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ7	HIDDEN_WARP_NPC,1,1
+1@rev,34,44,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ8	HIDDEN_WARP_NPC,1,1
+1@rev,32,44,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ9	HIDDEN_WARP_NPC,1,1
+1@rev,29,49,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ10	HIDDEN_WARP_NPC,1,1
+1@rev,35,51,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ11	HIDDEN_WARP_NPC,1,1
+1@rev,37,47,0	duplicate(#Pause Effect RZ1)	#Pause Effecto RZ12	HIDDEN_WARP_NPC,1,1
+
+// Event A - left side - debuff
+1@rev,33,111,0	script	#RZ Debuff_1	HIDDEN_WARP_NPC,12,4,{
+	end;
+OnTouch:
+	pcblockmove 0, true;
+	.@num = atoi( replacestr( strnpcinfo(2), "RZ Debuff_", "" ) );
+	if (.@num < 5 && 'status_battle[0] == 0) {
+		mes "";	// fix me
+		'status_battle[0] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
+		mapannounce 'map_rev$, "Morroc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: Your bodies are mine to control!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: Your souls are food for my resurrection!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+	}
+	else if (.@num >= 5 && .@num < 9 && 'status_battle[1] == 0) {
+		'status_battle[1] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
+	}
+	else if (.@num >= 9 && .@num < 16 && 'status_battle[2] == 0) {
+		mes "";	// fix me
+		'status_battle[2] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
+		mapannounce 'map_rev$, "Morroc: This world of mine is evolving.", bc_map,0xEBFF;
+		sleep2 2000;
+		mapannounce 'map_rev$, "Morroc: My power is returning!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: Your bodies and souls are under my command!", bc_map,0xEBFF;
+		sleep2 3000;
+		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		donpcevent instance_npcname("#morse_cave_wave_2") + "::OnStart";
+	}
+	end;
+}
+1@rev,42,124,0	duplicate(#RZ Debuff_1)	#RZ Debuff_2	HIDDEN_WARP_NPC,4,8
+1@rev,25,124,0	duplicate(#RZ Debuff_1)	#RZ Debuff_3	HIDDEN_WARP_NPC,4,8
+1@rev,33,128,0	duplicate(#RZ Debuff_1)	#RZ Debuff_4	HIDDEN_WARP_NPC,4,4
+
+// Event B - right side - debuff
+1@rev,112,110,0	duplicate(#RZ Debuff_1)	#RZ Debuff_5	HIDDEN_WARP_NPC,12,4
+1@rev,103,122,0	duplicate(#RZ Debuff_1)	#RZ Debuff_6	HIDDEN_WARP_NPC,4,7
+1@rev,120,122,0	duplicate(#RZ Debuff_1)	#RZ Debuff_7	HIDDEN_WARP_NPC,4,7
+1@rev,112,126,0	duplicate(#RZ Debuff_1)	#RZ Debuff_8	HIDDEN_WARP_NPC,4,3
+
+// Battle 2 - waves - debuff
+1@rev,32,47,0	duplicate(#RZ Debuff_1)	#RZ Debuff_9	HIDDEN_WARP_NPC,1,1
+1@rev,24,48,0	duplicate(#RZ Debuff_1)	#RZ Debuff_10	HIDDEN_WARP_NPC,3,5
+1@rev,27,56,0	duplicate(#RZ Debuff_1)	#RZ Debuff_11	HIDDEN_WARP_NPC,4,4
+1@rev,43,47,0	duplicate(#RZ Debuff_1)	#RZ Debuff_12	HIDDEN_WARP_NPC,3,4
+1@rev,41,56,0	duplicate(#RZ Debuff_1)	#RZ Debuff_13	HIDDEN_WARP_NPC,4,4
+1@rev,34,56,0	duplicate(#RZ Debuff_1)	#RZ Debuff_14	HIDDEN_WARP_NPC,2,3
+1@rev,34,39,0	duplicate(#RZ Debuff_1)	#RZ Debuff_15	HIDDEN_WARP_NPC,12,3
+
+// official npcs to block the player from moving
+// Event A - left side
+// 1@rev,28,125,0	script	#RZ Debuff_1	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,28,114,0	script	#RZ Debuff_2	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,39,114,0	script	#RZ Debuff_3	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,39,125,0	script	#RZ Debuff_4	HIDDEN_WARP_NPC,10,10,{
+
+// Event B - right side
+// 1@rev,106,123,0	script	#RZ Debuff_5	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,106,112,0	script	#RZ Debuff_6	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,117,112,0	script	#RZ Debuff_7	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,117,123,0	script	#RZ Debuff_8	HIDDEN_WARP_NPC,10,10,{
+
+// Battle 2 - waves
+// 1@rev,28,53,0	script	#RZ Debuff_9	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,28,42,0	script	#RZ Debuff_10	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,39,42,0	script	#RZ Debuff_11	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,39,53,0	script	#RZ Debuff_12	HIDDEN_WARP_NPC,10,10,{
+
+// 1@rev,28,53,0	script	#RZ Debuff Recovery_1	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,28,42,0	script	#RZ Debuff Recovery_2	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,39,42,0	script	#RZ Debuff Recovery_3	HIDDEN_WARP_NPC,10,10,{
+// 1@rev,39,53,0	script	#RZ Debuff Recovery_4	HIDDEN_WARP_NPC,10,10,{
+
+// Battle 2 - waves
+// 1@rev,34,47,0	script	#Battle_2RZ1	HIDDEN_WARP_NPC,10,10,{
+1@rev,34,47,0	script	#Battle_2RZ1	HIDDEN_WARP_NPC,3,3,{
+	end;
+OnTouch:
+	pcblockmove 0, true;
+	if ('status_battle[2] == 0) {
+		'status_battle[2] = 1;
+		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
+		mapannounce 'map_rev$, "Morroc: This world of mine is evolving.", bc_map,0xEBFF;
+		sleep 2000;
+		mapannounce 'map_rev$, "Morroc: My power is returning!", bc_map,0xEBFF;
+		sleep 3000;
+		mapannounce 'map_rev$, "Morroc: Your bodies and souls are under my command!", bc_map,0xEBFF;
+		sleep 3000;
+		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		donpcevent instance_npcname("#morse_cave_wave_2") + "::OnStart";
+	}
+	end;
+}
+
+1@rev,1,1,0	script	#morse_cave_wave_2	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#morse_cave_wave_2");
+	.@label$ = instance_npcname("#morse_cave_wave_2") + "::OnMobDead";
+	sleep 5000;
+	callsub( S_Spawn );
+	monster 'map_rev$,27,53,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,27,41,"Morroc's Archer Skeleton",3003,1, .@label$;
+	mapannounce 'map_rev$, "Morroc: This power! It feels great! Mwah hah hah!", bc_map,0xEBFF;
+	sleep 25000;
+	callsub( S_Spawn );
+	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
+	mapannounce 'map_rev$, "Morroc: How do you like losing control of your own body? *Chuckle*", bc_map,0xEBFF;
+	sleep 25000;
+	callsub( S_Spawn );
+	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	sleep 25000;
+	callsub( S_Spawn );
+	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	mapannounce 'map_rev$, "Morroc: More! I need more energy!", bc_map,0xEBFF;
+	sleep 25000;
+	callsub( S_Spawn );
+	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	mapannounce 'map_rev$, "Morroc: Mwah hah hah! Fear my army! Struggle harder!", bc_map,0xEBFF;
+	sleep 25000;
+	monster 'map_rev$,34,57,"Morroc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
+	monster 'map_rev$,43,48,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,33,38,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	sleep 25000;
+	callsub( S_Spawn );
+	monster 'map_rev$,27,53,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,27,41,"Morroc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,40,41,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	monster 'map_rev$,40,54,"Morroc's Verit",3005,1, .@label$;
+	mapannounce 'map_rev$, "Morroc: You're pathetic, struggling to survive!", bc_map,0xEBFF;
+	sleep 15000;
+	callsub( S_Spawn );
+	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	monster 'map_rev$,27,41,"Morroc's Verit",3005,1, .@label$;
+	sleep 12000;
+	.@count = mobcount( 'map_rev$, instance_npcname("#morse_cave_wave_2") + "::OnMobDead" );
+	killmonster 'map_rev$, instance_npcname("#morse_cave_wave_2") + "::OnMobDead";
+	disablenpc instance_npcname("#Battle_2RZ1");
+	for ( .@i = 1; .@i <= 12; .@i++ )
+		donpcevent instance_npcname( "#Pause Effecto RZ" + .@i ) + "::OnStop";
+	sleep 3000;
+	if (.@count > 19) {
+		.@reaper$ = instance_npcname("Reaper Yanku#RZ Event_5");
+		enablenpc .@reaper$;
+		npctalk "You're pathetic.", .@reaper$;
+		sleep 3000;
+		npctalk "Weaklings like you aren't enough food for Lord Morroc", .@reaper$;
+		sleep 3000;
+		npctalk "to get the energy he needs for a full recovery.", .@reaper$;
+		sleep 3000;
+		npctalk "I'll give you one chance to leave. NOW!", .@reaper$;
+		sleep 3000;
+		disablenpc .@reaper$;
+		sleep 5000;
+		/* Officials scripts
+		enablenpc instance_npcname("#Move_13a");// warp to prontera,97,167
+		enablenpc instance_npcname("#Move_14a");
+		enablenpc instance_npcname("#Move_15a");
+		enablenpc instance_npcname("#Move_16a");
+		*/
+		getpartymember 'party_id, 1, .@char_id;
+		getpartymember 'party_id, 2, .@account_id;
+		for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
+			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
+				continue;
+			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
+				pcblockmove .@account_id[.@i], false;
+		}
+		mapwarp 'map_rev$,"prontera",97,167;
+	}
+	else {
+		mapannounce 'map_rev$, "Morroc: I'm surprised you've lasted this long. Thank you for helping me recover most of my strength.", bc_map,0xEBFF;
+		sleep 4000;
+		mapannounce 'map_rev$, "Morroc: Good, I feel rejuvenated.", bc_map,0xEBFF;
+		sleep 3000;
+		for ( .@i = 9; .@i <= 15; .@i++ )
+			disablenpc instance_npcname( "#RZ Debuff_" + .@i );
+		getpartymember 'party_id, 1, .@char_id;
+		getpartymember 'party_id, 2, .@account_id;
+		for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
+			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
+				continue;
+			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
+				pcblockmove .@account_id[.@i], false;
+		}
+		// enablenpc instance_npcname("#RZ Debuff Recovery_1");
+		// enablenpc instance_npcname("#RZ Debuff Recovery_2");
+		// enablenpc instance_npcname("#RZ Debuff Recovery_3");
+		// enablenpc instance_npcname("#RZ Debuff Recovery_4");
+		sleep 1000;
+		// enablenpc instance_npcname("#RZ Move_13");// warp to 1@rev,104,48
+		// enablenpc instance_npcname("#RZ Move_14");
+		// enablenpc instance_npcname("#RZ Move_15");
+		// enablenpc instance_npcname("#RZ Move_16");
+		enablenpc instance_npcname("#Battle_3RZ1");
+		mapwarp 'map_rev$,'map_rev$,104,48;
+	}
+	disablenpc instance_npcname("#morse_cave_wave_2");
+	donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStop";
+	end;
+S_Spawn:
+	.@label$ = instance_npcname("#morse_cave_wave_2") + "::OnMobDead";
+	monster 'map_rev$,34,57,"Morroc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
+	monster 'map_rev$,43,48,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,33,38,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,24,48,"Morroc's Ghoul",3001,1, .@label$;
+	return;
+OnMobDead:
+	end;
+}
+
+
+// Display EF_CURSEATTACK effect overhead 'Soul' monster
+// Event A - left side
+1@rev,34,120,0	script	#RZ Memorial Effect 1	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	.@npc_name$ = instance_npcname( strnpcinfo(0) );
+	enablenpc .@npc_name$;
+	getmapxy .@map$,.@x,.@y, UNITTYPE_NPC;
+	monster 'map_rev$,.@x,.@y,('soul_name$ + "'s Soul"),3007,1, .@npc_name$ + "::OnStop";	// EP14_MORS_DUMMY
+	initnpctimer;
+	specialeffect EF_STORMGUST;
+	specialeffect EF_CURSEATTACK;
+	end;
+OnTimer2000:
+	specialeffect EF_CURSEATTACK;
+	initnpctimer;
+	end;
+OnStop:
+	stopnpctimer;
+	killmonster 'map_rev$, instance_npcname( strnpcinfo(0) ) + "::OnStop";
+	disablenpc instance_npcname( strnpcinfo(0) );
+	end;
+}
+// Event B - right side
+1@rev,112,118,0	duplicate(#RZ Memorial Effect 1)	#RZ Memorial Effect 2	HIDDEN_WARP_NPC
+
+// Battle 2 - waves
+1@rev,34,48,0	duplicate(#RZ Memorial Effect 1)	#RZ Memorial Effect 3	HIDDEN_WARP_NPC
+
+// official range
+// 1@rev,34,120,0	script	#RZ Memorial Effect 1	HIDDEN_WARP_NPC,4,4,{
+// 1@rev,112,118,0	duplicate(#RZ Memorial Effect 1)	#RZ Memorial Effect 2	HIDDEN_WARP_NPC,4,4
+// 1@rev,34,48,0	duplicate(#RZ Memorial Effect 1)	#RZ Memorial Effect 3	HIDDEN_WARP_NPC,4,4
+
+// Battle 3
+1@rev,112,48,4	script	Morocc Necromancer#RZ1	4_GHOST_STAND,{ end; }
+
+1@rev,104,47,0	script	#Battle_3RZ1	HIDDEN_WARP_NPC,5,5,{
+	end;
+OnTouch:
+	disablenpc instance_npcname("#Battle_3RZ1");
+	mapannounce 'map_rev$, "Morroc: I can't let you go unscathed!", bc_map,0xEBFF;
+	sleep2 3000;
+	mapannounce 'map_rev$, "Morroc: Hah hah, my Necromancer. I'll leave them to you.", bc_map,0xEBFF;
+	sleep2 3000;
+	mapannounce 'map_rev$, "Morroc: My loyal soldier, I'll trust you with their deaths!", bc_map,0xEBFF;
+	sleep2 3000;
+	.@necromancer$ = instance_npcname("Morocc Necromancer#RZ1");
+	enablenpc .@necromancer$;
+	sleep2 3000;
+	specialeffect EF_TWOHANDQUICKEN,AREA, .@necromancer$;
+	npctalk "Morocc Necromancer: As you wish, My Lord!", .@necromancer$;
+	sleep2 3000;
+	npctalk "Morocc Necromancer: *Chuckle* You still have no idea, do you?", .@necromancer$;
+	sleep2 3000;
+	npctalk "Morocc Necromancer: The energy you generated to protect me while I was hiding within your soul", .@necromancer$;
+	sleep2 3000;
+	npctalk "Morocc Necromancer: has been converted to healing energy for Lord Morroc the moment you entered this world of his!", .@necromancer$;
+	sleep2 3000;
+	npctalk "Morocc Necromancer: *Chuckle* Your stupidity was a blessing for us. We don't need you anymore. DIE!", .@necromancer$;
+	specialeffect EF_BEGINSPELL2,AREA, .@necromancer$;
+	sleep2 3000;
+	disablenpc .@necromancer$;
+	donpcevent instance_npcname("#morse_cave_3") + "::OnStart";
+	end;
+}
+
+1@rev,1,1,0	script	#morse_cave_3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#morse_cave_3");
+	monster 'map_rev$,112,48,"Morocc Necromancer",2999,1, instance_npcname("#morse_cave_3") + "::OnMobDead";// EP14_MORS_BOSSA
+	end;
+OnMobDead:
+	.@necromancer$ = instance_npcname("Morocc Necromancer#RZ1");
+	enablenpc .@necromancer$;
+	sleep 3000;
+	npctalk "Morocc Necromancer: You're stronger than you look.", .@necromancer$;
+	sleep 3000;
+	npctalk "Morocc Necromancer: *Giggle* I'll show you what I'm truly capable of.", .@necromancer$;
+	sleep 3000;
+	npctalk "Morocc Necromancer: Beg me for your lives!", .@necromancer$;
+	sleep 3000;
+	npctalk "Morocc Necromancer: *Giggle*", .@necromancer$;
+	sleep 3000;
+	disablenpc .@necromancer$;
+	monster 'map_rev$,112,48,"Morocc Necromancer",3000,1, instance_npcname("#morse_cave_3") + "::OnMobDead2";// EP14_MORS_BOSSB
+	'boss_id = $@mobid[0];
+	donpcevent instance_npcname("#morse_cave_wave_3") + "::OnStart";
+	donpcevent instance_npcname("#morse_cave_boss_talk") + "::OnStart";
+	end;
+OnMobDead2:
+	donpcevent instance_npcname("#morse_cave_wave_3") + "::OnStop";
+	donpcevent instance_npcname("#morse_cave_boss_talk") + "::OnStop";
+	donpcevent instance_npcname("#morse_cave_wave_3_mobs") + "::OnStop";
+	sleep 3000;
+	.@reaper$ = instance_npcname("Reaper Yanku#RZ Event_6");
+	enablenpc .@reaper$;
+	sleep 1000;
+	npctalk "Reaper Yanku: Sigh, Necromancer, why did you have to die so quickly?", .@reaper$;
+	sleep 3000;
+	npctalk "Reaper Yanku: Don't be so happy!", .@reaper$;
+	sleep 3000;
+	npctalk "Reaper Yanku: Now that Lord Morroc has fully recovered his strength, you're as good as dead!", .@reaper$;
+	sleep 3000;
+	npctalk "Reaper Yanku: We'll meet again. *Chuckle*", .@reaper$;
+	sleep 2000;
+	hideonnpc .@reaper$;
+	enablenpc instance_npcname("#RZ Move_17a");
+	specialeffect EF_THUNDERSTORM,AREA, .@reaper$;	// officially Morocc Necromancer#RZ1 display the effects but they have the same coordinates
+	sleep 1000;
+	specialeffect EF_LORD,AREA, .@reaper$;
+	specialeffect EF_THUNDERSTORM,AREA, .@reaper$;
+	sleep 1000;
+	specialeffect EF_LORD,AREA, .@reaper$;
+	end;
+}
+
+1@rev,1,1,0	script	#morse_cave_wave_3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#morse_cave_wave_3");
+	initnpctimer;
+	end;
+OnTimer7000:
+	stopnpctimer;
+	donpcevent instance_npcname("#morse_cave_wave_3_mobs") + "::OnStart";
+	end;
+OnStop:
+	disablenpc instance_npcname("#morse_cave_wave_3");
+	stopnpctimer;
+	end;
+}
+
+1@rev,1,1,0	script	#morse_cave_boss_talk	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	initnpctimer;
+	end;
+OnTimer8000:
+	.@r = rand(4);
+	if (.@r == 0)
+		unittalk 'boss_id, "Morocc Necromancer: We the soldiers of Morroc know no mercy!";
+	else if (.@r == 1)
+		unittalk 'boss_id, "Morocc Necromancer: You're doing good so far. *Giggle*";
+	else if (.@r == 2)
+		unittalk 'boss_id, "Morocc Necromancer: I see you're weakening, though.";
+	else
+		unittalk 'boss_id, "Morocc Necromancer: Feel the power of his army!";
+	initnpctimer;
+	end;
+OnTimer25000:
+	initnpctimer;
+	end;
+OnStop:
+	disablenpc instance_npcname("#morse_cave_boss_talk");
+	stopnpctimer;
+	end;
+}
+
+1@rev,1,1,0	script	#morse_cave_wave_3_mobs	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#morse_cave_wave_3_mobs");
+	initnpctimer;
+
+	setarray 'coord[0],
+		112,57,
+		121,47,
+		112,38,
+		120,54,
+		119,40,
+		104,40,
+		102,48;
+	'num_coord = getarraysize('coord) / 2;
+	end;
+OnTimer25000:
+	for ( .@i = 0; .@i < 'num_coord; .@i++ ) {
+		.@last = ( 'num_coord - .@i - 1 ) * 2;
+		.@r = rand( 'num_coord - .@i ) * 2;
+		setarray .@xy[0], 'coord[.@r], 'coord[.@r+1];
+		setarray 'coord[.@r], 'coord[.@last], 'coord[.@last+1];
+		setarray 'coord[.@last], .@xy[0], .@xy[1];
+	}
+	.@label$ = instance_npcname("#morse_cave_wave_3_mobs") + "::OnMobDead";
+	if (mobcount( 'map_rev$, .@label$ ) < 100) {	// stop to 100 mobs for performance
+		monster 'map_rev$,'coord[0],'coord[1], "Morroc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
+		monster 'map_rev$,'coord[2],'coord[3], "Morroc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
+		monster 'map_rev$,'coord[4],'coord[5], "Morroc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
+		monster 'map_rev$,'coord[6],'coord[7], "Morroc's Osiris", 3002,1, .@label$;				// EP14_MORS_MOB2
+		monster 'map_rev$,'coord[8],'coord[9], "Morroc's Archer Skeleton", 3003,1, .@label$;	// EP14_MORS_MOB3
+		monster 'map_rev$,'coord[10],'coord[11], "Morroc's Wraith", 3004,1, .@label$;			// EP14_MORS_MOB4
+
+		if (rand(100) < 20)
+			monster 'map_rev$,'coord[12],'coord[12], "Morroc's Archer Skeleton", 3003,1, .@label$;	// EP14_MORS_MOB3
+		else
+			monster 'map_rev$,'coord[12],'coord[13], "Morroc's Verit", 3005,1, .@label$;		// EP14_MORS_MOB5
+
+		// inaccurate
+		areamonster 'map_rev$,102,38,121,57, "#Poison", 3008,1, .@label$;		// EP14_MORS_HIDDEN
+	}
+	initnpctimer;
+	end;
+OnStop:
+	stopnpctimer;
+	killmonster 'map_rev$, instance_npcname("#morse_cave_wave_3_mobs") + "::OnMobDead";
+	disablenpc instance_npcname("#morse_cave_wave_3_mobs");
+	end;
+OnMobDead:
+	end;
+}
+
+// 1@rev,106,57,0	script	#Battle_3RZ2	HIDDEN_WARP_NPC,{
+// 1@rev,120,54,0	script	#Battle_3RZ3	HIDDEN_WARP_NPC,{
+// 1@rev,120,55,0	script	#Battle_3RZ4	HIDDEN_WARP_NPC,{
+// 1@rev,120,56,0	script	#Battle_3RZ5	HIDDEN_WARP_NPC,{
+// 1@rev,120,57,0	script	#Battle_3RZ6	HIDDEN_WARP_NPC,{
+// 1@rev,120,58,0	script	#Battle_3RZ7	HIDDEN_WARP_NPC,{
+
+1@rev,112,56,3	script	#RZ Move_17a	PORTAL,{
+	mes "Do you want to exit through the portal?";
+	next;
+	if (select( "No.", "Yes." ) == 2) {
+		mes "- Teleporting... -";
+		close2;
+		warp "moro_cav",59,63;
+		end;
+	}
+	end;
+
+OnInstanceInit:
+	'map_rev$ = instance_mapname("1@rev");
+	'status_battle[0] = 0;
+	'status_battle[1] = 0;
+	'status_battle[2] = 0;
+
+	// Entrance
+	disablenpc instance_npcname("#RZ Event_1");
+	disablenpc instance_npcname("Reaper Yanku#RZ Event_2");
+
+	// Weakened Morroc
+	disablenpc instance_npcname("#RZ Event_3");
+	disablenpc instance_npcname("Weakened Morroc#RZ1");
+	disablenpc instance_npcname("Weakened Morroc#control");
+
+	// Battle 1
+	disablenpc instance_npcname("Reaper Yanku#RZ Event_3");
+	disablenpc instance_npcname("Reaper Yanku#RZ Event_4");
+	disablenpc instance_npcname("#Battle_1RZ1");
+	disablenpc instance_npcname("#Battle_1RZ2");
+	disablenpc instance_npcname("#RZ Memorial Effect 1");
+	disablenpc instance_npcname("#RZ Memorial Effect 2");
+	disablenpc instance_npcname("#morse_cave_wave_1");
+	for ( .@i = 1; .@i <= 12; .@i++ )
+		disablenpc instance_npcname( "#Pause Effect RZ" + .@i );
+
+	// Battle 2
+	disablenpc instance_npcname("Reaper Yanku#RZ Event_5");
+	disablenpc instance_npcname("#RZ Memorial Effect 3");
+	disablenpc instance_npcname("#morse_cave_wave_2");
+	disablenpc instance_npcname("#Battle_2RZ1");
+	for ( .@i = 1; .@i <= 12; .@i++ )
+		disablenpc instance_npcname( "#Pause Effecto RZ" + .@i );
+
+	// Battle 3
+	disablenpc instance_npcname("#morse_cave_3");
+	disablenpc instance_npcname("#morse_cave_wave_3");
+	disablenpc instance_npcname("Reaper Yanku#RZ Event_6");
+	disablenpc instance_npcname("#Battle_3RZ1");
+	disablenpc instance_npcname("Morocc Necromancer#RZ1");
+	disablenpc instance_npcname("#RZ Move_17a");
+
+	// Debuff - Battle 1 & 2
+	for ( .@i = 1; .@i <= 15; .@i++ )
+		disablenpc instance_npcname( "#RZ Debuff_" + .@i );
+
+	// reload
+	if ('party_id > 0) {
+		getpartymember 'party_id, 1, .@char_id;
+		getpartymember 'party_id, 2, .@account_id;
+		for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
+			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
+				continue;
+			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
+				pcblockmove .@account_id[.@i], false;
+		}
+	}
+	end;
+}
+
+/*
+// Original warps
+// Entrance -> Weakened Morroc
+1@rev,63,181,0	warp2	#RZ Move_30	10,10,1@rev,103,177
+1@rev,47,181,0	warp2	#RZ Move_31	10,10,1@rev,103,177
+1@rev,31,181,0	warp2	#RZ Move_32	10,10,1@rev,103,177
+
+// Weakened Morroc -> Battle Wave 1a
+1@rev,106,172,0	warp2	#RZ Move_1	10,10,1@rev,33,117
+1@rev,106,172,0	warp2	#RZ Move_2	10,10,1@rev,33,117
+1@rev,117,172,0	warp2	#RZ Move_3	10,10,1@rev,33,117
+1@rev,117,183,0	warp2	#RZ Move_4	10,10,1@rev,33,117
+
+// Weakened Morroc -> Battle Wave 1b
+1@rev,106,172,0	warp2	#RZ Move_1	10,10,1@rev,112,116
+1@rev,106,172,0	warp2	#RZ Move_2	10,10,1@rev,112,116
+1@rev,117,172,0	warp2	#RZ Move_3	10,10,1@rev,112,116
+1@rev,117,183,0	warp2	#RZ Move_4	10,10,1@rev,112,116
+
+// Battle Wave 1a -> Battle Wave 2
+1@rev,28,125,0	warp2	#RZ Move_5	10,10,1@rev,31,50
+1@rev,28,114,0	warp2	#RZ Move_6	10,10,1@rev,31,50
+1@rev,39,114,0	warp2	#RZ Move_7	10,10,1@rev,31,50
+1@rev,39,125,0	warp2	#RZ Move_8	10,10,1@rev,31,50
+
+// Battle Wave 1a -> Prontera
+1@rev,28,125,0	warp2	#RZ Move_5a	10,10,prontera,97,167
+1@rev,28,114,0	warp2	#RZ Move_6a	10,10,prontera,97,167
+1@rev,39,114,0	warp2	#RZ Move_7a	10,10,prontera,97,167
+1@rev,39,125,0	warp2	#RZ Move_8a	10,10,prontera,97,167
+
+// Battle Wave 1b -> Battle Wave 2
+1@rev,106,123,0	warp2	#RZ Move_9	10,10,1@rev,31,50
+1@rev,106,112,0	warp2	#RZ Move_10	10,10,1@rev,31,50
+1@rev,117,112,0	warp2	#RZ Move_11	10,10,1@rev,31,50
+1@rev,117,123,0	warp2	#RZ Move_12	10,10,1@rev,31,50
+
+// Battle Wave 1b -> Prontera
+1@rev,106,123,0	warp2	#RZ Move_9a	10,10,prontera,97,167
+1@rev,106,112,0	warp2	#RZ Move_10a	10,10,prontera,97,167
+1@rev,117,112,0	warp2	#RZ Move_11a	10,10,prontera,97,167
+1@rev,117,123,0	warp2	#RZ Move_12a	10,10,prontera,97,167
+
+// Battle Wave 2 -> Final Battle
+1@rev,28,53,0	warp2	#RZ Move_13	10,10,1@rev,104,48
+1@rev,28,42,0	warp2	#RZ Move_14	10,10,1@rev,104,48
+1@rev,39,42,0	warp2	#RZ Move_15	10,10,1@rev,104,48
+1@rev,39,53,0	warp2	#RZ Move_16	10,10,1@rev,104,48
+
+// Battle Wave 2 -> Prontera
+1@rev,28,53,0	warp2	#RZ Move_13a	10,10,prontera,97,167
+1@rev,28,42,0	warp2	#RZ Move_14a	10,10,prontera,97,167
+1@rev,39,42,0	warp2	#RZ Move_15a	10,10,prontera,97,167
+1@rev,39,53,0	warp2	#RZ Move_16a	10,10,prontera,97,167
+*/

+ 1 - 0
npc/re/scripts_athena.conf

@@ -64,6 +64,7 @@ npc: npc/re/instances/HorrorToyFactory.txt
 npc: npc/re/instances/IsleOfBios.txt
 npc: npc/re/instances/LastRoom.txt
 npc: npc/re/instances/MalangdoCulvert.txt
+npc: npc/re/instances/MorseCave.txt
 npc: npc/re/instances/OctopusCave.txt
 npc: npc/re/instances/OldGlastHeim.txt
 npc: npc/re/instances/SarahAndFenrir.txt

+ 1 - 0
src/map/battle.cpp

@@ -6004,6 +6004,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						RE_LVL_DMOD(100);
 						break;
 					case WL_JACKFROST:
+					case NPC_JACKFROST:
 						if (tsc && tsc->data[SC_FREEZING]) {
 							skillratio += 900 + 300 * skill_lv;
 							RE_LVL_DMOD(100);

+ 3 - 0
src/map/skill.cpp

@@ -1564,6 +1564,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 		}
 		break;
 	case WL_JACKFROST:
+	case NPC_JACKFROST:
 		sc_start(src,bl,SC_FREEZE,200,skill_lv,skill_get_time(skill_id,skill_lv));
 		break;
 	case RA_WUGBITE: {
@@ -4909,6 +4910,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case NPC_HELLJUDGEMENT:
 	case NPC_VAMPIRE_GIFT:
 	case NPC_MAXPAIN_ATK:
+	case NPC_JACKFROST:
 	case RK_IGNITIONBREAK:
 	case AB_JUDEX:
 	case WL_SOULEXPANSION:
@@ -9488,6 +9490,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		break;
 
 	case WL_JACKFROST:
+	case NPC_JACKFROST:
 		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
 		map_foreachinrange(skill_area_sub,bl,skill_get_splash(skill_id,skill_lv),BL_CHAR|BL_SKILL,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
 		break;

+ 1 - 0
src/map/status.cpp

@@ -551,6 +551,7 @@ void initChangeTables(void)
 	set_sc( NPC_INVINCIBLEOFF	, SC_INVINCIBLEOFF	, EFST_BLANK		, SCB_SPEED );
 	set_sc( NPC_COMET			, SC_BURNING		, EFST_BURNT		, SCB_MDEF );
 	set_sc_with_vfx( NPC_MAXPAIN	,	 SC_MAXPAIN	, EFST_MAXPAIN	, SCB_NONE );
+	add_sc( NPC_JACKFROST        , SC_FREEZE		  );
 
 	set_sc( CASH_BLESSING		, SC_BLESSING		, EFST_BLESSING		, SCB_STR|SCB_INT|SCB_DEX );
 	set_sc( CASH_INCAGI		, SC_INCREASEAGI	, EFST_INC_AGI, SCB_AGI|SCB_SPEED );