Explorar o código

Merge branch 'master' into feature/store_taxes

Aleos %!s(int64=6) %!d(string=hai) anos
pai
achega
faafa5661e
Modificáronse 100 ficheiros con 10874 adicións e 1795 borrados
  1. 2 1
      .gitattributes
  2. 2 0
      .gitignore
  3. 2 2
      .travis.yml
  4. 1 0
      AUTHORS
  5. 12 0
      conf/battle/feature.conf
  6. 6 0
      conf/battle/gm.conf
  7. 10 7
      conf/battle/pet.conf
  8. 1 1
      conf/groups.conf
  9. 5 1
      conf/import-tmpl/inter_server.yml
  10. 12 4
      conf/inter_server.yml
  11. 5 3
      conf/msg_conf/map_msg.conf
  12. 1 2
      conf/msg_conf/map_msg_chn.conf
  13. 1 2
      conf/msg_conf/map_msg_frn.conf
  14. 1 2
      conf/msg_conf/map_msg_idn.conf
  15. 1 2
      conf/msg_conf/map_msg_por.conf
  16. 1 2
      conf/msg_conf/map_msg_rus.conf
  17. 1 2
      conf/msg_conf/map_msg_spn.conf
  18. 1 2
      conf/msg_conf/map_msg_tha.conf
  19. 90 0
      db/achievement_db.yml
  20. 11 0
      db/attendance.yml
  21. 0 30
      db/guild_skill_tree.txt
  22. 44 0
      db/guild_skill_tree.yml
  23. 3 1
      db/import-tmpl/achievement_db.yml
  24. 1 1
      db/import-tmpl/attendance.yml
  25. 0 13
      db/import-tmpl/guild_skill_tree.txt
  26. 36 0
      db/import-tmpl/guild_skill_tree.yml
  27. 0 60
      db/import-tmpl/pet_db.txt
  28. 486 0
      db/import-tmpl/pet_db.yml
  29. 63 0
      db/pet_db.yml
  30. 358 115
      db/pre-re/achievement_db.yml
  31. 1 1
      db/pre-re/attendance.yml
  32. 123 0
      db/pre-re/guild_skill_tree.yml
  33. 1 1
      db/pre-re/item_db.txt
  34. 4 0
      db/pre-re/item_misc.txt
  35. 2 2
      db/pre-re/job_db1.txt
  36. 0 104
      db/pre-re/pet_db.txt
  37. 867 0
      db/pre-re/pet_db.yml
  38. 11 18
      db/pre-re/skill_cast_db.txt
  39. 4 3
      db/pre-re/skill_db.txt
  40. 1 0
      db/pre-re/skill_unit_db.txt
  41. 392 149
      db/re/achievement_db.yml
  42. 59 59
      db/re/attendance.yml
  43. 123 0
      db/re/guild_skill_tree.yml
  44. 1 1
      db/re/instance_db.txt
  45. 3 3
      db/re/item_combo_db.txt
  46. 86 28
      db/re/item_db.txt
  47. 1 0
      db/re/item_delay.txt
  48. 4 0
      db/re/item_misc.txt
  49. 1 1
      db/re/item_trade.txt
  50. 2 2
      db/re/job_db1.txt
  51. 24 22
      db/re/mob_db.txt
  52. 29 0
      db/re/mob_skill_db.txt
  53. 0 110
      db/re/pet_db.txt
  54. 1733 0
      db/re/pet_db.yml
  55. 33 33
      db/re/quest_db.txt
  56. 12 18
      db/re/skill_cast_db.txt
  57. 4 3
      db/re/skill_db.txt
  58. 1 0
      db/re/skill_unit_db.txt
  59. 3 2
      doc/achievements.txt
  60. 1 1
      doc/atcommands.txt
  61. 6 4
      doc/item_bonus.txt
  62. 252 157
      doc/script_commands.txt
  63. 3 3
      doc/status_change.txt
  64. 5 5
      npc/battleground/kvm/kvm_item_pay.txt
  65. 9 13
      npc/custom/battleground/bg_emp.txt
  66. 2 2
      npc/custom/battleground/unofficial/bg_kvm01.txt
  67. 2 2
      npc/custom/battleground/unofficial/bg_kvm02.txt
  68. 2 2
      npc/custom/battleground/unofficial/bg_kvm03.txt
  69. 1 1
      npc/custom/official/GeffenMagicTournament.txt
  70. 239 185
      npc/custom/quests/questboard.txt
  71. 10 3
      npc/kafras/cool_event_corp.txt
  72. 3 0
      npc/kafras/functions_kafras.txt
  73. 0 2
      npc/merchants/shops.txt
  74. 10 0
      npc/pre-re/merchants/shops.txt
  75. 3 3
      npc/quests/quests_ein.txt
  76. 1 1
      npc/quests/quests_niflheim.txt
  77. 28 2
      npc/re/custom/lasagna/lasagna_npcs.txt
  78. 3 3
      npc/re/guides/guides_comodo.txt
  79. 3 3
      npc/re/instances/AirshipAssault.txt
  80. 13 7
      npc/re/instances/DevilTower.txt
  81. 5 6
      npc/re/instances/HorrorToyFactory.txt
  82. 13 13
      npc/re/instances/LastRoom.txt
  83. 216 217
      npc/re/instances/MorseCave.txt
  84. 4610 0
      npc/re/instances/NightmarishJitterbug.txt
  85. 37 37
      npc/re/instances/SaraMemory.txt
  86. 18 9
      npc/re/instances/SarahAndFenrir.txt
  87. 13 13
      npc/re/kafras/kafras.txt
  88. 37 37
      npc/re/merchants/OldGlastHeim_merchants.txt
  89. 1 1
      npc/re/merchants/blessed_refiner.txt
  90. 5 5
      npc/re/merchants/moro_cav_exchange.txt
  91. 0 2
      npc/re/merchants/nightmare_biolab.txt
  92. 7 1
      npc/re/merchants/shops.txt
  93. 4 4
      npc/re/quests/eden/eden_common.txt
  94. 423 76
      npc/re/quests/eden/eden_iro.txt
  95. 141 140
      npc/re/quests/quests_15_1.txt
  96. 0 2
      npc/re/quests/quests_15_2.txt
  97. 46 11
      npc/re/quests/quests_16_1.txt
  98. 1 1
      npc/re/quests/quests_malaya.txt
  99. 18 8
      npc/re/quests/quests_rockridge.txt
  100. 1 0
      npc/re/scripts_athena.conf

+ 2 - 1
.gitattributes

@@ -1,5 +1,6 @@
 *        text=auto
-*.c      diff=cpp
+*.cpp diff=cpp
+*.yml diff
 *.sln    merge=union
 *.vcproj merge=union
 *.vcxproj merge=union

+ 2 - 0
.gitignore

@@ -29,6 +29,7 @@ Thumbs.db
 *.a
 *.vcxproj.user
 /char-server
+/csv2yaml
 /config.log
 /config.status
 /core
@@ -112,6 +113,7 @@ Thumbs.db
 
 # bat tools
 /charserv.bat
+/csv2yaml.bat
 /logserv.bat
 /mapcache.bat
 /mapserv.bat

+ 2 - 2
.travis.yml

@@ -137,7 +137,7 @@ matrix:
 ##         MacOS default MySQL configuration does not like our card seller(only full group by)
 #        - ./tools/ci/npc.sh
 #        - make clean
-#        - make server
+#        - make all
 #        - ./login-server --run-once
 #        - ./char-server --run-once
 #        - ./map-server --run-once
@@ -181,7 +181,7 @@ script:
   - ./configure $CONFIGURE_FLAGS || travis_terminate 1
   - ./tools/ci/npc.sh
   - make clean || travis_terminate 1
-  - make server || travis_terminate 1
+  - make all || travis_terminate 1
   - ./login-server --run-once
   - ./char-server --run-once
   - ./map-server --run-once

+ 1 - 0
AUTHORS

@@ -227,6 +227,7 @@ Sirius_White
 sk
 SketchyPhoenix
 Skotlex
+SnakeDrak
 spamrat
 SPDFMember
 spira

+ 12 - 0
conf/battle/feature.conf

@@ -71,6 +71,18 @@ feature.achievement: on
 // Requires: 2017-02-08bRagexeRE or later
 feature.equipswitch: on
 
+// Pet evolution (Note 1)
+// Requires: 2014-10-08aRagexe or later
+feature.petevolution: on
+
+// Automatic Pet Feeding (Note 1)
+// Requires: 2014-10-08aRagexe or later
+feature.petautofeed: on
+
+// At which hunger rate should pet autofeeding trigger? (Note 2)
+// Default: 89
+feature.pet_autofeed_rate: 89
+
 // Homunculues Autofeeding (Note 1)
 // Requires: 2017-09-20bRagexeRE or later
 feature.homunculus_autofeed: on

+ 6 - 0
conf/battle/gm.conf

@@ -34,3 +34,9 @@ atcommand_mobinfo_type: 1
 // This option is for @baselevelup and @joblevelup
 // Default: no
 atcommand_levelup_events: no
+
+// Disable atcommands while a player is attached to a npc? (Note 1)
+// This can be changed by script commands 'enable_command' and 'disable_command'.
+// Anyone with the 'command_enable' permission in the 'conf/group.conf' can bypass this.
+// Default: yes
+atcommand_disable_npc: yes

+ 10 - 7
conf/battle/pet.conf

@@ -21,10 +21,6 @@ pet_friendly_rate: 100
 // The rate at which a pet will become hungry. (Note 2)
 pet_hungry_delay_rate: 100
 
-// If your pet is hungry by how much will the friendlyness decrease by. (Default is 5)
-// Note: The friendlyness is 0-1000 total, at 0 the pet runs away.
-pet_hungry_friendly_decrease: 5
-
 // Does the pet need its equipment before it does its skill? (Note 1)
 pet_equip_required: yes
 
@@ -39,9 +35,6 @@ pet_damage_support: no
 // At max (1000) support rate is 150%.
 pet_support_min_friendly: 900
 
-// Same as above, but this is to use the pet_script field with official pet abilities.
-pet_equip_min_friendly: 900
-
 // Whether or not the pet's will use skills. (Note 1)
 // Note: Offensive pet skills need at least pet_attack_support or 
 // pet_damage_support to work (they trigger while the pet is attacking).
@@ -81,3 +74,13 @@ pet_ignore_infinite_def: yes
 
 // Whether or not the pet will continue to attack when the master is dead. (Note 1)
 pet_master_dead: no
+
+// Send auto-feed notice even if the client setting is OFF (Note 1) 
+// Official: yes
+pet_autofeed_always: yes
+
+// Pet walk speed.
+// 1: Master's walk speed (official)
+// 2: DEFAULT_WALK_SPEED value
+// 3: Mob database walk speed
+pet_walk_speed: 1

+ 1 - 1
conf/groups.conf

@@ -93,7 +93,6 @@ groups: (
 		trade or party */
 		can_trade: true
 		can_party: true
-		command_enable: true
 		attendance: true
 	}
 },
@@ -284,6 +283,7 @@ groups: (
 	permissions: {
 		can_trade: true
 		can_party: true
+		command_enable: true
 		all_skill: false
 		all_equipment: false
 		skill_unconditional: false

+ 5 - 1
conf/import-tmpl/inter_server.yml

@@ -10,7 +10,11 @@
 #	  Table: "<storage_table>"  // (string) Name of table where storage is saved. The table stucture is the same as the default storage table.
 #	  Max: <max_amount>         // (int) *optional* Maximum number of items in storage. MAX_STORAGE will be used if no value is defined.
 ###############################################################################################################################################
-#Storages:
+Header:
+  Type: INTER_SERVER_DB
+  Version: 1
+
+#Body:
 #   - ID: 1
 #     Name: "VIP Storage"
 #     Table: "vip_storage"

+ 12 - 4
conf/inter_server.yml

@@ -28,7 +28,15 @@
 #	  Table: "<storage_table>"  // (string) Name of table where storage is saved. The table stucture is the same as the default storage table.
 #	  Max: <max_amount>         // (int) *optional* Maximum number of items in storage. MAX_STORAGE will be used if no value is defined.
 
-Storages:
-    - ID: 0
-      Name: "Storage"
-      Table: "storage"
+Header:
+  Type: INTER_SERVER_DB
+  Version: 1
+
+Body:
+  - ID: 0
+    Name: "Storage"
+    Table: "storage"
+
+Footer:
+  Imports:
+    - Path: conf/import/inter_server.yml

+ 5 - 3
conf/msg_conf/map_msg.conf

@@ -458,8 +458,7 @@
 // Homunculus messages
 450: You already have a homunculus
 
-// Return pet to egg message
-451: You can't return your pet because your inventory is full.
+//451 free
 
 // Message System
 460: Please enter a valid language (usage: @langtype <language>).
@@ -863,7 +862,10 @@
 
 793: Usage @camerainfo range rotation latitude
 
-//794-899 free
+// pcblock command
+794: This action is currently blocked.
+
+//795-899 free
 
 //------------------------------------
 // More atcommands message

+ 1 - 2
conf/msg_conf/map_msg_chn.conf

@@ -441,8 +441,7 @@
 // Homunculus messages
 450: 你已經擁有一個人工生命體了
 
-// Return pet to egg message
-451: 你無法收回寵物,因為你身上沒有空間了
+//451 free
 
 // Message System
 460: 請輸入合法的語言 (usage: @langtype <language>).

+ 1 - 2
conf/msg_conf/map_msg_frn.conf

@@ -449,8 +449,7 @@
 // Homunculus messages
 450: Vous possédez déjà un homunculus
 
-// Return pet to egg message
-451: Vous ne pouvez pas remettre votre pet dans son oeuf car votre inventaire est plein.
+//451 free
 
 // Message System
 460: Entrez une langue (usage: @langtype <langue>).

+ 1 - 2
conf/msg_conf/map_msg_idn.conf

@@ -459,8 +459,7 @@
 // Pesan-pesan untuk Homunculus
 450: Kamu sudah memiliki homunculus
 
-// Pesan tentang mengembalikan peliharaan ke telur
-451: Kamu tidak dapat mengembalikan peliharaan kamu karena inventory penuh.
+//451 free
 
 // Sistem Pesan
 460: Harap masukkan tipe bahasa yang valid. (Penggunaan: @langtype <bahasa>).

+ 1 - 2
conf/msg_conf/map_msg_por.conf

@@ -468,8 +468,7 @@
 // Mensagens de homunculus
 450: Você já possui um homunculus
 
-// Mensagem de retorno do pet ao ovo
-451: Você não pode retornar o seu bichinho de estimação para o ovo pois o seu inventário está lotado.
+//451 free
 
 // Sistema de Mensagens
 460: Digite um idioma válido (uso: @langtype <idioma>).

+ 1 - 2
conf/msg_conf/map_msg_rus.conf

@@ -449,8 +449,7 @@
 // Сообщения команды @makehomun
 450: У вас уже есть гомункулус
 
-// Возвращение питомца в яйцо
-451: Вы не можете вернуть питомца в яйцо, потому что ваш инвентарь забит.
+//451 free
 
 // @langtype
 460: Введите существующий язык (Используйте: @langtype <язык>).

+ 1 - 2
conf/msg_conf/map_msg_spn.conf

@@ -458,8 +458,7 @@
 // Mensajes de homúnculos
 450: Ya tienes un homúnculo.
 
-// Mensaje al devolver la mascota al huevo
-451: No puedes devolver tu mascota al huevo porque tu inventario está lleno.
+//451 free
 
 // Sistema de mensajería
 460: Introduce un idioma válido (instrucciones: @langtype <idioma>)

+ 1 - 2
conf/msg_conf/map_msg_tha.conf

@@ -447,8 +447,7 @@
 // Homunculus messages
 450: ¤Ø³ÁÕ Homunculus ÍÂÙèáÅéÇ.
 
-// Return pet to egg message
-451: ¤Ø³äÁèÊÒÁÒöà¡çºÊѵÇìàÅÕé§ä´éà¾ÃÒЪèͧà¡çº¢Í§ã¹µÑÇÅФÃàµçÁ.
+//451 free
 
 // Message System
 460: â»Ã´àÅ×Í¡ÀÒÉÒ·Õèµéͧ¡Òà (ÇÔ¸Õãªé: @langtype <ÀÒÉÒ>).

+ 90 - 0
db/achievement_db.yml

@@ -0,0 +1,90 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2017 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Renewal Achievement Database
+###########################################################################
+#
+# Achievement Settings
+#
+###########################################################################
+# ID - Unique achievement ID.
+###########################################################################
+# Group - Achievement group type. Each achievement type calls a specific
+# objective check.
+# Valid groups:
+#  AG_ADD_FRIEND
+#  AG_ADVENTURE
+#  AG_BABY
+#  AG_BATTLE
+#  AG_CHATTING
+#  AG_CHATTING_COUNT
+#  AG_CHATTING_CREATE
+#  AG_CHATTING_DYING
+#  AG_EAT
+#  AG_GET_ITEM
+#  AG_GET_ZENY
+#  AG_GOAL_ACHIEVE
+#  AG_GOAL_LEVEL
+#  AG_GOAL_STATUS
+#  AG_HEAR
+#  AG_JOB_CHANGE
+#  AG_MARRY
+#  AG_PARTY
+#  AG_ENCHANT_FAIL
+#  AG_ENCHANT_SUCCESS
+#  AG_SEE
+#  AG_SPEND_ZENY
+#  AG_TAMING
+###########################################################################
+# Name - Achievement name. Used when sending rewards through RODEX.
+###########################################################################
+# Target - A list of monster ID and count values that the achievement
+# requires. The target count can also be used for achievements that keep
+# a counter while not being related to monster kills.
+# Capped at MAX_ACHIEVEMENT_OBJECTIVES.
+###########################################################################
+# Condition - A conditional statement that must be met for the achievement
+# to be considered complete.
+###########################################################################
+# Map - A map name that is used for the AG_CHATTING type which increments
+# the counter based on the player's map.
+###########################################################################
+# Dependent: - A list of achievement IDs that need to be completed before
+# this achievement is considered complete.
+###########################################################################
+# Reward - A list of rewards that are given on completion. All fields are
+# optional.
+#   ItemID: Item ID
+#   Amount:  Amount of Item ID (default 1)
+#   Script: Bonus Script
+#   TitleID: Title ID
+###########################################################################
+# Score - Achievement points that are given on completion.
+###########################################################################
+
+Header:
+  Type: ACHIEVEMENT_DB
+  Version: 1
+
+Footer:
+  Imports:
+  - Path: db/pre-re/achievement_db.yml
+    Mode: Prerenewal
+  - Path: db/re/achievement_db.yml
+    Mode: Renewal
+  - Path: db/import/achievement_db.yml

+ 11 - 0
db/attendance.yml

@@ -0,0 +1,11 @@
+Header:
+  Type: ATTENDANCE_DB
+  Version: 1
+  
+Footer:
+  Imports:
+  - Path: db/pre-re/attendance.yml
+    Mode: Prerenewal
+  - Path: db/re/attendance.yml
+    Mode: Renewal
+  - Path: db/import/attendance.yml

+ 0 - 30
db/guild_skill_tree.txt

@@ -1,30 +0,0 @@
-// Guild Skill Tree Database
-//
-// Structure of Database:
-// SkillID,MaxLv,Prerequisite SkillID1,Prerequisite SkillLv1,PrereqSkillID2,PrereqSkillLv2,PrereqSkillID3,PrereqSkillLv3,PrereqSkillID4,PrereqSkillLv4,PrereqSkillID5,PrereqSkillLv5	//GUILD SKILLNAME#Skill Name#
-//
-// 01. SkillID                  Skill ID of the guild skill.
-// 02. MaxLv                    Maximum level of the guild skill.
-// 03. Prerequisite SkillID     Guild skill required for the skill to become available.
-// 04. Prerequisite SkillLv     Level of the required guild skill.
-// ...
-//
-// NOTE: MAX_GUILD_SKILL_REQUIRE (typically 5) ID/Lv pairs must be specified.
-
-
-10000,1,0,0,0,0,0,0,0,0,0,0	//GD_APPROVAL#Official Guild Approval#
-10001,1,10000,1,0,0,0,0,0,0,0,0	//GD_KAFRACONTRACT#Contract with Kafra#
-10002,1,10000,1,0,0,0,0,0,0,0,0	//GD_GUARDRESEARCH#Guardian Research#
-10003,3,0,0,0,0,0,0,0,0,0,0	//GD_GUARDUP#Strengthen Guardians#
-10004,10,0,0,0,0,0,0,0,0,0,0	//GD_EXTENSION#Guild Extension#
-10005,0,0,0,0,0,0,0,0,0,0,0	//GD_GLORYGUILD#Guilds Glory#
-10006,5,0,0,0,0,0,0,0,0,0,0	//GD_LEADERSHIP#Great Leadership#
-10007,5,0,0,0,0,0,0,0,0,0,0	//GD_GLORYWOUNDS#Glorious Wounds#
-10008,5,10007,1,0,0,0,0,0,0,0,0	//GD_SOULCOLD#Cold Heart#
-10009,5,10006,1,0,0,0,0,0,0,0,0	//GD_HAWKEYES#Sharp Gaze#
-10010,1,10000,1,10004,2,0,0,0,0,0,0	//GD_BATTLEORDER#Battle Command#
-10011,3,10000,1,10004,5,10010,1,0,0,0,0	//GD_REGENERATION#Regeneration#
-10012,1,10011,1,0,0,0,0,0,0,0,0	//GD_RESTORE#Restoration#
-10013,1,10000,1,10002,1,10004,5,10010,1,10011,1	//GD_EMERGENCYCALL#Urgent Call#
-10014,1,0,0,0,0,0,0,0,0,0,0	//GD_DEVELOPMENT#Permanent Development#
-10016,5,0,0,0,0,0,0,0,0,0,0	//GD_GUILD_STORAGE#Guild Storage Expansion#

+ 44 - 0
db/guild_skill_tree.yml

@@ -0,0 +1,44 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################
+
+Header:
+  Type: GUILD_SKILL_TREE_DB
+  Version: 1
+
+Footer:
+  Imports:
+  - Path: db/pre-re/guild_skill_tree.yml
+    Mode: Prerenewal
+  - Path: db/re/guild_skill_tree.yml
+    Mode: Renewal
+  - Path: db/import/guild_skill_tree.yml

+ 3 - 1
db/import-tmpl/achievement_db.yml

@@ -77,4 +77,6 @@
 # Score - Achievement points that are given on completion.
 ###########################################################################
 
-Achievements:
+Header:
+  Type: ACHIEVEMENT_DB
+  Version: 1

+ 1 - 1
db/import-tmpl/attendance.yml

@@ -1,3 +1,3 @@
 Header:
-  Type: ATTENDANCE_CONF
+  Type: ATTENDANCE_DB
   Version: 1

+ 0 - 13
db/import-tmpl/guild_skill_tree.txt

@@ -1,13 +0,0 @@
-// Guild Skill Tree Database
-//
-// Structure of Database:
-// SkillID,MaxLv,Prerequisite SkillID1,Prerequisite SkillLv1,PrereqSkillID2,PrereqSkillLv2,PrereqSkillID3,PrereqSkillLv3,PrereqSkillID4,PrereqSkillLv4,PrereqSkillID5,PrereqSkillLv5	//GUILD SKILLNAME#Skill Name#
-//
-// 01. SkillID                  Skill ID of the guild skill.
-// 02. MaxLv                    Maximum level of the guild skill.
-// 03. Prerequisite SkillID     Guild skill required for the skill to become available.
-// 04. Prerequisite SkillLv     Level of the required guild skill.
-// ...
-//
-// NOTE: MAX_GUILD_SKILL_REQUIRE (typically 5) ID/Lv pairs must be specified.
-

+ 36 - 0
db/import-tmpl/guild_skill_tree.yml

@@ -0,0 +1,36 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Custom Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################
+
+Header:
+  Type: GUILD_SKILL_TREE_DB
+  Version: 1

+ 0 - 60
db/import-tmpl/pet_db.txt

@@ -1,60 +0,0 @@
-// Pet Additional Database
-//
-// Structure of Database:
-// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
-//
-// 01. MobID			Monster ID of the pet.
-// 02. Name			Name of the monster as defined in the database.
-// 03. JName			The display name of the monster when hatched.
-// 04. LureID			Pet Tame Item ID.
-// 05. EggID			Pet Egg ID.
-// 06. EquipID			Pet Accessory ID.
-// 07. FoodID			Pet Food ID.
-// 08. Fullness			The amount Hunger is decreased every [HungryDelay] seconds.
-// 09. HungryDelay		The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
-// 10. R_Hungry			Amount of Intimacy that is increased when fed.
-// 11. R_Full			Amount of Intimacy that is decreased when over-fed.
-// 12. Intimate			Amount of Intimacy the pet starts with.
-// 13. Die			Amount of Intimacy that is decreased when the pet owner dies.
-// 14. Capture			Capture succes rate (10000 = 100%)
-// 15. Speed			Pet's walk speed. (Defaul: 150)
-// 16. S_Performance		Special Performance. (Yes = 1, No = 0)
-// 17. talk_convert_class	Disables pet talk (instead of talking they emote  with /!.)
-// 18. attack_rate			Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
-// 19. defence_attack_rate	Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
-// 20. change_target_rate	Rate of which the pet will change its attack target.
-// 21. pet_script		Script to execute when the pet is hatched.
-// 22. loyal_script		Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
-//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
-
-//In theory you can use any valid script, but it is run only once upon pet
-//loading, so it is recommended you use the specific pet scripts:
-
-//petskillattack skillid, skilllv, rate, bonusrate
-//Skill attack that triggers while the pet is attacking. Rate is the base
-//chance of execution per attack. Bonusrate is an additional success rate when
-//intimacy reaches max.
-
-//petskillattack2 skillid, damage, hits, rate, bonusrate
-//Same as petskillattack, but the damage and number of hits is fixed
-//the damage specified is total, not per hit.
-
-//petskillsupport skillid, skilllv, delay, hp%, sp%
-//Casts a support skill when the health levels are below the specified hp% and
-//sp%. Delay is the minimum time in seconds before the skill can be cast again
-
-//petheal amount, delay, hp%, sp%
-//Similar to petskillsupport, but the skill is fixed to heal (28) and the
-//heal-amount is fixed to the value given.
-
-//petrecovery type, delay: Cures the "type" status effect after "delay" seconds
-
-//petskillbonus type, value, duration, delay
-//Gives bonus stats. Type is the stat to increase (bStr, bLuk), value is the
-//amount by which it is increased, duration signals how long the bonus lasts
-//delay is the time elapsed after the bonus ends and before it starts again.
-
-//A single pet can have petloot, petskillbonus, petskillattack (or
-//petskillattack2) and petskillsupport (or petheal) at the same time,
-//but only one of each.
-

+ 486 - 0
db/import-tmpl/pet_db.yml

@@ -0,0 +1,486 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Custom Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################
+
+Header:
+  Type: PET_DB
+  Version: 1
+
+#Body:
+#  - Mob: PORING
+#    AttackRate: 350
+#    RetaliateRate: 400
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petloot 10;
+#  - Mob: DROPS
+#    AttackRate: 300
+#    RetaliateRate: 400
+#    ChangeTargetRate: 500
+#    SupportScript: >
+#      petloot 10;
+#  - Mob: POPORING
+#    AttackRate: 300
+#    RetaliateRate: 500
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petloot 15;
+#  - Mob: LUNATIC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 1000
+#    SupportScript: >
+#      petskillbonus bLuk,3,10,50;
+#  - Mob: PICKY
+#    AttackRate: 500
+#    RetaliateRate: 600
+#    ChangeTargetRate: 50
+#    SupportScript: >
+#      petskillbonus bStr,3,10,50;
+#  - Mob: CHONCHON
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 250
+#    SupportScript: >
+#      petskillbonus bAgi,4,10,50;
+#  - Mob: STEEL_CHONCHON
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillbonus bAgiVit,4,20,40;
+#  - Mob: HUNTER_FLY
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillattack2 "NPC_WINDATTACK",888,2,0,10;
+#  - Mob: SAVAGE_BABE
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillbonus bVit,4,10,50;
+#  - Mob: DESERT_WOLF_B
+#    AttackRate: 400
+#    RetaliateRate: 400
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petskillattack "SM_PROVOKE",1,0,5;
+#  - Mob: ROCKER
+#    AttackRate: 350
+#    RetaliateRate: 350
+#    ChangeTargetRate: 600
+#    SupportScript: >
+#      petskillbonus bAllStats,1,10,50;
+#  - Mob: SPORE
+#    AttackRate: 350
+#    RetaliateRate: 500
+#    ChangeTargetRate: 500
+#    SupportScript: >
+#      petrecovery SC_POISON,60;
+#  - Mob: POISON_SPORE
+#    AttackRate: 600
+#    RetaliateRate: 200
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petskillattack "NPC_POISON",20,0,10;
+#  - Mob: PECOPECO
+#    AttackRate: 400
+#    RetaliateRate: 500
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillbonus bSpeedRate,25,20,20;
+#  - Mob: SMOKIE
+#    AttackRate: 600
+#    RetaliateRate: 600
+#    ChangeTargetRate: 100
+#    SupportScript: >
+#      petskillbonus bPerfectHide,1,3600,0;
+#  - Mob: YOYO
+#    AttackRate: 300
+#    RetaliateRate: 800
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petloot 20;
+#  - Mob: ORK_WARRIOR
+#    AttackRate: 600
+#    RetaliateRate: 200
+#    ChangeTargetRate: 300
+#    SupportScript: >
+#      petskillattack2 "NPC_PIERCINGATT",100,1,0,10;
+#  - Mob: MUNAK
+#    AttackRate: 300
+#    RetaliateRate: 750
+#    ChangeTargetRate: 300
+#    SupportScript: >
+#      petskillattack2 "NPC_DARKNESSATTACK",444,1,0,10;
+#  - Mob: DOKEBI
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "BS_HAMMERFALL",1,0,10;
+#  - Mob: SOHEE
+#    AttackRate: 100
+#    RetaliateRate: 1000
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillsupport "AL_HEAL",5,60,33,100;
+#  - Mob: ISIS
+#    AttackRate: 650
+#    RetaliateRate: 450
+#    ChangeTargetRate: 150
+#    SupportScript: >
+#      petskillsupport "PR_MAGNIFICAT",2,60,50,50;
+#  - Mob: PETIT
+#    AttackRate: 800
+#    RetaliateRate: 400
+#    ChangeTargetRate: 100
+#    SupportScript: >
+#      petskillattack2 "WZ_HEAVENDRIVE",500,1,0,10;
+#  - Mob: DEVIRUCHI
+#    AttackRate: 800
+#    RetaliateRate: 200
+#    ChangeTargetRate: 100
+#    SupportScript: >
+#      petskillbonus bAgiDexStr,6,20,40;
+#  - Mob: BAPHOMET_
+#    AttackRate: 1000
+#    RetaliateRate: 100
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillattack2 "NPC_DARKNESSATTACK",1776,4,0,5;
+#  - Mob: BON_GUN
+#    AttackRate: 600
+#    RetaliateRate: 200
+#    ChangeTargetRate: 400
+#    SupportScript: >
+#      petskillattack2 "NPC_DARKNESSATTACK",555,1,1,1;
+#  - Mob: ZHERLTHSH
+#    AttackRate: 1000
+#    RetaliateRate: 100
+#    ChangeTargetRate: 500
+#    SupportScript: >
+#      petskillattack "AS_SONICBLOW",1,0,3;
+#  - Mob: ALICE
+#    AttackRate: 100
+#    RetaliateRate: 1000
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillsupport "AL_HEAL",5,60,25,100;
+#  - Mob: EVENT_RICECAKE
+#    AttackRate: 500
+#    RetaliateRate: 500
+#    ChangeTargetRate: 200
+#    SupportScript: >
+#      petskillsupport "CR_DEFENDER",3,240,50,100;
+#  - Mob: GOBLINE_XMAS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "MG_SIGHT",5,5,5;
+#  - Mob: CHUNG_E
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "CR_SHIELDCHARGE",5,5,5;
+#  - Mob: ECLIPSE_P
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "TF_THROWSTONE",1,5,5;
+#  - Mob: GOBLIN_1
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "NPC_WINDATTACK",5,5,5;
+#  - Mob: GOBLIN_2
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "NPC_FIREATTACK",5,5,5;
+#  - Mob: GOBLIN_4
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "NPC_GROUNDATTACK",5,5,5;
+#  - Mob: DELETER_
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "SM_MAGNUM",5,5,5;
+#  - Mob: DIABOLIC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "WZ_METEOR",2,5,5;
+#  - Mob: WANDER_MAN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "NPC_UNDEADATTACK",5,5,5;
+#  - Mob: P_CHUNG_E
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      petskillattack "CR_SHIELDCHARGE",5,5,5;
+#  - Mob: GOLEM
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MARIONETTE
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MEDUSA
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: WHISPER
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: GOBLIN_LEADER
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: SUCCUBUS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      bonus2 bHPDrainRate,10,5;
+#  - Mob: INCUBUS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#    SupportScript: >
+#      bonus bMaxSPRate,3;
+#      bonus2 bSPDrainRate,10,1;
+#  - Mob: NIGHTMARE_TERROR
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: SHINOBI
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MIYABI_NINGYO
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: WICKED_NYMPH
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: STONE_SHOOTER
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DULLAHAN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: LOLI_RURI
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: CIVIL_SERVANT
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: LEAF_CAT
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: BACSOJIN_
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: IMP
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: E_CRAMP
+#    AttackRate: 350
+#    RetaliateRate: 400
+#    ChangeTargetRate: 800
+#  - Mob: E_HYDRA
+#    AttackRate: 350
+#    RetaliateRate: 400
+#    ChangeTargetRate: 800
+#  - Mob: J_TAINI
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: XMAS_LUNATIC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: TIKBALANG
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MARIN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: LITTLE_PORING
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: NINE_TAIL
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: GREMLIN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MUMMY
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: TEDDY_BEAR
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MASTERING
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: METALLER
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: ANGELING
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: MOONLIGHT
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: SAVAGE
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: HIGH_ORC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: CHOCO
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: ANCIENT_MUMMY
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: AM_MUT
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: CAT_O_NINE_TAIL
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: GRAND_PECO
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: HYEGUN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: HODREMLIN
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: XM_TEDDY_BEAR
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DR_EGGRING
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DR_LUNATIC
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: LITTLE_ISIS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DIABOLIC2
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: DELETER_2
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800
+#  - Mob: SWEETS_DROPS
+#    AttackRate: 300
+#    RetaliateRate: 300
+#    ChangeTargetRate: 800

+ 63 - 0
db/pet_db.yml

@@ -0,0 +1,63 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################
+
+Header:
+  Type: PET_DB
+  Version: 1
+
+Footer:
+  Imports:
+  - Path: db/pre-re/pet_db.yml
+    Mode: Prerenewal
+  - Path: db/re/pet_db.yml
+    Mode: Renewal
+  - Path: db/import/pet_db.yml

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 358 - 115
db/pre-re/achievement_db.yml


+ 1 - 1
db/pre-re/attendance.yml

@@ -1,3 +1,3 @@
 Header:
-  Type: ATTENDANCE_CONF
+  Type: ATTENDANCE_DB
   Version: 1

+ 123 - 0
db/pre-re/guild_skill_tree.yml

@@ -0,0 +1,123 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Pre-Renewal Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################
+
+Header:
+  Type: GUILD_SKILL_TREE_DB
+  Version: 1
+
+Body:
+  - Id: GD_APPROVAL
+    MaxLevel: 1
+
+  - Id: GD_KAFRACONTRACT
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+
+  - Id: GD_GUARDRESEARCH
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+
+  - Id: GD_GUARDUP
+    MaxLevel: 3
+
+  - Id: GD_EXTENSION
+    MaxLevel: 10
+
+  - Id: GD_GLORYGUILD
+    MaxLevel: 0
+
+  - Id: GD_LEADERSHIP
+    MaxLevel: 5
+
+  - Id: GD_GLORYWOUNDS
+    MaxLevel: 5
+
+  - Id: GD_SOULCOLD
+    MaxLevel: 5
+    Required:
+    - Id: GD_GLORYWOUNDS
+      Level: 1
+
+  - Id: GD_HAWKEYES
+    MaxLevel: 5
+    Required:
+    - Id: GD_LEADERSHIP
+      Level: 1
+
+  - Id: GD_BATTLEORDER
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 2
+
+  - Id: GD_REGENERATION
+    MaxLevel: 3
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 5
+    - Id: GD_BATTLEORDER
+      Level: 1
+
+  - Id: GD_RESTORE
+    MaxLevel: 1
+    Required:
+    - Id: GD_REGENERATION
+      Level: 1
+
+  - Id: GD_EMERGENCYCALL
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_GUARDRESEARCH
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 5
+    - Id: GD_BATTLEORDER
+      Level: 1
+    - Id: GD_REGENERATION
+      Level: 1
+
+  - Id: GD_DEVELOPMENT
+    MaxLevel: 1
+
+#  - Id: GD_GUILD_STORAGE
+#    MaxLevel: 5

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

@@ -4964,7 +4964,7 @@
 12396,Fools_Day_Box,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ .@rnd = rand(1,10); if(.@rnd==1) itemskill "AL_TELEPORT",1; else if(.@rnd==2) itemskill "AL_TELEPORT",3; else if(.@rnd==3) percentheal 50,0; else if(.@rnd==4) percentheal 0,50; else if(.@rnd==5) end; else if(.@rnd==6) getitem 512,1; else if(.@rnd==7) itemskill "ALL_REVERSEORCISH",1; else if(.@rnd==8) specialeffect2 EF_MAPPILLAR2; else if(.@rnd==9) specialeffect2 EF_ANGEL2; else specialeffect2 EF_COIN; },{},{}
 12397,Fools_Day_Box2,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ .@rnd = rand(1,10); if(.@rnd==1) itemskill "TF_DETOXIFY",1; else if(.@rnd==2) itemskill "TF_PICKSTONE",1; else if(.@rnd==3) itemskill "BA_FROSTJOKER",1; else if(.@rnd==4) itemskill "DC_SCREAM",1; else if(.@rnd==5) end; else if(.@rnd==6) getitem 909,1; else if(.@rnd==7) itemskill "AL_RUWACH",1; else if(.@rnd==8) specialeffect2 EF_BEGINASURA; else if(.@rnd==9) specialeffect2 EF_MVP; else specialeffect2 EF_CURSEATTACK; },{},{}
 12398,PCBang_Gift_Box,PCBang Gift Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,7,2,,,,,,{ Zeny += 1000000; },{},{}
 12400,Water_Of_Blessing_,Water Of Blessing,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
 12401,Rune_Kn_Test_Int,Rune Kn Test Int,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCINT,300000,40; },{},{}
 12402,29Fruit,29Fruit,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 5,5; },{},{}

+ 4 - 0
db/pre-re/item_misc.txt

@@ -644,3 +644,7 @@ IG_Mercenary,12179,1 // SpearMercenary_Scroll7
 IG_Mercenary,12180,1 // SpearMercenary_Scroll8
 IG_Mercenary,12181,1 // SpearMercenary_Scroll9
 IG_Mercenary,12182,1 // SpearMercenary_Scroll10
+// Token of Siegfried
+IG_Token_Of_Siegfried,6293,1	// F_Token_Of_Siegfried
+IG_Token_Of_Siegfried,6316,1	// E_Token_Of_Siegfried
+IG_Token_Of_Siegfried,7621,1	// Token_Of_Siegfried

+ 2 - 2
db/pre-re/job_db1.txt

@@ -282,9 +282,9 @@
 // Rebellion
 4215,	28000,90   ,650  ,469  ,540  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480  ,610  ,540  ,940  ,1040 ,2000 ,2000
 // Summoner - Placeholder
-4218,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
+4218,	20000,0    ,500  ,100  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,800  ,2000 ,2000 ,2000 ,600  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Baby Summoner - Placeholder
-4220,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
+4220,	20000,0    ,500  ,100  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,800  ,2000 ,2000 ,2000 ,600  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Baby Ninja - Placeholder
 4222,	26000,80   ,  0  ,540  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000
 // Baby Kagerou - Placeholder

+ 0 - 104
db/pre-re/pet_db.txt

@@ -1,104 +0,0 @@
-// Pet Database
-//
-// Structure of Database:
-// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
-//
-// 01. MobID			Monster ID of the pet.
-// 02. Name			Name of the monster as defined in the database.
-// 03. JName			The display name of the monster when hatched.
-// 04. LureID			Pet Tame Item ID.
-// 05. EggID			Pet Egg ID.
-// 06. EquipID			Pet Accessory ID.
-// 07. FoodID			Pet Food ID.
-// 08. Fullness			The amount Hunger is decreased every [HungryDelay] seconds.
-// 09. HungryDelay		The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
-// 10. R_Hungry			Amount of Intimacy that is increased when fed.
-// 11. R_Full			Amount of Intimacy that is decreased when over-fed.
-// 12. Intimate			Amount of Intimacy the pet starts with.
-// 13. Die			Amount of Intimacy that is decreased when the pet owner dies.
-// 14. Capture			Capture succes rate (10000 = 100%)
-// 15. Speed			Pet's walk speed. (Defaul: 150)
-// 16. S_Performance		Special Performance. (Yes = 1, No = 0)
-// 17. talk_convert_class	Disables pet talk (instead of talking they emote  with /!.)
-// 18. attack_rate			Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
-// 19. defence_attack_rate	Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
-// 20. change_target_rate	Rate of which the pet will change its attack target.
-// 21. pet_script		Script to execute when the pet is hatched.
-// 22. loyal_script		Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
-//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
-
-//In theory you can use any valid script, but it is run only once upon pet
-//loading, so it is recommended you use the specific pet scripts.
-//Please see "The Pet AI commands" in 'doc/script_commands.txt'.
-
-1002,PORING,Poring,619,9001,10013,531,80,60,50,100,250,20,2000,150,1,0,350,400,800,{ petloot 10; },{ bonus bLuk,2; bonus bCritical,1; }
-1113,DROPS,Drops,620,9002,10013,508,80,60,40,100,250,20,1500,150,1,0,300,400,500,{ petloot 10; },{ bonus bHit,3; bonus bAtk,3; }
-1031,POPORING,Poporing,621,9003,10013,511,80,60,30,100,250,20,1000,150,1,0,300,500,400,{ petloot 15; },{ bonus bLuk,2; bonus2 bSubEle,Ele_Poison,10; }
-1063,LUNATIC,Lunatic,622,9004,10007,534,80,60,40,100,250,20,1500,150,0,0,300,300,1000,{ petskillbonus bLuk,3,10,50; },{ bonus bCritical,2; bonus bAtk,2; }
-1049,PICKY,Picky,623,9005,10012,507,80,60,40,100,250,20,2000,150,1,0,500,600,50,{ petskillbonus bStr,3,10,50;},{ bonus bStr,1; bonus bAtk,5; }
-1011,CHONCHON,ChonChon,624,9006,10002,537,80,60,30,100,250,20,1500,150,1,0,500,500,250,{ petskillbonus bAgi,4,10,50; },{ bonus bAgi,1; bonus bFlee,2; }
-1042,STEEL_CHONCHON,Steel ChonChon,625,9007,10002,1002,80,60,20,100,250,20,1000,150,1,0,500,500,200,{ petskillbonus bAgiVit,4,20,40; },{ bonus bFlee,6; bonus bAgi,-1; }
-1035,HUNTER_FLY,Hunter Fly,626,9008,10002,716,80,60,10,100,250,20,500,150,1,0,500,500,200,{ petskillattack2 "NPC_WINDATTACK",888,2,0,10; },{ bonus bFlee,-5; bonus bFlee2,2; }
-1167,SAVAGE_BABE,Savage Babe,627,9009,10015,537,80,60,40,100,250,20,1500,150,0,0,500,500,200,{ petskillbonus bVit,4,10,50; },{ bonus bVit,1; bonus bMaxHP,50; }
-1107,DESERT_WOLF_B,Baby Desert Wolf,628,9010,10003,537,80,60,40,100,250,20,1000,150,0,0,400,400,400,{ petskillattack "SM_PROVOKE",1,0,5;},{ bonus bInt,1; bonus bMaxSP,50; }
-1052,ROCKER,Rocker,629,9011,10014,537,80,60,30,100,250,20,1500,150,0,0,350,350,600,{ petskillbonus bAllStats,1,10,50; },{ bonus bHPrecovRate,5; bonus bMaxHP,25; }
-1014,SPORE,Spore,630,9012,10017,537,80,60,30,100,250,20,1500,150,0,0,350,500,500,{ petrecovery SC_POISON,60; },{ bonus bHit,5; bonus bAtk,-2; }
-1077,POISON_SPORE,Poison Spore,631,9013,10017,537,80,60,20,100,250,20,1000,150,0,0,600,200,400,{ petskillattack "NPC_POISON",20,0,10; },{ bonus bStr,1; bonus bInt,1; }
-1019,PECOPECO,PecoPeco,632,9014,10010,537,80,60,30,100,250,20,1000,150,1,0,400,500,800,{ petskillbonus bSpeedRate,25,20,20; },{ bonus bMaxHP,150; bonus bMaxSP,-10; }
-1056,SMOKIE,Smokie,633,9015,10019,537,80,60,30,100,250,20,1000,150,1,0,600,600,100,{ petskillbonus bPerfectHide,1,3600,0; },{ bonus bAgi,1; bonus bFlee2,1; }
-1057,YOYO,Yoyo,634,9016,10018,532,80,60,20,100,250,20,1000,150,1,0,300,800,400,{ petloot 20; },{ bonus bCritical,3; bonus bLuk,-1; }
-1023,ORK_WARRIOR,Orc Warrior,635,9017,10009,537,80,60,20,100,250,20,500,150,1,0,600,200,300,{ petskillattack2 "NPC_PIERCINGATT",100,1,0,10; },{ bonus bAtk,10; bonus bDef,-3; }
-1026,MUNAK,Munak,636,9018,10008,537,80,60,20,100,250,20,500,150,0,0,300,750,300,{ petskillattack2 "NPC_DARKNESSATTACK",444,1,0,10; },{ bonus bInt,1; bonus bDef,1; }
-1110,DOKEBI,Dokebi,637,9019,10005,537,80,60,20,100,250,20,500,150,0,0,300,300,800,{ petskillattack "BS_HAMMERFALL",1,0,10; },{ bonus bMatkRate,1; bonus bAtkRate,-1; }
-1170,SOHEE,Sohee,638,9020,10016,537,80,60,10,100,250,20,500,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,33,100; },{ bonus bStr,1; bonus bDex,1; }
-1029,ISIS,Isis,639,9021,10006,537,80,60,10,100,250,20,500,150,0,0,650,450,150,{ petskillsupport "PR_MAGNIFICAT",2,60,50,50; },{ bonus bMatkRate,-1; bonus bAtkRate,1; }
-1155,PETIT,Petite,640,9022,10011,537,80,60,20,100,250,20,500,150,0,0,800,400,100,{ petskillattack2 "WZ_HEAVENDRIVE",500,1,0,10; },{ bonus bDef,-2; bonus bMdef,-2; bonus bAspdRate,1; }
-1109,DEVIRUCHI,Deviruchi,641,9023,10004,711,80,60,10,100,250,20,500,150,0,0,800,200,100,{ petskillbonus bAgiDexStr,6,20,40; },{ bonus bMatkRate,1; bonus bAtkRate,1; bonus bMaxHPrate,-3; bonus bMaxSPrate,-3; }
-1101,BAPHOMET_,Baphomet Jr.,642,9024,10001,518,80,60,10,100,250,20,200,150,0,0,1000,100,200,{ petskillattack2 "NPC_DARKNESSATTACK",1776,4,0,5; },{ bonus bDef,1; bonus bMdef,1; bonus2 bResEff,Eff_Stun,-100; }
-1188,BON_GUN,Bon Gun,659,9025,10020,537,80,60,30,100,250,20,500,150,1,0,600,200,400,{ petskillattack2 "NPC_DARKNESSATTACK",555,1,1,1; },{ bonus bVit,1; bonus2 bResEff,Eff_Stun,100; }
-1200,ZHERLTHSH,Zealotus,660,9026,0,929,80,60,10,100,250,20,300,150,0,0,1000,100,500,{ petskillattack "AS_SONICBLOW",1,0,3; },{ bonus2 bAddRace,RC_Demihuman,2; bonus2 bAddRace,RC_Player,2; bonus2 bMagicAddRace,RC_DemiHuman,2; bonus2 bMagicAddRace,RC_Player,2; }
-1275,ALICE,Alice,661,9027,0,504,80,60,20,100,250,20,800,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,25,100; },{ bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; }
-1815,EVENT_RICECAKE,Rice Cake,0,9028,0,511,80,60,50,100,250,20,2000,150,1,0,500,500,200,{ petskillsupport "CR_DEFENDER",3,240,50,100; },{ bonus2 bSubEle,Ele_Neutral,1; bonus bMaxHPrate,-1; }
-1245,GOBLINE_XMAS,Christmas Goblin,12225,9029,0,911,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "MG_SIGHT",5,5,5; },{ bonus bMaxHP,30; bonus2 bSubEle,Ele_Water,1; }
-
-1519,CHUNG_E,Green Maiden,12395,9030,0,6115,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "CR_SHIELDCHARGE",5,5,5; },{ bonus bDef,1; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; }
-1879,ECLIPSE_P,Spring Rabbit,0,9031,0,7766,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "TF_THROWSTONE",1,5,5; },{}
-1122,GOBLIN_1,Goblin,14569,9032,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_WINDATTACK",5,5,5; },{}
-1123,GOBLIN_2,Goblin,14570,9033,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_FIREATTACK",5,5,5; },{}
-1125,GOBLIN_4,Goblin,14571,9034,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_GROUNDATTACK",5,5,5; },{}
-1385,DELETER_,Deleter,14572,9035,0,7822,80,60,20,100,250,20,800,150,0,0,300,300,800,{ petskillattack "SM_MAGNUM",5,5,5; },{}
-1382,DIABOLIC,Diabolic,14573,9036,0,7823,80,60,10,100,250,20,800,150,0,0,300,300,800,{ petskillattack "WZ_METEOR",2,5,5; },{}
-1208,WANDER_MAN,Wanderer,14574,9037,0,7824,80,60,20,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_UNDEADATTACK",5,5,5; },{ bonus bAgi,3; bonus bDex,1; }
-
-1963,P_CHUNG_E,New Year Doll,0,9038,0,554,80,60,30,100,250,20,800,150,0,0,300,300,800,{ petskillattack "CR_SHIELDCHARGE",5,5,5; },{}
-
-// New pets JapanRO Mobile
-1040,GOLEM,Golem,12371,9053,10035,6111,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxHP,100; bonus bFlee,-5; }
-1143,MARIONETTE,Marionette,12361,9043,10025,6098,80,60,10,100,250,20,500,150,0,0,300,300,800,{},{ bonus bSPrecovRate,3; }
-1148,MEDUSA,Medusa,12368,9050,10032,6108,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bVit,1; bonus2 bResEff,Eff_Stone,500; }
-1179,WHISPER,Whisper,12363,9045,10027,6100,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bFlee,7; bonus bDef,-3; }
-1299,GOBLIN_LEADER,Goblin Leader,12364,9046,10028,6104,80,60,10,100,250,20,50,150,0,0,300,300,800,{},{ bonus2 bAddRace,RC_DemiHuman,3; bonus2 bAddRace,RC_Player,3; }
-1370,SUCCUBUS,Succubus,12373,9055,10037,6113,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bHpDrainRate,50,5; }
-1374,INCUBUS,Incubus,12370,9052,10034,6110,80,60,10,100,250,20,50,150,0,0,300,300,800,{},{ bonus bMaxSPRate,3; }
-1379,NIGHTMARE_TERROR,Nightmare Terror,12372,9054,10036,6112,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bResEff,Eff_Sleep,10000; }
-1401,SHINOBI,Shinobi,12362,9044,10026,6099,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bAgi,2; }
-1404,MIYABI_NINGYO,Miyabi Doll,12366,9048,10030,6106,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bInt,1; bonus bCastrate,-3; }
-1416,WICKED_NYMPH,Evil Nymph,12365,9047,10029,6105,80,60,15,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxSP,30; bonus bSPrecovRate,5; }
-1495,STONE_SHOOTER,Stone Shooter,12369,9051,10033,6109,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus2 bSubEle,Ele_Fire,3; }
-1504,DULLAHAN,Dullahan,12367,9049,10031,6107,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bCritAtkRate,5; }
-1505,LOLI_RURI,Loli Ruri,12360,9042,10024,6097,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bMaxHPRate,3; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10; }
-1513,CIVIL_SERVANT,Mao Guai,12358,9040,10022,6095,80,60,10,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxSP,10; }
-1586,LEAF_CAT,Leaf Cat,12359,9041,10023,6096,80,60,20,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bSubRace,RC_Brute,3; }
-1630,BACSOJIN_,White Lady,12357,9039,10021,6094,80,60,10,100,250,20,2000,150,0,0,300,300,800,{},{}
-1837,IMP,Fire Imp,12374,9056,10038,6114,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bSubEle,Ele_Fire,2; bonus2 bAddEle,Ele_Fire,2; }
-
-// Brasilis Quest - Suspicious Beach [UNHATCHABLE]
-2057,E_CRAMP,Strange Cramp,12408,6221,0,0,0,0,0,0,0,0,50,0,0,0,350,400,800,{},{} // kRO version
-2081,E_HYDRA,Strange Hydra,12408,6221,0,0,0,0,0,0,0,0,50,0,0,0,350,400,800,{},{} // iRO/cRO version
-
-// New pets (FIX ME: pet bonuses for 2210 and 2313 do not require loyalty)
-//2200,J_TAINI,Tiny,0,9057,0,512,80,60,10,100,250,20,0,150,1,0,300,300,800,{},{}
-//2210,XMAS_LUNATIC,Christmas Snow Rabbit,0,9058,0,529,80,60,10,100,250,20,0,150,1,0,300,300,800,{},{ bonus2 bExpAddRace,RC_All,5; }
-//2313,TIKBALANG,Tikbalang,12699,9059,0,528,80,60,10,100,250,20,1000,150,1,0,300,300,800,{},{ bonus2 bAddDamageClass,2320,10; bonus2 bAddDamageClass,2321,10; bonus2 bAddDamageClass,2322,10; bonus2 bAddDamageClass,2317,10; bonus2 bAddDamageClass,2318,10; bonus2 bAddDamageClass,2327,10; bonus2 bAddDamageClass,2319,10; bonus2 bAddDamageClass,2333,10; bonus2 bAddDamageClass,2332,10; }
-1242,MARIN,Marin,12789,9061,10039,6534,80,60,50,100,250,20,2000,150,1,0,300,300,800,{},{}
-//2398,LITTLE_PORING,Novice Poring,12846,9062,0,531,80,60,1000,0,250,0,5000,150,0,0,300,300,800,{},{ bonus bHPrecovRate,50; }

+ 867 - 0
db/pre-re/pet_db.yml

@@ -0,0 +1,867 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Pre-Renewal Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################
+
+Header:
+  Type: PET_DB
+  Version: 1
+
+Body:
+  - Mob: PORING
+    TameItem: Unripe_Apple
+    EggItem: Poring_Egg
+    EquipItem: Backpack
+    FoodItem: Apple_Juice
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,2;
+        bonus bCritical,1;
+      }
+  - Mob: DROPS
+    TameItem: Orange_Juice
+    EggItem: Drops_Egg
+    EquipItem: Backpack
+    FoodItem: Yellow_Herb
+    Fullness: 4
+    IntimacyFed: 40
+    CaptureRate: 1500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,3;
+        bonus bAtk,3;
+      }
+  - Mob: POPORING
+    TameItem: Bitter_Herb
+    EggItem: Poporing_Egg
+    EquipItem: Backpack
+    FoodItem: Green_Herb
+    Fullness: 5
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,2;
+        bonus2 bSubEle,Ele_Poison,10;
+      }
+  - Mob: LUNATIC
+    TameItem: Rainbow_Carrot
+    EggItem: Lunatic_Egg
+    EquipItem: Silk_Ribbon
+    FoodItem: Carrot_Juice
+    Fullness: 4
+    IntimacyFed: 40
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,2;
+        bonus bAtk,2;
+      }
+  - Mob: PICKY
+    TameItem: Earthworm_The_Dude
+    EggItem: Picky_Egg
+    EquipItem: Tiny_Egg_Shell
+    FoodItem: Red_Herb
+    Fullness: 4
+    IntimacyFed: 40
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bAtk,5;
+      }
+  - Mob: CHONCHON
+    TameItem: Rotten_Fish
+    EggItem: Chonchon_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Pet_Food
+    Fullness: 6
+    IntimacyFed: 30
+    CaptureRate: 1500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,1;
+        bonus bFlee,2;
+      }
+  - Mob: STEEL_CHONCHON
+    TameItem: Lusty_Iron
+    EggItem: Steel_Chonchon_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Iron_Ore
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,6;
+        bonus bAgi,-1;
+      }
+  - Mob: HUNTER_FLY
+    TameItem: Monster_Juice
+    EggItem: Hunter_Fly_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Red_Gemstone
+    Fullness: 5
+    IntimacyFed: 10
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,-5;
+        bonus bFlee2,2;
+      }
+  - Mob: SAVAGE_BABE
+    TameItem: Sweet_Milk
+    EggItem: Savage_Bebe_Egg
+    EquipItem: Green_Lace
+    FoodItem: Pet_Food
+    Fullness: 7
+    IntimacyFed: 40
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus bMaxHP,50;
+      }
+  - Mob: DESERT_WOLF_B
+    TameItem: Well_Dried_Bone
+    EggItem: Baby_Desert_Wolf_Egg
+    EquipItem: Transparent_Headgear
+    FoodItem: Pet_Food
+    Fullness: 6
+    IntimacyFed: 40
+    CaptureRate: 1000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bMaxSP,50;
+      }
+  - Mob: ROCKER
+    TameItem: Singing_Flower
+    EggItem: Rocker_Egg
+    EquipItem: Rocker_Glasses
+    FoodItem: Pet_Food
+    Fullness: 1
+    IntimacyFed: 30
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHPrecovRate,5;
+        bonus bMaxHP,25;
+      }
+  - Mob: SPORE
+    TameItem: Dew_Laden_Moss
+    EggItem: Spore_Egg
+    EquipItem: Bark_Shorts
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 30
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,5;
+        bonus bAtk,-2;
+      }
+  - Mob: POISON_SPORE
+    TameItem: Deadly_Noxious_Herb
+    EggItem: Poison_Spore_Egg
+    EquipItem: Bark_Shorts
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 20
+    CaptureRate: 1000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bInt,1;
+      }
+  - Mob: PECOPECO
+    TameItem: Fatty_Chubby_Earthworm
+    EggItem: PecoPeco_Egg
+    EquipItem: Battered_Pot
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,150;
+        bonus bMaxSP,-10;
+      }
+  - Mob: SMOKIE
+    TameItem: Baked_Yam
+    EggItem: Smokie_Egg
+    EquipItem: Red_Muffler
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,1;
+        bonus bFlee2,1;
+      }
+  - Mob: YOYO
+    TameItem: Tropical_Banana
+    EggItem: Yoyo_Egg
+    EquipItem: Monkey_Circlet
+    FoodItem: Banana_Juice
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,3;
+        bonus bLuk,-1;
+      }
+  - Mob: ORK_WARRIOR
+    TameItem: Horror_Of_Tribe
+    EggItem: Orc_Warrior_Egg
+    EquipItem: Wild_Flower
+    FoodItem: Pet_Food
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAtk,10;
+        bonus bDef,-3;
+      }
+  - Mob: MUNAK
+    TameItem: No_Recipient
+    EggItem: Munak_Egg
+    EquipItem: Punisher
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bDef,1;
+      }
+  - Mob: DOKEBI
+    TameItem: Old_Broom
+    EggItem: Dokkaebi_Egg
+    EquipItem: Wig
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,1;
+        bonus bAtkRate,-1;
+      }
+  - Mob: SOHEE
+    TameItem: Silver_Knife_Of_Chaste
+    EggItem: Sohee_Egg
+    EquipItem: Golden_Bell
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bDex,1;
+      }
+  - Mob: ISIS
+    TameItem: Armlet_Of_Obedience
+    EggItem: Isis_Egg
+    EquipItem: Queen's_Hair_Ornament
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,-1;
+        bonus bAtkRate,1;
+      }
+  - Mob: PETIT
+    TameItem: Shining_Stone
+    EggItem: Green_Petite_Egg
+    EquipItem: Stellar_Hairpin
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,-2;
+        bonus bMdef,-2;
+        bonus bAspdRate,1;
+      }
+  - Mob: DEVIRUCHI
+    TameItem: Contracts_In_Shadow
+    EggItem: Deviruchi_Egg
+    EquipItem: Pacifier
+    FoodItem: Shoot
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,1;
+        bonus bAtkRate,1;
+        bonus bMaxHPrate,-3;
+        bonus bMaxSPrate,-3;
+      }
+  - Mob: BAPHOMET_
+    TameItem: Book_Of_Devil
+    EggItem: Bapho_Jr._Egg
+    EquipItem: Skull_Helm
+    FoodItem: Honey
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,1;
+        bonus bMdef,1;
+        bonus2 bResEff,Eff_Stun,-100;
+      }
+  - Mob: BON_GUN
+    TameItem: Heart_Of_Her
+    EggItem: Bongun_Egg
+    EquipItem: Sword_Of_Grave_Keeper
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stun,100;
+      }
+  - Mob: ZHERLTHSH
+    TameItem: Prohibition_Red_Candle
+    EggItem: Zherlthsh_Egg
+    FoodItem: Immortal_Heart
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 300
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddRace,RC_Demihuman,2;
+        bonus2 bMagicAddRace,RC_DemiHuman,2;
+        bonus2 bAddRace,RC_Player,2;
+        bonus2 bMagicAddRace,RC_Player,2;
+      }
+  - Mob: ALICE
+    TameItem: Sway_Apron
+    EggItem: Alice_Egg
+    FoodItem: White_Potion
+    Fullness: 2
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMdef,1;
+        bonus2 bSubRace,RC_DemiHuman,1;
+        bonus2 bSubRace,RC_Player,1;
+      }
+  - Mob: EVENT_RICECAKE
+    EggItem: Rice_Cake_Egg
+    FoodItem: Green_Herb
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Neutral,1;
+        bonus bMaxHPrate,-1;
+      }
+  - Mob: GOBLINE_XMAS
+    TameItem: Sweet_Candy_Striper
+    EggItem: Santa_Goblin_Egg
+    FoodItem: Scell
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,30;
+        bonus2 bSubEle,Ele_Water,1;
+      }
+  - Mob: CHUNG_E
+    TameItem: Tantanmen
+    EggItem: Chung_E_Egg
+    FoodItem: Bun_
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,1;
+        bonus2 bSubRace,RC_DemiHuman,1;
+        bonus2 bSubRace,RC_Player,1;
+      }
+  - Mob: ECLIPSE_P
+    EggItem: Spring_Rabbit_Egg
+    FoodItem: Bok_Choy
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+  - Mob: GOBLIN_1
+    TameItem: Knife_Goblin_Ring
+    EggItem: Knife_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOBLIN_2
+    TameItem: Flail_Goblin_Ring
+    EggItem: Flail_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOBLIN_4
+    TameItem: Hammer_Goblin_Ring
+    EggItem: Hammer_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: DELETER_
+    TameItem: Holy_Marble
+    EggItem: Red_Deleter_Egg
+    FoodItem: Whole_Barbecue
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: DIABOLIC
+    TameItem: Red_Burning_Stone
+    EggItem: Diabolic_Egg
+    FoodItem: Meat_Veg_Skewer
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: WANDER_MAN
+    TameItem: Skull_Of_Vagabond
+    EggItem: Wanderer_Egg
+    FoodItem: Spirit_Liquor
+    Fullness: 2
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,3;
+        bonus bDex,1;
+      }
+  - Mob: P_CHUNG_E
+    EggItem: New_Year_Doll_Egg
+    FoodItem: Mojji
+    Fullness: 3
+    IntimacyFed: 30
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOLEM
+    TameItem: Magical_Lithography
+    EggItem: Golem_Egg
+    EquipItem: Windup_Spring
+    FoodItem: Mystic_Stone
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,100;
+        bonus bFlee,-5;
+      }
+  - Mob: MARIONETTE
+    TameItem: Delicious_Shaved_Ice
+    EggItem: Marionette_Egg
+    EquipItem: Star_Hairband
+    FoodItem: Small_Snow_Flower
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bSPrecovRate,3;
+      }
+  - Mob: MEDUSA
+    TameItem: Splendid_Mirror
+    EggItem: Medusa_Egg
+    EquipItem: Queen's_Coronet
+    FoodItem: Apple_Pudding
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stone,500;
+      }
+  - Mob: WHISPER
+    TameItem: Fit_Pipe
+    EggItem: Whisper_Egg
+    EquipItem: Spirit_Chain_
+    FoodItem: Damp_Darkness
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,7;
+        bonus bDef,-3;
+      }
+  - Mob: GOBLIN_LEADER
+    TameItem: Staff_Of_Leader
+    EggItem: Goblin_Leader_Egg
+    EquipItem: Nice_Badge
+    FoodItem: Big_Cell
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 50
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddRace,RC_DemiHuman,3;
+        bonus2 bAddRace,RC_Player,3;
+      }
+  - Mob: SUCCUBUS
+    TameItem: Boy's_Naivety
+    EggItem: Succubus_Egg
+    EquipItem: Black_Butterfly_Mask
+    FoodItem: Vital_Flower_
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bHpDrainRate,50,5;
+      }
+  - Mob: INCUBUS
+    TameItem: Gril's_Naivety
+    EggItem: Incubus_Egg
+    EquipItem: Ball_Mask
+    FoodItem: Vital_Flower
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 50
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSPRate,3;
+      }
+  - Mob: NIGHTMARE_TERROR
+    TameItem: Hell_Contract
+    EggItem: Nightmare_Terror_Egg
+    EquipItem: Hell_Horn
+    FoodItem: Fresh_Plant
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bResEff,Eff_Sleep,10000;
+      }
+  - Mob: SHINOBI
+    TameItem: Kuloren
+    EggItem: Shinobi_Egg
+    EquipItem: Wine_On_Sleeve
+    FoodItem: Grilled_Rice_Cake
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,2;
+      }
+  - Mob: MIYABI_NINGYO
+    TameItem: Gril_Doll
+    EggItem: Miyabi_Ningyo_Egg
+    EquipItem: Summer_Fan
+    FoodItem: Well_Ripened_Berry
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bCastrate,-3;
+      }
+  - Mob: WICKED_NYMPH
+    TameItem: Charming_Lotus
+    EggItem: Wicked_Nymph_Egg
+    EquipItem: Jade_Trinket
+    FoodItem: Morning_Dew
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,30;
+        bonus bSPrecovRate,5;
+      }
+  - Mob: STONE_SHOOTER
+    TameItem: Oilpalm_Coconut
+    EggItem: Stone_Shooter_Egg
+    EquipItem: Apro_Hair
+    FoodItem: Plant_Neutrient
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Fire,3;
+      }
+  - Mob: DULLAHAN
+    TameItem: Luxury_Whisky_Bottle
+    EggItem: Dullahan_Egg
+    EquipItem: Death_Coil
+    FoodItem: Sunset_On_The_Rock
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritAtkRate,5;
+      }
+  - Mob: LOLI_RURI
+    TameItem: Very_Red_Juice
+    EggItem: Loli_Ruri_Egg
+    EquipItem: Fashionable_Glasses
+    FoodItem: Pumpkin_Pie_
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHPRate,3;
+        bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10;
+      }
+  - Mob: CIVIL_SERVANT
+    TameItem: Fan_Of_Wind
+    EggItem: Civil_Servant_Egg
+    EquipItem: Golden_Earing
+    FoodItem: Flavored_Alcohol
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,10;
+      }
+  - Mob: LEAF_CAT
+    TameItem: Very_Soft_Plant
+    EggItem: Leaf_Cat_Egg
+    EquipItem: Green_Lucky_Bag
+    FoodItem: Fish_With_Blue_Back
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubRace,RC_Brute,3;
+      }
+  - Mob: BACSOJIN_
+    TameItem: Shiny_Wing_Gown
+    EggItem: Bacsojin_Egg
+    EquipItem: Round_Hair_Ornament
+    FoodItem: Traditional_Cookie
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 2000
+    SpecialPerformance: false
+  - Mob: IMP
+    TameItem: Flaming_Ice
+    EggItem: Imp_Egg
+    EquipItem: Horn_Protector
+    FoodItem: Flame_Gemstone
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Fire,2;
+        bonus2 bAddEle,Ele_Fire,2;
+      }

+ 11 - 18
db/pre-re/skill_cast_db.txt

@@ -1029,6 +1029,8 @@
 706,0,0,0,3000,0,0,0
 //-- NPC_MAXPAIN
 716,0,0,0,10000,0,0,0
+//-- NPC_REVERBERATION
+725,0,0,0,9000:10000:11000:12000:13000,0,0
 
 //===== 2nd Jobs Quest Skills ==============
 //-- KN_CHARGEATK
@@ -1318,8 +1320,9 @@
 2282,0,0,0,20000:30000:40000:50000:60000,0,0
 //-- NC_DISJOINT
 2283,2000,0,0,0,0,0
-//-- NC_MAGMA_ERUPTION
-5006,1000,500,0,5000,42000,10000:9000:8000:7000:6000
+5006,1000,500,0,5000,5000,10000:9000:8000:7000:6000
+//-- NC_MAGMA_ERUPTION_DOTDAMAGE
+5015,0,0,0,0,20000,0
 //==========================================
 
 //===== Shadow Chaser ======================
@@ -1631,20 +1634,16 @@
 //==========================================
 
 //===== Rebellion Skills ===================
-//-- RL_GLITTERING_GREED
-//2551,0,0,0,0,0,0
 //-- RL_RICHS_COIN
 2552,0,1000,0,600000,0,3000
 //-- RL_MASS_SPIRAL
-2553,2000,1000,0,0,30000,2000
+2553,1000,1000,0,120000,0,2000
 //-- RL_BANISHING_BUSTER
-2554,3000:2500:2000:1500:1000,2000,0,0,0,10000
+2554,3000:2500:2000:1500:1000,0,0,0,0,2000
 //-- RL_B_TRAP
-2555,0,2500:2000:1500:1000:500,0,10000,9000:14000:19000:24000:29000,10000
-//-- RL_FLICKER
-2556,0,0,0,0,0,10000
+2555,2000:1600:1200:800:400,2500:2000:1500:1000:500,0,10000,10000:11000:12000:13000:14000,10000
 //-- RL_S_STORM
-2557,3000:2500:2000:1500:1000,2000,0,0,0,2000
+2557,3000:2500:2000:1500:1000,0,0,0,0,2000
 //-- RL_E_CHAIN
 2558,1000,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,0
 //-- RL_QD_SHOT
@@ -1652,11 +1651,11 @@
 //-- RL_C_MARKER
 2560,0,0,0,30000,0,1000
 //-- RL_FIREDANCE
-2561,0,500,0,0,0,5000
+2561,0,500,0,0,0,0
 //-- RL_H_MINE
 2562,1000,1000,0,50000,15000,5000:4500:4000:3500:3000
 //-- RL_P_ALTER
-2563,0,0,0,30000:45000:60000:75000:90000,0,0
+2563,2000,0,0,42000:54000:66000:78000:90000,0,0
 //-- RL_FALLEN_ANGEL
 2564,0,0,0,2000,0,0
 //-- RL_R_TRIP
@@ -1673,12 +1672,6 @@
 2570,5000:6000:7000:8000:9000,1000,0,0,2000,5000
 //-- RL_HAMMER_OF_GOD
 2571,0,2000,0,0,3000:3000:4000:4000:5000,30000
-//-- RL_R_TRIP_PLUSATK
-//2572,0,0,0,0,0,0
-//-- RL_B_FLICKER_ATK
-//2573,0,0,0,0,0,0
-//-- RL_GLITTERING_GREED_ATK
-//2574,0,0,0,0,0,0
 //==========================================
 
 //==== Kagerou & Oboro Skills ==============

+ 4 - 3
db/pre-re/skill_db.txt

@@ -870,8 +870,8 @@
 //722,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDESUCK,Wide Suck
 //723,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_STORMGUST2,Storm Gust 2
 //724,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_FIRESTORM,Fire Storm
-//725,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_REVERBERATION,Reverberation 2
-//726,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_REVERBERATION_ATK,Reverberation Attack
+725,1,6,2,0,0x3,2,5,1,no,0,0x20082,0,none,0,0x0,	NPC_REVERBERATION,Reverberation 2
+726,1,6,1,0,0x6,2,5,1,no,0,0x2,0,weapon,0,0x0,	NPC_REVERBERATION_ATK,Reverberation Attack
 727,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,		NPC_LEX_AETERNA,Lex Aeterna 2
 728,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,		NPC_ARROWSTORM,NPC Arrow Storm
 //729,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_CHEAL,NPC Coluceo Heal
@@ -1345,7 +1345,7 @@
 5003,7,6,1,-1,0x2,4:5:6:7:-1,5,1,no,0,0,0,weapon,0,0x0, GN_ILLUSIONDOPING,Illusion Doping
 5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0x40000,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
 5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
-5006,1,6,2,3,0,0,5,1,no,0,0,3,misc,0,0x4000, NC_MAGMA_ERUPTION,Magma Eruption
+5006,1,6,2,-1,0x2,3,5,1,no,0,0,3,weapon,0,0x4000, NC_MAGMA_ERUPTION,Magma Eruption
 5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song
 5008,0,6,4,0,0x3,11,5,1,no,0,0,0,none,0,0x0, SO_ELEMENTAL_SHIELD,Elemental Shield
 5009,1,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO,Flash Combo
@@ -1354,6 +1354,7 @@
 5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
 5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
 5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x4000, ALL_FULL_THROTTLE,Full Throttle
+5015,1,6,1,0,0xC0,0,5,1,no,0,0,0,misc,0,0,	NC_MAGMA_ERUPTION_DOTDAMAGE,Magma Eruption Dot Damage
 
 // Summoner - Placeholder
 5018,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,	SU_BASIC_SKILL,New Basic Skill

+ 1 - 0
db/pre-re/skill_unit_db.txt

@@ -108,6 +108,7 @@
 670,0xc7,    ,  1, 5:5:5:5:5:5:5:5:5:13,1000,all,0x008	//NPC_EVILLAND
 
 706,0xfd,     ,  2, 0,1000,enemy, 0x018	//NPC_VENOMFOG
+725,0xda,     ,  0, 0,1000,enemy, 0x1000	//NPC_REVERBERATION
 
 2044,0xca,    ,  0, 2,1000,all,   0x018	//AB_EPICLESIS
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 392 - 149
db/re/achievement_db.yml


+ 59 - 59
db/re/attendance.yml

@@ -1,61 +1,61 @@
 Header:
-  Type: ATTENDANCE_CONF
+  Type: ATTENDANCE_DB
   Version: 1
-  
-Attendance:
-  - Start: 20180502
-    End: 20180529
-    Rewards:
-      - Day: 1
-        ItemId: 22979
-      - Day: 2
-        ItemId: 6316
-      - Day: 3
-        ItemId: 12265
-        Amount: 5
-      - Day: 4
-        ItemId: 23047
-        Amount: 5
-      - Day: 5
-        ItemId: 23038
-      - Day: 6
-        ItemId: 23043
-      - Day: 7
-        ItemId: 23340
-        Amount: 3
-      - Day: 8
-        ItemId: 12516
-        Amount: 5
-      - Day: 9
-        ItemId: 23307
-        Amount: 5
-      - Day: 10
-        ItemId: 12610
-      - Day: 11
-        ItemId: 14533
-        Amount: 2
-      - Day: 12
-        ItemId: 23012
-        Amount: 3
-      - Day: 13
-        ItemId: 23048
-        Amount: 5
-      - Day: 14
-        ItemId: 12264
-        Amount: 5
-      - Day: 15
-        ItemId: 23046
-        Amount: 5
-      - Day: 16
-        ItemId: 12515
-        Amount: 5
-      - Day: 17
-        ItemId: 12522
-        Amount: 5
-      - Day: 18
-        ItemId: 12523
-        Amount: 5
-      - Day: 19
-        ItemId: 6234
-      - Day: 20
-        ItemId: 22845
+
+Body:
+#  - Start: 20180502
+#    End: 20180529
+#    Rewards:
+#      - Day: 1
+#        ItemId: 22979
+#      - Day: 2
+#        ItemId: 6316
+#      - Day: 3
+#        ItemId: 12265
+#        Amount: 5
+#      - Day: 4
+#        ItemId: 23047
+#        Amount: 5
+#      - Day: 5
+#        ItemId: 23038
+#      - Day: 6
+#        ItemId: 23043
+#      - Day: 7
+#        ItemId: 23340
+#        Amount: 3
+#      - Day: 8
+#        ItemId: 12516
+#        Amount: 5
+#      - Day: 9
+#        ItemId: 23307
+#        Amount: 5
+#      - Day: 10
+#        ItemId: 12610
+#      - Day: 11
+#        ItemId: 14533
+#        Amount: 2
+#      - Day: 12
+#        ItemId: 23012
+#        Amount: 3
+#      - Day: 13
+#        ItemId: 23048
+#        Amount: 5
+#      - Day: 14
+#        ItemId: 12264
+#        Amount: 5
+#      - Day: 15
+#        ItemId: 23046
+#        Amount: 5
+#      - Day: 16
+#        ItemId: 12515
+#        Amount: 5
+#      - Day: 17
+#        ItemId: 12522
+#        Amount: 5
+#      - Day: 18
+#        ItemId: 12523
+#        Amount: 5
+#      - Day: 19
+#        ItemId: 6234
+#      - Day: 20
+#        ItemId: 22845

+ 123 - 0
db/re/guild_skill_tree.yml

@@ -0,0 +1,123 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Renewal Guild Skill Database
+###########################################################################
+#
+# Guild Skill Settings
+#
+###########################################################################
+# Id - Skill ID of the guild skill.
+###########################################################################
+# MaxLevel - Maximum level of the guild skill.
+###########################################################################
+# Required - A list of required skills for the skill to become available.
+#   Id: Skill ID of the required guild skill.
+#   Level: Level of the required guild skill.
+###########################################################################
+
+Header:
+  Type: GUILD_SKILL_TREE_DB
+  Version: 1
+
+Body:
+  - Id: GD_APPROVAL
+    MaxLevel: 1
+
+  - Id: GD_KAFRACONTRACT
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+
+  - Id: GD_GUARDRESEARCH
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+
+  - Id: GD_GUARDUP
+    MaxLevel: 3
+
+  - Id: GD_EXTENSION
+    MaxLevel: 10
+
+  - Id: GD_GLORYGUILD
+    MaxLevel: 0
+
+  - Id: GD_LEADERSHIP
+    MaxLevel: 5
+
+  - Id: GD_GLORYWOUNDS
+    MaxLevel: 5
+
+  - Id: GD_SOULCOLD
+    MaxLevel: 5
+    Required:
+    - Id: GD_GLORYWOUNDS
+      Level: 1
+
+  - Id: GD_HAWKEYES
+    MaxLevel: 5
+    Required:
+    - Id: GD_LEADERSHIP
+      Level: 1
+
+  - Id: GD_BATTLEORDER
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 2
+
+  - Id: GD_REGENERATION
+    MaxLevel: 3
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 5
+    - Id: GD_BATTLEORDER
+      Level: 1
+
+  - Id: GD_RESTORE
+    MaxLevel: 1
+    Required:
+    - Id: GD_REGENERATION
+      Level: 1
+
+  - Id: GD_EMERGENCYCALL
+    MaxLevel: 1
+    Required:
+    - Id: GD_APPROVAL
+      Level: 1
+    - Id: GD_GUARDRESEARCH
+      Level: 1
+    - Id: GD_EXTENSION
+      Level: 5
+    - Id: GD_BATTLEORDER
+      Level: 1
+    - Id: GD_REGENERATION
+      Level: 1
+
+  - Id: GD_DEVELOPMENT
+    MaxLevel: 1
+
+  - Id: GD_GUILD_STORAGE
+    MaxLevel: 5

+ 1 - 1
db/re/instance_db.txt

@@ -28,7 +28,7 @@
 21,Fenrir and Sarah,3600,300,1@glast,367,304
 // 22,Wave Mode - Forest,3600,300,1@def01,50,21
 // 23,Wave Mode - Sky,3600,300,1@def02,29,35
-// 24,Nightmarish Jitterbug,3600,300,1@jtb,16,17
+24,Nightmarish Jitterbug,3600,300,1@jtb,16,17
 25,Isle of Bios,3600,300,1@dth1,17,93,1@dth2,1@dth3
 26,Morse's Cave,3600,300,1@rev,26,181
 // 27,Temple of the Demon God,3600,300,1@eom,101,16

+ 3 - 3
db/re/item_combo_db.txt

@@ -13,7 +13,7 @@
 1269:5467,{ bonus bAspd,1; bonus bFlee2,3; }
 1284:2892,{ bonus2 bSkillAtk,"AS_SONICBLOW",50; bonus bBaseAtk,50; bonus bFlee,-30; }
 1285:2892,{ bonus bCritical,4; bonus bCritAtkRate,40; bonus bMaxHPRate,-10; }
-1287:15123,{ if (getequiprefinerycnt(EQI_HAND_R) >= 7) { autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",1000,3000,BF_SHORT,BF_NORMAL; } /* Confirm: Success rate */ }
+1287:15123,{ if (getequiprefinerycnt(EQI_HAND_R) >= 7) { autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",1000,3000,BF_SHORT|BF_NORMAL; } /* Confirm: Success rate */ }
 1326:22133,{ bonus bBaseAtk,40; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus2 bSkillAtk,"NC_AXEBOOMERANG",15; } if ((.@eq + .@weapon) >= 18) { bonus2 bAddClass,Class_All,10; if ((.@eq + .@weapon) >= 22) { bonus bLongAtkRate,10; } } }
 1387:19021,{ bonus2 bSkillAtk,"WS_CARTTERMINATION",15+(getequiprefinerycnt(EQI_HAND_R))*5; }
 1407:5782,{ bonus2 bAddClass,Class_All,3; }
@@ -702,8 +702,8 @@
 22133:26007,{ bonus bAspdRate,8; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { .@val = 20; } if ((.@eq + .@weapon) >= 18) { bonus bLongAtkRate,10; if ((.@eq + .@weapon) >= 22) { .@val += 30; } } if (.@val) { bonus2 bSkillAtk,"LG_BANISHINGPOINT",.@val; } }
 22133:32005,{ bonus bBaseAtk,40; .@eq = getequiprefinerycnt(EQI_SHOES); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { .@val = 20; } if ((.@eq + .@weapon) >= 18) { bonus2 bAddClass,Class_All,10; if ((.@eq + .@weapon) >= 22) { .@val += 20; } } if (.@val) { bonus2 bSkillAtk,"RK_HUNDREDSPEAR",.@val; } }
 22171:13345,{ autobonus "{ bonus bStr,20; bonus bLongAtkRate,10; }",20,7000,BF_WEAPON; /* unknown rate */ }
-//22171:26154,{ autobonus "{ bonus bInt,20; bonus2 bMatkRate,15; }",20,7000,BF_MAGIC; /* unknown rate */ }
-22171:26155,{ autobonus "{ bonus bLuk,20; bonus2 bMatkRate,15; bonus2 bAddClass,Class_All,15; }",20,7000,BF_MAGIC|BF_WEAPON; /* unknown rate */ }
+//22171:26154,{ autobonus "{ bonus bInt,20; bonus bMatkRate,15; }",20,7000,BF_MAGIC; /* unknown rate */ }
+22171:26155,{ autobonus "{ bonus bLuk,20; bonus bMatkRate,15; bonus2 bAddClass,Class_All,15; }",20,7000,BF_MAGIC|BF_WEAPON; /* unknown rate */ }
 22171:28255,{ autobonus "{ bonus bInt,20; bonus2 bMagicAtkEle,Ele_Ghost,10; }",20,7000,BF_MAGIC; /* unknown rate */ }
 22171:28256,{ autobonus "{ bonus bDex,20; bonus bLongAtkRate,10; }",20,7000,BF_WEAPON; /* unknown rate */ }
 22171:28257,{ autobonus "{ bonus bDex,20; bonus bLongAtkRate,10; }",20,7000,BF_WEAPON; /* unknown rate */ }

+ 86 - 28
db/re/item_db.txt

@@ -494,7 +494,7 @@
 1138,Mysteltainn_,Mysteltainn,5,20,,1000,170,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEle,Ele_Ghost,15; bonus3 bAutoSpell,"MG_STONECURSE",3,100; bonus2 bAddEff,Eff_Stone,10; bonus bDex,3; },{},{}
 1139,Tale_Fing_,Tirfing,5,20,,1000,200,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Dark; bonus2 bHPLossRate,35,10000; },{},{}
 1140,Byeorrun_Gum,Byeollungum,5,20,,900,150,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus2 bSubClass,Class_Normal,-10; bonus2 bAddClass,Class_Boss,50; bonus bAllStats,2; },{},{}
-1141,Immaterial_Sword,Immaterial Sword,5,20,,900,140,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Ghost; bonus2 bSPVanishRate,30,30; bonus bSPDrainValue,-1; bonus bUnbreakableWeapon; },{},{}
+1141,Immaterial_Sword,Immaterial Sword,5,20,,900,140,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Ghost; bonus3 bSPVanishRate,30,30,BF_WEAPON|BF_MAGIC|BF_MISC; bonus bSPDrainValue,-1; bonus bUnbreakableWeapon; },{},{}
 1142,Jewel_Sword,Jeweled Sword,5,20,,2200,104,,1,0,0x000654E2,63,2,2,3,68,1,2,{ bonus2 bAddMonsterDropItemGroup,IG_Jewel,100; },{},{}
 1143,Gaia_Sword,Gaia Sword,5,20,,2500,140,,1,0,0x000654E2,63,2,2,3,74,1,2,{ bonus2 bAddMonsterDropItemGroup,IG_Ore,30; },{},{}
 1144,Sasimi,Sashimi,5,20,,1400,75,,1,0,0x000654E2,63,2,2,3,48,1,2,{ bonus bAtkEle,Ele_Wind; bonus3 bAddMonsterDropItem,544,RC_Fish,4000; },{},{}
@@ -654,7 +654,7 @@
 1291,Guillotine_Katar,Guillotine Katar,5,56000,,1500,200,,1,1,0x00001000,63,2,34,4,140,1,16,{ bonus bDex,2; bonus bFlee,-30; bonus2 bAddRace,RC_DemiHuman,50; bonus2 bAddRace,RC_Player,50; bonus2 bSkillAtk,"GC_CROSSIMPACT",30; },{},{}
 1292,Upg_Katar,Upg Katar,5,20,,1000,80,,1,1,0x00001000,63,2,34,3,1,1,16,{ .@r = getrefine(); bonus bBaseAtk,(.@r*10); bonus bCritAtkRate,(.@r*2); if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10); },{},{}
 1293,Velum_Jamadhar,Vellum Jamadhar,5,20,,1200,170,,1,0,0x00001000,63,2,34,4,95,1,16,{ bonus4 bSetDefRace,RC_Player,10000,5000,1; bonus4 bSetMDefRace,RC_Player,10000,5000,1; bonus bAspdRate,getrefine(); },{},{}
-1294,Velum_Scare,Vellum Scale,5,20,,1200,50,,1,0,0x00001000,63,2,34,4,95,1,16,{ bonus3 bSPVanishRaceRate,RC_Player,10000,10; },{},{}
+1294,Velum_Scare,Vellum Scale,5,20,,1200,50,,1,0,0x00001000,63,2,34,4,95,1,16,{ bonus3 bSPVanishRaceRate,RC_Player,1000,10; },{},{}
 1295,Blood_Tears_,Blood Tears,5,20,,1700,120,,1,3,0x00001000,18,2,34,4,55,1,16,{ bonus3 bAutoSpell,"NPC_WIDEBLEEDING",(getrefine()>=9?2:1),30; },{},{}
 1296,Metal_Katar,Metal Katar,5,20,,0,75,,1,1,0x00001000,63,2,34,3,1,1,16,{ .@r = getrefine(); bonus bBaseAtk,(.@r*5); bonus bCritAtkRate,.@r; .@i = min(BaseLevel/10,12); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
 1297,Inverse_Scale_,Inverse Scale,5,20,,1500,140,,1,2,0x00001000,18,2,34,4,55,1,16,{ bonus bAtkEle,Ele_Holy; bonus3 bAutoSpell,"NPC_DRAGONFEAR",1,30; },{},{}
@@ -734,7 +734,7 @@
 1392,Ygnus_Stale,Ignus Steel,5,56000,,1900,250,,1,1,0x000444A2,63,2,34,4,95,1,7,{ bonus bAtkEle,Ele_Fire; bonus bUnbreakableWeapon; bonus2 bAddEff,Eff_Burning,300; bonus2 bAddEff2,Eff_Burning,300; },{},{}
 1393,End_Sektura,End Sectora,5,56000,,1900,250,,1,1,0x000444A2,63,2,34,4,95,1,7,{ bonus bAtkEle,Ele_Water; bonus bUnbreakableWeapon; bonus2 bAddEff,Eff_Crystalize,300; bonus2 bAddEff2,Eff_Crystalize,300; },{},{}
 1394,Upg_Two_Handed_Axe,Upg Two Handed Axe,5,20,,2000,110,,1,1,0x000444A2,63,2,34,3,1,1,7,{ bonus bBaseAtk,(getrefine()*14); if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10); },{},{}
-1395,Velum_Buster,Vellum Buster,5,20,,2500,50,,1,0,0x000444A2,63,2,34,4,95,1,7,{ bonus bUnbreakableWeapon; bonus3 bSPVanishRaceRate,RC_Player,10000,10; },{},{}
+1395,Velum_Buster,Vellum Buster,5,20,,2500,50,,1,0,0x000444A2,63,2,34,4,95,1,7,{ bonus bUnbreakableWeapon; bonus3 bSPVanishRaceRate,RC_Player,1000,10; },{},{}
 1396,Velum_Guillotine,Vellum Guillotine,5,20,,5500,300,,1,0,0x000444A2,63,2,34,4,95,1,7,{ bonus bUnbreakableWeapon; bonus2 bAddRace,RC_Player,40; bonus2 bIgnoreDefRaceRate,RC_Player,30; .@r = getrefine(); if(.@r>=6) { bonus2 bSkillAtk,"NC_AXEBOOMERANG",80; bonus2 bSkillAtk,"NC_POWERSWING",80; } if(.@r>=9) { bonus2 bAddRace,RC_Player,60; } },{},{}
 1397,Bradium_Stonehammer_,Bradium Stonehammer,5,20,,2700,210,,1,2,0x000444A2,63,2,34,4,75,1,7,{ bonus bUnbreakableWeapon; },{},{}
 1398,Metal_Two_Handed_Axe,Metal Two Handed Axe,5,20,,0,105,,1,1,0x000444A2,63,2,34,3,1,1,7,{ bonus bUnbreakableWeapon; bonus bBaseAtk,(getrefine()*7); .@i = min(BaseLevel/10,12); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
@@ -877,7 +877,7 @@
 1525,Long_Mace,Long Mace,5,20,,800,135,,3,0,0x00008110,63,2,2,4,40,1,8,{ bonus bLongAtkDef,10; },{},{}
 1526,Slash,Slash,5,20,,1000,145,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,15; bonus2 bComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5; },{},{}
 1527,Quadrille,Quadrille,5,20,,900,165,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; bonus2 bAddEle,Ele_Earth,10; },{},{}
-1528,Grand_Cross,Grand Cross,5,20,,1500,140,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
+1528,Grand_Cross,Grand Cross,5,20,,1500,140,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
 1529,Iron_Driver,Iron Driver,5,20,,3000,155,,2,0,0x00008100,63,2,2,3,78,1,8,{},{},{}
 1530,Mjolnir,Mjolnir,5,20,,6000,350,,1,0,0x000444A2,63,2,2,4,95,0,8,{ bonus bAtkEle,Ele_Wind; bonus bDex,50; bonus bStr,20; bonus bAspdRate,10; bonus3 bAutoSpell,"MG_THUNDERSTORM",10,100; autobonus "{ bonus bSplashRange,1; }",50,10000; },{},{}
 1531,Spanner,Wrench,5,20,,2500,115,,1,0,0x00008110,63,2,2,3,55,1,8,{ bonus2 bAddEff,Eff_Blind,100; bonus2 bAddEff,Eff_Stun,100; bonus2 bAddEff,Eff_Poison,100; bonus2 bAddEff,Eff_Freeze,100; },{},{}
@@ -889,7 +889,7 @@
 1537,Quadrille_C,Refined Quadrille,5,1,,0,193,,1,0,0x00008110,63,2,2,4,0,0,8,{ bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bAddRace,RC_Demon,40; bonus2 bAddRace,RC_Undead,40; },{},{}
 1538,Spike_,Spike,5,20,,700,85,,1,2,0x00008110,63,2,2,4,40,1,8,{ bonus bCritical,40; bonus bDefRate,-67; bonus bDef2Rate,-67; },{},{}
 1539,Golden_Mace_,Golden Mace,5,20,,800,110,,1,2,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus bUnbreakableWeapon; },{},{}
-1540,Grand_Cross_,Grand Cross,5,20,,1500,140,,1,1,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
+1540,Grand_Cross_,Grand Cross,5,20,,1500,140,,1,1,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
 1541,Nemesis,Nemesis,5,20,,900,120,,1,0,0x00008110,63,2,2,4,60,1,8,{ bonus bAtkEle,Ele_Holy; bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus3 bAutoSpell,"AL_CRUCIS",1+getrefine(),100; autobonus "{ bonus bBaseAtk,50; }",10,20000,BF_WEAPON,"{ specialeffect2 EF_BLOODDRAIN; }"; },{},{}
 1542,BF_Morning_Star1,Valorous Battlefield Morning Star,5,20,,0,105,,1,0,0x0004C5B3,63,2,2,3,80,1,8,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon; },{},{}
 1543,BF_Morning_Star2,Brave Battlefield Morning Star,5,20,,0,105,,1,0,0x0004C5B3,63,2,2,3,80,1,8,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus bUnbreakableWeapon; autobonus "{ bonus2 bAddEff,Eff_Stun,5000; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
@@ -1012,14 +1012,14 @@
 1658,P_Staff3,Eden Staff III,5,0,,0,60:170,,1,0,0x00818314,63,2,2,3,60,0,10,{ bonus bInt,4; },{},{}
 1659,Recovery_Light,Light of Recovery,5,56000,,400,30:160,,1,1,0x00000100,63,2,2,4,110,1,10,{ bonus bAtkEle,Ele_Holy; bonus bUnbreakableWeapon; .@r = getrefine(); bonus bHealPower,(.@r*6); bonus2 bSkillUseSP,"AL_HEAL",-(.@r*10); bonus2 bSkillUseSP,"AB_CHEAL",-(.@r*12); bonus2 bSkillUseSP,"AB_HIGHNESSHEAL",-(.@r*14); },{},{}
 1660,Wand_Of_Affection2,Empowered Wand Of Affection,5,20,,500,30:180,,1,1,0x00000100,63,2,2,3,130,1,10,{ bonus bAtkEle,Ele_Holy; bonus bInt,4; bonus bHealPower,20; },{},{}
-1661,Mental_Destroyer,Mental Destroyer,5,20,,1400,100:50,,1,0,0x00000200,63,2,2,4,95,1,10,{ bonus bInt,10; bonus bUnbreakableWeapon; bonus bUseSPrate,100; bonus bMdef,20; bonus2 bSPVanishRate,10000,5; if(getrefine()>5) { bonus2 bSPVanishRate,10000,5; } },{},{}
+1661,Mental_Destroyer,Mental Destroyer,5,20,,1400,100:50,,1,0,0x00000200,63,2,2,4,95,1,10,{ .@r = getrefine(); bonus bInt,10; bonus bUnbreakableWeapon; bonus bUseSPrate,100; bonus bMdef,20; bonus3 bSPVanishRate,1000,5+(.@r>5?3:0),BF_WEAPON|BF_MAGIC|BF_MISC; },{},{}
 1662,Bone_Wand_,Evil Bone Wand,5,20,,700,40:110,,1,2,0x00818314,63,2,2,3,24,1,10,{ bonus bInt,4; bonus bAtkEle,Ele_Undead; },{},{}
 1663,Staff_Of_Bordeaux_,Staff Of Bordeaux,5,20,,500,30:180,,1,2,0x00010200,18,2,2,4,50,1,10,{ bonus bInt,2; bonus bDex,1; if(getskilllv("SA_DRAGONOLOGY") == 5) { bonus bUseSPrate,-15; bonus bInt,3; } },{},{}
 1664,Thorn_Staff_,Thorn Staff of Darkness,5,10,,700,60:160,,,1,0x14,50,2,2,4,75,1,8,{ bonus bInt,3; bonus bDex,3; bonus bVariableCastrate,-getrefine(); bonus bAtkEle,Ele_Dark; },{},{}
 1665,Piercing_Staff_,Piercing Staff,5,20,,500,80:145,,1,2,0x00018314,18,2,2,3,70,1,10,{ .@r = getrefine(); bonus bInt,4; bonus2 bIgnoreMdefClassRate,Class_Normal,10+.@r; bonus2 bIgnoreMdefClassRate,Class_Boss,10+.@r; },{},{}
 1666,Healing_Staff_,Healing Staff,5,20,,400,10:105,,1,2,0x00008110,63,2,2,3,55,1,10,{ bonus bAtkEle,Ele_Holy; bonus bHealPower,(getrefine()*3/2); },{},{}
 1667,TE_Woe_Staff,TE Woe Staff,5,0,,0,50:100,,1,0,0x00818315,63,2,2,3,40,1,10,{ bonus2 bMagicAddRace,RC_Player,10; bonus3 bAddEff,Eff_Blind,1000,ATF_MAGIC; bonus bHPRecovRate,5; bonus bSPRecovRate,5; },{},{}
-1668,Sword_Stick,Sword Stick,5,10,,500,120:150,,,2,0x800200,63,2,2,4,80,1,10,{ bonus bAspdRate,10; },{},{}
+1668,Sword_Stick,Sword Stick,5,10,,500,120:150,,,2,0x810204,63,2,2,4,80,1,10,{ bonus bAspdRate,10; },{},{}
 1669,Thanos_Staff,Thanos Staff,5,10,,1000,100:200,,1,1,0x00018314,56,2,2,4,120,1,10,{ bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus bHealPower,15; bonus bMagicHPGainValue,500; bonus bMagicSPGainValue,50; bonus2 bHPLossRate,100,10000; },{},{ heal -1000,0; }
 1670,RWC_Memory_Staff,RWC Memory Staff,5,20,,500,25:30,,1,1,0x00818315,63,2,2,3,1,1,10,{ .@r = getrefine(); bonus bMatk,30*(.@r/3); if(.@r>=6) bonus2 bMagicAddClass,Class_All,(.@r>=9?10:5); if(.@r>=9) bonus4 bAutoSpell,"HW_MAGICPOWER",1,10,0; },{},{}
 1671,Devil_Won_Staff,Evil Slayer Vanquisher Staff,5,0,,800,30:155,,,1,0x00818315,63,2,2,3,100,1,10,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus2 bMagicAddRace,RC_Undead,10; bonus2 bMagicAddRace,RC_Demon,10; .@r = getrefine(); if(.@r>=9) { .@dmg = 5; if(.@r>=12) { .@dmg += 7; } bonus bMatkRate,.@dmg; } },{},{}
@@ -2361,7 +2361,7 @@
 4168,Dark_Lord_Card,Dark Lord Card,6,20,,10,,,,,,,,64,,,,,{ bonus3 bAutoSpellWhenHit,"WZ_METEOR",5,100; },{},{}
 4169,Dark_Illusion_Card,Dark Illusion Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMaxHPrate,-10; bonus bMaxSPrate,-10; bonus bVariableCastrate,-10; },{},{}
 4170,Dark_Frame_Card,Dark Frame Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Stone,600; },{},{}
-4171,Dark_Priest_Card,Dark Priest Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPVanishRate,50,10; if(BaseJob==Job_Sage) bonus bSPDrainValue,1; },{},{}
+4171,Dark_Priest_Card,Dark Priest Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bSPVanishRate,50,10,BF_WEAPON|BF_MAGIC|BF_MISC; if(BaseJob==Job_Sage) bonus bSPDrainValue,1; },{},{}
 4172,The_Paper_Card,The Paper Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,20; bonus bSPDrainValue,-1; },{},{}
 4173,Demon_Pungus_Card,Demon Pungus Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Sleep,600; },{},{}
 4174,Deviling_Card,Deviling Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,Ele_Neutral,50; bonus2 bSubEle,Ele_Water,-50; bonus2 bSubEle,Ele_Earth,-50; bonus2 bSubEle,Ele_Fire,-50; bonus2 bSubEle,Ele_Wind,-50; bonus2 bSubEle,Ele_Poison,-50; bonus2 bSubEle,Ele_Holy,-50; bonus2 bSubEle,Ele_Dark,-50; bonus2 bSubEle,Ele_Ghost,-50; bonus2 bSubEle,Ele_Undead,-50; },{},{}
@@ -3069,7 +3069,7 @@
 4890,Mdef1,MDEF+1,6,10,,,,,,,,,,,,,,,{ bonus bMdef,1; },{},{}
 4891,Mdef3,MDEF+3,6,10,,,,,,,,,,,,,,,{ bonus bMdef,3; },{},{}
 4892,Mdef5,MDEF+5,6,10,,,,,,,,,,,,,,,{ bonus bMdef,5; },{},{}
-4893,Def15,DEF+15,6,10,,,,,,,,,,,,,,,{ bonus bMdef,15; },{},{}
+4893,Def15,DEF+15,6,10,,,,,,,,,,,,,,,{ bonus bDef,15; },{},{}
 4894,Atk4p,ATK + 4%,6,10,,,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,4; },{},{}
 4895,Atk5p,ATK + 5%,6,10,,,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,5; },{},{}
 4896,Matk2p,MATK + 2%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,2; },{},{}
@@ -5999,11 +5999,54 @@
 9060,Brownie_Egg,Brownie Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9061,Marin_Egg,Marin Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9062,Novice_Poring_Egg,Novice Poring Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9063,Woodie_Egg,Woodie Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9064,Elephant_Egg,Elephant Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9065,Gorilla_Egg,Gorilla Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9066,Lion_Egg,Lion Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9067,Rhino_Egg,Rhino Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9068,Blue_Unicorn_Egg,Blue Unicorn Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9069,Mastering_Egg,Mastering Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9070,Savage_Egg,Savage Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 9071,Grand_Peco_Peco_Egg,Grand Peco Peco Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9072,Orc_Hero_Egg,Orc Hero Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9073,Orc_Lord_Egg,Orc Lord Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9074,Rubylit_Egg,Rubylit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9075,Sapphilit_Egg,Sapphilit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9076,Emelit_Egg,Emelit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9077,Topalit_Egg,Topalit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9078,Amelit_Egg,Amelit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9079,Mythlit_Egg,Mythlit Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9080,Tamadora_Egg,Tamadora Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+
 9087,High_Orc_Egg,High Orc Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9088,Angeling_Egg,Angeling Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9089,Am_Mut_Egg,Am Mut Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9090,Little_Isis_Egg,Little Isis Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9091,Choco_Egg,Choco Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9092,Eggring_Egg,Eggring Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9093,Hyegun_Egg,Hyegun Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9094,Dr_Lunatic_Egg,Leaf Lunatic Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9095,Nine_Tail_Egg,Nine Tail Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9096,Cat_o_Nine_Tail_Egg,Cat o Nine Tail Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9097,Diabolic_2_Egg,Diabolic Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9098,Fire_Deleter_Egg,Fire Deleter Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9099,Teddy_Bear_Egg,Teddy Bear Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9100,Gremlin_Egg,Gremlin Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9101,Scatleton_Egg,Scatleton Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9102,Mummy_Egg,Mummy Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9103,Willow_Egg,Willow Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9104,Roween_Egg,Roween Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9105,Hodremlin_Egg,Hodremlin Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9106,Metaller_Egg,Metaller Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9107,Ancient_Mummy_Egg,Ancient Mummy Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9108,Xm_Teddy_Bear_Egg,Xmas Teddy Bear Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9109,Sweet_Drops_Egg,Sweet Drops Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+
+9111,Phreeoni_Egg,Phreeoni Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9112,Moonlight_Egg,Moonlight Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9113,Skelion_Egg,Skelion Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9114,Pouring_Egg,Pouring Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
+9115,Bacsojin2_Egg_,Bacsojin Egg,7,20,,0,,,,,,,,,,,,,{},{},{}
 //===================================================================
 // Pet Accessories
 //===================================================================
@@ -6046,6 +6089,9 @@
 10037,Black_Butterfly_Mask,Black Butterfly Mask,8,20,,0,,,,,,,,,,,,,{},{},{}
 10038,Horn_Protector,Horn Barrier,8,20,,0,,,,,,,,,,,,,{},{},{}
 10039,Tw_Backpack,Tw Backpack,8,20,,0,,,,,,,,,,,,,{},{},{}
+10040,Red_Bell_Necklace,Red Bell Necklace,8,20,,0,,,,,,,,,,,,,{},{},{}
+10041,Shiny_Star_Button,Shiny Star Button,8,20,,0,,,,,,,,,,,,,{},{},{}
+10042,Dark_Mane,Dark Mane,8,20,,0,,,,,,,,,,,,,{},{},{}
 //===================================================================
 // Misc "Etc" Books
 //===================================================================
@@ -6626,7 +6672,7 @@
 12396,Fools_Day_Box,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ .@rnd = rand(1,10); if(.@rnd==1) itemskill "AL_TELEPORT",1; else if(.@rnd==2) itemskill "AL_TELEPORT",3; else if(.@rnd==3) percentheal 50,0; else if(.@rnd==4) percentheal 0,50; else if(.@rnd==5) end; else if(.@rnd==6) getitem 512,1; else if(.@rnd==7) itemskill "ALL_REVERSEORCISH",1; else if(.@rnd==8) specialeffect2 EF_MAPPILLAR2; else if(.@rnd==9) specialeffect2 EF_ANGEL2; else specialeffect2 EF_COIN; },{},{}
 12397,Fools_Day_Box2,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ .@rnd = rand(1,10); if(.@rnd==1) itemskill "TF_DETOXIFY",1; else if(.@rnd==2) itemskill "TF_PICKSTONE",1; else if(.@rnd==3) itemskill "BA_FROSTJOKER",1; else if(.@rnd==4) itemskill "DC_SCREAM",1; else if(.@rnd==5) end; else if(.@rnd==6) getitem 909,1; else if(.@rnd==7) itemskill "AL_RUWACH",1; else if(.@rnd==8) specialeffect2 EF_BEGINASURA; else if(.@rnd==9) specialeffect2 EF_MVP; else specialeffect2 EF_CURSEATTACK; },{},{}
 12398,PCBang_Gift_Box,PCRoom Gift Box,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
-12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
+12399,Castle_Treasure_Box,Castle Treasure Box,2,20,,1000,,,,,0xFFFFFFFF,63,2,,,,,,{ Zeny += 1000000; },{},{}
 12400,Water_Of_Blessing_,Water Of Blessing,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 12401,Rune_Kn_Test_Int,Rune Kn Test Int,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INCINT,300000,40; },{},{}
 12402,29Fruit,29Fruit,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 5,5; },{},{}
@@ -7396,13 +7442,13 @@
 // Bullets
 //===================================================================
 13200,Bullet,Bullet,10,1,,1,25,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
-13201,Silver_Bullet,Silver Bullet,10,15,,2,15,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
-13202,Shell_Of_Blood,Bloody Shell,10,30,,2,30,,,,0x41000000,63,2,32768,,1,,3,{ bonus2 bAddEff,Eff_Bleeding,100; },{},{}
-13203,Flare_Sphere,Flare Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Fire; },{},{}
-13204,Lighting_Sphere,Lightning Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Wind; },{},{}
-13205,Poison_Sphere,Poison Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,500; },{},{}
-13206,Blind_Sphere,Blind Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEff,Eff_Blind,500; },{},{}
-13207,Freezing_Sphere,Freezing Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Water; },{},{}
+13201,Silver_Bullet,Surplus Silver Bullet,10,15,,2,15,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
+13202,Shell_Of_Blood,Surplus Bloody Shell,10,30,,2,30,,,,0x41000000,63,2,32768,,1,,3,{ bonus2 bAddEff,Eff_Bleeding,100; },{},{}
+13203,Flare_Sphere,Surplus Flare Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Fire; },{},{}
+13204,Lighting_Sphere,Surplus Lightning Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Wind; },{},{}
+13205,Poison_Sphere,Surplus Poison Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,500; },{},{}
+13206,Blind_Sphere,Surplus Blind Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEff,Eff_Blind,500; },{},{}
+13207,Freezing_Sphere,Surplus Freezing Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Water; },{},{}
 13208,Gong_Bug,Sow Bug,10,0,,5,50,,,,0x41000000,63,2,32768,,50,,3,{ bonus2 bAddEff,Eff_Stun,1000; },{},{}
 13210,Slug_Bullet_1,Slug Ammunition L,10,250,,250,30,,,,,,,32768,,,,3,{},{},{}
 13211,Slug_Bullet_2,Slug Ammunition M,10,500,,500,30,,,,,,,32768,,,,3,{},{},{}
@@ -7525,7 +7571,7 @@
 13406,Edger,Edger,5,20,,0,120,,1,0,0x000654E2,63,2,2,1,0,0,2,{ bonus2 bAddClass,Class_All,50; },{},{}
 13407,Nagan_C,Refined Nagan,5,1,,0,148,,1,0,0x000654E2,63,2,2,4,0,0,2,{ skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,40; bonus2 bAddRace,RC_Player,40; },{},{}
 13408,Fire_Brand_C,Refined Fireblend,5,1,,0,120,,1,0,0x000654E2,63,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus bInt,2; skill "MG_FIREBOLT",5; bonus3 bAutoSpell,"MG_FIREBOLT",5,100; },{},{}
-13409,Immaterial_Sword_C,Refined Immaterial Sword,5,1,,0,160,,1,0,0x000654E2,63,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Ghost; bonus2 bSPVanishRate,80,45; bonus bUnbreakableWeapon; },{},{}
+13409,Immaterial_Sword_C,Refined Immaterial Sword,5,1,,0,160,,1,0,0x000654E2,63,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Ghost; bonus3 bSPVanishRate,80,45,BF_WEAPON|BF_MAGIC|BF_MISC; bonus bUnbreakableWeapon; },{},{}
 13410,BF_Sword1,Valorous Gladiator Blade,5,20,,0,115,,1,0,0x000654E3,63,2,2,3,80,1,2,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon; },{},{}
 13411,BF_Sword2,Brave Gladiator Blade,5,20,,0,115:74,,1,0,0x000654E3,63,2,2,3,80,1,2,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus bMatkRate,10; bonus bUnbreakableWeapon; },{},{}
 13412,Twin_Edge_B,Twin Edge of Naght Sieger,5,20,,1500,150,,1,3,0x000654E2,18,2,2,4,75,1,2,{ bonus bAtkEle,Ele_Water; skill "MG_FROSTDIVER",5; autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",50,5000; },{},{}
@@ -7535,7 +7581,7 @@
 13416,Krieger_Onehand_Sword1,Glorious Flamberge,5,20,,0,130,,1,0,0x000654E3,63,2,2,4,80,1,2,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon; .@r = getrefine(); if(.@r>5) { bonus2 bAddRace,RC_DemiHuman,pow(min(14,.@r)-4,2); bonus2 bAddRace,RC_Player,pow(min(14,.@r)-4,2); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(.@r>6) bonus bAspdRate,5; if(.@r>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,"SM_BASH","NPC_CRITICALWOUND",2,200; } },{},{}
 13417,Krieger_Onehand_Sword2,Glorious Rapier,5,20,,0,130:80,,1,0,0x000654E3,63,2,2,4,80,1,2,{ .@r = getrefine(); bonus bInt,.@r-5; bonus bUnbreakableWeapon; if(.@r>5) bonus bUseSPrate,-10; if(.@r>8) bonus bInt,5; },{},{}
 13418,Krieger_Onehand_Sword3,Glorious Holy Avenger,5,20,,0,130:80,,1,0,0x000444A2,63,2,2,4,80,1,2,{ .@r = getrefine(); bonus bInt,.@r-5; bonus bUnbreakableWeapon; if(.@r>5) bonus bUseSPrate,-10; if(.@r>8) bonus4 bAutoSpellOnSkill,"PA_PRESSURE","PR_LEXAETERNA",1,1000; if(.@r>9) bonus bInt,5; },{},{}
-13419,Holy_Saber,Holy saber,5,20,,0,160,,1,0,0x000654E2,63,2,2,3,0,0,2,{ bonus2 bAtkEle,Ele_Undead,40; bonus2 bMagicAddEle,Ele_Undead,40; },{},{}
+13419,Holy_Saber,Holy saber,5,20,,0,160,,1,0,0x000654E2,63,2,2,3,0,0,2,{ bonus2 bAddEle,Ele_Undead,40; bonus2 bMagicAddEle,Ele_Undead,40; },{},{}
 13420,Honglyun's_Sword,Honglyun's Sword,5,20,,1200,160,,1,1,0x000654E2,63,2,2,4,70,1,2,{ bonus bAtkEle,Ele_Fire; bonus bStr,2; bonus bInt,2; bonus3 bAutoSpell,"WZ_METEOR",1,5; },{},{}
 13421,Ruber,Ruber,5,20,,1500,170,,1,1,0x000444A2,18,2,2,3,50,1,2,{ autobonus "{ bonus2 bSkillAtk,\"KN_BOWLINGBASH\",20; bonus2 bSkillAtk,\"SM_BASH\",20; }",5,15000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
 13422,Flamberge_C,Flamberge,5,0,,0,185,,1,0,0x00004080,63,2,2,3,1,0,2,{ bonus bUnbreakableWeapon; bonus2 bAddSize,Size_All,40; },{},{}
@@ -9304,7 +9350,7 @@
 17158,Flame_Gemstone_Box,Flame Gemstone Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 6114,10; },{},{}
 17159,Change_Name_Card_Box,Name Change Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 17160,Character_Name_Change_Card_Box,Character Name Change Card Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
-17162,Boarding_Halter_Box7,Boarding Halter Box7,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
+17162,Boarding_Halter_Box7,Boarding Halter Box7,18,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ rentitem 12622,604800; },{},{}
 17165,Challenge_Kit,Challenge Kit,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Challenge_Kit); /*getitem Blessing_10_Scroll,20; getitem Inc_Agi_10_Scroll,20;*/ },{},{}
 17176,Boarding_Halter_Box3,Halter Lead Box[Trial],18,20,,0,,,,,0xFFFFFFFF,63,2,,,,,0,{},{},{}
 17181,Jan_Groove_Box,Jan Groove Box,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
@@ -9537,7 +9583,7 @@
 18110,Big_CrossBow,Giant Crossbow,5,56000,,900,160,,5,2,0x00000800,63,2,34,4,110,1,11,{ .@r = getrefine(); bonus2 bSkillAtk,"RA_ARROWSTORM",(.@r*5); bonus2 bSkillUseSP,"RA_ARROWSTORM",-(.@r*5); if(readparam(bAgi)>=120){ bonus bAspd,1; } },{},{}
 18111,Creeper_Bow,Creeper Bow,5,56000,,1500,150,,5,2,0x00080800,63,2,34,3,120,1,11,{ bonus bDex,1; bonus3 bAutoSpell,"PF_SPIDERWEB",1,200; },{},{}
 18112,Upg_Bow,Upg Bow,5,20,,600,60,,5,1,0x000A0848,63,2,34,3,1,1,11,{ .@r = getrefine(); bonus bBaseAtk,(.@r*7); bonus bLongAtkRate,(.@r*2); if(BaseJob==Job_Hunter) bonus bBaseAtk,20; if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10); },{},{}
-18113,Velum_Arbalest,Vellum Arbalest,5,20,,1100,50,,5,0,0x000A0848,63,2,34,4,95,1,11,{ bonus3 bSPVanishRaceRate,RC_Player,10000,4; bonus bAspd,-5; },{},{}
+18113,Velum_Arbalest,Vellum Arbalest,5,20,,1100,50,,5,0,0x000A0848,63,2,34,4,95,1,11,{ bonus3 bSPVanishRaceRate,RC_Player,1000,4; bonus bAspd,-5; },{},{}
 18114,Velum_CrossBow,Vellum CrossBow,5,20,,1100,110,,5,0,0x000A0848,63,2,34,4,95,1,11,{ bonus2 bAddRace,RC_Player,30+getrefine(); bonus2 bIgnoreDefRaceRate,RC_Player,30; },{},{}
 18115,Orc_Archer_Bow_,Orc Archer Bow,5,20,,1600,120,,5,1,0x000A0848,63,2,34,3,65,1,11,{},{},{}
 18116,Metal_Bow,Metal Bow,5,20,,0,50,,5,1,0x00080800,63,2,34,3,1,1,11,{ .@r = getrefine(); if(BaseJob==Job_Hunter && Upper!=2) bonus bBaseAtk,10; bonus bBaseAtk,(.@r*3); bonus bLongAtkRate,.@r; .@i = min(BaseLevel/10,12); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
@@ -9661,7 +9707,7 @@
 18590,Gemma_Hairband,Gemma Hairband,4,20,,200,,3,,1,0xFFFFFFFF,63,2,256,,10,1,564,{ bonus bMdef,3; },{},{}
 18591,Mini_Glasses_,Mini Glasses,4,20,,100,,2,,1,0xFFFFFFFE,63,2,512,,0,0,47,{},{},{}
 18592,Nestea_Hat,Nestea Hat,4,20,,200,,5,,0,0xFFFFFFFF,63,2,256,,0,1,756,{ bonus bMdef,5; },{},{}
-18593,Fancy_Mini_Crown,Fancy Mini Crown,4,20,,100,,2,,1,0xFFFFFFFF,63,2,256,,30,1,707,{ bonus bInt,1; bonus bMdef,5; bonus bVariableCastRate,-3; bonus bHealPower,3; bonus bSkillUseSP,-3; .@r = getrefine(); bonus bMatkRate,(.@r>6)?(5):((.@r>4)?(4):(3)); },{},{}
+18593,Fancy_Mini_Crown,Fancy Mini Crown,4,20,,100,,2,,1,0xFFFFFFFF,63,2,256,,30,1,707,{ bonus bInt,1; bonus bMdef,5; bonus bVariableCastRate,-3; bonus bHealPower,3; bonus bUseSPrate,-3; .@r = getrefine(); bonus bMatkRate,(.@r>6)?(5):((.@r>4)?(4):(3)); },{},{}
 18594,Magni_Cap_,Magni Cap,4,30000,,1000,,9,,1,0xFFFFFFFE,63,2,256,,0,1,250,{ bonus bStr,2; },{},{}
 18595,Horn_Of_Ancient,Horn of Ancient,4,40,,200,,8,,1,0xFFFFFFFF,63,2,256,,50,1,757,{ bonus2 bSubClass,Class_Boss,10; bonus2 bAddClass,Class_Boss,10; .@r = getrefine(); if (.@r > 6) { autobonus "{ bonus bBaseAtk,100; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; } if (.@r > 8) { bonus2 bSubClass,Class_Boss,10; bonus2 bAddClass,Class_Boss,10; } },{},{}
 18596,Sprout_Hat,Sprout Hat,4,20,,200,,4,,0,0xFFFFFFFF,63,2,256,,70,1,758,{ skill "WZ_HEAVENDRIVE",3; },{},{}
@@ -10992,7 +11038,7 @@
 //===================================================================
 21000,Upg_Twohand_Sword,Upg Two-Handed Sword,5,20,,1500,100,,1,1,0x00004082,63,2,34,3,1,1,3,{ .@r = getrefine(); bonus bBaseAtk,(.@r*12); bonus bMatk,(.@r*5); if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*10); },{},{}
 21001,Velum_Claymore,Vellum Claymore,5,20,,3500,260,,1,0,0x00004082,63,2,34,4,95,1,3,{ bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_Player,30; .@r = getrefine(); if(.@r>=6) { bonus2 bAddRace,RC_Player,40; } if(.@r>=9) { autobonus2 "{ bonus bShortWeaponDamageReturn,20; bonus bMagicDamageReturn,20; }",6000,2000,BF_WEAPON,"{ specialeffect2 EF_REFLECTSHIELD; }"; } },{},{}
-21002,Velum_Katzbalger,Vellum Katzbalger,5,20,,2500,100,,1,0,0x00004082,63,2,34,4,95,1,3,{ bonus3 bHPVanishRaceRate,RC_Player,10000,8; },{},{}
+21002,Velum_Katzbalger,Vellum Katzbalger,5,20,,2500,100,,1,0,0x00004082,63,2,34,4,95,1,3,{ bonus3 bHPVanishRaceRate,RC_Player,1000,8; },{},{}
 21003,Muramasa_,Muramasa,5,20,,1000,155,,1,2,0x00004082,63,2,34,4,48,1,3,{ bonus bCritical,30; bonus bAspdRate,8; bonus2 bAddEff2,Eff_Curse,10; },{},{}
 21004,Alca_Bringer_,Alca Bringer,5,20,,3400,280,,2,2,0x00004082,63,2,34,3,100,1,3,{},{},{}
 21005,Metal_Two_Hand_Sword,Metal Two Hand Sword,5,20,,0,95,,1,1,0x00004082,63,2,34,3,1,1,3,{ .@r = getrefine(); bonus bBaseAtk,(.@r*6); bonus bMatk,(.@r*2); .@i = min(BaseLevel/10,12); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
@@ -11117,7 +11163,7 @@
 22535,WorkerScroll_A,Scroll Summoning Workers(Male),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
 22536,WorkerScroll_B,Scroll Summoning Workers(Female),2,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
 22537,PrizeOfHero,Prize Of Hero,2,0,,100,,,,0,0xFFFFFFFF,63,2,,,1,,,{ getrandgroupitem(IG_PrizeOfHero,1); },{},{}
-22538,Hanbok_bag,Hanbok bag,2,10,,10,,,,0,0xFFFFFFFF,63,2,,,1,,,{},{},{}
+22538,Hanbok_bag,Hanbok bag,2,0,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_HANBOK,600000,0; },{},{}
 22540,Runstone_Lux,Lux Anima Runestone,11,2,,100,,,,,0xFFFFFFFF,56,2,,,,,,{ itemskill "RK_LUXANIMA",1; },{},{}
 22541,PC_Room_Coupon_Box_VI,PC Room Coupon Box VI,18,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{},{},{}
 22542,Center_Potion_B,Concentration Potion,2,10,,100,,,,0,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_ASPDPOTION0,1800000,4; },{},{}
@@ -11201,7 +11247,7 @@
 22693,Record_Fragment3,Record Fragment,0,,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "un_bk_q",217,346; if (callfunc("F_time_limit_recorder") == 1) { recorder_quest_type = 3; } },{},{}
 22694,Record_Fragment4,Record Fragment,0,,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "un_bk_q",273,235; if (callfunc("F_time_limit_recorder") == 1) { recorder_quest_type = 4; } },{},{}
 22695,Record_Fragment5,Record Fragment,0,,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ warp "un_bk_q",275,290; if (callfunc("F_time_limit_recorder") == 1) { recorder_quest_type = 5; } },{},{}
-22699,Test_Reagent,Test Reagent,3,10,,0,,,,,,,,,,,,,{},{},{}
+22699,Test_Reagent,Test Reagent,2,,,30,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus bFlee,100;",5,9; sc_start SC_BLIND,5000,0,10000,0; },{},{}
 22700,Jumping_Support_Box,Jumping Support Box,18,10,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ /*TODO: getitem 12529,1; getitem 12323,200; getitem 12324,50; and 5 boxes that containing quivers + oridecons*/ },{},{}
 22702,STR_Soul_Potion,STR Reduction Potion,11,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashReduceStat",bStr,-1,22702; },{},{}
 22703,AGI_Soul_Potion,STR Reduction Potion,11,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashReduceStat",bAgi,-1,22703; },{},{}
@@ -11318,8 +11364,9 @@
 //
 23012,S_Small_Mana_Potion,[Sale] Small Mana Potion,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus2 bRegenPercentSP,5,5000;",600,9; /* fix me: unknown flag and specialeffect ; disabled when LK_BERSERK */ },{},{}
 23016,Cursed_Fragment,Cursed Fragment,2,1,,1,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc("F_Cursed_Fragment"); },{},{}
-23038,S_Slim_White_Box,[Sale] Slim White Potion Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 547,200; },{},{}
-23043,S_Seed_Of_Yggdrasil_Box,[Sale] Yggdrasil Seed Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 608,30; },{},{}
+23038,S_Slim_White_Box,[Sale] Slim White Potion Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 11573,200; },{},{}
+23042,S_Seed_Of_Yggdrasil,[NotForSale]Yggdrasil Seed,0,0,,300,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 50,50; },{},{}
+23043,S_Seed_Of_Yggdrasil_Box,[Sale] Yggdrasil Seed Box,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 23042,30; },{},{}
 23046,S_Mystic_Powder,[Sale] Mystic Powder,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus bFlee,20; bonus bLuk,10;",300,9; /* fix me: unknown flag and specialeffect */ },{},{}
 23047,S_Blessing_Tyr,[Sale] Blessing of Tyr,2,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_FLEEFOOD,300000,30; sc_start SC_HITFOOD,300000,30; sc_start SC_ATKPOTION,300000,20; sc_start SC_MATKPOTION,300000,20; },{},{}
 23048,S_Resilience_Potion,[Sale] Resilience Enhancement Potion,2,,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ bonus_script "bonus bAddItemHealRate,20;",1800,9; /* fix me: unknown flag and specialeffect */ },{},{}
@@ -11334,6 +11381,9 @@
 23126,Bullet_Case_Poison,Poison Bullet Cartridge,2,10,,250,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 13231,500; },{},{}
 23127,Bullet_Case_Blind,Blind Bullet Cartridge,2,10,,250,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 13232,500; },{},{}
 23177,Kafra_Card_,Kafra Card,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_CashStore"; },{},{}
+23188,Unprocessed_Parts,Unprocessed Parts,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 1632; },{},{}
+23189,Small_Needle_Kit,Small Needle Kit,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 1622; },{},{}
+23187,Sap_Liquid,Sap Liquid,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 1180; },{},{}
 23191,Varetyr_Spear_Scroll_1_5,Level 5 Varetyr Spear,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "SO_VARETYR_SPEAR",5; },{},{}
 23192,Diamond_Dust_Scroll_1_5,Level 5 Diamond Dust,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "SO_DIAMONDDUST",5; },{},{}
 23193,Crimson_Rock_Scroll_1_5,Level 5 Crimson Rock,11,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "WL_CRIMSONROCK",5; },{},{}
@@ -11342,6 +11392,7 @@
 //
 23228,Hazy_Mooncake,Hazy Mooncake,0,768,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /* unknown */ },{},{}
 //
+23256,Elixir_Bandages,Elixir Bandages,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ pet 1041; },{},{}
 23277,Mado_Box,Emergency Magic Gear,2,10000,,3000,,,,,0x00000400,56,2,,,100,,,{ setmadogear 1; },{},{}
 23280,N_Fly_Wing_,Novice Fly Wing,11,10,,0,,,,,0xFFFFFFFF,63,2,,,1:98,,,{ itemskill "AL_TELEPORT",1; },{},{}
 23288,Compressed_Wing_Of_Fly,Compressed Fly Wing,11,1000,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "AL_TELEPORT",1; },{},{}
@@ -11660,6 +11711,9 @@
 25185,Locket_Pendant,Locket Pendant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25187,Slug_Bullet,Slug Bullet,3,1200,,1200,,,,,,,,,,,,,{},{},{}
 25223,Para_Team_Coin,Eden Group Coin,3,0,,0,,,,,,,,,,,,,{},{},{}
+25231,Suspicious_Bottle,Suspicious Bottle,3,0,,10,,,,,,,,,,,,,{},{},{}
+25232,Cheap_Lubricant,Cheap Lubricant,3,0,,10,,,,,,,,,,,,,{},{},{}
+25233,Cotton_Tufts,Cotton Tufts,3,0,,10,,,,,,,,,,,,,{},{},{}
 25238,New_Normal_Lubricant,New Normal Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25239,New_Advanced_Lubricant,New Advanced Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25246,Juice_Mix_Package,Juice Mix Package,3,0,,0,,,,,,,,,,,,,{},{},{}
@@ -11683,6 +11737,9 @@
 25283,Brown_Muffler,Brown Muffler,3,420,,10,,,,,,,,,,,,,{},{},{}
 25284,Swamp_Bug_Shell,Swamp Bug Shell,3,0,,10,,,,,,,,,,,,,{},{},{}
 25285,Brown_Rat_Tail,Brown Rat Tail,3,0,,10,,,,,,,,,,,,,{},{},{}
+25290,Sweets_Festival_Coin,Sweets Festival Coin,3,0,,0,,,,,,,,,,,,,{},{},{}
+25375,Powerful_Soul_Essence,Powerful Soul Essence,3,0,,0,,,,,,,,,,,,,{},{},{}
+25377,Luxurious_Pet_Food,Luxurious Pet Food,3,0,,10,,,,,,,,,,,,,{},{},{}
 //
 25464,World_Moving_Rights,World Moving Rights,3,20,,0,,,,,,,,,,,,,{},{},{}
 //
@@ -11795,7 +11852,7 @@
 27148,Material_Chimera_Card,Material Chimera Card,6,20,,10,,,,,,,,136,,,,,{ bonus bFlee,(BaseLevel >= 90 ? 20 : 10); },{},{}
 27149,Heart_Hunter_Card,Heart Hunter Card,6,20,,10,,,,,,,,2,,,,,{ .@type = getiteminfo(getequipid(EQI_COMPOUND_ON),11); .@r = getrefine(); if(.@type == 17 || .@type == 18 || .@type == 21){ bonus bLongAtkRate,5+.@r+(.@r >= 10 ? 5 : 0); } },{},{}
 27150,Toxic_Enchanted_Chimera_Card,Toxic Enchanted Chimera Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHP,1000; bonus bMaxSP,200; if(getrefine() >= 12){ bonus bMaxHPrate,15; bonus bMaxSPrate,15; } },{},{}
-27151,Heart_Hunter_Evil_Card,Heart Hunter Evil Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,SC_FREEZING,1000 + (readparam(bInt) >= 110 ? 5 : 0); bonus bMdef,5; },{},{}
+27151,Heart_Hunter_Evil_Card,Heart Hunter Evil Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Freeze,1000 + (readparam(bInt) >= 110 ? 5 : 0); bonus bMdef,5; },{},{}
 27152,Cutie_Card,Cutie Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,10; .@r = getrefine()/2; bonus bAgi,.@r; bonus bAspdRate,.@r; },{},{}
 27157,Wood_Goblin_Card,Wood Goblin Card,6,20,,10,,,,,,,,16,,,,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Water,(.@r >= 9 ? 10 : 5); bonus2 bAddEle,Ele_Earth,(.@r >= 9 ? 10 : 5); bonus2 bSubDefEle,Ele_Water,-5; bonus2 bSubDefEle,Ele_Earth,-5; },{},{}
 27158,Les_Card,Les Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Wind,30; },{},{}
@@ -12100,6 +12157,7 @@
 29009,Rune_of_Vitality_Lv_1,Rune of Vitality Lv 1,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,5; } if (.@r>=10) { bonus bMaxHPrate,5; } },{},{}
 29010,Rune_of_Vitality_Lv_2,Rune of Vitality Lv 2,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,6; } if (.@r>=11) { bonus bVit,1; bonus bMaxHPrate,7; } },{},{}
 29011,Rune_of_Vitality_Lv_3,Rune of Vitality Lv 3,6,20,,,,,,,,,,,,,,,{ .@r = getrefine(); if (.@r>=7) { bonus bVit,7; } if (.@r>=12) { bonus bVit,1; bonus bMaxHPrate,8; } if (.@r>=13) { bonus bVit,1; bonus bMaxHPrate,2; } },{},{}
+29026,Def20,DEF+20,6,10,,,,,,,,,,,,,,,{ bonus bDef,20; },{},{}
 29061,Ambition1Lv,Mettle Lv. 1,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,3; bonus bHit,3; },{},{}
 29062,Ambition2Lv,Mettle Lv. 2,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,6; bonus bHit,6; },{},{}
 29063,Ambition3Lv,Mettle Lv. 3,6,10,,0,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,9; bonus bHit,9; },{},{}

+ 1 - 0
db/re/item_delay.txt

@@ -45,6 +45,7 @@
 // SC_REUSE_LIMIT_G
 608,3000,SC_REUSE_LIMIT_G	//Yggdrasil_Seed
 22559,3000,SC_REUSE_LIMIT_G	//Mock_Strawberry
+23042,3000,SC_REUSE_LIMIT_G	//S_Seed_Of_Yggdrasil
 
 // SC_REUSE_LIMIT_H
 11525,5000,SC_REUSE_LIMIT_H	//Mora_Hip_Tea

+ 4 - 0
db/re/item_misc.txt

@@ -1403,3 +1403,7 @@ IG_PrizeOfHero,22037,2		// Vet_Ungo_Boots
 // Private Airship items
 IG_PRIVATE_AIRSHIP,6909,1 // Actinidia_Cat_Fruit
 IG_PRIVATE_AIRSHIP,25464,1 // World_Moving_Rights
+// Token of Siegfried
+IG_Token_Of_Siegfried,6293,1	// F_Token_Of_Siegfried
+IG_Token_Of_Siegfried,6316,1	// E_Token_Of_Siegfried
+IG_Token_Of_Siegfried,7621,1	// Token_Of_Siegfried

+ 1 - 1
db/re/item_trade.txt

@@ -4352,7 +4352,7 @@
 //23039,475,100	//
 //23040,475,100	//
 //23041,475,100	//
-//23042,475,100	//
+23042,475,100	// S_Seed_Of_Yggdrasil
 23043,475,100	// S_Seed_Of_Yggdrasil_Box
 23046,475,100	// S_Mystic_Powder
 23047,475,100	// S_Blessing_Tyr

+ 2 - 2
db/re/job_db1.txt

@@ -272,9 +272,9 @@
 // Rebellion
 4215,	28000,90   ,650  ,469  ,54  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,49  ,59  ,54  ,94  ,104 ,200 ,200 ,6
 // Summoner
-4218,	20000,70   ,500  ,500  ,45  ,55  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,200 ,200 ,200 ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,5
+4218,	20000,70   ,500  ,500  ,40  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,60  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,7
 // Baby Summoner
-4220,	20000,100  ,700  ,200  ,45  ,55  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,200 ,200 ,200 ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,5
+4220,	20000,100  ,700  ,200  ,40  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,60  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,7
 // Baby Ninja
 4222,	26000,75   ,500  ,540  ,40  ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,6
 // Baby Kagerou

+ 24 - 22
db/re/mob_db.txt

@@ -118,7 +118,7 @@
 1112,DRAKE,Drake,Drake,91,804500,1,515160,417960,1,2519,1403,279,135,121,103,114,107,135,71,10,12,1,1,29,0x6283695,400,620,420,360,257580,504,5000,719,500,0,0,1127,600,1125,950,1135,150,1128,400,5019,350,985,3200,1189,100,0,0,0,0,4137,1
 1113,DROPS,Drops,Drops,2,45,1,27,20,1,12,1,16,0,8,1,1,0,6,2,10,12,1,3,23,0x83,400,1372,672,480,0,0,0,0,0,0,0,909,7500,1602,80,938,500,512,1100,713,1700,512,800,620,20,0,0,0,0,4004,1
 1114,DUSTINESS,Dustiness,Dustiness,62,2026,1,602,678,1,166,31,69,50,46,22,46,60,68,105,10,12,0,4,44,0x2000091,150,1004,504,384,0,0,0,0,0,0,0,1057,9000,1058,500,2291,4,928,2000,1001,10,507,1200,0,0,0,0,0,0,4056,1
-1115,EDDGA,Eddga,Eddga,65,247500,1,198000,148500,1,1509,776,166,70,92,80,103,66,90,85,10,12,2,2,23,0x6283695,300,872,1344,432,99000,1029,5000,1030,1000,994,3000,1133,150,2268,250,518,10000,1258,500,1030,250,985,2300,13046,100,0,0,0,0,4123,1
+1115,EDDGA,Eddga,Eddga,65,947500,1,198000,148500,1,1509,776,166,70,92,80,103,66,90,85,10,12,2,2,23,0x6283695,300,872,1344,432,99000,1029,5000,1030,1000,994,3000,1133,150,2268,250,518,10000,1258,500,1030,250,985,2300,13046,100,0,0,0,0,4123,1
 1116,EGGYRA,Eggyra,Eggyra,53,1676,1,330,689,1,110,40,85,20,46,25,25,15,52,20,10,12,1,0,48,0x91,200,1816,816,288,0,0,0,0,0,0,0,911,1000,5015,20,7032,550,507,1000,643,300,645,250,757,57,0,0,0,0,4070,1
 1117,EVIL_DRUID,Evil Druid,Evil Druid,80,5149,1,1339,1280,1,378,68,88,45,62,32,24,45,71,5,10,12,2,1,89,0x3695,300,2276,576,336,0,0,0,0,0,0,0,2217,10,1615,1,2508,2,0,0,610,200,7478,4,509,2000,0,0,0,0,4141,1
 1118,FLORA,Flora,Flora,59,2301,1,531,597,3,163,31,99,29,49,29,35,5,42,80,10,12,2,3,22,0x84,1000,1432,432,576,0,0,0,0,0,0,0,1032,9000,2253,3,704,10,521,50,629,20,905,2000,748,1,0,0,0,0,4080,1
@@ -2226,11 +2226,11 @@
 //3066,SNAKE_NEWYEAR
 //3067,E_ORC_WOMAN
 //3068,E_PYTHON_SKIN
-//3069,PERE1
-//3070,PERE2
-//3071,PERE3
-//3072,PERE4
-//3073,GRAND_PERE
+3069,PERE1,Ferre,Ferre,125,48430,1,3088,2631,1,871,695,101,45,109,121,50,55,108,55,10,12,0,6,42,0x2003885,100,676,672,480,0,0,0,0,0,0,0,505,50,15101,1,7004,100,993,300,997,25,0,0,0,0,0,0,0,0,27108,1
+3070,PERE2,Ferre,Ferre,126,40718,1,3607,2425,7,1151,218,80,45,91,86,67,116,153,71,10,12,0,6,41,0x2003885,200,676,1248,480,0,0,0,0,0,0,0,504,100,15100,1,7004,100,991,300,995,25,0,0,0,0,0,0,0,0,27107,1
+3071,PERE3,Ferre,Ferre,127,53290,1,3609,2429,2,1100,325,85,45,91,89,65,118,147,75,10,12,0,6,41,0x2003885,150,676,672,480,0,0,0,0,0,0,0,1934,50,15101,1,7004,100,993,300,997,25,0,0,0,0,0,0,0,0,27107,1
+3072,PERE4,Ferre,Ferre,128,52280,1,3729,2235,2,1484,158,98,45,156,110,61,53,133,53,10,12,0,6,42,0x2003885,200,676,1248,480,0,0,0,0,0,0,0,1989,50,15100,1,7004,100,991,300,995,25,0,0,0,0,0,0,0,0,27108,1
+3073,GRAND_PERE,Grand Pere,Awakened Ferre,140,19471800,1,3132000,2720300,1,1500,1000,200,68,200,100,200,200,220,100,10,12,2,6,69,0x6283695,200,676,2400,480,0,0,0,0,0,0,0,2990,400,2991,400,18122,100,18123,200,6719,7000,0,0,0,0,0,0,0,0,27106,1
 3074,TIMEHOLDER,Time Holder,Time Holder,170,25000000,1,2291250,1938750,1,5250,2100,288,265,224,152,251,257,402,77,10,12,2,6,80,0x6283695,100,398,384,288,2291250,0,0,0,0,0,0,1095,3000,2121,10,7054,3000,22515,3000,18874,20,16024,5,15089,3,0,0,0,0,4625,1
 //3075,WA_TREASURE
 //3076,WA_MONSTER_1
@@ -2265,8 +2265,8 @@
 //3105,MM_GB_MOROCC_1,Mm Gb Morocc 1,Mm Gb Morocc 1,149,5000000,1,0,0,1,1901,145,199,35,126,91,63,61,114,37,10,12,2,8,43,0x6200000,110,576,480,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3106,MM_GB_MOROCC_4,Mm Gb Morocc 4,Mm Gb Morocc 4,149,5000000,1,0,0,1,1235,599,109,54,114,88,62,97,164,43,10,12,1,6,68,0x6200000,150,1536,648,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3107,E_EASTER_BUNNY,Easter Bunny,Easter Bunny,1,15,1,0,0,1,0,0,160,5,1,1,1,1,999,1,10,12,1,2,60,0x1F0000,200,1456,456,336,0,0,0,0,0,0,0,22571,3000,949,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-//3108,JITTERBUG1,Jitterbug1,Jitterbug1,135,2614000,1,36804,23170,1,3210,695,123,68,189,78,81,51,108,56,10,12,2,6,49,0x2000000,150,676,2400,480,0,0,0,0,0,0,0,1935,250,2988,500,15101,500,6719,5000,6719,1000,0,0,0,0,0,0,0,0,0,0
-//3109,JITTERBUG2,Jitterbug2,Jitterbug2,135,2614000,1,36804,23170,1,3210,695,123,68,189,78,81,51,108,56,10,12,2,6,49,0x2000000,150,676,2400,480,0,0,0,0,0,0,0,1990,250,2989,500,15100,500,6719,5000,6719,1000,0,0,0,0,0,0,0,0,0,0
+3108,JITTERBUG1,Jitterbug1,Jitterbug1,135,2614000,1,36804,23170,1,3210,695,123,68,189,78,81,51,108,56,10,12,2,6,49,0x6203695,150,676,2400,480,0,0,0,0,0,0,0,1935,250,2988,500,15101,500,6719,5000,6719,1000,0,0,0,0,0,0,0,0,27109,1
+3109,JITTERBUG2,Jitterbug2,Jitterbug2,135,2614000,1,36804,23170,1,3210,695,123,68,189,78,81,51,108,56,10,12,2,6,49,0x6203695,150,676,2400,480,0,0,0,0,0,0,0,1990,250,2989,500,15100,500,6719,5000,6719,1000,0,0,0,0,0,0,0,0,27109,1
 //3110,E_RUNAWAY1,Runaway1,Runaway1,1,30,1,0,0,1,1,1,1,99,1,1,1,1,1,1,10,12,2,0,20,0x11F0000,150,1152,0,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3111,E_RUNAWAY2,Runaway2,Runaway2,1,25,1,0,0,1,1,1,1,99,1,1,1,1,1,1,10,12,1,0,20,0x11F0000,190,1152,0,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3112,E_RUNAWAY3,Runaway3,Runaway3,1,20,1,0,0,1,1,1,1,0,1,1,1,1,1,1,10,12,1,0,20,0x11F0000,200,1072,672,672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -2796,7 +2796,7 @@
 //3633,EP16_2_VENOM_KIMERA
 //3634,MYSTCASE_GIANT
 //3635,EVENT_KOBOLD
-//3636,LITTLE_ISIS
+3636,LITTLE_ISIS,Little Isis,Little Isis,59,2092,1,531,597,1,192,229,83,5,58,43,22,5,39,15,10,12,2,6,27,0x2003095,200,1384,768,336,0,0,0,0,0,0,0,936,5335,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3637,MD_SKELETON_60
 //3638,MD_SKELETON_80
 //3639,MD_SKELETON_100
@@ -2829,8 +2829,8 @@
 //3666,MD_DRAINLIAR_100
 //3667,MD_DRAINLIAR_160
 //3668,B_KIEL_
-//3669,DIABOLIC2
-//3670,DELETER_2
+3669,DIABOLIC2,Diabolic2,Diabolic2,104,10572,1,2172,1629,1,544,644,68,61,103,80,53,65,78,25,10,12,0,6,47,0x2003885,150,1080,780,180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3670,DELETER_2,Deleter 2,Deleter 2,105,10000,1,2099,1574,1,510,621,114,53,98,65,49,72,57,73,10,12,1,9,43,0x308D,175,1024,624,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3671,JP_MAZEMOB_01
 //3672,JP_MAZEMOB_02
 //3673,JP_MAZEMOB_03
@@ -2896,20 +2896,20 @@
 //3733,JP_ABYSS_BOSS_2
 //3734,ORC_X2016
 //3735,PORING_X2016
-3736,COWRAIDERS1,Buffalo Bandit Sharpsho,Buffalo Bandit Sharpsho,103,11819,1,9491,9169,7,509,204,98,25,51,58,49,20,86,49,10,12,2,7,43,0x3885,180,900,770,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27170,1
-3737,COWRAIDERS2,Buffalo Bandit Duelist,Buffalo Bandit Duelist,101,9700,1,2121,7846,7,476,190,62,32,76,52,38,40,92,50,10,12,2,7,43,0x3885,200,1200,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27171,1
-3738,COWRAIDERS3,Bowie Buffalo Bandit,Bowie Buffalo Bandit,107,14547,1,1807,1719,1,557,222,112,18,55,20,55,17,88,36,10,12,2,7,43,0x3885,180,800,420,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27172,1
-3739,COYOTE,Coyote,Coyote,110,17854,1,11111,10538,1,630,252,100,21,49,79,67,8,106,24,10,12,1,2,42,0x3881,150,759,400,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27179,1
-3740,GASTER,Gaster,Gaster,141,90574,1,5080,4716,1,1494,598,191,96,70,141,12,67,128,8,10,12,1,0,45,0x3885,190,768,650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27178,1
+3736,COWRAIDERS1,Buffalo Bandit Sharpsho,Buffalo Bandit Sharpsho,103,11819,1,9491,9169,7,509,204,98,25,51,58,49,20,86,49,10,12,2,7,43,0x3885,180,900,770,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25279,2500,7054,1000,18145,50,27170,1
+3737,COWRAIDERS2,Buffalo Bandit Duelist,Buffalo Bandit Duelist,101,9700,1,2121,7846,7,476,190,62,32,76,52,38,40,92,50,10,12,2,7,43,0x3885,200,1200,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25278,2500,7054,1000,580,500,28721,50,13332,50,27171,1
+3738,COWRAIDERS3,Bowie Buffalo Bandit,Bowie Buffalo Bandit,107,14547,1,1807,1719,1,557,222,112,18,55,20,55,17,88,36,10,12,2,7,43,0x3885,180,800,420,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25283,2500,7054,1000,538,200,28608,50,27172,1
+3739,COYOTE,Coyote,Coyote,110,17854,1,11111,10538,1,630,252,100,21,49,79,67,8,106,24,10,12,1,2,42,0x3881,150,759,400,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25276,2500,7564,1500,702,500,2531,50,27179,1
+3740,GASTER,Gaster,Gaster,141,90574,1,5080,4716,1,1494,598,191,96,70,141,12,67,128,8,10,12,1,0,45,0x3885,190,768,650,0,0,0,0,0,0,0,0,0,0,25277,2500,7001,1500,6214,300,6215,300,6213,250,605,30,756,10,757,10,27178,1
 3741,MECHASPIDER,Mechaspider,Spider Chariot,158,9799123,1,3150895,2112795,1,7657,3062,394,123,116,123,154,99,217,98,10,12,2,0,40,0x6283885,250,768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27180,1
 3742,PURPLESTONE,Purplestone,Purple Ore,255,20,0,0,0,0,0,0,100,99,0,0,0,0,0,0,10,12,0,0,20,0x170000,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 3743,SEAANEMONE,Seaanemone,Sea Anemone,1,10,0,0,0,1,0,0,100,99,0,0,0,0,0,0,10,12,0,0,20,0x8170000,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 3744,G_COWRAIDERS1,Buffalo Bandit,Buffalo Bandit,148,135292,1,0,0,7,1566,2226,99,36,98,55,61,22,168,2,10,12,2,7,63,0x3885,200,2061,500,660,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 3745,G_COWRAIDERS2,Buffalo Bandit,Buffalo Bandit,151,160515,1,0,0,7,1544,2211,121,50,60,132,45,35,155,15,10,12,2,7,63,0x3885,120,1000,500,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 3746,G_COWRAIDERS3,Buffalo Bandit,Buffalo Bandit,152,174345,1,0,0,1,1716,2415,150,83,165,44,95,43,176,50,10,12,2,7,63,0x3885,150,1501,600,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-3747,E_COWRAIDERS1,Elite Buffalo Bandit,Elite Buffalo Bandit,148,135292,1,7628,8077,7,1650,660,99,36,98,55,61,22,168,2,10,12,2,7,63,0x3885,200,2061,500,660,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27173,1
-3748,E_COWRAIDERS2,Elite Buffalo Bandit,Elite Buffalo Bandit,151,160515,1,9597,9093,7,1667,666,121,50,60,132,45,35,155,15,10,12,2,7,63,0x3885,120,1000,500,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27174,1
-3749,E_COWRAIDERS3,Elite Buffalo Bandit,Elite Buffalo Bandit,152,174345,1,9563,10218,1,1749,700,150,83,165,44,95,43,176,50,10,12,2,7,63,0x3885,150,1501,600,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27175,1
+3747,E_COWRAIDERS1,Elite Buffalo Bandit,Elite Buffalo Bandit,148,135292,1,7628,8077,7,1650,660,99,36,98,55,61,22,168,2,10,12,2,7,63,0x3885,200,2061,500,660,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25280,2500,7054,2000,1944,100,18145,100,26200,50,27173,1
+3748,E_COWRAIDERS2,Elite Buffalo Bandit,Elite Buffalo Bandit,151,160515,1,9597,9093,7,1667,666,121,50,60,132,45,35,155,15,10,12,2,7,63,0x3885,120,1000,500,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25282,3000,7054,2000,13332,250,28721,100,27174,1
+3749,E_COWRAIDERS3,Elite Buffalo Bandit,Elite Buffalo Bandit,152,174345,1,9563,10218,1,1749,700,150,83,165,44,95,43,176,50,10,12,2,7,63,0x3885,150,1501,600,500,0,0,0,0,0,0,0,0,0,0,0,0,0,25281,3000,7054,2000,28608,150,11706,30,11707,30,28116,10,27175,1
 //3750,ILL_DRAINLIAR
 //3751,ILL_ZOMBIE_C
 //3752,ILL_ZOMBIE
@@ -2947,10 +2947,10 @@
 //3784,JP_E_MONSTER_71
 //3785,JP_E_MONSTER_72
 //3786,E_TURPECO
-3787,RR_ARCLOUSE,Rr Arclouse,Swamp Arclouze,106,1120,1,864,900,1,316,126,76,36,41,73,23,29,122,15,10,12,1,4,42,0x2003885,100,768,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27177,1
-3788,RR_CRAMP,Rr Cramp,Brown Rat,101,988,1,681,720,1,185,74,68,42,38,43,17,15,97,30,10,12,0,2,45,0x3885,100,768,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27176,1
+3787,RR_ARCLOUSE,Rr Arclouse,Swamp Arclouze,106,1120,1,864,900,1,316,126,76,36,41,73,23,29,122,15,10,12,1,4,42,0x2003885,100,768,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25284,2500,938,1500,943,150,1944,50,27177,1
+3788,RR_CRAMP,Rr Cramp,Brown Rat,101,988,1,681,720,1,185,74,68,42,38,43,17,15,97,30,10,12,0,2,45,0x3885,100,768,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25285,3000,517,500,528,150,26200,10,27176,1
 //3789,ESCAPED_LETTER
-//3790,SWEETS_DROPS
+3790,SWEETS_DROPS,Sweets Drops,Sweets Drops,2,45,1,27,20,1,12,13,16,0,8,1,1,0,6,2,10,12,1,3,23,0x83,400,1372,672,480,0,0,0,0,0,0,0,909,7500,1602,80,938,500,512,1100,713,1700,512,800,620,20,0,0,0,0,0,0
 //3791,JP_E_MONSTER_73
 //3792,ILL_GAZETI
 //3793,ILL_SNOWIER
@@ -3712,5 +3712,7 @@
 //20568,GULLINBURSTI_TW
 //20569,MISSING_OCTOPIG
 
+//20571,ORK_HERO2
+
 //31999,HUNTING_GID_DEFAULT
 //32000,MONSTER_2ND_END

+ 29 - 0
db/re/mob_skill_db.txt

@@ -11188,6 +11188,27 @@
 // 3038,Hidden Mob 7@NPC_HELLBURNING,idle,719,1,10000,0,3000,yes,self,always,0,,,,,,,
 // 3038,Hidden Mob 7@NPC_HELLBURNING,attack,719,1,10000,0,3000,yes,self,always,0,,,,,,,
 
+// Jitterbug instance
+3069,Ferre@NPC_GROUNDATTACK,attack,185,5,1000,0,5000,no,target,always,0,,,,,,,
+3069,Ferre@NPC_EMOTION,idle,197,1,2000,0,5000,no,self,always,0,44,0x3885,,,,,
+3070,Ferre@NPC_MAGICALATTACK,attack,192,1,500,0,10000,no,target,always,0,,,,,,,
+3070,Ferre@NPC_REVERBERATION,idle,725,3,2000,1000,4000,yes,around1,always,0,,,,,,9,
+3070,Ferre@NPC_REVERBERATION,attack,725,3,2000,1000,4000,yes,around1,always,0,,,,,,,
+3070,Ferre@NPC_EMOTION,idle,197,1,2000,0,5000,no,self,always,0,44,0x3885,,,,,
+3071,Ferre@SM_BASH,attack,5,5,1000,0,5000,no,target,always,0,,,,,,,
+3071,Ferre@BS_HAMMERFALL,chase,110,5,1000,0,5000,no,target,always,0,,,,,,,
+3071,Ferre@BS_HAMMERFALL,attack,110,5,2000,0,5000,no,target,always,0,,,,,,,
+3071,Ferre@SM_ENDURE,attack,8,1,2000,0,10000,no,self,always,0,,,,,,,
+3071,Ferre@SM_ENDURE,chase,8,1,2000,0,10000,no,self,always,0,,,,,,,
+3071,Ferre@NPC_EMOTION,idle,197,1,2000,0,5000,no,self,always,0,44,0x3885,,,,,
+3072,Ferre@NPC_WATERATTACK,attack,184,5,1000,0,5000,no,target,always,0,,,,,,6,
+3072,Ferre@NPC_ENERGYDRAIN,attack,200,1,1000,100,10000,no,target,always,0,,,,,,,
+3072,Ferre@NPC_EMOTION,idle,197,1,2000,0,5000,no,self,always,0,44,0x3885,,,,,
+3073,Grand Pere@NPC_LEX_AETERNA,attack,727,5,5000,2000,10000,yes,self,always,0,,,,,,,
+3073,Grand Pere@NPC_DARKNESSBREATH,attack,658,10,2000,2000,5000,yes,target,always,0,,,,,,,
+3073,Grand Pere@NPC_WIDESILENCE,attack,663,5,2000,1000,10000,yes,self,always,0,,,,,,,
+3073,Grand Pere@NPC_WIDECONFUSE,attack,667,5,3000,2000,10000,yes,self,always,0,,,,,,,
+
 3074,Time Holder@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
 3074,Time Holder@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,,,,,,,,
 3074,Time Holder@AL_TELEPORT,walk,26,1,5000,0,5000,yes,self,rudeattacked,,,,,,,,
@@ -11200,6 +11221,14 @@
 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,,,,,,
 
+// 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,,,,,,,
+3108,Jitterbug@NPC_DARKNESSBREATH,attack,658,5,1000,2000,5000,yes,target,always,0,,,,,,,
+3109,Jitterbug@NPC_WIDECONFUSE,attack,667,5,3000,2000,10000,yes,self,always,0,,,,,,,
+3109,Jitterbug@NPC_REVERBERATION,attack,725,3,2000,1000,4000,yes,around1,always,0,,,,,,,
+3109,Jitterbug@NPC_LEX_AETERNA,attack,727,3,2000,2000,10000,yes,self,always,0,,,,,,,
+
 3200,Wicked Chimera@WZ_HEAVENDRIVE,attack,91,5,500,1200,5000,yes,target,always,0,,,,,,6,
 3200,Wicked Chimera@WZ_HEAVENDRIVE,chase,91,5,500,1200,5000,yes,target,always,0,,,,,,6,
 3200,Wicked Chimera@CR_AUTOGUARD,attack,249,5,500,0,300000,yes,self,always,0,,,,,,,

+ 0 - 110
db/re/pet_db.txt

@@ -1,110 +0,0 @@
-// Pet Database
-//
-// Structure of Database:
-// MobID,Name,JName,LureID,EggID,EquipID,FoodID,Fullness,HungryDelay,R_Hungry,R_Full,Intimate,Die,Capture,Speed,S_Performance,talk_convert_class,attack_rate,defence_attack_rate,change_target_rate,pet_script,loyal_script
-//
-// 01. MobID			Monster ID of the pet.
-// 02. Name			Name of the monster as defined in the database.
-// 03. JName			The display name of the monster when hatched.
-// 04. LureID			Pet Tame Item ID.
-// 05. EggID			Pet Egg ID.
-// 06. EquipID			Pet Accessory ID.
-// 07. FoodID			Pet Food ID.
-// 08. Fullness			The amount Hunger is decreased every [HungryDelay] seconds.
-// 09. HungryDelay		The amount of time it takes for hunger to decrease after feeding. (Default: 60 seconds)
-// 10. R_Hungry			Amount of Intimacy that is increased when fed.
-// 11. R_Full			Amount of Intimacy that is decreased when over-fed.
-// 12. Intimate			Amount of Intimacy the pet starts with.
-// 13. Die			Amount of Intimacy that is decreased when the pet owner dies.
-// 14. Capture			Capture succes rate (10000 = 100%)
-// 15. Speed			Pet's walk speed. (Defaul: 150)
-// 16. S_Performance		Special Performance. (Yes = 1, No = 0)
-// 17. talk_convert_class	Disables pet talk (instead of talking they emote  with /!.)
-// 18. attack_rate			Rate of which the pet will attack (requires at least pet_support_min_friendly intimacy).
-// 19. defence_attack_rate	Rate of which the pet will retaliate when master is being attacked (requires at least pet_support_min_friendly intimacy).
-// 20. change_target_rate	Rate of which the pet will change its attack target.
-// 21. pet_script		Script to execute when the pet is hatched.
-// 22. loyal_script		Script to execute when the pet is hatched (requires at least pet_equip_min_friendly intimacy, independent of pet_script).
-//NOTE: The max value (100%) of attack_rate, defense_rate & change_target_rate is 10000.
-
-//In theory you can use any valid script, but it is run only once upon pet
-//loading, so it is recommended you use the specific pet scripts.
-//Please see "The Pet AI commands" in 'doc/script_commands.txt'.
-
-1002,PORING,Poring,619,9001,10013,531,80,60,50,100,250,20,2000,150,1,0,350,400,800,{ petloot 10; },{ bonus bLuk,2; bonus bCritical,1; }
-1113,DROPS,Drops,620,9002,10013,508,80,60,40,100,250,20,1500,150,1,0,300,400,500,{ petloot 10; },{ bonus bHit,3; bonus bAtk,3; }
-1031,POPORING,Poporing,621,9003,10013,511,80,60,30,100,250,20,1000,150,1,0,300,500,400,{ petloot 15; },{ bonus bLuk,2; bonus2 bSubEle,Ele_Poison,10; }
-1063,LUNATIC,Lunatic,622,9004,10007,534,80,60,40,100,250,20,1500,150,0,0,300,300,1000,{ petskillbonus bLuk,3,10,50; },{ bonus bCritical,2; bonus bAtk,2; }
-1049,PICKY,Picky,623,9005,10012,507,80,60,40,100,250,20,2000,150,1,0,500,600,50,{ petskillbonus bStr,3,10,50;},{ bonus bStr,1; bonus bAtk,5; }
-1011,CHONCHON,ChonChon,624,9006,10002,537,80,60,30,100,250,20,1500,150,1,0,500,500,250,{ petskillbonus bAgi,4,10,50; },{ bonus bAgi,1; bonus bFlee,2; }
-1042,STEEL_CHONCHON,Steel ChonChon,625,9007,10002,1002,80,60,20,100,250,20,1000,150,1,0,500,500,200,{ petskillbonus bAgiVit,4,20,40; },{ bonus bFlee,6; bonus bAgi,-1; }
-1035,HUNTER_FLY,Hunter Fly,626,9008,10002,716,80,60,10,100,250,20,500,150,1,0,500,500,200,{ petskillattack2 "NPC_WINDATTACK",888,2,0,10; },{ bonus bFlee,-5; bonus bFlee2,2; }
-1167,SAVAGE_BABE,Savage Babe,627,9009,10015,537,80,60,40,100,250,20,1500,150,0,0,500,500,200,{ petskillbonus bVit,4,10,50; },{ bonus bVit,1; bonus bMaxHP,50; }
-1107,DESERT_WOLF_B,Baby Desert Wolf,628,9010,10003,537,80,60,40,100,250,20,1000,150,0,0,400,400,400,{ petskillattack "SM_PROVOKE",1,0,5;},{ bonus bInt,1; bonus bMaxSP,50; }
-1052,ROCKER,Rocker,629,9011,10014,537,80,60,30,100,250,20,1500,150,0,0,350,350,600,{ petskillbonus bAllStats,1,10,50; },{ bonus bHPrecovRate,5; bonus bMaxHP,25; }
-1014,SPORE,Spore,630,9012,10017,537,80,60,30,100,250,20,1500,150,0,0,350,500,500,{ petrecovery SC_POISON,60; },{ bonus bHit,5; bonus bAtk,-2; }
-1077,POISON_SPORE,Poison Spore,631,9013,10017,537,80,60,20,100,250,20,1000,150,0,0,600,200,400,{ petskillattack "NPC_POISON",20,0,10; },{ bonus bStr,1; bonus bInt,1; }
-1019,PECOPECO,PecoPeco,632,9014,10010,537,80,60,30,100,250,20,1000,150,1,0,400,500,800,{ petskillbonus bSpeedRate,25,20,20; },{ bonus bMaxHP,150; bonus bMaxSP,-10; }
-1056,SMOKIE,Smokie,633,9015,10019,537,80,60,30,100,250,20,1000,150,1,0,600,600,100,{ petskillbonus bPerfectHide,1,3600,0; },{ bonus bAgi,1; bonus bFlee2,1; }
-1057,YOYO,Yoyo,634,9016,10018,532,80,60,20,100,250,20,1000,150,1,0,300,800,400,{ petloot 20; },{ bonus bCritical,3; bonus bLuk,-1; }
-1023,ORK_WARRIOR,Orc Warrior,635,9017,10009,537,80,60,20,100,250,20,500,150,1,0,600,200,300,{ petskillattack2 "NPC_PIERCINGATT",100,1,0,10; },{ bonus bAtk,10; bonus bDef,-3; }
-1026,MUNAK,Munak,636,9018,10008,537,80,60,20,100,250,20,500,150,0,0,300,750,300,{ petskillattack2 "NPC_DARKNESSATTACK",444,1,0,10; },{ bonus bInt,1; bonus bDef,1; }
-1110,DOKEBI,Dokebi,637,9019,10005,537,80,60,20,100,250,20,500,150,0,0,300,300,800,{ petskillattack "BS_HAMMERFALL",1,0,10; },{ bonus bMatkRate,1; bonus2 bAddClass,Class_All,-1; }
-1170,SOHEE,Sohee,638,9020,10016,537,80,60,10,100,250,20,500,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,33,100; },{ bonus bStr,1; bonus bDex,1; }
-1029,ISIS,Isis,639,9021,10006,537,80,60,10,100,250,20,500,150,0,0,650,450,150,{ petskillsupport "PR_MAGNIFICAT",2,60,50,50; },{ bonus bMatkRate,-1; bonus2 bAddClass,Class_All,1; }
-1155,PETIT,Petite,640,9022,10011,537,80,60,20,100,250,20,500,150,0,0,800,400,100,{ petskillattack2 "WZ_HEAVENDRIVE",500,1,0,10; },{ bonus bDef,-2; bonus bMdef,-2; bonus bAspdRate,1; }
-1109,DEVIRUCHI,Deviruchi,641,9023,10004,711,80,60,10,100,250,20,500,150,0,0,800,200,100,{ petskillbonus bAgiDexStr,6,20,40; },{ bonus bMatkRate,1; bonus2 bAddClass,Class_All,1; bonus bMaxHPrate,-3; bonus bMaxSPrate,-3; }
-1101,BAPHOMET_,Baphomet Jr.,642,9024,10001,518,80,60,10,100,250,20,200,150,0,0,1000,100,200,{ petskillattack2 "NPC_DARKNESSATTACK",1776,4,0,5; },{ bonus bDef,1; bonus bMdef,1; bonus2 bResEff,Eff_Stun,-100; }
-1188,BON_GUN,Bon Gun,659,9025,10020,537,80,60,30,100,250,20,500,150,1,0,600,200,400,{ petskillattack2 "NPC_DARKNESSATTACK",555,1,1,1; },{ bonus bVit,1; bonus2 bResEff,Eff_Stun,100; }
-1200,ZHERLTHSH,Zealotus,660,9026,0,929,80,60,10,100,250,20,300,150,0,0,1000,100,500,{ petskillattack "AS_SONICBLOW",1,0,3; },{ bonus2 bAddRace,RC_Demihuman,2; bonus2 bAddRace,RC_Player,2; bonus2 bMagicAddRace,RC_DemiHuman,2; bonus2 bMagicAddRace, RC_Player,2; }
-1275,ALICE,Alice,661,9027,0,504,80,60,20,100,250,20,800,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,25,100; },{ bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; }
-1815,EVENT_RICECAKE,Rice Cake,0,9028,0,511,80,60,50,100,250,20,2000,150,1,0,500,500,200,{ petskillsupport "CR_DEFENDER",3,240,50,100; },{ bonus2 bSubEle,Ele_Neutral,1; bonus bMaxHPrate,-1; }
-1245,GOBLINE_XMAS,Christmas Goblin,12225,9029,0,911,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "MG_SIGHT",5,5,5; },{ bonus bMaxHP,30; bonus2 bSubEle,Ele_Water,1; }
-
-1519,CHUNG_E,Green Maiden,12395,9030,0,6115,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "CR_SHIELDCHARGE",5,5,5; },{ bonus bDef,1; bonus2 bSubRace,RC_DemiHuman,1; bonus2 bSubRace,RC_Player,1; }
-1879,ECLIPSE_P,Spring Rabbit,0,9031,0,7766,80,60,50,100,250,20,2000,150,0,0,300,300,800,{ petskillattack "TF_THROWSTONE",1,5,5; },{}
-1122,GOBLIN_1,Goblin,14569,9032,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_WINDATTACK",5,5,5; },{}
-1123,GOBLIN_2,Goblin,14570,9033,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_FIREATTACK",5,5,5; },{}
-1125,GOBLIN_4,Goblin,14571,9034,0,7821,80,60,50,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_GROUNDATTACK",5,5,5; },{}
-1385,DELETER_,Deleter,14572,9035,0,7822,80,60,20,100,250,20,800,150,0,0,300,300,800,{ petskillattack "SM_MAGNUM",5,5,5; },{}
-1382,DIABOLIC,Diabolic,14573,9036,0,7823,80,60,10,100,250,20,800,150,0,0,300,300,800,{ petskillattack "WZ_METEOR",2,5,5; },{}
-1208,WANDER_MAN,Wanderer,14574,9037,0,7824,80,60,20,100,250,20,800,150,0,0,300,300,800,{ petskillattack "NPC_UNDEADATTACK",5,5,5; },{ bonus bAgi,3; bonus bDex,1; }
-
-1963,P_CHUNG_E,New Year Doll,0,9038,0,554,80,60,30,100,250,20,800,150,0,0,300,300,800,{ petskillattack "CR_SHIELDCHARGE",5,5,5; },{}
-
-// New pets JapanRO Mobile
-1040,GOLEM,Golem,12371,9053,10035,6111,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxHP,100; bonus bFlee,-5; }
-1143,MARIONETTE,Marionette,12361,9043,10025,6098,80,60,10,100,250,20,500,150,0,0,300,300,800,{},{ bonus bSPrecovRate,3; }
-1148,MEDUSA,Medusa,12368,9050,10032,6108,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bVit,1; bonus2 bResEff,Eff_Stone,500; }
-1179,WHISPER,Whisper,12363,9045,10027,6100,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bFlee,7; bonus bDef,-3; }
-1299,GOBLIN_LEADER,Goblin Leader,12364,9046,10028,6104,80,60,10,100,250,20,50,150,0,0,300,300,800,{},{ bonus2 bAddRace,RC_DemiHuman,3; bonus2 bAddRace,RC_Player,3; }
-1370,SUCCUBUS,Succubus,12373,9055,10037,6113,80,60,10,100,250,20,200,150,0,0,300,300,800,{ bonus2 bHPDrainRate,10,5; },{ bonus2 bHPDrainRate,30,5; bonus bMaxHPrate,1; }
-1374,INCUBUS,Incubus,12370,9052,10034,6110,80,60,10,100,250,20,50,150,0,0,300,300,800,{ bonus bMaxSPRate,3; bonus2 bSPDrainRate,10,1; },{ bonus bMaxSPRate,5; bonus2 bSPDrainRate,30,1; }
-1379,NIGHTMARE_TERROR,Nightmare Terror,12372,9054,10036,6112,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bResEff,Eff_Sleep,10000; }
-1401,SHINOBI,Shinobi,12362,9044,10026,6099,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bAgi,2; }
-1404,MIYABI_NINGYO,Miyabi Doll,12366,9048,10030,6106,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bInt,1; bonus bCastrate,-3; }
-1416,WICKED_NYMPH,Evil Nymph,12365,9047,10029,6105,80,60,15,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxSP,30; bonus bSPrecovRate,5; }
-1495,STONE_SHOOTER,Stone Shooter,12369,9051,10033,6109,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus2 bSubEle,Ele_Fire,3; }
-1504,DULLAHAN,Dullahan,12367,9049,10031,6107,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bCritAtkRate,5; }
-1505,LOLI_RURI,Loli Ruri,12360,9042,10024,6097,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bMaxHPRate,3; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10; }
-1513,CIVIL_SERVANT,Mao Guai,12358,9040,10022,6095,80,60,10,100,250,20,500,150,0,0,300,300,800,{},{ bonus bMaxSP,10; }
-1586,LEAF_CAT,Leaf Cat,12359,9041,10023,6096,80,60,20,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bSubRace,RC_Brute,3; }
-1630,BACSOJIN_,White Lady,12357,9039,10021,6094,80,60,10,100,250,20,2000,150,0,0,300,300,800,{},{}
-1837,IMP,Fire Imp,12374,9056,10038,6114,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bSubEle,Ele_Fire,2; bonus2 bAddEle,Ele_Fire,2; }
-
-// Brasilis Quest - Suspicious Beach [UNHATCHABLE]
-2057,E_CRAMP,Strange Cramp,12408,6221,0,0,0,0,0,0,0,0,50,0,0,0,350,400,800,{},{} // kRO version
-2081,E_HYDRA,Strange Hydra,12408,6221,0,0,0,0,0,0,0,0,50,0,0,0,350,400,800,{},{} // iRO/cRO version
-
-// New pets (FIX ME: pet bonuses for 2210 and 2313 do not require loyalty)
-2200,J_TAINI,Tiny,0,9057,0,512,80,60,10,100,250,20,0,150,1,0,300,300,800,{},{}
-2210,XMAS_LUNATIC,Christmas Snow Rabbit,0,9058,0,529,80,60,10,100,250,20,0,150,1,0,300,300,800,{},{ bonus2 bExpAddRace,RC_All,5; }
-2313,TIKBALANG,Tikbalang,12699,9059,0,528,80,60,10,100,250,20,1000,150,1,0,300,300,800,{},{ bonus2 bAddDamageClass,2320,10; bonus2 bAddDamageClass,2321,10; bonus2 bAddDamageClass,2322,10; bonus2 bAddDamageClass,2317,10; bonus2 bAddDamageClass,2318,10; bonus2 bAddDamageClass,2327,10; bonus2 bAddDamageClass,2319,10; bonus2 bAddDamageClass,2333,10; bonus2 bAddDamageClass,2332,10; }
-1242,MARIN,Marin,12789,9061,10039,6534,80,60,50,100,250,20,2000,150,1,0,300,300,800,{},{}
-2398,LITTLE_PORING,Novice Poring,12846,9062,0,531,80,60,1000,0,250,0,5000,150,0,0,300,300,800,{},{ bonus bHPrecovRate,50; }
-
-// New pets from kRO 2014-10-08 (Needs more info)
-//1090,MASTERING,Mastering,<LureID>,9069,<EquipID>,<FoodID>,<Fullness>,<HungryDelay>,<R_Hungry>,<R_Full>,<Intimate>,<Die>,<Capture>,<Speed>,<S_Performance>,<talk_convert_class>,<attack_rate>,<defence_attack_rate>,<change_target_rate>,<pet_script>,{ set .@i,getpetinfo(3); /*Awkward=LUK + 2, CRI + 1; Neutral=LUK + 3, CRI + 1; Cordial=LUK + 3, CRI + 2; Best Friend=LUK + 3, CRI + 3;*/ }
-//1166,SAVAGE,Savage,<LureID>,9070,<EquipID>,<FoodID>,<Fullness>,<HungryDelay>,<R_Hungry>,<R_Full>,<Intimate>,<Die>,<Capture>,<Speed>,<S_Performance>,<talk_convert_class>,<attack_rate>,<defence_attack_rate>,<change_target_rate>,<pet_script>,{ set .@i,getpetinfo(3); /*Awkward=VIT + 1, MHP + 50; Neutral=VIT + 2, MHP + 50; Cordial=VIT + 2, MHP + 100; Best Friend=VIT + 2, MHP + 200;*/ }
-//1369,GRAND_PECO,Grand Peco,<LureID>,9071,<EquipID>,<FoodID>,<Fullness>,<HungryDelay>,<R_Hungry>,<R_Full>,<Intimate>,<Die>,<Capture>,<Speed>,<S_Performance>,<talk_convert_class>,<attack_rate>,<defence_attack_rate>,<change_target_rate>,<pet_script>,{ set .@i,getpetinfo(3); /*Awkward=MHP + 150; Neutral=MHP + 200; Cordial=MHP + 300; Best Friend=MHP + 400;*/ }
-//1213,HIGH_ORC,High Orc,<LureID>,9087,<EquipID>,<FoodID>,<Fullness>,<HungryDelay>,<R_Hungry>,<R_Full>,<Intimate>,<Die>,<Capture>,<Speed>,<S_Performance>,<talk_convert_class>,<attack_rate>,<defence_attack_rate>,<change_target_rate>,<pet_script>,{ set .@i,getpetinfo(3); /*Awkward=ATK + 10; Neutral=ATK + 15; Cordial=ATK + 20; Best Friend=ATK + 25;*/ }

+ 1733 - 0
db/re/pet_db.yml

@@ -0,0 +1,1733 @@
+# This file is a part of rAthena.
+#   Copyright(C) 2019 rAthena Development Team
+#   https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################################
+# Renewal Pet Database
+###########################################################################
+#
+# Pet Settings
+#
+###########################################################################
+# - Mob                      Monster that can be used as pet
+#   TameItem                 Pet Tame Item.
+#   EggItem                  Pet Egg Item.
+#   EquipItem                Pet Accessory Item. (Default: 0)
+#   FoodItem                 Pet Food Item. (Default: 0)
+#   Fullness                 The amount of hunger is decreased every [HungryDelay] seconds.
+#   HungryDelay              The amount of time in seconds it takes for hunger to decrease after feeding. (Default: 60)
+#   HungerIncrease           The amount of hunger that is increased every time the pet is fed (Default: 20)
+#   IntimacyStart            Amount of Intimacy the pet starts with. (Default: 250)
+#   IntimacyFed              Amount of Intimacy that is increased when fed. (Default: 50)
+#   IntimacyOverfed          Amount of Intimacy that is increased when over-fed. (Default: -100)
+#   IntimacyHungry           Amount of Intimacy that is increased when the pet is hungry. (Default: -5)
+#   IntimacyOwnerDie         Amount of Intimacy that is increased when the pet owner dies. (Default: -20)
+#   CaptureRate              Capture success rate. (10000 = 100%)
+#   SpecialPerformance       If a pet has a Special Performance. (Default: true)
+#   AttackRate               Rate of which the pet will attack [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   RetaliateRate            Rate of which the pet will retaliate when master is being attacked [requires at least pet_support_min_friendly intimacy]. (10000 = 100%)
+#   ChangeTargetRate         Rate of which the pet will change its attack target. (10000 = 100%)
+#   AllowAutoFeed            Allows turning automatic pet feeding on. (Default: false)
+#   Script                   Bonus script to execute when the pet is alive. (Default: null)
+#   SupportScript            Bonus script to execute when pet_status_support is enabled. (Default: null)
+#   Evolution:               Pet evolution settings. (Optional) (Default: null)
+#     - Target               Mob this pet can evolve to.
+#       ItemRequirements:      Item requirements for evolving this pet.
+#         - Item               Self-explanatory
+#           Amount
+###########################################################################
+
+Header:
+  Type: PET_DB
+  Version: 1
+
+Body:
+  - Mob: PORING
+    TameItem: Unripe_Apple
+    EggItem: Poring_Egg
+    EquipItem: Backpack
+    FoodItem: Apple_Juice
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,2;
+        bonus bCritical,1;
+      }
+    Evolution:
+      - Target: MASTERING
+        ItemRequirements:
+          - Item: Leaf_Of_Yggdrasil
+            Amount: 10
+          - Item: Unripe_Apple
+            Amount: 3
+
+  - Mob: DROPS
+    TameItem: Orange_Juice
+    EggItem: Drops_Egg
+    EquipItem: Backpack
+    FoodItem: Yellow_Herb
+    Fullness: 4
+    IntimacyFed: 40
+    CaptureRate: 1500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,3;
+        bonus bAtk,3;
+      }
+    Evolution:
+      - Target: DR_EGGRING
+        ItemRequirements:
+          - Item: Piece_Of_Egg_Shell
+            Amount: 20
+          - Item: Old_Frying_Pan
+            Amount: 10
+          - Item: Apple_Juice
+            Amount: 3
+          - Item: Eggring_Card
+            Amount: 1
+      - Target: SWEETS_DROPS
+        ItemRequirements:
+          - Item: Sweets_Festival_Coin
+            Amount: 500
+          - Item: Candy
+            Amount: 50
+          - Item: Candy_Striper
+            Amount: 50
+          - Item: Drops_Card
+            Amount: 1
+  - Mob: POPORING
+    TameItem: Bitter_Herb
+    EggItem: Poporing_Egg
+    EquipItem: Backpack
+    FoodItem: Green_Herb
+    Fullness: 5
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,2;
+        bonus2 bSubEle,Ele_Poison,10;
+      }
+  - Mob: LUNATIC
+    TameItem: Rainbow_Carrot
+    EggItem: Lunatic_Egg
+    EquipItem: Silk_Ribbon
+    FoodItem: Carrot_Juice
+    Fullness: 4
+    IntimacyFed: 40
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,2;
+        bonus bAtk,2;
+      }
+    Evolution:
+      - Target: DR_LUNATIC
+        ItemRequirements: 
+          - Item: Great_Leaf
+            Amount: 100
+          - Item: Clover
+            Amount: 250
+          - Item: Four_Leaf_Clover
+            Amount: 30
+          - Item: Leaf_Lunatic_Card
+            Amount: 1
+
+  - Mob: PICKY
+    TameItem: Earthworm_The_Dude
+    EggItem: Picky_Egg
+    EquipItem: Tiny_Egg_Shell
+    FoodItem: Red_Herb
+    Fullness: 4
+    IntimacyFed: 40
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bAtk,5;
+      }
+  - Mob: CHONCHON
+    TameItem: Rotten_Fish
+    EggItem: Chonchon_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Pet_Food
+    Fullness: 6
+    IntimacyFed: 30
+    CaptureRate: 1500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,1;
+        bonus bFlee,2;
+      }
+  - Mob: STEEL_CHONCHON
+    TameItem: Lusty_Iron
+    EggItem: Steel_Chonchon_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Iron_Ore
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,6;
+        bonus bAgi,-1;
+      }
+  - Mob: HUNTER_FLY
+    TameItem: Monster_Juice
+    EggItem: Hunter_Fly_Egg
+    EquipItem: Monster_Oxygen_Mask
+    FoodItem: Red_Gemstone
+    Fullness: 5
+    IntimacyFed: 10
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,-5;
+        bonus bFlee2,2;
+      }
+  - Mob: SAVAGE_BABE
+    TameItem: Sweet_Milk
+    EggItem: Savage_Bebe_Egg
+    EquipItem: Green_Lace
+    FoodItem: Pet_Food
+    Fullness: 7
+    IntimacyFed: 40
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus bMaxHP,50;
+      }
+    Evolution:
+      - Target: SAVAGE
+        ItemRequirements:
+          - Item: Pet_Food
+            Amount: 10
+          - Item: Sweet_Milk
+            Amount: 3
+          - Item: Meat
+            Amount: 100
+          - Item: Feather
+            Amount: 50
+  - Mob: DESERT_WOLF_B
+    TameItem: Well_Dried_Bone
+    EggItem: Baby_Desert_Wolf_Egg
+    EquipItem: Transparent_Headgear
+    FoodItem: Pet_Food
+    Fullness: 6
+    IntimacyFed: 40
+    CaptureRate: 1000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bMaxSP,50;
+      }
+  - Mob: ROCKER
+    TameItem: Singing_Flower
+    EggItem: Rocker_Egg
+    EquipItem: Rocker_Glasses
+    FoodItem: Pet_Food
+    Fullness: 1
+    IntimacyFed: 30
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHPrecovRate,5;
+        bonus bMaxHP,25;
+      }
+    Evolution:
+      - Target: METALLER
+        ItemRequirements:
+          - Item: Singing_Plant
+            Amount: 3
+          - Item: Grasshopper's_Leg
+            Amount: 777
+          - Item: Yellow_Herb
+            Amount: 200
+          - Item: Metaller_Card
+            Amount: 1
+  - Mob: SPORE
+    TameItem: Dew_Laden_Moss
+    EggItem: Spore_Egg
+    EquipItem: Bark_Shorts
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 30
+    CaptureRate: 1500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,5;
+        bonus bAtk,-2;
+      }
+  - Mob: POISON_SPORE
+    TameItem: Deadly_Noxious_Herb
+    EggItem: Poison_Spore_Egg
+    EquipItem: Bark_Shorts
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 20
+    CaptureRate: 1000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bInt,1;
+      }
+  - Mob: PECOPECO
+    TameItem: Fatty_Chubby_Earthworm
+    EggItem: PecoPeco_Egg
+    EquipItem: Battered_Pot
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,150;
+        bonus bMaxSP,-10;
+      }
+    Evolution:
+      - Target: GRAND_PECO
+        ItemRequirements:
+          - Item: Pet_Food
+            Amount: 10
+          - Item: Fatty_Chubby_Earthworm
+            Amount: 3
+          - Item: Peco_Wing_Feather
+            Amount: 300
+          - Item: Pecopeco_Card
+            Amount: 1
+          - Item: Fruit_Of_Mastela
+            Amount: 10
+  - Mob: SMOKIE
+    TameItem: Baked_Yam
+    EggItem: Smokie_Egg
+    EquipItem: Red_Muffler
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,1;
+        bonus bFlee2,1;
+      }
+  - Mob: YOYO
+    TameItem: Tropical_Banana
+    EggItem: Yoyo_Egg
+    EquipItem: Monkey_Circlet
+    FoodItem: Banana_Juice
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,3;
+        bonus bLuk,-1;
+      }
+    Evolution:
+      - Target: CHOCO
+        ItemRequirements:
+          - Item: Tropical_Banana
+            Amount: 3
+          - Item: Monkey_Doll
+            Amount: 2
+          - Item: Cacao
+            Amount: 300
+          - Item: Yoyo_Card
+            Amount: 1
+  - Mob: ORK_WARRIOR
+    TameItem: Horror_Of_Tribe
+    EggItem: Orc_Warrior_Egg
+    EquipItem: Wild_Flower
+    FoodItem: Pet_Food
+    Fullness: 5
+    IntimacyFed: 20
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAtk,10;
+        bonus bDef,-3;
+      }
+    Evolution:
+      - Target: HIGH_ORC
+        ItemRequirements:
+          - Item: Horror_Of_Tribe
+            Amount: 3
+          - Item: Orcish_Sword
+            Amount: 1
+          - Item: Orcish_Voucher
+            Amount: 500
+          - Item: Cigar
+            Amount: 1
+          - Item: Orc_Warrior_Card
+            Amount: 1
+  - Mob: MUNAK
+    TameItem: No_Recipient
+    EggItem: Munak_Egg
+    EquipItem: Punisher
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bDef,1;
+      }
+  - Mob: DOKEBI
+    TameItem: Old_Broom
+    EggItem: Dokkaebi_Egg
+    EquipItem: Wig
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,1;
+        bonus bAtkRate,-1;
+      }
+    Evolution:
+      - Target: AM_MUT
+        ItemRequirements:
+          - Item: Old_Broom
+            Amount: 3
+          - Item: Violet_Dyestuffs
+            Amount: 3
+          - Item: Dokkaebi_Horn
+            Amount: 300
+          - Item: Gold
+            Amount: 3
+  - Mob: SOHEE
+    TameItem: Silver_Knife_Of_Chaste
+    EggItem: Sohee_Egg
+    EquipItem: Golden_Bell
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bStr,1;
+        bonus bDex,1;
+      }
+  - Mob: ISIS
+    TameItem: Armlet_Of_Obedience
+    EggItem: Isis_Egg
+    EquipItem: Queen's_Hair_Ornament
+    FoodItem: Pet_Food
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,-1;
+        bonus bAtkRate,1;
+      }
+    Evolution:
+      - Target: LITTLE_ISIS
+        ItemRequirements:
+          - Item: Armlet_Of_Obedience
+            Amount: 3
+          - Item: Crystal_Jewel__
+            Amount: 6
+          - Item: Queen's_Hair_Ornament
+            Amount: 1
+          - Item: Shining_Scales
+            Amount: 300
+  - Mob: PETIT
+    TameItem: Shining_Stone
+    EggItem: Green_Petite_Egg
+    EquipItem: Stellar_Hairpin
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,-2;
+        bonus bMdef,-2;
+        bonus bAspdRate,1;
+      }
+    Evolution:
+      - Target: DELETER_2
+        ItemRequirements:
+          - Item: Shining_Stone
+            Amount: 3
+          - Item: Petti_Tail
+            Amount: 100
+          - Item: Aloebera
+            Amount: 150
+          - Item: Deleter_Card
+            Amount: 1
+  - Mob: DEVIRUCHI
+    TameItem: Contracts_In_Shadow
+    EggItem: Deviruchi_Egg
+    EquipItem: Pacifier
+    FoodItem: Shoot
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,1;
+        bonus bAtkRate,1;
+        bonus bMaxHPrate,-3;
+        bonus bMaxSPrate,-3;
+      }
+    Evolution:
+      - Target: DIABOLIC2
+        ItemRequirements:
+          - Item: Contracts_In_Shadow
+            Amount: 3
+          - Item: Petite_DiablOfs_Wing
+            Amount: 250
+          - Item: Sacred_Marks
+            Amount: 30
+          - Item: Deviruchi_Card
+            Amount: 1
+  - Mob: BAPHOMET_
+    TameItem: Book_Of_Devil
+    EggItem: Bapho_Jr._Egg
+    EquipItem: Skull_Helm
+    FoodItem: Honey
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,1;
+        bonus bMdef,1;
+        bonus2 bResEff,Eff_Stun,-100;
+      }
+  - Mob: BON_GUN
+    TameItem: Heart_Of_Her
+    EggItem: Bongun_Egg
+    EquipItem: Sword_Of_Grave_Keeper
+    FoodItem: Pet_Food
+    Fullness: 4
+    IntimacyFed: 30
+    CaptureRate: 500
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stun,100;
+      }
+    Evolution:
+      - Target: HYEGUN
+        ItemRequirements:
+          - Item: Hyegun_Hat
+            Amount: 1
+          - Item: Munak_Doll
+            Amount: 100
+          - Item: Old_Portrait
+            Amount: 50
+          - Item: Hyegun_Card
+            Amount: 1
+  - Mob: ZHERLTHSH
+    TameItem: Prohibition_Red_Candle
+    EggItem: Zherlthsh_Egg
+    FoodItem: Immortal_Heart
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 300
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddRace,RC_Demihuman,2;
+        bonus2 bMagicAddRace,RC_DemiHuman,2;
+        bonus2 bAddRace,RC_Player,2;
+        bonus2 bMagicAddRace,RC_Player,2;
+      }
+  - Mob: ALICE
+    TameItem: Sway_Apron
+    EggItem: Alice_Egg
+    FoodItem: White_Potion
+    Fullness: 2
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMdef,1;
+        bonus2 bSubRace,RC_DemiHuman,1;
+        bonus2 bSubRace,RC_Player,1;
+      }
+  - Mob: EVENT_RICECAKE
+    EggItem: Rice_Cake_Egg
+    FoodItem: Green_Herb
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Neutral,1;
+        bonus bMaxHPrate,-1;
+      }
+  - Mob: GOBLINE_XMAS
+    TameItem: Sweet_Candy_Striper
+    EggItem: Santa_Goblin_Egg
+    FoodItem: Scell
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,30;
+        bonus2 bSubEle,Ele_Water,1;
+      }
+  - Mob: CHUNG_E
+    TameItem: Tantanmen
+    EggItem: Chung_E_Egg
+    FoodItem: Bun_
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDef,1;
+        bonus2 bSubRace,RC_DemiHuman,1;
+        bonus2 bSubRace,RC_Player,1;
+      }
+  - Mob: ECLIPSE_P
+    EggItem: Spring_Rabbit_Egg
+    FoodItem: Bok_Choy
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    SpecialPerformance: false
+  - Mob: GOBLIN_1
+    TameItem: Knife_Goblin_Ring
+    EggItem: Knife_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOBLIN_2
+    TameItem: Flail_Goblin_Ring
+    EggItem: Flail_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOBLIN_4
+    TameItem: Hammer_Goblin_Ring
+    EggItem: Hammer_Goblin_Egg
+    FoodItem: Green_Apple
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: DELETER_
+    TameItem: Holy_Marble
+    EggItem: Red_Deleter_Egg
+    FoodItem: Whole_Barbecue
+    Fullness: 4
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: DIABOLIC
+    TameItem: Red_Burning_Stone
+    EggItem: Diabolic_Egg
+    FoodItem: Meat_Veg_Skewer
+    Fullness: 2
+    IntimacyFed: 10
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: WANDER_MAN
+    TameItem: Skull_Of_Vagabond
+    EggItem: Wanderer_Egg
+    FoodItem: Spirit_Liquor
+    Fullness: 2
+    IntimacyFed: 20
+    CaptureRate: 800
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,3;
+        bonus bDex,1;
+      }
+  - Mob: P_CHUNG_E
+    EggItem: New_Year_Doll_Egg
+    FoodItem: Mojji
+    Fullness: 3
+    IntimacyFed: 30
+    CaptureRate: 800
+    SpecialPerformance: false
+  - Mob: GOLEM
+    TameItem: Magical_Lithography
+    EggItem: Golem_Egg
+    EquipItem: Windup_Spring
+    FoodItem: Mystic_Stone
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,100;
+        bonus bFlee,-5;
+      }
+  - Mob: MARIONETTE
+    TameItem: Delicious_Shaved_Ice
+    EggItem: Marionette_Egg
+    EquipItem: Star_Hairband
+    FoodItem: Small_Snow_Flower
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bSPrecovRate,3;
+      }
+  - Mob: MEDUSA
+    TameItem: Splendid_Mirror
+    EggItem: Medusa_Egg
+    EquipItem: Queen's_Coronet
+    FoodItem: Apple_Pudding
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stone,500;
+      }
+  - Mob: WHISPER
+    TameItem: Fit_Pipe
+    EggItem: Whisper_Egg
+    EquipItem: Spirit_Chain_
+    FoodItem: Damp_Darkness
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bFlee,7;
+        bonus bDef,-3;
+      }
+  - Mob: GOBLIN_LEADER
+    TameItem: Staff_Of_Leader
+    EggItem: Goblin_Leader_Egg
+    EquipItem: Nice_Badge
+    FoodItem: Big_Cell
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 50
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddRace,RC_DemiHuman,3;
+        bonus2 bAddRace,RC_Player,3;
+      }
+  - Mob: SUCCUBUS
+    TameItem: Boy's_Naivety
+    EggItem: Succubus_Egg
+    EquipItem: Black_Butterfly_Mask
+    FoodItem: Vital_Flower_
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bHPDrainRate,30,5;
+        bonus bMaxHPrate,1;
+      }
+  - Mob: INCUBUS
+    TameItem: Gril's_Naivety
+    EggItem: Incubus_Egg
+    EquipItem: Ball_Mask
+    FoodItem: Vital_Flower
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 50
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSPRate,5;
+        bonus2 bSPDrainRate,30,1;
+      }
+  - Mob: NIGHTMARE_TERROR
+    TameItem: Hell_Contract
+    EggItem: Nightmare_Terror_Egg
+    EquipItem: Hell_Horn
+    FoodItem: Fresh_Plant
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bResEff,Eff_Sleep,10000;
+      }
+  - Mob: SHINOBI
+    TameItem: Kuloren
+    EggItem: Shinobi_Egg
+    EquipItem: Wine_On_Sleeve
+    FoodItem: Grilled_Rice_Cake
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAgi,2;
+      }
+  - Mob: MIYABI_NINGYO
+    TameItem: Gril_Doll
+    EggItem: Miyabi_Ningyo_Egg
+    EquipItem: Summer_Fan
+    FoodItem: Well_Ripened_Berry
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bInt,1;
+        bonus bCastrate,-3;
+      }
+  - Mob: WICKED_NYMPH
+    TameItem: Charming_Lotus
+    EggItem: Wicked_Nymph_Egg
+    EquipItem: Jade_Trinket
+    FoodItem: Morning_Dew
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,30;
+        bonus bSPrecovRate,5;
+      }
+  - Mob: STONE_SHOOTER
+    TameItem: Oilpalm_Coconut
+    EggItem: Stone_Shooter_Egg
+    EquipItem: Apro_Hair
+    FoodItem: Plant_Neutrient
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Fire,3;
+      }
+  - Mob: DULLAHAN
+    TameItem: Luxury_Whisky_Bottle
+    EggItem: Dullahan_Egg
+    EquipItem: Death_Coil
+    FoodItem: Sunset_On_The_Rock
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritAtkRate,5;
+      }
+  - Mob: LOLI_RURI
+    TameItem: Very_Red_Juice
+    EggItem: Loli_Ruri_Egg
+    EquipItem: Fashionable_Glasses
+    FoodItem: Pumpkin_Pie_
+    Fullness: 3
+    IntimacyFed: 15
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHPRate,3;
+        bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10;
+      }
+  - Mob: CIVIL_SERVANT
+    TameItem: Fan_Of_Wind
+    EggItem: Civil_Servant_Egg
+    EquipItem: Golden_Earing
+    FoodItem: Flavored_Alcohol
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 500
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,10;
+      }
+  - Mob: LEAF_CAT
+    TameItem: Very_Soft_Plant
+    EggItem: Leaf_Cat_Egg
+    EquipItem: Green_Lucky_Bag
+    FoodItem: Fish_With_Blue_Back
+    Fullness: 7
+    IntimacyFed: 20
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubRace,RC_Brute,3;
+      }
+  - Mob: BACSOJIN_
+    TameItem: Shiny_Wing_Gown
+    EggItem: Bacsojin_Egg
+    EquipItem: Round_Hair_Ornament
+    FoodItem: Traditional_Cookie
+    Fullness: 7
+    IntimacyFed: 10
+    CaptureRate: 2000
+    SpecialPerformance: false
+  - Mob: IMP
+    TameItem: Flaming_Ice
+    EggItem: Imp_Egg
+    EquipItem: Horn_Protector
+    FoodItem: Flame_Gemstone
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 200
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bSubEle,Ele_Fire,2;
+        bonus2 bAddEle,Ele_Fire,2;
+      }
+  - Mob: E_CRAMP
+    TameItem: Leaf_Cat_Ball
+    EggItem: Mystic_Leaf_Cat_Ball
+    Fullness: 0
+    HungryDelay: 0
+    IntimacyStart: 0
+    IntimacyFed: 0
+    IntimacyOverfed: 0
+    IntimacyOwnerDie: 0
+    CaptureRate: 50
+    SpecialPerformance: false
+  - Mob: E_HYDRA
+    TameItem: Leaf_Cat_Ball
+    EggItem: Mystic_Leaf_Cat_Ball
+    Fullness: 0
+    HungryDelay: 0
+    IntimacyStart: 0
+    IntimacyFed: 0
+    IntimacyOverfed: 0
+    IntimacyOwnerDie: 0
+    CaptureRate: 50
+    SpecialPerformance: false
+  - Mob: J_TAINI
+    EggItem: Egg_Of_Tiny
+    FoodItem: Apple
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 0
+  - Mob: XMAS_LUNATIC
+    EggItem: Snow_Rabbit_Egg
+    FoodItem: Candy
+    Fullness: 3
+    IntimacyFed: 10
+    CaptureRate: 0
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bExpAddRace,RC_All,5;
+      }
+  - Mob: TIKBALANG
+    TameItem: Tikbalang_Belt
+    EggItem: Tikbalang_Pet
+    FoodItem: Monster's_Feed
+    Fullness: 8
+    IntimacyFed: 10
+    CaptureRate: 1000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus2 bAddDamageClass,2317,10;
+        bonus2 bAddDamageClass,2318,10;
+        bonus2 bAddDamageClass,2319,10;
+        bonus2 bAddDamageClass,2320,10;
+        bonus2 bAddDamageClass,2321,10;
+        bonus2 bAddDamageClass,2322,10;
+        bonus2 bAddDamageClass,2327,10;
+        bonus2 bAddDamageClass,2332,10;
+        bonus2 bAddDamageClass,2333,10;
+      }
+  - Mob: MARIN
+    TameItem: Juicy_Fruit
+    EggItem: Marin_Egg
+    EquipItem: Tw_Backpack
+    FoodItem: Fruit_Sundae
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+  - Mob: LITTLE_PORING
+    TameItem: Unripe_Apple2
+    EggItem: Novice_Poring_Egg
+    FoodItem: Apple_Juice
+    Fullness: 3
+    IntimacyFed: 1000
+    IntimacyOverfed: 0
+    IntimacyOwnerDie: 0
+    CaptureRate: 5000
+    SpecialPerformance: false
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHPrecovRate,50;
+      }
+  - Mob: NINE_TAIL
+    TameItem: Sap_Liquid
+    EggItem: Nine_Tail_Egg
+    FoodItem: Suspicious_Bottle
+    Fullness: 4
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,3;
+        bonus bHit,2;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,2;
+        bonus bHit,2;
+      }
+    Evolution:
+      - Target: CAT_O_NINE_TAIL
+        ItemRequirements:
+          - Item: Sap_Liquid
+            Amount: 3
+          - Item: Fox_Tail
+            Amount: 999
+          - Item: Punisher
+            Amount: 1
+          - Item: Nine_Tail_Card
+            Amount: 1
+  - Mob: GREMLIN
+    TameItem: Unprocessed_Parts
+    EggItem: Gremlin_Egg
+    FoodItem: Cheap_Lubricant
+    Fullness: 4
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus Dex,2;
+        bonus bHit,1;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bDex,1;
+        bonus bHit,1;
+      }
+    Evolution:
+      - Target: HODREMLIN
+        ItemRequirements:
+          - Item: Unprocessed_Parts
+            Amount: 3
+          - Item: Damp_Darkness
+            Amount: 50
+          - Item: Will_Of_Darkness
+            Amount: 200
+          - Item: Hodremlin_Card
+            Amount: 1
+  - Mob: MUMMY
+    TameItem: Elixir_Bandages
+    EggItem: Mummy_Egg
+    FoodItem: Mementos
+    Fullness: 7
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,5;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bHit,4;
+      }
+    Evolution:
+      - Target: ANCIENT_MUMMY
+        ItemRequirements:
+          - Item: Elixir_Bandages
+            Amount: 3
+          - Item: Rune_Of_Darkness
+            Amount: 200
+          - Item: Gold
+            Amount: 30
+          - Item: Ancient_Mummy_Card
+            Amount: 1
+  - Mob: TEDDY_BEAR
+    TameItem: Small_Needle_Kit
+    EggItem: Teddy_Bear_Egg
+    FoodItem: Cotton_Tufts
+    Fullness: 3
+    IntimacyFed: 50
+    CaptureRate: 2000
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxSP,150;
+      }
+    Evolution:
+      - Target: XM_TEDDY_BEAR
+        ItemRequirements:
+          - Item: Small_Needle_Kit
+            Amount: 3
+          - Item: Cursed_Seal
+            Amount: 300
+          - Item: Cardinal_Jewel_
+            Amount: 50
+          - Item: Teddy_Bear_Card
+            Amount: 1
+
+  # Pet Evolution, most are dummy values
+  - Mob: MASTERING
+    EggItem: Mastering_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bLuk,3;
+        bonus bCritical,3;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bLuk,3;
+        bonus bCritical,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bLuk,3;
+        bonus bCritical,1;
+      }else{
+        bonus bLuk,2;
+        bonus bCritical,1;
+      }
+    Evolution:
+      - Target: ANGELING
+        ItemRequirements:
+          - Item: Yellow_Potion
+            Amount: 20
+          - Item: Spirit_Chain
+            Amount: 1
+          - Item: White_Herb
+            Amount: 50
+          - Item: Jellopy
+            Amount: 200
+  - Mob: METALLER
+    EggItem: Metaller_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHPrecovRate,20;
+        bonus bMaxHP,70;
+        bonus2 bAddRace,RC_Plant,6;
+        bonus2 bMagicAddRace,RC_Plant,6;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bHPrecovRate,15;
+        bonus bMaxHP,55;
+        bonus2 bAddRace,RC_Plant,3;
+        bonus2 bMagicAddRace,RC_Plant,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bHPrecovRate,10;
+        bonus bMaxHP,38;
+      }else{
+        bonus bHPrecovRate,5;
+        bonus bMaxHP,25;
+      }
+  - Mob: ANGELING
+    EggItem: Angeling_Egg
+    FoodItem: Pet_Food
+    Fullness: 1
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHPrate,2;
+        bonus bHealPower,8;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxHPrate,2;
+        bonus bHealPower,6;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxHPrate,1;
+        bonus bHealPower,4;
+      }else{
+        bonus bMaxHPrate,1;
+        bonus bHealPower,2;
+      }
+  - Mob: MOONLIGHT
+    EggItem: Moonlight_Egg
+    FoodItem: Luxurious_Pet_Food
+    Fullness: 1
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,6;
+        bonus bHit,6;
+        autobonus "{ bonus bHPRegenRate,500,1000; bonus bSPRegenRate,20,1000; }",30,5000,BF_WEAPON|BF_SHORT;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,5;
+        bonus bHit,5;
+        autobonus "{ bonus bHPRegenRate,400,1000; bonus bSPRegenRate,10,1000; }",30,5000,BF_WEAPON|BF_SHORT;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bCritical,4;
+        bonus bHit,4;
+        autobonus "{ bonus bHPRegenRate,300,1000; }",20,5000,BF_WEAPON|BF_SHORT;
+      }else{
+        bonus bCritical,3;
+        bonus bHit,3;
+      }
+  - Mob: SAVAGE
+    EggItem: Savage_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,200;
+        bonus bVit,2;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxHP,100;
+        bonus bVit,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxHP,50;
+        bonus bVit,2;
+      }else{
+        bonus bMaxHP,50;
+        bonus bVit,1;
+      }
+  - Mob: HIGH_ORC
+    EggItem: High_Orc_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,200;
+        bonus bVit,2;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxHP,100;
+        bonus bVit,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxHP,50;
+        bonus bVit,2;
+      }else{
+        bonus bMaxHP,50;
+        bonus bVit,1;
+      }
+  - Mob: CHOCO
+    EggItem: Choco_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,9;
+        bonus bLongAtkRate,3;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,7;
+        bonus bLongAtkRate,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bCritical,5;
+        bonus bLongAtkRate,1;
+      }else{
+        bonus bCritical,3;
+      }
+  - Mob: ANCIENT_MUMMY
+    EggItem: Ancient_Mummy_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,6;
+        bonus2 bAddClass,Class_All,6;
+        bonus2 bMagicAddClass,Class_All,6;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bHit,6;
+        bonus2 bAddClass,Class_All,3;
+        bonus2 bMagicAddClass,Class_All,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bHit,5;
+      }else{
+        bonus bHit,4;
+      }
+  - Mob: AM_MUT
+    EggItem: Am_Mut_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMatkRate,4;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMatkRate,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMatkRate,2;
+      }else{
+        bonus bMatkRate,1;
+      }
+  - Mob: CAT_O_NINE_TAIL
+    EggItem: Cat_o_Nine_Tail_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,5;
+        bonus bHit,5;
+        autobonus "{ bonus bHPRegenRate,400,1000; }",20,5000,BF_WEAPON|BF_SHORT;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,4;
+        bonus bHit,4;
+        autobonus "{ bonus bHPRegenRate,300,1000; }",20,5000,BF_WEAPON|BF_SHORT;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bCritical,3;
+        bonus bHit,3;
+      }else{
+        bonus bCritical,2;
+        bonus bHit,2;
+      }
+    Evolution:
+      - Target: MOONLIGHT
+        ItemRequirements:
+          - Item: Powerful_Soul_Essence
+            Amount: 30
+          - Item: Nine_Tail_Card
+            Amount: 10
+          - Item: Sohee_Card
+            Amount: 10
+          - Item: Munak_Card
+            Amount: 10
+  - Mob: GRAND_PECO
+    EggItem: Grand_Peco_Peco_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxHP,400;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxHP,300;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxHP,200;
+      }else{
+        bonus bMaxHP,150;
+      }
+  - Mob: HYEGUN
+    EggItem: Hyegun_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bVit,4;
+        bonus2 bResEff,Eff_Stun,400;
+        bonus2 bSPDrainRate,20,1;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bVit,3;
+        bonus2 bResEff,Eff_Stun,300;
+        bonus2 bSPDrainRate,10,1;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bVit,2;
+        bonus2 bResEff,Eff_Stun,200;
+      }else{
+        bonus bVit,1;
+        bonus2 bResEff,Eff_Stun,100;
+      }
+  - Mob: HODREMLIN
+    EggItem: Hodremlin_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bDex,2;
+        bonus bHit,2;
+        bonus bCritAtkRate,9;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bDex,2;
+        bonus bHit,2;
+        bonus bCritAtkRate,7;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bDex,2;
+        bonus bHit,1;
+      }else{
+        bonus bDex,1;
+        bonus bHit,1;
+      }
+  - Mob: XM_TEDDY_BEAR
+    EggItem: Xm_Teddy_Bear_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bMaxSP,150;
+        autobonus "{ bonus bSPRegenRate,40,1000; }",30,5000,BF_MAGIC;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bMaxSP,150;
+        autobonus "{ bonus bSPRegenRate,30,1000; }",30,5000,BF_MAGIC;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bMaxSP,100;
+      }else{
+        bonus bMaxSP,50;
+      }
+  - Mob: DR_EGGRING
+    EggItem: Eggring_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bHit,9;
+        bonus bAtk,9;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bHit,7;
+        bonus bAtk,7;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bHit,5;
+        bonus bAtk,5;
+      }else{
+        bonus bHit,3;
+        bonus bAtk,3;
+      }
+  - Mob: DR_LUNATIC
+    EggItem: Dr_Lunatic_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bCritical,5;
+        bonus bAtk,5;
+        bonus2 bAddRace,RC_Formless,6;
+        bonus2 bMagicAddRace,RC_Formless,6;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bCritical,4;
+        bonus bAtk,4;
+        bonus2 bAddRace,RC_Formless,3;
+        bonus2 bMagicAddRace,RC_Formless,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bCritical,3;
+        bonus bAtk,3;
+      }else{
+        bonus bCritical,2;
+        bonus bAtk,2;
+      }
+  - Mob: LITTLE_ISIS
+    EggItem: Little_Isis_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAtkRate,4;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bAtkRate,3;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bAtkRate,2;
+      }else{
+        bonus bAtkRate,1;
+      }
+  - Mob: DIABOLIC2
+    EggItem: Diabolic_2_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bAtkRate,2;
+        bonus bMatkRate,2;
+        bonus bMaxHPrate,1;
+        bonus bMaxSPrate,1;
+        bonus5 bAutoSpell,"MG_FIREBOLT",3,50,BF_WEAPON|BF_SHORT,1;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bAtkRate,1;
+        bonus bMatkRate,1;
+        bonus bMaxHPrate,1;
+        bonus bMaxSPrate,1;
+      }else{
+        bonus bAtkRate,1;
+        bonus bMatkRate,1;
+      }
+  - Mob: DELETER_2
+    EggItem: Fire_Deleter_Egg
+    FoodItem: Pet_Food
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_LOYAL ){
+        bonus bAspdRate,3;
+        bonus bAgi,3;
+      }else if( .@i >= PET_INTIMATE_CORDIAL ){
+        bonus bAspdRate,2;
+        bonus bAgi,2;
+      }else if( .@i >= PET_INTIMATE_NEUTRAL ){
+        bonus bAspdRate,2;
+        bonus bAgi,1;
+      }else{
+        bonus bAspdRate,1;
+      }
+  - Mob: SWEETS_DROPS
+    EggItem: Sweet_Drops_Egg
+    FoodItem: Candy
+    Fullness: 2
+    HungryDelay: 120
+    IntimacyFed: 15
+    CaptureRate: 0
+    SpecialPerformance: false
+    AllowAutoFeed: true
+    Script: >
+      .@i = getpetinfo(PETINFO_INTIMATE);
+      
+      if( .@i >= PET_INTIMATE_CORDIAL ){
+        /* bonus2 bExpAddClass,Class_All,3; */
+        bonus2 bExpAddClass,Class_All,1;
+      }

+ 33 - 33
db/re/quest_db.txt

@@ -2115,39 +2115,39 @@
 9270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"The way to be a strong Mage - 4"
 
 //Geffen Magic Tournament
-9284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9293,0,1106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9295,0,2549,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9296,0,2550,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9298,0,2553,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9299,0,2554,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9300,0,2555,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9301,0,2556,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9302,0,2557,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9303,0,2558,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9304,0,2559,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9305,0,2560,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9306,0,2561,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9307,0,2562,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9313,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9315,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
-9316,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Geffen"
+9284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Stopping Geffen Gangsters"
+9285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Beating Geffen Gangsters"
+9286,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Stop Geffen Gangsters"
+9287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Defeating Geffen Gangsters"
+9288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Catch a Geffen thief"
+9289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Get things back from the thief"
+9290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Participate in Magic competitions"
+9291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Participate in Magic competitions"
+9292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Participate in Magic competitions"
+9293,0,1106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Register in Magic Competition"
+9294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Registration Complete"
+9295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"1st match of the Tournament has started"
+9296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"2nd match of the Competition has started"
+9297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"3rd match of the Competition has started"
+9298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"4th match of the Competition has started"
+9299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"5th match of the Competition has started"
+9300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"6th match of the Competition has started"
+9301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"7th match of the Competition has started"
+9302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"8th match of the Competition has started"
+9303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"9th match of the Competition has started"
+9304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"10th match of the Competition has started"
+9305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"11th match of the Competition has started"
+9306,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"12th match of the Competition has started"
+9307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Final match of the Competition has started"
+9308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Magic Competition Win~!"
+9309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Magic Tournament defeat"
+9310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Iris"
+9311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Chaos"
+9312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Lydia"
+9313,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Fenrir"
+9314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Encounter Loki"
+9315,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Exploring the dimensional gap"
+9316,82800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Re-exploring the crack of spaces"
 
 // EP14.3 Morse's Cave
 9318,0,3000,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Pursuing Hiding Morroc"

+ 12 - 18
db/re/skill_cast_db.txt

@@ -669,7 +669,7 @@
 
 //===== Taekwon ============================
 //-- TK_RUN
-411,3000:2500:2000:1500:1000:500:0:0:0:0,300,0,1000,150000,0,3000:2500:2000:1500:1000:500:-1-1-1-1
+411,3000:2500:2000:1500:1000:500:0:0:0:0,300,0,1000,150000,0,3000:2500:2000:1500:1000:500:-1:-1:-1:-1
 //-- TK_DOWNKICK
 415,0,0,0,0,3000,0,0
 //-- TK_TURNKICK
@@ -1053,6 +1053,8 @@
 716,0,0,0,10000,0,0,0
 //-- NPC_JACKFROST
 720,0,0,0,12500:17500:22500:27500:32500,0,0,-1
+//-- NPC_REVERBERATION
+725,0,0,0,9000:10000:11000:12000:13000,0,0,-1
 
 //===== 2nd Jobs Quest Skills ==============
 //-- KN_CHARGEATK
@@ -1347,7 +1349,9 @@
 //-- NC_DISJOINT
 2283,2000,0,0,0,0,0,-1
 //-- NC_MAGMA_ERUPTION
-5006,1000,500,0,5000,42000,10000:9000:8000:7000:6000,-1
+5006,1000,500,0,5000,5000,10000:9000:8000:7000:6000,-1
+//-- NC_MAGMA_ERUPTION_DOTDAMAGE
+5015,0,0,0,0,20000,0,-1
 //==========================================
 
 //===== Shadow Chaser ======================
@@ -1659,20 +1663,16 @@
 //==========================================
 
 //===== Rebellion Skills ===================
-//-- RL_GLITTERING_GREED
-//2551,0,0,0,0,0,0,-1
 //-- RL_RICHS_COIN
 2552,0,1000,0,600000,0,3000,-1
 //-- RL_MASS_SPIRAL
-2553,2000,1000,0,0,30000,2000,1000
+2553,1000,1000,0,120000,0,2000,2000
 //-- RL_BANISHING_BUSTER
-2554,3000:2500:2000:1500:1000,2000,0,0,0,10000,-1
+2554,3000:2500:2000:1500:1000,0,0,0,0,2000,1000
 //-- RL_B_TRAP
-2555,0,2500:2000:1500:1000:500,0,10000,9000:14000:19000:24000:29000,10000,-1
-//-- RL_FLICKER
-2556,0,0,0,0,0,10000,-1
+2555,2000:1600:1200:800:400,2500:2000:1500:1000:500,0,10000,10000:11000:12000:13000:14000,10000,-1
 //-- RL_S_STORM
-2557,3000:2500:2000:1500:1000,2000,0,0,0,2000,1000
+2557,3000:2500:2000:1500:1000,0,0,0,0,2000,1000
 //-- RL_E_CHAIN
 2558,1000,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,0,-1
 //-- RL_QD_SHOT
@@ -1680,11 +1680,11 @@
 //-- RL_C_MARKER
 2560,0,0,0,30000,0,1000,-1
 //-- RL_FIREDANCE
-2561,0,500,0,0,0,5000,-1
+2561,0,500,0,0,0,0,-1
 //-- RL_H_MINE
 2562,1000,1000,0,50000,15000,5000:4500:4000:3500:3000,-1
 //-- RL_P_ALTER
-2563,0,0,0,30000:45000:60000:75000:90000,0,0,-1
+2563,2000,0,0,42000:54000:66000:78000:90000,0,0,-1
 //-- RL_FALLEN_ANGEL
 2564,0,0,0,2000,0,0,-1
 //-- RL_R_TRIP
@@ -1701,12 +1701,6 @@
 2570,5000:6000:7000:8000:9000,1000,0,0,2000,5000,1000
 //-- RL_HAMMER_OF_GOD
 2571,0,2000,0,0,3000:3000:4000:4000:5000,30000,-1
-//-- RL_R_TRIP_PLUSATK
-//2572,0,0,0,0,0,0,-1
-//-- RL_B_FLICKER_ATK
-//2573,0,0,0,0,0,0,-1
-//-- RL_GLITTERING_GREED_ATK
-//2574,0,0,0,0,0,0,-1
 //==========================================
 
 //==== Kagerou & Oboro Skills ==============

+ 4 - 3
db/re/skill_db.txt

@@ -871,8 +871,8 @@
 //722,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_WIDESUCK,Wide Suck
 //723,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_STORMGUST2,Storm Gust 2
 //724,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_FIRESTORM,Fire Storm
-//725,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_REVERBERATION,Reverberation 2
-//726,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_REVERBERATION_ATK,Reverberation Attack
+725,1,6,2,0,0x3,2,5,1,no,0,0x20082,0,none,0,0x0,	NPC_REVERBERATION,Reverberation 2
+726,1,6,1,0,0x6,2,5,1,no,0,0x2,0,weapon,0,0x0,	NPC_REVERBERATION_ATK,Reverberation Attack
 727,9,6,2,0,0x3,2:5:8:11:14,5,0,yes,0,0x2,0,magic,0,0x0,	NPC_LEX_AETERNA,Lex Aeterna 2
 728,9,8,1,-1,0x2,3:3:3:3:3:4:4:4:4:5,10,-3,yes,0,0x2,0,weapon,0,0x80,		NPC_ARROWSTORM,NPC Arrow Storm
 //729,0,0,0,0,0,0,??,0,no,0,0,0,none,0,0x0,		NPC_CHEAL,NPC Coluceo Heal
@@ -1399,7 +1399,7 @@
 5003,7,6,1,-1,0x2,4:5:6:7:-1,5,1,no,0,0,0,weapon,0,0x0, GN_ILLUSIONDOPING,Illusion Doping
 5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0x40000,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
 5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
-5006,1,6,2,3,0x2,3,5,1,no,0,0,3,misc,0,0x4000, NC_MAGMA_ERUPTION,Magma Eruption
+5006,1,6,2,-1,0x2,3,5,1,no,0,0,3,weapon,0,0x4000, NC_MAGMA_ERUPTION,Magma Eruption
 5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song
 5008,0,6,4,0,0x3,11,5,1,no,0,0,0,none,0,0x0, SO_ELEMENTAL_SHIELD,Elemental Shield
 5009,1,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO,Flash Combo
@@ -1408,6 +1408,7 @@
 5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
 5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
 5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x4000, ALL_FULL_THROTTLE,Full Throttle
+5015,1,6,1,0,0xC0,0,5,1,no,0,0,0,misc,0,0,	NC_MAGMA_ERUPTION_DOTDAMAGE,Magma Eruption Dot Damage
 
 // Summoner
 5018,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0,		SU_BASIC_SKILL,New Basic Skill

+ 1 - 0
db/re/skill_unit_db.txt

@@ -112,6 +112,7 @@
 708,0x86,     ,  0, 9,1000,enemy, 0x018	//NPC_COMET
 709,0xfe,     ,  0, 3,1000,enemy, 0x8018	//NPC_ICEMINE
 711,0xff,     , -1, 0,1000,enemy, 0x8018	//NPC_FLAMECROSS
+725,0xda,     ,  0, 0,1000,enemy, 0x1000	//NPC_REVERBERATION
 
 2044,0xca,    ,  0, 2,1000,all,   0x018	//AB_EPICLESIS
 

+ 3 - 2
doc/achievements.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Last Updated: ========================================
-//= 20170531
+//= 20190226
 //===== Description: =========================================
 //= Explanation of the achievements_db.yml file and structure.
 //============================================================
@@ -64,7 +64,8 @@ Example 2:
   // IE: In the achievement_list.lub file, UI_Type 0 is displayed as non-incremental while 1 shows a progress bar of completion for the achievement.
   Condition: " ARG0 >= 100 "
   Target:
-    - Count: 100
+    - Id: 0 // Array index value
+      Count: 100
 
 ---------------------------------------
 

+ 1 - 1
doc/atcommands.txt

@@ -1361,7 +1361,7 @@ Affected files:
 -- battleconf: battle_athena.conf, battle_conf.txt
 -- instancedb: instance_db.txt
 -- itemdb: item_db.txt, item_group_db.txt, item_trade.txt, item_noequip.txt, item_nouse.txt, item_combo_db.txt, item_avail.txt, item_stack.txt, item_delay.txt, item_buyingstore.txt, item_flag.txt
--- mobdb: mob_db.txt, mob_item_ratio.txt, mob_chat_db.txt, mob_avail.txt, mob_race2_db.txt, mob_branch.txt, mob_poring.txt, mob_boss.txt, mob_pouch.txt, mob_classchange.txt, pet_db.txt, homunculus_db.txt, homun_skill_tree.txt, exp_homun.txt, mercenary_db.txt, mercenary_skill_db.txt, elemental_db.txt, elemental_skill_db.txt
+-- mobdb: mob_db.txt, mob_item_ratio.txt, mob_chat_db.txt, mob_avail.txt, mob_race2_db.txt, mob_branch.txt, mob_poring.txt, mob_boss.txt, mob_pouch.txt, mob_classchange.txt, pet_db.yml, homunculus_db.txt, homun_skill_tree.txt, exp_homun.txt, mercenary_db.txt, mercenary_skill_db.txt, elemental_db.txt, elemental_skill_db.txt
 -- motd: motd.txt
 -- msgconf: atcommand_athena.conf
 -- pcdb: statpoint.txt, job_exp.txt, skill_tree.txt, attr_fix.txt, job_db1.txt, job_db2.txt, job_basehpsp_db.txt, job_maxhpsp_db.txt, job_param_db.txt, level_penalty.txt

+ 6 - 4
doc/item_bonus.txt

@@ -374,11 +374,13 @@ bonus2 bSPDrainRate,x,n;		Adds a x/10% chance to drain n% SP from inflicted dama
 
 HP/SP vanish
 ------------
-bonus2 bHPVanishRate,x,n;		Add a x/10% chance of decreasing enemy's HP amount by n% when attacking
-bonus2 bSPVanishRate,x,n;		Add a x/10% chance of decreasing enemy's SP amount by n% when attacking
+bonus2 bHPVanishRate,x,n;		Add a x/10% chance of decreasing enemy's HP amount by n% with a normal attack
+bonus3 bHPVanishRaceRate,r,x,n;		Add a x/10% chance of decreasing enemy's HP amount by n% when attacking, depends on enemy race r
+bonus3 bHPVanishRate,x,n,bf;	Add a x/10% chance of decreasing enemy's HP amount by n% when attacking with trigger criteria bf
 
-bonus3 bHPVanishRaceRate,r,x,n;		Add a x/100% chance of decreasing enemy's HP amount by n% when attacking, depends on enemy race r
-bonus3 bSPVanishRaceRate,r,x,n;		Add a x/100% chance of decreasing enemy's SP amount by n% when attacking, depends on enemy race r
+bonus2 bSPVanishRate,x,n;		Add a x/10% chance of decreasing enemy's SP amount by n% with a normal attack
+bonus3 bSPVanishRaceRate,r,x,n;		Add a x/10% chance of decreasing enemy's SP amount by n% when attacking, depends on enemy race r
+bonus3 bSPVanishRate,x,n,bf;	Add a x/10% chance of decreasing enemy's SP amount by n% when attacking with trigger criteria bf
 
 bonus3 bStateNoRecoverRace,r,x,t;	Set a no recovery state of an enemy of race r at x/100% for t milliseconds with normal attack.
 

+ 252 - 157
doc/script_commands.txt

@@ -477,7 +477,8 @@ nothing  - A permanent variable attached to the character, the default variable
            ('return .@var;' returns a value, not a reference).
 "'"      - An instance variable.
            These are used with the instancing system and are unique to each
-           instance type.
+           instance type. Can be accessed from inside the instance or by calling
+           'getvariableofinstance'.
 "#"      - A permanent local account variable.
            They are stored by char-server in the `acc_reg_num` table and
            `acc_reg_str`.
@@ -582,8 +583,8 @@ Assigning variables
 
 Variables can be accessed and modified much like in other programming languages.
 
-	@x = 100;
-	@x = @y = 100;
+	.@x = 100;
+	.@x = .@y = 100;
 
 Support for modifying variable values using 'set' is still supported (and required
 to exist for this new method to work) so previous scripts will continue to work.
@@ -591,13 +592,13 @@ to exist for this new method to work) so previous scripts will continue to work.
 When assigning values, all operator methods are supported which exist in the below
 'Operators' section. For instance:
 
-	@x += 100;
-	@x -= 100;
-	@x *= 2;
-	@x /= 2;
-	@x %= 5;
-	@x >>= 2;
-	@x <<= 2;
+	.@x += 100;
+	.@x -= 100;
+	.@x *= 2;
+	.@x /= 2;
+	.@x %= 5;
+	.@x >>= 2;
+	.@x <<= 2;
 
 Will all work. For more information on available operators, see the Operators section
 described below. All operators listed there may be placed in-front of the '=' sign
@@ -631,15 +632,15 @@ Arrays are specifically useful for storing a set of similar data (like several
 item IDs for example) and then looping through it. You can address any array
 variable as if it was a normal variable:
 
-	set @arrayofnumbers[0],1;
+	set .@arrayofnumbers[0],1;
 
 You can also do things like using a variable (or an expression, or even a
 value from another array) to get at an array value:
 
-	set @x,100;
-	set @arrayofnumbers[@x],10;
+	set .@x,100;
+	set .@arrayofnumbers[.@x],10;
 
-This will make @arrayofnumbers[100] equal to 10.
+This will make .@arrayofnumbers[100] equal to 10.
 
 Index numbering always starts with 0 and arrays can hold over 2 billion
 variables. As such, the (guaranteed) allowed values for indices are in the
@@ -651,7 +652,7 @@ to be pretty.
 
 Arrays can naturally store strings:
 
-@menulines$[0] is the 0th element of the @menulines$ array of strings. Notice
+.@menulines$[0] is the 0th element of the .@menulines$ array of strings. Notice
 the '$', normally denoting a string variable, before the square brackets that
 denotes an array index.
 
@@ -697,7 +698,7 @@ Examples:
 
  1 == 1 is True.
  1<2 is True while 1>2 is False.
- @x>2 is True if @x is equal to 3. But it isn't true if @x is 2.
+ .@x>2 is True if .@x is equal to 3. But it isn't true if .@x is 2.
 
 Only ' == ' and '!=' have been tested for comparing strings. Since there's no way
 to code a seriously complex data structure in this language, trying to sort
@@ -754,14 +755,14 @@ Logical bitwise operators work only on numbers, and they are the following:
 		2 = 2^1 (2), so in bits (same size) it would be 0010
 		The & (AND) operator sets bits which are active (1) in both arguments, so in the
 		example 1010 & 0010, only the 2^1 bit is active (1) in both. Resulting in the bit
-		0010, which is 2.
+		0010, which is 2. 
 	- Basic example of creating and using a bit-mask:
-		set @options,2|4|16; //(note: this is the same as 2+4+16, or 22)
-		if (@options & 1)	mes "Option 1 is activated";
-		if (@options & 2) mes "Option 2 is activated";
-		if (@options & 4) mes "Option 3 is activated";
-		if (@options & 8) mes "Option 4 is activated";
-		if (@options & 16) mes "Options 5 is activated";
+		set .@options,2|4|16; //(note: this is the same as 2+4+16, or 22)
+		if (.@options & 1)	mes "Option 1 is activated";
+		if (.@options & 2)	mes "Option 2 is activated";
+		if (.@options & 4)	mes "Option 3 is activated";
+		if (.@options & 8)	mes "Option 4 is activated";
+		if (.@options & 16)	mes "Options 5 is activated";
 	This would return the messages about option 2, 3 and 5 being shown (since we've set
 	the 2,4 and 16 bit to 1).
  ^  - Xor.
@@ -1232,14 +1233,14 @@ other programming language (refer to the "Assigning variables" section).
 This is the most basic script command and is used a lot whenever you try to do
 anything more advanced than just printing text into a message box.
 
-	set @x,100;
+	set .@x,100;
 
-will make @x equal 100.
+will make .@x equal 100.
 
-	set @x,1+5/8+9;
+	set .@x,1+5/8+9;
 
 will compute 1+5/8+9 (which is, surprisingly, 10 - remember, all numbers are
-integer in this language) and make @x equal it.
+integer in this language) and make .@x equal it.
 
 Returns the variable reference (since trunk r12870).
 
@@ -1278,7 +1279,7 @@ This can also be used to set an array dynamically:
 Examples:
 
 	set getd("$varRefence"), 1;
-	set @i, getd("$" + "pikachu");
+	set .@i, getd("$" + "pikachu");
 
 ---------------------------------------
 
@@ -1387,46 +1388,46 @@ with the strings that should go into the menu at this execution, making sure not
 to leave any gaps. Normally, you do it with a loop and an extra counter, like
 this:
 
-	setarray @possiblemenuitems$[0],<list of potential menu items>;
-	@j = 0; // That's the menu lines counter.
+	setarray .@possiblemenuitems$[0],<list of potential menu items>;
+	.@j = 0; // That's the menu lines counter.
 
 	// We loop through the list of possible menu items.
-	// @i is our loop counter.
-	for( @i = 0; @i < getarraysize(@possiblemenuitems$); @i++ )
+	// .@i is our loop counter.
+	for( .@i = 0; .@i < getarraysize(.@possiblemenuitems$); .@i++ )
 	{
 		// That 'condition' is whatever condition that determines whether
-		// a menu item number @i actually goes into the menu or not.
+		// a menu item number .@i actually goes into the menu or not.
 
 		if (<condition>)
 		{
 			// We record the option into the list of options actually available.
 
-			@menulist$[@j] = @possiblemenuitems$[@i];
+			.@menulist$[@j] = .@possiblemenuitems$[@i];
 
 			// We just copied the string, we do need its number for later
 			// though, so we record it as well.
 
-			@menureference[@j] = @i;
+			.@menureference[@j] = .@i;
 
 			// Since we've just added a menu item into the list, we increment
 			// the menu lines counter.
 
-			@j++;
+			.@j++;
 		}
 
 		// We go on to the next possible menu item.
 	}
 
-This will create you an array @menulist$ which contains the text of all items
+This will create you an array .@menulist$ which contains the text of all items
 that should actually go into the menu based on your condition, and an array
-@menureference, which contains their numbers in the list of possible menu items.
+.@menureference, which contains their numbers in the list of possible menu items.
 (Remember, arrays start with 0.) There's less of them than the possible menu
 items you've defined, but the menu command can handle the empty lines - only if
 they are last in the list, and if it's made this way, they are. Now comes a
 dirty trick:
 
 	// X is whatever the most menu items you expect to handle.
-	menu @menulist$[0],-,@menulist$[1],-,....@menulist$[<X>],-;
+	menu .@menulist$[0],-,.@menulist$[1],-,...,.@menulist$[<X>],-;
 
 This calls up a menu of all your items. Since you didn't copy some of the
 possible menu items into the list, its end is empty and so no menu items will
@@ -1441,18 +1442,18 @@ But how do you figure out which option the user picked? Enter the @menu.
 starting with 1 for the first option. You know now which option the user picked
 and which number in your real list of possible menu items it translated to:
 
-    mes "You selected " + @possiblemenuitems$[@menureference[@menu-1]] + "!";
+    mes "You selected " + .@possiblemenuitems$[.@menureference[@menu-1]] + "!";
 
 @menu is the number of option the user picked.
 @menu-1 is the array index for the list of actually used menu items that we
 made.
-@menureference[@menu-1] is the number of the item in the array of possible menu
+.@menureference[@menu-1] is the number of the item in the array of possible menu
 items that we've saved just for this purpose.
 
-And @possiblemenuitems$[@menureference[@menu-1]] is the string that we used to
+And .@possiblemenuitems$[.@menureference[@menu-1]] is the string that we used to
 display the menu line the user picked. (Yes, it's a handful, but it works.)
 
-You can set up a bunch of 'if (@menureference[@menu-1] == X) goto Y' statements to
+You can set up a bunch of 'if (.@menureference[@menu-1] == X) goto Y' statements to
 route your execution based on the line selected and still generate a different
 menu every time, which is handy when you want to, for example, make users select
 items in any specific order before proceeding, or make a randomly shuffled menu.
@@ -1464,7 +1465,7 @@ probably since that wasn't documented anywhere.
 See also 'select', which is probably better in this particular case. Instead of
 menu, you could use 'select' like this:
 
-    @dummy = select(@menulist$[0],@menulist$[1],....@menulist$[<X>]);
+    .@dummy = select(.@menulist$[0],.@menulist$[1],...,.@menulist$[<X>]);
 
 For the purposes of the technique described above these two statements are
 perfectly equivalent.
@@ -1580,8 +1581,8 @@ generally cleaner:
 		mes "[Man]"
 		mes "Gimme a number!";
 		next;
-		input @number;
-		if (callfunc("OddFunc",@number)) mes "It's Odd!";
+		input .@number;
+		if (callfunc("OddFunc",.@number)) mes "It's Odd!";
 		close;
 	}
 	function%TAB%script%TAB%OddFunc%TAB%{
@@ -1890,15 +1891,15 @@ Notice that examples 1 and 2 have the same effect.
 
 Example 3:
 
-	@count++;
+	.@count++;
 	mes "[Forgetful Man]";
-	if (@count == 1) mes "This is the first time you have talked to me.";
-	if (@count == 2) mes "This is the second time you have talked to me.";
-	if (@count == 3) mes "This is the third time you have talked to me.";
-	if (@count == 4) {
+	if (.@count == 1) mes "This is the first time you have talked to me.";
+	if (.@count == 2) mes "This is the second time you have talked to me.";
+	if (.@count == 3) mes "This is the third time you have talked to me.";
+	if (.@count == 4) {
 		mes "This is the fourth time you have talked to me.";
 		mes "I think I am getting amnesia, I have forgotten about you...";
-		@count = 0;
+		.@count = 0;
 	}
 	close;
 
@@ -2182,19 +2183,19 @@ Example:
 This command will allow you to quickly fill up an array in one go. Check the
 Kafra scripts in the distribution to see this used a lot.
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600;
+    setarray .@array[0], 100, 200, 300, 400, 500, 600;
 
 First value is the index of the first element of the array to alter. For
 example:
 
-    setarray @array[0],200,200,200;
-    setarray @array[1],300,150;
+    setarray .@array[0],200,200,200;
+    setarray .@array[1],300,150;
 
 will produce:
 
- @array[0]=200
- @array[1]=300
- @array[2]=150
+ .@array[0]=200
+ .@array[1]=300
+ .@array[2]=150
 
 ---------------------------------------
 
@@ -2202,13 +2203,13 @@ will produce:
 
 This command will change many array values at the same time to the same value.
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600;
+    setarray .@array[0], 100, 200, 300, 400, 500, 600;
     // This will make all 6 values 0
-    cleararray @array[0],0,6;
+    cleararray .@array[0],0,6;
     // This will make array element 0 change to 245
-    cleararray @array[0],245,1;
+    cleararray .@array[0],245,1;
     // This will make elements 1 and 2 change to 345
-    cleararray @array[1],345,2;
+    cleararray .@array[1],345,2;
 
 See 'setarray'.
 
@@ -2219,28 +2220,28 @@ See 'setarray'.
 This command lets you quickly shuffle a lot of data between arrays, which is in
 some cases invaluable.
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600;
-    // So we have made @array[]
-    copyarray @array2[0],@array[2],2;
+    setarray .@array[0], 100, 200, 300, 400, 500, 600;
+    // So we have made .@array[]
+    copyarray .@array2[0],@array[2],2;
 
-    // Now, @array2[0] will be equal to @array[2] (300) and
-    // @array2[1] will be equal to @array[3].
+    // Now, .@array2[0] will be equal to .@array[2] (300) and
+    // .@array2[1] will be equal to .@array[3].
 
 So using the examples above:
- @array[0] = 100
- @array[1] = 200
- @array[2] = 300
- @array[3] = 400
- @array[4] = 500
- @array[5] = 600
+ .@array[0] = 100
+ .@array[1] = 200
+ .@array[2] = 300
+ .@array[3] = 400
+ .@array[4] = 500
+ .@array[5] = 600
 
 New Array:
- @array2[0] = 300
- @array2[1] = 400
- @array2[2] = 0
- @array2[3] = 0
+ .@array2[0] = 300
+ .@array2[1] = 400
+ .@array2[2] = 0
+ .@array2[3] = 0
 
-Notice that @array[4] and @array[5] won't be copied to the second array, and it will return a
+Notice that .@array[4] and .@array[5] won't be copied to the second array, and it will return a
 0.
 
 ---------------------------------------
@@ -2252,12 +2253,12 @@ array, shifting all the elements beyond this towards the beginning.
 
     // This will delete array element 0, and move all the other array elements
     // up one place.
-    deletearray @array[0],1
+    deletearray .@array[0],1
 
 // This would delete array elements numbered 1, 2 and 3, leave element 0 in its
 // place, and move the other elements ups, so there are no gaps.
 
-    deletearray @array[1],3
+    deletearray .@array[1],3
 
 ---------------------------------------
 
@@ -2295,7 +2296,7 @@ While being optional, if [<start index>] is supplied, the search will begin from
 	
 	.@variable = 100;
 	if(countinarray(.@array[0], .@variable))
-		mes "The number 100 was found in the array @array";
+		mes "The number 100 was found in the array .@array";
 	
 	countinarray(.@array[0], .@variable);
 	//return 1 because the number 100 is an element of the array .@array
@@ -2358,15 +2359,15 @@ counted towards this number.
 
 For example:
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600;
-    set @arraysize,getarraysize(@array);
+    setarray .@array[0], 100, 200, 300, 400, 500, 600;
+    set .@arraysize,getarraysize(.@array);
 
-This will make @arraysize == 6. But if you try this:
+This will make .@arraysize == 6. But if you try this:
 
-    setarray @array[0], 100, 200, 300, 400, 500, 600, 0;
-    set @arraysize,getarraysize(@array);
+    setarray .@array[0], 100, 200, 300, 400, 500, 600, 0;
+    set .@arraysize,getarraysize(.@array);
 
-@arraysize will still equal 6, even though you've set 7 values.
+.@arraysize will still equal 6, even though you've set 7 values.
 
 ---------------------------------------
 
@@ -3083,11 +3084,11 @@ Example:
     prontera,164,299,3%TAB%script%TAB%Nyah%TAB%730,{
         mes "My name is Nyah.";
         mes "I will now search for Meh all across the world!";
-        if (getmapxy(@mapname$, @mapx, @mapy, BL_NPC, "Meh") != 0) {
+        if (getmapxy(.@mapname$, .@mapx, .@mapy, BL_NPC, "Meh") != 0) {
                 mes "I can't seem to find Meh anywhere!";
                 close;
         }
-        mes "And I found him on map " + @mapname$ + " at X:" + @mapx + " Y:" + @mapy + " !";
+        mes "And I found him on map " + .@mapname$ + " at X:" + .@mapx + " Y:" + .@mapy + " !";
         close;
    }
 
@@ -4322,12 +4323,12 @@ class number system, but it's one that comes with constants which make it easy
 to convert among classes. The command will return -1 if you pass it a job number
 which doesn't have an eA job-number equivalent.
 
-	@eac = eaclass();
-	if ((@eac&EAJ_BASEMASK) == EAJ_SWORDMAN)
+	.@eac = eaclass();
+	if ((.@eac&EAJ_BASEMASK) == EAJ_SWORDMAN)
 		mes "Your base job is Swordman.";
-	if (@eac&EAJL_UPPER)
+	if (.@eac&EAJL_UPPER)
 		mes "You are a rebirth job.";
-	if ((@eac&EAJ_UPPERMASK) == EAJ_SWORDMAN)
+	if ((.@eac&EAJ_UPPERMASK) == EAJ_SWORDMAN)
 		mes "You must be a Swordman, Baby Swordman or High Swordman.";
 
 For more information on the eA Job System, see the docs/ea_job_system.txt file.
@@ -4343,16 +4344,16 @@ gender if none is given (if no player is attached, male will be used by default)
 The command will return -1 if there is no valid class to represent the specified
 job (for example, if you try to get the baby version of a Taekwon class).
 
-	@eac = eaclass();
+	.@eac = eaclass();
 	//Check if class is already rebirth
-	if (@eac&EAJL_UPPER) {
+	if (.@eac&EAJL_UPPER) {
 		mes "You look strong.";
 		close;
 	}
-	@eac = roclass(@eac|EAJL_UPPER);
+	.@eac = roclass(.@eac|EAJL_UPPER);
 	//Check if class has a rebirth version
-	if (@eac != -1) {
-		mes "Bet you can't wait to become a " + jobname(@eac) + "!";
+	if (.@eac != -1) {
+		mes "Bet you can't wait to become a " + jobname(.@eac) + "!";
 		close;
 	}
 
@@ -4633,24 +4634,24 @@ this. Careful, minor magic ahead.
 	// First, let's get an ID of a character who's name will be on the item.
 	// Only an existing character's name may be there.
 	// Let's assume our character is 'Adam' and find his ID.
-	@charid = getcharid(0,"Adam");
+	.@charid = getcharid(0,"Adam");
 
 	// Now we split the character ID number into two portions with a binary
 	// shift operation. If you don't understand what this does, just copy it.
-	@card3 = @charid & 65535;
-	@card4 = @charid >> 16;
+	.@card3 = .@charid & 65535;
+	.@card4 = .@charid >> 16;
 
-	// If you're inscribing non-equipment, @card1 must be 254.
+	// If you're inscribing non-equipment, .@card1 must be 254.
 	// Arrows are also not equipment.
-	@card1 = 254;
+	.@card1 = 254;
 
 	// For named equipment, card2 means the Star Crumbs and elemental
 	// crystals used to make this equipment. For everything else, it's 0.
-	@card2 = 0;
+	.@card2 = 0;
 
 	// Now, let's give the character who invoked the script some
 	// Adam's Apples:
-	getitem2 512,1,1,0,0,@card1,@card2,@card3,@card4;
+	getitem2 512,1,1,0,0,.@card1,.@card2,.@card3,.@card4;
 
 This wasn't tested with all possible items, so I can't give any promises,
 experiment first before relying on it.
@@ -4661,21 +4662,21 @@ To create equipment, continue this example it like this:
 	// values so we'll just set up card1 and card2 with data
 	// for an Ice Stiletto.
 
-	// If you're inscribing equipment, @card1 must be 255.
-	@card1 = 255;
+	// If you're inscribing equipment, .@card1 must be 255.
+	.@card1 = 255;
 
 	// That's the number of star crumbs in a weapon.
-	@sc = 2;
+	.@sc = 2;
 
 	// That's the number of elemental property of the weapon.
-	@ele = 1;
+	.@ele = 1;
 
 	// And that's the wacky formula that makes them into
 	// a single number.
-	@card2 = @ele+((@sc*5)<<8);
+	.@card2 = .@ele+((.@sc*5)<<8);
 
 	// That will make us an Adam's +2 VVS Ice Stiletto:
-	getitem2 1216,1,1,2,0,@card1,@card2,@card3,@card4;
+	getitem2 1216,1,1,2,0,.@card1,.@card2,.@card3,.@card4;
 
 Experiment with the number of star crumbs - I'm not certain just how much will
 work most and what it depends on. The valid element numbers are:
@@ -4941,8 +4942,8 @@ If player is not in a guild or storage is open, 'guildstoragedelitem2' will retu
 
 ---------------------------------------
 
-*countitem(<item id>)
-*countitem("<item name>")
+*countitem(<item id>{,<accountID>})
+*countitem("<item name>"{,<accountID>})
 
 This function will return the number of items for the specified item ID that the
 invoking character has in the inventory.
@@ -4978,10 +4979,10 @@ If player is not in a guild or storage is open, 'guildstoragecountitem' will ret
 
 ---------------------------------------
 
-*countitem2(<item id>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>)
-*countitem2("<item name>",<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>)
-*countitem3(<item id>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>,<RandomIDArray>,<RandomValueArray>,<RandomParamArray>)
-*countitem3("<item name>",<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>,<RandomIDArray>,<RandomValueArray>,<RandomParamArray>)
+*countitem2(<item id>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>{,<accountID>})
+*countitem2("<item name>",<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>{,<accountID>})
+*countitem3(<item id>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>,<RandomIDArray>,<RandomValueArray>,<RandomParamArray>{,<accountID>})
+*countitem3("<item name>",<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>,<RandomIDArray>,<RandomValueArray>,<RandomParamArray>{,<accountID>})
 
 Expanded version of 'countitem' function, used for created/carded/forged items.
 
@@ -5354,7 +5355,7 @@ Example:
 
 These commands toggle the ability to use atcommand while interacting with an NPC.
 
-The default setting, 'atcommand_enable_npc', is defined in 'conf/battle/gm.conf'.
+The default setting, 'atcommand_disable_npc', is defined in 'conf/battle/gm.conf'.
 
 ---------------------------------------
 //
@@ -6133,6 +6134,58 @@ Examples:
 
 ---------------------------------------
 
+*setpcblock <type>,<state>{,<account ID>};
+*getpcblock {<account ID>};
+
+'setpcblock' command prevents/allows the player from doing the given <type> of action according
+to the <state> during the player session (note: @reloadscript removes all <type> except PCBLOCK_IMMUNE).
+The <type> values are bit-masks, multiples of <type> can be added to change the player action.
+
+The action is blocked when the <state> is true, while false allows the action again.
+
+'getpcblock' command return the bit-mask value of the currently
+enabled block flags.
+
+Available <type>:
+	PCBLOCK_MOVE				Prevent the player from moving.
+	PCBLOCK_ATTACK				Prevent the player from attacking.
+	PCBLOCK_SKILL				Prevent the player from using skills/itemskills.
+	PCBLOCK_USEITEM				Prevent the player from using usable items.
+	PCBLOCK_CHAT				Prevent the player from sending global/guild/party/whisper messages.
+	PCBLOCK_IMMUNE				Prevent the player from being hit by monsters.
+	PCBLOCK_SITSTAND			Prevent the player from sitting/standing.
+	PCBLOCK_COMMANDS			Prevent the player from using atcommands/charcommands.
+	PCBLOCK_NPCCLICK			Prevent the player from clicking/touching any NPC/shop/warp.
+	PCBLOCK_EMOTION				Prevent the player from using emotions.
+	PCBLOCK_NPC				Simulate NPC interaction. Useful for NPC with no mes window. Sum of PCBLOCK_MOVE|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK.
+	PCBLOCK_ALL				Sum of all the flags.
+
+Examples:
+
+// Make the attached player invulnerable to monster (same as @monsterignore)
+	setpcblock PCBLOCK_IMMUNE, true;
+
+// Prevents the attached player from attacking and using skills
+	setpcblock PCBLOCK_ATTACK|PCBLOCK_SKILL, true;
+
+// Re-enables attack, skills and item use
+	setpcblock PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM, false;
+
+// getpcblock related checks
+	if (getpcblock() & PCBLOCK_IMMUNE)
+		mes "You are invulnerable!";
+
+	if (getpcblock() & (PCBLOCK_MOVE|PCBLOCK_SITSTAND))
+		mes "You can't walk or sit.";
+
+	if ((getpcblock() & (PCBLOCK_ATTACK|PCBLOCK_SKILL)) == 0)
+		mes "You can attack and use skills.";
+
+	if (getpcblock() & PCBLOCK_CHAT)
+		mes "You can't chat.";
+
+---------------------------------------
+
 ==================================
 |5.- Mob / NPC -related commands.|
 ==================================
@@ -8148,9 +8201,9 @@ Example:
 	monster "prontera",149,190,"Poring",1002,10;
 	.GID = $@mobid[9]; // Store and modify the 10th Poring spawned to make him stronger!
 
-	// Save the strong Poring's mob data in the @por_arr[] variable. (@por_arr[1] being level, @por_arr[13] being class, etc.)
+	// Save the strong Poring's mob data in the .@por_arr[] variable. (.@por_arr[1] being level, .@por_arr[13] being class, etc.)
 	// With this data we can have the NPC display or manipulate it how we want. This does not have to be ran before 'setunitdata'.
-	getunitdata .GID,@por_arr;
+	getunitdata .GID,.@por_arr;
 
 	// Set the max HP of the Poring to 1000 (current HP will also get updated to 1000).
 	setunitdata .GID,UMOB_MAXHP,1000;
@@ -8845,18 +8898,17 @@ The command returns the instance ID upon success, and these values upon failure:
 *instance_destroy {<instance id>};
 
 Destroys instance with the ID <instance id>. If no ID is specified, the instance
-the script is attached to is used. If the script is not attached to an instance,
-the instance of the currently attached player is used (if it is a character, party,
-guild or clan mode). If it is not owned by anyone, no player needs to be attached. If
-that fails, the script will come to a halt. This will also trigger the "OnInstanceDestroy"
-label in all NPCs inside the instance.
+the script is attached to is used. If that fails, the script will come to a halt.
+This will also trigger the "OnInstanceDestroy" label in all NPCs inside the instance.
 
 ---------------------------------------
 
 *instance_enter("<instance name>",{<x>,<y>,<char_id>,<instance id>});
 
-Warps player to the specified instance after the script terminates. The map and
-coordinates are located in 'db/(pre-)re/instance_db.txt'.
+Warps the attached player to the specified <instance id>. If no ID is specified,
+the IM_PARTY instance the invoking player is attached to is used.
+
+The map and coordinates are located in 'db/(pre-)re/instance_db.txt'.
 
 The command returns IE_OK upon success, and these values upon failure:
  IE_NOMEMBER:	Party/Guild/Clan not found (for party/guild/clan modes).
@@ -8870,49 +8922,46 @@ Put -1 for x and y if want to warp player with default entrance coordinates.
 *instance_npcname("<npc name>"{,<instance id>})
 
 Returns the unique name of the instanced script. If no ID is specified,
-the instance the script is attached to is used. If the script is not attached to
-an instance, the instance of the currently attached NPC, player, party, guild
-or clan is used. If that fails, the script will come to a halt.
+the instance the script is attached to is used. If that fails, the script
+will come to a halt.
 
 ---------------------------------------
 
 *instance_mapname("<map name>"{,<instance id>})
 
 Returns the unique name of the instanced map. If no instance ID is specified,
-the instance the script is attached to is used. If the script is not attached to
-an instance, the instance of the currently attached player is used (if it is a
-character, party, guild or clan mode). If it is not owned by anyone, no player needs
-to be attached. If that fails, the command returns an empty string instead.
+the instance the script is attached to is used. If that fails, the command
+returns an empty string instead.
 
 ---------------------------------------
 
-*instance_id()
+*instance_id({<instance mode>})
+
+Returns the unique instance ID of the given mode. By default it returns the
+attached script instance. If <instance mode> is provided then the instance
+of the currently attached player is used. If that fails, the function will return 0.
 
-Returns the unique instance id of the attached script. If the script is not
-attached to an instance, the instance of the currently attached player is
-used (if it is a character, party, guild or clan mode). If it is not owned by anyone, no
-player needs to be attached. If that fails, the function will return 0.
+Instance Mode options:
+ IM_CHAR:	Attached to character.
+ IM_PARTY:	Attached to character's party.
+ IM_GUILD:	Attached to character's guild.
+ IM_CLAN:	Attached to character's clan.
 
 ---------------------------------------
 
 *instance_warpall "<map name>",<x>,<y>{,<instance id>};
 
-Warps all players in the instance <instance id> to <map name> at given
-coordinates. If no ID is specified, the instance the script is attached to
-is used. If the script is not attached to an instance, the instance of the
-currently attached player is used (if it is a character, party, guild or clan
-mode). If it is not owned by anyone, no player needs to be attached. If that
-fails, the script will come to a halt.
+Warps all players in the <instance id> to <map name> to the given coordinates.
+If no ID is specified, the IM_PARTY instance the invoking player is attached
+to is used. If that fails, the script will come to a halt.
 
 ---------------------------------------
 
 *instance_announce <instance id>,"<text>",<flag>{,<fontColor>{,<fontType>{,<fontSize>{,<fontAlign>{,<fontY>}}}}};
 
-Broadcasts a message to all players in the instance <instance id> currently
-residing on an instance map. If 0 is specified for <instance id>, the instance
-the script is attached to is used. If the script is not attached to an instance,
-the instance of the currently attached player is used (if it is a character,
-party, guild or clan mode). If it is not owned by anyone, no player needs to be attached.
+Broadcasts a message to all players in the <instance id> currently residing on
+an instance map. If 0 is specified for <instance id>, the instance the script
+is attached to is used.
 
 For details on the other parameters, see 'announce'.
 
@@ -9008,6 +9057,20 @@ mes .@name$ + " will be destroyed if no one is in the instance for " + instance_
 
 ---------------------------------------
 
+*getvariableofinstance(<variable>,<instance id>);
+
+Returns a reference to an instance variable (' prefix) of the specific instance ID.
+This can only be used to get ' variables.
+
+Examples:
+	// This will set the .@s variable to the value of 'var variable of the specific instance ID.
+	set .@s, getvariableofinstance('var, instance_id(IM_PARTY));
+
+	// This will set the 'var variable of the specific instance ID to 1.
+	set getvariableofinstance('var, instance_id(IM_GUILD)), 1;
+
+---------------------------------------
+
 =========================
 |8.- Quest Log commands.|
 =========================
@@ -9195,6 +9258,10 @@ The player will also be warped to the default spawn point of the battle group or
 <On Quit Event> refers to an NPC label that attaches to the character and is run when they relog. (Optional)
 <On Death Event> refers to an NPC label that attaches to the character and is run when they die. (Optional)
 
+If "-" is supplied for <map name> then the player will not automatically respawn after the 1 second delay.
+This allows for better manipulation of <On Death Event>. The player will have to be warped to desired location
+at the end of <On Death Event>.
+
 Unlike the prior command, the latter will attach a GROUP in a waiting room to the battleground, and
 sets the array $@arenamembers[0] where 0 holds the IDs of the first group, and 1 holds the IDs of the second.
 
@@ -9215,6 +9282,10 @@ Creates an instance of battleground battle group that can be used with other bat
 <On Quit Event> refers to an NPC label that attaches to the character and is run when they relog. (Optional)
 <On Death Event> refers to an NPC label that attaches to the character and is run when they die. (Optional)
 
+If "-" is supplied for <map name> then the player will not automatically respawn after the 1 second delay.
+This allows for better manipulation of <On Death Event>. The player will have to be warped to desired location
+at the end of <On Death Event>.
+
 Returns battle group ID on success. Returns 0 on failure.
 
 ---------------------------------------
@@ -9372,7 +9443,7 @@ monster as long as it is in the pet database and the targeted monster requires t
 item used.
 See 'doc/mob_db_mode_list.txt' for more information about monster modes.
 
-A full list of pet IDs can be found inside 'db/(pre-)re/pet_db.txt'.
+A full list of pet IDs can be found inside 'db/(pre-)re/pet_db.yml'.
 
 ---------------------------------------
 
@@ -9380,7 +9451,7 @@ A full list of pet IDs can be found inside 'db/(pre-)re/pet_db.txt'.
 
 This command will create a pet egg and put it in the invoking character's
 inventory. The kind of pet is specified by pet ID numbers listed in
-'db/(pre-)re/pet_db.txt'. The egg is created exactly as if the character just successfully
+'db/(pre-)re/pet_db.yml'. The egg is created exactly as if the character just successfully
 caught a pet in the normal way.
 
 	// This will make you a poring:
@@ -9398,16 +9469,40 @@ This function will return pet information for the pet the invoking character
 currently has active. Valid types are:
 
  PETINFO_ID - Pet ID
- PETINFO_CLASS - Pet class number as per 'db/(pre-)re/pet_db.txt' - will tell you what kind of a pet it
-     is.
+ PETINFO_CLASS - Pet class number as per 'db/(pre-)re/pet_db.yml' - will tell you what kind of a pet it is.
  PETINFO_NAME - Pet name. Will return "null" if there's no pet.
  PETINFO_INTIMATE - Pet friendly level (intimacy score). 1000 is full loyalty.
- PETINFO_HUNGRY - Pet hungry level. 100 is completely full.
+ PETINFO_HUNGRY - Pet hungry level. 100 is full hunger.
  PETINFO_RENAMED - Pet rename flag. 0 means this pet has not been named yet.
  PETINFO_LEVEL - Pet level
  PETINFO_BLOCKID - Pet Game ID
- PETINFO_EGGID - Pet egg item id
- PETINFO_FOODID - Pet food item id
+ PETINFO_EGGID - Pet egg item ID
+ PETINFO_FOODID - Pet food item ID
+
+PETINFO_INTIMATE can be used with the following constants for checking values:
+ PET_INTIMATE_NONE = 0
+ PET_INTIMATE_AWKWARD = 1 ~ 99
+ PET_INTIMATE_SHY = 100 ~ 249
+ PET_INTIMATE_NEUTRAL = 250 ~ 749
+ PET_INTIMATE_CORDIAL = 750 ~ 909
+ PET_INTIMATE_LOYAL = 910 ~ 1000
+
+PETINFO_HUNGRY can be used with the following constants for checking values:
+ PET_HUNGRY_NONE = 0
+ PET_HUNGRY_VERY_HUNGRY = 1 ~ 10
+ PET_HUNGRY_HUNGRY = 11 ~ 25
+ PET_HUNGRY_NEUTRAL = 26 ~ 75
+ PET_HUNGRY_SATISFIED = 76 ~ 90
+ PET_HUNGRY_STUFFED = 91 ~ 100
+
+Example:
+	mes "[Vet]";
+	mes "Your pet + " getpetinfo(PETINFO_NAME);
+	if (getpetinfo(PETINFO_INTIMATE) < PET_INTIMATE_LOYAL)
+		mes "has some growing to do on you!";
+	else
+		mes "seems to love you very much!";
+	close;
 
 ---------------------------------------
 

+ 3 - 3
doc/status_change.txt

@@ -1035,9 +1035,9 @@ SC_JAILED	()
 	desc:
 	val1:
 
-SC_ENCHANTARMS	()
-	desc:
-	val1:
+SC_ENCHANTARMS	(EFST_WEAPONPROPERTY)
+	desc: Changes the element of a target's weapon.
+	val1: Element value from skill_db
 
 SC_MAGICALATTACK	()
 	desc:

+ 5 - 5
npc/battleground/kvm/kvm_item_pay.txt

@@ -19,15 +19,15 @@
 //============================================================
 
 bat_room,151,144,3	script	KVM Logistic Officer#a	734,{
-	if (countitem(7773)) {
-		set .@pointstoadd,countitem(7773);
-		delitem 7773,.@pointstoadd;
+	if (countitem(6376)) {// KVM_Badge
+		set .@pointstoadd,countitem(6376);
+		delitem 6376,.@pointstoadd;
 		set kvm_point,kvm_point+.@pointstoadd;
 		mes "[Logistics]";
-		mes "Are those "+getitemname(7773)+"s I see?";
+		mes "Are those "+getitemname(6376)+"s I see?";
 		mes "We no longer accept that currency,";
 		mes "but I can exchange those for you,";
-		mes "So you have "+.@pointstoadd+" "+getitemname(7773)+"s?";
+		mes "So you have "+.@pointstoadd+" "+getitemname(6376)+"s?";
 		mes "Alright, all set, you now have ^580080"+ kvm_point +"^000000 KVM Points.";
 		next;
 	}

+ 9 - 13
npc/custom/battleground/bg_emp.txt

@@ -1,17 +1,12 @@
 //===== rAthena Script =======================================
 //= Battleground: Emperium
-//===== By: ==================================================
-//= AnnieRuru
-//===== Current Version: =====================================
-//= 1.1
-//===== Compatible With: =====================================
-//= rAthena Project
 //===== Description: =========================================
 //= A simple battleground script:
 //= Destroy the opponent's Emperium to win the match.
-//===== Additional Comments: =================================
-//= 1.0 First version, edited. [Euphy]
+//===== Changelogs: ==========================================
+//= 1.0 First version, edited. [Euphy] [AnnieRuru]
 //= 1.1 Use up to date battleground script commands [AnnieRuru]
+//= 1.2 Fix player can be kill multiple times within 250ms time frame [AnnieRuru]
 //============================================================
 
 -	script	bg_emp#control	-1,{
@@ -26,8 +21,8 @@ OnStart:
 		end;
 
 	// create Battleground and teams
-	.red = waitingroom2bg( "bat_a01", 157,347, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ );
-	.blue = waitingroom2bg( "bat_a01", 142,51, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ );
+	.red = waitingroom2bg( "-", 0,0, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ );
+	.blue = waitingroom2bg( "-", 0,0, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ );
 	delwaitingroom .rednpcname$;
 	delwaitingroom .bluenpcname$;
 	setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red";
@@ -84,9 +79,10 @@ L_EmpDown:
 	end;
 
 // "OnDeath" event
-OnRedDead:
-OnBlueDead:
-	sleep2 1250;
+OnRedDead:  callsub L_Dead, 157,347;
+OnBlueDead: callsub L_Dead, 142,51;
+L_Dead:
+	warp "bat_a01", getarg(0), getarg(1);
 	percentheal 100,100;
 	end;
 

+ 2 - 2
npc/custom/battleground/unofficial/bg_kvm01.txt

@@ -331,7 +331,7 @@ bat_c01,51,130,5	script	Guillaume Vintenar::VintenarKvM01a	419,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;
@@ -369,7 +369,7 @@ bat_c01,148,53,1	script	Croix Vintenar::VintenarKvM01b	415,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;

+ 2 - 2
npc/custom/battleground/unofficial/bg_kvm02.txt

@@ -331,7 +331,7 @@ bat_c02,51,130,5	script	Guillaume Vintenar::VintenarKvM02a	419,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;
@@ -369,7 +369,7 @@ bat_c02,148,53,1	script	Croix Vintenar::VintenarKvM02b	415,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;

+ 2 - 2
npc/custom/battleground/unofficial/bg_kvm03.txt

@@ -331,7 +331,7 @@ bat_c03,51,130,5	script	Guillaume Vintenar::VintenarKvM03a	419,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;
@@ -369,7 +369,7 @@ bat_c03,148,53,1	script	Croix Vintenar::VintenarKvM03b	415,{
 		}
 
 		setquest 6025;
-		getitem 7773, .@Reward;
+		getitem 6376, .@Reward;
 		bg_leave;
 		warp "bat_room",155,150;
 		end;

+ 1 - 1
npc/custom/official/GeffenMagicTournament.txt

@@ -1436,7 +1436,7 @@ OnInstanceInit:
 				"Geffen Festivities.";
 				close2;
 				cutin "",255;
-				getitem 6671,20;
+				getitem 6671,'reward[getarraysize('reward[0]) - 1];
 				warp instance_mapname("1@gef"), 120,35;
 				end;
 			case 2:

+ 239 - 185
npc/custom/quests/questboard.txt

@@ -3,27 +3,28 @@
 //===== By: ==================================================
 //= tr0n
 //===== Current Version: =====================================
-//= 1.4.4
-//===== Compatible With: ===================================== 
-//= rAthena Project
+//= 1.6.5
 //===== Description: =========================================
 //= Easily add collection and hunting quests.
-//===== Additional Comments: =================================  
+//===== Changelogs: ==========================================
 // 1.0.0 Release
 // 1.1.0 Added zeny reward
 // 1.2.0 Rewrote checkmob and killcounter
 // 1.3.1 Added level restriction
 // 1.3.4 Added Reward Item Amount
 // 1.4.4 Added Quest delay
+// 1.5.4 Added repeatable Quests
+// 1.6.4 Added party support
+// 1.6.5 Bug fixes for party support
 //============================================================
+prontera,129,215,5	script	Questboard	4_BOARD3,{
 
-prontera,129,215,5	script	Questboard	857,{
-		
-	if(c_run==1){
+	if(c_run==true){
 		mes "[^FF7700Questboard^000000]";
 		mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000";
 		mes "--------------------------------";
-		for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_collectionitem")); set .@j,.@j+2) {
+		set .@size, getarraysize(getd("."+ currentquest$ + "_collectionitem"));
+		for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
 			mes "^FF0000"+getitemname(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+currentquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
 		}
 		mes "--------------------------------";
@@ -37,17 +38,18 @@ prontera,129,215,5	script	Questboard	857,{
 			mes "[^FF7700Questboard^000000]";
 			mes "Quest aborted.";
 			set currentquest$, "";
-			set c_run, 0;
+			set c_run, false;
 			close;
 		}
 		goto L_checkitems;
 	}
-	
-	if(h_run==1){
+
+	if(h_run==true){
 		mes "[^FF7700Questboard^000000]";
 		mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000";
 		mes "--------------------------------";
-		for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_huntingmob")); set .@j,.@j+2) {
+		set .@size, getarraysize(getd("."+ currentquest$ + "_huntingmob"));
+		for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
 			set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]");
 			mes "^FF0000"+strmobinfo(1,getd("."+currentquest$+"_huntingmob["+.@j+"]"))+" - "+getd(currentquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
 		}
@@ -61,136 +63,150 @@ prontera,129,215,5	script	Questboard	857,{
 		if(select("Finish:Abort") == 2){
 			mes "[^FF7700Questboard^000000]";
 			mes "Quest aborted.";
-			for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
+			for(set .@x, 1; .@x < .@size; set .@x,.@x+2){
 				set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
 				setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
 			}
 			set currentquest$, "";
-			set h_run, 0;
+			set h_run, false;
 			close;
 		}
 		goto L_checkmobs;
 	}
-		
-L_questmenu:
+
 	mes "[^FF7700Questboard^000000]";
 	mes "Select category:";
 	next;
-	
+
 	switch(select((.collection)?"Collection Quests":"",
 				  (.hunting)?"Hunting Quests":"",
 				  "Exit")) {
-	
-case 1:
-	set .@collectmenu$, "";
-	for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1) {
-		if (.@i) set .@collectmenu$,.@collectmenu$+":";
-		set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
-	}
-	set .@selection,select(.@collectmenu$);
-	if(gettimetick(2) < getd(.@selection + "_collection_delay")){
-		set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
-		mes "[^FF7700Questboard^000000]";
-		if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
-		if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
-		mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
-		close;
-	}
-	mes "[^FF7700Questboard^000000]";
-	mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
-	mes "--------------------------------";
-	for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_collectionitem")); set .@j,.@j+2) {
-		mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
-	}
-	mes "--------------------------------";
-	mes "[Reward]";
-	mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
-	mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
-	mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
-	mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
-	next;
-	if(select("Accept:Decline") == 2){
-		close;
-	}
-	if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax"))
-	{
-		mes "[^FF7700Questboard^000000]";
-		mes "Quest accepted.";
-		set c_run, 1;
-		set currentquest$, .@selection;
-		close;
-	}
-	else
-	{
-		mes "[^FF7700Questboard^000000]";
-		mes "You don't have the required";
-		mes "level to do this quest.";
-		close;
-	}
-	
-case 2:
-	set .@huntmenu$, "";
-	for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1) {
-		if (.@i) set .@huntmenu$,.@huntmenu$+":";
-		set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
-	}
-	set .@selection,select(.@huntmenu$);
-	if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
-		set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
-		mes "[^FF7700Questboard^000000]";
-		if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
-		if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
-		mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
-		close;
-	}
-	mes "[^FF7700Questboard^000000]";
-	mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
-	mes "--------------------------------";
-	for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_huntingmob")); set .@j,.@j+2) {
-		mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
-	}
-	mes "--------------------------------";
-	mes "[Reward]";
-	mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
-	mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
-	mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
-	mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
-	next;
-	if(select("Accept:Decline") == 2){
-		close;
-	}
-	if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax"))
-	{
+
+	case 1:
+		set .@collectmenu$, "";
+		for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1){
+			if (.@i) set .@collectmenu$,.@collectmenu$+":";
+			set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
+		}
+		set .@selection,select(.@collectmenu$);
+		if(.quest_repeat == true){
+			if(gettimetick(2) < getd(.@selection + "_collection_delay")){
+				set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
+				mes "[^FF7700Questboard^000000]";
+				mes "You have to wait ^0000FF"+Time2Str(.@time_left)+"^000000 to do this quest again.";
+				close;
+			}
+		}
+		else{
+			if(getd(.@selection + "_collection_repeat") == true){
+				mes "[^FF7700Questboard^000000]";
+				mes "You already did this quest.";
+				mes "Please choose another one.";
+				close;
+			}
+		}
 		mes "[^FF7700Questboard^000000]";
-		mes "Quest accepted.";
-		set h_run, 1;
-		set currentquest$, .@selection;
-		close;
-	}
-	else
-	{
+		mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
+		mes "--------------------------------";
+		set .@size, getarraysize(getd("."+ .@selection + "_collectionitem"));
+		for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
+			mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
+		}
+		mes "--------------------------------";
+		mes "[Reward]";
+		mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
+		mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
+		mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
+		mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
+		next;
+		if(select("Accept:Decline") == 2){
+			close;
+		}
+		if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax")){
+			mes "[^FF7700Questboard^000000]";
+			mes "Quest accepted.";
+			set c_run, true;
+			set currentquest$, .@selection;
+			close;
+		}
+		else{
+			mes "[^FF7700Questboard^000000]";
+			mes "You don't have the required";
+			mes "level to do this quest.";
+			close;
+		}
+
+	case 2:
+		set .@huntmenu$, "";
+		for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1){
+			if (.@i) set .@huntmenu$,.@huntmenu$+":";
+			set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
+		}
+		set .@selection,select(.@huntmenu$);
+		if(.quest_repeat == true){
+			if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
+				set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
+				mes "[^FF7700Questboard^000000]";
+				mes "You have to wait ^0000FF"+Time2Str(.@time_left)+"^000000 to do this quest again.";
+				close;
+			}
+		}
+		else{
+			if(getd(.@selection + "_hunting_repeat") == true){
+				mes "[^FF7700Questboard^000000]";
+				mes "You already did this quest.";
+				mes "Please choose another one.";
+				close;
+			}
+		}
 		mes "[^FF7700Questboard^000000]";
-		mes "You don't have the required";
-		mes "level to do this quest.";
+		mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
+		mes "--------------------------------";
+		set .@size, getarraysize(getd("."+ .@selection + "_huntingmob"));
+		for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
+			mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
+		}
+		mes "--------------------------------";
+		mes "[Reward]";
+		mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
+		mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
+		mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
+		mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
+		next;
+		if(select("Accept:Decline") == 2){
+			close;
+		}
+		if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax")){
+			mes "[^FF7700Questboard^000000]";
+			mes "Quest accepted.";
+			set h_run, true;
+			set currentquest$, .@selection;
+			close;
+		}
+		else{
+			mes "[^FF7700Questboard^000000]";
+			mes "You don't have the required";
+			mes "level to do this quest.";
+			close;
+		}
+
+	case 3:
 		close;
 	}
-	
-case 3:
-	close;
-	}
-	
+
 L_checkitems:
-	for( set .@k,0; .@k < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@k,.@k+2) {
+	set .@size, getarraysize(getd("."+currentquest$+"_collectionitem"));
+	for( set .@k,0; .@k < .@size; set .@k,.@k+2){
 		if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){
 			set .@checkitem,.@checkitem+2;
 		}
 	}
-	if(.@checkitem<getarraysize(getd("."+currentquest$+"_collectionitem"))){
+	if(.@checkitem<.@size){
 		mes "[^FF7700Questboard^000000]";
 		mes "You don't have everything.";
 		close;
 	}
-	for( set .@delcount,0; .@delcount < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@delcount,.@delcount+2) {
+	for( set .@delcount,0; .@delcount < .@size; set .@delcount,.@delcount+2){
 		delitem getd("."+currentquest$+"_collectionitem["+.@delcount+"]"),getd("."+currentquest$+"_collectionitem["+(.@delcount+1)+"]");
 	}
 	mes "[^FF7700Questboard^000000]";
@@ -199,13 +215,15 @@ L_checkitems:
 	set Zeny,Zeny+getd("." +currentquest$+"_collectionzeny");
 	getexp getd("." +currentquest$+"_collectionexp["+0+"]"),getd("." +currentquest$+"_collectionexp["+1+"]");
 	setd(currentquest$ + "_collection_delay"),gettimetick(2)+.quest_delay;
+	setd(currentquest$ + "_collection_repeat"),true;
 	set currentquest$, "";
-	set c_run, 0;
+	set c_run, false;
 	close;
-	
+
 L_checkmobs:
-	set .@goal, (getarraysize(getd("."+currentquest$+"_huntingmob"))/2);
-	for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
+	set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
+	set .@goal, .@size/2;
+	for(set .@i, 1; .@i < .@size; set .@i,.@i+2){
 		set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
 		if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+currentquest$+"_huntingmob["+.@i+"]")){
 			set .@checkmonster, .@checkmonster+1;
@@ -216,7 +234,7 @@ L_checkmobs:
 		}
 		goto L_checkmobs2;
 	}
-	
+
 L_checkmobs2:
 	if(.@checkmonster<.@goal){
 		mes "[^FF7700Questboard^000000]";
@@ -225,7 +243,8 @@ L_checkmobs2:
 	}
 	mes "[^FF7700Questboard^000000]";
 	mes "Congratulation! Here is your Reward.";
-	for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
+	set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
+	for(set .@x, 1; .@x < .@size; set .@x,.@x+2){
 		set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
 		setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
 	}
@@ -233,92 +252,127 @@ L_checkmobs2:
 	set Zeny, Zeny+getd("." +currentquest$+"_huntingzeny");
 	getexp getd("." +currentquest$+"_huntingexp["+0+"]"),getd("." +currentquest$+"_huntingexp["+1+"]");
 	setd(currentquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay;
+	setd(currentquest$ + "_hunting_repeat"),true;
 	set currentquest$, "";
-	set h_run, 0;
+	set h_run, false;
 	close;
 
 OnNPCKillEvent:
-	if(h_run!=1) end;
-	for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
+	if(h_run!=true) end;
+	set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
+	for(set .@i, 1; .@i < .@size; set .@i,.@i+2){
 		if(killedrid==getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]")){
 			set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
-			if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")>=getd("."+currentquest$+"_huntingmob["+.@i+"]")) end;
-			setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
-			dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
-			end;
+			if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")<getd("."+currentquest$+"_huntingmob["+.@i+"]")){
+				setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
+				dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
+			}
+			if(getcharid(1) != 0 && .party_support == true){
+				getmapxy(.@map1$,.@x1,.@y1);
+				set .@killerid, getcharid(3);
+				set .@currentquest$, currentquest$;
+				getpartymember getcharid(1),1;
+				getpartymember getcharid(1),2;
+				for(set .@j, 0; .@j < $@partymembercount; .@j++){
+					if(isloggedin($@partymemberaid[.@j], $@partymembercid[.@j])){
+						if(h_run==true && $@partymemberaid[.@j] != .@killerid && .@currentquest$ == getvar(currentquest$, $@partymembercid[.@j]) && readparam(HP, $@partymembercid[.@j]) > 0){
+							getmapxy(.@map2$,.@x2,.@y2,BL_PC,rid2name($@partymemberaid[.@j]));
+							if(.@map1$ == .@map2$ && distance(.@x1,.@y1,.@x2,.@y2) < .party_range){
+								set .@kill_amt,getvar(getd(.@currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount"), $@partymembercid[.@j]);
+								set .@kill_goal,getd("."+.@currentquest$+"_huntingmob["+.@i+"]");
+								if(.@kill_amt<.@kill_goal)
+								{
+									setd(.@currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", .@kill_amt+1, $@partymembercid[.@j]);
+									dispbottom getd("."+.@currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+(.@kill_amt+1)+"/"+.@kill_goal+")", 0xB6FF00, $@partymembercid[.@j];
+								}
+							}
+						}
+					}
+				}
+			}
+			break;
 		}
-		continue;
 	}
 	end;
-	
+
 OnInit:
 
 	function AddCollection;
 	function AddHunting;
 
-	//Activate/Deactive quest categories here
-	set .collection, 1;
-	set .hunting, 1;
-	
+	//Activate/Deactivate quest categories (true/1 - activated, false/0 - deactivated)
+	set .collection, true;
+	set .hunting, true;
+
 	//Quest Delay (seconds)
 	//24 hours = 86400 seconds
 	set .quest_delay, 0;
-	
+
+	//Activate/Deactivate repeatable quests (true/1 - activated, false/0 - deactivated)
+	set .quest_repeat, true;
+
+	//Activate/Deactivate party support (true/1 - activated, false/0 - deactivated)
+	set .party_support, true;
+
+	//Max range for party support (+- x & y coordinations)
+	set .party_range, 25;
+
 	//Checks if quests are loaded (prevents out of index)
-	if(.questsloaded==1) end;
-		set .questsloaded, 1;
-		
-		//Add Collection Quests here
-		//AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
-		
-		
-		//Add Hunting Quests here
-		//AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
-		
-		end;
-		
+	if(.questsloaded==true) end;
+	set .questsloaded, true;
+
+	//Add Collection Quests here (You can add as many required items as you want)
+	//AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
 
-function AddCollection {
-	set .collectionquestcount,.collectionquestcount+1;
-	setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
-	setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
-	setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
-	setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
-	setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
-	setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
-	set .@argcount, 6;
-	set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
-	setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount)); 
-	setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1)); 
-	set .@argcount, .@argcount+2;
-	while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
+
+	//Add Hunting Quests here (You can add as many required mobs as you want)
+	//AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
+	end;
+
+
+	function AddCollection{
+		set .collectionquestcount,.collectionquestcount+1;
+		setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
+		setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
+		setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
+		setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
+		setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
+		setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
+		set .@argcount, 6;
+		set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
+		setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount)); 
+		setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1)); 
+		set .@argcount, .@argcount+2;
 		set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem"));
-		setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount)); 
-		setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
-		set .@argcount,.@argcount+2;
+		while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1){
+			setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount)); 
+			setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
+			set .@argcount,.@argcount+2;
+			set .@size, .@size+2;
+		}
+		return;
 	}
-	return;
-}
 
-function AddHunting {
-	set .huntingquestcount,.huntingquestcount+1;
-	setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
-	setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
-	setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
-	setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
-	setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
-	setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
-	set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
-	set .@argcount, 6;
-	setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
-	setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1)); 
-	set .@argcount, .@argcount+2;
-	while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
-		set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
-		setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount)); 
-		setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
+	function AddHunting{
+		set .huntingquestcount,.huntingquestcount+1;
+		setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
+		setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
+		setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
+		setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
+		setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
+		setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
+		set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
+		set .@argcount, 6;
+		setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
+		setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1)); 
 		set .@argcount, .@argcount+2;
+		set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
+		while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1){
+			setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount)); 
+			setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
+			set .@argcount, .@argcount+2;
+			set .@size, .@size+2;
+		}
+		return;
 	}
-	return;
-}
 }

+ 10 - 3
npc/kafras/cool_event_corp.txt

@@ -174,21 +174,28 @@ function	script	F_CoolEventCorp	{
 	end;
 }
 
-hugel,88,168,4	script	Cool Event Corp. Staff::CoolEventCorpStaffHugel	874,{
+lighthalzen,94,248,3	script	Cool Event Corp Staff::CoolEventCorpStaffLighthalzen	4_M_ZONDAMAN,{
+	callfunc "F_CoolEventCorp",
+		"Save:Use Storage::Rent a Pushcart:Storage Password Service:Cancel",
+		"in the town of Lighthalzen","lighthalzen",95,240;
+	end;
+}
+
+hugel,88,168,4	script	Cool Event Corp. Staff::CoolEventCorpStaffHugel	4_M_ZONDAMAN,{
 	callfunc "F_CoolEventCorp",
 		"Save:Use Storage::Rent a Pushcart:Storage Password Service:Cancel",
 		"in the village of Hugel","hugel",96,155;
 	end;
 }
 
-rachel,109,138,5	script	Cool Event Corp. Staff::CoolEventCorpStaffRachel	874,{
+rachel,109,138,5	script	Cool Event Corp. Staff::CoolEventCorpStaffRachel	4_M_ZONDAMAN,{
 	callfunc "F_CoolEventCorp",
 		"Save:Use Storage:Teleport Service:Rent a Pushcart:Storage Password Service:Cancel",
 		"in the town of Rachel","rachel",113,137,"Veins";
 	end;
 }
 
-veins,208,128,5	script	Cool Event Corp. Staff::CoolEventCorpStaffVeins	874,{
+veins,208,128,5	script	Cool Event Corp. Staff::CoolEventCorpStaffVeins	4_M_ZONDAMAN,{
 	callfunc "F_CoolEventCorp",
 		"Save:Use Storage:Teleport Service:Rent a Pushcart:Storage Password Service:Cancel",
 		"in the town of Veins","veins",204,103,"Rachel";

+ 3 - 0
npc/kafras/functions_kafras.txt

@@ -462,6 +462,9 @@ function	script	F_KafEnd	{
 		mes "^666666Kaffffra n-never";
 		mes "diiiiiiiiiiiiiies. On...";
 		mes "On y-yooour siiiiide~^000000";
+	} else if (.@type == 2) {// RockRidge Save
+		mes "Saved.";
+		mes "Thank you for your patronage.";
 	}
 	close3;
 }

+ 0 - 2
npc/merchants/shops.txt

@@ -51,7 +51,6 @@ alberta_in,182,97,0	shop	Tool Dealer#alb2	73,1750:-1,611:-1,501:-1,502:-1,503:-1
 alberta_in,180,15,0	shop	Armor Dealer#alb	101,2101:-1,2103:-1,2401:-1,2403:-1,2405:-1,2501:-1,2503:-1,2505:-1,2203:-1,2201:-1,2205:-1,2226:-1,2301:-1,2303:-1,2305:-1,2321:-1,2328:-1,2332:-1,2307:-1,2309:-1,2312:-1,2314:-1,2628:-1
 alberta_in,188,21,0	shop	Weapon Dealer#alb	49,1750:-1,1751:-1,1101:-1,1104:-1,1107:-1,1201:-1,1204:-1,1207:-1,1601:-1,1701:-1,1301:-1,1351:-1,1354:-1,1357:-1,1360:-1
 alberta_in,175,97,4	shop	Weapon Dealer#alb2	82,1146:-1,1245:-1
-alberta_in,176,81,3	shop	Trading Merchant#alb	900,13200:-1,13201:-1,13202:-1,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
 
 //=======================================================
 // Al De Baran
@@ -106,7 +105,6 @@ einbroch,138,66,4	shop	Flu Mask Dealer#ein	850,5114:-1,2218:-1
 einbroch,82,199,4	shop	Paddler#ein	855,512:-1,645:-1,1750:-1,501:-1
 //Official Gunslingers shops.
 que_ng,179,91,3	shop	Chivas Lugal	900,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
-que_ng,180,79,3	shop	Johnny Waiker	900,13200:-1,13201:-1,13202:-1
 
 //=======================================================
 // Geffen

+ 10 - 0
npc/pre-re/merchants/shops.txt

@@ -15,6 +15,16 @@
 //= 1.3 Moved Morocc shops to Pre-RE/RE paths. [zackdreaver]
 //============================================================ 
 
+//=======================================================
+// Alberta
+//=======================================================
+alberta_in,176,81,3	shop	Trading Merchant#alb	900,13200:-1,13201:-1,13202:-1,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
+
+//=======================================================
+// Einbroch
+//=======================================================
+que_ng,180,79,3	shop	Johnny Waiker	900,13200:-1,13201:-1,13202:-1
+
 //=======================================================
 // Izlude
 //=======================================================

+ 3 - 3
npc/quests/quests_ein.txt

@@ -3243,7 +3243,7 @@ OnEnable:
 	hideonnpc "Flu Mask Dealer#ein";
 	hideonnpc "Paddler#ein";
 	hideonnpc "Laboratory Soldier#ein-1";
-	hideonnpc "Laboratory Soldier#ein=2";
+	hideonnpc "Laboratory Soldier#ein-2";
 	initnpctimer;
 	monster "einbroch",82,332,"Toxic Fog",1621,1,"Einbroch Smog Alert::OnMyMobDead";
 	monster "einbroch",99,328,"Toxic Fog",1621,1,"Einbroch Smog Alert::OnMyMobDead";
@@ -3347,8 +3347,8 @@ OnTimer600000:
 	hideoffnpc "Kesunboss#ein";
 	hideoffnpc "Train Station Staff#ein1";
 	hideoffnpc "Train Station Staff#ein2";
-	hideoffnpc "Leslie#ein_1#ein";
-	hideoffnpc "Tan#ein#ein";
+	hideoffnpc "Leslie#ein_1";
+	hideoffnpc "Tan#ein";
 	hideoffnpc "Little Toby#ein-1";
 	hideoffnpc "Airship Engineer#ein-1";
 	hideoffnpc "Kafra Employee#ein1";

+ 1 - 1
npc/quests/quests_niflheim.txt

@@ -249,7 +249,7 @@ OnTouch_:
 	end;
 }
 
-nif_in,114,181,0	script	#Piano3	111,1,1,{
+nif_in,118,151,0	script	#Piano3	111,1,1,{
 	end;
 
 OnTouch_:

+ 28 - 2
npc/re/custom/lasagna/lasagna_npcs.txt

@@ -15,7 +15,9 @@ lasa_fild01,47,297,0	script	#doint_evt01	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (Class == Job_Summoner && isbegin_quest(7711) == 0) {
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 100;
+		setpcblock PCBLOCK_NPC, false;
 		npctalk "Hey, newbie! Get over here!", "Vigilante Ajegna#doram0", bc_self;
 		npctalk "Come on over here! Click me, quick!", "Vigilante Ajegna#doram0", bc_self;
 		setquest 7711;// Beginning
@@ -151,10 +153,12 @@ lasa_fild01,53,322,3	script	Applicant Paul#doramt13	4_M_MERCAT1,4,4,{
 	}
 OnTouch:
 	if (Class == Job_Summoner && isbegin_quest(7723) == 0) {
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You, dimwit! Nothing beats damage! You should boost your STR first!", "Applicant Paul#doramt13", bc_self;
 		sleep2 2000;
 		npctalk "You have no idea! DEX comes first if you want your attack to be successful!!", "Applicant MacCarnie#doramt13", bc_self;
 		sleep2 1000;
+		setpcblock PCBLOCK_NPC, false;
 		emotion ET_STARE, getnpcid(0, "Applicant Paul#doramt13");
 		emotion ET_OHNO, getnpcid(0, "Applicant MacCarnie#doramt13");
 	}
@@ -774,6 +778,7 @@ lasa_fild01,103,344,3	script	Well-known Troublemaker	4_DR_KID_01,3,3,{
 		completequest 7721;// Cat showoff contest
 		getexp 120,120;
 		close2;
+		setpcblock PCBLOCK_NPC, true;
 		classchange( 4_DR_AGLIO, "Vigilante Aglio#doram12", bc_self );
 		sleep2 1000;
 		npctalk "You! You're picking a fight with another innocent passerby?", "Vigilante Aglio#doram12", bc_self;
@@ -791,6 +796,7 @@ lasa_fild01,103,344,3	script	Well-known Troublemaker	4_DR_KID_01,3,3,{
 		sleep2 2000;
 		npctalk "You're just full of it.", "Well-known Troublemaker", bc_self;
 		classchange( HIDDEN_WARP_NPC, "Vigilante Aglio#doram12", bc_self );
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	case 2:
 		mes "[Well-known Kittie]";
@@ -1911,6 +1917,7 @@ lasagna,186,231,3	script	Youngster meow#dorcon05	4_DR_KID_01,{
 }
 
 lasagna,226,196,5	script	Aram#dorcon01	4_DR_F_02,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Is this the famous Pub-Oven?", "Tos#dorcon01", bc_self;
 	sleep2 2000;
 	npctalk "Stop looking around like a hillbilly!", "", bc_self;
@@ -1954,10 +1961,12 @@ lasagna,226,196,5	script	Aram#dorcon01	4_DR_F_02,{
 	npctalk "......", "", bc_self;
 	sleep2 2000;
 	npctalk "Cheesy...", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 lasagna,228,193,5	script	Porto#dorcon01	4_DR_M_01,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Since I've come all the way here, I should try the kaluna milk!", "", bc_self;
 	sleep2 2000;
 	npctalk "Don't be so loud! Everyone is looking!", "Aram#dorcon01", bc_self;
@@ -1965,13 +1974,16 @@ lasagna,228,193,5	script	Porto#dorcon01	4_DR_M_01,{
 	npctalk "You know, you're the one who's louder.", "", bc_self;
 	sleep2 2000;
 	npctalk "Right, right.", "Tos#dorcon01", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 lasagna,229,197,5	script	Tos#dorcon01	4_DR_M_02,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Befitting to its fame, this place is packed with people.", "", bc_self;
 	sleep2 2000;
 	npctalk "Stop looking around like a hillbilly!", "Aram#dorcon01", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -1983,6 +1995,7 @@ lasagna,230,192,3	script	Perky Doram#do_hint03	4_CAT_ADV2,{
 }
 
 lasagna,235,193,3	script	Customer#dorcon02	4_DR_TORTEL,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Always right-click when it comes to information! Right-click a human, item and cat to know more about them!", "", bc_self;
 	sleep2 1000;
 	emotion ET_THROB;
@@ -1990,6 +2003,7 @@ lasagna,235,193,3	script	Customer#dorcon02	4_DR_TORTEL,{
 	sleep2 2000;
 	emotion ET_SLEEPY;
 	npctalk "We're full, so there's only one thing to do. Sleep.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -4463,7 +4477,6 @@ lasa_in01,61,91,5	script	Basilisk Prisoner#lasai	4_BASIL_SLAVE,{
 		next;
 		mes "[Enriched Foxtail]";
 		mes "MATK + 70, MSP + 50.";
-		mes "";
 		mes "[Long Foxtail]";
 		mes "Ranged physical ATK +5%, MHP + 200.";
 		next;
@@ -10090,7 +10103,7 @@ conch_in,122,61,5	script	Crewman#dorcon01	4_CAT_ADV1,{
 
 // in C_D
 conch_in,59,29,5	script	Engineer#dorcon01	4_CAT_SAILOR5,{
-	// pcblocknpc
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Are you an adventurer heading to the new world? Welcome. Have you heard about how our ship moves?", "", bc_self;
 	sleep2 2000;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : No, I have not.", bc_self;
@@ -10104,24 +10117,29 @@ conch_in,59,29,5	script	Engineer#dorcon01	4_CAT_SAILOR5,{
 	sleep2 1000;
 	emotion ET_SWEAT;
 	npctalk "Oh, wait. You're not taking me seriously, are you? It's a joke, a joke!", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 // in E_F
 conch_in,59,91,5	script	Passenger#dorcon04	4_F_ALCHE_A,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Heading to Midgard? It's my first time in Lasagna and It's great, really! So I'm just going to stay here for good. I found a place to live and signed the papers, too!", "", bc_self;
 	sleep2 2000;
 	npctalk "I'm on my way to pack up my stuff in Midgard. It's great, really.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 // in_I_J
 conch_in,97,96,5	script	Merchant#dorcon01	4_M_MERCAT2,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "You can tell from this bundle, right? I'm not a rookie adventurer. I'm a merchant who travels to different places and sells stuff.", "", bc_self;
 	sleep2 2000;
 	npctalk "I heard that Igdrasil is rare in the new world since there are none. So I'm going to try selling it over there.", "", bc_self;
 	sleep2 2000;
 	npctalk "If there is anything else that might sell, I'm going to buy some and sell them there. I'm going be a millionaire.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -10131,20 +10149,25 @@ conch_in,135,91,5	script	Passenger#dorcon01	4_CAT_ADV2,{
 	end;
 }
 conch_in,135,93,5	script	Passenger#dorcon03	4_DR_TORTEL,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Is this your first time on Con-Chliina? I was on this ship before to get to the new world once my training was over. Back then, the food was really good, so...", "", bc_self;
 	sleep2 2000;
 	npctalk "The minute I landed on the new world, I went right back to the boat. Just loved the food...", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 conch_in,137,98,3	script	Passenger#dorcon02	4_DR_F_01,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "It's my first time in the new world and I'm really excited. Did you decide what you'll do first when you get there? I want to go to the Mjolnir Mountains first!", "", bc_self;
 	sleep2 2000;
 	npctalk "The minute I saw it on [A Guide for New Adventurers to the New World], I promised myself that I would go! I heard It's got wonderful landscapes!", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 // in_P_O
 conch_in,169,70,3	script	Crewman#dorcon02	4_CAT_SAILOR2,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Midgard has been discovered, so I wonder if there's any other place out there. Place where we've never been to and not on the map.", "", bc_self;
 	sleep2 2000;
 	npctalk "You think there's such a place?", "Crewman#dorcon03", bc_self;
@@ -10154,13 +10177,16 @@ conch_in,169,70,3	script	Crewman#dorcon02	4_CAT_SAILOR2,{
 	npctalk "Do you think It's looking for us too?", "Crewman#dorcon03", bc_self;
 	sleep2 2000;
 	npctalk "Oh, my heart is beating just from the thought of it.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 conch_in,166,68,6	script	Crewman#dorcon03	4_CAT_SAILOR1,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "You know, I think First Officer Stello may be able to find another sea route to the new world That's not on the map.", "", bc_self;
 	sleep2 2000;
 	npctalk "Indeed, if it does exist then we can find it and sail on it someday!", "Crewman#dorcon02", bc_self;
 	sleep2 2000;
 	npctalk "I should stay on Con-Chliina for a long time and witness the moment when we make a discovery.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }

+ 3 - 3
npc/re/guides/guides_comodo.txt

@@ -117,10 +117,10 @@ comodo,322,178,4	script	Comodo Guide#01comodo::GuideComodo	700,{
 					break;
 				case 4:
 					mes "[Comodo Guide]";
-					mes "The "+F_Navi("Roaming Bard","comodo,211,155","^DB7093");
+					mes "The "+F_Navi("Roaming Bard","comodo,226,123","^DB7093");
 					mes "helps adventurers to become ^DB7093Bards^000000.";
 					mes "Would you like to check any other locations?";
-					viewpoint 1,211,155,14,0xDB7093;
+					viewpoint 1,226,123,14,0xDB7093;
 					next;
 					break;
 				case 5:
@@ -147,7 +147,7 @@ comodo,322,178,4	script	Comodo Guide#01comodo::GuideComodo	700,{
 			viewpoint 2,114,294,11,0xFFFFFF;
 			viewpoint 2,193,151,12,0xFFFFFF;
 			viewpoint 2,195,149,13,0xFFFFFF;
-			viewpoint 2,211,155,14,0xFFFFFF;
+			viewpoint 2,226,123,14,0xFFFFFF;
 			next;
 			break;
 		case 4:

+ 3 - 3
npc/re/instances/AirshipAssault.txt

@@ -12,11 +12,11 @@
 //= 2.2 Dialogues clean-ups [Aleos]
 //============================================================
 
-dali02,136,79,3	script	Explorer Lion#air1	4_M_DST_GRAND,{
-	mes "[Explorer Lion]";
+dali02,136,79,3	script	Adventurer Leon#air1	4_M_DST_GRAND,{
+	mes "[Adventurer Leon]";
 	mes "Hm...after several days of observation, this place seems to be a device imprinted with the memories of an airship.";
 	next;
-	mes "[Explorer Lion]";
+	mes "[Adventurer Leon]";
 	mes "...that is different. I don't have any more information...";
 	close;
 }

+ 13 - 7
npc/re/instances/DevilTower.txt

@@ -466,12 +466,14 @@ OnTimer26000:
 		mes "Do you hear that?";
 		mes "Help Fama take care of the injured soldiers.";
 		mes "Fama will give you first aid-kits, use it to help the injured people.";
-		// close2;// still attached
+		close2;
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "Officer Heim: Do you hear that?";
 		sleep2 2000;
 		npctalk "Officer Heim: Help Fama take care of the injured soldiers.";
 		sleep2 2000;
 		npctalk "Healer Fama: Okay~ You are going to help me? Come here and receive the first aid kit~!";
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	case 1:
 		mes "[Officer Heim]";
@@ -528,7 +530,7 @@ OnTimer26000:
 	mes "You administer the first-aid-kit to the soldier.";
 	next;
 	specialeffect EF_SPHERE;
-	// progressbar "000000",10;	// fix me: progressbar doesn't display close button on cancel
+	progressbar "000000",10;
 	if ('devil_tower == 1) {
 		delitem 7641,1;
 		specialeffect EF_ENTRY;
@@ -648,7 +650,7 @@ OnTouch:
 		.@lucile$ = instance_npcname("Lucile#tnm01");
 		.@heim$ = instance_npcname("Officer Heim#heim");
 		'devil_tower = 3;
-		mes "";	// todo fix me "workinprogress"
+		setpcblock PCBLOCK_NPC, true;
 		cutin "tnm_lucile01.bmp",2;
 		sleep2 1500;
 		npctalk "Lucile: I am Lucile from the Assassin Guild.", .@lucile$;
@@ -699,6 +701,7 @@ OnTouch:
 		npctalk "Officer Heim: They are so unpredictable. You know what is going on right? Back them up...", .@heim$;
 		sleep2 2500;
 		npctalk "Officer Heim: Help us take care of the demons coming down from upstairs.", .@heim$;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 }
@@ -867,7 +870,7 @@ OnMobDead:
 		mes "Lucile seems to be a machine.";
 		mes "I can hear mechanical sounds all of a sudden.";
 		specialeffect EF_LEVEL99_3;
-		// progressbar "000000",40;	// fix me: progressbar doesn't display close button on cancel
+		progressbar "000000",40;
 		if (is_party_leader() == true && 'devil_tower == 5) {
 			if (isbegin_quest(7572) == 0)
 				setquest 7572;// Lucile...?
@@ -1413,13 +1416,14 @@ OnTimer7000:
 OnTouch:
 	if ('devil_tower != 9)
 		end;
-	mes "";	// todo fix me "workinprogress"
+	setpcblock PCBLOCK_NPC, true;
 	disablenpc instance_npcname("#tnm3event01");
 	enablenpc instance_npcname("Young Girl#tnm01");
 	sleep2 4000;
 	mapannounce 'map_tnm3$, "Young Girl: Odin Preserve me! A demon!! Help me!", bc_map,0xFF00;
 	'mob_count = 12;
 	initnpctimer;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnTimer1000:
 	monster 'map_tnm3$,33,171,"Evil Shadow",2939,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW1
@@ -1596,7 +1600,7 @@ OnMobDead:
 OnTouch_:
 	if ('devil_tower == 11) {
 		'devil_tower = 12;
-		mes "";	// todo fix me "workinprogress"
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 1000;
 		npctalk "Evil Shadow: I thought I smelled rats sneaking in here. I was right!!";
 		sleep2 3000;
@@ -1605,6 +1609,7 @@ OnTouch_:
 		npctalk "Evil Shadow: I summon the Darkness!!";
 		disablenpc instance_npcname("Evil Shadow#tnm3mob01");
 		donpcevent instance_npcname("Evil Shadow kill#tnm3mob01") + "::OnSummon";
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -1647,7 +1652,7 @@ OnTouch_:// possibility to skip this step
 		end;
 	if ('shade == 0) {
 		'shade = 1;
-		mes "";	// todo fix me "workinprogress"
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 1000;
 		npctalk "Demonic Shade: So you are the trouble makers!";
 		sleep2 2000;
@@ -1656,6 +1661,7 @@ OnTouch_:// possibility to skip this step
 		npctalk "Demonic Shade: The eternal truth is I will turn your deaths into the Demon's life with your hearts' blood!!!";
 		disablenpc instance_npcname("Demonic Shade#mobmaster");
 		donpcevent instance_npcname("#mobmaster_kill") + "::OnSummon";
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }

+ 5 - 6
npc/re/instances/HorrorToyFactory.txt

@@ -153,8 +153,7 @@ xmas,237,303,3	script	Catherine Jet Johnson	4_F_SKULL06GIRL,{
 		}
 		if (select( "Unlock Horror Toy Factory", "Cancel" ) == 1) {
 			mes "Door will be.. opened soon.. Would you wait for a moment?";
-			if (instance_create("Horror Toy Factory") >= 0)
-				'xm_d_map$ = instance_mapname("1@xm_d");
+			instance_create("Horror Toy Factory");
 		}
 		close;
 	case 0:
@@ -701,8 +700,7 @@ OnStart:
 			close;
 		}
 		close2;
-		pcblockmove getcharid(3),1;// todo : not able to talk to npc
-		pcblockskill getcharid(3),1;
+		setpcblock PCBLOCK_NPC, true;
 		switch(.@num) {
 		case 1:
 			npctalk "Worker: Ah! Grandpa? He's a real good man. He oiled us everyday and cleaned the dust very often.";
@@ -760,8 +758,7 @@ OnStart:
 			'worker[.@num] = 1;
 			donpcevent instance_npcname("#fac2wpc") + "::OnStart";
 		}
-		pcblockmove getcharid(3),0;
-		pcblockskill getcharid(3),0;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 	mes "[Worker]";
@@ -1551,6 +1548,8 @@ OnTimer1000:
 	end;
 
 OnInstanceInit:
+	'xm_d_map$ = instance_mapname("1@xm_d");
+
 	// Warps
 	disablenpc instance_npcname("#fac3wp");
 	disablenpc instance_npcname("#fac3wp2");

+ 13 - 13
npc/re/instances/LastRoom.txt

@@ -79,8 +79,8 @@ un_myst,163,38,5	script	Mark	4_M_BLUEMAN,{
 	close3;
 }
 
-1@uns,145,32,5	script	Alp#room1	4_M_BLACKMAN,{
-	mes "[Alp]";
+1@uns,145,32,5	script	Alph#room1	4_M_BLACKMAN,{
+	mes "[Alph]";
 	mes "There are suspicious traces everywhere.";
 	mes "Some kind of heavy machine seems to have passed...";
 	cutin "bu_alp1.bmp",2;
@@ -184,7 +184,7 @@ OnTouch:
 		disablenpc instance_npcname("Tamarin#room1");
 		disablenpc instance_npcname("Verity#room1");
 		disablenpc instance_npcname("Maggi#room1");
-		disablenpc instance_npcname("Alp#room1");
+		disablenpc instance_npcname("Alph#room1");
 		mapannounce 'map_name$, "-----------------Creak---------------------",bc_map,"0xFF0000";
 		sleep 2000;
 		mapannounce 'map_name$, "-----Creak---Wrr--------------------------",bc_map,"0xFF0000";
@@ -400,7 +400,7 @@ OnMyMobDead:
 	stopnpctimer;
 	killmonster 'map_name$, instance_npcname("protocole3") + "::OnMyMobDead2";
 	mapannounce 'map_name$, "System message : All protocols failed. Locking down area excluding threat element.",bc_map,"0xFF0000";
-	enablenpc instance_npcname("Alp#room4");
+	enablenpc instance_npcname("Alph#room4");
 	enablenpc instance_npcname("Tamarin#room4");
 	enablenpc instance_npcname("Maggi#room4");
 	enablenpc instance_npcname("Du#room4");
@@ -412,8 +412,8 @@ OnMyMobDead2:
 	end;
 }
 	
-1@uns,236,258,1	script	Alp#room4	4_M_BLACKMAN,{
-	mes "[Alp]";
+1@uns,236,258,1	script	Alph#room4	4_M_BLACKMAN,{
+	mes "[Alph]";
 	mes "It's too early to relax...";
 	cutin "bu_alp1.bmp",2;
 	close3;
@@ -521,10 +521,10 @@ OnMyMobDead2:
 	cutin "bu_du4.bmp",2;
 	npctalk "Du: Just now something tremendous...", instance_npcname("Du#room4");
 	next;
-	mes "[Alp]";
+	mes "[Alph]";
 	mes "Hey... I don't think this is a situation where we should be chatting right now.";
 	cutin "bu_alp3.bmp",2;
-	npctalk "Alp: Hey... I don't think this is a situation where we should be chatting right now.", instance_npcname("Alp#room4");
+	npctalk "Alph: Hey... I don't think this is a situation where we should be chatting right now.", instance_npcname("Alph#room4");
 	next;
 	mes "[Du]";
 	mes "You call this chatting?";
@@ -532,11 +532,11 @@ OnMyMobDead2:
 	cutin "bu_du4.bmp",2;
 	npctalk "Du: You call this chatting? It was tremendous before okay?", instance_npcname("Du#room4");
 	next;
-	mes "[Alp]";
+	mes "[Alph]";
 	mes "Do you hear this?";
 	mes "Something is coming...";
 	cutin "bu_alp1.bmp",2;
-	npctalk "Alp: Do you hear this? Something is coming...", instance_npcname("Alp#room4");
+	npctalk "Alph: Do you hear this? Something is coming...", instance_npcname("Alph#room4");
 	next;
 	mes "[Tamarin]";
 	mes "Now...now that I look the ground is..., shaking a little, right?";
@@ -548,11 +548,11 @@ OnMyMobDead2:
 	cutin "bu_du4.bmp",2;
 	npctalk "Du: What...what's this?", instance_npcname("Du#room4");
 	next;
-	mes "[Alp]";
+	mes "[Alph]";
 	mes "This is...dangerous.";
 	mes "This is not a level we can handle...";
 	cutin "bu_alp2.bmp",2;
-	npctalk "Alp: This is...dangerous. This is not a level we can handle...", instance_npcname("Alp#room4");
+	npctalk "Alph: This is...dangerous. This is not a level we can handle...", instance_npcname("Alph#room4");
 	next;
 	mes "[Mark]";
 	mes "Qui...quickly outside!!!!!";
@@ -580,7 +580,7 @@ OnInstanceInit:
 	// Last step
 	disablenpc instance_npcname("Verity#room3");
 	disablenpc instance_npcname("protocole3");
-	disablenpc instance_npcname("Alp#room4");
+	disablenpc instance_npcname("Alph#room4");
 	disablenpc instance_npcname("Tamarin#room4");
 	disablenpc instance_npcname("Maggi#room4");
 	disablenpc instance_npcname("Du#room4");

+ 216 - 217
npc/re/instances/MorseCave.txt

@@ -11,10 +11,10 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 	if (ep14_3_isle == 0) {
 		mes "[Senior Tracker]";
 		mes "This is our advance base";
-		mes "to stop Morroc.";
+		mes "to stop Morocc.";
 		mes "I'm a tracker";
 		mes "charged with leading my army";
-		mes "to Morroc's lair.";
+		mes "to Morocc's lair.";
 		close;
 	}
 	switch( checkquest(9319,PLAYTIME) ) {
@@ -24,9 +24,9 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 	case 1:
 		mes "[Senior Tracker]";
 		mes "We're nowhere near close";
-		mes "to stopping Morroc's resurrection.";
+		mes "to stopping Morocc's resurrection.";
 		mes "I can't sleep at night,";
-		mes "knowing Morroc is doing everything he can";
+		mes "knowing Morocc is doing everything he can";
 		mes "to recover his strength.";
 		mes "Could you come back tomorrow?";
 		close;
@@ -37,20 +37,20 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 	case 0:
 		mes "[Senior Tracker]";
 		mes "This is our advance base";
-		mes "to stop Morroc.";
+		mes "to stop Morocc.";
 		mes "I'm a tracker";
 		mes "charged with leading my army";
-		mes "to Morroc's lair.";
+		mes "to Morocc's lair.";
 		next;
 		mes "[Senior Tracker]";
 		mes "After a painstaking search,";
 		mes "I've located";
 		mes "the place with the highest chance of";
-		mes "hiding Morroc inside.";
+		mes "hiding Morocc inside.";
 		next;
 		mes "[Senior Tracker]";
 		mes "According to my intel,";
-		mes "Morroc is hiding out in this place,";
+		mes "Morocc is hiding out in this place,";
 		mes "trying to recover";
 		mes "his full strength.";
 		next;
@@ -64,13 +64,13 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 		mes "[Senior Tracker]";
 		mes "You look like";
 		mes "a warrior spoiling for";
-		mes "a good fight with Morroc,";
+		mes "a good fight with Morocc,";
 		mes "and I think";
 		mes "you have a chance at winning it.";
 		next;
 		mes "[Senior Tracker]";
 		mes "How'd you like to";
-		mes "enter Morroc's lair,";
+		mes "enter Morocc's lair,";
 		mes "defeat him,";
 		mes "and become the hero";
 		mes "who saved the world from evil?";
@@ -83,7 +83,7 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 			close;
 		}
 		mes "[Senior Tracker]";
-		mes "Morroc may not have recovered his full strength, but fighting him still";
+		mes "Morocc may not have recovered his full strength, but fighting him still";
 		break;
 	case 1:
 		mes "[Senior Tracker]";
@@ -94,7 +94,7 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 		mes "your experience in the Red Flower. -";
 		next;
 		mes "[Senior Tracker]";
-		mes "So Morroc got away.";
+		mes "So Morocc got away.";
 		mes "That's a shame.";
 		next;
 		if (checkquest(9318,HUNTING) == 2) {
@@ -114,8 +114,8 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 		mes "I'll be waiting here.";
 		if (checkquest(9318,HUNTING) == 2)
 			getitem 6684,1;	// TokenOfHero
-		completequest 9318;// Pursuing Hiding Morroc
-		setquest 9319;// Pursuing Hiding Morroc Continues
+		completequest 9318;// Pursuing Hiding Morocc
+		setquest 9319;// Pursuing Hiding Morocc Continues
 		close;
 	case 2:
 		mes "[Senior Tracker]";
@@ -124,18 +124,18 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 		next;
 		mes "[Senior Tracker]";
 		mes "According to my intel,";
-		mes "Morroc is hiding out in this place,";
+		mes "Morocc is hiding out in this place,";
 		mes "recovering his strength.";
 		next;
 		mes "[Senior Tracker]";
-		mes "Fighting Morroc";
+		mes "Fighting Morocc";
 		break;
 	}
 	mes "takes more than a few warriors, no matter how strong they are.";
 	mes "I recommend you join forces with";
 	mes "as many comrades as you can find.";
 	mes "Are you ready to enter the Red Flower";
-	mes "where Morroc is believed to be hiding?";
+	mes "where Morocc is believed to be hiding?";
 	if (getcharid(1) > 0 && is_party_leader() == true) {
 		next;
 		if (select( "No.", "Yes." ) == 1) {
@@ -150,8 +150,7 @@ moro_cav,61,69,3	script	Senior Tracker#a1	4_M_JOB_ASSASSIN,{
 		mes "It will only stay open for a while.";
 		mes "You'd better use it";
 		mes "while you can.";
-		if (instance_create("Morse's Cave") >= 0)
-			'party_id = getcharid(1);
+		instance_create("Morse's Cave");
 	}
 	close;
 }
@@ -160,10 +159,10 @@ moro_cav,57,69,3	script	Red Flower#a1	CLEAR_NPC,{
 	if (ep14_3_isle == 0) {
 		mes "[Senior Tracker]";
 		mes "This is our advance base";
-		mes "to stop Morroc.";
+		mes "to stop Morocc.";
 		mes "I'm a tracker";
 		mes "charged with leading my army";
-		mes "to Morroc's lair.";
+		mes "to Morocc's lair.";
 		close;
 	}
 	if (isbegin_quest(9318) == 1) {
@@ -200,10 +199,10 @@ moro_cav,57,69,3	script	Red Flower#a1	CLEAR_NPC,{
 	case IE_OK:
 		mapannounce 'map_rev$, getpartyname( getcharid(1) ) + " party's " + strcharinfo(0) + " is entering Morse's Cave.", bc_map,0xFF99;
 		if (isbegin_quest(9319) > 0)
-			erasequest 9319;// Pursuing Hiding Morroc Continues
+			erasequest 9319;// Pursuing Hiding Morocc Continues
 		if (isbegin_quest(9318) > 0)
 			erasequest 9318;
-		setquest 9318;// Pursuing Hiding Morroc
+		setquest 9318;// Pursuing Hiding Morocc
 		// warp "1@rev",26,181;
 		end;
 	}
@@ -223,17 +222,19 @@ OnInit:
 OnTouch:
 	// note : party member can also trigger this event
 	disablenpc instance_npcname("#RZ Memorial Start");
+	'party_id = getcharid(1);
 	'soul_name$ = strcharinfo(0);	// name displayed on soul is defined at entrance
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 500;
-	mapannounce 'map_rev$, "Morroc: Who dares to disrupt my sleep?!", bc_map,0xEBFF;
+	mapannounce 'map_rev$, "Morocc: Who dares to disrupt my sleep?!", bc_map,0xEBFF;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : We came to the right place!";
 	sleep2 3000;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : Wait! There's something ahead of us!";
 	sleep2 3000;
 	specialeffect2 EF_LOCKON;
-	unittalk getcharid(3), "" + strcharinfo(0) + " : Are these hideous monsters Morroc's lackeys?";
+	unittalk getcharid(3), "" + strcharinfo(0) + " : Are these hideous monsters Morocc's lackeys?";
 	donpcevent instance_npcname("#RZ Event_1") + "::OnStart";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -243,39 +244,39 @@ OnTouch:
 OnStart:
 	enablenpc instance_npcname("#RZ Event_1");
 	.@label$ = instance_npcname("#RZ Event_1") + "::OnMobDead";
-	monster 'map_rev$,38,180,"Morroc's Ghoul",3001,1, .@label$;	// EP14_MORS_MOB1
-	monster 'map_rev$,38,181,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,38,182,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,54,180,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,54,181,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,54,182,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,70,180,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,70,181,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,70,182,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,38,180,"Morocc's Ghoul",3001,1, .@label$;	// EP14_MORS_MOB1
+	monster 'map_rev$,38,181,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,38,182,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,54,180,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,54,181,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,54,182,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,70,180,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,70,181,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,70,182,"Morocc's Ghoul",3001,1, .@label$;
 	end;
 OnMobDead:
 	if (mobcount( 'map_rev$, instance_npcname("#RZ Event_1") + "::OnMobDead" ) < 1) {
-		donpcevent instance_npcname("Reaper Yanku#RZ Event_2") + "::OnStart";
+		donpcevent instance_npcname("Grim Reaper Ankou#RZ Event_2") + "::OnStart";
 		disablenpc instance_npcname("#RZ Event_1");
 	}
 	end;
 }
 
-1@rev,64,181,4	script	Reaper Yanku#RZ Event_2	3029,{
+1@rev,64,181,4	script	Grim Reaper Ankou#RZ Event_2	3029,{
 	end;
 OnStart:
-	enablenpc instance_npcname("Reaper Yanku#RZ Event_2");
-	npctalk "Reaper Yanku: *Chuckle* We meet again!";
+	enablenpc instance_npcname("Grim Reaper Ankou#RZ Event_2");
+	npctalk "Grim Reaper Ankou: *Chuckle* We meet again!";
 	sleep 3000;
-	npctalk "Reaper Yanku: You shouldn't have come. You're interrupting Lord Morroc from recovering his strength.";
+	npctalk "Grim Reaper Ankou: You shouldn't have come. You're interrupting Lord Morocc from recovering his strength.";
 	sleep 3000;
-	npctalk "Reaper Yanku: This world resides in his mind.";
+	npctalk "Grim Reaper Ankou: This world resides in his mind.";
 	sleep 3000;
-	npctalk "Reaper Yanku: You can't do anything against his will. *Chuckle*";
+	npctalk "Grim Reaper Ankou: You can't do anything against his will. *Chuckle*";
 	sleep 3000;
-	npctalk "Reaper Yanku: Lord Morroc is expecting you. Let me take you to him. *Chuckle*";
+	npctalk "Grim Reaper Ankou: Lord Morocc is expecting you. Let me take you to him. *Chuckle*";
 	sleep 3000;
-	disablenpc instance_npcname("Reaper Yanku#RZ Event_2");
+	disablenpc instance_npcname("Grim Reaper Ankou#RZ Event_2");
 	enablenpc instance_npcname("#RZ Event_3");
 	sleep 3000;
 	/* Officials scripts
@@ -287,57 +288,58 @@ OnStart:
 	end;
 }
 
-// Weakened Morroc Room
+// Weakened Morocc Room
 1@rev,104,176,0	script	#RZ Event_3	HIDDEN_WARP_NPC,4,4,{
 	end;
 OnTouch:	// note : party member can also trigger this event
-	mes "";	// fix me
+	setpcblock PCBLOCK_NPC, true;
 	disablenpc instance_npcname("#RZ Event_3");
-	enablenpc instance_npcname("Weakened Morroc#RZ1");
-	unittalk getcharid(3), "" + strcharinfo(0) + " : Finally, here we are, Morroc.";
+	enablenpc instance_npcname("Weakened Morocc#RZ1");
+	unittalk getcharid(3), "" + strcharinfo(0) + " : Finally, here we are, Morocc.";
 	sleep2 3000;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : It's been almost too easy to find you,";
 	sleep2 3000;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : but it doesn't matter; you'll die today!";
 	sleep2 3000;
 	specialeffect2 EF_LOCKON;
-	donpcevent instance_npcname("Weakened Morroc#RZ1") + "::OnTalk1";
+	donpcevent instance_npcname("Weakened Morocc#RZ1") + "::OnTalk1";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
-1@rev,111,178,4	script	Weakened Morroc#RZ1	1916,{
+1@rev,111,178,4	script	Weakened Morocc#RZ1	1916,{
 	end;
 OnTalk1:
-	npctalk "Weakened Morroc: I should punish you for disturbing my slumber.";
+	npctalk "Weakened Morocc: I should punish you for disturbing my slumber.";
 	sleep 3000;
-	npctalk "Weakened Morroc: Do you really think you can stop me?";
+	npctalk "Weakened Morocc: Do you really think you can stop me?";
 	sleep 3000;
-	npctalk "Weakened Morroc: I'll make you regret ever coming here.";
+	npctalk "Weakened Morocc: I'll make you regret ever coming here.";
 	sleep 3000;
-	npctalk "Weakened Morroc: I may have not recovered my full strength,";
+	npctalk "Weakened Morocc: I may have not recovered my full strength,";
 	specialeffect EF_ENERGYCOAT;
 	sleep 3000;
-	npctalk "Weakened Morroc: but I still can take down a bunch of you easily.";
+	npctalk "Weakened Morocc: but I still can take down a bunch of you easily.";
 	sleep 3000;
-	npctalk "Weakened Morroc: Death is your only escape!";
+	npctalk "Weakened Morocc: Death is your only escape!";
 	specialeffect EF_VOLCANO;
 	sleep 3000;
-	disablenpc instance_npcname("Weakened Morroc#RZ1");
-	donpcevent instance_npcname("Weakened Morroc#control") + "::OnStart";
+	disablenpc instance_npcname("Weakened Morocc#RZ1");
+	donpcevent instance_npcname("Weakened Morocc#control") + "::OnStart";
 	end;
 OnTalk2:
-	enablenpc instance_npcname("Weakened Morroc#RZ1");
-	npctalk "Weakened Morroc: I'm sorry, but I haven't recovered my full strength.";
+	enablenpc instance_npcname("Weakened Morocc#RZ1");
+	npctalk "Weakened Morocc: I'm sorry, but I haven't recovered my full strength.";
 	sleep 3000;
-	npctalk "Weakened Morroc: I'll have to leave you to my soldiers for now.";
+	npctalk "Weakened Morocc: I'll have to leave you to my soldiers for now.";
 	sleep 3000;
-	npctalk "Weakened Morroc: Do your worst to get out of my world!";
+	npctalk "Weakened Morocc: Do your worst to get out of my world!";
 	sleep 3000;
-	npctalk "Weakened Morroc: In the end, you'll learn the meaning of helplessness in the most painful way!";
+	npctalk "Weakened Morocc: In the end, you'll learn the meaning of helplessness in the most painful way!";
 	sleep 3000;
-	npctalk "Weakened Morroc: And your souls will be mine! Mwah hah hah!";
+	npctalk "Weakened Morocc: And your souls will be mine! Mwah hah hah!";
 	sleep 3000;
-	disablenpc instance_npcname("Weakened Morroc#RZ1");
+	disablenpc instance_npcname("Weakened Morocc#RZ1");
 	sleep 3000;
 	/* Officials scripts use WARPNPC
 	enablenpc instance_npcname("#RZ Move_1");
@@ -368,23 +370,23 @@ OnTalk2:
 	end;
 }
 
-1@rev,1,1,0	script	Weakened Morroc#control	HIDDEN_WARP_NPC,{
+1@rev,1,1,0	script	Weakened Morocc#control	HIDDEN_WARP_NPC,{
 	end;
 OnStart:
-	enablenpc instance_npcname("Weakened Morroc#control");
-	monster 'map_rev$,111,178,"Weakened Morroc",2998,1, instance_npcname("Weakened Morroc#control") + "::OnMobDead";	// EP14_MORS_EVENT
+	enablenpc instance_npcname("Weakened Morocc#control");
+	monster 'map_rev$,111,178,"Weakened Morocc",2998,1, instance_npcname("Weakened Morocc#control") + "::OnMobDead";	// EP14_MORS_EVENT
 	end;
 OnMobDead:
-	donpcevent instance_npcname("Weakened Morroc#RZ1") + "::OnTalk2";
-	disablenpc instance_npcname("Weakened Morroc#control");
+	donpcevent instance_npcname("Weakened Morocc#RZ1") + "::OnTalk2";
+	disablenpc instance_npcname("Weakened Morocc#control");
 	end;
 }
 
 
-1@rev,34,126,4	script	Reaper Yanku#RZ Event_3		3029,{ end; }
-1@rev,112,126,4	duplicate(Reaper Yanku#RZ Event_3)	Reaper Yanku#RZ Event_4	3029
-1@rev,34,55,4	duplicate(Reaper Yanku#RZ Event_3)	Reaper Yanku#RZ Event_5	3029
-1@rev,112,48,4	duplicate(Reaper Yanku#RZ Event_3)	Reaper Yanku#RZ Event_6	3029
+1@rev,34,126,4	script	Grim Reaper Ankou#RZ Event_3		3029,{ end; }
+1@rev,112,126,4	duplicate(Grim Reaper Ankou#RZ Event_3)	Grim Reaper Ankou#RZ Event_4	3029
+1@rev,34,55,4	duplicate(Grim Reaper Ankou#RZ Event_3)	Grim Reaper Ankou#RZ Event_5	3029
+1@rev,112,48,4	duplicate(Grim Reaper Ankou#RZ Event_3)	Grim Reaper Ankou#RZ Event_6	3029
 
 
 // Battle 1 - waves, event A - left side
@@ -392,20 +394,23 @@ OnMobDead:
 1@rev,35,119,0	script	#Battle_1RZ1	HIDDEN_WARP_NPC,2,2,{
 	end;
 OnTouch:
-	pcblockmove 0, true;
-	if ('status_battle[0] == 0) {
+	if ('status_battle[0] != 0)
+		setpcblock PCBLOCK_MOVE, true;
+	else {
 		'status_battle[0] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
-		mapannounce 'map_rev$, "Morroc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
+		setpcblock PCBLOCK_NPC, true;
+		mapannounce 'map_rev$, "Morocc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: Your bodies are mine to control!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your bodies are mine to control!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: Your souls are food for my resurrection!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your souls are food for my resurrection!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	end;
 }
@@ -415,7 +420,7 @@ OnTouch:
 1@rev,112,116,0	script	#Battle_1RZ2	HIDDEN_WARP_NPC,2,2,{
 	end;
 OnTouch:
-	pcblockmove 0, true;
+	setpcblock PCBLOCK_MOVE, true;
 	if ('status_battle[1] == 0) {
 		'status_battle[1] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
@@ -433,22 +438,22 @@ OnStart:
 	callsub( S_Spawn,0 );
 	sleep 20000;
 	callsub( S_Spawn,0 );
-	mapannounce 'map_rev$, "Morroc: My soldiers, make them suffer! Feast on their bodies and souls!", bc_map,0xEBFF;
+	mapannounce 'map_rev$, "Morocc: My soldiers, make them suffer! Feast on their bodies and souls!", bc_map,0xEBFF;
 	sleep 20000;
 	callsub( S_Spawn,0 );
 	sleep 20000;
 	callsub( S_Spawn,0 );
-	mapannounce 'map_rev$, "Morroc: Not enough. Make them feel terror!", bc_map,0xEBFF;
+	mapannounce 'map_rev$, "Morocc: Not enough. Make them feel terror!", bc_map,0xEBFF;
 	sleep 20000;
 	callsub( S_Spawn,0 );
 	sleep 20000;
 	callsub( S_Spawn,0 );
-	mapannounce 'map_rev$, "Morroc: Resist me! Fight to the death!", bc_map,0xEBFF;
+	mapannounce 'map_rev$, "Morocc: Resist me! Fight to the death!", bc_map,0xEBFF;
 	sleep 20000;
 	callsub( S_Spawn,0 );
 	sleep 15000;
 	callsub( S_Spawn,1 );
-	mapannounce 'map_rev$, "Morroc: Mwa hah hah, I can feel my power returning!", bc_map,0xEBFF;
+	mapannounce 'map_rev$, "Morocc: Mwa hah hah, I can feel my power returning!", bc_map,0xEBFF;
 	sleep 10000;
 	callsub( S_Spawn,2 );
 	sleep 12000;
@@ -462,15 +467,15 @@ OnStart:
 		donpcevent instance_npcname( "#Pause Effect RZ" + .@i ) + "::OnStop";
 	sleep 3000;
 	if (.@count[0] > 19 || .@count[1] > 19) {
-		.@reaper$[0] = instance_npcname("Reaper Yanku#RZ Event_3");
-		.@reaper$[1] = instance_npcname("Reaper Yanku#RZ Event_4");
+		.@reaper$[0] = instance_npcname("Grim Reaper Ankou#RZ Event_3");
+		.@reaper$[1] = instance_npcname("Grim Reaper Ankou#RZ Event_4");
 		enablenpc .@reaper$[0];
 		enablenpc .@reaper$[1];
 		npctalk "You're pathetic.", .@reaper$[0];
 		npctalk "You're pathetic.", .@reaper$[1];
 		sleep 3000;
-		npctalk "Weaklings like you aren't enough food for Lord Morroc", .@reaper$[0];
-		npctalk "Weaklings like you aren't enough food for Lord Morroc", .@reaper$[1];
+		npctalk "Weaklings like you aren't enough food for Lord Morocc", .@reaper$[0];
+		npctalk "Weaklings like you aren't enough food for Lord Morocc", .@reaper$[1];
 		sleep 3000;
 		npctalk "to get the energy he needs for a full recovery.", .@reaper$[0];
 		npctalk "to get the energy he needs for a full recovery.", .@reaper$[1];
@@ -497,14 +502,14 @@ OnStart:
 			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
 				continue;
 			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
-				pcblockmove .@account_id[.@i], false;
+				setpcblock PCBLOCK_MOVE, false, .@account_id[.@i];
 		}
 		mapwarp 'map_rev$,"prontera",97,167;
 	}
 	else {
-		mapannounce 'map_rev$, "Morroc: You're more resilient than I thought.", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: You're more resilient than I thought.", bc_map,0xEBFF;
 		sleep 2000;
-		mapannounce 'map_rev$, "Morroc: But enough is enough.", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: But enough is enough.", bc_map,0xEBFF;
 		sleep 5000;
 		/* Officials scripts
 		enablenpc instance_npcname("#RZ Move_5");// warp to 1@rev,31,50
@@ -533,25 +538,25 @@ OnStart:
 S_Spawn:
 	.@additionnal_monster = getarg(0);
 	.@label$ = instance_npcname("#morse_cave_wave_1") + "::OnMobDead";
-	monster 'map_rev$,33,128,"Morroc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
-	monster 'map_rev$,42,120,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,34,111,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,25,119,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,33,128,"Morocc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
+	monster 'map_rev$,42,120,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,34,111,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,25,119,"Morocc's Ghoul",3001,1, .@label$;
 	if (.@additionnal_monster == 1)
-		monster 'map_rev$,33,111,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+		monster 'map_rev$,33,111,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
 	else if (.@additionnal_monster == 2)
-		monster 'map_rev$,32,128,"Morroc's Archer Skeleton",3003,1, .@label$;
+		monster 'map_rev$,32,128,"Morocc's Archer Skeleton",3003,1, .@label$;
 
 	if ('status_battle[1] == true) {
 		.@label$ = instance_npcname("#morse_cave_wave_1") + "::OnMobDead2";
-		monster 'map_rev$,112,126,"Morroc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
-		monster 'map_rev$,120,118,"Morroc's Ghoul",3001,1, .@label$;
-		monster 'map_rev$,112,109,"Morroc's Ghoul",3001,1, .@label$;
-		monster 'map_rev$,103,117,"Morroc's Ghoul",3001,1, .@label$;
+		monster 'map_rev$,112,126,"Morocc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
+		monster 'map_rev$,120,118,"Morocc's Ghoul",3001,1, .@label$;
+		monster 'map_rev$,112,109,"Morocc's Ghoul",3001,1, .@label$;
+		monster 'map_rev$,103,117,"Morocc's Ghoul",3001,1, .@label$;
 		if (.@additionnal_monster == 1)
-			monster 'map_rev$,103,118,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+			monster 'map_rev$,103,118,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
 		else if (.@additionnal_monster == 2)
-			monster 'map_rev$,120,117,"Morroc's Archer Skeleton",3003,1, .@label$;
+			monster 'map_rev$,120,117,"Morocc's Archer Skeleton",3003,1, .@label$;
 	}
 	return;
 
@@ -573,38 +578,40 @@ OnTouch:
 		specialeffect EF_ICEWALL;
 		initnpctimer;
 	}
-	pcblockmove 0, true;
+	setpcblock PCBLOCK_MOVE, true;
 	if (.@num < 7 && 'status_battle[0] == 0) {
-		mes "";	// fix me
+		setpcblock PCBLOCK_NPC, true;
 		'status_battle[0] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
-		mapannounce 'map_rev$, "Morroc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: Your bodies are mine to control!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your bodies are mine to control!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: Your souls are food for my resurrection!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your souls are food for my resurrection!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	else if (.@num >= 7 && .@num < 13 && 'status_battle[1] == 0) {
 		'status_battle[1] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
 	}
 	else if (.@num >= 21 && .@num < 33 && 'status_battle[2] == 0) {
-		mes "";	// fix me
+		setpcblock PCBLOCK_NPC, true;
 		'status_battle[2] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
-		mapannounce 'map_rev$, "Morroc: This world of mine is evolving.", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: This world of mine is evolving.", bc_map,0xEBFF;
 		sleep2 2000;
-		mapannounce 'map_rev$, "Morroc: My power is returning!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My power is returning!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: Your bodies and souls are under my command!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your bodies and souls are under my command!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_2") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	end;
 OnTimer30000:
@@ -648,39 +655,41 @@ OnStop:
 1@rev,33,111,0	script	#RZ Debuff_1	HIDDEN_WARP_NPC,12,4,{
 	end;
 OnTouch:
-	pcblockmove 0, true;
 	.@num = atoi( replacestr( strnpcinfo(2), "RZ Debuff_", "" ) );
+	setpcblock PCBLOCK_MOVE, true;
 	if (.@num < 5 && 'status_battle[0] == 0) {
-		mes "";	// fix me
+		setpcblock PCBLOCK_NPC, true;
 		'status_battle[0] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
-		mapannounce 'map_rev$, "Morroc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: Your bodies are mine to control!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your bodies are mine to control!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: Your souls are food for my resurrection!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your souls are food for my resurrection!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	else if (.@num >= 5 && .@num < 9 && 'status_battle[1] == 0) {
 		'status_battle[1] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
 	}
 	else if (.@num >= 9 && .@num < 16 && 'status_battle[2] == 0) {
-		mes "";	// fix me
+		setpcblock PCBLOCK_NPC, true;
 		'status_battle[2] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
-		mapannounce 'map_rev$, "Morroc: This world of mine is evolving.", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: This world of mine is evolving.", bc_map,0xEBFF;
 		sleep2 2000;
-		mapannounce 'map_rev$, "Morroc: My power is returning!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My power is returning!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: Your bodies and souls are under my command!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your bodies and souls are under my command!", bc_map,0xEBFF;
 		sleep2 3000;
-		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_2") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	end;
 }
@@ -732,17 +741,17 @@ OnTouch:
 1@rev,34,47,0	script	#Battle_2RZ1	HIDDEN_WARP_NPC,3,3,{
 	end;
 OnTouch:
-	pcblockmove 0, true;
+	setpcblock PCBLOCK_MOVE, true;
 	if ('status_battle[2] == 0) {
 		'status_battle[2] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
-		mapannounce 'map_rev$, "Morroc: This world of mine is evolving.", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: This world of mine is evolving.", bc_map,0xEBFF;
 		sleep 2000;
-		mapannounce 'map_rev$, "Morroc: My power is returning!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My power is returning!", bc_map,0xEBFF;
 		sleep 3000;
-		mapannounce 'map_rev$, "Morroc: Your bodies and souls are under my command!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Your bodies and souls are under my command!", bc_map,0xEBFF;
 		sleep 3000;
-		mapannounce 'map_rev$, "Morroc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_2") + "::OnStart";
 	}
 	end;
@@ -755,51 +764,51 @@ OnStart:
 	.@label$ = instance_npcname("#morse_cave_wave_2") + "::OnMobDead";
 	sleep 5000;
 	callsub( S_Spawn );
-	monster 'map_rev$,27,53,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
-	monster 'map_rev$,27,41,"Morroc's Archer Skeleton",3003,1, .@label$;
-	mapannounce 'map_rev$, "Morroc: This power! It feels great! Mwah hah hah!", bc_map,0xEBFF;
+	monster 'map_rev$,27,53,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,27,41,"Morocc's Archer Skeleton",3003,1, .@label$;
+	mapannounce 'map_rev$, "Morocc: This power! It feels great! Mwah hah hah!", bc_map,0xEBFF;
 	sleep 25000;
 	callsub( S_Spawn );
-	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
-	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
-	mapannounce 'map_rev$, "Morroc: How do you like losing control of your own body? *Chuckle*", bc_map,0xEBFF;
+	monster 'map_rev$,40,41,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morocc's Archer Skeleton",3003,1, .@label$;
+	mapannounce 'map_rev$, "Morocc: How do you like losing control of your own body? *Chuckle*", bc_map,0xEBFF;
 	sleep 25000;
 	callsub( S_Spawn );
-	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
-	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
-	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	monster 'map_rev$,40,41,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morocc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morocc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
 	sleep 25000;
 	callsub( S_Spawn );
-	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
-	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
-	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
-	mapannounce 'map_rev$, "Morroc: More! I need more energy!", bc_map,0xEBFF;
+	monster 'map_rev$,40,41,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morocc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morocc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	mapannounce 'map_rev$, "Morocc: More! I need more energy!", bc_map,0xEBFF;
 	sleep 25000;
 	callsub( S_Spawn );
-	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
-	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
-	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
-	mapannounce 'map_rev$, "Morroc: Mwah hah hah! Fear my army! Struggle harder!", bc_map,0xEBFF;
+	monster 'map_rev$,40,41,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morocc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morocc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	mapannounce 'map_rev$, "Morocc: Mwah hah hah! Fear my army! Struggle harder!", bc_map,0xEBFF;
 	sleep 25000;
-	monster 'map_rev$,34,57,"Morroc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
-	monster 'map_rev$,43,48,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,33,38,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
-	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
-	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	monster 'map_rev$,34,57,"Morocc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
+	monster 'map_rev$,43,48,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,33,38,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,40,41,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morocc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morocc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
 	sleep 25000;
 	callsub( S_Spawn );
-	monster 'map_rev$,27,53,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
-	monster 'map_rev$,27,41,"Morroc's Archer Skeleton",3003,1, .@label$;
-	monster 'map_rev$,40,41,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
-	monster 'map_rev$,40,54,"Morroc's Verit",3005,1, .@label$;
-	mapannounce 'map_rev$, "Morroc: You're pathetic, struggling to survive!", bc_map,0xEBFF;
+	monster 'map_rev$,27,53,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,27,41,"Morocc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,40,41,"Morocc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	monster 'map_rev$,40,54,"Morocc's Verit",3005,1, .@label$;
+	mapannounce 'map_rev$, "Morocc: You're pathetic, struggling to survive!", bc_map,0xEBFF;
 	sleep 15000;
 	callsub( S_Spawn );
-	monster 'map_rev$,40,41,"Morroc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
-	monster 'map_rev$,40,54,"Morroc's Archer Skeleton",3003,1, .@label$;
-	monster 'map_rev$,27,53,"Morroc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
-	monster 'map_rev$,27,41,"Morroc's Verit",3005,1, .@label$;
+	monster 'map_rev$,40,41,"Morocc's Archer Skeleton",3003,1, .@label$;// EP14_MORS_MOB3
+	monster 'map_rev$,40,54,"Morocc's Archer Skeleton",3003,1, .@label$;
+	monster 'map_rev$,27,53,"Morocc's Verit",3005,1, .@label$;// EP14_MORS_MOB5
+	monster 'map_rev$,27,41,"Morocc's Verit",3005,1, .@label$;
 	sleep 12000;
 	.@count = mobcount( 'map_rev$, instance_npcname("#morse_cave_wave_2") + "::OnMobDead" );
 	killmonster 'map_rev$, instance_npcname("#morse_cave_wave_2") + "::OnMobDead";
@@ -808,11 +817,11 @@ OnStart:
 		donpcevent instance_npcname( "#Pause Effecto RZ" + .@i ) + "::OnStop";
 	sleep 3000;
 	if (.@count > 19) {
-		.@reaper$ = instance_npcname("Reaper Yanku#RZ Event_5");
+		.@reaper$ = instance_npcname("Grim Reaper Ankou#RZ Event_5");
 		enablenpc .@reaper$;
 		npctalk "You're pathetic.", .@reaper$;
 		sleep 3000;
-		npctalk "Weaklings like you aren't enough food for Lord Morroc", .@reaper$;
+		npctalk "Weaklings like you aren't enough food for Lord Morocc", .@reaper$;
 		sleep 3000;
 		npctalk "to get the energy he needs for a full recovery.", .@reaper$;
 		sleep 3000;
@@ -832,14 +841,14 @@ OnStart:
 			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
 				continue;
 			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
-				pcblockmove .@account_id[.@i], false;
+				setpcblock PCBLOCK_MOVE, false, .@account_id[.@i];
 		}
 		mapwarp 'map_rev$,"prontera",97,167;
 	}
 	else {
-		mapannounce 'map_rev$, "Morroc: I'm surprised you've lasted this long. Thank you for helping me recover most of my strength.", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: I'm surprised you've lasted this long. Thank you for helping me recover most of my strength.", bc_map,0xEBFF;
 		sleep 4000;
-		mapannounce 'map_rev$, "Morroc: Good, I feel rejuvenated.", bc_map,0xEBFF;
+		mapannounce 'map_rev$, "Morocc: Good, I feel rejuvenated.", bc_map,0xEBFF;
 		sleep 3000;
 		for ( .@i = 9; .@i <= 15; .@i++ )
 			disablenpc instance_npcname( "#RZ Debuff_" + .@i );
@@ -849,7 +858,7 @@ OnStart:
 			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
 				continue;
 			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
-				pcblockmove .@account_id[.@i], false;
+				setpcblock PCBLOCK_MOVE, false, .@account_id[.@i];
 		}
 		// enablenpc instance_npcname("#RZ Debuff Recovery_1");
 		// enablenpc instance_npcname("#RZ Debuff Recovery_2");
@@ -868,10 +877,10 @@ OnStart:
 	end;
 S_Spawn:
 	.@label$ = instance_npcname("#morse_cave_wave_2") + "::OnMobDead";
-	monster 'map_rev$,34,57,"Morroc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
-	monster 'map_rev$,43,48,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,33,38,"Morroc's Ghoul",3001,1, .@label$;
-	monster 'map_rev$,24,48,"Morroc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,34,57,"Morocc's Ghoul",3001,1, .@label$;// EP14_MORS_MOB1
+	monster 'map_rev$,43,48,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,33,38,"Morocc's Ghoul",3001,1, .@label$;
+	monster 'map_rev$,24,48,"Morocc's Ghoul",3001,1, .@label$;
 	return;
 OnMobDead:
 	end;
@@ -919,11 +928,12 @@ OnStop:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#Battle_3RZ1");
-	mapannounce 'map_rev$, "Morroc: I can't let you go unscathed!", bc_map,0xEBFF;
+	setpcblock PCBLOCK_NPC, true;
+	mapannounce 'map_rev$, "Morocc: I can't let you go unscathed!", bc_map,0xEBFF;
 	sleep2 3000;
-	mapannounce 'map_rev$, "Morroc: Hah hah, my Necromancer. I'll leave them to you.", bc_map,0xEBFF;
+	mapannounce 'map_rev$, "Morocc: Hah hah, my Necromancer. I'll leave them to you.", bc_map,0xEBFF;
 	sleep2 3000;
-	mapannounce 'map_rev$, "Morroc: My loyal soldier, I'll trust you with their deaths!", bc_map,0xEBFF;
+	mapannounce 'map_rev$, "Morocc: My loyal soldier, I'll trust you with their deaths!", bc_map,0xEBFF;
 	sleep2 3000;
 	.@necromancer$ = instance_npcname("Morocc Necromancer#RZ1");
 	enablenpc .@necromancer$;
@@ -935,13 +945,14 @@ OnTouch:
 	sleep2 3000;
 	npctalk "Morocc Necromancer: The energy you generated to protect me while I was hiding within your soul", .@necromancer$;
 	sleep2 3000;
-	npctalk "Morocc Necromancer: has been converted to healing energy for Lord Morroc the moment you entered this world of his!", .@necromancer$;
+	npctalk "Morocc Necromancer: has been converted to healing energy for Lord Morocc the moment you entered this world of his!", .@necromancer$;
 	sleep2 3000;
 	npctalk "Morocc Necromancer: *Chuckle* Your stupidity was a blessing for us. We don't need you anymore. DIE!", .@necromancer$;
 	specialeffect EF_BEGINSPELL2,AREA, .@necromancer$;
 	sleep2 3000;
 	disablenpc .@necromancer$;
 	donpcevent instance_npcname("#morse_cave_3") + "::OnStart";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -974,16 +985,16 @@ OnMobDead2:
 	donpcevent instance_npcname("#morse_cave_boss_talk") + "::OnStop";
 	donpcevent instance_npcname("#morse_cave_wave_3_mobs") + "::OnStop";
 	sleep 3000;
-	.@reaper$ = instance_npcname("Reaper Yanku#RZ Event_6");
+	.@reaper$ = instance_npcname("Grim Reaper Ankou#RZ Event_6");
 	enablenpc .@reaper$;
 	sleep 1000;
-	npctalk "Reaper Yanku: Sigh, Necromancer, why did you have to die so quickly?", .@reaper$;
+	npctalk "Grim Reaper Ankou: Sigh, Necromancer, why did you have to die so quickly?", .@reaper$;
 	sleep 3000;
-	npctalk "Reaper Yanku: Don't be so happy!", .@reaper$;
+	npctalk "Grim Reaper Ankou: Don't be so happy!", .@reaper$;
 	sleep 3000;
-	npctalk "Reaper Yanku: Now that Lord Morroc has fully recovered his strength, you're as good as dead!", .@reaper$;
+	npctalk "Grim Reaper Ankou: Now that Lord Morocc has fully recovered his strength, you're as good as dead!", .@reaper$;
 	sleep 3000;
-	npctalk "Reaper Yanku: We'll meet again. *Chuckle*", .@reaper$;
+	npctalk "Grim Reaper Ankou: We'll meet again. *Chuckle*", .@reaper$;
 	sleep 2000;
 	hideonnpc .@reaper$;
 	enablenpc instance_npcname("#RZ Move_17a");
@@ -1020,7 +1031,7 @@ OnStart:
 OnTimer8000:
 	.@r = rand(4);
 	if (.@r == 0)
-		unittalk 'boss_id, "Morocc Necromancer: We the soldiers of Morroc know no mercy!";
+		unittalk 'boss_id, "Morocc Necromancer: We the soldiers of Morocc know no mercy!";
 	else if (.@r == 1)
 		unittalk 'boss_id, "Morocc Necromancer: You're doing good so far. *Giggle*";
 	else if (.@r == 2)
@@ -1064,17 +1075,17 @@ OnTimer25000:
 	}
 	.@label$ = instance_npcname("#morse_cave_wave_3_mobs") + "::OnMobDead";
 	if (mobcount( 'map_rev$, .@label$ ) < 100) {	// stop to 100 mobs for performance
-		monster 'map_rev$,'coord[0],'coord[1], "Morroc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
-		monster 'map_rev$,'coord[2],'coord[3], "Morroc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
-		monster 'map_rev$,'coord[4],'coord[5], "Morroc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
-		monster 'map_rev$,'coord[6],'coord[7], "Morroc's Osiris", 3002,1, .@label$;				// EP14_MORS_MOB2
-		monster 'map_rev$,'coord[8],'coord[9], "Morroc's Archer Skeleton", 3003,1, .@label$;	// EP14_MORS_MOB3
-		monster 'map_rev$,'coord[10],'coord[11], "Morroc's Wraith", 3004,1, .@label$;			// EP14_MORS_MOB4
+		monster 'map_rev$,'coord[0],'coord[1], "Morocc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
+		monster 'map_rev$,'coord[2],'coord[3], "Morocc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
+		monster 'map_rev$,'coord[4],'coord[5], "Morocc's Ghoul", 3001,1, .@label$;				// EP14_MORS_MOB1
+		monster 'map_rev$,'coord[6],'coord[7], "Morocc's Osiris", 3002,1, .@label$;				// EP14_MORS_MOB2
+		monster 'map_rev$,'coord[8],'coord[9], "Morocc's Archer Skeleton", 3003,1, .@label$;	// EP14_MORS_MOB3
+		monster 'map_rev$,'coord[10],'coord[11], "Morocc's Wraith", 3004,1, .@label$;			// EP14_MORS_MOB4
 
 		if (rand(100) < 20)
-			monster 'map_rev$,'coord[12],'coord[12], "Morroc's Archer Skeleton", 3003,1, .@label$;	// EP14_MORS_MOB3
+			monster 'map_rev$,'coord[12],'coord[12], "Morocc's Archer Skeleton", 3003,1, .@label$;	// EP14_MORS_MOB3
 		else
-			monster 'map_rev$,'coord[12],'coord[13], "Morroc's Verit", 3005,1, .@label$;		// EP14_MORS_MOB5
+			monster 'map_rev$,'coord[12],'coord[13], "Morocc's Verit", 3005,1, .@label$;		// EP14_MORS_MOB5
 
 		// inaccurate
 		areamonster 'map_rev$,102,38,121,57, "#Poison", 3008,1, .@label$;		// EP14_MORS_HIDDEN
@@ -1116,16 +1127,16 @@ OnInstanceInit:
 
 	// Entrance
 	disablenpc instance_npcname("#RZ Event_1");
-	disablenpc instance_npcname("Reaper Yanku#RZ Event_2");
+	disablenpc instance_npcname("Grim Reaper Ankou#RZ Event_2");
 
-	// Weakened Morroc
+	// Weakened Morocc
 	disablenpc instance_npcname("#RZ Event_3");
-	disablenpc instance_npcname("Weakened Morroc#RZ1");
-	disablenpc instance_npcname("Weakened Morroc#control");
+	disablenpc instance_npcname("Weakened Morocc#RZ1");
+	disablenpc instance_npcname("Weakened Morocc#control");
 
 	// Battle 1
-	disablenpc instance_npcname("Reaper Yanku#RZ Event_3");
-	disablenpc instance_npcname("Reaper Yanku#RZ Event_4");
+	disablenpc instance_npcname("Grim Reaper Ankou#RZ Event_3");
+	disablenpc instance_npcname("Grim Reaper Ankou#RZ Event_4");
 	disablenpc instance_npcname("#Battle_1RZ1");
 	disablenpc instance_npcname("#Battle_1RZ2");
 	disablenpc instance_npcname("#RZ Memorial Effect 1");
@@ -1135,7 +1146,7 @@ OnInstanceInit:
 		disablenpc instance_npcname( "#Pause Effect RZ" + .@i );
 
 	// Battle 2
-	disablenpc instance_npcname("Reaper Yanku#RZ Event_5");
+	disablenpc instance_npcname("Grim Reaper Ankou#RZ Event_5");
 	disablenpc instance_npcname("#RZ Memorial Effect 3");
 	disablenpc instance_npcname("#morse_cave_wave_2");
 	disablenpc instance_npcname("#Battle_2RZ1");
@@ -1145,7 +1156,7 @@ OnInstanceInit:
 	// Battle 3
 	disablenpc instance_npcname("#morse_cave_3");
 	disablenpc instance_npcname("#morse_cave_wave_3");
-	disablenpc instance_npcname("Reaper Yanku#RZ Event_6");
+	disablenpc instance_npcname("Grim Reaper Ankou#RZ Event_6");
 	disablenpc instance_npcname("#Battle_3RZ1");
 	disablenpc instance_npcname("Morocc Necromancer#RZ1");
 	disablenpc instance_npcname("#RZ Move_17a");
@@ -1153,35 +1164,23 @@ OnInstanceInit:
 	// Debuff - Battle 1 & 2
 	for ( .@i = 1; .@i <= 15; .@i++ )
 		disablenpc instance_npcname( "#RZ Debuff_" + .@i );
-
-	// reload
-	if ('party_id > 0) {
-		getpartymember 'party_id, 1, .@char_id;
-		getpartymember 'party_id, 2, .@account_id;
-		for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
-			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
-				continue;
-			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
-				pcblockmove .@account_id[.@i], false;
-		}
-	}
 	end;
 }
 
 /*
 // Original warps
-// Entrance -> Weakened Morroc
+// Entrance -> Weakened Morocc
 1@rev,63,181,0	warp2	#RZ Move_30	10,10,1@rev,103,177
 1@rev,47,181,0	warp2	#RZ Move_31	10,10,1@rev,103,177
 1@rev,31,181,0	warp2	#RZ Move_32	10,10,1@rev,103,177
 
-// Weakened Morroc -> Battle Wave 1a
+// Weakened Morocc -> Battle Wave 1a
 1@rev,106,172,0	warp2	#RZ Move_1	10,10,1@rev,33,117
 1@rev,106,172,0	warp2	#RZ Move_2	10,10,1@rev,33,117
 1@rev,117,172,0	warp2	#RZ Move_3	10,10,1@rev,33,117
 1@rev,117,183,0	warp2	#RZ Move_4	10,10,1@rev,33,117
 
-// Weakened Morroc -> Battle Wave 1b
+// Weakened Morocc -> Battle Wave 1b
 1@rev,106,172,0	warp2	#RZ Move_1	10,10,1@rev,112,116
 1@rev,106,172,0	warp2	#RZ Move_2	10,10,1@rev,112,116
 1@rev,117,172,0	warp2	#RZ Move_3	10,10,1@rev,112,116

+ 4610 - 0
npc/re/instances/NightmarishJitterbug.txt

@@ -0,0 +1,4610 @@
+//===== rAthena Script =======================================
+//= Nightmarish Jitterbug
+//===== Description: =========================================
+//= [Walkthrough Conversion]
+//= Nightmarish Jitterbug Instance
+//===== Changelogs: ==========================================
+//= 1.0 First version. [Capuche]
+//= 1.0.1 Fix Cutin Aigu. [mazvi]
+//============================================================
+
+moc_para01,26,95,5	script	Roel#sara	4_M_ROEL,{
+	cutin "roel01",0;
+	if (BaseLevel < 120) {
+		mes "[Roel]";
+		mes "We're looking for adventurers that can join us for a brand new adventure. If you're at the Level to accept IGU's quests, then you're qualified.";
+		close3;
+	}
+	switch( isbegin_quest(13183) ) {// Nightmarish Jitterbug: Completed
+	case 0:
+		switch( isbegin_quest(13181) ) {// Nightmarish Jitterbug
+		case 0:
+			mes "[Roel]";
+			mes "I'm Roel, new member of the White Wings Guild. Roter had me search everywhere for Newoz, and I've found some clues as to his whereabouts.";
+			next;
+			mes "[Roel]";
+			mes "Recruiting guild prospects! Join us in our search for our former master Newoz! Are you interested?";
+			next;
+			if (select( "Yes.", "No." ) == 1) {
+				cutin "roel02",0;
+				mes "[Roel]";
+				mes "What a difficult task. I searched from this end to that end of the world, and could find neither hide nor hair of him.";
+				next;
+				cutin "roel01",0;
+				mes "[Roel]";
+				mes "I tried to some trace of him, but to no avail.";
+				next;
+				mes "[Roel]";
+				mes "Newoz is an avid adventurer who never stays in one place long enough; a lot of people claimed they saw him, yet none of them remembered where he went.";
+				next;
+				mes "[Roel]";
+				mes "After a while, I had to give up on tracing him. I was just wasting time.";
+				next;
+				mes "[Roel]";
+				mes "I turned my eyes to the Other World, and there I met some eyewitnesses. They led me to the last place Newoz had been seen.";
+				next;
+				mes "[Roel]";
+				mes "The whole process was painful. If it weren't for Runane, we couldn't have Memorized his last location or gotten out of it.";
+				next;
+				mes "[Roel]";
+				mes "If you're interested in joining us, please talk to Runane. We have an exciting adventure ahead of us.";
+				setquest 13181;// Nightmarish Jitterbug
+			}
+			close3;
+		case 1:
+			mes "[Roel]";
+			mes "If you're interested in joining us, please talk to Runane.";
+			close3;
+		case 2:
+			cutin "roel03",0;
+			mes "[Roel]";
+			mes "It was my first adventure as a member of White Wings. I can't wait for the next one!";
+			erasequest 13181;
+			setquest 13183;// Nightmarish Jitterbug: Completed
+			completequest 13183;
+			getexp 1500000,500000;
+			close3;
+		}
+		end;
+	case 1:
+	case 2:
+		switch( isbegin_quest(13181) ) {
+		case 0:
+			mes "[Roel]";
+			mes "Where do you think Shaloshi is by now? The space where we met Shaloshi is caught in a time loop, repeating the same events again and again.";
+			next;
+			mes "[Roel]";
+			mes "Mingmin thinks the phenomenon has something to do with the Dimensional Crack and Shaloshi's ability.";
+			next;
+			mes "[Roel]";
+			mes "I didn't quite understand her, but Runane said the portal to the place she Memorized is based on time instead of space.";
+			next;
+			mes "[Roel]";
+			mes "If you want, you can go back in time and experience the same events. Do you want to embark on an adventure again?";
+			next;
+			if (select( "Yes.", "No." ) == 1) {
+				mes "[Roel]";
+				mes "You might have a different experience this time in this place full of unfathomable mysteries. Please ask Runane to open the portal for you.";
+				next;
+				mes "[Roel]";
+				mes "This time, maybe you don't have to leave Shaloshi.";
+				setquest 13181;// Nightmarish Jitterbug
+			}
+			close3;
+		case 1:
+			mes "[Roel]";
+			mes "Are you ready yet? You can give up if you're not confident.";
+			next;
+			if (select( "No.", "Give up." ) == 1) {
+				mes "[Roel]";
+				mes "That's the spirit!";
+				close3;
+			}
+			erasequest 13181;
+			close3;
+		case 2:
+			cutin "roel03",0;
+			mes "[Roel]";
+			mes "Adventuring is always fun. Be a great adventurer, okay?";
+			erasequest 13181;
+			getexp 1500000,500000;
+			close3;
+		}
+	}
+}
+
+moc_para01,29,95,5	script	Runane#sara	4_F_RUNAIN,{
+	cutin "lunain01",0;
+	if (BaseLevel < 120) {
+		mes "[Runane]";
+		mes "^ff0000You must be Level 120.^000000";
+		close3;
+	}
+	if (isbegin_quest(13181) != 1) {
+		mes "[Runane]";
+		mes "^ff0000If you want to use my dimensional portal, then you first have to talk to Roel. The portal is not open for everyone.^000000";
+		close3;
+	}
+	.@party_id = getcharid(1);
+	.@md_name$ = "Nightmarish Jitterbug";
+	if (.@party_id < 1) {
+		mes "[Runane]";
+		mes "^ff0000You first must form/join a party of at least 1 person to enter this dungeon.^000000";
+		close3;
+	}
+	switch( checkquest(13182,PLAYTIME) ) {
+	case -1:
+		break;
+	case 0:
+	case 1:
+		mes "[Runane]";
+		mes "^ff0000This dimensional portal cannot be accessed for 20 hours after your last access.^000000";
+		close3;
+	case 2:
+		mes "[Runane]";
+		mes "The portal is now available for use.";
+		erasequest 13182;// Nightmarish Jitterbug: Waiting
+		close3;
+	}
+	if (is_party_leader() == true)
+		.@menu$ = "Open the dimensional portal.";
+	switch( select( .@menu$, "Enter " + .@md_name$ + ".", "Cancel." ) ) {
+	case 1:
+		if (instance_create(.@md_name$) < 0) {
+			mes "Party Name: " + getpartyname( getcharid(1) );
+			mes "Party Leader: " + strcharinfo(0);
+			mes "^0000ff" + .@md_name$ + " ^000000- Reservation Failed!";
+			close3;
+		}
+		mes "[Runane]";
+		mes "^ff0000Preparing the dimensional portal...^000000";
+		mes "^ff0000Please wait.^000000";
+		close3;
+	case 2:
+		switch( instance_enter(.@md_name$) ) {
+		case IE_NOMEMBER:
+			close3;
+		case IE_NOINSTANCE:
+			if (is_party_leader() == false) {
+				mes "[Runane]";
+				mes "Teleporting...";
+				next;
+				mes "[Runane]";
+				mes "^ff0000Please note that this portal cannot be accessed for 23 hours after your last access.^000000";
+				next;
+			}
+			mes "[Runane]";
+			mes "^ff0000Your party leader has not yet created a Time Crack.^000000";
+			close3;
+		case IE_OTHER:
+			mes "An unknown error has occurred.";
+			close3;
+		case IE_OK:
+			setquest 13182;// Nightmarish Jitterbug: Waiting
+			mapannounce "moc_para01", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering the " + .@md_name$ + ".", bc_map, 0xFF99;
+			specialeffect2 EF_READYPORTAL2;
+			specialeffect2 EF_PORTAL2;
+			// warp "1@jtb",16,17;
+			end;
+		}
+	case 3:
+		cutin "",255;
+		end;
+	}
+}
+
+// Warps
+1@jtb,45,47,0	warp	1 Door 1	3,3,1@jtb,100,14
+1@jtb,135,17,0	warp	2 Door 1	3,3,1@jtb,184,17
+1@jtb,220,23,0	warp	3 Door 1	3,3,1@jtb,270,13
+1@jtb,306,47,0	warp	4 Door 1	3,3,1@jtb,11,102
+
+1@jtb,39,133,0	warp	6 Door 1	3,3,1@jtb,96,100
+1@jtb,133,106,0	warp	7 Door 1	3,3,1@jtb,183,128
+1@jtb,209,133,0	warp	8 Door 1	3,3,1@jtb,277,95
+1@jtb,307,122,0	warp	9 Door 1	3,3,1@jtb,359,97
+1@jtb,386,133,0	warp	10 Door 1	3,3,1@jtb,13,214
+1@jtb,49,196,0	warp	11 Door 1	3,3,1@jtb,95,201
+1@jtb,133,197,0	warp	12 Door 1	3,3,1@jtb,181,198
+1@jtb,218,203,0	warp	13 Door 1	3,3,1@jtb,269,206
+1@jtb,307,195,0	warp	14 Door 1	3,3,1@jtb,355,214
+1@jtb,388,182,0	warp	15 Door 1	3,3,1@jtb,13,274
+1@jtb,47,302,0	warp	16 Door 1	3,3,1@jtb,99,298
+1@jtb,134,275,0	warp	17 Door 1	3,3,1@jtb,200,271
+1@jtb,199,305,0	warp	18 Door 1	3,3,1@jtb,13,384
+1@jtb,49,365,0	warp	19 Door 1	3,3,1@jtb,107,389
+1@jtb,111,352,0	warp	20 Door 1	3,3,1@jtb,184,385
+1@jtb,220,359,0	warp	21 Door 1	3,3,1@jtb,287,355
+1@jtb,311,358,0	warp	22 Door 1	3,3,1@jtb,335,320
+1@jtb,325,325,0	warp	23 Door 1	10,10,1@jtb,360,23
+
+1@jtb,391,30,0	script	24 Door 1	WARPNPC,3,3,{
+	end;
+OnTouch_:
+	if (isbegin_quest(13181) == 1)
+		completequest 13181;
+	warp "moc_para01",30,88;
+	end;
+}
+
+
+// Room 1 : Entrance
+1@jtb,28,30,5	script	Newoz#01	4_M_NEWOZ,{
+	if ('room != 1 || is_party_leader() == false) {
+		cutin "nines02",0;
+		mes "[Newoz]";
+		mes "Our adventure hasn't started yet, and I'm already hungry.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 1 && is_party_leader() == true) {
+			if ('additionnal_option) {// officially not disabled when choose hurry
+				disablenpc instance_npcname("Roel#01");
+				disablenpc instance_npcname("Melody-Jack#01");
+				disablenpc instance_npcname("Arang#01");
+				disablenpc instance_npcname("Lagi#01");
+				disablenpc instance_npcname("Aigu#01");
+				disablenpc instance_npcname("Mingmin#01");
+				disablenpc instance_npcname("Runane#01");
+				disablenpc instance_npcname("Gelka#01");
+				disablenpc instance_npcname("Roter#01");
+				disablenpc instance_npcname("Newoz#01");
+			}
+			donpcevent 'jitterbug_main$ + "::OnNextIs2";
+		}
+		close;
+	}
+	.@roel$ = instance_npcname("Roel#01");
+	.@melody$ = instance_npcname("Melody-Jack#01");
+	.@arang$ = instance_npcname("Arang#01");
+	.@lagi$ = instance_npcname("Lagi#01");
+	.@aigu$ = instance_npcname("Aigu#01");
+	.@mingmin$ = instance_npcname("Mingmin#01");
+	.@runane$ = instance_npcname("Runane#01");
+	.@gelka$ = instance_npcname("Gelka#01");
+	.@roter$ = instance_npcname("Roter#01");
+
+	cutin "nines02",0;
+	mes "[Newoz]";
+	mes "It seems everyone's here.";
+	npctalk "Newoz: It seems everyone's here.";
+	emotion ET_DELIGHT;
+	next;
+	cutin "rote03",0;
+	mes "[Roter]";
+	mes "I told you, Newoz. We can't just let this go.";
+	npctalk "Roter: I told you, Newoz. We can't just let this go.", .@roter$;
+	emotion ET_FRET, getnpcid(0,.@roter$);
+	next;
+	if ('room == 1 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs2";
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Considering the time and money we wasted on you, you deserve to be fed a basket full of poisonous mushrooms.";
+	npctalk "Mingmin: Considering the time and money we wasted on you, you deserve to be fed a basket full of poisonous mushrooms.", .@mingmin$;
+	next;
+	cutin "nines04",0;
+	emotion ET_DELIGHT;
+	mes "[Newoz]";
+	mes "I'll explain everything. And enough with the poisonous mushrooms. I can't eat mushrooms at all.";
+	npctalk "Newoz: I'll explain everything. And enough with the poisonous mushrooms. I can't eat mushrooms at all.";
+	next;
+	cutin "igu05",2;
+	mes "[Aigu]";
+	mes "Newoz, you can't eat anything but meat. Sigh, I'm glad you're safe.";
+	npctalk "Aigu: Newoz, you can't eat anything but meat. Sigh, I'm glad you're safe.", .@aigu$;
+	next;
+	cutin "gelca03",0;
+	mes "[Gelka]";
+	mes "You're the famous Newoz! Nice to meet you. My master told me many great things...";
+	npctalk "Gelka: You're the famous Newoz! Nice to meet you. My master told me many great things...", .@gelka$;
+	next;
+	cutin "rote03",0;
+	mes "[Roter]";
+	mes "Enough. He's just an idiot with no sense of direction.";
+	npctalk "Roter: Enough. He's just an idiot with no sense of direction.", .@roter$;
+	next;
+	cutin "arang02",2;
+	mes "[Arang]";
+	mes "Wow, Newoz! Your eyes look puffier than ever.";
+	npctalk "Arang: Wow, Newoz! Your eyes look puffier than ever.", .@arang$;
+	next;
+	cutin "nines02",0;
+	mes "[Newoz]";
+	mes "Hello, Arang. How's Arirang? Heh. What brings you here?";
+	npctalk "Newoz: Hello, Arang. How's Arirang? Heh. What brings you here?";
+	next;
+	cutin "rote03",0;
+	mes "[Roter]";
+	mes "Newoz, do you know how long you've been missing? We even recruited new guildsmen to find you, and...";
+	npctalk "Roter: Newoz, do you know how long you've been missing? We even recruited new guildsmen to find you, and...", .@roter$;
+	next;
+	cutin "lunain01",0;
+	mes "[Runane]";
+	mes "Hi, nice to meet you. I'm honored to meet the famous Newoz in person.";
+	npctalk "Runane: Hi, nice to meet you. I'm honored to meet the famous Newoz in person.", .@runane$;
+	next;
+	cutin "roel01",2;
+	mes "[Roel]";
+	mes "H-hello, my name is Roel. Runane and I've joined the guild together. Nice to meet you.";
+	npctalk "Roel: H-hello, my name is Roel. Runane and I've joined the guild together. Nice to meet you.", .@roel$;
+	next;
+	cutin "rote02",0;
+	mes "[Roter]";
+	mes "In accordance with the Guild Policy, Article 8, I'm now the master of this guild, and you're just a member.";
+	npctalk "Roter: In accordance with the Guild Policy, Article 8, I'm now the master of this guild, and you're just a member.", .@roter$;
+	next;
+	cutin "nines02",0;
+	mes "[Newoz]";
+	mes "Oh, congratulations, Master.";
+	npctalk "Newoz: Oh, congratulations, Master.";
+	next;
+	cutin "rote01",0;
+	emotion ET_THINK, getnpcid(0,.@roter$);
+	mes "[Roter]";
+	mes "...That wasn't what I expected. Aren't you upset at all?";
+	npctalk "Roter: ...That wasn't what I expected. Aren't you upset at all?", .@roter$;
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "What did you expect? All he thinks about is adventure, monsters, and treasure.";
+	npctalk "Melody-Jack: What did you expect? All he thinks about is adventure, monsters, and treasure.", .@melody$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Argh, is there a ghost? Or am I hearing things?";
+	npctalk "Newoz: Argh, is there a ghost? Or am I hearing things?";
+	next;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	cutin "",255;
+	mes "[Melody-Jack]";
+	mes "...";
+	npctalk "Melody-Jack: ...", .@melody$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Whew, it's you Jack. Long time, no see, everyone.";
+	npctalk "Newoz: Whew, it's you Jack. Long time, no see, everyone.";
+	next;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	cutin "",255;
+	mes "[Melody-Jack]";
+	mes "This isn't a good time for chit-chat. I'm sensing something from the very floor where you're standing and where I'm hiding.";
+	npctalk "Melody-Jack: This isn't a good time for chit-chat. I'm sensing something from the very floor where you're standing and where I'm hiding.", .@melody$;
+	next;
+	cutin "arang03",2;
+	mes "[Arang]";
+	mes "Jack, is that why you're hiding like a coward?";
+	npctalk "Arang: Jack, is that why you're hiding like a coward?", .@arang$;
+	next;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	cutin "",255;
+	mes "[Melody-Jack]";
+	mes "It comes natural for veteran thieves like me to hide themselves in potential enemy territories.";
+	npctalk "Melody-Jack: It comes natural for veteran thieves like me to hide themselves in potential enemy territories.", .@melody$;
+	next;
+	mes "[Melody-Jack]";
+	mes "I'm not hiding because my sprite is not yet ready!";
+	npctalk "Melody-Jack: I'm not hiding because my sprite is not yet ready!", .@melody$;
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "I agree with Jack. Everything about this place--from the air to the soil--screams unnatural.";
+	npctalk "Mingmin: I agree with Jack. Everything about this place--from the air to the soil--screams unnatural.", .@mingmin$;
+	next;
+	cutin "ragi01",2;
+	mes "[Lagi]";
+	mes "Could it be supernatural?";
+	npctalk "Lagi: Could it be supernatural?", .@lagi$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Or otherworldly.";
+	npctalk "Newoz: Or otherworldly.";
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "...";
+	npctalk "Mingmin: ...", .@mingmin$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "You're Lagi, right? I like the way you think. I'd love to work with you sometime.";
+	npctalk "Newoz: You're Lagi, right? I like the way you think. I'd love to work with you sometime.";
+	next;
+	cutin "lunain02",0;
+	mes "[Runane]";
+	mes "I've joined this guild to meet you, Newoz. Do you have a girlfriend?";
+	npctalk "Runane: I've joined this guild to meet you, Newoz. Do you have a girlfriend?", .@runane$;
+	next;
+	cutin "igu05",2;
+	mes "[Aigu]";
+	mes "Don't you dare--I called dibs on him first!";
+	npctalk "Aigu: Don't you dare--I called dibs on him first!", .@aigu$;
+	next;
+	cutin "lunain03",0;
+	mes "[Runane]";
+	mes "I don't think he knows that. Do you, Newoz?";
+	npctalk "Runane: I don't think he knows that. Do you, Newoz?", .@runane$;
+	next;
+	cutin "igu04",2;
+	mes "[Aigu]";
+	mes "Well, I didn't...";
+	npctalk "Aigu: Well, I didn't...", .@aigu$;
+	next;
+	cutin "lunain01",0;
+	mes "[Runane]";
+	mes "*Snort* Then he's fair game!";
+	npctalk "Runane: *Snort* Then he's fair game!", .@runane$;
+	next;
+	cutin "gelca02",0;
+	mes "[Gelka]";
+	mes "Um, the conversation seems to have gone...";
+	npctalk "Gelka: Um, the conversation seems to have gone...", .@gelka$;
+	next;
+	cutin "ragi03",2;
+	mes "[Lagi]";
+	mes "She can change subjects more quickly than an Arclouse can cast Increase AGI.";
+	npctalk "Lagi: She can change subjects more quickly than an Arclouse can cast Increase AGI.", .@lagi$;
+	next;
+	cutin "arang02",0;
+	mes "[Arang]";
+	mes "Are they competing over Newoz? I want in, too!";
+	npctalk "Arang: Are they competing over Newoz? I want in, too!", .@arang$;
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "...Sorry to bother you guys, but I think something's over there.";
+	npctalk "Mingmin: ...Sorry to bother you guys, but I think something's over there.", .@mingmin$;
+	next;
+	cutin "roel01",2;
+	mes "[Roel]";
+	mes "Perhaps it's monsters. Do you want me to go check?";
+	npctalk "Roel: Perhaps it's monsters. Do you want me to go check?", .@roel$;
+	next;
+	cutin "lunain04",0;
+	mes "[Runane]";
+	mes "You stay here, kiddo. I'll go.";
+	npctalk "Runane: You stay here, kiddo. I'll go.", .@runane$;
+	next;
+	cutin "igu05",2;
+	mes "[Aigu]";
+	mes "Wait, we're not finished here!";
+	npctalk "Aigu: Wait, we're not finished here!", .@aigu$;
+	next;
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "Oh, both of them left.";
+	npctalk "Lagi: Oh, both of them left.", .@lagi$;
+	next;
+	disablenpc .@aigu$;
+	disablenpc .@runane$;
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "Newoz, you're like a magnet for crazy.";
+	npctalk "Roter: Newoz, you're like a magnet for crazy.", .@roter$;
+	next;
+	cutin "gelca02",0;
+	mes "[Gelka]";
+	mes "I can see what has made you become so irritable, Master.";
+	npctalk "Gelka: I can see what has made you become so irritable, Master.", .@gelka$;
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "He's born irritable.";
+	npctalk "Mingmin: He's born irritable.", .@mingmin$;
+	next;
+	cutin "arang01",0;
+	mes "[Arang]";
+	mes "Agreed. He's violent, dirty...";
+	npctalk "Arang: Agreed. He's violent, dirty...", .@arang$;
+	next;
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "Oh, shut it, both of you!";
+	npctalk "Roter: Oh, shut it, both of you!", .@roter$;
+	next;
+	cutin "nines03",0;
+	mes "[Newoz]";
+	mes "That reminds me, when Rot was younger...";
+	npctalk "Newoz: That reminds me, when Rot was younger...";
+	next;
+	cutin "gelca04",0;
+	mes "[Gelka]";
+	mes "Rot? Is that your pet name, Master? Are you two friends?";
+	npctalk "Gelka: Rot? Is that your pet name, Master? Are you two friends?", .@gelka$;
+	next;
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "That does it! I'm leaving!";
+	npctalk "Roter: That does it! I'm leaving!", .@roter$;
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "That Crack thing, or the entrance as you might call it, has vanished. If you really want to leave, then follow Aigu.";
+	npctalk "Mingmin: That Crack thing, or the entrance as you might call it, has vanished. If you really want to leave, then follow Aigu.", .@mingmin$;
+	next;
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "Stop pretending you care about me! I can take care of myself!";
+	npctalk "Roter: Stop pretending you care about me! I can take care of myself!", .@roter$;
+	next;
+	cutin "gelca04",0;
+	mes "[Gelka]";
+	mes "Master, come with me!";
+	npctalk "Gelka: Master, come with me!", .@gelka$;
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Oh, we've got new members, huh? Great, I have a few mushrooms that I've wanted to sample...";
+	npctalk "Mingmin: Oh, we've got new members, huh? Great, I have a few mushrooms that I've wanted to sample...", .@mingmin$;
+	next;
+	disablenpc .@roter$;
+	disablenpc .@gelka$;
+	cutin "ragi02",2;
+	mes "[Lagi]";
+	mes "Roel, I think we should move too.";
+	npctalk "Lagi: Roel, I think we should move too.", .@lagi$;
+	next;
+	cutin "roel01",2;
+	mes "[Roel]";
+	mes "Let's go.";
+	npctalk "Roel: Let's go.", .@roel$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Arang, let's go. It's time for an adventure!";
+	npctalk "Newoz: Arang, let's go. It's time for an adventure!";
+	next;
+	disablenpc .@lagi$;
+	disablenpc .@roel$;
+	cutin "arang02",0;
+	mes "[Arang]";
+	mes "All righty!";
+	npctalk "Arang: All righty!", .@arang$;
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "I hope there are lots of things to study.";
+	npctalk "Mingmin: I hope there are lots of things to study.", .@mingmin$;
+	next;
+	cutin "",255;
+	disablenpc instance_npcname("Newoz#01");
+	mes "[" + strcharinfo(0) + "]";
+	mes "...";
+	next;
+	disablenpc .@arang$;
+	disablenpc .@mingmin$;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "...";
+	npctalk "Melody-Jack: ...", .@melody$;
+	next;
+	mes "[" + strcharinfo(0) + "]";
+	mes "...";
+	next;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "...";
+	npctalk "Melody-Jack: ...", .@melody$;
+	next;
+	mes "[Melody-Jack]";
+	mes "Let's move before they forget about us.";
+	npctalk "Melody-Jack: Let's move before they forget about us.", .@melody$;
+	close3;
+}
+
+1@jtb,34,22,4	script	Roel#01	4_M_ROEL,{
+	cutin "roel01",0;
+	mes "[Roel]";
+	mes "I'm Roel, new guildsman. Nice to meet you.";
+	close3;
+}
+
+1@jtb,28,21,5	script	Melody-Jack#01	CLEAR_NPC,{
+	mes "[Melody-Jack]";
+	mes "Stop bothering me. Can't you see I'm hiding?!";
+	close;
+}
+
+1@jtb,31,24,4	script	Arang#01	4_F_TAEKWON,{
+	cutin "arang01",2;
+	mes "[Arang]";
+	mes "Heya!";
+	close3;
+}
+
+1@jtb,33,26,4	script	Lagi#01	4_M_RAGI,{
+	cutin "ragi01",2;
+	mes "[Lagi]";
+	mes "I've followed Aigu all the way here.";
+	close3;
+}
+
+1@jtb,31,28,4	script	Aigu#01	4_F_IU,{
+	cutin "igu04",2;
+	mes "[Aigu]";
+	mes "You look new around here. Nice to meet ya!";
+	close3;
+}
+
+1@jtb,25,24,5	script	Mingmin#01	4_F_GENETIC,{
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "He's bad news. Trouble follows him wherever he goes.";
+	close3;
+}
+
+1@jtb,23,22,5	script	Runane#01	4_F_RUNAIN,{
+	mes "[Runane]";
+	mes "Oh, is he the famous Newoz?";
+	close;
+}
+
+1@jtb,23,26,5	script	Gelka#01	4_F_GELKA,{
+	cutin "gelca01",0;
+	mes "[Gelka]";
+	mes "This place gives me the heebie-jeebies.";
+	close3;
+}
+
+1@jtb,25,28,5	script	Roter#01	4_M_ROTERT,{
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "...We finally meet, Newoz!";
+	close3;
+}
+
+
+// Room 2
+1@jtb,123,45,4	script	Runane#02	4_F_RUNAIN,{
+	if ('room != 2 || is_party_leader() == false) {
+		cutin "lunain01",2;
+		mes "[Runane]";
+		mes "Please, let there be no more surprises.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 2 && is_party_leader() == true) {
+			if ('additionnal_option) {
+				disablenpc instance_npcname("Runane#02");
+				disablenpc instance_npcname("Aigu#02");
+			}
+			donpcevent 'jitterbug_main$ + "::OnNextIs3";
+		}
+		end;
+	}
+	.@shaloshi$ = instance_npcname("???#02");
+	.@aigu$ = instance_npcname("Aigu#02");
+
+	cutin "lunain01",2;
+	mes "[Runane]";
+	mes "Um, I have a feeling something might spring out of nowhere to attack us.";
+	npctalk "Runane: Um, I have a feeling something might spring out of nowhere to attack us.";
+	next;
+	if ('room == 2 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs3";
+	cutin "shaloshi01",0;
+	mes "[???]";
+	mes "What is it?";
+	npctalk "???: What is it?", .@shaloshi$;
+	next;
+	enablenpc .@shaloshi$;
+	cutin "lunain04",2;
+	mes "[Runane]";
+	mes "*Shriek*";
+	npctalk "Runane: *Shriek*";
+	emotion ET_HUK;
+	next;
+	cutin "igu03",0;
+	mes "[Aigu]";
+	mes "MONSTER-! ...Um, it's just a woman.";
+	npctalk "Aigu: MONSTER-! ...Um, it's just a woman.", .@aigu$;
+	emotion ET_HUK, getnpcid(0,.@aigu$);
+	next;
+	cutin "lunain04",0;
+	mes "[Runane]";
+	mes "There's something! SOMETHING!";
+	npctalk "Runane: There's something! SOMETHING!";
+	next;
+	cutin "igu01",0;
+	mes "[Aigu]";
+	mes "Calm down. It's just a woman.";
+	npctalk "Aigu: Calm down. It's just a woman.", .@aigu$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[???]";
+	mes "Voice of a woman...";
+	npctalk "???: Voice of a man...", .@shaloshi$;
+	emotion ET_QUESTION, getnpcid(0,.@shaloshi$);
+	next;
+	cutin "igu01",0;
+	mes "[Aigu]";
+	mes "How did we get in, you asked?";
+	npctalk "Aigu: How did we get in, you asked?", .@aigu$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[???]";
+	mes "No idea. How did you get in?";
+	npctalk "???: No idea. How did you get in?", .@shaloshi$;
+	next;
+	cutin "lunain03",2;
+	mes "[Runane]";
+	mes "We got lost and now we're in a rift in spacetime. How did this happen?";
+	npctalk "Runane: We got lost and now we're in a rift in spacetime. How did this happen?";
+	next;
+	cutin "igu04",0;
+	mes "[Aigu]";
+	mes "We didn't have to be here if it weren't for someone.";
+	npctalk "Aigu: We didn't have to be here if it weren't for someone.", .@aigu$;
+	emotion ET_PROFUSELY_SWAT, getnpcid(0,.@aigu$);
+	next;
+	cutin "shaloshi01",0;
+	mes "[???]";
+	mes "The one who sings.";
+	npctalk "???: The one who sings.", .@shaloshi$;
+	next;
+	cutin "lunain01",2;
+	mes "[Runane]";
+	mes "Do you know Newoz? Let's take him out of here.";
+	npctalk "Runane: Do you know Newoz? Let's take him out of here.";
+	next;
+	cutin "igu03",0;
+	mes "[Aigu]";
+	mes "Okay. Take my hand.";
+	npctalk "Aigu: Okay. Take my hand.", .@aigu$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[???]";
+	mes "Your hand is ... warm.";
+	npctalk "???: Your hand is... warm.", .@shaloshi$;
+	next;
+	cutin "igu02",0;
+	mes "[Aigu]";
+	mes "It's calloused because I dance. Heh heh.";
+	npctalk "Aigu: It's calloused because I dance. Heh heh.", .@aigu$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[???]";
+	mes "Dance...";
+	npctalk "???: Dance...", .@shaloshi$;
+	next;
+	cutin "lunain01",2;
+	mes "[Runane]";
+	mes "Where's everyone? Have they gone somewhere else? Let's go in that direction.";
+	npctalk "Runane: Where's everyone? Have they gone somewhere else? Let's go in that direction.";
+	close2;
+	cutin "",255;
+	disablenpc instance_npcname("Runane#02");
+	disablenpc .@aigu$;
+	disablenpc .@shaloshi$;
+	end;
+}
+
+1@jtb,121,47,4	script	???#02	4_F_SHALOSH,{ end; }
+
+1@jtb,118,45,5	script	Aigu#02	4_F_IU,{
+	cutin "igu03",0;
+	mes "[Aigu]";
+	mes "A place full of mysteries.";
+	close3;
+}
+
+
+// Room 3
+1@jtb,198,31,5	script	Roter#03	4_M_ROTERT,{
+	if ('room != 3 || is_party_leader() == false) {
+		cutin "rote01",0;
+		mes "[Roter]";
+		mes "These monsters are boring.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		.@gelka$ = instance_npcname("Gelka#03");
+		cutin "gelca01",2;
+		mes "[Gelka]";
+		mes "I'm detecting electromagnetic waves up ahead. At least Grade E monsters.";
+		npctalk "Gelka: I'm detecting electromagnetic waves up ahead. At least Grade E monsters.", .@gelka$;
+		next;
+		emotion ET_SWEAT;
+		cutin "rote01",0;
+		mes "[Roter]";
+		mes "Hey, what have you been reading these days?";
+		npctalk "Roter: Hey, what have you been reading these days?";
+		next;
+		cutin "gelca03",2;
+		mes "[Gelka]";
+		mes "Heh, Sci-Fi. There's a mechanical tool that works...";
+		npctalk "Gelka: Heh, Sci-Fi. There's a mechanical tool that works...", .@gelka$;
+		next;
+		emotion ET_OHNO;
+		cutin "rote01",0;
+		mes "[Roter]";
+		mes "Stop talking and get ready to practice your special skills.";
+		npctalk "Roter: Stop talking and get ready to practice your special skills.";
+		next;
+		cutin "gelca03",2;
+		mes "[Gelka]";
+		mes "Ooh, this will be like reenacting a scene from the book, where monsters are rampaging.";
+		npctalk "Gelka: Ooh, this will be like reenacting a scene from the book, where monsters are rampaging.", .@gelka$;
+		next;
+		cutin "rote01",0;
+		mes "[Roter]";
+		mes "Gelka, Ultra Special Skill No. 8: Wild Dance!";
+		npctalk "Roter: Gelka, Ultra Special Skill No. 8: Wild Dance!";
+		next;
+		emotion ET_SURPRISE, getnpcid(0,.@gelka$);
+		cutin "gelca01",2;
+		mes "[Gelka]";
+		mes "!!";
+		npctalk "Gelka: !!", .@gelka$;
+		next;
+		mes "[Gelka]";
+		mes "Here we go!";
+		npctalk "Gelka: Here we go!", .@gelka$;
+		next;
+		cutin "rote01",0;
+		mes "[Roter]";
+		mes "Delicate Flashlight, Lumiere Dupleix!";
+		npctalk "Roter: Delicate Flashlight, Lumiere Dupleix!";
+		specialeffect EF_LEXAETERNA;
+		specialeffect EF_POTION_BERSERK;
+		specialeffect EF_SIGNUM;
+		next;
+		cutin "gelca01",2;
+		mes "[Gelka]";
+		mes "Ruinous Twelve Heaven's Nets!";
+		npctalk "Gelka: Ruinous Twelve Heaven's Nets!";
+		specialeffect EF_HITLINE,AREA, .@gelka$;
+		specialeffect EF_BASH3D2,AREA, .@gelka$;
+		specialeffect EF_GUMGANG,AREA, .@gelka$;
+		next;
+		emotion ET_SPARK;
+		emotion ET_SPARK, getnpcid(0,.@gelka$);
+		mes "[Gelka/Roter]";
+		mes "CROSS!!!";
+		npctalk "Roter: CROSS!!!";
+		npctalk "Gelka: CROSS!!!", .@gelka$;
+		specialeffect EF_GRANDCROSS;
+		specialeffect EF_GRANDCROSS,AREA, .@gelka$;
+		next;
+		cutin "rote01",0;
+		mes "[Gelka/Roter]";
+		mes "Scatter--Thousand Flashlights!";
+		npctalk "Gelka: Scatter--Thousand Flashlights!", .@gelka$;
+		npctalk "Roter: Scatter--Thousand Flashlights!";
+		specialeffect EF_LEXAETERNA;
+		specialeffect EF_LEXAETERNA,AREA, .@gelka$;
+		sleep2 300;
+		specialeffect EF_LORD;
+		specialeffect EF_LORD,AREA, .@gelka$;
+		specialeffect EF_LORD;
+		specialeffect EF_LORD,AREA, .@gelka$;
+		sleep2 300;
+		specialeffect EF_SUI_EXPLOSION;
+		specialeffect EF_SUI_EXPLOSION,AREA, .@gelka$;
+		specialeffect EF_BEGINASURA;
+		specialeffect EF_BEGINASURA,AREA, .@gelka$;
+		next;
+		cutin "gelca01",2;
+		mes "[Gelka]";
+		mes "...Whew.";
+		npctalk "Gelka: ...Whew.", .@gelka$;
+		next;
+		cutin "rote01",0;
+		mes "[Roter]";
+		mes "Hm, not good enough, Gelka. Don't let the guild business distract you from practice.";
+		npctalk "Roter: Hm, not good enough, Gelka. Don't let the guild business distract you from practice.";
+		next;
+		cutin "gelca03",2;
+		mes "[Gelka]";
+		mes "Yes, Master!";
+		npctalk "Gelka: Yes, Master!", .@gelka$;
+		next;
+		cutin "rote01",0;
+		mes "[Roter]";
+		mes "Where are the others? This is definitely not a run-of-the-mill cave.";
+		npctalk "Roter: Where are the others? This is definitely not a run-of-the-mill cave.";
+	}
+	if ('room == 3 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs4";
+	close3;
+}
+
+1@jtb,205,31,4	script	Gelka#03	4_F_GELKA,{
+	cutin "gelca04",2;
+	mes "[Gelka]";
+	mes "Something might jump us!";
+	close3;
+}
+
+
+// Room 4
+1@jtb,292,22,4	script	???#04	4_F_SHALOSH,{
+	if ('room != 4 || is_party_leader() == false) {
+		cutin "shaloshi01",2;
+		mes "[???]";
+		mes "...";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		cutin "shaloshi01",2;
+		mes "[???]";
+		mes "...";
+		npctalk "???: ......";
+		next;
+		select("Did you get lost by yourself again?");
+		mes "[???]";
+		mes "I'm not alone.";
+		npctalk "???: I'm not alone.";
+		next;
+		mes "[???]";
+		mes "Aigu and Runane are good.";
+		npctalk "???: Aigu and Runane are good.";
+		next;
+		mes "[???]";
+		mes "Ask many questions.";
+		npctalk "???: Ask many questions.";
+		next;
+		mes "[???]";
+		mes "Can't answer.";
+		npctalk "???: Can't answer.";
+		next;
+		mes "[???]";
+		mes "Can't remember a thing.";
+		npctalk "???: Can't remember a thing.";
+		next;
+		mes "[???]";
+		mes "But I'm not alone.";
+		npctalk "???: But I'm not alone.";
+		next;
+		if (select( "Leave him.", "It's too dangerous, so take him with you." ) == 1) {
+			mes "[???]";
+			mes "I'm okay. Not the first time.";
+			npctalk "???: I'm okay. Not the first time.";
+		}
+		else {
+			mes "[???]";
+			mes "Kind.";
+			npctalk "???: Kind.";
+		}
+		cutin "shaloshi03",2;
+		next;
+		mes "[???]";
+		mes "...";
+		npctalk "???: ...";
+	}
+	if ('room == 4 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs6";
+	close3;
+}
+
+// Room 5 (final room)
+
+// Room 6
+1@jtb,20,108,5	script	Newoz#06	4_M_NEWOZ,{
+	if ('room != 6 || is_party_leader() == false) {
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "I'll sing again later.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		.@aigu$ = instance_npcname("Aigu#06");
+		.@arang$ = instance_npcname("Arang#06");
+		.@shaloshi$ = instance_npcname("Shaloshi#06");
+
+		cutin "igu05",2;
+		mes "[Aigu]";
+		mes "Newoz! Where did you go this time?";
+		npctalk "Aigu: Newoz! Where did you go this time?", .@aigu$;
+		next;
+		cutin "nines04",0;
+		mes "[Newoz]";
+		mes "Sorry.";
+		mes "This place is like a maze. There are so many offshoots and clearings that I've lost count.";
+		npctalk "Newoz: Sorry. This place is like a maze. There are so many offshoots and clearings that I've lost count.";
+		next;
+		cutin "arang01",2;
+		mes "[Arang]";
+		mes "*Snort* You said the same thing about the Prontera Culvert.";
+		npctalk "Arang: *Snort* You said the same thing about the Prontera Culvert.", .@arang$;
+		next;
+		cutin "igu04",2;
+		mes "[Aigu]";
+		mes "What are you talking about? Why can't you just follow us? Where's Runane? I saw her next to me a moment ago.";
+		npctalk "Aigu: What are you talking about? Why can't you just follow us? Where's Runane? I saw her next to me a moment ago.", .@aigu$;
+		next;
+		cutin "shaloshi01",2;
+		mes "[???]";
+		mes "Man with the singing voice.";
+		npctalk "???: Man with the singing voice.", .@shaloshi$;
+		next;
+		cutin "nines02",0;
+		mes "[Newoz]";
+		mes "Oh, hello. May I ask who you are, little lady?";
+		npctalk "Newoz: Oh, hello. May I ask who you are, little lady?";
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "I'm Shaloshi. Sing for me.";
+		npctalk "Shaloshi: I'm Shaloshi. Sing for me.", .@shaloshi$;
+		next;
+		cutin "nines03",0;
+		mes "[Newoz]";
+		mes "Hah hah, you're cute. I'll sing for you later.";
+		npctalk "Newoz: Hah hah, you're cute. I'll sing for you later.";
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "You promised. You're kind.";
+		npctalk "Shaloshi: You promised. You're kind.", .@shaloshi$;
+		next;
+		cutin "igu03",2;
+		mes "[Aigu]";
+		mes "Monsters started appearing, and their number is growing quickly.";
+		npctalk "Aigu: Monsters started appearing, and their number is growing quickly.", .@aigu$;
+		next;
+		cutin "arang02",2;
+		mes "[Arang]";
+		mes "You'll be okay, Aigu, so long as you stick with us... Um, where's everyone?";
+		npctalk "Arang: You'll be okay, Aigu, so long as you stick with us... Um, where's everyone?", .@arang$;
+		next;
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "Hah hah, don't worry, little ladies. I'll protect you.";
+		npctalk "Newoz: Hah hah, don't worry, little ladies. I'll protect you.";
+		next;
+		cutin "arang03",2;
+		mes "[Arang]";
+		mes "Newoz, I love you!";
+		npctalk "Arang: Newoz, I love you!", .@arang$;
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "You protect me. You're kind.";
+		npctalk "Shaloshi: You protect me. You're kind.", .@shaloshi$;
+		next;
+		cutin "igu05",2;
+		mes "[Aigu]";
+		mes "You'd run before everyone else in here. Well, we can't stay here. Let's move on.";
+		npctalk "Aigu: You'd run before everyone else in here. Well, we can't stay here. Let's move on.", .@aigu$;
+	}
+	if ('room == 6 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs7";
+	close3;
+}
+
+1@jtb,25,110,4	script	Aigu#06	4_F_IU,{
+	cutin "igu01",0;
+	mes "[Aigu]";
+	mes "Monsters started appearing, and their number is growing quickly.";
+	close3;
+}
+
+1@jtb,27,108,4	script	Shaloshi#06	4_F_SHALOSH,{
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "...";
+	close3;
+}
+
+1@jtb,25,104,4	script	Arang#06	4_F_TAEKWON,{
+	cutin "arang03",0;
+	mes "[Arang]";
+	mes "I'm not scared!";
+	close3;
+}
+
+
+// Room 7
+1@jtb,111,115,5	script	Roel#07	4_M_ROEL,{
+	if ('room != 7 || is_party_leader() == false) {
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "What's wrong with me? My heart won't stop pounding.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		.@aigu$ = instance_npcname("Aigu#07");
+		.@runane$ = instance_npcname("Runane#07");
+
+		cutin "lunain01",2;
+		mes "[Runane]";
+		mes "The fog cleared up.";
+		npctalk "Runane: The fog cleared up.", .@runane$;
+		next;
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "But it stayed long enough for us to lose each other.";
+		npctalk "Roel: But it stayed long enough for us to lose each other.";
+		next;
+		cutin "igu05",2;
+		mes "[Aigu]";
+		mes "One moment, I had Shaloshi's hand in my hand, and the next, she's gone.";
+		npctalk "Aigu: One moment, I had Shaloshi's hand in my hand, and the next, she's gone.", .@aigu$;
+		next;
+		cutin "lunain01",2;
+		mes "[Runane]";
+		mes "Her name is Shaloshi? I asked her several times, and she didn't tell me.";
+		npctalk "Runane: Her name is Shaloshi? I asked her several times, and she didn't tell me.", .@runane$;
+		next;
+		cutin "igu01",2;
+		mes "[Aigu]";
+		mes "That's strange. She told Newoz straight from the start.";
+		npctalk "Aigu: That's strange. She told Newoz straight from the start.", .@aigu$;
+		next;
+		cutin "lunain04",2;
+		mes "[Runane]";
+		mes "Hmpf, I hate girls. I get the feeling we'll be seeing even more monsters.";
+		npctalk "Runane: Hmpf, I hate girls. I get the feeling we'll be seeing even more monsters.", .@runane$;
+		next;
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "Worry not--I'll protect you!";
+		npctalk "Roel: Worry not--I'll protect you!";
+		next;
+		cutin "igu04",2;
+		mes "[Aigu]";
+		mes "You'd better be more reliable than someone I know.";
+		npctalk "Aigu: You'd better be more reliable than someone I know.", .@aigu$;
+		next;
+		cutin "lunain03",2;
+		mes "[Runane]";
+		mes "Don't put too much faith in this kid. I'd better go look for Newoz.";
+		npctalk "Runane: Don't put too much faith in this kid. I'd better go look for Newoz.", .@runane$;
+		next;
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "...";
+		npctalk "Roel: ...";
+		next;
+		cutin "roel03",0;
+		mes "[Roel]";
+		mes "(She's just my type!)";
+		npctalk "Roel: (She's just my type!)";
+	}
+	if ('room == 7 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs8";
+	close3;
+}
+
+1@jtb,116,117,4	script	Runane#07	4_F_RUNAIN,{
+	cutin "lunain01",2;
+	mes "[Runane]";
+	mes "Where do you think Newoz is this time?";
+	close3;
+}
+
+1@jtb,115,113,4	script	Aigu#07	4_F_IU,{
+	cutin "igu01",0;
+	mes "[Aigu]";
+	mes "I feel great--this is my first adventure in a long time since I was charged with caring for other adventurers. Plus I've met my hero Newoz!";
+	close3;
+}
+
+
+// Room 8
+1@jtb,206,107,5	script	Mingmin#08	4_F_GENETIC,{
+	if ('room != 8 || is_party_leader() == false) {
+		mes "[Mingmin]";
+		mes "Everything about her screams suspicious.";
+		close;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 8 && is_party_leader() == true) {
+			if ('additionnal_option) {
+				disablenpc instance_npcname("Newoz#08");
+				disablenpc instance_npcname("Shaloshi#08");
+				disablenpc instance_npcname("Mingmin#08");
+			}
+			donpcevent 'jitterbug_main$ + "::OnNextIs9";
+		}
+		end;
+	}
+	.@shaloshi$ = instance_npcname("Shaloshi#08");
+	.@newoz$ = instance_npcname("Newoz#08");
+
+	cutin "min02",2;
+	mes "[Mingmin]";
+	mes "Newoz!";
+	npctalk "Mingmin: Newoz!";
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Yeah, what's up?";
+	npctalk "Newoz: Yeah, what's up?", .@newoz$;
+	next;
+	if ('room == 8 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs9";
+	cutin "min03",2;
+	emotion ET_HUK;
+	mes "[Mingmin]";
+	mes "Do you really have to ask? Who's that girl? Is she yours?";
+	npctalk "Mingmin: Do you really have to ask? Who's that girl? Is she yours?";
+	next;
+	cutin "nines04",0;
+	emotion ET_HUK, getnpcid(0,.@newoz$);
+	mes "[Newoz]";
+	mes "W-whazza...?! Don't be ridiculous. I just found her now.";
+	npctalk "Newoz: W-whazza...?! Don't be ridiculous. I just found her now.", .@newoz$;
+	next;
+	cutin "min02",2;
+	mes "[Mingmin]";
+	mes "A little girl in this strange place, by herself? Hm, doesn't it sound strange to you?";
+	npctalk "Mingmin: A little girl in this strange place, by herself? Hm, doesn't it sound strange to you?";
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "You're strange.";
+	npctalk "Shaloshi: You're strange.", .@shaloshi$;
+	next;
+	emotion ET_STARE;
+	cutin "min01",2;
+	mes "[Mingmin]";
+	mes "No, I'm not! You don't want me to get angry at you, girl.";
+	npctalk "Mingmin: No, I'm not! You don't want me to get angry at you, girl.";
+	emotion ET_FRET;
+	next;
+	emotion ET_THINK, getnpcid(0,.@shaloshi$);
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "Here they come...";
+	npctalk "Shaloshi: Here they come...", .@shaloshi$;
+	next;
+	cutin "nines04",0;
+	mes "[Newoz]";
+	mes "These monsters don't stop coming. But where are all the big, rare, beautiful ones?";
+	npctalk "Newoz: These monsters don't stop coming. But where are all the big, rare, beautiful ones?", .@newoz$;
+	next;
+	cutin "min02",2;
+	mes "[Mingmin]";
+	mes "I'll have to study you later, girl.";
+	npctalk "Mingmin: I'll have to study you later, girl.";
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "...";
+	npctalk "Shaloshi: ...", .@shaloshi$;
+	close2;
+	cutin "",255;
+	disablenpc .@newoz$;
+	disablenpc .@shaloshi$;
+	disablenpc instance_npcname("Mingmin#08");
+	end;
+}
+
+1@jtb,206,114,5	script	Shaloshi#08	4_F_SHALOSH,{
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "Newoz's hand... hot.";
+	close3;
+}
+
+1@jtb,203,112,5	script	Newoz#08	4_M_NEWOZ,{
+	cutin "nines03",0;
+	mes "[Newoz]";
+	mes "I wonder what might wait for us at the end of this passage. The anticipation is killing me!";
+	close3;
+}
+
+
+// Room 9 (menu affects the boss encounter in the next room)
+1@jtb,285,114,5	script	Newoz#09	4_M_NEWOZ,{
+	if ('room != 9 || is_party_leader() == false) {
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "I always love singing.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 9 && is_party_leader() == true) {
+			donpcevent 'jitterbug_main$ + "::OnNextIs10";
+			if (jitterbug_options & 1)
+				areamonster 'map_jtb$,351,131,389,96, "--ja--", 3108,1;	// no label
+			disablenpc instance_npcname("Newoz#09");
+			disablenpc instance_npcname("Shaloshi#09");
+			disablenpc instance_npcname("Lagi#09");
+		}
+		close3;
+	}
+	.@shaloshi$ = instance_npcname("Shaloshi#09");
+	.@lagi$ = instance_npcname("Lagi#09");
+
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "I keep losing the others. They were right in front of me.";
+	npctalk "Newoz: I keep losing the others. They were right in front of me.";
+	next;
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "We've met again.";
+	npctalk "Lagi: We've met again.", .@lagi$;
+	next;
+	cutin "nines03",0;
+	mes "[Newoz]";
+	mes "You have good taste. This just came to my mind. Listen.";
+	npctalk "Newoz: You have good taste. This just came to my mind. Listen.";
+	next;
+	if ('room == 9 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs10";
+	cutin "nines02",0;
+	emotion ET_DELIGHT;
+	mes "[Newoz]";
+	mes "The seasons are changing once again~ yet I haven't had a chance to dye my nails with garden balsam~";
+	npctalk "Newoz: The seasons are changing once again~ yet I haven't had a chance to dye my nails with garden balsam~";
+	next;
+	cutin "ragi02",0;
+	emotion ET_DELIGHT, getnpcid(0,.@lagi$);
+	mes "[Lagi]";
+	mes "Waiting for snow~";
+	npctalk "Lagi: Waiting for snow~", .@lagi$;
+	next;
+	cutin "nines01",0;
+	emotion ET_BEST;
+	mes "[Newoz]";
+	mes "You're good. You'll make great a Gypsy and Minstrel.";
+	npctalk "Newoz: You're good. You'll make great a Gypsy and Minstrel.";
+	next;
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "I want to stay as a Bard for a while.";
+	npctalk "Lagi: I want to stay as a Bard for a while.", .@lagi$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "I guess jobs don't matter so long as you can sing and play, huh?";
+	npctalk "Newoz: I guess jobs don't matter so long as you can sing and play, huh?";
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "Love your song.";
+	npctalk "Shaloshi: Love your song.", .@shaloshi$;
+	next;
+	cutin "nines02",0;
+	mes "[Newoz]";
+	mes "Shaloshi, do you have a favorite song?";
+	npctalk "Newoz: Shaloshi, do you have a favorite song?";
+	next;
+	cutin "shaloshi01",0;
+	emotion ET_DELIGHT, getnpcid(0,.@shaloshi$);
+	mes "[Shaloshi]";
+	mes "Runane sings even whistles good, too.";
+	npctalk "Shaloshi: Runane sings even whistles good, too.", .@shaloshi$;
+	next;
+	cutin "",255;
+	mes "- Shaloshi puckers her lips to whistle, but fails. -";
+	next;
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "Um, are you trying to whistle?";
+	npctalk "Lagi: Um, are you trying to whistle?", .@lagi$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Hah hah, I'll teach you how to do it later, Shaloshi.";
+	npctalk "Newoz: Hah hah, I'll teach you how to do it later, Shaloshi.";
+	next;
+	mes "[Newoz]";
+	mes "" + strcharinfo(0) + ", do you have a favorite song?";
+	npctalk "Newoz: " + strcharinfo(0) + ", do you have a favorite song?";
+	next;
+	switch( select("Aigu's debut song- Lost Poring", "Aigu's single- Only I Didn't Know about the Card Album", "Newoz's Red Potion (feat. Muka)", "Laggi's Self-composed song- Accidental Moonlight" ) ) {
+	case 1:
+		jitterbug_options &= ~1;
+		unittalk getcharid(3), "" + strcharinfo(0) + " : I like Aigu's debut song, Lost Poring.";
+		mes "[Newoz]";
+		mes "You know her debut song. You're a fan of her, huh?";
+		npctalk "Newoz: You know her debut song. You're a fan of her, huh?";
+		break;
+	case 2:
+		jitterbug_options &= ~1;
+		unittalk getcharid(3), "" + strcharinfo(0) + " : I like Aigu's single, Only I Didn't Know about the Card Album.";
+		mes "[Newoz]";
+		mes "Aigu is the Rune-Midgart's hottest singer at this moment!";
+		npctalk "Newoz: Aigu is the Rune-Midgart's hottest singer at this moment!";
+		break;
+	case 3:
+		jitterbug_options |= 1;
+		unittalk getcharid(3), "" + strcharinfo(0) + " : I like your Red Potion (feat. Muka).";
+		mes "[Newoz]";
+		mes "Hah hah, this is embarassing, but thank you.";
+		npctalk "Newoz: Hah hah, this is embarassing, but thank you.";
+		break;
+	case 4:
+		jitterbug_options &= ~1;
+		unittalk getcharid(3), "" + strcharinfo(0) + " : I like your Laggi's self-composed song, Accidental Moonlight.";
+		mes "[Lagi]";
+		mes "But how...?! It's not released yet.";
+		npctalk "Lagi: But how...?! It's not released yet.";
+		break;
+	}
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Hm, to each his own.";
+	npctalk "Newoz: Hm, to each his own.";
+	next;
+	cutin "ragi01",0;
+	emotion ET_SURPRISE, getnpcid(0,.@lagi$);
+	mes "[Lagi]";
+	mes "Something else is showing up.";
+	npctalk "Lagi: Something else is showing up.", .@lagi$;
+	next;
+	cutin "nines04",0;
+	mes "[Newoz]";
+	mes "Ah, I'm getting hungry. The monsters can screw themselves. Shaloshi, let's go!";
+	npctalk "Newoz: Ah, I'm getting hungry. The monsters can screw themselves. Shaloshi, let's go!";
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "Okay.";
+	npctalk "Shaloshi: Okay.", .@shaloshi$;
+	next;
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "Hey, come with me!";
+	npctalk "Lagi: Hey, come with me!", .@lagi$;
+	sleep2 1000;
+	disablenpc instance_npcname("Newoz#09");
+	disablenpc .@shaloshi$;
+	disablenpc .@lagi$;
+	close3;
+}
+
+1@jtb,290,114,4	script	Lagi#09	4_M_RAGI,{
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "I'm not experienced in adventuring, but it's quite fun.";
+	close3;
+}
+
+1@jtb,286,117,5	script	Shaloshi#09	4_F_SHALOSH,{
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "(Trying to whistle) I can't.";
+	close3;
+}
+
+// Room 10
+1@jtb,375,117,4	script	Newoz#10	4_M_NEWOZ,{
+	if ('room != 10 || is_party_leader() == false) {
+		cutin "nines01",2;
+		mes "[Newoz]";
+		mes "These guys are different. They seem to understand music... or maybe not.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		.@runane$ = instance_npcname("Runane#10");
+		.@shaloshi$ = instance_npcname("Shaloshi#10");
+		.@roel$ = instance_npcname("Roel#10");
+
+		emotion ET_DELIGHT;
+		cutin "nines01",2;
+		mes "[Newoz]";
+		mes "Did you take care of them already? I wanted to take part in it!";
+		npctalk "Newoz: Did you take care of them already? I wanted to take part in it!";
+		next;
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "They look cute, but they're ferocious.";
+		npctalk "Roel: They look cute, but they're ferocious.", .@roel$;
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "Small friends follow us. Not cute.";
+		npctalk "Shaloshi: Small friends follow us. Not cute.", .@shaloshi$;
+		next;
+		cutin "lunain01",0;
+		mes "[Runane]";
+		mes "They're monsters, not your friends. Be careful.";
+		npctalk "Runane: They're monsters, not your friends. Be careful.", .@runane$;
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "Monsters...";
+		npctalk "Shaloshi: Monsters...", .@shaloshi$;
+		next;
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "Could she have lost her memory? It seems she doesn't understand danger, it seems.";
+		npctalk "Roel: Could she have lost her memory? It seems she doesn't understand danger, it seems.", .@roel$;
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "Danger, no.";
+		npctalk "Shaloshi: Danger, no.", .@shaloshi$;
+		next;
+		cutin "lunain02",0;
+		mes "[Runane]";
+		mes "I think she has.";
+		npctalk "Runane: I think she has.", .@runane$;
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "...";
+		npctalk "Shaloshi: ...", .@shaloshi$;
+	}
+	if ('room == 10 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs11";
+	close3;
+}
+
+1@jtb,374,110,4	script	Shaloshi#10	4_F_SHALOSH,{
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "It's not dangerous. Don't worry.";
+	close3;
+}
+
+1@jtb,369,117,5	script	Roel#10	4_M_ROEL,{
+	cutin "roel01",0;
+	mes "[Roel]";
+	mes "I've trained enough. I can be useful.";
+	close3;
+}
+
+1@jtb,368,111,5	script	Runane#10	4_F_RUNAIN,{
+	cutin "lunain01",0;
+	mes "[Runane]";
+	mes "Never let your guard down while exploring, or you can get hurt.";
+	close3;
+}
+
+
+// Room 11
+1@jtb,26,201,5	script	Runane#11	4_F_RUNAIN,{
+	if ('room != 11 || is_party_leader() == false) {
+		cutin "lunain04",0;
+		mes "[Runane]";
+		mes "Arang, why aren't you drinking it?";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 11 && 'additionnal_option && is_party_leader() == true)
+			disablenpc instance_npcname("Roel#11");
+	}
+	else {
+		.@roel$ = instance_npcname("Roel#11");
+		.@aigu$ = instance_npcname("Aigu#11");
+		.@arang$ = instance_npcname("Arang#11");
+		.@mingmin$ = instance_npcname("Mingmin#11");
+
+		cutin "lunain01",0;
+		emotion ET_DELIGHT;
+		mes "[Runane]";
+		mes "Push, push~";
+		npctalk "Runane: Push, push~";
+		next;
+		cutin "min01",0;
+		emotion ET_DELIGHT, getnpcid(0,.@mingmin$);
+		mes "[Mingmin]";
+		mes "Push, push~";
+		npctalk "Mingmin: Push, push~", .@mingmin$;
+		next;
+		cutin "igu02",0;
+		emotion ET_DELIGHT, getnpcid(0,.@aigu$);
+		mes "[Aigu]";
+		mes "How long do I have to shimmy my shoulders~";
+		npctalk "Aigu: How long do I have to shimmy my shoulders~", .@aigu$;
+		next;
+		cutin "lunain01",0;
+		mes "[Runane]";
+		mes "Pam, pam, pam~";
+		npctalk "Runane: Pam, pam, pam~";
+		next;
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "Chica, chica~";
+		npctalk "Mingmin: Chica, chica~", .@mingmin$;
+		next;
+		cutin "igu02",0;
+		mes "[Aigu]";
+		mes "Pam, pam, pam, pam~";
+		npctalk "Aigu: Pam, pam, pam, pam~", .@aigu$;
+		next;
+		cutin "lunain01",0;
+		mes "[Runane]";
+		mes "*Blow*";
+		npctalk "Runane: *Blow*";
+		next;
+		cutin "arang01",2;
+		mes "[Arang]";
+		mes "Ugh, I don't want to drink this!";
+		npctalk "Arang: Ugh, I don't want to drink this!", .@arang$;
+		next;
+		cutin "min03",0;
+		mes "[Mingmin]";
+		mes "Just trust me and drink it!";
+		npctalk "Mingmin: Just trust me and drink it!", .@mingmin$;
+		next;
+		cutin "roel01",2;
+		emotion ET_SURPRISE, getnpcid(0,.@roel$);
+		mes "[Roel]";
+		mes "What are you trying to feed this child? What's in this green bottle? ...No...";
+		npctalk "Roel: What are you trying to feed this child? What's in this green bottle? ...No...", .@roel$;
+		next;
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "Green Potion";
+		npctalk "Mingmin: Green Potion", .@mingmin$;
+		next;
+		cutin "roel01",2;
+		mes "[Roel]";
+		mes "Green Potion is such a bitter... Um, Green Potion you said?";
+		npctalk "Roel: Green Potion is such a bitter... Um, Green Potion you said?", .@roel$;
+		next;
+		cutin "igu03",0;
+		mes "[Aigu]";
+		mes "Green Potion!";
+		npctalk "Aigu: Green Potion!", .@aigu$;
+		next;
+		cutin "roel01",2;
+		mes "[Roel]";
+		mes "Green Potion?";
+		npctalk "Roel: Green Potion?", .@roel$;
+		next;
+		cutin "lunain04",0;
+		mes "[Runane]";
+		mes "I said Green Potion!";
+		npctalk "Runane: I said Green Potion!";
+		next;
+		cutin "roel01",2;
+		mes "[Roel]";
+		mes "But you're singing a strange song, and... Green Potion?";
+		npctalk "Roel: But you're singing a strange song, and... Green Potion?", .@roel$;
+		next;
+		cutin "igu03",0;
+		mes "[Aigu]";
+		mes "I had an almost expired Green Potion, so we decided to play Rock-paper-scissors and feed it to the loser.";
+		npctalk "Aigu: I had an almost expired Green Potion, so we decided to play Rock-paper-scissors and feed it to the loser.", .@aigu$;
+		next;
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "It doesn't do anything when you're not poisoned. We just didn't want to waste a good potion.";
+		npctalk "Mingmin: It doesn't do anything when you're not poisoned. We just didn't want to waste a good potion.", .@mingmin$;
+		next;
+		cutin "arang01",0;
+		mes "[Arang]";
+		mes "But it's awfully bitter.";
+		npctalk "Arang: But it's awfully bitter.", .@arang$;
+		next;
+		cutin "lunain04",0;
+		mes "[Runane]";
+		mes "Are you drinking it yet?";
+		npctalk "Runane: Are you drinking it yet?";
+		next;
+		cutin "igu02",0;
+		mes "[Aigu]";
+		mes "DRINK! DRINK!";
+		npctalk "Aigu: DRINK! DRINK!", .@aigu$;
+		next;
+		cutin "min01",0;
+		mes "[Mingmin]";
+		mes "DRINK! DRINK!";
+		npctalk "Mingmin: DRINK! DRINK!", .@mingmin$;
+		next;
+		cutin "arang02",2;
+		mes "[Arang]";
+		mes "Roel, can't you drink it for your sister?";
+		npctalk "Arang: Roel, can't you drink it for your sister?", .@arang$;
+		next;
+		cutin "roel01",2;
+		mes "[Roel]";
+		mes "Let me go look for possible threats.";
+		npctalk "Roel: Let me go look for possible threats.", .@roel$;
+		disablenpc instance_npcname("Roel#11");
+	}
+	if ('room == 11 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs12";
+	close3;
+}
+
+1@jtb,32,198,4	script	Roel#11	4_M_ROEL,{
+	cutin "roel01",2;
+	mes "[Roel]";
+	mes "A stream of water has started flowing.";
+	close3;
+}
+
+1@jtb,28,197,4	script	Arang#11	4_F_TAEKWON,{
+	cutin "arang01",2;
+	mes "[Arang]";
+	mes "Hate Green Potions~";
+	close3;
+}
+
+1@jtb,25,196,5	script	Aigu#11	4_F_IU,{
+	cutin "igu01",0;
+	mes "[Aigu]";
+	mes "How long do I have to shimmy my shoulders~";
+	close3;
+}
+
+1@jtb,23,200,5	script	Mingmin#11	4_F_GENETIC,{
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Hm, getting pretty awkward here.";
+	close3;
+}
+
+
+// Room 12
+1@jtb,106,198,5	script	Mingmin#12	4_F_GENETIC,{
+	if (is_party_leader() == false) {
+		mes "[Mingmin]";
+		mes "Some scholars have proved the drop of rate of Poring card is.. percent.";
+		close;
+	}
+	if ('room != 12) {
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "I'm glad the mushroom is not poisonous.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "Its interior looked like that of a forest, then changed to that of a cave. How strange.";
+		npctalk "Mingmin: Its interior looked like that of a forest, then changed to that of a cave. How strange.";
+		next;
+		mes "[Mingmin]";
+		mes "Strange plants growing on stranger terrains. Everything looks out of place.";
+		npctalk "Mingmin: Strange plants growing on stranger terrains. Everything looks out of place.";
+		next;
+		mes "[Mingmin]";
+		mes "I've harvested a few mushrooms to taste.";
+		npctalk "Mingmin: I've harvested a few mushrooms to taste.";
+		next;
+		cutin "min01",0;
+		mes "[Mingmin]";
+		mes "This mushroom is poisonous, but not life threatening. Do you want to have a bite?";
+		npctalk "Mingmin: This mushroom is poisonous, but not life threatening. Do you want to have a bite?";
+		next;
+		if (select( "Decline.", "Have a bite." ) == 1) {
+			cutin "min03",0;
+			mes "[Mingmin]";
+			mes "I won't take no for an answer!";
+			npctalk "Mingmin: I won't take no for an answer!";
+			next;
+			mes "- Mingmin shoves a mushroom into your mouth. -";
+			next;
+			cutin "min02",0;
+			mes "[Mingmin]";
+			mes "Hm?";
+			npctalk "Mingmin: Hm?";
+			next;
+			mes "[Mingmin]";
+			mes "You're not reacting. Maybe the mushroom is not poisonous after all. Maybe I should try one...";
+			npctalk "Mingmin: You're not reacting. Maybe the mushroom is not poisonous after all. Maybe I should try one...";
+			next;
+			mes "[Mingmin]";
+			mes "Hm...";
+			npctalk "Mingmin: Hm...";
+			next;
+			mes "[Mingmin]";
+			mes "It has almost no taste.";
+			npctalk "Mingmin: It has almost no taste.";
+			next;
+			mes "[Mingmin]";
+			mes "Sheesh, this was a waste of time. You should go first. There's one more thing I want to look at.";
+			npctalk "Mingmin: Sheesh, this was a waste of time. You should go first. There's one more thing I want to look at.";
+		}
+		else {
+			mes "[Mingmin]";
+			mes "You're braver than I thought.";
+			npctalk "Mingmin: You're braver than I thought.";
+			next;
+			mes "- You feel good, possibly a side effect of eating the mushroom. -";
+			next;
+			mes "[Mingmin]";
+			mes "I should try one.";
+			npctalk "Mingmin: I should try one.";
+			next;
+			mes "[Mingmin]";
+			mes "Hm...";
+			npctalk "Mingmin: Hm...";
+			next;
+			mes "[Mingmin]";
+			mes "It has almost no taste.";
+			npctalk "Mingmin: It has almost no taste.";
+			next;
+			mes "[Mingmin]";
+			mes "Sheesh, this was a waste of time. You should go first. There's one more thing I want to look at.";
+			npctalk "Mingmin: Sheesh, this was a waste of time. You should go first. There's one more thing I want to look at.";
+		}
+	}
+	if ('room == 12 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs13";
+	close3;
+}
+
+// Room 13
+1@jtb,195,206,4	script	Newoz#13	4_M_NEWOZ,{
+	if (is_party_leader() == false) {
+		cutin "nines01",2;
+		mes "[Newoz]";
+		mes "Suddenly I crave meat. I should have brought a container full of it!";
+		close3;
+	}
+	if ('room != 13) {
+		cutin "nines01",2;
+		mes "[Newoz]";
+		mes "You made it sound so difficult, when you could just say, 'give and take.'";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 13 && is_party_leader() == true)
+			donpcevent 'jitterbug_main$ + "::OnNextIs14";
+		close3;
+	}
+	.@melody$ = instance_npcname("Melody-Jack#13");
+	cutin "nines04",2;
+	mes "[Newoz]";
+	mes "Um, how did I manage to lose the others again?";
+	npctalk "Newoz: Um, how did I manage to lose the others again?";
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "Newoz.";
+	npctalk "Melody-Jack: Newoz.", .@melody$;
+	next;
+	cutin "nines01",2;
+	mes "[Newoz]";
+	mes "Wah! Jeez!";
+	npctalk "Newoz: Wah! Jeez!";
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "And I thought you'd have gotten used to having me around invisible.";
+	npctalk "Melody-Jack: And I thought you'd have gotten used to having me around invisible.", .@melody$;
+	next;
+	cutin "nines01",2;
+	mes "[Newoz]";
+	mes "Are we still in danger?";
+	npctalk "Newoz: Are we still in danger?";
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "Guess so. We've been circling around the same place, by the way.";
+	npctalk "Melody-Jack: Guess so. We've been circling around the same place, by the way.", .@melody$;
+	next;
+	cutin "nines04",2;
+	mes "[Newoz]";
+	mes "So I was right about this place being maze-like. Ugh, I'm getting hungry again.";
+	npctalk "Newoz: So I was right about this place being maze-like. Ugh, I'm getting hungry again.";
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "I've waited for you because I wanted to talk.";
+	npctalk "Melody-Jack: I've waited for you because I wanted to talk.", .@melody$;
+	next;
+	mes "[Melody-Jack]";
+	mes "Newoz, your contract has expired at the time you returned to the guild.";
+	npctalk "Melody-Jack: Newoz, your contract has expired at the time you returned to the guild.", .@melody$;
+	next;
+	cutin "nines01",2;
+	mes "[Newoz]";
+	mes "Oh, that's right. Since I'm no longer the master, my contract has expired naturally.";
+	npctalk "Newoz: Oh, that's right. Since I'm no longer the master, my contract has expired naturally.";
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "But given the situation, my promise to you still stands.";
+	npctalk "Melody-Jack: But given the situation, my promise to you still stands.", .@melody$;
+	next;
+	cutin "nines01",2;
+	mes "[Newoz]";
+	mes "Thanks. I'm glad my contingency plan is still in place.";
+	npctalk "Newoz: Thanks. I'm glad my contingency plan is still in place.";
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "Hmpf, just know I'm keeping my promise to you only because you've got what I want.";
+	npctalk "Melody-Jack: Hmpf, just know I'm keeping my promise to you only because you've got what I want.", .@melody$;
+	next;
+	cutin "nines02",2;
+	mes "[Newoz]";
+	mes "Oh, do you mean this ukulele?";
+	npctalk "Newoz: Oh, do you mean this ukulele?";
+	next;
+	cutin "",255;
+	emotion ET_MERONG, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "You moron, that's worth nothing. Your contract has expired, but a promise is a promise and I intend to keep it.";
+	npctalk "Melody-Jack: You moron, that's worth nothing. Your contract has expired, but a promise is a promise and I intend to keep it.", .@melody$;
+	next;
+	cutin "nines01",2;
+	mes "[Newoz]";
+	mes "Thanks.";
+	npctalk "Newoz: Thanks.";
+	close2;
+	cutin "",255;
+	if ('room == 13 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs14";
+	end;
+}
+
+1@jtb,191,206,5	script	Melody-Jack#13	CLEAR_NPC,{
+	mes "[Melody-Jack]";
+	mes "Please don't talk to me--I'm hiding for a reason.";
+	close;
+}
+
+
+// Room 14 (menu affects the boss encounter in the next room)
+1@jtb,282,194,5	script	Newoz#14	4_M_NEWOZ,{
+	if ('room != 14 || is_party_leader() == false) {
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "It's possible someone else might be in here.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 14 && is_party_leader() == true) {
+			donpcevent 'jitterbug_main$ + "::OnNextIs15";
+			if (jitterbug_options & 2)
+				areamonster 'map_jtb$,358,212,388,182, "--ja--", 3108,1;	// no label
+		}
+		close3;
+	}
+	.@lagi$ = instance_npcname("Lagi#14");
+	.@aigu$ = instance_npcname("Aigu#14");
+	.@shaloshi$ = instance_npcname("Shaloshi#14");
+	.@mingmin$ = instance_npcname("Mingmin#14");
+	.@roel$ = instance_npcname("Roel#14");
+
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "I remembered a few things.";
+	npctalk "Shaloshi: I remembered a few things.", .@shaloshi$;
+	next;
+	cutin "igu04",2;
+	mes "[Aigu]";
+	mes "Did you?";
+	npctalk "Aigu: Did you?", .@aigu$;
+	next;
+	cutin "ragi03",2;
+	emotion ET_DELIGHT, getnpcid(0,.@lagi$);
+	mes "[Lagi]";
+	mes "She said she did.";
+	npctalk "Lagi: She said she did.", .@lagi$;
+	next;
+	cutin "nines03",0;
+	emotion ET_DELIGHT;
+	mes "[Newoz]";
+	mes "Right, that's what she said.";
+	npctalk "Newoz: Right, that's what she said.";
+	next;
+	cutin "ragi01",2;
+	emotion ET_SURPRISE;
+	emotion ET_SURPRISE, getnpcid(0,.@lagi$);
+	mes "[Lagi & Newoz]";
+	mes "!!!";
+	npctalk "Newoz: !!!";
+	npctalk "Lagi: !!!", .@lagi$;
+	next;
+	cutin "nines01",0;
+	mes "[Lagi & Newoz]";
+	mes "Gimmie five!";
+	npctalk "Newoz: Gimmie five!";
+	npctalk "Lagi: Gimmie five!", .@lagi$;
+	next;
+	cutin "",255;
+	mes "- *Slap* -";
+	next;
+	emotion ET_KEK;
+	emotion ET_KEK, getnpcid(0,.@lagi$);
+	emotion ET_HNG, getnpcid(0,.@aigu$);
+	emotion ET_HNG, getnpcid(0,.@mingmin$);
+	specialeffect EF_HIT5;
+	specialeffect EF_HIT5,AREA, .@lagi$;
+	mes "- Before the two give each other a high five, Aigu and Mingmin slap them on their backs. -";
+	next;
+	cutin "igu03",2;
+	mes "[Aigu]";
+	mes "Stop goofing around. Shaloshi, talk to us.";
+	npctalk "Aigu: Stop goofing around. Shaloshi, talk to us.", .@aigu$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "In the pitch darkness, I heard a voice. It was low, but it was ringing for a while.";
+	npctalk "Shaloshi: In the pitch darkness, I heard a voice. It was low, but it was ringing for a while.", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "Later I heard Newoz singing while waiting for his friends. His voice warmed me.";
+	npctalk "Shaloshi: Later I heard Newoz singing while waiting for his friends. His voice warmed me.", .@shaloshi$;
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "You speak like a grown-up now, all smooth and clear.";
+	npctalk "Mingmin: You speak like a grown-up now, all smooth and clear.", .@mingmin$;
+	next;
+	cutin "roel01",2;
+	mes "[Roel]";
+	mes "She could have been terrified.";
+	npctalk "Roel: She could have been terrified.", .@roel$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "I didn't know what friends meant, but it sounded good. I wanted it.";
+	npctalk "Shaloshi: I didn't know what friends meant, but it sounded good. I wanted it.", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "Aigu and Runane showed up.";
+	npctalk "Shaloshi: Aigu and Runane showed up.", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "I thought someone made my wish come true.";
+	npctalk "Shaloshi: I thought someone made my wish come true.", .@shaloshi$;
+	next;
+	cutin "nines01",0;
+	emotion ET_QUESTION;
+	mes "[Newoz]";
+	mes "The pitch darkness... Don't you remember anything else?";
+	npctalk "Newoz: The pitch darkness... Don't you remember anything else?";
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "No.";
+	npctalk "Shaloshi: No.", .@shaloshi$;
+	next;
+	cutin "roel01",2;
+	mes "[Roel]";
+	mes "She could have had her eyes closed. Perhaps she's sleeping.";
+	npctalk "Roel: She could have had her eyes closed. Perhaps she's sleeping.", .@roel$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "The pitch darkness... The cave is bright throughout, aside from the fog.";
+	npctalk "Newoz: The pitch darkness... The cave is bright throughout, aside from the fog.";
+	next;
+	if ('room == 14 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs15";
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "A dream. A low voice in a dream. What kind of dream?";
+	npctalk "Mingmin: A dream. A low voice in a dream. What kind of dream?", .@mingmin$;
+	next;
+	if (select( "She heard her own thoughts.", "She was talking with someone." ) == 1) {
+		jitterbug_options &= ~2;
+		unittalk getcharid(3), "" + strcharinfo(0) + " : Maybe she heard her own thoughts.";
+	}
+	else {
+		jitterbug_options |= 2;
+		areamonster 'map_jtb$,358,212,388,182, "--ja--", 3108,1;	// no label
+		unittalk getcharid(3), "" + strcharinfo(0) + " : Maybe she was talking with someone.";
+	}
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "...";
+	npctalk "Shaloshi: ... ", .@shaloshi$;
+	next;
+	cutin "igu04",0;
+	mes "[Aigu]";
+	mes "She may have not remembered everything, but this is an improvement. Let's wait until she's ready to talk more.";
+	npctalk "Aigu: She may have not remembered everything, but this is an improvement. Let's wait until she's ready to talk more.", .@aigu$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "A voice before my singing. It's possible someone else might be in here.";
+	npctalk "Newoz: A voice before my singing. It's possible someone else might be in here.";
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "We'll know soon enough.";
+	npctalk "Mingmin: We'll know soon enough.", .@mingmin$;
+	close3;
+}
+
+1@jtb,285,191,1	script	Shaloshi#14	4_F_SHALOSH,{
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "I think someone made my wish come true.";
+	close3;
+}
+
+1@jtb,285,195,4	script	Lagi#14	4_M_RAGI,{
+	cutin "ragi02",0;
+	mes "[Lagi]";
+	mes "If you find my joke funny, don't try to hide it. Just laugh.";
+	close3;
+}
+
+1@jtb,287,194,4	script	Aigu#14	4_F_IU,{
+	cutin "igu04",0;
+	mes "[Aigu]";
+	mes "Don't listen to him. He doesn't need encouragement for his bad jokes.";
+	close3;
+}
+
+1@jtb,289,191,4	script	Roel#14	4_M_ROEL,{
+	cutin "roel01",2;
+	mes "[Roel]";
+	mes "I hope Shaloshi will recover her memory soon.";
+	close3;
+}
+
+1@jtb,280,191,8	script	Mingmin#14	4_F_GENETIC,{
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Ugh, I'm tired. Looking out for these new members all day is work in itself.";
+	close3;
+}
+
+
+// Room 15
+1@jtb,380,219,5	script	Newoz#15	4_M_NEWOZ,{
+	if (is_party_leader() == false) {
+		cutin "nines02",0;
+		mes "[Newoz]";
+		mes "I miss the delectable combination of beef and acorns called Bifrost Roast Beef.";
+		close3;
+	}
+	if ('room != 15) {
+		cutin "nines02",0;
+		mes "[Newoz]";
+		mes "Don't worry. Children grow by fighting.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		.@roel$ = instance_npcname("Roel#15");
+		.@runane$ = instance_npcname("Runane#15");
+		.@shaloshi$ = instance_npcname("Shaloshi#15");
+		.@roter$ = instance_npcname("Roter#15");
+		.@gelka$ = instance_npcname("Gelka#15");
+		.@mingmin$ = instance_npcname("Mingmin#15");
+		.@arang$ = instance_npcname("Arang#15");
+
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "Arang! Shaloshi!";
+		npctalk "Newoz: Arang! Shaloshi!";
+		next;
+		cutin "arang01",2;
+		mes "[Arang]";
+		mes "What?";
+		npctalk "Arang: What?", .@arang$;
+		next;
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "Weren't you in danger?";
+		npctalk "Newoz: Weren't you in danger?";
+		next;
+		cutin "arang02",2;
+		mes "[Arang]";
+		mes "Where have you been? We just had an awesome monster here!";
+		npctalk "Arang: Where have you been? We just had an awesome monster here!", .@arang$;
+		next;
+		cutin "nines02",0;
+		mes "[Newoz]";
+		mes "Heh, my instincts told me to slow down because danger was ahead.";
+		npctalk "Newoz: Heh, my instincts told me to slow down because danger was ahead.";
+		next;
+		cutin "gelca01",0;
+		mes "[Gelka]";
+		mes "Oh, the instincts of a great adventurer!";
+		npctalk "Gelka: Oh, the instincts of a great adventurer!", .@gelka$;
+		next;
+		cutin "arang01",2;
+		mes "[Arang]";
+		mes "No, his adventurer instincts have gotten rusty.";
+		npctalk "Arang: No, his adventurer instincts have gotten rusty.", .@arang$;
+		next;
+		cutin "rote01",0;
+		mes "[Roter]";
+		mes "He's just being lazy. He's not so weak.";
+		npctalk "Roter: He's just being lazy. He's not so weak.", .@roter$;
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "My instincts just told me Newoz is not strong.";
+		npctalk "Shaloshi: My instincts just told me Newoz is not strong.", .@shaloshi$;
+		next;
+		mes "[Shaloshi]";
+		mes "Newoz, did you just think everyone except Rot is mediocre?";
+		npctalk "Shaloshi: Newoz, did you just think everyone except Rot is mediocre?", .@shaloshi$;
+		next;
+		cutin "min02",2;
+		mes "[Mingmin]";
+		mes "You can talk and you can hear other people's thoughts. Brilliant.";
+		npctalk "Mingmin: You can talk and you can hear other people's thoughts. Brilliant.", .@mingmin$;
+		next;
+		cutin "lunain04",2;
+		mes "[Runane]";
+		mes "Enough! Stop being disrespectful to Newoz!";
+		npctalk "Runane: Enough! Stop being disrespectful to Newoz!", .@runane$;
+		next;
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "Comrades should not fight with each other.";
+		npctalk "Roel: Comrades should not fight with each other.", .@roel$;
+		next;
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "Comrades should not fight with each other. Got it.";
+		npctalk "Shaloshi: Comrades should not fight with each other. Got it.", .@shaloshi$;
+		next;
+		cutin "lunain03",2;
+		mes "[Runane]";
+		mes "Comrades, who? We're just a bunch of strangers hell-bent on saving a lost girl!";
+		npctalk "Runane: Comrades, who? We're just a bunch of strangers hell-bent on saving a lost girl!", .@runane$;
+		next;
+		cutin "roel03",0;
+		mes "[Roel]";
+		mes "(She's hawt when she's angry!)";
+		npctalk "Roel: (She's hawt when she's angry!)", .@roel$;
+		next;
+		emotion ET_FRET, getnpcid(0,.@mingmin$);
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "We'll talk again the moment we're out of here.";
+		npctalk "Mingmin: We'll talk again the moment we're out of here.", .@mingmin$;
+	}
+	if ('room == 15 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs16";
+	close3;
+}
+
+1@jtb,382,211,4	script	Mingmin#15	4_F_GENETIC,{
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Don't care.";
+	close3;
+}
+
+1@jtb,378,211,5	script	Gelka#15	4_F_GELKA,{
+	cutin "gelca01",0;
+	mes "[Gelka]";
+	mes "I never slack on my training.";
+	close3;
+}
+
+1@jtb,385,214,4	script	Shaloshi#15	4_F_SHALOSH,{
+	cutin "shaloshi02",2;
+	mes "[Shaloshi]";
+	mes "Can't you hear what others think?";
+	close3;
+}
+
+1@jtb,383,216,5	script	Arang#15	4_F_TAEKWON,{
+	cutin "arang01",0;
+	mes "[Arang]";
+	mes "Yap! Yap!";
+	close3;
+}
+
+1@jtb,384,218,4	script	Runane#15	4_F_RUNAIN,{
+	cutin "lunain02",2;
+	mes "[Runane]";
+	mes "I bake and knit in my spare time. I'm very domestic. Ho ho ho!";
+	close3;
+}
+
+1@jtb,375,214,5	script	Roter#15	4_M_ROTERT,{
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "It's true that I'm the strongest.";
+	close3;
+}
+
+1@jtb,376,218,5	script	Roel#15	4_M_ROEL,{
+	cutin "roel01",0;
+	mes "[Roel]";
+	mes "Comrades should be best friends!";
+	close3;
+}
+
+
+// Room 16
+1@jtb,25,280,5	script	Newoz#16	4_M_NEWOZ,{
+	if ('room != 16 || is_party_leader() == false) {
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "Wait, I've collected some Autumn Leaves and Blue Cards to give to other friends as souvenirs. Where are they?";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		.@mingmin$ = instance_npcname("Mingmin#16");
+		.@roter$ = instance_npcname("Roter#16");
+
+		cutin "nines02",0;
+		emotion ET_DELIGHT;
+		mes "[Newoz]";
+		mes "Having you two with me brings back a lot of memories.";
+		npctalk "Newoz: Having you two with me brings back a lot of memories.";
+		next;
+		cutin "rote01",2;
+		mes "[Roter]";
+		mes "I was as stubborn as a mule and busy pretending like I knew what I was doing.";
+		npctalk "Roter: I was as stubborn as a mule and busy pretending like I knew what I was doing.", .@roter$;
+		next;
+		cutin "min01",0;
+		emotion ET_QUESTION, getnpcid(0,.@mingmin$);
+		mes "[Mingmin]";
+		mes "Do you remember when you two fought over that florist girl at the southern gate of Prontera? Or when the doll merchant at the eastern gate whupped you for bickering and driving his customers away?";
+		npctalk "Mingmin: Do you remember when you two fought over that florist girl at the southern gate of Prontera? Or when the doll merchant at the eastern gate whupped you for bickering and driving his customers away?", .@mingmin$;
+		next;
+		cutin "rote01",2;
+		mes "[Roter]";
+		mes "Do you not have any good memories of us?";
+		npctalk "Roter: Do you not have any good memories of us?", .@roter$;
+		next;
+		cutin "nines03",0;
+		emotion ET_DELIGHT;
+		mes "[Newoz]";
+		mes "Oh, I remember! Ah, good times!";
+		npctalk "Newoz: Oh, I remember! Ah, good times!";
+		next;
+		cutin "rote01",0;
+		emotion ET_THINK, getnpcid(0,.@roter$);
+		mes "[Roter]";
+		mes "Am I the only one not happy about this conversation?";
+		npctalk "Roter: Am I the only one not happy about this conversation?", .@roter$;
+		next;
+		cutin "min03",2;
+		emotion ET_MERONG, getnpcid(0,.@mingmin$);
+		mes "[Mingmin]";
+		mes "How about when you played with Dead Branch to death? Or when you and your Sorcerer buddies killed yourselves playing Hocus Pocus?";
+		npctalk "Mingmin: How about when you played with Dead Branch to death? Or when you and your Sorcerer buddies killed yourselves playing Hocus Pocus?", .@mingmin$;
+		next;
+		cutin "rote01",0;
+		emotion ET_OHNO, getnpcid(0,.@roter$);
+		mes "[Roter]";
+		mes "Can't you think of a nice memory?";
+		npctalk "Roter: Can't you think of a nice memory?", .@roter$;
+		next;
+		cutin "nines02",2;
+		emotion ET_OK;
+		mes "[Newoz]";
+		mes "I can! Mingmin drank the Poison Bottle I found on the street and died; I told you it was expensive, and I didn't say anything about it being good for your health.";
+		npctalk "Newoz: I can! Mingmin drank the Poison Bottle I found on the street and died; I told you it was expensive, and I didn't say anything about it being good for your health.";
+		next;
+		cutin "min03",0;
+		emotion ET_SMILE, getnpcid(0,.@mingmin$);
+		mes "[Mingmin]";
+		mes "Oh, I remember! That was funny!";
+		npctalk "Mingmin: Oh, I remember! That was funny!", .@mingmin$;
+		next;
+		emotion ET_KEK, getnpcid(0,.@roter$);
+		cutin "rote01",2;
+		mes "[Roter]";
+		mes "Argh!";
+		npctalk "Roter: Argh!", .@roter$;
+	}
+	if ('room == 16 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs17";
+	close3;
+}
+
+1@jtb,30,279,4	script	Mingmin#16	4_F_GENETIC,{
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Tsk, tsk. I practically raised everyone here, and now they're at each other's throughts over the guild master position.";
+	close3;
+}
+
+1@jtb,30,284,4	script	Roter#16	4_M_ROTERT,{
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "Don't let yourself be deluded by rumors! I'm the Stag of the Southern Gate, the most powerful Bishop in exorcist history!";
+	close3;
+}
+
+
+// Room 17 (menu affects the boss encounter in the next room)
+1@jtb,110,281,5	script	Shaloshi#17	4_F_SHALOSH,{
+	if ('room != 17 || is_party_leader() == false) {
+		cutin "shaloshi01",2;
+		mes "[Shaloshi]";
+		mes "Friends... Rivalry... Comrades...";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 17 && is_party_leader() == true) {
+			donpcevent 'jitterbug_main$ + "::OnNextIs18";
+			if (jitterbug_options & 4)
+				areamonster 'map_jtb$,183,301,220,272, "--ja--", 3108,1;	// no label
+		}
+		close3;
+	}
+	.@runane$ = instance_npcname("Runane#17");
+	.@aigu$ = instance_npcname("Aigu#17");
+
+	cutin "lunain02",2;
+	mes "[Runane]";
+	mes "Maybe Newoz is not interested in dating.";
+	npctalk "Runane: Maybe Newoz is not interested in dating.", .@runane$;
+	next;
+	cutin "igu05",0;
+	mes "[Aigu]";
+	mes "Tell me something I don't know.";
+	npctalk "Aigu: Tell me something I don't know.", .@aigu$;
+	next;
+	cutin "lunain01",2;
+	mes "[Runane]";
+	mes "But you haven't tried to talk to him. I mean seriously, have you?";
+	npctalk "Runane: But you haven't tried to talk to him. I mean seriously, have you?", .@runane$;
+	next;
+	cutin "igu04",0;
+	mes "[Aigu]";
+	mes "You've met him today, but you should know unless you're stupid.";
+	npctalk "Aigu: You've met him today, but you should know unless you're stupid.", .@aigu$;
+	next;
+	cutin "lunain02",2;
+	mes "[Runane]";
+	mes "I know--he'll say no if I ask him out.";
+	npctalk "Runane: I know--he'll say no if I ask him out.", .@runane$;
+	next;
+	cutin "igu05",0;
+	mes "[Aigu]";
+	mes "That dimwit is only interested in adventuring.";
+	npctalk "Aigu: That dimwit is only interested in adventuring.", .@aigu$;
+	next;
+	cutin "lunain04",2;
+	mes "[Runane]";
+	mes "Don't call my hero that! ...But I agree with you.";
+	npctalk "Runane: Don't call my hero that! ...But I agree with you.", .@runane$;
+	next;
+	cutin "igu03",0;
+	mes "[Aigu]";
+	mes "You seem to be fond of Roel.";
+	npctalk "Aigu: You seem to be fond of Roel.", .@aigu$;
+	next;
+	cutin "lunain03",2;
+	mes "[Runane]";
+	mes "I'm not interested in that kid.";
+	npctalk "Runane: I'm not interested in that kid.", .@runane$;
+	next;
+	if ('room == 17 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs18";
+	cutin "igu03",0;
+	mes "[Aigu]";
+	mes "How about you, Adventurer? How are things with your significant other?";
+	npctalk "Aigu: How about you, Adventurer? How are things with your significant other?", .@aigu$;
+	next;
+	switch( select( "You don't even know if I have one.", "My love is unrequited.", "We're happy." ) ) {
+	case 1:
+		jitterbug_options &= ~4;
+		unittalk getcharid(3), "" + strcharinfo(0) + " : You don't even know if I have one.";
+		cutin "igu05",0;
+		mes "[Aigu]";
+		mes "Oh, I'm sorry, but I'm on the verge of bursting into tears.";
+		npctalk "Aigu: Oh, I'm sorry, but I'm on the verge of bursting into tears.", .@aigu$;
+		break;
+	case 2:
+		jitterbug_options &= ~4;
+		unittalk getcharid(3), "" + strcharinfo(0) + " : My love is unrequited.";
+		cutin "igu01",0;
+		mes "[Aigu]";
+		mes "Unrequited love is painful. You'd better let it go before it breaks you.";
+		npctalk "Aigu: Unrequited love is painful. You'd better let it go before it breaks you.", .@aigu$;
+		break;
+	case 3:
+		jitterbug_options |= 4;
+		areamonster 'map_jtb$,183,301,220,272, "--ja--", 3108,1;	// no label
+		unittalk getcharid(3), "" + strcharinfo(0) + " : We're happy.";
+		mes "[Aigu]";
+		mes "Are you serious? Even people like you have found their love. What about me?!";
+		npctalk "Aigu: Are you serious? Even people like you have found their love. What about me?!", .@aigu$;
+		break;
+	}
+	next;
+	cutin "igu01",0;
+	mes "[Aigu]";
+	mes "I don't mind healthy rivalry, but I prefer friendship, however long it lasts.";
+	npctalk "Aigu: I don't mind healthy rivalry, but I prefer friendship, however long it lasts.", .@aigu$;
+	next;
+	cutin "",255;
+	mes "[Runane]";
+	mes "Let's make a truce for now. But make no mistake--Newoz is mine the moment I find him vulnerable.";
+	npctalk "Runane: Let's make a truce for now. But make no mistake--Newoz is mine the moment I find him vulnerable.", .@runane$;
+	next;
+	cutin "shaloshi03",0;
+	mes "[Shaloshi]";
+	mes "(Friends... Rivalry...)";
+	npctalk "Shaloshi: (Friends... Rivalry...)";
+	next;
+	cutin "igu01",0;
+	mes "[Aigu]";
+	mes "Over my dead body!";
+	npctalk "Aigu: Over my dead body!", .@aigu$;
+	close3;
+}
+
+1@jtb,113,285,4	script	Runane#17	4_F_RUNAIN,{
+	cutin "lunain01",2;
+	mes "[Runane]";
+	mes "Let's make a truce for now. But make no mistake--Newoz is mine the moment I find him vulnerable.";
+	close3;
+}
+
+1@jtb,108,285,5	script	Aigu#17	4_F_IU,{
+	cutin "igu03",0;
+	mes "[Aigu]";
+	mes "I don't mind healthy rivalry, but I prefer friendship, however long it lasts.";
+	close3;
+}
+
+
+// Room 18
+1@jtb,198,282,5	script	Shaloshi#18	4_F_SHALOSH,{
+	if ('room != 18 || is_party_leader() == false) {
+		cutin "shaloshi01",0;
+		mes "[Shaloshi]";
+		mes "Ferres don't bite me.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		.@runane$ = instance_npcname("Runane#18");
+		.@roel$ = instance_npcname("Roel#18");
+
+		emotion ET_THINK;
+		cutin "shaloshi01",0;
+		mes "[Shaloshi]";
+		mes "Roel and Runane are hurt.";
+		npctalk "Shaloshi: Roel and Runane are hurt.";
+		next;
+		cutin "lunain04",2;
+		mes "[Runane]";
+		mes "I'm fine. I told you to be careful, kiddo!";
+		npctalk "Runane: I'm fine. I told you to be careful, kiddo!", .@runane$;
+		next;
+		cutin "roel04",0;
+		emotion ET_SORRY, getnpcid(0,.@roel$);
+		mes "[Roel]";
+		mes "Sorry. I won't disappoint you again.";
+		npctalk "Roel: Sorry. I won't disappoint you again.", .@roel$;
+		next;
+		cutin "shaloshi01",0;
+		mes "[Shaloshi]";
+		mes "She's not happy with him, but she still treats him really well.";
+		npctalk "Shaloshi: She's not happy with him, but she still treats him really well.";
+		next;
+		emotion ET_THROB, getnpcid(0,.@roel$);
+		cutin "roel03",0;
+		mes "[Roel]";
+		mes "(She's kind!)";
+		npctalk "Roel: (She's kind!)", .@roel$;
+		next;
+		cutin "lunain02",2;
+		mes "[Runane]";
+		mes "Don't mistake this for anything more than what it is--babysitting!";
+		npctalk "Runane: Don't mistake this for anything more than what it is--babysitting!", .@runane$;
+		next;
+		emotion ET_THINK;
+		cutin "shaloshi01",0;
+		mes "[Shaloshi]";
+		mes "She's blushing.";
+		npctalk "Shaloshi: She's blushing.";
+		next;
+		cutin "lunain01",2;
+		mes "[Runane]";
+		mes "There's nothing about you I like.";
+		npctalk "Runane: There's nothing about you I like.", .@runane$;
+		next;
+		cutin "shaloshi01",0;
+		mes "[Shaloshi]";
+		mes "Before Aigu and Runane,";
+		npctalk "Shaloshi: Before Aigu and Runane,";
+		next;
+		mes "[Shaloshi]";
+		mes "The Ferres showed up first.";
+		npctalk "Shaloshi: The Ferres showed up first.";
+		next;
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "Ferre?";
+		npctalk "Roel: Ferre?", .@roel$;
+		next;
+		cutin "shaloshi01",0;
+		mes "[Shaloshi]";
+		mes "They emit 'ferre, ferre,' so I call them Ferres.";
+		npctalk "Shaloshi: They emit 'ferre, ferre,' so I call them Ferres.";
+		next;
+		mes "[Shaloshi]";
+		mes "They did nothing but croaked.";
+		npctalk "Shaloshi: They did nothing but croaked.";
+		next;
+		mes "[Shaloshi]";
+		mes "They're my friends. They don't bite or hurt me.";
+		npctalk "Shaloshi: They're my friends. They don't bite or hurt me.";
+		next;
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "But now...";
+		npctalk "Roel: But now...", .@roel$;
+		next;
+		cutin "lunain04",2;
+		emotion ET_HNG, getnpcid(0,.@runane$);
+		mes "[Runane]";
+		mes "Listen, humans and monsters can't be friends. At least that's what I think.";
+		npctalk "Runane: Listen, humans and monsters can't be friends. At least that's what I think.", .@runane$;
+		next;
+		cutin "shaloshi01",0;
+		mes "[Shaloshi]";
+		mes "Can't be friends.";
+		npctalk "Shaloshi: Can't be friends.";
+		next;
+		cutin "lunain03",2;
+		mes "[Runane]";
+		mes "That's right. I like you better when you listen to me.";
+		npctalk "Runane: That's right. I like you better when you listen to me.", .@runane$;
+		next;
+		cutin "roel03",0;
+		mes "[Roel]";
+		mes "How about I be your friend?";
+		npctalk "Roel: How about I be your friend?", .@roel$;
+		next;
+		emotion ET_SCRATCH, getnpcid(0,.@runane$);
+		cutin "lunain02",2;
+		mes "[Runane]";
+		mes "Stop making things awkward! We're about the same age, so we're friends already.";
+		npctalk "Runane: Stop making things awkward! We're about the same age, so we're friends already.", .@runane$;
+		next;
+		cutin "shaloshi03",0;
+		mes "[Shaloshi]";
+		mes "(Can't be friends.)";
+		npctalk "Shaloshi: (Can't be friends.)";
+	}
+	if ('room == 18 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs19";
+	close3;
+}
+
+1@jtb,203,281,4	script	Runane#18	4_F_RUNAIN,{
+	cutin "lunain02",2;
+	mes "[Runane]";
+	mes "True friends don't need to declare their friendship; they just become friends without knowing.";
+	close3;
+}
+
+1@jtb,199,278,8	script	Roel#18	4_M_ROEL,{
+	cutin "roel03",0;
+	mes "[Roel]";
+	mes "I'm okay. At least I can protect Shaloshi. Feeling protective of someone is nice.";
+	close3;
+}
+
+
+// Room 19
+1@jtb,28,377,5	script	Newoz#19	4_M_NEWOZ,{
+	if ('room != 19 || is_party_leader() == false) {
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "We should find her.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2)
+		mes "Try to jog your memory while hurrying.";
+	else {
+		.@aigu$ = instance_npcname("Aigu#19");
+		.@mingmin$ = instance_npcname("Mingmin#19");
+		.@roter$ = instance_npcname("Roter#19");
+		.@melody$ = instance_npcname("Melody-Jack#19");
+		.@arang$ = instance_npcname("Arang#19");
+
+		cutin "nines01",0;
+		emotion ET_THINK;
+		mes "[Newoz]";
+		mes "Strange... The atmosphere has changed.";
+		npctalk "Newoz: Strange... The atmosphere has changed.";
+		next;
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "The air smells different, and things look less... perceptible.";
+		npctalk "Mingmin: The air smells different, and things look less perceptible.", .@mingmin$;
+		next;
+		cutin "rote01",2;
+		mes "[Roter]";
+		mes "It seems as though we're underwater, yet I don't feel it.";
+		npctalk "Roter: It seems as though we're underwater, yet I don't feel it.", .@roter$;
+		next;
+		emotion ET_HUM, getnpcid(0,.@melody$);
+		cutin "",255;
+		mes "[Melody-Jack]";
+		mes "I'm telling you, we've been circling around the same place.";
+		npctalk "Melody-Jack: I'm telling you, we've been circling around the same place.", .@melody$;
+		next;
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "I agree. And this clearing is neither compact nor spacious.";
+		npctalk "Mingmin: I agree. And this clearing is neither compact nor spacious.", .@mingmin$;
+		next;
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "Do you think it's meaningless for us to go deeper?";
+		npctalk "Newoz: Do you think it's meaningless for us to go deeper?";
+		next;
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "No. I'm just saying the environmental changes are too drastic, almost like the mood swings of a bipolar person.";
+		npctalk "Mingmin: No. I'm just saying the environmental changes are too drastic, almost like the mood swings of a bipolar person.", .@mingmin$;
+		next;
+		mes "[Mingmin]";
+		mes "I don't know why, but things are losing their shape as if they're fading away.";
+		npctalk "Mingmin: I don't know why, but things are losing their shape as if they're fading away.", .@mingmin$;
+		next;
+		emotion ET_THINK, getnpcid(0,.@melody$);
+		cutin "",255;
+		mes "[Melody-Jack]";
+		mes "All the while, the foreign energy I've been sensing is growing stronger. This is bad.";
+		npctalk "Melody-Jack: All the while, the foreign energy I've been sensing is growing stronger. This is bad.", .@melody$;
+		next;
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "I feel like something's going to appear in front of our eyes with a loud pop.";
+		npctalk "Mingmin: I feel like something's going to appear in front of our eyes with a loud pop.", .@mingmin$;
+		next;
+		cutin "arang02",0;
+		mes "[Arang]";
+		mes "I hope it's a formidable monster!";
+		npctalk "Arang: I hope it's a formidable monster!", .@arang$;
+		next;
+		emotion ET_X, getnpcid(0,.@aigu$);
+		cutin "igu01",0;
+		mes "[Aigu]";
+		mes "I hope you're wrong.";
+		npctalk "Aigu: I hope you're wrong.", .@aigu$;
+		next;
+		cutin "ragi02",2;
+		mes "[Lagi]";
+		mes "I'm just going to leave you guys to...";
+		npctalk "Lagi: I'm just going to leave you guys to...", instance_npcname("Lagi#19");
+		next;
+		cutin "nines02",0;
+		mes "[Newoz]";
+		mes "The monster?";
+		npctalk "Newoz: The monster?";
+		next;
+		cutin "rote01",2;
+		mes "[Roter]";
+		mes "I'll kill you both before the monster.";
+		npctalk "Roter: I'll kill you both before the monster.", .@roter$;
+		next;
+		cutin "gelca04",2;
+		mes "[Gelka]";
+		mes "Master, please!";
+		npctalk "Gelka: Master, please!", instance_npcname("Gelka#19");
+		next;
+		cutin "arang02",0;
+		mes "[Arang]";
+		mes "Have you seen Shaloshi? Where is she?";
+		npctalk "Arang: Have you seen Shaloshi? Where is she?", .@arang$;
+		next;
+		cutin "igu04",0;
+		mes "[Aigu]";
+		mes "Oh, you're right!";
+		npctalk "Aigu: Oh, you're right!", .@aigu$;
+		next;
+		cutin "min02",0;
+		mes "[Mingmin]";
+		mes "...";
+		npctalk "Mingmin: ...", .@mingmin$;
+		next;
+		emotion ET_THINK, getnpcid(0,.@melody$);
+		cutin "",255;
+		mes "[Melody-Jack]";
+		mes "...";
+		npctalk "Melody-Jack: ...", .@melody$;
+		next;
+		cutin "nines03",0;
+		mes "[Newoz]";
+		mes "We should find her.";
+		npctalk "Newoz: We should find her.";
+	}
+	if ('room == 19 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs20";
+	close3;
+}
+
+1@jtb,30,377,5	script	Melody-Jack#19	CLEAR_NPC,{
+	mes "[Melody-Jack]";
+	mes "Newoz is never tactful.";
+	close;
+}
+
+1@jtb,30,373,4	script	Roter#19	4_M_ROTERT,{
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "I have a feeling Newoz is up to no good.";
+	close3;
+}
+
+1@jtb,25,373,5	script	Mingmin#19	4_F_GENETIC,{
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "We'd better look for an exit before things get too crazy.";
+	close3;
+}
+
+1@jtb,24,376,5	script	Aigu#19	4_F_IU,{
+	cutin "igu05",0;
+	mes "[Aigu]";
+	mes "Newoz's enthusiasm for adventure went overboard. Again. I can't say I hate that about him, though.";
+	close3;
+}
+
+1@jtb,26,380,5	script	Arang#19	4_F_TAEKWON,{
+	cutin "arang03",0;
+	mes "[Arang]";
+	mes "I wish these monsters were as cute and helpless as those Porings for the Taekwon mission.";
+	close3;
+}
+
+1@jtb,31,380,4	script	Lagi#19	4_M_RAGI,{
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "They're bickering all the time, but look like good friends. Don't they?";
+	close3;
+}
+
+1@jtb,33,376,4	script	Gelka#19	4_F_GELKA,{
+	cutin "gelca01",0;
+	mes "[Gelka]";
+	mes "I practice hard, so I can shine in times of danger.";
+	close3;
+}
+
+
+// Room 20 (menu affects the boss encounter in the next room)
+1@jtb,105,377,5	script	Roel#20	4_M_ROEL,{
+	if ('room != 20 || is_party_leader() == false) {
+		cutin "roel01",0;
+		mes "[Roel]";
+		mes "One of my friends once set me up on a blind date in Izlude.";
+		next;
+		mes "[Roel]";
+		mes "She and I exchanged a couple of letters, first to introduce each other, and then the second to set up a date.";
+		next;
+		cutin "roel04",0;
+		mes "[Roel]";
+		mes "She didn't reply to my second letter. I can't fAigure out why.";
+		close3;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 20 && is_party_leader() == true) {
+			donpcevent 'jitterbug_main$ + "::OnNextIs21";
+			if (jitterbug_options & 8)
+				areamonster 'map_jtb$,182,387,219,354, "--ja--", 3108,1;	// no label
+		}
+		close3;
+	}
+	.@gelka$ = instance_npcname("Gelka#20");
+	cutin "gelca01",2;
+	mes "[Gelka]";
+	mes "Scene 8: Heroes are surrounded by a horde of enemies. Roel, let's choreograph what we've practiced today, shall we?";
+	npctalk "Gelka: Scene 8: Heroes are surrounded by a horde of enemies. Roel, let's choreograph what we've practiced today, shall we?", .@gelka$;
+	next;
+	cutin "roel01",0;
+	emotion ET_SURPRISE;
+	mes "[Roel]";
+	mes "Gelka, get ready!";
+	npctalk "Roel: Gelka, get ready!";
+	next;
+	emotion ET_COMEON, getnpcid(0,.@gelka$);
+	cutin "gelca01",2;
+	mes "[Gelka]";
+	mes "Gelka-style Mental Strength! Iron Physique!";
+	npctalk "Gelka: Gelka-style Mental Strength! Iron Physique!", .@gelka$;
+	specialeffect EF_GUMGANG,AREA, .@gelka$;
+	next;
+	emotion ET_COMEON;
+	cutin "roel02",0;
+	mes "[Roel]";
+	mes "Impenetrable defense! Roel-style Guard!";
+	npctalk "Roel: Impenetrable defense! Roel-style Guard!";
+	specialeffect EF_KEEPING;
+	next;
+	cutin "gelca01",2;
+	mes "[Roel & Gelka]";
+	mes "CROSS!!!";
+	npctalk "Gelka: CROSS!!!", .@gelka$;
+	npctalk "Roel: CROSS!!!";
+	specialeffect EF_POTION_BERSERK;
+	specialeffect EF_POTION_BERSERK,AREA, .@gelka$;
+	next;
+	cutin "roel03",0;
+	mes "[Roel & Gelka]";
+	mes "Last bastion!";
+	npctalk "Roel: Last bastion!";
+	npctalk "Gelka: Last bastion!", .@gelka$;
+	specialeffect EF_SHIELDBOOMERANG;
+	specialeffect EF_BOTTOM_BASILICA,AREA, .@gelka$;
+	specialeffect EF_SHIELDCHARGE;
+	specialeffect EF_GLASSWALL,AREA, .@gelka$;
+	specialeffect EF_GLASSWALL;
+	specialeffect EF_GUARD;
+	specialeffect EF_ANGELUS,AREA, .@gelka$;
+	specialeffect EF_ANGELUS;
+	next;
+	cutin "roel03",0;
+	mes "[Roel]";
+	mes "By the gods, Gelka, you're awesome!";
+	npctalk "Roel: By the gods, Gelka, you're awesome!";
+	if ('room == 20 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs21";
+	next;
+	cutin "gelca01",2;
+	if (select( "Awesome, indeed!", "You just made up those words to look cool!" ) == 1) {
+		jitterbug_options &= ~8;
+		unittalk getcharid(3), "" + strcharinfo(0) + " : Awesome, indeed!";
+		cutin "gelca03",2;
+		mes "[Gelka]";
+		mes "I've learned from the best.";
+		npctalk "Gelka: I've learned from the best.", .@gelka$;
+		next;
+		cutin "roel02",0;
+		mes "[Roel]";
+		mes "I hope you'll teach me too, Roter.";
+		npctalk "Roel: I hope you'll teach me too, Roter.";
+		next;
+		cutin "gelca01",2;
+		mes "[Gelka]";
+		mes "Special skills are all about their names. Shouting impressive names is enough to intimidate your enemies.";
+		npctalk "Gelka: Special skills are all about their names. Shouting impressive names is enough to intimidate your enemies.", .@gelka$;
+	}
+	else {
+		jitterbug_options |= 8;
+		areamonster 'map_jtb$,182,387,219,354, "--ja--", 3108,1;	// no label
+		unittalk getcharid(3), "" + strcharinfo(0) + " : You just made up those words to look cool!";
+		cutin "gelca02",2;
+		mes "[Gelka]";
+		mes "You're a spoilsport, you know that?";
+		npctalk "Gelka: You're a spoilsport, you know that?", .@gelka$;
+		next;
+		cutin "roel04",0;
+		mes "[Roel]";
+		mes "We've practiced hard.";
+		npctalk "Roel: We've practiced hard.";
+		next;
+	}
+	next;
+	cutin "",255;
+	mes "- They're absorbed in talking about their new special skills. -";
+	close3;
+}
+
+1@jtb,110,377,4	script	Gelka#20	4_F_GELKA,{
+	cutin "gelca01",0;
+	mes "[Gelka]";
+	mes "Fighting is essential to adventurer training. Divide and conquer!";
+	close3;
+}
+
+
+// Room 21 (menu affects the boss encounter in the next room)
+1@jtb,198,369,5	script	Newoz#21	4_M_NEWOZ,{
+	if ('room != 21 || is_party_leader() == false) {
+		mes "[Newoz]";
+		mes "Shaloshi...";
+		close;
+	}
+	if (select( "Talk.", "Hurry." ) == 2 && isbegin_quest(13183) == 2) {
+		mes "Try to jog your memory while hurrying.";
+		if ('room == 21 && is_party_leader() == true) {
+			disablenpc instance_npcname("Shaloshi#21");
+			disablenpc instance_npcname("Aigu#21");
+			disablenpc instance_npcname("Newoz#21");
+			donpcevent 'jitterbug_main$ + "::OnNextIs22";
+		}
+		close3;
+	}
+	.@aigu$ = instance_npcname("Aigu#21");
+	.@mingmin$ = instance_npcname("Mingmin#21");
+	.@roter$ = instance_npcname("Roter#21");
+	.@runane$ = instance_npcname("Runane#21");
+	.@shaloshi$ = instance_npcname("Shaloshi#21");
+	.@melody$ = instance_npcname("Melody-Jack#21");
+
+	cutin "shaloshi03",0;
+	mes "[Shaloshi]";
+	mes "...";
+	npctalk "Shaloshi: ...", .@shaloshi$;
+	next;
+	cutin "",255;
+	mes "[Melody-Jack]";
+	mes "I'm afraid this place is falling down around us.";
+	npctalk "Melody-Jack: I'm afraid this place is falling down around us.", .@melody$;
+	next;
+	cutin "shaloshi03",0;
+	mes "[Shaloshi]";
+	mes "The Ferres are angry.";
+	npctalk "Shaloshi: The Ferres are angry.", .@shaloshi$;
+	next;
+	cutin "min02",2;
+	mes "[Mingmin]";
+	mes "Wow, you can even hear what monsters think?";
+	npctalk "Mingmin: Wow, you can even hear what monsters think?", .@mingmin$;
+	next;
+	if ('room == 21 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs22";
+	cutin "shaloshi03",0;
+	mes "[Shaloshi]";
+	mes "They're my friends.";
+	npctalk "Shaloshi: They're my friends.", .@shaloshi$;
+	next;
+	cutin "lunain04",0;
+	mes "[Runane]";
+	mes "No, they're not. Friends don't attack each other!";
+	npctalk "Runane: No, they're not. Friends don't attack each other!", .@runane$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "They're just trying to protect me.";
+	npctalk "Shaloshi: They're just trying to protect me.", .@shaloshi$;
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "Protect you from what?";
+	npctalk "Roter: Protect you from what?", .@roter$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "From what Rot is thinking.";
+	npctalk "Shaloshi: From what Rot is thinking.", .@shaloshi$;
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "...";
+	npctalk "Melody-Jack: ...", .@melody$;
+	next;
+	cutin "shaloshi01",0;
+	mes "[Shaloshi]";
+	mes "Ferre?";
+	npctalk "Shaloshi: Ferre?", .@shaloshi$;
+	next;
+	enablenpc instance_npcname("Ferre#21");
+	enablenpc instance_npcname("Ferre#22");
+	cutin "",255;
+	emotion ET_FRET, getnpcid(0,instance_npcname("Ferre#21"));
+	mes "[Ferre]";
+	mes "Ferre, ferre!";
+	npctalk "Ferre: Ferre, ferre!", instance_npcname("Ferre#21");
+	next;
+	emotion ET_FRET, getnpcid(0,instance_npcname("Ferre#22"));
+	mes "[Ferre]";
+	mes "Ferre, ferre, ferre!";
+	npctalk "Ferre: Ferre, ferre, ferre!", instance_npcname("Ferre#21");
+	specialeffect EF_READYPORTAL2,AREA, .@shaloshi$;
+	specialeffect EF_PORTAL2,AREA, .@shaloshi$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "!!!";
+	npctalk "Newoz: !!!";
+	next;
+	disablenpc .@shaloshi$;
+	disablenpc instance_npcname("Ferre#21");
+	disablenpc instance_npcname("Ferre#22");
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "We're going to be buried in here. Let's find an exit.";
+	npctalk "Roter: We're going to be buried in here. Let's find an exit.", .@roter$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "We have to find Shaloshi!";
+	npctalk "Newoz: We have to find Shaloshi!";
+	next;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	cutin "",255;
+	mes "[Melody-Jack]";
+	mes "Newoz, I've known you're weird in the head, but she's...";
+	npctalk "Melody-Jack: Newoz, I've known you're weird in the head, but she's...", .@melody$;
+	next;
+	cutin "nines04",0;
+	mes "[Newoz]";
+	mes "I know. You don't have to remind me.";
+	npctalk "Newoz: I know. You don't have to remind me.";
+	next;
+	cutin "min02",2;
+	mes "[Mingmin]";
+	mes "Then let's get out of here. We're in serious danger right now.";
+	npctalk "Mingmin: Then let's get out of here. We're in serious danger right now.", .@mingmin$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "I have to find her. I have to talk to her.";
+	npctalk "Newoz: I have to find her. I have to talk to her.";
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "NEWOZ!";
+	npctalk "Roter: NEWOZ!", .@roter$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "I'm not your master anymore. You don't have to follow me.";
+	npctalk "Newoz: I'm not your master anymore. You don't have to follow me.";
+	next;
+	cutin "lunain01",0;
+	mes "[Runane]";
+	mes "!!!";
+	npctalk "Runane: !!!", .@runane$;
+	next;
+	disablenpc instance_npcname("Newoz#21");
+	cutin "igu05",0;
+	mes "[Aigu]";
+	mes "Newoz, I'm coming with you!";
+	npctalk "Aigu: Newoz, I'm coming with you!", .@aigu$;
+	next;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "It's your call, new master.";
+	npctalk "Mingmin: It's your call, new master.", .@mingmin$;
+	next;
+	disablenpc .@aigu$;
+	cutin "gelca04",2;
+	mes "[Gelka]";
+	mes "Master!";
+	npctalk "Gelka: Master!", instance_npcname("Gelka#21");
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "...";
+	npctalk "Roter: ...", .@roter$;
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "We'll find Newoz and Shaloshi. And when we do, I'm going to kill both of them.";
+	npctalk "Roter: We'll find Newoz and Shaloshi. And when we do, I'm going to kill both of them.", .@roter$;
+	next;
+	cutin "roel04",0;
+	mes "[Roel]";
+	mes "Newoz, did you know this would happen? You're lucky to have such good friends.";
+	npctalk "Roel: Newoz, did you know this would happen? You're lucky to have such good friends.", instance_npcname("Roel#21");
+	next;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	cutin "",255;
+	mes "[Melody-Jack]";
+	mes "He didn't know because he doesn't think, ever.";
+	npctalk "Melody-Jack: He didn't know because he doesn't think, ever.", .@melody$;
+	next;
+	cutin "arang01",2;
+	mes "[Arang]";
+	mes "Yippee! Let's go!";
+	npctalk "Arang: Yippee! Let's go!", instance_npcname("Arang#21");
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "We'll split into two teams. Be careful not to lose your way in the maze-like offshoots.";
+	npctalk "Roter: We'll split into two teams. Be careful not to lose your way in the maze-like offshoots.", .@roter$;
+	next;
+	if (select( "Follow Roter and Gelka.", "Search alone." ) == 1)
+		jitterbug_options &= ~16;
+	else
+		jitterbug_options |= 16;
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Are we ready? Let's go!";
+	npctalk "Mingmin: Are we ready? Let's go!", .@mingmin$;
+	close3;
+}
+
+1@jtb,202,367,5	script	Melody-Jack#21	CLEAR_NPC,{
+	mes "[Melody-Jack]";
+	mes "I knew this would happen, and Aigu didn't listen to me!";
+	close;
+}
+
+1@jtb,204,366,4	script	Arang#21	4_F_TAEKWON,{
+	cutin "arang01",0;
+	mes "[Arang]";
+	mes "Haap!";
+	close3;
+}
+
+1@jtb,201,365,4	script	Gelka#21	4_F_GELKA,{
+	cutin "gelca04",2;
+	mes "[Gelka]";
+	mes "I believe in you, Master!";
+	close3;
+}
+
+1@jtb,202,363,4	script	Mingmin#21	4_F_GENETIC,{
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "*Grunt* Why did I get myself into this mess?";
+	close3;
+}
+
+1@jtb,195,365,5	script	Runane#21	4_F_RUNAIN,{
+	cutin "lunain01",0;
+	mes "[Runane]";
+	mes "We should find Newoz and Shaloshi first.";
+	close3;
+}
+
+1@jtb,194,363,5	script	Roel#21	4_M_ROEL,{
+	cutin "roel01",0;
+	mes "[Roel]";
+	mes "I'll follow you guys to the ends of the world.";
+	close3;
+}
+
+1@jtb,194,367,5	script	Lagi#21	4_M_RAGI,{
+	cutin "ragi02",0;
+	mes "[Lagi]";
+	mes "I hope today won't be the last day I play my instrument...";
+	close3;
+}
+
+1@jtb,195,368,5	script	Aigu#21	4_F_IU,{
+	cutin "igu05",0;
+	mes "[Aigu]";
+	mes "I'm following Newoz.";
+	close3;
+}
+
+1@jtb,201,369,4	script	Roter#21	4_M_ROTERT,{
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "I'll show you my charismatic leadership as the guild master!";
+	close3;
+}
+
+1@jtb,197,363,5	duplicate(???#02)	Ferre#21	4_F_PERE01
+1@jtb,198,363,5	duplicate(???#02)	Shaloshi#21	4_F_SHALOSH
+1@jtb,199,363,5	duplicate(???#02)	Ferre#22	4_F_PERE01
+
+
+// Room 22
+// 1@jtb,318,358,5	duplicate(???#02)	Newoz#22	4_M_NEWOZ
+
+
+// Room 23 (Boss Room entrance)
+1@jtb,320,323,5	script	Newoz#23	4_M_NEWOZ,{
+	if ('room != 23 || is_party_leader() == false) {
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "*Pant Pant* I'm glad you didn't make it too far.";
+		close3;
+	}
+	.@shaloshi$ = instance_npcname("Shaloshi#23");
+	.@ferre_23$ = instance_npcname("Ferre#23");
+	.@ferre_24$ = instance_npcname("Ferre#24");
+	cutin "nines04",0;
+	mes "[Newoz]";
+	mes "*Pant Pant* I've found you, Shaloshi.";
+	npctalk "Newoz: *Pant Pant* I've found you, Shaloshi.";
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "Newoz...";
+	npctalk "Shaloshi: Newoz...", .@shaloshi$;
+	next;
+	cutin "nines04",0;
+	mes "[Newoz]";
+	mes "*Pant Pant* I'm glad you didn't make it too far.";
+	npctalk "Newoz: *Pant Pant* I'm glad you didn't make it too far.";
+	next;
+	cutin "",255;
+	mes "[Ferre]";
+	mes "Ferre, ferre, fe-!";
+	npctalk "Ferre: Ferre, ferre, fe-!", .@ferre_23$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "Ferre is angry.";
+	npctalk "Shaloshi: Ferre is angry.", .@shaloshi$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "You don't have to get upset. I'm not here to take your friend away. I just want...";
+	npctalk "Newoz: You don't have to get upset. I'm not here to take your friend away. I just want...";
+	next;
+	cutin "",255;
+	mes "[Ferre]";
+	mes "Ferre, ferre, ferre!";
+	npctalk "Ferre: Ferre, ferre, ferre!", .@ferre_23$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "Ferre is really angry.";
+	npctalk "Shaloshi: Ferre is really angry.", .@shaloshi$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Yeah, you don't have to tell me that.";
+	npctalk "Newoz: Yeah, you don't have to tell me that.";
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "This is not good. Ferre...";
+	npctalk "Shaloshi: This is not good. Ferre...", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "No, no!";
+	npctalk "Shaloshi: No, no!", .@shaloshi$;
+	next;
+	cutin "",255;
+	mes "[Ferre]";
+	mes "Ferre, ferre, ferre, ferre-!";
+	npctalk "Ferre: Ferre, ferre, ferre, ferre-!", .@ferre_23$;
+	next;
+	sleep2 400;
+	disablenpc .@ferre_23$;
+	enablenpc .@ferre_24$;
+	disablenpc .@ferre_24$;
+	enablenpc .@ferre_23$;
+	sleep2 800;
+	disablenpc .@ferre_23$;
+	enablenpc .@ferre_24$;
+	disablenpc .@ferre_24$;
+	enablenpc .@ferre_23$;
+	disablenpc .@ferre_23$;
+	enablenpc .@ferre_24$;
+	disablenpc .@ferre_24$;
+	enablenpc .@ferre_23$;
+	disablenpc .@ferre_23$;
+	enablenpc .@ferre_24$;
+	sleep2 700;
+	specialeffect EF_LORD,AREA, .@ferre_24$;
+	specialeffect EF_SUI_EXPLOSION,AREA, .@ferre_24$;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "Ferre has transformed into its true form!";
+	npctalk "Shaloshi: Ferre has transformed into its true form!", .@shaloshi$;
+	next;
+	cutin "",255;
+	mes "^FF0000A formidable enemy has appeared!^000000";
+	next;
+	mes "[Ferre]";
+	mes "FERRE- FERRE- FERRE- FERRE-!!";
+	npctalk "Ferre: FERRE- FERRE- FERRE- FERRE-!!", .@ferre_24$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "Ferre, you don't have to do this!";
+	npctalk "Shaloshi: Ferre, you don't have to do this!", .@shaloshi$;
+	next;
+	cutin "nines03",0;
+	mes "[Newoz]";
+	mes "Well, if I can't talk him out of this, then we'll have to duke it out.";
+	npctalk "Newoz: Well, if I can't talk him out of this, then we'll have to duke it out.";
+	next;
+	mes "[Newoz]";
+	mes "Where are the others? Hey new guys, help me out here. That Ferre looks like he can pack a punch.";
+	npctalk "Newoz: Where are the others? Hey new guys, help me out here. That Ferre looks like he can pack a punch.";
+	next;
+	cutin "",255;
+	mes "[Ferre]";
+	mes "FERRE, FERRE, FERRE-!";
+	npctalk "Ferre: FERRE, FERRE, FERRE-!", .@ferre_24$;
+	next;
+	cutin "nines02",0;
+	mes "[Newoz]";
+	mes "Let's begin!";
+	npctalk "Newoz: Let's begin!";
+	close2;
+	cutin "",255;
+	if ('room == 23 && is_party_leader() == true) {
+		'party_id = getcharid(1);
+		donpcevent 'jitterbug_main$ + "::OnNextIs23";
+		if (jitterbug_options & 16)
+			monster 'map_jtb$,327,331, "--ja--", 3108,2;	// JITTERBUG1 - no label
+	}
+	end;
+}
+
+1@jtb,324,327,4	duplicate(???#02)	Ferre#23	4_F_PERE01
+1@jtb,324,327,4	duplicate(???#02)	Ferre#24	4_JITTERBUG
+1@jtb,326,329,4	duplicate(???#02)	Shaloshi#23	4_F_SHALOSH
+
+// 1@jtb,323,337,5	script	Boss#23	HIDDEN_WARP_NPC
+
+1@jtb,320,323,5	script	Newoz#boss	4_M_NEWOZ,{
+	end;
+OnStart:
+	enablenpc instance_npcname("Newoz#boss");
+	npctalk "Newoz: Don't worry. I'll help you!";
+	initnpctimer;
+	end;
+OnTimer30000:
+	.@r = rand(5);
+	if (.@r == 0)
+		npctalk "Newoz: What does a nosy pepper do? Gets jalapeno business!";
+	else if (.@r == 1)
+		npctalk "Newoz: Why do bananas wear suntan lotion? Because they peel!";
+	else if (.@r == 2)
+		npctalk "What do you call a fish musician? A piano tuna.";
+	else if (.@r == 3)
+		npctalk "Um, hold on. One of the ukulele strings snapped. How about I sing instead?";
+	else
+		npctalk "Newoz: What did the farmer say to the green pumpkin? Why orange you orange?";
+	emotion ET_DELIGHT;
+	initnpctimer;
+	if ('boss_id) {
+		getunitdata 'boss_id, .@data;
+		npcskilleffect "WZ_STORMGUST",1,.@data[UMOB_X],.@data[UMOB_Y];
+		unittalk 'boss_id, "FERRE! FERRE!";
+
+		getpartymember 'party_id, 1, .@char_id;
+		getpartymember 'party_id, 2, .@account_id;
+		for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
+			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == true) {
+				getmapxy .@map$,.@x,.@y, BL_PC, .@account_id[.@i];
+				if (.@map$ == 'map_jtb$ && distance(.@x,.@y,323,324) < 10)
+					sc_start SC_FREEZE,15000,0,10000,0, .@account_id[.@i];
+			}
+		}
+	}
+	end;
+OnStop:
+	stopnpctimer;
+	disablenpc instance_npcname("Newoz#boss");
+	end;
+}
+
+// Room 23 - After Boss dead
+1@jtb,320,323,5	script	Newoz#24	4_M_NEWOZ,{
+	if ('room != 24 || is_party_leader() == false) {
+		cutin "nines01",0;
+		mes "[Newoz]";
+		mes "Shaloshi..";
+		close3;
+	}
+	.@aigu$ = instance_npcname("Aigu#24");
+	.@roel$ = instance_npcname("Roel#24");
+	.@ferre$ = instance_npcname("Ferre#25");
+	.@arang$ = instance_npcname("Arang#24");
+	.@runane$ = instance_npcname("Runane#24");
+	.@roter$ = instance_npcname("Roter#24");
+	.@melody$ = instance_npcname("Melody-Jack#24");
+	.@mingmin$ = instance_npcname("Mingmin#24");
+	.@shaloshi$ = instance_npcname("Shaloshi#24");
+
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "I like his spirit, though I can see he's getting exhausted.";
+	npctalk "Newoz: I like his spirit, though I can see he's getting exhausted.";
+	next;
+	cutin "",255;
+	mes "[Ferre]";
+	mes "Ferre...";
+	npctalk "Ferre: Ferre...", .@ferre$;
+	next;
+	enablenpc .@roter$;
+	enablenpc instance_npcname("Gelka#24");
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "Newoz, you're alive! Good, because I'm going to kill...";
+	npctalk "Roter: Newoz, you're alive! Good, because I'm going to kill...", .@roter$;
+	next;
+	enablenpc .@aigu$;
+	enablenpc instance_npcname("Lagi#24");
+	cutin "igu05",0;
+	mes "[Aigu]";
+	mes "Newoz, are you all right?";
+	npctalk "Aigu: Newoz, are you all right?", .@aigu$;
+	next;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "I'm all right. Rot, were you worried about me?";
+	npctalk "Newoz: I'm all right. Rot, were you worried about me?";
+	next;
+	enablenpc .@melody$;
+	enablenpc .@mingmin$;
+	enablenpc .@arang$;
+	enablenpc .@runane$;
+	enablenpc .@roel$;
+	sleep2 500;
+	emotion ET_FRET, getnpcid(0,.@roter$);
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	cutin "",255;
+	mes "[Melody-Jack]";
+	mes "Wow, this place is not going to last long--look how violently the ground is shaking! We really need to get out like yesterday, Newoz.";
+	npctalk "Melody-Jack: Wow, this place is not going to last long--look how violently the ground is shaking! We really need to get out like yesterday, Newoz.", .@melody$;
+	next;
+	mes "[Ferre]";
+	mes "Ferre...";
+	npctalk "Ferre: Ferre...", .@ferre$;
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "He's not dead. Guys, I understand you're new, but you can't make mistakes like this.";
+	npctalk "Roter: He's not dead. Guys, I understand you're new, but you can't make mistakes like this.", .@roter$;
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "Better get rid of him quickly.";
+	npctalk "Melody-Jack: Better get rid of him quickly.", .@melody$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "NO! He's my friend!";
+	npctalk "Shaloshi: NO! He's my friend!", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "Ferre created this space in the Crack for me. If he loses his mind or perishes, this space will disappear with everything in it.";
+	npctalk "Shaloshi: Ferre created this space in the Crack for me. If he loses his mind or perishes, this space will disappear with everything in it.", .@shaloshi$;
+	next;
+	cutin "min02",2;
+	mes "[Mingmin]";
+	mes "Except you, you mean.";
+	npctalk "Mingmin: Except you, you mean.", .@mingmin$;
+	next;
+	emotion ET_DELIGHT, getnpcid(0,instance_npcname("Newoz#24"));
+	npctalk "Newoz: What did the farmer say to the green pumpkin? Why orange you orange?", instance_npcname("Newoz#24");
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "...";
+	npctalk "Shaloshi: ...", .@shaloshi$;
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "I should have plenty of time before that to get rid of you. I'll show you why I'm called the Bad Boy of the Exorcist World.";
+	npctalk "Roter: I should have plenty of time before that to get rid of you. I'll show you why I'm called the Bad Boy of the Exorcist World.", .@roter$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "If I take Ferre with me to a different space, then a number of exits will appear in the loosened rift in spacetime.";
+	npctalk "Shaloshi: If I take Ferre with me to a different space, then a number of exits will appear in the loosened rift in spacetime.", .@shaloshi$;
+	next;
+	cutin "",255;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	mes "[Melody-Jack]";
+	mes "You're smart and capable of teleportation. Roter, we can't let her go.";
+	npctalk "Melody-Jack: You're smart and capable of teleportation. Roter, we can't let her go.", .@melody$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "I shouldn't have led you here, but I really wanted some friends.";
+	npctalk "Shaloshi: I shouldn't have led you here, but I really wanted some friends.", .@shaloshi$;
+	next;
+	cutin "nines03",0;
+	mes "[Newoz]";
+	mes "And you have them. Us.";
+	npctalk "Newoz: And you have them. Us.";
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "...Thank you.";
+	npctalk "Shaloshi: ...Thank you.", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "Now I should be honest with you. I remember everything now. Let me introduce myself again.";
+	npctalk "Shaloshi: Now I should be honest with you. I remember everything now. Let me introduce myself again.", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "I'm Shaloshi, a demon mind reader and the third agent of Morocc's.";
+	npctalk "Shaloshi: I'm Shaloshi, a demon mind reader and the third agent of Morocc's.", .@shaloshi$;
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "MOROCC?!";
+	npctalk "Roter: MOROCC?!", .@roter$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "...I'm free now, but that doesn't change who I am: a demon.";
+	npctalk "Shaloshi: ...I'm free now, but that doesn't change who I am: a demon.", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "I enjoyed your company. If we meet again... Will we be enemies?";
+	npctalk "Shaloshi: I enjoyed your company. If we meet again... Will we be enemies?", .@shaloshi$;
+	next;
+	cutin "nines03",0;
+	mes "[Newoz]";
+	mes "No, Shaloshi. As of today, you're a new member of Newoz's White Wings Guild.";
+	npctalk "Newoz: No, Shaloshi. As of today, you're a new member of Newoz's White Wings Guild.";
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "Who says you can invite her? I'm not taking in a demon!";
+	npctalk "Roter: Who says you can invite her? I'm not taking in a demon!", .@roter$;
+	next;
+	cutin "arang02",2;
+	mes "[Arang]";
+	mes "Guildsmen can bicker with each other, but they're still family.";
+	npctalk "Arang: Guildsmen can bicker with each other, but they're still family.", .@arang$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "...Thank you, Adventurer Newoz. If I find some interesting place, can I invite you over?";
+	npctalk "Shaloshi: ...Thank you, Adventurer Newoz. If I find some interesting place, can I invite you over?", .@shaloshi$;
+	next;
+	mes "[Shaloshi]";
+	mes "I think I have the ability to take people with me, wherever I go. Or you wouldn't have followed me this far.";
+	npctalk "Shaloshi: I think I have the ability to take people with me, wherever I go. Or you wouldn't have followed me this far.", .@shaloshi$;
+	next;
+	cutin "lunain04",0;
+	mes "[Runane]";
+	mes "Don't you dare take away my Newoz!";
+	npctalk "Runane: Don't you dare take away my Newoz!", .@runane$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "You just thought, 'take me, too!'";
+	npctalk "Shaloshi: You just thought, 'take me, too!'", .@shaloshi$;
+	next;
+	cutin "igu03",0;
+	mes "[Aigu]";
+	mes "Aww, Runane. You're cute!";
+	npctalk "Aigu: Aww, Runane. You're cute!", .@aigu$;
+	next;
+	cutin "roel04",2;
+	mes "[Roel]";
+	mes "Shaloshi, I don't care who you are. You're my friend, and I'm yours.";
+	npctalk "Roel: Shaloshi, I don't care who you are. You're my friend, and I'm yours.", .@roel$;
+	next;
+	cutin "shaloshi01",2;
+	mes "[Shaloshi]";
+	mes "Thank you. If only I knew how to express my feelings...";
+	npctalk "Shaloshi: Thank you. If only I knew how to express my feelings...", .@shaloshi$;
+	next;
+	cutin "igu05",0;
+	mes "[Aigu]";
+	mes "It's easy. Just smile.";
+	npctalk "Aigu: It's easy. Just smile.", .@aigu$;
+	next;
+	cutin "shaloshi04",2;
+	mes "[Shaloshi]";
+	mes "Bye, friends. I hope we'll meet again soon.";
+	npctalk "Shaloshi: Bye, friends. I hope we'll meet again soon.", .@shaloshi$;
+	next;
+	specialeffect EF_PORTAL2,AREA, .@shaloshi$;
+	specialeffect EF_PORTAL2,AREA, .@ferre$;
+	disablenpc .@shaloshi$;
+	disablenpc .@ferre$;
+	cutin "nines01",0;
+	mes "[Newoz]";
+	mes "Bye.";
+	npctalk "Newoz: Bye.";
+	next;
+	cutin "rote01",2;
+	mes "[Roter]";
+	mes "Don't look at me. Is that an exit?";
+	npctalk "Roter: Don't look at me. Is that an exit?", .@roter$;
+	close2;
+	cutin "",255;
+	if ('room == 24 && is_party_leader() == true)
+		donpcevent 'jitterbug_main$ + "::OnNextIs5";
+	end;
+}
+
+1@jtb,326,329,4	duplicate(???#02)	Shaloshi#24	4_F_SHALOSH
+1@jtb,324,327,4	duplicate(???#02)	Ferre#25	4_F_PERE01
+
+1@jtb,328,326,4	duplicate(???#02)	Roter#24	4_M_ROTERT
+1@jtb,330,328,4	duplicate(???#02)	Gelka#24	4_F_GELKA
+1@jtb,328,324,4	duplicate(???#02)	Mingmin#24	4_F_GENETIC
+1@jtb,317,325,5	duplicate(???#02)	Aigu#24	4_F_IU
+1@jtb,316,322,5	duplicate(???#02)	Lagi#24	4_M_RAGI
+1@jtb,319,320,5	duplicate(???#02)	Arang#24	4_F_TAEKWON
+1@jtb,321,318,4	duplicate(???#02)	Runane#24	4_F_RUNAIN
+1@jtb,326,319,4	duplicate(???#02)	Roel#24	4_M_ROEL
+1@jtb,325,322,4	duplicate(???#02)	Melody-Jack#24	CLEAR_NPC
+
+
+// Room 5 (Exit)
+1@jtb,379,31,4	script	Newoz#05	4_M_NEWOZ,{
+	if ('room != 25 || is_party_leader() == false) {
+		cutin "nines01",2;
+		mes "[Newoz]";
+		mes "It's been a while since I had so much fun.";
+		if ('room >= 25 && isbegin_quest(13181) == 1)	// officially, complete the quest for members
+			completequest 13181;
+		close3;
+	}
+	.@aigu$ = instance_npcname("Aigu#05");
+	.@roter$ = instance_npcname("Roter#05");
+	.@runane$ = instance_npcname("Runane#05");
+	.@melody$ = instance_npcname("Melody-Jack#05");
+	.@mingmin$ = instance_npcname("Mingmin#05");
+
+	cutin "nines02",2;
+	emotion ET_DELIGHT;
+	mes "[Newoz]";
+	mes "This was my first adventure with my old friends in a long time. I hope we can do this again soon.";
+	npctalk "Newoz: This was my first adventure with my old friends in a long time. I hope we can do this again soon.";
+	next;
+	cutin "rote01",0;
+	emotion ET_STARE, getnpcid(0,.@roter$);
+	mes "[Roter]";
+	mes "Newoz. Need I remind you this guild is no longer called Newoz's White Wings?";
+	npctalk "Roter: Newoz. Need I remind you this guild is no longer called Newoz's White Wings?", .@roter$;
+	next;
+	cutin "nines04",2;
+	mes "[Newoz]";
+	mes "What? Did you change the guild name?";
+	npctalk "Newoz: What? Did you change the guild name?";
+	next;
+	cutin "rote01",0;
+	emotion ET_HNG, getnpcid(0,.@roter$);
+	mes "[Roter]";
+	mes "Of course! Now it's called... Um...";
+	npctalk "Roter: Of course! Now it's called... Um...", .@roter$;
+	next;
+	emotion ET_OHNO, getnpcid(0,.@mingmin$);
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Stop thinking and just keep the old name.";
+	npctalk "Mingmin: Stop thinking and just keep the old name.", .@mingmin$;
+	emotion ET_SCRATCH, getnpcid(0,.@mingmin$);
+	next;
+	emotion ET_SPARK, getnpcid(0,.@roter$);
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "Nope, I'm going to call it Roter's Super Critical Guild!";
+	npctalk "Roter: Nope, I'm going to call it Roter's Super Critical Guild!", .@roter$;
+	emotion ET_SHY, getnpcid(0,.@roter$);
+	next;
+	emotion ET_OTL, getnpcid(0,.@aigu$);
+	cutin "igu05",2;
+	mes "[Aigu]";
+	mes "...";
+	npctalk "Aigu: ...", .@aigu$;
+	next;
+	mes "[Aigu]";
+	mes "That sounds lame.";
+	npctalk "Aigu: That sounds lame.", .@aigu$;
+	next;
+	cutin "roel04",2;
+	mes "[Roel]";
+	mes "I'm not a fan of it.";
+	npctalk "Roel: I'm not a fan of it.", instance_npcname("Roel#05");
+	next;
+	cutin "lunain04",0;
+	mes "[Runane]";
+	mes "Dorky.";
+	npctalk "Runane: Dorky.", .@runane$;
+	next;
+	cutin "rote01",0;
+	emotion ET_STARE, getnpcid(0,.@roter$);
+	mes "[Roter]";
+	mes "I'm the guild master! I name it whatever I want!";
+	npctalk "Roter: I'm the guild master! I name it whatever I want!", .@roter$;
+	next;
+	cutin "arang01",2;
+	mes "[Arang]";
+	mes "Not cool.";
+	npctalk "Arang: Not cool.", instance_npcname("Arang#05");
+	next;
+	emotion ET_KIK, getnpcid(0,.@mingmin$);
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "Keep the name. I'm out.";
+	npctalk "Mingmin: Keep the name. I'm out.", .@mingmin$;
+	next;
+	emotion ET_HUK, getnpcid(0,.@roter$);
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "You can't do that!";
+	npctalk "Roter: You can't do that!", .@roter$;
+	next;
+	cutin "",255;
+	mes "[Melody-Jack]";
+	mes "I'm not a member, but if you ask me, that name...";
+	npctalk "Melody-Jack: I'm not a member, but if you ask me, that name...", .@melody$;
+	emotion ET_THINK, getnpcid(0,.@melody$);
+	next;
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "I'll never be able to speak that name. Aigu, are you sure you want to stick with these guys?";
+	npctalk "Lagi: I'll never be able to speak that name. Aigu, are you sure you want to stick with these guys?", instance_npcname("Lagi#05");
+	next;
+	cutin "igu02",2;
+	mes "[Aigu]";
+	mes "I don't care. I'm staying with Newoz.";
+	npctalk "Aigu: I don't care. I'm staying with Newoz.", .@aigu$;
+	emotion ET_BIGTHROB, getnpcid(0,.@aigu$);
+	next;
+	cutin "lunain04",0;
+	mes "[Runane]";
+	mes "I just don't like the name.";
+	npctalk "Runane: I just don't like the name.", .@runane$;
+	next;
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "Shush! We've had enough for a day. You all are dismissed! This concludes the adventure of Roter's Super Critical Guild!";
+	npctalk "Roter: Shush! We've had enough for a day. You all are dismissed! This concludes the adventure of Roter's Super Critical Guild!", .@roter$;
+	completequest 13181;
+	if ('room == 25) {
+		'room = 26;
+		enablenpc instance_npcname("24 Door 1");
+	}
+	close3;
+}
+
+1@jtb,363,11,5	script	Melody-Jack#05	CLEAR_NPC,{
+	mes "[Melody-Jack]";
+	mes "Our deal is done. Let me think about what I want in return...";
+	close;
+}
+
+1@jtb,358,25,5	script	Gelka#05	4_F_GELKA,{
+	cutin "gelca01",0;
+	mes "[Gelka]";
+	mes "I will! I'll practice harder, too!";
+	close3;
+}
+
+1@jtb,385,20,5	script	Runane#05	4_F_RUNAIN,{
+	cutin "lunain03",0;
+	mes "[Runane]";
+	mes "I want to go home. I really want to take a shower and eat some bread.";
+	close3;
+}
+
+1@jtb,375,31,5	script	Roter#05	4_M_ROTERT,{
+	cutin "rote01",0;
+	mes "[Roter]";
+	mes "You're a prospect for now. Work hard for the guild, and I might promote you one day.";
+	close3;
+}
+
+1@jtb,380,28,4	script	Aigu#05	4_F_IU,{
+	cutin "igu03",2;
+	mes "[Aigu]";
+	mes "I'll never again let you go, Newoz!";
+	close3;
+}
+
+1@jtb,359,43,5	script	Lagi#05	4_M_RAGI,{
+	cutin "ragi01",0;
+	mes "[Lagi]";
+	mes "I've found so much inspiration through this adventure. I'm hopeful I can write some good songs.";
+	close3;
+}
+
+1@jtb,378,47,5	script	Arang#05	4_F_TAEKWON,{
+	cutin "arang03",0;
+	mes "[Arang]";
+	mes "Roel and I are friends now. Heh.";
+	close3;
+}
+
+1@jtb,381,47,4	script	Roel#05	4_M_ROEL,{
+	cutin "roel03",2;
+	mes "[Roel]";
+	mes "I want to dance as well as Aigu.";
+	close3;
+}
+
+// Exchange npc
+1@jtb,375,28,5	script	Mingmin#05	4_F_GENETIC,{
+	disable_items;
+	if (!checkweight(18122,1) || (MaxWeight - Weight) < 1000) {// custom - officially no check of the weight
+		mes "- Wait a minute !! -";
+		mes "- Currently you're carrying -";
+		mes "- too many items with you. -";
+		mes "- Please try again -";
+		mes "- after you loose some weight. -";
+		close;
+	}
+	cutin "min02",0;
+	mes "[Mingmin]";
+	mes "I've stolen a few strands of hair from Shaloshi, thinking it'd come in handy someday. I want to analyze them, though I already know the results.";
+	next;
+	switch( select( "Strange Pendant", "Jitterbug Tooth", "Quit." ) ) {
+	case 1:
+		mes "[Mingmin]";
+		mes "Have you seen this pendant?";
+		next;
+		mes "[Mingmin]";
+		mes "I think I can fit Pendant of Harmony and Pendant of Chaos together.";
+		next;
+		mes "[Mingmin]";
+		mes "And if I do, the results will be incredible!";
+		next;
+		mes "[Mingmin]";
+		mes "ATK +6%. MATK +6%. All stats +1.";
+		mes "Magic attacks from enemies cast Level 1 Auto Spell Maelstrom.";
+		mes "DEF: 0 Weight: 10 Required Level: 130";
+		mes "Slot: 1";
+		next;
+		mes "[Mingmin]";
+		mes "If my description of the combination results is strangely familiar to you, I wouldn't know. But that's how I picture the results. If you find both the pendants, bring them to me, yeah?";
+		next;
+		if ((countitem(2990) - isequippedcnt(2990)) > 0 && (countitem(2991) - isequippedcnt(2991)) > 0) {
+			mes "[Mingmin]";
+			mes "Oooh, you've got some nice pendants. Do you want to combine them? It's failproof, I guarantee.";
+			next;
+			if (select( "Quit.", "Combine." ) == 2) {
+				mes "[Mingmin]";
+				mes "The combining process is really simple. I just place the Pendant of Harmony on the ground, then throw the Pendant of Chaos at it... like this!";
+				next;
+				specialeffect EF_PHARMACY_FAIL;
+				mes "[Mingmin]";
+				mes "Oh, did I fail?";
+				next;
+				mes "[Mingmin]";
+				mes "*Chuckle* I was messing with you--it worked!";
+				delitem	2990,1;// Pendant_Of_Harmony
+				delitem	2991,1;// Pendant_Of_Chaos
+				getitem 2992,1;// Pendant_Of_Maelstorm
+				next;
+				mes "[Mingmin]";
+				mes "Ah, combining items is fun.";
+				next;
+			}
+		}
+		break;
+	case 2:
+		mes "[Mingmin]";
+		mes "Do you have Jitterbug Teeth?";
+		next;
+		mes "[Mingmin]";
+		mes "I can't tell you just yet, but they're useful to me. Bring them to me, and I'll give you some booty Newoz has hoarded in return.";
+		next;
+		mes "[Mingmin]";
+		mes "What exactly am I offering? Gigantic Bow, Storm Bow, and ^FF0000other valuable things found in this space.^000000 If you want them, bring me at least 50 Jitterbug Teeth.";
+		next;
+		mes "[Mingmin]";
+		mes "I'll exchange 50 Jitterbug Teeth with ^FF0000a random item.^000000";
+		next;
+		if (select( "Quit.", "Exchange 50." ) == 2) {
+			if (countitem(6719) < 50) {// Tooth_Of_Jitterbug
+				mes "[Mingmin]";
+				mes "I won't accept anything less than 50 Jitterbug Teeth.";
+			}
+			else {
+				mes "[Mingmin]";
+				mes "All right! Let me think about what I want to give you...";
+				next;
+				delitem 6719,50;// Tooth_Of_Jitterbug
+				.@item_id = F_Rand(
+					616,	// Old_Card_Album
+					1935,	// Ukulele_Of_Newoz
+					1990,	// Floral_Mic_Of_Igu
+					2988,	// Winged_Ring_Of_Newoz
+					2989,	// Floral_Bracelet_Of_Igu
+					2990,	// Pendant_Of_Harmony
+					2991,	// Pendant_Of_Chaos
+					12246,	// Magic_Card_Album
+					15100,	// Frozen_Breastplate
+					15101,	// Harden_Breastplate
+					18122,	// Gigantic_Bow
+					18123	// Bow_Of_Storm
+				 );
+				getitem .@item_id,1;
+				mes "[Mingmin]";
+				mes "Enjoy your item. Bring more Jitterbug Teeth if you want more items.";
+			}
+			next;
+		}
+		break;
+	case 3:
+		break;
+	}
+	mes "[Mingmin]";
+	mes "This place is still full of things to study.";
+	close3;
+}
+
+
+1@jtb,1,1,0	script	#jitterbug_main	-1,{
+	end;
+OnNextIs2:
+	'room = 2;
+	enablenpc instance_npcname("1 Door 1");
+	areamonster 'map_jtb$,100,13,133,46, "--ja--", 3069,10, 'jitterbug_main$ + "::OnMobDead2";// PERE1
+	end;
+OnMobDead2:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead2") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Aigu#02");
+		enablenpc instance_npcname("Runane#02");
+	}
+	end;
+
+OnNextIs3:
+	'room = 3;
+	enablenpc instance_npcname("2 Door 1");
+	areamonster 'map_jtb$,180,12,220,46, "--ja--", 3069,10, 'jitterbug_main$ + "::OnMobDead3";// PERE1
+	end;
+OnMobDead3:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead3") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Roter#03");
+		enablenpc instance_npcname("Gelka#03");
+	}
+	end;
+
+OnNextIs4:
+	'room = 4;
+	enablenpc instance_npcname("3 Door 1");
+	areamonster 'map_jtb$,268,14,305,46, "--ja--", 3069,20, 'jitterbug_main$ + "::OnMobDead4";// PERE1
+	end;
+OnMobDead4:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead4") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("???#04");
+	}
+	end;
+
+OnNextIs6:
+	'room = 6;
+	enablenpc instance_npcname("4 Door 1");
+	areamonster 'map_jtb$,11,97,47,130, "--ja--", 3069,20, 'jitterbug_main$ + "::OnMobDead6";// PERE1
+	end;
+OnMobDead6:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead6") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#06");
+		enablenpc instance_npcname("Aigu#06");
+		enablenpc instance_npcname("Shaloshi#06");
+		enablenpc instance_npcname("Arang#06");
+	}
+	end;
+
+OnNextIs7:
+	'room = 7;
+	enablenpc instance_npcname("6 Door 1");
+	areamonster 'map_jtb$,94,96,131,131, "--ja--", 3069,10, 'jitterbug_main$ + "::OnMobDead7";// PERE1
+	areamonster 'map_jtb$,94,96,131,131, "--ja--", 3070,5,  'jitterbug_main$ + "::OnMobDead7";// PERE2
+	end;
+OnMobDead7:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead7") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Roel#07");
+		enablenpc instance_npcname("Runane#07");
+		enablenpc instance_npcname("Aigu#07");
+	}
+	end;
+
+OnNextIs8:
+	'room = 8;
+	enablenpc instance_npcname("7 Door 1");
+	areamonster 'map_jtb$,182,95,219,131, "--ja--", 3069,15, 'jitterbug_main$ + "::OnMobDead8";// PERE1
+	areamonster 'map_jtb$,182,95,219,131, "--ja--", 3070,5,  'jitterbug_main$ + "::OnMobDead8";// PERE2
+	end;
+OnMobDead8:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead8") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Mingmin#08");
+		enablenpc instance_npcname("Shaloshi#08");
+		enablenpc instance_npcname("Newoz#08");
+	}
+	end;
+
+OnNextIs9:
+	'room = 9;
+	enablenpc instance_npcname("8 Door 1");
+	areamonster 'map_jtb$,268,131,306,95, "--ja--", 3069,22, 'jitterbug_main$ + "::OnMobDead9";// PERE1
+	areamonster 'map_jtb$,268,131,306,95, "--ja--", 3070,5,  'jitterbug_main$ + "::OnMobDead9";// PERE2
+	end;
+OnMobDead9:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead9") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#09");
+		enablenpc instance_npcname("Lagi#09");
+		enablenpc instance_npcname("Shaloshi#09");
+	}
+	end;
+
+OnNextIs10:
+	'room = 10;
+	enablenpc instance_npcname("9 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead10";
+	areamonster 'map_jtb$,351,131,389,96, "--ja--", 3069,10, .@label$;// PERE1
+	areamonster 'map_jtb$,351,131,389,96, "--ja--", 3071,5,  .@label$;// PERE3
+	areamonster 'map_jtb$,351,131,389,96, "--ja--", 3108,1,  .@label$;// JITTERBUG1
+	end;
+OnMobDead10:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead10") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#10");
+		enablenpc instance_npcname("Shaloshi#10");
+		enablenpc instance_npcname("Roel#10");
+		enablenpc instance_npcname("Runane#10");
+	}
+	end;
+
+OnNextIs11:
+	'room = 11;
+	enablenpc instance_npcname("10 Door 1");
+	areamonster 'map_jtb$,11,218,48,182, "--ja--", 3069,10, 'jitterbug_main$ + "::OnMobDead11";// PERE1
+	areamonster 'map_jtb$,11,218,48,182, "--ja--", 3070,5,  'jitterbug_main$ + "::OnMobDead11";// PERE2
+	end;
+OnMobDead11:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead11") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Runane#11");
+		enablenpc instance_npcname("Roel#11");
+		enablenpc instance_npcname("Arang#11");
+		enablenpc instance_npcname("Aigu#11");
+		enablenpc instance_npcname("Mingmin#11");
+	}
+	end;
+
+OnNextIs12:
+	'room = 12;
+	enablenpc instance_npcname("11 Door 1");
+	areamonster 'map_jtb$,94,218,132,182, "--ja--", 3069,10, 'jitterbug_main$ + "::OnMobDead12";// PERE1
+	end;
+OnMobDead12:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead12") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Mingmin#12");
+	}
+	end;
+
+OnNextIs13:
+	'room = 13;
+	enablenpc instance_npcname("12 Door 1");
+	areamonster 'map_jtb$,180,217,218,182, "--ja--", 3069,15, 'jitterbug_main$ + "::OnMobDead13";// PERE1
+	areamonster 'map_jtb$,180,217,218,182, "--ja--", 3070,5,  'jitterbug_main$ + "::OnMobDead13";// PERE2
+	end;
+OnMobDead13:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead13") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#13");
+		enablenpc instance_npcname("Melody-Jack#13");
+	}
+	end;
+
+OnNextIs14:
+	'room = 14;
+	disablenpc instance_npcname("Melody-Jack#13");
+	enablenpc instance_npcname("13 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead14";
+	areamonster 'map_jtb$,268,216,305,181, "--ja--", 3069,15, .@label$;// PERE1
+	areamonster 'map_jtb$,268,216,305,181, "--ja--", 3070,5,  .@label$;// PERE2
+	areamonster 'map_jtb$,268,216,305,181, "--ja--", 3071,5,  .@label$;// PERE3
+	end;
+OnMobDead14:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead14") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#14");
+		enablenpc instance_npcname("Shaloshi#14");
+		enablenpc instance_npcname("Lagi#14");
+		enablenpc instance_npcname("Aigu#14");
+		enablenpc instance_npcname("Roel#14");
+		enablenpc instance_npcname("Mingmin#14");
+	}
+	end;
+
+OnNextIs15:
+	'room = 15;
+	enablenpc instance_npcname("14 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead15";
+	areamonster 'map_jtb$,358,212,388,182, "--ja--", 3069,20, .@label$;// PERE1
+	areamonster 'map_jtb$,358,212,388,182, "--ja--", 3070,10, .@label$;// PERE2
+	areamonster 'map_jtb$,358,212,388,182, "--ja--", 3109,1,  .@label$;// JITTERBUG2
+	end;
+OnMobDead15:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead15") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#15");
+		enablenpc instance_npcname("Mingmin#15");
+		enablenpc instance_npcname("Gelka#15");
+		enablenpc instance_npcname("Shaloshi#15");
+		enablenpc instance_npcname("Arang#15");
+		enablenpc instance_npcname("Runane#15");
+		enablenpc instance_npcname("Roter#15");
+		enablenpc instance_npcname("Roel#15");
+	}
+	end;
+
+OnNextIs16:
+	'room = 16;
+	enablenpc instance_npcname("15 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead16";
+	areamonster 'map_jtb$,13,300,47,267, "--ja--", 3069,10, .@label$;// PERE1
+	areamonster 'map_jtb$,13,300,47,267, "--ja--", 3070,10, .@label$;// PERE2
+	areamonster 'map_jtb$,13,300,47,267, "--ja--", 3071,10, .@label$;// PERE3
+	areamonster 'map_jtb$,13,300,47,267, "--ja--", 3072,5,  .@label$;// PERE4
+	end;
+OnMobDead16:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead16") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#16");
+		enablenpc instance_npcname("Mingmin#16");
+		enablenpc instance_npcname("Roter#16");
+	}
+	end;
+
+OnNextIs17:
+	'room = 17;
+	enablenpc instance_npcname("16 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead17";
+	areamonster 'map_jtb$,104,297,132,268, "--ja--", 3069,8, .@label$;// PERE1
+	areamonster 'map_jtb$,104,297,132,268, "--ja--", 3070,10,.@label$;// PERE2
+	areamonster 'map_jtb$,104,297,132,268, "--ja--", 3071,5, .@label$;// PERE3
+	areamonster 'map_jtb$,104,297,132,268, "--ja--", 3072,7, .@label$;// PERE4
+	end;
+OnMobDead17:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead17") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Shaloshi#17");
+		enablenpc instance_npcname("Runane#17");
+		enablenpc instance_npcname("Aigu#17");
+	}
+	end;
+
+OnNextIs18:
+	'room = 18;
+	enablenpc instance_npcname("17 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead18";
+	monster 'map_jtb$, 210, 272, "--ja--", 3069,1, .@label$;// PERE1
+	monster 'map_jtb$, 211, 273, "--ja--", 3071,1, .@label$;// PERE3
+	monster 'map_jtb$, 212, 272, "--ja--", 3072,1, .@label$;// PERE4
+	monster 'map_jtb$, 209, 273, "--ja--", 3072,1, .@label$;
+	monster 'map_jtb$, 213, 273, "--ja--", 3070,1, .@label$;// PERE2
+	monster 'map_jtb$, 211, 274, "--ja--", 3070,1, .@label$;
+	monster 'map_jtb$, 212, 275, "--ja--", 3070,1, .@label$;
+	monster 'map_jtb$, 213, 275, "--ja--", 3070,1, .@label$;
+	monster 'map_jtb$, 213, 276, "--ja--", 3070,1, .@label$;
+
+	areamonster 'map_jtb$,183,301,220,272, "--ja--", 3069,5, .@label$;// PERE1
+	areamonster 'map_jtb$,183,301,220,272, "--ja--", 3070,8, .@label$;// PERE2
+	areamonster 'map_jtb$,183,301,220,272, "--ja--", 3071,5, .@label$;// PERE3
+	areamonster 'map_jtb$,183,301,220,272, "--ja--", 3072,5, .@label$;// PERE4
+	areamonster 'map_jtb$,183,301,220,272, "--ja--", 3108,1, .@label$;// JITTERBUG1
+	end;
+OnMobDead18:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead18") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Shaloshi#18");
+		enablenpc instance_npcname("Runane#18");
+		enablenpc instance_npcname("Roel#18");
+	}
+	end;
+
+OnNextIs19:
+	'room = 19;
+	enablenpc instance_npcname("18 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead19";
+	areamonster 'map_jtb$,13,389,45,355, "--ja--", 3069,5, .@label$;// PERE1
+	areamonster 'map_jtb$,13,389,45,355, "--ja--", 3070,9, .@label$;// PERE2
+	areamonster 'map_jtb$,13,389,45,355, "--ja--", 3071,9, .@label$;// PERE3
+	areamonster 'map_jtb$,13,389,45,355, "--ja--", 3072,9, .@label$;// PERE4
+	end;
+OnMobDead19:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead19") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#19");
+		enablenpc instance_npcname("Melody-Jack#19");
+		enablenpc instance_npcname("Roter#19");
+		enablenpc instance_npcname("Mingmin#19");
+		enablenpc instance_npcname("Aigu#19");
+		enablenpc instance_npcname("Arang#19");
+		enablenpc instance_npcname("Lagi#19");
+		enablenpc instance_npcname("Gelka#19");
+	}
+	end;
+
+OnNextIs20:
+	'room = 20;
+	enablenpc instance_npcname("19 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead20";
+	areamonster 'map_jtb$,95,387,133,352, "--ja--", 3069,3, .@label$;// PERE1
+	areamonster 'map_jtb$,95,387,133,352, "--ja--", 3070,10, .@label$;// PERE2
+	areamonster 'map_jtb$,95,387,133,352, "--ja--", 3072,6, .@label$;// PERE4
+	end;
+OnMobDead20:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead20") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Roel#20");
+		enablenpc instance_npcname("Gelka#20");
+	}
+	end;
+
+OnNextIs21:
+	'room = 21;
+	enablenpc instance_npcname("20 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead21";
+	areamonster 'map_jtb$,182,387,219,354, "--ja--", 3069,10, .@label$;// PERE1
+	areamonster 'map_jtb$,182,387,219,354, "--ja--", 3070,10, .@label$;// PERE2
+	areamonster 'map_jtb$,182,387,219,354, "--ja--", 3071,10, .@label$;// PERE3
+	areamonster 'map_jtb$,182,387,219,354, "--ja--", 3072,10, .@label$;// PERE4
+	areamonster 'map_jtb$,182,387,219,354, "--ja--", 3109,1,  .@label$;// JITTERBUG2
+	end;
+OnMobDead21:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead21") == 0) {
+		sleep 1500;
+		enablenpc instance_npcname("Newoz#21");
+		enablenpc instance_npcname("Melody-Jack#21");
+		enablenpc instance_npcname("Arang#21");
+		enablenpc instance_npcname("Gelka#21");
+		enablenpc instance_npcname("Mingmin#21");
+		enablenpc instance_npcname("Runane#21");
+		enablenpc instance_npcname("Roel#21");
+		enablenpc instance_npcname("Lagi#21");
+		enablenpc instance_npcname("Aigu#21");
+		enablenpc instance_npcname("Roter#21");
+		enablenpc instance_npcname("Shaloshi#21");
+	}
+	end;
+
+OnNextIs22:
+	'room = 22;
+	enablenpc instance_npcname("21 Door 1");
+	.@label$ = 'jitterbug_main$ + "::OnMobDead22";
+	monster 'map_jtb$, 288, 339, "--ja--", 3069,1, .@label$;// PERE1
+	monster 'map_jtb$, 288, 319, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 288, 309, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 287, 296, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 299, 295, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 310, 294, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 323, 295, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 334, 295, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 344, 295, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 353, 294, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 357, 300, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 357, 307, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 358, 317, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 358, 325, "--ja--", 3069,1, .@label$;
+	monster 'map_jtb$, 358, 338, "--ja--", 3069,1, .@label$;
+	end;
+OnMobDead22:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead22") == 0) {
+		sleep 1500;
+		if ('room == 22) {
+			'room = 23;
+			enablenpc instance_npcname("22 Door 1");
+			enablenpc instance_npcname("Ferre#23");
+			enablenpc instance_npcname("Shaloshi#23");
+			enablenpc instance_npcname("Newoz#23");
+		}
+	}
+	end;
+
+OnNextIs23:
+	'room = 24;
+	disablenpc instance_npcname("22 Door 1");	// can't enter in the boss room anymore
+	disablenpc instance_npcname("Ferre#24");
+	disablenpc instance_npcname("Newoz#23");
+	disablenpc instance_npcname("Shaloshi#23");
+	donpcevent instance_npcname("Newoz#boss") + "::OnStart";
+
+	.@label$ = 'jitterbug_main$ + "::OnMobDead23";
+	for ( .@id = 3069; .@id < 3072; .@id++ ) {
+		monster 'map_jtb$,323,315, "--ja--", .@id, 1;// no label
+		monster 'map_jtb$,331,324, "--ja--", .@id, 1;
+		monster 'map_jtb$,322,338, "--ja--", .@id, 1;
+		monster 'map_jtb$,314,325, "--ja--", .@id, 1;
+	}
+	monster 'map_jtb$,322,335, "Awakened Ferre", 3073,1, .@label$;	// GRAND_PERE
+	'boss_id = $@mobid[0];
+	end;
+OnMobDead23:
+	if (mobcount('map_jtb$, 'jitterbug_main$ + "::OnMobDead23") == 0) {
+		sleep 1500;
+		donpcevent instance_npcname("Newoz#boss") + "::OnStop";
+		enablenpc instance_npcname("Newoz#24");
+		enablenpc instance_npcname("Shaloshi#24");
+		enablenpc instance_npcname("Ferre#25");
+		'boss_id = 0;
+	}
+	end;
+
+OnNextIs5:
+	'room = 25;
+	enablenpc instance_npcname("23 Door 1");// note: dead players are not warped
+	enablenpc instance_npcname("Newoz#05");
+	enablenpc instance_npcname("Melody-Jack#05");
+	enablenpc instance_npcname("Gelka#05");
+	enablenpc instance_npcname("Runane#05");
+	enablenpc instance_npcname("Roter#05");
+	enablenpc instance_npcname("Aigu#05");
+	enablenpc instance_npcname("Lagi#05");
+	enablenpc instance_npcname("Arang#05");
+	enablenpc instance_npcname("Roel#05");
+	enablenpc instance_npcname("Mingmin#05");
+	end;
+
+
+OnInstanceInit:
+	// false: some npcs are not disabled when choosing 'Hurry' (official)
+	// true: disable the npcs
+	'additionnal_option = false;
+
+	'room = 1;
+	'boss_id = 0;
+	'map_jtb$ = instance_mapname("1@jtb");
+	'jitterbug_main$ = instance_npcname("#jitterbug_main");
+
+	// warps
+	disablenpc instance_npcname("1 Door 1");
+	disablenpc instance_npcname("2 Door 1");
+	disablenpc instance_npcname("3 Door 1");
+	disablenpc instance_npcname("4 Door 1");
+	disablenpc instance_npcname("6 Door 1");
+	disablenpc instance_npcname("7 Door 1");
+	disablenpc instance_npcname("8 Door 1");
+	disablenpc instance_npcname("9 Door 1");
+	disablenpc instance_npcname("10 Door 1");
+	disablenpc instance_npcname("11 Door 1");
+	disablenpc instance_npcname("12 Door 1");
+	disablenpc instance_npcname("13 Door 1");
+	disablenpc instance_npcname("14 Door 1");
+	disablenpc instance_npcname("15 Door 1");
+	disablenpc instance_npcname("16 Door 1");
+	disablenpc instance_npcname("17 Door 1");
+	disablenpc instance_npcname("18 Door 1");
+	disablenpc instance_npcname("19 Door 1");
+	disablenpc instance_npcname("20 Door 1");
+	disablenpc instance_npcname("21 Door 1");
+	disablenpc instance_npcname("22 Door 1");
+	disablenpc instance_npcname("23 Door 1");
+	disablenpc instance_npcname("24 Door 1");
+
+	// Room 2
+	disablenpc instance_npcname("Aigu#02");
+	disablenpc instance_npcname("???#02");
+	disablenpc instance_npcname("Runane#02");
+
+	// Room 3
+	disablenpc instance_npcname("Roter#03");
+	disablenpc instance_npcname("Gelka#03");
+
+	// Room 4
+	disablenpc instance_npcname("???#04");
+
+	// Room 6
+	disablenpc instance_npcname("Newoz#06");
+	disablenpc instance_npcname("Aigu#06");
+	disablenpc instance_npcname("Shaloshi#06");
+	disablenpc instance_npcname("Arang#06");
+
+	// Room 7
+	disablenpc instance_npcname("Roel#07");
+	disablenpc instance_npcname("Runane#07");
+	disablenpc instance_npcname("Aigu#07");
+
+	// Room 8
+	disablenpc instance_npcname("Mingmin#08");
+	disablenpc instance_npcname("Shaloshi#08");
+	disablenpc instance_npcname("Newoz#08");
+
+	// Room 9 (menu affects the boss encounter in the next room)
+	disablenpc instance_npcname("Newoz#09");
+	disablenpc instance_npcname("Lagi#09");
+	disablenpc instance_npcname("Shaloshi#09");
+
+	// Room 10
+	disablenpc instance_npcname("Newoz#10");
+	disablenpc instance_npcname("Shaloshi#10");
+	disablenpc instance_npcname("Roel#10");
+	disablenpc instance_npcname("Runane#10");
+
+	// Room 11
+	disablenpc instance_npcname("Runane#11");
+	disablenpc instance_npcname("Roel#11");
+	disablenpc instance_npcname("Arang#11");
+	disablenpc instance_npcname("Aigu#11");
+	disablenpc instance_npcname("Mingmin#11");
+
+	// Room 12
+	disablenpc instance_npcname("Mingmin#12");
+
+	// Room 13
+	disablenpc instance_npcname("Newoz#13");
+	disablenpc instance_npcname("Melody-Jack#13");
+
+	// Room 14 (menu affects the boss encounter in the next room)
+	disablenpc instance_npcname("Newoz#14");
+	disablenpc instance_npcname("Shaloshi#14");
+	disablenpc instance_npcname("Lagi#14");
+	disablenpc instance_npcname("Aigu#14");
+	disablenpc instance_npcname("Roel#14");
+	disablenpc instance_npcname("Mingmin#14");
+
+	// Room 15
+	disablenpc instance_npcname("Newoz#15");
+	disablenpc instance_npcname("Mingmin#15");
+	disablenpc instance_npcname("Gelka#15");
+	disablenpc instance_npcname("Shaloshi#15");
+	disablenpc instance_npcname("Arang#15");
+	disablenpc instance_npcname("Runane#15");
+	disablenpc instance_npcname("Roter#15");
+	disablenpc instance_npcname("Roel#15");
+
+	// Room 16
+	disablenpc instance_npcname("Newoz#16");
+	disablenpc instance_npcname("Mingmin#16");
+	disablenpc instance_npcname("Roter#16");
+
+	// Room 17 (menu affects the boss encounter in the next room)
+	disablenpc instance_npcname("Shaloshi#17");
+	disablenpc instance_npcname("Runane#17");
+	disablenpc instance_npcname("Aigu#17");
+
+	// Room 18
+	disablenpc instance_npcname("Shaloshi#18");
+	disablenpc instance_npcname("Runane#18");
+	disablenpc instance_npcname("Roel#18");
+
+	// Room 19
+	disablenpc instance_npcname("Newoz#19");
+	disablenpc instance_npcname("Melody-Jack#19");
+	disablenpc instance_npcname("Roter#19");
+	disablenpc instance_npcname("Mingmin#19");
+	disablenpc instance_npcname("Aigu#19");
+	disablenpc instance_npcname("Arang#19");
+	disablenpc instance_npcname("Lagi#19");
+	disablenpc instance_npcname("Gelka#19");
+
+	// Room 20 (menu affects the boss encounter in the next room)
+	disablenpc instance_npcname("Roel#20");
+	disablenpc instance_npcname("Gelka#20");
+
+	// Room 21 (menu affects the boss encounter in the boss room)
+	disablenpc instance_npcname("Newoz#21");
+	disablenpc instance_npcname("Melody-Jack#21");
+	disablenpc instance_npcname("Arang#21");
+	disablenpc instance_npcname("Gelka#21");
+	disablenpc instance_npcname("Mingmin#21");
+	disablenpc instance_npcname("Runane#21");
+	disablenpc instance_npcname("Roel#21");
+	disablenpc instance_npcname("Lagi#21");
+	disablenpc instance_npcname("Aigu#21");
+	disablenpc instance_npcname("Roter#21");
+	disablenpc instance_npcname("Shaloshi#21");
+	disablenpc instance_npcname("Ferre#21");
+	disablenpc instance_npcname("Ferre#22");
+
+	// Boss room entrance
+	disablenpc instance_npcname("Ferre#23");
+	disablenpc instance_npcname("Ferre#24");
+	disablenpc instance_npcname("Shaloshi#23");
+	disablenpc instance_npcname("Newoz#23");
+	disablenpc instance_npcname("Newoz#boss");
+
+	// Boss room - boss dead
+	disablenpc instance_npcname("Newoz#24");
+	disablenpc instance_npcname("Shaloshi#24");
+	disablenpc instance_npcname("Roter#24");
+	disablenpc instance_npcname("Gelka#24");
+	disablenpc instance_npcname("Mingmin#24");
+	disablenpc instance_npcname("Aigu#24");
+	disablenpc instance_npcname("Lagi#24");
+	disablenpc instance_npcname("Arang#24");
+	disablenpc instance_npcname("Runane#24");
+	disablenpc instance_npcname("Roel#24");
+	disablenpc instance_npcname("Melody-Jack#24");
+	disablenpc instance_npcname("Ferre#25");
+
+	// Exit
+	disablenpc instance_npcname("Newoz#05");
+	disablenpc instance_npcname("Melody-Jack#05");
+	disablenpc instance_npcname("Gelka#05");
+	disablenpc instance_npcname("Runane#05");
+	disablenpc instance_npcname("Roter#05");
+	disablenpc instance_npcname("Aigu#05");
+	disablenpc instance_npcname("Lagi#05");
+	disablenpc instance_npcname("Arang#05");
+	disablenpc instance_npcname("Roel#05");
+	disablenpc instance_npcname("Mingmin#05");
+	end;
+}

+ 37 - 37
npc/re/instances/SaraMemory.txt

@@ -8,43 +8,43 @@
 //============================================================
 
 //= NPCs
-dali,130,107,6	script	Leon the Adventurer	945,{
+dali,130,107,6	script	Adventurer Leon	945,{
 	if (BaseLevel < 99) {
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "You know... this place doesn't seem to be safe for you. Please return to me once you have achieved ^0000FFLevel 99^000000 or higher.";
 		close;
 	}
 	if (saramemory == 1) {
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "I am not sure you have fully explored the crack in space and time yet. Perhaps you should look a bit further into it.";
 		close;
 	}
 	if (saramemory == 2) {
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "What did you see in there?!";
 		next;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "Hrumph, Sara Irene?! She's one of the 12 Valkyries. I didn't know her story was that tragic...";
 		next;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "It seems that you caused a huge misunderstanding between her and her father.";
 		next;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "You should not blame yourself for what occurred, or all the blood that was spilled. It seems that the events that day were fated to happen no matter who was there.";
 		next;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "Please don't tell anyone about your time travelling adventure. We can't have anyone thinking you more important than old Leon. Plus they wouldn't believe such a story anyway.";
 		next;
 		set saramemory,3;
 		erasequest 15003;
 		getexp 770000,1000000;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "I think in about 20 hours after you last entered the rift, it will be stable enough for you to transverse it again.";
 		close;
 	}
 	if (saramemory == 3) {
 		if ((checkquest(15002,PLAYTIME) == 0) || (checkquest(15002,PLAYTIME) == 1)) {
-			mes "[Leon the Adventurer]";
+			mes "[Adventurer Leon]";
 			mes "I think in about 20 hours after you last entered the rift, it will be stable enough for you to transverse it again.";
 			close;
 		}
@@ -53,28 +53,28 @@ dali,130,107,6	script	Leon the Adventurer	945,{
 			mes "^0000FF[ Sara's Memories ] Cooldown has been cleared. It is now possible to use the dimensional device again.^000000";
 			next;
 		}
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "You wish to relive the past again?";
 		next;
 		switch(select("Yes:No")) {
 		case 1:
-			mes "[Leon the Adventurer]";
+			mes "[Adventurer Leon]";
 			mes "Please venture through the dimensional device and report to me what you find within.";
 			next;
 			set saramemory,4;
 			setquest 15003;
-			mes "[Leon the Adventurer]";
+			mes "[Adventurer Leon]";
 			mes "Though I should warn you. It might be unstable. Make sure you enter as soon as you can.";
 			close;
 		case 2:
-			mes "[Leon the Adventurer]";
+			mes "[Adventurer Leon]";
 			mes "Well... I can't force you. But if you ever find the courage please talk to me again.";
 			close;
 		}
 	}
 	if (saramemory == 4) {
 		if ((checkquest(15002,PLAYTIME) == 0) || (checkquest(15002,PLAYTIME) == 1)) {
-			mes "[Leon the Adventurer]";
+			mes "[Adventurer Leon]";
 			mes "I am not sure you have fully explored the crack in space and time yet. Perhaps you should look a bit further into it.";
 			close;
 		}
@@ -83,84 +83,84 @@ dali,130,107,6	script	Leon the Adventurer	945,{
 			mes "^0000FF[ Sara's Memories ] Cooldown has been cleared. It is now possible to use the dimensional device again.^000000";
 			next;
 		}
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "I am not sure you have fully explored the crack in space and time yet. Perhaps you should look a bit further into it.";
 		next;
 		switch(select("Okay:Give up")) {
 		case 1:
-			mes "[Leon the Adventurer]";
+			mes "[Adventurer Leon]";
 			mes "I am glad to hear that! Maybe someday you can be as brave as old Leon the Lion!";
 			close;
 		case 2:
 			set saramemory,3;
 			erasequest 15003;
-			mes "[Leon the Adventurer]";
+			mes "[Adventurer Leon]";
 			mes "Well... I can't force you. But if you ever find the courage please talk to me again.";
 			close;
 		}
 	}
 	if (saramemory == 5) {
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "What did you see in there?!";
 		next;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "Hrumph, Sara Irene?! She's one of the 12 Valkyries. I didn't know her story was that tragic...";
 		next;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "It seems that you caused a huge misunderstanding between her and her father.";
 		next;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "You should not blame yourself for what occurred, or all the blood that was spilled. It seems that the events that day were fated to happen no matter who was there.";
 		next;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "Please don't tell anyone about your time travelling adventure. We can't have anyone thinking you more important than old Leon. Plus they wouldn't believe such a story anyway.";
 		next;
 		set saramemory,3;
 		erasequest 15003;
 		getexp 550000,550000;
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "I think in about 20 hours after you last entered the rift, it will be stable enough for you to transverse it again.";
 		close;
 	}
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "Excuse my rudeness! I am Pon de Leon, the famous adventurer!";
 	next;
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "My friends call me Leon the Lion! For my tough appearance and attitude. Plus I have quite the bite!";
 	next;
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "You know, this is such a strange location...";
 	next;
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "As you explore it you start to see cracks in space and time. Each one covered by a dimensional device.";
 	next;
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "For example, I think I have caught glimpses of Payon through the one closest to us. But it doesn't seem right. Almost like it is a little bit older than it should be.";
 	next;
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "I want to explore it, but with my old age and my knees I don't seem to be quite up to the task.";
 	next;
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "So, I would like to ask something of you.";
 	next;
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "Please venture through the dimensional device and report to me what you find within.";
 	next;
 	set saramemory,1;
 	setquest 15003;
-	mes "[Leon the Adventurer]";
+	mes "[Adventurer Leon]";
 	mes "Though; I should warn you. It might be unstable. Make sure you enter as soon as you can.";
 	close;
 }
 
 dali,139,118,4	script	Dimensional Device#sara	10007,{
 	if (BaseLevel < 99) {
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "Hey! You are too young to be playing with that! Come back when you are at least ^0000FFLevel 99^000000!";
 		close;
 	}
 	if ((saramemory < 1) || (saramemory == 2) || (saramemory == 3) || (saramemory == 5)) {
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "Before you go playing around with that; Why don't you come over here and talk to me?";
 		close;
 	}
@@ -174,7 +174,7 @@ dali,139,118,4	script	Dimensional Device#sara	10007,{
 		set .@md_name$,"Sara's Memories";
 
 		if (!.@party_id) {
-			mes "[Leon the Adventurer]";
+			mes "[Adventurer Leon]";
 			mes "Before you enter you need to organize a party! Don't you know how? Type /organize PARTYNAMEHERE.";
 			close;
 		}
@@ -216,7 +216,7 @@ dali,139,118,4	script	Dimensional Device#sara	10007,{
 			close;
 		}
 	} else if (.@ins_sara_time == 0 || .@ins_sara_time == 1) {
-		mes "[Leon the Adventurer]";
+		mes "[Adventurer Leon]";
 		mes "I think in about 20 hours after you last entered the rift, it will be stable enough for you to transverse it again.";
 		close;
 	}

+ 18 - 9
npc/re/instances/SarahAndFenrir.txt

@@ -500,7 +500,7 @@ dali02,93,146,6	script	Assistant Professor#a1	4_M_REPAIR,{
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_1");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	specialeffect2 EF_HIT2;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : Huh? Somebody there? Hello~ You must be a traveler.";
 	sleep2 3000;
@@ -525,6 +525,7 @@ OnTouch:
 	npctalk "Fenrith Fenrir: Buy me some time while I cast magic! I will handle this!", 'fenrir_1$;
 	donpcevent instance_npcname("#glast_event_1") + "::OnBar";
 	donpcevent instance_npcname("#glast_event_1") + "::OnEvent";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnBar:
 	progressbar_npc "000000",10, 'fenrir_1$;
@@ -563,7 +564,7 @@ OnMobDead:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_3");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "fenrir_a.bmp",2;
 	npctalk "Fenrith Fenrir: By the way, I know it was sudden but thank you for helping.", 'fenrir_1$;
 	sleep2 2000;
@@ -593,6 +594,7 @@ OnTouch:
 	enablenpc instance_npcname("#glast_move_01");
 	enablenpc instance_npcname("#glast_event_5");
 	enablenpc 'fenrir_2$;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -705,7 +707,7 @@ OnTouch:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_5");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "fenrir_a.bmp",2;
 	npctalk "Fenrith Fenrir: You are still in Glast Heim? Why aren't you leaving this dangerous place?", 'fenrir_2$;
 	sleep2 2000;
@@ -741,6 +743,7 @@ OnTouch:
 	enablenpc 'fenrir_3$;
 	enablenpc instance_npcname("#glast_event_7");
 	disablenpc instance_npcname("#glast_move_01");	// officially player can be stucked in entrance
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -753,12 +756,13 @@ OnTouch:
 	if (is_party_leader() == false)
 		npctalk "Fenrith Fenrir: I would like your party leader to come and help me!", 'fenrir_3$;
 	else {
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		disablenpc instance_npcname("#glast_event_7");
 		npctalk "Fenrith Fenrir: You came! I was waiting!", 'fenrir_3$;
 		sleep2 2000;
 		npctalk "Fenrith Fenrir: We don't have much time! We have to go search for it now! Let's go in!", 'fenrir_3$;
 		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
 		if ('skip_left_part == 0) {// 5 mins have passed?
 			donpcevent instance_npcname("#fenrir_left_final_2") + "::OnStop";
 			disablenpc 'fenrir_3$;
@@ -777,7 +781,7 @@ OnTouch:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_9");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "fenrir_a.bmp",2;
 	npctalk "Fenrith Fenrir: The sword of Baldur, Sentinel Breeze... even after 1000 years..", 'fenrir_4$;
 	sleep2 3000;
@@ -820,6 +824,7 @@ OnTouch:
 	monster 'map_glast$,49,363, "Gigantes#semi1", 3191,1, instance_npcname("#fenrir_left_final_1") + "::OnMobDead";// MM_M_GIGAN1
 	monster 'map_glast$,41,363, "Gigantes#semi2", 3192,1, instance_npcname("#fenrir_left_final_1") + "::OnMobDead";// MM_M_GIGAN2
 	donpcevent instance_npcname("#glast_event_9") + "::OnEvent";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnEvent:
 	sleep 15000;
@@ -1028,7 +1033,7 @@ OnTouch:
 	disablenpc instance_npcname("#glast_event_13");
 	//for ( .@i = 1; .@i < 8; .@i++ )
 	//	disablenpc instance_npcname("#glast_event_warp_" + .@i);
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "fenrir_a.bmp",2;
 	sleep2 1000;
 	npctalk "Fenrith Fenrir: I need to go to Glast Heim Castle to retrieve the sword of Baldur.", 'fenrir_5$;
@@ -1045,6 +1050,7 @@ OnTouch:
 	npctalk "Fenrith Fenrir: Then I will go on ahead! Warp!", 'fenrir_5$;
 	cutin "",255;
 	donpcevent instance_npcname("#glast_event_13") + "::OnBar";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnBar:
 	progressbar_npc "000000",3, 'fenrir_5$;
@@ -1117,7 +1123,7 @@ OnTouch:
 	disablenpc instance_npcname("#glast_move_03");
 	disablenpc instance_npcname("#glast_event_15");
 	donpcevent instance_npcname("#fenrir_boss_final_2") + "::OnStop";
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 1000;
 	npctalk "Fenrith Fenrir: I was waiting. Thank you for not being late.", 'fenrir_6$;
 	sleep2 3000;
@@ -1128,6 +1134,7 @@ OnTouch:
 	enablenpc instance_npcname("#glast_event_18");
 	enablenpc instance_npcname("Sarah Irene#glast_17");
 	enablenpc 'fenrir_7$;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -1138,7 +1145,7 @@ OnTouch:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_18");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "sarah_hero3.bmp",0;
 	sleep2 1000;
 	npctalk "Sarah Irene: It seemed like forever waiting for you~ Fenrith Fenrir.", 'sarah_17$;
@@ -1179,6 +1186,7 @@ OnTouch:
 	donpcevent instance_npcname("#glast_event_19") + "::OnEvent";
 	monster 'map_glast$,200,336, "Sarah Irene#1",3190,1, instance_npcname("#fenrir_boss_final_1") + "::OnBossDead";	// MM_SARAH
 	'boss_id = $@mobid[0];
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnBar:
 	progressbar_npc "000000",3, 'fenrir_7$;
@@ -1628,7 +1636,7 @@ OnMobDead:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_24");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 1500;
 	cutin "fenrir_b.bmp",2;
 	npctalk "Fenrith Fenrir: Hehe.. You are certainly skilled but I think you have underestimated me, Valkyrie.", 'fenrir_10$;
@@ -1648,6 +1656,7 @@ OnTouch:
 	cutin "",255;
 	disablenpc 'fenrir_10$;
 	donpcevent instance_npcname("#sarah_wrath") + "::OnStart";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 

+ 13 - 13
npc/re/kafras/kafras.txt

@@ -31,7 +31,7 @@
 
 // Brasilis
 //============================================================
-brasilis,197,221,4	script	Kafra Employee::kaf_bra	117,{
+brasilis,197,221,4	script	Kafra Employee::kaf_bra	4_F_KAFRA1,{
 	cutin "kafra_01",2;
 	callfunc "F_Kafra",0,3,0,80,700;
 	savepoint "brasilis",195,259,1,1;
@@ -40,7 +40,7 @@ brasilis,197,221,4	script	Kafra Employee::kaf_bra	117,{
 
 // Dewata
 //============================================================
-dewata,202,184,6	script	Kafra Employee::kaf_dewata	117,{
+dewata,202,184,6	script	Kafra Employee::kaf_dewata	4_F_KAFRA1,{
 	cutin "kafra_01",2;
 	callfunc "F_Kafra",0,10,1,40,700;
 	savepoint "dewata",206,174,1,1;
@@ -66,7 +66,7 @@ xmas,148,134,6	script	Kafra Employee::kaf_xmas	4_F_KAFRA3,{
 
 // Eden Group
 //============================================================
-moc_para01,10,185,4	script	Kafra Employee::kaf_eden	721,{
+moc_para01,10,185,4	script	Kafra Employee::kaf_eden	4_F_KAFRA7,{
 	cutin "kafra_07",2;
 	mes "[Kafra Employee]";
 	mes "Welcome to the";
@@ -77,21 +77,21 @@ moc_para01,10,185,4	script	Kafra Employee::kaf_eden	721,{
 
 // Izlude
 //============================================================
-izlude,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz	117
-izlude_a,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz_a	117
-izlude_b,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz_b	117
-izlude_c,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz_c	117
-izlude_d,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz_d	117
+izlude,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz	4_F_KAFRA1
+izlude_a,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz_a	4_F_KAFRA1
+izlude_b,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz_b	4_F_KAFRA1
+izlude_c,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz_c	4_F_KAFRA1
+izlude_d,128,148,6	duplicate(kaf_izlude)	Kafra Employee#iz_d	4_F_KAFRA1
 
 // Port Malaya
 //============================================================
-malaya,71,79,4	script	Kafra Employee::kaf_malaya1	581,{
+malaya,71,79,4	script	Kafra Employee::kaf_malaya1	4_MAL_KAFRA,{
 	callfunc "F_Kafra",0,3,2,500,700;
 	savepoint "malaya",44,56,1,1;
 	callfunc "F_KafEnd",0,1,"in Port Malaya";
 }
 
-malaya,234,204,4	script	Kafra Employee::kaf_malaya2	581,{
+malaya,234,204,4	script	Kafra Employee::kaf_malaya2	4_MAL_KAFRA,{
 	callfunc "F_Kafra",0,3,2,500,700;
 	savepoint "malaya",281,212,1,1;
 	callfunc "F_KafEnd",0,1,"in Port Malaya";
@@ -99,7 +99,7 @@ malaya,234,204,4	script	Kafra Employee::kaf_malaya2	581,{
 
 // Rune Knight
 //============================================================
-job3_rune01,92,62,3	script	Kafra Employee::kaf_rune	114,{
+job3_rune01,92,62,3	script	Kafra Employee::kaf_rune	4_F_KAFRA4,{
 	cutin "kafra_04",2;
 	callfunc "F_KafSet";
 	callfunc "F_Kafra",0,9,2,80,700;
@@ -111,6 +111,6 @@ harboro1,291,207,5	script	Kafra Employee::kaf_rock	4_F_KAFRA1,{
 	cutin "kafra_01",2;
 	callfunc "F_KafSet";
 	callfunc "F_Kafra",0,8,2,500,0;
-	savepoint "harboro1",286,189,1,1;
-	callfunc "F_KafEnd",0,1,"in the city of Rockridge";
+	savepoint "harboro1",355,207,1,1;
+	callfunc "F_KafEnd",2,0,0;
 }

+ 37 - 37
npc/re/merchants/OldGlastHeim_merchants.txt

@@ -9,29 +9,29 @@
 
 // Merchant
 //============================================================
-glast_01,210,273,5	script	Hugin's butler#pa0829	1_F_04,{
+glast_01,210,273,5	script	Hugin's Butler#pa0829	1_F_04,{
 	disable_items;
 	if (MaxWeight - Weight < 1000) {
 		mes "Your bag is too heavy. Reduce some weight and come back.";
 		close;
 	}
-	mes "[Hugin's Buttler]";
+	mes "[Hugin's Butler]";
 	mes "Bring Temporal Crystal items for various Temporal boots items. Pick something you want.";
 	next;
-	switch( select( "Cancel", "Buy Temporal Boots (Need 1 Temporal Crystal)", "Upgrade Temporal Boots (Need 5 Temporal Crystals)", "Upgrade Modified Boots (Need 5 Time Crystals)" ) ) {
+	switch( select( "Cancel", "Buy Temporal Boots (Need 1 Temporal Crystal)", "Upgrade Temporal Boots (Need 5 Temporal Crystals)", "Upgrade Modified Boots (Need 5 Temporal Crystals)" ) ) {
 	case 1:
-		mes "[Hugin's Buttler]";
+		mes "[Hugin's Butler]";
 		mes "Come back whenever you want.";
 		close;
 	case 2:
 		if (countitem(6607) > 0) {
-			mes "[Hugin's Buttler]";
+			mes "[Hugin's Butler]";
 			mes "Take these Temporal Boots. We can upgrade your Temporal Boots with 5 Temporal Crystals.";
 			delitem 6607,1;// Temporal_Crystal
 			getitem 2499,1;// Temporal_Boots
 			close;
 		}
-		mes "[Hugin's Buttler]";
+		mes "[Hugin's Butler]";
 		mes "You need more Temporal Crystals. Come back when you get some more Temporal Crystals during your travel through Old Glast Heim.";
 		close;
 	case 3:
@@ -54,40 +54,40 @@ glast_01,210,273,5	script	Hugin's butler#pa0829	1_F_04,{
 		break;
 	}
 	if (!getequipisequiped(EQI_SHOES)) {
-		mes "[Hugin's Buttler]";
+		mes "[Hugin's Butler]";
 		mes "Only the item you are wearing can be upgraded.";
 		mes "Wear the ^0000FFTemporal Boots^000000 you want to upgrade, and then talk to me once again.";
 		close;
 	}
 	if (getequipid(EQI_SHOES) != 2499) {
-		mes "[Hugin's Buttler]";
+		mes "[Hugin's Butler]";
 		mes "You are not wearing the Temporal Boots. Talk to me once you're wearing them.";
 		close;
 	}
 	if (countitem(6607) < 5) {
-		mes "[Hugin's Buttler]";
+		mes "[Hugin's Butler]";
 		mes "Not enough Temporal Crystals. You need 5 Temporal Crystals to upgrade your item.";
 		close;
 	}
-	mes "[Hugin's Buttler]";
+	mes "[Hugin's Butler]";
 	mes "You can trade ^0000FF1 Temporal Boots and 5 Temporal Crystals^000000 for 1 of the following items. ^FF0000Previous refine rate will not be retained with these new ones^000000.";
 	next;
 	.@s = select( "Cancel", "Str Boots", "Int Boots", "Agi Boots", "Vit Boots", "Dex Boots", "Luk Boots" ) - 2;
 	if (.@s == -1) {
-		mes "[Hugin's Buttler]";
+		mes "[Hugin's Butler]";
 		mes "Come back anytime you want.";
 		close;
 	}
 	setarray .@type$[0], "Strength", "Intelligence", "Agility", "Vitality", "Dexterity", "Lucky";
-	mes "[Hugin's Buttler]";
+	mes "[Hugin's Butler]";
 	mes "Are you sure about buying Temporal ^FF0000" + .@type$[.@s] + "^000000 Boots? There's no refunds.";
 	next;
 	if (select( "Think again", "Yes, I am sure." ) == 1) {
-		mes "[Hugin's Buttler]";
+		mes "[Hugin's Butler]";
 		mes "Ok, come back again when you are sure.";
 		close;
 	}
-	mes "[Hugin's Buttler]";
+	mes "[Hugin's Butler]";
 	mes "The boots have been upgraded as you want.";
 	if (getequipid(EQI_SHOES) == 2499) {
 		delequip EQI_SHOES;
@@ -99,47 +99,47 @@ glast_01,210,273,5	script	Hugin's butler#pa0829	1_F_04,{
 
 // Enchant and Socket NPC
 //============================================================
-glast_01,212,273,4	script	Hugin's magic master#pa0829	1_F_01,{
+glast_01,212,273,4	script	Hugin's Magician#pa0829	1_F_01,{
 	disable_items;
 	if (MaxWeight - Weight < 1000) {
 		mes "Your bag is too heavy. Reduce some weight and come back.";
 		close;
 	}
-	mes "[Hugin's Magic Master]";
+	mes "[Hugin's Magician]";
 	mes "So you came to enchant the Temporal Boots. Be aware that Boots with sockets cannot be enchanted, and this upgrade is only possible for the boots you are wearing.";
 	next;
 	if (select( "How does the enchanting work?", "Give effect to my Temporal Boots" ) == 1) {
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "You can keep obtain ^0000FFCoagulated Spell^000000 through your travel times.";
 		next;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "I can enchant your Temporal Boots items depands on the amount of that item. ^0000FFNot normal type boots^000000. Only possible for those 6 expanded version boots.";
 		next;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "But, once you put a socket into the item, you cannot enchant it. Make sure to remember that.";
 		next;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "I don't give out effect randomly. You can pick which effect you want for the item.";
 		next;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "Of course it is for 4th slot only. You can have small effect at the start, and then the effect gets stronger.";
 		next;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "To get to the final option upgrade, it will require way more Coagulated Spell items. Don't forget that.";
 		next;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "Once the 4th slot completes the best option, you get to have a random bonus effect to the 3rd slot. With.. certain payment~";
 		next;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "Also, you don't lose the item even if the enchant fails, we also guarantee keeping card and refine rate. But we can't initialize enchanting.";
 		next;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "Phew...";
 		mes "Anyways, that's all for basic enchant information. Now you should see for yourself.";
 		close;
 	}
 	if (!getequipisequiped(EQI_SHOES)) {
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "Are you wearing the item?";
 		close;
 	}
@@ -175,19 +175,19 @@ glast_01,212,273,4	script	Hugin's magic master#pa0829	1_F_01,{
 		.@equip_refine = getequiprefinerycnt(EQI_SHOES);
 
 		if (.@card[2] > 0) {
-			mes "[Hugin's Magic master]";
+			mes "[Hugin's Magician]";
 			mes "These boots have already passed the enchanting limit. We can't enchant them any more.";
 			close;
 		}
 		if (.@card[3] == 0) {// 4th slot 1st try enchanting
 			.@cost = .@enchant_cost[0];
-			mes "[Hugin's Magic Master]";
+			mes "[Hugin's Magician]";
 			mes "Want to enchant ^0000FF" + .@equip_name$ + "^000000?";
 			mes "For the 1st enchanting, you need ^0000FF" + .@cost + "^000000 Coagulated Spell items.";
 			next;
 			.@s = select( "Quit", "Fighting Spirit", "Archery", "Spell", "Vitality", "Attack Speed", "Lucky" ) - 2;
 			if (.@s == -1) {
-				mes "[Hugin's Magic Master]";
+				mes "[Hugin's Magician]";
 				mes "Ok, come back when you are ready.";
 				close;
 			}
@@ -202,13 +202,13 @@ glast_01,212,273,4	script	Hugin's magic master#pa0829	1_F_01,{
 					break;
 			}
 			if (.@enchant_num == 5) {
-				mes "[Hugin's Magic Master]";
+				mes "[Hugin's Magician]";
 				mes "Something wrong happened.";
 				close;
 			}
 			.@cost = .@enchant_cost[.@enchant_num];
 
-			mes "[Hugin's Magic Master]";
+			mes "[Hugin's Magician]";
 			if (.@enchant_num == 4) {
 				.@card[2] = callfunc("F_Rand",4875,4876,4877,4878,4879,4880);// Bear's_Power, Runaway_Magic, Speed_Of_Light, Muscle_Fool, Hawkeye, Lucky_Day
 				.@string$ = "^990000Bonus effect ^000000 upgrade.";
@@ -222,13 +222,13 @@ glast_01,212,273,4	script	Hugin's magic master#pa0829	1_F_01,{
 			}
 			next;
 			if (select("Quit","Effect Upgrade!") == 1) {
-				mes "[Hugin's Magic Master]";
+				mes "[Hugin's Magician]";
 				mes "Ok, come back when you are ready.";
 				close;
 			}
 		}
 		if (countitem(6608) < .@cost) {
-			mes "[Hugin's Magic Master]";
+			mes "[Hugin's Magician]";
 			mes "Hmm, you are missing " + (.@cost - countitem(6608)) + " Coagulated Spell items. Go get more, and then we can talk about more enchants.";
 			close;
 		}
@@ -240,12 +240,12 @@ glast_01,212,273,4	script	Hugin's magic master#pa0829	1_F_01,{
 			close;
 
 		delequip EQI_SHOES;
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "Trying for " + .@string$;
 		getitem2 .@equip_id,1,1,.@equip_refine,0,0,0,.@card[2],.@card[3];
 		close;
 	default:
-		mes "[Hugin's Magic Master]";
+		mes "[Hugin's Magician]";
 		mes "This is not the right item for this enchant.";
 		mes "Remember, only those 6 types of Temporal Boots are available for enchanting.";
 		close;
@@ -259,7 +259,7 @@ glast_01,210,270,0	script	Hugin's Craftsman#pa0829	4_F_JOB_BLACKSMITH,{
 		close;
 	}
 	mes "[Hugin's Craftsman]";
-	mes "That Magic Master always says that enchanting Temporal Boots is the best. But, I think quite different.";
+	mes "That Magician always says that enchanting Temporal Boots is the best. But, I think quite different.";
 	next;
 	mes "[Hugin's Craftsman]";
 	mes "I think putting a slot into the item would be the best. Even with some risk of failing.";
@@ -310,7 +310,7 @@ S_Slot:
 		close;
 	}
 	mes "[Hugin's Craftsman]";
-	mes "Once again, ^FF0000That Magic Master won't enchant any item with a slot.^000000";
+	mes "Once again, ^FF0000That Magician won't enchant any item with a slot.^000000";
 	mes "Still want to proceed?";
 	next;
 	if (select( "Cancel", "I understand. Try to slot it." ) == 1) {

+ 1 - 1
npc/re/merchants/blessed_refiner.txt

@@ -21,7 +21,7 @@
 	mes "I only refine equipment at the +6 ~ 12 levels.";
 	next;
 	mes "[Blacksmith Dister]";
-	mes "I will need ^ff9999Blessed Weapon Ore^000000 for weapons, and ^ff9999Blessed Armor Ore^000000 for armors.";
+	mes "I will need ^ff9999Blessed Oridecon^000000 for weapons, and ^ff9999Blessed Elunium^000000 for armors.";
 	mes "Failed refines ^FF0000will not break or reduce the refine level^000000.";
 	next;
 	mes "[Blacksmith Dister]";

+ 5 - 5
npc/re/merchants/moro_cav_exchange.txt

@@ -17,7 +17,7 @@ moro_cav,32,73,5	script	Hero Token Exchanger#1	4_F_SHADOWCHASER,{
 		close;
 	}
 	mes "[Hero Token Exchanger]";
-	mes "If you fought Morroc";
+	mes "If you fought Morocc";
 	mes "and collected";
 	mes "Hero Tokens,";
 	mes "I can exchange them with a special ring for you.";
@@ -44,16 +44,16 @@ moro_cav,32,73,5	script	Hero Token Exchanger#1	4_F_SHADOWCHASER,{
 			mes "Hero Ring";
 			mes "can aid you";
 			mes "in subjugating";
-			mes "Morroc.";
+			mes "Morocc.";
 			mes "Any more questions?";
 			continue;
 		case 2:
 			mes "- Hero Ring -";
 			mes "^006400A ring made for warriors^000000";
-			mes "^006400on the quest to defeat Morroc..^000000";
+			mes "^006400on the quest to defeat Morocc..^000000";
 			mes "^006400When Enchanted,^000000";
 			mes "^006400it lends its owner^000000";
-			mes "^006400the power to confront Morroc.^000000";
+			mes "^006400the power to confront Morocc.^000000";
 			mes "^006400Clas: Accessory/DEF: 0^000000";
 			mes "^006400Weight: 20/Required Level: 160^000000";
 			mes "^006400Slot: 0/Equip To: All Jobs^000000";
@@ -74,7 +74,7 @@ moro_cav,32,73,5	script	Hero Token Exchanger#1	4_F_SHADOWCHASER,{
 				mes "[Hero Token Exchanger]";
 				mes "^006400Hero Token^000000";
 				mes "is given to";
-				mes "those who bravely fought Morroc.";
+				mes "those who bravely fought Morocc.";
 				mes "You don't have";
 				mes "30 ^006400Hero Tokens^000000,";
 				mes "and therefore I can't assist you.";

+ 0 - 2
npc/re/merchants/nightmare_biolab.txt

@@ -173,8 +173,6 @@ lighthalzen,321,218,4	script	Ohno Tohiro#1	4_M_RASWORD,{
 			if (countitem(7347) < 10) {
 				mes "[Ohno Tohiro]";
 				mes "It seems 10 research charts are missing now.";
-				mes "";
-				mes "";
 				mes "Maybe you didn't pick them up from the warehouse.";
 				next;
 				mes "[Ohno Tohiro]";

+ 7 - 1
npc/re/merchants/shops.txt

@@ -22,6 +22,11 @@
 //= 2.0 Moved and updated Morocc merchants. [zackdreaver]
 //============================================================ 
 
+//=======================================================
+// Alberta
+//=======================================================
+alberta_in,176,81,3	shop	Trading Merchant#alb	900,13200:-1,13221:-1,13222:-1,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
+
 //=======================================================
 // Comodo
 //=======================================================
@@ -40,6 +45,7 @@ dewata,158,182,6	shop	Armor Dealer	536,2211:-1,2401:-1,2403:-1,2501:-1,2503:-1,2
 // Einbroch
 //=======================================================
 einbroch,122,250,4	shop	Black Marketeer#ein	49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2805:-1,2806:-1,2807:-1,18000:-1,18001:-1,18002:-1,18003:-1,18004:-1,12392:-1,12393:-1,12394:-1,6145:-1,6146:-1,6147:-1,6186:-1,2808:-1
+que_ng,180,79,3	shop	Johnny Waiker	900,13200:-1,13221:-1,13222:-1
 
 //=======================================================
 // El Dicastes
@@ -67,7 +73,7 @@ izlude_c,128,158,7	duplicate(Vendor from Milk Ranch#i)	Vendor from Milk Ranch#c
 izlude_d,128,158,7	duplicate(Vendor from Milk Ranch#i)	Vendor from Milk Ranch#d	90
 izlude_in,72,98,3	shop	Pet Groomer#iz	124,537:-1,643:-1,10013:-1,10014:-1,554:-1,6113:-1,6114:-1,6115:-1
 izlude_in,57,110,0	shop	Tool Dealer#iz	47,611:-1,501:-1,502:-1,503:-1,504:-1,506:-1,645:-1,656:-1,601:-1,602:-1,1065:-1,1750:-1
-izlude_in,72,102,3	shop	Trading Merchant#iz	900,13200:-1,13201:-1,13202:-1,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
+izlude_in,72,102,3	shop	Trading Merchant#iz	900,13200:-1,13221:-1,13222:-1,13150:-1,13102:-1,13151:-1,13154:-1,13155:-1,13163:-1,13165:-1,13168:-1
 
 //=======================================================
 // Juno

+ 4 - 4
npc/re/quests/eden/eden_common.txt

@@ -145,7 +145,7 @@ moc_para01,27,35,5	script	Secretary Lime Evenor	4_F_EDEN_OFFICER,{
 				mes "Hmm, your handwriting is not clear. I can't read. it";
 				next;
 				mes "[Lime Evenor]";
-				mes "^3131FF"+strcharinfo(0)+"^000000, tell me what you want to register. for";
+				mes "^3131FF"+strcharinfo(0)+"^000000, tell me what you want to register for.";
 				mes "Which map should we go to?";
 				input .@input$;
 				next;
@@ -273,7 +273,7 @@ izlude_b,131,148,4	duplicate(eto)	Eden Teleport Officer#30::eto_iz_b	729
 izlude_c,131,148,4	duplicate(eto)	Eden Teleport Officer#30::eto_iz_c	729
 izlude_d,131,148,4	duplicate(eto)	Eden Teleport Officer#30::eto_iz_d	729
 umbala,105,158,3	duplicate(eto)	Eden Teleport Officer#31	729
-malaya,238,206,6	duplicate(eto)	Eden Teleport Officer#32	729
+malaya,225,218,1	duplicate(eto)	Eden Teleport Officer#32	729
 verus04,116,243,0	duplicate(eto)	Eden Teleport Officer#33	729
 
 moc_para01,30,10,0	script	#eden_out	45,1,1,{
@@ -343,7 +343,7 @@ moc_para01,47,39,3	script	#warp_2_pass	111,{
 
 moc_para01,16,22,7	script	Old Adventurer#eden	900,{
 	mes "[Old Adventurer]";
-	mes "Harsh, I am strong enough even if I look old! What is his name? Lime Evenor? He just ignores me like I am a some kind of old senile bastard.";
+	mes "Harsh, I am strong enough even if I look old! What is her name? Lime Evenor? She just ignores me like I am a some kind of old senile bastard.";
 	next;
 	mes "[Old Adventurer]";
 	mes "I came here to join the Eden group! I don't deserve this!";
@@ -425,7 +425,7 @@ moc_para01,20,35,5	script	Office Assistant Neede	814,{
 	next;
 	emotion ET_HNG, getnpcid(0, "Secretary Lime Evenor");
 	mes "[Lime Evenor]";
-	mes "I am not that kind of guy.";
+	mes "I am not that kind of girl.";
 	next;
 	emotion ET_KEK;
 	mes "[Neede]";

+ 423 - 76
npc/re/quests/eden/eden_iro.txt

@@ -569,6 +569,7 @@ L_Exchange:
 // Merry Badger
 //============================================================
 moc_para01,13,22,4	script	Merry Badger#xch	882,{
+	disable_items;
 	mes "[Merry Badger]";
 	mes "Hello there!  I'm Merry Badger and I was hired to exchange the ^00CC00Eden Merit Badges^000000!";
 	next;
@@ -576,65 +577,133 @@ moc_para01,13,22,4	script	Merry Badger#xch	882,{
 	mes "I can take your Merit Badges and give you some useful stuff, or I can take some of your stuff and give you some Eden Merit Badges.";
 	mes "As I get more authorization I can offer more things to trade with you, so definitely keep me in mind when visiting the Eden Group.";
 	next;
-	switch(select("Redeem Badges:Trade in FOR badges:Exchange Rates:15 Job Manuals - 1 JM Box")) {
+	// switch( select( "Redeem Badges", "Trade in FOR badges", "Exchange Rates", "15 Job Manuals - 1 JM Box", "Sky Fortress Tickets", "Weekly Special" ) ) {// Sky Fortress Tickets meaningless without the instance
+	switch( select( "Redeem Badges", "Trade in FOR badges", "Exchange Rates", "15 Job Manuals - 1 JM Box", "", "Weekly Special" ) ) {
 	case 1:
+		setarray .@menu_list$[0],
+			"4 EMB for 10 KVM Badge",
+			"4 EMB for 10 Bravery Medals",
+			"4 EMB for 10 Valor Medals", 
+			"8 EMB for 1 Reset Stone",
+			"5 EMB for Battle Manual Buff",
+			"5 EMB for Job Battle Manual Buff",
+			"10 EMB for HE Battle Manual Buff",
+			"20 EMB for 3X Battle Manual Buff",
+			"5 EMB for Bubblegum Buff", 
+			"10 EMB for HE Bubblegum Buff",
+			"",	// "5 EMB for Miracle Buff" (item doesn't exist in db)
+			"1 EMB for Yggdrasil Leaf",
+			"",	// "5 EMB for Rental Wing of Beelzebub" (item doesn't exist in db)
+			"5 EMB for Rental Halter Lead",
+			"5 EMB for 20 Blue Herbs",
+			"Token of Siegfried",
+			"Nothing Now";
+		.@menu$ = implode( .@menu_list$, ":" );
 		while(1) {
 			mes "[Merry Badger]";
-			mes "Sure thing, I have several options currently for your badges!";
+			mes "Sure thing, I have several options currently for your Badges!";
 			next;
-			switch(select("This week's Special:2 EMB for 10 KVM Badge:2 EMB for 10 Bravery Medals:2 EMB for 10 Valor Medals:5 EMB for 5 Medium Life Potion:5 EMB for 5 Life Insurance:5 EMB for 5 Token of Siegfried:7 EMB for 1 Job Battle Manual:8 EMB for 1 Reset Stone:Nothing Now")){
-			case 1:
-				if (countitem(6495) < 3) {
+			switch( select(.@menu$) ) {
+			case 1:// "4 EMB for 10 KVM Badge"
+				callsub L_Exchange,4,6376,10;// KVM_Badge
+				break;
+			case 2:// "4 EMB for 10 Bravery Medals"
+				callsub L_Exchange,4,7828,10;// BF_Badge1
+				break;
+			case 3:// "4 EMB for 10 Valor Medals"
+				callsub L_Exchange,4,7829,10;// BF_Badge2
+				break;
+			case 4:// "8 EMB for 1 Reset Stone"
+				callsub L_Exchange,8,6320,1;// Premium_Reset_Stone
+				break;
+			case 5:// "5 EMB for Battle Manual Buff"
+				callsub L_Exchange,5,12208,1;// Battle_Manual
+				break;
+			case 6:// "5 EMB for Job Battle Manual Buff"
+				callsub L_Exchange,5,14592,1;// Job_Manual50
+				break;
+			case 7:// "10 EMB for HE Battle Manual Buff"
+				callsub L_Exchange,10,12411,1;// HE_Battle_Manual
+				break;
+			case 8:// "20 EMB for 3X Battle Manual Buff"
+				callsub L_Exchange,20,14545,1;// Battle_Manual_X3
+				break;
+			case 9:// "5 EMB for Bubblegum Buff"
+				callsub L_Exchange,5,12210,1;// Bubble_Gum
+				break;
+			case 10:// "10 EMB for HE Bubblegum Buff"
+				callsub L_Exchange,10,12412,1;// HE_Bubble_Gum
+				break;
+			case 11:// "5 EMB for Miracle Buff"
+				.@item_id = 22819;
+				if (countitem(6495) < 5) {
 					mes "[Merry Badger]";
 					mes "You don't have enough ^00CC00Eden Merit Badges^000000. Let's start over!";
 					break;
 				}
 				mes "[Merry Badger]";
-				mes "Ok, I have a special for 3 Merit Badges. This week I'll give you ^00CC0040 Light Granule^000000, ^0066CC40 Gun Powder^000000, ^00CC003 Izidor^000000, ^0066CC10 Prickly Fruit^000000, ^00CC001 Mandragora Flowerpot^000000, and ^0066CC3 Elder Branch^000000.";
+				mes "Ok, I can give you ^ff0000" + getitemname(.@item_id) + "^000000 for ^0066CC5 of your Eden Merit Badge(s)^000000.";
+				mes "Do you want to?";
 				next;
-				switch(select("Yes:No")) {
-				case 1:
-					delitem 6495,3; //Para_Logro_Badge
-					getitem 7938,40; //Light_Granule
-					getitem 6244,40; //Gun_Power
-					getitem 709,3; //Izidor
-					getitem 576,10; //Prickly_Fruit
-					getitem 6217,1; //Mandragora_Flowerpot
-					getitem 7939,3; //Elder_Branch
-					mes "[Merry Badger]";
-					mes "There you go! What else would you like?";
-					break;
-				case 2:
+				if (select("Yes", "No") == 2) {
 					mes "[Merry Badger]";
 					mes "I understand, let's see if you'd like something different!";
 					break;
 				}
+				mes "[Merry Badger]";
+				mes "There you go! What else would you like?";
+				delitem 6495, 5;// Para_Logro_Badge
+				consumeitem .@item_id;
 				break;
-			case 2:
-				callsub L_Exchange,2,6376,10; //KVM_Badge
-				break;
-			case 3:
-				callsub L_Exchange,2,7828,10; //BF_Badge1
-				break;
-			case 4:
-				callsub L_Exchange,2,7829,10; //BF_Badge2
-				break;
-			case 5:
-				callsub L_Exchange,5,14535,5; //Med_Life_Potion
-				break;
-			case 6:
-				callsub L_Exchange,5,12209,5; //Insurance
+			case 12:// "1 EMB for Yggdrasil Leaf"
+				callsub L_Exchange,1,610,1;// Leaf_Of_Yggdrasil
 				break;
-			case 7:
-				callsub L_Exchange,5,7621,5; //Token_Of_Siegfried
+			case 13:// "5 EMB for Rental Wing of Beelzebub"
+				.@item_id = 14645;
+				if (countitem(6495) < 5) {
+					mes "[Merry Badger]";
+					mes "You don't have enough ^00CC00Eden Merit Badges^000000. Let's start over!";
+					break;
+				}
+				mes "[Merry Badger]";
+				mes "Ok, I can give you ^ff0000" + getitemname(.@item_id) + "^000000 for ^0066CC5 of your Eden Merit Badge(s)^000000.";
+				mes "Do you want to?";
+				next;
+				if (select("Yes", "No") == 2) {
+					mes "[Merry Badger]";
+					mes "I understand, let's see if you'd like something different!";
+					break;
+				}
+				mes "[Merry Badger]";
+				mes "There you go! What else would you like?";
+				delitem 6495, 5;// Para_Logro_Badge
+				rentitem .@item_id, 604800;	// 7 days
 				break;
-			case 8:
-				callsub L_Exchange,7,14592,1; //Job_Manual50
+			case 14:// "5 EMB for Rental Halter Lead"
+				callsub L_Exchange,5,17162,1;// Boarding_Halter_Box7
 				break;
-			case 9:
-				callsub L_Exchange,8,6320,1; //Premium_Reset_Stone
+			case 15:// "5 EMB for 20 Blue Herbs"
+				callsub L_Exchange,5,510,20;// Blue_Herb
 				break;
-			case 10:
+			case 16:// Token of Siegfried
+				if (vip_status(VIP_STATUS_ACTIVE) == false) {
+					mes "[Merry Badger]";
+					mes "VIP Services offers those to any user with VIP!!";
+					close;
+				}
+				// custom from here
+				.@date = gettime(DT_YYYYMMDD);
+				if (.@date <= eden_iro_token_date) {
+					mes "[Merry Badger]";
+					mes "You already got your Token today!";
+					close;
+				}
+				mes "[Merry Badger]";
+				mes "There you go! What else would you like?";
+				eden_iro_token_date = .@date;
+				getitem 7621,10;// Token_Of_Siegfried
+				close;
+			case 17:// Nothing Now
 				mes "[Merry Badger]";
 				mes "Wonderful!";
 				mes "I'll be here if you ever want to exchange for Eden Merit Badges!";
@@ -646,29 +715,87 @@ moc_para01,13,22,4	script	Merry Badger#xch	882,{
 		mes "[Merry Badger]";
 		mes "I have a limited selection as of right now, but here is what I can offer to get 1 Eden Merit Badge!";
 		next;
-		switch(select("Etc Items:Cancel")) {
+		switch( select( "Etc Items", "Equipments", "Cancel" ) ) {
 		case 1:
 			while(1) {
-				switch(select("5x Old Purple Box:Nothing")) {
-				case 1:
+				if (select( "5x Old Purple Box", "Nothing" ) == 2) {
 					mes "[Merry Badger]";
-					if (countitem(617) < 5)
+					mes "Wonderful!";
+					mes "I'll be here if you ever want to exchange for Eden Merit Badges!";
+					close;
+				}
+				while(1) {
+					if (countitem(617) < 5) {
+						mes "[Merry Badger]";
 						mes "You don't have enough of that to get 1 Eden Merit Badge. Lets start over!";
+						break;
+					}
+					mes "[Merry Badger]";
+					mes "Ok, I can give you ^CC00001 Eden Merit Badge^000000 for ^0000CC5 of your Old Purple Boxes^000000. Do you want to?";
+					next;
+					if (select( "Yes", "No" ) == 2) {
+						mes "[Merry Badger]";
+						mes "I understand, lets see if you'd like something different!";
+						break;
+					}
 					else {
-						mes "Wonderful, what else do you want?"; //custom dialogue
-						delitem 617,5; //Old_Violet_Box
-						getitem 6495,1; //Para_Logro_Badge
+						mes "[Merry Badger]";
+						mes "There you go!  What else would you like?";
+						delitem 617,5;// Old_Violet_Box
+						getitem 6495,1;// Para_Logro_Badge
+						next;
 					}
+				}
+				next;
+			}
+		case 2:
+			while(1) {
+				mes "[Merry Badger]";
+				mes "I will take the top item in your inventory! MAKE SURE YOU DONT HAVE ANY OF THESE ITEMS THAT YOU DONT WANT TO EXCHANGE.";
+				next;
+				switch( select( "Giant Faceworm Snake Skin", "Giant Faceworm Snake Skin [1]", "Nothing" ) ) {
+				case 1:
+					.@item_req = 20717;// FaceWorm_Skin
+					.@item_name$ = "Giant Faceworm Snake Skin";
+					.@amount_reward = 5;
 					break;
 				case 2:
+					.@item_req = 20718;// FaceWorm_Skin_
+					.@item_name$ = "Giant Faceworm Snake Skin [1]";
+					.@amount_reward = 7;
+					break;
+				case 3:
 					mes "[Merry Badger]";
 					mes "Wonderful!";
 					mes "I'll be here if you ever want to exchange for Eden Merit Badges!";
+					next;
+					mes "[Merry Badger]";
+					mes "Well that is OK, if you want to see what I offer just ask!";
 					close;
 				}
+				while(1) {
+					if (countitem(.@item_req) < 1) {
+						mes "[Merry Badger]";
+						mes "You don't have enough of that to get 1 Eden Merit Badge. Lets start over!";
+						break;
+					}
+					mes "[Merry Badger]";
+					mes "Ok, I can give you ^ff0000" + .@amount_reward + " Eden Merit Badge^000000 for ^00ff00" + .@item_name$ + "^000000. Do you want to?";
+					next;
+					if (select( "Yes", "No" ) == 2) {
+						mes "[Merry Badger]";
+						mes "I understand, lets see if you'd like something different!";
+						break;
+					}
+					delitem .@item_req, 1;
+					getitem 6495, .@amount_reward;// Para_Logro_Badge
+					mes "[Merry Badger]";
+					mes "There you go! What else do you like?";
+					next;
+				}
 				next;
 			}
-		case 2:
+		case 3:
 			mes "[Merry Badger]";
 			mes "Well that is OK, if you want to see what I offer just ask!";
 			close;
@@ -676,19 +803,19 @@ moc_para01,13,22,4	script	Merry Badger#xch	882,{
 	case 3:
 		mes "[Merry Badger]";
 		mes "This is what I'll give you for your ^00CC00Eden Merit Badges^000000!";
-		mes "Ok, I have a special for 3 Merit Badges. This week I'll give you ^00CC0040 Light Granule^000000, ^0066CC40 Gun Powder^000000, ^00CC003 Izidor^000000, ^0066CC10 Prickly Fruit^000000, ^00CC001 Mandragora Flowerpot^000000, and ^0066CC3 Elder Branch^000000.";
-		mes "^00CC002 Eden Merit Badges^000000 = ^0066CC10x KVM Badge^000000";
-		mes "^00CC002 Eden Merit Badges^000000 = ^0066CC10x Bravery Medals^000000";
-		mes "^00CC002 Eden Merit Badges^000000 = ^0066CC10x Valor Medals^000000";
-		mes "^00CC005 Eden Merit Badges^000000 = ^0066CC5x Medium Life Potion^000000";
-		mes "^00CC005 Eden Merit Badges^000000 = ^0066CC5x Life Insurance^000000";
-		mes "^00CC005 Eden Merit Badges^000000 = ^0066CC5x Token Of Siegfried^000000";
-		mes "^00CC007 Eden Merit Badges^000000 = ^0066CC1x Job Battle Manual^000000";
-		mes "^00CC008 Eden Merit Badges^000000 = ^0066CC1x Reset Stone^000000";
+		mes "Ok, I have a special for 3 Merit Badge. This week I'll give you ^00CC0040 Light Granule^000000, ^00CC0040 Gun Powder^000000, ^0000CC3 Izidor^000000, ^00CC0010 Prickly Fruit^000000, ^0000CC1 Mandragora Flowerpot^000000, and ^00CC003 Elder Branch^000000.";
+		mes "^00CC002 Eden Merit Badges^000000 = ^0000CC10x KVM Badge^000000";
+		mes "^00CC002 Eden Merit Badges^000000 = ^0000CC10x Bravery Medals^000000";
+		mes "^00CC002 Eden Merit Badges^000000 = ^0000CC10x Valor Medals^000000";
+		mes "^00CC005 Eden Merit Badges^000000 = ^0000CC5x Medium Life Potion^000000";
+		mes "^00CC005 Eden Merit Badges^000000 = ^0000CC5x Life Insurance^000000";
+		mes "^00CC005 Eden Merit Badges^000000 = ^0000CC5x Token Of Siegfried^000000";
+		mes "^00CC007 Eden Merit Badges^000000 = ^0000CC1x Job Battle Manual^000000";
+		mes "^00CC008 Eden Merit Badges^000000 = ^0000CC1x Reset Stone^000000";
 		next;
 		mes "[Merry Badger]";
 		mes "This is what you can give me to get ^00CC001 Eden Merit Badge^000000!";
-		mes "^0066CC5x Old Purple Box^000000";
+		mes "^0000CC5x Old Purple Box^000000";
 		close;
 	case 4:
 		mes "[Merry Badger]";
@@ -701,20 +828,84 @@ moc_para01,13,22,4	script	Merry Badger#xch	882,{
 			mes "You don't have 15 or more Job Manuals to get 1 Box!";
 			close;
 		}
-		//custom dialogue below
-		switch(select("Yes:No")) {
-		case 1:
-			mes "[Merry Badger]";
-			mes "Wonderful, what else do you want?";
-			delitem 14592,15; //Job_Manual50
-			getitem 13990,1; //Job_Manual50_Box
-			close;
-		case 2:
+		// custom dialogue below
+		if (select("Yes", "No") == 2) {
 			mes "[Merry Badger]";
 			mes "Wonderful!";
 			mes "I'll be here if you ever want to exchange for Eden Merit Badges!";
 			close;
 		}
+		mes "[Merry Badger]";
+		mes "Wonderful, what else do you want?";
+		delitem 14592,15; //Job_Manual50
+		getitem 13990,1; //Job_Manual50_Box
+		close;
+	case 5:
+		mes "[Merry Badger]";
+		mes "I don't really understand why but I have this stack of coupons to sell.";
+		mes "Do you want to exchange 25 Eden Merit Badges for 1 dungeon ticket? If you are VIP your ticket will last much longer!";
+		next;
+		if (select( "Yes", "No" ) == 2) {
+			mes "[Merry Badger]";
+			mes "I understand, lets see if you'd like something different!";
+			close;
+		}
+		if (countitem(6495) < 25) {
+			mes "[Merry Badger]";
+			mes "You don't have enough badges!";
+			close;
+		}
+		delitem 6495,25;
+		if (vip_status(VIP_STATUS_ACTIVE))
+			getitem 17570,1;// Sky Fortress Ticket 3 Hour Box
+		else
+			getitem 17569,1;// Sky Fortress Ticket 1 Hour Box
+		mes "[Merry Badger]";
+		mes "There you go! What else would you like?";
+		close;
+	case 6:
+		while(1) {
+			mes "[Merry Badger]";
+			mes "The Weekly special is ....";
+			next;
+			mes "[Merry Badger]";
+			mes "Ok, I have a special for 3 Merit Badge or 1,000,000 zeny.  This week I'll give you ^00CC0040 Light Granule^000000, 40 Gun Powder^000000, ^0000CC3 Izidor^000000";
+			mes "^00CC0010 Prickly Fruit^000000, ^0000CC1 Mandragora Flowerpot^000000, and ^00CC003 Elder Branch^000000.";
+			next;
+			switch( select( "Badges", "Zeny", "No" ) ) {
+			case 1:
+				if (countitem(6495) < 3) {
+					mes "[Merry Badger]";
+					mes "You don't have enough ^00CC00Eden Merit Badges^000000. Lets start over!";
+					next;
+					continue;
+				}
+				delitem 6495,3; //Para_Logro_Badge
+				break;
+			case 2:
+				if (Zeny < 1000000) {
+					mes "[Merry Badger]";
+					mes "You don't have enough ^00CC00Zeny^000000. Lets start over!";
+					next;
+					continue;
+				}
+				Zeny -= 1000000;
+				break;
+			case 3:
+				mes "[Merry Badger]";
+				mes "I understand, lets see if you'd like something different!";
+				close;
+			}
+			getitem 7938,40;// Light_Granule
+			getitem 6244,40;// Gun_Power
+			getitem 709,3;	// Izidor
+			getitem 576,10;	// Prickly_Fruit
+			getitem 6217,1;	// Mandragora_Flowerpot
+			getitem 7939,3;	// Elder_Branch
+			mes "[Merry Badger]";
+			mes "There you go! What else would you like?";
+			next;
+		}
 	}
 	end;
 
@@ -730,18 +921,15 @@ L_Exchange:
 				callfunc("F_InsertPlural",getarg(2),getitemname(getarg(1))), getarg(0));
 	mes "Do you want to?";
 	next;
-	switch(select("Yes:No")) {
-	case 1:
-		mes "[Merry Badger]";
-		mes "There you go! What else would you like?";
-		delitem 6495, getarg(0); //Para_Logro_Badge
-		getitem getarg(1),getarg(2);
-		break;
-	case 2:
+	if (select("Yes", "No") == 2) {
 		mes "[Merry Badger]";
 		mes "I understand, let's see if you'd like something different!";
-		break;
+		return;
 	}
+	mes "[Merry Badger]";
+	mes "There you go! What else would you like?";
+	delitem 6495, getarg(0); //Para_Logro_Badge
+	getitem getarg(1),getarg(2);
 	return;
 }
 
@@ -974,3 +1162,162 @@ auction_03,152,42,4	script	Kafra Employee#annex	117,{
 auction_03,145,47,2	shop	Tool Dealer#annex	83,611:-1,501:-1,502:-1,503:-1,506:-1,504:-1,645:-1,656:-1,657:-1,601:-1,602:-1,1065:-1,911:-1,910:-1,717:-1,1092:-1,1093:-1,713:400
 
 */
+
+// Fallen_Angel_Wing Enchant
+//============================================================
+moc_para01,179,27,3	script	Dark Luhir#new10	4_F_VALKYRIE2,{
+	disable_items;
+	mes "[Dark Luhir]";
+	mes "Hello~ I am giving away extra stats to those who have a Fallen Angel Wing item.";
+	next;
+	if (getequipid(EQI_GARMENT) != 2589) {// Fallen_Angel_Wing
+		mes "[Dark Luhir]";
+		mes "Please ^0000ffwear your Fallen Angel Wing item first^000000, and then I will give you extra stats.";
+		close;
+	}
+	switch( select( "Cancel", "Enchant Fallen Angel Wing", "Reset Fallen Angel Wing Stats" ) ) {
+	case 1:
+		mes "[Dark Luhir]";
+		mes "Later then...";
+		close;
+	case 2:
+		.@refine = getequiprefinerycnt(EQI_GARMENT);
+		setarray .@card[0],
+			getequipcardid(EQI_GARMENT,0),
+			getequipcardid(EQI_GARMENT,1),
+			getequipcardid(EQI_GARMENT,2),
+			getequipcardid(EQI_GARMENT,3);
+		mes "[Dark Luhir]";
+		mes "Only 1 socket can get an extra stat when refine level is between 1~6.";
+		mes "If refine level is 7~8, it can receive stats for 2 sockets.";
+		mes "+9 can receive stats to all 3 sockets.";
+		next;
+		mes "[Dark Luhir]";
+		if (.@refine < 7)
+			mes "This item's refine level is lower than 7. Only ^ff0000socket slot 4^000000 can receive extra stats.";
+		else if (.@refine < 9)
+			mes "This item's refine level is between 7~8. ^ff0000Socket slot 3 and 4^000000 can receive extra stats.";
+		else
+			mes "This item's refine level is more than 9. All 3 of ^ff0000Socket slot 2, 3 and 4^000000 can receive extra stats.";
+		mes "What kind of extra stats do you want?";
+		next;
+		switch( select( "Let me get my gear on", "1.Fighting spirit", "2.Magic Attack", "3.Archery", "4.Critical", "5.MaxHP", "6.MaxSP", "7.Atk speed", "8.STR", "9.AGI", "10.VIT", "11.INT", "12.DEX", "13.LUK" ) ) {
+		case 1:
+			mes "[Dark Luhir]";
+			mes "Please come back after equipping your item.";
+			close;
+		case 2:
+			setarray .@enchants[0],4809,4808,4820,4821;		// Fighting Spirit 3~5 / Fighting Spirit 6
+			.@string$ = "Fighting Spirit stats will be given randomly by 3~5 (ATK+HIT) range.";
+			break;
+		case 3:
+			setarray .@enchants[0],4812,4826,4827,4828;		// Spell 4~6 / Spell 7
+			.@string$ = "Magic spell stats will be given randomly by 4~6 (MATK + Reduce change casting time).";
+			break;
+		case 4:
+			setarray .@enchants[0],4832,4833,4834,4835;		// Expert Archer 1~3 / Expert Archer 4
+			.@string$ = "Archery stats will be given randomly by 1~3 (Range atack rate).";
+			break;
+		case 5:
+			setarray .@enchants[0],4863,4864,4865,4866;		// Fatal 1~3 / Fatal 4
+			.@string$ = "Critical stats will be given randomly by 1~4 (Critical damage + CRI).";
+			break;
+		case 6:
+			setarray .@enchants[0],4861,4862,4867,4868;		// MaxHP +1~3% / MaxHP +4%
+			.@string$ = "MHP stats will be given randomly by 1~3 (Increase MHP %).";
+			break;
+		case 7:
+			setarray .@enchants[0],4870,4800,4871,4801;		// +25,50 or 75 sp / +100 sp
+			.@string$ = "SP stats will be given randomly by 25~75.";
+			break;
+		case 8:
+			setarray .@enchants[0],4869,4872,4873,4807;		// Delayafterattack 1~3 / +1 ASPD
+			.@string$ = "Atack delay stats will be given randomly by 1~3 (Reduce attack delay %).";
+			break;
+		case 9:
+			setarray .@enchants[0],4702,4703,4704,4853;		// Str +3~5 / Special Str
+			.@string$ = "STR stats will be given randomly by 3~5.";
+			break;
+		case 10:
+			setarray .@enchants[0],4731,4732,4733,4854;		// Agi +2~4 / Special Agi
+			.@string$ = "AGI stats will be given randomly by 2~4.";
+			break;
+		case 11:
+			setarray .@enchants[0],4742,4743,4744,4855;		// Vit +3~5 / Special Vit
+			.@string$ = "VIT stats will be given randomly by 3~5.";
+			break;
+		case 12:
+			setarray .@enchants[0],4712,4713,4714,4856;		// Int +3~5 / Special Int
+			.@string$ = "INT stats will be given randomly by 3~5.";
+			break;
+		case 13:
+			setarray .@enchants[0],4722,4723,4724,4857;		// Dex +3~5 / Special Dex
+			.@string$ = "DEX stats will be given randomly by 3~5.";
+			break;
+		case 14:
+			setarray .@enchants[0],4752,4753,4754,4858;		// Luk +3~5 / Special Luk
+			.@string$ = "LUK stats will be given randomly by 3~5.";
+			break;
+		}
+		mes "[Dark Luhir]";
+		mes .@string$ + " ^ff0000Given stats cannot be turned back.^000000 Do you want to proceed?";
+		next;
+		if (select( "1.Quit", "2.Yes, I want to try this." ) == 1) {
+			mes "[Dark Luhir]";
+			mes "Later then...";
+			close;
+		}
+
+		// anti-hack
+		if (callfunc("F_IsEquipIDHack", EQI_GARMENT, 2589) || callfunc("F_IsEquipCardHack", EQI_GARMENT, .@card[0], .@card[1], .@card[2], .@card[3]) || callfunc("F_IsEquipRefineHack", EQI_GARMENT, .@refine))
+			close;
+
+		if (.@card[3] == 0) {
+			.@card[3] = .@enchants[ rand(3) ];
+			.@slot = 4;
+		}
+		else if (.@card[2] == 0 && .@refine >= 7) {
+			.@card[2] = .@enchants[ rand(3) ];
+			.@slot = 3;
+		}
+		else if (.@card[1] == 0 && .@refine >= 9) {
+			.@card[1] = .@enchants[ rand(4) ];
+			.@slot = 2;
+		}
+		else {
+			mes "[Dark Luhir]";
+			mes "It seems this item is already has max enchanting. Please bring another one for extra stats.";
+			close;
+		}
+		specialeffect2 EF_REPAIRWEAPON;
+		mes "[Dark Luhir]";
+		mes "Giving ability to item's ^990000" + .@slot + " socket^000000.";
+		delequip EQI_GARMENT;
+		getitem2 2589,1,1, .@refine,0, .@card[0], .@card[1], .@card[2], .@card[3];
+		close;
+	case 3:
+		mes "[Dark Luhir]";
+		mes "Stat reset of the Fallen Angel Wing will cost you 1,000,000 zeny?";
+		mes "Do you wish to proceed?";
+		next;
+		if (select( "Yes", "No thanks!" ) == 2)
+			close;
+		if (Zeny < 1000000) {
+			mes "[Dark Luhir]";
+			mes "You liar you don't have enough zeny!";
+			close;
+		}
+		if (getequipid(EQI_GARMENT) == 2589) {
+			.@refine = getequiprefinerycnt(EQI_GARMENT);
+			.@card[0] = getequipcardid(EQI_GARMENT,0);
+
+			mes "[Dark Luhir]";
+			specialeffect2 EF_REPAIRWEAPON;
+			mes "Reseting item stats.";
+			delequip EQI_GARMENT;
+			Zeny -= 1000000;
+			getitem2 2589,1,1, .@refine,0, .@card[0],0,0,0;// Fallen_Angel_Wing
+		}
+		close;
+	}
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 141 - 140
npc/re/quests/quests_15_1.txt


+ 0 - 2
npc/re/quests/quests_15_2.txt

@@ -20,9 +20,7 @@ function	script	F_time_limit_recorder	{
 function	script	F_erase_datas_recorder	{
 	if (callfunc("F_time_limit_recorder") == 1)
 		return;
-	mes "";
 	mes "Your whole body suddenly becomes heavy and time seems to be passing faster around you.";
-	mes "";
 	for ( .@quest_id = 5341; .@quest_id < 5371; .@quest_id++ ) {
 		if (isbegin_quest(.@quest_id) > 0)
 			erasequest .@quest_id;

+ 46 - 11
npc/re/quests/quests_16_1.txt

@@ -184,9 +184,11 @@ prt_cas,215,146,0	script	#ep16_evt_01_on	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (banquet_main_quest == 1) {
+		setpcblock PCBLOCK_NPC, true;
 		classchange( 4_M_RUSMAN1, "Chamberlain Bell#ep16_0_0", bc_self );
 		sleep2 2000;
 		npctalk "I've been waiting for you. Sir " + strcharinfo(0) + "...", "Chamberlain Bell#ep16_0_0", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -471,7 +473,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 	case 11:
 	case 12:
 	case 13:
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You are back already?", "", bc_self;
 		sleep2 1000;
 		classchange( 4_M_JOB_WIZARD, "Court Mage Nillem#ep16_1", bc_self );
@@ -494,6 +496,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 		sleep2 1000;
 		npctalk "One!", "Court Mage Nillem#ep16_1", bc_self;
 		sleep2 1000;
+		setpcblock PCBLOCK_NPC, false;
 		warp "prt_lib",89,44;
 		end;
 	case 14:
@@ -580,11 +583,13 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 		mes "Court Mage Nillem opened the door and left right away.";
 		mes "Saying, 'Where are you?' " + strcharinfo(0) + " The magician must be looking for you.";
 		close2;
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 50;
 		classchange( 4_M_JOB_WIZARD, "Court Mage Nillem#ep16_1", bc_self );
 		npctalk "There you are!", "Court Mage Nillem#ep16_1", bc_self;
 		sleep2 50;
 		npctalk "What an impeccable timing...", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	case 19:
 	case 20:
@@ -604,6 +609,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 			mes "Wait a second.";
 			mes "I have just sent a message. The magician will arrive here soon.";
 			close2;
+			setpcblock PCBLOCK_NPC, true;
 			sleep2 1000;
 			classchange( 4_M_JOB_WIZARD, "Court Mage Nillem#ep16_1", bc_self );
 			if (banquet_main_quest < 25) {
@@ -633,6 +639,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 					break;
 				}
 			}
+			setpcblock PCBLOCK_NPC, false;
 			end;
 		case 2:
 			mes "[Belle]";
@@ -1371,7 +1378,7 @@ prt_cas,183,164,0	script	#ep16_evt_7689	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (banquet_main_quest == 5) {
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		unittalk getcharid(3), "" + strcharinfo(0) + " : ...Hum? Who's coming?", bc_self;
 		sleep2 2000;
 		classchange( 4_LGTSCIENCE, "#ep16_7689_01", bc_self );
@@ -1415,6 +1422,7 @@ OnTouch:
 		}
 		sleep2 2000;
 		classchange( HIDDEN_WARP_NPC, "Skia Nerius#ep16_7689", bc_self );
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -1501,10 +1509,12 @@ prt_cas,27,43,0	script	#ep16_evt_7690	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (banquet_main_quest == 6) {
+		setpcblock PCBLOCK_NPC, true;
 		classchange( 4_EP16_NIHIL, "Unstable Nyhill#ep16_76", bc_self );
 		classchange( 4_EP16_SKIA, "Skia Nerius#ep16_7690", bc_self );
 		sleep2 1000;
 		npctalk "Are you OK?", "Skia Nerius#ep16_7690", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -1826,10 +1836,12 @@ OnTouch:
 		classchange( 4_EP16_GRANZ, "Kronecker G. Heine#ep16_1", bc_self );
 		classchange( 4_EP16_NIHIL, "Nyhill M. Heine#ep16_li", bc_self );
 		classchange( 1_M_JOBTESTER, "Ian Walther#ep16_lib01", bc_self );
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 2000;
 		npctalk "You are here at last.", "Ian Walther#ep16_lib01", bc_self;
 		sleep2 3000;
 		npctalk "I have something to tell you, special guest.", "Ian Walther#ep16_lib01", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 	}
 	if (banquet_main_quest == 24)
 		classchange( 4_EP16_GRANZ, "Kronecker G. Heine#ep16_1", bc_self );
@@ -2176,6 +2188,7 @@ prt_lib,85,82,5	script	Ian Walther#ep16_lib01	HIDDEN_WARP_NPC,{
 		erasequest 7693;// Surprise Attack
 		banquet_main_quest = 10;
 		close2;
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "Magician! Activate the gate.", "Ian Walther#ep16_lib01", bc_self;
 		sleep2 2000;
 		npctalk "Oh, yes. The gate has been activated since others used it earlier.", "Mage Nillem#ep16_warp", bc_self;
@@ -2189,6 +2202,7 @@ prt_lib,85,82,5	script	Ian Walther#ep16_lib01	HIDDEN_WARP_NPC,{
 		sleep2 2000;
 		classchange( HIDDEN_WARP_NPC, "Kronecker G. Heine#ep16_2", bc_self );
 		classchange( HIDDEN_WARP_NPC, "Nyhill M. Heine#ep16_li", bc_self );
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -3917,7 +3931,8 @@ prt_cas_q,20,139,3	script	Spica Nerius#ep16_room01_a	4_EP16_SPICA,{
 		cutin "ep16_crux_findel02",2;
 		mes "[Crux]";
 		mes "See you later.";
-		// close2;// player still talking
+		close2;
+		setpcblock PCBLOCK_NPC, true;
 		cutin "",255;
 		npctalk "Why are you letting the guest out?", "", bc_self;
 		sleep2 1000;
@@ -3930,6 +3945,7 @@ prt_cas_q,20,139,3	script	Spica Nerius#ep16_room01_a	4_EP16_SPICA,{
 		npctalk "I don't mean that!", "", bc_self;
 		sleep2 3000;
 		unittalk getcharid(3), "" + strcharinfo(0) + " : (Oh my, I'd better get out now.)", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 
@@ -5679,7 +5695,7 @@ OnTouch:
 	if (banquet_main_quest < 17)
 		classchange( HIDDEN_WARP_NPC, "Peter Heine#ep16_02", bc_self );	// custom - officially hidden from #ep16_heine_evt01. However the npc is not hidden when the player is not in npc visual range
 	if (banquet_heine_quest == 0 && banquet_main_quest == 2) {
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You are in no place to say such a thing!", "Kronecker G. Heine#ep16", bc_self;
 		sleep2 3000;
 		npctalk "I'll go back to the head house. Please give me your permission.", "Nyhill M. Heine#ep16_01", bc_self;
@@ -5707,6 +5723,7 @@ OnTouch:
 			banquet_heine_quest = 1;
 			setquest 7683;// Visit the Heines
 		}
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -5718,7 +5735,7 @@ prt_cas_q,141,36,0	script	#ep16_evt_7686	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (banquet_heine_quest >= 1 && isbegin_quest(7686) == 0) {
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		classchange( 4_EP16_NIHIL, "Nyhill#ep16_7686", bc_self );
 		classchange( 4_EP16_SKIA, "Skia#ep16_7686", bc_self );
 		npctalk "Are you the shadow princess whom people talk about?", "Nyhill#ep16_7686", bc_self;
@@ -5774,6 +5791,7 @@ OnTouch:
 			setquest 7686;// Nyhill and Skia
 			completequest 7686;// Nyhill and Skia
 		}
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -12715,10 +12733,11 @@ prt_cas,89,244,7	script	Banquet Hall Guest#6	4_M_NOV_HUNT,{
 }
 
 prt_cas,91,237,3	script	Ekinasia#ep16_etc01	1_F_SIGNZISK,{
-	// pcblocknpc
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "It's been a while since the last time a royal banquet like this was held.", "Ekinasia#ep16_etc01", bc_self;
 	sleep2 3000;
 	npctalk "We need to blow off some steam like this from time to time.", "Ekinasia#ep16_etc01", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -12741,12 +12760,13 @@ prt_cas,78,255,3	script	Mayssel#ep16_etc05	4_F_MAYSEL,{
 }
 
 prt_cas,78,252,2	script	Verkhasel#ep_etc06	4_M_GUILLOTINE,{
-	// pcblocknpc
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "I want to go back now.", "Verkhasel#ep_etc06", bc_self;
 	sleep2 3000;
 	npctalk "...You can't.", "Mayssel#ep16_etc05", bc_self;
 	sleep2 3000;
 	npctalk "You made that very clear, hahahaha!", "Vicente#ep16_etc07", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -13370,7 +13390,7 @@ prt_cas,379,124,3	script	Glamorous Girl#pop	4_F_ARUNA_POP,{
 }
 
 prt_cas,368,125,3	script	Dumk#ep16_etc03	4_M_SHADOWCHASER,{
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Where is he?", "Dumk#ep16_etc03", bc_self;
 	sleep2 3000;
 	npctalk "I don't know.", "Kid#ep16_etc04", bc_self;
@@ -13387,6 +13407,7 @@ prt_cas,368,125,3	script	Dumk#ep16_etc03	4_M_SHADOWCHASER,{
 	sleep2 1000;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : (Shaking the head from side to side)", bc_self;
 	emotion ET_STARE_ABOUT, playerattached();
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 prt_cas,367,123,7	duplicate(Dumk#ep16_etc03)	Kid#ep16_etc04	4_M_ACROSS
@@ -13418,9 +13439,11 @@ prt_cas,161,168,5	script	Royal Guardian Knight#0_left	4_M_CRU,{
 prt_cas,152,163,0	script	prt_cas_1#0_left	WARPNPC,1,1,{
 OnTouch:
 	if (banquet_main_quest == 0) {
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "That way is a royal villa for VIPs. Outsiders cannot access the place.", "Royal Guardian Knight#0_left", bc_self;
 		sleep2 3000;
 		npctalk "If you are invited, a servant should be there to greet you. Please be guided officially.", "Royal Guardian Knight#0_left", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 	warp "prt_cas_q",150,8;
@@ -13434,9 +13457,11 @@ prt_cas,270,168,3	duplicate(Royal Guardian Knight#0_left)	Royal Guardian Knight#
 prt_cas,278,163,0	script	prt_cas_2#0_right	WARPNPC,1,1,{
 OnTouch:
 	if (banquet_main_quest == 0) {
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "That way is a royal villa for VIPs. Outsiders cannot access the place.", "Royal Guardian Knight#0_right", bc_self;
 		sleep2 3000;
 		npctalk "If you are invited, a servant should be there to greet you. Please be guided officially.", "Royal Guardian Knight#0_right", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 	warp "prt_cas_q",135,119;
@@ -13554,10 +13579,11 @@ prt_cas,180,264,3	script	Guardian Knight#ep16_pr_1	4_M_CRU,{
 }
 
 prt_cas,180,251,3	script	Guardian Knight#ep16_pr_2	4_M_CRU,{
-	// pcblocknpctalk
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "...On duty. No problem...", "Guardian Knight#ep16_pr_2", bc_self;
 	sleep2 2000;
 	npctalk "I want to go home now.", "Guardian Knight#ep16_pr_2", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -13566,9 +13592,10 @@ OnTouch_:
 	if (banquet_main_quest >= 2)
 		warp "prt_pri00",54,134;
 	else {
-		// pcblocknpctalk
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You shouldn't enter the place like that.", "Guardian Knight#ep16_pr_1", bc_self;
 		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
 		warp "prt_cas",182,258;
 	}
 	end;
@@ -14867,6 +14894,7 @@ OnTouch_:
 		break;
 	}
 	unittalk getcharid(3), "" + strcharinfo(0) + " : ?";
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 1000;
 	specialeffect EF_POISONSMOKE;
 	getmapxy .@map$, .@x, .@y, BL_NPC;
@@ -14875,6 +14903,7 @@ OnTouch_:
 	monster "prt_q",.@x,.@y,"Fly",1035,1, strnpcinfo(0) + "::OnMyMobDead";// HUNTER_FLY
 	setd ".mob_count_" + strnpcinfo(2), 1;
 	hideonnpc strnpcinfo(0);
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnMyMobDead:
 	.@hidden_name$ = strnpcinfo(2);
@@ -15766,15 +15795,19 @@ prt_pri00,58,128,4	script	Overwatcher Terketh#ep1	4_M_JOB_HUNTER,{
 	mes "What do you want?";
 	next;
 	if (select( "To the Past Memories of the Royal Family", "To the oudside" ) == 2) {
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 2000;
 		npctalk "Well, sure.", "", bc_self;
 		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
 		warp "prt_pri00",53,128;
 		end;
 	}
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 2000;
 	npctalk "Take care. Do not snoop around too much!", "", bc_self;
 	sleep2 2000;
+	setpcblock PCBLOCK_NPC, false;
 	warp "prt_lib",9,28;
 	end;
 }
@@ -15934,7 +15967,8 @@ prt_prison,243,265,6	script	Prisoner 243AD265#EP161	4_M_DRAKE,{
 			mes "Now that the fellow has become freer from death, I wonder what he's up to. I wonder what kind of memory he would write in his next letter.";
 			next;
 			mes "The prisoner started singing as if he was reminiscing about something.";
-			// close2;// still talk to npc
+			close2;
+			setpcblock PCBLOCK_NPC, true;
 			sleep2 30;
 			npctalk "Prisoner 243AD265: We're coming home~~ We're coming home~~", "", bc_self;
 			sleep2 2000;
@@ -15968,6 +16002,7 @@ prt_prison,243,265,6	script	Prisoner 243AD265#EP161	4_M_DRAKE,{
 			sleep2 2000;
 			emotion ET_HNG;
 			npctalk "Prisoner 243AD265: It is far from amusing when there is no fellow sailor around.", "", bc_self;
+			setpcblock PCBLOCK_NPC, false;
 			end;
 		case 2:
 			erasequest 5426;// [Stand by]To My Beloved Fellow

+ 1 - 1
npc/re/quests/quests_malaya.txt

@@ -4589,9 +4589,9 @@ malaya,290,340,3	script	Guard Leader#buwaya	571,{
 		next;
 		mes "[Guard Leader]";
 		mes "We are doing our best in securing the safety of our village so please enjoy your stay in Port Malaya.";
+		next;
 	}
 	if (malaya_buwaya == 10) {
-		next;
 		if (select("Tell him about Buwaya.:Done with conversation.") == 2) {
 			close;
 		}

+ 18 - 8
npc/re/quests/quests_rockridge.txt

@@ -174,11 +174,12 @@ harboro1,80,218,5	script	Costello#harboro1	10210,{
 		end;
 	}
 	if (rock_main_quest == 1) {
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		unittalk getcharid(3), "" + strcharinfo(0) + " : Mr. Costello?", bc_self;
 		sleep2 1000;
 		npctalk "*Gasp*", "", bc_self;;
 		sleep2 1000;
+		setpcblock PCBLOCK_NPC, false;
 		mes "[Costello]";
 		mes "*Ahem* Yes, this is him.";
 		mes "I'm Costello, mayor of Rock Ridge.";
@@ -550,7 +551,7 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		close;
 	}
 	if (rock_main_quest == 6) {
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "I say we turn him against the rest of his gang.", "Ivoka Skudi#rr03", bc_self;
 		sleep2 2000;
 		npctalk "Don't you think regular torture or threats would work?", "", bc_self;
@@ -559,6 +560,7 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		sleep2 1000;
 		npctalk "I know. There's Albert.", "", bc_self;
 		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
 		mes "[Wyatt Warp]";
 		mes "Welcome.";
 		mes "*Chuckle* You're so useful. Just having you standing next to us works like a charm.";
@@ -974,15 +976,16 @@ OnTouch:
 
 // Prison
 har_in01,100,14,3	script	Vigilante#srdg01	10220,{
-	mes "";// todo fix me
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "You'd better not do anything stupid.", "", bc_self;
 	sleep2 1000;
 	npctalk "I'm watching you like a hawk.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 har_in01,81,30,3	script	Harold#srdg01	4_TOWER_09,{
-	mes "";// todo fix me
+	setpcblock PCBLOCK_NPC, true;
 	emotion ET_OHNO;
 	npctalk "I can't believe you. Ugh!", "", bc_self;
 	sleep2 1000;
@@ -995,15 +998,17 @@ har_in01,81,30,3	script	Harold#srdg01	4_TOWER_09,{
 	npctalk "I can't help it when the food is so delicious.", "Egring#srdg01", bc_self;
 	sleep2 1000;
 	npctalk "Well, that I agree.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 har_in01,78,25,5	script	Egring#srdg01	4_DR_TORTEL,{
-	mes "";// todo fix me
+	setpcblock PCBLOCK_NPC, true;
 	emotion ET_THROB;
 	npctalk "When are we eating today? What are we having? Beans?", "", bc_self;
 	sleep2 1000;
 	npctalk "It hasn't been even thirty minutes since our last meal!", "Harold#srdg01", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -1018,10 +1023,11 @@ har_in01,89,26,5	script	Johnny James#har_in01	10213,{
 	if (rock_main_quest == 8) {
 		.@player_name$ = strcharinfo(0);
 
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You sneaky bastards, how dare you show up again? Go to hell!", "", bc_self;
 		sleep2 2000;
 		classchange( 10212, "Ivoka Skudi#har02", bc_self );
+		setpcblock PCBLOCK_NPC, false;
 		npctalk "Ah, you'd better show some respect to our future mayor.", "Ivoka Skudi#har02", bc_self;
 		mes "[Ivoka Skudi]";
 		mes "I told you I can take care of him.";
@@ -1224,7 +1230,7 @@ rockrdg1,164,306,3	duplicate(Johnny James#revt04)	Cactus Gunslinger#revt03	HIDDE
 
 rockrdg1,156,312,3	script	Unmoving Freight Train#	4_ENERGY_RED,{
 	if (rock_main_quest == 5) {
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		unittalk getcharid(3), "" + strcharinfo(0) + " : I think this is the place, but maybe I came too early.", bc_self;
 		sleep2 3000;
 		classchange( 10213, "Johnny James#revt04", bc_self );
@@ -1336,6 +1342,7 @@ rockrdg1,156,312,3	script	Unmoving Freight Train#	4_ENERGY_RED,{
 		erasequest 7795;
 		setquest 7796;// Unexpected Arrest
 		rock_main_quest = 6;
+		setpcblock PCBLOCK_NPC, false;
 		close;
 	}
 	mes "It's worthless and abandoned.";
@@ -3928,9 +3935,10 @@ harboro2,164,80,5	script	Demon#srdg01	4_M_NFMAN,{
 		.@account_id = getcharid(3);
 		.@player_name$ = strcharinfo(0);
 
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		donpcevent "Traces of Fire#srdg01::OnEffect";
 		sleep2 1500;
+		setpcblock PCBLOCK_NPC, false;
 		mes "[Demon]";
 		mes "Alright, this should do. You know what I need, right? Are you sure you could sneak in? Maybe I should go.";
 		next;
@@ -5758,9 +5766,11 @@ harboro1,235,255,6	script	Wealthy Merchant's Came#6	4_DST_CAMEL,{
 }
 
 harboro1,210,219,5	script	Priest#srdg01	4_M_MINISTER,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Are you anguished or sad? Let me help you.", "", bc_self;
 	sleep2 1500;
 	npctalk "Every one of us is born to be loved.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 

+ 1 - 0
npc/re/scripts_athena.conf

@@ -72,6 +72,7 @@ npc: npc/re/instances/IsleOfBios.txt
 npc: npc/re/instances/LastRoom.txt
 npc: npc/re/instances/MalangdoCulvert.txt
 npc: npc/re/instances/MorseCave.txt
+npc: npc/re/instances/NightmarishJitterbug.txt
 npc: npc/re/instances/OctopusCave.txt
 npc: npc/re/instances/OldGlastHeim.txt
 npc: npc/re/instances/RitualOfBlessing.txt

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio