Преглед изворни кода

Initiale release of Instance isle bios (#3041)

Initial release of isle of Bios instance

* Implemented NPC_COMET
* Adjusted skillratio for NPC_COMET. Thanks to @secretdataz !
* Fixed typo, thanks to @Lemongrass3110 and @zackdreaver !
- Replaced Morroc -> Morocc and Reaper Yanku -> Grim Reaper Ankou
* Fixed typo in mob_db.txt, thanks to @talesofragnarok 

Thanks to https://www.divine-pride.net/ for a lot of information !
Atemo пре 7 година
родитељ
комит
5a0b72a7d1

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

@@ -851,7 +851,7 @@
 //705,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDESIREN,Wide Siren's Voice
 706,0,6,4,5,0,0,10,1,no,0,0x2,0,magic,0,0x1,	NPC_VENOMFOG,Venom Fog
 //707,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_MILLENNIUMSHIELD,Millenium Shield 2
-//708,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_COMET,Comet 2
+708,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	NPC_COMET,Comet 2
 //709,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_ICEMINE,Ice Mine
 //710,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_ICEEXPLO,Ice Explosion
 //711,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_FLAMECROSS,Flame Cross

+ 15 - 3
db/re/instance_db.txt

@@ -21,8 +21,20 @@
 14,Sara's Memories,3600,300,1@sara,250,155
 15,Geffen Magic Tournament,7200,300,1@gef,119,209,1@gef_in,1@ge_st
 16,Horror Toy Factory,3600,300,1@xm_d,111,22
-17,Faceworm's Nest,3600,300,1@face,112,374
+17,Faceworm's Nest,3600,300,1@face,112,370
 18,Ghost Palace,3600,300,1@spa,42,196
+// 19,Devil's Tower,3600,300,1@tnm1,50,104,1@tnm2,1@tnm3
+// 20,Assault on the Airship,3600,300,1@air1,244,73,1@air2
 21,Fenrir and Sarah,3600,300,1@glast,367,304
-26,Central Laboratory,3600,300,1@lab,120,30
-27,Last room,3600,300,1@uns,142,30
+// 22,Wave Mode - Forest,3600,300,1@def01,50,21
+// 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
+// 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
+// 30,Charleston in Distress,3600,300,1@mcd,127,282
+// 31,Ritual of Blessing,3600,300,2@mir,101,12
+// 32,Room of Consciousness,3600,300,1@mir,101,10
+// 33,Sky Fortress Invasion,3600,300,1@sthb,54,67,1@sthc,1@sthd

+ 4 - 3
db/re/item_db.txt

@@ -6724,12 +6724,12 @@
 12527,E_Adrenaline_Scroll,Adrenaline Scroll,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "BS_ADRENALINE",5; },{},{}
 12528,E_Convex_Mirror,Convex Mirror,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_BOSSMAPINFO,600000,0; },{},{}
 12529,White_Slim_Potion_Box,White Slim Potion Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 11573,100; },{},{}
-12530,Mastela_Fruit_Box,Mastela Fruit Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
+12530,Mastela_Fruit_Box,Mastela Fruit Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 522,200; },{},{}
 12531,White_Potion_Box,White Potion Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 504,100; },{},{}
 12532,Royal_Jelly_Box2,Royal Jelly Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 526,100; },{},{}
 12533,Blue_Herb_Box2,Blue Herb Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 510,100; },{},{}
-12534,Yggdrasil_Seed_Box,Yggdrasil Seed Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
-12535,Iggdrasilberry_Box,Iggdrasilberry Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
+12534,Yggdrasil_Seed_Box,Yggdrasil Seed Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 608,30; },{},{}
+12535,Iggdrasilberry_Box,Iggdrasilberry Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 607,15; },{},{}
 12536,NY_Rice_Cake_Soup,NY Rice Cake Soup,2,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 12537,Solo_Gift_Basket,Solo Gift Basket,2,1000,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /*getgroupitem(IG_Solo_Gift_Basket);*/ getitem 597,5; getitem 596,3; getitem 561,3; getitem 573,4; getitem 559,10; getitem 560,10; },{},{}
 12538,Couple_Event_Basket,Couple Event Basket,2,2000,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /*getgroupitem(IG_Couple_Event_Basket);*/ getitem 14546,10; getitem 14547,10; getitem 14548,10; getitem 14549,10; getitem 14550,10; },{},{}
@@ -10985,6 +10985,7 @@
 22534,Closedmind_Box,Closed Mind Box,18,10,,1000,,,,0,0xFFFFFFFF,63,2,,,1,,,{ getgroupitem(IG_Sealed_Mind_Box); },{},{}
 22535,WorkerScroll_A,Scroll Summoning Workers(Male),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
 22536,WorkerScroll_B,Scroll Summoning Workers(Female),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
+22537,PrizeOfHero,Prize Of Hero,2,0,,100,,,,0,0xFFFFFFFF,63,2,,,1,,,{ getrandgroupitem(IG_PrizeOfHero,1); },{},{}
 22538,Hanbok_bag,Hanbok bag,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,1,,,{},{},{}
 22540,Runstone_Lux,Lux Anima Runestone,11,2,,100,,,,,0xFFFFFFFF,56,2,,,,,,{ itemskill "RK_LUXANIMA",1; },{},{}
 22541,PC_Room_Coupon_Box_VI,PC Room Coupon Box VI,18,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}

+ 1 - 0
db/re/item_flag.txt

@@ -423,6 +423,7 @@
 17681,2 //Midgard_Lucky_Scroll
 17692,2 //Blessing_Scarlet_Egg
 22514,2 //Candy_Holder
+22537,2 //PrizeOfHero
 22558,2 //Lucky_Bag
 22669,2 //HALLOWEEN_G_BOX
 22685,2 //Solo_Christmas_Gift

+ 30 - 0
db/re/item_misc.txt

@@ -1370,3 +1370,33 @@ IG_Mercenary,12179,1 // SpearMercenary_Scroll7
 IG_Mercenary,12180,1 // SpearMercenary_Scroll8
 IG_Mercenary,12181,1 // SpearMercenary_Scroll9
 IG_Mercenary,12182,1 // SpearMercenary_Scroll10
