From 5a0b72a7d1580eea7d4b1d196949783df8bf0e53 Mon Sep 17 00:00:00 2001 From: Atemo Date: Mon, 16 Apr 2018 16:54:53 +0200 Subject: [PATCH] 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 ! --- db/pre-re/skill_db.txt | 2 +- db/re/instance_db.txt | 18 +- db/re/item_db.txt | 7 +- db/re/item_flag.txt | 1 + db/re/item_misc.txt | 30 ++ db/re/mob_db.txt | 20 +- db/re/mob_skill_db.txt | 5 + db/re/quest_db.txt | 10 +- db/re/skill_db.txt | 2 +- db/re/skill_unit_db.txt | 1 + npc/re/instances/FacewormsNest.txt | 8 +- npc/re/instances/IsleOfBios.txt | 772 +++++++++++++++++++++++++++++ npc/re/scripts_athena.conf | 1 + src/map/battle.cpp | 5 + src/map/itemdb.hpp | 1 + src/map/script_constants.hpp | 1 + src/map/skill.cpp | 4 + src/map/status.cpp | 1 + 18 files changed, 862 insertions(+), 27 deletions(-) create mode 100644 npc/re/instances/IsleOfBios.txt diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index a46e688a57..cf7b7431ee 100644 --- a/db/pre-re/skill_db.txt +++ b/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 diff --git a/db/re/instance_db.txt b/db/re/instance_db.txt index d6db555fed..4cb99b0fd2 100644 --- a/db/re/instance_db.txt +++ b/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 diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 2bd6eafe28..86c2e7cc28 100644 --- a/db/re/item_db.txt +++ b/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,,,,,,{},{},{} diff --git a/db/re/item_flag.txt b/db/re/item_flag.txt index b68c97c2c0..911a8fddfc 100644 --- a/db/re/item_flag.txt +++ b/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 diff --git a/db/re/item_misc.txt b/db/re/item_misc.txt index 0e332483ff..823f521c7c 100644 --- a/db/re/item_misc.txt +++ b/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 diff --git a/db/re/mob_db.txt b/db/re/mob_db.txt index f52773927b..28e2d4995e 100644 --- a/db/re/mob_db.txt +++ b/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 diff --git a/db/re/mob_skill_db.txt b/db/re/mob_skill_db.txt index 93feb0054a..5d923c238e 100644 --- a/db/re/mob_skill_db.txt +++ b/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,,,,,,, diff --git a/db/re/quest_db.txt b/db/re/quest_db.txt index 638e1d5469..65a112a241 100644 --- a/db/re/quest_db.txt +++ b/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,"" diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index e85a16124b..d63d42c4ed 100644 --- a/db/re/skill_db.txt +++ b/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 diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt index 4b4383a57d..a3453b5242 100644 --- a/db/re/skill_unit_db.txt +++ b/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 diff --git a/npc/re/instances/FacewormsNest.txt b/npc/re/instances/FacewormsNest.txt index a8d4935e07..c6f956e6a2 100644 --- a/npc/re/instances/FacewormsNest.txt +++ b/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; diff --git a/npc/re/instances/IsleOfBios.txt b/npc/re/instances/IsleOfBios.txt new file mode 100644 index 0000000000..7183f7994b --- /dev/null +++ b/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 diff --git a/npc/re/scripts_athena.conf b/npc/re/scripts_athena.conf index e4260b4c1a..1236634d69 100644 --- a/npc/re/scripts_athena.conf +++ b/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 diff --git a/src/map/battle.cpp b/src/map/battle.cpp index e845c5e9bb..c4d597537a 100644 --- a/src/map/battle.cpp +++ b/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. diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp index 27e2f0a3e9..c59c40df81 100644 --- a/src/map/itemdb.hpp +++ b/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 diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index cb492dcf26..d8c3938b3c 100644 --- a/src/map/script_constants.hpp +++ b/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); diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 663b9708bf..e9401a2735 100755 --- a/src/map/skill.cpp +++ b/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; diff --git a/src/map/status.cpp b/src/map/status.cpp index 0a51178bcf..3488fc5dda 100644 --- a/src/map/status.cpp +++ b/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 );