<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://oldwiki.devbox.themanaworld.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Move+page+script</id>
	<title>The Mana World - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://oldwiki.devbox.themanaworld.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Move+page+script"/>
	<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/wiki/Special:Contributions/Move_page_script"/>
	<updated>2026-05-06T03:16:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Working_With_Git&amp;diff=59583</id>
		<title>Dev:Working With Git</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Working_With_Git&amp;diff=59583"/>
		<updated>2024-03-27T03:56:50Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Working With Git to Development:Working With Git: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Working With Git]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Working_With_Git&amp;diff=59582</id>
		<title>Development:Working With Git</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Working_With_Git&amp;diff=59582"/>
		<updated>2024-03-27T03:56:50Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Working With Git to Development:Working With Git: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is a distributed revision control and source code management system.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ GitHub] and [https://gitlab.com/ GitLab] are web-based hosting service for projects that use the Git revision control system.&lt;br /&gt;
&lt;br /&gt;
Together, these two tools allow developers working on The Mana World to easily collaborate and merge changes into the game.&lt;br /&gt;
&lt;br /&gt;
== Installing Git ==&lt;br /&gt;
&lt;br /&gt;
To install Git, select the appropriate Operating System at [http://git-scm.com/downloads/ Git Downloads] and follow the instructions. (For Windows users, accept all the default settings for the installer.)&lt;br /&gt;
*Please note that although the download for Windows includes a GUI tool, we will focus on the Git Bash command line tool in order to maintain consistency across platforms.&lt;br /&gt;
&lt;br /&gt;
After installation, please follow the basic setup instructions at [https://help.github.com/articles/set-up-git/ GitHub] under the Set Up Git heading.&lt;br /&gt;
&lt;br /&gt;
You will likely also want to set up SSH authentication for GitHub.  This can be done by following their [https://help.github.com/articles/generating-ssh-keys/ SSH Guide].&lt;br /&gt;
&lt;br /&gt;
== Preparing To Use Git ==&lt;br /&gt;
&lt;br /&gt;
=== Creating a Fork ===&lt;br /&gt;
Once you have installed Git, your first task should be to create a personal copy (also known as a fork) of the server data on your GitLab account.  This will allow you to make changes and save them to a place where the content leaders can retrieve copies to include in the main server.  It&#039;s also easier to work with.&lt;br /&gt;
&lt;br /&gt;
To create a fork, login to your GitLab account and go to the [https://git.themanaworld.org/evolved/serverdata/ TMW Repository].&lt;br /&gt;
*You will see a button on the page that says Fork.  Click it.&lt;br /&gt;
*You should now see a page that has some details and history for the fork you just created.  At the top will be a series of buttons including one that says SSH.  Clicking the SSH button will create a link for you to copy which will be needed in the next step.  It will look like &#039;&#039;https://git.themanaworld.org/yournamehere/serverdata.git&#039;&#039;.  Copy that link or keep the page open; we&#039;ll need it later.&lt;br /&gt;
&lt;br /&gt;
If you will be working with client-data or music, you will need to create separate forks for those repositories as well.&lt;br /&gt;
*[https://git.themanaworld.org/evolved/clientdata/ client-data]&lt;br /&gt;
*[https://gitlab.com/themanaworld/tmw-music/ music]&lt;br /&gt;
&lt;br /&gt;
Keep in mind you&#039;ll need more tools to run a localhost, see appropriate pages regarding that.&lt;br /&gt;
&lt;br /&gt;
=== Creating a Clone ===&lt;br /&gt;
You now need to create a copy of the data on your computer to work with (also known as a clone).  We will create a clone from the main repository and set up Git to allow you to push changes to your personal fork.&lt;br /&gt;
&lt;br /&gt;
If you are using Windows, open the Git Bash tool which you installed earlier.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux, open a terminal window.&lt;br /&gt;
*Navigate to the folder where you want to create your clone.&lt;br /&gt;
*Now issue the command to have Git create a copy: &#039;&#039;&#039;&#039;&#039;git clone --recursive https://git.themanaworld.org/evolved/serverdata.git serverdata&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**The &#039;&#039;--recursive&#039;&#039; command tells Git to copy all of the data from the included submodules (client-data and music).  If you don&#039;t plan on working with these, it can be omitted.&lt;br /&gt;
** Currently, only TMWA has these as submodules, so it can also be omitted.&lt;br /&gt;
**The &#039;&#039;serverdata&#039;&#039; at the end of the command is the name of the folder you want the data in.  In the example, &#039;&#039;git clone --recursive https://git.themanaworld.org/evolved/serverdata.git serverdata&#039;&#039; will create a new folder called serverdata and put the files inside that folder.  You can use any folder name that makes sense to you.&lt;br /&gt;
&lt;br /&gt;
Note that copying the data may take some time.&lt;br /&gt;
&lt;br /&gt;
After the data is finished cloning to your computer, you need to tell it how to keep track of changes.&lt;br /&gt;
&lt;br /&gt;
=== Creating Remotes ===&lt;br /&gt;
&lt;br /&gt;
When a repo (short for repository) is cloned, it has a default remote called &#039;&#039;origin&#039;&#039; that points to the repo it was cloned from. To allow you to make changes on your personal fork, you need to add another remote which we will name &#039;&#039;fork&#039;&#039;.&lt;br /&gt;
*Change to the directory you created when you cloned your repo: &#039;&#039;&#039;&#039;&#039;cd serverdata&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Using the link we found at the end of the Creating a Fork section, issue the command &#039;&#039;&#039;&#039;&#039;git remote add fork https://git.themanaworld.org/yournamehere/serverdata.git&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We&#039;ll also need to add remote pointers and select the correct branch for the submodules, if you cloned them. This currently only applies to tmwa servers.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;cd client-data&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git remote add client-data https://git.themanaworld.org/yournamehere/clientdata.git&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git checkout master&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;cd music&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git remote add music https://git.themanaworld.org/yournamehere/tmw-music.git&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git checkout master&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Git includes the ability to work with &#039;&#039;branches&#039;&#039;, or multiple versions of files.  This can provide a way to work on separate projects without having to create a new clone for each one.  We won&#039;t be going too deeply into this option, but the option is there once you are more comfortable.  By default, you will be working on the &#039;&#039;master&#039;&#039; branch.  The command above, &#039;&#039;git checkout master&#039;&#039;, tells the submodule which branch you want to use.&lt;br /&gt;
&lt;br /&gt;
At this point you now have a personal fork, a local clone, and remote pointers for your fork.  You&#039;re ready to start making changes!  You are free to use whatever tools work for you to make your changes, but please ensure that the final results are in harmony with The Mana World&#039;s formatting guidelines. There&#039;s [[TmwAthena Scripting Standards]] and Evol2 Scripting Standards (the later based on Linux Kernel Convention).&lt;br /&gt;
&lt;br /&gt;
== Day-to-day Use ==&lt;br /&gt;
&lt;br /&gt;
=== Retrieving Changes ===&lt;br /&gt;
&lt;br /&gt;
Because many developers are working on the project at the same time, you will want to make sure you have all the latest changes before making a commit.  This will ensure that your changes do not conflict with changes another developer has made. &lt;br /&gt;
&lt;br /&gt;
If you have not made any changes yet and want to make sure your clone is up-to-date before starting to work, you can simply pull from the repo.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git pull&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have made local changes and want to get the latest updates before continuing, you will need to tell Git to get the updates and then apply your changes on top of them.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git pull --rebase&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Making Commits ===&lt;br /&gt;
&lt;br /&gt;
After making changes to any of the source files (maps, graphics, scripts) you will want to save those changes so other developers can see and review them.  You need to commit those changes to Git.  When committing files to Git, you will need to have a terminal or Git Bash open in the directory containing the changes.  For example, if you are changing music files, you will need to be in the &#039;&#039;TMW/clientdata/music&#039;&#039; folder.&lt;br /&gt;
&lt;br /&gt;
Your first step toward making a commit is to verify that Git recognizes there have been changes.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git status&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
You will receive a result that tells you what branch you are working on, what files (if any) have been modified, and what files (if any) are untracked.  At this point, we want to add our changed or untracked files to Git.&lt;br /&gt;
*Issue the command &#039;&#039;&#039;&#039;&#039;git add &amp;lt;file&amp;gt;&#039;&#039;&#039;&#039;&#039; replacing &amp;lt;file&amp;gt; with the path and filename of the file to be added.  Be careful: the commands ARE case sensitive!&lt;br /&gt;
*Repeat as needed until your changed files are all added.&lt;br /&gt;
*Issue the command &#039;&#039;&#039;&#039;&#039;git commit -m &#039;your message here&#039;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Using the &#039;&#039;-m&#039;&#039; switch in the command allows you to specify a brief commit message which will tell others what the changes are.&lt;br /&gt;
**For example, &#039;&#039;git commit -m &#039;Spelling corrections for Beer quest&#039;&#039;&#039; will tell others that we made corrections that might apply to multiple files, without giving an overload of detail.  If you aren&#039;t sure how much detail to include in a commit message, you can check with the development team on IRC for suggestions.&lt;br /&gt;
&lt;br /&gt;
=== Pushing to a Fork ===&lt;br /&gt;
&lt;br /&gt;
Once you have committed your changes to your local clone, you now have to put them where they can be seen: your fork.  To ensure that your fork will match what you have in your local clone, we will tell Git to force the changes to the repo.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git push -f fork master&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Please note that using the -f option to force your changes causes Git to overwrite commit history on the repo.  This option should only ever be used on personal forks to bring them into the same state as the main repo.&lt;br /&gt;
If you have been working on and committing changes to music or client-data, you will need to push those to their respective forks.&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git push -f client-data master&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;&#039;git push -f music master&#039;&#039;&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Units.xml&amp;diff=59581</id>
		<title>Dev:Units.xml</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Units.xml&amp;diff=59581"/>
		<updated>2024-03-27T03:56:50Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Units.xml to Development:Units.xml: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Units.xml]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Units.xml&amp;diff=59580</id>
		<title>Development:Units.xml</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Units.xml&amp;diff=59580"/>
		<updated>2024-03-27T03:56:50Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Units.xml to Development:Units.xml: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This file describes the various units used in the interface, like currency and weight.&lt;br /&gt;
&lt;br /&gt;
==Structure==&lt;br /&gt;
Unit files are in XML format.&lt;br /&gt;
&lt;br /&gt;
===&amp;amp;lt;units&amp;amp;gt;===&lt;br /&gt;
This is the root element of the file.&lt;br /&gt;
&lt;br /&gt;
===&amp;amp;lt;unit&amp;amp;gt;===&lt;br /&gt;
And individual unit definition. &amp;lt;code&amp;gt;unit&amp;lt;/code&amp;gt;s have &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;s, &amp;lt;code&amp;gt;base&amp;lt;/code&amp;gt;s, &amp;lt;code&amp;gt;mixed&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;round&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;conversion&amp;lt;/code&amp;gt; values. The &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; describes the function of this unit, like &amp;quot;currency&amp;quot; or &amp;quot;weight&amp;quot;. The &amp;lt;code&amp;gt;base&amp;lt;/code&amp;gt; is the symbol of the base unit, like &amp;quot;gold&amp;quot; or &amp;quot;g&amp;quot; (gram). The optional &amp;lt;code&amp;gt;mixed&amp;lt;/code&amp;gt; describes how to handle different units (described later; default tbd). &amp;lt;code&amp;gt;round&amp;lt;/code&amp;gt; describes how many decimal places to round decimals (defaults to 2 places). &amp;lt;code&amp;gt;conversion&amp;lt;/code&amp;gt; is the factor applied to the internal units to reach these units (defaults to 1).&lt;br /&gt;
&lt;br /&gt;
===&amp;amp;lt;level&amp;amp;gt;===&lt;br /&gt;
Each unit can have multiple levels. &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt;s have &amp;lt;code&amp;gt;symbol&amp;lt;/code&amp;gt;s, &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;s, and &amp;lt;code&amp;gt;round&amp;lt;/code&amp;gt;s. &amp;lt;code&amp;gt;symbol&amp;lt;/code&amp;gt; is the symbol to use for this level. &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt; describes how many of the previous level is needed to for this level. &amp;lt;code&amp;gt;round&amp;lt;/code&amp;gt; is as above, except it only applies to this level.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;amp;lt;units&amp;amp;gt;&lt;br /&gt;
     &amp;amp;lt;unit type=&amp;quot;currency&amp;quot; base=&amp;quot;GP&amp;quot;/&amp;amp;gt;&lt;br /&gt;
     &amp;amp;lt;unit type=&amp;quot;weight&amp;quot; base=&amp;quot;g&amp;quot; mixed=&amp;quot;no&amp;quot;&amp;amp;gt;&lt;br /&gt;
         &amp;amp;lt;level symbol=&amp;quot;kg&amp;quot; count=&amp;quot;1000&amp;quot;/&amp;amp;gt;&lt;br /&gt;
     &amp;amp;lt;/unit&amp;amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
 &amp;amp;lt;/units&amp;amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;mixed&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt;, a decimal with the largest units needed is used (ex: 1.05kg). When &amp;lt;code&amp;gt;mixed&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;, all non-0 levels are shown (ex: 1kg, 50g).&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:ToDo&amp;diff=59579</id>
		<title>Dev:ToDo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:ToDo&amp;diff=59579"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:ToDo to Development:ToDo: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:ToDo]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:ToDo&amp;diff=59578</id>
		<title>Development:ToDo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:ToDo&amp;diff=59578"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:ToDo to Development:ToDo: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
You can always find the latest and most up to date information on [https://gitlab.com/groups/evol/-/milestones Gitlab Milestones].&lt;br /&gt;
&lt;br /&gt;
As the gitlab milestones gets automatically updated as tasks are complete, they are often more up-to-date than this file.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This is currently the ToDo list for The Mana World following the &#039;&#039;TMW-Evol fusion&#039;&#039;. The release (progress seen on milestones) should result in the Alpha release from &#039;&#039;&#039;TMW: rEvolt&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== ToDo list ===&lt;br /&gt;
====Maps====&lt;br /&gt;
  * (✔) Add missing block pillars around city houses.&lt;br /&gt;
  * (✘) Complete the Agora and add more tile variation on the ground of Artis (Map).&lt;br /&gt;
  * (✘) Warehouse second level.&lt;br /&gt;
  * (✘) Fix Artis indoor&#039;s map names.&lt;br /&gt;
  * (✘) Add particle effects for pillar&#039;s signes on Artis.&lt;br /&gt;
&lt;br /&gt;
====GFX====&lt;br /&gt;
  * (✔) Add library poems as items.&lt;br /&gt;
  * (✔) Robin librairian sprite.&lt;br /&gt;
  * (✔) Christopher librairian sprite.&lt;br /&gt;
  * (✔) Leonard librairian sprite.&lt;br /&gt;
  * (✔) Schemag item.&lt;br /&gt;
  * (✔) Mona sprite.&lt;br /&gt;
  * (✔) Hairstyle position fixes.&lt;br /&gt;
  * (✔) Add missing block pillars on artis-pillar_x2.&lt;br /&gt;
  * (✔) Oscar NPC.&lt;br /&gt;
  * (✘) Fishing animation, fishing rod put on a pedestale that move some seconds before to catch a fish.&lt;br /&gt;
  * (✘) [[http://forums.evolonline.org/viewtopic.php?p=52|New logo]]&lt;br /&gt;
  * (✘) Add Ilmari Betsu as the library receptionist.&lt;br /&gt;
  * (✘) Package item icon.&lt;br /&gt;
&lt;br /&gt;
====XML====&lt;br /&gt;
  * (✔) Put most of the poems, novels, didactel inside book items.&lt;br /&gt;
  * (✔) Pillar&#039;s sign highlights.&lt;br /&gt;
  * (✘) Fishing animation, fishing rod put on a pedestale that move some seconds before to catch a fish.&lt;br /&gt;
  * (✘) Update the Atlas list.&lt;br /&gt;
  * (✘) Add particle effects for digging locations.&lt;br /&gt;
&lt;br /&gt;
====Script====&lt;br /&gt;
  * (✔) Use delayed healing instead of static healing in potion and most usable items.&lt;br /&gt;
  * (✔) Change the effect of the elixir to a 100% hp/sp recovery.&lt;br /&gt;
  * (✔) Reduce delay between the use of multiple consumable items.&lt;br /&gt;
  * (✔) Remove translation from books in the library.&lt;br /&gt;
  * (✔) Add different store for different kind of dye in calypsan&#039;s shop place.&lt;br /&gt;
  * (✔) Using Vitality inside the rand formula for itemheal.&lt;br /&gt;
  * (✔) Add Party NPC in the town hall.&lt;br /&gt;
  * (✔) Add Guild NPC in the town hall.&lt;br /&gt;
  * (✔) Put most of the poems, novels, didactel inside book items.&lt;br /&gt;
  * (✔) Add scripts on block pillars that says who own the house or what this is house is for.&lt;br /&gt;
  * (✔) Increase the number of fishing spots.&lt;br /&gt;
  * (✔) Rewrite Xilaxa&#039;s walk path with graph walk path.&lt;br /&gt;
  * (✔) Add bleacher NPC that bleach/discolor dyed items.&lt;br /&gt;
  * (✔) Enable free savepoints on every house where no NPC is near.&lt;br /&gt;
  * (✔) Mona the woman in the rich hill.&lt;br /&gt;
  * (✘) Mona&#039;s dad quests information over the manhole next to the house.&lt;br /&gt;
  * (✘) Fishing animation, fishing rod put on a pedestale that move some seconds before to catch a fish.&lt;br /&gt;
  * (✘) Better explanation of how pets work in Salem and in the library (Script).&lt;br /&gt;
  * (✘) Distribute poems/novels throughout Artis.&lt;br /&gt;
  * (✘) Walking/Swimming NPC support for fishing spots.&lt;br /&gt;
  * (✘) Add missing walking NPCs:&lt;br /&gt;
    * NPC_DEMON_F_ARTIS,&lt;br /&gt;
    * PC_HUMAN_M_ARTIS,&lt;br /&gt;
    * NPC_BINKSAN.&lt;br /&gt;
  * (✘) Add missing La Johanne NPCs:&lt;br /&gt;
    * Arpan, INN&lt;br /&gt;
    * Billy Bons, INN&lt;br /&gt;
    * Darlin, Dock&lt;br /&gt;
    * Silvio, INN&lt;br /&gt;
    * Lean, Dock&lt;br /&gt;
    * Max, INN&lt;br /&gt;
    * Sapartan, INN&lt;br /&gt;
    * Tibbo, ??&lt;br /&gt;
    * Gulukan, ??&lt;br /&gt;
    * Q&#039;Muller, Dock&lt;br /&gt;
    * Astapolos, Dock&lt;br /&gt;
    * Jalad, ??&lt;br /&gt;
    * Tarlan, Market Area&lt;br /&gt;
    * Ale, INN&lt;br /&gt;
    * Couwan, ??&lt;br /&gt;
  * (✘) Robin the librarian.&lt;br /&gt;
  * (✘) Leonard the librarian.&lt;br /&gt;
  * (✘) Christopher the librarian.&lt;br /&gt;
  * (✘) Introduce mount dialogue on Taree.&lt;br /&gt;
  * (✘) Add more tree leaf animation.&lt;br /&gt;
  * (✔) Add MananaTree mob in Artis.&lt;br /&gt;
  * (✔) Create a legiontalk function based on the villagertalk that introduce some gamestory element.&lt;br /&gt;
  * (✘) Introduce Alex Grothendieck as the ex-member of the Legion and the now-chief of the Brotherhood movement.&lt;br /&gt;
  * (✘) Add in Chef Gado the list of mobs that correspond to the drops that he asks to search.&lt;br /&gt;
  * (✘) Prevent the cookie to be used too long, and too many time.&lt;br /&gt;
  * (✘) Add Legion training room that spawn X waves of Dummy mobs.&lt;br /&gt;
  * (✘) Add Legion fighting room that create a survival PvE game mode against the Legion.&lt;br /&gt;
  * (✘) Improve the fighting room with instance support.&lt;br /&gt;
  * (✘) Add legion basic PvP support.&lt;br /&gt;
  * (✘) Add Wedding NPC in the town hall.&lt;br /&gt;
  * (✘) Add Ilmari Betsu as the library receptionist.&lt;br /&gt;
  * (✘) Implement new CookieMaster.&lt;br /&gt;
  * (✘) Reduce delay for monster respawn in the introduction island.&lt;br /&gt;
  * (✘) Salem gives pet&#039;s instruction book.&lt;br /&gt;
  * (✘) Add a generic special function for door warps in Artis that will block mounts and barrels to enter in houses.&lt;br /&gt;
  * (✘) Add book collector quests with the possibility to add a book in the library to complete the collection or to keep it for self.&lt;br /&gt;
  * (✘) Limit to only one the number of fishing action per player.&lt;br /&gt;
&lt;br /&gt;
====Guidelines====&lt;br /&gt;
  * (✘) Set some guidelines for insult, trashtalk, etc... in NPC dialogue that somehow equal the European PEGI-12 classification.&lt;br /&gt;
&lt;br /&gt;
====Music====&lt;br /&gt;
  * (✘) Music theme for the legion.&lt;br /&gt;
  * (✘) Music theme for a &amp;quot;battle&amp;quot; background.&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Standards/Warp_Details&amp;diff=59577</id>
		<title>Dev:TmwAthena Scripting Standards/Warp Details</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Standards/Warp_Details&amp;diff=59577"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Standards/Warp Details to Development:TmwAthena Scripting Standards/Warp Details: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:TmwAthena Scripting Standards/Warp Details]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Standards/Warp_Details&amp;diff=59576</id>
		<title>Development:TmwAthena Scripting Standards/Warp Details</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Standards/Warp_Details&amp;diff=59576"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Standards/Warp Details to Development:TmwAthena Scripting Standards/Warp Details: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This subpage details information on warp usage.&lt;br /&gt;
&lt;br /&gt;
==Warp Sizes==&lt;br /&gt;
Warp sizes are nonintuitive. This article aims to help describe them.&lt;br /&gt;
&lt;br /&gt;
Width and height work basically the same, so only one will be described here. What applies to west, applies to north. What applies to east, applies to south. Here is an overview of how it works:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &lt;br /&gt;
!colspan=4| West&lt;br /&gt;
| &lt;br /&gt;
!colspan=4| East&lt;br /&gt;
|-&lt;br /&gt;
! Tiles&lt;br /&gt;
| ...&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
! 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
! Width&lt;br /&gt;
| ...&lt;br /&gt;
| 6&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| -1&lt;br /&gt;
| 1&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So, a width of negative one restricts the warp to the column of tiles specified by it&#039;s location, while a width of four extends it three tiles west, and two tiles east. A width less than negative one makes the warp disappear.&lt;br /&gt;
&lt;br /&gt;
==Placing warps==&lt;br /&gt;
To place warps on maps in a way that the player notices the least hopping during the map transfer the source and the target area of a warp have to be in the same (visual) location. The two warps have to be placed in a way that the outgoing warp is right behind the incomming one. The outgoing warp may not be blocked but the blocked area has to start right behind it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  MAP A          MAP B&lt;br /&gt;
 &lt;br /&gt;
 XXXXXXX        X     X&lt;br /&gt;
 XOOOOOX        X  i  X &lt;br /&gt;
 X  i  X        XOOOOOX&lt;br /&gt;
 X     X        XXXXXXX&lt;br /&gt;
&lt;br /&gt;
 X: Blocked&lt;br /&gt;
 O: Outgoing warp&lt;br /&gt;
 i: Incomming warp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Server Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Standards/Mob_Details&amp;diff=59575</id>
		<title>Dev:TmwAthena Scripting Standards/Mob Details</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Standards/Mob_Details&amp;diff=59575"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Standards/Mob Details to Development:TmwAthena Scripting Standards/Mob Details: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:TmwAthena Scripting Standards/Mob Details]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Standards/Mob_Details&amp;diff=59574</id>
		<title>Development:TmwAthena Scripting Standards/Mob Details</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Standards/Mob_Details&amp;diff=59574"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Standards/Mob Details to Development:TmwAthena Scripting Standards/Mob Details: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mob spawn areas are nonintuitive. This article aims to help describe them.&lt;br /&gt;
&lt;br /&gt;
Width and height work basically the same, so only one will be described here. What applies to west, applies to north. What applies to east, applies to south. Here is an overview of how it works:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &lt;br /&gt;
!colspan=4| West&lt;br /&gt;
| &lt;br /&gt;
!colspan=4| East&lt;br /&gt;
|-&lt;br /&gt;
! Tiles&lt;br /&gt;
| ...&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
! 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
! Width&lt;br /&gt;
| ...&lt;br /&gt;
| 8&lt;br /&gt;
| 6&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 3&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
So, a width of zero restricts the area to the column of tiles specified by it&#039;s location, while a width of three extends it one tile west, and two tiles east. A width less than zero will prevent the map server from loading.&lt;br /&gt;
&lt;br /&gt;
If both the x- and y-coordinates of the area are zero, the width and height are ignored and all individuals can spawn anywhere on the map. If only one is zero, the mob won&#039;t be used.&lt;br /&gt;
&lt;br /&gt;
[[Category:Server Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Standards&amp;diff=59573</id>
		<title>Dev:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Standards&amp;diff=59573"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Standards to Development:TmwAthena Scripting Standards: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:TmwAthena Scripting Standards]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Standards&amp;diff=59572</id>
		<title>Development:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Standards&amp;diff=59572"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Standards to Development:TmwAthena Scripting Standards: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Classic:TmwAthena Scripting Standards]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Reference/unstable/magic-v3&amp;diff=59571</id>
		<title>Dev:TmwAthena Scripting Reference/unstable/magic-v3</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Reference/unstable/magic-v3&amp;diff=59571"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Reference/unstable/magic-v3 to Development:TmwAthena Scripting Reference/unstable/magic-v3: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:TmwAthena Scripting Reference/unstable/magic-v3]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Reference/unstable/magic-v3&amp;diff=59570</id>
		<title>Development:TmwAthena Scripting Reference/unstable/magic-v3</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Reference/unstable/magic-v3&amp;diff=59570"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Reference/unstable/magic-v3 to Development:TmwAthena Scripting Reference/unstable/magic-v3: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metakey&amp;gt;Script Language, Code, Source, eAthena Script, AST&amp;lt;/metakey&amp;gt; &amp;lt;metadesc&amp;gt;The Mana World Scripting Language Reference&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f6ebc1; text-align: center; border: 1px solid #e0b713; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TMW&#039;s scripting wiki pages:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Scripting Basics]] - [[Scripting Standards]] - [[Scripting Reference]]&lt;br /&gt;
&lt;br /&gt;
For questions feel free to contact us on [https://web.libera.chat/?channels=#themanaworld-dev IRC] and/or on our [https://forums.themanaworld.org forum].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page is a reference for commands &#039;&#039;believed&#039;&#039; to work in the eAthena scripting language still used by tmwAthena.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; A number of problematic commands have been removed from this list, but not all commands have been tested.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language Commands ==&lt;br /&gt;
These are command that are closely tied to the language itself.&lt;br /&gt;
&lt;br /&gt;
=== goto ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    goto L_1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unconditionally jump to a label. Often used in an &amp;quot;if&amp;quot; body.&lt;br /&gt;
&lt;br /&gt;
=== callsub ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callsub S_labelname;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given label. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== callfunc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callfunc &amp;quot;function_name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given function script. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line of this script.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;return&amp;quot; is broken if this is used from within an if(). If you need a conditional callfunc, first goto a label.&lt;br /&gt;
&lt;br /&gt;
=== return ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    return;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return from this script or sublabel to the calling function.&lt;br /&gt;
&lt;br /&gt;
It is unknown what happens if this is used from the top-level script, use &amp;quot;close&amp;quot; or &amp;quot;end&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    set variable, expression;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Very common command, to set variables.&lt;br /&gt;
&lt;br /&gt;
=== setarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setarray arrayvariable, val1, val2, ...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set elements of an array. Previous elements are not cleared. At most 128 elements can be assigned.&lt;br /&gt;
&lt;br /&gt;
It is currently possible, but deprecated, to specify a (zero-based) array index to start at the given part of an array. It&#039;s pretty amazing that that code works anyway.&lt;br /&gt;
&lt;br /&gt;
Remember that there are no permanent arrays, only temporary.&lt;br /&gt;
&lt;br /&gt;
=== cleararray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cleararray variable, value, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill an array with &amp;quot;count&amp;quot; copies of &amp;quot;value&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getarraysize ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarraysize variable;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the size of an array. Returns 1 even when empty.&lt;br /&gt;
&lt;br /&gt;
The size of an array is simply one more than the index of the last nonzero integer or nonempty string.&lt;br /&gt;
&lt;br /&gt;
WARNING: most functions that set an array do not bother to clear out high indices. You should almost always use an explicitly-provided size instead.&lt;br /&gt;
&lt;br /&gt;
=== getelementofarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    arrayname[index_expr]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns index_expr of that array.&lt;br /&gt;
&lt;br /&gt;
=== if ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if (condition) condition_command [conditional_command_args, ...];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If condition is zero, do nothing. Else, evaluate the conditional command.&lt;br /&gt;
&lt;br /&gt;
The only thing special about the if command is the lack of commas during parsing (from my reading this is only a warning?). During execution it is perfectly normal.&lt;br /&gt;
&lt;br /&gt;
Note: you must not use a callsub or callfunc as conditional_command.&lt;br /&gt;
&lt;br /&gt;
=== end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use this if you have opened a dialog to the player, use &amp;quot;close&amp;quot; instead. Or, use &amp;quot;close2&amp;quot; and *then* &amp;quot;end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== debugmes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    debugmes &amp;quot;string&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Print a message to stdout.&lt;br /&gt;
&lt;br /&gt;
== Message Commands ==&lt;br /&gt;
These are commands for dialog or one-way chat with players.&lt;br /&gt;
&lt;br /&gt;
=== mes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mes &amp;quot;string&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a line of text to the player. If a dialog box is not already open for the attached NPC, one will be created.&lt;br /&gt;
&lt;br /&gt;
If you need to include the &#039;&#039;&#039;&amp;quot;&#039;&#039;&#039; character inside the message, (especially for dialogs) insert it as &#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
When doing several messages without a next; in between, there should be only a single \&amp;quot; at the beginning and the end each.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;:&lt;br /&gt;
 mes &amp;quot;[Me Myself]&amp;quot;;&lt;br /&gt;
 mes;&lt;br /&gt;
 mes &amp;quot;(I clear my throat)&amp;quot;&lt;br /&gt;
 mes;&lt;br /&gt;
 mes &amp;quot;\&amp;quot;I start talking here, and don&#039;t close the quotation marks, because I&#039;m not yet done talking.&amp;quot;;&lt;br /&gt;
 mes &amp;quot;And start a new line, but without new quotation marks.&amp;quot;;&lt;br /&gt;
 mes &amp;quot;Here I stop talking, so I close the quotation marks.\&amp;quot;&amp;quot;;&lt;br /&gt;
gives:&lt;br /&gt;
[Me Myself]&lt;br /&gt;
&lt;br /&gt;
(I clear my throat)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I start talking here, and don&#039;t close the quotation marks, because I&#039;m not yet done talking.&amp;lt;br&amp;gt;&lt;br /&gt;
And start a new line, but without new quotation marks.&amp;lt;br&amp;gt;&lt;br /&gt;
Here I stop talking, so I close the quotation marks.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== next ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    next;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses &amp;quot;Next&amp;quot; in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script and give the user a &amp;quot;Close&amp;quot; button in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses the &amp;quot;Close&amp;quot; button in the dialog, then keep executing the script.&lt;br /&gt;
&lt;br /&gt;
WARNING: unlike close, this command is a blocking command, the usual caveats apply.&lt;br /&gt;
&lt;br /&gt;
=== menu ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;option 1&amp;quot;, L_1,&lt;br /&gt;
        &amp;quot;option 2&amp;quot;, L_2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a list of choices to the player, then branch to the specified label.&lt;br /&gt;
&lt;br /&gt;
Additionally, the temporary variable &amp;quot;@menu&amp;quot; is set to the 1-based index of the choice.&lt;br /&gt;
&lt;br /&gt;
The options must not contain the character &amp;quot;:&amp;quot;, as the protocol uses it as a separator.&lt;br /&gt;
&lt;br /&gt;
=== input ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    input variable_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Input an integer or string to the given variable, depending on whether has the &#039;$&#039; string postfix.&lt;br /&gt;
&lt;br /&gt;
The implementation allows variable_name to be omitted if input is an integer, in case l14 is used. Don&#039;t use this.&lt;br /&gt;
&lt;br /&gt;
=== announce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    announce &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Do a GM message.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0xF == 0 forward it to all map servers.&lt;br /&gt;
If flag &amp;amp; 0x8, message is from the OID (NPC? usually?) rather than the RID (player).&lt;br /&gt;
&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, send to all on map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 2, send to all in line of sight.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 3, send to self only.&lt;br /&gt;
If (flag &amp;amp; 0x7) == anything else, send to all clients.&lt;br /&gt;
&lt;br /&gt;
=== mapannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapannounce &amp;quot;mapname&amp;quot;, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in map.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== message ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    message &amp;quot;player&amp;quot;, &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display (in chat) a message from the server to a single user.&lt;br /&gt;
&lt;br /&gt;
=== npctalk ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npctalk &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make an NPC say something publicly.&lt;br /&gt;
&lt;br /&gt;
Note: in many cases areaannounce is a better choice.&lt;br /&gt;
&lt;br /&gt;
== Character Commands ==&lt;br /&gt;
These have to do with attributes of the player.&lt;br /&gt;
&lt;br /&gt;
=== setlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setlook type, value;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an aspect of a character&#039;s appearance. Used e.g. by the barber.&lt;br /&gt;
&lt;br /&gt;
There are constant provided for the LOOK type, and for hair color and hair style.&lt;br /&gt;
&lt;br /&gt;
=== heal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    heal hp, sp[, boolean];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp. Add ,1 at the end to make it heal gradually.&lt;br /&gt;
&lt;br /&gt;
=== readparam ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    readparam(type[, &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the core parameters of a player.&lt;br /&gt;
&lt;br /&gt;
type is one of the bCamelCase constants, see db/const.txt&lt;br /&gt;
&lt;br /&gt;
=== getcharid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getcharid(type[ &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get an id of the attached (or given) player.&lt;br /&gt;
&lt;br /&gt;
Type is:&lt;br /&gt;
0: char id&lt;br /&gt;
1: party id&lt;br /&gt;
2: guild id (deprecated)&lt;br /&gt;
3: account id&lt;br /&gt;
&lt;br /&gt;
You usually want 3.&lt;br /&gt;
&lt;br /&gt;
=== strcharinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strcharinfo(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return string information about an account:&lt;br /&gt;
num==0: name&lt;br /&gt;
num==1: party name&lt;br /&gt;
num==2: guild name (deprecated)&lt;br /&gt;
&lt;br /&gt;
=== sc_start ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start type, tick, val1[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Apply a status effect to a player (or monster?).&lt;br /&gt;
&lt;br /&gt;
type is one of the sc_* constants.&lt;br /&gt;
&lt;br /&gt;
=== sc_end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_end type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Immediately end status effect on current player.&lt;br /&gt;
&lt;br /&gt;
=== sc_check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_check(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whether a status effect is currently active.&lt;br /&gt;
&lt;br /&gt;
=== resetstatus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetstatus;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== changesex ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    changesex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ask the login server (via the char server) to toggle this account&#039;s sex, then kick the player.&lt;br /&gt;
&lt;br /&gt;
=== attachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    attachrid(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the being associated with this script.&lt;br /&gt;
&lt;br /&gt;
Return true if such a player is logged in.&lt;br /&gt;
&lt;br /&gt;
=== detachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    detachrid;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Detach the player associated with this script.&lt;br /&gt;
&lt;br /&gt;
=== isloggedin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isloggedin(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return true if the given ID is logged in.&lt;br /&gt;
&lt;br /&gt;
Often you shouldn&#039;t use this, but attachrid(id) instead&lt;br /&gt;
&lt;br /&gt;
=== marriage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    marriage(&amp;quot;otherplayer&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Marry the attached player to the other player.&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== divorce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    divorce()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Divorce the attached player from their partner&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== getpartnerid2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartnerid2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the attached player&#039;s partner (0 is none).&lt;br /&gt;
&lt;br /&gt;
=== getexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getexp base, job;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase the types of experience.&lt;br /&gt;
&lt;br /&gt;
=== getinventorylist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@inventorylist_id&amp;quot;, &amp;quot;@inventorylist_amount&amp;quot;, &amp;quot;@inventorylist_equip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@inventory_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only activated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== getunactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getunactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only unactivated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== poolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    poolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Activate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== unpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unpoolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deactivate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== misceffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    misceffect type, &amp;quot;player_name&amp;quot;;&lt;br /&gt;
    misceffect type, being_id;&lt;br /&gt;
    misceffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a miscellaneous effect on a being.&lt;br /&gt;
&lt;br /&gt;
In the third form, it will use the OID if possible, and fallback to the RID.&lt;br /&gt;
&lt;br /&gt;
=== getlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getlook(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return part of the player&#039;s appearance:&lt;br /&gt;
val==1: hair&lt;br /&gt;
val==2: weapon&lt;br /&gt;
val==3: bottom&lt;br /&gt;
val==4: middle&lt;br /&gt;
val==5: top&lt;br /&gt;
val==6: hair color&lt;br /&gt;
val==8: shield&lt;br /&gt;
val==9: shoes&lt;br /&gt;
&lt;br /&gt;
On failure, return -1.&lt;br /&gt;
&lt;br /&gt;
=== getsavepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getsavepoint(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
type==0: Return savepoint map&lt;br /&gt;
type==1: Return savepoint x&lt;br /&gt;
type==2: Return savepoint y&lt;br /&gt;
&lt;br /&gt;
This is believed to be the only function (other than callfunc and callsub of course) that returns a different type depending on its arguments.&lt;br /&gt;
&lt;br /&gt;
=== shop ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    shop &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Close the script and open the given NPC&#039;s shop.&lt;br /&gt;
&lt;br /&gt;
=== isdead ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isdead()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is dead, else 0.&lt;br /&gt;
&lt;br /&gt;
=== fakenpcname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    fakenpcname &amp;quot;name&amp;quot;, &amp;quot;newname&amp;quot;, new_sprite_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the appearance of an NPC.&lt;br /&gt;
&lt;br /&gt;
== Location Commands ==&lt;br /&gt;
These are commands that have to do with the location of players&lt;br /&gt;
&lt;br /&gt;
=== warp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    warp &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp the attached player to the given location. &amp;quot;mapname&amp;quot; may have the special values &amp;quot;Random&amp;quot;, &amp;quot;SavePoint&amp;quot;, and &amp;quot;Save&amp;quot; (case-sensitive), but x and y are still required.&lt;br /&gt;
&lt;br /&gt;
=== isat ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isat(&amp;quot;mapname&amp;quot;, x, y)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is at the given location, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== areawarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areawarp &amp;quot;src_map&amp;quot;, x0, y0, x1, y1, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players in the given area to the given location. The area is of square shape which has the diagonals x0,y0 and x1,y1.&lt;br /&gt;
&lt;br /&gt;
=== getusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getusers(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0x8, base on OID instead of RID.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 0, return users on the map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, return users on the server.&lt;br /&gt;
&lt;br /&gt;
=== getmapusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmapusers(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users on a given map.&lt;br /&gt;
&lt;br /&gt;
=== getareausers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareausers(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, z)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users in an area.&lt;br /&gt;
z can be set to 1 or be left out to check for players who are alive.&lt;br /&gt;
&lt;br /&gt;
=== mapwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapwarp &amp;quot;src_map&amp;quot;, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players from source map to destination location.&lt;br /&gt;
&lt;br /&gt;
=== npcwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npcwarp x, y, &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Move an NPC to a different location on the same map.&lt;br /&gt;
&lt;br /&gt;
=== isin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isin(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if the player is in the area.&lt;br /&gt;
&lt;br /&gt;
=== getx ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getx()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s x coordinate.&lt;br /&gt;
&lt;br /&gt;
=== gety ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gety()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s y coordinate.&lt;br /&gt;
&lt;br /&gt;
=== getmap ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmap()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s current map.&lt;br /&gt;
&lt;br /&gt;
== Item Commands ==&lt;br /&gt;
These have to do with items or inventory.&lt;br /&gt;
&lt;br /&gt;
=== getitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitem &amp;quot;itemname&amp;quot;, count[, unused_argument[, playerid]];&lt;br /&gt;
    getitem itemid, count[, unused_argument[, playerid]];&lt;br /&gt;
&amp;quot;ii**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant the attached player (or the given player) &amp;quot;count&amp;quot; copies of an item.&lt;br /&gt;
&lt;br /&gt;
If itemname is unrecognized you get an iten (727) instead.&lt;br /&gt;
&lt;br /&gt;
;Warning:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    delitem: only deletes one item if applied to not-stackable item (equipment)&lt;br /&gt;
    getitem: gives item stacked, even if it&#039;s equipment&lt;br /&gt;
    fix: use a loop and only delete/give one item at a time&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== makeitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    makeitem &amp;quot;itemname&amp;quot;, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
    makeitem itemid, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Drop items on the ground.&lt;br /&gt;
&lt;br /&gt;
The special &amp;quot;mapname&amp;quot; value &amp;quot;this&amp;quot; means the map of the attached player.&lt;br /&gt;
&lt;br /&gt;
=== delitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    delitem &amp;quot;itemname&amp;quot;, count;&lt;br /&gt;
    delitem itemid, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove items from the attached player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
This command is buggy if the player does not have enough of the item. And if the item is not stackable, the command will delete only one of them, even if a higher number is specified.&lt;br /&gt;
;Warning:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    delitem: only deletes one item if applied to not-stackable item (equipment)&lt;br /&gt;
    getitem: gives item stacked, even if it&#039;s equipment&lt;br /&gt;
    fix: use a loop and only delete/give one item at a time&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== countitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    countitem(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    countitem(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the number of the given item in the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== checkweight ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkweight(&amp;quot;itemname&amp;quot;, count)&lt;br /&gt;
    checkweight(itemid, count)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 0 if adding &amp;quot;count&amp;quot; of the item would put player above max weight, 1 if it would still be less than max weight.&lt;br /&gt;
Also returns 0 if item does not exist.&lt;br /&gt;
&lt;br /&gt;
=== getequipid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipid(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipname(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== statusup2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup2 bType, delta;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase or decrease a stat.&lt;br /&gt;
&lt;br /&gt;
=== bonus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    bonus bType, delta&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Temporarily increase a stat. For use in item scripts only.&lt;br /&gt;
&lt;br /&gt;
=== skill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    skill id, level[, flag = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill.&lt;br /&gt;
&lt;br /&gt;
flag==0: permanent skill&lt;br /&gt;
flag==1: temporary skill (item scripts only)&lt;br /&gt;
&lt;br /&gt;
(Untested)&lt;br /&gt;
&lt;br /&gt;
=== setskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setskill id, level;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill permanently.&lt;br /&gt;
&lt;br /&gt;
=== getskilllv ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllv(skill)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s level of the given skill.&lt;br /&gt;
&lt;br /&gt;
=== getgmlevel ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getgmlevel()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s GM level.&lt;br /&gt;
&lt;br /&gt;
=== getopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getopt2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== setopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setopt2 flags;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== savepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    savepoint &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s save point. Used e.g. by Soul Menhirs, and during the time travel quest.&amp;lt;!-- Don&#039;t remove this just because you can&#039;t figure out how to start it from this end. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== openstorage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    openstorage;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Open the player&#039;s storage.&lt;br /&gt;
&lt;br /&gt;
=== getitemname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitemname(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    getitemname(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item, or &amp;quot;Unknown Item&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== nude ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    nude;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip all items.&lt;br /&gt;
&lt;br /&gt;
=== unequipbyid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unequipbyid slot_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip whatever is in the slot&lt;br /&gt;
&lt;br /&gt;
=== getareadropitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;itemname&amp;quot;[, delitems = 0]);&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, itemid[, delitems = 0]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count items on the floor in an area. If delitems, the items will be deleted as well.&lt;br /&gt;
&lt;br /&gt;
== Common Functions ==&lt;br /&gt;
These are not mostly not related to the RPG or the scripting language.&lt;br /&gt;
&lt;br /&gt;
=== rand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    rand(range)&lt;br /&gt;
    rand(min, max)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the first form, return a random number between 0 (inclusive) and range (exclusive). Return 0 if range is not positive.&lt;br /&gt;
In the second form, return a random number between min and max, inclusive. Min and max may be swapped.&lt;br /&gt;
&lt;br /&gt;
=== gettimetick ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimetick(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the ticks&lt;br /&gt;
&lt;br /&gt;
type==0 (or other): milliseconds since some point in time, wraps every 50 days.&lt;br /&gt;
type==1: time since midnight, UTC.&lt;br /&gt;
type==2: seconds since the epoch.&lt;br /&gt;
&lt;br /&gt;
You should almost always use type 2.&lt;br /&gt;
&lt;br /&gt;
=== gettime ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettime(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get a component of the time (UTC).&lt;br /&gt;
&lt;br /&gt;
1: second (0-59)&lt;br /&gt;
2: minute (0-59)&lt;br /&gt;
3: hour (0-23)&lt;br /&gt;
4: day of week (0-6)&lt;br /&gt;
5: day of month (1-31)&lt;br /&gt;
6: month (1-12)&lt;br /&gt;
7: year (1902-2038)&lt;br /&gt;
&lt;br /&gt;
== Timers and Events ==&lt;br /&gt;
These have to do with transfering control in ways that are not immediately obvious.&lt;br /&gt;
&lt;br /&gt;
The most common ones are initnpctimer or startnpctimer, stopnpctimer, and setnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== donpcevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    donpcevent &amp;quot;NpcName::Event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== addtimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    addtimer tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke an NPC event after a delay, for the attached NPC.&lt;br /&gt;
&lt;br /&gt;
This command does the same thing as areatimer, but for only the attached player.&lt;br /&gt;
&lt;br /&gt;
=== initnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    initnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s attached timer to tick 0 and start it.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to setnpctimer, 0; startnpctimer;&lt;br /&gt;
&lt;br /&gt;
=== stopnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    stopnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the NPC&#039;s attached timer.&lt;br /&gt;
&lt;br /&gt;
This DOES NOT do anything about the tick. But that&#039;s okay, you should normally be starting it with initnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== startnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    startnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the NPC&#039;s attached timer, without setting the tick.&lt;br /&gt;
&lt;br /&gt;
=== setnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setnpctimer tick;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s timer to a specific tick. Generally, this is only useful for tick 0.&lt;br /&gt;
&lt;br /&gt;
=== getnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getnpctimer(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the current tick of an NPC&#039;s timer.&lt;br /&gt;
&lt;br /&gt;
type==0: timer event tick (like setnpctimer)&lt;br /&gt;
type==1: bool if it has a next timer.&lt;br /&gt;
type==2: timer amount&lt;br /&gt;
&lt;br /&gt;
=== mobcount ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mobcount(&amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count the remaining mobs from the spawn with the given event. Has an offset of -1.&lt;br /&gt;
&lt;br /&gt;
=== areatimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areatimer &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add a PC event timer to all players in the area.&lt;br /&gt;
&lt;br /&gt;
After &amp;quot;tick&amp;quot; milliseconds, the given NPC event will fire with each player as the RID.&lt;br /&gt;
&lt;br /&gt;
== magic-v3 ==&lt;br /&gt;
commands introduced in &amp;lt;i&amp;gt;magic-v3&amp;lt;/i&amp;gt;. &amp;lt;b&amp;gt;please move those to unsorted or into the appropriate categories when &amp;lt;i&amp;gt;magic-v3&amp;lt;/i&amp;gt; is stable.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== registercmd ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    registercmd &amp;quot;command&amp;quot;, &amp;quot;npc[::event]&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fires the event when the specified command is typed into chat. If you only put the npc name (no event) it does the same as clicking the npc so you can use menus and other things that require user input.&lt;br /&gt;
&lt;br /&gt;
=== target ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    target(source id, target id, flag)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allows to check multiple things about the target at once. The source and target can by anything (player, npc, mob). The return value is a bitmasking of the tests that succeeded. The flag is a bitmasking of those bits:&lt;br /&gt;
* &#039;&#039;&#039;0x01&#039;&#039;&#039; the target is in the visible range of the source (which is source position plus and minus AREA_SIZE). This means that the source can see the target on their computer screen (providing the screen is big enough)&lt;br /&gt;
* &#039;&#039;&#039;0x02&#039;&#039;&#039; the target is in the attack range of the source (based on the calculated attack range, not the &amp;lt;i&amp;gt;base&amp;lt;/i&amp;gt; attack range)&lt;br /&gt;
* &#039;&#039;&#039;0x04&#039;&#039;&#039; the target is walkable, the source has a clear path to target&lt;br /&gt;
* &#039;&#039;&#039;0x08&#039;&#039;&#039; &amp;lt;i&amp;gt;not yet implemented&amp;lt;/i&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;0x10&#039;&#039;&#039; the source can attack the target. note: &amp;lt;i&amp;gt;0x10&amp;lt;/i&amp;gt; in hexadecimal is &amp;lt;i&amp;gt;16&amp;lt;/i&amp;gt; in decimal, not &amp;lt;i&amp;gt;10&amp;lt;/i&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;0x20&#039;&#039;&#039; the target is in the line of sight of the source. note: &amp;lt;i&amp;gt;0x20&amp;lt;/i&amp;gt; in hexadecimal is &amp;lt;i&amp;gt;32&amp;lt;/i&amp;gt; in decimal, not &amp;lt;i&amp;gt;20&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    get(variable or param, being id or name)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allows to get a variable or param from another player, a mob or a npc. Useful to do things like &amp;lt;i&amp;gt;get(Hp, @mobID)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== min ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    min(number, number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the smallest number of the two&lt;br /&gt;
&lt;br /&gt;
=== max ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    max(number, number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the biggest number of the two&lt;br /&gt;
&lt;br /&gt;
=== pow ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pow(number, exponent)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt; at the power of &amp;lt;i&amp;gt;exponent&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== sqrt ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sqrt(number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the square root of &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== cbrt ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cbrt(number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the cubic root of &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== elttype ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    elttype(being id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the element type of the being&lt;br /&gt;
&lt;br /&gt;
=== eltlvl ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    eltlvl(being id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
returns the element level of the being&lt;br /&gt;
&lt;br /&gt;
== Unsorted Commands ==&lt;br /&gt;
These are commands that still need sorting, please edit this page, see talk page for category (and subcategory?) suggestions.&lt;br /&gt;
&lt;br /&gt;
=== strnpcinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strnpcinfo(number[, &amp;quot;npc&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Returns information about the current npc or specified npc. &#039;&#039;&#039;0&#039;&#039;&#039; =&amp;gt; full name. &#039;&#039;&#039;1&#039;&#039;&#039; =&amp;gt; anything that comes before # in the name. &#039;&#039;&#039;2&#039;&#039;&#039; =&amp;gt; anything that comes after the # in the name. &#039;&#039;&#039;3&#039;&#039;&#039; =&amp;gt; map name.&lt;br /&gt;
&lt;br /&gt;
=== getnpcx ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getnpcx([&amp;quot;npc&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Returns the X location of the current or specified npc.&lt;br /&gt;
&lt;br /&gt;
=== getnpcy ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getnpcy([&amp;quot;npc&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Returns the Y location of the current or specified npc.&lt;br /&gt;
&lt;br /&gt;
=== monster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    monster &amp;quot;mapname&amp;quot;, x, y, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters at a point. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== areamonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areamonster &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters in an area. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== killmonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonster &amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill monsters on a map.&lt;br /&gt;
&lt;br /&gt;
Unless it is &amp;quot;All&amp;quot;, &amp;quot;event&amp;quot; must match the one used at spawn time.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;All&amp;quot; is given, this function properly preserves permanently respawning monsters.&lt;br /&gt;
&lt;br /&gt;
=== enablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    enablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== disablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    disablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== setmapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== removemapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    removemapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unset an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== getmapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmapflag(&amp;quot;mapname&amp;quot;, flag);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== pvp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvp number;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Changes the pvp channel of the attached user to the specified channel. Please only use channels above 19 as 0-19 are reserved as special channels. To remove a user from the channel simply do pvp 0;&lt;br /&gt;
&lt;br /&gt;
=== getpvpflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpvpflag(number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Gets pvp information for the attached user. 0 returns the pvp channel of the user. 1 returns true if the user is on @hide or else false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== pvpon ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpon &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allow PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== pvpoff ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpoff &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deny PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== emotion ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    emotion emote_index;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Show a smiley above the OID.&lt;br /&gt;
&lt;br /&gt;
=== getspellinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getspellinvocation(&amp;quot;spell-identifier&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the #invocation used for a spell, or &amp;quot;...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== specialeffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a special effect on the OID.&lt;br /&gt;
&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but does not fallback when there is no OID.&lt;br /&gt;
&lt;br /&gt;
=== specialeffect2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect2 type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but works when there is an OID.&lt;br /&gt;
&lt;br /&gt;
=== gmcommand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gmcommand &amp;quot;@command maybe with arguments&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run a GM command, at level 99. [[GM_Commands]]&lt;br /&gt;
&lt;br /&gt;
=== mapexit ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapexit;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Exits the map server.&lt;br /&gt;
&lt;br /&gt;
=== bonus2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    bonus2 player, type, Amount, Tick;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Currently the only type is bHPDrainRate. This takes Amount per Tick in HPs from player.&lt;br /&gt;
&lt;br /&gt;
=== getitemlink ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitemlink(&amp;quot;ItemName&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Returns the Manaplus link for use in scripts [@@ID|JName@@]&lt;br /&gt;
&lt;br /&gt;
=== npcareawarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npcareawarp x0, y0, x1, y1, CollisionBool, &amp;quot;NPC Name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warps a NPC to somewhere within the area. If Collision Bool is set to 1 it will spawn on collision, else 0 is not on collision.&lt;br /&gt;
&lt;br /&gt;
=== iscollision ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    iscollision map.gat, x, y, type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Checks if collision is of a type. (Types will be cast as CONST in the const.txt file)&lt;br /&gt;
&lt;br /&gt;
== Deprecated ==&lt;br /&gt;
&lt;br /&gt;
=== itemheal ===&lt;br /&gt;
This command has been merged into [[Dev:TmwAthena_Scripting_Reference#heal|heal]]. The equivalent is :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    heal Hp, Sp, true;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== percentheal ===&lt;br /&gt;
This command has been completely removed. Please use inline math instead. For example to remove 30% hp you would do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    heal ((MaxHp/10) * -3), 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== killmonsterall ===&lt;br /&gt;
This command has been deprecated and [[Dev:TmwAthena_Scripting_Reference#killmonster|killmonster]] should be used instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonster &amp;quot;mapname&amp;quot;, &amp;quot;All&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== cmdothernpc ===&lt;br /&gt;
This command has been deprecated in favor of [[Dev:TmwAthena_Scripting_Reference#donpcevent|donpcevent]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Reference&amp;diff=59569</id>
		<title>Dev:TmwAthena Scripting Reference</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Reference&amp;diff=59569"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Reference to Development:TmwAthena Scripting Reference: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:TmwAthena Scripting Reference]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Reference&amp;diff=59568</id>
		<title>Development:TmwAthena Scripting Reference</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Reference&amp;diff=59568"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Reference to Development:TmwAthena Scripting Reference: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Classic:TmwAthena Scripting Reference]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Basics&amp;diff=59567</id>
		<title>Dev:TmwAthena Scripting Basics</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Scripting_Basics&amp;diff=59567"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Basics to Development:TmwAthena Scripting Basics: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:TmwAthena Scripting Basics]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Basics&amp;diff=59566</id>
		<title>Development:TmwAthena Scripting Basics</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Scripting_Basics&amp;diff=59566"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Scripting Basics to Development:TmwAthena Scripting Basics: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Classic:TmwAthena Scripting Basics]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Packets&amp;diff=59565</id>
		<title>Dev:TmwAthena Packets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TmwAthena_Packets&amp;diff=59565"/>
		<updated>2024-03-27T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Packets to Development:TmwAthena Packets: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:TmwAthena Packets]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Packets&amp;diff=59564</id>
		<title>Development:TmwAthena Packets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TmwAthena_Packets&amp;diff=59564"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TmwAthena Packets to Development:TmwAthena Packets: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Archive:TmwAthena Packets]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Tilesets&amp;diff=59563</id>
		<title>Dev:Tilesets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Tilesets&amp;diff=59563"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Tilesets to Development:Tilesets: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Tilesets]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Tilesets&amp;diff=59562</id>
		<title>Development:Tilesets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Tilesets&amp;diff=59562"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Tilesets to Development:Tilesets: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category_art}}&lt;br /&gt;
{{Status_green}}&lt;br /&gt;
{{Status Under Construction}}&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
To get started on tileset development, please look into what kind of areas we plan to add to the game or what kind of changes we would still want to make to existing maps. See for example [[Geography]] and [[concept art]]. Ideas of your own are welcome too!&lt;br /&gt;
&lt;br /&gt;
== General specifications ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tile size:&#039;&#039;&#039; 32x32&lt;br /&gt;
* &#039;&#039;&#039;Tileset size:&#039;&#039;&#039; Width: 512, Max height: 512 (for 1x1 sets)&lt;br /&gt;
* &#039;&#039;&#039;Color Depth:&#039;&#039;&#039; 24 or 32 (alpha layer optional, no magic colors)&lt;br /&gt;
* &#039;&#039;&#039;File Format:&#039;&#039;&#039; [http://www.libpng.org/pub/png/ PNG]&lt;br /&gt;
* &#039;&#039;&#039;Current tilesets:&#039;&#039;&#039; https://github.com/themanaworld/tmwa-client-data/tree/master/graphics/tiles&lt;br /&gt;
&lt;br /&gt;
Please also note our [[Guidelines|style guidelines]].&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
*Please keep in mind how maps are made (see [[Map development]]). The lowest layer is usually used for ground tiles/walls.&lt;br /&gt;
&lt;br /&gt;
*Although we prefer high quality tiles over low quality ones, please keep in mind that we try to resemble the look of old SNES games. So please try not to make the tiles too realistic. Please don&#039;t use realistic textures, such as a photo of a wooden piece, and use it for your tiles. We strongly encourage you to &#039;&#039;&#039;manually pixelate every tile&#039;&#039;&#039; and &#039;&#039;&#039;avoid to use gradients or filters (such as blur)&#039;&#039;&#039; excessively.&lt;br /&gt;
&lt;br /&gt;
*Regarding &#039;&#039;&#039;color choice&#039;&#039;&#039;: Keep your color palette narrow. Don&#039;t use more shades per color than necessary. 3 shades of one color are usually enough for small objects. Even very large objects shouldn&#039;t use more than 5 or 7 shades. But how many shades you use is in the end left up to the artists discretion. Keep in mind that dithering is usually used for structure effects in TMW and rarely for blending one color into another. When a structure effect is not needed you shoud better add an additional shade instead of applying too much dithering just for color blending. &lt;br /&gt;
*Try to use the &#039;&#039;&#039;same color palette for the whole tileset&#039;&#039;&#039;. The selection of color is important for the feeling of the tileset. Cold colors with a low saturation are good for a sad and cold feeling for example while warm and saturated colors create a warm and cheerful atmosphere (but please don&#039;t overdo the saturation). Whatever atmosphere you choose, it should be consistent through the whole tileset. When you create new tiles for existing tilesets you should try to use only colors that are already used in the tileset. Otherwise your new tiles will stand out and look weird when next to the old tiles.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Visible outlines&#039;&#039;&#039; are reserved for sprites. Please avoid them when creating map tiles.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;light direction&#039;&#039;&#039; is south-west for outdoor tilesets. Imagine the light source to be over your left shoulder. Of course there can be exceptions to this rule. Different or special areas may have a different direction of light to give it a subtle different feeling, such as lava caves with subtle orange light from the bottom, and deep in the dark forest with glowing mushrooms. For indoor tilesets diffused light is nice, but overusage could lead into problems with contrast between the inside and the outside.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Perspective:&#039;&#039;&#039; top-down 45Â° view angle (see the schematic to the right).[[Image:Perspective_Reference.png|right|384px]] SVG version: [http://lasdomogrod.pl/tmw/perspective-reference/TMW-PerspectiveReference.svg TMW-PerspectiveReference.svg]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Proportions:&#039;&#039;&#039; A character is approximately one tile wide and two tiles high. Don&#039;t be afraid to copy a player character into your image from time to time to check the size relation.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Drop shadows:&#039;&#039;&#039; Large objects on outdoor tilesets (like buildings, for example) should have drop shadows cast to the northeast. The shadows should be pure black with an opacity of 30%. The edges of the shadows should only have an opacity of 15%.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Reuse:&#039;&#039;&#039; The tiles in one tileset should be able to be put together in as many different ways as possible to allow the mapper to express his creativity.&lt;br /&gt;
&lt;br /&gt;
== Which tilesets are needed? ==&lt;br /&gt;
Feel free to ask that question on IRC:&lt;br /&gt;
irc://chat.freenode.net/themanaworld-dev&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Testing_Server&amp;diff=59561</id>
		<title>Dev:Testing Server</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Testing_Server&amp;diff=59561"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Testing Server to Development:Testing Server: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Testing Server]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Testing_Server&amp;diff=59560</id>
		<title>Development:Testing Server</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Testing_Server&amp;diff=59560"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Testing Server to Development:Testing Server: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Testing=&lt;br /&gt;
Before developers release game content onto the official server, they&#039;d like feedback from other developers and play-testers. This testing server regularly restarts for content additions, fixes and tweaks. &lt;br /&gt;
&lt;br /&gt;
There are several ways to test:&lt;br /&gt;
* &#039;&#039;&#039;Developer testing&#039;&#039;&#039; : Developers need to test their content in realistic conditions. They more or less would know about potential weaknesses and try to figure out possible solutions. No one, however, can be protected against the developer&#039;s biggest fear: the bug; because they know their work too much.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Player testing&#039;&#039;&#039; : A play-tester needs to perform the tests in conditions as close as possible to those that the players will meet in-game after the content is released. Thus, &amp;quot;cheats&amp;quot; on the test server are forbidden to them except in special situations approved by developers. Even items in the inventory should be close to the ones they would have in the real game. Testers must expect too that they can make errors in answering NPCs or bringing wrong items or an insufficient number of them when testing quests.&lt;br /&gt;
&lt;br /&gt;
Test-related discussions happen on the forums in the [https://forums.themanaworld.org/viewforum.php?f=43 Tester Reports] section.&lt;br /&gt;
&lt;br /&gt;
=== To become a play-tester ===&lt;br /&gt;
&lt;br /&gt;
You must first be reasonably familiar with the game, be registered on the forums and create an account on the [[#Location |test server]] and begin to test. You can coordinate your testing with the developers involved in the creation of the content you are testing either on the forums in the [https://forums.themanaworld.org/viewforum.php?f=43 Tester Reports] section or on live-chat on IRC at [https://web.libera.chat/?channel=#themanaworld-dev Libera Chat] channel #evol-dev.&lt;br /&gt;
&lt;br /&gt;
After a significant enough test contribution, you are entitled to be part of the Tester group on the forums, ask a dev or admin to invite you to it if you think you might be eligible.&lt;br /&gt;
&lt;br /&gt;
=Test Reporting=&lt;br /&gt;
====Where to report :====&lt;br /&gt;
Reports should be made in the [https://forums.themanaworld.org/viewforum.php?f=43 Tester Reports] section of the forums. Please read the forum rules and be respectful of developers. Thank you for helping them improve their work.&lt;br /&gt;
&lt;br /&gt;
====How to report :====&lt;br /&gt;
:Reporting a test is basically like [[Reporting Bugs]] except that you can control the starting conditions of the test, and that it is possible (at least theoretically) to repeat the trials. To perform a good test you must&lt;br /&gt;
* Specify precisely the starting conditions: level, class, status and job status, skills.... equipment employed if necessary, maybe client.&lt;br /&gt;
* Do NOT use unrealistic Status for serious job.&lt;br /&gt;
* Note even schematically the main steps of the steps and the remarks that come to your mind, they can be useful (even if you think they are not important).&lt;br /&gt;
* Do not try to presume anything about the developers intentions.&lt;br /&gt;
* Avoid @commands as much as possible (they can biase your feelings too) and generally speaking: &#039;&#039;&#039;do not try to cheat&#039;&#039;&#039;&lt;br /&gt;
* Read Dialogs carefully: Effort was made by developer to make the story and dialogs nice. When not bugs, misspellings are still issues.&lt;br /&gt;
* Watch the graphic environment: Effort was made by developers to make it pleasant. It may hide issues too.&lt;br /&gt;
As a summary: be a fair and wise player, take notes about what you feel and do.&lt;br /&gt;
&lt;br /&gt;
=Client=&lt;br /&gt;
Client may (will) have an influence on the way you play and on the impressions you have. It may have to be tested too.&lt;br /&gt;
* Manaplus client: [http://manaplus.evolonline.org http://manaplus.evolonline.org]&lt;br /&gt;
&lt;br /&gt;
=GM Abilities (outdated)=&lt;br /&gt;
There are several levels of GM ability, depending on the person&#039;s role on the development team.&lt;br /&gt;
Note that the primary purpose of this server is to allow developers and testers to test new and unfinished content. To keep it open to the public, we&#039;ve restricted access to certain GM commands which have been abused to interfere with testing.&lt;br /&gt;
&lt;br /&gt;
;Everyone: To get access to this commands type &amp;quot;@gm gm&amp;quot; in normal chat.&lt;br /&gt;
*@warp to map locations&lt;br /&gt;
*@item to make items for your character&lt;br /&gt;
*@zeny to make money for your character&lt;br /&gt;
*@heal, @alive, @die&lt;br /&gt;
*@hide to avoid being attacked by monsters&lt;br /&gt;
*@who who is online?&lt;br /&gt;
*@whogm same but with GM status&lt;br /&gt;
Use the Debug NPCs in each town to set levels and skills&lt;br /&gt;
&lt;br /&gt;
;Official Testers&lt;br /&gt;
*all the above plus&lt;br /&gt;
*@goto another player&lt;br /&gt;
*@spawn monsters to fight&lt;br /&gt;
*@broadcast announcements to others on the server&lt;br /&gt;
*@pvpon/pvpoff on maps&lt;br /&gt;
*@killmonster/killmonster2&lt;br /&gt;
*@blvl and @jlvl to change level&lt;br /&gt;
&lt;br /&gt;
;Official Content Developers&lt;br /&gt;
*access to almost all GM commands&lt;br /&gt;
&lt;br /&gt;
=Location=&lt;br /&gt;
Our server is located at &amp;lt;span style=&amp;quot;color:Teal&amp;quot;&amp;gt;testing.themanaworld.org,  port 6902&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
* [[Reporting Bugs]]&lt;br /&gt;
* [[How to Develop]]&lt;br /&gt;
* [[Projects and Teams]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TMW_Brand&amp;diff=59559</id>
		<title>Dev:TMW Brand</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:TMW_Brand&amp;diff=59559"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TMW Brand to Development:TMW Brand: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:TMW Brand]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TMW_Brand&amp;diff=59558</id>
		<title>Development:TMW Brand</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:TMW_Brand&amp;diff=59558"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:TMW Brand to Development:TMW Brand: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TMW Brand==&lt;br /&gt;
&lt;br /&gt;
* Maintain theme across all web sites (including social)&lt;br /&gt;
* Maintain an recent video on [https://www.youtube.com/user/TheManaWorldOfficial Youtube]&lt;br /&gt;
* Maintain 5-6 recent [[screenshots]]&lt;br /&gt;
* Connect Forum posts to social to recent activity&lt;br /&gt;
* Promote Player &amp;amp; GM events in-game and via social&lt;br /&gt;
* Maintain a Broadcast message in-game pointing to recent/hot topics.&lt;br /&gt;
&lt;br /&gt;
==Current Active Brand Sites==&lt;br /&gt;
&lt;br /&gt;
See &#039;&#039;Template:Branding&#039;&#039; below:&lt;br /&gt;
&lt;br /&gt;
{{Template:Branding}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Stunning_and_knockback&amp;diff=59557</id>
		<title>Dev:Stunning and knockback</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Stunning_and_knockback&amp;diff=59557"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Stunning and knockback to Development:Stunning and knockback: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Stunning and knockback]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Stunning_and_knockback&amp;diff=59556</id>
		<title>Development:Stunning and knockback</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Stunning_and_knockback&amp;diff=59556"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Stunning and knockback to Development:Stunning and knockback: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category_gameconcept}}&lt;br /&gt;
{{Status_red}}&lt;br /&gt;
Intense testing of the new game mechanics by the HMC dev group has lead them to the hypothesis that stunning a being for a short period of time (and thus making it unable to move or act in any way) when hit would enrich the gameplay.&lt;br /&gt;
&lt;br /&gt;
The problem with this is that network latency would frequently lead to the situation that a being is on different positions on the server and the clients when stunned. This could lead to implausible events. Attempting to correct this by sending the position together with the stun messages would ineviteably lead to a sudden &amp;quot;jump&amp;quot; of the being.&lt;br /&gt;
&lt;br /&gt;
For that reason I would suggest to combine stunning with a knockback effect. This means that the being is hit away several pixels from the attacker after getting hit. This has the advantage that it justifies and conceals a slight dislocation of the being and that it makes combat feel even more action-laden.&lt;br /&gt;
&lt;br /&gt;
==knockback effect mechanics==&lt;br /&gt;
Knockback distance should be influenced by:&lt;br /&gt;
* Used weapon (blunt weapons should have a larger knockback in relation to their damage than sharp ones)&lt;br /&gt;
* Attackers strength&lt;br /&gt;
* Victims strength&lt;br /&gt;
* Additional factor by special attacks (a property of some special attacks could be a better or worse knockback)&lt;br /&gt;
&lt;br /&gt;
Proposed formula:&lt;br /&gt;
 knockback_distance ~ (1 / weapon_penetration) * (attacker_strength / victim_strength) * attack_factor&lt;br /&gt;
&lt;br /&gt;
==stun effect mechanics==&lt;br /&gt;
The stun time should be inflienced by:&lt;br /&gt;
* Used weapon (blunt weapons should stun longer than sharp ones)&lt;br /&gt;
* Severity of the hit (in percent of total HP)&lt;br /&gt;
* Target vitality (already covered by the last point considering that HP is derived from vitality)&lt;br /&gt;
* Additional factor by special attacks (a property of some special attacks could be a better or worse stunning)&lt;br /&gt;
&lt;br /&gt;
Proposed formula:&lt;br /&gt;
 stun_time ~ (1 / weapon_penetration) * (damage / max_hp) * attack_factor&lt;br /&gt;
&lt;br /&gt;
==Game balance considerations==&lt;br /&gt;
===stunlocking===&lt;br /&gt;
When it would be possible to use the stun effect to immobilize a being permanently it would be quite a game-breaker. To make this impossible the stun time should not be cumulative. This means that the stun time of a being which is already stunned can not be increased by hitting it again while already being stunned. This would mean that the only way to permanently stun a being would be to always hit it exactly in the moment it recovers from the last blow. This would require considerable timing skill and thus would rather enrich the gameplay instead of breaking it.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;holding off&amp;quot; with knockback===&lt;br /&gt;
When the attacker got a long range and a fast attack speed and the defender got a short range and a slow move speed the attacker could be able to keep the enemy outside of its attack range by permanent attacking.&lt;br /&gt;
&lt;br /&gt;
This method would not be failsave because it is impossible to have a [[hitting and dodging|100% hit probability]] (unless the enemy got 0 evade) but could still make combat against some enemies very easy. My suggestion to minimize this effect would be to avoid giving long-range weapons a high attack speed. A fast attack speed would be implausible for most long range weapons, anyway. Projectile weapons need to be reloaded and long range melee weapons have to be very bulky.&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Special_NPCs&amp;diff=59555</id>
		<title>Dev:Special NPCs</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Special_NPCs&amp;diff=59555"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Special NPCs to Development:Special NPCs: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Special NPCs]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Special_NPCs&amp;diff=59554</id>
		<title>Development:Special NPCs</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Special_NPCs&amp;diff=59554"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Special NPCs to Development:Special NPCs: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Server reserved npcs =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| Used &#039;&#039;&#039;only&#039;&#039;&#039; for map-less (floating) npcs&lt;br /&gt;
|-&lt;br /&gt;
| 45&lt;br /&gt;
| Displays a warp tile (depending on the client settings). &#039;&#039;&#039;Does not display warp particles&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 139&lt;br /&gt;
| Used by Hercules for hidden warps&lt;br /&gt;
|-&lt;br /&gt;
| 722&lt;br /&gt;
| Displays a debug warp tile (used by battleconfig.warp_point_debug). &#039;&#039;&#039;Does not display warp particles&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 127&lt;br /&gt;
| Displays a transparent non target-able npc. Used by tmwa for area effects (magic) and specialeffect&lt;br /&gt;
|-&lt;br /&gt;
| 32767&lt;br /&gt;
| NPCs with this ID exist only server-side and are not sent to the client. Usually you should prefer this over 127. However if your npc need to display particle (specialeffect) you should use 127&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Custom special npcs =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 400&lt;br /&gt;
| Displays a transparent target-able npc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &#039;&#039;&#039;TODO:&#039;&#039;&#039; add a transparent target-able npc with pickup cursor&lt;br /&gt;
&amp;lt;br&amp;gt; &#039;&#039;&#039;TODO:&#039;&#039;&#039; add a transparent target-able npc with fight cursor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Skills.xml&amp;diff=59553</id>
		<title>Dev:Skills.xml</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Skills.xml&amp;diff=59553"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Skills.xml to Development:Skills.xml: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Skills.xml]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Skills.xml&amp;diff=59552</id>
		<title>Development:Skills.xml</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Skills.xml&amp;diff=59552"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Skills.xml to Development:Skills.xml: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This file describes the skills recognized by the eAthena client.&lt;br /&gt;
&lt;br /&gt;
==Structure==&lt;br /&gt;
Skill DBs are in XML format.&lt;br /&gt;
&lt;br /&gt;
===&amp;amp;lt;skills&amp;amp;gt;===&lt;br /&gt;
This is the root element of the file.&lt;br /&gt;
&lt;br /&gt;
===&amp;amp;lt;skill&amp;amp;gt;===&lt;br /&gt;
An individual skill definition. &amp;lt;code&amp;gt;skill&amp;lt;/code&amp;gt;s have &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;s, &amp;lt;code&amp;gt;names&amp;lt;/code&amp;gt;s, and &amp;lt;code&amp;gt;fixed&amp;lt;/code&amp;gt; values. The &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; corresponds to the skill ID on the server. The &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is the name to give the skill in the GUI. The optional &amp;lt;code&amp;gt;fixed&amp;lt;/code&amp;gt; value says if the skill is fixed (not changeable through the GUI) or not. A value of 0 (the default) means it can be changed through the GUI and a value of 1 means it can&#039;t.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;amp;lt;skills&amp;amp;gt;&lt;br /&gt;
     &amp;amp;lt;skill id=&amp;quot;1&amp;quot; name=&amp;quot;Basic&amp;quot;/&amp;amp;gt;&lt;br /&gt;
     &amp;amp;lt;skill id=&amp;quot;340&amp;quot; name=&amp;quot;Magic&amp;quot; fixed=&amp;quot;1&amp;quot;/&amp;amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
 &amp;amp;lt;/skills&amp;amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Content XML}}&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Scripting_Reference&amp;diff=59551</id>
		<title>Dev:Scripting Reference</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Scripting_Reference&amp;diff=59551"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Scripting Reference to Development:Scripting Reference: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Scripting Reference]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Scripting_Reference&amp;diff=59550</id>
		<title>Development:Scripting Reference</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Scripting_Reference&amp;diff=59550"/>
		<updated>2024-03-27T03:56:48Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Scripting Reference to Development:Scripting Reference: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Classic:TmwAthena Scripting Reference]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:SFX&amp;diff=59549</id>
		<title>Dev:SFX</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:SFX&amp;diff=59549"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:SFX to Development:SFX: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:SFX]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:SFX&amp;diff=59548</id>
		<title>Development:SFX</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:SFX&amp;diff=59548"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:SFX to Development:SFX: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category_audio}}&lt;br /&gt;
{{Category:Outdated}}&lt;br /&gt;
&lt;br /&gt;
== Monster sounds ==&lt;br /&gt;
&lt;br /&gt;
Number of existing sound effects wired in for the monsters. (Note that the categories have no in-game correspondency.)&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; rowspan=&amp;quot;2&amp;quot; colspan=&amp;quot;2&amp;quot; | Category&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; rowspan=&amp;quot;2&amp;quot; | Monster&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; rowspan=&amp;quot;2&amp;quot; | ID&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; colspan=&amp;quot;5&amp;quot; | Sound effects&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; | hit&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; | miss&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; | hurt&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; | die&lt;br /&gt;
! style=&amp;quot;background: #efdead&amp;quot; | misc&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Arachnids&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Scorpions&lt;br /&gt;
| Black Scorpion&lt;br /&gt;
| 7&lt;br /&gt;
| {{good|4}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Red Scorpion&lt;br /&gt;
| 2&lt;br /&gt;
| {{good|4}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Scorpion&lt;br /&gt;
| 1&lt;br /&gt;
| {{good|4}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Spiders&lt;br /&gt;
| [[Spider]]&lt;br /&gt;
| 10&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Birds&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Waterfowls&lt;br /&gt;
| Duck&lt;br /&gt;
| 46&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Fungi&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Mushrooms&lt;br /&gt;
| Evil Mushroom&lt;br /&gt;
| 11&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Spiky Mushroom&lt;br /&gt;
| 17&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Gastropods&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Snails&lt;br /&gt;
| Snail&lt;br /&gt;
| 39&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Insects&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Maggots&lt;br /&gt;
| Maggot&lt;br /&gt;
| 0&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Giant Maggot&lt;br /&gt;
| 4&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Silkworm&lt;br /&gt;
| 33&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | Mammals&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | [[Bat|Bats]]&lt;br /&gt;
| Bat&lt;br /&gt;
| 15&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Fluffies&lt;br /&gt;
| Easter Fluffy&lt;br /&gt;
| 25&lt;br /&gt;
| {{good|3}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Fluffy&lt;br /&gt;
| 18&lt;br /&gt;
| {{good|3}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Mouboos&lt;br /&gt;
| Mouboo&lt;br /&gt;
| 26&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;1&amp;quot; | Squirrels&lt;br /&gt;
| Squirrel&lt;br /&gt;
| 36&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;7&amp;quot; | Plants&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Flowers&lt;br /&gt;
| Flower&lt;br /&gt;
| 12&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | Herbs&lt;br /&gt;
| Alizarin Plant&lt;br /&gt;
| 30&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Clover Patch&lt;br /&gt;
| 35&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Cobalt Plant&lt;br /&gt;
| 28&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Gamboge Plant&lt;br /&gt;
| 29&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Mauve Plant&lt;br /&gt;
| 27&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Trees&lt;br /&gt;
| Log Head&lt;br /&gt;
| 23&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|5}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | Reptiles&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Lizards&lt;br /&gt;
| Fire Lizard&lt;br /&gt;
| 37&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | Snakes&lt;br /&gt;
| Cave Snake&lt;br /&gt;
| 19&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Grass Snake&lt;br /&gt;
| 32&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Mountain Snake&lt;br /&gt;
| 24&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Snake&lt;br /&gt;
| 8&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Snake Lord&lt;br /&gt;
| 44&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;7&amp;quot; | Undead&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Ghosts&lt;br /&gt;
| Jack O&lt;br /&gt;
| 20&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Skeletons&lt;br /&gt;
| Fallen&lt;br /&gt;
| 43&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Lady Skeleton]]&lt;br /&gt;
| 42&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Skeleton&lt;br /&gt;
| 41&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Skulls&lt;br /&gt;
| Fire Skull&lt;br /&gt;
| 21&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Poison Skull&lt;br /&gt;
| 22&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Zombies&lt;br /&gt;
| Zombie&lt;br /&gt;
| 34&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;11&amp;quot; | ?&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Goblins&lt;br /&gt;
| Fire Goblin&lt;br /&gt;
| 9&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | Pinkies&lt;br /&gt;
| Pinkie&lt;br /&gt;
| 16&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | Slimes&lt;br /&gt;
| Green Slime&lt;br /&gt;
| 3&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Red Slime&lt;br /&gt;
| 6&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Rudolph Slime&lt;br /&gt;
| 14&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Santa Slime&lt;br /&gt;
| 13&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Sea Slime&lt;br /&gt;
| 31&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Yellow Slime]]&lt;br /&gt;
| 5&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Wisps&lt;br /&gt;
| Poltergeist&lt;br /&gt;
| 45&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Spectre&lt;br /&gt;
| 40&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Wisp&lt;br /&gt;
| 38&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weapon sounds ==&lt;br /&gt;
&lt;br /&gt;
Number of existing sound effects wired in for the weapons.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!rowspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#efdead;&amp;quot;| Category&lt;br /&gt;
!rowspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#efdead;&amp;quot;| Weapon&lt;br /&gt;
!rowspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#efdead;&amp;quot;| ID&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; style=&amp;quot;background:#efdead;&amp;quot;| Sound effects&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background:#efdead;&amp;quot;| hit&lt;br /&gt;
!style=&amp;quot;background:#efdead;&amp;quot;| strike&lt;br /&gt;
!style=&amp;quot;background:#efdead;&amp;quot;| swing&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| (Punch)&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot;| Axes&lt;br /&gt;
| Axe&lt;br /&gt;
| 549&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Blacksmith&#039;s Axe&lt;br /&gt;
| 550&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Meat Cleaver&lt;br /&gt;
| 605&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Hatchet&lt;br /&gt;
| 606&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot;| Bows&lt;br /&gt;
| Bow&lt;br /&gt;
| 1200&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
|-&lt;br /&gt;
| Desert Bow&lt;br /&gt;
| 575&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Forest Bow&lt;br /&gt;
| 545&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Short Bow&lt;br /&gt;
| 530&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;7&amp;quot;| Knives&lt;br /&gt;
| Bone Knife&lt;br /&gt;
| 570&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Dagger&lt;br /&gt;
| 521&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Knife&lt;br /&gt;
| 1201&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Rock Knife&lt;br /&gt;
| 579&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Setzer&lt;br /&gt;
| 571&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Sharp Knife&lt;br /&gt;
| 522&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Stiletto&lt;br /&gt;
| 592&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;1&amp;quot;| Maces&lt;br /&gt;
| Club&lt;br /&gt;
| 609&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;11&amp;quot;| Polearms&lt;br /&gt;
| Bardiche&lt;br /&gt;
| 547&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Dual Spear&lt;br /&gt;
| 598&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Halberd&lt;br /&gt;
| 548&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Heavy Pike&lt;br /&gt;
| 597&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Heavy Spear&lt;br /&gt;
| 595&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Pike&lt;br /&gt;
| 596&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Scorpion&lt;br /&gt;
| 574&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Scythe&lt;br /&gt;
| 623&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Spear&lt;br /&gt;
| 594&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Trident&lt;br /&gt;
| 607&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Wooden Staff&lt;br /&gt;
| 758&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot;| Staves&lt;br /&gt;
| Crescent Rod&lt;br /&gt;
| 581&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Staff of Fire&lt;br /&gt;
| 582&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Staff of Ice&lt;br /&gt;
| 583&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Staff of Life&lt;br /&gt;
| 580&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;15&amp;quot;| Swords&lt;br /&gt;
| Baselard&lt;br /&gt;
| 590&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Bastard Sword&lt;br /&gt;
| 588&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Beheader&lt;br /&gt;
| 576&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Broad Sword&lt;br /&gt;
| 589&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Falchion&lt;br /&gt;
| 573&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Fire Sword&lt;br /&gt;
| 599&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Jackal&lt;br /&gt;
| 584&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Long Sword&lt;br /&gt;
| 591&lt;br /&gt;
| {{good|2}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Rapier&lt;br /&gt;
| 593&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Sabre&lt;br /&gt;
| 561&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Sand Cutter&lt;br /&gt;
| 578&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Scimitar&lt;br /&gt;
| 572&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Short Sword&lt;br /&gt;
| 536&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Sword&lt;br /&gt;
| 587&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
| Toy Sabre&lt;br /&gt;
| 1215&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{good|1}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;1&amp;quot;| Thrown&lt;br /&gt;
| Bone Darts&lt;br /&gt;
| 577&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
| {{bad|0}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other sounds ==&lt;br /&gt;
&lt;br /&gt;
=== Done ===&lt;br /&gt;
&lt;br /&gt;
Weapons:&lt;br /&gt;
* Bow shooting arrow (miss/hit)&lt;br /&gt;
&lt;br /&gt;
Location based:&lt;br /&gt;
* [http://wiki.themanaworld.org/index.php/Image:Boil.ogg| Boiling water] (not in Git)&lt;br /&gt;
* Burning fire&lt;br /&gt;
* River&lt;br /&gt;
* Waterfall&lt;br /&gt;
&lt;br /&gt;
Miscellaneous:&lt;br /&gt;
* Level-up (probably better for a composer to create)&lt;br /&gt;
&lt;br /&gt;
=== Needed ===&lt;br /&gt;
&lt;br /&gt;
Miscellaneous:&lt;br /&gt;
* Player taking damage (several ones to avoid repetition)&lt;br /&gt;
* Button click&lt;br /&gt;
* Death&lt;br /&gt;
* Picking up item&lt;br /&gt;
* Dropping item&lt;br /&gt;
&lt;br /&gt;
Walking:&lt;br /&gt;
* Plants&lt;br /&gt;
* Sand&lt;br /&gt;
* Stone outdoors&lt;br /&gt;
* Stone indoors&lt;br /&gt;
* Wood&lt;br /&gt;
* Dirt&lt;br /&gt;
* Carpet&lt;br /&gt;
* Metal&lt;br /&gt;
* Ankle deep water&lt;br /&gt;
&lt;br /&gt;
== Specification of file format ==&lt;br /&gt;
&lt;br /&gt;
Naming convention:&lt;br /&gt;
* name-action#.ogg (for example &amp;lt;code&amp;gt;short-sword-miss2.ogg&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In-game format:&lt;br /&gt;
* Ogg Vorbis (&amp;lt;code&amp;gt;.ogg&amp;lt;/code&amp;gt;)&lt;br /&gt;
* 128 kbps stereo&lt;br /&gt;
&lt;br /&gt;
Format for archival:&lt;br /&gt;
* PCM (&amp;lt;code&amp;gt;.wav&amp;lt;/code&amp;gt;)&lt;br /&gt;
* 44.1 K 16 bit stereo&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
Client data:&lt;br /&gt;
* [http://gitorious.org/tmwdata/mainline/trees/master/sfx sfx/] â€” the directory containing the sound effects&lt;br /&gt;
* [http://gitorious.org/tmwdata/mainline/blobs/raw/master/monsters.xml monsters.xml] â€” where sound effects are wired in for monsters&lt;br /&gt;
* [http://gitorious.org/tmwdata/mainline/blobs/raw/master/items.xml items.xml] â€” where sound effects are wired in for items&lt;br /&gt;
&lt;br /&gt;
Client source:&lt;br /&gt;
* [http://gitorious.org/tmw/mainline/blobs/raw/master/src/localplayer.cpp src/localplayer.cpp] â€” where the punching sound effect is hardcoded in&lt;br /&gt;
* [http://gitorious.org/tmw/mainline/blobs/raw/master/src/resources/monsterdb.cpp src/resources/monsterdb.cpp] â€” the types of sound effects used for monsters&lt;br /&gt;
* [http://gitorious.org/tmw/mainline/blobs/raw/master/src/resources/itemdb.cpp src/resources/itemdb.cpp] â€” the types of sound effects used for items&lt;br /&gt;
&lt;br /&gt;
Sound Technology:&lt;br /&gt;
*[http://forums.themanaworld.org/viewtopic.php?f=2&amp;amp;t=9992 3D Soundscape system discussion].&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Quests.xml&amp;diff=59547</id>
		<title>Dev:Quests.xml</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Quests.xml&amp;diff=59547"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Quests.xml to Development:Quests.xml: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Quests.xml]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Quests.xml&amp;diff=59546</id>
		<title>Development:Quests.xml</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Quests.xml&amp;diff=59546"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Quests.xml to Development:Quests.xml: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Quest Log in Client Data ==&lt;br /&gt;
&lt;br /&gt;
quests.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;quests&amp;gt;&lt;br /&gt;
        &amp;lt;var id=&amp;quot;[0-9]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;effect map=&amp;quot;Map.tmx&amp;quot; npc=&amp;quot;NpcIdServerDataUses&amp;quot; value=&amp;quot;QuestValue(s)&amp;quot; effect=&amp;quot;EffectId&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;quest name=&amp;quot;Name&amp;quot; group=&amp;quot;GroupName&amp;quot; (in)complete=&amp;quot;QuestValue&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Name&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Quest Info&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;/var&amp;gt;&lt;br /&gt;
    &amp;lt;/quests&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;quests&amp;gt;&lt;br /&gt;
      &amp;lt;var id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;effect map=&amp;quot;029-2.tmx&amp;quot; npc=&amp;quot;154&amp;quot; value=&amp;quot;0&amp;quot; effect=&amp;quot;45&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;effect map=&amp;quot;029-2.tmx&amp;quot; npc=&amp;quot;154&amp;quot; value=&amp;quot;1,2,3&amp;quot; effect=&amp;quot;46&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;effect map=&amp;quot;029-2.tmx&amp;quot; npc=&amp;quot;114&amp;quot; value=&amp;quot;4,5,6,7&amp;quot; effect=&amp;quot;46&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Tutorial&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Welcome&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Walk to the carpet&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text/&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Quest giver: Sorfina.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Coordinates: Candor Island Indoor (27,27)&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Tutorial&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Welcome&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Retrieve items from the Chest&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text/&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Quest giver: Sorfina.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Coordinates: Candor Island Indoor (27,27)&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Tutorial&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Welcome&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Open inventory and equip clothes (###keyWindowEquipment;)&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text/&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Quest giver: Sorfina.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Coordinates: Candor Island Indoor (27,27)&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Tutorial&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Welcome&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Find Tanisha&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text/&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Quest giver: Sorfina.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Coordinates: Candor Island Indoor (27,27)&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Tutorial&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Welcome&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Help Tanisha kill maggots&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text/&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Quest giver: Tanisha.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Coordinates: Candor Island Indoor (100,88)&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Tutorial&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Welcome&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Help Tanisha kill maggots&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text/&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Quest giver: Tanisha.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Coordinates: Candor Island Indoor (100,88)&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Tutorial&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Welcome&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Get reward from Tanisha&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text/&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Quest giver: Tanisha.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Coordinates: Candor Island Indoor (100,88)&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Tutorial&amp;quot; group=&amp;quot;Candor Island&amp;quot; complete=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Welcome&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Complete.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text/&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Quest giver: Tanisha.&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Coordinates: Candor Island Indoor (100,88)&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Bully&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Hasan&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Some guy named Hasan is picking on people&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Bully&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;10&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Trick&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Hasan needs to be taught a lesson&amp;lt;/text&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Talk to sorfina.&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Bully&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Trick known&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Hasan is afraid of scorpions&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Bully&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Scorpion&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Goto Hasan and have Kaan summon a scorpion&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Bully&amp;quot; group=&amp;quot;Candor Island&amp;quot; incomplete=&amp;quot;13&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Saved Hasan&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Killed the scorpion&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
        &amp;lt;quest name=&amp;quot;Bully&amp;quot; group=&amp;quot;Candor Island&amp;quot; complete=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;Talk to Hasan&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;text&amp;gt;Hasan changed his ways&amp;lt;/text&amp;gt;&lt;br /&gt;
        &amp;lt;/quest&amp;gt;&lt;br /&gt;
      &amp;lt;/var&amp;gt;&lt;br /&gt;
    &amp;lt;/quests&amp;gt;&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Quest_log.txt&amp;diff=59545</id>
		<title>Dev:Quest log.txt</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Quest_log.txt&amp;diff=59545"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Quest log.txt to Development:Quest log.txt: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Quest log.txt]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Quest_log.txt&amp;diff=59544</id>
		<title>Development:Quest log.txt</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Quest_log.txt&amp;diff=59544"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Quest log.txt to Development:Quest log.txt: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Archive:Quest log.txt]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Quest_ideas&amp;diff=59543</id>
		<title>Dev:Quest ideas</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Quest_ideas&amp;diff=59543"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Quest ideas to Development:Quest ideas: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Quest ideas]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Quest_ideas&amp;diff=59542</id>
		<title>Development:Quest ideas</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Quest_ideas&amp;diff=59542"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Quest ideas to Development:Quest ideas: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Quest ideas=&lt;br /&gt;
&lt;br /&gt;
The Quests as of now in the Mana world do have very similar structures: You got to collect stuff and bring a certain amount of things to the npc. Some nice story around, and that is how most of the quests are build up.&lt;br /&gt;
&lt;br /&gt;
That is what got to be changed: &lt;br /&gt;
Quests like the monster oil or orum&amp;amp;waric or Rauk are challenging and more exciting to players.&lt;br /&gt;
These minigames do have more worth to enjoy the players.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here come some ideas:&lt;br /&gt;
&lt;br /&gt;
==The confused professor==&lt;br /&gt;
 probable story:&lt;br /&gt;
            a confused professor will do experiments. But he always looses his notices and results written down. &lt;br /&gt;
            So the player needs to help him, by making up a diary for the professor.&lt;br /&gt;
            Maybe the professor even tells you how long the experiment goes and the player needs to tell the professor that&lt;br /&gt;
            the experiment is finished that specific day.&lt;br /&gt;
            &lt;br /&gt;
 reward: to be determined&lt;br /&gt;
            &lt;br /&gt;
 technical idea:&lt;br /&gt;
            the player has to remember some numbers.&lt;br /&gt;
            Every day you are told another number.&lt;br /&gt;
            At the end (between 10-20 days, chosen by random) you have to tell the npc the sum of all numbers told.&lt;br /&gt;
            players need to be careful, since the npc wont remember if you have visited him already at that day.&lt;br /&gt;
        &lt;br /&gt;
 redoable: yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Seeking a group of NPC&#039;s==    &lt;br /&gt;
 story:&lt;br /&gt;
        1) Children playing hiding in tulimshar&lt;br /&gt;
            A group of children in Tulimshar wants to play with you. They ask you to find all of them.&lt;br /&gt;
        &lt;br /&gt;
        2) A group of geologist doing some research in the Hurnscald mines&lt;br /&gt;
            Because of their work, they can&#039;t leave their place, but need something to eat and ask you to bring them something.&lt;br /&gt;
            (might be random, which food they want?)&lt;br /&gt;
        &lt;br /&gt;
 reward: to be determined, if you serve all the npc at one day you get an extra reward&lt;br /&gt;
        &lt;br /&gt;
 technical idea:&lt;br /&gt;
            might be done as a daily quest, each NPC gives you a very small &lt;br /&gt;
            reward for visiting it, but if you find all of them &lt;br /&gt;
            within a day, you get a bigger reward.&lt;br /&gt;
            (is it possible to choose from a random pool of positions every time the server is restarted? &lt;br /&gt;
            or something similar to change positions sometimes?)&lt;br /&gt;
            &lt;br /&gt;
            if you have found an npc this could be saved via bitmasking, there also have to be a saving &lt;br /&gt;
            of the date, which has to be reset after 24 hours&lt;br /&gt;
            &lt;br /&gt;
 redoable: yes&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Projects_and_Teams&amp;diff=59541</id>
		<title>Dev:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Projects_and_Teams&amp;diff=59541"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Projects and Teams to Development:Projects and Teams: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Projects and Teams]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=59540</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=59540"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Projects and Teams to Development:Projects and Teams: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[TMW Team]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Playersets&amp;diff=59539</id>
		<title>Dev:Playersets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Playersets&amp;diff=59539"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Playersets to Development:Playersets: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Playersets]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Playersets&amp;diff=59538</id>
		<title>Development:Playersets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Playersets&amp;diff=59538"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Playersets to Development:Playersets: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category_art}}&lt;br /&gt;
{{Category:Outdated}}&lt;br /&gt;
&lt;br /&gt;
== Current Playerset Sprite Sheets ==&lt;br /&gt;
[https://github.com/themanaworld/tmwa-client-data/tree/master/graphics/sprites/model/male.png|Current Male Player Sprite]&lt;br /&gt;
[https://github.com/themanaworld/tmwa-client-data/tree/master/graphics/sprites/model/female.png|Current Female Player Sprite]&lt;br /&gt;
&lt;br /&gt;
== Sprite Sheet Specification ==&lt;br /&gt;
* &#039;&#039;&#039;Frame size:&#039;&#039;&#039; 64x64&lt;br /&gt;
* &#039;&#039;&#039;Color depth:&#039;&#039;&#039; 32 bpp (including alpha layer)&lt;br /&gt;
* &#039;&#039;&#039;Directions:&#039;&#039;&#039; 4 (north, south, east, west)&lt;br /&gt;
* &#039;&#039;&#039;Dye Channels:&#039;&#039;&#039; 3 (W;R;B;)&lt;br /&gt;
&lt;br /&gt;
== Total List of Playerset Actions ==&lt;br /&gt;
* walk&lt;br /&gt;
* sit&lt;br /&gt;
* dead&lt;br /&gt;
* attack&lt;br /&gt;
* attack_sword_stab&lt;br /&gt;
* attack_bow&lt;br /&gt;
* attack_spear&lt;br /&gt;
* attack_chop&lt;br /&gt;
* attack_2hand&lt;br /&gt;
* cast&lt;br /&gt;
&lt;br /&gt;
== Mechanics and Layering ==&lt;br /&gt;
The Player Sprite is a 3 Channel Dye which is why it looks so weird. The Channels are WRB (Greyscale, Red &amp;amp; Blue). This is to facilitate our the sprite [[Dev:Image_dyeing|Dye system]]. The Male and Female sprites share frame numbering and just about the same xmls for a wide variety of gear. The player sprite is also the Npc base for the humuniod Npcs. Between the Dye channels, clothing and layering equipment it makes something like millions of unique Npc combinations. &lt;br /&gt;
&lt;br /&gt;
== Improvements ==&lt;br /&gt;
* Death frames need a good animation&lt;br /&gt;
* Extra Dye Channels added to &amp;quot;texture&amp;quot; the base player&lt;br /&gt;
* Facial Expressions&lt;br /&gt;
* Body Modifications (Horns, Spikes, Wings, etc.)&lt;br /&gt;
* Large and small size of player sprite.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Particle_engine&amp;diff=59537</id>
		<title>Dev:Particle engine</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Particle_engine&amp;diff=59537"/>
		<updated>2024-03-27T03:56:47Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Particle engine to Development:Particle engine: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Particle engine]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Particle_engine&amp;diff=59536</id>
		<title>Development:Particle engine</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Particle_engine&amp;diff=59536"/>
		<updated>2024-03-27T03:56:46Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Particle engine to Development:Particle engine: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category_programming}}&lt;br /&gt;
{{Category_art}}&lt;br /&gt;
{{status_green}}&lt;br /&gt;
&lt;br /&gt;
==What is the particle engine?==&lt;br /&gt;
&lt;br /&gt;
The particle engine is a system that allows to create beautiful dynamic special effects based on creating and managing a large number of small, independent, moving sprites. For more information about particle engines see [http://en.wikipedia.org/wiki/Particle_system the Wikipedia article about particle systems].&lt;br /&gt;
&lt;br /&gt;
The particle engine allows us to create a large variety of beautiful special effects with minimal effort that could outclass those of most other sprite based rpgs. The areas where particle effects could be used include but are not limited to:&lt;br /&gt;
* Environmental effects like waterfalls, fires, fountains or smoke comming out of chimneys&lt;br /&gt;
* Visualisation of mystical phenomenons like teleporters or other points of interest&lt;br /&gt;
* Graphic effects for spells&lt;br /&gt;
* Visualisation of status effects&lt;br /&gt;
&lt;br /&gt;
== The effect definition file ==&lt;br /&gt;
Particle effects are described in xml documents. They describe one or more single particles or particle emitters.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;effect&amp;gt; ===&lt;br /&gt;
Is the root element of the XML document.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;particle&amp;gt; ===&lt;br /&gt;
Every effect is based on at least one particle. Often but not always these root particles function only as emitters that spawn new particles and have no appearance of their own. They have the following three required properties:&lt;br /&gt;
;position-x: (initial) position on map relative to the position where the effect is created (pixel-based)&lt;br /&gt;
;position-y: (initial) position on map relative to the position where the effect is created (pixel-based)&lt;br /&gt;
;position-z: (initial) position on map relative to the position where the effect is created (pixel-based)&lt;br /&gt;
The following properties are optional:&lt;br /&gt;
;lifetime: Lifetime in game-ticks. (default: unlimited)&lt;br /&gt;
In addition they can have any number of emitters and a visual representation in form of an &amp;lt;animation&amp;gt; or an &amp;lt;image&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;image&amp;gt; ===&lt;br /&gt;
Root particles can have an &amp;lt;image&amp;gt; childtag that contains the path to an image in its content. In that case this image is used as the visual representation of the root particle.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;emitter&amp;gt; ===&lt;br /&gt;
Emitters are always child-elements of a particle or another emitter. They create new particles themself which can also include emitters and so on. They also include a number of &amp;lt;property&amp;gt; child elements that define the initial properties of the created particles. When one of the following propertiy elements is missing the default value is used. The property elements must have either &#039;&#039;name&#039;&#039; and &#039;&#039;value&#039;&#039; or &#039;&#039;name&#039;&#039;, &#039;&#039;min&#039;&#039; and &#039;&#039;max&#039;&#039;. In addition they can also have some change-&#039;&#039;X&#039;&#039; options which control their change over time.&lt;br /&gt;
&lt;br /&gt;
They can also have any number of &amp;lt;emitter&amp;gt; childtags (when these exist all child-particles will be equipped with these emitters) and an &amp;lt;animation&amp;gt; childtag that replaces the image with an animation.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;property&amp;gt; ====&lt;br /&gt;
:;name: The property controlled by this tag&lt;br /&gt;
:;value: (fixed property value ) Value assigned to the created particles&lt;br /&gt;
:;min, max: (randomized property value) Range of random values assigned to the created particles&lt;br /&gt;
:;change-function: shape of the change-over-time function. Possible values are: &amp;quot;sinus&amp;quot;, &amp;quot;saw&amp;quot;, &amp;quot;triangle&amp;quot; and &amp;quot;square&amp;quot;&lt;br /&gt;
:;change-period: Time in ticks until the function is repeated&lt;br /&gt;
:;change-amplitude: Maximum change applied to min and max&lt;br /&gt;
:;change-phase: Phase offset of the function in ticks&lt;br /&gt;
&lt;br /&gt;
====Property types====&lt;br /&gt;
&lt;br /&gt;
:;position-x: (initial) position on map relative to the parent particle (pixel-based) (default: 0)&lt;br /&gt;
:;position-y: (initial) position on map relative to the parent particle (pixel-based) (default: 0)&lt;br /&gt;
:;position-z: (initial) position on map relative to the parent particle (pixel-based) (default: 0)&lt;br /&gt;
:;image: path to the image that should be drawn at the position of the particles (default: no image)&lt;br /&gt;
:;horizontal-angle: clockwise angle of initial vector on horizontal plane in degree. 0Â° means straight right. (default: 0)&lt;br /&gt;
:;vertical-angle: angle between ground and initial vector in degree. 0Â° means parallel to the ground. Positive values are upwards, negative downwards. (default: 0 = parallel to ground)&lt;br /&gt;
:;power: Initial speed of the particles in pixels/ game-tick (default: 0)&lt;br /&gt;
:;gravity: Downward acceleration of particles in pixels/game-tickÂ² (default: 0)&lt;br /&gt;
:;randomness: Random changes in the X, Y and Z vector. The unit is maximum pixels/game-tick/1000. (only integers, default: 0)&lt;br /&gt;
:;lifetime: lifetime in game ticks (only integers, default: -1 = unlimited)&lt;br /&gt;
:;fade-out: Number of game ticks of lifetime left when the particle starts to disappear by fading into alpha. (only integers, default: 0 = disabled)&lt;br /&gt;
:;fade-in: Number of game ticks while the particles fade in to their full opacity. (only integers, default: 0 = spawned with full opacity)&lt;br /&gt;
:;alpha: Opacity of the created particles after fade-in and before fade-out. (default: 1 = full opacity)&lt;br /&gt;
:;output: Numbers of particles created per output (only integers, default: 1)&lt;br /&gt;
:;output-pause: Pause in ticks between two particle outputs (only integers, default: 0)&lt;br /&gt;
:;acceleration: acceleration of particles towards the target in pixels/game-tickÂ² (default: 0)&lt;br /&gt;
:;momentum: Momentum of the particles. Before adding the acceleration the old vectors are multiplied by this. A momentum of 1 creates a perfect newtonian object. A slightly lower momentum gives the impression that the particles are breaked. A higher momentum makes the particles accelerate forward. This looks rather weird but could be useful for some effects. A negative momentum looks really ugly. (default: 1)&lt;br /&gt;
:;die-distance: Only used together with acceleration. Distance in pixels to the target that causes the destruction of the particles when reached. (Default: 0 = not destroyed on contact)&lt;br /&gt;
:;bounce: When higher than 0 particles don&#039;t disappear when they touch the ground. Instead they bounce off with a vector equal to their old vector multiplied with this property. It is recommended to add a limited lifetime to bouncing particles because otherwise they are immortal. (Default: 0)&lt;br /&gt;
:;follow-parent: When this property is there the particles are moved when the parent particle is moved. This is especially useful for avoiding distortion of being-based particle effects when the being moves. This property has no value - its existence alone creates this behavior.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;animation&amp;gt; ===&lt;br /&gt;
The animation tag can be used as a childtag of the &amp;lt;particle&amp;gt; tag to make the root particle appear as an animated image or it can be used as a childtag for an emitter. In that case the emitter spawns animated particles instead of a static ones.&lt;br /&gt;
&lt;br /&gt;
The usage is similar like the animation tag described in [[Animations#.3Canimation.3E]]. You can use the same child elements with the same syntax. The only difference are the properties of the animation tag itself. There is no direction property. Instead the used imageset is described in the animation tag with the properties &#039;&#039;imageset&#039;&#039;, &#039;&#039;width&#039;&#039; and &#039;&#039;height&#039;&#039;. All three properties are required.&lt;br /&gt;
&lt;br /&gt;
== Particle engine related config setting ==&lt;br /&gt;
===particleFastPhysics===&lt;br /&gt;
Replaces the cpu intense squareroot calculations for calculating the vectors of target-based particles by less intense but less accurate calculations. 0 uses the slow but accurate and reliable function from the C standard library. Setting it to 1 uses a squareroot approximation function that is much faster while being only slightly less accurate but doesn&#039;t work on some architectures. 2 is an even faster method that shouldn&#039;t have any portability problems but it is very inaccurate.&lt;br /&gt;
&#039;&#039;&#039;Default: 0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===particleMaxCount===&lt;br /&gt;
Maximum number of particles in the game world. When this limit is reached no new particles will be spawned by emitters until some particles disappeared. This limit is only respected by emitters and not when spawning new effects to make sure that they are spawned when the particle limit is maxed out. &lt;br /&gt;
&lt;br /&gt;
When the limit is maxed out the result is a quite unregular output of the particle emitters that looks quite ugly. So this situation should be avoided. The main reason this setting exists is to encourage the particle effect creators to keep the particle output of their emitters on a reasonable level and to keep the game playable in unusual particle-intense situations by accepting a glitchy appearance of the particle effects in this cases. &lt;br /&gt;
&lt;br /&gt;
Please note that a few very large particles can reduce the framerate more than a lot of very small particles.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default: 3000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===particleEmitterSkip===&lt;br /&gt;
The number of game ticks each emitter is inactive between two particle spawns. Setting this to a higher value keeps the numbers of particles down by reducing the output of the emitters.&lt;br /&gt;
&lt;br /&gt;
This is a more useful way for the user to reduce the particle count than reducing particleMaxCount because it doesn&#039;t change the look of particle effects that much.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default: 0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Putting particle effects on maps==&lt;br /&gt;
An important application of particle effects are map-based effects. For that reason particle effects can be placed on maps in form of map objects. The current version of our map editor Tiled does only support map objects partially. So the best way to place particle effects on maps is by editing the map files with a text editor.&lt;br /&gt;
&lt;br /&gt;
This is done by adding an &amp;lt;objectgroup&amp;gt; tag as a child tag of the &amp;lt;map&amp;gt; tag (when the map has&#039;t got an objectgroup tag yet). Then you add an &amp;lt;object&amp;gt; childtag for each particle effect you want to add to the map. The object tag has 4 properties:&lt;br /&gt;
;type: Must be &amp;quot;PARTICLE_EFFECT&amp;quot;&lt;br /&gt;
;name: The filename of the effect definition file of the effect.&lt;br /&gt;
;x: Distance from the left border of the map in pixels.&lt;br /&gt;
;y: Distance from the upper border of the map in pixels.&lt;br /&gt;
&lt;br /&gt;
As an example here the objectgroup block from the bat cave:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;objectgroup name=&amp;quot;Object Group 1&amp;quot; width=&amp;quot;0&amp;quot; height=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;object name=&amp;quot;graphics/particles/flame.particle.xml&amp;quot; type=&amp;quot;PARTICLE_EFFECT&amp;quot; x=&amp;quot;928&amp;quot; y=&amp;quot;960&amp;quot; width=&amp;quot;32&amp;quot; height=&amp;quot;32&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;properties/&amp;gt;&lt;br /&gt;
	&amp;lt;/object&amp;gt;&lt;br /&gt;
	&amp;lt;object name=&amp;quot;graphics/particles/flame.particle.xml&amp;quot; type=&amp;quot;PARTICLE_EFFECT&amp;quot; x=&amp;quot;992&amp;quot; y=&amp;quot;960&amp;quot; width=&amp;quot;32&amp;quot; height=&amp;quot;32&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;properties/&amp;gt;&lt;br /&gt;
	&amp;lt;/object&amp;gt;&lt;br /&gt;
&amp;lt;/objectgroup&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that this example includes a lot of unnecessary meta-information added by Tiled. The minimal version that can be parsed by the TMW client would be the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;objectgroup&amp;gt;&lt;br /&gt;
	&amp;lt;object name=&amp;quot;graphics/particles/flame.particle.xml&amp;quot; type=&amp;quot;PARTICLE_EFFECT&amp;quot; x=&amp;quot;928&amp;quot; y=&amp;quot;960&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;object name=&amp;quot;graphics/particles/flame.particle.xml&amp;quot; type=&amp;quot;PARTICLE_EFFECT&amp;quot; x=&amp;quot;992&amp;quot; y=&amp;quot;960&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/objectgroup&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Map-based particle effects are initialized when the player enters the map and are also calculated when the effect isn&#039;t on the screen of the player. For that reason you should not put too many effects with a lot of particles on one map. Otherwise you could hit the particleMaxCount limit.&lt;br /&gt;
&lt;br /&gt;
==Using the particle engine for programmers==&lt;br /&gt;
The basic element of the particle engine is a special particle named &amp;quot;particleEngine&amp;quot;. It maintains a tree of particle effects. Each particle has a position in three dimensional space (in this case the two dimensional game world is treated as a flat plane in a three dimensional space). Based on the type of particle it might or might not have:&lt;br /&gt;
* Movement based on physical properties&lt;br /&gt;
* A visual representation (a single image or an animation)&lt;br /&gt;
* A list of emitters that create additional particles.&lt;br /&gt;
&lt;br /&gt;
The Particles are derived class from the &amp;quot;Sprite&amp;quot; class so that they can be added to the maps sprite list to be drawn together with the other sprites by the &amp;quot;map&amp;quot; class. &lt;br /&gt;
&lt;br /&gt;
=== Creation of effects ===&lt;br /&gt;
Effects are created by calling particleEngine-&amp;gt;addEffect(). The arguments are a particle effect definition file, the map coordinates (pixel-based) and the map on which the effect should be created. This creates a host particle that can have any number of emitters. The host particle is returned so it can be manipulated further. It is possible to create multiple host particles in one particle effect file. In that case only the last particle is returned.&lt;br /&gt;
&lt;br /&gt;
=== Effects that follow beings ===&lt;br /&gt;
Beings can gain control of a particle. This happens by calling the controlParticle() member function of the Being class.&lt;br /&gt;
&lt;br /&gt;
The usual method to create a particle that follows a being is by calling particleEngine-&amp;gt;addEffect() and pass the returned particle to controlParticle().&lt;br /&gt;
&lt;br /&gt;
Note that when a Being takes control of a particle it disables the automatic deletion of the particle. The being is now responsible for requesting the deletion of the particle by calling Particle::kill(). When it does the particle will be deleted after its next update.&lt;br /&gt;
&lt;br /&gt;
=== Homing particles ===&lt;br /&gt;
A particle will be attracted by another particle when its acceleration is greater than 0. When a particle is created by an emitter the attracting particle is the host particle of the effect but it can be changed by calling Particle::setDestination(). I would always recommend to use a parent particle of the particle as a target because a segfault will occur when the target particle is deleted.&lt;br /&gt;
&lt;br /&gt;
==Possible Additions==&lt;br /&gt;
&lt;br /&gt;
Below is a list of proposed additions to the Particle System.&lt;br /&gt;
===Delayed effects===&lt;br /&gt;
In composite effects, it is often desirable to start a certain effect only after a certian amount of time has passed; for example, we might want to fade in a circle and only then suddenly flash a pentagram in its centre.  This could be accomplished by an `on-death&#039; emitter that is spawned when its parent particle dies.&lt;br /&gt;
===Random animation===&lt;br /&gt;
Random animation entry points/cel choices  Right now, animation cels are looped through sequentially.  For some effects, randomly picking one element each interval, or at least starting out at a random entry, may be preferable.&lt;br /&gt;
===Orbiting particle improvement ===&lt;br /&gt;
Orbitting particles need a reference point; right now this is fixed to be the `base&#039; particle.  We need an option to choose the parent, grandparent, ... instead.&lt;br /&gt;
&lt;br /&gt;
==In client particles testing==&lt;br /&gt;
In ManaPlus possible to attach particle to player.&lt;br /&gt;
For this can be used command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/testparticle path/to/particle.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For stop particle testing need run command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/testparticle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Client can automatically reload particle if it was changed.&lt;br /&gt;
&lt;br /&gt;
==Current problems and limitations==&lt;br /&gt;
[[Image:Particle-engine-problem.png|thumb|250px]]&lt;br /&gt;
&lt;br /&gt;
Crush, I see the particles surrounding the player got across the wall because those tiles aren&#039;t marked as above the player. This happens in every map, I think. The solution would be to put the problematic a level up. This is not a limitation on the engine actually, but something that has to be fixed before committing to trunk. Unless you had something better in mind.&lt;br /&gt;
&lt;br /&gt;
: This can&#039;t be fixed that easily. The particles have to be drawn on the object layer so that they can be sorted with the other objects. Also note that it is usually the desired behavior that objects on the over layer are drawn over particles on the sprite layer. As a workaround i would suggest to use more thorough mapping in the future. That means to fill &amp;quot;empty&amp;quot; areas with black tiles on layer 2 instead of black tiles on the ground layer and to map cliffs that are clearly on the upper layer on layer 2.--[[User:Crush|Crush]] 21:58, 9 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
I know. But it&#039;s still a problem. My intention was to bring it to light before the engine is merged to trunk and used extensively. --[[User:Pajarico|Pajarico]] 13:23, 10 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Other_Xmls&amp;diff=59535</id>
		<title>Dev:Other Xmls</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Dev:Other_Xmls&amp;diff=59535"/>
		<updated>2024-03-27T03:56:46Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Other Xmls to Development:Other Xmls: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development:Other Xmls]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Other_Xmls&amp;diff=59534</id>
		<title>Development:Other Xmls</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Other_Xmls&amp;diff=59534"/>
		<updated>2024-03-27T03:56:46Z</updated>

		<summary type="html">&lt;p&gt;Move page script: Move page script moved page Dev:Other Xmls to Development:Other Xmls: Rename Dev: to Development: so the miraheze import works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Paths.xml==&lt;br /&gt;
&lt;br /&gt;
This file controls the main settings and layout of the rest of the Manaplus files.&lt;br /&gt;
&lt;br /&gt;
The Mana Worlds: [https://github.com/themanaworld/tmwa-client-data/blob/master/paths.xml TMW Paths.xml]&lt;br /&gt;
&lt;br /&gt;
Manaplus Documentation: [http://manaplus.org/paths.xml Paths.xml]&lt;br /&gt;
&lt;br /&gt;
==Features.xml==&lt;br /&gt;
&lt;br /&gt;
This file allows you to pre-configure or turn certain settings on/off by default in the client.&lt;br /&gt;
&lt;br /&gt;
The Mana Worlds: [https://github.com/themanaworld/tmwa-client-data/blob/master/features.xml TMW Features.xml]&lt;br /&gt;
&lt;br /&gt;
==Effects.xml==&lt;br /&gt;
&lt;br /&gt;
This file assigns ids to particle effects. These can then be used on sprites, monsters and players.&lt;br /&gt;
&lt;br /&gt;
The Mana Worlds: [https://github.com/themanaworld/tmwa-client-data/blob/master/effects.xml TMW Effects.xml]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Move page script</name></author>
	</entry>
</feed>