Ver código fonte

Temple of the demon god instance (#5611)

* Implemented Temple of the Demong God instance
Implemented the skills NPC_WIDEWEB, NPC_WIDESUCK and NPC_FIRESTORM from https://github.com/idathena/trunk
Credit to @exneval

Thanks to @Badarosk0 @idk-whoami @Everade @aleos89
Atemo 3 anos atrás
pai
commit
5933ab8304

+ 1 - 0
db/mercenary_db.txt

@@ -36,6 +36,7 @@
 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
+3087,M_NYDHOG,Guardian's Alter Ego,160,215000,1,2,1835,444,15,89,76,66,90,55,189,22,10,12,1,7,20,175,800,750,300
 
 // Normal Mercenaries
 6017,MER_ARCHER01,Mina,20,256,200,10,170,85,7,5,1,16,5,1,28,8,10,0,0,7,20,150,700,432,300

+ 12 - 0
db/pre-re/skill_db.yml

@@ -16336,6 +16336,18 @@ Body:
     MaxLevel: 1
     Flags:
       ShowScale: true
+  - Id: 721
+    Name: NPC_WIDEWEB
+    Description: Wide Web
+    MaxLevel: 1
+  - Id: 722
+    Name: NPC_WIDESUCK
+    Description: Wide Suck
+    MaxLevel: 1
+  - Id: 724
+    Name: NPC_FIRESTORM
+    Description: Fire Storm
+    MaxLevel: 3
   - Id: 725
     Name: NPC_REVERBERATION
     Description: Reverberation 2

+ 6 - 6
db/re/instance_db.yml

@@ -231,12 +231,12 @@ Body:
       Map: 1@rev
       X: 26
       Y: 181
-#  - Id: 27
-#    Name: Temple of the Demon God
-#    Enter:
-#      Map: 1@eom
-#      X: 101
-#      Y: 16
+  - Id: 27
+    Name: Temple of the Demon God
+    Enter:
+      Map: 1@eom
+      X: 101
+      Y: 16
   - Id: 28
     Name: Central Laboratory
     Enter:

+ 286 - 265
db/re/mob_db.yml

@@ -77981,116 +77981,120 @@ Body:
       IgnoreMelee: true
       IgnoreMisc: true
       IgnoreRanged: true
-#  - Id: 3087
-#    AegisName: M_NYDHOG
-#    Name: M Nydhog
-#    Level: 160
-#    Hp: 215000
-#    JobExp: 1
-#    Attack: 1835
-#    Attack2: 444
-#    Defense: 15
-#    MagicDefense: 89
-#    Str: 76
-#    Agi: 66
-#    Vit: 90
-#    Int: 55
-#    Dex: 189
-#    Luk: 22
-#    AttackRange: 2
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Medium
-#    Race: Demihuman
-#    Element: Neutral
-#    ElementLevel: 1
-#    WalkSpeed: 175
-#    AttackDelay: 800
-#    AttackMotion: 750
-#    DamageMotion: 300
-#  - Id: 3088
-#    AegisName: MM_BRINARANEA_BABY
-#    Name: Mm Brinaranea Baby
-#    Level: 155
-#    Hp: 155600
-#    JobExp: 1
-#    Attack: 1
-#    Attack2: 1
-#    Defense: 80
-#    MagicDefense: 200
-#    Str: 16
-#    Agi: 26
-#    Vit: 30
-#    Int: 115
-#    Dex: 79
-#    Luk: 5
-#    AttackRange: 1
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Large
-#    Race: Formless
-#    Element: Neutral
-#    ElementLevel: 1
-#    WalkSpeed: 300
-#    AttackDelay: 1000
-#    AttackMotion: 1000
-#    DamageMotion: 1000
-#  - Id: 3089
-#    AegisName: MM_LOCO_KASA
-#    Name: Mm Loco Kasa
-#    Level: 155
-#    Hp: 185000
-#    Attack: 3266
-#    Attack2: 666
-#    Defense: 30
-#    MagicDefense: 30
-#    Str: 88
-#    Agi: 44
-#    Vit: 88
-#    Int: 21
-#    Dex: 95
-#    Luk: 44
-#    AttackRange: 1
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Large
-#    Race: Demon
-#    Element: Dark
-#    ElementLevel: 2
-#    WalkSpeed: 200
-#    AttackDelay: 1500
-#    AttackMotion: 600
-#    DamageMotion: 500
-#    Modes:
-#      Detector: true
-#  - Id: 3090
-#    AegisName: MM_LOCO_SALAMANDER
-#    Name: Mm Loco Salamander
-#    Level: 155
-#    Hp: 217650
-#    Attack: 2678
-#    Attack2: 1257
-#    Defense: 121
-#    MagicDefense: 36
-#    Str: 60
-#    Agi: 103
-#    Vit: 45
-#    Int: 35
-#    Dex: 172
-#    Luk: 15
-#    AttackRange: 1
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Medium
-#    Race: Demon
-#    Element: Dark
-#    ElementLevel: 2
-#    WalkSpeed: 200
-#    AttackDelay: 1000
-#    AttackMotion: 500
-#    DamageMotion: 600
-#    Modes:
-#      Detector: true
+  - Id: 3087
+    AegisName: M_NYDHOG
+    Name: Guardian's Alter Ego
+    Level: 160
+    Hp: 215000
+    JobExp: 1
+    Attack: 1835
+    Attack2: 444
+    Defense: 15
+    MagicDefense: 89
+    Str: 76
+    Agi: 66
+    Vit: 90
+    Int: 55
+    Dex: 189
+    Luk: 22
+    AttackRange: 2
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Medium
+    Race: Demihuman
+    Element: Neutral
+    ElementLevel: 1
+    WalkSpeed: 175
+    AttackDelay: 800
+    AttackMotion: 750
+    DamageMotion: 300
+  - Id: 3088
+    AegisName: MM_BRINARANEA_BABY
+    Name: Frost Spider
+    Level: 155
+    Hp: 155600
+    JobExp: 1
+    Attack: 1
+    Attack2: 1
+    Defense: 80
+    MagicDefense: 200
+    Str: 16
+    Agi: 26
+    Vit: 30
+    Int: 115
+    Dex: 79
+    Luk: 5
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Formless
+    Element: Neutral
+    ElementLevel: 1
+    WalkSpeed: 300
+    AttackDelay: 1000
+    AttackMotion: 1000
+    DamageMotion: 1000
+    Ai: 04
+    Modes:
+      Detector: true
+  - Id: 3089
+    AegisName: MM_LOCO_KASA
+    Name: Frenzied Kasa
+    Level: 155
+    Hp: 185000
+    Attack: 3266
+    Attack2: 666
+    Defense: 30
+    MagicDefense: 30
+    Str: 88
+    Agi: 44
+    Vit: 88
+    Int: 21
+    Dex: 95
+    Luk: 44
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Demon
+    Element: Dark
+    ElementLevel: 2
+    WalkSpeed: 200
+    AttackDelay: 1500
+    AttackMotion: 600
+    DamageMotion: 500
+    Ai: 21
+    Class: Boss
+  - Id: 3090
+    AegisName: MM_LOCO_SALAMANDER
+    Name: Mad Salamander
+    JapaneseName: Loco Salamander
+    Level: 155
+    Hp: 217650
+    Attack: 2678
+    Attack2: 1257
+    Defense: 121
+    MagicDefense: 36
+    Str: 60
+    Agi: 103
+    Vit: 45
+    Int: 35
+    Dex: 172
+    Luk: 15
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Medium
+    Race: Demon
+    Element: Dark
+    ElementLevel: 2
+    WalkSpeed: 200
+    AttackDelay: 1000
+    AttackMotion: 500
+    DamageMotion: 600
+    Ai: 21
+    Class: Boss
   - Id: 3091
     AegisName: MM_BRINARANEA
     Name: Brinaranea
@@ -78117,6 +78121,7 @@ Body:
     AttackDelay: 1020
     AttackMotion: 500
     DamageMotion: 768
+    Ai: 10
     Class: Boss
     Drops:
       - Item: Brinaranea_Card
@@ -78148,6 +78153,7 @@ Body:
     AttackDelay: 608
     AttackMotion: 408
     DamageMotion: 336
+    Ai: 10
     Class: Boss
     Drops:
       - Item: Muspellskoll_Card
@@ -78228,42 +78234,44 @@ Body:
 #      IgnoreMisc: true
 #      IgnoreRanged: true
 #      Detector: true
-#  - Id: 3096
-#    AegisName: MM_MOROCC_KID
-#    Name: Mm Morocc Kid
-#    Level: 175
-#    Hp: 80000000
-#    Attack: 4980
-#    Attack2: 209
-#    Defense: 158
-#    MagicDefense: 134
-#    Str: 90
-#    Agi: 122
-#    Vit: 7
-#    Int: 87
-#    Dex: 287
-#    Luk: 36
-#    AttackRange: 3
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Small
-#    Race: Demon
-#    Element: Holy
-#    ElementLevel: 3
-#    WalkSpeed: 200
-#    AttackDelay: 1000
-#    AttackMotion: 460
-#    DamageMotion: 350
-#    Class: Boss
-#    Modes:
-#      Mvp: true
-#    Drops:
-#      - Item: M_Morocc_Card
-#        Rate: 1
-#        StealProtected: true
+  - Id: 3096
+    AegisName: MM_MOROCC_KID
+    Name: Demigod
+    Level: 175
+    Hp: 80000000
+    Attack: 4980
+    Attack2: 209
+    Defense: 158
+    MagicDefense: 134
+    Str: 90
+    Agi: 122
+    Vit: 7
+    Int: 87
+    Dex: 287
+    Luk: 36
+    AttackRange: 3
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Small
+    Race: Demon
+    Element: Holy
+    ElementLevel: 3
+    WalkSpeed: 200
+    AttackDelay: 1000
+    AttackMotion: 460
+    DamageMotion: 350
+    Ai: 10
+    Class: Boss
+    Modes:
+      CanMove: true
+      Mvp: true
+    Drops:
+      - Item: M_Morocc_Card
+        Rate: 1
+        StealProtected: true
   - Id: 3097
     AegisName: MM_MOROCC_ADT
-    Name: Despair God Morocc
+    Name: Despair God Morroc
     Level: 175
     Hp: 120000000
     Attack: 5523
@@ -78287,69 +78295,74 @@ Body:
     AttackDelay: 750
     AttackMotion: 510
     DamageMotion: 500
+    Ai: 10
     Class: Boss
     Drops:
       - Item: M_Morocc_Card
         Rate: 1
         StealProtected: true
-#  - Id: 3098
-#    AegisName: MM_MOROCC_ORIGIN
-#    Name: Mm Morocc Origin
-#    Level: 160
-#    Hp: 3258000
-#    Attack: 6177
-#    Attack2: 40
-#    Defense: 351
-#    MagicDefense: 212
-#    Str: 195
-#    Agi: 35
-#    Vit: 5
-#    Int: 36
-#    Dex: 355
-#    Luk: 7
-#    AttackRange: 3
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Large
-#    Race: Demon
-#    Element: Dark
-#    ElementLevel: 4
-#    WalkSpeed: 350
-#    AttackDelay: 2000
-#    AttackMotion: 750
-#    DamageMotion: 750
-#    Class: Boss
-#    Modes:
-#      Mvp: true
-#  - Id: 3099
-#    AegisName: MM_MOROCC_REST
-#    Name: Mm Morocc Rest
-#    Level: 160
-#    Hp: 1450000
-#    Attack: 2963
-#    Attack2: 67
-#    Defense: 112
-#    MagicDefense: 98
-#    Str: 110
-#    Agi: 98
-#    Vit: 13
-#    Int: 48
-#    Dex: 271
-#    Luk: 9
-#    AttackRange: 3
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Large
-#    Race: Demon
-#    Element: Dark
-#    ElementLevel: 4
-#    WalkSpeed: 200
-#    AttackDelay: 500
-#    AttackMotion: 510
-#    DamageMotion: 350
-#    Class: Boss
-#    Modes:
-#      Mvp: true
+  - Id: 3098
+    AegisName: MM_MOROCC_ORIGIN
+    Name: Morroc of the Genesis
+    Level: 160
+    Hp: 3258000
+    Attack: 6177
+    Attack2: 40
+    Defense: 351
+    MagicDefense: 212
+    Str: 195
+    Agi: 35
+    Vit: 5
+    Int: 36
+    Dex: 355
+    Luk: 7
+    AttackRange: 3
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Demon
+    Element: Dark
+    ElementLevel: 4
+    WalkSpeed: 350
+    AttackDelay: 2000
+    AttackMotion: 750
+    DamageMotion: 750
+    Ai: 10
+    Class: Boss
+    Modes:
+      CanMove: true
+      Mvp: true
+  - Id: 3099
+    AegisName: MM_MOROCC_REST
+    Name: Morroc of the Sabbath
+    Level: 160
+    Hp: 1450000
+    Attack: 2963
+    Attack2: 67
+    Defense: 112
+    MagicDefense: 98
+    Str: 110
+    Agi: 98
+    Vit: 13
+    Int: 48
+    Dex: 271
+    Luk: 9
+    AttackRange: 3
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Demon
+    Element: Dark
+    ElementLevel: 4
+    WalkSpeed: 200
+    AttackDelay: 500
+    AttackMotion: 510
+    DamageMotion: 350
+    Ai: 10
+    Class: Boss
+    Modes:
+      CanMove: true
+      Mvp: true
 #  - Id: 3100
 #    AegisName: MM_MANA_BLACK
 #    Name: Mm Mana Black
@@ -78376,7 +78389,7 @@ Body:
 #      IgnoreRanged: true
   - Id: 3101
     AegisName: MM_MANA_WHITE
-    Name: Mana White
+    Name: Mana of White
     Level: 1
     Hp: 30
     Attack: 1
@@ -78470,68 +78483,76 @@ Body:
 #      IgnoreMelee: true
 #      IgnoreMisc: true
 #      IgnoreRanged: true
-#  - Id: 3105
-#    AegisName: MM_GB_MOROCC_1
-#    Name: Mm Gb Morocc 1
-#    Level: 149
-#    Hp: 5000000
-#    Attack: 1901
-#    Attack2: 145
-#    Defense: 199
-#    MagicDefense: 35
-#    Str: 126
-#    Agi: 91
-#    Vit: 63
-#    Int: 61
-#    Dex: 114
-#    Luk: 37
-#    AttackRange: 1
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Large
-#    Race: Angel
-#    Element: Fire
-#    ElementLevel: 2
-#    WalkSpeed: 110
-#    AttackDelay: 576
-#    AttackMotion: 480
-#    DamageMotion: 432
-#    Class: Boss
-#    Drops:
-#      - Item: Demon_God's_Apostle_Ahat_Card
-#        Rate: 1
-#        StealProtected: true
-#  - Id: 3106
-#    AegisName: MM_GB_MOROCC_4
-#    Name: Mm Gb Morocc 4
-#    Level: 149
-#    Hp: 5000000
-#    Attack: 1235
-#    Attack2: 599
-#    Defense: 109
-#    MagicDefense: 54
-#    Str: 114
-#    Agi: 88
-#    Vit: 62
-#    Int: 97
-#    Dex: 164
-#    Luk: 43
-#    AttackRange: 1
-#    SkillRange: 10
-#    ChaseRange: 12
-#    Size: Medium
-#    Race: Demon
-#    Element: Ghost
-#    ElementLevel: 3
-#    WalkSpeed: 150
-#    AttackDelay: 1536
-#    AttackMotion: 648
-#    DamageMotion: 300
-#    Class: Boss
-#    Drops:
-#      - Item: Demon_God's_Apostle_Shnaim_Card
-#        Rate: 1
-#        StealProtected: true
+  - Id: 3105
+    AegisName: MM_GB_MOROCC_1
+    Name: Demon God's Apostle Aha
+    Level: 149
+    Hp: 5000000
+    Attack: 1901
+    Attack2: 145
+    Defense: 199
+    MagicDefense: 35
+    Str: 126
+    Agi: 91
+    Vit: 63
+    Int: 61
+    Dex: 114
+    Luk: 37
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Large
+    Race: Angel
+    Element: Fire
+    ElementLevel: 2
+    WalkSpeed: 110
+    AttackDelay: 576
+    AttackMotion: 480
+    DamageMotion: 432
+    Ai: 10
+    Class: Boss
+    Modes:
+      CanMove: true
+      Mvp: true
+    Drops:
+      - Item: Demon_God's_Apostle_Ahat_Card
+        Rate: 1
+        StealProtected: true
+  - Id: 3106
+    AegisName: MM_GB_MOROCC_4
+    Name: Demon God's Apostle Shn
+    Level: 149
+    Hp: 5000000
+    Attack: 1235
+    Attack2: 599
+    Defense: 109
+    MagicDefense: 54
+    Str: 114
+    Agi: 88
+    Vit: 62
+    Int: 97
+    Dex: 164
+    Luk: 43
+    AttackRange: 1
+    SkillRange: 10
+    ChaseRange: 12
+    Size: Medium
+    Race: Demon
+    Element: Ghost
+    ElementLevel: 3
+    WalkSpeed: 150
+    AttackDelay: 1536
+    AttackMotion: 648
+    DamageMotion: 300
+    Ai: 10
+    Class: Boss
+    Modes:
+      CanMove: true
+      Mvp: true
+    Drops:
+      - Item: Demon_God's_Apostle_Shnaim_Card
+        Rate: 1
+        StealProtected: true
 #  - Id: 3107
 #    AegisName: E_EASTER_BUNNY
 #    Name: Easter Bunny

+ 78 - 0
db/re/mob_skill_db.txt

@@ -11260,6 +11260,84 @@
 3074,Time Holder@NPC_SUMMONSLAVE,attack,196,5,1000,700,10000,no,self,slavele,0,2917,,,,,,
 3074,Time Holder@NPC_SUMMONSLAVE,idle,196,5,1000,700,10000,no,self,slavele,0,2917,,,,,,
 
+// Temple demon god instance
+3088,MM_BRINARANEA_BABY@NPC_WATERATTACK,attack,184,1,5000,0,10000,yes,target,always,0,,,,,,,
+3088,MM_BRINARANEA_BABY@MG_COLDBOLT,chase,14,1,1000,0,3000,yes,target,always,0,,,,,,,
+3088,MM_BRINARANEA_BABY@NPC_WIDEWEB,attack,721,1,3000,0,20000,yes,self,always,0,,,,,,,
+3088,MM_BRINARANEA_BABY@NPC_WIDEWEB,chase,721,1,3000,0,20000,yes,self,always,0,,,,,,,
+3089,MM_LOCO_KASA@NPC_SELFDESTRUCTION,attack,173,1,500,0,5000,yes,self,myhpltmaxrate,25,,,,,,,
+3089,MM_LOCO_KASA@NPC_FIREATTACK,attack,186,1,2500,0,8000,yes,target,always,0,,,,,,,
+3090,MM_LOCO_SALAMANDER@NPC_FIREATTACK,attack,186,1,5000,0,10000,yes,target,always,0,,,,,,,
+3090,MM_LOCO_SALAMANDER@MG_FIREBOLT,chase,19,1,1000,0,3000,yes,target,always,0,,,,,,,
+3091,MM_BRINARANEA@NPC_WATERATTACK,chase,184,10,3000,1000,10000,yes,target,always,0,,,,,,,
+3091,MM_BRINARANEA@NPC_WATERATTACK,attack,184,10,3000,1000,10000,yes,target,always,0,,,,,,,
+3091,MM_BRINARANEA@MG_COLDBOLT,chase,14,10,2500,1000,15000,yes,target,always,0,,,,,,,
+3091,MM_BRINARANEA@MG_COLDBOLT,attack,14,10,2500,1000,15000,yes,target,always,0,,,,,,,
+3091,MM_BRINARANEA@MG_FROSTDIVER,chase,15,40,1500,300,18000,yes,target,always,0,,,,,,,
+3091,MM_BRINARANEA@MG_FROSTDIVER,attack,15,40,1500,300,18000,yes,target,always,0,,,,,,,
+3091,MM_BRINARANEA@WZ_QUAGMIRE,chase,92,5,3500,250,10000,yes,target,always,0,,,,,,,
+3091,MM_BRINARANEA@WZ_QUAGMIRE,attack,92,5,3500,250,10000,yes,target,always,0,,,,,,,
+3092,MM_MUSPELLSKOLL@NPC_FIREATTACK,chase,186,10,3000,1000,10000,yes,target,always,0,,,,,,,
+3092,MM_MUSPELLSKOLL@NPC_FIREATTACK,attack,186,10,3000,1000,10000,yes,target,always,0,,,,,,,
+3092,MM_MUSPELLSKOLL@MG_FIREBOLT,chase,19,10,2500,1000,15000,yes,target,always,0,,,,,,,
+3092,MM_MUSPELLSKOLL@MG_FIREBOLT,attack,19,10,2500,1000,15000,yes,target,always,0,,,,,,,
+3092,MM_MUSPELLSKOLL@NPC_FIREBREATH,chase,654,5,2000,500,8000,yes,target,always,0,,,,,,,
+3092,MM_MUSPELLSKOLL@NPC_FIREBREATH,attack,654,5,2000,500,8000,yes,target,always,0,,,,,,,
+3092,MM_MUSPELLSKOLL@NPC_WIDESILENCE,chase,663,5,10000,1000,30000,yes,self,always,0,,,,,,,
+3092,MM_MUSPELLSKOLL@NPC_WIDESILENCE,attack,663,5,10000,1000,30000,yes,self,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_BLOODDRAIN,chase,199,1,2500,0,60000,yes,target,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_BLOODDRAIN,attack,199,1,2500,0,60000,yes,target,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_DARKCROSS,chase,338,10,2000,0,90000,yes,target,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_DARKCROSS,attack,338,10,2000,0,90000,yes,target,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_BLEEDING,chase,660,5,3500,0,180000,yes,target,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_BLEEDING,attack,660,5,3500,0,180000,yes,target,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_HOLYATTACK,chase,189,10,2000,500,15000,yes,target,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_HOLYATTACK,attack,189,10,2000,500,15000,yes,target,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_EARTHQUAKE,chase,653,5,1000,3000,300000,yes,self,myhpltmaxrate,50,,,,,,,
+3096,MM_MOROCC_KID@NPC_EARTHQUAKE,attack,653,5,1000,3000,300000,yes,self,myhpltmaxrate,50,,,,,,,
+3096,MM_MOROCC_KID@NPC_SLOWCAST,chase,672,5,1000,1000,180000,yes,self,always,0,,,,,,,
+3096,MM_MOROCC_KID@NPC_SLOWCAST,attack,672,5,1000,1000,180000,yes,self,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_BLOODDRAIN,chase,199,1,2500,0,60000,yes,target,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_BLOODDRAIN,attack,199,1,2500,0,60000,yes,target,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_GRANDDARKNESS,chase,339,10,2000,0,120000,yes,self,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_GRANDDARKNESS,attack,339,10,2000,0,120000,yes,self,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_CRITICALWOUND,chase,673,5,3500,0,180000,yes,target,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_CRITICALWOUND,attack,673,5,3500,0,180000,yes,target,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_DARKNESSATTACK,chase,190,10,2500,500,30000,yes,target,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_DARKNESSATTACK,attack,190,10,2500,500,30000,yes,target,always,0,,,,,,,
+3097,MM_MOROCC_ADT@NPC_EARTHQUAKE,chase,653,5,1000,1000,300000,yes,self,myhpltmaxrate,50,,,,,,,
+3097,MM_MOROCC_ADT@NPC_EARTHQUAKE,attack,653,5,1000,1000,300000,yes,self,myhpltmaxrate,50,,,,,,,
+3097,MM_MOROCC_ADT@NPC_EVILLAND,chase,670,10,1000,1000,180000,yes,self,myhpltmaxrate,70,,,,,,,
+3097,MM_MOROCC_ADT@NPC_EVILLAND,attack,670,10,1000,1000,180000,yes,self,myhpltmaxrate,70,,,,,,,
+3097,MM_MOROCC_ADT@NPC_VAMPIRE_GIFT,chase,679,5,3000,500,300000,yes,self,myhpltmaxrate,80,,,,,,,
+3097,MM_MOROCC_ADT@NPC_VAMPIRE_GIFT,attack,679,5,3000,500,300000,yes,self,myhpltmaxrate,80,,,,,,,
+3098,MM_MOROCC_ORIGIN@NPC_DRAGONFEAR,chase,659,10,10000,0,600000,no,self,myhpltmaxrate,30,,,,,,,
+3098,MM_MOROCC_ORIGIN@NPC_DRAGONFEAR,attack,659,10,10000,0,600000,no,self,myhpltmaxrate,30,,,,,,,
+3098,MM_MOROCC_ORIGIN@NPC_EARTHQUAKE,chase,653,10,10000,2000,180000,yes,self,myhpltmaxrate,40,,,,,,,
+3098,MM_MOROCC_ORIGIN@NPC_EARTHQUAKE,attack,653,10,10000,2000,180000,yes,self,myhpltmaxrate,40,,,,,,,
+3098,MM_MOROCC_ORIGIN@WZ_METEOR,chase,83,5,10000,800,60000,yes,target,myhpltmaxrate,80,,,,,,,
+3098,MM_MOROCC_ORIGIN@WZ_METEOR,attack,83,5,10000,800,60000,yes,target,myhpltmaxrate,80,,,,,,,
+3098,MM_MOROCC_ORIGIN@MG_FIREBOLT,chase,19,10,10000,300,20000,yes,target,myhpltmaxrate,80,,,,,,,
+3098,MM_MOROCC_ORIGIN@MG_FIREBOLT,attack,19,10,10000,300,20000,yes,target,myhpltmaxrate,80,,,,,,,
+3098,MM_MOROCC_ORIGIN@MG_FROSTDIVER,chase,15,40,10000,1000,20000,yes,target,myhpltmaxrate,80,,,,,,,
+3098,MM_MOROCC_ORIGIN@MG_FROSTDIVER,attack,15,40,10000,1000,20000,yes,target,myhpltmaxrate,80,,,,,,,
+3098,MM_MOROCC_ORIGIN@WZ_JUPITEL,chase,84,28,10000,1000,20000,yes,target,myhpltmaxrate,80,,,,,,,
+3098,MM_MOROCC_ORIGIN@WZ_JUPITEL,attack,84,28,10000,1000,20000,yes,target,myhpltmaxrate,80,,,,,,,
+3099,MM_MOROCC_REST@NPC_PULSESTRIKE,chase,661,5,10000,800,60000,yes,self,myhpltmaxrate,40,,,,,,,
+3099,MM_MOROCC_REST@NPC_PULSESTRIKE,attack,661,5,10000,800,60000,yes,self,myhpltmaxrate,40,,,,,,,
+3099,MM_MOROCC_REST@NPC_HELLJUDGEMENT,chase,662,5,10000,800,35000,yes,self,myhpltmaxrate,60,,,,,,,
+3099,MM_MOROCC_REST@NPC_HELLJUDGEMENT,attack,662,5,10000,800,35000,yes,self,myhpltmaxrate,60,,,,,,,
+3099,MM_MOROCC_REST@MG_STONECURSE,chase,16,10,10000,1000,20000,yes,target,myhpltmaxrate,80,,,,,,,
+3099,MM_MOROCC_REST@MG_STONECURSE,attack,16,10,10000,1000,20000,yes,target,myhpltmaxrate,80,,,,,,,
+3099,MM_MOROCC_REST@NPC_WIDESLEEP,chase,668,5,10000,700,35000,yes,self,myhpltmaxrate,60,,,,,,,
+3099,MM_MOROCC_REST@NPC_WIDESLEEP,attack,668,5,10000,700,35000,yes,self,myhpltmaxrate,60,,,,,,,
+3099,MM_MOROCC_REST@NPC_VAMPIRE_GIFT,chase,679,9,10000,1000,50000,yes,self,myhpltmaxrate,50,,,,,,,
+3099,MM_MOROCC_REST@NPC_VAMPIRE_GIFT,attack,679,9,10000,1000,50000,yes,self,myhpltmaxrate,50,,,,,,,
+3099,MM_MOROCC_REST@NPC_WIDESOULDRAIN,chase,680,10,10000,1000,50000,yes,self,myhpltmaxrate,50,,,,,,,
+3099,MM_MOROCC_REST@NPC_WIDESOULDRAIN,attack,680,10,10000,1000,50000,yes,self,myhpltmaxrate,50,,,,,,,
+3099,MM_MOROCC_REST@NPC_EVILLAND,chase,670,10,10000,1000,50000,yes,self,myhpltmaxrate,50,,,,,,,
+3099,MM_MOROCC_REST@NPC_EVILLAND,attack,670,10,10000,1000,50000,yes,self,myhpltmaxrate,50,,,,,,,
+
 // Jitterbug instance
 3108,Jitterbug@NPC_WIDESILENCE,attack,663,5,3000,1000,10000,yes,self,always,0,,,,,,,
 3108,Jitterbug@NPC_LEX_AETERNA,attack,727,3,2000,2000,10000,yes,self,always,0,,,,,,,

+ 26 - 0
db/re/quest_db.yml

@@ -4068,6 +4068,15 @@ Body:
         Count: 3
       - Mob: MM_MANA_YELLOW
         Count: 3
+  - Id: 7596
+    Title: Qualifications of the Guests
+    Drops:
+      - Mob: MM_GB_MOROCC_1
+        Item: Heart_of_Soul
+        Rate: 10000
+      - Mob: MM_GB_MOROCC_4
+        Item: Sheenas_Soul
+        Rate: 10000
   - Id: 7597
     Title: Fall of the False God
   - Id: 7598
@@ -4079,6 +4088,23 @@ Body:
   - Id: 7600
     Title: Promising Tomorrow
     TimeLimit: +23h
+  - Id: 7601
+    Title: Temple of the Demon God Phase 1
+    Targets:
+      - Mob: MM_BRINARANEA
+        Count: 1
+  - Id: 7602
+    Title: Temple of the Demon God Phase 1 Completed
+  - Id: 7603
+    Title: Temple of the Demon God Phase 2
+    Targets:
+      - Mob: MM_MUSPELLSKOLL
+        Count: 1
+  - Id: 7604
+    Title: Temple of the Demon God Phase 2 Completed
+  - Id: 7605
+    Title: Guardian's Blessing
+    TimeLimit: +3h
   - Id: 7606
     Title: Phantasmagorika Excavator Recruitment
   - Id: 7607

+ 56 - 0
db/re/skill_db.yml

@@ -16888,6 +16888,62 @@ Body:
         Time: 27500
       - Level: 5
         Time: 32500
+  - Id: 721
+    Name: NPC_WIDEWEB
+    Description: Wide Web
+    MaxLevel: 1
+    TargetType: Self
+    DamageFlags:
+      NoDamage: true
+      Splash: true
+    Flags:
+      IsNpc: true
+      ShowScale: true
+    Range: 1
+    Hit: Single
+    HitCount: 1
+    SplashArea: 7
+    Duration2: 10000
+  - Id: 722
+    Name: NPC_WIDESUCK
+    Description: Wide Suck
+    MaxLevel: 1
+    Type: Misc
+    TargetType: Ground
+    DamageFlags:
+      Splash: true
+      IgnoreFlee: true
+    Flags:
+      IsNpc: true
+    Range: 1
+    Hit: Single
+    HitCount: 1
+    SplashArea: 13
+    Duration1: 3000
+  - Id: 724
+    Name: NPC_FIRESTORM
+    Description: Fire Storm
+    MaxLevel: 3
+    Type: Magic
+    TargetType: Self
+    DamageFlags:
+      NoDamage: true
+      Splash: true
+    Flags:
+      IsNpc: true
+    Range: 1
+    Hit: Multi_Hit
+    HitCount:
+      - Level: 1
+        Count: 1
+      - Level: 2
+        Count: 3
+      - Level: 3
+        Count: 5
+    Element: Fire
+    SplashArea: 3
+    Knockback: 3
+    Duration1: 10000
   - Id: 725
     Name: NPC_REVERBERATION
     Description: Reverberation 2

+ 2296 - 0
npc/re/instances/TempleOfDemonGod.txt

@@ -0,0 +1,2296 @@
+//===== rAthena Script =======================================
+//= Temple of Demon God
+//===== Description: =========================================
+//= [Official Conversion]
+//= Temple of Demon God Instance (part of episode 14.3)
+//===== Changelogs: ==========================================
+//= 1.0 First version. [Capuche]
+//============================================================
+
+moro_cav,41,73,4	script	Guardian Nidhogg#epeom01	4_F_NYDHOG,{
+	if (checkquest(7605,PLAYTIME) == 2)
+		erasequest 7605;
+	if (getcharid(1) < 1) {
+		mes "[Nidhogg]";
+		mes "This place is too dangerous for you to explore alone.";
+		mes "Please form a party and come with your comrades.";
+		cutin "ep14_nyd01.bmp",2;
+		close3;
+	}
+	if (is_party_leader() == false) {
+		mes "[Nidhogg]";
+		mes "Only party leaders can control access to the Temple of the Demon God.";
+		mes "It's to ensure the safety of the entire Expedition. Please let your leader talk to me instead.";
+		cutin "ep14_nyd01.bmp",2;
+		close3;
+	}
+	switch( checkquest(7593,HUNTING) ) {
+	case -1:
+		mes "[Nidhogg]";
+		mes "I'm sorry, but you can't enter this place without approval from the Commander.";
+		mes "You must be on the quest to subjugate the Demon God to enter this place.";
+		cutin "ep14_nyd01.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "Please go to Commander Hiva Agip and receive the Demon God Subjugation quest.";
+		close3;
+	case 0:
+	case 1:
+		mes "[Nidhogg]";
+		mes "I've been waiting for you, hero-in-waiting. ";
+		mes "Let me guide you to the depth of the temple where Morroc lies in wait.";
+		cutin "ep14_nyd03.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "This tree is the spitting image of Yggdrasil.";
+		mes "I just hope Morroc is not intent on what I fear most.";
+		mes "Through this tree the door is opened.";
+		next;
+		mes "[Nidhogg]";
+		mes "I can sense that";
+		mes "this tree is generating mana at certain intervals as if it's breathing.";
+		mes "I'm going to catch a moment between its breaths to open up a path for you. Are you ready?";
+		cutin "ep14_nyd04.bmp",2;
+		next;
+		if (select( "Enter now.", "Do not enter." ) == 2) {
+			mes "[Nidhogg]";
+			mes "Okay.";
+			mes "I understand if you need time.";
+			mes "Take your time. I can wait as long as you want me to.";
+			cutin "ep14_nyd04.bmp",2;
+			close3;
+		}
+		if (instance_create("Temple of the Demon God") < 1) {	// todo, custom text
+			mes "Party Name: " + getpartyname(.@party_id);
+			mes "Party Leader: " + strcharinfo(0);
+			mes "^0000ff" + .@md_name$ + " ^000000 - Reservation Failed.";
+			close;
+		}
+		if (isbegin_quest(7596) == 1)
+			erasequest 7596;
+		mes "[Nidhogg]";
+		mes "Just wait a while, and the entrance will open.";
+		mes "Enter through the tree.";
+		mes "Don't be scared, even though it's not an ordinary tree.";
+		cutin "ep14_nyd04.bmp",2;
+		close3;
+	case 2:	// todo, custom text
+		mes "[Nidhogg]";
+		mes "You have eliminated the God of Despair!?";
+		mes "I can only say that his ambition was too big...";
+		mes "Always talk about creating a new world and becoming a god...";
+		cutin "ep14_nyd03.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "But seriously, he didn't create anything at all!";
+		mes "Abandon the body that used to be a demon, and the appearance after rebirth is just imitating the god...";
+		next;
+		mes "[Nidhogg]";
+		mes "The result is just what a human looks like,";
+		mes "He can't escape the so-called god frame,";
+		mes "...you can only say that you are eating bad luck!";
+		cutin "ep14_nyd02.bmp",2;
+		next;
+		cutin "ep14_nyd04.bmp",2;
+		mes "[Nidhogg]";
+		mes "I will give you approval for the quest, and you can report to the commander.";
+		mes "Thank you!";
+		setquest 7597;
+		erasequest 7593;
+		for ( .@quest = 7601; .@quest < 7605; .@quest++ ) {
+			if (isbegin_quest(.@quest))
+				erasequest .@quest;
+		}
+		if (isbegin_quest(7596))
+			erasequest 7596;
+		close3;
+	}
+}
+
+moro_cav,45,75,0	script	Yggdrasil Lookalike#eom_gate	CLEAR_NPC,{
+	switch( checkquest(7593,HUNTING) ) {
+	case -1:
+		mes "[Nidhogg]";
+		mes "I'm sorry, but you can't enter this place without approval from the Commander.";
+		mes "You must be on the quest to subjugate the Demon God to enter this place.";
+		cutin "ep14_nyd01.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "Please go to Commander Hiva Agip and receive the 'Demon God Subjugation' quest.";
+		close3;
+	case 0:
+	case 1:
+		mes "You touched the tree and felt a strange flow of mana.";
+		mes "Perhaps the flow of mana will guide you to the depth of the temple.";
+		next;
+		if (select( "Enter.", "Quit." ) == 2) {
+			mes "[Nidhogg]";
+			mes "Okay.";
+			mes "I understand if you need time.";
+			mes "Take your time. I can wait as long as you want me to.";
+			cutin "ep14_nyd04.bmp",2;
+			close3;
+		}
+		switch( instance_enter("Temple of the Demon God") ) {
+		case IE_NOMEMBER:
+			mes "[Nidhogg]";
+			mes "This place is too dangerous for you to explore alone.";
+			mes "Please form a party and come with your comrades.";
+			cutin "ep14_nyd01.bmp",2;
+			close3;
+		case IE_NOINSTANCE:
+			mes "[Nidhogg]";
+			mes "No entry permission has been issued under the name of your party.";
+			mes "Please let your party leader submit an entry request, and I'll open the gate to the temple.";
+			cutin "ep14_nyd01.bmp",2;
+			next;
+			mes "[Nidhogg]";
+			mes "You are to comply with the rules set by the Expedition.";
+			mes "It's for everyone's safety.";
+			close3;
+		case IE_OTHER:	// todo, custom text
+			mes "[Nidhogg]";
+			mes "Um...how could this happen... the flow of magic power becomes unstable,";
+			mes "It hurts my brain, this is the gap I finally made...";
+			mes "may not be able to enter at the moment...";
+			cutin "ep14_nyd01.bmp",2;
+			close3;
+		case IE_OK:
+			mapannounce "moro_cav", "" + strcharinfo(0) + " of the party " + getpartyname( getcharid(1) ) + ", is entering Temple of the Demon God.",bc_map;
+			// warp "1@eom",101,16;
+			end;
+		}
+	case 2:	// todo, custom text
+		mes "[Nidhogg]";
+		mes "You have eliminated the God of Despair!?";
+		mes "I can only say that his ambition was too big...";
+		mes "Always talk about creating a new world and becoming a god...";
+		cutin "ep14_nyd01.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "But seriously, he didn't create anything at all!";
+		mes "Abandon the body that used to be a demon, and the appearance after rebirth is just imitating the god...";
+		cutin "ep14_nyd02.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "The result is just what a human looks like,";
+		mes "He can't escape the so-called god frame,";
+		mes "...you can only say that you are eating bad luck!";
+		cutin "ep14_nyd03.bmp",2;
+		next;
+		cutin "ep14_nyd04.bmp",2;
+		mes "[Nidhogg]";
+		mes "I will give you approval for the quest, and you can report to the commander.";
+		mes "Thank you!";
+		setquest 7597;
+		erasequest 7593;
+		for ( .@quest = 7601; .@quest < 7605; .@quest++ ) {
+			if (isbegin_quest(.@quest))
+				erasequest .@quest;
+		}
+		if (isbegin_quest(7596))
+			erasequest 7596;
+		close3;
+	}
+}
+
+1@eom,1,1,0	script	#demon_god_variables	-1,{
+	end;
+OnVariableReset:
+	'boss_id = 0;
+	'boss_hp = 0;
+	'bossx = 'bossy = 0;
+	'boss_phase = 0;
+	'icestunami = false;
+	'spawn = false;
+	'miniboss_id[0] = 'miniboss_id[1] = 0;
+	'combo_is_allowed = false;
+	'flowing_lava_deactivate[0] = 'flowing_lava_deactivate[1] = false;
+	end;
+OnMyMobDead:
+	if (!playerattached())	// shouldn't happen
+		end;
+	.@mob_id = killedrid;
+	sleep 5000;
+	monster 'map_eom$,0,0,"--ja--", .@mob_id,1, instance_npcname("#demon_god_variables") + "::OnMyMobDead";
+	end;
+OnInstanceInit:
+	donpcevent instance_npcname("#demon_god_variables") + "::OnVariableReset";
+
+	'map_eom$ = instance_mapname("1@eom");
+	'step = 0;
+	'inject_soul = 0;
+
+	// Entrance
+	disablenpc instance_npcname("#door_mobmaster");
+	disablenpc instance_npcname("Empty Soul Globe#ahat01");
+	disablenpc instance_npcname("Empty Soul Globe#shnaim01");
+	disablenpc instance_npcname("Filled Soul Globe#ahat02");
+	disablenpc instance_npcname("Filled Soul Globe#shnaim02");
+	disablenpc instance_npcname("#gate_to_center");
+
+	// Center to Ice
+	disablenpc instance_npcname("Strange Boy#mockid01");
+	disablenpc instance_npcname("#gate_to_ice");
+	disablenpc instance_npcname("Loki#eomloki01");
+	disablenpc instance_npcname("Nidhogg#eomnyd01");
+	disablenpc instance_npcname("Brinaranea#brinpc01");
+	disablenpc instance_npcname("#ice_hpcheck");
+	disablenpc instance_npcname("Nidhogg#eomnyd02");
+	disablenpc instance_npcname("#ice_to_center");
+
+	// Center to Fire
+	disablenpc instance_npcname("Morroc#mockid02");
+	disablenpc instance_npcname("#gate_to_fire");
+	disablenpc instance_npcname("#fire_event01");
+	disablenpc instance_npcname("#skollmaster");
+	disablenpc instance_npcname("#loco_call");
+	disablenpc instance_npcname("#fire_combo");
+	disablenpc instance_npcname("Flowing Lava#lavapond01");
+	disablenpc instance_npcname("Flowing Lava#lavapond02");
+	disablenpc instance_npcname("Hardened Lava#lavaseal01");
+	disablenpc instance_npcname("Hardened Lava#lavaseal02");
+	disablenpc instance_npcname("#lavazone11");
+	disablenpc instance_npcname("#lavazone12");
+	disablenpc instance_npcname("#lavazone21");
+	disablenpc instance_npcname("#lavazone22");
+	disablenpc instance_npcname("Nidhogg#eomnyd03");
+	disablenpc instance_npcname("#fire_to_center");
+
+	// Center to Last
+	disablenpc instance_npcname("#gate_to_last");
+	disablenpc instance_npcname("Strange Young Man#mocadt01");
+	disablenpc instance_npcname("#moc_master");
+	disablenpc instance_npcname("#despair_god_main");
+	disablenpc instance_npcname("#mk_hpcheck");
+	disablenpc instance_npcname("#moc_origin");
+	disablenpc instance_npcname("#morocc_god");
+	disablenpc instance_npcname("#despair_main");
+	disablenpc instance_npcname("Nidhogg#eomnyd04");
+
+	// mimic permanent spawn
+	.@event$ = instance_npcname("#demon_god_variables") + "::OnMyMobDead";
+	monster 'map_eom$,0,0,"--ja--", 3101,3, .@event$;	// MM_MANA_WHITE
+	monster 'map_eom$,0,0,"--ja--", 3102,3, .@event$;	// MM_MANA_RED
+	monster 'map_eom$,0,0,"--ja--", 3103,3, .@event$;	// MM_MANA_YELLOW
+	end;
+}
+
+1@eom,101,43,3	script	Demon God's Apostle Aha#ahat	4_HUMAN_GERUTOO,{
+	cutin "ep13_ahat_" + (Sex ? "f" : "m") + ".bmp",2;	// note: cutin f for male, m for female
+	// if (is_party_leader() == false || checkquest(7593,HUNTING) != 1 || isbegin_quest(7596) != 0) {	// quest to 'var for reload
+	if (is_party_leader() == false || checkquest(7593,HUNTING) != 1 || 'step != 0) {
+		mes "[Ahat]";
+		mes "Welcome";
+		mes "to the Temple of the Demon God.";
+		mes "It's my honor to be your host today.";
+		close3;
+	}
+	.@ahat$ = instance_npcname("Demon God's Apostle Aha#ahat");
+	mes "[Ahat]";
+	mes "So, you've come.";
+	mes "Gosh, you're so persistent.";
+	mes "Hah hah, are you surprised to see me here?";
+	npctalk "Ahat: So, you've come.", .@ahat$;
+	next;
+	mes "[Ahat]";
+	mes "Didn't you expect this at all?";
+	mes "Why don't I introduce myself officially?";
+	mes "I'm Ahat, the first servant of the Demon God.";
+	npctalk "Ahat: Why don't I introduce myself officially? I'm Ahat, the first servant of the Demon God.", .@ahat$;
+	next;
+	mes "[Ahat]";
+	mes "Well, well, maybe I forfeit my life today.";
+	mes "Don't look at me like that. Everything is as planned.";
+	npctalk "Ahat: Well, well, maybe I forfeit my life today. Don't look at me like that. Everything is as planned.", .@ahat$;
+	next;
+	mes "[Ahat]";
+	mes "My master wishes for Shnaim and I to put you to the test.";
+	mes "To see if you deserve to be our guests.";
+	npctalk "Ahat: My master wishes for Shnaim and I to put you to the test. To see if you deserve to be our guests.", .@ahat$;
+	next;
+	mes "[Ahat]";
+	mes "If you think you've come this far on your own,";
+	mes "you're mistaken.";
+	npctalk "Ahat: If you think you've come this far on your own, you're mistaken.", .@ahat$;
+	next;
+	mes "[Ahat]";
+	mes "Everything is as the Master has planned.";
+	mes "For now, let's see if you can open this door.";
+	npctalk "Ahat: Everything is as the Master has planned. For now, let's see if you can open this door.", .@ahat$;
+	if (isbegin_quest(7596) == 0)
+		setquest 7596;
+	if ('step != 0)
+		close3;
+	'step = 1;
+	close2;
+	cutin "",255;
+	setpcblock PCBLOCK_NPC, true;
+	sleep2 1000;
+	setpcblock PCBLOCK_NPC, false;
+	disablenpc .@ahat$;
+	warpparty 'map_eom$,101,16,getcharid(1),'map_eom$,2,2;
+	donpcevent instance_npcname("#door_mobmaster") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#door_mobmaster	CLEAR_NPC,{
+	end;
+OnStart:
+	'apostle = 10;
+	enablenpc instance_npcname("#door_mobmaster");
+	.@label$ = instance_npcname("#door_mobmaster") + "::OnMyMobDead";
+	monster 'map_eom$,102,30, "Demon God's Apostle Ahat",3105,1, .@label$;	// MM_GB_MOROCC_1
+	setunitdata $@mobid[0], UMOB_HP, 5000000;
+	monster 'map_eom$, 98,30, "Demon God Fragment",1918,1, .@label$;
+	monster 'map_eom$,100,30, "Demon God Fragment",1918,1, .@label$;
+	monster 'map_eom$,104,30, "Demon God Fragment",1918,1, .@label$;
+	monster 'map_eom$,106,30, "Demon God Fragment",1918,1, .@label$;
+	sleep 2000;
+	mapannounce 'map_eom$, "Eliminate the Demon God's Apostles, Ahat and Shnaim, and collect their souls.", bc_map, 0x00ff00;
+	monster 'map_eom$,102,40, "Demon God's Apostle Shnaim",3106,1, .@label$;	// MM_GB_MOROCC_4
+	setunitdata $@mobid[0], UMOB_HP, 5000000;
+	monster 'map_eom$, 98,40, "Demon God Fragment",1921,1, .@label$;
+	monster 'map_eom$,100,40, "Demon God Fragment",1921,1, .@label$;
+	monster 'map_eom$,104,40, "Demon God Fragment",1921,1, .@label$;
+	monster 'map_eom$,106,40, "Demon God Fragment",1921,1, .@label$;
+	sleep 3000;
+	mapannounce 'map_eom$, "The Apostles' souls are the key to opening the Temple of the Demon God.", bc_map, 0x00ff00;
+	end;
+OnMyMobDead:
+	'apostle -= 1;
+	if ('apostle == 0) {
+		'step = 2;
+		disablenpc instance_npcname("#door_mobmaster");
+		enablenpc instance_npcname("Empty Soul Globe#shnaim01");
+		enablenpc instance_npcname("Empty Soul Globe#ahat01");
+		mapannounce 'map_eom$, "Activated the Soul Globes used to open the Temple of the Demon God.", bc_map, 0x00ff00;
+	}
+	end;
+}
+
+1@eom,104,56,0	script	Empty Soul Globe#ahat01	CLEAR_NPC,{
+	if ('step == 2) {
+		if (strnpcinfo(2) == "ahat01")
+			callsub( S_Globe, 1, "Ahat", 6713, "ahat02" );
+		else
+			callsub( S_Globe, 2, "Shnaim", 6714, "shnaim02" );
+	}
+	end;
+S_Globe:
+	.@bit = getarg(0);
+	.@item_id = getarg(2);
+	.@visible_npc_name$ = getarg(1);
+	.@hidden_npc_name$ = getarg(3);
+
+	disable_items;
+	if (is_party_leader() == false || isbegin_quest(7596) != 1 || 'step != 2) {
+		mes "Only party leaders can perform this event.";
+		close;
+	}
+	if (countitem(.@item_id) < 1) {
+		mes "If you want to activate the soul globes, you need Shnaim's soul.";
+		close;
+	}
+	mes "Inject " + .@visible_npc_name$ + "'s soul into the empty soul globe.";
+	next;
+	specialeffect EF_SPHERE;
+	progressbar "000000",10;
+	if (!('inject_soul & .@bit) && countitem(.@item_id) > 0) {
+		'inject_soul |= .@bit;
+		delitem .@item_id,1;
+		specialeffect EF_ENTRY;
+		disablenpc instance_npcname( strnpcinfo(0) );
+		enablenpc instance_npcname("Filled Soul Globe#" + .@hidden_npc_name$);
+		specialeffect EF_ENTRY,AREA, instance_npcname("Filled Soul Globe#" + .@hidden_npc_name$);
+		specialeffect EF_LEVEL99_3,AREA, instance_npcname("Filled Soul Globe#" + .@hidden_npc_name$);
+		mes "Successfully activated " + .@visible_npc_name$ + "'s soul globe.";
+		if ('inject_soul == 3 && 'step == 2) {
+			'step = 3;
+			if (isbegin_quest(7596) == 1)
+				erasequest 7596;// Qualifications of the Guests
+			enablenpc instance_npcname("#gate_to_center");
+			enablenpc instance_npcname("Strange Boy#mockid01");
+			specialeffect EF_MAPPILLAR,AREA, instance_npcname("#gate_to_center");
+			specialeffect EF_LEVEL99_3,AREA, instance_npcname("#gate_to_center");
+		}
+	}
+	close;
+}
+1@eom,98,56,0	duplicate(Empty Soul Globe#ahat01)	Empty Soul Globe#shnaim01	CLEAR_NPC
+
+1@eom,104,56,0	duplicate(dummy_npc)	Filled Soul Globe#ahat02	CLEAR_NPC
+1@eom,98,56,0	duplicate(dummy_npc)	Filled Soul Globe#shnaim02	CLEAR_NPC
+
+1@eom,101,58,0	script	#gate_to_center	WARPNPC,1,1,{
+	end;
+OnTouch_:
+	if (isbegin_quest(7596) == 1)
+		erasequest 7596;
+	warp 'map_eom$,98,115;
+	end;
+}
+
+1@eom,100,122,3	script	Strange Boy#mockid01	4_F_MOCBOY,{
+	if ('step != 3)
+		end;
+	if (is_party_leader() == false || checkquest(7593,HUNTING) != 1) {
+		mes "[Boy]";
+		mes "You insignificant creature.";
+		mes "How dare you lay a hand on a god-in-waiting?!";
+		close;
+	}
+	cutin "morocc_kid.bmp",2;
+	mes "[Boy]";
+	mes "First, let me applaud you for coming this far.";
+	mes "You've been a good pawn.";
+	next;
+	select("What are you talking about?");
+	unittalk getcharid(3), "" + strcharinfo(0) + " : What are you talking about?";
+	mes "[Boy]";
+	mes "I've been waiting for this day.";
+	mes "To get out of that corner of the demon world and rule the entire universe.";
+	npctalk "Boy: I've been waiting for this day. To get out of that corner of the demon world and rule the entire universe.";
+	sleep2 2000;
+	next;
+	mes "[Boy]";
+	mes "To achieve that, I realized I must abandon my old body.";
+	mes "So I died--well, I let you kill me.";
+	npctalk "Boy: To achieve that, I realized I must abandon my old body. So I died--well, I let you kill me.";
+	sleep2 2000;
+	next;
+	mes "[Boy]";
+	mes "Death is an inevitable step to take before rebirth.";
+	mes "So I'm reborn--again, you brought me back.";
+	npctalk "Boy: Death is an inevitable step to take before rebirth. So I've been reborn--again, you've brought me back.";
+	sleep2 2000;
+	next;
+	mes "[Boy]";
+	mes "All this has been arranged so that I could be reborn as God.";
+	npctalk "Boy: All this has been arranged so that I could be reborn as God.";
+	sleep2 2000;
+	next;
+	mes "[Morroc]";
+	mes "That's right, you foolish humans!";
+	mes "I died once, so that I could circle around the world and embrace it in my arms.";
+	mes "I've been reborn to engulf this world.";
+	npctalk "Morocc: I died once, so that I could circle around the world and embrace it in my arms. I've been reborn to engulf this world.";
+	sleep2 2000;
+	next;
+	mes "[Morroc]";
+	mes "I'll create a new world and become its Creator.";
+	mes "Let me ask you, the first creatures that have stepped into my newborn land.";
+	npctalk "Morocc: I'll create a new world and become its Creator. Let me ask you, the first creatures that have stepped into my newborn land.";
+	sleep2 2000;
+	next;
+	mes "[Morroc]";
+	mes "How'd you like to follow me and watch the birth of a new world?";
+	npctalk "Morocc: How'd you like to follow me and watch the birth of a new world?";
+	close2;
+	setpcblock PCBLOCK_NPC, true;
+	cutin "",255;
+	sleep2 1000;
+	.@loki$ = instance_npcname("Loki#eomloki01");
+	.@nidhogg$ = instance_npcname("Nidhogg#eomnyd01");
+	enablenpc .@loki$;
+	enablenpc .@nidhogg$;
+	npctalk "Loki: Enough with your nonsense. Just say you like destroying things.", .@loki$;
+	sleep2 5000;
+	npctalk "Loki: Create a new world and become its Creator? If this is the new world you're talking about, then I'm disappointed.", .@loki$;
+	sleep2 5000;
+	npctalk "Loki: Even if you burn your body, your power is not as potent as that of Ymir of the Genesis.", .@loki$;
+	sleep2 5000;
+	npctalk "Loki: Just the fact that you had to steal Yggdrasil shows your lack of creativity.", .@loki$;
+	sleep2 5000;
+	npctalk "Loki: Take a good look at yourself. You're delusional if you think you look like a creator of any kind.", .@loki$;
+	sleep2 5000;
+	npctalk "Nidhogg: I second that. You're unnecessary to this world. You don't belong here.", .@nidhogg$;
+	sleep2 4000;
+	npctalk "Nidhogg: Even Yggdrasil denies your existence!", .@nidhogg$;
+	sleep2 4000;
+	npctalk "Nidhogg: As the Guardian of Yggdrasil, I have to remove you from this world.", .@nidhogg$;
+	sleep2 2000;
+	npctalk "Morroc: Pah!";
+	sleep2 2000;
+	npctalk "Morroc: Mortal, you must have a death wish to come at me like this.";
+	sleep2 3000;
+	npctalk "Morroc: I'll take your flesh and blood as housewarming gifts for my new world.";
+	sleep2 3000;
+	npctalk "Morroc: Have you beheld the darkness of the Genesis?";
+	sleep2 3000;
+	npctalk "Morroc: Have you beheld frost, the beginning of life?";
+	sleep2 6000;
+	npctalk "Morroc: Behold the Frost of Audhumla I brought back to life, into this world.";
+	sleep2 3000;
+	specialeffect EF_ENTRY;
+	if ('step == 3) {
+		'step = 4;
+		disablenpc instance_npcname("Strange Boy#mockid01");
+		donpcevent instance_npcname("#gate_to_ice") + "::OnEnable";
+		enablenpc instance_npcname("Nidhogg#eomnyd01");
+		enablenpc instance_npcname("Brinaranea#brinpc01");
+		npctalk "Loki: Are you running?", .@loki$;
+		sleep2 2000;
+		disablenpc .@loki$;
+	}
+	setpcblock PCBLOCK_NPC, false;
+	end;
+}
+
+1@eom,91,120,0	script	#gate_to_ice	WARPNPC,1,1,{
+	end;
+OnEnable:
+	.@gate_to_ice = instance_npcname("#gate_to_ice");
+	enablenpc instance_npcname("#gate_to_ice");
+	specialeffect EF_ICECRASH;
+	sleep 1000;
+	specialeffect EF_MAPPILLAR;
+	end;
+OnTouch_:
+	if (isbegin_quest(7601) == 0 && isbegin_quest(7602) == 0)
+		setquest 7601;
+	warp 'map_eom$,61,88;
+	end;
+}
+
+1@eom,95,122,5	script	Loki#eomloki01	4_M_ROKI2,{
+	mes "[Loki]";
+	mes "You're helpless.";
+	mes "And disgusting.";
+	close;
+}
+
+1@eom,94,120,5	script	Nidhogg#eomnyd01	4_F_NYDHOG,2,2,{
+	if ('step < 4 || is_party_leader() == false)
+		end;
+	if (getmercinfo(0) > 0) {
+		mes "[Nidhogg]";
+		mes "You're with a mercenary.";
+		mes "Could you dismiss your current mercenary and hire me instead?";
+		close;
+	}
+	switch( checkquest(7605,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "[Nidhogg]";
+		mes "I already assisted you once.";
+		mes "Please be careful!";
+		close;
+	case 2:
+		erasequest 7605;
+		break;
+	}
+	setnpcdisplay instance_npcname("Nidhogg#eomnyd01"), 3087;
+	mes "[Nidhogg]";
+	mes "" + strcharinfo(0) + ",";
+	mes "allow me to aid you in this battle.";
+	npctalk "Nidhogg: Allow me to aid you in this battle.";
+	specialeffect EF_SPHERE;
+	next;
+	mes "[Nidhogg]";
+	mes "My duty as the guardian isn't over yet.";
+	npctalk "Nidhogg: My duty as the guardian isn't over yet.";
+	next;
+	mercenary_create 3087,1800000;// M_NYDHOG
+	mes "^4d4dffGuardian Nidhogg has joined your party.^000000";
+	setquest 7605;// Guardian's Blessing
+	disablenpc instance_npcname("Nidhogg#eomnyd01");
+	close;
+
+OnTouch:
+	if ('step >= 4 && is_party_leader())
+		npctalk "Nidhogg: Wait!";
+	end;
+}
+
+// Center -> Ice
+1@eom,48,88,0	script	Cold Mana Crystalline#eom01	4_ENERGY_BLUE,{
+	getitem 22566,1;// Frost_Crystal
+	specialeffect EF_LEVEL99_4;
+	disablenpc instance_npcname( strnpcinfo(0) );
+	end;
+}
+1@eom,51,103,0	duplicate(Cold Mana Crystalline#eom01)	Cold Mana Crystalline#eom02	4_ENERGY_BLUE
+1@eom,24,109,0	duplicate(Cold Mana Crystalline#eom01)	Cold Mana Crystalline#eom03	4_ENERGY_BLUE
+1@eom,26,128,0	duplicate(Cold Mana Crystalline#eom01)	Cold Mana Crystalline#eom04	4_ENERGY_BLUE
+1@eom,40,140,0	duplicate(Cold Mana Crystalline#eom01)	Cold Mana Crystalline#eom05	4_ENERGY_BLUE
+1@eom,38,139,0	duplicate(Cold Mana Crystalline#eom01)	Cold Mana Crystalline#eom06	4_ENERGY_BLUE
+1@eom,51,149,0	duplicate(Cold Mana Crystalline#eom01)	Cold Mana Crystalline#eom07	4_ENERGY_BLUE
+1@eom,49,148,0	duplicate(Cold Mana Crystalline#eom01)	Cold Mana Crystalline#eom08	4_ENERGY_BLUE
+
+1@eom,61,88,0	script	#icemob01	HIDDEN_WARP_NPC,2,1,{
+	end;
+OnTouch_:
+	if ('step >= 4) {
+		disablenpc instance_npcname("#icemob01");
+		areamonster 'map_eom$,40,93,48,101, "Frost Spider",3088,4;	// MM_BRINARANEA_BABY
+	}
+	end;
+}
+
+1@eom,22,116,3	script	Frost Spider#icemob02	3088,3,3,{
+	end;
+OnTouch_:
+	if ('step >= 4) {
+		disablenpc instance_npcname("Frost Spider#icemob02");
+		monster 'map_eom$,22,116, "Frost Spider",3088,1;	// MM_BRINARANEA_BABY
+		areamonster 'map_eom$,22,113,28,119, "Frost Spider",3088,3;
+	}
+	end;
+}
+
+1@eom,53,134,3	script	Frost Spider#icemob03	3088,3,3,{
+	end;
+OnTouch_:
+	if ('step >= 4) {
+		disablenpc instance_npcname("Frost Spider#icemob03");
+		monster 'map_eom$,53,134, "Frost Spider",3088,1;	// MM_BRINARANEA_BABY
+		areamonster 'map_eom$,47,133,53,139, "Frost Spider",3088,3;
+	}
+	end;
+}
+
+1@eom,38,129,3	script	Brinaranea#brinpc01	3091,10,10,{
+	end;
+OnTouch_:
+	if ('step == 4) {
+		'step = 5;
+		npctalk "Brinaranea: Ooh, food walks into my lair.";
+		initnpctimer;
+	}
+	end;
+OnTimer3000:
+	npctalk "Brinaranea: My children will have a feast tonight. Ho ho ho!";
+	disablenpc instance_npcname("Brinaranea#brinpc01");
+	donpcevent instance_npcname("#ice_hpcheck") + "::OnSpawn";
+	end;
+OnTimer5000:
+	stopnpctimer;
+	unittalk 'boss_id, "Time to cook! *Giggle*";
+	donpcevent instance_npcname("#ice_combo") + "::OnStart";
+	donpcevent instance_npcname("#ice_hpcheck") + "::OnStart";
+	end;
+}
+
+1@eom,2,3,0	script	#ice_hpcheck	CLEAR_NPC,{
+	end;
+OnSpawn:
+	enablenpc instance_npcname("#ice_hpcheck");
+	monster 'map_eom$,38,123, "Brinaranea",3091,1, instance_npcname("#ice_hpcheck") + "::OnMyMobDead";	// MM_BRINARANEA
+	'boss_id = $@mobid[0];
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_MAXHP];
+	unitskilluseid 'boss_id, "NPC_WIDEFREEZE",5;
+	end;
+OnStart:
+	initnpctimer;
+	end;
+
+OnTimer3000:
+	getunitdata 'boss_id, .@data;
+	.@hp = .@data[UMOB_HP];
+	if ('boss_hp < .@hp) {
+		'boss_hp = .@hp;
+		initnpctimer;
+		end;
+	}
+	if (('boss_hp - .@hp) > 2000000) {
+		'boss_hp = .@hp;
+		donpcevent instance_npcname("#super_heal") + "::OnStart";
+		initnpctimer;
+		end;
+	}
+	'boss_hp = .@hp;
+
+	if (.@hp > 69500000 && .@hp < 70000000) {
+		unittalk 'boss_id, "Come out, my children. An exquisite feast has delivered itself to us!";
+		donpcevent instance_npcname("#ice_hpcheck") + "::OnCallBaby";
+	}
+	else if (.@hp > 59500000 && .@hp < 60000000) {
+		unittalk 'boss_id, "Children, it's time for dinner!";
+		donpcevent instance_npcname("#ice_hpcheck") + "::OnCallBaby";
+	}
+	else if (.@hp > 49500000 && .@hp < 50000000) {
+		unittalk 'boss_id, "Have all of you fed yet? Come out now!";
+		donpcevent instance_npcname("#ice_hpcheck") + "::OnCallBaby";
+	}
+	else if (.@hp < 22200000 && 'icestunami == false)
+		donpcevent instance_npcname("#icestunami") + "::OnStart";
+	initnpctimer;
+	end;
+
+OnMyMobDead:
+	donpcevent instance_npcname("#ice_hpcheck") + "::OnEnd";
+	disablenpc instance_npcname("Brinaranea#brinpc01");
+	stopnpctimer instance_npcname("#ice_combo");
+	stopnpctimer instance_npcname("#brinaranea_event_1");
+	stopnpctimer instance_npcname("#brinaranea_event_2");
+	stopnpctimer instance_npcname("#brinaranea_event_3");
+	stopnpctimer instance_npcname("#brinaranea_event_4");
+	stopnpctimer instance_npcname("Brinaranea#brinpc01");
+	stopnpctimer instance_npcname("#super_heal");
+	// stopnpctimer instance_npcname("#icestunami");
+
+	enablenpc instance_npcname("Nidhogg#eomnyd02");
+	enablenpc instance_npcname("#ice_to_center");
+	enablenpc instance_npcname("Morroc#mockid02");
+	mapannounce 'map_eom$, "Nidhogg: Brinaranea's influence has dissipated, and a new warp gate has appeared.", bc_map, 0x00ff00;
+	'step = 6;
+
+	donpcevent instance_npcname("#demon_god_variables") + "::OnVariableReset";
+	end;
+
+OnEnd:
+	stopnpctimer;
+	disablenpc instance_npcname("#ice_hpcheck");
+	killmonster 'map_eom$, instance_npcname("#ice_hpcheck") + "::OnMyMobDead";
+	end;
+
+OnCallBaby:
+	sleep 500;
+	if ('boss_id == 0)
+		end;
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_HP];
+	killmonster 'map_eom$, instance_npcname("#ice_hpcheck") + "::OnMyMobDead";
+	monster 'map_eom$,38,123, "Brinaranea",3091,1, instance_npcname("#ice_hpcheck") + "::OnMyMobDead";	// MM_BRINARANEA
+	'boss_id = $@mobid[0];
+	setunitdata 'boss_id, UMOB_HP, 'boss_hp;
+	if ('spawn == true)
+		end;
+	'spawn = true;
+	unitskilluseid 'boss_id, "NPC_WIDEFREEZE",5;
+	sleep 1000;
+	if ('boss_id == 0)
+		end;
+	getunitdata 'boss_id, .@data;
+	areamonster 'map_eom$,(.@data[UMOB_X]-5),(.@data[UMOB_Y]-5),(.@data[UMOB_X]+5),(.@data[UMOB_Y]+5), " ",3088,5;	// MM_BRINARANEA_BABY
+	sleep 15000;
+	'spawn = false;
+	end;
+
+OnTest_hp:
+	if ('boss_id && mobcount( 'map_eom$, instance_npcname("#ice_hpcheck") + "::OnMyMobDead" ) > 0)
+		setunitdata 'boss_id, UMOB_HP, 2000000;
+	end;
+}
+
+1@eom,2,6,0	script	#ice_combo	CLEAR_NPC,{
+	end;
+OnStart:
+	initnpctimer;
+	end;
+OnTimer10000:
+	donpcevent instance_npcname("#brinaranea_event_" + rand(1,4)) + "::OnStart";
+	stopnpctimer;
+	end;
+}
+
+1@eom,1,1,0	script	#brinaranea_event_1	-1,{
+	end;
+OnStart:
+	initnpctimer;
+	unittalk 'boss_id, "A show time!";
+	end;
+OnTimer1000:
+	unitskilluseid 'boss_id, "NPC_WIDEFREEZE",5;
+	end;
+OnTimer2500:
+	getunitdata 'boss_id, .@data;
+	'bossx = .@data[UMOB_X];
+	'bossy = .@data[UMOB_Y];
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-3),('bossy+3),-50;
+	end;
+OnTimer4000:
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+3),('bossy+3),-50;
+	end;
+OnTimer5500:
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+3),('bossy-3),-50;
+	end;
+OnTimer7000:
+	stopnpctimer;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-3),('bossy-3),-50;
+	donpcevent instance_npcname("#ice_combo") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#brinaranea_event_2	-1,{
+	end;
+OnStart:
+	initnpctimer;
+	unittalk 'boss_id, "Ooh, game. It looks delicious!";
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id, "NPC_WIDEFREEZE",5;
+	end;
+OnTimer4000:
+	stopnpctimer;
+	getunitdata 'boss_id, .@data;
+	if (.@data[UMOB_TARGETID] > 0)
+		if (getunittype(.@data[UMOB_TARGETID]) == BL_PC)
+			unitskilluseid 'boss_id,"WZ_JUPITEL",28, .@data[UMOB_TARGETID], -50;
+	donpcevent instance_npcname("#ice_combo") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#brinaranea_event_3	-1,{
+	end;
+OnStart:
+	initnpctimer;
+	unittalk 'boss_id, "Wanna play?";
+	end;
+OnTimer1000:
+	unitskilluseid 'boss_id, "NPC_WIDEFREEZE",5;
+	end;
+OnTimer2500:
+	getunitdata 'boss_id, .@data;
+	'bossx = .@data[UMOB_X];
+	'bossy = .@data[UMOB_Y];
+	unitskillusepos 'boss_id,"WZ_VERMILION",5,'bossx,'bossy,-50;
+	end;
+OnTimer3500:
+	callsub( S_Skill,3 );
+	end;
+OnTimer4500:
+	callsub( S_Skill,4 );
+	end;
+OnTimer5500:
+	callsub( S_Skill,5 );
+	end;
+OnTimer6500:
+	callsub( S_Skill,6 );
+	end;
+OnTimer7500:
+	callsub( S_Skill,7 );
+	stopnpctimer;
+	donpcevent instance_npcname("#ice_combo") + "::OnStart";
+	end;
+S_Skill:
+	.@d = getarg(0);
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20, ('bossx - .@d), ('bossy + .@d),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20, ('bossx + .@d), ('bossy + .@d),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20, ('bossx + .@d), ('bossy - .@d),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20, ('bossx - .@d), ('bossy - .@d),-50;
+	return;
+}
+
+1@eom,1,1,0	script	#brinaranea_event_4	-1,{
+	end;
+OnStart:
+	initnpctimer;
+	unittalk 'boss_id, "Hah hah...";
+	end;
+OnTimer1000:
+	unitskilluseid 'boss_id,"AL_HEAL",11;
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id,"AL_HEAL",11;
+	end;
+OnTimer3000:
+	stopnpctimer;
+	unitskilluseid 'boss_id,"AL_HEAL",11;
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_HP];
+	donpcevent instance_npcname("#ice_combo") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#super_heal	-1,{
+	end;
+OnStart:
+	initnpctimer;
+	unittalk 'boss_id, "You're annoying! Don't mess with the Frost of Audhumla!";
+	unitskilluseid 'boss_id, "NPC_ALLHEAL",1;
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_HP];
+	end;
+OnTimer2000:
+	stopnpctimer;
+	mapannounce 'map_eom$, "Nidhogg: No... She's regenerated herself perfectly.", bc_map, 0x00ff00;
+	end;
+}
+
+1@eom,2,4,0	script	#icestunami	CLEAR_NPC,{
+	end;
+OnStart:
+	'icestunami = true;
+	initnpctimer;
+	unittalk 'boss_id, "You hellhounds, can you take this too?";
+	getunitdata 'boss_id, .@data;
+	'x_icemine = .@data[UMOB_X];
+	'y_icemine = .@data[UMOB_Y];
+	callsub( S_Spawn,6 );
+OnTimer2000: callsub( S_Spawn,3 );
+OnTimer4000: callsub( S_Spawn,0 );
+OnTimer6000: callsub( S_Spawn,-3 );
+OnTimer8000: callsub( S_Spawn,-6 );
+OnTimer13000:
+	killmonster 'map_eom$, instance_npcname("#icestunami") + "::OnMobDead";
+	end;
+OnTimer23000:
+	'icestunami = false;
+	'x_icemine = 0;
+	'y_icemine = 0;
+	stopnpctimer;
+	end;
+S_Spawn:
+	.@y = 'y_icemine + getarg(0);
+	.@label$ = instance_npcname("#icestunami") + "::OnMobDead";
+	monster 'map_eom$,('x_icemine-6),.@y," ",2943,1, .@label$;// MM_ICE_MINE
+	monster 'map_eom$,('x_icemine-3),.@y," ",2943,1, .@label$;
+	monster 'map_eom$,  ('x_icemine),.@y," ",2943,1, .@label$;
+	monster 'map_eom$,('x_icemine+3),.@y," ",2943,1, .@label$;
+	monster 'map_eom$,('x_icemine+6),.@y," ",2943,1, .@label$;
+	end;
+OnMobDead:
+	end;
+}
+
+1@eom,59,147,3	script	Nidhogg#eomnyd02	4_F_NYDHOG,{
+	if ('step < 6)
+		end;
+	if (isbegin_quest(7602) == 0 && checkquest(7601,HUNTING) == 2) {
+		mes "[Nidhogg]";
+		mes "That was a tough battle.";
+		mes "This may not be good enough, but I hope it'll help your growth.";
+		next;
+		mes "^4d4dffGuardian Nidhogg has rewarded you with a large amount of EXP for defeating Brinaranea.^000000";
+		erasequest 7601;// Temple of the Demon God Phase 1
+		setquest 7602;// Temple of the Demon God Phase 1 Completed
+		getexp 1000000,500000;
+		close;
+	}
+	mes "[Nidhogg]";
+	mes "Can this dreadful place compete with the Frost of the Genesis?";
+	mes "I can't say.";
+	mes "He's created nothing on his own. How did he convince himself to think that he could be a creator?";
+	close;
+}
+
+1@eom,67,149,0	script	#ice_to_center	WARPNPC,1,1,{
+	end;
+OnTouch_:
+	if (isbegin_quest(7602) == 0 && checkquest(7601,HUNTING) == 2) {
+		mes "[Nidhogg]";
+		mes "That was a tough battle.";
+		mes "This may not be good enough, but I hope it'll help your growth.";
+		next;
+		mes "^4d4dffGuardian Nidhogg has rewarded you with a large amount of EXP for defeating Brinaranea.^000000";
+		setquest 7602;
+		erasequest 7601;
+		getexp 1000000,500000;
+		close;
+	}
+	warp 'map_eom$,98,115;
+	end;
+}
+
+// Center to Fire
+1@eom,100,122,3	script	Morroc#mockid02	4_F_MOCBOY,{
+	if ('step != 6 || is_party_leader() == false || checkquest(7593,HUNTING) != 1)
+		end;
+	cutin "morocc_kid.bmp",2;
+	mes "[Morroc]";
+	mes "You're good.";
+	mes "Can you take on the wolf that swallowed the sun?";
+	npctalk "Morroc: You're good. Can you taken on the wolf that swallowed the sun?";
+	next;
+	mes "[Morroc]";
+	mes "If you can't handle him, then you can't handle a god now, can you?";
+	npctalk "Morroc: If you can't handle him, then you can't handle a god now, can you?";
+	next;
+	mes "[Morroc]";
+	mes "I'll watch you. Mwa hah hah!";
+	npctalk "Morroc: I'll watch you. Mwa hah hah!";
+	close2;
+	cutin "",255;
+	if ('step == 6) {
+		'step = 7;
+		setpcblock PCBLOCK_NPC, true;
+		enablenpc instance_npcname("#fire_event01");
+		donpcevent instance_npcname("#gate_to_fire") + "::OnEnable";
+		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
+		specialeffect EF_ENTRY;
+		cloakonnpc instance_npcname("Morroc#mockid02");	// cloakonnpc to properly display the previous effect
+	}
+	end;
+}
+
+1@eom,104,120,0	script	#gate_to_fire	WARPNPC,1,1,{
+	end;
+OnTouch_:
+	if (isbegin_quest(7603) == 0 && isbegin_quest(7604) == 0)
+		setquest 7603;
+	warp 'map_eom$,132,93;
+	end;
+OnEnable:
+	enablenpc instance_npcname("#gate_to_fire");
+	specialeffect EF_METEORSTORM;
+	sleep 1000;
+	specialeffect EF_MAPPILLAR;
+	end;
+}
+
+1@eom,132,93,0	script	#fire_event01	HIDDEN_WARP_NPC,1,1,{
+	end;
+OnTouch_:
+	disablenpc instance_npcname("#fire_event01");
+	sleep 1000;
+	mapannounce 'map_eom$, "Grr...", bc_map, 0xff0000;
+	sleep 3000;
+	mapannounce 'map_eom$, "I smell human... Grr...", bc_map, 0xff0000;
+	monster 'map_eom$,139,101, "Frenzied Kasa",3089,1;	// MM_LOCO_KASA
+	sleep 1000;
+	monster 'map_eom$,142, 98, "Frenzied Kasa",3089,1;
+	sleep 1000;
+	monster 'map_eom$,144, 92, "Frenzied Kasa",3089,1;
+	sleep 3000;
+	monster 'map_eom$,145,104, "Frenzied Kasa",3089,1;
+	sleep 1000;
+	monster 'map_eom$,148, 98, "Frenzied Kasa",3089,1;
+	sleep 1000;
+	monster 'map_eom$,150, 93, "Frenzied Kasa",3089,1;
+	sleep 3000;
+	monster 'map_eom$,151,106, "Frenzied Kasa",3089,1;
+	sleep 1000;
+	monster 'map_eom$,153,100, "Frenzied Kasa",3089,1;
+	sleep 1000;
+	monster 'map_eom$,156, 95, "Frenzied Kasa",3089,1;
+	mapannounce 'map_eom$, "...BURN!", bc_map, 0xff0000;
+	donpcevent instance_npcname("#skollmaster") + "::OnStart";
+	end;
+}
+
+1@eom,3,1,0	script	#skollmaster	CLEAR_NPC,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#skollmaster");
+	enablenpc instance_npcname("Flowing Lava#lavapond01");
+	enablenpc instance_npcname("Flowing Lava#lavapond02");
+	enablenpc instance_npcname("#lavazone11");
+	enablenpc instance_npcname("#lavazone12");
+	enablenpc instance_npcname("#lavazone21");
+	enablenpc instance_npcname("#lavazone22");
+	'flowing_lava_deactivate[0] = 'flowing_lava_deactivate[1] = false;
+
+	monster 'map_eom$,148,98, "Muspellskoll",3092,1, instance_npcname("#skollmaster") + "::OnMobDead";	// MM_MUSPELLSKOLL
+	'boss_id = $@mobid[0];
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_MAXHP];
+	sleep 1000;
+	if ('boss_id)
+		unittalk 'boss_id, "You're the ones... Grr... Good, I'll crush your bones! Grr...";
+	sleep 4000;
+	if ('boss_id)
+		donpcevent instance_npcname("#skollmaster") + "::OnLava_heal";
+	end;
+
+OnLava_heal:
+	'lava_heal = true;
+	donpcevent instance_npcname("#fire_combo") + "::OnEnd";
+	stopnpctimer instance_npcname("#fire_hpcheck");
+	callsub S_Event, 0, 156,117;
+	initnpctimer;
+	end;
+OnTimer2000:
+	callsub S_Event, 1, 180,129;
+	end;
+OnTimer4000:
+	callsub S_ReSpawn, 168,121;
+	unitskilluseid 'boss_id, "CR_REFLECTSHIELD",1;
+	unittalk 'boss_id, "Let's do this again. Come on!";
+	donpcevent instance_npcname("#loco_call") + "::OnSpawn";
+	end;
+OnTimer6000:
+	stopnpctimer;
+	'lava_heal = false;
+	donpcevent instance_npcname("#fire_hpcheck") + "::OnStart";
+	donpcevent instance_npcname("#fire_combo") + "::OnEvent";
+	end;
+S_ReSpawn:
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_HP];
+	killmonster 'map_eom$, instance_npcname("#skollmaster") + "::OnMobDead";
+	monster 'map_eom$,getarg(0),getarg(1), "Muspellskoll",3092,1, instance_npcname("#skollmaster") + "::OnMobDead";	// MM_MUSPELLSKOLL
+	'boss_id = $@mobid[0];
+	setunitdata 'boss_id, UMOB_HP, 'boss_hp;
+	return;
+S_Event:
+	callsub S_ReSpawn, getarg(1),getarg(2);
+	if ('flowing_lava_deactivate[ getarg(0) ] == false) {
+		for ( .@i = 0; .@i < 8; .@i++ ) {
+			unitskilluseid 'boss_id, "AL_HEAL",11;
+			sleep 100;
+			if ('boss_id == 0)
+				end;
+		}
+		unitskilluseid 'boss_id, "AL_HEAL",11;
+	}
+	mapannounce 'map_eom$, "Nidhogg: Muspellskoll is trying to regenerate itself using the lava!", bc_map, 0x00ff00;
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_HP];
+	donpcevent instance_npcname("#loco_call") + "::OnSpawn";
+	return;
+
+OnMobDead:
+	stopnpctimer instance_npcname("#fire_hpcheck");
+	stopnpctimer instance_npcname("#muspellskoll_event_1");
+	stopnpctimer instance_npcname("#muspellskoll_event_2");
+	stopnpctimer instance_npcname("#muspellskoll_event_3");
+	donpcevent instance_npcname("#fire_combo") + "::OnEnd";
+	donpcevent instance_npcname("#loco_call") + "::OnEnd";
+
+	killmonster 'map_eom$, instance_npcname("#skollmaster") + "::OnMobDead";
+	mapannounce 'map_eom$, "Nidhogg: Muspellskoll's influence has dissipated, and a new warp gate has appeared.", bc_map, 0x00ff00;
+
+	enablenpc instance_npcname("Nidhogg#eomnyd03");
+	enablenpc instance_npcname("#fire_to_center");
+	enablenpc instance_npcname("Strange Young Man#mocadt01");
+
+	'step = 8;
+	donpcevent instance_npcname("#demon_god_variables") + "::OnVariableReset";
+	end;
+
+OnTest_hp:
+	if ('boss_id && mobcount( 'map_eom$, instance_npcname("#skollmaster") + "::OnMobDead" ) > 0)
+		setunitdata 'boss_id, UMOB_HP, 2000000;
+	end;
+}
+
+1@eom,3,7,0	script	#fire_hpcheck	CLEAR_NPC,{
+	end;
+OnStart:
+	initnpctimer;
+	end;
+OnTimer3000:
+	getunitdata 'boss_id, .@data;
+	.@hp = .@data[UMOB_HP];
+	if ('boss_hp < .@hp) {
+		initnpctimer;
+		end;
+	}
+	if (('boss_hp - .@hp) > 1000000) {
+		'boss_hp = .@hp;
+		donpcevent instance_npcname("#fire_hpcheck") + "::OnHeal";	// the event can stack and the boss can stay in this state until it demise
+		initnpctimer;
+		end;
+	}
+	'boss_hp = .@hp;
+
+	if ('lava_heal == false) {
+		if (.@hp > 29500000 && .@hp < 30000000 || .@hp > 35500000 && .@hp < 36000000 || .@hp > 39500000 && .@hp < 40000000 || .@hp > 44500000 && .@hp < 45000000) {
+			unittalk 'boss_id, "I'm not going down without a fight!";
+			donpcevent instance_npcname("#skollmaster") + "::OnLava_heal";
+		}
+	}
+	initnpctimer;
+	end;
+
+OnHeal:
+	if ('fire_combo)
+		donpcevent instance_npcname("#fire_combo") + "::OnEnd";
+	unittalk 'boss_id, "Do I look easy to you? I'll burn you to ashes!";
+	sleep 2000;
+	if ('boss_id == 0)
+		end;
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_METEOR",11,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	sleep 1000;
+	if ('boss_id == 0)
+		end;
+	for ( .@i = 0; .@i < 18; .@i++ ) {
+		unitskilluseid 'boss_id, "AL_HEAL",11;
+		sleep 200;
+		if ('boss_id == 0)
+			end;
+	}
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_METEOR",11,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	for ( .@i = 0; .@i < 18; .@i++ ) {
+		unitskilluseid 'boss_id, "AL_HEAL",11;
+		sleep 200;
+		if ('boss_id == 0)
+			end;
+	}
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_HP];
+	if (!'fire_combo)
+		donpcevent instance_npcname("#fire_combo") + "::OnEvent";
+	end;
+}
+
+1@eom,3,5,0	script	#loco_call	CLEAR_NPC,{
+	end;
+OnSpawn:
+	enablenpc instance_npcname("#loco_call");
+	initnpctimer;
+	getunitdata 'boss_id, .@data;
+	'x_loco = .@data[UMOB_X];
+	'y_loco = .@data[UMOB_Y];
+	end;
+OnTimer1000:
+	.@label$ = instance_npcname("#loco_call") + "::OnMobDead";
+	if (mobcount( 'map_eom$, .@label$ ) < 6)
+		areamonster 'map_eom$,('x_loco-5),('y_loco-5),('x_loco+5),('y_loco+5)," ",3089,3, .@label$;	// MM_LOCO_KASA
+	end;
+OnTimer16000:
+	stopnpctimer;
+	disablenpc instance_npcname("#loco_call");
+	end;
+OnMobDead:
+	end;
+OnEnd:
+	stopnpctimer;
+	disablenpc instance_npcname("#loco_call");
+	end;
+}
+
+1@eom,1,1,0	script	#muspellskoll_event_1	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "Crash and burn!";
+	end;
+OnTimer1000:
+	unitskilluseid 'boss_id, "NPC_FIRESTORM",3;
+	end;
+OnTimer3000:
+	stopnpctimer;
+	unitskilluseid 'boss_id, "WZ_SIGHTRASHER",10;
+	if ('fire_combo)
+		donpcevent instance_npcname("#fire_combo") + "::OnEvent";
+	end;
+}
+
+1@eom,1,1,0	script	#muspellskoll_event_2	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "Grr...";
+	end;
+OnTimer1000:
+	getunitdata 'boss_id, .@data;
+	'bossx = .@data[UMOB_X];
+	'bossy = .@data[UMOB_Y];
+	unitskilluseid 'boss_id, "NPC_FIRESTORM",3;
+	end;
+OnTimer3000:
+	unitskillusepos 'boss_id,"WZ_FIREPILLAR",1,('bossx-3),('bossy+3),-50;
+	end;
+OnTimer5000:
+	unitskillusepos 'boss_id,"WZ_FIREPILLAR",1,('bossx+3),('bossy+3),-50;
+	end;
+OnTimer7000:
+	unitskillusepos 'boss_id,"WZ_FIREPILLAR",1,('bossx-3),('bossy-3),-50;
+	end;
+OnTimer9000:
+	unitskillusepos 'boss_id,"WZ_FIREPILLAR",1,('bossx+3),('bossy-3),-50;
+	end;
+OnTimer19000:
+	stopnpctimer;
+	if ('fire_combo)
+		donpcevent instance_npcname("#fire_combo") + "::OnEvent";
+	end;
+}
+
+1@eom,1,1,0	script	#muspellskoll_event_3	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "My fire will swallow you whole!";
+	end;
+OnTimer1000:
+	unitskilluseid 'boss_id, "NPC_FIRESTORM",3;
+	end;
+OnTimer2000:
+	donpcevent instance_npcname("#flamecross") + "::OnStart";
+	end;
+OnTimer7000:
+	getunitdata 'boss_id, .@data;
+	'bossx = .@data[UMOB_X];
+	'bossy = .@data[UMOB_Y];
+	unitskillusepos 'boss_id,"WZ_METEOR",5,('bossx),('bossy+5),-50;
+	end;
+OnTimer9000:
+	unitskillusepos 'boss_id,"WZ_METEOR",5,('bossx),('bossy-5),-50;
+	end;
+OnTimer11000:
+	unitskillusepos 'boss_id,"WZ_METEOR",5,('bossx),('bossy+10),-50;
+	end;
+OnTimer13000:
+	stopnpctimer;
+	unitskillusepos 'boss_id,"WZ_METEOR",5,'bossx,('bossy-10),-50;
+	if ('fire_combo)
+		donpcevent instance_npcname("#fire_combo") + "::OnEvent";
+	end;
+}
+
+1@eom,3,3,0	script	#fire_combo	CLEAR_NPC,{
+	end;
+OnEvent:
+	initnpctimer;
+	'fire_combo = true;
+	end;
+OnTimer10000:
+	stopnpctimer;
+	.@r = rand(1,4);
+	if (.@r == 1)
+		donpcevent instance_npcname("#muspellskoll_event_1") + "::OnEvent";
+	else if (.@r == 2)
+		donpcevent instance_npcname("#muspellskoll_event_2") + "::OnEvent";
+	else if (.@r == 3)
+		donpcevent instance_npcname("#muspellskoll_event_3") + "::OnEvent";
+	else
+		donpcevent instance_npcname("#flamecross") + "::OnSpawn";
+	end;
+OnEnd:
+	stopnpctimer;
+	'fire_combo = false;
+	disablenpc instance_npcname("#fire_combo");
+	end;
+}
+
+1@eom,3,8,0	script	#flamecross	CLEAR_NPC,{
+	end;
+OnStart:
+	getunitdata 'boss_id, .@data;
+	.@x = .@data[UMOB_X];
+	.@y = .@data[UMOB_Y];
+	callsub( S_Spawn,.@x,.@y,3 );
+	sleep 300;
+	callsub( S_Spawn,.@x,.@y,6 );
+	sleep 300;
+	callsub( S_Spawn,.@x,.@y,9 );
+	sleep 300;
+	callsub( S_Spawn,.@x,.@y,13 );
+	sleep 5000;
+	killmonster 'map_eom$, instance_npcname("#flamecross") + "::OnMobDead";
+	end;
+
+S_Spawn:
+	if (!'boss_id) {
+		killmonster 'map_eom$, instance_npcname("#flamecross") + "::OnMobDead";
+		end;
+	}
+	.@x = getarg(0);
+	.@y = getarg(1);
+	.@dxy = getarg(2);
+	.@label$ = instance_npcname("#flamecross") + "::OnMobDead";
+	monster 'map_eom$,(.@x+.@dxy),(.@y+.@dxy)," ",2960,1, .@label$;// MM_FLAMECROSS
+	monster 'map_eom$,(.@x-.@dxy),(.@y-.@dxy)," ",2960,1, .@label$;
+	monster 'map_eom$,(.@x+.@dxy),(.@y-.@dxy)," ",2960,1, .@label$;
+	monster 'map_eom$,(.@x-.@dxy),(.@y+.@dxy)," ",2960,1, .@label$;
+	return;
+
+OnSpawn:
+	getunitdata 'boss_id, .@data;
+	.@label$ = instance_npcname("#flamecross") + "::OnMobDead";	// same OnMobDead than OnStart?
+	if (mobcount( 'map_eom$, .@label$ ) < 2)
+		areamonster 'map_eom$,(.@data[UMOB_X]-1),(.@data[UMOB_Y]-1),(.@data[UMOB_X]+1),(.@data[UMOB_Y]+1)," ",3090,2, .@label$;	// MM_LOCO_SALAMANDER
+	if ('fire_combo)
+		donpcevent instance_npcname("#fire_combo") + "::OnEvent";
+	end;
+
+OnMobDead:
+	end;
+}
+
+1@eom,154,119,0	script	Flowing Lava#lavapond01	CLEAR_NPC,{	// todo, custom text
+	if (countitem(22566) < 1)
+		end;
+	mes "It can be used to block the flow of lava using a Frost Crystal.";
+	next;
+	if (select( "Use a Frost Crystal", "Do not use a Frost Crystal" ) == 2)
+		end;
+	if ('flowing_lava_deactivate[0] == true)
+		end;
+	'flowing_lava_deactivate[0] = true;
+	delitem 22566,1;// Frost_Crystal
+	disablenpc instance_npcname("Flowing Lava#lavapond01");
+	donpcevent instance_npcname("Hardened Lava#lavaseal01") + "::OnEnable";
+	initnpctimer;
+	end;
+OnTimer300:
+	donpcevent instance_npcname("Hardened Lava#lavaseal01") + "::OnEffect";
+	end;
+OnTimer120000:
+	'flowing_lava_deactivate[0] = false;
+	donpcevent instance_npcname("Hardened Lava#lavaseal01") + "::OnDisable";
+	enablenpc instance_npcname("Flowing Lava#lavapond01");
+	mapannounce 'map_eom$, "Nidhogg: The Frost has melted. The lava is flowing again!", bc_map, 0x00ff00;
+	stopnpctimer;
+	end;
+}
+
+1@eom,182,129,0	script	Flowing Lava#lavapond02	CLEAR_NPC,{	// todo, custom text
+	if (countitem(22566) < 1)
+		end;
+	mes "It can be used to block the flow of lava using a Frost Crystal.";
+	next;
+	if (select( "Use a Frost Crystal", "Do not use a Frost Crystal" ) == 2)
+		end;
+	if ('flowing_lava_deactivate[1] == true)
+		end;
+	'flowing_lava_deactivate[1] = true;
+	delitem 22566,1;// Frost_Crystal
+	disablenpc instance_npcname("Flowing Lava#lavapond02");
+	donpcevent instance_npcname("Hardened Lava#lavaseal02") + "::OnEnable";
+	initnpctimer;
+	end;
+OnTimer300:
+	donpcevent instance_npcname("Hardened Lava#lavaseal02") + "::OnEffect";
+	end;
+OnTimer120000:
+	'flowing_lava_deactivate[1] = false;
+	donpcevent instance_npcname("Hardened Lava#lavaseal02") + "::OnDisable";
+	enablenpc instance_npcname("Flowing Lava#lavapond02");
+	mapannounce 'map_eom$, "Nidhogg: The Frost has melted. The lava is flowing again!", bc_map, 0x00ff00;
+	stopnpctimer;
+	end;
+}
+
+1@eom,154,119,0	script	Hardened Lava#lavaseal01	CLEAR_NPC,{
+	end;
+OnEnable:
+	enablenpc instance_npcname("Hardened Lava#lavaseal01");
+	disablenpc instance_npcname("#lavazone11");
+	disablenpc instance_npcname("#lavazone12");
+	end;
+OnDisable:
+	stopnpctimer;
+	disablenpc instance_npcname("Hardened Lava#lavaseal01");
+	enablenpc instance_npcname("#lavazone11");
+	enablenpc instance_npcname("#lavazone12");
+	end;
+OnEffect:
+	initnpctimer;
+	specialeffect EF_LIGHTNINGLOADER;
+	end;
+OnTimer3000:
+	initnpctimer;
+	end;
+}
+
+1@eom,182,129,0	script	Hardened Lava#lavaseal02	CLEAR_NPC,{
+	end;
+OnEnable:
+	enablenpc instance_npcname("Hardened Lava#lavaseal02");
+	disablenpc instance_npcname("#lavazone21");
+	disablenpc instance_npcname("#lavazone22");
+	end;
+OnDisable:
+	stopnpctimer;
+	disablenpc instance_npcname("Hardened Lava#lavaseal02");
+	enablenpc instance_npcname("#lavazone21");
+	enablenpc instance_npcname("#lavazone22");
+	end;
+OnEffect:
+	initnpctimer;
+	specialeffect EF_LIGHTNINGLOADER;
+	end;
+OnTimer3000:
+	initnpctimer;
+	end;
+}
+
+1@eom,161,122,0	script	#lavazone11	HIDDEN_WARP_NPC,10,10,{
+	end;
+OnTouch:
+	percentheal -3,0;
+	specialeffect2 EF_SPRINKLESAND;
+	end;
+}
+1@eom,161,102,0	duplicate(#lavazone11)	#lavazone12	HIDDEN_WARP_NPC,10,10
+1@eom,163,150,0	duplicate(#lavazone11)	#lavazone21	HIDDEN_WARP_NPC,10,10
+1@eom,163,150,0	duplicate(#lavazone11)	#lavazone22	HIDDEN_WARP_NPC,10,10
+
+1@eom,151,155,3	script	Nidhogg#eomnyd03	4_F_NYDHOG,{
+	if (checkquest(7603,HUNTING) == 2 && isbegin_quest(7604) == 0) {
+		mes "[Nidhogg]";
+		mes "Good job, again.";
+		mes "This may not be good enough, but I hope it'll help your growth.";
+		next;
+		mes "^4d4dffGuardian Nidhogg has rewarded you with a large amount of EXP for defeating Muspellskoll.^000000";
+		erasequest 7603;// Temple of the Demon God Phase 2
+		setquest 7604;// Temple of the Demon God Phase 2 Completed
+		getexp 1000000,500000;
+		close;
+	}
+	mes "[Nidhogg]";
+	mes "Skoll... Skoll and Haati...";
+	mes "Everything in here is a mere copy of that in the outside world.";
+	mes "He's not a creator.";
+	close;
+}
+
+1@eom,147,156,0	script	#fire_to_center	WARPNPC,1,1,{
+	end;
+OnTouch_:
+	if (checkquest(7603,HUNTING) == 2 && isbegin_quest(7604) == 0) {
+		mes "[Nidhogg]";
+		mes "Good job, again.";
+		mes "This may not be good enough, but I hope it'll help your growth.";
+		next;
+		mes "^4d4dffGuardian Nidhogg has rewarded you with a large amount of EXP for defeating Muspellskoll.^000000";
+		setquest 7604;
+		erasequest 7603;
+		getexp 1000000,500000;
+		close;
+	}
+	warp 'map_eom$,98,115;
+	end;
+}
+
+// Center to Last
+1@eom,98,123,5	script	Strange Young Man#mocadt01	3097,5,5,{	// MM_MOROCC_ADT
+	end;
+OnTouch_:
+	if ('step == 8 && is_party_leader()) {
+		'step = 9;
+		initnpctimer;
+	}
+	end;
+OnTimer1000:
+	npctalk "You exceed my expectations.";
+	end;
+OnTimer4000:
+	npctalk "I'll accept your challenge.";
+	end;
+OnTimer7000:
+	npctalk "I shall drench the land with your flowing blood and nourish it with your torn flesh.";
+	end;
+OnTimer8000:
+	specialeffect EF_BEGINSPELL5;
+	enablenpc instance_npcname("#gate_to_last");
+	enablenpc instance_npcname("#moc_master");
+	specialeffect EF_READYPORTAL2,AREA, instance_npcname("#gate_to_last");
+	end;
+OnTimer10000:
+	npctalk "I'll show you the true depths of despair.";
+	end;
+OnTimer12000:
+	stopnpctimer;
+	specialeffect EF_ENTRY;
+	disablenpc instance_npcname("Strange Young Man#mocadt01");
+	end;
+}
+
+1@eom,98,127,0	warp	#gate_to_last	1,1,1@eom,102,186
+
+1@eom,101,194,3	script	#moc_master	3096,10,10,{
+	end;
+OnTouch_:
+	if ('step != 9)
+		end;
+	'step = 10;
+	npctalk "Morroc: You're already here, so let's not waste our time on talking.";
+	initnpctimer;
+	end;
+OnTimer2000:
+	stopnpctimer;
+	npctalk "Morroc: Come on, mortals!";
+	disablenpc instance_npcname("#moc_master");
+	donpcevent instance_npcname("#despair_god_main") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#despair_god_main	-1,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#despair_god_main");
+	'boss_phase = 1;
+
+	monster 'map_eom$,101,194, "Demigod",3096,1, instance_npcname("#despair_god_main") + "::OnMobDead";	// MM_MOROCC_KID
+	'boss_id = $@mobid[0];
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_MAXHP];
+
+	unitskillusepos 'boss_id,"WZ_METEOR",11,101,194,-50;
+
+	enablenpc instance_npcname("#mk_trap");
+	donpcevent instance_npcname("#mk_hpcheck") + "::OnStart";
+	donpcevent instance_npcname("#mk_combo") + "::OnEvent";
+	end;
+
+OnPhase02:
+	if ('boss_phase != 1)
+		end;
+	'boss_phase = 2;
+	stopnpctimer instance_npcname("#demigod_event_1");
+	stopnpctimer instance_npcname("#demigod_event_2");
+	stopnpctimer instance_npcname("#demigod_event_3");
+	stopnpctimer instance_npcname("#mk_hpcheck");
+	stopnpctimer instance_npcname("#mk_combo");
+	unittalk 'boss_id, "You'll have to do better than this!";
+	sleep 2000;
+	if ('boss_id == 0)
+		end;
+	getunitdata 'boss_id, .@data;
+	'boss_hp = .@data[UMOB_HP];
+	killmonster 'map_eom$, instance_npcname("#despair_god_main") + "::OnMobDead";
+	monster 'map_eom$,101,207, "Demigod",3096,1, instance_npcname("#despair_god_main") + "::OnMobDead";	// MM_MOROCC_KID
+	'boss_id = $@mobid[0];
+	setunitdata 'boss_id, UMOB_HP, 'boss_hp;
+	setunitdata 'boss_id, UMOB_MODE, (MD_MVP|MD_STATUSIMMUNE|MD_KNOCKBACKIMMUNE|MD_MVP|MD_DETECTOR);	// todo: MD_SKILL_IMMUNE ?
+	sleep 2000;
+	if ('boss_id == 0)
+		end;
+	donpcevent instance_npcname("#moc_origin") + "::OnEnable";
+	end;
+
+OnPhase03:
+	if ('boss_phase != 2)
+		end;
+	'boss_phase = 3;
+	getunitdata 'boss_id, .@data;
+	.@hp = .@data[UMOB_HP] + ('boss_hp - .@data[UMOB_HP]) * 10;
+	'boss_hp = min(80000000,.@hp);
+	killmonster 'map_eom$, instance_npcname("#despair_god_main") + "::OnMobDead";
+	monster 'map_eom$,101,194, "Demigod",3096,1, instance_npcname("#despair_god_main") + "::OnMobDead";	// MM_MOROCC_KID
+	'boss_id = $@mobid[0];
+	setunitdata 'boss_id, UMOB_HP, 'boss_hp;
+	unittalk 'boss_id, "Stop being so persistent!";
+	sleep 2000;
+	if ('boss_id == 0)
+		end;
+	unitskilluseid 'boss_id, "NPC_WIDEWEB",1;
+	sleep 1000;
+	if ('boss_id == 0)
+		end;
+	unitskilluseid 'boss_id, "NPC_FIRESTORM",3;
+	sleep 1000;
+	if ('boss_id == 0)
+		end;
+	unitskilluseid 'boss_id, "MG_FIREBALL",1;
+	donpcevent instance_npcname("#mk_hpcheck") + "::OnStart";
+	donpcevent instance_npcname("#mk_combo") + "::OnEvent";
+	end;
+
+OnTest_hp:
+	if ('boss_id && mobcount( 'map_eom$, instance_npcname("#despair_god_main") + "::OnMobDead" ) > 0)
+		setunitdata 'boss_id, UMOB_HP, 2000000;
+	end;
+
+OnMobDead:
+	disablenpc instance_npcname("#despair_god_main");
+	killmonster 'map_eom$, instance_npcname("#despair_god_main") + "::OnMobDead";
+	stopnpctimer instance_npcname("#mk_combo");
+	stopnpctimer instance_npcname("#demigod_event_1");
+	stopnpctimer instance_npcname("#demigod_event_2");
+	stopnpctimer instance_npcname("#demigod_event_3");
+	stopnpctimer instance_npcname("#moc_meddling");
+	stopnpctimer instance_npcname("#mk_hpcheck");
+	donpcevent instance_npcname("#moc_origin") + "::OnEnd";
+
+	donpcevent instance_npcname("#demon_god_variables") + "::OnVariableReset";
+	donpcevent instance_npcname("#morocc_god") + "::OnStart";
+	end;
+}
+
+1@eom,4,2,0	script	#mk_combo	CLEAR_NPC,{
+	end;
+OnEvent:
+	initnpctimer;
+	'combo_is_allowed = true;
+	end;
+OnStart:
+	initnpctimer;
+	end;
+OnTimer10000:
+	donpcevent instance_npcname("#demigod_event_" + rand(1,3)) + "::OnEvent";
+	stopnpctimer;
+	end;
+OnEnd:
+	stopnpctimer;
+	'combo_is_allowed = false;
+	end;
+}
+
+1@eom,4,1,0	script	#mk_hpcheck	CLEAR_NPC,{
+	end;
+OnStart:
+	initnpctimer;
+	end;
+OnTimer6000:
+	getunitdata 'boss_id, .@data;
+	.@hp = .@data[UMOB_HP];
+	if ('boss_hp < .@hp) {
+		initnpctimer;
+		end;
+	}
+	.@hp_a = 'boss_hp - .@hp;
+	if (.@hp_a > 1000000) {
+		if (.@hp_a > 200000) {
+			.@hp_b = .@hp + (.@hp_a - 200000) * 3;
+			.@hp_b = min(80000000, .@hp_b);
+			setunitdata 'boss_id, UMOB_HP, .@hp_b;
+			mapannounce 'map_eom$, "Nidhogg: Wow, his regenerative power is unheard of! Don't let him regenerate again!", bc_map, 0x00ff00;
+		}
+		unitskilluseid 'boss_id, "AL_HEAL",11;
+		getunitdata 'boss_id, .@data;
+		'boss_hp = .@data[UMOB_HP];
+		initnpctimer;
+		end;
+	}
+	'boss_hp = .@hp;
+
+	switch( 'boss_phase ) {	// process by phase instead of (officially) hp, just in case
+	case 1:
+		if (.@hp < 40000000)
+			donpcevent instance_npcname("#despair_god_main") + "::OnPhase02";
+		break;
+	case 2:
+		break;
+	case 3:
+		if (.@hp > 100000 && .@hp < 30000000)
+			donpcevent instance_npcname("#mk_trap") + "::OnTrap";
+		break;
+	}
+	initnpctimer;
+	end;
+}
+
+1@eom,1,1,0	script	#demigod_event_1	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "Mwah hah, dodge this if you can!";
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id, "NPC_WIDEWEB",1;
+	end;
+OnTimer3000:
+	unitskilluseid 'boss_id, "NPC_FIRESTORM",3;
+	end;
+OnTimer5000:
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_VERMILION",21,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	end;
+OnTimer7000:
+	stopnpctimer;
+	unitskilluseid 'boss_id, "CR_REFLECTSHIELD",1;
+	if ('combo_is_allowed)
+		donpcevent instance_npcname("#mk_combo") + "::OnEvent";
+	end;
+}
+
+1@eom,1,1,0	script	#demigod_event_2	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "A rhapsody for weak souls...";
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id, "NPC_WIDEWEB",1;
+	end;
+OnTimer3000:
+	getunitdata 'boss_id, .@data;
+	'bossx = .@data[UMOB_X];
+	'bossy = .@data[UMOB_Y];
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-2),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+2),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy+2),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy-2),-50;
+	end;
+OnTimer4000:
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-6),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+6),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy+6),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy-6),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-4),('bossy+4),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-4),('bossy-4),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+4),('bossy+4),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+4),('bossy-4),-50;
+	end;
+OnTimer5000:
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-10),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+10),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy+10),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy-10),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-8),('bossy+8),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-8),('bossy-8),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+8),('bossy+8),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+8),('bossy-8),-50;
+	end;
+OnTimer6000:
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-16),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+16),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy+16),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy-16),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-12),('bossy+12),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-12),('bossy-12),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+12),('bossy+12),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+12),('bossy-12),-50;
+	end;
+OnTimer7000:
+	stopnpctimer;
+	if ('combo_is_allowed)
+		donpcevent instance_npcname("#mk_combo") + "::OnEvent";
+	end;
+}
+
+1@eom,1,1,0	script	#demigod_event_3	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "For whom the fugue is played? For whom the requiem is played?";
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id, "NPC_WIDEWEB",1;
+	end;
+OnTimer3000:
+	unitskilluseid 'boss_id, "NPC_FIRESTORM",3;
+	end;
+OnTimer5000:
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_METEOR",5,(.@data[UMOB_X]-5),.@data[UMOB_Y],-50;
+	unitskillusepos 'boss_id,"WZ_METEOR",5,(.@data[UMOB_X]+5),.@data[UMOB_Y],-50;
+	unitskillusepos 'boss_id,"WZ_METEOR",5,.@data[UMOB_X],(.@data[UMOB_Y]+5),-50;
+	unitskillusepos 'boss_id,"WZ_METEOR",5,.@data[UMOB_X],(.@data[UMOB_Y]-5),-50;
+	end;
+OnTimer9000:
+	unittalk 'boss_id, "Burn to ashes!";
+	end;
+OnTimer11000:
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_VERMILION",21,.@data[UMOB_X],.@data[UMOB_Y],-50;	// assuming position on (0,0) is self
+	end;
+OnTimer13000:
+	stopnpctimer;
+	if ('combo_is_allowed)
+		donpcevent instance_npcname("#mk_combo") + "::OnEvent";
+	end;
+}
+
+1@eom,4,3,0	script	#moc_origin	CLEAR_NPC,{
+	end;
+OnEnable:
+	enablenpc instance_npcname("#moc_origin");
+	monster 'map_eom$,114,198, "Morroc of the Genesis", 3098,1, instance_npcname("#moc_origin") + "::OnMobDead1";	// MM_MOROCC_ORIGIN
+	'miniboss_id[0] = $@mobid[0];
+	'miniboss_id[1] = 0;
+	initnpctimer;
+	end;
+OnTimer1000:
+	donpcevent instance_npcname("#moc_origin") + "::OnOriginheal";
+	if ('miniboss_id[0] < 1)
+		end;
+	getunitdata 'miniboss_id[0], .@data;
+	if (.@data[UMOB_HP] < 2200000) {
+		if ('miniboss_id[1] == 0) {
+			monster 'map_eom$,86,199, "Morroc of the Sabbath", 3099,1, instance_npcname("#moc_origin") + "::OnMobDead2";	// MM_MOROCC_REST
+			'miniboss_id[1] = $@mobid[0];
+		}
+	}
+	end;
+OnTimer2000:
+	initnpctimer;
+	end;
+
+OnOriginheal:
+	for ( .@i = 0; .@i < 11; .@i++ ) {
+		unitskilluseid 'boss_id, "AL_HEAL",11;
+		sleep 200;
+		if ('boss_id == 0)
+			end;
+	}
+	end;
+
+OnMobDead1:
+	'miniboss_id[0] = 0;
+	callsub S_Dead;
+OnMobDead2:
+	'miniboss_id[1] = 0;
+	callsub S_Dead;
+S_Dead:
+	if ('miniboss_id[1] == 0 && 'miniboss_id[0] > 0) {	// todo, custom text
+		unittalk 'miniboss_id[0], "---!!!";
+		setunitdata 'miniboss_id[0], UMOB_HP, 3000000;
+		stopnpctimer instance_npcname("#moc_meddling");
+	}
+	else if ('miniboss_id[1] == 0 && 'miniboss_id[0] == 0) {
+		donpcevent instance_npcname("#moc_origin") + "::OnEnd";
+		stopnpctimer instance_npcname("#moc_meddling");
+		donpcevent instance_npcname("#despair_god_main") + "::OnPhase03";
+	}
+	else {
+		unittalk 'miniboss_id[1], "I'll put you to rest. It's my mercy!!!"; // todo, custom text
+		setunitdata 'miniboss_id[1], UMOB_HP, 1000000;
+		donpcevent instance_npcname("#moc_meddling") + "::OnStart";
+	}
+	end;
+
+OnEnd:
+	stopnpctimer;
+	disablenpc instance_npcname("#moc_origin");
+	killmonster 'map_eom$, instance_npcname("#moc_origin") + "::OnMobDead1";
+	killmonster 'map_eom$, instance_npcname("#moc_origin") + "::OnMobDead2";
+	end;
+}
+
+1@eom,1,1,0	script	#moc_meddling	-1,{
+	end;
+OnStart:
+	initnpctimer;
+	getunitdata 'miniboss_id[1], .@data;
+	if (.@data[UMOB_HP] > 100000)
+		unitskillusepos 'miniboss_id[1],"WZ_METEOR",9,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	end;
+OnTimer5000:
+	initnpctimer;
+	end;
+}
+
+1@eom,4,6,0	script	#mk_trap	CLEAR_NPC,{
+	end;
+OnTrap:
+	.@label$ = instance_npcname("#mk_trap") + "::OnMobDead";
+	if (mobcount( 'map_eom$, .@label$ ) < 3) {
+		getunitdata 'boss_id, .@data;
+		monster 'map_eom$,.@data[UMOB_X]-4,.@data[UMOB_Y], "Frenzied Kasa", 3089,1, .@label$;	// MM_LOCO_KASA
+		monster 'map_eom$,.@data[UMOB_X],.@data[UMOB_Y]-4, "Frenzied Kasa", 3089,1, .@label$;
+		monster 'map_eom$,.@data[UMOB_X]+4,.@data[UMOB_Y], "Frenzied Kasa", 3089,1, .@label$;
+		monster 'map_eom$,.@data[UMOB_X],.@data[UMOB_Y]+4, "Frenzied Kasa", 3089,1, .@label$;
+	}
+	end;
+OnMobDead:
+	end;
+}
+
+1@eom,102,222,3	script	#morocc_god	3097,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#morocc_god");
+	initnpctimer;
+	end;
+OnTimer2000:
+	mapannounce 'map_eom$, "This is getting more interesting. *Snicker*", bc_map, 0xff0000;
+	end;
+OnTimer6000:
+	mapannounce 'map_eom$, "Hey, you don't think this is over already, do you?", bc_map, 0xff0000;
+	end;
+OnTimer10000:
+	disablenpc instance_npcname("#morocc_god");
+	end;
+OnTimer12000:
+	donpcevent instance_npcname("#despair_main") + "::OnStart";
+	end;
+OnTimer13000:
+	unittalk 'boss_id, "What are you waiting for?!";
+	end;
+OnTimer14000:
+	unitskilluseid 'boss_id, "NPC_WIDEWEB",1;
+	end;
+OnTimer16000:
+	mapannounce 'map_eom$, "I'll take your blood!", bc_map, 0xff0000;
+	end;
+OnTimer17000:
+	stopnpctimer;
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"NPC_WIDESUCK",1,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	donpcevent instance_npcname("#ma_combo") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#despair_main	-1,{
+	end;
+OnStart:
+	enablenpc instance_npcname("#despair_main");
+	monster 'map_eom$,101,194, "Despair God Morroc",3097,1, instance_npcname("#despair_main") + "::OnMobDead";	// MM_MOROCC_ADT
+	'boss_id = $@mobid[0];
+	end;
+OnMobDead:
+	disablenpc instance_npcname("#despair_main");
+	killmonster 'map_eom$, instance_npcname("#despair_main") + "::OnMobDead";
+	stopnpctimer instance_npcname("#morocc_god");
+	stopnpctimer instance_npcname("#ma_combo");
+	stopnpctimer instance_npcname("#despair_event_1");
+	stopnpctimer instance_npcname("#despair_event_2");
+	stopnpctimer instance_npcname("#despair_event_3");
+	stopnpctimer instance_npcname("#despair_event_4");
+	stopnpctimer instance_npcname("#despair_event_5");
+	mapannounce 'map_eom$, "D-don't think... th-this... is over.. You're... already... time...", bc_map, 0xff0000;
+	initnpctimer;
+
+	'step = 11;
+	donpcevent instance_npcname("#demon_god_variables") + "::OnVariableReset";
+	end;
+OnTimer2000:
+	stopnpctimer;
+	enablenpc instance_npcname("Nidhogg#eomnyd04");
+	end;
+
+OnTest_hp:
+	if ('boss_id && mobcount( 'map_eom$, instance_npcname("#despair_main") + "::OnMobDead" ) > 0)
+		setunitdata 'boss_id, UMOB_HP, 2000000;
+	end;
+}
+
+1@eom,4,8,0	script	#ma_combo	CLEAR_NPC,{
+	end;
+OnStart:
+	initnpctimer;
+	end;
+OnTimer10000:
+	donpcevent instance_npcname("#despair_event_" + rand(1,5)) + "::OnEvent";
+	stopnpctimer;
+	end;
+}
+
+1@eom,1,1,0	script	#despair_event_1	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "I'll burn you slowly and painfully.";
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id, "NPC_WIDEWEB",1;
+	end;
+OnTimer3000:
+	unitskilluseid 'boss_id, "NPC_FIRESTORM",3;
+	end;
+OnTimer5000:
+	stopnpctimer;
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_METEOR",11,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	donpcevent instance_npcname("#ma_combo") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#despair_event_2	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "Can you hear the rhapsody? It's the sound of your soul writhing and screaming in pain!";
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id, "NPC_WIDEWEB",1;
+	end;
+OnTimer3000:
+	getunitdata 'boss_id, .@data;
+	'bossx = .@data[UMOB_X];
+	'bossy = .@data[UMOB_Y];
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-2),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+2),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy+2),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy-2),-50;
+	end;
+OnTimer4000:
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-6),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+6),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy+6),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy-6),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-4),('bossy+4),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-4),('bossy-4),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+4),('bossy+4),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+4),('bossy-4),-50;
+	end;
+OnTimer5000:
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-10),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+10),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy+10),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy-10),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-8),('bossy+8),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-8),('bossy-8),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+8),('bossy+8),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+8),('bossy-8),-50;
+	end;
+OnTimer6000:
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-16),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+16),'bossy,-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy+16),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,'bossx,('bossy-16),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-12),('bossy+12),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx-12),('bossy-12),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+12),('bossy+12),-50;
+	unitskillusepos 'boss_id,"MG_THUNDERSTORM",20,('bossx+12),('bossy-12),-50;
+	end;
+OnTimer7000:
+	stopnpctimer;
+	donpcevent instance_npcname("#ma_combo") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#despair_event_3	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "This is the thunderbolt of death!";
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id, "NPC_WIDEWEB",1;
+	end;
+OnTimer4000:
+	unitskilluseid 'boss_id, "NPC_WIDEFREEZE",5;
+	end;
+OnTimer6000:
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_VERMILION",5,(.@data[UMOB_X]-7),.@data[UMOB_Y],-50;
+	unitskillusepos 'boss_id,"WZ_VERMILION",5,(.@data[UMOB_X]+7),.@data[UMOB_Y],-50;
+	unitskillusepos 'boss_id,"WZ_VERMILION",5,.@data[UMOB_X],(.@data[UMOB_Y]+7),-50;
+	unitskillusepos 'boss_id,"WZ_VERMILION",5,.@data[UMOB_X],(.@data[UMOB_Y]-7),-50;
+	end;
+OnTimer10000:
+	unittalk 'boss_id, "Burn and make beautiful flames!";
+	end;
+OnTimer12000:
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_VERMILION",21,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	end;
+OnTimer14000:
+	stopnpctimer;
+	donpcevent instance_npcname("#ma_combo") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#despair_event_4	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "I'll take your life.";
+	unitskilluseid 'boss_id, "NPC_FLAMECROSS",1;
+	end;
+OnTimer1000:
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"NPC_WIDESUCK",1,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	end;
+OnTimer5000:
+	stopnpctimer;
+	donpcevent instance_npcname("#ma_combo") + "::OnStart";
+	end;
+}
+
+1@eom,1,1,0	script	#despair_event_5	-1,{
+	end;
+OnEvent:
+	initnpctimer;
+	unittalk 'boss_id, "*Chuckle*";
+	end;
+OnTimer2000:
+	unitskilluseid 'boss_id, "NPC_FIRESTORM",3;
+	end;
+OnTimer4000:
+	getunitdata 'boss_id, .@data;
+	unitskillusepos 'boss_id,"WZ_FIREPILLAR",10,.@data[UMOB_X],.@data[UMOB_Y],-50;
+	end;
+OnTimer8000:
+	stopnpctimer;
+	donpcevent instance_npcname("#ma_combo") + "::OnStart";
+	end;
+}
+
+1@eom,103,194,3	script	Nidhogg#eomnyd04	4_F_NYDHOG,{
+	if ('step < 11)
+		end;
+	if (isbegin_quest(7597) == 0 && checkquest(7593,HUNTING) == 2) {
+		mes "[Nidhogg]";
+		mes "I don't know what to say.";
+		mes "We stopped the god-in-waiting.";
+		mes "We accomplished our goal.";
+		mes "But I'm still unnerved.";
+		cutin "ep14_nyd03.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "This world is created in the mind of Morroc's.";
+		mes "He'll live forever in this garden he couldn't finish.";
+		cutin "ep14_nyd02.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "He probably doesn't know his body is destroyed forever.";
+		mes "He was far too ambitious, even for him.";
+		mes "He wanted to create a new world and become its creator,";
+		next;
+		mes "[Nidhogg]";
+		mes "but he couldn't create anything on his own.";
+		mes "He abandoned his Demon body, just to become a mere facsimile of an existing god.";
+		cutin "ep14_nyd03.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "He took the shape of a man.";
+		mes "He wasn't creative enough to reinvent the concept of God.";
+		mes "He was a paradox.";
+		next;
+		mes "[Nidhogg]";
+		mes "Now we need to get out of this trap in time and end; to reality.";
+		mes "This world only exists in the Demon God's mind. The same day repeats forever.";
+		next;
+		mes "[Nidhogg]";
+		mes "Everyone who enters this world will be dragged into the same loop.";
+		mes "In that sense, he succeeded in making his own world.";
+		cutin "ep14_nyd02.bmp",2;
+		next;
+		mes "[Nidhogg]";
+		mes "Today's despair will repeat day after day.";
+		mes "Even though we know this, we'll come back to walk the same path again. I hope I'll be able to fight by you every time...";
+		cutin "ep14_nyd03.bmp",2;
+		next;
+		cutin "ep14_nyd04.bmp",2;
+		mes "[Nidhogg]";
+		mes "I've talked too much. The Commander must be waiting. Let me validate your feat, so you can report to him.";
+		mes "You did great today.";
+		if (isbegin_quest(7593) == 1) {
+			erasequest 7593;// Demon God Subjugation
+			setquest 7597;// Fall of the False God
+		}
+		if (checkquest(7601,HUNTING) == 1)
+			erasequest 7601;
+		if (isbegin_quest(7602) > 0)
+			erasequest 7602;// Temple of the Demon God Phase 1 Completed
+		if (isbegin_quest(7603) == 1)
+			erasequest 7603;
+		if (isbegin_quest(7604) > 0)
+			erasequest 7604;// Temple of the Demon God Phase 2 Completed
+		if (isbegin_quest(7596) == 1)
+			erasequest 7596;
+	}
+	else {	// todo, custom text
+		mes "[Nidhogg]";
+		mes "...It feels like things are not over yet,";
+		mes "This is very close to Morroc's spiritual world,";
+		mes "He should be here to keep thinking about the past!";
+		cutin "ep14_nyd03.bmp",2;
+	}
+	next;
+	select("Exit.");
+	mes "[Nidhogg]";
+	mes "Of course. You must be exhausted.";
+	mes "Let me send you to the other members of your Expedition, free of charge.";
+	close2;
+	warp "moro_vol",91,87;
+	end;
+}
+
+1@eom,5,1,0	script	Little Helper#eomtest	4_ENERGY_BLUE,{
+	mes "What?";
+	next;
+	if (callfunc("F_GM_NPC",1854,0) < 1) {
+		mes "Wrong.";
+		close;
+	}
+	mes "What Boss?";
+	next;
+	switch( select( "Brinaranea", "Muspellskoll", "Demigod", "Despair God" ) ) {
+	case 1:
+		mes "Brinaranea health was set to 2.000.000.";
+		donpcevent instance_npcname("Brinaranea#brinpc01") + "::OnTest_hp";
+		close;
+	case 2:
+		mes "Muspellskoll health was set to 2.000.000.";
+		donpcevent instance_npcname("#skollmaster") + "::OnTest_hp";
+		close;
+
+	case 3:
+		mes "Demigod health was set to 2.000.000.";
+		donpcevent instance_npcname("#despair_god_main") + "::OnTest_hp";
+		close;
+
+	case 4:
+		mes "Despair God health was set to 2.000.000.";
+		donpcevent instance_npcname("#despair_main") + "::OnTest_hp";
+		close;
+	}
+	end;
+}

+ 1 - 0
npc/re/scripts_athena.conf

@@ -87,6 +87,7 @@ npc: npc/re/instances/RoomOfConsciousness.txt
 npc: npc/re/instances/SarahAndFenrir.txt
 npc: npc/re/instances/SaraMemory.txt
 npc: npc/re/instances/SkyFortress.txt
+npc: npc/re/instances/TempleOfDemonGod.txt
 //npc: npc/re/instances/WaveMode.txt
 npc: npc/re/instances/WernerLaboratoryCentralRoom.txt
 npc: npc/re/instances/WolfchevLaboratory.txt

Diferenças do arquivo suprimidas por serem muito extensas
+ 843 - 843
sql-files/mob_db_re.sql


+ 23 - 0
src/map/battle.cpp

@@ -508,6 +508,21 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
 #else
 					damage += (int64)(damage * 50 / 100);
 #endif
+				if( tsc->data[SC_WIDEWEB] ) {
+#ifdef RENEWAL
+					ratio += 100;
+#else
+					damage *= 2;
+#endif
+					status_change_end(target,SC_WIDEWEB,INVALID_TIMER);
+				}
+				if( tsc->data[SC_BURNT] ) {
+#ifdef RENEWAL
+					ratio += 400;
+#else
+					damage += (int64)(damage * 400 / 100);
+#endif
+				}
 				break;
 			case ELE_HOLY:
 				if (tsc->data[SC_ORATIO])
@@ -1481,6 +1496,8 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 			damage <<= 1;
 		if (sc->data[SC_DARKCROW] && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT) {
 			int bonus = sc->data[SC_DARKCROW]->val2;
+		if( sc->data[SC_BURNT] && status_get_element(src) == ELE_FIRE )
+			damage += damage * 666 / 100; //Custom value
 
 			if (status_get_class_(bl) == CLASS_BOSS)
 				bonus /= 2;
@@ -6769,6 +6786,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						i = cap_value(i, 1, 4);
 						skillratio = 2500 + ((skill_lv - i + 1) * 500);
 						break;
+					case NPC_FIRESTORM:
+						skillratio += 200;
+						break;
 					case NPC_HELLBURNING:
 						skillratio += 900;
 						break;
@@ -7202,6 +7222,9 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 			else
 				md.damage = 0;
 			break;
+		case NPC_WIDESUCK:
+			md.damage = tstatus->max_hp * 15 / 100;
+			break;
 		case SU_SV_ROOTTWIST_ATK:
 			md.damage = 100;
 			break;

+ 3 - 0
src/map/script_constants.hpp

@@ -1632,6 +1632,9 @@
 	export_constant(SC_PACKING_ENVELOPE9);
 	export_constant(SC_PACKING_ENVELOPE10);
 	export_constant(SC_SOULATTACK);
+	export_constant(SC_WIDEWEB);
+	export_constant(SC_BURNT);
+	export_constant(SC_CHILL);
 #ifdef RENEWAL
 	export_constant(SC_EXTREMITYFIST2);
 #endif

+ 26 - 0
src/map/skill.cpp

@@ -1684,6 +1684,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 	case NPC_CRITICALWOUND:
 		sc_start(src,bl,SC_CRITICALWOUND,100,skill_lv,skill_get_time2(skill_id,skill_lv));
 		break;
+	case NPC_FIRESTORM:
+		sc_start(src,bl,SC_BURNT,100,skill_lv,skill_get_time(skill_id,skill_lv));
+		break;
 	case RK_DRAGONBREATH:
 		sc_start4(src,bl,SC_BURNING,15,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv));
 		break;
