summaryrefslogtreecommitdiff
path: root/conf
diff options
context:
space:
mode:
Diffstat (limited to 'conf')
-rw-r--r--conf/atcommand_athena.conf.example (renamed from conf/atcommand_athena.conf)0
-rw-r--r--conf/battle_athena.conf.example (renamed from conf/battle_athena.conf)6
-rw-r--r--conf/char_athena.conf.example (renamed from conf/char_athena.conf)9
-rw-r--r--conf/eathena-monitor.conf.example (renamed from conf/eathena-monitor.conf)0
-rw-r--r--conf/gm_account.txt.example (renamed from conf/gm_account.txt)0
-rw-r--r--conf/inter_athena.conf.example (renamed from conf/inter_athena.conf)0
-rw-r--r--conf/ladmin_athena.conf.example (renamed from conf/ladmin_athena.conf)0
-rw-r--r--conf/lan_support.conf.example (renamed from conf/lan_support.conf)0
-rw-r--r--conf/login_athena.conf.example (renamed from conf/login_athena.conf)5
-rw-r--r--conf/magic.conf580
-rw-r--r--conf/map_athena.conf209
-rw-r--r--conf/map_athena.conf.example348
-rw-r--r--conf/motd.txt.example (renamed from conf/motd.txt)0
-rw-r--r--conf/msg_athena.conf.example (renamed from conf/msg_athena.conf)0
-rw-r--r--conf/script_athena.conf.example (renamed from conf/script_athena.conf)0
15 files changed, 941 insertions, 216 deletions
diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf.example
index b0711beb..b0711beb 100644
--- a/conf/atcommand_athena.conf
+++ b/conf/atcommand_athena.conf.example
diff --git a/conf/battle_athena.conf b/conf/battle_athena.conf.example
index 57a6fc0d..1324bd34 100644
--- a/conf/battle_athena.conf
+++ b/conf/battle_athena.conf.example
@@ -54,7 +54,7 @@ monster_skill_add_range: 0
// If a player is attacked, will they have a delay in being able to move? (Note 1)
// (Setting to no will be like always endure)
-player_damage_delay: yes
+player_damage_delay: no
// Damaged delay rate (Note 2)
player_damage_delay_rate: 100
@@ -650,12 +650,12 @@ night_at_start: no
// Define duration in msec of the day (default: 7,200,000 = 2 hours)
// Set to 0 to disable day cycle (but not @day GM command).
// Except 0, minimum is 60000 (1 minute).
-day_duration: 7200000
+day_duration: 0
// Define duration in msec of the night (default: 1,800,000 = 30 min)
// Set to 0 to disable night cycle (but not @night GM command).
// Except 0, minimum is 60000 (1 minute).
-night_duration: 1800000
+night_duration: 0
// Will display a mob's hp/maxhp when the mouse cursor is over them. (Note 1)
// Will not display guardian or emperium hp.
diff --git a/conf/char_athena.conf b/conf/char_athena.conf.example
index 57ee991b..6ce131cf 100644
--- a/conf/char_athena.conf
+++ b/conf/char_athena.conf.example
@@ -2,10 +2,10 @@
// Server Communication username and password.
userid: s1
-passwd: p1
+passwd: s1
// Server name, use alternative character such as ASCII 160 for spaces.
-server_name: Mana World
+server_name: The Mana World
// Wisp name for server: used to send wisp from server to players (between 4 to 23 characters)
wisp_server_name: Server
@@ -89,12 +89,13 @@ name_ignoring_case: 0
// 0: no restriction (default)
// 1: only letters/symbols in 'char_name_letters' option.
// 2: Letters/symbols in 'char_name_letters' option are forbidden. All others are possibles.
-char_name_option: 0
+char_name_option: 1
// Set the letters/symbols that you want use with the 'char_name_option' option.
// Note: add 'space' between 2 others letters/symbols.
// default: void.
-//char_name_letters:
+// char_name_letters: [ ] { } , . | - # @ ! ~ ` ; : " " ? / \ = + < >
+char_name_letters: a b c d e f g h i j k l m n o p r s t q u w x y z A B C D E F G H I J K L M N O P R S T Q U W X Y Z 1 2 3 4 5 6 7 8 9 0
// Filename of the file which receives the online players list in text
online_txt_filename: online.txt
diff --git a/conf/eathena-monitor.conf b/conf/eathena-monitor.conf.example
index 70dcd2e5..70dcd2e5 100644
--- a/conf/eathena-monitor.conf
+++ b/conf/eathena-monitor.conf.example
diff --git a/conf/gm_account.txt b/conf/gm_account.txt.example
index 912e1a09..912e1a09 100644
--- a/conf/gm_account.txt
+++ b/conf/gm_account.txt.example
diff --git a/conf/inter_athena.conf b/conf/inter_athena.conf.example
index 72a88bd9..72a88bd9 100644
--- a/conf/inter_athena.conf
+++ b/conf/inter_athena.conf.example
diff --git a/conf/ladmin_athena.conf b/conf/ladmin_athena.conf.example
index 4f9ce8b6..4f9ce8b6 100644
--- a/conf/ladmin_athena.conf
+++ b/conf/ladmin_athena.conf.example
diff --git a/conf/lan_support.conf b/conf/lan_support.conf.example
index bfaec696..bfaec696 100644
--- a/conf/lan_support.conf
+++ b/conf/lan_support.conf.example
diff --git a/conf/login_athena.conf b/conf/login_athena.conf.example
index 72b820fe..1d4383a7 100644
--- a/conf/login_athena.conf
+++ b/conf/login_athena.conf.example
@@ -50,6 +50,11 @@ login_log_filename: log/login.log
// Name of the file of that logs the unknown packets (for debug or hack check)
login_log_unknown_packets_filename: log/login_unknown_packets.log
+// Update host
+// Tells the client that an alternative updatehost is available if the client
+// supports this. If left out nothing will be sent. max length 127.
+update_host: http://updates.themanaworld.org/
+
// Indicate if the unknown packets are saved or not
//(the unknown packets coming from the char-server or ladministration does not relate to, which is always saved)
// Be careful: if you receive an attack, your hard disk can cause lag...
diff --git a/conf/magic.conf b/conf/magic.conf
new file mode 100644
index 00000000..54f182de
--- /dev/null
+++ b/conf/magic.conf
@@ -0,0 +1,580 @@
+# Special-purpose globals
+obscure_chance = 95
+min_casttime = 200
+
+# Schools of magic
+CONST MAGIC = 340
+CONST LIFE = 341
+CONST WAR = 342
+CONST TRANSMUTE = 343
+CONST NATURE = 344
+CONST ASTRAL = 345
+
+# Elements
+CONST ELT_NEUTRAL = 0
+CONST ELT_WATER = 1
+CONST ELT_EARTH = 2
+CONST ELT_FIRE = 3
+CONST ELT_WIND = 4
+CONST ELT_POISON = 5
+CONST ELT_SHADOW = 6
+CONST ELT_HOLY = 7
+CONST ELT_GHOST = 8
+CONST ELT_UNDEAD = 9
+
+# Schools of magic
+CONST SC_HALT_REGENERATE = 195
+CONST SC_FLYING_BACKPACK = 196
+CONST SC_MBARRIER = 197
+CONST SC_HASTE = 198
+CONST SC_PHYS_SHIELD = 199
+
+CONST SFX_TELEPORT = 24
+
+# Increase spellpower by school and general magic skill
+PROCEDURE adjust_spellpower(school) =
+ spellpower = spellpower + (skill(caster, MAGIC) + skill(caster, school)) * 10;
+ IF ((school = LIFE) && (target = partner(caster)))
+ THEN spellpower = spellpower + 200; # Do something for wedding rings, too?
+
+PROCEDURE heal(target, max_heal) =
+ sfx(caster, 4, 0);
+ IF caster <> target
+ THEN sfx(target, 4, 0);
+ power = spellpower + vit(caster);
+ power = min(max_heal, (max_heal * power) / 250);
+ itemheal(target, power, 0);
+
+# Goes through instaheal instead of itemheal
+PROCEDURE quickheal(target, power) =
+ sfx(caster, 4, 0);
+ IF caster <> target
+ THEN sfx(target, 4, 0);
+ instaheal(target, power, 0);
+
+# Can attack the target? Imports attack_range from dynamic environment
+PROCEDURE attack_check(target) =
+ IF (not (line_of_sight(location(caster), location(target))))
+ THEN ABORT;
+ IF (not (rdistance(location(caster), location(target)) <= attack_range))
+ THEN ABORT;
+
+# Cause elemental damage. bonus_elt grants an attack bonus, malus_elt reduces the attack. `effect' is the sfx ID.
+PROCEDURE elt_damage(target, damage, dmgplus, bonus_elt, malus_elt, effect) =
+ d = damage + random(dmgplus);
+ IF (element(target) = malus_elt)
+ THEN d = d / 3;
+ IF (element(target) = bonus_elt)
+ THEN d = (d * (4 + element_level(target))) / 4;
+ #message(caster, "bonus=" + (element(target) = bonus_elt) + " malus=" + (element(target) = malus_elt) + " damage=" + damage + " + r(" + dmgplus + ") -> " + d);
+ sfx(target, effect, 0);
+ injure(caster, target, d, 0);
+
+PROCEDURE melee_damage(target, damage, dmgplus) =
+ CALL attack_check(target);
+ d = damage + random(dmgplus);
+ injure(caster, target, d, 0);
+
+
+PROCEDURE install_attack_spell(charges, base_delay, range, attack_animation) =
+ sfx(caster, 5, 0);
+ attack_range = range;
+ override_attack(caster, charges, ((200 - agi(caster)) * base_delay) / 200,
+ range, 0, attack_animation);
+
+PROCEDURE install_melee_spell(charges, base_delay, attack_animation) =
+ CALL install_attack_spell(charges, base_delay, 1, attack_animation);
+
+PROCEDURE summon_spell(mob_id, count, delay, lifetime, control_level) =
+ sfx(caster, 2, 0);
+ sfx(location, 21, 0);
+ WAIT delay;
+ sfx(location, 22, 0);
+ spawn(rbox(location, 2), caster, mob_id,
+ if_then_else(skill(caster, ASTRAL) >= control_level, 2, 1), # pets when level is high enough
+ count, lifetime);
+
+#--------------------------------------------------------------------------------
+# Level 0 spells
+#--------------------------------------------------------------------------------
+
+#SPELL reset : "#reset" =
+# EFFECT { skill 340, 0;
+# skill 341, 0;
+# skill 342, 0;
+# skill 343, 0;
+# skill 344, 0;
+# skill 345, 0;
+# }
+
+SPELL lesser-heal (target : STRING) : "#imx" =
+ LET level = 0
+ school = LIFE
+ IN (MANA 5, CASTTIME 400,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 50)),
+ (COMPONENTS ["MaggotSlime"] OR COMPONENTS ["BugLeg"]))
+ => EFFECT CALL adjust_spellpower(school);
+ IF failed(pc(target))
+ THEN target = caster; # quest handling goes here
+ ELSE target = pc(target);
+ CALL heal(target, 200);
+
+
+SPELL flare-dart : "#fla" =
+ LET level = 0
+ school = WAR
+ IN (MANA 15, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ (REQUIRE skill(caster, school) > 2 OR COMPONENTS ["SulphurPowder"]))
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 5, 0);
+ damage = min(40 + skill(caster, school) * 20,
+ 10 + spellpower);
+ damage_bonus = 5 + level(caster) / 3;
+ CALL install_attack_spell(3 + spellpower / 30,
+ 1200,
+ 4, 31);
+
+ ATTRIGGER CALL attack_check(target);
+ CALL elt_damage (target, damage, damage_bonus, ELT_WATER, ELT_FIRE, 15);
+
+SPELL magic-blade : "#mbl" =
+ LET level = 0
+ school = WAR
+ IN (MANA 12, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level)
+ => ( COMPONENTS ["SharpKnife"] =>
+ EFFECT CALL adjust_spellpower(WAR);
+ sfx(caster, 5, 0);
+ CALL install_melee_spell(10 + spellpower / 10, 900, 30);
+ ATTRIGGER CALL melee_damage(target, 60 + spellpower / 20, 5 + str(caster));
+ | COMPONENTS ["Knife"] =>
+ EFFECT CALL adjust_spellpower(WAR);
+ sfx(caster, 5, 0);
+ CALL install_melee_spell(10 + spellpower / 10, 900, 30);
+ ATTRIGGER CALL melee_damage(target, 40 + spellpower / 20, 5 + str(caster));
+ )
+
+SPELL aggravate : "#qaw" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 5, CASTTIME 300,
+ REQUIRE skill(caster, MAGIC) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ FOREACH MOB target IN rbox(location(caster), 1 + spellpower / 20) DO
+ (sfx(target, 2, 0);
+ aggravate(target, 0, caster);)
+
+
+LOCAL SPELL summon-maggots : "#kbm" =
+ LET level = 0
+ school = ASTRAL
+ IN (MANA 20, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["MaggotSlime"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL summon_spell(1002, 3 + spellpower / 15, 5000 - (spellpower * 10), spellpower * 500, 1);
+
+
+#--------------------------------------------------------------------------------
+# Level 1 spells
+#--------------------------------------------------------------------------------
+
+SPELL make-arrows : "#mkarrows" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 20, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["RawLog"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ create_item(caster, "Arrow", 1 + spellpower / 15);
+
+SPELL make-shirt : "#mkshirt" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 20, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [5 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ create_item(caster, "CottonShirt", 1);
+
+SPELL make-tanktop : "#mktanktop" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 20, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [4 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ create_item(caster, "TanktopWhite", 1);
+
+SPELL make-short-tanktop : "#mkshorttanktop" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 20, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [3 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ create_item(caster, "ShortTanktopWhite", 1);
+
+SPELL lightning-strike : "#kig" =
+ LET level = 1
+ school = WAR
+ IN (MANA 25, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["IronPowder"]))
+ => EFFECT CALL adjust_spellpower(school);
+ damage = min(100 + skill(caster, school) * 50,
+ 50 + spellpower * 2);
+ damage_bonus = level(caster) + spellpower;
+ CALL install_attack_spell(1 + spellpower / 60,
+ 3000,
+ 8, 31);
+ ATTRIGGER CALL attack_check(target);
+ CALL elt_damage (target, damage, damage_bonus, ELT_EARTH, ELT_WIND, 17 + random(3));
+
+SPELL fire-ball : "#pof" =
+ LET level = 1
+ school = WAR
+ IN (MANA 30, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["PileOfAsh"]))
+ => EFFECT CALL adjust_spellpower(school);
+ damage = min(50 + skill(caster, school) * 40,
+ 30 + ((spellpower * 3) / 2));
+ damage_bonus = level(caster) + spellpower * 2;
+ radius = 2 + spellpower / 50;
+ CALL install_attack_spell(1 + spellpower / 60,
+ 5000,
+ 10, 31);
+ ATTRIGGER CALL attack_check(target);
+ loc = location(target);
+ #WAIT 500;
+ sfx(loc, 16, 0);
+ FOREACH TARGET target IN rbox(loc, radius)
+ DO IF line_of_sight(loc, location(target))
+ THEN (divisor = (3 + rdistance(loc, location(target)));
+ CALL elt_damage (target, (damage * 3) / divisor, (damage_bonus * 3) / divisor, ELT_WATER, ELT_FIRE, 15);
+ )
+
+SPELL magic-knuckles (target : PC) : "#iom" =
+ LET level = 1
+ school = WAR
+ IN (MANA 20, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["Beer"]))
+ =>
+ EFFECT CALL adjust_spellpower(WAR);
+ str = str(target);
+ CALL install_melee_spell(10 + spellpower / 12, 1000, 0);
+ ATTRIGGER CALL melee_damage(target, 40 + (str / 2) + spellpower / 20, 5 + str);
+
+SPELL flying-backpack (target : PC) : "#uuy" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 12, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 3, 0);
+ IF (caster <> target)
+ THEN sfx(caster, 2, 0);
+ status_change(target, SC_FLYING_BACKPACK, 0, 0, 0, 0, 5000 + (spellpower * 500));
+ message (target, "Your backpack is lifted by a mystical force; you no longer feel it pressing on your back.");
+ ATEND message (target, "Your backpack is no longer levitating.");
+ sfx(target, 2, 0);
+
+
+SPELL protect (target : PC) : "#ism" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 18, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["HardSpike"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 11, 0);
+ IF (caster <> target)
+ THEN sfx(caster, 2, 0);
+ status_change(target, SC_PHYS_SHIELD, 5 + max(15, spellpower / 12), 0, 0, 0, 5000 + (spellpower * 500));
+ message (target, "You feel more protected.");
+ ATEND message (target, "You feel less protected.");
+ sfx(target, 111, 0);
+
+
+LOCAL SPELL rain : "#flosh" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 20, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["BottleOfWater"]))
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ area = rbox(location(caster), 3 + spellpower / 30);
+ FOR i = 0 TO spellpower DO (
+ FOR j = 0 TO spellpower / 100 DO (
+ location = random_location(area);
+ sfx(location, 25, 0);
+ FOREACH TARGET target IN rbox(location, 1) DO
+ IF element(target) = ELT_FIRE
+ THEN injure(caster, target, 5 + random(5 + spellpower / 10), 0);
+ )
+ WAIT 300 - min(spellpower, 200) + random(100);
+ );
+
+SPELL happy-curse (target : PC) : "#happy" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 10, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["WhiteFur"]),
+ REQUIRE rdistance(location(target), location(caster)) < 1 + spellpower / 100)
+ => EFFECT CALL adjust_spellpower(school);
+ FOR i = 0 TO (spellpower / 10) DO (emote(target, 3); WAIT 500;);
+
+SPELL barrier (target : PC) : "#iso" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 18, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["HardSpike"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 3, 0);
+ IF (caster <> target)
+ THEN sfx(caster, 2, 0);
+ status_change(target, SC_MBARRIER, 30 + max(30, spellpower / 8), 0, 0, 0, 2000 + (spellpower * 200));
+ message (target, "You are surrounded by a magical barrier.");
+ ATEND message (target, "Your magical barrier disspiates.");
+ sfx(target, 2, 0);
+
+
+LOCAL SPELL summon-scorps : "#kbms" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 25, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["ScorpionStinger"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 2, 0);
+ CALL summon_spell(1003, 1 + spellpower / 30, 5000 - (spellpower * 9), spellpower * 400, 2);
+
+LOCAL SPELL summon-red-scorps : "#kbmq" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 30, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["RedScorpionStinger"])
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 2, 0);
+ CALL summon_spell(1004, 1 + spellpower / 40, 5000 - (spellpower * 8), spellpower * 350, 3);
+
+
+SPELL detect-players : "#ewm" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 10, CASTTIME 300,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, 2, 0);
+ message = "";
+ FOREACH PC target IN rbox(location(caster), spellpower / 2)
+ DO IF target <> caster
+ THEN (IF message <> ""
+ THEN message = message + ", ";
+ message = message + name_of (target);
+ IF spellpower > 99
+ THEN message = message + "(" + level(target) + ")";
+ )
+ IF message = ""
+ THEN message(caster, "You sense no-one else nearby.");
+ ELSE message(caster, "You sense the following: " + message);
+
+
+
+SPELL lay-on-hands (target : STRING) : "#loh" =
+ LET level = 1
+ school = LIFE
+ IN (MANA 8, CASTTIME 400,
+ REQUIRE hp(caster) > max_hp(caster) / 20,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ (rdistance(location(caster),
+ location(pc(target))) < 2 + (spellpower / 50))
+ && not (running_status_update(pc(target), SC_HALT_REGENERATE))
+ ))
+ => EFFECT CALL adjust_spellpower(school);
+ IF failed(pc(target))
+ THEN target = caster; # quest handling goes here
+ ELSE target = pc(target);
+ needed = max_hp(target) - hp(target);
+ pay_fraction = max(80, 200 - (vit(caster) + (spellpower / 10))); # Pay at least 40%
+ payment = (needed * pay_fraction) / 200;
+ available = hp(caster) - (max_hp(caster) / 20);
+
+ IF payment < available
+ THEN power = needed;
+ ELSE (payment = available;
+ power = (available * 200) / pay_fraction;
+ )
+
+ instaheal(caster, 0 - payment, 0);
+ CALL quickheal(target, power);
+ status_change(caster, SC_HALT_REGENERATE, 0, 0, 0, 0, 10000);
+
+#--------------------------------------------------------------------------------
+# Level 2 spells
+#--------------------------------------------------------------------------------
+
+SPELL summon-partner : "#aid" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 30, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_married(caster))
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(caster, 2, 0);
+ IF (failed (partner (caster)))
+ THEN message (caster, "You call out for your partner, but there is no response.");
+ ELSE (message (caster, "You call out for " + (name_of (partner (caster))) + ".");
+ message (partner(caster), name_of(caster) + " is calling for your aid!");
+ sfx(partner(caster), 2, 0);
+ WAIT (max (5000, 30000 - (spellpower * 60)));
+ IF (failed (partner (caster)))
+ THEN message (caster, "Your partner has abandoned you.");
+ ELSE (sfx(location(partner(caster)), SFX_TELEPORT, 0);
+ dest = awayfrom(location(caster), random_dir(1), 1);
+ warp(partner(caster), dest);
+ sfx(dest, SFX_TELEPORT, 0);
+ )
+ )
+
+
+
+#--------------------------------------------------------------------------------
+# Level 4 spells
+#--------------------------------------------------------------------------------
+
+SPELL shroud : "#aw" =
+ LET level = 4
+ school = ASTRAL
+ IN (MANA 40, CASTTIME 400,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT sfx(caster, 2, 0);
+ shroud(caster, 0x04);
+
+#--------------------------------------------------------------------------------
+# Special-purpose quasispells
+#--------------------------------------------------------------------------------
+
+CONST MIN_MARRY_LEVEL = 32;
+
+SILENT SPELL marriage (target : PC) : "marry" =
+ (REQUIRE is_in(location(caster), @("new_29-1.gat", 28,39) @+ (8, 6)))=>
+ EFFECT IF target == caster # no valid target or tried to marry self?
+ THEN ABORT;
+
+ IF (level(caster) < MIN_MARRY_LEVEL)
+ THEN (message(caster, "You must be level " + MIN_MARRY_LEVEL + " or higher to marry!"); ABORT;)
+
+ IF (level(target) < MIN_MARRY_LEVEL)
+ THEN (message(caster, "Your partner must be level " + MIN_MARRY_LEVEL + " or higher to marry!"); ABORT;)
+
+ IF partner(caster) = target
+ THEN (message(caster, "You and " + name_of(target) + " are already married."); ABORT;)
+
+ IF is_married(caster)
+ THEN (message(caster, "You are already married!"); ABORT;)
+
+ IF is_married(target)
+ THEN (message(caster, name_of(target) + " is already married."); ABORT;);
+
+ IF distance(location(caster), location(target)) <> 1
+ THEN (message(caster, "You have to stand next to each other."); ABORT;);
+
+ IF (count_item(caster, "WeddingRing") == 0 || count_item(target, "WeddingRing") == 0)
+ THEN (message(caster, "You must both be wearing your wedding rings!"); ABORT;)
+
+ script_target = target;
+ {
+ announce @caster_name$ + " is asking " + strcharinfo(0) + " for marriage.", 2;
+ mes @caster_name$ + " wishes to marry you.";
+ mes "Do you accept?";
+ next;
+ menu "Yes, I do!", L_yes,
+ "No.", -;
+ close;
+
+ L_yes:
+ if marriage(@caster_name$)
+ announce @caster_name$ + " and " + strcharinfo(0) + " are now married!", 0;
+ }
+
+ IF not (is_married(caster))
+ THEN message(caster, name_of(target) + " turned down your marriage offer.");
+
+SPELL change-hair-colour (colour : STRING) : "trapa" =
+ (MANA 20) => EFFECT IF colour = "nworbl"
+ THEN x = 0; # light brown
+ ELSE IF colour = "der"
+ THEN x = 1; # red
+ ELSE IF colour = "neerg"
+ THEN x = 2; # green
+ ELSE IF colour = "elprup"
+ THEN x = 3; # purple
+ ELSE IF colour = "yerg"
+ THEN x = 4; # grey
+ ELSE IF colour = "wolley"
+ THEN x = 5; # yellow
+ ELSE IF colour = "eulb"
+ THEN x = 6; # blue
+ ELSE IF colour = "nwrob"
+ THEN x = 7; # brown
+ ELSE IF colour = "elpropl"
+ THEN x = 8; # light purple
+ ELSE IF colour = "elpropd"
+ THEN x = 9; # dark purple
+ ELSE x = random(10);
+ sfx(caster, 2, 0);
+ set_hair_colour(caster, x);
+
+SPELL trick-or-treat : "trick-or-treat" =
+ (CASTTIME 30000, MANA 20,
+ COMPONENTS [ "BugLeg" ]) => EFFECT IF (random(2))
+ THEN (sfx(caster, 2, 0);
+ FOR i = 0 TO random(10) DO
+ drop_item_for (random_location(rbox(location(caster), 5)),
+ "Candy", 1, 10000 + random(10000), caster, 3000);
+ FOR i = 0 TO random(10) DO
+ drop_item_for (random_location(rbox(location(caster), 5)),
+ "ChocolateBar", 1, 10000 + random(10000), caster, 3000);
+ )
+ ELSE (sfx(caster, 5, 0);
+ message(caster, "No treat for you!");
+ spawn(rbox(location(caster), 3), caster, 1010, 0, 1 + random(3), 10000 + random(20000));
+ FOREACH MOB target IN rbox(location(caster), 5) DO
+ (sfx(target, 5, 0);
+ aggravate(target, 0, caster);)) \ No newline at end of file
diff --git a/conf/map_athena.conf b/conf/map_athena.conf
deleted file mode 100644
index 8457e450..00000000
--- a/conf/map_athena.conf
+++ /dev/null
@@ -1,209 +0,0 @@
-// eAthena Map-Server Configuration File
-
-// Interserver communication passwords, set in account.txt (or equiv.)
-userid: s1
-passwd: p1
-
-// Character Server IP
-char_ip:81.161.192.4
-// Character Server Port
-char_port: 6122
-
-// Map Server IP
-map_ip:81.161.192.4
-// Map Server Port
-map_port: 5122
-
-// Database autosave time, in seconds.
-autosave_time: 60
-
-// Message of the day file, when a character logs on, this message is displayed.
-motd_txt: conf/motd.txt
-
-// When @help or @h is typed when you are a gm, this is displayed for helping new gms understand gm commands.
-help_txt: conf/help.txt
-
-mapreg_txt: save/mapreg.txt
-
-// import: conf/import/map_conf.txt
-
-// Maps
-
-map: new_25-1.gat
-map: new_24-1.gat
-map: new_23-1.gat
-map: new_22-1.gat
-map: new_21-1.gat
-map: new_20-1.gat
-map: new_19-1.gat
-map: new_18-1.gat
-map: new_17-1.gat
-map: new_16-1.gat
-map: new_15-1.gat
-map: new_14-1.gat
-map: new_13-1.gat
-map: new_12-1.gat
-map: new_11-1.gat
-map: new_10-1.gat
-map: new_9-1.gat
-map: new_8-1.gat
-map: new_7-1.gat
-map: new_6-1.gat
-map: new_5-1.gat
-map: new_4-1.gat
-map: new_3-1.gat
-map: new_2-1.gat
-map: new_1-1.gat
-
-// PVP
-
-npc: npc/pvp/maps.txt
-
-// NPCs (ordered in alphabetical order by name).
-
-// Tulimshar 3-1
-npc: npc/tulimshar/banker.txt
-npc: npc/tulimshar/barber.txt
-npc: npc/tulimshar/children.txt
-npc: npc/tulimshar/elanore.txt
-npc: npc/tulimshar/guards.txt
-npc: npc/tulimshar/guide.txt
-npc: npc/tulimshar/man.txt
-npc: npc/tulimshar/merchant.txt
-npc: npc/tulimshar/monster_guide.txt
-npc: npc/tulimshar/monsters.txt
-npc: npc/tulimshar/passages.txt
-npc: npc/tulimshar/rewards_master.txt
-npc: npc/tulimshar/sandra.txt
-npc: npc/tulimshar/vincent.txt
-
-// Tulimshar casino 8-1
-npc: npc/tulimshar-casino/casino.txt
-
-// Western desert 1-1
-// npc: npc/western-desert/dark_mage.txt
-npc: npc/western-desert/merchant.txt
-npc: npc/western-desert/monsters.txt
-npc: npc/western-desert/nomads.txt
-npc: npc/western-desert/passages.txt
-
-// Eastern desert 7-1
-npc: npc/eastern-desert/monsters.txt
-npc: npc/eastern-desert/passages.txt
-npc: npc/eastern-desert/npcs.txt
-
-// Eastern desert pass 24-1 / 25-1
-npc: npc/eastern-desert-pass/monsters.txt
-npc: npc/eastern-desert-pass/passages.txt
-npc: npc/eastern-desert-pass/npcs.txt
-
-// Woodland 9-1
-npc: npc/woodland/alchemist.txt
-npc: npc/woodland/monsters.txt
-npc: npc/woodland/passages.txt
-
-// South-woodland 14-1
-npc: npc/south-woodland/monsters.txt
-npc: npc/south-woodland/passages.txt
-
-// Cave level 1 2-1
-npc: npc/cave1/miners.txt
-npc: npc/cave1/monsters.txt
-npc: npc/cave1/passages.txt
-
-// Cave level 2 (Underground Palace) 5-1
-npc: npc/cave2/chest.txt
-npc: npc/cave2/monsters.txt
-npc: npc/cave2/passages.txt
-
-// Xmas snow map 10-1
-npc: npc/xmas/monsters.txt
-npc: npc/xmas/passages.txt
-//npc: npc/xmas/santa.txt
-npc: npc/xmas/snowman.txt
-npc: npc/xmas/taro.txt
-
-// Snow village 11-1
-//npc: npc/snow-village/monsters.txt
-npc: npc/snow-village/sexchanger.txt
-npc: npc/snow-village/shops.txt
-npc: npc/snow-village/startrek.txt
-npc: npc/snow-village/passages.txt
-
-// Ice cave 12-1
-npc: npc/ice-cave/monsters.txt
-npc: npc/ice-cave/passages.txt
-
-// Small cave 4-1
-npc: npc/cave-small/hermit.txt
-npc: npc/cave-small/monsters.txt
-npc: npc/cave-small/passages.txt
-
-// Woodland-desert link 15-1
-npc: npc/woodland-desert/monsters.txt
-npc: npc/woodland-desert/passages.txt
-
-// South-west woodland 16-1
-npc: npc/south-east-woodland/monsters.txt
-npc: npc/south-east-woodland/passages.txt
-
-// Big cave 17-1
-npc: npc/cave-big/monsters.txt
-npc: npc/cave-big/passages.txt
-
-// Arena 6-1
-npc: npc/arena/guards.txt
-npc: npc/arena/monsters.txt
-
-// Woodland village 19-1
-npc: npc/woodland-village/monsters.txt
-npc: npc/woodland-village/passages.txt
-npc: npc/woodland-village/pirate.txt
-npc: npc/woodland-village/villagers.txt
-npc: npc/woodland-village/shops.txt
-npc: npc/woodland-village/forestbowquest.txt
-npc: npc/woodland-village/scythequest.txt
-npc: npc/woodland-village/ironore.txt
-
-//Dimonds Cove
-npc: npc/dimonds-cove/passages.txt
-npc: npc/dimonds-cove/dimonds.txt
-npc: npc/dimonds-cove/doug.txt
-npc: npc/dimonds-cove/workers.txt
-
-// Christmas 2006
-//npc: npc/xmas/xmas1.txt
-//npc: npc/xmas/xmas2.txt
-//npc: npc/xmas/xmas3.txt
-//npc: npc/xmas/xmas4.txt
-//npc: npc/xmas/xmas5.txt
-//npc: npc/xmas/xmas6.txt
-//npc: npc/xmas/xmas7.txt
-//npc: npc/xmas/xmas8.txt
-//npc: npc/xmas/xmas9.txt
-//npc: npc/xmas/xmas10.txt
-//npc: npc/xmas/xmas11.txt
-//npc: npc/xmas/xmas12.txt
-//npc: npc/xmas/xmas13.txt
-//npc: npc/xmas/xmas14.txt
-//npc: npc/xmas/xmas15.txt
-//npc: npc/xmas/xmas16.txt
-//npc: npc/xmas/xmas17.txt
-//npc: npc/xmas/xmas18.txt
-//npc: npc/xmas/xmas19.txt
-//npc: npc/xmas/xmas20.txt
-
-// Halloween 2007
-//npc: npc/halloween/2007/monsters.txt
-//npc: npc/halloween/2007/summon.txt
-
-// Christmas 2007
-//npc: npc/xmas2007/pre-xmas.txt
-//npc: npc/xmas2007/after-xmas.txt
-
-// Easter 2008
-//npc: npc/easter2008/monsters.txt
-//npc: npc/easter2008/npc.txt
-
-//Savepoints
-npc: npc/savepoints/savepoints.txt
diff --git a/conf/map_athena.conf.example b/conf/map_athena.conf.example
new file mode 100644
index 00000000..2b5da330
--- /dev/null
+++ b/conf/map_athena.conf.example
@@ -0,0 +1,348 @@
+// eAthena Map-Server Configuration File
+
+// Interserver communication passwords, set in account.txt (or equiv.)
+userid: s1
+passwd: p1
+
+// Character Server IP
+char_ip:81.161.192.4
+// Character Server Port
+char_port: 6122
+
+// Map Server IP
+map_ip:81.161.192.4
+// Map Server Port
+map_port: 5122
+
+// Database autosave time, in seconds.
+autosave_time: 60
+
+// Message of the day file, when a character logs on, this message is displayed.
+motd_txt: conf/motd.txt
+
+// When @help or @h is typed when you are a gm, this is displayed for helping new gms understand gm commands.
+help_txt: conf/help.txt
+
+mapreg_txt: save/mapreg.txt
+
+// import: conf/import/map_conf.txt
+
+// Maps
+
+map: new_39-1.gat
+map: new_38-1.gat
+map: new_37-1.gat
+map: new_36-1.gat
+map: new_35-1.gat
+map: new_34-1.gat
+map: new_33-1.gat
+map: new_32-1.gat
+map: new_31-1.gat
+map: new_30-1.gat
+map: new_29-1.gat
+map: new_28-1.gat
+map: new_27-1.gat
+map: new_26-1.gat
+map: new_25-1.gat
+map: new_24-1.gat
+map: new_23-1.gat
+map: new_22-1.gat
+map: new_21-1.gat
+map: new_20-1.gat
+map: new_19-1.gat
+map: new_18-1.gat
+map: new_17-1.gat
+map: new_16-1.gat
+map: new_15-1.gat
+map: new_14-1.gat
+map: new_13-1.gat
+map: new_12-1.gat
+map: new_11-1.gat
+map: new_10-1.gat
+map: new_9-1.gat
+map: new_8-1.gat
+map: new_7-1.gat
+map: new_6-1.gat
+map: new_5-1.gat
+map: new_4-1.gat
+map: new_3-1.gat
+map: new_2-1.gat
+map: new_1-1.gat
+
+// NPC Functions
+npc: npc/functions/banker.txt
+npc: npc/functions/barber.txt
+npc: npc/functions/game_rules.txt
+npc: npc/functions/inn.txt
+npc: npc/functions/mob_points.txt
+npc: npc/functions/process_equip.txt
+npc: npc/functions/slot_machine.txt
+npc: npc/functions/soul_menhir.txt
+
+// NPCs (ordered by map number).
+
+// new_1-1 Western desert
+// npc: npc/western-desert/dark_mage.txt
+npc: npc/new_1-1-western-desert/rogue.txt
+npc: npc/new_1-1-western-desert/merchant.txt
+npc: npc/new_1-1-western-desert/monsters.txt
+npc: npc/new_1-1-western-desert/nomads.txt
+npc: npc/new_1-1-western-desert/passages.txt
+
+// new-2_1 Cave level 1
+npc: npc/new_2-1-cave1/miners.txt
+npc: npc/new_2-1-cave1/monsters.txt
+npc: npc/new_2-1-cave1/passages.txt
+
+// new_3-1 Tulimshar
+npc: npc/new_3-1-tulimshar/banker.txt
+npc: npc/new_3-1-tulimshar/barber.txt
+npc: npc/new_3-1-tulimshar/bard.txt
+npc: npc/new_3-1-tulimshar/bleacher.txt
+npc: npc/new_3-1-tulimshar/children.txt
+npc: npc/new_3-1-tulimshar/constable.txt
+npc: npc/new_3-1-tulimshar/elanore.txt
+npc: npc/new_3-1-tulimshar/guards.txt
+npc: npc/new_3-1-tulimshar/guide.txt
+npc: npc/new_3-1-tulimshar/man.txt
+npc: npc/new_3-1-tulimshar/merchant.txt
+npc: npc/new_3-1-tulimshar/monster_guide.txt
+npc: npc/new_3-1-tulimshar/monsters.txt
+npc: npc/new_3-1-tulimshar/passages.txt
+npc: npc/new_3-1-tulimshar/rewards_master.txt
+npc: npc/new_3-1-tulimshar/rules.txt
+npc: npc/new_3-1-tulimshar/sandra.txt
+npc: npc/new_3-1-tulimshar/vincent.txt
+npc: npc/new_3-1-tulimshar/soul-menhir.txt
+npc: npc/new_3-1-tulimshar/workers.txt
+
+// new_4-1 Small bat cave
+npc: npc/new_4-1-cave-small/hermit.txt
+npc: npc/new_4-1-cave-small/monsters.txt
+npc: npc/new_4-1-cave-small/passages.txt
+
+// new_5-1 Cave level 2 (Underground Palace)
+npc: npc/new_5-1-cave2/chest.txt
+npc: npc/new_5-1-cave2/monsters.txt
+npc: npc/new_5-1-cave2/passages.txt
+
+// new_6-1 Arena
+npc: npc/new_6-1-arena/guards.txt
+npc: npc/new_6-1-arena/monsters.txt
+npc: npc/new_6-1-arena/pvpflag.txt
+
+// new_7-1 Eastern desert
+npc: npc/new_7-1-eastern-desert/monsters.txt
+npc: npc/new_7-1-eastern-desert/passages.txt
+npc: npc/new_7-1-eastern-desert/npcs.txt
+
+// new_8-1 Tulimshar indoor
+npc: npc/new_8-1-tulimshar/casino.txt
+npc: npc/new_8-1-tulimshar/omar.txt
+npc: npc/new_8-1-tulimshar/passages.txt
+npc: npc/new_8-1-tulimshar/phaet.txt
+npc: npc/new_8-1-tulimshar/shops.txt
+npc: npc/new_8-1-tulimshar/troupe_leader.txt
+
+// new_9-1 Woodland
+npc: npc/new_9-1-woodland/alchemist.txt
+npc: npc/new_9-1-woodland/monsters.txt
+npc: npc/new_9-1-woodland/passages.txt
+npc: npc/new_9-1-woodland/oscar.txt
+
+// new_10-1 Xmas snow map
+npc: npc/new_10-1-xmas/monsters.txt
+npc: npc/new_10-1-xmas/passages.txt
+// npc: npc/new_10-1-xmas/santa.txt
+npc: npc/new_10-1-xmas/snowman.txt
+npc: npc/new_10-1-xmas/taro.txt
+
+// new_11-1 Snow village
+// npc: npc/new_11-1-snow-village/monsters.txt
+npc: npc/new_11-1-snow-village/sexchanger.txt
+npc: npc/new_11-1-snow-village/startrek.txt
+npc: npc/new_11-1-snow-village/passages.txt
+npc: npc/new_11-1-snow-village/soul-menhir.txt
+npc: npc/new_11-1-snow-village/amrak.txt
+
+// new_12-1 Ice cave
+npc: npc/new_12-1-ice-cave/monsters.txt
+npc: npc/new_12-1-ice-cave/passages.txt
+
+// new_13-1 Snow village shops.
+npc: npc/new_13-1-snow-village-shops/shops.txt
+npc: npc/new_13-1-snow-village-shops/passages.txt
+npc: npc/new_13-1-snow-village-shops/furquest.txt
+
+// new_14-1 South-woodland
+npc: npc/new_14-1-south-woodland/monsters.txt
+npc: npc/new_14-1-south-woodland/passages.txt
+
+// new_15-1 Woodland-desert link
+npc: npc/new_15-1-woodland-desert/monsters.txt
+npc: npc/new_15-1-woodland-desert/passages.txt
+
+// new_16-1 South-west woodland
+npc: npc/new_16-1-south-east-woodland/monsters.txt
+npc: npc/new_16-1-south-east-woodland/passages.txt
+
+// new_17-1 Big cave
+npc: npc/new_17-1-cave-big/monsters.txt
+npc: npc/new_17-1-cave-big/passages.txt
+
+// new_18-1 Woodland village surroundings
+npc: npc/new_18-1-woodland-village/monsters.txt
+npc: npc/new_18-1-woodland-village/passages.txt
+npc: npc/new_18-1-woodland-village/george.txt
+npc: npc/new_18-1-woodland-village/hinnak.txt
+
+// new_19-1 Woodland village
+npc: npc/new_19-1-woodland-village/jack.txt
+npc: npc/new_19-1-woodland-village/milly.txt
+npc: npc/new_19-1-woodland-village/old_man.txt
+npc: npc/new_19-1-woodland-village/old_woman.txt
+npc: npc/new_19-1-woodland-village/passages.txt
+npc: npc/new_19-1-woodland-village/sabine.txt
+npc: npc/new_19-1-woodland-village/soul-menhir.txt
+
+// new_20-1 Woodland village indoor
+npc: npc/new_20-1-woodland-village/alan.txt
+npc: npc/new_20-1-woodland-village/doctor.txt
+npc: npc/new_20-1-woodland-village/drunks.txt
+npc: npc/new_20-1-woodland-village/inspector.txt
+npc: npc/new_20-1-woodland-village/kfahr.txt
+npc: npc/new_20-1-woodland-village/misc.txt
+npc: npc/new_20-1-woodland-village/nicholas.txt
+npc: npc/new_20-1-woodland-village/nurse.txt
+npc: npc/new_20-1-woodland-village/passages.txt
+npc: npc/new_20-1-woodland-village/richard.txt
+npc: npc/new_20-1-woodland-village/selim.txt
+npc: npc/new_20-1-woodland-village/shops.txt
+npc: npc/new_20-1-woodland-village/waitress.txt
+
+// new_21-1 Ice cave 2
+npc: npc/new_21-1-ice-cave2/monsters.txt
+npc: npc/new_21-1-ice-cave2/passages.txt
+
+// new_22-1 Snake cave
+npc: npc/new_22-1-snake-cave/monsters.txt
+npc: npc/new_22-1-snake-cave/passages.txt
+
+// new_23-1 Dimonds Cove
+npc: npc/new_23-1-dimonds-cove/passages.txt
+npc: npc/new_23-1-dimonds-cove/dimonds.txt
+npc: npc/new_23-1-dimonds-cove/doug.txt
+npc: npc/new_23-1-dimonds-cove/loratay.txt
+npc: npc/new_23-1-dimonds-cove/workers.txt
+
+// new_24-1 Eastern desert mountain passage
+npc: npc/new_24-1-eastern-desert-mountain-passage/mika.txt
+npc: npc/new_24-1-eastern-desert-mountain-passage/monsters.txt
+npc: npc/new_24-1-eastern-desert-mountain-passage/pachua.txt
+npc: npc/new_24-1-eastern-desert-mountain-passage/passages.txt
+
+// new_25-1 Eastern desert cave
+npc: npc/new_25-1-eastern-desert-cave/monsters.txt
+npc: npc/new_25-1-eastern-desert-cave/passages.txt
+
+// new_26-1 Forest Hill 1
+npc: npc/new_26-1-hill1/monsters.txt
+npc: npc/new_26-1-hill1/passages.txt
+npc: npc/new_26-1-hill1/shops.txt
+
+// new_27-1 Forest Hill 2 (Cave)
+npc: npc/new_27-1-hill2/monsters.txt
+npc: npc/new_27-1-hill2/passages.txt
+
+// new_28-1 Forest east of map 26
+npc: npc/new_28-1-hillwest/passages.txt
+npc: npc/new_28-1-hillwest/monsters.txt
+
+// new_29-1 Forest west of map 9
+npc: npc/new_29-1-west-woodland/passages.txt
+npc: npc/new_29-1-west-woodland/monsters.txt
+npc: npc/new_29-1-west-woodland/taro.txt
+npc: npc/new_29-1-west-woodland/wedding-officiator.txt
+
+// new_30-1 Caves for map 29
+npc: npc/new_30-1-west-woodland-cave/passages.txt
+npc: npc/new_30-1-west-woodland-cave/monsters.txt
+
+// new_31-1 Forest west of map 14
+npc: npc/new_31-1-southwest-woodland/passages.txt
+npc: npc/new_31-1-southwest-woodland/monsters.txt
+npc: npc/new_31-1-southwest-woodland/alice.txt
+
+// new_32-1 Forest south of map 14
+npc: npc/new_32-1-south-woodland-2/passages.txt
+npc: npc/new_32-1-south-woodland-2/monsters.txt
+
+// new_33-1 Forest north of map 28
+npc: npc/new_33-1-hill-northwest/passages.txt
+npc: npc/new_33-1-hill-northwest/monsters.txt
+
+// new_34-1 Beach west of Tulimshar
+npc: npc/new_34-1-north-beach/passages.txt
+npc: npc/new_34-1-north-beach/monsters.txt
+
+// new_35-1 Cave beneath Hurnscald
+npc: npc/new_35-1-woodland-village/passages.txt
+npc: npc/new_35-1-woodland-village/monsters.txt
+
+// new_36-1 Magic house in forest 28
+npc: npc/new_36-1-magic-house/passages.txt
+npc: npc/new_36-1-magic-house/wizard.txt
+npc: npc/new_36-1-magic-house/apprentice.txt
+npc: npc/new_36-1-magic-house/notes.txt
+
+// new_37-1 Mine north of Hurnscald
+npc: npc/new_37-1-woodland-mine/miners.txt
+npc: npc/new_37-1-woodland-mine/monsters.txt
+npc: npc/new_37-1-woodland-mine/passages.txt
+
+// new_38-1 Mines north of Hurnscald (indoor)
+npc: npc/new_38-1-woodland-mine/angus.txt
+npc: npc/new_38-1-woodland-mine/books.txt
+npc: npc/new_38-1-woodland-mine/caul.txt
+npc: npc/new_38-1-woodland-mine/miners.txt
+npc: npc/new_38-1-woodland-mine/monsters.txt
+npc: npc/new_38-1-woodland-mine/passages.txt
+npc: npc/new_38-1-woodland-mine/receptionist.txt
+
+// Christmas 2006
+// npc: npc/xmas/xmas1.txt
+// npc: npc/xmas/xmas2.txt
+// npc: npc/xmas/xmas3.txt
+// npc: npc/xmas/xmas4.txt
+// npc: npc/xmas/xmas5.txt
+// npc: npc/xmas/xmas6.txt
+// npc: npc/xmas/xmas7.txt
+// npc: npc/xmas/xmas8.txt
+// npc: npc/xmas/xmas9.txt
+// npc: npc/xmas/xmas10.txt
+// npc: npc/xmas/xmas11.txt
+// npc: npc/xmas/xmas12.txt
+// npc: npc/xmas/xmas13.txt
+// npc: npc/xmas/xmas14.txt
+// npc: npc/xmas/xmas15.txt
+// npc: npc/xmas/xmas16.txt
+// npc: npc/xmas/xmas17.txt
+// npc: npc/xmas/xmas18.txt
+// npc: npc/xmas/xmas19.txt
+// npc: npc/xmas/xmas20.txt
+
+// Halloween 2007
+// npc: npc/halloween/2007/monsters.txt
+// npc: npc/halloween/2007/summon.txt
+
+// Christmas 2007
+// npc: npc/xmas2007/pre-xmas.txt
+// npc: npc/xmas2007/after-xmas.txt
+
+// Easter 2008
+// npc: npc/easter2008/monsters.txt
+// npc: npc/easter2008/npc.txt
+
+// Halloween 2008
+npc: npc/halloween/2008/monsters.txt
+npc: npc/halloween/2008/prize_master.txt
diff --git a/conf/motd.txt b/conf/motd.txt.example
index f570494c..f570494c 100644
--- a/conf/motd.txt
+++ b/conf/motd.txt.example
diff --git a/conf/msg_athena.conf b/conf/msg_athena.conf.example
index 1aacf66b..1aacf66b 100644
--- a/conf/msg_athena.conf
+++ b/conf/msg_athena.conf.example
diff --git a/conf/script_athena.conf b/conf/script_athena.conf.example
index 21d4a6f4..21d4a6f4 100644
--- a/conf/script_athena.conf
+++ b/conf/script_athena.conf.example