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(- ,,,,,,,,,{"