<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://graalonline.net/index.php?action=history&amp;feed=atom&amp;title=Creation%2FDev%2FReleases%2FClient%2F2</id>
	<title>Creation/Dev/Releases/Client/2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://graalonline.net/index.php?action=history&amp;feed=atom&amp;title=Creation%2FDev%2FReleases%2FClient%2F2"/>
	<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/2&amp;action=history"/>
	<updated>2026-04-09T22:37:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/2&amp;diff=15245&amp;oldid=prev</id>
		<title>Cyan3 at 01:04, 18 February 2010</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/2&amp;diff=15245&amp;oldid=prev"/>
		<updated>2010-02-18T01:04:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:04, 17 February 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Scripting Reference]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Scripting Reference&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]][[Category:Graal Client&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Release date==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Release date==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Cyan3</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/2&amp;diff=13168&amp;oldid=prev</id>
		<title>Pooper200000 at 19:50, 13 September 2009</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/2&amp;diff=13168&amp;oldid=prev"/>
		<updated>2009-09-13T19:50:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:50, 13 September 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Scripting Reference]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Release date==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Release date==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key graalnet_wikidb:diff::1.12:old-10089:rev-13168 --&gt;
&lt;/table&gt;</summary>
		<author><name>Pooper200000</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/2&amp;diff=10089&amp;oldid=prev</id>
		<title>Stefan: New page: ==Release date==  January 2001 for Windows  ==2==   no 2/3/4 player mode anymore; we want to   concentrate on the online mode; this will   also help in reducing the ressources needed    by...</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/2&amp;diff=10089&amp;oldid=prev"/>
		<updated>2007-09-29T23:46:52Z</updated>

		<summary type="html">&lt;p&gt;New page: ==Release date==  January 2001 for Windows  ==2==   no 2/3/4 player mode anymore; we want to   concentrate on the online mode; this will   also help in reducing the ressources needed    by...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Release date==&lt;br /&gt;
&lt;br /&gt;
January 2001 for Windows&lt;br /&gt;
&lt;br /&gt;
==2==&lt;br /&gt;
&lt;br /&gt;
 no 2/3/4 player mode anymore; we want to&lt;br /&gt;
  concentrate on the online mode; this will&lt;br /&gt;
  also help in reducing the ressources needed &lt;br /&gt;
  by the game and in removing some bugs;&lt;br /&gt;
  with the 2/3/4 player we also removed the&lt;br /&gt;
  support for save games (F2/F3), and you can't&lt;br /&gt;
  select your character in the starting window,&lt;br /&gt;
  servers will provide character selection&lt;br /&gt;
  levels&lt;br /&gt;
&lt;br /&gt;
 new tutorial levels&lt;br /&gt;
&lt;br /&gt;
 in the controls window you can change the keys&lt;br /&gt;
  and buttons, just click on it (right mouse&lt;br /&gt;
  button deletes it)  &lt;br /&gt;
&lt;br /&gt;
 bush rupees and pot hearts are server-side&lt;br /&gt;
&lt;br /&gt;
 you can do 'warpto &amp;lt;accountname&amp;gt;' (if you are&lt;br /&gt;
  a GP)&lt;br /&gt;
&lt;br /&gt;
 on the minimap / playerlist you see red bubbles for&lt;br /&gt;
  admin messages, green bubbles for guild messages and&lt;br /&gt;
  blue bubbles for mass messages&lt;br /&gt;
&lt;br /&gt;
 in the editor you can do flood filling by pasting&lt;br /&gt;
  a tile / an object onto the level and pressing the&lt;br /&gt;
  right mouse button (shift+right mouse button: only&lt;br /&gt;
  fill full objects); if you haven't selected something&lt;br /&gt;
  then the right mouse button with fill the area with&lt;br /&gt;
  the background tile&lt;br /&gt;
&lt;br /&gt;
 there are new deep water tiles where you can't swim&lt;br /&gt;
&lt;br /&gt;
 new script commands:&lt;br /&gt;
  These commands are good for making a day/night thing&lt;br /&gt;
  and showing lights (see the included light2.png which&lt;br /&gt;
  can be used as corona (setcoloreffect)) They doesn't&lt;br /&gt;
  cause lag, but you can only see it when you have a&lt;br /&gt;
  3D card (like Riva TNT). &lt;br /&gt;
  * seteffect red,green,blue,alpha; (default 0,0,0,0)&lt;br /&gt;
    This if for day/night, by increasing alpha to 0.5&lt;br /&gt;
    or so you can make the game darker; changing the&lt;br /&gt;
    values for red/green/blue will cause some nice effects&lt;br /&gt;
    too&lt;br /&gt;
  * setcoloreffect red,green,blue,alpha; (default 1,1,1,1)&lt;br /&gt;
    If you change one of these values to something &amp;lt;1 then&lt;br /&gt;
    the npc image will be drawn using alpha blending;&lt;br /&gt;
    By changing red/green/blue you can change the color of&lt;br /&gt;
    the image (so you can use light2.png for red lights,&lt;br /&gt;
    green lights etc. without needing another image);&lt;br /&gt;
    By changing alpha you can decrease the brightness of the&lt;br /&gt;
    npc image&lt;br /&gt;
  * setzoomeffect zoomfactor; (default 1)&lt;br /&gt;
    Zooms the npc in or out. The npc will stay centered at&lt;br /&gt;
    the same position and have the same blocking radius,&lt;br /&gt;
    so this is only for effects&lt;br /&gt;
  * drawaslight;&lt;br /&gt;
    draws the npc above the daynight effects area&lt;br /&gt;
    (between drawoverplayers and the stats)&lt;br /&gt;
  * changeimgcolors index,red,green,blue,alpha; (default 1,1,1,1)&lt;br /&gt;
    changes the alpha transparency / color for the image&lt;br /&gt;
    (see setcoloreffect for more);&lt;br /&gt;
  * changeimgzoom index,zoomfactor; (default 1)&lt;br /&gt;
    changes the zoom factor for the image;&lt;br /&gt;
    color and zoom effect are not transferred to other players&lt;br /&gt;
    so changeimgcolors and changeimgzoom only work locally&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 new Graal animation system using *.gani files&lt;br /&gt;
  * With setani and setcharani (script commands) you can change&lt;br /&gt;
    the animation of the player or the npc, instead of only&lt;br /&gt;
    using the default animations that are changed by accessing&lt;br /&gt;
    the variable 'sprite'; that variable still exists but will&lt;br /&gt;
    be mapped to def.gani which contains all of the old&lt;br /&gt;
    animation steps (0..40); its also possible to still read&lt;br /&gt;
    'sprite', the game will then try to convert the current&lt;br /&gt;
    animation to the old sprite number system, e.g. when the player&lt;br /&gt;
    has the animation walk.gani then reading the 'sprite'&lt;br /&gt;
    variable will result in values between 1 and 8 depending&lt;br /&gt;
    on the current animation step; new animations will always&lt;br /&gt;
    be mapped to 0, but you can get the current animation by&lt;br /&gt;
    using the #m message code (if (strequals(#m,walk)) ...)&lt;br /&gt;
  * There is an editor for gani files named 'GraalShop.exe',&lt;br /&gt;
    you can set the file association in the windows explorer&lt;br /&gt;
    to make it easier to open gani files; but you can also&lt;br /&gt;
    edit gani files with text editor&lt;br /&gt;
  * Syntax:&lt;br /&gt;
    setani &amp;lt;aniname&amp;gt;,param1,param2,...;&lt;br /&gt;
     setcharani &amp;lt;aniname&amp;gt;,param1,param2,...;&lt;br /&gt;
    Example: setani walk,; sets the walking animation&lt;br /&gt;
    defined in walk.gani. A gani contains informations&lt;br /&gt;
    about sprites and where to put them in which frame.&lt;br /&gt;
    The gani format:&lt;br /&gt;
    1. Starts with some control commands:&lt;br /&gt;
&lt;br /&gt;
    * SPRITE            0    SPRITES   0   0  24  12 shadow&lt;br /&gt;
        =&amp;gt;   sprite_index image_file   x   y   w   h description&lt;br /&gt;
        this defines a sprite&lt;br /&gt;
      * sprite index: is import for the animation part of&lt;br /&gt;
        gani file which will be described later;&lt;br /&gt;
        each sprite must have an unique sprite index&lt;br /&gt;
      * image file: can be&lt;br /&gt;
        * BODY HEAD HORSE SHIELD SPRITES PICS&lt;br /&gt;
          (those images will taken from the current player),&lt;br /&gt;
        * PARAM1, PARAM2, ... (are set with setani/setcharani),&lt;br /&gt;
        * myimage.png (direct filename)&lt;br /&gt;
      * x,y,width,height: describe which part of the image&lt;br /&gt;
        should be drawn&lt;br /&gt;
      * description: only for the gani editor&lt;br /&gt;
    * DEFAULTPARAMxxx newsword.png - tells the gani editor&lt;br /&gt;
      which image should be used for PARAMxxx (it can also&lt;br /&gt;
      be a number when you want to use the parameter to&lt;br /&gt;
      give a sprite number to animations)&lt;br /&gt;
    * COLOREFFECT     20     1     1     0  0.99&lt;br /&gt;
      =&amp;gt;    sprite_index   red green  blue alpha&lt;br /&gt;
      sets the alpha transparency / colors for the sprite&lt;br /&gt;
    * ZOOMEFFECT      20     5&lt;br /&gt;
      =&amp;gt;    sprite_index  zoom&lt;br /&gt;
      sets the zoom factor for the sprite&lt;br /&gt;
    * LOOP - loops the animation&lt;br /&gt;
    * CONTINUOUS - doesn't restart the animation when you&lt;br /&gt;
      call setani/setcharani again&lt;br /&gt;
    * SINGLEDIRECTION - all four directions use the same&lt;br /&gt;
      animation steps&lt;br /&gt;
&lt;br /&gt;
    2. It follows the animation in&lt;br /&gt;
    ANI&lt;br /&gt;
    ...&lt;br /&gt;
    ANIEND&lt;br /&gt;
      The animation normally contains 4 x animation_step_count lines&lt;br /&gt;
      of sprite defintions. Each line contains of a list of &lt;br /&gt;
      sprite positions:&lt;br /&gt;
    sprite_index dx dy, sprite_index dx dy, ...&lt;br /&gt;
      * sprite index: the defined sprite with the specified sprite&lt;br /&gt;
        index should be drawn (can also be PARAM1, PARAM2 etc.)&lt;br /&gt;
      * dx: horizontal difference to the player-x coordinate&lt;br /&gt;
      * dy: vertical difference to the player-y coordinate&lt;br /&gt;
    After each frame (which means 4 lines in normal animations&lt;br /&gt;
    and 1 line in a SINGLEDIRECTION animation) you can add following&lt;br /&gt;
    commands:&lt;br /&gt;
    WAIT &amp;lt;waittime&amp;gt; - repeats the last frame &amp;lt;waittime&amp;gt; times&lt;br /&gt;
    PLAYSOUND &amp;lt;soundfile&amp;gt; dx dy - plays a wav file from position&lt;br /&gt;
      (playerx+dx,playery+dy) (that defines the posititon where it&lt;br /&gt;
      sounds loudest); this actually works like the npc command 'play'&lt;br /&gt;
      so you can theoretically play midis or avis but that is not&lt;br /&gt;
      recommended&lt;br /&gt;
&lt;br /&gt;
  * See the existing gani files for examples, e.g. idle.gani for&lt;br /&gt;
    a very simple animation (it only contains one step)&lt;br /&gt;
  * The gani format has a lot of advantages:&lt;br /&gt;
    * it means less network traffic (because you can replace tons of&lt;br /&gt;
      showimg with one call to setani/setcharani)&lt;br /&gt;
    * you can do a lot more than with showimg&lt;br /&gt;
    * it's easier to make complex animations with it&lt;br /&gt;
    * in the online mode the player animations look less&lt;br /&gt;
      laggy because the animation continues even if the&lt;br /&gt;
      connection is slow&lt;br /&gt;
    * you can hear what other people do like they were playing&lt;br /&gt;
      on your computer because sound effects are included in&lt;br /&gt;
      the gani file&lt;br /&gt;
    * you can change the default player animations like dead.gani&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 files are now automatically downloaded again from the server when&lt;br /&gt;
  they have been updated on the server&lt;br /&gt;
&lt;br /&gt;
 wavs are downloaded from the server too&lt;br /&gt;
&lt;br /&gt;
 when weapon names start with - then you can't see them&lt;br /&gt;
  in the weapons list (might be good for system npcs)&lt;br /&gt;
&lt;br /&gt;
 new npc script variables playerhurtdx and playerhurtdy when the&lt;br /&gt;
  player is hurt (otherwise they are 0)&lt;br /&gt;
&lt;br /&gt;
 new npc script commands 'setgender' and 'setchargender'&lt;br /&gt;
  (paramters: male / female)&lt;br /&gt;
&lt;br /&gt;
 new npc script command setmusicvolume left,right;&lt;br /&gt;
  both values can be between 0 and 1&lt;br /&gt;
&lt;br /&gt;
 signs are dynamic now, you can use message codes like #n in&lt;br /&gt;
  the signs, unknown characters are drawn using a windows font;&lt;br /&gt;
  there is a new message code #K(action) which tell you the&lt;br /&gt;
  key names for the keys (0-up, 1-left, 2-down etc.)  &lt;br /&gt;
&lt;br /&gt;
 head,sword,shield and body images are saved in the right&lt;br /&gt;
  folder (levels/heads, levels/swords etc.) instead of&lt;br /&gt;
  levels/webgifs&lt;br /&gt;
&lt;br /&gt;
 before you can drop items with S+A it checks if there is no&lt;br /&gt;
  wall in front of you&lt;br /&gt;
&lt;br /&gt;
 the npc script command 'stopsound filename;' works now&lt;br /&gt;
&lt;br /&gt;
 there is no error message anymore when you&lt;br /&gt;
  open a file by double-clicking on a .graal file&lt;br /&gt;
  in the windows explorer (file association)&lt;br /&gt;
&lt;br /&gt;
 the script command 'continue' works correctly&lt;br /&gt;
  in while-loops now&lt;br /&gt;
&lt;br /&gt;
 jumping into links shouldn't stuck you&lt;br /&gt;
&lt;br /&gt;
 invisible npcs are non-blocking&lt;br /&gt;
&lt;br /&gt;
 DirectSound and DirectDraw are dynamically loaded,&lt;br /&gt;
  when there is a problem with DirectDraw then&lt;br /&gt;
  the game gives you an error message and closes&lt;br /&gt;
  correctly&lt;br /&gt;
&lt;br /&gt;
 fixed a bug that happened when you do&lt;br /&gt;
  if (playerenters) setlevel &amp;lt;currentlevel&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
 playerlist section 'Staff' instead of 'GPs',&lt;br /&gt;
  there you can also see LATs and FAQs now&lt;br /&gt;
&lt;br /&gt;
==2.01==&lt;br /&gt;
&lt;br /&gt;
 levels are preloaded when you walk on the map&lt;br /&gt;
&lt;br /&gt;
 when looking on the map then a special animation&lt;br /&gt;
  is set so that other players can see that you are&lt;br /&gt;
  reading the map&lt;br /&gt;
&lt;br /&gt;
 showimg should work better, artefacts should be removed&lt;br /&gt;
&lt;br /&gt;
 when you pause the game then things are still animated,&lt;br /&gt;
  bombs explode&lt;br /&gt;
&lt;br /&gt;
 when you change the chat text of the player with&lt;br /&gt;
  the script command setplayerprop #c,text; then it&lt;br /&gt;
  doesn't disappear immediatelly, it will be shown&lt;br /&gt;
  for 3 seconds&lt;br /&gt;
&lt;br /&gt;
 in scripts you can do if (playerdies) ... to do&lt;br /&gt;
  stuff when the player dies (timeouts doesn't work&lt;br /&gt;
  when you are dead)&lt;br /&gt;
&lt;br /&gt;
 when the player is hurt then you can detect that in&lt;br /&gt;
  scripts by doing if (playerhurt) ...&lt;br /&gt;
  you can read the variable playerhurtpower to get&lt;br /&gt;
  the amount of power that the player lost&lt;br /&gt;
&lt;br /&gt;
 a bug with testnpc is removed &lt;br /&gt;
&lt;br /&gt;
 new script commands:&lt;br /&gt;
  * hitobjects power,x,y; hurts players/npcs/computer&lt;br /&gt;
    opponents that are on the specified position;&lt;br /&gt;
    this works exactly like the sword so this should&lt;br /&gt;
    be used for weapons, instead of the hitplayer command&lt;br /&gt;
    which gives the attacker to much advance;&lt;br /&gt;
    we will probably need to wait with using it till all&lt;br /&gt;
    people have v2.01, and v2.00 is disabled&lt;br /&gt;
  * openurl2 url,width,height; opens an url in a window&lt;br /&gt;
    but in a different way: it uses the same thing that is&lt;br /&gt;
    used for the server MOTD and PM history, so it should&lt;br /&gt;
    open faster, and you can set the size of the window;&lt;br /&gt;
    remove the leading http:// from the url&lt;br /&gt;
&lt;br /&gt;
==2.02==&lt;br /&gt;
&lt;br /&gt;
Version v2.02 brings new things for customizing the&lt;br /&gt;
player (e.g. hats), making signs with images, and doing&lt;br /&gt;
string parsing in npc scripts. Of course there are also&lt;br /&gt;
bug fixes.&lt;br /&gt;
&lt;br /&gt;
Restrictions for free servers: Because we want players&lt;br /&gt;
to upgrade the accounts, we have put some limits on &lt;br /&gt;
free servers. This includes light effects (seteffect,&lt;br /&gt;
setcoloreffect etc.) and complex ganis. 'complex' means&lt;br /&gt;
ganis (animations) that are not default animations&lt;br /&gt;
and do more than just display an image. Things like&lt;br /&gt;
skip.gani are allowed, fishing.gani not. &lt;br /&gt;
Using the hat thing is not allowed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 support for hats and similar things:&lt;br /&gt;
  When opening the gani editor (Graal Shop) you&lt;br /&gt;
  will see new edit fields for 'Def. attr1', 'Def. attr2'&lt;br /&gt;
  etc. These work similar to the PARAM1, PARAM2 etc. thing,&lt;br /&gt;
  but they behave different in Graal: while the values for&lt;br /&gt;
  PARAMx is taken from the parameters that you use in your&lt;br /&gt;
  setani and setcharani script calls (setani shoot,wbow1.gif;&lt;br /&gt;
  is setting PARAM1 to wbow1.gif), the ATTR1, ATTR2 etc. is&lt;br /&gt;
  read from the players account. You can change it with&lt;br /&gt;
  setplayerprop #P1,...; /setcharprop #P1,...;&lt;br /&gt;
  You can currently use 5 gani attributes. Since it is saved&lt;br /&gt;
  in the players account, it doesn't need to be sent to the&lt;br /&gt;
  other players each time the animation is set which is causing&lt;br /&gt;
  lag when used in a movement animations&lt;br /&gt;
&lt;br /&gt;
  Here an example for setting the hat of the player:&lt;br /&gt;
  setplayerprop #P1,hat0.png;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 the guilds listed in the staff section of the&lt;br /&gt;
  playerlist can now be changed by serverowners&lt;br /&gt;
&lt;br /&gt;
 the HTML window now has a panel with navigation buttons&lt;br /&gt;
  for back/forward/stop/refresh/home&lt;br /&gt;
  you see that window when the server message of the day is&lt;br /&gt;
  displayed or when a script calls the openurl or openurl2&lt;br /&gt;
  functions&lt;br /&gt;
&lt;br /&gt;
 when the options window is open then the game is not&lt;br /&gt;
  freezed anymore (was used to cheat/block players)&lt;br /&gt;
&lt;br /&gt;
===NPC scripting===&lt;br /&gt;
&lt;br /&gt;
 you can display images in signs using the&lt;br /&gt;
  message code #i: a sign with the text&lt;br /&gt;
&lt;br /&gt;
  Touch this to enter: #i(door.gif)&lt;br /&gt;
&lt;br /&gt;
  will display the door.gif at the end of the&lt;br /&gt;
  line. It doesn't check if the image is larger&lt;br /&gt;
  than one line, so you might need to add spaces&lt;br /&gt;
  in the following lines so that the image doesn't&lt;br /&gt;
  overlap the text. You can also only display&lt;br /&gt;
  a part of the image:&lt;br /&gt;
&lt;br /&gt;
  The nicest head ever - #i(head19.gif,0,64,32,32)&lt;br /&gt;
&lt;br /&gt;
  This displays the part of head19.gif starting&lt;br /&gt;
  at position (0,64) with a widht and height of 32&lt;br /&gt;
  (ninji face looking at you)&lt;br /&gt;
&lt;br /&gt;
 string parsing functions&lt;br /&gt;
  There is a bunch of new functions and message codes&lt;br /&gt;
  to support string parsing:&lt;br /&gt;
  * strlen(str) - length of the string&lt;br /&gt;
  * startswith(part,str) - tests if 'str' is starting with 'part'&lt;br /&gt;
  * indexof(part,str) - gives the position of 'part' in 'str'&lt;br /&gt;
    (-1: doesn't appear in 'str', 0: str starts with it)&lt;br /&gt;
  * #e(startindex,length,str) - extracts a substring out of str;&lt;br /&gt;
    when length is -1 then it takes everything after startindex&lt;br /&gt;
    till the end of str&lt;br /&gt;
  * #T(str) - removes the spaces at the beginning and at the end&lt;br /&gt;
  * tokenize str; - divides the specified string into tokens,&lt;br /&gt;
    e.g. tokenize I am happy!; will produce 3 tokens (I, am, happy!);&lt;br /&gt;
    text inside &amp;quot; &amp;quot; is taken as one token,&lt;br /&gt;
    so tokenize hello &amp;quot;Mr. Bear&amp;quot;; will produce 2 tokens (hello,Mr. Bear)&lt;br /&gt;
  * tokenscount - gives you the count of tokens produced with tokenize&lt;br /&gt;
  * #t(index) - gives you a token&lt;br /&gt;
  * tokenize2 delimiter,str; - while tokenize always uses&lt;br /&gt;
    spaces and commas, you can add more delimiters here,&lt;br /&gt;
    e.g. tokenize2 o, Yoshi is cool; will give you (Y,shi,is,c,l)&lt;br /&gt;
&lt;br /&gt;
 when doing setstring flagname,; then the deletion&lt;br /&gt;
  of the string variable is sent to the server&lt;br /&gt;
&lt;br /&gt;
 setting/unsetting/changing a flag that starts with 'local.'&lt;br /&gt;
  is not sent to the server&lt;br /&gt;
&lt;br /&gt;
 when using setplayerprop #5 to set a horse or&lt;br /&gt;
  when having a horse from last login to the server,&lt;br /&gt;
  then the bushes count is set correctly&lt;br /&gt;
&lt;br /&gt;
 you can now set string variables that contain commas,&lt;br /&gt;
  when you do setstring myflag,1,2,3; then you will&lt;br /&gt;
  add a flag 'myflag=1,2,3' instead of getting a syntax&lt;br /&gt;
  error&lt;br /&gt;
&lt;br /&gt;
 commands that we forgot to mention:&lt;br /&gt;
  * disabledefmovement: turns off the normal player movement&lt;br /&gt;
    and behaviour; this is good for making new player races&lt;br /&gt;
    or things like skis;&lt;br /&gt;
    if you only want to temporary disable it then use&lt;br /&gt;
    the freezeplayer command&lt;br /&gt;
  * enabledefmovement: enables it again&lt;br /&gt;
&lt;br /&gt;
 the script debugger (F6) gives you a list of the script&lt;br /&gt;
  functions of the selected npc; you see it under the&lt;br /&gt;
  drop down list for npcs; when selecting a function then&lt;br /&gt;
  the script panel will scroll down to it&lt;br /&gt;
  this is good for easier navigation through a script&lt;br /&gt;
&lt;br /&gt;
 keydown(index) is always false when the player is paused&lt;br /&gt;
&lt;br /&gt;
 new flags issparringzone and nopkzone&lt;br /&gt;
&lt;br /&gt;
===Graal Shop (Gani editor)===&lt;br /&gt;
&lt;br /&gt;
 correct detection for if the gani has been modified&lt;br /&gt;
&lt;br /&gt;
 correct behaviour of the 'loop' and 'continuous' flags:&lt;br /&gt;
  the animation is stopped when at the end and not looped,&lt;br /&gt;
  and a continuous animation is started when not running&lt;br /&gt;
  and clicking on 'Play'&lt;br /&gt;
&lt;br /&gt;
 edit fields for the new gani player attributes&lt;br /&gt;
  ('Def. attr1', 'Def. attr2' etc.) &lt;br /&gt;
&lt;br /&gt;
===General bug fixes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 objects are drawn in correct y-order when near level borders&lt;br /&gt;
&lt;br /&gt;
 the map viewing animations are set correctly (only&lt;br /&gt;
  when you stand still or sit)&lt;br /&gt;
&lt;br /&gt;
 when you play on a server with npcserver and you switch to&lt;br /&gt;
  another server then you will be able to see npcs&lt;br /&gt;
&lt;br /&gt;
 the texts 'Map' and 'Others:' that you see when viewing the&lt;br /&gt;
  map can be changed in the languages/languageXXX.txt now too&lt;br /&gt;
&lt;br /&gt;
 when pressing R to view the sparring ratings of players then&lt;br /&gt;
  the rating is not displayed over npcs&lt;br /&gt;
&lt;br /&gt;
==2.021==&lt;br /&gt;
&lt;br /&gt;
 the speed cheat protection shouldn't close the program&lt;br /&gt;
  when there was no cheating&lt;br /&gt;
&lt;br /&gt;
 when opening the history of someone you will not&lt;br /&gt;
  see the web navigation bar&lt;br /&gt;
&lt;br /&gt;
 better hacking protection&lt;br /&gt;
&lt;br /&gt;
 the server knows the language of the client,&lt;br /&gt;
  that way there can be translation of signs and what npcs&lt;br /&gt;
  say (on servers with npcserver)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2.03==&lt;br /&gt;
&lt;br /&gt;
 New script command: triggeraction targetx,targety,action,params;&lt;br /&gt;
  This is one of the commands that give you like 50% more scripting&lt;br /&gt;
  power than before. It is like a combination of hitobjects and&lt;br /&gt;
  callnpc, but better. With 'triggeraction' you invoke an event&lt;br /&gt;
  to the object on positon (targetx,targety). If the object is&lt;br /&gt;
  an npc, then the npc script is called with the flag&lt;br /&gt;
  'action&amp;lt;action&amp;gt;' set, when the object is a player then the&lt;br /&gt;
  weapon scripts of the that player are called with the&lt;br /&gt;
  'action&amp;lt;action&amp;gt;' flag set.&lt;br /&gt;
  'params' can be one or more parameters, divided by commas;&lt;br /&gt;
  the called script can read the paramters by accessing the&lt;br /&gt;
  message code #p(paramindex).&lt;br /&gt;
  Because this is hard to explain with words, here some&lt;br /&gt;
  little examples:&lt;br /&gt;
&lt;br /&gt;
  * trigger player weapons&lt;br /&gt;
    You can easily do a weapon which freezes the other&lt;br /&gt;
    player:&lt;br /&gt;
&lt;br /&gt;
    if (playertouchsme) toweapons Freezing-Weapon;&lt;br /&gt;
    if (weaponfired) {&lt;br /&gt;
      triggeraction playerx+1.5+vecx(playerdir)*2,&lt;br /&gt;
        playery+2+vecy(playerdir)*2,freeze,;&lt;br /&gt;
    }&lt;br /&gt;
    if (actionfreeze) {&lt;br /&gt;
      freezeplayer 3;&lt;br /&gt;
      setplayerprop #c,FREEZED;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Both players must have this weapon for making it&lt;br /&gt;
    working. Then use it on the other player, and he will&lt;br /&gt;
    be freezed, because a 'freeze' action is sent to him&lt;br /&gt;
    and his weapon script, called with flag 'actionfreeze',&lt;br /&gt;
    will freeze him. You can also move the if (actionfreeze) ...&lt;br /&gt;
    into an system npc so the weapon can be used on all&lt;br /&gt;
    players.&lt;br /&gt;
    Other nice things you could do with triggering actions&lt;br /&gt;
    on players: a stealing weapon which lets the other player&lt;br /&gt;
    loose gralats (if (actionsteal) lay2 greenrupee,... );&lt;br /&gt;
    complex attacking weapons that use your own hitpoint&lt;br /&gt;
    system instead of the default hearts thing&lt;br /&gt;
&lt;br /&gt;
  * trigger npcs&lt;br /&gt;
&lt;br /&gt;
    Until now npcs can only react to 'playertouchsme' and&lt;br /&gt;
    'washit', other things are very hard to do (e.g. the&lt;br /&gt;
    mining on Graal2001 was made by checking periodically&lt;br /&gt;
    what animation the player has and before which stone the&lt;br /&gt;
    player stands). You could do callnpc, but this works only&lt;br /&gt;
    client-side and you needed to pass parameters with&lt;br /&gt;
    flags.&lt;br /&gt;
    Using 'triggeraction' you can make those things much easier.&lt;br /&gt;
    The mining axe could have the script&lt;br /&gt;
    if (weaponfired) {&lt;br /&gt;
      setani jaxe,hammergold0.png;&lt;br /&gt;
      triggeraction playerx+1.5+vecx(playerdir)*2,&lt;br /&gt;
        playery+2+vecy(playerdir)*2,mining,#v(axepower);&lt;br /&gt;
    }&lt;br /&gt;
    If you now use the weapon on a stone, the stone npc could&lt;br /&gt;
    check this so:&lt;br /&gt;
    if (actionmining) {&lt;br /&gt;
      axepower = strtofloat(#p(0));&lt;br /&gt;
      this.power -= axepower;&lt;br /&gt;
      if (this.power&amp;lt;=0) {&lt;br /&gt;
        setstring uncraftedgold,#v(strtofloat(#s(uncraftedgold))+1);&lt;br /&gt;
        hide;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    With this thing you can also easily do switches which are&lt;br /&gt;
    activated with the hammer, or torch lamps which are turned on&lt;br /&gt;
    by using a torch on it.&lt;br /&gt;
&lt;br /&gt;
  * actionpushed, actionpulled&lt;br /&gt;
    The game automatically triggers the actions 'pushed' and&lt;br /&gt;
    'pulled' on an npc, #p(0) is the direction of where to move;&lt;br /&gt;
    so you can do different things when the player tries to&lt;br /&gt;
    push/pull the npc, e.g. slower pulling, or opening&lt;br /&gt;
    a door. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 New script command: move dx,dy,time,options;&lt;br /&gt;
  dx - delta x&lt;br /&gt;
  dy - delta y&lt;br /&gt;
  time - time in seconds&lt;br /&gt;
  options - cachingmode (0,1 or 2) + blockcheck (4 or 0) +&lt;br /&gt;
    informmewhendone (8 or 0) + applydirection (16 or 0)&lt;br /&gt;
  This moves the npc without needing you to update the&lt;br /&gt;
  position of the npc 'manually' by changing x and y.&lt;br /&gt;
  To move an npc 10 tiles to the right, then 10 tiles to&lt;br /&gt;
  the left and again, just do following:&lt;br /&gt;
  if (created) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      move 10,0,4,0;&lt;br /&gt;
      sleep 4;&lt;br /&gt;
      move -10,0,4,0;&lt;br /&gt;
      sleep 4;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  This moves the npc 10 tiles to the right, then waits 4&lt;br /&gt;
  seconds, then moves it 10 tiles to the left, then waits&lt;br /&gt;
  4 seconds, and repeats this endlessly.&lt;br /&gt;
  The good thing is that this also works with server-side&lt;br /&gt;
  npcs and makes them look like they are moved on client-side.&lt;br /&gt;
  There are also nice options to makes things very simple:&lt;br /&gt;
  * cachingmode:&lt;br /&gt;
    * 0: previous movements will be finished immediatelly&lt;br /&gt;
    * 1: movements will be cached, the previous movements&lt;br /&gt;
         will only be finished when the cache is too large&lt;br /&gt;
         (distance to go &amp;gt;5);&lt;br /&gt;
         this caching can be used on server-side npcs to&lt;br /&gt;
         make the movement look like non-laggy even when&lt;br /&gt;
         there are little delays sometimes&lt;br /&gt;
    * 2: the movement will just be appended to the movement&lt;br /&gt;
         list; you can add up to 100 movements&lt;br /&gt;
  * blockcheck: add 4 to the options when you want the&lt;br /&gt;
    npc to stop when there is a wall blocking the npc&lt;br /&gt;
  * informmewhendone: if you add 8 to the options then the&lt;br /&gt;
    script will be called with a 'movementfinished' flag&lt;br /&gt;
    when the the npc has stopped walking; catch this event&lt;br /&gt;
    with&lt;br /&gt;
    if (movementfinished) {...}&lt;br /&gt;
    if you want to do something when the npc has stopped&lt;br /&gt;
    (e.g. walking in a different direction)&lt;br /&gt;
  * applydirection: add 16 to the options if you want the&lt;br /&gt;
    game to automatically set the direction of the npc&lt;br /&gt;
    depending on the movement direction (can be good&lt;br /&gt;
    when using movement caching)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 on remotecontrol and npccontrol you can use new&lt;br /&gt;
  chat functions, commands start with /, you can get&lt;br /&gt;
  a list of available functions with /help&lt;br /&gt;
&lt;br /&gt;
 when you play on a game server with npcserver&lt;br /&gt;
  and an npc leaves the current level, then it is&lt;br /&gt;
  displayed in the new level instead of being hidden&lt;br /&gt;
&lt;br /&gt;
 script functions vecx(dir) and vecy(dir) which&lt;br /&gt;
  are a replacement for the 'dirgo' variables used&lt;br /&gt;
  in many scripts;&lt;br /&gt;
  e.g. for direction 2 (down) the  functions vecx and&lt;br /&gt;
  vecy give you 0 and 1;&lt;br /&gt;
  normal npc movements can so simply made by&lt;br /&gt;
  x += vecx(dir);&lt;br /&gt;
  y += vecy(dir);&lt;br /&gt;
&lt;br /&gt;
 script functions onmapx(levelname) and onmapy(levelname)&lt;br /&gt;
  to get the position of a level on the currently set&lt;br /&gt;
  map&lt;br /&gt;
&lt;br /&gt;
 the game uses in-game code to compress/decompress again&lt;br /&gt;
  instead of using zlib.dll because it has been abused&lt;br /&gt;
&lt;br /&gt;
 if you press the shift key while clicking on Start&lt;br /&gt;
  or Turorial in the starting window, then the game&lt;br /&gt;
  will start in fullscreen mode&lt;br /&gt;
&lt;br /&gt;
 new script flags 'playerreading' to check if the&lt;br /&gt;
  player is reading a sign, and 'lighteffectsenabled'&lt;br /&gt;
  for checking if the player can see the light&lt;br /&gt;
  effects and day/night&lt;br /&gt;
&lt;br /&gt;
 fixed bugs when using numbers for #P1&lt;br /&gt;
&lt;br /&gt;
 fixed bug with reading animated interlaced gifs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2.04==&lt;br /&gt;
This version contains major improvements in the game engine.&lt;br /&gt;
&lt;br /&gt;
===Sound===&lt;br /&gt;
&lt;br /&gt;
 PARAM1 enabled for the PLAYSOUND command in gani files, also&lt;br /&gt;
  message codes can be used with the script command play;&lt;br /&gt;
&lt;br /&gt;
  You can make an animation that plays differnet sounds/tones,&lt;br /&gt;
  so this makes it possible to create instruments&lt;br /&gt;
&lt;br /&gt;
===Animations===&lt;br /&gt;
&lt;br /&gt;
 replacegani aniname,newani;&lt;br /&gt;
  Lets the player use a different animation for&lt;br /&gt;
  walking, swimming etc. You can do things like&lt;br /&gt;
  replacegani walk,mywalk; if you want the player&lt;br /&gt;
  use mywalk.gani as walking animation (instead of&lt;br /&gt;
  writing your own walking script); This takes only&lt;br /&gt;
  effect till the player logs off, so you must put it&lt;br /&gt;
  in a system npc or so; its not lagging;&lt;br /&gt;
  The default animations are:&lt;br /&gt;
    idle,walk,walkslow,kick,sword,ridesword,&lt;br /&gt;
    spin,push,grab,pull,lift,carrystill,&lt;br /&gt;
    hiddenstill,carry,hidden,shoot,ridestill,&lt;br /&gt;
    ridefire,rideeat,ride,sit,sleep,hurt,&lt;br /&gt;
    ridehurt,dead,maps1,maps2,maps3,swim,&lt;br /&gt;
    lava,carried&lt;br /&gt;
  To reset the default animation just do&lt;br /&gt;
  replacegani walk,walk; etc.&lt;br /&gt;
&lt;br /&gt;
  Using replacegani you can do things like&lt;br /&gt;
  holding a torch while running (*olympic games*).&lt;br /&gt;
  It's only allowed/enabled for upgraded servers.&lt;br /&gt;
&lt;br /&gt;
===Tiles===&lt;br /&gt;
&lt;br /&gt;
 addtiledef tilesimage,levelstart,type;&lt;br /&gt;
  uses the file 'tilesimage' in replacement of&lt;br /&gt;
  'pics1.png' in all levels that start with 'levelstart';&lt;br /&gt;
  type: 0-old graal, 1-new order(description later)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 addtiledef2 tilesimage,levelstart,x,y;&lt;br /&gt;
  this is similar to addtiledef, but only replaces&lt;br /&gt;
  a part of the tiles image; its like putting an&lt;br /&gt;
  image on top of the tiles image (normally pics1.png),&lt;br /&gt;
  this is good for replacing the default chair or lamp&lt;br /&gt;
  or so; this supports animated images, but keep in mind&lt;br /&gt;
  that all tile replacements must be hold in memory&lt;br /&gt;
  and be animated, so better only use it in the levels&lt;br /&gt;
  you need it;&lt;br /&gt;
  These two commands are very powerful and are only&lt;br /&gt;
  enabled for upgraded servers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 removetiledefs levelstart;&lt;br /&gt;
  removes tile definitions for levels that start with&lt;br /&gt;
  'levelstart'&lt;br /&gt;
&lt;br /&gt;
 support for object sets, saved in the tileobjects folder and selectable&lt;br /&gt;
  in the editor&lt;br /&gt;
&lt;br /&gt;
===NPC layers===&lt;br /&gt;
&lt;br /&gt;
 setshape type,pixelwidth,pixelheight&lt;br /&gt;
  Sets the shape for an npc. It already existed on&lt;br /&gt;
  the npcserver, but is usefull for client-side stuff to.&lt;br /&gt;
  type is the the shape type, the only one supported&lt;br /&gt;
  is 1 (=rectangle); it makes the npc behave like&lt;br /&gt;
  a fixed rectangle, no matter how big the image is or&lt;br /&gt;
  if its already loaded; to set it back to default&lt;br /&gt;
  do setshape 0,0,0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 setshape2 width,height,{tiletypes,...}&lt;br /&gt;
  Lets the npc behave like a level, which means you can set&lt;br /&gt;
  what size it has (in tiles) and how the tiles behave;&lt;br /&gt;
  e.g. do setshape2 2,2,{3,3,3,3}; to make an npc that behaves&lt;br /&gt;
  like a chair. Following tile types are supported:&lt;br /&gt;
  0 nonblocking&lt;br /&gt;
  2 hurting underground&lt;br /&gt;
  3 chair&lt;br /&gt;
  4 bed upper side&lt;br /&gt;
  5 bed lower side&lt;br /&gt;
  6 swamp&lt;br /&gt;
  7 lava swamp&lt;br /&gt;
  8 near water&lt;br /&gt;
  9 near lava&lt;br /&gt;
  11 water&lt;br /&gt;
  12 lava&lt;br /&gt;
  20 throw-through (fences)&lt;br /&gt;
  21 jumping stone&lt;br /&gt;
  22 blocking tile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 attachplayertoobj objecttype,id;&lt;br /&gt;
  Attaches the player to an object, currently only npcs are&lt;br /&gt;
  supported (objecttype=0); the id must be the id of the npc&lt;br /&gt;
  you want to attach the player at&lt;br /&gt;
  when the player is attached, you can do if (playerattached) to&lt;br /&gt;
  check if he is attached; new player attributes playerattachid&lt;br /&gt;
  and playerattachtype; new variables levelorgx,levelorgy for&lt;br /&gt;
  getting the origin of the level/npc where the player is in&lt;br /&gt;
&lt;br /&gt;
  This command is good for all kinds of layers or moving&lt;br /&gt;
  objects, together with the setshape2 command you can do&lt;br /&gt;
  levels-in-levels things. It can be used for bridges,&lt;br /&gt;
  ships, baloons, platforms in quests. Don't forget to detach the&lt;br /&gt;
  player when he should go back to the normal level. The&lt;br /&gt;
  position of the player is not saved when he is on such&lt;br /&gt;
  an npc.&lt;br /&gt;
  This command is only allowed/enabled for upgraded servers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 detachplayer&lt;br /&gt;
  Puts the player back into the normal level&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Showimg/show text===&lt;br /&gt;
&lt;br /&gt;
 showimg colors,layer, and zoom is sent to other players (even&lt;br /&gt;
  when the layer is 4, then only values between 0 and 440 allowed)&lt;br /&gt;
&lt;br /&gt;
 showing text with showimg&lt;br /&gt;
  you can do showimg 1,@Hello!,x,y; do show text; setting&lt;br /&gt;
  font and style is possible by doing showimg index,@font@style@text,x,y;&lt;br /&gt;
  (style: characters from 'bicus', b-bold, i-italic, c-centered,u-underline,&lt;br /&gt;
  s-strikeout); for change the view of the text use the commands&lt;br /&gt;
  changeimgzoom,changeimgcolors&lt;br /&gt;
&lt;br /&gt;
 showimg works now server-side, layer 4 works too&lt;br /&gt;
&lt;br /&gt;
 weaponscount variable, #w(index) gives you the weapon names,&lt;br /&gt;
  #W(index) the weapon images; you can assign values to selectedweapon&lt;br /&gt;
  to change the selected weapon of the players; use&lt;br /&gt;
  enable/disableselectweapons if you want to disable the weapon&lt;br /&gt;
  select screen (Q)&lt;br /&gt;
&lt;br /&gt;
===Other features/bug fixes===&lt;br /&gt;
&lt;br /&gt;
 check for correct tiles when lifting/eating/slaying bushes&lt;br /&gt;
&lt;br /&gt;
 faster search for files (lookup in the filename list)&lt;br /&gt;
&lt;br /&gt;
 bombs and arrows go to near levels&lt;br /&gt;
&lt;br /&gt;
 chat text is always displayed at least 3 seconds&lt;br /&gt;
&lt;br /&gt;
 message codes possible in #K() (for inserting special characters&lt;br /&gt;
  into text)&lt;br /&gt;
&lt;br /&gt;
 the script command stopsound doesn't crash the game when sound&lt;br /&gt;
  is turned off&lt;br /&gt;
&lt;br /&gt;
==2.05==&lt;br /&gt;
&lt;br /&gt;
This time there are mainly bug fixes.&lt;br /&gt;
&lt;br /&gt;
 removed the problem with memory error&lt;br /&gt;
  2.2 (an error window that sometimes popups)&lt;br /&gt;
&lt;br /&gt;
 the graal window now shows the name of the&lt;br /&gt;
  server in the title bar&lt;br /&gt;
&lt;br /&gt;
 there is a new button in the script editor&lt;br /&gt;
  window that lets you format a text, it makes&lt;br /&gt;
  the script looking similar to the debugger&lt;br /&gt;
  screen, but is also formatting comments lines;&lt;br /&gt;
  it's not perfect but can help a little bit&lt;br /&gt;
  for understanding scripts written by other&lt;br /&gt;
  people &lt;br /&gt;
&lt;br /&gt;
 setshape2 supports array variables for the tilestype&lt;br /&gt;
  array instead of only static arrays&lt;br /&gt;
&lt;br /&gt;
 when npcs do showimg (especially on the npcserver) then&lt;br /&gt;
  showimgs will not be deleted when you leave the level,&lt;br /&gt;
  so you still see it when reentering the level where&lt;br /&gt;
  the npcs stands&lt;br /&gt;
&lt;br /&gt;
 playing of sounds (playlooped) is stopped when switching a&lt;br /&gt;
  server&lt;br /&gt;
&lt;br /&gt;
 bombs don't destroy half bushes&lt;br /&gt;
&lt;br /&gt;
 new file format (exists since beginning of 2000 but was&lt;br /&gt;
  only available for newworld team):&lt;br /&gt;
  The new level format is text based. If you want to edit it&lt;br /&gt;
  outside of Graal, use a text editor which doesn't wrap lines.&lt;br /&gt;
  You automatically produce a file in the new format when you&lt;br /&gt;
  save to a file with ending .nw&lt;br /&gt;
  Those files are bigger than .graal files, but because it is&lt;br /&gt;
  text-based it is easier to edit parts of it (e.g. ncp script)&lt;br /&gt;
  without opening the game, or to write tools that&lt;br /&gt;
  do changes to the levels, like adding npcs to levels. The&lt;br /&gt;
  graal servers support that file format too, the data sent to&lt;br /&gt;
  the player is the same size like when using .graal files, so it&lt;br /&gt;
  will not make the game laggier&lt;br /&gt;
&lt;br /&gt;
  Format:&lt;br /&gt;
  It begins with the signature GLEVNW01.&lt;br /&gt;
  It can contain following data types:&lt;br /&gt;
&lt;br /&gt;
  * board lines:&lt;br /&gt;
&lt;br /&gt;
    BOARD x y width layerindex &amp;lt;tilesdata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    This is one line of the background layer. 'tilesdata' has a length if w*2&lt;br /&gt;
    characters; each tile is a 12bit-index into the tile list (pics1.png) and is&lt;br /&gt;
    encoded in two base64 characters (upper 6 bit first)&lt;br /&gt;
    base64: String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'&lt;br /&gt;
    so AA is tile 0, AB is tile 1, AC is tile 2, // is tile 4095 (=0xFFF)&lt;br /&gt;
&lt;br /&gt;
  * level links:&lt;br /&gt;
&lt;br /&gt;
    LINK &amp;lt;destination-level&amp;gt; x y width height newx newy&lt;br /&gt;
&lt;br /&gt;
    The link attributes are the same like in the link options window in Graal.&lt;br /&gt;
    destination-level, newx and newy must not contain spaces.&lt;br /&gt;
&lt;br /&gt;
  * signs:&lt;br /&gt;
&lt;br /&gt;
    SIGN x y&lt;br /&gt;
    text&lt;br /&gt;
    ...&lt;br /&gt;
    SIGNEND&lt;br /&gt;
&lt;br /&gt;
    Signs may be empty, but SIGNEND must always be there.&lt;br /&gt;
&lt;br /&gt;
  * npcs:&lt;br /&gt;
&lt;br /&gt;
    NPC imagefilename x y&lt;br /&gt;
    script&lt;br /&gt;
    ...&lt;br /&gt;
    NPCEND&lt;br /&gt;
&lt;br /&gt;
    If the npc doesn't have a filename (invisible npc), then write '-' for imagefilename. &lt;br /&gt;
    x and y may be floating point values. The npc script may be empty, but NPCEND&lt;br /&gt;
    must always be there &lt;br /&gt;
&lt;br /&gt;
  * baddies:&lt;br /&gt;
&lt;br /&gt;
    BADDY x y type&lt;br /&gt;
    attackverse&lt;br /&gt;
    hurtverse&lt;br /&gt;
    winverse&lt;br /&gt;
    BADDYEND&lt;br /&gt;
&lt;br /&gt;
    'type' is the baddy name (graysoldier ... dragon ) or index (0...9). You don't need&lt;br /&gt;
    to write all 3 verses, it's also possible to only write attackverse+hurtverse or only&lt;br /&gt;
    attackverse, but BADDYEND must always be there.&lt;br /&gt;
&lt;br /&gt;
  * chests:&lt;br /&gt;
&lt;br /&gt;
    CHEST x y item signindex&lt;br /&gt;
&lt;br /&gt;
    item is the item name (greenrupee ... spinattack) or item index (0...24)&lt;br /&gt;
&lt;br /&gt;
==2.052==&lt;br /&gt;
&lt;br /&gt;
 the script variable playerscount is fixed&lt;br /&gt;
  (was not working for npc weapons)&lt;br /&gt;
&lt;br /&gt;
 when you create a new level then the current&lt;br /&gt;
  background tile is used for the background (instead&lt;br /&gt;
  of a black tile)&lt;br /&gt;
&lt;br /&gt;
 when switching to other servers then the correct&lt;br /&gt;
  server name is displaying in the window title&lt;br /&gt;
&lt;br /&gt;
 openurl2 works more than one time&lt;br /&gt;
&lt;br /&gt;
 hidden npcs can use the command showimg&lt;br /&gt;
&lt;br /&gt;
 when the map is changed (script command setmap) then&lt;br /&gt;
  the new map is immediatelly applied&lt;br /&gt;
&lt;br /&gt;
 the little yellow hint window that shows the names&lt;br /&gt;
  of players on the minimap is hidden when you switch&lt;br /&gt;
  to other applications&lt;/div&gt;</summary>
		<author><name>Stefan</name></author>
	</entry>
</feed>