@@ -5412,6 +5415,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case WZ_EARTHSPIKE:
 	case AL_HEAL:
 	case NPC_DARKTHUNDER:
+	case NPC_FIRESTORM:
 	case PR_ASPERSIO:
 	case MG_FROSTDIVER:
 	case WZ_SIGHTBLASTER:
@@ -9617,6 +9621,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 	case NPC_WIDECOLD:
 	case NPC_WIDE_DEEP_SLEEP:
 	case NPC_WIDESIREN:
+	case NPC_WIDEWEB:
 		if (flag&1){
 			switch ( type ) {
 			case SC_BURNING:
@@ -9650,6 +9655,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 				skill_castend_nodamage_id);
 		}
 		break;
+	case NPC_FIRESTORM: {
+		int sflag = flag;
+
+		if( skill_lv > 1 )
+			sflag |= 4;
+		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
+		map_foreachinshootrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),splash_target(src),src,
+			skill_id,skill_lv,tick,sflag|BCT_ENEMY|SD_ANIMATION|1,skill_castend_damage_id);
+		}
+		break;
 	case ALL_PARTYFLEE:
 		if( sd  && !(flag&1) ) {
 			if( !sd->status.party_id ) {
@@ -12297,6 +12312,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 	case NPC_EVILLAND:
 	case NPC_VENOMFOG:
 	case NPC_COMET:
+	case NPC_WIDESUCK:
 	case NPC_ICEMINE:
 	case NPC_FLAMECROSS:
 	case NPC_HELLBURNING:
@@ -14233,6 +14249,16 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t
 					if (map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR))
 						break; // Nothing should happen if the target is on Land Protector
 					// Fall through
+				case NPC_WIDESUCK: {
+						int heal = (int)skill_attack(skill_get_type(sg->skill_id),ss,&unit->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
+
+						if (heal > 0) {
+							clif_skill_nodamage(ss,bl,sg->skill_id,sg->skill_lv,1);
+							clif_skill_nodamage(nullptr,ss,AL_HEAL,heal,1);
+							status_heal(ss,heal,0,0);
+						}
+					}
+					break;
 				default:
 					skill_attack(skill_get_type(sg->skill_id),ss,&unit->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
 			}

+ 31 - 1
src/map/status.cpp

@@ -1045,6 +1045,8 @@ void initChangeTables(void)
 	add_sc( NPC_FIREWALK		, SC_PROPERTYWALK		);
 	add_sc( NPC_CLOUD_KILL   	, SC_POISON		);
 	set_sc( NPC_HALLUCINATIONWALK	, SC_NPC_HALLUCINATIONWALK	, EFST_NPC_HALLUCINATIONWALK	, SCB_FLEE );
+	set_sc( NPC_WIDEWEB           , SC_WIDEWEB           , EFST_WIDEWEB               , SCB_FLEE );
+	set_sc_with_vfx( NPC_FIRESTORM, SC_BURNT             , EFST_BURNT                 , SCB_NONE );
 
 	set_sc( CASH_BLESSING		, SC_BLESSING		, EFST_BLESSING		, SCB_STR|SCB_INT|SCB_DEX );
 	set_sc( CASH_INCAGI		, SC_INCREASEAGI	, EFST_INC_AGI, SCB_AGI|SCB_SPEED );
@@ -1662,6 +1664,8 @@ void initChangeTables(void)
 	StatusIconChangeTable[SC_DORAM_BUF_02] = EFST_DORAM_BUF_02;
 	StatusIconChangeTable[SC_SOULATTACK] = EFST_SOULATTACK;
 
+	StatusIconChangeTable[SC_CHILL] = EFST_CHILL;
+
 	// Item Reuse Limits
 	StatusIconChangeTable[SC_REUSE_REFRESH] = EFST_REUSE_REFRESH;
 	StatusIconChangeTable[SC_REUSE_LIMIT_A] = EFST_REUSE_LIMIT_A;
@@ -2025,6 +2029,7 @@ void initChangeTables(void)
 #ifndef RENEWAL
 	StatusChangeStateTable[SC_BASILICA]				|= SCS_NOMOVE|SCS_NOMOVECOND;
 #endif
+	StatusChangeStateTable[SC_WIDEWEB]				|= SCS_NOMOVE;
 	StatusChangeStateTable[SC_STOP]					|= SCS_NOMOVE;
 	StatusChangeStateTable[SC_CLOSECONFINE]			|= SCS_NOMOVE;
 	StatusChangeStateTable[SC_CLOSECONFINE2]		|= SCS_NOMOVE;
@@ -7338,7 +7343,7 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
 	// Rate value
 	if(sc->data[SC_INCFLEERATE])
 		flee += flee * sc->data[SC_INCFLEERATE]->val1/100;
-	if(sc->data[SC_SPIDERWEB])
+	if(sc->data[SC_SPIDERWEB] || sc->data[SC_WIDEWEB])
 		flee -= flee * 50/100;
 	if(sc->data[SC_BERSERK])
 		flee -= flee * 50/100;
@@ -9968,6 +9973,11 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		if (sc->data[type])
 			return 0;
 
+	case SC_BURNT:
+		if( sc->data[SC_CHILL] )
+			return 0;
+		break;
+
 	case SC_WEDDING:
 	case SC_XMAS:
 	case SC_SUMMER:
@@ -10456,6 +10466,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		if (sd)
 			pc_bonus_script_clear(sd, BSF_REM_ON_MADOGEAR);
 		break;
+	case SC_CHILL:
+		status_change_end(bl,SC_BURNT,INVALID_TIMER);
+		break;
 	}
 
 	// Check for overlapping fails
@@ -12330,6 +12343,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			val3 = val1 * 25; // -movespeed TODO: Figure out movespeed rate
 			break;
 		case SC_C_MARKER:
+		case SC_BURNT:
 			// val1 = skill_lv
 			// val2 = src_id
 			val3 = 10; // -10 flee
@@ -12783,6 +12797,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_ELECTRICSHOCKER:
 		case SC_MAGNETICFIELD:
 		case SC_NETHERWORLD:
+		case SC_WIDEWEB:
 			if (!unit_blown_immune(bl,0x1))
 				unit_stop_walking(bl,1);
 			break;
@@ -15221,6 +15236,21 @@ TIMER_FUNC(status_change_timer){
 			return 0;
 		}
 		break;
+	case SC_BURNT:
+		if( --(sce->val4) >= 0 ) {
+			int damage = 2000;
+
+			if( damage >= status->hp )
+				damage = status->hp - 1;
+			map_freeblock_lock();
+			status_zap(bl,damage,0);
+			if( sc->data[type] ) {
+				sc_timer_next(1000 + tick);
+			}
+			map_freeblock_unlock();
+			return 0;
+		}
+		break;
 	}
 
 	// If status has an interval and there is at least 100ms remaining time, wait for next interval

+ 4 - 0
src/map/status.hpp

@@ -1023,6 +1023,10 @@ enum sc_type : int16 {
 
 	SC_SOULATTACK,
 
+	SC_WIDEWEB,
+	SC_BURNT,
+	SC_CHILL,
+
 #ifdef RENEWAL
 	SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
 #endif

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff