diff --git a/db/mercenary_db.txt b/db/mercenary_db.txt index a7b84cfe14c..7b60bb2ce12 100644 --- a/db/mercenary_db.txt +++ b/db/mercenary_db.txt @@ -35,6 +35,7 @@ 2350,MER_SEDORA,Sedora,83,9815,234,2,1100,1300,60,60,85,90,71,43,85,105,10,12,0,6,47,150,1080,780,180 2351,MER_CHEPET,Chepet,83,9815,234,2,1100,1300,60,60,85,90,71,43,85,105,10,12,0,6,47,150,1080,780,180 2378,MER_ANTLER_SCARABA,Antler Scaraba,136,30000,1,1,1418,1828,155,102,23,99,59,129,137,45,10,12,1,4,42,200,504,624,360 +2937,M_LOKI,Loki's Shadow,145,1215600,1,2,1835,2279,15,89,76,66,90,55,189,22,10,12,1,7,20,175,800,750,300 // Rebuilding Morroc 3025,14_3_MERCENARY_B,Worker,17,234,1,1,38,50,20,3,15,8,17,0,15,0,1,1,1,11,91,150,450,432,300 // Normal Mercenaries diff --git a/db/mercenary_skill_db.txt b/db/mercenary_skill_db.txt index 6f939ad7d25..b95dc2c9e92 100644 --- a/db/mercenary_skill_db.txt +++ b/db/mercenary_skill_db.txt @@ -222,3 +222,5 @@ 2378,8226,1 //MER_REGAIN 2378,8219,1 //ML_DEFENDER 2378,8235,1 //MER_SCAPEGOAT +// M_LOKI +2937,8241,1 //MER_INVINCIBLEOFF2 \ No newline at end of file diff --git a/db/quest_db.conf b/db/quest_db.conf index ed5c2ee9e83..87a81f3e1bd 100644 --- a/db/quest_db.conf +++ b/db/quest_db.conf @@ -6325,6 +6325,59 @@ quest_db: ( Id: 7453 Name: "The last of the chief of staff" }, +// Episode 14.3 Part 2 - Decisive Battle - Devils Tower +{ + Id: 7568 + Name: "Explore the tower" + TimeLimit: 5400 +}, +{ + Id: 7569 + Name: "Treat the injured" +}, +{ + Id: 7570 + Name: "Destroy the demons" + Targets: ( + { + MobId: 2939 + Count: 7 + }, + { + MobId: 2940 + Count: 7 + }, + { + MobId: 2941 + Count: 7 + }, + ) +}, +{ + Id: 7571 + Name: "Tower Expedition" +}, +{ + Id: 7572 + Name: "Lucile...?" +}, +{ + Id: 7573 + Name: "Magic Swordman Thanatos" +}, +{ + Id: 7574 + Name: "Thanatos Tower" +}, +{ + Id: 7576 + Name: "Morocc castle seal" +}, +{ + Id: 7577 + Name: "Space distortion" + TimeLimit: 82800 +}, { Id: 8000 Name: "Quitting Job Change" diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf index 6c878b0d423..4fe5e0ea1f8 100644 --- a/db/re/mob_db.conf +++ b/db/re/mob_db.conf @@ -81521,12 +81521,221 @@ mob_db: ( } }, //2937,M_LOKI -//2938,MM_MAGIC_SEAL -//2939,MM_EVIL_SHADOW1 -//2940,MM_EVIL_SHADOW2 -//2941,MM_EVIL_SHADOW3 -//2942,MM_EVIL_FANATICS -//2943,MM_ICE_MINE +{ + Id: 2938 + SpriteName: "MM_MAGIC_SEAL" + Name: "Magic Seal" + Lv: 140 + Hp: 10000000 + Sp: 1 + Exp: 1 + JExp: 6999 + AttackRange: 1 + Attack: [1, 1] + Def: 80 + Mdef: 200 + Stats: { + Str: 16 + Agi: 26 + Vit: 30 + Int: 115 + Dex: 79 + Luk: 5 + } + ViewRange: 10 + ChaseRange: 12 + Size: "Size_Large" + Race: "RC_Formless" + Element: ("Ele_Neutral", 1) + MoveSpeed: 300 + AttackDelay: 1000 + AttackMotion: 1000 + DamageMotion: 1000 + MvpExp: 0 +}, +{ + Id: 2939 + SpriteName: "MM_EVIL_SHADOW1" + Name: "Evil Shadow" + Lv: 138 + Hp: 112000 + Sp: 1 + Exp: 7456 + JExp: 5983 + AttackRange: 1 + Attack: [3266, 1307] + Def: 30 + Mdef: 30 + Stats: { + Str: 88 + Agi: 44 + Vit: 88 + Int: 21 + Dex: 95 + Luk: 44 + } + ViewRange: 10 + ChaseRange: 12 + Size: "Size_Large" + Race: "RC_Demon" + Element: ("Ele_Dark", 2) + Mode: { + CanMove: true + Aggressive: true + CanAttack: true + } + MoveSpeed: 200 + AttackDelay: 1500 + AttackMotion: 600 + DamageMotion: 500 + MvpExp: 0 +}, +{ + Id: 2940 + SpriteName: "MM_EVIL_SHADOW2" + Name: "Evil Shadow" + Lv: 141 + Hp: 127650 + Sp: 1 + Exp: 8103 + JExp: 7738 + AttackRange: 1 + Attack: [2678, 1071] + Def: 121 + Mdef: 36 + Stats: { + Str: 60 + Agi: 103 + Vit: 45 + Int: 35 + Dex: 172 + Luk: 15 + } + ViewRange: 10 + ChaseRange: 12 + Size: "Size_Medium" + Race: "RC_Demon" + Element: ("Ele_Dark", 2) + Mode: { + CanMove: true + Aggressive: true + CanAttack: true + } + MoveSpeed: 200 + AttackDelay: 1000 + AttackMotion: 500 + DamageMotion: 600 + MvpExp: 0 +}, +{ + Id: 2941 + SpriteName: "MM_EVIL_SHADOW3" + Name: "Evil Shadow" + Lv: 142 + Hp: 153400 + Sp: 1 + Exp: 8863 + JExp: 6736 + AttackRange: 1 + Attack: [3167, 1267] + Def: 89 + Mdef: 44 + Stats: { + Str: 120 + Agi: 87 + Vit: 66 + Int: 33 + Dex: 106 + Luk: 27 + } + ViewRange: 10 + ChaseRange: 12 + Size: "Size_Large" + Race: "RC_Demon" + Element: ("Ele_Dark", 2) + Mode: { + CanMove: true + Aggressive: true + CanAttack: true + } + MoveSpeed: 200 + AttackDelay: 1800 + AttackMotion: 780 + DamageMotion: 480 + MvpExp: 0 +}, +{ + Id: 2942 + SpriteName: "MM_EVIL_FANATICS" + Name: "Evil Fanatics" + Lv: 151 + Hp: 8256000 + Sp: 1 + Exp: 1008653 + JExp: 988954 + AttackRange: 3 + Attack: [3350, 167] + Def: 166 + Mdef: 103 + Stats: { + Str: 118 + Agi: 72 + Vit: 40 + Int: 55 + Dex: 213 + Luk: 30 + } + ViewRange: 10 + ChaseRange: 12 + Size: "Size_Large" + Race: "RC_Demon" + Element: ("Ele_Dark", 3) + Mode: { + CanMove: true + Boss: true + Aggressive: true + CanAttack: true + } + MoveSpeed: 200 + AttackDelay: 1000 + AttackMotion: 500 + DamageMotion: 350 + MvpExp: 0 +}, +{ + Id: 2943 + SpriteName: "MM_ICE_MINE" + Name: "Icemine" + Lv: 149 + Hp: 10000 + Sp: 200 + Exp: 0 + JExp: 0 + AttackRange: 7 + Attack: [200, 1] + Def: 200 + Mdef: 10 + Stats: { + Str: 200 + Agi: 200 + Vit: 200 + Int: 200 + Dex: 200 + Luk: 200 + } + ViewRange: 12 + ChaseRange: 12 + Size: "Size_Small" + Race: "RC_Insect" + Element: ("Ele_Ghost", 4) + Mode: { + } + MoveSpeed: 2000 + AttackDelay: 0 + AttackMotion: 1000 + DamageMotion: 0 + MvpExp: 0 +}, //2944,J_HORNET //2945,J_MUMMY //2946,J_ANUBIS @@ -82058,7 +82267,40 @@ mob_db: ( Gray_Shard: 10000 } }, -//2960,MM_FLAMECROSS +{ + Id: 2960 + SpriteName: "MM_FLAMECROSS" + Name: "Flamecross" + Lv: 149 + Hp: 10000 + Sp: 200 + Exp: 0 + JExp: 0 + AttackRange: 7 + Attack: [180, 1] + Def: 200 + Mdef: 10 + Stats: { + Str: 200 + Agi: 200 + Vit: 200 + Int: 200 + Dex: 200 + Luk: 200 + } + ViewRange: 12 + ChaseRange: 12 + Size: "Size_Small" + Race: "RC_Insect" + Element: ("Ele_Ghost", 4) + Mode: { + } + MoveSpeed: 2000 + AttackDelay: 0 + AttackMotion: 1000 + DamageMotion: 0 + MvpExp: 0 +}, { Id: 2961 SpriteName: "E_TORTUROUS_REDEEMER" diff --git a/db/re/mob_skill_db.conf b/db/re/mob_skill_db.conf index 194c0a32c9f..9c7526a47c7 100644 --- a/db/re/mob_skill_db.conf +++ b/db/re/mob_skill_db.conf @@ -87136,6 +87136,247 @@ mob_skill_db:( val0: 1320 } } +// Episode 14.3 Part 2 - Decisive Battle - Devils Tower + MM_EVIL_SHADOW1: { + NPC_PIERCINGATT: { + SkillState: "MSS_RUSH" + SkillLevel: 1 + Rate: 4000 + Delay: 5000 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ALWAYS" + } + NPC_CURSEATTACK: { + SkillState: "MSS_BERSERK" + SkillLevel: 5 + Rate: 3500 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ALWAYS" + } + } + MM_EVIL_SHADOW2: { + NPC_DARKSTRIKE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 3000 + Delay: 5000 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ALWAYS" + } + } + MM_EVIL_SHADOW3: { + NPC_CRITICALSLASH: { + SkillState: "MSS_RUSH" + SkillLevel: 1 + Rate: 3000 + Delay: 5000 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ALWAYS" + } + NPC_PETRIFYATTACK: { + SkillState: "MSS_BERSERK" + SkillLevel: 5 + Rate: 3500 + Delay: 5000 + Cancelable: true + SkillTarget: "MST_TARGET" + CastCondition: "MSC_ALWAYS" + } + } + MM_EVIL_FANATICS: { + NPC_INVINCIBLE: { + SkillState: "MSS_IDLE" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 100 + // ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 100 + //ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 90 + //ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 80 + //ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 70 + //ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 60 + //ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 50 + //ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 40 + //ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 30 + // ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 20 + //ChatMsgID: 42 + } + NPC_INVINCIBLE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 20000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_MYHPLTMAXRATE" + ConditionData: 10 + //ChatMsgID: 42 + } + NPC_DANCINGBLADE: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 1000 + Delay: 15000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_ALWAYS" + ChatMsgID: 5 + } + NPC_PULSESTRIKE2: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 800 + Delay: 15000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_ALWAYS" + //ChatMsgID: 4 + } + NPC_DARKPIERCING: { + SkillState: "MSS_BERSERK" + SkillLevel: 1 + Rate: 10000 + Delay: 60000 + Cancelable: true + SkillTarget: "MST_SELF" + CastCondition: "MSC_ALWAYS" + ChatMsgID: 4 + } + } + MM_ICE_MINE: { + NPC_INVISIBLE: { + SkillState: "MSS_IDLE" + SkillLevel: 1 + Rate: 10000 + Delay: 300000 + SkillTarget: "MST_SELF" + CastCondition: "MSC_ALWAYS" + } + NPC_FLAMECROSS: { + SkillState: "MSS_IDLE" + SkillLevel: 1 + Rate: 10000 + Delay: 300000 + SkillTarget: "MST_SELF" + CastCondition: "MSC_ALWAYS" + } + } + MM_FLAMECROSS: { + NPC_INVISIBLE: { + SkillState: "MSS_IDLE" + SkillLevel: 1 + Rate: 10000 + Delay: 300000 + SkillTarget: "MST_SELF" + CastCondition: "MSC_ALWAYS" + } + NPC_FLAMECROSS: { + SkillState: "MSS_IDLE" + SkillLevel: 1 + Rate: 10000 + Delay: 300000 + SkillTarget: "MST_SELF" + CastCondition: "MSC_ALWAYS" + } + } C4_ORK_WARRIOR: { NPC_EMOTION: { SkillState: "MSS_FOLLOW" diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 7a3fddc16d2..a7b1b9f4d6c 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -18943,6 +18943,66 @@ skill_db: ( Description: "Wide Charm" MaxLevel: 5 }, +{ + Id: 709 + Name: "NPC_ICEMINE" + MaxLevel: 10 + Description: "Ice Mine" + Range: 3 + Hit: "BDT_NORMAL" + SkillType: { + Passive: false + } + SkillInfo: { + NPC: true + } + Element: "Ele_Neutral" + DamageType: { + NoDamage: false + } + Unit: { + Id: 0xfe + Range: 3 + Interval: 1000 + Target: "Enemy" + Flag: { + UF_NOOVERLAP: true + UF_PATHCHECK: true + UF_REMOVEDBYFIRERAIN: true + } + } +}, +{ + Id: 711 + Name: "NPC_FLAMECROSS" + MaxLevel: 5 + Description: "Flame Cross" + SkillType: { + Self: true + } + AttackType: "Magic" + DamageFlags: { + IgnoreDefCards: true + } + SkillInfo: { + NPC: true + IgnoreLandProtector: true + ShowSkillScale: true + } + KnockBackTiles: 2 + SkillData1: 3000 + Unit: { + Id: 0xff + Layout: -1 + Interval: 1000 + Target: "Enemy" + Flag: { + UF_NOOVERLAP: true + UF_PATHCHECK: true + UF_REMOVEDBYFIRERAIN: true + } + } +}, { Id: 1001 Name: "KN_CHARGEATK" @@ -40092,6 +40152,20 @@ skill_db: ( } } }, +{ + Id: 8241 + Name: "MER_INVINCIBLEOFF2" + StatusChange: "SC_INVINCIBLEOFF" + MaxLevel: 1 + Description: "Mind Blaster" + SkillType: { + Enemy: true + } + DamageType: { + NoDamage: true + } + Cooldown: 30000 +}, { Id: 8401 Name: "EL_CIRCLE_OF_FIRE" diff --git a/npc/re/instances/DevilTower.txt b/npc/re/instances/DevilTower.txt new file mode 100644 index 00000000000..a8d0f3484d0 --- /dev/null +++ b/npc/re/instances/DevilTower.txt @@ -0,0 +1,2204 @@ +//================= Hercules Script ======================================= +//= _ _ _ +//= | | | | | | +//= | |_| | ___ _ __ ___ _ _| | ___ ___ +//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __| +//= | | | | __/ | | (__| |_| | | __/\__ \ +//= \_| |_/\___|_| \___|\__,_|_|\___||___/ +//================= License =============================================== +//= This file is part of Hercules. +//= http://herc.ws - http://github.com/HerculesWS/Hercules +//= +//= Copyright (C) 2012-2025 Hercules Dev Team +//= Copyright (C) Euphy +//= Copyright (C) L0ne_W0lf +//= +//= Hercules is free software: you can redistribute it and/or modify +//= it under the terms of the GNU General Public License as published by +//= the Free Software Foundation, either version 3 of the License, or +//= (at your option) any later version. +//= +//= This program is distributed in the hope that it will be useful, +//= but WITHOUT ANY WARRANTY; without even the implied warranty of +//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//= GNU General Public License for more details. +//= +//= You should have received a copy of the GNU General Public License +//= along with this program. If not, see . +//========================================================================= +//= Devil Tower Instance +//================= Current Version ======================================= +//= 1.1 +//========================================================================= +//===== Changelogs: ======================================================= +//= 1.0 First version. [exneval] +//= 1.1 Conversion & style change for Hercules. [Fiction] +//========================================================================= +dali02,134,119,5 script Historian Shep#tnm01 4_F_NOVICE,{ + if (BaseLevel < 130) { + mes ("[Shep]"); + mes ("Are you volunteering to explore the Devil's Tower?"); + mes ("It's extremely dangerous so you need to be at least ^4d4dffLevel 130^000000."); + next; + mes ("[Shep]"); + mes ("Will you come back when you get stronger?"); + mes ("You know what I mean right?"); + close; + } + switch( questprogress(7577,PLAYTIME) ) {// daily timer + case 0: + break; + case 1: + mes ("[Shep]"); + mes ("You want to explore again so soon?"); + mes ("Your body needs to recover from the time traveling."); + next; + mes ("[Shep]"); + mes ("Take a rest day and come back tomorrow.!"); + mes ("You understand?"); + close; + case 2: + mes ("[Shep]"); + mes ("Have you rested long enough?"); + mes ("I am scheduled to explore today!"); + mes ("I have always been waiting for a member of the expedition!"); + erasequest 7577;// Space distortion + devil_tower_can_reenter = 0; + devil_tower_enter = 0; + next; + mes ("!- Notice -!"); + mes ("You can now re-enter the Devil's Tower."); + close; + } + if (questprogress(7576) > 0) {// instance completed + mes ("[Shep]"); + mes ("So time and space seem to have converged there?"); + mes ("I'm amazed that time travel is possible."); + next; + mes ("[Shep]"); + mes ("This is all you have."); + mes ("You did a good job."); + mes ("I look forward to more discoveries!"); + setquest 7577;// Space distortion + erasequest 7568;// Explore the tower + erasequest 7571;// Tower Expedition + erasequest 7574;// Thanatos Tower + erasequest 7576;// Morocc castle seal + getexp 450000,450000; + devil_tower_can_reenter = 0; + devil_tower_enter = 0; + mes ("Please come back tomorrow!"); + close; + } + if (questprogress(7574) > 0) {// failed after seal + mes ("[Shep]"); + mes ("Oh, you are back so soon..."); + mes ("Ok, I see what happened."); + next; + mes ("[Shep]"); + mes ("This is all you have."); + mes ("You did a good job."); + mes ("I look forward to more discoveries!"); + setquest 7577;// Space distortion + erasequest 7568;// Explore the tower + erasequest 7571;// Tower Expedition + erasequest 7574;// Thanatos Tower + getexp 300000,300000; + devil_tower_can_reenter = 0; + devil_tower_enter = 0; + mes ("Please come back tomorrow!"); + close; + } + if (questprogress(7571) > 0) {// failed at stair 2 tnm1 + mes ("[Shep]"); + mes ("Oh, you are back."); + mes ("Let me see... you mean this tower has a passage to connect to the demon world."); + next; + mes ("[Shep]"); + mes ("This is all you have."); + mes ("You did a good job."); + mes ("I look forward to more discoveries!"); + setquest 7577;// Space distortion + erasequest 7568;// Explore the tower + erasequest 7571;// Tower Expedition + if (questprogress(7572)) erasequest 7572;// Lucile...? + if (questprogress(7573)) erasequest 7573;// Magic Swordman Thanatos + getexp 200000,200000; + devil_tower_can_reenter = 0; + devil_tower_enter = 0; + mes ("Please come back tomorrow!"); + close; + } + switch( questprogress(7568,PLAYTIME) ) {// entrance timer - 1h30 to enter + case 0: + mes ("[Shep]"); + mes ("Are you volunteering to explore the Devil's Tower? I have been waiting for someone like you!"); + next; + mes ("[Shep]"); + mes ("Finally, someone to share the mysteries of the tower for me."); + mes ("No one has been volunteering up this point so I was getting worried."); + next; + mes ("[Shep]"); + mes ("Please report anything you find in the tower to me."); + mes ("The better the info~ the better the zeny I'll pay you!"); + next; + mes ("[Shep]"); + mes ("That Laphine scholar over there will open up the dimensional gap with this time device."); + mes ("It is still unstable so your time for exploring will be limited."); + next; + mes ("[Shep]"); + mes ("If you are unexpectedly bounced back to here again, you should return quickly."); + mes ("If you do you may or may not be able to re-enter depending on how fast you are."); + next; + mes ("[Shep]"); + mes ("But if you run out of time, the access to the tower will disappear."); + mes ("So do you want to volunteer?"); + next; + if (select( "Volunteer", "No Thanks" ) == 2) { + mes ("[Shep]"); + mes ("Oh that's too bad"); + mes ("There is nothing I can do I guess."); + mes ("I'll just find someone else..."); + close; + } + mes ("[Shep]"); + mes ("Thank you."); + mes ("Okay, gather your party and remember to report to me what you find."); + next; + mes ("[Shep]"); + mes ("^4d4dffExploring time limit is for your safety^000000!"); + setquest 7568;// Explore the tower + close; + case 1: + if (devil_tower_can_reenter == 0)// player can re-enter + break; + // fall through + case 2: + mes ("[Shep]"); + mes ("You seem to be late."); + mes ("You took an extraordinarily long time."); + mes ("....."); + mes ("I can't use any of your info."); + next; + mes ("[Shep]"); + mes ("There is nothing we can do ."); + mes ("There's always opportunities for other expeditions."); + setquest 7577;// Space distortion + erasequest 7568; + if (questprogress(7569)) erasequest 7569;// Treat the injured + if (questprogress(7570)) erasequest 7570;// Destroy the demons + devil_tower_can_reenter = 0; + devil_tower_enter = 0; + close; + } + mes ("[Shep]"); + mes ("First of all, you need to reserve a queue at the gate."); + mes ("The Laphine Scholar Artie will reserve your queue for you."); + next; + mes ("[Shep]"); + mes ("Time is limited because the dimensional gap is still unstable."); + mes ("Make your exploration short and sweet."); + next; + mes ("[Shep]"); + mes ("Rewards will be different depending on your time."); + mes ("Good luck!"); + next; + if (select( "Trust me!", "Cancel my reservation" ) == 1) { + mes ("[Shep]"); + mes ("I believe that you can manage under these restrictions."); + mes ("I believe in you!"); + close; + } + if (devil_tower_enter == 1) { + mes ("[Shep]"); + mes ("You seem to be tired of exploring."); + mes ("^4d4dffIf you cancel now. You will be able to challenge one day after.^000000"); + mes ("Is that okay?"); + next; + if (select( "Yes Cancel.", "Wait, don't cancel!" ) == 2) { + mes ("[Shep]"); + mes ("Ok, I won't cancel."); + close; + } + mes ("[Shep]"); + mes ("Really."); + mes ("then, come back tomorrow."); + setquest 7577;// Space distortion + erasequest 7568; + if (questprogress(7569)) erasequest 7569;// Treat the injured + if (questprogress(7570)) erasequest 7570;// Destroy the demons + devil_tower_enter = 0; + devil_tower_can_reenter = 0; + close; + } + mes ("[Shep]"); + mes ("Really?"); + mes ("After listening to all this explanation?"); + erasequest 7568;// Explore the tower + close; +} +dali02,137,121,3 script Magic Scholar Artie#tnm 4_M_FAIRYKID6,{ + + .@party_id = getcharid(CHAR_ID_PARTY); + .@p_name$ = getpartyname(.@party_id); + .@md_name$ = "Devil's Tower"; + .@leader = getpartyleader(.@party_id, 1); + + if (.@party_id == 0) { + mes ("[Artie]"); + mes ("let's have fun since we just left bifrost."); + mes ("No?"); + mes ("you are applying as a volunteer?"); + mes ("You'd better gather a party for this expedition."); + next; + mes ("[Artie]"); + mes ("Don't take any unncessary risks, okay?"); + close; + } + if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) { + mes ("[Artie]"); + mes ("Bring the Expedition Chief."); + mes ("Devil's Tower is not a place to visit alone."); + mes ("Bring the manager."); + close; + } + if (devil_tower_enter == 1) { + mes ("[Artie]"); + mes ("You have already entered by connecting it."); + mes ("Connect to the space again? I can not do that."); + close; + } + switch( questprogress(7568,PLAYTIME) ) { + case 0: + case 1: + break; + case 2: + mes ("[Artie]"); + mes ("Hrm... It is difficult to connect to unless it is an appointed exploration time."); + mes ("Not to mention dangerous as well."); + close; + } + mes ("[Artie]"); + mes ("Are you a volunteer to explore the Devil's Tower?"); + mes ("Do you want me to activate the Dimensional Device?"); + next; + mes ("[Artie]"); + mes ("Decide quickly because you only have a finite amount of time in there."); + next; + if (select( "Yes, activate the device.", "Wait for a minute." ) == 2) { + mes ("[Artie]"); + mes ("Your time to explore is dwindling."); + mes ("Time is very important."); + mes ("What are you waiting for?"); + close; + } + mes ("[Artie]"); + mes ("The Dimensional Device is activated."); + mes ("If you're lucky, you can get through this quickly."); + mes ("I look forward to hearing good news."); + .@instance = instance_create(.@md_name$, .@party_id); + if (.@instance >= 0) { + if ( instance_attachmap("1@tnm1", .@instance) == "" || instance_attachmap("1@tnm2", .@instance) == "" || instance_attachmap("1@tnm3", .@instance) == "") { + mes ("Party Name: " + getpartyname( getcharid(CHAR_ID_PARTY) )); + mes ("Party Leader: " + strcharinfo(PC_NAME)); + mes ("^0000ff" + .@instance_name$[.@s] + " ^000000 - Reservation Failed."); + close(); + } + } + close; +} +dali02,141,120,3 script Dimensional Device#tnm0 PORTAL,{ + if (devil_tower_can_reenter == 1) {// can't re-enter + mes ("[Artie]"); + if (has_instance("1@tnm1") != "" || has_instance("1@tnm2") != "" || has_instance("1@tnm3") != "" ) { + warp("1@tnm1", 50, 104); + } else if (has_instance("1@tnm1") != "" || has_instance("1@tnm2") != "" || has_instance("1@tnm3") != "" ) { + mes("Seems that the instance it's already over or not generated."); + close(); + } else { + mes("Unknown error, please report to the staff team."); + close(); + } + mes ("Hey, Hey"); + mes ("It is difficult to send to you through the device right now."); + mes ("We should stop exploring today and let's go again another day."); + close; + } + switch( questprogress(7568,PLAYTIME) ) { + case 0: + case 1: + break; + case 2: + mes ("[Artie]"); + mes ("Look, I am sorry but it is not allowed to enter except during the allowed time, Devil's Tower is dangerous."); + close; + } + mes ("[Artie]"); + mes ("Yes, this is the Dimensional Device."); + mes ("It is used to travel time."); + mes ("It will be difficult to enter again if you leave."); + next; + mes ("[Artie]"); + mes ("Don't worry though, I'm a genius scholar~"); + mes ("Anyway, ready to enter?"); + next; + if (select( "Enter the device.", "Stop." ) == 2) { + mes ("[Artie]"); + mes ("Right."); + mes ("It seems like quite a long time has passed since you activated the device. Am I right?"); + close; + } + .@md_name$ = "Devil's Tower"; + if (has_instance("1@tnm1") == "" || has_instance("1@tnm2") == "" || has_instance("1@tnm3") == "" ) { + mes("[Shep]"); + mesf("The memorial dungeon ^0000FF%s^000000 does not exist.\r" + "Please go to talk to Magic Scholar Artie.", .@md_name$); + close(); + } + instance_set_timeout(3600, 300, .@instance); + instance_init(.@instance); + mapannounce("dali02", sprintf(_$("%s, member of the party %s entered the instance %s."), strcharinfo(PC_NAME), .@p_name$, .@md_name$), bc_map, C_SPRINGGREEN); + devil_tower_enter = 1; + warp("1@tnm1", 50, 104); + end; +} +dali02,134,112,3 script #tnmtks01 HIDDEN_WARP_NPC,3,3,{ + end; +OnTouch_: + disablenpc ("#tnmtks01"); + initnpctimer; + end; +OnTimer1000: + npctalk(_("Hey, you! How is your research going?"), ("Magic Scholar Artie#tnm")); + end; +OnTimer3000: + npctalk(_("Who are you calling hey you? You're just a dusty little fairy!"), ("Historian Shep#tnm01")); + end; +OnTimer6000: + npctalk(_("A dusty little what? I'll have you know, I have superior genes to your species you ape!"), ("Magic Scholar Artie#tnm")); + end; +OnTimer9000: + npctalk(_("What do I care what you say? Even our kids are bigger than you tiny little fairies!"), ("Historian Shep#tnm01")); + end; +OnTimer12000: + npctalk(_("Think you're so big just because you're a magic scholar huh?"), ("Historian Shep#tnm01")); + end; +OnTimer14000: + npctalk(_("You know nothing human. Remind me again who found this tower entrance?"), ("Magic Scholar Artie#tnm")); + end; +OnTimer18000: + npctalk(_("*Sigh*... Y....You did."), ("Historian Shep#tnm01")); + end; +OnTimer21000: + npctalk(_("Y....You? Did I stutter? And who solved the formula calculating the dimensional gap connected to the tower?"), ("Magic Scholar Artie#tnm")); + end; +OnTimer24000: + npctalk(_("Yes, yes it was you!"), ("Historian Shep#tnm01")); + end; +OnTimer27000: + npctalk(_("So I take it you're no longer questioning how smart I am right?"), ("Magic Scholar Artie#tnm")); + end; +OnTimer30000: + npctalk(_("Alright, alright. I need an adventurer to explore the tower for us."), ("Historian Shep#tnm01")); + end; +OnTimer33000: + npctalk(_("No one has volunteered because everyone says it's too dangerous!"), ("Historian Shep#tnm01")); + end; +OnTimer36000: + npctalk(_("No volunteers? Come on. Harness your motivational skills and find someone."), ("Magic Scholar Artie#tnm")); + end; +OnTimer37000: + emotion e_gg, ("Magic Scholar Artie#tnm"); + end; +OnTimer39000: + npctalk(_("Hello!!! Now recruiting new members to exploring the Devil's Tower!"), ("Historian Shep#tnm01")); + end; +OnTimer42000: + npctalk(_("Please come! Now's your chance to possibly come face to face with the infamous minions of Satan Morocc himself!"), ("Historian Shep#tnm01")); + end; +OnTimer45000: + npctalk(_("You sure that's the right thing to say? Maybe your recruiting tactics need refining..."), ("Magic Scholar Artie#tnm")); + stopnpctimer; + enablenpc "#tnmtks01"; + end; +} +// Entrance +1@tnm1,50,104,0 script #event01 HIDDEN_WARP_NPC,1,1,{ + end; +OnTouch: + disablenpc instance_npcname("#event01"); + initnpctimer; + end; +OnTimer2000: + npctalk(_("This is an emergency.. How things are going?"), instance_npcname("Officer Heim#heim0")); + end; +OnTimer5000: + npctalk(_("Next floor is the highest one... but there are so many demons..."), instance_npcname("A tirailleur#tnm01")); + end; +OnTimer6000: + emotion e_dots, instance_npcname(instance_npcname("Officer Heim#heim0")); + end; +OnTimer8000: + npctalk(_("It is impossible to break through with the number of our people."), instance_npcname("A tirailleur#tnm01")); + emotion e_swt2, instance_npcname(instance_npcname("A tirailleur#tnm01")); + end; +OnTimer11000: + npctalk(_("How many soldiers have survived now? When is the support team arriving?"), instance_npcname("Officer Heim#heim0")); + end; +OnTimer12000: + emotion e_dots, instance_npcname(instance_npcname("An aide#tnm02")); + end; +OnTimer16000: + npctalk(_("There aren't enough to call in..."), instance_npcname("An aide#tnm02")); + end; +OnTimer17000: + npctalk(_("The good news is the demons have stopped attacking."), instance_npcname("An aide#tnm02")); + end; +OnTimer21000: + npctalk(_("We can't just be stuck here and can go further. Why did the demons stop attacking ?"), instance_npcname("Officer Heim#heim0")); + end; +OnTimer24000: + npctalk(_("It seems like there is something going on up there..."), instance_npcname("A tirailleur#tnm01")); + end; +OnTimer26000: + disablenpc instance_npcname("Officer Heim#heim0"); + enablenpc instance_npcname("Officer Heim#heim"); + npctalk(_("Who are you?"), instance_npcname("Officer Heim#heim")); + stopnpctimer; + end; +} +1@tnm1,57,112,5 script Officer Heim#heim0 4_TOWER_05,{ end; } +1@tnm1,56,110,3 script Officer Heim#heim 4_TOWER_05,{ + .@party_id = getcharid(CHAR_ID_PARTY); + if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)){ + mes ("[Officer Heim]"); + mes ("Who brought you all here?"); + mes ("I will talk to a representative."); + close; + } + switch('devil_tower) { + case 0: + mes ("[Officer Heim]"); + mes ("Back up soldiers? So why are you just standing there?"); + npctalk(_("Back up soldiers? So why are you just standing there?")); + next; + select("Right now?"); + enablenpc instance_npcname("Healer Fama#feima"); + 'devil_tower = 1; + mes ("[Healer Fama]"); + mes ("Commander please help me. I can't do it by myself~!"); + npctalk(_("Commander please help me. I can't do it by myself~!"), instance_npcname("Healer Fama#feima")); + next; + mes ("[Officer Heim]"); + mes ("Do you hear that?"); + mes ("Help Fama take care of the injured soldiers."); + mes ("Fama will give you first aid-kits, use it to help the injured people."); + close2; + setpcblock PCBLOCK_NPC, true; + npctalk(_("Do you hear that?")); + sleep2 2000; + npctalk(_("Help Fama take care of the injured soldiers.")); + sleep2 2000; + npctalk(_("Okay~ You are going to help me? Come here and receive the first aid kit~!")); + setpcblock PCBLOCK_NPC, false; + end; + case 1: + mes ("[Officer Heim]"); + mes ("It is priority to treat the injured soldiers by assisting Fama."); + mes ("Please do your best even if the environment is the worst."); + close; + default: + mes ("[Officer Heim]"); + mes ("Luckily, no one is dead yet."); + mes ("I do not want to see my soldiers die."); + close; + } +} +1@tnm1,47,109,3 script Healer Fama#feima 4_TOWER_10,{ + if ('devil_tower == 1) { + if (countitem(7641) < 1) { + mes ("[Healer Fama]"); + mes ("Please cure the injured with this first aid kit."); + mes ("It's not difficult. Just follow the instructions."); + next; + mes ("[Healer Fama]"); + mes ("We are low on supplies. So I will give them once at a time."); + mes ("Sorry, please request again if you run out."); + if ('devil_tower == 1) + getitem 7641,1;// Medical_Cure_Box + close; + } + mes ("[Healer Fama]"); + mes ("Sorry... procurement is not good right now so I can only provide one first-aid kit at a time."); + mes ("Please request again if you run out."); + close; + } + mes ("[Healer Fama]"); + mes ("Huh... Okay, we can take a break now."); + mes ("Thank you very much!"); + close; +} +1@tnm1,39,114,3 script Injured Soldier#1_1 4_TOWER_01,3,3,{ + if ('devil_tower != 1) + end; + if (countitem(7641) < 1) { + mes ("I need 1 first-aid-kit to treat the injured soldier."); + close; + } + mes ("This soldier has lost consciousness and groaning."); + mes ("Should I use the first-aid kit?"); + next; + if (select( "Use first-aid kit.", "Observe condition." ) == 2) { + mes ("You decide to observe the condition of the injured soldier more."); + close; + } + mes ("You administer the first-aid-kit to the soldier."); + next; + specialeffect EF_SPHERE; + progressbar "000000",10; + if ('devil_tower == 1) { + delitem 7641,1; + specialeffect EF_ENTRY; + disablenpc(instance_npcname("Injured Soldier#1_1")); + enablenpc instance_npcname( strnpcinfo(1) + "#" + replacestr( strnpcinfo(NPC_NAME_HIDDEN), "_1", "" ) ); + specialeffect EF_ENTRY,AREA, instance_npcname( strnpcinfo(1) + "#" + replacestr( strnpcinfo(NPC_NAME_HIDDEN), "_1", "" ) ); + mes ("It worked."); + 'heal_count++; + if ('heal_count == 7) { + 'devil_tower = 2; + npctalk(_("Assassins?!"), instance_npcname("Healer Fama#feima")); + enablenpc instance_npcname("Lucile#tnm01"); + enablenpc instance_npcname("Magic Swordman#tnm01"); + enablenpc instance_npcname("Assassin Huey#tnm01"); + enablenpc instance_npcname("Assassin Louie#tnm01"); + } + } + close; +OnTouch: + .@num = atoi( replacestr( strnpcinfo(NPC_NAME_HIDDEN), "_1", "" ) ); + if (.@num == 1) + npctalk(_("groaning....")); + else if (.@num == 2) + npctalk(_("Owww...")); + else if (.@num == 3) + npctalk(_(".... aah.. aah..")); + else if (.@num == 4) + npctalk(_("Owww...")); + else if (.@num == 5) + npctalk(_("I do not want to die...")); + else if (.@num == 6) + npctalk(_("Owww~")); + else + npctalk(_("Groaning...")); + end; +} +1@tnm1,30,120,3 duplicate(Injured Soldier#1_1) Injured Soldier#2_1 4_TOWER_03,3,3 +1@tnm1,25,117,5 duplicate(Injured Soldier#1_1) Injured Soldier#3_1 4_TOWER_06,3,3 +1@tnm1,19,118,4 duplicate(Injured Soldier#1_1) Injured Soldier#4_1 4_TOWER_08,3,3 +1@tnm1,18,110,4 duplicate(Injured Soldier#1_1) Injured Soldier#5_1 4_TOWER_11,3,3 +1@tnm1,24,104,7 duplicate(Injured Soldier#1_1) Injured Soldier#6_1 4_TOWER_13,3,3 +1@tnm1,31,110,3 duplicate(Injured Soldier#1_1) Injured Soldier#7_1 4_TOWER_03,3,3 +1@tnm1,39,114,3 script Injured Soldier#1 4_TOWER_02,{ + mes ("[Injured soldiers]"); + mes ("whew.. it seems to be okay now."); + mes ("Thank you."); + close; +} +1@tnm1,30,120,3 script Injured Soldier#2 4_TOWER_04,{ + mes ("[Injured soldiers]"); + mes ("Groaning... Just let me die."); + mes ("No it hurts too much."); + close; +} +1@tnm1,25,117,5 script Injured Soldier#3 4_TOWER_07,{ + mes ("[Injured soldiers]"); + mes ("His conscious seems to be blur still."); + mes ("Leave him to get some rest."); + close; +} +1@tnm1,19,118,4 script Injured Soldier#4 4_TOWER_09,{ + mes ("[Injured soldiers]"); + mes ("I thought I was going to die."); + mes ("But I'm alive!"); + close; +} +1@tnm1,18,110,4 script Injured Soldier#5 4_TOWER_12,{ + mes ("[Injured soldiers]"); + mes ("I can't die here. I have to propose to my beloved when I get home."); + mes ("We will be happy for sure?"); + close; +} +1@tnm1,24,104,7 script Injured Soldier#6 4_TOWER_14,{ + mes ("[Injured soldiers]"); + mes ("I feel much better but I still can't move."); + mes ("Still I'm lucky to be alive."); + close; +} +1@tnm1,31,110,3 script Injured Soldier#7 4_TOWER_04,{ + mes ("[Injured soldiers]"); + mes ("Thank you.. Thank you.."); + close; +} +1@tnm1,61,110,3 script An aide#tnm02 4_M_MOCASS2,{ + mes ("[An aide]"); + mes ("The calamity that happened hundreds of years ago will not happen again right?"); + mes ("Why have the demons showed up again so suddenly?"); + close; +} +1@tnm1,61,113,3 script A tirailleur#tnm01 4_M_MOCASS1,{ + mes ("[A tirailleur]"); + mes ("Are you a member of back-up team?"); + mes ("Good. things are getting worse here."); + mes ("Glad that you all are here to help."); + close; +} +1@tnm1,46,105,5 script Lucile#tnm01 4_F_LUCILE,{ + .@party_id = getcharid(CHAR_ID_PARTY); + + if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)){ + cutin "tnm_lucile01.bmp",2; + mes ("[Lucile]"); + mes ("Who is in charge of the back-up team?"); + cutin "",255; + close(); + } + if ('devil_tower == 2) + { + .@lucile$ = instance_npcname("Lucile#tnm01"); + .@heim$ = instance_npcname("Officer Heim#heim"); + 'devil_tower = 3; + setpcblock PCBLOCK_NPC, true; + cutin "tnm_lucile01.bmp",2; + sleep2 1500; + npctalk(_("I am Lucile from the Assassin Guild."), .@lucile$); + sleep2 2000; + npctalk(_("Our back-up is from the Assassin Guild? Thanks for arriving in time."), .@heim$); + sleep2 3000; + npctalk(_("The situation doesn't seem to be good."), .@lucile$); + sleep2 3000; + npctalk(_("What happened to the brave knights of Prontera?"), .@lucile$); + sleep2 3000; + npctalk(_("Are you mocking me?"), .@heim$); + sleep2 3000; + npctalk(_("Not at all. I really want to know. What's going on upstairs?"), .@lucile$); + sleep2 2500; + emotion ET_OHNO, getnpcid(.@heim$); + sleep2 1000; + npctalk(_("How did you know that? Yes, the demons have stopped their attack from upstairs."), .@heim$); + sleep2 3000; + emotion ET_SMILE, getnpcid(.@lucile$); + npctalk(_("What do you think about the situation Magic Swordman?"), .@lucile$); + cutin "tnm_lucile01.bmp",0; + sleep2 3000; + npctalk(_("Hmm, I will go and investigate."), instance_npcname("Magic Swordman#tnm01")); + cutin "tnm_loki.bmp",2; + sleep2 2000; + cutin "",255; + disablenpc instance_npcname("Magic Swordman#tnm01"); + sleep2 1000; + npctalk(_("How are you so fast?"), .@lucile$); + cutin "tnm_lucile01.bmp",2; + sleep2 2000; + npctalk(_("What are you doing? If you go alone you will be killed!"), .@heim$); + sleep2 3000; + npctalk(_("I won't be alone. There are still some uninjured soldiers!"), .@lucile$); + sleep2 2500; + npctalk(_("All right, I will ask you to be my back up. Hahaha right Dewey?"), .@lucile$); + sleep2 500; + enablenpc instance_npcname("Assassin Dewey#tnm01"); + enablenpc instance_npcname("#tnm1stepmob"); + npctalk(_("Okay, I will."), instance_npcname("Assassin Dewey#tnm01")); + 'devil_tower = 4; + sleep2 500; + cutin "",255; + disablenpc .@lucile$; + disablenpc instance_npcname("Assassin Huey#tnm01"); + disablenpc instance_npcname("Assassin Louie#tnm01"); + sleep2 2000; + npctalk(_("They are so unpredictable. You know what is going on right? Back them up..."), .@heim$); + sleep2 2500; + npctalk(_("Help us take care of the demons coming down from upstairs."), .@heim$); + setpcblock PCBLOCK_NPC, false; + end; + } + end; +} +1@tnm1,52,104,2 duplicate(Officer Heim#heim0) Magic Swordman#tnm01 4_M_ROKI +1@tnm1,42,104,4 duplicate(Officer Heim#heim0) Assassin Huey#tnm01 4_TOWER_15 +1@tnm1,44,101,5 duplicate(Officer Heim#heim0) Assassin Louie#tnm01 4_M_ACROSS +1@tnm1,70,108,3 script Assassin Dewey#tnm01 4_M_ACROSS,{ + if ('devil_tower < 4) + end; + if (questprogress(7569) == 0) + setquest 7569;// Treat the injured + if (questprogress(7570) == 0) + setquest 7570;// Destroy the demons + mes ("[Dewey]"); + mes ("I will guide you to the upper floor."); + mes ("Do not forget to get rid of any demons that you encounter on the way."); + next; + if (select( "Move now", "I need more time to prepare." ) == 2) { + mes ("[Dewey]"); + mes ("Be prepared for anything."); + close; + } + mes ("[Dewey]"); + mes ("Travel carefully."); + close2; + warp 'map_tnm1$,91,23; + devil_tower_can_reenter = 1;// nb. different from official (condition overcomplicated) + end; +} +// Stairs tnm1 +// spawn inaccurate +1@tnm1,91,23,0 script #tnm1stepmob HIDDEN_WARP_NPC,1,1,{ + end; +OnTouch: + if ('devil_tower != 4) + end; + disablenpc instance_npcname("#tnm1stepmob"); + enablenpc instance_npcname("Assassin Louie#tnm02"); + enablenpc instance_npcname("Lucile#tnm02"); + initnpctimer; + 'mob_id = monster('map_tnm1$,99,24,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"); // MM_EVIL_SHADOW1 + end; +OnTimer2000: + if (getunittype('mob_id) == -1){end;} else { + + unittalk 'mob_id, "What is this? A human? How dare they must have lost their minds!"; + } + end; +OnTimer5000: + 'mob_id[1] = monster('map_tnm1$,103,21,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"); // MM_EVIL_SHADOW2 + unittalk 'mob_id[1], "Did you make a resolution?"; + 'mob_id[2] = monster('map_tnm1$,103,26,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"); // MM_EVIL_SHADOW3 + unittalk 'mob_id[2], "Ha ha ha ha....Let's fight..!!!"; + end; +OnTimer11000: + monster 'map_tnm1$,106,25,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,106,27,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,110,20,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,112,24,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,107,22,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW3 + monster 'map_tnm1$,114,24,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW3 + end; +OnTimer17000: + monster 'map_tnm1$,120,20,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,122,23,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW1 + end; +OnTimer23000: + monster 'map_tnm1$,116,25,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,116,21,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW2 + end; +OnTimer29000: + monster 'map_tnm1$,134,21,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,130,25,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,129,27,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,120,27,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW3 + monster 'map_tnm1$,118,22,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW3 + end; +OnTimer35000: + monster 'map_tnm1$,138,27,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,144,23,"Evil Shadow",2939,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,129,20,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW2 + end; +OnTimer41000: + monster 'map_tnm1$,140,24,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,144,20,"Evil Shadow",2940,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,130,27,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW3 + monster 'map_tnm1$,127,24,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW3 + monster 'map_tnm1$,142,27,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW3 + monster 'map_tnm1$,140,22,"Evil Shadow",2941,1, instance_npcname("#tnm1stepmob") + "::OnMobDead"; // MM_EVIL_SHADOW3 + stopnpctimer; + end; +OnMobDead: + end; +} +1@tnm1,158,24,3 script Assassin Louie#tnm02 4_M_ACROSS,{ + if ('devil_tower < 4) + end; + if (questprogress(7570,HUNTING) != 2) { + mes ("[Louie]"); + mes ("The Captain says that we need to get rid of all of the demons..."); + mes ("Better get to it."); + close; + } + mes ("[Louie]"); + mes ("A lot of soldiers still survived the attacks."); + mes ("They got rid of all the demons."); + next; + mes ("[Louie]"); + mes ("I was making sure that no one goes upstairs, I was afraid something might happen again."); + next; + mes ("[Louie]"); + mes ("I wish you would help me."); + mes ("I will guide you."); + if (questprogress(7571) == 0) { + erasequest 7569;// Treat the injured + erasequest 7570;// Destroy the demons + setquest 7571;// Tower Expedition + } + next; + mes ("I have been exploring the passages of this tower for a while now."); + close2; + warp 'map_tnm1$,124,86; + end; +} +// Stairs 2 tnm1 +1@tnm1,138,96,3 script Lucile#tnm02 4_F_LUCILE,{ + + .@party_id = getcharid(CHAR_ID_PARTY); + + if (questprogress(7571) == 0) + end; + if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)){ + mes ("You wave your hand in front of her but she doesn't react."); + close; + } + if ('devil_tower < 4) + end; + if ('devil_tower < 6) { + if ('devil_tower == 4) { + mes ("[Lucile]"); + mes ("I am sorry if I'm giving you any attitude but I can't move."); + npctalk(_("I am sorry if I'm giving you any attitude but I can't move.")); + cutin "tnm_lucile02.bmp",2; + next; + select("Can I help?"); + mes ("[Lucile]"); + mes ("I can use self-recovery but I don't have time for that."); + mes ("Will you share your power with me?"); + npctalk(_("I can use self-recovery but I don't have time for that. Will you share your power with me?")); + next; + mes ("[Lucile]"); + mes ("I need your help to activate my restoration system."); + mes ("Please hold tight."); + npctalk(_("I need your help to activate my restoration system.")); + next; + sleep2 750; + npctalk(_("Please hold tight.")); + if ('devil_tower == 4) { + donpcevent instance_npcname("Huey#hui02") + "::OnEnable"; + 'devil_tower = 5; + } + percentheal -30,0; + } + cutin "tnm_lucile03.bmp",2; + mes ("Lucile seems to be a machine."); + mes ("I can hear mechanical sounds all of a sudden."); + specialeffect EF_LEVEL99_3; + progressbar "000000",40; + if ('devil_tower == 5) { + if (questprogress(7572) == 0) + setquest 7572;// Lucile...? + 'devil_tower = 6; + } + mes ("System is restored."); + next; + mes ("[Lucile]"); + mes ("Wow! You fixed it faster than I thought."); + mes ("Did that surprise you?"); + mes ("I have to be fixed occasionally because I don't have a normal body"); + cutin "tnm_lucile02.bmp",2; + next; + mes ("[Lucile]"); + mes ("This body was a gift from the gods."); + mes ("Do you see the gate in the middle?"); + cutin "tnm_lucile01.bmp",2; + next; + mes ("[Lucile]"); + mes ("Hurry up or this world will be in a danger."); + close2; + cutin "",255; + // continue + } + if ('devil_tower == 6) { + sleep 1500; + npctalk(_("Let me excuse myself, follow me if you want to save the world.")); + sleep 2000; + npctalk(_("sister..."), instance_npcname("Huey#hui02")); + if ('devil_tower == 6) { + disablenpc instance_npcname("Lucile#tnm02"); + enablenpc instance_npcname("Lucile#tnm03"); + enablenpc instance_npcname("Magic Swordman#tnm02"); + enablenpc instance_npcname("Demon Morocc#tnm01"); + 'devil_tower = 7; + } + } + end; +} + +1@tnm1,135,99,5 script Huey#hui02 4_TOWER_15,{ + if ('devil_tower < 5) + end; + if ('devil_tower == 5 || 'devil_tower == 6) { + mes ("[Huey]"); + mes ("I am concerned about her."); + mes ("It happens whenever she's wounded."); + mes ("Because she's mostly machine..."); + close; + } + if ('mob_count > 0) { + mes ("[Huey]"); + mes ("I know the path upstairs..."); + mes ("First of all, we have to get rid of these demons!"); + close; + } + mes ("[Huey]"); + mes ("I wonder how the others are doing..."); + mes ("Only Thanatos and Lucile have ever entered to upper floor..."); + next; + mes ("[Huey]"); + mes ("If you want to assist them, you must hurry."); + mes ("I will guide the way for you."); + next; + if (select( "Move immediately.", "Do not follow." ) == 2) { + mes ("[Huey]"); + mes ("...I see."); + close; + } + mes ("[Huey]"); + mes ("This way."); + mes ("Be careful."); + close2; + warp 'map_tnm2$,152,130; + end; +OnEnable: + enablenpc instance_npcname("Huey#hui02"); + initnpctimer; + end; +OnTimer3000: + npctalk(_("Oh no, sister watch out! Demons have suddenly appeared!")); + 'mob_count = 16; + monster 'map_tnm1$,142,90,"Evil Shadow",2939,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,139,91,"Evil Shadow",2940,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,130,86,"Evil Shadow",2940,1, instance_npcname("Huey#hui02") + "::OnMobDead"; + monster 'map_tnm1$,143,95,"Evil Shadow",2941,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW3 + monster 'map_tnm1$,134,90,"Evil Shadow",2941,1, instance_npcname("Huey#hui02") + "::OnMobDead"; + end; +OnTimer6000: + npctalk(_("Where are they coming from? Demons again......")); + end; +OnTimer8000: + monster 'map_tnm1$,137,103,"Evil Shadow",2939,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,140,102,"Evil Shadow",2939,1, instance_npcname("Huey#hui02") + "::OnMobDead"; + monster 'map_tnm1$,132,103,"Evil Shadow",2940,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,146,100,"Evil Shadow",2940,1, instance_npcname("Huey#hui02") + "::OnMobDead"; + monster 'map_tnm1$,142,105,"Evil Shadow",2940,1, instance_npcname("Huey#hui02") + "::OnMobDead"; + monster 'map_tnm1$,135,107,"Evil Shadow",2941,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW3 + end; +OnTimer11000: + npctalk(_("Oh, no...")); + end; +OnTimer12000: + monster 'map_tnm1$,135,107,"Evil Shadow",2939,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW1 + monster 'map_tnm1$,146,100,"Evil Shadow",2939,1, instance_npcname("Huey#hui02") + "::OnMobDead"; + monster 'map_tnm1$,130,86,"Evil Shadow",2940,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW2 + monster 'map_tnm1$,137,103,"Evil Shadow",2940,1, instance_npcname("Huey#hui02") + "::OnMobDead"; + monster 'map_tnm1$,143,95,"Evil Shadow",2941,1, instance_npcname("Huey#hui02") + "::OnMobDead"; // MM_EVIL_SHADOW3 + stopnpctimer; + end; +OnMobDead: + 'mob_count--; + if ('mob_count == 0) + npctalk(_("This way. This way... we can go upstairs by using the gap that the demons were coming from!")); + end; +} +// Morocc - Thanatos Battle +1@tnm2,136,139,3 script Magic Swordman#tnm02 THANATOS_KEEP,{ + mes ("[Magic Swordman Thanatos]"); + mes ("I am sorry but I have been through tough time..."); + close; +} +1@tnm2,133,139,5 duplicate(Officer Heim#heim0) Demon Morocc#tnm01 MOROCC +1@tnm2,144,137,3 script Lucile#tnm03 4_F_LUCILE,{ + .@party_id = getcharid(CHAR_ID_PARTY); + + if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) { + mes ("[Lucile]"); + mes ("I am talking to your party leader now so please step back for a while."); + cutin "tnm_lucile01.bmp",2; + cutin "",255; + close; + } + if ('devil_tower == 7) { + mes ("[Lucile]"); + mes ("Oh. You just have arrived in time."); + mes ("Do you want to take a look over there?"); + cutin "tnm_lucile01.bmp",2; + next; + mes ("[Lucile]"); + mes ("We need to stop the demon..."); + mes ("Can you do that?"); + npctalk(_("We need to stop the demon... Can you do that?")); + if ('devil_tower == 7) { + if (questprogress(7573) == 0) + setquest 7573;// Magic Swordman Thanatos + 'demon$ = instance_npcname("Demon Morocc#tnm01"); + 'thanatos$ = instance_npcname("Magic Swordman#tnm02"); + initnpctimer; + 'devil_tower = 8; + } + cutin "",255; + close(); + } + mes ("[Lucile]"); + mes ("We need to hold this spot until the trap is set by the Magic Swordman."); + cutin "tnm_lucile01.bmp",2; + cutin "",255; + close(); +OnTimer2000: + npctalk(_("You silly human. How long do you think you can manage to tie me up!"), 'demon$); + end; +OnTimer5000: + npctalk(_("Shadows! Come out and kill all enemies of darkness!"), 'demon$); + end; +OnTimer6000: + donpcevent instance_npcname("#devil_seal_timer") + "::OnStart"; + end; +OnTimer8000: + npctalk(_("You are so desperate that you're begging me to save you."), 'thanatos$); + end; +OnTimer11500: + npctalk(_("Thanatos. Sir, should you be bluffing like that?")); + end; +OnTimer12000: + npctalk(_("Be afraid of the destruction that I will bring when I'm released!"), 'demon$); + end; +OnTimer15000: + npctalk(_("Shut up! You will never leave here unless I kill you!"), 'thanatos$); + end; +OnTimer16500: + npctalk(_("Lucile! Watch my back while I conjure up a shield to hold him!"), 'thanatos$); + end; +OnTimer19500: + npctalk(_("Yes sir.")); + end; +OnTimer22500: + npctalk(_(" Okay everyone, now we know what to do. We have to prevent the Magic Seal from reaching here!")); + stopnpctimer; + end; +} +1@tnm2,1,1,0 script #devil_flamecross HIDDEN_WARP_NPC,{ + end; +OnStart: + npctalk(_("No way!! Troublemakers!"), 'demon$); + mapannounce 'map_tnm2$, "Demon Morocc: No way!! Troublemakers!", bc_map,0xFF0000; + initnpctimer; + end; +OnTimer1000: + setarray .@north[0], 138,151, 138,160, 140,165, 140,176, 140,170, 140,181, 140,186, 140,191; + setarray .@north_west[0], 126,149, 122,151, 118,153, 113,154, 107,156, 101,158, 96,160, 91,161, 86,162, 81,163; + setarray .@south_west[0], 128,130, 125,127, 122,124, 118,121, 115,118, 112,115, 109,114, 106,106, 102,102, 99,98; + setarray .@south_east[0], 145,130, 148,126, 151,122, 156,120, 160,117, 164,113, 168,109, 172,105, 176,101, 180,97; + setarray .@north_east[0], 146,149, 148,149, 150,151, 155,152, 162,153, 167,154, 173,156, 179,158, 185,160, 191,161; + .@label$ = instance_npcname("#devil_flamecross") + "::OnFlameDead"; + for ( .@i = 0; .@i < 20; .@i += 2 ) { + if (.@north[.@i] > 0) // 8 mobs for north + monster 'map_tnm2$,.@north[.@i],.@north[.@i+1], "",MM_FLAMECROSS,1, .@label$; + monster 'map_tnm2$,.@north_west[.@i],.@north_west[.@i+1], "",MM_FLAMECROSS,1, .@label$; + monster 'map_tnm2$,.@south_west[.@i],.@south_west[.@i+1], "",MM_FLAMECROSS,1, .@label$; + monster 'map_tnm2$,.@south_east[.@i],.@south_east[.@i+1], "",MM_FLAMECROSS,1, .@label$; + monster 'map_tnm2$,.@north_east[.@i],.@north_east[.@i+1], "",MM_FLAMECROSS,1, .@label$; + sleep 200; + } + end; +OnTimer6000: + killmonster 'map_tnm2$, instance_npcname("#devil_flamecross") + "::OnFlameDead"; + end; +OnTimer20000: + stopnpctimer; + donpcevent instance_npcname("#devil_flamecross") + "::OnStart"; + end; +OnStop: + stopnpctimer; + killmonster 'map_tnm2$, instance_npcname("#devil_flamecross") + "::OnFlameDead"; + end; +OnFlameDead: + end; +} +1@tnm2,1,1,0 script #devil_seal_timer HIDDEN_WARP_NPC,{ + end; +OnStart: + enablenpc instance_npcname("#devil_seal_timer"); + enablenpc instance_npcname("#devil_flamecross"); + setarray .@direction$[0], "DIR_NORTHWEST", "DIR_SOUTHWEST", "DIR_SOUTHEAST", "DIR_NORTHEAST", "DIR_NORTH"; + for ( .@i = 0; .@i < 5; .@i++ ) { + enablenpc instance_npcname("devil_seal#" + .@direction$[.@i]); + enablenpc instance_npcname("seal_reach#" + .@direction$[.@i]); + } + enablenpc instance_npcname("#devil_seal_dead"); + donpcevent instance_npcname("#devil_seal_spawn_global") + "::OnCoord"; + initnpctimer; + end; +OnTimer5000: + mapannounce 'map_tnm2$, "A Magic Seal has just appeared in southeast direction of the tower.", bc_map,0xFFFFFF; + donpcevent instance_npcname("#devil_seal_spawn_global") + "::OnFirstSpawn"; + end; +OnTimer10000: + donpcevent instance_npcname("#devil_flamecross") + "::OnStart"; + end; +OnTimer25000: + mapannounce 'map_tnm2$, "Lucile: We should stop before Magic Seal has just started to move again.", bc_map,0xFFFFFF; + end; +OnTimer65000: + mapannounce 'map_tnm2$, "Lucile: We should stop before Magic Seal reaches the center.", bc_map,0xFFFFFF; + end; +OnTimer95000: + mapannounce 'map_tnm2$, "Lucile: The Magic Seal has just started to move again.", bc_map,0xFFFFFF; + end; +OnTimer125000: + mapannounce 'map_tnm2$, "Lucile: It is coming closer... No... It's too dangerous.", bc_map,0xFFFFFF; + end; +OnTimer155000: + mapannounce 'map_tnm2$, "Lucile: The Magic Seal is almost approaching the center!!", bc_map,0xFFFFFF; + end; +OnTimer180000: + donpcevent instance_npcname("#devil_flamecross") + "::OnStop"; + end; +OnTimer185000: + mapannounce 'map_tnm2$, "Lucile: We should stop it now!", bc_map,0xFFFFFF; + end; +OnTimer191000: + npctalk(_("What are you doing!!! Are you playing a game now?!"), 'thanatos$); + mapannounce 'map_tnm2$, "Thanatos: What are you doing!!! Are you playing a game now?!", bc_map,0xFF00; + end; +OnTimer193000: + specialeffect EF_MAGNUMBREAK,AREA, 'thanatos$; + specialeffect EF_LORD,AREA, 'thanatos$; + setarray .@direction$[0], "DIR_NORTHWEST", "DIR_SOUTHWEST", "DIR_SOUTHEAST", "DIR_NORTHEAST", "DIR_NORTH"; + for ( .@i = 0; .@i < 5; .@i++ ) + donpcevent instance_npcname("devil_seal#" + .@direction$[.@i]) + "::OnStop"; + end; +OnTimer195000: + npctalk(_("Are you going to keep disturbing me!!!"), 'demon$); + mapannounce 'map_tnm2$, "Demon Morocc: Are you going to keep disturbing me!!!", bc_map,0xFF0000; + end; +OnTimer198000: + npctalk(_("Okay, Let's see who is going to win!!! Come out!"), 'demon$); + mapannounce 'map_tnm2$, "Demon Morocc: Okay, Let's see who is going to win!!! Come out!", bc_map,0xFF0000; + end; +OnTimer201000: + npctalk(_("It will be the same no matter how many times you try! Give up and go back to demon world!!"), 'thanatos$); + mapannounce 'map_tnm2$, "Thanatos: It will be the same no matter how many times you try! Give up and go back to demon world!!", bc_map,0xFF00; + initnpctimer; + end; +OnStop: + stopnpctimer; + donpcevent instance_npcname("#devil_flamecross") + "::OnStop"; + disablenpc instance_npcname("#devil_flamecross"); + disablenpc instance_npcname("#devil_seal_timer"); + end; +} +1@tnm2,1,1,0 script #devil_seal_spawn_global HIDDEN_WARP_NPC,{ + end; +OnCoord: + enablenpc instance_npcname("#devil_seal_spawn_global"); + // setarray 'coord_seal_DIR_NORTHWEST[0], 68,167, 78,165, 88,163, 98,160, 108,156, 118,152, 127,147; + setarray 'coord_seal_DIR_NORTHWEST[0], 68,167, 78,165, 88,163, 98,160, 108,156, 118,152, 118,152;// officially + setarray 'coord_seal_DIR_SOUTHWEST[0], 90, 86, 96, 95, 103,103, 110,110, 116,116, 122,122, 129,130; + setarray 'coord_seal_DIR_SOUTHEAST[0], 191,86, 183, 94, 174,103, 165,112, 156,120, 147,128, 143,131; + setarray 'coord_seal_DIR_NORTHEAST[0], 197,162, 188,161, 179,158, 170,155, 161,152, 152,149, 144,148; + setarray 'coord_seal_DIR_NORTH[0], 142,214, 140,205, 140,195, 140,185, 140,173, 139,161, 138,150; + end; +OnFirstSpawn: + 'round[DIR_NORTHWEST] = 'round[DIR_SOUTHWEST] = 'round[DIR_SOUTHEAST] = 'round[DIR_NORTHEAST] = 'round[DIR_NORTH] = 0; + donpcevent instance_npcname("devil_seal#DIR_NORTHWEST") + "::OnFirstSpawn"; + donpcevent instance_npcname("devil_seal#DIR_SOUTHWEST") + "::OnFirstSpawn"; + donpcevent instance_npcname("devil_seal#DIR_SOUTHEAST") + "::OnFirstSpawn"; + donpcevent instance_npcname("devil_seal#DIR_NORTHEAST") + "::OnFirstSpawn"; + donpcevent instance_npcname("devil_seal#DIR_NORTH") + "::OnFirstSpawn"; + initnpctimer; + end; +OnTimer2000: + donpcevent instance_npcname("devil_seal#DIR_NORTHWEST") + "::OnSlaves"; + donpcevent instance_npcname("devil_seal#DIR_SOUTHWEST") + "::OnSlaves"; + donpcevent instance_npcname("devil_seal#DIR_SOUTHEAST") + "::OnSlaves"; + donpcevent instance_npcname("devil_seal#DIR_NORTHEAST") + "::OnSlaves"; + donpcevent instance_npcname("devil_seal#DIR_NORTH") + "::OnSlaves"; + end; +OnTimer20000: + donpcevent instance_npcname("devil_seal#DIR_NORTHWEST") + "::OnStart"; + donpcevent instance_npcname("devil_seal#DIR_SOUTHEAST") + "::OnStart"; + donpcevent instance_npcname("devil_seal#DIR_NORTH") + "::OnStart"; + end; +OnTimer30000: + donpcevent instance_npcname("devil_seal#DIR_SOUTHWEST") + "::OnStart"; + donpcevent instance_npcname("devil_seal#DIR_NORTHEAST") + "::OnStart"; + end; +OnStop: + stopnpctimer; + disablenpc instance_npcname("#devil_seal_spawn_global"); + end; +} +1@tnm2,1,1,0 script devil_seal#DIR_NORTHWEST HIDDEN_WARP_NPC,{ + end; + +OnStart: + .@num = getd( strnpcinfo(NPC_NAME_HIDDEN) ); + if ('seal_id[.@num] == 0 || getunittype('seal_id[.@num]) == -1){ + stopnpctimer; + }else { + getunitdata 'seal_id[.@num], .@data; + 'seal_hp[.@num] = .@data[UDT_HP]; + killmonster 'map_tnm2$, instance_npcname("#devil_seal_dead") + "::OnSeal_" + strnpcinfo(NPC_NAME_HIDDEN); + initnpctimer; + } + end; + +OnFirstSpawn: +OnTimer5000: + .@num = getd( strnpcinfo(NPC_NAME_HIDDEN)); + .@index = 'round[.@num]; + .@index = .@index * 2; + + //mapannounce 'map_tnm2$, "OnFirstSpawn: .@index = "+.@index, bc_map,0xFF0000; + + if (.@index == 0 || 'seal_id[.@num]) + { + .@direction$ = strnpcinfo(NPC_NAME_HIDDEN); + .@x = getd( "'coord_seal_" + .@direction$ + "[" + .@index + "]" ); + .@y = getd( "'coord_seal_" + .@direction$ + "[" + (.@index+1) + "]" ); + + 'seal_id[.@num] = monster('map_tnm2$,.@x,.@y,"Magic Seal",MM_MAGIC_SEAL,1, instance_npcname("#devil_seal_dead") + "::OnSeal_" + .@direction$); // MM_MAGIC_SEAL + 'round[.@num]++; + if ('round[.@num] == 7) + donpcevent instance_npcname("seal_reach#" + .@direction$) + "::OnStart"; + + if ('seal_hp[.@num] > 0) + setunitdata 'seal_id[.@num], UDT_HP, 'seal_hp[.@num]; + } + end; +OnSlaves: +OnTimer7000: + killmonster 'map_tnm2$, instance_npcname(strnpcinfo(NPC_NAME)) + "::OnMobDead"; + .@num = getd( strnpcinfo(NPC_NAME_HIDDEN) ); + + if ('seal_id[.@num] && getunittype('seal_id[.@num])) { + .@direction$ = strnpcinfo(NPC_NAME_HIDDEN); + .@index = ('round[.@num] - 1) * 2; + .@x = getd( "'coord_seal_" + .@direction$ + "[" + .@index + "]" ); + .@y = getd( "'coord_seal_" + .@direction$ + "[" + (.@index+1) + "]" ); + areamonster 'map_tnm2$,(.@x-1),(.@y-1),(.@x+1),(.@y+1),"Evil Shadow",MM_EVIL_SHADOW1,2, instance_npcname(strnpcinfo(NPC_NAME)) + "::OnMobDead"; // MM_EVIL_SHADOW1 + areamonster 'map_tnm2$,(.@x-1),(.@y-1),(.@x+1),(.@y+1),"Evil Shadow",MM_EVIL_SHADOW2,2, instance_npcname(strnpcinfo(NPC_NAME)) + "::OnMobDead"; // MM_EVIL_SHADOW2 + if ('round[.@num] == 7) + stopnpctimer; + } else { end; } + end; +OnTimer30000: + donpcevent instance_npcname("devil_seal#" + strnpcinfo(NPC_NAME_HIDDEN)) + "::OnStart"; + end; +OnDisable: + stopnpctimer; + killmonster 'map_tnm2$, instance_npcname(strnpcinfo(NPC_NAME)) + "::OnMobDead"; // note : officially still alive + killmonster 'map_tnm2$, instance_npcname("#devil_seal_dead") + "::OnSeal_" + strnpcinfo(NPC_NAME_HIDDEN); // note : officially still alive + disablenpc(instance_npcname("devil_seal#DIR_NORTHWEST")); + end; +OnStop: + stopnpctimer; + killmonster 'map_tnm2$, instance_npcname(strnpcinfo(NPC_NAME)) + "::OnMobDead"; + killmonster 'map_tnm2$, instance_npcname("#devil_seal_dead") + "::OnSeal_" + strnpcinfo(NPC_NAME_HIDDEN); + end; +OnMobDead: + end; +} +1@tnm2,1,1,0 duplicate(devil_seal#DIR_NORTHWEST) devil_seal#DIR_SOUTHWEST HIDDEN_WARP_NPC +1@tnm2,1,1,0 duplicate(devil_seal#DIR_NORTHWEST) devil_seal#DIR_SOUTHEAST HIDDEN_WARP_NPC +1@tnm2,1,1,0 duplicate(devil_seal#DIR_NORTHWEST) devil_seal#DIR_NORTHEAST HIDDEN_WARP_NPC +1@tnm2,1,1,0 duplicate(devil_seal#DIR_NORTHWEST) devil_seal#DIR_NORTH HIDDEN_WARP_NPC +1@tnm2,1,1,0 script seal_reach#DIR_NORTHWEST HIDDEN_WARP_NPC,{ + end; +OnStart: + enablenpc(instance_npcname("seal_reach#DIR_NORTHWEST")); + initnpctimer; + end; +OnTimer2000: + npctalk(_("Kuh ha ha ha ha Pieces of my power! Gather here again!!!"), 'demon$); + mapannounce 'map_tnm2$, "Demon Morocc: Kuh ha ha ha ha Pieces of my power! Gather here again!!!", bc_map,0xFF0000; + end; +OnTimer4000: + npctalk(_("Stop him! Prevent him from coming closer!!!"), 'thanatos$); + mapannounce 'map_tnm2$, "Thanatos: Stop him! Prevent him from coming closer!!!", bc_map,0xFF00; + stopnpctimer; + disablenpc(instance_npcname("seal_reach#DIR_NORTHWEST")); + end; +} +1@tnm2,1,1,0 duplicate(seal_reach#DIR_NORTHWEST) seal_reach#DIR_SOUTHWEST HIDDEN_WARP_NPC +1@tnm2,1,1,0 duplicate(seal_reach#DIR_NORTHWEST) seal_reach#DIR_SOUTHEAST HIDDEN_WARP_NPC +1@tnm2,1,1,0 duplicate(seal_reach#DIR_NORTHWEST) seal_reach#DIR_NORTHEAST HIDDEN_WARP_NPC +1@tnm2,1,1,0 duplicate(seal_reach#DIR_NORTHWEST) seal_reach#DIR_NORTH HIDDEN_WARP_NPC +1@tnm2,1,1,0 script #devil_seal_dead HIDDEN_WARP_NPC,{ + end; +OnSeal_DIR_NORTHWEST: callsub( S_Sealdead, DIR_NORTHWEST ); +OnSeal_DIR_SOUTHWEST: callsub( S_Sealdead, DIR_SOUTHWEST ); +OnSeal_DIR_SOUTHEAST: callsub( S_Sealdead, DIR_SOUTHEAST ); +OnSeal_DIR_NORTHEAST: callsub( S_Sealdead, DIR_NORTHEAST ); +OnSeal_DIR_NORTH: callsub( S_Sealdead, DIR_NORTH ); +S_Sealdead: + 'seal_id[ getarg(0) ] = 0; + 'seal_dead[ getarg(0) ] = 1; + .@total_seal = 'seal_dead[DIR_NORTHWEST] + 'seal_dead[DIR_SOUTHWEST] + 'seal_dead[DIR_SOUTHEAST] + 'seal_dead[DIR_NORTHEAST] + 'seal_dead[DIR_NORTH]; + if (.@total_seal != 5) { + if (getarg(0) == DIR_NORTHWEST) + mapannounce 'map_tnm2$, "Lucile: It is too early to feel easy! There are Magic Seals that haven't been destroyed yet.", bc_map,0xFF00; + else + mapannounce 'map_tnm2$, "There are still Magic Seals to destroy.", bc_map,0xFF00; + } + else { + donpcevent instance_npcname("#devil_seal_spawn_global") + "::OnStop"; + donpcevent instance_npcname("#devil_seal_timer") + "::OnStop"; // stop timer of npc #devil_flamecross as well + donpcevent instance_npcname("devil_seal#DIR_NORTHWEST") + "::OnDisable";// note: on official seals and slaves are alive + donpcevent instance_npcname("devil_seal#DIR_SOUTHWEST") + "::OnDisable"; + donpcevent instance_npcname("devil_seal#DIR_SOUTHEAST") + "::OnDisable"; + donpcevent instance_npcname("devil_seal#DIR_NORTHEAST") + "::OnDisable"; + donpcevent instance_npcname("devil_seal#DIR_NORTH") + "::OnDisable"; + mapannounce 'map_tnm2$, "Demon Morocc: No.. This can't be.. Who the hell.. are you!", bc_map,0xFF0000; + npctalk(_("No.. This can't be.. Who the hell.. are you!"), 'demon$); + initnpctimer; + } + end; +OnTimer3000: + mapannounce 'map_tnm2$, "Thanatos: It will be the last time to show off!! Good bye!!!", bc_map,0xFF0000; + npctalk(_("It will be the last time to show off!! Good bye!!!"), 'thanatos$); + end; +OnTimer5000: + specialeffect EF_LORD,AREA, 'thanatos$; + end; +OnTimer7000: + stopnpctimer; + disablenpc 'demon$; + disablenpc 'thanatos$; + disablenpc instance_npcname("Lucile#tnm03"); + enablenpc instance_npcname("Lucile#tnm04"); + enablenpc instance_npcname("#tnm3event01"); + enablenpc instance_npcname("Young Girl#tnm01"); + 'devil_tower = 9; + 'demon$ = 'thanatos$ = ""; + 'round[DIR_NORTHWEST] = 'round[DIR_SOUTHWEST] = 'round[DIR_SOUTHEAST] = 'round[DIR_NORTHEAST] = 'round[DIR_NORTH] = 0; + 'seal_id[DIR_NORTHWEST] = 'seal_id[DIR_SOUTHWEST] = 'seal_id[DIR_SOUTHEAST] = 'seal_id[DIR_NORTHEAST] = 'seal_id[DIR_NORTH] = 0; + 'seal_hp[DIR_NORTHWEST] = 'seal_hp[DIR_SOUTHWEST] = 'seal_hp[DIR_SOUTHEAST] = 'seal_hp[DIR_NORTHEAST] = 'seal_hp[DIR_NORTH] = 0; + 'seal_dead[DIR_NORTHWEST] = 'seal_dead[DIR_SOUTHWEST] = 'seal_dead[DIR_SOUTHEAST] = 'seal_dead[DIR_NORTHEAST] = 'seal_dead[DIR_NORTH] = 0; + deletearray 'coord_seal_DIR_NORTHWEST[0],14; + deletearray 'coord_seal_DIR_SOUTHWEST[0],14; + deletearray 'coord_seal_DIR_SOUTHEAST[0],14; + deletearray 'coord_seal_DIR_NORTHEAST[0],14; + deletearray 'coord_seal_DIR_NORTH[0],14; + end; +} +1@tnm2,144,137,3 script Lucile#tnm04 4_F_LUCILE,{ + if ('devil_tower < 9) + end; + if (questprogress(7574) == 0) { + if (questprogress(7572) == 1) + erasequest 7572;// Lucile...? + if (questprogress(7573) == 1) // leader + erasequest 7573;// Magic Swordman Thanatos + setquest 7574;// Thanatos Tower + mes ("[Lucile]"); + mes ("I guess the power of Demon Morocc to break the shield of seal has collided with Thanatos."); + cutin "tnm_lucile01.bmp",2; + next; + mes ("[Lucile]"); + mes ("It has gone too far somewhere in the south"); + mes ("Will you go there?"); + } + else { + mes ("[Lucile]"); + mes ("The collision of those two powers is too much to handle."); + mes ("It could have influenced the south of Rune-Midgarts."); + } + next; + if (select( "Follow.", "Stop." ) == 2) { + mes ("[Lucile]"); + mes ("...I guess this is what you are able to?"); + cutin "tnm_lucile02.bmp",2; + cutin "",255; + close(); + } + mes ("[Lucile]"); + mes ("Good luck."); + close2; + warp 'map_tnm3$,21,171; + end; +} +// tnm3 Stairs 1 +1@tnm3,21,171,0 script #tnm3event01 HIDDEN_NPC,1,1,{ + end; +OnTouch: + if ('devil_tower != 9) + end; + setpcblock PCBLOCK_NPC, true; + disablenpc instance_npcname("#tnm3event01"); + enablenpc instance_npcname("Young Girl#tnm01"); + sleep2 4000; + mapannounce 'map_tnm3$, "Young Girl: Odin Preserve me! A demon!! Help me!", bc_map,0xFF00; + 'mob_count = 12; + initnpctimer; + setpcblock PCBLOCK_NPC, false; + end; +OnTimer1000: + monster 'map_tnm3$,33,171,"Evil Shadow",2939,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW1 + end; +OnTimer2000: + monster 'map_tnm3$,39,172,"Evil Shadow",2939,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW1 + end; +OnTimer3000: + monster 'map_tnm3$,34,177,"Evil Shadow",2940,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW2 + end; +OnTimer4000: + monster 'map_tnm3$,36,176,"Evil Shadow",2940,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW2 + end; +OnTimer5000: + monster 'map_tnm3$,37,175,"Evil Shadow",2940,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW2 + end; +OnTimer6000: + monster 'map_tnm3$,37,173,"Evil Shadow",2941,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW3 + monster 'map_tnm3$,36,172,"Evil Shadow",2941,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW3 + end; +OnTimer7000: + monster 'map_tnm3$,29,178,"Evil Shadow",2941,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW3 + monster 'map_tnm3$,35,172,"Evil Shadow",2941,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW3 + end; +OnTimer8000: + monster 'map_tnm3$,34,173,"Evil Shadow",2941,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW3 + monster 'map_tnm3$,35,172,"Evil Shadow",2939,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW1 + end; +OnTimer9000: + monster 'map_tnm3$,34,173,"Evil Shadow",2941,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW3 + stopnpctimer; + end; +} +1@tnm3,43,175,3 script Young Girl#tnm01 4_F_DST_CHILD,{ + if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)){ + mes ("*weeping* The demons are so scary."); + close; + } + if ('devil_tower < 9) + end; + if ('devil_tower == 9) + { + mes ("[Young Girl]"); + mes ("Why are there demons in the castle?!"); + mes ("HELP ME!"); + close; + } + if ('devil_tower == 10) + { + mes ("[Young Girl]"); + mes ("Why would demons come all of a sudden,"); + mes ("lots of guards are hurt."); + npctalk(_("Why would demons come all of a sudden, lots of guards are hurt.")); + next; + select("Where are they?"); + unittalk getcharid(3), "" + strcharinfo(0) + " : Where are they?"; + mes ("[Young Girl]"); + mes ("They are in Morocc castle. My father is a knight."); + npctalk(_("They are in Morocc castle. My father is a knight.")); + next; + mes ("[Young Girl]"); + mes ("It seems like something is happening, I hear strange noises downstairs."); + npctalk(_("It seems like something is happening, I hear strange noises downstairs.")); + next; + mes ("[Young Girl]"); + mes ("I saw some guys in black entering. What is going on in the castle?"); + npctalk(_("I saw some guys in black entering. What is going on in the castle?")); + next; + mes ("[Young Girl]"); + mes ("Papa.. Papa please be safe. *sob*"); + mes ("Please come with me through the passage behind that shelf!"); + npctalk(_("Please come with me through the passage behind that shelf!")); + close2; + if ('devil_tower == 10) + { + enablenpc instance_npcname("#tnm3gate01"); + enablenpc instance_npcname("#tnm3event02ect"); + 'devil_tower = 11; + } + end; + } + if ('devil_tower == 11) + { + mes ("[Young Girl]"); + mes ("Behind that shelf is a secret passage to the basement!"); + mes ("Please come with me to make sure my Papa is safe."); + close; + } + end; +OnMobDead: + 'mob_count--; + if ('mob_count == 0) + { + 'devil_tower = 10; + npctalk(_("Thank you for saving me... but why is there a demon?")); + } + end; +} +1@tnm3,52,176,0 warp #tnm3gate01 2,2,1@tnm3,85,178 +// tnm3 Stairs 2 +1@tnm3,85,178,0 script #tnm3event02ect HIDDEN_NPC,1,1,{ + end; +OnTouch: + if ('devil_tower != 11) + end; + disablenpc instance_npcname("#tnm3event02ect"); + enablenpc instance_npcname("Young Girl#tnm02"); + npctalk(_("Look! More demons, they will overwhelm the castle soon!"), instance_npcname("Young Girl#tnm02")); + 'mob_count = 18; + initnpctimer; + end; +OnTimer1000: + .@label$ = instance_npcname("Young Girl#tnm02") + "::OnMobDead"; + monster 'map_tnm3$,97,174,"Evil Shadow",2939,1, .@label$; + monster 'map_tnm3$,98,175,"Evil Shadow",2939,1, .@label$; + monster 'map_tnm3$,100,166,"Evil Shadow",2939,1, .@label$; + monster 'map_tnm3$,108,171,"Evil Shadow",2940,1, .@label$; + monster 'map_tnm3$,104,172,"Evil Shadow",2940,1, .@label$; + end; +OnTimer3000: + .@label$ = instance_npcname("Young Girl#tnm02") + "::OnMobDead"; + monster 'map_tnm3$,109,169,"Evil Shadow",2941,1, .@label$; + monster 'map_tnm3$,111,173,"Evil Shadow",2941,1, .@label$; + monster 'map_tnm3$,113,167,"Evil Shadow",2941,1, .@label$; + monster 'map_tnm3$,101,176,"Evil Shadow",2939,1, .@label$; + monster 'map_tnm3$,116,170,"Evil Shadow",2941,1, .@label$; + end; +OnTimer5000: + .@label$ = instance_npcname("Young Girl#tnm02") + "::OnMobDead"; + monster 'map_tnm3$,107,175,"Evil Shadow",2940,1, .@label$; + monster 'map_tnm3$,106,174,"Evil Shadow",2940,1, .@label$; + monster 'map_tnm3$,106,169,"Evil Shadow",2939,1, .@label$; + monster 'map_tnm3$,103,177,"Evil Shadow",2940,1, .@label$; + end; +OnTimer7000: + stopnpctimer; + .@label$ = instance_npcname("Young Girl#tnm02") + "::OnMobDead"; + monster 'map_tnm3$,121,171,"Evil Shadow",2941,1, .@label$; + monster 'map_tnm3$,119,173,"Evil Shadow",2941,1, .@label$; + monster 'map_tnm3$,127,166,"Evil Shadow",2941,1, .@label$; + monster 'map_tnm3$,125,166,"Evil Shadow",2941,1, .@label$; + end; +} +1@tnm3,89,179,4 script Young Girl#tnm02 4_F_DST_CHILD,{ + end; +OnMobDead: + 'mob_count--; + if ('mob_count == 0) { + mapannounce 'map_tnm3$, "Young Girl: The way underground is along this aisle!", bc_map,0xFF00; + disablenpc instance_npcname("Young Girl#tnm02"); + enablenpc instance_npcname("Young Girl#tnm03"); + npctalk(_("The way underground is along this aisle!"), instance_npcname("Young Girl#tnm03")); + enablenpc instance_npcname("#tnm3gate02"); + enablenpc instance_npcname("Evil Shadow#tnm3mob01"); + } + end; +} +1@tnm3,128,164,3 script Young Girl#tnm03 4_F_DST_CHILD,{ + mes ("[Young Girl]"); + mes ("From here.. I do not know well..."); + mes ("I see so many stairs..."); + mes ("See there are so many demons. My father will be in a danger!"); + mes ("Please save him."); + close; +} +1@tnm3,134,156,0 warp #tnm3gate02 1,1,1@tnm3,169,165 +// tnm3 Stairs 3 +1@tnm3,179,172,3 script Evil Shadow#tnm3mob01 MM_EVIL_SHADOW3,4,4,{ +OnTouch_: + if ('devil_tower == 11) + { + 'devil_tower = 12; + setpcblock PCBLOCK_NPC, true; + sleep2 1000; + npctalk(_("I thought I smelled rats sneaking in here. I was right!!")); + sleep2 3000; + npctalk(_("You will rue your curiosity and interference. Time to feed!")); + sleep2 3000; + npctalk(_("I summon the Darkness!!")); + disablenpc instance_npcname("Evil Shadow#tnm3mob01"); + donpcevent instance_npcname("Evil kill#tnm3mob01") + "::OnSummon"; + setpcblock PCBLOCK_NPC, false; + } + end; +} +1@tnm3,1,1,0 script Evil kill#tnm3mob01 HIDDEN_WARP_NPC,{ + end; +OnSummon: + enablenpc instance_npcname("Evil kill#tnm3mob01"); + 'mob_count = 5; + initnpctimer; + monster 'map_tnm3$,179,172, "Evil Shadow",2941,1, instance_npcname("Evil kill#tnm3mob01") + "::OnMobDead";// MM_EVIL_SHADOW3 + end; +OnTimer1000: + monster 'map_tnm3$,181,172, "Evil Shadow",2940,1, instance_npcname("Evil kill#tnm3mob01") + "::OnMobDead";// MM_EVIL_SHADOW2 + monster 'map_tnm3$,178,172, "Evil Shadow",2940,1, instance_npcname("Evil kill#tnm3mob01") + "::OnMobDead"; + end; +OnTimer2000: + monster 'map_tnm3$,179,172, "Evil Shadow",2939,1, instance_npcname("Evil kill#tnm3mob01") + "::OnMobDead";// MM_EVIL_SHADOW1 + monster 'map_tnm3$,176,173, "Evil Shadow",2939,1, instance_npcname("Evil kill#tnm3mob01") + "::OnMobDead"; + stopnpctimer; + end; +OnMobDead: + 'mob_count--; + if ('mob_count == 0) { + enablenpc instance_npcname("#tnm3gate03"); + enablenpc instance_npcname("Demonic Shade#mobmaster"); + enablenpc instance_npcname("Morocc Lord Knight#mocl"); + enablenpc instance_npcname("Loki#tnmloki01"); + } + end; +} +1@tnm3,183,177,0 warp #tnm3gate03 1,1,1@tnm3,97,6 +// Demonic Shade (Boss room) +1@tnm3,97,18,3 script Demonic Shade#mobmaster MM_EVIL_SHADOW1,5,5,{ + end; +OnTouch_:// possibility to skip this step + if ('devil_tower < 12) + end; + if ('shade == 0) { + 'shade = 1; + setpcblock PCBLOCK_NPC, true; + sleep2 1000; + npctalk(_("So you are the trouble makers!")); + sleep2 2000; + npctalk(_("Tsk, You couldn't even manage to protect..?.whatever.. you will all die here.")); + sleep2 3000; + npctalk(_("The eternal truth is I will turn your deaths into the Demon's life with your hearts' blood!!!")); + disablenpc instance_npcname("Demonic Shade#mobmaster"); + donpcevent instance_npcname("#mobmaster_kill") + "::OnSummon"; + setpcblock PCBLOCK_NPC, false; + } + end; +} +1@tnm3,1,1,0 script #mobmaster_kill HIDDEN_WARP_NPC,{ + end; +OnSummon: + enablenpc instance_npcname("#mobmaster_kill"); + initnpctimer; + monster 'map_tnm3$,97,18, "Demonic Shade",2939,1, instance_npcname("#mobmaster_kill") + "::OnMobDead"; + end; +OnTimer1000: + .@label$ = instance_npcname("#mobmaster_kill") + "::OnMobDead"; + stopnpctimer; + monster 'map_tnm3$,94,18, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,96,18, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,113,18, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,119,22, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,116,18, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,116,18, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,114,12, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,116,21, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,74,18, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,75,12, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,76,21, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,69,16, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,57,43, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,58,44, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,59,46, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,60,48, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,56,45, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,57,44, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,80,71, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,59,77, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,77,73, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,77,72, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,59,70, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,81,66, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,60,69, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,57,73, "Demonic Shade",2940,1, .@label$; + monster 'map_tnm3$,62,74, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,78,67, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,75,22, "Demonic Shade",2941,1, .@label$; + monster 'map_tnm3$,81,69, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,77,11, "Demonic Shade",2939,1, .@label$; + monster 'map_tnm3$,58,74, "Demonic Shade",2941,1, .@label$; + end; +OnMobDead: + end; +} +1@tnm3,93,52,4 script Morocc Lord Knight#mocl 1_M_MOC_LORD,{ + mes ("[Morocc Lord Knight]"); + mes ("You were the rats who were sneaking around here!"); + close; +} +1@tnm3,97,48,3 script Loki#tnmloki01 4_M_ROKI2,{ + if ('devil_tower == 12) { + 'devil_tower = 13; + donpcevent instance_npcname("#morocc_lord_talk") + "::OnStart"; + end; + } + mes ("[Loki]"); + mes ("You have no power here."); + close; +} +1@tnm3,94,51,4 duplicate(Officer Heim#heim0) Young Girl#tnm04 4_F_DST_CHILD +1@tnm2,1,1,0 script #morocc_lord_talk HIDDEN_WARP_NPC,{ + end; +OnStart: + enablenpc instance_npcname("#morocc_lord_talk"); + 'Morocc$ = instance_npcname("Morocc Lord Knight#mocl"); + 'loki$ = instance_npcname("Loki#tnmloki01"); + npctalk(_("So.. the rat was an assassin? You came here to die?"), 'Morocc$); + initnpctimer; + end; +OnTimer3000: + npctalk(_("What will you accomplish by waking the Demon in the Wall?"), 'loki$); + end; +OnTimer6000: + npctalk(_("My mission brought me here to bury it again."), 'loki$); + end; +OnTimer9000: + npctalk(_("Really.. the Assassin guild who I thought was on a mission to balance power in the world."), 'Morocc$); + end; +OnTimer12000: + npctalk(_("Resurrecting the demon would bring balance! Even the mightiest become slaves to a god.."), 'Morocc$); + end; +OnTimer15000: + npctalk(_("The gods have their own plans. Do you know what the gods plan for you or I?"), 'Morocc$); + end; +OnTimer18000: + npctalk(_("They want this world to only be in their image. Where do we fit into that?!"), 'Morocc$); + end; +OnTimer20000: + npctalk(_("Shut up!"), 'loki$); + end; +OnTimer22000: + npctalk(_("I do not care about gods or demons or the plans that they have made. The only thing that matters is kill you."), 'loki$); + end; +OnTimer25000: + npctalk(_("That is my mission!"), 'loki$); + end; +OnTimer28000: + npctalk(_("So all you want is to finish your damn mission?.."), 'Morocc$); + end; +OnTimer31000: + npctalk(_("*Grins* Of course!!"), 'loki$); + specialeffect EF_BEGINSPELL3,AREA, 'loki$; + end; +OnTimer33000: + npctalk(_("Mind blaster-!!!"), 'loki$); + end; +OnTimer34000: + enablenpc instance_npcname("Young Girl#tnm04"); + npctalk(_("No..!! Don't hurt my Papa!!!"), instance_npcname("Young Girl#tnm04")); + specialeffect EF_HIT3,AREA, instance_npcname("Young Girl#tnm04"); + end; +OnTimer34500: + specialeffect EF_HIT2,AREA, instance_npcname("Young Girl#tnm04"); + end; +OnTimer35500: + specialeffect EF_ICECRASH,AREA, instance_npcname("Young Girl#tnm04"); + end; +OnTimer36500: + npctalk(_("!!!"), 'loki$); + end; +OnTimer38500: + npctalk(_("Oh no.. They should have sent better than you, Mr. Assassin, for this mission."), 'Morocc$); + end; +OnTimer41500: + npctalk(_("Something is wrong...."), instance_npcname("Young Girl#tnm04")); + end; +OnTimer44500: + npctalk(_("My Papa would never act this way.. Ugh.."), instance_npcname("Young Girl#tnm04")); + end; +OnTimer47500: + npctalk(_("Human.. To do such a stupid thing.. a sacrifice."), 'Morocc$); + end; +OnTimer50500: + npctalk(_("You know, the truth is, that it is useless."), 'Morocc$); + end; +OnTimer53500: + npctalk(_("Gwuaaa hahahaha. You stupid humans I will kill you all as sacrifices for the demon!!"), 'Morocc$); + specialeffect EF_COUPLECASTING,AREA, 'Morocc$; + specialeffect EF_VOLCANO,AREA, 'Morocc$; + end; +OnTimer54500: + npctalk(_("... tsk! useless....!"), 'loki$); + end; +OnTimer55500: + enablenpc instance_npcname("Loki#tnmloki02"); + mapwarp 'map_tnm3$, 'map_tnm3$,136,62;// todo area 1x1 + 'devil_tower = 13; + stopnpctimer; + disablenpc instance_npcname("#morocc_lord_talk"); + disablenpc instance_npcname("Morocc Lord Knight#mocl"); + disablenpc instance_npcname("Loki#tnmloki01"); + disablenpc instance_npcname("Young Girl#tnm04"); + end; +} +1@tnm3,137,65,3 script Loki#tnmloki02 4_M_ROKI2,{ + .@party = getcharid(CHAR_ID_PARTY); + + if ('devil_tower != 13) + end; + if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) { + mes ("[Loki]"); + mes ("I am talking to your boss."); + close; + } + if (getmercinfo(0) > 0) { + mes ("[Loki]"); + mes ("...embarrassing."); + mes ("You should ^4d4dffTerminate the mercenary contract^000000, if you want to help me on this mission."); + close; + } + mes ("[Loki]"); + mes ("Where did you come from?"); + mes ("I may need help here."); + npctalk(_("Where did you come from? I may need help here."), instance_npcname("Loki#tnmloki02")); + next; + mes ("[Loki]"); + mes ("The Lord Knight is no longer human. I have to send him to his eternity for his demonic followings."); + npctalk(_("The Lord Knight is no longer human. I have to send him to his eternity."), instance_npcname("Loki#tnmloki02")); + next; + mes ("[Loki]"); + mes ("^4d4dffThe ones who are infernally blessed by demons are invincible. We can sever the blessing with Mind Blaster.^000000"); + npctalk(_("The ones who are infernally blessed by demons are invincible. We can sever the blessing with Mind Blaster."), instance_npcname("Loki#tnmloki02")); + next; + mes ("[Loki]"); + mes ("You will be in charge of activating Mind Blaster."); + npctalk(_("You will be in charge of activating Mind Blaster."), instance_npcname("Loki#tnmloki02")); + next; + if ('devil_tower == 13) { + disablenpc instance_npcname("Loki#tnmloki02"); + mes ("^4d4dffLoki, Guillotine Cross of the Assassin Guild, has joined your party."); + mes ("We have to get rid of the demonic Lord Knight by Mind Blasting him with Loki's skill.^000000"); + 'devil_tower = 14; + mercenary_create 2937,1800000;// M_LOKI + mapannounce 'map_tnm3$, "Demon Worshipper's Voice: Such rubbish! Where did you hide yourself?", bc_map,0xFF00; + initnpctimer; + } + close; +OnTimer500: + enablenpc instance_npcname("#boss_skills_timer"); + 'boss_id = monster('map_tnm3$,93,52,"Evil Believer",2942,1, instance_npcname("#boss_skills_timer") + "::OnBossDead");// MM_EVIL_FANATICS + end; +OnTimer2000: + mapannounce 'map_tnm3$, "Demon Worshipper's Voice: You will all be sacrificed to awaken the Demon!!!", bc_map,0xFF00; + end; +OnTimer12000: + donpcevent instance_npcname("#boss_skills_timer") + "::OnStart"; + stopnpctimer; + end; +} +1@tnm3,1,1,0 script #boss_skills_timer HIDDEN_WARP_NPC,{ + end; +OnStart: + 'label$ = instance_npcname("#boss_skills_timer") + "::OnMobDead"; + initnpctimer; + end; +OnTimer1000:// + form + getmapxy('map_tnm3$, 'x_boss, 'y_boss, UNITTYPE_MOB, 'boss_id); + + monster 'map_tnm3$, 'x_boss, 'y_boss, "",2943,1, 'label$;// MM_ICE_MINE + monster 'map_tnm3$, ('x_boss-5), 'y_boss, "",2943,1, 'label$; + monster 'map_tnm3$, ('x_boss+5), 'y_boss, "",2943,1, 'label$; + monster 'map_tnm3$, 'x_boss, ('y_boss-5), "",2943,1, 'label$; + monster 'map_tnm3$, 'x_boss, ('y_boss+5), "",2943,1, 'label$; + end; +OnTimer3000: + monster 'map_tnm3$, ('x_boss-10), 'y_boss, "",2943,1, 'label$;// MM_ICE_MINE + monster 'map_tnm3$, ('x_boss+10), 'y_boss, "",2943,1, 'label$; + monster 'map_tnm3$, 'x_boss, ('y_boss-10), "",2943,1, 'label$; + monster 'map_tnm3$, 'x_boss, ('y_boss+10), "",2943,1, 'label$; + end; +OnTimer6000: + killmonster 'map_tnm3$, 'label$; + end; +OnTimer21000:// X form + getmapxy('map_tnm3$, 'x_boss, 'y_boss, UNITTYPE_MOB, 'boss_id); + + monster 'map_tnm3$, ('x_boss+3), ('y_boss+3), "",2960,1, 'label$;// MM_FLAMECROSS + monster 'map_tnm3$, ('x_boss+3), ('y_boss-3), "",2960,1, 'label$; + monster 'map_tnm3$, ('x_boss-3), ('y_boss+3), "",2960,1, 'label$; + monster 'map_tnm3$, ('x_boss-3), ('y_boss-3), "",2960,1, 'label$; + end; +OnTimer21350: + monster 'map_tnm3$, ('x_boss+6), ('y_boss+6), "",2960,1, 'label$;// MM_FLAMECROSS + monster 'map_tnm3$, ('x_boss+6), ('y_boss-6), "",2960,1, 'label$; + monster 'map_tnm3$, ('x_boss-6), ('y_boss+6), "",2960,1, 'label$; + monster 'map_tnm3$, ('x_boss-6), ('y_boss-6), "",2960,1, 'label$; + end; +OnTimer21700: + monster 'map_tnm3$, ('x_boss+9), ('y_boss+9), "",2960,1, 'label$;// MM_FLAMECROSS + monster 'map_tnm3$, ('x_boss+9), ('y_boss-9), "",2960,1, 'label$; + monster 'map_tnm3$, ('x_boss-9), ('y_boss+9), "",2960,1, 'label$; + monster 'map_tnm3$, ('x_boss-9), ('y_boss-9), "",2960,1, 'label$; + end; +OnTimer22050: + monster 'map_tnm3$, ('x_boss+13), ('y_boss+13), "",2960,1, 'label$;// MM_FLAMECROSS + monster 'map_tnm3$, ('x_boss+13), ('y_boss-13), "",2960,1, 'label$; + monster 'map_tnm3$, ('x_boss-13), ('y_boss+13), "",2960,1, 'label$; + monster 'map_tnm3$, ('x_boss-13), ('y_boss-13), "",2960,1, 'label$; + end; +OnTimer30000: + killmonster 'map_tnm3$, 'label$; + end; +OnTimer51000:// X form + getmapxy('map_tnm3$, 'x_boss, 'y_boss, UNITTYPE_MOB, 'boss_id); + + monster 'map_tnm3$, 'x_boss, 'y_boss, "",2943,1, 'label$;// MM_ICE_MINE + monster 'map_tnm3$, ('x_boss+5), ('y_boss+5), "",2943,1, 'label$; + monster 'map_tnm3$, ('x_boss-5), ('y_boss-5), "",2943,1, 'label$; + monster 'map_tnm3$, ('x_boss+10), ('y_boss+10), "",2943,1, 'label$; + monster 'map_tnm3$, ('x_boss-10), ('y_boss-10), "",2943,1, 'label$; + end; +OnTimer53000: + monster 'map_tnm3$, ('x_boss-5), ('y_boss+5), "",2943,1, 'label$;// MM_ICE_MINE + monster 'map_tnm3$, ('x_boss+5), ('y_boss-5), "",2943,1, 'label$; + monster 'map_tnm3$, ('x_boss-10), ('y_boss+10), "",2943,1, 'label$; + monster 'map_tnm3$, ('x_boss+10), ('y_boss-10), "",2943,1, 'label$; + end; +OnTimer56000: + killmonster 'map_tnm3$, 'label$; + end; +OnTimer81000:// S form + getmapxy('map_tnm3$, 'x_boss, 'y_boss, UNITTYPE_MOB, 'boss_id); + + monster 'map_tnm3$, ('x_boss-2), ('y_boss+5), "",2960,1, 'label$;// MM_FLAMECROSS + end; +OnTimer81300: + monster 'map_tnm3$, ('x_boss+4), ('y_boss+8), "",2960,1, 'label$; + end; +OnTimer81600: + monster 'map_tnm3$, ('x_boss+10), ('y_boss+2), "",2960,1, 'label$; + end; +OnTimer82000: + monster 'map_tnm3$, ('x_boss+10), ('y_boss-1), "",2960,1, 'label$; + end; +OnTimer82300: + monster 'map_tnm3$, ('x_boss+7), ('y_boss-7), "",2960,1, 'label$; + end; +OnTimer82600: + monster 'map_tnm3$, ('x_boss+1), ('y_boss-10), "",2960,1, 'label$; + end; +OnTimer83000: + monster 'map_tnm3$, ('x_boss-11), ('y_boss-1), "",2960,1, 'label$; + end; +OnTimer83300: + monster 'map_tnm3$, ('x_boss-11), ('y_boss+5), "",2960,1, 'label$; + end; +OnTimer83600: + monster 'map_tnm3$, ('x_boss-8), ('y_boss+11), "",2960,1, 'label$; + end; +OnTimer84000: + monster 'map_tnm3$, ('x_boss-2), ('y_boss+17), "",2960,1, 'label$; + end; +OnTimer84300: + monster 'map_tnm3$, ('x_boss+7), ('y_boss+20), "",2960,1, 'label$; + end; +OnTimer90000: + killmonster 'map_tnm3$, 'label$; + initnpctimer; + end; +OnMobDead: + end; +OnBossDead: + stopnpctimer; + killmonster 'map_tnm3$, 'label$; + 'x_boss = 'y_boss = 'boss_id = 0; + 'label$ = ""; + mapannounce 'map_tnm3$, "Demon Worshipper's Voice: NO it is impossible. It cannot be.. This force.. power.. you.. may..be you are..", bc_map,0xFF0000; + sleep2 1000; + warpparty 'map_tnm3$,71,70, getcharid(1), 'map_tnm3$,1,1; + enablenpc instance_npcname("Loki#tnmloki03"); + enablenpc instance_npcname("box#tnmbosang"); + disablenpc instance_npcname("#boss_skills_timer"); + 'devil_tower = 15; + end; +} +1@tnm3,69,70,3 script box#tnmbosang 4_TREASURE_BOX,{ + if ('devil_tower != 15) + end; + specialeffect EF_COIN; + disablenpc instance_npcname("box#tnmbosang"); + makeitem 7293,1, 'map_tnm3$, (69 + rand(-5,5)), (70 + rand(-5,5)); // Rose Quartz + makeitem 749,1, 'map_tnm3$, (69 + rand(-5,5)), (70 + rand(-5,5)); // Frozen Rose + makeitem 7511,1, 'map_tnm3$, (69 + rand(-5,5)), (70 + rand(-5,5)); // Rune of Darkness + if (rand(100) < 75) + makeitem 616,1, 'map_tnm3$, (69 + rand(-5,5)), (70 + rand(-5,5)); // Old Card Album + if (rand(100) < 50) + makeitem 748,1, 'map_tnm3$, (69 + rand(-5,5)), (70 + rand(-5,5)); // Witherless_Rose + setarray .@item_id_list[0], + 1671, // Devil_Won_Staff + 13094, // Devil_Pierced_Dagger + 16027, // Hammer_Of_Evil_Slayer + 18120, // Bow_Of_Evil_Slayer + 21010, // Tw_Sword_Of_Evil_Slayer + 28001; // Katar_Of_Evil_Slayer + setarray .@bonus_list1[0], + 4800, // SP50 + 4811, // Fighting_Spirit1 + 4810, // Fighting_Spirit2 + 4809, // Fighting_Spirit3 + 4808, // Fighting_Spirit4 + 4820, // Fighting_Spirit5 + 4821, // Fighting_Spirit6 + 4815, // Spell1 + 4814, // Spell2 + 4813, // Spell3 + 4812, // Spell4 + 4786; // Mdef2 + setarray .@bonus_list2[0], + 4815, // Spell1 + 4814, // Spell2 + 4813, // Spell3 + 4812, // Spell4 + 4826, // Spell5 + 4811, // Fighting_Spirit1 + 4810, // Fighting_Spirit2 + 4809, // Fighting_Spirit3 + 4808, // Fighting_Spirit4 + 4820, // Fighting_Spirit5 + 4786; // Mdef2 + setarray .@bonus_list3[0], + 4815, // Spell1 + 4814, // Spell2 + 4813, // Spell3 + 4812, // Spell4 + 4811, // Fighting_Spirit1 + 4810, // Fighting_Spirit2 + 4809, // Fighting_Spirit3 + 4808, // Fighting_Spirit4 + 4820, // Fighting_Spirit5 + 4821, // Fighting_Spirit6 + 4791, // DEF+3 + 4786; // Mdef2 + .@item_id = .@item_id_list[ rand( getarraysize(.@item_id_list) ) ]; + .@refine = rand(1,6); + .@bonus1 = .@bonus_list1[ rand( getarraysize(.@bonus_list1) ) ]; + .@bonus2 = .@bonus_list1[ rand( getarraysize(.@bonus_list2) ) ]; + .@bonus3 = .@bonus_list1[ rand( getarraysize(.@bonus_list3) ) ]; + + //makeitem2(,,,,,,,,,{"",,,}) + makeitem2(.@item_id, 1, 0, .@refine,0,0,.@bonus1,.@bonus2,.@bonus3, 'map_tnm3$, (69 + rand(-5,5)), (70 + rand(-5,5))); + end; +} +//1@tnm3,69,72,3 script Loki#tnmloki03 4_M_ROKI2,5,5,{ +1@tnm3,69,72,3 script Loki#tnmloki03 4_M_ROKI2,{ + if ('devil_tower != 15) + end; + if (questprogress(7576) == 0) { + mes ("[Loki]"); + mes (".. annoying"); + mes ("The demon was destroyed before the resurrection ceremony was completed."); + mes ("Things will be fine for awhile."); + setquest 7576;// Morocc castle seal + next; + mes ("I have gained unexpected information during my exploration of the Tower."); + next; + mes ("[Loki]"); + mes ("I will remain apart from my conscience for a bit longer"); + mes ("someday I'll let myself feel again, and today will occupy my thoughts.."); + close; + } + mes ("[Loki]"); + mes ("Interesting.. there is a daughter.."); + mes ("What should be done about it?"); + mes ("I am not sure of what my next move is to be.."); + next; + mes ("[Loki]"); + mes ("But no matter, you obviously shouldn't be here, now."); + mes ("Will stay here any longer?"); + mes ("I can send you back where and when you belong."); + next; + if (select( "Get out of here.", "Take a look around." ) == 2) { + mes ("[Loki]"); + mes ("It is unwise to linger where time is distorted."); + close; + } + mes ("[Loki]"); + mes ("Perhaps, our missions will ally us again in the future.."); + close2; + warp "dali02",134,112; + end; +OnInstanceInit: + 'heal_count = 0; + 'devil_tower = 0; + 'mob_count = 0; + 'shade = 0; + 'map_tnm1$ = instance_mapname("1@tnm1"); + 'map_tnm2$ = instance_mapname("1@tnm2"); + 'map_tnm3$ = instance_mapname("1@tnm3"); + // Entrance + disablenpc instance_npcname("Officer Heim#heim"); + disablenpc instance_npcname("Healer Fama#feima"); + for ( .@i = 1; .@i < 8; .@i++ ) + disablenpc instance_npcname( "Injured Soldier#" + .@i ); + disablenpc instance_npcname("Lucile#tnm01"); + disablenpc instance_npcname("Magic Swordman#tnm01"); + disablenpc instance_npcname("Assassin Huey#tnm01"); + disablenpc instance_npcname("Assassin Louie#tnm01"); + disablenpc instance_npcname("Assassin Dewey#tnm01"); + // Stairs tnm1 + disablenpc instance_npcname("#tnm1stepmob"); + disablenpc instance_npcname("Assassin Louie#tnm02"); + // Stairs 2 tnm1 + disablenpc instance_npcname("Lucile#tnm02"); + disablenpc instance_npcname("Huey#hui02"); + // Morocc - Thanatos Battle + disablenpc instance_npcname("Magic Swordman#tnm02"); + disablenpc instance_npcname("Demon Morocc#tnm01"); + disablenpc instance_npcname("Lucile#tnm03"); + disablenpc instance_npcname("Lucile#tnm04"); + disablenpc instance_npcname("#devil_flamecross"); + disablenpc instance_npcname("#devil_seal_timer"); + disablenpc instance_npcname("#devil_seal_spawn_global"); + setarray .@direction$[0], "DIR_NORTHWEST", "DIR_SOUTHWEST", "DIR_SOUTHEAST", "DIR_NORTHEAST", "DIR_NORTH"; + for ( .@i = 0; .@i < 5; .@i++ ) { + disablenpc instance_npcname("devil_seal#" + .@direction$[.@i]); + disablenpc instance_npcname("seal_reach#" + .@direction$[.@i]); + } + disablenpc instance_npcname("#devil_seal_dead"); + 'demon$ = 'thanatos$ = ""; + 'round[DIR_NORTHWEST] = 'round[DIR_SOUTHWEST] = 'round[DIR_SOUTHEAST] = 'round[DIR_NORTHEAST] = 'round[DIR_NORTH] = 0; + 'seal_id[DIR_NORTHWEST] = 'seal_id[DIR_SOUTHWEST] = 'seal_id[DIR_SOUTHEAST] = 'seal_id[DIR_NORTHEAST] = 'seal_id[DIR_NORTH] = 0; + 'seal_hp[DIR_NORTHWEST] = 'seal_hp[DIR_SOUTHWEST] = 'seal_hp[DIR_SOUTHEAST] = 'seal_hp[DIR_NORTHEAST] = 'seal_hp[DIR_NORTH] = 0; + 'seal_dead[DIR_NORTHWEST] = 'seal_dead[DIR_SOUTHWEST] = 'seal_dead[DIR_SOUTHEAST] = 'seal_dead[DIR_NORTHEAST] = 'seal_dead[DIR_NORTH] = 0; + deletearray 'coord_seal_DIR_NORTHWEST[0],14; + deletearray 'coord_seal_DIR_SOUTHWEST[0],14; + deletearray 'coord_seal_DIR_SOUTHEAST[0],14; + deletearray 'coord_seal_DIR_NORTHEAST[0],14; + deletearray 'coord_seal_DIR_NORTH[0],14; + // tnm3 Stairs 1 + disablenpc instance_npcname("#tnm3event01"); + disablenpc instance_npcname("Young Girl#tnm01"); + disablenpc instance_npcname("#tnm3gate01"); + // tnm3 Stairs 2 + disablenpc instance_npcname("#tnm3event02ect"); + disablenpc instance_npcname("Young Girl#tnm02"); + disablenpc instance_npcname("Young Girl#tnm03"); + disablenpc instance_npcname("#tnm3gate02"); + // tnm3 Stairs 3 + disablenpc instance_npcname("Evil Shadow#tnm3mob01"); + disablenpc instance_npcname("Evil kill#tnm3mob01"); + disablenpc instance_npcname("#tnm3gate03"); + // Demonic Shade (Boss room) + disablenpc instance_npcname("Demonic Shade#mobmaster"); + disablenpc instance_npcname("#mobmaster_kill"); + // Boss + disablenpc instance_npcname("Morocc Lord Knight#mocl"); + disablenpc instance_npcname("#morocc_lord_talk"); + disablenpc instance_npcname("Loki#tnmloki01"); + disablenpc instance_npcname("Young Girl#tnm04"); + disablenpc instance_npcname("Loki#tnmloki02"); + disablenpc instance_npcname("#boss_skills_timer"); + 'x_boss = 'y_boss = 'boss_id = 0; + 'label$ = ""; + // Final + disablenpc instance_npcname("Loki#tnmloki03"); + disablenpc instance_npcname("box#tnmbosang"); + end; +} +/* +1@tnm2,139,130,4 script start_devil PORING,{ + disablenpc instance_npcname("Lucile#tnm02"); + enablenpc instance_npcname("Lucile#tnm03"); + enablenpc instance_npcname("Magic Swordman#tnm02"); + enablenpc instance_npcname("Demon Morocc#tnm01"); + 'devil_tower = 7; +} +jupe_ele,40,49,4 script start_devil_2 PORING,{ + + mercenary_create 2937,1800000;// M_LOKI +} +*/ \ No newline at end of file diff --git a/npc/re/scripts.conf b/npc/re/scripts.conf index 3b60c637f4c..30ec8356890 100644 --- a/npc/re/scripts.conf +++ b/npc/re/scripts.conf @@ -95,6 +95,7 @@ "npc/re/instances/OldGlastHeim.txt", "npc/re/instances/saras_memory.txt", "npc/re/instances/WolfchevLaboratory.txt", +"npc/re/instances/DevilTower.txt", //================= Kafras & Cool Event Corp. ============================= "npc/re/kafras/kafras.txt", diff --git a/src/common/mmo.h b/src/common/mmo.h index 2c7e454b50d..e979767ff75 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -378,7 +378,7 @@ STATIC_ASSERT(MAX_ACHIEVEMENT_RANKS <= 255, "This value is limited by the client #define MC_SKILLBASE 8201 #endif #ifndef MAX_MERCSKILL -#define MAX_MERCSKILL 40 +#define MAX_MERCSKILL 41 #endif // Elemental System diff --git a/src/map/battle.c b/src/map/battle.c index 0488da2b406..2267024a7bf 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3981,6 +3981,10 @@ static struct Damage battle_calc_magic_attack(struct block_list *src, struct blo //Damage calculation from iRO wiki. [Jobbie] ad.damage = status->get_lv(src) * 10 + sstatus->int_; break; + case NPC_ICEMINE: + case NPC_FLAMECROSS: + ad.damage = sstatus->rhw.atk * 20 * skill_lv; + break; /** * Summoner */ diff --git a/src/map/skill.c b/src/map/skill.c index 02b92e74b1c..c497a55bb11 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -7385,6 +7385,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list * case ST_PRESERVE: case NPC_INVINCIBLE: case NPC_INVINCIBLEOFF: + case MER_INVINCIBLEOFF2: case RK_DEATHBOUND: case AB_RENOVATIO: case AB_EXPIATIO: @@ -12291,6 +12292,8 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill case NPC_EARTHQUAKE: case NPC_EVILLAND: case WL_COMET: + case NPC_ICEMINE: + case NPC_FLAMECROSS: case RA_ELECTRICSHOCKER: case RA_CLUSTERBOMB: case RA_MAGENTATRAP: @@ -14413,6 +14416,8 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b case UNT_PSYCHIC_WAVE: case UNT_MAGMA_ERUPTION: case UNT_MAKIBISHI: + case UNT_ICEMINE: + case UNT_FLAMECROSS: skill->attack(skill->get_type(sg->skill_id, sg->skill_lv), ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0); break; @@ -21206,6 +21211,14 @@ static void skill_init_unit_layout(void) memcpy(skill->dbs->unit_layout[pos].dy,dy,sizeof(dy)); } break; + case NPC_FLAMECROSS: { + static const int dx[] = { -2,-1, 1, 2, 0, 0, 0, 0 }; + static const int dy[] = { 0, 0, 0, 0,-2,-1, 1, 2 }; + skill->dbs->unit_layout[pos].count = 8; + memcpy(skill->dbs->unit_layout[pos].dx, dx, sizeof(dx)); + memcpy(skill->dbs->unit_layout[pos].dy, dy, sizeof(dy)); + } + break; default: skill->init_unit_layout_unknown(i, pos); break;