+// PrizeOfHero
+IG_PrizeOfHero,522,7		// Fruit_Of_Mastela
+IG_PrizeOfHero,547,7		// White_Slim_Potion
+IG_PrizeOfHero,607,17		// Yggdrasilberry
+IG_PrizeOfHero,608,10		// Seed_Of_Yggdrasil
+IG_PrizeOfHero,678,7		// Poison_Bottle
+IG_PrizeOfHero,12075,7		// Str_Dish10
+IG_PrizeOfHero,12080,7		// Int_Dish10
+IG_PrizeOfHero,12085,7		// Vit_Dish10
+IG_PrizeOfHero,12090,7		// Agi_Dish10
+IG_PrizeOfHero,12095,7		// Dex_Dish10
+IG_PrizeOfHero,12100,7		// Luk_Dish10
+IG_PrizeOfHero,12530,2		// Mastela_Fruit_Box
+IG_PrizeOfHero,12534,2		// Yggdrasil_Seed_Box
+IG_PrizeOfHero,12535,1		// Iggdrasilberry_Box
+IG_PrizeOfHero,12549,2		// White_Slim_Pot_Box2
+IG_PrizeOfHero,12550,2		// Poison_Bottle_Box2
+IG_PrizeOfHero,12623,1		// High_Weapon_Box
+IG_PrizeOfHero,12676,7		// Sg_Violet_Potion_Box
+IG_PrizeOfHero,12679,7		// Sg_White_Potion_Box
+IG_PrizeOfHero,12680,7		// Sg_Blue_Potion_Box
+IG_PrizeOfHero,15093,1		// Hero_Plate
+IG_PrizeOfHero,15094,1		// Hero_Magic_Coat
+IG_PrizeOfHero,15095,1		// Hero_Judgement_Shawl
+IG_PrizeOfHero,15096,1		// Hero_Trade_Mail
+IG_PrizeOfHero,15097,1		// Hero_Hidden_Cloth
+IG_PrizeOfHero,15098,1		// Hero_Taget_Suits
+IG_PrizeOfHero,22035,2		// Vet_Nepen_Heel
+IG_PrizeOfHero,22036,2		// Vet_SliverFox_Boots
+IG_PrizeOfHero,22037,2		// Vet_Ungo_Boots

+ 10 - 10
db/re/mob_db.txt

@@ -2167,15 +2167,15 @@
 //3007,EP14_MORS_DUMMY
 //3008,EP14_MORS_HIDDEN
 //3009,EP14_3_DEATH_BOSS
-//3010,EP14_3_DEATH_A_MOB1
-//3011,EP14_3_DEATH_A_MOB2
-//3012,EP14_3_DEATH_A_MOB3
-//3013,EP14_3_DEATH_B_MOB1
-//3014,EP14_3_DEATH_B_MOB2
-//3015,EP14_3_DEATH_B_MOB3
-//3016,EP14_3_DEATH_C_MOB1
-//3017,EP14_3_DEATH_C_MOB2
-//3018,EP14_3_DEATH_C_MOB3
+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
+3012,EP14_3_DEATH_A_MOB3,Corrupt Familiar,Corrupt Familiar,158,222550,1,12390,16104,1,1002,1381,240,70,86,85,75,53,100,50,10,12,0,5,41,0x0000085,120,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
+3013,EP14_3_DEATH_B_MOB1,Corrupt Orc Warrior,Corrupt Orc Warrior,158,300000,1,12390,16104,1,1066,1445,240,60,150,85,150,40,122,70,10,12,1,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
+3014,EP14_3_DEATH_B_MOB2,Corrupt Desert Wolf,Corrupt Desert Wolf,158,292450,1,12390,16104,1,1036,1415,240,50,120,85,110,55,130,70,10,12,1,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
+3015,EP14_3_DEATH_B_MOB3,Corrupt Phen,Corrupt Phen,158,284110,1,12390,16104,1,1026,1405,240,100,110,85,95,70,115,70,10,12,1,5,41,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
+3016,EP14_3_DEATH_C_MOB1,Corrupt Orc Zombie,Corrupt Orc Zombie,158,375000,1,12390,16104,1,1096,1475,150,150,180,145,202,40,88,30,10,12,1,7,49,0x0000085,170,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
+3017,EP14_3_DEATH_C_MOB2,Corrupt Verit,Corrupt Verit,158,352715,1,12390,16104,1,1082,1461,200,100,166,87,150,60,150,130,10,12,1,2,49,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
+3018,EP14_3_DEATH_C_MOB3,Corrupt Megalodon,Corrupt Megalodon,158,347413,1,12390,16104,1,1073,1452,240,300,157,80,140,90,209,84,10,12,1,5,49,0x0000085,170,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
 //3019,CELINE_KIMI
 3020,FIRE_CONDOR,Fire Condor,Fire Condor,141,125114,1,7021,7481,1,1364,2565,71,45,104,72,66,10,113,52,10,12,1,2,43,0x0000081,110,1148,648,480,0,0,0,0,0,0,0,6691,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 3021,FIRE_SAND_MAN,Fire Sand Man,Fire Sandman,143,130501,1,7207,7734,1,1404,2760,122,73,84,36,25,55,124,35,10,12,1,0,63,0x003885,150,1672,720,288,0,0,0,0,0,0,0,6694,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -2186,7 +2186,7 @@
 3026,FIREPIT,Fire Pit,Fire Pit,17,10,1,58,43,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x170000,400,2612,912,288,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
 3027,FULBUK,Fire Bug,Fire Bug,150,234,1,58,47,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x0000001,120,1288,288,768,0,0,0,0,0,0,0,6689,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 3028,SONIA,Sonia,Sonia,17,20,1,58,43,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x170000,400,2612,912,288,0,0,0,0,0,0,0,6690,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-//3029,GRIM_REAPER_ANKOU
+3029,GRIM_REAPER_ANKOU,Grim Reaper Ankou,Reaper Yanku,159,50000000,1553,300000,330000,1,1500,2500,200,70,200,100,200,200,220,100,10,12,2,1,89,0x6200085,200,900,864,480,0,0,0,0,0,0,0,607,500,603,200,604,200,22537,10000,0,0,522,200,0,0,0,0,0,0,0,0
 //3030,STANDING_SOUL
 //3031,MUTANT_NECROMANCER
 //3032,MUTANT_GHOUL

+ 5 - 0
db/re/mob_skill_db.txt

@@ -11079,6 +11079,11 @@
 
 3026,Fire Pit@NPC_DEATHSUMMON,dead,718,3,10000,0,10000,no,self,always,0,3027,3027,3027,,,,
 
+// Episode 14.3: Isle of Bios
+3029,Grim Reaper Ankou@NPC_COMET,attack,708,3,1000,10000,75000,no,self,always,0,,,,,,,
+3029,Grim Reaper Ankou@NPC_DARKCROSS,attack,338,10,500,2000,12000,no,target,always,0,,,,,,,
+3029,Grim Reaper Ankou@NPC_DRAGONFEAR,attack,659,5,1000,3000,30000,no,self,always,0,,,,,,,
+
 3038,Hidden Mob 7@NPC_INVISIBLE,idle,353,1,10000,0,30000,yes,self,always,0,,,,,,,
 3038,Hidden Mob 7@NPC_INVISIBLE,attack,353,1,10000,0,30000,yes,self,always,0,,,,,,,
 // 3038,Hidden Mob 7@NPC_HELLBURNING,idle,719,1,10000,0,3000,yes,self,always,0,,,,,,,

+ 5 - 5
db/re/quest_db.txt

@@ -3183,11 +3183,11 @@
 15002,72000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Memorial dungeon: Sara's Memory"
 15003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Adventurer leon"
 
-// Episode 14.3: Bios Island
-15005,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Memorial Dungeon: Bios Island"
-15006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Bios Island Exploration"
-15007,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Memorial Dungeon: Bios Island"
-15008,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Memorial Dungeon: Bios Island"
+// Episode 14.3: Isle of Bios
+15005,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Memorial Dungeon: Isle of Bios"
+15006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Isle of Bios Exploration"
+15007,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Memorial Dungeon: Isle of Bios"
+15008,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Memorial Dungeon: Isle of Bios"
 //15025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
 //15026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""
 //15027,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,""

+ 1 - 1
db/re/skill_db.txt

@@ -851,7 +851,7 @@
 //705,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDESIREN,Wide Siren's Voice
 706,0,6,4,5,0,0,10,1,no,0,0x2,0,magic,0,0x1,	NPC_VENOMFOG,Venom Fog
 //707,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_MILLENNIUMSHIELD,Millenium Shield 2
-//708,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_COMET,Comet 2
+708,11,8,2,0,0x2,9,5,-20,yes,0,0,0,magic,2,0x400,	NPC_COMET,Comet 2
 //709,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_ICEMINE,Ice Mine
 //710,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_ICEEXPLO,Ice Explosion
 //711,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_FLAMECROSS,Flame Cross

+ 1 - 0
db/re/skill_unit_db.txt

@@ -109,6 +109,7 @@
 670,0xc7,    ,  1, 5:5:5:5:5:5:5:5:5:13,1000,all,0x008	//NPC_EVILLAND
 
 706,0xfd,     ,  2, 0,1000,enemy, 0x018	//NPC_VENOMFOG
+708,0x86,     ,  0, 9,1000,enemy, 0x018	//NPC_COMET
 
 2044,0xca,    ,  0, 2,1000,all,   0x018	//AB_EPICLESIS
 

+ 4 - 4
npc/re/instances/FacewormsNest.txt

@@ -405,19 +405,19 @@ dali,72,55,4	script	Interdimensional Device	CLEAR_NPC,{
 	switch( checkquest(12325,PLAYTIME) ) {
 	case -1:
 		switch( instance_enter(.@md_name$) ) {
-		case 3:
+		case IE_OTHER:
 			mes "[Interdimensional Device]";
 			mes "An unknown error has occurred.";
 			close;
-		case 2:
+		case IE_NOINSTANCE:
 			mes "[Interdimensional Device]";
 			mes "The passage for space travel is not activated yet.";
 			close;
-		case 1:// Custom text
+		case IE_NOMEMBER:// Custom text
 			mes "[Interdimensional Device]";
 			mes "You are not allowed to access the device.";
 			close;
-		case 0:
+		case IE_OK:
 			mapannounce "dali", getpartyname(.@party_id) + " party's party member " + strcharinfo(0) + " enters " + .@md_name$ + ".",bc_map,"0x00ff99";
 			setquest 12325;// Faceworm's Nest after-effects
 			//warp "1@face",112,374;

+ 772 - 0
npc/re/instances/IsleOfBios.txt

@@ -0,0 +1,772 @@
+//===== rAthena Script =======================================
+//= Isle Of Bios
+//===== Description: =========================================
+//= [Walkthrough Conversion]
+//= Isle Of Bios Instance
+//===== Changelogs: ==========================================
+//= 1.0 First version. [Capuche]
+//============================================================
+
+moro_cav,50,64,5	script	Yellow Seed#bios	CLEAR_NPC,{
+	if (BaseLevel < 160) {
+		mes "^ff0000Characters below Level 160 cannot enter this dungeon.^000000";
+		close;
+	}
+	if (isbegin_quest(15006) == 0) {
+		mes "^ff0000You first must meet Wandering Old Man to gain access to this dungeon.^000000";
+		close;
+	}
+	.@party_id = getcharid(1);
+	if (.@party_id < 1) {
+		mes "^ff0000You first must form/join a party of at least 1 person to enter this dungeon.^000000";
+		close;
+	}
+	switch( checkquest(15005,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		if (checkquest(15007,PLAYTIME) == 2) {// 5 mins to re-enter
+			mes "^ff0000This Memorial Dungeon cannot be accessed for 23 hours after your last visit.^000000";
+			close;
+		}
+		switch( checkquest(15008,PLAYTIME) ) {
+		case -1:
+			break;
+		case 0:
+		case 1:
+			mes "^0000ffThis Memorial Dungeon cannot be accessed for 23 hours after your last visit.^000000";
+			close;
+		case 2:
+			break;
+		}
+		break;
+	case 2:
+		erasequest 15005;// Memorial Dungeon: Isle of Bios
+		erasequest 15007;// Memorial Dungeon: Isle of Bios
+		if (isbegin_quest(15008) > 0)
+			erasequest 15008;// Memorial Dungeon: Isle of Bios
+		break;
+	}
+	if (getpartyleader(.@party_id,2) == getcharid(0))
+		.@create$ = "Create Memorial dungeon.";
+	switch( select( .@create$, "Enter Isle of Bios.", "Cancel." ) ) {
+	case 1:
+		instance_create("Isle of Bios");
+		mes "^ff0000Created the Memorial dungeon.^000000";
+		mes "^ff0000Please click and press Enter again.^000000";
+		close;
+	case 2:
+		switch( instance_enter("Isle of Bios") ) {
+		case IE_NOMEMBER:
+		case IE_NOINSTANCE:
+		case IE_OTHER:
+			if (getpartyleader(getcharid(1),2) != getcharid(0)) {
+				mes "^ff0000Please note that This Memorial Dungeon cannot be accessed for 23 hours after your last visit.^000000";
+				next;
+			}
+			mes "^ff0000Your party leader has not yet created a Crack of Time.^000000";
+			close;
+		case IE_OK:
+			mapannounce "moro_cav", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering Isle of Bios.",bc_map,"0x00FF99";
+			if (isbegin_quest(15005) == 0) {
+				setquest 15005;// Memorial Dungeon: Isle of Bios
+				setquest 15007;// Memorial Dungeon: Isle of Bios
+			}
+			end;
+		}
+	case 3:
+		end;
+	}
+	end;
+
+OnInit:
+	while(true) {
+		sleep 500;
+		specialeffect EF_ENHANCE;
+	}
+	end;
+}
+
+moro_cav,45,60,5	script	Wandering Old Man#sara	4_M_EINOLD,{
+	if (BaseLevel < 160) {
+		mes "[Wandering Old Man]";
+		mes "...";
+		mes "I'm afraid you're not up for this yet.";
+		mes "You have to be at least Level 160.";
+		close;
+	}
+	if (isbegin_quest(15006) == 0) {
+		mes "[Wandering Old Man]";
+		mes "...Where am I?";
+		next;
+		mes "[Wandering Old Man]";
+		mes "I don't know when it began...";
+		mes "The same nightmare has been plaguing me for a long time.";
+		next;
+		mes "[Wandering Old Man]";
+		mes "In my nightmare, Demon King Morocc awakens from his century-long slumber and fills the world with darkness and horror.";
+		next;
+		mes "[Wandering Old Man]";
+		mes "I couldn't shake off the vivid images I saw in that nightmare. I've wandered off and around like a madman and finally arrived here.";
+		next;
+		mes "[Wandering Old Man]";
+		mes "I saw this place in my dream. It's where Demon God Morocc awakens from his slumber. My dream was showing me a possible future.";
+		next;
+		mes "[Wandering Old Man]";
+		mes "If my dream really is a premonition, the forces of Demon God Morocc's are within that yellow seed.";
+		next;
+		mes "[Wandering Old Man]";
+		mes "I tried to enter the seed, but to no avail: I'm just too old and weak. But perhaps you can.";
+		next;
+		mes "[Wandering Old Man]";
+		mes "Please investigate that yellow seed.";
+		mes "It's too dangerous for you to go alone. You should take at least one comrade with you.";
+		setquest 15006;// Isle of Bios Exploration
+		completequest 15006;// Isle of Bios Exploration
+		close;
+	}
+	mes "[Wandering Old Man]";
+	mes "Please investigate that yellow seed.";
+	mes "It's too dangerous for you to go alone. You should take at least one comrade with you.";
+	close;
+}
+
+// warps
+1@dth1,291,102,0	warp2	warp1#bios1	2,2,1@dth2,17,93
+1@dth2,291,102,0	warp2	warp1#bios2	2,2,1@dth3,45,68
+
+// zone 1
+1@dth1,74,94,3	script	Grim Reaper Ankou#bios1	3029,{ end; }
+1@dth1,71,97,3	duplicate(Grim Reaper Ankou#bios1)	Zeith#bios1	4_M_GUILLOTINE
+1@dth1,67,97,5	duplicate(Grim Reaper Ankou#bios1)	Vrid#bios1	4_M_KNIGHT_BLACK
+// 1@dth1,67,97,5	script	Vrid#bios1	4_M_KNIGHT_BLACK,5,7,{// official
+
+// 1@dth1,67,97,5	script	start1#bios1	HIDDEN_WARP_NPC,{// official
+1@dth1,67,97,5	script	start1#bios1	HIDDEN_WARP_NPC,5,7,{
+	end;
+OnTouch_:
+	disablenpc instance_npcname("start1#bios1");
+	'zeith$ = instance_npcname("Zeith#bios1");
+	'vrid$ = instance_npcname("Vrid#bios1");
+	'reaper$ = instance_npcname("Grim Reaper Ankou#bios1");
+	initnpctimer;
+	npctalk "Vrid: Ah, someone else has come to join us.", 'vrid$;
+	end;
+OnTimer2500:
+	npctalk "Vrid: Did you also come to stop Morocc's resurrection?", 'vrid$;
+	end;
+OnTimer5000:
+	npctalk "Vrid: I'm Vrid and this is Zeith, from Prontera. We've been traveling around the world, fighting for justice.", 'vrid$;
+	end;
+OnTimer7500:
+	npctalk "Vrid: Hey, Zeith. Say something.", 'vrid$;
+	end;
+OnTimer10000:
+	npctalk "Zeith: ...", 'zeith$;
+	end;
+OnTimer12500:
+	npctalk "Zeith: I'm Zeith.", 'zeith$;
+	end;
+OnTimer15000:
+	npctalk "Zeith: ...", 'zeith$;
+	end;
+OnTimer17500:
+	npctalk "Vrid: Don't mind him. He's not so quiet when there are only two of us.", 'vrid$;
+	end;
+OnTimer19500:
+	npctalk "Zeith: ...You talk enough for both of us.", 'zeith$;
+	end;
+OnTimer21000:
+	npctalk "Vrid: We only came because the old geezer down below kept rambling about Morocc's resurrection.", 'vrid$;
+	end;
+OnTimer23500:
+	npctalk "Vrid: Err, what's this place? I just touched the seed, and suddenly the scenery changed.", 'vrid$;
+	end;
+OnTimer26000:
+	npctalk "Vrid: Holy cow, are we flying in the sky?!", 'vrid$;
+	end;
+OnTimer28500:
+	npctalk "???: *Chuckle* Do you want to know where you are?", 'reaper$;
+	end;
+OnTimer31000:
+	npctalk "Zeith: Who's there?!", 'zeith$;
+	end;
+OnTimer33500:
+	enablenpc 'reaper$;
+	npctalk "Grim Reaper Ankou: *Chuckle* This is the Isle of Bios, a place I conjured up in my mind.", 'reaper$;
+	end;
+OnTimer36000:
+	npctalk "Grim Reaper Ankou: You've walked into the trap, making yourself willing sacrifices for my Lord Morocc. Aren't you afraid of dying?", 'reaper$;
+	end;
+OnTimer38500:
+	npctalk "Vrid: Pah! If I was I wouldn't have come willingly, would I?", 'vrid$;
+	end;
+OnTimer41000:
+	npctalk "Vrid: Whoever you are, we'll kill you before you do!", 'vrid$;
+	end;
+OnTimer43500:
+	npctalk "Grim Reaper Ankou: Don't tempt me, human.", 'reaper$;
+	end;
+OnTimer46000:
+	npctalk "Grim Reaper Ankou: I want to watch you die slowly and painfully. *Chuckle*", 'reaper$;
+	end;
+OnTimer48500:
+	disablenpc 'reaper$;
+	end;
+OnTimer51000:
+	npctalk "Vrid: Who's he? Is he trying to resurrect Morocc? ", 'vrid$;
+	end;
+OnTimer53500:
+	npctalk "Vrid: Let's chase him! Zeith, hurry!", 'vrid$;
+	end;
+OnTimer54000:
+	disablenpc 'vrid$;
+	end;
+OnTimer56000:
+	npctalk "Zeith: ...Ack.", 'zeith$;
+	end;
+OnTimer58500:
+	npctalk "Zeith: I hate running.", 'zeith$;
+	end;
+OnTimer61000:
+	disablenpc 'zeith$;
+	end;
+OnTimer66000:
+	stopnpctimer;
+	mapannounce 'map_dth1$, "System: Eliminate all the enemies on the island and exit through the door on the other side to move on to the next area.",bc_map,"0xFFFF00";
+	'zeith$ = 'vrid$ = 'reaper$ = "";
+	end;
+}
+
+1@dth1,1,1,0	script	mobs#bios1	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	.@label$ = instance_npcname("mobs#bios1") + "::OnMyMobDead";
+	for ( .@mob_id = 3010; .@mob_id < 3013; .@mob_id++ ) {
+		switch(.@mob_id) {
+		case 3010:		// Corrupt Orc Baby
+			setarray .@coord[0],
+				90,94, 153,76, 121,53, 135,50, 145,107, 132,126, 101,125, 119,144, 124,164, 192,145, 194,116,
+				203,131, 214,142, 196,156, 217,129, 227,150, 215,109, 240,130, 252,105, 249,144, 249,155, 232,87,
+				316,103, 245,71, 246,71, 210,62, 214,53, 211,88;
+			break;
+		case 3011:		// Corrupt Baby Desert Wolf
+			setarray .@coord[0],
+				90,94, 121,69, 153,76, 166,80, 131,101, 145,107, 108,156, 141,143, 165,130, 203,151,
+				203,162, 219,151, 203,162, 206,169, 219,171, 227,150, 238,117, 240,140, 274,104, 306,103,
+				237,80, 224,62, 233,57;
+			break;
+		case 3012:		// Corrupt Familiar
+			setarray .@coord[0],
+				143,49, 156,46, 170,67, 170,67, 131,101, 144,125, 101,125, 108,156, 135,152, 144,164,
+				184,130, 204,112, 227,150, 205,98, 225,103, 228,124, 243,106, 225,89, 297,103, 223,72,
+				232,69, 225,54, 211,73;
+			break;
+		}
+		.@size = getarraysize(.@coord);
+		for ( .@i = 0; .@i < .@size; .@i += 2 )
+			monster 'map_dth1$, .@coord[.@i], .@coord[.@i+1], "--ja--", .@mob_id,1, .@label$;
+	}
+	end;
+
+OnMyMobDead:
+	.@count = mobcount( 'map_dth1$,instance_npcname("mobs#bios1") + "::OnMyMobDead" );
+	if (.@count == 10 || .@count == 5)
+		mapannounce 'map_dth1$, "System: " + .@count + " monsters remain on the island.",bc_map,"0xFFFF00";
+	else if (.@count == 1)
+		mapannounce 'map_dth1$, "System: 1 last monster remains on the island.",bc_map,"0xFFFF00";
+	else if (.@count == 0) {
+		mapannounce 'map_dth1$, "System: You have eliminated all the monsters. Use the exit at 3 o'clock to move on to the next area.",bc_map,"0xFFFF00";
+		disablenpc instance_npcname("mobs#bios1");
+		enablenpc instance_npcname("warp1#bios1");
+		enablenpc instance_npcname("start1#bios2");
+		donpcevent instance_npcname("mobs#bios2") + "::OnStart";	// spawn at entrance
+	}
+	end;
+}
+
+// zone 2
+1@dth2,67,97,0	script	start1#bios2	HIDDEN_WARP_NPC,5,5,{
+	end;
+OnTouch_:
+	disablenpc instance_npcname("start1#bios2");
+	mapannounce 'map_dth2$, "System: Eliminate all the enemies on the island and exit through the door on the other side to move on to the next area.",bc_map,"0xFFFF00";
+	end;
+}
+
+1@dth2,1,1,0	script	mobs#bios2	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("mobs#bios2");
+	.@label$ = instance_npcname("mobs#bios2") + "::OnMyMobDead";
+	for ( .@mob_id = 3013; .@mob_id < 3016; ++.@mob_id ) {
+		switch(.@mob_id) {
+		case 3013:		// Corrupt Orc Warrior
+			setarray .@coord[0],
+				90,94, 153,76, 116,66, 133,47, 145,107, 137,134, 101,125, 119,144, 124,164, 194,116,
+				203,131, 211,88, 215,109, 214,142, 192,145, 196,156, 217,129, 227,150, 230,89, 210,62,
+				214,53, 246,71, 248,81, 252,105, 246,126, 249,144, 249,155, 316,103;
+			break;
+		case 3014:		// Corrupt Desert Wolf
+			setarray .@coord[0],
+				90,94, 121,69, 153,76, 165,84, 145,107, 131,101, 108,156, 138,140, 165,130, 203,151,
+				203,162, 219,151, 206,169, 203,162, 227,150, 222,164, 238,117, 237,80, 224,62, 233,57,
+				236,138, 274,104, 306,103;
+			break;
+		case 3015:		// Corrupt Phen
+			setarray .@coord[0],
+				142,54, 156,46, 170,67, 170,67, 131,101, 101,125, 108,156, 135,152, 144,164, 135,131,
+				184,130, 204,112, 205,98, 225,103, 225,89, 227,150, 232,69, 223,72, 212,75, 225,54,
+				247,110, 232,126, 297,103;
+			break;
+		}
+		.@size = getarraysize(.@coord);
+		for ( .@i = 0; .@i < .@size; .@i += 2 )
+			monster 'map_dth2$, .@coord[.@i], .@coord[.@i+1], "--ja--", .@mob_id,1, .@label$;
+	}
+	end;
+
+OnMyMobDead:
+	.@count = mobcount( 'map_dth2$,instance_npcname("mobs#bios2") + "::OnMyMobDead" );
+	if (.@count == 10 || .@count == 5)
+		mapannounce 'map_dth2$, "System: " + .@count + " monsters remain on the island.",bc_map,"0xFFFF00";
+	else if (.@count == 1)
+		mapannounce 'map_dth2$, "System: 1 last monster remains on the island.",bc_map,"0xFFFF00";
+	else if (.@count == 0) {
+		mapannounce 'map_dth2$, "System: You have eliminated all the monsters. Use the exit at 3 o'clock to move on to the next area.",bc_map,"0xFFFF00";
+		disablenpc instance_npcname("mobs#bios2");
+		enablenpc instance_npcname("warp1#bios2");
+		enablenpc instance_npcname("Zeith#bios3");
+		enablenpc instance_npcname("Vrid#bios3");
+		enablenpc instance_npcname("event_boss#bios3");
+	}
+	end;
+}
+
+// zone 3
+// 1@dth3,64,74,5	script	Vrid#bios3	4_M_KNIGHT_BLACK,5,7,{// official
+1@dth3,64,74,5	script	Vrid#bios3	4_M_KNIGHT_BLACK,{
+	if ('reward == 1) {
+		mes "[Vrid]";
+		mes "I came by";
+		mes "this Hero Token by accident.";
+		mes "I want to give it to you. You deserve it.";
+		next;
+		mes "[Vrid]";
+		mes "Let's get out of this creepy place!";
+		close2;
+		getitem 6684,1;// Token Of Hero
+		if (ep14_3_isle == 0)
+			ep14_3_isle = 1;
+		if (checkquest(15007,PLAYTIME) == 0 || checkquest(15007,PLAYTIME) == 1)
+			setquest 15008;// Memorial Dungeon: Isle of Bios
+		warp "moro_cav",45,63;
+	}
+	end;
+}
+
+1@dth3,64,74,5	script	event_boss#bios3	HIDDEN_WARP_NPC,5,7,{
+	end;
+OnTouch_:
+	disablenpc instance_npcname("event_boss#bios3");
+	'party_id = getcharid(1);
+	donpcevent instance_npcname("freeze#bios3") + "::OnStart";
+	end;
+}
+
+// 1@dth3,69,67,0	script	freeze#bios3	HIDDEN_WARP_NPC,30,30,{// official
+1@dth3,1,1,0	script	freeze#bios3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("freeze#bios3");
+	'reaper3$ = instance_npcname("Grim Reaper Ankou#bios3");
+	'zeith3$ = instance_npcname("Zeith#bios3");
+	'vrid3$ = instance_npcname("Vrid#bios3");
+	initnpctimer;
+	npctalk "Vrid: You're lucky to be here. I got totally lost the moment I entered that maze.", 'vrid3$;
+	end;
+OnTimer2500:
+	npctalk "Vrid: If it weren't for Zeith, I'd still be in there, wandering. Thanks, Zeith.", 'vrid3$;
+	end;
+OnTimer5000:
+	npctalk "Zeith: ...Something's been bothering me.", 'zeith3$;
+	end;
+OnTimer7500:
+	npctalk "Vrid: What's up?", 'vrid3$;
+	end;
+OnTimer10000:
+	npctalk "Zeith: I've got the feeling that the monsters were growing stronger with time.", 'zeith3$;
+	end;
+OnTimer12500:
+	npctalk "Zeith: Just like children growing up into adults.", 'zeith3$;
+	end;
+OnTimer15000:
+	npctalk "Vrid: Um, I think you're right.", 'vrid3$;
+	end;
+OnTimer17500:
+	npctalk "Vrid: They're all small in the beginning, and then we faced bigger and stronger ones over time.", 'vrid3$;
+	end;
+OnTimer20000:
+	npctalk "Vrid: To me, that sounds natural. What are you worried about?", 'vrid3$;
+	end;
+OnTimer22500:
+	npctalk "Zeith: Well, I'm curious about the monster we'll face now.", 'zeith3$;
+	end;
+OnTimer25000:
+	npctalk "Zeith: Whether they're stronger versions of their original selves, or something completely different.", 'zeith3$;
+	end;
+OnTimer27000:
+	enablenpc 'reaper3$;
+	end;
+OnTimer27500:
+	npctalk "Grim Reaper Ankou: *Chuckle* At least one of you has a good head on his shoulders.", 'reaper3$;
+	end;
+OnTimer30000:
+	npctalk "Vrid: You again?", 'vrid3$;
+	end;
+OnTimer32500:
+	npctalk "Grim Reaper Ankou: Are you curious about your next adversaries?", 'reaper3$;
+	end;
+OnTimer35000:
+	npctalk "Grim Reaper Ankou: Ahead of you is an army of the immortal.", 'reaper3$;
+	end;
+OnTimer37500:
+	npctalk "Grim Reaper Ankou: *Chuckle* Come out, my soldiers!", 'reaper3$;
+	end;
+OnTimer37700:
+	specialeffect EF_READYPORTAL,AREA,'reaper3$;
+	end;
+OnTimer40000:
+	for ( .@i = 1; .@i <= 3; ++.@i ) {
+		for ( .@j = 1; .@j <= 8; ++.@j )
+			enablenpc instance_npcname( "Corrupt Orc Zombie#" + .@j + "bio" + .@i );
+	}
+	end;
+OnTimer42000:
+	npctalk "Vrid: Shut up, you fiend! We don't have time for your lackeys!", 'vrid3$;
+	end;
+OnTimer45000:
+	npctalk "Vrid: I'll get rid of you myself!", 'vrid3$;
+	end;
+OnTimer47500:
+	npctalk "Grim Reaper Ankou: Right back at you, bigmouth.", 'reaper3$;
+	end;
+OnTimer50000:
+	npctalk "Grim Reaper Ankou: I'll teach you how terrifying it is to be helpless in the face of horror!", 'reaper3$;
+	end;
+OnTimer52500:
+	specialeffect EF_STORMGUST,AREA,'reaper3$;
+	end;
+OnTimer52700:
+	specialeffect EF_FREEZED,AREA,'zeith3$;
+	specialeffect EF_FREEZED,AREA,'vrid3$;
+	specialeffect EF_FIREHIT,AREA,'zeith3$;
+	specialeffect EF_FIREHIT,AREA,'vrid3$;
+	setnpcdisplay( 'vrid3$, 4_M_FROZEN_KN );
+	setnpcdisplay( 'zeith3$, 4_M_FROZEN_GC );
+
+	getpartymember 'party_id, 0, .@player_name$;
+	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]) == true) {
+			getmapxy .@map$,.@x,.@y, UNITTYPE_PC, .@player_name$[.@i];
+			if (.@map$ == 'map_dth3$ && distance(.@x,.@y,69,67) < 30)
+				sc_start SC_FREEZE,17500,0,10000, (SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF), .@account_id[.@i];
+		}
+	}
+	end;
+OnTimer55000:
+	npctalk "Vrid: Ugh! W-what's going on?! I-I can't move!", 'vrid3$;
+	end;
+OnTimer57500:
+	npctalk "Zeith: N-neither can I! I can't move my feet!", 'zeith3$;
+	end;
+OnTimer60000:
+	npctalk "Grim Reaper Ankou: On the Isle of Bios, each day is a lifetime.", 'reaper3$;
+	end;
+OnTimer62500:
+	npctalk "Grim Reaper Ankou: You must have noticed my soldiers have grown up before the sunset.", 'reaper3$;
+	end;
+OnTimer65000:
+	npctalk "Grim Reaper Ankou: After nightfall, they've reached the final stage of their development: life beyond death.", 'reaper3$;
+	end;
+OnTimer67500:
+	npctalk "Grim Reaper Ankou: That's right. It's time for you to experience death.", 'reaper3$;
+	end;
+OnTimer70000:
+	npctalk "Grim Reaper Ankou: Get ready to feel the fear of death! *Chuckle*", 'reaper3$;
+	// note: unfreeze player
+	end;
+OnTimer72000:
+	disablenpc 'reaper3$;
+	end;
+OnTimer72500:
+	npctalk "Vrid: Damn it, the undead are coming, but I can't fight because I can't move my feet!", 'vrid3$;
+	end;
+OnTimer75000:
+	npctalk "Vrid: Ack, I don't want to die!", 'vrid3$;
+	end;
+OnTimer77500:
+	npctalk "Zeith: ...Ugh...", 'zeith3$;
+	end;
+OnTimer80000:
+	stopnpctimer;
+	for ( .@i = 1; .@i <= 3; ++.@i ) {
+		for ( .@j = 1; .@j <= 8; ++.@j )
+			disablenpc instance_npcname( "Corrupt Orc Zombie#" + .@j + "bio" + .@i );
+	}
+	.@label$ = instance_npcname("freeze#bios3") + "::OnMyMobDead";
+	for ( .@y = 80; .@y <= 92; .@y += 6 )
+		for ( .@x = 62; .@x <= 78; .@x += 2 )
+			monster 'map_dth3$,.@x,.@y,"Corrupt Orc Zombie",3016,1, .@label$;// EP14_3_DEATH_C_MOB1
+	end;
+
+OnMyMobDead:
+	if (mobcount( 'map_dth3$,instance_npcname("freeze#bios3") + "::OnMyMobDead" ) == 0) {
+		disablenpc instance_npcname("freeze#bios3");
+		donpcevent instance_npcname("verit#bios3") + "::OnStart";
+	}
+	end;
+}
+
+1@dth3,1,1,0	script	verit#bios3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("verit#bios3");
+	initnpctimer;
+	npctalk "Vrid: Wow, you're amazing! Did you kill them all?", 'vrid3$;
+	end;
+OnTimer2500:
+	npctalk "Zeith: Not yet. More are coming!", 'zeith3$;
+	end;
+OnTimer5000:
+	stopnpctimer;
+	.@label$ = instance_npcname("verit#bios3") + "::OnMyMobDead";
+	for ( .@y = 80; .@y <= 92; .@y += 6 )
+		for ( .@x = 62; .@x <= 78; .@x += 2 )
+			monster 'map_dth3$,.@x,.@y,"Corrupt Verit",3017,1, .@label$;// EP14_3_DEATH_C_MOB2
+	end;
+
+OnMyMobDead:
+	if (mobcount( 'map_dth3$,instance_npcname("verit#bios3") + "::OnMyMobDead" ) == 0) {
+		disablenpc instance_npcname("verit#bios3");
+		donpcevent instance_npcname("megalodon#bios3") + "::OnStart";
+	}
+	end;
+}
+
+1@dth3,1,1,0	script	megalodon#bios3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("megalodon#bios3");
+	initnpctimer;
+	npctalk "Vrid: I hope that really was the last of them.", 'vrid3$;
+	end;
+OnTimer2500:
+	npctalk "Zeith: Nope, we aren't so lucky--more is on the way!", 'zeith3$;
+	end;
+OnTimer5000:
+	stopnpctimer;
+	.@label$ = instance_npcname("megalodon#bios3") + "::OnMyMobDead";
+	for ( .@y = 80; .@y <= 92; .@y += 6 )
+		for ( .@x = 62; .@x <= 78; .@x += 2 )
+			monster 'map_dth3$,.@x,.@y,"Corrupt Megalodon",3018,1, .@label$;// EP14_3_DEATH_C_MOB3
+	end;
+
+OnMyMobDead:
+	if (mobcount( 'map_dth3$,instance_npcname("megalodon#bios3") + "::OnMyMobDead" ) == 0) {
+		disablenpc instance_npcname("megalodon#bios3");
+		donpcevent instance_npcname("boss_prelude#bios3") + "::OnStart";
+	}
+	end;
+}
+
+1@dth3,1,1,0	script	boss_prelude#bios3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc 'reaper3$;
+	initnpctimer;
+	end;
+OnTimer500:
+	npctalk "Grim Reaper Ankou: I underestimated you, or my soldiers aren't as strong as I thought.", 'reaper3$;
+	end;
+OnTimer3000:
+	npctalk "Vrid: You're cheating! Release us and fight fairly!", 'vrid3$;
+	end;
+OnTimer5500:
+	npctalk "Grim Reaper Ankou: You're still talking. I'll just kill you myself and get it over with!", 'reaper3$;
+	end;
+OnTimer7500:
+	disablenpc 'reaper3$;
+	end;
+OnTimer8000:
+	stopnpctimer;
+	donpcevent instance_npcname("boss#bios3") + "::OnStart";
+	end;
+}
+
+1@dth3,1,1,0	script	boss#bios3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("boss#bios3");
+	monster 'map_dth3$,70,67,"Grim Reaper Ankou",3029,1, instance_npcname("boss#bios3") + "::OnMyBossDead";
+	'boss_id = $@mobid[0];
+	donpcevent instance_npcname("talk_friends#bios3") + "::OnStart";
+	donpcevent instance_npcname("talk_boss#bios3") + "::OnStart";
+	end;
+OnMyBossDead:
+	'boss_id = 0;
+	donpcevent instance_npcname("talk_friends#bios3") + "::OnStop";
+	donpcevent instance_npcname("talk_boss#bios3") + "::OnStop";
+	enablenpc 'reaper3$;
+	enablenpc 'zeith3$;
+	enablenpc 'vrid3$;
+	initnpctimer;
+	end;
+OnTimer3000:
+	npctalk "Grim Reaper Ankou: You're strong...", 'reaper3$;
+	end;
+OnTimer6500:
+	npctalk "Grim Reaper Ankou: But my goal has been accomplished... Don't think this is over.", 'reaper3$;
+	end;
+OnTimer8000:
+	npctalk "Grim Reaper Ankou: Soon Lord Morocc will return. *Chuckle* The fear of death will follow you wherever you go.", 'reaper3$;
+	end;
+OnTimer10500:
+	disablenpc 'reaper3$;
+	specialeffect EF_ICECRASH,AREA,'vrid3$;
+	specialeffect EF_ICECRASH,AREA,'zeith3$;
+	setnpcdisplay( 'vrid3$, 4_M_KNIGHT_BLACK );
+	setnpcdisplay( 'zeith3$, 4_M_GUILLOTINE );
+	end;
+OnTimer13000:
+	npctalk "Vrid: Ah, finally I can move!", 'vrid3$;
+	end;
+OnTimer16500:
+	npctalk "Zeith: Hmpf, I'm ashamed of myself for being so weak...", 'zeith3$;
+	end;
+OnTimer18000:
+	npctalk "Vrid: Whew, that reaper was much stronger than me and Zeith combined.", 'vrid3$;
+	end;
+OnTimer20500:
+	npctalk "Vrid: We could have died if it weren't for you.", 'vrid3$;
+	end;
+OnTimer23000:
+	stopnpctimer;
+	npctalk "Vrid: I want to give you something for saving our lives. Talk to me again when you're ready to accept it.", 'vrid3$;
+	'reward = 1;
+	disablenpc instance_npcname("boss#bios3");
+	end;
+}
+
+1@dth3,1,1,0	script	talk_friends#bios3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	initnpctimer;
+	end;
+OnTimer15000:
+	.@r = rand(7);
+	if (.@r == 0)
+		npctalk "Zeith: Ugh... I feel so helpless...", 'zeith3$;
+	else if (.@r == 1)
+		npctalk "Zeith: That guy Ankou smells dangerous. You better move once he starts using a skill.", 'zeith3$;
+	else if (.@r == 2)
+		npctalk "Vrid: Ack, I'm sorry we can't help.", 'vrid3$;
+	else if (.@r == 3)
+		npctalk "Vrid: You cheater, fight fairly!", 'vrid3$;
+	else if (.@r == 4)
+		npctalk "Vrid: Damn it, I can't move...", 'vrid3$;
+	initnpctimer;
+	end;
+OnStop:
+	stopnpctimer;
+	end;
+}
+
+1@dth3,1,1,0	script	talk_boss#bios3	HIDDEN_WARP_NPC,{
+	end;
+OnStart:
+	initnpctimer;
+	end;
+OnTimer13000:
+	.@r = rand(6);
+	if (.@r == 0)
+		unittalk 'boss_id, "Grim Reaper Ankou: *Chuckle*";
+	else if (.@r == 1)
+		unittalk 'boss_id, "Grim Reaper Ankou: Feel the fear of death!";
+	else if (.@r == 2)
+		unittalk 'boss_id, "Grim Reaper Ankou: Lord Morocc will return soon.";
+	else if (.@r == 3)
+		unittalk 'boss_id, "Grim Reaper Ankou: Is this the best you can do? Such weak creatures, you humans.";
+	initnpctimer;
+	end;;
+OnStop:
+	stopnpctimer;
+	end;
+
+OnInstanceInit:
+	'reward = 'boss_id = 0;
+	'map_dth1$ = instance_mapname("1@dth1");
+	'map_dth2$ = instance_mapname("1@dth2");
+	'map_dth3$ = instance_mapname("1@dth3");
+
+	// warps
+	disablenpc instance_npcname("warp1#bios1");
+	disablenpc instance_npcname("warp1#bios2");
+
+	// zone 1
+	disablenpc instance_npcname("Grim Reaper Ankou#bios1");
+	donpcevent instance_npcname("mobs#bios1") + "::OnStart";	// spawn at entrance
+
+	// zone 2
+	disablenpc instance_npcname("start1#bios2");
+	disablenpc instance_npcname("mobs#bios2");
+
+	// zone 3
+	disablenpc instance_npcname("event_boss#bios3");
+	disablenpc instance_npcname("freeze#bios3");
+	disablenpc instance_npcname("verit#bios3");
+	disablenpc instance_npcname("megalodon#bios3");
+	disablenpc instance_npcname("boss_prelude#bios3");
+	disablenpc instance_npcname("boss#bios3");
+	disablenpc instance_npcname("talk_friends#bios3");
+	disablenpc instance_npcname("talk_boss#bios3");
+	disablenpc instance_npcname("Vrid#bios3");
+	disablenpc instance_npcname("Zeith#bios3");
+	disablenpc instance_npcname("Grim Reaper Ankou#bios3");
+	for ( .@i = 1; .@i <= 3; ++.@i ) {
+		for ( .@j = 1; .@j <= 8; ++.@j )
+			disablenpc instance_npcname( "Corrupt Orc Zombie#" + .@j + "bio" + .@i );
+	}
+	end;
+}
+
+1@dth3,72,74,3	duplicate(Grim Reaper Ankou#bios1)	Zeith#bios3	4_M_GUILLOTINE
+1@dth3,70,67,3	duplicate(Grim Reaper Ankou#bios1)	Grim Reaper Ankou#bios3	3029
+
+1@dth3,62,80,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#1bio1	3016
+1@dth3,64,80,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#2bio1	3016
+1@dth3,66,80,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#3bio1	3016
+1@dth3,68,80,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#4bio1	3016
+1@dth3,72,80,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#5bio1	3016
+1@dth3,74,80,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#6bio1	3016
+1@dth3,76,80,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#7bio1	3016
+1@dth3,78,80,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#8bio1	3016
+1@dth3,62,86,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#1bio2	3016
+1@dth3,64,86,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#2bio2	3016
+1@dth3,66,86,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#3bio2	3016
+1@dth3,68,86,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#4bio2	3016
+1@dth3,72,86,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#5bio2	3016
+1@dth3,74,86,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#6bio2	3016
+1@dth3,76,86,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#7bio2	3016
+1@dth3,78,86,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#8bio2	3016
+1@dth3,62,92,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#1bio3	3016
+1@dth3,64,92,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#2bio3	3016
+1@dth3,66,92,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#3bio3	3016
+1@dth3,68,92,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#4bio3	3016
+1@dth3,72,92,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#5bio3	3016
+1@dth3,74,92,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#6bio3	3016
+1@dth3,76,92,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#7bio3	3016
+1@dth3,78,92,3	duplicate(Grim Reaper Ankou#bios1)	Corrupt Orc Zombie#8bio3	3016

+ 1 - 0
npc/re/scripts_athena.conf

@@ -60,6 +60,7 @@ npc: npc/re/instances/FacewormsNest.txt
 npc: npc/re/instances/GhostPalace.txt
 npc: npc/re/instances/HazyForest.txt
 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/OctopusCave.txt

+ 5 - 0
src/map/battle.cpp

@@ -6228,6 +6228,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 					case NPC_VENOMFOG:
 						skillratio += 600 + 100 * skill_lv;
 						break;
+					case NPC_COMET:
+						i = (sc ? distance_xy(target->x, target->y, sc->comet_x, sc->comet_y) : 8) / 2;
+						i = cap_value(i, 1, 4);
+						skillratio = 2500 + ((skill_lv - i) * 500);
+						break;
 				}
 
 				if (sc) {// Insignia's increases the damage of offensive magic by a fixed percentage depending on the element.

+ 1 - 0
src/map/itemdb.hpp

@@ -731,6 +731,7 @@ enum e_random_item_group {
 	IG_CHRISTMAS_BOX,
 	IG_SPECIAL_CHRISTMAS_BOX,
 	IG_SANTA_GIFT,
+	IG_PRIZEOFHERO,
 };
 
 /// Enum for bound/sell restricted selling

+ 1 - 0
src/map/script_constants.hpp

@@ -3912,6 +3912,7 @@
 	export_constant(IG_CHRISTMAS_BOX);
 	export_constant(IG_SPECIAL_CHRISTMAS_BOX);
 	export_constant(IG_SANTA_GIFT);
+	export_constant(IG_PRIZEOFHERO);
 
 	/* unit stop walking */
 	export_constant(USW_NONE);

+ 4 - 0
src/map/skill.cpp

@@ -1550,6 +1550,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 		sc_start(src,bl, SC_STUN, 40, skill_lv, skill_get_time(skill_id, skill_lv));
 		break;
 	case WL_COMET:
+	case NPC_COMET:
 		sc_start4(src,bl,SC_BURNING,100,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv));
 		break;
 	case WL_EARTHSTRAIN:
@@ -3382,6 +3383,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
 			break;
 		case WL_SOULEXPANSION:
 		case WL_COMET:
+		case NPC_COMET:
 		case KO_MUCHANAGE:
 		case NJ_HUUMA:
 			dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skill_id,skill_lv,DMG_MULTI_HIT);
@@ -5040,6 +5042,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 		break;
 
 	case WL_COMET:
+	case NPC_COMET:
 		if(!map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR)) // Nothing should happen if the target is on Land Protector
 			skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
 		break;
@@ -12102,6 +12105,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 		break;
 
 	case WL_COMET:
+	case NPC_COMET:
 		if( sc ) {
 			sc->comet_x = x;
 			sc->comet_y = y;

+ 1 - 0
src/map/status.cpp

@@ -549,6 +549,7 @@ void initChangeTables(void)
 	set_sc( NPC_WIDEHELLDIGNITY	, SC_HELLPOWER		, SI_HELLPOWER		, SCB_NONE );
 	set_sc( NPC_INVINCIBLE		, SC_INVINCIBLE		, SI_INVINCIBLE		, SCB_SPEED );
 	set_sc( NPC_INVINCIBLEOFF	, SC_INVINCIBLEOFF	, SI_BLANK		, SCB_SPEED );
+	set_sc( NPC_COMET            , SC_BURNING         , SI_BURNT           , SCB_MDEF );
 	set_sc_with_vfx( NPC_MAXPAIN	,	 SC_MAXPAIN	, SI_MAXPAIN	, SCB_NONE );
 
 	set_sc( CASH_BLESSING		, SC_BLESSING		, SI_BLESSING		, SCB_STR|SCB_INT|SCB_DEX );