summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid <reidyaro@gmail.com>2011-10-16 19:04:16 +0200
committerReid <reidyaro@gmail.com>2011-10-16 19:04:16 +0200
commit4eef25e666e02ba7fdd8474a9d8b9eb54408df66 (patch)
tree550d224a638923aa172085e804a91e8833c2d9c4
downloadserverdata-4eef25e666e02ba7fdd8474a9d8b9eb54408df66.tar.gz
serverdata-4eef25e666e02ba7fdd8474a9d8b9eb54408df66.tar.bz2
serverdata-4eef25e666e02ba7fdd8474a9d8b9eb54408df66.tar.xz
serverdata-4eef25e666e02ba7fdd8474a9d8b9eb54408df66.zip
Initialization of serverdata for the Beta Release of Evol Online.
-rw-r--r--COPYING340
-rw-r--r--conf/atcommand_athena.conf7
-rw-r--r--conf/atcommand_local.conf.example497
-rw-r--r--conf/battle_athena.conf748
-rw-r--r--conf/battle_local.conf.example1
-rwxr-xr-xconf/build-magic.sh21
-rw-r--r--conf/char_athena.conf133
-rw-r--r--conf/char_local.conf.example25
-rw-r--r--conf/eathena-monitor.conf.example14
-rw-r--r--conf/gm_account.txt.example1
-rw-r--r--conf/grf-files.txt0
-rw-r--r--conf/help.txt.example193
-rw-r--r--conf/inter_athena.conf31
-rw-r--r--conf/ladmin_athena.conf28
-rw-r--r--conf/ladmin_local.conf.example10
-rw-r--r--conf/lan_support.conf41
-rw-r--r--conf/login_athena.conf130
-rw-r--r--conf/login_local.conf.example30
-rw-r--r--conf/magic.conf.template1835
-rw-r--r--conf/magic.conf.tmw.template1617
-rw-r--r--conf/map_athena.conf19
-rw-r--r--conf/map_local.conf.example15
-rw-r--r--conf/motd.txt.example1
-rw-r--r--conf/msg_athena.conf528
-rw-r--r--conf/script_athena.conf2
-rw-r--r--conf/water.txt54
-rw-r--r--conf/water_height.txt68
-rw-r--r--data/resnametable.txt11
-rw-r--r--db/attr_fix.txt53
-rw-r--r--db/card_labels.txt1
-rw-r--r--db/const.txt206
-rw-r--r--db/exp.txt99
-rw-r--r--db/exp2.txt99
-rw-r--r--db/item_bluebox.txt7
-rw-r--r--db/item_cardalbum.txt7
-rw-r--r--db/item_db.txt3
-rw-r--r--db/item_descriptions.txt1
-rw-r--r--db/item_giftbox.txt7
-rw-r--r--db/item_noequip.txt4
-rw-r--r--db/item_scroll.txt5
-rw-r--r--db/item_violetbox.txt7
-rw-r--r--db/job_db1.txt71
-rw-r--r--db/job_db2-2.txt26
-rw-r--r--db/job_db2.txt71
-rw-r--r--db/mob_branch.txt9
-rw-r--r--db/mob_db.txt2
-rw-r--r--db/mob_skill_db.txt66
-rw-r--r--db/skill_db.txt45
-rw-r--r--db/skill_require_db.txt3
-rw-r--r--db/skill_tree.txt15
-rw-r--r--db/statpoint.txt255
-rw-r--r--gm/.placeholder0
-rw-r--r--langs/lang_el.old0
-rw-r--r--langs/lang_el.txt808
-rw-r--r--langs/lang_en.old489
-rw-r--r--langs/lang_en.txt808
-rw-r--r--langs/lang_es.old33
-rw-r--r--langs/lang_es.txt808
-rw-r--r--langs/lang_fr.old156
-rw-r--r--langs/lang_fr.txt808
-rw-r--r--langs/lang_id.old0
-rw-r--r--langs/lang_id.txt808
-rw-r--r--langs/lang_it.old87
-rw-r--r--langs/lang_it.txt808
-rw-r--r--langs/lang_nl.old126
-rw-r--r--langs/lang_nl.txt808
-rw-r--r--langs/lang_ru.old393
-rw-r--r--langs/lang_ru.txt808
-rw-r--r--langs/lang_vls.old126
-rw-r--r--langs/lang_vls.txt808
-rw-r--r--langs/langs.txt9
-rw-r--r--log/.placeholder0
-rw-r--r--save/account.txt.example13
73 files changed, 16166 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 00000000..5b6e7c66
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 2 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf
new file mode 100644
index 00000000..82204f1a
--- /dev/null
+++ b/conf/atcommand_athena.conf
@@ -0,0 +1,7 @@
+// Athena atcommand Configuration file.
+// Translated by Peter Kieser <pfak@telus.net>
+
+
+// local settings for this server in this file
+import: conf/atcommand_local.conf
+
diff --git a/conf/atcommand_local.conf.example b/conf/atcommand_local.conf.example
new file mode 100644
index 00000000..0e87addc
--- /dev/null
+++ b/conf/atcommand_local.conf.example
@@ -0,0 +1,497 @@
+// Athena atcommand Local Configuration file.
+
+// Set here the symbol that you want to use for your commands
+// Only 1 character is get (default is '@'). You can set any character,
+// except control-character (0x00-0x1f), '%' (party chat speaking) and '/' (standard ragnarok GM commands)
+// With default character, all commands begin by a '@': <example> @revive
+command_symbol: @
+
+
+// 0: normal player commands
+
+// Displays helpfile in Athena base directory.
+help: 0
+
+// Give server time. (6 same commands)
+time: 0
+date: 0
+server_date: 0
+serverdate: 0
+server_time: 0
+servertime: 0
+
+// To change your (own) email (characters protection)
+// note: this command doesn't check email itself, but check structure of the email (xxx@xxx)
+// if you want be sure of each e-mail disable this option (value: 100)
+email: 0
+
+// To become GM (need password; password is set in login_athena.conf).
+// special!: only a non-GM (player with gm level 0) need to have this command.
+// if you change the value, be sure of what you do!
+// To be able to create a gm with @gm, you must:
+// - give a level to level_new_gm (parameter of login_athena.conf) (not 0)
+// - enable to level 0 the @gm command (atcommand_athena.conf) (default 100) - Only level 0 can give access to this command
+// - enable gm commands to normal player (battle_athena.conf, atcommand_gm_only parameter)
+// - and normal player must give correct password when he use the @gm command (gm_pass paramter in login_athena.conf)
+gm: 100
+
+
+//-------------------------
+// 40: "Dev"
+
+// Broadcast to the whole server
+broadcast: 40
+
+// Broadcast to the map you are on
+local_broadcast: 40
+
+// Suicide your character.
+die: 40
+
+// Locate someone on a map, returns your coordinates if the person isn't on.
+where: 40
+
+// Spawns you to set points in major cities.
+go: 40
+
+// Warp yourself to a person.
+goto: 40
+
+// follow a player (including warping to them)
+follow: 40
+
+// Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit").
+kick: 40
+
+// Returns list of logged in characters with their position.
+who: 40
+
+// Returns list of logged in characters with their party/guild.
+whogroup: 40
+
+// Returns list of logged in characters with their position in a specifical map.
+whomap: 40
+
+// Returns list of logged in characters with their party/guild in a specifical map.
+whomapgroup: 40
+
+// Like @who+@who2+who3, but only for GM.
+whogm: 40
+
+// Enables you to view other characters stats.
+charstats: 40
+
+// Heals a person to full HP/SP.
+heal: 40
+
+// GM Hide (hides you from monsters and most reporting functions).
+// To hide from other players use @invisible
+hide: 40
+
+// Enables you to to jump randomly on a map (that you are already on).
+jump: 40
+
+// Warps you to your last save point.
+return: 40
+
+// Warp yourself to a certain map, at (x,y) coordinates.
+warp: 40
+
+// Changes GM clothes color (2 same commands)
+dye: 40
+ccolor: 40
+
+// Changes own hair style.
+hairstyle: 40
+
+// Changes own hair color.
+haircolor: 40
+
+// Deletes all your items.
+itemreset: 40
+
+// Sets your spawn point (aka save point).
+save: 40
+
+// Send text to the GM log
+log: 40
+l: 40
+
+// Send text to the GM log and local chat
+tee: 40
+t: 40
+
+//--------------------
+// 50: Event coordinators
+
+// make yourself invisible to everyone
+invisible: 50
+
+// make yourself visible to everyone
+visible: 50
+
+// Spawns a monster, and a certain amount
+spawn: 50
+
+//Summons a monster, and a certain amount
+summon: 50
+
+//--------------------
+// 60: "GM"
+
+// Enable all wispers for a player
+inall: 60
+
+// Disable all wispers for a player
+exall: 60
+
+// Shows Stats Of All Characters Online
+charstatsall: 60
+
+// Turns PVP (Person v. Person) off on a map.
+pvpoff: 60
+
+// Enables PVP on a map.
+pvpon: 60
+
+// Sets the speed you can walk/attack at. Default is 150.
+speed: 60
+
+// Kill all monsters in map (with drops)
+killmonster: 60
+
+// Kill all monsters in map (without drops)
+killmonster2: 60
+
+// Check which characters are online from a characters IP address
+ipcheck: 60
+
+// store all your items
+storeall: 60
+
+// allow other players to hit you out of pvp
+killable: 60
+
+// look up a skill by name
+skillid: 60
+
+// use a skill by id
+useskill: 60
+
+// make another player killable
+charkillable: 60
+
+// Resurects yourself.
+alive: 60
+
+// Levels your character to specified level (adds to your level).
+blvl: 60
+
+// Raises your job level (3 same commands).
+jlvl: 60
+
+// Unmute a player
+unmute: 60
+
+// Sets another persons base level.
+charblvl: 60
+
+// Changes the sex of an online player (all characters on the account)
+charchangesex: 60
+
+// Remove items from a character
+chardelitem: 60
+
+// Sets another persons job level.
+charjlvl: 60
+
+// Gives another character status points
+charstpoint: 60
+
+// Gives another character skill points
+charskpoint: 60
+
+// Resets another character's stats
+charreset: 60
+
+// Resets another character's status, skills
+charstreset: 60
+charskreset: 60
+
+// resets a char back to when it was first created
+charwipe: 60
+
+// Saves the respawn point of another character.
+charsave: 60
+
+// Kill another character without hitting them.
+kill: 60
+
+// Enable hitting a player even when not in pvp
+killer: 60
+
+// Warps a character to you
+recall: 60
+
+// Revives a character, and heals them.
+revive: 60
+
+// Warp another person to a certain map, at (x,y) coordinates
+charwarp: 60
+
+// Change Status of your character
+str: 60
+agi: 60
+vit: 60
+int: 60
+dex: 60
+luk: 60
+
+// Gets all skills
+allskills: 60
+
+// sets GM stats to maximum
+allstats: 60
+
+// Gives you job points.
+stpoint: 60
+
+// Gives you skill points of desired amount.
+skpoint: 60
+
+// To block definitively a player
+block: 60
+
+// To unblock a player
+unblock: 60
+
+// To ban a player for a limited time
+ban: 60
+
+// To unban a player
+unban: 60
+
+// To send specified character in jails
+jail: 60
+
+// To discharge a prisoner
+unjail: 60
+
+// drop a players possessions on the ground
+chardropall: 60
+
+// put a players possessions in storage
+charstoreall: 60
+
+// iterate over players
+// forward
+hugo: 60
+// backward
+linus: 60
+
+//----------------------
+// 80: "eA Dev"
+
+// set magic properties on a char
+setmagic: 80
+
+// list magic properties on a char
+magicinfo: 80
+
+// Set your character display options. (Visual effects of your character)
+option: 80
+
+// Gives you money (zeny) of desired amount.
+zeny: 80
+
+// Changes another character's zenny
+charzeny: 80
+
+// Set options on another character.
+charoption: 80
+
+// Create a static warp portal that lasts until the next reboot
+addwarp: 80
+
+// Set the map you are on to day.
+day: 80
+
+// Kills everyone on the server.
+doom: 80
+
+// Kills everyone on the map you are on.
+doommap: 80
+
+// Set the map you are currently on to night.
+night: 80
+
+// Recalls Everyone To Your Coordinates
+recallall: 80
+
+// Revives all players on the map.
+raisemap: 80
+
+// Revives all players on the server.
+raise: 80
+
+// Enables a NPC.
+enablenpc: 80
+
+// Disables a NPC.
+disablenpc: 80
+
+// Move a NPC
+npcmove: 80
+
+// turn skills on for a map
+skillon: 80
+
+// turn skills off for a map
+skilloff: 80
+
+// Enables lost skills.
+lostskill: 80
+
+// find id of item by name
+idsearch: 80
+
+// Creates an item of your choosing, either Item ID or Name (1 command + /item).
+item: 80
+
+// Creates weapon of desired element.
+produce: 80
+
+// ??
+itemcheck: 80
+
+
+//---------------------------
+// 99: "Admin"
+
+// drop all your items
+dropall: 99
+
+// Enables GVG on a map (2 same commands).
+gvgon: 99
+gpvpon: 99
+
+// Turns GVG (Guild v. Guild) off on a map (2 same commands).
+gvgoff: 99
+gpvpoff: 99
+
+// Enables platinum skills.
+questskill: 99
+
+// Display your ignore list (people from which you ignore wisps)
+ignorelist: 99
+
+// Display ignore list of a player (people from which the player ignore wisps)
+charignorelist: 99
+
+// Brings up your guild storage wherever you are.
+gstorage: 99
+
+// Do some visual effect on your character
+effect: 99
+
+// Changes character's model
+charmodel: 99
+
+// Starts Guild Wars
+agitstart: 99
+
+// Ends Guild Wars
+agitend: 99
+
+// Levels your guild to specified level
+guildlvl: 99
+
+// craete a party/guild
+guild: 99
+party: 99
+
+// Warps all online character of a guild to you. (at least one member of that guild must be on.)
+guildrecall: 99
+
+// Warps all online character of a party to you. (at least one party member must be online.)
+partyrecall: 99
+
+// Allows you to spy on any Guilds Guild chat. (at least one member of that guild must be on.)
+guildspy: 99
+
+//Allows you to spy on any party's party chat. (at least one party member must be online.)
+partyspy: 99
+
+// Saves a warp point.
+memo: 99
+
+// To get a peco to (un)ride for another player.
+charmountpeco: 99
+
+// Change your appearence to other players to a mob.
+disguise: 99
+
+//Restore your normal appearance.
+undisguise: 99
+
+// To change disguise of another player/GM
+chardisguise: 99
+charundisguise: 99
+
+// Display all items of a player (disabled due to reformed GM guidelines)
+charitemlist: 99
+
+// Display all items of a player's storage (disabled due to reformed GM guidelines)
+charstoragelist: 99
+
+// Display all items of a player's cart (disabled due to reformed GM guidelines)
+charcartlist: 99
+
+// Enables platinum skills of another player.
+charquestskill: 99
+
+// Enables lost skills of another player.
+charlostskill: 99
+
+// Changes your apperance.
+model: 99
+
+// To get a peco to (un)ride
+mountpeco: 99
+
+// Broadcast (with or without name).
+kami: 99
+kamib: 99
+
+// Disconnect all users from the server
+kickall: 99
+
+// Closes Map-Server
+mapexit: 99
+
+// Give information about terrain/area (debug function)
+gat: 99
+
+// Enables debugging
+packet: 99
+
+// Shows information about the map
+mapinfo: 99
+
+// Re-load item database (admin command)
+reloaditemdb: 99
+
+// Re-load monsters database (admin command)
+reloadmobdb: 99
+
+// Re-load skills database (admin command)
+reloadskilldb: 99
+
+// Re-load scripts (admin command)
+reloadscript: 99
+
+// Re-load GM level (admin command)
+reloadgmdb: 99
+
+// Brings up your personal storage wherever you are.
+storage: 99
diff --git a/conf/battle_athena.conf b/conf/battle_athena.conf
new file mode 100644
index 00000000..f8db37e1
--- /dev/null
+++ b/conf/battle_athena.conf
@@ -0,0 +1,748 @@
+
+//--------------------------------------------------------------
+//eAthena Battle Configuration File
+// Made in to plainer english by Ancyker
+//--------------------------------------------------------------
+//Note 1: Directives can be set using on/off, yes/no or 1/0.
+//Note 2: All rates are in percents, 100 would mean 100%, 200
+// would mean 200%, etc
+// Other Information:
+// 1000 miliseconds is 1 second.
+//--------------------------------------------------------------
+
+// Do you want to debug warp points? If set to yes, warp points will appear as flags.(Note 1)
+warp_point_debug: no
+
+// When calculating critical, should we take in to account the enimies luck? (Note 1)
+enemy_critical: yes
+
+// Enemy's Critical Rate (Note 2)
+enemy_critical_rate: 100
+
+// Are enemy attacks effected by their strength? (Note 1)
+enemy_str: yes
+
+// Can enemies have perfect flee? (Note 1)
+enemy_perfect_flee: no
+
+// The rate of time it takes to cast a spell (Note 2, 0 = No casting time)
+casting_rate: 100
+
+// Delay time after casting (Note 2)
+delay_rate: 100
+
+// Is the delay time is dependent on the caster's DEX? (Note 1)
+delay_dependon_dex: yes
+
+// At what dex does the cast time become zero (instacast)
+castrate_dex_scale: 150
+
+// Is 'Skills add a delay before you can attack' enabled? (Note 1)
+skill_delay_attack_enable: no
+
+// Whether or not cards and attributes in the left hand are enabled (Note 1)
+left_cardfix_to_right: yes
+
+// Increase player's attack range (in cells)
+player_skill_add_range: 0
+
+// If the target moves out of range while casting, do we take the items and SP for the skill anyway? (Note 1)
+skill_out_range_consume: no
+
+// Increase Monsters attack range
+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: no
+
+// Damaged delay rate (Note 2)
+player_damage_delay_rate: 100
+
+// Is a player's defense NOT dependant on an enemies attack? (Note 1)
+defunit_not_enemy: yes
+
+// Are summoned monsters level greater then your base level? (I think this is for dead branches) (Note 1)
+random_monster_checklv: yes
+
+// The maximum quantity of monsters that can be summoned per GM command (0 denotes an unlimited quantity)
+atcommand_spawn_quantity_limit: 100
+
+// Does HP recover if hit by an attribute that's same as your own? (Note 1)
+attribute_recover: yes
+
+// If an item is droped, does it go stright into the users inventory? (Note 1)
+item_auto_get: no
+
+// How long does it take for an item to disappear from the floor after it is dropped? (in miliseconds)
+flooritem_lifetime: 120000
+
+// How long before the first person who did the most damage to a monster can get the item? (in milliseconds)
+item_first_get_time: 15000
+
+// How long before the second person who did the second most damage to a monster can get the item? (in milliseconds)
+// (It Adds Time From The First Persons Time)
+// So, It Is Like First Person's Time + Second Person's Time = Time Before Second Person Can Get The Items
+item_second_get_time: 10000
+
+// How long before the third person who did the third most/least damage to a monster can get the item? (in milliseconds)
+// (It Adds Time From The First Persons Time And Second Persons Time)
+// So, It Is Like First Person's Time + Second Person's Time + Third Person's Time = Time Before Third Person Can Get The Items
+item_third_get_time: 5000
+
+// How long before the first person who did the most damage to a MVP can get the item? (in milliseconds)
+mvp_item_first_get_time: 10000
+
+// How long before the second person who did the second most damage to a MVP can get the item? (in milliseconds)
+// (It Adds Time From The First Persons Time)
+// So, It Is Like First Person's Time + Second Person's Time = Time Before Second Person Can Get The Items
+mvp_item_second_get_time: 10000
+
+// How long before the third person who did the third most/least damage to a MVP can get the item
+//(Note the Amount is in Milliseconds and It Adds Time From The First Persons Time And Second Persons Time)
+//So It Is Like First Person's Time + Second Person's Time + Third Person's Time = Time Before Third Person Can Get The Items
+mvp_item_third_get_time: 2000
+
+// Item drop rates (Note 2)
+
+// The rate the common items are droped (Items that are in the ETC tab, besides card)
+item_rate_common: 100
+item_drop_common_min: 1
+item_drop_common_max: 10000
+
+// The rate healing items are droped (items that restore HP or SP)
+item_rate_heal: 100
+item_drop_heal_min: 1
+item_drop_heal_max: 10000
+
+// The rate at which usable items (in the item tab) other then healing items are droped.
+item_rate_use: 100
+item_drop_use_min: 1
+item_drop_use_max: 10000
+
+// The rate at which equipment is droped.
+item_rate_equip: 100
+item_drop_equip_min: 1
+item_drop_equip_max: 10000
+
+// The rate at which cards are droped
+item_rate_card: 100
+item_drop_card_min: 1
+item_drop_card_max: 10000
+
+item_drop_mvp_min: 1
+item_drop_mvp_max: 10000
+
+// Can the monster's drop rate become 0? (Note 1)
+drop_rate0item: no
+
+// Rate at which exp. is given. (Note 2)
+base_exp_rate: 100
+
+// Rate at which job exp. is given. (Note 2)
+job_exp_rate: 100
+
+// PVP exp. Do players get exp during pvp
+pvp_exp: yes
+
+// When a player dies, how should we penalize them?
+// 0 = No penalty.
+// 1 = Lose % of current level when killed.
+// 2 = Lose % of total experience when killed.
+death_penalty_type: 0
+
+// Base exp. penalty rate (Each 100 is 1% of their exp)
+death_penalty_base: 100
+
+// Job exp. penalty rate (Each 100 is 1% of their exp)
+death_penalty_job: 100
+
+// When a player dies, how much zeny should we penalize them with?
+zeny_penalty: 0
+
+// The amount of HP a player will respawn with, 0 is default.
+// (Unit is in percentage of total HP, 100 is full heal of HP, 0 is respawn with 1HP total.)
+restart_hp_rate: 30
+
+// The amount of SP a player will respawn with, 0 is default.
+// (Unit is in percentage of total SP, 100 is full heal of SP, 0 is respawn with 1SP total.)
+restart_sp_rate: 0
+
+// [MVP] Summoned monsters HP rate, that is, monsters summoned by an MVP will have this much HP. (Note 2)
+mvp_hp_rate: 100
+
+// [MVP] Item drop rate, that is, the overall drop rate for items droped by an MVP. (Note 2)
+mvp_item_rate: 100
+
+// [MVP] Exp. rate. (Note 2)
+mvp_exp_rate: 100
+
+// The HP rate of normal monsters (that is monsters that are not MVP's) (Note 2)
+monster_hp_rate: 100
+
+// The maximum attack speed of a monster
+monster_max_aspd: 199
+
+// (@) GM Commands available only to GM's? (Note 1)
+// set to 'No', Normal players (gm level 0) can use GM commands _IF_ you set the command level to 0.
+// set to 'Yes', Normal players (gm level 0) can never use a GM command even if you set the command level to 0.
+atcommand_gm_only: no
+
+// [GM] Can use all skills? (No or mimimum GM level)
+gm_all_skill: no
+
+// [GM] Can use all abracadabra skills? (No minimum GM level)
+gm_all_skill_add_abra: no
+
+// [GM] Can equip anything? (No or minimum GM level, can cause client errors.)
+gm_all_equipment: no
+
+// [GM] Raise skills unconditionally, that is, put points in to a skill not in thier jobs skill tree? (no or minimum gm level)
+gm_skill_unconditional: no
+
+// Can a normal player by-pass the skill tree? (Note 1)
+player_skillfree: no
+
+// When doing a skill reset, whether the skill's restriction is to be ignored or not. (Note 1)
+player_skillup_limit: yes
+
+// Forging success rate. (Note 2)
+weapon_produce_rate: 100
+
+// Prepare Potion succsss rate. (Note 2)
+potion_produce_rate: 100
+
+// Allow monsters to be aggresive and attack first? (Note 1)
+monster_active_enable: yes
+
+// Monster damage delay rate (Note 1)
+monster_damage_delay_rate: 100
+
+// Looting monster actions.
+// 0 = Monster will consume the item.
+// 1 = Monster will not consume the item.
+monster_loot_type: 0
+
+// Enable monster skills? (Note 1)
+mob_skill_use: yes
+
+// Rate of monsters on a map, 200 would be twice as many as normal. (Note 2)
+mob_count_rate: 100
+
+// Max mobs count in each map
+mob_map_limit: 500
+
+// Max mob spawned with skills per each master
+mob_skill_spawn_limit: 20
+
+// Min mob respaw delay
+mob_spawn_min_delay: 5000
+
+// Quest skills can be learned? (Note 1)
+// Setting this to yes can open an exploit on your server!
+quest_skill_learn: yes
+
+// When skills are reset, quest skills are reset as well? (Note 1)
+// Setting this to yes can open an exploit on your server!
+quest_skill_reset: no
+
+// You must have basic skills to be able to sit, trade, form a party or create a chatroom? (Note 1)
+basic_skill_check: yes
+
+// Item to require when making a guild. Setting this to
+// 0 will disable the check. Using item 1337 for now
+// to disable creation (as it's unallocated)
+guild_emperium_check: 504
+
+// Maximum tax limit on a guild member.
+guild_exp_limit: 50
+
+// Maximum castles one guild can own (0 - unlimited)
+guild_max_castles: 0
+
+// When teleporting, or spawning to a map, how long before a monster sees you if you don't move? (time is in milliseconds)
+// That is, when you go to a map and don't move, how long before the monsters will notice you.
+// If you attack a monster, it will attack you back regaurdless of this setting. (I think)
+player_invincible_time: 5000
+
+// [PET] Rate for catching pets (Note 2)
+pet_catch_rate: 100
+
+// [PET] Can you name a pet more then once? (Note 1)
+pet_rename: no
+
+// [PET] The rate a pet will get friendly by feeding it. (Note 2)
+pet_friendly_rate: 100
+
+// [PET] The rate at which a pet will become hungry. (Note 2)
+pet_hungry_delay_rate: 100
+
+// [PET] 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
+
+// [PET] Does Pet's Attack Damage Based On Str (Note 1)
+pet_str: yes
+
+// [PET] Whether or not the pet's will use skills. (Note 1)
+pet_status_support: yes
+
+// [PET] Does the pet need its equipment before it does its skill? (Note 1)
+pet_equip_required: yes
+
+// [PET] Will all pets attack? (Note 1)
+// Do NOT use this with pet skills!
+pet_attack_support: no
+
+// [PET] When the master receives damage from the monster, whether or not the pet attacks back.
+pet_damage_support: no
+
+// [PET] Rate at which a pet will support it's owner in battle. (Note 2)
+pet_support_rate: 100
+
+// [PET] Does the pets owner receive exp from the pets damage?
+pet_attack_exp_to_master: no
+
+// [PET] The rate exp. is gained from the pet attacking monsters
+pet_attack_exp_rate: 100
+
+// Will there be a minimum skill dmg even if there is a miss?
+skill_min_damage: no
+
+// Which finger offensive style can be used?
+// 0 = Aegis style
+// 1 = Athena style
+finger_offensive_type: 0
+
+// The rate of job exp. from using Heal skill (100 is the same as the heal amount, 200 is double.
+// The balance of the exp. rate is best used with 5 to 10)
+heal_exp: 0
+
+// The rate of exp. that is gained by the process of resurrection, a unit is 0.01%.
+// Experience calculations for the experience value * level difference of the person revived / 100 * resurrection_exp/10000 which the revived player has can be got.
+resurrection_exp: 0
+
+// The rate of job exp. when using discount and overcharge on an NPC (100 is normal, 200 is double.)
+// The way it is calculated is (money recieved * skill lv) * shop_exp / 100.
+shop_exp: 0
+
+// The delay rate of monk's combo (Note 2)
+combo_delay_rate: 100
+
+// Item check? (Note 1)
+// When logged in or moving in map if the item the player is holding isn't correct there will be a check.
+item_check: no
+
+// Will tuxedo and wedding dresses be shown when worn? (Note 1)
+wedding_modifydisplay: yes
+
+// The time interval for HP to restore naturally. (in milliseconds)
+natural_healhp_interval: 6000
+
+// The time interval for SP to restore naturally. (in milliseconds)
+natural_healsp_interval: 8000
+
+// Automatic healing skill's time interval. (in milliseconds)
+natural_heal_skill_interval: 10000
+
+// The maximum weight for a character to carry when the character stops healing naturally. (in %)
+natural_heal_weight_rate: 50
+
+// Override item names from GRF file? (Note 1)
+item_name_override_grffile: yes
+
+// Are arrows are consumed when used on a bow? (Note 1)
+arrow_decrement: yes
+
+// Maximum atk speed. (Default is 190)
+max_aspd: 190
+
+// Maximum HP. (Default is 32500)
+max_hp: 32500
+
+// Maximum SP. (Default is 32500)
+max_sp: 32500
+
+// Maximum user LV to send to client
+// (Default is 99.. Never go above 127)
+//
+// this is only useful if you have adjusted your client
+// to expect levels higher then 99
+max_lv: 99
+
+// Max limit of char stats. (agi, str, etc.)
+max_parameter: 255
+
+// Max weight carts can hold.
+max_cart_weight: 8000
+
+// Display player skill errors in console? (for debug only) (default: off) (Note 1)
+player_skill_log: off
+
+// Display monster skill errors in console? (for debug only) (default: off) (Note 1)
+monster_skill_log: off
+
+// Display battle log? (for debug only) (default: off) (Note 1)
+battle_log: off
+
+// Display save log? (for debug only) (default: off) (Note 1)
+save_log: off
+
+// Display errors? (for debug only) (default: off) (Note 1)
+error_log: off
+
+// Display other stuff? (for debug only) (default: off) (Note 1)
+etc_log: off
+
+// Save Clothes color. (This will degrade performance [in txt?]) (Note 1)
+save_clothcolor: yes
+
+// Undead type differeniate.
+// 0 = element undead
+// 1 = race undead
+// 2 = both
+undead_detect_type: 2
+
+// Operational mode of automatic counter.
+// 0 = disregard DEF and HIT+20 . CRI*2, 1 = 100% critical
+// Players
+player_auto_counter_type: 0
+// Monsters
+monster_auto_counter_type: 0
+
+// Type of penalty that is applied to FLEE when more than agi_penaly_count monsters are targetting player
+// 0 = no penalty is applied
+// 1 = agi_penaly_num is reduced from FLEE as a %
+// 2 = agi_penaly_num is reduced from FLEE as an exact amount
+agi_penaly_type: 1
+
+// Amount of enemies required to be targetting player before FLEE begins to be penalized
+agi_penaly_count: 3
+
+// Amount of FLEE penalized per each attacking monster more than agi_penaly_count
+agi_penaly_num: 10
+
+// Type of penalty that is applied to VIT defense when more than vit_penaly_count monsters are targetting player
+// 0 = no penalty is applied
+// 1 = vit_penaly_num is reduced from FLEE as a %
+// 2 = vit_penaly_num is reduced from FLEE as an exact amount
+vit_penaly_type: 1
+
+// Amount of enemies required to be targetting player before VIT defense begins to be penalized
+vit_penaly_count: 3
+
+// Amount of VIT defense penalized per each attacking monster more than vit_penaly_count
+vit_penaly_num: 5
+
+// When the player attacks an object, the calculation method of DEF.
+// With 0 this will be ignored specification, at 1 or more def = subtraction of (DEF* value).
+player_defense_type: 0
+
+// When the monster attacks an object, the calculation method of DEF.
+// With 0 this will be ignored, at 1 or more def = subtraction of (DEF* value).
+monster_defense_type: 0
+
+// When the pet attacks an object, the calculation method of DEF.
+// With 0 this will be ignored specification, at 1 or more def = subtraction of (DEF* value).
+pet_defense_type: 0
+
+//MDEFsame as above....(MDEF*value)
+magic_defense_type: 0
+
+// Whether or not, ground skills of the players' will stack. (Note 1)
+player_skill_reiteration: no
+
+//Whether or not, ground skills of the monsters' will pile up. (Note 1)
+monster_skill_reiteration: no
+
+//Whether or not ground based skills of a certain type such as traps can be cast straight onto other players. (Note 1)
+player_skill_nofootset: yes
+
+//Whether or not ground based skills of a certain type such as traps can be cast straight onto monsters. (Note 1)
+monster_skill_nofootset: yes
+
+// When a player is cloaking, Whether the wall is checked or not. (Note 1)
+// Note: Gravity announced that they were changing cloaking so it would
+// not need a wall, but this was never implemented. I set to no, for fun.
+player_cloak_check_type: no
+
+// When a monster is cloaking, Whether the wall is checked or not. (Note 1)
+monster_cloak_check_type: no
+
+// Melee damage adjustments for WoE battles (Guild Vs Guild) (Note 2)
+gvg_short_attack_damage_rate: 100
+
+// Ranged damage adjustments for WoE battles (Guild Vs Guild) (Note 2)
+gvg_long_attack_damage_rate: 100
+
+// Magic damage adjustments for WoE battles (Guild Vs Guild) (Note 2)
+gvg_magic_attack_damage_rate: 100
+
+// Misc damage adjustments for WoE battles (Guild Vs Guild) (Note 2)
+gvg_misc_attack_damage_rate: 100
+
+// When the empelium is broken with WoE mode on, How Long Before The Declaration Of Castle Owner
+// and Removal of Monsters/Players from Castle. (in milliseconds)
+gvg_eliminate_time: 7000
+
+// Whether or not skill is used vis-a-vis the user at the time of MOB skill motion of condition skillused. (Note 1)
+// Not sure what this means, something about monsters changing target?
+mob_changetarget_byskill: no
+
+// Player's Direction Changed When Attacking? (Note 1)
+player_attack_direction_change: yes
+
+// Monsters's Direction Changed When Attacking? (Note 1)
+monster_attack_direction_change: yes
+
+// If the player has Undead Elemental Equipment, should they be frozen or not. (Note 1)
+player_undead_nofreeze: no
+
+// Will Player Skills Stay Within Land Limit or not? (Note 1)
+player_land_skill_limit: yes
+
+// Will Monster Skills Stay Within Land Limit or not? (Note 1)
+monster_land_skill_limit: yes
+
+// If a party uses a skill with penalties do they apply? (Note 1)
+party_skill_penaly: yes
+
+// If monster's class is changed will it fully recover HP and SP and Ailments? (Note 1)
+monster_class_change_full_recover: no
+
+// Do produced items have the maker's name on them? (Note 1)
+produce_item_name_input: yes
+
+// Do produced potions have the maker's name on them? (Note 1)
+produce_potion_name_input: yes
+
+// Do crafted arrows have the maker's name on them? (Note 1)
+making_arrow_name_input: yes
+
+// Does created holy water have the maker's name on it? (Note 1)
+holywater_name_input: yes
+
+// Stop logout for 10 seconds after a hit? (Note 1)
+prevent_logout: yes
+
+// If skill fails by delay, should it display or not. (Note 1)
+display_delay_skill_fail: yes
+
+// Can a player in chat room (in-game), be warped by a warp portal? (Note 1)
+chat_warpportal: no
+
+// Can a monster be warped by a warp portal? (Note 1)
+mob_warpportal: no
+
+// Is a monster summoned via dead branch aggresive? (Note 1)
+dead_branch_active: yes
+
+// The highest value at which an item can be sold via the merchant vend skill. (in zeny)
+vending_max_value: 10000000
+
+// If someone loots, show name in party? (Note 1)
+show_steal_in_same_party: no
+
+// Allow upper class (Advanced 2nd Class)? (Note 1)
+// Just leave this at yes
+enable_upper_class: yes
+
+// Is a usual attack of a pet delivered withOUT an attribute? (Note 1)
+pet_attack_attr_none: no
+
+// Is a usual attack of a player delivered withOUT an attribute? (Note 1)
+pc_attack_attr_none: no
+
+// Is a usual attack of a monster delivered withOUT an attribute? (Note 1)
+mob_attack_attr_none: no
+
+// mob attacks againsts players wearing ghostring armor do full damage
+mob_ghostring_fix: no
+
+// Does the Golden Thief Bug card only work during pvp?
+// no or 0 - gtb works all the time
+// 1 - 100 - percentage of magic damage reduced only during pvp (or gvg)
+gtb_pvp_only: no
+
+// How to count the number of the enemies who do an agi penalty...
+// 1 or less: It is a count altogether.
+// 2: Full evasion exclusion
+// 3: Full evasion and evasion exclusion
+// 4 or more: Except all.
+agi_penaly_count_lv: 2
+
+// How to count the number of the enemies who do a vit penalty
+// 1 or less: It is a count altogether.
+// 2: Full evasion exclusion
+// 3: Full evasion and evasion exclusion
+// Four or more: Except all.
+vit_penaly_count_lv: 3
+
+// Grandcross Settings (Dont mess with these)
+// Even if MOB (PC) has overlapped, it HIT(s) compulsion 3. (Default no)
+gx_allhit: no
+// The effect of the arms card of a damage %UP system is set also to GX at -L effect. (default no)
+gx_cardfix: no
+// The attribute affinity of GX is calculated doubly. (Default yes)
+gx_dupele: yes
+// Grandcross display type (Default 1)
+// 0: Yellow character
+// 1: White character
+gx_disptype: 1
+
+// If no than you can use the ensemble skills alone. (Note 1)
+player_skill_partner_check: yes
+
+// Is the character of a GM account set as the object of a display by @ command etc. or not?
+hide_GM_session: no
+
+// jbgړ--@B0-{Id-l(ׁdAI-y)A1Athenad-l(ׁyAI-d)
+// translation (babelfish):
+// Unit portable place - ? @.
+// With 0 - {mackerel SI -l (circuit load -> heavily, the mackerel place - the ? ? lightly),
+// With 1 - Athena SI -l (circuit load -> lightly, the mackerel place - the ? ? it is heavy)
+unit_movement_type: 0
+
+// Are other requests accepted during [various things[party,guild]] a request or not?
+// It does not accept by no accepted by yes.
+invite_request_check: yes
+
+// [ugbv̎d-l 0:-{Id-lA1 1:Athenad-lAgACeg
+// translation (babelfish):
+// SI of ???????? -l
+// 0: - {Mackerel SI -l, trap 1
+// 1:Athena SI -l, the quantity which used the item which was used
+skill_removetrap_type: 0
+
+// Will display experience gained from killing a monster. (Note 1)
+disp_experience: no
+
+// Whether or not Marine Spheres and Floras summoned by Alchemist will drop items and give experience? (Note 1)
+alchemist_summon_reward: no
+
+// Maximum level (default 255). Requires that you have an experience table that supports more than 99 levels to go
+// any higher. It is left at 255 for default as to not cause problems for people who already have players at higher levels.
+// @lvup command will not go higher than this value, and therefor will not loop back around 0.
+maximum_level: 255
+
+// Leave at 0 to use normal drop system. Anything higher than 0 will allow luk to affect drop rates, based on a percentage.
+// Example 1: Setting of 10 with 50 luk would add 5 to the drop rate. So say a card has a drop rate of 2, it would become 7.
+// Example 2 : Setting 100 with 99 luk would add 99 to the drop rate.
+drops_by_luk: 0
+
+// Do all monsters ignore GMs unless attacked? (Note 1)
+monsters_ignore_gm: no
+
+// Turn equipment breaking on. (Note 1)
+// Turning this one will allow equipment to break in battles,
+// as well as some skills that have chance to break equipmen.
+equipment_breaking: no
+
+// Overall rate of which equipment can break. (Note 2) [100 = .01% chance to break equipment before penalties.]
+// Critical attacks will double chance to break equipment, and other skills (such as Power Thrust) will increase weapon breaking chance as well.
+// This does not effect Sage weapon enchantment failure chance.
+equipment_break_rate: 100
+
+// PK Server Mode. Turns entire server pvp(excluding towns). Experience loss is doubled if killed by another player.
+// When players hunt monsters over 20 levels higher, they will receive 15% additional exp., and 25% chance of receiving more items.
+// There is a nopvp.txt for setting up maps not to have pk on in this mode. Novices cannot be attacked and cannot attack.
+// Normal pvp counter and rank display are disabled as well.
+pk_mode: no
+
+// Turn this on to allow a player to level up more than once from a kill. (Note 1)
+multi_level_up: yes
+
+// Does using bow to do a backstab give a 50% damage penalty? (Note 1)
+backstab_bow_penalty: yes
+
+// Choose if server begin with night (yes) or day (no)
+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: 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: 0
+
+// Will display a mob's hp/maxhp when the mouse cursor is over them. (Note 1)
+// Will not display guardian or emperium hp.
+//
+// Still under testing (works but doesn't update)
+show_mob_hp: no
+
+// Ban people that try to use an other name of its name (spoof name).
+// Duration of the ban, in minutes (default: 5). Value from 0 to 32767
+// to disable the ban, set 0
+ban_spoof_namer: 5
+
+// Set here minimum level of a (online) GM that can receive all informations about any player that try to hack, spoof a name, etc.
+// Values are from 0 to 100.
+// 100: disable information
+// 0: send to any people, including normal players
+// default: 60, according to GM definition in atcommand_athena.conf
+hack_info_GM_level: 60
+
+// Set here the minimum GM level to disable the nowarp (from) and nowarpto (to) flags.
+// This option is mainly used in AT_commands (@memo, @warp, @charwarp, @go, etc...). All GM commands used to move or set a new map check nowarp and nowarpto flags.
+// default: 20 (first level after normal player or super'normal' player)
+any_warp_GM_min_level: 20
+
+// Set here which client version do you accept. Add all values of clients:
+// 1: Clients before 2004-07-06 (old clients)
+// 2: 2004-07-06 kRO client
+// 4: 2004-07-13 kRO client
+// 8: 2004-07-26 kRO client
+// 16: 2004-08-09 kRO / 2004-08-16aSakray / 2004-08-17aSakray client
+// 32: 2004-09-06aSakray client
+// default value: 63 (all clients)
+packet_ver_flag: 63
+
+// Allow GMs to mute players or not?
+muting_players: no
+
+// Mail system - Only function in sql version
+mail_system: no
+
+// valid range of dye's and styles on the client
+min_hair_style: 0
+max_hair_style: 30
+min_hair_color: 0
+max_hair_color: 30
+min_cloth_color: 0
+max_cloth_color: 4
+
+// Visible area size (how many squares away from a player can they see)
+area_size: 14
+
+// chat system:
+// More than flood lines in threshold seconds gets a ban
+// More than warn lines in threshold seconds gets a warning
+chat_spam_flood: 10
+chat_spam_warn: 8
+chat_spam_threshold: 10
+
+// How much to increment the line count if the content is lame.
+// Lameness is defined as mostly caps, punctuation, or a repeat of the last line.
+// Set to 1 or 2 depending on how much you hate hearing "ITEN PLZ!" 3 times in a row..
+chat_lame_penalty: 2
+
+// how many hours to auto ban spammer, 0 to disable [0-32767]. Default 6.
+chat_spam_ban: 1
+
+// Maximum line lengt, if a message is above chat_maxline, its dropped [1-512]. Default 255.
+chat_maxline: 512
+
+// Packet flood protection
+// If more than packet_spam_flood over-limits packets are recieved in
+// packet_spam_threshold seconds, we will kick the user if packet_spam_kick
+// is not set to 0. Limits on individual packets are defined in src/map/clif.c
+packet_spam_flood: 30
+packet_spam_threshold: 2
+packet_spam_kick: 0
+
+// local settings for this server in this file
+import: conf/battle_local.conf
diff --git a/conf/battle_local.conf.example b/conf/battle_local.conf.example
new file mode 100644
index 00000000..c9ba222c
--- /dev/null
+++ b/conf/battle_local.conf.example
@@ -0,0 +1 @@
+// Nothing needs to be done here.
diff --git a/conf/build-magic.sh b/conf/build-magic.sh
new file mode 100755
index 00000000..f064a286
--- /dev/null
+++ b/conf/build-magic.sh
@@ -0,0 +1,21 @@
+#! /bin/bash
+
+RSCRIPT="spells-build"
+
+if [ -a $RSCRIPT ]; then printf ""; else
+ echo '#! /bin/bash' > $RSCRIPT;
+ echo 'sed \' >> $RSCRIPT;
+ chmod a+x $RSCRIPT
+fi
+
+for n in `grep -o '"#..."' magic.conf.template`; do
+ if grep $n $RSCRIPT; then printf ""; else
+ CHANGES=1
+ echo "'s/${n}/${n}/;'\\" >> $RSCRIPT;
+ fi
+done
+
+if [ x$CHANGES == x1 ]
+then echo "${RSCRIPT} has been updated; please provide invocations for spells and/or teleport anchors.";
+else cat magic.conf.template | ./$RSCRIPT > magic.conf;
+fi
diff --git a/conf/char_athena.conf b/conf/char_athena.conf
new file mode 100644
index 00000000..094a4dfe
--- /dev/null
+++ b/conf/char_athena.conf
@@ -0,0 +1,133 @@
+// Athena Character configuration file.
+
+// Option to force a player to create an e-mail.
+// If a player have default e-mail, and if you activate this option, the player can only connect in the game (to arrive on a map) like follow:
+// - Create at least 1 character
+// - Select 1 character
+// - Select DEL to enter his/her e-mail. (if OK is choosen, client says to the player: 'invalid e-mail')
+// - If his/her e-mail is correct, the player enter in the game (an e-mail is saved definitively).
+// - If his/her e-mail is incorrect, he/she have 'incorrect e-mail' and must select again DEL.
+// - After entering in the game (when the player arrives on a map), DEL and SEL/OK button work normaly for all next connections.
+// Resume: If a player have "incorrect/invalid e-mail" when he/she click on 'OK' button,
+// the player must click 'DEL' button and register his/her NEW e-mail to enter in the game
+// So, default is 0, because administrator must explain to their players before to activate this option.
+email_creation: 0
+
+// Is Character server in maintainence mode?
+char_maintenance: 0
+
+// Enable or disable creation of new characters.
+char_new: 0
+
+// Maximum users able to connect to the server. Set to 0 for unlimited.
+max_connect_user: 0
+
+// It's to check IP of a player between char-server and other servers (part of anti-hacking system)
+// If player doesn't have same IP, connection is refused.
+// Set to 0/off/no to not check IP of player.
+// Set to 1/on/yes if you want to check (default)
+// Note: if you enable this option, be sure that your (local/lan/wan) players use correct ip (in xml file) to contact servers,
+// and that your LAN is correctly configured (!), and that LAN configuration of eathena is right.
+check_ip_flag: yes
+
+// How often should the server save all files? (In seconds)
+autosave_time: 15
+
+// Character server flatfile database
+char_txt: save/athena.txt
+
+// Choose to create or not backup file (yes/no, 0/1, etc...)
+// default is 'no', because backup file take time for nothing. Actually, there is no problem on characters file creation and save.
+backup_txt_flag: no
+
+// Character server flatfile database (backup)
+backup_txt: save/athena_backup.txt
+
+// Start point, Map name followed by coordinates (x,y)
+start_point: 001-2-1.gat,22,36
+start_point2: 001-2-1.gat,31,37
+start_point3: 001-2-1.gat,40,38
+
+// Starting weapon for new characters
+start_weapon: 1300
+
+// Starting armor for new characters
+start_armor: 0
+
+// Starting zeny for new characters
+start_zeny: 50
+
+min_hair_style: 0
+max_hair_style: 30
+min_hair_color: 0
+max_hair_color: 30
+
+// max number of char slots
+char_slots: 10
+
+// Name used for unknown characters
+unknown_char_name: Unknown
+
+// Log Filename
+char_log_filename: log/char.log
+
+// Allow or not identical name for characters but with a different case (upper/lower):
+// example: Test-test-TEST-TesT; Value: 0 not allowed (default), 1 allowed
+name_ignoring_case: 0
+
+// Manage possible letters/symbol in the name of charater. Control character (0x00-0x1f) are never accepted. Possible values are:
+// 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: 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: abcdefghijklmnoprstquvwxyzABCDEFGHIJKLMNOPRSTQUVWXYZ1234567890- _+=!'
+
+// Filename of the file which receives the online players list in text
+online_txt_filename: online.txt
+
+// Filename of the file which receives the online players list, but in html version
+online_html_filename: online.html
+
+// Choose how to display online players.
+// (sorting operation with a lot of online players can take time on a slow computer)
+// 0: no sorting (default)
+// 1: by alphabetical order of their name
+// 2: by number of their zenys
+// 3: by their base level
+// 4: by their job (and job level inside the same job)
+// 5: by alphabetical order of their actual map location
+online_sorting_option: 0
+
+// Choose which columns that you want display in the online files. Do the addition of these values:
+// (if value is 0, no file is done)
+// 1: name (just the name, no function like 'GM')
+// 2: job
+// 4: levels
+// 8: map name
+// 16: mapname and coordonates
+// 32: zenys
+// 64: name (with 'GM' if the player is a GM)
+// default value: 1 (only name)
+online_display_option: 64
+
+// minimum GM level to display 'GM' when we want to display it (default: 1)
+online_gm_display_min_level: 60
+
+// refresh time (in sec) of the html file in the explorer (default 20)
+online_refresh_html: 20
+
+// Anti-freeze system enable
+anti_freeze_enable: 0
+// Anti-freeze system interval (in seconds)
+anti_freeze_interval: 6
+
+// If you want use an additional configuration file, uncomment and use this parameter
+//import: path/additional_configuration_file
+
+// local settings for this server in this file
+import: conf/char_local.conf
diff --git a/conf/char_local.conf.example b/conf/char_local.conf.example
new file mode 100644
index 00000000..aabf6762
--- /dev/null
+++ b/conf/char_local.conf.example
@@ -0,0 +1,25 @@
+// Athena Character local configuration file.
+
+// wan ip override. this ip only will sended to cleints.
+// wan_ip:1.2.3.4
+
+// Server Communication username and password.
+userid: s1
+passwd: p1
+
+// Server name, no more than 19 characters
+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
+
+// Login Server IP
+login_ip:81.161.192.4
+// Login Server Port
+login_port: 6901
+
+// Character Server IP
+char_ip:81.161.192.4
+// Character Server Port
+char_port: 6122
+
diff --git a/conf/eathena-monitor.conf.example b/conf/eathena-monitor.conf.example
new file mode 100644
index 00000000..70dcd2e5
--- /dev/null
+++ b/conf/eathena-monitor.conf.example
@@ -0,0 +1,14 @@
+# $Id: eathena-monitor.conf,v 1.0 2006/13/10 21:42:22 Platyna Exp $
+
+# By default the eathena-monitor looks for its config file in
+# $HOME/tmwserver/conf/, creates the log file in $HOME/tmwserver/log/.
+# You may use this file to adjust these settings if needed or use predefined
+# defaults. Lines starting with hash mark or white space are ignored.
+
+# login_server=/home/athena/tmwserver/login-server
+# map_server=/home/athena/tmwserver/map-server
+# char_server=/home/athena/tmwserver/char-server
+# workdir=/home/athena/tmwserver
+# In seconds, default is 5.
+# interval=2
+# logfile=/home/athena/tmwserver/log/monitor.log
diff --git a/conf/gm_account.txt.example b/conf/gm_account.txt.example
new file mode 100644
index 00000000..912e1a09
--- /dev/null
+++ b/conf/gm_account.txt.example
@@ -0,0 +1 @@
+// <account ID> <level>
diff --git a/conf/grf-files.txt b/conf/grf-files.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/conf/grf-files.txt
diff --git a/conf/help.txt.example b/conf/help.txt.example
new file mode 100644
index 00000000..c12b1a89
--- /dev/null
+++ b/conf/help.txt.example
@@ -0,0 +1,193 @@
+// put at first, the minimum level to display the line
+ 0:To use one command, type it inside the message window where you usually type to chat.
+ 0:@help - display this help.
+ 0:@email <actual@email> <new@email> - to change your e-mail (characters protection)
+ 80:
+ 80:@setmagic
+ 80:@magicinfo
+ 0:
+ 0:--- INFORMATION CMD ---
+ 0:@servertime - Display the date/time of the server
+ 99:@ignorelist - Displays your ignore list
+ 40:@where [char name] - Tells you the location of a character
+ 40:@who/@whois [match_text] - Display a listing of who is online and where
+ 40:@whogroup [match_text] - Display a listing of who is online and their party/guild
+ 40:@whomap/@whomapgroup [map] - like @who/@who2/@who3 but only for specifical map
+ 40:@whogm [match_text] - Like @who+@who2+who3, but only for GM.
+ 60:@charstatsall - Displays stats of all characters.
+ 60:@charitemlist <char name> - Displays all items of a player.
+ 60:@charstoragelist <char name> - Displays all items of a player's storage.
+ 60:@charcartlist <char name> - Displays all items of a player's cart.
+ 60:@ipcheck <char name> - Display all characters online from a characters IP address
+ 99:@mapinfo [<0-3> [map]] - Give information about a map (general info +: 0: no more, 1: players, 2: NPC, 3: shops/chat).
+ 99:
+ 99:@guildspy <guild_name/id> - You will receive all messages of the guild channel
+ 99:@partyspy <party_name/id> - You will receive all messages of the party channel
+ 60:
+ 60:--- MESSAGE CMD ---
+ 60:@broadcast <message> - Broadcasts a GM message with name of the GM
+ 60:@kami/@kamib <message> - Broadcasts a GM message without name of the GM
+ 60:@localbroadcast <message> - Broadcasts a GM message with name of the GM
+ 40:
+ 40:--- CHANGE GM STATE CMD ---
+ 40:@die ---- suicide
+ 40:@hide - Makes you invisible to monsters and other reporting functions. Type @hide again become visible.
+ 60:@invisible - Makes your character invisible (complete)
+ 60:@visible - Makes your character visible (opposite of @invisible)
+ 40:@save - Sets respawn point to current spot
+ 40:@return - Warps you to your save point
+ 40:@warp <mapname> <x> <y> - Warps you to the selected position
+ 40:@jump [x [y]]- Randomly warps you like a flywing.
+ 40:@goto <char name> - Warps you to selected character
+ 40:@follow <char_name> - follow a player
+ 40:@go <number/city_name> - Warps you to a city.
+ 40: -3: (Memo point 2) 1: morocc 5: izlude 9: yuno 13: niflheim
+ 40: -2: (Memo point 1) 2: geffen 6: aldebaran 10: amatsu 14: louyang
+ 40: -1: (Memo point 0) 3: payon 7: xmas (lutie) 11: gonryun 15: start point
+ 40: 0: prontera 4: alberta 8: comodo 12: umbala 16: prison/jail
+ 60:@hugo - iterate over players forward
+ 60:@linus - iterator over players backwards
+ 40:
+ 40:@log/@l - Send text to the GM log
+ 40:@tee/@t - Send text to the GM log and local chat
+ 40:
+ 60:@alive - Revives yourself from death
+ 40:@heal [<HP> <SP>] - Heals the desired amount of HP and SP. No value specified will do a full heal.
+ 40:
+ 60:@blvl <number of levels> - Raises your base level the desired number of levels. The max is 255 (User Defined).
+ 60:@jlvl <number of levels> -Raises your job level the desired number of levels. The max is 50 For Basic Classes. For Super Novice and Advanced Classes it is 70.
+ 60:@allskills - Give you all skills.
+ 80:@option <param1> <param2> <param3> - Adds different visual effects on or around your character
+ 80: <param1> <param2> <p3>(stackable) <param3> <param3>
+ 80: 1 Petrified (stackable) 01 Sight 32 Peco Peco riding 2048 Orc Head
+ 80: 2 Frozen 01 Poison 02 Hide 64 GM Perfect Hide 4096 Wedding Sprites
+ 80: 3 Stunned 02 Cursed 04 Cloak 128 Level 2 Cart 8192 Ruwach
+ 80: 4 Sleeping 04 Silenced 08 Level 1 Cart 256 Level 3 Cart
+ 80: 6 darkness 08 ??? 16 Falcon 512 Level 4 Cart
+ 80: 16 darkness 1024 Level 5 Cart
+ 99:@mountpeco - Give/remove you a peco (Class is required, but not skill)
+ 99:@disguise <monster_name_or_monster_ID> - Change your appearence to other players to a mob.
+ 99:@undisguise - Restore your normal appearance.
+ 99:@model <hair ID: 0-17> <hair color: 0-8> <clothes color: 0-4> - Changes your characters appearence.
+ 40:@dye/@ccolor <clothes color: 0-4> - Changes your characters appearence (only clothes color).
+ 40:@hairstyle <hair ID: 0-17> - Changes your characters appearence (only hair style).
+ 40:@haircolor <hair color: 0-8> - Changes your characters appearence (only hair color).
+ 40:@speed <1-1000> - Changes you walking speed. 1 being the fastest and 1000 the slowest. Default 150.
+ 99:@effect <effect_id> [flag] - Give an efect to your character.
+ 60:@dropall - throws all your possession on the ground
+ 60:@storeall - puts all your possessions in storage
+ 60:@killable - make your character killable
+ 60:@stpoint <number of points> - Gives you the desired number of stat points.
+ 60:@skpoint <number of points> - Gives you the desired number of skill points.
+ 80:@zeny <amount> - Gives you desired amount of Zeny.
+ 60:@str,@agi,@vit,@int,@dex,@luk <amount> - Adds desired amount to any stat. For example "@str 10" raises your str by 10
+ 60:@allstats [value] - Adds value in all stats (maximum if no value).
+ 99:@memo [memo_position] - set/change a memo location (no position: display memo points).
+ 99:@questskill <#> - Gives you the specified quest skill
+ 80:@lostskill <#> - Takes away the specified quest skill from you
+ 60:@skillid <name> - look up a skill by name
+ 60:@useskill <skillid> <skillv> <target> - use a skill on target
+ 80:@addwarp <map name> <x coord> <y coord>
+ 60:
+ 60:--- MONSTERS CMD ---
+ 60:@spawn <monster_name_or_monster_ID> [<number to spawn> [<x coord> [<y coord>]]]
+ 60:@summon <monster_name_or_monster_ID> [<number to spawn> [<desired_monster_name> [<x coord> [<y coord>]]]]
+ 60:@killmonster [map] - kill all monsters of the map (they drop)
+ 60:@killmonster2 - kill all monsters of your map (without drops)
+ 40:
+ 40:--- ITEMS CMD ---
+ 40:@storage - Opens storage
+ 99:@gstorage - Opens guild storage
+ 80:@item <item name or ID> <quantity> - Gives you the desired item.
+ 40:@itemreset - Remove all your items.
+ 80:@itemcheck - Check your items with authorised items.
+ 80:@idsearch <part_of_item_name> - Search all items that name have part_of_item_name
+ 60:@produce <equip name or equip ID> <element> <# of very's>
+ 60: Element: 0=None 1=Ice 2=Earth 3=Fire 4=Wind
+ 60: It has separately with fragment 3 of the attribute + stars, you can apply.
+ 60:
+ 60:--- PVP CMD ---
+ 60:@pvpon - Turns pvp on on the current map
+ 60:@pvpoff - Turns pvp off on the current map
+ 99:@gvgon/@gpvpon - Turns gvg on on the current map
+ 99:@gvgoff/@gpvpoff - Turns gvg off on the current map
+ 99:@agitstart - Starts War of Emperium
+ 99:@agitend - End War of Emperium
+ 99:
+ 99:--- GROUPS CMD ---
+ 99:@party <party_name> - Create a party.
+ 99:@guild <guild_name> - Create a guild.
+ 99:@guildlvl <# of levels> - Raise Guild by desired number of levels
+ 99:@guildrecall <guild_name/id> - Warps all online characters of a guild to you.
+ 99:@partyrecall <party_name/id> - Warps all online characters of a party to you.
+ 40:
+ 40:--- REMOTE CHAR CMD ---
+ 60:@kill <char name> - Kills specified character.
+ 60:@charkillable <char name> - make another character killable
+ 60:@chardropall <char name> - throws all a chars possession on the ground
+ 60:@charstoreall <char name> - puts all of anothers charactes possessions in storage
+ 60:@recall <char name> - Warps target character to you.
+ 80:@recallall - Warps every character online to you.
+ 60:@charwarp <mapname> <x> <y> <char name> - Warps character to location of choice
+ 60:@revive <char name> - Revives target character.
+ 40:@charstats <char name> - Displays a characters stats.
+ 99:@charignorelist <char name> - Displays ignore list of the player
+ 60:@inall <char name> - Allows all wispers for the player
+ 60:@exall <char name> - Blocks all wispers for the player
+ 80:@charoption <param1> <param2> <param3> <charname> - Like @option command but only to target character.
+ 99:@charmountpeco <charname> - Give/remove to a player a peco (Class is required, but not skill).
+ 60:@charsave <map> <x> <y> <charname> - Changes the target players respawn point.
+ 60:@charblvl <#> <nickname> - Change a characters base level.
+ 60:@charjlvl <#> <nickname> - Change a characters job level.
+ 80:@charzeny <amount> <name> - Give/take a players Zeny
+ 60:@charstpoint <amount> <name> - Give/take a players stat points
+ 60:@charskpoint <amount> <name> - give/take a players skill points
+ 60:@charskreset <charname> - Reset skills of a character.
+ 60:@charstreset <charname> - Reset stats of a character.
+ 60:@charreset <charname> - Reset stats AND skills of a character.
+ 99:@charquestskill <#> <charname> - Gives to a player the specified quest skill.
+ 99:@charlostskill <#> <charname> - Takes away the specified quest skill from the player.
+ 60:@chardelitem <item_name_or_ID> <quantity> <player> - Remove items from a character
+ 99:@charmodel <hair type> <hair color> <clothes color> <name> - Changes a player's model
+ 99:@chardisguise <monster_name_or_monster_ID> <char name> - Changes disguise of a player
+ 99:@charundisguise <char name> - Cancels disguise of a player
+ 60:@charchangesex <name> - Changes sex of a player (all characters of the account)
+ 60:@block <name> - Blocks definitively a account
+ 60:@unblock <name> - Unblocks a account
+ 60:@ban <time> <name> - Ban temporarily a account
+ 60: time usage: adjustement (+/- value) and element (y/a, m, d/j, h, mn, s)
+ 60: Example: @ban +1m-2mn1s-6y testplayer
+ 60:@unban <name> - Unban a account
+ 60:@jail <char_name> - Sends specified character in jails
+ 60:@unjail <char_name> - Discharges specified character/prisoner
+ 60:@trade <char_name> - Open a trade window with a another player
+ 40:@kick <charname> - Kicks specified character off the server
+ 99:@kickall - Kick all characters off the server
+ 99:@mapexit - Kick all players and shut down map-server.
+ 80:@doom - Kills all NON GM chars on the server.
+ 80:@doommap - Kills all non GM characters on the map.
+ 80:@raise - Resurrects all characters on the server.
+ 80:@raisemap - Resurrects all characters on the map.
+ 80:
+ 80:--- ENVIRONMENT CMD ---
+ 80:@night - Uses @option 00 16 00 on all characters. All characters are in darkness.
+ 80:@day - Uses @option 00 00 00 on all characters.
+ 80:@skillon - turn skills on for a map
+ 80:@skilloff - turn skills on for a map
+ 80:
+ 80:--- ADMIN CMD ---
+ 99:@reloaditemdb - Reload item database (admin command)
+ 99:@reloadmobdb - Reload monster database (admin command)
+ 99:@reloadskilldb - Reload skills definition database (admin command)
+ 99:@reloadscript - Reload all scripts (admin command)
+ 99:@reloadgmdb - Reload GM levels (admin command)
+ 99:@adjgmlvl - Do a temporary adjustment of the GM level of a player (admin command)
+ 99:@adjcmdlvl - Do a temporary adjustment of the GM level of a command (admin command)
+ 80:@enablenpc <NPC_name> - Enable a NPC (admin command)
+ 80:@disablenpc <NPC_name> - Disable a NPC (admin command)
+ 80:@npcmove
+ 80:
+ 99:@gat - For debugging (you inspect around gat)
+ 99:@packet - For debugging (packet variety)
+ 99:
+100:@GM <password> - it becomes GM!
diff --git a/conf/inter_athena.conf b/conf/inter_athena.conf
new file mode 100644
index 00000000..72a88bd9
--- /dev/null
+++ b/conf/inter_athena.conf
@@ -0,0 +1,31 @@
+// Athena InterServer configuration.
+
+// Storage flatfile database, used for Karfa storage.
+storage_txt: save/storage.txt
+
+// Party flatfile database, for party names, members and other party info.
+party_txt: save/party.txt
+
+// Guild flatfile database, for guild names, members, and other guild info.
+guild_txt: save/guild.txt
+
+// Pet flatfile database, for pet names, and other pet info.
+pet_txt: save/pet.txt
+
+// Castle flatfile database, for emperium war castles, etc.
+castle_txt: save/castle.txt
+
+// Inter Log Filename
+inter_log_filename: log/inter.log
+
+// Level range for sharing within a party
+party_share_level: 10
+
+// The lowest GM level on your server
+lowest_gm_level: 1
+
+// How often the GM accounts will be reloaded by the map-server in minutes
+read_gm_interval: 10
+
+
+
diff --git a/conf/ladmin_athena.conf b/conf/ladmin_athena.conf
new file mode 100644
index 00000000..2a91a35b
--- /dev/null
+++ b/conf/ladmin_athena.conf
@@ -0,0 +1,28 @@
+// Athena Ladmin configuration file.
+
+// Encoding type of the password
+// 0: not encoded
+// 1: key+password
+// 2: password+key
+passenc: 2
+
+// Language of ladmin
+// F: Franais
+// E: English (default)
+defaultlanguage: E
+
+// Log Filename. All operations done by the software are logged in this file.
+ladmin_log_filename: log/ladmin.log
+
+// Indicate how to display date in logs, to players, etc.
+// 0: 31-12-2004 23:59:59
+// 1: 12-31-2004 23:59:59
+// 2: 2004-31-12 23:59:59
+// 3: 2004-12-31 23:59:59 (default)
+date_format: 3
+
+// If you want use an additional configuration file, uncomment and use this parameter
+//import: path/additional_configuration_file
+
+// local settings for this server in this file
+import: conf/ladmin_local.conf
diff --git a/conf/ladmin_local.conf.example b/conf/ladmin_local.conf.example
new file mode 100644
index 00000000..b3f88e8d
--- /dev/null
+++ b/conf/ladmin_local.conf.example
@@ -0,0 +1,10 @@
+// Athena Ladmin local configuration file.
+
+// Login Server IP
+login_ip:217.172.177.27
+// Login Server Port
+login_port: 6900
+
+// Administrative password, used to connect remotely to server.
+// NOTICE: If you enable remote administration, you should change its value for security
+admin_pass: admin
diff --git a/conf/lan_support.conf b/conf/lan_support.conf
new file mode 100644
index 00000000..bfaec696
--- /dev/null
+++ b/conf/lan_support.conf
@@ -0,0 +1,41 @@
+// Athena TXT version LAN configure file.
+// Support Client Connect to Local Area Network (LAN) IP Address Server.
+// put this fle into conf/ directory
+//
+// HOWTO:
+// To use this file, the login-server, char-server and map-server must be on the same subnetwork
+// (not necessary on the same computer). You can not use eAthena if you want to install the servers on 2 or more different LAN.
+//
+// First of all: you must configure your router to forward your WAN IP (one or more) and port (default: 6900, 6121 and 5121)
+// to the right concerned computer(s) (if default port, forward 6900 port to the (LAN IP) login-server, 6121 port to the (LAN IP) char-server, etc.).
+// After, set in char_athena.conf and map_athena.conf files the WAN IP and the right ports that you use.
+// Give to WAN people (client that are not on your LAN) your WAN IP to have an access to your server.
+// At this point, all players outside your LAN can access to your server(s).
+//
+// Now, you must parameter your LAN for the servers.
+// Set the LAN IP of the char-server and the map-server in this file (lan_char_ip and lan_map_ip).
+// Set the definition of your LAN in this file (subnet and subnetmask).
+// When you load/start login-server and char-server, read what the server displays, and specially the section ---LAN CONFIGURATION---.
+// If you see a warning or something not good, correct it.
+// Now LAN client can access to your server.
+//
+// NB: if you want that nobody of your LAN can access to your server, put 127.0.0.1 in IP and 255.255.255.255 for the mask.
+// So only the localhost computer would access to your server.
+// NB2: you can use LAN name if you have some instead of IP and/or mask.
+// NB3: if you want set your server only for LAN people, set your LAN IP instead of the WAN IP, and set 127.0.0.1/255.255.255.255 for the LAN IP.
+//
+// HOW THAT WORKS:
+// When someone tries to connect to your server(s), the login-server/char-server checks its IP with the LAN subnet (subnet and subnetmask parameters).
+// If it matches, the login-server sends the LAN IP of the char-server (lan_char_ip); and char-server do same for map-server (lan_map_ip).
+// If not, the login-server sends the WAN IP of the char-server that it have received (char_ip in char_athena.conf)
+// and the char-server sends the WAN IP of the map-server that it have received (map_ip in map_athena.conf)
+
+// put here the LAN IP of your char-server
+lan_char_ip: 127.0.0.1
+
+// put here the LAN IP of your map-server
+lan_map_ip: 127.0.0.1
+
+// put here the Subnet mask of your LAN
+subnet: 127.0.0.1
+subnetmask: 255.255.255.255
diff --git a/conf/login_athena.conf b/conf/login_athena.conf
new file mode 100644
index 00000000..9a486cdd
--- /dev/null
+++ b/conf/login_athena.conf
@@ -0,0 +1,130 @@
+// Athena Login Server configuration file.
+// Translated by Peter Kieser <pfak@telus.net>
+
+// Level of new GM created with @gm command. (default: 60)
+// If you set to 0, you disable creation of new GM with @gm.
+// To be able to create a gm with @gm, you must:
+// - give a level to this value (not 0)
+// - enable to level 0 the @gm command (atcommand_athena.conf) (default 100)
+// - enable gm commands to normal player (battle_athena.conf, atcommand_gm_only parameter)
+// - and normal player must give correct password when he use the @gm command
+level_new_gm: 60
+
+// Can you make new accounts on the server? (1 for Yes, 0 for no)
+new_account: 1
+
+// Manage possible letters/symbol in account name. Control character (0x00-0x1f) are never accepted. Possible values are:
+// 0: no restriction (default)
+// 1: only letters/symbols in 'account_name_letters' option.
+// 2: Letters/symbols in 'account_name_letters' option are forbidden. All others are possibles.
+account_name_option: 1
+
+// Set the letters/symbols that you want use with the 'account_name_option' option.
+// Note: add 'space' between 2 others letters/symbols.
+// default: void.
+// account_name_letters: [ ] { } , . | - # @ ! ~ ` ; : " " ? / \ = + < >
+account_name_letters: abcdefghijklmnoprstquvwxyzABCDEFGHIJKLMNOPRSTQUVWXYZ1234567890- _+=!'
+
+
+// Account flatfile database, stores account information.
+account_filename: save/account.txt
+
+// What account AIDs have GM privs, and what level?
+gm_account_filename: conf/gm_account.txt
+
+// Timer to check if GM_account file has been changed and reload GM account automaticaly
+// (in seconds; default: 15; value: 0 (disabled), or 2 or more)
+gm_account_filename_check_timer: 15
+
+// Log Filename. All operations received by the server are logged in this file.
+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
+
+// 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...
+// So, active this option with a speed hard disk or for debug only.
+save_unknown_packets: 0
+
+// Indicate if you want display the parse of the packets received in a normal connection
+// It's useful for debug. Possible values: 0: no (default), 1: yes
+display_parse_login: 0
+
+// Indicate if you want display the parse of the packets received in administration connection
+// It's useful for debug. Possible values: 0: no (default), 1: yes
+display_parse_admin: 0
+
+// Indicate if you want display the parse of the packets received from a char-server
+// It's useful for debug. Possible values: 0: no (default), 1: yes (without packet 0x2714), 2: all packets
+display_parse_fromchar: 0
+
+// Indicate how to display date in logs, to players, etc.
+// 0: 31-12-2004 23:59:59
+// 1: 12-31-2004 23:59:59
+// 2: 2004-31-12 23:59:59
+// 3: 2004-12-31 23:59:59 (default)
+date_format: 3
+
+// Indicate the minimum GM level of player that the server accepts to connection.
+// 0: all players (normal player are 0. it's default), 1-99: GM level at least with level x
+min_level_to_connect: 0
+
+// Give possibility to adjust (ladmin command: timeadd) the time of an unlimited account.
+// If set to on/1/yes..., the adjustment is be done from actual time to set the final time of the account.
+// If set to no/0/no..., the adjustment can not be done on an unlimited account. You must set (ladmin command: timeset) a final time before to adjust (ladmin command: timeadd)
+add_to_unlimited_account: off
+
+// Starting additional sec from now for the limited time at creation of account
+// -1: new account are created with UNlimited time (default value)
+// 0 or more: new accounts was created by addition of the value (in sec) to the actual time (to set first limited time)
+start_limited_time: -1
+
+// It's to check IP of a player between login-server and char-server (part of anti-hacking system)
+// If player doesn't have same IP, connection is refused.
+// Set to 0/off/no to not check IP of player.
+// Set to 1/on/yes if you want to check (default)
+// Note: if you enable this option, be sure that your (local/lan/wan) players use correct ip (in xml file) to contact servers,
+// and that your LAN is correctly configured (!), and that LAN configuration of eathena is right.
+// if not correct, you can read list of char-servers, but not look slots of characters (rejected by server).
+check_ip_flag: no
+
+// Specify order of IP control if necessary (option: 'deny,allow', 'allow,deny', or 'mutual-failture')
+// (how to use 'allow' and 'deny' information)
+//order: allow,deny
+
+// Indicate the IP that the server accept.
+// put: 'all', or 'xxx.xxx.' (begin of an ip finished by '.' or a complete ip),
+// or a network and its mask (example: '123.456.789.012/24' or '123.456.789.012/255.255.255.0')
+// or 'clear' to suppress previous parameter (use it in import file mainly)
+// Add as many IP's as you wish.
+//allow: all
+
+// Indicate the IP that the server refuse.
+// Add as many IP's as you wish, as long as you put deny: before it.
+//deny: 123.123.123.123
+//deny: 234.234.234.234
+
+// If you want use an additional configuration file, uncomment and use this parameter
+//import: path/additional_configuration_file
+
+//Passwords in Login DB are MD5 - <passwordencrypt> cannot b used on client with this on
+use_MD5_passwords: no
+
+//Ban features: read readme for more info if you dont know this.
+ipban: 1
+dynamic_pass_failure_ban: 1
+dynamic_pass_failure_ban_time: 5
+dynamic_pass_failure_ban_how_many: 3
+dynamic_pass_failure_ban_how_long: 60
+dynamic_account_ban: 1
+dynamic_account_ban_class: 0
+
+// Anti-freeze system enable
+anti_freeze_enable: 0
+// Anti-freeze system interval (in seconds)
+anti_freeze_interval: 15
+
+// local settings for this server in this file
+import: conf/login_local.conf
diff --git a/conf/login_local.conf.example b/conf/login_local.conf.example
new file mode 100644
index 00000000..bf892f33
--- /dev/null
+++ b/conf/login_local.conf.example
@@ -0,0 +1,30 @@
+// Athena Login Server local configuration file.
+
+// wan ip override. this ip only will sended to cleints.
+// wan_ip:1.2.3.4
+
+// Port to bind Login Server to (always binds to all IP addresses)
+login_port: 6901
+
+// Whether remote administration is enabled or disabled (1 for enabled, 0 for disabled)
+admin_state: 1
+
+// Administrative password, used by ladmin (perl software) to connect remotely to server.
+// NOTICE: If you enable remote administration, you should change its value for security
+admin_pass: p1
+
+// Indicate the IP that the server accepts for remote administration.
+// put: 'all', or 'xxx.xxx.' (begin of an ip finished by '.' or a complete ip),
+// or a network and its mask (example: '123.456.789.012/24' or '123.456.789.012/255.255.255.0')
+// or 'clear' to suppress previous parameter (use it in import file mainly)
+// Add as many IP's as you wish.
+ladminallowip: all
+
+// Gamemaster password, used with the @gm command to obtain GM commands (level of gm set with level_new_gm parameter).
+// NOTICE: You should also change this one.
+gm_pass: gm
+
+// 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/
diff --git a/conf/magic.conf.template b/conf/magic.conf.template
new file mode 100644
index 00000000..c440bf39
--- /dev/null
+++ b/conf/magic.conf.template
@@ -0,0 +1,1835 @@
+# 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 NECROMANCY = 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
+
+# Status effects
+
+CONST SC_WINDWALK = 116
+CONST SC_POISON = 132
+CONST SC_SHEARED = 194 # This is the same as SC_HIDE, since mobs can't hide and shearing is only used for mobs. Feel free to fix!
+CONST SC_HIDE = 194
+CONST SC_HALT_REGENERATE = 195
+CONST SC_FLYING_BACKPACK = 196
+CONST SC_MBARRIER = 197
+CONST SC_HASTE = 198
+CONST SC_PHYS_SHIELD = 199
+CONST EVOL_GUILD = 500
+CONST EVOL_CRAFT = 501
+CONST EVOL_DYE = 502
+
+CONST SO_GMINVISIBLE = 4096
+
+# Spells constants
+
+
+CONST LESSER_HEAL_HP =50
+CONST MEDIUM_HEAL_HP =250
+CONST FULL_HEAL_HP =1000000
+CONST LESSER_GROUP_HEAL_HP =30
+CONST MEDIUM_GROUP_HEAL_HP =150
+CONST FULL_GROUP_HEAL_HP_PERC =80
+
+
+# Special effects
+CONST SFX_DEFAULT = 10
+CONST SFX_SUMMON_START = 21
+CONST SFX_SUMMON_FIRE = 22
+CONST SFX_TELEPORT = 24
+CONST SFX_RAIN = 25
+CONST SFX_HIT = 25
+CONST SFX_ARROW_HAIL = 27
+CONST SFX_SNOW = 33
+CONST SFX_BARRIER = 10
+CONST SFX_UNBARRIER = 10
+CONST SFX_HEAL = 3
+
+CONST MAX_RAIN_SPELL_RADIUS = 15
+
+CONST MAX_MAGIC_LEVEL = 2 # Increase up to 5 as each new magic level is completed.
+
+CONST MAGIC_FLAGS = "MAGIC_FLAGS"
+CONST MFLAG_MADE_CONC_POTION = 16384
+CONST MFLAG_MADE_CONC_POTION_SHIFT = 14
+
+CONST SCRIPT_XP = "MAGIC_EXPERIENCE"
+CONST SCRIPT_XP_MASK = 0xffff
+CONST SCRIPT_XP_SHIFT = 0
+CONST SCRIPT_LASTSPELL_MASK = 0xff
+CONST SCRIPT_LASTSPELL_SHIFT = 16
+CONST SCRIPT_HEALSPELL_MASK = 0xff
+CONST SCRIPT_HEALSPELL_SHIFT = 24
+CONST DEBUG = 0
+
+CONST ATTACK_ICON_GENERIC = 2000
+CONST ATTACK_ICON_SHEARING = 2001
+
+# Default sfx on caster
+PROCEDURE default_effect() =
+ sfx(caster, school - MAGIC + 2, 0);
+
+PROCEDURE sfx_generic(target) =
+ sfx(target, SFX_DEFAULT, 0);
+
+PROCEDURE set_var(name, mask, shift, value) =
+ set_script_variable(caster, name, script_int(caster, name) & (neg (mask << shift)) | ((value & mask) << shift));
+
+PROCEDURE gain_heal_xp(value, # How many HP we healed
+ gain, # how many life magic experience points we can potentially gain
+ heal_xp_value_divisor, # 1 for instaheal, 2 for slow heal
+ base_exp_factor) = # factor for how many base experience points (max) the player should be allowed to gain
+ last_heal_xp = (script_int(caster, SCRIPT_XP) >> SCRIPT_HEALSPELL_SHIFT) & SCRIPT_HEALSPELL_MASK;
+ IF (target <> caster
+ && (value / heal_xp_value_divisor) > (10 + last_heal_xp + random(last_heal_xp + 1) + random(last_heal_xp + 1)))
+ THEN (
+ heal_xp = last_heal_xp + gain;
+ IF (heal_xp > SCRIPT_HEALSPELL_MASK)
+ THEN heal_xp = SCRIPT_HEALSPELL_MASK;
+ CALL set_var(SCRIPT_XP, SCRIPT_HEALSPELL_MASK, SCRIPT_HEALSPELL_SHIFT, heal_xp);
+ )
+ IF target <> caster
+ THEN gain_experience(caster, base_exp_factor * extract_healer_experience(target, value), 0, 1);
+
+PROCEDURE gain_xp(gain) =
+ IF (level + 3 > skill(caster, MAGIC)) # Level 4 and 5 magic users don't gain anything from spell levels 0 resp. 0+1
+ THEN (
+ index = spell_index(self_spell);
+ last_index = (script_int(caster, SCRIPT_XP) >> SCRIPT_LASTSPELL_SHIFT) & SCRIPT_LASTSPELL_MASK;
+ last_xp = (script_int(caster, SCRIPT_XP) >> SCRIPT_XP_SHIFT) & SCRIPT_XP_MASK;
+ IF (index != last_index)
+ THEN ( # Some variation observed
+ xp = last_xp + gain;
+ IF (xp > SCRIPT_XP_MASK)
+ THEN xp = SCRIPT_XP_MASK;
+ CALL set_var(SCRIPT_XP, SCRIPT_XP_MASK, SCRIPT_XP_SHIFT, xp);
+ CALL set_var(SCRIPT_XP, SCRIPT_LASTSPELL_MASK, SCRIPT_LASTSPELL_SHIFT, index);
+ IF DEBUG THEN message(caster, "Spell xp = " + xp);
+ ) ELSE IF DEBUG THEN message(caster, "Re-cast same spell, xp remain at " + last_xp);
+ )
+
+PROCEDURE create_item(good_item, count, bad_item, difficulty) =
+ success = 1;
+ score = experience + random(min(spellpower, (experience / 3) + 1));
+ IF (score >= difficulty)
+ THEN create_item(caster, good_item, count);
+ ELSE (
+ success = 0;
+ score = score + random(luk(caster)) + random(luk(caster));
+ IF (score < difficulty / 3)
+ THEN (
+ message(caster, "Your spell backfires!");
+ IF (random(110) < (luk(caster)))
+ THEN itemheal(caster, 0 - ((level + 1) * (level + 2) * (3 + random(28))), 0);
+ ELSE itemheal(caster, 0 - (level + 1), 0);
+ ) ELSE IF (score < (difficulty * 2) / 3)
+ THEN (
+ IF random(5) = 0
+ THEN (message(caster, "Your spell solidifies into the shape of a mysterious object!");
+ create_item(caster, "Iten", 1);)
+ ELSE message(caster, "Your spell escapes!");
+ ) ELSE (
+ message(caster, "Your spell takes on a mind of its own!");
+ IF random(3) = 0
+ THEN create_item(caster, bad_item, 1);
+ )
+ )
+
+# Increase spellpower by school and general magic skill
+PROCEDURE adjust_spellpower(school) =
+ experience = (script_int(caster, SCRIPT_XP) >> SCRIPT_XP_SHIFT) & SCRIPT_XP_MASK;
+ spellpower = spellpower + (skill(caster, MAGIC) + skill(caster, school)) * 10;
+ # Below, we adjust by special items
+ IF (not(failed(target)) && (school = LIFE || school = NATURE))
+ THEN IF (target)
+ THEN IF (pc(target) = partner(caster))
+ THEN (spellpower = spellpower + 200;
+ IF is_equipped(caster, "WeddingRing")
+ THEN spellpower = spellpower + 50;
+ IF is_equipped(pc(target), "WeddingRing")
+ THEN spellpower = spellpower + 50;)
+
+PROCEDURE heal(target, max_heal) =
+ CALL default_effect();
+ IF caster <> target
+ THEN sfx(target, SFX_HEAL, 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) =
+ CALL default_effect();
+ IF caster <> target
+ THEN sfx(target, SFX_HEAL, 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);
+ evade = level(target) + mdef(target);
+ 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);
+ IF (spellpower - random(100) < evade)
+ THEN d = 0;
+ injure(caster, target, d, 0);
+
+PROCEDURE melee_damage(target, damage, dmgplus) =
+ CALL attack_check(target);
+ d = damage + random(dmgplus);
+ evade = level(target) + mdef(target);
+ IF (spellpower - random(100) < evade)
+ THEN d = 0;
+ injure(caster, target, d, 0);
+
+
+PROCEDURE install_attack_spell(charges, base_delay, range, attack_animation) =
+ CALL default_effect();
+ attack_range = range;
+ override_attack(caster, charges, ((200 - agi(caster)) * base_delay) / 200,
+ range, ATTACK_ICON_GENERIC, attack_animation, 0);
+
+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) =
+ CALL default_effect();
+ sfx(location, SFX_SUMMON_START, 0);
+ WAIT delay;
+ sfx(location, SFX_SUMMON_FIRE, 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);
+
+
+PROCEDURE abort_on_area_shield(pos) =
+ IF (is_exterior(pos) = 1 && (map_nr(pos) = 1 # Tulimshar
+ ||map_nr(pos) = 9 # Hurnscald
+ ||map_nr(pos) = 20
+ ||map_nr(pos) = 99)) # Nivalis
+ THEN (message(caster, "A powerful magic drains your spell just as it is beginning to take shape!");
+ ABORT;)
+
+
+#--------------------------------------------------------------------------------
+# Level 0 spells
+#--------------------------------------------------------------------------------
+
+SPELL ask-magic-exp : "#G01" =
+ LET level = 0
+ school = MAGIC
+ IN (MANA 1, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ level = skill (caster, MAGIC);
+ experience = (script_int(caster, SCRIPT_XP) >> SCRIPT_XP_SHIFT) & SCRIPT_XP_MASK;
+ IF (experience == SCRIPT_XP_MASK && level > 4)
+ THEN message (caster, "You are as proficient at magic as you can possibly be.");
+ ELSE (
+ # This duplicates the table in mana-seed.txt
+ IF level > 4
+ THEN max_experience = SCRIPT_XP_MASK;
+ ELSE IF level = 4
+ THEN max_experience = 40000;
+ ELSE IF level = 3
+ THEN max_experience = 8000;
+ ELSE IF level = 2
+ THEN max_experience = 1200;
+ ELSE max_experience = 100;
+
+ ratio = (10 * experience - random(max_experience / 30)) / max_experience; #Randomness: jitter a bit at the transitions to give more precise information if used frequently
+
+ IF ratio >= 45
+ THEN message(caster, "Magic flows naturally from you, readily and with ease. Your understanding of what you can currently control at present is flawless, far beyond your requirements to cast magic at this level." + if_then_else(level >= MAX_MAGIC_LEVEL,""," Surely the Mana Seed will more than readily offer more magic for such a proficient user."));
+ ELSE IF ratio >= 20
+ THEN message(caster, "You have perfect control of what you understand now, but there is now a distinct sensation of something more, something indescribable. If only the Mana Seed would give more magic to you...");
+ ELSE IF ratio >= 10
+ THEN message(caster, "You feel in perfect control of your magic" + if_then_else(level >= MAX_MAGIC_LEVEL,".",", and seem on the verge of something more... perhaps you should see the Mana Seed to ask for more magic?"));
+ ELSE IF ratio >= 9
+ THEN message(caster, "You feel in almost perfect control of your magic.");
+ ELSE IF ratio >= 8
+ THEN message(caster, "You feel that you have very good control of your magic.");
+ ELSE IF ratio >= 7
+ THEN message(caster, "You feel quite in control of your magic.");
+ ELSE IF ratio >= 6
+ THEN message(caster, "You feel mostly in control of your magic.");
+ ELSE IF ratio >= 5
+ THEN message(caster, "You feel somewhat in control of your magic.");
+ ELSE IF ratio >= 4
+ THEN message(caster, "You feel you still have a few difficulties in controlling your magic.");
+ ELSE IF ratio >= 3
+ THEN message(caster, "Trying to control your magic is still rather troublesome.");
+ ELSE IF ratio >= 2
+ THEN message(caster, "You feel that you have only the bare minimum of control over your magic.");
+ ELSE IF ratio >= 1
+ THEN message(caster, "You feel quite overwhelmed by your magic, but are beginning to see patterns.");
+ ELSE message (caster, "You feel completely overwhelmed by your magic.");
+ )
+
+# SPELL ask-life-magic-exp : "#G02" =
+# LET level = 0
+# school = MAGIC
+# IN (MANA 1, CASTTIME 1000,
+# REQUIRE skill(caster, MAGIC) > level)
+# => EFFECT CALL adjust_spellpower(school);
+# CALL default_effect();
+# message(caster, "You have " + ((script_int(caster, "MAGIC_EXPERIENCE") >> 24) & 0xff) + " Life Magic Experience points.");
+
+SPELL transmute-wood-to-figurine (name : STRING) : "#T00" =
+ LET level = 0
+ school = TRANSMUTE
+ IN (MANA 5, CASTTIME 4000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["RawLog"])
+ => ( REQUIRE name = "boo" =>
+ EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("MoubooFigurine", 1, "WarpedLog", 40);
+ CALL gain_xp(1);
+ | REQUIRE name = "lurk" =>
+ EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("WarpedLog", 1, "WarpedLog", 40);
+ message (caster, "You have no idea what a Skrytlurk looks like.");
+ )
+
+
+#--------------------------------------------------------------------------------
+# Evol Level 0 Life magic spells (change acorns with the real component)
+#--------------------------------------------------------------------------------
+
+SPELL lesser-heal (target : STRING) : "#L00" =
+ LET level = 0
+ school = LIFE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 100)),
+ (CATALYSTS ["Acorn"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF failed(pc(target))
+ THEN (target = caster;)
+ ELSE (target = pc(target);
+ IF is_dead(target)
+ THEN ABORT;)
+ CALL gain_heal_xp(min(200, max_hp(target) - hp(target)), 1, 2, 2); # report half values for non-instaheal
+ CALL heal(target, LESSER_HEAL_HP);
+ CALL gain_xp(1);
+
+
+SPELL cure-poison (target : PC) : "#L01" =
+ LET level = 0
+ school = LIFE
+ IN (MANA 15, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE (rdistance(location(caster),
+ location(pc(target))) < 1 + (spellpower / 60)),
+ CATALYSTS ["Acorn"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF (running_status_update (target, SC_POISON))
+ THEN (CALL gain_heal_xp(40, 1, 2, 2);
+ stop_status_change (target, SC_POISON);
+ CALL gain_xp(2);
+ IF caster <> target
+ THEN sfx(target, SFX_HEAL, 0););
+
+
+SPELL lesser-group-heal : "#L02" =
+ LET level = 0
+ school = LIFE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 100)),
+ (CATALYSTS ["Acorn"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOREACH PC target IN rbox(location(caster), 4) DO
+ IF ( is_dead(target) = 0 && target <> caster && line_of_sight(location(caster), location(target)))
+ THEN (CALL sfx_generic(target);
+ CALL quickheal(target, LESSER_GROUP_HEAL_HP);
+ CALL gain_heal_xp(min(LESSER_GROUP_HEAL_HP, max_hp(target) - hp(target)), 1, 2, 2);)
+ CALL gain_xp(1);
+
+
+#--------------------------------------------------------------------------------
+# End of Evol Level 0 Life magic spells
+#--------------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------------
+# Evol Level 1 Life magic spells (change acorns with the real component)
+#--------------------------------------------------------------------------------
+
+SPELL medium-group-heal : "#L10" =
+ LET level = 1
+ school = LIFE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 100)),
+ (CATALYSTS ["Acorn"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOREACH PC target IN rbox(location(caster), 6) DO
+ IF ( is_dead(target) = 0 && target <> caster && line_of_sight(location(caster), location(target)))
+ THEN (CALL sfx_generic(target);
+ CALL quickheal(target, MEDIUM_GROUP_HEAL_HP);
+ CALL gain_heal_xp(min(MEDIUM_GROUP_HEAL_HP, max_hp(target) - hp(target)), 1, 2, 2);)
+ CALL gain_xp(1);
+
+SPELL transfusion (target : STRING) : "#L11" =
+ LET level = 1
+ school = LIFE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 100)),
+ (CATALYSTS ["Acorn"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF failed(pc(target))
+ THEN (target = caster;)
+ ELSE (target = pc(target);
+ IF is_dead(target)
+ THEN ABORT;)
+ CALL gain_heal_xp(min(200, max_hp(target) - hp(target)), 1, 2, 2); # report half values for non-instaheal
+ points = min(500, hp(caster) - 1);
+ CALL quickheal(caster, -1 * points);
+ CALL quickheal(target, points);
+ CALL gain_xp(1);
+
+SPELL medium-heal (target : STRING) : "#L12" =
+ LET level = 1
+ school = LIFE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 100)),
+ (CATALYSTS ["Acorn"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF failed(pc(target))
+ THEN (target = caster;)
+ ELSE (target = pc(target);
+ IF is_dead(target)
+ THEN ABORT;)
+ CALL gain_heal_xp(min(200, max_hp(target) - hp(target)), 1, 2, 2); # report half values for non-instaheal
+ CALL heal(target, MEDIUM_HEAL_HP);
+ CALL gain_xp(1);
+
+#--------------------------------------------------------------------------------
+# End of Evol Level 1 Life magic spells
+#--------------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------------
+# Evol Level 2 Life magic spells (change acorns with the real component)
+#--------------------------------------------------------------------------------
+
+SPELL revive (target : PC) : "#L20" =
+ LET level = 2
+ school = LIFE
+ IN (MANA 12, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["Acorn"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF (target <> caster)
+ #resurrect the target with 100% hp, 100% mp (1 flag to use %, 0 to use absolute values)
+ THEN(resurrect(target, 1, 1, 0);
+ CALL gain_xp(10);
+ sfx(target, school - MAGIC + 2, 0);)
+
+
+SPELL full-group-heal : "#L21" =
+ LET level = 2
+ school = LIFE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 100)),
+ (CATALYSTS ["Acorn"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOREACH PC target IN rbox(location(caster), 10) DO
+ IF ( is_dead(target) = 0 && target <> caster && line_of_sight(location(caster), location(target)))
+ THEN (CALL sfx_generic(target);
+ CALL quickheal(target, max_hp(target) * (FULL_GROUP_HEAL_HP_PERC / 100));
+ CALL gain_heal_xp(min(max_hp(target) * (FULL_GROUP_HEAL_HP_PERC / 100), max_hp(target) - hp(target)), 1, 2, 2);)
+ CALL gain_xp(1);
+
+
+SPELL full-heal (target : STRING) : "#L22" =
+ LET level = 2
+ school = LIFE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 100)),
+ (CATALYSTS ["Acorn"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF failed(pc(target))
+ THEN (target = caster;)
+ ELSE (target = pc(target);
+ IF is_dead(target)
+ THEN ABORT;)
+ CALL gain_heal_xp(min(200, max_hp(target) - hp(target)), 1, 2, 2); # report half values for non-instaheal
+ CALL heal(target, FULL_HEAL_HP);
+ CALL gain_xp(1);
+
+#--------------------------------------------------------------------------------
+# End of Evol Level 2 Life magic spells
+#--------------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------------
+# Evol Level 0 Nature magic spells (change acorns with the real component)
+#--------------------------------------------------------------------------------
+
+SPELL rain : "#N00" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ CATALYSTS ["Acorn"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ #CALL abort_on_area_shield(location(caster));
+ CALL gain_xp(1);
+ range = min(MAX_RAIN_SPELL_RADIUS, 3 + min(spellpower, 200) / 30);
+ area = rbox(location(caster), range);
+ FOR i = 0 TO (spellpower / 3) DO (
+ FOR j = 0 TO min(spellpower / 2, 200) / 100 DO (
+ location = random_location(area);
+ sfx(location, SFX_RAIN, 0);
+ )
+ WAIT 400 + random(100);
+ );
+
+SPELL speed : "#N02" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ CATALYSTS ["Acorn"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ status_change(caster, SC_WINDWALK, 16, -50, 0, 0, 30000);
+ CALL gain_xp(1);
+ message(caster, "You feel you can move fast");
+
+#--------------------------------------------------------------------------------
+# End of Evol Level 0 Nature magic spells
+#--------------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------------
+# Evol Level 1 Nature magic spells (change acorns with the real component)
+#--------------------------------------------------------------------------------
+
+SPELL snow : "#N10" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ CATALYSTS ["Acorn"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ #CALL abort_on_area_shield(location(caster));
+ CALL gain_xp(1);
+ range = min(MAX_RAIN_SPELL_RADIUS, 3 + min(spellpower, 200) / 30);
+ area = rbox(location(caster), range);
+ FOR i = 0 TO (spellpower / 3) DO (
+ FOR j = 0 TO min(spellpower / 2, 200) / 100 DO (
+ location = random_location(area);
+ sfx(location, SFX_SNOW, 0);
+ )
+ #WAIT 100 + random(100);
+ );
+
+SPELL anti-magic (target : PC) : "#N12" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ CATALYSTS ["Acorn"],
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ sfx(target, 11, 0);
+ IF (caster <> target)
+ THEN CALL default_effect();
+ status_change(target, SC_MBARRIER, 20 + max(30, spellpower / 8), 0, 0, 0, 2000 + (spellpower * 200));
+ status_change(target, SC_PHYS_SHIELD, 5 + max(15, spellpower / 20), 0, 0, 0, 5000 + (spellpower * 1000));
+ message (target, "You are surrounded by a magical barrier.");
+ CALL gain_xp(5);
+ ATEND message (target, "Your magical barrier dissipates.");
+ sfx(target, 111, 0);
+
+#--------------------------------------------------------------------------------
+# End of Evol Level 1 Nature magic spells
+#--------------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------------
+# Evol Level 1 Necromancy magic spells (change acorns with the real component)
+#--------------------------------------------------------------------------------
+
+SPELL destruction : "#NE12" =
+ LET level = 2
+ school = NECROMANCY
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ CATALYSTS ["Acorn"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOREACH MOB target IN rbox(location(caster), 10) DO (
+ injure(caster, target, 1000, 0);)
+ #sfx(target, 16, 0);)
+ itemheal(caster, -1 * hp(caster) + 1, -10000);
+ CALL gain_xp(1);
+
+#--------------------------------------------------------------------------------
+# End of Evol Level 1 Necromancy magic spells
+#--------------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------------
+# Evol Level 0 Transmutation magic spells (change acorns with the real component)
+#--------------------------------------------------------------------------------
+
+SPELL herb-transmut (target : PC) : "#T00" =
+ LET level = 0
+ school = TRANSMUTE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ CATALYSTS ["Acorn"],
+ CATALYSTS [646] OR CATALYSTS [647] OR CATALYSTS [648] OR CATALYSTS [649])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ esc = random(30);
+ IF (esc = 0) THEN (
+ message (caster, "Your spell escapes!");
+ ABORT;
+ )
+ {
+ set @herbs[0], 646;
+ set @herbs[1], 647;
+ set @herbs[2], 648;
+ set @herbs[3], 649;
+ set @c, 4;
+ set @herb, rand(@c);
+ l_RandHerb:
+ if (countitem(@herbs[@herb])) goto l_Delete;
+ set @c, @c - 1;
+ set @herbs[@herb], @herbs[@c];
+ set @herb, rand(@c);
+ goto l_RandHerb;
+ l_Delete:
+ set @herb, @herbs[@herb];
+ delitem @herb, 1;
+ l_NewHerb:
+ set @herbs[0], 646;
+ set @herbs[1], 647;
+ set @herbs[2], 648;
+ set @herbs[3], 649;
+ set @c, 4;
+ set @newherb, rand(@c);
+ l_RandNewHerb:
+ if (@herbs[@newherb] != @herb) goto l_Create;
+ set @c, @c - 1;
+ set @herbs[@newherb], @herbs[@c];
+ set @newherb, rand(@c);
+ goto l_RandNewHerb;
+ l_Create:
+ getitem @herbs[@newherb], 1;
+ if (@sec) goto l_Finish;
+ set @sec, rand(29);
+ if (@sec == 1) goto l_NewHerb;
+ l_Finish:
+ set @sec, 0;
+ };
+
+SPELL make-turtle : "#T02" =
+ LET level = 0
+ school = TRANSMUTE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ #REQUIRE skill(caster, school) > level,
+ COMPONENTS ["Acorn", "Acorn", "Acorn"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ spawn(rbox(location(caster), 2), caster, 1002, 1, 1, 1000000000);
+
+
+#--------------------------------------------------------------------------------
+# End of Evol Level 0 Transmutation magic spells
+#--------------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------------
+# Evol Level 1 Transmutation magic spells (change acorns with the real component)
+#--------------------------------------------------------------------------------
+
+SPELL make-bee : "#T12" =
+ LET level = 0
+ school = TRANSMUTE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ #REQUIRE skill(caster, school) > level,
+ COMPONENTS ["Acorn", "Acorn", "Acorn", "Acorn"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ spawn(rbox(location(caster), 2), caster, 1005, 1, 1, 1000000000);
+
+
+#--------------------------------------------------------------------------------
+# End of Evol Level 1 Transmutation magic spells
+#--------------------------------------------------------------------------------
+
+#--------------------------------------------------------------------------------
+# Old TMW spells (to get rid of)
+#--------------------------------------------------------------------------------
+
+SPELL aggravate : "#N00" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 3, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOREACH MOB target IN rbox(location(caster), 2 + spellpower / 50) DO
+ IF line_of_sight(location(caster), location(target))
+ THEN (CALL sfx_generic(target);
+ aggravate(target, 0, caster);)
+
+SPELL grow-mauve : "#N01" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 4, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["MauveHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ spawn(rbox(location, 2), caster, 1029, 1, skill(caster, school) / 2 + 1, 10000);
+
+SPELL grow-alizarin : "#N02" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 4, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["AlizarinHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ spawn(rbox(location, 2), caster, 1032, 1, skill(caster, school) / 2 + 1, 10000);
+
+SPELL grow-gamboge : "#N03" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 4, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["GambogeHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ spawn(rbox(location, 2), caster, 1031, 1, skill(caster, school) / 2 + 1, 10000);
+
+SPELL grow-cobalt : "#N04" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 4, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["CobaltHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ spawn(rbox(location, 2), caster, 1030, 1, skill(caster, school) / 2 + 1, 10000);
+
+
+LOCAL SPELL summon-maggots : "#A00" =
+ LET level = 0
+ school = ASTRAL
+ IN (MANA 21, CASTTIME 20000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["MaggotSlime", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL gain_xp(1);
+ CALL summon_spell(1002,
+ 1 + ((sqrt(spellpower) + (spellpower / 15)) / 5),
+ 5000 - (spellpower * 5),
+ 10000 + (spellpower * 50), 1);
+
+SPELL detect-magic : "#G00" =
+ LET level = 0
+ school = MAGIC
+ IN (MANA 3, CASTTIME 6000,
+ REQUIRE skill(caster, MAGIC) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ range = 1 + spellpower / 50;
+ FOREACH NPC n IN rbox(location(caster), range)
+ DO IF (contains_string(name_of(n), "#MAGIC") || contains_string(name_of(n), "#_M"))
+ THEN sfx(n, SFX_DEFAULT, 0);
+ FOREACH SPELL s IN rbox(location(caster), range)
+ DO IF (s <> self_invocation)
+ THEN sfx(s, SFX_DEFAULT, 0);
+
+
+#--------------------------------------------------------------------------------
+# Level 1 spells
+#--------------------------------------------------------------------------------
+
+SPELL make-arrows : "#T10" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 8, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["RawLog"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("Arrow", 1 + spellpower / 40 + (random(max(1, 800 - spellpower)) / 80), "WarpedLog", 500);
+ CALL gain_xp(1);
+
+SPELL make-shirt : "#T11" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 25, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [5 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("CottonShirt", 1, "CottonCloth", 425);
+ CALL gain_xp(2);
+
+SPELL make-tanktop : "#T12" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 25, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [4 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("TankTop", 1, "CottonCloth", 350);
+ CALL gain_xp(2);
+
+SPELL make-short-tanktop : "#T13" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 25, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [3 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("ShortTankTop", 1, "CottonCloth", 250);
+ CALL gain_xp(2);
+
+SPELL make-iron-powder : "#T14" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 8, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["IronOre"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("IronPowder", 1 + spellpower / 140 + (random(max(1, 900 - spellpower)) / 220), "IronOre", 700);
+ CALL gain_xp(3);
+
+SPELL make-concentration-potion : "#T15" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 8, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["BottleOfWater", 2 * "CobaltHerb", 2 * "Petal"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item( if_then_else(random(2000 + experience) < experience, "ConcentrationPotion", "DarkConcentrationPotion"), 1,
+ if_then_else(random(2), 744, "DarkConcentrationPotion"),
+ 2000);
+ IF (success)
+ THEN CALL set_var(MAGIC_FLAGS, 1, MFLAG_MADE_CONC_POTION_SHIFT, 1);
+ CALL gain_xp(4);
+
+SPELL merge-concentration-potions : "#T16" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 8, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["DarkConcentrationPotion", 744])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("ConcentrationPotion", 1, 744, 1000);
+ message (caster, "success = " + success);
+ IF (success)
+ THEN CALL set_var(MAGIC_FLAGS, 1, MFLAG_MADE_CONC_POTION_SHIFT, 1);
+ CALL gain_xp(4);
+
+
+SPELL lay-on-hands (target : STRING) : "#L10" =
+ LET level = 1
+ school = LIFE
+ IN (MANA 10, CASTTIME 500,
+ REQUIRE hp(caster) > max_hp(caster) / 20,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ (pc(target) <> caster)
+ &&
+ (rdistance(location(caster),
+ location(pc(target))) < 2 + (spellpower / 50))
+ && not (running_status_update(pc(target), SC_HALT_REGENERATE))
+ ))
+ => EFFECT CALL adjust_spellpower(school);
+ IF (not (target)) THEN ABORT;
+ IF failed(pc(target))
+ THEN (IF ((target = "mouboo" || target = "Mouboo")
+ && (rdistance(location(caster), location(npc("Mouboo"))) < 2 + (spellpower / 100)))
+ THEN (needed = 1000;
+ {
+ set @spell, 1;
+ callfunc "QuestMoubooHeal";
+ })
+ ELSE ABORT;
+ )
+ 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;
+ )
+ CALL gain_heal_xp(power, 1, 1, 3);
+ CALL quickheal(target, power);
+ status_change(caster, SC_HALT_REGENERATE, 0, 0, 0, 0, 10000);
+ CALL gain_xp(min(4, payment / 100));
+
+SPELL lightning-strike : "#ingrav" =
+ LET level = 1
+ school = WAR
+ IN (MANA 20, 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 = spellpower;
+ damage_bonus = 1 + spellpower / 2;
+ CALL install_attack_spell(1 + spellpower / 90,
+ 3000,
+ 8, 31);
+ CALL gain_xp(2);
+ ATTRIGGER CALL attack_check(target);
+ in_rain = 0;
+ area = location(caster);
+ FOREACH SPELL s IN rbox(location(caster), MAX_RAIN_SPELL_RADIUS + 1) DO
+ IF name_of(s) = "rain" THEN (
+ IF is_in (location(caster), s.area)
+ THEN (in_rain = in_rain | 1;
+ area = area + s.area;);
+ IF is_in (location(target), s.area)
+ THEN in_rain = in_rain | 2;
+ );
+ IF (in_rain & 1) || (check_status_change(caster,SC_DRUNK))
+ THEN (# caster standing in the rain? This is going to be fun.
+ used = 0;
+ FOREACH TARGET t IN area DO
+ IF (random(200) + luk(caster) > 175)
+ THEN (used = used + 1;
+ CALL elt_damage (t, damage / 6, 1 + (damage_bonus / 3), ELT_EARTH, ELT_WIND, 17 + random(3)););
+ IF (not(used) || (random(200) + luk(caster) < 150))
+ THEN (sfx(caster, 17 + random(3), 0);
+ itemheal(caster, 0 - damage - (random(damage_bonus)), 0););
+ ) ELSE
+ CALL elt_damage (target, damage, damage_bonus, ELT_EARTH, ELT_WIND, 17 + random(3));
+
+LOCAL SPELL arrow-hail : "#W11" =
+ LET level = 1
+ school = WAR
+ IN (MANA 25, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_exterior(location(caster)),
+ (COMPONENTS [20 * "Arrow"] OR COMPONENTS [20 * "IronArrow"]),
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["SulphurPowder"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL abort_on_area_shield(location(caster));
+
+ range = 7;
+ area = rbox(awayfrom(location(caster), dir(caster), 1 + range), range);
+
+ FOREACH SPELL s IN rbox(awayfrom(location(caster), dir(caster), 1 + range), range * 2) DO
+ IF (s <> self_invocation) && (name_of(s) = "arrow-hail")
+ THEN (message (caster, "A nearby arrow hail spell absorbs your magic!");
+ ABORT;)
+
+ damage = 125;
+ damage_bonus = spellpower / 5;
+ CALL gain_xp(2);
+ FOR i = 0 TO spellpower / 8 DO (
+ FOR j = 0 TO 2 DO (
+ location = random_location(area);
+ sfx(location, SFX_ARROW_HAIL, 0);
+ done = 0;
+ FOREACH TARGET target IN rbox(location, 0) DO (
+ injure(caster, target, damage + random(damage_bonus) + random(damage_bonus), 0);
+ done = 1;
+ BREAK;
+ )
+ IF location(caster) = location && not(done)
+ THEN (itemheal(caster, 0 - (damage + random(damage_bonus) + random(damage_bonus)), 0);
+ sfx(caster, SFX_HIT, 0);
+ )
+ );
+ WAIT 250 + random(50) + random(50);
+ );
+
+SPELL magic-knuckles : "#W12" =
+ 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(caster);
+ CALL install_melee_spell(10 + spellpower / 10, 1300, 34);
+ ATTRIGGER CALL melee_damage(target, 30, 5 + (str * 2));
+
+SPELL flying-backpack (target : PC) : "#N10" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 12, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["SilkCocoon"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ 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.");
+ CALL gain_xp(1);
+ ATEND message (target, "Your backpack is no longer levitating.");
+ sfx(target, 2, 0);
+
+SPELL protect (target : PC) : "#N11" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 14, CASTTIME 1500,
+ 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 CALL default_effect();
+ status_change(target, SC_PHYS_SHIELD, 5 + max(15, spellpower / 20), 0, 0, 0, 5000 + (spellpower * 1000));
+ message (target, "You feel more protected.");
+ CALL gain_xp(2);
+ ATEND message (target, "You feel less protected.");
+ sfx(target, 111, 0);
+
+SPELL happy-curse (target : PC) : "#N12" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 13, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["GingerBreadMan"]),
+ REQUIRE rdistance(location(target), location(caster)) < 1 + spellpower / 100)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOR i = 0 TO (spellpower / 10) DO (emote(target, 3); WAIT 500;);
+ CALL gain_xp(1);
+
+LOCAL SPELL rain : "#N13" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 17, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_exterior(location(caster)),
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["BottleOfWater"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL abort_on_area_shield(location(caster));
+ FOREACH SPELL s IN rbox(location(caster), MAX_RAIN_SPELL_RADIUS + 1) DO
+ IF (s <> self_invocation) && (name_of(s) = "rain")
+ THEN (message (caster, "A nearby raincloud absorbs your magic.");
+ ABORT;)
+
+ CALL gain_xp(1);
+ range = min(MAX_RAIN_SPELL_RADIUS, 3 + min(spellpower, 200) / 30);
+ area = rbox(location(caster), range);
+ IF (is_in(location(npc("#DruidTree0#_M")), area)
+ || is_in(location(npc("#DruidTree1#_M")), area))
+ THEN {
+ set @flag, 1;
+ callfunc "QuestTreeTrigger";
+ };
+ FOR i = 0 TO (spellpower / 3) DO (
+ FOR j = 0 TO min(spellpower / 2, 200) / 100 DO (
+ location = random_location(area);
+ sfx(location, SFX_RAIN, 0);
+ FOREACH TARGET target IN rbox(location, 1) DO
+ IF element(target) = ELT_FIRE
+ THEN injure(caster, target, 2 + random(5 + spellpower / 15), 0);
+ )
+ WAIT 400 + random(100);
+ );
+
+LOCAL SPELL snow : "#N23" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 18, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_exterior(location(caster)),
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["BottleOfWater"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL abort_on_area_shield(location(caster));
+ FOREACH SPELL s IN rbox(location(caster), MAX_RAIN_SPELL_RADIUS + 1) DO
+ IF (s <> self_invocation) && (name_of(s) = "snow")
+ THEN (message (caster, "A nearby snowcloud absorbs your magic.");
+ ABORT;)
+ CALL gain_xp(1);
+ range = min(MAX_RAIN_SPELL_RADIUS, 3 + min(spellpower, 200) / 30);
+ area = rbox(location(caster), range);
+
+ FOR i = 0 TO (spellpower / 8) DO (
+ FOR j = 0 TO min(spellpower / 2, 200) / 100 DO (
+ location = random_location(area);
+ sfx(location, 29, 0);
+ FOREACH TARGET target IN rbox(location(area), 0) DO
+ IF element(target) = ELT_FIRE
+ THEN injure(caster, target, 2 + random(5 + spellpower / 15), 0);
+ )
+ WAIT 200 + random(100);
+ );
+
+PROCEDURE shear-drop(target, target2, item, prob) =
+ IF (target = name || target2 = name)
+ THEN (IF (score < prob)
+ THEN drop_item_for(place, item, 1, 60000, caster, 5000);)
+
+PROCEDURE shear-drop2(target, target2, item, prob, item2, prob2) =
+ IF (target = name || target2 = name)
+ THEN (IF (score < prob)
+ THEN drop_item_for(place, item, 1, 60000, caster, 5000);
+ ELSE CALL shear-drop(target, target2, item2, prob2 + prob);)
+
+PROCEDURE shear-drop3(target, target2, item, prob, item2, prob2, item3, prob3) =
+ IF (target = name || target2 = name)
+ THEN (IF (score < prob)
+ THEN drop_item_for(place, item, 1, 60000, caster, 5000);
+ ELSE CALL shear-drop2(target, target2, item2, prob2 + prob, item3, prob3 + prob);)
+
+
+SPELL shear : "#N14" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 23, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ override_attack (caster, 1, 2000, 1, ATTACK_ICON_SHEARING, 30, 0);
+ ATTRIGGER IF not(is_pc(target))
+ THEN (score = random (1000 - (random (spellpower))); # lower score -> more valuable item
+ name = name_of(target);
+ place = random_location(rbox(location(target), 1));
+ IF running_status_update(target, SC_SHEARED)
+ THEN ABORT;
+ status_change(target, SC_SHEARED, 1, 1, 1, 1, 600000); # 10 minutes
+ CALL shear-drop("Fluffy", "Fluffy", "WhiteFur", 300);
+ CALL shear-drop("EasterFluffy", "Easter Fluffy", "WhiteFur", 300);
+ CALL shear-drop("SpikyMushroom", "Spiky Mushroom", "HardSpike", 250);
+ CALL shear-drop("Mouboo", "Mouboo", "CottonCloth", 175);
+ CALL shear-drop("Cobalt", "CobaltPlant", "CobaltHerb", 700);
+ CALL shear-drop("Alizarin", "AlizarinPlant", "AlizarinHerb", 700);
+ CALL shear-drop("Gamboge", "GambogePlant", "GambogeHerb", 700);
+ CALL shear-drop("Mauve", "MauvePlant", "MauveHerb", 700);
+ CALL shear-drop("SilkWorm", "Silkworm", "SilkCocoon", 300);
+ IF ((name = "Fluffy" || name = "Mouboo") && random(2))
+ THEN { set @value, 1; callfunc "QuestSagathaHappy"; };
+ )
+
+
+
+SPELL barrier (target : PC) : "#A10" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 16, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["SmallMushroom"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, SFX_BARRIER, 0);
+ IF (caster <> target)
+ THEN CALL default_effect();
+ status_change(target, SC_MBARRIER, 20 + max(30, spellpower / 8), 0, 0, 0, 2000 + (spellpower * 200));
+ message (target, "You are surrounded by a magical barrier.");
+ CALL gain_xp(3);
+ ATEND message (target, "Your magical barrier dissipates.");
+ sfx(target, SFX_UNBARRIER, 0);
+
+
+LOCAL SPELL summon-spiky-mushrooms : "#A11" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 33, CASTTIME 20000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["HardSpike", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ CALL summon_spell(1019, 1 + spellpower / 120, 5000 - (spellpower * 9), spellpower * 400, 2);
+
+LOCAL SPELL summon-fluffies : "#A12" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 39, CASTTIME 20000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["WhiteFur", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ CALL summon_spell(1020, 1 + spellpower / 170 + spellpower / 430, 5000 - (spellpower * 8), spellpower * 350, 3);
+
+
+SPELL detect-players : "#G10" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 7, CASTTIME 300,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ message = "";
+ FOREACH PC target IN rbox(location(caster), spellpower / 2)
+ DO IF ((target <> caster)
+ && not (running_status_update(pc(target), SC_HIDE))
+ && not (status_option(target, SO_GMINVISIBLE)))
+ 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 reveal : "#G11" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 18, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOREACH PC target IN rbox(location(caster), 1 + spellpower / 100)
+ DO IF has_shroud(target) && level(caster) * 2 > level(target)
+ THEN (unshroud(target);
+ sfx(target, SFX_DEFAULT, 500);)
+
+
+SPELL enchant-lifestone : "#G12" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 15, CASTTIME 4000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (COMPONENTS["BugLeg"] OR COMPONENTS ["MaggotSlime"]
+ OR COMPONENTS ["MauveHerb", "AlizarinHerb", "CobaltHerb", "GambogeHerb"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ create_item(caster, "Lifestone", 1);
+ CALL gain_xp(1);
+
+SPELL sense-spouse : "#G13" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 7, CASTTIME 400,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_married(caster),
+ REQUIRE is_equipped(caster, "WeddingRing"))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF (failed(partner(caster)) || not(is_equipped(partner(caster), "WeddingRing")))
+ THEN (message(caster, "You cannot sense your partner.");
+ ABORT;)
+ partner = partner(caster);
+ name = name_of(partner);
+ IF (is_dead(partner) || (map_nr(location(partner)) <> map_nr(location(caster))))
+ THEN (message(caster, "You cannot sense " + name + " nearby.");
+ ABORT;)
+ IF (map_level(location(partner)) > 2 && map_level(location(caster)) < map_level(location(partner)))
+ THEN (message(caster, "You sense " + name + " somewhere below.");
+ ABORT;)
+ IF (map_level(location(caster)) > 2 && map_level(location(partner)) < map_level(location(caster)))
+ THEN (message(caster, "You sense " + name + " somewhere above.");
+ ABORT;)
+ IF (map_level(location(caster)) <> map_level(location(partner)))
+ THEN message(caster, "You sense " + name + " somewhere in the vincinity.");
+ ELSE (distance = rdistance(location(caster), location(partner));
+ dir = dir_towards(location(caster), location(partner), 1);
+ IF (distance < 3)
+ THEN message(caster, "You sense " + name + " right next to you.");
+ ELSE IF (distance < 30)
+ THEN message(caster, "You sense " + name + " close by, towards the " + dir + ".");
+ ELSE IF (distance < 200)
+ THEN message(caster, "You sense " + name + " nearby, towards the " + dir + ".");
+ ELSE message(caster, "You sense " + name + " in the " + dir + ".");
+ )
+
+SPELL hide (target : PC) : "#A13" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 11, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["CottonCloth"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, SFX_DEFAULT, 0);
+ IF (caster <> target)
+ THEN CALL default_effect();
+ status_change(target, SC_HIDE, 0, 0, 0, 0, 5000 + (spellpower * 2500));
+ CALL gain_xp(2);
+ message(target, "You are hidden!");
+ IF (caster <> target) THEN message(caster, "You hid someone!");
+ ATEND message(target, "You are no longer hidden.");
+
+#--------------------------------------------------------------------------------
+# Level 2 spells
+#--------------------------------------------------------------------------------
+
+
+SPELL fire-ball : "#W22" =
+ LET level = 2
+ school = WAR
+ IN (MANA 30, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ 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 summon-partner : "#A23" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 30, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_married(caster),
+ REQUIRE is_equipped(caster, "WeddingRing"))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ 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 IF (is_dead (partner (caster)))
+ THEN message (caster, "Something seems to have happened to " + (name_of(partner(caster))) + ".");
+ 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 1 (magic level 2)
+#--------------------------------------------------------------------------------
+LOCAL SPELL summon-cow : "#A32" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 33, CASTTIME 20000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ CALL summon_spell(1021, 1 + spellpower / 120, 5000 - (spellpower * 9), spellpower * 400, 2);
+
+LOCAL SPELL summon-bats : "#kalbalark" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 25, CASTTIME 20000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["BatTeeth", "BatWing", "BatTeeth", "BatWing", "BatTeeth", "BatWing", "BatTeeth", "BatWing", "BatTeeth", "BatWing", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(2);
+ mob = 1017;
+ IF(check_status_change(caster,200))
+ THEN mob = 1021;
+ CALL summon_spell(mob,
+ 1 + ((sqrt(spellpower) + (spellpower / 15)) / 5),
+ 5000 - (spellpower * 5),
+ 10000 + (spellpower * 50), 1);
+
+
+#--------------------------------------------------------------------------------
+# Level 2 (magic level 3)
+#--------------------------------------------------------------------------------
+
+LOCAL SPELL summon-whiteghost : "#kalshiro" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 25, CASTTIME 30000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["YggdrasilHerb", "YggdrasilHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(10);
+ CALL summon_spell(1119,
+ 1 + ((sqrt(spellpower) + (spellpower / 15)) / 5),
+ 5000 - (spellpower * 5),
+ 10000 + (spellpower * 50), 1);
+
+LOCAL SPELL summon-cobaltghost : "#kalbaoi" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 25, CASTTIME 30000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["CobaltHerb", "CobaltHerb", "CobaltHerb", "CobaltHerb", "CobaltHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(10);
+ CALL summon_spell(1120,
+ 1 + ((sqrt(spellpower) + (spellpower / 15)) / 10),
+ 5000 - (spellpower * 5),
+ 10000 + (spellpower * 50), 1);
+
+LOCAL SPELL summon-mauveghost : "#kaliziorn" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 25, CASTTIME 30000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["MauveHerb", "MauveHerb", "MauveHerb", "MauveHerb", "MauveHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL gain_xp(10);
+ CALL summon_spell(1121,
+ 1 + ((sqrt(spellpower) + (spellpower / 15)) / 10),
+ 5000 - (spellpower * 5),
+ 10000 + (spellpower * 50), 1);
+
+
+LOCAL SPELL summon-alizaringhost : "#kalizeden" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 25, CASTTIME 30000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["AlizarinHerb", "AlizarinHerb", "AlizarinHerb", "AlizarinHerb", "AlizarinHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL gain_xp(10);
+ CALL summon_spell(1122,
+ 1 + ((sqrt(spellpower) + (spellpower / 15)) / 10),
+ 5000 - (spellpower * 5),
+ 10000 + (spellpower * 50), 1);
+
+LOCAL SPELL summon-gambogeghost : "#kalambodge" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 25, CASTTIME 30000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [5 * "GambogeHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(10);
+ CALL summon_spell(1123,
+ 1 + ((sqrt(spellpower) + (spellpower / 15)) / 10),
+ 5000 - (spellpower * 5),
+ 10000 + (spellpower * 50), 1);
+
+
+
+#--------------------------------------------------------------------------------
+# Level 4 spells
+#--------------------------------------------------------------------------------
+
+SPELL shroud : "#N40" =
+ LET level = 4
+ school = NATURE
+ IN (MANA 40, CASTTIME 400,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL default_effect();
+ shroud(caster, 0x04);
+
+SPELL teleport (destination : STRING) : "#A40" =
+ LET level = 4
+ school = ASTRAL
+ IN (MANA 80, CASTTIME 400,
+ # COMPONENT ["EtherEssence"],
+ # CATALYST ["TeleportCrystal"],
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL default_effect();
+ WAIT 1000 + (200000 / (spellpower + 10));
+ sfx(location(caster), SFX_TELEPORT, 200);
+ warp(caster, random_location(anchor(destination)));
+ sfx(caster, SFX_TELEPORT, 200);
+
+#--------------------------------------------------------------------------------
+# Debug keywords
+#--------------------------------------------------------------------------------
+
+SPELL debug : "debug" =
+ REQUIRE DEBUG
+ => EFFECT message (caster, "FLAGS: "
+ + "drank=" + ((script_int(caster, "MAGIC_FLAGS") & 1) > 0) + ", "
+ + "Kmseed=" + ((script_int(caster, "MAGIC_FLAGS") & 2) > 0) + ", "
+ + "touched-mseed=" + ((script_int(caster, "MAGIC_FLAGS") & 4) > 0) + ", "
+ + "mseed-max=" + ((script_int(caster, "MAGIC_FLAGS") & 8) > 0) + ", "
+ + "Kauldsbel=" + ((script_int(caster, "MAGIC_FLAGS") & 16) > 0) + ", "
+ + "Kwyara=" + ((script_int(caster, "MAGIC_FLAGS") & 32) > 0) + ", "
+ + "Ksagatha=" + ((script_int(caster, "MAGIC_FLAGS") & 64) > 0) + ", "
+ + "Kmpotion=" + ((script_int(caster, "MAGIC_FLAGS") & 128) > 0) + ", "
+ + "mseed-rumour=" + ((script_int(caster, "MAGIC_FLAGS") & 256) > 0) + ", "
+ + "Kcuttree=" + ((script_int(caster, "MAGIC_FLAGS") & 512) > 0) + ", "
+ + "cut=" + ((script_int(caster, "MAGIC_FLAGS") & 1024) > 0) + ", "
+ + "Kdruidtree=" + ((script_int(caster, "MAGIC_FLAGS") & 2048) > 0) + ", "
+ + "Kimp=" + ((script_int(caster, "MAGIC_FLAGS") & 4096) > 0) + ", "
+ + "Koldwiz=" + ((script_int(caster, "MAGIC_FLAGS") & 8192) > 0) + ", "
+ + "made-conc=" + ((script_int(caster, "MAGIC_FLAGS") & 16384) > 0) + ", "
+ + "elanore-omar=" + ((script_int(caster, "MAGIC_FLAGS") & 32768) > 0));
+ message (caster, "EXP: " + (script_int(caster, "MAGIC_EXPERIENCE") & 0xffff)
+ + ", lastspell=" + ((script_int(caster, "MAGIC_EXPERIENCE") >> 16) & 0xff)
+ + ", healexp=" + ((script_int(caster, "MAGIC_EXPERIENCE") >> 24) & 0xff));
+ message (caster, "STATUS: "
+ + "auldsbel:" + (script_int(caster, "QUEST_MAGIC") & 0x1f) + "," + ((script_int(caster, "QUEST_MAGIC") >> 5) & 0x7) + ", "
+ + "dt/mb:" + ((script_int(caster, "QUEST_MAGIC") >> 8) & 0xf) + ", "
+ + "s-unhappy:" + ((script_int(caster, "QUEST_MAGIC") >> 12) & 0xf) + ", "
+ + "sagatha:" + ((script_int(caster, "QUEST_MAGIC") >> 16) & 0xff) + ", "
+ + "swords:" + ((script_int(caster, "QUEST_MAGIC") >> 24) & 0xff) + ", "
+ + "imp:" + ((script_int(caster, "QUEST_MAGIC2") >> 0) & 0xf) + ", "
+ + "elanore:" + ((script_int(caster, "QUEST_MAGIC2") >> 4) & 0xf) + ", "
+ + "elanore-sub:" + ((script_int(caster, "QUEST_MAGIC2") >> 12) & 0xf) + ", "
+ + "wyara:" + ((script_int(caster, "QUEST_MAGIC2") >> 8) & 0xf));
+
+PROCEDURE debug_xmod(name, mask, shift, gain) =
+ value = ((script_int(caster, name) >> shift) & mask) + gain;
+ IF (value < 0)
+ THEN value = 0;
+ IF (value > mask)
+ THEN value = mask;
+ CALL set_var(name, mask, shift, value);
+
+PROCEDURE debug_mod(name, delta) =
+ IF (name = "mexp") THEN CALL debug_xmod("MAGIC_EXPERIENCE", 0xffff, 0, delta);
+ ELSE IF (name = "lastspell") THEN CALL debug_xmod("MAGIC_EXPERIENCE", 0xff, 16, delta);
+ ELSE IF (name = "healexp") THEN CALL debug_xmod("MAGIC_EXPERIENCE", 0xff, 24, delta);
+ ELSE IF (name = "drank") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 0, delta);
+ ELSE IF (name = "Kmseed") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 1, delta);
+ ELSE IF (name = "touched-mseed") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 2, delta);
+ ELSE IF (name = "mseed-max") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 3, delta);
+ ELSE IF (name = "Kauldsbel") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 4, delta);
+ ELSE IF (name = "Kwyara") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 5, delta);
+ ELSE IF (name = "Ksagatha") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 6, delta);
+ ELSE IF (name = "Kmpotion") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 7, delta);
+ ELSE IF (name = "mseed-rumour") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 8, delta);
+ ELSE IF (name = "Kcuttree") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 9, delta);
+ ELSE IF (name = "cut") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 10, delta);
+ ELSE IF (name = "Kdruidtree") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 11, delta);
+ ELSE IF (name = "Kimp") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 12, delta);
+ ELSE IF (name = "oldwiz") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 13, delta);
+ ELSE IF (name = "made-conc") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 14, delta);
+ ELSE IF (name = "elanore-omar") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 15, delta);
+ ELSE IF (name = "auldsbel") THEN CALL debug_xmod("QUEST_MAGIC", 0x1f, 0, delta);
+ ELSE IF (name = "Qauldsbel") THEN CALL debug_xmod("QUEST_MAGIC", 0x7, 5, delta);
+ ELSE IF (name = "dt") THEN CALL debug_xmod("QUEST_MAGIC", 0x3, 10, delta);
+ ELSE IF (name = "mb") THEN CALL debug_xmod("QUEST_MAGIC", 0x3, 8, delta);
+ ELSE IF (name = "s-unhappy") THEN CALL debug_xmod("QUEST_MAGIC", 0xff, 12, delta);
+ ELSE IF (name = "sagatha") THEN CALL debug_xmod("QUEST_MAGIC", 0xff, 16, delta);
+ ELSE IF (name = "swords") THEN CALL debug_xmod("QUEST_MAGIC", 0xff, 24, delta);
+ ELSE IF (name = "imp") THEN CALL debug_xmod("QUEST_MAGIC2", 0xf, 0, delta);
+ ELSE IF (name = "elanore") THEN CALL debug_xmod("QUEST_MAGIC2", 0xf, 4, delta);
+ ELSE IF (name = "wyara") THEN CALL debug_xmod("QUEST_MAGIC2", 0xf, 8, delta);
+ ELSE IF (name = "elanore-sub") THEN CALL debug_xmod("QUEST_MAGIC2", 0xf, 12, delta);
+ ELSE message(caster, "Unknown");
+
+SPELL debug-up1 (name : STRING) : "debug+1" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 1);
+
+SPELL debug-down1 (name : STRING) : "debug-1" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 0 - 1);
+
+SPELL debug-up16 (name : STRING) : "debug+16" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 16);
+
+SPELL debug-down16 (name : STRING) : "debug-16" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 0 - 16);
+
+SPELL debug-up256 (name : STRING) : "debug+256" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 256);
+
+SPELL debug-down256 (name : STRING) : "debug-256" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 0 - 256);
+
+SPELL debug-reset : "debug-reset" =
+ REQUIRE DEBUG
+ => EFFECT set_script_variable(caster, "QUEST_MAGIC", 0);
+ set_script_variable(caster, "QUEST_MAGIC2", 0);
+ set_script_variable(caster, "MAGIC_FLAGS", 0);
+ set_script_variable(caster, "MAGIC_EXP", 0);
+
+
+#--------------------------------------------------------------------------------
+# Special-purpose quasispells
+#--------------------------------------------------------------------------------
+
+CONST MIN_MARRY_LEVEL = 32;
+
+NONMAGIC SILENT SPELL marriage (target : PC) : "marry" =
+ (REQUIRE (is_in(location(caster), @("014-1.gat", 28,39) @+ (8, 6)) || is_in(location(caster), @("021-2.gat", 20,25) @+ (4, 4)) ))=>
+ 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 need 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;
+ close;
+ }
+
+ 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);))
+
+
+LOCAL SPELL mouboo-groan : "#g" =
+ (MANA 1,
+ REQUIRE name_of(caster) = "MOUBOOTAUR") =>
+ EFFECT FOREACH PC p IN rbox(location(caster), 200) DO
+ distance = rdistance(location(caster), location(p));
+ IF (distance < 15)
+ THEN message(p, "The moubootaur's groaning rings in your ears!");
+ ELSE IF (distance < 70)
+ THEN message(p, "You hear a loud groaning noise, not far away...");
+ ELSE message(p, "You hear an odd groaning noise in the distance...");
+
+
+LOCAL SPELL mouboo-smell : "#s" =
+ (MANA 1,
+ REQUIRE name_of(caster) = "MOUBOOTAUR") =>
+ EFFECT WAIT 30000;
+ FOREACH PC p IN rbox(location(caster), 30) DO
+ message(p, "You notice a strange smell all around you.");
+
+
+PROCEDURE hug_tree(target) =
+ IF (target = ""
+ || target = "tree" || target = "tree*"
+ || target = "Tree" || target = "Tree*"
+ || target = "druid" || target = "druid*"
+ || target = "Druid" || target = "Druid*")
+ THEN {
+ set @flag, 2;
+ callfunc "QuestTreeTrigger";
+ };
+
+NONMAGIC SPELL hug0 (target : STRING) : "hug" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug1 (target : STRING) : "*hug*" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug2 (target : STRING) : "*hug" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug3 (target : STRING) : "hugs" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug4 (target : STRING) : "*hugs*" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug5 (target : STRING) : "*hugs" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+
+#--------------------------------------------------------------------------------
+# Teleport anchors
+#--------------------------------------------------------------------------------
+
+TELEPORT-ANCHOR tulimshar : "tulimshar" = @("001-1.gat", 43, 66) @+ (3, 3);
+TELEPORT-ANCHOR hurnscald : "hurnscald" = @("009-1.gat", 55, 37) @+ (3, 3);
+TELEPORT-ANCHOR nivalis : "nivalis" = @("020-1.gat", 75, 63) @+ (19, 12);
+TELEPORT-ANCHOR wizardhut : "##00" = @("013-1.gat", 41, 92) @+ (3, 3);
+TELEPORT-ANCHOR pachua : "##01" = @("006-1.gat", 22, 101) @+ (3, 3);
+TELEPORT-ANCHOR desert : "##02" = @("005-1.gat", 160, 64) @+ (5, 5);
+TELEPORT-ANCHOR forest : "##03" = @("015-1.gat", 35, 35) @+ (40, 40);
+TELEPORT-ANCHOR snakecave : "##04" = @("011-4.gat", 50, 75) @+ (3, 3);
+TELEPORT-ANCHOR dimondscove : "##05" = @("010-2.gat", 23, 79) @+ (3, 3);
+
+
diff --git a/conf/magic.conf.tmw.template b/conf/magic.conf.tmw.template
new file mode 100644
index 00000000..931fb678
--- /dev/null
+++ b/conf/magic.conf.tmw.template
@@ -0,0 +1,1617 @@
+# 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
+
+# Status effects
+CONST SC_POISON = 132
+CONST SC_SHEARED = 194 # This is the same as SC_HIDE, since mobs can't hide and shearing is only used for mobs. Feel free to fix!
+CONST SC_HIDE = 194
+CONST SC_HALT_REGENERATE = 195
+CONST SC_FLYING_BACKPACK = 196
+CONST SC_MBARRIER = 197
+CONST SC_HASTE = 198
+CONST SC_PHYS_SHIELD = 199
+
+CONST SO_GMINVISIBLE = 4096
+
+# Special effects
+CONST SFX_DEFAULT = 10
+CONST SFX_SUMMON_START = 21
+CONST SFX_SUMMON_FIRE = 22
+CONST SFX_TELEPORT = 24
+CONST SFX_RAIN = 25
+CONST SFX_HIT = 25
+CONST SFX_ARROW_HAIL = 27
+CONST SFX_BARRIER = 10
+CONST SFX_UNBARRIER = 10
+CONST SFX_HEAL = 3
+
+CONST MAX_RAIN_SPELL_RADIUS = 15
+
+CONST MAX_MAGIC_LEVEL = 2 # Increase up to 5 as each new magic level is completed.
+
+CONST MAGIC_FLAGS = "MAGIC_FLAGS"
+CONST MFLAG_MADE_CONC_POTION = 16384
+CONST MFLAG_MADE_CONC_POTION_SHIFT = 14
+
+CONST SCRIPT_XP = "MAGIC_EXPERIENCE"
+CONST SCRIPT_XP_MASK = 0xffff
+CONST SCRIPT_XP_SHIFT = 0
+CONST SCRIPT_LASTSPELL_MASK = 0xff
+CONST SCRIPT_LASTSPELL_SHIFT = 16
+CONST SCRIPT_HEALSPELL_MASK = 0xff
+CONST SCRIPT_HEALSPELL_SHIFT = 24
+CONST DEBUG = 0
+
+CONST ATTACK_ICON_GENERIC = 2000
+CONST ATTACK_ICON_SHEARING = 2001
+
+# Default sfx on caster
+PROCEDURE default_effect() =
+ sfx(caster, school - MAGIC + 2, 0);
+
+PROCEDURE sfx_generic(target) =
+ sfx(target, SFX_DEFAULT, 0);
+
+PROCEDURE set_var(name, mask, shift, value) =
+ set_script_variable(caster, name, script_int(caster, name) & (neg (mask << shift)) | ((value & mask) << shift));
+
+PROCEDURE gain_heal_xp(value, # How many HP we healed
+ gain, # how many life magic experience points we can potentially gain
+ heal_xp_value_divisor, # 1 for instaheal, 2 for slow heal
+ base_exp_factor) = # factor for how many base experience points (max) the player should be allowed to gain
+ last_heal_xp = (script_int(caster, SCRIPT_XP) >> SCRIPT_HEALSPELL_SHIFT) & SCRIPT_HEALSPELL_MASK;
+ IF (target <> caster
+ && (value / heal_xp_value_divisor) > (10 + last_heal_xp + random(last_heal_xp + 1) + random(last_heal_xp + 1)))
+ THEN (
+ heal_xp = last_heal_xp + gain;
+ IF (heal_xp > SCRIPT_HEALSPELL_MASK)
+ THEN heal_xp = SCRIPT_HEALSPELL_MASK;
+ CALL set_var(SCRIPT_XP, SCRIPT_HEALSPELL_MASK, SCRIPT_HEALSPELL_SHIFT, heal_xp);
+ )
+ IF target <> caster
+ THEN gain_experience(caster, base_exp_factor * extract_healer_experience(target, value), 0, 1);
+
+PROCEDURE gain_xp(gain) =
+ IF (level + 3 > skill(caster, MAGIC)) # Level 4 and 5 magic users don't gain anything from spell levels 0 resp. 0+1
+ THEN (
+ index = spell_index(self_spell);
+ last_index = (script_int(caster, SCRIPT_XP) >> SCRIPT_LASTSPELL_SHIFT) & SCRIPT_LASTSPELL_MASK;
+ last_xp = (script_int(caster, SCRIPT_XP) >> SCRIPT_XP_SHIFT) & SCRIPT_XP_MASK;
+ IF (index != last_index)
+ THEN ( # Some variation observed
+ xp = last_xp + gain;
+ IF (xp > SCRIPT_XP_MASK)
+ THEN xp = SCRIPT_XP_MASK;
+ CALL set_var(SCRIPT_XP, SCRIPT_XP_MASK, SCRIPT_XP_SHIFT, xp);
+ CALL set_var(SCRIPT_XP, SCRIPT_LASTSPELL_MASK, SCRIPT_LASTSPELL_SHIFT, index);
+ IF DEBUG THEN message(caster, "Spell xp = " + xp);
+ ) ELSE IF DEBUG THEN message(caster, "Re-cast same spell, xp remain at " + last_xp);
+ )
+
+PROCEDURE create_item(good_item, count, bad_item, difficulty) =
+ success = 1;
+ score = experience + random(min(spellpower, (experience / 3) + 1));
+ IF (score >= difficulty)
+ THEN create_item(caster, good_item, count);
+ ELSE (
+ success = 0;
+ score = score + random(luk(caster)) + random(luk(caster));
+ IF (score < difficulty / 3)
+ THEN (
+ message(caster, "Your spell backfires!");
+ IF (random(110) < (luk(caster)))
+ THEN itemheal(caster, 0 - ((level + 1) * (level + 2) * (3 + random(28))), 0);
+ ELSE itemheal(caster, 0 - (level + 1), 0);
+ ) ELSE IF (score < (difficulty * 2) / 3)
+ THEN (
+ IF random(5) = 0
+ THEN (message(caster, "Your spell solidifies into the shape of a mysterious object!");
+ create_item(caster, "Iten", 1);)
+ ELSE message(caster, "Your spell escapes!");
+ ) ELSE (
+ message(caster, "Your spell takes on a mind of its own!");
+ IF random(3) = 0
+ THEN create_item(caster, bad_item, 1);
+ )
+ )
+
+# Increase spellpower by school and general magic skill
+PROCEDURE adjust_spellpower(school) =
+ experience = (script_int(caster, SCRIPT_XP) >> SCRIPT_XP_SHIFT) & SCRIPT_XP_MASK;
+ spellpower = spellpower + (skill(caster, MAGIC) + skill(caster, school)) * 10;
+ # Below, we adjust by special items
+ IF (not(failed(target)) && (school = LIFE || school = NATURE))
+ THEN IF (target)
+ THEN IF (pc(target) = partner(caster))
+ THEN (spellpower = spellpower + 200;
+ IF is_equipped(caster, "WeddingRing")
+ THEN spellpower = spellpower + 50;
+ IF is_equipped(pc(target), "WeddingRing")
+ THEN spellpower = spellpower + 50;)
+
+PROCEDURE heal(target, max_heal) =
+ CALL default_effect();
+ IF caster <> target
+ THEN sfx(target, SFX_HEAL, 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) =
+ CALL default_effect();
+ IF caster <> target
+ THEN sfx(target, SFX_HEAL, 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);
+ evade = level(target) + mdef(target);
+ IF (spellpower - random(100) < evade)
+ THEN d = 0;
+ injure(caster, target, d, 0);
+
+
+PROCEDURE install_attack_spell(charges, base_delay, range, attack_animation) =
+ CALL default_effect();
+ attack_range = range;
+ override_attack(caster, charges, ((200 - agi(caster)) * base_delay) / 200,
+ range, ATTACK_ICON_GENERIC, attack_animation, 0);
+
+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) =
+ CALL default_effect();
+ sfx(location, SFX_SUMMON_START, 0);
+ WAIT delay;
+ sfx(location, SFX_SUMMON_FIRE, 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);
+
+PROCEDURE abort_on_area_shield(pos) =
+ IF (is_exterior(pos) = 1 && (map_nr(pos) = 1 # Tulimshar
+ ||map_nr(pos) = 9 # Hurnscald
+ ||map_nr(pos) = 20)) # Nivalis
+ THEN (message(caster, "A powerful magic drains your spell just as it is beginning to take shape!");
+ ABORT;)
+
+
+#--------------------------------------------------------------------------------
+# Level 0 spells
+#--------------------------------------------------------------------------------
+
+SPELL ask-magic-exp : "#G01" =
+ LET level = 0
+ school = MAGIC
+ IN (MANA 1, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ level = skill (caster, MAGIC);
+ experience = (script_int(caster, SCRIPT_XP) >> SCRIPT_XP_SHIFT) & SCRIPT_XP_MASK;
+ IF (experience == SCRIPT_XP_MASK && level > 4)
+ THEN message (caster, "You are as proficient at magic as you can possibly be.");
+ ELSE (
+ # This duplicates the table in mana-seed.txt
+ IF level > 4
+ THEN max_experience = SCRIPT_XP_MASK;
+ ELSE IF level = 4
+ THEN max_experience = 40000;
+ ELSE IF level = 3
+ THEN max_experience = 8000;
+ ELSE IF level = 2
+ THEN max_experience = 1200;
+ ELSE max_experience = 100;
+
+ ratio = (10 * experience - random(max_experience / 30)) / max_experience; #Randomness: jitter a bit at the transitions to give more precise information if used frequently
+
+ IF ratio >= 45
+ THEN message(caster, "Magic flows naturally from you, readily and with ease. Your understanding of what you can currently control at present is flawless, far beyond your requirements to cast magic at this level." + if_then_else(level >= MAX_MAGIC_LEVEL,""," Surely the Mana Seed will more than readily offer more magic for such a proficient user."));
+ ELSE IF ratio >= 20
+ THEN message(caster, "You have perfect control of what you understand now, but there is now a distinct sensation of something more, something indescribable. If only the Mana Seed would give more magic to you...");
+ ELSE IF ratio >= 10
+ THEN message(caster, "You feel in perfect control of your magic" + if_then_else(level >= MAX_MAGIC_LEVEL,".",", and seem on the verge of something more... perhaps you should see the Mana Seed to ask for more magic?"));
+ ELSE IF ratio >= 9
+ THEN message(caster, "You feel in almost perfect control of your magic.");
+ ELSE IF ratio >= 8
+ THEN message(caster, "You feel that you have very good control of your magic.");
+ ELSE IF ratio >= 7
+ THEN message(caster, "You feel quite in control of your magic.");
+ ELSE IF ratio >= 6
+ THEN message(caster, "You feel mostly in control of your magic.");
+ ELSE IF ratio >= 5
+ THEN message(caster, "You feel somewhat in control of your magic.");
+ ELSE IF ratio >= 4
+ THEN message(caster, "You feel you still have a few difficulties in controlling your magic.");
+ ELSE IF ratio >= 3
+ THEN message(caster, "Trying to control your magic is still rather troublesome.");
+ ELSE IF ratio >= 2
+ THEN message(caster, "You feel that you have only the bare minimum of control over your magic.");
+ ELSE IF ratio >= 1
+ THEN message(caster, "You feel quite overwhelmed by your magic, but are beginning to see patterns.");
+ ELSE message (caster, "You feel completely overwhelmed by your magic.");
+ )
+
+# SPELL ask-life-magic-exp : "#G02" =
+# LET level = 0
+# school = MAGIC
+# IN (MANA 1, CASTTIME 1000,
+# REQUIRE skill(caster, MAGIC) > level)
+# => EFFECT CALL adjust_spellpower(school);
+# CALL default_effect();
+# message(caster, "You have " + ((script_int(caster, "MAGIC_EXPERIENCE") >> 24) & 0xff) + " Life Magic Experience points.");
+
+SPELL transmute-wood-to-figurine (name : STRING) : "#T00" =
+ LET level = 0
+ school = TRANSMUTE
+ IN (MANA 5, CASTTIME 4000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["RawLog"])
+ => ( REQUIRE name = "boo" =>
+ EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("MoubooFigurine", 1, "WarpedLog", 40);
+ CALL gain_xp(1);
+ | REQUIRE name = "lurk" =>
+ EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("WarpedLog", 1, "WarpedLog", 40);
+ message (caster, "You have no idea what a Skrytlurk looks like.");
+ )
+
+
+SPELL make-sulphur : "#T01" =
+ LET level = 0
+ school = TRANSMUTE
+ IN (MANA 4, CASTTIME 4000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["PileOfAsh"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("SulphurPowder", 1 + spellpower / 100 + (random(max(1, 800 - spellpower)) / 180), "PileOfAsh", 50);
+ CALL gain_xp(1);
+
+SPELL lesser-heal (target : STRING) : "#L00" =
+ LET level = 0
+ school = LIFE
+ IN (MANA 6, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ rdistance(location(caster), location(pc(target))) < 2 + (spellpower / 100)),
+ (COMPONENTS ["Lifestone"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF failed(pc(target))
+ THEN (IF ((target = "mouboo" || target = "Mouboo")
+ && rdistance(location(caster), location(npc("Mouboo"))) < 2 + (spellpower / 100))
+ THEN { mes "Your spell seems to have no effect on the mouboo."; close; }
+ ELSE target = caster;)
+ ELSE (target = pc(target);
+ IF is_dead(target)
+ THEN ABORT;)
+ CALL gain_heal_xp(min(200, max_hp(target) - hp(target)), 1, 2, 2); # report half values for non-instaheal
+ CALL heal(target, 200);
+ CALL gain_xp(1);
+
+
+SPELL flare-dart : "#W00" =
+ LET level = 0
+ school = WAR
+ IN (MANA 10, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level,
+ (REQUIRE skill(caster, school) > 2 OR COMPONENTS ["SulphurPowder"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ damage = 5 * sqrt(spellpower);
+ damage_bonus = 5 + level(caster) / 3;
+ CALL install_attack_spell(3 + spellpower / 50,
+ 1200,
+ 4, 31);
+ CALL gain_xp(1);
+ ATTRIGGER CALL attack_check(target);
+ CALL elt_damage (target, damage, damage_bonus, ELT_WATER, ELT_FIRE, 15);
+
+
+SPELL magic-blade : "#W01" =
+ LET level = 0
+ school = WAR
+ IN (MANA 9, CASTTIME 500,
+ REQUIRE skill(caster, MAGIC) > level)
+ => ( COMPONENTS ["SharpKnife"] =>
+ EFFECT CALL adjust_spellpower(WAR);
+ CALL default_effect();
+ CALL install_melee_spell(10 + spellpower / 15, 1200, 30);
+ CALL gain_xp(1);
+ ATTRIGGER CALL melee_damage(target, 60, 5 + str(caster));
+ | COMPONENTS ["Knife"] =>
+ EFFECT CALL adjust_spellpower(WAR);
+ CALL default_effect();
+ CALL install_melee_spell(10 + spellpower / 15, 1200, 30);
+ CALL gain_xp(1);
+ ATTRIGGER CALL melee_damage(target, 40, 5 + str(caster));
+ )
+
+SPELL aggravate : "#N00" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 3, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOREACH MOB target IN rbox(location(caster), 2 + spellpower / 50) DO
+ IF line_of_sight(location(caster), location(target))
+ THEN (CALL sfx_generic(target);
+ aggravate(target, 0, caster);)
+
+SPELL grow-mauve : "#N01" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 4, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["MauveHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ spawn(rbox(location, 2), caster, 1029, 1, skill(caster, school) / 2 + 1, 10000);
+
+SPELL grow-alizarin : "#N02" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 4, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["AlizarinHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ spawn(rbox(location, 2), caster, 1032, 1, skill(caster, school) / 2 + 1, 10000);
+
+SPELL grow-gamboge : "#N03" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 4, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["GambogeHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ spawn(rbox(location, 2), caster, 1031, 1, skill(caster, school) / 2 + 1, 10000);
+
+SPELL grow-cobalt : "#N04" =
+ LET level = 0
+ school = NATURE
+ IN (MANA 4, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["CobaltHerb", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ spawn(rbox(location, 2), caster, 1030, 1, skill(caster, school) / 2 + 1, 10000);
+
+
+LOCAL SPELL summon-maggots : "#A00" =
+ LET level = 0
+ school = ASTRAL
+ IN (MANA 21, CASTTIME 20000,
+ REQUIRE skill(caster, MAGIC) > level,
+ COMPONENTS ["MaggotSlime", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL gain_xp(1);
+ CALL summon_spell(1002,
+ 1 + ((sqrt(spellpower) + (spellpower / 15)) / 5),
+ 5000 - (spellpower * 5),
+ 10000 + (spellpower * 50), 1);
+
+SPELL detect-magic : "#G00" =
+ LET level = 0
+ school = MAGIC
+ IN (MANA 3, CASTTIME 6000,
+ REQUIRE skill(caster, MAGIC) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ range = 1 + spellpower / 50;
+ FOREACH NPC n IN rbox(location(caster), range)
+ DO IF (contains_string(name_of(n), "#MAGIC") || contains_string(name_of(n), "#_M"))
+ THEN sfx(n, SFX_DEFAULT, 0);
+ FOREACH SPELL s IN rbox(location(caster), range)
+ DO IF (s <> self_invocation)
+ THEN sfx(s, SFX_DEFAULT, 0);
+
+
+#--------------------------------------------------------------------------------
+# Level 1 spells
+#--------------------------------------------------------------------------------
+
+SPELL make-arrows : "#T10" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 8, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["RawLog"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("Arrow", 1 + spellpower / 40 + (random(max(1, 800 - spellpower)) / 80), "WarpedLog", 500);
+ CALL gain_xp(1);
+
+SPELL make-shirt : "#T11" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 25, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [5 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("CottonShirt", 1, "CottonCloth", 425);
+ CALL gain_xp(2);
+
+SPELL make-tanktop : "#T12" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 25, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [4 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("TankTop", 1, "CottonCloth", 350);
+ CALL gain_xp(2);
+
+SPELL make-short-tanktop : "#T13" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 25, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS [3 * "CottonCloth"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("ShortTankTop", 1, "CottonCloth", 250);
+ CALL gain_xp(2);
+
+SPELL make-iron-powder : "#T14" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 8, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["IronOre"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("IronPowder", 1 + spellpower / 140 + (random(max(1, 900 - spellpower)) / 220), "IronOre", 700);
+ CALL gain_xp(3);
+
+SPELL make-concentration-potion : "#T15" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 8, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["BottleOfWater", 2 * "CobaltHerb", 2 * "PinkPetal"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item( if_then_else(random(2000 + experience) < experience, "ConcentrationPotion", "DarkConcentrationPotion"), 1,
+ if_then_else(random(2), 744, "DarkConcentrationPotion"),
+ 2000);
+ IF (success)
+ THEN CALL set_var(MAGIC_FLAGS, 1, MFLAG_MADE_CONC_POTION_SHIFT, 1);
+ CALL gain_xp(4);
+
+SPELL merge-concentration-potions : "#T16" =
+ LET level = 1
+ school = TRANSMUTE
+ IN (MANA 8, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["DarkConcentrationPotion", 744])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL create_item("ConcentrationPotion", 1, 744, 1000);
+ message (caster, "success = " + success);
+ IF (success)
+ THEN CALL set_var(MAGIC_FLAGS, 1, MFLAG_MADE_CONC_POTION_SHIFT, 1);
+ CALL gain_xp(4);
+
+
+SPELL lay-on-hands (target : STRING) : "#L10" =
+ LET level = 1
+ school = LIFE
+ IN (MANA 10, CASTTIME 500,
+ REQUIRE hp(caster) > max_hp(caster) / 20,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE if_then_else(failed(pc(target)), 1,
+ (pc(target) <> caster)
+ &&
+ (rdistance(location(caster),
+ location(pc(target))) < 2 + (spellpower / 50))
+ && not (running_status_update(pc(target), SC_HALT_REGENERATE))
+ ))
+ => EFFECT CALL adjust_spellpower(school);
+ IF (not (target)) THEN ABORT;
+ IF failed(pc(target))
+ THEN (IF ((target = "mouboo" || target = "Mouboo")
+ && (rdistance(location(caster), location(npc("Mouboo"))) < 2 + (spellpower / 100)))
+ THEN (needed = 1000;
+ {
+ set @spell, 1;
+ callfunc "QuestMoubooHeal";
+ })
+ ELSE ABORT;
+ )
+ 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;
+ )
+ CALL gain_heal_xp(power, 1, 1, 3);
+ CALL quickheal(target, power);
+ status_change(caster, SC_HALT_REGENERATE, 0, 0, 0, 0, 10000);
+ CALL gain_xp(min(4, payment / 100));
+
+SPELL lightning-strike : "#W10" =
+ LET level = 1
+ school = WAR
+ IN (MANA 20, 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 = spellpower;
+ damage_bonus = 1 + spellpower / 2;
+ CALL install_attack_spell(1 + spellpower / 90,
+ 3000,
+ 8, 31);
+ CALL gain_xp(2);
+ ATTRIGGER CALL attack_check(target);
+ in_rain = 0;
+ area = location(caster);
+ FOREACH SPELL s IN rbox(location(caster), MAX_RAIN_SPELL_RADIUS + 1) DO
+ IF name_of(s) = "rain" THEN (
+ IF is_in (location(caster), s.area)
+ THEN (in_rain = in_rain | 1;
+ area = area + s.area;);
+ IF is_in (location(target), s.area)
+ THEN in_rain = in_rain | 2;
+ );
+ IF in_rain & 1
+ THEN (# caster standing in the rain? This is going to be fun.
+ used = 0;
+ FOREACH TARGET t IN area DO
+ IF (random(200) + luk(caster) > 175)
+ THEN (used = used + 1;
+ CALL elt_damage (t, damage / 6, 1 + (damage_bonus / 3), ELT_EARTH, ELT_WIND, 17 + random(3)););
+ IF (not(used) || (random(200) + luk(caster) < 150))
+ THEN (sfx(caster, 17 + random(3), 0);
+ itemheal(caster, 0 - damage - (random(damage_bonus)), 0););
+ ) ELSE
+ CALL elt_damage (target, damage, damage_bonus, ELT_EARTH, ELT_WIND, 17 + random(3));
+
+LOCAL SPELL arrow-hail : "#W11" =
+ LET level = 1
+ school = WAR
+ IN (MANA 25, CASTTIME 5000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_exterior(location(caster)),
+ (COMPONENTS [20 * "Arrow"] OR COMPONENTS [20 * "IronArrow"]),
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["SulphurPowder"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL abort_on_area_shield(location(caster));
+
+ range = 7;
+ area = rbox(awayfrom(location(caster), dir(caster), 1 + range), range);
+
+ FOREACH SPELL s IN rbox(awayfrom(location(caster), dir(caster), 1 + range), range * 2) DO
+ IF (s <> self_invocation) && (name_of(s) = "arrow-hail")
+ THEN (message (caster, "A nearby arrow hail spell absorbs your magic!");
+ ABORT;)
+
+ damage = 125;
+ damage_bonus = spellpower / 5;
+ CALL gain_xp(2);
+ FOR i = 0 TO spellpower / 8 DO (
+ FOR j = 0 TO 2 DO (
+ location = random_location(area);
+ sfx(location, SFX_ARROW_HAIL, 0);
+ done = 0;
+ FOREACH TARGET target IN rbox(location, 0) DO (
+ injure(caster, target, damage + random(damage_bonus) + random(damage_bonus), 0);
+ done = 1;
+ BREAK;
+ )
+ IF location(caster) = location && not(done)
+ THEN (itemheal(caster, 0 - (damage + random(damage_bonus) + random(damage_bonus)), 0);
+ sfx(caster, SFX_HIT, 0);
+ )
+ );
+ WAIT 250 + random(50) + random(50);
+ );
+
+SPELL magic-knuckles : "#W12" =
+ 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(caster);
+ CALL install_melee_spell(10 + spellpower / 10, 1300, 34);
+ ATTRIGGER CALL melee_damage(target, 30, 5 + (str * 2));
+
+SPELL flying-backpack (target : PC) : "#N10" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 12, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["SilkCocoon"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ 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.");
+ CALL gain_xp(1);
+ ATEND message (target, "Your backpack is no longer levitating.");
+ sfx(target, 2, 0);
+
+SPELL protect (target : PC) : "#N11" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 14, CASTTIME 1500,
+ 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 CALL default_effect();
+ status_change(target, SC_PHYS_SHIELD, 5 + max(15, spellpower / 20), 0, 0, 0, 5000 + (spellpower * 1000));
+ message (target, "You feel more protected.");
+ CALL gain_xp(2);
+ ATEND message (target, "You feel less protected.");
+ sfx(target, 111, 0);
+
+SPELL happy-curse (target : PC) : "#N12" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 13, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["GingerBreadMan"]),
+ REQUIRE rdistance(location(target), location(caster)) < 1 + spellpower / 100)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOR i = 0 TO (spellpower / 10) DO (emote(target, 3); WAIT 500;);
+ CALL gain_xp(1);
+
+LOCAL SPELL rain : "#N13" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 17, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_exterior(location(caster)),
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["BottleOfWater"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL abort_on_area_shield(location(caster));
+ FOREACH SPELL s IN rbox(location(caster), MAX_RAIN_SPELL_RADIUS + 1) DO
+ IF (s <> self_invocation) && (name_of(s) = "rain")
+ THEN (message (caster, "A nearby raincloud absorbs your magic.");
+ ABORT;)
+
+ CALL gain_xp(1);
+ range = min(MAX_RAIN_SPELL_RADIUS, 3 + min(spellpower, 200) / 30);
+ area = rbox(location(caster), range);
+ IF (is_in(location(npc("#DruidTree0#_M")), area)
+ || is_in(location(npc("#DruidTree1#_M")), area))
+ THEN {
+ set @flag, 1;
+ callfunc "QuestTreeTrigger";
+ };
+ FOR i = 0 TO (spellpower / 3) DO (
+ FOR j = 0 TO min(spellpower / 2, 200) / 100 DO (
+ location = random_location(area);
+ sfx(location, SFX_RAIN, 0);
+ FOREACH TARGET target IN rbox(location, 1) DO
+ IF element(target) = ELT_FIRE
+ THEN injure(caster, target, 2 + random(5 + spellpower / 15), 0);
+ )
+ WAIT 400 + random(100);
+ );
+
+PROCEDURE shear-drop(target, target2, item, prob) =
+ IF (target = name || target2 = name)
+ THEN (IF (score < prob)
+ THEN drop_item_for(place, item, 1, 60000, caster, 5000);)
+
+PROCEDURE shear-drop2(target, target2, item, prob, item2, prob2) =
+ IF (target = name || target2 = name)
+ THEN (IF (score < prob)
+ THEN drop_item_for(place, item, 1, 60000, caster, 5000);
+ ELSE CALL shear-drop(target, target2, item2, prob2 + prob);)
+
+PROCEDURE shear-drop3(target, target2, item, prob, item2, prob2, item3, prob3) =
+ IF (target = name || target2 = name)
+ THEN (IF (score < prob)
+ THEN drop_item_for(place, item, 1, 60000, caster, 5000);
+ ELSE CALL shear-drop2(target, target2, item2, prob2 + prob, item3, prob3 + prob);)
+
+
+SPELL shear : "#N14" =
+ LET level = 1
+ school = NATURE
+ IN (MANA 23, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ override_attack (caster, 1, 2000, 1, ATTACK_ICON_SHEARING, 30, 0);
+ ATTRIGGER IF not(is_pc(target))
+ THEN (score = random (1000 - (random (spellpower))); # lower score -> more valuable item
+ name = name_of(target);
+ place = random_location(rbox(location(target), 1));
+ IF running_status_update(target, SC_SHEARED)
+ THEN ABORT;
+ status_change(target, SC_SHEARED, 1, 1, 1, 1, 600000); # 10 minutes
+ CALL shear-drop("Fluffy", "Fluffy", "WhiteFur", 300);
+ CALL shear-drop("EasterFluffy", "Easter Fluffy", "WhiteFur", 300);
+ CALL shear-drop("SpikyMushroom", "Spiky Mushroom", "HardSpike", 250);
+ CALL shear-drop("Mouboo", "Mouboo", "CottonCloth", 175);
+ CALL shear-drop("Cobalt", "CobaltPlant", "CobaltHerb", 700);
+ CALL shear-drop("Alizarin", "AlizarinPlant", "AlizarinHerb", 700);
+ CALL shear-drop("Gamboge", "GambogePlant", "GambogeHerb", 700);
+ CALL shear-drop("Mauve", "MauvePlant", "MauveHerb", 700);
+ CALL shear-drop("SilkWorm", "Silkworm", "SilkCocoon", 300);
+ IF ((name = "Fluffy" || name = "Mouboo") && random(2))
+ THEN { set @value, 1; callfunc "QuestSagathaHappy"; };
+ )
+
+
+
+SPELL barrier (target : PC) : "#A10" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 16, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["SmallMushroom"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, SFX_BARRIER, 0);
+ IF (caster <> target)
+ THEN CALL default_effect();
+ status_change(target, SC_MBARRIER, 20 + max(30, spellpower / 8), 0, 0, 0, 2000 + (spellpower * 200));
+ message (target, "You are surrounded by a magical barrier.");
+ CALL gain_xp(3);
+ ATEND message (target, "Your magical barrier dissipates.");
+ sfx(target, SFX_UNBARRIER, 0);
+
+
+LOCAL SPELL summon-spiky-mushrooms : "#A11" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 33, CASTTIME 20000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["HardSpike", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ CALL summon_spell(1019, 1 + spellpower / 120, 5000 - (spellpower * 9), spellpower * 400, 2);
+
+LOCAL SPELL summon-fluffies : "#A12" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 39, CASTTIME 20000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ COMPONENTS ["WhiteFur", "Root"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ CALL gain_xp(1);
+ CALL summon_spell(1020, 1 + spellpower / 170 + spellpower / 430, 5000 - (spellpower * 8), spellpower * 350, 3);
+
+
+SPELL detect-players : "#G10" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 7, CASTTIME 300,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ message = "";
+ FOREACH PC target IN rbox(location(caster), spellpower / 2)
+ DO IF ((target <> caster)
+ && not (running_status_update(pc(target), SC_HIDE))
+ && not (status_option(target, SO_GMINVISIBLE)))
+ 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 reveal : "#G11" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 18, CASTTIME 3000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ FOREACH PC target IN rbox(location(caster), 1 + spellpower / 100)
+ DO IF has_shroud(target) && level(caster) * 2 > level(target)
+ THEN (unshroud(target);
+ sfx(target, SFX_DEFAULT, 500);)
+
+
+SPELL enchant-lifestone : "#G12" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 15, CASTTIME 4000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (COMPONENTS["BugLeg"] OR COMPONENTS ["MaggotSlime"]
+ OR COMPONENTS ["MauveHerb", "AlizarinHerb", "CobaltHerb", "GambogeHerb"]))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ create_item(caster, "Lifestone", 1);
+ CALL gain_xp(1);
+
+SPELL sense-spouse : "#G13" =
+ LET level = 1
+ school = MAGIC
+ IN (MANA 7, CASTTIME 400,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_married(caster),
+ REQUIRE is_equipped(caster, "WeddingRing"))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF (failed(partner(caster)) || not(is_equipped(partner(caster), "WeddingRing")))
+ THEN (message(caster, "You cannot sense your partner.");
+ ABORT;)
+ partner = partner(caster);
+ name = name_of(partner);
+ IF (is_dead(partner) || (map_nr(location(partner)) <> map_nr(location(caster))))
+ THEN (message(caster, "You cannot sense " + name + " nearby.");
+ ABORT;)
+ IF (map_level(location(partner)) > 2 && map_level(location(caster)) < map_level(location(partner)))
+ THEN (message(caster, "You sense " + name + " somewhere below.");
+ ABORT;)
+ IF (map_level(location(caster)) > 2 && map_level(location(partner)) < map_level(location(caster)))
+ THEN (message(caster, "You sense " + name + " somewhere above.");
+ ABORT;)
+ IF (map_level(location(caster)) <> map_level(location(partner)))
+ THEN message(caster, "You sense " + name + " somewhere in the vincinity.");
+ ELSE (distance = rdistance(location(caster), location(partner));
+ dir = dir_towards(location(caster), location(partner), 1);
+ IF (distance < 3)
+ THEN message(caster, "You sense " + name + " right next to you.");
+ ELSE IF (distance < 30)
+ THEN message(caster, "You sense " + name + " close by, towards the " + dir + ".");
+ ELSE IF (distance < 200)
+ THEN message(caster, "You sense " + name + " nearby, towards the " + dir + ".");
+ ELSE message(caster, "You sense " + name + " in the " + dir + ".");
+ )
+
+SPELL hide (target : PC) : "#A13" =
+ LET level = 1
+ school = ASTRAL
+ IN (MANA 11, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ (REQUIRE skill(caster, school) > 3 OR COMPONENTS ["CottonCloth"]),
+ REQUIRE rdistance(location(target), location(caster)) < 2 + spellpower / 30)
+ => EFFECT CALL adjust_spellpower(school);
+ sfx(target, SFX_DEFAULT, 0);
+ IF (caster <> target)
+ THEN CALL default_effect();
+ status_change(target, SC_HIDE, 0, 0, 0, 0, 5000 + (spellpower * 2500));
+ CALL gain_xp(2);
+ message(target, "You are hidden!");
+ IF (caster <> target) THEN message(caster, "You hid someone!");
+ ATEND message(target, "You are no longer hidden.");
+
+#--------------------------------------------------------------------------------
+# Level 2 spells
+#--------------------------------------------------------------------------------
+
+SPELL cure-poison (target : PC) : "#L20" =
+ LET level = 2
+ school = LIFE
+ IN (MANA 15, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE (rdistance(location(caster),
+ location(pc(target))) < 1 + (spellpower / 60)),
+ COMPONENTS ["GambogeHerb"])
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ IF (running_status_update (target, SC_POISON))
+ THEN (CALL gain_heal_xp(40, 1, 2, 2);
+ stop_status_change (target, SC_POISON);
+ CALL gain_xp(2);
+ IF caster <> target
+ THEN sfx(target, SFX_HEAL, 0););
+
+
+SPELL fire-ball : "#W22" =
+ LET level = 2
+ school = WAR
+ IN (MANA 30, CASTTIME 1000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ 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 summon-partner : "#A23" =
+ LET level = 2
+ school = ASTRAL
+ IN (MANA 30, CASTTIME 2000,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level,
+ REQUIRE is_married(caster),
+ REQUIRE is_equipped(caster, "WeddingRing"))
+ => EFFECT CALL adjust_spellpower(school);
+ CALL default_effect();
+ 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 IF (is_dead (partner (caster)))
+ THEN message (caster, "Something seems to have happened to " + (name_of(partner(caster))) + ".");
+ 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 : "#N40" =
+ LET level = 4
+ school = NATURE
+ IN (MANA 40, CASTTIME 400,
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL default_effect();
+ shroud(caster, 0x04);
+
+SPELL teleport (destination : STRING) : "#A40" =
+ LET level = 4
+ school = ASTRAL
+ IN (MANA 80, CASTTIME 400,
+ # COMPONENT ["EtherEssence"],
+ # CATALYST ["TeleportCrystal"],
+ REQUIRE skill(caster, MAGIC) > level,
+ REQUIRE skill(caster, school) > level)
+ => EFFECT CALL default_effect();
+ WAIT 1000 + (200000 / (spellpower + 10));
+ sfx(location(caster), SFX_TELEPORT, 200);
+ warp(caster, random_location(anchor(destination)));
+ sfx(caster, SFX_TELEPORT, 200);
+
+#--------------------------------------------------------------------------------
+# Debug keywords
+#--------------------------------------------------------------------------------
+
+SPELL debug : "debug" =
+ REQUIRE DEBUG
+ => EFFECT message (caster, "FLAGS: "
+ + "drank=" + ((script_int(caster, "MAGIC_FLAGS") & 1) > 0) + ", "
+ + "Kmseed=" + ((script_int(caster, "MAGIC_FLAGS") & 2) > 0) + ", "
+ + "touched-mseed=" + ((script_int(caster, "MAGIC_FLAGS") & 4) > 0) + ", "
+ + "mseed-max=" + ((script_int(caster, "MAGIC_FLAGS") & 8) > 0) + ", "
+ + "Kauldsbel=" + ((script_int(caster, "MAGIC_FLAGS") & 16) > 0) + ", "
+ + "Kwyara=" + ((script_int(caster, "MAGIC_FLAGS") & 32) > 0) + ", "
+ + "Ksagatha=" + ((script_int(caster, "MAGIC_FLAGS") & 64) > 0) + ", "
+ + "Kmpotion=" + ((script_int(caster, "MAGIC_FLAGS") & 128) > 0) + ", "
+ + "mseed-rumour=" + ((script_int(caster, "MAGIC_FLAGS") & 256) > 0) + ", "
+ + "Kcuttree=" + ((script_int(caster, "MAGIC_FLAGS") & 512) > 0) + ", "
+ + "cut=" + ((script_int(caster, "MAGIC_FLAGS") & 1024) > 0) + ", "
+ + "Kdruidtree=" + ((script_int(caster, "MAGIC_FLAGS") & 2048) > 0) + ", "
+ + "Kimp=" + ((script_int(caster, "MAGIC_FLAGS") & 4096) > 0) + ", "
+ + "Koldwiz=" + ((script_int(caster, "MAGIC_FLAGS") & 8192) > 0) + ", "
+ + "made-conc=" + ((script_int(caster, "MAGIC_FLAGS") & 16384) > 0) + ", "
+ + "elanore-omar=" + ((script_int(caster, "MAGIC_FLAGS") & 32768) > 0));
+ message (caster, "EXP: " + (script_int(caster, "MAGIC_EXPERIENCE") & 0xffff)
+ + ", lastspell=" + ((script_int(caster, "MAGIC_EXPERIENCE") >> 16) & 0xff)
+ + ", healexp=" + ((script_int(caster, "MAGIC_EXPERIENCE") >> 24) & 0xff));
+ message (caster, "STATUS: "
+ + "auldsbel:" + (script_int(caster, "QUEST_MAGIC") & 0x1f) + "," + ((script_int(caster, "QUEST_MAGIC") >> 5) & 0x7) + ", "
+ + "dt/mb:" + ((script_int(caster, "QUEST_MAGIC") >> 8) & 0xf) + ", "
+ + "s-unhappy:" + ((script_int(caster, "QUEST_MAGIC") >> 12) & 0xf) + ", "
+ + "sagatha:" + ((script_int(caster, "QUEST_MAGIC") >> 16) & 0xff) + ", "
+ + "swords:" + ((script_int(caster, "QUEST_MAGIC") >> 24) & 0xff) + ", "
+ + "imp:" + ((script_int(caster, "QUEST_MAGIC2") >> 0) & 0xf) + ", "
+ + "elanore:" + ((script_int(caster, "QUEST_MAGIC2") >> 4) & 0xf) + ", "
+ + "elanore-sub:" + ((script_int(caster, "QUEST_MAGIC2") >> 12) & 0xf) + ", "
+ + "wyara:" + ((script_int(caster, "QUEST_MAGIC2") >> 8) & 0xf));
+
+PROCEDURE debug_xmod(name, mask, shift, gain) =
+ value = ((script_int(caster, name) >> shift) & mask) + gain;
+ IF (value < 0)
+ THEN value = 0;
+ IF (value > mask)
+ THEN value = mask;
+ CALL set_var(name, mask, shift, value);
+
+PROCEDURE debug_mod(name, delta) =
+ IF (name = "mexp") THEN CALL debug_xmod("MAGIC_EXPERIENCE", 0xffff, 0, delta);
+ ELSE IF (name = "lastspell") THEN CALL debug_xmod("MAGIC_EXPERIENCE", 0xff, 16, delta);
+ ELSE IF (name = "healexp") THEN CALL debug_xmod("MAGIC_EXPERIENCE", 0xff, 24, delta);
+ ELSE IF (name = "drank") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 0, delta);
+ ELSE IF (name = "Kmseed") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 1, delta);
+ ELSE IF (name = "touched-mseed") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 2, delta);
+ ELSE IF (name = "mseed-max") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 3, delta);
+ ELSE IF (name = "Kauldsbel") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 4, delta);
+ ELSE IF (name = "Kwyara") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 5, delta);
+ ELSE IF (name = "Ksagatha") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 6, delta);
+ ELSE IF (name = "Kmpotion") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 7, delta);
+ ELSE IF (name = "mseed-rumour") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 8, delta);
+ ELSE IF (name = "Kcuttree") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 9, delta);
+ ELSE IF (name = "cut") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 10, delta);
+ ELSE IF (name = "Kdruidtree") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 11, delta);
+ ELSE IF (name = "Kimp") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 12, delta);
+ ELSE IF (name = "oldwiz") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 13, delta);
+ ELSE IF (name = "made-conc") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 14, delta);
+ ELSE IF (name = "elanore-omar") THEN CALL debug_xmod("MAGIC_FLAGS", 0x1, 15, delta);
+ ELSE IF (name = "auldsbel") THEN CALL debug_xmod("QUEST_MAGIC", 0x1f, 0, delta);
+ ELSE IF (name = "Qauldsbel") THEN CALL debug_xmod("QUEST_MAGIC", 0x7, 5, delta);
+ ELSE IF (name = "dt") THEN CALL debug_xmod("QUEST_MAGIC", 0x3, 10, delta);
+ ELSE IF (name = "mb") THEN CALL debug_xmod("QUEST_MAGIC", 0x3, 8, delta);
+ ELSE IF (name = "s-unhappy") THEN CALL debug_xmod("QUEST_MAGIC", 0xff, 12, delta);
+ ELSE IF (name = "sagatha") THEN CALL debug_xmod("QUEST_MAGIC", 0xff, 16, delta);
+ ELSE IF (name = "swords") THEN CALL debug_xmod("QUEST_MAGIC", 0xff, 24, delta);
+ ELSE IF (name = "imp") THEN CALL debug_xmod("QUEST_MAGIC2", 0xf, 0, delta);
+ ELSE IF (name = "elanore") THEN CALL debug_xmod("QUEST_MAGIC2", 0xf, 4, delta);
+ ELSE IF (name = "wyara") THEN CALL debug_xmod("QUEST_MAGIC2", 0xf, 8, delta);
+ ELSE IF (name = "elanore-sub") THEN CALL debug_xmod("QUEST_MAGIC2", 0xf, 12, delta);
+ ELSE message(caster, "Unknown");
+
+SPELL debug-up1 (name : STRING) : "debug+1" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 1);
+
+SPELL debug-down1 (name : STRING) : "debug-1" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 0 - 1);
+
+SPELL debug-up16 (name : STRING) : "debug+16" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 16);
+
+SPELL debug-down16 (name : STRING) : "debug-16" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 0 - 16);
+
+SPELL debug-up256 (name : STRING) : "debug+256" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 256);
+
+SPELL debug-down256 (name : STRING) : "debug-256" =
+ REQUIRE DEBUG
+ => EFFECT CALL debug_mod(name, 0 - 256);
+
+SPELL debug-reset : "debug-reset" =
+ REQUIRE DEBUG
+ => EFFECT set_script_variable(caster, "QUEST_MAGIC", 0);
+ set_script_variable(caster, "QUEST_MAGIC2", 0);
+ set_script_variable(caster, "MAGIC_FLAGS", 0);
+ set_script_variable(caster, "MAGIC_EXP", 0);
+
+
+#--------------------------------------------------------------------------------
+# Special-purpose quasispells
+#--------------------------------------------------------------------------------
+
+CONST MIN_MARRY_LEVEL = 32;
+
+NONMAGIC SILENT SPELL marriage (target : PC) : "marry" =
+ (REQUIRE (is_in(location(caster), @("014-1.gat", 28,39) @+ (8, 6)) || is_in(location(caster), @("021-2.gat", 20,25) @+ (4, 4)) ))=>
+ 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 need 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;
+ close;
+ }
+
+ 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);))
+
+
+LOCAL SPELL mouboo-groan : "#g" =
+ (MANA 1,
+ REQUIRE name_of(caster) = "MOUBOOTAUR") =>
+ EFFECT FOREACH PC p IN rbox(location(caster), 200) DO
+ distance = rdistance(location(caster), location(p));
+ IF (distance < 15)
+ THEN message(p, "The moubootaur's groaning rings in your ears!");
+ ELSE IF (distance < 70)
+ THEN message(p, "You hear a loud groaning noise, not far away...");
+ ELSE message(p, "You hear an odd groaning noise in the distance...");
+
+
+LOCAL SPELL mouboo-smell : "#s" =
+ (MANA 1,
+ REQUIRE name_of(caster) = "MOUBOOTAUR") =>
+ EFFECT WAIT 30000;
+ FOREACH PC p IN rbox(location(caster), 30) DO
+ message(p, "You notice a strange smell all around you.");
+
+
+CONST E10_FLAG_USED_FREE_WARP_SHIFT = 17
+
+#NONMAGIC SILENT SPELL easter (type : STRING) : "#m" =
+# (REQUIRE name_of(caster) == "Freeyorp") =>
+# EFFECT IF (type == "EE_RF") THEN (
+# {
+# doevent("Old Woman::OnReplenish");
+# }
+# ) ELSE IF (type == "EE_SUS") THEN (
+# {
+# doevent "Old Woman::OnManualStopTimer";
+# }
+# ) ELSE IF (type == "EE_INIT") THEN (
+# {
+# doevent "Old Woman::OnManualStartTimer";
+# }
+# ) ELSE IF (type == "BLOCKER_DISABLE") THEN (
+# {
+# set $Easter_2010_Npc_State2, ($Easter_2010_Npc_State2 & ~(E10_BARRIER_MASK << E10_BARRIER_SHIFT)) | (E10_BARRIER_OPEN << E10_BARRIER_SHIFT);
+# }
+# ) ELSE IF (type == "BLOCKER_ENABLE") THEN (
+# {
+# set $Easter_2010_Npc_State2, ($Easter_2010_Npc_State2 & ~(E10_BARRIER_MASK << E10_BARRIER_SHIFT)) | (E10_BARRIER_ACTIVE << E10_BARRIER_SHIFT);
+# }
+# ) ELSE message(caster, "Unknown action '" + type + "'!");
+
+# Invader spells
+
+#NONMAGIC SILENT SPELL easter-invader-init : "#i" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT warp(caster, @("028-1.gat", 139, 46));
+# {
+# gmcommand "@blvl -255";
+# gmcommand "@blvl 199";
+# gmcommand "@setmagic all 5 Xakelbael the Dark";
+# gmcommand "@allstats";
+# savepoint "028-1.gat", 130, 46;
+# }
+# create_item(caster, "DarkTalisman", 1);
+
+#NONMAGIC SILENT SPELL easter-invader-hide : "#h" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT { if (checkoption(4096)) goto L_toggle;
+# setoption(4096);
+# end;
+# L_toggle:
+# setoption(0);
+# end; };
+# warp(caster, location(caster));
+
+#NONMAGIC SILENT SPELL easter-invader-warp-taunt : "#o" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT warp(caster, @("009-1.gat", 48, 35));
+# WAIT 80;
+# sfx(caster, 32, 0);
+# WAIT 80;
+# FOREACH PC p IN rbox(location(caster), 50)
+# DO IF (p <> caster) THEN (
+# message(p, "A powerful explosion " + if_then_else(distance(location(caster), location(p)) < 10, "right around you nearly deafens you!", if_then_else(distance(location(caster), location(p)) < 30, "nearby shocks you!", "in the distance erupts... you're not sure of the source, but it will be something big...")));
+# itemheal(p, -1 - random(hp(p)), 0-(random(sp(p) >> 2)));
+# )
+# WAIT 1000;
+# FOREACH PC p IN rbox(location(caster), 15)
+# DO (
+# message(p, "As the smoke clears, you hear a distant, sickly laughing ringing in your ears...");
+# )
+
+#NONMAGIC SILENT SPELL easter-invader-warp-taunt-explosion : "#q" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT sfx(caster, 32, 0);
+# WAIT 100;
+# sfx(caster, 31, 0);
+# WAIT 30;
+# sfx(caster, 30, 0);
+# WAIT 30;
+# sfx(caster, 30, 0);
+# WAIT 20;
+# sfx(caster, 30, 0);
+# WAIT 10;
+# sfx(caster, 30, 0);
+# WAIT 10;
+
+#NONMAGIC SILENT SPELL easter-invader-warp-taunt-end : "#p" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT FOREACH PC p IN rbox(location(caster), 50) DO IF (p <> caster)
+# THEN ( script_target = p;
+# { gmcommand "@jump"; }
+# message(p, "A powerful force sends you flying!");
+# )
+# warp(caster, @("028-1.gat", 130, 46));
+
+
+#NONMAGIC SILENT SPELL easter-invader-attack-pulse : "#a" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT IF (script_int(caster, "InvState") == 1) THEN ( set_script_variable(caster, "InvState", 0); ABORT; );
+# set_script_variable(caster, "InvState", 1);
+# FOR i = 1 TO 500
+# DO ( sfx(caster, 31, 0);
+# WAIT 80;
+# FOREACH PC p IN rbox(location(caster), 4)
+# DO IF (p <> caster) THEN ( injure(caster, p, 30 - random(random(25)) - random(5) + random(i), 0); )
+# WAIT 420;
+# IF (script_int(caster, "InvState") == 0) THEN ABORT;
+# )
+# set_script_variable(caster, "InvState", 0);
+
+#NONMAGIC SILENT SPELL easter-invader-command : "#d" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT override_attack(caster, 3, ((200 - agi(caster)) * 5000) / 200,
+# 8, ATTACK_ICON_GENERIC, 31, 0);
+# ATTRIGGER CALL attack_check(target);
+# area = rbox(location(target), 8);
+# FOREACH MOB m IN area
+# DO (message(caster, "Class Id: " + mob_id(m));
+# IF (mob_id(m) = 1040 || mob_id(m) == 1042 || mob_id(m) == 1047) THEN (
+# CALL sfx_generic(m);
+# aggravate(m, 0, target);
+# )
+# )
+
+#NONMAGIC SILENT SPELL easter-invader-spike : "#w" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT FOR i = 1 TO 40
+# DO ( point = random_location(rbox(location(caster), sqrt(i) << 1));
+# IF (random(3))
+# THEN (sfx(point, 32, 0);
+# WAIT 50;
+# FOREACH PC p IN rbox(point, sqrt(i) >> 1)
+# DO IF (p <> caster)
+# THEN (injure(caster, p, i + random(i << 1), random(random(i)));)
+# ) ELSE (sfx(point, 31, 0);
+# WAIT 50;
+# FOREACH PC p IN rbox(point, sqrt(i))
+# DO IF (p <> caster)
+# THEN (injure(caster, p, i + random(i << 2), random(random(i)));)
+# )
+# WAIT 400 - (i << 3);
+# )
+
+#NONMAGIC SILENT SPELL easter-invader-jump (t : STRING) : "#j" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT IF not (status_option(caster, 4096)) THEN ( sfx(caster, 33, 0);
+# WAIT 200; );
+# IF (t == "r") THEN ( warp(caster, @("028-1.gat", 129, 46)); )
+# ELSE IF (t == "s") THEN ( warp(caster, @("028-1.gat", 69, 96)); )
+# ELSE IF (t == "c") THEN ( warp(caster, @("028-3.gat", 50, 58)); )
+# ELSE IF (t == "t") THEN ( warp(caster, @("009-1.gat", 48, 35)); )
+# ELSE { gmcommand "@jump"; };
+
+#NONMAGIC SILENT SPELL easter-invader-taunt-local (s : STRING) : "#l" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT FOREACH PC p IN rbox(location(caster), 20) DO message(p, s);
+
+#NONMAGIC SILENT SPELL easter-invader-taunt-global (s : STRING) : "#b" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT FOREACH PC p IN rbox(location(caster), 100) DO message(p, s);
+
+#NONMAGIC SILENT SPELL easter-invader-spawn : "#c" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT spawn(rbox(location(caster), 20), caster, 1040, random(random(5)), 1, 100000);
+# spawn(rbox(location(caster), 20), caster, 1042, random(random(5)), 1, 100000);
+# spawn(rbox(location(caster), 20), caster, 1047, random(random(5)), 1, 100000);
+
+NONMAGIC SILENT SPELL world-shift : "#S00" =
+ (REQUIRE (script_int(caster, "Easter_2010_QuestState") >> 16) & 1 == 1 && (script_int(caster, "Easter_2010_QuestState") >> 7) & 3 == 2) => # Travel only works when you have both helped the doctor at least thrice and have defeated the invader - top level requirement.
+ ( (REQUIRE count_item(caster, "DarkPetal")) # Allow unlimited travel with the petal
+ => ((REQUIRE rdistance(location(caster), @("028-1.gat", 63, 67)) < 5) =>
+ EFFECT sfx(location(caster), SFX_TELEPORT, 200);
+ WAIT 8000;
+ { savepoint "009-1", 52, 39; };
+ warp(caster, @("009-1.gat", 55, 37));
+ sfx(location(caster), SFX_TELEPORT, 200);
+ |
+ (REQUIRE map_nr(location(caster)) != 28) =>
+ EFFECT inithp = hp(caster); // Store this value.
+ sfx(location(caster), SFX_TELEPORT, 200);
+ IF (map_nr(location(caster)) == 9 || map_nr(location(caster)) == 1 || map_nr(location(caster)) == 21 || map_nr(location(caster)) == 20) THEN WAIT 8000;
+ ELSE WAIT 20000;
+ IF (hp(caster) < inithp) THEN ABORT; // Cancel teleport if the player took damage during channel time (hacky, but for most purposes should work.)
+ { savepoint "028-1", 63, 68; };
+ warp(caster, @("028-1.gat", 63, 67));
+ sfx(location(caster), SFX_TELEPORT, 200);
+ )
+ | (REQUIRE (rdistance(location(caster), @("028-1.gat", 63, 67)) < 5 )
+ => EFFECT set_script_variable(caster, "Easter_2010_QuestState", script_int(caster, "Easter_2010_QuestState") | (1 << 17));
+ sfx(location(caster), SFX_TELEPORT, 200);
+ WAIT 8000;
+ { savepoint "009-1", 52, 39; };
+ warp(caster, @("009-1.gat", 55, 37));
+ sfx(location(caster), SFX_TELEPORT, 200);
+ | (REQUIRE map_nr(location(caster)) != 28 && (script_int(caster, "Easter_2010_QuestState") >> 17) & 1 == 0) # Allow for one free warp home without the petal
+ => EFFECT inithp = hp(caster); // Store this value.
+ sfx(location(caster), SFX_TELEPORT, 200);
+ IF (map_nr(location(caster)) == 9 || map_nr(location(caster)) == 1 || map_nr(location(caster)) == 21 || map_nr(location(caster)) == 20) THEN WAIT 8000;
+ ELSE WAIT 20000;
+ IF (hp(caster) < inithp) THEN ABORT; // Cancel teleport if the player took damage during channel time (hacky, but for most purposes should work.)
+ set_script_variable(caster, "Easter_2010_QuestState", script_int(caster, "Easter_2010_QuestState") | (1 << 17));
+ { savepoint "028-1", 63, 68; };
+ warp(caster, @("028-1.gat", 63, 67));
+ sfx(location(caster), SFX_TELEPORT, 200);
+ )
+ )
+
+#NONMAGIC SILENT SPELL easter-invader-killer : "#z" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT { gmcommand "@killer"; }
+
+#NONMAGIC SILENT SPELL easter-invader-killable : "#x" =
+# (REQUIRE name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT { gmcommand "@killable"; }
+
+#NONMAGIC SILENT SPELL easter-debug-reset (s : STRING) : "#r" =
+# (REQUIRE name_of(caster) == "Freeyorp") =>
+# EFFECT set_script_variable(pc(s), "Easter_2010_QuestState", 0);
+
+#NONMAGIC SILENT SPELL easter-set-flag (s : PC) : "#k" =
+# (REQUIRE name_of(caster) == "Freeyorp" || name_of(caster) == "Xakelbael the Dark") =>
+# EFFECT IF (s == caster) THEN ABORT;
+# IF ((script_int(s, "Easter_2010_QuestState") >> 16) & 1) THEN ( message(caster, s + " already has the flag set!"); ABORT; )
+# script_target = s;
+# { set Easter_2010_QuestState, Easter_2010_QuestState | (1 << 16); // RETURN_READY flag
+# mes "As the smoke clears, you feel stronger, vivified.";
+# next;
+# mes "The world seems more vibrant. It looks the same as ever, but you get a sense of something more.";
+# next;
+# mes "You feel something familiar.";
+# next;
+# mes "This sensation... could it be home?";
+# next;
+# mes "A single word comes to your mind - " + getspellinvocation("world-shift") + ". While it sounds magical, you know with certainty that you will not need any magical power to use it.";
+# next;
+# mes "Could this be the way to move to and from the worlds? Either way, the dark petal the rose vanished into seems to be the key.";
+# next;
+# mes "Though you might be able to succeed in one trip without it, returning home.";
+# if ((Easter_2010_QuestState >> E10_STATE_ROSE_SHIFT) & E10_STATE_ROSE_MASK == E10_STATE_ROSE_ROSE_COMPLETE) close;
+# next;
+# mes "But the world is still not quite right. Perhaps there is someone you should help before the world releases its hold on you?";
+# close;
+# }
+
+NONMAGIC SILENT SPELL easter-get-debug (p : PC) : "#e" =
+ (REQUIRE name_of(caster) == "Freeyorp" || name_of(caster) == "Xakelbael the Dark") =>
+ EFFECT { message strcharinfo(0), "Global state egg1: " + $Easter_2010_Egg_Loc_State1;
+ message strcharinfo(0), "Global state egg2: " + $Easter_2010_Egg_Loc_State2;
+ message strcharinfo(0), "Global state egg3: " + $Easter_2010_Egg_Loc_State3;
+ message strcharinfo(0), "Global state egg4: " + $Easter_2010_Egg_Loc_State4;
+ message strcharinfo(0), "Global state egg5: " + $Easter_2010_Egg_Loc_State5;
+ message strcharinfo(0), "Global npc state1: " + $Easter_2010_Npc_State1;
+ message strcharinfo(0), "Global npc state2: " + $Easter_2010_Npc_State2;
+ };
+ message(caster, "Local state egg1: " + script_int(p, "Easter_2010_EggState1"));
+ message(caster, "Local state egg2: " + script_int(p, "Easter_2010_EggState2"));
+ message(caster, "Local state egg3: " + script_int(p, "Easter_2010_EggState3"));
+ message(caster, "Local state egg4: " + script_int(p, "Easter_2010_EggState4"));
+ message(caster, "Local state egg5: " + script_int(p, "Easter_2010_EggState5"));
+ message(caster, "Local state quest: " + script_int(p, "Easter_2010_QuestState"));
+
+
+
+
+PROCEDURE hug_tree(target) =
+ IF (target = ""
+ || target = "tree" || target = "tree*"
+ || target = "Tree" || target = "Tree*"
+ || target = "druid" || target = "druid*"
+ || target = "Druid" || target = "Druid*")
+ THEN {
+ set @flag, 2;
+ callfunc "QuestTreeTrigger";
+ };
+
+NONMAGIC SPELL hug0 (target : STRING) : "hug" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug1 (target : STRING) : "*hug*" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug2 (target : STRING) : "*hug" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug3 (target : STRING) : "hugs" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug4 (target : STRING) : "*hugs*" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+NONMAGIC SPELL hug5 (target : STRING) : "*hugs" = REQUIRE ((rdistance(location(caster), location(npc("#DruidTree0#_M"))) <= 1
+ || rdistance(location(caster), location(npc("#DruidTree1#_M"))) <= 1))
+ => EFFECT CALL hug_tree(target);
+
+
+#--------------------------------------------------------------------------------
+# Teleport anchors
+#--------------------------------------------------------------------------------
+
+TELEPORT-ANCHOR tulimshar : "tulimshar" = @("001-1.gat", 43, 66) @+ (3, 3);
+TELEPORT-ANCHOR hurnscald : "hurnscald" = @("009-1.gat", 55, 37) @+ (3, 3);
+TELEPORT-ANCHOR nivalis : "nivalis" = @("020-1.gat", 75, 63) @+ (19, 12);
+TELEPORT-ANCHOR wizardhut : "##00" = @("013-1.gat", 41, 92) @+ (3, 3);
+TELEPORT-ANCHOR pachua : "##01" = @("006-1.gat", 22, 101) @+ (3, 3);
+TELEPORT-ANCHOR desert : "##02" = @("005-1.gat", 160, 64) @+ (5, 5);
+TELEPORT-ANCHOR forest : "##03" = @("015-1.gat", 35, 35) @+ (40, 40);
+TELEPORT-ANCHOR snakecave : "##04" = @("011-4.gat", 50, 75) @+ (3, 3);
+TELEPORT-ANCHOR dimondscove : "##05" = @("010-2.gat", 23, 79) @+ (3, 3);
+
+
diff --git a/conf/map_athena.conf b/conf/map_athena.conf
new file mode 100644
index 00000000..cade6729
--- /dev/null
+++ b/conf/map_athena.conf
@@ -0,0 +1,19 @@
+// eAthena Map-Server Configuration File
+
+// 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: npc/scripts.conf
+
+gm_log: gm/gm.log
+
+// local settings for this server in this file
+import: conf/map_local.conf
diff --git a/conf/map_local.conf.example b/conf/map_local.conf.example
new file mode 100644
index 00000000..0f09bf59
--- /dev/null
+++ b/conf/map_local.conf.example
@@ -0,0 +1,15 @@
+// eAthena Map-Server local 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
diff --git a/conf/motd.txt.example b/conf/motd.txt.example
new file mode 100644
index 00000000..f570494c
--- /dev/null
+++ b/conf/motd.txt.example
@@ -0,0 +1 @@
+Welcome to The Mana World! (running on eAthena)
diff --git a/conf/msg_athena.conf b/conf/msg_athena.conf
new file mode 100644
index 00000000..313d22b7
--- /dev/null
+++ b/conf/msg_athena.conf
@@ -0,0 +1,528 @@
+// eAthena msg_athena.conf
+// Message Configuration
+// For translation, just change msg here (second line), no need to modify source code.
+// Format:
+// // English message
+// msg_number: translated message
+
+// 0-499: reserved for GM commands
+// 500-999 reserved for others
+
+// Messages of GM commands
+// -----------------------
+
+//0: Warped.
+0: Warped.
+//1: Map not found.
+1: Map not found.
+//2: Coordinates out of range.
+2: Coordinates out of range.
+//3: Character not found.
+3: Character not found.
+//4: Jump to %s
+4: Jump to %s
+//5: Jump to %d %d
+5: Jump to %d %d
+//6: Character data respawn point saved.
+6: Character data respawn point saved.
+//7: Warping to respawn point.
+7: Warping to respawn point.
+//8: Speed changed.
+8: Speed changed.
+//9: Options changed.
+9: Options changed.
+//10: Invisible: Off.
+10: Invisible: Off.
+//11: Invisible: On.
+11: Invisible: On.
+//12: Your job has been changed.
+12: Your job has been changed.
+//13: A pity! You've died.
+13: A pity! You've died.
+//14: Character killed.
+14: Character killed.
+//15: Player warped (message sends to player too).
+15: Player warped (message sends to player too).
+//16: You've been revived! It's a miracle!
+16: You've been revived! It's a miracle!
+//17: HP, SP recovered.
+17: HP, SP recovered.
+//18: Item created.
+18: Item created.
+//19: Invalid item ID or name.
+19: Invalid item ID or name.
+//20: All of your items have been removed.
+20: All of your items have been removed.
+//21: Base level raised.
+21: Base level raised.
+//22: Base level lowered.
+22: Base level lowered.
+//23: Job level can't go any higher.
+23: Job level can't go any higher.
+//24: Job level raised.
+24: Job level raised.
+//25: Job level lowered.
+25: Job level lowered.
+//26: Help commands:
+26: Help commands:
+//27: File help.txt not found.
+27: File help.txt not found.
+//28: No player found.
+28: No player found.
+//29: 1 player found.
+29: 1 player found.
+//30: %d players found.
+30: %d players found.
+//31: PvP: Off.
+31: PvP: Off.
+//32: PvP: On.
+32: PvP: On.
+//33: GvG: Off.
+33: GvG: Off.
+//34: GvG: On.
+34: GvG: On.
+//35: You can't use this command with this class.
+35: You can't use this command with this class.
+//36: Appearence changed.
+36: Appearence changed.
+//37: An invalid number was specified.
+37: An invalid number was specified.
+//38: Invalid location number or name.
+38: Invalid location number or name.
+//39: All monster summoned!
+39: All monster summoned!
+//40: Invalid monster ID or name.
+40: Invalid monster ID or name.
+//41: Impossible to decrease the number/value.
+41: Impossible to decrease the number/value.
+//42: Stat changed.
+42: Stat changed.
+//43: You're not in a guild.
+43: You're not in a guild.
+//44: You're not the master of your guild.
+44: You're not the master of your guild.
+//45: Guild level change failed.
+45: Guild level change failed.
+//46: %s recalled!
+46: %s recalled!
+//47: Base level can't go any higher.
+47: Base level can't go any higher.
+//48: Character's job changed.
+48: Character's job changed.
+//49: Invalid job ID.
+49: Invalid job ID.
+//50: You already have some GM powers.
+50: You already have some GM powers.
+//51: Character revived.
+51: Character revived.
+//52: This option cannot be used in PK Mode.
+52: This option cannot be used in PK Mode.
+//53: '%s' stats:
+53: '%s' stats:
+//54: No player found in map '%s'.
+54: No player found in map '%s'.
+//55: 1 player found in map '%s'.
+55: 1 player found in map '%s'.
+//56: %d players found in map '%s'.
+56: %d players found in map '%s'.
+//57: Character's respawn point changed.
+57: Character's respawn point changed.
+//58: Character's options changed.
+58: Character's options changed.
+//59: Night has fallen.
+59: Night has fallen.
+//60: Day has arrived.
+60: Day has arrived.
+//61: The holy messenger has given judgement.
+61: The holy messenger has given judgement.
+//62: Judgement was made.
+62: Judgement was made.
+//63: Mercy has been shown.
+63: Mercy has been shown.
+//64: Mercy has been granted.
+64: Mercy has been granted.
+//65: Character's base level raised.
+65: Character's base level raised.
+//66: Character's base level lowered.
+66: Character's base level lowered.
+//67: Character's job level can't go any higher.
+67: Character's job level can't go any higher.
+//68: character's job level raised.
+68: character's job level raised.
+//69: Character's job level lowered.
+69: Character's job level lowered.
+//70: You have learned the skill.
+70: You have learned the skill.
+//71: You have forgotten the skill.
+71: You have forgotten the skill.
+//72: Guild siege warfare start!
+72: Guild siege warfare start!
+//73: Already it has started siege warfare.
+73: Already it has started siege warfare.
+//74: Guild siege warfare end!
+74: Guild siege warfare end!
+//75: Siege warfare hasn't started yet.
+75: Siege warfare hasn't started yet.
+//76: You have received all skills.
+76: You have received all skills.
+//77: The reference result of '%s' (name: id):
+77: The reference result of '%s' (name: id):
+//78: %s: %d
+78: %s: %d
+//79: It is %d affair above.
+79: It is %d affair above.
+//80: Give a display name and monster name/id please.
+80: Give a display name and monster name/id please.
+//81: Your GM level don't authorise you to do this action on this player.
+81: Your GM level don't authorise you to do this action on this player.
+//82: Please, use one of this number/name:
+82: Please, use one of this number/name:
+//83: Cannot spawn emperium.
+83: Cannot spawn emperium.
+//84: All stats changed!
+84: All stats changed!
+//85: Invalid time for ban command.
+85: Invalid time for ban command.
+//86: Sorry, but a player name have at least 4 characters.
+86: Sorry, but a player name have at least 4 characters.
+//87: Sorry, but a player name have 23 characters maximum.
+87: Sorry, but a player name have 23 characters maximum.
+//88: Character name sends to char-server to ask it.
+88: Character name sends to char-server to ask it.
+//89: Sorry, it's already the night. Impossible to execute the command.
+89: Sorry, it's already the night. Impossible to execute the command.
+//90: Sorry, it's already the day. Impossible to execute the command.
+90: Sorry, it's already the day. Impossible to execute the command.
+//91: Character's base level can't go any higher.
+91: Character's base level can't go any higher.
+//92: All characters recalled!
+92: All characters recalled!
+//93: All online characters of the %s guild are near you.
+93: All online characters of the %s guild are near you.
+//94: Incorrect name/ID, or no one from the guild is online.
+94: Incorrect name/ID, or no one from the guild is online.
+//95: All online characters of the %s party are near you.
+95: All online characters of the %s party are near you.
+//96: Incorrect name or ID, or no one from the party is online.
+96: Incorrect name or ID, or no one from the party is online.
+//97: Item database reloaded.
+97: Item database reloaded.
+//98: Monster database reloaded.
+98: Monster database reloaded.
+//99: Skill database reloaded.
+99: Skill database reloaded.
+//100: Scripts reloaded.
+100: Scripts reloaded.
+//101: Login-server asked to reload GM accounts and their level.
+101: Login-server asked to reload GM accounts and their level.
+//102: Mounted Peco.
+102: Mounted Peco.
+//103: No longer spying on the %s guild.
+103: No longer spying on the %s guild.
+//104: Spying on the %s guild.
+104: Spying on the %s guild.
+//105: No longer spying on the %s party.
+105: No longer spying on the %s party.
+//106: Spying on the %s party.
+106: Spying on the %s party.
+//107: All items have been repaired.
+107: All items have been repaired.
+//108: No item need to be repaired.
+108: No item need to be repaired.
+//109: Player has been nuked!
+109: Player has been nuked!
+//110: Npc Enabled.
+110: Npc Enabled.
+//111: This NPC doesn't exist.
+111: This NPC doesn't exist.
+//112: Npc Disabled.
+112: Npc Disabled.
+//113: %d item(s) removed by a GM.
+113: %d item(s) removed by a GM.
+//114: %d item(s) removed from the player.
+114: %d item(s) removed from the player.
+//115: %d item(s) removed. Player had only %d on %d items.
+115: %d item(s) removed. Player had only %d on %d items.
+//116: Character does not have the item.
+116: Character does not have the item.
+//117: GM has send you in jails.
+117: GM has send you in jails.
+//118: Player warped in jails.
+118: Player warped in jails.
+//119: This player is not in jails.
+119: This player is not in jails.
+//120: GM has discharge you.
+120: GM has discharge you.
+//121: Player warped to Prontera.
+121: Player warped to Prontera.
+//122: Disguise applied.
+122: Disguise applied.
+//123: Monster/NPC name/id hasn't been found.
+123: Monster/NPC name/id hasn't been found.
+//124: Undisguise applied.
+124: Undisguise applied.
+//125: You're not disguised.
+125: You're not disguised.
+//126: You accept any wisp (no wisper is refused).
+126: You accept any wisp (no wisper is refused).
+//127: You accept any wisp, except thoses from %d player(s):
+127: You accept any wisp, except thoses from %d player(s):
+//128: You refuse all wisps (no specifical wisper is refused).
+128: You refuse all wisps (no specifical wisper is refused).
+//129: You refuse all wisps, AND refuse wisps from %d player(s):
+129: You refuse all wisps, AND refuse wisps from %d player(s):
+//130: '%s' accept any wisp (no wisper is refused).
+130: '%s' accept any wisp (no wisper is refused).
+//131: '%s' accept any wisp, except thoses from %d player(s):
+131: '%s' accept any wisp, except thoses from %d player(s):
+//132: '%s' refuse all wisps (no specifical wisper is refused).
+132: '%s' refuse all wisps (no specifical wisper is refused).
+//133: '%s' refuse all wisps, AND refuse wisps from %d player(s):
+133: '%s' refuse all wisps, AND refuse wisps from %d player(s):
+//134: '%s' already accepts all wispers.
+134: '%s' already accepts all wispers.
+//135: '%s' now accepts all wispers.
+135: '%s' now accepts all wispers.
+//136: A GM has authorised all wispers for you.
+136: A GM has authorised all wispers for you.
+//137: '%s' already blocks all wispers.
+137: '%s' already blocks all wispers.
+//138: '%s' blocks now all wispers.
+138: '%s' blocks now all wispers.
+//139: A GM has blocked all wispers for you.
+139: A GM has blocked all wispers for you.
+//140: Character's disguise applied.
+140: Character's disguise applied.
+//141: Character's undisguise applied.
+141: Character's undisguise applied.
+//142: Character is not disguised.
+142: Character is not disguised.
+//143: Give a monster name/id please.
+143: Give a monster name/id please.
+//144: Invalid actual email. If you have default e-mail, type a@a.com.
+144: Invalid actual email. If you have default e-mail, type a@a.com.
+//145: Invalid new email. Please enter a real e-mail.
+145: Invalid new email. Please enter a real e-mail.
+//146: New email must be a real e-mail.
+146: New email must be a real e-mail.
+//147: New email must be different of the actual e-mail.
+147: New email must be different of the actual e-mail.
+//148: Information sended to login-server via char-server.
+148: Information sended to login-server via char-server.
+//149: Impossible to increase the number/value.
+149: Impossible to increase the number/value.
+//150: No GM found.
+150: No GM found.
+//151: 1 GM found.
+151: 1 GM found.
+//152: %d GMs found.
+152: %d GMs found.
+//153: %s is Unknown Command.
+153: %s is Unknown Command.
+//154: %s failed.
+154: %s failed.
+//155: Impossible to change your job.
+155: Impossible to change your job.
+//156: HP or/and SP modified.
+156: HP or/and SP modified.
+//157: HP and SP are already with the good value.
+157: HP and SP are already with the good value.
+//158: Base level can't go any lower.
+158: Base level can't go any lower.
+//159: Job level can't go any lower.
+159: Job level can't go any lower.
+//160: PvP is already Off.
+160: PvP is already Off.
+//161: PvP is already On.
+161: PvP is already On.
+//162: GvG is already Off.
+162: GvG is already Off.
+//163: GvG is already On.
+163: GvG is already On.
+//164: Your memo point #%d doesn't exist.
+164: Your memo point #%d doesn't exist.
+//165: All monsters killed!
+165: All monsters killed!
+//166: No item has been refined!
+166: No item has been refined!
+//167: 1 item has been refined!
+167: 1 item has been refined!
+//168: %d items have been refined!
+168: %d items have been refined!
+//169: This item (%d: '%s') is not an equipment.
+169: This item (%d: '%s') is not an equipment.
+//170: This item is not an equipment.
+170: This item is not an equipment.
+//171: %d - void
+171: %d - void
+//172: You replace previous memo position %d - %s (%d,%d).
+172: You replace previous memo position %d - %s (%d,%d).
+//173: Note: you don't have the 'Warp' skill level to use it.
+173: Note: you don't have the 'Warp' skill level to use it.
+//174: Number of status points changed!
+174: Number of status points changed!
+//175: Number of skill points changed!
+175: Number of skill points changed!
+//176: Number of zenys changed!
+176: Number of zenys changed!
+//177: Impossible to decrease a stat.
+177: Impossible to decrease a stat.
+//178: Impossible to increase a stat.
+178: Impossible to increase a stat.
+//179: Guild level changed.
+179: Guild level changed.
+//180: The monter/egg name/id doesn't exist.
+180: The monter/egg name/id doesn't exist.
+//181: You already have a pet.
+181: You already have a pet.
+//182: Pet friendly value changed!
+182: Pet friendly value changed!
+//183: Pet friendly is already the good value.
+183: Pet friendly is already the good value.
+//184: Sorry, but you have no pet.
+184: Sorry, but you have no pet.
+//185: Pet hungry value changed!
+185: Pet hungry value changed!
+//186: Pet hungry is already the good value.
+186: Pet hungry is already the good value.
+//187: You can now rename your pet.
+187: You can now rename your pet.
+//188: You can already rename your pet.
+188: You can already rename your pet.
+//189: This player can now rename his/her pet.
+189: This player can now rename his/her pet.
+//190: This player can already rename his/her pet.
+190: This player can already rename his/her pet.
+//191: Sorry, but this player has no pet.
+191: Sorry, but this player has no pet.
+//192: Impossible to change the character's job.
+192: Impossible to change the character's job.
+//193: Character's base level can't go any lower.
+193: Character's base level can't go any lower.
+//194: Character's job level can't go any lower.
+194: Character's job level can't go any lower.
+//195: All players have been kicked!
+195: All players have been kicked!
+//196: You already have this quest skill.
+196: You already have this quest skill.
+//197: This skill number doesn't exist or isn't a quest skill.
+197: This skill number doesn't exist or isn't a quest skill.
+//198: This skill number doesn't exist.
+198: This skill number doesn't exist.
+//199: This player has learned the skill.
+199: This player has learned the skill.
+//200: This player already has this quest skill.
+200: This player already has this quest skill.
+//201: You don't have this quest skill.
+201: You don't have this quest skill.
+//202: This player has forgotten the skill.
+202: This player has forgotten the skill.
+//203: This player doesn't have this quest skill.
+203: This player doesn't have this quest skill.
+//204: WARNING: more than 1000 spiritballs can CRASH your server and/or client!
+204: WARNING: more than 1000 spiritballs can CRASH your server and/or client!
+//205: You already have this number of spiritballs.
+205: You already have this number of spiritballs.
+//206: '%s' skill points reseted!
+206: '%s' skill points reseted!
+//207: '%s' stats points reseted!
+207: '%s' stats points reseted!
+//208: '%s' skill and stats points reseted!
+208: '%s' skill and stats points reseted!
+//209: Character's number of skill points changed!
+209: Character's number of skill points changed!
+//210: Character's number of status points changed!
+210: Character's number of status points changed!
+//211: Character's number of zenys changed!
+211: Character's number of zenys changed!
+//212: Cannot mount a Peco while in disguise.
+212: Cannot mount a Peco while in disguise.
+//213: You can not mount a peco with your job.
+213: You can not mount a peco with your job.
+//214: Unmounted Peco.
+214: Unmounted Peco.
+//215: This player cannot mount a Peco while in disguise.
+215: This player cannot mount a Peco while in disguise.
+//216: Now, this player mounts a peco.
+216: Now, this player mounts a peco.
+//217: This player can not mount a peco with his/her job.
+217: This player can not mount a peco with his/her job.
+//218: Now, this player has not more peco.
+218: Now, this player has not more peco.
+//219: %d day
+219: %d day
+//220: %d days
+220: %d days
+//221: %s %d hour
+221: %s %d hour
+//222: %s %d hours
+222: %s %d hours
+//223: %s %d minute
+223: %s %d minute
+//224: %s %d minutes
+224: %s %d minutes
+//225: %s and %d second
+225: %s and %d second
+//226: %s and %d seconds
+226: %s and %d seconds
+//227: Cannot wear disguise while riding a Peco.
+227: Cannot wear disguise while riding a Peco.
+//228: Character cannot wear disguise while riding a Peco.
+228: Character cannot wear disguise while riding a Peco.
+//229: Your Effect Has Changed.
+229: Your Effect Has Changed.
+//230: Server time (normal time): %A, %B %d %Y %X.
+230: Server time (normal time): %A, %B %d %Y %X.
+//231: Game time: The game is in permanent daylight.
+231: Game time: The game is in permanent daylight.
+//232: Game time: The game is in permanent night.
+232: Game time: The game is in permanent night.
+//233: Game time: The game is actualy in night for %s.
+233: Game time: The game is actualy in night for %s.
+//234: Game time: After, the game will be in permanent daylight.
+234: Game time: After, the game will be in permanent daylight.
+//235: Game time: The game is actualy in daylight for %s.
+235: Game time: The game is actualy in daylight for %s.
+//236: Game time: After, the game will be in permanent night.
+236: Game time: After, the game will be in permanent night.
+//237: Game time: After, the game will be in night for %s.
+237: Game time: After, the game will be in night for %s.
+//238: Game time: A day cycle has a normal duration of %s.
+238: Game time: A day cycle has a normal duration of %s.
+//239: Game time: After, the game will be in daylight for %s.
+239: Game time: After, the game will be in daylight for %s.
+//240: %d monster(s) summoned!
+240: %d monster(s) summoned!
+//241: You be a killa...
+241: You be a killa...
+//242: You gonna be own3d...
+242: You gonna be own3d...
+//243: Map skills are off.
+243: Map skills are off.
+//244: Map skills are on.
+244: Map skills are on.
+//245: Muting is disabled.
+245: Muting is disabled.
+
+// Messages of others (not for GM commands)
+// ----------------------------------------
+
+//500: Actually, it's the night...
+500: Actually, it's the night...
+//501: Your account time limit is: %d-%m-%Y %H:%M:%S.
+501: Your account time limit is: %d-%m-%Y %H:%M:%S.
+//502: The day has arrived!
+502: The day has arrived!
+//503: The night has fallen...
+503: The night has fallen...
+// 504-508: Chat validation.
+//504: You cannot page yourself.
+504: You cannot page yourself.
+//505: Your message could not be sent.
+505: Your message could not be sent.
+//506: WARNING: You are about to be automatically banned for spam!
+506: WARNING: You are about to be automatically banned for spam!
+//507: WARNING: Please slow down, do not repeat, and do not SHOUT!
+507: WARNING: Please slow down, do not repeat, and do not SHOUT!
+//508: You have been banned for %s spamming. Please do not spam.
+508: You have been banned for %s spamming. Please do not spam.
diff --git a/conf/script_athena.conf b/conf/script_athena.conf
new file mode 100644
index 00000000..21d4a6f4
--- /dev/null
+++ b/conf/script_athena.conf
@@ -0,0 +1,2 @@
+// When choosing those which it refines setting the letter which is indicated. (Those for word use other than Japanese?)
+refine_posword: Head,Body,Left hand,Right hand,Robe,Shoes,Accessory 1,Accessory 2,Head 2,Head 3,Not Equipped
diff --git a/conf/water.txt b/conf/water.txt
new file mode 100644
index 00000000..71f98470
--- /dev/null
+++ b/conf/water.txt
@@ -0,0 +1,54 @@
+// ̐ݒB
+// water͐all_water͑SĐƔf}bvB
+
+mjolnir_12.gat mapflag water
+mjolnir_02.gat mapflag water
+glast_01.gat mapflag water
+gef_fild04.gat mapflag water
+prt_fild02.gat mapflag water
+prt_fild01.gat mapflag water
+prt_fild00.gat mapflag water
+gef_fild00.gat mapflag water
+gef_fild07.gat mapflag water
+gef_fild13.gat mapflag water
+gef_fild09.gat mapflag water
+gef_fild01.gat mapflag water
+prt_fild05.gat mapflag water
+gef_fild03.gat mapflag water
+gef_fild10.gat mapflag water
+prt_fild10.gat mapflag water
+pay_arche.gat mapflag water
+moc_ruins.gat mapflag water
+comodo.gat mapflag water
+cmd_fild01.gat mapflag water
+cmd_fild02.gat mapflag water
+cmd_fild03.gat mapflag water
+cmd_fild04.gat mapflag water
+cmd_fild05.gat mapflag water
+moc_fild11.gat mapflag water
+ama_fild01.gat mapflag water
+
+iz_dun00.gat mapflag water
+iz_dun01.gat mapflag water
+iz_dun02.gat mapflag water
+//iz_dun03.gat mapflag all_water
+//iz_dun04.gat mapflag all_water
+treasure01.gat mapflag water
+treasure02.gat mapflag water
+mjo_dun01.gat mapflag water
+orcsdun02.gat mapflag water
+pay_dun01.gat mapflag water
+pay_dun02.gat mapflag water
+pay_dun03.gat mapflag water
+prt_sewb2.gat mapflag water
+prt_sewb3.gat mapflag water
+gl_prison1.gat mapflag water
+alde_dun03.gat mapflag water
+alde_dun04.gat mapflag water
+beach_dun.gat mapflag water
+beach_dun2.gat mapflag water
+beach_dun3.gat mapflag water
+tur_dun01.gat mapflag water
+gld_dun02.gat mapflag water
+gld_dun03.gat mapflag water
+gld_dun04.gat mapflag water
diff --git a/conf/water_height.txt b/conf/water_height.txt
new file mode 100644
index 00000000..9a89e29c
--- /dev/null
+++ b/conf/water_height.txt
@@ -0,0 +1,68 @@
+// ̍ݒ
+//water_height.txtAthenaDBv 2004/03/31 18:52:09 +0900 (JST)
+
+xmas.gat 3
+mjolnir_01.gat 0
+mjolnir_02.gat -19
+mjolnir_12.gat 15
+prt_fild00.gat 11
+prt_fild01.gat 25
+prt_fild02.gat 42
+prt_fild04.gat 14
+prt_fild05.gat 14
+prt_fild10.gat 40
+gef_fild00.gat 10
+gef_fild01.gat 14
+gef_fild03.gat 82
+gef_fild04.gat 14
+gef_fild07.gat 19
+gef_fild09.gat 11
+gef_fild10.gat 24
+moc_fild01.gat 26
+moc_fild11.gat 9
+iz_dun00.gat 5
+iz_dun01.gat 5
+iz_dun02.gat -58
+mjo_dun01.gat 7
+orcsdun02.gat 3
+pay_dun01.gat 8
+pay_dun02.gat 5
+pay_dun03.gat 10
+prt_sewb2.gat 5
+prt_sewb3.gat 5
+treasure01.gat -4
+treasure02.gat -1
+moc_ruins.gat 6
+pay_arche.gat 8
+glast_01.gat 8
+alde_dun03.gat 2
+alde_dun04.gat 0
+gl_prison1.gat 35
+gl_sew01.gat 56
+gl_sew02.gat 12
+gl_sew03.gat 15
+gl_sew04.gat 70
+comodo.gat 14
+cmd_fild01.gat 46
+cmd_fild02.gat 4
+cmd_fild03.gat 0
+cmd_fild04.gat 4
+cmd_fild05.gat 46
+beach_dun2.gat 6
+beach_dun3.gat 0
+beach_dun.gat 9
+gef_fild13.gat 19
+gld_dun02.gat 5
+gld_dun03.gat 14
+gld_dun04.gat 3
+aldeg_cas01.gat 40
+aldeg_cas02.gat 35
+aldeg_cas03.gat 16
+aldeg_cas04.gat 31
+aldeg_cas05.gat 25
+gefg_cas02.gat 8
+gefg_cas04.gat 15
+gefg_cas05.gat 5
+prtg_cas05.gat 13
+tur_dun01.gat -65
+ama_fild01.gat 5
diff --git a/data/resnametable.txt b/data/resnametable.txt
new file mode 100644
index 00000000..59d8db65
--- /dev/null
+++ b/data/resnametable.txt
@@ -0,0 +1,11 @@
+001-1.gat#001-1.wlk#
+001-2-0.gat#001-2-0.wlk#
+001-2-1.gat#001-2-1.wlk#
+001-2-2.gat#001-2-2.wlk#
+001-2-3.gat#001-2-3.wlk#
+002-1.gat#002-1.wlk#
+002-3-0.gat#002-3-0.wlk#
+002-3-1.gat#002-3-1.wlk#
+002-3-2.gat#002-3-2.wlk#
+002-3-3.gat#002-3-3.wlk#
+002-3-4.gat#002-3-4.wlk#
diff --git a/db/attr_fix.txt b/db/attr_fix.txt
new file mode 100644
index 00000000..2bdbbd9d
--- /dev/null
+++ b/db/attr_fix.txt
@@ -0,0 +1,53 @@
+// C
+// :X^[̑ // c:Ȗ
+1,10 // lv1e[u
+// n O s
+ 100, 100, 100, 100, 100, 100, 100, 100, 25, 100, //
+ 100, 25, 100, 150, 50, 100, 75, 100, 100, 100, //
+ 100, 100, 100, 50, 150, 100, 75, 100, 100, 100, // n
+ 100, 50, 150, 25, 100, 100, 75, 100, 100, 125, //
+ 100, 175, 50, 100, 25, 100, 75, 100, 100, 100, //
+ 100, 100, 125, 125, 125, 0, 75, 50, 100, -25, //
+ 100, 100, 100, 100, 100, 100, 0, 125, 100, 150, //
+ 100, 100, 100, 100, 100, 50, 125, 0, 100, -25, //
+ 25, 100, 100, 100, 100, 100, 75, 75, 125, 100, // O
+ 100, 100, 100, 100, 100, 50, 100, 0, 100, 0, // s
+// :X^[̑ // c:Ȗ
+2,10 // lv2e[u
+// n O s
+ 100, 100, 100, 100, 100, 100, 100, 100, 25, 100, //
+ 100, 0, 100, 175, 25, 100, 50, 75, 100, 100, //
+ 100, 100, 50, 25, 175, 100, 50, 75, 100, 100, // n
+ 100, 25, 175, 0, 100, 100, 50, 75, 100, 150, //
+ 100, 175, 25, 100, 0, 100, 50, 75, 100, 100, //
+ 100, 75, 125, 125, 125, 0, 50, 25, 75, -50, //
+ 100, 100, 100, 100, 100, 100, -25, 150, 100, 175, //
+ 100, 100, 100, 100, 100, 25, 150, -25, 100, -50, //
+ 0, 75, 75, 75, 75, 75, 50, 50, 150, 125, // O
+ 100, 75, 75, 75, 75, 25, 125, 0, 100, 0, // s
+// :X^[̑ // c:Ȗ
+3,10 // lv3e[u
+// n O s
+ 100, 100, 100, 100, 100, 100, 100, 100, 0, 100, //
+ 100, -25, 100, 200, 0, 100, 25, 50, 100, 125, //
+ 100, 100, 0, 0, 200, 100, 25, 50, 100, 75, // n
+ 100, 0, 200, -25, 100, 100, 25, 50, 100, 175, //
+ 100, 200, 0, 100, -25, 100, 25, 50, 100, 100, //
+ 100, 50, 100, 100, 100, 0, 25, 0, 50, -75, //
+ 100, 100, 100, 100, 100, 125, -50, 175, 100, 200, //
+ 100, 100, 100, 100, 100, 0, 175, -50, 100, -75, //
+ 0, 50, 50, 50, 50, 50, 25, 25, 175, 150, // O
+ 100, 50, 50, 50, 50, 0, 150, 0, 100, 0, // s
+// :X^[̑ // c:Ȗ
+4,10 // lv4e[u
+// n O s
+ 100, 100, 100, 100, 100, 100, 100, 100, 0, 100, //
+ 100, -50, 100, 200, 0, 75, 0, 25, 100, 150, //
+ 100, 100, -25, 0, 200, 75, 0, 25, 100, 50, // n
+ 100, 0, 200, -50, 100, 75, 0, 25, 100, 200, //
+ 100, 200, 0, 100, -50, 75, 0, 25, 100, 100, //
+ 100, 25, 75, 75, 75, 0, 0, -25, 25,-100, //
+ 100, 75, 75, 75, 75, 125,-100, 200, 100, 200, //
+ 100, 75, 75, 75, 75, -25, 200,-100, 100,-100, //
+ 0, 25, 25, 25, 25, 25, 0, 0, 200, 175, // O
+ 100, 25, 25, 25, 25, -25, 175, 0, 100, 0, // s
diff --git a/db/card_labels.txt b/db/card_labels.txt
new file mode 100644
index 00000000..361572c7
--- /dev/null
+++ b/db/card_labels.txt
@@ -0,0 +1 @@
+// File created using Spamrat's Athena Database Editor v1.4.4
diff --git a/db/const.txt b/db/const.txt
new file mode 100644
index 00000000..f7c375d2
--- /dev/null
+++ b/db/const.txt
@@ -0,0 +1,206 @@
+// Constants usable in scripts
+
+// This constant is used to define whether unreleased items are equippable. This defaults to on, but should be disabled on the official server.
+debug 1
+
+mf_nomemo 0
+mf_noteleport 1
+mf_nosave 2
+mf_nobranch 3
+mf_nopenalty 4
+mf_pvp 5
+mf_pvp_noparty 6
+mf_pvp_noguild 7
+mf_gvg 8
+mf_gvg_noparty 9
+mf_nozenypenalty 10
+
+StatusPoint 9 1
+BaseLevel 11 1
+SkillPoint 12 1
+Class 19 1
+Upper 56 1
+Zeny 20 1
+Sex 21 1
+Weight 24 1
+MaxWeight 25 1
+JobLevel 55 1
+BaseExp 1 1
+JobExp 2 1
+NextBaseExp 22 1
+NextJobExp 23 1
+Hp 5 1
+MaxHp 6 1
+Sp 7 1
+MaxSp 8 1
+
+bMaxHP 6
+bMaxSP 8
+bStr 13
+bAgi 14
+bVit 15
+bInt 16
+bDex 17
+bLuk 18
+bAtk 41
+bAtk2 42
+bMatk1 43
+bMatk2 44
+bDef 45
+bMdef 47
+bMdef2 48
+bHit 49
+bFlee 50
+bFlee2 51
+bCritical 52
+bAspd 53
+bDeaf 70
+
+bAtkRange 1000
+bAtkEle 1001
+bDefEle 1002
+bCastrate 1003
+bMaxHPrate 1004
+bMaxSPrate 1005
+bUseSPrate 1006
+bAddEle 1007
+bAddRace 1008
+bAddSize 1009
+bSubEle 1010
+bSubRace 1011
+bAddEff 1012
+bResEff 1013
+bBaseAtk 1014
+bAspdRate 1015
+bHPrecovRate 1016
+bSPrecovRate 1017
+bSpeedRate 1018
+bCriticalDef 1019
+bNearAtkDef 1020
+bLongAtkDef 1021
+bDoubleRate 1022
+bDoubleAddRate 1023
+bMatk 1024
+bMatkRate 1025
+bIgnoreDefEle 1026
+bIgnoreDefRace 1027
+bAtkRate 1028
+bSpeedAddRate 1029
+bAspdAddRate 1030
+bMagicAtkDef 1031
+bMiscAtkDef 1032
+bIgnoreMdefEle 1033
+bIgnoreMdefRace 1034
+bMagicAddEle 1035
+bMagicAddRace 1036
+bMagicSubRace 1037
+bPerfectHitRate 1038
+bPerfectHitAddRate 1039
+bCriticalRate 1040
+bGetZenyNum 1041
+bAddGetZenyNum 1042
+bAddDamageClass 1043
+bAddMagicDamageClass 1044
+bAddDefClass 1045
+bAddMdefClass 1046
+bAddMonsterDropItem 1047
+bDefRatioAtkEle 1048
+bDefRatioAtkRace 1049
+bAddSpeed 1050
+bHitRate 1051
+bFleeRate 1052
+bFlee2Rate 1053
+bDefRate 1054
+bDef2Rate 1055
+bMdefRate 1056
+bMdef2Rate 1057
+bSplashRange 1058
+bSplashAddRange 1059
+bAutoSpell 1060
+bHPDrainRate 1061
+bSPDrainRate 1062
+bShortWeaponDamageReturn 1063
+bLongWeaponDamageReturn 1064
+bWeaponComaEle 1065
+bWeaponComaRace 1066
+bAddEff2 1067
+bMagicDamageReturn 1068
+bRandomAttackIncrease 1069
+bAllStats 1070
+bAgiVit 1071
+bAgiDexStr 1072
+bPerfectHide 1073
+bAddAtkRange 2010
+
+equip_head 1
+equip_shield 2
+equip_hand2 3
+equip_hand1 4
+equip_gloves 5
+equip_shoes 6
+equip_misc1 7
+equip_misc2 8
+equip_torso 9
+equip_legs 10
+
+cNone 11
+cWhite 10
+cRed 0
+cGreen 1
+cDarkBlue 2
+cYellow 3
+cLightBlue 4
+cPink 5
+cBlack 6
+cOrange 7
+cPurple 8
+cDarkGreen 9
+
+sc_poison 132
+sc_slowpoison 14
+sc_raiseattackspeed0 37
+sc_raiseattackstrength 185
+sc_berserk 107
+sc_barrier 146
+sc_magnificat 20
+sc_windwalk 116
+
+// Marriage-related
+WEDDING_FEE 100
+DIVORCE_FEE_PER_LEVEL 500
+WEDDING_MIN_LEVEL 32
+
+sfx_skillup 1
+sfx_magic_generic 2
+sfx_magic_life 3
+sfx_magic_war 4
+sfx_magic_transmute 5
+sfx_magic_nature 6
+sfx_magic_astral 7
+
+// Skill pools
+SKILL_FOCUS 339
+SKILL_MALLARDS_EYE 45
+SKILL_BRAWLING 350
+SKILL_LUCKY_COUNTER 351
+SKILL_SPEED 352
+SKILL_RESIST_POISON 353
+SKILL_ASTRAL_SOUL 354
+
+// Magic skills
+SKILL_MAGIC 340
+SKILL_MAGIC_LIFE 341
+SKILL_MAGIC_WAR 342
+SKILL_MAGIC_TRANSMUTE 343
+SKILL_MAGIC_NATURE 344
+SKILL_MAGIC_ASTRAL 345
+
+// Evol skills
+SKILL_GUILD 500
+SKILL_CRAFT 501
+SKILL_DYE 502
+
+NoobQuests_Demon 0
+NoobQuests_OldWitch 1
+
+ShipQuests_Julia 0
diff --git a/db/exp.txt b/db/exp.txt
new file mode 100644
index 00000000..d07c46b6
--- /dev/null
+++ b/db/exp.txt
@@ -0,0 +1,99 @@
+9,9,9,9,10,10,10,10,30,144,30,11,60,288
+16,16,16,16,18,18,18,18,43,184,43,20,86,368
+25,25,25,25,28,28,28,28,58,284,58,31,116,568
+36,36,36,36,40,40,40,40,76,348,76,44,152,696
+77,77,77,77,85,85,85,91,116,603,116,100,232,1206
+112,112,112,112,123,123,123,151,180,887,180,166,360,1774
+153,153,153,153,168,168,168,205,220,1096,220,226,440,2192
+200,200,200,200,220,220,220,268,272,1598,272,295,544,3196
+253,253,253,253,278,278,278,340,336,2540,336,374,672,5080
+320,320,320,320,400,400,400,0,520,3676,520,0,1040,7352
+385,385,385,385,41,41,41,0,604,4290,604,0,1208,8580
+490,490,490,490,613,613,613,0,699,4946,699,0,1398,9892
+585,585,585,585,731,731,731,0,802,6679,802,0,1604,13358
+700,700,700,700,875,875,875,0,948,9492,948,0,1896,18984
+830,830,830,830,1038,1038,1038,0,1125,12770,1125,0,2250,31925
+970,970,970,970,1213,1213,1213,0,1668,14344,1668,0,3336,35860
+1120,1120,1120,1120,1400,1400,1400,0,1937,16005,1937,0,3874,40013
+1260,1260,1260,1260,1575,1575,1575,0,2226,20642,2226,0,4452,51605
+1420,1420,1420,1420,1775,1775,1775,0,3040,27434,3040,0,6080,68585
+1620,1620,1620,1620,2268,2268,2268,0,3988,35108,3988,0,7976,87770
+1860,1860,1860,1860,2604,2604,2604,0,5564,38577,5564,0,11128,96443
+1990,1990,1990,1990,2786,2786,2786,0,6272,42206,6272,0,12544,105515
+2240,2240,2240,2240,3136,3136,3136,0,7021,52708,7021,0,14042,131770
+2504,2504,2504,2504,3506,3506,3506,0,9114,66971,9114,0,18228,167428
+2950,2950,2950,2950,4130,4130,4130,0,11473,82688,11473,0,28683,206720
+3426,3426,3426,3426,4796,4796,4796,0,15290,89544,15290,0,38225,223860
+3934,3934,3934,3934,5508,5508,5508,0,16891,96669,16891,0,42228,241673
+4474,4474,4474,4474,6264,6264,6264,0,18570,117821,18570,0,46425,294553
+6889,6889,6889,6889,9645,9645,9645,0,23229,144921,23229,0,58073,362303
+7995,7995,7995,7995,12392,12392,12392,0,28359,174201,28359,0,70898,479053
+9174,9174,9174,9174,14220,14220,14220,0,36478,186677,36478,0,91195,513362
+10425,10425,10425,10425,16159,16159,16159,0,39716,199584,39716,0,99290,548856
+11748,11748,11748,11748,18209,18209,18209,0,43088,238617,43088,0,107720,656197
+13967,13967,13967,13967,21649,21649,21649,0,52417,286366,52417,0,131043,787507
+15775,15775,15775,15775,24451,24451,24451,0,62495,337147,62495,0,156238,927154
+17678,17678,17678,17678,27401,27401,27401,0,78160,358435,78160,0,195408,985696
+19677,19677,19677,19677,30499,30499,30499,0,84175,380376,84175,0,210430,1046034
+21773,21773,21773,21773,33748,33748,33748,0,90404,447685,90404,0,226010,1231134
+30543,30543,30543,30543,47342,47342,47342,0,107611,526989,107611,0,269028,1449220
+34212,34212,34212,34212,58160,58160,58160,0,125915,610246,125915,0,314788,1678177
+38065,38065,38065,38065,64711,64711,64711,0,153941,644736,153941,0,384853,1773024
+42102,42102,42102,42102,71573,71573,71573,0,191781,793535,191781,0,479453,2182221
+46323,46323,46323,46323,78749,78749,78749,0,204351,921810,204351,0,510878,2534978
+53026,53026,53026,53026,90144,90144,90144,0,248352,1106758,248352,0,620880,3043585
+58419,58419,58419,58419,99312,99312,99312,0,286212,1260955,286212,0,715530,3782865
+64041,64041,64041,64041,108870,108870,108870,0,386371,1487304,386371,0,965928,4461912
+69892,69892,69892,69892,118816,118816,118816,0,409795,1557657,409795,0,1024488,4672971
+75973,75973,75973,75973,129154,129154,129154,0,482092,1990632,482092,0,1205230,5971896
+102468,102468,102468,102468,174196,174196,174196,0,509596,2083386,509596,0,1273990,6250158
+115254,115254,115254,115254,213220,213220,213220,0,0,0,982092,0,0,6875174
+128692,128692,128692,128692,238080,238080,238080,0,0,0,992092,0,0,7562691
+142784,142784,142784,142784,264150,264150,264150,0,0,0,1002092,0,0,8318960
+157528,157528,157528,157528,291427,291427,291427,0,0,0,1012092,0,0,9150856
+178184,178184,178184,178184,329640,329640,329640,0,0,0,1022092,0,0,10065942
+196300,196300,196300,196300,363155,363155,363155,0,0,0,1032092,0,0,11877812
+215198,215198,215198,215198,398116,398116,398116,0,0,0,1042092,0,0,14015818
+234879,234879,234879,234879,434526,434526,434526,0,0,0,1052092,0,0,16538655
+255341,255341,255341,255341,472381,472381,472381,0,0,0,1062092,0,0,19515624
+330188,330188,330188,330188,610848,610848,610848,0,0,0,1072092,0,0,23028437
+365914,365914,365914,365914,731828,731828,731828,0,0,0,1082092,0,0,28094693
+403224,403224,403224,403224,806448,806448,806448,0,0,0,1092092,0,0,34275525
+442116,442116,442116,442116,884232,884232,884232,0,0,0,1102092,0,0,41816141
+482590,482590,482590,482590,965180,965180,965180,0,0,0,1112092,0,0,51015692
+536948,536948,536948,536948,1073896,1073896,1073896,0,0,0,1122092,0,0,62239144
+585191,585191,585191,585191,1170382,1170382,1170382,0,0,0,1132092,0,0,79666104
+635278,635278,635278,635278,1270556,1270556,1270556,0,0,0,1142092,0,0,101972614
+687211,687211,687211,687211,1374422,1374422,1374422,0,0,0,1152092,0,0,130524946
+740988,740988,740988,740988,1481976,1481976,1481976,0,0,0,1162092,0,0,167071930
+925400,925400,925400,925400,1850800,1850800,1850800,0,0,0,1172092,0,0,213852071
+1473746,1473746,1473746,1473746,3389616,3389616,3389616,0,0,0,0,0,0,0
+1594058,1594058,1594058,1594058,3666333,3666333,3666333,0,0,0,0,0,0,0
+1718928,1718928,1718928,1718928,3953534,3953534,3953534,0,0,0,0,0,0,0
+1848355,1848355,1848355,1848355,4251217,4251217,4251217,0,0,0,0,0,0,0
+1982340,1982340,1982340,1982340,4559382,4559382,4559382,0,0,0,0,0,0,0
+2230113,2230113,2230113,2230113,5129260,5129260,5129260,0,0,0,0,0,0,0
+2386162,2386162,2386162,2386162,5488173,5488173,5488173,0,0,0,0,0,0,0
+2547417,2547417,2547417,2547417,5859059,5859059,5859059,0,0,0,0,0,0,0
+2713878,2713878,2713878,2713878,6241919,6241919,6241919,0,0,0,0,0,0,0
+3206160,3206160,3206160,3206160,7374168,7374168,7374168,0,0,0,0,0,0,0
+3681024,3681024,3681024,3681024,9570662,9570662,9570662,0,0,0,0,0,0,0
+4022472,4022472,4022472,4022472,10458427,10458427,10458427,0,0,0,0,0,0,0
+4377024,4377024,4377024,4377024,11380262,11380262,11380262,0,0,0,0,0,0,0
+4744680,4744680,4744680,4744680,12336168,12336168,12336168,0,0,0,0,0,0,0
+5125440,5125440,5125440,5125440,13326144,13326144,13326144,0,0,0,0,0,0,0
+5767272,5767272,5767272,5767272,14994907,14994907,14994907,0,0,0,0,0,0,0
+6204000,6204000,6204000,6204000,16130400,16130400,16130400,0,0,0,0,0,0,0
+6655464,6655464,6655464,6655464,17304200,17304200,17304200,0,0,0,0,0,0,0
+7121664,7121664,7121664,7121664,18516326,18516326,18516326,0,0,0,0,0,0,0
+7602600,7602600,7602600,7602600,19766760,19766760,19766760,0,0,0,0,0,0,0
+9738720,9738720,9738720,9738720,29216160,29216160,29216160,0,0,0,0,0,0,0
+11649960,11649960,11649960,11649960,34949880,34949880,34949880,0,0,0,0,0,0,0
+13643520,13643520,13643520,13643520,40930560,40930560,40930560,0,0,0,0,0,0,0
+18339300,18339300,18339300,18339300,55017900,55017900,55017900,0,0,0,0,0,0,0
+23836800,23836800,23836800,23836800,71510400,71510400,71510400,0,0,0,0,0,0,0
+35658000,35658000,35658000,35658000,106974000,106974000,106974000,0,0,0,0,0,0,0
+48687000,48687000,48687000,48687000,146061000,146061000,146061000,0,0,0,0,0,0,0
+58135000,58135000,58135000,58135000,174405000,174405000,174405000,0,0,0,0,0,0,0
+99999999,99999999,99999999,99999999,200000000,200000000,200000000,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/db/exp2.txt b/db/exp2.txt
new file mode 100644
index 00000000..b9cbfeb3
--- /dev/null
+++ b/db/exp2.txt
@@ -0,0 +1,99 @@
+10,9,9,11,60,288,144
+18,16,16,20,86,368,184
+28,25,25,31,116,568,284
+40,36,36,44,152,696,348
+85,77,77,100,232,1206,603
+123,112,112,166,360,1774,887
+168,153,153,226,440,2192,1096
+220,200,200,295,544,3196,1598
+278,253,253,374,672,5080,2540
+400,320,320,0,1040,7352,3676
+481,385,385,0,1208,8580,4290
+613,490,490,0,1398,9892,4946
+731,585,585,0,1604,13358,6679
+875,700,700,0,1896,18984,9492
+1038,830,830,0,2250,31925,12770
+1213,970,970,0,3336,35860,14344
+1400,1120,1120,0,3874,40013,16005
+1575,1260,1260,0,4452,51605,20642
+1775,1420,1420,0,6080,68585,27434
+2268,1620,1620,0,7976,87770,35108
+2604,1860,1860,0,11128,96443,38577
+2786,1990,1990,0,12544,105515,42206
+3136,2240,2240,0,14042,131770,52708
+3506,2504,2504,0,18228,167428,66971
+4136,2950,2950,0,28683,206720,82688
+4796,3426,3426,0,38225,223860,89544
+5508,3934,3934,0,42228,241673,96669
+6264,4474,4474,0,46425,294553,117821
+9645,6889,6889,0,58073,362303,144921
+12392,7995,7995,0,70898,479053,174201
+14220,9174,9174,0,91195,548856,186677
+16159,10425,10425,0,99290,656197,199584
+18209,11748,11748,0,107720,787507,238617
+21649,13967,13967,0,131043,927154,286366
+24451,15775,15775,0,156238,985696,337147
+27401,17678,17678,0,195400,1046034,358435
+30499,19677,19677,0,210438,1231134,380376
+33748,21773,21773,0,226010,1449220,447685
+47342,30543,30543,0,269028,1678177,526989
+58160,34212,34212,0,314788,1773024,610246
+64711,38065,38065,0,384853,2182221,644736
+71573,42102,42102,0,479453,2534978,793535
+78749,46323,46323,0,510878,3043585,921810
+90144,53026,53026,0,620880,3782865,1106758
+99312,58419,58419,0,715530,4461912,1260955
+108870,64041,64041,0,965928,4672971,1487304
+118816,69892,69892,0,1024488,5971896,1557657
+129154,75973,75973,0,1205230,6250158,1990632
+174196,102468,102468,0,1273990,6875174,2083386
+213220,115254,115254,0,0,7562691,0
+238080,128692,128692,0,0,8318960,0
+264150,142784,142784,0,0,9150856,0
+291427,157528,157528,0,0,10065942,0
+329640,178184,178184,0,0,11877812,0
+363155,196300,196300,0,0,14015818,0
+398116,215198,215198,0,0,16538665,0
+434526,234879,234879,0,0,19515624,0
+472381,255341,255341,0,0,23028437,0
+610848,330188,330188,0,0,28094693,0
+741828,365914,365914,0,0,34275525,0
+806448,403224,403224,0,0,41816141,0
+884232,442116,442116,0,0,51015692,0
+965180,482590,482590,0,0,62239144,0
+1073896,536948,536948,0,0,79666104,0
+1170382,585191,585191,0,0,101972614,0
+1270556,635278,635278,0,0,130624946,0
+1374422,687211,687211,0,0,167071930,0
+1481976,740988,740988,0,0,213852071,0
+1850800,925400,925400,0,0,213852071,0
+3389616,1473746,1473746,0,0,0,0
+3666333,1594058,1594058,0,0,0,0
+3953534,1718928,1718928,0,0,0,0
+4251217,1848355,1848355,0,0,0,0
+4559382,1982340,1982340,0,0,0,0
+5129260,2230113,2230113,0,0,0,0
+5488173,2386162,2386162,0,0,0,0
+5859059,2547417,2547417,0,0,0,0
+6241919,2713878,2713878,0,0,0,0
+7374168,3206160,3206160,0,0,0,0
+9570622,3681024,3681024,0,0,0,0
+10458427,4022472,4022472,0,0,0,0
+11380262,4377024,4377024,0,0,0,0
+12336168,4744680,4744680,0,0,0,0
+13326144,5125440,5125440,0,0,0,0
+14994907,5767272,5767272,0,0,0,0
+16130400,6204000,6204000,0,0,0,0
+17304206,6655464,6655464,0,0,0,0
+18586326,7121664,7121664,0,0,0,0
+19766760,7602600,7602600,0,0,0,0
+29216160,9738720,9738720,0,0,0,0
+34949880,11649960,11649960,0,0,0,0
+40930560,13643520,13643520,0,0,0,0
+55017900,18339300,18339300,0,0,0,0
+71510400,23836800,23836800,0,0,0,0
+106974000,35658000,35658000,0,0,0,0
+146061000,48687000,48687000,0,0,0,0
+174405000,58135000,58135000,0,0,0,0
+299999999,99999999,99999999,0,0,0,0
+0,0,0,0,0,0,0,0
diff --git a/db/item_bluebox.txt b/db/item_bluebox.txt
new file mode 100644
index 00000000..0932696e
--- /dev/null
+++ b/db/item_bluebox.txt
@@ -0,0 +1,7 @@
+// File created using Spamrat's Athena Database Editor v1.4.4
+//
+// ‚瓾ACeݒB
+// ItemID, ItemName(Dummy), Rate
+// ACeIDAACe̖O(_~[)Am(*10000)łB500000Ȃ50%1000000Ȃ100%łB)
+// ACeID0̏ꍇmACȇIɎsɓftHgACeIDƂĔF܂B(łꍇŌ̕LłB)
+//
diff --git a/db/item_cardalbum.txt b/db/item_cardalbum.txt
new file mode 100644
index 00000000..4472147b
--- /dev/null
+++ b/db/item_cardalbum.txt
@@ -0,0 +1,7 @@
+// File created using Spamrat's Athena Database Editor v1.4.4
+//
+// ÂJ[h瓾ACeݒB
+// ItemID, ItemName(Dummy), Rate
+// ACeIDAACe̖O(_~[)Am(*10000)łB500000Ȃ50%1000000Ȃ100%łB)
+// ACeID0̏ꍇmACȇIɎsɓftHgACeIDƂĔF܂B(łꍇŌ̕LłB)
+//
diff --git a/db/item_db.txt b/db/item_db.txt
new file mode 100644
index 00000000..5b88cbe6
--- /dev/null
+++ b/db/item_db.txt
@@ -0,0 +1,3 @@
+#ID, Name, Label, Attr, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, LifeTime, {UseScript}, {EquipScript} {UnEquipScript}
+0, DEFAULT, Default, 0, 0, 0, 0, 10, , , , , , 2, , , , , 0, {}, {}
+# <------ 23chars ------> <------ 23chars ------>
diff --git a/db/item_descriptions.txt b/db/item_descriptions.txt
new file mode 100644
index 00000000..361572c7
--- /dev/null
+++ b/db/item_descriptions.txt
@@ -0,0 +1 @@
+// File created using Spamrat's Athena Database Editor v1.4.4
diff --git a/db/item_giftbox.txt b/db/item_giftbox.txt
new file mode 100644
index 00000000..92ed47f5
--- /dev/null
+++ b/db/item_giftbox.txt
@@ -0,0 +1,7 @@
+// File created using Spamrat's Athena Database Editor v1.4.4
+//
+// v[g{bNX瓾ACeݒB
+// ItemID, ItemName(Dummy), Rate
+// ACeIDAACe̖O(_~[)Am(*10000)łB500000Ȃ50%1000000Ȃ100%łB)
+// ACeID0̏ꍇmACȇIɎsɓftHgACeIDƂĔF܂B(łꍇŌ̕LłB)
+//
diff --git a/db/item_noequip.txt b/db/item_noequip.txt
new file mode 100644
index 00000000..5eb36973
--- /dev/null
+++ b/db/item_noequip.txt
@@ -0,0 +1,4 @@
+// The equipment restriction file
+// here equipment at PvP and GvG
+// where it is possible to restrict, the prescribed form: < ItemID> < Mode>
+// mode = 1- So with PvP restriction, 2- GvG restriction, 3- PvP and GvG which restriction
diff --git a/db/item_scroll.txt b/db/item_scroll.txt
new file mode 100644
index 00000000..00b50386
--- /dev/null
+++ b/db/item_scroll.txt
@@ -0,0 +1,5 @@
+// Â瓾ACeݒB
+// nameid, item_name(dummy), rate
+// ACeIDAACe̖O(_~[)Am(*10000)łB500000Ȃ50%1000000Ȃ100%łB)
+// ACeID0̏ꍇmACȇIɎsɓftHgACeIDƂĔF܂B(łꍇŌ̕LłB)
+0,Jellopy,909
diff --git a/db/item_violetbox.txt b/db/item_violetbox.txt
new file mode 100644
index 00000000..88bde984
--- /dev/null
+++ b/db/item_violetbox.txt
@@ -0,0 +1,7 @@
+// File created using Spamrat's Athena Database Editor v1.4.4
+//
+// ÂF̔瓾ACeݒB
+// ItemID, ItemName(Dummy), Rate
+// ACeIDAACe̖O(_~[)Am(*10000)łB500000Ȃ50%1000000Ȃ100%łB)
+// ACeID0̏ꍇmACȇIɎsɓftHgACeIDƂĔF܂B(łꍇŌ̕LłB)
+//
diff --git a/db/job_db1.txt b/db/job_db1.txt
new file mode 100644
index 00000000..4cc07a8e
--- /dev/null
+++ b/db/job_db1.txt
@@ -0,0 +1,71 @@
+//weight,hp,hp2,sp,aspd*17(f,Z,Ў茕,茕,Ў葄,葄,Ў蕀,蕀,Ў݊,݊,,|,,y,,{,J^[)
+//x NOV,SWO,MAG,ARC,ACO,MER,THI,KNI,PRI,WIZ,BLA,HUN,ASS,KNIp,CRU,MON,SAG,ROG,ALC,BAR,DAN,CRUp,WED,SNV
+20000, 0,500,100, 650, 700, 750,600,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
+20000, 0,500,100, 650, 700, 750,600,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
+20000, 0,500,100, 650, 700, 750,600,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
+20000, 0,500,100, 650, 700, 750,600,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
+20000, 0,500,100, 650, 700, 750,600,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
+20000, 0,500,100, 650, 700, 750,600,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
+20000, 0,500,100, 650, 700, 750,600,2000,2000, 800,2000, 700, 700, 650,900,2000,2000,2000,2000,2000
+28000,150,500,300, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+26000, 75,500,800, 400,2000,2000,2000,2000,2000,2000,2000, 600, 600, 600,2000,2000,2000,2000, 600,2000
+24000, 55,500,900, 500, 575,2000,2000,2000,2000,2000,2000,2000,2000, 625,2000,2000,2000,2000,2000,2000
+30000, 90,500,400, 400, 600, 650,2000,2000,2000, 650, 650, 675, 675,2000,2000,2000,2000,2000,2000,2000
+27000, 85,500,400, 400, 600,2000,2000,2000,2000,2000,2000,2000,2000,2000, 600,2000,2000,2000,2000,2000
+24000,110,500,400, 400, 500, 650,2000,2000,2000, 800,2000,2000,2000,2000,2000,2000,2000,2000,2000, 500
+28000,150,500,300, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+28000,110,700,470, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+26000, 90,650,470, 400,2000,2000,2000,2000,2000,2000,2000, 575, 575, 575,2000, 475,2000,2000,2000,2000
+24000, 75,500,700, 450, 525,2000,2000,2000,2000,2000,2000,2000,2000, 625,2000,2000,2000,2000, 550,2000
+24000, 85,500,500, 400, 500, 550,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000,2000,2000,2000,2000
+30000, 90,500,400, 400, 550, 575,2000,2000,2000, 675, 700, 650, 650,2000,2000,2000,2000,2000,2000,2000
+27000, 75,300,600, 400, 550,2000,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000, 575,2000,2000,2000
+27000, 75,300,600, 400, 550,2000,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000,2000, 575,2000,2000
+28000,110,700,470, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+20000, 0,500,100,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000
+20000, 0,500,100, 500, 650, 700,2000,2000,2000, 800,2000, 700, 700, 650,2000,2000,2000,2000,2000,2000
+20000, 0,500,100, 500, 650, 700,2000,2000,2000, 800,2000, 700, 700, 650,2000,2000,2000,2000,2000,2000
+28000, 70,500,200, 400, 500, 550, 600, 650, 700, 700, 750, 650, 700,2000,2000,2000,2000,2000,2000,2000
+22000, 30,500,600, 500, 600,2000,2000,2000,2000,2000,2000,2000,2000, 700,2000,2000,2000,2000,2000,2000
+26000, 50,500,200, 400, 600,2000,2000,2000,2000,2000,2000,2000,2000,2000, 700,2000,2000,2000,2000,2000
+24000, 40,500,500, 400,2000,2000,2000,2000,2000,2000,2000, 600, 600, 600,2000,2000,2000,2000,2000,2000
+28000, 40,500,300, 400, 600, 700,2000,2000,2000, 700, 750, 700, 700,2000,2000,2000,2000,2000,2000,2000
+24000, 50,500,200, 400, 500, 650,2000,2000,2000, 800,2000,2000,2000,2000, 800,2000,2000,2000,2000,2000
+28000,195,500,390, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+26000,97.5,500,1040, 400,2000,2000,2000,2000,2000,2000,2000, 600, 600, 600,2000,2000,2000,2000, 600,2000
+24000,71.5,500,1170, 500, 575,2000,2000,2000,2000,2000,2000,2000,2000, 625,2000,2000,2000,2000,2000,2000
+30000,117,500,520, 400, 600, 650,2000,2000,2000, 650, 650, 675, 675,2000,2000,2000,2000,2000,2000,2000
+27000,110.5,500,520, 400, 600,2000,2000,2000,2000,2000,2000,2000,2000,2000, 600,2000,2000,2000,2000,2000
+24000,143,500,520, 400, 500, 650,2000,2000,2000, 800,2000,2000,2000,2000,2000,2000,2000,2000,2000, 500
+28000,195,500,390, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+28000,143,700,611, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+26000,117,650,611, 400,2000,2000,2000,2000,2000,2000,2000, 575, 575, 575,2000, 475,2000,2000,2000,2000
+24000,97.5,500,910, 450, 525,2000,2000,2000,2000,2000,2000,2000,2000, 625,2000,2000,2000,2000, 550,2000
+24000,110.5,500,650, 400, 500, 550,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000,2000,2000,2000,2000
+30000,117,500,520, 400, 550, 575,2000,2000,2000, 675, 700, 650, 650,2000,2000,2000,2000,2000,2000,2000
+27000,97.5,300,780, 400, 550,2000,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000, 575,2000,2000,2000
+27000,97.5,300,780, 400, 550,2000,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000,2000, 575,2000,2000
+28000,143,700,611, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+20000, 0,500,100, 500, 650, 700,2000,2000,2000, 800,2000, 700, 700, 650,2000,2000,2000,2000,2000,2000
+28000, 70,500,200, 400, 500, 550, 600, 650, 700, 700, 750, 650, 700,2000,2000,2000,2000,2000,2000,2000
+22000, 30,500,600, 500, 600,2000,2000,2000,2000,2000,2000,2000,2000, 700,2000,2000,2000,2000,2000,2000
+26000, 50,500,200, 400, 600,2000,2000,2000,2000,2000,2000,2000,2000,2000, 700,2000,2000,2000,2000,2000
+24000, 40,500,500, 400,2000,2000,2000,2000,2000,2000,2000, 600, 600, 600,2000,2000,2000,2000,2000,2000
+28000, 40,500,300, 400, 600, 700,2000,2000,2000, 700, 750, 700, 700,2000,2000,2000,2000,2000,2000,2000
+24000, 50,500,200, 400, 500, 650,2000,2000,2000, 800,2000,2000,2000,2000, 800,2000,2000,2000,2000,2000
+28000,150,500,300, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+26000, 75,500,800, 400,2000,2000,2000,2000,2000,2000,2000, 600, 600, 600,2000,2000,2000,2000, 600,2000
+24000, 55,500,900, 500, 575,2000,2000,2000,2000,2000,2000,2000,2000, 625,2000,2000,2000,2000,2000,2000
+30000, 90,500,400, 400, 600, 650,2000,2000,2000, 650, 650, 675, 675,2000,2000,2000,2000,2000,2000,2000
+27000, 85,500,400, 400, 600,2000,2000,2000,2000,2000,2000,2000,2000,2000, 600,2000,2000,2000,2000,2000
+24000,110,500,400, 400, 500, 650,2000,2000,2000, 800,2000,2000,2000,2000,2000,2000,2000,2000,2000, 500
+28000,150,500,300, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+28000,110,700,470, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+26000, 90,650,470, 400,2000,2000,2000,2000,2000,2000,2000, 575, 575, 575,2000, 475,2000,2000,2000,2000
+24000, 75,500,700, 450, 525,2000,2000,2000,2000,2000,2000,2000,2000, 625,2000,2000,2000,2000, 550,2000
+24000, 85,500,500, 400, 500, 550,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000,2000,2000,2000,2000
+30000, 90,500,400, 400, 550, 575,2000,2000,2000, 675, 700, 650, 650,2000,2000,2000,2000,2000,2000,2000
+27000, 75,300,600, 400, 550,2000,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000, 575,2000,2000,2000
+27000, 75,300,600, 400, 550,2000,2000,2000,2000,2000,2000,2000,2000,2000, 650,2000,2000, 575,2000,2000
+28000,110,700,470, 400, 500, 500, 550, 600, 600, 700, 700, 650, 700,2000,2000,2000,2000,2000,2000,2000
+
diff --git a/db/job_db2-2.txt b/db/job_db2-2.txt
new file mode 100644
index 00000000..c36b9a71
--- /dev/null
+++ b/db/job_db2-2.txt
@@ -0,0 +1,26 @@
+// job_bonus 0-non 1-str 2-agi 3-vit 4-int 5-dex 6-luk
+//x NV,SW,MG,AC,AL,MC,TF,KN,PR,WZ,BS,HT,AS,KNp,CR,MO,SA,RG,AM,BA,DC,CRp
+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,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,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,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,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
+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,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,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,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,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
+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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+1,2,6,5,3,1,1,1,0,2,5,3,4,2,0,5,2,0,1,0,0,3,0,0,1,0,6,5,3,0,5,0,1,0,0,5,2,6,0,3,1,0,3,5,0,1,1,0,5,0,0,1,2,0,0,1,1,3,0,2,0,5,0,1,2,0,4,3,0,1
+4,0,2,3,1,0,4,2,0,0,4,1,5,0,0,5,0,0,2,4,1,3,4,4,0,5,0,5,2,3,1,0,0,4,0,0,5,1,0,6,0,2,5,0,1,5,4,0,6,3,3,0,0,0,2,5,4,3,0,1,4,5,0,0,2,4,3,2,0,4
+4,5,3,0,4,0,0,2,5,4,0,6,0,4,0,0,5,2,4,1,0,5,5,4,0,2,0,4,3,0,5,4,0,2,0,0,4,4,4,1,6,0,5,0,0,4,3,0,4,2,0,0,3,0,4,2,6,0,4,1,5,4,0,0,2,3,5,0,2,4
+5,1,1,4,0,5,2,6,3,0,0,5,3,0,4,6,1,0,2,2,0,4,5,0,0,1,0,6,3,0,2,0,1,4,0,2,0,5,6,0,5,0,0,6,6,0,5,3,0,4,0,1,0,0,0,5,5,2,0,3,4,5,0,2,3,6,6,0,0,5
+5,2,5,5,4,2,0,1,0,2,2,3,0,6,0,5,5,0,0,4,2,5,0,1,6,5,0,2,0,5,6,3,2,0,5,6,0,2,0,5,0,4,2,0,1,5,0,2,0,6,5,0,0,4,3,0,6,2,0,5,1,6,0,0,4,0,0,0,5,6
+2,1,6,2,2,0,1,6,3,5,0,1,0,0,2,6,0,6,0,2,1,0,5,2,2,6,0,0,1,0,2,2,2,6,0,0,5,1,5,0,0,2,5,0,0,2,3,6,0,1,2,0,5,1,0,2,5,0,0,0,5,2,0,5,6,1,0,0,3,5
+1,2,6,5,3,1,1,1,0,2,5,3,4,3,0,5,2,0,1,0,0,3,0,0,1,0,6,5,3,0,5,0,1,0,0,5,2,6,0,3,1,0,3,5,0,1,1,0,5,0,0,1,2,0,0,1,1,3,0,2,0,5,0,1,2,0,4,3,0,1
+3,1,2,0,0,5,4,2,3,1,0,5,0,4,3,2,5,1,0,0,3,0,5,2,0,1,0,0,4,3,0,0,1,0,0,5,2,0,6,1,0,3,4,0,5,0,0,1,3,0,0,2,3,4,1,0,5,0,6,2,4,0,3,1,4,0,6,5,4,2
+1,4,3,2,0,5,0,0,1,0,4,2,6,0,3,5,1,0,0,2,2,5,0,3,0,0,1,0,2,5,0,0,4,6,0,0,1,5,3,0,0,3,0,5,2,6,4,1,0,5,0,2,5,0,0,4,0,3,1,5,0,2,0,4,1,1,5,3,4,2
+4,4,2,0,1,0,3,5,0,0,4,2,0,4,0,5,0,1,0,5,6,4,2,3,0,5,1,0,5,4,0,2,0,5,0,1,5,4,3,0,4,0,2,0,1,5,0,0,4,2,0,5,0,2,5,1,4,0,0,2,0,5,3,4,0,6,0,4,2,4
+1,2,0,6,4,3,0,0,2,5,1,2,0,0,3,5,5,0,0,6,2,1,0,6,0,5,2,0,5,0,6,1,0,2,0,0,5,5,0,0,2,3,1,4,2,0,1,0,5,6,0,5,1,0,0,5,4,2,6,5,0,1,3,2,0,5,1,0,0,2
+5,0,6,0,2,1,4,6,3,5,0,0,4,0,5,0,0,2,0,6,0,4,5,0,6,0,2,0,0,4,1,0,3,6,5,0,0,2,0,0,5,5,5,0,6,4,5,0,5,0,6,6,1,2,0,5,5,0,4,6,3,0,5,6,0,1,2,4,6,5
+2,5,0,2,1,0,5,4,2,1,6,0,2,0,5,3,0,6,1,0,4,0,5,2,0,6,0,4,0,5,0,2,1,0,0,2,0,0,5,5,4,0,5,0,1,0,6,0,2,5,0,0,2,1,0,5,5,2,3,0,5,1,5,0,2,5,0,2,4,1
+5,1,0,2,0,1,0,4,5,0,2,2,2,5,5,0,3,5,0,1,0,5,5,0,2,4,6,5,0,0,2,0,5,0,1,0,0,2,4,0,5,0,5,0,5,0,2,0,5,1,0,2,4,3,0,0,2,5,0,4,2,2,6,0,5,1,2,0,5,2
+3,1,2,0,0,5,4,2,3,1,0,5,0,4,3,2,5,1,0,0,3,0,5,2,0,1,0,0,4,3,0,0,1,0,0,5,2,0,6,1,0,3,4,0,5,0,0,1,3,0,0,2,3,4,1,0,5,0,6,2,4,0,3,1,4,0,6,5,4,2
+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,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,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,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
diff --git a/db/job_db2.txt b/db/job_db2.txt
new file mode 100644
index 00000000..23ddad53
--- /dev/null
+++ b/db/job_db2.txt
@@ -0,0 +1,71 @@
+// job_bonus 0-non 1-str 2-agi 3-vit 4-int 5-dex 6-luk
+//x NV,SW,MG,AC,AL,MC,TF,KN,PR,WZ,BS,HT,AS,KNp,CR,MO,SA,RG,AM,BA,DC,CRp
+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,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,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,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,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
+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,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,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,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,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
+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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3,0,3,1,6,0,0,3,0,1,5,3,2,0,1,0,3,3,5,6,1,0,3,0,0,0,1,6,3,0,5,0,1,0,0,3,6,2,0,5,0,0,3,0,0,1,1,5,5,0
+6,0,6,1,0,2,3,4,4,6,1,0,0,3,0,5,1,0,0,5,6,4,0,0,5,0,1,0,2,0,6,5,0,3,1,3,2,0,6,0,0,4,4,0,3,0,0,2,0,6
+4,5,0,4,5,2,0,0,4,2,0,1,5,0,6,0,0,4,0,0,0,4,0,2,0,5,0,0,4,0,4,5,4,2,0,6,0,3,5,4,2,0,2,0,4,2,2,4,0,4
+5,0,1,5,5,0,3,1,5,0,6,5,3,0,0,1,0,0,5,3,4,0,1,0,0,5,0,5,2,0,1,3,0,4,0,5,3,2,5,5,0,0,0,1,0,6,5,0,3,0
+5,0,4,5,6,1,0,5,0,1,1,2,0,5,6,0,3,0,2,2,5,0,3,0,0,0,5,0,6,0,2,0,5,4,0,0,0,5,2,0,4,6,5,1,0,4,2,0,5,0
+2,2,2,4,0,3,0,3,5,0,1,0,0,4,2,2,2,2,2,2,2,0,0,5,1,0,1,0,0,5,5,1,0,0,0,0,0,4,0,5,5,4,0,0,1,5,0,1,0,5
+3,0,3,1,6,0,0,3,0,1,5,3,2,0,1,0,3,3,5,6,1,0,3,0,0,0,1,6,3,0,5,0,1,0,0,3,6,2,0,5,0,0,3,0,0,1,1,5,5,0
+6,6,6,6,6,0,1,0,4,0,1,3,0,5,3,0,1,0,0,4,4,3,1,0,1,0,0,5,0,2,0,1,0,5,0,2,0,4,0,3,3,0,0,4,0,3,0,1,0,3
+1,1,0,5,0,2,3,0,0,2,0,1,1,6,0,4,0,2,0,3,0,5,2,0,3,1,1,0,0,5,0,6,3,0,2,0,0,4,0,6,3,0,5,2,0,3,0,0,1,1
+4,0,2,3,0,2,0,4,0,0,3,0,2,0,4,0,6,3,0,5,0,2,0,4,5,0,5,0,0,4,0,5,2,0,6,0,4,0,5,6,0,1,0,1,4,1,1,1,0,4
+2,3,5,0,1,3,2,0,3,0,5,0,0,3,3,2,0,5,0,5,0,0,2,0,1,0,1,0,2,1,0,0,5,5,0,1,0,4,2,0,0,1,4,0,2,0,4,0,4,5
+4,5,5,0,0,1,0,5,4,0,2,0,5,2,1,0,4,0,5,3,5,0,4,4,5,1,0,5,4,0,3,0,0,1,0,3,0,4,0,2,0,0,1,0,2,0,0,0,2,2
+5,2,1,0,4,6,5,0,6,2,2,0,4,0,5,0,3,0,5,6,4,0,0,2,0,0,0,1,0,2,0,5,3,0,2,0,0,5,0,4,6,0,3,0,0,5,4,2,0,5
+6,2,1,0,4,5,6,0,5,2,2,0,4,0,6,0,3,0,6,5,4,0,0,2,0,0,0,1,0,2,0,6,3,0,2,0,0,6,0,4,5,0,3,0,0,6,4,2,0,6
+6,6,6,6,6,0,1,0,4,0,1,3,0,5,3,0,1,0,0,4,4,3,1,0,1,0,0,5,0,2,0,1,0,5,0,2,0,4,0,3,3,0,0,4,0,3,0,1,0,3
+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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,6,5,0,2,3,0,1,4,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,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,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,0
+0,1,0,0,0,3,0,0,0,5,0,0,0,1,0,0,0,3,0,0,0,5,0,0,0,6,0,0,0,2,0,0,1,0,0,5,0,3,0,1,0,3,0,6,0,2,1,0,1,1
+0,4,0,0,0,5,0,0,0,5,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,2,0,0,0,6,0,0,4,0,0,5,0,4,0,2,0,6,0,4,0,4,2,0,6,4
+0,5,0,0,0,1,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,2,0,0,0,5,0,0,2,0,0,5,0,1,0,1,0,5,0,6,0,3,4,0,2,5
+0,6,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,2,0,0,0,1,0,0,0,3,0,0,4,0,0,5,0,6,0,2,0,1,0,3,0,4,5,0,1,6
+0,3,0,0,0,5,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,3,0,0,2,0,0,6,0,5,0,1,0,5,0,1,0,6,3,0,1,5
+0,2,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,1,0,0,2,0,0,2,0,1,0,6,0,5,0,3,0,6,1,0,5,2
+1,2,6,5,3,1,1,1,0,2,5,3,4,2,0,5,2,0,1,0,0,3,0,0,1,0,6,5,3,0,5,0,1,0,0,5,2,6,0,3,1,0,3,5,0,1,1,0,5,0,0,1,2,0,0,1,1,3,0,2,0,5,0,1,2,0,4,3,0,1
+4,0,2,3,1,0,4,2,0,0,1,5,0,0,5,0,0,2,4,1,3,4,4,0,5,0,5,5,2,3,1,0,0,4,0,0,5,1,0,6,0,2,5,0,1,5,4,0,6,3,3,0,0,0,2,5,4,3,0,1,4,5,0,0,2,4,3,2,0,4
+4,5,3,0,4,0,0,2,5,4,0,6,0,4,0,0,5,2,4,1,0,5,5,4,0,2,0,4,3,0,5,4,0,2,0,0,4,4,4,1,6,0,5,0,0,,4,3,0,4,2,0,0,3,0,4,2,6,0,4,1,5,4,0,0,2,3,5,0,2,4
+5,1,1,4,0,5,2,6,3,0,0,5,3,0,4,6,1,0,2,2,0,4,5,0,0,1,0,6,3,0,2,5,1,4,0,2,0,5,6,0,5,0,0,6,6,0,5,3,0,4,0,1,0,0,0,5,0,0,0,3,4,5,0,2,0,6,6,0,0,5
+5,2,5,5,4,2,0,1,0,2,2,3,0,6,0,5,5,0,0,4,2,5,0,1,6,5,0,2,0,5,6,3,2,0,5,6,0,2,0,5,0,4,2,0,1,5,0,2,0,5,4,0,0,4,3,0,6,2,0,5,1,6,0,0,4,0,0,0,5,6
+2,1,6,2,2,0,1,6,3,5,0,1,0,0,2,6,0,6,0,2,1,0,5,2,2,6,0,0,5,0,2,2,2,6,0,0,5,1,5,0,0,2,5,0,0,2,3,6,0,1,2,0,5,1,0,2,5,0,0,0,5,2,0,5,6,1,0,0,3,6
+1,2,6,5,3,1,1,1,0,2,5,3,4,2,0,5,2,0,1,0,0,3,0,0,1,0,6,5,3,0,5,0,1,0,0,5,2,6,0,3,1,0,3,5,0,1,1,0,5,0,0,1,2,0,0,1,1,3,0,2,0,5,0,1,2,0,4,3,0,1
+3,1,2,0,0,5,4,2,3,1,0,5,0,4,3,2,6,1,0,0,3,0,6,2,0,1,0,0,5,4,0,0,1,0,0,6,2,0,6,1,0,3,4,0,5,0,0,1,3,0,0,2,3,4,1,0,5,0,6,2,4,0,3,1,4,0,6,5,3,2
+1,4,3,2,0,5,0,0,1,0,4,2,6,0,3,5,1,0,0,2,2,5,0,3,0,0,1,0,2,5,0,0,4,6,0,0,1,5,3,0,0,3,0,4,2,6,4,1,0,5,0,2,5,0,0,4,0,3,1,5,0,2,0,4,1,1,5,3,4,2
+4,4,2,0,1,0,3,5,0,0,4,2,0,4,0,5,0,1,0,5,6,4,2,3,0,5,1,0,5,4,0,2,0,5,0,1,5,4,3,0,4,0,2,0,1,5,0,0,4,2,0,5,0,2,5,1,4,0,0,2,0,5,3,4,0,6,0,4,2,4
+1,2,0,6,4,3,0,0,2,5,1,2,0,0,3,5,5,0,0,6,2,1,0,6,0,5,2,0,5,0,6,1,0,2,0,0,5,5,0,0,2,3,1,4,2,0,1,0,5,6,0,5,1,0,0,5,4,2,6,5,0,1,3,2,0,5,1,0,0,2
+5,0,6,0,2,1,4,6,3,5,0,0,4,0,5,0,0,2,0,6,0,4,5,0,6,0,2,0,0,4,1,0,3,6,5,0,0,2,0,0,5,5,5,0,6,4,5,0,5,0,6,6,1,2,0,5,5,0,4,6,3,0,5,6,0,1,2,4,6,5
+2,5,0,2,1,0,5,4,2,1,6,0,2,0,5,3,0,6,1,0,4,0,5,2,0,6,0,4,0,5,0,2,1,0,0,2,0,0,5,5,4,0,5,0,1,0,6,0,2,5,0,0,2,1,0,5,5,2,3,0,5,1,5,0,2,4,0,2,4,1
+5,1,0,2,0,1,0,4,5,0,2,2,2,5,5,0,3,5,0,1,0,5,5,0,2,4,6,5,0,0,2,0,5,0,1,0,0,2,4,0,5,0,5,0,5,0,2,0,5,1,0,2,4,3,0,0,2,5,0,4,2,2,6,0,5,1,2,0,5,2
+3,1,2,0,0,5,4,2,3,1,0,5,0,4,3,2,6,1,0,0,3,0,6,2,0,1,0,0,5,4,0,0,1,0,0,6,2,0,6,1,0,3,4,0,5,0,0,1,3,0,0,2,3,4,1,0,5,0,6,2,4,0,3,1,4,0,6,5,3,2
+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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,1,0,0,0,3,0,0,0,5,0,0,0,1,0,0,0,3,0,0,0,5,0,0,0,6,0,0,0,2,0,0,1,0,0,5,0,3,0,1,0,3,0,6,0,2,1,0,1,1
+0,4,0,0,0,5,0,0,0,5,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,2,0,0,0,6,0,0,4,0,0,5,0,4,0,2,0,6,0,4,0,4,2,0,6,4
+0,5,0,0,0,1,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,2,0,0,0,5,0,0,2,0,0,5,0,1,0,1,0,5,0,6,0,3,4,0,2,5
+0,6,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,2,0,0,0,1,0,0,0,3,0,0,4,0,0,5,0,6,0,2,0,1,0,3,0,4,5,0,1,6
+0,3,0,0,0,5,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,3,0,0,2,0,0,6,0,5,0,1,0,5,0,1,0,6,3,0,1,5
+0,2,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,1,0,0,2,0,0,2,0,1,0,6,0,5,0,3,0,6,1,0,5,2
+3,0,3,1,6,0,0,3,0,1,5,3,2,0,1,0,3,3,5,6,1,0,3,0,0,0,1,6,3,0,5,0,1,0,0,3,6,2,0,5,0,0,3,0,0,1,1,5,5,0
+6,0,6,1,0,2,3,4,4,6,1,0,0,3,0,5,1,0,0,5,6,4,0,0,5,0,1,0,2,0,6,5,0,3,1,3,2,0,6,0,0,4,4,0,3,0,0,2,0,6
+4,5,0,4,5,2,0,0,4,2,0,1,5,0,6,0,0,4,0,0,0,4,0,2,0,5,0,0,4,0,4,5,4,2,0,6,0,3,5,4,2,0,2,0,4,2,2,4,0,4
+5,0,1,5,5,0,3,1,5,0,6,5,3,0,0,1,0,0,5,3,4,0,1,0,0,5,0,5,2,0,1,3,0,4,0,5,3,2,5,5,0,0,0,1,0,6,5,0,3,0
+5,0,4,5,6,1,0,5,0,1,1,2,0,5,6,0,3,0,2,2,5,0,3,0,0,0,5,0,6,0,2,0,5,4,0,0,0,5,2,0,4,6,5,1,0,4,2,0,5,0
+2,2,2,4,0,3,0,3,5,0,1,0,0,4,2,2,2,2,2,2,2,0,0,5,1,0,1,0,0,5,5,1,0,0,0,0,0,4,0,5,5,4,0,0,1,5,0,1,0,5
+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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+6,6,6,6,6,0,1,0,4,0,1,3,0,5,3,0,1,0,0,4,4,3,1,0,1,0,0,5,0,2,0,1,0,5,0,2,0,4,0,3,3,0,0,4,0,3,0,1,0,3
+1,1,0,5,0,2,3,0,0,2,0,1,1,6,0,4,0,2,0,3,0,5,2,0,3,1,1,0,0,5,0,6,3,0,2,0,0,4,0,6,3,0,5,2,0,3,0,0,1,1
+4,0,2,3,0,2,0,4,0,0,3,0,2,0,4,0,6,3,0,5,0,2,0,4,5,0,5,0,0,4,0,5,2,0,6,0,4,0,5,6,0,1,0,1,4,1,1,1,0,4
+2,3,5,0,1,3,2,0,3,0,5,0,0,3,3,2,0,5,0,5,0,0,2,0,1,0,1,0,2,1,0,0,5,5,0,1,0,4,2,0,0,1,4,0,2,0,4,0,4,5
+4,5,5,0,0,1,0,5,4,0,2,0,5,2,1,0,4,0,5,3,5,0,4,4,5,1,0,5,4,0,3,0,0,1,0,3,0,4,0,2,0,0,1,0,2,0,0,0,2,2
+5,2,1,0,4,6,5,0,6,2,2,0,4,0,5,0,3,0,5,6,4,0,0,2,0,0,0,1,0,2,0,5,3,0,2,0,0,5,0,4,6,0,3,0,0,5,4,2,0,5
+6,2,1,0,4,5,6,0,5,2,2,0,4,0,6,0,3,0,6,5,4,0,0,2,0,0,0,1,0,2,0,6,3,0,2,0,0,6,0,4,5,0,3,0,0,6,4,2,0,6
+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,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,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,0,0,0,0,0,0,0,0,0,0
diff --git a/db/mob_branch.txt b/db/mob_branch.txt
new file mode 100644
index 00000000..8a24428c
--- /dev/null
+++ b/db/mob_branch.txt
@@ -0,0 +1,9 @@
+// File created using Spamrat's Athena Database Editor v1.4.4
+//
+// Ö؂̎}ŏł郂X^[ݒ
+// MobID, MobName(Dummy), Rate
+// X^[IDAX^[̖O(_~[)Am(*10000)łB500000Ȃ50%1000000Ȃ100%łB)
+// X^[ID0̏ꍇmX^[̑IɎsɏ҂郂X^[IDƂĔF܂B(łꍇŌ̕LłB)
+// NCAgŖ̂̂ƃNCAgd̓G[
+// Ă̓GLN^[̕t߂ɂԃOCłȂ̂ŒӁB
+//
diff --git a/db/mob_db.txt b/db/mob_db.txt
new file mode 100644
index 00000000..955864b3
--- /dev/null
+++ b/db/mob_db.txt
@@ -0,0 +1,2 @@
+# ID, Name, Jname, LV, HP, SP, EXP, JEXP, Range1, ATK1, ATK2, DEF, MDEF, STR, AGI, VIT, INT, DEX, LUK, Range2, Range3, Scale, Race, Element,Mode, Speed, Adelay, Amotion,Dmotion,Drop1id,Drop1per, Drop2id,Drop2per, Drop3id,Drop3per, Drop4id,Drop4per, Drop5id,Drop5per, Drop6id,Drop6per, Drop7id,Drop7per, Drop8id,Drop8per, MEXP, ExpPer, MVP1id, MVP1per, MVP2id, MVP2per,MVP3id, MVP3per,mutation count, mutation strength
+
diff --git a/db/mob_skill_db.txt b/db/mob_skill_db.txt
new file mode 100644
index 00000000..45933a20
--- /dev/null
+++ b/db/mob_skill_db.txt
@@ -0,0 +1,66 @@
+// Aegis zone 8.5 -> eAthena conversion by Komurka
+// + Mob Skills for Einbroch+ by Lupus
+//MOB_ID, a unused dummy character sequence (for information only), STATE, SKILL_ID, SKILL_LV,
+// rate (10000 = 100%), casttime, delay, cancelable, a target, a condition type, a condition value,
+// a value 1, a value 2, a value 3, a value 4, a value 5, emotion
+//Example
+//1001,Poring@TF_POISON,attack,52,3,100,1500,10000,no,target,always,0,,,,,7
+//
+//rate refers to the chance of the skill being casted when the condition is fulfilled.
+//delay is the time in milliseconds that has to be pass before recasting the same skill.
+//
+//STATE:
+// any / idle (in standby) / walk (in movement) / dead (on killed) / loot /
+// attack / angry (like attack, except player has not attacked mob yet) /
+// chase (following target, after being attacked) / follow (following
+// target, without being attacked)
+//
+//target: The target of the skill can be: target (when a PC is targetted) / self / friend / master
+// (the following are for ground-skills, a random target tile is selected from
+// the specified area):
+// around1 (3x3 area around self) / around2 (5x5 area around self) /
+// around3 (7x7 area around self) / around4 (9x9 area around self) /
+// around5 (3x3 area around target) / around6 (5x5 area around target) /
+// around7 (7x7 area around target) / around8 (9x9 area around target) /
+// around (11x11 area around self)
+//
+//conditions: (condition type) (value which specifies a condition value)
+// always uncondtional
+// myhpltmaxrate when the mob's hp drops to a certain %
+// mystatuson If the mob has any abnormalities in status (condition value),
+// mystatusoff If the mob has ended any abnormalities in status (condition value),
+// friendhpltmaxrate when the mobs' friend's hp drops to a certain %
+// friendstatuson If the friend has any abnormalities in status (condition value),
+// friendstatusoff If the friend has ended any abnormalities in status (condition value),
+// attackpcgt Attack PC becomes more than the number of specification
+// attackpcge Attack PC becomes equal or more than the number of specification.
+// slavelt when the number of slaves is lower than the original number of specification.
+// slavele when the number of slaves is lower or equal than the original number of specification.
+// closedattacked when melee attacked (close range attack)
+// longrangeattacked when long ranged attacked (like bows and far range weapons)
+// skillused when a skill is used on the mob
+// afterskill after the mob used certain skill.
+// casttargeted when a target is in cast range.
+// rudeattacked when a target is rude attacked
+// hiding *not implemented yet* when a target is hidden
+//
+// The character's state which can be specified to be a condition value by the statuson/statusoff system
+// anybad any type of state change
+// stone condition of being in stone state
+// freeze condition of being in frozen state
+// stan condition of being in stunned state
+// sleep condition of being in sleep state
+// poison condition of being in poisoned state
+// curse condition of being in cursed state
+// silence condition of being in silenced state
+// confusion condition of being in confusion state
+// blind condition of being in blind state
+// hiding condition of being in hidden state
+// sight condition of being in unhidden state
+
+//id, name@skill, state, skillid, skilllevel, permillage, casttime, delay, cancel, target, cond1, cond2, cond3, val0, val1, val2, val3, val4, emotion
+1004, Hive@NPC_SUMMONMONSTER, any, 198, 1, 2000, 1000, 0, no, self, slavelt, 1, 0, 1005, , , , ,
+//1004, Hive@NPC_SUMMONMONSTER, attack, 198, 1, 1500, 1000, 0, no, self, slavelt, 10, 0, 1005, , , , ,
+1004, Hive@NPC_SUMMONMONSTER, attack, 198, 1, 5000, 500, 0, no, self, myhpltmaxrate, 30, 2, 1006, , , , ,
+1005, Bee@NPC_POISON, attack, 178, 5, 5000, 0, 500, yes, target, always, 0, 0, , 10, , , ,
+1006, BeeQueen@NPC_POISON, attack, 178, 5, 10000, 0, 500, yes, target, always, 0, 0, , 10, , , ,
diff --git a/db/skill_db.txt b/db/skill_db.txt
new file mode 100644
index 00000000..3cdda136
--- /dev/null
+++ b/db/skill_db.txt
@@ -0,0 +1,45 @@
+//id, range, hit, inf, pl, nk, maxrse, max, list_num, castcancel, cast_defence_rate, inf2, maxcount, skill_type, blow_count, pool, stat, name
+1, 0, 0, 0, 0, 0, 0, 1, 0, no, 0, 0, 0, none, 0, no, none, Emote //NV_EMOTE
+2, 0, 0, 0, 0, 0, 0, 1, 0, no, 0, 0, 0, none, 0, no, none, Trade //NV_TRADE
+3, 0, 0, 0, 0, 0, 0, 2, 0, no, 0, 0, 0, none, 0, no, none, Party //NV_PARTY
+4, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, weapon, 0, no, none, X0 //SM_SWORD
+6, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, none, 0, no, none, X1 //SM_RECOVERY
+11, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, none, 0, no, none, X2 //MG_SRECOVERY
+28, 0, 6, 4, 0, 1, 0, 2, 1, yes, 0, 0, 0, magic, 0, no, none, Teleport //AL_TELEPORT
+30, 9, 6, 16, 0, 1, 0, 10, 1, yes, 0, 0, 0, magic, 0, no, none, Heal //AL_HEAL
+38, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, none, 0, no, none, X3 //MC_INCCARRY
+39, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, none, 0, no, none, X4 //MC_DISCOUNT
+40, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, none, 0, no, none, X5 //MC_OVERCHARGE
+45, 0, 0, 0, 0, 0, 9, 10, 0, no, 0, 0, 0, weapon, 0, passive,dex, Mallard's_Eye //AC_OWL
+50, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, weapon, 0, no, none, X6 //TF_DOUBLE
+51, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, weapon, 0, no, none, X7 //TF_MISS
+54, 1, 6, 4, 0, 0, 0, 100, 1, no, 0, 1, 0, none, 0, no, none, X8 //TF_POISON
+144, 0, 6, 4, 0, 1, 0, 1, 1, no, 0, 1, 0, none, 0, no, none, X9 //NV_FIRSTAID
+146, 0, 0, 0, 0, 0, 0, 1, 0, no, 0, 1, 0, none, 0, no, none, X10 //SM_MOVINGRECOVERY
+148, 0, 0, 0, 0, 0, 0, 1, 0, no, 0, 1, 0, weapon, 0, no, none, X11 //SM_AUTOBERSERK
+152, 0, 6, 4, 0, 1, 0, 1, 1, no, 0, 1, 0, weapon, 5, no, none, X12 //TF_BACKSLIDING
+178, 1, 6, 4, 0, 0, 0, 100, 1, no, 0, 1, 0, none, 0, no, none, X13 //NPC_POISON
+190, 1, 6, 4, 0, 0, 0, 100, 1, no, 0, 1, 0, none, 0, no, none, X14 //NPC_POISONATTACK
+198, 0, 0, 4, 0, 1, 0, 10, 1, no, 0, 2, 0, magic, 0, no, none, X15 //NPC_SUMMONSLAVE
+199, 0, 0, 4, 0, 1, 0, 10, 1, no, 0, 2, 0, none, 0, no, none, X16 //NPC_EMOTION
+339 0, 0, 0, 0, 0, 0, 3, 0, no, 0, 0, 0, none, 0, no, none, Skill_Pool //TMW_SKILLPOOL
+340, 0, 0, 0, 0, 0, 0, 5, 0, no, 0, 0, 0, magic, 0, no, none, Magic //TMW_MAGIC
+341, 0, 0, 0, 0, 0, 0, 5, 0, no, 0, 0, 0, magic, 0, no, none, Life_Magic //TMW_MAGIC_LIFE
+342, 0, 0, 0, 0, 0, 0, 5, 0, no, 0, 0, 0, magic, 0, no, none, War_Magic //TMW_MAGIC_WAR
+343, 0, 0, 0, 0, 0, 0, 5, 0, no, 0, 0, 0, magic, 0, no, none, Transmutation_Magic //TMW_MAGIC_TRANSMUTE
+344, 0, 0, 0, 0, 0, 0, 5, 0, no, 0, 0, 0, magic, 0, no, none, Nature_Magic //TMW_MAGIC_NATURE
+345, 0, 0, 0, 0, 0, 0, 5, 0, no, 0, 0, 0, magic, 0, no, none, Astral_Magic //TMW_MAGIC_ASTRAL
+350, 0, 0, 0, 0, 0, 9, 10, 0, no, 0, 0, 0, weapon, 0, passive,agi, Brawling //TMW_BRAWLING
+351, 0, 0, 0, 0, 0, 9, 10, 0, no, 0, 0, 0, weapon, 0, passive,luk, Lucky_Counter //TMW_LUCKY_COUNTER
+352, 0, 0, 0, 0, 0, 9, 10, 0, no, 0, 0, 0, none, 0, passive,agi, Speed //TMW_SPEED
+353, 0, 0, 0, 0, 0, 9, 10, 0, no, 0, 0, 0, none, 0, passive,vit, Poison_Resistance //TMW_POISON_RESISTANCE
+354, 0, 0, 0, 0, 0, 9, 10, 0, no, 0, 0, 0, magic, 0, passive,int, Astral_Soul //TMW_ASTRAL_SOUL
+355, 0, 0, 0, 0, 0, 9, 10, 0, no, 0, 0, 0, weapon, 0, passive,str, Beserking //SKILL_WARRIOR_BERSERK implemented
+500, 0, 0, 0, 0, 0, 0, 2, 0, no, 0, 0, 0, none, 0, no, none, GUILD //EVOL_GUILD
+501, 0, 0, 0, 0, 0, 0, 10, 0, no, 0, 0, 0, none, 0, no, none, CRAFT //EVOL_CRAFT
+502, 0, 0, 0, 0, 0, 0, 20, 0, no, 0, 0, 0, none, 0, no, none, DYE //EVOL_DYE
+
+// maxrse describes the max. level that the skill can be raised to through the `raise skill' option. Further raising has to happen via quests.
+// maxrse < max.
+// `pool' can be `no', `active', or `passive'.
+// `stat' can be `none', `str', `dex', `agi', `vit', `int', `luk'.
diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt
new file mode 100644
index 00000000..006310ce
--- /dev/null
+++ b/db/skill_require_db.txt
@@ -0,0 +1,3 @@
+//id, list_hp, list_sp, list_hp_rate, list_sp_rate, list_zeny, list_weapon, state, spiritball, itemid1, amount1, itemid2, amount2, itemid3, amount3, itemid4, amount4, itemid5, amount5, itemid6, amount6, itemid7, amount7, itemid8, amount8, itemid9, amount9, itemid10, amount10
+142, 0, 3, 0, 0, 0, 99, none, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 //NV_FIRSTAID#}蓖#
+150, 0, 7, 0, 0, 0, 99, none, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 //TF_BACKSLIDING#obNXebv# \ No newline at end of file
diff --git a/db/skill_tree.txt b/db/skill_tree.txt
new file mode 100644
index 00000000..51b14da3
--- /dev/null
+++ b/db/skill_tree.txt
@@ -0,0 +1,15 @@
+// JobNo,Skill-ID,MaxLV,RequiredSkill-ID,RequredSkill-Lv,.v5....J...
+
+//Novice
+0,1,3,0,0,0,0,0,0,0,0,0,0//NV_BASIC # basic skill
+
+// Soul-less
+1,1,9,0,0,0,0,0,0,0,0,0,0//NV_BASIC # basic skill
+1,2,5,0,0,0,0,0,0,0,0,0,0//SM_SWORD # sword damage add skill
+1,4,10,0,0,0,0,0,0,0,0,0,0//SM_RECOVERY # hp regen (requires first aid)
+1,9,10,4,10,0,0,0,0,0,0,0,0//MG_SRECOVERY # sp regen (requies first aid)
+1,36,10,0,0,0,0,0,0,0,0,0,0//MC_INCCARRY # increase max carry weight
+1,37,10,0,0,0,0,0,0,0,0,0,0//MC_DISCOUNT # get cheaper prices from npc
+1,38,10,0,0,0,0,0,0,0,0,0,0//MC_OVERCHARGE # sell stuff for better price to npc
+1,48,10,2,5,0,0,0,0,0,0,0,0//TF_DOUBLE # a chance for double hits, requires sword damage add lvl 5
+1,49,10,2,10,0,0,0,0,0,0,0,0//TF_MISS # increased chance of dodging, requires backsliding \ No newline at end of file
diff --git a/db/statpoint.txt b/db/statpoint.txt
new file mode 100644
index 00000000..b61780d4
--- /dev/null
+++ b/db/statpoint.txt
@@ -0,0 +1,255 @@
+48
+52
+56
+60
+64
+69
+74
+79
+84
+90
+96
+102
+108
+115
+122
+129
+136
+144
+152
+160
+168
+177
+186
+195
+204
+214
+224
+234
+244
+255
+266
+277
+288
+300
+312
+324
+336
+349
+362
+375
+388
+402
+416
+430
+444
+459
+474
+489
+504
+520
+536
+552
+568
+585
+602
+619
+636
+654
+672
+690
+708
+727
+746
+765
+784
+804
+824
+844
+864
+885
+906
+927
+948
+970
+992
+1014
+1036
+1059
+1082
+1105
+1128
+1152
+1176
+1200
+1224
+1249
+1274
+1299
+1324
+1350
+1376
+1402
+1428
+1455
+1482
+1509
+1536
+1564
+1592
+1620
+1648
+1677
+1706
+1735
+1764
+1794
+1824
+1854
+1884
+1915
+1946
+1977
+2008
+2040
+2072
+2104
+2136
+2169
+2202
+2235
+2268
+2302
+2336
+2370
+2404
+2439
+2474
+2509
+2544
+2580
+2616
+2652
+2688
+2725
+2762
+2799
+2836
+2874
+2912
+2950
+2988
+3027
+3066
+3105
+3144
+3184
+3224
+3264
+3304
+3345
+3386
+3427
+3468
+3510
+3552
+3594
+3636
+3679
+3722
+3765
+3808
+3852
+3896
+3940
+3984
+4029
+4074
+4119
+4164
+4210
+4256
+4302
+4348
+4395
+4442
+4489
+4536
+4584
+4632
+4680
+4728
+4777
+4826
+4875
+4924
+4974
+5024
+5074
+5124
+5175
+5226
+5277
+5328
+5380
+5432
+5484
+5536
+5589
+5642
+5695
+5748
+5802
+5856
+5910
+5964
+6019
+6074
+6129
+6184
+6240
+6296
+6352
+6408
+6465
+6522
+6579
+6636
+6694
+6752
+6810
+6868
+6927
+6986
+7045
+7104
+7164
+7224
+7284
+7344
+7405
+7466
+7527
+7588
+7650
+7712
+7774
+7836
+7899
+7962
+8025
+8088
+8152
+8216
+8280
+8344
+8409
+8474
+8539
+8604
+8670
+8736
+8802
+8868
+8935
+9002
diff --git a/gm/.placeholder b/gm/.placeholder
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/gm/.placeholder
diff --git a/langs/lang_el.old b/langs/lang_el.old
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/langs/lang_el.old
diff --git a/langs/lang_el.txt b/langs/lang_el.txt
new file mode 100644
index 00000000..a09684c8
--- /dev/null
+++ b/langs/lang_el.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+*λόξιγκας*
+
+... By the power vested in me,
+... Με την δύναμη μέσα μου,
+
+Ah, she *hips* is here.
+Αχ, αυτή *λόξιγκας* είναι εδώ.
+
+Are you tired of being what you are?
+Έχετε κουραστεί να είσαι αυτό που είσαι;
+
+AreaNPC
+Περιοχή Συστήματος
+
+As you want!
+Όπως θέλετε!
+
+Ash brown
+Καφέ σκόνη
+
+Bald
+Φαλακρός
+
+Bee spawned
+Bee ωοτόκησε
+
+Billy Bons
+Billy Bons
+
+Black
+Μαύρπ
+
+Blaf
+Blaf
+
+Ble *hips*... Imma great sail*hips*or!
+Μπλε *λόξιγκας *... Imma μεγάλο πανί * λόξιγκας* ή !
+
+Blonde
+Ξανθιά
+
+Blue
+Μπλε
+
+Boots
+Μπότες
+
+Bowl cut
+Μπολ κομμένα
+
+Brown
+Καφέ
+
+Brunette
+Μελαχροινή
+
+Bun
+Κότσος
+
+Bunny ears
+Αυτιά απο λαγό
+
+Bye bye!
+Αντίο
+
+Can you do something with my color?
+Μπορείτε να κάνετε κάτι με το χρώμα μου;
+
+Cap
+Καπέλο
+
+Center parting/Short and slick
+Χωρίστρα
+
+Choppy
+Κυματώδης
+
+Combed back
+Χτενισμένα πίσω
+
+Continue?
+Συνέχεια;
+
+Copper
+Χαλκός
+
+Copper red
+Χαλκός κόκκινος
+
+Could I ask you which language do you talk? Like that I add you on the list.
+Θα μπορούσα να σας ρωτήσω ποια γλώσσα μιλάτε; Όπως και ότι μπορώ να σας προσθέσω στη λίστα.
+
+Demon
+Δέμονας
+
+Desert hat
+Καπέλο ερήμου
+
+Devis
+Διάβολοι
+
+Did you bring me @@ @@?#0
+Μου έφερες @@ @@;
+
+Did you bring me @@ @@?#1
+Μου έφερες @@ @@;
+
+Do you know some interesting people around here?
+Γνωρίζετε κάνέναν ενδιαφέρον άνθρωπο εδώ γύρω;
+
+Do you want to create a bee?
+Θέλετε να δημιουργήσετε μια μέλισσα;
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+Μην ανησυχείς,είμαι σίγουρος οτι ολα θα πάνε καλά και για τους δύο μας
+
+Don't you see that I'm already talking?
+Δε βλέπεις οτι μιλάω ήδη?
+
+Done.
+Έγινε
+
+Dyeing failed. You lost dye item.
+Το βάψιμο απέτυχε.Έχασες την βαφή.
+
+Dyer
+Βαφέας
+
+Elmo
+Elmo
+
+Emo
+Emo
+
+Enora
+Enora
+
+Eurni
+Eurni
+
+Eurni the Surgeon
+Eurni ο Χειρουργός
+
+Flat ponytail
+Φαρδιά αλογοουρά
+
+For dye your item, you need white item and dye with required color.
+Για την βαφή το στοιχείο σας, θα πρέπει να έχετε λευκό στοιχείο και βαφής με τα απαιτούμενα χρώμα.
+
+Fushia
+Fushia
+
+Ggrmm grmmm..
+Γκρμμμμ γκρμμμ...
+
+Gloves
+Γάντια
+
+Good job!
+Καλή δουλειά!
+
+Green
+Πράσινο
+
+Hahaha, I won't take much of your time, go ahead!
+Χαχαχα, δεν θα πάρει πολύ από το χρόνο σου, συνέχισε!
+
+He takes a small list and starts reading it.
+Παίρνει μια μικρή λιστα και αρχίζει να την διαβάζει
+
+Headband
+Κεφαλόδεσμος
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+Χεχε. Εγώ, θα προσπαθήσω να ανοίξω μια αγορά, έχω ακούσει ότι είναι μια μεγάλη πόλη του εμπορίου εδώ, λόγω του λιμένα και όλους τους ...
+
+Hello @@
+Γειά @@
+
+Hello dear, what do you want today?#0
+Γεια σου αγαπητέ, τι θέλεις σήμερα;
+
+Hello dear, what do you want today?#1
+Γεια σου αγαπητέ, τι θέλεις σήμερα;
+
+Hello, girl!
+Γειά σου, κορίτσi!
+
+Hello, stranger!
+Γειά σου ξενε
+
+Here is your reward!
+Εδω είναι η αμοιβή σου!
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+Χει! Ναι, είμαι ήδη ξύπνιος. Έτσι, είναι τέλος του μικρού δρόμου μας μαζί, τι θα κάνεις τώρα;
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+Ει! Είδατε;Φτάσαμε στο λιμάνι σήμερα, ήταν πολύ μακριά από το άλλο νησί ...
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+Ει! Είδατε; Φτάσαμε στο λιμάνι σήμερα, ήταν πολύ μακριά από το άλλο νησί ...
+
+Hey, girl!
+Ει, κορίτσι!
+
+Hey, guy!
+Ε,φίλε!
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+Κοίτα την Τζούλια, είναι όμορφη, δεν είναι ; Με κοιτάει για μερικά λεπτά ... χαχα! Καλή τύχη, φίλε μου.
+
+Hey, you lied to me.
+Έι,μου είπες ψέματα!
+
+Hmm, I'm fine for now, thank you.
+Χμμ,είμαι εντάξει προς το παρόν,ευχαριστώ.
+
+How can I get it
+Πως μπορώ να το αποκτήσω
+
+I can!
+Μπορώ!
+
+I don't need your help right now, come back later.
+Δεν χρειάζομαι την βοηθειά σου τώρα,ελα ξανά αργότερα.
+
+I don't want change my language, sorry.
+Δεν θέλω να αλλάξω την γλώσσα μου,συγνώμη.
+
+I gave you a reward. I can't give you more.
+Σου έδωσα μια ανταμοιβή. Δεν μπορώ να σου δώσω περισσότερες.
+
+I made a mistake, I would like to change my language.#0
+Έκανα ενα λάθος,θα ήθελα να αλλάξω την γλώσσα μου.
+
+I made a mistake, I would like to change my language.#1
+Έκανα λάθος,θα ήθελα να αλλάξω τη γλώσσα μου
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+Χρειάζομαι βοήθεια για τον καθαρισμό των σφήνα του πλοίου, αλλά δεν είσαι αρκετά δυνατός για να με βοηθήσεις.
+
+I need somebody who can clean the bottom of the ship, can you help me?
+Χρειάζομαι κάποιον που μπορεί να καθαρίσει τον πάτο του πλοίου,μπορείς να με βοηθήσεις?
+
+I sentence you to death... twice.
+Σε προτείνω στο θάνατο ... δύο φορές.
+
+I speak Dutch
+Μιλάω Ολλανδικά
+
+I speak English
+Μιλάω Αγγλικά
+
+I speak Flemish
+Μιλάω Φλάνδρας
+
+I speak French
+Μιλάω Γαλλικά
+
+I speak Greek
+
+
+I speak Indonesian
+
+
+I speak Italian
+Μιλάω Ιταλικά
+
+I speak Russian
+Μιλάω Ρώσικα
+
+I speak Spanish
+Μιλάω Ισπανικά
+
+I think that I will explore around a bit and see what I can find, and you?
+Νομίζω ότι θα διερευνήσει γύρω από λίγο και να δω τι μπορώ να βρω, εσείς και;
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+Νομίζω ότι το πλοίο θα εξακολουθεί να είναι εδώ και αρκετό καιρό, χρειαζόμαστε πολλή τροφή και το πλοίο μας, χρειάζεται κάποια επισκευή πριν επιστρέψει στη θάλασσα.
+
+I think you can help me, right?
+Νομίζω οτι μπορείς να με βοηθήσεις,σωστά?
+
+I want to be a Human
+Θέλω να γίνω άνθρωπος
+
+I want to be a Ifitron
+Θέλω να γίνω Ifitron
+
+I want to be a Orc
+Θέλω να γίνω Orc
+
+I want to be a Sparron
+Θέλω να γίνω Sparron
+
+I want to be a Ukar
+Θέλω να γίνω ένας Ukar
+
+I want to dye to different color
+Θέλω να το βάψω σε διαφορετικό χρώμα
+
+I will give you @@gp.
+Θα σου δώσω @@ χρήματα.
+
+I will need some coffee...
+Θα χρειαστώ λίγο καφέ
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+Θα ξεκουραστώ λίγο εδώ ή στην πόλη, δεν αισθάνομαι και τόσο καλά μετά από αυτό το ταξίδι ...
+
+I will!
+Θα το κάνω!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+Αναρωτιέμαι γι 'αυτό, νομίζω ότι θα ανακαλύψω σιγά-σιγά και θα δούμε τι θα συμβεί!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+Αναρωτιέμαι γι 'αυτό, νομίζω ότι θα το ανακαλύψετε σιγά-σιγά και να δούμε τι θα συμβεί!
+
+I'd like to get a different style.
+Θα ήθελα να πάρει ένα διαφορετικό ύφος.
+
+I'll come visit! I hope that this island will give us what we're looking for...
+Θα έρθω για επίσκεψη! Ελπίζω ότι αυτό το νησί θα μας δώσει ό, τι ψάχνουμε ...
+
+I'll get it!#0
+Θα το πάρω
+
+I'll get it!#1
+Θα το πάρω!
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+Είμαι η Τζούλια, η δουλειά μου είναι να εγγράφω κάθε σώμα το οποίο μπαίνει ή βγαίνει από το πλοίο.
+
+I'm busy#0
+Είμαι απασχολημένος
+
+I'm busy#1
+Είμαι απασχολημένος
+
+I've a girlfriend, and she needs me to do something unavailable.
+Έχω μια φίλη, και με χρειάζεται για να της κάνω κάτι,το οποίο δεν είμαι διαθέσιμος να κάνω.
+
+If you dont have it, then you cant dye.
+Εάν δεν το έχεις,τότε δε μπορείς να το χρωματίσεις
+
+Imperial
+Αυτοκρατορικός
+
+Infinitely long
+Απείρως μακρά
+
+It's *hips* wrong, Imma not *hips* drunken.
+Είναι *λόξιγκας * λάθος, Imma δεν * λόξιγκας* μεθυσμένος.
+
+Julia
+Julia
+
+Khaki
+Χακί
+
+Kota
+Kota
+
+Leave alone my family treasure!
+Άσε ύσηχο τον οικογενειακό μου θυσαυρό!
+
+Leave it
+Ασ'το
+
+Let me see your work...
+Επιτρέψτε μου να δω τη δουλειά σου ...
+
+Let me sleep...
+Άφησε με να κοιμηθώ ...
+
+Let me think...
+Ασε με να σκεφτώ
+
+Lettuce
+Μαρούλι
+
+Lime
+Άσβεστος
+
+Lloyd
+Lloyd
+
+Long and curly
+Μακριά και σγουρά
+
+Long and slick
+Μακρής και λείος
+
+Long ponytail
+Μακριά αλογοουρά
+
+Make less noise, please.
+Κάνε λιγότερο θόρυβο, παρακαλώ.
+
+Mane
+Χαίτη
+
+Marko
+Marko
+
+Mauve
+Μοβ
+
+Maybe you will be the next?#0
+Ίσως να είσαι ο επόμενος?
+
+Maybe you will be the next?#1
+Ίσως εσυ να είσαι ο επόμενος;
+
+Mini-skirt
+Μίνι φούστα
+
+Mohawk
+Mohawk
+
+Move along, kid.
+Προχώρα, μικρέ.
+
+Navy blue
+Βαθυγαλάζιο
+
+No
+Οχι
+
+No problem, do you need something else?
+Κανένα πρόβλημα,χρειάζεστ
+
+No!
+Όχι!
+
+No, thank you
+Όχι,ευχαριστω
+
+No, thanks!
+Οχι, ευχαριστώ!
+
+No, they are way too dangerous for me!
+Όχι, είναι πάρα πολύ επικίνδυνο για μένα!
+
+Not yet.
+Όχι ακόμα
+
+Note
+Σημείωση
+
+Nothing, sorry
+Τίποτα,συγνώμη
+
+Now i have class
+Τώρα έχω τάξη
+
+Of course! Tell me which language you speak.
+Φυσικά!Πες μου τι γλώσσα μιλάς
+
+Off black
+Μαύρο
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+Α αλήθεια;Δεν εχω τον χρόνο τώρα,πρέπει να φύγω.Συγνώμη.
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+Ω, δεν υπάρχει πρόβλημα! Τέλος πάντων, αν έχετε ερωτήσεις, θα πρέπει να δείτε την Τζούλια στην υποδοχή, είναι πολύ καλή!
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+Ω, σε ευχαριστώ! Γιο, τι θα εκάνα χωρίς τη βοήθειά σας. Εντάξει, τα λέμε!
+
+Ok, Done. You need something else?
+Εντάξει,χρειάζεσαι τίποτα αλλο?
+
+Ok, ok. Come back if you change your mind.
+Εντάξει, εντάξει. Γύρνα πίσω, αν αλλάξεις γνώμη.
+
+Ok, thanks
+Εντάξει,ευχαριστώ
+
+Okay, I'm ready to work!#0
+Εντάξει,είμαι έτοιμος για να δουλέψω!
+
+Okay, I'm ready to work!#1
+Εντάξει,είμαι έτοιμος για να δουλέψω!
+
+Okay, you can start!
+Εντάξει,μπορείς να αρχίσεις!
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+Μόλις αυτό γίνει, θα σας διώξουν από το διακομιστή. Μην πανικοβάλλεστε, καθώς όλα είναι καλά.
+
+Orange
+Πορτοκαλί
+
+Pants
+Παντελόνι
+
+Parted
+Χωρισμένος
+
+Perky ponytail
+Ζωηρή αλογοουρά
+
+Peter
+Peter
+
+Pigtails
+Pigtails
+
+Pink
+Ροζ
+
+Please change my race
+Παρακαλώ αλλάξτε την φυλή μου
+
+Please do, my dear
+Παρακαλούμε να κάνετε, αγαπητέ μου
+
+Please select a race
+Παρακαλώ επιλέξτε μια φυλή
+
+Pompadour
+Φουντωτό κτένισμα
+
+Punk
+Πανκ
+
+Purple
+Μωβ
+
+Rabbit ears
+Αυτιά κουνελιού
+
+Read it
+Διαβασέ το
+
+Red
+Κόκκινο
+
+Robe
+Ρόμπα
+
+Ronan
+Ronan
+
+Rrrr pchhhh...
+Ρρρ πςςςςςς...
+
+Scarf
+Κασκόλ
+
+Server
+Διακοσμητής
+
+ServiceNPC
+ServiceNPC
+
+Shop 1
+Μαγαζί 1
+
+Shop 2
+Μαγαζί 2
+
+Shop 3
+Μαγαζί 3
+
+Shop 4
+Μαγαζί 4
+
+Shop 5
+Μαγαζί 5
+
+Shop 6
+Μαγαζί 6
+
+Shop 7
+Μαγαζί 7
+
+Short and curly
+Κοντά και σγουρά
+
+Short punk
+Κοντός πάνκ
+
+Short robe
+Κοντή ρόμπα
+
+Short tank top
+Κοντό μπουστάκι
+
+Shorts
+Σορτς
+
+Silver
+Ασήμι
+
+Skirt
+Φούστα
+
+Sleeping Elf
+Κοιμησμένο Elf
+
+So die already!
+Οπότε ψόφα επιτέλους!
+
+Sorcerer robe
+Ρόμπα Μάγου
+
+Sorry you dont have components.
+Συγνώμη δεν έχετε τα συστατικά.
+
+Surprise me
+Κάνε μου έκπληξη
+
+T-neck sweater
+T-λαιμό πουλόβερ
+
+Tank top
+Κοντό μπλουζάκι
+
+Teal
+Βάσκας
+
+TestNPC
+TestNPC
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+Υπάρχει επίσης @ @ στις αποβάθρες, θα χαιρόταν να σε βοηθήσει!
+
+They are really nice and may help you much more than me.
+Είναι πολύ όμορφο και μπορεί να σας βοηθήσει πολύ περισσότερο από μένα.
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+Αυτό το νησί είναι κάπως αστείο για την έναρξη μια περιπέτειας, και είναι ένα καλό μέρος για να συναντάς ανθρώπους , χαχα!
+
+This note was left by somebody.
+Το σημείωμα αυτό είχε απομείνει από κάποιον.
+
+Tousled layers
+Στρώματα
+
+Turtles drop it. Good luck!
+Οι χελώνες το ρίχνουν. Καλή τύχη!
+
+V-neck sweater
+Πουλόβερ λαιμού
+
+Warin
+Warin
+
+Warning: All characters under this login will be changed.
+Προειδοποίηση: Όλοι οι χαρακτήρες στο πλαίσιο της παρούσας σύνδεσης θα αλλάξουν.
+
+Wave
+Κύμα
+
+Wavy
+Κυματιστός
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+Βρισκόμαστε σε [@@], είναι ένα μεγάλο λιμάνι-πόλη, πολλοί αρχάριοι αρχίσουν την περιπέτεια τους εδώ.
+
+Wedding
+Γάμος
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+Λοιπόν, θα δω τι θα συμβει. Ελπίζω ότι η καλή τύχη θα με ακολουθήσει !
+
+What can I dye for you today?
+Τι μπορώ να βάψω για σας σήμερα;
+
+What color?
+Τι χρώμα;
+
+What do you want to do with it?
+Τι θέλεις να κάνεις με αυτό;
+
+What do you want to dye?
+Τι θέλετε να βάψετε;
+
+What do you want today?
+Τι θέλεις σήμερα;
+
+What do you want?
+Τι θέλεις?
+
+What will you do during this break?
+Τι θα κάνεις κατά τη διάρκεια αυτού του διαλείμματος;
+
+What? Never!
+Τι;Ποτέ!
+
+What? This reward is too small!
+Τι;Η αμοιβή είναι πολύ μικρή!
+
+Where are we?
+Που είμαστε?
+
+Where is this cup?..*hips*
+Πού είναι αυτό το κύπελλο; ..* λόξιγκας *
+
+White
+Άσπρο
+
+Why do you *hips* at me?!
+Γιατί *λόξιγκας* σε μένα;!
+
+Why i cant dye my item?
+Γιατί δεν μπορώ να βάψω το αντικειμενό μου;
+
+Why not, I need to train anyway.
+Γιατί οχι, πρέπει να εκπαιδευτώ έτσι και αλλιώς.
+
+Wild
+Άγρια
+
+Witch hat
+Καπέλο μάγισας
+
+Would you be interested in a race change?
+Θα ενδιαφερόσασταν για μια αλλαγή φυλής?
+
+Would you be interested in a sex change?
+Θα ενδιαφερώσουν για μια αλλαγή φύλου;
+
+Yeah, but what reward will I get?
+Ναι, αλλά τι ανταμοιβή θα πάρω;
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+Ναι, αν θέλετε, εγώ θα ανοίξω μια αγορά σε αυτή την πόλη, ίσως μπορείτε να με επισκεφθείτε-**; Θα μπορούσε να είναι διασκεδαστικό να σε ξαναδώ!
+
+Yellow
+Κίτρινο
+
+Yes
+Ναι
+
+Yes, I can!
+Ναί,μπορώ!
+
+Yes, I did it!#0
+Ναί,το έκανα!
+
+Yes, I did it!#1
+Ναί,το έκανα!
+
+Yes, please!
+Ναί,παρακαλώ!
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+Γιο, το βρήκα, κουλ! Έχω τα πάντα, εκτός από @ @ @ @. Μπορείς να το φέρεις σε μένα;
+
+Yo, can you help me, bro?
+Γιό,μπορείς να με βοηθήσεις αδελφέ;
+
+Yo, can you help me, sis?
+Γιο, μπορείς να με βοηθήσεις, αδελφή;
+
+Yo, do you see what I mean?
+Γιο, βλέπεις τι εννοώ;
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+Γιο, κοίτα: ο φίλος μου με συμβούλεψε να κάνεις ένα δροσερό και γευστικό φαγητό, και μου έδωσε τις οδηγίες.
+
+Yo, now just bring it to me.
+Γιο,τώρα απλά φέρ'το σε εμένα
+
+Yo, thank you!
+Γιο, σε ευχαριστώ!
+
+Yo, that's good that you want to help me.
+Γιo, αυτό είναι καλό ότι θέλεις να με βοηθήσεις.
+
+Yo, you really brought it!
+Γιο,πραγματικά το έφερες!
+
+You can start now.
+Μπορείς να αρχίσεις τώρα.
+
+You can't go there!
+Δεν μπορείς να πας εκεί!
+
+You don't have enough to pay for my services.
+Δεν έχετε αρκετά για να πληρώσει για τις υπηρεσίες μου.
+
+You failed the task!#0
+Απέτυχες στην αποστολή!
+
+You failed the task!#1
+Απέτυχες στην αποστολή!
+
+You should go see the sailors around here.#0
+Θα επρέπε να πάς να συναντήσεις τους ναύτες εδώ γύρω.
+
+You should go see the sailors around here.#1
+Θα επρέπε να πάς να συναντήσεις τους ναύτες εδώ γύρω.
+
+Zzzzzzzzzz
+Ζζζζζζζζζ
+
+is helping me.
+με βοηθάει.
+
diff --git a/langs/lang_en.old b/langs/lang_en.old
new file mode 100644
index 00000000..de38c2f7
--- /dev/null
+++ b/langs/lang_en.old
@@ -0,0 +1,489 @@
+ helps me.
+ helps me.
+
+@@ helps me.
+@@ helps me.
+
+Bla bla bla!
+Bla bla bla!
+
+Blah blah blah!
+Blah blah blah!
+
+Ble ble ble!
+Ble ble ble!
+
+Bli bli bli!
+Bli bli bli!
+
+Blo blo blo!
+Blo blo blo!
+
+Blu blu blu!
+Blu blu blu!
+
+Bly bly bly!
+Bly bly bly!
+
+Can you collect it for me?
+Can you collect it for me?
+
+Can you do something for my color?
+Can you do something for my color?
+
+Dark brown
+Dark brown
+
+Dark purple
+Dark purple
+
+Dark red
+Dark red
+
+Did you bring me 30 @@?#0
+Did you bring me 30 @@?
+
+Did you bring me 30 @@?#1
+Did you bring me 30 @@?
+
+Did you bring me 30 lettuce?
+Did you bring me 30 lettuce?
+
+Did you bring me 30 lettuce?#0
+Did you bring me 30 lettuce?
+
+Did you bring me 30 lettuce?#1
+Did you bring me 30 lettuce?
+
+Did you collect 10 @@?#0
+Did you collect 10 @@?
+
+Did you collect 10 @@?#1
+Did you collect 10 @@?
+
+Did you collect @@ @@?#0
+Did you collect @@ @@?
+
+Did you collect @@ @@?#1
+Did you collect @@ @@?
+
+Do you know some people to met around?
+Do you know some people to met around?
+
+Do you see that sailor?
+Do you see that sailor?
+
+Do you want to create bee?
+Do you want to create bee?
+
+Don't worry, I'm sure that everything will work well for both of us!
+Don't worry, I'm sure that everything will work well for both of us!
+
+Done
+Done
+
+Drunken Sailor
+Drunken Sailor
+
+English
+English
+
+French
+French
+
+Get your reward!
+Get your reward!
+
+Ghmmmmmmmm
+Ghmmmmmmmm
+
+Good luck!
+Good luck!
+
+Good work!
+Good work!
+
+Good work! Get your reward!
+Good work! Get your reward!
+
+Gray
+Gray
+
+Haha, I won't take you much time, go ahead!
+Haha, I won't take you much time, go ahead!
+
+He took a small list began reading it
+He took a small list began reading it
+
+Hehe, me I will try to open a market, I heard that it was a big city of commerce here, because of the port and all..
+Hehe, me I will try to open a market, I heard that it was a big city of commerce here, because of the port and all..
+
+Hehe, you lied to me.
+Hehe, you lied to me.
+
+Hello dear, what do you want today?
+Hello dear, what do you want today?
+
+Hello! Can you help me with the making of my potion?
+Hello! Can you help me with the making of my potion?
+
+Here you are!
+Here you are!
+
+Hey! Yes, I'm already wake up, so, it's end of our little road together, what will you do you now?
+Hey! Yes, I'm already wake up, so, it's end of our little road together, what will you do you now?
+
+Hey! You saw? we are arrived to the port today, it was long from the other island...
+Hey! You saw? we are arrived to the port today, it was long from the other island...
+
+Hey! You saw? we are arrived to the port today, it was long from the other island...#0
+Hey! You saw? we are arrived to the port today, it was long from the other island...
+
+Hey! You saw? we are arrived to the port today, it was long from the other island...#1
+Hey! You saw? we are arrived to the port today, it was long from the other island...
+
+Hey, look Julia, she is beauty eh? She looks at me since some minute... haha! Good luck my friend.
+Hey, look Julia, she is beauty eh? She looks at me since some minute... haha! Good luck my friend.
+
+Hmm, I'm fine for now, thanks you
+Hmm, I'm fine for now, thanks you
+
+I did a mistake, I will like to change my language.
+I did a mistake, I will like to change my language.
+
+I did a mistake, I will like to change my language.#0
+I did a mistake, I will like to change my language.
+
+I did a mistake, I will like to change my language.#1
+I did a mistake, I will like to change my language.
+
+I don't need your help right now. Come later.
+I don't need your help right now. Come later.
+
+I dont want change my language, sorry.
+I dont want change my language, sorry.
+
+I need help for cleaning the wedge of the ship, but you aren't as much strong as I need to help.
+I need help for cleaning the wedge of the ship, but you aren't as much strong as I need to help.
+
+I need somebody who can clean the bottom of the ship, could you help me?
+I need somebody who can clean the bottom of the ship, could you help me?
+
+I think that I will explore the around and see what I can found, and you?
+I think that I will explore the around and see what I can found, and you?
+
+I think that the ship will still here some moments, we need many foods and some reparation for our ship before to go back to the sea.
+I think that the ship will still here some moments, we need many foods and some reparation for our ship before to go back to the sea.
+
+I want change my language
+I want change my language
+
+I want to be a Demon
+I want to be a Demon
+
+I want to be a Elf
+I want to be a Elf
+
+I will like to get different style
+I will like to get different style
+
+I will rest a bit much here or in town, I don't feel so well after this voyage...
+I will rest a bit much here or in town, I don't feel so well after this voyage...
+
+I wonder, I think that I will discover little by little and I will see what happens!
+I wonder, I think that I will discover little by little and I will see what happens!
+
+I wonder, I think that I will discover little by little and I will see what happens!#0
+I wonder, I think that I will discover little by little and I will see what happens!
+
+I wonder, I think that I will discover little by little and I will see what happens!#1
+I wonder, I think that I will discover little by little and I will see what happens!
+
+I'll get it!
+I'll get it!
+
+I'm busy
+I'm busy
+
+If you help me I will give you a reward
+If you help me I will give you a reward
+
+If yuo dont have it, then you cant dye.
+If yuo dont have it, then you cant dye.
+
+In what language are you talking to?
+In what language are you talking to?
+
+In what language are you talking to?#0
+In what language are you talking to?#0
+
+It is very good! To finish my potion I need 10 @@.
+It is very good! To finish my potion I need 10 @@.
+
+It is very good! To finish my potion I need @@ @@.
+It is very good! To finish my potion I need @@ @@.
+
+Italian
+Italian
+
+Langulator
+Langulator
+
+Leave me sleep...
+Leave me sleep...
+
+Let me see at you work...
+Let me see at you work...
+
+Light blonde
+Light blonde
+
+Light purple
+Light purple
+
+Light red
+Light red
+
+Make less noise please.
+Make less noise please.
+
+May be you will be the next?#0
+May be you will be the next?
+
+May be you will be the next?#1
+May be you will be the next?
+
+No, I'll go work
+No, I'll go work
+
+No, it isn't easy to get!
+No, it isn't easy to get!
+
+No, they are too dangerous for me!
+No, they are too dangerous for me!
+
+Of course! Say me which one is yours.
+Of course! Say me which one is yours.
+
+Oh really? I don't got many time right now, I need to go, sorry.
+Oh really? I don't got many time right now, I need to go, sorry.
+
+Oh, no problem! Anyway, if you got something to ask, go see Julia at the reception, she is very nice!
+Oh, no problem! Anyway, if you got something to ask, go see Julia at the reception, she is very nice!
+
+Oh, thank you! Yo, what would I like to do without your help. Ok, see you!
+Oh, thank you! Yo, what would I like to do without your help. Ok, see you!
+
+Ok I will come! I hope that this island will give us what we searched..
+Ok I will come! I hope that this island will give us what we searched..
+
+Ok, Ok. Come back if you change your mind.
+Ok, Ok. Come back if you change your mind.
+
+Okay, I am ready to work!
+Okay, I am ready to work!
+
+Okay, I am ready to work!#0
+Okay, I am ready to work!
+
+Okay, I am ready to work!#1
+Okay, I am ready to work!
+
+Old Witch
+Old Witch
+
+Please select race
+Please select race
+
+Rat Sailor
+Rat Sailor
+
+Russian
+Russian
+
+Sailor Orc
+Sailor Orc
+
+Sitting Sailor
+Sitting Sailor
+
+Sleeping Orc
+Sleeping Orc
+
+Sleeping Ukar
+Sleeping Ukar
+
+Sorry, maybe I can help you later
+Sorry, maybe I can help you later
+
+Spanish
+Spanish
+
+Sure!
+Sure!
+
+Thank you very much! Here is your reward
+Thank you very much! Here is your reward
+
+Thanks for your help!
+Thanks for your help!
+
+They are really nice and will may help you much than me.
+They are really nice and will may help you much than me.
+
+This island is kinda funny for starting adventure, and it's a good place for meeting people too, haha!
+This island is kinda funny for starting adventure, and it's a good place for meeting people too, haha!
+
+Turtle tongue
+Turtle tongue
+
+Turtles drop it. Good luck man!
+Turtles drop it. Good luck man!
+
+We are THERE!
+We are THERE!
+
+We are at [@@], it's a big port-city, many beginners start they adventure here, may be you will be the next?
+We are at [@@], it's a big port-city, many beginners start they adventure here, may be you will be the next?
+
+We are at [@@], it's a big port-city, many beginners start they adventure here.
+We are at [@@], it's a big port-city, many beginners start they adventure here.
+
+We are at [CITY], it's a big port-city, many beginners start they adventure here, may be you will be the next?
+We are at [CITY], it's a big port-city, many beginners start they adventure here, may be you will be the next?
+
+Well, I will see! I hope that the luck will follow me!
+Well, I will see! I hope that the luck will follow me!
+
+What language do you want?
+What language do you want?
+
+What? It is a very small reward!
+What? It is a very small reward!
+
+Why not, I need to train.
+Why not, I need to train.
+
+Would you maybe be interested in a race change?
+Would you maybe be interested in a race change?
+
+Would you maybe be interested in a sex change?
+Would you maybe be interested in a sex change?
+
+Yeah, but which reward I will get?
+Yeah, but which reward I will get?
+
+Yeah, if you want, I will open a market in this town, may you can visit me? It could be fun to see you again!
+Yeah, if you want, I will open a market in this town, may you can visit me? It could be fun to see you again!
+
+Yes, I did it!
+Yes, I did it!
+
+Yo, I found it cool! I have everything, except 30 @@. Can you bring it to me?
+Yo, I found it cool! I have everything, except 30 @@. Can you bring it to me?
+
+Yo, I found it cool! I have everything, except 30 lettuce. Can you bring it to me?
+Yo, I found it cool! I have everything, except 30 lettuce. Can you bring it to me?
+
+Yo, I found it cool! I have everything, except @@ @@. Can you bring it to me?
+Yo, I found it cool! I have everything, except @@ @@. Can you bring it to me?
+
+Yo, can you help me bro?
+Yo, can you help me bro?
+
+Yo, can you help me sis?
+Yo, can you help me sis?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me an instructions.
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me an instructions.
+
+You didn't collect all the items!#0
+You didn't collect all the items!
+
+You didn't collect all the items!#1
+You didn't collect all the items!
+
+You failed the task!
+You failed the task!
+
+You got also @@, on the Dock, it will be a pleasure for her to help you!
+You got also @@, on the Dock, it will be a pleasure for her to help you!
+
+You got also Enora, on the Dock, it will be a pleasure for her to help you!
+You got also Enora, on the Dock, it will be a pleasure for her to help you!
+
+You should go see sailors around, they are really nice and will may you help you much than me.
+You should go see sailors around, they are really nice and will may you help you much than me.
+
+You should go see sailors around.#0
+You should go see sailors around.
+
+You should go see sailors around.#1
+You should go see sailors around.
+
+bla
+bla
+
+bla bla
+bla bla
+
+bla bla bla
+bla bla bla
+
+black
+black
+
+blue
+blue
+
+brown
+brown
+
+fushia
+fushia
+
+green
+green
+
+helps me.
+helps me.
+
+khaki
+khaki
+
+lettuce
+lettuce
+
+lime
+lime
+
+navy blue
+navy blue
+
+navyblue
+navyblue
+
+no
+no
+
+orange
+orange
+
+purple
+purple
+
+red
+red
+
+silver
+silver
+
+teal
+teal
+
+yellow
+yellow
+
+yes
+yes
+
diff --git a/langs/lang_en.txt b/langs/lang_en.txt
new file mode 100644
index 00000000..52b9b4b6
--- /dev/null
+++ b/langs/lang_en.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+*hips*
+
+... By the power vested in me,
+... By the power vested in me,
+
+Ah, she *hips* is here.
+Ah, she *hips* is here.
+
+Are you tired of being what you are?
+Are you tired of being what you are?
+
+AreaNPC
+AreaNPC
+
+As you want!
+As you want!
+
+Ash brown
+Ash brown
+
+Bald
+Bald
+
+Bee spawned
+Bee spawned
+
+Billy Bons
+Billy Bons
+
+Black
+Black
+
+Blaf
+Blaf
+
+Ble *hips*... Imma great sail*hips*or!
+Ble *hips*... Imma great sail*hips*or!
+
+Blonde
+Blonde
+
+Blue
+Blue
+
+Boots
+Boots
+
+Bowl cut
+Bowl cut
+
+Brown
+Brown
+
+Brunette
+Brunette
+
+Bun
+Bun
+
+Bunny ears
+Bunny ears
+
+Bye bye!
+Bye bye!
+
+Can you do something with my color?
+Can you do something with my color?
+
+Cap
+Cap
+
+Center parting/Short and slick
+Center parting/Short and slick
+
+Choppy
+Choppy
+
+Combed back
+Combed back
+
+Continue?
+Continue?
+
+Copper
+Copper
+
+Copper red
+Copper red
+
+Could I ask you which language do you talk? Like that I add you on the list.
+Could I ask you which language do you talk? Like that I add you on the list.
+
+Demon
+Demon
+
+Desert hat
+Desert hat
+
+Devis
+Devis
+
+Did you bring me @@ @@?#0
+Did you bring me @@ @@?
+
+Did you bring me @@ @@?#1
+Did you bring me @@ @@?
+
+Do you know some interesting people around here?
+Do you know some interesting people around here?
+
+Do you want to create a bee?
+Do you want to create a bee?
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+Don't worry, I'm sure that everything will turn out well for the both of us!
+
+Don't you see that I'm already talking?
+Don't you see that I'm already talking?
+
+Done.
+Done.
+
+Dyeing failed. You lost dye item.
+Dyeing failed. You lost dye item.
+
+Dyer
+Dyer
+
+Elmo
+Elmo
+
+Emo
+Emo
+
+Enora
+Enora
+
+Eurni
+Eurni
+
+Eurni the Surgeon
+Eurni the Surgeon
+
+Flat ponytail
+Flat ponytail
+
+For dye your item, you need white item and dye with required color.
+For dye your item, you need white item and dye with required color.
+
+Fushia
+Fushia
+
+Ggrmm grmmm..
+Ggrmm grmmm..
+
+Gloves
+Gloves
+
+Good job!
+Good job!
+
+Green
+Green
+
+Hahaha, I won't take much of your time, go ahead!
+Hahaha, I won't take much of your time, go ahead!
+
+He takes a small list and starts reading it.
+He takes a small list and starts reading it.
+
+Headband
+Headband
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+
+Hello @@
+Hello @@
+
+Hello dear, what do you want today?#0
+Hello dear, what do you want today?
+
+Hello dear, what do you want today?#1
+Hello dear, what do you want today?
+
+Hello, girl!
+Hello, girl!
+
+Hello, stranger!
+Hello, stranger!
+
+Here is your reward!
+Here is your reward!
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...
+
+Hey, girl!
+Hey, girl!
+
+Hey, guy!
+Hey, guy!
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+
+Hey, you lied to me.
+Hey, you lied to me.
+
+Hmm, I'm fine for now, thank you.
+Hmm, I'm fine for now, thank you.
+
+How can I get it
+How can I get it
+
+I can!
+I can!
+
+I don't need your help right now, come back later.
+I don't need your help right now, come back later.
+
+I don't want change my language, sorry.
+I don't want change my language, sorry.
+
+I gave you a reward. I can't give you more.
+I gave you a reward. I can't give you more.
+
+I made a mistake, I would like to change my language.#0
+I made a mistake, I would like to change my language.
+
+I made a mistake, I would like to change my language.#1
+I made a mistake, I would like to change my language.
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+
+I need somebody who can clean the bottom of the ship, can you help me?
+I need somebody who can clean the bottom of the ship, can you help me?
+
+I sentence you to death... twice.
+I sentence you to death... twice.
+
+I speak Dutch
+I speak Dutch
+
+I speak English
+I speak English
+
+I speak Flemish
+I speak Flemish
+
+I speak French
+I speak French
+
+I speak Greek
+I speak Greek
+
+I speak Indonesian
+I speak Indonesian
+
+I speak Italian
+I speak Italian
+
+I speak Russian
+I speak Russian
+
+I speak Spanish
+I speak Spanish
+
+I think that I will explore around a bit and see what I can find, and you?
+I think that I will explore around a bit and see what I can find, and you?
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+
+I think you can help me, right?
+I think you can help me, right?
+
+I want to be a Human
+I want to be a Human
+
+I want to be a Ifitron
+I want to be a Ifitron
+
+I want to be a Orc
+I want to be a Orc
+
+I want to be a Sparron
+I want to be a Sparron
+
+I want to be a Ukar
+I want to be a Ukar
+
+I want to dye to different color
+I want to dye to different color
+
+I will give you @@gp.
+I will give you @@gp.
+
+I will need some coffee...
+I will need some coffee...
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+I will rest a bit here or in the town, I don't feel so well after this trip...
+
+I will!
+I will!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+I wonder about that, I think I'll discover bit by bit and see what happens!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+I wonder about that, I think I'll discover bit by bit and see what happens!
+
+I'd like to get a different style.
+I'd like to get a different style.
+
+I'll come visit! I hope that this island will give us what we're looking for...
+I'll come visit! I hope that this island will give us what we're looking for...
+
+I'll get it!#0
+I'll get it!
+
+I'll get it!#1
+I'll get it!
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+I'm Julia, my job is to register every body which enter or exit the ship.
+
+I'm busy#0
+I'm busy
+
+I'm busy#1
+I'm busy
+
+I've a girlfriend, and she needs me to do something unavailable.
+I've a girlfriend, and she needs me to do something unavailable.
+
+If you dont have it, then you cant dye.
+If you dont have it, then you cant dye.
+
+Imperial
+Imperial
+
+Infinitely long
+Infinitely long
+
+It's *hips* wrong, Imma not *hips* drunken.
+It's *hips* wrong, Imma not *hips* drunken.
+
+Julia
+Julia
+
+Khaki
+Khaki
+
+Kota
+Kota
+
+Leave alone my family treasure!
+Leave alone my family treasure!
+
+Leave it
+Leave it
+
+Let me see your work...
+Let me see your work...
+
+Let me sleep...
+Let me sleep...
+
+Let me think...
+Let me think...
+
+Lettuce
+Lettuce
+
+Lime
+Lime
+
+Lloyd
+Lloyd
+
+Long and curly
+Long and curly
+
+Long and slick
+Long and slick
+
+Long ponytail
+Long ponytail
+
+Make less noise, please.
+Make less noise, please.
+
+Mane
+Mane
+
+Marko
+Marko
+
+Mauve
+Mauve
+
+Maybe you will be the next?#0
+Maybe you will be the next?
+
+Maybe you will be the next?#1
+Maybe you will be the next?
+
+Mini-skirt
+Mini-skirt
+
+Mohawk
+Mohawk
+
+Move along, kid.
+Move along, kid.
+
+Navy blue
+Navy blue
+
+No
+No
+
+No problem, do you need something else?
+No problem, do you need something else?
+
+No!
+No!
+
+No, thank you
+No, thank you
+
+No, thanks!
+No, thanks!
+
+No, they are way too dangerous for me!
+No, they are way too dangerous for me!
+
+Not yet.
+Not yet.
+
+Note
+Note
+
+Nothing, sorry
+Nothing, sorry
+
+Now i have class
+Now i have class
+
+Of course! Tell me which language you speak.
+Of course! Tell me which language you speak.
+
+Off black
+Off black
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+Oh really? I don't have much time right now, I need to go. Sorry.
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+
+Ok, Done. You need something else?
+Ok, Done. You need something else?
+
+Ok, ok. Come back if you change your mind.
+Ok, ok. Come back if you change your mind.
+
+Ok, thanks
+Ok, thanks
+
+Okay, I'm ready to work!#0
+Okay, I'm ready to work!
+
+Okay, I'm ready to work!#1
+Okay, I'm ready to work!
+
+Okay, you can start!
+Okay, you can start!
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+
+Orange
+Orange
+
+Pants
+Pants
+
+Parted
+Parted
+
+Perky ponytail
+Perky ponytail
+
+Peter
+Peter
+
+Pigtails
+Pigtails
+
+Pink
+Pink
+
+Please change my race
+Please change my race
+
+Please do, my dear
+Please do, my dear
+
+Please select a race
+Please select a race
+
+Pompadour
+Pompadour
+
+Punk
+Punk
+
+Purple
+Purple
+
+Rabbit ears
+Rabbit ears
+
+Read it
+Read it
+
+Red
+Red
+
+Robe
+Robe
+
+Ronan
+Ronan
+
+Rrrr pchhhh...
+Rrrr pchhhh...
+
+Scarf
+Scarf
+
+Server
+Server
+
+ServiceNPC
+ServiceNPC
+
+Shop 1
+Shop 1
+
+Shop 2
+Shop 2
+
+Shop 3
+Shop 3
+
+Shop 4
+Shop 4
+
+Shop 5
+Shop 5
+
+Shop 6
+Shop 6
+
+Shop 7
+Shop 7
+
+Short and curly
+Short and curly
+
+Short punk
+Short punk
+
+Short robe
+Short robe
+
+Short tank top
+Short tank top
+
+Shorts
+Shorts
+
+Silver
+Silver
+
+Skirt
+Skirt
+
+Sleeping Elf
+Sleeping Elf
+
+So die already!
+So die already!
+
+Sorcerer robe
+Sorcerer robe
+
+Sorry you dont have components.
+Sorry you dont have components.
+
+Surprise me
+Surprise me
+
+T-neck sweater
+T-neck sweater
+
+Tank top
+Tank top
+
+Teal
+Teal
+
+TestNPC
+TestNPC
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+There is also @@ on the docks, it will be a pleasure for her to help you!
+
+They are really nice and may help you much more than me.
+They are really nice and may help you much more than me.
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+
+This note was left by somebody.
+This note was left by somebody.
+
+Tousled layers
+Tousled layers
+
+Turtles drop it. Good luck!
+Turtles drop it. Good luck!
+
+V-neck sweater
+V-neck sweater
+
+Warin
+Warin
+
+Warning: All characters under this login will be changed.
+Warning: All characters under this login will be changed.
+
+Wave
+Wave
+
+Wavy
+Wavy
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+
+Wedding
+Wedding
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+Well, I'll see what happens. I hope that good luck will follow me around!
+
+What can I dye for you today?
+What can I dye for you today?
+
+What color?
+What color?
+
+What do you want to do with it?
+What do you want to do with it?
+
+What do you want to dye?
+What do you want to dye?
+
+What do you want today?
+What do you want today?
+
+What do you want?
+What do you want?
+
+What will you do during this break?
+What will you do during this break?
+
+What? Never!
+What? Never!
+
+What? This reward is too small!
+What? This reward is too small!
+
+Where are we?
+Where are we?
+
+Where is this cup?..*hips*
+Where is this cup?..*hips*
+
+White
+White
+
+Why do you *hips* at me?!
+Why do you *hips* at me?!
+
+Why i cant dye my item?
+Why i cant dye my item?
+
+Why not, I need to train anyway.
+Why not, I need to train anyway.
+
+Wild
+Wild
+
+Witch hat
+Witch hat
+
+Would you be interested in a race change?
+Would you be interested in a race change?
+
+Would you be interested in a sex change?
+Would you be interested in a sex change?
+
+Yeah, but what reward will I get?
+Yeah, but what reward will I get?
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+
+Yellow
+Yellow
+
+Yes
+Yes
+
+Yes, I can!
+Yes, I can!
+
+Yes, I did it!#0
+Yes, I did it!
+
+Yes, I did it!#1
+Yes, I did it!
+
+Yes, please!
+Yes, please!
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+
+Yo, can you help me, bro?
+Yo, can you help me, bro?
+
+Yo, can you help me, sis?
+Yo, can you help me, sis?
+
+Yo, do you see what I mean?
+Yo, do you see what I mean?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+
+Yo, now just bring it to me.
+Yo, now just bring it to me.
+
+Yo, thank you!
+Yo, thank you!
+
+Yo, that's good that you want to help me.
+Yo, that's good that you want to help me.
+
+Yo, you really brought it!
+Yo, you really brought it!
+
+You can start now.
+You can start now.
+
+You can't go there!
+You can't go there!
+
+You don't have enough to pay for my services.
+You don't have enough to pay for my services.
+
+You failed the task!#0
+You failed the task!
+
+You failed the task!#1
+You failed the task!
+
+You should go see the sailors around here.#0
+You should go see the sailors around here.
+
+You should go see the sailors around here.#1
+You should go see the sailors around here.
+
+Zzzzzzzzzz
+Zzzzzzzzzz
+
+is helping me.
+is helping me.
+
diff --git a/langs/lang_es.old b/langs/lang_es.old
new file mode 100644
index 00000000..163a8f51
--- /dev/null
+++ b/langs/lang_es.old
@@ -0,0 +1,33 @@
+Done
+Hecho
+
+English
+Inglés
+
+French
+Francés
+
+I want change my language
+Quiero cambiar el idioma
+
+I want to be a Demon
+Quiero ser un Demonio
+
+I want to be a Elf
+Quiero ser un Elfo
+
+Italian
+Italiano
+
+Russian
+Ruso
+
+Spanish
+Español
+
+What language do you want?
+¿Qué idioma deseas?
+
+Are you tired of being what you are?
+¿Estás cansado de ser lo que eres?
+
diff --git a/langs/lang_es.txt b/langs/lang_es.txt
new file mode 100644
index 00000000..0298e839
--- /dev/null
+++ b/langs/lang_es.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+*hips*
+
+... By the power vested in me,
+... Por el poder que me confiere,
+
+Ah, she *hips* is here.
+Ah, ella *hips* está aquí.
+
+Are you tired of being what you are?
+¿Estás cansado de ser lo que eres?
+
+AreaNPC
+AreaNPC
+
+As you want!
+¡Como quieras!
+
+Ash brown
+Ceniza marrón
+
+Bald
+Calvo
+
+Bee spawned
+Abeja generada
+
+Billy Bons
+Billy Bons
+
+Black
+Negro
+
+Blaf
+Blaf
+
+Ble *hips*... Imma great sail*hips*or!
+Ble *hips*... ¡Imma gran mari-*hips*-nero!
+
+Blonde
+Rubio
+
+Blue
+Azul
+
+Boots
+Botas
+
+Bowl cut
+Corte de cuenco
+
+Brown
+Marrón
+
+Brunette
+Moreno
+
+Bun
+Moño
+
+Bunny ears
+Orejas de conejito
+
+Bye bye!
+¡Hasta luego!
+
+Can you do something with my color?
+¿Puedes hacer algo con mi color?
+
+Cap
+Gorra
+
+Center parting/Short and slick
+Separación en el centro / Corto y alisado
+
+Choppy
+Encrespado
+
+Combed back
+Peinado hacia atrás
+
+Continue?
+¿Continuar?
+
+Copper
+Cobre
+
+Copper red
+Cobre rojo
+
+Could I ask you which language do you talk? Like that I add you on the list.
+¿Puedo preguntarte qué idioma hablas? Así te agregaré en la lista.
+
+Demon
+Demonio
+
+Desert hat
+Sombrero del decierto
+
+Devis
+Devis
+
+Did you bring me @@ @@?#0
+¿Me trajiste @@ @@?
+
+Did you bring me @@ @@?#1
+¿Me trajiste @@ @@?
+
+Do you know some interesting people around here?
+¿Conoces alguna gente interesante por aquí?
+
+Do you want to create a bee?
+¿Deseas crear una abeja?
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+No se preocupe, ¡estoy seguro de que todo se tornará bien para ambos de nosotros!
+
+Don't you see that I'm already talking?
+¿No ves que ya estoy hablando?
+
+Done.
+Hecho.
+
+Dyeing failed. You lost dye item.
+Tintura fallida. Pierdes el tinte.
+
+Dyer
+Tintorero
+
+Elmo
+Elmo
+
+Emo
+Emo
+
+Enora
+Enora
+
+Eurni
+Eurni
+
+Eurni the Surgeon
+Eurni el Cirujano
+
+Flat ponytail
+Cola de caballo liso
+
+For dye your item, you need white item and dye with required color.
+Para teñir tu artículo necesitas el artículo en blanco y la tinta con el color requerido.
+
+Fushia
+Fuxia
+
+Ggrmm grmmm..
+Ggrmm grmmm..
+
+Gloves
+Guantes
+
+Good job!
+¡Buen trabajo!
+
+Green
+Verde
+
+Hahaha, I won't take much of your time, go ahead!
+Ja, ja, ja... No tomaré mucho de tu tiempo. ¡Sígue adelante!
+
+He takes a small list and starts reading it.
+Él toma una pequeña lista y comienza a leerla.
+
+Headband
+Cinta de pelo
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+Je je... Yo... Yo trataré de abrir un mercado. Tengo la sensación de que ésta es una gran ciudad de comercio, porque del puerto y todo...
+
+Hello @@
+Hola @@
+
+Hello dear, what do you want today?#0
+Hola querida, ¿que te trae por aquí hoy?
+
+Hello dear, what do you want today?#1
+Hola querido, ¿que te trae por aquí hoy?
+
+Hello, girl!
+¡Hola, chica!
+
+Hello, stranger!
+¡Hola, desconocido!
+
+Here is your reward!
+¡Aquí está tu recompensa!
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+¡Hey! Sí, ya estoy despierto. Entonces... éste es el fin de nuestro pequeño camino juntos. ¿Qué harás ahora?
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+¡Hey! ¿Viste? Hemos llegado al puerto hoy. Ha sido un largo viaje desde la otra isla...
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+¡Hey! ¿Viste? Hemos llegado al puerto hoy. Ha sido un largo viaje desde la otra isla...
+
+Hey, girl!
+¡Hey, chica!
+
+Hey, guy!
+¡Oye, chico!
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+Hey, mira a Julia... ¿No es una belleza? Ella ha estado mirandome por algunos minutos ahora... ¡ja ja! Buena suerte, mi amigo.
+
+Hey, you lied to me.
+Hey, me has mentido.
+
+Hmm, I'm fine for now, thank you.
+Hmm... Estoy bien por ahora, gracias.
+
+How can I get it
+Cómo puedo conseguirlo
+
+I can!
+¡Yo puedo!
+
+I don't need your help right now, come back later.
+No necesito tu ayuda en este momento; vuelve más tarde.
+
+I don't want change my language, sorry.
+No quiero cambiar mi idioma, lo siento.
+
+I gave you a reward. I can't give you more.
+Te dí una recompensa; no puedo date más.
+
+I made a mistake, I would like to change my language.#0
+He cometido un error. Me gustaría cambiar mi lenguaje.
+
+I made a mistake, I would like to change my language.#1
+He cometido un error. Me gustaría cambiar mi lenguaje.
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+Yo necesito ayuda para limpiar la cuña del barco, pero no eres lo suficientemente fuerte para ayudarme.
+
+I need somebody who can clean the bottom of the ship, can you help me?
+Necesito a alguien que pueda limpiar el fondo del barco. ¿Puedes ayudarme?
+
+I sentence you to death... twice.
+Te sentencié hasta morir... dos veces.
+
+I speak Dutch
+Yo hablo Holandés
+
+I speak English
+Yo hablo Inglés
+
+I speak Flemish
+Yo hablo Flamenco
+
+I speak French
+Yo hablo Francés
+
+I speak Greek
+
+
+I speak Indonesian
+
+
+I speak Italian
+Yo hablo Italiano
+
+I speak Russian
+Yo hablo Ruso
+
+I speak Spanish
+Yo hablo Español
+
+I think that I will explore around a bit and see what I can find, and you?
+Pienso que exploraré cerca de aquí a ver que puedo encontrar. ¿Y tú?
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+Pienso que el barco se quedará atracado aquí por algún tiempo; necesitamos un lote de comida y nuestras naves necesitan reparaciones antes de regresar al mar.
+
+I think you can help me, right?
+Pienso que puedes ayudarme, ¿cierto?
+
+I want to be a Human
+Quiero ser un Humano
+
+I want to be a Ifitron
+Quiero ser un Ifitron
+
+I want to be a Orc
+Quiero ser un Orc
+
+I want to be a Sparron
+Quiero ser un Sparron
+
+I want to be a Ukar
+Quiero ser un Ukar
+
+I want to dye to different color
+Quiero teñir con color diferente
+
+I will give you @@gp.
+Te daré @@gp.
+
+I will need some coffee...
+Necesitaré un poco de café...
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+Descanzaré un poco aquí o en la ciudad; no me siento muy bien después de este viaje...
+
+I will!
+¡Quiero!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+Me extraño respecto a eso... ¡Pienso descubrir poco a poco y ver que pasa!#0
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+Me extraño respecto a eso... ¡Pienso descubrir poco a poco y ver que pasa!#1
+
+I'd like to get a different style.
+Me gustaría conseguir un estilo diferente.
+
+I'll come visit! I hope that this island will give us what we're looking for...
+¡Vendré de visita! Espero que esta isla nos provea lo que estamos buscando...
+
+I'll get it!#0
+¡Lo conseguiré!
+
+I'll get it!#1
+¡Lo conseguiré!
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+Soy Julia. Mi trabajo es registrar a cualquiera que entre o salga del barco.
+
+I'm busy#0
+Estoy ocupado
+
+I'm busy#1
+Estoy ocupado
+
+I've a girlfriend, and she needs me to do something unavailable.
+Tengo una novia, y ella me necesita para hacer algo... no disponible.
+
+If you dont have it, then you cant dye.
+Si no lo tienes, entonces no puedes teñir.
+
+Imperial
+Imperial
+
+Infinitely long
+Infinitamente largo
+
+It's *hips* wrong, Imma not *hips* drunken.
+Está *hips* mal. Imma no *hips* ebrio.
+
+Julia
+Julia
+
+Khaki
+Kaqui
+
+Kota
+Kota
+
+Leave alone my family treasure!
+¡No me toques, todo está en su sitio!
+
+Leave it
+Dejarlo
+
+Let me see your work...
+Déjame ver tu trabajo...
+
+Let me sleep...
+Déjame dormir...
+
+Let me think...
+Déjame pensar...
+
+Lettuce
+Lechuga
+
+Lime
+Lima
+
+Lloyd
+Lloyd
+
+Long and curly
+Largo y rizado
+
+Long and slick
+Largo y corrido
+
+Long ponytail
+Cola de caballo largo
+
+Make less noise, please.
+Hagan menos bulla, por favor.
+
+Mane
+Melena
+
+Marko
+Marko
+
+Mauve
+Malva
+
+Maybe you will be the next?#0
+¿Tal vez tú serás el siguiente?
+
+Maybe you will be the next?#1
+¿Tal vez tú serás el siguiente?
+
+Mini-skirt
+Mini-falda
+
+Mohawk
+Mohawk
+
+Move along, kid.
+Largo de aquí, niño.
+
+Navy blue
+Azul marino
+
+No
+No
+
+No problem, do you need something else?
+No hay problema. ¿Necesitas algo más?
+
+No!
+¡No!
+
+No, thank you
+No, gracias
+
+No, thanks!
+¡No, gracias!
+
+No, they are way too dangerous for me!
+¡No, ellos también son muy peligrosos para mí!
+
+Not yet.
+Todavía no.
+
+Note
+Nota
+
+Nothing, sorry
+Nada, lo siento
+
+Now i have class
+Ahora estoy en clase
+
+Of course! Tell me which language you speak.
+¡Por supuesto! Dime qué idioma hablas.
+
+Off black
+Negro apagado
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+¿En serio? Yo no tengo mucho tiempo en este momento; necesito irme. Lo siento.
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+Oh, ¡no hay problema! De cualquier forma, si tienes preguntas, debería ir a ver a Julia en la recepción; ¡ella es muy simpática!
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+¡Oh, gracias! ¡Oye, qué habria hecho sin tu ayuda...! Bueno... ¡Hasta la vista!
+
+Ok, Done. You need something else?
+Ok. Hecho... ¿Necesitas algo más?
+
+Ok, ok. Come back if you change your mind.
+Esta bien, esta bien. Vuelve si cambias de opinión.
+
+Ok, thanks
+Ok, gracias
+
+Okay, I'm ready to work!#0
+Ok. ¡Estoy listo para trabajar!
+
+Okay, I'm ready to work!#1
+Ok. ¡Estoy listo para trabajar!
+
+Okay, you can start!
+Ok. ¡Puedes comenzar!
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+Cuando se haya hecho, serás expulsado del server. No te asustes, todo es normal.
+
+Orange
+Naranja
+
+Pants
+Pantalones
+
+Parted
+Partido
+
+Perky ponytail
+Cola de caballo gallarda
+
+Peter
+Peter
+
+Pigtails
+Coleta
+
+Pink
+Rosado
+
+Please change my race
+Por favor cambia mi raza
+
+Please do, my dear
+Adelante, hazlo...
+
+Please select a race
+Por favor, escoje una raza.
+
+Pompadour
+Copete
+
+Punk
+Punk
+
+Purple
+Púrpura
+
+Rabbit ears
+Orejas de conejo
+
+Read it
+Leerlo
+
+Red
+Rojo
+
+Robe
+Túnica
+
+Ronan
+Ronan
+
+Rrrr pchhhh...
+Rrrr pchhhh...
+
+Scarf
+Bufanda
+
+Server
+Servidor
+
+ServiceNPC
+ServiceNPC
+
+Shop 1
+Tienda 1
+
+Shop 2
+Tienda 2
+
+Shop 3
+Tienda 3
+
+Shop 4
+Tienda 4
+
+Shop 5
+Tienda 5
+
+Shop 6
+Tienda 6
+
+Shop 7
+Tienda 7
+
+Short and curly
+Corto y rizado
+
+Short punk
+Punk corto
+
+Short robe
+Túnica corta
+
+Short tank top
+Camiseta corta sin mangas
+
+Shorts
+Pantalones cortos
+
+Silver
+Plateado
+
+Skirt
+Falda
+
+Sleeping Elf
+Duende durmiente
+
+So die already!
+¡Así que muere ya!
+
+Sorcerer robe
+Túnica de hechicero
+
+Sorry you dont have components.
+Lo siento, no tienes los ingredientes necesarios.
+
+Surprise me
+Sorpréndeme
+
+T-neck sweater
+Suéter de cuello en T
+
+Tank top
+Camiseta sin mangas
+
+Teal
+Cerceta
+
+TestNPC
+TestNPC
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+¡También hay @@ en los muelles, será un placer para ella para ayudarle!
+
+They are really nice and may help you much more than me.
+Ellos son realmente agradables y pueden ayudarte mucho más que a mí.
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+Esta isla es un tanto divertida para iniciar una aventura, y es un buen lugar para encontrar gente también. ¡Ja ja!
+
+This note was left by somebody.
+Esta nota fue dejada por alguien.
+
+Tousled layers
+Desgreñar capas
+
+Turtles drop it. Good luck!
+La tortuga lo soltó. ¡Buena suerte!
+
+V-neck sweater
+Suéter de cuello en V
+
+Warin
+Warin
+
+Warning: All characters under this login will be changed.
+Atención: Todos los personajes en la cuenta actual serán modificados.
+
+Wave
+Onda
+
+Wavy
+Ondulado
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+Estamos en [@@]. Es un gran puerto-ciudad. Muchos principiantes inician su aventura aquí.
+
+Wedding
+Boda
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+Bueno, veré que pasa. ¡Espero que la buena suerte me seguirá alrededor!
+
+What can I dye for you today?
+¿Qué puedo teñir hoy para tí?
+
+What color?
+¿Qué color?
+
+What do you want to do with it?
+¿Que quieres hacer hacer con ésto?
+
+What do you want to dye?
+¿Qué quieres teñir?
+
+What do you want today?
+¿Qué quieres hoy?
+
+What do you want?
+¿Qué deseas?
+
+What will you do during this break?
+¿Qué harás durante el descanso?
+
+What? Never!
+¿¡Qué!? ¡Nunca!
+
+What? This reward is too small!
+¿¡Qué...!? ¡Esta recompensa es muy pequeña!
+
+Where are we?
+¿Dónde están?
+
+Where is this cup?..*hips*
+¿Dónde está esta copa?..*hips*
+
+White
+Blanco
+
+Why do you *hips* at me?!
+¡¿Por qué lo haces *hips* a mí?!
+
+Why i cant dye my item?
+¿Por qué no puedo teñir mi artículo?
+
+Why not, I need to train anyway.
+Porque no. Necesito entrenar de cualquier forma.
+
+Wild
+Salvaje
+
+Witch hat
+Sombrero de hechicero
+
+Would you be interested in a race change?
+¿Estarías interesado en un cambio de raza?
+
+Would you be interested in a sex change?
+¿Te interesaría un cambio de género (hombre/mujer)?
+
+Yeah, but what reward will I get?
+Sí... pero... ¿qué tendré como reconpensa?
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+Yeah... si quieres, abriré un mercado en ésta ciudad. ¿Tal vez puedes visitarme? ¡Sería divertido verte de nuevo!
+
+Yellow
+Amarillo
+
+Yes
+Sí
+
+Yes, I can!
+¡Sí, sí puedo!
+
+Yes, I did it!#0
+¡Sí, lo hice!
+
+Yes, I did it!#1
+¡Sí, lo hice!
+
+Yes, please!
+¡Sí, por favor!
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+Hu, lo encontré, ¡cool! Tengo todo, excepto @@ @@. ¿Puedes traérmelo?
+
+Yo, can you help me, bro?
+Hu... ¿Puedes ayudarme, hermano?
+
+Yo, can you help me, sis?
+ihu, ¿puedes ayudarme, hermana?
+
+Yo, do you see what I mean?
+Hey, ¿ves lo que trato de decir?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+ihu, mira: mi amigo me aconsejó hacer una comida fresca y sabrosa, y me dio instrucciones.
+
+Yo, now just bring it to me.
+Hey, ahora sólo tráemelo.
+
+Yo, thank you!
+¡ihu, gracias!
+
+Yo, that's good that you want to help me.
+¡Ihu! ¡Qué bueno que quieras ayudarme!
+
+Yo, you really brought it!
+Hu, ¡realmente lo trajistes!
+
+You can start now.
+Puedes iniciar ahora.
+
+You can't go there!
+¡No puedes ir allí!
+
+You don't have enough to pay for my services.
+No tienes suficiente dinero para pagar mis servicios.
+
+You failed the task!#0
+¡Fallaste la asignación!
+
+You failed the task!#1
+¡Fallaste la asignación!#1
+
+You should go see the sailors around here.#0
+Deberías ir a vera los marineros cerca de aquí.
+
+You should go see the sailors around here.#1
+Deberías ir a vera los marineros cerca de aquí.
+
+Zzzzzzzzzz
+Zzzzzzzzzz
+
+is helping me.
+está ayudándome.
+
diff --git a/langs/lang_fr.old b/langs/lang_fr.old
new file mode 100644
index 00000000..50033c75
--- /dev/null
+++ b/langs/lang_fr.old
@@ -0,0 +1,156 @@
+Can you collect it for me?
+Pourriez-vous les obtenir pour moi ?
+
+Can you do something for my color?
+Peut-tu faire quelquechose pour mes cheveux ?
+
+Dark brown
+Marron foncé
+
+Dark purple
+Violet foncé
+
+Dark red
+Rouge foncé
+
+Did you collect @@ @@?#0
+Avez-vous obtenu @@ @@ ?
+
+Did you collect @@ @@?#1
+Avez-vous obtenu @@ @@ ?
+
+Do you want to create bee?
+Veux-tu faire apparaître une abeille ?
+
+Done
+Terminé
+
+Drunken Sailor
+Marin îvre
+
+English
+Anglais
+
+French
+Français
+
+Good luck!
+Bonne chance !
+
+Gray
+Gris
+
+Hello! Can you help me with the making of my potion?
+Bonjour ! Peux-tu m'aider avec la préparation de ma potion ?
+
+Here you are!
+Et voilà c'est fait !
+
+Hmm, I'm fine for now, thanks you
+Hmm... Rien pour l'instant, merci
+
+I dont want change my language, sorry.
+Je ne veux pas changer de langue, merci.
+
+I want change my language
+Je veux changer de langue
+
+I want to be a Demon
+Je veux être un Démon
+
+I want to be a Elf
+Je veux être un Elfe
+
+I will like to get different style
+Je voudrais avoir un look different
+
+If you help me I will give you a reward
+Si tu m'aides, je te récompenserais.
+
+It is very good! To finish my potion I need @@ @@.
+C'est très bien ! Pour terminer ma potion j'ai besoin de @@ @@.
+
+Italian
+Italien
+
+Langulator
+Langulator
+
+Light blonde
+Blond clair
+
+Light purple
+Violet clair
+
+Light red
+Rouge clair
+
+No, I'll go work
+Non, je vais au travail
+
+No, it isn't easy to get!
+Non, ce n'est pas facil de l'obtenir !
+
+Old Witch
+Vieille sorcière
+
+Please select race
+Veuillez choisir une race
+
+Rat Sailor
+Rat marin
+
+Russian
+Russe
+
+Sailor Orc
+Orque Marin
+
+Sitting Sailor
+Marin assis
+
+Sleeping Orc
+Orque dormeur
+
+Sleeping Ukar
+Ukar dormeur
+
+Sorry, maybe I can help you later
+Désolén, peut être puis-je t'aider plus tard
+
+Spanish
+Espagnol
+
+Sure!
+Bien sur !
+
+Thank you very much! Here is your reward
+Merci beaucoup ! Voilà ta récompense
+
+Thanks for your help!
+MErci pour ton aide
+
+Turtle tongue
+Langue de tortue
+
+What language do you want?
+Quelle langue veux-tu parler ?
+
+Would you maybe be interested in a race change?
+Souhaiterais-tu changer de race ?
+
+Would you maybe be interested in a sex change?
+Souhaiterais-tu changer de sexe?
+
+You didn't collect all the items!#0
+Tu n'as pas tout ramené !
+
+You didn't collect all the items!#1
+Tu n'as pas tout ramené !
+
+no
+non
+
+yes
+oui
+
diff --git a/langs/lang_fr.txt b/langs/lang_fr.txt
new file mode 100644
index 00000000..decbfe53
--- /dev/null
+++ b/langs/lang_fr.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+*hips*
+
+... By the power vested in me,
+... Par le pouvoir dont je suis investi,
+
+Ah, she *hips* is here.
+Ah, elle *hips* est là.
+
+Are you tired of being what you are?
+En as-tu marre d'être ce que tu es ?
+
+AreaNPC
+AreaNPC
+
+As you want!
+Comme tu veux... !
+
+Ash brown
+Marron cendré
+
+Bald
+Chauve
+
+Bee spawned
+Abeille est apparue
+
+Billy Bons
+Billy Bons
+
+Black
+Noir
+
+Blaf
+Blaf
+
+Ble *hips*... Imma great sail*hips*or!
+Blurp *hips*... Jeeeeu chuii un grand mar*hips*in !
+
+Blonde
+Blond
+
+Blue
+Bleu
+
+Boots
+Chaussures
+
+Bowl cut
+Coupe au bol
+
+Brown
+Marron
+
+Brunette
+Brun
+
+Bun
+Chignon
+
+Bunny ears
+Oreilles de Lapin
+
+Bye bye!
+Salut !
+
+Can you do something with my color?
+Pourriez-vous faire quelque chose pour ma couleur ?
+
+Cap
+Casquette
+
+Center parting/Short and slick
+Raie au milieu / Court et lisse
+
+Choppy
+Carré court sculpté
+
+Combed back
+En arrière Gominé
+
+Continue?
+Continuer ?
+
+Copper
+Cuivré
+
+Copper red
+Rouge cuivre
+
+Could I ask you which language do you talk? Like that I add you on the list.
+Puis-je te demander quelle langue tu parles ? De cette façon je peux t'ajouter dans la liste.
+
+Demon
+Démon
+
+Desert hat
+Keffieh
+
+Devis
+Devis
+
+Did you bring me @@ @@?#0
+M'avez-vous amené @@ @@ ?
+
+Did you bring me @@ @@?#1
+M'avez-vous amené @@ @@ ?
+
+Do you know some interesting people around here?
+Connais-tu des personnes intéressantes par ici ?
+
+Do you want to create a bee?
+Veux-tu faire apparaître une abeille ?
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+T'en fait pas, je suis certain que tout ira bien pour nous deux !!
+
+Don't you see that I'm already talking?
+Ne vois-tu pas que je suis déjà en conversation avec quelqu'un ?
+
+Done.
+Terminé.
+
+Dyeing failed. You lost dye item.
+La préparation de la couleur a échoué. Tu as perdu les objets nécessaires pour la faire.
+
+Dyer
+Teinturier
+
+Elmo
+Elmo
+
+Emo
+Emo
+
+Enora
+Enora
+
+Eurni
+Eurni
+
+Eurni the Surgeon
+Eurni le chirurgien
+
+Flat ponytail
+Queue de cheval plate
+
+For dye your item, you need white item and dye with required color.
+Pour teindre ton vêtement, tu as besoin de celui-ci en blanc et de la teinte de la couleur que tu veux employé.
+
+Fushia
+Fushia
+
+Ggrmm grmmm..
+Groumphh groumphh
+
+Gloves
+Gants
+
+Good job!
+Bon boulot !
+
+Green
+Vert
+
+Hahaha, I won't take much of your time, go ahead!
+Ahahahaha, je ne te prendrais pas plus de temps, continue !
+
+He takes a small list and starts reading it.
+Il prend une courte liste et commence à la lire.
+
+Headband
+Bandeau
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+héhé. Moi, je vais essayer d'ouvrir un magasin, j'ai entendu dire que c'est une grande ville d'échange et de commerce ici, à cause du port et tout ça...
+
+Hello @@
+Bonjour @@
+
+Hello dear, what do you want today?#0
+Coucou ma belle, que veux-tu aujourd'hui ?
+
+Hello dear, what do you want today?#1
+Salut mon beau, que veux-tu aujourd'hui ?
+
+Hello, girl!
+Bonjour mademoiselle !
+
+Hello, stranger!
+Salut étranger !
+
+Here is your reward!
+Voilà ta récompense !
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+Hé ! Oui ça va, je suis déjà au courant. Alors c'est la fin de notre périple ensemble... Que feras-tu maintenant ?
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+Hé ! tu vois nous sommes arrivés au port aujourd'hui, ce fut un long voyage depuis l'autre île...
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+Hé ! tu vois nous sommes arrivés au port aujourd'hui, ce fut un long voyage depuis l'autre île...
+
+Hey, girl!
+Hé, Mademoiselle !
+
+Hey, guy!
+Hé, Jeune homme !
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+Hé, regarde Julia... elle est belle, n'est-ce pas ? Elle ne cesse de me regarder depuis quellesque minutes... Ahaha bonne chance mon ami.
+
+Hey, you lied to me.
+Hé toi, tu m'as menti.
+
+Hmm, I'm fine for now, thank you.
+Hum, je vais bien pour l'instant, merci.
+
+How can I get it
+Comment puis-je l'obtenir ?
+
+I can!
+Je le peux !
+
+I don't need your help right now, come back later.
+Je n'ai pas besoin de ton aide pour l'instant. Reviens plus tard.
+
+I don't want change my language, sorry.
+Je ne veux pas changer de langue, désolé
+
+I gave you a reward. I can't give you more.
+Je t'ai déjà donné une récompense. Je ne peux t'en donner une autre.
+
+I made a mistake, I would like to change my language.#0
+J'ai fait une erreur, je souhaiterais changer ma langue.
+
+I made a mistake, I would like to change my language.#1
+J'ai fait une erreur, je souhaiterais changer de langue.
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+J'ai besoin d'aide pour nettoyer le pont du bateau, mais tu n'es pas assez costaud pour m'aider.
+
+I need somebody who can clean the bottom of the ship, can you help me?
+J'ai besoin d'aide pour nettoyer le fond de ce bateau, peux-tu m'aider ?
+
+I sentence you to death... twice.
+Je te condamne à mort... par deux fois.
+
+I speak Dutch
+Je parle hollandais
+
+I speak English
+Je parle anglais
+
+I speak Flemish
+Je parle flamand
+
+I speak French
+Je parle français
+
+I speak Greek
+
+
+I speak Indonesian
+
+
+I speak Italian
+Je parle italien
+
+I speak Russian
+Je parle russe
+
+I speak Spanish
+Je parle espagnol
+
+I think that I will explore around a bit and see what I can find, and you?
+Je crois que je vais allez explorer un peu par ici et voir ce que je peux trouver, et toi ?
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+Je pense que le bateau va rester là encore un moment, nous avons besoin de beaucoup de provisions et notre bateau a besoin de réparations avant de pourvoir reprendre la mer.
+
+I think you can help me, right?
+Je pense que tu peux m'aider, je me trompe ?
+
+I want to be a Human
+Je veux être un Humain
+
+I want to be a Ifitron
+Je veux être un Ifitron
+
+I want to be a Orc
+Je veux être un Orque
+
+I want to be a Sparron
+Je veux être un Sparron
+
+I want to be a Ukar
+Je veux être un Ukar
+
+I want to dye to different color
+Je voudrais le teindre d'une autre couleur
+
+I will give you @@gp.
+Je te donnerais @@gp.
+
+I will need some coffee...
+Je vais avoir besoin de quelsques cafés...
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+Je vais me reposer un peu ici ou en ville, je ne me sens pas très bien après ce voyage...
+
+I will!
+Je le ferais !
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+Je me le demande. Je crois que je vais découvrir petit à petit et voir comment les choses se déroulent !
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+Je me le demande... Je crois que je vais découvrir petit à petit et voir comment les choses se déroulent !
+
+I'd like to get a different style.
+J'aimerais changer de style.
+
+I'll come visit! I hope that this island will give us what we're looking for...
+Je viendrais vous rendre visite ! J'espère que cette île nous apportera ce que nous recherchons...
+
+I'll get it!#0
+Je l'aurais !
+
+I'll get it!#1
+Je l'aurais !
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+Je suis Julia. Mon travail est de faire la liste de tous ceux qui entrent ou sortent de ce navire.
+
+I'm busy#0
+Je suis occupée !
+
+I'm busy#1
+Je suis occupé !
+
+I've a girlfriend, and she needs me to do something unavailable.
+J'ai une petite amie, et elle a besoin que je fasse pour elle quelque chose d'impossible.
+
+If you dont have it, then you cant dye.
+Si tu n'en as pas, tu ne peux pas le teindre.
+
+Imperial
+Imperiale
+
+Infinitely long
+Infiniment long
+
+It's *hips* wrong, Imma not *hips* drunken.
+C'est pas *hips* vrai, je ne suis pas *hips* bourré.
+
+Julia
+Julia
+
+Khaki
+Khaki
+
+Kota
+Kota
+
+Leave alone my family treasure!
+Ne touchez pas à mes bijoux de famille !
+
+Leave it
+Laisse ça
+
+Let me see your work...
+Laisse moi jeter un oeil à ton travail...
+
+Let me sleep...
+Laisse moi dormir...
+
+Let me think...
+Attends que j'y pense...
+
+Lettuce
+Laitue
+
+Lime
+Citron
+
+Lloyd
+Lloyd
+
+Long and curly
+Long et bouclé
+
+Long and slick
+Long et lisse
+
+Long ponytail
+Longue queue de cheval
+
+Make less noise, please.
+Fais moi de bruit s'il te plait.
+
+Mane
+Pique
+
+Marko
+Marko
+
+Mauve
+Mauve
+
+Maybe you will be the next?#0
+Peut être seras-tu le prochain ?
+
+Maybe you will be the next?#1
+Peut être seras-tu le prochain ?
+
+Mini-skirt
+Mini jupe
+
+Mohawk
+Raie au milieu
+
+Move along, kid.
+Ce n'est pas une place pour toi, file gamin.
+
+Navy blue
+Bleu marine
+
+No
+Non
+
+No problem, do you need something else?
+Pas de problème, tu as besoin de quelque chose d'autre ?
+
+No!
+Non !
+
+No, thank you
+Non, merci
+
+No, thanks!
+Non. Merci !
+
+No, they are way too dangerous for me!
+Non, ils sont bien trop dangereux pour moi !
+
+Not yet.
+Pas encore.
+
+Note
+Note
+
+Nothing, sorry
+Rien, désolé
+
+Now i have class
+Je suis maintenant la classe, le top
+
+Of course! Tell me which language you speak.
+Bien sur, dis moi quelle langue tu parles.
+
+Off black
+Noir profond
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+Oh vraiment ? Je n'ai pas trop de temps maintenant, je dois y aller. Désolé.
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+Oh pas de problème ! De toute façon, si tu as des questions, tu devrais aller voir Julia à la réception, elle est charmante !
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+Oh merci ! Que ferais-je sans ton aide. A bientôt !
+
+Ok, Done. You need something else?
+Ca y est c'est fait. tu as besoin de quelque chose d'autre ?
+
+Ok, ok. Come back if you change your mind.
+Ok Ok. Reviens si tu changes d'avis.
+
+Ok, thanks
+D'accord, merci
+
+Okay, I'm ready to work!#0
+OK je suis prête à me mettre au travail !
+
+Okay, I'm ready to work!#1
+OK je suis prêt à me mettre au travail !
+
+Okay, you can start!
+ca y est, vous pouvez commencer !
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+Une fois cela fini, tu seras expulsé du serveur. Ne panique pas, tout est normal.
+
+Orange
+Orange
+
+Pants
+Pantalon
+
+Parted
+Gominé
+
+Perky ponytail
+Queue de cheval chic
+
+Peter
+Peter
+
+Pigtails
+Couettes
+
+Pink
+Rose
+
+Please change my race
+S'il vous plait, changer la nature de mon personnage
+
+Please do, my dear
+S'il vous plait, allez-y mon cher...
+
+Please select a race
+Veuillez choisir la nature de votre personnage
+
+Pompadour
+Pompadour
+
+Punk
+Punk
+
+Purple
+Violet
+
+Rabbit ears
+Oreille de lièvre
+
+Read it
+Lis cela
+
+Red
+Rouge
+
+Robe
+Robe
+
+Ronan
+Ronana
+
+Rrrr pchhhh...
+Rrrr pchhhh...
+
+Scarf
+Echarpe
+
+Server
+Serveur
+
+ServiceNPC
+ServiceNPC
+
+Shop 1
+Magasin 1
+
+Shop 2
+Magasin 2
+
+Shop 3
+Magasin 3
+
+Shop 4
+Magasin 4
+
+Shop 5
+Magasin 5
+
+Shop 6
+Magasin 6
+
+Shop 7
+Magasin 7
+
+Short and curly
+Court et bouclé
+
+Short punk
+Punk court
+
+Short robe
+Robe courte
+
+Short tank top
+T shirt court
+
+Shorts
+Short
+
+Silver
+Argent
+
+Skirt
+Jupe
+
+Sleeping Elf
+Elfe dormeur
+
+So die already!
+Alors déjà mort !
+
+Sorcerer robe
+Robe de sorcier
+
+Sorry you dont have components.
+Désolé, vous n'avez pas assez d'ingrédients.
+
+Surprise me
+Surprends moi
+
+T-neck sweater
+Pull à col roulé
+
+Tank top
+T shirt
+
+Teal
+Aigue Marine
+
+TestNPC
+TestNPC
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+Il y a beaucoup de @@ sur les quais, ce sera un plaisir pour elle de t'aider !
+
+They are really nice and may help you much more than me.
+Ils sont vraiment gentils et ils peuvent t'aider bien plus que je ne le puis.
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+Cette île a des côtés sympa pour commencer l'aventure, et c'est un bon endroit pour y rencontrer du monde aussi, ahah !
+
+This note was left by somebody.
+Cette note a été laissé par quelqu'un.
+
+Tousled layers
+Ébouriffés
+
+Turtles drop it. Good luck!
+Les tortues les jettent. Bonne chance !
+
+V-neck sweater
+Pul à col en V
+
+Warin
+Warin
+
+Warning: All characters under this login will be changed.
+Attention : Tous les personnages se trouvant sous cet identifiant seront changés.
+
+Wave
+Vague
+
+Wavy
+Ondulé
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+Nous sommes à [@@], c'est une grande ville portuaire, nombre de personnes y commencent leurs aventures.
+
+Wedding
+Marriage
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+Bien, je verrais ce qui se passera. J''espère que ma bonne étoile m'accompagnera !
+
+What can I dye for you today?
+Que puis-je teindre pour toi aujourd'hui ?
+
+What color?
+Quelle couleur ?
+
+What do you want to do with it?
+Que veux-tu faire avec cela ?
+
+What do you want to dye?
+Que veux-tu teindre ?
+
+What do you want today?
+Que veux-tu faire aujourd'hui ?
+
+What do you want?
+Que veux-tu ?
+
+What will you do during this break?
+Que feras-tu pendant cette pause ?
+
+What? Never!
+Quoi ? Jamais !
+
+What? This reward is too small!
+Quoi ? !!! Cette récompense est si infime !
+
+Where are we?
+Où sommes-nous ?
+
+Where is this cup?..*hips*
+Où est mon verre ?... *hips*
+
+White
+Blanc
+
+Why do you *hips* at me?!
+Pourquoi tu me *hips* regardes comme ça *hips* ?
+
+Why i cant dye my item?
+Pourquoi ne puis-je pas teindre mes vêtements ?
+
+Why not, I need to train anyway.
+Pourquoi pas ? j'ai besoin de m'entrainer de toute façon.
+
+Wild
+Sauvage
+
+Witch hat
+Chapeau de sorcière
+
+Would you be interested in a race change?
+Souhaiterais-tu changer la nature de ton personnage ?
+
+Would you be interested in a sex change?
+Souhaiterais-tu changer de sexe ?
+
+Yeah, but what reward will I get?
+Oui, mais comment serais-je récompensé ?
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+Oui, si tu veux. J'ouvrirais un commerce dans cette ville, tu pourrais m'y rendre visite ? Ce serait sympa de te revoir !
+
+Yellow
+Jaune
+
+Yes
+Oui
+
+Yes, I can!
+Oui, je peux !
+
+Yes, I did it!#0
+Oui, j'ai réussi !
+
+Yes, I did it!#1
+Oui, j'ai réussi !
+
+Yes, please!
+Oui s'il te plait !
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+Oui, je l'ai trouvé, cool ! J'ai tout sauf ça : @@ @@. Tu peux m'en ramener ?
+
+Yo, can you help me, bro?
+Salut, tu peux m'aider mon frère ?
+
+Yo, can you help me, sis?
+Salut, tu peux m'aider frangine ?
+
+Yo, do you see what I mean?
+Salut, tu vois ce que je veux dire ?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+Salut, regarde, mon amie m'a conseillé de préparer un bon petit repas sympa et m'a donné des instructions.
+
+Yo, now just bring it to me.
+Salut, Maintenant tu as juste à me les ramener.
+
+Yo, thank you!
+Salut et merci !
+
+Yo, that's good that you want to help me.
+Salut, c'est sympa que tu veuilles bien m'aider.
+
+Yo, you really brought it!
+Salut, tu l'as vraiment ramené !
+
+You can start now.
+Tu peux commencer maintenant.
+
+You can't go there!
+Tu ne peux pas y aller !
+
+You don't have enough to pay for my services.
+Vous n'avez pas assez pour payer mes services.
+
+You failed the task!#0
+Tu as failli dans l'exécution de ta tâche !
+
+You failed the task!#1
+Tu as raté ta mission !
+
+You should go see the sailors around here.#0
+Tu devrais aller voir les marins dans le coin.
+
+You should go see the sailors around here.#1
+Tu devrais aller voir les marins dans le coin.
+
+Zzzzzzzzzz
+Zzzzzzzzzz
+
+is helping me.
+m'aide.
+
diff --git a/langs/lang_id.old b/langs/lang_id.old
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/langs/lang_id.old
diff --git a/langs/lang_id.txt b/langs/lang_id.txt
new file mode 100644
index 00000000..ec4e4f20
--- /dev/null
+++ b/langs/lang_id.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+*tersendak*
+
+... By the power vested in me,
+... Oleh kekuatan yang terpendam dalam diriku,
+
+Ah, she *hips* is here.
+Ah, dia *tersendak* ada disini.
+
+Are you tired of being what you are?
+Apa kamu lelah menjadi dirimu sendiri?
+
+AreaNPC
+AreaNPC
+
+As you want!
+Sesuai keinginanmu!
+
+Ash brown
+Abu cokelat
+
+Bald
+Botak
+
+Bee spawned
+Lebah bertelur
+
+Billy Bons
+Billy Bons
+
+Black
+Hitam
+
+Blaf
+Blaf
+
+Ble *hips*... Imma great sail*hips*or!
+Ble *tersendak*... Saya adalah seorang pelaut yang *tersendak* hebat!
+
+Blonde
+Pirang
+
+Blue
+Biru
+
+Boots
+Sepatu Boot
+
+Bowl cut
+Rambut mangkok
+
+Brown
+Cokelat
+
+Brunette
+Cokelat muda
+
+Bun
+Mengembang
+
+Bunny ears
+Telinga kelinci
+
+Bye bye!
+Dah!
+
+Can you do something with my color?
+Dapatkah kamu melakukan sesuatu dengan warnaku ?
+
+Cap
+Topi
+
+Center parting/Short and slick
+Belah tengah/Pendek dan licin
+
+Choppy
+Berombak
+
+Combed back
+Disisir ke belakang
+
+Continue?
+Lanjutkan?
+
+Copper
+Tembaga
+
+Copper red
+Merah tembaga
+
+Could I ask you which language do you talk? Like that I add you on the list.
+Dapatkah saya bertanya padamu bahasa apa yang kamu gunakan? Lalu saya akan menambahkanmu kedalam daftar.
+
+Demon
+Iblis
+
+Desert hat
+Topi padang pasir
+
+Devis
+Devis
+
+Did you bring me @@ @@?#0
+Apakah kamu membawakanku @@ @@?
+
+Did you bring me @@ @@?#1
+Apakah kamu membawakanku @@ @@?
+
+Do you know some interesting people around here?
+Apakah kamu tahu beberapa orang yang menarik di sekitar sini?
+
+Do you want to create a bee?
+Apa kamu ingin membuat seekor lebah?
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+Jangan khawatir, Saya yakin semua akan menjadi baik-baik saja untuk kita berdua!
+
+Don't you see that I'm already talking?
+Apa kamu mendengar apa yang telah saya bicarakan?
+
+Done.
+Selesai.
+
+Dyeing failed. You lost dye item.
+Pewarnaan gagal. Kamu kehilangan bahan pewarna.
+
+Dyer
+Tukang Pewarna
+
+Elmo
+Elmo
+
+Emo
+Emo
+
+Enora
+Enora
+
+Eurni
+Eurni
+
+Eurni the Surgeon
+Eurni si dokter bedah
+
+Flat ponytail
+Kuncir rata
+
+For dye your item, you need white item and dye with required color.
+Untuk mewarnai barang-barangmu, kamu membutuhkan barang yang berwarna putih dan pewarna sesuai yang diperlukan.
+
+Fushia
+Fushia
+
+Ggrmm grmmm..
+Grmm grmmm..
+
+Gloves
+Sarung tangan
+
+Good job!
+Kerja bagus!
+
+Green
+Hijau
+
+Hahaha, I won't take much of your time, go ahead!
+Hahaha, Aku tidak akan menghabiskan banyak waktumu, Pergi sekarang!
+
+He takes a small list and starts reading it.
+Dia mengambil daftar kecil dan mulai membacanya.
+
+Headband
+Ikat kepala
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+Hehe. Saya, akan mencoba membuka sebuah toko, Saya telah mendengar bahwa ini adalah kota dagang yang besar, karena pelabuhan dan yang lainnya...
+
+Hello @@
+Halo @@
+
+Hello dear, what do you want today?#0
+Hallo sayang, apa yang kamu butuhkan hari ini?
+
+Hello dear, what do you want today?#1
+Hallo sayang, apa yang kamu butuhkan hari ini
+
+Hello, girl!
+Halo, cewek!
+
+Hello, stranger!
+Halo, Orang asing!
+
+Here is your reward!
+Ini dia hadiahmu!
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+Hey! Ya, Saya sudah bangun. Jadi, ini adalah akhir dari perjalanan singkat kita, apa yang akan kamu lakukan sekarang ?
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+Hey! Kamu melihatnya? hari ini kami telah sampai di pelabuhan, itu adalah sebuah perjalanan panjang dari pulau lain...
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+Hey! Kamu melihatnya? hari ini kami telah sampai di pelabuhan, itu adalah sebuah perjalanan panjang dari pulau lain...
+
+Hey, girl!
+Hey, cewek!
+
+Hey, guy!
+Hei, bocah!
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+Hey, lihat Julia, dia cantik bukan? Dia tertarik padaku untuk beberapa waktu ini... haha! Semoga beruntung, teman!
+
+Hey, you lied to me.
+Hey, Kamu berbohong kepadaku.
+
+Hmm, I'm fine for now, thank you.
+Hmm, Saya baik-baik saja sekarang, terima kasih.
+
+How can I get it
+Bagaimana cara agar saya bisa mendapatkannya
+
+I can!
+Saya bisa!
+
+I don't need your help right now, come back later.
+Saya tidak membutuhkan bantuanmu sekarang, datang lagi lain waktu.
+
+I don't want change my language, sorry.
+Maaf, Saya tidak ingin mengubah bahasa saya.
+
+I gave you a reward. I can't give you more.
+Saya telah memberimu hadiah. Saya tidak dapat memberimu lebih banyak lagi.
+
+I made a mistake, I would like to change my language.#0
+Saya membuat kesalahan, Saya berniat untuk mengubah bahasa saya.
+
+I made a mistake, I would like to change my language.#1
+Saya telah membuat kesalahan, Saya berniat untuk mengubah bahasa yang saya gunakan
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+Saya membutuhkan batuan untuk membersihkan pasak kapal, tetapi kamu belum cukup kuat untuk membantu saya.
+
+I need somebody who can clean the bottom of the ship, can you help me?
+Saya membutuhkan seseorang yang dapat membersihkan bagian bawah kapal, dapatkah kamu mebantuku?
+
+I sentence you to death... twice.
+Saya memutuskan kamu untuk mati... dua kali.
+
+I speak Dutch
+Saya berbicara bahasa Belanda
+
+I speak English
+Saya berbicara bahasa Inggris
+
+I speak Flemish
+Saya berbicara bahasa Belanda-Flemish
+
+I speak French
+Saya berbicara bahasa Perancis
+
+I speak Greek
+
+
+I speak Indonesian
+
+
+I speak Italian
+Saya berbicara bahasa Italia
+
+I speak Russian
+Saya berbicara bahasa Russia
+
+I speak Spanish
+Saya berbicara bahasa Spanyol
+
+I think that I will explore around a bit and see what I can find, and you?
+Saya rasa, saya akan pergi menjelajah sebentar dan melihat apa yang dapat saya temukan, kalau kamu?
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+Saya rasa kapal ini akan tetap disini untuk beberapa lama, kita membutuhkan banyak makanan dan kapal kita membutuhkan beberapa perbaikan sebelum keembali ke lautan.
+
+I think you can help me, right?
+Saya rasa kamu dapat membatuku, benar?
+
+I want to be a Human
+Saya ingin menjadi manusia
+
+I want to be a Ifitron
+Saya ingin menjadi seorang Ifitrton
+
+I want to be a Orc
+Saya mau menjadi seorang Orc
+
+I want to be a Sparron
+Saya ngin menjadi seorang Sparron
+
+I want to be a Ukar
+Saya ingin menjadi seorang Ukar
+
+I want to dye to different color
+Saya ingin memberi warna yang berbeda
+
+I will give you @@gp.
+Saya akan memberimu @@gp
+
+I will need some coffee...
+Saya akan membutuhkan kopi...
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+Saya akan beristirahat sebentar disini atau di kota, Saya merasa tidak enak badan setelah perjalanan ini...
+
+I will!
+Saya akan melakukannya!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+Saya ragu tentang itu, saya rasa saya akan sedikit menjelajah dan melihat apa yang terjadi!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+Saya ragu mengenai itu, Saya berpikir akan menjelajah sedikit demi sedikit dan melihat apa yang akan terjadi!
+
+I'd like to get a different style.
+Saya tertarik untuk mendapatkan gaya yang berbeda.
+
+I'll come visit! I hope that this island will give us what we're looking for...
+Saya akan mengunjunginya! Saya berharap pulau ini dapat memberikan apa yang kita cari...
+
+I'll get it!#0
+Saya akan mendapatkannya!
+
+I'll get it!#1
+Saya akan mendapatkannya!
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+Saya Julia, pekerjaan saya adalah untuk mendata siapapun yang akan masuk atau keluar kapal.
+
+I'm busy#0
+Saya sedang sibuk
+
+I'm busy#1
+Saya sedang sibuk
+
+I've a girlfriend, and she needs me to do something unavailable.
+Saya memiliki kekasih, dan dia menyuruh saya untuk melakukan sesuatu yang tidak mungkin dilakukan.
+
+If you dont have it, then you cant dye.
+Jika kamu tidak memilikinya, maka kamu tidak bisa mewarnai.
+
+Imperial
+Imperial
+
+Infinitely long
+Panjang tak terhingga
+
+It's *hips* wrong, Imma not *hips* drunken.
+Itu *tersendak* salah, Saya tidak *tersendak* mabuk.
+
+Julia
+Julia
+
+Khaki
+Khaki
+
+Kota
+Kota
+
+Leave alone my family treasure!
+Tinggalkan harta karun keluargaku!
+
+Leave it
+Tinggalkan
+
+Let me see your work...
+Biar saya lihat pekerjaanmu...
+
+Let me sleep...
+Biarkan saya tidur...
+
+Let me think...
+Biarkan saya berpikir...
+
+Lettuce
+Selada
+
+Lime
+Lemon
+
+Lloyd
+Lloyd
+
+Long and curly
+Panjang dan keriting
+
+Long and slick
+Panjang dan licin
+
+Long ponytail
+Kuncir panjang
+
+Make less noise, please.
+Tolong, jangan buat keributan.
+
+Mane
+Ekor kuda
+
+Marko
+Marko
+
+Mauve
+Ungu muda
+
+Maybe you will be the next?#0
+Mungkin kamu dapat menjadi yang selanjutnya ?
+
+Maybe you will be the next?#1
+Mungkin kamu akan menjadi yang selanjutnya?
+
+Mini-skirt
+Rok mini
+
+Mohawk
+Mohawk
+
+Move along, kid.
+Jalan terus, bocah.
+
+Navy blue
+Biru laut
+
+No
+Tidak
+
+No problem, do you need something else?
+Tidak masalah, apakah kamu membutuhkan sesuatu yang lain?
+
+No!
+Tidak!
+
+No, thank you
+Tidak, Terima kasih
+
+No, thanks!
+Tidak, terima kasih!
+
+No, they are way too dangerous for me!
+Tidak, mereka terlalu berbahaya untukku!
+
+Not yet.
+Belum.
+
+Note
+Catatan
+
+Nothing, sorry
+Maaf, Tidak ada.
+
+Now i have class
+Sekarang saya sedang ada kelas.
+
+Of course! Tell me which language you speak.
+Tentu saja! Katakan bahasa apa yang kamu gunakan.
+
+Off black
+Hitam pekat
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+Oh benarkah? Saya tidak punya banyak waktu sekarang, Saya harus pergi. Maaf
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+Oh, Tidak apa-apa! Ngomong-Ngomong, jika kamu memiliki pertanyaan, kamu dapat menemui Julia di bagian resepsionis, dia sangat ramah!
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+Ok, terima kasih! Yo, saya tidak bisa melakukan apa apa tanpa bantuanmu. Ok, sampai jumpa!
+
+Ok, Done. You need something else?
+Ok, Selesai. Kamu membutuhkan yang lain?
+
+Ok, ok. Come back if you change your mind.
+Ok, ok. Datang kembali jika kamu berubah pikiran.
+
+Ok, thanks
+Ok, Terima kasih
+
+Okay, I'm ready to work!#0
+Oke, Saya siap untuk bekerja!
+
+Okay, I'm ready to work!#1
+Oke, Saya siap untuk bekerja!
+
+Okay, you can start!
+Oke, Kamu dapat memulainya!
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+Setelah kamu selesai, Kamu akan diusir dari server. Jangan panik, karena semua baik-baik saja.
+
+Orange
+Jingga
+
+Pants
+Celana dalam
+
+Parted
+Tersibak
+
+Perky ponytail
+Lebat kuncir ke belakang
+
+Peter
+Peter
+
+Pigtails
+Kuncir
+
+Pink
+Merah muda
+
+Please change my race
+Tolong ganti ras saya
+
+Please do, my dear
+Tolong lakukan, sayangku
+
+Please select a race
+Silahkan pilih ras
+
+Pompadour
+Berdiri
+
+Punk
+Punk
+
+Purple
+Ungu
+
+Rabbit ears
+Telinga kelinci
+
+Read it
+Baca itu
+
+Red
+Merah
+
+Robe
+ Jubah
+
+Ronan
+Ronan
+
+Rrrr pchhhh...
+Rrrr pchhhh...
+
+Scarf
+Selendang
+
+Server
+Server
+
+ServiceNPC
+ServisNPC
+
+Shop 1
+Toko 1
+
+Shop 2
+Toko 2
+
+Shop 3
+Toko 3
+
+Shop 4
+Toko 4
+
+Shop 5
+Toko 5
+
+Shop 6
+Toko 6
+
+Shop 7
+Toko 7
+
+Short and curly
+Pendek dan keriting
+
+Short punk
+Punk pendek
+
+Short robe
+Jubah pendek
+
+Short tank top
+Tank top pendek
+
+Shorts
+Celana pendek
+
+Silver
+Perak
+
+Skirt
+Rok
+
+Sleeping Elf
+Kurcaci tidur
+
+So die already!
+Jadi sudah mati!
+
+Sorcerer robe
+Jubah Penyihir
+
+Sorry you dont have components.
+Maaf anda tidak memiliki bahan-bahannya.
+
+Surprise me
+Kejutkan saya
+
+T-neck sweater
+Sweater kerah-T
+
+Tank top
+Tank top
+
+Teal
+Biru telur asin
+
+TestNPC
+TesNPC
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+Juga masih ada @@ di dermaga, dia akan dengan senang hati untuk menolongmu!
+
+They are really nice and may help you much more than me.
+Mereka Sangat baik dan mungkin akan lebih banyak membantumu daripada saya.
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+Sedikit lucu untuk memulai petualangan baru di pulau ini, dan juga ini adalah tempat yang bagus untuk bertemu orang-orang, haha!
+
+This note was left by somebody.
+Catatan ini tertinggal oleh seseorang
+
+Tousled layers
+Lapisan kusut
+
+Turtles drop it. Good luck!
+Kura-kura menjatuhkan itu. Semoga beruntung!
+
+V-neck sweater
+Sweater kerah-V
+
+Warin
+Warin
+
+Warning: All characters under this login will be changed.
+Peringatan: Semua karakter dengan login ini akan berubah.
+
+Wave
+Bergelombang
+
+Wavy
+Ikal Bergelombang
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+Kita sedang berada di [@@], ini adalah kota pelabuhan yang besar, banyak pemula memulai petualangan mereka disini.
+
+Wedding
+Pernikahan
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+Baik, Saya akan melihat apa yang akan terjadi. Saya harap keberuntungan akan selalu mengikutiku!
+
+What can I dye for you today?
+Apa yang dapat saya warnai untukmu hari ini ?
+
+What color?
+Warna apa?
+
+What do you want to do with it?
+Apa yang akan kamu lakukan dengan itu?
+
+What do you want to dye?
+Apa yang ingin kamu warnai ?
+
+What do you want today?
+Apa yang kamu inginkan hari ini?
+
+What do you want?
+Apa yang kamu inginkan?
+
+What will you do during this break?
+Apa yang akan kamu lakukan selama istirahat?
+
+What? Never!
+Apa? Tidak akan pernah!
+
+What? This reward is too small!
+Apa? Hadiah ini terlalu kecil!
+
+Where are we?
+Dimana kita?
+
+Where is this cup?..*hips*
+Dimana gelasnya?..*tersendak*
+
+White
+Putih
+
+Why do you *hips* at me?!
+Mengapa kamu *tersendak* ke saya?!
+
+Why i cant dye my item?
+Mengapa saya tidak bisa mewarnai barang-barang saya?
+
+Why not, I need to train anyway.
+Mengapa tidak, ngomong-ngomong saya butuh berlatih.
+
+Wild
+Liar
+
+Witch hat
+Topi penyihir
+
+Would you be interested in a race change?
+Apakah kamu tertarik untuk merubah ras ?
+
+Would you be interested in a sex change?
+Apakah kamu tertarik untuk mengubah jenis kelamin?
+
+Yeah, but what reward will I get?
+Ya, tetapi hadiah apa yang akan saya dapatkan?
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+Ya, Jika kamu menyukainya, Saya akan membuka toko di kota ini, mungkin kamu dapat mengunjunginya ? Pasti menyenangkan jika Saya dapat menemuimu lagi!
+
+Yellow
+Kuning
+
+Yes
+Ya
+
+Yes, I can!
+Ya, saya bisa!
+
+Yes, I did it!#0
+Ya, Selesai!
+
+Yes, I did it!#1
+Ya, Selesai!
+
+Yes, please!
+Ya, dengan senang hati!
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+Yo, Saya menemukannya, bagus! Saya memiliki segalanya, kecuali @@ @@. Dapatkah kamu membawakannya untukku?
+
+Yo, can you help me, bro?
+Yo, Dapatkah kamu membantuku, bro?
+
+Yo, can you help me, sis?
+Yo, dapatkah kamu membantuku, sis?
+
+Yo, do you see what I mean?
+Yo, apa kamu mengerti apa yang saya maksud ?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+Yo, lihat: temanku menyuruhku untuk membuat makanan yang enak dan lezat, dan dia memberikanku petunjuknya.
+
+Yo, now just bring it to me.
+Yo, sekarang tinggal berikan itu padaku.
+
+Yo, thank you!
+Yo, terima kasih!
+
+Yo, that's good that you want to help me.
+Yo, itu bagus jika kamu mau menolongku.
+
+Yo, you really brought it!
+Yo, Kamu sungguh membawanya!
+
+You can start now.
+Kamu dapat memulainya sekarang.
+
+You can't go there!
+Kamu tidak dapat pergi kesana!
+
+You don't have enough to pay for my services.
+Kamu tidak punya cukup uang untuk membayar jasaku.
+
+You failed the task!#0
+Kamu mempersulit tugas ini!
+
+You failed the task!#1
+Kamu mengacaukan semuanya!
+
+You should go see the sailors around here.#0
+Kamu harus pergi menemui nelayan di sekitar sini.
+
+You should go see the sailors around here.#1
+Kamu harus pergi menemui nelayan di sekitar sini.
+
+Zzzzzzzzzz
+Zzzzzzzzzz
+
+is helping me.
+apakah membantu saya.
+
diff --git a/langs/lang_it.old b/langs/lang_it.old
new file mode 100644
index 00000000..76c991ca
--- /dev/null
+++ b/langs/lang_it.old
@@ -0,0 +1,87 @@
+Can you do something for my color?
+Puoi fare qualcosa per il mio colore?
+
+Dark brown
+Marrone scuro
+
+Dark purple
+Viola scuro
+
+Dark red
+Rosso scuro
+
+Do you want to create bee?
+Vuoi creare un'ape?
+
+Done
+Finito
+
+English
+Inglese
+
+French
+Francese
+
+Gray
+Grigio
+
+Hello dear, what do you want today?
+Ciao caro/a, cosa vuoi oggi?
+
+Hmm, I'm fine for now, thanks you
+Hmm, sto bene così per ora, grazie
+
+I dont want change my language, sorry.
+Non desidero modificare la lingua corrente, spiacente.
+
+I want change my language
+Desidero cambiare il linguaggio
+
+I want to be a Demon
+Voglio essere un Demone
+
+I want to be a Elf
+Voglio essere un Elfo
+
+I will like to get different style
+Mi piacerebbe avere uno stile differente
+
+Italian
+Italiano
+
+Langulator
+Langulator
+
+Light blonde
+Biondo chiaro
+
+Light purple
+Viola chiaro
+
+Light red
+Rosso chiaro
+
+Please select race
+Per favore seleziona una razza
+
+Russian
+Russo
+
+Spanish
+Spagnolo
+
+What language do you want?
+Quale linguaggio desideri usare?
+
+Would you maybe be interested in a race change?
+Sei interessato a cambiare razza?
+
+Would you maybe be interested in a sex change?
+Ti interessa cambiare sesso?
+
+no
+no
+
+yes
+si
+
diff --git a/langs/lang_it.txt b/langs/lang_it.txt
new file mode 100644
index 00000000..02e01f1b
--- /dev/null
+++ b/langs/lang_it.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+
+
+... By the power vested in me,
+
+
+Ah, she *hips* is here.
+
+
+Are you tired of being what you are?
+Sei stanco/a di essere ciò che sei?
+
+AreaNPC
+
+
+As you want!
+Come desideri!
+
+Ash brown
+
+
+Bald
+Pelato
+
+Bee spawned
+Ape creata
+
+Billy Bons
+
+
+Black
+Neri
+
+Blaf
+Blaf
+
+Ble *hips*... Imma great sail*hips*or!
+
+
+Blonde
+Biondi
+
+Blue
+Blu
+
+Boots
+
+
+Bowl cut
+Taglio a scodella
+
+Brown
+
+
+Brunette
+Bruni
+
+Bun
+Chignon
+
+Bunny ears
+
+
+Bye bye!
+Ciao ciao!
+
+Can you do something with my color?
+
+
+Cap
+
+
+Center parting/Short and slick
+Divisi al centro/Corti e lisci
+
+Choppy
+Increspati
+
+Combed back
+Pettinati all'indietro
+
+Continue?
+Continuare?
+
+Copper
+Rame
+
+Copper red
+
+
+Could I ask you which language do you talk? Like that I add you on the list.
+
+
+Demon
+
+
+Desert hat
+
+
+Devis
+
+
+Did you bring me @@ @@?#0
+
+
+Did you bring me @@ @@?#1
+
+
+Do you know some interesting people around here?
+
+
+Do you want to create a bee?
+Vuoi creare un'ape?
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+
+
+Don't you see that I'm already talking?
+
+
+Done.
+Finito.
+
+Dyeing failed. You lost dye item.
+
+
+Dyer
+
+
+Elmo
+
+
+Emo
+Emo
+
+Enora
+
+
+Eurni
+Eruni
+
+Eurni the Surgeon
+Eruni il Chirurgo
+
+Flat ponytail
+Coda di cavallo piatta
+
+For dye your item, you need white item and dye with required color.
+
+
+Fushia
+
+
+Ggrmm grmmm..
+
+
+Gloves
+
+
+Good job!
+
+
+Green
+Verde
+
+Hahaha, I won't take much of your time, go ahead!
+
+
+He takes a small list and starts reading it.
+
+
+Headband
+
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+
+
+Hello @@
+
+
+Hello dear, what do you want today?#0
+Ciao cara, cosa vuoi oggi?
+
+Hello dear, what do you want today?#1
+Ciao caro, cosa vuoi oggi?
+
+Hello, girl!
+
+
+Hello, stranger!
+
+
+Here is your reward!
+
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+
+
+Hey, girl!
+
+
+Hey, guy!
+
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+
+
+Hey, you lied to me.
+
+
+Hmm, I'm fine for now, thank you.
+
+
+How can I get it
+
+
+I can!
+
+
+I don't need your help right now, come back later.
+
+
+I don't want change my language, sorry.
+
+
+I gave you a reward. I can't give you more.
+
+
+I made a mistake, I would like to change my language.#0
+
+
+I made a mistake, I would like to change my language.#1
+
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+
+
+I need somebody who can clean the bottom of the ship, can you help me?
+
+
+I sentence you to death... twice.
+
+
+I speak Dutch
+
+
+I speak English
+
+
+I speak Flemish
+
+
+I speak French
+
+
+I speak Greek
+
+
+I speak Indonesian
+
+
+I speak Italian
+
+
+I speak Russian
+
+
+I speak Spanish
+
+
+I think that I will explore around a bit and see what I can find, and you?
+
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+
+
+I think you can help me, right?
+
+
+I want to be a Human
+Voglio essere un Umano
+
+I want to be a Ifitron
+
+
+I want to be a Orc
+
+
+I want to be a Sparron
+
+
+I want to be a Ukar
+Voglio essere un Ukar
+
+I want to dye to different color
+
+
+I will give you @@gp.
+
+
+I will need some coffee...
+
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+
+
+I will!
+
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+
+
+I'd like to get a different style.
+
+
+I'll come visit! I hope that this island will give us what we're looking for...
+
+
+I'll get it!#0
+
+
+I'll get it!#1
+
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+
+
+I'm busy#0
+
+
+I'm busy#1
+
+
+I've a girlfriend, and she needs me to do something unavailable.
+
+
+If you dont have it, then you cant dye.
+
+
+Imperial
+Imperiale
+
+Infinitely long
+Infinitamente lungo
+
+It's *hips* wrong, Imma not *hips* drunken.
+
+
+Julia
+
+
+Khaki
+
+
+Kota
+
+
+Leave alone my family treasure!
+Lascia stare i miei gioelli di famiglia!
+
+Leave it
+
+
+Let me see your work...
+
+
+Let me sleep...
+
+
+Let me think...
+
+
+Lettuce
+
+
+Lime
+
+
+Lloyd
+
+
+Long and curly
+Lunghi e ricci
+
+Long and slick
+Lunghi e lisci
+
+Long ponytail
+Coda di cavallo lunga
+
+Make less noise, please.
+
+
+Mane
+Criniera
+
+Marko
+Marko
+
+Mauve
+
+
+Maybe you will be the next?#0
+
+
+Maybe you will be the next?#1
+
+
+Mini-skirt
+
+
+Mohawk
+Moicano
+
+Move along, kid.
+Vattene bimbo.
+
+Navy blue
+
+
+No
+No
+
+No problem, do you need something else?
+
+
+No!
+
+
+No, thank you
+No, ti ringrazio
+
+No, thanks!
+
+
+No, they are way too dangerous for me!
+
+
+Not yet.
+
+
+Note
+
+
+Nothing, sorry
+Nulla, scusa per il disturbo
+
+Now i have class
+Ora ho la classe
+
+Of course! Tell me which language you speak.
+
+
+Off black
+
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+
+
+Ok, Done. You need something else?
+
+
+Ok, ok. Come back if you change your mind.
+
+
+Ok, thanks
+
+
+Okay, I'm ready to work!#0
+
+
+Okay, I'm ready to work!#1
+
+
+Okay, you can start!
+
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+Al termine dell'operazione sarai disconnesso dal server. Non temere, tutto andrà a buon fine.
+
+Orange
+Arancione
+
+Pants
+
+
+Parted
+Divisi
+
+Perky ponytail
+Codino vivace
+
+Peter
+
+
+Pigtails
+Codino
+
+Pink
+Rosa
+
+Please change my race
+Per favore cambia la mia razza
+
+Please do, my dear
+Certamente Caro, prosegui pure per favore
+
+Please select a race
+Per favore seleziona una razza
+
+Pompadour
+Pompadour
+
+Punk
+Punk
+
+Purple
+
+
+Rabbit ears
+
+
+Read it
+
+
+Red
+
+
+Robe
+
+
+Ronan
+
+
+Rrrr pchhhh...
+
+
+Scarf
+
+
+Server
+Server
+
+ServiceNPC
+NPC di servizio
+
+Shop 1
+Mercato 1
+
+Shop 2
+Mercato 2
+
+Shop 3
+Mercato 3
+
+Shop 4
+Mercato 4
+
+Shop 5
+Mercato 5
+
+Shop 6
+Mercato 6
+
+Shop 7
+Mercato 7
+
+Short and curly
+Corti e ricci
+
+Short punk
+Punk corti
+
+Short robe
+
+
+Short tank top
+
+
+Shorts
+
+
+Silver
+
+
+Skirt
+
+
+Sleeping Elf
+
+
+So die already!
+
+
+Sorcerer robe
+
+
+Sorry you dont have components.
+Sono spiacente ma non hai i componenti necessari.
+
+Surprise me
+Sorprendimi
+
+T-neck sweater
+
+
+Tank top
+
+
+Teal
+Tè Blu
+
+TestNPC
+TestNPC
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+
+
+They are really nice and may help you much more than me.
+
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+
+
+This note was left by somebody.
+
+
+Tousled layers
+Strati spettinati
+
+Turtles drop it. Good luck!
+
+
+V-neck sweater
+
+
+Warin
+
+
+Warning: All characters under this login will be changed.
+Attenzione: tutti i personaggi all'interno di questo account verranno modificati.
+
+Wave
+Onda
+
+Wavy
+Ondulati
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+
+
+Wedding
+Sposalizio
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+
+
+What can I dye for you today?
+
+
+What color?
+
+
+What do you want to do with it?
+
+
+What do you want to dye?
+
+
+What do you want today?
+
+
+What do you want?
+Che cosa vuoi?
+
+What will you do during this break?
+
+
+What? Never!
+
+
+What? This reward is too small!
+
+
+Where are we?
+
+
+Where is this cup?..*hips*
+
+
+White
+Bianco
+
+Why do you *hips* at me?!
+
+
+Why i cant dye my item?
+
+
+Why not, I need to train anyway.
+
+
+Wild
+Selvaggio
+
+Witch hat
+
+
+Would you be interested in a race change?
+Sei interessato a cambiare razza?
+
+Would you be interested in a sex change?
+Ti interessa cambiare sesso?
+
+Yeah, but what reward will I get?
+
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+
+
+Yellow
+
+
+Yes
+Si
+
+Yes, I can!
+
+
+Yes, I did it!#0
+
+
+Yes, I did it!#1
+
+
+Yes, please!
+
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+
+
+Yo, can you help me, bro?
+
+
+Yo, can you help me, sis?
+
+
+Yo, do you see what I mean?
+
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+
+
+Yo, now just bring it to me.
+
+
+Yo, thank you!
+
+
+Yo, that's good that you want to help me.
+
+
+Yo, you really brought it!
+
+
+You can start now.
+
+
+You can't go there!
+
+
+You don't have enough to pay for my services.
+Non sei sufficientemente ricco per pagare i miei servizi.
+
+You failed the task!#0
+
+
+You failed the task!#1
+
+
+You should go see the sailors around here.#0
+
+
+You should go see the sailors around here.#1
+
+
+Zzzzzzzzzz
+
+
+is helping me.
+
+
diff --git a/langs/lang_nl.old b/langs/lang_nl.old
new file mode 100644
index 00000000..6da9da62
--- /dev/null
+++ b/langs/lang_nl.old
@@ -0,0 +1,126 @@
+Can you collect it for me?
+Kan je het gaan halen voor me?
+
+Dark brown
+Donker bruin
+
+Dark purple
+Donker paars
+
+Dark red
+Donker rood
+
+Did you collect @@ @@?#0
+Heb je @@ @@ opgehaald?
+
+Did you collect @@ @@?#1
+Heb je @@ @@ opgehaald?
+
+Drunken Sailor
+Dronken Zeiler
+
+English
+Engels
+
+French
+Frans
+
+Good luck!
+Veel geluk!
+
+Gray
+Grijs
+
+Hello! Can you help me with the making of my potion?
+Hallo! Can je me helpen een drankje te maken?
+
+Here you are!
+Hier ben je!
+
+I dont want change my language, sorry.
+Ik wil mijn taal nu niet wijzigen, sorry.
+
+I want change my language
+Ik wil mijn taal wijzigen
+
+I want to be a Demon
+Ik wil een Demon worden
+
+I want to be a Elf
+Ik wil een Elf worden
+
+If you help me I will give you a reward
+Als je me helpt zal ik je een beloning geven
+
+It is very good! To finish my potion I need @@ @@.
+Het is heel goed! Om het drankje te beindigen, heb ik @@ @@ nodig.
+
+Italian
+Italiaans
+
+Langulator
+Langulator
+
+Light blonde
+Licht blond
+
+Light purple
+Licht paars
+
+Light red
+Licht rood
+
+No, I'll go work
+Nee, Ik zal gaan werken
+
+No, it isn't easy to get!
+Nee, het is niet gemakkelijk te verkrijgen!
+
+Old Witch
+Oude Heks
+
+Rat Sailor
+Rat Zeiler
+
+Russian
+Russisch
+
+Sailor Orc
+Zeiler Orc
+
+Sitting Sailor
+Zittende Zeiler
+
+Sleeping Orc
+Slapende Orc
+
+Sleeping Ukar
+Slapende Ukar
+
+Sorry, maybe I can help you later
+Sorry, misschien kan ik je later verder helpen
+
+Spanish
+Spaans
+
+Sure!
+Natuurlijk!
+
+Thank you very much! Here is your reward
+Dank u, dank u! Hier is je beloning
+
+Thanks for your help!
+Bedankt voor je hulp!
+
+Turtle tongue
+Schilpad tong
+
+What language do you want?
+Welke taal wil je?
+
+You didn't collect all the items!#0
+Je hebt niet alle dingen gevonden!
+
+You didn't collect all the items!#1
+Je hebt niet alle dingen gevonden!
+
diff --git a/langs/lang_nl.txt b/langs/lang_nl.txt
new file mode 100644
index 00000000..1fd88bd1
--- /dev/null
+++ b/langs/lang_nl.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+*hips*
+
+... By the power vested in me,
+... Door de macht toegekend aan mij,
+
+Ah, she *hips* is here.
+Ah, ze *hips* is hier.
+
+Are you tired of being what you are?
+Ben jij het moe om uzelf te zijn?
+
+AreaNPC
+AreaNPC
+
+As you want!
+Zoals je wil!
+
+Ash brown
+Asbruin
+
+Bald
+Kaal
+
+Bee spawned
+Bij gespawned
+
+Billy Bons
+Billy Bons
+
+Black
+Zwart
+
+Blaf
+Woef
+
+Ble *hips*... Imma great sail*hips*or!
+Bwe *hips*... Ikke ben ne goeie zeil*hips*er!
+
+Blonde
+Blond
+
+Blue
+Blauw
+
+Boots
+Laarzen
+
+Bowl cut
+Gesneden gelijk een pot
+
+Brown
+Bruin
+
+Brunette
+Bruin
+
+Bun
+Bun
+
+Bunny ears
+Konijn oortjes
+
+Bye bye!
+Daaag!
+
+Can you do something with my color?
+Kan je iets aan mijn kleur doen?
+
+Cap
+Pet
+
+Center parting/Short and slick
+Center parting/Short and slick
+
+Choppy
+Choppy
+
+Combed back
+Naar achter gekamd
+
+Continue?
+Verder gaan?
+
+Copper
+Koper
+
+Copper red
+Roest
+
+Could I ask you which language do you talk? Like that I add you on the list.
+Mag ik je vragen welke taal jij spreekt? Zodat ik jou kan toevoegen aan de lijst.
+
+Demon
+Demon
+
+Desert hat
+Woestijnhoed
+
+Devis
+Devis
+
+Did you bring me @@ @@?#0
+Heb je mij @@ @@ gebracht?
+
+Did you bring me @@ @@?#1
+Heb je mij @@ @@ gebracht?
+
+Do you know some interesting people around here?
+Ken je enkele interessante personen in de buurt?
+
+Do you want to create a bee?
+Wil je een bij spawnen?
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+Maak je geen zorgen, ik ben zeker dat alles goed zal uitdraaien voor ons beiden!
+
+Don't you see that I'm already talking?
+Zie je niet dat ik al aan het spreken ben?
+
+Done.
+Klaar.
+
+Dyeing failed. You lost dye item.
+Het verkleuren faalde. U bent het verkleuringsitem kwijt.
+
+Dyer
+Kleurder
+
+Elmo
+Elmo
+
+Emo
+Emo
+
+Enora
+Enora
+
+Eurni
+Eurni
+
+Eurni the Surgeon
+Eurni de Chirurg
+
+Flat ponytail
+Platte ponytail
+
+For dye your item, you need white item and dye with required color.
+Om iets te verkleuren, moet je een wit item hebben, een kleuroplossing in de gewenste kleur.
+
+Fushia
+Fuchia
+
+Ggrmm grmmm..
+Ggrmm grmmm..
+
+Gloves
+Handschoenen
+
+Good job!
+Goed gedaan!
+
+Green
+Groen
+
+Hahaha, I won't take much of your time, go ahead!
+Hahaha, Ik zal niet veel van je tijd innemen, ga je gang!
+
+He takes a small list and starts reading it.
+He neemt een kleine lijst en begint het te lezen.
+
+Headband
+Hoofdband
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+Hehe. Ik, ik zal proberen een markt te openen, ik heb gehoord dat het hier een grote commerciële stad is, door de haven enzo...
+
+Hello @@
+Hallo @@
+
+Hello dear, what do you want today?#0
+Hallo, wat wil je vandaag?
+
+Hello dear, what do you want today?#1
+Hallo, wat wil je vandaag?
+
+Hello, girl!
+Hallo, meisje!
+
+Hello, stranger!
+Hallo, vreemdeling!
+
+Here is your reward!
+Hier is je beloning!
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+Hey! Ja, ik ben al wakker. Dus, dit is het einde van onze kleine reis tesamen, wat wil je nu doen?
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+Hey! Heb je 't gezien? we zijn aangekomen in de haven vandaag, het was een lange weg van het andere eiland...
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+Hey! Heb je 't gezien? we zijn aangekomen in de haven vandaag, het was een lange weg van het andere eiland...
+
+Hey, girl!
+Hey, meisje!
+
+Hey, guy!
+Hey, jongen!
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+Hey, kijk naar Julia, is ze niet een plaatje? Ze is al sinds enkele minuten naar mij aan het staren... haha! Veel geluk, mijn vriend.
+
+Hey, you lied to me.
+Hey, je hebt tegen mij gelogen.
+
+Hmm, I'm fine for now, thank you.
+Hmm, Ik ben ok nu, dank je.
+
+How can I get it
+Hoe kan ik het krijgen
+
+I can!
+I kan het!
+
+I don't need your help right now, come back later.
+Ik heb je help nu niet nodig, kom later maar terug.
+
+I don't want change my language, sorry.
+Ik wil mijn taal nu niet wijzigen, sorry.
+
+I gave you a reward. I can't give you more.
+Ik heb je een beloning gegeven. Ik kan je niks meer geven.
+
+I made a mistake, I would like to change my language.#0
+Ik heb een fout gemaakt, ik zou graag mijn taal wijzigen.
+
+I made a mistake, I would like to change my language.#1
+Ik heb een fout gemaakt, ik zou graag mijn taal wijzigen.
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+Ik heb hulp nodig om de wig van het schip schoon te maken, maar jij bent niet sterk genoeg om me te helpen.
+
+I need somebody who can clean the bottom of the ship, can you help me?
+Ik heb iemand nodig die de onderkant van het schip kan schoonmaken, kan je me helpen?
+
+I sentence you to death... twice.
+Ik verklaar je tot de dood... twee maal.
+
+I speak Dutch
+Ik spreek Nederlands
+
+I speak English
+Ik spreek Engels
+
+I speak Flemish
+Ik spreek West-Vlaams
+
+I speak French
+Ik spreek Frans
+
+I speak Greek
+
+
+I speak Indonesian
+
+
+I speak Italian
+Ik spreek Italiaans
+
+I speak Russian
+Ik spreek Russisch
+
+I speak Spanish
+Ik spreek Spaans
+
+I think that I will explore around a bit and see what I can find, and you?
+Ik denk dat ik een beetje zal rondkijken en zien dat ik vind, jij?
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+Ik denk dat het schip hier nog wel even zal staan, we hebben een hoop eten nodig en ons schip heeft ook wat reparatie nodig voordat het terug zeevaardig is.
+
+I think you can help me, right?
+Ik denk dat je mij kan helpen, juist?
+
+I want to be a Human
+Ik wil een Mens worden
+
+I want to be a Ifitron
+Ik zou graag een Ifitron worden
+
+I want to be a Orc
+Ik wil een Orc worden
+
+I want to be a Sparron
+Ik zou graag een Sparron worden
+
+I want to be a Ukar
+Ik wil een Ukar worden
+
+I want to dye to different color
+Ik zou graag in een andere kleur verkleuren.
+
+I will give you @@gp.
+Ik zal je @@gp geven.
+
+I will need some coffee...
+Ik wil wat koffie hebben...
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+Ik zal hier een beetje rusten in het dorp, ik voel met niet zo goed na deze reis...
+
+I will!
+Ik zal het doen!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+Ik vraag 't me af, ik denk dat ik beetje bij beetje zal ontdekken en zien wat er gebeurt!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+Ik vraag 't me af, ik denk dat ik beetje bij beetje zal ontdekken en zien wat er gebeurt!
+
+I'd like to get a different style.
+Ik zou graag een andere stijl willen.
+
+I'll come visit! I hope that this island will give us what we're looking for...
+Ik zal je komen bezoeken! Ik hoop dat dit eiland onz zal geven waar we op zoek naar zijn...
+
+I'll get it!#0
+Ik zal het even halen!
+
+I'll get it!#1
+Ik zal het even halen!
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+Ik ben Julia, mijn job is om iedereen te registreren die van het schip komt en gaat.
+
+I'm busy#0
+Ik ben bezig
+
+I'm busy#1
+Ik ben bezig
+
+I've a girlfriend, and she needs me to do something unavailable.
+Ik een vriendin, en ze vraagt mij iets onmogelijks.
+
+If you dont have it, then you cant dye.
+Als u het niet heeft, dan kan u niet iets verkleuren...
+
+Imperial
+Imperiaal
+
+Infinitely long
+Oneindig lang
+
+It's *hips* wrong, Imma not *hips* drunken.
+Het is *hips* verkeerd, Ikke ben niet *hips* dronken.
+
+Julia
+Julia
+
+Khaki
+Kaki
+
+Kota
+Kota
+
+Leave alone my family treasure!
+Laat mijn familie juwelen met rust!
+
+Leave it
+Laat het liggen
+
+Let me see your work...
+Laat me je werk eens zien...
+
+Let me sleep...
+Laat me slapen...
+
+Let me think...
+Laat me even denken...
+
+Lettuce
+Sla
+
+Lime
+Lichtgroen
+
+Lloyd
+Lloyd
+
+Long and curly
+Lang en krullend
+
+Long and slick
+Lang en recht
+
+Long ponytail
+Lang ponytail
+
+Make less noise, please.
+Maak wat minder lawaai, aub.
+
+Mane
+Manen
+
+Marko
+Marko
+
+Mauve
+Mauve
+
+Maybe you will be the next?#0
+Misschien word jij de volgende?
+
+Maybe you will be the next?#1
+Misschien word jij de volgende?
+
+Mini-skirt
+Minirok
+
+Mohawk
+Mohawk
+
+Move along, kid.
+Ga maar verder, kind.
+
+Navy blue
+Marineblauw
+
+No
+Nee
+
+No problem, do you need something else?
+Geen probleem, wil je nog iets anders?
+
+No!
+Nee!
+
+No, thank you
+Nee, dank je
+
+No, thanks!
+Nee, danku!
+
+No, they are way too dangerous for me!
+Nee, Ze zijn veel te gevaarlijk voor me!
+
+Not yet.
+Nog niet..
+
+Note
+Nota
+
+Nothing, sorry
+Niks, sorry
+
+Now i have class
+Nu heb ik klasse
+
+Of course! Tell me which language you speak.
+Natuurlijk! Vertel me welke taal je spreekt.
+
+Off black
+Bijna zwart
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+Oh echt? Ik heb niet veel tijd nu, ik moet gaan. Sorry.
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+Oh, geen probleem! In elk geval, als je vragen hebt, kan je 't vragen aan Julia aan de receptie, ze is heel vriendelijk!
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+Oh, dank je! Yo, wat zou ik zonder je help doen. Ok, ik zie je nog wel!
+
+Ok, Done. You need something else?
+Ok, Klaar. Heb je nog iets anders nodig?
+
+Ok, ok. Come back if you change your mind.
+Ok, ok. Kom maar terug als je van gedacht veranderd.
+
+Ok, thanks
+Ok, dank u
+
+Okay, I'm ready to work!#0
+Oke, Ik ben klaar om te werken!
+
+Okay, I'm ready to work!#1
+Oke, Ik ben klaar om te werken!
+
+Okay, you can start!
+Oke, je kan starten!
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+Als 't klaar is, zal je gekicked worden van de server. Niet panikeren, dat is volkomen normaal.
+
+Orange
+Oranje
+
+Pants
+Broek
+
+Parted
+Gesplitst
+
+Perky ponytail
+Parmantige ponytail
+
+Peter
+Peter
+
+Pigtails
+Vlechtjes
+
+Pink
+Roze
+
+Please change my race
+Verander mijn ras
+
+Please do, my dear
+Doe maar
+
+Please select a race
+Kies een ras
+
+Pompadour
+Pompadour
+
+Punk
+Punk
+
+Purple
+Roze
+
+Rabbit ears
+Konijn oortjes
+
+Read it
+Lees het
+
+Red
+Rood
+
+Robe
+Kleed
+
+Ronan
+Ronan
+
+Rrrr pchhhh...
+Rrrr pchhhh...
+
+Scarf
+Sjaal
+
+Server
+Server
+
+ServiceNPC
+ServiceNPC
+
+Shop 1
+Shop 1
+
+Shop 2
+Shop 2
+
+Shop 3
+Shop 3
+
+Shop 4
+Shop 4
+
+Shop 5
+Shop 5
+
+Shop 6
+Shop 6
+
+Shop 7
+Shop 7
+
+Short and curly
+Kort en krullend
+
+Short punk
+Korte punk
+
+Short robe
+Kort kleed
+
+Short tank top
+Korte spaghettibandjes
+
+Shorts
+Short
+
+Silver
+Zilver
+
+Skirt
+Rok
+
+Sleeping Elf
+Slapende Elf
+
+So die already!
+Dus ga alsjeblieft zo snel mogelijk dood!
+
+Sorcerer robe
+Tovenaarskleed
+
+Sorry you dont have components.
+Sorry, je hebt geen componenten.
+
+Surprise me
+Verras me
+
+T-neck sweater
+Coltrui
+
+Tank top
+Spaghettibandjes
+
+Teal
+Groenblauw
+
+TestNPC
+TestNPC
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+Er is ook @@ aan de dokken, het zal een plezier zijn voor haar om je te helpen!
+
+They are really nice and may help you much more than me.
+Ze zijn echt vriendelijk en kunnen je misschien veel meer verder helpen dan mij.
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+Dit eiland is nogal grappig om een avontuur te starten, en het is ook een goeie plaats om mensen te ontmoeten, haha!
+
+This note was left by somebody.
+Deze nota was achtergelaten door iemand.
+
+Tousled layers
+Warrige lagen
+
+Turtles drop it. Good luck!
+Schilpadden laten het vallen. Veel geluk!
+
+V-neck sweater
+V-hals trui
+
+Warin
+Warin
+
+Warning: All characters under this login will be changed.
+Waarschuwing: Alle karakters bij deze login zullen worden veranderd.
+
+Wave
+Zwaai
+
+Wavy
+Golvend
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+We zijn in [@@], dat is een grote havenstad, veel beginners starten hun avondtuur hier.
+
+Wedding
+Trouw
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+Wel, Ik zal wel zien wat er gebeurt. Ik hoop dat ik veel geluk zal hebben!
+
+What can I dye for you today?
+Wat kan ik voor je kleuren vandaag?
+
+What color?
+Welke kleur?
+
+What do you want to do with it?
+Wat wil je ermee doen?
+
+What do you want to dye?
+Wat wil je verkleuren?
+
+What do you want today?
+Wat wil je vandaag doen?
+
+What do you want?
+Wat wil je?
+
+What will you do during this break?
+Wat zal je doen gedurende deze pauze?
+
+What? Never!
+Wat? Nooit!
+
+What? This reward is too small!
+Wat? Deze beloning is veel te klein!
+
+Where are we?
+Waar zijn we?
+
+Where is this cup?..*hips*
+Waar is deze beker?..*hips*
+
+White
+Wit
+
+Why do you *hips* at me?!
+Waarom doe je *hips* naar mij?!
+
+Why i cant dye my item?
+Waarom kan ik mijn item niet verkleuren?
+
+Why not, I need to train anyway.
+Waarom niet, Ik moet toch nog wat trainen.
+
+Wild
+Wild
+
+Witch hat
+Heksenhoed
+
+Would you be interested in a race change?
+Zou u geinteresseerd zijn in een ras verandering?
+
+Would you be interested in a sex change?
+Zou u geinteresseerd zijn in een geslachts verandering?
+
+Yeah, but what reward will I get?
+Mja, maar welke beloning krijg ik?
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+Mja, als je wil, Zal ik een markt openen in dit dorp, misschien kan je me komen bezoeken? Het zou heel leuk zijn om je opnieuw te zien!
+
+Yellow
+Geel
+
+Yes
+Ja
+
+Yes, I can!
+Ja, dat kan ik!
+
+Yes, I did it!#0
+Ja, ik heb het gedaan!
+
+Yes, I did it!#1
+Ja, ik heb het gedaan!
+
+Yes, please!
+Ja, aub!
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+Yo, Ik heb het gevonden, cool! Ik heb alles, behalve @@ @@. Kan je me dat brengen?
+
+Yo, can you help me, bro?
+Yo, kan je me helpen, man?
+
+Yo, can you help me, sis?
+Yo, kan je me helpen, vrouw?
+
+Yo, do you see what I mean?
+Yo, zie je wat ik bedoel?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+Yo, zie: mijn vriend heeft me geadviseerd om een coole en lekkere maaltijd te maken, en hij heeft me instructies gegeven.
+
+Yo, now just bring it to me.
+Yo, geef het me nu maar.
+
+Yo, thank you!
+Yo, dank je!
+
+Yo, that's good that you want to help me.
+Yo, het is goed dat je me wilt helpen.
+
+Yo, you really brought it!
+Yo, je hebt het echt gebracht!
+
+You can start now.
+Je kan nu starten.
+
+You can't go there!
+Je mag daar niet in gaan!
+
+You don't have enough to pay for my services.
+Je hebt niet genoeg geld om voor mijn diensten te betalen.
+
+You failed the task!#0
+Je hebt je taak gefaald!
+
+You failed the task!#1
+Je hebt je taak gefaald!
+
+You should go see the sailors around here.#0
+Je zou de zeilers in de buurt kunnen aanspreken.
+
+You should go see the sailors around here.#1
+Je zou de zeilers in de buurt kunnen aanspreken.
+
+Zzzzzzzzzz
+Zzzzzzzzzz
+
+is helping me.
+is me aan het helpen.
+
diff --git a/langs/lang_ru.old b/langs/lang_ru.old
new file mode 100644
index 00000000..57439425
--- /dev/null
+++ b/langs/lang_ru.old
@@ -0,0 +1,393 @@
+@@ helps me.
+@@ помогает мне.
+
+Bla bla bla!
+Бла бла бла!
+
+Blah blah blah!
+Блах блах блах!
+
+Ble ble ble!
+Бле бле бле!
+
+Bli bli bli!
+Бли бли бли!
+
+Blo blo blo!
+Бло бло бло!
+
+Blu blu blu!
+Блу блу блу!
+
+Bly bly bly!
+Блю блю блю!
+
+Can you collect it for me?
+Ты можешь собрать это для меня?
+
+Can you do something for my color?
+Вы можете что-нибудь сделать с моим цветом?
+
+Dark brown
+Темно-коричневый
+
+Dark purple
+Темно-розовый
+
+Dark red
+Темно-красный
+
+Did you bring me 30 @@?#0
+Ты принесла мне 30 @@?
+
+Did you bring me 30 @@?#1
+Ты принес мне 30 @@?
+
+Did you bring me 30 lettuce?#0
+Ты принесла мне 30 салат?
+
+Did you bring me 30 lettuce?#1
+Ты принес мне 30 салат?
+
+Did you collect 10 @@?#0
+Ты собрала 10 @@?
+
+Did you collect 10 @@?#1
+Ты собрал 10 @@?
+
+Did you collect @@ @@?#0
+Ты собрала @@ @@?
+
+Did you collect @@ @@?#1
+Ты собрал @@ @@?
+
+Do you know some people to met around?
+Ты знаешь кого-нибуть, кого можно встретит неподалеку?
+
+Do you see that sailor?
+Ты видишь этого матроса?
+
+Do you want to create bee?
+Ты хочешь создать пчелу?
+
+Don't worry, I'm sure that everything will work well for both of us!
+Не волнуйся, я думаю все будет нормально для нас обоих!
+
+Done
+Сделано
+
+Drunken Sailor
+Пьяный матрос
+
+English
+Английский
+
+French
+Французский
+
+Get your reward!
+Получи свою награду!
+
+Ghmmmmmmmm
+Гхмммммммм
+
+Good luck!
+Удачи!
+
+Good work!
+Хорошая работа!
+
+Gray
+Серый
+
+Haha, I won't take you much time, go ahead!
+Хаха, я не хочу забирать у тебя много времени, продолжай!
+
+He took a small list began reading it
+Он взял маленький листок и начал читать
+
+Hehe, me I will try to open a market, I heard that it was a big city of commerce here, because of the port and all..
+Хехе, я попробую открыть рынок, Я слышал что здесь был большой коммерческий город, потому что порт и все остальное..
+
+Hehe, you lied to me.
+Ты врешь мне.
+
+Hello dear, what do you want today?
+Привет дорогой, что ты сегодня хочешь?
+
+Hello! Can you help me with the making of my potion?
+Привет! Ты можешь мне помочь с приготовлением зелья?
+
+Here you are!
+Вот тебе!
+
+Hey! Yes, I'm already wake up, so, it's end of our little road together, what will you do you now?
+Хей! Да, я уже проснулся, и так это конец нашей общей дороги, что тыперь будешь делать?
+
+Hey! You saw? we are arrived to the port today, it was long from the other island...#0
+Хей! Ты видела? Мы прибыли в портовый город, это далеко от другого острова...
+
+Hey! You saw? we are arrived to the port today, it was long from the other island...#1
+Хей! Ты видел? Мы прибыли в портовый город, это далеко от другого острова...
+
+Hey, look Julia, she is beauty eh? She looks at me since some minute... haha! Good luck my friend.
+Эй, посмотри на Жулию, она красива да? Она смотрит на меня уже несколько минут... хаха! удачи мой друг.
+
+Hmm, I'm fine for now, thanks you
+Хм, у меня и так все в порядке. Спасибо
+
+I did a mistake, I will like to change my language.#0
+Я сделала ошибку, и хотела бы поменять свой язык.
+
+I did a mistake, I will like to change my language.#1
+Я сделал ошибку, и хотел бы поменять свой язык.
+
+I don't need your help right now. Come later.
+Сейчас мне не нужна твоя помощь. Приходи позже.
+
+I dont want change my language, sorry.
+Я не хочу менять свой язык, извините.
+
+I need help for cleaning the wedge of the ship, but you aren't as much strong as I need to help.
+Мне нужна помощь, чтобы очистить корабль, но ты слищком слаб для этого.
+
+I need somebody who can clean the bottom of the ship, could you help me?
+Мне нужен кто-то, кто может очистить нижнюю часть корабля. Можешь мне помочь?
+
+I think that I will explore the around and see what I can found, and you?
+Я думаю что я поизучаю вокруг и посмотрю что я могу найти, а ты?
+
+I think that the ship will still here some moments, we need many foods and some reparation for our ship before to go back to the sea.
+Я думаю что корабль будет здесь некоторое время, нам надо много еды небольшой ремонг корабля, перед тем, как отправится обратно в море.
+
+I want change my language
+Я хочу изменить свой язык
+
+I want to be a Demon
+Я хочу быть демоном
+
+I want to be a Elf
+Я хочу быть эльфом
+
+I will like to get different style
+Я хотел бы изменить стиль
+
+I will rest a bit much here or in town, I don't feel so well after this voyage...
+Я отдохну немного здесь или в городе, я себя чувствую не слишком хорошо после этого путешествия...
+
+I wonder, I think that I will discover little by little and I will see what happens!#0
+Я удивлена, я думаю я исследую немного и посмотрю, что получится!
+
+I wonder, I think that I will discover little by little and I will see what happens!#1
+Я удивлен, я думаю я исследую немного и посмотрю, что получится!
+
+If you help me I will give you a reward
+Если ты мне поможешь, то я дам тебе награду
+
+In what language are you talking to?
+На каком языке ты разговариваешь?
+
+It is very good! To finish my potion I need 10 @@.
+Это очень хорошо! Для того, чтобы закончить приготовление зелья мне надо 10 @@.
+
+It is very good! To finish my potion I need @@ @@.
+Очень хорошо! Чтобы закончить приготовление зелья, мне нужно @@ @@.
+
+Italian
+Итальянский
+
+Langulator
+Переводчик
+
+Leave me sleep...
+Дай мне поспать...
+
+Let me see at you work...
+Дай мне посмотреть на твою работу...
+
+Light blonde
+Светло-русый
+
+Light purple
+Светло-розовый
+
+Light red
+Светло-красный
+
+Make less noise please.
+Создавай поменьше шума, пожалуйста.
+
+May be you will be the next?#0
+Может быть ты будешь следующей?
+
+May be you will be the next?#1
+Может быть ты будешь следующим?
+
+No, I'll go work
+Нет, я иду работать
+
+No, it isn't easy to get!
+Нет, это не просто получить!
+
+No, they are too dangerous for me!
+Это слишком опасно для меня!
+
+Of course! Say me which one is yours.
+Конечно! Скажик какой твой.
+
+Oh really? I don't got many time right now, I need to go, sorry.
+На самом деле? У меня нет много времени сейчас. Мне надо идти, извени.
+
+Oh, no problem! Anyway, if you got something to ask, go see Julia at the reception, she is very nice!
+Ох, без проблем! В любом случае, если тебе надо что-то спросить, иди в Джулии. Она очень любезна!
+
+Oh, thank you! Yo, what would I like to do without your help. Ok, see you!
+Ох, спасибо! Йо, чтобы я делал без твоей помощи. Хорошо, увидимся!
+
+Ok I will come! I hope that this island will give us what we searched..
+Хорошо, я иду! Я надеюсь что этот остров даст нам то, что мы ищем..
+
+Ok, Ok. Come back if you change your mind.
+Хорошо, хорошо. Возвращайся если передумаеш.
+
+Okay, I am ready to work!#0
+Хорошо, я готова к работе!
+
+Okay, I am ready to work!#1
+Хорошо, я готов к работе!
+
+Old Witch
+Старая колдунья
+
+Please select race
+Пожалуйста выбери рассу
+
+Rat Sailor
+Матрос с крысой
+
+Russian
+Русский
+
+Sailor Orc
+Моряк-орк
+
+Sitting Sailor
+Спящий моряк
+
+Sleeping Orc
+Спящий орк
+
+Sleeping Ukar
+Спящий укар
+
+Sorry, maybe I can help you later
+Прости, может быть я смогу помочь тебе позже
+
+Spanish
+Испанский
+
+Sure!
+Конечно!
+
+Thank you very much! Here is your reward
+Большое спасибо! Вот твоя награда
+
+Thanks for your help!
+Спасибо за помощь!
+
+They are really nice and will may help you much than me.
+Они действительно хорошие, и возможно помогут больше чем я.
+
+This island is kinda funny for starting adventure, and it's a good place for meeting people too, haha!
+Этот остров забавен для начала приключений, и это хорошее место для встречи других людей тоже. хаха!
+
+Turtle tongue
+Язык черепахи
+
+We are THERE!
+Мы ЗДЕСЬ!
+
+We are at [@@], it's a big port-city, many beginners start they adventure here, may be you will be the next?
+Мы в [@@], это большой портовый город. Многие начинают здесь свои приключения, возможно ты будешь следующим?
+
+We are at [@@], it's a big port-city, many beginners start they adventure here.
+Мы в [@@]. Это большой портовый город. МНогие здесь начинают свои приключения.
+
+Well, I will see! I hope that the luck will follow me!
+Посмотрим! Я надеюсь что удача последует за мной!
+
+What language do you want?
+Какой язык ты хочешь?
+
+What? It is a very small reward!
+Что? это слишком маленькая награда!
+
+Why not, I need to train.
+Почему бы и нет? Мне нужна тренировка.
+
+Would you maybe be interested in a race change?
+Возможно ты хочешь поменять свою рассу?
+
+Would you maybe be interested in a sex change?
+Может ты хочешь поменять свой пол?
+
+Yeah, but which reward I will get?
+Да, но какую награду я получу?
+
+Yeah, if you want, I will open a market in this town, may you can visit me? It could be fun to see you again!
+Да, если тебе надо, я открою рынок в этом городе, ты сможешь навестить меня? Это будет хорошо увидить тебя опять!
+
+Yo, I found it cool! I have everything, except 30 @@. Can you bring it to me?
+Йо, я думаю это круто! У меня есть все, за исключением 30 @@. Ты можешт принести их мне?
+
+Yo, I found it cool! I have everything, except 30 lettuce. Can you bring it to me?
+Йо, я думаю это круто! У меня есть все, за исключением 30 салатов. Ты можешт принести их мне?
+
+Yo, I found it cool! I have everything, except @@ @@. Can you bring it to me?
+Йо, я думаю это круто! У меня есть все, за исключением @@ @@. Ты можешт принести их мне?
+
+Yo, can you help me bro?
+Йо, ты можешь мне помочь брат?
+
+Yo, can you help me sis?
+Йо, ты можешь мне помочь сестра?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me an instructions.
+Йо, смотри, моя доружка рекомендует мне приготовить вкусную еду, и она дала мне рецепт.
+
+You didn't collect all the items!#0
+Ты не собрала все необходимые предметы!
+
+You didn't collect all the items!#1
+Ты не собрал все необходимые предметы!
+
+You got also @@, on the Dock, it will be a pleasure for her to help you!
+Ты также можешь поговорить с @@ в доках. Для нее будет удовольствием помочь тебе!
+
+You should go see sailors around.#0
+Ты должна встретить моряков поблизости.
+
+You should go see sailors around.#1
+Ты должен встретить моряков поблизости.
+
+bla
+бла
+
+bla bla
+бла бла
+
+bla bla bla
+бла бла бла
+
+helps me.
+помогает мне.
+
+lettuce
+салат
+
+no
+нет
+
+yes
+да
+
diff --git a/langs/lang_ru.txt b/langs/lang_ru.txt
new file mode 100644
index 00000000..5f429190
--- /dev/null
+++ b/langs/lang_ru.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+*ик*
+
+... By the power vested in me,
+... Силой возложенной на меня,
+
+Ah, she *hips* is here.
+Ах, она *ик* здесь.
+
+Are you tired of being what you are?
+Ты устал быть тем, кем ты являешься?
+
+AreaNPC
+AreaNPC
+
+As you want!
+Как пожелаешь!
+
+Ash brown
+Коричневый
+
+Bald
+Лысый
+
+Bee spawned
+Пчела создана
+
+Billy Bons
+Билли Бонс
+
+Black
+Черный
+
+Blaf
+Блаф
+
+Ble *hips*... Imma great sail*hips*or!
+Бле *ик* ... Яаа великий мор*ик*як!
+
+Blonde
+Блондин
+
+Blue
+Голубой
+
+Boots
+Ботинки
+
+Bowl cut
+Горшок
+
+Brown
+Коричневый
+
+Brunette
+Брюнет
+
+Bun
+Булка
+
+Bunny ears
+Кроличьи уши
+
+Bye bye!
+Пока-пока!
+
+Can you do something with my color?
+Вы можете что-нибудь сделать с цветом?
+
+Cap
+Кепка
+
+Center parting/Short and slick
+Разделенные / короткие и гладкие
+
+Choppy
+Порывистый
+
+Combed back
+Комбинированный
+
+Continue?
+Продолжить?
+
+Copper
+Чопер
+
+Copper red
+Нежно-красный
+
+Could I ask you which language do you talk? Like that I add you on the list.
+Могу я у знать какой язык ты используешь при разговоре? Я смогу тебя записать в список.
+
+Demon
+Демон
+
+Desert hat
+Пустынная шапка
+
+Devis
+Девис
+
+Did you bring me @@ @@?#0
+Ты принесла мне @@ @@?
+
+Did you bring me @@ @@?#1
+Ты принес мне @@ @@?
+
+Do you know some interesting people around here?
+Ты знаешь каких-нибудь интересных людей в округе?
+
+Do you want to create a bee?
+Ты хочешь создать пчелу?
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+Не волнуйся, я думаю все будет нормально для нас обоих!
+
+Don't you see that I'm already talking?
+Ты не видишь что я и так разговариваю?
+
+Done.
+Сделано.
+
+Dyeing failed. You lost dye item.
+Покраска не удалась. Вы потеряли краску.
+
+Dyer
+Красильщик
+
+Elmo
+Элмо
+
+Emo
+Эмо
+
+Enora
+Энора
+
+Eurni
+Еурни
+
+Eurni the Surgeon
+Хирург Еурни
+
+Flat ponytail
+Плоский хвост
+
+For dye your item, you need white item and dye with required color.
+Чтобы покрасить что-то, тебе необходима вещь белого цвета и пузырек с необходимой краской.
+
+Fushia
+Фушия
+
+Ggrmm grmmm..
+Ггрмм грммм..
+
+Gloves
+Перчатки
+
+Good job!
+Хорошая работа!
+
+Green
+Зеленый
+
+Hahaha, I won't take much of your time, go ahead!
+Хаха, я не хочу забирать у тебя много времени, продолжай!
+
+He takes a small list and starts reading it.
+Он взял маленький листок и начал читать
+
+Headband
+Повязка для головы
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+Хехе, я попробую открыть рынок, Я слышал что здесь был большой коммерческий город, потому что порт и все остальное...
+
+Hello @@
+Привет @@
+
+Hello dear, what do you want today?#0
+Привет дорогая, что ты сегодня хочешь?
+
+Hello dear, what do you want today?#1
+Привет дорогой, что ты сегодня хочешь?
+
+Hello, girl!
+Здравствуй, девушка!
+
+Hello, stranger!
+Здравствуй, незнакомец!
+
+Here is your reward!
+Вот твоя награда!
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+Хей! Да, я уже проснулся. И так это конец нашей общей дороги, что ты теперь будешь делать?
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+Хей! Ты видела? Мы прибыли в портовый город, это был долгий путь с другого острова...
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+Хей! Ты видел? Мы прибыли в портовый город, это был долгий путь с другого острова...
+
+Hey, girl!
+Привет, девушка!
+
+Hey, guy!
+Привет, парень!
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+Эй, посмотри на Джулию, она красива, да? Она смотрит на меня уже несколько минут... ха-ха! удачи мой друг.
+
+Hey, you lied to me.
+Хей, ты мне врешь.
+
+Hmm, I'm fine for now, thank you.
+Хм, у меня и так все в порядке. Спасибо.
+
+How can I get it
+Как я могу достать это
+
+I can!
+Я могу!
+
+I don't need your help right now, come back later.
+Сейчас мне не нужна твоя помощь. Приходи позже.
+
+I don't want change my language, sorry.
+Я не хочу менять свой язык, извините.
+
+I gave you a reward. I can't give you more.
+Я дал тебе награду. Я не могу дать тебе что-то еще.
+
+I made a mistake, I would like to change my language.#0
+Я сделала ошибку, и хотела бы поменять свой язык.
+
+I made a mistake, I would like to change my language.#1
+Я сделал ошибку, и хотел бы поменять свой язык.
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+Мне нужна помощь, чтобы очистить корабль, но ты слишком слаб для этого.
+
+I need somebody who can clean the bottom of the ship, can you help me?
+Мне нужен кто-то, кто может очистить нижнюю часть корабля. Можешь мне помочь?
+
+I sentence you to death... twice.
+Я приговариваю тебя к смерти... дважды.
+
+I speak Dutch
+Я говорю на голландском
+
+I speak English
+Я говорю на английском
+
+I speak Flemish
+Я говорю на фламандском
+
+I speak French
+Я говорю на французском
+
+I speak Greek
+
+
+I speak Indonesian
+
+
+I speak Italian
+Я говорю на итальянском
+
+I speak Russian
+Я говорю на русском
+
+I speak Spanish
+Я говорю на испанском
+
+I think that I will explore around a bit and see what I can find, and you?
+Я думаю, что исследую окрестности, и посмотрю, что смогу найти, а ты?
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+Я думаю, что корабль будет здесь некоторое время. Нам надо много еды, и, наш корабль нуждается в небольшом ремонте, перед тем, как отправляться обратно в море.
+
+I think you can help me, right?
+Я думаю ты мне можешь помочь, правильно?
+
+I want to be a Human
+Я хочу быть человеком
+
+I want to be a Ifitron
+Я хочу быть ифитроном
+
+I want to be a Orc
+Я хочу быть орком
+
+I want to be a Sparron
+Я хочу быть спароном
+
+I want to be a Ukar
+Я хочу быть укаром
+
+I want to dye to different color
+Я хочу покрасить в другой цвет
+
+I will give you @@gp.
+Я дам тебе @@gp.
+
+I will need some coffee...
+Мне надо немного кофе...
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+Я отдохну немного здесь или в городе, чувствую себя не слишком хорошо, после этого путешествия...
+
+I will!
+Я выполню!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+Я удивлена, я думаю я исследую немного и посмотрю, что получится!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+Я удивлен. Думаю я исследую немного и посмотрю, что получится!
+
+I'd like to get a different style.
+Я бы хотел сменить стиль.
+
+I'll come visit! I hope that this island will give us what we're looking for...
+Я пойду! Я надеюсь что этот остров даст нам то, что мы ищем...
+
+I'll get it!#0
+Я сделаю это!
+
+I'll get it!#1
+Я сделаю это!
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+Я Джулия, моя работа - запись всех кто заходит на корабль или выходит с него.
+
+I'm busy#0
+Я занята
+
+I'm busy#1
+Я занят
+
+I've a girlfriend, and she needs me to do something unavailable.
+У меня есть подружка, и она хочет чтобы я достал то, чего ей не хватает.
+
+If you dont have it, then you cant dye.
+Если у тебя этого нет, то ты не можешь что-либо покрасить.
+
+Imperial
+Имперский
+
+Infinitely long
+Бесконечную длину
+
+It's *hips* wrong, Imma not *hips* drunken.
+Это *ик* неправильно, яя не *ик* пьяный.
+
+Julia
+Джулия
+
+Khaki
+Хаки
+
+Kota
+Кота
+
+Leave alone my family treasure!
+Оставьте в покое мое сокровище!
+
+Leave it
+Оставь его
+
+Let me see your work...
+Дай мне посмотреть на твою работу...
+
+Let me sleep...
+Дай мне поспать...
+
+Let me think...
+Дай мне подумать...
+
+Lettuce
+Салат
+
+Lime
+Лимон
+
+Lloyd
+Ллойд
+
+Long and curly
+Длинный волнистый
+
+Long and slick
+Длинный и пятном
+
+Long ponytail
+Длинный хвост
+
+Make less noise, please.
+Создавай поменьше шума, пожалуйста.
+
+Mane
+Грива
+
+Marko
+Марко
+
+Mauve
+Розовый
+
+Maybe you will be the next?#0
+Возможно ты будешь следующей?
+
+Maybe you will be the next?#1
+Возможно ты будешь следующим?
+
+Mini-skirt
+Мини-юбка
+
+Mohawk
+Мохок
+
+Move along, kid.
+Иди отсюда, ребенок.
+
+Navy blue
+Тёмно-синий
+
+No
+Нет
+
+No problem, do you need something else?
+Без проблем, тебе еще что-то нужно?
+
+No!
+Нет!
+
+No, thank you
+Нет, спасибо
+
+No, thanks!
+Не, спасибо!
+
+No, they are way too dangerous for me!
+Нет, они слишком опасны для меня!
+
+Not yet.
+Еще нет.
+
+Note
+Записка
+
+Nothing, sorry
+Ничего, извините
+
+Now i have class
+Сейчас у меня класс
+
+Of course! Tell me which language you speak.
+Конечно! Скажи мне, на каком языке ты разговариваешь.
+
+Off black
+Черный
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+На самом деле? У меня нет много времени сейчас. Мне надо идти. Извини.
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+Ох, без проблем! В любом случае, если тебе надо что-то спросить, иди к Джулии, она очень любезна!
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+Ох, спасибо! Йо, чтобы я делал без твоей помощи. Хорошо, увидимся!
+
+Ok, Done. You need something else?
+Выполнено. Тебе еще что-то нужно?
+
+Ok, ok. Come back if you change your mind.
+Хорошо, хорошо. Возвращайся если передумаешь.
+
+Ok, thanks
+Хорошо, спасибо
+
+Okay, I'm ready to work!#0
+Хорошо, я готова к работе!
+
+Okay, I'm ready to work!#1
+Хорошо, я готов к работе!
+
+Okay, you can start!
+Хорошо, можешь начинать!
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+Когда это закончится, ты будешь выкинут с сервера. Не паникуй, т.к. все впорядке.
+
+Orange
+Оранжевый
+
+Pants
+Брюки
+
+Parted
+Разделенный
+
+Perky ponytail
+Бродящий хвост
+
+Peter
+Петр
+
+Pigtails
+Косички
+
+Pink
+Розовый
+
+Please change my race
+Пожалуйста измените мою расу
+
+Please do, my dear
+Сделай это, мой дорогой
+
+Please select a race
+Пожалуйста выбери расу
+
+Pompadour
+Помпадур
+
+Punk
+Панк
+
+Purple
+Фиолетовый
+
+Rabbit ears
+Заячьи уши
+
+Read it
+Прочитать
+
+Red
+Красный
+
+Robe
+Мантия
+
+Ronan
+Ронан
+
+Rrrr pchhhh...
+Рррр пчхххх...
+
+Scarf
+Шарф
+
+Server
+Сервер
+
+ServiceNPC
+СервисныйНИП
+
+Shop 1
+Магазин 1
+
+Shop 2
+Магазин 2
+
+Shop 3
+Магазин 3
+
+Shop 4
+Магазин 4
+
+Shop 5
+Магазин 5
+
+Shop 6
+Магазин 6
+
+Shop 7
+Магазин 7
+
+Short and curly
+Короткий и фигурный
+
+Short punk
+Короткий панк
+
+Short robe
+Котрокая мантия
+
+Short tank top
+Короткая броня
+
+Shorts
+Шорты
+
+Silver
+Серебро
+
+Skirt
+Юбка
+
+Sleeping Elf
+Спящий эльф
+
+So die already!
+И так умри же!
+
+Sorcerer robe
+Мантия волшебника
+
+Sorry you dont have components.
+Извини, у тебя не хватает компонентов.
+
+Surprise me
+Удивите меня
+
+T-neck sweater
+Т-образный свитер
+
+Tank top
+Броня
+
+Teal
+Чирок
+
+TestNPC
+ТестовыйНИП
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+Также в доках можешь найти @@. Для нее будет удовольствием помогать тебе!
+
+They are really nice and may help you much more than me.
+Они действительно хорошие, и могут помочь тебе больше, чем я.
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+Этот остров забавен для начала приключений, и это хорошее место для встречи других людей тоже. хаха!
+
+This note was left by somebody.
+Эта записка была оставлена кем-то.
+
+Tousled layers
+Растрепанные слои
+
+Turtles drop it. Good luck!
+Черепахи оставляют его. Удачи!
+
+V-neck sweater
+V-образный свитер
+
+Warin
+Варин
+
+Warning: All characters under this login will be changed.
+Предупреждение: Все персонажи, принадлежащие текущему логину, будут изменены.
+
+Wave
+Волна
+
+Wavy
+Волнистый
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+Мы в [@@], это большой портовый город. Многие начинают здесь свои приключения.
+
+Wedding
+Свадебный
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+Хорошо, я посмотрю что получится. Я надеюсь что удача последует за мной!
+
+What can I dye for you today?
+Что я могу покрасить тебе сегодня?
+
+What color?
+Какой цвет?
+
+What do you want to do with it?
+Что ты хочешь с ним сделать?
+
+What do you want to dye?
+Что ты хочешь покрасить?
+
+What do you want today?
+Что тебе сегодня нужно?
+
+What do you want?
+Что ты хочешь?
+
+What will you do during this break?
+Что ты будешь делать во время этой остановки?
+
+What? Never!
+Что? Никогда!
+
+What? This reward is too small!
+Что? Эта награда слишком мала!
+
+Where are we?
+Где мы?
+
+Where is this cup?..*hips*
+Где этот стакан?..*ик**
+
+White
+Белый
+
+Why do you *hips* at me?!
+Почему ты *ик* на меня?!
+
+Why i cant dye my item?
+Почему я не могу покрасить свои вещи?
+
+Why not, I need to train anyway.
+Почему нет, мне все равно надо тренироваться.
+
+Wild
+Дикий
+
+Witch hat
+Шляпа ведьмы
+
+Would you be interested in a race change?
+Возможно ты хочешь поменять свою расу?
+
+Would you be interested in a sex change?
+Может ты хочешь поменять свой пол?
+
+Yeah, but what reward will I get?
+Да, но какую награду я получу?
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+Да, если тебе надо, я открою рынок в этом городе, возможно ты сможешь навестить меня? Будет интересно увидеть тебя снова!
+
+Yellow
+Желтый
+
+Yes
+Да
+
+Yes, I can!
+Да, я могу!
+
+Yes, I did it!#0
+Да, я сделала это!
+
+Yes, I did it!#1
+Да, я сделал это!
+
+Yes, please!
+Да, пожалуйста!
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+Йо, я думаю это круто! У меня есть все, за исключением @@ @@. Ты можешь принести их мне?
+
+Yo, can you help me, bro?
+Йо, ты можешь мне помочь брат?
+
+Yo, can you help me, sis?
+Йо, ты можешь мне помочь сестра?
+
+Yo, do you see what I mean?
+Йо, ты понимаешь, что я имею в виду?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+Йо, смотри, моя подружка рекомендует мне приготовить вкусную еду, и она дала мне рецепт.
+
+Yo, now just bring it to me.
+Йо, просто принеси мне его.
+
+Yo, thank you!
+Йо, спасибо!
+
+Yo, that's good that you want to help me.
+Йо, это хорошо, что ты хочешь помочь мне.
+
+Yo, you really brought it!
+Йо, ты действительно принес это!
+
+You can start now.
+Ты можешь начинать.
+
+You can't go there!
+Ты не можешь пройти сюда!
+
+You don't have enough to pay for my services.
+У тебя недостаточно денег, чтобы оплатить мои услуги.
+
+You failed the task!#0
+Ты провалила задание!
+
+You failed the task!#1
+Ты провалил задание!
+
+You should go see the sailors around here.#0
+Ты должна встретить моряков поблизости.
+
+You should go see the sailors around here.#1
+Ты должен встретить моряков поблизости.
+
+Zzzzzzzzzz
+Zzzzzzzzzz
+
+is helping me.
+помогает мне.
+
diff --git a/langs/lang_vls.old b/langs/lang_vls.old
new file mode 100644
index 00000000..0fa6e6ab
--- /dev/null
+++ b/langs/lang_vls.old
@@ -0,0 +1,126 @@
+Can you collect it for me?
+Kun dje gy 't goan hoal'n veur ik?
+
+Dark brown
+Donker brun
+
+Dark purple
+Donker poars
+
+Dark red
+Donker rood
+
+Did you collect @@ @@?#0
+E je @@ @@ goan hoaln?
+
+Did you collect @@ @@?#1
+E je @@ @@ goan hoaln?
+
+Drunken Sailor
+Dronkn Zeiler
+
+English
+Engels
+
+French
+Frans
+
+Good luck!
+Veel geluk!
+
+Gray
+Gris
+
+Hello! Can you help me with the making of my potion?
+'allo! kun dje min 'elp'n en dranksken te brouw'n?
+
+Here you are!
+'ier zy j' gy!
+
+I dont want change my language, sorry.
+'k wille min toale nie verandern, sorry.
+
+I want change my language
+'k wille min toale verander'n
+
+I want to be a Demon
+'k wille nen Duvel kom'n
+
+I want to be a Elf
+'k wille en Elfke kom'n
+
+If you help me I will give you a reward
+Oa je mi 'elpt, goa 'k ik ui een belonginge gev'n
+
+It is very good! To finish my potion I need @@ @@.
+'t e vree goe! Vo 't drankske te moakn, e 'k ik @@ @@ nodig.
+
+Italian
+Italioans
+
+Langulator
+Langulator
+
+Light blonde
+Licht blond
+
+Light purple
+Licht paars
+
+Light red
+Licht rood
+
+No, I'll go work
+Nen'k, Ik goa goan werk'n
+
+No, it isn't easy to get!
+Nen't, 't es ni simpl vo te krygn!
+
+Old Witch
+Oude Hekse
+
+Rat Sailor
+Rat Zeiler
+
+Russian
+Russisch
+
+Sailor Orc
+Zeiler Orc
+
+Sitting Sailor
+Zittende Zeiler
+
+Sleeping Orc
+Sloapende Orc
+
+Sleeping Ukar
+Sloapende Ukar
+
+Sorry, maybe I can help you later
+Sorry, misskien kannekik ui later verder helpn
+
+Spanish
+Spoans
+
+Sure!
+Moabajoa!
+
+Thank you very much! Here is your reward
+Merci, merci! 'ier es ui beloninge
+
+Thanks for your help!
+Merci voor uin hulpe!
+
+Turtle tongue
+Skilpad tong
+
+What language do you want?
+Wukke toale wil dje gie?
+
+You didn't collect all the items!#0
+G' e 't nie oalle dingn gevondn!
+
+You didn't collect all the items!#1
+G' e 't nie oalle dingn gevondn!
+
diff --git a/langs/lang_vls.txt b/langs/lang_vls.txt
new file mode 100644
index 00000000..4dddf2f7
--- /dev/null
+++ b/langs/lang_vls.txt
@@ -0,0 +1,808 @@
+Copyright (C) 2010-2011 Evol Online
+*hips*
+*hic*
+
+... By the power vested in me,
+... Deur de macht toegekend an ik,
+
+Ah, she *hips* is here.
+Ah, *hic* z'es hiere.
+
+Are you tired of being what you are?
+Zy 't nie moe vo jezelven te zin?
+
+AreaNPC
+AreaNPC
+
+As you want!
+Gelyk da je wilt!
+
+Ash brown
+Asbrun
+
+Bald
+Koale
+
+Bee spawned
+En bie es gespawned
+
+Billy Bons
+Billy Bons
+
+Black
+Zwarte
+
+Blaf
+Waf
+
+Ble *hips*... Imma great sail*hips*or!
+Bwe *hic*... Ik ben ne goei'n zeil*hic*er!
+
+Blonde
+Blonde
+
+Blue
+Blauw
+
+Boots
+Bott'n
+
+Bowl cut
+Gesne'en gelyk nen pot
+
+Brown
+Brunne
+
+Brunette
+Brunne
+
+Bun
+Dotjen
+
+Bunny ears
+Koninne oarn
+
+Bye bye!
+Salut!
+
+Can you do something with my color?
+Kun dje iet an myn kleur doene?
+
+Cap
+'n Klakke
+
+Center parting/Short and slick
+Center parting/Short and slick
+
+Choppy
+Gezoagd
+
+Combed back
+Noar achter'n gekamd
+
+Continue?
+Deurgoan?
+
+Copper
+Koper
+
+Copper red
+Roste
+
+Could I ask you which language do you talk? Like that I add you on the list.
+Maggekik ui vroagn wukke toale gy klapt? Zoda'k ui kanne toevoegn an de liste.
+
+Demon
+Duvel
+
+Desert hat
+Sahara 'oed
+
+Devis
+Devis
+
+Did you bring me @@ @@?#0
+E je vo mi @@ @@ gebracht?
+
+Did you bring me @@ @@?#1
+E je vo mi @@ @@ gebracht?
+
+Do you know some interesting people around here?
+Ken dje n poar giestige minsn hiere?
+
+Do you want to create a bee?
+Wil dje en by spawn'n?
+
+Don't worry, I'm sure that everything will turn out well for the both of us!
+Moak je gin zorgn, 'k ben zeker da't oal wel goe goat utdroain veur oes oalletwee!
+
+Don't you see that I'm already talking?
+Zie j' nie da'k oal an 't klappn ben?
+
+Done.
+Gereed.
+
+Dyeing failed. You lost dye item.
+'t Kleur'n miste. Ge zit ui dinske kwit.
+
+Dyer
+Kleurder
+
+Elmo
+Elmo
+
+Emo
+Emo
+
+Enora
+Enora
+
+Eurni
+Eurni
+
+Eurni the Surgeon
+Eurni de Chirurg
+
+Flat ponytail
+Platt'n pony
+
+For dye your item, you need white item and dye with required color.
+Om te kleur'n, ei je 'n wit ding noadig en 'n kleurkstoffe in 't kleur da j' wilt.
+
+Fushia
+'n sorte poars
+
+Ggrmm grmmm..
+Ggrmm grmmm..
+
+Gloves
+Han'skoen'n
+
+Good job!
+Goe gedoan!
+
+Green
+Groene
+
+Hahaha, I won't take much of your time, go ahead!
+Hahaha, 'k goa nie vil tid va j' inneem'n, goa j' gang!
+
+He takes a small list and starts reading it.
+Ie pakt een kljen listje en begunt 't te lez'n.
+
+Headband
+'oofdband
+
+Hehe. Me, I will try to open a market, I've heard that it is a big city of commerce here, because of the port and all...
+Hehe. Ikke, 'k goa prober'n en kroam 't opnen, 'k e g'heurt da't ier en grot'n commèrce es hiere, deur d' hav'n ennezo...
+
+Hello @@
+'n Dag @@
+
+Hello dear, what do you want today?#0
+'allo, wuk wil dje vandoage?
+
+Hello dear, what do you want today?#1
+'allo, wuk wil dje vandoage?
+
+Hello, girl!
+'allo, meiske!
+
+Hello, stranger!
+'allo, vrjemden!
+
+Here is your reward!
+'ier es ui comisse!
+
+Hey! Yes, I'm already awake. So, it's end of our little road together, what will you do you now?
+'ey! Joa'k, 'k zin oal wakkre. Dus, 't es 't einde van oeze reis toope, wa wil dje nui goan doen?
+
+Hey! You saw? we've arrived on the port today, it was a long way from the other island...#0
+'ey! E j' 't gezien? we zin angekomn in den 'av'n vandoage, 't e verre van 't ander eiland...
+
+Hey! You saw? we've arrived to the port today, it was a long way from the other island...#1
+'ey! E j' 't gezien? we zin angekomn in den 'av'n vandoage, 't e verre van 't ander eiland...
+
+Hey, girl!
+'ey, meiske!
+
+Hey, guy!
+'ey, gast!
+
+Hey, look at Julia, she's a beauty, isn't she? She's been looking at me for some minutes now... haha! Good luck, my friend.
+'ey, kik noa Julia, es 't gin skwon meiske? Z' es oal efjes noar ik an 't koekeloern... haha! Veel geluk, moatje.
+
+Hey, you lied to me.
+'ey, g' e't gelogn tegen ikke.
+
+Hmm, I'm fine for now, thank you.
+Hmm, 'k zin ok nui, merci.
+
+How can I get it
+'oe kannekik da e'n
+
+I can!
+'k kan 't!
+
+I don't need your help right now, come back later.
+'k e uin hulpe nui nie nwodig, kom gie loater moar ne kje were.
+
+I don't want change my language, sorry.
+'k wille min toale nie verandern, sorry.
+
+I gave you a reward. I can't give you more.
+'k e j' oal en beloninge gegevn. 'kannekik ui niks mjer gevn.
+
+I made a mistake, I would like to change my language.#0
+'k e gemist, 'k zou geirn min toale verander'n.
+
+I made a mistake, I would like to change my language.#1
+'k e gemist, 'k zou geirn min toale verander'n.
+
+I need help for cleaning the wedge of the ship, but you aren't strong enough to help me.
+'k e 'n bikke hulpe nodig vo den onderkant van 't skip skwone te moakn, moa ge zy nie sterk genoeg vo mi 't helpn.
+
+I need somebody who can clean the bottom of the ship, can you help me?
+'k e 'n twiene nodig die 't 'n onderkant van 't skip kan skwone moakn, kun dje mi help'n?
+
+I sentence you to death... twice.
+'k verkloare gy vo dood... twee kje.
+
+I speak Dutch
+'k klappe Nederlands
+
+I speak English
+'k klappe Engels
+
+I speak Flemish
+'k klappe West-Vloams
+
+I speak French
+'k klappe Frans
+
+I speak Greek
+
+
+I speak Indonesian
+
+
+I speak Italian
+'k klappe Italioans
+
+I speak Russian
+'k klappe Russisch
+
+I speak Spanish
+'k klappe Spoans
+
+I think that I will explore around a bit and see what I can find, and you?
+'k peize da'k een bitje goa rondkikkn en zien wa da'k vind, en gy?
+
+I think that the ship will still be here for some time, we need a lot of food and our ship needs some reparation before going back to the sea.
+'k peize da't skip ier nog wel efkes goa stoan, w' e'n nen hoop eet'n nodig en oes skip moe nog vermakt word'n voordat 't weer in de zee kan goan.
+
+I think you can help me, right?
+'k peize da j' gy mi kunt helpn, juste?
+
+I want to be a Human
+'k wille nen Mens kom'n
+
+I want to be a Ifitron
+Ik wille nen Ifitron kom'n
+
+I want to be a Orc
+'k wille nen Orc kom'n
+
+I want to be a Sparron
+Ik wille nen Sparron kom'n
+
+I want to be a Ukar
+'k wille nen Ukar kom'n
+
+I want to dye to different color
+'k Wille kleur'n in en ander kleurke
+
+I will give you @@gp.
+'k goa ui @@gp gev'n.
+
+I will need some coffee...
+'k wille wa kaffie e'n...
+
+I will rest a bit here or in the town, I don't feel so well after this trip...
+'k goa iere of in 't dorp en bikke rustn. 'k voele mi nie zo goe achter deze reize...
+
+I will!
+'k goa 't doen!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#0
+'k vroage 't mi af, 'k peize da'k bitje bi bitje entwadde goa'n ontdekkn en zien wa da 't er verder gebeurt!
+
+I wonder about that, I think I'll discover bit by bit and see what happens!#1
+'k vroage 't mi af, 'k peize da'k bitje bi bitje entwadde goa'n ontdekkn en zien wa da 't er verder gebeurt!
+
+I'd like to get a different style.
+'k zou geirn nen andern coupe willn.
+
+I'll come visit! I hope that this island will give us what we're looking for...
+'k goe ui 'n visite doen! 'k hoope da 't eiland oes goa gevn woar wudder ip zoek noar zin...
+
+I'll get it!#0
+'k goa 't goan hoaln!
+
+I'll get it!#1
+'k goa 't goan hoaln!
+
+I'm Julia, my job is to register every body which enter or exit the ship.
+Ik benne Julia, minnen job es vo iedereen te registrern die van 't skip komt of goat.
+
+I'm busy#0
+'k zin bezig
+
+I'm busy#1
+'k zin bezig
+
+I've a girlfriend, and she needs me to do something unavailable.
+'k e en wuf, en ze vroagt mi iet onmeugelijks.
+
+If you dont have it, then you cant dye.
+Oa je 't nie eit, kundje gie nie kleur'n.
+
+Imperial
+Imperial
+
+Infinitely long
+Oneindig lank
+
+It's *hips* wrong, Imma not *hips* drunken.
+'t es *hic* mis, Ikke zin nie *hic* dronk'n.
+
+Julia
+Julia
+
+Khaki
+Kaki
+
+Kota
+Kota
+
+Leave alone my family treasure!
+Loat min familie juweln me ruste!
+
+Leave it
+Loat 't liggn
+
+Let me see your work...
+Toon ne kje wa da'j' gedoan e't...
+
+Let me sleep...
+Loat mi sloapen...
+
+Let me think...
+Loat me ne kje peiz'n...
+
+Lettuce
+Saloa
+
+Lime
+'n Sorte groen
+
+Lloyd
+Lloyd
+
+Long and curly
+Lank en krull'nd
+
+Long and slick
+Lank en rechte
+
+Long ponytail
+Ne lange pony
+
+Make less noise, please.
+Moak ne kje wa minder lawaai, merci.
+
+Mane
+Moanen
+
+Marko
+Marko
+
+Mauve
+Mauve
+
+Maybe you will be the next?#0
+Misskien kom dje gy de volg'nden?
+
+Maybe you will be the next?#1
+Misskien kom dje gy de volg'nden?
+
+Mini-skirt
+Minirok
+
+Mohawk
+Mohawk
+
+Move along, kid.
+Loap moa deure, kienneke.
+
+Navy blue
+'n Sorte blauw
+
+No
+Nen
+
+No problem, do you need something else?
+Geen probleem, wil dje gy nog entwa d' anders doen?
+
+No!
+Nen!
+
+No, thank you
+Nen, merci
+
+No, thanks!
+Nen, merci!
+
+No, they are way too dangerous for me!
+Nen's, Ze zin vee te gevoarlik vo mi!
+
+Not yet.
+Nog nie..
+
+Note
+Nota
+
+Nothing, sorry
+Nietn, sorry
+
+Now i have class
+Nu e 'k ik klasse
+
+Of course! Tell me which language you speak.
+Moabajoa't! Zeg moa wukke toale da je klapt.
+
+Off black
+Bikans zwarte
+
+Oh really? I don't have much time right now, I need to go. Sorry.
+Oh es 't woar? 'k e nie veel tid nui, 'k moe goan. Sorry.
+
+Oh, no problem! Anyway, if you have questions, you should see Julia at the reception, she's very nice!
+Oh, geen probleem! In elk geval, oa je vroagen e't, kun dje 't vroag'n an Julia an de receptie, z' es vree vrindelik!
+
+Oh, thank you! Yo, what would I do without your help. Ok, see you!
+Oh, merci! Yo, wa zou 'k ik doen zonder gy. Ok, tot nog ne kje!
+
+Ok, Done. You need something else?
+Ok, Kloar. E je nog iets anders nodig?
+
+Ok, ok. Come back if you change your mind.
+Ok, ok. Kom moar ne kje were oa je van gedacht veranderd zit.
+
+Ok, thanks
+Ok, merci
+
+Okay, I'm ready to work!#0
+Oke, 'k zin kloar vo te werk'n!
+
+Okay, I'm ready to work!#1
+Oke, 'k zin kloar vo te werk'n!
+
+Okay, you can start!
+Oke, ge kunt start'n!
+
+Once it's done, you will be kicked from the server. Don't panic, as everything is fine.
+As 't kloar es, ga je gekicked word'n van de server. Ge moet nie paniker'n, 't es volkomn normoal.
+
+Orange
+Oranje
+
+Pants
+Broek
+
+Parted
+Gesplitst
+
+Perky ponytail
+Parmantigen pony
+
+Peter
+Peter
+
+Pigtails
+Vlechtjes
+
+Pink
+Roze
+
+Please change my race
+Verander min ras
+
+Please do, my dear
+Doe moa
+
+Please select a race
+Kies en ras
+
+Pompadour
+Pompadour
+
+Punk
+Punk
+
+Purple
+Poars
+
+Rabbit ears
+Koninne oar'n
+
+Read it
+Lees 't
+
+Red
+Rood
+
+Robe
+Kleed
+
+Ronan
+Ronan
+
+Rrrr pchhhh...
+Rrrr pchhhh...
+
+Scarf
+Sjoal
+
+Server
+Server
+
+ServiceNPC
+ServiceNPC
+
+Shop 1
+Shop 1
+
+Shop 2
+Shop 2
+
+Shop 3
+Shop 3
+
+Shop 4
+Shop 4
+
+Shop 5
+Shop 5
+
+Shop 6
+Shop 6
+
+Shop 7
+Shop 7
+
+Short and curly
+Kort en krull'nd
+
+Short punk
+Korte punk
+
+Short robe
+Kort kleed
+
+Short tank top
+Korte spaghettibandjes
+
+Shorts
+Short
+
+Silver
+Zilvre
+
+Skirt
+Rok
+
+Sleeping Elf
+Sloapende Elf
+
+So die already!
+Dus goa moa dood!
+
+Sorcerer robe
+Tovenoarskleed
+
+Sorry you dont have components.
+Sorry, g' e 't gin componentn.
+
+Surprise me
+Doe moa entwa
+
+T-neck sweater
+Dikke nekke boai
+
+Tank top
+Spaghettibandjes
+
+Teal
+Groenblauw
+
+TestNPC
+TestNPC
+
+There is also @@ on the docks, it will be a pleasure for her to help you!
+D'er es ook @@ an de dokkn, 't goa en plezierke zin veur hoar om ui t' help'n!
+
+They are really nice and may help you much more than me.
+Ze zin echt vriendelik en kunn'n ui misskien beter help'n dannekik.
+
+This island is kinda funny for starting an adventure, and it's a good place for meeting people too, haha!
+Dit eiland es nogal grappig vo 'n avontuur te startn, en 't es ook en goeie ploatse vo mensen t' ontmoet'n, haha!
+
+This note was left by somebody.
+Dezen nota was achtergelat'n deur entwiene.
+
+Tousled layers
+Warrige loagen
+
+Turtles drop it. Good luck!
+Skilpadden loat'n 't vall'n. Veel geluk!
+
+V-neck sweater
+V-kroage boai
+
+Warin
+Warin
+
+Warning: All characters under this login will be changed.
+Waarskuwinge: Oalle karakters by dezen login goan verander'n.
+
+Wave
+Zwoai
+
+Wavy
+Golv'nd
+
+We are at [@@], it's a big port-city, many beginners start their adventure here.
+Wudder zin in [@@], dat es en grote hoavenstad, veel beginners start'n udder avontuur 'iere.
+
+Wedding
+Trouw
+
+Well, I'll see what happens. I hope that good luck will follow me around!
+Wel, 'k goa wel zien wat dat er gebeurt. Ik hoope da 'k veel geluk goa en!
+
+What can I dye for you today?
+Wa kannekik kleur'n vo gy vandoage?
+
+What color?
+Wuk kleur?
+
+What do you want to do with it?
+Wa wil dje d'ermee goan doen?
+
+What do you want to dye?
+Wa wildje gie kleur'n?
+
+What do you want today?
+Wa wil dje vandoage doen?
+
+What do you want?
+Wa wil dje gie?
+
+What will you do during this break?
+Wa goe doen, nu da we'n pauze e'n?
+
+What? Never!
+Wa? Nooit!
+
+What? This reward is too small!
+Wa? Dezen beloninge es vee te kleine!
+
+Where are we?
+Woar zin we?
+
+Where is this cup?..*hips*
+Woar es dien beker?..*hic*
+
+White
+Wit
+
+Why do you *hips* at me?!
+Vowa doe je gie *hic* noar ikke?!
+
+Why i cant dye my item?
+Vowa kannekik min dinske niet kleur'n?
+
+Why not, I need to train anyway.
+Vowa nie, 'k moe toch nog en bikke train'n.
+
+Wild
+Wild
+
+Witch hat
+'eksen 'oed
+
+Would you be interested in a race change?
+Zou je gie ginteresseerd zin in en ras veranderinge?
+
+Would you be interested in a sex change?
+Zou je gie ginteresseerd zin in en geslachts veranderinge?
+
+Yeah, but what reward will I get?
+Mja, moa wukke beloninge krigge 'k ik?
+
+Yeah, if you like, I'll open a market in this town, maybe you can visit me? It could be fun to see you again!
+Mja, oa j' wilt, Goa 'k een kroam open'n in 't dorp, misskien kun dje mi ne kje kom'n en visite doen? 't zou vree geestig zin vo je were te ziene!
+
+Yellow
+Geel
+
+Yes
+Joa
+
+Yes, I can!
+Joa, da kannekik!
+
+Yes, I did it!#0
+Jah, 'k e 't gedoane!
+
+Yes, I did it!#1
+Jah, 'k e 't gedoane!
+
+Yes, please!
+Joa, giv moa!
+
+Yo, I found it, cool! I have everything, except @@ @@. Can you bring it to me?
+Yo, 'k e 't gevond'n, cool! 'k e 't oal, just nog @@ @@. Kun dje gie mi da breng'n?
+
+Yo, can you help me, bro?
+Yo, kun dje mi ne kje helpn, moat?
+
+Yo, can you help me, sis?
+Yo, kun dje mi ne kje helpn, meiske?
+
+Yo, do you see what I mean?
+Yo, zie je wa da'k bedoele?
+
+Yo, look: my friend advised me to make a cool and tasty meal, and he gave me instructions.
+Yo, kik: minne moat e mi gadviseerd vo iets cools en lekkers te moak'n vo 't eet'n, en ie e mi instructies gegevn.
+
+Yo, now just bring it to me.
+Yo, giv 't mi nui moa.
+
+Yo, thank you!
+Yo, merci!
+
+Yo, that's good that you want to help me.
+Yo, 't es goe da j' gy mi wilt help'n.
+
+Yo, you really brought it!
+Yo, g' e 't echt meegebroacht!
+
+You can start now.
+Ge kunt nui start'n.
+
+You can't go there!
+Ge mag doare nie goan!
+
+You don't have enough to pay for my services.
+G' e 't nie genoeg geld vo min dienst'n.
+
+You failed the task!#0
+G' e gefoald in ui toake!
+
+You failed the task!#1
+G' e gefoald in ui toake!
+
+You should go see the sailors around here.#0
+Ge zou de zeilers iere kunn'n ansprek'n.
+
+You should go see the sailors around here.#1
+Ge zou de zeilers iere kunn'n ansprek'n.
+
+Zzzzzzzzzz
+Zzzzzzzzzz
+
+is helping me.
+es mi an 't help'n.
+
diff --git a/langs/langs.txt b/langs/langs.txt
new file mode 100644
index 00000000..1aead84b
--- /dev/null
+++ b/langs/langs.txt
@@ -0,0 +1,9 @@
+en
+ru
+it
+fr
+es
+nl
+vls
+el
+id
diff --git a/log/.placeholder b/log/.placeholder
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/log/.placeholder
diff --git a/save/account.txt.example b/save/account.txt.example
new file mode 100644
index 00000000..fb08e721
--- /dev/null
+++ b/save/account.txt.example
@@ -0,0 +1,13 @@
+// Accounts file: here are saved all information about the accounts.
+// Structure: ID, account name, password, last login time, sex, # of logins, state, email, error message for state 7, validity time, last (accepted) login ip, memo field, ban timestamp, repeated(register text, register value)
+// Some explanations:
+// account name : between 4 to 23 char for a normal account (standard client can't send less than 4 char).
+// account password: between 4 to 23 char
+// sex : M or F for normal accounts, S for server accounts
+// state : 0: account is ok, 1 to 256: error code of packet 0x006a + 1
+// email : between 3 to 39 char (a@a.com is like no email)
+// error message : text for the state 7: 'Your are Prohibited to login until <text>'. Max 19 char
+// valitidy time : 0: unlimited account, <other value>: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)
+// memo field : max 254 char
+// ban time : 0: no ban, <other value>: banned until the date: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)
+0 s1 p1 - S 694 0 a@a.com - 0 - - 0